import { toKebabCase, toPascalCase } from "js-convert-case"; import { formatWithPrettier } from "../../utils/prettier.js"; export function itemDeleteTemplate( delete_action_name: string, collection_name: string, list_action_name: string, importPath: (path: string) => string ): Promise { const result = `import type { Context } from "koa"; import { Mountable } from "@sealcode/sealgen"; import type Router from "@koa/router"; import { ${toPascalCase(collection_name)} } from "${importPath( "src/back/collections/collections.js" )}"; import { ${list_action_name}URL } from "${importPath( "src/back/routes/urls.js" )}"; export const actionName = "${delete_action_name}"; export default new (class ${delete_action_name}Redirect extends Mountable { canAccess = async (ctx: Context) => { const policy = ${toPascalCase(collection_name)}.getPolicy("edit"); const response = await policy.check(ctx.$context); return { canAccess: response?.allowed || false, message: response?.reason || "" }; }; mount(router: Router, path: string) { router.post(path, async (ctx) => { await ctx.$app.collections["${toKebabCase( collection_name )}"].removeByID(ctx.$context, ctx.params.id!); ctx.status = 302; ctx.redirect(${list_action_name}URL); }); } })(); `; return formatWithPrettier(result); }