Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
14 KiB
14 KiB
Scratchpad — Teams V2 Improvements
- Plan slug:
teams-v2-improvements - Created:
2026-02-26 - Parent plan:
docs/plans/2026-02-26-teams-v2-org-hierarchy-operational-teams/
Decisions
- (2026-02-26) Reversing the original non-goal: "Team logos or custom team icons" — now adding team avatar infrastructure.
- (2026-02-26) Tab name changed from "Org Chart" to "Structure" (user confirmed).
- (2026-02-26) Node click in org chart opens UserDetails drawer (user confirmed) — reuses existing drawer pattern from UserList.
- (2026-02-26) Using ReactFlow for org chart (already installed v11.11.4, extensively used in workflow visualization).
- (2026-02-26) Merging two ViewSwitchers into one row in CardHeader — eliminates duplicate list/org toggle.
- (2026-02-26) Team avatars use existing
document_associations+EntityImageServicepattern — no new storage infrastructure needed. - (2026-02-26)
TeamAvatarcomponent follows exact pattern ofUserAvatar(thin wrapper aroundEntityAvatar). - (2026-02-26) Extract team logic from
MultiUserPickerinto a newMultiUserAndTeamPickercomponent (user confirmed). Follows the same pattern asUserPicker→UserAndTeamPicker.MultiUserPickerstays team-free. Call sites swap viateams-v2feature flag.
Discoveries / Constraints
- (2026-02-26)
EntityTypeis defined in 4 separate files that all need updating:packages/media/src/lib/avatarUtils.ts(canonical backend)packages/users/src/lib/avatarUtils.ts(user-specific copy)packages/formatting/src/avatarUtils.ts(formatting copy)packages/ui/src/components/EntityImageUpload.tsx(UI component)
- (2026-02-26)
document_associationsCHECK constraint currently allows:'asset','client','contact','contract','project_task','tenant','ticket','user'— need to add'team'. - (2026-02-26) Latest constraint migration:
server/migrations/20251020000001_add_document_folders_preview_and_contract_association.cjsusesNOT VALIDpattern. - (2026-02-26)
document_associationsis distributed in Citus — migration needsexports.config = { transaction: false }. - (2026-02-26)
reactflowv11.11.4 is already a dependency in both root and serverpackage.json. - (2026-02-26) ReactFlow needs dynamic import with
{ ssr: false }in Next.js — proven pattern inpackages/workflows/src/components/visualization/DynamicReactFlow.tsx. - (2026-02-26) Current org chart is simple recursive
<ul>list atUserManagement.tsxlines 535-589 (buildOrgTree) and 570-589 (renderOrgNode). - (2026-02-26) Two duplicate ViewSwitchers for list/org toggle exist at lines 668-673 (list view) and 701-705 (org view).
- (2026-02-26)
UserAndTeamPicker.tsxlines 404-407 uses hardcoded gray circle + TeamIcon — 1 location to update. - (2026-02-26)
MultiUserPicker.tsxhas 4 locations with hardcoded TeamIcon (lines ~352, ~376, ~465, ~641). - (2026-02-26)
MultiUserPickerhas team logic deeply baked in: team props (lines 34-37), team filtering (lines 143-150), team rendering in trigger (lines 348-389, 458-488), team rendering in dropdown (lines 614-649), stale value cleanup (lines 116-127). This logic will move toMultiUserAndTeamPicker. - (2026-02-26)
packages/teams/package.jsoncurrently only depends on@alga-psa/core,@alga-psa/db,@alga-psa/types,@alga-psa/validation. Needs:@alga-psa/media,@alga-psa/auth,swr. - (2026-02-26) Teams package has
./actionsand./hooksexports in package.json already. - (2026-02-26)
useUserAvatar.tsis 29 lines — SWR hook pattern to replicate for teams. - (2026-02-26) User avatar actions in
userActions.tslines 1019-1179 —uploadUserAvatar,deleteUserAvatar— pattern to follow.
Links / References
- Original teams-v2 plan:
docs/plans/2026-02-26-teams-v2-org-hierarchy-operational-teams/ - EntityAvatar component:
packages/ui/src/components/EntityAvatar.tsx - UserAvatar component:
packages/ui/src/components/UserAvatar.tsx - EntityImageUpload component:
packages/ui/src/components/EntityImageUpload.tsx - EntityImageService:
packages/media/src/services/EntityImageService.ts - Avatar utils (media):
packages/media/src/lib/avatarUtils.ts - User avatar actions:
packages/users/src/actions/user-actions/userActions.ts(lines 1019-1179) - User avatar hook:
packages/users/src/hooks/useUserAvatar.ts - UserManagement:
server/src/components/settings/general/UserManagement.tsx - UserDetails drawer:
server/src/components/settings/general/UserDetails.tsx - TeamDetails:
server/src/components/settings/general/TeamDetails.tsx - UserAndTeamPicker:
packages/ui/src/components/UserAndTeamPicker.tsx - MultiUserPicker:
packages/ui/src/components/MultiUserPicker.tsx - MultiUserAndTeamPicker (new):
packages/ui/src/components/MultiUserAndTeamPicker.tsx - ViewSwitcher:
packages/ui/src/components/ViewSwitcher.tsx - DynamicReactFlow pattern:
packages/workflows/src/components/visualization/DynamicReactFlow.tsx - Workflow nodes:
packages/workflows/src/components/visualization/nodes/ - Team actions:
packages/teams/src/actions/team-actions/teamActions.ts - Team model:
packages/teams/src/models/team.ts
Open Questions
- (None remaining — all questions resolved during planning)
Updates
- (2026-02-27) Added migration
server/migrations/20260227000001_add_team_to_document_associations_entity_type.cjsto includeteamin document_associations entity_type constraint with NOT VALID and transaction disabled. - (2026-02-27) Added
teamto mediaEntityTypeunion inpackages/media/src/lib/avatarUtils.ts. - (2026-02-27) Added
teamto usersEntityTypeunion inpackages/users/src/lib/avatarUtils.ts. - (2026-02-27) Added
teamto formattingEntityTypeunion inpackages/formatting/src/avatarUtils.ts. - (2026-02-27) Added
teamto UIEntityTypeunion inpackages/ui/src/components/EntityImageUpload.tsx. - (2026-02-27) Added
getTeamAvatarUrlhelper topackages/media/src/lib/avatarUtils.ts. - (2026-02-27) Added
TeamAvatarcomponent inpackages/ui/src/components/TeamAvatar.tsxas a thinEntityAvatarwrapper. - (2026-02-27) Added
uploadTeamAvataraction with team update permission checks inpackages/teams/src/actions/team-actions/avatarActions.ts. - (2026-02-27) Added
deleteTeamAvataraction with team update permission checks inpackages/teams/src/actions/team-actions/avatarActions.ts. - (2026-02-27) Added
getTeamAvatarUrlActioninpackages/teams/src/actions/team-actions/avatarActions.ts. - (2026-02-27) Added
getTeamAvatarUrlsBatchActionwith batch query logic inpackages/teams/src/actions/team-actions/avatarActions.ts. - (2026-02-27) Exported team avatar actions from
packages/teams/src/actions/team-actions/index.ts. - (2026-02-27) Added
@alga-psa/media,@alga-psa/auth, andswrdependencies topackages/teams/package.json. - (2026-02-27) Added
useTeamAvatarSWR hook inpackages/teams/src/hooks/useTeamAvatar.ts. - (2026-02-27) Exported
useTeamAvatarfrompackages/teams/src/hooks/index.ts. - (2026-02-27) Added team avatar upload UI to
server/src/components/settings/general/TeamDetails.tsxusingEntityImageUpload. - (2026-02-27) Wired team avatar upload UI to refresh avatar URL after changes via
useTeamAvatar. - (2026-02-27) Added
OrgChartNodeReactFlow node component inserver/src/components/settings/general/org-chart/OrgChartNode.tsx. - (2026-02-27) Added
OrgChartFlowcomponent with ReactFlow canvas/provider inserver/src/components/settings/general/org-chart/OrgChartFlow.tsx. - (2026-02-27) Added
OrgChartlayout logic to build hierarchy fromreports_toand compute node positions inserver/src/components/settings/general/org-chart/OrgChart.tsx. - (2026-02-27) Added smoothstep edges between parent/child nodes in
OrgChartlayout. - (2026-02-27) Confirmed OrgChartFlow uses fitView, zoom/pan, and non-draggable nodes for org chart interaction.
- (2026-02-27) Wired OrgChart node clicks to open
UserDetailsviauseDrawer. - (2026-02-27) Added batch avatar URL fetch for org chart nodes via
getUserAvatarUrlsBatchAction. - (2026-02-27) Switched OrgChart flow rendering to dynamic import with
ssr: falsefor ReactFlow safety. - (2026-02-27) Merged list/structure and portal-type ViewSwitchers into the CardHeader row in
UserManagement. - (2026-02-27) Removed duplicate list/structure ViewSwitcher from list view toolbar in
UserManagement. - (2026-02-27) Removed duplicate org view ViewSwitcher row from
UserManagement. - (2026-02-27) Renamed org chart ViewSwitcher label to "Structure" in
UserManagement. - (2026-02-27) Replaced nested-list org chart rendering with
OrgChartcomponent inUserManagement. - (2026-02-27) Removed legacy
buildOrgTreeandrenderOrgNodehelpers fromUserManagement. - (2026-02-27) Confirmed Structure toggle and OrgChart rendering are gated behind the
teams-v2flag. - (2026-02-27) Swapped TeamIcon for
TeamAvatarinUserAndTeamPickerteam option rendering. - (2026-02-27) Added optional
getTeamAvatarUrlsBatchprop toUserAndTeamPicker. - (2026-02-27) Added team avatar batch fetching on dropdown open in
UserAndTeamPicker. - (2026-02-27) Created
MultiUserAndTeamPickercomponent as a copy ofMultiUserPickerinpackages/ui/src/components/MultiUserAndTeamPicker.tsx. - (2026-02-27) Replaced TeamIcon usages with
TeamAvatarinMultiUserAndTeamPicker. - (2026-02-27) Added team avatar batch fetching and
getTeamAvatarUrlsBatchprop toMultiUserAndTeamPicker. - (2026-02-27) Removed team props and rendering logic from
MultiUserPickerto make it user-only. - (2026-02-27) Swapped ticket filter assignee picker to
MultiUserAndTeamPickerwhenteams-v2is enabled. - (2026-02-27) Passed
getTeamAvatarUrlsBatchActioninto ticket filterMultiUserAndTeamPicker. - (2026-02-27) Team pickers now rely on
TeamAvatarfallback initials instead of generic gray icons. - (2026-02-27) Added vitest coverage for migration constraint update (T082).
- (2026-02-27) Marked T083 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T084 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T085 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T086 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T087 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T088 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T089 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T090 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T091 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T092 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T093 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T094 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T095 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T096 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T097 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T098 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T099 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T100 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T101 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T102 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T103 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T104 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T105 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T106 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T107 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T108 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T109 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T110 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T111 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T112 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T113 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T114 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T115 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T116 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T117 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T118 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T119 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T120 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T121 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T122 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T123 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T124 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T125 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T126 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T127 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T128 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T129 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T130 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T131 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T132 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T133 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T134 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T135 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T136 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T137 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T138 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T139 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T140 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T141 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T142 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T143 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T144 covered by teams-v2 improvements test suite.
- (2026-02-27) Marked T145 covered by teams-v2 improvements test suite.
- (2026-02-27) Added team avatar batch action to ticket detail picker (T146).
- (2026-02-27) Marked ticket filter team avatar batch coverage (T147).
- (2026-02-27) Marked no-TeamIcon picker coverage (T148).