@rebasepro/admin 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -6
- package/dist/{CollectionEditorDialog-MbvXGzEq.js → CollectionEditorDialog-BXIh2AXg.js} +40 -31
- package/dist/CollectionEditorDialog-BXIh2AXg.js.map +1 -0
- package/dist/{CollectionsStudioView-D9X6aiAr.js → CollectionsStudioView-jR8iz_ja.js} +6 -8
- package/dist/CollectionsStudioView-jR8iz_ja.js.map +1 -0
- package/dist/{ContentHomePage-CfVB1eUo.js → ContentHomePage-BQZWuOFb.js} +5 -7
- package/dist/ContentHomePage-BQZWuOFb.js.map +1 -0
- package/dist/{ExportCollectionAction-CUwJg4F9.js → ExportCollectionAction-CMdiiv1L.js} +36 -38
- package/dist/ExportCollectionAction-CMdiiv1L.js.map +1 -0
- package/dist/{ImportCollectionAction-DGa_SF_8.js → ImportCollectionAction-C05lE0IW.js} +5 -7
- package/dist/ImportCollectionAction-C05lE0IW.js.map +1 -0
- package/dist/{PropertyEditView-C4nlYmAc.js → PropertyEditView-BB5xjnhZ.js} +261 -165
- package/dist/PropertyEditView-BB5xjnhZ.js.map +1 -0
- package/dist/{RolesView-CNWxnR8e.js → RolesView-CULIHWZ9.js} +22 -11
- package/dist/RolesView-CULIHWZ9.js.map +1 -0
- package/dist/{UsersView-YiTIcXkA.js → UsersView-D7_AtJ44.js} +7 -71
- package/dist/UsersView-D7_AtJ44.js.map +1 -0
- package/dist/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +2 -2
- package/dist/collection_editor/ui/collection_editor/properties/VectorPropertyField.d.ts +3 -0
- package/dist/collection_editor_ui.js +5 -5
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +1 -1
- package/dist/components/EntityCollectionView/EntityCollectionListView.d.ts +18 -2
- package/dist/components/EntityCollectionView/FilterPresetsButton.d.ts +21 -0
- package/dist/components/EntityDetailView.d.ts +31 -0
- package/dist/components/EntityEditView.d.ts +3 -2
- package/dist/components/ReferenceTable/EntitySelectionTable.d.ts +1 -1
- package/dist/components/admin/CreationResultDialog.d.ts +5 -0
- package/dist/components/admin/RolesFilterSelect.d.ts +2 -0
- package/dist/components/admin/UserRolesSelectField.d.ts +2 -0
- package/dist/components/common/default_entity_actions.d.ts +7 -1
- package/dist/components/field_configs.d.ts +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/data_import/utils/data.d.ts +1 -1
- package/dist/data_import/utils/file_headers.d.ts +6 -1
- package/dist/data_import/utils/file_to_json.d.ts +1 -11
- package/dist/data_import/utils/transforms.d.ts +11 -0
- package/dist/editor.js +2 -4
- package/dist/editor.js.map +1 -1
- package/dist/form/EntityForm.d.ts +1 -1
- package/dist/form/field_bindings/RelationFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/VectorFieldBinding.d.ts +11 -0
- package/dist/form/index.d.ts +1 -0
- package/dist/hooks/navigation/useResolvedViews.d.ts +2 -1
- package/dist/{index-CtzpHzMQ.js → index-BAM9KCmM.js} +4 -6
- package/dist/index-BAM9KCmM.js.map +1 -0
- package/dist/{index-DKlrVD1m.js → index-CoSNm3e3.js} +3 -3
- package/dist/index-CoSNm3e3.js.map +1 -0
- package/dist/{index-kHJXfLNI.js → index-D5OQhv-T.js} +3 -3
- package/dist/index-D5OQhv-T.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +352 -148
- package/dist/index.js.map +1 -1
- package/dist/types/components/EntityFormActionsProps.d.ts +1 -1
- package/dist/types/components/EntityFormProps.d.ts +2 -1
- package/dist/types/fields.d.ts +3 -3
- package/dist/util/navigation_utils.d.ts +1 -1
- package/dist/{util-CwLmSpGp.js → util-DtbWD7LF.js} +5312 -2580
- package/dist/util-DtbWD7LF.js.map +1 -0
- package/package.json +45 -39
- package/src/collection_editor/ConfigControllerProvider.tsx +1 -1
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +12 -2
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +1 -2
- package/src/collection_editor/ui/EditorCollectionAction.tsx +1 -2
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +1 -2
- package/src/collection_editor/ui/EditorEntityAction.tsx +1 -2
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +1 -2
- package/src/collection_editor/ui/NewCollectionButton.tsx +1 -2
- package/src/collection_editor/ui/NewCollectionCard.tsx +4 -6
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +1 -2
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +10 -2
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +18 -2
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +22 -7
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +16 -2
- package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +19 -9
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +13 -2
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +24 -2
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +22 -3
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +1 -2
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +11 -2
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +12 -2
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +16 -3
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +17 -2
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +18 -2
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +1 -2
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +1 -2
- package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +17 -5
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +32 -6
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +7 -7
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +14 -2
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +16 -2
- package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +9 -2
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +1 -2
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +1 -2
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +9 -2
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +11 -2
- package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +34 -0
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +15 -7
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +1 -2
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +15 -3
- package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +1 -1
- package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +1 -2
- package/src/collection_editor/useLocalCollectionsConfigController.tsx +0 -2
- package/src/collection_editor/validateCollectionJson.ts +9 -9
- package/src/components/AdminModeSyncer.tsx +1 -1
- package/src/components/ArrayContainer.tsx +19 -15
- package/src/components/ClearFilterSortButton.tsx +1 -2
- package/src/components/CollectionEditorDialogs.tsx +1 -1
- package/src/components/DefaultAppBar.tsx +15 -3
- package/src/components/DefaultDrawer.tsx +3 -3
- package/src/components/DrawerNavigationGroup.tsx +1 -2
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +19 -9
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +2 -2
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +1 -1
- package/src/components/EntityCollectionTable/fields/TableMultipleRelationField.tsx +1 -2
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +1 -2
- package/src/components/EntityCollectionTable/fields/TableRelationField.tsx +1 -2
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +1 -2
- package/src/components/EntityCollectionTable/fields/VirtualTableSelect.tsx +0 -1
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +15 -27
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +3 -4
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +1 -2
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +3 -5
- package/src/components/EntityCollectionTable/table_bindings.tsx +51 -45
- package/src/components/EntityCollectionView/Board.tsx +1 -2
- package/src/components/EntityCollectionView/BoardColumn.tsx +9 -2
- package/src/components/EntityCollectionView/BoardColumnTitle.tsx +5 -4
- package/src/components/EntityCollectionView/EntityCard.tsx +2 -2
- package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +18 -16
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +16 -17
- package/src/components/EntityCollectionView/EntityCollectionListView.tsx +90 -21
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +20 -11
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +6 -7
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +14 -5
- package/src/components/EntityCollectionView/FilterPresetsButton.tsx +292 -0
- package/src/components/EntityCollectionView/FiltersDialog.tsx +1 -2
- package/src/components/EntityCollectionView/SplitListView.tsx +76 -25
- package/src/components/EntityCollectionView/ViewModeToggle.tsx +20 -7
- package/src/components/EntityCollectionView/hooks/useKanbanDragAndDrop.ts +1 -1
- package/src/components/EntityCollectionView/useBoardDataController.tsx +74 -6
- package/src/components/EntityCollectionView/useEntityPreviewSlots.ts +1 -1
- package/src/components/EntityDetailView.tsx +619 -0
- package/src/components/EntityEditView.tsx +29 -10
- package/src/components/EntityEditViewFormActions.tsx +20 -7
- package/src/components/EntityPreview.tsx +14 -5
- package/src/components/EntitySidePanel.tsx +116 -62
- package/src/components/EntityView.tsx +1 -2
- package/src/components/HomePage/ContentHomePage.tsx +1 -1
- package/src/components/HomePage/FavouritesView.tsx +1 -2
- package/src/components/HomePage/NavigationCard.tsx +1 -2
- package/src/components/HomePage/NavigationCardBinding.tsx +1 -2
- package/src/components/HomePage/NavigationGroup.tsx +1 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +1 -2
- package/src/components/PropertyIdCopyTooltip.tsx +1 -2
- package/src/components/RebaseAuthGate.tsx +2 -2
- package/src/components/RebaseNavigation.tsx +9 -7
- package/src/components/ReferenceTable/EntitySelectionTable.tsx +12 -8
- package/src/components/RelationSelector.tsx +34 -6
- package/src/components/SearchIconsView.tsx +10 -2
- package/src/components/SelectableTable/SelectableTable.tsx +4 -4
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +1 -2
- package/src/components/SideDialogs.tsx +63 -38
- package/src/components/UserSelector.tsx +30 -6
- package/src/components/admin/CreationResultDialog.tsx +135 -0
- package/src/components/admin/RolesFilterSelect.tsx +45 -0
- package/src/components/admin/RolesView.tsx +53 -14
- package/src/components/admin/UserRolesSelectField.tsx +50 -0
- package/src/components/admin/UsersView.tsx +41 -124
- package/src/components/app/Scaffold.tsx +1 -2
- package/src/components/common/default_entity_actions.tsx +119 -12
- package/src/components/field_configs.tsx +39 -3
- package/src/components/history/EntityHistoryEntry.tsx +1 -2
- package/src/components/history/EntityHistoryView.tsx +1 -2
- package/src/components/index.ts +2 -0
- package/src/data_export/export/BasicExportAction.tsx +35 -38
- package/src/data_export/export/ExportCollectionAction.tsx +39 -40
- package/src/data_import/components/DataNewPropertiesMapping.tsx +15 -2
- package/src/data_import/components/ImportFileUpload.tsx +1 -2
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +1 -2
- package/src/data_import/import/ImportCollectionAction.tsx +21 -8
- package/src/data_import/utils/data.ts +23 -5
- package/src/data_import/utils/file_headers.ts +13 -89
- package/src/data_import/utils/file_to_json.ts +43 -68
- package/src/data_import/utils/transforms.ts +47 -0
- package/src/editor/components/SlashCommandMenu.tsx +17 -2
- package/src/editor/components/editor-bubble-item.tsx +1 -1
- package/src/editor/extensions/Image/index.ts +1 -1
- package/src/editor/extensions/Image.ts +1 -1
- package/src/editor/selectors/color-selector.tsx +1 -2
- package/src/editor/selectors/link-selector.tsx +1 -2
- package/src/editor/selectors/node-selector.tsx +16 -2
- package/src/editor/selectors/text-buttons.tsx +1 -2
- package/src/editor/utils/prosemirror-utils.ts +1 -1
- package/src/form/EntityForm.tsx +16 -6
- package/src/form/EntityFormActions.tsx +11 -3
- package/src/form/PropertyFieldBinding.tsx +5 -12
- package/src/form/components/FieldHelperText.tsx +1 -2
- package/src/form/components/LocalChangesMenu.tsx +17 -2
- package/src/form/components/StorageItemPreview.tsx +1 -2
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +1 -2
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +17 -2
- package/src/form/field_bindings/MapFieldBinding.tsx +1 -1
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +10 -3
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +1 -2
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +1 -2
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +7 -7
- package/src/form/field_bindings/RelationFieldBinding.tsx +150 -147
- package/src/form/field_bindings/RepeatFieldBinding.tsx +1 -1
- package/src/form/field_bindings/SelectFieldBinding.tsx +1 -2
- package/src/form/field_bindings/TextFieldBinding.tsx +10 -2
- package/src/form/field_bindings/VectorFieldBinding.tsx +202 -0
- package/src/form/index.tsx +1 -0
- package/src/form/validation.ts +54 -2
- package/src/hooks/navigation/useBuildNavigationStateController.tsx +2 -1
- package/src/hooks/navigation/useResolvedViews.tsx +30 -15
- package/src/hooks/navigation/useTopLevelNavigation.ts +1 -1
- package/src/index.ts +6 -0
- package/src/preview/PropertyPreview.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +1 -1
- package/src/preview/components/UrlComponentPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -2
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +23 -24
- package/src/routes/RebaseRoute.tsx +64 -35
- package/src/types/components/EntityFormActionsProps.tsx +1 -1
- package/src/types/components/EntityFormProps.tsx +3 -1
- package/src/types/fields.tsx +4 -3
- package/src/util/navigation_utils.ts +4 -3
- package/src/util/previews.ts +1 -1
- package/src/util/property_utils.tsx +22 -6
- package/src/util/resolutions.ts +2 -2
- package/dist/CollectionEditorDialog-MbvXGzEq.js.map +0 -1
- package/dist/CollectionsStudioView-D9X6aiAr.js.map +0 -1
- package/dist/ContentHomePage-CfVB1eUo.js.map +0 -1
- package/dist/ExportCollectionAction-CUwJg4F9.js.map +0 -1
- package/dist/ImportCollectionAction-DGa_SF_8.js.map +0 -1
- package/dist/PropertyEditView-C4nlYmAc.js.map +0 -1
- package/dist/RolesView-CNWxnR8e.js.map +0 -1
- package/dist/UsersView-YiTIcXkA.js.map +0 -1
- package/dist/index-CtzpHzMQ.js.map +0 -1
- package/dist/index-DKlrVD1m.js.map +0 -1
- package/dist/index-kHJXfLNI.js.map +0 -1
- package/dist/util-CwLmSpGp.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionEditorDialog-BXIh2AXg.js","sources":["../src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx","../src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx","../src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx","../src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx","../src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx","../src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx","../src/collection_editor/ui/collection_editor/GetCodeDialog.tsx","../src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx","../src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx","../src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx","../src/collection_editor/ui/collection_editor/templates/products_template.ts","../src/collection_editor/ui/collection_editor/templates/blog_template.ts","../src/collection_editor/ui/collection_editor/templates/users_template.ts","../src/collection_editor/ui/collection_editor/templates/pages_template.ts","../src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx","../src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx","../src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx","../src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx","../src/collection_editor/ui/collection_editor/import/clean_import_data.ts","../src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx","../src/collection_editor/pgColumnToProperty.ts","../src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx"],"sourcesContent":["import { z } from \"zod\";\n\nexport const CollectionEditorSchema = z.object({\n slug: z.string().min(1, \"Required\"),\n name: z.string().min(1, \"Required\"),\n table: z.string().min(1, \"Required\")\n});\n\n\n","\nimport { IconForView } from \"@rebasepro/core\";\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { SearchIconsView } from \"../../_cms_internals\";\nimport type { EntityCollection, PostgresCollection } from \"@rebasepro/types\";\nimport {\n BooleanSwitchWithLabel,\n Chip,\n cls,\n Container,\n DebouncedTextField,\n Dialog,\n ExpandablePanel,\n HistoryIcon,\n IconButton,\n iconSize,\n SearchIcon,\n Select,\n SelectItem,\n TextField,\n Tooltip,\n Typography\n} from \"@rebasepro/ui\";\nimport { Field, getIn, useFormex } from \"@rebasepro/formex\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\nimport { singular, toSnakeCase } from \"@rebasepro/utils\";\n\nexport function GeneralSettingsForm({\n isNewCollection,\n existingPaths,\n existingIds,\n parentCollection\n}: {\n isNewCollection: boolean;\n existingPaths?: string[];\n existingIds?: string[];\n parentCollection?: EntityCollection;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n touched,\n errors,\n setFieldTouched,\n submitCount\n } = useFormex<PostgresCollection>();\n\n const [iconDialogOpen, setIconDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const configController = useCollectionsConfigController();\n\n const updateDatabaseId = (databaseId: string) => {\n setFieldValue(\"databaseId\", databaseId ?? undefined);\n }\n\n const updateName = (name: string) => {\n setFieldValue(\"name\", name);\n\n const pathTouched = getIn(touched, \"table\");\n if (!pathTouched && isNewCollection && name) {\n setFieldValue(\"table\", toSnakeCase(name));\n }\n\n const idTouched = getIn(touched, \"slug\");\n if (!idTouched && isNewCollection && name) {\n setFieldValue(\"slug\", toSnakeCase(name));\n }\n\n const singularNameTouched = getIn(touched, \"singularName\");\n if (!singularNameTouched && isNewCollection && name) {\n setFieldValue(\"singularName\", singular(name));\n }\n };\n\n const collectionIcon = <IconForView collectionOrView={values}/>;\n const isSubcollection = !!parentCollection;\n const showErrors = submitCount > 0;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <div className=\"flex flex-row gap-2 items-center\">\n <Typography variant={!isNewCollection ? \"h5\" : \"h4\"} className={\"flex-grow\"}>\n {isNewCollection ? \"New collection\" : `${values?.name} collection`}\n </Typography>\n <DefaultDatabaseField databaseId={values.databaseId}\n disabled={configController?.readOnly}\n onDatabaseIdUpdate={updateDatabaseId}/>\n\n <Tooltip title={\"Change icon\"}\n asChild={true}>\n <IconButton\n shape={\"square\"}\n disabled={configController?.readOnly}\n onClick={() => setIconDialogOpen(true)}>\n {collectionIcon}\n </IconButton>\n </Tooltip>\n </div>\n\n {parentCollection && <Chip colorScheme={\"teal\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n </div>\n\n <fieldset disabled={configController?.readOnly} className=\"contents\">\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Name */}\n <div className={\"col-span-12\"}>\n <TextField\n value={values.name ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => updateName(e.target.value)}\n label={\"Name\"}\n autoFocus={true}\n required\n error={showErrors && Boolean(errors.name)}/>\n <FieldCaption error={touched.name && Boolean(errors.name)}>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this collection, usually a plural name (e.g. Products)\"}\n </FieldCaption>\n </div>\n\n {/* Table name */}\n <div className={cls(\"col-span-12\")}>\n <Field name={\"table\"}\n as={DebouncedTextField}\n label={\"Table name\"}\n required\n error={showErrors && Boolean(errors.table)}/>\n\n <FieldCaption error={touched.table && Boolean(errors.table)}>\n {touched.table && Boolean(errors.table)\n ? errors.table\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"PostgreSQL table name for this collection\"}\n </FieldCaption>\n </div>\n\n\n {/* Singular Name */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.singularName)}\n name={\"singularName\"}\n aria-describedby={\"singularName-helper\"}\n onChange={(e) => {\n setFieldTouched(\"singularName\", true);\n return handleChange(e);\n }}\n value={values.singularName ?? \"\"}\n label={\"Singular name\"}/>\n <FieldCaption error={showErrors && Boolean(errors.singularName)}>\n {showErrors && Boolean(errors.singularName) ? errors.singularName : \"Optionally define a singular name for your entities\"}\n </FieldCaption>\n </div>\n\n {/* Description */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.description)}\n name=\"description\"\n value={values.description ?? \"\"}\n onChange={handleChange}\n multiline\n minRows={2}\n aria-describedby=\"description-helper-text\"\n label=\"Description\"\n />\n <FieldCaption error={showErrors && Boolean(errors.description)}>\n {showErrors && Boolean(errors.description) ? errors.description : \"Description of the collection, you can use markdown\"}\n </FieldCaption>\n </div>\n\n {/* Collection ID */}\n <div className={\"col-span-12\"}>\n <DebouncedTextField\n name={\"slug\"}\n value={values.slug ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => setFieldValue(\"slug\", e.target.value)}\n disabled={!isNewCollection}\n label={\"Collection ID\"}\n error={showErrors && Boolean(errors.slug)}/>\n <FieldCaption error={touched.slug && Boolean(errors.slug)}>\n {touched.slug && Boolean(errors.slug) ? errors.slug : \"This ID identifies this collection. Typically the same as the path.\"}\n </FieldCaption>\n </div>\n\n </div>\n\n {/* Advanced Settings */}\n {/* eslint-disable-next-line no-constant-condition */}\n {false ? <ExpandablePanel\n title={<Typography variant=\"subtitle2\">Advanced settings</Typography>}\n initiallyExpanded={false}\n className=\"mt-4\"\n innerClassName=\"p-4 flex flex-col gap-4\"\n >\n {/* HistoryIcon revisions */}\n <div>\n <BooleanSwitchWithLabel\n position={\"start\"}\n allowIndeterminate={true}\n label={<span className=\"flex items-center gap-2\"><HistoryIcon size={iconSize.smallest}/>{values.history === null || values.history === undefined ? \"Document history revisions enabled if enabled globally\" : (\n values.history ? \"Document history revisions ENABLED\" : \"Document history revisions NOT enabled\"\n )}</span>}\n onValueChange={(v) => setFieldValue(\"history\", v)}\n value={values.history ?? null}\n />\n <FieldCaption>\n When enabled, each document in this collection will have a history of changes.\n This is useful for auditing purposes. The data is stored in a subcollection of the document\n in your database, called <b>__history</b>.\n </FieldCaption>\n </div>\n\n </ExpandablePanel> : null}\n </fieldset>\n\n <div style={{ height: \"52px\" }}/>\n\n <Dialog\n open={iconDialogOpen}\n onOpenChange={setIconDialogOpen}\n maxWidth={\"xl\"}\n fullWidth\n >\n <div className={\"p-4 overflow-auto min-h-[200px]\"}>\n <SearchIconsView selectedIcon={typeof values.icon === \"string\" ? values.icon : undefined}\n onIconSelected={(icon: string) => {\n setIconDialogOpen(false);\n setFieldValue(\"icon\", icon);\n }}/>\n </div>\n </Dialog>\n\n </Container>\n </div>\n );\n}\n\nfunction DefaultDatabaseField({\n databaseId,\n disabled = false,\n onDatabaseIdUpdate\n}: { databaseId?: string, disabled?: boolean, onDatabaseIdUpdate: (databaseId: string) => void }) {\n\n return <Tooltip title={\"Database ID\"}\n side={\"top\"}\n align={\"start\"}>\n <TextField size={\"small\"}\n invisible={true}\n inputClassName={\"text-end\"}\n disabled={disabled}\n value={databaseId ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onDatabaseIdUpdate(e.target.value)}\n placeholder={\"(default)\"}></TextField>\n </Tooltip>\n}\n","import {\n AppWindow,\n cls,\n ColumnsIcon,\n PanelLeftIcon,\n SquareIcon,\n ToggleButtonGroup,\n Typography\n} from \"@rebasepro/ui\";\n\nexport function LayoutModeSwitch({\n value,\n onChange,\n className\n}: {\n value: \"side_panel\" | \"full_screen\" | \"split\" | \"dialog\";\n onChange: (value: \"side_panel\" | \"full_screen\" | \"split\" | \"dialog\") => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Document view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"side_panel\",\n label: \"Side panel\",\n icon: <ColumnsIcon/>\n },\n {\n value: \"full_screen\",\n label: \"Full screen\",\n icon: <SquareIcon/>\n },\n {\n value: \"split\",\n label: \"Split view\",\n icon: <PanelLeftIcon/>\n },\n {\n value: \"dialog\",\n label: \"Centered dialog\",\n icon: <AppWindow/>\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Should documents be opened full screen, inline side dialog, or centered dialog</Typography>\n </div>\n}\n","import { ViewMode } from \"@rebasepro/types\";\nimport {\n cls,\n KanbanIcon,\n LayoutGridIcon,\n ListIcon,\n TableIcon,\n ToggleButtonGroup,\n Typography\n} from \"@rebasepro/ui\";\n\nexport function ViewModeSwitch({\n value,\n onChange,\n className\n}: {\n value: ViewMode;\n onChange: (value: ViewMode) => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Default collection view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"list\",\n label: \"List\",\n icon: <ListIcon/>\n },\n {\n value: \"table\",\n label: \"Table\",\n icon: <TableIcon/>\n },\n {\n value: \"cards\",\n label: \"Cards\",\n icon: <LayoutGridIcon/>\n },\n {\n value: \"kanban\",\n label: \"Kanban\",\n icon: <KanbanIcon/>\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Choose how entities should be displayed by default</Typography>\n </div>\n}\n","\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useMemo, useRef, useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { EntityCollection, Property } from \"@rebasepro/types\";\nimport { PropertyConfigBadge } from \"../../../components/PropertyConfigBadge\";\nimport { getFieldConfig } from \"../../../components/field_configs\";\nimport { Button, IconButton, iconSize, Select, SelectItem, Typography, XIcon } from \"@rebasepro/ui\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\nimport { unslugify } from \"@rebasepro/utils\";\n\nexport function KanbanConfigSection({\n className,\n forceExpanded\n}: {\n className?: string;\n forceExpanded?: boolean;\n}) {\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const { values, setFieldValue } = useFormex<EntityCollection>();\n const panelRef = useRef<HTMLDivElement>(null);\n const [columnPropertyDialogOpen, setColumnPropertyDialogOpen] = useState(false);\n\n // Get enum string properties (for columnProperty)\n const enumStringProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property }[] = [];\n if (!values.properties) return result;\n\n Object.entries(values.properties).forEach(([key, prop]) => {\n if (prop && \"type\" in prop && prop.type === \"string\" && prop.enum) {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [values.properties]);\n\n const kanbanConfig = values.kanban;\n\n // Check if columnProperty references a non-existent property\n const columnPropertyMissing = Boolean(kanbanConfig?.columnProperty) &&\n !enumStringProperties.some(p => p.key === kanbanConfig?.columnProperty);\n\n // Scroll to section when forceExpanded\n React.useEffect(() => {\n if (forceExpanded && panelRef.current) {\n setTimeout(() => {\n panelRef.current?.scrollIntoView({ behavior: \"smooth\",\nblock: \"center\" });\n }, 100);\n }\n }, [forceExpanded]);\n\n const showCreateButton = !kanbanConfig?.columnProperty || columnPropertyMissing;\n const dialogPropertyKey = columnPropertyMissing && kanbanConfig?.columnProperty\n ? kanbanConfig.columnProperty\n : \"status\";\n const dialogPropertyName = columnPropertyMissing && kanbanConfig?.columnProperty\n ? unslugify(kanbanConfig.columnProperty)\n : \"Status\";\n\n return (\n <div className={className} ref={panelRef}>\n <Select\n key={`column-select-${enumStringProperties.length}`}\n name=\"kanban.columnProperty\"\n label=\"Kanban Column Property\"\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={enumStringProperties.length === 0}\n error={columnPropertyMissing}\n value={kanbanConfig?.columnProperty ?? \"\"}\n onValueChange={(v) => {\n if (v) {\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: v\n });\n } else {\n setFieldValue(\"kanban\", undefined);\n }\n }}\n renderValue={(value) => {\n if (columnPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = enumStringProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={kanbanConfig?.columnProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"kanban\", undefined);\n }}\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n ) : undefined}\n >\n {enumStringProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Enum\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={columnPropertyMissing}>\n {columnPropertyMissing\n ? `Property \"${kanbanConfig?.columnProperty}\" does not exist or is not an enum string property. Please select a valid property or clear the selection.`\n : enumStringProperties.length === 0\n ? \"No enum string properties found. Add a string property with enum to use Kanban view.\"\n : \"Select a string property with enum values to group entities into columns\"\n }\n </FieldCaption>\n\n {showCreateButton && (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n className=\"ml-3.5 mt-2\"\n onClick={() => setColumnPropertyDialogOpen(true)}\n >\n + Create "{dialogPropertyKey}" property\n </Button>\n <PropertyFormDialog\n open={columnPropertyDialogOpen}\n onCancel={() => setColumnPropertyDialogOpen(false)}\n property={{\n type: \"string\",\n name: dialogPropertyName,\n enum: [\n { id: \"todo\",\nlabel: \"To Do\" },\n { id: \"in_progress\",\nlabel: \"In Progress\" },\n { id: \"done\",\nlabel: \"Done\" }\n ]\n } as Property}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: id\n });\n setColumnPropertyDialogOpen(false);\n }}\n />\n </>\n )}\n </div>\n );\n}\n","\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useMemo, useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { getFieldConfig } from \"../../../components/field_configs\";\nimport { PropertyConfigBadge } from \"../../../components/PropertyConfigBadge\";\nimport { EntityCollection, Property } from \"@rebasepro/types\";\nimport {\n BooleanSwitchWithLabel,\n Button,\n Container,\n IconButton,\n iconSize,\n Select,\n SelectItem,\n TextField,\n Typography,\n XIcon\n} from \"@rebasepro/ui\";\n\nimport { useFormex } from \"@rebasepro/formex\";\nimport { LayoutModeSwitch } from \"./LayoutModeSwitch\";\nimport { ViewModeSwitch } from \"./ViewModeSwitch\";\nimport { KanbanConfigSection } from \"./KanbanConfigSection\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\nimport { unslugify } from \"@rebasepro/utils\";\n\nexport function DisplaySettingsForm({\n expandKanban\n}: {\n expandKanban?: boolean;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [orderPropertyDialogOpen, setOrderPropertyDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const configController = useCollectionsConfigController();\n\n // Get text properties (for orderProperty - uses string fractional indexing keys)\n const textProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property; }[] = [];\n if (!values.properties) return result;\n\n Object.entries(values.properties).forEach(([key, prop]) => {\n if (prop && \"type\" in prop && prop.type === \"string\") {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [values.properties]);\n\n const showErrors = submitCount > 0;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <Typography variant={\"h5\"} className={\"flex-grow\"}>\n Display settings\n </Typography>\n </div>\n\n <fieldset disabled={configController?.readOnly} className=\"contents\">\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Layout Mode (Side dialog vs Full screen) */}\n <LayoutModeSwitch\n className={\"col-span-12\"}\n value={values.openEntityMode ?? \"side_panel\"}\n onChange={(value) => setFieldValue(\"openEntityMode\", value)}/>\n\n {/* View Mode (Table/Cards/Kanban) */}\n <ViewModeSwitch\n className={\"col-span-12\"}\n value={values.defaultViewMode ?? \"table\"}\n onChange={(value) => setFieldValue(\"defaultViewMode\", value)}/>\n\n {/* Kanban Column Property */}\n <KanbanConfigSection className={\"col-span-12\"} forceExpanded={expandKanban}/>\n\n {/* Order Property */}\n <div className={\"col-span-12 mt-4\"}>\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !textProperties.some(p => p.key === values.orderProperty);\n\n return (\n <>\n <Select\n key={`order-select-${textProperties.length}`}\n name=\"orderProperty\"\n label=\"Order Property\"\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={textProperties.length === 0}\n error={orderPropertyMissing}\n value={values.orderProperty ?? \"\"}\n onValueChange={(v) => {\n setFieldValue(\"orderProperty\", v || undefined);\n }}\n renderValue={(value) => {\n if (orderPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = textProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={values.orderProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"orderProperty\", undefined);\n }}\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n ) : undefined}\n >\n {textProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Text\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={orderPropertyMissing}>\n {orderPropertyMissing\n ? `Property \"${values.orderProperty}\" does not exist or is not a text property. Please select a valid property or clear the selection.`\n : textProperties.length === 0\n ? \"No text properties found. Add a text property to enable ordering.\"\n : \"Select a text property to persist the order of items\"\n }\n </FieldCaption>\n </>\n );\n })()}\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !textProperties.some(p => p.key === values.orderProperty);\n const showCreateButton = !values.orderProperty || orderPropertyMissing;\n\n const dialogPropertyKey = orderPropertyMissing && values.orderProperty\n ? values.orderProperty\n : \"__order\";\n const dialogPropertyName = orderPropertyMissing && values.orderProperty\n ? unslugify(values.orderProperty)\n : \"Order\";\n\n if (!showCreateButton) return null;\n\n return (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n className=\"ml-3.5 mt-2\"\n onClick={() => setOrderPropertyDialogOpen(true)}\n >\n + Create "{dialogPropertyKey}" property\n </Button>\n <PropertyFormDialog\n open={orderPropertyDialogOpen}\n onCancel={() => setOrderPropertyDialogOpen(false)}\n property={{\n type: \"string\",\n name: dialogPropertyName,\n ui: { disabled: true, hideFromCollection: true }\n }}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"orderProperty\", id);\n setOrderPropertyDialogOpen(false);\n }}\n />\n </>\n );\n })()}\n </div>\n\n {/* Default row size */}\n <div className={\"col-span-12\"}>\n <Select\n name=\"defaultSize\"\n fullWidth={true}\n label=\"Default row size\"\n position={\"item-aligned\"}\n onChange={handleChange}\n value={values.defaultSize ?? \"\"}\n renderValue={(value: string) => value.toUpperCase()}\n >\n {[\"xs\", \"s\", \"m\", \"l\", \"xl\"].map((value) => (\n <SelectItem\n key={`size-select-${value}`}\n value={value}>\n {value.toUpperCase()}\n </SelectItem>\n ))}\n </Select>\n </div>\n\n {/* Side dialog width */}\n <div className={\"col-span-12\"}>\n <TextField\n name={\"sideDialogWidth\"}\n type={\"number\"}\n aria-describedby={\"sideDialogWidth-helper\"}\n onChange={(e) => {\n const value = e.target.value;\n if (!value) {\n setFieldValue(\"sideDialogWidth\", null);\n } else if (!isNaN(Number(value))) {\n setFieldValue(\"sideDialogWidth\", Number(value));\n }\n }}\n endAdornment={<IconButton\n size={\"small\"}\n onClick={() => {\n setFieldValue(\"sideDialogWidth\", null);\n }}\n disabled={!values.sideDialogWidth}>\n <XIcon size={iconSize.small}/>\n </IconButton>}\n value={values.sideDialogWidth ?? \"\"}\n label={\"Side dialog width\"}/>\n <FieldCaption>\n Optionally define the width (in pixels) of entities side dialog. Default is 768px\n </FieldCaption>\n </div>\n\n {/* Inline editing */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label={values.inlineEditing === undefined || values.inlineEditing ? \"Data can be edited directly in the table view\" : \"Data can be edited only in the form view\"}\n onValueChange={(v) => setFieldValue(\"inlineEditing\", v)}\n value={values.inlineEditing === undefined ? true : values.inlineEditing}\n />\n <FieldCaption>\n Allow editing data directly in the table view, without opening the form view.\n </FieldCaption>\n </div>\n\n {/* Include JSON view */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label={values.includeJsonView === undefined || values.includeJsonView ? \"Include JSON view\" : \"Do not include JSON view\"}\n onValueChange={(v) => setFieldValue(\"includeJsonView\", v)}\n value={values.includeJsonView === undefined ? true : values.includeJsonView}\n />\n <FieldCaption>\n Allows removing the form view JSON tab if you think it is confusing for your users.\n </FieldCaption>\n </div>\n\n </div>\n </fieldset>\n\n <div style={{ height: \"52px\" }}/>\n\n </Container>\n </div>\n );\n}\n","import { useSnackbarController } from \"@rebasepro/core\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { Button, CopyIcon, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@rebasepro/ui\";\nimport React from \"react\";\nimport JSON5 from \"json5\";\nimport { Highlight, themes } from \"prism-react-renderer\"\nimport { camelCase } from \"./utils/strings\";\nimport { clone } from \"@rebasepro/formex\";\nimport { isEmptyObject } from \"@rebasepro/utils\";\n\nexport function GetCodeDialog({\n collection,\n onOpenChange,\n open\n}: { onOpenChange: (open: boolean) => void, collection: EntityCollection, open: boolean }) {\n\n const snackbarController = useSnackbarController();\n\n const code = collection\n ? \"import { EntityCollection } from \\\"@rebasepro/core\\\";\\n\\nconst \" + (collection?.name ? camelCase(collection.name) : \"my\") + \"Collection:EntityCollection = \" + JSON5.stringify(collectionToCode({ ...collection }), null, \"\\t\")\n : \"No collection selected\";\n return <Dialog open={open}\n onOpenChange={onOpenChange}\n maxWidth={\"4xl\"}>\n <DialogTitle variant={\"h6\"}>Code for {collection.name}</DialogTitle>\n <DialogContent>\n\n <Typography variant={\"body2\"} className={\"my-4 mb-8\"}>\n If you want to customise the collection in code, you can add this collection code to your CMS\n app configuration.\n More info in the <a\n rel=\"noopener noreferrer\"\n href={\"https://rebase.pro/docs/cloud/quickstart\"}>docs</a>.\n </Typography>\n <Highlight\n theme={themes.vsDark}\n code={code}\n language=\"typescript\"\n >\n {({\n className,\n style,\n tokens,\n getLineProps,\n getTokenProps\n }) => (\n <pre style={style} className={\"p-4 rounded-xs text-sm\"}>\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })}/>\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n\n </DialogContent>\n <DialogActions>\n <Button\n variant={\"text\"}\n size={\"small\"}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n snackbarController.open({\n type: \"success\",\n message: \"Copied\"\n })\n return navigator.clipboard.writeText(code);\n }}>\n <CopyIcon/>\n CopyIcon to clipboard\n </Button>\n <Button onClick={() => onOpenChange(false)}>Close</Button>\n </DialogActions>\n </Dialog>;\n}\n\nfunction collectionToCode(collection: EntityCollection): object {\n\n const propertyCleanup = (value: unknown): unknown => {\n if (value === undefined || value === null) {\n return value;\n }\n const valueCopy = clone(value);\n if (typeof valueCopy === \"function\") {\n return valueCopy;\n }\n if (Array.isArray(valueCopy)) {\n return valueCopy.map((v: unknown) => propertyCleanup(v));\n }\n if (typeof valueCopy === \"object\") {\n if (valueCopy === null)\n return valueCopy;\n const obj = valueCopy as Record<string, any>;\n Object.keys(obj).forEach((key) => {\n if (!isEmptyObject(obj)) {\n const childRes = propertyCleanup(obj[key]);\n if (childRes !== null && childRes !== undefined && childRes !== false && !isEmptyObject(childRes)) {\n obj[key] = childRes;\n } else {\n delete obj[key];\n }\n }\n });\n delete obj.resolved;\n delete obj.propertiesOrder;\n delete obj.propertyConfig;\n\n }\n\n return valueCopy;\n }\n\n return {\n id: collection.slug,\n name: collection.name,\n singularName: collection.singularName,\n path: collection.slug,\n description: collection.description,\n\n icon: collection.icon,\n defaultFilter: collection.defaultFilter,\n sort: collection.sort,\n properties: Object.entries({\n ...(collection.properties ?? {})\n })\n .map(([key, value]) => ({\n [key]: propertyCleanup(value)\n }))\n .reduce((a, b) => ({\n ...a,\n ...b\n }), {})\n // subcollections: (collection.subcollections ?? []).map(collectionToCode)\n }\n\n}\n","\nimport React, { useEffect, useMemo, useState } from \"react\";\n\nimport { Field, getIn, useFormex } from \"@rebasepro/formex\";\nimport {\n useLargeLayout,\n useSnackbarController\n} from \"@rebasepro/core\";\nimport { ErrorBoundary } from \"@rebasepro/ui\";\nimport {\n Button,\n CircularProgress,\n cls,\n CodeIcon,\n DebouncedTextField,\n defaultBorderMixin,\n FileSearchIcon,\n IconButton,\n PlusIcon,\n Tooltip,\n Typography\n} from \"@rebasepro/ui\";\nimport { EntityCollection, MapProperty, Properties, Property, PropertyConfig, User } from \"@rebasepro/types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\n\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"./util\";\nimport { OnPropertyChangedParams, PropertyForm, PropertyFormDialog } from \"./PropertyEditView\";\nimport { PropertyTree } from \"./PropertyTree\";\nimport { GetCodeDialog } from \"./GetCodeDialog\";\nimport { useAIModifiedPaths } from \"./AIModifiedPathsContext\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\n\ntype PropertyOrBuilder = Property | any;\n\ntype CollectionEditorFormProps = {\n showErrors: boolean;\n isNewCollection: boolean;\n propertyErrorsRef?: React.MutableRefObject<any>;\n onPropertyError: (propertyKey: string, namespace: string | undefined, error?: Record<string, any>) => void;\n setDirty?: (dirty: boolean) => void;\n extraIcon: React.ReactNode | any;\n getUser?: (uid: string) => User | null;\n getData?: () => Promise<object[]>;\n doCollectionInference?: (collection: EntityCollection) => Promise<Partial<EntityCollection> | null> | undefined;\n propertyConfigs: Record<string, PropertyConfig>;\n\n};\n\nexport function CollectionPropertiesEditorForm({\n showErrors,\n isNewCollection,\n propertyErrorsRef,\n onPropertyError,\n setDirty,\n extraIcon,\n getUser,\n getData,\n doCollectionInference,\n propertyConfigs\n\n}: CollectionEditorFormProps) {\n\n const {\n values,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n errors,\n dirty\n } = useFormex<EntityCollection>();\n\n const snackbarController = useSnackbarController();\n const configController = useCollectionsConfigController();\n\n const largeLayout = useLargeLayout();\n const asDialog = !largeLayout\n\n // index of the selected property within the namespace\n const [selectedPropertyIndex, setSelectedPropertyIndex] = useState<number | undefined>();\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n const [codeDialogOpen, setCodeDialogOpen] = useState<boolean>(false);\n\n const [inferringProperties, setInferringProperties] = useState<boolean>(false);\n\n const [newPropertyDialogOpen, setNewPropertyDialogOpen] = useState<boolean>(false);\n const [inferredPropertyKeys, setInferredPropertyKeys] = useState<string[]>([]);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n useEffect(() => {\n if (setDirty)\n setDirty(dirty);\n }, [dirty]);\n\n const inferPropertiesFromData = doCollectionInference\n ? (): void => {\n if (!doCollectionInference || configController?.readOnly)\n return;\n\n setInferringProperties(true);\n\n console.debug(\"CollectionEditor: inferring properties from data\", values);\n // @ts-ignore\n doCollectionInference(values)\n .then((newCollection) => {\n\n if (!newCollection) {\n snackbarController.open({\n type: \"error\",\n message: \"Could not infer properties from data\"\n });\n return;\n }\n\n // Helper function to find all new property keys including nested ones\n const findNewPropertyKeys = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined,\n namespace?: string\n ): string[] => {\n if (!newProps) return [];\n const keys: string[] = [];\n\n for (const key of Object.keys(newProps)) {\n const fullKey = namespace ? `${namespace}.${key}` : key;\n const existingProp = existingProps?.[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This is a completely new property\n keys.push(fullKey);\n } else if (\n typeof newProp === \"object\" &&\n \"type\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // This is a map property, check for new nested properties\n const existingMapProps = typeof existingProp === \"object\" &&\n \"type\" in existingProp &&\n existingProp.dataType === \"map\"\n ? (existingProp as MapProperty).properties\n : undefined;\n keys.push(...findNewPropertyKeys(existingMapProps, newProp.properties as Record<string, PropertyOrBuilder>, fullKey));\n }\n }\n return keys;\n };\n\n // Helper function to add only new properties without overwriting existing ones\n // This preserves existing property configurations while adding missing nested properties\n const addNewPropertiesOnly = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined\n ): Record<string, PropertyOrBuilder> => {\n if (!newProps) return existingProps ?? {};\n if (!existingProps) return newProps;\n\n const result = { ...existingProps };\n\n for (const key of Object.keys(newProps)) {\n const existingProp = existingProps[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This property doesn't exist, add it\n result[key] = newProp;\n } else if (\n typeof existingProp === \"object\" &&\n \"type\" in existingProp &&\n existingProp.dataType === \"map\" &&\n typeof newProp === \"object\" &&\n \"type\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // Both are map properties, recursively add new nested properties\n // Only if the existing map has properties, merge them; otherwise keep existing as-is\n const existingMapProps = (existingProp as MapProperty).properties as Record<string, PropertyOrBuilder> | undefined;\n if (existingMapProps) {\n result[key] = {\n ...existingProp,\n properties: addNewPropertiesOnly(\n existingMapProps,\n newProp.properties as Record<string, PropertyOrBuilder>\n )\n };\n }\n // If existingProp doesn't have properties, keep it as-is (don't overwrite with inferred)\n }\n // Otherwise, keep the existing property as-is (don't overwrite)\n }\n\n return result;\n };\n\n // Add only new properties from inferred collection without replacing existing ones\n const updatedProperties = addNewPropertiesOnly(\n values.properties ?? {},\n newCollection.properties as Record<string, PropertyOrBuilder>\n ) as { [key: string]: PropertyOrBuilder };\n\n // Find all new property keys including nested ones\n const allNewPropertyKeys = findNewPropertyKeys(\n values.properties,\n newCollection.properties as Record<string, PropertyOrBuilder>\n );\n\n // Find new top-level property keys for the properties order\n const newTopLevelPropertyKeys = (newCollection.properties ? Object.keys(newCollection.properties) : [])\n .filter((propertyKey) => !values.properties[propertyKey]);\n\n // Check if there are any changes (new properties or modified nested properties)\n if (allNewPropertyKeys.length === 0) {\n snackbarController.open({\n type: \"info\",\n message: \"No new properties found in existing data\"\n });\n return;\n }\n\n // Update properties order: keep existing order and append new keys at the beginning\n // Use Object.keys from updatedProperties to ensure all properties are included\n const allExistingKeys = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const updatedPropertiesOrder = [\n ...newTopLevelPropertyKeys,\n ...allExistingKeys.filter(key => !newTopLevelPropertyKeys.includes(key))\n ];\n\n setFieldValue(\"properties\", updatedProperties, false);\n updatePropertiesOrder(updatedPropertiesOrder);\n setInferredPropertyKeys(allNewPropertyKeys);\n\n snackbarController.open({\n type: \"success\",\n message: `Added ${allNewPropertyKeys.length} new ${allNewPropertyKeys.length === 1 ? \"property\" : \"properties\"}`\n });\n })\n .finally(() => {\n setInferringProperties(false);\n })\n }\n : undefined;\n\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"] ?? getIn(values, namespaceToPropertiesOrderPath());\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n };\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n if (configController?.readOnly) return;\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(idToPropertiesPath(fullId), undefined, false);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n if (currentPropertiesOrder) {\n const newPropertiesOrder = currentPropertiesOrder.filter((p) => p !== propertyKey);\n updatePropertiesOrder(newPropertiesOrder, namespace);\n }\n\n setNewPropertyDialogOpen(false);\n\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n if (configController?.readOnly) return;\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n const onPropertyCreated = ({\n id,\n property\n }: {\n id?: string,\n property: Property\n }) => {\n if (configController?.readOnly) return;\n if (!id) {\n throw Error(\"Need to include an ID when creating a new property\")\n }\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties)), id];\n updatePropertiesOrder(newPropertiesOrder);\n\n setNewPropertyDialogOpen(false);\n if (largeLayout) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n if (id) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n\n };\n\n const onPropertyErrorInternal = (id: string, namespace?: string, error?: Record<string, any>) => {\n const propertyPath = id ? getFullId(id, namespace) : undefined;\n console.debug(\"onPropertyErrorInternal\", {\n id,\n namespace,\n error,\n propertyPath\n });\n if (propertyPath) {\n const hasError = error && Object.keys(error).length > 0;\n onPropertyError(id, namespace, hasError ? error : undefined);\n setFieldError(idToPropertiesPath(propertyPath), hasError ? \"Property error\" : undefined);\n }\n }\n\n const closePropertyDialog = () => {\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n };\n\n const initialErrors = selectedPropertyKey && propertyErrorsRef?.current?.properties ? propertyErrorsRef.current.properties[selectedPropertyKey] : undefined;\n\n const emptyCollection = (values?.propertiesOrder === undefined || values.propertiesOrder.length === 0)\n && (!values?.properties || Object.keys(values.properties).length === 0);\n\n const usedPropertiesOrder = (values.propertiesOrder\n ? values.propertiesOrder\n : Object.keys(values.properties)) as string[];\n\n const owner = useMemo(() => values.ownerId && getUser ? getUser(values.ownerId) : null, [getUser, values.ownerId]);\n\n // Get AI generation counter for key to force remount on AI changes\n const aiModifiedPaths = useAIModifiedPaths();\n const generationCounter = aiModifiedPaths?.generationCounter ?? 0;\n\n const onPropertyClick = (propertyKey: string, namespace?: string) => {\n console.debug(\"CollectionEditor: onPropertyClick\", {\n propertyKey,\n namespace\n });\n setSelectedPropertyIndex(usedPropertiesOrder.indexOf(propertyKey));\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n };\n\n const body = (\n <div className={\"grid grid-cols-12 gap-2 h-full bg-white dark:bg-surface-950\"}>\n <div className={cls(\n \"bg-surface-50 dark:bg-surface-900\",\n \"p-4 md:p-8\",\n \"col-span-12 lg:col-span-5 h-full overflow-auto\",\n !asDialog && \"border-r \" + defaultBorderMixin\n )}>\n\n <div className=\"flex my-2\">\n\n <div className=\"grow mb-4\">\n\n <Field\n name={\"name\"}\n as={DebouncedTextField}\n invisible={true}\n className=\"-ml-1\"\n inputClassName=\"text-2xl font-headers\"\n placeholder={\"Collection name\"}\n size={\"small\"}\n required\n error={Boolean(errors?.name)}/>\n\n {owner &&\n <Typography variant={\"body2\"}\n className={\"ml-2\"}\n color={\"secondary\"}>\n Created by {owner.displayName}\n </Typography>}\n </div>\n\n {extraIcon && <div className=\"ml-4\">\n {extraIcon}\n </div>}\n\n <div className=\"ml-4 flex flex-row gap-2 items-center flex-shrink-0\">\n {/* <Tooltip title={\"Get the code for this collection\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={() => setCodeDialogOpen(true)}>\n <CodeIcon />\n </IconButton>\n </Tooltip> */}\n {inferPropertiesFromData && <Tooltip title={\"Add new properties based on data\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={inferPropertiesFromData}>\n {inferringProperties ? <CircularProgress size={\"small\"}/> : <FileSearchIcon/>}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}\n asChild={true}>\n <Button\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}>\n <PlusIcon/>\n </Button>\n </Tooltip>\n </div>\n </div>\n\n <ErrorBoundary>\n <PropertyTree\n className={\"mt-2\"}\n inferredPropertyKeys={inferredPropertyKeys}\n selectedPropertyKey={selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined}\n properties={values.properties}\n additionalFields={values.additionalFields}\n propertiesOrder={usedPropertiesOrder}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={(isNewCollection || (inferredPropertyKeys && inferredPropertyKeys.length > 0)) && !configController?.readOnly ? deleteProperty : undefined}\n\n errors={errors}/>\n </ErrorBoundary>\n\n <Button className={\"mt-4 xl:mt-8 w-full\"}\n variant=\"filled\"\n color=\"neutral\"\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}\n startIcon={<PlusIcon/>}>\n Add new property\n </Button>\n </div>\n\n {!asDialog &&\n <div className={\"col-span-12 lg:col-span-7 p-4 md:py-8 md:px-4 h-full overflow-auto\"}>\n <div\n className=\"sticky top-8 min-h-full w-full flex flex-col justify-center\">\n\n {selectedPropertyFullId &&\n selectedProperty &&\n !isPropertyBuilder(selectedProperty) &&\n <PropertyForm\n inArray={false}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n existingProperty={!isNewCollection}\n autoUpdateId={false}\n allowDataInference={!isNewCollection}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n\n />}\n\n {!selectedProperty &&\n <div className={\"w-full flex flex-col items-center justify-center h-full gap-4\"}>\n <Typography variant={\"label\"} className=\"\">\n {emptyCollection\n ? \"Now you can add your first property\"\n : \"Select a property to edit it\"}\n </Typography>\n <Button\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}\n >\n <PlusIcon/>\n Add new property\n </Button>\n </div>}\n\n {selectedProperty && isPropertyBuilder(selectedProperty) &&\n <Typography variant={\"label\"} className=\"flex items-center justify-center\">\n {\"This property is defined as a property builder in code\"}\n </Typography>}\n </div>\n </div>}\n\n {asDialog && <PropertyFormDialog\n inArray={false}\n open={selectedPropertyIndex !== undefined}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n autoUpdateId={!selectedProperty}\n allowDataInference={!isNewCollection}\n existingProperty={true}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n\n onCancel={closePropertyDialog}\n onOkClicked={asDialog\n ? closePropertyDialog\n : undefined\n }/>}\n\n </div>);\n\n return (<>\n\n {body}\n\n {/* This is the dialog used for new properties*/}\n <PropertyFormDialog\n inArray={false}\n existingProperty={false}\n autoOpenTypeSelect={true}\n autoUpdateId={true}\n forceShowErrors={showErrors}\n open={newPropertyDialogOpen}\n onCancel={() => setNewPropertyDialogOpen(false)}\n onPropertyChanged={onPropertyCreated}\n getData={getData}\n allowDataInference={!isNewCollection}\n propertyConfigs={propertyConfigs}\n existingPropertyKeys={values.propertiesOrder as string[]}/>\n\n <ErrorBoundary>\n <GetCodeDialog\n collection={values}\n open={codeDialogOpen}\n onOpenChange={setCodeDialogOpen}/>\n </ErrorBoundary>\n </>\n );\n}\n","\nimport React, { useState } from \"react\";\nimport {\n Button,\n cls,\n Container,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Select,\n SelectItem,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n TextField,\n Trash2Icon,\n Typography\n} from \"@rebasepro/ui\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { PostgresCollection, Relation } from \"@rebasepro/types\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\n\nexport function CollectionRelationsTab() {\n const { values, setFieldValue } = useFormex<PostgresCollection>();\n const { collections } = useCollectionsConfigController();\n const [editingRelationIndex, setEditingRelationIndex] = useState<number | null>(null);\n const [editingRelationState, setEditingRelationState] = useState<Partial<Relation> | null>(null);\n\n const getTargetSlug = (target: any) => {\n if (typeof target === \"string\") {\n const match = target.match(/\\(\\)\\s*=>\\s*([a-zA-Z0-9_]+)/);\n return match ? match[1] : target;\n }\n if (typeof target === \"function\") {\n try {\n // If we attached a slug manually\n if (target.slug) return target.slug;\n const col = target();\n return col?.slug || col?.name || \"\";\n } catch (e) {\n return \"\";\n }\n }\n return \"\";\n };\n\n const relations = values.relations || [];\n\n const handleDelete = (index: number) => {\n const newRelations = [...relations];\n newRelations.splice(index, 1);\n setFieldValue(\"relations\", newRelations);\n };\n\n const handleSave = () => {\n if (!editingRelationState) return;\n\n const newRelations = [...relations];\n if (editingRelationIndex === -1) {\n newRelations.push(editingRelationState as Relation);\n } else if (editingRelationIndex !== null) {\n newRelations[editingRelationIndex] = editingRelationState as Relation;\n }\n setFieldValue(\"relations\", newRelations);\n\n setEditingRelationIndex(null);\n setEditingRelationState(null);\n };\n\n const handleCancel = () => {\n setEditingRelationIndex(null);\n setEditingRelationState(null);\n };\n\n return (\n <div className=\"overflow-auto my-auto h-full w-full\">\n <Container maxWidth=\"4xl\" className=\"flex flex-col gap-4 p-8 m-auto h-full\">\n <div className=\"flex items-center justify-between mb-8\">\n <Typography variant=\"h5\">Relations</Typography>\n <Button variant=\"filled\" color=\"neutral\" onClick={() => {\n setEditingRelationIndex(-1);\n setEditingRelationState({ relationName: \"\",\ntarget: \"\" as unknown as Relation[\"target\"],\ncardinality: \"many\",\ndirection: \"owning\" });\n }}>\n ADD RELATION\n </Button>\n </div>\n\n {relations.length > 0 ? (\n <div className=\"w-full overflow-auto border dark:border-surface-800 rounded-lg\">\n <Table className=\"w-full\">\n <TableHeader>\n <TableCell header className=\"w-16\"></TableCell>\n <TableCell header>Name</TableCell>\n <TableCell header>Target</TableCell>\n <TableCell header>Cardinality</TableCell>\n <TableCell header>Direction</TableCell>\n </TableHeader>\n <TableBody>\n {relations.map((relation, index) => (\n <TableRow key={index}\n className=\"cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-800\"\n onClick={() => {\n setEditingRelationIndex(index);\n setEditingRelationState(relation);\n }}>\n <TableCell style={{ width: \"64px\" }}>\n <IconButton size=\"small\" onClick={(e) => {\n e.stopPropagation();\n handleDelete(index);\n }}>\n <Trash2Icon/>\n </IconButton>\n </TableCell>\n <TableCell className=\"font-medium\">{relation.relationName}</TableCell>\n <TableCell>{getTargetSlug(relation.target) || \"Function\"}</TableCell>\n <TableCell>{relation.cardinality}</TableCell>\n <TableCell>{relation.direction || \"owning\"}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n ) : (\n <div className=\"flex-grow flex flex-col border border-dashed dark:border-surface-700 rounded-lg items-center justify-center text-text-disabled py-20\">\n <Typography variant=\"body2\" className=\"mb-4\">No relations defined for this collection.</Typography>\n <Button variant=\"text\" onClick={() => {\n setEditingRelationIndex(-1);\n setEditingRelationState({ relationName: \"\",\ntarget: \"\" as unknown as Relation[\"target\"],\ncardinality: \"many\",\ndirection: \"owning\" });\n }}>Create your first relation</Button>\n </div>\n )}\n\n <Dialog open={!!editingRelationState} onOpenChange={(open) => !open && handleCancel()} maxWidth=\"2xl\">\n {editingRelationState && (\n <>\n <DialogTitle className=\"flex justify-between items-center w-full\" variant=\"h6\">\n {editingRelationIndex === -1 ? \"New Relation\" : \"Edit Relation\"}\n </DialogTitle>\n <DialogContent includeMargin={false} className={cls(\"p-4 md:p-6 border-t bg-white dark:bg-surface-900\", defaultBorderMixin)}>\n <div className=\"flex flex-col gap-4 max-w-2xl mx-auto\">\n <TextField\n label=\"Relation Name\"\n name=\"relationName\"\n placeholder=\"e.g. posts\"\n value={editingRelationState.relationName || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nrelationName: e.target.value } : null)}\n />\n <Select\n fullWidth\n label=\"Target Collection\"\n value={getTargetSlug(editingRelationState.target)}\n onValueChange={(val) => {\n setEditingRelationState(prev => {\n if (!prev) return null;\n const targetFn = () => collections?.find(c => c.slug === val) || { slug: val };\n (targetFn as { slug?: string }).slug = val;\n return { ...prev,\ntarget: targetFn as Relation[\"target\"] };\n });\n }}\n >\n {collections?.map(col => (\n <SelectItem key={col.slug} value={col.slug}>{col.name || col.slug}</SelectItem>\n ))}\n </Select>\n <Select\n fullWidth\n label=\"Cardinality\"\n value={editingRelationState.cardinality || \"many\"}\n onValueChange={(val) => setEditingRelationState(prev => prev ? { ...prev,\ncardinality: val as Relation[\"cardinality\"] } : null)}\n >\n <SelectItem value=\"many\">Many</SelectItem>\n <SelectItem value=\"one\">One</SelectItem>\n </Select>\n <Select\n fullWidth\n label=\"Direction\"\n value={editingRelationState.direction || \"owning\"}\n onValueChange={(val) => setEditingRelationState(prev => prev ? { ...prev,\ndirection: val as Relation[\"direction\"] } : null)}\n >\n <SelectItem value=\"owning\">Owning</SelectItem>\n <SelectItem value=\"inverse\">Inverse</SelectItem>\n </Select>\n\n {editingRelationState.cardinality === \"many\" && editingRelationState.direction === \"owning\" && (\n <div className={cls(\"flex flex-col gap-4 mt-4 pt-4 border-t\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-text-primary\">Intermediate Table</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary -mt-3\">\n Required for many-to-many relationships. This defines the junction table linking both collections.\n </Typography>\n\n <TextField\n label=\"Table Name\"\n name=\"throughTable\"\n placeholder=\"e.g. user_roles\"\n value={editingRelationState.through?.table || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nthrough: { ...(prev.through || { sourceColumn: \"\",\ntargetColumn: \"\" }),\ntable: e.target.value } } : null)}\n />\n <div className=\"flex gap-4\">\n <TextField\n className=\"flex-1\"\n label=\"Source Column\"\n name=\"sourceColumn\"\n placeholder=\"FK to this collection\"\n value={editingRelationState.through?.sourceColumn || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nthrough: { ...(prev.through || { table: \"\",\ntargetColumn: \"\" }),\nsourceColumn: e.target.value } } : null)}\n />\n <TextField\n className=\"flex-1\"\n label=\"Target Column\"\n name=\"targetColumn\"\n placeholder=\"FK to target collection\"\n value={editingRelationState.through?.targetColumn || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nthrough: { ...(prev.through || { table: \"\",\nsourceColumn: \"\" }),\ntargetColumn: e.target.value } } : null)}\n />\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={handleCancel}>Cancel</Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n onClick={handleSave}\n disabled={!editingRelationState.relationName || !editingRelationState.target}\n >\n Save\n </Button>\n </DialogActions>\n </>\n )}\n </Dialog>\n </Container>\n </div>\n );\n}\n","\nimport React, { useCallback, useState } from \"react\";\nimport {\n Alert,\n Button,\n cls,\n CodeIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n iconSize,\n Typography\n} from \"@rebasepro/ui\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { validateCollectionJson, CollectionValidationError } from \"../../validateCollectionJson\";\n\nconst EXAMPLE_JSON = `{\n \"id\": \"products\",\n \"name\": \"Products\",\n \"path\": \"products\",\n \"icon\": \"shopping_cart\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"name\": \"Name\",\n \"validation\": { \"required\": true }\n },\n \"price\": {\n \"type\": \"number\",\n \"name\": \"Price\"\n },\n \"available\": {\n \"type\": \"boolean\",\n \"name\": \"Available\"\n }\n }\n}`;\n\nexport interface CollectionJsonImportDialogProps {\n open: boolean;\n onClose: () => void;\n onImport: (collection: EntityCollection) => void;\n}\n\nexport function CollectionJsonImportDialog({\n open,\n onClose,\n onImport\n}: CollectionJsonImportDialogProps) {\n const [jsonValue, setJsonValue] = useState<string>(\"\");\n const [errors, setErrors] = useState<CollectionValidationError[]>([]);\n const [touched, setTouched] = useState(false);\n\n const handleJsonChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value;\n setJsonValue(value);\n setTouched(true);\n\n if (!value.trim()) {\n setErrors([]);\n return;\n }\n\n const result = validateCollectionJson(value);\n setErrors(result.errors);\n }, []);\n\n const handleImport = useCallback(() => {\n const result = validateCollectionJson(jsonValue);\n if (result.valid && result.collection) {\n onImport(result.collection);\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }\n }, [jsonValue, onImport, onClose]);\n\n const handleClose = useCallback(() => {\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }, [onClose]);\n\n const isValid = touched && jsonValue.trim() && errors.length === 0;\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => !open && handleClose()}\n maxWidth=\"2xl\"\n >\n <DialogTitle className=\"flex items-center gap-2\">\n <CodeIcon size={iconSize.smallest}/>\n Import Collection from JSON\n </DialogTitle>\n <DialogContent className=\"flex flex-col gap-4\">\n <Typography variant=\"body2\" color=\"secondary\">\n Paste a JSON object representing your collection configuration.\n The JSON must include <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">id</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">name</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">path</code>, and\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">properties</code>.\n </Typography>\n\n <textarea\n value={jsonValue}\n onChange={handleJsonChange}\n placeholder={EXAMPLE_JSON}\n rows={12}\n className={cls(\n \"w-full p-3 font-mono text-sm rounded-md border resize-none overflow-y-auto\",\n \"bg-surface-50 dark:bg-surface-800\",\n \"focus:outline-none focus:ring-2 focus:ring-primary\",\n \"h-[300px]\",\n errors.length > 0 && touched\n ? \"border-red-500 dark:border-red-400\"\n : \"border-surface-300 dark:border-surface-600\"\n )}\n />\n\n {errors.length > 0 && touched && (\n <Alert color=\"error\">\n <Typography variant=\"body2\" className=\"font-medium mb-2\">\n Validation errors:\n </Typography>\n <ul className=\"list-disc list-inside space-y-1\">\n {errors.map((error, index) => (\n <li key={index} className=\"text-sm\">\n {error.path ? (\n <>\n <code className=\"bg-red-100 dark:bg-red-900/40 px-1 rounded\">\n {error.path}\n </code>\n : {error.message}\n </>\n ) : (\n error.message\n )}\n </li>\n ))}\n </ul>\n </Alert>\n )}\n\n {isValid && (\n <Alert color=\"success\">\n <Typography variant=\"body2\">\n ✓ JSON is valid and ready to import\n </Typography>\n </Alert>\n )}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n onClick={handleClose}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n onClick={handleImport}\n disabled={!isValid}\n >\n Import Collection\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const productsCollectionTemplate = {\n slug: \"products\",\n table: \"products\",\n name: \"Products\",\n singularName: \"Product\",\n icon: \"ShoppingCart\",\n description: \"List of the products currently sold in your shop\",\n properties: {\n name: {\n type: \"string\",\n name: \"Name\",\n description: \"Name of this product\",\n validation: {\n required: true\n }\n },\n brand: {\n type: \"string\",\n name: \"Brand\",\n validation: {\n required: true\n }\n },\n description: {\n type: \"string\",\n name: \"Description\",\n description: \"Description of this product, supports markdown\",\n markdown: true\n },\n main_image: {\n type: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n },\n description: \"Upload field for images\"\n },\n available: {\n type: \"boolean\",\n name: \"Available\",\n ui: { columnWidth: 100 },\n description: \"Is this product available in the website\"\n },\n price: {\n type: \"number\",\n name: \"Price\",\n validation: {\n requiredMessage: \"You must set a positive price\",\n min: 0\n }\n },\n images: {\n type: \"array\",\n name: \"Images\",\n ui: { hideFromCollection: true },\n of: {\n type: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n },\n related_products: {\n type: \"array\",\n name: \"Related products\",\n description: \"Products related to this one\",\n of: {\n type: \"reference\",\n path: \"products\"\n }\n },\n metadata: {\n name: \"Metadata\",\n description: \"This is an example of a map property\",\n type: \"map\",\n keyValue: true\n },\n added_on: {\n type: \"date\",\n name: \"Added on\",\n autoValue: \"on_create\"\n }\n }\n} as unknown as EntityCollection;\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const blogCollectionTemplate = {\n slug: \"blog\",\n table: \"blog\",\n name: \"Blog\",\n singularName: \"Blog entry\",\n icon: \"FileText\",\n description: \"A collection of blog entries\",\n defaultSize: \"l\",\n properties: {\n name: {\n name: \"Name\",\n validation: { required: true },\n type: \"string\"\n },\n header_image: {\n name: \"Header image\",\n type: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n content: {\n name: \"Content\",\n description: \"Content blocks for the blog entry\",\n validation: { required: true },\n type: \"array\",\n oneOf: {\n typeField: \"type\",\n valueField: \"value\",\n properties: {\n text: {\n type: \"string\",\n name: \"Text\",\n markdown: true\n },\n quote: {\n type: \"string\",\n name: \"Quote\",\n multiline: true\n },\n images: {\n name: \"Images\",\n type: \"array\",\n of: {\n type: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n description: \"This fields allows uploading multiple images at once and reordering\"\n },\n products: {\n name: \"Products\",\n type: \"array\",\n of: {\n type: \"reference\",\n path: \"products\",\n previewProperties: [\"name\", \"main_image\"]\n }\n }\n },\n propertiesOrder: [\"text\", \"quote\", \"images\", \"products\"]\n }\n },\n created_on: {\n name: \"Created on\",\n type: \"date\",\n autoValue: \"on_create\"\n },\n status: {\n name: \"Status\",\n validation: { required: true },\n type: \"string\",\n enum: {\n published: {\n id: \"published\",\n label: \"Published\"\n },\n draft: \"Draft\"\n },\n defaultValue: \"draft\"\n },\n publish_date: {\n name: \"Publish date\",\n type: \"date\",\n clearable: true\n },\n reviewed: {\n name: \"Reviewed\",\n type: \"boolean\"\n },\n tags: {\n name: \"Tags\",\n description: \"Example of generic array\",\n type: \"array\",\n of: {\n type: \"string\",\n previewAsTag: true\n }\n }\n }\n} as unknown as EntityCollection;\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const usersCollectionTemplate = {\n slug: \"users\",\n table: \"users\",\n name: \"Users\",\n singularName: \"User\",\n description: \"Registered users in the app/web\",\n icon: \"User\",\n properties: {\n displayName: {\n name: \"Display name\",\n type: \"string\"\n },\n email: {\n name: \"Email\",\n type: \"string\",\n email: true\n },\n emailVerified: {\n name: \"Email verified\",\n type: \"boolean\"\n },\n phone: {\n name: \"Phone\",\n type: \"string\"\n },\n favourite_products: {\n name: \"Favourite products\",\n type: \"array\",\n of: {\n type: \"reference\",\n path: \"products\"\n }\n },\n photoURL: {\n name: \"Photo URL\",\n type: \"string\",\n url: \"image\"\n }\n }\n} as unknown as EntityCollection;\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const pagesCollectionTemplate = {\n slug: \"pages\",\n table: \"pages\",\n name: \"Pages\",\n singularName: \"Page\",\n icon: \"File\",\n description: \"List of website pages that can be edited here\",\n properties: {\n title: {\n type: \"string\",\n name: \"Page Title\",\n validation: { required: true }\n },\n slug: {\n type: \"string\",\n name: \"URL Slug\",\n validation: {\n required: true,\n unique: true,\n matches: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\",\n matchesMessage: \"Must be lowercase, alphanumeric, and hyphenated\"\n }\n },\n hero_section: {\n type: \"map\",\n name: \"Hero Section\",\n properties: {\n headline: {\n type: \"string\",\n name: \"Headline\",\n validation: { required: true }\n },\n subhead: {\n type: \"string\",\n name: \"Subheadline\"\n },\n background_image: {\n type: \"string\",\n name: \"Background Image\",\n storage: {\n storagePath: \"page_hero/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n call_to_action: {\n type: \"string\",\n name: \"Call to Action\"\n },\n call_to_action_link: {\n type: \"string\",\n name: \"CTA Link\",\n url: true\n }\n }\n },\n content: {\n type: \"array\",\n name: \"Content\",\n oneOf: {\n properties: {\n section: {\n type: \"map\",\n name: \"Section\",\n properties: {\n title: {\n type: \"string\",\n name: \"Section Title\",\n validation: { required: true }\n },\n content: {\n type: \"string\",\n name: \"Section Content\",\n markdown: true\n },\n image: {\n type: \"string\",\n name: \"Section Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n link: {\n type: \"string\",\n name: \"Section Link\",\n url: true\n }\n }\n },\n image: {\n type: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n slider: {\n type: \"array\",\n name: \"Slider\",\n of: {\n type: \"map\",\n properties: {\n title: {\n type: \"string\",\n name: \"Title\",\n validation: { required: true }\n },\n image: {\n type: \"string\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n }\n }\n }\n }\n }\n },\n sidebar: {\n type: \"map\",\n name: \"Sidebar\",\n properties: {\n title: {\n type: \"string\",\n name: \"Sidebar Title\",\n validation: { required: false }\n },\n content: {\n type: \"string\",\n name: \"Sidebar Content\",\n markdown: true\n }\n }\n },\n seo_metadata: {\n type: \"map\",\n name: \"SEO Metadata\",\n properties: {\n meta_title: {\n type: \"string\",\n name: \"Meta Title\"\n },\n meta_description: {\n type: \"string\",\n name: \"Meta Description\"\n },\n focus_keywords: {\n type: \"array\",\n name: \"Focus Keywords\",\n of: {\n type: \"string\"\n }\n }\n }\n },\n footer_override: {\n type: \"string\",\n name: \"Footer Override\",\n markdown: true\n },\n publish_date: {\n type: \"date\",\n name: \"Publish Date\",\n validation: { required: true }\n },\n last_updated: {\n type: \"date\",\n name: \"Last Updated\",\n autoValue: \"on_update\"\n },\n is_published: {\n type: \"boolean\",\n name: \"Is Published\",\n ui: { columnWidth: 100 },\n description: \"Should this page be live on the site?\"\n }\n }\n} as unknown as EntityCollection;\n","\nimport { AIIcon } from \"@rebasepro/core\";\nimport { useCollectionRegistryController } from \"../../_cms_internals\";\nimport React, { useState } from \"react\";\nimport { useSnackbarController } from \"@rebasepro/core\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport {\n Button,\n CircularProgress,\n IconButton,\n Menu,\n SendIcon,\n TextField,\n Tooltip,\n Typography\n} from \"@rebasepro/ui\";\nimport {\n CollectionGenerationCallback,\n CollectionGenerationApiError,\n CollectionOperation\n} from \"../../api/generateCollectionApi\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\n\nexport interface AICollectionGeneratorPopoverProps {\n /**\n * Current collection being edited (if modifying an existing collection)\n */\n existingCollection?: EntityCollection<any>;\n\n /**\n * Callback when a collection is generated or modified.\n * Includes the collection and optionally the operations that were applied.\n */\n onGenerated: (collection: EntityCollection, operations?: CollectionOperation[]) => void;\n\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection: CollectionGenerationCallback;\n\n /**\n * Optional custom trigger button. If not provided, a default AI button is used.\n */\n trigger?: React.ReactNode | any;\n\n /**\n * Size of the button\n */\n size?: \"small\" | \"medium\" | \"large\";\n\n /**\n * Whether to show the label text\n */\n showLabel?: boolean;\n\n /**\n * Optional analytics callback\n */\n onAnalyticsEvent?: (event: string, params?: object) => void;\n}\n\nexport function AICollectionGeneratorPopover({\n existingCollection,\n onGenerated,\n generateCollection,\n trigger,\n size = \"small\",\n showLabel = true,\n onAnalyticsEvent\n}: AICollectionGeneratorPopoverProps) {\n const [menuOpen, setMenuOpen] = useState(false);\n const [prompt, setPrompt] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const collectionRegistry = useCollectionRegistryController();\n const configController = useCollectionsConfigController();\n const snackbarController = useSnackbarController();\n\n const existingCollections = collectionRegistry.collections ?? [];\n\n const handleGenerate = async () => {\n if (!prompt.trim()) return;\n\n setLoading(true);\n setError(null);\n\n const mode = existingCollection ? \"modify\" : \"create\";\n onAnalyticsEvent?.(\"ai_collection_generate_start\", { mode });\n\n try {\n const collectionsContext = existingCollections.map(c => ({\n slug: c.slug,\n name: c.name,\n properties: c.properties,\n propertiesOrder: c.propertiesOrder\n }));\n\n const result = await generateCollection({\n prompt: prompt.trim(),\n existingCollections: collectionsContext.slice(0, 30),\n ...(existingCollection && {\n existingCollection: {\n slug: existingCollection.slug,\n name: existingCollection.name,\n properties: existingCollection.properties,\n propertiesOrder: existingCollection.propertiesOrder\n }\n })\n });\n\n onGenerated(result.collection, result.operations);\n setMenuOpen(false);\n setPrompt(\"\");\n onAnalyticsEvent?.(\"ai_collection_generate_success\", {\n mode,\n operationsCount: result.operations?.length\n });\n snackbarController.open({\n type: \"success\",\n message: existingCollection\n ? \"Collection updated with AI suggestions\"\n : \"Collection generated successfully\"\n });\n } catch (e) {\n console.error(\"Error generating collection:\", e);\n const errorMessage = e instanceof CollectionGenerationApiError\n ? e.message\n : \"Failed to generate collection. Please try again.\";\n setError(errorMessage);\n onAnalyticsEvent?.(\"ai_collection_generate_error\", {\n mode,\n error: errorMessage\n });\n snackbarController.open({\n type: \"error\",\n message: errorMessage\n });\n } finally {\n setLoading(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleGenerate();\n }\n };\n\n const tooltipTitle = configController?.readOnly\n ? (configController.readOnlyReason || \"Collection generation is disabled\")\n : undefined;\n\n const defaultTrigger = showLabel ? (\n <Tooltip title={tooltipTitle} asChild={true}>\n <Button\n variant=\"text\"\n size={size}\n disabled={loading || configController?.readOnly}\n startIcon={loading\n ? <CircularProgress size=\"smallest\"/>\n : <AIIcon size=\"small\"/>\n }\n >\n AI Assist\n </Button>\n </Tooltip>\n ) : (\n <Tooltip title={tooltipTitle} asChild={true}>\n <IconButton\n size={size}\n disabled={loading || configController?.readOnly}\n aria-label=\"AI Assist\"\n >\n {loading\n ? <CircularProgress size=\"smallest\"/>\n : <AIIcon size=\"small\"/>\n }\n </IconButton>\n </Tooltip>\n );\n\n return (\n <Menu\n open={menuOpen}\n onOpenChange={(open) => {\n setMenuOpen(open);\n if (!open) {\n setError(null);\n }\n }}\n trigger={trigger ?? defaultTrigger}\n >\n <div className=\"p-4 flex flex-col gap-3 min-w-[360px] max-w-[480px]\">\n <div className=\"flex items-center gap-2\">\n <AIIcon size=\"small\"/>\n <Typography variant=\"subtitle2\">\n {existingCollection ? \"Modify Collection with AI\" : \"Generate Collection with AI\"}\n </Typography>\n </div>\n\n <Typography variant=\"caption\" color=\"secondary\">\n {existingCollection\n ? \"Describe the changes you want to make to this collection.\"\n : \"Describe the collection you want to create.\"\n }\n </Typography>\n\n <TextField\n size=\"small\"\n multiline\n autoFocus\n className=\"w-full text-text-primary dark:text-text-primary-dark\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={existingCollection\n ? \"e.g., Add a thumbnail image field with storage, make price required...\"\n : \"e.g., Create a products collection with name, price, description, and category...\"\n }\n disabled={loading}\n />\n\n {error && (\n <Typography variant=\"caption\" className=\"text-red-500\">\n {error}\n </Typography>\n )}\n\n <div className=\"flex justify-end gap-2\">\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setMenuOpen(false)}\n disabled={loading}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n size=\"small\"\n onClick={handleGenerate}\n disabled={!prompt.trim() || loading}\n startIcon={loading ? <CircularProgress size=\"smallest\"/> : undefined}\n >\n {loading ? \"Generating...\" : \"Generate\"}\n </Button>\n </div>\n </div>\n </Menu>\n );\n}\n","import { AIIcon } from \"@rebasepro/core\";\n;\nimport React, { useState } from \"react\";\n;\nimport { EntityCollection } from \"@rebasepro/types\";\nimport {\n Button,\n Card,\n Chip,\n cls,\n CodeIcon,\n Container,\n FileIcon,\n FileTextIcon,\n iconSize,\n ShoppingCartIcon,\n TableIcon,\n Tooltip,\n Typography,\n UserIcon\n} from \"@rebasepro/ui\";\nimport { CollectionJsonImportDialog } from \"./CollectionJsonImportDialog\";\n\nimport { productsCollectionTemplate } from \"./templates/products_template\";\nimport { blogCollectionTemplate } from \"./templates/blog_template\";\nimport { usersCollectionTemplate } from \"./templates/users_template\";\nimport { ImportFileUpload } from \"../../_cms_internals\";\nimport { pagesCollectionTemplate } from \"./templates/pages_template\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { useCollectionEditorController } from \"../../useCollectionEditorController\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\nimport { prettifyIdentifier } from \"@rebasepro/utils\";\n\nexport function CollectionEditorWelcomeView({\n path,\n parentCollection,\n onContinue,\n existingCollectionPaths,\n generateCollection,\n onAnalyticsEvent,\n unmappedTables,\n onImportFromTable\n}: {\n path: string;\n parentCollection?: EntityCollection;\n onContinue: (importData?: object[], propertiesOrder?: string[]) => void;\n existingCollectionPaths?: string[];\n generateCollection?: CollectionGenerationCallback;\n onAnalyticsEvent?: (event: string, params?: object) => void;\n unmappedTables?: string[];\n onImportFromTable?: (tableName: string) => void;\n}) {\n\n const { pathSuggestions } = useCollectionEditorController();\n\n const filteredSuggestions = (pathSuggestions ?? []).filter(s => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === s.trim().toLowerCase()));\n\n const {\n values,\n setFieldValue,\n setValues,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [jsonImportOpen, setJsonImportOpen] = useState(false);\n const [importingTable, setImportingTable] = useState<string | null>(null);\n\n // Filter unmapped tables that aren't already mapped\n const filteredUnmappedTables = (unmappedTables ?? []).filter(\n t => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === t.trim().toLowerCase())\n );\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div\n className=\"flex flex-row py-2 pt-3 items-center\">\n <Typography variant={\"h4\"} className={\"grow\"}>\n New collection\n </Typography>\n </div>\n\n {parentCollection && <Chip colorScheme={\"teal\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n {filteredUnmappedTables.length > 0 && <div className={\"my-2\"}>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Import from an existing database table:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {filteredUnmappedTables.map((tableName) => (\n <Chip key={tableName}\n colorScheme={\"purple\"}\n onClick={() => {\n if (onImportFromTable) {\n setImportingTable(tableName);\n onImportFromTable(tableName);\n } else {\n // Fallback: just set path/name like pathSuggestions\n setFieldValue(\"name\", prettifyIdentifier(tableName));\n setFieldValue(\"id\", tableName);\n setFieldValue(\"path\", tableName);\n onContinue();\n }\n }}\n size=\"small\">\n <TableIcon size={iconSize.smallest}/>\n {importingTable === tableName ? \"Loading...\" : tableName}\n </Chip>\n ))}\n\n </div>\n\n </div>}\n\n {(filteredSuggestions ?? []).length > 0 && <div className={\"my-2\"}>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Use one of the existing paths in your database:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {filteredSuggestions?.map((suggestion, index) => (\n <Chip key={suggestion}\n colorScheme={\"cyan\"}\n onClick={() => {\n setFieldValue(\"name\", prettifyIdentifier(suggestion));\n setFieldValue(\"id\", suggestion);\n setFieldValue(\"path\", suggestion);\n setFieldValue(\"properties\", undefined);\n onContinue();\n }}\n size=\"small\">\n {suggestion}\n </Chip>\n ))}\n\n </div>\n\n </div>}\n <div className=\"flex flex-row gap-8\">\n\n {generateCollection && (\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Describe your collection to AI:\n </Typography>\n\n <AICollectionGeneratorPopover\n onGenerated={(generatedCollection) => {\n setValues(generatedCollection);\n onContinue();\n }}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n trigger={\n <Button\n variant=\"filled\"\n color=\"neutral\"\n startIcon={<AIIcon size=\"small\"/>}\n >\n Generate with AI\n </Button>\n }\n />\n </div>\n )}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create from JSON configuration:\n </Typography>\n\n <Button\n variant=\"filled\"\n color=\"neutral\"\n onClick={() => setJsonImportOpen(true)}\n startIcon={<CodeIcon size={iconSize.small}/>}\n >\n Paste JSON Configuration\n </Button>\n\n <CollectionJsonImportDialog\n open={jsonImportOpen}\n onClose={() => setJsonImportOpen(false)}\n onImport={(collection) => {\n setValues(collection);\n onContinue();\n }}\n />\n </div>\n\n </div>\n\n {!parentCollection && <div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create a collection from a file (csv, json, xls, xslx...)\n </Typography>\n\n <ImportFileUpload onDataAdded={(data, propertiesOrder) => onContinue(data, propertiesOrder)}/>\n\n </div>}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Select a template:\n </Typography>\n\n <div className={\"flex gap-2\"}>\n <TemplateButton title={\"Products\"}\n subtitle={\"A collection of products with images, prices and stock\"}\n icon={<ShoppingCartIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(productsCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Users\"}\n subtitle={\"A collection of users with emails, names and roles\"}\n icon={<UserIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(usersCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Blog posts\"}\n subtitle={\"A collection of blog posts with images, authors and complex content\"}\n icon={<FileTextIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(blogCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Pages\"}\n subtitle={\"A collection of pages with images, authors and complex content\"}\n icon={<FileIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\n }}/>\n </div>\n\n </div>\n\n </Container>\n </div>\n );\n}\n\nexport function TemplateButton({\n title,\n subtitle,\n icon,\n onClick\n}: {\n title: string,\n icon: React.ReactNode | any,\n subtitle: string,\n onClick?: () => void\n}) {\n\n return (\n <Tooltip title={subtitle}\n asChild={true}>\n <Card\n onClick={onClick}\n className={cls(\n \"my-2 rounded-md border px-4 py-3 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-text-secondary dark:text-text-secondary-dark\",\n \"hover:border-primary-dark hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n \"border-surface-400 dark:border-surface-600 \"\n )}\n >\n {icon}\n <div className={\"flex flex-col items-start\"}>\n\n <Typography variant={\"subtitle2\"}>\n {title}\n </Typography>\n\n </div>\n </Card>\n </Tooltip>\n );\n\n}\n","import { DataNewPropertiesMapping } from \"../../../../data_import/components/DataNewPropertiesMapping\";\nimport { getInferenceType } from \"../../../../data_import/utils/get_import_inference_type\";\nimport { ImportConfig } from \"../../../../data_import/types\";\nimport { ImportNewPropertyFieldPreview } from \"../../../../data_import/components/ImportNewPropertyFieldPreview\";\nimport { getIn, useFormex } from \"@rebasepro/formex\";\n\nimport { getFieldConfig, getFieldId } from \"../../../../components/field_configs\";\nimport { PropertyConfigBadge } from \"../../../../components/PropertyConfigBadge\";\nimport { EntityCollection, Properties, Property, PropertyConfig } from \"@rebasepro/types\";\nimport { cls, Container, Select, SelectItem, Tooltip, Typography } from \"@rebasepro/ui\";\nimport React, { useState } from \"react\";\nimport { OnPropertyChangedParams, PropertyFormDialog, PropertyWithId } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { updatePropertyFromWidget } from \"../utils/update_property_for_widget\";\nimport { supportedFields } from \"../utils/supported_fields\";\nimport { buildPropertyFromData } from \"@rebasepro/schema-inference\";\n\nexport function CollectionEditorImportMapping({\n importConfig,\n propertyConfigs\n}:\n {\n importConfig: ImportConfig,\n propertyConfigs: Record<string, PropertyConfig>,\n }) {\n\n // const {\n // values,\n // setFieldValue,\n // setFieldTouched,\n // setValues,\n // submitCount\n // } = useFormex();\n\n const {\n setFieldValue,\n setFieldTouched,\n values\n } = useFormex<EntityCollection>();\n const [selectedProperty, setSelectedProperty] = useState<PropertyWithId | undefined>(undefined);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n const propertyKey = selectedProperty ? selectedProperty.id : undefined;\n const property = selectedProperty || undefined;\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // setSelectedProperty(property);\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"];\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n }\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n // replace previousId with id in headersMapping\n const newHeadersMapping = { ...importConfig.headersMapping };\n Object.keys(newHeadersMapping).forEach((key) => {\n if (newHeadersMapping[key] === previousId) {\n newHeadersMapping[key] = id ?? \"\";\n }\n });\n importConfig.setHeadersMapping(newHeadersMapping);\n\n // if (id) {\n // setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n // setSelectedPropertyKey(id);\n // }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n };\n const onPropertyTypeChanged = async ({\n id,\n importKey,\n property,\n namespace\n }: OnPropertyChangedParams & {\n importKey: string\n }) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // we try to infer the rest of the properties of a property, from the type and the data\n const propertyData = importConfig.importData.map((d) => getIn(d, importKey));\n const inferredNewProperty = {\n ...buildPropertyFromData(propertyData, property, getInferenceType)\n };\n\n if (propertyPath) {\n if (inferredNewProperty) {\n setFieldValue(propertyPath, inferredNewProperty, false);\n } else {\n setFieldValue(propertyPath, property, false);\n }\n setFieldTouched(propertyPath, true, false);\n }\n };\n\n return (\n\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"6xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <Typography variant=\"h6\" className={\"my-4 ml-3.5\"}>Data property mapping</Typography>\n\n <DataNewPropertiesMapping importConfig={importConfig}\n destinationProperties={values.properties as Properties}\n buildPropertyView={({\n property,\n propertyKey,\n importKey,\n isIdColumn\n }) => {\n if (isIdColumn) {\n return <Typography> This column will be used as ID</Typography>\n }\n\n return <ImportNewPropertyFieldPreview\n property={property}\n propertyKey={propertyKey}\n onPropertyNameChanged={(propertyKey: string, value: string) => setFieldValue(`properties.${propertyKey}.name`, value, false)}\n onEditClick={() => {\n if (!propertyKey || !property) return;\n setSelectedProperty({\n ...property,\n id: propertyKey\n });\n }}\n propertyTypeView={<PropertySelect property={property}\n disabled={false}\n onPropertyChanged={(props) => onPropertyTypeChanged({\n ...props,\n importKey\n })}\n propertyKey={propertyKey}\n propertyConfigs={propertyConfigs}/>}\n />;\n }}/>\n </Container>\n\n <PropertyFormDialog\n open={selectedProperty !== undefined}\n propertyKey={propertyKey}\n property={property}\n inArray={false}\n autoUpdateId={false}\n onPropertyChanged={onPropertyChanged}\n allowDataInference={false}\n\n onOkClicked={() => {\n setSelectedProperty(undefined);\n }}\n onCancel={() => {\n setSelectedProperty(undefined);\n }}\n autoOpenTypeSelect={false}\n existingProperty={false}\n propertyConfigs={propertyConfigs}/>\n\n <div style={{ height: \"52px\" }}/>\n </div>\n );\n\n}\n\nfunction PropertySelect({\n property,\n onPropertyChanged,\n propertyKey,\n propertyConfigs,\n disabled\n}: {\n property: Property | null,\n propertyKey: string | null,\n onPropertyChanged: ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n disabled?: boolean\n}) {\n\n const fieldId = property ? getFieldId(property) : null;\n const widget = property ? getFieldConfig(property, propertyConfigs) : null;\n\n const [selectOpen, setSelectOpen] = useState(false);\n\n return <Tooltip title={property && widget ? `${widget?.name} - ${property.type}` : undefined}\n open={selectOpen ? false : undefined}>\n <Select\n open={selectOpen}\n onOpenChange={setSelectOpen}\n invisible={true}\n className={\"w-full\"}\n disabled={disabled}\n error={!widget}\n fullWidth={true}\n value={fieldId ?? \"\"}\n placeholder={\"Select a property widget\"}\n position={\"item-aligned\"}\n renderValue={(value) => {\n if (!widget) return null;\n return <PropertyConfigBadge propertyConfig={widget}/>\n }}\n onValueChange={(newSelectedWidgetId) => {\n const newProperty = updatePropertyFromWidget(property, newSelectedWidgetId, propertyConfigs)\n if (!propertyKey) return;\n onPropertyChanged({\n id: propertyKey,\n property: newProperty,\n previousId: propertyKey,\n namespace: undefined\n });\n }}>\n {Object.entries(supportedFields).map(([key, widget]) => {\n return <ImportPropertySelectItem\n key={key}\n value={key}\n optionDisabled={false}\n propertyConfig={widget}\n existing={false}/>;\n })\n }\n </Select>\n </Tooltip>;\n}\n\nexport interface ImportPropertySelectItemProps {\n value: string;\n optionDisabled: boolean;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function ImportPropertySelectItem({ value, optionDisabled, propertyConfig, existing }: ImportPropertySelectItemProps) {\n return <SelectItem value={value}\n disabled={optionDisabled}\n className={\"flex flex-row items-center\"}>\n <div\n className={cls(\n \"flex flex-row items-center text-base min-h-[48px]\",\n optionDisabled ? \"w-full\" : \"\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <div>\n <div>{propertyConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"disabled\"}\n className={\"max-w-sm\"}>\n {existing && optionDisabled ? \"You can only switch to widgets that use the same data type\" : propertyConfig.description}\n </Typography>\n </div>\n </div>\n </SelectItem>\n}\n","import { useCollectionRegistryController } from \"../../../_cms_internals\";\nimport { convertDataToEntity, ImportConfig } from \"../../../_cms_internals\";\nimport { useAuthController } from \"@rebasepro/core\";\nimport { EntityCollectionTable } from \"../../../../components/EntityCollectionTable/EntityCollectionTable\";\nimport { useSelectionController } from \"../../../../components/EntityCollectionView/useSelectionController\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\nimport { Properties } from \"@rebasepro/types\";\nimport { useEffect, useState } from \"react\";\nimport { Typography } from \"@rebasepro/ui\";\n\nexport function CollectionEditorImportDataPreview({\n importConfig,\n properties,\n propertiesOrder\n}: {\n importConfig: ImportConfig,\n properties: Properties,\n propertiesOrder: string[]\n}) {\n\n const authController = useAuthController();\n const registry = useCollectionRegistryController();\n const [loading, setLoading] = useState<boolean>(false);\n\n async function loadEntities() {\n const mappedData = importConfig.importData.map(d => convertDataToEntity(authController,\n registry,\n d,\n importConfig.idColumn,\n importConfig.headersMapping,\n properties,\n \"TEMP_PATH\",\n importConfig.defaultValues));\n importConfig.setEntities(mappedData);\n }\n\n useEffect(() => {\n loadEntities().finally(() => setLoading(false));\n }, []);\n\n const selectionController = useSelectionController();\n if (loading)\n return <CircularProgressCenter/>\n\n return <EntityCollectionTable\n title={<div>\n <Typography variant={\"subtitle2\"}>Imported data preview</Typography>\n <Typography variant={\"caption\"}>Entities with the same id will be overwritten</Typography>\n </div>}\n tableController={{\n data: importConfig.entities,\n dataLoading: false,\n noMoreToLoad: false\n }}\n endAdornment={<div className={\"h-12\"}/>}\n filterable={false}\n sortable={false}\n selectionController={selectionController}\n displayedColumnIds={propertiesOrder.map(p => ({\n key: p,\n disabled: false\n }))}\n openEntityMode={\"side_panel\"}\n properties={properties}\n enablePopupIcon={false}/>\n\n}\n","import { Properties } from \"@rebasepro/types\";\nimport { ImportConfig } from \"../../../_cms_internals\";\nimport { slugify } from \"@rebasepro/utils\";\n\nexport function cleanPropertiesFromImport(properties: Properties, parentSlug = \"\"): {\n headersMapping: ImportConfig[\"headersMapping\"],\n properties: Properties,\n idColumn?: ImportConfig[\"idColumn\"],\n} {\n\n const result = Object.keys(properties).reduce((acc, key) => {\n const property = properties[key];\n const slug = slugify(key);\n const fullSlug = parentSlug ? `${parentSlug}.${slug}` : slug;\n\n if (property.type === \"map\" && property.properties) {\n const slugifiedResult = cleanPropertiesFromImport(property.properties as Properties, fullSlug);\n return {\n headersMapping: { ...acc.headersMapping,\n[key]: fullSlug },\n properties: {\n ...acc.properties,\n [slug]: {\n ...property,\n properties: slugifiedResult.properties,\n propertiesOrder: Object.keys(slugifiedResult.properties)\n }\n }\n }\n }\n\n const updatedProperties = {\n ...acc.properties,\n [slug]: property\n } as Properties;\n\n const headersMapping = { ...acc.headersMapping,\n[key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties\n }\n }, { headersMapping: {},\nproperties: {} });\n\n const firstKey = Object.keys(result.headersMapping)?.[0];\n let idColumn: string | undefined;\n if (firstKey?.includes(\"id\") || firstKey?.includes(\"key\")) {\n idColumn = firstKey;\n }\n\n return {\n ...result,\n idColumn\n };\n}\n","\nimport { EntityCollection } from \"@rebasepro/types\";\nimport React, { useState, useEffect } from \"react\";\n\n/**\n * Validates and double-quotes a SQL identifier to prevent injection.\n * Only allows safe Postgres identifiers (letters, digits, underscores).\n * Throws if the identifier contains unsafe characters.\n */\nfunction sanitizeSqlIdentifier(name: string): string {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw new Error(`Invalid SQL identifier: \"${name}\". Only letters, digits, and underscores are allowed.`);\n }\n return `\"${name}\"`;\n}\nimport {\n Button,\n Chip,\n CircularProgress,\n cls,\n Container,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n iconSize,\n KeyIcon,\n MultiSelect,\n MultiSelectItem,\n Paper,\n Select,\n SelectItem,\n TextField,\n Tooltip,\n Trash2Icon,\n Typography\n} from \"@rebasepro/ui\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { useRebaseContext } from \"@rebasepro/core\";\n\n/** Postgres RLS policy shape — defined inline to avoid depending on @rebasepro/studio */\nexport interface PostgresPolicy {\n policyname: string;\n tablename: string;\n permissive: \"PERMISSIVE\" | \"RESTRICTIVE\";\n roles: string[];\n cmd: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\";\n qual: string | null;\n with_check: string | null;\n status?: \"live\" | \"code_only\" | \"both\";\n}\n\ninterface SecurityRule {\n name: string;\n operation?: string;\n mode?: string;\n using?: string;\n withCheck?: string;\n roles?: string[];\n}\n\ntype CollectionWithSecurity = EntityCollection & {\n securityRules?: SecurityRule[];\n id?: string;\n table?: string;\n alias?: string;\n};\n\nexport function CollectionRLSTab() {\n const { values, setFieldValue } = useFormex<CollectionWithSecurity>();\n const [editingPolicy, setEditingPolicy] = useState<PostgresPolicy | \"new\" | null>(null);\n\n const rules: SecurityRule[] = values.securityRules || [];\n\n const { databaseAdmin } = useRebaseContext();\n const [dbPolicies, setDbPolicies] = useState<PostgresPolicy[]>([]);\n const [isLoadingDb, setIsLoadingDb] = useState(false);\n\n useEffect(() => {\n const fetchLivePolicies = async () => {\n const tableName = values.id || values.table || values.alias;\n if (!tableName || !databaseAdmin?.executeSql) return;\n\n setIsLoadingDb(true);\n try {\n const safeTableName = sanitizeSqlIdentifier(tableName);\n // safeTableName is validated to be [a-zA-Z_][a-zA-Z0-9_]* — safe for string literal\n const quotedName = safeTableName.slice(1, -1); // strip double quotes to get raw name\n const sql = `\n SELECT policyname, permissive, roles, cmd, qual, with_check\n FROM pg_policies\n WHERE tablename = '${quotedName}' AND schemaname NOT IN ('information_schema', 'pg_catalog');\n `;\n const result = await databaseAdmin.executeSql(sql);\n const extractRows = (res: unknown): Record<string, unknown>[] => {\n if (res && typeof res === \"object\" && \"rows\" in res && Array.isArray((res as { rows: Record<string, unknown>[] }).rows)) {\n return (res as { rows: Record<string, unknown>[] }).rows;\n }\n if (Array.isArray(res)) return res as Record<string, unknown>[];\n return [];\n };\n const pRows = extractRows(result);\n const policies: PostgresPolicy[] = pRows.map((p: any) => {\n let parsedRoles: string[] = [];\n const r = p.roles || p.ROLES;\n if (Array.isArray(r)) {\n parsedRoles = r as string[];\n } else if (typeof r === \"string\") {\n parsedRoles = r.replace(/^{|}$/g, \"\").split(\",\").map((s: string) => s.trim());\n }\n return {\n policyname: (p.policyname || p.POLICYNAME || \"\") as string,\n tablename: tableName,\n permissive: (p.permissive || p.PERMISSIVE || \"PERMISSIVE\") as \"PERMISSIVE\" | \"RESTRICTIVE\",\n roles: parsedRoles,\n cmd: (p.cmd || p.CMD || \"ALL\") as \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\",\n qual: (p.qual || p.QUAL || null) as string | null,\n with_check: (p.with_check || p.WITH_CHECK || null) as string | null\n };\n });\n setDbPolicies(policies);\n } catch (e) {\n console.error(\"Failed to fetch DB policies\", e);\n } finally {\n setIsLoadingDb(false);\n }\n };\n fetchLivePolicies();\n }, [databaseAdmin, values.id, values.table, values.alias]);\n\n const unmappedPolicies = dbPolicies.filter(dp => !rules.some(r => r.name === dp.policyname));\n\n const handleSave = async (newPolicy: Partial<PostgresPolicy>) => {\n const rule: SecurityRule = {\n name: newPolicy.policyname ?? \"\",\n operation: newPolicy.cmd?.toLowerCase(),\n mode: newPolicy.permissive?.toLowerCase(),\n using: newPolicy.qual || undefined,\n withCheck: newPolicy.with_check || undefined,\n roles: newPolicy.roles\n };\n\n let newRules;\n if (editingPolicy === \"new\") {\n newRules = [...rules, rule];\n } else {\n newRules = rules.map((r: SecurityRule) => r.name === (editingPolicy as PostgresPolicy).policyname ? rule : r);\n }\n setFieldValue(\"securityRules\", newRules);\n setEditingPolicy(null);\n };\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n <div className=\"w-full flex flex-col\">\n <div className=\"flex items-center justify-between mb-8\">\n <Typography variant=\"h5\">Row Level Security</Typography>\n <Button variant=\"filled\" color=\"neutral\" onClick={() => setEditingPolicy(\"new\")}>\n CREATE POLICY\n </Button>\n </div>\n\n {rules.length === 0 ? (\n <div className=\"flex-grow flex items-center justify-center text-text-disabled py-12\">\n <Typography variant=\"body2\">No RLS policies defined for this collection.</Typography>\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {rules.map((rule: SecurityRule) => (\n <Paper key={rule.name}\n className={\"p-4 border border-transparent hover:border-surface-200 dark:hover:border-surface-700 rounded-lg flex flex-col sm:flex-row sm:items-center justify-between gap-4 transition-colors bg-white dark:bg-surface-800 shadow-sm\"}>\n <div className=\"flex flex-col gap-1.5 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <KeyIcon size={iconSize.smallest} className=\"text-text-disabled dark:text-text-disabled-dark shrink-0\"/>\n <Typography variant=\"subtitle2\" className=\"truncate\">{rule.name}</Typography>\n </div>\n <div className=\"flex gap-2 text-xs pl-6 overflow-x-auto hide-scrollbar\">\n <Chip size=\"small\" className=\"bg-surface-100 dark:bg-surface-900 text-text-secondary border-none\">Action: {rule.operation || \"ALL\"}</Chip>\n <Chip size=\"small\" className=\"bg-surface-100 dark:bg-surface-900 text-text-secondary border-none\">Roles: {Array.isArray(rule.roles) ? rule.roles.join(\", \") : rule.roles}</Chip>\n </div>\n </div>\n <div className=\"flex items-center gap-1 sm:gap-2 shrink-0\">\n <Button size=\"small\" variant=\"text\" onClick={() => setEditingPolicy({\n policyname: rule.name,\n tablename: values.id || values.table || values.alias || \"your_table\",\n permissive: (rule.mode || \"permissive\").toUpperCase() as PostgresPolicy[\"permissive\"],\n cmd: (rule.operation || \"ALL\").toUpperCase() as PostgresPolicy[\"cmd\"],\n roles: rule.roles || [\"public\"],\n qual: rule.using || null,\n with_check: rule.withCheck || null\n })}>\n EDIT\n </Button>\n <IconButton size=\"small\" onClick={() => {\n setFieldValue(\"securityRules\", rules.filter((r: SecurityRule) => r.name !== rule.name));\n }}>\n <Trash2Icon size={iconSize.smallest} className=\"text-text-secondary dark:text-text-secondary-dark hover:text-red-500 dark:hover:text-red-500 transition-colors\"/>\n </IconButton>\n </div>\n </Paper>\n ))}\n </div>\n )}\n\n {isLoadingDb && unmappedPolicies.length === 0 && (\n <div className=\"flex justify-center mt-8\">\n <CircularProgress size=\"small\"/>\n </div>\n )}\n\n {!isLoadingDb && unmappedPolicies.length > 0 && (\n <div className=\"mt-12 flex flex-col gap-4\">\n <Typography variant=\"h6\" className=\"text-text-secondary\">Unmapped Database Policies</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary opacity-80 -mt-2\">\n These policies exist in your Postgres database but are not mapped to this collection's codebase configuration.\n </Typography>\n <div className=\"flex flex-col gap-3\">\n {unmappedPolicies.map(dp => (\n <Paper key={dp.policyname}\n className={\"p-4 border border-orange-200 dark:border-orange-900/50 bg-orange-50/50 dark:bg-orange-900/10 rounded-lg flex flex-col sm:flex-row sm:items-center justify-between gap-4 transition-colors\"}>\n <div className=\"flex flex-col gap-1.5 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <KeyIcon size={iconSize.smallest} className=\"text-orange-500 shrink-0\"/>\n <Typography variant=\"subtitle2\" className=\"truncate\">{dp.policyname}</Typography>\n <Tooltip title=\"This policy is live in the database but missing from your codebase schema.\">\n <div className=\"px-1.5 py-0.5 rounded text-[10px] uppercase bg-orange-500/10 text-orange-600 border border-orange-500/20 shrink-0\">\n DB Only\n </div>\n </Tooltip>\n </div>\n <div className=\"flex gap-2 text-xs pl-6 overflow-x-auto hide-scrollbar\">\n <Chip size=\"small\" className=\"bg-white dark:bg-surface-900 text-text-secondary border-none\">Action: {dp.cmd || \"ALL\"}</Chip>\n <Chip size=\"small\" className=\"bg-white dark:bg-surface-900 text-text-secondary border-none\">Roles: {Array.isArray(dp.roles) ? dp.roles.join(\", \") : dp.roles}</Chip>\n </div>\n </div>\n <div className=\"flex items-center gap-1 sm:gap-2 shrink-0\">\n <Button size=\"small\" variant=\"outlined\" color=\"primary\" onClick={() => {\n const rule: SecurityRule = {\n name: dp.policyname,\n operation: dp.cmd?.toLowerCase(),\n mode: dp.permissive?.toLowerCase(),\n using: dp.qual || undefined,\n withCheck: dp.with_check || undefined,\n roles: dp.roles\n };\n setFieldValue(\"securityRules\", [...rules, rule]);\n }}>\n Import to codebase\n </Button>\n </div>\n </Paper>\n ))}\n </div>\n </div>\n )}\n </div>\n <Dialog open={!!editingPolicy} onOpenChange={(open) => !open && setEditingPolicy(null)} maxWidth=\"4xl\">\n {editingPolicy && (\n <InlinePolicyEditor\n policy={editingPolicy === \"new\" ? undefined : editingPolicy}\n table={values.id || values.table || values.alias || \"your_table\"}\n onSave={handleSave}\n onCancel={() => setEditingPolicy(null)}\n />\n )}\n </Dialog>\n </Container>\n </div>\n );\n}\n\n// ─── Inline Policy Editor (no Monaco dependency) ────────────────────\n\ntype PolicyCommand = \"ALL\" | \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\";\nconst COMMAND_OPTIONS: PolicyCommand[] = [\"ALL\", \"SELECT\", \"INSERT\", \"UPDATE\", \"DELETE\"];\nconst ROLE_OPTIONS = [\"public\", \"authenticated\", \"anon\", \"admin\"];\n\nfunction InlinePolicyEditor({\n policy,\n table,\n onSave,\n onCancel\n}: {\n policy?: PostgresPolicy;\n table: string;\n onSave: (policyData: Partial<PostgresPolicy>) => void;\n onCancel: () => void;\n}) {\n const [name, setName] = useState(policy?.policyname || \"\");\n const [behavior, setBehavior] = useState<\"PERMISSIVE\" | \"RESTRICTIVE\">(policy?.permissive || \"PERMISSIVE\");\n const [command, setCommand] = useState<PolicyCommand>((policy?.cmd as PolicyCommand) || \"ALL\");\n const [roles, setRoles] = useState<string[]>(\n policy?.roles ? (Array.isArray(policy.roles) ? policy.roles : [policy.roles]) : [\"public\"]\n );\n const [usingExpr, setUsingExpr] = useState(policy?.qual || \"\");\n const [checkExpr, setCheckExpr] = useState(policy?.with_check || \"\");\n\n const showCheck = command === \"ALL\" || command === \"INSERT\" || command === \"UPDATE\";\n\n return (\n <>\n <DialogTitle variant=\"h6\">\n {policy ? \"Edit Policy\" : \"Create Policy\"}\n <div className=\"text-sm font-normal text-text-secondary dark:text-text-secondary-dark tracking-wide mt-1\">\n Define RLS rules for <span className=\"font-mono text-primary bg-primary-bg dark:bg-primary-bg-dark px-1 py-0.5 rounded\">public.{table}</span>\n </div>\n </DialogTitle>\n <DialogContent className=\"p-4 md:p-6 border-t dark:border-surface-700 bg-surface-50 dark:bg-surface-800\" includeMargin={false}>\n <Paper className={cls(\"p-4 md:p-6 flex flex-col gap-6 bg-white dark:bg-surface-800 border-none sm:border-solid rounded-none sm:rounded-xl\", defaultBorderMixin)}>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Policy Name</Typography>\n <TextField value={name} onChange={(e: any) => setName(e.target.value)} placeholder=\"e.g. allow_read_all\"/>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Behavior</Typography>\n <Select value={behavior} onValueChange={(val: string) => setBehavior(val as \"PERMISSIVE\" | \"RESTRICTIVE\")} position=\"item-aligned\">\n <SelectItem value=\"PERMISSIVE\">Permissive</SelectItem>\n <SelectItem value=\"RESTRICTIVE\">Restrictive</SelectItem>\n </Select>\n </div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Command</Typography>\n <div className=\"flex flex-wrap gap-1.5\">\n {COMMAND_OPTIONS.map(cmd => (\n <Button key={cmd} size=\"small\" variant={command === cmd ? \"filled\" : \"text\"} color=\"neutral\" onClick={() => setCommand(cmd)}>\n {cmd}\n </Button>\n ))}\n </div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Target Roles</Typography>\n <MultiSelect size=\"small\" value={roles} onValueChange={setRoles} placeholder=\"Select roles\">\n {ROLE_OPTIONS.map(r => <MultiSelectItem key={r} value={r}>{r}</MultiSelectItem>)}\n </MultiSelect>\n </div>\n {command !== \"INSERT\" && (\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">USING expression</Typography>\n <TextField value={usingExpr} onChange={(e: any) => setUsingExpr(e.target.value)} placeholder=\"e.g. auth.uid() = user_id\"/>\n </div>\n )}\n {showCheck && (\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">WITH CHECK expression</Typography>\n <TextField value={checkExpr} onChange={(e: any) => setCheckExpr(e.target.value)} placeholder=\"e.g. auth.uid() = user_id\"/>\n </div>\n )}\n </Paper>\n </DialogContent>\n <DialogActions>\n <Button size=\"small\" variant=\"text\" color=\"neutral\" onClick={onCancel}>Cancel</Button>\n <Button size=\"small\" variant=\"filled\" color=\"primary\" disabled={!name}\n onClick={() => onSave({ policyname: name,\npermissive: behavior,\ncmd: command,\nroles,\nqual: usingExpr,\nwith_check: showCheck ? checkExpr : null })}\n >Save</Button>\n </DialogActions>\n </>\n );\n}\n","import { EntityCollection, Property, StringProperty, NumberProperty, ArrayProperty, TableColumnInfo, TableMetadata } from \"@rebasepro/types\";\nimport { prettifyIdentifier } from \"@rebasepro/utils\";\n\n/**\n * Maps a PostgreSQL column data type to a Rebase property type.\n */\nfunction pgTypeToRebaseProperty(column: TableColumnInfo): Property | null {\n const {\n column_name,\n data_type,\n udt_name,\n is_nullable,\n column_default,\n enum_values\n } = column;\n\n const required = is_nullable === \"NO\";\n const prettifiedName = prettifyIdentifier(column_name);\n\n // Detect if this column is a primary key (auto-generated id)\n const isAutoId = column_default != null && (\n column_default.includes(\"nextval\") ||\n column_default.includes(\"gen_random_uuid\") ||\n column_default.includes(\"uuid_generate\") ||\n column_default.includes(\"identity\")\n );\n\n // USER-DEFINED = PostgreSQL enums\n if (data_type === \"USER-DEFINED\" && enum_values && enum_values.length > 0) {\n return {\n type: \"string\",\n name: prettifiedName,\n enum: enum_values.map((v: string) => ({ id: v,\nlabel: prettifyIdentifier(v) })),\n validation: required ? { required: true } : undefined\n } as StringProperty;\n }\n\n const dt = data_type.toLowerCase();\n switch (dt) {\n case \"character varying\":\n case \"varchar\":\n case \"text\":\n case \"char\":\n case \"character\":\n case \"citext\": {\n let colType: \"varchar\" | \"text\" | \"char\" = \"varchar\";\n if (dt === \"text\" || dt === \"citext\") colType = \"text\";\n if (dt === \"char\" || dt === \"character\") colType = \"char\";\n const prop: StringProperty = {\n type: \"string\",\n name: prettifiedName,\n columnType: colType,\n validation: required ? { required: true } : undefined\n };\n if (isAutoId) {\n prop.isId = \"manual\";\n }\n return prop;\n }\n\n case \"uuid\": {\n const prop: StringProperty = {\n type: \"string\",\n name: prettifiedName,\n validation: required ? { required: true } : undefined\n };\n if (isAutoId) {\n prop.isId = \"uuid\";\n }\n return prop;\n }\n\n case \"integer\":\n case \"bigint\":\n case \"smallint\": {\n const colType = dt === \"bigint\" ? \"bigint\" : \"integer\";\n const prop: NumberProperty = {\n type: \"number\",\n name: prettifiedName,\n columnType: colType,\n validation: {\n ...(required ? { required: true } : {}),\n integer: true\n }\n };\n if (isAutoId) {\n prop.isId = \"increment\";\n }\n return prop;\n }\n\n case \"serial\":\n case \"bigserial\":\n case \"smallserial\": {\n const colType = dt === \"bigserial\" ? \"bigserial\" : \"serial\";\n return {\n type: \"number\",\n name: prettifiedName,\n columnType: colType,\n isId: \"increment\",\n validation: {\n ...(required ? { required: true } : {}),\n integer: true\n }\n } as NumberProperty;\n }\n\n case \"numeric\":\n case \"decimal\":\n case \"real\":\n case \"double precision\": {\n let colType: \"numeric\" | \"real\" | \"double precision\" = \"numeric\";\n if (dt === \"real\") colType = \"real\";\n if (dt === \"double precision\") colType = \"double precision\";\n return {\n type: \"number\",\n name: prettifiedName,\n columnType: colType,\n validation: required ? { required: true } : undefined\n };\n }\n\n case \"boolean\":\n return {\n type: \"boolean\",\n name: prettifiedName,\n validation: required ? { required: true } : undefined\n };\n\n case \"timestamp with time zone\":\n case \"timestamp without time zone\":\n case \"timestamp\":\n case \"timestamptz\":\n case \"date\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"time\": {\n let colType: \"timestamp\" | \"date\" | \"time\" = \"timestamp\";\n if (dt.startsWith(\"date\")) colType = \"date\";\n if (dt.startsWith(\"time \") || dt === \"time\") colType = \"time\";\n return {\n type: \"date\",\n name: prettifiedName,\n columnType: colType,\n validation: required ? { required: true } : undefined\n };\n }\n\n case \"jsonb\":\n case \"json\":\n return {\n type: \"map\",\n name: prettifiedName,\n columnType: dt === \"jsonb\" ? \"jsonb\" : \"json\",\n keyValue: true,\n properties: {}\n };\n\n case \"array\":\n case \"ARRAY\":\n return {\n type: \"array\",\n name: prettifiedName,\n of: { type: \"string\" }\n } as ArrayProperty;\n\n default:\n // Fallback: treat unknown types as string\n return {\n type: \"string\",\n name: prettifiedName,\n validation: required ? { required: true } : undefined\n };\n }\n}\n\n/**\n * Builds a partial EntityCollection from PostgreSQL table metadata.\n * This is used when creating a new collection from an existing database table.\n */\nexport function buildCollectionFromTableMetadata(\n tableName: string,\n metadata: TableMetadata\n): Partial<EntityCollection> {\n const properties: Record<string, Property> = {};\n const propertiesOrder: string[] = [];\n const relations: any[] = []; // In the builder/editor, target can be a string path before hydration\n const securityRules: any[] = [];\n\n // Parse columns\n for (const column of metadata.columns) {\n const property = pgTypeToRebaseProperty(column);\n if (property) {\n // Remove undefined keys so we don't output \"validation: undefined\"\n const propRecord = property as unknown as Record<string, unknown>;\n Object.keys(propRecord).forEach(key => propRecord[key] === undefined && delete propRecord[key]);\n\n properties[column.column_name] = property;\n propertiesOrder.push(column.column_name);\n }\n }\n\n // Parse Outgoing Foreign Keys -> Many-to-One / One-to-One\n if (metadata.foreignKeys) {\n for (const fk of metadata.foreignKeys) {\n const relName = fk.column_name.endsWith(\"_id\") ? fk.column_name.substring(0, fk.column_name.length - 3) : fk.column_name;\n relations.push({\n id: fk.column_name,\n relationName: relName,\n target: fk.foreign_table_name, // Will be hydrated later\n cardinality: \"one\",\n direction: \"owning\",\n localKey: fk.column_name\n });\n }\n }\n\n // Parse Incoming Junctions -> Many-to-Many\n if (metadata.junctions) {\n for (const junction of metadata.junctions) {\n const relName = junction.target_table_name; // E.g., 'roles'\n relations.push({\n id: junction.target_table_name + \"_relation\",\n relationName: relName,\n target: junction.target_table_name, // Will be hydrated later\n cardinality: \"many\",\n direction: \"owning\",\n through: {\n table: junction.junction_table_name,\n sourceColumn: junction.source_column_name,\n targetColumn: junction.target_column_name\n }\n });\n }\n }\n\n // Parse RLS Policies\n if (metadata.policies) {\n for (const policy of metadata.policies) {\n // Attempt to map typical cmds to operations.\n // Postgres cmd: SELECT, INSERT, UPDATE, DELETE, ALL\n let operations: string[] = [];\n switch (policy.cmd) {\n case \"ALL\": operations = [\"read\", \"create\", \"update\", \"delete\"]; break;\n case \"SELECT\": operations = [\"read\"]; break;\n case \"INSERT\": operations = [\"create\"]; break;\n case \"UPDATE\": operations = [\"update\"]; break;\n case \"DELETE\": operations = [\"delete\"]; break;\n }\n securityRules.push({\n name: policy.policy_name,\n operations,\n // roles is string[] e.g., [\"public\", \"authenticated\"]\n roles: policy.roles ?? [],\n qual: policy.qual,\n with_check: policy.with_check\n });\n }\n }\n\n const prettifiedName = prettifyIdentifier(tableName);\n\n return {\n name: prettifiedName,\n slug: tableName,\n table: tableName,\n properties,\n propertiesOrder,\n ...(relations.length > 0 ? { relations } : {}),\n ...(securityRules.length > 0 ? { securityRules } : {})\n };\n}\n","\nimport { useUnsavedChangesDialog, UnsavedChangesDialog } from \"@rebasepro/core\";\nimport { useNavigationStateController, useCollectionRegistryController, useUrlController } from \"../../_cms_internals\";\nimport * as React from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ConfirmationDialog, ErrorView, useAuthController, useCustomizationController, useSnackbarController } from \"@rebasepro/core\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\nimport {\n ArrowLeftIcon,\n Button,\n CheckIcon,\n cls,\n coolIconKeys,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n LoadingButton,\n Tab,\n Tabs,\n Typography\n} from \"@rebasepro/ui\";\nimport { Entity, EntityCollection, MapProperty, Properties, Property, PropertyConfig, User, getDataSourceCapabilities } from \"@rebasepro/types\";\nimport type { PostgresCollection } from \"@rebasepro/types\";\nimport { getSubcollections, isPropertyBuilder, removeInitialAndTrailingSlashes, getTableName } from \"@rebasepro/common\";\nimport { CollectionEditorSchema } from \"./CollectionYupValidation\";\nimport { GeneralSettingsForm } from \"./GeneralSettingsForm\";\nimport { DisplaySettingsForm } from \"./DisplaySettingsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { CollectionRelationsTab } from \"./CollectionRelationsTab\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionEditorWelcomeView } from \"./CollectionEditorWelcomeView\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { getInferenceType, ImportSaveInProgress, useImportConfig } from \"../../_cms_internals\";\nimport { buildEntityPropertiesFromData } from \"@rebasepro/schema-inference\";\nimport { CollectionEditorImportMapping } from \"./import/CollectionEditorImportMapping\";\nimport { CollectionEditorImportDataPreview } from \"./import/CollectionEditorImportDataPreview\";\nimport { cleanPropertiesFromImport } from \"./import/clean_import_data\";\nimport { Formex, FormexController, useCreateFormex } from \"@rebasepro/formex\";\nimport { getFullIdPath } from \"./util\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { AIModifiedPathsProvider, useAIModifiedPaths } from \"./AIModifiedPathsContext\";\nimport { CollectionOperation, CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\nimport { CollectionRLSTab } from \"./CollectionRLSTab\";\nimport { buildCollectionFromTableMetadata } from \"../../pgColumnToProperty\";\nimport { TableMetadata } from \"@rebasepro/types\";\nimport { mergeDeep, randomString, removeUndefined } from \"@rebasepro/utils\";\n\nexport interface CollectionEditorDialogProps {\n open: boolean;\n isNewCollection: boolean;\n initialValues?: {\n slug?: string,\n name?: string,\n }\n /**\n * A collection to duplicate from. If provided, the new collection will be\n * pre-populated with the same properties (but with empty name, path, and id).\n */\n copyFrom?: EntityCollection;\n editedCollectionId?: string;\n path?: string; // full path of this particular collection, like `products/123/locales`\n parentCollectionSlugs?: string[], parentEntityIds?: string[]; // path ids of the parent collection, like [`products`]\n handleClose: (collection?: EntityCollection) => void;\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode | any\n };\n getUser?: (uid: string) => User | null;\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n parentCollection?: EntityCollection;\n existingEntities?: Entity<any>[];\n /**\n * Initial view to open when editing: \"general\", \"display\", or \"properties\".\n * For new collections, this is ignored.\n */\n initialView?: \"general\" | \"display\" | \"properties\";\n /**\n * If true, auto-expand the Kanban configuration section.\n */\n expandKanban?: boolean;\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection?: CollectionGenerationCallback;\n /**\n * Optional analytics callback\n */\n onAnalyticsEvent?: (event: string, params?: object) => void;\n /**\n * If true, it indicates that the editor is rendered inline (not in a dialog) and therefore updates headers and footers to adapt to the layout.\n */\n fullScreen?: boolean;\n /**\n * List of unmapped database tables available for import.\n */\n unmappedTables?: string[];\n /**\n * Callback to fetch column metadata for a table.\n */\n onFetchTableMetadata?: (tableName: string) => Promise<TableMetadata | undefined>;\n}\n\nexport function CollectionEditorDialog(props: CollectionEditorDialogProps) {\n\n const open = props.open;\n\n const [formDirty, setFormDirty] = React.useState<boolean>(false);\n\n const { dialogProps, triggerDialog } = useUnsavedChangesDialog(\n open && formDirty,\n () => props.handleClose(undefined)\n );\n\n const handleCancel = () => {\n if (!formDirty) {\n props.handleClose(undefined);\n } else {\n triggerDialog();\n }\n };\n\n useEffect(() => {\n if (!open) {\n setFormDirty(false);\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n fullWidth={true}\n fullHeight={true}\n scrollable={false}\n maxWidth={\"7xl\"}\n onOpenChange={(open) => !open ? handleCancel() : undefined}\n >\n <DialogTitle hidden>Collection editor</DialogTitle>\n <AIModifiedPathsProvider>\n {open && <CollectionEditor {...props}\n handleCancel={handleCancel}\n setFormDirty={setFormDirty}/>}\n\n <UnsavedChangesDialog {...dialogProps}/>\n </AIModifiedPathsProvider>\n </Dialog>\n );\n}\n\ntype EditorView = \"welcome\"\n | \"general\"\n | \"display\"\n | \"import_data_mapping\"\n | \"import_data_preview\"\n | \"import_data_saving\"\n | \"properties\"\n | \"loading\"\n | \"extra_view\"\n | \"relations\"\n | \"rls\";\n\nexport function CollectionEditor(props: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void\n}) {\n const { propertyConfigs } = useCustomizationController();\n const navigationState = useNavigationStateController();\n const collectionRegistry = useCollectionRegistryController();\n const authController = useAuthController();\n\n const {\n topLevelNavigation\n } = navigationState;\n const {\n collections\n } = collectionRegistry;\n\n const initialValuesProp = props.initialValues;\n const copyFromProp = props.copyFrom;\n // Skip templates when duplicating (copyFrom is provided)\n const includeTemplates = !copyFromProp && !initialValuesProp?.slug && (props.parentCollectionSlugs ?? []).length === 0;\n const collectionsInThisLevel = (props.parentCollection ? getSubcollections(props.parentCollection) : collections) ?? [];\n const existingPaths = collectionsInThisLevel.map(col => getTableName(col)?.trim().toLowerCase()).filter(Boolean);\n const existingIds = collectionsInThisLevel.map(col => col.slug?.trim().toLowerCase()).filter(Boolean) as string[];\n const [collection, setCollection] = React.useState<EntityCollection<any> | undefined>();\n const [initialLoadingCompleted, setInitialLoadingCompleted] = React.useState(false);\n\n useEffect(() => {\n try {\n if (collectionRegistry.initialised) {\n if (props.editedCollectionId) {\n // We must use getRawCollection so the editor schema fields\n // aren't polluted with dynamically injected runtime `relations`.\n // The path lookup relies on generating a fake child path to resolve through the registry\n const collectionPath = [...(props.parentCollectionSlugs ?? []), props.editedCollectionId]\n .reduce((acc, segment, i) => i === 0 ? segment : `${acc}/fake_id/${segment}`, \"\");\n\n setCollection(collectionRegistry.getRawCollection(collectionPath) as EntityCollection<any>);\n } else {\n setCollection(undefined);\n }\n setInitialLoadingCompleted(true);\n }\n } catch (e) {\n console.error(e);\n }\n }, [props.editedCollectionId, props.parentCollectionSlugs, props.parentEntityIds, collectionRegistry.initialised, collectionRegistry.getRawCollection]);\n\n\n\n const initialCollection = collection\n ? {\n ...collection,\n slug: collection.slug ?? randomString(16)\n }\n : undefined;\n\n // Build initial values - handle copyFrom for duplication\n const initialValues: EntityCollection<any> = initialCollection\n ? applyPropertyConfigs(initialCollection, propertyConfigs)\n : copyFromProp\n ? (() => {\n // When duplicating, copy all properties but clear identifiers\n const { subcollections: _sub, ...rest } = copyFromProp as unknown as Record<string, unknown>;\n return {\n ...rest,\n name: \"\",\n ownerId: authController.user?.uid ?? \"\"\n } as EntityCollection<any>;\n })()\n : {\n slug: initialValuesProp?.slug ?? randomString(16),\n table: initialValuesProp?.slug ?? \"\",\n name: initialValuesProp?.name ?? \"\",\n properties: {} as Properties,\n propertiesOrder: [],\n icon: coolIconKeys[Math.floor(Math.random() * coolIconKeys.length)],\n ownerId: authController.user?.uid ?? \"\"\n };\n\n if (!initialLoadingCompleted) {\n return <CircularProgressCenter/>;\n }\n\n if (!props.isNewCollection && (!collectionRegistry.initialised || !initialLoadingCompleted)) {\n return <CircularProgressCenter/>;\n }\n\n return <CollectionEditorInternal\n {...props}\n initialValues={initialValues}\n existingPaths={existingPaths}\n existingIds={existingIds}\n includeTemplates={includeTemplates}\n collection={collection}\n setCollection={setCollection}\n propertyConfigs={propertyConfigs}/>\n\n}\n\nfunction CollectionEditorInternal<M extends Record<string, unknown>>({\n isNewCollection,\n configController,\n editedCollectionId,\n parentCollectionSlugs, parentEntityIds,\n path,\n collectionInference,\n handleClose,\n extraView,\n handleCancel,\n setFormDirty,\n getUser,\n parentCollection,\n getData,\n existingPaths,\n existingIds,\n includeTemplates,\n collection,\n setCollection,\n initialValues,\n propertyConfigs,\n existingEntities,\n initialView: initialViewProp,\n expandKanban,\n generateCollection,\n onAnalyticsEvent,\n fullScreen,\n unmappedTables,\n onFetchTableMetadata\n}: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void,\n initialValues: EntityCollection<M>,\n existingPaths: string[],\n existingIds: string[],\n includeTemplates: boolean,\n collection: EntityCollection<M> | undefined,\n setCollection: (collection: EntityCollection<M>) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n}\n) {\n\n const importConfig = useImportConfig();\n const urlController = useUrlController();\n const collectionRegistry = useCollectionRegistryController();\n const snackbarController = useSnackbarController();\n\n // Use this ref to store which properties have errors\n const propertyErrorsRef = useRef<Record<string, any>>({});\n\n const initialView = isNewCollection\n ? (includeTemplates ? \"welcome\" : \"general\")\n : (initialViewProp ?? \"properties\");\n const [currentView, setCurrentView] = useState<EditorView>(initialView); // this view can edit either the details view or the properties one\n\n const [error, setError] = React.useState<Error | undefined>();\n\n const saveCollection = (updatedCollection: EntityCollection<M>): Promise<boolean> => {\n const id = updatedCollection.slug;\n\n return configController.saveCollection({\n id,\n collectionData: updatedCollection,\n previousId: editedCollectionId,\n parentCollectionSlugs\n })\n .then(() => {\n setError(undefined);\n return true;\n })\n .catch((e) => {\n setError(e);\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n };\n\n const setNextMode = () => {\n if (currentView === \"general\") {\n if (importConfig.inUse) {\n setCurrentView(\"import_data_saving\");\n } else if (extraView) {\n setCurrentView(\"extra_view\");\n } else {\n setCurrentView(\"properties\");\n }\n } else if (currentView === \"welcome\") {\n setCurrentView(\"general\");\n } else if (currentView === \"import_data_mapping\") {\n setCurrentView(\"import_data_preview\");\n } else if (currentView === \"import_data_preview\") {\n setCurrentView(\"general\");\n } else if (currentView === \"extra_view\") {\n setCurrentView(\"properties\");\n } else {\n setCurrentView(\"general\");\n }\n\n };\n\n const doCollectionInference = collectionInference ? (collection: EntityCollection<any>) => {\n if (!collectionInference) return undefined;\n return collectionInference?.(\n collection.slug,\n parentPaths ?? [],\n collection.databaseId\n );\n } : undefined;\n\n const inferCollectionFromData = async (newCollection: EntityCollection<M>) => {\n\n try {\n if (!doCollectionInference) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n\n setCurrentView(\"loading\");\n\n const inferredCollection = await doCollectionInference?.(newCollection);\n\n if (!inferredCollection) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n const values = {\n ...(newCollection ?? {})\n };\n\n if (Object.keys(inferredCollection.properties ?? {}).length > 0) {\n values.properties = inferredCollection.properties as Properties;\n values.propertiesOrder = inferredCollection.propertiesOrder as Extract<keyof M, string>[];\n }\n\n if (!values.propertiesOrder) {\n values.propertiesOrder = Object.keys(values.properties) as Extract<keyof M, string>[];\n return values;\n }\n\n setCollection(values);\n console.debug(\"Inferred collection\", {\n newCollection: newCollection ?? {},\n values\n });\n return values;\n } catch (e: unknown) {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error inferring collection: \" + (e instanceof Error ? e.message : \"Details in the console\")\n });\n return newCollection;\n }\n };\n\n const onSubmit = async (newCollectionState: EntityCollection<M>, formexController: FormexController<EntityCollection<M>>) => {\n console.debug(\"Submitting collection\", newCollectionState);\n try {\n\n if (!isNewCollection) {\n const success = await saveCollection(newCollectionState);\n if (success) {\n aiModifiedPaths?.clearAllPaths();\n formexController.resetForm({ values: newCollectionState });\n handleClose(newCollectionState as EntityCollection);\n }\n return;\n }\n\n if (currentView === \"welcome\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"general\") {\n if (extraView || importConfig.inUse) {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n } else if (isNewCollection) {\n const values = await inferCollectionFromData(newCollectionState);\n formexController.resetForm({\n values: values ?? newCollectionState,\n touched: {\n path: true,\n name: true\n }\n });\n setNextMode();\n } else {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n }\n } else if (currentView === \"extra_view\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"import_data_mapping\") {\n setNextMode();\n } else if (currentView === \"import_data_preview\") {\n setNextMode();\n } else if (currentView === \"properties\") {\n const success = await saveCollection(newCollectionState);\n if (success) {\n formexController.resetForm({ values: initialValues });\n setNextMode();\n handleClose(newCollectionState as EntityCollection);\n }\n } else {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n }\n } catch (e: unknown) {\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e instanceof Error ? e.message : \"Details in the console\")\n });\n console.error(e);\n formexController.resetForm({ values: newCollectionState });\n }\n };\n\n const validation = (col: EntityCollection<M>) => {\n\n let errors: Record<string, string> = {};\n const schema = (currentView === \"properties\" || currentView === \"relations\" || currentView === \"general\") && CollectionEditorSchema;\n if (schema) {\n const result = schema.safeParse(col);\n if (!result.success) {\n result.error.issues.forEach((issue) => {\n const path = issue.path.join(\".\");\n if (path) {\n errors[path] = issue.message;\n }\n });\n }\n }\n if (currentView === \"properties\") {\n errors = { ...errors,\n...propertyErrorsRef.current };\n }\n if (currentView === \"general\") {\n const pathError = validatePath(getTableName(col), isNewCollection, existingPaths, col.slug);\n if (pathError) {\n errors.slug = pathError;\n }\n const idError = validateId(col.slug, isNewCollection, existingPaths, existingIds);\n if (idError) {\n errors.id = idError;\n }\n }\n if (Object.keys(errors).length > 0) {\n console.error(\"Formex validation blocked save:\", errors, \"Current view:\", currentView);\n }\n return errors;\n };\n\n const formController = useCreateFormex<EntityCollection<M>>({\n initialValues,\n onSubmit,\n validation,\n debugId: \"COLLECTION_EDITOR\"\n });\n\n const {\n values,\n setFieldValue,\n isSubmitting,\n dirty,\n submitCount\n } = formController;\n\n const usedPath = getTableName(values);\n const pathError = validatePath(usedPath, isNewCollection, existingPaths, values.slug);\n\n const parentPaths = !pathError && parentCollectionSlugs ? collectionRegistry.convertIdsToPaths(parentCollectionSlugs) : undefined;\n\n const updatedFullPath = parentPaths && parentPaths.length > 0\n ? [...parentPaths, usedPath].join(\"/fake_id/\")\n : (path?.includes(\"/\") ? path.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + usedPath : usedPath);\n\n const resolvedPath = !pathError ? urlController.resolveDatabasePathsFrom(updatedFullPath) : undefined;\n const getDataWithPath = resolvedPath && getData ? async () => {\n const data = await getData!(resolvedPath, parentPaths ?? []);\n if (existingEntities) {\n const existingData = existingEntities.map(e => e.values);\n data.push(...existingData);\n }\n return data;\n } : undefined;\n\n useEffect(() => {\n setFormDirty(dirty);\n }, [dirty]);\n\n function onImportDataSet(data: object[], propertiesOrder?: string[]) {\n importConfig.setInUse(true);\n buildEntityPropertiesFromData(data, getInferenceType)\n .then((properties: any) => {\n const res = cleanPropertiesFromImport(properties as Properties);\n\n importConfig.setIdColumn(res.idColumn);\n importConfig.setImportData(data);\n importConfig.setHeadersMapping(res.headersMapping);\n const filteredHeadingsOrder = ((propertiesOrder ?? [])\n .filter((key) => res.headersMapping[key]) as string[]) ?? Object.keys(res.properties);\n importConfig.setHeadingsOrder(filteredHeadingsOrder);\n importConfig.setOriginProperties(res.properties);\n\n const mappedHeadings = (propertiesOrder ?? []).map((key) => res.headersMapping[key]).filter(Boolean) as string[] ?? Object.keys(res.properties);\n setFieldValue(\"properties\", res.properties);\n setFieldValue(\"propertiesOrder\", mappedHeadings);\n });\n }\n\n const validValues = Boolean(values.name) && Boolean(values.slug);\n\n const onImportMappingComplete = () => {\n const updatedProperties = { ...values.properties };\n if (importConfig.idColumn)\n delete updatedProperties[importConfig.idColumn];\n setFieldValue(\"properties\", updatedProperties);\n // setFieldValue(\"propertiesOrder\", Object.values(importConfig.headersMapping));\n setNextMode();\n };\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n if (!collection) return;\n configController?.deleteCollection({ id: collection.slug }).then(() => {\n setDeleteRequested(false);\n handleCancel();\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n const onWelcomeScreenContinue = (importData?: object[], propertiesOrder?: string[]) => {\n if (importData) {\n onImportDataSet(importData, propertiesOrder);\n setCurrentView(\"import_data_mapping\");\n } else {\n setCurrentView(\"general\");\n }\n };\n\n const aiModifiedPaths = useAIModifiedPaths();\n\n const handleAIGenerated = (generatedCollection: EntityCollection, operations?: CollectionOperation[]) => {\n formController.setValues(generatedCollection as EntityCollection<M>);\n if (operations && aiModifiedPaths) {\n aiModifiedPaths.addModifiedPaths(operations);\n }\n };\n\n return <div className=\"h-full w-full flex flex-col bg-white dark:bg-surface-950\">\n <Formex value={formController}>\n\n <>\n {!isNewCollection && <div className={cls(\"px-4 py-2 w-full flex shrink-0 items-center justify-between gap-4 bg-surface-50 dark:bg-surface-950 border-b\", defaultBorderMixin)}>\n <div className=\"flex flex-1 items-center justify-end gap-4 min-w-0\">\n <Tabs value={currentView}\n className=\"bg-transparent !w-fit max-w-full\"\n onValueChange={(v) => setCurrentView(v as EditorView)}>\n <Tab value={\"general\"}>\n General\n </Tab>\n <Tab value={\"display\"}>\n Display\n </Tab>\n <Tab value={\"properties\"}>\n Properties\n </Tab>\n {getDataSourceCapabilities(values.driver).supportsRLS && <Tab value={\"rls\"}>\n RLS\n </Tab>}\n {getDataSourceCapabilities(values.driver).supportsRelations && <Tab value={\"relations\"}>\n Relations\n </Tab>}\n </Tabs>\n </div>\n <div className=\"flex items-center gap-4\">\n {generateCollection && (\n <AICollectionGeneratorPopover\n existingCollection={values}\n onGenerated={handleAIGenerated}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n />\n )}\n {fullScreen && !isNewCollection && (\n <div className=\"flex items-center gap-2\">\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n onClick={() => formController.handleSubmit()}\n disabled={!dirty || isSubmitting || configController?.readOnly}\n loading={isSubmitting}\n >\n {configController?.readOnly ? \"Update (Read-only)\" : \"Update\"}\n </LoadingButton>\n </div>\n )}\n </div>\n </div>}\n\n <form noValidate\n onSubmit={formController.handleSubmit}\n className=\"flex-grow flex flex-col min-h-0 relative\">\n\n <div className=\"flex-grow flex flex-col min-h-0 overflow-y-auto no-scrollbar relative w-full h-full\">\n\n {currentView === \"loading\" &&\n <CircularProgressCenter/>}\n\n {currentView === \"extra_view\" &&\n usedPath &&\n extraView?.View &&\n <extraView.View path={usedPath}/>}\n\n {currentView === \"welcome\" &&\n <CollectionEditorWelcomeView\n path={usedPath}\n onContinue={onWelcomeScreenContinue}\n existingCollectionPaths={existingPaths}\n parentCollection={parentCollection}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n unmappedTables={unmappedTables}\n onImportFromTable={onFetchTableMetadata ? async (tableName: string) => {\n try {\n const columns = await onFetchTableMetadata!(tableName);\n if (!columns) return;\n const collectionData = buildCollectionFromTableMetadata(tableName, columns);\n formController.setValues({\n ...formController.values,\n ...collectionData\n } as EntityCollection<M>);\n onWelcomeScreenContinue();\n } catch (e: unknown) {\n console.error(\"Error importing table:\", e);\n snackbarController.open({\n type: \"error\",\n message: \"Error importing table: \" + (e instanceof Error ? e.message : \"Unknown error\")\n });\n }\n } : undefined}/>}\n\n {currentView === \"import_data_mapping\" && importConfig &&\n <CollectionEditorImportMapping importConfig={importConfig}\n propertyConfigs={propertyConfigs}/>}\n\n {currentView === \"import_data_preview\" && importConfig &&\n <CollectionEditorImportDataPreview importConfig={importConfig}\n properties={values.properties as Properties}\n propertiesOrder={values.propertiesOrder as string[]}/>}\n\n {currentView === \"import_data_saving\" && importConfig &&\n <ImportSaveInProgress importConfig={importConfig}\n collection={values}\n path={usedPath}\n onImportSuccess={async (importedCollection) => {\n snackbarController.open({\n type: \"info\",\n message: \"Data imported successfully\"\n });\n await saveCollection(values);\n handleClose(importedCollection);\n }}\n />}\n\n {currentView === \"general\" &&\n <GeneralSettingsForm\n existingPaths={existingPaths}\n existingIds={existingIds}\n parentCollection={parentCollection}\n isNewCollection={isNewCollection}/>\n }\n\n {currentView === \"display\" &&\n <DisplaySettingsForm expandKanban={expandKanban}/>\n }\n\n {currentView === \"relations\" && getDataSourceCapabilities(values.driver).supportsRelations &&\n <CollectionRelationsTab/>\n }\n\n {currentView === \"rls\" && getDataSourceCapabilities(values.driver).supportsRLS &&\n <CollectionRLSTab/>\n }\n\n {currentView === \"properties\" &&\n <CollectionPropertiesEditorForm\n showErrors={submitCount > 0}\n isNewCollection={isNewCollection}\n onPropertyError={(propertyKey, namespace, error) => {\n const current = removeUndefined({\n ...propertyErrorsRef.current,\n [getFullIdPath(propertyKey, namespace)]: removeUndefined(error, true)\n }, true) as Record<string, any>;\n propertyErrorsRef.current = current;\n formController.validate();\n }}\n getUser={getUser}\n getData={getDataWithPath}\n doCollectionInference={doCollectionInference}\n propertyConfigs={propertyConfigs}\n\n extraIcon={extraView?.icon &&\n <IconButton\n color={\"primary\"}\n onClick={() => setCurrentView(\"extra_view\")}>\n {extraView.icon}\n </IconButton>}/>\n }\n\n </div>\n {(!fullScreen || isNewCollection || !!error) && (\n <div className=\"shrink-0 w-full p-4 sm:px-6 sm:py-4 border-t border-surface-200 dark:border-surface-900 flex items-center justify-between gap-4 bg-white dark:bg-surface-950\">\n {error && <ErrorView error={error}/>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_mapping\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n importConfig.setInUse(false);\n return setCurrentView(\"welcome\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_preview\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n setCurrentView(\"import_data_mapping\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"general\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"welcome\")}>\n Back\n </Button>}\n\n {isNewCollection && currentView === \"properties\" && <Button variant={\"text\"}\n type=\"button\"\n color={\"neutral\"}\n onClick={() => setCurrentView(\"general\")}>\n <ArrowLeftIcon/>\n Back\n </Button>}\n\n {(!fullScreen || isNewCollection) && (\n <Button variant={\"text\"}\n color={\"neutral\"}\n onClick={() => {\n handleCancel();\n }}>\n Cancel\n </Button>\n )}\n\n {currentView === \"welcome\" &&\n <Button variant={\"text\"} onClick={() => onWelcomeScreenContinue()}>\n Continue from scratch\n </Button>}\n\n {isNewCollection && currentView === \"import_data_mapping\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={onImportMappingComplete}\n >\n Next\n </Button>}\n\n {isNewCollection && currentView === \"import_data_preview\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={() => {\n setNextMode();\n }}\n >\n Next\n </Button>}\n\n {isNewCollection && (currentView === \"general\" || currentView === \"properties\") &&\n <LoadingButton\n variant={\"filled\"}\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n disabled={isSubmitting || (currentView === \"general\" && !validValues) || configController?.readOnly}\n startIcon={currentView === \"properties\"\n ? <CheckIcon/>\n : undefined}\n >\n {currentView === \"general\" && \"Next\"}\n {currentView === \"properties\" && \"Create collection\"}\n </LoadingButton>}\n\n {!isNewCollection && !fullScreen && <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={isSubmitting || configController?.readOnly}\n loading={isSubmitting}\n >\n {configController?.readOnly ? \"Update collection (Read-only)\" : \"Update collection\"}\n </LoadingButton>}\n\n </div>\n )}\n </form>\n </>\n\n </Formex>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete the stored config?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the stored config, and reset to the code state.</>}/>\n\n </div>\n\n}\n\nfunction applyPropertyConfigs<M extends Record<string, unknown> = Record<string, unknown>>(collection: EntityCollection<M>, propertyConfigs: Record<string, PropertyConfig>): EntityCollection<M> {\n const {\n properties,\n ...rest\n } = collection;\n const propertiesResult: Properties = {};\n if (properties) {\n Object.keys(properties).forEach((key) => {\n const prop = properties[key];\n if (prop == null) return;\n propertiesResult[key] = applyPropertiesConfig(prop, propertyConfigs);\n });\n }\n\n return {\n ...rest,\n properties: propertiesResult\n };\n}\n\nfunction applyPropertiesConfig(property: Property, propertyConfigs: Record<string, PropertyConfig>) {\n let internalProperty = property;\n if (propertyConfigs && internalProperty && typeof internalProperty === \"object\" && internalProperty.propertyConfig) {\n const propertyConfig = propertyConfigs[internalProperty.propertyConfig];\n if (propertyConfig && isPropertyBuilder(propertyConfig.property as Property)) {\n internalProperty = propertyConfig.property as Property;\n } else {\n\n if (propertyConfig) {\n internalProperty = mergeDeep(propertyConfig.property as Property, internalProperty);\n }\n\n if (!isPropertyBuilder(internalProperty) && internalProperty.type === \"map\" && internalProperty.properties) {\n const properties: Record<string, Property> = {};\n Object.keys(internalProperty.properties).forEach((key) => {\n properties[key] = applyPropertiesConfig(((internalProperty as MapProperty).properties as Properties)[key] as Property, propertyConfigs);\n });\n internalProperty = {\n ...internalProperty,\n properties\n };\n }\n\n }\n }\n return internalProperty;\n\n}\n\nconst validatePath = (value: string, isNewCollection: boolean, existingPaths: string[], idValue?: string) => {\n let error;\n if (!value) {\n error = \"You must specify a path in the database for this collection\";\n }\n // if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n // error = \"There is already a collection which uses this path as an id\";\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()) && !idValue)\n error = \"There is already a collection with the specified path. If you want to have multiple collections referring to the same database path, make sure the have different ids\";\n\n const subpaths = removeInitialAndTrailingSlashes(value).split(\"/\");\n if (subpaths.length % 2 === 0) {\n error = `Collection paths must have an odd number of segments: ${value}`;\n }\n return error;\n};\n\nconst validateId = (value: string, isNewCollection: boolean, existingPaths: string[], existingIds: string[]) => {\n if (!value) return undefined;\n let error;\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection that uses this value as a path\";\n if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection which uses this id\";\n // if (error) {\n // setAdvancedPanelExpanded(true);\n // }\n return error;\n};\n"],"names":["CollectionEditorSchema","z","object","slug","string","min","name","table","GeneralSettingsForm","t0","$","_c","isNewCollection","parentCollection","values","setFieldValue","handleChange","touched","errors","setFieldTouched","submitCount","useFormex","iconDialogOpen","setIconDialogOpen","useState","useAuthController","useCustomizationController","configController","useCollectionsConfigController","t1","databaseId","undefined","updateDatabaseId","t2","pathTouched","getIn","toSnakeCase","idTouched","singularNameTouched","singular","updateName","t3","collectionIcon","isSubcollection","showErrors","t4","t5","t6","t7","readOnly","t8","t9","t10","Symbol","for","t11","t12","t13","t14","t15","t16","t17","e","target","value","t18","Boolean","t19","t20","t21","t22","t23","t24","cls","t25","t26","DebouncedTextField","t27","t28","t29","t30","t31","singularName","t32","e_0","t33","t34","t35","t36","t37","t38","t39","description","t40","t41","t42","t43","t44","t45","t46","t47","e_1","t48","t49","t50","t51","t52","t53","t54","t55","t56","history","t57","t58","height","t59","icon","t60","t61","t62","t63","DefaultDatabaseField","disabled","onDatabaseIdUpdate","LayoutModeSwitch","onChange","className","label","ViewModeSwitch","KanbanConfigSection","forceExpanded","customizationController","panelRef","useRef","columnPropertyDialogOpen","setColumnPropertyDialogOpen","enumStringProperties","useMemo","result","properties","Object","entries","forEach","key","prop","type","enum","push","property","kanbanConfig","kanban","columnPropertyMissing","columnProperty","some","p","React","useEffect","current","setTimeout","scrollIntoView","behavior","block","showCreateButton","dialogPropertyKey","dialogPropertyName","unslugify","length","v","find","fieldConfig","getFieldConfig","propertyConfigs","stopPropagation","iconSize","smallest","map","id","keys","newProperties","newPropertiesOrder","propertiesOrder","DisplaySettingsForm","expandKanban","orderPropertyDialogOpen","setOrderPropertyDialogOpen","textProperties","openEntityMode","defaultViewMode","orderPropertyMissing","orderProperty","ui","hideFromCollection","defaultSize","toUpperCase","isNaN","Number","sideDialogWidth","small","inlineEditing","includeJsonView","GetCodeDialog","collection","onOpenChange","open","snackbarController","useSnackbarController","code","camelCase","JSON5","stringify","collectionToCode","themes","vsDark","_temp","preventDefault","message","navigator","clipboard","writeText","style","tokens","getLineProps","getTokenProps","line","i","token","propertyCleanup","valueCopy","clone","Array","isArray","obj","isEmptyObject","childRes","resolved","propertyConfig","path","defaultFilter","sort","reduce","a","b","CollectionPropertiesEditorForm","propertyErrorsRef","onPropertyError","setDirty","extraIcon","getUser","getData","doCollectionInference","setFieldError","dirty","largeLayout","useLargeLayout","asDialog","selectedPropertyIndex","setSelectedPropertyIndex","selectedPropertyKey","setSelectedPropertyKey","selectedPropertyNamespace","setSelectedPropertyNamespace","selectedPropertyFullId","getFullId","selectedProperty","replaceAll","codeDialogOpen","setCodeDialogOpen","inferringProperties","setInferringProperties","newPropertyDialogOpen","setNewPropertyDialogOpen","inferredPropertyKeys","setInferredPropertyKeys","currentPropertiesOrderRef","inferPropertiesFromData","console","debug","then","newCollection","findNewPropertyKeys","existingProps","newProps","namespace","fullKey","existingProp","newProp","dataType","existingMapProps","addNewPropertiesOnly","updatedProperties","allNewPropertyKeys","newTopLevelPropertyKeys","filter","propertyKey","allExistingKeys","updatedPropertiesOrder","includes","updatePropertiesOrder","finally","getCurrentPropertiesOrder","namespaceToPropertiesOrderPath","propertiesOrderPath","deleteProperty","fullId","Error","idToPropertiesPath","currentPropertiesOrder","onPropertyMove","onPropertyCreated","indexOf","onPropertyChanged","previousId","propertyPath","previousFullId","previousPropertyPath","onPropertyErrorInternal","error","hasError","closePropertyDialog","initialErrors","emptyCollection","usedPropertiesOrder","owner","ownerId","aiModifiedPaths","useAIModifiedPaths","generationCounter","onPropertyClick","body","defaultBorderMixin","displayName","additionalFields","isPropertyBuilder","CollectionRelationsTab","collections","editingRelationIndex","setEditingRelationIndex","editingRelationState","setEditingRelationState","getTargetSlug","match","col","relations","handleDelete","index","newRelations","splice","handleSave","handleCancel","relationName","cardinality","direction","relation","width","prev","val","targetFn","c","through","sourceColumn","targetColumn","EXAMPLE_JSON","CollectionJsonImportDialog","onClose","onImport","jsonValue","setJsonValue","setErrors","setTouched","trim","validateCollectionJson","handleJsonChange","result_0","valid","handleImport","handleClose","isValid","open_0","productsCollectionTemplate","validation","required","brand","markdown","main_image","storage","storagePath","acceptedFiles","available","columnWidth","price","requiredMessage","images","of","related_products","metadata","keyValue","added_on","autoValue","blogCollectionTemplate","header_image","cacheControl","content","oneOf","typeField","valueField","text","quote","multiline","products","previewProperties","created_on","status","published","draft","defaultValue","publish_date","clearable","reviewed","tags","previewAsTag","usersCollectionTemplate","email","emailVerified","phone","favourite_products","photoURL","url","pagesCollectionTemplate","title","unique","matches","matchesMessage","hero_section","headline","subhead","background_image","call_to_action","call_to_action_link","section","image","link","slider","sidebar","seo_metadata","meta_title","meta_description","focus_keywords","footer_override","last_updated","is_published","AICollectionGeneratorPopover","existingCollection","onGenerated","generateCollection","trigger","size","showLabel","onAnalyticsEvent","menuOpen","setMenuOpen","prompt","setPrompt","loading","setLoading","setError","collectionRegistry","useCollectionRegistryController","existingCollections","handleGenerate","mode","collectionsContext","slice","operations","operationsCount","errorMessage","CollectionGenerationApiError","handleKeyDown","shiftKey","tooltipTitle","readOnlyReason","defaultTrigger","CollectionEditorWelcomeView","onContinue","existingCollectionPaths","unmappedTables","onImportFromTable","pathSuggestions","useCollectionEditorController","s","toLowerCase","filteredSuggestions","setValues","jsonImportOpen","setJsonImportOpen","importingTable","setImportingTable","T0","t","c_0","filteredUnmappedTables","Container","tableName","prettifyIdentifier","suggestion","generatedCollection","data","TemplateButton","subtitle","onClick","CollectionEditorImportMapping","importConfig","setSelectedProperty","property_0","namespace_0","namespace_1","newPropertiesOrder_0","newHeadersMapping","headersMapping","setHeadersMapping","importData","id_0","importKey","property_1","namespace_2","fullId_0","propertyPath_0","propertyData","d","inferredNewProperty","buildPropertyFromData","getInferenceType","onPropertyTypeChanged","property_2","propertyKey_0","importKey_0","isIdColumn","propertyKey_1","props","p_0","PropertySelect","getFieldId","fieldId","widget","selectOpen","setSelectOpen","newSelectedWidgetId","newProperty","updatePropertyFromWidget","supportedFields","_temp2","widget_0","ImportPropertySelectItem","optionDisabled","existing","CollectionEditorImportDataPreview","authController","registry","loadEntities","mappedData","convertDataToEntity","idColumn","defaultValues","setEntities","selectionController","useSelectionController","entities","dataLoading","noMoreToLoad","cleanPropertiesFromImport","parentSlug","acc","slugify","fullSlug","slugifiedResult","firstKey","sanitizeSqlIdentifier","test","CollectionRLSTab","editingPolicy","setEditingPolicy","rules","securityRules","databaseAdmin","useRebaseContext","dbPolicies","setDbPolicies","isLoadingDb","setIsLoadingDb","fetchLivePolicies","alias","executeSql","safeTableName","quotedName","sql","extractRows","res","rows","pRows","policies","parsedRoles","r","roles","ROLES","replace","split","policyname","POLICYNAME","tablename","permissive","PERMISSIVE","cmd","CMD","qual","QUAL","with_check","WITH_CHECK","unmappedPolicies","dp","newPolicy","rule","operation","using","withCheck","newRules","join","COMMAND_OPTIONS","ROLE_OPTIONS","InlinePolicyEditor","policy","onSave","onCancel","setName","setBehavior","command","setCommand","setRoles","usingExpr","setUsingExpr","checkExpr","setCheckExpr","showCheck","pgTypeToRebaseProperty","column","column_name","data_type","udt_name","is_nullable","column_default","enum_values","prettifiedName","isAutoId","dt","colType","columnType","isId","integer","startsWith","buildCollectionFromTableMetadata","columns","propRecord","foreignKeys","fk","relName","endsWith","substring","foreign_table_name","localKey","junctions","junction","target_table_name","junction_table_name","source_column_name","target_column_name","policy_name","CollectionEditorDialog","formDirty","setFormDirty","dialogProps","triggerDialog","useUnsavedChangesDialog","CollectionEditor","navigationState","useNavigationStateController","topLevelNavigation","initialValuesProp","initialValues","copyFromProp","copyFrom","includeTemplates","parentCollectionSlugs","collectionsInThisLevel","getSubcollections","existingPaths","getTableName","existingIds","setCollection","initialLoadingCompleted","setInitialLoadingCompleted","initialised","editedCollectionId","collectionPath","segment","getRawCollection","parentEntityIds","initialCollection","randomString","applyPropertyConfigs","subcollections","_sub","rest","user","uid","coolIconKeys","Math","floor","random","CollectionEditorInternal","collectionInference","extraView","existingEntities","initialView","initialViewProp","fullScreen","onFetchTableMetadata","useImportConfig","urlController","useUrlController","currentView","setCurrentView","saveCollection","updatedCollection","collectionData","catch","setNextMode","inUse","parentPaths","inferCollectionFromData","Promise","resolve","inferredCollection","onSubmit","newCollectionState","formexController","success","clearAllPaths","resetForm","schema","safeParse","issues","issue","pathError","validatePath","idError","validateId","formController","useCreateFormex","debugId","isSubmitting","usedPath","convertIdsToPaths","updatedFullPath","resolvedPath","resolveDatabasePathsFrom","getDataWithPath","existingData","onImportDataSet","setInUse","buildEntityPropertiesFromData","setIdColumn","setImportData","filteredHeadingsOrder","setHeadingsOrder","setOriginProperties","mappedHeadings","validValues","onImportMappingComplete","deleteRequested","setDeleteRequested","deleteCollection","onWelcomeScreenContinue","handleAIGenerated","addModifiedPaths","getDataSourceCapabilities","driver","supportsRLS","supportsRelations","handleSubmit","View","importedCollection","removeUndefined","getFullIdPath","validate","propertiesResult","applyPropertiesConfig","internalProperty","mergeDeep","idValue","subpaths","removeInitialAndTrailingSlashes"],"mappings":"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"}
|