@firecms/core 3.0.0-canary.2 → 3.0.0-canary.200
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 +4 -4
- 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 +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 +3 -3
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +22 -6
- 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 +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 +17 -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/PropertyConfigBadge.d.ts +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/ReferenceWidget.d.ts +6 -4
- 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 +29 -13
- 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 +8 -5
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- 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 +44 -0
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +2 -2
- 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 -6
- package/dist/form/EntityForm.d.ts +45 -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/{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 +4 -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 -4
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
- package/dist/form/index.d.ts +17 -18
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/form/validation.d.ts +1 -1
- 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/useDataSource.d.ts +2 -2
- package/dist/hooks/data/useEntityFetch.d.ts +4 -3
- package/dist/hooks/index.d.ts +4 -1
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
- package/dist/hooks/useBuildNavigationController.d.ts +11 -6
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useModeController.d.ts +1 -2
- package/dist/hooks/useProjectLog.d.ts +12 -2
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- 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 +22131 -14039
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +24420 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -12
- package/dist/internal/useUnsavedChangesDialog.d.ts +7 -9
- 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/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/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +37 -3
- package/dist/types/collections.d.ts +86 -24
- package/dist/types/datasource.d.ts +53 -37
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +8 -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 +6 -0
- 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 +2 -1
- package/dist/types/navigation.d.ts +45 -26
- package/dist/types/permissions.d.ts +8 -4
- package/dist/types/plugins.d.ts +40 -31
- package/dist/types/properties.d.ts +54 -26
- package/dist/types/property_config.d.ts +2 -4
- package/dist/types/roles.d.ts +31 -0
- 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 +6 -0
- package/dist/util/builders.d.ts +3 -3
- package/dist/util/collections.d.ts +9 -1
- 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 +13 -4
- 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/references.d.ts +4 -2
- package/dist/util/resolutions.d.ts +31 -17
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +64 -51
- 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 +126 -40
- 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 +14 -23
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +56 -39
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +283 -280
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +29 -8
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +58 -50
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +40 -33
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +22 -20
- 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 +228 -155
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +9 -8
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +43 -0
- package/src/components/EntityCollectionView/utils.ts +19 -0
- package/src/components/EntityPreview.tsx +218 -71
- package/src/components/EntityView.tsx +84 -0
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/HomePage/DefaultHomePage.tsx +39 -28
- package/src/components/HomePage/FavouritesView.tsx +6 -11
- package/src/components/HomePage/NavigationCard.tsx +69 -0
- package/src/components/HomePage/NavigationCardBinding.tsx +111 -0
- package/src/components/HomePage/NavigationGroup.tsx +2 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +44 -0
- package/src/components/HomePage/index.tsx +3 -1
- 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 +22 -17
- package/src/components/ReferenceWidget.tsx +26 -16
- 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 +46 -30
- 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 +34 -15
- 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 +40 -43
- 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 +8 -5
- package/src/contexts/AuthControllerContext.tsx +1 -1
- 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 +207 -0
- package/src/core/DefaultDrawer.tsx +185 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +455 -0
- package/src/core/EntityEditViewFormActions.tsx +199 -0
- package/src/core/EntitySidePanel.tsx +87 -18
- package/src/core/FireCMS.tsx +67 -44
- package/src/core/FireCMSRouter.tsx +17 -0
- package/src/core/NavigationRoutes.tsx +36 -38
- package/src/core/SideDialogs.tsx +22 -12
- package/src/core/field_configs.tsx +11 -12
- package/src/core/index.tsx +6 -7
- package/src/form/EntityForm.tsx +565 -519
- 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 +44 -0
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +23 -11
- package/src/form/components/StorageUploadProgress.tsx +9 -9
- package/src/form/components/index.tsx +4 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +32 -21
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +54 -45
- package/src/form/field_bindings/BlockFieldBinding.tsx +57 -36
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +21 -17
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +76 -67
- package/src/form/field_bindings/MapFieldBinding.tsx +82 -65
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +153 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -17
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +47 -34
- package/src/form/field_bindings/RepeatFieldBinding.tsx +57 -36
- package/src/form/field_bindings/SelectFieldBinding.tsx +24 -17
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +47 -46
- package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -27
- package/src/form/field_bindings/TextFieldBinding.tsx +35 -30
- package/src/form/index.tsx +17 -37
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +15 -26
- package/src/hooks/data/delete.ts +7 -6
- package/src/hooks/data/save.ts +13 -9
- package/src/hooks/data/useCollectionFetch.tsx +4 -4
- package/src/hooks/data/useDataSource.tsx +15 -2
- package/src/hooks/data/useEntityFetch.tsx +11 -7
- package/src/hooks/index.tsx +6 -1
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/{core → hooks}/useBuildModeController.tsx +23 -30
- package/src/hooks/useBuildNavigationController.tsx +278 -117
- 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 +41 -9
- package/src/hooks/useReferenceDialog.tsx +2 -2
- package/src/hooks/useResolvedNavigationFrom.tsx +10 -12
- 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 +72 -77
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +177 -70
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +19 -26
- package/src/preview/PropertyPreviewProps.tsx +5 -9
- package/src/preview/components/BooleanPreview.tsx +19 -4
- 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 +73 -176
- 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 +8 -7
- package/src/preview/util.ts +10 -10
- package/src/routes/CustomCMSRoute.tsx +21 -0
- package/src/routes/FireCMSRoute.tsx +236 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/analytics.ts +1 -0
- package/src/types/auth.tsx +48 -3
- package/src/types/collections.ts +102 -27
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +62 -44
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +16 -2
- package/src/types/entity_actions.tsx +33 -4
- package/src/types/entity_callbacks.ts +18 -18
- package/src/types/entity_overrides.tsx +7 -0
- package/src/types/export_import.ts +4 -4
- package/src/types/fields.tsx +81 -46
- package/src/types/firecms.tsx +6 -2
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +2 -1
- package/src/types/navigation.ts +52 -31
- package/src/types/permissions.ts +10 -5
- package/src/types/plugins.tsx +47 -39
- package/src/types/properties.ts +63 -27
- package/src/types/property_config.tsx +2 -4
- package/src/types/roles.ts +41 -0
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +7 -1
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +9 -0
- package/src/util/builders.ts +10 -8
- package/src/util/collections.ts +22 -0
- 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 +26 -8
- 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 +45 -28
- package/src/util/parent_references_from_path.ts +3 -3
- package/src/util/permissions.ts +20 -16
- package/src/util/plurals.ts +0 -2
- package/src/util/property_utils.tsx +11 -4
- package/src/util/references.ts +45 -5
- package/src/util/resolutions.ts +79 -46
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +71 -27
- package/src/util/useTraceUpdate.tsx +2 -1
- 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/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/internal/EntityView.d.ts +0 -22
- 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 -157
- package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
- package/src/components/LabelWithIcon.tsx +0 -33
- package/src/components/PropertyIdCopyTooltipContent.tsx +0 -28
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +0 -225
- package/src/core/Drawer.tsx +0 -164
- package/src/core/Scaffold.tsx +0 -281
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
- 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/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
- /package/src/util/{common.tsx → common.ts} +0 -0
|
@@ -4,18 +4,18 @@ import { Entity, EntityCollection, EntityReference, FilterValues } from "../type
|
|
|
4
4
|
import { getReferenceFrom } from "../util";
|
|
5
5
|
import { PreviewSize, ReferencePreview } from "../preview";
|
|
6
6
|
import { useNavigationController, useReferenceDialog } from "../hooks";
|
|
7
|
-
import { Button,
|
|
7
|
+
import { Button, cls } from "@firecms/ui";
|
|
8
8
|
|
|
9
9
|
export type ReferenceWidgetProps<M extends Record<string, any>> = {
|
|
10
10
|
name?: string,
|
|
11
11
|
multiselect?: boolean,
|
|
12
|
-
value: EntityReference
|
|
12
|
+
value: EntityReference | EntityReference[] | null,
|
|
13
13
|
onReferenceSelected?: (params: {
|
|
14
|
-
reference: EntityReference
|
|
14
|
+
reference: EntityReference | null,
|
|
15
15
|
entity: Entity<M> | null
|
|
16
16
|
}) => void,
|
|
17
17
|
onMultipleReferenceSelected?: (params: {
|
|
18
|
-
references: EntityReference
|
|
18
|
+
references: EntityReference[] | null,
|
|
19
19
|
entities: Entity<M>[] | null
|
|
20
20
|
}) => void,
|
|
21
21
|
path: string,
|
|
@@ -27,6 +27,8 @@ export type ReferenceWidgetProps<M extends Record<string, any>> = {
|
|
|
27
27
|
forceFilter?: FilterValues<string>;
|
|
28
28
|
size: PreviewSize;
|
|
29
29
|
className?: string;
|
|
30
|
+
includeId?: boolean;
|
|
31
|
+
includeEntityLink?: boolean;
|
|
30
32
|
};
|
|
31
33
|
|
|
32
34
|
/**
|
|
@@ -43,25 +45,26 @@ export function ReferenceWidget<M extends Record<string, any>>({
|
|
|
43
45
|
previewProperties,
|
|
44
46
|
forceFilter,
|
|
45
47
|
size,
|
|
46
|
-
className
|
|
48
|
+
className,
|
|
49
|
+
includeId,
|
|
50
|
+
includeEntityLink
|
|
47
51
|
}: ReferenceWidgetProps<M>) {
|
|
48
52
|
|
|
49
53
|
const navigationController = useNavigationController();
|
|
50
54
|
|
|
51
55
|
const collection: EntityCollection | undefined = useMemo(() => {
|
|
52
56
|
return navigationController.getCollection(path);
|
|
53
|
-
}, [path, navigationController]);
|
|
54
|
-
|
|
55
|
-
if (!collection) {
|
|
56
|
-
throw Error(`Couldn't find the corresponding collection for the path: ${path}`);
|
|
57
|
-
}
|
|
57
|
+
}, [path, navigationController.getCollection]);
|
|
58
58
|
|
|
59
59
|
const onSingleEntitySelected = useCallback((entity: Entity<M> | null) => {
|
|
60
60
|
if (disabled)
|
|
61
61
|
return;
|
|
62
62
|
if (onReferenceSelected) {
|
|
63
63
|
const reference = entity ? getReferenceFrom(entity) : null;
|
|
64
|
-
onReferenceSelected?.({
|
|
64
|
+
onReferenceSelected?.({
|
|
65
|
+
reference,
|
|
66
|
+
entity
|
|
67
|
+
});
|
|
65
68
|
}
|
|
66
69
|
}, [disabled, onReferenceSelected]);
|
|
67
70
|
|
|
@@ -70,7 +73,10 @@ export function ReferenceWidget<M extends Record<string, any>>({
|
|
|
70
73
|
return;
|
|
71
74
|
if (onMultipleReferenceSelected) {
|
|
72
75
|
const references = entities ? entities.map(e => getReferenceFrom(e)) : null;
|
|
73
|
-
onMultipleReferenceSelected({
|
|
76
|
+
onMultipleReferenceSelected({
|
|
77
|
+
references,
|
|
78
|
+
entities
|
|
79
|
+
});
|
|
74
80
|
}
|
|
75
81
|
}, [disabled, onReferenceSelected]);
|
|
76
82
|
|
|
@@ -110,19 +116,23 @@ export function ReferenceWidget<M extends Record<string, any>>({
|
|
|
110
116
|
reference={ref}
|
|
111
117
|
disabled={disabled}
|
|
112
118
|
previewProperties={previewProperties}
|
|
113
|
-
size={size}
|
|
119
|
+
size={size}
|
|
120
|
+
includeId={includeId}
|
|
121
|
+
includeEntityLink={includeEntityLink}/>
|
|
114
122
|
})}
|
|
115
123
|
</div>
|
|
116
|
-
} else if (value
|
|
124
|
+
} else if (value?.isEntityReference && value?.isEntityReference()) {
|
|
117
125
|
child = <ReferencePreview
|
|
118
126
|
reference={value}
|
|
119
127
|
onClick={onEntryClick}
|
|
120
128
|
disabled={disabled}
|
|
121
129
|
previewProperties={previewProperties}
|
|
122
|
-
size={size}
|
|
130
|
+
size={size}
|
|
131
|
+
includeId={includeId}
|
|
132
|
+
includeEntityLink={includeEntityLink}/>
|
|
123
133
|
|
|
124
134
|
}
|
|
125
|
-
return <div className={
|
|
135
|
+
return <div className={cls("text-sm font-medium",
|
|
126
136
|
"min-w-80 flex flex-col gap-4",
|
|
127
137
|
"relative transition-colors duration-200 ease-in rounded font-medium",
|
|
128
138
|
disabled ? "bg-opacity-50" : "hover:bg-opacity-75",
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
3
|
import { coolIconKeys, debounce, Icon, IconButton, iconKeys, SearchBar, Tooltip } from "@firecms/ui";
|
|
4
|
-
import {
|
|
4
|
+
import { iconSynonyms, iconsSearch } from "../util";
|
|
5
5
|
|
|
6
6
|
const UPDATE_SEARCH_INDEX_WAIT_MS = 220;
|
|
7
7
|
|
|
8
|
-
if (process.env.NODE_ENV !== "production") {
|
|
9
|
-
Object.keys(
|
|
8
|
+
if (iconSynonyms && process.env.NODE_ENV !== "production") {
|
|
9
|
+
Object.keys(iconSynonyms).forEach((icon: string) => {
|
|
10
10
|
if (!iconKeys.includes(icon)) {
|
|
11
|
-
console.warn(`The icon ${icon} no longer exists. Remove it from \`
|
|
11
|
+
console.warn(`The icon ${icon} no longer exists. Remove it from \`iconSynonyms\``);
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
14
|
}
|
|
@@ -31,7 +31,9 @@ export function SearchIconsView({
|
|
|
31
31
|
setKeys(null);
|
|
32
32
|
} else {
|
|
33
33
|
const searchResult = iconsSearch.search(value);
|
|
34
|
-
|
|
34
|
+
const limit = 50;
|
|
35
|
+
const limited = searchResult.slice(0, limit);
|
|
36
|
+
setKeys(limited.map((e) => e.item.key));
|
|
35
37
|
}
|
|
36
38
|
}, UPDATE_SEARCH_INDEX_WAIT_MS), []
|
|
37
39
|
);
|
|
@@ -48,7 +50,7 @@ export function SearchIconsView({
|
|
|
48
50
|
return (
|
|
49
51
|
<>
|
|
50
52
|
<SearchBar
|
|
51
|
-
autoFocus
|
|
53
|
+
autoFocus={false}
|
|
52
54
|
innerClassName={"w-full sticky top-0 z-10"}
|
|
53
55
|
onTextSearch={(value?: string) => setQuery(value ?? "")}
|
|
54
56
|
placeholder="Search for more icons…"
|
|
@@ -57,7 +59,8 @@ export function SearchIconsView({
|
|
|
57
59
|
<div className={"flex max-w-full flex-wrap mt-4"}>
|
|
58
60
|
{icons.map((icon: string) => {
|
|
59
61
|
return (
|
|
60
|
-
<Tooltip title={icon} key={icon}
|
|
62
|
+
<Tooltip title={icon} key={icon}
|
|
63
|
+
asChild={true}>
|
|
61
64
|
<IconButton
|
|
62
65
|
shape={"square"}
|
|
63
66
|
toggled={selectedIcon === icon}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useRef } from "react";
|
|
2
|
-
import equal from "react-fast-compare";
|
|
3
2
|
import {
|
|
4
3
|
CollectionSize,
|
|
5
4
|
Entity,
|
|
@@ -10,7 +9,7 @@ import {
|
|
|
10
9
|
} from "../../types";
|
|
11
10
|
import { CellRendererParams, VirtualTable, VirtualTableColumn } from "../VirtualTable";
|
|
12
11
|
import { enumToObjectEntries } from "../../util";
|
|
13
|
-
import { OnCellValueChange, OnColumnResizeParams } from "../common
|
|
12
|
+
import { OnCellValueChange, OnColumnResizeParams } from "../common";
|
|
14
13
|
import { FilterFormFieldProps } from "../VirtualTable/VirtualTableHeader";
|
|
15
14
|
import { ReferenceFilterField } from "./filters/ReferenceFilterField";
|
|
16
15
|
import { StringNumberFilterField } from "./filters/StringNumberFilterField";
|
|
@@ -18,6 +17,7 @@ import { BooleanFilterField } from "./filters/BooleanFilterField";
|
|
|
18
17
|
import { DateTimeFilterField } from "./filters/DateTimeFilterField";
|
|
19
18
|
import { useOutsideAlerter } from "@firecms/ui";
|
|
20
19
|
import { SelectableTableContext } from "./SelectableTableContext";
|
|
20
|
+
import { getRowHeight } from "../common/table_height";
|
|
21
21
|
|
|
22
22
|
export type SelectableTableProps<M extends Record<string, any>> = {
|
|
23
23
|
|
|
@@ -59,7 +59,7 @@ export type SelectableTableProps<M extends Record<string, any>> = {
|
|
|
59
59
|
|
|
60
60
|
/**
|
|
61
61
|
* Controller holding the logic for the table
|
|
62
|
-
* {@link
|
|
62
|
+
* {@link useDataSourceTableController}
|
|
63
63
|
* {@link EntityTableController}
|
|
64
64
|
*/
|
|
65
65
|
tableController: EntityTableController<M>;
|
|
@@ -76,6 +76,18 @@ export type SelectableTableProps<M extends Record<string, any>> = {
|
|
|
76
76
|
|
|
77
77
|
size?: CollectionSize;
|
|
78
78
|
|
|
79
|
+
initialScroll?: number;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Callback when the table is scrolled
|
|
83
|
+
* @param props
|
|
84
|
+
*/
|
|
85
|
+
onScroll?: (props: {
|
|
86
|
+
scrollDirection: "forward" | "backward",
|
|
87
|
+
scrollOffset: number,
|
|
88
|
+
scrollUpdateWasRequested: boolean
|
|
89
|
+
}) => void;
|
|
90
|
+
|
|
79
91
|
emptyComponent?: React.ReactNode;
|
|
80
92
|
|
|
81
93
|
endAdornment?: React.ReactNode;
|
|
@@ -100,7 +112,7 @@ export type SelectableTableProps<M extends Record<string, any>> = {
|
|
|
100
112
|
*
|
|
101
113
|
* The data displayed in the table is managed by a {@link EntityTableController}.
|
|
102
114
|
* You can build the default, bound to a path in the datasource, by using the hook
|
|
103
|
-
* {@link
|
|
115
|
+
* {@link useDataSourceTableController}
|
|
104
116
|
*
|
|
105
117
|
* @see EntityCollectionTableProps
|
|
106
118
|
* @see EntityCollectionView
|
|
@@ -115,7 +127,7 @@ export const SelectableTable = React.memo<SelectableTableProps<any>>(
|
|
|
115
127
|
onEntityClick,
|
|
116
128
|
onColumnResize,
|
|
117
129
|
hoverRow = true,
|
|
118
|
-
size,
|
|
130
|
+
size = "m",
|
|
119
131
|
inlineEditing = false,
|
|
120
132
|
tableController:
|
|
121
133
|
{
|
|
@@ -127,8 +139,6 @@ export const SelectableTable = React.memo<SelectableTableProps<any>>(
|
|
|
127
139
|
setFilterValues,
|
|
128
140
|
sortBy,
|
|
129
141
|
setSortBy,
|
|
130
|
-
setSearchString,
|
|
131
|
-
clearFilter,
|
|
132
142
|
itemCount,
|
|
133
143
|
setItemCount,
|
|
134
144
|
pageSize = 50,
|
|
@@ -137,6 +147,8 @@ export const SelectableTable = React.memo<SelectableTableProps<any>>(
|
|
|
137
147
|
setPopupCell
|
|
138
148
|
},
|
|
139
149
|
filterable = true,
|
|
150
|
+
onScroll,
|
|
151
|
+
initialScroll,
|
|
140
152
|
emptyComponent,
|
|
141
153
|
columns,
|
|
142
154
|
forceFilter,
|
|
@@ -211,7 +223,7 @@ export const SelectableTable = React.memo<SelectableTableProps<any>>(
|
|
|
211
223
|
selectedCell,
|
|
212
224
|
}}
|
|
213
225
|
>
|
|
214
|
-
<div className="h-full w-full flex flex-col bg-white dark:bg-
|
|
226
|
+
<div className="h-full w-full flex flex-col bg-white dark:bg-surface-950"
|
|
215
227
|
ref={ref}>
|
|
216
228
|
|
|
217
229
|
<VirtualTable
|
|
@@ -222,19 +234,20 @@ export const SelectableTable = React.memo<SelectableTableProps<any>>(
|
|
|
222
234
|
onEndReached={loadNextPage}
|
|
223
235
|
onResetPagination={resetPagination}
|
|
224
236
|
error={dataLoadingError}
|
|
225
|
-
paginationEnabled={paginationEnabled}
|
|
226
237
|
onColumnResize={onColumnResize}
|
|
227
|
-
|
|
238
|
+
rowHeight={getRowHeight(size)}
|
|
228
239
|
loading={dataLoading}
|
|
229
240
|
filter={filterValues}
|
|
230
241
|
onFilterUpdate={setFilterValues ? onFilterUpdate : undefined}
|
|
231
242
|
sortBy={sortBy}
|
|
232
243
|
onSortByUpdate={setSortBy as ((sortBy?: [string, "asc" | "desc"]) => void)}
|
|
233
244
|
hoverRow={hoverRow}
|
|
245
|
+
initialScroll={initialScroll}
|
|
246
|
+
onScroll={onScroll}
|
|
234
247
|
checkFilterCombination={checkFilterCombination}
|
|
235
248
|
createFilterField={filterable ? createFilterField : undefined}
|
|
236
249
|
rowClassName={useCallback((entity: Entity<M>) => {
|
|
237
|
-
return highlightedRow?.(entity) ? "bg-
|
|
250
|
+
return highlightedRow?.(entity) ? "bg-surface-100 bg-opacity-75 dark:bg-surface-800 dark:bg-opacity-75" : "";
|
|
238
251
|
}, [highlightedRow])}
|
|
239
252
|
className="flex-grow"
|
|
240
253
|
emptyComponent={emptyComponent}
|
|
@@ -247,7 +260,8 @@ export const SelectableTable = React.memo<SelectableTableProps<any>>(
|
|
|
247
260
|
);
|
|
248
261
|
|
|
249
262
|
},
|
|
250
|
-
|
|
263
|
+
() => false,
|
|
264
|
+
// equal
|
|
251
265
|
);
|
|
252
266
|
|
|
253
267
|
function createFilterField({
|
|
@@ -280,6 +294,7 @@ function createFilterField({
|
|
|
280
294
|
isArray={isArray}
|
|
281
295
|
path={baseProperty.path}
|
|
282
296
|
title={resolvedProperty?.name}
|
|
297
|
+
includeId={baseProperty.includeId}
|
|
283
298
|
previewProperties={baseProperty?.previewProperties}
|
|
284
299
|
hidden={hidden}
|
|
285
300
|
setHidden={setHidden}/>;
|
|
@@ -32,7 +32,7 @@ export function BooleanFilterField({
|
|
|
32
32
|
const valueSet = !!value;
|
|
33
33
|
|
|
34
34
|
return (
|
|
35
|
-
<div className="w-[
|
|
35
|
+
<div className="w-[300px]">
|
|
36
36
|
<BooleanSwitchWithLabel
|
|
37
37
|
value={valueSetToTrue}
|
|
38
38
|
allowIndeterminate={true}
|
|
@@ -44,6 +44,5 @@ export function BooleanFilterField({
|
|
|
44
44
|
: `${title} is false`}
|
|
45
45
|
/>
|
|
46
46
|
</div>
|
|
47
|
-
)
|
|
48
|
-
;
|
|
47
|
+
);
|
|
49
48
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import { VirtualTableWhereFilterOp } from "../../VirtualTable";
|
|
3
|
-
import { DateTimeField, Select, SelectItem } from "@firecms/ui";
|
|
3
|
+
import { Checkbox, DateTimeField, Label, Select, SelectItem } from "@firecms/ui";
|
|
4
4
|
import { useCustomizationController } from "../../../hooks";
|
|
5
5
|
|
|
6
6
|
interface DateTimeFilterFieldProps {
|
|
@@ -43,10 +43,10 @@ export function DateTimeFilterField({
|
|
|
43
43
|
|
|
44
44
|
const [fieldOperation, fieldValue] = value || [possibleOperations[0], undefined];
|
|
45
45
|
const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
|
|
46
|
-
const [internalValue, setInternalValue] = useState<Date | undefined>(fieldValue);
|
|
46
|
+
const [internalValue, setInternalValue] = useState<Date | null | undefined>(fieldValue);
|
|
47
47
|
|
|
48
|
-
function updateFilter(op: VirtualTableWhereFilterOp, val: Date | undefined) {
|
|
49
|
-
let newValue: Date | undefined = val;
|
|
48
|
+
function updateFilter(op: VirtualTableWhereFilterOp, val: Date | undefined | null) {
|
|
49
|
+
let newValue: Date | null | undefined = val;
|
|
50
50
|
const prevOpIsArray = multipleSelectOperations.includes(operation);
|
|
51
51
|
const newOpIsArray = multipleSelectOperations.includes(op);
|
|
52
52
|
if (prevOpIsArray !== newOpIsArray) {
|
|
@@ -73,9 +73,11 @@ export function DateTimeFilterField({
|
|
|
73
73
|
|
|
74
74
|
return (
|
|
75
75
|
|
|
76
|
-
<div className="flex w-[440px]
|
|
76
|
+
<div className="flex w-[440px]">
|
|
77
77
|
<div className="w-[80px]">
|
|
78
78
|
<Select value={operation}
|
|
79
|
+
size={"large"}
|
|
80
|
+
fullWidth={true}
|
|
79
81
|
onValueChange={(value) => {
|
|
80
82
|
updateFilter(value as VirtualTableWhereFilterOp, internalValue);
|
|
81
83
|
}}
|
|
@@ -88,19 +90,34 @@ export function DateTimeFilterField({
|
|
|
88
90
|
</Select>
|
|
89
91
|
</div>
|
|
90
92
|
|
|
91
|
-
<div className="flex-grow ml-2">
|
|
93
|
+
<div className="flex-grow ml-2 flex flex-col gap-2">
|
|
92
94
|
|
|
93
95
|
<DateTimeField
|
|
94
96
|
mode={mode}
|
|
95
|
-
size={"
|
|
97
|
+
size={"large"}
|
|
96
98
|
locale={locale}
|
|
97
|
-
value={internalValue}
|
|
99
|
+
value={internalValue ?? undefined}
|
|
98
100
|
onChange={(dateValue: Date | null) => {
|
|
99
101
|
updateFilter(operation, dateValue === null ? undefined : dateValue);
|
|
100
102
|
}}
|
|
101
103
|
clearable={true}
|
|
102
104
|
/>
|
|
103
105
|
|
|
106
|
+
<Label
|
|
107
|
+
className="border cursor-pointer rounded-md p-2 flex items-center gap-2 [&:has(:checked)]:bg-surface-100 dark:[&:has(:checked)]:bg-surface-800"
|
|
108
|
+
htmlFor="null-filter"
|
|
109
|
+
>
|
|
110
|
+
<Checkbox id="null-filter"
|
|
111
|
+
checked={internalValue === null}
|
|
112
|
+
size={"small"}
|
|
113
|
+
onCheckedChange={(checked) => {
|
|
114
|
+
if (internalValue !== null)
|
|
115
|
+
updateFilter(operation, null);
|
|
116
|
+
else updateFilter(operation, undefined);
|
|
117
|
+
}}/>
|
|
118
|
+
Filter for null values
|
|
119
|
+
</Label>
|
|
120
|
+
|
|
104
121
|
</div>
|
|
105
122
|
|
|
106
123
|
</div>
|
|
@@ -4,7 +4,7 @@ import { Entity, EntityCollection, EntityReference } from "../../../types";
|
|
|
4
4
|
import { ReferencePreview } from "../../../preview";
|
|
5
5
|
import { getReferenceFrom } from "../../../util";
|
|
6
6
|
import { useNavigationController, useReferenceDialog } from "../../../hooks";
|
|
7
|
-
import { Button, Select, SelectItem } from "@firecms/ui";
|
|
7
|
+
import { Button, Checkbox, Label, Select, SelectItem } from "@firecms/ui";
|
|
8
8
|
|
|
9
9
|
interface ReferenceFilterFieldProps {
|
|
10
10
|
name: string,
|
|
@@ -13,6 +13,7 @@ interface ReferenceFilterFieldProps {
|
|
|
13
13
|
isArray?: boolean;
|
|
14
14
|
path?: string;
|
|
15
15
|
title?: string;
|
|
16
|
+
includeId?: boolean;
|
|
16
17
|
previewProperties?: string[];
|
|
17
18
|
hidden: boolean;
|
|
18
19
|
setHidden: (hidden: boolean) => void;
|
|
@@ -34,12 +35,11 @@ const operationLabels = {
|
|
|
34
35
|
const multipleSelectOperations = ["array-contains-any", "in", "not-in"];
|
|
35
36
|
|
|
36
37
|
export function ReferenceFilterField({
|
|
37
|
-
name,
|
|
38
38
|
value,
|
|
39
39
|
setValue,
|
|
40
40
|
isArray,
|
|
41
41
|
path,
|
|
42
|
-
|
|
42
|
+
includeId = true,
|
|
43
43
|
previewProperties,
|
|
44
44
|
setHidden
|
|
45
45
|
}: ReferenceFilterFieldProps) {
|
|
@@ -48,33 +48,33 @@ export function ReferenceFilterField({
|
|
|
48
48
|
? ["array-contains"]
|
|
49
49
|
: ["==", "!=", ">", "<", ">=", "<="];
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
if (isArray) {
|
|
52
|
+
possibleOperations.push("array-contains-any");
|
|
53
|
+
} else {
|
|
54
|
+
possibleOperations.push("in", "not-in");
|
|
55
|
+
}
|
|
56
56
|
|
|
57
57
|
const [fieldOperation, fieldValue] = value || [possibleOperations[0], undefined];
|
|
58
58
|
const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
|
|
59
|
-
const [internalValue, setInternalValue] = useState<EntityReference | EntityReference[] | undefined>(fieldValue);
|
|
59
|
+
const [internalValue, setInternalValue] = useState<EntityReference | EntityReference[] | undefined | null>(fieldValue);
|
|
60
60
|
|
|
61
61
|
const selectedEntityIds = internalValue
|
|
62
62
|
? (Array.isArray(internalValue) ? internalValue.map((ref) => {
|
|
63
|
-
if (!(ref
|
|
63
|
+
if (!(ref?.isEntityReference && ref?.isEntityReference())) {
|
|
64
64
|
return null;
|
|
65
65
|
}
|
|
66
66
|
return ref.id;
|
|
67
67
|
}).filter(Boolean) as string[] : [internalValue.id])
|
|
68
68
|
: [];
|
|
69
69
|
|
|
70
|
-
function updateFilter(op: VirtualTableWhereFilterOp, val?: EntityReference | EntityReference[]) {
|
|
70
|
+
function updateFilter(op: VirtualTableWhereFilterOp, val?: EntityReference | EntityReference[] | null) {
|
|
71
71
|
|
|
72
72
|
const prevOpIsArray = multipleSelectOperations.includes(operation);
|
|
73
73
|
const newOpIsArray = multipleSelectOperations.includes(op);
|
|
74
74
|
let newValue = val;
|
|
75
75
|
if (prevOpIsArray !== newOpIsArray) {
|
|
76
76
|
// @ts-ignore
|
|
77
|
-
newValue = newOpIsArray ? (newValue
|
|
77
|
+
newValue = newOpIsArray ? (newValue?.isEntityReference && newValue?.isEntityReference() ? [newValue] : []) : undefined
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
setOperation(op);
|
|
@@ -129,29 +129,26 @@ export function ReferenceFilterField({
|
|
|
129
129
|
|
|
130
130
|
const buildEntry = (reference: EntityReference) => {
|
|
131
131
|
return (
|
|
132
|
-
<
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
reference={reference}
|
|
143
|
-
onHover={onHover}
|
|
144
|
-
allowEntityNavigation={false}
|
|
145
|
-
/>
|
|
146
|
-
</div>
|
|
132
|
+
<ReferencePreview
|
|
133
|
+
disabled={!path}
|
|
134
|
+
previewProperties={previewProperties}
|
|
135
|
+
size={"medium"}
|
|
136
|
+
onClick={doOpenDialog}
|
|
137
|
+
reference={reference}
|
|
138
|
+
hover={true}
|
|
139
|
+
includeId={includeId}
|
|
140
|
+
includeEntityLink={false}
|
|
141
|
+
/>
|
|
147
142
|
);
|
|
148
143
|
};
|
|
149
144
|
|
|
150
145
|
return (
|
|
151
146
|
|
|
152
|
-
<div className="flex w-[
|
|
153
|
-
<div className="w-[
|
|
147
|
+
<div className="flex w-[480px] flex-row">
|
|
148
|
+
<div className="w-[140px]">
|
|
154
149
|
<Select value={operation}
|
|
150
|
+
size={"large"}
|
|
151
|
+
fullWidth={true}
|
|
155
152
|
onValueChange={(value) => {
|
|
156
153
|
updateFilter(value as VirtualTableWhereFilterOp, internalValue);
|
|
157
154
|
}}
|
|
@@ -164,21 +161,40 @@ export function ReferenceFilterField({
|
|
|
164
161
|
</Select>
|
|
165
162
|
</div>
|
|
166
163
|
|
|
167
|
-
<div className="flex-grow ml-2 h-full">
|
|
164
|
+
<div className="flex-grow ml-2 h-full gap-2 flex flex-col w-[340px]">
|
|
168
165
|
|
|
169
166
|
{internalValue && Array.isArray(internalValue) && <div>
|
|
170
167
|
{internalValue.map((ref, index) => buildEntry(ref))}
|
|
171
168
|
</div>}
|
|
169
|
+
|
|
172
170
|
{internalValue && !Array.isArray(internalValue) && <div>
|
|
173
171
|
{buildEntry(internalValue)}
|
|
174
172
|
</div>}
|
|
173
|
+
|
|
175
174
|
{(!internalValue || (Array.isArray(internalValue) && internalValue.length === 0)) &&
|
|
176
175
|
<Button onClick={doOpenDialog}
|
|
177
176
|
variant={"outlined"}
|
|
177
|
+
size={"large"}
|
|
178
178
|
className="h-full w-full">
|
|
179
179
|
{multiple ? "Select references" : "Select reference"}
|
|
180
180
|
</Button>
|
|
181
181
|
}
|
|
182
|
+
|
|
183
|
+
{!isArray && <Label
|
|
184
|
+
className="border cursor-pointer rounded-md p-2 flex items-center gap-2 [&:has(:checked)]:bg-surface-100 dark:[&:has(:checked)]:bg-surface-800"
|
|
185
|
+
htmlFor="null-filter"
|
|
186
|
+
>
|
|
187
|
+
<Checkbox id="null-filter"
|
|
188
|
+
checked={internalValue === null}
|
|
189
|
+
size={"small"}
|
|
190
|
+
onCheckedChange={(checked) => {
|
|
191
|
+
if (internalValue !== null)
|
|
192
|
+
updateFilter(operation, null);
|
|
193
|
+
else updateFilter(operation, undefined);
|
|
194
|
+
}}/>
|
|
195
|
+
Filter for null values
|
|
196
|
+
</Label>}
|
|
197
|
+
|
|
182
198
|
</div>
|
|
183
199
|
|
|
184
200
|
</div>
|