@rxap/schematics-ts-morph
Version:
This package provides utilities for manipulating TypeScript code using ts-morph, particularly for Angular and NestJS projects. It offers functions to add, coerce, and modify code elements like classes, methods, decorators, and imports. The package also in
97 lines • 5.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoerceDialogTableActionComponentRule = CoerceDialogTableActionComponentRule;
const schematics_utilities_1 = require("@rxap/schematics-utilities");
const ts_morph_1 = require("@rxap/ts-morph");
const coerce_parameter_declaration_1 = require("../ts-morph/coerce-parameter-declaration");
const add_component_import_1 = require("./add-component-import");
const coerce_dialog_component_1 = require("./coerce-dialog-component");
function CoerceDialogTableActionComponentRule(options) {
let { project, feature, overwrite, template, tableName, directory, dialogName, operationId, scope, } = options;
dialogName =
(0, schematics_utilities_1.CoerceSuffix)(dialogName, '-dialog');
if (!(directory === null || directory === void 0 ? void 0 : directory.includes(tableName))) {
if (directory === null || directory === void 0 ? void 0 : directory.endsWith(dialogName)) {
throw new Error(`The directory must include the table name: ${tableName} if directory ends with the dialog name: ${dialogName}`);
}
directory = `${directory}/${tableName}`;
}
if (!directory.endsWith(dialogName)) {
directory = `${directory}/${dialogName}`;
}
return (0, coerce_dialog_component_1.CoerceDialogComponentRule)({
project,
dialogName,
feature,
directory,
overwrite,
template,
coerceSubmitMethod: (classDeclaration) => {
(0, ts_morph_1.CoerceClassMethod)(classDeclaration, 'submit', {
isAsync: true,
statements: [
'this.loading$.enable();',
'try {',
' const response = await this.method.call({ parameters: { rowId: this.data.__rowId }, requestBody: this.state })',
' this.matDialogRef.close(response);',
'} catch (error: any) {',
' this.snackBar.open(error.message, \'OK\', { duration: 5000 });',
'} finally {',
' this.loading$.disable();',
'}',
],
});
},
tsMorphTransform: (project, [componentSourceFile], [componentClass]) => {
(0, add_component_import_1.AddComponentImport)(componentSourceFile, 'MatSnackBarModule', '@angular/material/snack-bar');
const [constructorDeclaration] = (0, ts_morph_1.CoerceClassConstructor)(componentClass);
(0, coerce_parameter_declaration_1.CoerceParameterDeclaration)(constructorDeclaration, 'method').set({
isReadonly: true,
type: (0, ts_morph_1.OperationIdToRemoteMethodClassName)(operationId),
});
(0, ts_morph_1.CoerceImports)(componentSourceFile, {
moduleSpecifier: (0, ts_morph_1.OperationIdToClassRemoteMethodImportPath)(operationId, scope),
namedImports: [(0, ts_morph_1.OperationIdToRemoteMethodClassName)(operationId)],
});
(0, coerce_parameter_declaration_1.CoerceParameterDeclaration)(constructorDeclaration, 'snackBar').set({
isReadonly: true,
type: 'MatSnackBar',
});
(0, ts_morph_1.CoerceImports)(componentSourceFile, {
moduleSpecifier: '@angular/material/snack-bar',
namedImports: ['MatSnackBar'],
});
(0, coerce_parameter_declaration_1.CoerceParameterDeclaration)(constructorDeclaration, 'data').set({
isReadonly: true,
type: `I${(0, schematics_utilities_1.classify)(tableName)}`,
});
(0, ts_morph_1.CoerceImports)(componentSourceFile, [
{
moduleSpecifier: `../${tableName}`,
namedImports: [`I${(0, schematics_utilities_1.classify)(tableName)}`],
},
]);
(0, coerce_parameter_declaration_1.CoerceParameterDeclaration)(constructorDeclaration, 'matDialogRef').set({
isReadonly: true,
type: `MatDialogRef<any>`,
});
(0, ts_morph_1.CoerceImports)(componentSourceFile, [
{
moduleSpecifier: '@angular/material/dialog',
namedImports: ['MatDialogRef'],
},
]);
(0, ts_morph_1.CoercePropertyDeclaration)(componentClass, 'state', {
initializer: '{} as any',
type: (0, ts_morph_1.OperationIdToRequestBodyClassName)(operationId),
});
(0, ts_morph_1.CoerceImports)(componentSourceFile, [
{
moduleSpecifier: (0, ts_morph_1.OperationIdToRequestBodyClassImportPath)(operationId, scope),
namedImports: [(0, ts_morph_1.OperationIdToRequestBodyClassName)(operationId)],
},
]);
},
});
}
//# sourceMappingURL=coerce-dialog-table-action-component.js.map