@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
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { cls, ExpandMoreIcon, Typography } from "@firecms/ui";
|
|
3
|
+
import { NavigationEntry } from "../types";
|
|
4
|
+
import { IconForView } from "../util";
|
|
5
|
+
import { DrawerNavigationItem } from "./DrawerNavigationItem";
|
|
6
|
+
import { useTranslation } from "../hooks/useTranslation";
|
|
7
|
+
|
|
8
|
+
export interface DrawerNavigationGroupProps {
|
|
9
|
+
/**
|
|
10
|
+
* Group name to display in header. When null, uses the translated default group name.
|
|
11
|
+
*/
|
|
12
|
+
group: string | null;
|
|
13
|
+
/**
|
|
14
|
+
* Navigation entries in this group
|
|
15
|
+
*/
|
|
16
|
+
entries: NavigationEntry[];
|
|
17
|
+
/**
|
|
18
|
+
* Whether the group is collapsed
|
|
19
|
+
*/
|
|
20
|
+
collapsed: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Callback when collapse state should toggle
|
|
23
|
+
*/
|
|
24
|
+
onToggleCollapsed: () => void;
|
|
25
|
+
/**
|
|
26
|
+
* Whether the drawer is in open (expanded) state
|
|
27
|
+
*/
|
|
28
|
+
drawerOpen: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Whether tooltips should be shown (drawer closed + hovered)
|
|
31
|
+
*/
|
|
32
|
+
tooltipsOpen: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Whether admin menu is open (used to control tooltip visibility)
|
|
35
|
+
*/
|
|
36
|
+
adminMenuOpen?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Optional actions to render in the group header (e.g., "Add collection" button)
|
|
39
|
+
*/
|
|
40
|
+
headerActions?: React.ReactNode;
|
|
41
|
+
/**
|
|
42
|
+
* Optional callback when a navigation item is clicked
|
|
43
|
+
*/
|
|
44
|
+
onItemClick?: (entry: NavigationEntry) => void;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Shared drawer navigation group component used by both DefaultDrawer and FireCMSCloudDrawer.
|
|
49
|
+
* Renders a collapsible group with header and navigation items.
|
|
50
|
+
*/
|
|
51
|
+
export function DrawerNavigationGroup({
|
|
52
|
+
group,
|
|
53
|
+
entries,
|
|
54
|
+
collapsed,
|
|
55
|
+
onToggleCollapsed,
|
|
56
|
+
drawerOpen,
|
|
57
|
+
tooltipsOpen,
|
|
58
|
+
adminMenuOpen,
|
|
59
|
+
headerActions,
|
|
60
|
+
onItemClick
|
|
61
|
+
}: DrawerNavigationGroupProps) {
|
|
62
|
+
const { t } = useTranslation();
|
|
63
|
+
return (
|
|
64
|
+
<div
|
|
65
|
+
className={"bg-surface-50 dark:bg-surface-800/30 my-4 rounded-lg ml-3 mr-1"}
|
|
66
|
+
key={`drawer_group_${group}`}
|
|
67
|
+
>
|
|
68
|
+
{/* Group Header */}
|
|
69
|
+
{drawerOpen ? (
|
|
70
|
+
<div
|
|
71
|
+
className="pl-4 pr-2 py-2 flex flex-row items-center cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-700/50 rounded-t-lg transition-colors"
|
|
72
|
+
onClick={onToggleCollapsed}
|
|
73
|
+
>
|
|
74
|
+
<ExpandMoreIcon
|
|
75
|
+
size={"smallest"}
|
|
76
|
+
className={cls(
|
|
77
|
+
"text-surface-500 dark:text-surface-400 transition-transform duration-200 mr-1",
|
|
78
|
+
collapsed ? "-rotate-90" : "rotate-0"
|
|
79
|
+
)}
|
|
80
|
+
/>
|
|
81
|
+
<Typography
|
|
82
|
+
variant={"caption"}
|
|
83
|
+
color={"secondary"}
|
|
84
|
+
className="font-medium flex-grow line-clamp-1"
|
|
85
|
+
>
|
|
86
|
+
{(group && group !== "__default__" ? group : t("views_group")).toUpperCase()}
|
|
87
|
+
</Typography>
|
|
88
|
+
{headerActions && (
|
|
89
|
+
<div onClick={(e) => e.stopPropagation()}>
|
|
90
|
+
{headerActions}
|
|
91
|
+
</div>
|
|
92
|
+
)}
|
|
93
|
+
</div>
|
|
94
|
+
) : (
|
|
95
|
+
<div className="w-full" />
|
|
96
|
+
)}
|
|
97
|
+
|
|
98
|
+
{/* Collapsible Content */}
|
|
99
|
+
<div
|
|
100
|
+
className={cls(
|
|
101
|
+
"overflow-hidden transition-all duration-200 ease-in-out",
|
|
102
|
+
collapsed ? "max-h-0 opacity-0" : "max-h-[2000px] opacity-100"
|
|
103
|
+
)}
|
|
104
|
+
>
|
|
105
|
+
{entries.map((entry) => (
|
|
106
|
+
<DrawerNavigationItem
|
|
107
|
+
key={entry.id}
|
|
108
|
+
icon={<IconForView collectionOrView={entry.collection ?? entry.view} size={18} />}
|
|
109
|
+
tooltipsOpen={!collapsed && tooltipsOpen}
|
|
110
|
+
adminMenuOpen={adminMenuOpen}
|
|
111
|
+
drawerOpen={drawerOpen}
|
|
112
|
+
onClick={() => onItemClick?.(entry)}
|
|
113
|
+
url={entry.url}
|
|
114
|
+
name={entry.name}
|
|
115
|
+
/>
|
|
116
|
+
))}
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
);
|
|
120
|
+
}
|
|
@@ -34,13 +34,13 @@ export function DrawerNavigationItem({
|
|
|
34
34
|
transition: drawerOpen ? "width 150ms ease-in" : undefined
|
|
35
35
|
}}
|
|
36
36
|
className={({ isActive }: any) => cls("rounded-lg truncate",
|
|
37
|
-
"hover:bg-surface-accent-300 hover:bg-opacity-75 dark:hover:bg-surface-accent-800 dark:hover:bg-opacity-75 text-text-primary dark:text-surface-200 hover:text-surface-900 hover:dark:text-white",
|
|
37
|
+
"hover:bg-surface-accent-300 hover:bg-opacity-75 hover:bg-surface-accent-300/75 dark:hover:bg-surface-accent-800 dark:hover:bg-opacity-75 dark:hover:bg-surface-accent-800/75 text-text-primary dark:text-surface-200 hover:text-surface-900 hover:dark:text-white hover:bg-surface-accent-300/75 dark:hover:bg-surface-accent-800/75",
|
|
38
38
|
"flex flex-row items-center mr-8",
|
|
39
39
|
// "transition-all ease-in-out delay-100 duration-300",
|
|
40
40
|
// drawerOpen ? "w-full" : "w-18",
|
|
41
41
|
drawerOpen ? "pl-4 h-10" : "pl-4 h-9",
|
|
42
42
|
"font-semibold text-xs",
|
|
43
|
-
isActive ? "bg-surface-accent-200 bg-opacity-60 dark:bg-surface-800 dark:bg-opacity-50" : ""
|
|
43
|
+
isActive ? "bg-surface-accent-200 bg-opacity-60 dark:bg-surface-800 dark:bg-opacity-50 bg-surface-accent-200/60 dark:bg-surface-800/50" : ""
|
|
44
44
|
)}
|
|
45
45
|
to={url}
|
|
46
46
|
>
|
|
@@ -49,8 +49,9 @@ export function DrawerNavigationItem({
|
|
|
49
49
|
|
|
50
50
|
<div
|
|
51
51
|
className={cls(
|
|
52
|
+
"text-text-primary dark:text-surface-200",
|
|
52
53
|
drawerOpen ? "opacity-100" : "opacity-0 hidden",
|
|
53
|
-
"ml-4 font-inherit
|
|
54
|
+
"ml-4 font-inherit"
|
|
54
55
|
)}>
|
|
55
56
|
{name.toUpperCase()}
|
|
56
57
|
</div>
|
|
@@ -26,12 +26,13 @@ import {
|
|
|
26
26
|
useFireCMSContext,
|
|
27
27
|
useLargeLayout
|
|
28
28
|
} from "../hooks";
|
|
29
|
-
import { CircularProgress, cls, CodeIcon, defaultBorderMixin, Tab, Tabs, Typography } from "@firecms/ui";
|
|
29
|
+
import { CircularProgress, cls, CodeIcon, defaultBorderMixin, Tab, Tabs, Typography, Menu, MenuItem, ExpandMoreIcon } from "@firecms/ui";
|
|
30
30
|
import { getEntityFromMemoryCache } from "../util/entity_cache";
|
|
31
31
|
import { EntityForm, EntityFormProps } from "../form";
|
|
32
32
|
import { EntityEditViewFormActions } from "./EntityEditViewFormActions";
|
|
33
33
|
import { EntityJsonPreview } from "../components/EntityJsonPreview";
|
|
34
34
|
import { createFormexStub } from "../util/createFormexStub";
|
|
35
|
+
import { useTranslation } from "../hooks/useTranslation";
|
|
35
36
|
|
|
36
37
|
export const MAIN_TAB_VALUE = "__main_##Q$SC^#S6";
|
|
37
38
|
export const JSON_TAB_VALUE = "__json";
|
|
@@ -75,7 +76,7 @@ export interface EntityEditViewProps<M extends Record<string, any>> {
|
|
|
75
76
|
copy?: boolean;
|
|
76
77
|
selectedTab?: string;
|
|
77
78
|
parentCollectionIds: string[];
|
|
78
|
-
onValuesModified?: (modified: boolean, values:M) => void;
|
|
79
|
+
onValuesModified?: (modified: boolean, values: M) => void;
|
|
79
80
|
onSaved?: (params: OnUpdateParams) => void;
|
|
80
81
|
onTabChange?: (props: OnTabChangeParams<M>) => void;
|
|
81
82
|
layout?: "side_panel" | "full_screen";
|
|
@@ -88,9 +89,9 @@ export interface EntityEditViewProps<M extends Record<string, any>> {
|
|
|
88
89
|
* an entity is opened.
|
|
89
90
|
*/
|
|
90
91
|
export function EntityEditView<M extends Record<string, any>, USER extends User>({
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
entityId,
|
|
93
|
+
...props
|
|
94
|
+
}: EntityEditViewProps<M>) {
|
|
94
95
|
|
|
95
96
|
const {
|
|
96
97
|
entity,
|
|
@@ -123,7 +124,7 @@ export function EntityEditView<M extends Record<string, any>, USER extends User>
|
|
|
123
124
|
}, [authController, entity, status]);
|
|
124
125
|
|
|
125
126
|
if ((dataLoading && !initialDirtyValues) || (!entity || canEdit === undefined) && (status === "existing" || status === "copy")) {
|
|
126
|
-
return <CircularProgressCenter/>;
|
|
127
|
+
return <CircularProgressCenter />;
|
|
127
128
|
}
|
|
128
129
|
|
|
129
130
|
if (entityId && !entity && !initialDirtyValues) {
|
|
@@ -131,36 +132,36 @@ export function EntityEditView<M extends Record<string, any>, USER extends User>
|
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
return <EntityEditViewInner<M> {...props}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
135
|
+
entityId={entityId}
|
|
136
|
+
entity={entity}
|
|
137
|
+
initialDirtyValues={initialDirtyValues as Partial<M>}
|
|
138
|
+
dataLoading={dataLoading}
|
|
139
|
+
status={status}
|
|
140
|
+
setStatus={setStatus}
|
|
141
|
+
canEdit={canEdit}
|
|
141
142
|
/>;
|
|
142
143
|
}
|
|
143
144
|
|
|
144
145
|
export function EntityEditViewInner<M extends Record<string, any>>({
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
146
|
+
path,
|
|
147
|
+
fullIdPath,
|
|
148
|
+
entityId,
|
|
149
|
+
selectedTab: selectedTabProp,
|
|
150
|
+
collection,
|
|
151
|
+
parentCollectionIds,
|
|
152
|
+
onValuesModified,
|
|
153
|
+
onSaved,
|
|
154
|
+
onTabChange,
|
|
155
|
+
entity,
|
|
156
|
+
initialDirtyValues,
|
|
157
|
+
dataLoading,
|
|
158
|
+
layout = "side_panel",
|
|
159
|
+
barActions,
|
|
160
|
+
status,
|
|
161
|
+
setStatus,
|
|
162
|
+
formProps,
|
|
163
|
+
canEdit
|
|
164
|
+
}: EntityEditViewProps<M> & {
|
|
164
165
|
entity?: Entity<M>,
|
|
165
166
|
initialDirtyValues?: Partial<M>, // dirty cached entity in memory
|
|
166
167
|
dataLoading: boolean,
|
|
@@ -170,6 +171,7 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
170
171
|
}) {
|
|
171
172
|
|
|
172
173
|
const context = useFireCMSContext();
|
|
174
|
+
const { t } = useTranslation();
|
|
173
175
|
|
|
174
176
|
const [usedEntity, setUsedEntity] = useState<Entity<M> | undefined>(entity);
|
|
175
177
|
|
|
@@ -228,6 +230,10 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
228
230
|
const includeJsonView = collection.includeJsonView === undefined ? true : collection.includeJsonView;
|
|
229
231
|
const hasAdditionalViews = customViewsCount > 0 || subcollectionsCount > 0 || includeJsonView;
|
|
230
232
|
|
|
233
|
+
const groupedViews = useMemo(() => {
|
|
234
|
+
return (collection.viewGroups ?? []).flatMap(g => g.views);
|
|
235
|
+
}, [collection.viewGroups]);
|
|
236
|
+
|
|
231
237
|
const {
|
|
232
238
|
resolvedEntityViews,
|
|
233
239
|
selectedEntityView,
|
|
@@ -312,7 +318,7 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
312
318
|
role="tabpanel">
|
|
313
319
|
<ErrorBoundary>
|
|
314
320
|
<EntityJsonPreview
|
|
315
|
-
values={formContext?.values ?? entity?.values ?? {}}/>
|
|
321
|
+
values={formContext?.values ?? entity?.values ?? {}} />
|
|
316
322
|
</ErrorBoundary>
|
|
317
323
|
</div>;
|
|
318
324
|
|
|
@@ -328,7 +334,7 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
328
334
|
key={`subcol_${subcollectionId}`}
|
|
329
335
|
role="tabpanel">
|
|
330
336
|
|
|
331
|
-
{globalLoading && <CircularProgressCenter/>}
|
|
337
|
+
{globalLoading && <CircularProgressCenter />}
|
|
332
338
|
|
|
333
339
|
{!globalLoading &&
|
|
334
340
|
(usedEntity && newFullPath
|
|
@@ -339,11 +345,10 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
339
345
|
isSubCollection={true}
|
|
340
346
|
updateUrl={false}
|
|
341
347
|
{...subcollection}
|
|
342
|
-
openEntityMode={layout}/>
|
|
348
|
+
openEntityMode={layout} />
|
|
343
349
|
: <div className="flex items-center justify-center w-full h-full p-3">
|
|
344
350
|
<Typography variant={"label"}>
|
|
345
|
-
|
|
346
|
-
adding additional collections
|
|
351
|
+
{t("youd_need_to_save_before_additional_collections")}
|
|
347
352
|
</Typography>
|
|
348
353
|
</div>)
|
|
349
354
|
}
|
|
@@ -375,8 +380,8 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
375
380
|
className={"px-8 h-full overflow-auto"}
|
|
376
381
|
entity={entity}
|
|
377
382
|
path={path}
|
|
378
|
-
collection={collection}/>
|
|
379
|
-
<div className="h-16"/>
|
|
383
|
+
collection={collection} />
|
|
384
|
+
<div className="h-16" />
|
|
380
385
|
</div>
|
|
381
386
|
</div> : null;
|
|
382
387
|
|
|
@@ -396,7 +401,6 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
396
401
|
disabled={!canEdit}
|
|
397
402
|
{...formProps}
|
|
398
403
|
onEntityChange={(entity) => {
|
|
399
|
-
console.log("333 EntityEditView onEntityChange:", entity);
|
|
400
404
|
setUsedEntity(entity);
|
|
401
405
|
formProps?.onEntityChange?.(entity);
|
|
402
406
|
}}
|
|
@@ -419,16 +423,18 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
419
423
|
Builder={selectedSecondaryForm?.Builder}
|
|
420
424
|
/>;
|
|
421
425
|
|
|
422
|
-
const subcollectionTabs = subcollections && subcollections
|
|
426
|
+
const subcollectionTabs = subcollections && subcollections
|
|
427
|
+
.filter(sub => !groupedViews.includes(sub.id ?? sub.path))
|
|
428
|
+
.map((subcollection) =>
|
|
423
429
|
<Tab
|
|
424
430
|
className="text-sm min-w-[120px]"
|
|
425
|
-
value={subcollection.id}
|
|
431
|
+
value={subcollection.id ?? subcollection.path}
|
|
426
432
|
key={`entity_detail_collection_tab_${subcollection.name}`}>
|
|
427
433
|
{subcollection.name}
|
|
428
434
|
</Tab>
|
|
429
435
|
);
|
|
430
436
|
|
|
431
|
-
const customViewTabsStart = resolvedEntityViews.filter(view => view.position === "start")
|
|
437
|
+
const customViewTabsStart = resolvedEntityViews.filter(view => view.position === "start" && !groupedViews.includes(view.key))
|
|
432
438
|
.map((view) =>
|
|
433
439
|
<Tab
|
|
434
440
|
className={!view.tabComponent ? "text-sm min-w-[120px]" : undefined}
|
|
@@ -437,7 +443,7 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
437
443
|
{view.tabComponent ?? view.name}
|
|
438
444
|
</Tab>
|
|
439
445
|
);
|
|
440
|
-
const customViewTabsEnd = resolvedEntityViews.filter(view => !view.position || view.position === "end")
|
|
446
|
+
const customViewTabsEnd = resolvedEntityViews.filter(view => (!view.position || view.position === "end") && !groupedViews.includes(view.key))
|
|
441
447
|
.map((view) =>
|
|
442
448
|
<Tab
|
|
443
449
|
className={!view.tabComponent ? "text-sm min-w-[120px]" : undefined}
|
|
@@ -447,12 +453,49 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
447
453
|
</Tab>
|
|
448
454
|
);
|
|
449
455
|
|
|
456
|
+
const viewGroupMenus = collection.viewGroups?.map(group => {
|
|
457
|
+
const isActive = group.views.includes(selectedTab);
|
|
458
|
+
return (
|
|
459
|
+
<Menu
|
|
460
|
+
key={`view_group_${group.name}`}
|
|
461
|
+
trigger={
|
|
462
|
+
<button
|
|
463
|
+
type="button"
|
|
464
|
+
className={cls(
|
|
465
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-white transition-all",
|
|
466
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-surface-400 focus-visible:ring-offset-2",
|
|
467
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
468
|
+
isActive ? "bg-white text-surface-900 dark:bg-surface-950 dark:text-surface-50" : "text-surface-600 dark:text-surface-400 hover:bg-surface-200 dark:hover:bg-surface-800"
|
|
469
|
+
)}
|
|
470
|
+
>
|
|
471
|
+
{group.name}
|
|
472
|
+
<ExpandMoreIcon className="ml-1 -mr-1" size="small" />
|
|
473
|
+
</button>
|
|
474
|
+
}>
|
|
475
|
+
{group.views.map(viewId => {
|
|
476
|
+
const subcollection = subcollections.find(s => (s.id ?? s.path) === viewId);
|
|
477
|
+
const customView = resolvedEntityViews.find(v => v.key === viewId);
|
|
478
|
+
const name = subcollection?.name ?? customView?.name ?? viewId;
|
|
479
|
+
return (
|
|
480
|
+
<MenuItem
|
|
481
|
+
key={`view_group_${group.name}_${viewId}`}
|
|
482
|
+
onClick={() => onSideTabClick(viewId)}
|
|
483
|
+
className={selectedTab === viewId ? "bg-surface-accent-100 dark:bg-surface-accent-900" : ""}
|
|
484
|
+
>
|
|
485
|
+
{name}
|
|
486
|
+
</MenuItem>
|
|
487
|
+
);
|
|
488
|
+
})}
|
|
489
|
+
</Menu>
|
|
490
|
+
);
|
|
491
|
+
});
|
|
492
|
+
|
|
450
493
|
const shouldShowTopBar = Boolean(barActions) || hasAdditionalViews;
|
|
451
494
|
|
|
452
495
|
let result = <div className="relative flex flex-col h-full w-full bg-white dark:bg-surface-900">
|
|
453
496
|
|
|
454
497
|
{shouldShowTopBar && <div
|
|
455
|
-
className={cls("h-14 items-center
|
|
498
|
+
className={cls("h-14 items-center overflow-hidden w-full border-b pl-2 pr-2 flex gap-2 bg-surface-50 dark:bg-surface-900", defaultBorderMixin)}>
|
|
456
499
|
|
|
457
500
|
{barActions?.({
|
|
458
501
|
path: fullIdPath ?? path,
|
|
@@ -461,16 +504,15 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
461
504
|
status
|
|
462
505
|
})}
|
|
463
506
|
|
|
464
|
-
<div className={"flex-grow"}/>
|
|
507
|
+
<div className={"flex-grow"} />
|
|
465
508
|
|
|
466
509
|
{pluginActionsTop}
|
|
467
510
|
|
|
468
511
|
{globalLoading && <div className="self-center">
|
|
469
|
-
<CircularProgress size={"small"}/>
|
|
512
|
+
<CircularProgress size={"small"} />
|
|
470
513
|
</div>}
|
|
471
514
|
|
|
472
515
|
{hasAdditionalViews && <Tabs
|
|
473
|
-
className={"self-end"}
|
|
474
516
|
value={selectedTab}
|
|
475
517
|
onValueChange={(value) => {
|
|
476
518
|
onSideTabClick(value);
|
|
@@ -480,7 +522,7 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
480
522
|
disabled={!hasAdditionalViews}
|
|
481
523
|
value={JSON_TAB_VALUE}
|
|
482
524
|
className={"text-sm"}>
|
|
483
|
-
<CodeIcon size={"small"}/>
|
|
525
|
+
<CodeIcon size={"small"} />
|
|
484
526
|
</Tab>}
|
|
485
527
|
|
|
486
528
|
{customViewTabsStart}
|
|
@@ -495,13 +537,15 @@ export function EntityEditViewInner<M extends Record<string, any>>({
|
|
|
495
537
|
|
|
496
538
|
{customViewTabsEnd}
|
|
497
539
|
|
|
540
|
+
{viewGroupMenus}
|
|
541
|
+
|
|
498
542
|
{subcollectionTabs}
|
|
499
543
|
</Tabs>}
|
|
500
544
|
</div>}
|
|
501
545
|
|
|
502
546
|
{globalLoading
|
|
503
547
|
? <div className="w-full pt-12 pb-16 px-4 sm:px-8 md:px-10">
|
|
504
|
-
<CircularProgressCenter/>
|
|
548
|
+
<CircularProgressCenter />
|
|
505
549
|
</div>
|
|
506
550
|
: <>
|
|
507
551
|
{entityReadOnlyView}
|
|
@@ -28,7 +28,8 @@ import {
|
|
|
28
28
|
useCustomizationController,
|
|
29
29
|
useFireCMSContext,
|
|
30
30
|
useSideEntityController,
|
|
31
|
-
useSnackbarController
|
|
31
|
+
useSnackbarController,
|
|
32
|
+
useTranslation
|
|
32
33
|
} from "../hooks";
|
|
33
34
|
import { EntityFormActionsProps } from "../form/EntityFormActions";
|
|
34
35
|
import { SideDialogController, useSideDialogContext } from "./SideDialogs";
|
|
@@ -56,6 +57,7 @@ export function EntityEditViewFormActions({
|
|
|
56
57
|
const sideEntityController = useSideEntityController();
|
|
57
58
|
const sideDialogContext = useSideDialogContext();
|
|
58
59
|
const customizationController = useCustomizationController();
|
|
60
|
+
const { t } = useTranslation();
|
|
59
61
|
|
|
60
62
|
const entityActions = useMemo((): EntityAction[] => {
|
|
61
63
|
const customEntityActions = (collection.entityActions ?? [])
|
|
@@ -90,7 +92,8 @@ export function EntityEditViewFormActions({
|
|
|
90
92
|
openEntityMode,
|
|
91
93
|
navigateBack,
|
|
92
94
|
formContext,
|
|
93
|
-
formex
|
|
95
|
+
formex,
|
|
96
|
+
t
|
|
94
97
|
})
|
|
95
98
|
: buildSideActions({
|
|
96
99
|
savingError,
|
|
@@ -106,7 +109,8 @@ export function EntityEditViewFormActions({
|
|
|
106
109
|
openEntityMode,
|
|
107
110
|
navigateBack,
|
|
108
111
|
formContext,
|
|
109
|
-
formex
|
|
112
|
+
formex,
|
|
113
|
+
t
|
|
110
114
|
});
|
|
111
115
|
}
|
|
112
116
|
|
|
@@ -123,8 +127,9 @@ type ActionsViewProps<M extends object> = {
|
|
|
123
127
|
pluginActions?: React.ReactNode[],
|
|
124
128
|
openEntityMode: "side_panel" | "full_screen";
|
|
125
129
|
navigateBack: () => void;
|
|
126
|
-
formContext: FormContext
|
|
130
|
+
formContext: FormContext;
|
|
127
131
|
formex: FormexController<any>;
|
|
132
|
+
t: any;
|
|
128
133
|
};
|
|
129
134
|
|
|
130
135
|
function buildBottomActions<M extends object>({
|
|
@@ -141,7 +146,8 @@ function buildBottomActions<M extends object>({
|
|
|
141
146
|
openEntityMode,
|
|
142
147
|
navigateBack,
|
|
143
148
|
formContext,
|
|
144
|
-
formex
|
|
149
|
+
formex,
|
|
150
|
+
t
|
|
145
151
|
}: ActionsViewProps<M>) {
|
|
146
152
|
|
|
147
153
|
const hasErrors = Object.keys(formex.errors).length > 0 && formex.submitCount > 0;
|
|
@@ -191,7 +197,7 @@ function buildBottomActions<M extends object>({
|
|
|
191
197
|
color="primary"
|
|
192
198
|
disabled={disabled || formex.isSubmitting}
|
|
193
199
|
type="reset">
|
|
194
|
-
{status === "existing" ? "
|
|
200
|
+
{status === "existing" ? t("discard") : t("clear")}
|
|
195
201
|
</Button>
|
|
196
202
|
<Button variant={canClose ? "text" : "filled"}
|
|
197
203
|
color="primary"
|
|
@@ -200,9 +206,9 @@ function buildBottomActions<M extends object>({
|
|
|
200
206
|
onClick={() => {
|
|
201
207
|
sideDialogContext.setPendingClose(false);
|
|
202
208
|
}}>
|
|
203
|
-
{status === "existing" && "
|
|
204
|
-
{status === "copy" && "
|
|
205
|
-
{status === "new" && "
|
|
209
|
+
{status === "existing" && t("save")}
|
|
210
|
+
{status === "copy" && t("create_copy")}
|
|
211
|
+
{status === "new" && t("create")}
|
|
206
212
|
</Button>
|
|
207
213
|
{canClose && <LoadingButton variant="filled"
|
|
208
214
|
color="primary"
|
|
@@ -212,9 +218,9 @@ function buildBottomActions<M extends object>({
|
|
|
212
218
|
onClick={() => {
|
|
213
219
|
sideDialogContext.setPendingClose?.(true);
|
|
214
220
|
}}>
|
|
215
|
-
{status === "existing" && "
|
|
216
|
-
{status === "copy" && "
|
|
217
|
-
{status === "new" && "
|
|
221
|
+
{status === "existing" && t("save_and_close")}
|
|
222
|
+
{status === "copy" && t("create_copy_and_close")}
|
|
223
|
+
{status === "new" && t("create_and_close")}
|
|
218
224
|
</LoadingButton>}
|
|
219
225
|
</DialogActions>;
|
|
220
226
|
}
|
|
@@ -233,7 +239,8 @@ function buildSideActions<M extends object>({
|
|
|
233
239
|
openEntityMode,
|
|
234
240
|
navigateBack,
|
|
235
241
|
formContext,
|
|
236
|
-
formex
|
|
242
|
+
formex,
|
|
243
|
+
t
|
|
237
244
|
}: ActionsViewProps<M>) {
|
|
238
245
|
|
|
239
246
|
const hasErrors = Object.keys(formex.errors).length > 0 && formex.submitCount > 0;
|
|
@@ -249,13 +256,13 @@ function buildSideActions<M extends object>({
|
|
|
249
256
|
onClick={() => {
|
|
250
257
|
sideDialogContext.setPendingClose?.(false);
|
|
251
258
|
}}>
|
|
252
|
-
{status === "existing" && "
|
|
253
|
-
{status === "copy" && "
|
|
254
|
-
{status === "new" && "
|
|
259
|
+
{status === "existing" && t("save")}
|
|
260
|
+
{status === "copy" && t("create_copy")}
|
|
261
|
+
{status === "new" && t("create")}
|
|
255
262
|
</LoadingButton>
|
|
256
263
|
|
|
257
264
|
<Button fullWidth={true} variant="text" disabled={disabled || formex.isSubmitting} type="reset">
|
|
258
|
-
{status === "existing" ? "
|
|
265
|
+
{status === "existing" ? t("discard") : t("clear")}
|
|
259
266
|
</Button>
|
|
260
267
|
|
|
261
268
|
{pluginActions}
|