UNPKG

stackpress

Version:

Incept is a content management framework.

92 lines (91 loc) 2.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = generate; exports.generateSpan = generateSpan; function generate(directory, registry) { for (const model of registry.model.values()) { model.columns.forEach(column => generateSpan(directory, model, column)); } } function generateSpan(directory, model, column) { if (typeof column.span.component !== 'string') return; const path = `${model.name}/components/spans/${column.title}Span.tsx`; const source = directory.createSourceFile(path, '', { overwrite: true }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: 'stackpress/view/client', namedImports: ['FieldProps', 'ControlProps'] }); source.addImportDeclaration({ moduleSpecifier: 'r22n', namedImports: ['useLanguage'] }); source.addImportDeclaration({ moduleSpecifier: 'frui/form/Control', defaultImport: 'Control' }); source.addImportDeclaration({ moduleSpecifier: `frui/field/${column.span.component}`, defaultImport: column.span.component }); source.addFunction({ isExported: true, name: `${column.title}Span`, parameters: [ { name: 'props', type: 'FieldProps' } ], statements: (` //props const { className, value, change, error = false } = props; const attributes = ${JSON.stringify(column.span.attributes)}; const values = Array.isArray(value) ? value : []; //render return ( <> <${column.span.component} {...attributes} name="span[${column.name}][0]}" className={className} error={error} defaultValue={values[0]} onUpdate={value => change && change('span[${column.name}][0]', value)} /> <br /> <${column.span.component} {...attributes} name="span[${column.name}][1]}" className={className} error={error} defaultValue={values[1]} onUpdate={value => change && change('span[${column.name}][1]', value)} /> </> ); `) }); source.addFunction({ isExported: true, name: `${column.title}SpanControl`, parameters: [ { name: 'props', type: 'ControlProps' } ], statements: (` //props const { className, value, change, error } = props; //hooks const { _ } = useLanguage(); //render return ( <Control label={_('${column.label}')} error={error} className={className}> <${column.title}Span className="!border-b2 dark:bg-gray-300 outline-none" error={!!error} value={value} change={change} /> </Control> ); `) }); }