@firecms/core 3.0.0-beta.1 → 3.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -7
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +30 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +3 -4
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -18
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -5
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +7 -13
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
- package/dist/components/EntityCollectionTable/index.d.ts +2 -4
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +3 -3
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +13 -4
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +26 -7
- package/dist/components/EntityView.d.ts +11 -0
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/FieldCaption.d.ts +5 -0
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCard.d.ts +8 -0
- package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
- package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/components/HomePage/index.d.ts +3 -1
- package/dist/components/{FieldConfigBadge.d.ts → PropertyConfigBadge.d.ts} +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/{ReferenceSelectionInner.d.ts → ReferenceTable/ReferenceSelectionTable.d.ts} +2 -2
- package/dist/components/ReferenceWidget.d.ts +6 -4
- package/dist/components/{EntityCollectionTable/SimpleEntityCollectionTable.d.ts → SelectableTable/SelectableTable.d.ts} +8 -28
- package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
- package/dist/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +16 -13
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
- package/dist/components/common/index.d.ts +6 -0
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/{EntityCollectionTable → common}/types.d.ts +11 -6
- package/dist/components/{EntityCollectionView → common}/useColumnsIds.d.ts +2 -1
- package/dist/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.d.ts +4 -1
- package/dist/components/common/useTableSearchHelper.d.ts +12 -0
- package/dist/components/index.d.ts +14 -8
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +10 -0
- package/dist/core/EntityEditView.d.ts +36 -0
- package/dist/core/FireCMS.d.ts +1 -1
- package/dist/core/NavigationRoutes.d.ts +3 -3
- package/dist/core/index.d.ts +3 -6
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/CustomIdField.d.ts +2 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/FormikArrayContainer.d.ts +2 -1
- package/dist/{components → form/components}/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -3
- package/dist/form/components/StorageUploadProgress.d.ts +1 -1
- package/dist/form/components/index.d.ts +2 -1
- package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/BlockFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +11 -0
- package/dist/form/field_bindings/{MultiSelectBinding.d.ts → MultiSelectFieldBinding.d.ts} +1 -1
- package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/RepeatFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/SelectFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -4
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
- package/dist/form/index.d.ts +4 -5
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/form/validation.d.ts +1 -1
- package/dist/hooks/data/delete.d.ts +2 -2
- package/dist/hooks/data/save.d.ts +2 -3
- package/dist/hooks/data/useDataSource.d.ts +2 -2
- package/dist/hooks/data/useEntityFetch.d.ts +3 -3
- package/dist/hooks/index.d.ts +5 -1
- package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
- package/dist/hooks/useBuildNavigationController.d.ts +23 -0
- package/dist/hooks/useProjectLog.d.ts +14 -0
- package/dist/hooks/useSnackbarController.d.ts +1 -0
- package/dist/hooks/useStorageSource.d.ts +2 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +16297 -12643
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +20043 -587
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -12
- package/dist/preview/PropertyPreview.d.ts +1 -1
- package/dist/preview/PropertyPreviewProps.d.ts +7 -5
- package/dist/preview/components/BooleanPreview.d.ts +5 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +4 -9
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +38 -2
- package/dist/types/collections.d.ts +56 -9
- package/dist/types/datasource.d.ts +59 -39
- package/dist/types/entities.d.ts +7 -1
- package/dist/types/entity_actions.d.ts +14 -0
- package/dist/types/entity_callbacks.d.ts +3 -3
- package/dist/types/entity_overrides.d.ts +6 -0
- package/dist/types/fields.d.ts +47 -42
- package/dist/types/firecms.d.ts +8 -23
- package/dist/types/index.d.ts +2 -1
- package/dist/types/navigation.d.ts +18 -16
- package/dist/types/permissions.d.ts +5 -1
- package/dist/types/plugins.d.ts +31 -31
- package/dist/types/properties.d.ts +36 -23
- package/dist/types/property_config.d.ts +2 -2
- package/dist/types/roles.d.ts +31 -0
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/storage.d.ts +86 -3
- package/dist/types/user.d.ts +5 -0
- package/dist/util/collections.d.ts +9 -1
- package/dist/util/entities.d.ts +2 -2
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -97
- package/dist/util/icons.d.ts +10 -3
- package/dist/util/index.d.ts +3 -1
- package/dist/util/navigation_utils.d.ts +2 -2
- package/dist/util/objects.d.ts +1 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/property_utils.d.ts +1 -1
- package/dist/util/references.d.ts +4 -2
- package/dist/util/resolutions.d.ts +28 -14
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/strings.d.ts +1 -1
- package/dist/util/useDebouncedCallback.d.ts +1 -0
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +129 -112
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +24 -0
- package/src/app/Scaffold.tsx +243 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +45 -75
- package/src/components/CircularProgressCenter.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +1 -1
- package/src/components/DeleteEntityDialog.tsx +4 -4
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +47 -58
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +253 -448
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +11 -12
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +54 -48
- package/src/components/EntityCollectionTable/column_utils.tsx +4 -4
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +40 -32
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +17 -9
- package/src/components/EntityCollectionTable/index.tsx +1 -9
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +44 -46
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +32 -30
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +19 -7
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +145 -142
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +184 -171
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +42 -0
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityPreview.tsx +208 -71
- package/src/components/EntityView.tsx +84 -0
- package/src/components/ErrorView.tsx +1 -1
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/HomePage/DefaultHomePage.tsx +38 -28
- package/src/components/HomePage/NavigationCard.tsx +69 -0
- package/src/components/HomePage/NavigationCardBinding.tsx +116 -0
- package/src/components/HomePage/NavigationGroup.tsx +1 -1
- package/src/components/HomePage/SmallNavigationCard.tsx +44 -0
- package/src/components/HomePage/index.tsx +3 -1
- package/src/components/PropertyConfigBadge.tsx +23 -0
- package/src/components/PropertyIdCopyTooltip.tsx +48 -0
- package/src/components/{ReferenceSelectionInner.tsx → ReferenceTable/ReferenceSelectionTable.tsx} +37 -23
- package/src/components/ReferenceWidget.tsx +26 -16
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/{EntityCollectionTable/SimpleEntityCollectionTable.tsx → SelectableTable/SelectableTable.tsx} +46 -84
- package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
- package/src/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.tsx +2 -3
- package/src/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.tsx +22 -7
- package/src/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.tsx +38 -24
- package/src/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.tsx +88 -22
- package/src/components/VirtualTable/VirtualTable.tsx +77 -46
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
- package/src/components/VirtualTable/VirtualTableHeader.tsx +14 -8
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +19 -15
- package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +4 -4
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +4 -3
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +4 -3
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +14 -28
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +17 -9
- package/src/components/common/index.ts +6 -0
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/{EntityCollectionTable → common}/types.tsx +9 -6
- package/src/components/{EntityCollectionView → common}/useColumnsIds.tsx +23 -2
- package/src/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.tsx +25 -14
- package/src/components/common/useTableSearchHelper.ts +88 -0
- package/src/components/index.tsx +15 -8
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/contexts/DialogsProvider.tsx +2 -2
- package/src/core/DefaultAppBar.tsx +176 -0
- package/src/core/DefaultDrawer.tsx +183 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +1127 -0
- package/src/core/EntitySidePanel.tsx +9 -8
- package/src/core/FireCMS.tsx +67 -59
- package/src/core/NavigationRoutes.tsx +25 -17
- package/src/core/SideDialogs.tsx +1 -0
- package/src/core/field_configs.tsx +18 -19
- package/src/core/index.tsx +3 -6
- package/src/form/PropertyFieldBinding.tsx +60 -33
- package/src/form/components/CustomIdField.tsx +51 -36
- package/src/form/components/ErrorFocus.tsx +3 -3
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/FormikArrayContainer.tsx +4 -1
- package/src/form/components/LabelWithIcon.tsx +41 -0
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +22 -10
- package/src/form/components/StorageUploadProgress.tsx +8 -8
- package/src/form/components/index.tsx +2 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +28 -18
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +37 -37
- package/src/form/field_bindings/BlockFieldBinding.tsx +29 -27
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +20 -17
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +66 -60
- package/src/form/field_bindings/MapFieldBinding.tsx +35 -33
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -18
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +45 -33
- package/src/form/field_bindings/RepeatFieldBinding.tsx +36 -21
- package/src/form/field_bindings/SelectFieldBinding.tsx +22 -16
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +41 -42
- package/src/form/field_bindings/SwitchFieldBinding.tsx +11 -8
- package/src/form/field_bindings/TextFieldBinding.tsx +34 -30
- package/src/form/index.tsx +5 -9
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +4 -21
- package/src/hooks/data/delete.ts +5 -4
- package/src/hooks/data/save.ts +7 -2
- package/src/hooks/data/useCollectionFetch.tsx +1 -1
- package/src/hooks/data/useDataSource.tsx +15 -2
- package/src/hooks/data/useEntityFetch.tsx +4 -4
- package/src/hooks/index.tsx +7 -1
- package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/{core → hooks}/useBuildModeController.tsx +12 -6
- package/src/{internal → hooks}/useBuildNavigationController.tsx +244 -99
- package/src/hooks/useFireCMSContext.tsx +51 -3
- package/src/hooks/useLargeLayout.tsx +10 -7
- package/src/hooks/useProjectLog.tsx +63 -0
- package/src/hooks/useReferenceDialog.tsx +3 -3
- package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
- package/src/hooks/useSnackbarController.tsx +1 -2
- package/src/hooks/useStorageSource.tsx +7 -2
- package/src/hooks/useValidateAuthenticator.tsx +115 -0
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +79 -84
- package/src/internal/useBuildSideDialogsController.tsx +1 -0
- package/src/internal/useBuildSideEntityController.tsx +103 -23
- package/src/internal/useUnsavedChangesDialog.tsx +3 -1
- package/src/preview/PropertyPreview.tsx +12 -19
- package/src/preview/PropertyPreviewProps.tsx +6 -10
- package/src/preview/components/BooleanPreview.tsx +19 -4
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +24 -34
- package/src/preview/components/ReferencePreview.tsx +73 -176
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +44 -11
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +3 -2
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +3 -4
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -4
- package/src/preview/property_previews/MapPropertyPreview.tsx +6 -6
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +2 -2
- package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
- package/src/preview/util.ts +2 -2
- package/src/types/analytics.ts +1 -0
- package/src/types/auth.tsx +51 -2
- package/src/types/collections.ts +65 -9
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +69 -47
- package/src/types/entities.ts +15 -1
- package/src/types/entity_actions.tsx +17 -0
- package/src/types/entity_callbacks.ts +4 -3
- package/src/types/entity_overrides.tsx +7 -0
- package/src/types/fields.tsx +51 -45
- package/src/types/firecms.tsx +9 -26
- package/src/types/index.ts +2 -1
- package/src/types/navigation.ts +20 -19
- package/src/types/permissions.ts +6 -1
- package/src/types/plugins.tsx +38 -40
- package/src/types/properties.ts +42 -24
- package/src/types/property_config.tsx +2 -2
- package/src/types/roles.ts +41 -0
- package/src/types/side_dialogs_controller.tsx +13 -0
- package/src/types/side_entity_controller.tsx +1 -0
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +7 -0
- package/src/util/collections.ts +22 -0
- package/src/util/entities.ts +6 -5
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +15 -10
- package/src/util/icon_synonyms.ts +3 -99
- package/src/util/icons.tsx +18 -4
- package/src/util/index.ts +3 -1
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/objects.ts +25 -28
- package/src/util/permissions.ts +12 -8
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +1 -1
- package/src/util/references.ts +39 -5
- package/src/util/resolutions.ts +75 -42
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +4 -3
- package/src/util/{useDebounce.ts → useDebouncedCallback.ts} +1 -1
- package/src/util/useStorageUploadController.tsx +33 -7
- package/src/util/useTraceUpdate.tsx +2 -1
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -52
- package/dist/form/EntityForm.d.ts +0 -75
- package/dist/form/components/SubmitListener.d.ts +0 -1
- package/dist/form/components/SwitchControl.d.ts +0 -8
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/hooks/useVerifyLicense.d.ts +0 -0
- package/dist/internal/EntityView.d.ts +0 -22
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useBuildNavigationController.d.ts +0 -14
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/dist/util/useDebounce.d.ts +0 -1
- package/src/components/FieldConfigBadge.tsx +0 -17
- package/src/components/FireCMSAppBar.tsx +0 -157
- package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
- package/src/components/LabelWithIcon.tsx +0 -33
- package/src/core/Drawer.tsx +0 -162
- package/src/core/Scaffold.tsx +0 -278
- package/src/form/EntityForm.tsx +0 -657
- package/src/form/components/SubmitListener.tsx +0 -32
- package/src/form/components/SwitchControl.tsx +0 -39
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
- package/src/hooks/useVerifyLicense.tsx +0 -1
- package/src/internal/EntityView.tsx +0 -578
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → common}/useDebouncedData.d.ts +0 -0
- /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
- /package/src/components/{EntityCollectionTable → common}/useDebouncedData.ts +0 -0
|
@@ -4,7 +4,7 @@ import { EntitySidePanelProps } from "../types";
|
|
|
4
4
|
import { useNavigationController } from "../hooks";
|
|
5
5
|
|
|
6
6
|
import { ErrorBoundary } from "../components";
|
|
7
|
-
import {
|
|
7
|
+
import { EntityEditView } from "./EntityEditView";
|
|
8
8
|
import { useSideDialogContext } from "./SideDialogs";
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -33,13 +33,15 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
|
|
|
33
33
|
if (!props) return undefined;
|
|
34
34
|
let usedCollection = props.collection;
|
|
35
35
|
|
|
36
|
+
const registryCollection = navigationController.getCollection(props.path);
|
|
37
|
+
if (registryCollection) {
|
|
38
|
+
usedCollection = registryCollection;
|
|
39
|
+
}
|
|
36
40
|
if (!usedCollection) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
console.error("ERROR: No collection found in path `", props.path, "`. Entity id: ", props.entityId);
|
|
40
|
-
throw Error("ERROR: No collection found in path `" + props.path + "`. Make sure you have defined a collection for this path in the root navigation.");
|
|
41
|
-
}
|
|
41
|
+
console.error("ERROR: No collection found in path `", props.path, "`. Entity id: ", props.entityId);
|
|
42
|
+
throw Error("ERROR: No collection found in path `" + props.path + "`. Make sure you have defined a collection for this path in the root navigation.");
|
|
42
43
|
}
|
|
44
|
+
|
|
43
45
|
return usedCollection;
|
|
44
46
|
}, [navigationController, props]);
|
|
45
47
|
|
|
@@ -75,9 +77,8 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
|
|
|
75
77
|
return (
|
|
76
78
|
<>
|
|
77
79
|
<ErrorBoundary>
|
|
78
|
-
<
|
|
80
|
+
<EntityEditView
|
|
79
81
|
{...props}
|
|
80
|
-
formWidth={props.width}
|
|
81
82
|
collection={collection}
|
|
82
83
|
parentCollectionIds={parentCollectionIds}
|
|
83
84
|
onValuesAreModified={onValuesAreModified}
|
package/src/core/FireCMS.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React, { useMemo } from "react";
|
|
2
2
|
|
|
3
|
-
import { EntityCollection, FireCMSContext, FireCMSPlugin, FireCMSProps, User } from "../types";
|
|
4
|
-
import { AuthControllerContext
|
|
3
|
+
import { CustomizationController, EntityCollection, FireCMSContext, FireCMSPlugin, FireCMSProps, User } from "../types";
|
|
4
|
+
import { AuthControllerContext } from "../contexts";
|
|
5
5
|
import { useBuildSideEntityController } from "../internal/useBuildSideEntityController";
|
|
6
|
-
import { useCustomizationController, useFireCMSContext
|
|
6
|
+
import { useCustomizationController, useFireCMSContext } from "../hooks";
|
|
7
7
|
import { useBuildSideDialogsController } from "../internal/useBuildSideDialogsController";
|
|
8
8
|
import { ErrorView } from "../components";
|
|
9
9
|
import { StorageSourceContext } from "../contexts/StorageSourceContext";
|
|
@@ -12,14 +12,12 @@ import { DataSourceContext } from "../contexts/DataSourceContext";
|
|
|
12
12
|
import { SideEntityControllerContext } from "../contexts/SideEntityControllerContext";
|
|
13
13
|
import { NavigationContext } from "../contexts/NavigationContext";
|
|
14
14
|
import { SideDialogsControllerContext } from "../contexts/SideDialogsControllerContext";
|
|
15
|
-
import { useLocaleConfig } from "
|
|
16
|
-
import { CenteredView } from "@firecms/ui";
|
|
15
|
+
import { CenteredView, Typography, useLocaleConfig } from "@firecms/ui";
|
|
17
16
|
import { DialogsProvider } from "../contexts/DialogsProvider";
|
|
18
|
-
import { useBuildNavigationController } from "../internal/useBuildNavigationController";
|
|
19
17
|
import { useBuildDataSource } from "../internal/useBuildDataSource";
|
|
20
|
-
import { useBuildCustomizationController } from "../internal/useBuildCustomizationController";
|
|
21
18
|
import { CustomizationControllerContext } from "../contexts/CustomizationControllerContext";
|
|
22
19
|
import { AnalyticsContext } from "../contexts/AnalyticsContext";
|
|
20
|
+
import { useProjectLog } from "../hooks/useProjectLog";
|
|
23
21
|
|
|
24
22
|
/**
|
|
25
23
|
* If you are using independent components of the CMS
|
|
@@ -30,12 +28,11 @@ import { AnalyticsContext } from "../contexts/AnalyticsContext";
|
|
|
30
28
|
*
|
|
31
29
|
* You only need to use this component if you are building a custom app.
|
|
32
30
|
*
|
|
33
|
-
|
|
31
|
+
|
|
34
32
|
* @group Core
|
|
35
33
|
*/
|
|
36
34
|
export function FireCMS<UserType extends User, EC extends EntityCollection>(props: FireCMSProps<UserType, EC>) {
|
|
37
35
|
|
|
38
|
-
const modeController = useModeController();
|
|
39
36
|
const {
|
|
40
37
|
children,
|
|
41
38
|
entityLinkBuilder,
|
|
@@ -50,25 +47,12 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
|
|
|
50
47
|
propertyConfigs,
|
|
51
48
|
entityViews,
|
|
52
49
|
components,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
collections,
|
|
56
|
-
views
|
|
50
|
+
navigationController,
|
|
51
|
+
apiKey
|
|
57
52
|
} = props;
|
|
58
53
|
|
|
59
54
|
useLocaleConfig(locale);
|
|
60
55
|
|
|
61
|
-
const navigationController = useBuildNavigationController({
|
|
62
|
-
basePath,
|
|
63
|
-
baseCollectionPath,
|
|
64
|
-
authController,
|
|
65
|
-
collections,
|
|
66
|
-
views,
|
|
67
|
-
userConfigPersistence,
|
|
68
|
-
dataSource: dataSourceDelegate,
|
|
69
|
-
plugins
|
|
70
|
-
});
|
|
71
|
-
|
|
72
56
|
/**
|
|
73
57
|
* Controller in charge of fetching and persisting data
|
|
74
58
|
*/
|
|
@@ -85,7 +69,7 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
|
|
|
85
69
|
|
|
86
70
|
const loading = authController.initialLoading || navigationController.loading || pluginsLoading;
|
|
87
71
|
|
|
88
|
-
const customizationController =
|
|
72
|
+
const customizationController: CustomizationController = {
|
|
89
73
|
dateTimeFormat,
|
|
90
74
|
locale,
|
|
91
75
|
entityLinkBuilder,
|
|
@@ -93,12 +77,22 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
|
|
|
93
77
|
entityViews: entityViews ?? [],
|
|
94
78
|
propertyConfigs: propertyConfigs ?? {},
|
|
95
79
|
components
|
|
96
|
-
}
|
|
80
|
+
};
|
|
97
81
|
|
|
98
82
|
const analyticsController = useMemo(() => ({
|
|
99
83
|
onAnalyticsEvent
|
|
100
84
|
}), []);
|
|
101
85
|
|
|
86
|
+
const accessResponse = useProjectLog({
|
|
87
|
+
apiKey,
|
|
88
|
+
authController,
|
|
89
|
+
dataSourceDelegate,
|
|
90
|
+
plugins
|
|
91
|
+
});
|
|
92
|
+
if (accessResponse?.message) {
|
|
93
|
+
console.warn(accessResponse.message);
|
|
94
|
+
}
|
|
95
|
+
|
|
102
96
|
if (navigationController.navigationLoadingError) {
|
|
103
97
|
return (
|
|
104
98
|
<CenteredView maxWidth={"md"}>
|
|
@@ -119,40 +113,54 @@ export function FireCMS<UserType extends User, EC extends EntityCollection>(prop
|
|
|
119
113
|
);
|
|
120
114
|
}
|
|
121
115
|
|
|
116
|
+
if (accessResponse?.blocked) {
|
|
117
|
+
return (
|
|
118
|
+
<CenteredView maxWidth={"md"} fullScreen={true} className={"flex flex-col gap-2"}>
|
|
119
|
+
<Typography variant={"h4"} gutterBottom>
|
|
120
|
+
License needed
|
|
121
|
+
</Typography>
|
|
122
|
+
<Typography>
|
|
123
|
+
You need a valid license to use FireCMS PRO. Please reach out at <a
|
|
124
|
+
href={"mailto:hello@firecms.co"}>hello@firecms.co</a> for more information.
|
|
125
|
+
</Typography>
|
|
126
|
+
{accessResponse?.message &&
|
|
127
|
+
<Typography>{accessResponse?.message}</Typography>}
|
|
128
|
+
</CenteredView>
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
|
|
122
132
|
return (
|
|
123
|
-
<
|
|
124
|
-
<
|
|
125
|
-
<
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
<
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
</AnalyticsContext.Provider>
|
|
155
|
-
</ModeControllerContext.Provider>
|
|
133
|
+
<AnalyticsContext.Provider value={analyticsController}>
|
|
134
|
+
<CustomizationControllerContext.Provider value={customizationController}>
|
|
135
|
+
<UserConfigurationPersistenceContext.Provider
|
|
136
|
+
value={userConfigPersistence}>
|
|
137
|
+
<StorageSourceContext.Provider
|
|
138
|
+
value={storageSource}>
|
|
139
|
+
<DataSourceContext.Provider
|
|
140
|
+
value={dataSource}>
|
|
141
|
+
<AuthControllerContext.Provider
|
|
142
|
+
value={authController}>
|
|
143
|
+
<SideDialogsControllerContext.Provider
|
|
144
|
+
value={sideDialogsController}>
|
|
145
|
+
<SideEntityControllerContext.Provider
|
|
146
|
+
value={sideEntityController}>
|
|
147
|
+
<NavigationContext.Provider
|
|
148
|
+
value={navigationController}>
|
|
149
|
+
<DialogsProvider>
|
|
150
|
+
<FireCMSInternal
|
|
151
|
+
loading={loading}>
|
|
152
|
+
{children}
|
|
153
|
+
</FireCMSInternal>
|
|
154
|
+
</DialogsProvider>
|
|
155
|
+
</NavigationContext.Provider>
|
|
156
|
+
</SideEntityControllerContext.Provider>
|
|
157
|
+
</SideDialogsControllerContext.Provider>
|
|
158
|
+
</AuthControllerContext.Provider>
|
|
159
|
+
</DataSourceContext.Provider>
|
|
160
|
+
</StorageSourceContext.Provider>
|
|
161
|
+
</UserConfigurationPersistenceContext.Provider>
|
|
162
|
+
</CustomizationControllerContext.Provider>
|
|
163
|
+
</AnalyticsContext.Provider>
|
|
156
164
|
);
|
|
157
165
|
|
|
158
166
|
}
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
|
|
3
3
|
import { Route, Routes, useLocation } from "react-router-dom";
|
|
4
4
|
import { CMSView } from "../types";
|
|
5
|
-
import { DefaultHomePage, EntityCollectionView, NotFoundPage } from "../components";
|
|
5
|
+
import { DefaultHomePage, EntityCollectionView, ErrorBoundary, NotFoundPage } from "../components";
|
|
6
6
|
import { useNavigationController } from "../hooks";
|
|
7
7
|
import { toArray } from "../util/arrays";
|
|
8
8
|
|
|
@@ -13,9 +13,9 @@ export type NavigationRoutesProps = {
|
|
|
13
13
|
/**
|
|
14
14
|
* In case you need to override the home page
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
homePage?: React.ReactNode;
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
children?: React.ReactNode | React.ReactNode[]
|
|
19
19
|
|
|
20
20
|
};
|
|
21
21
|
|
|
@@ -25,14 +25,13 @@ export type NavigationRoutesProps = {
|
|
|
25
25
|
* or the home route) related to a {@link NavigationController}.
|
|
26
26
|
* This component needs a parent {@link FireCMS}
|
|
27
27
|
*
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
* @group Components
|
|
30
30
|
*/
|
|
31
|
-
|
|
32
31
|
export const NavigationRoutes = React.memo<NavigationRoutesProps>(
|
|
33
32
|
function NavigationRoutes({
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
homePage = <DefaultHomePage/>,
|
|
34
|
+
children
|
|
36
35
|
}: NavigationRoutesProps) {
|
|
37
36
|
|
|
38
37
|
const location = useLocation();
|
|
@@ -59,6 +58,14 @@ export const NavigationRoutes = React.memo<NavigationRoutesProps>(
|
|
|
59
58
|
cmsViews.push(buildCMSViewRoute(cmsView.path, cmsView));
|
|
60
59
|
});
|
|
61
60
|
}
|
|
61
|
+
if (navigation.adminViews) {
|
|
62
|
+
navigation.adminViews.forEach((cmsView) => {
|
|
63
|
+
if (Array.isArray(cmsView.path))
|
|
64
|
+
cmsViews.push(...cmsView.path.map(path => buildCMSViewRoute(path, cmsView)));
|
|
65
|
+
else
|
|
66
|
+
cmsViews.push(buildCMSViewRoute(cmsView.path, cmsView));
|
|
67
|
+
});
|
|
68
|
+
}
|
|
62
69
|
|
|
63
70
|
// we reorder collections so that nested paths are included first
|
|
64
71
|
const sortedCollections = [...(navigation.collections ?? [])]
|
|
@@ -70,20 +77,22 @@ export const NavigationRoutes = React.memo<NavigationRoutesProps>(
|
|
|
70
77
|
return <Route path={urlPath + "/*"}
|
|
71
78
|
key={`navigation_${collection.id ?? collection.path}`}
|
|
72
79
|
element={
|
|
73
|
-
<
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
<ErrorBoundary>
|
|
81
|
+
<EntityCollectionView
|
|
82
|
+
key={`collection_view_${collection.id ?? collection.path}`}
|
|
83
|
+
isSubCollection={false}
|
|
84
|
+
parentCollectionIds={[]}
|
|
85
|
+
fullPath={collection.id ?? collection.path}
|
|
86
|
+
{...collection}
|
|
87
|
+
Actions={toArray(collection.Actions)}/>
|
|
88
|
+
</ErrorBoundary>
|
|
80
89
|
}/>;
|
|
81
90
|
}
|
|
82
91
|
);
|
|
83
92
|
|
|
84
93
|
const homeRoute = (
|
|
85
94
|
<Route path={"/"}
|
|
86
|
-
element={
|
|
95
|
+
element={homePage}/>
|
|
87
96
|
);
|
|
88
97
|
|
|
89
98
|
const notFoundRoute = <Route path={"*"}
|
|
@@ -102,7 +111,7 @@ export const NavigationRoutes = React.memo<NavigationRoutesProps>(
|
|
|
102
111
|
|
|
103
112
|
{notFoundRoute}
|
|
104
113
|
|
|
105
|
-
{
|
|
114
|
+
{children}
|
|
106
115
|
|
|
107
116
|
</Routes>
|
|
108
117
|
);
|
|
@@ -115,4 +124,3 @@ const buildCMSViewRoute = (path: string, cmsView: CMSView) => {
|
|
|
115
124
|
element={cmsView.view}
|
|
116
125
|
/>;
|
|
117
126
|
};
|
|
118
|
-
|
package/src/core/SideDialogs.tsx
CHANGED
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
DateTimeFieldBinding,
|
|
9
9
|
KeyValueFieldBinding,
|
|
10
10
|
MapFieldBinding,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
MarkdownEditorFieldBinding,
|
|
12
|
+
MultiSelectFieldBinding,
|
|
13
13
|
ReferenceFieldBinding,
|
|
14
14
|
RepeatFieldBinding,
|
|
15
15
|
SelectFieldBinding,
|
|
@@ -77,7 +77,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<string, PropertyConfig<any>> = {
|
|
|
77
77
|
property: {
|
|
78
78
|
dataType: "string",
|
|
79
79
|
markdown: true,
|
|
80
|
-
Field:
|
|
80
|
+
Field: MarkdownEditorFieldBinding
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
url: {
|
|
@@ -104,6 +104,17 @@ export const DEFAULT_FIELD_CONFIGS: Record<string, PropertyConfig<any>> = {
|
|
|
104
104
|
Field: TextFieldBinding
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
|
+
switch: {
|
|
108
|
+
key: "switch",
|
|
109
|
+
name: "Switch",
|
|
110
|
+
description: "Boolean true or false field (or yes or no, 0 or 1...)",
|
|
111
|
+
Icon: FlagIcon,
|
|
112
|
+
color: "#20d9d2",
|
|
113
|
+
property: {
|
|
114
|
+
dataType: "boolean",
|
|
115
|
+
Field: SwitchFieldBinding
|
|
116
|
+
}
|
|
117
|
+
},
|
|
107
118
|
select: {
|
|
108
119
|
key: "select",
|
|
109
120
|
name: "Select/enum",
|
|
@@ -128,7 +139,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<string, PropertyConfig<any>> = {
|
|
|
128
139
|
dataType: "string",
|
|
129
140
|
enumValues: [],
|
|
130
141
|
},
|
|
131
|
-
Field:
|
|
142
|
+
Field: MultiSelectFieldBinding
|
|
132
143
|
}
|
|
133
144
|
},
|
|
134
145
|
number_input: {
|
|
@@ -166,7 +177,7 @@ export const DEFAULT_FIELD_CONFIGS: Record<string, PropertyConfig<any>> = {
|
|
|
166
177
|
dataType: "number",
|
|
167
178
|
enumValues: [],
|
|
168
179
|
},
|
|
169
|
-
Field:
|
|
180
|
+
Field: MultiSelectFieldBinding
|
|
170
181
|
}
|
|
171
182
|
},
|
|
172
183
|
file_upload: {
|
|
@@ -225,17 +236,6 @@ export const DEFAULT_FIELD_CONFIGS: Record<string, PropertyConfig<any>> = {
|
|
|
225
236
|
Field: ArrayOfReferencesFieldBinding
|
|
226
237
|
}
|
|
227
238
|
},
|
|
228
|
-
switch: {
|
|
229
|
-
key: "switch",
|
|
230
|
-
name: "Switch",
|
|
231
|
-
description: "Boolean true or false field (or yes or no, 0 or 1...)",
|
|
232
|
-
Icon: FlagIcon,
|
|
233
|
-
color: "#20d9d2",
|
|
234
|
-
property: {
|
|
235
|
-
dataType: "boolean",
|
|
236
|
-
Field: SwitchFieldBinding
|
|
237
|
-
}
|
|
238
|
-
},
|
|
239
239
|
date_time: {
|
|
240
240
|
key: "date_time",
|
|
241
241
|
name: "Date/time",
|
|
@@ -331,7 +331,7 @@ export function getFieldConfig(property: Property | ResolvedProperty, propertyCo
|
|
|
331
331
|
}
|
|
332
332
|
const defaultFieldConfig = DEFAULT_FIELD_CONFIGS[defaultFieldId];
|
|
333
333
|
const customField = fieldId ? propertyConfigs[fieldId] : undefined;
|
|
334
|
-
return mergeDeep(defaultFieldConfig ?? {}, customField ?? {});
|
|
334
|
+
return mergeDeep(defaultFieldConfig ?? {}, customField ?? {} as PropertyConfig);
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
export function getDefaultFieldId(property: Property | ResolvedProperty) {
|
|
@@ -359,8 +359,7 @@ export function getDefaultFieldId(property: Property | ResolvedProperty) {
|
|
|
359
359
|
} else if (property.dataType === "map") {
|
|
360
360
|
if (property.keyValue)
|
|
361
361
|
return "key_value";
|
|
362
|
-
|
|
363
|
-
return "group";
|
|
362
|
+
return "group";
|
|
364
363
|
} else if (property.dataType === "array") {
|
|
365
364
|
const of = (property as ArrayProperty).of;
|
|
366
365
|
const oneOf = (property as ArrayProperty).oneOf;
|
package/src/core/index.tsx
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
export * from "./FireCMS";
|
|
2
2
|
|
|
3
|
-
export
|
|
4
|
-
export { Scaffold } from "./Scaffold";
|
|
3
|
+
export * from "../app/Scaffold";
|
|
5
4
|
|
|
6
|
-
export
|
|
7
|
-
export
|
|
5
|
+
export * from "./DefaultDrawer";
|
|
6
|
+
export * from "./DrawerNavigationItem";
|
|
8
7
|
|
|
9
8
|
export * from "./field_configs";
|
|
10
9
|
|
|
11
10
|
export * from "./SideDialogs";
|
|
12
11
|
export * from "./NavigationRoutes";
|
|
13
|
-
export * from "./useBuildModeController";
|
|
14
|
-
export * from "./useBuildLocalConfigurationPersistence";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { ComponentType, ReactElement, useCallback, useRef } from "react";
|
|
2
2
|
import equal from "react-fast-compare"
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { Field, FieldProps as FormexFieldProps, getIn } from "@firecms/formex";
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
7
|
CMSType,
|
|
@@ -51,6 +51,13 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
|
|
|
51
51
|
if (a.propertyKey !== b.propertyKey) {
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
|
+
if (a.index !== b.index) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (a.size !== b.size) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
54
61
|
const aIsBuilder = isPropertyBuilder(a.property) || a.property.fromBuilder;
|
|
55
62
|
const bIsBuilder = isPropertyBuilder(b.property) || b.property.fromBuilder;
|
|
56
63
|
|
|
@@ -67,7 +74,7 @@ export const PropertyFieldBinding = React.memo(PropertyFieldBindingInternal, (a:
|
|
|
67
74
|
return false;
|
|
68
75
|
}) as typeof PropertyFieldBindingInternal;
|
|
69
76
|
|
|
70
|
-
function PropertyFieldBindingInternal<T extends CMSType = CMSType,
|
|
77
|
+
function PropertyFieldBindingInternal<T extends CMSType = CMSType, M extends Record<string, any> = Record<string, any>>
|
|
71
78
|
({
|
|
72
79
|
propertyKey,
|
|
73
80
|
property,
|
|
@@ -75,34 +82,31 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, CustomProps =
|
|
|
75
82
|
includeDescription,
|
|
76
83
|
underlyingValueHasChanged,
|
|
77
84
|
disabled,
|
|
78
|
-
tableMode,
|
|
79
85
|
partOfArray,
|
|
80
|
-
|
|
86
|
+
minimalistView,
|
|
81
87
|
autoFocus,
|
|
88
|
+
index,
|
|
89
|
+
size
|
|
82
90
|
}: PropertyFieldBindingProps<T, M>): ReactElement<PropertyFieldBindingProps<T, M>> {
|
|
83
91
|
|
|
84
92
|
const customizationController = useCustomizationController();
|
|
85
93
|
|
|
86
|
-
const shouldAlwaysRerender = shouldPropertyReRender(property, customizationController.plugins);
|
|
87
|
-
// we use the standard Field for user defined fields, since it rebuilds
|
|
88
|
-
// when there are changes in other values, in contrast to FastField
|
|
89
|
-
const FieldComponent = shouldAlwaysRerender ? Field : FastField;
|
|
90
|
-
|
|
91
94
|
return (
|
|
92
|
-
<
|
|
95
|
+
<Field
|
|
96
|
+
key={propertyKey}
|
|
93
97
|
name={propertyKey}
|
|
94
98
|
>
|
|
95
|
-
{(fieldProps
|
|
99
|
+
{(fieldProps) => {
|
|
96
100
|
|
|
97
101
|
let Component: ComponentType<FieldProps<T>> | undefined;
|
|
98
102
|
const resolvedProperty: ResolvedProperty<T> | null = resolveProperty({
|
|
99
103
|
propertyKey,
|
|
100
|
-
propertyValue: fieldProps.field.value,
|
|
101
104
|
propertyOrBuilder: property,
|
|
102
105
|
values: fieldProps.form.values,
|
|
103
106
|
path: context.path,
|
|
104
107
|
entityId: context.entityId,
|
|
105
|
-
fields: customizationController.propertyConfigs
|
|
108
|
+
fields: customizationController.propertyConfigs,
|
|
109
|
+
index
|
|
106
110
|
});
|
|
107
111
|
|
|
108
112
|
if (resolvedProperty === null || isHidden(resolvedProperty)) {
|
|
@@ -116,16 +120,22 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, CustomProps =
|
|
|
116
120
|
} else {
|
|
117
121
|
const propertyConfig = getFieldConfig(resolvedProperty, customizationController.propertyConfigs);
|
|
118
122
|
if (!propertyConfig) {
|
|
119
|
-
console.log("INTERNAL: Could not find field config for property", {
|
|
123
|
+
console.log("INTERNAL: Could not find field config for property", {
|
|
124
|
+
propertyKey,
|
|
125
|
+
resolvedProperty,
|
|
126
|
+
fields: customizationController.propertyConfigs,
|
|
127
|
+
propertyConfig
|
|
128
|
+
});
|
|
120
129
|
throw new Error(`INTERNAL: Could not find field config for property ${propertyKey}`);
|
|
121
130
|
}
|
|
122
131
|
const configProperty = resolveProperty({
|
|
132
|
+
propertyKey,
|
|
123
133
|
propertyOrBuilder: propertyConfig.property,
|
|
124
|
-
propertyValue: fieldProps.field.value,
|
|
125
134
|
values: fieldProps.form.values,
|
|
126
135
|
path: context.path,
|
|
127
136
|
entityId: context.entityId,
|
|
128
|
-
fields: customizationController.propertyConfigs
|
|
137
|
+
fields: customizationController.propertyConfigs,
|
|
138
|
+
index
|
|
129
139
|
});
|
|
130
140
|
Component = configProperty.Field as ComponentType<FieldProps<T>>;
|
|
131
141
|
}
|
|
@@ -144,10 +154,10 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, CustomProps =
|
|
|
144
154
|
underlyingValueHasChanged,
|
|
145
155
|
context,
|
|
146
156
|
disabled,
|
|
147
|
-
tableMode,
|
|
148
157
|
partOfArray,
|
|
149
|
-
|
|
150
|
-
autoFocus
|
|
158
|
+
minimalistView,
|
|
159
|
+
autoFocus,
|
|
160
|
+
size
|
|
151
161
|
};
|
|
152
162
|
|
|
153
163
|
return <FieldInternal
|
|
@@ -155,7 +165,7 @@ function PropertyFieldBindingInternal<T extends CMSType = CMSType, CustomProps =
|
|
|
155
165
|
componentProps={componentProps}
|
|
156
166
|
fieldProps={fieldProps}/>;
|
|
157
167
|
}}
|
|
158
|
-
</
|
|
168
|
+
</Field>
|
|
159
169
|
);
|
|
160
170
|
|
|
161
171
|
}
|
|
@@ -174,26 +184,26 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
174
184
|
property,
|
|
175
185
|
includeDescription,
|
|
176
186
|
underlyingValueHasChanged,
|
|
177
|
-
tableMode,
|
|
178
187
|
partOfArray,
|
|
179
|
-
|
|
188
|
+
minimalistView,
|
|
180
189
|
autoFocus,
|
|
181
190
|
context,
|
|
182
|
-
disabled
|
|
191
|
+
disabled,
|
|
192
|
+
size
|
|
183
193
|
},
|
|
184
194
|
fieldProps
|
|
185
195
|
}:
|
|
186
196
|
{
|
|
187
197
|
Component: ComponentType<FieldProps<T, any, M>>,
|
|
188
198
|
componentProps: ResolvedPropertyFieldBindingProps<T, M>,
|
|
189
|
-
fieldProps:
|
|
199
|
+
fieldProps: FormexFieldProps<T, any>
|
|
190
200
|
}) {
|
|
191
201
|
|
|
192
202
|
const { plugins } = useCustomizationController();
|
|
193
203
|
|
|
194
204
|
const customFieldProps: any = property.customProps;
|
|
195
205
|
const value = fieldProps.field.value;
|
|
196
|
-
const initialValue = fieldProps.meta.initialValue;
|
|
206
|
+
// const initialValue = fieldProps.meta.initialValue;
|
|
197
207
|
const error = getIn(fieldProps.form.errors, propertyKey);
|
|
198
208
|
const touched = getIn(fieldProps.form.touched, propertyKey);
|
|
199
209
|
|
|
@@ -201,7 +211,14 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
201
211
|
(fieldProps.form.submitCount > 0 || property.validation?.unique) &&
|
|
202
212
|
(!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
|
|
203
213
|
|
|
204
|
-
const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent(
|
|
214
|
+
const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent({
|
|
215
|
+
path: context.path,
|
|
216
|
+
collection: context.collection,
|
|
217
|
+
propertyKey: propertyKey,
|
|
218
|
+
property: property,
|
|
219
|
+
Component: Component,
|
|
220
|
+
plugins: plugins
|
|
221
|
+
});
|
|
205
222
|
const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
|
|
206
223
|
|
|
207
224
|
const isSubmitting = fieldProps.form.isSubmitting;
|
|
@@ -219,7 +236,6 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
219
236
|
const cmsFieldProps: FieldProps<T, CustomProps, M> = {
|
|
220
237
|
propertyKey,
|
|
221
238
|
value: value as T,
|
|
222
|
-
initialValue,
|
|
223
239
|
setValue,
|
|
224
240
|
setFieldValue,
|
|
225
241
|
error,
|
|
@@ -230,12 +246,12 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
|
|
|
230
246
|
property: property as ResolvedProperty<T>,
|
|
231
247
|
disabled: disabled ?? false,
|
|
232
248
|
underlyingValueHasChanged: underlyingValueHasChanged ?? false,
|
|
233
|
-
tableMode: tableMode ?? false,
|
|
234
249
|
partOfArray: partOfArray ?? false,
|
|
235
|
-
|
|
250
|
+
minimalistView: minimalistView ?? false,
|
|
236
251
|
autoFocus: autoFocus ?? false,
|
|
237
252
|
customProps: customFieldProps,
|
|
238
|
-
context
|
|
253
|
+
context,
|
|
254
|
+
size
|
|
239
255
|
};
|
|
240
256
|
|
|
241
257
|
return (
|
|
@@ -271,13 +287,24 @@ const shouldPropertyReRender = (property: PropertyOrBuilder | ResolvedProperty,
|
|
|
271
287
|
}
|
|
272
288
|
}
|
|
273
289
|
|
|
274
|
-
|
|
275
|
-
path
|
|
276
|
-
collection
|
|
290
|
+
interface UseWrappedComponentParams<T extends CMSType = CMSType, M extends Record<string, any> = any> {
|
|
291
|
+
path?: string,
|
|
292
|
+
collection?: EntityCollection<M>,
|
|
277
293
|
propertyKey: string,
|
|
278
294
|
property: ResolvedProperty<T>,
|
|
279
295
|
Component: ComponentType<FieldProps<T, any, M>>,
|
|
280
296
|
plugins?: FireCMSPlugin[]
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function useWrappedComponent<T extends CMSType = CMSType, M extends Record<string, any> = any>(
|
|
300
|
+
{
|
|
301
|
+
path,
|
|
302
|
+
collection,
|
|
303
|
+
propertyKey,
|
|
304
|
+
property,
|
|
305
|
+
Component,
|
|
306
|
+
plugins
|
|
307
|
+
}: UseWrappedComponentParams<T, M>
|
|
281
308
|
): ComponentType<FieldProps<T, any, M>> | null {
|
|
282
309
|
|
|
283
310
|
const wrapperRef = useRef<ComponentType<FieldProps<T, any, M>> | null>((() => {
|