Proceso
Una vez declaradas las renderizaciones se establece el proceso de generación.
Archivo process.ts
En el archivo ./stack/my-backend/process.ts se declara el proceso para generar el renderizado del backend.
📃./stack/my-backend/process.ts
import config from '@config/index'
import { rendering } from 'autocrudx-tools'
import type {
ParamsAll,
tableDetailsOfMasterCustomized
} from 'autocrudx-tools';
export default async (
paramsOmitOutput: Omit<ParamsAll, 'output'>
): Promise<void> => {
const backend = (
await import(`@stack/${config.crud.stackBackend}/renderings`)
).default
const params: ParamsAll = {
...paramsOmitOutput,
output: config.pathBackend,
moduleName: config.moduleName,
pathUser: config.pathUser
}
if (params.tableDetailsOfMaster.length!==0) {
params.tableDetailsOfMaster.forEach(function(table){
const paramsWhitDetail = {
...params,
tableDetailsCurrent: (
table as unknown as tableDetailsOfMasterCustomized
)
}
rendering(backend.detailController(paramsWhitDetail))
rendering(backend.detailModel(paramsWhitDetail))
rendering(backend.detailRoute(paramsWhitDetail))
})
}
rendering(backend.masterController(params))
rendering(backend.masterModel(params))
rendering(backend.masterRoute(params))
}Tome en cuenta que empezamos importamos el
configde nuestro programa, la funciónrenderingdel móduloautocrudx-toolsmás el tipadoParamsAllytableDetailsOfMasterCustomizeddel mismo módulo.Tenga presente que el módulo
proccessexporta una funciónasyncque devuelve unaPromise<void>. Dicha función recibe un argumento llamadoparamsOmitOutputtipoOmit<ParamsAll, 'output'>como parametro.Lo primero que hace la función
proccesses importar dinámicamente el módulorenderings.tsestableciéndolo en la constantebackend.Lo segundo que hace la función
proccesses declarar la constanteparamspara agrupar todos los parametros necesarios para el proceso en sí.A continuación, el proceso se divide en 2 partes:
- La condición si se cumple que
params.tableDetailsOfMaster.lengthes diferente de cero (0). - Más el resto del proceso.
- La condición si se cumple que
Preste atención que para renderizar cualquier plantilla basta con ejecutar la función
rendering, perteneciente al móduloautocrudx-tools, pasándole como argumento cualquiera de las funciones importadas dinámicamente desde el módulorenderingsdel correspondiente Stack.
Algo como esto:
rendering(myStackName.fooTemplateName(params))
rendering(myStackName.barTemplateName(params))
rendering(myStackName.bazTemplateName(params))En el ejemplo anterior myStackName sería algo como la constante backend declarada aguas arriba. En el próximo ejemplo note que esta constante no se llamará backend sino frontend. Usted puede colocarle en nombre que desee, ya que la forma no es relevante.
En el archivo ./stack/my-backend/process.ts se declara el proceso para generar el renderizado del frontend.
📃./stack/frontend-folder-name/process.ts
import config from '@config/index'
import { rendering } from 'autocrudx-tools'
import type {
ParamsAll,
tableDetailsOfMasterCustomized
} from 'autocrudx-tools';
export default async (
paramsOmitOutput: Omit<ParamsAll, 'output'>
): Promise<void> => {
const frontend = (
await import(`@stack/${config.crud.stackFrontend}/renderings`)
).default
const params: ParamsAll = {
...paramsOmitOutput,
output: config.pathFrontend,
moduleName: config.moduleName,
pathUser: config.pathUser
}
if (params.tableDetailsOfMaster.length!==0){
rendering(frontend.tabs(params))
rendering(frontend.masterTab(params))
rendering(frontend.masterUseTab(params))
params.tableDetailsOfMaster.forEach(function(table){
const paramsWhitDetail = {
...params,
tableDetailsCurrent: (
table as unknown as tableDetailsOfMasterCustomized
)
}
rendering(frontend.detailTab(paramsWhitDetail))
rendering(frontend.detailUseTab(paramsWhitDetail))
rendering(frontend.detailServices(paramsWhitDetail))
rendering(frontend.detailTypes(paramsWhitDetail))
})
}
rendering(frontend.masterRoutes(params))
rendering(frontend.masterDatagrid(params))
rendering(frontend.masterUseDatagrid(params))
rendering(frontend.masterServices(params))
rendering(frontend.masterTypes(params))
}Siéntase libre de colocarle el nombre que desee, con tal y cumpla con su tipado correspondiente.
type Rendering = {
outputFile: string;
outputPath: string;
params: ParamsAll;
template: string;
}
const rendering: ({
outputFile,
outputPath,
params,
template
}: Rendering) => void- Finalmente, tenga claro que para renderizar todas las
tableDetailsOfMaster, cuando las hay, es decir: si se cumple que(params.tableDetailsOfMaster.length!==0), simplemente se recorre el correspondiente arreglo con el métodoforEachde JavaScript.
// omitted for brevity ...
params.tableDetailsOfMaster.forEach(function(table){
const paramsWhitDetail = {
...params,
tableDetailsCurrent: (
table as unknown as tableDetailsOfMasterCustomized
)
}
rendering(myStackName.fooTemplateName(paramsWhitDetail))
rendering(myStackName.barTemplateName(paramsWhitDetail))
// omitted for brevity ...
})
// omitted for brevity ...Tome en cuenta cuando recorra el arreglo params.tableDetailsOfMaster, que por cada tableDetailsCurrent se creará una constante llamada paramsWhitDetail para ser pasada como argumento respectivamente.
