UNPKG

@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
"use strict"; 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