qms-angular 1.1.71 → 1.1.73
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/bundles/qms-angular.umd.js +50 -161
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/select-access-dialog/model/access-config-custom.model.js +3 -0
- package/esm2015/lib/components/select-access-dialog/model/select-access-config.model.js +4 -1
- package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +9 -5
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +28 -1
- package/fesm2015/qms-angular.js +40 -4
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/components/select-access-dialog/model/access-config-custom.model.d.ts +3 -0
- package/lib/components/select-access-dialog/model/select-access-config.model.d.ts +4 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +1 -0
- package/package.json +1 -1
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/af.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ar.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ast.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/az.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/bg.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ca.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/da.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/de.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/el.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/en-gb.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/eo.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/es.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/et.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/eu.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/fi.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/gu.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/he.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/id.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/it.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/kk.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/km.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/kn.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/lt.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ms.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/nb.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ne.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/oc.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/pt.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ro.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/si.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/sq.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/sv.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/th.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/tt.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/ug.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +1 -0
- package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +1 -0
- package/src/assets/qms-ckeditor-plugin/package-lock.json +5717 -8776
- package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +21 -4
@@ -3152,7 +3152,7 @@
|
|
3152
3152
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
3153
3153
|
PERFORMANCE OF THIS SOFTWARE.
|
3154
3154
|
***************************************************************************** */
|
3155
|
-
/* global Reflect, Promise
|
3155
|
+
/* global Reflect, Promise */
|
3156
3156
|
var extendStatics = function (d, b) {
|
3157
3157
|
extendStatics = Object.setPrototypeOf ||
|
3158
3158
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
@@ -3205,64 +3205,6 @@
|
|
3205
3205
|
function __param(paramIndex, decorator) {
|
3206
3206
|
return function (target, key) { decorator(target, key, paramIndex); };
|
3207
3207
|
}
|
3208
|
-
function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
3209
|
-
function accept(f) { if (f !== void 0 && typeof f !== "function")
|
3210
|
-
throw new TypeError("Function expected"); return f; }
|
3211
|
-
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
3212
|
-
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
3213
|
-
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
3214
|
-
var _, done = false;
|
3215
|
-
for (var i = decorators.length - 1; i >= 0; i--) {
|
3216
|
-
var context = {};
|
3217
|
-
for (var p in contextIn)
|
3218
|
-
context[p] = p === "access" ? {} : contextIn[p];
|
3219
|
-
for (var p in contextIn.access)
|
3220
|
-
context.access[p] = contextIn.access[p];
|
3221
|
-
context.addInitializer = function (f) { if (done)
|
3222
|
-
throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
3223
|
-
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
3224
|
-
if (kind === "accessor") {
|
3225
|
-
if (result === void 0)
|
3226
|
-
continue;
|
3227
|
-
if (result === null || typeof result !== "object")
|
3228
|
-
throw new TypeError("Object expected");
|
3229
|
-
if (_ = accept(result.get))
|
3230
|
-
descriptor.get = _;
|
3231
|
-
if (_ = accept(result.set))
|
3232
|
-
descriptor.set = _;
|
3233
|
-
if (_ = accept(result.init))
|
3234
|
-
initializers.unshift(_);
|
3235
|
-
}
|
3236
|
-
else if (_ = accept(result)) {
|
3237
|
-
if (kind === "field")
|
3238
|
-
initializers.unshift(_);
|
3239
|
-
else
|
3240
|
-
descriptor[key] = _;
|
3241
|
-
}
|
3242
|
-
}
|
3243
|
-
if (target)
|
3244
|
-
Object.defineProperty(target, contextIn.name, descriptor);
|
3245
|
-
done = true;
|
3246
|
-
}
|
3247
|
-
;
|
3248
|
-
function __runInitializers(thisArg, initializers, value) {
|
3249
|
-
var useValue = arguments.length > 2;
|
3250
|
-
for (var i = 0; i < initializers.length; i++) {
|
3251
|
-
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
3252
|
-
}
|
3253
|
-
return useValue ? value : void 0;
|
3254
|
-
}
|
3255
|
-
;
|
3256
|
-
function __propKey(x) {
|
3257
|
-
return typeof x === "symbol" ? x : "".concat(x);
|
3258
|
-
}
|
3259
|
-
;
|
3260
|
-
function __setFunctionName(f, name, prefix) {
|
3261
|
-
if (typeof name === "symbol")
|
3262
|
-
name = name.description ? "[".concat(name.description, "]") : "";
|
3263
|
-
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
|
3264
|
-
}
|
3265
|
-
;
|
3266
3208
|
function __metadata(metadataKey, metadataValue) {
|
3267
3209
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
3268
3210
|
return Reflect.metadata(metadataKey, metadataValue);
|
@@ -3294,7 +3236,7 @@
|
|
3294
3236
|
function step(op) {
|
3295
3237
|
if (f)
|
3296
3238
|
throw new TypeError("Generator is already executing.");
|
3297
|
-
while (
|
3239
|
+
while (_)
|
3298
3240
|
try {
|
3299
3241
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
|
3300
3242
|
return t;
|
@@ -3444,13 +3386,9 @@
|
|
3444
3386
|
if (!Symbol.asyncIterator)
|
3445
3387
|
throw new TypeError("Symbol.asyncIterator is not defined.");
|
3446
3388
|
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
3447
|
-
return i = {}, verb("next"), verb("throw"), verb("return"
|
3448
|
-
function
|
3449
|
-
|
3450
|
-
i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); };
|
3451
|
-
if (f)
|
3452
|
-
i[n] = f(i[n]);
|
3453
|
-
} }
|
3389
|
+
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
|
3390
|
+
function verb(n) { if (g[n])
|
3391
|
+
i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
|
3454
3392
|
function resume(n, v) { try {
|
3455
3393
|
step(g[n](v));
|
3456
3394
|
}
|
@@ -3466,7 +3404,7 @@
|
|
3466
3404
|
function __asyncDelegator(o) {
|
3467
3405
|
var i, p;
|
3468
3406
|
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
|
3469
|
-
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done:
|
3407
|
+
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
|
3470
3408
|
}
|
3471
3409
|
function __asyncValues(o) {
|
3472
3410
|
if (!Symbol.asyncIterator)
|
@@ -3525,95 +3463,7 @@
|
|
3525
3463
|
if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function"))
|
3526
3464
|
throw new TypeError("Cannot use 'in' operator on non-object");
|
3527
3465
|
return typeof state === "function" ? receiver === state : state.has(receiver);
|
3528
|
-
}
|
3529
|
-
function __addDisposableResource(env, value, async) {
|
3530
|
-
if (value !== null && value !== void 0) {
|
3531
|
-
if (typeof value !== "object" && typeof value !== "function")
|
3532
|
-
throw new TypeError("Object expected.");
|
3533
|
-
var dispose, inner;
|
3534
|
-
if (async) {
|
3535
|
-
if (!Symbol.asyncDispose)
|
3536
|
-
throw new TypeError("Symbol.asyncDispose is not defined.");
|
3537
|
-
dispose = value[Symbol.asyncDispose];
|
3538
|
-
}
|
3539
|
-
if (dispose === void 0) {
|
3540
|
-
if (!Symbol.dispose)
|
3541
|
-
throw new TypeError("Symbol.dispose is not defined.");
|
3542
|
-
dispose = value[Symbol.dispose];
|
3543
|
-
if (async)
|
3544
|
-
inner = dispose;
|
3545
|
-
}
|
3546
|
-
if (typeof dispose !== "function")
|
3547
|
-
throw new TypeError("Object not disposable.");
|
3548
|
-
if (inner)
|
3549
|
-
dispose = function () { try {
|
3550
|
-
inner.call(this);
|
3551
|
-
}
|
3552
|
-
catch (e) {
|
3553
|
-
return Promise.reject(e);
|
3554
|
-
} };
|
3555
|
-
env.stack.push({ value: value, dispose: dispose, async: async });
|
3556
|
-
}
|
3557
|
-
else if (async) {
|
3558
|
-
env.stack.push({ async: true });
|
3559
|
-
}
|
3560
|
-
return value;
|
3561
|
-
}
|
3562
|
-
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
3563
|
-
var e = new Error(message);
|
3564
|
-
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
3565
|
-
};
|
3566
|
-
function __disposeResources(env) {
|
3567
|
-
function fail(e) {
|
3568
|
-
env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
3569
|
-
env.hasError = true;
|
3570
|
-
}
|
3571
|
-
function next() {
|
3572
|
-
while (env.stack.length) {
|
3573
|
-
var rec = env.stack.pop();
|
3574
|
-
try {
|
3575
|
-
var result = rec.dispose && rec.dispose.call(rec.value);
|
3576
|
-
if (rec.async)
|
3577
|
-
return Promise.resolve(result).then(next, function (e) { fail(e); return next(); });
|
3578
|
-
}
|
3579
|
-
catch (e) {
|
3580
|
-
fail(e);
|
3581
|
-
}
|
3582
|
-
}
|
3583
|
-
if (env.hasError)
|
3584
|
-
throw env.error;
|
3585
|
-
}
|
3586
|
-
return next();
|
3587
|
-
}
|
3588
|
-
var tslib_es6 = {
|
3589
|
-
__extends: __extends,
|
3590
|
-
__assign: __assign,
|
3591
|
-
__rest: __rest,
|
3592
|
-
__decorate: __decorate,
|
3593
|
-
__param: __param,
|
3594
|
-
__metadata: __metadata,
|
3595
|
-
__awaiter: __awaiter,
|
3596
|
-
__generator: __generator,
|
3597
|
-
__createBinding: __createBinding,
|
3598
|
-
__exportStar: __exportStar,
|
3599
|
-
__values: __values,
|
3600
|
-
__read: __read,
|
3601
|
-
__spread: __spread,
|
3602
|
-
__spreadArrays: __spreadArrays,
|
3603
|
-
__spreadArray: __spreadArray,
|
3604
|
-
__await: __await,
|
3605
|
-
__asyncGenerator: __asyncGenerator,
|
3606
|
-
__asyncDelegator: __asyncDelegator,
|
3607
|
-
__asyncValues: __asyncValues,
|
3608
|
-
__makeTemplateObject: __makeTemplateObject,
|
3609
|
-
__importStar: __importStar,
|
3610
|
-
__importDefault: __importDefault,
|
3611
|
-
__classPrivateFieldGet: __classPrivateFieldGet,
|
3612
|
-
__classPrivateFieldSet: __classPrivateFieldSet,
|
3613
|
-
__classPrivateFieldIn: __classPrivateFieldIn,
|
3614
|
-
__addDisposableResource: __addDisposableResource,
|
3615
|
-
__disposeResources: __disposeResources,
|
3616
|
-
};
|
3466
|
+
}
|
3617
3467
|
|
3618
3468
|
var BUTTON_TOGGLE_DEFAULT_OPTIONS = new i0.InjectionToken('BUTTON_TOGGLE_DEFAULT_OPTIONS');
|
3619
3469
|
var BUTTON_TOGGLE_GROUP = new i0.InjectionToken('QMSButtonToggleGroup');
|
@@ -32737,11 +32587,38 @@
|
|
32737
32587
|
var wordsBox = document.querySelector("#" + _this.editorId + " .wordcount-content");
|
32738
32588
|
if (!!wordsBox) {
|
32739
32589
|
wordsBox.textContent = _this.LANG.QMSCKEDITOR.WORDS + ": " + stats.words + " / " + _this.LANG.QMSCKEDITOR.CHARACTERS + ": " + stats.characters;
|
32590
|
+
if (_this.qmsckData.maxLength) {
|
32591
|
+
wordsBox.textContent = _this.LANG.QMSCKEDITOR.MAXIMIZE + " " + _this.LANG.QMSCKEDITOR.CHARACTERS + ": " + _this.qmsckData.maxLength;
|
32592
|
+
var tempDiv = document.createElement('div');
|
32593
|
+
tempDiv.innerHTML = editor.getData();
|
32594
|
+
var plainText = tempDiv.textContent || tempDiv.innerText || '';
|
32595
|
+
if (plainText.length > _this.qmsckData.maxLength) {
|
32596
|
+
var trimmedText = plainText.slice(0, _this.qmsckData.maxLength);
|
32597
|
+
_this.editorInstance.setData(trimmedText);
|
32598
|
+
setTimeout(function () {
|
32599
|
+
var editorElement = _this.editorInstance.editing.view.domRoots.get('main');
|
32600
|
+
if (editorElement) {
|
32601
|
+
editorElement.blur();
|
32602
|
+
}
|
32603
|
+
}, 0);
|
32604
|
+
}
|
32605
|
+
}
|
32740
32606
|
}
|
32741
32607
|
});
|
32742
32608
|
if (this.qmsckData.isReadOnly) {
|
32743
32609
|
editor.isReadOnly = true;
|
32744
32610
|
}
|
32611
|
+
this.editorInstance.editing.view.document.on('keydown', function (event, data) {
|
32612
|
+
if (_this.qmsckData.maxLength) {
|
32613
|
+
var tempDiv = document.createElement('div');
|
32614
|
+
tempDiv.innerHTML = editor.getData();
|
32615
|
+
var plainText = tempDiv.textContent || tempDiv.innerText || '';
|
32616
|
+
if (plainText.length > _this.qmsckData.maxLength) {
|
32617
|
+
data.preventDefault();
|
32618
|
+
event.stop();
|
32619
|
+
}
|
32620
|
+
}
|
32621
|
+
});
|
32745
32622
|
this._setEditorInstanceObserver(this.editorId);
|
32746
32623
|
};
|
32747
32624
|
/**
|
@@ -38818,6 +38695,12 @@
|
|
38818
38695
|
},] }
|
38819
38696
|
];
|
38820
38697
|
|
38698
|
+
var QMSCustomConfigDialog = /** @class */ (function () {
|
38699
|
+
function QMSCustomConfigDialog() {
|
38700
|
+
}
|
38701
|
+
return QMSCustomConfigDialog;
|
38702
|
+
}());
|
38703
|
+
|
38821
38704
|
var QMSSelectAccessDialog = /** @class */ (function () {
|
38822
38705
|
function QMSSelectAccessDialog() {
|
38823
38706
|
this.enableSelectPerson = true;
|
@@ -38838,6 +38721,8 @@
|
|
38838
38721
|
this.formatMsgDisable = null;
|
38839
38722
|
this.maxWidthNode = 510;
|
38840
38723
|
this.skipFirstAskingScreen = false;
|
38724
|
+
this.userGroupConfig = new QMSCustomConfigDialog();
|
38725
|
+
this.personConfig = new QMSCustomConfigDialog();
|
38841
38726
|
}
|
38842
38727
|
return QMSSelectAccessDialog;
|
38843
38728
|
}());
|
@@ -39018,8 +38903,12 @@
|
|
39018
38903
|
}
|
39019
38904
|
if (this.options.length === 1 || this.dialogData.skipFirstAskingScreen) {
|
39020
38905
|
this.dialogRef.updateSize(this.dialogData.sizeUpdateDefault);
|
39021
|
-
this.
|
39022
|
-
|
38906
|
+
var defaultType = this.options[0].type;
|
38907
|
+
if (this.dialogData.defaultSelectMode) {
|
38908
|
+
defaultType = this.dialogData.defaultSelectMode;
|
38909
|
+
}
|
38910
|
+
this.optionSelect.setValue(defaultType);
|
38911
|
+
var event$ = new select.MatSelectChange(null, defaultType);
|
39023
38912
|
this.onSelectionTypeChange(event$);
|
39024
38913
|
}
|
39025
38914
|
};
|
@@ -39372,7 +39261,7 @@
|
|
39372
39261
|
this.onPagingEvent.emit(Object.assign(Object.assign({}, val), { type: type }));
|
39373
39262
|
};
|
39374
39263
|
QMSSelectAccessDialogComponent.prototype.onResultDepartmentChange = function (event) {
|
39375
|
-
|
39264
|
+
this.resultAccess.departments = event;
|
39376
39265
|
};
|
39377
39266
|
QMSSelectAccessDialogComponent.prototype.updateResultSearchDepartment = function (data) {
|
39378
39267
|
var _this = this;
|
@@ -39432,7 +39321,7 @@
|
|
39432
39321
|
QMSSelectAccessDialogComponent.decorators = [
|
39433
39322
|
{ type: i0.Component, args: [{
|
39434
39323
|
selector: 'qms-select-access-dialog',
|
39435
|
-
template: "<div qms-dialog-container-v2 class=\"select-access-dialog-container\">\n <div qms-dialog-header>\n <div class=\"access-dialog-header mb-2\">\n <span class=\"header-title\">{{dialogData.titleDialog || LANG.SELECT_ACCESS}}</span>\n <button matDialogClose class=\"btn-close-dialog\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n </div>\n </div>\n <div [class.active]=\"optionSelect.value !== null\" qms-dialog-content class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100\"\n appearance=\"fill\">\n <mat-label qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <!-- Person Access -->\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <mat-dialog-content>\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100\" appearance=\"fill\">\n <mat-label qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue('')\" class=\"pointer \"\n matSuffix aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <!-- input field department filter person -->\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option\" qms-form qms-select-input>\n <mat-label>{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,''])\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100\" appearance=\"fill\" qms-form qms-search-field>\n <input matInput appearance=\"off\" [placeholder]=\"LANG.SEARCH_WITH_NAME\" formControlName=\"keyword\"\n type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" matSuffix mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n <span [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\"\n class=\"pointer btn-icon-clear d-flex justify-content-center align-items-center \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <button qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n </mat-dialog-content>\n\n <mat-dialog-content class=\"items-list\">\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} </span>\n <span>(<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation]\n *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </mat-dialog-content>\n </form>\n </ng-container>\n\n <!-- UserGroup Access -->\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <mat-dialog-content>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100\" qms-form qms-search-field>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\"\n placeholder=\"User group\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" matSuffix mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n <div [@inOutAnimation] *ngIf=\"!!userGroupForm.value && !getLoading$.value\" matSuffix\n qms-input-clear>\n <button (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n </mat-dialog-content>\n <mat-dialog-content class=\"items-list\">\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}</span>\n <span>(<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </mat-dialog-content>\n </div>\n </ng-container>\n\n <!-- Department Access -->\n <ng-container\n *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT && getLoading$.value; then loading\"></ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT && !getLoading$.value\"\n class=\"person-access\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <!-- Result Person -->\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <!-- Result User group -->\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title:LANG.USER_GROUP}\">\n </ng-container>\n <!-- Result Department -->\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <div qms-dialog-footer class=\"confirm__button__groups\" [class.none-option]=\"optionSelect.value === null\">\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n <button qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n </div>\n</div>\n\n<!-- Template -->\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n\n<!-- Template list chip -->\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-list [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n <mat-icon *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\"\n class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </mat-chip>\n </div>\n </mat-chip-list>\n</ng-template>\n\n<!-- Template result with collapse -->\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<!-- Template row without checkbox -->\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<!-- Template checkbox -->\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<!-- Template loading -->\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>",
|
39324
|
+
template: "<div qms-dialog-container-v2 class=\"select-access-dialog-container\">\n <div qms-dialog-header>\n <div class=\"access-dialog-header mb-2\">\n <span class=\"header-title\">{{dialogData.titleDialog || LANG.SELECT_ACCESS}}</span>\n <button matDialogClose class=\"btn-close-dialog\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n </div>\n </div>\n <div [class.active]=\"optionSelect.value !== null\" qms-dialog-content class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100\"\n appearance=\"fill\">\n <mat-label qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <!-- Person Access -->\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <mat-dialog-content>\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100\" appearance=\"fill\">\n <mat-label qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n (selectionChange)=\"onFilterPerson()\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue(''); onFilterPerson()\" class=\"pointer \"\n matSuffix aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <!-- input field department filter person -->\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option\" qms-form qms-select-input>\n <mat-label>{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n (selectionChange)=\"onFilterPerson()\"\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,'']); onFilterPerson()\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100\" appearance=\"fill\" qms-form qms-search-field>\n <input matInput appearance=\"off\" [placeholder]=\"LANG.SEARCH_WITH_NAME\" formControlName=\"keyword\"\n type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" matSuffix mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n <span [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\"\n class=\"pointer btn-icon-clear d-flex justify-content-center align-items-center \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <button qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n </mat-dialog-content>\n\n <mat-dialog-content class=\"items-list\">\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} </span>\n <span>(<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation]\n *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </mat-dialog-content>\n </form>\n </ng-container>\n\n <!-- UserGroup Access -->\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <mat-dialog-content>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100\" qms-form qms-search-field>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\"\n [placeholder]=\"dialogData.userGroupConfig?.searchName || LANG.USER_GROUP\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" matSuffix mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n <div [@inOutAnimation] *ngIf=\"!!userGroupForm.value && !getLoading$.value\" matSuffix\n qms-input-clear>\n <button (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n </mat-dialog-content>\n <mat-dialog-content class=\"items-list\">\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}</span>\n <span>(<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </mat-dialog-content>\n </div>\n </ng-container>\n\n <!-- Department Access -->\n <ng-container\n *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT && getLoading$.value; then loading\"></ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT && !getLoading$.value\"\n class=\"person-access\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <!-- Result Person -->\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <!-- Result User group -->\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title: dialogData.userGroupConfig?.searchName || LANG.USER_GROUP}\">\n </ng-container>\n <!-- Result Department -->\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <div qms-dialog-footer class=\"confirm__button__groups\" [class.none-option]=\"optionSelect.value === null\">\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n <button qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n </div>\n</div>\n\n<!-- Template -->\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n\n<!-- Template list chip -->\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-list [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n <mat-icon *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\"\n class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </mat-chip>\n </div>\n </mat-chip-list>\n</ng-template>\n\n<!-- Template result with collapse -->\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<!-- Template row without checkbox -->\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<!-- Template checkbox -->\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<!-- Template loading -->\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>",
|
39436
39325
|
animations: [SelectAccessAnimationTrigger],
|
39437
39326
|
providers: [
|
39438
39327
|
{
|