@object-ui/plugin-kanban 3.1.3 → 3.1.5

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.
@@ -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,CA2NpD,CAAA"}
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",
3
+ "version": "3.1.5",
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.21",
30
+ "@tanstack/react-virtual": "^3.13.23",
31
31
  "lucide-react": "^0.577.0",
32
- "@object-ui/components": "3.1.3",
33
- "@object-ui/core": "3.1.3",
34
- "@object-ui/react": "3.1.3",
35
- "@object-ui/types": "3.1.3"
32
+ "@object-ui/components": "3.1.5",
33
+ "@object-ui/core": "3.1.5",
34
+ "@object-ui/react": "3.1.5",
35
+ "@object-ui/types": "3.1.5"
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": "^5.1.4",
44
+ "@vitejs/plugin-react": "^6.0.1",
45
45
  "typescript": "^5.9.3",
46
- "vite": "^7.3.1",
46
+ "vite": "^8.0.1",
47
47
  "vite-plugin-dts": "^4.5.4",
48
- "@object-ui/data-objectstack": "3.1.3"
48
+ "@object-ui/data-objectstack": "3.1.5"
49
49
  },
50
50
  "scripts": {
51
51
  "build": "vite build",
@@ -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
- // And NO props.data passed from ListView
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, (props as any).data, objectDef]);
112
+ }, [schema.objectName, dataSource, boundData, schema.data, schema.filter, hasExternalData, objectDef]);
95
113
 
96
- // Determine which data to use: props.data -> bound -> inline -> fetched
97
- const rawData = (props as any).data || boundData || schema.data || fetchedData;
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(() => {