bpm-core 0.0.128 → 0.0.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +75 -5
  2. package/cli/deploy/build.js +1 -1
  3. package/cli/deploy/git-operations-handler.js +1 -1
  4. package/cli/deploy/index.js +1 -1
  5. package/cli/generate/index.js +10 -0
  6. package/cli/generate/mock/form-node.js +77 -0
  7. package/cli/generate/mock/index.js +209 -0
  8. package/cli/generate/mock/lov.js +18 -0
  9. package/cli/generate/new/angular-template/.editorconfig +13 -0
  10. package/cli/generate/new/angular-template/README.md +7 -0
  11. package/cli/generate/new/angular-template/angular.json.ejs +167 -0
  12. package/cli/generate/new/angular-template/build.sh +6 -0
  13. package/cli/generate/new/angular-template/extra-webpack.config.js.ejs +5 -0
  14. package/cli/generate/new/angular-template/karma.conf.js +44 -0
  15. package/cli/generate/new/angular-template/package.json.ejs +67 -0
  16. package/cli/generate/new/angular-template/protractor.conf.js +28 -0
  17. package/cli/generate/new/angular-template/src/app/app.component.html +35 -0
  18. package/cli/generate/new/angular-template/src/app/app.component.scss +0 -0
  19. package/cli/generate/new/angular-template/src/app/app.component.ts +81 -0
  20. package/cli/generate/new/angular-template/src/app/config/segment-dynamic-loader.config.ts.ejs +8 -0
  21. package/cli/generate/new/angular-template/src/app/i18n/ar.ts.ejs +18 -0
  22. package/cli/generate/new/angular-template/src/app/i18n/en.ts.ejs +18 -0
  23. package/cli/generate/new/angular-template/src/app/page-components/@@comp-template@@/@@.component.html.ejs +33 -0
  24. package/cli/generate/new/angular-template/src/app/page-components/@@comp-template@@/@@.component.ts.ejs +128 -0
  25. package/cli/generate/new/angular-template/src/app/page-components/@@comp-template@@/_html-field.ejs +97 -0
  26. package/cli/generate/new/angular-template/src/app/page-components/@@comp-template@@/_html-table.ejs +27 -0
  27. package/cli/generate/new/angular-template/src/app/page-components/@@comp-template@@/_ts-field.ejs +3 -0
  28. package/cli/generate/new/angular-template/src/app/shared/pipes/translate.pipe.ts +32 -0
  29. package/cli/generate/new/angular-template/src/app/shared/services/i18n.service.ts +32 -0
  30. package/cli/generate/new/angular-template/src/app/shared/services/segment-dynamic-loader.service.ts.ejs +49 -0
  31. package/cli/generate/new/angular-template/src/app/shared/services/state-machine.service.ts +119 -0
  32. package/cli/generate/new/angular-template/src/app/shared/types/lov.enum.ts.ejs +7 -0
  33. package/cli/generate/new/angular-template/src/app/templates/print-section/print-section.component.html +5 -0
  34. package/cli/generate/new/angular-template/src/app/templates/print-section/print-section.component.scss +0 -0
  35. package/cli/generate/new/angular-template/src/app/templates/print-section/print-section.component.ts.ejs +156 -0
  36. package/cli/generate/new/angular-template/src/app/templates/print.ts.ejs +392 -0
  37. package/cli/generate/new/angular-template/src/environments/environment.local.ts.ejs +40 -0
  38. package/cli/generate/new/angular-template/src/environments/environment.prod.ts +25 -0
  39. package/cli/generate/new/angular-template/src/environments/environment.ts +25 -0
  40. package/cli/generate/new/angular-template/src/favicon.ico +0 -0
  41. package/cli/generate/new/angular-template/src/index.html.ejs +14 -0
  42. package/cli/generate/new/angular-template/src/main.ts +49 -0
  43. package/cli/generate/new/angular-template/src/polyfills.ts +65 -0
  44. package/cli/generate/new/angular-template/src/styles.scss.ejs +121 -0
  45. package/cli/generate/new/angular-template/src/test.ts +26 -0
  46. package/cli/generate/new/angular-template/tsconfig.app.json +15 -0
  47. package/cli/generate/new/angular-template/tsconfig.json +50 -0
  48. package/cli/generate/new/angular-template/tsconfig.spec.json +18 -0
  49. package/cli/generate/new/angular-template/tslint.json +143 -0
  50. package/cli/generate/new/copy-and-generate.js +120 -0
  51. package/cli/generate/new/field.js +4 -0
  52. package/cli/generate/new/index.js +47 -0
  53. package/cli/generate/new/service-data.js +284 -0
  54. package/cli/index.js +2 -0
  55. package/fesm2022/bpm-core.mjs +248 -255
  56. package/fesm2022/bpm-core.mjs.map +1 -1
  57. package/lib/components/shared-components/form-field/attachment-section/attachment-section.component.d.ts +1 -2
  58. package/lib/components/shared-components/form-field/control-value-accessor.directive.d.ts +4 -4
  59. package/lib/components/shared-components/form-field/index.d.ts +0 -1
  60. package/lib/components/shared-components/form-field/input/input.component.d.ts +3 -2
  61. package/lib/components/shared-components/form-field/input-number/input-number.component.d.ts +2 -0
  62. package/lib/components/shared-components/form-field/radio/radio.component.d.ts +39 -2
  63. package/lib/components/shared-components/form-field/search-employee/search-employee.component.d.ts +5 -5
  64. package/lib/components/shared-components/form-field/shared-imports.d.ts +0 -3
  65. package/lib/components/shared-components/form-field/textarea/textarea.component.d.ts +76 -1
  66. package/lib/components/shared-components/table/table.component.d.ts +3 -3
  67. package/lib/{components/shared-components/form-field/input → directives}/input-map-filter/input-filters.d.ts +1 -0
  68. package/lib/{components/shared-components/form-field/input → directives}/input-map-filter/input-map-filter.directive.d.ts +4 -1
  69. package/lib/testComponent/request-details-section/request-details-section.component.d.ts +9 -4
  70. package/package.json +7 -2
  71. package/public-api.d.ts +1 -0
  72. package/lib/directives/ar.directive.d.ts +0 -11
  73. package/lib/directives/en.directive.d.ts +0 -11
  74. package/lib/directives/number.directive.d.ts +0 -14
  75. /package/cli/{deploy → utilities}/utilities.js +0 -0
  76. /package/lib/{components/shared-components/form-field/input → directives}/input-map-filter/index.d.ts +0 -0
  77. /package/lib/{components/shared-components/form-field/input → directives}/input-map-filter/input-mappers.d.ts +0 -0
  78. /package/lib/{components/shared-components/form-field/input → directives}/input-map-filter/types.d.ts +0 -0
@@ -0,0 +1,49 @@
1
+ import { Injectable } from '@angular/core';
2
+ import {RequestDetailsSectionComponent} from '../../page-components/request-details-section/request-details-section.component';
3
+ import segmentDynamicLoaderConfiguration from '../../config/segment-dynamic-loader.config';
4
+ import * as Constants from 'bpm-core';
5
+ import { I18nService } from './i18n.service';
6
+
7
+ @Injectable({
8
+ providedIn: 'any'
9
+ })
10
+ export class SegmentDynamicLoaderService {
11
+ requestDetailsSection = RequestDetailsSectionComponent;
12
+ roleToApprovalSectionMapping = segmentDynamicLoaderConfiguration.roleToApprovalSectionMapping;
13
+
14
+ constructor(private i18n: I18nService) {
15
+
16
+ }
17
+
18
+ getComponent(componentId: string) {
19
+ if (componentId.toLowerCase() === Constants.SECTION_ID_REQUEST_DETAILS.toLowerCase()) {
20
+ return this.requestDetailsSection;
21
+ }
22
+ let role = componentId.toLowerCase().split(Constants.SECTION_ID_APPROVAL_PARTIAL_NAME.toLowerCase())[0].toLowerCase();
23
+ return this.roleToApprovalSectionMapping[role];
24
+ }
25
+
26
+ getSectionName(componentId: string): string {
27
+ if(componentId.toLowerCase() === Constants.SECTION_ID_REQUEST_DETAILS.toLowerCase()) {
28
+ return this.i18n.translate('requestDetailsTitle');
29
+ }
30
+ else if(componentId.toLowerCase() === 'hrRequestDetails'.toLowerCase()) {
31
+ return this.i18n.translate('hrRequestDetailsTitle');
32
+ }
33
+ let role = componentId.toLowerCase().split(Constants.SECTION_ID_APPROVAL_PARTIAL_NAME.toLowerCase())[0].toLowerCase();
34
+ return this.i18n.translate(`${role.toLowerCase()}Role`);
35
+ }
36
+
37
+ getPrintPartialName (componentName: string) {
38
+ if (componentName === Constants.SECTION_ID_REQUEST_DETAILS) {
39
+ return 'sectionRequestDetails';
40
+ }
41
+ <% getRoleStages().forEach(stageInfo => { -%>
42
+ else if (componentName === "<%= stageInfo.role.toLowerCase()%>Approval") {
43
+ return "<%=stageInfo.printPartialName%>";
44
+ }
45
+ <% }); -%>
46
+ else { return 'sectionGeneralApproval' }
47
+
48
+ }
49
+ }
@@ -0,0 +1,119 @@
1
+ import {Injectable} from '@angular/core';
2
+ import {HttpClient} from '@angular/common/http';
3
+ import * as constants from "bpm-core";
4
+ import {CoreService, Messages} from "bpm-core";
5
+ import {environment} from "../../../environments/environment";
6
+
7
+ @Injectable({
8
+ providedIn: 'any',
9
+ })
10
+ export class StateMachineService {
11
+ private readonly transitions: { [key: string]: { [key: string]: Function } };
12
+ private state: string;
13
+
14
+ constructor(private http: HttpClient, private coreStateMachineService: CoreService) {
15
+ this.state = constants.STATE_MACHINE_STATUS_IDLE;
16
+ this.transitions = {
17
+ idle: {
18
+ generalApi: function (serviceName: string, ...args) {
19
+ let body = {
20
+ method: constants.HTTP_METHOD_GET, //GET - PUT - POST
21
+ destination: constants.TARGET_SERVER_WM,
22
+ serviceName: serviceName, //,
23
+ formName: environment.formName,
24
+ queryParameters: {
25
+
26
+ }
27
+ }
28
+ let options = this.coreStateMachineService.getRequestOptions();
29
+ let succ = 'serviceResponce';
30
+ return this.callPost(body, succ, options);
31
+ }
32
+ },
33
+ fetching: {
34
+ serviceResponce: function (...args: any) {
35
+ let [payload] = args;
36
+ let result = payload;
37
+ this.state = constants.STATE_MACHINE_STATUS_IDLE;
38
+ return result;
39
+ },
40
+ failure: function (...args) {
41
+ let [errors] = args;
42
+ this.state = constants.STATE_MACHINE_STATUS_ERROR;
43
+ return this.dispatch(constants.STATE_MACHINE_ACTION_HANDLE_ERROR, errors);
44
+ }
45
+ },
46
+ error: {
47
+ handleError: function (...args) {
48
+ let [errors] = args;
49
+ let result = new Messages(
50
+ {},
51
+ [],
52
+ [],
53
+ []
54
+ );
55
+ if (errors?.meta?.messages) {
56
+ errors.meta.messages.forEach((message) => {
57
+ result[message.type].push(message.message);
58
+ if (message.payloadReference) {
59
+ let payloadReferenceTokens = message.payloadReference.split('/');
60
+ payloadReferenceTokens.slice(1, payloadReferenceTokens.length - 1);
61
+ let element = result.errorFields;
62
+ payloadReferenceTokens.forEach((token) => {
63
+ element[token] = {};
64
+ element = element[token];
65
+ })
66
+ element = true;
67
+ }
68
+ });
69
+ } else if (errors?.errors) {
70
+ errors.errors.forEach((message) => {
71
+ result['error'].push(message.message);
72
+ });
73
+ }
74
+ this.state = constants.STATE_MACHINE_STATUS_IDLE;
75
+ return result;
76
+ }
77
+ },
78
+ sending: {
79
+ failure: function (...args) {
80
+ let [errors] = args;
81
+ this.state = constants.STATE_MACHINE_STATUS_ERROR;
82
+ return this.dispatch(constants.STATE_MACHINE_ACTION_HANDLE_ERROR, errors);
83
+ }
84
+ }
85
+ }
86
+ }
87
+
88
+ public dispatch(actionName, ...args) {
89
+ const actions = this.transitions[this.state];
90
+ const action = actions[actionName];
91
+
92
+ if (action) {
93
+ return action.apply(this, args);
94
+ }
95
+ }
96
+
97
+ public callPost(body, succ, options) {
98
+ let apiUrl = environment.proxyServiceBaseUrl + (window as any).wmConfig.language + environment.proxyFullAddress + environment.proxyServiceExecute;
99
+ return this.http.post(apiUrl, encodeURIComponent(JSON.stringify(body)), options).toPromise()
100
+ .then(
101
+ (responseObject: any) => {
102
+ let payload = responseObject;
103
+ this.state = constants.STATE_MACHINE_STATUS_FETCHING;
104
+ return this.dispatch(succ, payload);
105
+ },
106
+ ).catch(
107
+ (httpError: any) => {
108
+ let responseError = httpError.error;
109
+ if (responseError) {
110
+ this.state = constants.STATE_MACHINE_STATUS_FETCHING;
111
+ return this.dispatch(constants.STATE_MACHINE_ACTION_FAILURE, responseError);
112
+ } else {
113
+ this.state = constants.STATE_MACHINE_STATUS_IDLE;
114
+ throw httpError;
115
+ }
116
+ }
117
+ );
118
+ }
119
+ }
@@ -0,0 +1,7 @@
1
+ <% if(visibilityCodeLOVEnums) { -%>
2
+ <% Object.entries(visibilityCodeLOVEnums).forEach(([enumName, enumKeys]) => { %>
3
+ export enum <%= enumName %> {
4
+ <%- [...enumKeys].join(',\n') %>
5
+ }
6
+ <% }); %>
7
+ <% } -%>
@@ -0,0 +1,5 @@
1
+ <ds-button
2
+ square icon size="small"
3
+ (click)="print()" class="has-comments">
4
+ <ds-icon icon="print" class="fc-coral fs-20 fs-md-17"></ds-icon>
5
+ </ds-button>
@@ -0,0 +1,156 @@
1
+ import {Component, CUSTOM_ELEMENTS_SCHEMA, Input, NO_ERRORS_SCHEMA} from '@angular/core';
2
+ import printTemplate from '../print';
3
+ import * as Constants from 'bpm-core';
4
+ import moment from 'moment';
5
+ import {Form} from 'bpm-core';
6
+ import {SegmentDynamicLoaderService} from '../../shared/services/segment-dynamic-loader.service';
7
+ import * as Handlebars from 'handlebars';
8
+ import {I18nService} from '../../shared/services/i18n.service';
9
+ import { DecimalPipe } from "@angular/common";
10
+
11
+ @Component({
12
+ selector: 'app-print-section',
13
+ templateUrl: './print-section.component.html',
14
+ styleUrls: ['./print-section.component.scss'],
15
+ standalone: true,
16
+ schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],
17
+ })
18
+ export class PrintSectionComponent {
19
+
20
+ @Input() form: Form;
21
+
22
+ constructor(
23
+ public i18n: I18nService,
24
+ public segmentDynamicLoader: SegmentDynamicLoaderService,
25
+ ) { }
26
+
27
+ print() {
28
+ let compiledTemplate = null;
29
+ let popupWin: any;
30
+ popupWin = window.open('', '_blank', 'top=0,left=0,height=auto,width=auto');
31
+ let printObject = {
32
+ form: this.form,
33
+ i18n: this.i18n,
34
+ segmentDynamicLoader: this.segmentDynamicLoader,
35
+ lovs: this.form.lovs,
36
+ formId: this.form.header.formId
37
+ };
38
+
39
+ Handlebars.registerHelper('i18nTranslate', this.translateHelper);
40
+ Handlebars.registerHelper('dateFormat', this.dateFormatHelper);
41
+ Handlebars.registerHelper('dateFormatHelper3', this.dateFormatHelper3);
42
+ Handlebars.registerHelper('dateFormat2', this.dateFormatHelper2);
43
+ Handlebars.registerHelper('getPartialName', this.sectionIdHelper);
44
+ Handlebars.registerHelper('getSectionTitle', this.sectionTitleHelper);
45
+ Handlebars.registerHelper('consoleLog', this.consoleLog);
46
+ Handlebars.registerHelper('eq', this.eq);
47
+ Handlebars.registerHelper('getFormId', this.getFormId.bind(this));
48
+ Handlebars.registerHelper('getDirection', this.getDirection.bind(this));
49
+ Handlebars.registerHelper('and', this.and);
50
+ Handlebars.registerHelper('or', this.or);
51
+ Handlebars.registerHelper('not', this.not);
52
+ Handlebars.registerHelper('statusClass', this.statusClass);
53
+ Handlebars.registerHelper("currencyFormat", this.currencyFormat);
54
+
55
+ <% getPrintPartials().forEach(printPartial => { -%>
56
+ Handlebars.registerPartial(
57
+ "<%= printPartial.printPartialName %>",
58
+ printTemplate.<%= printPartial.printPartialName %>
59
+ );
60
+ <% }); -%>
61
+
62
+ compiledTemplate = Handlebars.compile(printTemplate.printTemplate);
63
+ popupWin.document.open();
64
+ popupWin.document.write(compiledTemplate(printObject));
65
+ popupWin.document.close();
66
+ }
67
+
68
+ public getCurrentLang() {
69
+ return this.i18n.getLanguage();
70
+ }
71
+
72
+ private sectionIdHelper(context: any, id: any) {
73
+ return context.segmentDynamicLoader.getPrintPartialName(id);
74
+ }
75
+
76
+ private translateHelper(key: any) {
77
+ return this.i18n.translate(key);
78
+ }
79
+
80
+ private dateFormatHelper(key: any) {
81
+ return moment(key).locale('en-US').format(Constants.DATE_TIME);
82
+ }
83
+
84
+ private dateFormatHelper2(key: any) {
85
+ return moment(key).locale('en-US').format(Constants.DATE_DASH);
86
+ }
87
+
88
+ private dateFormatHelper3(key: any) {
89
+ return moment(key).locale('en-US').format(Constants.DATE_SLASH);
90
+ }
91
+
92
+ private consoleLog(type: any) {
93
+ // <label>{{consolelog 'test'}}</label>
94
+ console.log('------------', type, '-----------------', this);
95
+ }
96
+
97
+ private getFormId() {
98
+ return this.form.header.formId;
99
+ }
100
+
101
+ private sectionTitleHelper(componentId: any, segmentDynamicLoader: any) {
102
+ return segmentDynamicLoader.getSectionName(componentId);
103
+ }
104
+
105
+ private eq(valueA: any, valueB: any) {
106
+ // {{#if (eq action.key 'MOVE')}}
107
+ let result = valueA === valueB;
108
+ return result;
109
+ }
110
+
111
+ private and(valueA: any, valueB: any) {
112
+ // {{#if (and (eq body.details.workRelation.key 'SUBCONTRACTOR') (eq body.details.workRelation.key 'CONTRACTOR'))}}
113
+ let result = valueA && valueB;
114
+ return result;
115
+ }
116
+
117
+ private or(valueA: any, valueB: any) {
118
+ // {{#if (or (eq body.details.workRelation.key 'SUBCONTRACTOR') (eq body.details.workRelation.key 'CONTRACTOR'))}}
119
+ let result = valueA || valueB;
120
+ return result;
121
+ }
122
+
123
+ private not(valueA: any, valueB: any) {
124
+ // {{#if (not action.key 'MOVE')}}
125
+ let result = valueA != valueB;
126
+ return result;
127
+ }
128
+
129
+
130
+ private statusClass(status: string) {
131
+ if (
132
+ status === Constants.FORM_STATUS_REJECTED || status === Constants.FORM_STATUS_CANCELLED
133
+ || status.toLowerCase() === 'reject' || status.toLowerCase() === 'unsatisfied' || status.toLowerCase() === 'cancel'
134
+ ) {
135
+ return 'danger';
136
+ } else if (status === Constants.FORM_STATUS_PENDING || status.toLowerCase() === 'pending') {
137
+ return 'warning';
138
+ } else {
139
+ return 'success';
140
+ }
141
+ }
142
+
143
+ private getDirection() {
144
+ if (this.i18n.getLanguage() === Constants.LANGUAGE_CODE_AR) {
145
+ return 'rtl';
146
+ } else {
147
+ return 'ltr';
148
+ }
149
+ }
150
+
151
+ private currencyFormat(value: number | string): string {
152
+ const decimalPipe = new DecimalPipe('en-US');
153
+ return decimalPipe.transform(value, '1.2-2');
154
+ }
155
+
156
+ }