@firecms/core 3.0.0-canary.28 → 3.0.0-canary.280
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 +31 -12
- 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 +14 -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 +20 -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 +10 -7
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/HomePage/DefaultHomePage.d.ts +2 -15
- package/dist/components/HomePage/HomePageDnD.d.ts +76 -0
- package/dist/components/HomePage/NavigationCard.d.ts +3 -1
- package/dist/components/HomePage/NavigationCardBinding.d.ts +4 -3
- package/dist/components/HomePage/NavigationGroup.d.ts +8 -1
- package/dist/components/HomePage/RenameGroupDialog.d.ts +9 -0
- 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 +14 -4
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/UnsavedChangesDialog.d.ts +8 -0
- package/dist/components/UserDisplay.d.ts +7 -0
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +24 -12
- package/dist/components/VirtualTable/fields/VirtualTableUserSelect.d.ts +12 -0
- 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 +5 -2
- package/dist/contexts/BreacrumbsContext.d.ts +8 -0
- package/dist/contexts/InternalUserManagementContext.d.ts +3 -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 +43 -11
- package/dist/core/EntityEditViewFormActions.d.ts +2 -0
- package/dist/core/FireCMS.d.ts +2 -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/field_configs.d.ts +1 -1
- package/dist/core/index.d.ts +4 -4
- package/dist/form/EntityForm.d.ts +37 -64
- package/dist/form/EntityFormActions.d.ts +21 -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/ReferenceAsStringFieldBinding.d.ts +9 -0
- 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 +5 -13
- package/dist/form/field_bindings/SwitchFieldBinding.d.ts +1 -2
- package/dist/form/field_bindings/TextFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +12 -0
- package/dist/form/index.d.ts +17 -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 +3 -0
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/hooks/useBreadcrumbsController.d.ts +26 -0
- package/dist/hooks/useBuildNavigationController.d.ts +57 -13
- package/dist/hooks/useCollapsedGroups.d.ts +9 -0
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useInternalUserManagementController.d.ts +12 -0
- 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 +23563 -13933
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +26305 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +3 -17
- package/dist/internal/useBuildSideEntityController.d.ts +3 -3
- 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 +4 -3
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/components/UserPreview.d.ts +8 -0
- package/dist/preview/index.d.ts +1 -0
- 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 +8 -10
- package/dist/types/collections.d.ts +112 -25
- package/dist/types/customization_controller.d.ts +8 -0
- package/dist/types/datasource.d.ts +52 -36
- package/dist/types/dialogs_controller.d.ts +7 -3
- package/dist/types/entities.d.ts +12 -3
- package/dist/types/entity_actions.d.ts +72 -8
- 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 +74 -42
- package/dist/types/firecms.d.ts +31 -3
- package/dist/types/firecms_context.d.ts +17 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/internal_user_management.d.ts +20 -0
- package/dist/types/navigation.d.ts +62 -19
- package/dist/types/permissions.d.ts +4 -4
- package/dist/types/plugins.d.ts +58 -13
- package/dist/types/properties.d.ts +90 -25
- package/dist/types/property_config.d.ts +1 -3
- package/dist/types/roles.d.ts +3 -0
- package/dist/types/side_dialogs_controller.d.ts +10 -0
- package/dist/types/side_entity_controller.d.ts +14 -1
- package/dist/types/storage.d.ts +75 -0
- package/dist/types/user.d.ts +2 -1
- package/dist/util/builders.d.ts +3 -3
- package/dist/util/callbacks.d.ts +2 -0
- package/dist/util/createFormexStub.d.ts +2 -0
- 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 +7 -4
- package/dist/util/index.d.ts +3 -0
- package/dist/util/navigation_from_path.d.ts +10 -1
- package/dist/util/navigation_utils.d.ts +15 -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 +4 -4
- package/dist/util/references.d.ts +2 -2
- package/dist/util/resolutions.d.ts +42 -17
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/package.json +69 -52
- 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 +447 -229
- package/src/components/CircularProgressCenter.tsx +2 -2
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/{DeleteConfirmationDialog.tsx → ConfirmationDialog.tsx} +12 -11
- package/src/components/DeleteEntityDialog.tsx +13 -20
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +65 -40
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +38 -31
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +30 -9
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +84 -42
- 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 +34 -39
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +49 -36
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +20 -8
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +135 -105
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +9 -9
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +235 -118
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +7 -4
- 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 +83 -62
- package/src/components/EntityView.tsx +13 -10
- package/src/components/ErrorView.tsx +4 -4
- package/src/components/FireCMSLogo.tsx +7 -51
- package/src/components/HomePage/DefaultHomePage.tsx +511 -157
- package/src/components/HomePage/FavouritesView.tsx +9 -14
- package/src/components/HomePage/HomePageDnD.tsx +600 -0
- package/src/components/HomePage/NavigationCard.tsx +48 -39
- package/src/components/HomePage/NavigationCardBinding.tsx +17 -16
- package/src/components/HomePage/NavigationGroup.tsx +144 -30
- package/src/components/HomePage/RenameGroupDialog.tsx +123 -0
- 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 +23 -13
- package/src/components/ReferenceWidget.tsx +21 -11
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/SelectableTable/SelectableTable.tsx +157 -145
- 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 +93 -24
- package/src/components/UnsavedChangesDialog.tsx +46 -0
- package/src/components/UserDisplay.tsx +54 -0
- package/src/components/VirtualTable/VirtualTable.tsx +105 -51
- 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 +28 -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 +2 -2
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +2 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +16 -28
- package/src/components/VirtualTable/fields/VirtualTableUserSelect.tsx +99 -0
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +64 -44
- 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 +16 -2
- 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 +6 -2
- package/src/contexts/BreacrumbsContext.tsx +38 -0
- package/src/contexts/DialogsProvider.tsx +5 -4
- package/src/contexts/InternalUserManagementContext.tsx +4 -0
- 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 +435 -470
- package/src/core/EntityEditViewFormActions.tsx +329 -0
- package/src/core/EntitySidePanel.tsx +88 -21
- package/src/core/FireCMS.tsx +85 -60
- 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 +41 -14
- package/src/core/index.tsx +6 -5
- package/src/form/EntityForm.tsx +620 -534
- package/src/form/EntityFormActions.tsx +211 -0
- package/src/form/PropertyFieldBinding.tsx +88 -45
- package/src/form/components/CustomIdField.tsx +9 -3
- 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 +23 -13
- package/src/form/components/StorageUploadProgress.tsx +5 -6
- package/src/form/components/index.tsx +3 -1
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +34 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +50 -36
- 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 +61 -52
- package/src/form/field_bindings/MapFieldBinding.tsx +73 -55
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +159 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -21
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +11 -16
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +135 -0
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +42 -31
- package/src/form/field_bindings/RepeatFieldBinding.tsx +62 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +24 -15
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +257 -199
- package/src/form/field_bindings/SwitchFieldBinding.tsx +29 -24
- package/src/form/field_bindings/TextFieldBinding.tsx +28 -24
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +94 -0
- package/src/form/index.tsx +17 -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 +26 -33
- 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 +4 -0
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/hooks/useBreadcrumbsController.tsx +31 -0
- package/src/hooks/useBrowserTitleAndIcon.tsx +1 -1
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +22 -29
- package/src/hooks/useBuildNavigationController.tsx +440 -119
- package/src/hooks/useCollapsedGroups.ts +64 -0
- package/src/hooks/useFireCMSContext.tsx +9 -35
- package/src/hooks/useInternalUserManagementController.tsx +16 -0
- 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 +79 -85
- package/src/internal/useBuildSideDialogsController.tsx +4 -2
- package/src/internal/useBuildSideEntityController.tsx +204 -77
- package/src/internal/useUnsavedChangesDialog.tsx +127 -91
- package/src/preview/PropertyPreview.tsx +42 -25
- 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 +26 -37
- package/src/preview/components/ReferencePreview.tsx +26 -36
- package/src/preview/components/StorageThumbnail.tsx +5 -1
- package/src/preview/components/UrlComponentPreview.tsx +60 -28
- package/src/preview/components/UserPreview.tsx +22 -0
- package/src/preview/index.ts +1 -0
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +6 -6
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +7 -5
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +5 -4
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +4 -4
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -6
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +7 -6
- package/src/preview/property_previews/MapPropertyPreview.tsx +12 -11
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +13 -13
- 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 +246 -0
- package/src/routes/HomePageRoute.tsx +17 -0
- package/src/types/analytics.ts +3 -0
- package/src/types/auth.tsx +9 -13
- package/src/types/collections.ts +134 -30
- package/src/types/customization_controller.tsx +9 -1
- package/src/types/datasource.ts +61 -43
- package/src/types/dialogs_controller.tsx +7 -3
- package/src/types/entities.ts +19 -3
- package/src/types/entity_actions.tsx +86 -10
- 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 +85 -46
- package/src/types/firecms.tsx +34 -4
- package/src/types/firecms_context.tsx +18 -1
- package/src/types/index.ts +1 -1
- package/src/types/internal_user_management.ts +24 -0
- package/src/types/navigation.ts +77 -24
- package/src/types/permissions.ts +5 -5
- package/src/types/plugins.tsx +69 -15
- package/src/types/properties.ts +106 -27
- package/src/types/property_config.tsx +2 -2
- package/src/types/roles.ts +3 -0
- package/src/types/side_dialogs_controller.tsx +15 -0
- package/src/types/side_entity_controller.tsx +16 -1
- package/src/types/storage.ts +83 -1
- package/src/types/user.ts +3 -1
- package/src/util/builders.ts +10 -8
- package/src/util/callbacks.ts +119 -0
- package/src/util/createFormexStub.tsx +62 -0
- package/src/util/entities.ts +11 -8
- 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 +36 -11
- package/src/util/index.ts +3 -0
- package/src/util/join_collections.ts +9 -2
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_from_path.ts +33 -12
- package/src/util/navigation_utils.ts +141 -25
- package/src/util/objects.ts +90 -33
- 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 +17 -6
- package/src/util/references.ts +19 -8
- package/src/util/resolutions.ts +122 -48
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +91 -28
- package/dist/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
- 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/EntityCollectionTable/internal/popup_field/ElementResizeListener.tsx +0 -59
- 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
|
@@ -15,12 +15,12 @@ import {
|
|
|
15
15
|
VirtualTableWhereFilterOp
|
|
16
16
|
} from "./VirtualTableProps";
|
|
17
17
|
|
|
18
|
-
import { getRowHeight } from "./common";
|
|
19
18
|
import { VirtualTableContextProps } from "./types";
|
|
20
19
|
import { VirtualTableHeaderRow } from "./VirtualTableHeaderRow";
|
|
21
20
|
import { VirtualTableRow } from "./VirtualTableRow";
|
|
22
21
|
import { VirtualTableCell } from "./VirtualTableCell";
|
|
23
|
-
import { AssignmentIcon,
|
|
22
|
+
import { AssignmentIcon, CenteredView, cls, Typography } from "@firecms/ui";
|
|
23
|
+
import { useDebounceCallback } from "../common/useDebouncedCallback";
|
|
24
24
|
|
|
25
25
|
const VirtualListContext = createContext<VirtualTableContextProps<any>>({} as any);
|
|
26
26
|
VirtualListContext.displayName = "VirtualListContext";
|
|
@@ -64,10 +64,10 @@ const innerElementType = forwardRef<HTMLDivElement, InnerElementProps>(({
|
|
|
64
64
|
|
|
65
65
|
{customView && <div style={{
|
|
66
66
|
position: "sticky",
|
|
67
|
-
top: "
|
|
67
|
+
top: "48px",
|
|
68
68
|
flexGrow: 1,
|
|
69
|
-
height: "calc(100% -
|
|
70
|
-
marginTop: "calc(
|
|
69
|
+
height: "calc(100% - 48px)",
|
|
70
|
+
marginTop: "calc(48px - 100vh)",
|
|
71
71
|
left: 0
|
|
72
72
|
}}>{customView}</div>}
|
|
73
73
|
|
|
@@ -92,7 +92,8 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
92
92
|
data,
|
|
93
93
|
onResetPagination,
|
|
94
94
|
onEndReached,
|
|
95
|
-
|
|
95
|
+
endOffset = 600,
|
|
96
|
+
rowHeight = 54,
|
|
96
97
|
columns: columnsProp,
|
|
97
98
|
onRowClick,
|
|
98
99
|
onColumnResize,
|
|
@@ -103,14 +104,17 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
103
104
|
error,
|
|
104
105
|
emptyComponent,
|
|
105
106
|
onSortByUpdate,
|
|
107
|
+
onScroll: onScrollProp,
|
|
106
108
|
loading,
|
|
107
109
|
cellRenderer,
|
|
108
110
|
hoverRow,
|
|
109
111
|
createFilterField,
|
|
110
112
|
rowClassName,
|
|
113
|
+
style,
|
|
111
114
|
className,
|
|
112
115
|
endAdornment,
|
|
113
|
-
AddColumnComponent
|
|
116
|
+
AddColumnComponent,
|
|
117
|
+
initialScroll = 0,
|
|
114
118
|
}: VirtualTableProps<T>) {
|
|
115
119
|
|
|
116
120
|
const sortByProperty: string | undefined = sortBy ? sortBy[0] : undefined;
|
|
@@ -121,15 +125,57 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
121
125
|
const tableRef = useRef<HTMLDivElement>(null);
|
|
122
126
|
const endReachCallbackThreshold = useRef<number>(0);
|
|
123
127
|
|
|
128
|
+
const debouncedScroll = useDebounceCallback(onScrollProp, 200);
|
|
129
|
+
|
|
130
|
+
// Set initial scroll position
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
if (tableRef.current && initialScroll) {
|
|
133
|
+
const { scrollLeft } = tableRef.current;
|
|
134
|
+
tableRef.current.scrollTo(scrollLeft, initialScroll);
|
|
135
|
+
}
|
|
136
|
+
}, [tableRef, initialScroll]);
|
|
137
|
+
|
|
124
138
|
useEffect(() => {
|
|
125
139
|
setColumns(columnsProp);
|
|
126
140
|
}, [columnsProp]);
|
|
127
141
|
|
|
128
|
-
const [
|
|
142
|
+
const [_, setForceUpdate] = useState(false);
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
// Create a ResizeObserver to detect size changes more aggressively
|
|
145
|
+
if (tableRef.current) {
|
|
146
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
147
|
+
// Force a re-render when size changes
|
|
148
|
+
setForceUpdate(prev => !prev);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
resizeObserver.observe(tableRef.current);
|
|
152
|
+
|
|
153
|
+
return () => {
|
|
154
|
+
if (tableRef.current) {
|
|
155
|
+
resizeObserver.unobserve(tableRef.current);
|
|
156
|
+
}
|
|
157
|
+
resizeObserver.disconnect();
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return () => {
|
|
161
|
+
}
|
|
162
|
+
}, [tableRef]);
|
|
163
|
+
|
|
164
|
+
const [measureRef, bounds] = useMeasure({
|
|
165
|
+
debounce: 50,
|
|
166
|
+
polyfill: ResizeObserver,
|
|
167
|
+
scroll: true,
|
|
168
|
+
// This is important for handling zooming in react-flow
|
|
169
|
+
offsetSize: true
|
|
170
|
+
});
|
|
129
171
|
|
|
130
172
|
const onColumnResizeInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {
|
|
131
|
-
setColumns(
|
|
132
|
-
|
|
173
|
+
setColumns(prevColumns =>
|
|
174
|
+
prevColumns.map((column) =>
|
|
175
|
+
column.key === params.column.key ? params.column : column
|
|
176
|
+
)
|
|
177
|
+
);
|
|
178
|
+
}, []);
|
|
133
179
|
|
|
134
180
|
const onColumnResizeEndInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {
|
|
135
181
|
setColumns(columns.map((column) => column.key === params.column.key ? params.column : column));
|
|
@@ -148,7 +194,6 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
148
194
|
const scrollToTop = useCallback(() => {
|
|
149
195
|
endReachCallbackThreshold.current = 0;
|
|
150
196
|
if (tableRef.current) {
|
|
151
|
-
// scrollRef.current = [scrollRef.current[0], 0];
|
|
152
197
|
tableRef.current.scrollTo(tableRef.current?.scrollLeft, 0);
|
|
153
198
|
}
|
|
154
199
|
}, []);
|
|
@@ -181,21 +226,17 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
181
226
|
scrollToTop();
|
|
182
227
|
}, [checkFilterCombination, currentSort, onFilterUpdate, onResetPagination, onSortByUpdate, scrollToTop, sortByProperty]);
|
|
183
228
|
|
|
184
|
-
const
|
|
185
|
-
endReachCallbackThreshold.current = 0;
|
|
186
|
-
if (onSortByUpdate)
|
|
187
|
-
onSortByUpdate(undefined);
|
|
188
|
-
}, [onSortByUpdate]);
|
|
229
|
+
const maxScroll = Math.max((data?.length ?? 0) * rowHeight - bounds.height, 0);
|
|
189
230
|
|
|
190
|
-
const maxScroll = Math.max((data?.length ?? 0) * getRowHeight(size) - bounds.height, 0);
|
|
191
231
|
const onEndReachedInternal = useCallback((scrollOffset: number) => {
|
|
192
|
-
if (onEndReached && (data?.length ?? 0) > 0 && scrollOffset > endReachCallbackThreshold.current +
|
|
232
|
+
if (onEndReached && (data?.length ?? 0) > 0 && scrollOffset > endReachCallbackThreshold.current + endOffset) {
|
|
193
233
|
endReachCallbackThreshold.current = scrollOffset;
|
|
194
234
|
onEndReached();
|
|
195
235
|
}
|
|
196
236
|
}, [data?.length, onEndReached]);
|
|
197
237
|
|
|
198
238
|
const onScroll = useCallback(({
|
|
239
|
+
scrollDirection,
|
|
199
240
|
scrollOffset,
|
|
200
241
|
scrollUpdateWasRequested
|
|
201
242
|
}: {
|
|
@@ -203,7 +244,14 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
203
244
|
scrollOffset: number,
|
|
204
245
|
scrollUpdateWasRequested: boolean;
|
|
205
246
|
}) => {
|
|
206
|
-
if (
|
|
247
|
+
if (onScrollProp) {
|
|
248
|
+
debouncedScroll({
|
|
249
|
+
scrollDirection,
|
|
250
|
+
scrollOffset,
|
|
251
|
+
scrollUpdateWasRequested
|
|
252
|
+
})
|
|
253
|
+
}
|
|
254
|
+
if (!scrollUpdateWasRequested && (scrollOffset >= maxScroll - endOffset))
|
|
207
255
|
onEndReachedInternal(scrollOffset);
|
|
208
256
|
}, [maxScroll, onEndReachedInternal]);
|
|
209
257
|
|
|
@@ -225,41 +273,33 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
225
273
|
}
|
|
226
274
|
|
|
227
275
|
if (onFilterUpdate) onFilterUpdate(newFilterValue);
|
|
276
|
+
}, [checkFilterCombination, currentSort, onFilterUpdate, sortByProperty]);
|
|
228
277
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const buildErrorView = useCallback(() => (
|
|
235
|
-
<div
|
|
236
|
-
className="h-full flex flex-col items-center justify-center sticky left-0">
|
|
278
|
+
const empty = !loading && (data?.length ?? 0) === 0;
|
|
279
|
+
const customView = error
|
|
280
|
+
? <CenteredView maxWidth={"2xl"}
|
|
281
|
+
className="flex flex-col gap-2">
|
|
237
282
|
|
|
238
283
|
<Typography variant={"h6"}>
|
|
239
|
-
{"Error
|
|
284
|
+
{"Error"}
|
|
240
285
|
</Typography>
|
|
241
286
|
|
|
242
|
-
{error?.message && <
|
|
287
|
+
{error?.message && <SafeLinkRenderer text={error.message}/>}
|
|
243
288
|
|
|
244
|
-
</
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
</div>;
|
|
255
|
-
}, [emptyComponent, loading]);
|
|
256
|
-
|
|
257
|
-
const empty = !loading && (data?.length ?? 0) === 0;
|
|
258
|
-
const customView = error ? buildErrorView() : (empty ? buildEmptyView() : undefined);
|
|
289
|
+
</CenteredView>
|
|
290
|
+
: (empty
|
|
291
|
+
? (loading
|
|
292
|
+
? <CircularProgressCenter/>
|
|
293
|
+
: <div
|
|
294
|
+
className="flex flex-col overflow-auto items-center justify-center p-2 gap-2 h-full">
|
|
295
|
+
<AssignmentIcon/>
|
|
296
|
+
{emptyComponent}
|
|
297
|
+
</div>)
|
|
298
|
+
: undefined);
|
|
259
299
|
|
|
260
300
|
const virtualListController = {
|
|
261
301
|
data,
|
|
262
|
-
|
|
302
|
+
rowHeight: rowHeight,
|
|
263
303
|
cellRenderer,
|
|
264
304
|
columns,
|
|
265
305
|
currentSort,
|
|
@@ -278,23 +318,23 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
278
318
|
AddColumnComponent
|
|
279
319
|
};
|
|
280
320
|
|
|
281
|
-
// useTraceUpdate(virtualListController);
|
|
282
321
|
return (
|
|
283
322
|
<div
|
|
284
323
|
ref={measureRef}
|
|
285
|
-
|
|
324
|
+
style={style}
|
|
325
|
+
className={cls("h-full w-full", className)}>
|
|
286
326
|
<VirtualListContext.Provider
|
|
287
327
|
value={virtualListController}>
|
|
288
328
|
|
|
289
329
|
<MemoizedList
|
|
290
330
|
outerRef={tableRef}
|
|
291
|
-
key={
|
|
331
|
+
key={rowHeight}
|
|
292
332
|
width={bounds.width}
|
|
293
333
|
height={bounds.height}
|
|
294
334
|
itemCount={(data?.length ?? 0) + (endAdornment ? 1 : 0)}
|
|
295
335
|
onScroll={onScroll}
|
|
296
336
|
includeAddColumn={Boolean(AddColumnComponent)}
|
|
297
|
-
itemSize={
|
|
337
|
+
itemSize={rowHeight}/>
|
|
298
338
|
|
|
299
339
|
</VirtualListContext.Provider>
|
|
300
340
|
</div>
|
|
@@ -334,7 +374,7 @@ function MemoizedList({
|
|
|
334
374
|
onRowClick,
|
|
335
375
|
data,
|
|
336
376
|
columns,
|
|
337
|
-
|
|
377
|
+
rowHeight = 54,
|
|
338
378
|
cellRenderer,
|
|
339
379
|
hoverRow,
|
|
340
380
|
rowClassName,
|
|
@@ -367,7 +407,7 @@ function MemoizedList({
|
|
|
367
407
|
...style,
|
|
368
408
|
top: `calc(${style.top}px + 48px)`
|
|
369
409
|
}}
|
|
370
|
-
|
|
410
|
+
rowHeight={rowHeight}>
|
|
371
411
|
|
|
372
412
|
{columns.map((column: VirtualTableColumn, columnIndex: number) => {
|
|
373
413
|
const cellData = rowData && rowData[column.key];
|
|
@@ -403,3 +443,17 @@ function MemoizedList({
|
|
|
403
443
|
{Row}
|
|
404
444
|
</List>;
|
|
405
445
|
}
|
|
446
|
+
|
|
447
|
+
const SafeLinkRenderer: React.FC<{
|
|
448
|
+
text: string;
|
|
449
|
+
}> = ({ text }) => {
|
|
450
|
+
const urlRegex = /https?:\/\/[^\s]+/g;
|
|
451
|
+
const htmlContent = text.replace(urlRegex, (url) => {
|
|
452
|
+
// For each URL found, replace it with an HTML <a> tag
|
|
453
|
+
return `<a href="${url}" class="underline" target="_blank">Link</a><br/>`;
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
return (
|
|
457
|
+
<div className={"break-all"} dangerouslySetInnerHTML={{ __html: htmlContent }}/>
|
|
458
|
+
);
|
|
459
|
+
};
|
|
@@ -16,7 +16,7 @@ type VirtualTableCellProps<T extends any> = {
|
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
export const VirtualTableCell = React.memo<VirtualTableCellProps<any>>(
|
|
19
|
-
function VirtualTableCell<T
|
|
19
|
+
function VirtualTableCell<T>(props: VirtualTableCellProps<T>) {
|
|
20
20
|
// @ts-ignore
|
|
21
21
|
return props.rowData && props.cellRenderer(
|
|
22
22
|
{
|
|
@@ -30,14 +30,6 @@ export const VirtualTableCell = React.memo<VirtualTableCellProps<any>>(
|
|
|
30
30
|
width: props.column.width
|
|
31
31
|
} as CellRendererParams<T>
|
|
32
32
|
);
|
|
33
|
-
// return props.rowData && <props.cellRenderer
|
|
34
|
-
// rowData={props.rowData}
|
|
35
|
-
// rowIndex={props.rowIndex}
|
|
36
|
-
// isScrolling={false}
|
|
37
|
-
// column={props.column}
|
|
38
|
-
// columns={props.columns}
|
|
39
|
-
// columnIndex={props.columnIndex}
|
|
40
|
-
// width={props.column.width}/>
|
|
41
33
|
},
|
|
42
34
|
(a, b) => {
|
|
43
35
|
return equal(a.rowData, b.rowData) &&
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
ArrowUpwardIcon,
|
|
8
8
|
Badge,
|
|
9
9
|
Button,
|
|
10
|
-
|
|
10
|
+
cls,
|
|
11
11
|
defaultBorderMixin,
|
|
12
12
|
FilterListIcon,
|
|
13
13
|
IconButton,
|
|
@@ -85,9 +85,9 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
|
|
|
85
85
|
return (
|
|
86
86
|
<ErrorBoundary>
|
|
87
87
|
<div
|
|
88
|
-
className={
|
|
89
|
-
"text-
|
|
90
|
-
"hover:bg-
|
|
88
|
+
className={cls("flex py-0 px-3 h-full text-xs uppercase font-semibold relative select-none items-center bg-surface-50 dark:bg-surface-900",
|
|
89
|
+
"text-text-secondary hover:text-text-primary dark:text-text-secondary-dark dark:hover:text-text-primary-dark",
|
|
90
|
+
"hover:bg-surface-100 dark:hover:bg-surface-800 hover:bg-opacity-50 dark:hover:bg-opacity-50",
|
|
91
91
|
column.frozen ? "sticky left-0 z-10" : "relative z-0"
|
|
92
92
|
)}
|
|
93
93
|
style={{
|
|
@@ -130,7 +130,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
|
|
|
130
130
|
invisible={!sort}>
|
|
131
131
|
<IconButton
|
|
132
132
|
size={"small"}
|
|
133
|
-
className={onHover || openFilter ? "bg-white dark:bg-
|
|
133
|
+
className={onHover || openFilter ? "bg-white dark:bg-surface-950" : undefined}
|
|
134
134
|
onClick={() => {
|
|
135
135
|
onColumnSort(column.key as Extract<keyof M, string>);
|
|
136
136
|
}}
|
|
@@ -157,7 +157,7 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
|
|
|
157
157
|
modal={true}
|
|
158
158
|
trigger={
|
|
159
159
|
<IconButton
|
|
160
|
-
className={onHover || openFilter ? "bg-white dark:bg-
|
|
160
|
+
className={onHover || openFilter ? "bg-white dark:bg-surface-950" : undefined}
|
|
161
161
|
size={"small"}
|
|
162
162
|
onClick={handleSettingsClick}>
|
|
163
163
|
<FilterListIcon size={"small"}/>
|
|
@@ -179,9 +179,9 @@ export const VirtualTableHeader = React.memo<VirtualTableHeaderProps<any>>(
|
|
|
179
179
|
|
|
180
180
|
{column.resizable && <div
|
|
181
181
|
ref={resizeHandleRef}
|
|
182
|
-
className={
|
|
182
|
+
className={cls(
|
|
183
183
|
"absolute h-full w-[6px] top-0 right-0 cursor-col-resize",
|
|
184
|
-
hovered && "bg-
|
|
184
|
+
hovered && "bg-surface-300 dark:bg-surface-700"
|
|
185
185
|
)}
|
|
186
186
|
onMouseDown={onClickResizeColumn ? () => onClickResizeColumn(columnIndex, column) : undefined}
|
|
187
187
|
/>}
|
|
@@ -238,9 +238,9 @@ function FilterForm<M>({
|
|
|
238
238
|
e.preventDefault();
|
|
239
239
|
submit();
|
|
240
240
|
}}
|
|
241
|
-
className={"text-
|
|
241
|
+
className={"text-surface-900 dark:text-white"}>
|
|
242
242
|
<div
|
|
243
|
-
className={
|
|
243
|
+
className={cls(defaultBorderMixin, "py-4 px-6 typography-label border-b")}>
|
|
244
244
|
{column.title ?? id}
|
|
245
245
|
</div>
|
|
246
246
|
{filterField && <div className="m-4">
|
|
@@ -4,7 +4,7 @@ import { VirtualTableColumn, VirtualTableWhereFilterOp } from "./VirtualTablePro
|
|
|
4
4
|
import { ErrorBoundary } from "../ErrorBoundary";
|
|
5
5
|
import { VirtualTableHeader } from "./VirtualTableHeader";
|
|
6
6
|
import { VirtualTableContextProps } from "./types";
|
|
7
|
-
import {
|
|
7
|
+
import { cls, defaultBorderMixin } from "@firecms/ui";
|
|
8
8
|
|
|
9
9
|
export const VirtualTableHeaderRow = ({
|
|
10
10
|
columns,
|
|
@@ -100,7 +100,7 @@ export const VirtualTableHeaderRow = ({
|
|
|
100
100
|
|
|
101
101
|
return (
|
|
102
102
|
<div
|
|
103
|
-
className={
|
|
103
|
+
className={cls(defaultBorderMixin, "z-20 sticky min-w-full flex w-fit flex-row top-0 left-0 h-12 border-b bg-surface-50 dark:bg-surface-900")}>
|
|
104
104
|
{columns.map((c, columnIndex) => {
|
|
105
105
|
const column = columns[columnIndex];
|
|
106
106
|
|
|
@@ -31,11 +31,6 @@ export interface VirtualTableProps<T extends Record<string, any>> {
|
|
|
31
31
|
*/
|
|
32
32
|
cellRenderer: React.ComponentType<CellRendererParams<T>>;
|
|
33
33
|
|
|
34
|
-
/**
|
|
35
|
-
* If enabled, content is loaded in batch
|
|
36
|
-
*/
|
|
37
|
-
paginationEnabled?: boolean;
|
|
38
|
-
|
|
39
34
|
/**
|
|
40
35
|
* Set this callback if you want to support some combinations
|
|
41
36
|
* of filter combinations only.
|
|
@@ -50,6 +45,11 @@ export interface VirtualTableProps<T extends Record<string, any>> {
|
|
|
50
45
|
*/
|
|
51
46
|
onEndReached?: () => void;
|
|
52
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Offset in pixels where the onEndReached callback is triggered
|
|
50
|
+
*/
|
|
51
|
+
endOffset?: number;
|
|
52
|
+
|
|
53
53
|
/**
|
|
54
54
|
* When the pagination should be reset. E.g. the filters or sorting
|
|
55
55
|
* has been reset.
|
|
@@ -69,7 +69,7 @@ export interface VirtualTableProps<T extends Record<string, any>> {
|
|
|
69
69
|
/**
|
|
70
70
|
* Size of the table
|
|
71
71
|
*/
|
|
72
|
-
|
|
72
|
+
rowHeight?: number,
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
75
|
* In case this table should have some filters set by default
|
|
@@ -82,6 +82,16 @@ export interface VirtualTableProps<T extends Record<string, any>> {
|
|
|
82
82
|
*/
|
|
83
83
|
onFilterUpdate?: (filter?: VirtualTableFilterValues<any> | undefined) => void;
|
|
84
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Callback when the table is scrolled
|
|
87
|
+
* @param props
|
|
88
|
+
*/
|
|
89
|
+
onScroll?: (props: {
|
|
90
|
+
scrollDirection: "forward" | "backward",
|
|
91
|
+
scrollOffset: number,
|
|
92
|
+
scrollUpdateWasRequested: boolean
|
|
93
|
+
}) => void;
|
|
94
|
+
|
|
85
95
|
/**
|
|
86
96
|
* Default sort applied to this collection
|
|
87
97
|
*/
|
|
@@ -131,6 +141,11 @@ export interface VirtualTableProps<T extends Record<string, any>> {
|
|
|
131
141
|
*/
|
|
132
142
|
className?: string;
|
|
133
143
|
|
|
144
|
+
/**
|
|
145
|
+
* Style applied to the table
|
|
146
|
+
*/
|
|
147
|
+
style?: React.CSSProperties;
|
|
148
|
+
|
|
134
149
|
/**
|
|
135
150
|
* Component rendered at the end of the table, after scroll
|
|
136
151
|
*/
|
|
@@ -142,9 +157,14 @@ export interface VirtualTableProps<T extends Record<string, any>> {
|
|
|
142
157
|
*/
|
|
143
158
|
AddColumnComponent?: React.ComponentType;
|
|
144
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Initial scroll position
|
|
162
|
+
*/
|
|
163
|
+
initialScroll?: number;
|
|
164
|
+
|
|
145
165
|
}
|
|
146
166
|
|
|
147
|
-
export type CellRendererParams<T
|
|
167
|
+
export type CellRendererParams<T = any> = {
|
|
148
168
|
column: VirtualTableColumn;
|
|
149
169
|
columns: VirtualTableColumn[];
|
|
150
170
|
columnIndex: number;
|
|
@@ -158,7 +178,7 @@ export type CellRendererParams<T extends any = any> = {
|
|
|
158
178
|
* @see Table
|
|
159
179
|
* @group Components
|
|
160
180
|
*/
|
|
161
|
-
export interface VirtualTableColumn<CustomProps
|
|
181
|
+
export interface VirtualTableColumn<CustomProps = any> {
|
|
162
182
|
|
|
163
183
|
/**
|
|
164
184
|
* Data key for the cell value, could be "a.b.c"
|
|
@@ -232,12 +252,6 @@ export type OnVirtualTableColumnResizeParams = {
|
|
|
232
252
|
column: VirtualTableColumn
|
|
233
253
|
};
|
|
234
254
|
|
|
235
|
-
/**
|
|
236
|
-
* @see Table
|
|
237
|
-
* @group Components
|
|
238
|
-
*/
|
|
239
|
-
export type VirtualTableSize = "xs" | "s" | "m" | "l" | "xl";
|
|
240
|
-
|
|
241
255
|
/**
|
|
242
256
|
* @see Table
|
|
243
257
|
* @group Components
|
|
@@ -2,9 +2,8 @@ import React, { useCallback } from "react";
|
|
|
2
2
|
|
|
3
3
|
import equal from "react-fast-compare"
|
|
4
4
|
|
|
5
|
-
import { getRowHeight } from "./common";
|
|
6
5
|
import { VirtualTableRowProps } from "./types";
|
|
7
|
-
import {
|
|
6
|
+
import { cls } from "@firecms/ui";
|
|
8
7
|
|
|
9
8
|
export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
|
|
10
9
|
function VirtualTableRow<T>({
|
|
@@ -12,7 +11,7 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
|
|
|
12
11
|
rowIndex,
|
|
13
12
|
children,
|
|
14
13
|
onRowClick,
|
|
15
|
-
|
|
14
|
+
rowHeight,
|
|
16
15
|
style,
|
|
17
16
|
hoverRow,
|
|
18
17
|
rowClassName
|
|
@@ -29,8 +28,8 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
|
|
|
29
28
|
|
|
30
29
|
return (
|
|
31
30
|
<div
|
|
32
|
-
className={
|
|
33
|
-
"flex min-w-full text-sm border-b border-
|
|
31
|
+
className={cls(
|
|
32
|
+
"flex min-w-full text-sm border-b border-surface-200 dark:border-surface-800 border-opacity-40 dark:border-opacity-40",
|
|
34
33
|
rowClassName ? rowClassName(rowData) : "",
|
|
35
34
|
{
|
|
36
35
|
"hover:bg-opacity-95": hoverRow,
|
|
@@ -40,7 +39,7 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
|
|
|
40
39
|
onClick={onClick}
|
|
41
40
|
style={{
|
|
42
41
|
...(style),
|
|
43
|
-
height:
|
|
42
|
+
height: rowHeight,
|
|
44
43
|
width: "fit-content"
|
|
45
44
|
}}
|
|
46
45
|
>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { DateTimeField } from "@firecms/ui";
|
|
2
|
+
import { cls, DateTimeField, focusedDisabled } from "@firecms/ui";
|
|
3
3
|
import { useCustomizationController } from "../../../hooks";
|
|
4
4
|
|
|
5
5
|
export function VirtualTableDateField(props: {
|
|
@@ -25,11 +25,11 @@ export function VirtualTableDateField(props: {
|
|
|
25
25
|
return (
|
|
26
26
|
<DateTimeField
|
|
27
27
|
value={internalValue ?? undefined}
|
|
28
|
-
onChange={(dateValue) => updateValue(dateValue)}
|
|
29
|
-
size={"
|
|
28
|
+
onChange={(dateValue) => updateValue(dateValue ?? null)}
|
|
29
|
+
size={"large"}
|
|
30
30
|
invisible={true}
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
inputClassName={cls("w-full h-full", focusedDisabled)}
|
|
32
|
+
className={cls("w-full h-full", focusedDisabled)}
|
|
33
33
|
mode={mode}
|
|
34
34
|
locale={locale}
|
|
35
35
|
/>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useEffect, useRef, useState } from "react";
|
|
2
2
|
|
|
3
3
|
import { useDebouncedCallback } from "../../../util";
|
|
4
|
-
import { TextareaAutosize } from "@firecms/ui";
|
|
4
|
+
import { focusedDisabled, TextareaAutosize } from "@firecms/ui";
|
|
5
5
|
|
|
6
6
|
export function VirtualTableInput(props: {
|
|
7
7
|
error: Error | undefined;
|
|
@@ -58,6 +58,7 @@ export function VirtualTableInput(props: {
|
|
|
58
58
|
|
|
59
59
|
return (
|
|
60
60
|
<TextareaAutosize
|
|
61
|
+
className={focusedDisabled}
|
|
61
62
|
ref={ref}
|
|
62
63
|
style={{
|
|
63
64
|
padding: 0,
|
|
@@ -65,7 +66,6 @@ export function VirtualTableInput(props: {
|
|
|
65
66
|
width: "100%",
|
|
66
67
|
color: "unset",
|
|
67
68
|
fontWeight: "unset",
|
|
68
|
-
lineHeight: "unset",
|
|
69
69
|
fontSize: "unset",
|
|
70
70
|
fontFamily: "unset",
|
|
71
71
|
background: "unset",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { useEffect, useRef, useState } from "react";
|
|
2
2
|
import { useDebouncedCallback } from "../../../util";
|
|
3
|
+
import { cls, focusedDisabled } from "@firecms/ui";
|
|
3
4
|
|
|
4
5
|
export function VirtualTableNumberInput(props: {
|
|
5
6
|
error: Error | undefined;
|
|
@@ -65,7 +66,7 @@ export function VirtualTableNumberInput(props: {
|
|
|
65
66
|
return (
|
|
66
67
|
<input
|
|
67
68
|
ref={ref}
|
|
68
|
-
className="w-full text-right p-0 m-0 bg-transparent border-none resize-none outline-none font-normal leading-normal text-unset"
|
|
69
|
+
className={cls("w-full text-right p-0 m-0 bg-transparent border-none resize-none outline-none font-normal leading-normal text-unset", focusedDisabled)}
|
|
69
70
|
style={{
|
|
70
71
|
textAlign: align
|
|
71
72
|
}}
|