@questpie/admin 1.1.1 → 3.0.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/README.md +256 -488
- package/dist/augmentation.d.mts +414 -0
- package/dist/client/blocks/block-renderer.d.mts +45 -0
- package/dist/client/blocks/block-renderer.mjs +105 -0
- package/dist/client/blocks/index.d.mts +2 -0
- package/dist/client/blocks/types.d.mts +68 -0
- package/dist/client/blocks/types.mjs +19 -0
- package/dist/client/builder/admin-types.d.mts +40 -0
- package/dist/client/builder/admin.d.mts +110 -0
- package/dist/client/builder/admin.mjs +151 -0
- package/dist/client/builder/field/field.d.mts +51 -0
- package/dist/client/builder/field/field.mjs +37 -0
- package/dist/client/builder/index.d.mts +31 -0
- package/dist/client/builder/page/page.d.mts +24 -0
- package/dist/client/builder/page/page.mjs +31 -0
- package/dist/client/builder/registry.d.mts +50 -0
- package/dist/client/builder/types/action-registry.mjs +276 -0
- package/dist/client/builder/types/action-types.d.mts +226 -0
- package/dist/client/builder/types/collection-types.mjs +10 -0
- package/dist/client/builder/types/common.d.mts +46 -0
- package/dist/client/builder/types/field-types.d.mts +592 -0
- package/dist/client/builder/types/field-types.mjs +18 -0
- package/dist/client/builder/types/ui-config.d.mts +158 -0
- package/dist/client/builder/types/widget-types.d.mts +562 -0
- package/dist/client/builder/validation.d.mts +33 -0
- package/dist/client/builder/validation.mjs +227 -0
- package/dist/client/builder/view/view.d.mts +49 -0
- package/dist/client/builder/view/view.mjs +27 -0
- package/dist/client/builder/widget/widget.d.mts +27 -0
- package/dist/client/builder/widget/widget.mjs +21 -0
- package/dist/client/components/actions/action-button.mjs +245 -0
- package/dist/client/components/actions/action-dialog.mjs +559 -0
- package/dist/client/components/actions/confirmation-dialog.mjs +201 -0
- package/dist/client/components/actions/header-actions.mjs +210 -0
- package/dist/client/components/admin-link.d.mts +66 -0
- package/dist/client/components/admin-link.mjs +171 -0
- package/dist/client/components/auth/auth-guard.d.mts +50 -0
- package/dist/client/components/auth/auth-guard.mjs +60 -0
- package/dist/client/components/auth/auth-loading.d.mts +35 -0
- package/dist/client/components/auth/auth-loading.mjs +55 -0
- package/dist/client/components/blocks/block-canvas.mjs +159 -0
- package/dist/client/components/blocks/block-editor-context.mjs +125 -0
- package/dist/client/components/blocks/block-editor-layout.mjs +199 -0
- package/dist/client/components/blocks/block-editor-provider.mjs +235 -0
- package/dist/client/components/blocks/block-fields-renderer.mjs +240 -0
- package/dist/client/components/blocks/block-insert-button.mjs +189 -0
- package/dist/client/components/blocks/block-item-menu.mjs +363 -0
- package/dist/client/components/blocks/block-item.mjs +434 -0
- package/dist/client/components/blocks/block-library-sidebar.mjs +285 -0
- package/dist/client/components/blocks/block-tree.mjs +103 -0
- package/dist/client/components/blocks/block-type-icon.mjs +95 -0
- package/dist/client/components/blocks/utils/tree-utils.mjs +185 -0
- package/dist/client/components/component-renderer.d.mts +114 -0
- package/dist/client/components/component-renderer.mjs +258 -0
- package/dist/client/components/error-boundary.mjs +144 -0
- package/dist/client/components/fields/array-field.mjs +506 -0
- package/dist/client/components/fields/asset-preview-field.mjs +159 -0
- package/dist/client/components/fields/blocks-field/blocks-field.mjs +209 -0
- package/dist/client/components/fields/boolean-field.mjs +77 -0
- package/dist/client/components/fields/date-field.mjs +76 -0
- package/dist/client/components/fields/datetime-field.mjs +74 -0
- package/dist/client/components/fields/email-field.mjs +67 -0
- package/dist/client/components/fields/field-utils.mjs +64 -0
- package/dist/client/components/fields/field-wrapper.mjs +124 -0
- package/dist/client/components/fields/json-field.mjs +461 -0
- package/dist/client/components/fields/locale-badge.mjs +25 -0
- package/dist/client/components/fields/number-field.mjs +73 -0
- package/dist/client/components/fields/object-array-field.mjs +707 -0
- package/dist/client/components/fields/object-field.mjs +686 -0
- package/dist/client/components/fields/relation/displays/cards-display.mjs +254 -0
- package/dist/client/components/fields/relation/displays/chips-display.mjs +173 -0
- package/dist/client/components/fields/relation/displays/grid-display.mjs +209 -0
- package/dist/client/components/fields/relation/displays/list-display.mjs +247 -0
- package/dist/client/components/fields/relation/displays/table-display.mjs +309 -0
- package/dist/client/components/fields/relation/displays/types.mjs +72 -0
- package/dist/client/components/fields/relation/relation-items-display.mjs +143 -0
- package/dist/client/components/fields/relation-field.mjs +161 -0
- package/dist/client/components/fields/relation-picker.mjs +296 -0
- package/dist/client/components/fields/relation-select.mjs +232 -0
- package/dist/client/components/fields/rich-text-editor/bubble-menu.mjs +105 -0
- package/dist/client/components/fields/rich-text-editor/extensions.mjs +144 -0
- package/dist/client/components/fields/rich-text-editor/image-popover.mjs +221 -0
- package/dist/client/components/fields/rich-text-editor/index.mjs +520 -0
- package/dist/client/components/fields/rich-text-editor/link-popover.mjs +85 -0
- package/dist/client/components/fields/rich-text-editor/presets.mjs +123 -0
- package/dist/client/components/fields/rich-text-editor/slash-commands.mjs +188 -0
- package/dist/client/components/fields/rich-text-editor/table-controls.mjs +433 -0
- package/dist/client/components/fields/rich-text-editor/toolbar.mjs +541 -0
- package/dist/client/components/fields/rich-text-editor/types.mjs +30 -0
- package/dist/client/components/fields/rich-text-editor/utils.mjs +50 -0
- package/dist/client/components/fields/rich-text-field.mjs +64 -0
- package/dist/client/components/fields/select-field.mjs +88 -0
- package/dist/client/components/fields/text-field.mjs +72 -0
- package/dist/client/components/fields/textarea-field.mjs +71 -0
- package/dist/client/components/fields/time-field.mjs +67 -0
- package/dist/client/components/fields/upload-field.mjs +621 -0
- package/dist/client/components/filter-builder/columns-tab.mjs +325 -0
- package/dist/client/components/filter-builder/filter-builder-sheet.mjs +456 -0
- package/dist/client/components/filter-builder/filters-tab.mjs +663 -0
- package/dist/client/components/filter-builder/saved-views-tab.mjs +278 -0
- package/dist/client/components/history-sidebar.mjs +496 -0
- package/dist/client/components/layout/field-layout-renderer.mjs +301 -0
- package/dist/client/components/locale-switcher.mjs +251 -0
- package/dist/client/components/media/media-grid.mjs +314 -0
- package/dist/client/components/media/media-picker-dialog.mjs +563 -0
- package/dist/client/components/preview/live-preview-mode.mjs +503 -0
- package/dist/client/components/preview/preview-pane.mjs +388 -0
- package/dist/client/components/primitives/asset-preview.mjs +771 -0
- package/dist/client/components/primitives/checkbox-input.mjs +59 -0
- package/dist/client/components/primitives/date-input.mjs +461 -0
- package/dist/client/components/primitives/dropzone.mjs +368 -0
- package/dist/client/components/primitives/number-input.mjs +117 -0
- package/dist/client/components/primitives/select-multi.mjs +590 -0
- package/dist/client/components/primitives/select-single.mjs +473 -0
- package/dist/client/components/primitives/text-input.mjs +45 -0
- package/dist/client/components/primitives/textarea-input.mjs +43 -0
- package/dist/client/components/primitives/time-input.mjs +145 -0
- package/dist/client/components/primitives/toggle-input.mjs +51 -0
- package/dist/client/components/primitives/types.mjs +12 -0
- package/dist/client/components/sheets/resource-sheet.mjs +86 -0
- package/dist/client/components/ui/accordion.mjs +169 -0
- package/dist/client/components/ui/alert.mjs +85 -0
- package/dist/client/components/ui/badge.mjs +76 -0
- package/dist/client/components/ui/button.mjs +84 -0
- package/dist/client/components/ui/card.mjs +206 -0
- package/dist/client/components/ui/checkbox.mjs +82 -0
- package/dist/client/components/ui/command.mjs +239 -0
- package/dist/client/components/ui/dialog.mjs +296 -0
- package/dist/client/components/ui/drawer.mjs +278 -0
- package/dist/client/components/ui/dropdown-menu.mjs +315 -0
- package/dist/client/components/ui/empty-state.mjs +99 -0
- package/dist/client/components/ui/field.mjs +354 -0
- package/dist/client/components/ui/input-group.mjs +201 -0
- package/dist/client/components/ui/input.mjs +46 -0
- package/dist/client/components/ui/kbd.mjs +53 -0
- package/dist/client/components/ui/label.mjs +45 -0
- package/dist/client/components/ui/popover.mjs +176 -0
- package/dist/client/components/ui/responsive-dialog.mjs +308 -0
- package/dist/client/components/ui/search-input.mjs +139 -0
- package/dist/client/components/ui/select.mjs +325 -0
- package/dist/client/components/ui/separator.mjs +47 -0
- package/dist/client/components/ui/sheet.mjs +280 -0
- package/dist/client/components/ui/sidebar.mjs +774 -0
- package/dist/client/components/ui/skeleton.mjs +40 -0
- package/dist/client/components/ui/sonner.d.mts +13 -0
- package/dist/client/components/ui/sonner.mjs +85 -0
- package/dist/client/components/ui/spinner.mjs +52 -0
- package/dist/client/components/ui/switch.mjs +58 -0
- package/dist/client/components/ui/table.mjs +276 -0
- package/dist/client/components/ui/tabs.mjs +160 -0
- package/dist/client/components/ui/textarea.mjs +40 -0
- package/dist/client/components/ui/toolbar.mjs +136 -0
- package/dist/client/components/ui/tooltip.mjs +146 -0
- package/dist/client/components/widgets/chart-widget.mjs +582 -0
- package/dist/client/components/widgets/progress-widget.mjs +200 -0
- package/dist/client/components/widgets/quick-actions-widget.mjs +209 -0
- package/dist/client/components/widgets/recent-items-widget.mjs +196 -0
- package/dist/client/components/widgets/stats-widget.mjs +261 -0
- package/dist/client/components/widgets/table-widget.mjs +273 -0
- package/dist/client/components/widgets/timeline-widget.mjs +279 -0
- package/dist/client/components/widgets/value-widget.mjs +312 -0
- package/dist/client/components/widgets/widget-skeletons.mjs +427 -0
- package/dist/client/contexts/breadcrumb-context.mjs +60 -0
- package/dist/client/contexts/focus-context.d.mts +87 -0
- package/dist/client/contexts/focus-context.mjs +250 -0
- package/dist/client/hooks/typed-hooks.d.mts +110 -0
- package/dist/client/hooks/typed-hooks.mjs +888 -0
- package/dist/client/hooks/use-action.mjs +329 -0
- package/dist/client/hooks/use-admin-config.mjs +69 -0
- package/dist/client/hooks/use-admin-preferences.mjs +171 -0
- package/dist/client/hooks/use-admin-routes.mjs +130 -0
- package/dist/client/hooks/use-audit-history.mjs +157 -0
- package/dist/client/hooks/use-auth.d.mts +97 -0
- package/dist/{use-auth-BoLmWtmU.mjs → client/hooks/use-auth.mjs} +9 -10
- package/dist/client/hooks/use-collection-fields.mjs +71 -0
- package/dist/client/hooks/use-collection-meta.mjs +153 -0
- package/dist/client/hooks/use-collection-schema.mjs +90 -0
- package/dist/client/hooks/use-collection-validation.mjs +88 -0
- package/dist/client/hooks/use-collection.d.mts +96 -0
- package/dist/client/hooks/use-collection.mjs +673 -0
- package/dist/client/hooks/use-current-user.d.mts +60 -0
- package/dist/client/hooks/use-current-user.mjs +79 -0
- package/dist/client/hooks/use-field-hooks.mjs +199 -0
- package/dist/client/hooks/use-field-options.d.mts +57 -0
- package/dist/client/hooks/use-field-options.mjs +269 -0
- package/dist/client/hooks/use-global-fields.mjs +58 -0
- package/dist/client/hooks/use-global-meta.mjs +105 -0
- package/dist/client/hooks/use-global-schema.mjs +53 -0
- package/dist/client/hooks/use-global.d.mts +51 -0
- package/dist/client/hooks/use-global.mjs +284 -0
- package/dist/client/hooks/use-locks.mjs +452 -0
- package/dist/client/hooks/use-media-query.d.mts +22 -0
- package/dist/client/hooks/use-media-query.mjs +81 -0
- package/dist/client/hooks/use-prefill-params.mjs +47 -0
- package/dist/client/hooks/use-questpie-query-options.mjs +50 -0
- package/dist/client/hooks/use-reactive-fields.d.mts +78 -0
- package/dist/client/hooks/use-reactive-fields.mjs +201 -0
- package/dist/client/hooks/use-realtime-highlight.mjs +158 -0
- package/dist/client/hooks/use-saved-views.mjs +140 -0
- package/dist/client/hooks/use-search-param-toggle.d.mts +12 -0
- package/dist/client/hooks/use-search-param-toggle.mjs +115 -0
- package/dist/client/hooks/use-search.mjs +258 -0
- package/dist/client/hooks/use-server-actions.mjs +191 -0
- package/dist/client/hooks/use-server-validation.mjs +291 -0
- package/dist/client/hooks/use-server-widget-data.d.mts +25 -0
- package/dist/client/hooks/use-server-widget-data.mjs +65 -0
- package/dist/client/hooks/use-setup-status.d.mts +38 -0
- package/dist/client/hooks/use-setup-status.mjs +62 -0
- package/dist/client/hooks/use-sidebar-search-param.d.mts +9 -0
- package/dist/client/hooks/use-sidebar-search-param.mjs +104 -0
- package/dist/client/hooks/use-transition-stage.mjs +125 -0
- package/dist/client/hooks/use-upload-collection.mjs +31 -0
- package/dist/client/hooks/use-upload.mjs +209 -0
- package/dist/client/hooks/use-validation-error-map.mjs +57 -0
- package/dist/client/hooks/use-view-state.mjs +479 -0
- package/dist/client/i18n/hooks.mjs +284 -0
- package/dist/client/i18n/intl-cache.mjs +64 -0
- package/dist/client/i18n/messages.mjs +6 -0
- package/dist/client/i18n/simple.d.mts +21 -0
- package/dist/client/i18n/simple.mjs +156 -0
- package/dist/client/i18n/types.d.mts +109 -0
- package/dist/client/lib/cookies.mjs +9 -0
- package/dist/client/lib/events.mjs +5 -0
- package/dist/client/lib/render-profiler.mjs +51 -0
- package/dist/client/lib/utils.mjs +23 -0
- package/dist/client/preview/block-scope-context.d.mts +73 -0
- package/dist/client/preview/block-scope-context.mjs +116 -0
- package/dist/client/preview/index.d.mts +5 -0
- package/dist/client/preview/preview-banner.d.mts +45 -0
- package/dist/client/preview/preview-banner.mjs +134 -0
- package/dist/client/preview/preview-field.d.mts +107 -0
- package/dist/client/preview/preview-field.mjs +227 -0
- package/dist/client/preview/types.d.mts +114 -0
- package/dist/client/preview/types.mjs +20 -0
- package/dist/client/preview/use-collection-preview.d.mts +70 -0
- package/dist/client/preview/use-collection-preview.mjs +163 -0
- package/dist/client/runtime/content-locales-provider.d.mts +1 -0
- package/dist/client/runtime/content-locales-provider.mjs +136 -0
- package/dist/client/runtime/index.d.mts +5 -0
- package/dist/client/runtime/index.mjs +6 -0
- package/dist/client/runtime/locale-scope.d.mts +2 -0
- package/dist/client/runtime/locale-scope.mjs +108 -0
- package/dist/client/runtime/provider.d.mts +203 -0
- package/dist/client/runtime/provider.mjs +393 -0
- package/dist/client/runtime/routes.d.mts +49 -0
- package/dist/client/runtime/routes.mjs +91 -0
- package/dist/client/runtime/translations-provider.mjs +242 -0
- package/dist/client/scope/index.d.mts +3 -0
- package/dist/client/scope/picker.d.mts +53 -0
- package/dist/client/scope/picker.mjs +395 -0
- package/dist/client/scope/provider.d.mts +103 -0
- package/dist/client/scope/provider.mjs +167 -0
- package/dist/client/scope/types.d.mts +111 -0
- package/dist/client/styles/index.css +344 -188
- package/dist/client/utils/auto-expand-fields.mjs +83 -0
- package/dist/client/utils/build-field-definitions-from-schema.mjs +259 -0
- package/dist/client/utils/dependency-tracker.mjs +61 -0
- package/dist/client/utils/detect-relations.mjs +45 -0
- package/dist/client/utils/locale-to-flag.d.mts +119 -0
- package/dist/client/utils/locale-to-flag.mjs +129 -0
- package/dist/client/utils/routes.mjs +195 -0
- package/dist/client/views/auth/accept-invite-form.d.mts +72 -0
- package/dist/client/views/auth/accept-invite-form.mjs +473 -0
- package/dist/client/views/auth/auth-layout.d.mts +43 -0
- package/dist/client/views/auth/auth-layout.mjs +116 -0
- package/dist/client/views/auth/forgot-password-form.d.mts +58 -0
- package/dist/client/views/auth/forgot-password-form.mjs +386 -0
- package/dist/client/views/auth/invite-form.mjs +497 -0
- package/dist/client/views/auth/login-form.d.mts +75 -0
- package/dist/client/views/auth/login-form.mjs +387 -0
- package/dist/client/views/auth/reset-password-form.d.mts +65 -0
- package/dist/client/views/auth/reset-password-form.mjs +515 -0
- package/dist/client/views/auth/setup-form.d.mts +60 -0
- package/dist/client/views/auth/setup-form.mjs +526 -0
- package/dist/client/views/collection/auto-form-fields.mjs +873 -0
- package/dist/client/views/collection/bulk-action-toolbar.mjs +480 -0
- package/dist/client/views/collection/cells/complex-cells.mjs +746 -0
- package/dist/client/views/collection/cells/primitive-cells.mjs +395 -0
- package/dist/client/views/collection/cells/relation-cells.mjs +260 -0
- package/dist/client/views/collection/cells/shared/asset-thumbnail.mjs +509 -0
- package/dist/client/views/collection/cells/shared/cell-helpers.mjs +125 -0
- package/dist/client/views/collection/cells/shared/relation-chip.mjs +121 -0
- package/dist/client/views/collection/cells/upload-cells.mjs +28 -0
- package/dist/client/views/collection/columns/build-columns.mjs +195 -0
- package/dist/client/views/collection/columns/column-defaults.mjs +123 -0
- package/dist/client/views/collection/field-context.mjs +126 -0
- package/dist/client/views/collection/field-renderer.mjs +368 -0
- package/dist/client/views/collection/form-view.mjs +1566 -0
- package/dist/client/views/collection/table-view.mjs +832 -0
- package/dist/client/views/collection/view-skeletons.mjs +215 -0
- package/dist/client/views/common/global-search.mjs +700 -0
- package/dist/client/views/dashboard/dashboard-grid.mjs +881 -0
- package/dist/client/views/dashboard/dashboard-widget.mjs +265 -0
- package/dist/client/views/dashboard/widget-card.mjs +372 -0
- package/dist/client/views/globals/global-form-view.mjs +1306 -0
- package/dist/client/views/layout/admin-layout-provider.d.mts +137 -0
- package/dist/client/views/layout/admin-layout-provider.mjs +193 -0
- package/dist/client/views/layout/admin-layout.d.mts +133 -0
- package/dist/client/views/layout/admin-layout.mjs +302 -0
- package/dist/client/views/layout/admin-router.d.mts +93 -0
- package/dist/client/views/layout/admin-router.mjs +1254 -0
- package/dist/client/views/layout/admin-sidebar.d.mts +99 -0
- package/dist/client/views/layout/admin-sidebar.mjs +1379 -0
- package/dist/client/views/layout/admin-topbar.mjs +236 -0
- package/dist/client/views/pages/accept-invite-page.d.mts +66 -0
- package/dist/client/views/pages/accept-invite-page.mjs +349 -0
- package/dist/client/views/pages/dashboard-page.d.mts +43 -0
- package/dist/client/views/pages/dashboard-page.mjs +84 -0
- package/dist/client/views/pages/forgot-password-page.d.mts +56 -0
- package/dist/client/views/pages/forgot-password-page.mjs +152 -0
- package/dist/client/views/pages/invite-page.d.mts +70 -0
- package/dist/client/views/pages/invite-page.mjs +161 -0
- package/dist/client/views/pages/login-page.d.mts +69 -0
- package/dist/client/views/pages/login-page.mjs +193 -0
- package/dist/client/views/pages/reset-password-page.d.mts +63 -0
- package/dist/client/views/pages/reset-password-page.mjs +257 -0
- package/dist/client/views/pages/setup-page.d.mts +61 -0
- package/dist/client/views/pages/setup-page.mjs +156 -0
- package/dist/client-module.d.mts +3 -0
- package/dist/client-module.mjs +3 -0
- package/dist/client.d.mts +99 -3
- package/dist/client.mjs +52 -12
- package/dist/components/rich-text/index.d.mts +1 -0
- package/dist/components/rich-text/rich-text-renderer.d.mts +103 -0
- package/dist/components/rich-text/rich-text-renderer.mjs +237 -0
- package/dist/index.d.mts +59 -3
- package/dist/index.mjs +52 -12
- package/dist/plugin.d.mts +2 -0
- package/dist/plugin.mjs +3 -0
- package/dist/server/adapters/nextjs.d.mts +120 -0
- package/dist/server/adapters/nextjs.mjs +110 -0
- package/dist/server/adapters/tanstack.d.mts +132 -0
- package/dist/server/adapters/tanstack.mjs +89 -0
- package/dist/server/augmentation/actions.d.mts +279 -0
- package/dist/server/augmentation/common.d.mts +76 -0
- package/dist/server/augmentation/dashboard.d.mts +547 -0
- package/dist/server/augmentation/form-layout.d.mts +303 -0
- package/dist/server/augmentation/index.d.mts +44 -0
- package/dist/server/augmentation/index.mjs +10 -0
- package/dist/server/augmentation/sidebar.d.mts +181 -0
- package/dist/server/augmentation/views.d.mts +237 -0
- package/dist/server/augmentation.d.mts +7 -0
- package/dist/server/block/index.d.mts +4 -0
- package/dist/server/codegen/admin-client-template.mjs +93 -0
- package/dist/server/codegen/projection-validator.mjs +67 -0
- package/dist/server/fields/blocks.d.mts +71 -0
- package/dist/server/fields/blocks.mjs +151 -0
- package/dist/server/fields/index.d.mts +15 -0
- package/dist/server/fields/index.mjs +15 -0
- package/dist/server/fields/rich-text.d.mts +68 -0
- package/dist/server/fields/rich-text.mjs +147 -0
- package/dist/server/i18n/index.mjs +43 -0
- package/dist/server/i18n/messages/cs.mjs +461 -0
- package/dist/server/i18n/messages/de.mjs +461 -0
- package/dist/server/i18n/messages/en.mjs +707 -0
- package/dist/server/i18n/messages/es.mjs +461 -0
- package/dist/server/i18n/messages/fr.mjs +461 -0
- package/dist/server/i18n/messages/index.mjs +23 -0
- package/dist/server/i18n/messages/pl.mjs +461 -0
- package/dist/server/i18n/messages/pt.mjs +464 -0
- package/dist/server/i18n/messages/sk.mjs +689 -0
- package/dist/server/modules/admin/.generated/module.d.mts +52 -0
- package/dist/server/modules/admin/.generated/module.mjs +78 -0
- package/dist/server/modules/admin/.generated/registries.d.mts +22 -0
- package/dist/server/modules/admin/auth-helpers.d.mts +142 -0
- package/dist/server/modules/admin/auth-helpers.mjs +107 -0
- package/dist/server/modules/admin/block/block-builder.d.mts +383 -0
- package/dist/server/modules/admin/block/block-builder.mjs +315 -0
- package/dist/server/modules/admin/block/index.d.mts +3 -0
- package/dist/server/modules/admin/block/introspection.d.mts +89 -0
- package/dist/server/modules/admin/block/introspection.mjs +100 -0
- package/dist/server/modules/admin/block/prefetch.d.mts +78 -0
- package/dist/server/modules/admin/block/prefetch.mjs +241 -0
- package/dist/server/modules/admin/client/.generated/module.d.mts +94 -0
- package/dist/server/modules/admin/client/.generated/module.mjs +91 -0
- package/dist/server/modules/admin/client/components/badge.d.mts +1 -0
- package/dist/server/modules/admin/client/components/icon.d.mts +1 -0
- package/dist/server/modules/admin/client/fields/array.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/array.mjs +12 -0
- package/dist/server/modules/admin/client/fields/assetPreview.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/assetPreview.mjs +18 -0
- package/dist/server/modules/admin/client/fields/blocks.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/blocks.mjs +12 -0
- package/dist/server/modules/admin/client/fields/boolean.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/boolean.mjs +12 -0
- package/dist/server/modules/admin/client/fields/date.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/date.mjs +12 -0
- package/dist/server/modules/admin/client/fields/datetime.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/datetime.mjs +12 -0
- package/dist/server/modules/admin/client/fields/email.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/email.mjs +12 -0
- package/dist/server/modules/admin/client/fields/json.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/json.mjs +11 -0
- package/dist/server/modules/admin/client/fields/number.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/number.mjs +12 -0
- package/dist/server/modules/admin/client/fields/object.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/object.mjs +12 -0
- package/dist/server/modules/admin/client/fields/relation.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/relation.mjs +12 -0
- package/dist/server/modules/admin/client/fields/richText.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/richText.mjs +11 -0
- package/dist/server/modules/admin/client/fields/select.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/select.mjs +12 -0
- package/dist/server/modules/admin/client/fields/text.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/text.mjs +12 -0
- package/dist/server/modules/admin/client/fields/textarea.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/textarea.mjs +12 -0
- package/dist/server/modules/admin/client/fields/time.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/time.mjs +12 -0
- package/dist/server/modules/admin/client/fields/upload.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/upload.mjs +12 -0
- package/dist/server/modules/admin/client/fields/url.d.mts +6 -0
- package/dist/server/modules/admin/client/fields/url.mjs +12 -0
- package/dist/server/modules/admin/client/index.d.mts +1 -0
- package/dist/server/modules/admin/client/pages/dashboard.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/dashboard.mjs +11 -0
- package/dist/server/modules/admin/client/pages/forgotPassword.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/forgotPassword.mjs +11 -0
- package/dist/server/modules/admin/client/pages/login.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/login.mjs +11 -0
- package/dist/server/modules/admin/client/pages/resetPassword.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/resetPassword.mjs +11 -0
- package/dist/server/modules/admin/client/pages/setup.d.mts +6 -0
- package/dist/server/modules/admin/client/pages/setup.mjs +11 -0
- package/dist/server/modules/admin/client/views/collection-form.mjs +10 -0
- package/dist/server/modules/admin/client/views/collection-table.mjs +10 -0
- package/dist/server/modules/admin/client/views/global-form.mjs +10 -0
- package/dist/server/modules/admin/client/widgets/chart.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/chart.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/progress.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/progress.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/quickActions.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/quickActions.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/recentItems.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/recentItems.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/stats.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/stats.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/table.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/table.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/timeline.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/timeline.mjs +7 -0
- package/dist/server/modules/admin/client/widgets/value.d.mts +6 -0
- package/dist/server/modules/admin/client/widgets/value.mjs +7 -0
- package/dist/server/modules/admin/collections/account.d.mts +77 -0
- package/dist/server/modules/admin/collections/account.mjs +23 -0
- package/dist/server/modules/admin/collections/admin-locks.d.mts +90 -0
- package/dist/server/modules/admin/collections/admin-locks.mjs +16 -0
- package/dist/server/modules/admin/collections/admin-preferences.d.mts +69 -0
- package/dist/server/modules/admin/collections/admin-preferences.mjs +16 -0
- package/dist/server/modules/admin/collections/admin-saved-views.d.mts +83 -0
- package/dist/server/modules/admin/collections/admin-saved-views.mjs +16 -0
- package/dist/server/modules/admin/collections/apikey.d.mts +99 -0
- package/dist/server/modules/admin/collections/apikey.mjs +15 -0
- package/dist/server/modules/admin/collections/assets.d.mts +72 -0
- package/dist/server/modules/admin/collections/assets.mjs +71 -0
- package/dist/server/modules/admin/collections/session.d.mts +69 -0
- package/dist/server/modules/admin/collections/session.mjs +15 -0
- package/dist/server/modules/admin/collections/user.d.mts +85 -0
- package/dist/server/modules/admin/collections/user.mjs +204 -0
- package/dist/server/modules/admin/collections/verification.d.mts +63 -0
- package/dist/server/modules/admin/collections/verification.mjs +15 -0
- package/dist/server/modules/admin/components/badge.d.mts +10 -0
- package/dist/server/modules/admin/components/badge.mjs +10 -0
- package/dist/server/modules/admin/components/icon.d.mts +9 -0
- package/dist/server/modules/admin/components/icon.mjs +11 -0
- package/dist/server/modules/admin/config/admin.mjs +34 -0
- package/dist/server/modules/admin/dto/admin-config.dto.mjs +102 -0
- package/dist/server/modules/admin/factories.mjs +172 -0
- package/dist/server/modules/admin/index.d.mts +1093 -0
- package/dist/server/modules/admin/index.mjs +26 -0
- package/dist/server/modules/admin/modules.mjs +11 -0
- package/dist/server/modules/admin/plugin.mjs +13 -0
- package/dist/server/modules/admin/routes/admin-config.d.mts +28 -0
- package/dist/server/modules/admin/routes/admin-config.mjs +552 -0
- package/dist/server/modules/admin/routes/execute-action.d.mts +92 -0
- package/dist/server/modules/admin/routes/execute-action.mjs +433 -0
- package/dist/server/modules/admin/routes/locales.d.mts +18 -0
- package/dist/server/modules/admin/routes/locales.mjs +69 -0
- package/dist/server/modules/admin/routes/preview.d.mts +80 -0
- package/dist/server/modules/admin/routes/preview.mjs +230 -0
- package/dist/server/modules/admin/routes/reactive.d.mts +74 -0
- package/dist/server/modules/admin/routes/reactive.mjs +350 -0
- package/dist/server/modules/admin/routes/route-helpers.d.mts +23 -0
- package/dist/server/modules/admin/routes/route-helpers.mjs +76 -0
- package/dist/server/modules/admin/routes/setup.d.mts +63 -0
- package/dist/server/modules/admin/routes/setup.mjs +114 -0
- package/dist/server/modules/admin/routes/translations.d.mts +26 -0
- package/dist/server/modules/admin/routes/translations.mjs +114 -0
- package/dist/server/modules/admin/routes/widget-data.d.mts +32 -0
- package/dist/server/modules/admin/routes/widget-data.mjs +62 -0
- package/dist/server/modules/admin/views/form.d.mts +8 -0
- package/dist/server/modules/admin/views/form.mjs +7 -0
- package/dist/server/modules/admin/views/global-form.d.mts +8 -0
- package/dist/server/modules/admin/views/global-form.mjs +7 -0
- package/dist/server/modules/admin/views/table.d.mts +8 -0
- package/dist/server/modules/admin/views/table.mjs +7 -0
- package/dist/server/modules/admin-preferences/collections/admin-preferences.mjs +37 -0
- package/dist/server/modules/admin-preferences/collections/locks.collection.mjs +55 -0
- package/dist/server/modules/admin-preferences/collections/saved-views.d.mts +99 -0
- package/dist/server/modules/admin-preferences/collections/saved-views.mjs +38 -0
- package/dist/server/modules/audit/.generated/module.d.mts +60 -0
- package/dist/server/modules/audit/.generated/module.mjs +30 -0
- package/dist/server/modules/audit/collections/audit-log.d.mts +214 -0
- package/dist/server/modules/audit/collections/audit-log.mjs +107 -0
- package/dist/server/modules/audit/config/admin.mjs +21 -0
- package/dist/server/modules/audit/config/app.mjs +262 -0
- package/dist/server/modules/audit/index.d.mts +2 -0
- package/dist/server/modules/audit/jobs/audit-cleanup.d.mts +13 -0
- package/dist/server/modules/audit/jobs/audit-cleanup.mjs +28 -0
- package/dist/server/plugin.d.mts +26 -0
- package/dist/server/plugin.mjs +385 -0
- package/dist/server/proxy-factories.d.mts +85 -0
- package/dist/server/proxy-factories.mjs +302 -0
- package/dist/server/registry-helpers.d.mts +83 -0
- package/dist/server/registry-helpers.mjs +104 -0
- package/dist/server.d.mts +33 -250
- package/dist/server.mjs +22 -832
- package/dist/shared/preview-utils.d.mts +53 -0
- package/dist/{preview-utils-BKQ9-TMa.mjs → shared/preview-utils.mjs} +2 -3
- package/dist/{saved-views.types-BMsz5mCy.d.mts → shared/types/saved-views.types.d.mts} +7 -2
- package/dist/shared.d.mts +3 -57
- package/dist/shared.mjs +1 -1
- package/package.json +56 -51
- package/skills/questpie-admin/SKILL.md +397 -0
- package/skills/questpie-admin/blocks/SKILL.md +305 -0
- package/skills/questpie-admin/custom-ui/SKILL.md +307 -0
- package/skills/questpie-admin/views/SKILL.md +442 -0
- package/dist/auth-layout-M8K8_q5R.mjs +0 -181
- package/dist/auth-layout-M8K8_q5R.mjs.map +0 -1
- package/dist/bulk-upload-dialog-D7w7W1Hl.mjs +0 -273
- package/dist/bulk-upload-dialog-D7w7W1Hl.mjs.map +0 -1
- package/dist/card-BKHjBQfw.mjs +0 -58
- package/dist/card-BKHjBQfw.mjs.map +0 -1
- package/dist/client-D1DqawtP.d.mts +0 -13403
- package/dist/client-D1DqawtP.d.mts.map +0 -1
- package/dist/client-njX1rZmi.mjs +0 -22612
- package/dist/client-njX1rZmi.mjs.map +0 -1
- package/dist/content-locales-provider-BXvuIgfg.mjs +0 -1650
- package/dist/content-locales-provider-BXvuIgfg.mjs.map +0 -1
- package/dist/dashboard-page-B4PGEdc2.mjs +0 -2500
- package/dist/dashboard-page-B4PGEdc2.mjs.map +0 -1
- package/dist/dashboard-page-mCY0pgZv.mjs +0 -3
- package/dist/dropzone-Do3awXKd.mjs +0 -634
- package/dist/dropzone-Do3awXKd.mjs.map +0 -1
- package/dist/forgot-password-page-Bcp-An4Y.mjs +0 -221
- package/dist/forgot-password-page-Bcp-An4Y.mjs.map +0 -1
- package/dist/forgot-password-page-CEwsdLwn.mjs +0 -3
- package/dist/index-B4H3amCD.d.mts +0 -2753
- package/dist/index-B4H3amCD.d.mts.map +0 -1
- package/dist/login-page-BUnpCbCa.mjs +0 -3
- package/dist/login-page-CP4gA-dl.mjs +0 -298
- package/dist/login-page-CP4gA-dl.mjs.map +0 -1
- package/dist/preview-utils-BKQ9-TMa.mjs.map +0 -1
- package/dist/reset-password-page-BqfDmLxA.mjs +0 -281
- package/dist/reset-password-page-BqfDmLxA.mjs.map +0 -1
- package/dist/reset-password-page-CufHz3h3.mjs +0 -3
- package/dist/runtime-6VZM878K.mjs +0 -69
- package/dist/runtime-6VZM878K.mjs.map +0 -1
- package/dist/saved-views.types-BMsz5mCy.d.mts.map +0 -1
- package/dist/server.d.mts.map +0 -1
- package/dist/server.mjs.map +0 -1
- package/dist/setup-page-BNNzt_Z6.mjs +0 -3
- package/dist/setup-page-YAP_fzqh.mjs +0 -264
- package/dist/setup-page-YAP_fzqh.mjs.map +0 -1
- package/dist/shared.d.mts.map +0 -1
- package/dist/use-auth-BoLmWtmU.mjs.map +0 -1
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { selectClient, useAdminStore } from "../runtime/provider.mjs";
|
|
2
|
+
import { c } from "react/compiler-runtime";
|
|
3
|
+
import { useQuery } from "@tanstack/react-query";
|
|
4
|
+
|
|
5
|
+
//#region src/client/hooks/use-audit-history.ts
|
|
6
|
+
function useAuditFetcher(path) {
|
|
7
|
+
const $ = c(5);
|
|
8
|
+
const client = useAdminStore(selectClient);
|
|
9
|
+
let t0;
|
|
10
|
+
if ($[0] !== client) {
|
|
11
|
+
t0 = client.getBasePath?.() ?? "";
|
|
12
|
+
$[0] = client;
|
|
13
|
+
$[1] = t0;
|
|
14
|
+
} else t0 = $[1];
|
|
15
|
+
const basePath = t0;
|
|
16
|
+
let t1;
|
|
17
|
+
if ($[2] !== basePath || $[3] !== path) {
|
|
18
|
+
t1 = async (signal) => {
|
|
19
|
+
const response = await fetch(`${basePath}${path}`, {
|
|
20
|
+
credentials: "include",
|
|
21
|
+
headers: { Accept: "application/json" },
|
|
22
|
+
signal
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) throw new Error(`Failed to fetch audit history: ${response.status}`);
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
return Array.isArray(data) ? data : data?.docs ?? data ?? [];
|
|
27
|
+
};
|
|
28
|
+
$[2] = basePath;
|
|
29
|
+
$[3] = path;
|
|
30
|
+
$[4] = t1;
|
|
31
|
+
} else t1 = $[4];
|
|
32
|
+
return t1;
|
|
33
|
+
}
|
|
34
|
+
function useCollectionAuditHistory(collection, id, options, queryOptions) {
|
|
35
|
+
const $ = c(17);
|
|
36
|
+
let t0;
|
|
37
|
+
let t1;
|
|
38
|
+
let t2;
|
|
39
|
+
if ($[0] !== collection || $[1] !== id || $[2] !== options) {
|
|
40
|
+
const params = new URLSearchParams();
|
|
41
|
+
if (options?.limit) params.set("limit", String(options.limit));
|
|
42
|
+
t0 = collection;
|
|
43
|
+
t1 = id;
|
|
44
|
+
t2 = params.toString() ? `?${params}` : "";
|
|
45
|
+
$[0] = collection;
|
|
46
|
+
$[1] = id;
|
|
47
|
+
$[2] = options;
|
|
48
|
+
$[3] = t0;
|
|
49
|
+
$[4] = t1;
|
|
50
|
+
$[5] = t2;
|
|
51
|
+
} else {
|
|
52
|
+
t0 = $[3];
|
|
53
|
+
t1 = $[4];
|
|
54
|
+
t2 = $[5];
|
|
55
|
+
}
|
|
56
|
+
const fetchAudit = useAuditFetcher(`/${t0}/${t1}/audit${t2}`);
|
|
57
|
+
let t3;
|
|
58
|
+
if ($[6] !== collection || $[7] !== id || $[8] !== options) {
|
|
59
|
+
t3 = [
|
|
60
|
+
"questpie",
|
|
61
|
+
"audit",
|
|
62
|
+
"collection",
|
|
63
|
+
collection,
|
|
64
|
+
id,
|
|
65
|
+
options
|
|
66
|
+
];
|
|
67
|
+
$[6] = collection;
|
|
68
|
+
$[7] = id;
|
|
69
|
+
$[8] = options;
|
|
70
|
+
$[9] = t3;
|
|
71
|
+
} else t3 = $[9];
|
|
72
|
+
let t4;
|
|
73
|
+
if ($[10] !== fetchAudit) {
|
|
74
|
+
t4 = (t5$1) => {
|
|
75
|
+
const { signal } = t5$1;
|
|
76
|
+
return fetchAudit(signal);
|
|
77
|
+
};
|
|
78
|
+
$[10] = fetchAudit;
|
|
79
|
+
$[11] = t4;
|
|
80
|
+
} else t4 = $[11];
|
|
81
|
+
const t5 = !!collection && !!id && (queryOptions?.enabled ?? true);
|
|
82
|
+
let t6;
|
|
83
|
+
if ($[12] !== queryOptions || $[13] !== t3 || $[14] !== t4 || $[15] !== t5) {
|
|
84
|
+
t6 = {
|
|
85
|
+
queryKey: t3,
|
|
86
|
+
queryFn: t4,
|
|
87
|
+
enabled: t5,
|
|
88
|
+
...queryOptions
|
|
89
|
+
};
|
|
90
|
+
$[12] = queryOptions;
|
|
91
|
+
$[13] = t3;
|
|
92
|
+
$[14] = t4;
|
|
93
|
+
$[15] = t5;
|
|
94
|
+
$[16] = t6;
|
|
95
|
+
} else t6 = $[16];
|
|
96
|
+
return useQuery(t6);
|
|
97
|
+
}
|
|
98
|
+
function useGlobalAuditHistory(globalName, options, queryOptions) {
|
|
99
|
+
const $ = c(14);
|
|
100
|
+
let t0;
|
|
101
|
+
let t1;
|
|
102
|
+
if ($[0] !== globalName || $[1] !== options) {
|
|
103
|
+
const params = new URLSearchParams();
|
|
104
|
+
if (options?.limit) params.set("limit", String(options.limit));
|
|
105
|
+
t0 = globalName;
|
|
106
|
+
t1 = params.toString() ? `?${params}` : "";
|
|
107
|
+
$[0] = globalName;
|
|
108
|
+
$[1] = options;
|
|
109
|
+
$[2] = t0;
|
|
110
|
+
$[3] = t1;
|
|
111
|
+
} else {
|
|
112
|
+
t0 = $[2];
|
|
113
|
+
t1 = $[3];
|
|
114
|
+
}
|
|
115
|
+
const fetchAudit = useAuditFetcher(`/globals/${t0}/audit${t1}`);
|
|
116
|
+
let t2;
|
|
117
|
+
if ($[4] !== globalName || $[5] !== options) {
|
|
118
|
+
t2 = [
|
|
119
|
+
"questpie",
|
|
120
|
+
"audit",
|
|
121
|
+
"global",
|
|
122
|
+
globalName,
|
|
123
|
+
options
|
|
124
|
+
];
|
|
125
|
+
$[4] = globalName;
|
|
126
|
+
$[5] = options;
|
|
127
|
+
$[6] = t2;
|
|
128
|
+
} else t2 = $[6];
|
|
129
|
+
let t3;
|
|
130
|
+
if ($[7] !== fetchAudit) {
|
|
131
|
+
t3 = (t4$1) => {
|
|
132
|
+
const { signal } = t4$1;
|
|
133
|
+
return fetchAudit(signal);
|
|
134
|
+
};
|
|
135
|
+
$[7] = fetchAudit;
|
|
136
|
+
$[8] = t3;
|
|
137
|
+
} else t3 = $[8];
|
|
138
|
+
const t4 = !!globalName && (queryOptions?.enabled ?? true);
|
|
139
|
+
let t5;
|
|
140
|
+
if ($[9] !== queryOptions || $[10] !== t2 || $[11] !== t3 || $[12] !== t4) {
|
|
141
|
+
t5 = {
|
|
142
|
+
queryKey: t2,
|
|
143
|
+
queryFn: t3,
|
|
144
|
+
enabled: t4,
|
|
145
|
+
...queryOptions
|
|
146
|
+
};
|
|
147
|
+
$[9] = queryOptions;
|
|
148
|
+
$[10] = t2;
|
|
149
|
+
$[11] = t3;
|
|
150
|
+
$[12] = t4;
|
|
151
|
+
$[13] = t5;
|
|
152
|
+
} else t5 = $[13];
|
|
153
|
+
return useQuery(t5);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
//#endregion
|
|
157
|
+
export { useCollectionAuditHistory, useGlobalAuditHistory };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { QuestpieApp } from "questpie/client";
|
|
2
|
+
import { createAuthClient } from "better-auth/react";
|
|
3
|
+
import { BetterAuthOptions } from "better-auth";
|
|
4
|
+
|
|
5
|
+
//#region src/client/hooks/use-auth.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Extract auth options type from app config
|
|
9
|
+
*/
|
|
10
|
+
type ExtractAuthOptions<T extends QuestpieApp> = T["auth"] extends BetterAuthOptions ? T["auth"] : BetterAuthOptions;
|
|
11
|
+
/**
|
|
12
|
+
* Options for creating admin auth client
|
|
13
|
+
*/
|
|
14
|
+
type AdminAuthClientOptions = {
|
|
15
|
+
/**
|
|
16
|
+
* Base URL of the app API
|
|
17
|
+
* @example 'http://localhost:3000'
|
|
18
|
+
*/
|
|
19
|
+
baseURL: string;
|
|
20
|
+
/**
|
|
21
|
+
* Base path for auth routes
|
|
22
|
+
* @default '/auth'
|
|
23
|
+
*/
|
|
24
|
+
basePath?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Custom fetch implementation
|
|
27
|
+
*/
|
|
28
|
+
fetchOptions?: {
|
|
29
|
+
credentials?: RequestCredentials;
|
|
30
|
+
headers?: Record<string, string>;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Internal client options type that includes $InferAuth
|
|
35
|
+
*/
|
|
36
|
+
type InternalClientOptions<T extends QuestpieApp> = {
|
|
37
|
+
baseURL: string;
|
|
38
|
+
fetchOptions?: {
|
|
39
|
+
credentials?: RequestCredentials;
|
|
40
|
+
headers?: Record<string, string>;
|
|
41
|
+
};
|
|
42
|
+
$InferAuth: ExtractAuthOptions<T>;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Create a type-safe Better Auth client for the admin UI
|
|
46
|
+
*
|
|
47
|
+
* The returned client includes full type inference from your app auth configuration:
|
|
48
|
+
* - `useSession()` - React hook for session state (typed based on your user/session schema)
|
|
49
|
+
* - `signIn` methods (email, social providers configured in QUESTPIE)
|
|
50
|
+
* - `signOut` - Sign out the current user
|
|
51
|
+
* - `signUp` - Register new users
|
|
52
|
+
* - Plugin-specific hooks (e.g., `useListAccounts` for admin plugin)
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```tsx
|
|
56
|
+
* import { createAdminAuthClient } from '@questpie/admin/hooks'
|
|
57
|
+
* import type { app } from "./server/app"
|
|
58
|
+
*
|
|
59
|
+
* // Create client with type inference from your app
|
|
60
|
+
* export const authClient = createAdminAuthClient<typeof app>({
|
|
61
|
+
* baseURL: 'http://localhost:3000'
|
|
62
|
+
* })
|
|
63
|
+
*
|
|
64
|
+
* // Session data is fully typed based on your app auth config
|
|
65
|
+
* function App() {
|
|
66
|
+
* const { data: session, isPending } = authClient.useSession()
|
|
67
|
+
*
|
|
68
|
+
* if (isPending) return <Loading />
|
|
69
|
+
* if (!session) return <LoginPage authClient={authClient} />
|
|
70
|
+
*
|
|
71
|
+
* // session.user has all fields from your user schema
|
|
72
|
+
* return <AdminDashboard user={session.user} />
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
declare function createAdminAuthClient<T extends QuestpieApp>(options: AdminAuthClientOptions): ReturnType<typeof createAuthClient<InternalClientOptions<T>>>;
|
|
77
|
+
/**
|
|
78
|
+
* Hook to access the auth client from AdminProvider context.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```tsx
|
|
82
|
+
* import { useAuthClient } from '@questpie/admin/hooks'
|
|
83
|
+
*
|
|
84
|
+
* function LoginPage() {
|
|
85
|
+
* const authClient = useAuthClient()
|
|
86
|
+
*
|
|
87
|
+
* const handleLogin = async (email: string, password: string) => {
|
|
88
|
+
* await authClient.signIn.email({ email, password })
|
|
89
|
+
* }
|
|
90
|
+
*
|
|
91
|
+
* return <LoginForm onSubmit={handleLogin} />
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
declare function useAuthClient<T = any>(): T;
|
|
96
|
+
//#endregion
|
|
97
|
+
export { createAdminAuthClient, useAuthClient };
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { selectAuthClient, useAdminStore } from "../runtime/provider.mjs";
|
|
2
2
|
import { createAuthClient } from "better-auth/react";
|
|
3
3
|
|
|
4
4
|
//#region src/client/hooks/use-auth.ts
|
|
5
5
|
/**
|
|
6
6
|
* Create a type-safe Better Auth client for the admin UI
|
|
7
7
|
*
|
|
8
|
-
* The returned client includes full type inference from your
|
|
8
|
+
* The returned client includes full type inference from your app auth configuration:
|
|
9
9
|
* - `useSession()` - React hook for session state (typed based on your user/session schema)
|
|
10
|
-
* - `signIn` methods (email, social providers configured in
|
|
10
|
+
* - `signIn` methods (email, social providers configured in QUESTPIE)
|
|
11
11
|
* - `signOut` - Sign out the current user
|
|
12
12
|
* - `signUp` - Register new users
|
|
13
13
|
* - Plugin-specific hooks (e.g., `useListAccounts` for admin plugin)
|
|
@@ -15,14 +15,14 @@ import { createAuthClient } from "better-auth/react";
|
|
|
15
15
|
* @example
|
|
16
16
|
* ```tsx
|
|
17
17
|
* import { createAdminAuthClient } from '@questpie/admin/hooks'
|
|
18
|
-
* import type {
|
|
18
|
+
* import type { app } from "./server/app"
|
|
19
19
|
*
|
|
20
|
-
* // Create client with type inference from your
|
|
21
|
-
* export const authClient = createAdminAuthClient<typeof
|
|
20
|
+
* // Create client with type inference from your app
|
|
21
|
+
* export const authClient = createAdminAuthClient<typeof app>({
|
|
22
22
|
* baseURL: 'http://localhost:3000'
|
|
23
23
|
* })
|
|
24
24
|
*
|
|
25
|
-
* // Session data is fully typed based on your
|
|
25
|
+
* // Session data is fully typed based on your app auth config
|
|
26
26
|
* function App() {
|
|
27
27
|
* const { data: session, isPending } = authClient.useSession()
|
|
28
28
|
*
|
|
@@ -35,7 +35,7 @@ import { createAuthClient } from "better-auth/react";
|
|
|
35
35
|
* ```
|
|
36
36
|
*/
|
|
37
37
|
function createAdminAuthClient(options) {
|
|
38
|
-
const basePath = options.basePath ?? "/
|
|
38
|
+
const basePath = options.basePath ?? "/auth";
|
|
39
39
|
return createAuthClient({
|
|
40
40
|
baseURL: `${options.baseURL}${basePath}`,
|
|
41
41
|
fetchOptions: {
|
|
@@ -84,5 +84,4 @@ function useAuthClientSafe() {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
//#endregion
|
|
87
|
-
export { useAuthClient
|
|
88
|
-
//# sourceMappingURL=use-auth-BoLmWtmU.mjs.map
|
|
87
|
+
export { createAdminAuthClient, useAuthClient, useAuthClientSafe };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { selectAdmin, useAdminStore } from "../runtime/provider.mjs";
|
|
2
|
+
import { buildFieldDefinitionsFromSchema } from "../utils/build-field-definitions-from-schema.mjs";
|
|
3
|
+
import { useCollectionSchema } from "./use-collection-schema.mjs";
|
|
4
|
+
import { c } from "react/compiler-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/client/hooks/use-collection-fields.ts
|
|
7
|
+
function useCollectionFields(collection, t0) {
|
|
8
|
+
const $ = c(16);
|
|
9
|
+
let t1;
|
|
10
|
+
if ($[0] !== t0) {
|
|
11
|
+
t1 = t0 === void 0 ? {} : t0;
|
|
12
|
+
$[0] = t0;
|
|
13
|
+
$[1] = t1;
|
|
14
|
+
} else t1 = $[1];
|
|
15
|
+
const options = t1;
|
|
16
|
+
const admin = useAdminStore(selectAdmin);
|
|
17
|
+
const { data: schema, isLoading, error } = useCollectionSchema(collection, options.schemaQueryOptions);
|
|
18
|
+
let t2;
|
|
19
|
+
bb0: {
|
|
20
|
+
let t3$1;
|
|
21
|
+
if ($[2] !== options.fallbackFields) {
|
|
22
|
+
t3$1 = options.fallbackFields ?? {};
|
|
23
|
+
$[2] = options.fallbackFields;
|
|
24
|
+
$[3] = t3$1;
|
|
25
|
+
} else t3$1 = $[3];
|
|
26
|
+
const fallback = t3$1;
|
|
27
|
+
if (!schema || !admin) {
|
|
28
|
+
t2 = fallback;
|
|
29
|
+
break bb0;
|
|
30
|
+
}
|
|
31
|
+
let t4;
|
|
32
|
+
if ($[4] !== admin || $[5] !== options.buildOptions || $[6] !== schema) {
|
|
33
|
+
t4 = buildFieldDefinitionsFromSchema(schema, admin.getFields(), options.buildOptions);
|
|
34
|
+
$[4] = admin;
|
|
35
|
+
$[5] = options.buildOptions;
|
|
36
|
+
$[6] = schema;
|
|
37
|
+
$[7] = t4;
|
|
38
|
+
} else t4 = $[7];
|
|
39
|
+
const schemaFields = t4;
|
|
40
|
+
let t5;
|
|
41
|
+
if ($[8] !== fallback || $[9] !== schemaFields) {
|
|
42
|
+
t5 = {
|
|
43
|
+
...schemaFields,
|
|
44
|
+
...fallback
|
|
45
|
+
};
|
|
46
|
+
$[8] = fallback;
|
|
47
|
+
$[9] = schemaFields;
|
|
48
|
+
$[10] = t5;
|
|
49
|
+
} else t5 = $[10];
|
|
50
|
+
t2 = t5;
|
|
51
|
+
}
|
|
52
|
+
const fields = t2;
|
|
53
|
+
let t3;
|
|
54
|
+
if ($[11] !== error || $[12] !== fields || $[13] !== isLoading || $[14] !== schema) {
|
|
55
|
+
t3 = {
|
|
56
|
+
fields,
|
|
57
|
+
schema,
|
|
58
|
+
isLoading,
|
|
59
|
+
error
|
|
60
|
+
};
|
|
61
|
+
$[11] = error;
|
|
62
|
+
$[12] = fields;
|
|
63
|
+
$[13] = isLoading;
|
|
64
|
+
$[14] = schema;
|
|
65
|
+
$[15] = t3;
|
|
66
|
+
} else t3 = $[15];
|
|
67
|
+
return t3;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//#endregion
|
|
71
|
+
export { useCollectionFields };
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { selectClient, useAdminStore } from "../runtime/provider.mjs";
|
|
2
|
+
import { c } from "react/compiler-runtime";
|
|
3
|
+
import { useQuery, useSuspenseQuery } from "@tanstack/react-query";
|
|
4
|
+
|
|
5
|
+
//#region src/client/hooks/use-collection-meta.ts
|
|
6
|
+
/**
|
|
7
|
+
* Hook for fetching collection metadata from the backend
|
|
8
|
+
*
|
|
9
|
+
* Used to get introspection info about collections like:
|
|
10
|
+
* - Title field configuration (which field to display first)
|
|
11
|
+
* - Whether timestamps are enabled
|
|
12
|
+
* - Whether soft delete is enabled
|
|
13
|
+
* - Localized fields
|
|
14
|
+
* - Virtual fields
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Hook to fetch collection metadata from the backend
|
|
18
|
+
*
|
|
19
|
+
* Returns introspection info useful for building dynamic UIs:
|
|
20
|
+
* - title.fieldName: The field to use as display title (instead of _title)
|
|
21
|
+
* - title.type: "field" (sortable) or "virtual" (computed)
|
|
22
|
+
* - timestamps: Whether createdAt/updatedAt are enabled
|
|
23
|
+
* - softDelete: Whether soft delete is enabled
|
|
24
|
+
* - localizedFields: Fields that support i18n
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* const { data: meta } = useCollectionMeta("posts");
|
|
29
|
+
*
|
|
30
|
+
* // Use title.fieldName instead of _title for first column
|
|
31
|
+
* const firstColumn = meta?.title.fieldName || "_title";
|
|
32
|
+
*
|
|
33
|
+
* // Only show timestamps columns if enabled
|
|
34
|
+
* if (meta?.timestamps) {
|
|
35
|
+
* columns.push("createdAt", "updatedAt");
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
function useCollectionMeta(collection, queryOptions) {
|
|
40
|
+
const $ = c(10);
|
|
41
|
+
const client = useAdminStore(selectClient);
|
|
42
|
+
let t0;
|
|
43
|
+
if ($[0] !== collection) {
|
|
44
|
+
t0 = [
|
|
45
|
+
"questpie",
|
|
46
|
+
"collections",
|
|
47
|
+
collection,
|
|
48
|
+
"meta"
|
|
49
|
+
];
|
|
50
|
+
$[0] = collection;
|
|
51
|
+
$[1] = t0;
|
|
52
|
+
} else t0 = $[1];
|
|
53
|
+
let t1;
|
|
54
|
+
if ($[2] !== client || $[3] !== collection) {
|
|
55
|
+
t1 = async () => client.collections[collection].meta();
|
|
56
|
+
$[2] = client;
|
|
57
|
+
$[3] = collection;
|
|
58
|
+
$[4] = t1;
|
|
59
|
+
} else t1 = $[4];
|
|
60
|
+
const t2 = !!collection && (queryOptions?.enabled ?? true);
|
|
61
|
+
let t3;
|
|
62
|
+
if ($[5] !== queryOptions || $[6] !== t0 || $[7] !== t1 || $[8] !== t2) {
|
|
63
|
+
t3 = {
|
|
64
|
+
queryKey: t0,
|
|
65
|
+
queryFn: t1,
|
|
66
|
+
staleTime: 3e5,
|
|
67
|
+
gcTime: 18e5,
|
|
68
|
+
...queryOptions,
|
|
69
|
+
enabled: t2
|
|
70
|
+
};
|
|
71
|
+
$[5] = queryOptions;
|
|
72
|
+
$[6] = t0;
|
|
73
|
+
$[7] = t1;
|
|
74
|
+
$[8] = t2;
|
|
75
|
+
$[9] = t3;
|
|
76
|
+
} else t3 = $[9];
|
|
77
|
+
return useQuery(t3);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Query key for collection meta
|
|
81
|
+
* Useful for prefetching or invalidation
|
|
82
|
+
*/
|
|
83
|
+
function getCollectionMetaQueryKey(collection) {
|
|
84
|
+
return [
|
|
85
|
+
"questpie",
|
|
86
|
+
"collections",
|
|
87
|
+
collection,
|
|
88
|
+
"meta"
|
|
89
|
+
];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Query options factory for collection metadata.
|
|
93
|
+
* Can be used with TanStack Query's prefetching in loaders or with useSuspenseQuery.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* // In TanStack Start loader
|
|
98
|
+
* export const Route = createFileRoute("/admin/collections/:name")({
|
|
99
|
+
* loader: async ({ context, params }) => {
|
|
100
|
+
* await context.queryClient.ensureQueryData(
|
|
101
|
+
* getCollectionMetaQueryOptions(params.name, context.client)
|
|
102
|
+
* );
|
|
103
|
+
* },
|
|
104
|
+
* });
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
function getCollectionMetaQueryOptions(collection, client) {
|
|
108
|
+
return {
|
|
109
|
+
queryKey: getCollectionMetaQueryKey(collection),
|
|
110
|
+
queryFn: async () => {
|
|
111
|
+
return client.collections[collection].meta();
|
|
112
|
+
},
|
|
113
|
+
staleTime: 300 * 1e3,
|
|
114
|
+
gcTime: 1800 * 1e3
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Suspense-enabled hook to fetch collection metadata.
|
|
119
|
+
*
|
|
120
|
+
* Uses useSuspenseQuery so the component will suspend until data is loaded.
|
|
121
|
+
* Must be used within a Suspense boundary.
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```tsx
|
|
125
|
+
* function TableViewInner({ collection }: Props) {
|
|
126
|
+
* // This will suspend until meta is loaded
|
|
127
|
+
* const { data: meta } = useSuspenseCollectionMeta(collection);
|
|
128
|
+
*
|
|
129
|
+
* // meta is guaranteed to be defined here
|
|
130
|
+
* const titleField = meta.title.fieldName;
|
|
131
|
+
* }
|
|
132
|
+
*
|
|
133
|
+
* // Wrap with Suspense
|
|
134
|
+
* <Suspense fallback={<Loading />}>
|
|
135
|
+
* <TableViewInner collection="posts" />
|
|
136
|
+
* </Suspense>
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
function useSuspenseCollectionMeta(collection) {
|
|
140
|
+
const $ = c(3);
|
|
141
|
+
const client = useAdminStore(selectClient);
|
|
142
|
+
let t0;
|
|
143
|
+
if ($[0] !== client || $[1] !== collection) {
|
|
144
|
+
t0 = getCollectionMetaQueryOptions(collection, client);
|
|
145
|
+
$[0] = client;
|
|
146
|
+
$[1] = collection;
|
|
147
|
+
$[2] = t0;
|
|
148
|
+
} else t0 = $[2];
|
|
149
|
+
return useSuspenseQuery(t0);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
//#endregion
|
|
153
|
+
export { getCollectionMetaQueryOptions, useCollectionMeta, useSuspenseCollectionMeta };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { selectClient, useAdminStore } from "../runtime/provider.mjs";
|
|
2
|
+
import { c } from "react/compiler-runtime";
|
|
3
|
+
import { useQuery } from "@tanstack/react-query";
|
|
4
|
+
|
|
5
|
+
//#region src/client/hooks/use-collection-schema.ts
|
|
6
|
+
/**
|
|
7
|
+
* Hook for fetching collection schema from the backend
|
|
8
|
+
*
|
|
9
|
+
* Returns full introspection data including:
|
|
10
|
+
* - Field schemas with metadata and validation
|
|
11
|
+
* - Relations metadata
|
|
12
|
+
* - Access control information for current user
|
|
13
|
+
* - JSON Schema for client-side validation
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Hook to fetch collection schema from the backend
|
|
17
|
+
*
|
|
18
|
+
* Returns full introspection data useful for building dynamic forms and UIs:
|
|
19
|
+
* - fields: Complete field metadata including type, label, validation, admin config
|
|
20
|
+
* - relations: Relation metadata with type, target collection(s), and keys
|
|
21
|
+
* - access: Evaluated access control for the current user
|
|
22
|
+
* - validation: JSON Schema for client-side validation
|
|
23
|
+
* - options: Collection options (timestamps, softDelete, versioning)
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```tsx
|
|
27
|
+
* const { data: schema } = useCollectionSchema("posts");
|
|
28
|
+
*
|
|
29
|
+
* // Build fields dynamically from schema
|
|
30
|
+
* for (const [name, field] of Object.entries(schema?.fields ?? {})) {
|
|
31
|
+
* const FieldComponent = getFieldComponent(field.metadata.type);
|
|
32
|
+
* // Use field.metadata for rendering configuration
|
|
33
|
+
* }
|
|
34
|
+
*
|
|
35
|
+
* // Check user access
|
|
36
|
+
* if (schema?.access.operations.create.allowed) {
|
|
37
|
+
* // Show create button
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
function useCollectionSchema(collection, queryOptions) {
|
|
42
|
+
const $ = c(10);
|
|
43
|
+
const client = useAdminStore(selectClient);
|
|
44
|
+
let t0;
|
|
45
|
+
if ($[0] !== collection) {
|
|
46
|
+
t0 = getCollectionSchemaQueryKey(collection);
|
|
47
|
+
$[0] = collection;
|
|
48
|
+
$[1] = t0;
|
|
49
|
+
} else t0 = $[1];
|
|
50
|
+
let t1;
|
|
51
|
+
if ($[2] !== client || $[3] !== collection) {
|
|
52
|
+
t1 = async () => client.collections[collection].schema();
|
|
53
|
+
$[2] = client;
|
|
54
|
+
$[3] = collection;
|
|
55
|
+
$[4] = t1;
|
|
56
|
+
} else t1 = $[4];
|
|
57
|
+
const t2 = !!collection && (queryOptions?.enabled ?? true);
|
|
58
|
+
let t3;
|
|
59
|
+
if ($[5] !== queryOptions || $[6] !== t0 || $[7] !== t1 || $[8] !== t2) {
|
|
60
|
+
t3 = {
|
|
61
|
+
queryKey: t0,
|
|
62
|
+
queryFn: t1,
|
|
63
|
+
staleTime: 3e5,
|
|
64
|
+
gcTime: 18e5,
|
|
65
|
+
...queryOptions,
|
|
66
|
+
enabled: t2
|
|
67
|
+
};
|
|
68
|
+
$[5] = queryOptions;
|
|
69
|
+
$[6] = t0;
|
|
70
|
+
$[7] = t1;
|
|
71
|
+
$[8] = t2;
|
|
72
|
+
$[9] = t3;
|
|
73
|
+
} else t3 = $[9];
|
|
74
|
+
return useQuery(t3);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Query key for collection schema
|
|
78
|
+
* Useful for prefetching or invalidation
|
|
79
|
+
*/
|
|
80
|
+
function getCollectionSchemaQueryKey(collection) {
|
|
81
|
+
return [
|
|
82
|
+
"questpie",
|
|
83
|
+
"collections",
|
|
84
|
+
collection,
|
|
85
|
+
"schema"
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//#endregion
|
|
90
|
+
export { useCollectionSchema };
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { createFormSchema } from "../builder/validation.mjs";
|
|
2
|
+
import { useCollectionFields } from "./use-collection-fields.mjs";
|
|
3
|
+
import { useValidationErrorMap } from "./use-validation-error-map.mjs";
|
|
4
|
+
import { c } from "react/compiler-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/client/hooks/use-collection-validation.ts
|
|
7
|
+
/**
|
|
8
|
+
* Get a ready-to-use resolver for react-hook-form
|
|
9
|
+
*
|
|
10
|
+
* This is the recommended hook - provides full automatic validation
|
|
11
|
+
* with i18n error messages. Just pass the result to useForm's resolver.
|
|
12
|
+
*
|
|
13
|
+
* @param collection - Collection name
|
|
14
|
+
* @returns Resolver function for react-hook-form, or undefined if collection not found
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* function MyForm() {
|
|
19
|
+
* const resolver = useCollectionValidation("posts");
|
|
20
|
+
*
|
|
21
|
+
* const form = useForm({
|
|
22
|
+
* resolver,
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // That's it! Validation and i18n errors work automatically.
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
function useCollectionValidation(collection) {
|
|
30
|
+
const $ = c(5);
|
|
31
|
+
const { fields } = useCollectionFields(collection);
|
|
32
|
+
let t0;
|
|
33
|
+
bb0: {
|
|
34
|
+
if (!fields || Object.keys(fields).length === 0) {
|
|
35
|
+
t0 = void 0;
|
|
36
|
+
break bb0;
|
|
37
|
+
}
|
|
38
|
+
let t1$1;
|
|
39
|
+
if ($[0] !== fields) {
|
|
40
|
+
t1$1 = createFormSchema(fields);
|
|
41
|
+
$[0] = fields;
|
|
42
|
+
$[1] = t1$1;
|
|
43
|
+
} else t1$1 = $[1];
|
|
44
|
+
t0 = t1$1;
|
|
45
|
+
}
|
|
46
|
+
const schema = t0;
|
|
47
|
+
const errorMap = useValidationErrorMap();
|
|
48
|
+
let t1;
|
|
49
|
+
if ($[2] !== errorMap || $[3] !== schema) {
|
|
50
|
+
t1 = async (values, _context, _options) => {
|
|
51
|
+
if (!schema) return {
|
|
52
|
+
values,
|
|
53
|
+
errors: {}
|
|
54
|
+
};
|
|
55
|
+
const result = schema.safeParse(values);
|
|
56
|
+
if (result.success) return {
|
|
57
|
+
values: result.data,
|
|
58
|
+
errors: {}
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
values: {},
|
|
62
|
+
errors: zodErrorToFieldErrors(result.error, errorMap)
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
$[2] = errorMap;
|
|
66
|
+
$[3] = schema;
|
|
67
|
+
$[4] = t1;
|
|
68
|
+
} else t1 = $[4];
|
|
69
|
+
return schema ? t1 : void 0;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Convert Zod error to react-hook-form FieldErrors format with i18n support
|
|
73
|
+
*/
|
|
74
|
+
function zodErrorToFieldErrors(error, errorMap) {
|
|
75
|
+
const errors = {};
|
|
76
|
+
for (const issue of error.issues) {
|
|
77
|
+
const path = issue.path.join(".");
|
|
78
|
+
const { message } = errorMap(issue);
|
|
79
|
+
if (path && !errors[path]) errors[path] = {
|
|
80
|
+
type: issue.code,
|
|
81
|
+
message
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return errors;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//#endregion
|
|
88
|
+
export { useCollectionValidation };
|