@contentrail/editor 0.2.0 → 0.2.1
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 +14 -4
- package/dist/admin/collection-query.d.ts +23 -0
- package/dist/admin/collection-query.d.ts.map +1 -0
- package/dist/admin/collection-query.js +71 -0
- package/dist/admin/collection-query.js.map +1 -0
- package/dist/admin/mount.d.ts +17 -0
- package/dist/admin/mount.d.ts.map +1 -0
- package/dist/admin/mount.js +43 -0
- package/dist/admin/mount.js.map +1 -0
- package/dist/admin/paginate.d.ts +8 -0
- package/dist/admin/paginate.d.ts.map +1 -0
- package/dist/admin/paginate.js +12 -0
- package/dist/admin/paginate.js.map +1 -0
- package/dist/admin/vite-plugin.d.ts +30 -0
- package/dist/admin/vite-plugin.d.ts.map +1 -0
- package/dist/admin/vite-plugin.js +159 -0
- package/dist/admin/vite-plugin.js.map +1 -0
- package/dist/api/types.d.ts +2 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/fields/defaults.d.ts.map +1 -1
- package/dist/fields/defaults.js +22 -2
- package/dist/fields/defaults.js.map +1 -1
- package/dist/fields/types.d.ts +24 -5
- package/dist/fields/types.d.ts.map +1 -1
- package/dist/fields/types.js +3 -2
- package/dist/fields/types.js.map +1 -1
- package/dist/form/FieldControl.js +54 -4
- package/dist/form/FieldControl.js.map +1 -1
- package/dist/import/coerce.d.ts +11 -0
- package/dist/import/coerce.d.ts.map +1 -0
- package/dist/import/coerce.js +71 -0
- package/dist/import/coerce.js.map +1 -0
- package/dist/import/prepare.d.ts +30 -0
- package/dist/import/prepare.d.ts.map +1 -0
- package/dist/import/prepare.js +106 -0
- package/dist/import/prepare.js.map +1 -0
- package/dist/import/tabular.d.ts +6 -0
- package/dist/import/tabular.d.ts.map +1 -1
- package/dist/import/tabular.js +34 -7
- package/dist/import/tabular.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/schema/create-admin-config.d.ts +21 -0
- package/dist/schema/create-admin-config.d.ts.map +1 -0
- package/dist/schema/create-admin-config.js +50 -0
- package/dist/schema/create-admin-config.js.map +1 -0
- package/dist/schema/from-zod.d.ts +19 -0
- package/dist/schema/from-zod.d.ts.map +1 -0
- package/dist/schema/from-zod.js +194 -0
- package/dist/schema/from-zod.js.map +1 -0
- package/dist/styles.css +103 -7
- package/dist/ui/CollectionImportWizard.d.ts +16 -0
- package/dist/ui/CollectionImportWizard.d.ts.map +1 -0
- package/dist/ui/CollectionImportWizard.js +144 -0
- package/dist/ui/CollectionImportWizard.js.map +1 -0
- package/dist/ui/EditorApp.d.ts +3 -0
- package/dist/ui/EditorApp.d.ts.map +1 -1
- package/dist/ui/EditorApp.js +232 -35
- package/dist/ui/EditorApp.js.map +1 -1
- package/package.json +18 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-admin-config.js","sourceRoot":"","sources":["../../src/schema/create-admin-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type z } from "zod";
|
|
2
|
+
import type { ContentCollection } from "@contentrail/core";
|
|
3
|
+
import type { EditorFieldSpec, EditorWidget } from "../fields/types.js";
|
|
4
|
+
export interface FieldHint {
|
|
5
|
+
readonly label?: string;
|
|
6
|
+
readonly helpText?: string;
|
|
7
|
+
readonly widget?: EditorWidget;
|
|
8
|
+
readonly order?: number;
|
|
9
|
+
readonly readOnly?: boolean;
|
|
10
|
+
readonly placeholder?: string;
|
|
11
|
+
readonly collection?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Derives editor fields from a Zod object schema using public `.shape` and
|
|
15
|
+
* `.def.type` (ADR 026). Unions, effects, and unknown types become unsupported.
|
|
16
|
+
*/
|
|
17
|
+
export declare function fieldsFromZodSchema(schema: z.ZodType, hints?: Readonly<Record<string, FieldHint>>): EditorFieldSpec[];
|
|
18
|
+
export declare function fieldsFromCollection(collection: ContentCollection, hints?: Readonly<Record<string, FieldHint>>): EditorFieldSpec[];
|
|
19
|
+
//# sourceMappingURL=from-zod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-zod.d.ts","sourceRoot":"","sources":["../../src/schema/from-zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmBxE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AA2LD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,CAAC,CAAC,OAAO,EACjB,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAC1C,eAAe,EAAE,CAgBnB;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,iBAAiB,EAC7B,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAC1C,eAAe,EAAE,CAEnB"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { ZodObject } from "zod";
|
|
2
|
+
const MAX_DEPTH = 6;
|
|
3
|
+
function humanize(name) {
|
|
4
|
+
const spaced = name
|
|
5
|
+
.replaceAll(/([a-z])([A-Z])/g, "$1 $2")
|
|
6
|
+
.replaceAll(/[_-]+/g, " ");
|
|
7
|
+
return spaced.charAt(0).toUpperCase() + spaced.slice(1);
|
|
8
|
+
}
|
|
9
|
+
function unwrap(schema) {
|
|
10
|
+
let node = schema;
|
|
11
|
+
let required = true;
|
|
12
|
+
for (let i = 0; i < 8; i += 1) {
|
|
13
|
+
const type = node.def.type;
|
|
14
|
+
if (type === "optional" || type === "nullable") {
|
|
15
|
+
required = false;
|
|
16
|
+
if (node.def.innerType === undefined) {
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
node = node.def.innerType;
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (type === "default") {
|
|
23
|
+
if (node.def.innerType === undefined) {
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
node = node.def.innerType;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
return { node, required };
|
|
32
|
+
}
|
|
33
|
+
function stringFormat(node) {
|
|
34
|
+
if (typeof node.def.format === "string") {
|
|
35
|
+
return node.def.format;
|
|
36
|
+
}
|
|
37
|
+
for (const check of node.def.checks ?? []) {
|
|
38
|
+
if (typeof check.def?.format === "string") {
|
|
39
|
+
return check.def.format;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
function mapNode(name, schema, depth, hints) {
|
|
45
|
+
const hint = hints?.[name];
|
|
46
|
+
const { node, required } = unwrap(schema);
|
|
47
|
+
const base = {
|
|
48
|
+
name,
|
|
49
|
+
label: hint?.label ?? humanize(name),
|
|
50
|
+
required,
|
|
51
|
+
...(hint?.helpText !== undefined ? { helpText: hint.helpText } : {}),
|
|
52
|
+
...(hint?.order !== undefined ? { order: hint.order } : {}),
|
|
53
|
+
...(hint?.readOnly !== undefined ? { readOnly: hint.readOnly } : {}),
|
|
54
|
+
};
|
|
55
|
+
if (hint?.widget === "unsupported") {
|
|
56
|
+
return {
|
|
57
|
+
...base,
|
|
58
|
+
widget: "unsupported",
|
|
59
|
+
reason: hint.helpText ?? "Marked unsupported in editor metadata.",
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
if (hint?.widget === "relation") {
|
|
63
|
+
return {
|
|
64
|
+
...base,
|
|
65
|
+
widget: "relation",
|
|
66
|
+
collection: hint.collection ?? "entries",
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (hint?.widget === "media") {
|
|
70
|
+
return {
|
|
71
|
+
...base,
|
|
72
|
+
widget: "media",
|
|
73
|
+
...(hint.placeholder !== undefined
|
|
74
|
+
? { placeholder: hint.placeholder }
|
|
75
|
+
: {}),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (hint?.widget === "textarea" || hint?.widget === "text") {
|
|
79
|
+
return {
|
|
80
|
+
...base,
|
|
81
|
+
widget: hint.widget,
|
|
82
|
+
...(hint.placeholder !== undefined
|
|
83
|
+
? { placeholder: hint.placeholder }
|
|
84
|
+
: {}),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
if (depth > MAX_DEPTH) {
|
|
88
|
+
return {
|
|
89
|
+
...base,
|
|
90
|
+
widget: "unsupported",
|
|
91
|
+
reason: `Nested deeper than ${MAX_DEPTH} levels.`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const type = node.def.type;
|
|
95
|
+
if (type === "email") {
|
|
96
|
+
return { ...base, widget: "email" };
|
|
97
|
+
}
|
|
98
|
+
if (type === "url") {
|
|
99
|
+
return { ...base, widget: "url" };
|
|
100
|
+
}
|
|
101
|
+
if (type === "date") {
|
|
102
|
+
return { ...base, widget: "date" };
|
|
103
|
+
}
|
|
104
|
+
if (type === "datetime" || type === "iso_datetime") {
|
|
105
|
+
return { ...base, widget: "datetime" };
|
|
106
|
+
}
|
|
107
|
+
if (type === "string") {
|
|
108
|
+
const format = stringFormat(node);
|
|
109
|
+
if (format === "email") {
|
|
110
|
+
return { ...base, widget: "email" };
|
|
111
|
+
}
|
|
112
|
+
if (format === "url" || format === "uri") {
|
|
113
|
+
return { ...base, widget: "url" };
|
|
114
|
+
}
|
|
115
|
+
if (format === "date") {
|
|
116
|
+
return { ...base, widget: "date" };
|
|
117
|
+
}
|
|
118
|
+
if (format === "datetime") {
|
|
119
|
+
return { ...base, widget: "datetime" };
|
|
120
|
+
}
|
|
121
|
+
return { ...base, widget: "text" };
|
|
122
|
+
}
|
|
123
|
+
if (type === "number" || type === "int") {
|
|
124
|
+
return { ...base, widget: "number" };
|
|
125
|
+
}
|
|
126
|
+
if (type === "boolean") {
|
|
127
|
+
return { ...base, widget: "boolean" };
|
|
128
|
+
}
|
|
129
|
+
if (type === "enum") {
|
|
130
|
+
const entries = node.def.entries ?? {};
|
|
131
|
+
return {
|
|
132
|
+
...base,
|
|
133
|
+
widget: hint?.widget === "multiselect" ? "multiselect" : "enum",
|
|
134
|
+
options: Object.keys(entries).map((value) => ({
|
|
135
|
+
value,
|
|
136
|
+
label: humanize(value),
|
|
137
|
+
})),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
if (type === "array") {
|
|
141
|
+
const element = node.def.element;
|
|
142
|
+
if (element === undefined) {
|
|
143
|
+
return {
|
|
144
|
+
...base,
|
|
145
|
+
widget: "unsupported",
|
|
146
|
+
reason: "Array element type is missing.",
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
const unwrapped = unwrap(element).node;
|
|
150
|
+
if (unwrapped.def.type === "string" && hint?.widget !== "array") {
|
|
151
|
+
return { ...base, widget: "tags" };
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
...base,
|
|
155
|
+
widget: "array",
|
|
156
|
+
item: mapNode("item", element, depth + 1, undefined),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
if (type === "object") {
|
|
160
|
+
const shape = node.shape ?? node.def.shape ?? {};
|
|
161
|
+
return {
|
|
162
|
+
...base,
|
|
163
|
+
widget: "object",
|
|
164
|
+
fields: Object.entries(shape).map(([key, child]) => mapNode(key, child, depth + 1, undefined)),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
...base,
|
|
169
|
+
widget: "unsupported",
|
|
170
|
+
reason: `Zod type "${type}" has no editor widget. Add explicit field metadata or simplify the schema.`,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Derives editor fields from a Zod object schema using public `.shape` and
|
|
175
|
+
* `.def.type` (ADR 026). Unions, effects, and unknown types become unsupported.
|
|
176
|
+
*/
|
|
177
|
+
export function fieldsFromZodSchema(schema, hints) {
|
|
178
|
+
if (!(schema instanceof ZodObject)) {
|
|
179
|
+
return [
|
|
180
|
+
{
|
|
181
|
+
name: "value",
|
|
182
|
+
label: "Value",
|
|
183
|
+
widget: "unsupported",
|
|
184
|
+
reason: "Root schema is not a Zod object. Supply explicit editor fields or use z.object({...}).",
|
|
185
|
+
},
|
|
186
|
+
];
|
|
187
|
+
}
|
|
188
|
+
const shape = schema.shape;
|
|
189
|
+
return Object.entries(shape).map(([name, child]) => mapNode(name, child, 0, hints));
|
|
190
|
+
}
|
|
191
|
+
export function fieldsFromCollection(collection, hints) {
|
|
192
|
+
return fieldsFromZodSchema(collection.schema, hints);
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=from-zod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-zod.js","sourceRoot":"","sources":["../../src/schema/from-zod.ts"],"names":[],"mappings":"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"}
|
package/dist/styles.css
CHANGED
|
@@ -19,18 +19,83 @@
|
|
|
19
19
|
|
|
20
20
|
.cr-editor {
|
|
21
21
|
color: var(--cr-ink);
|
|
22
|
-
background:
|
|
23
|
-
radial-gradient(
|
|
24
|
-
circle at top left,
|
|
25
|
-
rgba(15, 107, 92, 0.12),
|
|
26
|
-
transparent 40%
|
|
27
|
-
),
|
|
28
|
-
linear-gradient(180deg, #efe8da 0%, var(--cr-bg) 45%, #e7efe9 100%);
|
|
22
|
+
background: #f4f5f7;
|
|
29
23
|
min-height: 100vh;
|
|
30
24
|
font-family: var(--cr-sans);
|
|
31
25
|
line-height: 1.5;
|
|
32
26
|
}
|
|
33
27
|
|
|
28
|
+
.cr-shell {
|
|
29
|
+
display: grid;
|
|
30
|
+
grid-template-columns: minmax(12rem, 16rem) minmax(0, 1fr);
|
|
31
|
+
align-items: start;
|
|
32
|
+
gap: 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.cr-shell-main {
|
|
36
|
+
min-width: 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.cr-sidebar {
|
|
40
|
+
background: var(--cr-surface);
|
|
41
|
+
border-right: 1px solid var(--cr-line);
|
|
42
|
+
min-height: calc(100vh - 5rem);
|
|
43
|
+
padding: 1.25rem 1rem;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.cr-sidebar-label {
|
|
47
|
+
margin: 0 0 0.75rem;
|
|
48
|
+
font-size: 0.75rem;
|
|
49
|
+
letter-spacing: 0.06em;
|
|
50
|
+
text-transform: uppercase;
|
|
51
|
+
color: var(--cr-muted);
|
|
52
|
+
font-weight: 700;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.cr-sidebar-list {
|
|
56
|
+
list-style: none;
|
|
57
|
+
margin: 0;
|
|
58
|
+
padding: 0;
|
|
59
|
+
display: grid;
|
|
60
|
+
gap: 0.25rem;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.cr-sidebar-link {
|
|
64
|
+
width: 100%;
|
|
65
|
+
text-align: left;
|
|
66
|
+
border: 0;
|
|
67
|
+
background: transparent;
|
|
68
|
+
border-radius: 8px;
|
|
69
|
+
padding: 0.55rem 0.7rem;
|
|
70
|
+
color: var(--cr-ink);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.cr-sidebar-link--active,
|
|
74
|
+
.cr-sidebar-link:hover {
|
|
75
|
+
background: #eef3f1;
|
|
76
|
+
color: var(--cr-accent);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.cr-pagination {
|
|
80
|
+
display: flex;
|
|
81
|
+
flex-wrap: wrap;
|
|
82
|
+
gap: 0.75rem;
|
|
83
|
+
align-items: center;
|
|
84
|
+
margin-top: 1rem;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.cr-button--danger {
|
|
88
|
+
background: var(--cr-danger);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.cr-confirm {
|
|
92
|
+
margin: 1rem 0;
|
|
93
|
+
padding: 1rem;
|
|
94
|
+
border: 1px solid #e4b4b4;
|
|
95
|
+
border-radius: 12px;
|
|
96
|
+
background: #fff8f8;
|
|
97
|
+
}
|
|
98
|
+
|
|
34
99
|
.cr-header,
|
|
35
100
|
.cr-nav,
|
|
36
101
|
.cr-main,
|
|
@@ -306,7 +371,38 @@
|
|
|
306
371
|
border: 0;
|
|
307
372
|
}
|
|
308
373
|
|
|
374
|
+
.cr-entry-row {
|
|
375
|
+
display: grid;
|
|
376
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
377
|
+
gap: 0.75rem;
|
|
378
|
+
align-items: center;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
.cr-table {
|
|
382
|
+
width: 100%;
|
|
383
|
+
border-collapse: collapse;
|
|
384
|
+
font-size: 0.92rem;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
.cr-table th,
|
|
388
|
+
.cr-table td {
|
|
389
|
+
text-align: left;
|
|
390
|
+
padding: 0.45rem 0.5rem;
|
|
391
|
+
border-bottom: 1px solid var(--cr-line);
|
|
392
|
+
vertical-align: top;
|
|
393
|
+
}
|
|
394
|
+
|
|
309
395
|
@media (max-width: 720px) {
|
|
396
|
+
.cr-shell {
|
|
397
|
+
grid-template-columns: 1fr;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.cr-sidebar {
|
|
401
|
+
min-height: 0;
|
|
402
|
+
border-right: 0;
|
|
403
|
+
border-bottom: 1px solid var(--cr-line);
|
|
404
|
+
}
|
|
405
|
+
|
|
310
406
|
.cr-toolbar,
|
|
311
407
|
.cr-actions {
|
|
312
408
|
align-items: stretch;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ContentRailApiClient } from "../api/client.js";
|
|
2
|
+
import type { EditorCollectionConfig } from "../fields/types.js";
|
|
3
|
+
export interface CollectionImportWizardProps {
|
|
4
|
+
readonly api: ContentRailApiClient;
|
|
5
|
+
readonly siteId: string;
|
|
6
|
+
readonly collection: EditorCollectionConfig;
|
|
7
|
+
readonly existing: ReadonlyArray<{
|
|
8
|
+
id: string;
|
|
9
|
+
data: Record<string, unknown>;
|
|
10
|
+
}>;
|
|
11
|
+
readonly expectedVersion: string | null;
|
|
12
|
+
readonly onCancel: () => void;
|
|
13
|
+
readonly onImported: () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function CollectionImportWizard(props: CollectionImportWizardProps): import("preact").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=CollectionImportWizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionImportWizard.d.ts","sourceRoot":"","sources":["../../src/ui/CollectionImportWizard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAUjE,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,CAAC,CAAC;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,gCA2WxE"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "preact/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from "preact/hooks";
|
|
3
|
+
import { paginateItems } from "../admin/paginate.js";
|
|
4
|
+
import { mergePreparedImport, prepareImport, suggestColumnMap, } from "../import/prepare.js";
|
|
5
|
+
import { listSpreadsheetSheets, parseTabularFile } from "../import/tabular.js";
|
|
6
|
+
export function CollectionImportWizard(props) {
|
|
7
|
+
const [step, setStep] = useState("upload");
|
|
8
|
+
const [message, setMessage] = useState(null);
|
|
9
|
+
const [busy, setBusy] = useState(false);
|
|
10
|
+
const [file, setFile] = useState(null);
|
|
11
|
+
const [sheets, setSheets] = useState([]);
|
|
12
|
+
const [sheet, setSheet] = useState("");
|
|
13
|
+
const [headers, setHeaders] = useState([]);
|
|
14
|
+
const [rows, setRows] = useState([]);
|
|
15
|
+
const [columnMap, setColumnMap] = useState({});
|
|
16
|
+
const [mode, setMode] = useState("upsert");
|
|
17
|
+
const [included, setIncluded] = useState(new Set());
|
|
18
|
+
const [page, setPage] = useState(0);
|
|
19
|
+
const [prepared, setPrepared] = useState([]);
|
|
20
|
+
const importableFields = useMemo(() => props.collection.fields.filter((field) => field.widget !== "unsupported" &&
|
|
21
|
+
field.widget !== "object" &&
|
|
22
|
+
field.widget !== "array"), [props.collection.fields]);
|
|
23
|
+
async function onFile(next) {
|
|
24
|
+
setMessage(null);
|
|
25
|
+
setFile(next);
|
|
26
|
+
setRows([]);
|
|
27
|
+
if (next === null) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const listed = await listSpreadsheetSheets(next);
|
|
31
|
+
if (!listed.ok) {
|
|
32
|
+
setMessage(listed.message);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
setSheets(listed.sheets);
|
|
36
|
+
setSheet(listed.sheets[0] ?? "");
|
|
37
|
+
setStep(listed.sheets.length > 1 ? "sheet" : "map");
|
|
38
|
+
await loadSheet(next, listed.sheets[0]);
|
|
39
|
+
}
|
|
40
|
+
async function loadSheet(target, sheetName) {
|
|
41
|
+
const parsed = await parseTabularFile(target, {
|
|
42
|
+
maxBytes: 2_000_000,
|
|
43
|
+
maxRows: 10_000,
|
|
44
|
+
...(sheetName !== undefined && sheetName !== "CSV"
|
|
45
|
+
? { sheet: sheetName }
|
|
46
|
+
: {}),
|
|
47
|
+
});
|
|
48
|
+
if (!parsed.ok) {
|
|
49
|
+
setMessage(parsed.message);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
setHeaders(parsed.headers);
|
|
53
|
+
setRows(parsed.rows);
|
|
54
|
+
setColumnMap(suggestColumnMap(parsed.headers, importableFields, "id"));
|
|
55
|
+
setStep("map");
|
|
56
|
+
}
|
|
57
|
+
function runPrepare() {
|
|
58
|
+
const next = prepareImport({
|
|
59
|
+
rows,
|
|
60
|
+
columnMap,
|
|
61
|
+
fields: importableFields,
|
|
62
|
+
existingIds: new Set(props.existing.map((entry) => entry.id)),
|
|
63
|
+
mode,
|
|
64
|
+
});
|
|
65
|
+
setPrepared(next);
|
|
66
|
+
setIncluded(new Set(next
|
|
67
|
+
.filter((row) => row.action !== "skip" && row.issues.length === 0)
|
|
68
|
+
.map((row) => row.rowIndex)));
|
|
69
|
+
setPage(0);
|
|
70
|
+
setStep("preview");
|
|
71
|
+
}
|
|
72
|
+
const previewPage = paginateItems(prepared, page, 25);
|
|
73
|
+
const selectedValid = prepared.filter((row) => included.has(row.rowIndex) &&
|
|
74
|
+
row.issues.length === 0 &&
|
|
75
|
+
row.action !== "skip");
|
|
76
|
+
async function confirmImport() {
|
|
77
|
+
if (selectedValid.length === 0) {
|
|
78
|
+
setMessage("Select at least one valid row. Existing content was not changed.");
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
setBusy(true);
|
|
82
|
+
try {
|
|
83
|
+
const merged = mergePreparedImport(props.existing, prepared, included);
|
|
84
|
+
const result = await props.api.publish(props.siteId, props.collection.name, {
|
|
85
|
+
expectedVersion: props.expectedVersion,
|
|
86
|
+
entries: merged,
|
|
87
|
+
idempotencyKey: `import:${props.siteId}:${props.collection.name}:${selectedValid
|
|
88
|
+
.map((row) => row.id)
|
|
89
|
+
.sort()
|
|
90
|
+
.join(",")}:${props.expectedVersion ?? "none"}`,
|
|
91
|
+
message: `Import ${selectedValid.length} row(s) into ${props.collection.name}`,
|
|
92
|
+
});
|
|
93
|
+
if (!result.ok) {
|
|
94
|
+
setMessage(result.code === "CONFLICT"
|
|
95
|
+
? `${result.message} Existing content was not overwritten.`
|
|
96
|
+
: result.message);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
props.onImported();
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
setBusy(false);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return (_jsxs("section", { class: "cr-import", children: [_jsxs("div", { class: "cr-toolbar", children: [_jsxs("h2", { children: ["Import ", props.collection.label] }), _jsx("button", { type: "button", class: "cr-button cr-button--ghost", onClick: props.onCancel, children: "Cancel" })] }), _jsx("p", { class: "cr-help", children: "Spreadsheets stay in this browser. Only validated JSON is published. Existing entries are not replaced until you confirm." }), message ? (_jsx("p", { class: "cr-banner cr-banner--error", role: "alert", children: message })) : null, step === "upload" || step === "sheet" || step === "map" ? (_jsxs("label", { class: "cr-field", children: [_jsx("span", { class: "cr-label", children: "Excel or CSV file" }), _jsx("input", { class: "cr-input", type: "file", accept: ".csv,.xlsx,text/csv,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", onChange: (event) => {
|
|
106
|
+
const input = event.currentTarget;
|
|
107
|
+
void onFile(input.files?.[0] ?? null);
|
|
108
|
+
} })] })) : null, sheets.length > 1 ? (_jsxs("label", { class: "cr-field", children: [_jsx("span", { class: "cr-label", children: "Worksheet" }), _jsx("select", { class: "cr-input", value: sheet, onChange: (event) => {
|
|
109
|
+
const value = event.currentTarget.value;
|
|
110
|
+
setSheet(value);
|
|
111
|
+
if (file !== null) {
|
|
112
|
+
void loadSheet(file, value);
|
|
113
|
+
}
|
|
114
|
+
}, children: sheets.map((name) => (_jsx("option", { value: name, children: name }, name))) })] })) : null, headers.length > 0 ? (_jsxs("fieldset", { class: "cr-fieldset", children: [_jsx("legend", { children: "Column mapping" }), headers.map((header) => (_jsxs("label", { class: "cr-field", children: [_jsx("span", { class: "cr-label", children: header }), _jsxs("select", { class: "cr-input", value: columnMap[header] ?? "", onChange: (event) => {
|
|
115
|
+
const value = event.currentTarget
|
|
116
|
+
.value;
|
|
117
|
+
setColumnMap((current) => {
|
|
118
|
+
const next = { ...current };
|
|
119
|
+
if (value === "") {
|
|
120
|
+
delete next[header];
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
next[header] = value;
|
|
124
|
+
}
|
|
125
|
+
return next;
|
|
126
|
+
});
|
|
127
|
+
}, children: [_jsx("option", { value: "", children: "Ignore" }), _jsx("option", { value: "id", children: "Entry id" }), importableFields.map((field) => (_jsx("option", { value: field.name, children: field.label }, field.name)))] })] }, header))), _jsxs("label", { class: "cr-field", children: [_jsx("span", { class: "cr-label", children: "When an id already exists" }), _jsxs("select", { class: "cr-input", value: mode, onChange: (event) => setMode(event.currentTarget
|
|
128
|
+
.value), children: [_jsx("option", { value: "upsert", children: "Create or update (confirm first)" }), _jsx("option", { value: "create", children: "Create only \u2014 skip existing" }), _jsx("option", { value: "update", children: "Update only \u2014 skip new ids" })] })] }), _jsx("button", { type: "button", class: "cr-button", onClick: runPrepare, children: "Preview mapped records" })] })) : null, step === "preview" || step === "confirm" ? (_jsxs(_Fragment, { children: [_jsxs("p", { class: "cr-help", children: [selectedValid.length, " row(s) selected to publish of", " ", prepared.length, " parsed. Invalid rows cannot be included."] }), _jsxs("table", { class: "cr-table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: "Include" }), _jsx("th", { scope: "col", children: "Row" }), _jsx("th", { scope: "col", children: "Id" }), _jsx("th", { scope: "col", children: "Action" }), _jsx("th", { scope: "col", children: "Status" })] }) }), _jsx("tbody", { children: previewPage.items.map((row) => (_jsxs("tr", { children: [_jsx("td", { children: _jsx("input", { type: "checkbox", disabled: row.issues.length > 0 || row.action === "skip", checked: included.has(row.rowIndex), onChange: (event) => {
|
|
129
|
+
const checked = event.currentTarget.checked;
|
|
130
|
+
setIncluded((current) => {
|
|
131
|
+
const next = new Set(current);
|
|
132
|
+
if (checked) {
|
|
133
|
+
next.add(row.rowIndex);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
next.delete(row.rowIndex);
|
|
137
|
+
}
|
|
138
|
+
return next;
|
|
139
|
+
});
|
|
140
|
+
} }) }), _jsx("td", { children: row.rowIndex }), _jsx("td", { children: row.id || "—" }), _jsx("td", { children: row.action }), _jsx("td", { children: row.issues.length > 0
|
|
141
|
+
? row.issues.join(" ")
|
|
142
|
+
: row.warnings.join(" ") || "Ready" })] }, row.rowIndex))) })] }), previewPage.pageCount > 1 ? (_jsxs("nav", { class: "cr-pagination", "aria-label": "Import preview pages", children: [_jsx("button", { type: "button", class: "cr-button cr-button--ghost", disabled: previewPage.page === 0, onClick: () => setPage((current) => Math.max(0, current - 1)), children: "Previous" }), _jsxs("p", { class: "cr-help", children: ["Page ", previewPage.page + 1, " of ", previewPage.pageCount] }), _jsx("button", { type: "button", class: "cr-button cr-button--ghost", disabled: previewPage.page >= previewPage.pageCount - 1, onClick: () => setPage((current) => Math.min(previewPage.pageCount - 1, current + 1)), children: "Next" })] })) : null, step === "preview" ? (_jsx("button", { type: "button", class: "cr-button", disabled: selectedValid.length === 0, onClick: () => setStep("confirm"), children: "Review final import" })) : (_jsxs("div", { class: "cr-confirm", role: "alertdialog", children: [_jsxs("h3", { children: ["Publish ", selectedValid.length, " row(s)?"] }), _jsx("p", { children: "This replaces the published collection snapshot using optimistic concurrency. Spreadsheet formulas and macros are not executed." }), _jsxs("div", { class: "cr-actions", children: [_jsx("button", { type: "button", class: "cr-button cr-button--ghost", onClick: () => setStep("preview"), children: "Back" }), _jsx("button", { type: "button", class: "cr-button", disabled: busy, onClick: () => void confirmImport(), children: "Confirm import" })] })] }))] })) : null] }));
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=CollectionImportWizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionImportWizard.js","sourceRoot":"","sources":["../../src/ui/CollectionImportWizard.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/EditorApp.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { ContentRailApiClient } from "../api/client.js";
|
|
2
2
|
import type { EditorSiteConfig } from "../fields/types.js";
|
|
3
|
+
export declare const DEFAULT_ADMIN_PAGE_SIZE = 25;
|
|
3
4
|
export interface EditorAppProps {
|
|
4
5
|
readonly api: ContentRailApiClient;
|
|
5
6
|
/** Developer-supplied editor metadata for sites/collections/fields. */
|
|
6
7
|
readonly sites: readonly EditorSiteConfig[];
|
|
7
8
|
readonly title?: string;
|
|
9
|
+
/** Collection list page size. Default 25; never render an unbounded table. */
|
|
10
|
+
readonly pageSize?: number;
|
|
8
11
|
}
|
|
9
12
|
export declare function EditorApp(props: EditorAppProps): import("preact").JSX.Element;
|
|
10
13
|
//# sourceMappingURL=EditorApp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorApp.d.ts","sourceRoot":"","sources":["../../src/ui/EditorApp.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAM7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"EditorApp.d.ts","sourceRoot":"","sources":["../../src/ui/EditorApp.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAM7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAiB3D,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,oBAAoB,CAAC;IACnC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAsBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,gCAslC9C"}
|