@object-ui/plugin-kanban 3.1.3 → 3.1.4
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/.turbo/turbo-build.log +24 -12
- package/CHANGELOG.md +9 -0
- package/dist/KanbanEnhanced-CvxO2soF.js +817 -0
- package/dist/KanbanImpl-ii52_k8g.js +396 -0
- package/dist/chevron-down-DpXJN6OX.js +7 -0
- package/dist/index.js +718 -15
- package/dist/index.umd.cjs +4 -4
- package/dist/plus-CAtTu4zt.js +223 -0
- package/dist/sortable.esm-DzUCoMzQ.js +2414 -0
- package/dist/src/ObjectKanban.d.ts +4 -0
- package/dist/src/ObjectKanban.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/ObjectKanban.tsx +26 -8
- package/dist/KanbanEnhanced-DbOkJkpo.js +0 -949
- package/dist/KanbanImpl-BnNosFpy.js +0 -350
- package/dist/index-DP2mI15e.js +0 -1077
- package/dist/sortable.esm-CNNHgHk5.js +0 -3206
|
@@ -5,6 +5,10 @@ export interface ObjectKanbanProps {
|
|
|
5
5
|
schema: KanbanSchema;
|
|
6
6
|
dataSource?: DataSource;
|
|
7
7
|
className?: string;
|
|
8
|
+
/** Pre-fetched records passed by a parent (e.g. ListView). When provided, skips internal data fetching. */
|
|
9
|
+
data?: any[];
|
|
10
|
+
/** Loading state propagated from a parent. Respected only when `data` is also provided. */
|
|
11
|
+
loading?: boolean;
|
|
8
12
|
onRowClick?: (record: any) => void;
|
|
9
13
|
onCardClick?: (record: any) => void;
|
|
10
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectKanban.d.ts","sourceRoot":"","sources":["../../src/ObjectKanban.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAuC,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ObjectKanban.d.ts","sourceRoot":"","sources":["../../src/ObjectKanban.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAuC,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAKnD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2GAA2G;IAC3G,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,2FAA2F;IAC3F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyOpD,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@object-ui/plugin-kanban",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Kanban board plugin for Object UI, powered by dnd-kit",
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
"@dnd-kit/core": "^6.3.1",
|
|
28
28
|
"@dnd-kit/sortable": "^10.0.0",
|
|
29
29
|
"@dnd-kit/utilities": "^3.2.2",
|
|
30
|
-
"@tanstack/react-virtual": "^3.13.
|
|
30
|
+
"@tanstack/react-virtual": "^3.13.23",
|
|
31
31
|
"lucide-react": "^0.577.0",
|
|
32
|
-
"@object-ui/components": "3.1.
|
|
33
|
-
"@object-ui/core": "3.1.
|
|
34
|
-
"@object-ui/react": "3.1.
|
|
35
|
-
"@object-ui/types": "3.1.
|
|
32
|
+
"@object-ui/components": "3.1.4",
|
|
33
|
+
"@object-ui/core": "3.1.4",
|
|
34
|
+
"@object-ui/react": "3.1.4",
|
|
35
|
+
"@object-ui/types": "3.1.4"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/react": "19.2.14",
|
|
43
43
|
"@types/react-dom": "19.2.3",
|
|
44
|
-
"@vitejs/plugin-react": "^
|
|
44
|
+
"@vitejs/plugin-react": "^6.0.1",
|
|
45
45
|
"typescript": "^5.9.3",
|
|
46
|
-
"vite": "^
|
|
46
|
+
"vite": "^8.0.1",
|
|
47
47
|
"vite-plugin-dts": "^4.5.4",
|
|
48
|
-
"@object-ui/data-objectstack": "3.1.
|
|
48
|
+
"@object-ui/data-objectstack": "3.1.4"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"build": "vite build",
|
package/src/ObjectKanban.tsx
CHANGED
|
@@ -18,6 +18,10 @@ export interface ObjectKanbanProps {
|
|
|
18
18
|
schema: KanbanSchema;
|
|
19
19
|
dataSource?: DataSource;
|
|
20
20
|
className?: string; // Allow override
|
|
21
|
+
/** Pre-fetched records passed by a parent (e.g. ListView). When provided, skips internal data fetching. */
|
|
22
|
+
data?: any[];
|
|
23
|
+
/** Loading state propagated from a parent. Respected only when `data` is also provided. */
|
|
24
|
+
loading?: boolean;
|
|
21
25
|
onRowClick?: (record: any) => void;
|
|
22
26
|
onCardClick?: (record: any) => void;
|
|
23
27
|
}
|
|
@@ -26,19 +30,33 @@ export const ObjectKanban: React.FC<ObjectKanbanProps> = ({
|
|
|
26
30
|
schema,
|
|
27
31
|
dataSource,
|
|
28
32
|
className,
|
|
33
|
+
data: externalData,
|
|
34
|
+
loading: externalLoading,
|
|
29
35
|
onRowClick,
|
|
30
36
|
onCardClick,
|
|
31
37
|
...props
|
|
32
38
|
}) => {
|
|
39
|
+
// When a parent (e.g. ListView) pre-fetches data and passes it via the `data` prop,
|
|
40
|
+
// we must not trigger a second fetch. Detect external data by checking if externalData
|
|
41
|
+
// is an array (undefined when not provided by parent).
|
|
42
|
+
const hasExternalData = Array.isArray(externalData);
|
|
43
|
+
|
|
33
44
|
const [fetchedData, setFetchedData] = useState<any[]>([]);
|
|
34
45
|
const [objectDef, setObjectDef] = useState<any>(null);
|
|
35
46
|
// loading state
|
|
36
|
-
const [loading, setLoading] = useState(false);
|
|
47
|
+
const [loading, setLoading] = useState(hasExternalData ? (externalLoading ?? false) : false);
|
|
37
48
|
const [error, setError] = useState<Error | null>(null);
|
|
38
49
|
|
|
39
50
|
// Resolve bound data if 'bind' property exists
|
|
40
51
|
const boundData = useDataScope(schema.bind);
|
|
41
52
|
|
|
53
|
+
// Sync external data changes from parent (e.g. ListView re-fetches after filter change)
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (hasExternalData && externalLoading !== undefined) {
|
|
56
|
+
setLoading(externalLoading);
|
|
57
|
+
}
|
|
58
|
+
}, [externalLoading, hasExternalData]);
|
|
59
|
+
|
|
42
60
|
// Fetch object definition for metadata (labels, options)
|
|
43
61
|
useEffect(() => {
|
|
44
62
|
let isMounted = true;
|
|
@@ -56,6 +74,9 @@ export const ObjectKanban: React.FC<ObjectKanbanProps> = ({
|
|
|
56
74
|
}, [schema.objectName, dataSource]);
|
|
57
75
|
|
|
58
76
|
useEffect(() => {
|
|
77
|
+
// Skip internal fetch when data is managed by a parent component
|
|
78
|
+
if (hasExternalData) return;
|
|
79
|
+
|
|
59
80
|
let isMounted = true;
|
|
60
81
|
const fetchData = async () => {
|
|
61
82
|
if (!dataSource || typeof dataSource.find !== 'function' || !schema.objectName) return;
|
|
@@ -72,8 +93,6 @@ export const ObjectKanban: React.FC<ObjectKanbanProps> = ({
|
|
|
72
93
|
// Handle { value: [] } OData shape or { data: [] } shape or direct array
|
|
73
94
|
const data = extractRecords(results);
|
|
74
95
|
|
|
75
|
-
console.log(`[ObjectKanban] Extracted data (length: ${data.length})`);
|
|
76
|
-
|
|
77
96
|
if (isMounted) {
|
|
78
97
|
setFetchedData(data);
|
|
79
98
|
}
|
|
@@ -86,15 +105,14 @@ export const ObjectKanban: React.FC<ObjectKanbanProps> = ({
|
|
|
86
105
|
};
|
|
87
106
|
|
|
88
107
|
// Trigger fetch if we have an objectName AND verify no inline/bound data overrides it
|
|
89
|
-
|
|
90
|
-
if (schema.objectName && !boundData && !schema.data && !(props as any).data) {
|
|
108
|
+
if (schema.objectName && !boundData && !schema.data) {
|
|
91
109
|
fetchData();
|
|
92
110
|
}
|
|
93
111
|
return () => { isMounted = false; };
|
|
94
|
-
}, [schema.objectName, dataSource, boundData, schema.data, schema.filter,
|
|
112
|
+
}, [schema.objectName, dataSource, boundData, schema.data, schema.filter, hasExternalData, objectDef]);
|
|
95
113
|
|
|
96
|
-
// Determine which data to use:
|
|
97
|
-
const rawData = (
|
|
114
|
+
// Determine which data to use: external -> bound -> inline -> fetched
|
|
115
|
+
const rawData = (hasExternalData ? externalData : undefined) || boundData || schema.data || fetchedData;
|
|
98
116
|
|
|
99
117
|
// Enhance data with title mapping and ensure IDs
|
|
100
118
|
const effectiveData = useMemo(() => {
|