stackpress
Version:
Incept is a content management framework.
190 lines (189 loc) • 6.17 kB
JavaScript
"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;`);
}