@firecms/core 3.0.0-beta.1 → 3.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -7
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +16 -0
- package/dist/app/Scaffold.d.ts +30 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ArrayContainer.d.ts +19 -8
- package/dist/components/CircularProgressCenter.d.ts +1 -1
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/{DeleteConfirmationDialog.d.ts → ConfirmationDialog.d.ts} +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +13 -18
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -5
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +9 -15
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +3 -1
- package/dist/components/EntityCollectionTable/index.d.ts +2 -4
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +8 -5
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +13 -4
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/components/EntityCollectionView/utils.d.ts +3 -0
- package/dist/components/EntityPreview.d.ts +26 -7
- package/dist/components/EntityView.d.ts +11 -0
- package/dist/components/ErrorView.d.ts +1 -1
- package/dist/components/FieldCaption.d.ts +5 -0
- package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
- package/dist/components/HomePage/NavigationCard.d.ts +8 -0
- package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
- package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/components/HomePage/index.d.ts +3 -1
- package/dist/components/{FieldConfigBadge.d.ts → PropertyConfigBadge.d.ts} +2 -1
- package/dist/components/PropertyIdCopyTooltip.d.ts +8 -0
- package/dist/components/{ReferenceSelectionInner.d.ts → ReferenceTable/ReferenceSelectionTable.d.ts} +2 -2
- package/dist/components/ReferenceWidget.d.ts +6 -4
- package/dist/components/{EntityCollectionTable/SimpleEntityCollectionTable.d.ts → SelectableTable/SelectableTable.d.ts} +8 -28
- package/dist/components/SelectableTable/SelectableTableContext.d.ts +4 -0
- package/dist/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +16 -13
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
- package/dist/components/common/index.d.ts +6 -0
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/{EntityCollectionTable → common}/types.d.ts +11 -6
- package/dist/components/{EntityCollectionView → common}/useColumnsIds.d.ts +2 -1
- package/dist/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.d.ts +5 -2
- package/dist/components/common/useTableSearchHelper.d.ts +12 -0
- package/dist/components/index.d.ts +14 -8
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +10 -0
- package/dist/core/EntityEditView.d.ts +36 -0
- package/dist/core/FireCMS.d.ts +2 -2
- package/dist/core/NavigationRoutes.d.ts +3 -3
- package/dist/core/index.d.ts +3 -6
- package/dist/form/PropertyFieldBinding.d.ts +1 -1
- package/dist/form/components/CustomIdField.d.ts +2 -1
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/{components → form/components}/LabelWithIcon.d.ts +1 -1
- package/dist/form/components/LabelWithIconAndTooltip.d.ts +15 -0
- package/dist/form/components/StorageItemPreview.d.ts +4 -3
- package/dist/form/components/StorageUploadProgress.d.ts +1 -1
- package/dist/form/components/index.d.ts +2 -2
- 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 +4 -5
- package/dist/form/useClearRestoreValue.d.ts +2 -2
- package/dist/form/validation.d.ts +1 -1
- package/dist/hooks/data/delete.d.ts +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 +3 -3
- package/dist/hooks/index.d.ts +5 -1
- package/dist/hooks/useAuthController.d.ts +1 -1
- package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
- package/dist/hooks/useBuildNavigationController.d.ts +23 -0
- package/dist/hooks/useFireCMSContext.d.ts +1 -1
- package/dist/hooks/useProjectLog.d.ts +14 -0
- package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
- package/dist/hooks/useSnackbarController.d.ts +1 -0
- package/dist/hooks/useStorageSource.d.ts +2 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +20246 -13863
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +22772 -588
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -12
- package/dist/preview/PropertyPreview.d.ts +1 -1
- package/dist/preview/PropertyPreviewProps.d.ts +7 -5
- package/dist/preview/components/BooleanPreview.d.ts +5 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +4 -9
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/util.d.ts +3 -3
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +37 -3
- package/dist/types/collections.d.ts +68 -20
- package/dist/types/datasource.d.ts +55 -39
- package/dist/types/entities.d.ts +7 -1
- package/dist/types/entity_actions.d.ts +18 -4
- package/dist/types/entity_callbacks.d.ts +17 -17
- package/dist/types/entity_overrides.d.ts +6 -0
- package/dist/types/export_import.d.ts +4 -4
- package/dist/types/fields.d.ts +63 -42
- package/dist/types/firecms.d.ts +10 -25
- package/dist/types/firecms_context.d.ts +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/navigation.d.ts +18 -16
- package/dist/types/permissions.d.ts +8 -4
- package/dist/types/plugins.d.ts +39 -39
- package/dist/types/properties.d.ts +36 -23
- 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/storage.d.ts +86 -3
- package/dist/types/user.d.ts +6 -0
- package/dist/util/builders.d.ts +2 -2
- package/dist/util/collections.d.ts +9 -1
- package/dist/util/entities.d.ts +3 -3
- 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 +3 -1
- package/dist/util/navigation_utils.d.ts +2 -2
- 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/strings.d.ts +1 -1
- package/dist/util/useDebouncedCallback.d.ts +1 -0
- package/dist/util/useStorageUploadController.d.ts +3 -3
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +70 -47
- 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 +122 -90
- 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 +13 -22
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +51 -59
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +258 -453
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +13 -14
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +60 -52
- package/src/components/EntityCollectionTable/column_utils.tsx +4 -4
- 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 -9
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +44 -46
- 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 +191 -178
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +187 -175
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
- 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 -72
- 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/PropertyConfigBadge.tsx +23 -0
- package/src/components/PropertyIdCopyTooltip.tsx +48 -0
- package/src/components/{ReferenceSelectionInner.tsx → ReferenceTable/ReferenceSelectionTable.tsx} +38 -24
- package/src/components/ReferenceWidget.tsx +26 -16
- package/src/components/SearchIconsView.tsx +10 -7
- package/src/components/{EntityCollectionTable/SimpleEntityCollectionTable.tsx → SelectableTable/SelectableTable.tsx} +46 -84
- package/src/components/SelectableTable/SelectableTableContext.tsx +6 -0
- package/src/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.tsx +2 -3
- package/src/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.tsx +25 -8
- package/src/components/{EntityCollectionTable → SelectableTable}/filters/ReferenceFilterField.tsx +40 -24
- package/src/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.tsx +92 -24
- package/src/components/VirtualTable/VirtualTable.tsx +77 -46
- package/src/components/VirtualTable/VirtualTableCell.tsx +1 -9
- package/src/components/VirtualTable/VirtualTableHeader.tsx +19 -13
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +19 -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 +4 -3
- package/src/components/VirtualTable/fields/VirtualTableNumberInput.tsx +4 -3
- 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 +17 -9
- package/src/components/common/index.ts +6 -0
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/{EntityCollectionTable → common}/types.tsx +9 -6
- package/src/components/{EntityCollectionView → common}/useColumnsIds.tsx +23 -2
- package/src/components/{EntityCollectionTable → common}/useDataSourceEntityCollectionTableController.tsx +27 -16
- package/src/components/common/useTableSearchHelper.ts +88 -0
- package/src/components/index.tsx +15 -8
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/contexts/DialogsProvider.tsx +2 -2
- package/src/contexts/SnackbarProvider.tsx +2 -0
- package/src/core/DefaultAppBar.tsx +177 -0
- package/src/core/DefaultDrawer.tsx +185 -0
- package/src/core/DrawerNavigationItem.tsx +66 -0
- package/src/core/EntityEditView.tsx +1125 -0
- package/src/core/EntitySidePanel.tsx +9 -8
- package/src/core/FireCMS.tsx +71 -63
- package/src/core/NavigationRoutes.tsx +25 -17
- package/src/core/SideDialogs.tsx +2 -1
- package/src/core/field_configs.tsx +22 -23
- package/src/core/index.tsx +3 -6
- package/src/form/PropertyFieldBinding.tsx +79 -45
- package/src/form/components/CustomIdField.tsx +53 -36
- package/src/form/components/ErrorFocus.tsx +3 -3
- package/src/form/components/FieldHelperText.tsx +4 -4
- package/src/form/components/LabelWithIcon.tsx +41 -0
- package/src/form/components/LabelWithIconAndTooltip.tsx +28 -0
- package/src/form/components/StorageItemPreview.tsx +23 -11
- package/src/form/components/StorageUploadProgress.tsx +8 -8
- package/src/form/components/index.tsx +2 -2
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +30 -19
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +52 -46
- package/src/form/field_bindings/BlockFieldBinding.tsx +67 -47
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +20 -17
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +76 -67
- package/src/form/field_bindings/MapFieldBinding.tsx +81 -60
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +150 -0
- package/src/form/field_bindings/{MultiSelectBinding.tsx → MultiSelectFieldBinding.tsx} +26 -22
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +12 -18
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +46 -34
- package/src/form/field_bindings/RepeatFieldBinding.tsx +55 -35
- package/src/form/field_bindings/SelectFieldBinding.tsx +24 -17
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +42 -43
- package/src/form/field_bindings/SwitchFieldBinding.tsx +30 -27
- package/src/form/field_bindings/TextFieldBinding.tsx +34 -30
- package/src/form/index.tsx +5 -9
- package/src/form/useClearRestoreValue.tsx +2 -2
- package/src/form/validation.ts +4 -21
- package/src/hooks/data/delete.ts +7 -6
- package/src/hooks/data/save.ts +12 -8
- package/src/hooks/data/useCollectionFetch.tsx +3 -3
- package/src/hooks/data/useDataSource.tsx +15 -2
- package/src/hooks/data/useEntityFetch.tsx +6 -6
- package/src/hooks/index.tsx +7 -1
- package/src/hooks/useAuthController.tsx +1 -1
- package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/{core → hooks}/useBuildModeController.tsx +12 -6
- package/src/{internal → hooks}/useBuildNavigationController.tsx +245 -101
- package/src/hooks/useFireCMSContext.tsx +53 -5
- package/src/hooks/useLargeLayout.tsx +10 -7
- package/src/hooks/useProjectLog.tsx +63 -0
- package/src/hooks/useReferenceDialog.tsx +3 -3
- package/src/hooks/useResolvedNavigationFrom.tsx +6 -6
- package/src/hooks/useSnackbarController.tsx +1 -2
- package/src/hooks/useStorageSource.tsx +7 -2
- package/src/hooks/useValidateAuthenticator.tsx +115 -0
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +80 -85
- package/src/internal/useBuildSideDialogsController.tsx +1 -0
- package/src/internal/useBuildSideEntityController.tsx +103 -23
- package/src/internal/useUnsavedChangesDialog.tsx +5 -3
- package/src/preview/PropertyPreview.tsx +15 -22
- package/src/preview/PropertyPreviewProps.tsx +6 -10
- 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 +44 -11
- 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 +9 -9
- 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/types/analytics.ts +1 -0
- package/src/types/auth.tsx +48 -3
- package/src/types/collections.ts +77 -20
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +64 -47
- package/src/types/entities.ts +15 -1
- package/src/types/entity_actions.tsx +21 -4
- package/src/types/entity_callbacks.ts +20 -19
- package/src/types/entity_overrides.tsx +7 -0
- package/src/types/export_import.ts +4 -4
- package/src/types/fields.tsx +69 -45
- package/src/types/firecms.tsx +11 -28
- package/src/types/firecms_context.tsx +1 -1
- package/src/types/index.ts +2 -1
- package/src/types/navigation.ts +20 -19
- package/src/types/permissions.ts +10 -5
- package/src/types/plugins.tsx +46 -48
- package/src/types/properties.ts +42 -24
- package/src/types/property_config.tsx +2 -4
- package/src/types/roles.ts +41 -0
- package/src/types/side_dialogs_controller.tsx +13 -0
- package/src/types/side_entity_controller.tsx +1 -0
- package/src/types/storage.ts +94 -3
- package/src/types/user.ts +9 -0
- package/src/util/builders.ts +6 -6
- package/src/util/collections.ts +22 -0
- package/src/util/entities.ts +9 -6
- 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 +3 -1
- package/src/util/make_properties_editable.ts +13 -5
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/objects.ts +45 -28
- 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 +80 -47
- package/src/util/storage.ts +79 -21
- package/src/util/strings.ts +4 -3
- package/src/util/{useDebounce.ts → useDebouncedCallback.ts} +1 -1
- package/src/util/useStorageUploadController.tsx +34 -8
- package/src/util/useTraceUpdate.tsx +2 -1
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/Scaffold.d.ts +0 -52
- package/dist/form/EntityForm.d.ts +0 -75
- package/dist/form/components/FormikArrayContainer.d.ts +0 -18
- package/dist/form/components/SubmitListener.d.ts +0 -1
- package/dist/form/components/SwitchControl.d.ts +0 -8
- package/dist/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
- package/dist/hooks/useVerifyLicense.d.ts +0 -0
- package/dist/internal/EntityView.d.ts +0 -22
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useBuildNavigationController.d.ts +0 -14
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/dist/util/useDebounce.d.ts +0 -1
- package/src/components/FieldConfigBadge.tsx +0 -17
- package/src/components/FireCMSAppBar.tsx +0 -157
- package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
- package/src/components/LabelWithIcon.tsx +0 -33
- package/src/core/Drawer.tsx +0 -162
- package/src/core/Scaffold.tsx +0 -278
- package/src/form/EntityForm.tsx +0 -657
- package/src/form/components/FormikArrayContainer.tsx +0 -44
- package/src/form/components/SubmitListener.tsx +0 -32
- package/src/form/components/SwitchControl.tsx +0 -39
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +0 -696
- package/src/hooks/useVerifyLicense.tsx +0 -1
- package/src/internal/EntityView.tsx +0 -578
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
- /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/BooleanFilterField.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/DateTimeFilterField.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.d.ts +0 -0
- /package/dist/components/{EntityCollectionTable → common}/useDebouncedData.d.ts +0 -0
- /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
- /package/src/components/{EntityCollectionTable → common}/useDebouncedData.ts +0 -0
package/src/components/{EntityCollectionTable → SelectableTable}/filters/StringNumberFilterField.tsx
RENAMED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import { EnumValuesChip } from "../../../preview";
|
|
3
3
|
import { VirtualTableWhereFilterOp } from "../../VirtualTable";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
Checkbox,
|
|
6
|
+
CloseIcon,
|
|
7
|
+
IconButton,
|
|
8
|
+
Label,
|
|
9
|
+
MultiSelect,
|
|
10
|
+
MultiSelectItem,
|
|
11
|
+
Select,
|
|
12
|
+
SelectItem,
|
|
13
|
+
TextField
|
|
14
|
+
} from "@firecms/ui";
|
|
5
15
|
import { EnumValueConfig } from "../../../types";
|
|
6
16
|
|
|
7
17
|
interface StringNumberFilterFieldProps {
|
|
@@ -50,15 +60,15 @@ export function StringNumberFilterField({
|
|
|
50
60
|
|
|
51
61
|
const [fieldOperation, fieldValue] = value || [possibleOperations[0], undefined];
|
|
52
62
|
const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
|
|
53
|
-
const [internalValue, setInternalValue] = useState<string | number | string[] | number[] | undefined>(fieldValue);
|
|
63
|
+
const [internalValue, setInternalValue] = useState<string | number | string[] | number[] | null | undefined>(fieldValue);
|
|
54
64
|
|
|
55
|
-
function updateFilter(op: VirtualTableWhereFilterOp, val: string | number | string[] | number[] | undefined) {
|
|
65
|
+
function updateFilter(op: VirtualTableWhereFilterOp, val: string | number | string[] | number[] | null | undefined) {
|
|
56
66
|
let newValue = val;
|
|
57
67
|
const prevOpIsArray = multipleSelectOperations.includes(operation);
|
|
58
68
|
const newOpIsArray = multipleSelectOperations.includes(op);
|
|
59
69
|
if (prevOpIsArray !== newOpIsArray) {
|
|
60
70
|
// @ts-ignore
|
|
61
|
-
newValue = newOpIsArray ? (typeof val === "string" || typeof val === "number" ? [val] : []) :
|
|
71
|
+
newValue = newOpIsArray ? (typeof val === "string" || typeof val === "number" ? [val] : []) : undefined;
|
|
62
72
|
}
|
|
63
73
|
|
|
64
74
|
if (typeof newValue === "number" && isNaN(newValue))
|
|
@@ -82,11 +92,13 @@ export function StringNumberFilterField({
|
|
|
82
92
|
}
|
|
83
93
|
|
|
84
94
|
const multiple = multipleSelectOperations.includes(operation);
|
|
95
|
+
|
|
85
96
|
return (
|
|
86
97
|
|
|
87
|
-
<div className="flex w-[440px]
|
|
98
|
+
<div className="flex w-[440px]">
|
|
88
99
|
<div className={"w-[80px]"}>
|
|
89
100
|
<Select value={operation}
|
|
101
|
+
fullWidth={true}
|
|
90
102
|
position={"item-aligned"}
|
|
91
103
|
onValueChange={(value) => {
|
|
92
104
|
updateFilter(value as VirtualTableWhereFilterOp, internalValue);
|
|
@@ -100,11 +112,11 @@ export function StringNumberFilterField({
|
|
|
100
112
|
</Select>
|
|
101
113
|
</div>
|
|
102
114
|
|
|
103
|
-
<div className="flex-grow ml-2">
|
|
115
|
+
<div className="flex-grow ml-2 flex flex-col gap-2">
|
|
104
116
|
|
|
105
117
|
{!enumValues && <TextField
|
|
106
118
|
type={dataType === "number" ? "number" : undefined}
|
|
107
|
-
value={internalValue !== undefined ? String(internalValue) : ""}
|
|
119
|
+
value={internalValue !== undefined && internalValue != null ? String(internalValue) : ""}
|
|
108
120
|
onChange={(evt) => {
|
|
109
121
|
const val = dataType === "number"
|
|
110
122
|
? parseFloat(evt.target.value)
|
|
@@ -112,35 +124,39 @@ export function StringNumberFilterField({
|
|
|
112
124
|
updateFilter(operation, val);
|
|
113
125
|
}}
|
|
114
126
|
endAdornment={internalValue && <IconButton
|
|
115
|
-
className="absolute right-3 top-2"
|
|
116
127
|
onClick={(e) => updateFilter(operation, undefined)}>
|
|
117
|
-
<
|
|
128
|
+
<CloseIcon/>
|
|
118
129
|
</IconButton>}
|
|
119
130
|
/>}
|
|
120
131
|
|
|
121
|
-
{enumValues &&
|
|
122
|
-
|
|
132
|
+
{enumValues && !multiple &&
|
|
123
133
|
<Select
|
|
124
134
|
position={"item-aligned"}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
: isArray ? [] : ""}
|
|
135
|
+
fullWidth={true}
|
|
136
|
+
value={typeof internalValue === "string" ? internalValue : ""}
|
|
128
137
|
onValueChange={(value) => {
|
|
129
|
-
|
|
138
|
+
if (value !== "")
|
|
139
|
+
updateFilter(operation, dataType === "number" ? parseInt(value as string) : value as string)
|
|
130
140
|
}}
|
|
131
|
-
multiple={multiple}
|
|
132
141
|
endAdornment={internalValue && <IconButton
|
|
133
|
-
className="absolute right-
|
|
142
|
+
className="absolute right-2 top-3"
|
|
134
143
|
onClick={(e) => updateFilter(operation, undefined)}>
|
|
135
|
-
<
|
|
144
|
+
<CloseIcon/>
|
|
136
145
|
</IconButton>}
|
|
137
|
-
renderValue={(enumKey) =>
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
146
|
+
renderValue={(enumKey) => {
|
|
147
|
+
if (enumKey === null)
|
|
148
|
+
return "Filter for null values";
|
|
149
|
+
if (enumKey === undefined)
|
|
150
|
+
return null;
|
|
151
|
+
|
|
152
|
+
return <EnumValuesChip
|
|
153
|
+
key={`select_value_${name}_${enumKey}`}
|
|
154
|
+
enumKey={enumKey}
|
|
155
|
+
enumValues={enumValues}
|
|
156
|
+
size={"small"}/>;
|
|
157
|
+
}}>
|
|
142
158
|
{enumValues.map((enumConfig) => (
|
|
143
|
-
<SelectItem key={`
|
|
159
|
+
<SelectItem key={`select_item_${name}_${enumConfig.id}`}
|
|
144
160
|
value={String(enumConfig.id)}>
|
|
145
161
|
<EnumValuesChip
|
|
146
162
|
enumKey={String(enumConfig.id)}
|
|
@@ -151,6 +167,58 @@ export function StringNumberFilterField({
|
|
|
151
167
|
</Select>
|
|
152
168
|
}
|
|
153
169
|
|
|
170
|
+
{enumValues && multiple &&
|
|
171
|
+
<MultiSelect
|
|
172
|
+
position={"item-aligned"}
|
|
173
|
+
value={Array.isArray(internalValue) ? internalValue.map(e => String(e)) : []}
|
|
174
|
+
onValueChange={(value) => {
|
|
175
|
+
updateFilter(operation, dataType === "number" ? value.map(v => parseInt(v)) : value)
|
|
176
|
+
}}
|
|
177
|
+
multiple={multiple}
|
|
178
|
+
endAdornment={internalValue && <IconButton
|
|
179
|
+
className="absolute right-2 top-3"
|
|
180
|
+
onClick={(e) => updateFilter(operation, undefined)}>
|
|
181
|
+
<CloseIcon/>
|
|
182
|
+
</IconButton>}
|
|
183
|
+
// renderValues={(enumKeys) => {
|
|
184
|
+
// console.log("renderValues", enumKeys);
|
|
185
|
+
// if (enumKeys === null)
|
|
186
|
+
// return "Filter for null values";
|
|
187
|
+
//
|
|
188
|
+
// return enumKeys.map(key => <EnumValuesChip
|
|
189
|
+
// key={`select_value_${name}_${enumKeys}`}
|
|
190
|
+
// enumKey={key}
|
|
191
|
+
// enumValues={enumValues}
|
|
192
|
+
// size={"small"}/>);
|
|
193
|
+
// }}
|
|
194
|
+
>
|
|
195
|
+
{enumValues.map((enumConfig) => (
|
|
196
|
+
<MultiSelectItem key={`select_value_${name}_${enumConfig.id}`}
|
|
197
|
+
value={String(enumConfig.id)}>
|
|
198
|
+
<EnumValuesChip
|
|
199
|
+
enumKey={String(enumConfig.id)}
|
|
200
|
+
enumValues={enumValues}
|
|
201
|
+
size={"small"}/>
|
|
202
|
+
</MultiSelectItem>
|
|
203
|
+
))}
|
|
204
|
+
</MultiSelect>
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
{!isArray && <Label
|
|
208
|
+
className="border cursor-pointer rounded-md p-2 flex items-center gap-2 [&:has(:checked)]:bg-surface-100 dark:[&:has(:checked)]:bg-surface-800"
|
|
209
|
+
htmlFor="null-filter"
|
|
210
|
+
>
|
|
211
|
+
<Checkbox id="null-filter"
|
|
212
|
+
checked={internalValue === null}
|
|
213
|
+
size={"small"}
|
|
214
|
+
onCheckedChange={(checked) => {
|
|
215
|
+
if (internalValue !== null)
|
|
216
|
+
updateFilter(operation, null);
|
|
217
|
+
else updateFilter(operation, undefined);
|
|
218
|
+
}}/>
|
|
219
|
+
Filter for null values
|
|
220
|
+
</Label>}
|
|
221
|
+
|
|
154
222
|
</div>
|
|
155
223
|
|
|
156
224
|
</div>
|
|
@@ -15,12 +15,11 @@ 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";
|
|
24
23
|
|
|
25
24
|
const VirtualListContext = createContext<VirtualTableContextProps<any>>({} as any);
|
|
26
25
|
VirtualListContext.displayName = "VirtualListContext";
|
|
@@ -64,10 +63,10 @@ const innerElementType = forwardRef<HTMLDivElement, InnerElementProps>(({
|
|
|
64
63
|
|
|
65
64
|
{customView && <div style={{
|
|
66
65
|
position: "sticky",
|
|
67
|
-
top: "
|
|
66
|
+
top: "48px",
|
|
68
67
|
flexGrow: 1,
|
|
69
|
-
height: "calc(100% -
|
|
70
|
-
marginTop: "calc(
|
|
68
|
+
height: "calc(100% - 48px)",
|
|
69
|
+
marginTop: "calc(48px - 100vh)",
|
|
71
70
|
left: 0
|
|
72
71
|
}}>{customView}</div>}
|
|
73
72
|
|
|
@@ -92,7 +91,8 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
92
91
|
data,
|
|
93
92
|
onResetPagination,
|
|
94
93
|
onEndReached,
|
|
95
|
-
|
|
94
|
+
endOffset = 600,
|
|
95
|
+
rowHeight = 54,
|
|
96
96
|
columns: columnsProp,
|
|
97
97
|
onRowClick,
|
|
98
98
|
onColumnResize,
|
|
@@ -108,9 +108,11 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
108
108
|
hoverRow,
|
|
109
109
|
createFilterField,
|
|
110
110
|
rowClassName,
|
|
111
|
+
style,
|
|
111
112
|
className,
|
|
112
113
|
endAdornment,
|
|
113
|
-
AddColumnComponent
|
|
114
|
+
AddColumnComponent,
|
|
115
|
+
debug
|
|
114
116
|
}: VirtualTableProps<T>) {
|
|
115
117
|
|
|
116
118
|
const sortByProperty: string | undefined = sortBy ? sortBy[0] : undefined;
|
|
@@ -128,10 +130,14 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
128
130
|
const [measureRef, bounds] = useMeasure();
|
|
129
131
|
|
|
130
132
|
const onColumnResizeInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {
|
|
133
|
+
if (debug)
|
|
134
|
+
console.log("onColumnResizeInternal", params);
|
|
131
135
|
setColumns(columns.map((column) => column.key === params.column.key ? params.column : column));
|
|
132
136
|
}, [columns]);
|
|
133
137
|
|
|
134
138
|
const onColumnResizeEndInternal = useCallback((params: OnVirtualTableColumnResizeParams) => {
|
|
139
|
+
if (debug)
|
|
140
|
+
console.log("onColumnResizeEndInternal", params);
|
|
135
141
|
setColumns(columns.map((column) => column.key === params.column.key ? params.column : column));
|
|
136
142
|
if (onColumnResize) {
|
|
137
143
|
onColumnResize(params);
|
|
@@ -142,10 +148,14 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
142
148
|
const filterRef = useRef<VirtualTableFilterValues<any> | undefined>();
|
|
143
149
|
|
|
144
150
|
useEffect(() => {
|
|
151
|
+
if (debug)
|
|
152
|
+
console.log("Filter updated", filterInput);
|
|
145
153
|
filterRef.current = filterInput;
|
|
146
154
|
}, [filterInput]);
|
|
147
155
|
|
|
148
156
|
const scrollToTop = useCallback(() => {
|
|
157
|
+
if (debug)
|
|
158
|
+
console.log("scrollToTop");
|
|
149
159
|
endReachCallbackThreshold.current = 0;
|
|
150
160
|
if (tableRef.current) {
|
|
151
161
|
// scrollRef.current = [scrollRef.current[0], 0];
|
|
@@ -155,6 +165,9 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
155
165
|
|
|
156
166
|
const onColumnSort = useCallback((key: string) => {
|
|
157
167
|
|
|
168
|
+
if (debug)
|
|
169
|
+
console.log("onColumnSort", key);
|
|
170
|
+
|
|
158
171
|
const isDesc = sortByProperty === key && currentSort === "desc";
|
|
159
172
|
const isAsc = sortByProperty === key && currentSort === "asc";
|
|
160
173
|
const newSort = isAsc ? "desc" : (isDesc ? undefined : "asc");
|
|
@@ -181,21 +194,21 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
181
194
|
scrollToTop();
|
|
182
195
|
}, [checkFilterCombination, currentSort, onFilterUpdate, onResetPagination, onSortByUpdate, scrollToTop, sortByProperty]);
|
|
183
196
|
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
onSortByUpdate(undefined);
|
|
188
|
-
}, [onSortByUpdate]);
|
|
197
|
+
const maxScroll = Math.max((data?.length ?? 0) * rowHeight - bounds.height, 0);
|
|
198
|
+
if (debug)
|
|
199
|
+
console.log("maxScroll", maxScroll);
|
|
189
200
|
|
|
190
|
-
const maxScroll = Math.max((data?.length ?? 0) * getRowHeight(size) - bounds.height, 0);
|
|
191
201
|
const onEndReachedInternal = useCallback((scrollOffset: number) => {
|
|
192
|
-
if (
|
|
202
|
+
if (debug)
|
|
203
|
+
console.log("onEndReachedInternal", scrollOffset, endReachCallbackThreshold.current + endOffset);
|
|
204
|
+
if (onEndReached && (data?.length ?? 0) > 0 && scrollOffset > endReachCallbackThreshold.current + endOffset) {
|
|
193
205
|
endReachCallbackThreshold.current = scrollOffset;
|
|
194
206
|
onEndReached();
|
|
195
207
|
}
|
|
196
208
|
}, [data?.length, onEndReached]);
|
|
197
209
|
|
|
198
210
|
const onScroll = useCallback(({
|
|
211
|
+
scrollDirection,
|
|
199
212
|
scrollOffset,
|
|
200
213
|
scrollUpdateWasRequested
|
|
201
214
|
}: {
|
|
@@ -203,11 +216,19 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
203
216
|
scrollOffset: number,
|
|
204
217
|
scrollUpdateWasRequested: boolean;
|
|
205
218
|
}) => {
|
|
206
|
-
if (
|
|
219
|
+
if (debug)
|
|
220
|
+
console.log("onScroll", {
|
|
221
|
+
scrollDirection,
|
|
222
|
+
scrollOffset,
|
|
223
|
+
scrollUpdateWasRequested
|
|
224
|
+
});
|
|
225
|
+
if (!scrollUpdateWasRequested && (scrollOffset >= maxScroll - endOffset))
|
|
207
226
|
onEndReachedInternal(scrollOffset);
|
|
208
227
|
}, [maxScroll, onEndReachedInternal]);
|
|
209
228
|
|
|
210
229
|
const onFilterUpdateInternal = useCallback((column: VirtualTableColumn, filterForProperty?: [VirtualTableWhereFilterOp, any]) => {
|
|
230
|
+
if (debug)
|
|
231
|
+
console.log("onFilterUpdateInternal", column, filterForProperty);
|
|
211
232
|
|
|
212
233
|
endReachCallbackThreshold.current = 0;
|
|
213
234
|
const filter = filterRef.current;
|
|
@@ -225,41 +246,33 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
225
246
|
}
|
|
226
247
|
|
|
227
248
|
if (onFilterUpdate) onFilterUpdate(newFilterValue);
|
|
249
|
+
}, [checkFilterCombination, currentSort, onFilterUpdate, sortByProperty]);
|
|
228
250
|
|
|
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">
|
|
251
|
+
const empty = !loading && (data?.length ?? 0) === 0;
|
|
252
|
+
const customView = error
|
|
253
|
+
? <CenteredView maxWidth={"2xl"}
|
|
254
|
+
className="flex flex-col gap-2">
|
|
237
255
|
|
|
238
256
|
<Typography variant={"h6"}>
|
|
239
|
-
{"Error
|
|
257
|
+
{"Error"}
|
|
240
258
|
</Typography>
|
|
241
259
|
|
|
242
|
-
{error?.message && <
|
|
260
|
+
{error?.message && <SafeLinkRenderer text={error.message}/>}
|
|
243
261
|
|
|
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);
|
|
262
|
+
</CenteredView>
|
|
263
|
+
: (empty
|
|
264
|
+
? (loading
|
|
265
|
+
? <CircularProgressCenter/>
|
|
266
|
+
: <div
|
|
267
|
+
className="flex flex-col overflow-auto items-center justify-center p-2 gap-2 h-full">
|
|
268
|
+
<AssignmentIcon/>
|
|
269
|
+
{emptyComponent}
|
|
270
|
+
</div>)
|
|
271
|
+
: undefined);
|
|
259
272
|
|
|
260
273
|
const virtualListController = {
|
|
261
274
|
data,
|
|
262
|
-
|
|
275
|
+
rowHeight: rowHeight,
|
|
263
276
|
cellRenderer,
|
|
264
277
|
columns,
|
|
265
278
|
currentSort,
|
|
@@ -278,23 +291,27 @@ export const VirtualTable = React.memo<VirtualTableProps<any>>(
|
|
|
278
291
|
AddColumnComponent
|
|
279
292
|
};
|
|
280
293
|
|
|
294
|
+
if (debug)
|
|
295
|
+
console.log("VirtualTable render", virtualListController);
|
|
296
|
+
|
|
281
297
|
// useTraceUpdate(virtualListController);
|
|
282
298
|
return (
|
|
283
299
|
<div
|
|
284
300
|
ref={measureRef}
|
|
285
|
-
|
|
301
|
+
style={style}
|
|
302
|
+
className={cls("h-full w-full", className)}>
|
|
286
303
|
<VirtualListContext.Provider
|
|
287
304
|
value={virtualListController}>
|
|
288
305
|
|
|
289
306
|
<MemoizedList
|
|
290
307
|
outerRef={tableRef}
|
|
291
|
-
key={
|
|
308
|
+
key={rowHeight}
|
|
292
309
|
width={bounds.width}
|
|
293
310
|
height={bounds.height}
|
|
294
311
|
itemCount={(data?.length ?? 0) + (endAdornment ? 1 : 0)}
|
|
295
312
|
onScroll={onScroll}
|
|
296
313
|
includeAddColumn={Boolean(AddColumnComponent)}
|
|
297
|
-
itemSize={
|
|
314
|
+
itemSize={rowHeight}/>
|
|
298
315
|
|
|
299
316
|
</VirtualListContext.Provider>
|
|
300
317
|
</div>
|
|
@@ -334,7 +351,7 @@ function MemoizedList({
|
|
|
334
351
|
onRowClick,
|
|
335
352
|
data,
|
|
336
353
|
columns,
|
|
337
|
-
|
|
354
|
+
rowHeight = 54,
|
|
338
355
|
cellRenderer,
|
|
339
356
|
hoverRow,
|
|
340
357
|
rowClassName,
|
|
@@ -367,7 +384,7 @@ function MemoizedList({
|
|
|
367
384
|
...style,
|
|
368
385
|
top: `calc(${style.top}px + 48px)`
|
|
369
386
|
}}
|
|
370
|
-
|
|
387
|
+
rowHeight={rowHeight}>
|
|
371
388
|
|
|
372
389
|
{columns.map((column: VirtualTableColumn, columnIndex: number) => {
|
|
373
390
|
const cellData = rowData && rowData[column.key];
|
|
@@ -403,3 +420,17 @@ function MemoizedList({
|
|
|
403
420
|
{Row}
|
|
404
421
|
</List>;
|
|
405
422
|
}
|
|
423
|
+
|
|
424
|
+
const SafeLinkRenderer: React.FC<{
|
|
425
|
+
text: string;
|
|
426
|
+
}> = ({ text }) => {
|
|
427
|
+
const urlRegex = /https?:\/\/[^\s]+/g;
|
|
428
|
+
const htmlContent = text.replace(urlRegex, (url) => {
|
|
429
|
+
// For each URL found, replace it with an HTML <a> tag
|
|
430
|
+
return `<a href="${url}" class="underline" target="_blank">Link</a><br/>`;
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
return (
|
|
434
|
+
<div className={"break-all"} dangerouslySetInnerHTML={{ __html: htmlContent }}/>
|
|
435
|
+
);
|
|
436
|
+
};
|
|
@@ -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
|
/>}
|
|
@@ -198,7 +198,7 @@ function FilterForm<M>({
|
|
|
198
198
|
onHover,
|
|
199
199
|
createFilterField,
|
|
200
200
|
hidden,
|
|
201
|
-
setHidden
|
|
201
|
+
setHidden
|
|
202
202
|
}: FilterFormProps<M>) {
|
|
203
203
|
|
|
204
204
|
const id = column.key;
|
|
@@ -232,9 +232,15 @@ function FilterForm<M>({
|
|
|
232
232
|
|
|
233
233
|
if (!filterField) return null;
|
|
234
234
|
return (
|
|
235
|
-
<
|
|
235
|
+
<form noValidate={true}
|
|
236
|
+
onSubmit={(e) => {
|
|
237
|
+
e.stopPropagation();
|
|
238
|
+
e.preventDefault();
|
|
239
|
+
submit();
|
|
240
|
+
}}
|
|
241
|
+
className={"text-surface-900 dark:text-white"}>
|
|
236
242
|
<div
|
|
237
|
-
className={
|
|
243
|
+
className={cls(defaultBorderMixin, "py-4 px-6 typography-label border-b")}>
|
|
238
244
|
{column.title ?? id}
|
|
239
245
|
</div>
|
|
240
246
|
{filterField && <div className="m-4">
|
|
@@ -252,9 +258,9 @@ function FilterForm<M>({
|
|
|
252
258
|
<Button
|
|
253
259
|
variant="outlined"
|
|
254
260
|
color="primary"
|
|
255
|
-
|
|
261
|
+
type="submit">Filter</Button>
|
|
256
262
|
</div>
|
|
257
|
-
</
|
|
263
|
+
</form>
|
|
258
264
|
);
|
|
259
265
|
|
|
260
266
|
}
|
|
@@ -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
|
|