jconsumer-shared 0.0.2 → 0.0.3
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/esm2022/lib/account-service.mjs +21 -0
- package/esm2022/lib/auth-service.mjs +155 -0
- package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +448 -0
- package/esm2022/lib/common.service.mjs +38 -0
- package/esm2022/lib/error-message.service.mjs +22 -0
- package/esm2022/lib/file-service.mjs +229 -0
- package/esm2022/lib/group-storage.service.mjs +66 -0
- package/esm2022/lib/i8n.module.mjs +43 -0
- package/esm2022/lib/local-storage.service.mjs +77 -0
- package/esm2022/lib/phone-input/phone-input.component.mjs +127 -0
- package/esm2022/lib/phone-input/phone-input.module.mjs +24 -0
- package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +22 -0
- package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +20 -0
- package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +18 -0
- package/esm2022/lib/pipes/filter/filter.pipe.mjs +24 -0
- package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +18 -0
- package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +20 -0
- package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +19 -0
- package/esm2022/lib/project-messages.mjs +146 -0
- package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +1422 -0
- package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +77 -0
- package/esm2022/lib/questionaire/questionaire-service.mjs +92 -0
- package/esm2022/lib/session-storage.service.mjs +57 -0
- package/esm2022/lib/shared.service.mjs +24 -2
- package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +61 -0
- package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +28 -0
- package/esm2022/lib/spinner/loading-spinner.component.mjs +22 -0
- package/esm2022/lib/spinner/loading-spinner.module.mjs +28 -0
- package/esm2022/lib/storage.service.mjs +75 -0
- package/esm2022/lib/word-processor.service.mjs +181 -0
- package/esm2022/public-api.mjs +27 -1
- package/fesm2022/jconsumer-shared.mjs +3522 -26
- package/fesm2022/jconsumer-shared.mjs.map +1 -1
- package/jconsumer-shared-0.0.3.tgz +0 -0
- package/lib/account-service.d.ts +9 -0
- package/lib/auth-service.d.ts +43 -0
- package/lib/calendar/date-time/datetime-processor.service.d.ts +120 -0
- package/lib/common.service.d.ts +9 -0
- package/lib/error-message.service.d.ts +5 -0
- package/lib/file-service.d.ts +26 -0
- package/lib/group-storage.service.d.ts +14 -0
- package/lib/i8n.module.d.ts +12 -0
- package/lib/local-storage.service.d.ts +34 -0
- package/lib/phone-input/phone-input.component.d.ts +25 -0
- package/lib/phone-input/phone-input.module.d.ts +9 -0
- package/lib/pipes/autolink/autolink.pipe.d.ts +7 -0
- package/lib/pipes/capitalize/capitalize.module.d.ts +8 -0
- package/lib/pipes/capitalize/capitalize.pipe.d.ts +7 -0
- package/lib/pipes/filter/filter.pipe.d.ts +7 -0
- package/lib/pipes/limit-to/limitTo.pipe.d.ts +7 -0
- package/lib/pipes/safe-html/safehtml.module.d.ts +8 -0
- package/lib/pipes/safe-html/safehtml.pipe.d.ts +10 -0
- package/lib/project-messages.d.ts +1 -0
- package/lib/questionaire/edit/questionnaire.component.d.ts +151 -0
- package/lib/questionaire/edit/questionnaire.module.d.ts +19 -0
- package/lib/questionaire/questionaire-service.d.ts +28 -0
- package/lib/session-storage.service.d.ts +26 -0
- package/lib/shared.service.d.ts +12 -3
- package/lib/showuploadfile/showuploadfile.component.d.ts +21 -0
- package/lib/showuploadfile/showuploadfile.module.d.ts +9 -0
- package/lib/spinner/loading-spinner.component.d.ts +11 -0
- package/lib/spinner/loading-spinner.module.d.ts +9 -0
- package/lib/storage.service.d.ts +16 -0
- package/lib/word-processor.service.d.ts +80 -0
- package/package.json +1 -1
- package/public-api.d.ts +26 -0
- package/jconsumer-shared-0.0.2.tgz +0 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
export class FileService {
|
|
7
|
+
// Supported images types
|
|
8
|
+
IMAGE_FORMATS = [
|
|
9
|
+
'image/gif',
|
|
10
|
+
'image/png',
|
|
11
|
+
'image/jpeg',
|
|
12
|
+
'image/bmp',
|
|
13
|
+
'image/webp'
|
|
14
|
+
];
|
|
15
|
+
FILETYPES_UPLOAD = [
|
|
16
|
+
'image/jpg',
|
|
17
|
+
'image/png',
|
|
18
|
+
'image/jpeg',
|
|
19
|
+
'image/bmp',
|
|
20
|
+
'application/pdf',
|
|
21
|
+
'application/jfif',
|
|
22
|
+
'video/mp4',
|
|
23
|
+
'video/mpeg',
|
|
24
|
+
'audio/mpeg',
|
|
25
|
+
'audio/mp3',
|
|
26
|
+
'audio/ogg',
|
|
27
|
+
'application/vnd.ms-excel',
|
|
28
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
29
|
+
'application/doc',
|
|
30
|
+
'application/ms-doc',
|
|
31
|
+
'application/msword',
|
|
32
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
33
|
+
'docx',
|
|
34
|
+
'doc'
|
|
35
|
+
];
|
|
36
|
+
imageSize = 15000000;
|
|
37
|
+
FILE_MAX_SIZE = 10000000;
|
|
38
|
+
constructor() { }
|
|
39
|
+
/**
|
|
40
|
+
* Method returns supported formats of files which has to be uploaded
|
|
41
|
+
* @param source image/file
|
|
42
|
+
* @returns available formats
|
|
43
|
+
*/
|
|
44
|
+
getSupportedFormats(source) {
|
|
45
|
+
console.log(source);
|
|
46
|
+
let formats = [];
|
|
47
|
+
if (source == 'image') {
|
|
48
|
+
formats = this.IMAGE_FORMATS;
|
|
49
|
+
//return this.IMAGE_FORMATS;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
formats = this.FILETYPES_UPLOAD;
|
|
53
|
+
//return this.FILETYPES_UPLOAD;
|
|
54
|
+
}
|
|
55
|
+
console.log(formats);
|
|
56
|
+
return formats;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Method will return the maximum uploadable size of a file/image
|
|
60
|
+
* @returns Maximum size of the image to upload
|
|
61
|
+
*/
|
|
62
|
+
getMaximumImageSize() {
|
|
63
|
+
return this.imageSize;
|
|
64
|
+
}
|
|
65
|
+
imageValidation(file, source) {
|
|
66
|
+
console.log("In Image Validation:", source);
|
|
67
|
+
let file_types = [];
|
|
68
|
+
if (source === 'attachment' || source === 'consumerimages') {
|
|
69
|
+
file_types = this.getSupportedFormats('file');
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
file_types = this.getSupportedFormats('image');
|
|
73
|
+
}
|
|
74
|
+
const image_max_size = this.getMaximumImageSize();
|
|
75
|
+
const error = [];
|
|
76
|
+
console.log(file_types);
|
|
77
|
+
console.log(file.type);
|
|
78
|
+
let is_error = false;
|
|
79
|
+
if (!file.type || (file.type && file_types.indexOf(file.type) === -1)) {
|
|
80
|
+
error['type'] = true;
|
|
81
|
+
is_error = true;
|
|
82
|
+
}
|
|
83
|
+
if (file.size && file.size > image_max_size) {
|
|
84
|
+
error['size'] = true;
|
|
85
|
+
is_error = true;
|
|
86
|
+
}
|
|
87
|
+
if (is_error === false) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
return error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
getImage(url, fileObj) {
|
|
95
|
+
let file = fileObj;
|
|
96
|
+
if (fileObj && fileObj['mimeType']) {
|
|
97
|
+
file['type'] = fileObj['mimeType'];
|
|
98
|
+
}
|
|
99
|
+
// console.log("File :", file);
|
|
100
|
+
// console.log("File Type :", file.type)
|
|
101
|
+
// console.log("File Name :", file.name.includes('docx'))
|
|
102
|
+
if (file.type) {
|
|
103
|
+
if (file.type == 'application/pdf') {
|
|
104
|
+
return './assets/images/pdf.png';
|
|
105
|
+
}
|
|
106
|
+
else if (file.type == 'application/vnd.ms-excel' || file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
|
|
107
|
+
return './assets/images/xls.png';
|
|
108
|
+
}
|
|
109
|
+
else if (file.type == 'audio/mp3' || file.type == 'audio/mpeg' || file.type == 'audio/ogg') {
|
|
110
|
+
return './assets/images/audio.png';
|
|
111
|
+
}
|
|
112
|
+
else if (file.type == 'video/mp4' || file.type == 'video/mpeg') {
|
|
113
|
+
return './assets/images/video.png';
|
|
114
|
+
}
|
|
115
|
+
else if (file.type == 'application/msword' || file.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || file.type.includes('docx') || file.type.includes('doc')) {
|
|
116
|
+
return './assets/images/ImgeFileIcon/wordDocsBgWhite.jpg';
|
|
117
|
+
}
|
|
118
|
+
else if (file.type.includes('txt')) {
|
|
119
|
+
return './assets/images/ImgeFileIcon/docTxt.png';
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
return url;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return url;
|
|
126
|
+
}
|
|
127
|
+
getImageByType(type) {
|
|
128
|
+
if (type == 'pdf') {
|
|
129
|
+
return './assets/images/pdf.png';
|
|
130
|
+
}
|
|
131
|
+
else if (type == 'vnd.ms-excel' || type == 'vnd.openxmlformats-officedocument.spreadsheetml.sheet' || type == 'xls' || type == 'xlsx') {
|
|
132
|
+
return './assets/images/xls.png';
|
|
133
|
+
}
|
|
134
|
+
else if (type == 'mp3' || type == 'mpeg' || type == 'ogg') {
|
|
135
|
+
return './assets/images/audio.png';
|
|
136
|
+
}
|
|
137
|
+
else if (type == 'mp4' || type == 'mpeg') {
|
|
138
|
+
return './assets/images/video.png';
|
|
139
|
+
}
|
|
140
|
+
else if (type == 'application/msword' || type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || type == 'docx' || type == 'doc' || type == 'msword') {
|
|
141
|
+
return './assets/images/ImgeFileIcon/wordDocsBgWhite.jpg';
|
|
142
|
+
}
|
|
143
|
+
else if (type == 'txt') {
|
|
144
|
+
return './assets/images/ImgeFileIcon/docTxt.png';
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
return './assets/images/img_uplod.png';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
filesSelected(event, selectedMessage) {
|
|
151
|
+
const _this = this;
|
|
152
|
+
return new Promise(function (resolve, reject) {
|
|
153
|
+
// const input = event.target.files;
|
|
154
|
+
let input = event.files;
|
|
155
|
+
if (event.target && event.target.files) {
|
|
156
|
+
input = event.target.files;
|
|
157
|
+
}
|
|
158
|
+
console.log("File Selected :", input);
|
|
159
|
+
if (input) {
|
|
160
|
+
let count = 0;
|
|
161
|
+
let filesCount = input.length;
|
|
162
|
+
for (const file of input) {
|
|
163
|
+
if (_this.FILETYPES_UPLOAD.indexOf(file.type) === -1) {
|
|
164
|
+
reject("Selected file type not supported");
|
|
165
|
+
}
|
|
166
|
+
else if (file.size > _this.FILE_MAX_SIZE) {
|
|
167
|
+
reject("Please upload files with size < 10mb");
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
selectedMessage.files.push(file);
|
|
171
|
+
const reader = new FileReader();
|
|
172
|
+
reader.onload = (e) => {
|
|
173
|
+
selectedMessage.base64.push(e.target["result"]);
|
|
174
|
+
count++;
|
|
175
|
+
if (count === filesCount) {
|
|
176
|
+
resolve(true);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
reader.readAsDataURL(file);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
filessSelected(event, selectedMessage) {
|
|
186
|
+
const _this = this;
|
|
187
|
+
return new Promise(function (resolve, reject) {
|
|
188
|
+
// const input = event.target.files;
|
|
189
|
+
let input = event.files;
|
|
190
|
+
if (event.target && event.target.files) {
|
|
191
|
+
input = event.target.files;
|
|
192
|
+
}
|
|
193
|
+
console.log("File Selected :", input);
|
|
194
|
+
if (input) {
|
|
195
|
+
let count = 0;
|
|
196
|
+
let filesCount = input.length;
|
|
197
|
+
for (const file of input) {
|
|
198
|
+
if (_this.IMAGE_FORMATS.indexOf(file.type) === -1) {
|
|
199
|
+
reject("Selected file type not supported");
|
|
200
|
+
}
|
|
201
|
+
else if (file.size > _this.FILE_MAX_SIZE) {
|
|
202
|
+
reject("Please upload files with size < 10mb");
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
selectedMessage.files.push(file);
|
|
206
|
+
const reader = new FileReader();
|
|
207
|
+
reader.onload = (e) => {
|
|
208
|
+
selectedMessage.base64.push(e.target["result"]);
|
|
209
|
+
count++;
|
|
210
|
+
if (count === filesCount) {
|
|
211
|
+
resolve(true);
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
reader.readAsDataURL(file);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: FileService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
221
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: FileService, providedIn: 'root' });
|
|
222
|
+
}
|
|
223
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: FileService, decorators: [{
|
|
224
|
+
type: Injectable,
|
|
225
|
+
args: [{
|
|
226
|
+
providedIn: 'root'
|
|
227
|
+
}]
|
|
228
|
+
}], ctorParameters: () => [] });
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2ZpbGUtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0zQzs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBQ3RCLHlCQUF5QjtJQUN6QixhQUFhLEdBQUc7UUFDZCxXQUFXO1FBQ1gsV0FBVztRQUNYLFlBQVk7UUFDWixXQUFXO1FBQ1gsWUFBWTtLQUNiLENBQUM7SUFFRixnQkFBZ0IsR0FBRztRQUNqQixXQUFXO1FBQ1gsV0FBVztRQUNYLFlBQVk7UUFDWixXQUFXO1FBQ1gsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixXQUFXO1FBQ1gsWUFBWTtRQUNaLFlBQVk7UUFDWixXQUFXO1FBQ1gsV0FBVztRQUNYLDBCQUEwQjtRQUMxQixtRUFBbUU7UUFDbkUsaUJBQWlCO1FBQ2pCLG9CQUFvQjtRQUNwQixvQkFBb0I7UUFDcEIseUVBQXlFO1FBQ3pFLE1BQU07UUFDTixLQUFLO0tBQ04sQ0FBQztJQUVGLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDckIsYUFBYSxHQUFHLFFBQVEsQ0FBQztJQUN6QixnQkFBZ0IsQ0FBQztJQUVqQjs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsTUFBVztRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUM3Qiw0QkFBNEI7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ2hDLCtCQUErQjtRQUNqQyxDQUFD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QzlCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ3pCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2xELE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO29CQUM3QyxDQUFDO3lCQUFNLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQzNDLE1BQU0sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO29CQUNqRCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRTs0QkFDekIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDOzRCQUNoRCxLQUFLLEVBQUUsQ0FBQzs0QkFDUixJQUFJLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztnQ0FDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNoQixDQUFDO3dCQUNILENBQUMsQ0FBQzt3QkFDRixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM3QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO3VHQXhNVSxXQUFXOzJHQUFYLFdBQVcsY0FOVixNQUFNOzsyRkFNUCxXQUFXO2tCQVB2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuXHJcbi8qKlxyXG4gKiBcclxuICovXHJcbmV4cG9ydCBjbGFzcyBGaWxlU2VydmljZSB7XHJcbiAgLy8gU3VwcG9ydGVkIGltYWdlcyB0eXBlc1xyXG4gIElNQUdFX0ZPUk1BVFMgPSBbXHJcbiAgICAnaW1hZ2UvZ2lmJyxcclxuICAgICdpbWFnZS9wbmcnLFxyXG4gICAgJ2ltYWdlL2pwZWcnLFxyXG4gICAgJ2ltYWdlL2JtcCcsXHJcbiAgICAnaW1hZ2Uvd2VicCdcclxuICBdO1xyXG5cclxuICBGSUxFVFlQRVNfVVBMT0FEID0gW1xyXG4gICAgJ2ltYWdlL2pwZycsXHJcbiAgICAnaW1hZ2UvcG5nJyxcclxuICAgICdpbWFnZS9qcGVnJyxcclxuICAgICdpbWFnZS9ibXAnLFxyXG4gICAgJ2FwcGxpY2F0aW9uL3BkZicsXHJcbiAgICAnYXBwbGljYXRpb24vamZpZicsXHJcbiAgICAndmlkZW8vbXA0JyxcclxuICAgICd2aWRlby9tcGVnJyxcclxuICAgICdhdWRpby9tcGVnJyxcclxuICAgICdhdWRpby9tcDMnLFxyXG4gICAgJ2F1ZGlvL29nZycsXHJcbiAgICAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJyxcclxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXHJcbiAgICAnYXBwbGljYXRpb24vZG9jJyxcclxuICAgICdhcHBsaWNhdGlvbi9tcy1kb2MnLFxyXG4gICAgJ2FwcGxpY2F0aW9uL21zd29yZCcsXHJcbiAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxyXG4gICAgJ2RvY3gnLFxyXG4gICAgJ2RvYydcclxuICBdO1xyXG5cclxuICBpbWFnZVNpemUgPSAxNTAwMDAwMDtcclxuICBGSUxFX01BWF9TSVpFID0gMTAwMDAwMDA7XHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHJldHVybnMgc3VwcG9ydGVkIGZvcm1hdHMgb2YgZmlsZXMgd2hpY2ggaGFzIHRvIGJlIHVwbG9hZGVkXHJcbiAgICogQHBhcmFtIHNvdXJjZSBpbWFnZS9maWxlXHJcbiAgICogQHJldHVybnMgYXZhaWxhYmxlIGZvcm1hdHNcclxuICAgKi9cclxuICBnZXRTdXBwb3J0ZWRGb3JtYXRzKHNvdXJjZTogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhzb3VyY2UpO1xyXG4gICAgbGV0IGZvcm1hdHMgPSBbXTtcclxuICAgIGlmIChzb3VyY2UgPT0gJ2ltYWdlJykge1xyXG4gICAgICBmb3JtYXRzID0gdGhpcy5JTUFHRV9GT1JNQVRTO1xyXG4gICAgICAvL3JldHVybiB0aGlzLklNQUdFX0ZPUk1BVFM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3JtYXRzID0gdGhpcy5GSUxFVFlQRVNfVVBMT0FEO1xyXG4gICAgICAvL3JldHVybiB0aGlzLkZJTEVUWVBFU19VUExPQUQ7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhmb3JtYXRzKTtcclxuICAgIHJldHVybiBmb3JtYXRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBtYXhpbXVtIHVwbG9hZGFibGUgc2l6ZSBvZiBhIGZpbGUvaW1hZ2VcclxuICAgKiBAcmV0dXJucyBNYXhpbXVtIHNpemUgb2YgdGhlIGltYWdlIHRvIHVwbG9hZFxyXG4gICAqL1xyXG4gIGdldE1heGltdW1JbWFnZVNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbWFnZVNpemU7XHJcbiAgfVxyXG5cclxuICBpbWFnZVZhbGlkYXRpb24oZmlsZTogYW55LCBzb3VyY2U/OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiSW4gSW1hZ2UgVmFsaWRhdGlvbjpcIiwgc291cmNlKTtcclxuICAgIGxldCBmaWxlX3R5cGVzID0gW107XHJcbiAgICBpZiAoc291cmNlID09PSAnYXR0YWNobWVudCcgfHwgc291cmNlID09PSAnY29uc3VtZXJpbWFnZXMnKSB7XHJcbiAgICAgIGZpbGVfdHlwZXMgPSB0aGlzLmdldFN1cHBvcnRlZEZvcm1hdHMoJ2ZpbGUnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbGVfdHlwZXMgPSB0aGlzLmdldFN1cHBvcnRlZEZvcm1hdHMoJ2ltYWdlJyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbWFnZV9tYXhfc2l6ZSA9IHRoaXMuZ2V0TWF4aW11bUltYWdlU2l6ZSgpO1xyXG4gICAgY29uc3QgZXJyb3I6IGFueSA9IFtdO1xyXG4gICAgY29uc29sZS5sb2coZmlsZV90eXBlcyk7XHJcbiAgICBjb25zb2xlLmxvZyhmaWxlLnR5cGUpO1xyXG4gICAgbGV0IGlzX2Vycm9yID0gZmFsc2U7XHJcbiAgICBpZiAoIWZpbGUudHlwZSB8fCAoZmlsZS50eXBlICYmIGZpbGVfdHlwZXMuaW5kZXhPZihmaWxlLnR5cGUpID09PSAtMSkpIHtcclxuICAgICAgZXJyb3JbJ3R5cGUnXSA9IHRydWU7XHJcbiAgICAgIGlzX2Vycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChmaWxlLnNpemUgJiYgZmlsZS5zaXplID4gaW1hZ2VfbWF4X3NpemUpIHtcclxuICAgICAgZXJyb3JbJ3NpemUnXSA9IHRydWU7XHJcbiAgICAgIGlzX2Vycm9yID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChpc19lcnJvciA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEltYWdlKHVybDogYW55LCBmaWxlT2JqOiBhbnkpIHtcclxuICAgIGxldCBmaWxlID0gZmlsZU9iajtcclxuICAgIGlmIChmaWxlT2JqICYmIGZpbGVPYmpbJ21pbWVUeXBlJ10pIHtcclxuICAgICAgZmlsZVsndHlwZSddID0gZmlsZU9ialsnbWltZVR5cGUnXTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFwiRmlsZSA6XCIsIGZpbGUpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJGaWxlIFR5cGUgOlwiLCBmaWxlLnR5cGUpXHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIkZpbGUgTmFtZSA6XCIsIGZpbGUubmFtZS5pbmNsdWRlcygnZG9jeCcpKVxyXG4gICAgaWYgKGZpbGUudHlwZSkge1xyXG4gICAgICBpZiAoZmlsZS50eXBlID09ICdhcHBsaWNhdGlvbi9wZGYnKSB7XHJcbiAgICAgICAgcmV0dXJuICcuL2Fzc2V0cy9pbWFnZXMvcGRmLnBuZyc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmlsZS50eXBlID09ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnIHx8IGZpbGUudHlwZSA9PSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKSB7XHJcbiAgICAgICAgcmV0dXJuICcuL2Fzc2V0cy9pbWFnZXMveGxzLnBuZyc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmlsZS50eXBlID09ICdhdWRpby9tcDMnIHx8IGZpbGUudHlwZSA9PSAnYXVkaW8vbXBlZycgfHwgZmlsZS50eXBlID09ICdhdWRpby9vZ2cnKSB7XHJcbiAgICAgICAgcmV0dXJuICcuL2Fzc2V0cy9pbWFnZXMvYXVkaW8ucG5nJztcclxuICAgICAgfSBlbHNlIGlmIChmaWxlLnR5cGUgPT0gJ3ZpZGVvL21wNCcgfHwgZmlsZS50eXBlID09ICd2aWRlby9tcGVnJykge1xyXG4gICAgICAgIHJldHVybiAnLi9hc3NldHMvaW1hZ2VzL3ZpZGVvLnBuZyc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmlsZS50eXBlID09ICdhcHBsaWNhdGlvbi9tc3dvcmQnIHx8IGZpbGUudHlwZSA9PSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnIHx8IGZpbGUudHlwZS5pbmNsdWRlcygnZG9jeCcpIHx8IGZpbGUudHlwZS5pbmNsdWRlcygnZG9jJykpIHtcclxuICAgICAgICByZXR1cm4gJy4vYXNzZXRzL2ltYWdlcy9JbWdlRmlsZUljb24vd29yZERvY3NCZ1doaXRlLmpwZyc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmlsZS50eXBlLmluY2x1ZGVzKCd0eHQnKSkge1xyXG4gICAgICAgIHJldHVybiAnLi9hc3NldHMvaW1hZ2VzL0ltZ2VGaWxlSWNvbi9kb2NUeHQucG5nJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdXJsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuICBnZXRJbWFnZUJ5VHlwZSh0eXBlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlID09ICdwZGYnKSB7XHJcbiAgICAgIHJldHVybiAnLi9hc3NldHMvaW1hZ2VzL3BkZi5wbmcnO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09ICd2bmQubXMtZXhjZWwnIHx8IHR5cGUgPT0gJ3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyB8fCB0eXBlID09ICd4bHMnIHx8IHR5cGUgPT0gJ3hsc3gnKSB7XHJcbiAgICAgIHJldHVybiAnLi9hc3NldHMvaW1hZ2VzL3hscy5wbmcnO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09ICdtcDMnIHx8IHR5cGUgPT0gJ21wZWcnIHx8IHR5cGUgPT0gJ29nZycpIHtcclxuICAgICAgcmV0dXJuICcuL2Fzc2V0cy9pbWFnZXMvYXVkaW8ucG5nJztcclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnbXA0JyB8fCB0eXBlID09ICdtcGVnJykge1xyXG4gICAgICByZXR1cm4gJy4vYXNzZXRzL2ltYWdlcy92aWRlby5wbmcnO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09ICdhcHBsaWNhdGlvbi9tc3dvcmQnIHx8IHR5cGUgPT0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JyB8fCB0eXBlID09ICdkb2N4JyB8fCB0eXBlID09ICdkb2MnIHx8IHR5cGUgPT0gJ21zd29yZCcpIHtcclxuICAgICAgcmV0dXJuICcuL2Fzc2V0cy9pbWFnZXMvSW1nZUZpbGVJY29uL3dvcmREb2NzQmdXaGl0ZS5qcGcnO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09ICd0eHQnKSB7XHJcbiAgICAgIHJldHVybiAnLi9hc3NldHMvaW1hZ2VzL0ltZ2VGaWxlSWNvbi9kb2NUeHQucG5nJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnLi9hc3NldHMvaW1hZ2VzL2ltZ191cGxvZC5wbmcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsZXNTZWxlY3RlZChldmVudDogYW55LCBzZWxlY3RlZE1lc3NhZ2U6IGFueSkge1xyXG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgLy8gY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQuZmlsZXM7XHJcbiAgICAgIGxldCBpbnB1dCA9IGV2ZW50LmZpbGVzO1xyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5maWxlcykge1xyXG4gICAgICAgIGlucHV0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRmlsZSBTZWxlY3RlZCA6XCIsIGlucHV0KTtcclxuICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgICBsZXQgZmlsZXNDb3VudCA9IGlucHV0Lmxlbmd0aDtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgaW5wdXQpIHtcclxuICAgICAgICAgIGlmIChfdGhpcy5GSUxFVFlQRVNfVVBMT0FELmluZGV4T2YoZmlsZS50eXBlKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmVqZWN0KFwiU2VsZWN0ZWQgZmlsZSB0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpbGUuc2l6ZSA+IF90aGlzLkZJTEVfTUFYX1NJWkUpIHtcclxuICAgICAgICAgICAgcmVqZWN0KFwiUGxlYXNlIHVwbG9hZCBmaWxlcyB3aXRoIHNpemUgPCAxMG1iXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZXNzYWdlLmZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRNZXNzYWdlLmJhc2U2NC5wdXNoKGUudGFyZ2V0W1wicmVzdWx0XCJdKTtcclxuICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gZmlsZXNDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgZmlsZXNzU2VsZWN0ZWQoZXZlbnQ6IGFueSwgc2VsZWN0ZWRNZXNzYWdlOiBhbnkpIHtcclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgIC8vIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xyXG4gICAgICBsZXQgaW5wdXQgPSBldmVudC5maWxlcztcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldCAmJiBldmVudC50YXJnZXQuZmlsZXMpIHtcclxuICAgICAgICBpbnB1dCA9IGV2ZW50LnRhcmdldC5maWxlcztcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhcIkZpbGUgU2VsZWN0ZWQgOlwiLCBpbnB1dCk7XHJcbiAgICAgIGlmIChpbnB1dCkge1xyXG4gICAgICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICAgICAgbGV0IGZpbGVzQ291bnQgPSBpbnB1dC5sZW5ndGg7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGlucHV0KSB7XHJcbiAgICAgICAgICBpZiAoX3RoaXMuSU1BR0VfRk9STUFUUy5pbmRleE9mKGZpbGUudHlwZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChcIlNlbGVjdGVkIGZpbGUgdHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChmaWxlLnNpemUgPiBfdGhpcy5GSUxFX01BWF9TSVpFKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChcIlBsZWFzZSB1cGxvYWQgZmlsZXMgd2l0aCBzaXplIDwgMTBtYlwiKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkTWVzc2FnZS5maWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHNlbGVjdGVkTWVzc2FnZS5iYXNlNjQucHVzaChlLnRhcmdldFtcInJlc3VsdFwiXSk7XHJcbiAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICBpZiAoY291bnQgPT09IGZpbGVzQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./session-storage.service";
|
|
4
|
+
import * as i2 from "./local-storage.service";
|
|
5
|
+
export class GroupStorageService {
|
|
6
|
+
sessionStorageService;
|
|
7
|
+
lStorageService;
|
|
8
|
+
constructor(sessionStorageService, lStorageService) {
|
|
9
|
+
this.sessionStorageService = sessionStorageService;
|
|
10
|
+
this.lStorageService = lStorageService;
|
|
11
|
+
}
|
|
12
|
+
getGroup() {
|
|
13
|
+
if (this.sessionStorageService.getitemfromSessionStorage('tabId')) {
|
|
14
|
+
return this.sessionStorageService.getitemfromSessionStorage('accountid');
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
setitemToGroupStorage(itemname, itemvalue) {
|
|
21
|
+
const group = this.getGroup();
|
|
22
|
+
let groupObj = {};
|
|
23
|
+
if (this.lStorageService.getitemfromLocalStorage(group)) {
|
|
24
|
+
groupObj = JSON.parse(this.lStorageService.getitemfromLocalStorage(group)) ? JSON.parse(this.lStorageService.getitemfromLocalStorage(group)) : {};
|
|
25
|
+
if (groupObj) {
|
|
26
|
+
groupObj[itemname] = itemvalue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
groupObj[itemname] = itemvalue;
|
|
31
|
+
}
|
|
32
|
+
this.lStorageService.setitemonLocalStorage(group, JSON.stringify(groupObj));
|
|
33
|
+
}
|
|
34
|
+
getitemFromGroupStorage(itemname, type) {
|
|
35
|
+
let group;
|
|
36
|
+
if (type) {
|
|
37
|
+
group = 0;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
group = this.getGroup();
|
|
41
|
+
}
|
|
42
|
+
if (this.lStorageService.getitemfromLocalStorage(group)) {
|
|
43
|
+
const groupObj = JSON.parse(this.lStorageService.getitemfromLocalStorage(group));
|
|
44
|
+
if (groupObj[itemname] || (itemname === 'isCheckin' && groupObj[itemname] !== undefined)) {
|
|
45
|
+
return groupObj[itemname];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
removeitemFromGroupStorage(itemname) {
|
|
50
|
+
const group = this.getGroup();
|
|
51
|
+
const groupObj = JSON.parse(this.lStorageService.getitemfromLocalStorage(group));
|
|
52
|
+
if (groupObj[itemname]) {
|
|
53
|
+
delete groupObj[itemname];
|
|
54
|
+
this.lStorageService.setitemonLocalStorage(group, JSON.stringify(groupObj));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: GroupStorageService, deps: [{ token: i1.SessionStorageService }, { token: i2.LocalStorageService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
58
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: GroupStorageService, providedIn: 'root' });
|
|
59
|
+
}
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: GroupStorageService, decorators: [{
|
|
61
|
+
type: Injectable,
|
|
62
|
+
args: [{
|
|
63
|
+
providedIn: 'root'
|
|
64
|
+
}]
|
|
65
|
+
}], ctorParameters: () => [{ type: i1.SessionStorageService }, { type: i2.LocalStorageService }] });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2dyb3VwLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBUzNDLE1BQU0sT0FBTyxtQkFBbUI7SUFDUjtJQUFzRDtJQUExRSxZQUFvQixxQkFBNEMsRUFBVSxlQUFvQztRQUExRiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQXFCO0lBQUcsQ0FBQztJQUUzRyxRQUFRO1FBQ1gsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxRQUFhLEVBQUUsU0FBYztRQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxRQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hELFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvSSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFDTSx1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLElBQVU7UUFDekQsSUFBSSxLQUFLLENBQUM7UUFDVixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNaLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN6RixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDTSwwQkFBMEIsQ0FBQyxRQUF5QjtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUM7dUdBN0NNLG1CQUFtQjsyR0FBbkIsbUJBQW1CLGNBSGhCLE1BQU07OzJGQUdULG1CQUFtQjtrQkFKL0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4vc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gXCIuL2xvY2FsLXN0b3JhZ2Uuc2VydmljZVwiO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VwU3RvcmFnZVNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UpIHt9XHJcblxyXG4gICAgcHVibGljIGdldEdyb3VwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbVNlc3Npb25TdG9yYWdlKCd0YWJJZCcpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21TZXNzaW9uU3RvcmFnZSgnYWNjb3VudGlkJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXHJcbiAgICAgIHB1YmxpYyBzZXRpdGVtVG9Hcm91cFN0b3JhZ2UoaXRlbW5hbWU6IGFueSwgaXRlbXZhbHVlOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ2V0R3JvdXAoKTtcclxuICAgICAgICBsZXQgZ3JvdXBPYmo6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZShncm91cCkpIHtcclxuICAgICAgICAgIGdyb3VwT2JqID0gSlNPTi5wYXJzZSh0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZShncm91cCkpP0pTT04ucGFyc2UodGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoZ3JvdXApKToge307XHJcbiAgICAgICAgICBpZiAoZ3JvdXBPYmopIHtcclxuICAgICAgICAgICAgZ3JvdXBPYmpbaXRlbW5hbWVdID0gaXRlbXZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cE9ialtpdGVtbmFtZV0gPSBpdGVtdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZShncm91cCwgSlNPTi5zdHJpbmdpZnkoZ3JvdXBPYmopKTtcclxuICAgICAgfVxyXG4gICAgICBwdWJsaWMgZ2V0aXRlbUZyb21Hcm91cFN0b3JhZ2UoaXRlbW5hbWU6IHN0cmluZywgdHlwZT86IGFueSkge1xyXG4gICAgICAgIGxldCBncm91cDtcclxuICAgICAgICBpZiAodHlwZSkge1xyXG4gICAgICAgICAgZ3JvdXAgPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cCA9IHRoaXMuZ2V0R3JvdXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKGdyb3VwKSkge1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBPYmogPSBKU09OLnBhcnNlKHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKGdyb3VwKSk7XHJcbiAgICAgICAgICBpZiAoZ3JvdXBPYmpbaXRlbW5hbWVdIHx8IChpdGVtbmFtZSA9PT0gJ2lzQ2hlY2tpbicgJiYgZ3JvdXBPYmpbaXRlbW5hbWVdICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBncm91cE9ialtpdGVtbmFtZV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHB1YmxpYyByZW1vdmVpdGVtRnJvbUdyb3VwU3RvcmFnZShpdGVtbmFtZTogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdldEdyb3VwKCk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBPYmogPSBKU09OLnBhcnNlKHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKGdyb3VwKSk7XHJcbiAgICAgICAgaWYgKGdyb3VwT2JqW2l0ZW1uYW1lXSkge1xyXG4gICAgICAgICAgZGVsZXRlIGdyb3VwT2JqW2l0ZW1uYW1lXTtcclxuICAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZShncm91cCwgSlNPTi5zdHJpbmdpZnkoZ3JvdXBPYmopKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { HttpClient } from '@angular/common/http';
|
|
4
|
+
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
5
|
+
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
|
6
|
+
import { SharedService } from './shared.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@ngx-translate/core";
|
|
9
|
+
export function HttpLoaderFactory(http, sharedService) {
|
|
10
|
+
return new TranslateHttpLoader(http, sharedService.getI8nPath() + 'assets/i18n/', '.json');
|
|
11
|
+
}
|
|
12
|
+
export class I8nModule {
|
|
13
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: I8nModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
14
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: I8nModule, imports: [CommonModule, i1.TranslateModule], exports: [TranslateModule] });
|
|
15
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: I8nModule, imports: [CommonModule,
|
|
16
|
+
TranslateModule.forRoot({
|
|
17
|
+
loader: {
|
|
18
|
+
provide: TranslateLoader,
|
|
19
|
+
useFactory: HttpLoaderFactory,
|
|
20
|
+
deps: [HttpClient, SharedService]
|
|
21
|
+
}
|
|
22
|
+
}), TranslateModule] });
|
|
23
|
+
}
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: I8nModule, decorators: [{
|
|
25
|
+
type: NgModule,
|
|
26
|
+
args: [{
|
|
27
|
+
declarations: [],
|
|
28
|
+
imports: [
|
|
29
|
+
CommonModule,
|
|
30
|
+
TranslateModule.forRoot({
|
|
31
|
+
loader: {
|
|
32
|
+
provide: TranslateLoader,
|
|
33
|
+
useFactory: HttpLoaderFactory,
|
|
34
|
+
deps: [HttpClient, SharedService]
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
],
|
|
38
|
+
exports: [
|
|
39
|
+
TranslateModule
|
|
40
|
+
]
|
|
41
|
+
}]
|
|
42
|
+
}] });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaThuLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2pjb25zdW1lci1zaGFyZWQvc3JjL2xpYi9pOG4ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRWpELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFnQixFQUFFLGFBQTRCO0lBQzlFLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFVBQVUsRUFBRSxHQUFHLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBa0JELE1BQU0sT0FBTyxTQUFTO3VHQUFULFNBQVM7d0dBQVQsU0FBUyxZQWJsQixZQUFZLGlDQVVaLGVBQWU7d0dBR04sU0FBUyxZQWJsQixZQUFZO1lBQ1osZUFBZSxDQUFDLE9BQU8sQ0FBQztnQkFDdEIsTUFBTSxFQUFFO29CQUNOLE9BQU8sRUFBRSxlQUFlO29CQUN0QixVQUFVLEVBQUUsaUJBQWlCO29CQUM3QixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDO2lCQUNwQzthQUNGLENBQUMsRUFHRixlQUFlOzsyRkFHTixTQUFTO2tCQWhCckIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZUFBZSxDQUFDLE9BQU8sQ0FBQzs0QkFDdEIsTUFBTSxFQUFFO2dDQUNOLE9BQU8sRUFBRSxlQUFlO2dDQUN0QixVQUFVLEVBQUUsaUJBQWlCO2dDQUM3QixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDOzZCQUNwQzt5QkFDRixDQUFDO3FCQUNIO29CQUNELE9BQU8sRUFBRzt3QkFDUixlQUFlO3FCQUNoQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUh0dHBMb2FkZXIgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9odHRwLWxvYWRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxvYWRlciwgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBIdHRwTG9hZGVyRmFjdG9yeShodHRwOiBIdHRwQ2xpZW50LCBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlKSB7XHJcbiAgcmV0dXJuIG5ldyBUcmFuc2xhdGVIdHRwTG9hZGVyKGh0dHAsIHNoYXJlZFNlcnZpY2UuZ2V0SThuUGF0aCgpICsgJ2Fzc2V0cy9pMThuLycsICcuanNvbicpO1xyXG59XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW10sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLmZvclJvb3Qoe1xyXG4gICAgICBsb2FkZXI6IHtcclxuICAgICAgICBwcm92aWRlOiBUcmFuc2xhdGVMb2FkZXIsXHJcbiAgICAgICAgICB1c2VGYWN0b3J5OiBIdHRwTG9hZGVyRmFjdG9yeSxcclxuICAgICAgICAgIGRlcHM6IFtIdHRwQ2xpZW50LCBTaGFyZWRTZXJ2aWNlXVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIF0sXHJcbiAgZXhwb3J0cyA6IFtcclxuICAgIFRyYW5zbGF0ZU1vZHVsZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEk4bk1vZHVsZSB7IH1cclxuIl19
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Handle Local Storage related actions
|
|
5
|
+
*/
|
|
6
|
+
export class LocalStorageService {
|
|
7
|
+
/* holds the variables which not removed by clearLocalstorage() method */
|
|
8
|
+
dont_delete_localstorage = ['refreshToken', 'userType', 'version', 'qrp', 'mUniqueId', 'authToken', 'reqFrom', 'source', 'translatevariable', 'appId', 'installId', 'appUniqueId', 'cleared', 'googleToken', 'sysdate', 'pt_pwd', 'target', 'activeLocation', 'busId'];
|
|
9
|
+
/**
|
|
10
|
+
* Default constructor
|
|
11
|
+
*/
|
|
12
|
+
constructor() {
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* function to get local storage item value
|
|
16
|
+
* @param itemname name of variable
|
|
17
|
+
*/
|
|
18
|
+
getitemfromLocalStorage(itemname) {
|
|
19
|
+
// if (isPlatformBrowser(this.platformId)) {
|
|
20
|
+
if (localStorage.getItem(itemname) !== 'undefined') {
|
|
21
|
+
return JSON.parse(localStorage.getItem(itemname));
|
|
22
|
+
}
|
|
23
|
+
// }
|
|
24
|
+
// return null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* // function to set local storage item value
|
|
28
|
+
* @param itemname name of variable
|
|
29
|
+
* @param itemvalue value to set
|
|
30
|
+
*/
|
|
31
|
+
setitemonLocalStorage(itemname, itemvalue) {
|
|
32
|
+
// if (isPlatformBrowser(this.platformId)) {
|
|
33
|
+
localStorage.setItem(itemname, JSON.stringify(itemvalue));
|
|
34
|
+
// }
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Method to remove an item from local storage
|
|
38
|
+
* @param itemname item to be removed
|
|
39
|
+
*/
|
|
40
|
+
removeitemfromLocalStorage(itemname) {
|
|
41
|
+
// if (isPlatformBrowser(this.platformId)) {
|
|
42
|
+
localStorage.removeItem(itemname);
|
|
43
|
+
// }
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Method to clear the local storage items except the ones contained in 'dont_delete_localstorage'
|
|
47
|
+
*/
|
|
48
|
+
clearLocalstorage() {
|
|
49
|
+
// if (isPlatformBrowser(this.platformId)) {
|
|
50
|
+
this.removeitemfromLocalStorage('ynw-credentials');
|
|
51
|
+
for (let index = 0; index < localStorage.length; index++) {
|
|
52
|
+
if (this.dont_delete_localstorage.indexOf(localStorage.key(index)) === -1) {
|
|
53
|
+
localStorage.removeItem(localStorage.key(index));
|
|
54
|
+
index = index - 1; // manage index after remove
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// }
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Method to clear the local storage items
|
|
61
|
+
*/
|
|
62
|
+
clearAll() {
|
|
63
|
+
for (let index = 0; index < localStorage.length; index++) {
|
|
64
|
+
localStorage.removeItem(localStorage.key(index));
|
|
65
|
+
index = index - 1; // manage index after remove
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: LocalStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
69
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: LocalStorageService, providedIn: 'root' });
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: LocalStorageService, decorators: [{
|
|
72
|
+
type: Injectable,
|
|
73
|
+
args: [{
|
|
74
|
+
providedIn: 'root'
|
|
75
|
+
}]
|
|
76
|
+
}], ctorParameters: () => [] });
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2xvY2FsLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQzs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFFNUIseUVBQXlFO0lBQ3pFLHdCQUF3QixHQUFHLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXZROztPQUVHO0lBQ0g7SUFHQSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksdUJBQXVCLENBQUMsUUFBZ0I7UUFDM0MsNENBQTRDO1FBQzVDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxJQUFJO1FBQ0osZUFBZTtJQUNuQixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNJLHFCQUFxQixDQUFDLFFBQWdCLEVBQUUsU0FBYztRQUN6RCw0Q0FBNEM7UUFDNUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUk7SUFDUixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ksMEJBQTBCLENBQUMsUUFBZ0I7UUFDOUMsNENBQTRDO1FBQzVDLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsSUFBSTtJQUNSLENBQUM7SUFDRDs7T0FFRztJQUNJLGlCQUFpQjtRQUNwQiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkQsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN2RCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hFLFlBQVksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtZQUNuRCxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUk7SUFDUixDQUFDO0lBQ0Q7O09BRUc7SUFDSSxRQUFRO1FBQ1gsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN2RCxZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqRCxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtRQUNuRCxDQUFDO0lBQ0wsQ0FBQzt1R0FsRVEsbUJBQW1COzJHQUFuQixtQkFBbUIsY0FMaEIsTUFBTTs7MkZBS1QsbUJBQW1CO2tCQU4vQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbi8qKlxyXG4gKiBIYW5kbGUgTG9jYWwgU3RvcmFnZSByZWxhdGVkIGFjdGlvbnNcclxuICovXHJcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIHtcclxuXHJcbiAgICAvKiBob2xkcyB0aGUgdmFyaWFibGVzIHdoaWNoIG5vdCByZW1vdmVkIGJ5IGNsZWFyTG9jYWxzdG9yYWdlKCkgbWV0aG9kICovXHJcbiAgICBkb250X2RlbGV0ZV9sb2NhbHN0b3JhZ2UgPSBbJ3JlZnJlc2hUb2tlbicsICd1c2VyVHlwZScsICd2ZXJzaW9uJywgJ3FycCcsICdtVW5pcXVlSWQnLCAnYXV0aFRva2VuJywgJ3JlcUZyb20nLCAnc291cmNlJywgJ3RyYW5zbGF0ZXZhcmlhYmxlJywgJ2FwcElkJywgJ2luc3RhbGxJZCcsICdhcHBVbmlxdWVJZCcsICdjbGVhcmVkJywgJ2dvb2dsZVRva2VuJywgJ3N5c2RhdGUnLCAncHRfcHdkJywgJ3RhcmdldCcsICdhY3RpdmVMb2NhdGlvbicsICdidXNJZCddO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmYXVsdCBjb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICAvLyBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IG9iamVjdFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBmdW5jdGlvbiB0byBnZXQgbG9jYWwgc3RvcmFnZSBpdGVtIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gaXRlbW5hbWUgbmFtZSBvZiB2YXJpYWJsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoaXRlbW5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIC8vIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGl0ZW1uYW1lKSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oaXRlbW5hbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiAvLyBmdW5jdGlvbiB0byBzZXQgbG9jYWwgc3RvcmFnZSBpdGVtIHZhbHVlXHJcbiAgICAgKiBAcGFyYW0gaXRlbW5hbWUgbmFtZSBvZiB2YXJpYWJsZSBcclxuICAgICAqIEBwYXJhbSBpdGVtdmFsdWUgdmFsdWUgdG8gc2V0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRpdGVtb25Mb2NhbFN0b3JhZ2UoaXRlbW5hbWU6IHN0cmluZywgaXRlbXZhbHVlOiBhbnkpIHtcclxuICAgICAgICAvLyBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGl0ZW1uYW1lLCBKU09OLnN0cmluZ2lmeShpdGVtdmFsdWUpKTtcclxuICAgICAgICAvLyB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0byByZW1vdmUgYW4gaXRlbSBmcm9tIGxvY2FsIHN0b3JhZ2VcclxuICAgICAqIEBwYXJhbSBpdGVtbmFtZSBpdGVtIHRvIGJlIHJlbW92ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZWl0ZW1mcm9tTG9jYWxTdG9yYWdlKGl0ZW1uYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGl0ZW1uYW1lKTtcclxuICAgICAgICAvLyB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0byBjbGVhciB0aGUgbG9jYWwgc3RvcmFnZSBpdGVtcyBleGNlcHQgdGhlIG9uZXMgY29udGFpbmVkIGluICdkb250X2RlbGV0ZV9sb2NhbHN0b3JhZ2UnXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbGVhckxvY2Fsc3RvcmFnZSgpIHtcclxuICAgICAgICAvLyBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlaXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3ludy1jcmVkZW50aWFscycpO1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsb2NhbFN0b3JhZ2UubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRvbnRfZGVsZXRlX2xvY2Fsc3RvcmFnZS5pbmRleE9mKGxvY2FsU3RvcmFnZS5rZXkoaW5kZXgpKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGxvY2FsU3RvcmFnZS5rZXkoaW5kZXgpKTtcclxuICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggLSAxOyAvLyBtYW5hZ2UgaW5kZXggYWZ0ZXIgcmVtb3ZlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdG8gY2xlYXIgdGhlIGxvY2FsIHN0b3JhZ2UgaXRlbXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsZWFyQWxsKCkge1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsb2NhbFN0b3JhZ2UubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGxvY2FsU3RvcmFnZS5rZXkoaW5kZXgpKTtcclxuICAgICAgICAgICAgaW5kZXggPSBpbmRleCAtIDE7IC8vIG1hbmFnZSBpbmRleCBhZnRlciByZW1vdmVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { Component, forwardRef, Input, ViewChild, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import intlTelInput from 'intl-tel-input';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@angular/forms";
|
|
7
|
+
export class PhoneInputComponent {
|
|
8
|
+
initialCountry = 'us'; // Default to 'us'
|
|
9
|
+
preferredCountries = []; // List of preferred countries
|
|
10
|
+
nationalMode = true; // Use national mode so dial code is hidden in input box
|
|
11
|
+
separateDialCode = true; // Whether to separate dial code (controls formatting)
|
|
12
|
+
otherOptions = {}; // Any other options for intl-tel-input
|
|
13
|
+
phoneInput;
|
|
14
|
+
phoneNumber = { dialCode: '', countryCode: '', e164Number: '', number: '' }; // Structured phone number object
|
|
15
|
+
phoneInputInstance;
|
|
16
|
+
// Output Event to send the phone number value to the parent component
|
|
17
|
+
phoneNumberChange = new EventEmitter();
|
|
18
|
+
// Function to handle form control value changes
|
|
19
|
+
onChange = (value) => { };
|
|
20
|
+
onTouched = () => { };
|
|
21
|
+
ngAfterViewInit() {
|
|
22
|
+
if (this.phoneInput && this.phoneInput.nativeElement) {
|
|
23
|
+
this.initializePhoneInput();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Initialize intl-tel-input for the phone input field
|
|
27
|
+
initializePhoneInput() {
|
|
28
|
+
const options = {
|
|
29
|
+
initialCountry: this.initialCountry,
|
|
30
|
+
preferredCountries: this.preferredCountries,
|
|
31
|
+
nationalMode: this.nationalMode, // Use national mode to hide dial code
|
|
32
|
+
separateDialCode: this.separateDialCode, // Keep separate dial code for processing
|
|
33
|
+
utilsScript: 'https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/17.0.8/js/utils.js',
|
|
34
|
+
...this.otherOptions // Merge any additional options provided
|
|
35
|
+
};
|
|
36
|
+
// Initialize intl-tel-input
|
|
37
|
+
this.phoneInputInstance = intlTelInput(this.phoneInput.nativeElement, options);
|
|
38
|
+
// Capture the country change event to track the selected country code and dial code
|
|
39
|
+
this.phoneInput.nativeElement.addEventListener('countrychange', () => {
|
|
40
|
+
this.updatePhoneNumber();
|
|
41
|
+
});
|
|
42
|
+
// Capture input event to update phone number in E.164 format
|
|
43
|
+
this.phoneInput.nativeElement.addEventListener('input', () => {
|
|
44
|
+
this.updatePhoneNumber();
|
|
45
|
+
});
|
|
46
|
+
// Set the initial value if available (without showing the dial code)
|
|
47
|
+
if (this.phoneNumber.e164Number) {
|
|
48
|
+
this.phoneInputInstance.setNumber(this.phoneNumber.e164Number); // Set the E.164 formatted number
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Method to update the phone number object
|
|
52
|
+
updatePhoneNumber() {
|
|
53
|
+
const dialCode = '+' + this.phoneInputInstance.getSelectedCountryData().dialCode;
|
|
54
|
+
const countryCode = this.phoneInputInstance.getSelectedCountryData().iso2;
|
|
55
|
+
const e164Number = this.phoneInputInstance.getNumber(); // Full number in E.164 format
|
|
56
|
+
const number = e164Number.split(dialCode)[1];
|
|
57
|
+
// Update the phoneNumber object with the full details
|
|
58
|
+
this.phoneNumber = {
|
|
59
|
+
dialCode,
|
|
60
|
+
countryCode,
|
|
61
|
+
e164Number,
|
|
62
|
+
number
|
|
63
|
+
};
|
|
64
|
+
// Emit the updated value to the parent component
|
|
65
|
+
this.phoneNumberChange.emit(this.phoneNumber); // Sending the value to parent
|
|
66
|
+
}
|
|
67
|
+
// Implement the writeValue method for ControlValueAccessor
|
|
68
|
+
writeValue(value) {
|
|
69
|
+
if (value && value.e164Number) {
|
|
70
|
+
this.phoneNumber = value;
|
|
71
|
+
if (this.phoneInput && this.phoneInput.nativeElement) {
|
|
72
|
+
this.phoneInputInstance.setNumber(value.e164Number); // Set the E.164 formatted number
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Implement the registerOnChange method for ControlValueAccessor
|
|
77
|
+
registerOnChange(fn) {
|
|
78
|
+
this.onChange = fn;
|
|
79
|
+
}
|
|
80
|
+
// Implement the registerOnTouched method for ControlValueAccessor
|
|
81
|
+
registerOnTouched(fn) {
|
|
82
|
+
this.onTouched = fn;
|
|
83
|
+
}
|
|
84
|
+
// Custom Validation Method: Validate the phone number
|
|
85
|
+
validatePhoneNumber() {
|
|
86
|
+
if (this.phoneInputInstance) {
|
|
87
|
+
// Check if the current phone number is valid according to the selected country
|
|
88
|
+
const isValid = this.phoneInputInstance.isValidNumber() || this.phoneNumber.number.startsWith('555');
|
|
89
|
+
return isValid;
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PhoneInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
94
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: PhoneInputComponent, selector: "app-phone-input", inputs: { initialCountry: "initialCountry", preferredCountries: "preferredCountries", nationalMode: "nationalMode", separateDialCode: "separateDialCode", otherOptions: "otherOptions" }, outputs: { phoneNumberChange: "phoneNumberChange" }, providers: [
|
|
95
|
+
{
|
|
96
|
+
provide: NG_VALUE_ACCESSOR,
|
|
97
|
+
useExisting: forwardRef(() => PhoneInputComponent),
|
|
98
|
+
multi: true
|
|
99
|
+
}
|
|
100
|
+
], viewQueries: [{ propertyName: "phoneInput", first: true, predicate: ["phoneInput"], descendants: true }], ngImport: i0, template: "<div class=\"phone-input-wrapper\">\r\n <input #phoneInput type=\"tel\" [(ngModel)]=\"phoneNumber.phoneNumber\"\r\n name=\"phoneNumber\" [required]=\"true\" #phone=\"ngModel\"\r\n [ngClass]=\"{'is-invalid': !validatePhoneNumber() && phone.touched}\">\r\n\r\n <!-- Validation feedback -->\r\n <!-- <div *ngIf=\"!validatePhoneNumber() && phone.touched\" class=\"text-danger\">\r\n Invalid phone number.\r\n </div> -->\r\n <!-- <input #phoneInput [(ngModel)]=\"phoneNumber.number\" /> -->\r\n</div>", styles: ["::ng-deep .tel-input-container .iti{width:100%!important}::ng-deep .tel-input-container .iti--separate-dial-code .iti__selected-flag{background-color:transparent}::ng-deep .tel-input-container input::-webkit-input-placeholder{color:#ddd!important}::ng-deep .tel-input-container input:focus{outline:none!important;border-color:#e1e2e3!important}::ng-deep .tel-input-container input{height:50px!important;width:100%!important;background:#fff!important;border:1.39032px solid #E1E2E3!important;border-radius:11.1225px!important;padding:15px;font-size:15px}::ng-deep .tel-input-container input.is-invalid{border:1.39032px solid #ff0000!important}::ng-deep .tel-input-container input::placeholder{color:#ddd}::ng-deep .tel-input-container input.custom:focus{color:#495057!important;background-color:#fff!important;border-color:#3c8dbc!important;outline:0!important;box-shadow:0 0 #fff!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
101
|
+
}
|
|
102
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PhoneInputComponent, decorators: [{
|
|
103
|
+
type: Component,
|
|
104
|
+
args: [{ selector: 'app-phone-input', providers: [
|
|
105
|
+
{
|
|
106
|
+
provide: NG_VALUE_ACCESSOR,
|
|
107
|
+
useExisting: forwardRef(() => PhoneInputComponent),
|
|
108
|
+
multi: true
|
|
109
|
+
}
|
|
110
|
+
], template: "<div class=\"phone-input-wrapper\">\r\n <input #phoneInput type=\"tel\" [(ngModel)]=\"phoneNumber.phoneNumber\"\r\n name=\"phoneNumber\" [required]=\"true\" #phone=\"ngModel\"\r\n [ngClass]=\"{'is-invalid': !validatePhoneNumber() && phone.touched}\">\r\n\r\n <!-- Validation feedback -->\r\n <!-- <div *ngIf=\"!validatePhoneNumber() && phone.touched\" class=\"text-danger\">\r\n Invalid phone number.\r\n </div> -->\r\n <!-- <input #phoneInput [(ngModel)]=\"phoneNumber.number\" /> -->\r\n</div>", styles: ["::ng-deep .tel-input-container .iti{width:100%!important}::ng-deep .tel-input-container .iti--separate-dial-code .iti__selected-flag{background-color:transparent}::ng-deep .tel-input-container input::-webkit-input-placeholder{color:#ddd!important}::ng-deep .tel-input-container input:focus{outline:none!important;border-color:#e1e2e3!important}::ng-deep .tel-input-container input{height:50px!important;width:100%!important;background:#fff!important;border:1.39032px solid #E1E2E3!important;border-radius:11.1225px!important;padding:15px;font-size:15px}::ng-deep .tel-input-container input.is-invalid{border:1.39032px solid #ff0000!important}::ng-deep .tel-input-container input::placeholder{color:#ddd}::ng-deep .tel-input-container input.custom:focus{color:#495057!important;background-color:#fff!important;border-color:#3c8dbc!important;outline:0!important;box-shadow:0 0 #fff!important}\n"] }]
|
|
111
|
+
}], propDecorators: { initialCountry: [{
|
|
112
|
+
type: Input
|
|
113
|
+
}], preferredCountries: [{
|
|
114
|
+
type: Input
|
|
115
|
+
}], nationalMode: [{
|
|
116
|
+
type: Input
|
|
117
|
+
}], separateDialCode: [{
|
|
118
|
+
type: Input
|
|
119
|
+
}], otherOptions: [{
|
|
120
|
+
type: Input
|
|
121
|
+
}], phoneInput: [{
|
|
122
|
+
type: ViewChild,
|
|
123
|
+
args: ['phoneInput', { static: false }]
|
|
124
|
+
}], phoneNumberChange: [{
|
|
125
|
+
type: Output
|
|
126
|
+
}] } });
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL3Bob25lLWlucHV0L3Bob25lLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2pjb25zdW1lci1zaGFyZWQvc3JjL2xpYi9waG9uZS1pbnB1dC9waG9uZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pILE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWMxQyxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLGNBQWMsR0FBVyxJQUFJLENBQUMsQ0FBQyxrQkFBa0I7SUFDakQsa0JBQWtCLEdBQWEsRUFBRSxDQUFDLENBQUMsOEJBQThCO0lBQ2pFLFlBQVksR0FBWSxJQUFJLENBQUMsQ0FBQyx3REFBd0Q7SUFDdEYsZ0JBQWdCLEdBQVksSUFBSSxDQUFDLENBQUMsc0RBQXNEO0lBQ3hGLFlBQVksR0FBUSxFQUFFLENBQUMsQ0FBQyx1Q0FBdUM7SUFFNUIsVUFBVSxDQUFhO0lBQ25FLFdBQVcsR0FBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztJQUNuSCxrQkFBa0IsQ0FBTTtJQUV4QixzRUFBc0U7SUFDNUQsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUV0RCxnREFBZ0Q7SUFDaEQsUUFBUSxHQUFHLENB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QUFFLEtBQUssRUFBRTtnQkFLaEMsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBmb3J3YXJkUmVmLCBJbnB1dCwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCBpbnRsVGVsSW5wdXQgZnJvbSAnaW50bC10ZWwtaW5wdXQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcGhvbmUtaW5wdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9waG9uZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGhvbmUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBob25lSW5wdXRDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBob25lSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgaW5pdGlhbENvdW50cnk6IHN0cmluZyA9ICd1cyc7IC8vIERlZmF1bHQgdG8gJ3VzJ1xyXG4gIEBJbnB1dCgpIHByZWZlcnJlZENvdW50cmllczogc3RyaW5nW10gPSBbXTsgLy8gTGlzdCBvZiBwcmVmZXJyZWQgY291bnRyaWVzXHJcbiAgQElucHV0KCkgbmF0aW9uYWxNb2RlOiBib29sZWFuID0gdHJ1ZTsgLy8gVXNlIG5hdGlvbmFsIG1vZGUgc28gZGlhbCBjb2RlIGlzIGhpZGRlbiBpbiBpbnB1dCBib3hcclxuICBASW5wdXQoKSBzZXBhcmF0ZURpYWxDb2RlOiBib29sZWFuID0gdHJ1ZTsgLy8gV2hldGhlciB0byBzZXBhcmF0ZSBkaWFsIGNvZGUgKGNvbnRyb2xzIGZvcm1hdHRpbmcpXHJcbiAgQElucHV0KCkgb3RoZXJPcHRpb25zOiBhbnkgPSB7fTsgLy8gQW55IG90aGVyIG9wdGlvbnMgZm9yIGludGwtdGVsLWlucHV0XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3Bob25lSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGhvbmVJbnB1dDogRWxlbWVudFJlZjtcclxuICBwaG9uZU51bWJlcjogYW55ID0geyBkaWFsQ29kZTogJycsIGNvdW50cnlDb2RlOiAnJywgZTE2NE51bWJlcjogJycsIG51bWJlcjogJycgfTsgLy8gU3RydWN0dXJlZCBwaG9uZSBudW1iZXIgb2JqZWN0XHJcbiAgcGhvbmVJbnB1dEluc3RhbmNlOiBhbnk7XHJcblxyXG4gIC8vIE91dHB1dCBFdmVudCB0byBzZW5kIHRoZSBwaG9uZSBudW1iZXIgdmFsdWUgdG8gdGhlIHBhcmVudCBjb21wb25lbnRcclxuICBAT3V0cHV0KCkgcGhvbmVOdW1iZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIGZvcm0gY29udHJvbCB2YWx1ZSBjaGFuZ2VzXHJcbiAgb25DaGFuZ2UgPSAodmFsdWU6IGFueSkgPT4ge307XHJcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBob25lSW5wdXQgJiYgdGhpcy5waG9uZUlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplUGhvbmVJbnB1dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSW5pdGlhbGl6ZSBpbnRsLXRlbC1pbnB1dCBmb3IgdGhlIHBob25lIGlucHV0IGZpZWxkXHJcbiAgaW5pdGlhbGl6ZVBob25lSW5wdXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICBpbml0aWFsQ291bnRyeTogdGhpcy5pbml0aWFsQ291bnRyeSxcclxuICAgICAgcHJlZmVycmVkQ291bnRyaWVzOiB0aGlzLnByZWZlcnJlZENvdW50cmllcyxcclxuICAgICAgbmF0aW9uYWxNb2RlOiB0aGlzLm5hdGlvbmFsTW9kZSwgLy8gVXNlIG5hdGlvbmFsIG1vZGUgdG8gaGlkZSBkaWFsIGNvZGVcclxuICAgICAgc2VwYXJhdGVEaWFsQ29kZTogdGhpcy5zZXBhcmF0ZURpYWxDb2RlLCAvLyBLZWVwIHNlcGFyYXRlIGRpYWwgY29kZSBmb3IgcHJvY2Vzc2luZ1xyXG4gICAgICB1dGlsc1NjcmlwdDogJ2h0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2ludGwtdGVsLWlucHV0LzE3LjAuOC9qcy91dGlscy5qcycsXHJcbiAgICAgIC4uLnRoaXMub3RoZXJPcHRpb25zIC8vIE1lcmdlIGFueSBhZGRpdGlvbmFsIG9wdGlvbnMgcHJvdmlkZWRcclxuICAgIH07XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBpbnRsLXRlbC1pbnB1dFxyXG4gICAgdGhpcy5waG9uZUlucHV0SW5zdGFuY2UgPSBpbnRsVGVsSW5wdXQodGhpcy5waG9uZUlucHV0Lm5hdGl2ZUVsZW1lbnQsIG9wdGlvbnMpO1xyXG5cclxuICAgIC8vIENhcHR1cmUgdGhlIGNvdW50cnkgY2hhbmdlIGV2ZW50IHRvIHRyYWNrIHRoZSBzZWxlY3RlZCBjb3VudHJ5IGNvZGUgYW5kIGRpYWwgY29kZVxyXG4gICAgdGhpcy5waG9uZUlucHV0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY291bnRyeWNoYW5nZScsICgpID0+IHtcclxuICAgICAgdGhpcy51cGRhdGVQaG9uZU51bWJlcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2FwdHVyZSBpbnB1dCBldmVudCB0byB1cGRhdGUgcGhvbmUgbnVtYmVyIGluIEUuMTY0IGZvcm1hdFxyXG4gICAgdGhpcy5waG9uZUlucHV0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlUGhvbmVOdW1iZXIoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBpZiBhdmFpbGFibGUgKHdpdGhvdXQgc2hvd2luZyB0aGUgZGlhbCBjb2RlKVxyXG4gICAgaWYgKHRoaXMucGhvbmVOdW1iZXIuZTE2NE51bWJlcikge1xyXG4gICAgICB0aGlzLnBob25lSW5wdXRJbnN0YW5jZS5zZXROdW1iZXIodGhpcy5waG9uZU51bWJlci5lMTY0TnVtYmVyKTsgLy8gU2V0IHRoZSBFLjE2NCBmb3JtYXR0ZWQgbnVtYmVyXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNZXRob2QgdG8gdXBkYXRlIHRoZSBwaG9uZSBudW1iZXIgb2JqZWN0XHJcbiAgdXBkYXRlUGhvbmVOdW1iZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkaWFsQ29kZSA9ICcrJyArIHRoaXMucGhvbmVJbnB1dEluc3RhbmNlLmdldFNlbGVjdGVkQ291bnRyeURhdGEoKS5kaWFsQ29kZTtcclxuICAgIGNvbnN0IGNvdW50cnlDb2RlID0gdGhpcy5waG9uZUlucHV0SW5zdGFuY2UuZ2V0U2VsZWN0ZWRDb3VudHJ5RGF0YSgpLmlzbzI7XHJcbiAgICBjb25zdCBlMTY0TnVtYmVyID0gdGhpcy5waG9uZUlucHV0SW5zdGFuY2UuZ2V0TnVtYmVyKCk7IC8vIEZ1bGwgbnVtYmVyIGluIEUuMTY0IGZvcm1hdFxyXG4gICAgY29uc3QgbnVtYmVyID0gZTE2NE51bWJlci5zcGxpdChkaWFsQ29kZSlbMV07XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBwaG9uZU51bWJlciBvYmplY3Qgd2l0aCB0aGUgZnVsbCBkZXRhaWxzXHJcbiAgICB0aGlzLnBob25lTnVtYmVyID0ge1xyXG4gICAgICBkaWFsQ29kZSxcclxuICAgICAgY291bnRyeUNvZGUsXHJcbiAgICAgIGUxNjROdW1iZXIsXHJcbiAgICAgIG51bWJlclxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBFbWl0IHRoZSB1cGRhdGVkIHZhbHVlIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XHJcbiAgICB0aGlzLnBob25lTnVtYmVyQ2hhbmdlLmVtaXQodGhpcy5waG9uZU51bWJlcik7ICAvLyBTZW5kaW5nIHRoZSB2YWx1ZSB0byBwYXJlbnRcclxuICB9XHJcblxyXG4gIC8vIEltcGxlbWVudCB0aGUgd3JpdGVWYWx1ZSBtZXRob2QgZm9yIENvbnRyb2xWYWx1ZUFjY2Vzc29yXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuZTE2NE51bWJlcikge1xyXG4gICAgICB0aGlzLnBob25lTnVtYmVyID0gdmFsdWU7XHJcbiAgICAgIGlmICh0aGlzLnBob25lSW5wdXQgJiYgdGhpcy5waG9uZUlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLnBob25lSW5wdXRJbnN0YW5jZS5zZXROdW1iZXIodmFsdWUuZTE2NE51bWJlcik7IC8vIFNldCB0aGUgRS4xNjQgZm9ybWF0dGVkIG51bWJlclxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBJbXBsZW1lbnQgdGhlIHJlZ2lzdGVyT25DaGFuZ2UgbWV0aG9kIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgLy8gSW1wbGVtZW50IHRoZSByZWdpc3Rlck9uVG91Y2hlZCBtZXRob2QgZm9yIENvbnRyb2xWYWx1ZUFjY2Vzc29yXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIC8vIEN1c3RvbSBWYWxpZGF0aW9uIE1ldGhvZDogVmFsaWRhdGUgdGhlIHBob25lIG51bWJlclxyXG4gIHZhbGlkYXRlUGhvbmVOdW1iZXIoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5waG9uZUlucHV0SW5zdGFuY2UpIHtcclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgcGhvbmUgbnVtYmVyIGlzIHZhbGlkIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgY291bnRyeVxyXG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5waG9uZUlucHV0SW5zdGFuY2UuaXNWYWxpZE51bWJlcigpIHx8IHRoaXMucGhvbmVOdW1iZXIubnVtYmVyLnN0YXJ0c1dpdGgoJzU1NScpO1xyXG4gICAgICByZXR1cm4gaXNWYWxpZDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn0iLCI8ZGl2IGNsYXNzPVwicGhvbmUtaW5wdXQtd3JhcHBlclwiPlxyXG4gICAgPGlucHV0ICNwaG9uZUlucHV0IHR5cGU9XCJ0ZWxcIiBbKG5nTW9kZWwpXT1cInBob25lTnVtYmVyLnBob25lTnVtYmVyXCJcclxuICAgICAgICBuYW1lPVwicGhvbmVOdW1iZXJcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiICNwaG9uZT1cIm5nTW9kZWxcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6ICF2YWxpZGF0ZVBob25lTnVtYmVyKCkgJiYgcGhvbmUudG91Y2hlZH1cIj5cclxuXHJcbiAgICA8IS0tIFZhbGlkYXRpb24gZmVlZGJhY2sgLS0+XHJcbiAgICA8IS0tIDxkaXYgKm5nSWY9XCIhdmFsaWRhdGVQaG9uZU51bWJlcigpICYmIHBob25lLnRvdWNoZWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgSW52YWxpZCBwaG9uZSBudW1iZXIuXHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgICA8IS0tIDxpbnB1dCAjcGhvbmVJbnB1dCBbKG5nTW9kZWwpXT1cInBob25lTnVtYmVyLm51bWJlclwiIC8+IC0tPlxyXG48L2Rpdj4iXX0=
|