UNPKG

hswidget

Version:
67 lines 6.65 kB
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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