@tuki-io/tuki-widgets 0.0.190 → 0.0.192
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/esm2020/user-creation/src/app.constants.mjs +9 -2
- package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +19 -0
- package/esm2020/user-creation/src/shared/material.module.mjs +35 -7
- package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +42 -19
- package/esm2020/user-creation/src/user-creation.module.mjs +4 -1
- package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +14 -0
- package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +147 -0
- package/esm2020/user-creation/src/utils/validation.mjs +14 -0
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +429 -20
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.mjs +3 -3
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +80 -34
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +61 -11
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +509 -130
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +1446 -300
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +1408 -287
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/package.json +1 -1
- package/user-creation/src/app.constants.d.ts +7 -0
- package/user-creation/src/interfaces/user-creation-wizard.interfaces.d.ts +483 -0
- package/user-creation/src/shared/material.module.d.ts +5 -1
- package/user-creation/src/shared/services/user-creation-api.service.d.ts +8 -2
- package/user-creation/src/user-creation.module.d.ts +11 -10
- package/user-creation/src/utils/app-loader/app-loader.d.ts +6 -0
- package/user-creation/src/utils/build-savable-end-user.d.ts +23 -0
- package/user-creation/src/utils/validation.d.ts +4 -0
- package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +75 -7
- package/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.d.ts +11 -4
- package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.d.ts +13 -0
- package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.d.ts +57 -56
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export const ENTITY_CHANGE_TYPE = {
|
|
2
|
+
ADDED: 'added',
|
|
3
|
+
UPDATED: 'updated',
|
|
4
|
+
EXISTING: 'existing',
|
|
5
|
+
REMOVED: 'removed',
|
|
6
|
+
};
|
|
7
|
+
function deepClone(value) {
|
|
8
|
+
return JSON.parse(JSON.stringify(value));
|
|
9
|
+
}
|
|
10
|
+
function toApiBooleanString(value) {
|
|
11
|
+
if (value === true || value === 'true') {
|
|
12
|
+
return 'true';
|
|
13
|
+
}
|
|
14
|
+
if (value === false || value === 'false') {
|
|
15
|
+
return 'false';
|
|
16
|
+
}
|
|
17
|
+
return value == null || value === '' ? '' : String(value);
|
|
18
|
+
}
|
|
19
|
+
function toApiStringValue(value) {
|
|
20
|
+
if (value === true) {
|
|
21
|
+
return 'true';
|
|
22
|
+
}
|
|
23
|
+
if (value === false) {
|
|
24
|
+
return 'false';
|
|
25
|
+
}
|
|
26
|
+
return value == null ? '' : String(value);
|
|
27
|
+
}
|
|
28
|
+
function normalizeCallInfoDisplay(callInfoDisplay) {
|
|
29
|
+
if (!callInfoDisplay) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (typeof callInfoDisplay === 'string') {
|
|
33
|
+
try {
|
|
34
|
+
const parsed = JSON.parse(callInfoDisplay);
|
|
35
|
+
return normalizeCallInfoDisplay(parsed);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (typeof callInfoDisplay !== 'object') {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const source = callInfoDisplay;
|
|
45
|
+
return {
|
|
46
|
+
callerName: source['callerName'] != null ? toApiBooleanString(source['callerName']) : null,
|
|
47
|
+
callerNumber: source['callerNumber'] != null ? toApiBooleanString(source['callerNumber']) : null,
|
|
48
|
+
redirectedNumber: source['redirectedNumber'] != null ? toApiBooleanString(source['redirectedNumber']) : null,
|
|
49
|
+
dialedNumber: source['dialedNumber'] != null ? toApiBooleanString(source['dialedNumber']) : null,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function normalizeDidPattern(didPattern, line, directoryNumber) {
|
|
53
|
+
if (didPattern && typeof didPattern === 'object') {
|
|
54
|
+
return didPattern;
|
|
55
|
+
}
|
|
56
|
+
if (typeof didPattern === 'string' && didPattern.trim()) {
|
|
57
|
+
return { calledPartyTransformationMask: didPattern };
|
|
58
|
+
}
|
|
59
|
+
const dn = directoryNumber || line?.directoryNumber?.directoryNumber;
|
|
60
|
+
if (dn) {
|
|
61
|
+
return { calledPartyTransformationMask: dn };
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
function normalizeDirectoryNumber(directoryNumber) {
|
|
66
|
+
const { displayValue: _displayValue, ...rest } = directoryNumber;
|
|
67
|
+
return {
|
|
68
|
+
directoryNumber: rest.directoryNumber ?? '',
|
|
69
|
+
routePartitionName: rest.routePartitionName ?? '',
|
|
70
|
+
templateDirectoryNumber: rest.templateDirectoryNumber,
|
|
71
|
+
pkid: rest.pkid || null,
|
|
72
|
+
dnType: rest.dnType || null,
|
|
73
|
+
subType: rest.subType ?? null,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function prepareLineAssociation(association, line) {
|
|
77
|
+
const prepared = deepClone(association);
|
|
78
|
+
const lineDn = line?.directoryNumber;
|
|
79
|
+
if (lineDn) {
|
|
80
|
+
prepared.directoryNumber = {
|
|
81
|
+
...prepared.directoryNumber,
|
|
82
|
+
directoryNumber: lineDn.directoryNumber || '',
|
|
83
|
+
routePartitionName: lineDn.routePartitionName || '',
|
|
84
|
+
templateDirectoryNumber: lineDn.templateDirectoryNumber ??
|
|
85
|
+
prepared.directoryNumber?.templateDirectoryNumber,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
prepared.directoryNumber = normalizeDirectoryNumber(prepared.directoryNumber);
|
|
89
|
+
prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;
|
|
90
|
+
prepared.logMissedCall = toApiBooleanString(prepared.logMissedCall);
|
|
91
|
+
prepared.callInfoDisplay = normalizeCallInfoDisplay(prepared.callInfoDisplay);
|
|
92
|
+
prepared.didPattern = normalizeDidPattern(prepared.didPattern, line, prepared.directoryNumber?.directoryNumber);
|
|
93
|
+
prepared.visualMWI = toApiStringValue(prepared.visualMWI);
|
|
94
|
+
prepared.audibleMWI = toApiStringValue(prepared.audibleMWI);
|
|
95
|
+
prepared.associated = prepared.associated ?? true;
|
|
96
|
+
return prepared;
|
|
97
|
+
}
|
|
98
|
+
function prepareLine(line) {
|
|
99
|
+
const prepared = deepClone(line);
|
|
100
|
+
prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;
|
|
101
|
+
if (prepared.directoryNumber) {
|
|
102
|
+
prepared.directoryNumber = normalizeDirectoryNumber(prepared.directoryNumber);
|
|
103
|
+
}
|
|
104
|
+
return prepared;
|
|
105
|
+
}
|
|
106
|
+
function syncDeviceLineAssociations(device, lines) {
|
|
107
|
+
device.lineAssociations = (device.lineAssociations || []).map((association, index) => prepareLineAssociation(association, lines[index]));
|
|
108
|
+
}
|
|
109
|
+
function prepareDeviceForSave(device, userId, lines, deviceName) {
|
|
110
|
+
const prepared = deepClone(device);
|
|
111
|
+
const resolvedName = deviceName.trim();
|
|
112
|
+
prepared.name = resolvedName;
|
|
113
|
+
prepared.newName = resolvedName;
|
|
114
|
+
prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;
|
|
115
|
+
prepared.createDeviceMode = prepared.createDeviceMode ?? false;
|
|
116
|
+
if (prepared.extraOptions) {
|
|
117
|
+
prepared.extraOptions.mobilityUserId = userId;
|
|
118
|
+
}
|
|
119
|
+
syncDeviceLineAssociations(prepared, lines);
|
|
120
|
+
return prepared;
|
|
121
|
+
}
|
|
122
|
+
function resolvePrimaryLineReference(user) {
|
|
123
|
+
const firstDeviceAssociation = user.devices?.[0]?.lineAssociations?.[0]?.directoryNumber;
|
|
124
|
+
if (firstDeviceAssociation) {
|
|
125
|
+
return firstDeviceAssociation;
|
|
126
|
+
}
|
|
127
|
+
const firstLineDn = user.lines?.[0]?.directoryNumber;
|
|
128
|
+
return firstLineDn ?? null;
|
|
129
|
+
}
|
|
130
|
+
export function buildSavableEndUser(endUser, lines, devices, deviceProfiles, form, options = {}) {
|
|
131
|
+
const user = deepClone(endUser);
|
|
132
|
+
user.userid = form.userId || user.userid || '';
|
|
133
|
+
user.firstName = form.firstName || user.firstName || '';
|
|
134
|
+
user.lastName = form.lastName || user.lastName || '';
|
|
135
|
+
user.email = form.email || user.email || '';
|
|
136
|
+
user.createUserMode = false;
|
|
137
|
+
user.lines = (lines || []).map(line => prepareLine(line));
|
|
138
|
+
user.devices = (devices || []).map((device, index) => prepareDeviceForSave(device, user.userid || '', user.lines, options.resolveDeviceName?.(index, device) ?? device.name ?? device.newName ?? ''));
|
|
139
|
+
user.deviceProfiles = (deviceProfiles || []).map((profile, index) => prepareDeviceForSave(profile, user.userid || '', user.lines, options.resolveDeviceProfileName?.(index, profile) ?? profile.name ?? profile.newName ?? ''));
|
|
140
|
+
user.primaryLineReference = resolvePrimaryLineReference(user);
|
|
141
|
+
const snr = user.singleNumberReach;
|
|
142
|
+
if (snr && !snr.remoteDestinationProfileName) {
|
|
143
|
+
user.singleNumberReach = null;
|
|
144
|
+
}
|
|
145
|
+
return user;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc2F2YWJsZS1lbmQtdXNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy91dGlscy9idWlsZC1zYXZhYmxlLWVuZC11c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLEtBQUssRUFBRSxPQUFPO0lBQ2QsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsT0FBTyxFQUFFLFNBQVM7Q0FDWixDQUFDO0FBb0JYLFNBQVMsU0FBUyxDQUFJLEtBQVE7SUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQU0sQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFjO0lBQ3RDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ3BDLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0lBQ0QsSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7UUFDdEMsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFDRCxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUNwQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7UUFDaEIsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFDRCxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7UUFDakIsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFDRCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FB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dmljZUludGVyZmFjZSxcclxuICAgIEVuZFVzZXJJbnRlcmZhY2UsXHJcbiAgICBMaW5lQXNzb2NpYXRpb24sXHJcbiAgICBMaW5lSW50ZXJmYWNlLFxyXG4gICAgVXNlckRldGFpbHNGb3JtLFxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMvdXNlci1jcmVhdGlvbi13aXphcmQuaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY29uc3QgRU5USVRZX0NIQU5HRV9UWVBFID0ge1xyXG4gICAgQURERUQ6ICdhZGRlZCcsXHJcbiAgICBVUERBVEVEOiAndXBkYXRlZCcsXHJcbiAgICBFWElTVElORzogJ2V4aXN0aW5nJyxcclxuICAgIFJFTU9WRUQ6ICdyZW1vdmVkJyxcclxufSBhcyBjb25zdDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FsbEluZm9EaXNwbGF5UGF5bG9hZCB7XHJcbiAgICBjYWxsZXJOYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGNhbGxlck51bWJlcj86IHN0cmluZyB8IG51bGw7XHJcbiAgICByZWRpcmVjdGVkTnVtYmVyPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIGRpYWxlZE51bWJlcj86IHN0cmluZyB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlkUGF0dGVyblBheWxvYWQge1xyXG4gICAgY2FsbGVkUGFydHlUcmFuc2Zvcm1hdGlvbk1hc2s/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgcGF0dGVybj86IHN0cmluZyB8IG51bGw7XHJcbiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU2F2YWJsZUVuZFVzZXJPcHRpb25zIHtcclxuICAgIHJlc29sdmVEZXZpY2VOYW1lPzogKGluZGV4OiBudW1iZXIsIGRldmljZTogRGV2aWNlSW50ZXJmYWNlKSA9PiBzdHJpbmc7XHJcbiAgICByZXNvbHZlRGV2aWNlUHJvZmlsZU5hbWU/OiAoaW5kZXg6IG51bWJlciwgZGV2aWNlOiBEZXZpY2VJbnRlcmZhY2UpID0+IHN0cmluZztcclxufVxyXG5cclxuZnVuY3Rpb24gZGVlcENsb25lPFQ+KHZhbHVlOiBUKTogVCB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIGFzIFQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvQXBpQm9vbGVhblN0cmluZyh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJykge1xyXG4gICAgICAgIHJldHVybiAndHJ1ZSc7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgcmV0dXJuICdmYWxzZSc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgPyAnJyA6IFN0cmluZyh2YWx1ZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvQXBpU3RyaW5nVmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuICd0cnVlJztcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gJ2ZhbHNlJztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcodmFsdWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVDYWxsSW5mb0Rpc3BsYXkoXHJcbiAgICBjYWxsSW5mb0Rpc3BsYXk6IHVua25vd25cclxuKTogQ2FsbEluZm9EaXNwbGF5UGF5bG9hZCB8IG51bGwge1xyXG4gICAgaWYgKCFjYWxsSW5mb0Rpc3BsYXkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgY2FsbEluZm9EaXNwbGF5ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY2FsbEluZm9EaXNwbGF5KTtcclxuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNhbGxJbmZvRGlzcGxheShwYXJzZWQpO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNhbGxJbmZvRGlzcGxheSAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNvdXJjZSA9IGNhbGxJbmZvRGlzcGxheSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgY2FsbGVyTmFtZTogc291cmNlWydjYWxsZXJOYW1lJ10gIT0gbnVsbCA/IHRvQXBpQm9vbGVhblN0cmluZyhzb3VyY2VbJ2NhbGxlck5hbWUnXSkgOiBudWxsLFxyXG4gICAgICAgIGNhbGxlck51bWJlcjogc291cmNlWydjYWxsZXJOdW1iZXInXSAhPSBudWxsID8gdG9BcGlCb29sZWFuU3RyaW5nKHNvdXJjZVsnY2FsbGVyTnVtYmVyJ10pIDogbnVsbCxcclxuICAgICAgICByZWRpcmVjdGVkTnVtYmVyOiBzb3VyY2VbJ3JlZGlyZWN0ZWROdW1iZXInXSAhPSBudWxsID8gdG9BcGlCb29sZWFuU3RyaW5nKHNvdXJjZVsncmVkaXJlY3RlZE51bWJlciddKSA6IG51bGwsXHJcbiAgICAgICAgZGlhbGVkTnVtYmVyOiBzb3VyY2VbJ2RpYWxlZE51bWJlciddICE9IG51bGwgPyB0b0FwaUJvb2xlYW5TdHJpbmcoc291cmNlWydkaWFsZWROdW1iZXInXSkgOiBudWxsLFxyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplRGlkUGF0dGVybihcclxuICAgIGRpZFBhdHRlcm46IHVua25vd24sXHJcbiAgICBsaW5lPzogTGluZUludGVyZmFjZSxcclxuICAgIGRpcmVjdG9yeU51bWJlcj86IHN0cmluZ1xyXG4pOiBEaWRQYXR0ZXJuUGF5bG9hZCB8IG51bGwge1xyXG4gICAgaWYgKGRpZFBhdHRlcm4gJiYgdHlwZW9mIGRpZFBhdHRlcm4gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIGRpZFBhdHRlcm4gYXMgRGlkUGF0dGVyblBheWxvYWQ7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGRpZFBhdHRlcm4gPT09ICdzdHJpbmcnICYmIGRpZFBhdHRlcm4udHJpbSgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgY2FsbGVkUGFydHlUcmFuc2Zvcm1hdGlvbk1hc2s6IGRpZFBhdHRlcm4gfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRuID0gZGlyZWN0b3J5TnVtYmVyIHx8IGxpbmU/LmRpcmVjdG9yeU51bWJlcj8uZGlyZWN0b3J5TnVtYmVyO1xyXG4gICAgaWYgKGRuKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgY2FsbGVkUGFydHlUcmFuc2Zvcm1hdGlvbk1hc2s6IGRuIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0b3J5TnVtYmVyKFxyXG4gICAgZGlyZWN0b3J5TnVtYmVyOiBMaW5lQXNzb2NpYXRpb25bJ2RpcmVjdG9yeU51bWJlciddXHJcbik6IExpbmVBc3NvY2lhdGlvblsnZGlyZWN0b3J5TnVtYmVyJ10ge1xyXG4gICAgY29uc3QgeyBkaXNwbGF5VmFsdWU6IF9kaXNwbGF5VmFsdWUsIC4uLnJlc3QgfSA9IGRpcmVjdG9yeU51bWJlcjtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGlyZWN0b3J5TnVtYmVyOiByZXN0LmRpcmVjdG9yeU51bWJlciA/PyAnJyxcclxuICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHJlc3Qucm91dGVQYXJ0aXRpb25OYW1lID8/ICcnLFxyXG4gICAgICAgIHRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyOiByZXN0LnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyLFxyXG4gICAgICAgIHBraWQ6IHJlc3QucGtpZCB8fCBudWxsLFxyXG4gICAgICAgIGRuVHlwZTogcmVzdC5kblR5cGUgfHwgbnVsbCxcclxuICAgICAgICBzdWJUeXBlOiByZXN0LnN1YlR5cGUgPz8gbnVsbCxcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVMaW5lQXNzb2NpYXRpb24oXHJcbiAgICBhc3NvY2lhdGlvbjogTGluZUFzc29jaWF0aW9uLFxyXG4gICAgbGluZT86IExpbmVJbnRlcmZhY2VcclxuKTogTGluZUFzc29jaWF0aW9uIHtcclxuICAgIGNvbnN0IHByZXBhcmVkID0gZGVlcENsb25lKGFzc29jaWF0aW9uKTtcclxuICAgIGNvbnN0IGxpbmVEbiA9IGxpbmU/LmRpcmVjdG9yeU51bWJlcjtcclxuXHJcbiAgICBpZiAobGluZURuKSB7XHJcbiAgICAgICAgcHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyID0ge1xyXG4gICAgICAgICAgICAuLi5wcmVwYXJlZC5kaXJlY3RvcnlOdW1iZXIsXHJcbiAgICAgICAgICAgIGRpcmVjdG9yeU51bWJlcjogbGluZURuLmRpcmVjdG9yeU51bWJlciB8fCAnJyxcclxuICAgICAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBsaW5lRG4ucm91dGVQYXJ0aXRpb25OYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZURpcmVjdG9yeU51bWJlcjpcclxuICAgICAgICAgICAgICAgIGxpbmVEbi50ZW1wbGF0ZURpcmVjdG9yeU51bWJlciA/P1xyXG4gICAgICAgICAgICAgICAgcHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyPy50ZW1wbGF0ZURpcmVjdG9yeU51bWJlcixcclxuICAgICAgICB9IGFzIExpbmVBc3NvY2lhdGlvblsnZGlyZWN0b3J5TnVtYmVyJ107XHJcbiAgICB9XHJcblxyXG4gICAgcHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyID0gbm9ybWFsaXplRGlyZWN0b3J5TnVtYmVyKHByZXBhcmVkLmRpcmVjdG9yeU51bWJlcik7XHJcbiAgICBwcmVwYXJlZC5lbnRpdHlDaGFuZ2VUeXBlID0gcHJlcGFyZWQuZW50aXR5Q2hhbmdlVHlwZSB8fCBFTlRJVFlfQ0hBTkdFX1RZUEUuQURERUQ7XHJcbiAgICBwcmVwYXJlZC5sb2dNaXNzZWRDYWxsID0gdG9BcGlCb29sZWFuU3RyaW5nKHByZXBhcmVkLmxvZ01pc3NlZENhbGwpIGFzIHVua25vd24gYXMgTGluZUFzc29jaWF0aW9uWydsb2dNaXNzZWRDYWxsJ107XHJcbiAgICBwcmVwYXJlZC5jYWxsSW5mb0Rpc3BsYXkgPSBub3JtYWxpemVDYWxsSW5mb0Rpc3BsYXkocHJlcGFyZWQuY2FsbEluZm9EaXNwbGF5KSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsnY2FsbEluZm9EaXNwbGF5J107XHJcbiAgICBwcmVwYXJlZC5kaWRQYXR0ZXJuID0gbm9ybWFsaXplRGlkUGF0dGVybihcclxuICAgICAgICBwcmVwYXJlZC5kaWRQYXR0ZXJuLFxyXG4gICAgICAgIGxpbmUsXHJcbiAgICAgICAgcHJlcGFyZWQuZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXJcclxuICAgICkgYXMgdW5rbm93biBhcyBMaW5lQXNzb2NpYXRpb25bJ2RpZFBhdHRlcm4nXTtcclxuICAgIHByZXBhcmVkLnZpc3VhbE1XSSA9IHRvQXBpU3RyaW5nVmFsdWUocHJlcGFyZWQudmlzdWFsTVdJKSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsndmlzdWFsTVdJJ107XHJcbiAgICBwcmVwYXJlZC5hdWRpYmxlTVdJID0gdG9BcGlTdHJpbmdWYWx1ZShwcmVwYXJlZC5hdWRpYmxlTVdJKSBhcyB1bmtub3duIGFzIExpbmVBc3NvY2lhdGlvblsnYXVkaWJsZU1XSSddO1xyXG4gICAgcHJlcGFyZWQuYXNzb2NpYXRlZCA9IHByZXBhcmVkLmFzc29jaWF0ZWQgPz8gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gcHJlcGFyZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVMaW5lKGxpbmU6IExpbmVJbnRlcmZhY2UpOiBMaW5lSW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IHByZXBhcmVkID0gZGVlcENsb25lKGxpbmUpO1xyXG4gICAgcHJlcGFyZWQuZW50aXR5Q2hhbmdlVHlwZSA9IHByZXBhcmVkLmVudGl0eUNoYW5nZVR5cGUgfHwgRU5USVRZX0NIQU5HRV9UWVBFLkFEREVEO1xyXG4gICAgaWYgKHByZXBhcmVkLmRpcmVjdG9yeU51bWJlcikge1xyXG4gICAgICAgIHByZXBhcmVkLmRpcmVjdG9yeU51bWJlciA9IG5vcm1hbGl6ZURpcmVjdG9yeU51bWJlcihwcmVwYXJlZC5kaXJlY3RvcnlOdW1iZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByZXBhcmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzeW5jRGV2aWNlTGluZUFzc29jaWF0aW9ucyhkZXZpY2U6IERldmljZUludGVyZmFjZSwgbGluZXM6IExpbmVJbnRlcmZhY2VbXSk6IHZvaWQge1xyXG4gICAgZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgPSAoZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgfHwgW10pLm1hcCgoYXNzb2NpYXRpb24sIGluZGV4KSA9PlxyXG4gICAgICAgIHByZXBhcmVMaW5lQXNzb2NpYXRpb24oYXNzb2NpYXRpb24sIGxpbmVzW2luZGV4XSlcclxuICAgICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVEZXZpY2VGb3JTYXZlKFxyXG4gICAgZGV2aWNlOiBEZXZpY2VJbnRlcmZhY2UsXHJcbiAgICB1c2VySWQ6IHN0cmluZyxcclxuICAgIGxpbmVzOiBMaW5lSW50ZXJmYWNlW10sXHJcbiAgICBkZXZpY2VOYW1lOiBzdHJpbmdcclxuKTogRGV2aWNlSW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IHByZXBhcmVkID0gZGVlcENsb25lKGRldmljZSk7XHJcbiAgICBjb25zdCByZXNvbHZlZE5hbWUgPSBkZXZpY2VOYW1lLnRyaW0oKTtcclxuXHJcbiAgICBwcmVwYXJlZC5uYW1lID0gcmVzb2x2ZWROYW1lO1xyXG4gICAgcHJlcGFyZWQubmV3TmFtZSA9IHJlc29sdmVkTmFtZTtcclxuICAgIHByZXBhcmVkLmVudGl0eUNoYW5nZVR5cGUgPSBwcmVwYXJlZC5lbnRpdHlDaGFuZ2VUeXBlIHx8IEVOVElUWV9DSEFOR0VfVFlQRS5BRERFRDtcclxuICAgIHByZXBhcmVkLmNyZWF0ZURldmljZU1vZGUgPSBwcmVwYXJlZC5jcmVhdGVEZXZpY2VNb2RlID8/IGZhbHNlO1xyXG5cclxuICAgIGlmIChwcmVwYXJlZC5leHRyYU9wdGlvbnMpIHtcclxuICAgICAgICBwcmVwYXJlZC5leHRyYU9wdGlvbnMubW9iaWxpdHlVc2VySWQgPSB1c2VySWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3luY0RldmljZUxpbmVBc3NvY2lhdGlvbnMocHJlcGFyZWQsIGxpbmVzKTtcclxuICAgIHJldHVybiBwcmVwYXJlZDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVzb2x2ZVByaW1hcnlMaW5lUmVmZXJlbmNlKHVzZXI6IEVuZFVzZXJJbnRlcmZhY2UpOiB1bmtub3duIHwgbnVsbCB7XHJcbiAgICBjb25zdCBmaXJzdERldmljZUFzc29jaWF0aW9uID0gdXNlci5kZXZpY2VzPy5bMF0/LmxpbmVBc3NvY2lhdGlvbnM/LlswXT8uZGlyZWN0b3J5TnVtYmVyO1xyXG4gICAgaWYgKGZpcnN0RGV2aWNlQXNzb2NpYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gZmlyc3REZXZpY2VBc3NvY2lhdGlvbjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpcnN0TGluZURuID0gdXNlci5saW5lcz8uWzBdPy5kaXJlY3RvcnlOdW1iZXI7XHJcbiAgICByZXR1cm4gZmlyc3RMaW5lRG4gPz8gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2F2YWJsZUVuZFVzZXIoXHJcbiAgICBlbmRVc2VyOiBFbmRVc2VySW50ZXJmYWNlLFxyXG4gICAgbGluZXM6IExpbmVJbnRlcmZhY2VbXSxcclxuICAgIGRldmljZXM6IERldmljZUludGVyZmFjZVtdLFxyXG4gICAgZGV2aWNlUHJvZmlsZXM6IERldmljZUludGVyZmFjZVtdLFxyXG4gICAgZm9ybTogVXNlckRldGFpbHNGb3JtLFxyXG4gICAgb3B0aW9uczogQnVpbGRTYXZhYmxlRW5kVXNlck9wdGlvbnMgPSB7fVxyXG4pOiBFbmRVc2VySW50ZXJmYWNlIHtcclxuICAgIGNvbnN0IHVzZXIgPSBkZWVwQ2xvbmUoZW5kVXNlcik7XHJcblxyXG4gICAgdXNlci51c2VyaWQgPSBmb3JtLnVzZXJJZCB8fCB1c2VyLnVzZXJpZCB8fCAnJztcclxuICAgIHVzZXIuZmlyc3ROYW1lID0gZm9ybS5maXJzdE5hbWUgfHwgdXNlci5maXJzdE5hbWUgfHwgJyc7XHJcbiAgICB1c2VyLmxhc3ROYW1lID0gZm9ybS5sYXN0TmFtZSB8fCB1c2VyLmxhc3ROYW1lIHx8ICcnO1xyXG4gICAgdXNlci5lbWFpbCA9IGZvcm0uZW1haWwgfHwgdXNlci5lbWFpbCB8fCAnJztcclxuICAgIHVzZXIuY3JlYXRlVXNlck1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICB1c2VyLmxpbmVzID0gKGxpbmVzIHx8IFtdKS5tYXAobGluZSA9PiBwcmVwYXJlTGluZShsaW5lKSk7XHJcbiAgICB1c2VyLmRldmljZXMgPSAoZGV2aWNlcyB8fCBbXSkubWFwKChkZXZpY2UsIGluZGV4KSA9PlxyXG4gICAgICAgIHByZXBhcmVEZXZpY2VGb3JTYXZlKFxyXG4gICAgICAgICAgICBkZXZpY2UsXHJcbiAgICAgICAgICAgIHVzZXIudXNlcmlkIHx8ICcnLFxyXG4gICAgICAgICAgICB1c2VyLmxpbmVzLFxyXG4gICAgICAgICAgICBvcHRpb25zLnJlc29sdmVEZXZpY2VOYW1lPy4oaW5kZXgsIGRldmljZSkgPz8gZGV2aWNlLm5hbWUgPz8gZGV2aWNlLm5ld05hbWUgPz8gJydcclxuICAgICAgICApXHJcbiAgICApO1xyXG4gICAgdXNlci5kZXZpY2VQcm9maWxlcyA9IChkZXZpY2VQcm9maWxlcyB8fCBbXSkubWFwKChwcm9maWxlLCBpbmRleCkgPT5cclxuICAgICAgICBwcmVwYXJlRGV2aWNlRm9yU2F2ZShcclxuICAgICAgICAgICAgcHJvZmlsZSxcclxuICAgICAgICAgICAgdXNlci51c2VyaWQgfHwgJycsXHJcbiAgICAgICAgICAgIHVzZXIubGluZXMsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVzb2x2ZURldmljZVByb2ZpbGVOYW1lPy4oaW5kZXgsIHByb2ZpbGUpID8/IHByb2ZpbGUubmFtZSA/PyBwcm9maWxlLm5ld05hbWUgPz8gJydcclxuICAgICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIHVzZXIucHJpbWFyeUxpbmVSZWZlcmVuY2UgPSByZXNvbHZlUHJpbWFyeUxpbmVSZWZlcmVuY2UodXNlcik7XHJcblxyXG4gICAgY29uc3Qgc25yID0gdXNlci5zaW5nbGVOdW1iZXJSZWFjaCBhcyB7IHJlbW90ZURlc3RpbmF0aW9uUHJvZmlsZU5hbWU/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHNuciAmJiAhc25yLnJlbW90ZURlc3RpbmF0aW9uUHJvZmlsZU5hbWUpIHtcclxuICAgICAgICB1c2VyLnNpbmdsZU51bWJlclJlYWNoID0gbnVsbCBhcyBFbmRVc2VySW50ZXJmYWNlWydzaW5nbGVOdW1iZXJSZWFjaCddO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1c2VyO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const MAC_ADDRESS_REGEX = /^[A-Fa-f0-9]{12}$/;
|
|
2
|
+
export const Validation = {
|
|
3
|
+
macAddress() {
|
|
4
|
+
return (control) => {
|
|
5
|
+
const raw = String(control.value ?? '').trim();
|
|
6
|
+
if (!raw) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const normalized = raw.replace(/^SEP\s*/i, '').trim();
|
|
10
|
+
return MAC_ADDRESS_REGEX.test(normalized) ? null : { macAddress: true };
|
|
11
|
+
};
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy91dGlscy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFFOUMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3RCLFVBQVU7UUFDTixPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtZQUN6RCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0RCxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM1RSxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5jb25zdCBNQUNfQUREUkVTU19SRUdFWCA9IC9eW0EtRmEtZjAtOV17MTJ9JC87XHJcblxyXG5leHBvcnQgY29uc3QgVmFsaWRhdGlvbiA9IHtcclxuICAgIG1hY0FkZHJlc3MoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByYXcgPSBTdHJpbmcoY29udHJvbC52YWx1ZSA/PyAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIXJhdykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHJhdy5yZXBsYWNlKC9eU0VQXFxzKi9pLCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gTUFDX0FERFJFU1NfUkVHRVgudGVzdChub3JtYWxpemVkKSA/IG51bGwgOiB7IG1hY0FkZHJlc3M6IHRydWUgfTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxufTtcclxuIl19
|