@firecms/data_import_export 3.0.0-canary.7 → 3.0.0-canary.8
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/dist/components/DataNewPropertiesMapping.d.ts +1 -1
- package/dist/export_import/ExportCollectionAction.d.ts +1 -0
- package/dist/export_import/ImportCollectionAction.d.ts +3 -1
- package/dist/index.es.js +489 -466
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/useImportExportPlugin.d.ts +1 -0
- package/package.json +16 -16
- package/src/components/DataNewPropertiesMapping.tsx +5 -4
- package/src/components/ImportSaveInProgress.tsx +24 -2
- package/src/export_import/ExportCollectionAction.tsx +5 -4
- package/src/export_import/ImportCollectionAction.tsx +33 -12
- package/src/export_import/export.ts +1 -1
- package/src/useImportExportPlugin.tsx +2 -1
- package/src/utils/data.ts +14 -1
package/dist/index.es.js
CHANGED
@@ -1,221 +1,222 @@
|
|
1
|
-
import C, { useState as
|
2
|
-
import { jsxs as
|
3
|
-
import { getPropertyInPath as
|
4
|
-
import { Table as
|
5
|
-
import { buildEntityPropertiesFromData as
|
6
|
-
import * as
|
7
|
-
const
|
8
|
-
const [e, r] =
|
1
|
+
import C, { useState as O, useRef as Ee, useEffect as de, useCallback as b, useMemo as Ie } from "react";
|
2
|
+
import { jsxs as f, Fragment as M, jsx as o } from "react/jsx-runtime";
|
3
|
+
import { getPropertyInPath as _, EntityReference as Ae, useSnackbarController as pe, useCustomizationController as X, getFieldConfig as fe, ErrorBoundary as Te, PropertyConfigBadge as me, useDataSource as ue, resolveCollection as he, getPropertiesWithPropertiesOrder as je, useSelectionController as Fe, EntityCollectionTable as Pe, slugify as ke, getArrayValuesCount as Me, getValueInPath as _e, useFireCMSContext as $e, useNavigationController as Re } from "@firecms/core";
|
4
|
+
import { Table as Le, TableHeader as Be, TableCell as k, TableBody as Je, TableRow as He, Typography as u, ChevronRightIcon as Ue, Select as ge, SelectItem as H, FileUpload as We, UploadIcon as ze, TextField as Ve, IconButton as ee, EditIcon as Ge, CenteredView as ie, Button as E, CircularProgress as ye, Tooltip as te, FileUploadIcon as Xe, Dialog as be, DialogContent as xe, DialogActions as ve, cn as J, defaultBorderMixin as qe, GetAppIcon as Qe, Alert as Ye, focusedMixin as z, BooleanSwitchWithLabel as Ze } from "@firecms/ui";
|
5
|
+
import { buildEntityPropertiesFromData as Ke } from "@firecms/schema_inference";
|
6
|
+
import * as oe from "xlsx";
|
7
|
+
const et = () => {
|
8
|
+
const [e, r] = O(!1), [a, t] = O(), [n, i] = O([]), [s, d] = O([]), [c, l] = O({}), [p, m] = O({});
|
9
9
|
return {
|
10
10
|
inUse: e,
|
11
11
|
setInUse: r,
|
12
|
-
idColumn:
|
12
|
+
idColumn: a,
|
13
13
|
setIdColumn: t,
|
14
|
-
entities:
|
15
|
-
setEntities:
|
16
|
-
importData:
|
14
|
+
entities: s,
|
15
|
+
setEntities: d,
|
16
|
+
importData: n,
|
17
17
|
setImportData: i,
|
18
|
-
headersMapping:
|
19
|
-
setHeadersMapping:
|
20
|
-
originProperties:
|
18
|
+
headersMapping: c,
|
19
|
+
setHeadersMapping: l,
|
20
|
+
originProperties: p,
|
21
21
|
setOriginProperties: m
|
22
22
|
};
|
23
23
|
};
|
24
|
-
function
|
25
|
-
return new Promise((r,
|
24
|
+
function tt(e) {
|
25
|
+
return new Promise((r, a) => {
|
26
26
|
if (e.type === "application/json") {
|
27
27
|
console.debug("Converting JSON file to JSON", e.name);
|
28
28
|
const t = new FileReader();
|
29
|
-
t.onload = function(
|
30
|
-
const i =
|
31
|
-
Array.isArray(
|
29
|
+
t.onload = function(n) {
|
30
|
+
const i = n.target?.result, s = JSON.parse(i);
|
31
|
+
Array.isArray(s) || a(new Error("JSON file should contain an array of objects")), r(s);
|
32
32
|
}, t.readAsText(e);
|
33
33
|
} else {
|
34
34
|
console.debug("Converting Excel file to JSON", e.name);
|
35
35
|
const t = new FileReader();
|
36
|
-
t.onload = function(
|
37
|
-
const i = new Uint8Array(
|
36
|
+
t.onload = function(n) {
|
37
|
+
const i = new Uint8Array(n.target?.result), s = oe.read(
|
38
38
|
i,
|
39
39
|
{
|
40
40
|
type: "array",
|
41
41
|
codepage: 65001,
|
42
42
|
cellDates: !0
|
43
43
|
}
|
44
|
-
),
|
44
|
+
), d = s.SheetNames[0], c = s.Sheets[d], m = oe.utils.sheet_to_json(c).map(rt).map(Ce);
|
45
45
|
r(m);
|
46
46
|
}, t.readAsArrayBuffer(e);
|
47
47
|
}
|
48
48
|
});
|
49
49
|
}
|
50
|
-
function
|
51
|
-
return Object.keys(e).reduce((r,
|
50
|
+
function rt(e) {
|
51
|
+
return Object.keys(e).reduce((r, a) => {
|
52
52
|
try {
|
53
|
-
r[
|
53
|
+
r[a] = JSON.parse(e[a]);
|
54
54
|
} catch {
|
55
|
-
r[
|
55
|
+
r[a] = e[a];
|
56
56
|
}
|
57
57
|
return r;
|
58
58
|
}, {});
|
59
59
|
}
|
60
|
-
function
|
61
|
-
return Object.keys(e).reduce((r,
|
60
|
+
function Ce(e) {
|
61
|
+
return Object.keys(e).reduce((r, a) => {
|
62
62
|
let t = r;
|
63
|
-
const
|
64
|
-
return
|
63
|
+
const n = a.split(".");
|
64
|
+
return n.forEach((i, s) => {
|
65
65
|
if (/^[\w]+\[\d+\]$/.test(i)) {
|
66
|
-
const
|
67
|
-
t[
|
66
|
+
const d = i.slice(0, i.indexOf("[")), c = parseInt(i.slice(i.indexOf("[") + 1, i.indexOf("]")));
|
67
|
+
t[d] || (t[d] = []), s !== n.length - 1 ? (t[d][c] = t[d][c] || {}, t = t[d][c]) : t[d][c] = e[a];
|
68
68
|
} else
|
69
|
-
|
69
|
+
s !== n.length - 1 ? (t[i] = t[i] || {}, t = t[i]) : t[i] = e[a];
|
70
70
|
}), r;
|
71
71
|
}, {});
|
72
72
|
}
|
73
|
-
function
|
74
|
-
const
|
75
|
-
r && delete
|
76
|
-
const
|
77
|
-
const
|
78
|
-
if (!
|
73
|
+
function nt(e, r, a, t, n, i) {
|
74
|
+
const s = we(e);
|
75
|
+
r && delete s[r];
|
76
|
+
const d = Object.entries(s).map(([p, m]) => {
|
77
|
+
const h = a[p] ?? p;
|
78
|
+
if (!_(t, h))
|
79
79
|
return {};
|
80
|
-
const
|
81
|
-
let
|
82
|
-
return
|
83
|
-
[
|
80
|
+
const I = n[h];
|
81
|
+
let A = m;
|
82
|
+
return I && (A = Z(m, I)), {
|
83
|
+
[h]: A
|
84
84
|
};
|
85
|
-
}).reduce((
|
86
|
-
|
87
|
-
|
88
|
-
|
85
|
+
}).reduce((p, m) => ({ ...p, ...m }), {}), c = Ce(d);
|
86
|
+
let l = r ? e[r] : void 0;
|
87
|
+
return typeof l == "string" ? l = l.trim() : typeof l == "number" || typeof l == "boolean" ? l = l.toString() : l instanceof Date ? l = l.toISOString() : l && "toString" in l && (l = l.toString()), {
|
88
|
+
id: l,
|
89
|
+
values: c,
|
89
90
|
path: i
|
90
91
|
};
|
91
92
|
}
|
92
|
-
function
|
93
|
-
return Object.keys(e).reduce((
|
94
|
-
const
|
95
|
-
return typeof e[t] == "object" && e[t] !== null && !Array.isArray(e[t]) ? Object.assign(
|
93
|
+
function we(e, r = "") {
|
94
|
+
return Object.keys(e).reduce((a, t) => {
|
95
|
+
const n = r ? `${r}.${t}` : t;
|
96
|
+
return typeof e[t] == "object" && e[t] !== null && !Array.isArray(e[t]) ? Object.assign(a, we(e[t], n)) : a[n] = e[t], a;
|
96
97
|
}, {});
|
97
98
|
}
|
98
99
|
function Z(e, r) {
|
99
100
|
if (r === void 0)
|
100
101
|
return e;
|
101
102
|
const {
|
102
|
-
from:
|
103
|
+
from: a,
|
103
104
|
to: t
|
104
105
|
} = r;
|
105
|
-
if (
|
106
|
-
return e.map((
|
106
|
+
if (a === "array" && t === "array" && r.fromSubtype && r.toSubtype && Array.isArray(e))
|
107
|
+
return e.map((n) => Z(n, {
|
107
108
|
from: r.fromSubtype,
|
108
109
|
to: r.toSubtype
|
109
110
|
}));
|
110
|
-
if (
|
111
|
+
if (a === "string" && t === "number" && typeof e == "string")
|
111
112
|
return Number(e);
|
112
|
-
if (
|
113
|
-
return e.split(",").map((
|
113
|
+
if (a === "string" && t === "array" && r.toSubtype && typeof e == "string")
|
114
|
+
return e.split(",").map((n) => Z(n, {
|
114
115
|
from: "string",
|
115
116
|
to: r.toSubtype
|
116
117
|
}));
|
117
|
-
if (
|
118
|
+
if (a === "string" && t === "boolean")
|
118
119
|
return e === "true";
|
119
|
-
if (
|
120
|
+
if (a === "number" && t === "boolean")
|
120
121
|
return e === 1;
|
121
|
-
if (
|
122
|
+
if (a === "boolean" && t === "number")
|
122
123
|
return e ? 1 : 0;
|
123
|
-
if (
|
124
|
+
if (a === "boolean" && t === "string")
|
124
125
|
return e ? "true" : "false";
|
125
|
-
if (
|
126
|
+
if (a === "number" && t === "string" && typeof e == "number")
|
126
127
|
return e.toString();
|
127
|
-
if (
|
128
|
-
return e.split(",").map((
|
129
|
-
if (
|
128
|
+
if (a === "string" && t === "array" && typeof e == "string")
|
129
|
+
return e.split(",").map((n) => n.trim());
|
130
|
+
if (a === "string" && t === "date" && typeof e == "string")
|
130
131
|
try {
|
131
132
|
return new Date(e);
|
132
133
|
} catch {
|
133
134
|
return e;
|
134
135
|
}
|
135
136
|
else {
|
136
|
-
if (
|
137
|
+
if (a === "date" && t === "string")
|
137
138
|
return e instanceof Date && e.toISOString();
|
138
|
-
if (
|
139
|
+
if (a === "number" && t === "date" && typeof e == "number")
|
139
140
|
try {
|
140
141
|
return new Date(e);
|
141
142
|
} catch {
|
142
143
|
return e;
|
143
144
|
}
|
144
|
-
else if (
|
145
|
-
const
|
146
|
-
return new
|
145
|
+
else if (a === "string" && t === "reference" && typeof e == "string") {
|
146
|
+
const n = e.split("/").slice(0, -1).join("/"), i = e.split("/").slice(-1)[0];
|
147
|
+
return new Ae(i, n);
|
147
148
|
} else {
|
148
|
-
if (
|
149
|
+
if (a === t)
|
149
150
|
return e;
|
150
|
-
if (
|
151
|
+
if (a === "array" && t === "string" && Array.isArray(e))
|
151
152
|
return e.join(",");
|
152
153
|
}
|
153
154
|
}
|
154
155
|
return e;
|
155
156
|
}
|
156
|
-
function
|
157
|
+
function at(e) {
|
157
158
|
return typeof e == "number" ? "number" : typeof e == "string" ? "string" : typeof e == "boolean" ? "boolean" : e instanceof Date ? "date" : Array.isArray(e) ? "array" : "map";
|
158
159
|
}
|
159
|
-
function
|
160
|
-
function
|
160
|
+
function it(e, r) {
|
161
|
+
function a(t, n) {
|
161
162
|
const i = {};
|
162
|
-
return Object.keys(t).forEach((
|
163
|
-
const
|
164
|
-
if (
|
165
|
-
if (
|
166
|
-
const
|
167
|
-
Object.keys(
|
168
|
-
i[`${
|
163
|
+
return Object.keys(t).forEach((s) => {
|
164
|
+
const d = n ? `${n}.${s}` : s, c = _(t, s), l = _(e, d);
|
165
|
+
if (c) {
|
166
|
+
if (c.dataType === "map" && c.properties) {
|
167
|
+
const p = a(c.properties, d);
|
168
|
+
Object.keys(p).forEach((m) => {
|
169
|
+
i[`${d}.${m}`] = p[m];
|
169
170
|
});
|
170
171
|
return;
|
171
172
|
}
|
172
|
-
if (
|
173
|
-
const
|
174
|
-
let
|
175
|
-
|
176
|
-
from:
|
173
|
+
if (l) {
|
174
|
+
const p = l.dataType, m = c.dataType;
|
175
|
+
let h, g;
|
176
|
+
c.dataType === "array" && c.of && (g = c.of.dataType), l?.dataType === "array" && l?.of && (h = l.of.dataType), (p !== m || h !== g) && (i[s] = {
|
177
|
+
from: p,
|
177
178
|
to: m,
|
178
|
-
fromSubtype:
|
179
|
-
toSubtype:
|
179
|
+
fromSubtype: h,
|
180
|
+
toSubtype: g
|
180
181
|
});
|
181
182
|
}
|
182
183
|
}
|
183
184
|
}), i;
|
184
185
|
}
|
185
|
-
return
|
186
|
+
return a(r);
|
186
187
|
}
|
187
|
-
function
|
188
|
+
function ot({
|
188
189
|
idColumn: e,
|
189
190
|
headersMapping: r,
|
190
|
-
originProperties:
|
191
|
+
originProperties: a,
|
191
192
|
destinationProperties: t,
|
192
|
-
onIdPropertyChanged:
|
193
|
+
onIdPropertyChanged: n,
|
193
194
|
buildPropertyView: i
|
194
195
|
}) {
|
195
|
-
return /* @__PURE__ */
|
196
|
-
/* @__PURE__ */
|
196
|
+
return /* @__PURE__ */ f(M, { children: [
|
197
|
+
/* @__PURE__ */ o(
|
197
198
|
st,
|
198
199
|
{
|
199
200
|
idColumn: e,
|
200
201
|
headersMapping: r,
|
201
|
-
onChange:
|
202
|
+
onChange: n
|
202
203
|
}
|
203
204
|
),
|
204
|
-
/* @__PURE__ */
|
205
|
+
/* @__PURE__ */ f(Le, { style: {
|
205
206
|
tableLayout: "fixed"
|
206
207
|
}, children: [
|
207
|
-
/* @__PURE__ */
|
208
|
-
/* @__PURE__ */
|
209
|
-
/* @__PURE__ */
|
210
|
-
/* @__PURE__ */
|
208
|
+
/* @__PURE__ */ f(Be, { children: [
|
209
|
+
/* @__PURE__ */ o(k, { header: !0, style: { width: "20%" }, children: "Column in file" }),
|
210
|
+
/* @__PURE__ */ o(k, { header: !0 }),
|
211
|
+
/* @__PURE__ */ o(k, { header: !0, style: { width: "75%" }, children: "Property" })
|
211
212
|
] }),
|
212
|
-
/* @__PURE__ */
|
213
|
-
([
|
214
|
-
const
|
215
|
-
return /* @__PURE__ */
|
216
|
-
/* @__PURE__ */
|
217
|
-
/* @__PURE__ */
|
218
|
-
|
213
|
+
/* @__PURE__ */ o(Je, { children: t && Object.entries(r).map(
|
214
|
+
([s, d]) => {
|
215
|
+
const c = r[s], l = d ? _(t, d) : null, p = _(a, s), m = p ? p.dataType === "array" && typeof p.of == "object" ? `${p.dataType} - ${p.of.dataType}` : p.dataType : void 0;
|
216
|
+
return /* @__PURE__ */ f(He, { style: { height: "90px" }, children: [
|
217
|
+
/* @__PURE__ */ f(k, { style: { width: "20%" }, children: [
|
218
|
+
/* @__PURE__ */ o(u, { variant: "body2", children: s }),
|
219
|
+
p && /* @__PURE__ */ o(
|
219
220
|
u,
|
220
221
|
{
|
221
222
|
variant: "caption",
|
@@ -224,21 +225,21 @@ function it({
|
|
224
225
|
}
|
225
226
|
)
|
226
227
|
] }),
|
227
|
-
/* @__PURE__ */
|
228
|
-
/* @__PURE__ */
|
229
|
-
|
228
|
+
/* @__PURE__ */ o(k, { children: /* @__PURE__ */ o(Ue, {}) }),
|
229
|
+
/* @__PURE__ */ o(
|
230
|
+
k,
|
230
231
|
{
|
231
|
-
className:
|
232
|
+
className: s === e ? "text-center" : void 0,
|
232
233
|
style: { width: "75%" },
|
233
234
|
children: i?.({
|
234
|
-
isIdColumn:
|
235
|
-
property:
|
236
|
-
propertyKey:
|
237
|
-
importKey:
|
235
|
+
isIdColumn: s === e,
|
236
|
+
property: l,
|
237
|
+
propertyKey: c,
|
238
|
+
importKey: s
|
238
239
|
})
|
239
240
|
}
|
240
241
|
)
|
241
|
-
] },
|
242
|
+
] }, s);
|
242
243
|
}
|
243
244
|
) })
|
244
245
|
] })
|
@@ -247,29 +248,30 @@ function it({
|
|
247
248
|
function st({
|
248
249
|
idColumn: e,
|
249
250
|
headersMapping: r,
|
250
|
-
onChange:
|
251
|
+
onChange: a
|
251
252
|
}) {
|
252
|
-
return /* @__PURE__ */
|
253
|
-
|
253
|
+
return /* @__PURE__ */ o("div", { children: /* @__PURE__ */ f(
|
254
|
+
ge,
|
254
255
|
{
|
255
256
|
size: "small",
|
256
257
|
value: e ?? "",
|
257
258
|
onChange: (t) => {
|
258
|
-
n
|
259
|
+
const n = t.target.value;
|
260
|
+
a(n === "none" ? null : n);
|
259
261
|
},
|
260
|
-
renderValue: (t) => /* @__PURE__ */
|
262
|
+
renderValue: (t) => /* @__PURE__ */ o(u, { variant: "body2", children: t !== "" ? t : "Autogenerate ID" }),
|
261
263
|
label: "Column that will be used as ID for each document",
|
262
264
|
children: [
|
263
|
-
/* @__PURE__ */
|
264
|
-
Object.entries(r).map(([t,
|
265
|
+
/* @__PURE__ */ o(H, { value: "none", children: "Autogenerate ID" }),
|
266
|
+
Object.entries(r).map(([t, n]) => /* @__PURE__ */ o(H, { value: t, children: t }, t))
|
265
267
|
]
|
266
268
|
}
|
267
269
|
) });
|
268
270
|
}
|
269
|
-
function
|
270
|
-
const r =
|
271
|
-
return /* @__PURE__ */
|
272
|
-
|
271
|
+
function lt({ onDataAdded: e }) {
|
272
|
+
const r = pe();
|
273
|
+
return /* @__PURE__ */ o(
|
274
|
+
We,
|
273
275
|
{
|
274
276
|
accept: {
|
275
277
|
"text/*": [".csv", ".xls", ".xlsx"],
|
@@ -284,12 +286,12 @@ function ot({ onDataAdded: e }) {
|
|
284
286
|
preventDropOnDocument: !0,
|
285
287
|
size: "small",
|
286
288
|
maxFiles: 1,
|
287
|
-
uploadDescription: /* @__PURE__ */
|
288
|
-
/* @__PURE__ */
|
289
|
+
uploadDescription: /* @__PURE__ */ f(M, { children: [
|
290
|
+
/* @__PURE__ */ o(ze, {}),
|
289
291
|
"Drag and drop a file here or click to upload"
|
290
292
|
] }),
|
291
|
-
onFilesAdded: (
|
292
|
-
|
293
|
+
onFilesAdded: (a) => {
|
294
|
+
a.length > 0 && tt(a[0]).then((t) => {
|
293
295
|
e(t);
|
294
296
|
}).catch((t) => {
|
295
297
|
console.error("Error parsing file", t), r.open({ type: "error", message: t.message });
|
@@ -301,181 +303,191 @@ function ot({ onDataAdded: e }) {
|
|
301
303
|
function Dt({
|
302
304
|
propertyKey: e,
|
303
305
|
property: r,
|
304
|
-
onEditClick:
|
306
|
+
onEditClick: a,
|
305
307
|
includeName: t = !0,
|
306
|
-
onPropertyNameChanged:
|
308
|
+
onPropertyNameChanged: n,
|
307
309
|
propertyTypeView: i
|
308
310
|
}) {
|
309
|
-
const { propertyConfigs:
|
310
|
-
return /* @__PURE__ */
|
311
|
+
const { propertyConfigs: s } = X(), d = r ? fe(r, s) : null;
|
312
|
+
return /* @__PURE__ */ o(Te, { children: /* @__PURE__ */ f(
|
311
313
|
"div",
|
312
314
|
{
|
313
315
|
className: "flex flex-row w-full items-center",
|
314
316
|
children: [
|
315
|
-
/* @__PURE__ */
|
316
|
-
/* @__PURE__ */
|
317
|
-
t && /* @__PURE__ */
|
318
|
-
|
317
|
+
/* @__PURE__ */ o("div", { className: "mx-4", children: i ?? /* @__PURE__ */ o(me, { propertyConfig: d ?? void 0 }) }),
|
318
|
+
/* @__PURE__ */ o("div", { className: "w-full flex flex-col grow", children: /* @__PURE__ */ f("div", { className: "flex flex-row items-center gap-2", children: [
|
319
|
+
t && /* @__PURE__ */ o(
|
320
|
+
Ve,
|
319
321
|
{
|
320
322
|
size: "small",
|
321
323
|
className: "text-base grow",
|
322
324
|
value: r?.name ?? "",
|
323
|
-
onChange: (
|
324
|
-
|
325
|
+
onChange: (c) => {
|
326
|
+
n && e && n(e, c.target.value);
|
325
327
|
}
|
326
328
|
}
|
327
329
|
),
|
328
|
-
/* @__PURE__ */
|
330
|
+
/* @__PURE__ */ o(ee, { onClick: a, size: "small", children: /* @__PURE__ */ o(Ge, { size: "small" }) })
|
329
331
|
] }) })
|
330
332
|
]
|
331
333
|
}
|
332
334
|
) });
|
333
335
|
}
|
334
|
-
function
|
336
|
+
function ct({
|
335
337
|
path: e,
|
336
338
|
importConfig: r,
|
337
|
-
collection:
|
339
|
+
collection: a,
|
338
340
|
onImportSuccess: t
|
339
341
|
}) {
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
342
|
+
const [n, i] = O(void 0), s = ue(), d = Ee(!1), [c, l] = O(0);
|
343
|
+
function p() {
|
344
|
+
d.current || (d.current = !0, Se(
|
345
|
+
s,
|
344
346
|
a,
|
345
|
-
n,
|
346
347
|
e,
|
347
348
|
r.entities,
|
348
349
|
0,
|
349
350
|
25,
|
350
351
|
l
|
351
352
|
).then(() => {
|
352
|
-
t(
|
353
|
+
t(a), d.current = !1;
|
354
|
+
}).catch((m) => {
|
355
|
+
i(m), d.current = !1;
|
353
356
|
}));
|
354
357
|
}
|
355
|
-
return
|
356
|
-
|
357
|
-
}, []), /* @__PURE__ */
|
358
|
-
/* @__PURE__ */
|
359
|
-
/* @__PURE__ */
|
360
|
-
/* @__PURE__ */
|
361
|
-
|
358
|
+
return de(() => {
|
359
|
+
p();
|
360
|
+
}, []), n ? /* @__PURE__ */ f(ie, { className: "flex flex-col gap-4 items-center", children: [
|
361
|
+
/* @__PURE__ */ o(u, { variant: "h6", children: "Error saving data" }),
|
362
|
+
/* @__PURE__ */ o(u, { variant: "body2", color: "error", children: n.message }),
|
363
|
+
/* @__PURE__ */ o(
|
364
|
+
E,
|
365
|
+
{
|
366
|
+
onClick: p,
|
367
|
+
variant: "outlined",
|
368
|
+
children: "Retry"
|
369
|
+
}
|
370
|
+
)
|
371
|
+
] }) : /* @__PURE__ */ f(ie, { className: "flex flex-col gap-4 items-center", children: [
|
372
|
+
/* @__PURE__ */ o(ye, {}),
|
373
|
+
/* @__PURE__ */ o(u, { variant: "h6", children: "Saving data" }),
|
374
|
+
/* @__PURE__ */ f(u, { variant: "body2", children: [
|
375
|
+
c,
|
362
376
|
"/",
|
363
377
|
r.entities.length,
|
364
378
|
" entities saved"
|
365
379
|
] }),
|
366
|
-
/* @__PURE__ */
|
380
|
+
/* @__PURE__ */ o(u, { variant: "caption", children: "Do not close this tab or the import will be interrupted." })
|
367
381
|
] });
|
368
382
|
}
|
369
|
-
function
|
370
|
-
console.debug("Saving imported data",
|
371
|
-
const
|
372
|
-
return Promise.all(
|
373
|
-
path:
|
374
|
-
values:
|
375
|
-
entityId:
|
383
|
+
function Se(e, r, a, t, n = 0, i = 25, s) {
|
384
|
+
console.debug("Saving imported data", n, i);
|
385
|
+
const d = t.slice(n, n + i);
|
386
|
+
return Promise.all(d.map((c) => e.saveEntity({
|
387
|
+
path: a,
|
388
|
+
values: c.values,
|
389
|
+
entityId: c.id,
|
376
390
|
collection: r,
|
377
391
|
status: "new"
|
378
|
-
}))).then(() =>
|
392
|
+
}))).then(() => n + i < t.length ? (s(n + i), Se(e, r, a, t, n + i, i, s)) : (s(t.length), Promise.resolve()));
|
379
393
|
}
|
380
|
-
function
|
394
|
+
function dt({
|
381
395
|
collection: e,
|
382
396
|
path: r,
|
383
|
-
collectionEntitiesCount:
|
397
|
+
collectionEntitiesCount: a,
|
398
|
+
onAnalyticsEvent: t
|
384
399
|
}) {
|
385
|
-
const
|
386
|
-
|
387
|
-
}, [
|
388
|
-
|
389
|
-
}, [
|
390
|
-
|
391
|
-
}, []),
|
392
|
-
|
393
|
-
}, []),
|
394
|
-
if (
|
395
|
-
const
|
396
|
-
|
397
|
-
const
|
398
|
-
|
399
|
-
const
|
400
|
-
|
401
|
-
const w = A;
|
402
|
-
c.setIdColumn(w);
|
403
|
-
}
|
400
|
+
const n = X(), i = pe(), [s, d] = C.useState(!1), [c, l] = C.useState("initial"), p = et(), m = b(() => {
|
401
|
+
d(!0), l("initial");
|
402
|
+
}, [d]), h = b(() => {
|
403
|
+
d(!1);
|
404
|
+
}, [d]), g = b(() => {
|
405
|
+
l("preview");
|
406
|
+
}, []), I = b(() => {
|
407
|
+
l("import_data_saving");
|
408
|
+
}, []), A = async (y) => {
|
409
|
+
if (p.setImportData(y), y.length > 0) {
|
410
|
+
const T = await Ke(y, at);
|
411
|
+
p.setOriginProperties(T);
|
412
|
+
const L = Ne(y, e?.properties);
|
413
|
+
p.setHeadersMapping(L);
|
414
|
+
const w = Object.keys(L)?.[0];
|
415
|
+
(w?.includes("id") || w?.includes("key")) && p.setIdColumn(w);
|
404
416
|
}
|
405
417
|
setTimeout(() => {
|
406
|
-
|
418
|
+
l("mapping");
|
407
419
|
}, 100);
|
408
|
-
},
|
420
|
+
}, $ = he({
|
409
421
|
collection: e,
|
410
422
|
path: r,
|
411
|
-
fields:
|
412
|
-
}),
|
413
|
-
return e.collectionGroup ? null : /* @__PURE__ */
|
414
|
-
/* @__PURE__ */
|
415
|
-
/* @__PURE__ */
|
416
|
-
|
423
|
+
fields: n.propertyConfigs
|
424
|
+
}), x = je($.properties, $.propertiesOrder), U = Object.entries(x).flatMap(([y, T]) => De(y, T, 0)), R = $.propertiesOrder ?? Object.keys($.properties);
|
425
|
+
return e.collectionGroup ? null : /* @__PURE__ */ f(M, { children: [
|
426
|
+
/* @__PURE__ */ o(te, { title: "Import", children: /* @__PURE__ */ o(ee, { color: "primary", onClick: m, children: /* @__PURE__ */ o(Xe, {}) }) }),
|
427
|
+
/* @__PURE__ */ f(
|
428
|
+
be,
|
417
429
|
{
|
418
|
-
open:
|
419
|
-
fullWidth:
|
420
|
-
fullHeight:
|
421
|
-
maxWidth:
|
430
|
+
open: s,
|
431
|
+
fullWidth: c === "preview",
|
432
|
+
fullHeight: c === "preview",
|
433
|
+
maxWidth: c === "initial" ? "lg" : "7xl",
|
422
434
|
children: [
|
423
|
-
/* @__PURE__ */
|
424
|
-
|
425
|
-
/* @__PURE__ */
|
426
|
-
/* @__PURE__ */
|
427
|
-
/* @__PURE__ */
|
435
|
+
/* @__PURE__ */ f(xe, { className: "flex flex-col gap-4 my-4", fullHeight: c === "preview", children: [
|
436
|
+
c === "initial" && /* @__PURE__ */ f(M, { children: [
|
437
|
+
/* @__PURE__ */ o(u, { variant: "h6", children: "Import data" }),
|
438
|
+
/* @__PURE__ */ o(u, { variant: "body2", children: "Upload a CSV, Excel or JSON file and map it to your existing schema" }),
|
439
|
+
/* @__PURE__ */ o(lt, { onDataAdded: A })
|
428
440
|
] }),
|
429
|
-
|
430
|
-
/* @__PURE__ */
|
431
|
-
/* @__PURE__ */
|
432
|
-
|
441
|
+
c === "mapping" && /* @__PURE__ */ f(M, { children: [
|
442
|
+
/* @__PURE__ */ o(u, { variant: "h6", children: "Map fields" }),
|
443
|
+
/* @__PURE__ */ o(
|
444
|
+
ot,
|
433
445
|
{
|
434
|
-
headersMapping:
|
435
|
-
idColumn:
|
436
|
-
originProperties:
|
437
|
-
destinationProperties:
|
438
|
-
onIdPropertyChanged: (
|
446
|
+
headersMapping: p.headersMapping,
|
447
|
+
idColumn: p.idColumn,
|
448
|
+
originProperties: p.originProperties,
|
449
|
+
destinationProperties: x,
|
450
|
+
onIdPropertyChanged: (y) => p.setIdColumn(y ?? void 0),
|
439
451
|
buildPropertyView: ({
|
440
|
-
isIdColumn:
|
441
|
-
property:
|
442
|
-
propertyKey:
|
443
|
-
importKey:
|
444
|
-
}) => /* @__PURE__ */
|
445
|
-
|
452
|
+
isIdColumn: y,
|
453
|
+
property: T,
|
454
|
+
propertyKey: L,
|
455
|
+
importKey: w
|
456
|
+
}) => /* @__PURE__ */ o(
|
457
|
+
pt,
|
446
458
|
{
|
447
|
-
selectedPropertyKey:
|
448
|
-
properties:
|
449
|
-
propertiesAndLevel:
|
450
|
-
isIdColumn:
|
459
|
+
selectedPropertyKey: L ?? "",
|
460
|
+
properties: x,
|
461
|
+
propertiesAndLevel: U,
|
462
|
+
isIdColumn: y,
|
451
463
|
onIdSelected: () => {
|
452
|
-
|
464
|
+
p.setIdColumn(w);
|
453
465
|
},
|
454
|
-
onPropertySelected: (
|
455
|
-
const
|
456
|
-
|
466
|
+
onPropertySelected: (B) => {
|
467
|
+
const j = Object.entries(p.headersMapping).map(([S, D]) => D === B ? { [S]: null } : S === w ? { [S]: B } : { [S]: D }).reduce((S, D) => ({ ...S, ...D }), {});
|
468
|
+
p.setHeadersMapping(j), B === p.idColumn && p.setIdColumn(void 0);
|
457
469
|
}
|
458
470
|
}
|
459
471
|
)
|
460
472
|
}
|
461
473
|
)
|
462
474
|
] }),
|
463
|
-
|
464
|
-
|
475
|
+
c === "preview" && /* @__PURE__ */ o(
|
476
|
+
ft,
|
465
477
|
{
|
466
|
-
importConfig:
|
467
|
-
properties:
|
468
|
-
propertiesOrder:
|
478
|
+
importConfig: p,
|
479
|
+
properties: x,
|
480
|
+
propertiesOrder: R
|
469
481
|
}
|
470
482
|
),
|
471
|
-
|
472
|
-
|
483
|
+
c === "import_data_saving" && p && /* @__PURE__ */ o(
|
484
|
+
ct,
|
473
485
|
{
|
474
|
-
importConfig:
|
486
|
+
importConfig: p,
|
475
487
|
collection: e,
|
476
488
|
path: r,
|
477
|
-
onImportSuccess: (
|
478
|
-
|
489
|
+
onImportSuccess: (y) => {
|
490
|
+
h(), i.open({
|
479
491
|
type: "info",
|
480
492
|
message: "Data imported successfully"
|
481
493
|
});
|
@@ -483,44 +495,44 @@ function ct({
|
|
483
495
|
}
|
484
496
|
)
|
485
497
|
] }),
|
486
|
-
/* @__PURE__ */
|
487
|
-
|
488
|
-
|
498
|
+
/* @__PURE__ */ f(ve, { children: [
|
499
|
+
c === "mapping" && /* @__PURE__ */ o(
|
500
|
+
E,
|
489
501
|
{
|
490
|
-
onClick: () =>
|
502
|
+
onClick: () => l("initial"),
|
491
503
|
variant: "text",
|
492
504
|
children: "Back"
|
493
505
|
}
|
494
506
|
),
|
495
|
-
|
496
|
-
|
507
|
+
c === "preview" && /* @__PURE__ */ o(
|
508
|
+
E,
|
497
509
|
{
|
498
|
-
onClick: () =>
|
510
|
+
onClick: () => l("mapping"),
|
499
511
|
variant: "text",
|
500
512
|
children: "Back"
|
501
513
|
}
|
502
514
|
),
|
503
|
-
/* @__PURE__ */
|
504
|
-
|
515
|
+
/* @__PURE__ */ o(
|
516
|
+
E,
|
505
517
|
{
|
506
|
-
onClick:
|
518
|
+
onClick: h,
|
507
519
|
variant: "text",
|
508
520
|
children: "Cancel"
|
509
521
|
}
|
510
522
|
),
|
511
|
-
|
512
|
-
|
523
|
+
c === "mapping" && /* @__PURE__ */ o(
|
524
|
+
E,
|
513
525
|
{
|
514
526
|
variant: "filled",
|
515
|
-
onClick:
|
527
|
+
onClick: g,
|
516
528
|
children: "Next"
|
517
529
|
}
|
518
530
|
),
|
519
|
-
|
520
|
-
|
531
|
+
c === "preview" && /* @__PURE__ */ o(
|
532
|
+
E,
|
521
533
|
{
|
522
534
|
variant: "filled",
|
523
|
-
onClick:
|
535
|
+
onClick: I,
|
524
536
|
children: "Save data"
|
525
537
|
}
|
526
538
|
)
|
@@ -530,48 +542,48 @@ function ct({
|
|
530
542
|
)
|
531
543
|
] });
|
532
544
|
}
|
533
|
-
const
|
534
|
-
function
|
545
|
+
const V = "__internal_id__";
|
546
|
+
function pt({
|
535
547
|
selectedPropertyKey: e,
|
536
548
|
properties: r,
|
537
|
-
onPropertySelected:
|
549
|
+
onPropertySelected: a,
|
538
550
|
onIdSelected: t,
|
539
|
-
propertiesAndLevel:
|
551
|
+
propertiesAndLevel: n,
|
540
552
|
isIdColumn: i
|
541
553
|
}) {
|
542
|
-
const
|
554
|
+
const s = e ? _(r, e) : null, d = b((l) => l === V ? /* @__PURE__ */ o(u, { variant: "body2", className: "p-4", children: "Use this column as ID" }) : !l || !s ? /* @__PURE__ */ o(u, { variant: "body2", className: "p-4", children: "Do not import this property" }) : /* @__PURE__ */ o(
|
543
555
|
se,
|
544
556
|
{
|
545
|
-
propertyKey:
|
546
|
-
property:
|
557
|
+
propertyKey: l,
|
558
|
+
property: s
|
547
559
|
}
|
548
|
-
), [
|
549
|
-
|
560
|
+
), [s]), c = b((l) => {
|
561
|
+
l === V ? (t(), a(null)) : a(l === "__do_not_import" ? null : l);
|
550
562
|
}, []);
|
551
|
-
return /* @__PURE__ */
|
552
|
-
|
563
|
+
return /* @__PURE__ */ f(
|
564
|
+
ge,
|
553
565
|
{
|
554
|
-
value: i ?
|
555
|
-
onValueChange:
|
556
|
-
renderValue:
|
566
|
+
value: i ? V : e ?? void 0,
|
567
|
+
onValueChange: c,
|
568
|
+
renderValue: d,
|
557
569
|
children: [
|
558
|
-
/* @__PURE__ */
|
559
|
-
/* @__PURE__ */
|
560
|
-
|
561
|
-
property:
|
562
|
-
level:
|
570
|
+
/* @__PURE__ */ o(H, { value: "__do_not_import", children: /* @__PURE__ */ o(u, { variant: "body2", className: "p-4", children: "Do not import this property" }) }),
|
571
|
+
/* @__PURE__ */ o(H, { value: V, children: /* @__PURE__ */ o(u, { variant: "body2", className: "p-4", children: "Use this column as ID" }) }),
|
572
|
+
n.map(({
|
573
|
+
property: l,
|
574
|
+
level: p,
|
563
575
|
propertyKey: m
|
564
|
-
}) => /* @__PURE__ */
|
565
|
-
|
576
|
+
}) => /* @__PURE__ */ o(
|
577
|
+
H,
|
566
578
|
{
|
567
579
|
value: m,
|
568
|
-
disabled:
|
569
|
-
children: /* @__PURE__ */
|
580
|
+
disabled: l.dataType === "map",
|
581
|
+
children: /* @__PURE__ */ o(
|
570
582
|
se,
|
571
583
|
{
|
572
584
|
propertyKey: m,
|
573
|
-
property:
|
574
|
-
level:
|
585
|
+
property: l,
|
586
|
+
level: p
|
575
587
|
}
|
576
588
|
)
|
577
589
|
},
|
@@ -581,31 +593,31 @@ function dt({
|
|
581
593
|
}
|
582
594
|
);
|
583
595
|
}
|
584
|
-
function De(e, r,
|
596
|
+
function De(e, r, a) {
|
585
597
|
const t = [];
|
586
598
|
return t.push({
|
587
599
|
property: r,
|
588
|
-
level:
|
600
|
+
level: a,
|
589
601
|
propertyKey: e
|
590
|
-
}), r.dataType === "map" && r.properties && Object.entries(r.properties).forEach(([
|
591
|
-
t.push(...De(`${e}.${
|
602
|
+
}), r.dataType === "map" && r.properties && Object.entries(r.properties).forEach(([n, i]) => {
|
603
|
+
t.push(...De(`${e}.${n}`, i, a + 1));
|
592
604
|
}), t;
|
593
605
|
}
|
594
606
|
function se({
|
595
607
|
propertyKey: e,
|
596
608
|
property: r,
|
597
|
-
level:
|
609
|
+
level: a = 0
|
598
610
|
}) {
|
599
|
-
const { propertyConfigs: t } =
|
600
|
-
return /* @__PURE__ */
|
611
|
+
const { propertyConfigs: t } = X(), n = fe(r, t);
|
612
|
+
return /* @__PURE__ */ f(
|
601
613
|
"div",
|
602
614
|
{
|
603
615
|
className: "flex flex-row w-full text-start items-center h-full",
|
604
616
|
children: [
|
605
|
-
new Array(
|
606
|
-
/* @__PURE__ */
|
607
|
-
/* @__PURE__ */
|
608
|
-
/* @__PURE__ */
|
617
|
+
new Array(a).fill(0).map((i, s) => /* @__PURE__ */ o("div", { className: J(qe, "ml-8 border-l h-12") }, s)),
|
618
|
+
/* @__PURE__ */ o("div", { className: "m-4", children: /* @__PURE__ */ o(te, { title: n?.name, children: /* @__PURE__ */ o(me, { propertyConfig: n }) }) }),
|
619
|
+
/* @__PURE__ */ f("div", { className: "flex flex-col flex-grow p-2 pl-2", children: [
|
620
|
+
/* @__PURE__ */ o(
|
609
621
|
u,
|
610
622
|
{
|
611
623
|
variant: "body1",
|
@@ -614,7 +626,7 @@ function se({
|
|
614
626
|
children: r.name ? r.name : " "
|
615
627
|
}
|
616
628
|
),
|
617
|
-
/* @__PURE__ */
|
629
|
+
/* @__PURE__ */ o(
|
618
630
|
u,
|
619
631
|
{
|
620
632
|
className: " pr-2",
|
@@ -629,284 +641,295 @@ function se({
|
|
629
641
|
}
|
630
642
|
);
|
631
643
|
}
|
632
|
-
function
|
644
|
+
function ft({
|
633
645
|
importConfig: e,
|
634
646
|
properties: r,
|
635
|
-
propertiesOrder:
|
647
|
+
propertiesOrder: a
|
636
648
|
}) {
|
637
|
-
|
638
|
-
const
|
649
|
+
de(() => {
|
650
|
+
const n = it(e.originProperties, r), i = e.importData.map((s) => nt(s, e.idColumn, e.headersMapping, r, n, "TEMP_PATH"));
|
639
651
|
e.setEntities(i);
|
640
652
|
}, []);
|
641
|
-
const t =
|
642
|
-
return /* @__PURE__ */
|
643
|
-
|
653
|
+
const t = Fe();
|
654
|
+
return /* @__PURE__ */ o(
|
655
|
+
Pe,
|
644
656
|
{
|
645
|
-
title: /* @__PURE__ */
|
646
|
-
/* @__PURE__ */
|
647
|
-
/* @__PURE__ */
|
657
|
+
title: /* @__PURE__ */ f("div", { children: [
|
658
|
+
/* @__PURE__ */ o(u, { variant: "subtitle2", children: "Imported data preview" }),
|
659
|
+
/* @__PURE__ */ o(u, { variant: "caption", children: "Entities with the same id will be overwritten" })
|
648
660
|
] }),
|
649
661
|
tableController: {
|
650
662
|
data: e.entities,
|
651
663
|
dataLoading: !1,
|
652
664
|
noMoreToLoad: !1
|
653
665
|
},
|
654
|
-
endAdornment: /* @__PURE__ */
|
666
|
+
endAdornment: /* @__PURE__ */ o("div", { className: "h-12" }),
|
655
667
|
filterable: !1,
|
656
668
|
sortable: !1,
|
657
669
|
selectionController: t,
|
658
|
-
displayedColumnIds:
|
659
|
-
key:
|
670
|
+
displayedColumnIds: a.map((n) => ({
|
671
|
+
key: n,
|
660
672
|
disabled: !1
|
661
673
|
})),
|
662
674
|
properties: r
|
663
675
|
}
|
664
676
|
);
|
665
677
|
}
|
666
|
-
function
|
667
|
-
const
|
668
|
-
return e.filter(Boolean).forEach((
|
669
|
-
Object.keys(
|
670
|
-
const
|
671
|
-
typeof
|
672
|
-
r[
|
673
|
-
|
678
|
+
function Ne(e, r) {
|
679
|
+
const a = {};
|
680
|
+
return e.filter(Boolean).forEach((t) => {
|
681
|
+
Object.keys(t).forEach((n) => {
|
682
|
+
const i = t[n];
|
683
|
+
if (typeof i == "object" && !Array.isArray(i)) {
|
684
|
+
const s = r?.[n], d = s && "properties" in s ? s.properties : void 0, c = Ne([i], d);
|
685
|
+
Object.entries(c).forEach(([l, p]) => {
|
686
|
+
a[`${n}.${l}`] = `${n}.${p}`;
|
687
|
+
});
|
688
|
+
}
|
689
|
+
if (!r)
|
690
|
+
a[n] = n;
|
691
|
+
else if (n in r)
|
692
|
+
a[n] = n;
|
693
|
+
else {
|
694
|
+
const s = ke(n);
|
695
|
+
s in r ? a[n] = s : a[n] = n;
|
696
|
+
}
|
674
697
|
});
|
675
|
-
}),
|
698
|
+
}), a;
|
676
699
|
}
|
677
|
-
function
|
678
|
-
console.debug("Downloading export", { dataLength: e.length, collection:
|
679
|
-
const
|
700
|
+
function mt(e, r, a, t, n, i, s) {
|
701
|
+
console.debug("Downloading export", { dataLength: e.length, collection: a, exportType: i, dateExportType: s });
|
702
|
+
const d = a.properties;
|
680
703
|
if (i === "csv") {
|
681
|
-
const
|
682
|
-
|
704
|
+
const c = t ? Me(e.map((g) => g.values)) : {}, l = gt(d, n, c), p = ut(e, r, d, l, s), m = le(l.map((g) => g.label)), h = p.map((g) => le(g));
|
705
|
+
ce([m, ...h], `${a.name}.csv`, "text/csv");
|
683
706
|
} else {
|
684
|
-
const
|
685
|
-
|
707
|
+
const c = ht(e, r, d, s), l = JSON.stringify(c, null, 2);
|
708
|
+
ce([l], `${a.name}.json`, "application/json");
|
686
709
|
}
|
687
710
|
}
|
688
|
-
function
|
689
|
-
const i = e.map((
|
690
|
-
id:
|
691
|
-
...re(
|
711
|
+
function ut(e, r, a, t, n) {
|
712
|
+
const i = e.map((s) => ({
|
713
|
+
id: s.id,
|
714
|
+
...re(s.values, a, "csv", n)
|
692
715
|
}));
|
693
|
-
return r && r.forEach((
|
694
|
-
i[
|
695
|
-
}), i && i.map((
|
716
|
+
return r && r.forEach((s, d) => {
|
717
|
+
i[d] = { ...i[d], ...s };
|
718
|
+
}), i && i.map((s) => t.map((d) => _e(s, d.key)));
|
696
719
|
}
|
697
|
-
function
|
698
|
-
const
|
720
|
+
function ht(e, r, a, t) {
|
721
|
+
const n = e.map((i) => ({
|
699
722
|
id: i.id,
|
700
|
-
...re(i.values,
|
723
|
+
...re(i.values, a, "json", t)
|
701
724
|
}));
|
702
|
-
return r && r.forEach((i,
|
703
|
-
|
704
|
-
}),
|
725
|
+
return r && r.forEach((i, s) => {
|
726
|
+
n[s] = { ...n[s], ...i };
|
727
|
+
}), n;
|
705
728
|
}
|
706
|
-
function
|
729
|
+
function gt(e, r, a) {
|
707
730
|
const t = [
|
708
731
|
{ label: "id", key: "id" },
|
709
|
-
...Object.entries(e).flatMap(([
|
710
|
-
{ length: n
|
711
|
-
(
|
712
|
-
).flat() : K(i,
|
732
|
+
...Object.entries(e).flatMap(([n, i]) => a && a[n] > 1 ? Array.from(
|
733
|
+
{ length: a[n] },
|
734
|
+
(s, d) => K(i, `${n}[${d}]`, "")
|
735
|
+
).flat() : K(i, n, ""))
|
713
736
|
];
|
714
|
-
return r && t.push(...r.map((
|
737
|
+
return r && t.push(...r.map((n) => ({ label: n, key: n }))), t;
|
715
738
|
}
|
716
|
-
function K(e, r,
|
717
|
-
const t =
|
718
|
-
return e.dataType === "map" && e.properties ? Object.entries(e.properties).map(([
|
739
|
+
function K(e, r, a = "") {
|
740
|
+
const t = a ? `${a}.${r}` : r;
|
741
|
+
return e.dataType === "map" && e.properties ? Object.entries(e.properties).map(([n, i]) => K(i, n, t)).flat() : [{ label: t, key: t }];
|
719
742
|
}
|
720
|
-
function
|
721
|
-
let
|
743
|
+
function G(e, r, a, t) {
|
744
|
+
let n;
|
722
745
|
if (r.dataType === "map" && r.properties)
|
723
|
-
|
746
|
+
n = re(e, r.properties, a, t);
|
724
747
|
else if (r.dataType === "array")
|
725
|
-
r.of && Array.isArray(e) ? Array.isArray(r.of) ?
|
726
|
-
else if (r.dataType === "reference" && e.isEntityReference && e.isEntityReference()) {
|
748
|
+
r.of && Array.isArray(e) ? Array.isArray(r.of) ? n = r.of.map((i, s) => G(e[s], i, a, t)) : r.of.dataType === "map" ? n = a === "csv" ? e.map((i) => JSON.stringify(i)) : e.map((i) => G(i, r.of, a, t)) : n = e.map((i) => G(i, r.of, a, t)) : n = e;
|
749
|
+
else if (r.dataType === "reference" && e && e.isEntityReference && e.isEntityReference()) {
|
727
750
|
const i = e || void 0;
|
728
|
-
|
751
|
+
n = i ? i.pathWithId : null;
|
729
752
|
} else
|
730
|
-
r.dataType === "date" && e instanceof Date ?
|
731
|
-
return
|
753
|
+
r.dataType === "date" && e instanceof Date ? n = e ? t === "timestamp" ? e.getTime() : e.toISOString() : null : n = e;
|
754
|
+
return n;
|
732
755
|
}
|
733
|
-
function re(e, r,
|
734
|
-
const
|
735
|
-
const
|
736
|
-
return
|
737
|
-
}).reduce((i,
|
738
|
-
return { ...e, ...
|
756
|
+
function re(e, r, a, t) {
|
757
|
+
const n = Object.entries(r).map(([i, s]) => {
|
758
|
+
const d = e && e[i], c = G(d, s, a, t);
|
759
|
+
return c === void 0 ? {} : { [i]: c };
|
760
|
+
}).reduce((i, s) => ({ ...i, ...s }), {});
|
761
|
+
return { ...e, ...n };
|
739
762
|
}
|
740
|
-
function
|
763
|
+
function le(e) {
|
741
764
|
return e.map((r) => r == null ? "" : Array.isArray(r) ? '"' + JSON.stringify(r).replaceAll('"', '\\"') + '"' : '"' + String(r).replaceAll('"', '""') + '"').join(",") + `\r
|
742
765
|
`;
|
743
766
|
}
|
744
|
-
function
|
745
|
-
const t = new Blob(e, { type:
|
746
|
-
i.href =
|
767
|
+
function ce(e, r, a) {
|
768
|
+
const t = new Blob(e, { type: a }), n = URL.createObjectURL(t), i = document.createElement("a");
|
769
|
+
i.href = n, i.setAttribute("download", r), i.click();
|
747
770
|
}
|
748
|
-
const
|
749
|
-
function
|
771
|
+
const yt = 500;
|
772
|
+
function bt({
|
750
773
|
collection: e,
|
751
774
|
path: r,
|
752
|
-
collectionEntitiesCount:
|
775
|
+
collectionEntitiesCount: a,
|
753
776
|
exportAllowed: t,
|
754
|
-
notAllowedView:
|
777
|
+
notAllowedView: n
|
755
778
|
}) {
|
756
|
-
const i =
|
757
|
-
collectionEntitiesCount:
|
758
|
-
path:
|
779
|
+
const i = X(), s = typeof e.exportable == "object" ? e.exportable : void 0, d = C.useRef(/* @__PURE__ */ new Date()), [c, l] = C.useState(!0), [p, m] = C.useState("csv"), [h, g] = C.useState("string"), I = $e(), A = ue(), x = Re().resolveAliasesFrom(r), U = !t || t({
|
780
|
+
collectionEntitiesCount: a,
|
781
|
+
path: x,
|
759
782
|
collection: e
|
760
|
-
}),
|
783
|
+
}), R = C.useMemo(() => he({
|
761
784
|
collection: e,
|
762
|
-
path:
|
785
|
+
path: x,
|
763
786
|
fields: i.propertyConfigs
|
764
|
-
}), [e,
|
765
|
-
|
766
|
-
}, [
|
767
|
-
|
768
|
-
}, [
|
769
|
-
const
|
787
|
+
}), [e, x]), [y, T] = C.useState(!1), [L, w] = C.useState(), [B, j] = C.useState(!1), S = b(() => {
|
788
|
+
j(!0);
|
789
|
+
}, [j]), D = b(() => {
|
790
|
+
j(!1);
|
791
|
+
}, [j]), ne = b(async (P) => {
|
792
|
+
const W = s?.additionalFields, N = R.additionalFields, q = W ? await Promise.all(P.map(async (F) => (await Promise.all(W.map(async (v) => ({
|
770
793
|
[v.key]: await v.builder({
|
771
|
-
entity:
|
772
|
-
context:
|
794
|
+
entity: F,
|
795
|
+
context: I
|
773
796
|
})
|
774
|
-
})))).reduce((v, Y) => ({ ...v, ...Y }), {}))) : [], Q =
|
797
|
+
})))).reduce((v, Y) => ({ ...v, ...Y }), {}))) : [], Q = N ? await Promise.all(P.map(async (F) => (await Promise.all(N.map(async (v) => v.value ? {
|
775
798
|
[v.key]: await v.value({
|
776
|
-
entity:
|
777
|
-
context:
|
799
|
+
entity: F,
|
800
|
+
context: I
|
778
801
|
})
|
779
802
|
} : {}))).reduce((v, Y) => ({ ...v, ...Y }), {}))) : [];
|
780
803
|
return [...q, ...Q];
|
781
|
-
}, [
|
782
|
-
|
783
|
-
path:
|
804
|
+
}, [s?.additionalFields]), ae = b(async (P, W) => {
|
805
|
+
T(!0), A.fetchCollection({
|
806
|
+
path: x,
|
784
807
|
collection: P
|
785
|
-
}).then(async (
|
808
|
+
}).then(async (N) => {
|
786
809
|
w(void 0);
|
787
|
-
const q = await ne(
|
788
|
-
...
|
789
|
-
...P.additionalFields?.map((
|
810
|
+
const q = await ne(N), Q = [
|
811
|
+
...W?.additionalFields?.map((F) => F.key) ?? [],
|
812
|
+
...P.additionalFields?.map((F) => F.key) ?? []
|
790
813
|
];
|
791
|
-
|
792
|
-
}).catch((
|
793
|
-
console.error("Error loading export data",
|
794
|
-
}).finally(() =>
|
795
|
-
}, [
|
796
|
-
ae(
|
797
|
-
}, [ae,
|
798
|
-
return /* @__PURE__ */
|
799
|
-
/* @__PURE__ */
|
800
|
-
/* @__PURE__ */
|
801
|
-
|
814
|
+
mt(N, q, P, c, Q, p, h);
|
815
|
+
}).catch((N) => {
|
816
|
+
console.error("Error loading export data", N), w(N);
|
817
|
+
}).finally(() => T(!1));
|
818
|
+
}, [A, x, ne, c, p, h]), Oe = b(() => {
|
819
|
+
ae(R, s), D();
|
820
|
+
}, [ae, R, s, D]);
|
821
|
+
return /* @__PURE__ */ f(M, { children: [
|
822
|
+
/* @__PURE__ */ o(te, { title: "Export", children: /* @__PURE__ */ o(ee, { color: "primary", onClick: S, children: /* @__PURE__ */ o(Qe, {}) }) }),
|
823
|
+
/* @__PURE__ */ f(
|
824
|
+
be,
|
802
825
|
{
|
803
|
-
open:
|
804
|
-
onOpenChange:
|
826
|
+
open: B,
|
827
|
+
onOpenChange: j,
|
805
828
|
maxWidth: "xl",
|
806
829
|
children: [
|
807
|
-
/* @__PURE__ */
|
808
|
-
/* @__PURE__ */
|
809
|
-
/* @__PURE__ */
|
810
|
-
|
830
|
+
/* @__PURE__ */ f(xe, { className: "flex flex-col gap-4 my-4", children: [
|
831
|
+
/* @__PURE__ */ o(u, { variant: "h6", children: "Export data" }),
|
832
|
+
/* @__PURE__ */ o("div", { children: "Download the the content of this table as a CSV" }),
|
833
|
+
a > yt && /* @__PURE__ */ o(Ye, { color: "warning", children: /* @__PURE__ */ f("div", { children: [
|
811
834
|
"This collections has a large number of documents (",
|
812
|
-
|
835
|
+
a,
|
813
836
|
")."
|
814
837
|
] }) }),
|
815
|
-
/* @__PURE__ */
|
816
|
-
/* @__PURE__ */
|
817
|
-
/* @__PURE__ */
|
818
|
-
/* @__PURE__ */
|
838
|
+
/* @__PURE__ */ f("div", { className: "flex flex-row gap-4", children: [
|
839
|
+
/* @__PURE__ */ f("div", { className: "p-4 flex flex-col", children: [
|
840
|
+
/* @__PURE__ */ f("div", { className: "flex items-center", children: [
|
841
|
+
/* @__PURE__ */ o(
|
819
842
|
"input",
|
820
843
|
{
|
821
844
|
id: "radio-csv",
|
822
845
|
type: "radio",
|
823
846
|
value: "csv",
|
824
847
|
name: "exportType",
|
825
|
-
checked:
|
848
|
+
checked: p === "csv",
|
826
849
|
onChange: () => m("csv"),
|
827
|
-
className:
|
850
|
+
className: J(z, "w-4 text-primary-dark bg-gray-100 border-gray-300 dark:bg-gray-700 dark:border-gray-600")
|
828
851
|
}
|
829
852
|
),
|
830
|
-
/* @__PURE__ */
|
853
|
+
/* @__PURE__ */ o(
|
831
854
|
"label",
|
832
855
|
{
|
833
856
|
htmlFor: "radio-csv",
|
834
|
-
className: "p-2 text-sm font-medium text-gray-900 dark:text-
|
857
|
+
className: "p-2 text-sm font-medium text-gray-900 dark:text-slate-300",
|
835
858
|
children: "CSV"
|
836
859
|
}
|
837
860
|
)
|
838
861
|
] }),
|
839
|
-
/* @__PURE__ */
|
840
|
-
/* @__PURE__ */
|
862
|
+
/* @__PURE__ */ f("div", { className: "flex items-center", children: [
|
863
|
+
/* @__PURE__ */ o(
|
841
864
|
"input",
|
842
865
|
{
|
843
866
|
id: "radio-json",
|
844
867
|
type: "radio",
|
845
868
|
value: "json",
|
846
869
|
name: "exportType",
|
847
|
-
checked:
|
870
|
+
checked: p === "json",
|
848
871
|
onChange: () => m("json"),
|
849
|
-
className:
|
872
|
+
className: J(z, "w-4 text-primary-dark bg-gray-100 border-gray-300 dark:bg-gray-700 dark:border-gray-600")
|
850
873
|
}
|
851
874
|
),
|
852
|
-
/* @__PURE__ */
|
875
|
+
/* @__PURE__ */ o(
|
853
876
|
"label",
|
854
877
|
{
|
855
878
|
htmlFor: "radio-json",
|
856
|
-
className: "p-2 text-sm font-medium text-gray-900 dark:text-
|
879
|
+
className: "p-2 text-sm font-medium text-gray-900 dark:text-slate-300",
|
857
880
|
children: "JSON"
|
858
881
|
}
|
859
882
|
)
|
860
883
|
] })
|
861
884
|
] }),
|
862
|
-
/* @__PURE__ */
|
863
|
-
/* @__PURE__ */
|
864
|
-
/* @__PURE__ */
|
885
|
+
/* @__PURE__ */ f("div", { className: "p-4 flex flex-col", children: [
|
886
|
+
/* @__PURE__ */ f("div", { className: "flex items-center", children: [
|
887
|
+
/* @__PURE__ */ o(
|
865
888
|
"input",
|
866
889
|
{
|
867
890
|
id: "radio-timestamp",
|
868
891
|
type: "radio",
|
869
892
|
value: "timestamp",
|
870
893
|
name: "dateExportType",
|
871
|
-
checked:
|
872
|
-
onChange: () =>
|
873
|
-
className:
|
894
|
+
checked: h === "timestamp",
|
895
|
+
onChange: () => g("timestamp"),
|
896
|
+
className: J(z, "w-4 text-primary-dark bg-gray-100 border-gray-300 dark:bg-gray-700 dark:border-gray-600")
|
874
897
|
}
|
875
898
|
),
|
876
|
-
/* @__PURE__ */
|
899
|
+
/* @__PURE__ */ f(
|
877
900
|
"label",
|
878
901
|
{
|
879
902
|
htmlFor: "radio-timestamp",
|
880
|
-
className: "p-2 text-sm font-medium text-gray-900 dark:text-
|
903
|
+
className: "p-2 text-sm font-medium text-gray-900 dark:text-slate-300",
|
881
904
|
children: [
|
882
905
|
"Dates as timestamps (",
|
883
|
-
|
906
|
+
d.current.getTime(),
|
884
907
|
")"
|
885
908
|
]
|
886
909
|
}
|
887
910
|
)
|
888
911
|
] }),
|
889
|
-
/* @__PURE__ */
|
890
|
-
/* @__PURE__ */
|
912
|
+
/* @__PURE__ */ f("div", { className: "flex items-center", children: [
|
913
|
+
/* @__PURE__ */ o(
|
891
914
|
"input",
|
892
915
|
{
|
893
916
|
id: "radio-string",
|
894
917
|
type: "radio",
|
895
918
|
value: "string",
|
896
919
|
name: "dateExportType",
|
897
|
-
checked:
|
898
|
-
onChange: () =>
|
899
|
-
className:
|
920
|
+
checked: h === "string",
|
921
|
+
onChange: () => g("string"),
|
922
|
+
className: J(z, "w-4 text-primary-dark bg-gray-100 border-gray-300 dark:bg-gray-700 dark:border-gray-600")
|
900
923
|
}
|
901
924
|
),
|
902
|
-
/* @__PURE__ */
|
925
|
+
/* @__PURE__ */ f(
|
903
926
|
"label",
|
904
927
|
{
|
905
928
|
htmlFor: "radio-string",
|
906
|
-
className: "p-2 text-sm font-medium text-gray-900 dark:text-
|
929
|
+
className: "p-2 text-sm font-medium text-gray-900 dark:text-slate-300",
|
907
930
|
children: [
|
908
931
|
"Dates as strings (",
|
909
|
-
|
932
|
+
d.current.toISOString(),
|
910
933
|
")"
|
911
934
|
]
|
912
935
|
}
|
@@ -914,34 +937,34 @@ function yt({
|
|
914
937
|
] })
|
915
938
|
] })
|
916
939
|
] }),
|
917
|
-
/* @__PURE__ */
|
918
|
-
|
940
|
+
/* @__PURE__ */ o(
|
941
|
+
Ze,
|
919
942
|
{
|
920
943
|
size: "small",
|
921
|
-
disabled:
|
922
|
-
value:
|
923
|
-
onValueChange:
|
944
|
+
disabled: p !== "csv",
|
945
|
+
value: c,
|
946
|
+
onValueChange: l,
|
924
947
|
label: "Flatten arrays"
|
925
948
|
}
|
926
949
|
),
|
927
|
-
!
|
950
|
+
!U && n
|
928
951
|
] }),
|
929
|
-
/* @__PURE__ */
|
930
|
-
|
931
|
-
/* @__PURE__ */
|
932
|
-
|
952
|
+
/* @__PURE__ */ f(ve, { children: [
|
953
|
+
y && /* @__PURE__ */ o(ye, { size: "small" }),
|
954
|
+
/* @__PURE__ */ o(
|
955
|
+
E,
|
933
956
|
{
|
934
|
-
onClick:
|
957
|
+
onClick: D,
|
935
958
|
variant: "text",
|
936
959
|
children: "Cancel"
|
937
960
|
}
|
938
961
|
),
|
939
|
-
/* @__PURE__ */
|
940
|
-
|
962
|
+
/* @__PURE__ */ o(
|
963
|
+
E,
|
941
964
|
{
|
942
965
|
variant: "filled",
|
943
|
-
onClick:
|
944
|
-
disabled:
|
966
|
+
onClick: Oe,
|
967
|
+
disabled: y || !U,
|
945
968
|
children: "Download"
|
946
969
|
}
|
947
970
|
)
|
@@ -951,28 +974,28 @@ function yt({
|
|
951
974
|
)
|
952
975
|
] });
|
953
976
|
}
|
954
|
-
function
|
977
|
+
function Nt(e) {
|
955
978
|
return Ie(() => ({
|
956
979
|
name: "Import/Export",
|
957
|
-
|
958
|
-
CollectionActions: [
|
980
|
+
collectionView: {
|
981
|
+
CollectionActions: [dt, bt],
|
959
982
|
collectionActionsProps: e
|
960
983
|
}
|
961
984
|
}), [e]);
|
962
985
|
}
|
963
986
|
export {
|
964
|
-
|
965
|
-
|
987
|
+
ot as DataNewPropertiesMapping,
|
988
|
+
lt as ImportFileUpload,
|
966
989
|
Dt as ImportNewPropertyFieldPreview,
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
990
|
+
ct as ImportSaveInProgress,
|
991
|
+
nt as convertDataToEntity,
|
992
|
+
tt as convertFileToJson,
|
993
|
+
we as flattenEntry,
|
994
|
+
at as getInferenceType,
|
995
|
+
it as getPropertiesMapping,
|
973
996
|
Z as processValueMapping,
|
974
|
-
|
975
|
-
|
976
|
-
|
997
|
+
Ce as unflattenObject,
|
998
|
+
et as useImportConfig,
|
999
|
+
Nt as useImportExportPlugin
|
977
1000
|
};
|
978
1001
|
//# sourceMappingURL=index.es.js.map
|