@firecms/collection_editor 3.0.0-canary.18 → 3.0.0-canary.182

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.
Files changed (74) hide show
  1. package/LICENSE +114 -21
  2. package/dist/ConfigControllerProvider.d.ts +11 -2
  3. package/dist/index.d.ts +1 -0
  4. package/dist/index.es.js +10069 -4770
  5. package/dist/index.es.js.map +1 -1
  6. package/dist/index.umd.js +10759 -3
  7. package/dist/index.umd.js.map +1 -1
  8. package/dist/types/collection_editor_controller.d.ts +14 -2
  9. package/dist/types/collection_inference.d.ts +1 -1
  10. package/dist/types/config_permissions.d.ts +2 -2
  11. package/dist/types/persisted_collection.d.ts +1 -1
  12. package/dist/ui/CollectionViewHeaderAction.d.ts +3 -2
  13. package/dist/ui/EditorCollectionActionStart.d.ts +2 -0
  14. package/dist/ui/PropertyAddColumnComponent.d.ts +3 -1
  15. package/dist/ui/collection_editor/CollectionDetailsForm.d.ts +3 -1
  16. package/dist/ui/collection_editor/CollectionEditorDialog.d.ts +3 -2
  17. package/dist/ui/collection_editor/CollectionEditorWelcomeView.d.ts +1 -1
  18. package/dist/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +1 -1
  19. package/dist/ui/collection_editor/LayoutModeSwitch.d.ts +5 -0
  20. package/dist/ui/collection_editor/PropertyEditView.d.ts +8 -0
  21. package/dist/ui/collection_editor/PropertyTree.d.ts +9 -9
  22. package/dist/ui/collection_editor/SubcollectionsEditTab.d.ts +1 -1
  23. package/dist/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +7 -0
  24. package/dist/ui/collection_editor/properties/MarkdownPropertyField.d.ts +4 -0
  25. package/dist/ui/collection_editor/properties/StringPropertyField.d.ts +1 -1
  26. package/dist/useCollectionEditorPlugin.d.ts +17 -11
  27. package/dist/utils/collections.d.ts +6 -0
  28. package/package.json +24 -35
  29. package/src/ConfigControllerProvider.tsx +76 -64
  30. package/src/index.ts +1 -0
  31. package/src/types/collection_editor_controller.tsx +14 -4
  32. package/src/types/collection_inference.ts +1 -1
  33. package/src/types/config_permissions.ts +1 -1
  34. package/src/types/persisted_collection.ts +2 -3
  35. package/src/ui/CollectionViewHeaderAction.tsx +10 -5
  36. package/src/ui/EditorCollectionAction.tsx +10 -63
  37. package/src/ui/EditorCollectionActionStart.tsx +88 -0
  38. package/src/ui/HomePageEditorCollectionAction.tsx +19 -13
  39. package/src/ui/NewCollectionButton.tsx +1 -1
  40. package/src/ui/NewCollectionCard.tsx +3 -3
  41. package/src/ui/PropertyAddColumnComponent.tsx +11 -6
  42. package/src/ui/collection_editor/CollectionDetailsForm.tsx +90 -11
  43. package/src/ui/collection_editor/CollectionEditorDialog.tsx +101 -34
  44. package/src/ui/collection_editor/CollectionEditorWelcomeView.tsx +8 -7
  45. package/src/ui/collection_editor/CollectionPropertiesEditorForm.tsx +39 -36
  46. package/src/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +6 -5
  47. package/src/ui/collection_editor/EnumForm.tsx +10 -6
  48. package/src/ui/collection_editor/GetCodeDialog.tsx +56 -26
  49. package/src/ui/collection_editor/LayoutModeSwitch.tsx +54 -0
  50. package/src/ui/collection_editor/PropertyEditView.tsx +257 -80
  51. package/src/ui/collection_editor/PropertyFieldPreview.tsx +7 -10
  52. package/src/ui/collection_editor/PropertyTree.tsx +9 -7
  53. package/src/ui/collection_editor/SubcollectionsEditTab.tsx +26 -19
  54. package/src/ui/collection_editor/UnsavedChangesDialog.tsx +3 -5
  55. package/src/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +26 -9
  56. package/src/ui/collection_editor/import/CollectionEditorImportMapping.tsx +42 -9
  57. package/src/ui/collection_editor/properties/BlockPropertyField.tsx +32 -20
  58. package/src/ui/collection_editor/properties/DateTimePropertyField.tsx +54 -47
  59. package/src/ui/collection_editor/properties/EnumPropertyField.tsx +3 -1
  60. package/src/ui/collection_editor/properties/MapPropertyField.tsx +7 -6
  61. package/src/ui/collection_editor/properties/MarkdownPropertyField.tsx +139 -0
  62. package/src/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -0
  63. package/src/ui/collection_editor/properties/RepeatPropertyField.tsx +0 -1
  64. package/src/ui/collection_editor/properties/StoragePropertyField.tsx +34 -19
  65. package/src/ui/collection_editor/properties/StringPropertyField.tsx +1 -10
  66. package/src/ui/collection_editor/properties/UrlPropertyField.tsx +1 -0
  67. package/src/ui/collection_editor/properties/validation/ValidationPanel.tsx +2 -2
  68. package/src/ui/collection_editor/templates/pages_template.ts +1 -6
  69. package/src/useCollectionEditorPlugin.tsx +41 -31
  70. package/src/utils/collections.ts +36 -0
  71. package/dist/ui/RootCollectionSuggestions.d.ts +0 -3
  72. package/dist/ui/collection_editor/PropertySelectItem.d.ts +0 -8
  73. package/src/ui/RootCollectionSuggestions.tsx +0 -63
  74. package/src/ui/collection_editor/PropertySelectItem.tsx +0 -32
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/ui/collection_editor/CollectionYupValidation.tsx","../src/ui/collection_editor/CollectionDetailsForm.tsx","../src/ui/collection_editor/util.ts","../src/ui/collection_editor/EnumForm.tsx","../src/ui/collection_editor/SwitchControl.tsx","../src/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/StringPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ValidationPanel.tsx","../src/ui/collection_editor/properties/EnumPropertyField.tsx","../src/ui/collection_editor/properties/StoragePropertyField.tsx","../src/utils/entities.ts","../src/ui/collection_editor/PropertyFieldPreview.tsx","../src/ui/collection_editor/PropertyTree.tsx","../src/ui/collection_editor/properties/MapPropertyField.tsx","../src/ui/collection_editor/properties/RepeatPropertyField.tsx","../src/ui/collection_editor/properties/CommonPropertyFields.tsx","../src/ui/collection_editor/properties/StringPropertyField.tsx","../src/ui/collection_editor/properties/BooleanPropertyField.tsx","../src/ui/collection_editor/properties/BlockPropertyField.tsx","../src/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx","../src/ui/collection_editor/properties/NumberPropertyField.tsx","../src/ui/collection_editor/properties/ReferencePropertyField.tsx","../src/ui/collection_editor/properties/DateTimePropertyField.tsx","../src/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx","../src/ui/collection_editor/properties/KeyValuePropertyField.tsx","../src/ui/collection_editor/utils/update_property_for_widget.ts","../src/ui/collection_editor/PropertySelectItem.tsx","../src/ui/collection_editor/properties/UrlPropertyField.tsx","../src/ui/collection_editor/utils/supported_fields.tsx","../src/ui/collection_editor/PropertyEditView.tsx","../src/ui/collection_editor/utils/strings.ts","../src/ui/collection_editor/GetCodeDialog.tsx","../src/ui/collection_editor/CollectionPropertiesEditorForm.tsx","../src/ui/collection_editor/UnsavedChangesDialog.tsx","../src/ui/collection_editor/EntityCustomViewsSelectDialog.tsx","../src/ui/collection_editor/SubcollectionsEditTab.tsx","../src/ui/collection_editor/templates/products_template.ts","../src/ui/collection_editor/templates/blog_template.ts","../src/ui/collection_editor/templates/users_template.ts","../src/ui/collection_editor/templates/pages_template.ts","../src/ui/collection_editor/CollectionEditorWelcomeView.tsx","../src/ui/collection_editor/import/CollectionEditorImportMapping.tsx","../src/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx","../src/ui/collection_editor/import/clean_import_data.ts","../src/ui/collection_editor/CollectionEditorDialog.tsx","../src/ConfigControllerProvider.tsx","../src/useCollectionEditorController.tsx","../src/useCollectionsConfigController.tsx","../src/ui/EditorCollectionAction.tsx","../src/ui/HomePageEditorCollectionAction.tsx","../src/ui/NewCollectionCard.tsx","../src/ui/RootCollectionSuggestions.tsx","../src/ui/CollectionViewHeaderAction.tsx","../src/ui/PropertyAddColumnComponent.tsx","../src/ui/NewCollectionButton.tsx","../src/useCollectionEditorPlugin.tsx","../src/ui/MissingReferenceWidget.tsx"],"sourcesContent":["import * as Yup from \"yup\";\n\nexport const YupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\"),\n path: Yup.string().required(\"Required\")\n});\n","import React, { useEffect, useState } from \"react\";\nimport { EntityCollection, FieldCaption, IconForView, SearchIconsView, singular, toSnakeCase, } from \"@firecms/core\";\nimport {\n Autocomplete,\n AutocompleteItem,\n BooleanSwitchWithLabel,\n Chip,\n cn,\n Container,\n DebouncedTextField,\n Dialog,\n ExpandablePanel,\n IconButton,\n Select,\n SelectItem,\n SettingsIcon,\n TextField,\n Tooltip,\n Typography,\n useAutoComplete\n} from \"@firecms/ui\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\n\nexport function CollectionDetailsForm({\n isNewCollection,\n reservedGroups,\n existingPaths,\n existingIds,\n groups,\n parentCollection\n }: {\n isNewCollection: boolean,\n reservedGroups?: string[];\n existingPaths?: string[];\n existingIds?: string[];\n groups: string[] | null;\n parentCollection?: EntityCollection;\n parentCollectionIds?: string[];\n}) {\n\n const groupRef = React.useRef<HTMLInputElement>(null);\n const {\n values,\n setFieldValue,\n handleChange,\n touched,\n errors,\n setFieldTouched,\n isSubmitting,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [iconDialogOpen, setIconDialogOpen] = useState(false);\n const [advancedPanelExpanded, setAdvancedPanelExpanded] = useState(false);\n\n const updateName = (name: string) => {\n setFieldValue(\"name\", name);\n\n const pathTouched = getIn(touched, \"path\");\n if (!pathTouched && isNewCollection && name) {\n setFieldValue(\"path\", toSnakeCase(name));\n }\n\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && isNewCollection && name) {\n setFieldValue(\"id\", toSnakeCase(name));\n }\n\n const singularNameTouched = getIn(touched, \"singularName\");\n if (!singularNameTouched && isNewCollection && name) {\n setFieldValue(\"singularName\", singular(name));\n }\n\n };\n\n useEffect(() => {\n if (errors.id) {\n setAdvancedPanelExpanded(true);\n }\n }, [errors.id]);\n\n const collectionIcon = <IconForView collectionOrView={values}/>;\n\n const groupOptions = groups?.filter((group) => !reservedGroups?.includes(group));\n\n const {\n inputFocused,\n autoCompleteOpen,\n setAutoCompleteOpen\n } = useAutoComplete({\n ref: groupRef\n });\n\n const isSubcollection = !!parentCollection;\n\n let customIdValue: \"true\" | \"false\" | \"optional\" | \"code_defined\" | undefined;\n if (typeof values.customId === \"object\") {\n customIdValue = \"code_defined\";\n } else if (values.customId === true) {\n customIdValue = \"true\";\n } else if (values.customId === false) {\n customIdValue = \"false\";\n } else if (values.customId === \"optional\") {\n customIdValue = \"optional\";\n }\n\n const showErrors = submitCount > 0;\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\n className=\"flex flex-row py-2 pt-3 items-center\">\n <Typography variant={!isNewCollection ? \"h5\" : \"h4\"} className={\"flex-grow\"}>\n {isNewCollection ? \"New collection\" : `${values?.name} collection`}\n </Typography>\n <Tooltip title={\"Change icon\"}>\n <IconButton\n shape={\"square\"}\n onClick={() => setIconDialogOpen(true)}>\n {collectionIcon}\n </IconButton>\n </Tooltip>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n </div>\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n <div className={\"col-span-12\"}>\n <TextField\n value={values.name ?? \"\"}\n onChange={(e: any) => updateName(e.target.value)}\n label={\"Name\"}\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 in this collection, usually a plural name (e.g. Products)\"}\n </FieldCaption>\n </div>\n\n <div className={cn(\"col-span-12 \", isSubcollection ? \"\" : \"sm:col-span-8\")}>\n <Field name={\"path\"}\n as={DebouncedTextField}\n label={\"Path\"}\n disabled={!isNewCollection}\n required\n error={showErrors && Boolean(errors.path)}/>\n\n <FieldCaption error={touched.path && Boolean(errors.path)}>\n {touched.path && Boolean(errors.path)\n ? errors.path\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"Path that this collection is stored in, in the database\"}\n </FieldCaption>\n\n </div>\n\n {!isSubcollection && <div className={\"col-span-12 sm:col-span-4 relative\"}>\n\n <TextField error={showErrors && Boolean(errors.group)}\n disabled={isSubmitting}\n value={values.group ?? \"\"}\n autoComplete=\"off\"\n onChange={(event) => setFieldValue(\"group\", event.target.value)}\n name={\"group\"}\n inputRef={groupRef}\n label=\"Group\"/>\n <Autocomplete\n open={autoCompleteOpen && (groupOptions ?? []).length > 0}\n setOpen={setAutoCompleteOpen}>\n {groupOptions?.map((group, index) => {\n return <AutocompleteItem\n key={index + \"_\" + group}\n onClick={() => {\n setAutoCompleteOpen(false);\n setFieldValue(\"group\", group ?? null);\n }}\n >\n <div className={\"flex-grow\"}>\n {group}\n </div>\n </AutocompleteItem>;\n })}\n </Autocomplete>\n <FieldCaption>\n {showErrors && Boolean(errors.group) ? errors.group : \"Group of the collection\"}\n </FieldCaption>\n </div>}\n\n <div className={\"col-span-12\"}>\n <ExpandablePanel\n expanded={advancedPanelExpanded}\n onExpandedChange={setAdvancedPanelExpanded}\n title={\n <div className=\"flex flex-row text-gray-500\">\n <SettingsIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n Advanced\n </Typography>\n </div>}\n initiallyExpanded={false}>\n <div className={\"grid grid-cols-12 gap-4 p-4\"}>\n\n <div className={\"col-span-12\"}>\n <Field name={\"id\"}\n as={DebouncedTextField}\n disabled={!isNewCollection}\n label={\"Collection id\"}\n error={showErrors && Boolean(errors.id)}/>\n <FieldCaption error={touched.id && Boolean(errors.id)}>\n {touched.id && Boolean(errors.id) ? errors.id : \"This id identifies this collection\"}\n </FieldCaption>\n </div>\n\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 <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 rows={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 <div className={\"col-span-12\"}>\n <Select\n name=\"defaultSize\"\n label=\"Default row size\"\n position={\"item-aligned\"}\n onChange={handleChange}\n value={values.defaultSize ?? \"\"}\n renderValue={(value: any) => 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 <div className={\"col-span-12\"}>\n <Select\n name=\"customId\"\n label=\"Data IDs generation\"\n position={\"item-aligned\"}\n disabled={customIdValue === \"code_defined\"}\n onValueChange={(v) => {\n if (v === \"code_defined\")\n throw new Error(\"This should not happen\");\n else if (v === \"true\")\n setFieldValue(\"customId\", true);\n else if (v === \"false\")\n setFieldValue(\"customId\", false);\n else if (v === \"optional\")\n setFieldValue(\"customId\", \"optional\");\n }}\n value={customIdValue ?? \"\"}\n renderValue={(value: any) => {\n if (value === \"code_defined\")\n return \"Code defined\";\n else if (value === \"true\")\n return \"Users must define an ID\";\n else if (value === \"optional\")\n return \"Users can define an ID, but it is not required\";\n else\n return \"Document ID is generated automatically\";\n }}\n >\n <SelectItem value={\"false\"}>\n Document ID is generated automatically\n </SelectItem>\n <SelectItem value={\"true\"}>\n Users must define an ID\n </SelectItem>\n <SelectItem value={\"optional\"}>\n Users can define an ID, but it is not required\n </SelectItem>\n </Select>\n </div>\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label=\"Collection group\"\n onValueChange={(v) => setFieldValue(\"collectionGroup\", v)}\n value={values.collectionGroup ?? false}\n />\n <FieldCaption>\n A collection group consists of all collections with the same path. This allows\n you\n to query over multiple collections at once.\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label=\"Enable text search for this collection\"\n onValueChange={(v) => setFieldValue(\"textSearchEnabled\", v)}\n value={values.textSearchEnabled ?? false}\n />\n <FieldCaption>\n Allow text search for this collection. If you have not specified a text search\n delegate, this will use the built-in local text search. This is not recommended\n for large collections, as it may incur in performance and cost issues.\n </FieldCaption>\n </div>\n </div>\n </ExpandablePanel>\n\n </div>\n\n </div>\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={values.icon}\n onIconSelected={(icon: string) => {\n setIconDialogOpen(false);\n setFieldValue(\"icon\", icon);\n }}/>\n </div>\n\n </Dialog>\n\n </Container>\n </div>\n );\n}\n","export function idToPropertiesPath(id: string): string {\n return \"properties.\" + id.replaceAll(\".\", \".properties.\");\n}\n\nexport function namespaceToPropertiesPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".properties\"\n : \"properties\";\n}\n\nexport function namespaceToPropertiesOrderPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".propertiesOrder\"\n : \"propertiesOrder\";\n}\n\nexport function getFullId(propertyKey: string, propertyNamespace?: string): string {\n return propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n}\n\nexport function getFullIdPath(propertyKey: string, propertyNamespace?: string): string {\n const keyWithNamespace = propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n return idToPropertiesPath(keyWithNamespace);\n}\n","import React, { useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { ArrayContainer, EnumValueConfig, EnumValues, FieldCaption, } from \"@firecms/core\";\nimport {\n AutoAwesomeIcon,\n Badge,\n Button,\n CircularProgress,\n DebouncedTextField,\n Dialog,\n DialogActions,\n DialogContent,\n IconButton,\n ListIcon,\n Paper,\n SettingsIcon,\n Typography\n} from \"@firecms/ui\";\nimport { extractEnumFromValues } from \"@firecms/schema_inference\";\nimport { Field, Formex, getIn, useCreateFormex, useFormex } from \"@firecms/formex\";\n\ntype EnumFormProps = {\n enumValues: EnumValueConfig[];\n onValuesChanged?: (enumValues: EnumValueConfig[]) => void;\n onError?: (error: boolean) => void;\n updateIds: boolean;\n disabled: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<string[]>;\n};\n\nexport function EnumForm({\n enumValues,\n onValuesChanged,\n onError,\n updateIds,\n disabled,\n allowDataInference,\n getData\n }: EnumFormProps) {\n\n const formex = useCreateFormex<{\n enumValues: EnumValueConfig[]\n }>({\n initialValues: { enumValues },\n validateOnChange: true,\n validation: (values) => {\n const errors: any = {};\n if (values.enumValues) {\n values.enumValues.forEach((enumValue, index) => {\n if (!enumValue?.label) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].label = \"You must specify a label for this enum value entry\";\n }\n if (!enumValue?.id) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].id = \"You must specify an ID for this enum value entry\";\n }\n });\n }\n const hasError = Boolean(errors?.enumValues && Object.keys(errors?.enumValues).length > 0);\n onError?.(hasError);\n return errors;\n }\n });\n\n const { values, errors } = formex;\n\n useEffect(() => {\n if (onValuesChanged) {\n onValuesChanged(values.enumValues);\n }\n }, [values.enumValues]);\n\n return <Formex value={formex}>\n <EnumFormFields enumValuesPath={\"enumValues\"}\n values={values}\n errors={errors}\n shouldUpdateId={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}/>\n </Formex>\n\n}\n\ntype EnumFormFieldsProps = {\n values: {\n enumValues: EnumValueConfig[]\n };\n errors: any;\n enumValuesPath: string;\n shouldUpdateId: boolean;\n disabled: boolean;\n getData?: () => Promise<string[]>;\n allowDataInference?: boolean;\n};\n\n// const EnumFormFields = React.memo(\nfunction EnumFormFields({\n values,\n errors,\n disabled,\n enumValuesPath,\n shouldUpdateId,\n allowDataInference,\n getData,\n }: EnumFormFieldsProps) {\n\n const {\n setFieldValue\n } = useFormex();\n\n const [lastInternalIdAdded, setLastInternalIdAdded] = React.useState<number | undefined>();\n const [editDialogIndex, setEditDialogIndex] = React.useState<number | undefined>();\n const [inferring, setInferring] = React.useState(false);\n\n const inferredValuesRef = React.useRef(new Set());\n const inferredValues = inferredValuesRef.current;\n\n const buildEntry = (index: number, internalId: number) => {\n const justAdded = lastInternalIdAdded === internalId;\n const entryError = errors?.enumValues && errors?.enumValues[index];\n return <EnumEntry index={index}\n disabled={disabled}\n enumValuesPath={enumValuesPath}\n autoFocus={justAdded}\n entryError={entryError}\n shouldUpdateId={shouldUpdateId || justAdded}\n onDialogOpen={() => setEditDialogIndex(index)}\n inferredEntry={inferredValues.has(values.enumValues[index]?.id as string)}\n key={`${internalId}`}/>;\n };\n\n const inferValues = async () => {\n if (!getData)\n return;\n setInferring(true);\n getData?.().then((data) => {\n if (!data)\n return;\n\n const flatData = data.flat();\n\n const fieldData = Array.from(new Set(flatData));\n\n const currentEnumValues = values.enumValues;\n const foundEnumValues = extractEnumFromValues(fieldData);\n\n // add only new enum values\n const newEnumValues = foundEnumValues.filter((enumValue) => {\n return !currentEnumValues?.some((v: any) => v.id === enumValue.id);\n });\n\n newEnumValues.forEach((enumValue) => {\n inferredValues.add(enumValue.id);\n });\n setFieldValue(enumValuesPath, [...newEnumValues, ...currentEnumValues], true);\n }).catch(e => {\n console.error(e);\n })\n .finally(() => setInferring(false));\n }\n\n return (\n <div className={\"col-span-12\"}>\n <div className=\"ml-3.5 flex flex-row items-center\">\n <ListIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2 grow\">\n Values\n </Typography>\n {allowDataInference &&\n <Button loading={inferring}\n disabled={disabled || inferring}\n variant={\"text\"}\n size={\"small\"}\n onClick={inferValues}>\n {inferring ? <CircularProgress size={\"small\"}/> : <AutoAwesomeIcon/>}\n Infer values from data\n </Button>}\n </div>\n\n <Paper className=\"p-4 m-1\">\n\n <ArrayContainer droppableId={enumValuesPath}\n addLabel={\"Add enum value\"}\n value={values.enumValues}\n disabled={disabled}\n size={\"small\"}\n buildEntry={buildEntry}\n onInternalIdAdded={setLastInternalIdAdded}\n includeAddButton={true}\n onValueChange={(value) => setFieldValue(enumValuesPath, value)}\n newDefaultEntry={{ id: \"\", label: \"\" }}/>\n\n <EnumEntryDialog index={editDialogIndex}\n open={editDialogIndex !== undefined}\n enumValuesPath={enumValuesPath}\n onClose={() => setEditDialogIndex(undefined)}/>\n </Paper>\n </div>\n );\n}\n\ntype EnumEntryProps = {\n index: number,\n enumValuesPath: string,\n shouldUpdateId: boolean,\n autoFocus: boolean,\n onDialogOpen: () => void;\n disabled: boolean;\n inferredEntry?: boolean;\n entryError?: { label?: string, id?: string }\n};\n\nconst EnumEntry = React.memo(\n function EnumEntryInternal({\n index,\n shouldUpdateId: updateId,\n enumValuesPath,\n autoFocus,\n onDialogOpen,\n disabled,\n inferredEntry,\n entryError\n }: EnumEntryProps) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<EnumValues>();\n\n const shouldUpdateIdRef = React.useRef(!getIn(values, `${enumValuesPath}[${index}].id`));\n const shouldUpdateId = updateId || shouldUpdateIdRef.current;\n\n const idValue = getIn(values, `${enumValuesPath}[${index}].id`);\n const labelValue = getIn(values, `${enumValuesPath}[${index}].label`);\n\n const currentLabelRef = React.useRef(labelValue);\n\n React.useEffect(() => {\n if ((currentLabelRef.current === idValue || !idValue) && shouldUpdateId) {\n setFieldValue(`${enumValuesPath}[${index}].id`, labelValue);\n }\n currentLabelRef.current = labelValue;\n }, [labelValue]);\n\n return (\n <>\n <div className={\"flex w-full align-center justify-center\"}>\n <Field name={`${enumValuesPath}[${index}].label`}\n as={DebouncedTextField}\n className={\"flex-grow\"}\n required\n disabled={disabled}\n size=\"small\"\n autoFocus={autoFocus}\n autoComplete=\"off\"\n endAdornment={inferredEntry && <AutoAwesomeIcon size={\"small\"}/>}\n error={Boolean(entryError?.label)}/>\n\n {!disabled &&\n <Badge color={\"error\"} invisible={!entryError?.id}>\n <IconButton\n size=\"small\"\n aria-label=\"edit\"\n className={\"m-1\"}\n onClick={() => onDialogOpen()}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Badge>}\n\n </div>\n\n {entryError?.label && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.label}\n </Typography>}\n\n {entryError?.id && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.id}\n </Typography>}\n\n </>);\n },\n function areEqual(prevProps: EnumEntryProps, nextProps: EnumEntryProps) {\n return prevProps.index === nextProps.index &&\n prevProps.enumValuesPath === nextProps.enumValuesPath &&\n prevProps.shouldUpdateId === nextProps.shouldUpdateId &&\n prevProps.inferredEntry === nextProps.inferredEntry &&\n equal(prevProps.entryError, nextProps.entryError) &&\n prevProps.autoFocus === nextProps.autoFocus;\n }\n);\n\nfunction EnumEntryDialog({\n index,\n open,\n onClose,\n enumValuesPath\n }: {\n index?: number;\n open: boolean;\n enumValuesPath: string;\n onClose: () => void;\n}) {\n\n const {\n errors,\n } = useFormex<EnumValues>();\n\n const idError = index !== undefined ? getIn(errors, `${enumValuesPath}[${index}].id`) : undefined;\n return <Dialog\n maxWidth=\"md\"\n aria-labelledby=\"enum-edit-dialog\"\n open={open}\n onOpenChange={(open) => !open ? onClose() : undefined}\n >\n\n <DialogContent>\n {index !== undefined &&\n <div>\n <Field name={`${enumValuesPath}[${index}].id`}\n as={DebouncedTextField}\n required\n label={\"ID\"}\n size=\"small\"\n autoComplete=\"off\"\n error={Boolean(idError)}/>\n\n <FieldCaption error={Boolean(idError)}>\n {idError ?? \"Value saved in the data source\"}\n </FieldCaption>\n </div>}\n </DialogContent>\n\n <DialogActions>\n <Button\n autoFocus\n variant=\"outlined\"\n onClick={onClose}\n color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n\n </Dialog>\n}\n\n","import React from \"react\";\n\nimport { BooleanSwitchWithLabel, Tooltip } from \"@firecms/ui\";\nimport { FormexFieldProps } from \"@firecms/formex\";\n\nexport function SwitchControl({\n field,\n form,\n label,\n tooltip,\n disabled,\n size = \"small\",\n allowIndeterminate\n }: FormexFieldProps & {\n label: string,\n tooltip?: string,\n disabled?: boolean,\n size?: \"small\" | \"medium\",\n allowIndeterminate?: boolean\n}) {\n\n const formControlLabel = <BooleanSwitchWithLabel\n label={label}\n size={size}\n position={\"start\"}\n value={field.value}\n disabled={disabled}\n allowIndeterminate={allowIndeterminate}\n onValueChange={(checked:boolean | null) => form.setFieldValue(field.name, checked)}/>;\n\n if (tooltip)\n return (\n <Tooltip\n title={tooltip}>\n {formControlLabel}\n </Tooltip>\n );\n return formControlLabel;\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function GeneralPropertyValidation({ disabled }: {\n required?: boolean;\n disabled: boolean;\n}) {\n\n const { values, handleChange } = useFormex();\n\n const validationRequired = \"validation.required\";\n const validationRequiredMessage = \"validation.requiredMessage\";\n const validationUnique = \"validation.unique\";\n const validationUniqueInArray = \"validation.uniqueInArray\";\n\n return (\n <>\n <div className={\"col-span-6\"}>\n <Field name={validationRequired}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={\"Required\"}\n tooltip={\"You won't be able to save this entity if this value is not set\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-6\"}>\n\n <Field name={validationUnique}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={\"Unique\"}\n tooltip={\"There cannot be multiple entities with the same value\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n {getIn(values, validationRequired) && <div className={\"col-span-12\"}>\n <DebouncedTextField\n disabled={disabled}\n value={getIn(values, validationRequiredMessage)}\n label={\"Required message\"}\n name={validationRequiredMessage}\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, serializeRegExp } from \"@firecms/core\";\nimport { DebouncedTextField, } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function StringPropertyValidation({\n length,\n lowercase,\n matches,\n max,\n min,\n trim,\n uppercase,\n disabled,\n showErrors\n }: {\n length?: boolean;\n min?: boolean;\n max?: boolean;\n trim?: boolean;\n matches?: boolean;\n lowercase?: boolean;\n uppercase?: boolean;\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const {\n values,\n handleChange,\n errors\n } = useFormex();\n\n const validationLength = \"validation.length\";\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationTrim = \"validation.trim\";\n const validationMatches = \"validation.matches\";\n const validationLowercase = \"validation.lowercase\";\n const validationUppercase = \"validation.uppercase\";\n\n const matchesError = getIn(errors, validationMatches);\n\n const matchesValue = getIn(values, validationMatches);\n const matchesStringValue = typeof matchesValue === \"string\" ? matchesValue : serializeRegExp(matchesValue);\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n\n {lowercase && <div className={\"col-span-4\"}>\n <Field name={validationLowercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Lowercase\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {uppercase && <div className={\"col-span-4\"}>\n <Field name={validationUppercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Uppercase\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {trim && <div className={\"col-span-4\"}>\n <Field name={validationTrim}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Trim\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n </div>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n {length && <div className={\"col-span-4\"}>\n <DebouncedTextField\n value={getIn(values, validationLength)}\n label={\"Exact length\"}\n name={validationLength}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {min && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n label={\"Min length\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {max && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n label={\"Max length\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n </div>\n\n {matches && <div className={\"col-span-12\"}>\n <Field name={validationMatches}\n as={DebouncedTextField}\n label={\"Matches regex\"}\n size=\"small\"\n disabled={disabled}\n value={matchesStringValue}\n error={Boolean(matchesError)}/>\n <FieldCaption error={Boolean(matchesError)}>\n {matchesError ? \"Not a valid regexp\" : \"e.g. /^\\\\d+$/ for digits only\"}\n </FieldCaption>\n </div>}\n\n </div>\n );\n\n}\n","import React from \"react\";\n\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\n\nexport function ArrayPropertyValidation({\n max = true,\n min = true,\n disabled\n }: {\n min?: boolean;\n max?: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n {min && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n disabled={disabled}\n label={\"Min length\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n {max && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n disabled={disabled}\n label={\"Max length\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\n\nimport { ExpandablePanel, RuleIcon, Typography } from \"@firecms/ui\";\n\nexport function ValidationPanel({\n children\n }: PropsWithChildren<{}>) {\n\n return (\n <ExpandablePanel\n initiallyExpanded={false}\n asField={true}\n className=\"p-4\"\n title={\n <div className=\"flex flex-row text-gray-500\">\n <RuleIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n Validation\n </Typography>\n </div>\n }>\n\n {children}\n\n </ExpandablePanel>\n )\n}\n","import React, { useMemo } from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { EnumValueConfig, resolveEnumValues, useSnackbarController } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\nimport { EnumForm } from \"../EnumForm\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { PropertyWithId } from \"../PropertyEditView\";\n\nexport function EnumPropertyField({\n multiselect,\n updateIds,\n disabled,\n showErrors,\n allowDataInference,\n getData\n }: {\n multiselect: boolean;\n updateIds: boolean;\n disabled: boolean;\n showErrors: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<object[]>;\n}) {\n\n const {\n values,\n setFieldError,\n setFieldValue\n } = useFormex<PropertyWithId>();\n\n const snackbarContext = useSnackbarController();\n\n const enumValuesPath = multiselect ? \"of.enumValues\" : \"enumValues\";\n\n const defaultValue = getIn(values, \"defaultValue\");\n\n const valuesEnumValues = getIn(values, enumValuesPath);\n const enumValues: EnumValueConfig[] = useMemo(() => {\n if (!valuesEnumValues || typeof valuesEnumValues === \"boolean\")\n return [] as EnumValueConfig[];\n return resolveEnumValues(valuesEnumValues) ?? [] as EnumValueConfig[];\n }, [valuesEnumValues]);\n\n const onValuesChanged = (value: EnumValueConfig[]) => {\n if (!values)\n return;\n setFieldValue(enumValuesPath, value);\n if (!multiselect) {\n const enumIds = value.filter(v => Boolean(v?.id)).map((v: any) => v.id);\n if (defaultValue && !enumIds.includes(defaultValue)) {\n setFieldValue(\"defaultValue\", undefined);\n snackbarContext.open({\n type: \"warning\",\n message: \"Default value was cleared\"\n })\n }\n }\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <EnumForm enumValues={enumValues}\n updateIds={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n onError={(hasError) => {\n setFieldError(enumValuesPath, hasError ? \"This enum property is missing some values\" : undefined);\n }}\n getData={getData\n ? () => getData()\n .then(res => res.map(d => values.id && getIn(d, values.id)).filter(Boolean))\n : undefined}\n onValuesChanged={onValuesChanged}/>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiselect &&\n <StringPropertyValidation disabled={disabled}\n showErrors={showErrors}/>}\n {multiselect &&\n <ArrayPropertyValidation disabled={disabled}/>}\n </ValidationPanel>\n\n </div>\n\n {!multiselect && <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n onValueChange={(value: string) => {\n setFieldValue(\"defaultValue\", value);\n }}\n label={\"Default value\"}\n value={defaultValue ?? \"\"}>\n {enumValues\n .filter((enumValue) => Boolean(enumValue?.id))\n .map((enumValue) => (\n <SelectItem key={enumValue.id}\n value={enumValue.id?.toString()}>\n {enumValue.label}\n </SelectItem>\n ))}\n </Select>\n\n </div>}\n </>\n );\n}\n","import React from \"react\";\nimport {\n Button,\n Checkbox,\n DebouncedTextField,\n ExpandablePanel,\n FileUploadIcon,\n MultiSelect,\n MultiSelectItem,\n Typography\n} from \"@firecms/ui\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nconst fileTypes: Record<string, string> = {\n \"image/*\": \"Images\",\n \"video/*\": \"Videos\",\n \"audio/*\": \"Audio files\",\n \"application/*\": \"Files (pdf, zip, csv, excel...)\",\n \"text/*\": \"Text files\"\n}\n\nexport function StoragePropertyField({\n multiple,\n existing,\n disabled\n }: {\n multiple: boolean;\n existing: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex();\n\n const baseStoragePath = multiple ? \"of.storage\" : \"storage\";\n const acceptedFiles = `${baseStoragePath}.acceptedFiles`;\n\n const metadata = `${baseStoragePath}.metadata`;\n const fileName = `${baseStoragePath}.fileName`;\n const storagePath = `${baseStoragePath}.storagePath`;\n const storeUrl = `${baseStoragePath}.storeUrl`;\n\n const fileNameValue = getIn(values, fileName) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\n\n const storedValue = getIn(values, acceptedFiles);\n const fileTypesValue: string[] | undefined = Array.isArray(storedValue) ? storedValue : undefined;\n const allFileTypesSelected = !fileTypesValue || fileTypesValue.length === 0;\n\n const handleTypesChange = (value: string[]) => {\n if (!value) setFieldValue(acceptedFiles, undefined);\n else if (value.includes(\"all\")) setFieldValue(acceptedFiles, undefined);\n else if (value.length >= Object.keys(fileTypes).length) setFieldValue(acceptedFiles, undefined);\n else if (allFileTypesSelected)\n setFieldValue(acceptedFiles, Object.keys(fileTypes).filter((v) => !value.includes(v)));\n else setFieldValue(acceptedFiles, value);\n };\n\n const hasFilenameCallback = typeof fileNameValue === \"function\";\n const hasStoragePathCallback = typeof storagePathValue === \"function\";\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ExpandablePanel\n title={\n <div className=\"flex flex-row text-gray-500\">\n <FileUploadIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n File upload config\n </Typography>\n </div>\n }>\n\n <div className={\"grid grid-cols-12 gap-2 p-4\"}>\n\n <div className={\"col-span-12\"}>\n\n <MultiSelect\n disabled={disabled}\n name={acceptedFiles}\n value={fileTypesValue ?? []}\n onMultiValueChange={handleTypesChange}\n label={allFileTypesSelected ? undefined : \"Allowed file types\"}\n renderValues={(selected) => {\n if (!selected || selected.length === 0) return \"All file types allowed\";\n return selected.map((v: string) => fileTypes[v])\n .filter((v: string) => Boolean(v))\n .join(\", \");\n }}>\n\n <MultiSelectItem key={\"all\"} value={\"all\"} className={\"flex items-center gap-2\"}>\n <Checkbox\n checked={!fileTypesValue}/>\n All\n </MultiSelectItem>\n\n {Object.entries(fileTypes).map(([value, label]) => (\n <MultiSelectItem key={value} value={value} className={\"flex items-center gap-2\"}>\n <Checkbox\n checked={allFileTypesSelected || fileTypesValue.indexOf(value) > -1}/>\n <div className={\"flex-grow\"}>\n {label}\n </div>\n <Button size={\"small\"}\n variant={\"outlined\"}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n return setFieldValue(acceptedFiles, [value]);\n }}>\n Only\n </Button>\n </MultiSelectItem>\n ))}\n\n </MultiSelect>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={\"File name\"}\n size={\"small\"}\n disabled={hasFilenameCallback || disabled}\n value={hasFilenameCallback ? \"-\" : fileNameValue}\n />\n </div>\n <div className={\"col-span-12\"}>\n <Field name={storagePath}\n as={DebouncedTextField}\n label={\"Storage path\"}\n disabled={hasStoragePathCallback || disabled}\n size={\"small\"}\n value={hasStoragePathCallback ? \"-\" : storagePathValue}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n <p>You can use the following placeholders in\n the file name\n and storage path values:</p>\n <ul>\n <li>{\"{file} - Full name of the uploaded file\"}</li>\n <li>{\"{file.name} - Name of the uploaded file without extension\"}</li>\n <li>{\"{file.ext} - Extension of the uploaded file\"}</li>\n <li>{\"{entityId} - ID of the entity\"}</li>\n <li>{\"{propertyKey} - ID of this field\"}</li>\n <li>{\"{path} - Path of this entity\"}</li>\n <li>{\"{rand} - Random value used to avoid name collisions\"}</li>\n </ul>\n </Typography>\n\n <Field name={storeUrl}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Save URL instead of storage path\"}\n disabled={existing || disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n Turn this setting on, if you prefer to save\n the download\n URL of the uploaded file instead of the\n storage path.\n You can only change this prop upon creation.\n </Typography>\n </div>\n </div>\n </ExpandablePanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiple && <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n </div>}\n {multiple && <div className={\"col-span-12\"}>\n <ArrayPropertyValidation disabled={disabled}/>\n </div>}\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { isPropertyBuilder, Properties, PropertiesOrBuilders, Property, PropertyOrBuilder } from \"@firecms/core\";\n\nexport function editableProperty(property: PropertyOrBuilder | PropertyOrBuilder): boolean {\n if (isPropertyBuilder(property))\n return false;\n if (isPropertyBuilder(property as PropertyOrBuilder))\n return false;\n else {\n const eProperty = property as Property;\n if (eProperty.dataType === \"array\" && typeof eProperty.of === \"function\")\n return false;\n else if (eProperty.dataType === \"array\" && Array.isArray(eProperty.of))\n return false;\n return Boolean(eProperty.editable);\n }\n}\n\nexport function removeNonEditableProperties(properties: PropertiesOrBuilders<any>): Properties {\n return Object.entries(properties)\n .filter(([_, property]) => editableProperty(property))\n .map(([key, propertyOrBuilder]) => {\n const property = propertyOrBuilder as Property;\n if (!editableProperty(property)) {\n return undefined;\n } else if (property.dataType === \"map\" && property.properties) {\n return {\n [key]: {\n ...property,\n properties: removeNonEditableProperties(property.properties as PropertiesOrBuilders)\n }\n };\n } else {\n return { [key]: property };\n }\n })\n .filter((e) => Boolean(e))\n .reduce((a, b) => ({ ...a, ...b }), {}) as Properties;\n}\n","import {\n ErrorBoundary,\n PropertyConfigBadge,\n getFieldConfig,\n isPropertyBuilder,\n Property,\n PropertyOrBuilder,\n useCustomizationController,\n} from \"@firecms/core\";\nimport {\n cardClickableMixin,\n cardMixin,\n cardSelectedMixin,\n cn,\n FunctionsIcon,\n Paper,\n RemoveCircleIcon,\n Typography,\n} from \"@firecms/ui\";\n\nimport { editableProperty } from \"../../utils/entities\";\n\nexport function PropertyFieldPreview({\n property,\n onClick,\n hasError,\n includeName,\n includeEditButton,\n selected\n }: {\n property: Property,\n hasError?: boolean,\n selected?: boolean,\n includeName?: boolean,\n includeEditButton?: boolean;\n onClick?: () => void\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = getFieldConfig(property, propertyConfigs);\n const disabled = !editableProperty(property);\n\n const borderColorClass = hasError\n ? \"border-red-500 dark:border-red-500 border-opacity-100 dark:border-opacity-100 ring-0 dark:ring-0\"\n : (selected ? \"border-primary\" : \"border-transparent\");\n\n if(hasError)\n console.log(\"PropertyFieldPreview\", property)\n\n return <ErrorBoundary>\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"m-4\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <Paper\n className={cn(\n \"border\",\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n borderColorClass\n )}\n >\n\n <div className=\"w-full flex flex-col\">\n\n {includeName &&\n <ErrorBoundary>\n <Typography variant=\"body1\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property.name\n ? property.name\n : \"\\u00a0\"\n }\n </Typography>\n </ErrorBoundary>}\n\n <div className=\"flex flex-row items-center\">\n <ErrorBoundary>\n <Typography className=\"flex-grow pr-2\"\n variant={includeName ? \"body2\" : \"subtitle1\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>\n </ErrorBoundary>\n <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>\n\n </div>\n </div>\n\n {includeEditButton && <Typography variant={\"button\"}>\n EDIT\n </Typography>}\n\n </Paper>\n </div>\n </ErrorBoundary>\n}\n\nexport function NonEditablePropertyPreview({\n name,\n selected,\n onClick,\n property\n }: {\n name: string,\n selected: boolean,\n onClick?: () => void,\n property?: PropertyOrBuilder\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = !isPropertyBuilder(property) && property ? getFieldConfig(property, propertyConfigs) : undefined;\n\n return (\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"relative m-4\"}>\n {propertyConfig && <PropertyConfigBadge propertyConfig={propertyConfig}/>}\n {!propertyConfig && <div\n className={\"h-8 w-8 p-1 rounded-full shadow text-white bg-gray-500\"}>\n <FunctionsIcon color={\"inherit\"} size={\"medium\"}/>\n </div>}\n <RemoveCircleIcon color={\"disabled\"} size={\"small\"} className={\"absolute -right-2 -top-2\"}/>\n </div>\n <Paper\n className={cn(\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n selected ? \"border-primary\" : \"border-transparent\")}\n >\n\n <div className=\"w-full flex flex-col\">\n <Typography variant=\"body1\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property?.name\n ? property.name\n : name\n }\n </Typography>\n\n <div className=\"flex flex-row items-center\">\n {propertyConfig && <Typography className=\"flex-grow pr-2\"\n variant={\"body2\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>}\n\n {property && !isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>}\n\n {property && isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This property is defined as a property builder in code\n </Typography>\n </ErrorBoundary>}\n\n {!property && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This field is defined as an additional field in code\n </Typography>\n </ErrorBoundary>}\n\n </div>\n\n {/*<div className=\"flex flex-row text-xs\">*/}\n {/* <Typography className=\"flex-grow pr-2\"*/}\n {/* variant=\"body2\"*/}\n {/* component=\"span\"*/}\n {/* color=\"secondary\">*/}\n {/* This field can only be edited in code*/}\n {/* </Typography>*/}\n {/*</div>*/}\n </div>\n\n </Paper>\n </div>)\n}\n","import React, { useCallback } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport {\n AdditionalFieldDelegate,\n CMSType,\n ErrorBoundary,\n isPropertyBuilder,\n PropertiesOrBuilders,\n PropertyOrBuilder\n} from \"@firecms/core\";\nimport { AutoAwesomeIcon, defaultBorderMixin, DragHandleIcon, IconButton, RemoveIcon, Tooltip } from \"@firecms/ui\";\nimport { NonEditablePropertyPreview, PropertyFieldPreview } from \"./PropertyFieldPreview\";\nimport { DragDropContext, Draggable, DraggableProvided, Droppable } from \"@hello-pangea/dnd\";\nimport { getFullId, getFullIdPath } from \"./util\";\nimport { editableProperty } from \"../../utils/entities\";\n\nexport const PropertyTree = React.memo(\n function PropertyTree<M extends {\n [Key: string]: CMSType\n }>({\n namespace,\n selectedPropertyKey,\n onPropertyClick,\n properties,\n propertiesOrder: propertiesOrderProp,\n additionalFields,\n errors,\n onPropertyMove,\n onPropertyRemove,\n className,\n inferredPropertyKeys,\n collectionEditable\n }: {\n namespace?: string;\n selectedPropertyKey?: string;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n properties: PropertiesOrBuilders<M>;\n propertiesOrder?: string[];\n additionalFields?: AdditionalFieldDelegate<M>[];\n errors: Record<string, any>;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n className?: string;\n inferredPropertyKeys?: string[];\n collectionEditable: boolean;\n }) {\n\n const propertiesOrder = propertiesOrderProp ?? Object.keys(properties);\n\n const onDragEnd = useCallback((result: any) => {\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n const startIndex = result.source.index;\n const endIndex = result.destination.index;\n\n const newPropertiesOrder = Array.from(propertiesOrder);\n const [removed] = newPropertiesOrder.splice(startIndex, 1);\n newPropertiesOrder.splice(endIndex, 0, removed);\n if (onPropertyMove)\n onPropertyMove(newPropertiesOrder, namespace);\n }, [namespace, onPropertyMove, propertiesOrder])\n\n return (\n <>\n\n <DragDropContext onDragEnd={onDragEnd}>\n <Droppable droppableId={`droppable_${namespace}`}>\n {(droppableProvided, droppableSnapshot) => (\n <div\n {...droppableProvided.droppableProps}\n ref={droppableProvided.innerRef}\n className={className}>\n {propertiesOrder && propertiesOrder\n .map((propertyKey: string, index: number) => {\n const property = properties[propertyKey] as PropertyOrBuilder;\n const additionalField = additionalFields?.find(field => field.key === propertyKey);\n\n if (!property && !additionalField) {\n console.warn(`Property ${propertyKey} not found in properties or additionalFields`);\n return null;\n }\n return (\n <Draggable\n key={`array_field_${namespace}_${propertyKey}}`}\n draggableId={`array_field_${namespace}_${propertyKey}}`}\n index={index}>\n {(provided, snapshot) => {\n return (\n <ErrorBoundary>\n <PropertyTreeEntry\n propertyKey={propertyKey as string}\n propertyOrBuilder={property}\n additionalField={additionalField}\n provided={provided}\n errors={errors}\n namespace={namespace}\n inferredPropertyKeys={inferredPropertyKeys}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n onPropertyClick={snapshot.isDragging ? undefined : onPropertyClick}\n selectedPropertyKey={selectedPropertyKey}\n collectionEditable={collectionEditable}\n />\n </ErrorBoundary>\n );\n }}\n </Draggable>);\n }).filter(Boolean)}\n\n {droppableProvided.placeholder}\n\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n </>\n );\n },\n (prevProps, nextProps) => {\n\n const isSelected = nextProps.selectedPropertyKey?.startsWith(nextProps.namespace ?? \"\");\n const wasSelected = prevProps.selectedPropertyKey?.startsWith(prevProps.namespace ?? \"\");\n if (isSelected || wasSelected)\n return false;\n\n return equal(prevProps.properties, nextProps.properties) &&\n prevProps.propertiesOrder === nextProps.propertiesOrder &&\n equal(prevProps.additionalFields, nextProps.additionalFields) &&\n equal(prevProps.errors, nextProps.errors) &&\n equal(prevProps.onPropertyClick, nextProps.onPropertyClick) &&\n // equal(prevProps.onPropertyMove, nextProps.onPropertyMove) &&\n // equal(prevProps.onPropertyRemove, nextProps.onPropertyRemove) &&\n prevProps.namespace === nextProps.namespace &&\n prevProps.collectionEditable === nextProps.collectionEditable;\n }\n);\n\nexport function PropertyTreeEntry({\n propertyKey,\n namespace,\n propertyOrBuilder,\n additionalField,\n provided,\n selectedPropertyKey,\n errors,\n onPropertyClick,\n onPropertyMove,\n onPropertyRemove,\n inferredPropertyKeys,\n collectionEditable\n }: {\n propertyKey: string;\n namespace?: string;\n propertyOrBuilder: PropertyOrBuilder;\n additionalField?: AdditionalFieldDelegate<any>;\n selectedPropertyKey?: string;\n provided: DraggableProvided;\n errors: Record<string, any>;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n inferredPropertyKeys?: string[];\n collectionEditable: boolean;\n}) {\n\n const isPropertyInferred = inferredPropertyKeys?.includes(namespace ? `${namespace}.${propertyKey}` : propertyKey);\n const fullId = getFullId(propertyKey, namespace);\n const fullIdPath = getFullIdPath(propertyKey, namespace);\n const hasError = fullIdPath in errors;\n\n let subtree;\n if (typeof propertyOrBuilder === \"object\") {\n const property = propertyOrBuilder;\n if (property.dataType === \"map\" && property.properties) {\n subtree = <PropertyTree\n selectedPropertyKey={selectedPropertyKey}\n namespace={fullId}\n properties={property.properties}\n propertiesOrder={property.propertiesOrder}\n errors={errors}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n collectionEditable={collectionEditable}\n />\n }\n }\n\n // const hasError = fullId ? getIn(errors, idToPropertiesPath(fullId)) : false;\n const selected = selectedPropertyKey === fullId;\n const editable = propertyOrBuilder && ((collectionEditable && !isPropertyBuilder(propertyOrBuilder)) || editableProperty(propertyOrBuilder));\n\n return (\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className=\"relative -ml-8\"\n >\n {subtree && <div\n className={\"absolute border-l \" + defaultBorderMixin}\n style={{\n left: \"32px\",\n top: \"64px\",\n bottom: \"16px\"\n }}/>}\n\n {!isPropertyBuilder(propertyOrBuilder) && !additionalField && editable\n ? <PropertyFieldPreview\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n includeName={true}\n selected={selected}\n hasError={hasError}/>\n : <NonEditablePropertyPreview name={propertyKey}\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n selected={selected}/>}\n\n <div className=\"absolute top-2 right-2 flex flex-row \">\n\n {isPropertyInferred && <Tooltip title={\"Inferred property\"}>\n <AutoAwesomeIcon size=\"small\" className={\"p-2\"}/>\n </Tooltip>}\n\n {onPropertyRemove && <Tooltip title={\"Remove\"}>\n <IconButton size=\"small\"\n color=\"inherit\"\n onClick={() => onPropertyRemove(propertyKey, namespace)}>\n <RemoveIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>}\n\n {onPropertyMove && <Tooltip title={\"Move\"}>\n <IconButton\n component={\"span\"}\n size=\"small\"\n >\n <DragHandleIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>}\n </div>\n\n {subtree && <div className={\"ml-16\"}>{subtree}</div>}\n </div>\n );\n\n}\n","import React, { useCallback, useState } from \"react\";\nimport { FieldCaption, MapProperty, Property, PropertyConfig, } from \"@firecms/core\";\nimport { AddIcon, BooleanSwitchWithLabel, Button, Paper, Typography } from \"@firecms/ui\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath, namespaceToPropertiesPath } from \"../util\";\n\nexport function MapPropertyField({ disabled, getData, allowDataInference, propertyConfigs, collectionEditable }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<MapProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const propertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const onPropertyCreated = ({\n id,\n property\n }: { id?: string, property: Property }) => {\n if (!id)\n throw Error();\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const currentPropertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"propertiesOrder\", newPropertiesOrder, false);\n\n setPropertyDialogOpen(false);\n };\n\n const deleteProperty = useCallback((propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n const propertiesPath = idToPropertiesPath(fullId);\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n const currentPropertiesOrder: string[] = getIn(values, propertiesOrderPath) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\n\n setFieldValue(propertiesPath, undefined, false);\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }, [setFieldValue, values]);\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const empty = !propertiesOrder || propertiesOrder.length < 1;\n\n const onPropertyMove = useCallback((propertiesOrder: string[], namespace?: string) => {\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n }, []);\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className=\"flex justify-between items-end my-4\">\n <Typography variant={\"subtitle2\"}>Properties in this group</Typography>\n <Button\n color=\"primary\"\n variant={\"outlined\"}\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\n >\n Add property to {values.name ?? \"this group\"}\n </Button>\n </div>\n <Paper className=\"p-2 pl-8\">\n <PropertyTree\n properties={values.properties ?? {}}\n propertiesOrder={propertiesOrder}\n errors={{}}\n collectionEditable={collectionEditable}\n onPropertyClick={(propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={onPropertyMove}/>\n\n {empty &&\n <Typography variant={\"label\"}\n className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this group\n </Typography>}\n </Paper>\n </div>\n\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"small\"}\n label=\"Spread children as columns\"\n onValueChange={(v) => setFieldValue(\"spreadChildren\", v)}\n value={values.spreadChildren ?? false}\n />\n <FieldCaption>\n Set this flag to true if you want to display the children of this group as individual columns.\n </FieldCaption>\n </div>\n\n <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n getData={getData}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyCreated}\n existingPropertyKeys={selectedPropertyKey ? undefined : propertiesOrder}\n propertyConfigs={propertyConfigs}\n />\n\n </>);\n}\n","import React, { useState } from \"react\";\nimport { ArrayProperty, getFieldConfig, Property, PropertyConfig } from \"@firecms/core\";\nimport { Button, Paper, Typography } from \"@firecms/ui\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { PropertyFieldPreview } from \"../PropertyFieldPreview\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\nexport function RepeatPropertyField({\n showErrors,\n existing,\n disabled,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n showErrors: boolean,\n existing: boolean,\n disabled: boolean,\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState(false);\n const ofProperty = getIn(values, \"of\");\n const ofPropertyError = getIn(touched, \"of\") && getIn(errors, \"of\");\n\n const onPropertyChanged = ({ id, property, namespace }:\n { id?: string, property: Property, namespace?: string }) => {\n console.log(\"onPropertyChanged\", id, property, namespace);\n setFieldValue(\"of\", property);\n };\n\n const widget = ofProperty && getFieldConfig(ofProperty, propertyConfigs);\n return (\n <>\n <div className={\"col-span-12\"}>\n <Typography variant={\"subtitle2\"}>\n Repeat component\n </Typography>\n <Field\n name={\"of\"}\n value={ofProperty}\n // validate={(property: Property) => {\n // return property?.dataType ? undefined : \"You need to specify a repeat field\";\n // }}\n >\n {({}) => (\n <Paper className=\"p-2 mt-4\">\n\n {ofProperty && <PropertyFieldPreview\n property={ofProperty}\n onClick={disabled ? undefined : () => setPropertyDialogOpen(true)}\n includeName={false}\n includeEditButton={true}\n selected={false}\n hasError={false}/>}\n\n {!disabled && !ofProperty && <Button variant={\"text\"}\n size={\"large\"}\n color={ofPropertyError ? \"error\" : \"primary\"}\n onClick={() => setPropertyDialogOpen(true)}>\n Edit {`${widget ? widget.name : \"repeat component\"}`}\n </Button>}\n\n <PropertyFormDialog\n inArray={true}\n open={propertyDialogOpen}\n existingProperty={existing}\n getData={getData}\n autoUpdateId={!existing}\n autoOpenTypeSelect={!existing}\n onOkClicked={() => setPropertyDialogOpen(false)}\n allowDataInference={allowDataInference}\n property={ofProperty}\n includeIdAndName={false}\n onPropertyChanged={onPropertyChanged}\n forceShowErrors={showErrors}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n />\n </Paper>\n )}\n </Field>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <ArrayPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { PropertyWithId } from \"../PropertyEditView\";\nimport React from \"react\";\nimport { FieldCaption, toSnakeCase, unslugify } from \"@firecms/core\";\n\ntype CommonPropertyFieldsProps = {\n showErrors: boolean,\n disabledId: boolean,\n disabled: boolean;\n isNewProperty: boolean;\n autoUpdateId: boolean;\n};\n\nexport const CommonPropertyFields = React.forwardRef<HTMLDivElement, CommonPropertyFieldsProps>(\n function CommonPropertyFields({\n showErrors,\n disabledId,\n disabled,\n autoUpdateId,\n isNewProperty\n }, ref) {\n\n const {\n errors,\n values,\n setFieldValue,\n setFieldTouched,\n touched,\n validate\n } = useFormex<PropertyWithId>();\n\n const name = \"name\";\n const nameError = showErrors && getIn(errors, name);\n\n const id = \"id\";\n const idError = showErrors && getIn(errors, id);\n\n const description = \"description\";\n const descriptionError = showErrors && getIn(errors, description);\n\n return (\n <div className={\"flex flex-col gap-2 col-span-12\"}>\n\n <div>\n <Field\n name={name}\n inputRef={ref}\n as={DebouncedTextField}\n value={values[name]}\n onChange={(e: any) => {\n const newNameValue = e.target.value;\n const idTouched = getIn(touched, id);\n if (!idTouched && autoUpdateId) {\n setFieldValue(id, newNameValue ? toSnakeCase(newNameValue) : \"\", false)\n }\n setFieldValue(name, newNameValue, true);\n setFieldTouched(name, true);\n }}\n style={{ fontSize: 20 }}\n placeholder={\"Field name\"}\n required\n disabled={disabled}\n error={Boolean(nameError)}/>\n\n <FieldCaption error={Boolean(nameError)}>\n {nameError}\n </FieldCaption>\n </div>\n\n <div>\n <Field\n name={id}\n as={DebouncedTextField}\n label={\"ID\"}\n value={values[id]}\n onChange={(e: any) => {\n const newIdValue = e.target.value;\n const nameTouched = getIn(touched, name);\n if (!nameTouched && autoUpdateId) {\n setFieldValue(name, newIdValue ? unslugify(newIdValue) : \"\")\n }\n setFieldValue(id, newIdValue, true);\n setFieldTouched(id, true);\n }}\n disabled={disabledId || disabled}\n required\n size=\"small\"\n error={Boolean(idError)}/>\n <FieldCaption error={Boolean(idError)}>\n {idError}\n </FieldCaption>\n </div>\n\n <div>\n <Field name={description}\n as={DebouncedTextField}\n label={\"Description\"}\n disabled={disabled}\n error={Boolean(descriptionError)}/>\n <FieldCaption error={Boolean(descriptionError)}>\n {descriptionError}\n </FieldCaption>\n </div>\n\n </div>\n );\n\n }\n);\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { TextField } from \"@firecms/ui\";\n\nexport function StringPropertyField({\n widgetId,\n disabled,\n showErrors\n }: {\n widgetId: \"text_field\" | \"multiline\" | \"markdown\" | \"email\";\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n {widgetId === \"text_field\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n matches={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n {widgetId === \"multiline\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n {widgetId === \"markdown\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n\n {widgetId === \"email\" &&\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>}\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\n\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nexport function BooleanPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n const { values } = useFormex();\n const defaultValue = getIn(values, \"defaultValue\");\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <Field\n name={\"defaultValue\"}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={defaultValue === null || defaultValue === undefined ? \"Default value not set\" : (\"Default value is \" + defaultValue.toString())}\n disabled={disabled}\n allowIndeterminate={true} field={field}\n form={form}/>\n }}\n </Field>\n\n </div>\n </>\n );\n}\n","import React, { useCallback, useState } from \"react\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { ArrayProperty, Property, PropertyConfig } from \"@firecms/core\";\n\nexport function BlockPropertyField({ disabled, getData, allowDataInference, propertyConfigs, collectionEditable }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const onPropertyChanged = ({\n id,\n property\n }: { id?: string, property: Property }) => {\n if (!id)\n throw Error();\n\n setFieldValue(\"oneOf.properties\", {\n ...(values.oneOf?.properties ?? {}),\n [id]: property\n }, false);\n const currentPropertiesOrder = values.oneOf?.propertiesOrder ?? Object.keys(values.oneOf?.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"oneOf.propertiesOrder\", newPropertiesOrder, false);\n setPropertyDialogOpen(false);\n };\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.oneOf?.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const deleteProperty = useCallback((propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(`oneOf.${idToPropertiesPath(fullId)}`, undefined, false);\n const propertiesOrderPath = `oneOf.${namespaceToPropertiesOrderPath(namespace)}`;\n const currentPropertiesOrder: string[] = getIn(values, propertiesOrderPath);\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }, [setFieldValue, values]);\n\n const addChildButton = <Button\n autoFocus\n color=\"primary\"\n\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\n >\n Add property to {values.name ?? \"this block\"}\n </Button>;\n\n const onPropertyMove = useCallback((propertiesOrder: string[], namespace?: string) => {\n setFieldValue(`oneOf.${namespaceToPropertiesOrderPath(namespace)}`, propertiesOrder, false);\n }, []);\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className={\"flex justify-between items-end mt-8 mb-4\"}>\n <Typography variant={\"subtitle2\"}>Properties in this\n block</Typography>\n {addChildButton}\n </div>\n <Paper className=\"p-2 pl-8\">\n\n <PropertyTree\n properties={values.oneOf?.properties ?? {}}\n propertiesOrder={values.oneOf?.propertiesOrder}\n errors={{}}\n collectionEditable={collectionEditable}\n onPropertyClick={disabled\n ? undefined\n : (propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={disabled\n ? undefined\n : onPropertyMove}/>\n\n {!disabled && !values.oneOf?.propertiesOrder?.length &&\n <div className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this block\n </div>}\n\n </Paper>\n </div>\n\n {!disabled && <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n getData={getData}\n allowDataInference={allowDataInference}\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n collectionEditable={collectionEditable}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyChanged}\n existingPropertyKeys={selectedPropertyKey ? undefined : values.oneOf?.propertiesOrder}\n propertyConfigs={propertyConfigs}/>}\n\n </>);\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function NumberPropertyValidation({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationLessThan = \"validation.lessThan\";\n const validationMoreThan = \"validation.moreThan\";\n const validationPositive = \"validation.positive\";\n const validationNegative = \"validation.negative\";\n const validationInteger = \"validation.integer\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n label={\"Min value\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n label={\"Max value\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationLessThan)}\n label={\"Less than\"}\n name={validationLessThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationMoreThan)}\n label={\"More than\"}\n name={validationMoreThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-4\"}>\n <Field name={validationPositive}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Positive value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationNegative}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Negative value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationInteger}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Integer value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { NumberPropertyValidation } from \"./validation/NumberPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { TextField } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nexport function NumberPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <NumberPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n type={\"number\"}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : parseFloat(e.target.value));\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, IconForView, NumberProperty, StringProperty, useNavigationController } from \"@firecms/core\";\nimport { CircularProgress, Select, SelectGroup, SelectItem, Typography, } from \"@firecms/ui\";\n\nexport function ReferencePropertyField({\n existing,\n multiple,\n disabled,\n showErrors\n }: {\n existing: boolean,\n multiple: boolean,\n disabled: boolean,\n showErrors: boolean\n}) {\n\n const {\n values,\n handleChange,\n errors,\n } = useFormex<StringProperty | NumberProperty>();\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const pathPath = multiple ? \"of.path\" : \"path\";\n const pathValue: string | undefined = getIn(values, pathPath);\n const pathError: string | undefined = showErrors && getIn(errors, pathPath);\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Field name={pathPath}\n pathPath={pathPath}\n type=\"select\"\n disabled={(existing && Boolean(pathValue)) || disabled}\n value={pathValue}\n error={pathError}\n handleChange={handleChange}\n as={CollectionsSelect}/>\n\n </div>\n\n </>\n );\n}\n\nexport function CollectionsSelect({\n disabled,\n pathPath,\n value,\n handleChange,\n error,\n ...props\n }: {\n disabled: boolean,\n pathPath: string,\n value?: string,\n handleChange: (event: any) => void,\n error?: string\n}) {\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const collections = navigation?.collections ?? [];\n\n const groups: string[] = Array.from(new Set(\n Object.values(collections).map(e => e.group).filter(Boolean) as string[]\n ).values());\n\n const ungroupedCollections = collections.filter((col) => !col.group);\n\n return (\n <>\n <Select\n error={Boolean(error)}\n disabled={disabled}\n value={value ?? \"\"}\n position={\"item-aligned\"}\n name={pathPath}\n onChange={handleChange}\n label={\"Target collection\"}\n renderValue={(selected) => {\n const selectedCollection = collections.find(collection => collection.id === selected || collection.path === selected);\n if (!selectedCollection) return null;\n return (\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={selectedCollection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {selectedCollection?.name.toUpperCase()}\n </Typography>\n </div>)\n }}\n {...props}>\n\n {groups.flatMap((group) => (\n <SelectGroup label={group || \"Views\"}\n key={`group_${group}`}>\n {\n collections.filter(collection => collection.group === group)\n .map((collection) => {\n return <SelectItem\n key={`${collection.id ?? collection.path}-${group}`}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>\n ))}\n\n {ungroupedCollections && <SelectGroup label={\"Views\"}>\n {ungroupedCollections\n .map((collection) => {\n return <SelectItem key={collection.id ?? collection.path}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>}\n\n </Select>\n\n <FieldCaption>\n You can only edit the reference collection upon field\n creation.\n </FieldCaption>\n </>\n );\n}\n","import React from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, NumberProperty, StringProperty } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\nexport function DateTimePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n errors,\n touched,\n setFieldValue\n } = useFormex<StringProperty | NumberProperty>();\n\n const modePath = \"mode\";\n const modeValue: string | undefined = getIn(values, modePath);\n const modeError: string | undefined = getIn(touched, modePath) && getIn(errors, modePath);\n\n const autoValuePath = \"autoValue\";\n const autoValueValue: string | undefined = getIn(values, autoValuePath);\n const autoValueError: string | undefined = getIn(touched, autoValuePath) && getIn(errors, autoValuePath);\n\n return (\n <>\n <div className={\"flex flex-col col-span-12\"}>\n <Select name={modePath}\n value={modeValue ?? \"date\"}\n error={Boolean(modeError)}\n onValueChange={(v) => setFieldValue(modePath, v)}\n label={\"Mode\"}\n renderValue={(v) => {\n switch (v) {\n case \"date_time\":\n return \"Date/Time\";\n case \"date\":\n return \"Date\";\n default:\n return \"\";\n }\n }}\n disabled={disabled}>\n <SelectItem value={\"date_time\"}> Date/Time </SelectItem>\n <SelectItem value={\"date\"}> Date </SelectItem>\n </Select>\n <FieldCaption error={Boolean(modeError)}>\n {modeError}\n </FieldCaption>\n\n <Select name={autoValuePath}\n disabled={disabled}\n value={autoValueValue ?? \"\"}\n onValueChange={(v) => setFieldValue(autoValuePath, v === \"none\" ? null : v)}\n renderValue={(v) => {\n switch (v) {\n case \"on_create\":\n return \"On create\";\n case \"on_update\":\n return \"On any update\";\n default:\n return \"None\";\n }\n }}\n error={Boolean(autoValueError)}\n label={\"Automatic value\"}>\n <SelectItem value={\"none\"}> None </SelectItem>\n <SelectItem value={\"on_create\"}> On create </SelectItem>\n <SelectItem value={\"on_update\"}> On any update </SelectItem>\n </Select>\n <FieldCaption error={Boolean(autoValueError)}>\n {autoValueError ?? \"Update this field automatically when creating or updating the entity\"}\n </FieldCaption>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n </div>\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps } from \"@firecms/formex\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function AdvancedPropertyValidation({ disabled }: {\n disabled: boolean\n}) {\n\n const columnWidth = \"columnWidth\";\n const hideFromCollection = \"hideFromCollection\";\n const readOnly = \"readOnly\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <div className={\"col-span-12\"}>\n <Field type=\"checkbox\" name={hideFromCollection}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Hide from collection\"}\n disabled={disabled}\n form={form}\n tooltip={\"Hide this field from the collection view. It will still be visible in the form view\"}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={readOnly}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Read only\"}\n disabled={disabled}\n tooltip={\"Is this a read only field. Display only as a preview\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\n\nexport function KeyValuePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import {\n ArrayProperty,\n BooleanProperty,\n DateProperty,\n MapProperty,\n mergeDeep,\n NumberProperty,\n Property,\n PropertyConfig,\n StringProperty\n} from \"@firecms/core\";\n\nexport function updatePropertyFromWidget(propertyData: any,\n selectedWidgetId: string | undefined,\n propertyConfigs: Record<string, PropertyConfig>): Property {\n\n let updatedProperty;\n if (selectedWidgetId === \"text_field\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"text_field\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multiline\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"multiline\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n multiline: true,\n storage: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"markdown\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"markdown\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: true,\n email: undefined,\n url: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"url\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"url\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: true,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"email\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"email\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: true,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: propertyData.enumValues ?? []\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"number_input\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_input\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: undefined\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: propertyData.enumValues ?? []\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"multi_number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"number\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: {\n storagePath: \"/\"\n }\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n storage: propertyData.of?.storage ?? {\n storagePath: \"/\"\n }\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"group\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"group\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: false,\n properties: propertyData.properties ?? {}\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"key_value\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"key_value\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: true,\n properties: undefined\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"reference\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"reference\",\n propertyConfig: \"reference\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies Property\n );\n } else if (selectedWidgetId === \"multi_references\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_references\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"reference\"\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"switch\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"boolean\",\n propertyConfig: \"switch\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies BooleanProperty\n );\n } else if (selectedWidgetId === \"date_time\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"date\",\n propertyConfig: \"date_time\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n mode: \"date_time\"\n } satisfies DateProperty\n );\n } else if (selectedWidgetId === \"repeat\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"repeat\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"block\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"block\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n oneOf: {\n properties: {}\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId && propertyConfigs[selectedWidgetId]) {\n updatedProperty = {\n ...propertyConfigs[selectedWidgetId].property,\n propertyConfig: selectedWidgetId\n };\n }\n\n return updatedProperty;\n}\n","import { PropertyConfigBadge, PropertyConfig } from \"@firecms/core\";\nimport { cn, SelectItem, Typography } from \"@firecms/ui\";\n\nexport interface PropertySelectItemProps {\n value: string;\n optionDisabled: boolean;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function PropertySelectItem({ value, optionDisabled, propertyConfig, existing }: PropertySelectItemProps) {\n return <SelectItem value={value}\n disabled={optionDisabled}\n className={\"flex flex-row items-center\"}>\n <div\n className={cn(\n \"flex flex-row items-center text-base min-h-[52px]\",\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 React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { Select, SelectItem, TextField } from \"@firecms/ui\";\n\nexport function UrlPropertyField({\n disabled,\n showErrors\n }: {\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n const urlValue = getIn(values, \"url\");\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n onValueChange={(value: string) => {\n if (value === \"[NONE]\")\n setFieldValue(\"url\", true);\n else\n setFieldValue(\"url\", value);\n }}\n label={\"Preview type\"}\n renderValue={(value: string) => {\n switch (value) {\n case \"image\":\n return \"Image\";\n case \"video\":\n return \"Video\";\n case \"audio\":\n return \"Audio\";\n default:\n return \"Display URL\";\n }\n }}\n value={urlValue ?? \"[NONE]\"}>\n <SelectItem value={\"[NONE]\"}>\n Display URL\n </SelectItem>\n <SelectItem value={\"image\"}>\n Image\n </SelectItem>\n <SelectItem value={\"video\"}>\n Video\n </SelectItem>\n <SelectItem value={\"audio\"}>\n Audio\n </SelectItem>\n </Select>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import { DEFAULT_FIELD_CONFIGS, PropertyConfigId, PropertyConfig } from \"@firecms/core\";\n\nexport const supportedFieldsIds: PropertyConfigId[] = [\n \"text_field\",\n \"multiline\",\n \"markdown\",\n \"url\",\n \"email\",\n \"select\",\n \"multi_select\",\n \"number_input\",\n \"number_select\",\n \"multi_number_select\",\n \"file_upload\",\n \"multi_file_upload\",\n \"reference\",\n \"multi_references\",\n \"switch\",\n \"date_time\",\n \"group\",\n \"key_value\",\n \"repeat\",\n \"block\"\n];\n\nexport const supportedFields: Record<string, PropertyConfig> = Object.entries(DEFAULT_FIELD_CONFIGS)\n .filter(([id]) => supportedFieldsIds.includes(id as PropertyConfigId))\n .map(([id, config]) => ({ [id]: config }))\n .reduce((a, b) => ({ ...a, ...b }), {});\n","import React, { useDeferredValue, useEffect, useRef, useState } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { Formex, FormexController, getIn, useCreateFormex } from \"@firecms/formex\";\nimport {\n DEFAULT_FIELD_CONFIGS,\n DeleteConfirmationDialog,\n PropertyConfigId,\n getFieldConfig,\n getFieldId,\n isPropertyBuilder,\n isValidRegExp,\n mergeDeep,\n Property,\n PropertyConfig,\n PropertyConfigBadge,\n} from \"@firecms/core\";\nimport {\n Button,\n cn,\n DeleteIcon,\n Dialog,\n DialogActions,\n DialogContent,\n IconButton,\n InfoLabel,\n Select,\n Typography\n} from \"@firecms/ui\";\nimport { EnumPropertyField } from \"./properties/EnumPropertyField\";\nimport { StoragePropertyField } from \"./properties/StoragePropertyField\";\nimport { MapPropertyField } from \"./properties/MapPropertyField\";\nimport { RepeatPropertyField } from \"./properties/RepeatPropertyField\";\nimport { CommonPropertyFields } from \"./properties/CommonPropertyFields\";\nimport { StringPropertyField } from \"./properties/StringPropertyField\";\nimport { BooleanPropertyField } from \"./properties/BooleanPropertyField\";\nimport { BlockPropertyField } from \"./properties/BlockPropertyField\";\nimport { NumberPropertyField } from \"./properties/NumberPropertyField\";\nimport { ReferencePropertyField } from \"./properties/ReferencePropertyField\";\nimport { DateTimePropertyField } from \"./properties/DateTimePropertyField\";\nimport { AdvancedPropertyValidation } from \"./properties/advanced/AdvancedPropertyValidation\";\nimport { editableProperty } from \"../../utils/entities\";\nimport { KeyValuePropertyField } from \"./properties/KeyValuePropertyField\";\nimport { updatePropertyFromWidget } from \"./utils/update_property_for_widget\";\nimport { PropertySelectItem } from \"./PropertySelectItem\";\nimport { UrlPropertyField } from \"./properties/UrlPropertyField\";\nimport { supportedFields } from \"./utils/supported_fields\";\n\nexport type PropertyWithId = Property & {\n id?: string\n};\n\nexport type OnPropertyChangedParams = {\n id?: string,\n property: Property,\n namespace?: string,\n previousId?: string\n};\n\nexport type PropertyFormProps = {\n includeIdAndName?: boolean;\n existingProperty: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n inArray: boolean;\n propertyKey?: string;\n propertyNamespace?: string;\n property?: Property;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onPropertyChangedImmediate?: boolean;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n initialErrors?: Record<string, any>;\n existingPropertyKeys?: string[];\n forceShowErrors?: boolean;\n allowDataInference: boolean;\n getData?: () => Promise<object[]>;\n getController?: (formex: FormexController<PropertyWithId>) => void;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport const PropertyForm = React.memo(\n function PropertyForm(props: PropertyFormProps) {\n\n const {\n includeIdAndName = true,\n autoOpenTypeSelect,\n existingProperty,\n autoUpdateId,\n inArray,\n propertyKey,\n existingPropertyKeys,\n propertyNamespace,\n property,\n onPropertyChanged,\n onPropertyChangedImmediate = true,\n onDelete,\n onError,\n initialErrors,\n forceShowErrors,\n allowDataInference,\n getController,\n getData,\n propertyConfigs,\n collectionEditable\n } = props;\n\n const initialValue: PropertyWithId = {\n id: \"\",\n name: \"\"\n } as PropertyWithId;\n\n const disabled = (Boolean(property && !editableProperty(property)) && !collectionEditable);\n\n const lastSubmittedProperty = useRef<OnPropertyChangedParams | undefined>(property ? {\n id: propertyKey,\n previousId: propertyKey,\n property\n } : undefined);\n\n const doOnPropertyChanged = ({\n id,\n property\n }: OnPropertyChangedParams) => {\n const params = {\n id,\n previousId: lastSubmittedProperty.current?.id,\n property,\n namespace: propertyNamespace\n };\n lastSubmittedProperty.current = params;\n onPropertyChanged?.(params);\n };\n\n const formexController = useCreateFormex<PropertyWithId>({\n initialValues: property\n ? { id: propertyKey, ...property } as PropertyWithId\n : initialValue,\n initialErrors,\n validateOnChange: true,\n validateOnInitialRender: true,\n onSubmit: (newPropertyWithId, controller) => {\n console.debug(\"onSubmit\", newPropertyWithId);\n const {\n id,\n ...property\n } = newPropertyWithId;\n doOnPropertyChanged({\n id,\n property: { ...property, editable: property.editable ?? true }\n });\n if (!existingProperty)\n controller.resetForm({ values: initialValue });\n },\n validation: (values) => {\n const errors: Record<string, any> = {};\n if (includeIdAndName) {\n if (!values.name) {\n errors.name = \"Required\";\n } else {\n const nameError = validateName(values.name);\n if (nameError)\n errors.name = nameError;\n }\n if (!values.id) {\n errors.id = \"Required\";\n } else {\n const idError = validateId(values.id, existingPropertyKeys);\n if (idError)\n errors.id = idError;\n }\n }\n\n if (values.dataType === \"string\") {\n if (values.validation?.matches && !isValidRegExp(values.validation?.matches.toString())) {\n errors.validation = {\n matches: \"Invalid regular expression\"\n }\n }\n }\n if (values.dataType === \"reference\" && !values.path) {\n errors.path = \"You must specify a target collection for the field\";\n }\n if (values.propertyConfig === \"repeat\") {\n if (!(values as any).of) {\n errors.of = \"You need to specify a repeat field\";\n }\n }\n if (values.propertyConfig === \"block\") {\n if (!(values as any).oneOf) {\n errors.oneOf = \"You need to specify the properties of this block\";\n }\n }\n return errors;\n }\n });\n\n useEffect(() => {\n getController?.(formexController);\n }, [formexController, getController]);\n\n return <Formex value={formexController}>\n <PropertyEditFormFields\n onPropertyChanged={onPropertyChangedImmediate\n ? doOnPropertyChanged\n : undefined}\n onDelete={onDelete}\n includeIdAndTitle={includeIdAndName}\n propertyNamespace={propertyNamespace}\n onError={onError}\n showErrors={forceShowErrors || formexController.submitCount > 0}\n existing={existingProperty}\n autoUpdateId={autoUpdateId}\n inArray={inArray}\n autoOpenTypeSelect={autoOpenTypeSelect}\n disabled={disabled}\n getData={getData}\n allowDataInference={allowDataInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n {...formexController}/>\n </Formex>;\n }, (a, b) =>\n a.getData === b.getData &&\n a.propertyKey === b.propertyKey &&\n a.propertyNamespace === b.propertyNamespace &&\n a.includeIdAndName === b.includeIdAndName &&\n a.autoOpenTypeSelect === b.autoOpenTypeSelect &&\n a.autoUpdateId === b.autoUpdateId &&\n a.existingProperty === b.existingProperty\n);\n\nexport function PropertyFormDialog({\n open,\n onCancel,\n onOkClicked,\n onPropertyChanged,\n getData,\n collectionEditable,\n ...formProps\n }: PropertyFormProps & {\n open?: boolean;\n onOkClicked?: () => void;\n onCancel?: () => void;\n}) {\n const formexRef = useRef<FormexController<PropertyWithId>>();\n const getController = (helpers: FormexController<PropertyWithId>) => {\n formexRef.current = helpers;\n };\n\n return <Dialog\n open={open ?? false}\n maxWidth={\"xl\"}\n fullWidth={true}\n >\n <form noValidate={true}\n autoComplete={\"off\"}\n onSubmit={(e) => {\n e.preventDefault();\n e.stopPropagation();\n formexRef.current?.handleSubmit(e)\n }}>\n <DialogContent>\n <PropertyForm {...formProps}\n onPropertyChanged={(params) => {\n onPropertyChanged?.(params);\n onOkClicked?.();\n }}\n collectionEditable={collectionEditable}\n onPropertyChangedImmediate={false}\n getController={getController}\n getData={getData}\n />\n </DialogContent>\n\n <DialogActions>\n\n {onCancel && <Button\n variant={\"text\"}\n onClick={() => {\n onCancel();\n formexRef.current?.resetForm();\n }}>\n Cancel\n </Button>}\n\n <Button variant=\"outlined\"\n type={\"submit\"}\n color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n </form>\n </Dialog>;\n\n}\n\nfunction PropertyEditFormFields({\n values,\n errors,\n setValues,\n existing,\n autoUpdateId = false,\n autoOpenTypeSelect,\n includeIdAndTitle,\n onPropertyChanged,\n onDelete,\n propertyNamespace,\n onError,\n showErrors,\n disabled,\n inArray,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n includeIdAndTitle?: boolean;\n existing: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n propertyNamespace?: string;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n showErrors: boolean;\n inArray: boolean;\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n} & FormexController<PropertyWithId>) {\n\n const [selectOpen, setSelectOpen] = useState(autoOpenTypeSelect);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [selectedFieldConfigId, setSelectedFieldConfigId] = useState<string | undefined>(values?.dataType ? getFieldId(values) : undefined);\n\n const allSupportedFields = Object.entries(supportedFields).concat(Object.entries(propertyConfigs));\n\n const displayedWidgets = inArray\n ? allSupportedFields.filter(([_, propertyConfig]) => !isPropertyBuilder(propertyConfig.property) && propertyConfig.property?.dataType !== \"array\")\n : allSupportedFields;\n\n const deferredValues = useDeferredValue(values);\n const nameFieldRef = useRef<HTMLInputElement>(null);\n\n const lastSubmittedProperty = useRef<object>(values);\n\n const selectedWidgetError = showErrors && getIn(errors, \"selectedWidget\");\n\n useEffect(() => {\n if (onPropertyChanged) {\n if ((!includeIdAndTitle || deferredValues.id)) {\n const {\n id,\n ...property\n } = deferredValues;\n if (!equal(deferredValues, lastSubmittedProperty.current)) {\n onPropertyChanged({\n id,\n property,\n namespace: propertyNamespace\n });\n lastSubmittedProperty.current = deferredValues;\n }\n }\n }\n }, [deferredValues, includeIdAndTitle, onPropertyChanged, propertyNamespace]);\n\n useEffect(() => {\n if (values?.id && onError) {\n onError(values?.id, propertyNamespace, errors);\n }\n }, [errors, onError, propertyNamespace, values?.id]);\n\n const onWidgetSelectChanged = (newSelectedWidgetId: PropertyConfigId) => {\n setSelectedFieldConfigId(newSelectedWidgetId);\n setValues(updatePropertyFromWidget(values, newSelectedWidgetId, propertyConfigs));\n // Ugly hack to autofocus the name field\n setTimeout(() => {\n nameFieldRef.current?.focus();\n }, 0);\n };\n\n let childComponent;\n if (selectedFieldConfigId === \"text_field\" ||\n selectedFieldConfigId === \"multiline\" ||\n selectedFieldConfigId === \"markdown\" ||\n selectedFieldConfigId === \"email\") {\n childComponent =\n <StringPropertyField widgetId={selectedFieldConfigId}\n disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"url\") {\n childComponent =\n <UrlPropertyField disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"select\" ||\n selectedFieldConfigId === \"number_select\") {\n childComponent = <EnumPropertyField\n multiselect={false}\n allowDataInference={allowDataInference}\n updateIds={!existing}\n disabled={disabled}\n getData={getData}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"multi_select\" ||\n selectedFieldConfigId === \"multi_number_select\") {\n childComponent = <EnumPropertyField\n multiselect={true}\n updateIds={!existing}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"switch\") {\n childComponent = <BooleanPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"number_input\") {\n childComponent = <NumberPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"group\") {\n childComponent =\n <MapPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"block\") {\n childComponent =\n <BlockPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"reference\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"date_time\") {\n childComponent = <DateTimePropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_references\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"repeat\") {\n childComponent =\n <RepeatPropertyField showErrors={showErrors}\n existing={existing}\n getData={getData}\n allowDataInference={allowDataInference}\n disabled={disabled}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"key_value\") {\n childComponent =\n <KeyValuePropertyField disabled={disabled}/>;\n } else {\n childComponent = null;\n }\n\n return (\n <>\n {disabled && <InfoLabel mode={\"warn\"}>\n <Typography>This property can&apos;t be edited</Typography>\n <Typography variant={\"caption\"}>\n You may not have permission to\n edit it or it is defined in code with no <code>editable</code> flag\n </Typography>\n </InfoLabel>}\n\n <div className=\"flex mt-2 justify-between\">\n <div className={\"w-full flex flex-col gap-2\"}>\n <Select\n // className={\"w-full\"}\n error={Boolean(selectedWidgetError)}\n value={selectedFieldConfigId ?? \"\"}\n placeholder={\"Select a property widget\"}\n open={selectOpen}\n onOpenChange={setSelectOpen}\n position={\"item-aligned\"}\n disabled={disabled}\n renderValue={(value) => {\n if (!value) {\n return <em>Select a property\n widget</em>;\n }\n const key = value as PropertyConfigId;\n const propertyConfig = DEFAULT_FIELD_CONFIGS[key] ?? propertyConfigs[key];\n const baseProperty = propertyConfig.property;\n const baseFieldConfig = baseProperty && !isPropertyBuilder(baseProperty) ? getFieldConfig(baseProperty, propertyConfigs) : undefined;\n const optionDisabled = isPropertyBuilder(baseProperty) || (existing && baseProperty.dataType !== values?.dataType);\n const computedFieldConfig = baseFieldConfig ? mergeDeep(baseFieldConfig, propertyConfig) : propertyConfig;\n return <div\n onClick={(e) => {\n if (optionDisabled) {\n e.stopPropagation();\n e.preventDefault();\n }\n }}\n className={cn(\n \"flex items-center\",\n optionDisabled ? \"w-full pointer-events-none opacity-50\" : \"\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={computedFieldConfig}/>\n </div>\n <div className={\"flex flex-col items-start text-base text-left\"}>\n <div>{computedFieldConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"disabled\"}>\n {optionDisabled ? \"You can only switch to widgets that use the same data type\" : computedFieldConfig.description}\n </Typography>\n </div>\n </div>\n }}\n onValueChange={(value) => {\n onWidgetSelectChanged(value as PropertyConfigId);\n }}>\n {displayedWidgets.map(([key, propertyConfig]) => {\n const baseProperty = propertyConfig.property;\n const optionDisabled = existing && !isPropertyBuilder(baseProperty) && baseProperty.dataType !== values?.dataType;\n return <PropertySelectItem\n key={key}\n value={key}\n optionDisabled={optionDisabled}\n propertyConfig={propertyConfig}\n existing={existing}/>;\n })}\n </Select>\n\n {selectedWidgetError &&\n <Typography variant=\"caption\"\n className={\"ml-3.5\"}\n color={\"error\"}>Required</Typography>}\n\n {/*<Typography variant=\"caption\" className={\"ml-3.5\"}>Define your own custom properties and*/}\n {/* components</Typography>*/}\n\n </div>\n\n {onDelete && values?.id &&\n <IconButton\n variant={\"ghost\"}\n className=\"m-4\"\n disabled={disabled}\n onClick={() => setDeleteDialogOpen(true)}>\n <DeleteIcon/>\n </IconButton>}\n </div>\n\n <div className={\"grid grid-cols-12 gap-y-12 mt-8 mb-8\"}>\n {includeIdAndTitle &&\n <CommonPropertyFields showErrors={showErrors}\n disabledId={existing}\n isNewProperty={!existing}\n disabled={disabled}\n autoUpdateId={autoUpdateId}\n ref={nameFieldRef}/>}\n\n {childComponent}\n\n <div className={\"col-span-12\"}>\n <AdvancedPropertyValidation disabled={disabled}/>\n </div>\n </div>\n\n {onDelete &&\n <DeleteConfirmationDialog open={deleteDialogOpen}\n onAccept={() => onDelete(values?.id, propertyNamespace)}\n onCancel={() => setDeleteDialogOpen(false)}\n title={<div>Delete this property?</div>}\n body={\n <div> This will <b>not delete any\n data</b>, only modify the\n collection.</div>\n }/>}\n\n </>\n );\n}\n\nconst idRegEx = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\nfunction validateId(value?: string, existingPropertyKeys?: string[]) {\n\n let error;\n if (!value) {\n error = \"You must specify an id for the field\";\n }\n if (value && !value.match(idRegEx)) {\n error = \"The id can only contain letters, numbers and underscores (_), and not start with a number\";\n }\n if (value && existingPropertyKeys && existingPropertyKeys.includes(value)) {\n error = \"There is another field with this ID already\";\n }\n return error;\n}\n\nfunction validateName(value: string) {\n let error;\n if (!value) {\n error = \"You must specify a title for the field\";\n }\n return error;\n}\n","export function camelCase(str: string): string {\n if (!str) return \"\";\n return (str.slice(0, 1).toLowerCase() + str.slice(1))\n .replace(/([-_ ]){1,}/g, \" \")\n .split(/[-_ ]/)\n .reduce((cur, acc) => {\n return cur + acc[0].toUpperCase() + acc.substring(1);\n }, \"\");\n}\n","import { EntityCollection, useSnackbarController } from \"@firecms/core\";\nimport { Button, ContentCopyIcon, Dialog, DialogActions, DialogContent, Typography, } from \"@firecms/ui\";\nimport React from \"react\";\nimport JSON5 from \"json5\";\nimport { Highlight, themes } from \"prism-react-renderer\"\nimport { camelCase } from \"./utils/strings\";\n\nexport function GetCodeDialog({ collection, onOpenChange, open }: { onOpenChange: (open: boolean) => void, collection: any, open: any }) {\n\n const snackbarController = useSnackbarController();\n\n const code = \"import { EntityCollection } from \\\"firecms\\\";\\n\\nconst \" + (collection.name ? camelCase(collection.name) : \"my\") + \"Collection:EntityCollection = \" + JSON5.stringify(collectionToCode(collection), null, \"\\t\");\n return <Dialog open={open}\n onOpenChange={onOpenChange}\n maxWidth={\"4xl\"}>\n <DialogContent>\n <Typography variant={\"h6\"} className={\"my-4\"}>\n Code for {collection.name}\n </Typography>\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://firecms.co/docs/customization_quickstart\"}>docs</a>.\n </Typography>\n <Highlight\n theme={themes.vsDark}\n code={code}\n language=\"typescript\"\n >\n {({ className, style, tokens, getLineProps, getTokenProps }) => (\n <pre style={style} className={\"p-4 rounded 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 <ContentCopyIcon size={\"small\"}/>\n Copy 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 = (property: any) => {\n\n const updatedProperty = {\n ...property\n };\n\n delete updatedProperty.fromBuilder;\n delete updatedProperty.resolved;\n delete updatedProperty.propertiesOrder;\n delete updatedProperty.editable;\n\n if (updatedProperty.type === \"map\") {\n return {\n ...updatedProperty,\n properties: updatedProperty.properties.map(propertyCleanup)\n }\n }\n return updatedProperty;\n }\n\n return {\n id: collection.id,\n name: collection.name,\n singularName: collection.singularName,\n path: collection.path,\n description: collection.description,\n editable: true,\n collectionGroup: collection.collectionGroup,\n icon: collection.icon,\n group: collection.group,\n customId: collection.customId,\n initialFilter: collection.initialFilter,\n initialSort: collection.initialSort,\n properties: Object.entries(collection.properties ?? {})\n .map(([key, value]) => ({\n [key]: propertyCleanup(value)\n }))\n .reduce((a, b) => ({ ...a, ...b }), {}),\n subcollections: (collection.subcollections ?? []).map(collectionToCode)\n }\n\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport {\n EntityCollection,\n ErrorBoundary,\n isPropertyBuilder,\n makePropertiesEditable,\n Properties,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n useLargeLayout,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n AutoAwesomeIcon,\n Button,\n CircularProgress,\n cn,\n CodeIcon,\n DebouncedTextField,\n defaultBorderMixin,\n IconButton,\n Paper,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\n\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"./util\";\nimport { OnPropertyChangedParams, PropertyForm, PropertyFormDialog } from \"./PropertyEditView\";\nimport { PropertyTree } from \"./PropertyTree\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { GetCodeDialog } from \"./GetCodeDialog\";\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 reservedGroups?: string[];\n extraIcon: React.ReactNode;\n getUser: (uid: string) => User | null;\n getData?: () => Promise<object[]>;\n doCollectionInference: (collection: PersistedCollection) => Promise<Partial<EntityCollection> | null> | undefined;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport function CollectionPropertiesEditorForm({\n showErrors,\n isNewCollection,\n propertyErrorsRef,\n onPropertyError,\n setDirty,\n reservedGroups,\n extraIcon,\n getUser,\n getData,\n doCollectionInference,\n propertyConfigs,\n collectionEditable\n }: CollectionEditorFormProps) {\n\n const {\n values,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n errors,\n dirty\n } = useFormex<PersistedCollection>();\n\n const snackbarController = useSnackbarController();\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)\n return;\n\n setInferringProperties(true);\n // @ts-ignore\n doCollectionInference(values)\n .then((newCollection) => {\n\n if (newCollection)\n makePropertiesEditable(newCollection.properties as Properties);\n\n if (!newCollection) {\n snackbarController.open({\n type: \"error\",\n message: \"Could not infer properties from data\"\n });\n return;\n }\n // find properties in the new collection, not present in the current one\n const newPropertyKeys = (newCollection.properties ? Object.keys(newCollection.properties) : [])\n .filter((propertyKey) => !values.properties[propertyKey]);\n if (newPropertyKeys.length === 0) {\n snackbarController.open({\n type: \"info\",\n message: \"No new properties found in existing data\"\n });\n return;\n }\n // add them to the current collection\n const updatedProperties = {\n ...newPropertyKeys.reduce((acc, propertyKey) => {\n acc[propertyKey] = (newCollection.properties ?? {})[propertyKey];\n return acc;\n }, {} as {\n [key: string]: PropertyOrBuilder\n }),\n ...values.properties\n };\n const updatedPropertiesOrder = [\n ...newPropertyKeys,\n ...(values.propertiesOrder ?? [])\n ];\n setFieldValue(\"properties\", updatedProperties, false);\n\n updatePropertiesOrder(updatedPropertiesOrder);\n\n setInferredPropertyKeys(newPropertyKeys);\n })\n .finally(() => {\n setInferringProperties(false);\n })\n }\n : undefined;\n\n const getCurrentPropertiesOrder = useCallback((namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"];\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n }, [values]);\n\n const updatePropertiesOrder = useCallback((newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n }, [setFieldValue]);\n\n const deleteProperty = useCallback((propertyKey?: string, namespace?: string) => {\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 const newPropertiesOrder = currentPropertiesOrder.filter((p) => p !== propertyKey);\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n setNewPropertyDialogOpen(false);\n\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }, [getCurrentPropertiesOrder, setFieldValue, updatePropertiesOrder]);\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\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 (!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 const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties)), id];\n\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 console.debug(\"onPropertyChanged, id change\", {\n id,\n property,\n previousId,\n namespace\n })\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 console.debug(\"onPropertyChanged\", {\n id,\n property,\n previousId,\n namespace,\n propertyPath\n })\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n\n };\n\n const onPropertyErrorInternal = useCallback((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\n const usedPropertiesOrder = (values.propertiesOrder\n ? values.propertiesOrder\n : Object.keys(values.properties)) as string[];\n\n const owner = useMemo(() => values.ownerId ? getUser(values.ownerId) : null, [getUser, values.ownerId]);\n\n const onPropertyClick = useCallback((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 }, [usedPropertiesOrder]);\n\n const body = (\n <div className={\"grid grid-cols-12 gap-2 h-full bg-gray-50 dark:bg-gray-900\"}>\n <div className={cn(\n \"p-4 md:p-8 pb-20 md:pb-20\",\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=\"flex-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-1 mt-2 flex flex-row gap-2\">\n <Tooltip title={\"Get the code for this collection\"}>\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 <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={inferPropertiesFromData}>\n {inferringProperties ? <CircularProgress size={\"small\"}/> : <AutoAwesomeIcon/>}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}>\n <Button\n variant={\"outlined\"}\n onClick={() => setNewPropertyDialogOpen(true)}>\n <AddIcon/>\n </Button>\n </Tooltip>\n </div>\n </div>\n\n <ErrorBoundary>\n <PropertyTree\n className={\"pl-8\"}\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 ? deleteProperty : undefined}\n collectionEditable={collectionEditable}\n errors={errors}/>\n </ErrorBoundary>\n\n <Button className={\"mt-8 w-full\"}\n color=\"primary\"\n variant={\"outlined\"}\n size={\"large\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}>\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 pb-20 md:pb-20\"}>\n <Paper\n className=\"sticky top-8 p-4 min-h-full border border-transparent 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}`}\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 collectionEditable={collectionEditable}\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 variant={\"outlined\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n >\n <AddIcon/>\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 </Paper>\n </div>}\n\n {asDialog && <PropertyFormDialog\n inArray={false}\n open={selectedPropertyIndex !== undefined}\n key={`edit_view_${selectedPropertyIndex}`}\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 collectionEditable={collectionEditable}\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 collectionEditable={collectionEditable}\n existingPropertyKeys={values.propertiesOrder as string[]}/>\n\n <GetCodeDialog\n collection={values}\n open={codeDialogOpen}\n onOpenChange={setCodeDialogOpen}/>\n\n </>\n );\n}\n","import React from \"react\";\nimport { Button, Dialog, DialogActions, DialogContent, Typography } from \"@firecms/ui\";\n\nexport interface UnsavedChangesDialogProps {\n open: boolean;\n body?: React.ReactNode;\n title?: string;\n handleOk: () => void;\n handleCancel: () => void;\n}\n\nexport function UnsavedChangesDialog({\n open,\n handleOk,\n handleCancel,\n body,\n title\n }: UnsavedChangesDialogProps) {\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => open ? handleCancel() : handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogContent>\n <Typography variant={\"h6\"}>\n {title ?? \"Unsaved changes\"}\n </Typography>\n\n {body && <Typography>\n {body}\n </Typography>}\n <Typography>\n Are you sure?\n </Typography>\n\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"text\" onClick={handleCancel} autoFocus> Cancel </Button>\n <Button onClick={handleOk}> Ok </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { useCustomizationController } from \"@firecms/core\";\nimport { Button, Dialog, DialogActions, DialogContent, Typography } from \"@firecms/ui\";\nimport React from \"react\";\n\nexport function EntityCustomViewsSelectDialog({ open, onClose }: { open: boolean, onClose: (selectedViewKey?: string) => void }) {\n const {\n entityViews,\n } = useCustomizationController();\n\n return <Dialog\n maxWidth={\"md\"}\n open={open}>\n <DialogContent className={\"flex flex-col gap-4\"}>\n <Typography variant={\"h6\"}>\n Select view\n </Typography>\n {entityViews?.map((view) => {\n return <Button\n key={view.key}\n onClick={() => onClose(view.key)}\n fullWidth\n variant={\"text\"}\n >\n {view.name} ({view.key})\n </Button>;\n })}\n {(entityViews ?? []).length === 0 &&\n <Typography variant={\"body2\"}>\n No custom views defined\n </Typography>\n }\n </DialogContent>\n <DialogActions>\n <Button variant={\"outlined\"} onClick={() => onClose()}>Cancel</Button>\n </DialogActions>\n </Dialog>\n}\n","import React from \"react\";\nimport {\n DeleteConfirmationDialog,\n EntityCollection,\n EntityCustomView,\n resolveEntityView,\n useCustomizationController,\n User\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Alert,\n Button,\n Container,\n DeleteIcon,\n IconButton,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { CollectionEditorDialog } from \"./CollectionEditorDialog\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { EntityCustomViewsSelectDialog } from \"./EntityCustomViewsSelectDialog\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function SubcollectionsEditTab({\n collection,\n parentCollection,\n configController,\n collectionInference,\n getUser,\n parentCollectionIds\n }: {\n collection: PersistedCollection,\n parentCollection?: EntityCollection,\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n getUser: (uid: string) => User | null;\n parentCollectionIds?: string[];\n}) {\n\n const { entityViews: contextEntityViews } = useCustomizationController();\n\n const [subcollectionToDelete, setSubcollectionToDelete] = React.useState<string | undefined>();\n const [addEntityViewDialogOpen, setAddEntityViewDialogOpen] = React.useState<boolean>(false);\n const [viewToDelete, setViewToDelete] = React.useState<string | undefined>();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n editedCollectionId?: string,\n }>();\n\n const {\n values,\n setFieldValue,\n } = useFormex<EntityCollection>();\n\n const subcollections = collection.subcollections ?? [];\n const resolvedEntityViews = values.entityViews?.filter(e => typeof e === \"string\")\n .map(e => resolveEntityView(e, contextEntityViews))\n .filter(Boolean) as EntityCustomView[] ?? [];\n const hardCodedEntityViews = collection.entityViews?.filter(e => typeof e !== \"string\") as EntityCustomView[] ?? [];\n const totalEntityViews = resolvedEntityViews.length + hardCodedEntityViews.length;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"2xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n <div className={\"flex flex-col gap-16\"}>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h5\"}>\n Subcollections of {values.name}\n </Typography>\n\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n {subcollections && subcollections.length > 0 && <Table>\n <TableBody>\n {subcollections.map((subcollection) => (\n <TableRow key={subcollection.path}\n onClick={() => setCurrentDialog({\n isNewCollection: false,\n editedCollectionId: subcollection.id\n })}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {subcollection.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSubcollectionToDelete(subcollection.id);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>}\n\n <Button\n onClick={() => {\n setCurrentDialog({\n isNewCollection: true\n });\n }}\n variant={\"text\"}\n startIcon={<AddIcon/>}>\n Add subcollection\n </Button>\n\n </Paper>\n\n </div>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h5\"}>\n Custom views\n </Typography>\n\n {totalEntityViews === 0 &&\n <Alert action={<Button variant=\"text\"\n size={\"small\"}\n href={\"https://firecms.co/docs/customization_quickstart\"}\n component={\"a\"}\n rel=\"noopener noreferrer\"\n target=\"_blank\">More info</Button>}>\n Define your own custom views by uploading them with the CLI.\n </Alert>\n }\n\n {<>\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n <Table>\n <TableBody>\n {resolvedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setViewToDelete(view.key);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n {hardCodedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n <Typography variant={\"caption\"} className={\"flex-grow\"}>\n This view is defined in code with\n key <code>{view.key}</code>\n </Typography>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n <Button\n onClick={() => {\n setAddEntityViewDialogOpen(true);\n }}\n variant={\"text\"}\n startIcon={<AddIcon/>}>\n Add custom entity view\n </Button>\n </Paper>\n\n </>}\n\n\n </div>\n\n </div>\n </Container>\n\n <div style={{ height: \"52px\" }}/>\n\n {subcollectionToDelete &&\n <DeleteConfirmationDialog open={Boolean(subcollectionToDelete)}\n onAccept={() => {\n const props = {\n id: subcollectionToDelete,\n parentCollectionIds: [...(parentCollectionIds ?? []), collection.id]\n };\n console.debug(\"Deleting subcollection\", props)\n configController.deleteCollection(props);\n setSubcollectionToDelete(undefined);\n }}\n onCancel={() => setSubcollectionToDelete(undefined)}\n title={<>Delete this subcollection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>}/>}\n {viewToDelete &&\n <DeleteConfirmationDialog open={Boolean(viewToDelete)}\n onAccept={() => {\n setFieldValue(\"entityViews\", values.entityViews?.filter(e => e !== viewToDelete));\n setViewToDelete(undefined);\n }}\n onCancel={() => setViewToDelete(undefined)}\n title={<>Remove this view?</>}\n body={<>This will <b>not\n delete any data</b>, only\n the view in the CMS</>}/>}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={configController}\n parentCollection={collection}\n collectionInference={collectionInference}\n parentCollectionIds={[...parentCollectionIds ?? [], values.id]}\n isNewCollection={false}\n {...currentDialog}\n getUser={getUser}\n handleClose={() => {\n setCurrentDialog(undefined);\n }}/>\n\n <EntityCustomViewsSelectDialog\n open={addEntityViewDialogOpen}\n onClose={(selectedViewKey) => {\n if (selectedViewKey) {\n setFieldValue(\"entityViews\", [...(values.entityViews ?? []), selectedViewKey]);\n }\n setAddEntityViewDialogOpen(false);\n }}/>\n </div>\n );\n}\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const productsCollectionTemplate: EntityCollection = {\n id: \"products\",\n path: \"products\",\n name: \"Products\",\n singularName: \"Product\",\n icon: \"shopping_cart\",\n description: \"List of the products currently sold in your shop\",\n properties: makePropertiesEditable({\n name: {\n dataType: \"string\",\n name: \"Name\",\n description: \"Name of this product\",\n validation: {\n required: true\n }\n },\n brand: {\n dataType: \"string\",\n name: \"Brand\",\n validation: {\n required: true\n }\n },\n description: {\n dataType: \"string\",\n name: \"Description\",\n description: \"Description of this product, supports markdown\",\n markdown: true\n },\n main_image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n },\n description: \"Upload field for images\"\n },\n available: {\n dataType: \"boolean\",\n name: \"Available\",\n columnWidth: 100,\n description: \"Is this product available in the website\"\n },\n price: {\n dataType: \"number\",\n name: \"Price\",\n validation: {\n requiredMessage: \"You must set a positive price\",\n min: 0\n }\n },\n images: {\n dataType: \"array\",\n name: \"Images\",\n hideFromCollection: true,\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n },\n related_products: {\n dataType: \"array\",\n name: \"Related products\",\n description: \"Products related to this one\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n metadata: {\n name: \"Metadata\",\n description: \"This is an example of a map property\",\n dataType: \"map\",\n keyValue: true\n },\n added_on: {\n dataType: \"date\",\n name: \"Added on\",\n autoValue: \"on_create\"\n }\n })\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const blogCollectionTemplate:EntityCollection = {\n id: \"blog\",\n path: \"blog\",\n name: \"Blog\",\n singularName: \"Blog entry\",\n icon: \"article\",\n description: \"A collection of blog entries\",\n defaultSize: \"l\",\n properties: makePropertiesEditable({\n name: {\n name: \"Name\",\n validation: { required: true },\n dataType: \"string\"\n },\n header_image: {\n name: \"Header image\",\n dataType: \"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 dataType: \"array\",\n oneOf: {\n typeField: \"type\",\n valueField: \"value\",\n properties: {\n text: {\n dataType: \"string\",\n name: \"Text\",\n markdown: true\n },\n quote: {\n dataType: \"string\",\n name: \"Quote\",\n multiline: true\n },\n images: {\n name: \"Images\",\n dataType: \"array\",\n of: {\n dataType: \"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 dataType: \"array\",\n of: {\n dataType: \"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 dataType: \"date\",\n autoValue: \"on_create\"\n },\n status: {\n name: \"Status\",\n validation: { required: true },\n dataType: \"string\",\n enumValues: {\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 dataType: \"date\",\n clearable: true\n },\n reviewed: {\n name: \"Reviewed\",\n dataType: \"boolean\"\n },\n tags: {\n name: \"Tags\",\n description: \"Example of generic array\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n previewAsTag: true\n }\n }\n }),\n initialFilter: {\n status: [\"==\", \"published\"]\n }\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const usersCollectionTemplate: EntityCollection = {\n id: \"users\",\n path: \"users\",\n name: \"Users\",\n singularName: \"User\",\n description: \"Registered users in the app/web\",\n icon: \"person\",\n properties: makePropertiesEditable({\n displayName: {\n name: \"Display name\",\n dataType: \"string\"\n },\n email: {\n name: \"Email\",\n dataType: \"string\",\n email: true\n },\n emailVerified: {\n name: \"Email verified\",\n dataType: \"boolean\"\n },\n phone: {\n name: \"Phone\",\n dataType: \"string\"\n },\n favourite_products: {\n name: \"Favourite products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n photoURL: {\n name: \"Photo URL\",\n dataType: \"string\",\n url: \"image\"\n }\n }),\n};\n","import { EntityCollection } from \"@firecms/core\";\n\nexport const pagesCollectionTemplate: EntityCollection = {\n id: \"pages\",\n path: \"pages\",\n name: \"Pages\",\n singularName: \"Page\",\n icon: \"insert_drive_file\",\n description: \"List of website pages that can be edited here\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Page Title\",\n validation: { required: true }\n },\n slug: {\n dataType: \"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 dataType: \"map\",\n name: \"Hero Section\",\n properties: {\n headline: {\n dataType: \"string\",\n name: \"Headline\",\n validation: { required: true }\n },\n subhead: {\n dataType: \"string\",\n name: \"Subheadline\"\n },\n background_image: {\n dataType: \"string\",\n name: \"Background Image\",\n storage: {\n storagePath: \"page_hero/images\",\n acceptedFiles: [\"image/*\"],\n }\n },\n call_to_action: {\n dataType: \"string\",\n name: \"Call to Action\"\n },\n call_to_action_link: {\n dataType: \"string\",\n name: \"CTA Link\",\n url: true\n }\n }\n },\n content: {\n dataType: \"array\",\n name: \"Content\",\n oneOf: {\n properties: {\n section: {\n dataType: \"map\",\n name: \"Section\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Section Title\",\n validation: { required: true }\n },\n content: {\n dataType: \"string\",\n name: \"Section Content\",\n markdown: true\n },\n image: {\n dataType: \"string\",\n name: \"Section Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n link: {\n dataType: \"string\",\n name: \"Section Link\",\n url: true\n }\n }\n },\n image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n slider: {\n dataType: \"array\",\n name: \"Slider\",\n of: {\n dataType: \"map\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Title\",\n validation: { required: true }\n },\n image: {\n dataType: \"string\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n }\n }\n },\n }\n }\n },\n sidebar: {\n dataType: \"map\",\n name: \"Sidebar\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Sidebar Title\",\n validation: { required: false }\n },\n content: {\n dataType: \"string\",\n name: \"Sidebar Content\",\n markdown: true\n }\n }\n },\n seo_metadata: {\n dataType: \"map\",\n name: \"SEO Metadata\",\n properties: {\n meta_title: {\n dataType: \"string\",\n name: \"Meta Title\"\n },\n meta_description: {\n dataType: \"string\",\n name: \"Meta Description\"\n },\n focus_keywords: {\n dataType: \"array\",\n name: \"Focus Keywords\",\n of: {\n dataType: \"string\"\n }\n }\n }\n },\n footer_override: {\n dataType: \"string\",\n name: \"Footer Override\",\n markdown: true\n },\n publish_date: {\n dataType: \"date\",\n name: \"Publish Date\",\n validation: { required: true }\n },\n last_updated: {\n dataType: \"date\",\n name: \"Last Updated\",\n autoValue: \"on_update\"\n },\n is_published: {\n dataType: \"boolean\",\n name: \"Is Published\",\n columnWidth: 100,\n description: \"Should this page be live on the site?\"\n },\n author_uid: {\n dataType: \"reference\",\n name: \"Author\",\n path: \"users\"\n }\n }\n};\n","import React, { useEffect, useState } from \"react\";\nimport { EntityCollection, unslugify, } from \"@firecms/core\";\nimport { Button, Card, Chip, CircularProgress, cn, Container, Icon, Tooltip, Typography, } from \"@firecms/ui\";\n\nimport { productsCollectionTemplate } from \"./templates/products_template\";\nimport { blogCollectionTemplate } from \"./templates/blog_template\";\nimport { usersCollectionTemplate } from \"./templates/users_template\";\nimport { ImportFileUpload } from \"@firecms/data_import_export\";\nimport { pagesCollectionTemplate } from \"./templates/pages_template\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function CollectionEditorWelcomeView({\n path,\n pathSuggestions,\n parentCollection,\n onContinue,\n existingCollectionPaths\n }: {\n path: string;\n pathSuggestions?: (path: string) => Promise<string[]>;\n parentCollection?: EntityCollection;\n onContinue: (importData?: object[]) => void;\n existingCollectionPaths?: string[];\n}) {\n\n const [loadingPathSuggestions, setLoadingPathSuggestions] = useState(false);\n const [filteredPathSuggestions, setFilteredPathSuggestions] = useState<string[] | undefined>();\n useEffect(() => {\n if (pathSuggestions && existingCollectionPaths) {\n setLoadingPathSuggestions(true);\n pathSuggestions(path)\n .then(suggestions => {\n const filteredSuggestions = suggestions.filter(s => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === s.trim().toLowerCase()));\n setFilteredPathSuggestions(filteredSuggestions);\n })\n .finally(() => setLoadingPathSuggestions(false));\n }\n }, [existingCollectionPaths, path, pathSuggestions]);\n\n // const {\n // values,\n // setFieldValue,\n // setValues,\n // handleChange,\n // touched,\n // errors,\n // setFieldTouched,\n // isSubmitting,\n // submitCount\n // } = useFormex<EntityCollection>();\n\n const {\n values,\n setFieldValue,\n setValues,\n submitCount\n } = useFormex<EntityCollection>();\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={\"flex-grow\"}>\n New collection\n </Typography>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n <div className={\"my-2\"}>\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 {loadingPathSuggestions && !filteredPathSuggestions && <CircularProgress size={\"small\"}/>}\n\n {filteredPathSuggestions?.map((suggestion, index) => (\n <Chip key={suggestion}\n colorScheme={\"cyanLighter\"}\n onClick={() => {\n setFieldValue(\"name\", unslugify(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 {!loadingPathSuggestions && (filteredPathSuggestions ?? [])?.length === 0 &&\n <Typography variant={\"caption\"}>\n No suggestions\n </Typography>\n }\n\n </div>\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-4\"}>\n <TemplateButton title={\"Products\"}\n subtitle={\"A collection of products with images, prices and stock\"}\n icon={<Icon size={\"small\"} iconKey={productsCollectionTemplate.icon!}/>}\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={<Icon size={\"small\"} iconKey={usersCollectionTemplate.icon!}/>}\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={<Icon size={\"small\"} iconKey={blogCollectionTemplate.icon!}/>}\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={<Icon size={\"small\"} iconKey={pagesCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\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) => onContinue(data)}/>\n\n </div>}\n\n <div>\n\n <Button variant={\"text\"} onClick={() => onContinue()} className={\"my-2\"}>\n Continue from scratch\n </Button>\n </div>\n\n {/*<div style={{ height: \"52px\" }}/>*/}\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,\n subtitle: string,\n onClick?: () => void\n}) {\n\n return (\n <Tooltip title={subtitle}>\n <Card\n onClick={onClick}\n className={cn(\n \"my-2 rounded-md border mx-0 p-6 px-4 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-gray-700 dark:text-slate-300\",\n \"hover:border-primary-dark hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n \"border-gray-400 dark:border-gray-600 \"\n )}\n >\n {icon}\n <div className={\"flex flex-col items-start\"}>\n\n <Typography variant={\"subtitle1\"}>\n {title}\n </Typography>\n {/*<Typography>*/}\n {/* {subtitle}*/}\n {/*</Typography>*/}\n\n </div>\n </Card>\n </Tooltip>\n );\n\n}\n","import {\n DataNewPropertiesMapping,\n getInferenceType,\n ImportConfig,\n ImportNewPropertyFieldPreview\n} from \"@firecms/data_import_export\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { PropertyConfigBadge, getFieldConfig, getFieldId, Properties, Property, PropertyConfig, } from \"@firecms/core\";\nimport { Container, Select, Tooltip, Typography } from \"@firecms/ui\";\nimport React, { useState } from \"react\";\nimport { OnPropertyChangedParams, PropertyFormDialog, PropertyWithId } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { PersistedCollection } from \"../../../types/persisted_collection\";\nimport { updatePropertyFromWidget } from \"../utils/update_property_for_widget\";\nimport { PropertySelectItem } from \"../PropertySelectItem\";\nimport { supportedFields } from \"../utils/supported_fields\";\nimport { buildPropertyFromData } from \"@firecms/schema_inference\";\n\nexport function CollectionEditorImportMapping({\n importConfig,\n propertyConfigs,\n collectionEditable\n }:\n {\n importConfig: ImportConfig,\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean\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<PersistedCollection>();\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 editable: true\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={\"mt-4\"}>Data property mapping</Typography>\n\n <DataNewPropertiesMapping headersMapping={importConfig.headersMapping}\n idColumn={importConfig.idColumn}\n originProperties={importConfig.originProperties}\n destinationProperties={values.properties as Properties}\n onIdPropertyChanged={(value) => importConfig.setIdColumn(value ?? undefined)}\n buildPropertyView={({\n property,\n propertyKey,\n importKey\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 editable: true\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 collectionEditable={collectionEditable}\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.dataType}` : 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 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 <PropertySelectItem\n key={key}\n value={key}\n optionDisabled={false}\n propertyConfig={widget}\n existing={false}/>;\n })\n }\n </Select>\n </Tooltip>;\n}\n","import { convertDataToEntity, getPropertiesMapping, ImportConfig } from \"@firecms/data_import_export\";\nimport { EntityCollectionTable, Properties, useSelectionController } from \"@firecms/core\";\nimport { useEffect } from \"react\";\nimport { Typography } from \"@firecms/ui\";\n\nexport function CollectionEditorImportDataPreview({ importConfig, properties, propertiesOrder }: {\n importConfig: ImportConfig,\n properties: Properties,\n propertiesOrder: string[]\n}) {\n\n useEffect(() => {\n const propertiesMapping = getPropertiesMapping(importConfig.originProperties, properties);\n const mappedData = importConfig.importData.map(d => convertDataToEntity(d, importConfig.idColumn, importConfig.headersMapping, properties, propertiesMapping, \"TEMP_PATH\"));\n importConfig.setEntities(mappedData);\n }, []);\n\n const selectionController = useSelectionController();\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 => ({ key: p, disabled: false }))}\n properties={properties}/>\n\n}\n","import { Properties, slugify } from \"@firecms/core\";\nimport { ImportConfig } from \"@firecms/data_import_export\";\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.dataType === \"map\" && property.properties) {\n const slugifiedResult = cleanPropertiesFromImport(property.properties as Properties, fullSlug);\n return {\n headersMapping: { ...acc.headersMapping, [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, [key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties,\n }\n }, { headersMapping: {}, properties: {} });\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","import * as React from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n CircularProgressCenter,\n EntityCollection,\n ErrorView,\n isPropertyBuilder,\n MapProperty,\n mergeDeep,\n Properties,\n PropertiesOrBuilders,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n randomString,\n removeInitialAndTrailingSlashes,\n removeUndefined,\n TopNavigationResult,\n useAuthController,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n ArrowBackIcon,\n Button,\n cn,\n coolIconKeys,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DoneIcon,\n IconButton,\n LoadingButton,\n Tab,\n Tabs\n} from \"@firecms/ui\";\nimport { YupSchema } from \"./CollectionYupValidation\";\nimport { CollectionDetailsForm } from \"./CollectionDetailsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { UnsavedChangesDialog } from \"./UnsavedChangesDialog\";\nimport { SubcollectionsEditTab } from \"./SubcollectionsEditTab\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionEditorWelcomeView } from \"./CollectionEditorWelcomeView\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { getInferenceType, ImportSaveInProgress, useImportConfig } from \"@firecms/data_import_export\";\nimport { buildEntityPropertiesFromData } from \"@firecms/schema_inference\";\nimport { CollectionEditorImportMapping } from \"./import/CollectionEditorImportMapping\";\nimport { CollectionEditorImportDataPreview } from \"./import/CollectionEditorImportDataPreview\";\nimport { cleanPropertiesFromImport } from \"./import/clean_import_data\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { Formex, FormexController, useCreateFormex } from \"@firecms/formex\";\nimport { getFullIdPath } from \"./util\";\n\nexport interface CollectionEditorDialogProps {\n open: boolean;\n isNewCollection: boolean;\n initialValues?: {\n group?: string,\n path?: string,\n name?: string,\n }\n editedCollectionId?: string;\n fullPath?: string; // full path of this particular collection, like `products/123/locales`\n parentCollectionIds?: string[]; // path ids of the parent collection, like [`products`]\n handleClose: (collection?: EntityCollection) => void;\n configController: CollectionsConfigController;\n reservedGroups?: string[];\n collectionInference?: CollectionInference;\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n pathSuggestions?: (path?: string) => Promise<string[]>;\n getUser: (uid: string) => User | null;\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n parentCollection?: PersistedCollection;\n}\n\nexport function CollectionEditorDialog(props: CollectionEditorDialogProps) {\n\n const open = props.open;\n\n const [formDirty, setFormDirty] = React.useState<boolean>(false);\n const [unsavedChangesDialogOpen, setUnsavedChangesDialogOpen] = React.useState<boolean>(false);\n\n const handleCancel = useCallback(() => {\n if (!formDirty) {\n props.handleClose(undefined);\n } else {\n setUnsavedChangesDialogOpen(true);\n }\n }, [formDirty, props.handleClose]);\n\n useEffect(() => {\n if (!open) {\n setFormDirty(false);\n setUnsavedChangesDialogOpen(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 {open && <CollectionEditor {...props}\n handleCancel={handleCancel}\n setFormDirty={setFormDirty}/>}\n\n <UnsavedChangesDialog\n open={unsavedChangesDialogOpen}\n handleOk={() => props.handleClose(undefined)}\n handleCancel={() => setUnsavedChangesDialogOpen(false)}\n body={\"There are unsaved changes in this collection\"}/>\n\n </Dialog>\n );\n}\n\ntype EditorView = \"welcome\"\n | \"details\"\n | \"import_data_mapping\"\n | \"import_data_preview\"\n | \"import_data_saving\"\n | \"properties\"\n | \"loading\"\n | \"extra_view\"\n | \"subcollections\";\n\nexport function CollectionEditor(props: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void\n}) {\n const { propertyConfigs } = useCustomizationController();\n const navigation = useNavigationController();\n const authController = useAuthController();\n\n const {\n topLevelNavigation,\n collections\n } = navigation;\n\n const initialValuesProp = props.initialValues;\n const includeTemplates = !initialValuesProp?.path && (props.parentCollectionIds ?? []).length === 0;\n const collectionsInThisLevel = (props.parentCollection ? props.parentCollection.subcollections : collections) ?? [];\n const existingPaths = collectionsInThisLevel.map(col => col.path.trim().toLowerCase());\n const existingIds = collectionsInThisLevel.map(col => col.id?.trim().toLowerCase()).filter(Boolean) as string[];\n const [collection, setCollection] = React.useState<PersistedCollection<any> | undefined>();\n const [initialLoadingCompleted, setInitialLoadingCompleted] = React.useState(false);\n\n useEffect(() => {\n try {\n if (navigation.initialised) {\n if (props.editedCollectionId) {\n setCollection(navigation.getCollectionFromPaths([...(props.parentCollectionIds ?? []), props.editedCollectionId]));\n } else {\n setCollection(undefined);\n }\n setInitialLoadingCompleted(true);\n }\n } catch (e) {\n console.error(e);\n }\n }, [navigation.getCollectionFromPaths, props.editedCollectionId, props.parentCollectionIds, navigation.initialised]);\n if (!topLevelNavigation) {\n throw Error(\"Internal: Navigation not ready in collection editor\");\n }\n\n const {\n groups\n }: TopNavigationResult = topLevelNavigation;\n\n const initialCollection = collection\n ? {\n ...collection,\n id: collection.id ?? collection.path ?? randomString(16)\n }\n : undefined;\n\n const initialValues: PersistedCollection<any> = initialCollection\n ? applyPropertyConfigs(initialCollection, propertyConfigs)\n : {\n id: initialValuesProp?.path ?? randomString(16),\n path: initialValuesProp?.path ?? \"\",\n name: initialValuesProp?.name ?? \"\",\n group: initialValuesProp?.group ?? \"\",\n properties: {} as PropertiesOrBuilders,\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 && (!navigation.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 groups={groups}\n propertyConfigs={propertyConfigs}/>\n\n}\n\nfunction CollectionEditorInternal<M extends Record<string, any>>({\n isNewCollection,\n configController,\n editedCollectionId,\n parentCollectionIds,\n fullPath,\n collectionInference,\n handleClose,\n reservedGroups,\n extraView,\n handleCancel,\n setFormDirty,\n pathSuggestions,\n getUser,\n parentCollection,\n getData,\n existingPaths,\n existingIds,\n includeTemplates,\n collection,\n setCollection,\n initialValues,\n propertyConfigs,\n groups\n }: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void,\n initialValues: PersistedCollection<M>,\n existingPaths: string[],\n existingIds: string[],\n includeTemplates: boolean,\n collection: PersistedCollection<M> | undefined,\n setCollection: (collection: PersistedCollection<M>) => void,\n propertyConfigs: Record<string, PropertyConfig<any>>,\n groups: string[],\n }\n) {\n\n const importConfig = useImportConfig();\n const navigation = useNavigationController();\n const snackbarController = useSnackbarController();\n\n // Use this ref to store which properties have errors\n const propertyErrorsRef = useRef({});\n\n const initialView = isNewCollection ? (includeTemplates ? \"welcome\" : \"details\") : \"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: PersistedCollection<M>): Promise<boolean> => {\n const id = updatedCollection.id || updatedCollection.path;\n return configController.saveCollection({\n id,\n collectionData: updatedCollection,\n previousId: editedCollectionId,\n parentCollectionIds\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 = useCallback(() => {\n if (currentView === \"details\") {\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(\"details\");\n } else if (currentView === \"import_data_mapping\") {\n setCurrentView(\"import_data_preview\");\n } else if (currentView === \"import_data_preview\") {\n setCurrentView(\"details\");\n } else if (currentView === \"extra_view\") {\n setCurrentView(\"properties\");\n } else {\n setCurrentView(\"details\");\n }\n\n }, [currentView, importConfig.inUse, extraView]);\n\n const doCollectionInference = useCallback((collection: PersistedCollection<any>) => {\n if (!collectionInference) return undefined;\n return collectionInference?.(collection.path, collection.collectionGroup ?? false, parentCollectionIds ?? []);\n }, [collectionInference, parentCollectionIds]);\n\n const inferCollectionFromData = useCallback(async (newCollection: PersistedCollection<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 PropertiesOrBuilders<M>;\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: any) {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error inferring collection: \" + (e.message ?? \"Details in the console\")\n });\n return newCollection;\n }\n }, [parentCollectionIds, doCollectionInference]);\n\n const onSubmit = (newCollectionState: PersistedCollection<M>, formexController: FormexController<PersistedCollection<M>>) => {\n console.log(\"Submitting collection\", newCollectionState);\n try {\n\n if (!isNewCollection) {\n saveCollection(newCollectionState).then(() => {\n formexController.resetForm({ values: initialValues });\n handleClose(newCollectionState);\n });\n return;\n }\n\n if (currentView === \"welcome\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"details\") {\n if (extraView || importConfig.inUse) {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n } else if (isNewCollection) {\n inferCollectionFromData(newCollectionState)\n .then((values) => {\n formexController.resetForm({\n values: values ?? newCollectionState,\n touched: {\n path: true,\n name: true\n }\n });\n }).finally(() => {\n setNextMode();\n });\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 saveCollection(newCollectionState).then(() => {\n formexController.resetForm({ values: initialValues });\n setNextMode();\n handleClose(newCollectionState);\n });\n } else {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n }\n } catch (e: any) {\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n console.error(e);\n formexController.resetForm({ values: newCollectionState });\n }\n };\n\n const validation = (col: PersistedCollection) => {\n\n let errors: Record<string, any> = {};\n const schema = (currentView === \"properties\" || currentView === \"subcollections\" || currentView === \"details\") && YupSchema;\n if (schema) {\n try {\n schema.validateSync(col, { abortEarly: false });\n } catch (e: any) {\n e.inner.forEach((err: any) => {\n errors[err.path] = err.message;\n });\n }\n }\n if (currentView === \"properties\") {\n errors = { ...errors, ...propertyErrorsRef.current };\n }\n if (currentView === \"details\") {\n const pathError = validatePath(col.path, isNewCollection, existingPaths, col.id);\n if (pathError) {\n errors.path = pathError;\n }\n const idError = validateId(col.id, isNewCollection, existingPaths, existingIds);\n if (idError) {\n errors.id = idError;\n }\n }\n return errors;\n };\n\n const formController = useCreateFormex<PersistedCollection<M>>({\n initialValues,\n onSubmit,\n validation\n });\n\n const {\n values,\n setFieldValue,\n isSubmitting,\n dirty,\n submitCount\n } = formController;\n\n // TODO: getting data is only working in root collections with this code\n const path = values.path;\n const updatedFullPath = fullPath?.includes(\"/\") ? fullPath?.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + path : path; // TODO: this path is wrong\n const pathError = validatePath(path, isNewCollection, existingPaths, values.id);\n\n const parentPaths = !pathError && parentCollectionIds ? navigation.convertIdsToPaths(parentCollectionIds) : undefined;\n const resolvedPath = !pathError ? navigation.resolveAliasesFrom(updatedFullPath) : undefined;\n const getDataWithPath = resolvedPath && getData ? () => getData(resolvedPath, parentPaths ?? []) : undefined;\n\n useEffect(() => {\n setFormDirty(dirty);\n }, [dirty]);\n\n function onImportDataSet(data: object[]) {\n importConfig.setInUse(true);\n buildEntityPropertiesFromData(data, getInferenceType)\n .then((properties) => {\n const res = cleanPropertiesFromImport(properties);\n\n setFieldValue(\"properties\", res.properties);\n setFieldValue(\"propertiesOrder\", Object.keys(res.properties));\n\n importConfig.setIdColumn(res.idColumn);\n importConfig.setImportData(data);\n importConfig.setHeadersMapping(res.headersMapping);\n importConfig.setOriginProperties(res.properties);\n });\n }\n\n const validValues = Boolean(values.name) && Boolean(values.id);\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 editable = collection?.editable === undefined || collection?.editable === true;\n const collectionEditable = editable || isNewCollection;\n\n return <DialogContent fullHeight={true}>\n <Formex value={formController}>\n\n <>\n {!isNewCollection && <Tabs value={currentView}\n className={cn(defaultBorderMixin, \"justify-end bg-gray-50 dark:bg-gray-950 border-b\")}\n onValueChange={(v) => setCurrentView(v as EditorView)}>\n <Tab value={\"details\"}>\n Details\n </Tab>\n <Tab value={\"properties\"}>\n Properties\n </Tab>\n <Tab value={\"subcollections\"}>\n Additional views\n </Tab>\n </Tabs>}\n\n <form noValidate\n onSubmit={formController.handleSubmit}\n className={cn(\n isNewCollection ? \"h-full\" : \"h-[calc(100%-48px)]\",\n \"flex-grow flex flex-col relative\")}>\n\n {currentView === \"loading\" &&\n <CircularProgressCenter/>}\n\n {currentView === \"extra_view\" &&\n path &&\n extraView?.View &&\n <extraView.View path={path}/>}\n\n {currentView === \"welcome\" &&\n <CollectionEditorWelcomeView\n path={path}\n onContinue={(importData) => {\n if (importData) {\n onImportDataSet(importData);\n setCurrentView(\"import_data_mapping\");\n } else {\n setCurrentView(\"details\");\n }\n }}\n existingCollectionPaths={existingPaths}\n parentCollection={parentCollection}\n pathSuggestions={pathSuggestions}/>}\n\n {currentView === \"import_data_mapping\" && importConfig &&\n <CollectionEditorImportMapping importConfig={importConfig}\n collectionEditable={collectionEditable}\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={path}\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 === \"details\" &&\n <CollectionDetailsForm\n existingPaths={existingPaths}\n existingIds={existingIds}\n groups={groups}\n parentCollectionIds={parentCollectionIds}\n parentCollection={parentCollection}\n isNewCollection={isNewCollection}/>}\n\n {currentView === \"subcollections\" && collection &&\n <SubcollectionsEditTab\n parentCollection={parentCollection}\n configController={configController}\n getUser={getUser}\n collectionInference={collectionInference}\n parentCollectionIds={parentCollectionIds}\n collection={collection}/>}\n\n {currentView === \"properties\" &&\n <CollectionPropertiesEditorForm\n showErrors={submitCount > 0}\n isNewCollection={isNewCollection}\n reservedGroups={reservedGroups}\n onPropertyError={(propertyKey, namespace, error) => {\n const current = removeUndefined({\n ...propertyErrorsRef.current,\n [getFullIdPath(propertyKey, namespace)]: removeUndefined(error, true)\n }, true);\n propertyErrorsRef.current = current;\n formController.validate();\n }}\n getUser={getUser}\n getData={getDataWithPath}\n doCollectionInference={doCollectionInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n extraIcon={extraView?.icon &&\n <IconButton\n color={\"primary\"}\n onClick={() => setCurrentView(\"extra_view\")}>\n {extraView.icon}\n </IconButton>}/>\n }\n\n {currentView !== \"welcome\" && <DialogActions\n position={\"absolute\"}>\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 <ArrowBackIcon/>\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 <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"details\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"welcome\")}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && currentView === \"properties\" && <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"details\")}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n <Button variant={\"text\"}\n onClick={() => {\n handleCancel();\n }}>\n Cancel\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 === \"details\" || currentView === \"properties\") &&\n <LoadingButton\n variant={\"filled\"}\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n disabled={isSubmitting || (currentView === \"details\" && !validValues)}\n startIcon={currentView === \"properties\"\n ? <DoneIcon/>\n : undefined}\n >\n {currentView === \"details\" && \"Next\"}\n {currentView === \"properties\" && \"Create collection\"}\n </LoadingButton>}\n\n {!isNewCollection && <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Update collection\n </LoadingButton>}\n\n </DialogActions>}\n </form>\n </>\n\n </Formex>\n\n </DialogContent>\n\n}\n\nfunction applyPropertyConfigs<M extends Record<string, any> = any>(collection: PersistedCollection<M>, propertyConfigs: Record<string, PropertyConfig<any>>): PersistedCollection<M> {\n const { properties, ...rest } = collection;\n const propertiesResult: PropertiesOrBuilders<any> = {};\n if (properties) {\n Object.keys(properties).forEach((key) => {\n propertiesResult[key] = applyPropertiesConfig(properties[key] as PropertyOrBuilder, propertyConfigs);\n });\n }\n\n return { ...rest, properties: propertiesResult };\n}\n\nfunction applyPropertiesConfig(property: PropertyOrBuilder, propertyConfigs: Record<string, PropertyConfig<any>>) {\n let internalProperty = property;\n if (propertyConfigs && typeof internalProperty === \"object\" && internalProperty.propertyConfig) {\n const propertyConfig = propertyConfigs[internalProperty.propertyConfig];\n if (propertyConfig && isPropertyBuilder(propertyConfig.property)) {\n internalProperty = propertyConfig.property;\n } else {\n\n if (propertyConfig) {\n internalProperty = mergeDeep(propertyConfig.property, internalProperty);\n }\n\n if (!isPropertyBuilder(internalProperty) && internalProperty.dataType === \"map\" && internalProperty.properties) {\n const properties: Record<string, PropertyOrBuilder> = {};\n Object.keys(internalProperty.properties).forEach((key) => {\n properties[key] = applyPropertiesConfig(((internalProperty as MapProperty).properties as Properties)[key] as Property, propertyConfigs);\n });\n internalProperty = { ...internalProperty, properties };\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","import React, { PropsWithChildren, useCallback, useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport {\n Property,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport { CollectionEditorDialog } from \"./ui/collection_editor/CollectionEditorDialog\";\nimport { useNavigate } from \"react-router\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { PropertyFormDialog } from \"./ui/collection_editor/PropertyEditView\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\n\nexport const ConfigControllerContext = React.createContext<CollectionsConfigController>({} as any);\nexport const CollectionEditorContext = React.createContext<CollectionEditorController>({} as any);\n\nexport interface ConfigControllerProviderProps {\n /**\n * Controller for managing the collections' config.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Callback used to infer the schema from the data.\n */\n collectionInference?: CollectionInference;\n\n /**\n * Use this builder to define the permissions for the configuration per user.\n */\n configPermissions?: CollectionEditorPermissionsBuilder;\n\n /**\n * Groups that cannot be used to create new collections.\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n pathSuggestions?: (path?: string) => Promise<string[]>;\n\n getUser: (uid: string) => User | null\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n}\n\nexport const ConfigControllerProvider = React.memo(\n function ConfigControllerProvider({\n children,\n collectionConfigController,\n configPermissions,\n reservedGroups,\n collectionInference,\n extraView,\n pathSuggestions,\n getUser,\n getData,\n onAnalyticsEvent\n }: PropsWithChildren<ConfigControllerProviderProps>) {\n\n const navigation = useNavigationController();\n const navigate = useNavigate();\n const snackbarController = useSnackbarController();\n const { propertyConfigs } = useCustomizationController();\n\n const {\n collections\n } = navigation;\n const existingPaths = (collections ?? []).map(col => col.path.trim().toLowerCase());\n\n const [rootPathSuggestions, setRootPathSuggestions] = React.useState<string[] | undefined>();\n useEffect(() => {\n if (pathSuggestions) {\n pathSuggestions().then((paths) => {\n setRootPathSuggestions(paths.filter(p => !existingPaths.includes(p.trim().toLowerCase())));\n });\n }\n }, [pathSuggestions]);\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n parentCollection?: PersistedCollection,\n editedCollectionId?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n initialValues?: {\n path?: string,\n group?: string,\n name?: string\n },\n redirect: boolean\n }>();\n\n const [currentPropertyDialog, setCurrentPropertyDialog] = React.useState<{\n propertyKey?: string,\n property?: Property,\n namespace?: string,\n parentCollection?: PersistedCollection,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n fullPath?: string,\n parentCollectionIds: string[],\n collectionEditable: boolean;\n }>();\n\n const defaultConfigPermissions: CollectionEditorPermissionsBuilder = useCallback(() => ({\n createCollections: true,\n editCollections: true,\n deleteCollections: true\n }), []);\n\n const editCollection = useCallback(({\n id,\n fullPath,\n parentCollectionIds,\n parentCollection\n }: {\n id?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection\n }) => {\n console.debug(\"Edit collection\", id, fullPath, parentCollectionIds, parentCollection);\n onAnalyticsEvent?.(\"edit_collection\", { id, fullPath });\n setCurrentDialog({\n editedCollectionId: id,\n fullPath,\n parentCollectionIds,\n isNewCollection: false,\n parentCollection,\n redirect: false\n });\n }, []);\n\n const editProperty = useCallback(({\n propertyKey,\n property,\n editedCollectionId,\n currentPropertiesOrder,\n parentCollectionIds,\n collection\n }: {\n propertyKey?: string,\n property?: Property,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n parentCollectionIds: string[],\n collection: PersistedCollection,\n }) => {\n console.debug(\"Edit property\", propertyKey, property, editedCollectionId, currentPropertiesOrder, parentCollectionIds, collection);\n onAnalyticsEvent?.(\"edit_property\", { propertyKey, editedCollectionId });\n // namespace is all the path until the last dot\n const namespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(0, propertyKey.lastIndexOf(\".\"))\n : undefined;\n const propertyKeyWithoutNamespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(propertyKey.lastIndexOf(\".\") + 1)\n : propertyKey;\n setCurrentPropertyDialog({\n propertyKey: propertyKeyWithoutNamespace,\n property,\n namespace,\n currentPropertiesOrder,\n editedCollectionId: editedCollectionId,\n parentCollectionIds,\n collectionEditable: collection?.editable ?? false\n });\n }, []);\n\n const createCollection = React.useCallback(({\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n }: {\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection\n initialValues?: {\n group?: string,\n path?: string,\n name?: string\n },\n redirect: boolean,\n sourceClick?: string\n }) => {\n console.debug(\"Create collection\", { parentCollectionIds, parentCollection, initialValues, redirect, sourceClick });\n onAnalyticsEvent?.(\"create_collection\", { parentCollectionIds, parentCollection, initialValues, redirect, sourceClick });\n setCurrentDialog({\n isNewCollection: true,\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect\n });\n }, []);\n\n const getPathSuggestions = !pathSuggestions\n ? undefined\n : (path?: string) => {\n if (!path && rootPathSuggestions)\n return Promise.resolve(rootPathSuggestions);\n else {\n return pathSuggestions?.(path);\n }\n }\n\n return (\n <ConfigControllerContext.Provider value={collectionConfigController}>\n <CollectionEditorContext.Provider\n value={{\n editCollection,\n createCollection,\n editProperty,\n configPermissions: configPermissions ?? defaultConfigPermissions,\n rootPathSuggestions\n }}>\n\n {children}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={collectionConfigController}\n isNewCollection={false}\n collectionInference={collectionInference}\n {...currentDialog}\n getData={getData}\n reservedGroups={reservedGroups}\n extraView={extraView}\n pathSuggestions={getPathSuggestions}\n getUser={getUser}\n handleClose={(collection) => {\n if (currentDialog?.redirect) {\n if (collection && currentDialog?.isNewCollection && !currentDialog.parentCollectionIds.length) {\n const url = navigation.buildUrlCollectionPath(collection.id ?? collection.path);\n navigate(url);\n }\n }\n setCurrentDialog(undefined);\n }}/>\n\n {/* Used for editing properties*/}\n <PropertyFormDialog\n open={Boolean(currentPropertyDialog)}\n includeIdAndName={true}\n existingProperty={Boolean(currentPropertyDialog?.propertyKey)}\n autoUpdateId={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n autoOpenTypeSelect={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n inArray={false}\n collectionEditable={currentPropertyDialog?.collectionEditable ?? false}\n getData={getData && currentPropertyDialog?.editedCollectionId\n ? () => {\n console.debug(\"get data for property\", currentPropertyDialog?.editedCollectionId);\n const resolvedPath = navigation.resolveAliasesFrom(currentPropertyDialog.editedCollectionId!)\n return getData(resolvedPath, []);\n }\n : undefined}\n onPropertyChanged={({\n id,\n property\n }) => {\n if (!currentPropertyDialog) return;\n if (!id) return;\n const newProperty = !(currentPropertyDialog.propertyKey);\n return collectionConfigController.saveProperty({\n path: currentPropertyDialog?.editedCollectionId,\n property,\n propertyKey: id,\n newPropertiesOrder: newProperty && currentPropertyDialog.currentPropertiesOrder ? [...currentPropertyDialog.currentPropertiesOrder, id] : undefined,\n namespace: currentPropertyDialog.namespace,\n parentCollectionIds: currentPropertyDialog.parentCollectionIds\n })\n .catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onPropertyChangedImmediate={false}\n onDelete={() => {\n if (!currentPropertyDialog?.propertyKey) return;\n const newPropertiesOrder = currentPropertyDialog?.currentPropertiesOrder?.filter(p => p !== currentPropertyDialog?.propertyKey);\n return collectionConfigController.deleteProperty({\n path: currentPropertyDialog?.editedCollectionId,\n propertyKey: currentPropertyDialog?.propertyKey,\n namespace: currentPropertyDialog?.namespace,\n newPropertiesOrder,\n parentCollectionIds: currentPropertyDialog?.parentCollectionIds\n })\n .then(() => {\n setCurrentPropertyDialog(undefined);\n }).catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onError={() => {\n }}\n onOkClicked={() => {\n setCurrentPropertyDialog(undefined);\n }}\n onCancel={() => {\n setCurrentPropertyDialog(undefined);\n }}\n initialErrors={{}}\n forceShowErrors={false}\n existingPropertyKeys={[]}\n allowDataInference={true}\n propertyConfigs={propertyConfigs}\n property={currentPropertyDialog?.property}\n propertyKey={currentPropertyDialog?.propertyKey}/>\n\n </CollectionEditorContext.Provider>\n\n </ConfigControllerContext.Provider>\n );\n }, equal);\n","import { useContext } from \"react\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorContext } from \"./ConfigControllerProvider\";\n\n/**\n * Hook to access the collection editor controller.\n * The methods in this controller can be used to open the collection editor dialog.\n */\nexport const useCollectionEditorController = (): CollectionEditorController => useContext(CollectionEditorContext);\n","import { useContext } from \"react\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { ConfigControllerContext } from \"./ConfigControllerProvider\";\n\n/**\n * Use this hook to access the configuration controller.\n * You can use it to get the list of collections, and to save/delete collections.\n */\nexport const useCollectionsConfigController = (): CollectionsConfigController => useContext(ConfigControllerContext);\n","import equal from \"react-fast-compare\"\n\nimport {\n CollectionActionsProps,\n mergeDeep,\n useAuthController,\n useNavigationController,\n useSnackbarController\n} from \"@firecms/core\";\nimport { Button, IconButton, SaveIcon, SettingsIcon, Tooltip, UndoIcon, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionAction({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n const collectionEditorController = useCollectionEditorController();\n const configController = useCollectionsConfigController();\n const snackbarController = useSnackbarController();\n\n const parentCollection = navigationController.getCollectionFromIds(parentCollectionIds);\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n let saveDefaultFilterButton = null;\n if (!equal(getObjectOrNull(tableController.filterValues), getObjectOrNull(collection.initialFilter)) ||\n !equal(getObjectOrNull(tableController.sortBy), getObjectOrNull(collection.initialSort))) {\n saveDefaultFilterButton = <>\n {(collection.initialFilter || collection.initialSort) && <Tooltip\n title={\"Reset to default filter and sort\"}>\n <Button\n color={\"primary\"}\n size={\"small\"}\n variant={\"text\"}\n onClick={() => {\n tableController.clearFilter?.();\n if (collection?.initialFilter)\n tableController.setFilterValues?.(collection?.initialFilter);\n if (collection?.initialSort)\n tableController.setSortBy?.(collection?.initialSort);\n }}>\n <UndoIcon/>\n </Button>\n </Tooltip>}\n\n <Tooltip\n title={tableController.sortBy || tableController.filterValues ? \"Save default filter and sort\" : \"Clear default filter and sort\"}>\n <Button\n color={\"primary\"}\n size={\"small\"}\n variant={\"outlined\"}\n onClick={() => configController\n ?.saveCollection({\n id: collection.id,\n parentCollectionIds,\n collectionData: mergeDeep(collection as PersistedCollection,\n {\n initialFilter: tableController.filterValues ?? null,\n initialSort: tableController.sortBy ?? null\n })\n }).then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"Default config saved\"\n });\n })}>\n <SaveIcon/>\n </Button>\n </Tooltip>\n </>;\n }\n\n const editorButton = <Tooltip\n title={canEditCollection ? \"Edit collection\" : \"You don't have permissions to edit this collection\"}>\n <IconButton\n color={\"primary\"}\n disabled={!canEditCollection}\n onClick={canEditCollection\n ? () => collectionEditorController?.editCollection({ id: collection.id, fullPath, parentCollectionIds, parentCollection: parentCollection as PersistedCollection })\n : undefined}>\n <SettingsIcon/>\n </IconButton>\n </Tooltip>;\n\n return <>\n {canEditCollection && saveDefaultFilterButton}\n {editorButton}\n </>\n\n}\n\nfunction getObjectOrNull(o?: object): object | null {\n if (o && Object.keys(o).length === 0)\n return o\n return o ?? null;\n}\n","import {\n DeleteConfirmationDialog,\n PluginHomePageActionsProps,\n useAuthController,\n useSnackbarController\n} from \"@firecms/core\";\nimport { DeleteIcon, IconButton, Menu, MenuItem, MoreVertIcon, SettingsIcon, } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useCallback, useState } from \"react\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\n\nexport function HomePageEditorCollectionAction({\n path,\n collection\n }: PluginHomePageActionsProps) {\n\n const snackbarController = useSnackbarController();\n const authController = useAuthController();\n const configController = useCollectionsConfigController();\n const collectionEditorController = useCollectionEditorController();\n\n const permissions = collectionEditorController.configPermissions({\n user: authController.user,\n collection\n });\n\n const onEditCollectionClicked = useCallback(() => {\n collectionEditorController?.editCollection({ id: collection.id, parentCollectionIds: [] });\n }, [collectionEditorController, path]);\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = useCallback(() => {\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n }, [path, configController]);\n\n return <>\n\n <div>\n {permissions.deleteCollections &&\n <Menu\n trigger={<IconButton>\n <MoreVertIcon size={\"small\"}/>\n </IconButton>}\n >\n <MenuItem onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setDeleteRequested(true);\n }}>\n <DeleteIcon/>\n Delete\n </MenuItem>\n\n </Menu>\n\n }\n\n {permissions.editCollections &&\n <IconButton\n onClick={(event) => {\n onEditCollectionClicked();\n }}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>}\n </div>\n\n <DeleteConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete this collection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>}/>\n </>;\n\n}\n","import { PluginHomePageAdditionalCardsProps, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Card, cn, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionCard({\n group,\n context\n }: PluginHomePageAdditionalCardsProps) {\n\n if (!context.navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n return (\n <Card className={cn(\"h-full p-4 min-h-[124px]\")}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n initialValues: group ? { group } : undefined,\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n\n <div\n className=\"flex flex-col items-start h-full w-full items-center justify-center h-full w-full flex-grow flex-col\">\n <AddIcon color=\"primary\" size={\"large\"}/>\n <Typography color=\"primary\"\n variant={\"caption\"}\n className={\"font-medium\"}>{\"Add new collection\".toUpperCase()}</Typography>\n\n {!canCreateCollections &&\n <Typography variant={\"caption\"}>You don&apos;t have permissions to create\n collections</Typography>\n }\n </div>\n\n </Card>\n );\n}\n","import { unslugify, useAuthController, useNavigationController } from \"@firecms/core\";\nimport { AddIcon, Chip, CircularProgress, Collapse, Typography, } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport React from \"react\";\n\nexport function RootCollectionSuggestions({ introMode }: { introMode?: \"new_project\" | \"existing_project\" }) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user\n }).createCollections\n : true;\n\n const rootPathSuggestions = collectionEditorController.rootPathSuggestions;\n\n const showSuggestions = (rootPathSuggestions ?? []).length > 3 || ((navigationController.collections ?? []).length === 0 && (rootPathSuggestions ?? []).length > 0);\n const forceShowSuggestions = introMode === \"existing_project\";\n return <Collapse\n in={forceShowSuggestions || showSuggestions}>\n\n <div\n className={\"flex flex-col gap-1 p-2 my-4\"}>\n\n {!introMode && <Typography variant={\"body2\"} color={\"secondary\"}>\n Create a collection <b>automatically</b> from your data:\n </Typography>}\n\n {introMode === \"existing_project\" && <Typography>\n You will see your <b>database collections</b> here, a few seconds after project creation\n </Typography>}\n\n <div\n className={\"flex flex-row gap-1 overflow-scroll no-scrollbar \"}>\n {(rootPathSuggestions ?? []).map((path) => {\n return (\n <div key={path}>\n <Chip\n icon={<AddIcon size={\"small\"}/>}\n colorScheme={\"cyanLighter\"}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n initialValues: { path, name: unslugify(path) },\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"root_collection_suggestion\"\n })\n : undefined}\n size=\"small\">\n {path}\n </Chip>\n </div>\n );\n })}\n {rootPathSuggestions === undefined && <CircularProgress size={\"small\"}/>}\n {rootPathSuggestions?.length === 0 && <Typography variant={\"caption\"}>No suggestions</Typography>}\n </div>\n </div>\n </Collapse>\n}\n","import { ResolvedProperty } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip } from \"@firecms/ui\";\nimport React from \"react\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function CollectionViewHeaderAction({\n propertyKey,\n onHover,\n property,\n fullPath,\n parentCollectionIds,\n collection\n }: {\n property: ResolvedProperty,\n propertyKey: string,\n onHover: boolean,\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n}) {\n\n const collectionEditorController = useCollectionEditorController();\n\n return (\n <Tooltip title={\"Edit\"}>\n <IconButton\n className={onHover ? \"bg-white dark:bg-gray-950\" : \"hidden\"}\n onClick={() => {\n collectionEditorController.editProperty({\n propertyKey,\n property,\n editedCollectionId: collection.id,\n parentCollectionIds,\n collection\n });\n }}\n size={\"small\"}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n )\n}\n","import { getDefaultPropertiesOrder, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Tooltip } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function PropertyAddColumnComponent({\n fullPath,\n parentCollectionIds,\n collection\n }: {\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n}) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n return (\n <Tooltip title={canEditCollection ? \"Add new property\" : \"You don't have permission to add new properties\"}>\n <div\n className={\"p-0.5 w-20 h-full flex items-center justify-center cursor-pointer bg-gray-100 bg-opacity-40 hover:bg-gray-100 dark:bg-gray-950 dark:bg-opacity-40 dark:hover:bg-gray-950\"}\n // className={onHover ? \"bg-white dark:bg-gray-950\" : undefined}\n onClick={() => {\n collectionEditorController.editProperty({\n editedCollectionId: collection.id,\n parentCollectionIds,\n currentPropertiesOrder: getDefaultPropertiesOrder(collection),\n collection\n });\n }}>\n <AddIcon color={\"inherit\"}/>\n </div>\n </Tooltip>\n )\n}\n","import { AddIcon, Button } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionButton() {\n const collectionEditorController = useCollectionEditorController();\n return <div className={\"bg-gray-50 dark:bg-gray-900 min-w-fit rounded\"}>\n <Button className={\"min-w-fit\"}\n variant={\"outlined\"}\n onClick={() => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_button\"\n })}>\n <AddIcon/>\n New collection\n </Button>\n </div>\n}\n","import React from \"react\";\nimport { FireCMSPlugin, useAuthController, useNavigationController, User } from \"@firecms/core\";\nimport { ConfigControllerProvider } from \"./ConfigControllerProvider\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { EditorCollectionAction } from \"./ui/EditorCollectionAction\";\nimport { HomePageEditorCollectionAction } from \"./ui/HomePageEditorCollectionAction\";\nimport { NewCollectionCard } from \"./ui/NewCollectionCard\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { RootCollectionSuggestions } from \"./ui/RootCollectionSuggestions\";\nimport { CollectionViewHeaderAction } from \"./ui/CollectionViewHeaderAction\";\nimport { PropertyAddColumnComponent } from \"./ui/PropertyAddColumnComponent\";\nimport { NewCollectionButton } from \"./ui/NewCollectionButton\";\nimport { AddIcon, Button, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"./useCollectionEditorController\";\n\nexport interface CollectionConfigControllerProps<EC extends PersistedCollection = PersistedCollection, UserType extends User = User> {\n\n /**\n * Firebase app where the configuration is saved.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Define what actions can be performed on the configuration.\n */\n configPermissions?: CollectionEditorPermissionsBuilder<UserType, EC>;\n\n /**\n * The words you define here will not be allowed to be used as group\n * names when creating collections.\n * e.g. [\"admin\"]\n */\n reservedGroups: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n pathSuggestions?: (path: string) => Promise<string[]>;\n\n collectionInference?: CollectionInference;\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n getUser: (uid: string) => UserType | null;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n introMode?: \"new_project\" | \"existing_project\";\n\n}\n\n/**\n * Use this hook to initialise the Collection Editor plugin.\n * This is likely the only hook you will need to use.\n * @param firebaseApp Firebase app where your project data lives.\n * @param configPermissions\n * @param reservedGroups\n * @param extraView\n * @param pathSuggestions\n * @param getUser\n * @param collectionInference\n */\nexport function useCollectionEditorPlugin<EC extends PersistedCollection = PersistedCollection, UserType extends User = User>\n({\n collectionConfigController,\n introMode,\n configPermissions,\n reservedGroups,\n extraView,\n pathSuggestions,\n getUser,\n collectionInference,\n getData,\n onAnalyticsEvent\n }: CollectionConfigControllerProps<EC, UserType>): FireCMSPlugin<any, any, PersistedCollection> {\n\n return {\n key: \"collection_editor\",\n loading: collectionConfigController.loading,\n provider: {\n Component: ConfigControllerProvider,\n props: {\n collectionConfigController,\n configPermissions,\n collectionInference,\n reservedGroups,\n extraView,\n pathSuggestions,\n getUser,\n getData,\n onAnalyticsEvent\n }\n },\n homePage: {\n additionalActions: <NewCollectionButton/>,\n additionalChildrenStart: introMode ? <IntroWidget introMode={introMode}/> : undefined,\n additionalChildrenEnd: <RootCollectionSuggestions introMode={introMode}/>,\n CollectionActions: HomePageEditorCollectionAction,\n AdditionalCards: introMode ? undefined : NewCollectionCard,\n },\n collectionView: {\n CollectionActions: EditorCollectionAction,\n HeaderAction: CollectionViewHeaderAction,\n AddColumnComponent: PropertyAddColumnComponent\n }\n };\n}\n\nexport function IntroWidget({ introMode }: {\n introMode?: \"new_project\" | \"existing_project\";\n}) {\n\n const navigation = useNavigationController();\n if (!navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n return (\n <div className={\"mt-8 flex flex-col mt-8 p-2\"}>\n <Typography variant={\"h4\"} className=\"mb-4\">Welcome</Typography>\n <Typography paragraph={true}>Your admin panel is ready ✌️</Typography>\n <Typography paragraph={true}>\n Start building collections in FireCMS easily. Map them to your existing\n database data, import from files, or use our templates. Simplify your data management process\n now.\n </Typography>\n {canCreateCollections && <Button\n className={\"mt-4\"}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n <AddIcon/>Create your first collection\n </Button>}\n </div>\n );\n}\n","import { ErrorView, unslugify, useNavigationController } from \"@firecms/core\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { Button } from \"@firecms/ui\";\n\nexport function MissingReferenceWidget({ path: pathProp }: {\n path: string\n}) {\n const navigation = useNavigationController();\n const path = getLastSegment(pathProp);\n const parentCollectionIds = navigation.getParentCollectionIds(pathProp);\n const collectionEditor = useCollectionEditorController();\n return <div className={\"p-1 flex flex-col items-center\"}>\n <ErrorView error={\"No collection for path: \" + path}/>\n <Button className={\"mx-2\"} variant={\"outlined\"}\n size={\"small\"}\n onClick={() => {\n collectionEditor.createCollection({\n initialValues: { path, name: unslugify(path) },\n parentCollectionIds,\n redirect: false,\n sourceClick: \"missing_reference\"\n });\n }}>\n Create\n </Button>\n </div>;\n}\n\nfunction getParentPathSegments(path: string): string[] {\n const segments = path.split(\"/\");\n return segments.filter((segment, index) => index % 2 === 0 && index !== segments.length - 1);\n}\n\nfunction getLastSegment(path: string): string {\n const segments = path.split(\"/\");\n return segments[segments.length - 1];\n}\n"],"names":["YupSchema","Yup","CollectionDetailsForm","isNewCollection","reservedGroups","existingPaths","existingIds","groups","parentCollection","groupRef","React","values","setFieldValue","handleChange","touched","errors","setFieldTouched","isSubmitting","submitCount","useFormex","iconDialogOpen","setIconDialogOpen","useState","advancedPanelExpanded","setAdvancedPanelExpanded","updateName","name","getIn","toSnakeCase","singular","useEffect","collectionIcon","jsx","IconForView","groupOptions","group","inputFocused","autoCompleteOpen","setAutoCompleteOpen","useAutoComplete","isSubcollection","customIdValue","showErrors","Container","jsxs","Typography","Tooltip","IconButton","Chip","TextField","e","FieldCaption","cn","Field","DebouncedTextField","event","Autocomplete","index","AutocompleteItem","ExpandablePanel","SettingsIcon","Select","value","SelectItem","v","BooleanSwitchWithLabel","Dialog","SearchIconsView","icon","idToPropertiesPath","id","namespaceToPropertiesPath","namespace","namespaceToPropertiesOrderPath","getFullId","propertyKey","propertyNamespace","getFullIdPath","keyWithNamespace","EnumForm","enumValues","onValuesChanged","onError","updateIds","disabled","allowDataInference","getData","formex","useCreateFormex","enumValue","hasError","Formex","EnumFormFields","enumValuesPath","shouldUpdateId","lastInternalIdAdded","setLastInternalIdAdded","editDialogIndex","setEditDialogIndex","inferring","setInferring","inferredValues","buildEntry","internalId","justAdded","entryError","EnumEntry","ListIcon","Button","data","flatData","fieldData","currentEnumValues","newEnumValues","extractEnumFromValues","CircularProgress","AutoAwesomeIcon","Paper","ArrayContainer","EnumEntryDialog","updateId","autoFocus","onDialogOpen","inferredEntry","shouldUpdateIdRef","idValue","labelValue","currentLabelRef","Fragment","Badge","prevProps","nextProps","equal","open","onClose","idError","DialogContent","DialogActions","SwitchControl","field","form","label","tooltip","size","allowIndeterminate","formControlLabel","checked","GeneralPropertyValidation","validationRequired","validationRequiredMessage","StringPropertyValidation","length","lowercase","matches","max","min","trim","uppercase","validationLength","validationMin","validationMax","validationTrim","validationMatches","validationLowercase","validationUppercase","matchesError","matchesValue","matchesStringValue","serializeRegExp","ArrayPropertyValidation","ValidationPanel","children","RuleIcon","EnumPropertyField","multiselect","setFieldError","snackbarContext","useSnackbarController","defaultValue","valuesEnumValues","useMemo","resolveEnumValues","res","d","enumIds","fileTypes","StoragePropertyField","multiple","existing","baseStoragePath","acceptedFiles","fileName","storagePath","storeUrl","fileNameValue","storagePathValue","storedValue","fileTypesValue","allFileTypesSelected","handleTypesChange","hasFilenameCallback","hasStoragePathCallback","FileUploadIcon","MultiSelect","selected","MultiSelectItem","Checkbox","editableProperty","property","isPropertyBuilder","eProperty","removeNonEditableProperties","properties","_","key","propertyOrBuilder","a","b","PropertyFieldPreview","onClick","includeName","includeEditButton","propertyConfigs","useCustomizationController","propertyConfig","getFieldConfig","borderColorClass","ErrorBoundary","PropertyConfigBadge","cardMixin","cardClickableMixin","cardSelectedMixin","NonEditablePropertyPreview","FunctionsIcon","RemoveCircleIcon","PropertyTree","selectedPropertyKey","onPropertyClick","propertiesOrderProp","additionalFields","onPropertyMove","onPropertyRemove","className","inferredPropertyKeys","collectionEditable","propertiesOrder","onDragEnd","useCallback","result","startIndex","endIndex","newPropertiesOrder","removed","DragDropContext","Droppable","droppableProvided","droppableSnapshot","additionalField","Draggable","provided","snapshot","PropertyTreeEntry","isSelected","wasSelected","isPropertyInferred","fullId","subtree","editable","defaultBorderMixin","RemoveIcon","DragHandleIcon","MapPropertyField","propertyDialogOpen","setPropertyDialogOpen","setSelectedPropertyKey","selectedPropertyNamespace","setSelectedPropertyNamespace","onPropertyCreated","currentPropertiesOrder","deleteProperty","propertiesPath","propertiesOrderPath","p","selectedPropertyFullId","selectedProperty","empty","AddIcon","PropertyFormDialog","RepeatPropertyField","ofProperty","ofPropertyError","onPropertyChanged","widget","CommonPropertyFields","disabledId","autoUpdateId","isNewProperty","ref","validate","nameError","description","descriptionError","newNameValue","newIdValue","unslugify","StringPropertyField","widgetId","BooleanPropertyField","BlockPropertyField","addChildButton","NumberPropertyValidation","validationLessThan","validationMoreThan","NumberPropertyField","ReferencePropertyField","useNavigationController","pathPath","pathValue","pathError","CollectionsSelect","error","props","navigation","collections","ungroupedCollections","col","selectedCollection","collection","SelectGroup","DateTimePropertyField","modePath","modeValue","modeError","autoValuePath","autoValueValue","autoValueError","AdvancedPropertyValidation","KeyValuePropertyField","updatePropertyFromWidget","propertyData","selectedWidgetId","updatedProperty","mergeDeep","PropertySelectItem","optionDisabled","UrlPropertyField","urlValue","supportedFieldsIds","supportedFields","DEFAULT_FIELD_CONFIGS","config","PropertyForm","includeIdAndName","autoOpenTypeSelect","existingProperty","inArray","existingPropertyKeys","onPropertyChangedImmediate","onDelete","initialErrors","forceShowErrors","getController","initialValue","lastSubmittedProperty","useRef","doOnPropertyChanged","params","formexController","newPropertyWithId","controller","validateName","validateId","isValidRegExp","PropertyEditFormFields","onCancel","onOkClicked","formProps","formexRef","helpers","setValues","includeIdAndTitle","selectOpen","setSelectOpen","deleteDialogOpen","setDeleteDialogOpen","selectedFieldConfigId","setSelectedFieldConfigId","getFieldId","allSupportedFields","displayedWidgets","deferredValues","useDeferredValue","nameFieldRef","selectedWidgetError","onWidgetSelectChanged","newSelectedWidgetId","childComponent","InfoLabel","baseProperty","baseFieldConfig","computedFieldConfig","DeleteIcon","DeleteConfirmationDialog","idRegEx","camelCase","str","cur","acc","GetCodeDialog","onOpenChange","snackbarController","code","JSON5","collectionToCode","Highlight","themes","style","tokens","getLineProps","getTokenProps","line","i","token","ContentCopyIcon","propertyCleanup","CollectionPropertiesEditorForm","propertyErrorsRef","onPropertyError","setDirty","extraIcon","getUser","doCollectionInference","dirty","largeLayout","useLargeLayout","asDialog","selectedPropertyIndex","setSelectedPropertyIndex","codeDialogOpen","setCodeDialogOpen","inferringProperties","setInferringProperties","newPropertyDialogOpen","setNewPropertyDialogOpen","setInferredPropertyKeys","currentPropertiesOrderRef","inferPropertiesFromData","newCollection","makePropertiesEditable","newPropertyKeys","updatedProperties","updatedPropertiesOrder","updatePropertiesOrder","getCurrentPropertiesOrder","previousId","propertyPath","previousFullId","previousPropertyPath","onPropertyErrorInternal","closePropertyDialog","emptyCollection","usedPropertiesOrder","owner","body","CodeIcon","UnsavedChangesDialog","handleOk","handleCancel","title","EntityCustomViewsSelectDialog","entityViews","view","SubcollectionsEditTab","configController","collectionInference","parentCollectionIds","contextEntityViews","subcollectionToDelete","setSubcollectionToDelete","addEntityViewDialogOpen","setAddEntityViewDialogOpen","viewToDelete","setViewToDelete","currentDialog","setCurrentDialog","subcollections","resolvedEntityViews","resolveEntityView","hardCodedEntityViews","totalEntityViews","Table","TableBody","subcollection","TableRow","TableCell","Alert","CollectionEditorDialog","selectedViewKey","productsCollectionTemplate","blogCollectionTemplate","usersCollectionTemplate","pagesCollectionTemplate","CollectionEditorWelcomeView","path","pathSuggestions","onContinue","existingCollectionPaths","loadingPathSuggestions","setLoadingPathSuggestions","filteredPathSuggestions","setFilteredPathSuggestions","suggestions","filteredSuggestions","s","c","suggestion","TemplateButton","Icon","ImportFileUpload","subtitle","Card","CollectionEditorImportMapping","importConfig","setSelectedProperty","newHeadersMapping","onPropertyTypeChanged","importKey","inferredNewProperty","buildPropertyFromData","getInferenceType","DataNewPropertiesMapping","ImportNewPropertyFieldPreview","PropertySelect","fieldId","newProperty","CollectionEditorImportDataPreview","propertiesMapping","getPropertiesMapping","mappedData","convertDataToEntity","selectionController","useSelectionController","EntityCollectionTable","cleanPropertiesFromImport","parentSlug","slug","slugify","fullSlug","slugifiedResult","firstKey","idColumn","formDirty","setFormDirty","unsavedChangesDialogOpen","setUnsavedChangesDialogOpen","CollectionEditor","authController","useAuthController","topLevelNavigation","initialValuesProp","includeTemplates","collectionsInThisLevel","setCollection","initialLoadingCompleted","setInitialLoadingCompleted","initialCollection","randomString","initialValues","applyPropertyConfigs","coolIconKeys","CircularProgressCenter","CollectionEditorInternal","editedCollectionId","fullPath","handleClose","extraView","useImportConfig","initialView","currentView","setCurrentView","setError","saveCollection","updatedCollection","setNextMode","inferCollectionFromData","inferredCollection","formController","newCollectionState","schema","err","validatePath","updatedFullPath","parentPaths","resolvedPath","getDataWithPath","onImportDataSet","buildEntityPropertiesFromData","validValues","onImportMappingComplete","Tabs","Tab","importData","ImportSaveInProgress","importedCollection","current","removeUndefined","ErrorView","ArrowBackIcon","LoadingButton","DoneIcon","rest","propertiesResult","applyPropertiesConfig","internalProperty","removeInitialAndTrailingSlashes","ConfigControllerContext","CollectionEditorContext","ConfigControllerProvider","collectionConfigController","configPermissions","onAnalyticsEvent","navigate","useNavigate","rootPathSuggestions","setRootPathSuggestions","paths","currentPropertyDialog","setCurrentPropertyDialog","defaultConfigPermissions","editCollection","editProperty","propertyKeyWithoutNamespace","createCollection","redirect","sourceClick","getPathSuggestions","url","useCollectionEditorController","useContext","useCollectionsConfigController","EditorCollectionAction","tableController","navigationController","collectionEditorController","canEditCollection","saveDefaultFilterButton","getObjectOrNull","UndoIcon","SaveIcon","o","HomePageEditorCollectionAction","permissions","onEditCollectionClicked","deleteRequested","setDeleteRequested","deleteCollection","Menu","MoreVertIcon","MenuItem","NewCollectionCard","context","canCreateCollections","RootCollectionSuggestions","introMode","showSuggestions","Collapse","CollectionViewHeaderAction","onHover","PropertyAddColumnComponent","getDefaultPropertiesOrder","NewCollectionButton","useCollectionEditorPlugin","IntroWidget","MissingReferenceWidget","pathProp","getLastSegment","collectionEditor","segments"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/ui/collection_editor/CollectionYupValidation.tsx","../src/useCollectionEditorController.tsx","../src/ui/collection_editor/LayoutModeSwitch.tsx","../src/ui/collection_editor/CollectionDetailsForm.tsx","../src/ui/collection_editor/util.ts","../src/ui/collection_editor/EnumForm.tsx","../src/ui/collection_editor/SwitchControl.tsx","../src/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/StringPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ValidationPanel.tsx","../src/ui/collection_editor/properties/EnumPropertyField.tsx","../src/ui/collection_editor/properties/StoragePropertyField.tsx","../src/utils/entities.ts","../src/ui/collection_editor/PropertyFieldPreview.tsx","../src/ui/collection_editor/PropertyTree.tsx","../src/ui/collection_editor/properties/MapPropertyField.tsx","../src/ui/collection_editor/properties/RepeatPropertyField.tsx","../src/ui/collection_editor/properties/CommonPropertyFields.tsx","../src/ui/collection_editor/properties/StringPropertyField.tsx","../src/ui/collection_editor/properties/BooleanPropertyField.tsx","../src/ui/collection_editor/properties/BlockPropertyField.tsx","../src/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx","../src/ui/collection_editor/properties/NumberPropertyField.tsx","../src/ui/collection_editor/properties/ReferencePropertyField.tsx","../src/ui/collection_editor/properties/DateTimePropertyField.tsx","../src/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx","../src/ui/collection_editor/properties/KeyValuePropertyField.tsx","../src/ui/collection_editor/utils/update_property_for_widget.ts","../src/ui/collection_editor/properties/UrlPropertyField.tsx","../src/ui/collection_editor/utils/supported_fields.tsx","../src/ui/collection_editor/properties/MarkdownPropertyField.tsx","../src/ui/collection_editor/PropertyEditView.tsx","../src/ui/collection_editor/utils/strings.ts","../src/ui/collection_editor/GetCodeDialog.tsx","../src/ui/collection_editor/CollectionPropertiesEditorForm.tsx","../src/ui/collection_editor/UnsavedChangesDialog.tsx","../src/ui/collection_editor/EntityCustomViewsSelectDialog.tsx","../src/ui/collection_editor/SubcollectionsEditTab.tsx","../src/ui/collection_editor/templates/products_template.ts","../src/ui/collection_editor/templates/blog_template.ts","../src/ui/collection_editor/templates/users_template.ts","../src/ui/collection_editor/templates/pages_template.ts","../src/ui/collection_editor/CollectionEditorWelcomeView.tsx","../src/ui/collection_editor/import/CollectionEditorImportMapping.tsx","../src/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx","../src/ui/collection_editor/import/clean_import_data.ts","../src/ui/collection_editor/CollectionEditorDialog.tsx","../src/ConfigControllerProvider.tsx","../src/ui/EditorCollectionAction.tsx","../src/useCollectionsConfigController.tsx","../src/ui/HomePageEditorCollectionAction.tsx","../src/ui/CollectionViewHeaderAction.tsx","../src/ui/PropertyAddColumnComponent.tsx","../src/ui/NewCollectionButton.tsx","../src/ui/EditorCollectionActionStart.tsx","../src/ui/NewCollectionCard.tsx","../src/useCollectionEditorPlugin.tsx","../src/utils/collections.ts","../src/ui/MissingReferenceWidget.tsx"],"sourcesContent":["import * as Yup from \"yup\";\n\nexport const YupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\"),\n path: Yup.string().required(\"Required\")\n});\n","import { useContext } from \"react\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorContext } from \"./ConfigControllerProvider\";\n\n/**\n * Hook to access the collection editor controller.\n * The methods in this controller can be used to open the collection editor dialog.\n */\nexport const useCollectionEditorController = (): CollectionEditorController => useContext(CollectionEditorContext);\n","import { Card, cls, SquareIcon, Tooltip, Typography, VerticalSplitIcon } from \"@firecms/ui\";\n\nexport function LayoutModeSwitch({\n value,\n onChange,\n className\n }: {\n value: \"side_panel\" | \"full_screen\";\n onChange: (value: \"side_panel\" | \"full_screen\") => 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={cls(\"flex flex-row gap-4\")}>\n\n <Tooltip title={\"Documents are open in a side panel\"}>\n <Card\n onClick={() => onChange(\"side_panel\")}\n className={cls(\n \"my-2 rounded-md mx-0 p-4 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-surface-700 dark:text-surface-accent-300\",\n \"hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n value === \"side_panel\" ? \"border-primary dark:border-primary\" : \"border-surface-400 dark:border-surface-600\",\n )}\n >\n <VerticalSplitIcon/>\n <Typography variant={\"label\"}>\n Side panel\n </Typography>\n </Card>\n </Tooltip>\n\n <Tooltip title={\"Documents are open full-screen\"}>\n <Card\n onClick={() => onChange(\"full_screen\")}\n className={cls(\n \"my-2 rounded-md mx-0 p-4 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-surface-700 dark:text-surface-accent-300\",\n \"hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n value === \"full_screen\" ? \"border-primary dark:border-primary\" : \"border-surface-400 dark:border-surface-600\",\n )}\n >\n <SquareIcon/>\n <Typography variant={\"label\"}>\n Full screen\n </Typography>\n </Card>\n </Tooltip>\n\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Should documents be opened full screen or in an inline side dialog</Typography>\n </div>\n}\n","import React, { useEffect, useState } from \"react\";\nimport { EntityCollection, FieldCaption, IconForView, SearchIconsView, singular, toSnakeCase, } from \"@firecms/core\";\nimport {\n Autocomplete,\n AutocompleteItem,\n BooleanSwitchWithLabel,\n Chip,\n CloseIcon,\n cls,\n Container,\n DebouncedTextField,\n Dialog,\n ExpandablePanel,\n IconButton,\n Select,\n SelectItem,\n SettingsIcon,\n TextField,\n Tooltip,\n Typography,\n useAutoComplete\n} from \"@firecms/ui\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { useCollectionEditorController } from \"../../useCollectionEditorController\";\nimport { LayoutModeSwitch } from \"./LayoutModeSwitch\";\n\nexport function CollectionDetailsForm({\n isNewCollection,\n reservedGroups,\n existingPaths,\n existingIds,\n groups,\n parentCollection,\n children\n }: {\n isNewCollection: boolean,\n reservedGroups?: string[];\n existingPaths?: string[];\n existingIds?: string[];\n groups: string[] | null;\n parentCollection?: EntityCollection;\n parentCollectionIds?: string[];\n children?: React.ReactNode;\n}) {\n\n const groupRef = React.useRef<HTMLInputElement>(null);\n const {\n values,\n setFieldValue,\n handleChange,\n touched,\n errors,\n setFieldTouched,\n isSubmitting,\n submitCount\n } = useFormex<EntityCollection>();\n\n const collectionEditor = useCollectionEditorController();\n\n const [iconDialogOpen, setIconDialogOpen] = useState(false);\n const [advancedPanelExpanded, setAdvancedPanelExpanded] = useState(false);\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, \"path\");\n if (!pathTouched && isNewCollection && name) {\n setFieldValue(\"path\", toSnakeCase(name));\n }\n\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && isNewCollection && name) {\n setFieldValue(\"id\", toSnakeCase(name));\n }\n\n const singularNameTouched = getIn(touched, \"singularName\");\n if (!singularNameTouched && isNewCollection && name) {\n setFieldValue(\"singularName\", singular(name));\n }\n\n };\n\n useEffect(() => {\n if (errors.id) {\n setAdvancedPanelExpanded(true);\n }\n }, [errors.id]);\n\n const DatabaseField = collectionEditor.components?.DatabaseField ?? DefaultDatabaseField;\n\n const collectionIcon = <IconForView collectionOrView={values}/>;\n\n const groupOptions = groups?.filter((group) => !reservedGroups?.includes(group));\n\n const {\n inputFocused,\n autoCompleteOpen,\n setAutoCompleteOpen\n } = useAutoComplete({\n ref: groupRef\n });\n\n const isSubcollection = !!parentCollection;\n\n let customIdValue: \"true\" | \"false\" | \"optional\" | \"code_defined\" | undefined;\n if (typeof values.customId === \"object\") {\n customIdValue = \"code_defined\";\n } else if (values.customId === true) {\n customIdValue = \"true\";\n } else if (values.customId === false) {\n customIdValue = \"false\";\n } else if (values.customId === \"optional\") {\n customIdValue = \"optional\";\n }\n\n const showErrors = submitCount > 0;\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\n className=\"flex flex-row gap-2 py-2 pt-3 items-center\">\n <Typography variant={!isNewCollection ? \"h5\" : \"h4\"} className={\"flex-grow\"}>\n {isNewCollection ? \"New collection\" : `${values?.name} collection`}\n </Typography>\n <DatabaseField databaseId={values.databaseId}\n onDatabaseIdUpdate={updateDatabaseId}/>\n\n <Tooltip title={\"Change icon\"}\n asChild={true}>\n <IconButton\n shape={\"square\"}\n onClick={() => setIconDialogOpen(true)}>\n {collectionIcon}\n </IconButton>\n </Tooltip>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n </div>\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n <div className={\"col-span-12\"}>\n <TextField\n value={values.name ?? \"\"}\n onChange={(e: any) => 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 <div className={cls(\"col-span-12 \", isSubcollection ? \"\" : \"sm:col-span-8\")}>\n <Field name={\"path\"}\n as={DebouncedTextField}\n label={\"Path\"}\n disabled={!isNewCollection}\n required\n error={showErrors && Boolean(errors.path)}/>\n\n <FieldCaption error={touched.path && Boolean(errors.path)}>\n {touched.path && Boolean(errors.path)\n ? errors.path\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"Path that this collection is stored in, in the database\"}\n </FieldCaption>\n\n </div>\n\n {!isSubcollection && <div className={\"col-span-12 sm:col-span-4 relative\"}>\n\n <TextField error={showErrors && Boolean(errors.group)}\n disabled={isSubmitting}\n value={values.group ?? \"\"}\n autoComplete=\"off\"\n onChange={(event) => setFieldValue(\"group\", event.target.value)}\n name={\"group\"}\n inputRef={groupRef}\n label=\"Group\"/>\n <Autocomplete\n open={autoCompleteOpen && (groupOptions ?? []).length > 0}\n setOpen={setAutoCompleteOpen}>\n {groupOptions?.map((group, index) => {\n return <AutocompleteItem\n key={index + \"_\" + group}\n onClick={() => {\n setAutoCompleteOpen(false);\n setFieldValue(\"group\", group ?? null);\n }}\n >\n <div className={\"flex-grow\"}>\n {group}\n </div>\n </AutocompleteItem>;\n })}\n </Autocomplete>\n <FieldCaption>\n {showErrors && Boolean(errors.group) ? errors.group : \"Group in the home page\"}\n </FieldCaption>\n\n\n </div>}\n\n <LayoutModeSwitch\n className={\"col-span-12\"}\n value={values.openEntityMode ?? \"side_panel\"}\n onChange={(value) => setFieldValue(\"openEntityMode\", value)}/>\n\n <div className={\"col-span-12 mt-8\"}>\n <ExpandablePanel\n expanded={advancedPanelExpanded}\n onExpandedChange={setAdvancedPanelExpanded}\n title={\n <div className=\"flex flex-row text-surface-500\">\n <SettingsIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n Advanced\n </Typography>\n </div>}\n initiallyExpanded={false}>\n <div className={\"grid grid-cols-12 gap-4 p-4\"}>\n\n <div className={\"col-span-12\"}>\n <Field name={\"id\"}\n as={DebouncedTextField}\n disabled={!isNewCollection}\n label={\"Collection id\"}\n error={showErrors && Boolean(errors.id)}/>\n <FieldCaption error={touched.id && Boolean(errors.id)}>\n {touched.id && Boolean(errors.id) ? errors.id : \"This id identifies this collection. Typically the same as the path.\"}\n </FieldCaption>\n </div>\n\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 <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.sideDialogWidth)}\n name={\"sideDialogWidth\"}\n type={\"number\"}\n aria-describedby={\"sideDialogWidth-helper\"}\n onChange={(e) => {\n setFieldTouched(\"sideDialogWidth\", true);\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 <CloseIcon size={\"small\"}/>\n </IconButton>}\n value={values.sideDialogWidth ?? \"\"}\n label={\"Side dialog width\"}/>\n <FieldCaption error={showErrors && Boolean(errors.singularName)}>\n {showErrors && Boolean(errors.singularName) ? errors.singularName : \"Optionally define the width (in pixels) of entities side dialog. Default is 768px\"}\n </FieldCaption>\n </div>\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 rows={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 <div className={\"col-span-12\"}>\n <Select\n name=\"defaultSize\"\n size={\"large\"}\n fullWidth={true}\n label=\"Default row size\"\n position={\"item-aligned\"}\n onChange={handleChange}\n value={values.defaultSize ?? \"\"}\n renderValue={(value: any) => 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 <div className={\"col-span-12\"}>\n <Select\n name=\"customId\"\n label=\"Document IDs generation\"\n position={\"item-aligned\"}\n size={\"large\"}\n fullWidth={true}\n disabled={customIdValue === \"code_defined\"}\n onValueChange={(v) => {\n if (v === \"code_defined\")\n throw new Error(\"This should not happen\");\n else if (v === \"true\")\n setFieldValue(\"customId\", true);\n else if (v === \"false\")\n setFieldValue(\"customId\", false);\n else if (v === \"optional\")\n setFieldValue(\"customId\", \"optional\");\n }}\n value={customIdValue ?? \"\"}\n renderValue={(value: any) => {\n if (value === \"code_defined\")\n return \"Code defined\";\n else if (value === \"true\")\n return \"Users must define an ID\";\n else if (value === \"optional\")\n return \"Users can define an ID, but it is not required\";\n else\n return \"Document ID is generated automatically\";\n }}\n >\n <SelectItem value={\"false\"}>\n Document ID is generated automatically\n </SelectItem>\n <SelectItem value={\"true\"}>\n Users must define an ID\n </SelectItem>\n <SelectItem value={\"optional\"}>\n Users can define an ID, but it is not required\n </SelectItem>\n </Select>\n </div>\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label=\"Collection group\"\n onValueChange={(v) => setFieldValue(\"collectionGroup\", v)}\n value={values.collectionGroup ?? false}\n />\n <FieldCaption>\n A collection group consists of all collections with the same path. This allows\n you\n to query over multiple collections at once.\n </FieldCaption>\n </div>\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label=\"Enable text search for this collection\"\n onValueChange={(v) => setFieldValue(\"textSearchEnabled\", v)}\n value={values.textSearchEnabled ?? false}\n />\n <FieldCaption>\n Allow text search for this collection. If you have not specified a text search\n delegate, this will use the built-in local text search. This is not recommended\n for large collections, as it may incur in performance and cost issues.\n </FieldCaption>\n </div>\n\n\n </div>\n </ExpandablePanel>\n\n {children}\n\n </div>\n\n </div>\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={values.icon}\n onIconSelected={(icon: string) => {\n setIconDialogOpen(false);\n setFieldValue(\"icon\", icon);\n }}/>\n </div>\n\n </Dialog>\n\n </Container>\n </div>\n );\n}\n\nfunction DefaultDatabaseField({\n databaseId,\n onDatabaseIdUpdate\n }: { databaseId?: string, 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 value={databaseId ?? \"\"}\n onChange={(e: any) => onDatabaseIdUpdate(e.target.value)}\n placeholder={\"(default)\"}></TextField>\n </Tooltip>\n}\n","export function idToPropertiesPath(id: string): string {\n return \"properties.\" + id.replaceAll(\".\", \".properties.\");\n}\n\nexport function namespaceToPropertiesPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".properties\"\n : \"properties\";\n}\n\nexport function namespaceToPropertiesOrderPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".propertiesOrder\"\n : \"propertiesOrder\";\n}\n\nexport function getFullId(propertyKey: string, propertyNamespace?: string): string {\n return propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n}\n\nexport function getFullIdPath(propertyKey: string, propertyNamespace?: string): string {\n const keyWithNamespace = propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n return idToPropertiesPath(keyWithNamespace);\n}\n","import React, { useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { ArrayContainer, ArrayEntryParams, EnumValueConfig, EnumValues, FieldCaption, } from \"@firecms/core\";\nimport {\n AutorenewIcon,\n Badge,\n Button,\n CircularProgress,\n DebouncedTextField,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n ListIcon,\n Paper,\n SettingsIcon,\n Typography\n} from \"@firecms/ui\";\nimport { extractEnumFromValues } from \"@firecms/schema_inference\";\nimport { Field, Formex, getIn, useCreateFormex, useFormex } from \"@firecms/formex\";\n\ntype EnumFormProps = {\n enumValues: EnumValueConfig[];\n onValuesChanged?: (enumValues: EnumValueConfig[]) => void;\n onError?: (error: boolean) => void;\n updateIds: boolean;\n disabled: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<string[]>;\n};\n\nexport function EnumForm({\n enumValues,\n onValuesChanged,\n onError,\n updateIds,\n disabled,\n allowDataInference,\n getData\n }: EnumFormProps) {\n\n const formex = useCreateFormex<{\n enumValues: EnumValueConfig[]\n }>({\n initialValues: { enumValues },\n validateOnChange: true,\n validation: (values) => {\n const errors: any = {};\n if (values.enumValues) {\n values.enumValues.forEach((enumValue, index) => {\n if (!enumValue?.label) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].label = \"You must specify a label for this enum value entry\";\n }\n if (!enumValue?.id) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].id = \"You must specify an ID for this enum value entry\";\n }\n });\n }\n const hasError = Boolean(errors?.enumValues && Object.keys(errors?.enumValues).length > 0);\n onError?.(hasError);\n return errors;\n }\n });\n\n const { values, errors } = formex;\n\n useEffect(() => {\n if (onValuesChanged) {\n onValuesChanged(values.enumValues);\n }\n }, [values.enumValues]);\n\n return <Formex value={formex}>\n <EnumFormFields enumValuesPath={\"enumValues\"}\n values={values}\n errors={errors}\n shouldUpdateId={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}/>\n </Formex>\n\n}\n\ntype EnumFormFieldsProps = {\n values: {\n enumValues: EnumValueConfig[]\n };\n errors: any;\n enumValuesPath: string;\n shouldUpdateId: boolean;\n disabled: boolean;\n getData?: () => Promise<string[]>;\n allowDataInference?: boolean;\n};\n\n// const EnumFormFields = React.memo(\nfunction EnumFormFields({\n values,\n errors,\n disabled,\n enumValuesPath,\n shouldUpdateId,\n allowDataInference,\n getData,\n }: EnumFormFieldsProps) {\n\n const {\n setFieldValue\n } = useFormex();\n\n const [lastInternalIdAdded, setLastInternalIdAdded] = React.useState<number | undefined>();\n const [editDialogIndex, setEditDialogIndex] = React.useState<number | undefined>();\n const [inferring, setInferring] = React.useState(false);\n\n const inferredValuesRef = React.useRef(new Set());\n const inferredValues = inferredValuesRef.current;\n\n const buildEntry = ({\n index,\n internalId\n }:ArrayEntryParams) => {\n const justAdded = lastInternalIdAdded === internalId;\n const entryError = errors?.enumValues && errors?.enumValues[index];\n return <EnumEntry index={index}\n disabled={disabled}\n enumValuesPath={enumValuesPath}\n autoFocus={justAdded}\n entryError={entryError}\n shouldUpdateId={shouldUpdateId || justAdded}\n onDialogOpen={() => setEditDialogIndex(index)}\n inferredEntry={inferredValues.has(values.enumValues[index]?.id as string)}\n key={`${internalId}`}/>;\n };\n\n const inferValues = async () => {\n if (!getData)\n return;\n setInferring(true);\n getData?.().then((data) => {\n if (!data)\n return;\n\n const flatData = data.flat();\n\n const fieldData = Array.from(new Set(flatData));\n\n const currentEnumValues = values.enumValues;\n const foundEnumValues = extractEnumFromValues(fieldData);\n\n // add only new enum values\n const newEnumValues = foundEnumValues.filter((enumValue) => {\n return !currentEnumValues?.some((v: any) => v.id === enumValue.id);\n });\n\n newEnumValues.forEach((enumValue) => {\n inferredValues.add(enumValue.id);\n });\n setFieldValue(enumValuesPath, [...newEnumValues, ...currentEnumValues], true);\n }).catch(e => {\n console.error(e);\n })\n .finally(() => setInferring(false));\n }\n\n return (\n <div className={\"col-span-12\"}>\n <div className=\"ml-3.5 flex flex-row items-center\">\n <ListIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2 grow\">\n Values\n </Typography>\n {allowDataInference &&\n <Button loading={inferring}\n disabled={disabled || inferring}\n variant={\"text\"}\n size={\"small\"}\n onClick={inferValues}>\n {inferring ? <CircularProgress size={\"smallest\"}/> : <AutorenewIcon/>}\n Infer values from data\n </Button>}\n </div>\n\n <Paper className=\"p-4 m-1\">\n\n <ArrayContainer droppableId={enumValuesPath}\n addLabel={\"Add enum value\"}\n value={values.enumValues}\n disabled={disabled}\n size={\"small\"}\n buildEntry={buildEntry}\n onInternalIdAdded={setLastInternalIdAdded}\n includeAddButton={true}\n onValueChange={(value) => setFieldValue(enumValuesPath, value)}\n newDefaultEntry={{ id: \"\", label: \"\" }}/>\n\n <EnumEntryDialog index={editDialogIndex}\n open={editDialogIndex !== undefined}\n enumValuesPath={enumValuesPath}\n onClose={() => setEditDialogIndex(undefined)}/>\n </Paper>\n </div>\n );\n}\n\ntype EnumEntryProps = {\n index: number,\n enumValuesPath: string,\n shouldUpdateId: boolean,\n autoFocus: boolean,\n onDialogOpen: () => void;\n disabled: boolean;\n inferredEntry?: boolean;\n entryError?: { label?: string, id?: string }\n};\n\nconst EnumEntry = React.memo(\n function EnumEntryInternal({\n index,\n shouldUpdateId: updateId,\n enumValuesPath,\n autoFocus,\n onDialogOpen,\n disabled,\n inferredEntry,\n entryError\n }: EnumEntryProps) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<EnumValues>();\n\n const shouldUpdateIdRef = React.useRef(!getIn(values, `${enumValuesPath}[${index}].id`));\n const shouldUpdateId = updateId || shouldUpdateIdRef.current;\n\n const idValue = getIn(values, `${enumValuesPath}[${index}].id`);\n const labelValue = getIn(values, `${enumValuesPath}[${index}].label`);\n\n const currentLabelRef = React.useRef(labelValue);\n\n React.useEffect(() => {\n if ((currentLabelRef.current === idValue || !idValue) && shouldUpdateId) {\n setFieldValue(`${enumValuesPath}[${index}].id`, labelValue);\n }\n currentLabelRef.current = labelValue;\n }, [labelValue]);\n\n return (\n <>\n <div className={\"flex w-full align-center justify-center\"}>\n <Field name={`${enumValuesPath}[${index}].label`}\n as={DebouncedTextField}\n className={\"flex-grow\"}\n required\n disabled={disabled}\n size=\"small\"\n autoFocus={autoFocus}\n autoComplete=\"off\"\n endAdornment={inferredEntry && <AutorenewIcon size={\"small\"}/>}\n error={Boolean(entryError?.label)}/>\n\n {!disabled &&\n <Badge color={\"error\"} invisible={!entryError?.id}>\n <IconButton\n size=\"small\"\n aria-label=\"edit\"\n className={\"m-1\"}\n onClick={() => onDialogOpen()}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Badge>}\n\n </div>\n\n {entryError?.label && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.label}\n </Typography>}\n\n {entryError?.id && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.id}\n </Typography>}\n\n </>);\n },\n function areEqual(prevProps: EnumEntryProps, nextProps: EnumEntryProps) {\n return prevProps.index === nextProps.index &&\n prevProps.enumValuesPath === nextProps.enumValuesPath &&\n prevProps.shouldUpdateId === nextProps.shouldUpdateId &&\n prevProps.inferredEntry === nextProps.inferredEntry &&\n equal(prevProps.entryError, nextProps.entryError) &&\n prevProps.autoFocus === nextProps.autoFocus;\n }\n);\n\nfunction EnumEntryDialog({\n index,\n open,\n onClose,\n enumValuesPath\n }: {\n index?: number;\n open: boolean;\n enumValuesPath: string;\n onClose: () => void;\n}) {\n\n const {\n errors,\n } = useFormex<EnumValues>();\n\n const idError = index !== undefined ? getIn(errors, `${enumValuesPath}[${index}].id`) : undefined;\n return <Dialog\n maxWidth=\"md\"\n aria-labelledby=\"enum-edit-dialog\"\n open={open}\n onOpenChange={(open) => !open ? onClose() : undefined}\n >\n <DialogTitle hidden>Enum form dialog</DialogTitle>\n <DialogContent>\n {index !== undefined &&\n <div>\n <Field name={`${enumValuesPath}[${index}].id`}\n as={DebouncedTextField}\n required\n label={\"ID\"}\n size=\"small\"\n autoComplete=\"off\"\n error={Boolean(idError)}/>\n\n <FieldCaption error={Boolean(idError)}>\n {idError ?? \"Value saved in the data source\"}\n </FieldCaption>\n </div>}\n </DialogContent>\n\n <DialogActions>\n <Button\n autoFocus\n variant=\"outlined\"\n onClick={onClose}\n color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n\n </Dialog>\n}\n\n","import React from \"react\";\n\nimport { BooleanSwitchWithLabel, Tooltip } from \"@firecms/ui\";\nimport { FormexFieldProps } from \"@firecms/formex\";\n\nexport function SwitchControl({\n field,\n form,\n label,\n tooltip,\n disabled,\n size = \"small\",\n allowIndeterminate\n }: FormexFieldProps & {\n label: string,\n tooltip?: string,\n disabled?: boolean,\n size?: \"small\" | \"medium\",\n allowIndeterminate?: boolean\n}) {\n\n const formControlLabel = <BooleanSwitchWithLabel\n label={label}\n size={size}\n position={\"start\"}\n value={field.value}\n disabled={disabled}\n allowIndeterminate={allowIndeterminate}\n onValueChange={(checked:boolean | null) => form.setFieldValue(field.name, checked)}/>;\n\n if (tooltip)\n return (\n <Tooltip\n title={tooltip}>\n {formControlLabel}\n </Tooltip>\n );\n return formControlLabel;\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function GeneralPropertyValidation({ disabled }: {\n required?: boolean;\n disabled: boolean;\n}) {\n\n const { values, handleChange } = useFormex();\n\n const validationRequired = \"validation.required\";\n const validationRequiredMessage = \"validation.requiredMessage\";\n const validationUnique = \"validation.unique\";\n const validationUniqueInArray = \"validation.uniqueInArray\";\n\n return (\n <>\n <div className={\"col-span-6\"}>\n <Field name={validationRequired}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={\"Required\"}\n tooltip={\"You won't be able to save this entity if this value is not set\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-6\"}>\n\n <Field name={validationUnique}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={\"Unique\"}\n tooltip={\"There cannot be multiple entities with the same value\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n {getIn(values, validationRequired) && <div className={\"col-span-12\"}>\n <DebouncedTextField\n disabled={disabled}\n value={getIn(values, validationRequiredMessage)}\n label={\"Required message\"}\n name={validationRequiredMessage}\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, serializeRegExp } from \"@firecms/core\";\nimport { DebouncedTextField, } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function StringPropertyValidation({\n length,\n lowercase,\n matches,\n max,\n min,\n trim,\n uppercase,\n disabled,\n showErrors\n }: {\n length?: boolean;\n min?: boolean;\n max?: boolean;\n trim?: boolean;\n matches?: boolean;\n lowercase?: boolean;\n uppercase?: boolean;\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const {\n values,\n handleChange,\n errors\n } = useFormex();\n\n const validationLength = \"validation.length\";\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationTrim = \"validation.trim\";\n const validationMatches = \"validation.matches\";\n const validationLowercase = \"validation.lowercase\";\n const validationUppercase = \"validation.uppercase\";\n\n const matchesError = getIn(errors, validationMatches);\n\n const matchesValue = getIn(values, validationMatches);\n const matchesStringValue = typeof matchesValue === \"string\" ? matchesValue : serializeRegExp(matchesValue);\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n\n {lowercase && <div className={\"col-span-4\"}>\n <Field name={validationLowercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Lowercase\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {uppercase && <div className={\"col-span-4\"}>\n <Field name={validationUppercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Uppercase\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {trim && <div className={\"col-span-4\"}>\n <Field name={validationTrim}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Trim\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n </div>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n {length && <div className={\"col-span-4\"}>\n <DebouncedTextField\n value={getIn(values, validationLength)}\n label={\"Exact length\"}\n name={validationLength}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {min && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n label={\"Min length\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {max && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n label={\"Max length\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n </div>\n\n {matches && <div className={\"col-span-12\"}>\n <Field name={validationMatches}\n as={DebouncedTextField}\n label={\"Matches regex\"}\n size=\"small\"\n disabled={disabled}\n value={matchesStringValue}\n error={Boolean(matchesError)}/>\n <FieldCaption error={Boolean(matchesError)}>\n {matchesError ? \"Not a valid regexp\" : \"e.g. /^\\\\d+$/ for digits only\"}\n </FieldCaption>\n </div>}\n\n </div>\n );\n\n}\n","import React from \"react\";\n\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\n\nexport function ArrayPropertyValidation({\n max = true,\n min = true,\n disabled\n }: {\n min?: boolean;\n max?: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n {min && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n disabled={disabled}\n label={\"Min length\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n {max && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n disabled={disabled}\n label={\"Max length\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\n\nimport { ExpandablePanel, RuleIcon, Typography } from \"@firecms/ui\";\n\nexport function ValidationPanel({\n children\n }: PropsWithChildren<{}>) {\n\n return (\n <ExpandablePanel\n initiallyExpanded={false}\n asField={true}\n innerClassName=\"p-4\"\n title={\n <div className=\"flex flex-row text-surface-500\">\n <RuleIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n Validation\n </Typography>\n </div>\n }>\n\n {children}\n\n </ExpandablePanel>\n )\n}\n","import React, { useMemo } from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { EnumValueConfig, resolveEnumValues, useSnackbarController } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\nimport { EnumForm } from \"../EnumForm\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { PropertyWithId } from \"../PropertyEditView\";\n\nexport function EnumPropertyField({\n multiselect,\n updateIds,\n disabled,\n showErrors,\n allowDataInference,\n getData\n }: {\n multiselect: boolean;\n updateIds: boolean;\n disabled: boolean;\n showErrors: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<object[]>;\n}) {\n\n const {\n values,\n setFieldError,\n setFieldValue\n } = useFormex<PropertyWithId>();\n\n const snackbarContext = useSnackbarController();\n\n const enumValuesPath = multiselect ? \"of.enumValues\" : \"enumValues\";\n\n const defaultValue = getIn(values, \"defaultValue\");\n\n const valuesEnumValues = getIn(values, enumValuesPath);\n const enumValues: EnumValueConfig[] = useMemo(() => {\n if (!valuesEnumValues || typeof valuesEnumValues === \"boolean\")\n return [] as EnumValueConfig[];\n return resolveEnumValues(valuesEnumValues) ?? [] as EnumValueConfig[];\n }, [valuesEnumValues]);\n\n const onValuesChanged = (value: EnumValueConfig[]) => {\n if (!values)\n return;\n setFieldValue(enumValuesPath, value);\n if (!multiselect) {\n const enumIds = value.filter(v => Boolean(v?.id)).map((v: any) => v.id);\n if (defaultValue && !enumIds.includes(defaultValue)) {\n setFieldValue(\"defaultValue\", undefined);\n snackbarContext.open({\n type: \"warning\",\n message: \"Default value was cleared\"\n })\n }\n }\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <EnumForm enumValues={enumValues}\n updateIds={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n onError={(hasError) => {\n setFieldError(enumValuesPath, hasError ? \"This enum property is missing some values\" : undefined);\n }}\n getData={getData\n ? () => getData()\n .then(res => res.map(entry => values.id && getIn(entry, values.id)).filter(Boolean))\n : undefined}\n onValuesChanged={onValuesChanged}/>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiselect &&\n <StringPropertyValidation disabled={disabled}\n showErrors={showErrors}/>}\n {multiselect &&\n <ArrayPropertyValidation disabled={disabled}/>}\n </ValidationPanel>\n\n </div>\n\n {!multiselect && <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n fullWidth={true}\n onValueChange={(value: string) => {\n setFieldValue(\"defaultValue\", value);\n }}\n size={\"large\"}\n label={\"Default value\"}\n value={defaultValue ?? \"\"}>\n {enumValues\n .filter((enumValue) => Boolean(enumValue?.id))\n .map((enumValue) => (\n <SelectItem key={enumValue.id}\n value={enumValue.id?.toString()}>\n {enumValue.label}\n </SelectItem>\n ))}\n </Select>\n\n </div>}\n </>\n );\n}\n","import React from \"react\";\nimport {\n Button,\n CloudUploadIcon,\n DebouncedTextField,\n ExpandablePanel,\n MultiSelect,\n MultiSelectItem,\n Typography\n} from \"@firecms/ui\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nconst fileTypes: Record<string, string> = {\n \"image/*\": \"Images\",\n \"video/*\": \"Videos\",\n \"audio/*\": \"Audio files\",\n \"application/*\": \"Files (pdf, zip, csv, excel...)\",\n \"text/*\": \"Text files\"\n}\n\nexport function StoragePropertyField({\n multiple,\n existing,\n disabled\n }: {\n multiple: boolean;\n existing: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex();\n\n const baseStoragePath = multiple ? \"of.storage\" : \"storage\";\n const acceptedFiles = `${baseStoragePath}.acceptedFiles`;\n\n const metadata = `${baseStoragePath}.metadata`;\n const fileName = `${baseStoragePath}.fileName`;\n const maxSize = `${baseStoragePath}.maxSize`;\n const storagePath = `${baseStoragePath}.storagePath`;\n const storeUrl = `${baseStoragePath}.storeUrl`;\n\n const fileNameValue = getIn(values, fileName) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\n const maxSizeValue = getIn(values, maxSize);\n\n const storedValue = getIn(values, acceptedFiles);\n const fileTypesValue: string[] | undefined = Array.isArray(storedValue) ? storedValue : undefined;\n const allFileTypesSelected = !fileTypesValue || fileTypesValue.length === 0;\n\n const handleTypesChange = (value: string[]) => {\n if (!value) setFieldValue(acceptedFiles, undefined);\n // else if (value.includes(\"all\")) setFieldValue(acceptedFiles, undefined);\n // else if (value.length >= Object.keys(fileTypes).length) setFieldValue(acceptedFiles, undefined);\n // else if (allFileTypesSelected)\n // setFieldValue(acceptedFiles, Object.keys(fileTypes).filter((v) => !value.includes(v)));\n else setFieldValue(acceptedFiles, value);\n };\n\n const hasFilenameCallback = typeof fileNameValue === \"function\";\n const hasStoragePathCallback = typeof storagePathValue === \"function\";\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ExpandablePanel\n title={\n <div className=\"flex flex-row text-surface-500\">\n <CloudUploadIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n File upload config\n </Typography>\n </div>\n }>\n\n <div className={\"grid grid-cols-12 gap-2 p-4\"}>\n\n <div className={\"col-span-12\"}>\n\n <MultiSelect\n className={\"w-full\"}\n placeholder={\"All file types allowed\"}\n disabled={disabled}\n name={acceptedFiles}\n value={fileTypesValue ?? []}\n onValueChange={handleTypesChange}\n label={allFileTypesSelected ? undefined : \"Allowed file types\"}\n renderValues={(selected) => {\n if (!selected || selected.length === 0) return \"All file types allowed\";\n return selected.map((v: string) => fileTypes[v])\n .filter((v: string) => Boolean(v))\n .join(\", \");\n }}>\n\n {Object.entries(fileTypes).map(([value, label]) => (\n <MultiSelectItem key={value} value={value} className={\"flex items-center gap-2\"}>\n {/*<Checkbox*/}\n {/* checked={allFileTypesSelected || fileTypesValue.indexOf(value) > -1}/>*/}\n <div className={\"flex-grow\"}>\n {label}\n </div>\n <Button size={\"small\"}\n variant={\"text\"}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n return setFieldValue(acceptedFiles, [value]);\n }}>\n Only\n </Button>\n </MultiSelectItem>\n ))}\n\n </MultiSelect>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={\"File name\"}\n size={\"small\"}\n disabled={hasFilenameCallback || disabled}\n value={hasFilenameCallback ? \"-\" : fileNameValue}\n />\n </div>\n <div className={\"col-span-12\"}>\n <Field name={storagePath}\n as={DebouncedTextField}\n label={\"Storage path\"}\n disabled={hasStoragePathCallback || disabled}\n size={\"small\"}\n value={hasStoragePathCallback ? \"-\" : storagePathValue}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n <p>You can use the following placeholders in\n the file name\n and storage path values:</p>\n <ul>\n <li>{\"{file} - Full name of the uploaded file\"}</li>\n <li>{\"{file.name} - Name of the uploaded file without extension\"}</li>\n <li>{\"{file.ext} - Extension of the uploaded file\"}</li>\n <li>{\"{entityId} - ID of the entity\"}</li>\n <li>{\"{propertyKey} - ID of this field\"}</li>\n <li>{\"{path} - Path of this entity\"}</li>\n <li>{\"{rand} - Random value used to avoid name collisions\"}</li>\n </ul>\n </Typography>\n\n <Field name={storeUrl}\n type=\"checkbox\">\n {({\n field,\n form\n }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Save URL instead of storage path\"}\n disabled={existing || disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n Turn this setting on, if you prefer to save\n the download\n URL of the uploaded file instead of the\n storage path.\n You can only change this prop upon creation.\n </Typography>\n </div>\n\n <div className={\"col-span-12\"}>\n <DebouncedTextField name={maxSize}\n type={\"number\"}\n label={\"Max size (in bytes)\"}\n size={\"small\"}\n value={maxSizeValue !== undefined && maxSizeValue !== null ? maxSizeValue.toString() : \"\"}\n onChange={(e) => {\n const value = e.target.value;\n if (value === \"\") setFieldValue(maxSize, undefined);\n else setFieldValue(maxSize, parseInt(value));\n }}\n />\n </div>\n\n </div>\n </ExpandablePanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiple && <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n </div>}\n {multiple && <div className={\"col-span-12\"}>\n <ArrayPropertyValidation disabled={disabled}/>\n </div>}\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { isPropertyBuilder, Properties, PropertiesOrBuilders, Property, PropertyOrBuilder } from \"@firecms/core\";\n\nexport function editableProperty(property: PropertyOrBuilder | PropertyOrBuilder): boolean {\n if (isPropertyBuilder(property))\n return false;\n if (isPropertyBuilder(property as PropertyOrBuilder))\n return false;\n else {\n const eProperty = property as Property;\n if (eProperty.dataType === \"array\" && typeof eProperty.of === \"function\")\n return false;\n else if (eProperty.dataType === \"array\" && Array.isArray(eProperty.of))\n return false;\n return Boolean(eProperty.editable);\n }\n}\n\nexport function removeNonEditableProperties(properties: PropertiesOrBuilders<any>): Properties {\n return Object.entries(properties)\n .filter(([_, property]) => editableProperty(property))\n .map(([key, propertyOrBuilder]) => {\n const property = propertyOrBuilder as Property;\n if (!editableProperty(property)) {\n return undefined;\n } else if (property.dataType === \"map\" && property.properties) {\n return {\n [key]: {\n ...property,\n properties: removeNonEditableProperties(property.properties as PropertiesOrBuilders)\n }\n };\n } else {\n return { [key]: property };\n }\n })\n .filter((e) => Boolean(e))\n .reduce((a, b) => ({ ...a, ...b }), {}) as Properties;\n}\n","import {\n ErrorBoundary,\n getFieldConfig,\n isPropertyBuilder,\n Property,\n PropertyConfigBadge,\n PropertyOrBuilder,\n useCustomizationController,\n} from \"@firecms/core\";\nimport {\n cardClickableMixin,\n cardMixin,\n cardSelectedMixin,\n cls,\n DoNotDisturbOnIcon,\n FunctionsIcon,\n Paper,\n Typography,\n} from \"@firecms/ui\";\n\nimport { editableProperty } from \"../../utils/entities\";\n\nexport function PropertyFieldPreview({\n property,\n onClick,\n hasError,\n includeName,\n includeEditButton,\n selected\n }: {\n property: Property,\n hasError?: boolean,\n selected?: boolean,\n includeName?: boolean,\n includeEditButton?: boolean;\n onClick?: () => void\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = getFieldConfig(property, propertyConfigs);\n const disabled = !editableProperty(property);\n\n const borderColorClass = hasError\n ? \"border-red-500 dark:border-red-500 border-opacity-100 dark:border-opacity-100 ring-0 dark:ring-0\"\n : (selected ? \"border-primary\" : \"border-transparent\");\n\n return <ErrorBoundary>\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"m-4\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <Paper\n className={cls(\n \"border\",\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n borderColorClass\n )}\n >\n\n <div className=\"w-full flex flex-col\">\n\n {includeName &&\n <ErrorBoundary>\n <Typography variant=\"body1\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property.name\n ? property.name\n : \"\\u00a0\"\n }\n </Typography>\n </ErrorBoundary>}\n\n <div className=\"flex flex-row items-center\">\n <ErrorBoundary>\n <Typography className=\"flex-grow pr-2\"\n variant={includeName ? \"body2\" : \"subtitle1\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>\n </ErrorBoundary>\n <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>\n\n </div>\n </div>\n\n {includeEditButton && <Typography variant={\"button\"}>\n EDIT\n </Typography>}\n\n </Paper>\n </div>\n </ErrorBoundary>\n}\n\nexport function NonEditablePropertyPreview({\n name,\n selected,\n onClick,\n property\n }: {\n name: string,\n selected: boolean,\n onClick?: () => void,\n property?: PropertyOrBuilder\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = !isPropertyBuilder(property) && property ? getFieldConfig(property, propertyConfigs) : undefined;\n\n return (\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"relative m-4\"}>\n {propertyConfig && <PropertyConfigBadge propertyConfig={propertyConfig}/>}\n {!propertyConfig && <div\n className={\"h-8 w-8 p-1 rounded-full shadow text-white bg-surface-500\"}>\n <FunctionsIcon color={\"inherit\"} size={\"medium\"}/>\n </div>}\n <DoNotDisturbOnIcon color={\"disabled\"} size={\"small\"} className={\"absolute -right-2 -top-2\"}/>\n </div>\n <Paper\n className={cls(\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n selected ? \"border-primary\" : \"border-transparent\")}\n >\n\n <div className=\"w-full flex flex-col\">\n <Typography variant=\"body1\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property?.name\n ? property.name\n : name\n }\n </Typography>\n\n <div className=\"flex flex-row items-center\">\n {propertyConfig && <Typography className=\"flex-grow pr-2\"\n variant={\"body2\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>}\n\n {property && !isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>}\n\n {property && isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This property is defined as a property builder in code\n </Typography>\n </ErrorBoundary>}\n\n {!property && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This field is defined as an additional field in code\n </Typography>\n </ErrorBoundary>}\n\n </div>\n\n {/*<div className=\"flex flex-row text-xs\">*/}\n {/* <Typography className=\"flex-grow pr-2\"*/}\n {/* variant=\"body2\"*/}\n {/* component=\"span\"*/}\n {/* color=\"secondary\">*/}\n {/* This field can only be edited in code*/}\n {/* </Typography>*/}\n {/*</div>*/}\n </div>\n\n </Paper>\n </div>)\n}\n","import React from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport {\n AdditionalFieldDelegate,\n CMSType,\n ErrorBoundary,\n isPropertyBuilder,\n PropertiesOrBuilders,\n PropertyOrBuilder\n} from \"@firecms/core\";\nimport { AutorenewIcon, defaultBorderMixin, DragHandleIcon, IconButton, RemoveIcon, Tooltip } from \"@firecms/ui\";\nimport { NonEditablePropertyPreview, PropertyFieldPreview } from \"./PropertyFieldPreview\";\nimport { DragDropContext, Draggable, DraggableProvided, Droppable } from \"@hello-pangea/dnd\";\nimport { getFullId, getFullIdPath } from \"./util\";\nimport { editableProperty } from \"../../utils/entities\";\n\nexport const PropertyTree = React.memo(\n function PropertyTree<M extends {\n [Key: string]: CMSType\n }>({\n namespace,\n selectedPropertyKey,\n onPropertyClick,\n properties,\n propertiesOrder: propertiesOrderProp,\n additionalFields,\n errors,\n onPropertyMove,\n onPropertyRemove,\n className,\n inferredPropertyKeys,\n collectionEditable\n }: {\n namespace?: string;\n selectedPropertyKey?: string;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n properties: PropertiesOrBuilders<M>;\n propertiesOrder?: string[];\n additionalFields?: AdditionalFieldDelegate<M>[];\n errors: Record<string, any>;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n className?: string;\n inferredPropertyKeys?: string[];\n collectionEditable: boolean;\n }) {\n\n const propertiesOrder = propertiesOrderProp ?? Object.keys(properties);\n\n const onDragEnd = (result: any) => {\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n const startIndex = result.source.index;\n const endIndex = result.destination.index;\n\n const newPropertiesOrder = Array.from(propertiesOrder);\n const [removed] = newPropertiesOrder.splice(startIndex, 1);\n newPropertiesOrder.splice(endIndex, 0, removed);\n if (onPropertyMove)\n onPropertyMove(newPropertiesOrder, namespace);\n }\n\n return (\n <>\n\n <DragDropContext onDragEnd={onDragEnd}>\n <Droppable droppableId={`droppable_${namespace}`}>\n {(droppableProvided, droppableSnapshot) => (\n <div\n {...droppableProvided.droppableProps}\n ref={droppableProvided.innerRef}\n className={className}>\n {propertiesOrder && propertiesOrder\n .map((propertyKey: string, index: number) => {\n const property = properties[propertyKey] as PropertyOrBuilder;\n const additionalField = additionalFields?.find(field => field.key === propertyKey);\n\n if (!property && !additionalField) {\n console.warn(`Property ${propertyKey} not found in properties or additionalFields`);\n return null;\n }\n return (\n <Draggable\n key={`array_field_${namespace}_${propertyKey}}`}\n draggableId={`array_field_${namespace}_${propertyKey}}`}\n index={index}>\n {(provided, snapshot) => {\n return (\n <ErrorBoundary>\n <PropertyTreeEntry\n propertyKey={propertyKey as string}\n propertyOrBuilder={property}\n additionalField={additionalField}\n provided={provided}\n errors={errors}\n namespace={namespace}\n inferredPropertyKeys={inferredPropertyKeys}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n onPropertyClick={snapshot.isDragging ? undefined : onPropertyClick}\n selectedPropertyKey={selectedPropertyKey}\n collectionEditable={collectionEditable}\n />\n </ErrorBoundary>\n );\n }}\n </Draggable>);\n }).filter(Boolean)}\n\n {droppableProvided.placeholder}\n\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n </>\n );\n },\n (prevProps, nextProps) => {\n\n const isSelected = nextProps.selectedPropertyKey?.startsWith(nextProps.namespace ?? \"\");\n const wasSelected = prevProps.selectedPropertyKey?.startsWith(prevProps.namespace ?? \"\");\n if (isSelected || wasSelected)\n return false;\n\n return equal(prevProps.properties, nextProps.properties) &&\n prevProps.propertiesOrder === nextProps.propertiesOrder &&\n equal(prevProps.additionalFields, nextProps.additionalFields) &&\n equal(prevProps.errors, nextProps.errors) &&\n equal(prevProps.onPropertyClick, nextProps.onPropertyClick) &&\n // equal(prevProps.onPropertyMove, nextProps.onPropertyMove) &&\n // equal(prevProps.onPropertyRemove, nextProps.onPropertyRemove) &&\n prevProps.namespace === nextProps.namespace &&\n prevProps.collectionEditable === nextProps.collectionEditable;\n }\n);\n\nexport function PropertyTreeEntry({\n propertyKey,\n namespace,\n propertyOrBuilder,\n additionalField,\n provided,\n selectedPropertyKey,\n errors,\n onPropertyClick,\n onPropertyMove,\n onPropertyRemove,\n inferredPropertyKeys,\n collectionEditable\n }: {\n propertyKey: string;\n namespace?: string;\n propertyOrBuilder: PropertyOrBuilder;\n additionalField?: AdditionalFieldDelegate<any>;\n selectedPropertyKey?: string;\n provided: DraggableProvided;\n errors: Record<string, any>;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n inferredPropertyKeys?: string[];\n collectionEditable: boolean;\n}) {\n\n const isPropertyInferred = inferredPropertyKeys?.includes(namespace ? `${namespace}.${propertyKey}` : propertyKey);\n const fullId = getFullId(propertyKey, namespace);\n const fullIdPath = getFullIdPath(propertyKey, namespace);\n const hasError = fullIdPath in errors;\n\n let subtree;\n if (typeof propertyOrBuilder === \"object\") {\n const property = propertyOrBuilder;\n if (property.dataType === \"map\" && property.properties) {\n subtree = <PropertyTree\n selectedPropertyKey={selectedPropertyKey}\n namespace={fullId}\n properties={property.properties}\n propertiesOrder={property.propertiesOrder}\n errors={errors}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n collectionEditable={collectionEditable}\n />\n }\n }\n\n // const hasError = fullId ? getIn(errors, idToPropertiesPath(fullId)) : false;\n const selected = selectedPropertyKey === fullId;\n const editable = propertyOrBuilder && ((collectionEditable && !isPropertyBuilder(propertyOrBuilder)) || editableProperty(propertyOrBuilder));\n\n return (\n <div\n ref={provided.innerRef}\n {...provided.draggableProps}\n {...provided.dragHandleProps}\n className=\"relative -ml-8\"\n >\n {subtree && <div\n className={\"absolute border-l \" + defaultBorderMixin}\n style={{\n left: \"32px\",\n top: \"64px\",\n bottom: \"16px\"\n }}/>}\n\n {!isPropertyBuilder(propertyOrBuilder) && !additionalField && editable\n ? <PropertyFieldPreview\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n includeName={true}\n selected={selected}\n hasError={hasError}/>\n : <NonEditablePropertyPreview name={propertyKey}\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n selected={selected}/>}\n\n <div className=\"absolute top-2 right-2 flex flex-row \">\n\n {isPropertyInferred && <Tooltip title={\"Inferred property\"}>\n <AutorenewIcon size=\"small\" className={\"p-2\"}/>\n </Tooltip>}\n\n {onPropertyRemove && <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n color=\"inherit\"\n onClick={() => onPropertyRemove(propertyKey, namespace)}>\n <RemoveIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>}\n\n {onPropertyMove && <Tooltip title={\"Move\"}\n asChild={true}>\n <IconButton\n component={\"span\"}\n size=\"small\"\n >\n <DragHandleIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>}\n </div>\n\n {subtree && <div className={\"ml-16\"}>{subtree}</div>}\n </div>\n );\n\n}\n","import React, { useState } from \"react\";\nimport { FieldCaption, MapProperty, Property, PropertyConfig, } from \"@firecms/core\";\nimport { AddIcon, BooleanSwitchWithLabel, Button, Paper, Typography } from \"@firecms/ui\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath, namespaceToPropertiesPath } from \"../util\";\n\nexport function MapPropertyField({ disabled, getData, allowDataInference, propertyConfigs, collectionEditable }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<MapProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const propertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const onPropertyCreated = ({\n id,\n property\n }: { id?: string, property: Property }) => {\n if (!id)\n throw Error();\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const currentPropertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"propertiesOrder\", newPropertiesOrder, false);\n\n setPropertyDialogOpen(false);\n };\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n const propertiesPath = idToPropertiesPath(fullId);\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n const currentPropertiesOrder: string[] = getIn(values, propertiesOrderPath) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\n\n setFieldValue(propertiesPath, undefined, false);\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const empty = !propertiesOrder || propertiesOrder.length < 1;\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className=\"flex justify-between items-end my-4\">\n <Typography variant={\"subtitle2\"}>Properties in this group</Typography>\n <Button\n color=\"primary\"\n variant={\"outlined\"}\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\n >\n Add property to {values.name ?? \"this group\"}\n </Button>\n </div>\n <Paper className=\"p-2 pl-8\">\n <PropertyTree\n properties={values.properties ?? {}}\n propertiesOrder={propertiesOrder}\n errors={{}}\n collectionEditable={collectionEditable}\n onPropertyClick={(propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={onPropertyMove}/>\n\n {empty &&\n <Typography variant={\"label\"}\n className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this group\n </Typography>}\n </Paper>\n </div>\n\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"small\"}\n label=\"Spread children as columns\"\n onValueChange={(v) => setFieldValue(\"spreadChildren\", v)}\n value={values.spreadChildren ?? false}\n />\n <FieldCaption>\n Set this flag to true if you want to display the children of this group as individual columns. This\n will only work for top level groups.\n </FieldCaption>\n </div>\n\n <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n getData={getData}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyCreated}\n existingPropertyKeys={selectedPropertyKey ? undefined : propertiesOrder}\n propertyConfigs={propertyConfigs}\n />\n\n </>);\n}\n","import React, { useState } from \"react\";\nimport { ArrayProperty, getFieldConfig, Property, PropertyConfig } from \"@firecms/core\";\nimport { Button, Paper, Typography } from \"@firecms/ui\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { PropertyFieldPreview } from \"../PropertyFieldPreview\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\nexport function RepeatPropertyField({\n showErrors,\n existing,\n disabled,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n showErrors: boolean,\n existing: boolean,\n disabled: boolean,\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState(false);\n const ofProperty = getIn(values, \"of\");\n const ofPropertyError = getIn(touched, \"of\") && getIn(errors, \"of\");\n\n const onPropertyChanged = ({ id, property, namespace }:\n { id?: string, property: Property, namespace?: string }) => {\n setFieldValue(\"of\", property);\n };\n\n const widget = ofProperty && getFieldConfig(ofProperty, propertyConfigs);\n return (\n <>\n <div className={\"col-span-12\"}>\n <Typography variant={\"subtitle2\"}>\n Repeat component\n </Typography>\n <Field\n name={\"of\"}\n value={ofProperty}\n // validate={(property: Property) => {\n // return property?.dataType ? undefined : \"You need to specify a repeat field\";\n // }}\n >\n {({}) => (\n <Paper className=\"p-2 mt-4\">\n\n {ofProperty && <PropertyFieldPreview\n property={ofProperty}\n onClick={disabled ? undefined : () => setPropertyDialogOpen(true)}\n includeName={false}\n includeEditButton={true}\n selected={false}\n hasError={false}/>}\n\n {!disabled && !ofProperty && <Button variant={\"text\"}\n size={\"large\"}\n color={ofPropertyError ? \"error\" : \"primary\"}\n onClick={() => setPropertyDialogOpen(true)}>\n Edit {`${widget ? widget.name : \"repeat component\"}`}\n </Button>}\n\n <PropertyFormDialog\n inArray={true}\n open={propertyDialogOpen}\n existingProperty={existing}\n getData={getData}\n autoUpdateId={!existing}\n autoOpenTypeSelect={!existing}\n onOkClicked={() => setPropertyDialogOpen(false)}\n allowDataInference={allowDataInference}\n property={ofProperty}\n includeIdAndName={false}\n onPropertyChanged={onPropertyChanged}\n forceShowErrors={showErrors}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n />\n </Paper>\n )}\n </Field>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <ArrayPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { PropertyWithId } from \"../PropertyEditView\";\nimport React from \"react\";\nimport { FieldCaption, toSnakeCase, unslugify } from \"@firecms/core\";\n\ntype CommonPropertyFieldsProps = {\n showErrors: boolean,\n disabledId: boolean,\n disabled: boolean;\n isNewProperty: boolean;\n autoUpdateId: boolean;\n};\n\nexport const CommonPropertyFields = React.forwardRef<HTMLDivElement, CommonPropertyFieldsProps>(\n function CommonPropertyFields({\n showErrors,\n disabledId,\n disabled,\n autoUpdateId,\n isNewProperty\n }, ref) {\n\n const {\n errors,\n values,\n setFieldValue,\n setFieldTouched,\n touched,\n validate\n } = useFormex<PropertyWithId>();\n\n const name = \"name\";\n const nameError = showErrors && getIn(errors, name);\n\n const id = \"id\";\n const idError = showErrors && getIn(errors, id);\n\n const description = \"description\";\n const descriptionError = showErrors && getIn(errors, description);\n\n return (\n <div className={\"flex flex-col gap-2 col-span-12\"}>\n\n <div>\n <Field\n name={name}\n inputRef={ref}\n as={DebouncedTextField}\n value={values[name]}\n onChange={(e: any) => {\n const newNameValue = e.target.value;\n const idTouched = getIn(touched, id);\n if (!idTouched && autoUpdateId) {\n setFieldValue(id, newNameValue ? toSnakeCase(newNameValue) : \"\", false)\n }\n setFieldValue(name, newNameValue, true);\n setFieldTouched(name, true);\n }}\n style={{ fontSize: 20 }}\n placeholder={\"Field name\"}\n required\n disabled={disabled}\n error={Boolean(nameError)}/>\n\n <FieldCaption error={Boolean(nameError)}>\n {nameError}\n </FieldCaption>\n </div>\n\n <div>\n <Field\n name={id}\n as={DebouncedTextField}\n label={\"ID\"}\n value={values[id]}\n onChange={(e: any) => {\n const newIdValue = e.target.value;\n const nameTouched = getIn(touched, name);\n if (!nameTouched && autoUpdateId) {\n setFieldValue(name, newIdValue ? unslugify(newIdValue) : \"\")\n }\n setFieldValue(id, newIdValue, true);\n setFieldTouched(id, true);\n }}\n disabled={disabledId || disabled}\n required\n size=\"small\"\n error={Boolean(idError)}/>\n <FieldCaption error={Boolean(idError)}>\n {idError}\n </FieldCaption>\n </div>\n\n <div>\n <Field name={description}\n as={DebouncedTextField}\n label={\"Description\"}\n disabled={disabled}\n error={Boolean(descriptionError)}/>\n <FieldCaption error={Boolean(descriptionError)}>\n {descriptionError}\n </FieldCaption>\n </div>\n\n </div>\n );\n\n }\n);\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { TextField } from \"@firecms/ui\";\n\nexport function StringPropertyField({\n widgetId,\n disabled,\n showErrors\n }: {\n widgetId: \"text_field\" | \"multiline\" | \"email\";\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n {widgetId === \"text_field\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n matches={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n {widgetId === \"multiline\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n\n {widgetId === \"email\" &&\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>}\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\n\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nexport function BooleanPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n const { values } = useFormex();\n const defaultValue = getIn(values, \"defaultValue\");\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <Field\n name={\"defaultValue\"}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={defaultValue === null || defaultValue === undefined ? \"Default value not set\" : (\"Default value is \" + defaultValue.toString())}\n disabled={disabled}\n allowIndeterminate={true} field={field}\n form={form}/>\n }}\n </Field>\n\n </div>\n </>\n );\n}\n","import React, { useState } from \"react\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { OnPropertyChangedParams, PropertyFormDialog } from \"../PropertyEditView\";\nimport {\n getFullId,\n getFullIdPath,\n idToPropertiesPath,\n namespaceToPropertiesOrderPath,\n namespaceToPropertiesPath\n} from \"../util\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { ArrayProperty, PropertyConfig } from \"@firecms/core\";\n\nexport function BlockPropertyField({\n disabled,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const onPropertyChanged = ({\n id,\n namespace,\n property\n }: OnPropertyChangedParams) => {\n if (!id)\n throw Error();\n\n setFieldValue(\"oneOf.\" + getFullIdPath(id, namespace), property, false);\n\n const currentPropertiesOrder = values.oneOf?.propertiesOrder ?? Object.keys(values.oneOf?.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"oneOf.\" + namespaceToPropertiesOrderPath(namespace), newPropertiesOrder, false);\n setPropertyDialogOpen(false);\n };\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.oneOf?.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(`oneOf.${idToPropertiesPath(fullId)}`, undefined, false);\n const propertiesOrderPath = `oneOf.${namespaceToPropertiesOrderPath(namespace)}`;\n const currentPropertiesOrder: string[] = getIn(values, propertiesOrderPath) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const addChildButton = <Button\n autoFocus\n color=\"primary\"\n\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\n >\n Add property to {values.name ?? \"this block\"}\n </Button>;\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(`oneOf.${namespaceToPropertiesOrderPath(namespace)}`, propertiesOrder, false);\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className={\"flex justify-between items-end mt-8 mb-4\"}>\n <Typography variant={\"subtitle2\"}>\n Properties in this block\n </Typography>\n {addChildButton}\n </div>\n <Paper className=\"p-2 pl-8\">\n\n <PropertyTree\n properties={values.oneOf?.properties ?? {}}\n propertiesOrder={values.oneOf?.propertiesOrder}\n errors={{}}\n collectionEditable={collectionEditable}\n onPropertyClick={disabled\n ? undefined\n : (propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={disabled\n ? undefined\n : onPropertyMove}/>\n\n {!disabled && (values.oneOf?.propertiesOrder?.length === 0)&&\n <div className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this block\n </div>}\n\n </Paper>\n </div>\n\n {!disabled && <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n getData={getData}\n allowDataInference={allowDataInference}\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n collectionEditable={collectionEditable}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyChanged}\n existingPropertyKeys={selectedPropertyKey ? undefined : values.oneOf?.propertiesOrder}\n propertyConfigs={propertyConfigs}/>}\n\n </>);\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function NumberPropertyValidation({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationLessThan = \"validation.lessThan\";\n const validationMoreThan = \"validation.moreThan\";\n const validationPositive = \"validation.positive\";\n const validationNegative = \"validation.negative\";\n const validationInteger = \"validation.integer\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin)}\n label={\"Min value\"}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax)}\n label={\"Max value\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationLessThan)}\n label={\"Less than\"}\n name={validationLessThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationMoreThan)}\n label={\"More than\"}\n name={validationMoreThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-4\"}>\n <Field name={validationPositive}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Positive value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationNegative}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Negative value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationInteger}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Integer value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { NumberPropertyValidation } from \"./validation/NumberPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { TextField } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nexport function NumberPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <NumberPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n type={\"number\"}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : parseFloat(e.target.value));\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, IconForView, NumberProperty, StringProperty, useNavigationController } from \"@firecms/core\";\nimport { CircularProgress, Select, SelectGroup, SelectItem, Typography, } from \"@firecms/ui\";\n\nexport function ReferencePropertyField({\n existing,\n multiple,\n disabled,\n showErrors\n }: {\n existing: boolean,\n multiple: boolean,\n disabled: boolean,\n showErrors: boolean\n}) {\n\n const {\n values,\n handleChange,\n errors,\n } = useFormex<StringProperty | NumberProperty>();\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const pathPath = multiple ? \"of.path\" : \"path\";\n const pathValue: string | undefined = getIn(values, pathPath);\n const pathError: string | undefined = showErrors && getIn(errors, pathPath);\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Field name={pathPath}\n pathPath={pathPath}\n type=\"select\"\n disabled={(existing && Boolean(pathValue)) || disabled}\n value={pathValue}\n error={pathError}\n handleChange={handleChange}\n as={CollectionsSelect}/>\n\n </div>\n\n </>\n );\n}\n\nexport function CollectionsSelect({\n disabled,\n pathPath,\n value,\n handleChange,\n error,\n ...props\n }: {\n disabled: boolean,\n pathPath: string,\n value?: string,\n handleChange: (event: any) => void,\n error?: string\n}) {\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const collections = navigation?.collections ?? [];\n\n const groups: string[] = Array.from(new Set(\n Object.values(collections).map(e => e.group).filter(Boolean) as string[]\n ).values());\n\n const ungroupedCollections = collections.filter((col) => !col.group);\n\n return (\n <>\n <Select\n error={Boolean(error)}\n disabled={disabled}\n value={value ?? \"\"}\n position={\"item-aligned\"}\n name={pathPath}\n size={\"large\"}\n fullWidth={true}\n onChange={handleChange}\n label={\"Target collection\"}\n renderValue={(selected) => {\n const selectedCollection = collections.find(collection => collection.id === selected || collection.path === selected);\n if (!selectedCollection) return null;\n return (\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={selectedCollection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {selectedCollection?.name.toUpperCase()}\n </Typography>\n </div>)\n }}\n {...props}>\n\n {groups.flatMap((group) => (\n <SelectGroup label={group || \"Views\"}\n key={`group_${group}`}>\n {\n collections.filter(collection => collection.group === group)\n .map((collection) => {\n return <SelectItem\n key={`${collection.id ?? collection.path}-${group}`}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>\n ))}\n\n {ungroupedCollections && <SelectGroup label={\"Views\"}>\n {ungroupedCollections\n .map((collection) => {\n return <SelectItem key={collection.id ?? collection.path}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>}\n\n </Select>\n\n <FieldCaption>\n You can only edit the reference collection upon field\n creation.\n </FieldCaption>\n </>\n );\n}\n","import React from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, NumberProperty, StringProperty } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\nexport function DateTimePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n errors,\n touched,\n setFieldValue\n } = useFormex<StringProperty | NumberProperty>();\n\n const modePath = \"mode\";\n const modeValue: string | undefined = getIn(values, modePath);\n const modeError: string | undefined = getIn(touched, modePath) && getIn(errors, modePath);\n\n const autoValuePath = \"autoValue\";\n const autoValueValue: string | undefined = getIn(values, autoValuePath);\n const autoValueError: string | undefined = getIn(touched, autoValuePath) && getIn(errors, autoValuePath);\n\n return (\n <>\n <div className={\"flex flex-col col-span-12 gap-2\"}>\n <div>\n <Select name={modePath}\n value={modeValue ?? \"date\"}\n error={Boolean(modeError)}\n size={\"large\"}\n onValueChange={(v) => setFieldValue(modePath, v)}\n label={\"Mode\"}\n fullWidth={true}\n renderValue={(v) => {\n switch (v) {\n case \"date_time\":\n return \"Date/Time\";\n case \"date\":\n return \"Date\";\n default:\n return \"\";\n }\n }}\n disabled={disabled}>\n <SelectItem value={\"date_time\"}> Date/Time </SelectItem>\n <SelectItem value={\"date\"}> Date </SelectItem>\n </Select>\n <FieldCaption error={Boolean(modeError)}>\n {modeError}\n </FieldCaption>\n </div>\n <div>\n <Select name={autoValuePath}\n disabled={disabled}\n size={\"large\"}\n fullWidth={true}\n value={autoValueValue ?? \"\"}\n onValueChange={(v) => setFieldValue(autoValuePath, v === \"none\" ? null : v)}\n renderValue={(v) => {\n switch (v) {\n case \"on_create\":\n return \"On create\";\n case \"on_update\":\n return \"On any update\";\n default:\n return \"None\";\n }\n }}\n error={Boolean(autoValueError)}\n label={\"Automatic value\"}>\n <SelectItem value={\"none\"}> None </SelectItem>\n <SelectItem value={\"on_create\"}> On create </SelectItem>\n <SelectItem value={\"on_update\"}> On any update </SelectItem>\n </Select>\n <FieldCaption error={Boolean(autoValueError)}>\n {autoValueError ?? \"Update this field automatically when creating or updating the entity\"}\n </FieldCaption>\n </div>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n </div>\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps } from \"@firecms/formex\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function AdvancedPropertyValidation({ disabled }: {\n disabled: boolean\n}) {\n\n const columnWidth = \"columnWidth\";\n const hideFromCollection = \"hideFromCollection\";\n const readOnly = \"readOnly\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <div className={\"col-span-12\"}>\n <Field type=\"checkbox\" name={hideFromCollection}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Hide from collection\"}\n disabled={disabled}\n form={form}\n tooltip={\"Hide this field from the collection view. It will still be visible in the form view\"}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={readOnly}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Read only\"}\n disabled={disabled}\n tooltip={\"Is this a read only field. Display only as a preview\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\n\nexport function KeyValuePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import {\n ArrayProperty,\n BooleanProperty,\n DateProperty,\n MapProperty,\n mergeDeep,\n NumberProperty,\n Property,\n PropertyConfig,\n StringProperty\n} from \"@firecms/core\";\n\nexport function updatePropertyFromWidget(propertyData: any,\n selectedWidgetId: string | undefined,\n propertyConfigs: Record<string, PropertyConfig>): Property {\n\n let updatedProperty;\n if (selectedWidgetId === \"text_field\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"text_field\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multiline\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"multiline\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n multiline: true,\n storage: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"markdown\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"markdown\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: true,\n email: undefined,\n url: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"url\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"url\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: true,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"email\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"email\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: true,\n url: undefined,\n enumValues: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: propertyData.enumValues ?? []\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"number_input\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_input\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: undefined\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: propertyData.enumValues ?? []\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"multi_number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"number\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: {\n storagePath: \"/\"\n }\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n storage: propertyData.of?.storage ?? {\n storagePath: \"/\"\n }\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"group\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"group\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: false,\n properties: propertyData.properties ?? {}\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"key_value\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"key_value\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: true,\n properties: undefined\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"reference\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"reference\",\n propertyConfig: \"reference\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies Property\n );\n } else if (selectedWidgetId === \"multi_references\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_references\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"reference\"\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"switch\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"boolean\",\n propertyConfig: \"switch\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies BooleanProperty\n );\n } else if (selectedWidgetId === \"date_time\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"date\",\n propertyConfig: \"date_time\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n mode: \"date_time\"\n } satisfies DateProperty\n );\n } else if (selectedWidgetId === \"repeat\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"repeat\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"block\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"block\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n oneOf: {\n properties: {}\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId && propertyConfigs[selectedWidgetId]) {\n updatedProperty = {\n ...propertyConfigs[selectedWidgetId].property,\n propertyConfig: selectedWidgetId\n };\n }\n\n return updatedProperty;\n}\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { Select, SelectItem, TextField } from \"@firecms/ui\";\n\nexport function UrlPropertyField({\n disabled,\n showErrors\n }: {\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n const urlValue = getIn(values, \"url\");\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n fullWidth={true}\n onValueChange={(value: string) => {\n if (value === \"[NONE]\")\n setFieldValue(\"url\", true);\n else\n setFieldValue(\"url\", value);\n }}\n label={\"Preview type\"}\n renderValue={(value: string) => {\n switch (value) {\n case \"image\":\n return \"Image\";\n case \"video\":\n return \"Video\";\n case \"audio\":\n return \"Audio\";\n default:\n return \"Display URL\";\n }\n }}\n value={urlValue ?? \"[NONE]\"}>\n <SelectItem value={\"[NONE]\"}>\n Display URL\n </SelectItem>\n <SelectItem value={\"image\"}>\n Image\n </SelectItem>\n <SelectItem value={\"video\"}>\n Video\n </SelectItem>\n <SelectItem value={\"audio\"}>\n Audio\n </SelectItem>\n </Select>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import { DEFAULT_FIELD_CONFIGS, PropertyConfigId, PropertyConfig } from \"@firecms/core\";\n\nexport const supportedFieldsIds: PropertyConfigId[] = [\n \"text_field\",\n \"multiline\",\n \"markdown\",\n \"url\",\n \"email\",\n \"select\",\n \"multi_select\",\n \"number_input\",\n \"number_select\",\n \"multi_number_select\",\n \"file_upload\",\n \"multi_file_upload\",\n \"reference\",\n \"multi_references\",\n \"switch\",\n \"date_time\",\n \"group\",\n \"key_value\",\n \"repeat\",\n \"block\"\n];\n\nexport const supportedFields: Record<string, PropertyConfig> = Object.entries(DEFAULT_FIELD_CONFIGS)\n .filter(([id]) => supportedFieldsIds.includes(id as PropertyConfigId))\n .map(([id, config]) => ({ [id]: config }))\n .reduce((a, b) => ({ ...a, ...b }), {});\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\n\nimport { CloudUploadIcon, DebouncedTextField, ExpandablePanel, TextField, Typography } from \"@firecms/ui\";\n\nexport function MarkdownPropertyField({\n disabled,\n showErrors\n }: {\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex();\n\n const baseStoragePath = \"storage\";\n\n const metadata = `${baseStoragePath}.metadata`;\n const fileName = `${baseStoragePath}.fileName`;\n const maxSize = `${baseStoragePath}.maxSize`;\n const storagePath = `${baseStoragePath}.storagePath`;\n\n const fileNameValue = getIn(values, fileName) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\n const maxSizeValue = getIn(values, maxSize);\n\n const hasFilenameCallback = typeof fileNameValue === \"function\";\n const hasStoragePathCallback = typeof storagePathValue === \"function\";\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <ExpandablePanel\n title={\n <div className=\"flex flex-row text-surface-500\">\n <CloudUploadIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2\">\n File upload config\n </Typography>\n </div>\n }>\n\n <div className={\"grid grid-cols-12 gap-2 p-4\"}>\n\n\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={\"File name\"}\n size={\"small\"}\n disabled={hasFilenameCallback || disabled}\n value={hasFilenameCallback ? \"-\" : fileNameValue}\n />\n </div>\n <div className={\"col-span-12\"}>\n <Field name={storagePath}\n as={DebouncedTextField}\n label={\"Storage path\"}\n disabled={hasStoragePathCallback || disabled}\n size={\"small\"}\n value={hasStoragePathCallback ? \"-\" : storagePathValue}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n <p>You can use the following placeholders in\n the file name\n and storage path values:</p>\n <ul>\n <li>{\"{file} - Full name of the uploaded file\"}</li>\n <li>{\"{file.name} - Name of the uploaded file without extension\"}</li>\n <li>{\"{file.ext} - Extension of the uploaded file\"}</li>\n <li>{\"{entityId} - ID of the entity\"}</li>\n <li>{\"{propertyKey} - ID of this field\"}</li>\n <li>{\"{path} - Path of this entity\"}</li>\n <li>{\"{rand} - Random value used to avoid name collisions\"}</li>\n </ul>\n </Typography>\n\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n When using Markdown, the URL of the uploaded files are always saved in the text value\n (not\n the path).\n </Typography>\n </div>\n\n <div className={\"col-span-12\"}>\n <DebouncedTextField name={maxSize}\n type={\"number\"}\n label={\"Max size (in bytes)\"}\n size={\"small\"}\n value={maxSizeValue !== undefined && maxSizeValue !== null ? maxSizeValue.toString() : \"\"}\n onChange={(e) => {\n const value = e.target.value;\n if (value === \"\") setFieldValue(maxSize, undefined);\n else setFieldValue(maxSize, parseInt(value));\n }}\n />\n </div>\n\n </div>\n </ExpandablePanel>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React, { useDeferredValue, useEffect, useRef, useState } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { Formex, FormexController, getIn, useCreateFormex } from \"@firecms/formex\";\nimport {\n ConfirmationDialog,\n DEFAULT_FIELD_CONFIGS,\n getFieldConfig,\n getFieldId, isEmptyObject,\n isPropertyBuilder,\n isValidRegExp,\n mergeDeep,\n Property,\n PropertyConfig,\n PropertyConfigBadge,\n PropertyConfigId,\n} from \"@firecms/core\";\nimport {\n Button,\n Card,\n cls,\n DeleteIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundMixin,\n IconButton,\n InfoLabel,\n Tooltip,\n Typography,\n WarningIcon\n} from \"@firecms/ui\";\nimport { EnumPropertyField } from \"./properties/EnumPropertyField\";\nimport { StoragePropertyField } from \"./properties/StoragePropertyField\";\nimport { MapPropertyField } from \"./properties/MapPropertyField\";\nimport { RepeatPropertyField } from \"./properties/RepeatPropertyField\";\nimport { CommonPropertyFields } from \"./properties/CommonPropertyFields\";\nimport { StringPropertyField } from \"./properties/StringPropertyField\";\nimport { BooleanPropertyField } from \"./properties/BooleanPropertyField\";\nimport { BlockPropertyField } from \"./properties/BlockPropertyField\";\nimport { NumberPropertyField } from \"./properties/NumberPropertyField\";\nimport { ReferencePropertyField } from \"./properties/ReferencePropertyField\";\nimport { DateTimePropertyField } from \"./properties/DateTimePropertyField\";\nimport { AdvancedPropertyValidation } from \"./properties/advanced/AdvancedPropertyValidation\";\nimport { editableProperty } from \"../../utils/entities\";\nimport { KeyValuePropertyField } from \"./properties/KeyValuePropertyField\";\nimport { updatePropertyFromWidget } from \"./utils/update_property_for_widget\";\nimport { UrlPropertyField } from \"./properties/UrlPropertyField\";\nimport { supportedFields } from \"./utils/supported_fields\";\nimport { MarkdownPropertyField } from \"./properties/MarkdownPropertyField\";\n\nexport type PropertyWithId = Property & {\n id?: string\n};\n\nexport type OnPropertyChangedParams = {\n id?: string,\n property: Property,\n namespace?: string,\n previousId?: string\n};\n\nexport type PropertyFormProps = {\n includeIdAndName?: boolean;\n existingProperty: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n inArray: boolean;\n propertyKey?: string;\n propertyNamespace?: string;\n property?: Property;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onPropertyChangedImmediate?: boolean;\n onDismiss?: () => void;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n initialErrors?: Record<string, any>;\n existingPropertyKeys?: string[];\n forceShowErrors?: boolean;\n allowDataInference: boolean;\n getData?: () => Promise<object[]>;\n getController?: (formex: FormexController<PropertyWithId>) => void;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport const PropertyForm = React.memo(\n function PropertyForm(props: PropertyFormProps) {\n\n const {\n includeIdAndName = true,\n autoOpenTypeSelect,\n existingProperty,\n autoUpdateId,\n inArray,\n propertyKey,\n existingPropertyKeys,\n propertyNamespace,\n property,\n onPropertyChanged,\n onPropertyChangedImmediate = true,\n onDismiss,\n onDelete,\n onError,\n initialErrors,\n forceShowErrors,\n allowDataInference,\n getController,\n getData,\n propertyConfigs,\n collectionEditable\n } = props;\n\n const initialValue: PropertyWithId = {\n id: \"\",\n name: \"\"\n } as PropertyWithId;\n\n const disabled = (Boolean(property && !editableProperty(property)) && !collectionEditable);\n\n const lastSubmittedProperty = useRef<OnPropertyChangedParams | undefined>(property ? {\n id: propertyKey,\n previousId: propertyKey,\n property\n } : undefined);\n\n const doOnPropertyChanged = ({\n id,\n property\n }: OnPropertyChangedParams) => {\n const params = {\n id,\n previousId: lastSubmittedProperty.current?.id,\n property,\n namespace: propertyNamespace\n };\n lastSubmittedProperty.current = params;\n onPropertyChanged?.(params);\n };\n\n const formexController = useCreateFormex<PropertyWithId>({\n debugId: \"PROPERTY_FORM\",\n initialValues: property\n ? { id: propertyKey, ...property } as PropertyWithId\n : initialValue,\n initialErrors,\n validateOnChange: true,\n validateOnInitialRender: true,\n onSubmit: (newPropertyWithId, controller) => {\n console.debug(\"onSubmit\", newPropertyWithId);\n const {\n id,\n ...property\n } = newPropertyWithId;\n doOnPropertyChanged({\n id,\n property: {\n ...property,\n editable: property.editable ?? true\n }\n });\n if (!existingProperty)\n controller.resetForm({ values: initialValue });\n },\n validation: (values) => {\n const errors: Record<string, any> = {};\n if (includeIdAndName) {\n if (!values.name) {\n errors.name = \"Required\";\n } else {\n const nameError = validateName(values.name);\n if (nameError)\n errors.name = nameError;\n }\n if (!values.id) {\n errors.id = \"Required\";\n } else {\n const idError = validateId(values.id, existingPropertyKeys);\n if (idError)\n errors.id = idError;\n }\n }\n\n if (values.dataType === \"string\") {\n if (values.validation?.matches && !isValidRegExp(values.validation?.matches.toString())) {\n errors.validation = {\n matches: \"Invalid regular expression\"\n }\n }\n }\n if (values.dataType === \"reference\" && !values.path) {\n errors.path = \"You must specify a target collection for the field\";\n }\n if (values.propertyConfig === \"repeat\") {\n if (!(values as any).of) {\n errors.of = \"You need to specify a repeat field\";\n }\n }\n if (values.propertyConfig === \"block\") {\n if (!(values as any).oneOf) {\n errors.oneOf = \"You need to specify the properties of this block\";\n }\n }\n return errors;\n }\n });\n\n useEffect(() => {\n getController?.(formexController);\n }, [formexController, getController]);\n\n return <Formex value={formexController}>\n <PropertyEditFormFields\n onPropertyChanged={onPropertyChangedImmediate\n ? doOnPropertyChanged\n : undefined}\n onDelete={onDelete}\n includeIdAndTitle={includeIdAndName}\n propertyNamespace={propertyNamespace}\n onError={onError}\n onDismiss={onDismiss}\n showErrors={forceShowErrors || formexController.submitCount > 0}\n existing={existingProperty}\n autoUpdateId={autoUpdateId}\n inArray={inArray}\n autoOpenTypeSelect={autoOpenTypeSelect}\n disabled={disabled}\n getData={getData}\n allowDataInference={allowDataInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n {...formexController}/>\n </Formex>;\n }, (a, b) =>\n a.getData === b.getData &&\n a.propertyKey === b.propertyKey &&\n a.propertyNamespace === b.propertyNamespace &&\n a.includeIdAndName === b.includeIdAndName &&\n a.autoOpenTypeSelect === b.autoOpenTypeSelect &&\n a.autoUpdateId === b.autoUpdateId &&\n a.existingPropertyKeys === b.existingPropertyKeys &&\n a.existingProperty === b.existingProperty\n);\n\nexport function PropertyFormDialog({\n open,\n onCancel,\n onOkClicked,\n onPropertyChanged,\n getData,\n collectionEditable,\n ...formProps\n }: PropertyFormProps & {\n open?: boolean;\n onOkClicked?: () => void;\n onCancel?: () => void;\n}) {\n const formexRef = useRef<FormexController<PropertyWithId>>();\n const getController = (helpers: FormexController<PropertyWithId>) => {\n formexRef.current = helpers;\n };\n\n return <Dialog\n open={open ?? false}\n maxWidth={\"xl\"}\n fullWidth={true}\n >\n <form noValidate={true}\n autoComplete={\"off\"}\n onSubmit={(e) => {\n e.preventDefault();\n e.stopPropagation();\n formexRef.current?.handleSubmit(e)\n }}>\n <DialogTitle hidden>Property edit view</DialogTitle>\n <DialogContent>\n\n <PropertyForm {...formProps}\n onDismiss={onCancel}\n onPropertyChanged={(params) => {\n onPropertyChanged?.(params);\n onOkClicked?.();\n }}\n collectionEditable={collectionEditable}\n onPropertyChangedImmediate={false}\n getController={getController}\n getData={getData}\n />\n </DialogContent>\n\n <DialogActions>\n\n {onCancel && <Button\n variant={\"text\"}\n onClick={() => {\n onCancel();\n formexRef.current?.resetForm();\n }}>\n Cancel\n </Button>}\n\n <Button variant=\"outlined\"\n type={\"submit\"}\n color=\"primary\">\n Ok\n </Button>\n </DialogActions>\n </form>\n </Dialog>;\n\n}\n\nfunction PropertyEditFormFields({\n values,\n errors,\n setValues,\n existing,\n autoUpdateId = false,\n autoOpenTypeSelect,\n includeIdAndTitle,\n onPropertyChanged,\n onDelete,\n propertyNamespace,\n onDismiss,\n onError,\n showErrors,\n disabled,\n inArray,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n includeIdAndTitle?: boolean;\n existing: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n propertyNamespace?: string;\n onDismiss?: () => void;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n showErrors: boolean;\n inArray: boolean;\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n} & FormexController<PropertyWithId>) {\n\n const [selectOpen, setSelectOpen] = useState(autoOpenTypeSelect);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [selectedFieldConfigId, setSelectedFieldConfigId] = useState<string | undefined>(values?.dataType ? getFieldId(values) : undefined);\n\n const deferredValues = useDeferredValue(values);\n const nameFieldRef = useRef<HTMLInputElement>(null);\n\n const lastSubmittedProperty = useRef<object>(values);\n\n const selectedWidgetError = showErrors && getIn(errors, \"selectedWidget\");\n\n useEffect(() => {\n if (onPropertyChanged) {\n if ((!includeIdAndTitle || deferredValues.id)) {\n const {\n id,\n ...property\n } = deferredValues;\n if (!equal(deferredValues, lastSubmittedProperty.current)) {\n onPropertyChanged({\n id,\n property,\n namespace: propertyNamespace\n });\n lastSubmittedProperty.current = deferredValues;\n }\n }\n }\n }, [deferredValues, includeIdAndTitle, propertyNamespace]);\n\n useEffect(() => {\n if (values?.id && onError && !isEmptyObject(errors)) {\n onError(values?.id, propertyNamespace, errors);\n }\n }, [errors, propertyNamespace, values?.id]);\n\n const onWidgetSelectChanged = (newSelectedWidgetId: PropertyConfigId) => {\n setSelectedFieldConfigId(newSelectedWidgetId);\n setValues(updatePropertyFromWidget(values, newSelectedWidgetId, propertyConfigs));\n // Ugly hack to autofocus the name field\n setTimeout(() => {\n nameFieldRef.current?.focus();\n }, 0);\n };\n\n let childComponent;\n if (selectedFieldConfigId === \"text_field\" ||\n selectedFieldConfigId === \"multiline\" ||\n selectedFieldConfigId === \"email\") {\n childComponent =\n <StringPropertyField widgetId={selectedFieldConfigId}\n disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"url\") {\n childComponent =\n <UrlPropertyField disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"markdown\") {\n childComponent =\n <MarkdownPropertyField disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"select\" ||\n selectedFieldConfigId === \"number_select\") {\n childComponent = <EnumPropertyField\n multiselect={false}\n allowDataInference={allowDataInference}\n updateIds={!existing}\n disabled={disabled}\n getData={getData}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"multi_select\" ||\n selectedFieldConfigId === \"multi_number_select\") {\n childComponent = <EnumPropertyField\n multiselect={true}\n updateIds={!existing}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"switch\") {\n childComponent = <BooleanPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"number_input\") {\n childComponent = <NumberPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"group\") {\n childComponent =\n <MapPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"block\") {\n childComponent =\n <BlockPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"reference\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"date_time\") {\n childComponent = <DateTimePropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_references\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"repeat\") {\n childComponent =\n <RepeatPropertyField showErrors={showErrors}\n existing={existing}\n getData={getData}\n allowDataInference={allowDataInference}\n disabled={disabled}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"key_value\") {\n childComponent =\n <KeyValuePropertyField disabled={disabled}/>;\n } else {\n childComponent = null;\n }\n\n return (\n <>\n {disabled && <InfoLabel mode={\"warn\"}>\n <Typography>This property can&apos;t be edited</Typography>\n <Typography variant={\"caption\"}>\n You may not have permission to\n edit it or it is defined in code with no <code>editable</code> flag\n </Typography>\n </InfoLabel>}\n\n <div className=\"flex mt-2 justify-between\">\n <div className={\"w-full flex flex-col gap-2\"}>\n <WidgetSelectView\n initialProperty={values}\n value={selectedFieldConfigId as PropertyConfigId}\n onValueChange={(value) => onWidgetSelectChanged(value as PropertyConfigId)}\n open={selectOpen}\n onOpenChange={(open, hasValue) => {\n if (!hasValue) {\n onDismiss?.();\n }\n setSelectOpen(open);\n }}\n disabled={disabled}\n showError={Boolean(selectedWidgetError)}\n existing={existing}\n propertyConfigs={propertyConfigs}\n inArray={inArray}/>\n\n {selectedWidgetError &&\n <Typography variant=\"caption\"\n className={\"ml-3.5\"}\n color={\"error\"}>Required</Typography>}\n\n {/*<Typography variant=\"caption\" className={\"ml-3.5\"}>Define your own custom properties and*/}\n {/* components</Typography>*/}\n\n </div>\n\n {onDelete && values?.id &&\n <IconButton\n variant={\"ghost\"}\n className=\"m-4\"\n disabled={disabled}\n onClick={() => setDeleteDialogOpen(true)}>\n <DeleteIcon/>\n </IconButton>}\n </div>\n\n <div className={\"grid grid-cols-12 gap-y-12 mt-8 mb-8\"}>\n {includeIdAndTitle &&\n <CommonPropertyFields showErrors={showErrors}\n disabledId={existing}\n isNewProperty={!existing}\n disabled={disabled}\n autoUpdateId={autoUpdateId}\n ref={nameFieldRef}/>}\n\n {childComponent}\n\n <div className={\"col-span-12\"}>\n <AdvancedPropertyValidation disabled={disabled}/>\n </div>\n </div>\n\n {onDelete &&\n <ConfirmationDialog open={deleteDialogOpen}\n onAccept={() => onDelete(values?.id, propertyNamespace)}\n onCancel={() => setDeleteDialogOpen(false)}\n title={<div>Delete this property?</div>}\n body={\n <div> This will <b>not delete any\n data</b>, only modify the\n collection.</div>\n }/>}\n\n </>\n );\n}\n\nconst idRegEx = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\nfunction validateId(value?: string, existingPropertyKeys?: string[]) {\n\n let error;\n if (!value) {\n error = \"You must specify an id for the field\";\n }\n if (value && !value.match(idRegEx)) {\n error = \"The id can only contain letters, numbers and underscores (_), and not start with a number\";\n }\n if (value && existingPropertyKeys && existingPropertyKeys.includes(value)) {\n error = \"There is another field with this ID already\";\n }\n return error;\n}\n\nfunction validateName(value: string) {\n let error;\n if (!value) {\n error = \"You must specify a title for the field\";\n }\n return error;\n}\n\nconst WIDGET_TYPE_MAP: Record<PropertyConfigId, string> = {\n text_field: \"Text\",\n multiline: \"Text\",\n markdown: \"Text\",\n url: \"Text\",\n email: \"Text\",\n switch: \"Boolean\",\n select: \"Select\",\n multi_select: \"Select\",\n number_input: \"Number\",\n number_select: \"Select\",\n multi_number_select: \"Select\",\n file_upload: \"File\",\n multi_file_upload: \"File\",\n reference: \"Reference\",\n multi_references: \"Reference\",\n date_time: \"Date\",\n group: \"Group\",\n key_value: \"Group\",\n repeat: \"Array\",\n custom_array: \"Array\",\n block: \"Group\"\n};\n\nfunction WidgetSelectView({\n initialProperty,\n value,\n onValueChange,\n open,\n onOpenChange,\n disabled,\n showError,\n existing,\n propertyConfigs,\n inArray\n }: {\n initialProperty?: PropertyWithId,\n value?: PropertyConfigId,\n onValueChange: (value: string) => void,\n showError: boolean,\n open: boolean,\n onOpenChange: (open: boolean, hasValue: boolean) => void,\n disabled: boolean,\n existing: boolean,\n propertyConfigs: Record<string, PropertyConfig>,\n inArray?: boolean\n}) {\n\n const allSupportedFields = Object.entries(supportedFields).concat(Object.entries(propertyConfigs));\n\n const displayedWidgets = (inArray\n ? allSupportedFields.filter(([_, propertyConfig]) => !isPropertyBuilder(propertyConfig.property) && propertyConfig.property?.dataType !== \"array\")\n : allSupportedFields)\n .map(([key, propertyConfig]) => ({\n [key]: propertyConfig\n }))\n .reduce((a, b) => {\n return {\n ...a,\n ...b\n }\n }, {});\n\n const key = value;\n const propertyConfig = key ? (DEFAULT_FIELD_CONFIGS[key] ?? propertyConfigs[key]) : undefined;\n const baseProperty = propertyConfig?.property;\n const baseFieldConfig = baseProperty && !isPropertyBuilder(baseProperty) ? getFieldConfig(baseProperty, propertyConfigs) : undefined;\n const computedFieldConfig = baseFieldConfig && propertyConfig ? mergeDeep(baseFieldConfig, propertyConfig) : propertyConfig;\n\n const groups: string[] = [...new Set(Object.keys(displayedWidgets).map(key => {\n const group = WIDGET_TYPE_MAP[key as PropertyConfigId];\n if (group) {\n return group;\n }\n return \"Custom/Other\"\n }))];\n\n return <>\n <div\n onClick={() => {\n if (!disabled) {\n onOpenChange(!open, Boolean(value));\n }\n }}\n className={cls(\n \"select-none rounded-md text-sm p-4\",\n fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n \"relative flex items-center\",\n )}>\n {!value && <em>Select a property widget</em>}\n {value && computedFieldConfig && <div\n className={cls(\n \"flex items-center\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={computedFieldConfig}/>\n </div>\n <div className={\"flex flex-col items-start text-base text-left\"}>\n <div>{computedFieldConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n {computedFieldConfig.description}\n </Typography>\n </div>\n </div>}\n </div>\n <Dialog open={open}\n onOpenChange={(open) => onOpenChange(open, Boolean(value))}\n maxWidth={\"4xl\"}>\n <DialogTitle>\n Select a property widget\n </DialogTitle>\n <DialogContent>\n <div>\n {groups.map(group => {\n return <div key={group} className={\"mt-4\"}>\n <Typography variant={\"label\"}>{group}</Typography>\n <div className={\"grid grid-cols-1 md:grid-cols-2 gap-x-4 gap-y-2 mt-4\"}>\n {Object.entries(displayedWidgets).map(([key, propertyConfig]) => {\n const groupKey = WIDGET_TYPE_MAP[key as PropertyConfigId];\n if (groupKey === group) {\n return <WidgetSelectViewItem\n key={key}\n initialProperty={initialProperty}\n onClick={() => {\n onValueChange(key);\n onOpenChange(false, true);\n }}\n propertyConfig={propertyConfig}\n existing={existing}/>;\n }\n return null;\n })}\n </div>\n </div>;\n })}\n {/*{displayedWidgets.map(([key, propertyConfig]) => {*/}\n {/* return <WidgetSelectViewItem*/}\n {/* key={key}*/}\n {/* initialProperty={initialProperty}*/}\n {/* onClick={() => {*/}\n {/* onValueChange(key);*/}\n {/* onOpenChange(false);*/}\n {/* }}*/}\n {/* propertyConfig={propertyConfig}*/}\n {/* existing={existing}/>;*/}\n {/*})}*/}\n </div>\n </DialogContent>\n </Dialog>\n </>;\n}\n\nexport interface PropertySelectItemProps {\n onClick?: () => void;\n initialProperty?: PropertyWithId;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function WidgetSelectViewItem({\n onClick,\n initialProperty,\n // optionDisabled,\n propertyConfig,\n existing\n }: PropertySelectItemProps) {\n const baseProperty = propertyConfig.property;\n const shouldWarnChangingDataType = existing && !isPropertyBuilder(baseProperty) && baseProperty.dataType !== initialProperty?.dataType;\n\n return <Card\n onClick={onClick}\n className={\"flex flex-row items-center px-4 py-2\"}>\n <div\n className={cls(\n \"flex flex-row items-center text-base min-h-[48px]\",\n )}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig} disabled={shouldWarnChangingDataType}/>\n </div>\n <div>\n <div className={\"flex flex-row gap-2 items-center\"}>\n {shouldWarnChangingDataType && <Tooltip\n title={\"This widget uses a different data type than the initially selected widget. This can cause errors with existing data.\"}>\n <WarningIcon size=\"smallest\" className={\"w-4\"}/>\n </Tooltip>}\n <Typography\n color={shouldWarnChangingDataType ? \"secondary\" : undefined}>{propertyConfig.name}</Typography>\n </div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"max-w-sm\"}>\n {propertyConfig.description}\n </Typography>\n\n </div>\n </div>\n </Card>\n}\n","export function camelCase(str: string): string {\n if (!str) return \"\";\n return (str.slice(0, 1).toLowerCase() + str.slice(1))\n .replace(/([-_ ]){1,}/g, \" \")\n .split(/[-_ ]/)\n .reduce((cur, acc) => {\n return cur + acc[0].toUpperCase() + acc.substring(1);\n }, \"\");\n}\n","import { EntityCollection, isEmptyObject, useSnackbarController } from \"@firecms/core\";\nimport { Button, ContentCopyIcon, Dialog, DialogActions, DialogContent, DialogTitle, Typography, } from \"@firecms/ui\";\nimport React from \"react\";\nimport JSON5 from \"json5\";\nimport { Highlight, themes } from \"prism-react-renderer\"\nimport { camelCase } from \"./utils/strings\";\nimport { clone } from \"@firecms/formex\";\n\nexport function GetCodeDialog({\n collection,\n onOpenChange,\n open\n }: { onOpenChange: (open: boolean) => void, collection: any, open: any }) {\n\n const snackbarController = useSnackbarController();\n\n const code = collection\n ? \"import { EntityCollection } from \\\"@firecms/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://firecms.co/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 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 <ContentCopyIcon size={\"small\"}/>\n Copy 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: any): any => {\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: any) => propertyCleanup(v));\n }\n if (typeof valueCopy === \"object\") {\n if (valueCopy === null)\n return valueCopy;\n Object.keys(valueCopy).forEach((key) => {\n if (!isEmptyObject(valueCopy)) {\n const childRes = propertyCleanup(valueCopy[key]);\n if (childRes !== null && childRes !== undefined && childRes !== false && !isEmptyObject(childRes)) {\n valueCopy[key] = childRes;\n } else {\n delete valueCopy[key];\n }\n }\n });\n delete valueCopy.fromBuilder;\n delete valueCopy.resolved;\n delete valueCopy.propertiesOrder;\n delete valueCopy.propertyConfig;\n delete valueCopy.resolvedProperties;\n delete valueCopy.editable;\n\n }\n\n return valueCopy;\n }\n\n return {\n id: collection.id,\n name: collection.name,\n singularName: collection.singularName,\n path: collection.path,\n description: collection.description,\n editable: true,\n collectionGroup: collection.collectionGroup,\n icon: collection.icon,\n group: collection.group,\n customId: collection.customId,\n initialFilter: collection.initialFilter,\n initialSort: collection.initialSort,\n properties: Object.entries({\n ...(collection.properties ?? {})\n })\n .map(([key, value]) => ({\n [key]: propertyCleanup(value)\n }))\n .reduce((a, b) => ({ ...a, ...b }), {}),\n subcollections: (collection.subcollections ?? []).map(collectionToCode)\n }\n\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport {\n EntityCollection,\n ErrorBoundary,\n isPropertyBuilder,\n makePropertiesEditable,\n Properties,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n useLargeLayout,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n AutorenewIcon,\n Button,\n CircularProgress,\n cls,\n CodeIcon,\n DebouncedTextField,\n defaultBorderMixin,\n IconButton,\n Paper,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\n\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"./util\";\nimport { OnPropertyChangedParams, PropertyForm, PropertyFormDialog } from \"./PropertyEditView\";\nimport { PropertyTree } from \"./PropertyTree\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { GetCodeDialog } from \"./GetCodeDialog\";\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 reservedGroups?: string[];\n extraIcon: React.ReactNode;\n getUser?: (uid: string) => User | null;\n getData?: () => Promise<object[]>;\n doCollectionInference: (collection: PersistedCollection) => Promise<Partial<EntityCollection> | null> | undefined;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport function CollectionPropertiesEditorForm({\n showErrors,\n isNewCollection,\n propertyErrorsRef,\n onPropertyError,\n setDirty,\n reservedGroups,\n extraIcon,\n getUser,\n getData,\n doCollectionInference,\n propertyConfigs,\n collectionEditable\n }: CollectionEditorFormProps) {\n\n const {\n values,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n errors,\n dirty\n } = useFormex<PersistedCollection>();\n\n const snackbarController = useSnackbarController();\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)\n return;\n\n setInferringProperties(true);\n // @ts-ignore\n doCollectionInference(values)\n .then((newCollection) => {\n\n if (newCollection)\n makePropertiesEditable(newCollection.properties as Properties);\n\n if (!newCollection) {\n snackbarController.open({\n type: \"error\",\n message: \"Could not infer properties from data\"\n });\n return;\n }\n // find properties in the new collection, not present in the current one\n const newPropertyKeys = (newCollection.properties ? Object.keys(newCollection.properties) : [])\n .filter((propertyKey) => !values.properties[propertyKey]);\n if (newPropertyKeys.length === 0) {\n snackbarController.open({\n type: \"info\",\n message: \"No new properties found in existing data\"\n });\n return;\n }\n // add them to the current collection\n const updatedProperties = {\n ...newPropertyKeys.reduce((acc, propertyKey) => {\n acc[propertyKey] = (newCollection.properties ?? {})[propertyKey];\n return acc;\n }, {} as {\n [key: string]: PropertyOrBuilder\n }),\n ...values.properties\n };\n const updatedPropertiesOrder = [\n ...newPropertyKeys,\n ...(values.propertiesOrder ?? [])\n ];\n setFieldValue(\"properties\", updatedProperties, false);\n\n updatePropertiesOrder(updatedPropertiesOrder);\n\n setInferredPropertyKeys(newPropertyKeys);\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 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 setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n const onPropertyCreated = ({\n id,\n property\n }: {\n id?: string,\n property: Property\n }) => {\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 console.log(\"!!!!!! onPropertyChanged\", property)\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 console.debug(\"onPropertyChanged\", {\n id,\n property,\n previousId,\n namespace,\n propertyPath\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\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 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-surface-50 dark:bg-surface-900\"}>\n <div className={cls(\n \"p-4 md:p-8 pb-20 md:pb-20\",\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=\"flex-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-1 mt-2 flex flex-row gap-2\">\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\"}/> : <AutorenewIcon/>}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}\n asChild={true}>\n <Button\n variant={\"outlined\"}\n onClick={() => setNewPropertyDialogOpen(true)}>\n <AddIcon/>\n </Button>\n </Tooltip>\n </div>\n </div>\n\n <ErrorBoundary>\n <PropertyTree\n className={\"pl-8\"}\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 ? deleteProperty : undefined}\n collectionEditable={collectionEditable}\n errors={errors}/>\n </ErrorBoundary>\n\n <Button className={\"mt-8 w-full\"}\n color=\"primary\"\n variant={\"outlined\"}\n size={\"large\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}>\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 pb-20 md:pb-20\"}>\n <Paper\n className=\"sticky top-8 p-4 min-h-full border border-transparent 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}`}\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 collectionEditable={collectionEditable}\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 variant={\"outlined\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n >\n <AddIcon/>\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 </Paper>\n </div>}\n\n {asDialog && <PropertyFormDialog\n inArray={false}\n open={selectedPropertyIndex !== undefined}\n key={`edit_view_${selectedPropertyIndex}`}\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 collectionEditable={collectionEditable}\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 collectionEditable={collectionEditable}\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","import React from \"react\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\n\nexport interface UnsavedChangesDialogProps {\n open: boolean;\n body?: React.ReactNode;\n title?: string;\n handleOk: () => void;\n handleCancel: () => void;\n}\n\nexport function UnsavedChangesDialog({\n open,\n handleOk,\n handleCancel,\n body,\n title\n }: UnsavedChangesDialogProps) {\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => open ? handleCancel() : handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n\n <DialogTitle>{title ?? \"Unsaved changes\"}</DialogTitle>\n <DialogContent>\n {body && <Typography>\n {body}\n </Typography>}\n <Typography>\n Are you sure?\n </Typography>\n\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"text\" onClick={handleCancel} autoFocus> Cancel </Button>\n <Button onClick={handleOk}> Ok </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { useCustomizationController } from \"@firecms/core\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\nimport React from \"react\";\n\nexport function EntityCustomViewsSelectDialog({\n open,\n onClose\n }: { open: boolean, onClose: (selectedViewKey?: string) => void }) {\n const {\n entityViews,\n } = useCustomizationController();\n\n return <Dialog\n maxWidth={\"md\"}\n open={open}>\n <DialogTitle>Select custom view</DialogTitle>\n <DialogContent className={\"flex flex-col gap-4\"}>\n {entityViews?.map((view) => {\n return <Button\n key={view.key}\n onClick={() => onClose(view.key)}\n fullWidth\n variant={\"text\"}\n >\n {view.name} ({view.key})\n </Button>;\n })}\n {(entityViews ?? []).length === 0 &&\n <Typography variant={\"body2\"}>\n No custom views defined\n </Typography>\n }\n </DialogContent>\n <DialogActions>\n <Button variant={\"outlined\"} onClick={() => onClose()}>Cancel</Button>\n </DialogActions>\n </Dialog>\n}\n","import React from \"react\";\nimport {\n ConfirmationDialog,\n EntityCollection,\n EntityCustomView,\n resolveEntityView,\n useCustomizationController,\n User\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Alert,\n Button,\n Container,\n DeleteIcon,\n IconButton,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { CollectionEditorDialog } from \"./CollectionEditorDialog\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { EntityCustomViewsSelectDialog } from \"./EntityCustomViewsSelectDialog\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function SubcollectionsEditTab({\n collection,\n parentCollection,\n configController,\n collectionInference,\n getUser,\n parentCollectionIds\n }: {\n collection: PersistedCollection,\n parentCollection?: EntityCollection,\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n getUser?: (uid: string) => User | null;\n parentCollectionIds?: string[];\n}) {\n\n const { entityViews: contextEntityViews } = useCustomizationController();\n\n const [subcollectionToDelete, setSubcollectionToDelete] = React.useState<string | undefined>();\n const [addEntityViewDialogOpen, setAddEntityViewDialogOpen] = React.useState<boolean>(false);\n const [viewToDelete, setViewToDelete] = React.useState<string | undefined>();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n editedCollectionId?: string,\n }>();\n\n const {\n values,\n setFieldValue,\n } = useFormex<EntityCollection>();\n\n const [subcollections, setSubcollections] = React.useState<EntityCollection[]>(collection.subcollections ?? []);\n const resolvedEntityViews = values.entityViews?.filter(e => typeof e === \"string\")\n .map(e => resolveEntityView(e, contextEntityViews))\n .filter(Boolean) as EntityCustomView[] ?? [];\n const hardCodedEntityViews = collection.entityViews?.filter(e => typeof e !== \"string\") as EntityCustomView[] ?? [];\n const totalEntityViews = resolvedEntityViews.length + hardCodedEntityViews.length;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"2xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n <div className={\"flex flex-col gap-16\"}>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h5\"}>\n Subcollections of {values.name}\n </Typography>\n\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n {subcollections && subcollections.length > 0 && <Table>\n <TableBody>\n {subcollections.map((subcollection) => (\n <TableRow key={subcollection.path}\n onClick={() => setCurrentDialog({\n isNewCollection: false,\n editedCollectionId: subcollection.id\n })}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {subcollection.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSubcollectionToDelete(subcollection.id);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>}\n\n <Button\n onClick={() => {\n setCurrentDialog({\n isNewCollection: true\n });\n }}\n variant={\"text\"}\n startIcon={<AddIcon/>}>\n Add subcollection\n </Button>\n\n </Paper>\n\n </div>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h5\"}>\n Custom views\n </Typography>\n\n {totalEntityViews === 0 &&\n <Alert action={<Button variant=\"text\"\n size={\"small\"}\n href={\"https://firecms.co/docs/cloud/quickstart\"}\n component={\"a\"}\n rel=\"noopener noreferrer\"\n target=\"_blank\">More info</Button>}>\n Define your own custom views by uploading them with the CLI.\n </Alert>\n }\n\n {<>\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n <Table>\n <TableBody>\n {resolvedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setViewToDelete(view.key);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n {hardCodedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n <Typography variant={\"caption\"} className={\"flex-grow\"}>\n This view is defined in code with\n key <code>{view.key}</code>\n </Typography>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n <Button\n onClick={() => {\n setAddEntityViewDialogOpen(true);\n }}\n variant={\"text\"}\n startIcon={<AddIcon/>}>\n Add custom entity view\n </Button>\n </Paper>\n\n </>}\n\n\n </div>\n\n </div>\n </Container>\n\n <div style={{ height: \"52px\" }}/>\n\n {subcollectionToDelete &&\n <ConfirmationDialog open={Boolean(subcollectionToDelete)}\n onAccept={() => {\n const props = {\n id: subcollectionToDelete,\n parentCollectionIds: [...(parentCollectionIds ?? []), collection.id]\n };\n console.debug(\"Deleting subcollection\", props)\n configController.deleteCollection(props).then(() => {\n setSubcollectionToDelete(undefined);\n setSubcollections(subcollections?.filter(e => e.id !== subcollectionToDelete))\n });\n }}\n onCancel={() => setSubcollectionToDelete(undefined)}\n title={<>Delete this subcollection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>}/>}\n {viewToDelete &&\n <ConfirmationDialog open={Boolean(viewToDelete)}\n onAccept={() => {\n setFieldValue(\"entityViews\", values.entityViews?.filter(e => e !== viewToDelete));\n setViewToDelete(undefined);\n }}\n onCancel={() => setViewToDelete(undefined)}\n title={<>Remove this view?</>}\n body={<>This will <b>not\n delete any data</b>, only\n the view in the CMS</>}/>}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={configController}\n parentCollection={collection}\n collectionInference={collectionInference}\n parentCollectionIds={[...parentCollectionIds ?? [], values.id]}\n isNewCollection={false}\n {...currentDialog}\n getUser={getUser}\n handleClose={(updatedCollection) => {\n if (updatedCollection && !subcollections.map(e => e.id).includes(updatedCollection.id)) {\n setSubcollections([...subcollections, updatedCollection]);\n }\n setCurrentDialog(undefined);\n }}/>\n\n <EntityCustomViewsSelectDialog\n open={addEntityViewDialogOpen}\n onClose={(selectedViewKey) => {\n if (selectedViewKey) {\n setFieldValue(\"entityViews\", [...(values.entityViews ?? []), selectedViewKey]);\n }\n setAddEntityViewDialogOpen(false);\n }}/>\n </div>\n );\n}\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const productsCollectionTemplate: EntityCollection = {\n id: \"products\",\n path: \"products\",\n name: \"Products\",\n singularName: \"Product\",\n icon: \"shopping_cart\",\n description: \"List of the products currently sold in your shop\",\n properties: makePropertiesEditable({\n name: {\n dataType: \"string\",\n name: \"Name\",\n description: \"Name of this product\",\n validation: {\n required: true\n }\n },\n brand: {\n dataType: \"string\",\n name: \"Brand\",\n validation: {\n required: true\n }\n },\n description: {\n dataType: \"string\",\n name: \"Description\",\n description: \"Description of this product, supports markdown\",\n markdown: true\n },\n main_image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n },\n description: \"Upload field for images\"\n },\n available: {\n dataType: \"boolean\",\n name: \"Available\",\n columnWidth: 100,\n description: \"Is this product available in the website\"\n },\n price: {\n dataType: \"number\",\n name: \"Price\",\n validation: {\n requiredMessage: \"You must set a positive price\",\n min: 0\n }\n },\n images: {\n dataType: \"array\",\n name: \"Images\",\n hideFromCollection: true,\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n },\n related_products: {\n dataType: \"array\",\n name: \"Related products\",\n description: \"Products related to this one\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n metadata: {\n name: \"Metadata\",\n description: \"This is an example of a map property\",\n dataType: \"map\",\n keyValue: true\n },\n added_on: {\n dataType: \"date\",\n name: \"Added on\",\n autoValue: \"on_create\"\n }\n })\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const blogCollectionTemplate:EntityCollection = {\n id: \"blog\",\n path: \"blog\",\n name: \"Blog\",\n singularName: \"Blog entry\",\n icon: \"article\",\n description: \"A collection of blog entries\",\n defaultSize: \"l\",\n properties: makePropertiesEditable({\n name: {\n name: \"Name\",\n validation: { required: true },\n dataType: \"string\"\n },\n header_image: {\n name: \"Header image\",\n dataType: \"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 dataType: \"array\",\n oneOf: {\n typeField: \"type\",\n valueField: \"value\",\n properties: {\n text: {\n dataType: \"string\",\n name: \"Text\",\n markdown: true\n },\n quote: {\n dataType: \"string\",\n name: \"Quote\",\n multiline: true\n },\n images: {\n name: \"Images\",\n dataType: \"array\",\n of: {\n dataType: \"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 dataType: \"array\",\n of: {\n dataType: \"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 dataType: \"date\",\n autoValue: \"on_create\"\n },\n status: {\n name: \"Status\",\n validation: { required: true },\n dataType: \"string\",\n enumValues: {\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 dataType: \"date\",\n clearable: true\n },\n reviewed: {\n name: \"Reviewed\",\n dataType: \"boolean\"\n },\n tags: {\n name: \"Tags\",\n description: \"Example of generic array\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n previewAsTag: true\n }\n }\n }),\n initialFilter: {\n status: [\"==\", \"published\"]\n }\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const usersCollectionTemplate: EntityCollection = {\n id: \"users\",\n path: \"users\",\n name: \"Users\",\n singularName: \"User\",\n description: \"Registered users in the app/web\",\n icon: \"person\",\n properties: makePropertiesEditable({\n displayName: {\n name: \"Display name\",\n dataType: \"string\"\n },\n email: {\n name: \"Email\",\n dataType: \"string\",\n email: true\n },\n emailVerified: {\n name: \"Email verified\",\n dataType: \"boolean\"\n },\n phone: {\n name: \"Phone\",\n dataType: \"string\"\n },\n favourite_products: {\n name: \"Favourite products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n photoURL: {\n name: \"Photo URL\",\n dataType: \"string\",\n url: \"image\"\n }\n }),\n};\n","import { EntityCollection } from \"@firecms/core\";\n\nexport const pagesCollectionTemplate: EntityCollection = {\n id: \"pages\",\n path: \"pages\",\n name: \"Pages\",\n singularName: \"Page\",\n icon: \"insert_drive_file\",\n description: \"List of website pages that can be edited here\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Page Title\",\n validation: { required: true }\n },\n slug: {\n dataType: \"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 dataType: \"map\",\n name: \"Hero Section\",\n properties: {\n headline: {\n dataType: \"string\",\n name: \"Headline\",\n validation: { required: true }\n },\n subhead: {\n dataType: \"string\",\n name: \"Subheadline\"\n },\n background_image: {\n dataType: \"string\",\n name: \"Background Image\",\n storage: {\n storagePath: \"page_hero/images\",\n acceptedFiles: [\"image/*\"],\n }\n },\n call_to_action: {\n dataType: \"string\",\n name: \"Call to Action\"\n },\n call_to_action_link: {\n dataType: \"string\",\n name: \"CTA Link\",\n url: true\n }\n }\n },\n content: {\n dataType: \"array\",\n name: \"Content\",\n oneOf: {\n properties: {\n section: {\n dataType: \"map\",\n name: \"Section\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Section Title\",\n validation: { required: true }\n },\n content: {\n dataType: \"string\",\n name: \"Section Content\",\n markdown: true\n },\n image: {\n dataType: \"string\",\n name: \"Section Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n link: {\n dataType: \"string\",\n name: \"Section Link\",\n url: true\n }\n }\n },\n image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n slider: {\n dataType: \"array\",\n name: \"Slider\",\n of: {\n dataType: \"map\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Title\",\n validation: { required: true }\n },\n image: {\n dataType: \"string\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n }\n }\n },\n }\n }\n },\n sidebar: {\n dataType: \"map\",\n name: \"Sidebar\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Sidebar Title\",\n validation: { required: false }\n },\n content: {\n dataType: \"string\",\n name: \"Sidebar Content\",\n markdown: true\n }\n }\n },\n seo_metadata: {\n dataType: \"map\",\n name: \"SEO Metadata\",\n properties: {\n meta_title: {\n dataType: \"string\",\n name: \"Meta Title\"\n },\n meta_description: {\n dataType: \"string\",\n name: \"Meta Description\"\n },\n focus_keywords: {\n dataType: \"array\",\n name: \"Focus Keywords\",\n of: {\n dataType: \"string\"\n }\n }\n }\n },\n footer_override: {\n dataType: \"string\",\n name: \"Footer Override\",\n markdown: true\n },\n publish_date: {\n dataType: \"date\",\n name: \"Publish Date\",\n validation: { required: true }\n },\n last_updated: {\n dataType: \"date\",\n name: \"Last Updated\",\n autoValue: \"on_update\"\n },\n is_published: {\n dataType: \"boolean\",\n name: \"Is Published\",\n columnWidth: 100,\n description: \"Should this page be live on the site?\"\n }\n }\n};\n","import React, { useEffect, useState } from \"react\";\nimport { EntityCollection, unslugify, } from \"@firecms/core\";\nimport { Button, Card, Chip, CircularProgress, cls, Container, Icon, Tooltip, Typography, } from \"@firecms/ui\";\n\nimport { productsCollectionTemplate } from \"./templates/products_template\";\nimport { blogCollectionTemplate } from \"./templates/blog_template\";\nimport { usersCollectionTemplate } from \"./templates/users_template\";\nimport { ImportFileUpload } from \"@firecms/data_import_export\";\nimport { pagesCollectionTemplate } from \"./templates/pages_template\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function CollectionEditorWelcomeView({\n path,\n pathSuggestions,\n parentCollection,\n onContinue,\n existingCollectionPaths\n }: {\n path: string;\n pathSuggestions?: (path: string) => Promise<string[]>;\n parentCollection?: EntityCollection;\n onContinue: (importData?: object[], propertiesOrder?: string[]) => void;\n existingCollectionPaths?: string[];\n}) {\n\n const [loadingPathSuggestions, setLoadingPathSuggestions] = useState(false);\n const [filteredPathSuggestions, setFilteredPathSuggestions] = useState<string[] | undefined>();\n useEffect(() => {\n if (pathSuggestions && existingCollectionPaths) {\n setLoadingPathSuggestions(true);\n pathSuggestions(path)\n .then(suggestions => {\n const filteredSuggestions = suggestions.filter(s => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === s.trim().toLowerCase()));\n setFilteredPathSuggestions(filteredSuggestions);\n })\n .finally(() => setLoadingPathSuggestions(false));\n }\n }, [existingCollectionPaths, path, pathSuggestions]);\n\n // const {\n // values,\n // setFieldValue,\n // setValues,\n // handleChange,\n // touched,\n // errors,\n // setFieldTouched,\n // isSubmitting,\n // submitCount\n // } = useFormex<EntityCollection>();\n\n const {\n values,\n setFieldValue,\n setValues,\n submitCount\n } = useFormex<EntityCollection>();\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={\"flex-grow\"}>\n New collection\n </Typography>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n <div className={\"my-2\"}>\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 {loadingPathSuggestions && !filteredPathSuggestions && <CircularProgress size={\"small\"}/>}\n\n {filteredPathSuggestions?.map((suggestion, index) => (\n <Chip key={suggestion}\n colorScheme={\"cyanLighter\"}\n onClick={() => {\n setFieldValue(\"name\", unslugify(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 {!loadingPathSuggestions && (filteredPathSuggestions ?? [])?.length === 0 &&\n <Typography variant={\"caption\"}>\n No suggestions\n </Typography>\n }\n\n </div>\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-4\"}>\n <TemplateButton title={\"Products\"}\n subtitle={\"A collection of products with images, prices and stock\"}\n icon={<Icon size={\"small\"} iconKey={productsCollectionTemplate.icon!}/>}\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={<Icon size={\"small\"} iconKey={usersCollectionTemplate.icon!}/>}\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={<Icon size={\"small\"} iconKey={blogCollectionTemplate.icon!}/>}\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={<Icon size={\"small\"} iconKey={pagesCollectionTemplate.icon!}/>}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\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>\n\n <Button variant={\"text\"} onClick={() => onContinue()} className={\"my-2\"}>\n Continue from scratch\n </Button>\n </div>\n\n {/*<div style={{ height: \"52px\" }}/>*/}\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,\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 mx-0 p-6 px-4 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-surface-700 dark:text-surface-accent-300\",\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={\"subtitle1\"}>\n {title}\n </Typography>\n {/*<Typography>*/}\n {/* {subtitle}*/}\n {/*</Typography>*/}\n\n </div>\n </Card>\n </Tooltip>\n );\n\n}\n","import {\n DataNewPropertiesMapping,\n getInferenceType,\n ImportConfig,\n ImportNewPropertyFieldPreview\n} from \"@firecms/data_import_export\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { getFieldConfig, getFieldId, Properties, Property, PropertyConfig, PropertyConfigBadge, } from \"@firecms/core\";\nimport { cls, Container, Select, SelectItem, Tooltip, Typography } from \"@firecms/ui\";\nimport React, { useState } from \"react\";\nimport { OnPropertyChangedParams, PropertyFormDialog, PropertyWithId } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { PersistedCollection } from \"../../../types/persisted_collection\";\nimport { updatePropertyFromWidget } from \"../utils/update_property_for_widget\";\nimport { supportedFields } from \"../utils/supported_fields\";\nimport { buildPropertyFromData } from \"@firecms/schema_inference\";\n\nexport function CollectionEditorImportMapping({\n importConfig,\n propertyConfigs,\n collectionEditable\n }:\n {\n importConfig: ImportConfig,\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean\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<PersistedCollection>();\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 editable: true\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 editable: true\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 collectionEditable={collectionEditable}\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.dataType}` : undefined}\n open={selectOpen ? false : undefined}>\n <Select\n open={selectOpen}\n onOpenChange={setSelectOpen}\n invisible={true}\n size={\"large\"}\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 <PropertySelectItem\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 PropertySelectItemProps {\n value: string;\n optionDisabled: boolean;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function PropertySelectItem({ value, optionDisabled, propertyConfig, existing }: PropertySelectItemProps) {\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 { convertDataToEntity, ImportConfig } from \"@firecms/data_import_export\";\nimport { CircularProgressCenter, EntityCollectionTable, Properties, useSelectionController } from \"@firecms/core\";\nimport { useEffect, useState } from \"react\";\nimport { Typography } from \"@firecms/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 [loading, setLoading] = useState<boolean>(false);\n\n async function loadEntities() {\n // const propertiesMapping = getPropertiesMapping(importConfig.originProperties, properties, importConfig.headersMapping);\n const mappedData = importConfig.importData.map(d => convertDataToEntity(d, importConfig.idColumn, importConfig.headersMapping, properties, \"TEMP_PATH\", 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, slugify } from \"@firecms/core\";\nimport { ImportConfig } from \"@firecms/data_import_export\";\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.dataType === \"map\" && property.properties) {\n const slugifiedResult = cleanPropertiesFromImport(property.properties as Properties, fullSlug);\n return {\n headersMapping: { ...acc.headersMapping, [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, [key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties,\n }\n }, { headersMapping: {}, properties: {} });\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","import * as React from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n CircularProgressCenter,\n ConfirmationDialog,\n Entity,\n EntityCollection,\n ErrorView,\n isPropertyBuilder,\n MapProperty,\n mergeDeep,\n Properties,\n PropertiesOrBuilders,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n randomString,\n removeInitialAndTrailingSlashes,\n removeUndefined,\n TopNavigationResult,\n useAuthController,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n ArrowBackIcon,\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 \"@firecms/ui\";\nimport { YupSchema } from \"./CollectionYupValidation\";\nimport { CollectionDetailsForm } from \"./CollectionDetailsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { UnsavedChangesDialog } from \"./UnsavedChangesDialog\";\nimport { SubcollectionsEditTab } from \"./SubcollectionsEditTab\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionEditorWelcomeView } from \"./CollectionEditorWelcomeView\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { getInferenceType, ImportSaveInProgress, useImportConfig } from \"@firecms/data_import_export\";\nimport { buildEntityPropertiesFromData } from \"@firecms/schema_inference\";\nimport { CollectionEditorImportMapping } from \"./import/CollectionEditorImportMapping\";\nimport { CollectionEditorImportDataPreview } from \"./import/CollectionEditorImportDataPreview\";\nimport { cleanPropertiesFromImport } from \"./import/clean_import_data\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { Formex, FormexController, useCreateFormex } from \"@firecms/formex\";\nimport { getFullIdPath } from \"./util\";\n\nexport interface CollectionEditorDialogProps {\n open: boolean;\n isNewCollection: boolean;\n initialValues?: {\n group?: string,\n path?: string,\n name?: string,\n }\n editedCollectionId?: string;\n fullPath?: string; // full path of this particular collection, like `products/123/locales`\n parentCollectionIds?: string[]; // path ids of the parent collection, like [`products`]\n handleClose: (collection?: EntityCollection) => void;\n configController: CollectionsConfigController;\n reservedGroups?: string[];\n collectionInference?: CollectionInference;\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n pathSuggestions?: (path?: string) => Promise<string[]>;\n getUser?: (uid: string) => User | null;\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n parentCollection?: PersistedCollection;\n existingEntities?: Entity<any>[];\n}\n\nexport function CollectionEditorDialog(props: CollectionEditorDialogProps) {\n\n const open = props.open;\n\n const [formDirty, setFormDirty] = React.useState<boolean>(false);\n const [unsavedChangesDialogOpen, setUnsavedChangesDialogOpen] = React.useState<boolean>(false);\n\n const handleCancel = () => {\n if (!formDirty) {\n props.handleClose(undefined);\n } else {\n setUnsavedChangesDialogOpen(true);\n }\n };\n\n useEffect(() => {\n if (!open) {\n setFormDirty(false);\n setUnsavedChangesDialogOpen(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 {open && <CollectionEditor {...props}\n handleCancel={handleCancel}\n setFormDirty={setFormDirty}/>}\n\n <UnsavedChangesDialog\n open={unsavedChangesDialogOpen}\n handleOk={() => props.handleClose(undefined)}\n handleCancel={() => setUnsavedChangesDialogOpen(false)}\n body={\"There are unsaved changes in this collection\"}/>\n\n </Dialog>\n );\n}\n\ntype EditorView = \"welcome\"\n | \"details\"\n | \"import_data_mapping\"\n | \"import_data_preview\"\n | \"import_data_saving\"\n | \"properties\"\n | \"loading\"\n | \"extra_view\"\n | \"subcollections\";\n\nexport function CollectionEditor(props: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void\n}) {\n const { propertyConfigs } = useCustomizationController();\n const navigation = useNavigationController();\n const authController = useAuthController();\n\n const {\n topLevelNavigation,\n collections\n } = navigation;\n\n const initialValuesProp = props.initialValues;\n const includeTemplates = !initialValuesProp?.path && (props.parentCollectionIds ?? []).length === 0;\n const collectionsInThisLevel = (props.parentCollection ? props.parentCollection.subcollections : collections) ?? [];\n const existingPaths = collectionsInThisLevel.map(col => col.path.trim().toLowerCase());\n const existingIds = collectionsInThisLevel.map(col => col.id?.trim().toLowerCase()).filter(Boolean) as string[];\n const [collection, setCollection] = React.useState<PersistedCollection<any> | undefined>();\n const [initialLoadingCompleted, setInitialLoadingCompleted] = React.useState(false);\n\n useEffect(() => {\n try {\n if (navigation.initialised) {\n if (props.editedCollectionId) {\n setCollection(navigation.getCollectionFromPaths([...(props.parentCollectionIds ?? []), props.editedCollectionId]));\n } else {\n setCollection(undefined);\n }\n setInitialLoadingCompleted(true);\n }\n } catch (e) {\n console.error(e);\n }\n }, [props.editedCollectionId, props.parentCollectionIds, navigation.initialised, navigation.getCollectionFromPaths]);\n\n if (!topLevelNavigation) {\n throw Error(\"Internal: Navigation not ready in collection editor\");\n }\n\n const {\n groups\n }: TopNavigationResult = topLevelNavigation;\n\n const initialCollection = collection\n ? {\n ...collection,\n id: collection.id ?? collection.path ?? randomString(16)\n }\n : undefined;\n\n const initialValues: PersistedCollection<any> = initialCollection\n ? applyPropertyConfigs(initialCollection, propertyConfigs)\n : {\n id: initialValuesProp?.path ?? randomString(16),\n path: initialValuesProp?.path ?? \"\",\n name: initialValuesProp?.name ?? \"\",\n group: initialValuesProp?.group ?? \"\",\n properties: {} as PropertiesOrBuilders,\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 && (!navigation.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 groups={groups}\n propertyConfigs={propertyConfigs}/>\n\n}\n\nfunction CollectionEditorInternal<M extends Record<string, any>>({\n isNewCollection,\n configController,\n editedCollectionId,\n parentCollectionIds,\n fullPath,\n collectionInference,\n handleClose,\n reservedGroups,\n extraView,\n handleCancel,\n setFormDirty,\n pathSuggestions,\n getUser,\n parentCollection,\n getData,\n existingPaths,\n existingIds,\n includeTemplates,\n collection,\n setCollection,\n initialValues,\n propertyConfigs,\n groups,\n existingEntities\n }: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void,\n initialValues: PersistedCollection<M>,\n existingPaths: string[],\n existingIds: string[],\n includeTemplates: boolean,\n collection: PersistedCollection<M> | undefined,\n setCollection: (collection: PersistedCollection<M>) => void,\n propertyConfigs: Record<string, PropertyConfig<any>>,\n groups: string[],\n }\n) {\n\n const importConfig = useImportConfig();\n const navigation = useNavigationController();\n const snackbarController = useSnackbarController();\n\n // Use this ref to store which properties have errors\n const propertyErrorsRef = useRef({});\n\n const initialView = isNewCollection ? (includeTemplates ? \"welcome\" : \"details\") : \"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: PersistedCollection<M>): Promise<boolean> => {\n const id = updatedCollection.id || updatedCollection.path;\n\n return configController.saveCollection({\n id,\n collectionData: updatedCollection,\n previousId: editedCollectionId,\n parentCollectionIds\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 === \"details\") {\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(\"details\");\n } else if (currentView === \"import_data_mapping\") {\n setCurrentView(\"import_data_preview\");\n } else if (currentView === \"import_data_preview\") {\n setCurrentView(\"details\");\n } else if (currentView === \"extra_view\") {\n setCurrentView(\"properties\");\n } else {\n setCurrentView(\"details\");\n }\n\n };\n\n const doCollectionInference = (collection: PersistedCollection<any>) => {\n if (!collectionInference) return undefined;\n return collectionInference?.(collection.path, collection.collectionGroup ?? false, parentPaths ?? []);\n };\n\n const inferCollectionFromData = async (newCollection: PersistedCollection<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 PropertiesOrBuilders<M>;\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: any) {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error inferring collection: \" + (e.message ?? \"Details in the console\")\n });\n return newCollection;\n }\n };\n\n const onSubmit = (newCollectionState: PersistedCollection<M>, formexController: FormexController<PersistedCollection<M>>) => {\n console.debug(\"Submitting collection\", newCollectionState);\n try {\n\n if (!isNewCollection) {\n saveCollection(newCollectionState).then(() => {\n formexController.resetForm();\n handleClose(newCollectionState);\n });\n return;\n }\n\n if (currentView === \"welcome\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"details\") {\n if (extraView || importConfig.inUse) {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n } else if (isNewCollection) {\n inferCollectionFromData(newCollectionState)\n .then((values) => {\n formexController.resetForm({\n values: values ?? newCollectionState,\n touched: {\n path: true,\n name: true\n }\n });\n }).finally(() => {\n setNextMode();\n });\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 saveCollection(newCollectionState).then(() => {\n formexController.resetForm({ values: initialValues });\n setNextMode();\n handleClose(newCollectionState);\n });\n } else {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n }\n } catch (e: any) {\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n console.error(e);\n formexController.resetForm({ values: newCollectionState });\n }\n };\n\n const validation = (col: PersistedCollection) => {\n\n let errors: Record<string, any> = {};\n const schema = (currentView === \"properties\" || currentView === \"subcollections\" || currentView === \"details\") && YupSchema;\n if (schema) {\n try {\n schema.validateSync(col, { abortEarly: false });\n } catch (e: any) {\n e.inner.forEach((err: any) => {\n errors[err.path] = err.message;\n });\n }\n }\n if (currentView === \"properties\") {\n errors = { ...errors, ...propertyErrorsRef.current };\n }\n if (currentView === \"details\") {\n const pathError = validatePath(col.path, isNewCollection, existingPaths, col.id);\n if (pathError) {\n errors.path = pathError;\n }\n const idError = validateId(col.id, isNewCollection, existingPaths, existingIds);\n if (idError) {\n errors.id = idError;\n }\n }\n return errors;\n };\n\n const formController = useCreateFormex<PersistedCollection<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 // TODO: getting data is only working in root collections with this code\n const path = values.path;\n const updatedFullPath = fullPath?.includes(\"/\") ? fullPath?.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + path : path; // TODO: this path is wrong\n const pathError = validatePath(path, isNewCollection, existingPaths, values.id);\n\n const parentPaths = !pathError && parentCollectionIds ? navigation.convertIdsToPaths(parentCollectionIds) : undefined;\n const resolvedPath = !pathError ? navigation.resolveIdsFrom(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) => {\n const res = cleanPropertiesFromImport(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.id);\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 editable = collection?.editable === undefined || collection?.editable === true;\n // @ts-ignore\n const isMergedCollection = collection?.merged ?? false;\n const collectionEditable = editable || isNewCollection;\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n if (!collection) return;\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n handleCancel();\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n return <DialogContent fullHeight={true}>\n <Formex value={formController}>\n\n <>\n {!isNewCollection && <Tabs value={currentView}\n innerClassName={cls(defaultBorderMixin, \"px-4 h-14 w-full justify-end bg-surface-50 dark:bg-surface-950 border-b\")}\n onValueChange={(v) => setCurrentView(v as EditorView)}>\n <Tab value={\"details\"}>\n Details\n </Tab>\n <Tab value={\"properties\"}>\n Properties\n </Tab>\n <Tab value={\"subcollections\"}>\n Additional views\n </Tab>\n </Tabs>}\n\n <form noValidate\n onSubmit={formController.handleSubmit}\n className={cls(\n isNewCollection ? \"h-full\" : \"h-[calc(100%-48px)]\",\n \"flex-grow flex flex-col relative\")}>\n\n {currentView === \"loading\" &&\n <CircularProgressCenter/>}\n\n {currentView === \"extra_view\" &&\n path &&\n extraView?.View &&\n <extraView.View path={path}/>}\n\n {currentView === \"welcome\" &&\n <CollectionEditorWelcomeView\n path={path}\n onContinue={(importData, propertiesOrder) => {\n // console.log(\"Import data\", importData, propertiesOrder)\n if (importData) {\n onImportDataSet(importData, propertiesOrder);\n setCurrentView(\"import_data_mapping\");\n } else {\n setCurrentView(\"details\");\n }\n }}\n existingCollectionPaths={existingPaths}\n parentCollection={parentCollection}\n pathSuggestions={pathSuggestions}/>}\n\n {currentView === \"import_data_mapping\" && importConfig &&\n <CollectionEditorImportMapping importConfig={importConfig}\n collectionEditable={collectionEditable}\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={path}\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 === \"details\" &&\n <CollectionDetailsForm\n existingPaths={existingPaths}\n existingIds={existingIds}\n groups={groups}\n parentCollectionIds={parentCollectionIds}\n parentCollection={parentCollection}\n isNewCollection={isNewCollection}>\n {!isNewCollection && isMergedCollection && <div className={\"flex flex-col gap-4 mt-8\"}>\n <Typography variant={\"body2\"} color={\"secondary\"}>This collection is defined in code.\n The changes done in this editor will override the properties defined in code.\n You can delete the overridden values to revert to the state defined in code.\n </Typography>\n <Button variant={\"neutral\"}\n onClick={() => {\n setDeleteRequested(true);\n }}>Reset to code</Button>\n </div>}\n </CollectionDetailsForm>}\n\n {currentView === \"subcollections\" && collection &&\n <SubcollectionsEditTab\n parentCollection={parentCollection}\n configController={configController}\n getUser={getUser}\n collectionInference={collectionInference}\n parentCollectionIds={parentCollectionIds}\n collection={collection}/>}\n\n {currentView === \"properties\" &&\n <CollectionPropertiesEditorForm\n showErrors={submitCount > 0}\n isNewCollection={isNewCollection}\n reservedGroups={reservedGroups}\n onPropertyError={(propertyKey, namespace, error) => {\n const current = removeUndefined({\n ...propertyErrorsRef.current,\n [getFullIdPath(propertyKey, namespace)]: removeUndefined(error, true)\n }, true);\n propertyErrorsRef.current = current;\n formController.validate();\n }}\n getUser={getUser}\n getData={getDataWithPath}\n doCollectionInference={doCollectionInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n extraIcon={extraView?.icon &&\n <IconButton\n color={\"primary\"}\n onClick={() => setCurrentView(\"extra_view\")}>\n {extraView.icon}\n </IconButton>}/>\n }\n\n {currentView !== \"welcome\" && <DialogActions\n position={\"absolute\"}>\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 <ArrowBackIcon/>\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 <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"details\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"welcome\")}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n {isNewCollection && currentView === \"properties\" && <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"details\")}>\n <ArrowBackIcon/>\n Back\n </Button>}\n\n <Button variant={\"text\"}\n onClick={() => {\n handleCancel();\n }}>\n Cancel\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 === \"details\" || currentView === \"properties\") &&\n <LoadingButton\n variant={\"filled\"}\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n disabled={isSubmitting || (currentView === \"details\" && !validValues)}\n startIcon={currentView === \"properties\"\n ? <CheckIcon/>\n : undefined}\n >\n {currentView === \"details\" && \"Next\"}\n {currentView === \"properties\" && \"Create collection\"}\n </LoadingButton>}\n\n {!isNewCollection && <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Update collection\n </LoadingButton>}\n\n </DialogActions>}\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 </DialogContent>\n\n}\n\nfunction applyPropertyConfigs<M extends Record<string, any> = any>(collection: PersistedCollection<M>, propertyConfigs: Record<string, PropertyConfig<any>>): PersistedCollection<M> {\n const {\n properties,\n ...rest\n } = collection;\n const propertiesResult: PropertiesOrBuilders<any> = {};\n if (properties) {\n Object.keys(properties).forEach((key) => {\n propertiesResult[key] = applyPropertiesConfig(properties[key] as PropertyOrBuilder, propertyConfigs);\n });\n }\n\n return {\n ...rest,\n properties: propertiesResult\n };\n}\n\nfunction applyPropertiesConfig(property: PropertyOrBuilder, propertyConfigs: Record<string, PropertyConfig<any>>) {\n let internalProperty = property;\n if (propertyConfigs && typeof internalProperty === \"object\" && internalProperty.propertyConfig) {\n const propertyConfig = propertyConfigs[internalProperty.propertyConfig];\n if (propertyConfig && isPropertyBuilder(propertyConfig.property)) {\n internalProperty = propertyConfig.property;\n } else {\n\n if (propertyConfig) {\n internalProperty = mergeDeep(propertyConfig.property, internalProperty);\n }\n\n if (!isPropertyBuilder(internalProperty) && internalProperty.dataType === \"map\" && internalProperty.properties) {\n const properties: Record<string, PropertyOrBuilder> = {};\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","import React, { PropsWithChildren, useCallback } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport {\n Entity,\n Property,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport { CollectionEditorDialog } from \"./ui/collection_editor/CollectionEditorDialog\";\nimport { useNavigate } from \"react-router\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { PropertyFormDialog } from \"./ui/collection_editor/PropertyEditView\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\n\nexport const ConfigControllerContext = React.createContext<CollectionsConfigController>({} as any);\nexport const CollectionEditorContext = React.createContext<CollectionEditorController>({} as any);\n\nexport interface ConfigControllerProviderProps {\n /**\n * Controller for managing the collections' config.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Callback used to infer the schema from the data.\n */\n collectionInference?: CollectionInference;\n\n /**\n * Use this builder to define the permissions for the configuration per user.\n */\n configPermissions?: CollectionEditorPermissionsBuilder;\n\n /**\n * Groups that cannot be used to create new collections.\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n getPathSuggestions?: (path?: string) => Promise<string[]>;\n\n getUser?: (uid: string) => User | null\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n components?: {\n /**\n * Custom component to render the database field\n */\n DatabaseField?: React.ComponentType<{ databaseId?: string, onDatabaseIdUpdate: (databaseId:string) => void }>;\n };\n\n}\n\nexport const ConfigControllerProvider = React.memo(\n function ConfigControllerProvider({\n children,\n collectionConfigController,\n configPermissions,\n reservedGroups,\n collectionInference,\n extraView,\n getPathSuggestions,\n getUser,\n getData,\n onAnalyticsEvent,\n components\n }: PropsWithChildren<ConfigControllerProviderProps>) {\n\n const navigation = useNavigationController();\n const navigate = useNavigate();\n const snackbarController = useSnackbarController();\n const { propertyConfigs } = useCustomizationController();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n parentCollection?: PersistedCollection,\n editedCollectionId?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n initialValues?: {\n path?: string,\n group?: string,\n name?: string\n },\n redirect: boolean,\n existingEntities?: Entity<any>[]\n }>();\n\n const [currentPropertyDialog, setCurrentPropertyDialog] = React.useState<{\n propertyKey?: string,\n property?: Property,\n namespace?: string,\n parentCollection?: PersistedCollection,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n fullPath?: string,\n parentCollectionIds: string[],\n collectionEditable: boolean;\n existingEntities?: Entity<any>[]\n }>();\n\n const defaultConfigPermissions: CollectionEditorPermissionsBuilder = useCallback(() => ({\n createCollections: true,\n editCollections: true,\n deleteCollections: true\n }), []);\n\n const editCollection = ({\n id,\n fullPath,\n parentCollectionIds,\n parentCollection,\n existingEntities\n }: {\n id?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection,\n existingEntities?: Entity<any>[]\n }) => {\n console.debug(\"Edit collection\", id, fullPath, parentCollectionIds, parentCollection);\n onAnalyticsEvent?.(\"edit_collection\", {\n id,\n fullPath\n });\n setCurrentDialog({\n editedCollectionId: id,\n fullPath,\n parentCollectionIds,\n isNewCollection: false,\n parentCollection,\n redirect: false,\n existingEntities\n });\n };\n\n const editProperty = ({\n propertyKey,\n property,\n editedCollectionId,\n currentPropertiesOrder,\n parentCollectionIds,\n collection,\n existingEntities\n }: {\n propertyKey?: string,\n property?: Property,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n parentCollectionIds: string[],\n collection: PersistedCollection,\n existingEntities?: Entity<any>[]\n }) => {\n console.debug(\"Edit property\", propertyKey, property, editedCollectionId, currentPropertiesOrder, parentCollectionIds, collection);\n onAnalyticsEvent?.(\"edit_property\", {\n propertyKey,\n editedCollectionId\n });\n // namespace is all the path until the last dot\n const namespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(0, propertyKey.lastIndexOf(\".\"))\n : undefined;\n const propertyKeyWithoutNamespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(propertyKey.lastIndexOf(\".\") + 1)\n : propertyKey;\n setCurrentPropertyDialog({\n propertyKey: propertyKeyWithoutNamespace,\n property,\n namespace,\n currentPropertiesOrder,\n editedCollectionId,\n parentCollectionIds,\n collectionEditable: collection?.editable ?? false,\n existingEntities\n });\n };\n\n const createCollection = ({\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n }: {\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection\n initialValues?: {\n group?: string,\n path?: string,\n name?: string\n },\n redirect: boolean,\n sourceClick?: string\n }) => {\n console.debug(\"Create collection\", {\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n });\n onAnalyticsEvent?.(\"create_collection\", {\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n });\n setCurrentDialog({\n isNewCollection: true,\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect\n });\n };\n\n return (\n <ConfigControllerContext.Provider value={collectionConfigController}>\n <CollectionEditorContext.Provider\n value={{\n editCollection,\n createCollection,\n editProperty,\n configPermissions: configPermissions ?? defaultConfigPermissions,\n getPathSuggestions,\n components\n }}>\n\n {children}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={collectionConfigController}\n isNewCollection={false}\n collectionInference={collectionInference}\n {...currentDialog}\n getData={getData}\n reservedGroups={reservedGroups}\n extraView={extraView}\n pathSuggestions={getPathSuggestions}\n getUser={getUser}\n handleClose={(collection) => {\n if (currentDialog?.redirect) {\n if (collection && currentDialog?.isNewCollection && !currentDialog.parentCollectionIds.length) {\n const url = navigation.buildUrlCollectionPath(collection.id ?? collection.path);\n navigate(url);\n }\n }\n setCurrentDialog(undefined);\n }}/>\n\n {/* Used for editing properties*/}\n <PropertyFormDialog\n open={Boolean(currentPropertyDialog)}\n includeIdAndName={true}\n existingProperty={Boolean(currentPropertyDialog?.propertyKey)}\n autoUpdateId={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n autoOpenTypeSelect={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n inArray={false}\n collectionEditable={currentPropertyDialog?.collectionEditable ?? false}\n getData={getData && currentPropertyDialog?.editedCollectionId\n ? () => {\n console.debug(\"get data for property\", currentPropertyDialog?.editedCollectionId);\n const resolvedPath = navigation.resolveIdsFrom(currentPropertyDialog.editedCollectionId!)\n return getData(resolvedPath, []);\n }\n : undefined}\n onPropertyChanged={({\n id,\n property\n }) => {\n if (!currentPropertyDialog) return;\n if (!id) return;\n const newProperty = !(currentPropertyDialog.propertyKey);\n return collectionConfigController.saveProperty({\n path: currentPropertyDialog?.editedCollectionId,\n property,\n propertyKey: id,\n newPropertiesOrder: newProperty && currentPropertyDialog.currentPropertiesOrder ? [...currentPropertyDialog.currentPropertiesOrder, id] : undefined,\n namespace: currentPropertyDialog.namespace,\n parentCollectionIds: currentPropertyDialog.parentCollectionIds\n })\n .catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onPropertyChangedImmediate={false}\n onDelete={() => {\n if (!currentPropertyDialog?.propertyKey) return;\n const newPropertiesOrder = currentPropertyDialog?.currentPropertiesOrder?.filter(p => p !== currentPropertyDialog?.propertyKey);\n return collectionConfigController.deleteProperty({\n path: currentPropertyDialog?.editedCollectionId,\n propertyKey: currentPropertyDialog?.propertyKey,\n namespace: currentPropertyDialog?.namespace,\n newPropertiesOrder,\n parentCollectionIds: currentPropertyDialog?.parentCollectionIds\n })\n .then(() => {\n setCurrentPropertyDialog(undefined);\n }).catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onError={() => {\n }}\n onOkClicked={() => {\n setCurrentPropertyDialog(undefined);\n }}\n onCancel={() => {\n setCurrentPropertyDialog(undefined);\n }}\n initialErrors={{}}\n forceShowErrors={false}\n existingPropertyKeys={[]}\n allowDataInference={true}\n propertyConfigs={propertyConfigs}\n property={currentPropertyDialog?.property}\n propertyKey={currentPropertyDialog?.propertyKey}/>\n\n </CollectionEditorContext.Provider>\n\n </ConfigControllerContext.Provider>\n );\n }, equal);\n","import { CollectionActionsProps, useAuthController, useNavigationController } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionAction({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n const collectionEditorController = useCollectionEditorController();\n\n const parentCollection = navigationController.getCollectionFromIds(parentCollectionIds);\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n const editorButton = <Tooltip\n asChild={true}\n title={canEditCollection ? \"Edit collection\" : \"You don't have permissions to edit this collection\"}>\n <IconButton\n color={\"primary\"}\n disabled={!canEditCollection}\n onClick={canEditCollection\n ? () => collectionEditorController?.editCollection({\n id: collection.id,\n fullPath,\n parentCollectionIds,\n parentCollection: parentCollection as PersistedCollection,\n existingEntities: tableController?.data ?? []\n })\n : undefined}>\n <SettingsIcon/>\n </IconButton>\n </Tooltip>;\n\n return <>\n {editorButton}\n </>\n\n}\n\nfunction getObjectOrNull(o?: object): object | null {\n if (o && Object.keys(o).length === 0)\n return o\n return o ?? null;\n}\n","import { useContext } from \"react\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { ConfigControllerContext } from \"./ConfigControllerProvider\";\n\n/**\n * Use this hook to access the configuration controller.\n * You can use it to get the list of collections, and to save/delete collections.\n */\nexport const useCollectionsConfigController = (): CollectionsConfigController => useContext(ConfigControllerContext);\n","import {\n ConfirmationDialog,\n PluginHomePageActionsProps,\n useAuthController,\n useSnackbarController\n} from \"@firecms/core\";\nimport { DeleteIcon, IconButton, Menu, MenuItem, MoreVertIcon, SettingsIcon, } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useState } from \"react\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\n\nexport function HomePageEditorCollectionAction({\n path,\n collection\n }: PluginHomePageActionsProps) {\n\n\n const snackbarController = useSnackbarController();\n const authController = useAuthController();\n const configController = useCollectionsConfigController();\n const collectionEditorController = useCollectionEditorController();\n\n const permissions = collectionEditorController.configPermissions({\n user: authController.user,\n collection\n });\n\n const onEditCollectionClicked = () => {\n collectionEditorController?.editCollection({\n id: collection.id,\n parentCollectionIds: []\n });\n };\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n return <>\n\n <div>\n {permissions.deleteCollections &&\n <Menu\n trigger={<IconButton>\n <MoreVertIcon size={\"small\"}/>\n </IconButton>}\n >\n <MenuItem\n dense={true}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setDeleteRequested(true);\n }}>\n <DeleteIcon/>\n Delete\n </MenuItem>\n\n </Menu>\n\n }\n\n {permissions.editCollections &&\n <IconButton\n onClick={(event) => {\n onEditCollectionClicked();\n }}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>}\n </div>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete this collection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>}/>\n </>;\n\n}\n","import { EntityTableController, ResolvedProperty } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip } from \"@firecms/ui\";\nimport React from \"react\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function CollectionViewHeaderAction({\n propertyKey,\n onHover,\n property,\n fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: {\n property: ResolvedProperty,\n propertyKey: string,\n onHover: boolean,\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n tableController: EntityTableController;\n}) {\n\n const collectionEditorController = useCollectionEditorController();\n\n return (\n <Tooltip\n asChild={true}\n title={\"Edit\"}>\n <IconButton\n className={onHover ? \"bg-white dark:bg-surface-950\" : \"hidden\"}\n onClick={() => {\n collectionEditorController.editProperty({\n propertyKey,\n property,\n editedCollectionId: collection.id,\n parentCollectionIds,\n collection,\n existingEntities: tableController.data ?? []\n });\n }}\n size={\"small\"}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n )\n}\n","import { EntityTableController, getDefaultPropertiesOrder, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Tooltip } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function PropertyAddColumnComponent({\n fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: {\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n tableController: EntityTableController;\n}) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n return (\n <Tooltip\n asChild={true}\n title={canEditCollection ? \"Add new property\" : \"You don't have permission to add new properties\"}>\n <div\n className={\"p-0.5 w-20 h-full flex items-center justify-center cursor-pointer bg-surface-100 bg-opacity-40 hover:bg-surface-100 dark:bg-surface-950 dark:bg-opacity-40 dark:hover:bg-surface-950\"}\n // className={onHover ? \"bg-white dark:bg-surface-950\" : undefined}\n onClick={() => {\n collectionEditorController.editProperty({\n editedCollectionId: collection.id,\n parentCollectionIds,\n currentPropertiesOrder: getDefaultPropertiesOrder(collection),\n collection,\n existingEntities: tableController.data\n });\n }}>\n <AddIcon color={\"inherit\"}/>\n </div>\n </Tooltip>\n )\n}\n","import { AddIcon, Button } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionButton() {\n const collectionEditorController = useCollectionEditorController();\n return <div className={\"bg-surface-50 dark:bg-surface-900 min-w-fit rounded\"}>\n <Button className={\"min-w-fit\"}\n variant={\"outlined\"}\n onClick={() => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_button\"\n })}>\n <AddIcon/>\n New collection\n </Button>\n </div>\n}\n","import equal from \"react-fast-compare\"\n\nimport { CollectionActionsProps, mergeDeep, useAuthController, useSnackbarController } from \"@firecms/core\";\nimport { Button, SaveIcon, Tooltip, UndoIcon, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionActionStart({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const configController = useCollectionsConfigController();\n const snackbarController = useSnackbarController();\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n let saveDefaultFilterButton = null;\n if (!equal(getObjectOrNull(tableController.filterValues), getObjectOrNull(collection.initialFilter)) ||\n !equal(getObjectOrNull(tableController.sortBy), getObjectOrNull(collection.initialSort))) {\n saveDefaultFilterButton = <>\n <Tooltip\n asChild={true}\n title={tableController.sortBy || tableController.filterValues ? \"Save default filter and sort\" : \"Clear default filter and sort\"}>\n <Button\n color={\"primary\"}\n size={\"small\"}\n variant={\"outlined\"}\n onClick={() => configController\n ?.saveCollection({\n id: collection.id,\n parentCollectionIds,\n collectionData: mergeDeep(collection as PersistedCollection,\n {\n initialFilter: tableController.filterValues ?? null,\n initialSort: tableController.sortBy ?? null\n })\n }).then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"Default config saved\"\n });\n })}>\n <SaveIcon/>\n </Button>\n </Tooltip>\n\n {(collection.initialFilter || collection.initialSort) && <Tooltip\n title={\"Reset to default filter and sort\"}>\n <Button\n color={\"primary\"}\n size={\"small\"}\n variant={\"text\"}\n onClick={() => {\n tableController.clearFilter?.();\n if (collection?.initialFilter)\n tableController.setFilterValues?.(collection?.initialFilter);\n if (collection?.initialSort)\n tableController.setSortBy?.(collection?.initialSort);\n }}>\n <UndoIcon/>\n </Button>\n </Tooltip>}\n </>;\n }\n\n return <>\n {canEditCollection && saveDefaultFilterButton}\n </>\n\n}\n\nfunction getObjectOrNull(o?: object): object | null {\n if (o && Object.keys(o).length === 0)\n return o\n return o ?? null;\n}\n","import { PluginHomePageAdditionalCardsProps, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Card, cls, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionCard({\n group,\n context\n }: PluginHomePageAdditionalCardsProps) {\n\n if (!context.navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n return (\n <Card className={cls(\"h-full p-4 min-h-[124px]\")}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n initialValues: group ? { group } : undefined,\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n\n <div\n className=\"flex items-center justify-center h-full w-full flex-grow flex-col\">\n <AddIcon color=\"primary\" size={\"large\"}/>\n <Typography color=\"primary\"\n variant={\"caption\"}\n className={\"font-medium\"}>{\"Add new collection\".toUpperCase()}</Typography>\n\n {!canCreateCollections &&\n <Typography variant={\"caption\"}>You don&apos;t have permissions to create\n collections</Typography>\n }\n </div>\n\n </Card>\n );\n}\n","import React from \"react\";\nimport { FireCMSPlugin, useAuthController, useNavigationController, User } from \"@firecms/core\";\nimport { ConfigControllerProvider } from \"./ConfigControllerProvider\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { EditorCollectionAction } from \"./ui/EditorCollectionAction\";\nimport { HomePageEditorCollectionAction } from \"./ui/HomePageEditorCollectionAction\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { CollectionViewHeaderAction } from \"./ui/CollectionViewHeaderAction\";\nimport { PropertyAddColumnComponent } from \"./ui/PropertyAddColumnComponent\";\nimport { NewCollectionButton } from \"./ui/NewCollectionButton\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"./useCollectionEditorController\";\nimport { EditorCollectionActionStart } from \"./ui/EditorCollectionActionStart\";\nimport { NewCollectionCard } from \"./ui/NewCollectionCard\";\n\nexport interface CollectionConfigControllerProps<EC extends PersistedCollection = PersistedCollection, USER extends User = User> {\n\n /**\n * Firebase app where the configuration is saved.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Define what actions can be performed on the configuration.\n */\n configPermissions?: CollectionEditorPermissionsBuilder<USER, EC>;\n\n /**\n * The words you define here will not be allowed to be used as group\n * names when creating collections.\n * e.g. [\"admin\"]\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n getPathSuggestions?: (path?: string) => Promise<string[]>;\n\n collectionInference?: CollectionInference;\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n getUser?: (uid: string) => USER | null;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n components?: {\n /**\n * Custom component to render the database field\n */\n DatabaseField?: React.ComponentType<{ databaseId?: string, onDatabaseIdUpdate: (databaseId:string) => void }>;\n };\n\n}\n\n/**\n * Use this hook to initialise the Collection Editor plugin.\n * This is likely the only hook you will need to use.\n * @param firebaseApp Firebase app where your project data lives.\n * @param configPermissions\n * @param reservedGroups\n * @param extraView\n * @param getData\n * @param getUser\n * @param collectionInference\n */\nexport function useCollectionEditorPlugin<EC extends PersistedCollection = PersistedCollection, USER extends User = User>\n({\n collectionConfigController,\n configPermissions,\n reservedGroups,\n extraView,\n getPathSuggestions,\n getUser,\n collectionInference,\n getData,\n onAnalyticsEvent,\n components\n }: CollectionConfigControllerProps<EC, USER>): FireCMSPlugin<any, any, PersistedCollection> {\n\n return {\n key: \"collection_editor\",\n loading: collectionConfigController.loading,\n provider: {\n Component: ConfigControllerProvider,\n props: {\n collectionConfigController,\n configPermissions,\n collectionInference,\n reservedGroups,\n extraView,\n getPathSuggestions,\n getUser,\n getData,\n onAnalyticsEvent,\n components\n }\n },\n homePage: {\n additionalActions: <NewCollectionButton/>,\n additionalChildrenStart: <IntroWidget/>,\n // additionalChildrenEnd: <RootCollectionSuggestions introMode={introMode}/>,\n CollectionActions: HomePageEditorCollectionAction,\n AdditionalCards: NewCollectionCard,\n },\n collectionView: {\n CollectionActionsStart: EditorCollectionActionStart,\n CollectionActions: EditorCollectionAction,\n HeaderAction: CollectionViewHeaderAction,\n AddColumnComponent: PropertyAddColumnComponent\n }\n };\n}\n\nexport function IntroWidget({}: {}) {\n\n const navigation = useNavigationController();\n if (!navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n if (!navigation.initialised || (navigation.collections ?? []).length > 0) {\n return null;\n }\n\n return (\n <Paper\n className={\"my-4 px-4 py-6 flex flex-col bg-white dark:bg-surface-accent-800 gap-2\"}>\n <Typography variant={\"subtitle2\"} className={\"uppercase\"}>No collections found</Typography>\n <Typography>\n Start building collections in FireCMS easily. Map them to your existing\n database data, import from files, or use our templates.\n </Typography>\n {canCreateCollections && <Button\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n <AddIcon/>Create your first collection\n </Button>}\n <Typography color={\"secondary\"}>\n You can also define collections programmatically.\n </Typography>\n </Paper>\n );\n}\n","import {\n EntityCollection,\n joinCollectionLists,\n makePropertiesEditable,\n ModifyCollectionProps,\n Properties\n} from \"@firecms/core\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\n/**\n * Function in charge of merging collections defined in code with those stored in the backend.\n */\nexport const mergeCollections = (baseCollections: EntityCollection[],\n backendCollections: PersistedCollection[] = [],\n modifyCollection?: (props: ModifyCollectionProps) => EntityCollection | void\n) => {\n\n const markAsEditable = (c: PersistedCollection) => {\n makePropertiesEditable(c.properties as Properties);\n c.subcollections?.forEach(markAsEditable);\n };\n\n backendCollections.forEach(markAsEditable);\n\n const result = joinCollectionLists(baseCollections, backendCollections, [], modifyCollection);\n\n // sort the collections so they are in the same order as the base collections\n result.sort((a, b) => baseCollections.findIndex(c => c.id === a.id) - baseCollections.findIndex(c => c.id === b.id));\n console.debug(\"Collections result\", {\n baseCollections,\n backendCollections,\n result\n });\n\n return result;\n}\n","import { ErrorView, unslugify, useNavigationController } from \"@firecms/core\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { Button } from \"@firecms/ui\";\n\nexport function MissingReferenceWidget({ path: pathProp }: {\n path: string\n}) {\n const navigation = useNavigationController();\n const path = getLastSegment(pathProp);\n const parentCollectionIds = navigation.getParentCollectionIds(pathProp);\n const collectionEditor = useCollectionEditorController();\n return <div className={\"p-1 flex flex-col items-center\"}>\n <ErrorView error={\"No collection for path: \" + path}/>\n <Button className={\"mx-2\"} variant={\"outlined\"}\n size={\"small\"}\n onClick={() => {\n collectionEditor.createCollection({\n initialValues: { path, name: unslugify(path) },\n parentCollectionIds,\n redirect: false,\n sourceClick: \"missing_reference\"\n });\n }}>\n Create\n </Button>\n </div>;\n}\n\nfunction getParentPathSegments(path: string): string[] {\n const segments = path.split(\"/\");\n return segments.filter((segment, index) => index % 2 === 0 && index !== segments.length - 1);\n}\n\nfunction getLastSegment(path: string): string {\n const segments = path.split(\"/\");\n return segments[segments.length - 1];\n}\n"],"names":["YupSchema","Yup","object","shape","id","string","required","name","path","useCollectionEditorController","useContext","CollectionEditorContext","LayoutModeSwitch","t0","$","_c","value","onChange","className","t1","cls","t2","t3","Symbol","for","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","CollectionDetailsForm","isNewCollection","reservedGroups","groups","parentCollection","children","groupRef","React","useRef","values","setFieldValue","handleChange","touched","errors","setFieldTouched","isSubmitting","submitCount","useFormex","collectionEditor","iconDialogOpen","setIconDialogOpen","useState","advancedPanelExpanded","setAdvancedPanelExpanded","databaseId","undefined","updateDatabaseId","pathTouched","getIn","toSnakeCase","idTouched","singularNameTouched","singular","updateName","useEffect","DatabaseField","components","DefaultDatabaseField","collectionIcon","groupOptions","filter","group","includes","ref","autoCompleteOpen","setAutoCompleteOpen","useAutoComplete","isSubcollection","customIdValue","customId","showErrors","T0","Container","t19","t20","t21","e","target","t22","Boolean","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","DebouncedTextField","t33","t34","t35","t36","t37","event","length","map","group_0","index","t38","openEntityMode","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","singularName","t50","e_0","t51","t52","t53","t54","t55","t56","t57","sideDialogWidth","t58","e_1","value_0","isNaN","Number","t59","t60","t61","t62","t63","t64","t65","t66","t67","t68","t69","description","t70","t71","t72","t73","t74","t75","t76","defaultSize","t77","_temp2","t78","_temp","t79","t80","v","Error","t81","t82","t83","t84","t85","_temp3","t86","v_0","t87","collectionGroup","t88","t89","t90","t91","v_1","t92","textSearchEnabled","t93","t94","t95","t96","t97","t98","t99","t100","height","t101","icon","t102","t103","t104","value_3","value_2","toUpperCase","value_1","onDatabaseIdUpdate","idToPropertiesPath","replaceAll","namespaceToPropertiesPath","namespace","namespaceToPropertiesOrderPath","getFullId","propertyKey","propertyNamespace","getFullIdPath","keyWithNamespace","EnumForm","enumValues","onValuesChanged","onError","updateIds","disabled","allowDataInference","getData","forEach","enumValue","label","hasError","Object","keys","initialValues","validateOnChange","validation","formex","useCreateFormex","values_0","errors_0","EnumFormFields","enumValuesPath","shouldUpdateId","lastInternalIdAdded","setLastInternalIdAdded","editDialogIndex","setEditDialogIndex","inferring","setInferring","Set","inferredValuesRef","inferredValues","current","internalId","justAdded","entryError","has","buildEntry","then","data","flatData","flat","fieldData","Array","from","currentEnumValues","foundEnumValues","extractEnumFromValues","newEnumValues","some","enumValue_0","add","catch","finally","inferValues","console","error","EnumEntry","memo","EnumEntryInternal","updateId","autoFocus","onDialogOpen","inferredEntry","shouldUpdateIdRef","idValue","labelValue","currentLabelRef","areEqual","prevProps","nextProps","equal","EnumEntryDialog","open","onClose","idError","open_0","SwitchControl","field","form","tooltip","size","allowIndeterminate","checked","formControlLabel","GeneralPropertyValidation","validationRequired","validationUnique","field_0","form_0","validationRequiredMessage","StringPropertyValidation","lowercase","matches","max","min","trim","uppercase","matchesError","matchesValue","serializeRegExp","matchesStringValue","validationLowercase","validationUppercase","validationTrim","field_1","form_1","validationLength","validationMin","validationMax","validationMatches","ArrayPropertyValidation","ValidationPanel","EnumPropertyField","multiselect","setFieldError","snackbarContext","useSnackbarController","defaultValue","valuesEnumValues","useMemo","resolveEnumValues","enumIds","type","message","res","entry","toString","fileTypes","StoragePropertyField","multiple","existing","baseStoragePath","acceptedFiles","fileName","maxSize","storagePath","storeUrl","fileNameValue","storagePathValue","T1","maxSizeValue","storedValue","fileTypesValue","isArray","allFileTypesSelected","handleTypesChange","hasFilenameCallback","hasStoragePathCallback","ExpandablePanel","entries","preventDefault","stopPropagation","parseInt","selected","join","editableProperty","property","isPropertyBuilder","eProperty","dataType","of","editable","removeNonEditableProperties","properties","_","key","propertyOrBuilder","reduce","a","b","PropertyFieldPreview","onClick","includeName","includeEditButton","propertyConfigs","useCustomizationController","getFieldConfig","propertyConfig","borderColorClass","cardClickableMixin","cardSelectedMixin","cardMixin","NonEditablePropertyPreview","PropertyTree","selectedPropertyKey","onPropertyClick","propertiesOrder","propertiesOrderProp","additionalFields","onPropertyMove","onPropertyRemove","inferredPropertyKeys","collectionEditable","result","destination","startIndex","source","endIndex","newPropertiesOrder","removed","splice","onDragEnd","droppableProvided","droppableSnapshot","droppableProps","innerRef","additionalField","find","warn","provided","snapshot","isDragging","placeholder","isSelected","startsWith","wasSelected","PropertyTreeEntry","isPropertyInferred","fullId","fullIdPath","subtree","defaultBorderMixin","left","top","bottom","dragHandleProps","draggableProps","MapPropertyField","propertyDialogOpen","setPropertyDialogOpen","setSelectedPropertyKey","selectedPropertyNamespace","setSelectedPropertyNamespace","currentPropertiesOrder","onPropertyCreated","propertiesPath","propertiesOrderPath","currentPropertiesOrder_0","p","deleteProperty","selectedPropertyFullId","selectedProperty","empty","propertiesOrder_0","namespace_0","propertyKey_0","namespace_1","spreadChildren","RepeatPropertyField","ofProperty","ofPropertyError","onPropertyChanged","widget","CommonPropertyFields","forwardRef","disabledId","autoUpdateId","nameError","descriptionError","newNameValue","fontSize","newIdValue","nameTouched","unslugify","StringPropertyField","widgetId","BooleanPropertyField","BlockPropertyField","oneOf","addChildButton","namespace_2","NumberPropertyValidation","validationLessThan","validationMoreThan","validationPositive","validationNegative","validationInteger","NumberPropertyField","parseFloat","ReferencePropertyField","navigation","useNavigationController","pathPath","pathValue","pathError","CollectionsSelect","props","collections","ungroupedCollections","selectedCollection","collection","collection_0","collection_1","flatMap","collection_2","col","DateTimePropertyField","modeValue","modeError","autoValueValue","autoValueError","modePath","autoValuePath","v_2","AdvancedPropertyValidation","hideFromCollection","readOnly","KeyValuePropertyField","updatePropertyFromWidget","propertyData","selectedWidgetId","updatedProperty","mergeDeep","storage","multiline","markdown","email","url","keyValue","mode","UrlPropertyField","urlValue","supportedFieldsIds","supportedFields","DEFAULT_FIELD_CONFIGS","config","MarkdownPropertyField","PropertyForm","includeIdAndName","autoOpenTypeSelect","existingProperty","inArray","existingPropertyKeys","onPropertyChangedImmediate","onDismiss","onDelete","initialErrors","forceShowErrors","getController","initialValue","previousId","lastSubmittedProperty","property_0","params","doOnPropertyChanged","newPropertyWithId","controller","debug","id_0","property_1","resetForm","validateName","validateId","isValidRegExp","debugId","validateOnInitialRender","onSubmit","formexController","PropertyFormDialog","formProps","onCancel","onOkClicked","formexRef","helpers","handleSubmit","PropertyEditFormFields","setValues","includeIdAndTitle","selectOpen","setSelectOpen","deleteDialogOpen","setDeleteDialogOpen","getFieldId","selectedFieldConfigId","setSelectedFieldConfigId","deferredValues","useDeferredValue","nameFieldRef","selectedWidgetError","isEmptyObject","newSelectedWidgetId","setTimeout","focus","onWidgetSelectChanged","childComponent","hasValue","idRegEx","match","WIDGET_TYPE_MAP","text_field","switch","select","multi_select","number_input","number_select","multi_number_select","file_upload","multi_file_upload","reference","multi_references","date_time","key_value","repeat","custom_array","block","WidgetSelectView","initialProperty","onValueChange","onOpenChange","allSupportedFields","concat","displayedWidgets","key_0","propertyConfig_1","baseProperty","baseFieldConfig","computedFieldConfig","_temp4","fieldBackgroundDisabledMixin","fieldBackgroundHoverMixin","fieldBackgroundMixin","Dialog","DialogContent","key_2","propertyConfig_2","groupKey","key_1","propertyConfig_0","WidgetSelectViewItem","shouldWarnChangingDataType","camelCase","str","slice","toLowerCase","replace","split","cur","acc","substring","GetCodeDialog","snackbarController","code","JSON5","stringify","collectionToCode","themes","vsDark","navigator","clipboard","writeText","style","tokens","getLineProps","getTokenProps","line","i","token","propertyCleanup","valueCopy","clone","childRes","fromBuilder","resolved","resolvedProperties","initialFilter","initialSort","subcollections","CollectionPropertiesEditorForm","propertyErrorsRef","onPropertyError","setDirty","extraIcon","getUser","doCollectionInference","dirty","largeLayout","useLargeLayout","asDialog","selectedPropertyIndex","setSelectedPropertyIndex","codeDialogOpen","setCodeDialogOpen","inferringProperties","setInferringProperties","newPropertyDialogOpen","setNewPropertyDialogOpen","setInferredPropertyKeys","currentPropertiesOrderRef","inferPropertiesFromData","newCollection","newPropertyKeys","updatedProperties","updatedPropertiesOrder","updatePropertiesOrder","getCurrentPropertiesOrder","indexOf","log","propertyPath","previousFullId","previousPropertyPath","onPropertyErrorInternal","closePropertyDialog","emptyCollection","usedPropertiesOrder","owner","ownerId","body","displayName","UnsavedChangesDialog","handleOk","handleCancel","title","EntityCustomViewsSelectDialog","entityViews","view","SubcollectionsEditTab","configController","collectionInference","parentCollectionIds","contextEntityViews","subcollectionToDelete","setSubcollectionToDelete","addEntityViewDialogOpen","setAddEntityViewDialogOpen","viewToDelete","setViewToDelete","currentDialog","setCurrentDialog","setSubcollections","T2","T3","resolvedEntityViews","resolveEntityView","hardCodedEntityViews","totalEntityViews","subcollection","editedCollectionId","e_2","Paper","Table","TableBody","e_3","deleteCollection","e_4","e_5","updatedCollection","selectedViewKey","e_6","view_0","productsCollectionTemplate","makePropertiesEditable","brand","main_image","available","columnWidth","price","requiredMessage","images","related_products","metadata","added_on","autoValue","blogCollectionTemplate","header_image","cacheControl","content","typeField","valueField","text","quote","products","previewProperties","created_on","status","published","draft","publish_date","clearable","reviewed","tags","previewAsTag","usersCollectionTemplate","emailVerified","phone","favourite_products","photoURL","pagesCollectionTemplate","slug","unique","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","CollectionEditorWelcomeView","pathSuggestions","onContinue","existingCollectionPaths","loadingPathSuggestions","setLoadingPathSuggestions","filteredPathSuggestions","setFilteredPathSuggestions","suggestions","filteredSuggestions","s","c","suggestion","TemplateButton","subtitle","CollectionEditorImportMapping","importConfig","setSelectedProperty","newPropertiesOrder_0","newHeadersMapping","headersMapping","setHeadersMapping","importData","importKey","fullId_0","propertyPath_0","d","inferredNewProperty","buildPropertyFromData","getInferenceType","onPropertyTypeChanged","property_2","importKey_0","isIdColumn","propertyKey_1","p_0","PropertySelect","fieldId","newProperty","widget_0","PropertySelectItem","optionDisabled","CollectionEditorImportDataPreview","loading","setLoading","loadEntities","mappedData","convertDataToEntity","idColumn","defaultValues","setEntities","selectionController","useSelectionController","entities","dataLoading","noMoreToLoad","cleanPropertiesFromImport","parentSlug","slugify","fullSlug","slugifiedResult","firstKey","CollectionEditorDialog","formDirty","setFormDirty","unsavedChangesDialogOpen","setUnsavedChangesDialogOpen","handleClose","CollectionEditor","authController","useAuthController","topLevelNavigation","initialValuesProp","includeTemplates","collectionsInThisLevel","existingPaths","existingIds","setCollection","initialLoadingCompleted","setInitialLoadingCompleted","initialised","getCollectionFromPaths","initialCollection","randomString","applyPropertyConfigs","coolIconKeys","Math","floor","random","user","uid","CollectionEditorInternal","fullPath","extraView","existingEntities","useImportConfig","initialView","currentView","setCurrentView","setError","saveCollection","collectionData","setNextMode","inUse","parentPaths","inferCollectionFromData","Promise","resolve","inferredCollection","newCollectionState","schema","validateSync","abortEarly","inner","err","validatePath","formController","updatedFullPath","convertIdsToPaths","resolvedPath","resolveIdsFrom","getDataWithPath","existingData","push","onImportDataSet","setInUse","buildEntityPropertiesFromData","setIdColumn","setImportData","filteredHeadingsOrder","setHeadingsOrder","setOriginProperties","mappedHeadings","validValues","onImportMappingComplete","isMergedCollection","merged","deleteRequested","setDeleteRequested","View","importedCollection","removeUndefined","validate","rest","propertiesResult","applyPropertiesConfig","internalProperty","subpaths","removeInitialAndTrailingSlashes","ConfigControllerContext","createContext","ConfigControllerProvider","collectionConfigController","configPermissions","getPathSuggestions","onAnalyticsEvent","navigate","useNavigate","currentPropertyDialog","setCurrentPropertyDialog","defaultConfigPermissions","redirect","editCollection","parentCollectionIds_0","existingEntities_0","lastIndexOf","propertyKeyWithoutNamespace","editProperty","parentCollectionIds_1","parentCollection_0","sourceClick","createCollection","buildUrlCollectionPath","saveProperty","createCollections","editCollections","deleteCollections","EditorCollectionAction","tableController","navigationController","collectionEditorController","getCollectionFromIds","canEditCollection","editorButton","useCollectionsConfigController","HomePageEditorCollectionAction","permissions","onEditCollectionClicked","event_0","CollectionViewHeaderAction","onHover","PropertyAddColumnComponent","getDefaultPropertiesOrder","NewCollectionButton","EditorCollectionActionStart","saveDefaultFilterButton","getObjectOrNull","filterValues","sortBy","clearFilter","setFilterValues","setSortBy","o","NewCollectionCard","context","canCreateCollections","useCollectionEditorPlugin","Component","additionalActions","additionalChildrenStart","CollectionActions","AdditionalCards","CollectionActionsStart","HeaderAction","AddColumnComponent","provider","homePage","collectionView","IntroWidget","mergeCollections","baseCollections","backendCollections","modifyCollection","markAsEditable","joinCollectionLists","sort","findIndex","MissingReferenceWidget","pathProp","getLastSegment","getParentCollectionIds","segments"],"mappings":"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"}