@orthacms/workspaces-admin 0.0.0-reserve.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/lib/api/useAddWorkspaceContent/index.d.ts +15 -0
- package/dist/lib/api/useAddWorkspaceContent/index.d.ts.map +1 -0
- package/dist/lib/api/useAddWorkspaceMember/index.d.ts +14 -0
- package/dist/lib/api/useAddWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/api/useContentTypes/index.d.ts +10 -0
- package/dist/lib/api/useContentTypes/index.d.ts.map +1 -0
- package/dist/lib/api/useCreateWorkspace/index.d.ts +20 -0
- package/dist/lib/api/useCreateWorkspace/index.d.ts.map +1 -0
- package/dist/lib/api/useDeleteWorkspace/index.d.ts +13 -0
- package/dist/lib/api/useDeleteWorkspace/index.d.ts.map +1 -0
- package/dist/lib/api/useRemoveWorkspaceContent/index.d.ts +15 -0
- package/dist/lib/api/useRemoveWorkspaceContent/index.d.ts.map +1 -0
- package/dist/lib/api/useRemoveWorkspaceMember/index.d.ts +13 -0
- package/dist/lib/api/useRemoveWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/api/useSetWorkspaceStatus/index.d.ts +14 -0
- package/dist/lib/api/useSetWorkspaceStatus/index.d.ts.map +1 -0
- package/dist/lib/api/useSlugAvailability/index.d.ts +10 -0
- package/dist/lib/api/useSlugAvailability/index.d.ts.map +1 -0
- package/dist/lib/api/useUpdateWorkspace/index.d.ts +23 -0
- package/dist/lib/api/useUpdateWorkspace/index.d.ts.map +1 -0
- package/dist/lib/api/useUsersSearch/index.d.ts +17 -0
- package/dist/lib/api/useUsersSearch/index.d.ts.map +1 -0
- package/dist/lib/api/useWorkspaceContentCount/index.d.ts +8 -0
- package/dist/lib/api/useWorkspaceContentCount/index.d.ts.map +1 -0
- package/dist/lib/api/useWorkspaceEntryCount/index.d.ts +8 -0
- package/dist/lib/api/useWorkspaceEntryCount/index.d.ts.map +1 -0
- package/dist/lib/api/useWorkspaces/index.d.ts +30 -0
- package/dist/lib/api/useWorkspaces/index.d.ts.map +1 -0
- package/dist/lib/application/useAddWorkspaceContent/index.d.ts +9 -0
- package/dist/lib/application/useAddWorkspaceContent/index.d.ts.map +1 -0
- package/dist/lib/application/useAddWorkspaceContent/index.js +15 -0
- package/dist/lib/application/useAddWorkspaceMember/index.d.ts +8 -0
- package/dist/lib/application/useAddWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/application/useAddWorkspaceMember/index.js +14 -0
- package/dist/lib/application/useContentTypes/index.d.ts +9 -0
- package/dist/lib/application/useContentTypes/index.d.ts.map +1 -0
- package/dist/lib/application/useContentTypes/index.js +16 -0
- package/dist/lib/application/useCreateWorkspace/index.d.ts +20 -0
- package/dist/lib/application/useCreateWorkspace/index.d.ts.map +1 -0
- package/dist/lib/application/useCreateWorkspace/index.js +44 -0
- package/dist/lib/application/useCreateWorkspaceFlow/index.d.ts +23 -0
- package/dist/lib/application/useCreateWorkspaceFlow/index.d.ts.map +1 -0
- package/dist/lib/application/useCreateWorkspaceFlow/index.js +81 -0
- package/dist/lib/application/useDeleteWorkspace/index.d.ts +13 -0
- package/dist/lib/application/useDeleteWorkspace/index.d.ts.map +1 -0
- package/dist/lib/application/useDeleteWorkspace/index.js +23 -0
- package/dist/lib/application/useRemoveWorkspaceContent/index.d.ts +9 -0
- package/dist/lib/application/useRemoveWorkspaceContent/index.d.ts.map +1 -0
- package/dist/lib/application/useRemoveWorkspaceContent/index.js +15 -0
- package/dist/lib/application/useRemoveWorkspaceMember/index.d.ts +8 -0
- package/dist/lib/application/useRemoveWorkspaceMember/index.d.ts.map +1 -0
- package/dist/lib/application/useRemoveWorkspaceMember/index.js +14 -0
- package/dist/lib/application/useSetWorkspaceStatus/index.d.ts +9 -0
- package/dist/lib/application/useSetWorkspaceStatus/index.d.ts.map +1 -0
- package/dist/lib/application/useSetWorkspaceStatus/index.js +15 -0
- package/dist/lib/application/useSlugAvailability/index.d.ts +18 -0
- package/dist/lib/application/useSlugAvailability/index.d.ts.map +1 -0
- package/dist/lib/application/useSlugAvailability/index.js +39 -0
- package/dist/lib/application/useUpdateWorkspace/index.d.ts +9 -0
- package/dist/lib/application/useUpdateWorkspace/index.d.ts.map +1 -0
- package/dist/lib/application/useUpdateWorkspace/index.js +15 -0
- package/dist/lib/application/useUsersSearch/index.d.ts +18 -0
- package/dist/lib/application/useUsersSearch/index.d.ts.map +1 -0
- package/dist/lib/application/useUsersSearch/index.js +24 -0
- package/dist/lib/application/useWorkspaceContentCount/index.d.ts +8 -0
- package/dist/lib/application/useWorkspaceContentCount/index.d.ts.map +1 -0
- package/dist/lib/application/useWorkspaceContentCount/index.js +17 -0
- package/dist/lib/application/useWorkspaceEntryCount/index.d.ts +8 -0
- package/dist/lib/application/useWorkspaceEntryCount/index.d.ts.map +1 -0
- package/dist/lib/application/useWorkspaceEntryCount/index.js +17 -0
- package/dist/lib/application/useWorkspaces/index.d.ts +5 -0
- package/dist/lib/application/useWorkspaces/index.d.ts.map +1 -0
- package/dist/lib/application/useWorkspaces/index.js +11 -0
- package/dist/lib/components/BlockingConfirmDialog/index.d.ts +41 -0
- package/dist/lib/components/BlockingConfirmDialog/index.d.ts.map +1 -0
- package/dist/lib/components/ColorSwatchRow/index.d.ts +15 -0
- package/dist/lib/components/ColorSwatchRow/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/ColorSwatchRow/index.d.ts +15 -0
- package/dist/lib/components/CreateWorkspaceWizard/ColorSwatchRow/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/ContentStep/ModeTiles/index.d.ts +11 -0
- package/dist/lib/components/CreateWorkspaceWizard/ContentStep/ModeTiles/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/ContentStep/ResourceSection/index.d.ts +48 -0
- package/dist/lib/components/CreateWorkspaceWizard/ContentStep/ResourceSection/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/ContentStep/index.d.ts +23 -0
- package/dist/lib/components/CreateWorkspaceWizard/ContentStep/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/IdentityFields/index.d.ts +17 -0
- package/dist/lib/components/CreateWorkspaceWizard/IdentityFields/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/MembersStep/MemberRow/index.d.ts +14 -0
- package/dist/lib/components/CreateWorkspaceWizard/MembersStep/MemberRow/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/MembersStep/MemberTypeahead/index.d.ts +15 -0
- package/dist/lib/components/CreateWorkspaceWizard/MembersStep/MemberTypeahead/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/MembersStep/index.d.ts +17 -0
- package/dist/lib/components/CreateWorkspaceWizard/MembersStep/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/Monogram/index.d.ts +17 -0
- package/dist/lib/components/CreateWorkspaceWizard/Monogram/index.d.ts.map +1 -0
- package/dist/lib/components/CreateWorkspaceWizard/SlugField/index.d.ts +23 -0
- package/dist/lib/components/CreateWorkspaceWizard/SlugField/index.d.ts.map +1 -0
- package/dist/lib/components/StatusChip/index.d.ts +9 -0
- package/dist/lib/components/StatusChip/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceAvatar/index.d.ts +20 -0
- package/dist/lib/components/WorkspaceAvatar/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceCard/MemberStack/MemberListPopover/index.d.ts +9 -0
- package/dist/lib/components/WorkspaceCard/MemberStack/MemberListPopover/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceCard/MemberStack/index.d.ts +11 -0
- package/dist/lib/components/WorkspaceCard/MemberStack/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceCard/StatusChip/index.d.ts +9 -0
- package/dist/lib/components/WorkspaceCard/StatusChip/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceCard/index.d.ts +15 -0
- package/dist/lib/components/WorkspaceCard/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceCommands/index.d.ts +8 -0
- package/dist/lib/components/WorkspaceCommands/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceContentSettings/AddContentDialog/index.d.ts +26 -0
- package/dist/lib/components/WorkspaceContentSettings/AddContentDialog/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceContentSettings/GrantedContentGroup/index.d.ts +21 -0
- package/dist/lib/components/WorkspaceContentSettings/GrantedContentGroup/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceContentSettings/GrantedContentRow/index.d.ts +26 -0
- package/dist/lib/components/WorkspaceContentSettings/GrantedContentRow/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceContentSettings/RemoveContentDialog/index.d.ts +25 -0
- package/dist/lib/components/WorkspaceContentSettings/RemoveContentDialog/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceContentSettings/index.d.ts +25 -0
- package/dist/lib/components/WorkspaceContentSettings/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceDangerSettings/DeleteWorkspaceDialog/index.d.ts +22 -0
- package/dist/lib/components/WorkspaceDangerSettings/DeleteWorkspaceDialog/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceDangerSettings/index.d.ts +18 -0
- package/dist/lib/components/WorkspaceDangerSettings/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceGeneralSettings/index.d.ts +18 -0
- package/dist/lib/components/WorkspaceGeneralSettings/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceMembersSettings/MemberDirectorySearch/index.d.ts +18 -0
- package/dist/lib/components/WorkspaceMembersSettings/MemberDirectorySearch/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceMembersSettings/MemberListRow/index.d.ts +17 -0
- package/dist/lib/components/WorkspaceMembersSettings/MemberListRow/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceMembersSettings/index.d.ts +16 -0
- package/dist/lib/components/WorkspaceMembersSettings/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceNav/WorkspaceNavButton/index.d.ts +14 -0
- package/dist/lib/components/WorkspaceNav/WorkspaceNavButton/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceNav/WorkspaceSwitcher/index.d.ts +16 -0
- package/dist/lib/components/WorkspaceNav/WorkspaceSwitcher/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceNav/index.d.ts +14 -0
- package/dist/lib/components/WorkspaceNav/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceSettingsRail/index.d.ts +14 -0
- package/dist/lib/components/WorkspaceSettingsRail/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceSettingsTabs/index.d.ts +14 -0
- package/dist/lib/components/WorkspaceSettingsTabs/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceSettingsTopBar/index.d.ts +8 -0
- package/dist/lib/components/WorkspaceSettingsTopBar/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceShell/NewWorkspaceButton/index.d.ts +7 -0
- package/dist/lib/components/WorkspaceShell/NewWorkspaceButton/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceShell/RailTooltip/index.d.ts +22 -0
- package/dist/lib/components/WorkspaceShell/RailTooltip/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceShell/WorkspaceRail/index.d.ts +17 -0
- package/dist/lib/components/WorkspaceShell/WorkspaceRail/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceShell/WorkspaceSidebarButton/index.d.ts +17 -0
- package/dist/lib/components/WorkspaceShell/WorkspaceSidebarButton/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceShell/WorkspaceSwitcher/WorkspaceSwitcherPopover/index.d.ts +26 -0
- package/dist/lib/components/WorkspaceShell/WorkspaceSwitcher/WorkspaceSwitcherPopover/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceShell/WorkspaceSwitcher/index.d.ts +17 -0
- package/dist/lib/components/WorkspaceShell/WorkspaceSwitcher/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceShell/index.d.ts +16 -0
- package/dist/lib/components/WorkspaceShell/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceStats/index.d.ts +9 -0
- package/dist/lib/components/WorkspaceStats/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspaceToolbar/index.d.ts +22 -0
- package/dist/lib/components/WorkspaceToolbar/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspacesEmpty/index.d.ts +18 -0
- package/dist/lib/components/WorkspacesEmpty/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspacesHomePanel/index.d.ts +7 -0
- package/dist/lib/components/WorkspacesHomePanel/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspacesNavSection/index.d.ts +9 -0
- package/dist/lib/components/WorkspacesNavSection/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspacesSkeleton/index.d.ts +36 -0
- package/dist/lib/components/WorkspacesSkeleton/index.d.ts.map +1 -0
- package/dist/lib/components/WorkspacesTable/index.d.ts +12 -0
- package/dist/lib/components/WorkspacesTable/index.d.ts.map +1 -0
- package/dist/lib/domain/isActiveWorkspace/index.d.ts +9 -0
- package/dist/lib/domain/isActiveWorkspace/index.d.ts.map +1 -0
- package/dist/lib/domain/isActiveWorkspace/index.js +9 -0
- package/dist/lib/domain/permissions/index.d.ts +7 -0
- package/dist/lib/domain/permissions/index.d.ts.map +1 -0
- package/dist/lib/domain/permissions/index.js +6 -0
- package/dist/lib/domain/resourceSelection/index.d.ts +18 -0
- package/dist/lib/domain/resourceSelection/index.d.ts.map +1 -0
- package/dist/lib/domain/resourceSelection/index.js +49 -0
- package/dist/lib/domain/slug/index.d.ts +25 -0
- package/dist/lib/domain/slug/index.d.ts.map +1 -0
- package/dist/lib/domain/slug/index.js +45 -0
- package/dist/lib/domain/types/wizard/index.d.ts +126 -0
- package/dist/lib/domain/types/wizard/index.d.ts.map +1 -0
- package/dist/lib/domain/types/wizard/index.js +21 -0
- package/dist/lib/domain/types/workspace/index.d.ts +42 -0
- package/dist/lib/domain/types/workspace/index.d.ts.map +1 -0
- package/dist/lib/domain/types/workspace/index.js +1 -0
- package/dist/lib/domain/workspaceLimits/index.d.ts +23 -0
- package/dist/lib/domain/workspaceLimits/index.d.ts.map +1 -0
- package/dist/lib/domain/workspaceLimits/index.js +22 -0
- package/dist/lib/hooks/useBasicsSchema/index.d.ts +14 -0
- package/dist/lib/hooks/useBasicsSchema/index.d.ts.map +1 -0
- package/dist/lib/hooks/useResourceSelection/index.d.ts +21 -0
- package/dist/lib/hooks/useResourceSelection/index.d.ts.map +1 -0
- package/dist/lib/hooks/useSlug/index.d.ts +28 -0
- package/dist/lib/hooks/useSlug/index.d.ts.map +1 -0
- package/dist/lib/hooks/useWizard/index.d.ts +57 -0
- package/dist/lib/hooks/useWizard/index.d.ts.map +1 -0
- package/dist/lib/hooks/useWorkspaceProfileSchema/index.d.ts +13 -0
- package/dist/lib/hooks/useWorkspaceProfileSchema/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/buildCreateWorkspaceBody/index.d.ts +12 -0
- package/dist/lib/infrastructure/buildCreateWorkspaceBody/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/buildCreateWorkspaceBody/index.js +27 -0
- package/dist/lib/infrastructure/httpWorkspaceGateway/index.d.ts +10 -0
- package/dist/lib/infrastructure/httpWorkspaceGateway/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/httpWorkspaceGateway/index.js +149 -0
- package/dist/lib/infrastructure/isConflict/index.d.ts +8 -0
- package/dist/lib/infrastructure/isConflict/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/isConflict/index.js +12 -0
- package/dist/lib/infrastructure/workspaceGateway/index.d.ts +90 -0
- package/dist/lib/infrastructure/workspaceGateway/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/workspaceGateway/index.js +1 -0
- package/dist/lib/infrastructure/workspaceMapper/index.d.ts +28 -0
- package/dist/lib/infrastructure/workspaceMapper/index.d.ts.map +1 -0
- package/dist/lib/infrastructure/workspaceMapper/index.js +36 -0
- package/dist/lib/pages/CreateWorkspacePage/index.d.ts +7 -0
- package/dist/lib/pages/CreateWorkspacePage/index.d.ts.map +1 -0
- package/dist/lib/pages/WorkspaceSettingsPage/index.d.ts +12 -0
- package/dist/lib/pages/WorkspaceSettingsPage/index.d.ts.map +1 -0
- package/dist/lib/pages/WorkspacesPage/index.d.ts +7 -0
- package/dist/lib/pages/WorkspacesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/BlockingConfirmDialog/index.d.ts +41 -0
- package/dist/lib/presentation/components/BlockingConfirmDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/BlockingConfirmDialog/index.js +17 -0
- package/dist/lib/presentation/components/ColorSwatchRow/index.d.ts +22 -0
- package/dist/lib/presentation/components/ColorSwatchRow/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/ColorSwatchRow/index.js +70 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/ContentStep/ModeTiles/index.d.ts +11 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/ContentStep/ModeTiles/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/ContentStep/ModeTiles/index.js +47 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/ContentStep/ResourceSection/index.d.ts +48 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/ContentStep/ResourceSection/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/ContentStep/ResourceSection/index.js +32 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/ContentStep/index.d.ts +23 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/ContentStep/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/ContentStep/index.js +128 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/IdentityFields/index.d.ts +17 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/IdentityFields/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/IdentityFields/index.js +70 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/MembersStep/MemberRow/index.d.ts +14 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/MembersStep/MemberRow/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/MembersStep/MemberRow/index.js +25 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/MembersStep/MemberTypeahead/index.d.ts +15 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/MembersStep/MemberTypeahead/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/MembersStep/MemberTypeahead/index.js +112 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/MembersStep/index.d.ts +17 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/MembersStep/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/MembersStep/index.js +35 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/Monogram/index.d.ts +17 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/Monogram/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/Monogram/index.js +11 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/SlugField/index.d.ts +23 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/SlugField/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/CreateWorkspaceWizard/SlugField/index.js +68 -0
- package/dist/lib/presentation/components/StatusChip/index.d.ts +9 -0
- package/dist/lib/presentation/components/StatusChip/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/StatusChip/index.js +23 -0
- package/dist/lib/presentation/components/WorkspaceAvatar/index.d.ts +20 -0
- package/dist/lib/presentation/components/WorkspaceAvatar/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceAvatar/index.js +10 -0
- package/dist/lib/presentation/components/WorkspaceCommands/index.d.ts +8 -0
- package/dist/lib/presentation/components/WorkspaceCommands/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceCommands/index.js +34 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/AddContentDialog/index.d.ts +26 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/AddContentDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/AddContentDialog/index.js +89 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentGroup/index.d.ts +21 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentGroup/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentGroup/index.js +11 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentRow/index.d.ts +26 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentRow/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentRow/index.js +31 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/RemoveContentDialog/index.d.ts +25 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/RemoveContentDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/RemoveContentDialog/index.js +48 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/index.d.ts +25 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceContentSettings/index.js +173 -0
- package/dist/lib/presentation/components/WorkspaceDangerSettings/DeleteWorkspaceDialog/index.d.ts +22 -0
- package/dist/lib/presentation/components/WorkspaceDangerSettings/DeleteWorkspaceDialog/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceDangerSettings/DeleteWorkspaceDialog/index.js +52 -0
- package/dist/lib/presentation/components/WorkspaceDangerSettings/index.d.ts +18 -0
- package/dist/lib/presentation/components/WorkspaceDangerSettings/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceDangerSettings/index.js +150 -0
- package/dist/lib/presentation/components/WorkspaceGeneralSettings/WorkspaceIdField/index.d.ts +19 -0
- package/dist/lib/presentation/components/WorkspaceGeneralSettings/WorkspaceIdField/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceGeneralSettings/WorkspaceIdField/index.js +72 -0
- package/dist/lib/presentation/components/WorkspaceGeneralSettings/index.d.ts +18 -0
- package/dist/lib/presentation/components/WorkspaceGeneralSettings/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceGeneralSettings/index.js +131 -0
- package/dist/lib/presentation/components/WorkspaceMembersSettings/MemberDirectorySearch/index.d.ts +18 -0
- package/dist/lib/presentation/components/WorkspaceMembersSettings/MemberDirectorySearch/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceMembersSettings/MemberDirectorySearch/index.js +65 -0
- package/dist/lib/presentation/components/WorkspaceMembersSettings/MemberListRow/index.d.ts +17 -0
- package/dist/lib/presentation/components/WorkspaceMembersSettings/MemberListRow/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceMembersSettings/MemberListRow/index.js +22 -0
- package/dist/lib/presentation/components/WorkspaceMembersSettings/index.d.ts +16 -0
- package/dist/lib/presentation/components/WorkspaceMembersSettings/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceMembersSettings/index.js +127 -0
- package/dist/lib/presentation/components/WorkspaceNav/WorkspaceNavButton/index.d.ts +14 -0
- package/dist/lib/presentation/components/WorkspaceNav/WorkspaceNavButton/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceNav/WorkspaceNavButton/index.js +30 -0
- package/dist/lib/presentation/components/WorkspaceNav/WorkspaceSwitcher/index.d.ts +16 -0
- package/dist/lib/presentation/components/WorkspaceNav/WorkspaceSwitcher/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceNav/WorkspaceSwitcher/index.js +81 -0
- package/dist/lib/presentation/components/WorkspaceNav/index.d.ts +14 -0
- package/dist/lib/presentation/components/WorkspaceNav/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceNav/index.js +51 -0
- package/dist/lib/presentation/components/WorkspaceSettingsTabs/index.d.ts +14 -0
- package/dist/lib/presentation/components/WorkspaceSettingsTabs/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceSettingsTabs/index.js +66 -0
- package/dist/lib/presentation/components/WorkspaceSettingsTopBar/index.d.ts +8 -0
- package/dist/lib/presentation/components/WorkspaceSettingsTopBar/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceSettingsTopBar/index.js +57 -0
- package/dist/lib/presentation/components/WorkspaceShell/index.d.ts +16 -0
- package/dist/lib/presentation/components/WorkspaceShell/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceShell/index.js +100 -0
- package/dist/lib/presentation/components/WorkspaceStats/index.d.ts +9 -0
- package/dist/lib/presentation/components/WorkspaceStats/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceStats/index.js +48 -0
- package/dist/lib/presentation/components/WorkspaceToolbar/index.d.ts +22 -0
- package/dist/lib/presentation/components/WorkspaceToolbar/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspaceToolbar/index.js +73 -0
- package/dist/lib/presentation/components/WorkspacesEmpty/index.d.ts +18 -0
- package/dist/lib/presentation/components/WorkspacesEmpty/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspacesEmpty/index.js +42 -0
- package/dist/lib/presentation/components/WorkspacesHomePanel/index.d.ts +7 -0
- package/dist/lib/presentation/components/WorkspacesHomePanel/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspacesHomePanel/index.js +50 -0
- package/dist/lib/presentation/components/WorkspacesNavSection/index.d.ts +15 -0
- package/dist/lib/presentation/components/WorkspacesNavSection/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspacesNavSection/index.js +76 -0
- package/dist/lib/presentation/components/WorkspacesSkeleton/index.d.ts +49 -0
- package/dist/lib/presentation/components/WorkspacesSkeleton/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspacesSkeleton/index.js +94 -0
- package/dist/lib/presentation/components/WorkspacesTable/index.d.ts +12 -0
- package/dist/lib/presentation/components/WorkspacesTable/index.d.ts.map +1 -0
- package/dist/lib/presentation/components/WorkspacesTable/index.js +58 -0
- package/dist/lib/presentation/currentWorkspace/index.d.ts +17 -0
- package/dist/lib/presentation/currentWorkspace/index.d.ts.map +1 -0
- package/dist/lib/presentation/currentWorkspace/index.js +44 -0
- package/dist/lib/presentation/hooks/useBasicsSchema/index.d.ts +17 -0
- package/dist/lib/presentation/hooks/useBasicsSchema/index.d.ts.map +1 -0
- package/dist/lib/presentation/hooks/useBasicsSchema/index.js +71 -0
- package/dist/lib/presentation/hooks/useComboboxList/index.d.ts +44 -0
- package/dist/lib/presentation/hooks/useComboboxList/index.d.ts.map +1 -0
- package/dist/lib/presentation/hooks/useComboboxList/index.js +62 -0
- package/dist/lib/presentation/hooks/useRedirectNotice/index.d.ts +24 -0
- package/dist/lib/presentation/hooks/useRedirectNotice/index.d.ts.map +1 -0
- package/dist/lib/presentation/hooks/useRedirectNotice/index.js +37 -0
- package/dist/lib/presentation/hooks/useResourceSelection/index.d.ts +21 -0
- package/dist/lib/presentation/hooks/useResourceSelection/index.d.ts.map +1 -0
- package/dist/lib/presentation/hooks/useResourceSelection/index.js +16 -0
- package/dist/lib/presentation/hooks/useSlug/index.d.ts +28 -0
- package/dist/lib/presentation/hooks/useSlug/index.d.ts.map +1 -0
- package/dist/lib/presentation/hooks/useSlug/index.js +18 -0
- package/dist/lib/presentation/hooks/useWizard/index.d.ts +60 -0
- package/dist/lib/presentation/hooks/useWizard/index.d.ts.map +1 -0
- package/dist/lib/presentation/hooks/useWizard/index.js +93 -0
- package/dist/lib/presentation/hooks/useWorkspaceProfileSchema/index.d.ts +16 -0
- package/dist/lib/presentation/hooks/useWorkspaceProfileSchema/index.d.ts.map +1 -0
- package/dist/lib/presentation/hooks/useWorkspaceProfileSchema/index.js +53 -0
- package/dist/lib/presentation/pages/CreateWorkspacePage/index.d.ts +7 -0
- package/dist/lib/presentation/pages/CreateWorkspacePage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/CreateWorkspacePage/index.js +248 -0
- package/dist/lib/presentation/pages/WorkspaceSettingsPage/index.d.ts +12 -0
- package/dist/lib/presentation/pages/WorkspaceSettingsPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/WorkspaceSettingsPage/index.js +69 -0
- package/dist/lib/presentation/pages/WorkspacesPage/index.d.ts +7 -0
- package/dist/lib/presentation/pages/WorkspacesPage/index.d.ts.map +1 -0
- package/dist/lib/presentation/pages/WorkspacesPage/index.js +112 -0
- package/dist/lib/presentation/slots/workspaceSlots/index.d.ts +101 -0
- package/dist/lib/presentation/slots/workspaceSlots/index.d.ts.map +1 -0
- package/dist/lib/presentation/slots/workspaceSlots/index.js +25 -0
- package/dist/lib/presentation/workspacesPlugin/index.d.ts +31 -0
- package/dist/lib/presentation/workspacesPlugin/index.d.ts.map +1 -0
- package/dist/lib/presentation/workspacesPlugin/index.js +151 -0
- package/dist/lib/slots/workspaceSlots/index.d.ts +101 -0
- package/dist/lib/slots/workspaceSlots/index.d.ts.map +1 -0
- package/dist/lib/types/wizard/index.d.ts +119 -0
- package/dist/lib/types/wizard/index.d.ts.map +1 -0
- package/dist/lib/types/workspace/index.d.ts +42 -0
- package/dist/lib/types/workspace/index.d.ts.map +1 -0
- package/dist/lib/utils/buildCreateWorkspaceBody/index.d.ts +12 -0
- package/dist/lib/utils/buildCreateWorkspaceBody/index.d.ts.map +1 -0
- package/dist/lib/utils/currentWorkspace/index.d.ts +17 -0
- package/dist/lib/utils/currentWorkspace/index.d.ts.map +1 -0
- package/dist/lib/utils/isActiveWorkspace/index.d.ts +9 -0
- package/dist/lib/utils/isActiveWorkspace/index.d.ts.map +1 -0
- package/dist/lib/utils/isConflict/index.d.ts +8 -0
- package/dist/lib/utils/isConflict/index.d.ts.map +1 -0
- package/dist/lib/utils/permissions/index.d.ts +7 -0
- package/dist/lib/utils/permissions/index.d.ts.map +1 -0
- package/dist/lib/utils/radioGroupKeydown/index.d.ts +15 -0
- package/dist/lib/utils/radioGroupKeydown/index.d.ts.map +1 -0
- package/dist/lib/utils/resourceSelection/index.d.ts +18 -0
- package/dist/lib/utils/resourceSelection/index.d.ts.map +1 -0
- package/dist/lib/utils/workspacesPlugin/index.d.ts +31 -0
- package/dist/lib/utils/workspacesPlugin/index.d.ts.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
4
|
+
import { FileText, Layers, Search } from 'lucide-react';
|
|
5
|
+
import { Badge, Button, Checkbox, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, InputGroup, InputGroupAddon, InputGroupInput, Spinner } from '@orthacms/design-system';
|
|
6
|
+
import { isPage } from '..';
|
|
7
|
+
const messages = defineMessages({
|
|
8
|
+
searchPlaceholder: {
|
|
9
|
+
id: 'workspaces.settings.content.addDialog.searchPlaceholder',
|
|
10
|
+
defaultMessage: 'Search content types'
|
|
11
|
+
},
|
|
12
|
+
collection: {
|
|
13
|
+
id: 'workspaces.settings.content.kindCollection',
|
|
14
|
+
defaultMessage: 'Collection'
|
|
15
|
+
},
|
|
16
|
+
single: {
|
|
17
|
+
id: 'workspaces.settings.content.kindSingle',
|
|
18
|
+
defaultMessage: 'Page'
|
|
19
|
+
},
|
|
20
|
+
noMatches: {
|
|
21
|
+
id: 'workspaces.settings.content.addDialog.noMatches',
|
|
22
|
+
defaultMessage: 'No content types match your search.'
|
|
23
|
+
},
|
|
24
|
+
allGranted: {
|
|
25
|
+
id: 'workspaces.settings.content.allGranted',
|
|
26
|
+
defaultMessage: 'Every content type is already granted.'
|
|
27
|
+
},
|
|
28
|
+
cancel: {
|
|
29
|
+
id: 'workspaces.settings.content.addDialog.cancel',
|
|
30
|
+
defaultMessage: 'Cancel'
|
|
31
|
+
},
|
|
32
|
+
save: {
|
|
33
|
+
id: 'workspaces.settings.content.addDialog.save',
|
|
34
|
+
defaultMessage: '{count, plural, =0 {Add} one {Add # type} other {Add # types}}'
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* A search + multi-select dialog for granting content types of a **single kind**
|
|
39
|
+
* (collections or pages — the caller pre-filters `available` and labels it via
|
|
40
|
+
* `title`): type to filter, tick any number, then Add them in one go. Selection
|
|
41
|
+
* + query reset each time the dialog opens.
|
|
42
|
+
*/
|
|
43
|
+
export function AddContentDialog({ open, onOpenChange, title, description, available, onConfirm, busy = false }) {
|
|
44
|
+
const intl = useIntl();
|
|
45
|
+
const [query, setQuery] = useState('');
|
|
46
|
+
const [selected, setSelected] = useState(new Set());
|
|
47
|
+
// Reset the query + selection whenever the dialog (re)opens.
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (open) {
|
|
50
|
+
setQuery('');
|
|
51
|
+
setSelected(new Set());
|
|
52
|
+
}
|
|
53
|
+
}, [open]);
|
|
54
|
+
const filtered = useMemo(() => {
|
|
55
|
+
const q = query.trim().toLowerCase();
|
|
56
|
+
if (!q)
|
|
57
|
+
return available;
|
|
58
|
+
return available.filter((type) => [type.label, type.name, type.path]
|
|
59
|
+
.filter(Boolean)
|
|
60
|
+
.some((field) => field?.toLowerCase().includes(q)));
|
|
61
|
+
}, [available, query]);
|
|
62
|
+
const toggle = (slug) => {
|
|
63
|
+
setSelected((prev) => {
|
|
64
|
+
const next = new Set(prev);
|
|
65
|
+
if (next.has(slug))
|
|
66
|
+
next.delete(slug);
|
|
67
|
+
else
|
|
68
|
+
next.add(slug);
|
|
69
|
+
return next;
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
const confirm = async () => {
|
|
73
|
+
if (selected.size === 0)
|
|
74
|
+
return;
|
|
75
|
+
await onConfirm([...selected]);
|
|
76
|
+
};
|
|
77
|
+
return (_jsx(Dialog, { open: open, onOpenChange: (next) => {
|
|
78
|
+
if (!busy)
|
|
79
|
+
onOpenChange(next);
|
|
80
|
+
}, children: _jsxs(DialogContent, { className: "gap-4", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: title }), _jsx(DialogDescription, { children: description })] }), _jsxs(InputGroup, { className: "shadow-none", children: [_jsx(InputGroupAddon, { children: _jsx(Search, {}) }), _jsx(InputGroupInput, { value: query, onChange: (event) => setQuery(event.target.value), placeholder: intl.formatMessage(messages.searchPlaceholder), "aria-label": intl.formatMessage(messages.searchPlaceholder), autoComplete: "off" })] }), _jsx("div", { className: "max-h-72 overflow-y-auto rounded-xl border", children: available.length === 0 ? (_jsx("p", { className: "px-3 py-6 text-center text-sm text-muted-foreground", children: intl.formatMessage(messages.allGranted) })) : filtered.length === 0 ? (_jsx("p", { className: "px-3 py-6 text-center text-sm text-muted-foreground", children: intl.formatMessage(messages.noMatches) })) : (_jsx("ul", { className: "flex flex-col", children: filtered.map((type) => {
|
|
81
|
+
const isCollection = !isPage(type);
|
|
82
|
+
const checked = selected.has(type.name);
|
|
83
|
+
return (_jsx("li", { children: _jsxs("label", { className: "flex cursor-pointer items-center gap-3 px-3 py-2 hover:bg-accent", children: [_jsx(Checkbox, { checked: checked, onCheckedChange: () => toggle(type.name) }), isCollection ? (_jsx(Layers, { className: "size-4 shrink-0 text-muted-foreground" })) : (_jsx(FileText, { className: "size-4 shrink-0 text-muted-foreground" })), _jsx("span", { className: "min-w-0 flex-1 truncate text-sm font-medium", children: type.label ?? type.name }), _jsx(Badge, { variant: "secondary", children: intl.formatMessage(isCollection
|
|
84
|
+
? messages.collection
|
|
85
|
+
: messages.single) })] }) }, type.name));
|
|
86
|
+
}) })) }), _jsxs(DialogFooter, { children: [_jsx(Button, { variant: "outline", onClick: () => onOpenChange(false), disabled: busy, children: intl.formatMessage(messages.cancel) }), _jsxs(Button, { onClick: confirm, disabled: busy || selected.size === 0, children: [busy ? _jsx(Spinner, {}) : null, intl.formatMessage(messages.save, {
|
|
87
|
+
count: selected.size
|
|
88
|
+
})] })] })] }) }));
|
|
89
|
+
}
|
package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentGroup/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type GrantedContent } from '../GrantedContentRow';
|
|
2
|
+
/** Props for {@link GrantedContentGroup}. */
|
|
3
|
+
export type GrantedContentGroupProps = {
|
|
4
|
+
/** Section heading (e.g. "Collections"). */
|
|
5
|
+
heading: string;
|
|
6
|
+
/** The granted items in this section. */
|
|
7
|
+
items: GrantedContent[];
|
|
8
|
+
/** Copy shown when the section has no grants. */
|
|
9
|
+
emptyLabel: string;
|
|
10
|
+
/** Whether remove controls should be offered. */
|
|
11
|
+
canRemove: boolean;
|
|
12
|
+
/** Called with the item to remove. */
|
|
13
|
+
onRemove: (item: GrantedContent) => void;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* One kind's slice of the granted-content list — a heading with a count over a
|
|
17
|
+
* bordered list of rows (or an empty hint). The heading conveys the kind, so the
|
|
18
|
+
* rows drop their kind badge. Backs the Collections / Pages split.
|
|
19
|
+
*/
|
|
20
|
+
export declare function GrantedContentGroup({ heading, items, emptyLabel, canRemove, onRemove }: GrantedContentGroupProps): import("react").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentGroup/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/presentation/components/WorkspaceContentSettings/GrantedContentGroup/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE9E,6CAA6C;AAC7C,MAAM,MAAM,wBAAwB,GAAG;IACnC,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,OAAO,EACP,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAQ,EACX,EAAE,wBAAwB,+BA8B1B"}
|
package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentGroup/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Separator } from '@orthacms/design-system';
|
|
3
|
+
import { GrantedContentRow } from '../GrantedContentRow';
|
|
4
|
+
/**
|
|
5
|
+
* One kind's slice of the granted-content list — a heading with a count over a
|
|
6
|
+
* bordered list of rows (or an empty hint). The heading conveys the kind, so the
|
|
7
|
+
* rows drop their kind badge. Backs the Collections / Pages split.
|
|
8
|
+
*/
|
|
9
|
+
export function GrantedContentGroup({ heading, items, emptyLabel, canRemove, onRemove }) {
|
|
10
|
+
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("span", { className: "text-sm font-medium", children: [heading, _jsx("span", { className: "ml-1.5 text-xs font-normal text-muted-foreground", children: items.length })] }), items.length === 0 ? (_jsx("p", { className: "rounded-xl border px-3 py-4 text-sm text-muted-foreground", children: emptyLabel })) : (_jsx("ul", { className: "rounded-xl border", children: items.map((item, index) => (_jsxs("li", { children: [index > 0 ? _jsx(Separator, {}) : null, _jsx(GrantedContentRow, { granted: item, canRemove: canRemove, showKind: false, onRemove: () => onRemove(item) })] }, item.slug))) }))] }));
|
|
11
|
+
}
|
package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentRow/index.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ContentType } from '../../../../domain/types/wizard';
|
|
2
|
+
/** A granted content type resolved for display: the slug plus its catalogue entry. */
|
|
3
|
+
export type GrantedContent = {
|
|
4
|
+
/** The stored grant slug. */
|
|
5
|
+
slug: string;
|
|
6
|
+
/** The matching catalogue type, or `undefined` for a stale/unknown slug. */
|
|
7
|
+
type?: ContentType;
|
|
8
|
+
};
|
|
9
|
+
/** Props for {@link GrantedContentRow}. */
|
|
10
|
+
export type GrantedContentRowProps = {
|
|
11
|
+
/** The granted content to render. */
|
|
12
|
+
granted: GrantedContent;
|
|
13
|
+
/** Whether a remove control should be offered. */
|
|
14
|
+
canRemove: boolean;
|
|
15
|
+
/** Called when the remove control is pressed. */
|
|
16
|
+
onRemove: () => void;
|
|
17
|
+
/** Show the kind badge; off under a Collections/Pages group heading. */
|
|
18
|
+
showKind?: boolean;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* One row in the granted-content list: an icon by kind, the type's label
|
|
22
|
+
(falling back to the raw slug for an unknown type), a kind badge, and — when the
|
|
23
|
+
* user may manage content — a remove button.
|
|
24
|
+
*/
|
|
25
|
+
export declare function GrantedContentRow({ granted, canRemove, onRemove, showKind }: GrantedContentRowProps): import("react").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/lib/presentation/components/WorkspaceContentSettings/GrantedContentRow/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/presentation/components/WorkspaceContentSettings/GrantedContentRow/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAkBnE,sFAAsF;AACtF,MAAM,MAAM,cAAc,GAAG;IACzB,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,IAAI,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,2CAA2C;AAC3C,MAAM,MAAM,sBAAsB,GAAG;IACjC,qCAAqC;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,kDAAkD;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAe,EAClB,EAAE,sBAAsB,+BA2CxB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { FileText, Layers, X } from 'lucide-react';
|
|
4
|
+
import { Badge, Button } from '@orthacms/design-system';
|
|
5
|
+
import { isPage } from '..';
|
|
6
|
+
const messages = defineMessages({
|
|
7
|
+
collection: {
|
|
8
|
+
id: 'workspaces.settings.content.kindCollection',
|
|
9
|
+
defaultMessage: 'Collection'
|
|
10
|
+
},
|
|
11
|
+
single: {
|
|
12
|
+
id: 'workspaces.settings.content.kindSingle',
|
|
13
|
+
defaultMessage: 'Page'
|
|
14
|
+
},
|
|
15
|
+
remove: {
|
|
16
|
+
id: 'workspaces.settings.content.remove',
|
|
17
|
+
defaultMessage: 'Remove {label}'
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* One row in the granted-content list: an icon by kind, the type's label
|
|
22
|
+
(falling back to the raw slug for an unknown type), a kind badge, and — when the
|
|
23
|
+
* user may manage content — a remove button.
|
|
24
|
+
*/
|
|
25
|
+
export function GrantedContentRow({ granted, canRemove, onRemove, showKind = true }) {
|
|
26
|
+
const intl = useIntl();
|
|
27
|
+
const { slug, type } = granted;
|
|
28
|
+
const label = type?.label ?? type?.name ?? slug;
|
|
29
|
+
const isCollection = !isPage(type);
|
|
30
|
+
return (_jsxs("div", { className: "flex items-center gap-3 px-3 py-2", children: [_jsx("span", { className: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground", children: isCollection ? (_jsx(Layers, { className: "size-4" })) : (_jsx(FileText, { className: "size-4" })) }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx("span", { className: "truncate text-sm font-medium", children: label }), type?.description ? (_jsx("span", { className: "truncate text-xs text-muted-foreground", children: type.description })) : null] }), showKind ? (_jsx(Badge, { variant: "secondary", children: intl.formatMessage(isCollection ? messages.collection : messages.single) })) : null, canRemove ? (_jsx(Button, { type: "button", variant: "ghost", size: "icon", onClick: onRemove, "aria-label": intl.formatMessage(messages.remove, { label }), children: _jsx(X, { className: "size-4" }) })) : null] }));
|
|
31
|
+
}
|
package/dist/lib/presentation/components/WorkspaceContentSettings/RemoveContentDialog/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Props for {@link RemoveContentDialog}. */
|
|
2
|
+
export type RemoveContentDialogProps = {
|
|
3
|
+
/** The workspace the grant belongs to. */
|
|
4
|
+
workspaceId: string;
|
|
5
|
+
/** The slug being revoked, or `null` when the dialog is closed. */
|
|
6
|
+
slug: string | null;
|
|
7
|
+
/** Human label for the type (falls back to the slug). */
|
|
8
|
+
label: string;
|
|
9
|
+
/** Close callback; ignored while a revoke is in flight. */
|
|
10
|
+
onClose: () => void;
|
|
11
|
+
/** Runs the revoke (only reachable when the type is empty). */
|
|
12
|
+
onConfirm: () => void;
|
|
13
|
+
/** Whether the revoke is in flight. */
|
|
14
|
+
busy?: boolean;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Confirm dialog for revoking a content-type grant. On open it reads the type's
|
|
18
|
+
* entry count in the workspace and **blocks** the Remove button with a warning
|
|
19
|
+
* when the type isn't empty — so the user learns *why* up front instead of
|
|
20
|
+
* hitting the server's 409. Remove is enabled only once the count is known to be
|
|
21
|
+
* zero. The checking / error / blocked chrome lives in the shared
|
|
22
|
+
* {@link BlockingConfirmDialog}.
|
|
23
|
+
*/
|
|
24
|
+
export declare function RemoveContentDialog({ workspaceId, slug, label, onClose, onConfirm, busy }: RemoveContentDialogProps): import("react").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/lib/presentation/components/WorkspaceContentSettings/RemoveContentDialog/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/presentation/components/WorkspaceContentSettings/RemoveContentDialog/index.tsx"],"names":[],"mappings":"AAsCA,6CAA6C;AAC7C,MAAM,MAAM,wBAAwB,GAAG;IACnC,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,uCAAuC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,WAAW,EACX,IAAI,EACJ,KAAK,EACL,OAAO,EACP,SAAS,EACT,IAAY,EACf,EAAE,wBAAwB,+BA2B1B"}
|
package/dist/lib/presentation/components/WorkspaceContentSettings/RemoveContentDialog/index.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { useWorkspaceContentCount } from '../../../../application/useWorkspaceContentCount';
|
|
4
|
+
import { BlockingConfirmDialog } from '../../BlockingConfirmDialog';
|
|
5
|
+
const messages = defineMessages({
|
|
6
|
+
title: {
|
|
7
|
+
id: 'workspaces.settings.content.removeDialog.title',
|
|
8
|
+
defaultMessage: 'Remove “{label}”?'
|
|
9
|
+
},
|
|
10
|
+
checking: {
|
|
11
|
+
id: 'workspaces.settings.content.removeDialog.checking',
|
|
12
|
+
defaultMessage: 'Checking for existing content…'
|
|
13
|
+
},
|
|
14
|
+
checkError: {
|
|
15
|
+
id: 'workspaces.settings.content.removeDialog.checkError',
|
|
16
|
+
defaultMessage: 'Couldn’t check for existing content, so removal is blocked. Please try again.'
|
|
17
|
+
},
|
|
18
|
+
description: {
|
|
19
|
+
id: 'workspaces.settings.content.removeDialog.description',
|
|
20
|
+
defaultMessage: 'Removing a content type stops this workspace from using it. Records in other workspaces are untouched.'
|
|
21
|
+
},
|
|
22
|
+
blocked: {
|
|
23
|
+
id: 'workspaces.settings.content.removeDialog.blocked',
|
|
24
|
+
defaultMessage: 'This content type still has {count, plural, one {# entry} other {# entries}} in this workspace. Delete {count, plural, one {it} other {them}} first — the workspace can only stop using a content type once it holds none.'
|
|
25
|
+
},
|
|
26
|
+
cancel: {
|
|
27
|
+
id: 'workspaces.settings.content.removeDialog.cancel',
|
|
28
|
+
defaultMessage: 'Cancel'
|
|
29
|
+
},
|
|
30
|
+
remove: {
|
|
31
|
+
id: 'workspaces.settings.content.removeDialog.remove',
|
|
32
|
+
defaultMessage: 'Remove'
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Confirm dialog for revoking a content-type grant. On open it reads the type's
|
|
37
|
+
* entry count in the workspace and **blocks** the Remove button with a warning
|
|
38
|
+
* when the type isn't empty — so the user learns *why* up front instead of
|
|
39
|
+
* hitting the server's 409. Remove is enabled only once the count is known to be
|
|
40
|
+
* zero. The checking / error / blocked chrome lives in the shared
|
|
41
|
+
* {@link BlockingConfirmDialog}.
|
|
42
|
+
*/
|
|
43
|
+
export function RemoveContentDialog({ workspaceId, slug, label, onClose, onConfirm, busy = false }) {
|
|
44
|
+
const intl = useIntl();
|
|
45
|
+
const open = slug !== null;
|
|
46
|
+
const { data: count, isPending, isError } = useWorkspaceContentCount(workspaceId, slug, open);
|
|
47
|
+
return (_jsx(BlockingConfirmDialog, { open: open, title: intl.formatMessage(messages.title, { label }), description: intl.formatMessage(messages.description), isChecking: isPending, isError: isError, count: count, checkingLabel: intl.formatMessage(messages.checking), checkErrorLabel: intl.formatMessage(messages.checkError), blockedLabel: intl.formatMessage(messages.blocked, { count }), confirmLabel: intl.formatMessage(messages.remove), cancelLabel: intl.formatMessage(messages.cancel), onClose: onClose, onConfirm: onConfirm, busy: busy }));
|
|
48
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Workspace } from '../../../domain/types/workspace';
|
|
2
|
+
import type { ContentType } from '../../../domain/types/wizard';
|
|
3
|
+
/**
|
|
4
|
+
* Classifies a content type as a **page** (a standalone `single`) rather than a
|
|
5
|
+
* multi-entry collection. The single source of this rule, shared by the granted
|
|
6
|
+
* rows and the add dialog. An unknown (stale) type is treated as a collection —
|
|
7
|
+
* the default bucket.
|
|
8
|
+
*/
|
|
9
|
+
export declare const isPage: (type?: ContentType) => boolean;
|
|
10
|
+
/** Props for {@link WorkspaceContentSettings}. */
|
|
11
|
+
export type WorkspaceContentSettingsProps = {
|
|
12
|
+
/** The workspace whose content grants are managed. */
|
|
13
|
+
workspace: Workspace;
|
|
14
|
+
/** Whether the current user may manage content (holds `workspaces:update`). */
|
|
15
|
+
canUpdate: boolean;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* The Content-types settings tab: the granted collections and pages shown as
|
|
19
|
+
* two titled groups (each row with its title + description), granted through a
|
|
20
|
+
* **separate search + multi-select dialog per kind** (Add collections / Add
|
|
21
|
+
* pages), and revoked through a dialog that **blocks** the action while the type
|
|
22
|
+
* still holds entries. Gated on `workspaces:update`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function WorkspaceContentSettings({ workspace, canUpdate }: WorkspaceContentSettingsProps): import("react").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/WorkspaceContentSettings/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAuFhE;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,WAAW,YAA4B,CAAC;AAEtE,kDAAkD;AAClD,MAAM,MAAM,6BAA6B,GAAG;IACxC,sDAAsD;IACtD,SAAS,EAAE,SAAS,CAAC;IACrB,+EAA+E;IAC/E,SAAS,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,EACrC,SAAS,EACT,SAAS,EACZ,EAAE,6BAA6B,+BAmM/B"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from 'react';
|
|
3
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
4
|
+
import { Plus } from 'lucide-react';
|
|
5
|
+
import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Spinner, toast } from '@orthacms/design-system';
|
|
6
|
+
import { isConflict } from '../../../infrastructure/isConflict';
|
|
7
|
+
import { useContentTypes } from '../../../application/useContentTypes';
|
|
8
|
+
import { useAddWorkspaceContent } from '../../../application/useAddWorkspaceContent';
|
|
9
|
+
import { useRemoveWorkspaceContent } from '../../../application/useRemoveWorkspaceContent';
|
|
10
|
+
import { AddContentDialog } from './AddContentDialog';
|
|
11
|
+
import { RemoveContentDialog } from './RemoveContentDialog';
|
|
12
|
+
import { GrantedContentGroup } from './GrantedContentGroup';
|
|
13
|
+
const messages = defineMessages({
|
|
14
|
+
title: {
|
|
15
|
+
id: 'workspaces.settings.content.title',
|
|
16
|
+
defaultMessage: 'Content types'
|
|
17
|
+
},
|
|
18
|
+
description: {
|
|
19
|
+
id: 'workspaces.settings.content.description',
|
|
20
|
+
defaultMessage: 'The collections and pages this workspace can work with. Its Content Library is scoped to these.'
|
|
21
|
+
},
|
|
22
|
+
collections: {
|
|
23
|
+
id: 'workspaces.settings.content.collections',
|
|
24
|
+
defaultMessage: 'Collections'
|
|
25
|
+
},
|
|
26
|
+
pages: {
|
|
27
|
+
id: 'workspaces.settings.content.pages',
|
|
28
|
+
defaultMessage: 'Pages'
|
|
29
|
+
},
|
|
30
|
+
collectionsEmpty: {
|
|
31
|
+
id: 'workspaces.settings.content.collectionsEmpty',
|
|
32
|
+
defaultMessage: 'No collections granted yet.'
|
|
33
|
+
},
|
|
34
|
+
pagesEmpty: {
|
|
35
|
+
id: 'workspaces.settings.content.pagesEmpty',
|
|
36
|
+
defaultMessage: 'No pages granted yet.'
|
|
37
|
+
},
|
|
38
|
+
addCollections: {
|
|
39
|
+
id: 'workspaces.settings.content.addCollections',
|
|
40
|
+
defaultMessage: 'Add collections'
|
|
41
|
+
},
|
|
42
|
+
addPages: {
|
|
43
|
+
id: 'workspaces.settings.content.addPages',
|
|
44
|
+
defaultMessage: 'Add pages'
|
|
45
|
+
},
|
|
46
|
+
addCollectionsBody: {
|
|
47
|
+
id: 'workspaces.settings.content.addCollectionsBody',
|
|
48
|
+
defaultMessage: 'Search and select the multi-entry collections to grant this workspace.'
|
|
49
|
+
},
|
|
50
|
+
addPagesBody: {
|
|
51
|
+
id: 'workspaces.settings.content.addPagesBody',
|
|
52
|
+
defaultMessage: 'Search and select the standalone pages to grant this workspace.'
|
|
53
|
+
},
|
|
54
|
+
readOnly: {
|
|
55
|
+
id: 'workspaces.settings.content.readOnly',
|
|
56
|
+
defaultMessage: 'You have read-only access and can’t change content types.'
|
|
57
|
+
},
|
|
58
|
+
loadError: {
|
|
59
|
+
id: 'workspaces.settings.content.loadError',
|
|
60
|
+
defaultMessage: 'Couldn’t load the content-type catalogue.'
|
|
61
|
+
},
|
|
62
|
+
added: {
|
|
63
|
+
id: 'workspaces.settings.content.added',
|
|
64
|
+
defaultMessage: '{count, plural, one {Content type added.} other {# content types added.}}'
|
|
65
|
+
},
|
|
66
|
+
addError: {
|
|
67
|
+
id: 'workspaces.settings.content.addError',
|
|
68
|
+
defaultMessage: 'Couldn’t add those content types. Please try again.'
|
|
69
|
+
},
|
|
70
|
+
removed: {
|
|
71
|
+
id: 'workspaces.settings.content.removed',
|
|
72
|
+
defaultMessage: 'Content type removed.'
|
|
73
|
+
},
|
|
74
|
+
removeError: {
|
|
75
|
+
id: 'workspaces.settings.content.removeError',
|
|
76
|
+
defaultMessage: 'Couldn’t remove that content type. Please try again.'
|
|
77
|
+
},
|
|
78
|
+
notEmpty: {
|
|
79
|
+
id: 'workspaces.settings.content.notEmpty',
|
|
80
|
+
defaultMessage: 'This content type still has entries in the workspace. Delete them first, then remove it.'
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
/**
|
|
84
|
+
* Classifies a content type as a **page** (a standalone `single`) rather than a
|
|
85
|
+
* multi-entry collection. The single source of this rule, shared by the granted
|
|
86
|
+
* rows and the add dialog. An unknown (stale) type is treated as a collection —
|
|
87
|
+
* the default bucket.
|
|
88
|
+
*/
|
|
89
|
+
export const isPage = (type) => type?.kind === 'single';
|
|
90
|
+
/**
|
|
91
|
+
* The Content-types settings tab: the granted collections and pages shown as
|
|
92
|
+
* two titled groups (each row with its title + description), granted through a
|
|
93
|
+
* **separate search + multi-select dialog per kind** (Add collections / Add
|
|
94
|
+
* pages), and revoked through a dialog that **blocks** the action while the type
|
|
95
|
+
* still holds entries. Gated on `workspaces:update`.
|
|
96
|
+
*/
|
|
97
|
+
export function WorkspaceContentSettings({ workspace, canUpdate }) {
|
|
98
|
+
const intl = useIntl();
|
|
99
|
+
const catalog = useContentTypes();
|
|
100
|
+
const addContent = useAddWorkspaceContent();
|
|
101
|
+
const removeContent = useRemoveWorkspaceContent();
|
|
102
|
+
const [addCollectionsOpen, setAddCollectionsOpen] = useState(false);
|
|
103
|
+
const [addPagesOpen, setAddPagesOpen] = useState(false);
|
|
104
|
+
const [pendingRemoval, setPendingRemoval] = useState(null);
|
|
105
|
+
const types = useMemo(() => catalog.data ?? [], [catalog.data]);
|
|
106
|
+
const byName = useMemo(() => {
|
|
107
|
+
const map = new Map();
|
|
108
|
+
for (const type of types)
|
|
109
|
+
map.set(type.name, type);
|
|
110
|
+
return map;
|
|
111
|
+
}, [types]);
|
|
112
|
+
const grantedSet = new Set(workspace.content);
|
|
113
|
+
const granted = workspace.content.map((slug) => ({
|
|
114
|
+
slug,
|
|
115
|
+
type: byName.get(slug)
|
|
116
|
+
}));
|
|
117
|
+
// An unknown (stale) slug can't be classed by kind — it falls under
|
|
118
|
+
// Collections, the default bucket.
|
|
119
|
+
const grantedCollections = granted.filter((g) => !isPage(g.type));
|
|
120
|
+
const grantedPages = granted.filter((g) => isPage(g.type));
|
|
121
|
+
const availableCollections = types.filter((type) => !isPage(type) && !grantedSet.has(type.name));
|
|
122
|
+
const availablePages = types.filter((type) => isPage(type) && !grantedSet.has(type.name));
|
|
123
|
+
/** Grants the chosen slugs; returns whether it succeeded (to close on ok). */
|
|
124
|
+
const grant = async (slugs) => {
|
|
125
|
+
// The grant endpoint is per-slug; fan out and reconcile once. Use
|
|
126
|
+
// allSettled so one failure doesn't discard the grants that did land —
|
|
127
|
+
// report how many succeeded and only flag the rest as failed.
|
|
128
|
+
const results = await Promise.allSettled(slugs.map((slug) => addContent.mutateAsync({ workspaceId: workspace.id, slug })));
|
|
129
|
+
const succeeded = results.filter((result) => result.status === 'fulfilled').length;
|
|
130
|
+
const failed = slugs.length - succeeded;
|
|
131
|
+
if (succeeded > 0) {
|
|
132
|
+
toast.success(intl.formatMessage(messages.added, { count: succeeded }));
|
|
133
|
+
}
|
|
134
|
+
if (failed > 0) {
|
|
135
|
+
toast.error(intl.formatMessage(messages.addError));
|
|
136
|
+
}
|
|
137
|
+
// Close only when everything landed; on a partial failure the dialog
|
|
138
|
+
// stays open so the still-ungranted types (the list refetched them out)
|
|
139
|
+
// remain visible for a retry.
|
|
140
|
+
return failed === 0;
|
|
141
|
+
};
|
|
142
|
+
const confirmRemoval = async () => {
|
|
143
|
+
if (!pendingRemoval)
|
|
144
|
+
return;
|
|
145
|
+
const { slug } = pendingRemoval;
|
|
146
|
+
try {
|
|
147
|
+
await removeContent.mutateAsync({
|
|
148
|
+
workspaceId: workspace.id,
|
|
149
|
+
slug
|
|
150
|
+
});
|
|
151
|
+
toast.success(intl.formatMessage(messages.removed));
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
// The dialog blocks a non-empty revoke up front; this 409 is only a
|
|
155
|
+
// safety net for an entry created between the check and the confirm.
|
|
156
|
+
(isConflict(error) ? toast.warning : toast.error)(intl.formatMessage(isConflict(error) ? messages.notEmpty : messages.removeError));
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
setPendingRemoval(null);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
const removalLabel = pendingRemoval?.type?.label ??
|
|
163
|
+
pendingRemoval?.type?.name ??
|
|
164
|
+
pendingRemoval?.slug ??
|
|
165
|
+
'';
|
|
166
|
+
return (_jsxs(Card, { children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { asChild: true, children: _jsx("h2", { children: intl.formatMessage(messages.title) }) }), _jsx(CardDescription, { children: intl.formatMessage(messages.description) })] }), _jsxs(CardContent, { className: "flex flex-col gap-5", children: [catalog.isError ? (_jsx("p", { className: "text-sm text-destructive", children: intl.formatMessage(messages.loadError) })) : null, canUpdate ? (_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsxs(Button, { type: "button", variant: "outline", onClick: () => setAddCollectionsOpen(true), disabled: catalog.isPending || catalog.isError, children: [_jsx(Plus, { className: "size-4" }), intl.formatMessage(messages.addCollections)] }), _jsxs(Button, { type: "button", variant: "outline", onClick: () => setAddPagesOpen(true), disabled: catalog.isPending || catalog.isError, children: [_jsx(Plus, { className: "size-4" }), intl.formatMessage(messages.addPages)] })] })) : (_jsx("p", { className: "text-sm text-muted-foreground", children: intl.formatMessage(messages.readOnly) })), catalog.isPending && granted.length === 0 ? (_jsx("p", { className: "flex items-center gap-2 rounded-xl border px-3 py-4 text-sm text-muted-foreground", children: _jsx(Spinner, { className: "size-4" }) })) : (_jsxs(_Fragment, { children: [_jsx(GrantedContentGroup, { heading: intl.formatMessage(messages.collections), items: grantedCollections, emptyLabel: intl.formatMessage(messages.collectionsEmpty), canRemove: canUpdate, onRemove: setPendingRemoval }), _jsx(GrantedContentGroup, { heading: intl.formatMessage(messages.pages), items: grantedPages, emptyLabel: intl.formatMessage(messages.pagesEmpty), canRemove: canUpdate, onRemove: setPendingRemoval })] }))] }), _jsx(AddContentDialog, { open: addCollectionsOpen, onOpenChange: setAddCollectionsOpen, title: intl.formatMessage(messages.addCollections), description: intl.formatMessage(messages.addCollectionsBody), available: availableCollections, onConfirm: async (slugs) => {
|
|
167
|
+
if (await grant(slugs))
|
|
168
|
+
setAddCollectionsOpen(false);
|
|
169
|
+
}, busy: addContent.isPending }), _jsx(AddContentDialog, { open: addPagesOpen, onOpenChange: setAddPagesOpen, title: intl.formatMessage(messages.addPages), description: intl.formatMessage(messages.addPagesBody), available: availablePages, onConfirm: async (slugs) => {
|
|
170
|
+
if (await grant(slugs))
|
|
171
|
+
setAddPagesOpen(false);
|
|
172
|
+
}, busy: addContent.isPending }), _jsx(RemoveContentDialog, { workspaceId: workspace.id, slug: pendingRemoval?.slug ?? null, label: removalLabel, onClose: () => setPendingRemoval(null), onConfirm: confirmRemoval, busy: removeContent.isPending })] }));
|
|
173
|
+
}
|
package/dist/lib/presentation/components/WorkspaceDangerSettings/DeleteWorkspaceDialog/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Workspace } from '../../../../domain/types/workspace';
|
|
2
|
+
/** Props for {@link DeleteWorkspaceDialog}. */
|
|
3
|
+
export type DeleteWorkspaceDialogProps = {
|
|
4
|
+
/** The workspace being deleted, or `null` when the dialog is closed. */
|
|
5
|
+
workspace: Workspace | null;
|
|
6
|
+
/** Close callback; ignored while the delete is in flight. */
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
/** Runs the delete (only reachable once the workspace is empty). */
|
|
9
|
+
onConfirm: () => void;
|
|
10
|
+
/** Whether the delete is in flight. */
|
|
11
|
+
busy?: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Confirm dialog for permanently deleting a workspace. On open it reads the
|
|
15
|
+
* workspace's total content-entry count and **blocks** the Delete button with a
|
|
16
|
+
* warning while any content remains — so a delete can never orphan records (the
|
|
17
|
+
* server enforces the same rule with a 409). Delete is enabled only once the
|
|
18
|
+
* count is known to be zero. The checking / error / blocked chrome lives in the
|
|
19
|
+
* shared {@link BlockingConfirmDialog}.
|
|
20
|
+
*/
|
|
21
|
+
export declare function DeleteWorkspaceDialog({ workspace, onClose, onConfirm, busy }: DeleteWorkspaceDialogProps): import("react").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/presentation/components/WorkspaceDangerSettings/DeleteWorkspaceDialog/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAsCpE,+CAA+C;AAC/C,MAAM,MAAM,0BAA0B,GAAG;IACrC,wEAAwE;IACxE,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,oEAAoE;IACpE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,uCAAuC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,SAAS,EACT,OAAO,EACP,SAAS,EACT,IAAY,EACf,EAAE,0BAA0B,+BA+B5B"}
|
package/dist/lib/presentation/components/WorkspaceDangerSettings/DeleteWorkspaceDialog/index.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
import { useWorkspaceEntryCount } from '../../../../application/useWorkspaceEntryCount';
|
|
4
|
+
import { BlockingConfirmDialog } from '../../BlockingConfirmDialog';
|
|
5
|
+
const messages = defineMessages({
|
|
6
|
+
title: {
|
|
7
|
+
id: 'workspaces.settings.danger.deleteDialog.title',
|
|
8
|
+
defaultMessage: 'Delete “{name}”?'
|
|
9
|
+
},
|
|
10
|
+
description: {
|
|
11
|
+
id: 'workspaces.settings.danger.deleteDialog.description',
|
|
12
|
+
defaultMessage: 'This permanently deletes the workspace, all {members, plural, one {# membership} other {# memberships}}, and its content grants. This cannot be undone.'
|
|
13
|
+
},
|
|
14
|
+
checking: {
|
|
15
|
+
id: 'workspaces.settings.danger.deleteDialog.checking',
|
|
16
|
+
defaultMessage: 'Checking for existing content…'
|
|
17
|
+
},
|
|
18
|
+
checkError: {
|
|
19
|
+
id: 'workspaces.settings.danger.deleteDialog.checkError',
|
|
20
|
+
defaultMessage: 'Couldn’t check for existing content, so deletion is blocked. Please try again.'
|
|
21
|
+
},
|
|
22
|
+
blocked: {
|
|
23
|
+
id: 'workspaces.settings.danger.deleteDialog.blocked',
|
|
24
|
+
defaultMessage: 'This workspace still has {count, plural, one {# content entry} other {# content entries}} across its content types. Delete all content first — a workspace can only be deleted once it holds no records.'
|
|
25
|
+
},
|
|
26
|
+
cancel: {
|
|
27
|
+
id: 'workspaces.settings.danger.deleteDialog.cancel',
|
|
28
|
+
defaultMessage: 'Cancel'
|
|
29
|
+
},
|
|
30
|
+
confirm: {
|
|
31
|
+
id: 'workspaces.settings.danger.deleteDialog.confirm',
|
|
32
|
+
defaultMessage: 'Delete workspace'
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Confirm dialog for permanently deleting a workspace. On open it reads the
|
|
37
|
+
* workspace's total content-entry count and **blocks** the Delete button with a
|
|
38
|
+
* warning while any content remains — so a delete can never orphan records (the
|
|
39
|
+
* server enforces the same rule with a 409). Delete is enabled only once the
|
|
40
|
+
* count is known to be zero. The checking / error / blocked chrome lives in the
|
|
41
|
+
* shared {@link BlockingConfirmDialog}.
|
|
42
|
+
*/
|
|
43
|
+
export function DeleteWorkspaceDialog({ workspace, onClose, onConfirm, busy = false }) {
|
|
44
|
+
const intl = useIntl();
|
|
45
|
+
const open = workspace !== null;
|
|
46
|
+
const { data: count, isPending, isError } = useWorkspaceEntryCount(workspace?.id ?? '', open);
|
|
47
|
+
return (_jsx(BlockingConfirmDialog, { open: open, title: intl.formatMessage(messages.title, {
|
|
48
|
+
name: workspace?.name ?? ''
|
|
49
|
+
}), description: intl.formatMessage(messages.description, {
|
|
50
|
+
members: workspace?.members.length ?? 0
|
|
51
|
+
}), isChecking: isPending, isError: isError, count: count, checkingLabel: intl.formatMessage(messages.checking), checkErrorLabel: intl.formatMessage(messages.checkError), blockedLabel: intl.formatMessage(messages.blocked, { count }), confirmLabel: intl.formatMessage(messages.confirm), cancelLabel: intl.formatMessage(messages.cancel), onClose: onClose, onConfirm: onConfirm, busy: busy }));
|
|
52
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Workspace } from '../../../domain/types/workspace';
|
|
2
|
+
/** Props for {@link WorkspaceDangerSettings}. */
|
|
3
|
+
export type WorkspaceDangerSettingsProps = {
|
|
4
|
+
/** The workspace being managed. */
|
|
5
|
+
workspace: Workspace;
|
|
6
|
+
/** Whether the user may archive/unarchive (holds `workspaces:update`). */
|
|
7
|
+
canUpdate: boolean;
|
|
8
|
+
/** Whether the user may delete (holds `workspaces:delete`). */
|
|
9
|
+
canDelete: boolean;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* The Danger-zone settings tab: archive/unarchive (`workspaces:update`) and
|
|
13
|
+
* permanently delete (`workspaces:delete`), each behind a typed confirmation.
|
|
14
|
+
* On delete the user is sent back to the workspaces grid (the shell route is
|
|
15
|
+
* gone).
|
|
16
|
+
*/
|
|
17
|
+
export declare function WorkspaceDangerSettings({ workspace, canUpdate, canDelete }: WorkspaceDangerSettingsProps): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/presentation/components/WorkspaceDangerSettings/index.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AA2FjE,iDAAiD;AACjD,MAAM,MAAM,4BAA4B,GAAG;IACvC,mCAAmC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,0EAA0E;IAC1E,SAAS,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,EACpC,SAAS,EACT,SAAS,EACT,SAAS,EACZ,EAAE,4BAA4B,+BAiJ9B"}
|