@nextsparkjs/core 0.1.0-beta.194 → 0.1.0-beta.195
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/dist/components/app/guards/DeveloperGuard.d.ts +8 -1
- package/dist/components/app/guards/DeveloperGuard.d.ts.map +1 -1
- package/dist/components/app/guards/DeveloperGuard.js +2 -1
- package/dist/components/app/guards/SuperAdminGuard.d.ts +8 -1
- package/dist/components/app/guards/SuperAdminGuard.d.ts.map +1 -1
- package/dist/components/app/guards/SuperAdminGuard.js +2 -1
- package/dist/components/dashboard/block-editor/block-picker.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/block-picker.js +2 -1
- package/dist/components/dashboard/block-editor/builder-editor-view.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/builder-editor-view.js +39 -23
- package/dist/components/dashboard/block-editor/pattern-reference-preview.d.ts.map +1 -1
- package/dist/components/dashboard/block-editor/pattern-reference-preview.js +2 -1
- package/dist/components/dashboard/layouts/AuthGuard.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/AuthGuard.js +3 -4
- package/dist/components/dashboard/layouts/AuthenticatedDashboardLayout.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/AuthenticatedDashboardLayout.js +9 -10
- package/dist/components/dashboard/layouts/DashboardAuthLayout.d.ts.map +1 -1
- package/dist/components/dashboard/layouts/DashboardAuthLayout.js +3 -4
- package/dist/components/dashboard/layouts/DashboardAuthSkeleton.d.ts +2 -2
- package/dist/components/entities/wrappers/EntityDetailWrapper.d.ts.map +1 -1
- package/dist/components/entities/wrappers/EntityDetailWrapper.js +5 -2
- package/dist/components/entities/wrappers/EntityFormWrapper.d.ts.map +1 -1
- package/dist/components/entities/wrappers/EntityFormWrapper.js +5 -2
- package/dist/components/entities/wrappers/EntityListWrapper.d.ts.map +1 -1
- package/dist/components/entities/wrappers/EntityListWrapper.js +5 -2
- package/dist/components/ui/relation-display.d.ts.map +1 -1
- package/dist/components/ui/relation-display.js +2 -1
- package/dist/components/ui/user-display.d.ts.map +1 -1
- package/dist/components/ui/user-display.js +2 -1
- package/dist/emails/otp-verification.d.ts.map +1 -1
- package/dist/emails/otp-verification.js +5 -3
- package/dist/emails/reset-password.d.ts.map +1 -1
- package/dist/emails/reset-password.js +5 -3
- package/dist/emails/team-invitation.d.ts.map +1 -1
- package/dist/emails/team-invitation.js +3 -2
- package/dist/emails/verify-email.d.ts.map +1 -1
- package/dist/emails/verify-email.js +5 -3
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +21 -4
- package/dist/hooks/usePatternUsages.d.ts.map +1 -1
- package/dist/hooks/usePatternUsages.js +3 -2
- package/dist/lib/api/auth.d.ts +2 -0
- package/dist/lib/api/auth.d.ts.map +1 -1
- package/dist/lib/api/auth.js +10 -10
- package/dist/lib/api/client-headers.d.ts +11 -0
- package/dist/lib/api/client-headers.d.ts.map +1 -0
- package/dist/lib/api/client-headers.js +12 -0
- package/dist/lib/api/client-ip.d.ts +59 -0
- package/dist/lib/api/client-ip.d.ts.map +1 -0
- package/dist/lib/api/client-ip.js +91 -0
- package/dist/lib/api/cors-response.d.ts +54 -0
- package/dist/lib/api/cors-response.d.ts.map +1 -0
- package/dist/lib/api/cors-response.js +88 -0
- package/dist/lib/api/entities.d.ts.map +1 -1
- package/dist/lib/api/entities.js +4 -3
- package/dist/lib/api/entity/audit-log.d.ts.map +1 -1
- package/dist/lib/api/entity/audit-log.js +2 -1
- package/dist/lib/api/entity/generic-handler.d.ts.map +1 -1
- package/dist/lib/api/entity/generic-handler.js +23 -5
- package/dist/lib/api/helpers.d.ts +8 -2
- package/dist/lib/api/helpers.d.ts.map +1 -1
- package/dist/lib/api/helpers.js +27 -81
- package/dist/lib/api/keys.d.ts +6 -0
- package/dist/lib/api/keys.d.ts.map +1 -1
- package/dist/lib/api/keys.js +7 -1
- package/dist/lib/api/rate-limit.d.ts +4 -0
- package/dist/lib/api/rate-limit.d.ts.map +1 -1
- package/dist/lib/api/rate-limit.js +16 -40
- package/dist/lib/api/request-origin.d.ts +16 -7
- package/dist/lib/api/request-origin.d.ts.map +1 -1
- package/dist/lib/api/request-origin.js +43 -20
- package/dist/lib/auth/load-login-page.d.ts +10 -0
- package/dist/lib/auth/load-login-page.d.ts.map +1 -0
- package/dist/lib/auth/load-login-page.js +7 -0
- package/dist/lib/auth/runtime-readiness.d.ts.map +1 -1
- package/dist/lib/auth/runtime-readiness.js +2 -0
- package/dist/lib/auth/security-notifications/device-fingerprint.d.ts +1 -8
- package/dist/lib/auth/security-notifications/device-fingerprint.d.ts.map +1 -1
- package/dist/lib/auth/security-notifications/device-fingerprint.js +2 -12
- package/dist/lib/auth-email-callbacks.js +3 -3
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +7 -2
- package/dist/lib/config/config-client.d.ts.map +1 -1
- package/dist/lib/config/config-client.js +1 -1
- package/dist/lib/config/config-sync.d.ts.map +1 -1
- package/dist/lib/config/config-sync.js +1 -1
- package/dist/lib/config/public-config-client.d.ts +1 -0
- package/dist/lib/config/public-config-client.d.ts.map +1 -1
- package/dist/lib/config/public-config-client.js +3 -1
- package/dist/lib/config/types.d.ts +2 -0
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/constants/reserved-slugs.d.ts +17 -8
- package/dist/lib/constants/reserved-slugs.d.ts.map +1 -1
- package/dist/lib/constants/reserved-slugs.js +16 -52
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +9 -3
- package/dist/lib/entities/external-api-generator.d.ts.map +1 -1
- package/dist/lib/entities/external-api-generator.js +2 -4
- package/dist/lib/entities/public-slug.d.ts +46 -0
- package/dist/lib/entities/public-slug.d.ts.map +1 -0
- package/dist/lib/entities/public-slug.js +39 -0
- package/dist/routes/(auth)/signup/page.cc.d.ts +3 -8
- package/dist/routes/(auth)/signup/page.cc.d.ts.map +1 -1
- package/dist/routes/(auth)/signup/page.cc.js +7 -1
- package/dist/routes/(auth)/verify-email/page.d.ts.map +1 -1
- package/dist/routes/(auth)/verify-email/page.js +2 -1
- package/dist/routes/(public)/page.cc.d.ts +3 -0
- package/dist/routes/(public)/page.cc.d.ts.map +1 -0
- package/dist/routes/(public)/page.cc.js +3 -0
- package/dist/routes/_internal/area-access.cc.d.ts +21 -0
- package/dist/routes/_internal/area-access.cc.d.ts.map +1 -0
- package/dist/routes/_internal/area-access.cc.js +19 -0
- package/dist/routes/_internal/auth-layout.d.ts.map +1 -1
- package/dist/routes/_internal/auth-layout.js +3 -2
- package/dist/routes/_internal/dashboard-main-shared.d.ts +7 -0
- package/dist/routes/_internal/dashboard-main-shared.d.ts.map +1 -0
- package/dist/routes/_internal/dashboard-main-shared.js +49 -0
- package/dist/routes/_internal/default-auth-layout.d.ts.map +1 -1
- package/dist/routes/_internal/default-auth-layout.js +3 -2
- package/dist/routes/_internal/devtools-layout.cc.d.ts +3 -2
- package/dist/routes/_internal/devtools-layout.cc.d.ts.map +1 -1
- package/dist/routes/_internal/devtools-layout.cc.js +1 -1
- package/dist/routes/_internal/devtools-layout.d.ts +7 -2
- package/dist/routes/_internal/devtools-layout.d.ts.map +1 -1
- package/dist/routes/_internal/devtools-layout.js +4 -4
- package/dist/routes/_internal/entity-detail-route.cc.d.ts +8 -0
- package/dist/routes/_internal/entity-detail-route.cc.d.ts.map +1 -0
- package/dist/routes/_internal/entity-detail-route.cc.js +5 -0
- package/dist/routes/_internal/entity-edit-route.cc.d.ts +8 -0
- package/dist/routes/_internal/entity-edit-route.cc.d.ts.map +1 -0
- package/dist/routes/_internal/entity-edit-route.cc.js +5 -0
- package/dist/routes/_internal/public-archive-route.d.ts +1 -1
- package/dist/routes/_internal/public-archive-route.d.ts.map +1 -1
- package/dist/routes/_internal/public-archive-route.js +8 -3
- package/dist/routes/_internal/public-item-route.cc.d.ts +5 -1
- package/dist/routes/_internal/public-item-route.cc.d.ts.map +1 -1
- package/dist/routes/_internal/public-item-route.cc.js +2 -1
- package/dist/routes/_internal/public-item-route.d.ts +7 -0
- package/dist/routes/_internal/public-item-route.d.ts.map +1 -1
- package/dist/routes/_internal/public-item-route.js +6 -1
- package/dist/routes/_internal/superadmin-layout.cc.d.ts +2 -1
- package/dist/routes/_internal/superadmin-layout.cc.d.ts.map +1 -1
- package/dist/routes/_internal/superadmin-layout.cc.js +1 -1
- package/dist/routes/_internal/superadmin-layout.d.ts +7 -2
- package/dist/routes/_internal/superadmin-layout.d.ts.map +1 -1
- package/dist/routes/_internal/superadmin-layout.js +6 -6
- package/dist/routes/_internal/suspended-route.d.ts +16 -0
- package/dist/routes/_internal/suspended-route.d.ts.map +1 -0
- package/dist/routes/_internal/suspended-route.js +7 -0
- package/dist/routes/api/auth/[...all]/route.d.ts.map +1 -1
- package/dist/routes/api/auth/[...all]/route.js +4 -12
- package/dist/routes/api/csp-report/route.d.ts.map +1 -1
- package/dist/routes/api/csp-report/route.js +2 -13
- package/dist/routes/api/devtools/config/entities/route.d.ts +2 -0
- package/dist/routes/api/devtools/config/entities/route.d.ts.map +1 -1
- package/dist/routes/api/devtools/config/entities/route.js +2 -0
- package/dist/routes/api/devtools/config/theme/route.d.ts +2 -0
- package/dist/routes/api/devtools/config/theme/route.d.ts.map +1 -1
- package/dist/routes/api/devtools/config/theme/route.js +2 -0
- package/dist/routes/api/devtools/tests/[...path]/route.d.ts +2 -0
- package/dist/routes/api/devtools/tests/[...path]/route.d.ts.map +1 -1
- package/dist/routes/api/devtools/tests/[...path]/route.js +2 -0
- package/dist/routes/api/devtools/tests/route.d.ts +2 -0
- package/dist/routes/api/devtools/tests/route.d.ts.map +1 -1
- package/dist/routes/api/devtools/tests/route.js +2 -0
- package/dist/routes/api/health/route.d.ts +2 -0
- package/dist/routes/api/health/route.d.ts.map +1 -1
- package/dist/routes/api/health/route.js +2 -0
- package/dist/routes/api/internal/user-metadata/route.d.ts +2 -0
- package/dist/routes/api/internal/user-metadata/route.d.ts.map +1 -1
- package/dist/routes/api/internal/user-metadata/route.js +2 -0
- package/dist/routes/api/mcp/route.d.ts +2 -0
- package/dist/routes/api/mcp/route.d.ts.map +1 -1
- package/dist/routes/api/mcp/route.js +2 -0
- package/dist/routes/api/superadmin/subscriptions/route.d.ts +2 -0
- package/dist/routes/api/superadmin/subscriptions/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/subscriptions/route.js +2 -0
- package/dist/routes/api/superadmin/teams/[teamId]/route.d.ts +2 -0
- package/dist/routes/api/superadmin/teams/[teamId]/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/teams/[teamId]/route.js +2 -0
- package/dist/routes/api/superadmin/teams/route.d.ts +2 -0
- package/dist/routes/api/superadmin/teams/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/teams/route.js +2 -0
- package/dist/routes/api/superadmin/users/[userId]/route.d.ts +2 -0
- package/dist/routes/api/superadmin/users/[userId]/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/users/[userId]/route.js +2 -0
- package/dist/routes/api/superadmin/users/route.d.ts +2 -0
- package/dist/routes/api/superadmin/users/route.d.ts.map +1 -1
- package/dist/routes/api/superadmin/users/route.js +2 -0
- package/dist/routes/api/user/delete-account/route.d.ts +2 -0
- package/dist/routes/api/user/delete-account/route.d.ts.map +1 -1
- package/dist/routes/api/user/delete-account/route.js +2 -0
- package/dist/routes/api/user/plan-flags/route.d.ts +2 -0
- package/dist/routes/api/user/plan-flags/route.d.ts.map +1 -1
- package/dist/routes/api/user/plan-flags/route.js +2 -0
- package/dist/routes/api/user/profile/route.d.ts +2 -0
- package/dist/routes/api/user/profile/route.d.ts.map +1 -1
- package/dist/routes/api/user/profile/route.js +4 -3
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/[childId]/route.d.ts +2 -0
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/[childId]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/[childId]/route.js +2 -0
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/route.d.ts +2 -0
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/[entity]/[id]/child/[childType]/route.js +2 -0
- package/dist/routes/api/v1/billing/cancel/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/cancel/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/cancel/route.js +2 -0
- package/dist/routes/api/v1/billing/change-plan/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/change-plan/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/change-plan/route.js +2 -0
- package/dist/routes/api/v1/billing/check-action/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/check-action/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/check-action/route.js +2 -0
- package/dist/routes/api/v1/billing/checkout/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/checkout/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/checkout/route.js +2 -0
- package/dist/routes/api/v1/billing/plans/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/plans/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/plans/route.js +2 -0
- package/dist/routes/api/v1/billing/portal/route.d.ts +2 -0
- package/dist/routes/api/v1/billing/portal/route.d.ts.map +1 -1
- package/dist/routes/api/v1/billing/portal/route.js +2 -0
- package/dist/routes/api/v1/blocks/[slug]/route.d.ts +2 -0
- package/dist/routes/api/v1/blocks/[slug]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/blocks/[slug]/route.js +2 -0
- package/dist/routes/api/v1/blocks/route.d.ts +2 -0
- package/dist/routes/api/v1/blocks/route.d.ts.map +1 -1
- package/dist/routes/api/v1/blocks/route.js +2 -0
- package/dist/routes/api/v1/blocks/validate/route.d.ts +2 -0
- package/dist/routes/api/v1/blocks/validate/route.d.ts.map +1 -1
- package/dist/routes/api/v1/blocks/validate/route.js +2 -0
- package/dist/routes/api/v1/devtools/blocks/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/blocks/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/blocks/route.js +2 -9
- package/dist/routes/api/v1/devtools/docs/route.d.ts +2 -0
- package/dist/routes/api/v1/devtools/docs/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/docs/route.js +2 -0
- package/dist/routes/api/v1/devtools/features/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/features/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/features/route.js +2 -9
- package/dist/routes/api/v1/devtools/flows/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/flows/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/flows/route.js +2 -9
- package/dist/routes/api/v1/devtools/scheduled-actions/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/scheduled-actions/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/scheduled-actions/route.js +2 -9
- package/dist/routes/api/v1/devtools/scheduled-actions/run/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/scheduled-actions/run/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/scheduled-actions/run/route.js +2 -9
- package/dist/routes/api/v1/devtools/testing/route.d.ts +2 -1
- package/dist/routes/api/v1/devtools/testing/route.d.ts.map +1 -1
- package/dist/routes/api/v1/devtools/testing/route.js +2 -9
- package/dist/routes/api/v1/media/[id]/route.d.ts +2 -0
- package/dist/routes/api/v1/media/[id]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/[id]/route.js +2 -0
- package/dist/routes/api/v1/media/[id]/tags/route.d.ts +2 -0
- package/dist/routes/api/v1/media/[id]/tags/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/[id]/tags/route.js +2 -0
- package/dist/routes/api/v1/media/check-duplicates/route.d.ts +2 -0
- package/dist/routes/api/v1/media/check-duplicates/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/check-duplicates/route.js +2 -0
- package/dist/routes/api/v1/media/route.d.ts +2 -0
- package/dist/routes/api/v1/media/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/route.js +2 -0
- package/dist/routes/api/v1/media/upload/route.d.ts +2 -0
- package/dist/routes/api/v1/media/upload/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/upload/route.js +2 -0
- package/dist/routes/api/v1/media-tags/route.d.ts +2 -0
- package/dist/routes/api/v1/media-tags/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media-tags/route.js +2 -0
- package/dist/routes/api/v1/post-categories/[id]/route.d.ts +2 -0
- package/dist/routes/api/v1/post-categories/[id]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/post-categories/[id]/route.js +2 -0
- package/dist/routes/api/v1/post-categories/route.d.ts +2 -0
- package/dist/routes/api/v1/post-categories/route.d.ts.map +1 -1
- package/dist/routes/api/v1/post-categories/route.js +2 -0
- package/dist/routes/api/v1/teams/[teamId]/members/route.js +2 -2
- package/dist/routes/api/v1/teams/[teamId]/subscription/route.d.ts +2 -0
- package/dist/routes/api/v1/teams/[teamId]/subscription/route.d.ts.map +1 -1
- package/dist/routes/api/v1/teams/[teamId]/subscription/route.js +2 -0
- package/dist/routes/api/v1/teams/[teamId]/usage/[limitSlug]/route.d.ts +2 -0
- package/dist/routes/api/v1/teams/[teamId]/usage/[limitSlug]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/teams/[teamId]/usage/[limitSlug]/route.js +2 -0
- package/dist/routes/api/v1/users/[id]/route.d.ts.map +1 -1
- package/dist/routes/api/v1/users/[id]/route.js +3 -2
- package/dist/routes/api/v1/users/docs.md +34 -19
- package/dist/routes/api/v1/users/me/route.d.ts +6 -0
- package/dist/routes/api/v1/users/me/route.d.ts.map +1 -0
- package/dist/routes/api/v1/users/me/route.js +5 -0
- package/dist/routes/api/v1/users/presets.ts +2 -2
- package/dist/routes/dashboard/(main)/layout.cc.d.ts +4 -0
- package/dist/routes/dashboard/(main)/layout.cc.d.ts.map +1 -0
- package/dist/routes/dashboard/(main)/layout.cc.js +10 -0
- package/dist/routes/dashboard/(main)/layout.d.ts.map +1 -1
- package/dist/routes/dashboard/(main)/layout.js +3 -44
- package/dist/routes/dashboard/permission-denied/page.d.ts +1 -1
- package/dist/routes/dashboard/permission-denied/page.d.ts.map +1 -1
- package/dist/routes/dashboard/permission-denied/page.js +5 -1
- package/dist/routes/devtools/layout.cc.d.ts.map +1 -1
- package/dist/routes/devtools/layout.cc.js +5 -1
- package/dist/routes/manifest.json +10 -0
- package/dist/routes/robots.d.ts +10 -0
- package/dist/routes/robots.d.ts.map +1 -0
- package/dist/routes/robots.js +10 -0
- package/dist/routes/superadmin/layout.cc.d.ts.map +1 -1
- package/dist/routes/superadmin/layout.cc.js +5 -1
- package/dist/routes/variants.json +12 -2
- package/dist/templates/next.config.mjs +2 -29
- package/dist/templates/projects/blog/api/authors/[username]/route.ts +3 -0
- package/dist/templates/projects/blog/api/authors/route.ts +3 -0
- package/dist/templates/projects/blog/api/posts/public/route.ts +3 -0
- package/dist/templates/proxy.ts +12 -1
- package/dist/templates/public/favicon.ico +0 -0
- package/package.json +2 -2
- package/scripts/build/registry/__tests__/api-docs-colocated.test.mjs +3 -0
- package/scripts/build/registry/__tests__/billing-registry.test.mjs +50 -1
- package/scripts/build/registry/__tests__/block-registry.test.mjs +3 -0
- package/scripts/build/registry/__tests__/icons-discovery.test.mjs +3 -0
- package/scripts/build/registry/__tests__/quiet-console.mjs +17 -0
- package/scripts/build/registry/__tests__/safe-fs.test.mjs +3 -0
- package/scripts/build/registry/__tests__/team-roles.test.mjs +3 -0
- package/scripts/build/registry/discovery/permissions.test.mjs +3 -0
- package/scripts/build/registry/discovery/plugin-capabilities.mjs +2 -2
- package/scripts/build/registry/generators/billing-registry.mjs +7 -3
- package/scripts/build/registry/host/README.md +25 -1
- package/scripts/build/registry/host/__tests__/host-area-access.test.mjs +32 -0
- package/scripts/build/registry/host/__tests__/host-entities.test.mjs +32 -1
- package/scripts/build/registry/host/__tests__/host-plan.test.mjs +12 -2
- package/scripts/build/registry/host/entity-routes.mjs +9 -3
- package/scripts/build/registry/host/static-imports.mjs +4 -0
- package/scripts/build/routes-manifest.mjs +13 -1
- package/scripts/db/ssl-config.mjs +12 -1
- package/templates/next.config.mjs +2 -29
- package/templates/projects/blog/api/authors/[username]/route.ts +3 -0
- package/templates/projects/blog/api/authors/route.ts +3 -0
- package/templates/projects/blog/api/posts/public/route.ts +3 -0
- package/templates/proxy.ts +12 -1
- package/templates/public/favicon.ico +0 -0
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
interface DeveloperGuardProps {
|
|
2
2
|
children: React.ReactNode;
|
|
3
3
|
fallback?: React.ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* The server already checked the role before rendering `children` (a Cache Components host: core's area layout
|
|
6
|
+
* renders the guard only after area-access passed). Then the children render while the session loads instead of
|
|
7
|
+
* the loading state, so the server render holds the area's segments (Next's dev check reports a route whose
|
|
8
|
+
* segments a client component hides as "dropped"). The checks below still run once the session has loaded.
|
|
9
|
+
*/
|
|
10
|
+
serverChecked?: boolean;
|
|
4
11
|
}
|
|
5
12
|
/**
|
|
6
13
|
* DeveloperGuard Component
|
|
@@ -12,7 +19,7 @@ interface DeveloperGuardProps {
|
|
|
12
19
|
* @param children - Components to render if user is developer
|
|
13
20
|
* @param fallback - Custom fallback component (optional)
|
|
14
21
|
*/
|
|
15
|
-
export declare function DeveloperGuard({ children, fallback }: DeveloperGuardProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function DeveloperGuard({ children, fallback, serverChecked }: DeveloperGuardProps): import("react/jsx-runtime").JSX.Element;
|
|
16
23
|
/**
|
|
17
24
|
* Hook to check if current user is developer
|
|
18
25
|
* Useful for conditional rendering in components
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeveloperGuard.d.ts","sourceRoot":"","sources":["../../../../src/components/app/guards/DeveloperGuard.tsx"],"names":[],"mappings":"AAUA,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"DeveloperGuard.d.ts","sourceRoot":"","sources":["../../../../src/components/app/guards/DeveloperGuard.tsx"],"names":[],"mappings":"AAUA,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAqB,EAAE,EAAE,mBAAmB,2CAiHhG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAIxC"}
|
|
@@ -7,7 +7,7 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../..
|
|
|
7
7
|
import { AlertTriangle, ArrowLeft } from "lucide-react";
|
|
8
8
|
import { Button } from "../../ui/button.js";
|
|
9
9
|
import { useTranslations } from "next-intl";
|
|
10
|
-
function DeveloperGuard({ children, fallback }) {
|
|
10
|
+
function DeveloperGuard({ children, fallback, serverChecked = false }) {
|
|
11
11
|
var _a;
|
|
12
12
|
const { data: session, isPending } = useSession();
|
|
13
13
|
const router = useRouter();
|
|
@@ -23,6 +23,7 @@ function DeveloperGuard({ children, fallback }) {
|
|
|
23
23
|
}
|
|
24
24
|
}, [mounted, session, isPending, router]);
|
|
25
25
|
if (!mounted || isPending) {
|
|
26
|
+
if (serverChecked) return /* @__PURE__ */ jsx(Fragment, { children });
|
|
26
27
|
return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center min-h-screen", children: /* @__PURE__ */ jsxs("div", { className: "animate-pulse", children: [
|
|
27
28
|
/* @__PURE__ */ jsx("div", { className: "h-8 bg-muted rounded w-48 mb-4" }),
|
|
28
29
|
/* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded w-32" })
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
interface SuperAdminGuardProps {
|
|
2
2
|
children: React.ReactNode;
|
|
3
3
|
fallback?: React.ReactNode;
|
|
4
|
+
/**
|
|
5
|
+
* The server already checked the role before rendering `children` (a Cache Components host: core's area layout
|
|
6
|
+
* renders the guard only after area-access passed). Then the children render while the session loads instead of
|
|
7
|
+
* the loading state, so the server render holds the area's segments (Next's dev check reports a route whose
|
|
8
|
+
* segments a client component hides as "dropped"). The checks below still run once the session has loaded.
|
|
9
|
+
*/
|
|
10
|
+
serverChecked?: boolean;
|
|
4
11
|
}
|
|
5
12
|
/**
|
|
6
13
|
* SuperAdminGuard Component
|
|
@@ -12,7 +19,7 @@ interface SuperAdminGuardProps {
|
|
|
12
19
|
* @param children - Components to render if user is superadmin or developer
|
|
13
20
|
* @param fallback - Custom fallback component (optional)
|
|
14
21
|
*/
|
|
15
|
-
export declare function SuperAdminGuard({ children, fallback }: SuperAdminGuardProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function SuperAdminGuard({ children, fallback, serverChecked }: SuperAdminGuardProps): import("react/jsx-runtime").JSX.Element;
|
|
16
23
|
/**
|
|
17
24
|
* Hook to check if current user is superadmin
|
|
18
25
|
* Useful for conditional rendering in components
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuperAdminGuard.d.ts","sourceRoot":"","sources":["../../../../src/components/app/guards/SuperAdminGuard.tsx"],"names":[],"mappings":"AAUA,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"SuperAdminGuard.d.ts","sourceRoot":"","sources":["../../../../src/components/app/guards/SuperAdminGuard.tsx"],"names":[],"mappings":"AAUA,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAqB,EAAE,EAAE,oBAAoB,2CA0GlG;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAIzC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAI3C"}
|
|
@@ -7,7 +7,7 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../..
|
|
|
7
7
|
import { AlertTriangle, ArrowLeft } from "lucide-react";
|
|
8
8
|
import { Button } from "../../ui/button.js";
|
|
9
9
|
import { useTranslations } from "next-intl";
|
|
10
|
-
function SuperAdminGuard({ children, fallback }) {
|
|
10
|
+
function SuperAdminGuard({ children, fallback, serverChecked = false }) {
|
|
11
11
|
var _a, _b;
|
|
12
12
|
const { data: session, isPending } = useSession();
|
|
13
13
|
const router = useRouter();
|
|
@@ -23,6 +23,7 @@ function SuperAdminGuard({ children, fallback }) {
|
|
|
23
23
|
}
|
|
24
24
|
}, [mounted, session, isPending, router]);
|
|
25
25
|
if (!mounted || isPending) {
|
|
26
|
+
if (serverChecked) return /* @__PURE__ */ jsx(Fragment, { children });
|
|
26
27
|
return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center min-h-screen", children: /* @__PURE__ */ jsxs("div", { className: "animate-pulse", children: [
|
|
27
28
|
/* @__PURE__ */ jsx("div", { className: "h-8 bg-muted rounded w-48 mb-4" }),
|
|
28
29
|
/* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded w-32" })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-picker.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/block-editor/block-picker.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAA;
|
|
1
|
+
{"version":3,"file":"block-picker.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/block-editor/block-picker.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAA;AAyBxF,UAAU,gBAAgB;IACxB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,YAAY,EAAE,kBAAkB,CAAA;IAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5D,aAAa,EAAE,OAAO,CAAA;IACtB,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB,UAAU,EAAE,CAAC,aAAa,GAAG,gBAAgB,CAAC,EAAE,CAAA;IAChD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACzG,eAAe,EAAE,CAAC,MAAM,EAAE,CAAC,aAAa,GAAG,gBAAgB,CAAC,EAAE,KAAK,IAAI,CAAA;IACvE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,eAAuB,EAEvB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,cAAkB,GACnB,EAAE,gBAAgB,2CAkVlB"}
|
|
@@ -13,6 +13,7 @@ import { getCategoryConfig } from "./category-helpers.js";
|
|
|
13
13
|
import { TreeView } from "./tree-view.js";
|
|
14
14
|
import { PatternCard } from "./pattern-card.js";
|
|
15
15
|
import { withBasePath } from "../../../lib/base-path.js";
|
|
16
|
+
import { TEAM_ID_HEADER } from "../../../lib/api/client-headers.js";
|
|
16
17
|
function getTeamId() {
|
|
17
18
|
if (typeof window !== "undefined") {
|
|
18
19
|
return localStorage.getItem("activeTeamId");
|
|
@@ -23,7 +24,7 @@ function buildApiHeaders() {
|
|
|
23
24
|
const headers = {};
|
|
24
25
|
const teamId = getTeamId();
|
|
25
26
|
if (teamId) {
|
|
26
|
-
headers[
|
|
27
|
+
headers[TEAM_ID_HEADER] = teamId;
|
|
27
28
|
}
|
|
28
29
|
return headers;
|
|
29
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder-editor-view.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/block-editor/builder-editor-view.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAA;
|
|
1
|
+
{"version":3,"file":"builder-editor-view.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/block-editor/builder-editor-view.tsx"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAA;AA4CxF,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,kBAAkB,CAAA;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CAC9D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,EAAE,sBAAsB,2CAo7B7I"}
|
|
@@ -30,6 +30,8 @@ import { useSidebar } from "../../../contexts/sidebar-context.js";
|
|
|
30
30
|
import { cn } from "../../../lib/utils/index.js";
|
|
31
31
|
import { isPatternReference } from "../../../types/pattern-reference.js";
|
|
32
32
|
import { withBasePath } from "../../../lib/base-path.js";
|
|
33
|
+
import { validatePublicSlug } from "../../../lib/entities/public-slug.js";
|
|
34
|
+
import { BUILDER_SOURCE_HEADER, TEAM_ID_HEADER } from "../../../lib/api/client-headers.js";
|
|
33
35
|
function getTeamId() {
|
|
34
36
|
if (typeof window !== "undefined") {
|
|
35
37
|
return localStorage.getItem("activeTeamId");
|
|
@@ -43,16 +45,16 @@ function buildApiHeaders(includeContentType = false) {
|
|
|
43
45
|
}
|
|
44
46
|
const teamId = getTeamId();
|
|
45
47
|
if (teamId) {
|
|
46
|
-
headers[
|
|
48
|
+
headers[TEAM_ID_HEADER] = teamId;
|
|
47
49
|
}
|
|
48
|
-
headers[
|
|
50
|
+
headers[BUILDER_SOURCE_HEADER] = "true";
|
|
49
51
|
return headers;
|
|
50
52
|
}
|
|
51
53
|
function slugify(text) {
|
|
52
|
-
return text.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-z0-9\s-]/g, "").trim().replace(/\s+/g, "-").replace(/-+/g, "-");
|
|
54
|
+
return text.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^a-z0-9\s-]/g, "").trim().replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
|
|
53
55
|
}
|
|
54
56
|
function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldChange: onEntityFieldChangeProp }) {
|
|
55
|
-
var _a;
|
|
57
|
+
var _a, _b;
|
|
56
58
|
const router = useRouter();
|
|
57
59
|
const t = useTranslations("admin.builder");
|
|
58
60
|
const queryClient = useQueryClient();
|
|
@@ -74,10 +76,11 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
74
76
|
});
|
|
75
77
|
const [entityFields, setEntityFields] = useState({});
|
|
76
78
|
const [validationErrors, setValidationErrors] = useState({});
|
|
79
|
+
const [slugError, setSlugError] = useState(null);
|
|
77
80
|
const titleInputRef = useRef(null);
|
|
78
81
|
const showFieldsOption = useMemo(() => {
|
|
79
|
-
var _a2,
|
|
80
|
-
return (((
|
|
82
|
+
var _a2, _b2, _c;
|
|
83
|
+
return (((_b2 = (_a2 = entityConfig.builder) == null ? void 0 : _a2.sidebarFields) == null ? void 0 : _b2.length) ?? 0) > 0 || ((_c = entityConfig.taxonomies) == null ? void 0 : _c.enabled);
|
|
81
84
|
}, [entityConfig]);
|
|
82
85
|
const showPatternsTab = useMemo(() => {
|
|
83
86
|
return entitySlug !== "patterns";
|
|
@@ -106,7 +109,7 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
106
109
|
enabled: mode === "edit" && !!id
|
|
107
110
|
});
|
|
108
111
|
useEffect(() => {
|
|
109
|
-
var _a2,
|
|
112
|
+
var _a2, _b2;
|
|
110
113
|
if (mode === "edit" && (entityData == null ? void 0 : entityData.data)) {
|
|
111
114
|
const entity = entityData.data;
|
|
112
115
|
setTitle(entity.title ?? "");
|
|
@@ -116,7 +119,7 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
116
119
|
setBlocks(entity.blocks || []);
|
|
117
120
|
setPageSettings(entity.settings || { seo: {}, customFields: [] });
|
|
118
121
|
const fields = {};
|
|
119
|
-
(
|
|
122
|
+
(_b2 = (_a2 = entityConfig.builder) == null ? void 0 : _a2.sidebarFields) == null ? void 0 : _b2.forEach((field) => {
|
|
120
123
|
if (entity[field] !== void 0) {
|
|
121
124
|
fields[field] = entity[field];
|
|
122
125
|
}
|
|
@@ -125,7 +128,7 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
125
128
|
}
|
|
126
129
|
}, [entityData, entityConfig, mode]);
|
|
127
130
|
useEffect(() => {
|
|
128
|
-
var _a2,
|
|
131
|
+
var _a2, _b2;
|
|
129
132
|
if (mode === "create") {
|
|
130
133
|
setHasUnsavedChanges(title.length > 0 || blocks.length > 0 || status !== "draft");
|
|
131
134
|
return;
|
|
@@ -133,7 +136,7 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
133
136
|
if (!(entityData == null ? void 0 : entityData.data)) return;
|
|
134
137
|
const entity = entityData.data;
|
|
135
138
|
const hasChanges = title !== entity.title || slug !== entity.slug || status !== (entity.status || "draft") || JSON.stringify(blocks) !== JSON.stringify(entity.blocks || []) || JSON.stringify(pageSettings) !== JSON.stringify(entity.settings || { seo: {}, customFields: [] }) || JSON.stringify(entityFields) !== JSON.stringify(
|
|
136
|
-
((
|
|
139
|
+
((_b2 = (_a2 = entityConfig.builder) == null ? void 0 : _a2.sidebarFields) == null ? void 0 : _b2.reduce((acc, field) => {
|
|
137
140
|
if (entity[field] !== void 0) acc[field] = entity[field];
|
|
138
141
|
return acc;
|
|
139
142
|
}, {})) || {}
|
|
@@ -167,7 +170,11 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
167
170
|
});
|
|
168
171
|
if (!response.ok) {
|
|
169
172
|
const error = await response.json();
|
|
170
|
-
|
|
173
|
+
const slugIssue = Array.isArray(error.details) ? error.details.find((issue) => {
|
|
174
|
+
var _a2;
|
|
175
|
+
return ((_a2 = issue.path) == null ? void 0 : _a2[0]) === "slug";
|
|
176
|
+
}) : void 0;
|
|
177
|
+
throw Object.assign(new Error((slugIssue == null ? void 0 : slugIssue.message) || error.error || `Failed to save ${entitySlug}`), { slugIssue: Boolean(slugIssue) });
|
|
171
178
|
}
|
|
172
179
|
return response.json();
|
|
173
180
|
},
|
|
@@ -187,9 +194,11 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
187
194
|
}
|
|
188
195
|
},
|
|
189
196
|
onError: (error) => {
|
|
197
|
+
if (error.slugIssue) setSlugError(error.message);
|
|
190
198
|
toast.error(error.message);
|
|
191
199
|
}
|
|
192
200
|
});
|
|
201
|
+
const slugChanged = mode === "create" || slug !== ((_a = entityData == null ? void 0 : entityData.data) == null ? void 0 : _a.slug);
|
|
193
202
|
const validateFields = useCallback(() => {
|
|
194
203
|
var _a2;
|
|
195
204
|
const errors = {};
|
|
@@ -199,7 +208,11 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
199
208
|
if (showSlug && !slug.trim()) {
|
|
200
209
|
errors.slug = true;
|
|
201
210
|
}
|
|
211
|
+
const slugReason = showSlug && slugChanged && slug.trim() && !slug.includes("/") ? validatePublicSlug(entityConfig, slug.trim()) : null;
|
|
212
|
+
setSlugError(slugReason);
|
|
213
|
+
if (slugReason) toast.error(slugReason);
|
|
202
214
|
setValidationErrors(errors);
|
|
215
|
+
if (slugReason) return false;
|
|
203
216
|
if (errors.title || errors.slug) {
|
|
204
217
|
if (errors.title) {
|
|
205
218
|
(_a2 = titleInputRef.current) == null ? void 0 : _a2.focus();
|
|
@@ -207,43 +220,43 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
207
220
|
return false;
|
|
208
221
|
}
|
|
209
222
|
return true;
|
|
210
|
-
}, [title, slug, showSlug]);
|
|
223
|
+
}, [title, slug, slugChanged, showSlug, entityConfig]);
|
|
211
224
|
const handleSave = useCallback(() => {
|
|
212
225
|
if (!validateFields()) return;
|
|
213
226
|
const data = {
|
|
214
227
|
title,
|
|
215
|
-
slug,
|
|
228
|
+
...slugChanged ? { slug } : {},
|
|
216
229
|
blocks,
|
|
217
230
|
status,
|
|
218
231
|
settings: pageSettings,
|
|
219
232
|
...entityFields
|
|
220
233
|
};
|
|
221
234
|
saveMutation.mutate(data);
|
|
222
|
-
}, [title, slug, blocks, status, pageSettings, entityFields, saveMutation, validateFields]);
|
|
235
|
+
}, [title, slug, blocks, status, pageSettings, entityFields, saveMutation, validateFields, slugChanged]);
|
|
223
236
|
const handleSaveDraft = useCallback(() => {
|
|
224
237
|
if (!validateFields()) return;
|
|
225
238
|
const data = {
|
|
226
239
|
title,
|
|
227
|
-
slug,
|
|
240
|
+
...slugChanged ? { slug } : {},
|
|
228
241
|
blocks,
|
|
229
242
|
status: "draft",
|
|
230
243
|
settings: pageSettings,
|
|
231
244
|
...entityFields
|
|
232
245
|
};
|
|
233
246
|
saveMutation.mutate(data);
|
|
234
|
-
}, [title, slug, blocks, pageSettings, entityFields, saveMutation, validateFields]);
|
|
247
|
+
}, [title, slug, blocks, pageSettings, entityFields, saveMutation, validateFields, slugChanged]);
|
|
235
248
|
const handlePublish = useCallback(() => {
|
|
236
249
|
if (!validateFields()) return;
|
|
237
250
|
const data = {
|
|
238
251
|
title,
|
|
239
|
-
slug,
|
|
252
|
+
...slugChanged ? { slug } : {},
|
|
240
253
|
blocks,
|
|
241
254
|
status: "published",
|
|
242
255
|
settings: pageSettings,
|
|
243
256
|
...entityFields
|
|
244
257
|
};
|
|
245
258
|
saveMutation.mutate(data);
|
|
246
|
-
}, [title, slug, blocks, pageSettings, entityFields, saveMutation, validateFields]);
|
|
259
|
+
}, [title, slug, blocks, pageSettings, entityFields, saveMutation, validateFields, slugChanged]);
|
|
247
260
|
const selectedBlockId = useMemo(() => {
|
|
248
261
|
if (selectedBlockIds.size === 1) return Array.from(selectedBlockIds)[0];
|
|
249
262
|
return null;
|
|
@@ -512,9 +525,9 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
512
525
|
}, [handleClearSelection]);
|
|
513
526
|
const selectedBlock = selectedBlockId ? blocks.find((b) => b.id === selectedBlockId) : void 0;
|
|
514
527
|
const publicUrl = useMemo(() => {
|
|
515
|
-
var _a2,
|
|
528
|
+
var _a2, _b2, _c;
|
|
516
529
|
if (status !== "published" || !slug) return null;
|
|
517
|
-
const basePath = ((_a2 = entityConfig.access) == null ? void 0 : _a2.basePath) ?? ((_c = (
|
|
530
|
+
const basePath = ((_a2 = entityConfig.access) == null ? void 0 : _a2.basePath) ?? ((_c = (_b2 = entityConfig.builder) == null ? void 0 : _b2.public) == null ? void 0 : _c.basePath) ?? "";
|
|
518
531
|
return basePath === "/" ? `/${slug}` : `${basePath}/${slug}`;
|
|
519
532
|
}, [status, slug, entityConfig]);
|
|
520
533
|
const leftSidebarOptions = useMemo(() => {
|
|
@@ -596,7 +609,7 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
596
609
|
{
|
|
597
610
|
className: cn(
|
|
598
611
|
"flex items-center gap-0.5 text-sm text-muted-foreground",
|
|
599
|
-
validationErrors.slug && "text-destructive"
|
|
612
|
+
(validationErrors.slug || slugError) && "text-destructive"
|
|
600
613
|
),
|
|
601
614
|
"data-cy": sel("blockEditor.header.slugWrapper"),
|
|
602
615
|
children: [
|
|
@@ -610,6 +623,7 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
610
623
|
onChange: (e) => {
|
|
611
624
|
const newSlug = e.target.value;
|
|
612
625
|
setSlug(newSlug);
|
|
626
|
+
setSlugError(null);
|
|
613
627
|
if (newSlug !== slugify(title)) {
|
|
614
628
|
setSlugManuallyEdited(true);
|
|
615
629
|
}
|
|
@@ -625,9 +639,11 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
625
639
|
),
|
|
626
640
|
placeholder: t("placeholders.slug"),
|
|
627
641
|
"data-cy": sel("blockEditor.header.slugInput"),
|
|
628
|
-
style: { width: slug ? `${Math.max(slug.length, 4)}ch` : "60px" }
|
|
642
|
+
style: { width: slug ? `${Math.max(slug.length, 4)}ch` : "60px" },
|
|
643
|
+
"aria-invalid": Boolean(slugError)
|
|
629
644
|
}
|
|
630
645
|
),
|
|
646
|
+
slugError && /* @__PURE__ */ jsx("span", { role: "alert", className: "ml-2 text-xs", "data-cy": "builder-slug-error", children: slugError }),
|
|
631
647
|
isPublicEntity && publicUrl && /* @__PURE__ */ jsx(
|
|
632
648
|
Button,
|
|
633
649
|
{
|
|
@@ -716,7 +732,7 @@ function BuilderEditorView({ entitySlug, entityConfig, id, mode, onEntityFieldCh
|
|
|
716
732
|
{
|
|
717
733
|
className: "text-xs font-medium text-muted-foreground uppercase tracking-wide",
|
|
718
734
|
"data-cy": sel("blockEditor.header.statusLabel"),
|
|
719
|
-
children: ((
|
|
735
|
+
children: ((_b = statusOptions.find((o) => o.value === status)) == null ? void 0 : _b.label) || status
|
|
720
736
|
}
|
|
721
737
|
)
|
|
722
738
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-reference-preview.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/block-editor/pattern-reference-preview.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"pattern-reference-preview.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/block-editor/pattern-reference-preview.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAMxE,UAAU,4BAA4B;IACpC,UAAU,EAAE,gBAAgB,CAAA;IAC5B,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AA8CD,wBAAgB,uBAAuB,CAAC,EACtC,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,GACT,EAAE,4BAA4B,2CAoJ9B"}
|
|
@@ -10,6 +10,7 @@ import { cn } from "../../../lib/utils/index.js";
|
|
|
10
10
|
import { sel } from "../../../lib/test/index.js";
|
|
11
11
|
import { getBlockComponent, normalizeBlockProps } from "../../../lib/blocks/loader.js";
|
|
12
12
|
import { withBasePath } from "../../../lib/base-path.js";
|
|
13
|
+
import { TEAM_ID_HEADER } from "../../../lib/api/client-headers.js";
|
|
13
14
|
function PatternLoadingSkeleton() {
|
|
14
15
|
return /* @__PURE__ */ jsx("div", { className: "w-full py-12 px-4 animate-pulse bg-muted/20 border-2 border-dashed border-muted-foreground/30 rounded-lg", children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto", children: [
|
|
15
16
|
/* @__PURE__ */ jsx("div", { className: "h-8 bg-muted rounded w-3/4 mb-4" }),
|
|
@@ -34,7 +35,7 @@ function buildApiHeaders() {
|
|
|
34
35
|
const headers = {};
|
|
35
36
|
const teamId = getTeamId();
|
|
36
37
|
if (teamId) {
|
|
37
|
-
headers[
|
|
38
|
+
headers[TEAM_ID_HEADER] = teamId;
|
|
38
39
|
}
|
|
39
40
|
return headers;
|
|
40
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthGuard.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/AuthGuard.tsx"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAOD,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"AuthGuard.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/AuthGuard.tsx"],"names":[],"mappings":"AASA,UAAU,cAAc;IACtB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAOD,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAyBrD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useAuth } from "../../../hooks/useAuth.js";
|
|
4
|
-
import {
|
|
4
|
+
import { loadLoginPage } from "../../../lib/auth/load-login-page.js";
|
|
5
5
|
import { useEffect } from "react";
|
|
6
6
|
import { DashboardAuthSkeleton } from "./DashboardAuthSkeleton.js";
|
|
7
7
|
import { useEnsureUserMetadata } from "../../../hooks/useEnsureUserMetadata.js";
|
|
@@ -12,13 +12,12 @@ function EnsureUserMetadata() {
|
|
|
12
12
|
}
|
|
13
13
|
function AuthGuard({ children }) {
|
|
14
14
|
const { user, isLoading } = useAuth();
|
|
15
|
-
const router = useRouter();
|
|
16
15
|
useAuthMethodDetector();
|
|
17
16
|
useEffect(() => {
|
|
18
17
|
if (!isLoading && !user) {
|
|
19
|
-
|
|
18
|
+
loadLoginPage();
|
|
20
19
|
}
|
|
21
|
-
}, [user, isLoading
|
|
20
|
+
}, [user, isLoading]);
|
|
22
21
|
if (isLoading) {
|
|
23
22
|
return /* @__PURE__ */ jsx(DashboardAuthSkeleton, {});
|
|
24
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthenticatedDashboardLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/AuthenticatedDashboardLayout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AuthenticatedDashboardLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/AuthenticatedDashboardLayout.tsx"],"names":[],"mappings":"AAiDA,iFAAiF;AACjF,wBAAgB,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAMvF"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Suspense, useEffect } from "react";
|
|
4
|
-
import {
|
|
4
|
+
import { loadLoginPage } from "../../../lib/auth/load-login-page.js";
|
|
5
5
|
import { useAuth } from "../../../hooks/useAuth.js";
|
|
6
|
-
import { DashboardAuthSkeleton } from "./DashboardAuthSkeleton.js";
|
|
7
6
|
import { DashboardProviders } from "../../../providers/DashboardProviders.js";
|
|
8
7
|
import { DashboardTranslationPreloader } from "../../../lib/i18n/DashboardTranslationPreloader.js";
|
|
9
8
|
import { TranslationDebugger } from "../../../utils/dev/TranslationDebugger.js";
|
|
@@ -15,17 +14,17 @@ function AuthMethodDetectorWrapper() {
|
|
|
15
14
|
}
|
|
16
15
|
function DashboardLayoutContent({ children }) {
|
|
17
16
|
const { user, isLoading } = useAuth();
|
|
18
|
-
const router = useRouter();
|
|
19
17
|
useEnsureUserMetadata();
|
|
20
18
|
useEffect(() => {
|
|
21
|
-
if (!isLoading && !user)
|
|
22
|
-
}, [user, isLoading
|
|
23
|
-
if (isLoading) return
|
|
24
|
-
if (!user) return null;
|
|
19
|
+
if (!isLoading && !user) loadLoginPage();
|
|
20
|
+
}, [user, isLoading]);
|
|
21
|
+
if (!isLoading && !user) return null;
|
|
25
22
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
26
|
-
/* @__PURE__ */
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
user && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
24
|
+
/* @__PURE__ */ jsx(DashboardTranslationPreloader, {}),
|
|
25
|
+
/* @__PURE__ */ jsx(TranslationDebugger, {}),
|
|
26
|
+
/* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(AuthMethodDetectorWrapper, {}) })
|
|
27
|
+
] }),
|
|
29
28
|
/* @__PURE__ */ jsx("div", { id: "dashboard-container", "data-cy": "dashboard-container", "data-testid": "dashboard-container", children })
|
|
30
29
|
] });
|
|
31
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardAuthLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/DashboardAuthLayout.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DashboardAuthLayout.d.ts","sourceRoot":"","sources":["../../../../src/components/dashboard/layouts/DashboardAuthLayout.tsx"],"names":[],"mappings":"AAsEA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,2CAEA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useAuth } from "../../../hooks/useAuth.js";
|
|
4
|
-
import {
|
|
4
|
+
import { loadLoginPage } from "../../../lib/auth/load-login-page.js";
|
|
5
5
|
import { useEffect, Suspense } from "react";
|
|
6
6
|
import { DashboardAuthSkeleton } from "./DashboardAuthSkeleton.js";
|
|
7
7
|
import { DashboardTranslationPreloader } from "../../../lib/i18n/DashboardTranslationPreloader.js";
|
|
@@ -14,13 +14,12 @@ function AuthMethodDetectorWrapper() {
|
|
|
14
14
|
}
|
|
15
15
|
function DashboardLayoutContent({ children }) {
|
|
16
16
|
const { user, isLoading } = useAuth();
|
|
17
|
-
const router = useRouter();
|
|
18
17
|
useEnsureUserMetadata();
|
|
19
18
|
useEffect(() => {
|
|
20
19
|
if (!isLoading && !user) {
|
|
21
|
-
|
|
20
|
+
loadLoginPage();
|
|
22
21
|
}
|
|
23
|
-
}, [user, isLoading
|
|
22
|
+
}, [user, isLoading]);
|
|
24
23
|
if (isLoading) {
|
|
25
24
|
return /* @__PURE__ */ jsx(DashboardAuthSkeleton, {});
|
|
26
25
|
}
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
* The sidebar rail collapses below the `md:` breakpoint, matching the real
|
|
11
11
|
* dashboard sidebar, so mobile never shows a phantom sidebar block.
|
|
12
12
|
*
|
|
13
|
-
* Shared by AuthGuard
|
|
14
|
-
*
|
|
13
|
+
* Shared by AuthGuard and DashboardAuthLayout so the public API and the template cannot drift. The
|
|
14
|
+
* dashboard layout itself (AuthenticatedDashboardLayout) does not use it: it renders the page while the session loads.
|
|
15
15
|
*/
|
|
16
16
|
export declare function DashboardAuthSkeleton(): import("react/jsx-runtime").JSX.Element;
|
|
17
17
|
//# sourceMappingURL=DashboardAuthSkeleton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityDetailWrapper.d.ts","sourceRoot":"","sources":["../../../../src/components/entities/wrappers/EntityDetailWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAoD,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"EntityDetailWrapper.d.ts","sourceRoot":"","sources":["../../../../src/components/entities/wrappers/EntityDetailWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAoD,MAAM,OAAO,CAAA;AAcxE,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;CAChE;AAED,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EACV,EAAE,EACF,gBAAqB,EACrB,OAAO,EACP,SAAS,EACT,oBAAyB,GAC1B,EAAE,wBAAwB,2CAyZ1B"}
|
|
@@ -5,6 +5,7 @@ import { EntityDetail } from "../EntityDetail.js";
|
|
|
5
5
|
import { Alert, AlertDescription } from "../../ui/alert.js";
|
|
6
6
|
import { SkeletonEntityDetail } from "../../ui/skeleton-detail.js";
|
|
7
7
|
import { useEntityConfig } from "../../../hooks/useEntityConfig.js";
|
|
8
|
+
import { useAuth } from "../../../hooks/useAuth.js";
|
|
8
9
|
import { useRouter } from "next/navigation";
|
|
9
10
|
import { getEntityData, deleteEntityData, fetchWithTeam } from "../../../lib/api/entities.js";
|
|
10
11
|
import { TeamDetailSection } from "../../teams/TeamDetailSection.js";
|
|
@@ -18,6 +19,8 @@ function EntityDetailWrapper({
|
|
|
18
19
|
customFormComponents = {}
|
|
19
20
|
}) {
|
|
20
21
|
const { config: entityConfig, isLoading: isLoadingConfig, error: configError, isOverride } = useEntityConfig(entityType);
|
|
22
|
+
const { user } = useAuth();
|
|
23
|
+
const signedIn = Boolean(user);
|
|
21
24
|
const router = useRouter();
|
|
22
25
|
const [data, setData] = useState(null);
|
|
23
26
|
const [childData, setChildData] = useState({});
|
|
@@ -77,7 +80,7 @@ function EntityDetailWrapper({
|
|
|
77
80
|
dataLoadedRef.current = false;
|
|
78
81
|
prevIdRef.current = id;
|
|
79
82
|
}
|
|
80
|
-
if (!entityConfig || !id) return;
|
|
83
|
+
if (!entityConfig || !id || !signedIn) return;
|
|
81
84
|
if (dataLoadedRef.current) return;
|
|
82
85
|
if (!entityConfig.enabled) {
|
|
83
86
|
const error = new Error(`Entity "${entityType}" is disabled`);
|
|
@@ -136,7 +139,7 @@ function EntityDetailWrapper({
|
|
|
136
139
|
}
|
|
137
140
|
};
|
|
138
141
|
loadEntityData();
|
|
139
|
-
}, [entityConfig == null ? void 0 : entityConfig.slug, entityType, id]);
|
|
142
|
+
}, [entityConfig == null ? void 0 : entityConfig.slug, entityType, id, signedIn]);
|
|
140
143
|
const handleEdit = useCallback(() => {
|
|
141
144
|
router.push(`/dashboard/${entityConfig == null ? void 0 : entityConfig.slug}/${id}/edit`);
|
|
142
145
|
}, [router, entityConfig, id]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFormWrapper.d.ts","sourceRoot":"","sources":["../../../../src/components/entities/wrappers/EntityFormWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAA2C,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"EntityFormWrapper.d.ts","sourceRoot":"","sources":["../../../../src/components/entities/wrappers/EntityFormWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAA2C,MAAM,OAAO,CAAA;AAW/D,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAChC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,IAAI,EACJ,EAAE,EACF,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EACT,OAAO,EACP,SAAS,EACT,aAAa,EAAE,uBAAuB,EACvC,EAAE,sBAAsB,2CAyIxB"}
|
|
@@ -6,6 +6,7 @@ import { EntityForm } from "../EntityForm.js";
|
|
|
6
6
|
import { EntityDetailHeader } from "../EntityDetailHeader.js";
|
|
7
7
|
import { Alert, AlertDescription } from "../../ui/alert.js";
|
|
8
8
|
import { SkeletonEntityForm } from "../../ui/skeleton-form.js";
|
|
9
|
+
import { useAuth } from "../../../hooks/useAuth.js";
|
|
9
10
|
import { useEntityConfig } from "../../../hooks/useEntityConfig.js";
|
|
10
11
|
import { useTeam } from "../../../hooks/useTeam.js";
|
|
11
12
|
import { getEntityData, createEntityData, updateEntityData } from "../../../lib/api/entities.js";
|
|
@@ -20,6 +21,8 @@ function EntityFormWrapper({
|
|
|
20
21
|
headerActions: additionalHeaderActions
|
|
21
22
|
}) {
|
|
22
23
|
var _a, _b;
|
|
24
|
+
const { user } = useAuth();
|
|
25
|
+
const signedIn = Boolean(user);
|
|
23
26
|
const router = useRouter();
|
|
24
27
|
const { config: entityConfig, isLoading: isLoadingConfig, error: configError, isOverride } = useEntityConfig(entityType);
|
|
25
28
|
const { teamId } = useTeam();
|
|
@@ -32,7 +35,7 @@ function EntityFormWrapper({
|
|
|
32
35
|
return;
|
|
33
36
|
}
|
|
34
37
|
const loadInitialData = async () => {
|
|
35
|
-
if (mode === "edit" && id && entityConfig) {
|
|
38
|
+
if (mode === "edit" && id && entityConfig && signedIn) {
|
|
36
39
|
if (!entityConfig.enabled) {
|
|
37
40
|
onError == null ? void 0 : onError(new Error(`Entity "${entityType}" is disabled`));
|
|
38
41
|
return;
|
|
@@ -52,7 +55,7 @@ function EntityFormWrapper({
|
|
|
52
55
|
}
|
|
53
56
|
};
|
|
54
57
|
loadInitialData();
|
|
55
|
-
}, [mode, id, entityType, entityConfig, onError, isOverride, propsInitialData]);
|
|
58
|
+
}, [mode, id, entityType, entityConfig, onError, isOverride, propsInitialData, signedIn]);
|
|
56
59
|
const handleSubmit = useCallback(async (data) => {
|
|
57
60
|
setSubmitError(null);
|
|
58
61
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityListWrapper.d.ts","sourceRoot":"","sources":["../../../../src/components/entities/wrappers/EntityListWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAA4D,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"EntityListWrapper.d.ts","sourceRoot":"","sources":["../../../../src/components/entities/wrappers/EntityListWrapper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAA4D,MAAM,OAAO,CAAA;AAqBhF,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAChC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,SAAS,EACT,aAAa,EACd,EAAE,sBAAsB,2CAmYxB"}
|
|
@@ -12,6 +12,7 @@ import { SkeletonEntityList } from "../../ui/skeleton-list.js";
|
|
|
12
12
|
import { SearchInput } from "../../shared/SearchInput.js";
|
|
13
13
|
import { MultiSelectFilter } from "../../shared/MultiSelectFilter.js";
|
|
14
14
|
import { useEntityConfig } from "../../../hooks/useEntityConfig.js";
|
|
15
|
+
import { useAuth } from "../../../hooks/useAuth.js";
|
|
15
16
|
import { useUrlFilters } from "../../../hooks/useUrlFilters.js";
|
|
16
17
|
import { listEntityData, deleteEntityData, duplicateEntityData } from "../../../lib/api/entities.js";
|
|
17
18
|
import { useTeam } from "../../../hooks/useTeam.js";
|
|
@@ -24,6 +25,8 @@ function EntityListWrapper({
|
|
|
24
25
|
headerActions
|
|
25
26
|
}) {
|
|
26
27
|
var _a, _b;
|
|
28
|
+
const { user } = useAuth();
|
|
29
|
+
const signedIn = Boolean(user);
|
|
27
30
|
const router = useRouter();
|
|
28
31
|
const { config: entityConfig, isLoading, error: configError, isOverride } = useEntityConfig(entityType);
|
|
29
32
|
const { teamId } = useTeam();
|
|
@@ -122,7 +125,7 @@ function EntityListWrapper({
|
|
|
122
125
|
return true;
|
|
123
126
|
}, [filters, entityConfig == null ? void 0 : entityConfig.ui.dashboard.filters, schemaKeysForSync]);
|
|
124
127
|
useEffect(() => {
|
|
125
|
-
if (!(entityConfig == null ? void 0 : entityConfig.slug)) return;
|
|
128
|
+
if (!(entityConfig == null ? void 0 : entityConfig.slug) || !signedIn) return;
|
|
126
129
|
if (!filtersMatchUrl) return;
|
|
127
130
|
const isInitial = !hasLoadedRef.current;
|
|
128
131
|
const filtersChanged = prevFiltersKeyRef.current !== filtersKey;
|
|
@@ -131,7 +134,7 @@ function EntityListWrapper({
|
|
|
131
134
|
hasLoadedRef.current = true;
|
|
132
135
|
loadData(isInitial);
|
|
133
136
|
}
|
|
134
|
-
}, [entityConfig == null ? void 0 : entityConfig.slug, filtersKey, filtersMatchUrl, loadData]);
|
|
137
|
+
}, [entityConfig == null ? void 0 : entityConfig.slug, filtersKey, filtersMatchUrl, loadData, signedIn]);
|
|
135
138
|
const handleSearch = useCallback((query) => {
|
|
136
139
|
setFilter("search", query);
|
|
137
140
|
}, [setFilter]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation-display.d.ts","sourceRoot":"","sources":["../../../src/components/ui/relation-display.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relation-display.d.ts","sourceRoot":"","sources":["../../../src/components/ui/relation-display.tsx"],"names":[],"mappings":"AAOA,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAGD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAgB,EAChB,MAAM,EACP,EAAE,oBAAoB,2CAgJtB"}
|