@firecms/core 3.0.1 → 3.1.0-canary.1df3b2c
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/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/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 +49 -0
- package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
- package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
- package/dist/components/SelectableTable/SelectableTable.d.ts +5 -1
- package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
- package/dist/components/VirtualTable/VirtualTableCell.d.ts +6 -0
- package/dist/components/VirtualTable/VirtualTableHeader.d.ts +2 -0
- package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -0
- package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
- package/dist/components/VirtualTable/types.d.ts +2 -0
- package/dist/components/index.d.ts +3 -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/form/validation.d.ts +3 -2
- package/dist/hooks/useBreadcrumbsController.d.ts +16 -0
- package/dist/hooks/useCollapsedGroups.d.ts +4 -1
- package/dist/index.es.js +5239 -1590
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +5233 -1585
- package/dist/index.umd.js.map +1 -1
- 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/collections.d.ts +42 -2
- package/dist/types/datasource.d.ts +0 -1
- package/dist/types/plugins.d.ts +46 -1
- package/dist/types/properties.d.ts +259 -4
- 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 +1 -2
- package/dist/util/index.d.ts +2 -1
- package/dist/util/property_utils.d.ts +2 -1
- package/dist/util/resolutions.d.ts +1 -1
- package/package.json +10 -7
- package/src/app/Scaffold.tsx +14 -15
- package/src/components/AIIcon.tsx +39 -0
- package/src/components/ArrayContainer.tsx +1 -4
- package/src/components/ClearFilterSortButton.tsx +19 -16
- package/src/components/ConfirmationDialog.tsx +0 -2
- package/src/components/DeleteEntityDialog.tsx +2 -4
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +74 -41
- 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/internal/CollectionTableToolbar.tsx +20 -42
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +90 -49
- 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 +172 -0
- package/src/components/EntityCollectionView/EntityBoardCard.tsx +212 -0
- package/src/components/EntityCollectionView/EntityCard.tsx +231 -0
- package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +713 -0
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +244 -0
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +485 -203
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +31 -19
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +84 -15
- package/src/components/EntityCollectionView/FiltersDialog.tsx +249 -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/ErrorTooltip.tsx +2 -1
- package/src/components/HomePage/DefaultHomePage.tsx +47 -10
- package/src/components/HomePage/HomePageDnD.tsx +56 -41
- package/src/components/HomePage/NavigationCard.tsx +20 -18
- package/src/components/HomePage/NavigationGroup.tsx +17 -16
- package/src/components/HomePage/RenameGroupDialog.tsx +0 -2
- package/src/components/HomePage/SmallNavigationCard.tsx +10 -9
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +3 -10
- package/src/components/ReferenceWidget.tsx +2 -4
- package/src/components/SelectableTable/SelectableTable.tsx +75 -67
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +7 -6
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +39 -40
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +38 -38
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +49 -58
- package/src/components/UnsavedChangesDialog.tsx +0 -2
- package/src/components/UserDisplay.tsx +4 -4
- package/src/components/VirtualTable/VirtualTable.tsx +170 -19
- package/src/components/VirtualTable/VirtualTableCell.tsx +18 -2
- package/src/components/VirtualTable/VirtualTableHeader.tsx +20 -11
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +158 -42
- package/src/components/VirtualTable/VirtualTableProps.tsx +14 -1
- package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -0
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +17 -4
- package/src/components/VirtualTable/types.tsx +2 -0
- package/src/components/common/useColumnsIds.tsx +95 -3
- package/src/components/index.tsx +4 -0
- package/src/contexts/BreacrumbsContext.tsx +15 -8
- package/src/contexts/index.ts +10 -0
- package/src/core/DefaultAppBar.tsx +39 -26
- package/src/core/DefaultDrawer.tsx +42 -56
- package/src/core/DrawerNavigationGroup.tsx +118 -0
- package/src/core/DrawerNavigationItem.tsx +4 -3
- package/src/core/EntityEditView.tsx +41 -43
- package/src/core/SideDialogs.tsx +4 -2
- package/src/core/index.tsx +1 -0
- package/src/form/PropertyFieldBinding.tsx +58 -43
- package/src/form/components/StorageItemPreview.tsx +2 -1
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +0 -1
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -16
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +0 -1
- package/src/form/field_bindings/MapFieldBinding.tsx +69 -67
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +21 -17
- package/src/form/field_bindings/TextFieldBinding.tsx +71 -35
- package/src/form/validation.ts +245 -160
- package/src/hooks/useBreadcrumbsController.tsx +18 -0
- package/src/hooks/useBuildNavigationController.tsx +42 -19
- package/src/hooks/useCollapsedGroups.ts +12 -4
- package/src/internal/useBuildDataSource.ts +69 -34
- package/src/internal/useBuildSideDialogsController.tsx +11 -8
- package/src/internal/useBuildSideEntityController.tsx +2 -4
- package/src/internal/useRestoreScroll.tsx +26 -14
- package/src/preview/PropertyPreview.tsx +40 -32
- 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/StorageThumbnail.tsx +16 -12
- package/src/preview/components/UrlComponentPreview.tsx +28 -25
- 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/SkeletonPropertyComponent.tsx +61 -56
- package/src/routes/CustomCMSRoute.tsx +1 -0
- package/src/routes/FireCMSRoute.tsx +26 -13
- package/src/types/collections.ts +48 -3
- package/src/types/datasource.ts +54 -56
- package/src/types/plugins.tsx +51 -1
- package/src/types/properties.ts +347 -27
- 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 +28 -29
- package/src/util/entity_cache.ts +2 -1
- package/src/util/index.ts +2 -1
- package/src/util/objects.ts +31 -13
- package/src/util/{references.ts → previews.ts} +14 -0
- package/src/util/property_utils.tsx +36 -10
- package/src/util/resolutions.ts +57 -55
- /package/dist/util/{references.d.ts → previews.d.ts} +0 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import React, { useMemo } from "react";
|
|
2
|
+
import { CollectionSize, ViewMode } from "../../types";
|
|
3
|
+
import {
|
|
4
|
+
AppsIcon,
|
|
5
|
+
Button,
|
|
6
|
+
ListIcon,
|
|
7
|
+
Popover,
|
|
8
|
+
Select,
|
|
9
|
+
SelectItem,
|
|
10
|
+
ToggleButtonGroup,
|
|
11
|
+
ToggleButtonOption,
|
|
12
|
+
ViewColumnIcon,
|
|
13
|
+
ViewKanbanIcon
|
|
14
|
+
} from "@firecms/ui";
|
|
15
|
+
|
|
16
|
+
export type KanbanPropertyOption = {
|
|
17
|
+
key: string;
|
|
18
|
+
label: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type ViewModeToggleProps = {
|
|
22
|
+
viewMode?: ViewMode;
|
|
23
|
+
onViewModeChange?: (mode: ViewMode) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Whether Kanban view mode is available for this collection.
|
|
26
|
+
* Should be true when collection.kanban is set with a valid enum property.
|
|
27
|
+
*/
|
|
28
|
+
kanbanEnabled?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Whether a plugin exists that can configure Kanban (e.g., collection editor).
|
|
31
|
+
* When true, Kanban option is always shown (enabled or not based on kanbanEnabled).
|
|
32
|
+
* When false, Kanban option is shown but disabled.
|
|
33
|
+
*/
|
|
34
|
+
hasKanbanConfigPlugin?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Current size for card/table views
|
|
37
|
+
*/
|
|
38
|
+
size?: CollectionSize;
|
|
39
|
+
/**
|
|
40
|
+
* Callback when size changes
|
|
41
|
+
*/
|
|
42
|
+
onSizeChanged?: (size: CollectionSize) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Controlled open state for the popover
|
|
45
|
+
*/
|
|
46
|
+
open?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Callback when popover open state changes
|
|
49
|
+
*/
|
|
50
|
+
onOpenChange?: (open: boolean) => void;
|
|
51
|
+
/**
|
|
52
|
+
* Available properties that can be used for kanban columns (enum properties)
|
|
53
|
+
*/
|
|
54
|
+
kanbanPropertyOptions?: KanbanPropertyOption[];
|
|
55
|
+
/**
|
|
56
|
+
* Currently selected property for kanban columns
|
|
57
|
+
*/
|
|
58
|
+
selectedKanbanProperty?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Callback when the kanban column property changes
|
|
61
|
+
*/
|
|
62
|
+
onKanbanPropertyChange?: (property: string) => void;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function ViewModeToggle({
|
|
66
|
+
viewMode = "table",
|
|
67
|
+
onViewModeChange,
|
|
68
|
+
kanbanEnabled = false,
|
|
69
|
+
hasKanbanConfigPlugin = false,
|
|
70
|
+
size,
|
|
71
|
+
onSizeChanged,
|
|
72
|
+
open,
|
|
73
|
+
onOpenChange,
|
|
74
|
+
kanbanPropertyOptions,
|
|
75
|
+
selectedKanbanProperty,
|
|
76
|
+
onKanbanPropertyChange
|
|
77
|
+
}: ViewModeToggleProps) {
|
|
78
|
+
|
|
79
|
+
if (!onViewModeChange) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Get icon for current view mode
|
|
84
|
+
const getViewModeIcon = () => {
|
|
85
|
+
if (viewMode === "kanban") return <ViewKanbanIcon size="small" />;
|
|
86
|
+
if (viewMode === "cards") return <AppsIcon size="small" />;
|
|
87
|
+
return <ListIcon size="small" />;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const getViewModeName = () => {
|
|
91
|
+
if (viewMode === "kanban") return "Board";
|
|
92
|
+
if (viewMode === "cards") return "Cards";
|
|
93
|
+
return "List";
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const showKanban = kanbanEnabled || hasKanbanConfigPlugin;
|
|
97
|
+
const showSizeSelector = size && onSizeChanged && (viewMode === "table" || viewMode === "cards");
|
|
98
|
+
const showKanbanPropertySelector = viewMode === "kanban" &&
|
|
99
|
+
kanbanPropertyOptions &&
|
|
100
|
+
kanbanPropertyOptions.length > 0 &&
|
|
101
|
+
onKanbanPropertyChange;
|
|
102
|
+
|
|
103
|
+
// Build toggle options dynamically based on kanban availability
|
|
104
|
+
const viewModeOptions: ToggleButtonOption<ViewMode>[] = useMemo(() => {
|
|
105
|
+
const options: ToggleButtonOption<ViewMode>[] = [
|
|
106
|
+
{
|
|
107
|
+
value: "table",
|
|
108
|
+
label: "List",
|
|
109
|
+
icon: <ListIcon size="small" />
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
value: "cards",
|
|
113
|
+
label: "Cards",
|
|
114
|
+
icon: <AppsIcon size="small" />
|
|
115
|
+
}
|
|
116
|
+
];
|
|
117
|
+
|
|
118
|
+
if (showKanban) {
|
|
119
|
+
options.push({
|
|
120
|
+
value: "kanban",
|
|
121
|
+
label: "Board",
|
|
122
|
+
icon: <ViewKanbanIcon size="small" />,
|
|
123
|
+
disabled: !kanbanEnabled && !hasKanbanConfigPlugin
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return options;
|
|
128
|
+
}, [showKanban, kanbanEnabled, hasKanbanConfigPlugin]);
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<Popover
|
|
132
|
+
open={open}
|
|
133
|
+
onOpenChange={onOpenChange}
|
|
134
|
+
modal={true}
|
|
135
|
+
trigger={
|
|
136
|
+
<Button size="small">
|
|
137
|
+
{getViewModeIcon()}
|
|
138
|
+
<span className="ml-1 text-sm">{getViewModeName()}</span>
|
|
139
|
+
</Button>
|
|
140
|
+
}
|
|
141
|
+
>
|
|
142
|
+
<div className="p-3 flex flex-col gap-3 min-w-[240px]">
|
|
143
|
+
{/* View mode toggle using ToggleButtonGroup */}
|
|
144
|
+
<ToggleButtonGroup
|
|
145
|
+
value={viewMode}
|
|
146
|
+
onValueChange={onViewModeChange}
|
|
147
|
+
options={viewModeOptions}
|
|
148
|
+
/>
|
|
149
|
+
|
|
150
|
+
{/* Size selector */}
|
|
151
|
+
{showSizeSelector && (
|
|
152
|
+
<div className="flex flex-row items-center justify-between gap-2">
|
|
153
|
+
<div className="flex items-center gap-2 text-sm text-surface-600 dark:text-surface-300">
|
|
154
|
+
<ViewColumnIcon size="small" />
|
|
155
|
+
<span>Size</span>
|
|
156
|
+
</div>
|
|
157
|
+
<Select
|
|
158
|
+
value={size}
|
|
159
|
+
size="small"
|
|
160
|
+
className="w-20"
|
|
161
|
+
onValueChange={(v) => onSizeChanged?.(v as CollectionSize)}
|
|
162
|
+
renderValue={(v) => <span className="font-medium">{v.toUpperCase()}</span>}
|
|
163
|
+
>
|
|
164
|
+
{["xs", "s", "m", "l", "xl"].map((s) => (
|
|
165
|
+
<SelectItem key={s} value={s} className="font-medium text-center">
|
|
166
|
+
{s.toUpperCase()}
|
|
167
|
+
</SelectItem>
|
|
168
|
+
))}
|
|
169
|
+
</Select>
|
|
170
|
+
</div>
|
|
171
|
+
)}
|
|
172
|
+
|
|
173
|
+
{/* Kanban column property selector */}
|
|
174
|
+
{showKanbanPropertySelector && (
|
|
175
|
+
<div className="flex flex-row items-center justify-between gap-2">
|
|
176
|
+
<div className="flex items-center gap-2 text-sm text-surface-600 dark:text-surface-300">
|
|
177
|
+
<ViewKanbanIcon size="small" />
|
|
178
|
+
<span>Group by</span>
|
|
179
|
+
</div>
|
|
180
|
+
<Select
|
|
181
|
+
value={selectedKanbanProperty}
|
|
182
|
+
size="small"
|
|
183
|
+
className="w-32"
|
|
184
|
+
onValueChange={(v) => onKanbanPropertyChange?.(v)}
|
|
185
|
+
renderValue={(v) => {
|
|
186
|
+
const option = kanbanPropertyOptions?.find(o => o.key === v);
|
|
187
|
+
return <span className="font-medium truncate">{option?.label ?? v}</span>;
|
|
188
|
+
}}
|
|
189
|
+
>
|
|
190
|
+
{kanbanPropertyOptions?.map((option) => (
|
|
191
|
+
<SelectItem key={option.key} value={option.key}>
|
|
192
|
+
{option.label}
|
|
193
|
+
</SelectItem>
|
|
194
|
+
))}
|
|
195
|
+
</Select>
|
|
196
|
+
</div>
|
|
197
|
+
)}
|
|
198
|
+
</div>
|
|
199
|
+
</Popover>
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { CSSProperties } from "react";
|
|
2
|
+
import { ChipColorKey, ChipColorScheme } from "@firecms/ui";
|
|
3
|
+
import { Entity } from "../../types";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Item wrapper for entities in the Board component
|
|
7
|
+
*/
|
|
8
|
+
export interface BoardItem<M extends Record<string, any> = any> {
|
|
9
|
+
id: string;
|
|
10
|
+
entity: Entity<M>;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Map of column keys to arrays of board items
|
|
15
|
+
*/
|
|
16
|
+
export interface BoardItemMap<M extends Record<string, any> = any> {
|
|
17
|
+
[columnKey: string]: BoardItem<M>[];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Props passed to custom item render components
|
|
22
|
+
*/
|
|
23
|
+
export interface BoardItemViewProps<M extends Record<string, any> = any> {
|
|
24
|
+
item: BoardItem<M>;
|
|
25
|
+
isDragging: boolean;
|
|
26
|
+
isClone?: boolean;
|
|
27
|
+
isGroupedOver?: boolean;
|
|
28
|
+
style?: CSSProperties;
|
|
29
|
+
index?: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Per-column loading state
|
|
34
|
+
*/
|
|
35
|
+
export interface ColumnLoadingState {
|
|
36
|
+
[columnKey: string]: {
|
|
37
|
+
loading: boolean;
|
|
38
|
+
hasMore: boolean;
|
|
39
|
+
itemCount: number;
|
|
40
|
+
/** Total count of entities in column (may differ from itemCount if some lack orderProperty) */
|
|
41
|
+
totalCount?: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Props for the Board component
|
|
47
|
+
*/
|
|
48
|
+
export interface BoardProps<M extends Record<string, any>, COLUMN extends string> {
|
|
49
|
+
/**
|
|
50
|
+
* Array of board items (entities wrapped with id)
|
|
51
|
+
*/
|
|
52
|
+
data: BoardItem<M>[];
|
|
53
|
+
/**
|
|
54
|
+
* Array of column keys/identifiers
|
|
55
|
+
*/
|
|
56
|
+
columns: COLUMN[];
|
|
57
|
+
/**
|
|
58
|
+
* Labels for each column (optional, uses column key if not provided)
|
|
59
|
+
*/
|
|
60
|
+
columnLabels?: Record<COLUMN, string>;
|
|
61
|
+
/**
|
|
62
|
+
* Colors for each column from enum values (optional)
|
|
63
|
+
*/
|
|
64
|
+
columnColors?: Record<COLUMN, ChipColorKey | ChipColorScheme | undefined>;
|
|
65
|
+
/**
|
|
66
|
+
* CSS class name for the board container
|
|
67
|
+
*/
|
|
68
|
+
className?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Function to determine which column an item belongs to
|
|
71
|
+
*/
|
|
72
|
+
assignColumn: (item: BoardItem<M>) => COLUMN;
|
|
73
|
+
/**
|
|
74
|
+
* Whether column reordering is allowed.
|
|
75
|
+
* Set to true only when a plugin provides persistence for column order.
|
|
76
|
+
*/
|
|
77
|
+
allowColumnReorder?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Callback when columns are reordered
|
|
80
|
+
*/
|
|
81
|
+
onColumnReorder?: (columns: COLUMN[]) => void;
|
|
82
|
+
/**
|
|
83
|
+
* Callback when items are reordered or moved between columns
|
|
84
|
+
*/
|
|
85
|
+
onItemsReorder?: (
|
|
86
|
+
items: BoardItem<M>[],
|
|
87
|
+
moveInfo?: {
|
|
88
|
+
itemId: string;
|
|
89
|
+
sourceColumn: COLUMN;
|
|
90
|
+
targetColumn: COLUMN;
|
|
91
|
+
}
|
|
92
|
+
) => void;
|
|
93
|
+
/**
|
|
94
|
+
* Component to render individual items
|
|
95
|
+
*/
|
|
96
|
+
ItemComponent: React.ComponentType<BoardItemViewProps<M>>;
|
|
97
|
+
/**
|
|
98
|
+
* Per-column loading state for pagination
|
|
99
|
+
*/
|
|
100
|
+
columnLoadingState?: ColumnLoadingState;
|
|
101
|
+
/**
|
|
102
|
+
* Callback to load more items for a column
|
|
103
|
+
*/
|
|
104
|
+
onLoadMoreColumn?: (column: COLUMN) => void;
|
|
105
|
+
/**
|
|
106
|
+
* Callback to add a new item to a specific column
|
|
107
|
+
*/
|
|
108
|
+
onAddItemToColumn?: (column: COLUMN) => void;
|
|
109
|
+
/**
|
|
110
|
+
* Optional component to render at the end of the board for adding new columns
|
|
111
|
+
*/
|
|
112
|
+
AddColumnComponent?: React.ReactNode;
|
|
113
|
+
}
|