alinea
Version:
Headless git-based CMS
32 lines (30 loc) • 995 B
JavaScript
import "../../chunks/chunk-NZLE2WMY.js";
// src/field/list/ListField.ts
import { createId } from "alinea/core/Id";
import { Schema } from "alinea/core/Schema";
import { ListField } from "alinea/core/field/ListField";
import { ListRow } from "alinea/core/shape/ListShape";
import { generateNKeysBetween } from "alinea/core/util/FractionalIndexing";
import { viewKeys } from "alinea/dashboard/editor/ViewKeys";
function list(label, options) {
return new ListField(options.schema, Schema.shapes(options.schema), {
options: {
label,
...options,
get initialValue() {
const initialValue = options.initialValue;
if (!Array.isArray(initialValue)) return [];
const keys = generateNKeysBetween(null, null, initialValue.length);
return initialValue.map((row, index) => ({
[ListRow.id]: createId(),
[ListRow.index]: keys[index],
...row
}));
}
},
view: viewKeys.ListInput
});
}
export {
list
};