UNPKG

@tomino/dynamic-form-semantic-ui

Version:

Semantic UI form renderer based on dynamic form generation

78 lines 3.42 kB
import { schemaDatasetToJS } from '../../helpers'; const controlVisibility = (controls) => ({ owner }) => { return controls.indexOf(owner.control) >= 0; }; const controlInvisibility = (controls) => ({ owner }) => { return controls.indexOf(owner.control) === -1; }; const parentControlVisibility = (controls) => ({ owner }) => { return controls.indexOf(owner.parent.control) >= 0; }; export const elementWithSource = ({ owner, context }) => { const editorElement = context.editorCatalogue.components[owner.control]; return editorElement ? editorElement.bound : false; }; export const readonlyElements = controlInvisibility(['Text', 'Image', 'Value']); export const textVisibleHandler = controlVisibility(['Text', 'Link']); export const gridVisibleHandler = controlVisibility(['Grid']); export const verticalVisibleHandler = controlVisibility(['Radio', 'Checkbox']); export const parentGridVisibleHandler = parentControlVisibility(['Grid']); export const parentStackVisibleHandler = parentControlVisibility(['Stack']); export function clickApproveHandler() { } function buildDatasetPaths(element, parent = '', parentPaths = '') { let result = []; let adjustedPath = parentPaths + '.'; for (let key of Object.keys(element.properties || {})) { let current = element.properties[key]; let parentPath = (parent ? parent + '.' : '') + key; if (parentPaths) { if (parentPath.substring(0, adjustedPath.length) === adjustedPath) { result.push(parentPath.replace(adjustedPath, '')); } } else { result.push(parentPath); } if (current.type === 'object') { result.push(...buildDatasetPaths(current, parentPath, parentPaths)); } else if (parentPaths && current.type === 'array' && current.items && current.items.type === 'object') { result.push(...buildDatasetPaths(current.items, parentPath, parentPaths)); } } return result; } export const datasetSource = ({ owner, context }) => { let parent = owner.parent; let parentPath = ''; while (parent.parent != null) { parent = parent.parent; const control = context.editorCatalogue.components[parent.control]; if (control && control.valueProvider && parent.props && parent.props.value && parent.props.value.source) { parentPath = parent.props.value.source + (parentPath ? '.' : '') + parentPath; } } let schema = schemaDatasetToJS(context.schema); let paths = buildDatasetPaths(schema, '', parentPath); let all = buildDatasetPaths(schema); let array = [{ text: 'Item', value: '__item', disabled: false }]; const values = [{ text: 'None', value: '', disabled: false }] .concat(array) .concat(paths.sort().map(p => ({ text: p, value: p, disabled: false }))) .concat(parentPath !== '' ? [{ text: 'GLOBAL', value: '__global', disabled: true }].concat(all.sort().map(p => ({ text: p, value: '/' + p, disabled: false }))) : []); return values; }; export const optionsHandlers = ({ context }) => { return [{ text: 'None', value: '' }].concat(context.projectHandlers.filter(h => h !== '__esModule').map(h => ({ value: h, text: h }))); }; //# sourceMappingURL=property_panel.handlers.js.map