UNPKG

stackpress

Version:

Incept is a content management framework.

185 lines (184 loc) 6.05 kB
import { VariableDeclarationKind } from 'ts-morph'; export default function removeView(directory, _registry, model) { const file = `${model.name}/admin/views/restore.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}RestoreCrumbs`, 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: _('Restore'), icon: 'check-circle' } ]; return (<Crumbs crumbs={crumbs} />); `) }); source.addFunction({ isExported: true, name: `Admin${model.title}RestoreForm`, 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 className="font-semibold"> {_( 'Are you sure you want to restore %s?', \`${model.transformTemplate('${results?.%s || \'\'}')}\` )} </strong> </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 restore" href="?confirmed=true"> <i className="icon fas fa-fw fa-check-circle"></i> <span>{_('Confirmed')}</span> </a> </div> </div> ); `) }); source.addFunction({ isExported: true, name: `Admin${model.title}RestoreBody`, 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}RestoreCrumbs base={base} results={results} /> </div> <div className="admin-confirm"> <Admin${model.title}RestoreForm base={base} results={results} /> </div> </main> ); `) }); source.addFunction({ isExported: true, name: `Admin${model.title}RestoreHead`, 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>{_('Restore ${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}RestorePage`, parameters: [{ name: 'props', type: 'ServerPageProps<AdminConfigProps>' }], statements: (` return ( <LayoutAdmin {...props}> <Admin${model.title}RestoreBody /> </LayoutAdmin> ); `) }); source.addVariableStatement({ isExported: true, declarationKind: VariableDeclarationKind.Const, declarations: [{ name: 'Head', initializer: `Admin${model.title}RestoreHead` }] }); source.addStatements(`export default Admin${model.title}RestorePage;`); }