UNPKG

stackpress

Version:

Incept is a content management framework.

190 lines (189 loc) 6.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = removeView; const ts_morph_1 = require("ts-morph"); function removeView(directory, _registry, model) { const file = `${model.name}/admin/views/remove.tsx`; const source = directory.createSourceFile(file, '', { overwrite: true }); const ids = model.ids.map(column => column.name); const path = ids.map(name => `\${results.${name}}`).join('/'); const link = (action) => `\`\${base}/${model.dash}/${action}/${path}\``; source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: 'stackpress/view/client', namedImports: ['ServerPageProps'] }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: 'stackpress/admin/types', namedImports: ['AdminConfigProps'] }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: 'stackpress/sql', namedImports: ['SearchParams'] }); source.addImportDeclaration({ isTypeOnly: true, moduleSpecifier: '../../types.js', namedImports: [`${model.title}Extended`] }); source.addImportDeclaration({ moduleSpecifier: 'r22n', namedImports: ['useLanguage'] }); source.addImportDeclaration({ moduleSpecifier: 'stackpress/view/client', namedImports: ['useServer', 'Crumbs', 'LayoutAdmin'] }); source.addFunction({ isExported: true, name: `Admin${model.title}RemoveCrumbs`, parameters: [{ name: 'props', type: `{ base: string, results: ${model.title}Extended }` }], statements: (` const { base, results } = props; //hooks const { _ } = useLanguage(); //variables const crumbs = [ { label: ( <span className="admin-crumb">{_('${model.plural}')}</span> ), icon: '${model.icon}', href: \`\${base}/${model.dash}/search\` }, { label: ( <span className="admin-crumb"> {\`${model.transformTemplate('${results?.%s || \'\'}')}\`} </span> ), icon: '${model.icon}', href: ${link('detail')} }, { label: _('Remove'), icon: 'trash' } ]; return (<Crumbs crumbs={crumbs} />); `) }); source.addFunction({ isExported: true, name: `Admin${model.title}RemoveForm`, parameters: [{ name: 'props', type: `{ base: string, results: ${model.title}Extended }` }], statements: (` const { base, results } = props; const { _ } = useLanguage(); return ( <div> <div className="message"> <i className="icon fas fa-fw fa-info-circle"></i> <strong> {_( 'Are you sure you want to remove %s forever?', \`${model.transformTemplate('${results?.%s || \'\'}')}\` )} </strong> <br /> <em>{_('(Thats a real long time)')}</em> </div> <div className="actions"> <a className="action cancel" href={${link('detail')}}> <i className="icon fas fa-fw fa-arrow-left"></i> <span>Nevermind.</span> </a> <a className="action remove" href="?confirmed=true"> <i className="icon fas fa-fw fa-trash"></i> <span>{_('Confirmed')}</span> </a> </div> </div> ); `) }); source.addFunction({ isExported: true, name: `Admin${model.title}RemoveBody`, statements: (` const { config, response } = useServer<${[ `AdminConfigProps`, 'Partial<SearchParams>', `${model.title}Extended` ].join(', ')}>(); const base = config.path('admin.base', '/admin'); const results = response.results as ${model.title}Extended; //render return ( <main className="admin-page admin-confirm-page"> <div className="admin-crumbs"> <Admin${model.title}RemoveCrumbs base={base} results={results} /> </div> <div className="admin-confirm"> <Admin${model.title}RemoveForm base={base} results={results} /> </div> </main> ); `) }); source.addFunction({ isExported: true, name: `Admin${model.title}RemoveHead`, parameters: [{ name: 'props', type: 'ServerPageProps<AdminConfigProps>' }], statements: (` const { data, styles = [] } = props; const { favicon = '/favicon.ico' } = data?.brand || {}; const { _ } = useLanguage(); const mimetype = favicon.endsWith('.png') ? 'image/png' : favicon.endsWith('.svg') ? 'image/svg+xml' : 'image/x-icon'; return ( <> <title>{_('Remove ${model.singular}')}</title> {favicon && <link rel="icon" type={mimetype} href={favicon} />} <link rel="stylesheet" type="text/css" href="/styles/global.css" /> {styles.map((href, index) => ( <link key={index} rel="stylesheet" type="text/css" href={href} /> ))} </> ); `) }); source.addFunction({ isExported: true, name: `Admin${model.title}RemovePage`, parameters: [{ name: 'props', type: 'ServerPageProps<AdminConfigProps>' }], statements: (` return ( <LayoutAdmin {...props}> <Admin${model.title}RemoveBody /> </LayoutAdmin> ); `) }); source.addVariableStatement({ isExported: true, declarationKind: ts_morph_1.VariableDeclarationKind.Const, declarations: [{ name: 'Head', initializer: `Admin${model.title}RemoveHead` }] }); source.addStatements(`export default Admin${model.title}RemovePage;`); }