@rebasepro/admin 0.9.0 → 0.9.1-canary.0de22e0
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 +7 -7
- package/dist/{CollectionEditorDialog-B-7uW3iJ.js → CollectionEditorDialog-D7odTn0N.js} +150 -36
- package/dist/CollectionEditorDialog-D7odTn0N.js.map +1 -0
- package/dist/{PropertyEditView-7KMTcrqi.js → PropertyEditView-i51tFOfM.js} +6 -6
- package/dist/PropertyEditView-i51tFOfM.js.map +1 -0
- package/dist/{RouterCollectionsStudioView-epqIbZrJ.js → RouterCollectionsStudioView-B9AjTCjT.js} +5 -5
- package/dist/RouterCollectionsStudioView-B9AjTCjT.js.map +1 -0
- package/dist/collection_editor/api/generateCollectionApi.d.ts +4 -4
- package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +1 -1
- package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +1 -1
- package/dist/collection_editor/useSafeSnackbarController.d.ts +1 -1
- package/dist/collection_editor_ui.js +5 -5
- package/dist/collection_editor_ui.js.map +1 -1
- package/dist/components/CollectionTableBinding/CollectionTableBindingProps.d.ts +1 -1
- package/dist/components/CollectionTableBinding/internal/EntityTableCell.d.ts +1 -1
- package/dist/components/CollectionTableBinding/internal/popup_field/PopupFormField.d.ts +1 -1
- package/dist/components/CollectionTableBinding/table_bindings.d.ts +1 -1
- package/dist/components/CollectionViewBinding/hooks/useCollectionInlineEditor.d.ts +1 -1
- package/dist/components/{RebaseCMS.d.ts → RebaseAdmin.d.ts} +2 -2
- package/dist/components/RebaseLayout.d.ts +5 -4
- package/dist/components/RebaseShell.d.ts +1 -0
- package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
- package/dist/components/SelectableTable/SelectableTableContext.d.ts +1 -1
- package/dist/components/SidePanelProvider.d.ts +1 -1
- package/dist/components/field_configs.d.ts +17 -0
- package/dist/components/index.d.ts +1 -1
- package/dist/contexts/BreacrumbsContext.d.ts +1 -1
- package/dist/editor.js +1 -1
- package/dist/editor.js.map +1 -1
- package/dist/export-BM6HPujv.js +518 -0
- package/dist/export-BM6HPujv.js.map +1 -0
- package/dist/form/components/LocalChangesMenu.d.ts +1 -1
- package/dist/form/components/StorageUploadProgress.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +1 -1
- package/dist/{history-7X5bON_n.js → history-CtIPJxvQ.js} +6 -6
- package/dist/history-CtIPJxvQ.js.map +1 -0
- package/dist/hooks/useSelectionDialog.d.ts +1 -1
- package/dist/import-DzQnT03v.js +328 -0
- package/dist/import-DzQnT03v.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3300 -2
- package/dist/index.js.map +1 -0
- package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
- package/dist/preview/util.d.ts +1 -0
- package/dist/types/components/formex.d.ts +1 -1
- package/dist/util/view_mode.d.ts +54 -0
- package/dist/{src-sUZfe29F.js → util-XFwQ9FEc.js} +17554 -21391
- package/dist/util-XFwQ9FEc.js.map +1 -0
- package/package.json +12 -17
- package/src/collection_editor/ConfigControllerProvider.tsx +1 -1
- package/src/collection_editor/api/generateCollectionApi.ts +4 -4
- package/src/collection_editor/ui/AddKanbanColumnAction.tsx +1 -1
- package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +1 -1
- package/src/collection_editor/ui/EditorCollectionAction.tsx +1 -1
- package/src/collection_editor/ui/EditorCollectionActionStart.tsx +1 -1
- package/src/collection_editor/ui/EditorEntityAction.tsx +1 -1
- package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +1 -1
- package/src/collection_editor/ui/KanbanSetupAction.tsx +1 -1
- package/src/collection_editor/ui/MissingReferenceWidget.tsx +1 -1
- package/src/collection_editor/ui/NewCollectionButton.tsx +1 -1
- package/src/collection_editor/ui/NewCollectionCard.tsx +1 -1
- package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +139 -13
- package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/EnumForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +3 -3
- package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +1 -1
- package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +2 -2
- package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +2 -2
- package/src/collection_editor/useSafeSnackbarController.ts +1 -1
- package/src/components/AdminModeSyncer.tsx +1 -1
- package/src/components/ArrayContainer.tsx +1 -1
- package/src/components/ClearFilterSortButton.tsx +1 -1
- package/src/components/CollectionPanel.tsx +1 -1
- package/src/components/CollectionTableBinding/CollectionRowActions.tsx +3 -3
- package/src/components/CollectionTableBinding/CollectionTableBinding.tsx +3 -3
- package/src/components/CollectionTableBinding/CollectionTableBindingProps.tsx +1 -1
- package/src/components/CollectionTableBinding/PropertyTableCell.tsx +1 -1
- package/src/components/CollectionTableBinding/column_utils.tsx +1 -1
- package/src/components/CollectionTableBinding/fields/TableMultipleRelationField.tsx +2 -2
- package/src/components/CollectionTableBinding/fields/TableReferenceField.tsx +2 -2
- package/src/components/CollectionTableBinding/fields/TableRelationField.tsx +2 -2
- package/src/components/CollectionTableBinding/fields/TableStorageUpload.tsx +1 -1
- package/src/components/CollectionTableBinding/internal/CollectionTableToolbar.tsx +1 -1
- package/src/components/CollectionTableBinding/internal/EntityTableCell.tsx +2 -2
- package/src/components/CollectionTableBinding/internal/EntityTableCellActions.tsx +1 -1
- package/src/components/CollectionTableBinding/internal/popup_field/PopupFormField.tsx +4 -4
- package/src/components/CollectionTableBinding/table_bindings.tsx +1 -1
- package/src/components/CollectionViewBinding/BoardCardBinding.tsx +2 -2
- package/src/components/CollectionViewBinding/CollectionBoardViewBinding.tsx +4 -4
- package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +1 -1
- package/src/components/CollectionViewBinding/CollectionListViewBinding.tsx +3 -3
- package/src/components/CollectionViewBinding/CollectionViewActions.tsx +3 -3
- package/src/components/CollectionViewBinding/CollectionViewBinding.tsx +77 -127
- package/src/components/CollectionViewBinding/CollectionViewStartActions.tsx +5 -9
- package/src/components/CollectionViewBinding/EntityCardBinding.tsx +3 -3
- package/src/components/CollectionViewBinding/FiltersDialog.tsx +19 -1
- package/src/components/CollectionViewBinding/SplitListView.tsx +114 -63
- package/src/components/CollectionViewBinding/ViewModeToggle.tsx +1 -1
- package/src/components/CollectionViewBinding/hooks/useCollectionInlineEditor.ts +2 -2
- package/src/components/CollectionViewBinding/hooks/useKanbanDragAndDrop.ts +2 -2
- package/src/components/CollectionViewBinding/useBoardDataController.tsx +9 -3
- package/src/components/CollectionViewBinding/usePreviewSlots.ts +1 -1
- package/src/components/DefaultAppBar.tsx +3 -3
- package/src/components/DefaultDrawer.tsx +3 -3
- package/src/components/DeleteEntityDialog.tsx +1 -1
- package/src/components/DetailViewBinding.tsx +7 -5
- package/src/components/DrawerNavigationGroup.tsx +2 -2
- package/src/components/EditFormActions.tsx +6 -6
- package/src/components/EditViewBinding.tsx +9 -8
- package/src/components/EntityPreviewBinding.tsx +5 -4
- package/src/components/EntityViewBinding.tsx +2 -2
- package/src/components/HomePage/ContentHomePage.tsx +6 -5
- package/src/components/HomePage/FavouritesView.tsx +2 -2
- package/src/components/HomePage/NavigationCardBinding.tsx +3 -3
- package/src/components/HomePage/NavigationGroup.tsx +1 -1
- package/src/components/HomePage/RenameGroupDialog.tsx +1 -1
- package/src/components/JsonPreviewBinding.tsx +1 -1
- package/src/components/{RebaseCMS.tsx → RebaseAdmin.tsx} +3 -3
- package/src/components/RebaseAuthGate.tsx +2 -2
- package/src/components/RebaseLayout.tsx +7 -13
- package/src/components/RebaseNavigation.tsx +18 -3
- package/src/components/RebaseRouteDefs.tsx +3 -3
- package/src/components/RebaseShell.tsx +2 -1
- package/src/components/ReferenceTable/SelectionTableBinding.tsx +7 -6
- package/src/components/ReferenceWidget.tsx +1 -1
- package/src/components/RelationSelector.tsx +1 -1
- package/src/components/SearchIconsView.tsx +2 -2
- package/src/components/SelectableTable/SelectableTable.tsx +2 -2
- package/src/components/SelectableTable/SelectableTableContext.tsx +1 -1
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +1 -1
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +1 -1
- package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +1 -1
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +2 -2
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +1 -1
- package/src/components/SideDialogs.tsx +1 -1
- package/src/components/SidePanelBinding.tsx +47 -9
- package/src/components/SidePanelProvider.tsx +15 -12
- package/src/components/UserSelector.tsx +1 -1
- package/src/components/admin/CreationResultDialog.tsx +6 -3
- package/src/components/app/Scaffold.tsx +6 -2
- package/src/components/common/default_entity_actions.tsx +123 -25
- package/src/components/field_configs.tsx +42 -25
- package/src/components/history/EntityHistoryEntry.tsx +1 -1
- package/src/components/history/EntityHistoryView.tsx +5 -5
- package/src/components/history/LastEditedByIndicator.tsx +2 -2
- package/src/components/index.ts +1 -1
- package/src/contexts/BreacrumbsContext.tsx +1 -1
- package/src/data_export/export/BasicExportAction.tsx +1 -1
- package/src/data_export/export/ExportCollectionAction.tsx +1 -1
- package/src/data_import/components/DataNewPropertiesMapping.tsx +1 -1
- package/src/data_import/components/ImportFileUpload.tsx +1 -1
- package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +3 -5
- package/src/data_import/components/ImportSaveInProgress.tsx +1 -1
- package/src/data_import/import/ImportCollectionAction.tsx +8 -8
- package/src/data_import/utils/data.ts +2 -2
- package/src/data_import/utils/get_properties_mapping.ts +1 -1
- package/src/editor/components/image-bubble.tsx +1 -1
- package/src/editor/components/table-bubble.tsx +1 -1
- package/src/editor/editor.tsx +1 -1
- package/src/editor/selectors/color-selector.tsx +1 -1
- package/src/editor/selectors/link-selector.tsx +1 -1
- package/src/editor/selectors/node-selector.tsx +2 -2
- package/src/editor/selectors/text-buttons.tsx +1 -1
- package/src/form/EntityForm.tsx +8 -5
- package/src/form/EntityFormActions.tsx +1 -1
- package/src/form/EntityFormBinding.tsx +7 -5
- package/src/form/PropertyFieldBinding.tsx +3 -3
- package/src/form/components/ErrorFocus.tsx +1 -1
- package/src/form/components/LocalChangesMenu.tsx +3 -3
- package/src/form/components/StorageItemPreview.tsx +1 -1
- package/src/form/components/StorageUploadProgress.tsx +3 -3
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +3 -2
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +4 -3
- package/src/form/field_bindings/BlockFieldBinding.tsx +4 -3
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +3 -2
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +4 -3
- package/src/form/field_bindings/MapFieldBinding.tsx +3 -2
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +4 -3
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +2 -1
- package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +3 -2
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +2 -1
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +5 -4
- package/src/form/field_bindings/RelationFieldBinding.tsx +3 -2
- package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -2
- package/src/form/field_bindings/SelectFieldBinding.tsx +2 -1
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +5 -4
- package/src/form/field_bindings/SwitchFieldBinding.tsx +2 -1
- package/src/form/field_bindings/TextFieldBinding.tsx +2 -1
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +2 -1
- package/src/form/field_bindings/VectorFieldBinding.tsx +2 -1
- package/src/form/form_utils.ts +1 -1
- package/src/hooks/navigation/useNavigationResolution.ts +19 -4
- package/src/hooks/useBuildSidePanel.tsx +10 -2
- package/src/hooks/useCMSContext.tsx +1 -1
- package/src/hooks/useHistory.ts +1 -1
- package/src/hooks/useResolvedNavigationFrom.tsx +4 -2
- package/src/hooks/useSelectionDialog.tsx +3 -3
- package/src/index.ts +3 -3
- package/src/preview/PropertyPreview.tsx +2 -2
- package/src/preview/components/DatePreview.tsx +1 -1
- package/src/preview/components/EnumValuesChip.tsx +1 -1
- package/src/preview/components/ImagePreview.tsx +2 -2
- package/src/preview/components/ReferencePreview.tsx +3 -3
- package/src/preview/components/RelationPreview.tsx +3 -3
- package/src/preview/components/StorageThumbnail.tsx +1 -1
- package/src/preview/components/UrlComponentPreview.tsx +2 -9
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +1 -1
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +1 -1
- package/src/preview/property_previews/NumberPropertyPreview.tsx +1 -1
- package/src/preview/util.ts +9 -0
- package/src/routes/CustomViewRoute.tsx +2 -1
- package/src/routes/RebaseRoute.tsx +21 -26
- package/src/types/components/formex.tsx +1 -1
- package/src/util/navigation_utils.ts +2 -5
- package/src/util/previews.ts +4 -2
- package/src/util/view_mode.ts +102 -0
- package/dist/CollectionEditorDialog-B-7uW3iJ.js.map +0 -1
- package/dist/PropertyEditView-7KMTcrqi.js.map +0 -1
- package/dist/RouterCollectionsStudioView-epqIbZrJ.js.map +0 -1
- package/dist/history-7X5bON_n.js.map +0 -1
- package/dist/src-sUZfe29F.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { ArrayProperty, DateProperty, Entity, EntityReference, EntityRelation, NumberProperty, Property, ReferenceProperty, RelationProperty, StringProperty } from "@rebasepro/types";
|
|
3
|
-
import { TableSize, useCustomizationController } from "@rebasepro/
|
|
3
|
+
import { TableSize, useCustomizationController } from "@rebasepro/app";
|
|
4
4
|
import {
|
|
5
5
|
VirtualTableInput,
|
|
6
6
|
VirtualTableNumberInput,
|
|
@@ -3,8 +3,8 @@ import React, { memo, useCallback, useMemo } from "react";
|
|
|
3
3
|
import { Entity } from "@rebasepro/types";
|
|
4
4
|
import { Checkbox, Chip, cls, defaultBorderMixin, Markdown } from "@rebasepro/ui";
|
|
5
5
|
import { PropertyPreview } from "../../preview";
|
|
6
|
-
import { useAuthController, useCustomizationController } from "@rebasepro/
|
|
7
|
-
import { IconForView } from "@rebasepro/
|
|
6
|
+
import { useAuthController, useCustomizationController } from "@rebasepro/app";
|
|
7
|
+
import { IconForView } from "@rebasepro/app";
|
|
8
8
|
import { BoardItemViewProps } from "@rebasepro/ui";
|
|
9
9
|
import { useCollectionSlotKeys, resolveEntitySlots } from "./usePreviewSlots";
|
|
10
10
|
|
|
@@ -33,12 +33,12 @@ import {
|
|
|
33
33
|
useRebaseContext,
|
|
34
34
|
useTranslation,
|
|
35
35
|
useSlot
|
|
36
|
-
} from "@rebasepro/
|
|
37
|
-
import { useAnalyticsController } from "@rebasepro/
|
|
38
|
-
import { setIn } from "@rebasepro/
|
|
36
|
+
} from "@rebasepro/app";
|
|
37
|
+
import { useAnalyticsController } from "@rebasepro/app";
|
|
38
|
+
import { setIn } from "@rebasepro/forms";
|
|
39
39
|
import { useBoardDataController } from "./useBoardDataController";
|
|
40
40
|
import { useKanbanDragAndDrop } from "./hooks/useKanbanDragAndDrop";
|
|
41
|
-
import { useSidePanel } from "../../
|
|
41
|
+
import { useSidePanel } from "../../hooks/useSidePanel";
|
|
42
42
|
import { generateNKeysBetween } from "fractional-indexing";
|
|
43
43
|
|
|
44
44
|
export type CollectionBoardViewBindingProps<M extends Record<string, unknown> = Record<string, unknown>> = {
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
Typography,
|
|
9
9
|
CardView
|
|
10
10
|
} from "@rebasepro/ui";
|
|
11
|
-
import { useComponentOverride } from "@rebasepro/
|
|
11
|
+
import { useComponentOverride } from "@rebasepro/app";
|
|
12
12
|
|
|
13
13
|
export type CollectionCardViewBindingProps<M extends Record<string, unknown> = Record<string, unknown>> = {
|
|
14
14
|
collection: CollectionConfig<M>;
|
|
@@ -17,10 +17,10 @@ import { PropertyPreview } from "../../preview";
|
|
|
17
17
|
import {
|
|
18
18
|
useAuthController,
|
|
19
19
|
useCustomizationController
|
|
20
|
-
} from "@rebasepro/
|
|
21
|
-
import { useAnalyticsController } from "@rebasepro/
|
|
20
|
+
} from "@rebasepro/app";
|
|
21
|
+
import { useAnalyticsController } from "@rebasepro/app";
|
|
22
22
|
import { getEntityPreviewKeys } from "../../util/previews";
|
|
23
|
-
import { IconForView } from "@rebasepro/
|
|
23
|
+
import { IconForView } from "@rebasepro/app";
|
|
24
24
|
import { getValueInPath } from "@rebasepro/utils";
|
|
25
25
|
import { useCollectionSlotKeys, resolveEntitySlots, type CollectionSlotKeys } from "./usePreviewSlots";
|
|
26
26
|
import { useCMSContext } from "../../hooks/useCMSContext";
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
import type { CollectionConfig } from "@rebasepro/types";
|
|
3
3
|
import React, { lazy, Suspense } from "react";
|
|
4
4
|
|
|
5
|
-
import { useLargeLayout, useTranslation, useSlot, resolveComponentRef } from "@rebasepro/
|
|
5
|
+
import { useLargeLayout, useTranslation, useSlot, resolveComponentRef } from "@rebasepro/app";
|
|
6
6
|
import { CollectionActionsProps, EntityTableController, SelectionController } from "@rebasepro/types";
|
|
7
7
|
import { Button, IconButton, Tooltip, Popover, iconSize } from "@rebasepro/ui";
|
|
8
8
|
import { ErrorBoundary, MoreVerticalIcon, PlusIcon, Trash2Icon } from "@rebasepro/ui";
|
|
9
|
-
import { usePermissions } from "@rebasepro/
|
|
9
|
+
import { usePermissions } from "@rebasepro/app";
|
|
10
10
|
import { toArray } from "@rebasepro/utils";
|
|
11
11
|
// Lazy-load import/export — pulls in exceljs only on demand
|
|
12
12
|
const ImportCollectionAction = lazy(() => import("../../data_import/import").then(m => ({ default: m.ImportCollectionAction })));
|
|
13
13
|
const ExportCollectionAction = lazy(() => import("../../data_export/export").then(m => ({ default: m.ExportCollectionAction })));
|
|
14
14
|
import { EditorCollectionAction } from "../../collection_editor/ui/EditorCollectionAction";
|
|
15
15
|
import { useCollectionEditorController } from "../../collection_editor/useCollectionEditorController";
|
|
16
|
-
import { useCMSContext } from "../../
|
|
16
|
+
import { useCMSContext } from "../../hooks/useCMSContext";
|
|
17
17
|
|
|
18
18
|
export type CollectionViewActionsProps<M extends Record<string, unknown>> = {
|
|
19
19
|
collection: CollectionConfig<M>;
|
|
@@ -38,7 +38,7 @@ import {
|
|
|
38
38
|
useSlot,
|
|
39
39
|
useTranslation,
|
|
40
40
|
useUserConfigurationPersistence
|
|
41
|
-
} from "@rebasepro/
|
|
41
|
+
} from "@rebasepro/app";
|
|
42
42
|
import { CollectionViewActions } from "./CollectionViewActions";
|
|
43
43
|
import { CollectionCardViewBinding } from "./CollectionCardViewBinding";
|
|
44
44
|
import { CollectionListViewBinding } from "./CollectionListViewBinding";
|
|
@@ -69,28 +69,15 @@ import { DeleteEntityDialog } from "../DeleteEntityDialog";
|
|
|
69
69
|
import { useSelectionController } from "./useSelectionController";
|
|
70
70
|
import { CollectionViewStartActions } from "./CollectionViewStartActions";
|
|
71
71
|
import { addRecentId, getRecentIds } from "./utils";
|
|
72
|
+
import { isViewMode, OpenEntityMode, resolveOpenEntityMode, VIEW_MODE_PARAM } from "../../util/view_mode";
|
|
72
73
|
import { mergeDeep } from "@rebasepro/utils";
|
|
73
|
-
import {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
useUrlController
|
|
79
|
-
} from "../../index";
|
|
74
|
+
import { useBreadcrumbsController } from "../../hooks/useBreadcrumbsController";
|
|
75
|
+
import { useCMSContext } from "../../hooks/useCMSContext";
|
|
76
|
+
import { useCollectionRegistryController } from "../../hooks/navigation/contexts/CollectionRegistryContext";
|
|
77
|
+
import { useSidePanel } from "../../hooks/useSidePanel";
|
|
78
|
+
import { useUrlController } from "../../hooks/navigation/contexts/UrlContext";
|
|
80
79
|
|
|
81
80
|
const EMPTY_ARRAY: never[] = [];
|
|
82
|
-
const DEFAULT_ENTITY_OPEN_MODE = "split";
|
|
83
|
-
|
|
84
|
-
function getOpenEntityMode(
|
|
85
|
-
viewMode: ViewMode,
|
|
86
|
-
configuredMode?: "side_panel" | "full_screen" | "split" | "dialog"
|
|
87
|
-
): "side_panel" | "full_screen" | "split" | "dialog" {
|
|
88
|
-
if (configuredMode) return configuredMode;
|
|
89
|
-
if (viewMode === "kanban") return "side_panel";
|
|
90
|
-
if (viewMode === "table" || viewMode === "cards") return "full_screen";
|
|
91
|
-
// "list" view defaults to split
|
|
92
|
-
return "split";
|
|
93
|
-
}
|
|
94
81
|
|
|
95
82
|
/**
|
|
96
83
|
* @group Components
|
|
@@ -249,11 +236,8 @@ const CollectionViewBindingInner = React.memo(
|
|
|
249
236
|
|
|
250
237
|
// Read view from React Router's searchParams (reactive on back/forward)
|
|
251
238
|
const urlView = useMemo((): ViewMode | null => {
|
|
252
|
-
const v = searchParams.get(
|
|
253
|
-
|
|
254
|
-
return v as ViewMode;
|
|
255
|
-
}
|
|
256
|
-
return null;
|
|
239
|
+
const v = searchParams.get(VIEW_MODE_PARAM);
|
|
240
|
+
return isViewMode(v) ? v : null;
|
|
257
241
|
}, [searchParams]);
|
|
258
242
|
|
|
259
243
|
// Get saved view from local persistence
|
|
@@ -270,7 +254,10 @@ const CollectionViewBindingInner = React.memo(
|
|
|
270
254
|
return defaultViewMode;
|
|
271
255
|
});
|
|
272
256
|
|
|
273
|
-
const openEntityMode =
|
|
257
|
+
const openEntityMode = resolveOpenEntityMode({
|
|
258
|
+
collection,
|
|
259
|
+
viewMode
|
|
260
|
+
});
|
|
274
261
|
|
|
275
262
|
// Sync URL with current view on init (if view came from saved config)
|
|
276
263
|
useEffect(() => {
|
|
@@ -278,7 +265,7 @@ const CollectionViewBindingInner = React.memo(
|
|
|
278
265
|
// View came from saved config but URL doesn't have it - update URL without push
|
|
279
266
|
setSearchParams((prev) => {
|
|
280
267
|
const next = new URLSearchParams(prev);
|
|
281
|
-
next.set(
|
|
268
|
+
next.set(VIEW_MODE_PARAM, viewMode);
|
|
282
269
|
return next;
|
|
283
270
|
}, { replace: true });
|
|
284
271
|
}
|
|
@@ -292,9 +279,9 @@ const CollectionViewBindingInner = React.memo(
|
|
|
292
279
|
setSearchParams((prev) => {
|
|
293
280
|
const next = new URLSearchParams(prev);
|
|
294
281
|
if (newMode === defaultViewMode) {
|
|
295
|
-
next.delete(
|
|
282
|
+
next.delete(VIEW_MODE_PARAM);
|
|
296
283
|
} else {
|
|
297
|
-
next.set(
|
|
284
|
+
next.set(VIEW_MODE_PARAM, newMode);
|
|
298
285
|
}
|
|
299
286
|
return next;
|
|
300
287
|
});
|
|
@@ -974,6 +961,7 @@ parentEntityIds,
|
|
|
974
961
|
highlightedEntities={highlightedEntity ? [highlightedEntity] : []}
|
|
975
962
|
size={listSize}
|
|
976
963
|
emptyComponent={emptyComponent}
|
|
964
|
+
selectedEntityId={selectedEntityIdProp}
|
|
977
965
|
getActionsForEntity={getActionsForEntity}
|
|
978
966
|
path={path}
|
|
979
967
|
openEntityMode={openEntityMode}
|
|
@@ -1008,12 +996,58 @@ parentEntityIds,
|
|
|
1008
996
|
additionalIDHeaderWidget={<EntityIdHeaderWidget
|
|
1009
997
|
path={path}
|
|
1010
998
|
idPath={path}
|
|
1011
|
-
collection={collection}
|
|
999
|
+
collection={collection}
|
|
1000
|
+
openEntityMode={openEntityMode}/>}
|
|
1012
1001
|
openEntityMode={openEntityMode}
|
|
1013
1002
|
onColumnsOrderChange={onColumnsOrderChange}
|
|
1014
1003
|
/>
|
|
1015
1004
|
);
|
|
1016
1005
|
|
|
1006
|
+
const detailOpen = selectedEntityIdProp !== undefined;
|
|
1007
|
+
|
|
1008
|
+
// List view gets a centered, titled reading surface. Opening a detail
|
|
1009
|
+
// panel collapses the title and drops the centering so the list can
|
|
1010
|
+
// shrink into the master column.
|
|
1011
|
+
const collectionSurface = viewMode === "list"
|
|
1012
|
+
? (
|
|
1013
|
+
<div
|
|
1014
|
+
className={cls(
|
|
1015
|
+
"flex flex-col w-full",
|
|
1016
|
+
detailOpen ? "" : "max-w-6xl mx-auto px-3 md:px-4 lg:px-6 py-4"
|
|
1017
|
+
)}
|
|
1018
|
+
>
|
|
1019
|
+
{/* Collapsible title — grid-rows for smooth height, transform for GPU */}
|
|
1020
|
+
<div
|
|
1021
|
+
className={cls(
|
|
1022
|
+
"grid transition-[grid-template-rows,transform,margin] duration-150 ease-out",
|
|
1023
|
+
detailOpen
|
|
1024
|
+
? "grid-rows-[0fr] -translate-y-2 mt-0 mb-0"
|
|
1025
|
+
: "grid-rows-[1fr] translate-y-0 mt-12 mb-6"
|
|
1026
|
+
)}
|
|
1027
|
+
>
|
|
1028
|
+
<div className="overflow-hidden flex items-center gap-4">
|
|
1029
|
+
<Typography gutterBottom variant="h4" className="grow mb-0" component="h4">
|
|
1030
|
+
{collection.name}
|
|
1031
|
+
</Typography>
|
|
1032
|
+
</div>
|
|
1033
|
+
</div>
|
|
1034
|
+
{pluginInsights.length > 0 && (
|
|
1035
|
+
<div
|
|
1036
|
+
className={cls(
|
|
1037
|
+
"grid transition-[grid-template-rows] duration-150 ease-out",
|
|
1038
|
+
detailOpen ? "grid-rows-[0fr]" : "grid-rows-[1fr]"
|
|
1039
|
+
)}
|
|
1040
|
+
>
|
|
1041
|
+
<div className="overflow-hidden flex-shrink-0">
|
|
1042
|
+
{pluginInsights}
|
|
1043
|
+
</div>
|
|
1044
|
+
</div>
|
|
1045
|
+
)}
|
|
1046
|
+
{innerView}
|
|
1047
|
+
</div>
|
|
1048
|
+
)
|
|
1049
|
+
: innerView;
|
|
1050
|
+
|
|
1017
1051
|
const mainContent = (
|
|
1018
1052
|
<div className={cls("overflow-hidden h-full w-full rounded-md flex flex-col dark:bg-surface-800", className)}
|
|
1019
1053
|
ref={containerRef}>
|
|
@@ -1054,66 +1088,10 @@ parentEntityIds,
|
|
|
1054
1088
|
selectedTab={selectedTabProp}
|
|
1055
1089
|
toolbar={toolbarNode}
|
|
1056
1090
|
>
|
|
1057
|
-
{/*
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
{
|
|
1061
|
-
<div
|
|
1062
|
-
className={cls(
|
|
1063
|
-
"flex flex-col w-full",
|
|
1064
|
-
selectedEntityIdProp === undefined
|
|
1065
|
-
? "max-w-6xl mx-auto px-3 md:px-4 lg:px-6 py-4"
|
|
1066
|
-
: ""
|
|
1067
|
-
)}
|
|
1068
|
-
>
|
|
1069
|
-
{/* Collapsible title — grid-rows for smooth height, transform for GPU */}
|
|
1070
|
-
<div
|
|
1071
|
-
className={cls(
|
|
1072
|
-
"grid transition-[grid-template-rows,transform,margin] duration-150 ease-out",
|
|
1073
|
-
selectedEntityIdProp === undefined
|
|
1074
|
-
? "grid-rows-[1fr] translate-y-0 mt-12 mb-6"
|
|
1075
|
-
: "grid-rows-[0fr] -translate-y-2 mt-0 mb-0"
|
|
1076
|
-
)}
|
|
1077
|
-
>
|
|
1078
|
-
<div className="overflow-hidden flex items-center gap-4">
|
|
1079
|
-
<Typography gutterBottom variant="h4" className="grow mb-0" component="h4">
|
|
1080
|
-
{collection.name}
|
|
1081
|
-
</Typography>
|
|
1082
|
-
</div>
|
|
1083
|
-
</div>
|
|
1084
|
-
{pluginInsights.length > 0 && (
|
|
1085
|
-
<div
|
|
1086
|
-
className={cls(
|
|
1087
|
-
"grid transition-[grid-template-rows] duration-150 ease-out",
|
|
1088
|
-
selectedEntityIdProp === undefined
|
|
1089
|
-
? "grid-rows-[1fr]"
|
|
1090
|
-
: "grid-rows-[0fr]"
|
|
1091
|
-
)}
|
|
1092
|
-
>
|
|
1093
|
-
<div className="overflow-hidden flex-shrink-0">
|
|
1094
|
-
{pluginInsights}
|
|
1095
|
-
</div>
|
|
1096
|
-
</div>
|
|
1097
|
-
)}
|
|
1098
|
-
<CollectionListViewBinding
|
|
1099
|
-
key={`list-view-${path}`}
|
|
1100
|
-
collection={collection}
|
|
1101
|
-
tableController={tableController}
|
|
1102
|
-
onEntityClick={onEntityClick}
|
|
1103
|
-
selectionController={usedSelectionController}
|
|
1104
|
-
selectionEnabled={selectionEnabled}
|
|
1105
|
-
highlightedEntities={highlightedEntity ? [highlightedEntity] : []}
|
|
1106
|
-
size={listSize}
|
|
1107
|
-
emptyComponent={emptyComponent}
|
|
1108
|
-
selectedEntityId={selectedEntityIdProp}
|
|
1109
|
-
getActionsForEntity={getActionsForEntity}
|
|
1110
|
-
path={path}
|
|
1111
|
-
openEntityMode={openEntityMode}
|
|
1112
|
-
/>
|
|
1113
|
-
</div>
|
|
1114
|
-
) : (
|
|
1115
|
-
innerView
|
|
1116
|
-
)}
|
|
1091
|
+
{/* The left panel keeps rendering whichever view mode is
|
|
1092
|
+
active. Swapping it to a list on selection would make
|
|
1093
|
+
a board or card grid vanish on every click. */}
|
|
1094
|
+
{collectionSurface}
|
|
1117
1095
|
</SplitListView>
|
|
1118
1096
|
) : (
|
|
1119
1097
|
<div className="flex flex-col w-full h-full">
|
|
@@ -1122,39 +1100,7 @@ parentEntityIds,
|
|
|
1122
1100
|
"flex-1 flex flex-col",
|
|
1123
1101
|
(viewMode === "list" || viewMode === "cards") && "overflow-y-auto"
|
|
1124
1102
|
)}>
|
|
1125
|
-
{
|
|
1126
|
-
<div
|
|
1127
|
-
className={cls(
|
|
1128
|
-
"flex flex-col w-full",
|
|
1129
|
-
selectedEntityIdProp === undefined
|
|
1130
|
-
? "max-w-6xl mx-auto px-3 md:px-4 lg:px-6 py-4"
|
|
1131
|
-
: ""
|
|
1132
|
-
)}
|
|
1133
|
-
>
|
|
1134
|
-
<div
|
|
1135
|
-
className={cls(
|
|
1136
|
-
"grid transition-[grid-template-rows,transform,margin] duration-150 ease-out",
|
|
1137
|
-
selectedEntityIdProp === undefined
|
|
1138
|
-
? "grid-rows-[1fr] translate-y-0 mt-12 mb-6"
|
|
1139
|
-
: "grid-rows-[0fr] -translate-y-2 mt-0 mb-0"
|
|
1140
|
-
)}
|
|
1141
|
-
>
|
|
1142
|
-
<div className="overflow-hidden flex items-center gap-4">
|
|
1143
|
-
<Typography gutterBottom variant="h4" className="grow mb-0" component="h4">
|
|
1144
|
-
{collection.name}
|
|
1145
|
-
</Typography>
|
|
1146
|
-
</div>
|
|
1147
|
-
</div>
|
|
1148
|
-
{pluginInsights.length > 0 && (
|
|
1149
|
-
<div className="flex-shrink-0">
|
|
1150
|
-
{pluginInsights}
|
|
1151
|
-
</div>
|
|
1152
|
-
)}
|
|
1153
|
-
{innerView}
|
|
1154
|
-
</div>
|
|
1155
|
-
) : (
|
|
1156
|
-
innerView
|
|
1157
|
-
)}
|
|
1103
|
+
{collectionSurface}
|
|
1158
1104
|
</div>
|
|
1159
1105
|
</div>
|
|
1160
1106
|
)}
|
|
@@ -1358,11 +1304,17 @@ function buildPropertyWidthOverwrite(key: string, width: number): PartialCollect
|
|
|
1358
1304
|
function EntityIdHeaderWidget({
|
|
1359
1305
|
collection,
|
|
1360
1306
|
path,
|
|
1361
|
-
idPath
|
|
1307
|
+
idPath,
|
|
1308
|
+
openEntityMode
|
|
1362
1309
|
}: {
|
|
1363
1310
|
collection: CollectionConfig,
|
|
1364
1311
|
path: string,
|
|
1365
|
-
idPath: string
|
|
1312
|
+
idPath: string,
|
|
1313
|
+
/**
|
|
1314
|
+
* Resolved by the parent so that finding an entity by id lands it in the
|
|
1315
|
+
* same surface a row click would — not a different one.
|
|
1316
|
+
*/
|
|
1317
|
+
openEntityMode: OpenEntityMode
|
|
1366
1318
|
}) {
|
|
1367
1319
|
|
|
1368
1320
|
const { t } = useTranslation();
|
|
@@ -1372,8 +1324,6 @@ function EntityIdHeaderWidget({
|
|
|
1372
1324
|
const [recentIds, setRecentIds] = React.useState<string[]>(getRecentIds(collection.slug).map(String));
|
|
1373
1325
|
const sidePanelController = useSidePanel();
|
|
1374
1326
|
|
|
1375
|
-
const openEntityMode = collection?.openEntityMode ?? DEFAULT_ENTITY_OPEN_MODE;
|
|
1376
|
-
|
|
1377
1327
|
return (
|
|
1378
1328
|
<Tooltip title={!openPopup ? t("find_by_id") : undefined} asChild={false}>
|
|
1379
1329
|
<Popover
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Properties } from "@rebasepro/types";
|
|
2
2
|
import type { CollectionConfig } from "@rebasepro/types";
|
|
3
3
|
import React, { useState, useCallback } from "react";
|
|
4
|
-
import { useAuthController, useLargeLayout, useTranslation, useSlot } from "@rebasepro/
|
|
4
|
+
import { useAuthController, useLargeLayout, useTranslation, useSlot } from "@rebasepro/app";
|
|
5
5
|
import { CollectionActionsProps, EntityTableController, SelectionController } from "@rebasepro/types";
|
|
6
6
|
import { ErrorBoundary, iconSize } from "@rebasepro/ui";
|
|
7
7
|
import { ArrowLeftIcon, Badge, Button, cls, FilterIcon, IconButton, Tooltip } from "@rebasepro/ui";
|
|
@@ -10,7 +10,9 @@ import { FiltersDialog } from "./FiltersDialog";
|
|
|
10
10
|
import { FilterPresetsButton } from "./FilterPresetsButton";
|
|
11
11
|
import { toArray } from "@rebasepro/utils";
|
|
12
12
|
import { useNavigate } from "react-router-dom";
|
|
13
|
-
import { useUrlController
|
|
13
|
+
import { useUrlController } from "../../hooks/navigation/contexts/UrlContext";
|
|
14
|
+
import { useCMSContext } from "../../hooks/useCMSContext";
|
|
15
|
+
import { withViewMode } from "../../util/view_mode";
|
|
14
16
|
|
|
15
17
|
export type CollectionViewStartActionsProps<M extends Record<string, unknown>> = {
|
|
16
18
|
collection: CollectionConfig<M>;
|
|
@@ -72,13 +74,7 @@ parentEntityIds,
|
|
|
72
74
|
};
|
|
73
75
|
|
|
74
76
|
const handleBackClick = useCallback(() => {
|
|
75
|
-
|
|
76
|
-
// Preserve the __view query param so the view mode is retained
|
|
77
|
-
const currentViewParam = new URLSearchParams(window.location.search).get("__view");
|
|
78
|
-
if (currentViewParam) {
|
|
79
|
-
collectionUrl += `${collectionUrl.includes("?") ? "&" : "?"}__view=${currentViewParam}`;
|
|
80
|
-
}
|
|
81
|
-
navigate(collectionUrl);
|
|
77
|
+
navigate(withViewMode(urlController.buildUrlCollectionPath(path)));
|
|
82
78
|
}, [navigate, urlController, path]);
|
|
83
79
|
|
|
84
80
|
const backButton = compact && (
|
|
@@ -12,9 +12,9 @@ import { PropertyPreview } from "../../preview";
|
|
|
12
12
|
import {
|
|
13
13
|
useAuthController,
|
|
14
14
|
useCustomizationController
|
|
15
|
-
} from "@rebasepro/
|
|
16
|
-
import { useAnalyticsController } from "@rebasepro/
|
|
17
|
-
import { IconForView } from "@rebasepro/
|
|
15
|
+
} from "@rebasepro/app";
|
|
16
|
+
import { useAnalyticsController } from "@rebasepro/app";
|
|
17
|
+
import { IconForView } from "@rebasepro/app";
|
|
18
18
|
import { useCollectionSlotKeys, resolveEntitySlots } from "./usePreviewSlots";
|
|
19
19
|
|
|
20
20
|
export type EntityCardBindingProps<M extends Record<string, unknown> = Record<string, unknown>> = {
|
|
@@ -5,9 +5,27 @@ import { FilterValues, WhereFilterOp } from "@rebasepro/types";
|
|
|
5
5
|
import { Button, cls, defaultBorderMixin, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from "@rebasepro/ui";
|
|
6
6
|
import { FilterIcon, VirtualTableWhereFilterOp } from "@rebasepro/ui";
|
|
7
7
|
import { resolveFilterOperators } from "@rebasepro/common";
|
|
8
|
-
import { useCollectionScope, useTranslation } from "@rebasepro/
|
|
8
|
+
import { useCollectionScope, useTranslation } from "@rebasepro/app";
|
|
9
9
|
import { FilterFieldBinding } from "../SelectableTable/filters/FilterFieldBinding";
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* `WhereFilterOp` is declared twice: once in `@rebasepro/types` as the canonical
|
|
13
|
+
* operator set every driver translates, and once in `@rebasepro/ui` for the
|
|
14
|
+
* table's own props. That is deliberate — `ui` is a standalone design system and
|
|
15
|
+
* depends on no Rebase package, so it cannot import the canonical one (and a
|
|
16
|
+
* type-only import would not help: `ui` emits declarations with `tsc`, which
|
|
17
|
+
* references external types rather than inlining them, so its published `.d.ts`
|
|
18
|
+
* would demand `@rebasepro/types` from every consumer).
|
|
19
|
+
*
|
|
20
|
+
* This file is where the two meet and get cast into each other, so it is where
|
|
21
|
+
* their agreement is checked. Adding an operator to one and not the other stops
|
|
22
|
+
* this line compiling instead of silently producing a filter the table can build
|
|
23
|
+
* and no driver can run — or one a driver supports and the table cannot offer.
|
|
24
|
+
*/
|
|
25
|
+
type MutuallyAssignable<A, B> = [A] extends [B] ? ([B] extends [A] ? true : never) : never;
|
|
26
|
+
const _whereFilterOpDefinitionsAgree: MutuallyAssignable<WhereFilterOp, VirtualTableWhereFilterOp> = true;
|
|
27
|
+
void _whereFilterOpDefinitionsAgree;
|
|
28
|
+
|
|
11
29
|
export interface FiltersDialogProps {
|
|
12
30
|
open: boolean;
|
|
13
31
|
onOpenChange: (open: boolean) => void;
|