UNPKG

@mongez/gnz

Version:

Generator Z, the next generation of scaffolding tools.

113 lines (109 loc) 3.85 kB
import {toCamelCase,rtrim}from'@mongez/reinforcements';import {isEmpty}from'@mongez/supportive-is';import'os';import {format}from'../../utils/prettifier.js';const columnsMap = { string: "textColumn", text: "textColumn", email: "emailColumn", number: "numberColumn", image: "circleImage", id: `idColumn`, }; function getColumnsImports(columns) { if (!columns || isEmpty(columns)) return []; return Object.keys(columns) .map(name => { const [textType] = columns[name].split("."); if (!textType) return ""; return columnsMap[textType] || ""; }) .filter(Boolean); } // TODO: Add memo feature async function generateSuperTableTemplate(options) { // const { memo, name: componentName } = options; const imports = []; const importsList = [ "Table", "actionsColumn", "activeFilter", "circleImage", "idColumn", "localizedColumn", "activeColumn", "textFilter", ...getColumnsImports(options.columns), ]; if (memo) { imports.push('import React from "react";'); } imports.push(`import { ${importsList.join(", ")} } from "@mongez/moonlight";`); if (options.servicePath && options.serviceName) { imports.push(`import { ${options.serviceName} } from "${options.servicePath}";`); } if (options.formComponentName && options.formComponentPath) { imports.push(`import ${options.formComponentName} from "${options.formComponentPath}";`); } const parsedColumns = parseColumns(options.columns); const importsString = imports.join("\n"); const parsedFilters = parseFilters(options.filters); const content = ` ${importsString} const columns = [${parsedColumns}]; const filters = [${parsedFilters}]; export default function ${componentName}() { return ( <Table title="${toCamelCase(String(options.title))}" name="${toCamelCase(rtrim(options.name, "Page"))}" service={${options.serviceName}} ${options.formComponentName ? `form={${options.formComponentName}}` : ``} filters={filters} columns={columns} /> ) } `; return await format.typescript(content); } function parseColumns(columns) { if (!columns) { columns = {}; } const parsedColumns = Object.keys(columns) .map(name => { const [textType, ...options] = columns[name].split("."); if (!textType) return ""; const columnType = columnsMap[textType]; if (!columnType) return ""; const optionsString = options.map(method => { // check if method has : in it // if so, then the value is passed to the method // otherwise, it's just a method call if (method.includes(":")) { const [methodName, value] = method.split(":"); let columnValue = value; if (!["true", "false"].includes(value) && !isNaN(Number(value))) { columnValue = `"${value}"`; } return `${toCamelCase(methodName)}(${columnValue})`; } return `${toCamelCase(method)}()`; }); const columnName = columnsMap[textType] || ""; if (!columnName) return ""; return `${columnName}("${name}")${optionsString.length ? `.${optionsString.join(".")}` : ""}`; }) .filter(Boolean); parsedColumns.unshift("idColumn()"); parsedColumns.push("actionsColumn()"); return parsedColumns.join(",\n"); } function parseFilters(filters) { return ` activeFilter() `; }export{generateSuperTableTemplate,parseColumns,parseFilters};//# sourceMappingURL=template.js.map