@firecms/core 3.0.0-canary.21 → 3.0.0-canary.211
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 +3 -3
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +34 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +23 -6
- 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 -13
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +1 -0
- 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 +1 -1
- 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 +7 -4
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +16 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityJsonPreview.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +5 -4
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +1 -1
- package/dist/components/PropertyConfigBadge.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/ReferenceWidget.d.ts +3 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +13 -3
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/UnsavedChangesDialog.d.ts +8 -0
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +28 -12
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -3
- package/dist/components/common/index.d.ts +2 -1
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/common/types.d.ts +4 -6
- package/dist/components/common/useColumnsIds.d.ts +3 -1
- package/dist/components/common/{useDataSourceEntityCollectionTableController.d.ts → useDataSourceTableController.d.ts} +13 -2
- package/dist/components/common/useDebouncedCallback.d.ts +1 -0
- package/dist/components/common/useScrollRestoration.d.ts +14 -0
- package/dist/components/index.d.ts +4 -2
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/core/DefaultAppBar.d.ts +29 -0
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +10 -0
- package/dist/core/EntityEditView.d.ts +35 -11
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +3 -3
- package/dist/core/FireCMSRouter.d.ts +4 -0
- package/dist/core/NavigationRoutes.d.ts +2 -3
- package/dist/core/SideDialogs.d.ts +4 -2
- package/dist/core/index.d.ts +4 -4
- package/dist/form/EntityForm.d.ts +37 -69
- package/dist/form/EntityFormActions.d.ts +17 -0
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/FormEntry.d.ts +6 -0
- package/dist/form/components/FormLayout.d.ts +5 -0
- package/dist/form/components/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -4
- package/dist/form/components/index.d.ts +3 -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/ReferenceFieldBinding.d.ts +2 -2
- 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 -5
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/index.d.ts +16 -18
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/hooks/data/delete.d.ts +4 -4
- package/dist/hooks/data/save.d.ts +4 -5
- package/dist/hooks/data/useCollectionFetch.d.ts +1 -1
- package/dist/hooks/data/useEntityFetch.d.ts +4 -3
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/hooks/useBuildNavigationController.d.ts +7 -5
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useModeController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +8 -2
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useValidateAuthenticator.d.ts +4 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +21921 -14330
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24271 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/internal/useBuildSideEntityController.d.ts +2 -2
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- package/dist/preview/PropertyPreviewProps.d.ts +6 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +3 -2
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/util.d.ts +3 -3
- package/dist/routes/CustomCMSRoute.d.ts +4 -0
- package/dist/routes/FireCMSRoute.d.ts +1 -0
- package/dist/routes/HomePageRoute.d.ts +3 -0
- package/dist/types/auth.d.ts +8 -10
- package/dist/types/collections.d.ts +77 -22
- package/dist/types/datasource.d.ts +52 -36
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +7 -2
- package/dist/types/entity_actions.d.ts +28 -4
- package/dist/types/entity_callbacks.d.ts +16 -16
- package/dist/types/entity_overrides.d.ts +2 -2
- package/dist/types/export_import.d.ts +4 -4
- package/dist/types/fields.d.ts +71 -42
- package/dist/types/firecms.d.ts +6 -2
- package/dist/types/firecms_context.d.ts +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/navigation.d.ts +32 -14
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +23 -12
- package/dist/types/properties.d.ts +52 -24
- package/dist/types/property_config.d.ts +0 -2
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/side_entity_controller.d.ts +6 -1
- package/dist/types/storage.d.ts +86 -3
- package/dist/types/user.d.ts +1 -0
- package/dist/util/builders.d.ts +3 -3
- package/dist/util/entities.d.ts +3 -3
- package/dist/util/entity_actions.d.ts +2 -0
- package/dist/util/entity_cache.d.ts +23 -0
- package/dist/util/icon_list.d.ts +5 -1
- package/dist/util/icon_synonyms.d.ts +1 -98
- package/dist/util/icons.d.ts +6 -3
- package/dist/util/index.d.ts +2 -0
- package/dist/util/navigation_from_path.d.ts +6 -1
- package/dist/util/navigation_utils.d.ts +14 -3
- package/dist/util/objects.d.ts +2 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/plurals.d.ts +0 -2
- package/dist/util/property_utils.d.ts +3 -3
- package/dist/util/resolutions.d.ts +36 -17
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/package.json +62 -48
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +24 -0
- package/src/app/Scaffold.tsx +253 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ArrayContainer.tsx +127 -41
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +3 -3
- package/src/components/DeleteEntityDialog.tsx +10 -19
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +54 -37
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +47 -39
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +30 -16
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +19 -17
- package/src/components/EntityCollectionTable/index.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +31 -36
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +36 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +81 -80
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +207 -113
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -2
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +20 -7
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityJsonPreview.tsx +66 -0
- package/src/components/EntityPreview.tsx +62 -52
- package/src/components/EntityView.tsx +10 -10
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/HomePage/DefaultHomePage.tsx +26 -19
- package/src/components/HomePage/FavouritesView.tsx +6 -11
- package/src/components/HomePage/NavigationCard.tsx +3 -3
- package/src/components/HomePage/NavigationCardBinding.tsx +5 -10
- package/src/components/HomePage/NavigationGroup.tsx +2 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +5 -6
- package/src/components/NotFoundPage.tsx +2 -2
- package/src/components/PropertyConfigBadge.tsx +9 -3
- package/src/components/PropertyIdCopyTooltip.tsx +47 -0
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +19 -13
- package/src/components/ReferenceWidget.tsx +21 -11
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/SelectableTable/SelectableTable.tsx +27 -12
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +25 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +36 -12
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +92 -23
- package/src/components/UnsavedChangesDialog.tsx +42 -0
- package/src/components/VirtualTable/VirtualTable.tsx +96 -48
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
- package/src/components/VirtualTable/VirtualTableHeader.tsx +10 -10
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +33 -14
- package/src/components/VirtualTable/VirtualTableRow.tsx +5 -6
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +5 -5
- package/src/components/VirtualTable/fields/VirtualTableInput.tsx +3 -2
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +33 -40
- package/src/components/common/index.ts +2 -1
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/common/types.tsx +4 -6
- package/src/components/common/useColumnsIds.tsx +24 -3
- package/src/components/common/useDataSourceTableController.tsx +420 -0
- package/src/components/common/useDebouncedCallback.tsx +20 -0
- package/src/components/common/useScrollRestoration.tsx +68 -0
- package/src/components/common/useTableSearchHelper.ts +53 -12
- package/src/components/index.tsx +4 -2
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +5 -4
- package/src/contexts/ModeController.tsx +1 -3
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +219 -0
- package/src/core/DefaultDrawer.tsx +185 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +345 -480
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +86 -17
- package/src/core/FireCMS.tsx +56 -49
- package/src/core/FireCMSRouter.tsx +17 -0
- package/src/core/NavigationRoutes.tsx +28 -38
- package/src/core/SideDialogs.tsx +22 -12
- package/src/core/field_configs.tsx +11 -12
- package/src/core/index.tsx +6 -5
- package/src/form/EntityForm.tsx +585 -539
- package/src/form/EntityFormActions.tsx +169 -0
- package/src/form/PropertyFieldBinding.tsx +85 -44
- package/src/form/components/CustomIdField.tsx +6 -2
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/FormEntry.tsx +22 -0
- package/src/form/components/FormLayout.tsx +16 -0
- package/src/form/components/LabelWithIcon.tsx +30 -19
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +22 -12
- package/src/form/components/StorageUploadProgress.tsx +4 -5
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +31 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +47 -35
- package/src/form/field_bindings/BlockFieldBinding.tsx +56 -34
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -14
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +60 -51
- package/src/form/field_bindings/MapFieldBinding.tsx +71 -54
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +25 -20
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
- package/src/form/field_bindings/RepeatFieldBinding.tsx +56 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +22 -14
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -50
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/index.tsx +16 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +13 -23
- package/src/hooks/data/delete.ts +6 -5
- package/src/hooks/data/save.ts +13 -9
- package/src/hooks/data/useCollectionFetch.tsx +3 -3
- package/src/hooks/data/useDataSource.tsx +11 -3
- package/src/hooks/data/useEntityFetch.tsx +10 -6
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +22 -29
- package/src/hooks/useBuildNavigationController.tsx +159 -54
- package/src/hooks/useFireCMSContext.tsx +5 -5
- package/src/hooks/useLargeLayout.tsx +0 -35
- package/src/hooks/useModeController.tsx +1 -2
- package/src/hooks/useProjectLog.tsx +32 -10
- package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
- package/src/hooks/useValidateAuthenticator.tsx +17 -37
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +72 -82
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +194 -73
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +17 -24
- package/src/preview/PropertyPreviewProps.tsx +7 -1
- package/src/preview/components/BooleanPreview.tsx +2 -2
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ImagePreview.tsx +25 -36
- package/src/preview/components/ReferencePreview.tsx +22 -33
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +60 -28
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -3
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -2
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +4 -5
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -5
- package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +12 -12
- package/src/preview/property_previews/StringPropertyPreview.tsx +3 -3
- package/src/preview/util.ts +10 -10
- package/src/routes/CustomCMSRoute.tsx +21 -0
- package/src/routes/FireCMSRoute.tsx +235 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +94 -27
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +61 -43
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +12 -2
- package/src/types/entity_actions.tsx +32 -7
- package/src/types/entity_callbacks.ts +18 -18
- package/src/types/entity_overrides.tsx +2 -2
- package/src/types/export_import.ts +4 -4
- package/src/types/fields.tsx +81 -46
- package/src/types/firecms.tsx +7 -2
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +0 -1
- package/src/types/navigation.ts +38 -18
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +25 -14
- package/src/types/properties.ts +60 -25
- package/src/types/property_config.tsx +0 -2
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +6 -1
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +2 -0
- package/src/util/builders.ts +10 -8
- package/src/util/entities.ts +9 -6
- package/src/util/entity_actions.ts +28 -0
- package/src/util/entity_cache.ts +204 -0
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +16 -10
- package/src/util/icon_synonyms.ts +3 -100
- package/src/util/icons.tsx +17 -7
- package/src/util/index.ts +2 -0
- package/src/util/join_collections.ts +3 -0
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_from_path.ts +13 -6
- package/src/util/navigation_utils.ts +59 -7
- package/src/util/objects.ts +48 -28
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +9 -8
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +11 -4
- package/src/util/references.ts +11 -2
- package/src/util/resolutions.ts +100 -46
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +71 -27
- package/dist/components/FireCMSAppBar.d.ts +0 -26
- package/dist/components/PropertyIdCopyTooltipContent.d.ts +0 -3
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -55
- package/dist/core/SideEntityView.d.ts +0 -7
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/src/components/FireCMSAppBar.tsx +0 -165
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
- package/src/core/Drawer.tsx +0 -191
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -695
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /package/src/util/{common.tsx → common.ts} +0 -0
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { User } from "../types";
|
|
3
|
-
export type FireCMSAppBarProps<ADDITIONAL_PROPS = object> = {
|
|
4
|
-
title: string;
|
|
5
|
-
/**
|
|
6
|
-
* A component that gets rendered on the upper side of the main toolbar
|
|
7
|
-
*/
|
|
8
|
-
endAdornment?: React.ReactNode;
|
|
9
|
-
startAdornment?: React.ReactNode;
|
|
10
|
-
dropDownActions?: React.ReactNode;
|
|
11
|
-
includeDrawer?: boolean;
|
|
12
|
-
drawerOpen: boolean;
|
|
13
|
-
className?: string;
|
|
14
|
-
style?: React.CSSProperties;
|
|
15
|
-
user?: User;
|
|
16
|
-
} & ADDITIONAL_PROPS;
|
|
17
|
-
/**
|
|
18
|
-
* This component renders the main app bar of FireCMS.
|
|
19
|
-
* You will likely not need to use this component directly.
|
|
20
|
-
*
|
|
21
|
-
* @param title
|
|
22
|
-
* @param toolbarExtraWidget
|
|
23
|
-
* @param drawerOpen
|
|
24
|
-
* @constructor
|
|
25
|
-
*/
|
|
26
|
-
export declare const FireCMSAppBar: ({ title, endAdornment, startAdornment, drawerOpen, dropDownActions, includeDrawer, className, style, user: userProp }: FireCMSAppBarProps) => import("react/jsx-runtime").JSX.Element;
|
package/dist/core/Drawer.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
/**
|
|
3
|
-
* Props used in case you need to override the default drawer
|
|
4
|
-
* @group Core
|
|
5
|
-
*/
|
|
6
|
-
export type DrawerProps<T = {}> = T & {
|
|
7
|
-
hovered: boolean;
|
|
8
|
-
drawerOpen: boolean;
|
|
9
|
-
closeDrawer: () => any;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Default drawer used in the CMS
|
|
13
|
-
* @group Core
|
|
14
|
-
*/
|
|
15
|
-
export declare function Drawer({ hovered, drawerOpen, closeDrawer }: DrawerProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
export declare function DrawerNavigationItem({ name, icon, drawerOpen, tooltipsOpen, url, onClick }: {
|
|
17
|
-
icon: React.ReactElement;
|
|
18
|
-
name: string;
|
|
19
|
-
tooltipsOpen: boolean;
|
|
20
|
-
drawerOpen: boolean;
|
|
21
|
-
url: string;
|
|
22
|
-
onClick?: () => void;
|
|
23
|
-
}): import("react/jsx-runtime").JSX.Element;
|
package/dist/core/Scaffold.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { DrawerProps } from "./Drawer";
|
|
3
|
-
import { FireCMSAppBarProps } from "../components";
|
|
4
|
-
export declare const DRAWER_WIDTH = 280;
|
|
5
|
-
/**
|
|
6
|
-
* @group Core
|
|
7
|
-
*/
|
|
8
|
-
export interface ScaffoldProps<ExtraDrawerProps = object, ExtraAppbarProps = object> {
|
|
9
|
-
/**
|
|
10
|
-
* Name of the app, displayed as the main title and in the tab title
|
|
11
|
-
*/
|
|
12
|
-
name: string;
|
|
13
|
-
/**
|
|
14
|
-
* Logo to be displayed in the drawer of the CMS
|
|
15
|
-
*/
|
|
16
|
-
logo?: string;
|
|
17
|
-
/**
|
|
18
|
-
* Whether to include the drawer in the scaffold
|
|
19
|
-
*/
|
|
20
|
-
includeDrawer?: boolean;
|
|
21
|
-
/**
|
|
22
|
-
* In case you need to override the view that gets rendered as a drawer
|
|
23
|
-
* @see DefaultDrawer
|
|
24
|
-
*/
|
|
25
|
-
Drawer?: React.ComponentType<DrawerProps<ExtraDrawerProps>>;
|
|
26
|
-
/**
|
|
27
|
-
* Additional props passed to the custom Drawer
|
|
28
|
-
*/
|
|
29
|
-
drawerProps?: Partial<DrawerProps> & ExtraDrawerProps;
|
|
30
|
-
/**
|
|
31
|
-
* Open the drawer on hover
|
|
32
|
-
*/
|
|
33
|
-
autoOpenDrawer?: boolean;
|
|
34
|
-
/**
|
|
35
|
-
* A component that gets rendered on the upper side of the main toolbar.
|
|
36
|
-
* `toolbarExtraWidget` has no effect if this is set.
|
|
37
|
-
*/
|
|
38
|
-
FireCMSAppBar?: React.ComponentType<FireCMSAppBarProps<ExtraAppbarProps>>;
|
|
39
|
-
/**
|
|
40
|
-
* Additional props passed to the custom AppBar
|
|
41
|
-
*/
|
|
42
|
-
fireCMSAppBarProps?: Partial<FireCMSAppBarProps> & ExtraAppbarProps;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* This view acts as a scaffold for FireCMS.
|
|
46
|
-
*
|
|
47
|
-
* It is in charge of displaying the navigation drawer, top bar and main
|
|
48
|
-
* collection views.
|
|
49
|
-
* This component needs a parent {@link FireCMS}
|
|
50
|
-
*
|
|
51
|
-
* @param props
|
|
52
|
-
* @constructor
|
|
53
|
-
* @group Core
|
|
54
|
-
*/
|
|
55
|
-
export declare const Scaffold: React.NamedExoticComponent<React.PropsWithChildren<ScaffoldProps<object, object>>>;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { User } from "../types";
|
|
2
|
-
import { EntityEditViewProps } from "./EntityEditView";
|
|
3
|
-
export type SideEntityViewProps<M extends Record<string, any>> = EntityEditViewProps<M> & {
|
|
4
|
-
formWidth?: number | string;
|
|
5
|
-
onClose?: () => void;
|
|
6
|
-
};
|
|
7
|
-
export declare function SideEntityView<M extends Record<string, any>, UserType extends User>({ path, entityId, selectedSubPath, copy, collection, parentCollectionIds, onValuesAreModified, formWidth, onUpdate, onClose }: SideEntityViewProps<M>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
interface ArrayContainerProps<T> {
|
|
3
|
-
value: T[];
|
|
4
|
-
name: string;
|
|
5
|
-
addLabel: string;
|
|
6
|
-
buildEntry: (index: number, internalId: number) => React.ReactNode;
|
|
7
|
-
disabled?: boolean;
|
|
8
|
-
small?: boolean;
|
|
9
|
-
onInternalIdAdded?: (id: number) => void;
|
|
10
|
-
includeAddButton?: boolean;
|
|
11
|
-
newDefaultEntry?: T | null;
|
|
12
|
-
setFieldValue: (field: string, value: any, shouldValidate?: boolean | undefined) => void;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* @group Form custom fields
|
|
16
|
-
*/
|
|
17
|
-
export declare function FormikArrayContainer<T>({ name, addLabel, value, disabled, buildEntry, small, onInternalIdAdded, includeAddButton, newDefaultEntry, setFieldValue }: ArrayContainerProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
18
|
-
export {};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { FieldProps } from "../../types";
|
|
2
|
-
/**
|
|
3
|
-
* Render a markdown field that allows edition and seeing the preview.
|
|
4
|
-
*
|
|
5
|
-
* This is one of the internal components that get mapped natively inside forms
|
|
6
|
-
* and tables to the specified properties.
|
|
7
|
-
* @group Form fields
|
|
8
|
-
*/
|
|
9
|
-
export declare function MarkdownFieldBinding({ propertyKey, value, setValue, error, showError, disabled, autoFocus, touched, property, tableMode, includeDescription, context }: FieldProps<string>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function useLocaleConfig(locale?: string): void;
|
package/dist/types/appcheck.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { FirebaseApp } from "firebase/app";
|
|
2
|
-
/**
|
|
3
|
-
* @group Firebase
|
|
4
|
-
*/
|
|
5
|
-
export interface AppCheck {
|
|
6
|
-
firebaseApp?: FirebaseApp;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* @group Firebase
|
|
10
|
-
*/
|
|
11
|
-
export interface AppCheckOptions {
|
|
12
|
-
providerKey: string;
|
|
13
|
-
useEnterpriseRecaptcha: boolean;
|
|
14
|
-
isTokenAutoRefreshEnabled?: boolean;
|
|
15
|
-
debugToken?: string;
|
|
16
|
-
forceRefresh?: boolean;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* @group Firebase
|
|
20
|
-
*/
|
|
21
|
-
export declare interface AppCheckTokenResult {
|
|
22
|
-
/**
|
|
23
|
-
* The token string in JWT format.
|
|
24
|
-
*/
|
|
25
|
-
readonly token: string;
|
|
26
|
-
}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
|
|
3
|
-
import { Link as ReactLink } from "react-router-dom";
|
|
4
|
-
import { ErrorBoundary } from "../components";
|
|
5
|
-
import {
|
|
6
|
-
Avatar,
|
|
7
|
-
cn,
|
|
8
|
-
DarkModeIcon,
|
|
9
|
-
IconButton,
|
|
10
|
-
LightModeIcon,
|
|
11
|
-
LogoutIcon,
|
|
12
|
-
Menu,
|
|
13
|
-
MenuItem,
|
|
14
|
-
Skeleton,
|
|
15
|
-
Typography
|
|
16
|
-
} from "@firecms/ui";
|
|
17
|
-
import { useAuthController, useLargeLayout, useModeController, useNavigationController } from "../hooks";
|
|
18
|
-
import { User } from "../types";
|
|
19
|
-
|
|
20
|
-
export type FireCMSAppBarProps<ADDITIONAL_PROPS = object> = {
|
|
21
|
-
title: string;
|
|
22
|
-
/**
|
|
23
|
-
* A component that gets rendered on the upper side of the main toolbar
|
|
24
|
-
*/
|
|
25
|
-
endAdornment?: React.ReactNode;
|
|
26
|
-
|
|
27
|
-
startAdornment?: React.ReactNode;
|
|
28
|
-
|
|
29
|
-
dropDownActions?: React.ReactNode;
|
|
30
|
-
|
|
31
|
-
includeDrawer?: boolean;
|
|
32
|
-
|
|
33
|
-
drawerOpen: boolean;
|
|
34
|
-
|
|
35
|
-
className?: string;
|
|
36
|
-
|
|
37
|
-
style?: React.CSSProperties;
|
|
38
|
-
|
|
39
|
-
user?: User;
|
|
40
|
-
} & ADDITIONAL_PROPS;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* This component renders the main app bar of FireCMS.
|
|
44
|
-
* You will likely not need to use this component directly.
|
|
45
|
-
*
|
|
46
|
-
* @param title
|
|
47
|
-
* @param toolbarExtraWidget
|
|
48
|
-
* @param drawerOpen
|
|
49
|
-
* @constructor
|
|
50
|
-
*/
|
|
51
|
-
export const FireCMSAppBar = function FireCMSAppBar({
|
|
52
|
-
title,
|
|
53
|
-
endAdornment,
|
|
54
|
-
startAdornment,
|
|
55
|
-
drawerOpen,
|
|
56
|
-
dropDownActions,
|
|
57
|
-
includeDrawer,
|
|
58
|
-
className,
|
|
59
|
-
style,
|
|
60
|
-
user: userProp
|
|
61
|
-
}: FireCMSAppBarProps) {
|
|
62
|
-
const navigation = useNavigationController();
|
|
63
|
-
|
|
64
|
-
const authController = useAuthController();
|
|
65
|
-
const {
|
|
66
|
-
mode,
|
|
67
|
-
toggleMode
|
|
68
|
-
} = useModeController();
|
|
69
|
-
|
|
70
|
-
const largeLayout = useLargeLayout();
|
|
71
|
-
|
|
72
|
-
const user = userProp ?? authController.user;
|
|
73
|
-
|
|
74
|
-
let avatarComponent: JSX.Element;
|
|
75
|
-
if (user && user.photoURL) {
|
|
76
|
-
avatarComponent = <Avatar
|
|
77
|
-
src={user.photoURL}/>;
|
|
78
|
-
} else if (user === undefined || authController.initialLoading) {
|
|
79
|
-
avatarComponent = <div className={"p-1 flex justify-center"}>
|
|
80
|
-
<Skeleton className={"w-10 h-10 rounded-full"}/>
|
|
81
|
-
</div>;
|
|
82
|
-
} else {
|
|
83
|
-
const initial = user?.displayName
|
|
84
|
-
? user.displayName[0].toUpperCase()
|
|
85
|
-
: (user?.email ? user.email[0].toUpperCase() : "A");
|
|
86
|
-
avatarComponent = <Avatar>{initial}</Avatar>;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return (
|
|
90
|
-
<div
|
|
91
|
-
style={style}
|
|
92
|
-
className={cn("pr-2",
|
|
93
|
-
{
|
|
94
|
-
"ml-[17rem]": drawerOpen && largeLayout,
|
|
95
|
-
"ml-16": includeDrawer && !(drawerOpen && largeLayout) && !startAdornment,
|
|
96
|
-
"h-16": true,
|
|
97
|
-
"z-10": largeLayout,
|
|
98
|
-
"transition-all": true,
|
|
99
|
-
"ease-in": true,
|
|
100
|
-
"duration-75": true,
|
|
101
|
-
"w-full": !includeDrawer,
|
|
102
|
-
"w-[calc(100%-64px)]": includeDrawer && !(drawerOpen && largeLayout),
|
|
103
|
-
"w-[calc(100%-17rem)]": includeDrawer && (drawerOpen && largeLayout),
|
|
104
|
-
"duration-150": drawerOpen && largeLayout,
|
|
105
|
-
fixed: true,
|
|
106
|
-
},
|
|
107
|
-
className)}>
|
|
108
|
-
|
|
109
|
-
<div className="flex flex-row gap-2 px-4 h-full items-center">
|
|
110
|
-
|
|
111
|
-
{startAdornment}
|
|
112
|
-
|
|
113
|
-
{navigation && <div className="mr-8 hidden lg:block">
|
|
114
|
-
<ReactLink
|
|
115
|
-
className="visited:text-inherit visited:dark:text-inherit"
|
|
116
|
-
to={navigation?.basePath ?? "/"}
|
|
117
|
-
>
|
|
118
|
-
<Typography variant="subtitle1"
|
|
119
|
-
noWrap
|
|
120
|
-
className={"ml-2 !font-medium"}>
|
|
121
|
-
{title}
|
|
122
|
-
</Typography>
|
|
123
|
-
</ReactLink>
|
|
124
|
-
</div>}
|
|
125
|
-
|
|
126
|
-
<div className={"flex-grow"}/>
|
|
127
|
-
|
|
128
|
-
{endAdornment &&
|
|
129
|
-
<ErrorBoundary>
|
|
130
|
-
{endAdornment}
|
|
131
|
-
</ErrorBoundary>}
|
|
132
|
-
|
|
133
|
-
<IconButton
|
|
134
|
-
color="inherit"
|
|
135
|
-
aria-label="Open drawer"
|
|
136
|
-
onClick={toggleMode}
|
|
137
|
-
size="large">
|
|
138
|
-
{mode === "dark"
|
|
139
|
-
? <DarkModeIcon/>
|
|
140
|
-
: <LightModeIcon/>}
|
|
141
|
-
</IconButton>
|
|
142
|
-
|
|
143
|
-
<Menu trigger={avatarComponent}>
|
|
144
|
-
{user && <div className={"px-4 py-2 mb-2"}>
|
|
145
|
-
{user.displayName && <Typography variant={"body1"} color={"secondary"}>
|
|
146
|
-
{user.displayName}
|
|
147
|
-
</Typography>}
|
|
148
|
-
{user.email && <Typography variant={"body2"} color={"secondary"}>
|
|
149
|
-
{user.email}
|
|
150
|
-
</Typography>}
|
|
151
|
-
</div>}
|
|
152
|
-
|
|
153
|
-
{dropDownActions}
|
|
154
|
-
|
|
155
|
-
{!dropDownActions && <MenuItem onClick={authController.signOut}>
|
|
156
|
-
<LogoutIcon/>
|
|
157
|
-
Log Out
|
|
158
|
-
</MenuItem>}
|
|
159
|
-
|
|
160
|
-
</Menu>
|
|
161
|
-
|
|
162
|
-
</div>
|
|
163
|
-
</div>
|
|
164
|
-
);
|
|
165
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { ContentPasteIcon, IconButton, Typography } from "@firecms/ui";
|
|
2
|
-
import { useCallback, useState } from "react";
|
|
3
|
-
|
|
4
|
-
export function PropertyIdCopyTooltipContent({ propertyId }: { propertyId: string }) {
|
|
5
|
-
|
|
6
|
-
const [copied, setCopied] = useState(false);
|
|
7
|
-
|
|
8
|
-
return (
|
|
9
|
-
<div className={"flex flex-row gap-2 items-center justify-center text-white"}>
|
|
10
|
-
<div>
|
|
11
|
-
<Typography variant={"caption"} className={"min-w-20 text-slate-400"}
|
|
12
|
-
color={"disabled"}>{copied ? "Copied" : "Property ID"}</Typography>
|
|
13
|
-
<Typography variant={"caption"} className={"text-white"}><code>{propertyId}</code></Typography>
|
|
14
|
-
</div>
|
|
15
|
-
{/* Copy to clipboard button*/}
|
|
16
|
-
<IconButton size={"small"}>
|
|
17
|
-
<ContentPasteIcon size={"smallest"}
|
|
18
|
-
className={"text-white"}
|
|
19
|
-
onClick={useCallback(() => {
|
|
20
|
-
navigator.clipboard.writeText(propertyId);
|
|
21
|
-
setCopied(true);
|
|
22
|
-
setTimeout(() => setCopied(false), 2000);
|
|
23
|
-
}, [propertyId])}
|
|
24
|
-
/>
|
|
25
|
-
</IconButton>
|
|
26
|
-
</div>
|
|
27
|
-
);
|
|
28
|
-
}
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
-
|
|
3
|
-
import { useDataSource, useFireCMSContext, useNavigationController } from "../../hooks";
|
|
4
|
-
import { useDataOrder } from "../../hooks/data/useDataOrder";
|
|
5
|
-
import {
|
|
6
|
-
Entity,
|
|
7
|
-
EntityCollection,
|
|
8
|
-
EntityTableController,
|
|
9
|
-
FilterValues,
|
|
10
|
-
FireCMSContext,
|
|
11
|
-
SelectedCellProps,
|
|
12
|
-
User
|
|
13
|
-
} from "../../types";
|
|
14
|
-
import { useDebouncedData } from "./useDebouncedData";
|
|
15
|
-
|
|
16
|
-
const DEFAULT_PAGE_SIZE = 50;
|
|
17
|
-
|
|
18
|
-
export type DataSourceEntityCollectionTableControllerProps<M extends Record<string, any> = any> = {
|
|
19
|
-
/**
|
|
20
|
-
* Full path where the data of this table is located
|
|
21
|
-
*/
|
|
22
|
-
fullPath: string;
|
|
23
|
-
/**
|
|
24
|
-
* The collection that is represented by this config.
|
|
25
|
-
*/
|
|
26
|
-
collection: EntityCollection<M>;
|
|
27
|
-
/**
|
|
28
|
-
* List of entities that will be displayed on top, no matter the ordering.
|
|
29
|
-
* This is used for reference fields selection
|
|
30
|
-
*/
|
|
31
|
-
entitiesDisplayedFirst?: Entity<M>[];
|
|
32
|
-
|
|
33
|
-
lastDeleteTimestamp?: number;
|
|
34
|
-
forceFilter?: FilterValues<string>;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Use this hook to build a controller for the {@link EntityCollectionTable}.
|
|
39
|
-
* This controller is bound to data in a path in your specified datasource.
|
|
40
|
-
*
|
|
41
|
-
* Note that you can build your own hook returning a {@link EntityTableController}
|
|
42
|
-
* if you would like to display different data.
|
|
43
|
-
*
|
|
44
|
-
* @param fullPath
|
|
45
|
-
* @param collection
|
|
46
|
-
* @param entitiesDisplayedFirst
|
|
47
|
-
* @param lastDeleteTimestamp
|
|
48
|
-
* @param forceFilterFromProps
|
|
49
|
-
*/
|
|
50
|
-
export function useDataSourceEntityCollectionTableController<M extends Record<string, any> = any, UserType extends User = User>(
|
|
51
|
-
{
|
|
52
|
-
fullPath,
|
|
53
|
-
collection,
|
|
54
|
-
entitiesDisplayedFirst,
|
|
55
|
-
lastDeleteTimestamp,
|
|
56
|
-
forceFilter: forceFilterFromProps,
|
|
57
|
-
}: DataSourceEntityCollectionTableControllerProps<M>)
|
|
58
|
-
: EntityTableController<M> {
|
|
59
|
-
|
|
60
|
-
const {
|
|
61
|
-
initialFilter,
|
|
62
|
-
initialSort,
|
|
63
|
-
forceFilter: forceFilterFromCollection
|
|
64
|
-
} = collection;
|
|
65
|
-
|
|
66
|
-
const [popupCell, setPopupCell] = React.useState<SelectedCellProps<M> | undefined>(undefined);
|
|
67
|
-
const navigation = useNavigationController();
|
|
68
|
-
const dataSource = useDataSource(collection);
|
|
69
|
-
const resolvedPath = useMemo(() => navigation.resolveAliasesFrom(fullPath), [fullPath, navigation.resolveAliasesFrom]);
|
|
70
|
-
|
|
71
|
-
const forceFilter = forceFilterFromProps ?? forceFilterFromCollection;
|
|
72
|
-
const paginationEnabled = collection.pagination === undefined || Boolean(collection.pagination);
|
|
73
|
-
const pageSize = typeof collection.pagination === "number" ? collection.pagination : DEFAULT_PAGE_SIZE;
|
|
74
|
-
|
|
75
|
-
const [searchString, setSearchString] = React.useState<string | undefined>();
|
|
76
|
-
const [itemCount, setItemCount] = React.useState<number | undefined>(paginationEnabled ? pageSize : undefined);
|
|
77
|
-
|
|
78
|
-
const initialSortInternal = useMemo(() => {
|
|
79
|
-
if (initialSort && forceFilter && !checkFilterCombination(forceFilter, initialSort)) {
|
|
80
|
-
console.warn("Initial sort is not compatible with the force filter. Ignoring initial sort");
|
|
81
|
-
return undefined;
|
|
82
|
-
}
|
|
83
|
-
return initialSort;
|
|
84
|
-
}, [initialSort, forceFilter]);
|
|
85
|
-
|
|
86
|
-
const [filterValues, setFilterValues] = React.useState<FilterValues<Extract<keyof M, string>> | undefined>(forceFilter ?? initialFilter ?? undefined);
|
|
87
|
-
const [sortBy, setSortBy] = React.useState<[Extract<keyof M, string>, "asc" | "desc"] | undefined>(initialSortInternal);
|
|
88
|
-
|
|
89
|
-
const sortByProperty = sortBy ? sortBy[0] : undefined;
|
|
90
|
-
const currentSort = sortBy ? sortBy[1] : undefined;
|
|
91
|
-
|
|
92
|
-
const context: FireCMSContext<UserType> = useFireCMSContext();
|
|
93
|
-
|
|
94
|
-
const [rawData, setRawData] = useState<Entity<M>[]>([]);
|
|
95
|
-
|
|
96
|
-
const [dataLoading, setDataLoading] = useState<boolean>(false);
|
|
97
|
-
const [dataLoadingError, setDataLoadingError] = useState<Error | undefined>();
|
|
98
|
-
const [noMoreToLoad, setNoMoreToLoad] = useState<boolean>(false);
|
|
99
|
-
|
|
100
|
-
const checkFilterCombination = useCallback((filterValues: FilterValues<any>,
|
|
101
|
-
sortBy?: [string, "asc" | "desc"]) => {
|
|
102
|
-
if (!dataSource.isFilterCombinationValid)
|
|
103
|
-
return true;
|
|
104
|
-
return dataSource.isFilterCombinationValid({
|
|
105
|
-
path: resolvedPath,
|
|
106
|
-
collection,
|
|
107
|
-
filterValues,
|
|
108
|
-
sortBy
|
|
109
|
-
})
|
|
110
|
-
}, []);
|
|
111
|
-
|
|
112
|
-
const clearFilter = useCallback(() => setFilterValues(forceFilter ?? undefined), [forceFilter]);
|
|
113
|
-
|
|
114
|
-
const updateFilterValues = useCallback((updatedFilter: FilterValues<Extract<keyof M, string>> | undefined) => {
|
|
115
|
-
if (forceFilter) {
|
|
116
|
-
console.warn("Filter is not compatible with the force filter. Ignoring filter");
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
if (updatedFilter && Object.keys(updatedFilter).length === 0) {
|
|
120
|
-
setFilterValues(undefined);
|
|
121
|
-
} else {
|
|
122
|
-
setFilterValues(updatedFilter);
|
|
123
|
-
}
|
|
124
|
-
}, [forceFilter]);
|
|
125
|
-
|
|
126
|
-
useEffect(() => {
|
|
127
|
-
|
|
128
|
-
setDataLoading(true);
|
|
129
|
-
|
|
130
|
-
const onEntitiesUpdate = async (entities: Entity<M>[]) => {
|
|
131
|
-
if (collection.callbacks?.onFetch) {
|
|
132
|
-
try {
|
|
133
|
-
entities = await Promise.all(
|
|
134
|
-
entities.map((entity) =>
|
|
135
|
-
collection.callbacks!.onFetch!({
|
|
136
|
-
collection,
|
|
137
|
-
path: resolvedPath,
|
|
138
|
-
entity,
|
|
139
|
-
context
|
|
140
|
-
})));
|
|
141
|
-
} catch (e: any) {
|
|
142
|
-
console.error(e);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
setDataLoading(false);
|
|
146
|
-
setDataLoadingError(undefined);
|
|
147
|
-
setRawData(entities.map(e => ({
|
|
148
|
-
...e,
|
|
149
|
-
// values: sanitizeData(e.values, resolvedCollection.properties)
|
|
150
|
-
})));
|
|
151
|
-
setNoMoreToLoad(!itemCount || entities.length < itemCount);
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
const onError = (error: Error) => {
|
|
155
|
-
console.error("ERROR", error);
|
|
156
|
-
setDataLoading(false);
|
|
157
|
-
setRawData([]);
|
|
158
|
-
setDataLoadingError(error);
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
if (dataSource.listenCollection) {
|
|
162
|
-
return dataSource.listenCollection<M>({
|
|
163
|
-
path: resolvedPath,
|
|
164
|
-
collection,
|
|
165
|
-
onUpdate: onEntitiesUpdate,
|
|
166
|
-
onError,
|
|
167
|
-
searchString,
|
|
168
|
-
filter: filterValues,
|
|
169
|
-
limit: itemCount,
|
|
170
|
-
startAfter: undefined,
|
|
171
|
-
orderBy: sortByProperty,
|
|
172
|
-
order: currentSort
|
|
173
|
-
});
|
|
174
|
-
} else {
|
|
175
|
-
dataSource.fetchCollection<M>({
|
|
176
|
-
path: resolvedPath,
|
|
177
|
-
collection,
|
|
178
|
-
searchString,
|
|
179
|
-
filter: filterValues,
|
|
180
|
-
limit: itemCount,
|
|
181
|
-
startAfter: undefined,
|
|
182
|
-
orderBy: sortByProperty,
|
|
183
|
-
order: currentSort
|
|
184
|
-
})
|
|
185
|
-
.then(onEntitiesUpdate)
|
|
186
|
-
.catch(onError);
|
|
187
|
-
return () => {
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
}, [resolvedPath, itemCount, currentSort, sortByProperty, filterValues, searchString]);
|
|
191
|
-
|
|
192
|
-
const orderedData = useDataOrder({
|
|
193
|
-
data: rawData,
|
|
194
|
-
entitiesDisplayedFirst
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
// hack to fix Firestore listeners firing with incomplete data
|
|
198
|
-
const data = useDebouncedData(orderedData, {
|
|
199
|
-
filterValues,
|
|
200
|
-
sortBy,
|
|
201
|
-
searchString,
|
|
202
|
-
lastDeleteTimestamp
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
return {
|
|
206
|
-
data,
|
|
207
|
-
dataLoading,
|
|
208
|
-
noMoreToLoad,
|
|
209
|
-
dataLoadingError,
|
|
210
|
-
filterValues,
|
|
211
|
-
setFilterValues: updateFilterValues,
|
|
212
|
-
sortBy,
|
|
213
|
-
setSortBy,
|
|
214
|
-
searchString,
|
|
215
|
-
setSearchString,
|
|
216
|
-
clearFilter,
|
|
217
|
-
itemCount,
|
|
218
|
-
setItemCount,
|
|
219
|
-
paginationEnabled,
|
|
220
|
-
pageSize,
|
|
221
|
-
checkFilterCombination,
|
|
222
|
-
popupCell,
|
|
223
|
-
setPopupCell
|
|
224
|
-
}
|
|
225
|
-
}
|