hswidget
Version:
Helpful Scripts UI widgets
67 lines • 6.65 kB
JavaScript
import m from "mithril";
import { Log } from 'hsutil';
const log = new Log('EditList');
import { EditLabel } from './EditLabel';
import { Collapsible } from './Collapsible';
import { Widget } from "./Widget";
const defIsEmpty = (row) => (!row || !row.length || row === '') ? true : false;
const defaultRender = (rows) => {
return (row, rowNum) => {
if (row.map) {
return row.map((e, i) => m(EditLabel, {
placeholder: 'add...',
update: (newValue) => row[i] = newValue
}, e));
}
else if (typeof row === 'object') {
return Object.keys(row).map((e) => m(EditLabel, {
placeholder: 'add...',
update: (newValue) => row[e] = newValue
}, row[e]));
}
else {
return m(EditLabel, {
placeholder: 'add...',
update: (newValue) => rows[rowNum] = newValue
}, row);
}
};
};
function expand(rows, def, isEmpty) {
if (rows) {
const lastRowIndex = rows.length - 1;
if (lastRowIndex < 0 || rows[lastRowIndex] === undefined || !isEmpty(rows[lastRowIndex])) {
rows.push(def);
}
}
}
export class EditList extends Widget {
view(node) {
const sort = node.attrs.sort || (() => 0);
const rows = node.attrs.rows ?? node?.children;
const isEmpty = node.attrs.isEmpty || defIsEmpty;
const isExpanded = node.attrs.isExpanded || false;
const render = node.attrs.rowRender || defaultRender(rows);
const def = node.attrs.defaultRow === undefined ? '' : node.attrs.defaultRow;
const expandRows = node.attrs.expand || expand;
const collapsible = node.attrs.collapsible === undefined ? true : node.attrs.collapsible;
if (!rows) {
log.warn(`EditList rows array is missing`);
}
if (!rows || !rows.map) {
log.warn(`EditList rows must be an array`);
}
expandRows(rows, def, isEmpty);
const content = rows.sort(sort).map((row, i) => render(row, i));
if (node.attrs.header) {
content.unshift(m('.header', node.attrs.header));
}
return collapsible ?
m(Collapsible, this.attrs(node.attrs, {
class: `hs_edit_list`,
isExpanded: isExpanded,
}), content)
: m(`.hs_edit_list`, this.attrs(node.attrs, {}), content);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWRpdExpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRWRpdExpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUNBLE9BQU8sQ0FBQyxNQUFNLFNBQVMsQ0FBQztBQUN4QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQWUsUUFBUSxDQUFDO0FBQUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFTLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU8sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBWSxVQUFVLENBQUM7QUFleEMsTUFBTSxVQUFVLEdBQVUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsS0FBRyxFQUFFLENBQUMsQ0FBQSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFPM0YsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFjLEVBQVksRUFBRTtJQUMvQyxPQUFPLENBQUMsR0FBVyxFQUFFLE1BQWEsRUFBYSxFQUFFO1FBQzdDLElBQW1CLEdBQUksQ0FBQyxHQUFHLEVBQUU7WUFDekIsT0FBc0IsR0FBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVEsRUFBRSxDQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hFLFdBQVcsRUFBRSxRQUFRO2dCQUNyQixNQUFNLEVBQUUsQ0FBQyxRQUFlLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRO2FBQ2pELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNWO2FBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDaEMsT0FBTyxNQUFNLENBQUMsSUFB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