verben-ticketing-ui 0.6.0
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.
- package/README.md +25 -0
- package/esm2022/public-api.mjs +9 -0
- package/esm2022/src/lib/components/add-ticket/add-ticket.component.mjs +306 -0
- package/esm2022/src/lib/components/add-ticket/add-ticket.module.mjs +98 -0
- package/esm2022/src/lib/components/add-ticket/index.mjs +2 -0
- package/esm2022/src/lib/components/add-ticket/public-api.mjs +3 -0
- package/esm2022/src/lib/components/add-ticket/verben-ticketing-ui-src-lib-components-add-ticket.mjs +5 -0
- package/esm2022/src/lib/components/file-render/file-render.component.mjs +34 -0
- package/esm2022/src/lib/components/file-render/file-render.module.mjs +94 -0
- package/esm2022/src/lib/components/file-render/index.mjs +2 -0
- package/esm2022/src/lib/components/file-render/public-api.mjs +3 -0
- package/esm2022/src/lib/components/file-render/verben-ticketing-ui-src-lib-components-file-render.mjs +5 -0
- package/esm2022/src/lib/components/ticketing/base-table-style.mjs +56 -0
- package/esm2022/src/lib/components/ticketing/index.mjs +2 -0
- package/esm2022/src/lib/components/ticketing/public-api.mjs +4 -0
- package/esm2022/src/lib/components/ticketing/ticketing.component.mjs +813 -0
- package/esm2022/src/lib/components/ticketing/ticketing.module.mjs +96 -0
- package/esm2022/src/lib/components/ticketing/ticketing.service.mjs +220 -0
- package/esm2022/src/lib/components/ticketing/verben-ticketing-ui-src-lib-components-ticketing.mjs +5 -0
- package/esm2022/src/lib/components/ticketing-detail/chat-control/chat-control.component.mjs +240 -0
- package/esm2022/src/lib/components/ticketing-detail/chat-control/chat-control.module.mjs +98 -0
- package/esm2022/src/lib/components/ticketing-detail/index.mjs +2 -0
- package/esm2022/src/lib/components/ticketing-detail/public-api.mjs +3 -0
- package/esm2022/src/lib/components/ticketing-detail/ticketing-detail.component.mjs +592 -0
- package/esm2022/src/lib/components/ticketing-detail/ticketing-detail.module.mjs +109 -0
- package/esm2022/src/lib/components/ticketing-detail/verben-ticketing-ui-src-lib-components-ticketing-detail.mjs +5 -0
- package/esm2022/src/lib/constants/index.mjs +2 -0
- package/esm2022/src/lib/constants/keynames.mjs +2 -0
- package/esm2022/src/lib/constants/pagesize.mjs +3 -0
- package/esm2022/src/lib/constants/public-api.mjs +3 -0
- package/esm2022/src/lib/constants/verben-ticketing-ui-src-lib-constants.mjs +5 -0
- package/esm2022/src/lib/models/Application.mjs +2 -0
- package/esm2022/src/lib/models/ApplicationRoleAction.mjs +2 -0
- package/esm2022/src/lib/models/ApplicationRoleContext.mjs +2 -0
- package/esm2022/src/lib/models/BaseModel.mjs +2 -0
- package/esm2022/src/lib/models/CacheDataRequest.mjs +2 -0
- package/esm2022/src/lib/models/Company.mjs +2 -0
- package/esm2022/src/lib/models/ErrorResponse.mjs +11 -0
- package/esm2022/src/lib/models/File.mjs +2 -0
- package/esm2022/src/lib/models/FilterTypes.mjs +9 -0
- package/esm2022/src/lib/models/HttpRequestType.mjs +8 -0
- package/esm2022/src/lib/models/KeyValueParam.mjs +2 -0
- package/esm2022/src/lib/models/ModelRelationship.mjs +2 -0
- package/esm2022/src/lib/models/OAuthParam.mjs +2 -0
- package/esm2022/src/lib/models/OAuthType.mjs +9 -0
- package/esm2022/src/lib/models/PagedResult.mjs +2 -0
- package/esm2022/src/lib/models/PasswordRequestParam.mjs +2 -0
- package/esm2022/src/lib/models/PermissionConfig.mjs +2 -0
- package/esm2022/src/lib/models/ResponseKeyValue.mjs +2 -0
- package/esm2022/src/lib/models/Role.mjs +2 -0
- package/esm2022/src/lib/models/RoleAction.mjs +2 -0
- package/esm2022/src/lib/models/RoleContext.mjs +2 -0
- package/esm2022/src/lib/models/Schedule.mjs +2 -0
- package/esm2022/src/lib/models/ScheduleType.mjs +6 -0
- package/esm2022/src/lib/models/SearchDynamicWrapper.mjs +2 -0
- package/esm2022/src/lib/models/SearchOperator.mjs +6 -0
- package/esm2022/src/lib/models/SearchPropertySign.mjs +11 -0
- package/esm2022/src/lib/models/SearchPropertyValue.mjs +2 -0
- package/esm2022/src/lib/models/SearchPropertyValueType.mjs +11 -0
- package/esm2022/src/lib/models/SortDirection.mjs +7 -0
- package/esm2022/src/lib/models/TaskUser.mjs +2 -0
- package/esm2022/src/lib/models/Tenant.mjs +2 -0
- package/esm2022/src/lib/models/TenantConfig.mjs +2 -0
- package/esm2022/src/lib/models/TenantPriority.mjs +2 -0
- package/esm2022/src/lib/models/Ticket.mjs +2 -0
- package/esm2022/src/lib/models/TicketMessage.mjs +2 -0
- package/esm2022/src/lib/models/TicketStatus.mjs +8 -0
- package/esm2022/src/lib/models/UserRequest.mjs +2 -0
- package/esm2022/src/lib/models/auth-mechanism.mjs +8 -0
- package/esm2022/src/lib/models/base.mjs +2 -0
- package/esm2022/src/lib/models/conditions.mjs +13 -0
- package/esm2022/src/lib/models/index.mjs +2 -0
- package/esm2022/src/lib/models/log-in.mjs +2 -0
- package/esm2022/src/lib/models/mainUser.mjs +2 -0
- package/esm2022/src/lib/models/oauth-resp.mjs +2 -0
- package/esm2022/src/lib/models/oauth-response.mjs +2 -0
- package/esm2022/src/lib/models/object-state.mjs +8 -0
- package/esm2022/src/lib/models/otpValue.mjs +2 -0
- package/esm2022/src/lib/models/paged.mjs +2 -0
- package/esm2022/src/lib/models/public-api.mjs +57 -0
- package/esm2022/src/lib/models/query-params.mjs +2 -0
- package/esm2022/src/lib/models/request-status.mjs +5 -0
- package/esm2022/src/lib/models/resend-otp-data.mjs +2 -0
- package/esm2022/src/lib/models/sign-up.mjs +2 -0
- package/esm2022/src/lib/models/single-sign-on.mjs +2 -0
- package/esm2022/src/lib/models/status.mjs +6 -0
- package/esm2022/src/lib/models/user-access-request-status.mjs +7 -0
- package/esm2022/src/lib/models/user-access-request.mjs +2 -0
- package/esm2022/src/lib/models/user-management.mjs +2 -0
- package/esm2022/src/lib/models/user.mjs +2 -0
- package/esm2022/src/lib/models/verben-ticketing-ui-src-lib-models.mjs +5 -0
- package/esm2022/src/lib/pipes/async-label.pipe.mjs +26 -0
- package/esm2022/src/lib/pipes/company-date.pipe.mjs +30 -0
- package/esm2022/src/lib/pipes/ellipse-word.pipe.mjs +23 -0
- package/esm2022/src/lib/pipes/index.mjs +2 -0
- package/esm2022/src/lib/pipes/public-api.mjs +4 -0
- package/esm2022/src/lib/pipes/verben-ticketing-ui-src-lib-pipes.mjs +5 -0
- package/esm2022/src/lib/services/company-settings.service.mjs +23 -0
- package/esm2022/src/lib/services/environment.service.mjs +26 -0
- package/esm2022/src/lib/services/http-web-request.service.mjs +100 -0
- package/esm2022/src/lib/services/import.service.mjs +247 -0
- package/esm2022/src/lib/services/index.mjs +2 -0
- package/esm2022/src/lib/services/label.service.mjs +261 -0
- package/esm2022/src/lib/services/public-api.mjs +8 -0
- package/esm2022/src/lib/services/shared.service.mjs +58 -0
- package/esm2022/src/lib/services/util.service.mjs +72 -0
- package/esm2022/src/lib/services/verben-ticketing-ui-src-lib-services.mjs +5 -0
- package/esm2022/src/utils/components/base-data-view.component.mjs +111 -0
- package/esm2022/src/utils/index.mjs +2 -0
- package/esm2022/src/utils/models/DataViewConfig.mjs +2 -0
- package/esm2022/src/utils/public-api.mjs +3 -0
- package/esm2022/src/utils/verben-ticketing-ui-src-utils.mjs +5 -0
- package/esm2022/verben-ticketing-ui.mjs +5 -0
- package/fesm2022/verben-ticketing-ui-src-lib-components-add-ticket.mjs +403 -0
- package/fesm2022/verben-ticketing-ui-src-lib-components-add-ticket.mjs.map +1 -0
- package/fesm2022/verben-ticketing-ui-src-lib-components-file-render.mjs +130 -0
- package/fesm2022/verben-ticketing-ui-src-lib-components-file-render.mjs.map +1 -0
- package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing-detail.mjs +1018 -0
- package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing-detail.mjs.map +1 -0
- package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing.mjs +1166 -0
- package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing.mjs.map +1 -0
- package/fesm2022/verben-ticketing-ui-src-lib-constants.mjs +11 -0
- package/fesm2022/verben-ticketing-ui-src-lib-constants.mjs.map +1 -0
- package/fesm2022/verben-ticketing-ui-src-lib-models.mjs +138 -0
- package/fesm2022/verben-ticketing-ui-src-lib-models.mjs.map +1 -0
- package/fesm2022/verben-ticketing-ui-src-lib-pipes.mjs +81 -0
- package/fesm2022/verben-ticketing-ui-src-lib-pipes.mjs.map +1 -0
- package/fesm2022/verben-ticketing-ui-src-lib-services.mjs +770 -0
- package/fesm2022/verben-ticketing-ui-src-lib-services.mjs.map +1 -0
- package/fesm2022/verben-ticketing-ui-src-utils.mjs +118 -0
- package/fesm2022/verben-ticketing-ui-src-utils.mjs.map +1 -0
- package/fesm2022/verben-ticketing-ui.mjs +14 -0
- package/fesm2022/verben-ticketing-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +82 -0
- package/public-api.d.ts +4 -0
- package/src/lib/components/add-ticket/add-ticket.component.d.ts +44 -0
- package/src/lib/components/add-ticket/add-ticket.module.d.ts +15 -0
- package/src/lib/components/add-ticket/index.d.ts +1 -0
- package/src/lib/components/add-ticket/public-api.d.ts +2 -0
- package/src/lib/components/file-render/file-render.component.d.ts +14 -0
- package/src/lib/components/file-render/file-render.module.d.ts +14 -0
- package/src/lib/components/file-render/index.d.ts +1 -0
- package/src/lib/components/file-render/public-api.d.ts +2 -0
- package/src/lib/components/ticketing/base-table-style.d.ts +1 -0
- package/src/lib/components/ticketing/index.d.ts +1 -0
- package/src/lib/components/ticketing/public-api.d.ts +3 -0
- package/src/lib/components/ticketing/ticketing.component.d.ts +100 -0
- package/src/lib/components/ticketing/ticketing.module.d.ts +12 -0
- package/src/lib/components/ticketing/ticketing.service.d.ts +27 -0
- package/src/lib/components/ticketing-detail/chat-control/chat-control.component.d.ts +47 -0
- package/src/lib/components/ticketing-detail/chat-control/chat-control.module.d.ts +15 -0
- package/src/lib/components/ticketing-detail/index.d.ts +1 -0
- package/src/lib/components/ticketing-detail/public-api.d.ts +2 -0
- package/src/lib/components/ticketing-detail/ticketing-detail.component.d.ts +77 -0
- package/src/lib/components/ticketing-detail/ticketing-detail.module.d.ts +17 -0
- package/src/lib/constants/index.d.ts +1 -0
- package/src/lib/constants/keynames.d.ts +1 -0
- package/src/lib/constants/pagesize.d.ts +2 -0
- package/src/lib/constants/public-api.d.ts +2 -0
- package/src/lib/models/Application.d.ts +5 -0
- package/src/lib/models/ApplicationRoleAction.d.ts +9 -0
- package/src/lib/models/ApplicationRoleContext.d.ts +9 -0
- package/src/lib/models/BaseModel.d.ts +14 -0
- package/src/lib/models/CacheDataRequest.d.ts +7 -0
- package/src/lib/models/Company.d.ts +22 -0
- package/src/lib/models/ErrorResponse.d.ts +6 -0
- package/src/lib/models/File.d.ts +7 -0
- package/src/lib/models/FilterTypes.d.ts +6 -0
- package/src/lib/models/HttpRequestType.d.ts +6 -0
- package/src/lib/models/KeyValueParam.d.ts +5 -0
- package/src/lib/models/ModelRelationship.d.ts +7 -0
- package/src/lib/models/OAuthParam.d.ts +9 -0
- package/src/lib/models/OAuthType.d.ts +7 -0
- package/src/lib/models/PagedResult.d.ts +9 -0
- package/src/lib/models/PasswordRequestParam.d.ts +5 -0
- package/src/lib/models/PermissionConfig.d.ts +7 -0
- package/src/lib/models/ResponseKeyValue.d.ts +5 -0
- package/src/lib/models/Role.d.ts +9 -0
- package/src/lib/models/RoleAction.d.ts +10 -0
- package/src/lib/models/RoleContext.d.ts +10 -0
- package/src/lib/models/Schedule.d.ts +22 -0
- package/src/lib/models/ScheduleType.d.ts +4 -0
- package/src/lib/models/SearchDynamicWrapper.d.ts +7 -0
- package/src/lib/models/SearchOperator.d.ts +4 -0
- package/src/lib/models/SearchPropertySign.d.ts +9 -0
- package/src/lib/models/SearchPropertyValue.d.ts +14 -0
- package/src/lib/models/SearchPropertyValueType.d.ts +9 -0
- package/src/lib/models/SortDirection.d.ts +5 -0
- package/src/lib/models/TaskUser.d.ts +10 -0
- package/src/lib/models/Tenant.d.ts +22 -0
- package/src/lib/models/TenantConfig.d.ts +20 -0
- package/src/lib/models/TenantPriority.d.ts +10 -0
- package/src/lib/models/Ticket.d.ts +21 -0
- package/src/lib/models/TicketMessage.d.ts +11 -0
- package/src/lib/models/TicketStatus.d.ts +6 -0
- package/src/lib/models/UserRequest.d.ts +32 -0
- package/src/lib/models/auth-mechanism.d.ts +14 -0
- package/src/lib/models/base.d.ts +12 -0
- package/src/lib/models/conditions.d.ts +11 -0
- package/src/lib/models/index.d.ts +1 -0
- package/src/lib/models/log-in.d.ts +8 -0
- package/src/lib/models/mainUser.d.ts +19 -0
- package/src/lib/models/oauth-resp.d.ts +6 -0
- package/src/lib/models/oauth-response.d.ts +6 -0
- package/src/lib/models/object-state.d.ts +6 -0
- package/src/lib/models/otpValue.d.ts +9 -0
- package/src/lib/models/paged.d.ts +9 -0
- package/src/lib/models/public-api.d.ts +56 -0
- package/src/lib/models/query-params.d.ts +7 -0
- package/src/lib/models/request-status.d.ts +3 -0
- package/src/lib/models/resend-otp-data.d.ts +8 -0
- package/src/lib/models/sign-up.d.ts +9 -0
- package/src/lib/models/single-sign-on.d.ts +7 -0
- package/src/lib/models/status.d.ts +4 -0
- package/src/lib/models/user-access-request-status.d.ts +5 -0
- package/src/lib/models/user-access-request.d.ts +9 -0
- package/src/lib/models/user-management.d.ts +8 -0
- package/src/lib/models/user.d.ts +24 -0
- package/src/lib/pipes/async-label.pipe.d.ts +11 -0
- package/src/lib/pipes/company-date.pipe.d.ts +10 -0
- package/src/lib/pipes/ellipse-word.pipe.d.ts +8 -0
- package/src/lib/pipes/index.d.ts +1 -0
- package/src/lib/pipes/public-api.d.ts +3 -0
- package/src/lib/services/company-settings.service.d.ts +11 -0
- package/src/lib/services/environment.service.d.ts +22 -0
- package/src/lib/services/http-web-request.service.d.ts +24 -0
- package/src/lib/services/import.service.d.ts +14 -0
- package/src/lib/services/index.d.ts +1 -0
- package/src/lib/services/label.service.d.ts +24 -0
- package/src/lib/services/public-api.d.ts +7 -0
- package/src/lib/services/shared.service.d.ts +16 -0
- package/src/lib/services/util.service.d.ts +15 -0
- package/src/utils/components/base-data-view.component.d.ts +34 -0
- package/src/utils/index.d.ts +1 -0
- package/src/utils/models/DataViewConfig.d.ts +11 -0
- package/src/utils/public-api.d.ts +2 -0
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, Component, Input, Output, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/forms';
|
|
4
|
+
import { FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { TicketStatus, ObjectState, ErrorResponse } from 'verben-ticketing-ui/src/lib/models';
|
|
6
|
+
import { DEFAULT_MESSAGE_FOR_INITIAL_UPLOAD } from 'verben-ticketing-ui/src/lib/constants';
|
|
7
|
+
import * as i2 from 'verben-ticketing-ui/src/lib/services';
|
|
8
|
+
import * as i3 from '@angular/common';
|
|
9
|
+
import { CommonModule } from '@angular/common';
|
|
10
|
+
import * as i4 from 'verben-ng-ui';
|
|
11
|
+
import { DataTableModule, SvgModule, VerbenPopUpModule, DataViewModule, VerbenaButtonModule, CardDataViewModule, DropDownModule, VerbenaSwitchModule, TableFilterModule, VisibleColumnModule, SortTableModule, DataExportModule, TooltipModule, VerbenDialogueModule, VerbenaInputModule, DataImportModule, DataXportModule } from 'verben-ng-ui';
|
|
12
|
+
import * as i5 from 'verben-ticketing-ui/src/lib/components/file-render';
|
|
13
|
+
import { FileRenderLibModule } from 'verben-ticketing-ui/src/lib/components/file-render';
|
|
14
|
+
import * as i1$1 from '@angular/router';
|
|
15
|
+
import { RouterModule } from '@angular/router';
|
|
16
|
+
import { EllipseWordPipe, CompanyDatePipe } from 'verben-ticketing-ui/src/lib/pipes';
|
|
17
|
+
|
|
18
|
+
class AddTicketComponent {
|
|
19
|
+
fb;
|
|
20
|
+
utilService;
|
|
21
|
+
server;
|
|
22
|
+
sharedService;
|
|
23
|
+
envSvc;
|
|
24
|
+
// test: string = '';
|
|
25
|
+
// logTest() {
|
|
26
|
+
// console.log({ Test: this.test });
|
|
27
|
+
// }
|
|
28
|
+
createTicketForm;
|
|
29
|
+
activeApp = null;
|
|
30
|
+
activeTenant = null;
|
|
31
|
+
selectedTicket = null;
|
|
32
|
+
isVisible = false;
|
|
33
|
+
onOpen = new EventEmitter();
|
|
34
|
+
onClose = new EventEmitter();
|
|
35
|
+
onSave = new EventEmitter();
|
|
36
|
+
priorityOptions = [];
|
|
37
|
+
statusOptions = Object.keys(TicketStatus);
|
|
38
|
+
fileData = [];
|
|
39
|
+
fileUrls = [];
|
|
40
|
+
//attachedMessage: TicketMessage | null = null;
|
|
41
|
+
maxFileSize = 15 * 1024 * 1024;
|
|
42
|
+
defaultCompany = '';
|
|
43
|
+
constructor(fb, utilService, server, sharedService, envSvc) {
|
|
44
|
+
this.fb = fb;
|
|
45
|
+
this.utilService = utilService;
|
|
46
|
+
this.server = server;
|
|
47
|
+
this.sharedService = sharedService;
|
|
48
|
+
this.envSvc = envSvc;
|
|
49
|
+
this.createTicketForm = this.fb.group({
|
|
50
|
+
Title: new FormControl(null, Validators.required),
|
|
51
|
+
Description: new FormControl(null, Validators.required),
|
|
52
|
+
CurrentHandler: new FormControl({
|
|
53
|
+
value: null,
|
|
54
|
+
disabled: true,
|
|
55
|
+
}),
|
|
56
|
+
LastHandler: new FormControl({
|
|
57
|
+
value: null,
|
|
58
|
+
disabled: true,
|
|
59
|
+
}),
|
|
60
|
+
Priority: new FormControl(null, Validators.required),
|
|
61
|
+
Status: new FormControl({ value: TicketStatus.Pending, disabled: true }, Validators.required),
|
|
62
|
+
});
|
|
63
|
+
// this.createTicketForm.controls['CurrentHandler'].disable();
|
|
64
|
+
// this.createTicketForm.controls['LastHandler'].disable();
|
|
65
|
+
}
|
|
66
|
+
ngOnInit() { }
|
|
67
|
+
async ngOnChanges(changes) {
|
|
68
|
+
if (changes['selectedTicket'] && this.selectedTicket) {
|
|
69
|
+
this.createTicketForm.patchValue({
|
|
70
|
+
Title: this.selectedTicket.Title,
|
|
71
|
+
Description: this.selectedTicket.Description,
|
|
72
|
+
CurrentHandler: this.selectedTicket.CurrentHandler,
|
|
73
|
+
LastHandler: this.selectedTicket.LastHandler,
|
|
74
|
+
Priority: this.selectedTicket.Priority,
|
|
75
|
+
Status: this.selectedTicket.Status,
|
|
76
|
+
});
|
|
77
|
+
this.fileUrls = [...this.selectedTicket.FileUrls];
|
|
78
|
+
this.fileData = [];
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.createTicketForm.patchValue({
|
|
82
|
+
Title: null,
|
|
83
|
+
Description: null,
|
|
84
|
+
CurrentHandler: null,
|
|
85
|
+
LastHandler: null,
|
|
86
|
+
Priority: null,
|
|
87
|
+
Status: TicketStatus.Pending,
|
|
88
|
+
});
|
|
89
|
+
this.fileUrls = [];
|
|
90
|
+
this.fileData = [];
|
|
91
|
+
}
|
|
92
|
+
if (changes['activeTenant'] && this.activeTenant) {
|
|
93
|
+
const options = await this.sharedService.getAllPrioritiesForTenant(this.activeTenant);
|
|
94
|
+
if (options) {
|
|
95
|
+
this.priorityOptions = options.Result;
|
|
96
|
+
}
|
|
97
|
+
console.log({ Changed: this.priorityOptions });
|
|
98
|
+
}
|
|
99
|
+
else if (changes['activeTenant'] && !this.activeTenant) {
|
|
100
|
+
this.priorityOptions = [];
|
|
101
|
+
// console.log({ Tenant: this.activeTenant, Reset: this.priorityOptions });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
checkForm() {
|
|
105
|
+
if (this.createTicketForm.valid == true) {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
onModalOpen(event) {
|
|
111
|
+
this.onOpen.emit();
|
|
112
|
+
}
|
|
113
|
+
onModalClose(event) {
|
|
114
|
+
this.onClose.emit(event);
|
|
115
|
+
}
|
|
116
|
+
// filterMessage(message: TicketMessage): TicketMessage {
|
|
117
|
+
// return {
|
|
118
|
+
// ...message,
|
|
119
|
+
// AttachmentUrls: message.AttachmentUrls.filter(
|
|
120
|
+
// (x) => x.split('/').length > 1
|
|
121
|
+
// ),
|
|
122
|
+
// };
|
|
123
|
+
// }
|
|
124
|
+
async save() {
|
|
125
|
+
if (!this.activeApp) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (!this.activeTenant) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
// if (this.selectedTicket && this.attachedMessage) {
|
|
132
|
+
// if (idx > -1) {
|
|
133
|
+
// this.selectedTicket.Messages[idx] = this.filterMessage(
|
|
134
|
+
// this.attachedMessage
|
|
135
|
+
// );
|
|
136
|
+
// } else {
|
|
137
|
+
// if (this.attachedMessage.Attachments.length > 0) {
|
|
138
|
+
// this.selectedTicket.Messages.unshift(
|
|
139
|
+
// this.filterMessage(this.attachedMessage)
|
|
140
|
+
// );
|
|
141
|
+
// }
|
|
142
|
+
// }
|
|
143
|
+
// }
|
|
144
|
+
const item = {
|
|
145
|
+
Title: this.createTicketForm.controls['Title'].value,
|
|
146
|
+
Description: this.createTicketForm.controls['Description'].value,
|
|
147
|
+
CurrentHandler: this.selectedTicket
|
|
148
|
+
? this.selectedTicket.CurrentHandler
|
|
149
|
+
: undefined,
|
|
150
|
+
LastHandler: this.selectedTicket
|
|
151
|
+
? this.selectedTicket.LastHandler
|
|
152
|
+
: undefined,
|
|
153
|
+
Priority: this.createTicketForm.controls['Priority'].value,
|
|
154
|
+
App: this.activeApp,
|
|
155
|
+
id: '',
|
|
156
|
+
Status: this.createTicketForm.controls['Status'].value,
|
|
157
|
+
Company: this.defaultCompany,
|
|
158
|
+
Messages: this.selectedTicket ? this.selectedTicket.Messages : [],
|
|
159
|
+
FileData: this.fileData,
|
|
160
|
+
FileUrls: this.selectedTicket ? this.selectedTicket.FileUrls : [],
|
|
161
|
+
Id: '',
|
|
162
|
+
ExecutionTime: this.selectedTicket
|
|
163
|
+
? this.selectedTicket.ExecutionTime
|
|
164
|
+
: undefined,
|
|
165
|
+
Code: this.selectedTicket ? this.selectedTicket.Code : '',
|
|
166
|
+
TenantId: this.selectedTicket
|
|
167
|
+
? this.selectedTicket.TenantId
|
|
168
|
+
: this.activeTenant,
|
|
169
|
+
ServiceName: this.selectedTicket ? this.selectedTicket.ServiceName : '',
|
|
170
|
+
CreatedAt: this.selectedTicket
|
|
171
|
+
? this.selectedTicket.CreatedAt
|
|
172
|
+
: new Date(),
|
|
173
|
+
UpdatedAt: new Date(),
|
|
174
|
+
DataState: this.selectedTicket ? ObjectState.Changed : ObjectState.New,
|
|
175
|
+
};
|
|
176
|
+
if (item.Description.trim().length == 0) {
|
|
177
|
+
this.utilService.showInfo('Description cannot be empty');
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
this.utilService.sendBI(true);
|
|
181
|
+
const res = await this.server.post(`Ticket/SaveTicket`, [item], this.envSvc.environment.TicketingAPI);
|
|
182
|
+
this.utilService.sendBI(false);
|
|
183
|
+
if (res instanceof ErrorResponse) {
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
this.utilService.showSuccess('Ticket saved successfully');
|
|
187
|
+
const result = res;
|
|
188
|
+
if (result.length > 0) {
|
|
189
|
+
var resultItem = result[0];
|
|
190
|
+
this.onSave.emit(resultItem);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
this.onClose.emit();
|
|
194
|
+
}
|
|
195
|
+
generateSixDigitNumber() {
|
|
196
|
+
return Math.floor(100000 + Math.random() * 900000);
|
|
197
|
+
}
|
|
198
|
+
getTicketMessage() {
|
|
199
|
+
if (this.selectedTicket) {
|
|
200
|
+
const initialMessage = this.selectedTicket.Messages.find((x) => x.Subject == DEFAULT_MESSAGE_FOR_INITIAL_UPLOAD);
|
|
201
|
+
if (initialMessage) {
|
|
202
|
+
return { ...initialMessage, DataState: ObjectState.Changed };
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
const newMessage = {
|
|
206
|
+
TicketCode: '',
|
|
207
|
+
Subject: DEFAULT_MESSAGE_FOR_INITIAL_UPLOAD,
|
|
208
|
+
Content: '',
|
|
209
|
+
Attachments: [],
|
|
210
|
+
AttachmentUrls: [],
|
|
211
|
+
Company: this.defaultCompany,
|
|
212
|
+
Id: '',
|
|
213
|
+
Code: '',
|
|
214
|
+
TenantId: '',
|
|
215
|
+
id: '',
|
|
216
|
+
ServiceName: '',
|
|
217
|
+
CreatedAt: new Date(),
|
|
218
|
+
UpdatedAt: new Date(),
|
|
219
|
+
DataState: ObjectState.New,
|
|
220
|
+
};
|
|
221
|
+
return newMessage;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
const newMessage = {
|
|
226
|
+
TicketCode: '',
|
|
227
|
+
Subject: DEFAULT_MESSAGE_FOR_INITIAL_UPLOAD,
|
|
228
|
+
Content: '',
|
|
229
|
+
Attachments: [],
|
|
230
|
+
AttachmentUrls: [],
|
|
231
|
+
Company: this.defaultCompany,
|
|
232
|
+
Id: '',
|
|
233
|
+
id: '',
|
|
234
|
+
Code: '',
|
|
235
|
+
TenantId: '',
|
|
236
|
+
ServiceName: '',
|
|
237
|
+
CreatedAt: new Date(),
|
|
238
|
+
UpdatedAt: new Date(),
|
|
239
|
+
DataState: ObjectState.New,
|
|
240
|
+
};
|
|
241
|
+
return newMessage;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
triggerFileUpload() {
|
|
245
|
+
const fileInput = document.createElement('input');
|
|
246
|
+
fileInput.type = 'file';
|
|
247
|
+
fileInput.accept = '.png, .jpg, .jpeg, .pdf';
|
|
248
|
+
fileInput.style.display = 'none'; // Hidden file input
|
|
249
|
+
document.body.appendChild(fileInput); // Temporarily add to DOM
|
|
250
|
+
fileInput.addEventListener('change', () => {
|
|
251
|
+
const file = fileInput.files?.[0];
|
|
252
|
+
if (file) {
|
|
253
|
+
this.processFile(file);
|
|
254
|
+
}
|
|
255
|
+
document.body.removeChild(fileInput); // Clean up after use
|
|
256
|
+
});
|
|
257
|
+
fileInput.click(); // Programmatically trigger click
|
|
258
|
+
}
|
|
259
|
+
async processFile(selectedFile) {
|
|
260
|
+
// Check file size
|
|
261
|
+
if (selectedFile.size > this.maxFileSize) {
|
|
262
|
+
const limitInMB = this.maxFileSize / 1024 / 1024;
|
|
263
|
+
this.utilService.showInfo(`File size limit of ${limitInMB}mb exceeded`);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
// let fileToProcess: globalThis.File | null = selectedFile;
|
|
267
|
+
// const safeNumber: number = 1 * 1024 * 1024;
|
|
268
|
+
// if (fileToProcess.size > safeNumber) {
|
|
269
|
+
// fileToProcess = await this.utilService.compressImage(selectedFile);
|
|
270
|
+
// if (!fileToProcess) {
|
|
271
|
+
// this.utilService.showError('Error compressing image');
|
|
272
|
+
// return;
|
|
273
|
+
// }
|
|
274
|
+
// }
|
|
275
|
+
// Read file and convert to base64
|
|
276
|
+
const reader = new FileReader();
|
|
277
|
+
reader.readAsDataURL(selectedFile);
|
|
278
|
+
reader.onload = () => {
|
|
279
|
+
const base64data = reader.result;
|
|
280
|
+
const file = this.sharedService.createCustomFile(base64data, 0, selectedFile);
|
|
281
|
+
if (file) {
|
|
282
|
+
this.fileData.push(file);
|
|
283
|
+
this.fileUrls.push(`${file.Name}`);
|
|
284
|
+
// this.profileImage = base64data;
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AddTicketComponent, deps: [{ token: i1.FormBuilder }, { token: i2.UtilService }, { token: i2.HttpWebRequestService }, { token: i2.SharedService }, { token: i2.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
289
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AddTicketComponent, selector: "app-add-ticket", inputs: { activeApp: "activeApp", activeTenant: "activeTenant", selectedTicket: "selectedTicket", isVisible: "isVisible", defaultCompany: "defaultCompany" }, outputs: { onOpen: "onOpen", onClose: "onClose", onSave: "onSave" }, usesOnChanges: true, ngImport: i0, template: "<verben-dialogue\n [showCloseIcon]=\"false\"\n [dismissOutsideClick]=\"false\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'ticket-dialog'\"\n [disableFooter]=\"true\"\n (openModal)=\"onModalOpen($event)\"\n [isVisible]=\"isVisible\"\n [bodyTemplate]=\"bodyTemplate\"\n (closeModal)=\"onModalClose($event)\"\n>\n <ng-template #bodyTemplate>\n <div class=\"dialog-body p-[25px] flex flex-col gap-4\">\n <div class=\"dialog-header flex flex-col gap-1\">\n <div class=\"dialog-title font-bold text-xl\">\n {{ this.selectedTicket ? \"Edit Ticket\" : \"Create Ticket\" }}\n </div>\n <div class=\"dialog-subtitle\">\n {{\n this.selectedTicket\n ? \"Fill the form below to edit selected ticket\"\n : \"Fill the form below to create a ticket\"\n }}\n </div>\n </div>\n <!-- <verbena-textarea name=\"Test\" [(ngModel)]=\"test\" />\n <button (click)=\"logTest()\">Log</button> -->\n <div\n [formGroup]=\"createTicketForm\"\n class=\"add-app-form main-form-container flex flex-col gap-2\"\n >\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Title</div>\n <verbena-input\n name=\"Title\"\n placeHolder=\"Title\"\n formControlName=\"Title\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Description</div>\n <verbena-input name=\"Description\" formControlName=\"Description\" />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Current Handler</div>\n <verbena-input\n name=\"CurrentHandler\"\n placeHolder=\"Current Handler\"\n formControlName=\"CurrentHandler\"\n />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Last Handler</div>\n <verbena-input\n name=\"LastHandler\"\n placeHolder=\"Last Handler\"\n formControlName=\"LastHandler\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Priority</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Priority\"\n placeholder=\"Select Priority\"\n [options]=\"priorityOptions\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n formControlName=\"Priority\"\n >\n </verben-drop-down>\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Status</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Status\"\n [disabled]=\"true\"\n placeholder=\"Select Status\"\n [options]=\"statusOptions\"\n formControlName=\"Status\"\n >\n </verben-drop-down>\n </div>\n <div class=\"attachment-section p-2 flex flex-col gap-3\">\n <div class=\"attachments-container grid grid-cols-3 gap-2\">\n <ng-container *ngFor=\"let file of this.fileUrls\">\n <app-file-render [fileUrl]=\"file\"></app-file-render>\n </ng-container>\n </div>\n <div\n class=\"upload-section flex flex-col flex-1 items-center justify-center gap-2\"\n >\n <div class=\"flex justify-center\">\n <verbena-button\n [useIcon]=\"true\"\n [icon]=\"'upload'\"\n class=\"verben-secondary-button\"\n [text]=\"'Upload'\"\n (click)=\"triggerFileUpload()\"\n ></verbena-button>\n </div>\n <div class=\"upload-caption text-sm text-center\">\n Include Attachments\n </div>\n </div>\n </div>\n </div>\n <div class=\"dialog-button-container flex justify-end gap-2\">\n <verbena-button\n width=\"100%\"\n class=\"verben-secondary-button\"\n [text]=\"'Close'\"\n (click)=\"onModalClose($event)\"\n >\n </verbena-button>\n <verbena-button\n [disable]=\"!this.checkForm()\"\n width=\"100%\"\n class=\"verben-primary-button\"\n [text]=\"'Save'\"\n (click)=\"save()\"\n >\n </verbena-button>\n </div>\n </div>\n </ng-template>\n</verben-dialogue>\n", styles: [".attachment-section{border:1px solid #ccc6fbb2;border-radius:5px}::ng-deep .ticket-dialog{max-width:60vw}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i4.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i5.FileRenderComponent, selector: "app-file-render", inputs: ["fileUrl"] }] });
|
|
290
|
+
}
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AddTicketComponent, decorators: [{
|
|
292
|
+
type: Component,
|
|
293
|
+
args: [{ selector: 'app-add-ticket', template: "<verben-dialogue\n [showCloseIcon]=\"false\"\n [dismissOutsideClick]=\"false\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'ticket-dialog'\"\n [disableFooter]=\"true\"\n (openModal)=\"onModalOpen($event)\"\n [isVisible]=\"isVisible\"\n [bodyTemplate]=\"bodyTemplate\"\n (closeModal)=\"onModalClose($event)\"\n>\n <ng-template #bodyTemplate>\n <div class=\"dialog-body p-[25px] flex flex-col gap-4\">\n <div class=\"dialog-header flex flex-col gap-1\">\n <div class=\"dialog-title font-bold text-xl\">\n {{ this.selectedTicket ? \"Edit Ticket\" : \"Create Ticket\" }}\n </div>\n <div class=\"dialog-subtitle\">\n {{\n this.selectedTicket\n ? \"Fill the form below to edit selected ticket\"\n : \"Fill the form below to create a ticket\"\n }}\n </div>\n </div>\n <!-- <verbena-textarea name=\"Test\" [(ngModel)]=\"test\" />\n <button (click)=\"logTest()\">Log</button> -->\n <div\n [formGroup]=\"createTicketForm\"\n class=\"add-app-form main-form-container flex flex-col gap-2\"\n >\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Title</div>\n <verbena-input\n name=\"Title\"\n placeHolder=\"Title\"\n formControlName=\"Title\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Description</div>\n <verbena-input name=\"Description\" formControlName=\"Description\" />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Current Handler</div>\n <verbena-input\n name=\"CurrentHandler\"\n placeHolder=\"Current Handler\"\n formControlName=\"CurrentHandler\"\n />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Last Handler</div>\n <verbena-input\n name=\"LastHandler\"\n placeHolder=\"Last Handler\"\n formControlName=\"LastHandler\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Priority</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Priority\"\n placeholder=\"Select Priority\"\n [options]=\"priorityOptions\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n formControlName=\"Priority\"\n >\n </verben-drop-down>\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Status</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Status\"\n [disabled]=\"true\"\n placeholder=\"Select Status\"\n [options]=\"statusOptions\"\n formControlName=\"Status\"\n >\n </verben-drop-down>\n </div>\n <div class=\"attachment-section p-2 flex flex-col gap-3\">\n <div class=\"attachments-container grid grid-cols-3 gap-2\">\n <ng-container *ngFor=\"let file of this.fileUrls\">\n <app-file-render [fileUrl]=\"file\"></app-file-render>\n </ng-container>\n </div>\n <div\n class=\"upload-section flex flex-col flex-1 items-center justify-center gap-2\"\n >\n <div class=\"flex justify-center\">\n <verbena-button\n [useIcon]=\"true\"\n [icon]=\"'upload'\"\n class=\"verben-secondary-button\"\n [text]=\"'Upload'\"\n (click)=\"triggerFileUpload()\"\n ></verbena-button>\n </div>\n <div class=\"upload-caption text-sm text-center\">\n Include Attachments\n </div>\n </div>\n </div>\n </div>\n <div class=\"dialog-button-container flex justify-end gap-2\">\n <verbena-button\n width=\"100%\"\n class=\"verben-secondary-button\"\n [text]=\"'Close'\"\n (click)=\"onModalClose($event)\"\n >\n </verbena-button>\n <verbena-button\n [disable]=\"!this.checkForm()\"\n width=\"100%\"\n class=\"verben-primary-button\"\n [text]=\"'Save'\"\n (click)=\"save()\"\n >\n </verbena-button>\n </div>\n </div>\n </ng-template>\n</verben-dialogue>\n", styles: [".attachment-section{border:1px solid #ccc6fbb2;border-radius:5px}::ng-deep .ticket-dialog{max-width:60vw}\n"] }]
|
|
294
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.UtilService }, { type: i2.HttpWebRequestService }, { type: i2.SharedService }, { type: i2.EnvironmentService }], propDecorators: { activeApp: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}], activeTenant: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], selectedTicket: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], isVisible: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], onOpen: [{
|
|
303
|
+
type: Output
|
|
304
|
+
}], onClose: [{
|
|
305
|
+
type: Output
|
|
306
|
+
}], onSave: [{
|
|
307
|
+
type: Output
|
|
308
|
+
}], defaultCompany: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}] } });
|
|
311
|
+
|
|
312
|
+
const appRoutes = [];
|
|
313
|
+
class AddTicketLibModule {
|
|
314
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AddTicketLibModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
315
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AddTicketLibModule, declarations: [AddTicketComponent], imports: [CommonModule,
|
|
316
|
+
FormsModule,
|
|
317
|
+
ReactiveFormsModule,
|
|
318
|
+
DataTableModule,
|
|
319
|
+
SvgModule,
|
|
320
|
+
VerbenPopUpModule,
|
|
321
|
+
DataViewModule,
|
|
322
|
+
VerbenaButtonModule,
|
|
323
|
+
CardDataViewModule,
|
|
324
|
+
DropDownModule,
|
|
325
|
+
VerbenaSwitchModule,
|
|
326
|
+
TableFilterModule,
|
|
327
|
+
VisibleColumnModule,
|
|
328
|
+
SortTableModule,
|
|
329
|
+
DataExportModule,
|
|
330
|
+
TooltipModule,
|
|
331
|
+
VerbenDialogueModule,
|
|
332
|
+
VerbenaInputModule,
|
|
333
|
+
DataImportModule,
|
|
334
|
+
DataExportModule,
|
|
335
|
+
DataXportModule,
|
|
336
|
+
EllipseWordPipe,
|
|
337
|
+
FileRenderLibModule,
|
|
338
|
+
CompanyDatePipe, i1$1.RouterModule], exports: [AddTicketComponent] });
|
|
339
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AddTicketLibModule, imports: [CommonModule,
|
|
340
|
+
FormsModule,
|
|
341
|
+
ReactiveFormsModule,
|
|
342
|
+
DataTableModule,
|
|
343
|
+
SvgModule,
|
|
344
|
+
VerbenPopUpModule,
|
|
345
|
+
DataViewModule,
|
|
346
|
+
VerbenaButtonModule,
|
|
347
|
+
CardDataViewModule,
|
|
348
|
+
DropDownModule,
|
|
349
|
+
VerbenaSwitchModule,
|
|
350
|
+
TableFilterModule,
|
|
351
|
+
VisibleColumnModule,
|
|
352
|
+
SortTableModule,
|
|
353
|
+
DataExportModule,
|
|
354
|
+
TooltipModule,
|
|
355
|
+
VerbenDialogueModule,
|
|
356
|
+
VerbenaInputModule,
|
|
357
|
+
DataImportModule,
|
|
358
|
+
DataExportModule,
|
|
359
|
+
DataXportModule,
|
|
360
|
+
FileRenderLibModule,
|
|
361
|
+
RouterModule.forChild(appRoutes)] });
|
|
362
|
+
}
|
|
363
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AddTicketLibModule, decorators: [{
|
|
364
|
+
type: NgModule,
|
|
365
|
+
args: [{
|
|
366
|
+
declarations: [AddTicketComponent],
|
|
367
|
+
imports: [
|
|
368
|
+
CommonModule,
|
|
369
|
+
FormsModule,
|
|
370
|
+
ReactiveFormsModule,
|
|
371
|
+
DataTableModule,
|
|
372
|
+
SvgModule,
|
|
373
|
+
VerbenPopUpModule,
|
|
374
|
+
DataViewModule,
|
|
375
|
+
VerbenaButtonModule,
|
|
376
|
+
CardDataViewModule,
|
|
377
|
+
DropDownModule,
|
|
378
|
+
VerbenaSwitchModule,
|
|
379
|
+
TableFilterModule,
|
|
380
|
+
VisibleColumnModule,
|
|
381
|
+
SortTableModule,
|
|
382
|
+
DataExportModule,
|
|
383
|
+
TooltipModule,
|
|
384
|
+
VerbenDialogueModule,
|
|
385
|
+
VerbenaInputModule,
|
|
386
|
+
DataImportModule,
|
|
387
|
+
DataExportModule,
|
|
388
|
+
DataXportModule,
|
|
389
|
+
EllipseWordPipe,
|
|
390
|
+
FileRenderLibModule,
|
|
391
|
+
CompanyDatePipe,
|
|
392
|
+
RouterModule.forChild(appRoutes),
|
|
393
|
+
],
|
|
394
|
+
exports: [AddTicketComponent],
|
|
395
|
+
}]
|
|
396
|
+
}] });
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* Generated bundle index. Do not edit.
|
|
400
|
+
*/
|
|
401
|
+
|
|
402
|
+
export { AddTicketComponent, AddTicketLibModule, appRoutes };
|
|
403
|
+
//# sourceMappingURL=verben-ticketing-ui-src-lib-components-add-ticket.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verben-ticketing-ui-src-lib-components-add-ticket.mjs","sources":["../../../projects/verben-ticketing-ui/src/lib/components/add-ticket/add-ticket.component.ts","../../../projects/verben-ticketing-ui/src/lib/components/add-ticket/add-ticket.component.html","../../../projects/verben-ticketing-ui/src/lib/components/add-ticket/add-ticket.module.ts","../../../projects/verben-ticketing-ui/src/lib/components/add-ticket/verben-ticketing-ui-src-lib-components-add-ticket.ts"],"sourcesContent":["import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n} from '@angular/forms';\nimport { Application } from 'verben-ticketing-ui/src/lib/models';\nimport { Tenant } from 'verben-ticketing-ui/src/lib/models';\nimport { ErrorResponse } from 'verben-ticketing-ui/src/lib/models';\nimport { ObjectState } from 'verben-ticketing-ui/src/lib/models';\nimport { Ticket } from 'verben-ticketing-ui/src/lib/models';\nimport { TicketStatus } from 'verben-ticketing-ui/src/lib/models';\nimport {\n UtilService as AppUtilService,\n EnvironmentService,\n} from 'verben-ticketing-ui/src/lib/services';\nimport { HttpWebRequestService } from 'verben-ticketing-ui/src/lib/services';\n\nimport { TenantPriority } from 'verben-ticketing-ui/src/lib/models';\nimport { TicketMessage } from 'verben-ticketing-ui/src/lib/models';\nimport { DEFAULT_MESSAGE_FOR_INITIAL_UPLOAD } from 'verben-ticketing-ui/src/lib/constants';\nimport { File } from 'verben-ticketing-ui/src/lib/models';\nimport { SharedService } from 'verben-ticketing-ui/src/lib/services';\n\n@Component({\n selector: 'app-add-ticket',\n templateUrl: './add-ticket.component.html',\n styleUrl: './add-ticket.component.css',\n})\nexport class AddTicketComponent {\n // test: string = '';\n // logTest() {\n // console.log({ Test: this.test });\n // }\n createTicketForm: FormGroup;\n @Input() activeApp: string | null = null;\n @Input() activeTenant: string | null = null;\n @Input() selectedTicket: Ticket | null = null;\n @Input() isVisible: boolean = false;\n @Output() onOpen: EventEmitter<Event> = new EventEmitter();\n @Output() onClose: EventEmitter<Event> = new EventEmitter();\n @Output() onSave: EventEmitter<Ticket> = new EventEmitter();\n\n priorityOptions: TenantPriority[] = [];\n statusOptions: string[] = Object.keys(TicketStatus);\n fileData: File[] = [];\n fileUrls: string[] = [];\n //attachedMessage: TicketMessage | null = null;\n maxFileSize = 15 * 1024 * 1024;\n @Input() defaultCompany: string = '';\n\n constructor(\n private fb: FormBuilder,\n private utilService: AppUtilService,\n private server: HttpWebRequestService,\n private sharedService: SharedService,\n private envSvc: EnvironmentService,\n ) {\n this.createTicketForm = this.fb.group({\n Title: new FormControl<string | null>(null, Validators.required),\n Description: new FormControl<string | null>(null, Validators.required),\n CurrentHandler: new FormControl<string | null>({\n value: null,\n disabled: true,\n }),\n LastHandler: new FormControl<string | null>({\n value: null,\n disabled: true,\n }),\n Priority: new FormControl<string | null>(null, Validators.required),\n Status: new FormControl<TicketStatus>(\n { value: TicketStatus.Pending, disabled: true },\n Validators.required,\n ),\n });\n\n // this.createTicketForm.controls['CurrentHandler'].disable();\n // this.createTicketForm.controls['LastHandler'].disable();\n }\n\n ngOnInit(): void {}\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (changes['selectedTicket'] && this.selectedTicket) {\n this.createTicketForm.patchValue({\n Title: this.selectedTicket.Title,\n Description: this.selectedTicket.Description,\n CurrentHandler: this.selectedTicket.CurrentHandler,\n LastHandler: this.selectedTicket.LastHandler,\n Priority: this.selectedTicket.Priority,\n Status: this.selectedTicket.Status,\n });\n this.fileUrls = [...this.selectedTicket.FileUrls];\n this.fileData = [];\n } else {\n this.createTicketForm.patchValue({\n Title: null,\n Description: null,\n CurrentHandler: null,\n LastHandler: null,\n Priority: null,\n Status: TicketStatus.Pending,\n });\n this.fileUrls = [];\n this.fileData = [];\n }\n\n if (changes['activeTenant'] && this.activeTenant) {\n const options = await this.sharedService.getAllPrioritiesForTenant(\n this.activeTenant,\n );\n if (options) {\n this.priorityOptions = options.Result;\n }\n console.log({ Changed: this.priorityOptions });\n } else if (changes['activeTenant'] && !this.activeTenant) {\n this.priorityOptions = [];\n // console.log({ Tenant: this.activeTenant, Reset: this.priorityOptions });\n }\n }\n\n checkForm(): boolean {\n if (this.createTicketForm.valid == true) {\n return true;\n }\n return false;\n }\n\n onModalOpen(event: any) {\n this.onOpen.emit();\n }\n\n onModalClose(event: any) {\n this.onClose.emit(event);\n }\n\n // filterMessage(message: TicketMessage): TicketMessage {\n // return {\n // ...message,\n // AttachmentUrls: message.AttachmentUrls.filter(\n // (x) => x.split('/').length > 1\n // ),\n // };\n // }\n\n async save() {\n if (!this.activeApp) {\n return;\n }\n if (!this.activeTenant) {\n return;\n }\n // if (this.selectedTicket && this.attachedMessage) {\n // if (idx > -1) {\n // this.selectedTicket.Messages[idx] = this.filterMessage(\n // this.attachedMessage\n // );\n // } else {\n // if (this.attachedMessage.Attachments.length > 0) {\n // this.selectedTicket.Messages.unshift(\n // this.filterMessage(this.attachedMessage)\n // );\n // }\n // }\n // }\n\n const item: Ticket = {\n Title: this.createTicketForm.controls['Title'].value,\n Description: this.createTicketForm.controls['Description'].value,\n CurrentHandler: this.selectedTicket\n ? this.selectedTicket.CurrentHandler\n : undefined,\n LastHandler: this.selectedTicket\n ? this.selectedTicket.LastHandler\n : undefined,\n Priority: this.createTicketForm.controls['Priority'].value,\n App: this.activeApp,\n id: '',\n Status: this.createTicketForm.controls['Status'].value,\n Company: this.defaultCompany,\n Messages: this.selectedTicket ? this.selectedTicket.Messages : [],\n FileData: this.fileData,\n FileUrls: this.selectedTicket ? this.selectedTicket.FileUrls : [],\n Id: '',\n ExecutionTime: this.selectedTicket\n ? this.selectedTicket.ExecutionTime\n : undefined,\n Code: this.selectedTicket ? this.selectedTicket.Code : '',\n TenantId: this.selectedTicket\n ? this.selectedTicket.TenantId\n : this.activeTenant,\n ServiceName: this.selectedTicket ? this.selectedTicket.ServiceName : '',\n CreatedAt: this.selectedTicket\n ? this.selectedTicket.CreatedAt\n : new Date(),\n UpdatedAt: new Date(),\n DataState: this.selectedTicket ? ObjectState.Changed : ObjectState.New,\n };\n\n if (item.Description.trim().length == 0) {\n this.utilService.showInfo('Description cannot be empty');\n return;\n }\n this.utilService.sendBI(true);\n const res = await this.server.post(\n `Ticket/SaveTicket`,\n [item],\n this.envSvc.environment.TicketingAPI,\n );\n this.utilService.sendBI(false);\n if (res instanceof ErrorResponse) {\n } else {\n this.utilService.showSuccess('Ticket saved successfully');\n const result = res as Ticket[];\n if (result.length > 0) {\n var resultItem = result[0];\n this.onSave.emit(resultItem);\n }\n }\n\n this.onClose.emit();\n }\n\n generateSixDigitNumber(): number {\n return Math.floor(100000 + Math.random() * 900000);\n }\n\n getTicketMessage(): TicketMessage {\n if (this.selectedTicket) {\n const initialMessage = this.selectedTicket.Messages.find(\n (x) => x.Subject == DEFAULT_MESSAGE_FOR_INITIAL_UPLOAD,\n );\n if (initialMessage) {\n return { ...initialMessage, DataState: ObjectState.Changed };\n } else {\n const newMessage: TicketMessage = {\n TicketCode: '',\n Subject: DEFAULT_MESSAGE_FOR_INITIAL_UPLOAD,\n Content: '',\n Attachments: [],\n AttachmentUrls: [],\n Company: this.defaultCompany,\n Id: '',\n Code: '',\n TenantId: '',\n id: '',\n ServiceName: '',\n CreatedAt: new Date(),\n UpdatedAt: new Date(),\n DataState: ObjectState.New,\n };\n return newMessage;\n }\n } else {\n const newMessage: TicketMessage = {\n TicketCode: '',\n Subject: DEFAULT_MESSAGE_FOR_INITIAL_UPLOAD,\n Content: '',\n Attachments: [],\n AttachmentUrls: [],\n Company: this.defaultCompany,\n Id: '',\n id: '',\n Code: '',\n TenantId: '',\n ServiceName: '',\n CreatedAt: new Date(),\n UpdatedAt: new Date(),\n DataState: ObjectState.New,\n };\n return newMessage;\n }\n }\n\n triggerFileUpload(): void {\n const fileInput: HTMLInputElement = document.createElement('input');\n fileInput.type = 'file';\n fileInput.accept = '.png, .jpg, .jpeg, .pdf';\n fileInput.style.display = 'none'; // Hidden file input\n document.body.appendChild(fileInput); // Temporarily add to DOM\n\n fileInput.addEventListener('change', () => {\n const file = fileInput.files?.[0];\n if (file) {\n this.processFile(file);\n }\n document.body.removeChild(fileInput); // Clean up after use\n });\n\n fileInput.click(); // Programmatically trigger click\n }\n\n private async processFile(selectedFile: globalThis.File): Promise<void> {\n // Check file size\n if (selectedFile.size > this.maxFileSize) {\n const limitInMB = this.maxFileSize / 1024 / 1024;\n this.utilService.showInfo(`File size limit of ${limitInMB}mb exceeded`);\n return;\n }\n\n // let fileToProcess: globalThis.File | null = selectedFile;\n // const safeNumber: number = 1 * 1024 * 1024;\n // if (fileToProcess.size > safeNumber) {\n // fileToProcess = await this.utilService.compressImage(selectedFile);\n // if (!fileToProcess) {\n // this.utilService.showError('Error compressing image');\n // return;\n // }\n // }\n\n // Read file and convert to base64\n const reader = new FileReader();\n reader.readAsDataURL(selectedFile);\n reader.onload = () => {\n const base64data = reader.result as string;\n const file = this.sharedService.createCustomFile(\n base64data,\n 0,\n selectedFile,\n );\n if (file) {\n this.fileData.push(file);\n this.fileUrls.push(`${file.Name}`);\n // this.profileImage = base64data;\n }\n };\n }\n}\n","<verben-dialogue\n [showCloseIcon]=\"false\"\n [dismissOutsideClick]=\"false\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'ticket-dialog'\"\n [disableFooter]=\"true\"\n (openModal)=\"onModalOpen($event)\"\n [isVisible]=\"isVisible\"\n [bodyTemplate]=\"bodyTemplate\"\n (closeModal)=\"onModalClose($event)\"\n>\n <ng-template #bodyTemplate>\n <div class=\"dialog-body p-[25px] flex flex-col gap-4\">\n <div class=\"dialog-header flex flex-col gap-1\">\n <div class=\"dialog-title font-bold text-xl\">\n {{ this.selectedTicket ? \"Edit Ticket\" : \"Create Ticket\" }}\n </div>\n <div class=\"dialog-subtitle\">\n {{\n this.selectedTicket\n ? \"Fill the form below to edit selected ticket\"\n : \"Fill the form below to create a ticket\"\n }}\n </div>\n </div>\n <!-- <verbena-textarea name=\"Test\" [(ngModel)]=\"test\" />\n <button (click)=\"logTest()\">Log</button> -->\n <div\n [formGroup]=\"createTicketForm\"\n class=\"add-app-form main-form-container flex flex-col gap-2\"\n >\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Title</div>\n <verbena-input\n name=\"Title\"\n placeHolder=\"Title\"\n formControlName=\"Title\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Description</div>\n <verbena-input name=\"Description\" formControlName=\"Description\" />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Current Handler</div>\n <verbena-input\n name=\"CurrentHandler\"\n placeHolder=\"Current Handler\"\n formControlName=\"CurrentHandler\"\n />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Last Handler</div>\n <verbena-input\n name=\"LastHandler\"\n placeHolder=\"Last Handler\"\n formControlName=\"LastHandler\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Priority</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Priority\"\n placeholder=\"Select Priority\"\n [options]=\"priorityOptions\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n formControlName=\"Priority\"\n >\n </verben-drop-down>\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Status</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Status\"\n [disabled]=\"true\"\n placeholder=\"Select Status\"\n [options]=\"statusOptions\"\n formControlName=\"Status\"\n >\n </verben-drop-down>\n </div>\n <div class=\"attachment-section p-2 flex flex-col gap-3\">\n <div class=\"attachments-container grid grid-cols-3 gap-2\">\n <ng-container *ngFor=\"let file of this.fileUrls\">\n <app-file-render [fileUrl]=\"file\"></app-file-render>\n </ng-container>\n </div>\n <div\n class=\"upload-section flex flex-col flex-1 items-center justify-center gap-2\"\n >\n <div class=\"flex justify-center\">\n <verbena-button\n [useIcon]=\"true\"\n [icon]=\"'upload'\"\n class=\"verben-secondary-button\"\n [text]=\"'Upload'\"\n (click)=\"triggerFileUpload()\"\n ></verbena-button>\n </div>\n <div class=\"upload-caption text-sm text-center\">\n Include Attachments\n </div>\n </div>\n </div>\n </div>\n <div class=\"dialog-button-container flex justify-end gap-2\">\n <verbena-button\n width=\"100%\"\n class=\"verben-secondary-button\"\n [text]=\"'Close'\"\n (click)=\"onModalClose($event)\"\n >\n </verbena-button>\n <verbena-button\n [disable]=\"!this.checkForm()\"\n width=\"100%\"\n class=\"verben-primary-button\"\n [text]=\"'Save'\"\n (click)=\"save()\"\n >\n </verbena-button>\n </div>\n </div>\n </ng-template>\n</verben-dialogue>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport {\n CardDataViewModule,\n DataExportModule,\n DataTableModule,\n DataViewModule,\n DropDownModule,\n SortTableModule,\n SvgModule,\n TableFilterModule,\n TooltipModule,\n VerbenaButtonModule,\n VerbenaInputModule,\n VerbenaSwitchModule,\n VerbenDialogueModule,\n VerbenPopUpModule,\n VisibleColumnModule,\n DataImportModule,\n DataXportModule,\n} from 'verben-ng-ui';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { CompanyDatePipe } from 'verben-ticketing-ui/src/lib/pipes';\nimport { EllipseWordPipe } from 'verben-ticketing-ui/src/lib/pipes';\nimport { AddTicketComponent } from './add-ticket.component';\nimport { FileRenderLibModule } from 'verben-ticketing-ui/src/lib/components/file-render';\nexport const appRoutes: Routes = [];\n@NgModule({\n declarations: [AddTicketComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n DataTableModule,\n SvgModule,\n VerbenPopUpModule,\n DataViewModule,\n VerbenaButtonModule,\n CardDataViewModule,\n DropDownModule,\n VerbenaSwitchModule,\n TableFilterModule,\n VisibleColumnModule,\n SortTableModule,\n DataExportModule,\n TooltipModule,\n VerbenDialogueModule,\n VerbenaInputModule,\n DataImportModule,\n DataExportModule,\n DataXportModule,\n EllipseWordPipe,\n FileRenderLibModule,\n CompanyDatePipe,\n RouterModule.forChild(appRoutes),\n ],\n exports: [AddTicketComponent],\n})\nexport class AddTicketLibModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, Input, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from 'verben-ticketing-ui/src/lib/services';
|
|
4
|
+
import * as i2 from 'verben-ng-ui';
|
|
5
|
+
import { DataTableModule, SvgModule, VerbenPopUpModule, DataViewModule, VerbenaButtonModule, CardDataViewModule, DropDownModule, VerbenaSwitchModule, TableFilterModule, VisibleColumnModule, SortTableModule, DataExportModule, TooltipModule, VerbenDialogueModule, VerbenaInputModule, DataImportModule, DataXportModule } from 'verben-ng-ui';
|
|
6
|
+
import { CommonModule } from '@angular/common';
|
|
7
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
8
|
+
import * as i1$1 from '@angular/router';
|
|
9
|
+
import { RouterModule } from '@angular/router';
|
|
10
|
+
import { EllipseWordPipe, CompanyDatePipe } from 'verben-ticketing-ui/src/lib/pipes';
|
|
11
|
+
|
|
12
|
+
class FileRenderComponent {
|
|
13
|
+
utilService;
|
|
14
|
+
envSvc;
|
|
15
|
+
fileUrl = null;
|
|
16
|
+
fileName = null;
|
|
17
|
+
constructor(utilService, envSvc) {
|
|
18
|
+
this.utilService = utilService;
|
|
19
|
+
this.envSvc = envSvc;
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
if (this.fileUrl) {
|
|
23
|
+
this.fileName = this.fileUrl.split('/').pop() || null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
openFile() {
|
|
27
|
+
if (!this.fileUrl) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
this.utilService.openFullRouteInNewWindow(`${this.envSvc.environment.FILE_BASE_URL}${this.fileUrl}`);
|
|
31
|
+
}
|
|
32
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileRenderComponent, deps: [{ token: i1.UtilService }, { token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FileRenderComponent, selector: "app-file-render", inputs: { fileUrl: "fileUrl" }, ngImport: i0, template: "<div class=\"file-container p-2 flex items-center justify-between gap-3\">\n <div class=\"text-sm overflow-x-auto font-semibold\">{{ fileName }}</div>\n <span (click)=\"openFile()\" class=\"cursor-pointer\">\n <verben-svg\n [icon]=\"'download-icon'\"\n [width]=\"20\"\n [height]=\"20\"\n ></verben-svg>\n </span>\n</div>\n", styles: [".file-container{border:1px solid #ccc6fbb2;border-radius:5px}\n"], dependencies: [{ kind: "component", type: i2.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
|
|
34
|
+
}
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileRenderComponent, decorators: [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{ selector: 'app-file-render', template: "<div class=\"file-container p-2 flex items-center justify-between gap-3\">\n <div class=\"text-sm overflow-x-auto font-semibold\">{{ fileName }}</div>\n <span (click)=\"openFile()\" class=\"cursor-pointer\">\n <verben-svg\n [icon]=\"'download-icon'\"\n [width]=\"20\"\n [height]=\"20\"\n ></verben-svg>\n </span>\n</div>\n", styles: [".file-container{border:1px solid #ccc6fbb2;border-radius:5px}\n"] }]
|
|
38
|
+
}], ctorParameters: () => [{ type: i1.UtilService }, { type: i1.EnvironmentService }], propDecorators: { fileUrl: [{
|
|
39
|
+
type: Input
|
|
40
|
+
}] } });
|
|
41
|
+
|
|
42
|
+
const appRoutes = [];
|
|
43
|
+
class FileRenderLibModule {
|
|
44
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileRenderLibModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
45
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: FileRenderLibModule, declarations: [FileRenderComponent], imports: [CommonModule,
|
|
46
|
+
FormsModule,
|
|
47
|
+
ReactiveFormsModule,
|
|
48
|
+
DataTableModule,
|
|
49
|
+
SvgModule,
|
|
50
|
+
VerbenPopUpModule,
|
|
51
|
+
DataViewModule,
|
|
52
|
+
VerbenaButtonModule,
|
|
53
|
+
CardDataViewModule,
|
|
54
|
+
DropDownModule,
|
|
55
|
+
VerbenaSwitchModule,
|
|
56
|
+
TableFilterModule,
|
|
57
|
+
VisibleColumnModule,
|
|
58
|
+
SortTableModule,
|
|
59
|
+
DataExportModule,
|
|
60
|
+
TooltipModule,
|
|
61
|
+
VerbenDialogueModule,
|
|
62
|
+
VerbenaInputModule,
|
|
63
|
+
DataImportModule,
|
|
64
|
+
DataExportModule,
|
|
65
|
+
DataXportModule,
|
|
66
|
+
EllipseWordPipe,
|
|
67
|
+
CompanyDatePipe, i1$1.RouterModule], exports: [FileRenderComponent] });
|
|
68
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileRenderLibModule, imports: [CommonModule,
|
|
69
|
+
FormsModule,
|
|
70
|
+
ReactiveFormsModule,
|
|
71
|
+
DataTableModule,
|
|
72
|
+
SvgModule,
|
|
73
|
+
VerbenPopUpModule,
|
|
74
|
+
DataViewModule,
|
|
75
|
+
VerbenaButtonModule,
|
|
76
|
+
CardDataViewModule,
|
|
77
|
+
DropDownModule,
|
|
78
|
+
VerbenaSwitchModule,
|
|
79
|
+
TableFilterModule,
|
|
80
|
+
VisibleColumnModule,
|
|
81
|
+
SortTableModule,
|
|
82
|
+
DataExportModule,
|
|
83
|
+
TooltipModule,
|
|
84
|
+
VerbenDialogueModule,
|
|
85
|
+
VerbenaInputModule,
|
|
86
|
+
DataImportModule,
|
|
87
|
+
DataExportModule,
|
|
88
|
+
DataXportModule,
|
|
89
|
+
RouterModule.forChild(appRoutes)] });
|
|
90
|
+
}
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FileRenderLibModule, decorators: [{
|
|
92
|
+
type: NgModule,
|
|
93
|
+
args: [{
|
|
94
|
+
declarations: [FileRenderComponent],
|
|
95
|
+
imports: [
|
|
96
|
+
CommonModule,
|
|
97
|
+
FormsModule,
|
|
98
|
+
ReactiveFormsModule,
|
|
99
|
+
DataTableModule,
|
|
100
|
+
SvgModule,
|
|
101
|
+
VerbenPopUpModule,
|
|
102
|
+
DataViewModule,
|
|
103
|
+
VerbenaButtonModule,
|
|
104
|
+
CardDataViewModule,
|
|
105
|
+
DropDownModule,
|
|
106
|
+
VerbenaSwitchModule,
|
|
107
|
+
TableFilterModule,
|
|
108
|
+
VisibleColumnModule,
|
|
109
|
+
SortTableModule,
|
|
110
|
+
DataExportModule,
|
|
111
|
+
TooltipModule,
|
|
112
|
+
VerbenDialogueModule,
|
|
113
|
+
VerbenaInputModule,
|
|
114
|
+
DataImportModule,
|
|
115
|
+
DataExportModule,
|
|
116
|
+
DataXportModule,
|
|
117
|
+
EllipseWordPipe,
|
|
118
|
+
CompanyDatePipe,
|
|
119
|
+
RouterModule.forChild(appRoutes),
|
|
120
|
+
],
|
|
121
|
+
exports: [FileRenderComponent],
|
|
122
|
+
}]
|
|
123
|
+
}] });
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Generated bundle index. Do not edit.
|
|
127
|
+
*/
|
|
128
|
+
|
|
129
|
+
export { FileRenderComponent, FileRenderLibModule, appRoutes };
|
|
130
|
+
//# sourceMappingURL=verben-ticketing-ui-src-lib-components-file-render.mjs.map
|