@open-mercato/ui 0.9.1-develop.7499.1.fcec456e4e → 0.9.1-develop.7513.1.ae2715553f
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 +1 -1
- package/dist/backend/CrudForm.js +56 -36
- package/dist/backend/CrudForm.js.map +2 -2
- package/dist/backend/DataTable.js +40 -14
- package/dist/backend/DataTable.js.map +2 -2
- package/dist/backend/columns/ColumnChooserPanel.js +4 -3
- package/dist/backend/columns/ColumnChooserPanel.js.map +2 -2
- package/dist/backend/crud/injectedFieldGroups.js +50 -0
- package/dist/backend/crud/injectedFieldGroups.js.map +7 -0
- package/dist/backend/filters/FilterFieldPicker.js +3 -2
- package/dist/backend/filters/FilterFieldPicker.js.map +2 -2
- package/dist/backend/utils/api.js +25 -4
- package/dist/backend/utils/api.js.map +2 -2
- package/dist/backend/utils/groupLabels.js +16 -0
- package/dist/backend/utils/groupLabels.js.map +7 -0
- package/dist/theme/QueryProvider.js +7 -1
- package/dist/theme/QueryProvider.js.map +2 -2
- package/package.json +3 -3
- package/src/backend/CrudForm.tsx +68 -45
- package/src/backend/DataTable.tsx +54 -14
- package/src/backend/__tests__/CrudForm.fieldInjection.test.tsx +85 -4
- package/src/backend/__tests__/DataTable.injectedColumnPlacement.test.tsx +146 -0
- package/src/backend/columns/ColumnChooserPanel.tsx +4 -3
- package/src/backend/columns/__tests__/ColumnChooserPanel.groupLabels.test.tsx +72 -0
- package/src/backend/crud/__tests__/injectedFieldGroups.test.ts +90 -0
- package/src/backend/crud/injectedFieldGroups.ts +75 -0
- package/src/backend/filters/FilterFieldPicker.tsx +3 -2
- package/src/backend/filters/__tests__/FilterFieldPicker.groupLabels.test.tsx +77 -0
- package/src/backend/utils/__tests__/api.test.ts +67 -0
- package/src/backend/utils/api.ts +33 -4
- package/src/backend/utils/groupLabels.ts +26 -0
- package/src/theme/QueryProvider.tsx +7 -1
- package/src/theme/__tests__/QueryProvider.i18n.test.tsx +40 -0
|
@@ -52,7 +52,7 @@ import { surfaceRecordConflict } from "./conflicts/index.js";
|
|
|
52
52
|
import { ComponentReplacementHandles } from "@open-mercato/shared/modules/widgets/component-registry";
|
|
53
53
|
import { useRegisteredComponent } from "./injection/useRegisteredComponent.js";
|
|
54
54
|
import { dataTableExtensionSpotId, extensionSpotChildId } from "@open-mercato/shared/modules/widgets/extension-points";
|
|
55
|
-
import { insertByInjectionPlacement } from "@open-mercato/shared/modules/widgets/injection-position";
|
|
55
|
+
import { insertByInjectionPlacement, InjectionPosition } from "@open-mercato/shared/modules/widgets/injection-position";
|
|
56
56
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
57
57
|
import { getDefaultOperator, isAdvancedFilterState, flatToTree } from "@open-mercato/shared/lib/query/advanced-filter";
|
|
58
58
|
import {
|
|
@@ -111,6 +111,37 @@ function withDataTableNamespaces(mappedRow, sourceItem) {
|
|
|
111
111
|
...namespaced
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
|
+
function reconcileColumnOrder(prev, ids, placements = /* @__PURE__ */ new Map()) {
|
|
115
|
+
const allowed = new Set(ids);
|
|
116
|
+
const result = prev.filter((id) => allowed.has(id));
|
|
117
|
+
const known = new Set(result);
|
|
118
|
+
ids.forEach((id, index) => {
|
|
119
|
+
if (known.has(id)) return;
|
|
120
|
+
const placement = placements.get(id);
|
|
121
|
+
const anchorIndex = placement?.relativeTo ? result.indexOf(placement.relativeTo) : -1;
|
|
122
|
+
if (anchorIndex !== -1 && (placement?.position === InjectionPosition.Before || placement?.position === InjectionPosition.After)) {
|
|
123
|
+
result.splice(placement.position === InjectionPosition.Before ? anchorIndex : anchorIndex + 1, 0, id);
|
|
124
|
+
known.add(id);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const hasKnownSuccessor = ids.slice(index + 1).some((candidate) => known.has(candidate));
|
|
128
|
+
if (!hasKnownSuccessor) {
|
|
129
|
+
result.push(id);
|
|
130
|
+
} else {
|
|
131
|
+
let insertAt = 0;
|
|
132
|
+
for (let cursor = index - 1; cursor >= 0; cursor -= 1) {
|
|
133
|
+
const predecessorIndex = result.indexOf(ids[cursor]);
|
|
134
|
+
if (predecessorIndex !== -1) {
|
|
135
|
+
insertAt = predecessorIndex + 1;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
result.splice(insertAt, 0, id);
|
|
140
|
+
}
|
|
141
|
+
known.add(id);
|
|
142
|
+
});
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
114
145
|
function resolveDataTableRowId(row, index) {
|
|
115
146
|
if (row && typeof row === "object") {
|
|
116
147
|
const candidate = row.id;
|
|
@@ -1291,23 +1322,18 @@ function DataTableImpl({
|
|
|
1291
1322
|
[baseInjectionContext, hasInjectedBulkActions, rowSelection]
|
|
1292
1323
|
);
|
|
1293
1324
|
React.useEffect(() => {
|
|
1294
|
-
const ids = table.
|
|
1325
|
+
const ids = table.getAllColumns().flatMap((column) => column.getLeafColumns()).map((column) => column.id);
|
|
1295
1326
|
if (!ids.length) return;
|
|
1327
|
+
const placements = new Map(
|
|
1328
|
+
injectedColumnDefs.map(({ def, placement }) => [def.id ?? "", placement])
|
|
1329
|
+
);
|
|
1296
1330
|
setColumnOrder((prev) => {
|
|
1297
1331
|
if (!prev.length) return ids;
|
|
1298
|
-
const
|
|
1299
|
-
const
|
|
1300
|
-
|
|
1301
|
-
for (const id of allowed) {
|
|
1302
|
-
if (!seen.has(id)) {
|
|
1303
|
-
filtered.push(id);
|
|
1304
|
-
seen.add(id);
|
|
1305
|
-
}
|
|
1306
|
-
}
|
|
1307
|
-
const changed = filtered.length !== prev.length || filtered.some((id, index) => id !== prev[index]);
|
|
1308
|
-
return changed ? filtered : prev;
|
|
1332
|
+
const next = reconcileColumnOrder(prev, ids, placements);
|
|
1333
|
+
const changed = next.length !== prev.length || next.some((id, index) => id !== prev[index]);
|
|
1334
|
+
return changed ? next : prev;
|
|
1309
1335
|
});
|
|
1310
|
-
}, [table, mergedColumns]);
|
|
1336
|
+
}, [table, mergedColumns, injectedColumnDefs]);
|
|
1311
1337
|
const visibilityDecidedColumnIds = React.useRef(
|
|
1312
1338
|
new Set(Object.keys(mergedInitialSettings?.columnVisibility ?? {}))
|
|
1313
1339
|
);
|