@firecms/core 3.0.1 → 3.1.0-canary.02232f4
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 +1 -1
- package/dist/components/AIIcon.d.ts +16 -0
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +7 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +14 -0
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +6 -0
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +6 -0
- package/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +2 -2
- package/dist/components/EntityCollectionView/Board.d.ts +2 -0
- package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
- package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
- package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
- package/dist/components/EntityCollectionView/CollectionDataErrorBanner.d.ts +4 -0
- package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +26 -0
- package/dist/components/EntityCollectionView/EntityCard.d.ts +19 -0
- package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +20 -0
- package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +31 -0
- package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -2
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +7 -3
- package/dist/components/EntityCollectionView/FiltersDialog.d.ts +14 -0
- package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +44 -0
- package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
- package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
- package/dist/components/ErrorBoundary.d.ts +4 -2
- package/dist/components/HomePage/DefaultHomePage.d.ts +0 -1
- package/dist/components/LanguageToggle.d.ts +1 -0
- package/dist/components/SelectableTable/SelectableTable.d.ts +5 -1
- package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
- package/dist/components/UnsavedChangesDialog.d.ts +1 -0
- package/dist/components/VirtualTable/VirtualTableCell.d.ts +6 -0
- package/dist/components/VirtualTable/VirtualTableHeader.d.ts +4 -1
- package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +17 -1
- package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
- package/dist/components/VirtualTable/types.d.ts +3 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/contexts/index.d.ts +10 -0
- package/dist/core/DrawerNavigationGroup.d.ts +45 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
- package/dist/editor/components/editor-bubble-item.d.ts +8 -0
- package/dist/editor/components/editor-bubble.d.ts +8 -0
- package/dist/editor/components/image-bubble.d.ts +5 -0
- package/dist/editor/components/index.d.ts +16 -0
- package/dist/editor/components/table-bubble.d.ts +5 -0
- package/dist/editor/editor.d.ts +30 -0
- package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
- package/dist/editor/extensions/Image/index.d.ts +6 -0
- package/dist/editor/extensions/Image.d.ts +6 -0
- package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
- package/dist/editor/extensions/clipboard.d.ts +7 -0
- package/dist/editor/extensions/custom-keymap.d.ts +1 -0
- package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
- package/dist/editor/hooks/useProseMirror.d.ts +13 -0
- package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
- package/dist/editor/index.d.ts +2 -0
- package/dist/editor/markdown.d.ts +5 -0
- package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
- package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
- package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
- package/dist/editor/nodeViews/index.d.ts +6 -0
- package/dist/editor/plugins/index.d.ts +2 -0
- package/dist/editor/plugins/inputrules.d.ts +6 -0
- package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
- package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
- package/dist/editor/schema.d.ts +2 -0
- package/dist/editor/selectors/ai-selector.d.ts +0 -0
- package/dist/editor/selectors/color-selector.d.ts +10 -0
- package/dist/editor/selectors/link-selector.d.ts +8 -0
- package/dist/editor/selectors/node-selector.d.ts +15 -0
- package/dist/editor/selectors/text-buttons.d.ts +1 -0
- package/dist/editor/types.d.ts +5 -0
- package/dist/editor/useProseMirror.d.ts +16 -0
- package/dist/editor/utils/prosemirror-utils.d.ts +6 -0
- package/dist/editor/utils/remove_classes.d.ts +1 -0
- package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +1 -1
- package/dist/form/validation.d.ts +3 -2
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useBreadcrumbsController.d.ts +16 -0
- package/dist/hooks/useBuildNavigationController.d.ts +0 -1
- package/dist/hooks/useCollapsedGroups.d.ts +6 -3
- package/dist/hooks/useTranslation.d.ts +17 -0
- package/dist/i18n/FireCMSi18nProvider.d.ts +33 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.es.js +30146 -15178
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +30032 -15085
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useRestoreScroll.d.ts +1 -1
- package/dist/locales/de.d.ts +2 -0
- package/dist/locales/en.d.ts +10 -0
- package/dist/locales/es.d.ts +10 -0
- package/dist/locales/fr.d.ts +2 -0
- package/dist/locales/hi.d.ts +2 -0
- package/dist/locales/it.d.ts +2 -0
- package/dist/locales/pt.d.ts +7 -0
- package/dist/preview/PropertyPreviewProps.d.ts +5 -0
- package/dist/preview/components/DatePreview.d.ts +13 -3
- package/dist/preview/components/ImagePreview.d.ts +5 -1
- package/dist/preview/components/StorageThumbnail.d.ts +2 -1
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +1 -1
- package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
- package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +1 -1
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/collections.d.ts +88 -2
- package/dist/types/customization_controller.d.ts +2 -1
- package/dist/types/datasource.d.ts +0 -1
- package/dist/types/firecms.d.ts +2 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/navigation.d.ts +2 -2
- package/dist/types/plugins.d.ts +69 -1
- package/dist/types/properties.d.ts +268 -12
- package/dist/types/storage.d.ts +1 -0
- package/dist/types/translations.d.ts +669 -0
- package/dist/util/__tests__/conditions.test.d.ts +1 -0
- package/dist/util/__tests__/objects.test.d.ts +1 -0
- package/dist/util/conditions.d.ts +26 -0
- package/dist/util/entities.d.ts +2 -3
- package/dist/util/index.d.ts +3 -1
- package/dist/util/lazy_eager.d.ts +7 -0
- package/dist/util/objects.d.ts +1 -0
- package/dist/util/property_utils.d.ts +2 -1
- package/dist/util/resolutions.d.ts +3 -3
- package/dist/util/useStorageUploadController.d.ts +10 -1
- package/package.json +51 -12
- package/src/app/Scaffold.tsx +20 -19
- package/src/components/AIIcon.tsx +41 -0
- package/src/components/ArrayContainer.tsx +7 -8
- package/src/components/ClearFilterSortButton.tsx +25 -19
- package/src/components/ConfirmationDialog.tsx +4 -4
- package/src/components/DeleteEntityDialog.tsx +12 -11
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +82 -43
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +130 -79
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +121 -104
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +132 -103
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +6 -3
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +24 -44
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +90 -49
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +3 -2
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +11 -11
- package/src/components/EntityCollectionView/Board.tsx +324 -0
- package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
- package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
- package/src/components/EntityCollectionView/BoardSortableList.tsx +174 -0
- package/src/components/EntityCollectionView/CollectionDataErrorBanner.tsx +43 -0
- package/src/components/EntityCollectionView/EntityBoardCard.tsx +212 -0
- package/src/components/EntityCollectionView/EntityCard.tsx +235 -0
- package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +706 -0
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +236 -0
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +531 -209
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +35 -22
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +86 -15
- package/src/components/EntityCollectionView/FiltersDialog.tsx +252 -0
- package/src/components/EntityCollectionView/ViewModeToggle.tsx +202 -0
- package/src/components/EntityCollectionView/board_types.ts +113 -0
- package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
- package/src/components/EntityJsonPreview.tsx +2 -1
- package/src/components/EntityView.tsx +3 -2
- package/src/components/ErrorBoundary.tsx +27 -15
- package/src/components/ErrorTooltip.tsx +2 -1
- package/src/components/HomePage/DefaultHomePage.tsx +65 -22
- package/src/components/HomePage/HomePageDnD.tsx +59 -42
- package/src/components/HomePage/NavigationCard.tsx +20 -18
- package/src/components/HomePage/NavigationGroup.tsx +20 -17
- package/src/components/HomePage/RenameGroupDialog.tsx +15 -15
- package/src/components/HomePage/SmallNavigationCard.tsx +10 -9
- package/src/components/LanguageToggle.tsx +66 -0
- package/src/components/NotFoundPage.tsx +5 -3
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +12 -17
- package/src/components/ReferenceWidget.tsx +5 -6
- package/src/components/SearchIconsView.tsx +3 -1
- package/src/components/SelectableTable/SelectableTable.tsx +75 -67
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +7 -6
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +50 -40
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +53 -40
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +60 -58
- package/src/components/UnsavedChangesDialog.tsx +6 -6
- package/src/components/UserDisplay.tsx +4 -4
- package/src/components/VirtualTable/VirtualTable.performance.test.tsx +1 -0
- package/src/components/VirtualTable/VirtualTable.tsx +275 -119
- package/src/components/VirtualTable/VirtualTableCell.tsx +18 -2
- package/src/components/VirtualTable/VirtualTableHeader.tsx +76 -64
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +163 -42
- package/src/components/VirtualTable/VirtualTableProps.tsx +21 -2
- package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -0
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +19 -6
- package/src/components/VirtualTable/types.tsx +3 -0
- package/src/components/common/default_entity_actions.tsx +4 -0
- package/src/components/common/useColumnsIds.tsx +95 -3
- package/src/components/common/useDataSourceTableController.tsx +12 -4
- package/src/components/index.tsx +5 -0
- package/src/contexts/BreacrumbsContext.tsx +15 -8
- package/src/contexts/index.ts +10 -0
- package/src/core/DefaultAppBar.tsx +49 -32
- package/src/core/DefaultDrawer.tsx +49 -57
- package/src/core/DrawerNavigationGroup.tsx +120 -0
- package/src/core/DrawerNavigationItem.tsx +4 -3
- package/src/core/EntityEditView.tsx +94 -50
- package/src/core/EntityEditViewFormActions.tsx +24 -17
- package/src/core/EntitySidePanel.tsx +34 -30
- package/src/core/FireCMS.tsx +33 -6
- package/src/core/SideDialogs.tsx +4 -2
- package/src/core/field_configs.tsx +18 -11
- package/src/core/index.tsx +1 -0
- package/src/editor/components/SlashCommandMenu.tsx +516 -0
- package/src/editor/components/editor-bubble-item.tsx +32 -0
- package/src/editor/components/editor-bubble.tsx +118 -0
- package/src/editor/components/image-bubble.tsx +156 -0
- package/src/editor/components/index.ts +14 -0
- package/src/editor/components/table-bubble.tsx +165 -0
- package/src/editor/editor.tsx +455 -0
- package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
- package/src/editor/extensions/Image/index.ts +133 -0
- package/src/editor/extensions/Image.ts +159 -0
- package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
- package/src/editor/extensions/clipboard.ts +72 -0
- package/src/editor/extensions/custom-keymap.ts +24 -0
- package/src/editor/extensions/drag-and-drop.tsx +480 -0
- package/src/editor/hooks/useProseMirror.ts +124 -0
- package/src/editor/hooks/useProseMirrorContext.ts +15 -0
- package/src/editor/index.ts +2 -0
- package/src/editor/markdown.ts +172 -0
- package/src/editor/nodeViews/ImageComponent.tsx +20 -0
- package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
- package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
- package/src/editor/nodeViews/index.ts +35 -0
- package/src/editor/plugins/index.ts +58 -0
- package/src/editor/plugins/inputrules.ts +82 -0
- package/src/editor/plugins/placeholderPlugin.ts +55 -0
- package/src/editor/plugins/slashCommandPlugin.ts +61 -0
- package/src/editor/schema.ts +240 -0
- package/src/editor/selectors/ai-selector.tsx +111 -0
- package/src/editor/selectors/color-selector.tsx +200 -0
- package/src/editor/selectors/link-selector.tsx +118 -0
- package/src/editor/selectors/node-selector.tsx +157 -0
- package/src/editor/selectors/text-buttons.tsx +86 -0
- package/src/editor/types.ts +6 -0
- package/src/editor/useProseMirror.ts +126 -0
- package/src/editor/utils/prosemirror-utils.ts +108 -0
- package/src/editor/utils/remove_classes.ts +17 -0
- package/src/editor/utils/useDebouncedCallback.ts +25 -0
- package/src/form/EntityForm.tsx +149 -67
- package/src/form/EntityFormActions.tsx +19 -12
- package/src/form/PropertyFieldBinding.tsx +68 -51
- package/src/form/components/ErrorFocus.tsx +3 -3
- package/src/form/components/LocalChangesMenu.tsx +13 -13
- package/src/form/components/StorageItemPreview.tsx +5 -3
- package/src/form/components/StorageUploadProgress.tsx +18 -3
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +18 -5
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +22 -10
- package/src/form/field_bindings/BlockFieldBinding.tsx +26 -9
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +18 -17
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +46 -25
- package/src/form/field_bindings/MapFieldBinding.tsx +88 -70
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +93 -52
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +15 -1
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +25 -11
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +25 -11
- package/src/form/field_bindings/RepeatFieldBinding.tsx +21 -6
- package/src/form/field_bindings/SelectFieldBinding.tsx +7 -5
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +110 -92
- package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -14
- package/src/form/field_bindings/TextFieldBinding.tsx +77 -38
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +7 -5
- package/src/form/validation.ts +245 -160
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useBreadcrumbsController.tsx +18 -0
- package/src/hooks/useBuildNavigationController.tsx +91 -41
- package/src/hooks/useCollapsedGroups.ts +18 -9
- package/src/hooks/useTranslation.ts +31 -0
- package/src/hooks/useValidateAuthenticator.tsx +1 -1
- package/src/i18n/FireCMSi18nProvider.tsx +160 -0
- package/src/index.ts +5 -0
- package/src/internal/useBuildDataSource.ts +68 -34
- package/src/internal/useBuildSideDialogsController.tsx +11 -8
- package/src/internal/useBuildSideEntityController.tsx +24 -24
- package/src/internal/useRestoreScroll.tsx +26 -14
- package/src/locales/de.ts +718 -0
- package/src/locales/en.ts +730 -0
- package/src/locales/es.ts +730 -0
- package/src/locales/fr.ts +718 -0
- package/src/locales/hi.ts +718 -0
- package/src/locales/it.ts +718 -0
- package/src/locales/pt.ts +727 -0
- package/src/preview/PropertyPreview.tsx +43 -33
- package/src/preview/PropertyPreviewProps.tsx +6 -0
- package/src/preview/components/DatePreview.tsx +72 -4
- package/src/preview/components/EmptyValue.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +37 -21
- package/src/preview/components/ReferencePreview.tsx +2 -1
- package/src/preview/components/StorageThumbnail.tsx +16 -12
- package/src/preview/components/UrlComponentPreview.tsx +32 -27
- package/src/preview/components/UserPreview.tsx +3 -1
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +9 -7
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +11 -9
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +26 -24
- package/src/preview/property_previews/MapPropertyPreview.tsx +49 -27
- package/src/preview/property_previews/SkeletonPropertyComponent.tsx +61 -56
- package/src/routes/CustomCMSRoute.tsx +1 -0
- package/src/routes/FireCMSRoute.tsx +87 -65
- package/src/types/analytics.ts +10 -0
- package/src/types/collections.ts +97 -3
- package/src/types/customization_controller.tsx +2 -1
- package/src/types/datasource.ts +54 -56
- package/src/types/firecms.tsx +2 -1
- package/src/types/index.ts +1 -0
- package/src/types/navigation.ts +2 -2
- package/src/types/plugins.tsx +77 -1
- package/src/types/properties.ts +359 -37
- package/src/types/storage.ts +2 -1
- package/src/types/translations.ts +752 -0
- package/src/util/__tests__/conditions.test.ts +506 -0
- package/src/util/__tests__/objects.test.ts +196 -0
- package/src/util/callbacks.ts +6 -3
- package/src/util/collections.ts +51 -6
- package/src/util/conditions.ts +339 -0
- package/src/util/entities.ts +29 -30
- package/src/util/entity_cache.ts +2 -1
- package/src/util/index.ts +3 -1
- package/src/util/join_collections.ts +10 -8
- package/src/util/lazy_eager.tsx +33 -0
- package/src/util/objects.ts +46 -13
- package/src/util/{references.ts → previews.ts} +16 -2
- package/src/util/property_utils.tsx +37 -11
- package/src/util/resolutions.ts +62 -58
- package/src/util/useStorageUploadController.tsx +23 -29
- /package/dist/util/{references.d.ts → previews.d.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import { VirtualTableWhereFilterOp } from "../../VirtualTable";
|
|
3
|
-
import {
|
|
3
|
+
import { DateTimeField, Select, SelectItem } from "@firecms/ui";
|
|
4
4
|
import { useCustomizationController } from "../../../hooks";
|
|
5
5
|
|
|
6
6
|
interface DateTimeFilterFieldProps {
|
|
@@ -10,9 +10,10 @@ interface DateTimeFilterFieldProps {
|
|
|
10
10
|
setValue: (value?: [op: VirtualTableWhereFilterOp, newValue: any]) => void;
|
|
11
11
|
isArray?: boolean;
|
|
12
12
|
title?: string;
|
|
13
|
+
timezone?: string;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
const operationLabels: Record<VirtualTableWhereFilterOp, string> = {
|
|
16
|
+
const operationLabels: Record<VirtualTableWhereFilterOp | "is-null", string> = {
|
|
16
17
|
"==": "==",
|
|
17
18
|
"!=": "!=",
|
|
18
19
|
">": ">",
|
|
@@ -22,30 +23,53 @@ const operationLabels: Record<VirtualTableWhereFilterOp, string> = {
|
|
|
22
23
|
"not-in": "not in",
|
|
23
24
|
in: "in",
|
|
24
25
|
"array-contains": "Contains",
|
|
25
|
-
"array-contains-any": "Any"
|
|
26
|
+
"array-contains-any": "Any",
|
|
27
|
+
"is-null": "Is null"
|
|
26
28
|
};
|
|
27
29
|
|
|
28
30
|
const multipleSelectOperations = ["array-contains-any", "in"];
|
|
29
31
|
|
|
30
32
|
export function DateTimeFilterField({
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
name,
|
|
34
|
+
isArray,
|
|
35
|
+
mode,
|
|
36
|
+
value,
|
|
37
|
+
setValue,
|
|
38
|
+
title,
|
|
39
|
+
timezone
|
|
40
|
+
}: DateTimeFilterFieldProps) {
|
|
38
41
|
|
|
39
42
|
const { locale } = useCustomizationController();
|
|
40
|
-
const possibleOperations: (keyof typeof operationLabels)
|
|
43
|
+
const possibleOperations: (keyof typeof operationLabels)[] = isArray
|
|
41
44
|
? ["array-contains"]
|
|
42
|
-
: ["==", "!=", ">", "<", ">=", "<="];
|
|
45
|
+
: ["==", "!=", ">", "<", ">=", "<=", "is-null"];
|
|
43
46
|
|
|
44
47
|
const [fieldOperation, fieldValue] = value || [possibleOperations[0], undefined];
|
|
45
|
-
const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
|
|
48
|
+
const [operation, setOperation] = useState<VirtualTableWhereFilterOp | "is-null">(fieldOperation === "==" && fieldValue === null ? "is-null" : fieldOperation);
|
|
46
49
|
const [internalValue, setInternalValue] = useState<Date | null | undefined>(fieldValue);
|
|
47
50
|
|
|
48
|
-
|
|
51
|
+
React.useEffect(() => {
|
|
52
|
+
if (value) {
|
|
53
|
+
const [op, val] = value;
|
|
54
|
+
setOperation(op === "==" && val === null ? "is-null" : op);
|
|
55
|
+
setInternalValue(val);
|
|
56
|
+
} else {
|
|
57
|
+
setOperation(possibleOperations[0]);
|
|
58
|
+
setInternalValue(undefined);
|
|
59
|
+
}
|
|
60
|
+
}, [value, possibleOperations[0]]);
|
|
61
|
+
|
|
62
|
+
const isNullOperation = operation === "is-null";
|
|
63
|
+
|
|
64
|
+
function updateFilter(op: VirtualTableWhereFilterOp | "is-null", val: Date | undefined | null) {
|
|
65
|
+
// Handle "is null" operation
|
|
66
|
+
if (op === "is-null") {
|
|
67
|
+
setOperation(op);
|
|
68
|
+
setInternalValue(null);
|
|
69
|
+
setValue(["==", null]);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
49
73
|
let newValue: Date | null | undefined = val;
|
|
50
74
|
const prevOpIsArray = multipleSelectOperations.includes(operation);
|
|
51
75
|
const newOpIsArray = multipleSelectOperations.includes(op);
|
|
@@ -73,15 +97,15 @@ export function DateTimeFilterField({
|
|
|
73
97
|
|
|
74
98
|
return (
|
|
75
99
|
|
|
76
|
-
<div className="flex w-
|
|
77
|
-
<div className="w-[
|
|
100
|
+
<div className="flex w-full">
|
|
101
|
+
<div className="w-[100px]">
|
|
78
102
|
<Select value={operation}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
103
|
+
size={"medium"}
|
|
104
|
+
fullWidth={true}
|
|
105
|
+
onValueChange={(value) => {
|
|
106
|
+
updateFilter(value as VirtualTableWhereFilterOp | "is-null", internalValue);
|
|
107
|
+
}}
|
|
108
|
+
renderValue={(op) => operationLabels[op as keyof typeof operationLabels]}>
|
|
85
109
|
{possibleOperations.map((op) => (
|
|
86
110
|
<SelectItem key={op} value={op}>
|
|
87
111
|
{operationLabels[op]}
|
|
@@ -94,31 +118,17 @@ export function DateTimeFilterField({
|
|
|
94
118
|
|
|
95
119
|
<DateTimeField
|
|
96
120
|
mode={mode}
|
|
97
|
-
size={"
|
|
121
|
+
size={"medium"}
|
|
98
122
|
locale={locale}
|
|
99
|
-
|
|
100
|
-
|
|
123
|
+
timezone={timezone}
|
|
124
|
+
disabled={isNullOperation}
|
|
125
|
+
value={isNullOperation ? undefined : (internalValue ?? undefined)}
|
|
101
126
|
onChange={(dateValue: Date | null) => {
|
|
102
127
|
updateFilter(operation, dateValue === null ? undefined : dateValue);
|
|
103
128
|
}}
|
|
104
129
|
clearable={true}
|
|
105
130
|
/>
|
|
106
131
|
|
|
107
|
-
<Label
|
|
108
|
-
className="border cursor-pointer rounded-md p-2 flex items-center gap-2 [&:has(:checked)]:bg-surface-100 dark:[&:has(:checked)]:bg-surface-800"
|
|
109
|
-
htmlFor="null-filter"
|
|
110
|
-
>
|
|
111
|
-
<Checkbox id="null-filter"
|
|
112
|
-
checked={internalValue === null}
|
|
113
|
-
size={"small"}
|
|
114
|
-
onCheckedChange={(checked) => {
|
|
115
|
-
if (internalValue !== null)
|
|
116
|
-
updateFilter(operation, null);
|
|
117
|
-
else updateFilter(operation, undefined);
|
|
118
|
-
}}/>
|
|
119
|
-
Filter for null values
|
|
120
|
-
</Label>
|
|
121
|
-
|
|
122
132
|
</div>
|
|
123
133
|
|
|
124
134
|
</div>
|
|
@@ -3,7 +3,7 @@ import { VirtualTableWhereFilterOp } from "../../VirtualTable";
|
|
|
3
3
|
import { Entity, EntityCollection, EntityReference } from "../../../types";
|
|
4
4
|
import { ReferencePreview } from "../../../preview";
|
|
5
5
|
import { getReferenceFrom } from "../../../util";
|
|
6
|
-
import { useNavigationController, useReferenceDialog } from "../../../hooks";
|
|
6
|
+
import { useNavigationController, useReferenceDialog, useTranslation } from "../../../hooks";
|
|
7
7
|
import { Button, Checkbox, Label, Select, SelectItem } from "@firecms/ui";
|
|
8
8
|
|
|
9
9
|
interface ReferenceFilterFieldProps {
|
|
@@ -35,16 +35,18 @@ const operationLabels = {
|
|
|
35
35
|
const multipleSelectOperations = ["array-contains-any", "in", "not-in"];
|
|
36
36
|
|
|
37
37
|
export function ReferenceFilterField({
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const
|
|
38
|
+
value,
|
|
39
|
+
setValue,
|
|
40
|
+
isArray,
|
|
41
|
+
path,
|
|
42
|
+
includeId = true,
|
|
43
|
+
previewProperties,
|
|
44
|
+
setHidden
|
|
45
|
+
}: ReferenceFilterFieldProps) {
|
|
46
|
+
|
|
47
|
+
const { t } = useTranslation();
|
|
48
|
+
|
|
49
|
+
const possibleOperations: (keyof typeof operationLabels)[] = isArray
|
|
48
50
|
? ["array-contains"]
|
|
49
51
|
: ["==", "!=", ">", "<", ">=", "<="];
|
|
50
52
|
|
|
@@ -58,6 +60,17 @@ export function ReferenceFilterField({
|
|
|
58
60
|
const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
|
|
59
61
|
const [internalValue, setInternalValue] = useState<EntityReference | EntityReference[] | undefined | null>(fieldValue);
|
|
60
62
|
|
|
63
|
+
React.useEffect(() => {
|
|
64
|
+
if (value) {
|
|
65
|
+
const [op, val] = value;
|
|
66
|
+
setOperation(op);
|
|
67
|
+
setInternalValue(val);
|
|
68
|
+
} else {
|
|
69
|
+
setOperation(possibleOperations[0] as VirtualTableWhereFilterOp);
|
|
70
|
+
setInternalValue(undefined);
|
|
71
|
+
}
|
|
72
|
+
}, [value, possibleOperations[0]]);
|
|
73
|
+
|
|
61
74
|
const selectedEntityIds = internalValue
|
|
62
75
|
? (Array.isArray(internalValue) ? internalValue.map((ref) => {
|
|
63
76
|
if (!(ref?.isEntityReference && ref?.isEntityReference())) {
|
|
@@ -110,16 +123,16 @@ export function ReferenceFilterField({
|
|
|
110
123
|
const multiple = multipleSelectOperations.includes(operation);
|
|
111
124
|
|
|
112
125
|
const referenceDialogController = useReferenceDialog({
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
126
|
+
multiselect: multiple,
|
|
127
|
+
path,
|
|
128
|
+
collection,
|
|
129
|
+
onSingleEntitySelected,
|
|
130
|
+
onMultipleEntitiesSelected,
|
|
131
|
+
selectedEntityIds,
|
|
132
|
+
onClose: () => {
|
|
133
|
+
setHidden(false);
|
|
122
134
|
}
|
|
135
|
+
}
|
|
123
136
|
);
|
|
124
137
|
|
|
125
138
|
const doOpenDialog = () => {
|
|
@@ -144,15 +157,15 @@ export function ReferenceFilterField({
|
|
|
144
157
|
|
|
145
158
|
return (
|
|
146
159
|
|
|
147
|
-
<div className="flex w-
|
|
148
|
-
<div className="w-[
|
|
160
|
+
<div className="flex w-full flex-row">
|
|
161
|
+
<div className="w-[100px]">
|
|
149
162
|
<Select value={operation}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
163
|
+
size={"medium"}
|
|
164
|
+
fullWidth={true}
|
|
165
|
+
onValueChange={(value) => {
|
|
166
|
+
updateFilter(value as VirtualTableWhereFilterOp, internalValue);
|
|
167
|
+
}}
|
|
168
|
+
renderValue={(op) => operationLabels[op as VirtualTableWhereFilterOp]}>
|
|
156
169
|
{possibleOperations.map((op) => (
|
|
157
170
|
<SelectItem key={op} value={op}>
|
|
158
171
|
{operationLabels[op]}
|
|
@@ -161,7 +174,7 @@ export function ReferenceFilterField({
|
|
|
161
174
|
</Select>
|
|
162
175
|
</div>
|
|
163
176
|
|
|
164
|
-
<div className="flex-grow ml-2 h-full gap-2 flex flex-col
|
|
177
|
+
<div className="flex-grow ml-2 h-full gap-2 flex flex-col">
|
|
165
178
|
|
|
166
179
|
{internalValue && Array.isArray(internalValue) && <div>
|
|
167
180
|
{internalValue.map((ref, index) => buildEntry(ref))}
|
|
@@ -173,9 +186,9 @@ export function ReferenceFilterField({
|
|
|
173
186
|
|
|
174
187
|
{(!internalValue || (Array.isArray(internalValue) && internalValue.length === 0)) &&
|
|
175
188
|
<Button onClick={doOpenDialog}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
189
|
+
|
|
190
|
+
size={"medium"}
|
|
191
|
+
className="h-full w-full">
|
|
179
192
|
{multiple ? "Select references" : "Select reference"}
|
|
180
193
|
</Button>
|
|
181
194
|
}
|
|
@@ -185,14 +198,14 @@ export function ReferenceFilterField({
|
|
|
185
198
|
htmlFor="null-filter"
|
|
186
199
|
>
|
|
187
200
|
<Checkbox id="null-filter"
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
201
|
+
checked={internalValue === null}
|
|
202
|
+
size={"small"}
|
|
203
|
+
onCheckedChange={(checked) => {
|
|
204
|
+
if (internalValue !== null)
|
|
205
|
+
updateFilter(operation, null);
|
|
206
|
+
else updateFilter(operation, undefined);
|
|
207
|
+
}} />
|
|
208
|
+
{t("filter_for_null_values")}
|
|
196
209
|
</Label>}
|
|
197
210
|
|
|
198
211
|
</div>
|
|
@@ -2,10 +2,8 @@ import React, { useState } from "react";
|
|
|
2
2
|
import { EnumValuesChip } from "../../../preview";
|
|
3
3
|
import { VirtualTableWhereFilterOp } from "../../VirtualTable";
|
|
4
4
|
import {
|
|
5
|
-
Checkbox,
|
|
6
5
|
CloseIcon,
|
|
7
6
|
IconButton,
|
|
8
|
-
Label,
|
|
9
7
|
MultiSelect,
|
|
10
8
|
MultiSelectItem,
|
|
11
9
|
Select,
|
|
@@ -34,24 +32,25 @@ const operationLabels = {
|
|
|
34
32
|
in: "In",
|
|
35
33
|
"not-in": "Not in",
|
|
36
34
|
"array-contains": "Contains",
|
|
37
|
-
"array-contains-any": "Any"
|
|
35
|
+
"array-contains-any": "Any",
|
|
36
|
+
"is-null": "Is null"
|
|
38
37
|
};
|
|
39
38
|
|
|
40
39
|
const multipleSelectOperations = ["array-contains-any", "in", "not-in"];
|
|
41
40
|
|
|
42
41
|
export function StringNumberFilterField({
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const possibleOperations: (keyof typeof operationLabels)
|
|
42
|
+
name,
|
|
43
|
+
value,
|
|
44
|
+
setValue,
|
|
45
|
+
dataType,
|
|
46
|
+
isArray,
|
|
47
|
+
enumValues,
|
|
48
|
+
title
|
|
49
|
+
}: StringNumberFilterFieldProps) {
|
|
50
|
+
|
|
51
|
+
const possibleOperations: (keyof typeof operationLabels)[] = isArray
|
|
53
52
|
? ["array-contains"]
|
|
54
|
-
: ["==", "!=", ">", "<", ">=", "<="];
|
|
53
|
+
: ["==", "!=", ">", "<", ">=", "<=", "is-null"];
|
|
55
54
|
|
|
56
55
|
if (enumValues)
|
|
57
56
|
isArray
|
|
@@ -59,10 +58,31 @@ export function StringNumberFilterField({
|
|
|
59
58
|
: possibleOperations.push("in", "not-in");
|
|
60
59
|
|
|
61
60
|
const [fieldOperation, fieldValue] = value || [possibleOperations[0], undefined];
|
|
62
|
-
const [operation, setOperation] = useState<VirtualTableWhereFilterOp>(fieldOperation);
|
|
61
|
+
const [operation, setOperation] = useState<VirtualTableWhereFilterOp | "is-null">(fieldOperation === "==" && fieldValue === null ? "is-null" : fieldOperation);
|
|
63
62
|
const [internalValue, setInternalValue] = useState<string | number | string[] | number[] | null | undefined>(fieldValue);
|
|
64
63
|
|
|
65
|
-
|
|
64
|
+
React.useEffect(() => {
|
|
65
|
+
if (value) {
|
|
66
|
+
const [op, val] = value;
|
|
67
|
+
setOperation(op === "==" && val === null ? "is-null" : op);
|
|
68
|
+
setInternalValue(val);
|
|
69
|
+
} else {
|
|
70
|
+
setOperation(possibleOperations[0]);
|
|
71
|
+
setInternalValue(undefined);
|
|
72
|
+
}
|
|
73
|
+
}, [value, possibleOperations[0]]);
|
|
74
|
+
|
|
75
|
+
const isNullOperation = operation === "is-null";
|
|
76
|
+
|
|
77
|
+
function updateFilter(op: VirtualTableWhereFilterOp | "is-null", val: string | number | string[] | number[] | null | undefined) {
|
|
78
|
+
// Handle "is null" operation
|
|
79
|
+
if (op === "is-null") {
|
|
80
|
+
setOperation(op);
|
|
81
|
+
setInternalValue(null);
|
|
82
|
+
setValue(["==", null]);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
66
86
|
let newValue = val;
|
|
67
87
|
const prevOpIsArray = multipleSelectOperations.includes(operation);
|
|
68
88
|
const newOpIsArray = multipleSelectOperations.includes(op);
|
|
@@ -95,15 +115,16 @@ export function StringNumberFilterField({
|
|
|
95
115
|
|
|
96
116
|
return (
|
|
97
117
|
|
|
98
|
-
<div className="flex w-
|
|
99
|
-
<div className={"w-[
|
|
118
|
+
<div className="flex w-full">
|
|
119
|
+
<div className={"w-[100px]"}>
|
|
100
120
|
<Select value={operation}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
121
|
+
size={"medium"}
|
|
122
|
+
fullWidth={true}
|
|
123
|
+
position={"item-aligned"}
|
|
124
|
+
onValueChange={(value) => {
|
|
125
|
+
updateFilter(value as VirtualTableWhereFilterOp | "is-null", internalValue);
|
|
126
|
+
}}
|
|
127
|
+
renderValue={(op) => operationLabels[op as keyof typeof operationLabels]}>
|
|
107
128
|
{possibleOperations.map((op) => (
|
|
108
129
|
<SelectItem key={op} value={op}>
|
|
109
130
|
{operationLabels[op]}
|
|
@@ -115,8 +136,11 @@ export function StringNumberFilterField({
|
|
|
115
136
|
<div className="flex-grow ml-2 flex flex-col gap-2">
|
|
116
137
|
|
|
117
138
|
{!enumValues && <TextField
|
|
139
|
+
size={"medium"}
|
|
118
140
|
type={dataType === "number" ? "number" : undefined}
|
|
119
141
|
value={internalValue !== undefined && internalValue != null ? String(internalValue) : ""}
|
|
142
|
+
disabled={isNullOperation}
|
|
143
|
+
placeholder={isNullOperation ? "null" : undefined}
|
|
120
144
|
onChange={(evt) => {
|
|
121
145
|
const val = dataType === "number"
|
|
122
146
|
? parseFloat(evt.target.value)
|
|
@@ -125,14 +149,16 @@ export function StringNumberFilterField({
|
|
|
125
149
|
}}
|
|
126
150
|
endAdornment={internalValue !== undefined && internalValue != null && <IconButton
|
|
127
151
|
onClick={(e) => updateFilter(operation, undefined)}>
|
|
128
|
-
<CloseIcon/>
|
|
152
|
+
<CloseIcon />
|
|
129
153
|
</IconButton>}
|
|
130
154
|
/>}
|
|
131
155
|
|
|
132
156
|
{enumValues && !multiple &&
|
|
133
157
|
<Select
|
|
158
|
+
size={"medium"}
|
|
134
159
|
position={"item-aligned"}
|
|
135
160
|
fullWidth={true}
|
|
161
|
+
disabled={isNullOperation}
|
|
136
162
|
value={typeof internalValue === "string" ? internalValue : ""}
|
|
137
163
|
onValueChange={(value) => {
|
|
138
164
|
if (value !== "")
|
|
@@ -140,7 +166,7 @@ export function StringNumberFilterField({
|
|
|
140
166
|
}}
|
|
141
167
|
endAdornment={internalValue && <IconButton
|
|
142
168
|
onClick={(e) => updateFilter(operation, undefined)}>
|
|
143
|
-
<CloseIcon/>
|
|
169
|
+
<CloseIcon />
|
|
144
170
|
</IconButton>}
|
|
145
171
|
renderValue={(enumKey) => {
|
|
146
172
|
if (enumKey === null)
|
|
@@ -152,15 +178,15 @@ export function StringNumberFilterField({
|
|
|
152
178
|
key={`select_value_${name}_${enumKey}`}
|
|
153
179
|
enumKey={enumKey}
|
|
154
180
|
enumValues={enumValues}
|
|
155
|
-
size={"small"}/>;
|
|
181
|
+
size={"small"} />;
|
|
156
182
|
}}>
|
|
157
183
|
{enumValues.map((enumConfig) => (
|
|
158
184
|
<SelectItem key={`select_item_${name}_${enumConfig.id}`}
|
|
159
|
-
|
|
185
|
+
value={String(enumConfig.id)}>
|
|
160
186
|
<EnumValuesChip
|
|
161
187
|
enumKey={String(enumConfig.id)}
|
|
162
188
|
enumValues={enumValues}
|
|
163
|
-
size={"small"}/>
|
|
189
|
+
size={"small"} />
|
|
164
190
|
</SelectItem>
|
|
165
191
|
))}
|
|
166
192
|
</Select>
|
|
@@ -168,8 +194,10 @@ export function StringNumberFilterField({
|
|
|
168
194
|
|
|
169
195
|
{enumValues && multiple &&
|
|
170
196
|
<MultiSelect
|
|
197
|
+
size={"medium"}
|
|
171
198
|
position={"item-aligned"}
|
|
172
199
|
value={Array.isArray(internalValue) ? internalValue.map(e => String(e)) : []}
|
|
200
|
+
disabled={isNullOperation}
|
|
173
201
|
onValueChange={(value) => {
|
|
174
202
|
updateFilter(operation, dataType === "number" ? value.map(v => parseInt(v)) : value)
|
|
175
203
|
}}
|
|
@@ -177,47 +205,21 @@ export function StringNumberFilterField({
|
|
|
177
205
|
endAdornment={internalValue && <IconButton
|
|
178
206
|
className="absolute right-2 top-3"
|
|
179
207
|
onClick={(e) => updateFilter(operation, undefined)}>
|
|
180
|
-
<CloseIcon/>
|
|
208
|
+
<CloseIcon />
|
|
181
209
|
</IconButton>}
|
|
182
|
-
// renderValues={(enumKeys) => {
|
|
183
|
-
// console.log("renderValues", enumKeys);
|
|
184
|
-
// if (enumKeys === null)
|
|
185
|
-
// return "Filter for null values";
|
|
186
|
-
//
|
|
187
|
-
// return enumKeys.map(key => <EnumValuesChip
|
|
188
|
-
// key={`select_value_${name}_${enumKeys}`}
|
|
189
|
-
// enumKey={key}
|
|
190
|
-
// enumValues={enumValues}
|
|
191
|
-
// size={"small"}/>);
|
|
192
|
-
// }}
|
|
193
210
|
>
|
|
194
211
|
{enumValues.map((enumConfig) => (
|
|
195
212
|
<MultiSelectItem key={`select_value_${name}_${enumConfig.id}`}
|
|
196
|
-
|
|
213
|
+
value={String(enumConfig.id)}>
|
|
197
214
|
<EnumValuesChip
|
|
198
215
|
enumKey={String(enumConfig.id)}
|
|
199
216
|
enumValues={enumValues}
|
|
200
|
-
size={"small"}/>
|
|
217
|
+
size={"small"} />
|
|
201
218
|
</MultiSelectItem>
|
|
202
219
|
))}
|
|
203
220
|
</MultiSelect>
|
|
204
221
|
}
|
|
205
222
|
|
|
206
|
-
{!isArray && <Label
|
|
207
|
-
className="border cursor-pointer rounded-md p-2 flex items-center gap-2 [&:has(:checked)]:bg-surface-100 dark:[&:has(:checked)]:bg-surface-800"
|
|
208
|
-
htmlFor="null-filter"
|
|
209
|
-
>
|
|
210
|
-
<Checkbox id="null-filter"
|
|
211
|
-
checked={internalValue === null}
|
|
212
|
-
size={"small"}
|
|
213
|
-
onCheckedChange={(checked) => {
|
|
214
|
-
if (internalValue !== null)
|
|
215
|
-
updateFilter(operation, null);
|
|
216
|
-
else updateFilter(operation, undefined);
|
|
217
|
-
}}/>
|
|
218
|
-
Filter for null values
|
|
219
|
-
</Label>}
|
|
220
|
-
|
|
221
223
|
</div>
|
|
222
224
|
|
|
223
225
|
</div>
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import React from "react";
|
|
1
2
|
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from "@firecms/ui";
|
|
3
|
+
import { useTranslation } from "../hooks/useTranslation";
|
|
2
4
|
|
|
3
5
|
export interface UnsavedChangesDialogProps {
|
|
4
6
|
open: boolean;
|
|
@@ -15,7 +17,7 @@ export function UnsavedChangesDialog({
|
|
|
15
17
|
body,
|
|
16
18
|
title
|
|
17
19
|
}: UnsavedChangesDialogProps) {
|
|
18
|
-
|
|
20
|
+
const { t } = useTranslation();
|
|
19
21
|
return (
|
|
20
22
|
<Dialog
|
|
21
23
|
onEscapeKeyDown={() => {
|
|
@@ -29,17 +31,15 @@ export function UnsavedChangesDialog({
|
|
|
29
31
|
{body}
|
|
30
32
|
|
|
31
33
|
<Typography>
|
|
32
|
-
|
|
34
|
+
{t("are_you_sure_leave")}
|
|
33
35
|
</Typography>
|
|
34
36
|
|
|
35
37
|
</DialogContent>
|
|
36
38
|
<DialogActions>
|
|
37
39
|
<Button variant="text"
|
|
38
|
-
|
|
39
|
-
onClick={handleCancel} autoFocus> Cancel </Button>
|
|
40
|
+
onClick={handleCancel} autoFocus> {t("cancel")} </Button>
|
|
40
41
|
<Button
|
|
41
|
-
|
|
42
|
-
onClick={handleOk}> Ok </Button>
|
|
42
|
+
onClick={handleOk}> {t("ok")} </Button>
|
|
43
43
|
</DialogActions>
|
|
44
44
|
</Dialog>
|
|
45
45
|
);
|
|
@@ -6,17 +6,17 @@ import { EmptyValue } from "../preview";
|
|
|
6
6
|
* Component to render a single user with name and email
|
|
7
7
|
*/
|
|
8
8
|
export function UserDisplay({
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
user,
|
|
10
|
+
}: { user: User | null }) {
|
|
11
11
|
if (!user) {
|
|
12
|
-
return <EmptyValue/>;
|
|
12
|
+
return <EmptyValue />;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
const avatarSizeClass = "w-6 h-6";
|
|
16
16
|
|
|
17
17
|
return (
|
|
18
18
|
<div className={cls(
|
|
19
|
-
"inline-flex items-center gap-4 px-2 py-1 rounded-xl",
|
|
19
|
+
"inline-flex items-center gap-4 px-2 py-1 rounded-xl text-left",
|
|
20
20
|
"bg-surface-accent-100 dark:bg-surface-accent-800",
|
|
21
21
|
"border",
|
|
22
22
|
defaultBorderMixin
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @jest-environment jsdom
|
|
4
4
|
*/
|
|
5
5
|
import React from 'react';
|
|
6
|
+
/* eslint-disable i18next/no-literal-string */
|
|
6
7
|
import { render, act } from '@testing-library/react';
|
|
7
8
|
import { VirtualTable } from './VirtualTable';
|
|
8
9
|
import { VirtualTableProps } from './VirtualTableProps';
|