@cleavelandprice/ngx-lib 4.8.2 → 4.8.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.
@@ -325,7 +325,7 @@ class UserChooserDialogComponent {
325
325
  this.selectedTabIndex.set(e.index);
326
326
  }
327
327
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: UserChooserDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
328
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: UserChooserDialogComponent, isStandalone: true, selector: "user-chooser-dialog", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: false, transformFunction: null }, users: { classPropertyName: "users", publicName: "users", isSignal: true, isRequired: false, transformFunction: null }, groups: { classPropertyName: "groups", publicName: "groups", isSignal: true, isRequired: false, transformFunction: null }, photos: { classPropertyName: "photos", publicName: "photos", isSignal: true, isRequired: false, transformFunction: null }, photoClass: { classPropertyName: "photoClass", publicName: "photoClass", isSignal: true, isRequired: false, transformFunction: null }, selectedUsers: { classPropertyName: "selectedUsers", publicName: "selectedUsers", isSignal: true, isRequired: false, transformFunction: null }, selectedGroups: { classPropertyName: "selectedGroups", publicName: "selectedGroups", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedUsers: "selectedUsersChange", selectedGroups: "selectedGroupsChange", close: "close" }, viewQueries: [{ propertyName: "userChooserList", first: true, predicate: ["userChooserList"], descendants: true, isSignal: true }, { propertyName: "groupChooserList", first: true, predicate: ["groupChooserList"], descendants: true, isSignal: true }], ngImport: i0, template: "<kendo-dialog [width]=\"dialogWidth()\" (close)=\"close.emit('cancel')\">\r\n <!-- Title -->\r\n <kendo-dialog-titlebar>\r\n <div id=\"title\" class=\"bold\">\r\n {{ title() }}\r\n </div>\r\n @if (multiSelectInstructions()) {\r\n <div id=\"multi-select-instructions\" [innerHTML]=\"multiSelectInstructions()\">\r\n </div>\r\n }\r\n </kendo-dialog-titlebar>\r\n\r\n <!-- Global filter -->\r\n @if (settings().filterMode === 'Global' || settings().filterMode === 'Both') {\r\n <kendo-textbox id=\"filter\" [(value)]=\"filter\" placeholder=\"Type here to filter employee list...\">\r\n @if (filter()) {\r\n <ng-template kendoTextBoxSuffixTemplate>\r\n <kendo-svgicon [icon]=\"filterClearIcon\" class=\"clear-filter\" (click)=\"filter.set('')\" />\r\n </ng-template>\r\n }\r\n </kendo-textbox>\r\n }\r\n\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n <!-- Groups AND Users, so we need tabs -->\r\n <kendo-tabstrip [keepTabContent]=\"true\" (tabSelect)=\"onTabSelect($event)\">\r\n <!-- Users tab -->\r\n <kendo-tabstrip-tab title=\"Users\" [selected]=\"true\" #usersTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n\r\n <!-- Groups tab -->\r\n <kendo-tabstrip-tab title=\"Groups\" #groupsTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n </kendo-tabstrip>\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n <!-- Users only -->\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedUsersCount.set($event)\" -->\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n <!-- Groups only -->\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedGroupsCount.set($event)\" -->\r\n }\r\n\r\n <kendo-dialog-actions>\r\n <!-- Hide unselected toggle -->\r\n <div id=\"hide-toggle\">\r\n @if (\r\n settings().displayHideUnselectedToggle &&\r\n (selectedUsers().length > 0 || selectedGroups().length > 0))\r\n {\r\n <kendo-label [for]=\"hideunselected\">Hide Unselected </kendo-label>\r\n <kendo-switch #hideunselected (valueChange)=\"hideUnselected.set($event)\" onLabel=\"'Yes'\" offLabel=\"'No'\" />\r\n }\r\n </div>\r\n\r\n <!-- Selected user count -->\r\n <div id=\"selected-count\">\r\n @if (settings().displaySelectedCount) {\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s), {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s) selected\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n }\r\n }\r\n </div>\r\n\r\n <div id=\"buttons\">\r\n <!-- Unselect All button -->\r\n @if (\r\n (selectedTabIndex() === 0 && selectedUsers().length > 0) ||\r\n (selectedTabIndex() === 1 && selectedGroups().length > 0))\r\n {\r\n <button kendoButton (click)=\"$event.stopPropagation(); unselectAll()\">\r\n {{ settings().unselectButtonText ?? 'Unselect All' }}\r\n </button>\r\n }\r\n \r\n <!-- Cancel button -->\r\n <button kendoButton\r\n (click)=\"$event.stopPropagation(); close.emit(settings().cancelReturnValue)\">\r\n\r\n {{ settings().cancelButtonText ?? 'Cancel' }}\r\n </button>\r\n\r\n <!-- Ok button -->\r\n <button kendoButton themeColor=\"primary\"\r\n [disabled]=\"selectedUsers().length === 0 && selectedGroups().length === 0\"\r\n (click)=\"$event.stopPropagation(); close.emit(returnValue())\">\r\n\r\n {{ settings().okButtonText ?? 'Ok' }}\r\n </button>\r\n </div>\r\n </kendo-dialog-actions>\r\n</kendo-dialog>", styles: ["::ng-deep .k-dialog-title,.k-window-title{display:flex;justify-content:space-between}::ng-deep .k-dialog-title .bold,.k-window-title .bold{font-weight:700}::ng-deep .k-dialog-title #multi-select-instructions,.k-window-title #multi-select-instructions{opacity:.5}#filter{margin-bottom:1rem}#filter .clear-filter{cursor:pointer}.k-dialog-actions,.k-window-actions,.k-actions{display:flex;justify-content:space-between}.k-dialog-actions>#selected-count,.k-window-actions>#selected-count,.k-actions>#selected-count{text-align:center}.k-dialog-actions>#buttons,.k-window-actions>#buttons,.k-actions>#buttons{display:grid;grid-auto-flow:column;justify-content:end;gap:1rem}.k-dialog-actions>#buttons button,.k-window-actions>#buttons button,.k-actions>#buttons button{min-width:5rem}\n"], dependencies: [{ kind: "component", type: i1$1.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "closable", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: i1$1.DialogTitleBarComponent, selector: "kendo-dialog-titlebar", inputs: ["id", "closeTitle", "closable"], outputs: ["close"] }, { kind: "component", type: i1$1.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i3.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "component", type: i3.SwitchComponent, selector: "kendo-switch", inputs: ["focusableId", "onLabel", "offLabel", "checked", "disabled", "readonly", "tabindex", "size", "thumbRounded", "trackRounded", "tabIndex"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoSwitch"] }, { kind: "component", type: i4.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: i5.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "size", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: i5.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i5.TabContentDirective, selector: "[kendoTabContent]" }, { kind: "component", type: i6.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: UserChooserList, selector: "user-chooser-list", inputs: ["settings", "data", "photoClass", "selectedAccountNames", "filter", "hideUnselected", "photos"], outputs: ["selectedAccountNamesChange"] }] }); }
328
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: UserChooserDialogComponent, isStandalone: true, selector: "user-chooser-dialog", inputs: { settings: { classPropertyName: "settings", publicName: "settings", isSignal: true, isRequired: false, transformFunction: null }, users: { classPropertyName: "users", publicName: "users", isSignal: true, isRequired: false, transformFunction: null }, groups: { classPropertyName: "groups", publicName: "groups", isSignal: true, isRequired: false, transformFunction: null }, photos: { classPropertyName: "photos", publicName: "photos", isSignal: true, isRequired: false, transformFunction: null }, photoClass: { classPropertyName: "photoClass", publicName: "photoClass", isSignal: true, isRequired: false, transformFunction: null }, selectedUsers: { classPropertyName: "selectedUsers", publicName: "selectedUsers", isSignal: true, isRequired: false, transformFunction: null }, selectedGroups: { classPropertyName: "selectedGroups", publicName: "selectedGroups", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedUsers: "selectedUsersChange", selectedGroups: "selectedGroupsChange", close: "close" }, viewQueries: [{ propertyName: "userChooserList", first: true, predicate: ["userChooserList"], descendants: true, isSignal: true }, { propertyName: "groupChooserList", first: true, predicate: ["groupChooserList"], descendants: true, isSignal: true }], ngImport: i0, template: "<kendo-dialog [width]=\"dialogWidth()\" (close)=\"close.emit('cancel')\">\r\n <!-- Title -->\r\n <kendo-dialog-titlebar>\r\n <div id=\"title\" class=\"bold\">\r\n {{ title() }}\r\n </div>\r\n @if (multiSelectInstructions()) {\r\n <div id=\"multi-select-instructions\" [innerHTML]=\"multiSelectInstructions()\">\r\n </div>\r\n }\r\n </kendo-dialog-titlebar>\r\n\r\n <!-- Global filter -->\r\n @if (settings().filterMode === 'Global' || settings().filterMode === 'Both') {\r\n <kendo-textbox id=\"filter\" [(value)]=\"filter\" placeholder=\"Type here to filter employee list...\">\r\n @if (filter()) {\r\n <ng-template kendoTextBoxSuffixTemplate>\r\n <kendo-svgicon [icon]=\"filterClearIcon\" class=\"clear-filter\" (click)=\"filter.set('')\" />\r\n </ng-template>\r\n }\r\n </kendo-textbox>\r\n }\r\n\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n <!-- Groups AND Users, so we need tabs -->\r\n <kendo-tabstrip [keepTabContent]=\"true\" (tabSelect)=\"onTabSelect($event)\">\r\n <!-- Users tab -->\r\n <kendo-tabstrip-tab title=\"Users\" [selected]=\"true\" #usersTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n\r\n <!-- Groups tab -->\r\n <kendo-tabstrip-tab title=\"Groups\" #groupsTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n </kendo-tabstrip>\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n <!-- Users only -->\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedUsersCount.set($event)\" -->\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n <!-- Groups only -->\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedGroupsCount.set($event)\" -->\r\n }\r\n\r\n <kendo-dialog-actions>\r\n <!-- Hide unselected toggle -->\r\n <div id=\"hide-toggle\">\r\n @if (\r\n settings().displayHideUnselectedToggle &&\r\n (selectedUsers().length > 0 || selectedGroups().length > 0))\r\n {\r\n <kendo-label [for]=\"hideunselected\">Hide Unselected </kendo-label>\r\n <kendo-switch #hideunselected (valueChange)=\"hideUnselected.set($event)\" onLabel=\"'Yes'\" offLabel=\"'No'\" />\r\n }\r\n </div>\r\n\r\n <!-- Selected user count -->\r\n <div id=\"selected-count\">\r\n @if (settings().displaySelectedCount) {\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s), {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s) selected\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n }\r\n }\r\n </div>\r\n\r\n <div id=\"buttons\">\r\n <!-- Unselect All button -->\r\n @if (\r\n (selectedTabIndex() === 0 && selectedUsers().length > 0) ||\r\n (selectedTabIndex() === 1 && selectedGroups().length > 0))\r\n {\r\n <button type=\"button\" kendoButton\r\n (click)=\"unselectAll()\">\r\n \r\n {{ settings().unselectButtonText ?? 'Unselect All' }}\r\n </button>\r\n }\r\n \r\n <!-- Cancel button -->\r\n <button type=\"button\" kendoButton\r\n (click)=\"close.emit(settings().cancelReturnValue)\">\r\n\r\n {{ settings().cancelButtonText ?? 'Cancel' }}\r\n </button>\r\n\r\n <!-- Ok button -->\r\n <button type=\"button\" kendoButton themeColor=\"primary\"\r\n [disabled]=\"selectedUsers().length === 0 && selectedGroups().length === 0\"\r\n (click)=\"close.emit(returnValue())\">\r\n\r\n {{ settings().okButtonText ?? 'Ok' }}\r\n </button>\r\n </div>\r\n </kendo-dialog-actions>\r\n</kendo-dialog>", styles: ["::ng-deep .k-dialog-title,.k-window-title{display:flex;justify-content:space-between}::ng-deep .k-dialog-title .bold,.k-window-title .bold{font-weight:700}::ng-deep .k-dialog-title #multi-select-instructions,.k-window-title #multi-select-instructions{opacity:.5}#filter{margin-bottom:1rem}#filter .clear-filter{cursor:pointer}.k-dialog-actions,.k-window-actions,.k-actions{display:flex;justify-content:space-between}.k-dialog-actions>#selected-count,.k-window-actions>#selected-count,.k-actions>#selected-count{text-align:center}.k-dialog-actions>#buttons,.k-window-actions>#buttons,.k-actions>#buttons{display:grid;grid-auto-flow:column;justify-content:end;gap:1rem}.k-dialog-actions>#buttons button,.k-window-actions>#buttons button,.k-actions>#buttons button{min-width:5rem}\n"], dependencies: [{ kind: "component", type: i1$1.DialogComponent, selector: "kendo-dialog", inputs: ["actions", "actionsLayout", "autoFocusedElement", "closable", "title", "width", "minWidth", "maxWidth", "height", "minHeight", "maxHeight", "animation"], outputs: ["action", "close"], exportAs: ["kendoDialog"] }, { kind: "component", type: i1$1.DialogTitleBarComponent, selector: "kendo-dialog-titlebar", inputs: ["id", "closeTitle", "closable"], outputs: ["close"] }, { kind: "component", type: i1$1.DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: i3.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i3.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "component", type: i3.SwitchComponent, selector: "kendo-switch", inputs: ["focusableId", "onLabel", "offLabel", "checked", "disabled", "readonly", "tabindex", "size", "thumbRounded", "trackRounded", "tabIndex"], outputs: ["focus", "blur", "valueChange"], exportAs: ["kendoSwitch"] }, { kind: "component", type: i4.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: i5.TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "size", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: i5.TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: i5.TabContentDirective, selector: "[kendoTabContent]" }, { kind: "component", type: i6.SVGIconComponent, selector: "kendo-svg-icon, kendo-svgicon", inputs: ["icon", "variant"], exportAs: ["kendoSVGIcon"] }, { kind: "component", type: UserChooserList, selector: "user-chooser-list", inputs: ["settings", "data", "photoClass", "selectedAccountNames", "filter", "hideUnselected", "photos"], outputs: ["selectedAccountNamesChange"] }] }); }
329
329
  }
330
330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: UserChooserDialogComponent, decorators: [{
331
331
  type: Component,
@@ -337,7 +337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
337
337
  KENDO_TABSTRIP,
338
338
  KENDO_ICONS,
339
339
  UserChooserList
340
- ], template: "<kendo-dialog [width]=\"dialogWidth()\" (close)=\"close.emit('cancel')\">\r\n <!-- Title -->\r\n <kendo-dialog-titlebar>\r\n <div id=\"title\" class=\"bold\">\r\n {{ title() }}\r\n </div>\r\n @if (multiSelectInstructions()) {\r\n <div id=\"multi-select-instructions\" [innerHTML]=\"multiSelectInstructions()\">\r\n </div>\r\n }\r\n </kendo-dialog-titlebar>\r\n\r\n <!-- Global filter -->\r\n @if (settings().filterMode === 'Global' || settings().filterMode === 'Both') {\r\n <kendo-textbox id=\"filter\" [(value)]=\"filter\" placeholder=\"Type here to filter employee list...\">\r\n @if (filter()) {\r\n <ng-template kendoTextBoxSuffixTemplate>\r\n <kendo-svgicon [icon]=\"filterClearIcon\" class=\"clear-filter\" (click)=\"filter.set('')\" />\r\n </ng-template>\r\n }\r\n </kendo-textbox>\r\n }\r\n\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n <!-- Groups AND Users, so we need tabs -->\r\n <kendo-tabstrip [keepTabContent]=\"true\" (tabSelect)=\"onTabSelect($event)\">\r\n <!-- Users tab -->\r\n <kendo-tabstrip-tab title=\"Users\" [selected]=\"true\" #usersTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n\r\n <!-- Groups tab -->\r\n <kendo-tabstrip-tab title=\"Groups\" #groupsTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n </kendo-tabstrip>\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n <!-- Users only -->\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedUsersCount.set($event)\" -->\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n <!-- Groups only -->\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedGroupsCount.set($event)\" -->\r\n }\r\n\r\n <kendo-dialog-actions>\r\n <!-- Hide unselected toggle -->\r\n <div id=\"hide-toggle\">\r\n @if (\r\n settings().displayHideUnselectedToggle &&\r\n (selectedUsers().length > 0 || selectedGroups().length > 0))\r\n {\r\n <kendo-label [for]=\"hideunselected\">Hide Unselected </kendo-label>\r\n <kendo-switch #hideunselected (valueChange)=\"hideUnselected.set($event)\" onLabel=\"'Yes'\" offLabel=\"'No'\" />\r\n }\r\n </div>\r\n\r\n <!-- Selected user count -->\r\n <div id=\"selected-count\">\r\n @if (settings().displaySelectedCount) {\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s), {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s) selected\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n }\r\n }\r\n </div>\r\n\r\n <div id=\"buttons\">\r\n <!-- Unselect All button -->\r\n @if (\r\n (selectedTabIndex() === 0 && selectedUsers().length > 0) ||\r\n (selectedTabIndex() === 1 && selectedGroups().length > 0))\r\n {\r\n <button kendoButton (click)=\"$event.stopPropagation(); unselectAll()\">\r\n {{ settings().unselectButtonText ?? 'Unselect All' }}\r\n </button>\r\n }\r\n \r\n <!-- Cancel button -->\r\n <button kendoButton\r\n (click)=\"$event.stopPropagation(); close.emit(settings().cancelReturnValue)\">\r\n\r\n {{ settings().cancelButtonText ?? 'Cancel' }}\r\n </button>\r\n\r\n <!-- Ok button -->\r\n <button kendoButton themeColor=\"primary\"\r\n [disabled]=\"selectedUsers().length === 0 && selectedGroups().length === 0\"\r\n (click)=\"$event.stopPropagation(); close.emit(returnValue())\">\r\n\r\n {{ settings().okButtonText ?? 'Ok' }}\r\n </button>\r\n </div>\r\n </kendo-dialog-actions>\r\n</kendo-dialog>", styles: ["::ng-deep .k-dialog-title,.k-window-title{display:flex;justify-content:space-between}::ng-deep .k-dialog-title .bold,.k-window-title .bold{font-weight:700}::ng-deep .k-dialog-title #multi-select-instructions,.k-window-title #multi-select-instructions{opacity:.5}#filter{margin-bottom:1rem}#filter .clear-filter{cursor:pointer}.k-dialog-actions,.k-window-actions,.k-actions{display:flex;justify-content:space-between}.k-dialog-actions>#selected-count,.k-window-actions>#selected-count,.k-actions>#selected-count{text-align:center}.k-dialog-actions>#buttons,.k-window-actions>#buttons,.k-actions>#buttons{display:grid;grid-auto-flow:column;justify-content:end;gap:1rem}.k-dialog-actions>#buttons button,.k-window-actions>#buttons button,.k-actions>#buttons button{min-width:5rem}\n"] }]
340
+ ], template: "<kendo-dialog [width]=\"dialogWidth()\" (close)=\"close.emit('cancel')\">\r\n <!-- Title -->\r\n <kendo-dialog-titlebar>\r\n <div id=\"title\" class=\"bold\">\r\n {{ title() }}\r\n </div>\r\n @if (multiSelectInstructions()) {\r\n <div id=\"multi-select-instructions\" [innerHTML]=\"multiSelectInstructions()\">\r\n </div>\r\n }\r\n </kendo-dialog-titlebar>\r\n\r\n <!-- Global filter -->\r\n @if (settings().filterMode === 'Global' || settings().filterMode === 'Both') {\r\n <kendo-textbox id=\"filter\" [(value)]=\"filter\" placeholder=\"Type here to filter employee list...\">\r\n @if (filter()) {\r\n <ng-template kendoTextBoxSuffixTemplate>\r\n <kendo-svgicon [icon]=\"filterClearIcon\" class=\"clear-filter\" (click)=\"filter.set('')\" />\r\n </ng-template>\r\n }\r\n </kendo-textbox>\r\n }\r\n\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n <!-- Groups AND Users, so we need tabs -->\r\n <kendo-tabstrip [keepTabContent]=\"true\" (tabSelect)=\"onTabSelect($event)\">\r\n <!-- Users tab -->\r\n <kendo-tabstrip-tab title=\"Users\" [selected]=\"true\" #usersTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n\r\n <!-- Groups tab -->\r\n <kendo-tabstrip-tab title=\"Groups\" #groupsTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n </kendo-tabstrip>\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n <!-- Users only -->\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedUsersCount.set($event)\" -->\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n <!-- Groups only -->\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedGroupsCount.set($event)\" -->\r\n }\r\n\r\n <kendo-dialog-actions>\r\n <!-- Hide unselected toggle -->\r\n <div id=\"hide-toggle\">\r\n @if (\r\n settings().displayHideUnselectedToggle &&\r\n (selectedUsers().length > 0 || selectedGroups().length > 0))\r\n {\r\n <kendo-label [for]=\"hideunselected\">Hide Unselected </kendo-label>\r\n <kendo-switch #hideunselected (valueChange)=\"hideUnselected.set($event)\" onLabel=\"'Yes'\" offLabel=\"'No'\" />\r\n }\r\n </div>\r\n\r\n <!-- Selected user count -->\r\n <div id=\"selected-count\">\r\n @if (settings().displaySelectedCount) {\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s), {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s) selected\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n }\r\n }\r\n </div>\r\n\r\n <div id=\"buttons\">\r\n <!-- Unselect All button -->\r\n @if (\r\n (selectedTabIndex() === 0 && selectedUsers().length > 0) ||\r\n (selectedTabIndex() === 1 && selectedGroups().length > 0))\r\n {\r\n <button type=\"button\" kendoButton\r\n (click)=\"unselectAll()\">\r\n \r\n {{ settings().unselectButtonText ?? 'Unselect All' }}\r\n </button>\r\n }\r\n \r\n <!-- Cancel button -->\r\n <button type=\"button\" kendoButton\r\n (click)=\"close.emit(settings().cancelReturnValue)\">\r\n\r\n {{ settings().cancelButtonText ?? 'Cancel' }}\r\n </button>\r\n\r\n <!-- Ok button -->\r\n <button type=\"button\" kendoButton themeColor=\"primary\"\r\n [disabled]=\"selectedUsers().length === 0 && selectedGroups().length === 0\"\r\n (click)=\"close.emit(returnValue())\">\r\n\r\n {{ settings().okButtonText ?? 'Ok' }}\r\n </button>\r\n </div>\r\n </kendo-dialog-actions>\r\n</kendo-dialog>", styles: ["::ng-deep .k-dialog-title,.k-window-title{display:flex;justify-content:space-between}::ng-deep .k-dialog-title .bold,.k-window-title .bold{font-weight:700}::ng-deep .k-dialog-title #multi-select-instructions,.k-window-title #multi-select-instructions{opacity:.5}#filter{margin-bottom:1rem}#filter .clear-filter{cursor:pointer}.k-dialog-actions,.k-window-actions,.k-actions{display:flex;justify-content:space-between}.k-dialog-actions>#selected-count,.k-window-actions>#selected-count,.k-actions>#selected-count{text-align:center}.k-dialog-actions>#buttons,.k-window-actions>#buttons,.k-actions>#buttons{display:grid;grid-auto-flow:column;justify-content:end;gap:1rem}.k-dialog-actions>#buttons button,.k-window-actions>#buttons button,.k-actions>#buttons button{min-width:5rem}\n"] }]
341
341
  }], propDecorators: { userChooserList: [{ type: i0.ViewChild, args: ['userChooserList', { isSignal: true }] }], groupChooserList: [{ type: i0.ViewChild, args: ['groupChooserList', { isSignal: true }] }], settings: [{ type: i0.Input, args: [{ isSignal: true, alias: "settings", required: false }] }], users: [{ type: i0.Input, args: [{ isSignal: true, alias: "users", required: false }] }], groups: [{ type: i0.Input, args: [{ isSignal: true, alias: "groups", required: false }] }], photos: [{ type: i0.Input, args: [{ isSignal: true, alias: "photos", required: false }] }], photoClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "photoClass", required: false }] }], selectedUsers: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedUsers", required: false }] }, { type: i0.Output, args: ["selectedUsersChange"] }], selectedGroups: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedGroups", required: false }] }, { type: i0.Output, args: ["selectedGroupsChange"] }], close: [{ type: i0.Output, args: ["close"] }] } });
342
342
 
343
343
  class UserFieldComponent {
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-kendo.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/model/user-chooser-default-settings.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-chooser-list/user-chooser-list.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-chooser-list/user-chooser-list.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-chooser-dialog/user-chooser-dialog.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-chooser-dialog/user-chooser-dialog.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-field/user-field.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-field/user-field.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/kendo-active-directory.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/cleavelandprice-ngx-lib-active-directory-kendo.ts"],"sourcesContent":["import { IUserChooserColumn } from \"./user-chooser-column-interface\";\r\nimport { IUserChooserSettings } from \"./user-chooser-settings-interface\";\r\nimport { SelectableSettings } from \"@progress/kendo-angular-grid\";\r\n\r\nexport const USER_CHOOSER_DEFAULT_SETTINGS = {\r\n usersTitle: 'Select User(s)',\r\n groupsTitle: 'Select Group(s)',\r\n displayMultiSelectInstructions: true,\r\n displayHideUnselectedToggle: true,\r\n displaySelectedCount: true,\r\n filterMode: 'Global' as 'Column' | 'Global' | 'Both' | 'None',\r\n groupable: true,\r\n sortable: true,\r\n pageable: false,\r\n pageSize: 150,\r\n height: 600,\r\n additionalWidth: 500,\r\n displayPhotos: true,\r\n photoColumnWidth: 40,\r\n returnType: 'AccountName' as 'AccountName' | 'Object',\r\n cancelReturnValue: 'cancel',\r\n okButtonText: 'Ok',\r\n cancelButtonText: 'Cancel',\r\n unselectButtonText: 'Unselect All',\r\n emptyDataPullMode: 'Users' as 'All' | 'Users' | 'Groups',\r\n selectionSettings: {\r\n checkboxOnly: false,\r\n mode: 'multiple' as 'single' | 'multiple',\r\n enabled: true,\r\n drag: true,\r\n cell: false,\r\n metaKeyMultiSelect: false\r\n } as SelectableSettings,\r\n userColumns: [\r\n { field: 'employeeNumber', title: 'Emp #', width: 120, columnFilterable: true, globalFilterable: true, sortable: true, groupable: true, hidden: true },\r\n { field: 'displayName', title: 'Display Name', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: false },\r\n { field: 'department', title: 'Department', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: true },\r\n { field: 'title', title: 'Title', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: true },\r\n { field: 'telephoneNumber', title: 'Phone', width: 120, columnFilterable: true, globalFilterable: false, sortable: true, groupable: false },\r\n { field: 'sAMAccountName', title: 'Username', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: false, hidden: true }\r\n ] as IUserChooserColumn[],\r\n groupColumns: [\r\n { field: 'name', title: 'Name', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: false },\r\n { field: 'sAMAccountName', title: 'Username', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: false, hidden: false }\r\n ]\r\n} as IUserChooserSettings","import { ChangeDetectorRef, Component, afterNextRender, computed, debounced, effect, inject, input, model, OnDestroy, signal, viewChild, ViewEncapsulation } from '@angular/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\n\r\nimport { of, Subscription, switchMap } from 'rxjs';\r\n\r\nimport { CleavelandPriceUser, Group } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport { KENDO_GRID, GridComponent, RowArgs, RowClassArgs } from \"@progress/kendo-angular-grid\";\r\nimport { process } from '@progress/kendo-data-query';\r\n\r\nimport { IUserChooserSettings } from '../../model/user-chooser-settings-interface';\r\nimport { USER_CHOOSER_DEFAULT_SETTINGS } from '../../model/user-chooser-default-settings';\r\n\r\n@Component({\r\n selector: 'user-chooser-list',\r\n imports: [\r\n NgClass,\r\n KENDO_GRID\r\n ],\r\n templateUrl: './user-chooser-list.html',\r\n styleUrl: './user-chooser-list.scss',\r\n encapsulation: ViewEncapsulation.None // Required for rowClassCallback\r\n})\r\nexport class UserChooserList implements OnDestroy {\r\n #sp = inject(SharePointService);\r\n grid = viewChild<GridComponent>(GridComponent);\r\n settings = input<IUserChooserSettings>({\r\n ...USER_CHOOSER_DEFAULT_SETTINGS\r\n });\r\n\r\n data = input<(CleavelandPriceUser | Group)[]>([]);\r\n photoClass = input<string>('user-chooser-photo');\r\n selectedAccountNames = model<string[]>([]);\r\n filter = input<string>('');\r\n #debouncedFilter = debounced(() => this.filter(), 300);\r\n #filteredData = signal<(CleavelandPriceUser | Group)[]>([]);\r\n hideUnselected = input(false);\r\n mode = computed(() => this.data().at(0)?.hasOwnProperty('givenName') ? 'users' : 'groups');\r\n\r\n //#region Either passed in or pulled from the service\r\n photos = input<PhotoItem[] | undefined>();\r\n #photosFromService$ = toObservable(this.photos)\r\n .pipe(switchMap(photos => {\r\n if (photos) {\r\n return of(photos);\r\n }\r\n\r\n return (this.data().at(0)?.hasOwnProperty('givenName'))\r\n ? this.#sp.getPhotos()\r\n : of([]);\r\n }));\r\n #resolvedPhotos = toSignal(this.#photosFromService$, { initialValue: [] });\r\n //#endregion Either passed in or pulled from the service\r\n\r\n selectedCount = signal<number>(0);\r\n \r\n gridData = computed(() =>\r\n this.#debouncedFilter.value() ?\r\n this.#filteredData() :\r\n this.data()\r\n .filter(data =>\r\n !this.hideUnselected() ||\r\n this.selectedAccountNames()\r\n .some(item => item.toLowerCase() === data.sAMAccountName!.toLowerCase())\r\n )\r\n );\r\n\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n selectionChangeSubscription?: Subscription;\r\n\r\n constructor() {\r\n effect(() => {\r\n const filterableFields = this.settings().userColumns!\r\n .filter(c => c.globalFilterable ?? true)\r\n .map(c => c.field)\r\n ?? [];\r\n\r\n const filters = filterableFields.map(field => ({\r\n field: field,\r\n operator: 'contains',\r\n value: this.#debouncedFilter.value()\r\n }));\r\n\r\n this.#filteredData.set(\r\n process(\r\n //this.users(),\r\n this.data(),\r\n {\r\n filter: filters.length > 0 ? { logic: 'or', filters: filters } : undefined\r\n })\r\n .data\r\n .filter(data => !this.hideUnselected() || this.selectedAccountNames().some(s => s.toLowerCase() === data.sAMAccountName!.toLowerCase()))\r\n );\r\n });\r\n\r\n afterNextRender(() => {\r\n this.selectedCount.set(this.grid()?.selectionService.selected?.length ?? 0);\r\n\r\n this.selectionChangeSubscription = this.grid()?.selectionService.changes.subscribe((event) => {\r\n this.selectedCount.set(this.grid()?.selectionService.selected?.length ?? 0);\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.selectionChangeSubscription?.unsubscribe();\r\n }\r\n \r\n photo(user: CleavelandPriceUser): PhotoItem | null {\r\n return this.#resolvedPhotos()\r\n .find(p => p.accountName?.toLowerCase() === user.sAMAccountName!.toLowerCase())\r\n ?? null;\r\n }\r\n\r\n // Function to generate a case-insensitive key\r\n caseInsensitiveSelectBy = (context: RowArgs): string => {\r\n // Convert to string and then to lowercase to ensure consistency.\r\n return String(context.dataItem.sAMAccountName).toLowerCase();\r\n };\r\n\r\n unselectAll() {\r\n this.selectedAccountNames.set([]);\r\n this.#cdr.detectChanges();\r\n this.grid()?.selectionService.changes.emit({selectedRows: [], deselectedRows: [], shiftKey: false, ctrlKey: false});\r\n }\r\n\r\n rowClassCallback(context: RowClassArgs): any {\r\n if (this.mode() === 'groups') {\r\n return {\r\n 'disabled': false\r\n };\r\n } \r\n\r\n // Return an object with the class name as key and a condition as value\r\n return {\r\n 'disabled': !(context.dataItem as CleavelandPriceUser).enabled\r\n };\r\n }\r\n}","<kendo-grid #grid [kendoGridBinding]=\"gridData()\"\r\n [rowClass]=\"rowClassCallback.bind(this)\"\r\n [filterable]=\"settings().filterMode === 'Column' || settings().filterMode === 'Both'\"\r\n [groupable]=\"settings().groupable!\"\r\n [sortable]=\"settings().sortable!\"\r\n [pageSize]=\"settings().pageable! ? settings().pageSize! : 0\"\r\n [pageable]=\"settings().pageable!\"\r\n [height]=\"settings().height!\"\r\n [selectable]=\"settings().selectionSettings!\"\r\n [kendoGridSelectBy]=\"caseInsensitiveSelectBy\"\r\n [(selectedKeys)]=\"selectedAccountNames\">\r\n \r\n <!-- Checkbox is we are in checkbox selection mode -->\r\n @if (settings().selectionSettings?.checkboxOnly ?? false) {\r\n <kendo-grid-column [width]=\"30\">\r\n <ng-template kendoGridCellTemplate let-rowIndex=\"rowIndex\">\r\n <kendo-checkbox [kendoGridSelectionCheckbox]=\"rowIndex\"></kendo-checkbox>\r\n </ng-template>\r\n </kendo-grid-column>\r\n }\r\n\r\n @if (mode() === 'users') {\r\n <!-- Optional user photo -->\r\n @if (settings().displayPhotos ?? false) {\r\n <kendo-grid-column [width]=\"settings().photoColumnWidth ?? 40\">\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n @if (photo(dataItem)) {\r\n <img [src]=\"photo(dataItem)!.encodedAbsUrl\" [ngClass]=\"photoClass()\" />\r\n }\r\n </ng-template>\r\n </kendo-grid-column>\r\n }\r\n \r\n <!-- Columns -->\r\n @for (column of settings().userColumns!; track column.field) {\r\n <kendo-grid-column [field]=\"column.field\" [title]=\"column.title\"\r\n [width]=\"column.width ?? 0\"\r\n [hidden]=\"column.hidden ?? false\"\r\n [filterable]=\"column.columnFilterable ?? true\"\r\n [sortable]=\"column.sortable ?? true\"\r\n [groupable]=\"column.groupable ?? true\" />\r\n }\r\n } @else if (mode() === 'groups') {\r\n <!-- Columns -->\r\n @for (column of settings().groupColumns!; track column.field) {\r\n <kendo-grid-column [field]=\"column.field\" [title]=\"column.title\"\r\n [width]=\"column.width ?? 0\"\r\n [hidden]=\"column.hidden ?? false\"\r\n [filterable]=\"column.columnFilterable ?? true\"\r\n [sortable]=\"column.sortable ?? true\"\r\n [groupable]=\"column.groupable ?? true\" />\r\n }\r\n }\r\n</kendo-grid>","import { Component, input, output, signal, computed, model, viewChild, inject } from '@angular/core';\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\nimport { of, switchMap } from 'rxjs';\r\n\r\nimport { ActiveDirectoryService, CleavelandPriceUser, Group } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport { KENDO_BUTTONS } from '@progress/kendo-angular-buttons';\r\nimport { KENDO_DIALOGS } from \"@progress/kendo-angular-dialog\";\r\nimport { KENDO_INPUTS } from '@progress/kendo-angular-inputs';\r\nimport { KENDO_LABELS } from '@progress/kendo-angular-label';\r\nimport { KENDO_TABSTRIP, SelectEvent } from '@progress/kendo-angular-layout';\r\nimport { KENDO_ICONS } from '@progress/kendo-angular-icons';\r\nimport { filterClearIcon } from '@progress/kendo-svg-icons';\r\n\r\nimport { IUserChooserSettings } from '../../model/user-chooser-settings-interface';\r\nimport { USER_CHOOSER_DEFAULT_SETTINGS } from '../../model/user-chooser-default-settings';\r\nimport { UserChooserList } from '../user-chooser-list/user-chooser-list';\r\n\r\n@Component({\r\n selector: 'user-chooser-dialog',\r\n imports: [\r\n KENDO_DIALOGS,\r\n KENDO_BUTTONS,\r\n KENDO_INPUTS,\r\n KENDO_LABELS,\r\n KENDO_TABSTRIP,\r\n KENDO_ICONS,\r\n UserChooserList\r\n ],\r\n templateUrl: './user-chooser-dialog.html',\r\n styleUrl: './user-chooser-dialog.scss',\r\n})\r\nexport class UserChooserDialogComponent {\r\n #services = {\r\n ad: inject(ActiveDirectoryService),\r\n sp: inject(SharePointService)\r\n };\r\n \r\n userChooserList = viewChild<UserChooserList>('userChooserList');\r\n groupChooserList = viewChild<UserChooserList>('groupChooserList');\r\n\r\n settings = input<IUserChooserSettings>({\r\n ...USER_CHOOSER_DEFAULT_SETTINGS\r\n });\r\n\r\n //#region Either passed in or pulled from the service\r\n users = input<CleavelandPriceUser[] | undefined>();\r\n #usersFromService$ = toObservable(this.users)\r\n .pipe(switchMap(users => {\r\n if (users) {\r\n return of(users);\r\n }\r\n\r\n return (this.settings().emptyDataPullMode === 'All' || this.settings().emptyDataPullMode === 'Users')\r\n ? this.#services.ad.getUsers('NgxLibUserChooser')\r\n : of([]);\r\n }));\r\n resolvedUsers = toSignal(this.#usersFromService$, { initialValue: [] });\r\n\r\n groups = input<Group[] | undefined>();\r\n #groupsFromService$ = toObservable(this.groups)\r\n .pipe(switchMap(groups => {\r\n if (groups) {\r\n return of(groups);\r\n }\r\n\r\n return (this.settings().emptyDataPullMode === 'All' || this.settings().emptyDataPullMode === 'Groups')\r\n ? this.#services.ad.getGroups('NgxLibUserChooser')\r\n : of([]);\r\n }));\r\n resolvedGroups = toSignal(this.#groupsFromService$, { initialValue: [] });\r\n\r\n photos = input<PhotoItem[] | undefined>();\r\n #photosFromService$ = toObservable(this.photos)\r\n .pipe(switchMap(photos => {\r\n if (photos) {\r\n return of(photos);\r\n }\r\n\r\n return (this.settings().emptyDataPullMode === 'All' || this.settings().emptyDataPullMode === 'Users')\r\n ? this.#services.sp.getPhotos()\r\n : of([]);\r\n }));\r\n resolvedPhotos = toSignal(this.#photosFromService$, { initialValue: [] });\r\n //#endregion Either passed in or pulled from the service\r\n\r\n photoClass = input<string>('user-chooser-photo');\r\n\r\n selectedUsers = model<string[]>([]);\r\n selectedGroups = model<string[]>([]);\r\n\r\n hideUnselected = signal(false);\r\n \r\n returnValue = computed<UserChooserReturnValue>(() => {\r\n const users = \r\n this.settings().returnType === 'Object' ?\r\n // User objects\r\n this.resolvedUsers().filter(u => this.selectedUsers().some(s => s.toLowerCase() === u.sAMAccountName.toLowerCase())) :\r\n // Account names - reject any invalid account names that may have been passed in\r\n this.resolvedUsers().filter(u => this.selectedUsers().some(s => s.toLowerCase() === u.sAMAccountName.toLowerCase())).map(u => u.sAMAccountName.toLowerCase());\r\n\r\n const groups = \r\n this.settings().returnType === 'Object' ?\r\n // Group objects\r\n this.resolvedGroups().filter(u => this.selectedGroups().some(s => s.toLowerCase() === u.sAMAccountName.toLowerCase())) :\r\n // Account names - reject any invalid account names that may have been passed in\r\n this.resolvedGroups().filter(u => this.selectedGroups().some(s => s.toLowerCase() === u.sAMAccountName.toLowerCase())).map(u => u.sAMAccountName.toLowerCase());\r\n\r\n const validUsers = [\r\n ...(\r\n this.settings().returnType === 'Object' ?\r\n (users as CleavelandPriceUser[]).map(u => u.sAMAccountName.toLowerCase()) :\r\n (users as string[])\r\n )\r\n ];\r\n const invalidUsers = this.selectedUsers().filter(s => !validUsers.some(u => u.toLowerCase() === s.toLowerCase()));\r\n\r\n const validGroups = [\r\n ...(\r\n this.settings().returnType === 'Object' ?\r\n (groups as Group[]).map(u => u.sAMAccountName.toLowerCase()) :\r\n (groups as string[])\r\n )\r\n ];\r\n const invalidGroups = this.selectedGroups().filter(s => !validGroups.some(u => u.toLowerCase() === s.toLowerCase()));\r\n\r\n return { users, groups, invalidUsers, invalidGroups };\r\n });\r\n\r\n multiSelectInstructions = computed(() => {\r\n if (this.settings().selectionSettings?.mode === 'single' || !this.settings().displayMultiSelectInstructions) {\r\n return '';\r\n }\r\n\r\n const instructions: string[] = [];\r\n\r\n if (this.settings().selectionSettings?.metaKeyMultiSelect) {\r\n instructions.push('<span class=\"bold\">[CTRL/SHIFT + Click]</span>');\r\n }\r\n\r\n if (this.settings().selectionSettings?.drag) {\r\n instructions.push('<span class=\"bold\">[Click and drag]</span>');\r\n }\r\n\r\n if (instructions.length === 0) {\r\n return '';\r\n }\r\n\r\n return `${instructions.join(' or ')} to select multiple`;\r\n });\r\n \r\n close = output<any>();\r\n filter = signal<string>('');\r\n\r\n filterClearIcon = filterClearIcon;\r\n\r\n dialogWidth = computed(() =>\r\n this.settings().userColumns!\r\n .filter(c => !c.hidden)\r\n .reduce((total, column) => total + (column.width ?? 0), 0)\r\n + (this.settings().additionalWidth ?? 0)\r\n );\r\n\r\n selectedTabIndex = signal(0);\r\n mode = computed(() => this.resolvedUsers().length > 0 && this.resolvedGroups().length > 0 ? 'tabs' : 'standalone');\r\n\r\n title = computed(() => {\r\n return (\r\n (this.mode() === 'tabs' && this.selectedTabIndex() === 0) ||\r\n (this.mode() === 'standalone' && this.resolvedUsers().length > 0)\r\n ) ?\r\n this.settings().usersTitle ?? 'Select User(s)' :\r\n this.settings().groupsTitle ?? 'Select Group(s)';\r\n });\r\n\r\n unselectAll() {\r\n const list = this.selectedTabIndex() === 0 ?\r\n this.userChooserList :\r\n this.groupChooserList;\r\n\r\n list()?.unselectAll();\r\n }\r\n\r\n onTabSelect(e: SelectEvent) {\r\n this.selectedTabIndex.set(e.index);\r\n }\r\n}\r\n\r\nexport type UserChooserReturnValue = {\r\n users: CleavelandPriceUser[] | string[];\r\n groups: Group[] | string[];\r\n invalidUsers: string[];\r\n invalidGroups: string[];\r\n};","<kendo-dialog [width]=\"dialogWidth()\" (close)=\"close.emit('cancel')\">\r\n <!-- Title -->\r\n <kendo-dialog-titlebar>\r\n <div id=\"title\" class=\"bold\">\r\n {{ title() }}\r\n </div>\r\n @if (multiSelectInstructions()) {\r\n <div id=\"multi-select-instructions\" [innerHTML]=\"multiSelectInstructions()\">\r\n </div>\r\n }\r\n </kendo-dialog-titlebar>\r\n\r\n <!-- Global filter -->\r\n @if (settings().filterMode === 'Global' || settings().filterMode === 'Both') {\r\n <kendo-textbox id=\"filter\" [(value)]=\"filter\" placeholder=\"Type here to filter employee list...\">\r\n @if (filter()) {\r\n <ng-template kendoTextBoxSuffixTemplate>\r\n <kendo-svgicon [icon]=\"filterClearIcon\" class=\"clear-filter\" (click)=\"filter.set('')\" />\r\n </ng-template>\r\n }\r\n </kendo-textbox>\r\n }\r\n\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n <!-- Groups AND Users, so we need tabs -->\r\n <kendo-tabstrip [keepTabContent]=\"true\" (tabSelect)=\"onTabSelect($event)\">\r\n <!-- Users tab -->\r\n <kendo-tabstrip-tab title=\"Users\" [selected]=\"true\" #usersTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n\r\n <!-- Groups tab -->\r\n <kendo-tabstrip-tab title=\"Groups\" #groupsTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n </kendo-tabstrip>\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n <!-- Users only -->\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedUsersCount.set($event)\" -->\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n <!-- Groups only -->\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedGroupsCount.set($event)\" -->\r\n }\r\n\r\n <kendo-dialog-actions>\r\n <!-- Hide unselected toggle -->\r\n <div id=\"hide-toggle\">\r\n @if (\r\n settings().displayHideUnselectedToggle &&\r\n (selectedUsers().length > 0 || selectedGroups().length > 0))\r\n {\r\n <kendo-label [for]=\"hideunselected\">Hide Unselected </kendo-label>\r\n <kendo-switch #hideunselected (valueChange)=\"hideUnselected.set($event)\" onLabel=\"'Yes'\" offLabel=\"'No'\" />\r\n }\r\n </div>\r\n\r\n <!-- Selected user count -->\r\n <div id=\"selected-count\">\r\n @if (settings().displaySelectedCount) {\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s), {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s) selected\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n }\r\n }\r\n </div>\r\n\r\n <div id=\"buttons\">\r\n <!-- Unselect All button -->\r\n @if (\r\n (selectedTabIndex() === 0 && selectedUsers().length > 0) ||\r\n (selectedTabIndex() === 1 && selectedGroups().length > 0))\r\n {\r\n <button kendoButton (click)=\"$event.stopPropagation(); unselectAll()\">\r\n {{ settings().unselectButtonText ?? 'Unselect All' }}\r\n </button>\r\n }\r\n \r\n <!-- Cancel button -->\r\n <button kendoButton\r\n (click)=\"$event.stopPropagation(); close.emit(settings().cancelReturnValue)\">\r\n\r\n {{ settings().cancelButtonText ?? 'Cancel' }}\r\n </button>\r\n\r\n <!-- Ok button -->\r\n <button kendoButton themeColor=\"primary\"\r\n [disabled]=\"selectedUsers().length === 0 && selectedGroups().length === 0\"\r\n (click)=\"$event.stopPropagation(); close.emit(returnValue())\">\r\n\r\n {{ settings().okButtonText ?? 'Ok' }}\r\n </button>\r\n </div>\r\n </kendo-dialog-actions>\r\n</kendo-dialog>","import { Component, inject, input, computed, signal, Signal, model, output } from '@angular/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\nimport { of, switchMap } from 'rxjs';\r\n\r\nimport { ActiveDirectoryService, CleavelandPriceUser, Group } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { SharePointService, PhotoItem } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport { userIcon, usersIcon, questionCircleIcon } from '@progress/kendo-svg-icons';\r\nimport { KENDO_ICONS } from '@progress/kendo-angular-icons';\r\n\r\nimport { UserFieldDisplayType } from '../../model/user-field-display-type';\r\nimport { IUserChooserSettings } from '../../model/user-chooser-settings-interface';\r\nimport { USER_CHOOSER_DEFAULT_SETTINGS } from '../../model/user-chooser-default-settings';\r\nimport { UserChooserDialogComponent, UserChooserReturnValue } from '../user-chooser-dialog/user-chooser-dialog';\r\n\r\n@Component({\r\n selector: 'user-field',\r\n imports: [\r\n NgClass,\r\n KENDO_ICONS,\r\n UserChooserDialogComponent\r\n ],\r\n templateUrl: './user-field.html',\r\n styleUrl: './user-field.scss',\r\n})\r\nexport class UserFieldComponent {\r\n #services = {\r\n ad: inject(ActiveDirectoryService),\r\n sp: inject(SharePointService)\r\n };\r\n\r\n icons = {\r\n user: userIcon,\r\n group: usersIcon,\r\n unknown: questionCircleIcon\r\n };\r\n\r\n rejectedInvalidAccountNames = output<{users: string[], groups: string[]}>();\r\n userChooserClosed = output<UserChooserReturnValue>();\r\n\r\n showUserChooser = signal(false); // Controls the visibility of the user chooser dialog\r\n \r\n //#region Inputs\r\n selectedUsers = model<string[]>([]);\r\n selectedGroups = model<string[]>([]);\r\n\r\n //#region Either passed in or pulled from the service\r\n users = input<CleavelandPriceUser[] | undefined>();\r\n #usersFromService$ = toObservable(this.users)\r\n .pipe(switchMap(users => {\r\n if (users) {\r\n return of(users);\r\n }\r\n\r\n return (this.userChooserSettings().emptyDataPullMode === 'All' || this.userChooserSettings().emptyDataPullMode === 'Users')\r\n ? this.#services.ad.getUsers('NgxLibUserChooser')\r\n : of([]);\r\n }));\r\n resolvedUsers = toSignal(this.#usersFromService$, { initialValue: [] });\r\n\r\n groups = input<Group[] | undefined>();\r\n #groupsFromService$ = toObservable(this.groups)\r\n .pipe(switchMap(groups => {\r\n if (groups) {\r\n return of(groups);\r\n }\r\n\r\n return (this.userChooserSettings().emptyDataPullMode === 'All' || this.userChooserSettings().emptyDataPullMode === 'Groups')\r\n ? this.#services.ad.getGroups('NgxLibUserChooser')\r\n : of([]);\r\n }));\r\n resolvedGroups = toSignal(this.#groupsFromService$, { initialValue: [] });\r\n\r\n photos = input<PhotoItem[] | undefined>();\r\n #photosFromService$ = toObservable(this.photos)\r\n .pipe(switchMap(photos => {\r\n if (photos) {\r\n return of(photos);\r\n }\r\n\r\n return (this.displayPhoto())\r\n ? this.#services.sp.getPhotos()\r\n : of([]);\r\n }));\r\n resolvedPhotos = toSignal(this.#photosFromService$, { initialValue: [] });\r\n //#endregion Either passed in or pulled from the service\r\n \r\n maxItemsToDisplay = input<number>(5);\r\n groupItemsOverMax = input(false);\r\n groupItemsOverMaxText = input<string>('users/groups');\r\n \r\n ignoreInvalidAccountNames = input<boolean>(false);\r\n \r\n displayType = input<UserFieldDisplayType>('PhotoAndDisplayName');\r\n emptyUserNameText = input<string>('Select user...');\r\n \r\n enableUserChooser = input(true);\r\n userChooserSettings = input<IUserChooserSettings>({\r\n ...USER_CHOOSER_DEFAULT_SETTINGS\r\n });\r\n \r\n //#region CSS Classes\r\n wrapperClass = input<string>('wrapper');\r\n emptyUserNameClass = input<string>('empty-user');\r\n validUserTextClass = input<string>('valid-user');\r\n manySelectedClass = input<string>('many-selected');\r\n invalidUserTextClass = input<string>('invalid-user');\r\n photoClass = input<string>('user-photo');\r\n userChooserPhotoClass = input<string>('user-chooser-photo');\r\n userChooserEnabledClass = input<string>('user-chooser-enabled');\r\n userChooserDisabledClass = input<string>('user-chooser-disabled');\r\n //#endregion CSS Classes\r\n\r\n //#endregion Inputs\r\n\r\n //#region Computed Properties\r\n totalItemCount = computed(() => this.userObjects().length + this.groupObjects().length);\r\n\r\n userObjects: Signal<UserObject[]> = computed(() => {\r\n const data: UserObject[] = this.selectedUsers()\r\n .map(accountName => ({\r\n accountName,\r\n label: accountName,\r\n user: this.resolvedUsers().find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase())\r\n }));\r\n\r\n data.forEach(dataItem => {\r\n if (dataItem.user) {\r\n // Photo\r\n dataItem.photo = this.resolvedPhotos().find(photo =>\r\n // Try to match the photo to the user by employee number, account name, or display name\r\n (photo.employeeNumber ?? 0) === +(dataItem.user!.employeeNumber ?? -1) ||\r\n (photo.accountName ?? 'photoaccountname').toLowerCase() === dataItem.user!.sAMAccountName!.toLowerCase() ||\r\n (photo.displayName ?? 'photodisplayname').toLowerCase() === dataItem.user!.displayName?.toLowerCase()\r\n );\r\n\r\n // Label\r\n switch (this.displayType()) {\r\n case 'PhotoAndDisplayName':\r\n case 'DisplayName':\r\n dataItem.label = dataItem.user!.displayName || dataItem.accountName;\r\n break;\r\n case 'Username':\r\n case 'PhotoAndUsername':\r\n dataItem.label = dataItem.accountName;\r\n break;\r\n case 'DisplayNameAndUsername':\r\n case 'PhotoDisplayNameAndUsername':\r\n dataItem.label = `${dataItem.user!.displayName} (${dataItem.accountName})`;\r\n break;\r\n };\r\n }\r\n });\r\n\r\n return data.filter(dataItem => this.ignoreInvalidAccountNames() ? !!dataItem.user : true);\r\n });\r\n\r\n groupObjects: Signal<GroupObject[]> = computed(() => {\r\n const data: GroupObject[] = this.selectedGroups()\r\n .map(accountName => ({\r\n accountName,\r\n label: accountName,\r\n group: this.resolvedGroups().find(g => g.sAMAccountName.toLowerCase() === accountName.toLowerCase())\r\n }));\r\n\r\n data.forEach(dataItem => {\r\n if (dataItem.group) {\r\n // Label\r\n dataItem.label = dataItem.group.displayName ?? dataItem.group.name ?? dataItem.accountName;\r\n }\r\n });\r\n\r\n return data.filter(dataItem => this.ignoreInvalidAccountNames() ? !!dataItem.group : true);\r\n });\r\n\r\n displayPhoto = computed(() => ['Photo', 'PhotoAndDisplayName', 'PhotoAndUsername', 'PhotoDisplayNameAndUsername']\r\n .includes(this.displayType()));\r\n displayName = computed(() => this.displayType() !== 'Photo');\r\n //#endregion Computed Properties\r\n\r\n onUserChooserClosed(event: UserChooserReturnValue | any) {\r\n this.userChooserClosed.emit(event);\r\n\r\n if (event === this.userChooserSettings().cancelReturnValue) {\r\n // console.log('User chooser canceled'); // debug\r\n } else {\r\n \r\n this.selectedUsers.set(this.userChooserSettings().returnType === 'Object' ?\r\n (event.users as CleavelandPriceUser[]).map(u => u.sAMAccountName) :\r\n event.users as string[]);\r\n\r\n this.selectedGroups.set(this.userChooserSettings().returnType === 'Object' ?\r\n (event.groups as Group[]).map(g => g.sAMAccountName) :\r\n event.groups as string[]);\r\n\r\n if (event.invalidUsers.length > 0 || event.invalidGroups.length > 0) {\r\n this.rejectedInvalidAccountNames.emit({\r\n users: event.invalidUsers,\r\n groups: event.invalidGroups\r\n });\r\n }\r\n }\r\n\r\n this.showUserChooser.set(false);\r\n }\r\n}\r\n\r\ntype UserObject = {\r\n accountName: string;\r\n user?: CleavelandPriceUser;\r\n photo?: PhotoItem;\r\n label?: string;\r\n}\r\n\r\ntype GroupObject = {\r\n accountName: string;\r\n group?: Group;\r\n label?: string;\r\n}"," <div (click)=\"enableUserChooser() && showUserChooser.set(true)\"\r\n [ngClass]=\"[wrapperClass(), enableUserChooser() ? userChooserEnabledClass() : userChooserDisabledClass()]\">\r\n\r\n @if (userObjects().length === 0 && groupObjects().length === 0) {\r\n <!-- No data provided, just present an empty user/group chooser -->\r\n <div [ngClass]=\"emptyUserNameClass()\">\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ emptyUserNameText() }}\r\n </div>\r\n }\r\n @else if (totalItemCount() > maxItemsToDisplay()) {\r\n <!-- Too many items to display, just show a count -->\r\n <div [ngClass]=\"manySelectedClass()\">\r\n @if (groupObjects().length === 0) {\r\n <!-- We only have Users -->\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ totalItemCount() }} users\r\n } @else if (groupObjects().length === 0) {\r\n <!-- We only have Groups -->\r\n <kendo-svg-icon [icon]=\"icons.group\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ totalItemCount() }} groups\r\n } @else {\r\n <!-- We have both Users and Groups -->\r\n @if (groupItemsOverMax()) {\r\n <!-- Lump users/groups together -->\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ totalItemCount() }} {{ groupItemsOverMaxText() }}\r\n } @else {\r\n <!-- List how many users/groups separately -->\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ userObjects().length }} users\r\n <kendo-svg-icon [icon]=\"icons.group\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ groupObjects().length }} groups\r\n }\r\n }\r\n </div>\r\n\r\n }\r\n @else {\r\n <!-- Display the users/groups that were passed in -->\r\n\r\n <!-- Users -->\r\n @for (userObject of userObjects(); track userObject.accountName) {\r\n <div class=\"user-identity\" [class.with-photo]=\"displayPhoto()\">\r\n \r\n @if (displayPhoto()) {\r\n @if (userObject.photo) {\r\n <img [src]=\"userObject.photo!.encodedAbsUrl\" [ngClass]=\"photoClass()\" />\r\n } @else {\r\n @if (userObject.user) {\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n } @else {\r\n <kendo-svg-icon [icon]=\"icons.unknown\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n }\r\n }\r\n }\r\n \r\n @if (displayName()) {\r\n <div id=\"name\"\r\n [ngClass]=\"userObject.user ? validUserTextClass() : invalidUserTextClass()\"\r\n [innerText]=\"userObject.label\">\r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n <!-- Groups -->\r\n @for (groupObject of groupObjects(); track groupObject.accountName) {\r\n <div class=\"user-identity\" [class.with-photo]=\"displayPhoto()\">\r\n \r\n @if (displayPhoto()) {\r\n @if (groupObject.group) {\r\n <kendo-svg-icon [icon]=\"icons.group\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n } @else {\r\n <kendo-svg-icon [icon]=\"icons.unknown \" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n }\r\n }\r\n \r\n @if (displayName()) {\r\n <div id=\"name\"\r\n [ngClass]=\"groupObject.group ? validUserTextClass() : invalidUserTextClass()\"\r\n [innerText]=\"groupObject.label\">\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n\r\n</div>\r\n\r\n<!-- Display User Chooser when the user clicks the component -->\r\n@if (showUserChooser()) {\r\n <!--\r\n TODO\r\n If we want to ensure that only valid users/groups are passed in...\r\n [selectedUsers]=\"data().filter(i => i.userOrGroup).map(i => i.accountName!)\"\r\n -->\r\n\r\n <user-chooser-dialog [users]=\"resolvedUsers()\" [groups]=\"resolvedGroups()\" [photos]=\"resolvedPhotos()\"\r\n [settings]=\"userChooserSettings()\"\r\n [photoClass]=\"userChooserPhotoClass()\"\r\n [selectedUsers]=\"selectedUsers()\" [selectedGroups]=\"selectedGroups()\"\r\n (close)=\"onUserChooserClosed($event)\" />\r\n}","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { ActiveDirectoryServiceOptions, ActiveDirectoryServiceOptionsToken } from '@cleavelandprice/ngx-lib/active-directory';\r\n\r\nimport { IconsModule, SVGIconModule } from '@progress/kendo-angular-icons';\r\nimport { GridModule } from \"@progress/kendo-angular-grid\";\r\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\r\nimport { DialogsModule } from \"@progress/kendo-angular-dialog\";\r\nimport { InputsModule } from '@progress/kendo-angular-inputs';\r\nimport { LabelModule } from '@progress/kendo-angular-label';\r\nimport { TabStripModule } from '@progress/kendo-angular-layout';\r\n\r\n\r\nimport { UserChooserDialogComponent } from './components/user-chooser-dialog/user-chooser-dialog';\r\nimport { UserChooserList } from './components/user-chooser-list/user-chooser-list';\r\nimport { UserFieldComponent } from './components/user-field/user-field';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n\r\n IconsModule, SVGIconModule,\r\n GridModule,\r\n ButtonsModule,\r\n DialogsModule,\r\n InputsModule,\r\n LabelModule,\r\n TabStripModule,\r\n\r\n UserChooserDialogComponent,\r\n UserChooserList,\r\n UserFieldComponent\r\n ],\r\n exports: [\r\n UserChooserDialogComponent,\r\n UserChooserList,\r\n UserFieldComponent\r\n ]\r\n})\r\nexport class KendoActiveDirectoryModule {\r\n static forRoot(config: ActiveDirectoryServiceOptions): ModuleWithProviders<KendoActiveDirectoryModule> {\r\n return {\r\n ngModule: KendoActiveDirectoryModule,\r\n providers: [\r\n {\r\n provide: ActiveDirectoryServiceOptionsToken,\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: KendoActiveDirectoryModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'KendoActiveDirectoryModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './kendo-active-directory.api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-kendo.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/model/user-chooser-default-settings.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-chooser-list/user-chooser-list.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-chooser-list/user-chooser-list.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-chooser-dialog/user-chooser-dialog.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-chooser-dialog/user-chooser-dialog.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-field/user-field.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/components/user-field/user-field.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/kendo-active-directory.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/kendo/src/cleavelandprice-ngx-lib-active-directory-kendo.ts"],"sourcesContent":["import { IUserChooserColumn } from \"./user-chooser-column-interface\";\r\nimport { IUserChooserSettings } from \"./user-chooser-settings-interface\";\r\nimport { SelectableSettings } from \"@progress/kendo-angular-grid\";\r\n\r\nexport const USER_CHOOSER_DEFAULT_SETTINGS = {\r\n usersTitle: 'Select User(s)',\r\n groupsTitle: 'Select Group(s)',\r\n displayMultiSelectInstructions: true,\r\n displayHideUnselectedToggle: true,\r\n displaySelectedCount: true,\r\n filterMode: 'Global' as 'Column' | 'Global' | 'Both' | 'None',\r\n groupable: true,\r\n sortable: true,\r\n pageable: false,\r\n pageSize: 150,\r\n height: 600,\r\n additionalWidth: 500,\r\n displayPhotos: true,\r\n photoColumnWidth: 40,\r\n returnType: 'AccountName' as 'AccountName' | 'Object',\r\n cancelReturnValue: 'cancel',\r\n okButtonText: 'Ok',\r\n cancelButtonText: 'Cancel',\r\n unselectButtonText: 'Unselect All',\r\n emptyDataPullMode: 'Users' as 'All' | 'Users' | 'Groups',\r\n selectionSettings: {\r\n checkboxOnly: false,\r\n mode: 'multiple' as 'single' | 'multiple',\r\n enabled: true,\r\n drag: true,\r\n cell: false,\r\n metaKeyMultiSelect: false\r\n } as SelectableSettings,\r\n userColumns: [\r\n { field: 'employeeNumber', title: 'Emp #', width: 120, columnFilterable: true, globalFilterable: true, sortable: true, groupable: true, hidden: true },\r\n { field: 'displayName', title: 'Display Name', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: false },\r\n { field: 'department', title: 'Department', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: true },\r\n { field: 'title', title: 'Title', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: true },\r\n { field: 'telephoneNumber', title: 'Phone', width: 120, columnFilterable: true, globalFilterable: false, sortable: true, groupable: false },\r\n { field: 'sAMAccountName', title: 'Username', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: false, hidden: true }\r\n ] as IUserChooserColumn[],\r\n groupColumns: [\r\n { field: 'name', title: 'Name', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: false },\r\n { field: 'sAMAccountName', title: 'Username', width: 200, columnFilterable: true, globalFilterable: true, sortable: true, groupable: false, hidden: false }\r\n ]\r\n} as IUserChooserSettings","import { ChangeDetectorRef, Component, afterNextRender, computed, debounced, effect, inject, input, model, OnDestroy, signal, viewChild, ViewEncapsulation } from '@angular/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\n\r\nimport { of, Subscription, switchMap } from 'rxjs';\r\n\r\nimport { CleavelandPriceUser, Group } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport { KENDO_GRID, GridComponent, RowArgs, RowClassArgs } from \"@progress/kendo-angular-grid\";\r\nimport { process } from '@progress/kendo-data-query';\r\n\r\nimport { IUserChooserSettings } from '../../model/user-chooser-settings-interface';\r\nimport { USER_CHOOSER_DEFAULT_SETTINGS } from '../../model/user-chooser-default-settings';\r\n\r\n@Component({\r\n selector: 'user-chooser-list',\r\n imports: [\r\n NgClass,\r\n KENDO_GRID\r\n ],\r\n templateUrl: './user-chooser-list.html',\r\n styleUrl: './user-chooser-list.scss',\r\n encapsulation: ViewEncapsulation.None // Required for rowClassCallback\r\n})\r\nexport class UserChooserList implements OnDestroy {\r\n #sp = inject(SharePointService);\r\n grid = viewChild<GridComponent>(GridComponent);\r\n settings = input<IUserChooserSettings>({\r\n ...USER_CHOOSER_DEFAULT_SETTINGS\r\n });\r\n\r\n data = input<(CleavelandPriceUser | Group)[]>([]);\r\n photoClass = input<string>('user-chooser-photo');\r\n selectedAccountNames = model<string[]>([]);\r\n filter = input<string>('');\r\n #debouncedFilter = debounced(() => this.filter(), 300);\r\n #filteredData = signal<(CleavelandPriceUser | Group)[]>([]);\r\n hideUnselected = input(false);\r\n mode = computed(() => this.data().at(0)?.hasOwnProperty('givenName') ? 'users' : 'groups');\r\n\r\n //#region Either passed in or pulled from the service\r\n photos = input<PhotoItem[] | undefined>();\r\n #photosFromService$ = toObservable(this.photos)\r\n .pipe(switchMap(photos => {\r\n if (photos) {\r\n return of(photos);\r\n }\r\n\r\n return (this.data().at(0)?.hasOwnProperty('givenName'))\r\n ? this.#sp.getPhotos()\r\n : of([]);\r\n }));\r\n #resolvedPhotos = toSignal(this.#photosFromService$, { initialValue: [] });\r\n //#endregion Either passed in or pulled from the service\r\n\r\n selectedCount = signal<number>(0);\r\n \r\n gridData = computed(() =>\r\n this.#debouncedFilter.value() ?\r\n this.#filteredData() :\r\n this.data()\r\n .filter(data =>\r\n !this.hideUnselected() ||\r\n this.selectedAccountNames()\r\n .some(item => item.toLowerCase() === data.sAMAccountName!.toLowerCase())\r\n )\r\n );\r\n\r\n #cdr = inject(ChangeDetectorRef);\r\n\r\n selectionChangeSubscription?: Subscription;\r\n\r\n constructor() {\r\n effect(() => {\r\n const filterableFields = this.settings().userColumns!\r\n .filter(c => c.globalFilterable ?? true)\r\n .map(c => c.field)\r\n ?? [];\r\n\r\n const filters = filterableFields.map(field => ({\r\n field: field,\r\n operator: 'contains',\r\n value: this.#debouncedFilter.value()\r\n }));\r\n\r\n this.#filteredData.set(\r\n process(\r\n //this.users(),\r\n this.data(),\r\n {\r\n filter: filters.length > 0 ? { logic: 'or', filters: filters } : undefined\r\n })\r\n .data\r\n .filter(data => !this.hideUnselected() || this.selectedAccountNames().some(s => s.toLowerCase() === data.sAMAccountName!.toLowerCase()))\r\n );\r\n });\r\n\r\n afterNextRender(() => {\r\n this.selectedCount.set(this.grid()?.selectionService.selected?.length ?? 0);\r\n\r\n this.selectionChangeSubscription = this.grid()?.selectionService.changes.subscribe((event) => {\r\n this.selectedCount.set(this.grid()?.selectionService.selected?.length ?? 0);\r\n });\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.selectionChangeSubscription?.unsubscribe();\r\n }\r\n \r\n photo(user: CleavelandPriceUser): PhotoItem | null {\r\n return this.#resolvedPhotos()\r\n .find(p => p.accountName?.toLowerCase() === user.sAMAccountName!.toLowerCase())\r\n ?? null;\r\n }\r\n\r\n // Function to generate a case-insensitive key\r\n caseInsensitiveSelectBy = (context: RowArgs): string => {\r\n // Convert to string and then to lowercase to ensure consistency.\r\n return String(context.dataItem.sAMAccountName).toLowerCase();\r\n };\r\n\r\n unselectAll() {\r\n this.selectedAccountNames.set([]);\r\n this.#cdr.detectChanges();\r\n this.grid()?.selectionService.changes.emit({selectedRows: [], deselectedRows: [], shiftKey: false, ctrlKey: false});\r\n }\r\n\r\n rowClassCallback(context: RowClassArgs): any {\r\n if (this.mode() === 'groups') {\r\n return {\r\n 'disabled': false\r\n };\r\n } \r\n\r\n // Return an object with the class name as key and a condition as value\r\n return {\r\n 'disabled': !(context.dataItem as CleavelandPriceUser).enabled\r\n };\r\n }\r\n}","<kendo-grid #grid [kendoGridBinding]=\"gridData()\"\r\n [rowClass]=\"rowClassCallback.bind(this)\"\r\n [filterable]=\"settings().filterMode === 'Column' || settings().filterMode === 'Both'\"\r\n [groupable]=\"settings().groupable!\"\r\n [sortable]=\"settings().sortable!\"\r\n [pageSize]=\"settings().pageable! ? settings().pageSize! : 0\"\r\n [pageable]=\"settings().pageable!\"\r\n [height]=\"settings().height!\"\r\n [selectable]=\"settings().selectionSettings!\"\r\n [kendoGridSelectBy]=\"caseInsensitiveSelectBy\"\r\n [(selectedKeys)]=\"selectedAccountNames\">\r\n \r\n <!-- Checkbox is we are in checkbox selection mode -->\r\n @if (settings().selectionSettings?.checkboxOnly ?? false) {\r\n <kendo-grid-column [width]=\"30\">\r\n <ng-template kendoGridCellTemplate let-rowIndex=\"rowIndex\">\r\n <kendo-checkbox [kendoGridSelectionCheckbox]=\"rowIndex\"></kendo-checkbox>\r\n </ng-template>\r\n </kendo-grid-column>\r\n }\r\n\r\n @if (mode() === 'users') {\r\n <!-- Optional user photo -->\r\n @if (settings().displayPhotos ?? false) {\r\n <kendo-grid-column [width]=\"settings().photoColumnWidth ?? 40\">\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n @if (photo(dataItem)) {\r\n <img [src]=\"photo(dataItem)!.encodedAbsUrl\" [ngClass]=\"photoClass()\" />\r\n }\r\n </ng-template>\r\n </kendo-grid-column>\r\n }\r\n \r\n <!-- Columns -->\r\n @for (column of settings().userColumns!; track column.field) {\r\n <kendo-grid-column [field]=\"column.field\" [title]=\"column.title\"\r\n [width]=\"column.width ?? 0\"\r\n [hidden]=\"column.hidden ?? false\"\r\n [filterable]=\"column.columnFilterable ?? true\"\r\n [sortable]=\"column.sortable ?? true\"\r\n [groupable]=\"column.groupable ?? true\" />\r\n }\r\n } @else if (mode() === 'groups') {\r\n <!-- Columns -->\r\n @for (column of settings().groupColumns!; track column.field) {\r\n <kendo-grid-column [field]=\"column.field\" [title]=\"column.title\"\r\n [width]=\"column.width ?? 0\"\r\n [hidden]=\"column.hidden ?? false\"\r\n [filterable]=\"column.columnFilterable ?? true\"\r\n [sortable]=\"column.sortable ?? true\"\r\n [groupable]=\"column.groupable ?? true\" />\r\n }\r\n }\r\n</kendo-grid>","import { Component, input, output, signal, computed, model, viewChild, inject } from '@angular/core';\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\nimport { of, switchMap } from 'rxjs';\r\n\r\nimport { ActiveDirectoryService, CleavelandPriceUser, Group } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport { KENDO_BUTTONS } from '@progress/kendo-angular-buttons';\r\nimport { KENDO_DIALOGS } from \"@progress/kendo-angular-dialog\";\r\nimport { KENDO_INPUTS } from '@progress/kendo-angular-inputs';\r\nimport { KENDO_LABELS } from '@progress/kendo-angular-label';\r\nimport { KENDO_TABSTRIP, SelectEvent } from '@progress/kendo-angular-layout';\r\nimport { KENDO_ICONS } from '@progress/kendo-angular-icons';\r\nimport { filterClearIcon } from '@progress/kendo-svg-icons';\r\n\r\nimport { IUserChooserSettings } from '../../model/user-chooser-settings-interface';\r\nimport { USER_CHOOSER_DEFAULT_SETTINGS } from '../../model/user-chooser-default-settings';\r\nimport { UserChooserList } from '../user-chooser-list/user-chooser-list';\r\n\r\n@Component({\r\n selector: 'user-chooser-dialog',\r\n imports: [\r\n KENDO_DIALOGS,\r\n KENDO_BUTTONS,\r\n KENDO_INPUTS,\r\n KENDO_LABELS,\r\n KENDO_TABSTRIP,\r\n KENDO_ICONS,\r\n UserChooserList\r\n ],\r\n templateUrl: './user-chooser-dialog.html',\r\n styleUrl: './user-chooser-dialog.scss',\r\n})\r\nexport class UserChooserDialogComponent {\r\n #services = {\r\n ad: inject(ActiveDirectoryService),\r\n sp: inject(SharePointService)\r\n };\r\n \r\n userChooserList = viewChild<UserChooserList>('userChooserList');\r\n groupChooserList = viewChild<UserChooserList>('groupChooserList');\r\n\r\n settings = input<IUserChooserSettings>({\r\n ...USER_CHOOSER_DEFAULT_SETTINGS\r\n });\r\n\r\n //#region Either passed in or pulled from the service\r\n users = input<CleavelandPriceUser[] | undefined>();\r\n #usersFromService$ = toObservable(this.users)\r\n .pipe(switchMap(users => {\r\n if (users) {\r\n return of(users);\r\n }\r\n\r\n return (this.settings().emptyDataPullMode === 'All' || this.settings().emptyDataPullMode === 'Users')\r\n ? this.#services.ad.getUsers('NgxLibUserChooser')\r\n : of([]);\r\n }));\r\n resolvedUsers = toSignal(this.#usersFromService$, { initialValue: [] });\r\n\r\n groups = input<Group[] | undefined>();\r\n #groupsFromService$ = toObservable(this.groups)\r\n .pipe(switchMap(groups => {\r\n if (groups) {\r\n return of(groups);\r\n }\r\n\r\n return (this.settings().emptyDataPullMode === 'All' || this.settings().emptyDataPullMode === 'Groups')\r\n ? this.#services.ad.getGroups('NgxLibUserChooser')\r\n : of([]);\r\n }));\r\n resolvedGroups = toSignal(this.#groupsFromService$, { initialValue: [] });\r\n\r\n photos = input<PhotoItem[] | undefined>();\r\n #photosFromService$ = toObservable(this.photos)\r\n .pipe(switchMap(photos => {\r\n if (photos) {\r\n return of(photos);\r\n }\r\n\r\n return (this.settings().emptyDataPullMode === 'All' || this.settings().emptyDataPullMode === 'Users')\r\n ? this.#services.sp.getPhotos()\r\n : of([]);\r\n }));\r\n resolvedPhotos = toSignal(this.#photosFromService$, { initialValue: [] });\r\n //#endregion Either passed in or pulled from the service\r\n\r\n photoClass = input<string>('user-chooser-photo');\r\n\r\n selectedUsers = model<string[]>([]);\r\n selectedGroups = model<string[]>([]);\r\n\r\n hideUnselected = signal(false);\r\n \r\n returnValue = computed<UserChooserReturnValue>(() => {\r\n const users = \r\n this.settings().returnType === 'Object' ?\r\n // User objects\r\n this.resolvedUsers().filter(u => this.selectedUsers().some(s => s.toLowerCase() === u.sAMAccountName.toLowerCase())) :\r\n // Account names - reject any invalid account names that may have been passed in\r\n this.resolvedUsers().filter(u => this.selectedUsers().some(s => s.toLowerCase() === u.sAMAccountName.toLowerCase())).map(u => u.sAMAccountName.toLowerCase());\r\n\r\n const groups = \r\n this.settings().returnType === 'Object' ?\r\n // Group objects\r\n this.resolvedGroups().filter(u => this.selectedGroups().some(s => s.toLowerCase() === u.sAMAccountName.toLowerCase())) :\r\n // Account names - reject any invalid account names that may have been passed in\r\n this.resolvedGroups().filter(u => this.selectedGroups().some(s => s.toLowerCase() === u.sAMAccountName.toLowerCase())).map(u => u.sAMAccountName.toLowerCase());\r\n\r\n const validUsers = [\r\n ...(\r\n this.settings().returnType === 'Object' ?\r\n (users as CleavelandPriceUser[]).map(u => u.sAMAccountName.toLowerCase()) :\r\n (users as string[])\r\n )\r\n ];\r\n const invalidUsers = this.selectedUsers().filter(s => !validUsers.some(u => u.toLowerCase() === s.toLowerCase()));\r\n\r\n const validGroups = [\r\n ...(\r\n this.settings().returnType === 'Object' ?\r\n (groups as Group[]).map(u => u.sAMAccountName.toLowerCase()) :\r\n (groups as string[])\r\n )\r\n ];\r\n const invalidGroups = this.selectedGroups().filter(s => !validGroups.some(u => u.toLowerCase() === s.toLowerCase()));\r\n\r\n return { users, groups, invalidUsers, invalidGroups };\r\n });\r\n\r\n multiSelectInstructions = computed(() => {\r\n if (this.settings().selectionSettings?.mode === 'single' || !this.settings().displayMultiSelectInstructions) {\r\n return '';\r\n }\r\n\r\n const instructions: string[] = [];\r\n\r\n if (this.settings().selectionSettings?.metaKeyMultiSelect) {\r\n instructions.push('<span class=\"bold\">[CTRL/SHIFT + Click]</span>');\r\n }\r\n\r\n if (this.settings().selectionSettings?.drag) {\r\n instructions.push('<span class=\"bold\">[Click and drag]</span>');\r\n }\r\n\r\n if (instructions.length === 0) {\r\n return '';\r\n }\r\n\r\n return `${instructions.join(' or ')} to select multiple`;\r\n });\r\n \r\n close = output<any>();\r\n filter = signal<string>('');\r\n\r\n filterClearIcon = filterClearIcon;\r\n\r\n dialogWidth = computed(() =>\r\n this.settings().userColumns!\r\n .filter(c => !c.hidden)\r\n .reduce((total, column) => total + (column.width ?? 0), 0)\r\n + (this.settings().additionalWidth ?? 0)\r\n );\r\n\r\n selectedTabIndex = signal(0);\r\n mode = computed(() => this.resolvedUsers().length > 0 && this.resolvedGroups().length > 0 ? 'tabs' : 'standalone');\r\n\r\n title = computed(() => {\r\n return (\r\n (this.mode() === 'tabs' && this.selectedTabIndex() === 0) ||\r\n (this.mode() === 'standalone' && this.resolvedUsers().length > 0)\r\n ) ?\r\n this.settings().usersTitle ?? 'Select User(s)' :\r\n this.settings().groupsTitle ?? 'Select Group(s)';\r\n });\r\n\r\n unselectAll() {\r\n const list = this.selectedTabIndex() === 0 ?\r\n this.userChooserList :\r\n this.groupChooserList;\r\n\r\n list()?.unselectAll();\r\n }\r\n\r\n onTabSelect(e: SelectEvent) {\r\n this.selectedTabIndex.set(e.index);\r\n }\r\n}\r\n\r\nexport type UserChooserReturnValue = {\r\n users: CleavelandPriceUser[] | string[];\r\n groups: Group[] | string[];\r\n invalidUsers: string[];\r\n invalidGroups: string[];\r\n};","<kendo-dialog [width]=\"dialogWidth()\" (close)=\"close.emit('cancel')\">\r\n <!-- Title -->\r\n <kendo-dialog-titlebar>\r\n <div id=\"title\" class=\"bold\">\r\n {{ title() }}\r\n </div>\r\n @if (multiSelectInstructions()) {\r\n <div id=\"multi-select-instructions\" [innerHTML]=\"multiSelectInstructions()\">\r\n </div>\r\n }\r\n </kendo-dialog-titlebar>\r\n\r\n <!-- Global filter -->\r\n @if (settings().filterMode === 'Global' || settings().filterMode === 'Both') {\r\n <kendo-textbox id=\"filter\" [(value)]=\"filter\" placeholder=\"Type here to filter employee list...\">\r\n @if (filter()) {\r\n <ng-template kendoTextBoxSuffixTemplate>\r\n <kendo-svgicon [icon]=\"filterClearIcon\" class=\"clear-filter\" (click)=\"filter.set('')\" />\r\n </ng-template>\r\n }\r\n </kendo-textbox>\r\n }\r\n\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n <!-- Groups AND Users, so we need tabs -->\r\n <kendo-tabstrip [keepTabContent]=\"true\" (tabSelect)=\"onTabSelect($event)\">\r\n <!-- Users tab -->\r\n <kendo-tabstrip-tab title=\"Users\" [selected]=\"true\" #usersTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n\r\n <!-- Groups tab -->\r\n <kendo-tabstrip-tab title=\"Groups\" #groupsTab>\r\n <ng-template kendoTabContent>\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\" />\r\n </ng-template>\r\n </kendo-tabstrip-tab>\r\n </kendo-tabstrip>\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n <!-- Users only -->\r\n <user-chooser-list #userChooserList [data]=\"resolvedUsers()\" [photos]=\"resolvedPhotos()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedUsers\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedUsersCount.set($event)\" -->\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n <!-- Groups only -->\r\n <user-chooser-list #groupChooserList [data]=\"resolvedGroups()\" [settings]=\"settings()\"\r\n [photoClass]=\"photoClass()\"\r\n [(selectedAccountNames)]=\"selectedGroups\"\r\n [hideUnselected]=\"hideUnselected()\"\r\n [filter]=\"filter()\"\r\n /> <!-- (selectedCountChange)=\"selectedGroupsCount.set($event)\" -->\r\n }\r\n\r\n <kendo-dialog-actions>\r\n <!-- Hide unselected toggle -->\r\n <div id=\"hide-toggle\">\r\n @if (\r\n settings().displayHideUnselectedToggle &&\r\n (selectedUsers().length > 0 || selectedGroups().length > 0))\r\n {\r\n <kendo-label [for]=\"hideunselected\">Hide Unselected </kendo-label>\r\n <kendo-switch #hideunselected (valueChange)=\"hideUnselected.set($event)\" onLabel=\"'Yes'\" offLabel=\"'No'\" />\r\n }\r\n </div>\r\n\r\n <!-- Selected user count -->\r\n <div id=\"selected-count\">\r\n @if (settings().displaySelectedCount) {\r\n @if (resolvedUsers().length > 0 && resolvedGroups().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s), {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n\r\n }\r\n @else if (resolvedUsers().length > 0) {\r\n {{ userChooserList()?.selectedCount() }} user(s) selected\r\n }\r\n @else if (resolvedGroups().length > 0) {\r\n {{ groupChooserList()?.selectedCount() }} group(s) selected\r\n }\r\n }\r\n </div>\r\n\r\n <div id=\"buttons\">\r\n <!-- Unselect All button -->\r\n @if (\r\n (selectedTabIndex() === 0 && selectedUsers().length > 0) ||\r\n (selectedTabIndex() === 1 && selectedGroups().length > 0))\r\n {\r\n <button type=\"button\" kendoButton\r\n (click)=\"unselectAll()\">\r\n \r\n {{ settings().unselectButtonText ?? 'Unselect All' }}\r\n </button>\r\n }\r\n \r\n <!-- Cancel button -->\r\n <button type=\"button\" kendoButton\r\n (click)=\"close.emit(settings().cancelReturnValue)\">\r\n\r\n {{ settings().cancelButtonText ?? 'Cancel' }}\r\n </button>\r\n\r\n <!-- Ok button -->\r\n <button type=\"button\" kendoButton themeColor=\"primary\"\r\n [disabled]=\"selectedUsers().length === 0 && selectedGroups().length === 0\"\r\n (click)=\"close.emit(returnValue())\">\r\n\r\n {{ settings().okButtonText ?? 'Ok' }}\r\n </button>\r\n </div>\r\n </kendo-dialog-actions>\r\n</kendo-dialog>","import { Component, inject, input, computed, signal, Signal, model, output } from '@angular/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\nimport { of, switchMap } from 'rxjs';\r\n\r\nimport { ActiveDirectoryService, CleavelandPriceUser, Group } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { SharePointService, PhotoItem } from '@cleavelandprice/ngx-lib/sharepoint';\r\n\r\nimport { userIcon, usersIcon, questionCircleIcon } from '@progress/kendo-svg-icons';\r\nimport { KENDO_ICONS } from '@progress/kendo-angular-icons';\r\n\r\nimport { UserFieldDisplayType } from '../../model/user-field-display-type';\r\nimport { IUserChooserSettings } from '../../model/user-chooser-settings-interface';\r\nimport { USER_CHOOSER_DEFAULT_SETTINGS } from '../../model/user-chooser-default-settings';\r\nimport { UserChooserDialogComponent, UserChooserReturnValue } from '../user-chooser-dialog/user-chooser-dialog';\r\n\r\n@Component({\r\n selector: 'user-field',\r\n imports: [\r\n NgClass,\r\n KENDO_ICONS,\r\n UserChooserDialogComponent\r\n ],\r\n templateUrl: './user-field.html',\r\n styleUrl: './user-field.scss',\r\n})\r\nexport class UserFieldComponent {\r\n #services = {\r\n ad: inject(ActiveDirectoryService),\r\n sp: inject(SharePointService)\r\n };\r\n\r\n icons = {\r\n user: userIcon,\r\n group: usersIcon,\r\n unknown: questionCircleIcon\r\n };\r\n\r\n rejectedInvalidAccountNames = output<{users: string[], groups: string[]}>();\r\n userChooserClosed = output<UserChooserReturnValue>();\r\n\r\n showUserChooser = signal(false); // Controls the visibility of the user chooser dialog\r\n \r\n //#region Inputs\r\n selectedUsers = model<string[]>([]);\r\n selectedGroups = model<string[]>([]);\r\n\r\n //#region Either passed in or pulled from the service\r\n users = input<CleavelandPriceUser[] | undefined>();\r\n #usersFromService$ = toObservable(this.users)\r\n .pipe(switchMap(users => {\r\n if (users) {\r\n return of(users);\r\n }\r\n\r\n return (this.userChooserSettings().emptyDataPullMode === 'All' || this.userChooserSettings().emptyDataPullMode === 'Users')\r\n ? this.#services.ad.getUsers('NgxLibUserChooser')\r\n : of([]);\r\n }));\r\n resolvedUsers = toSignal(this.#usersFromService$, { initialValue: [] });\r\n\r\n groups = input<Group[] | undefined>();\r\n #groupsFromService$ = toObservable(this.groups)\r\n .pipe(switchMap(groups => {\r\n if (groups) {\r\n return of(groups);\r\n }\r\n\r\n return (this.userChooserSettings().emptyDataPullMode === 'All' || this.userChooserSettings().emptyDataPullMode === 'Groups')\r\n ? this.#services.ad.getGroups('NgxLibUserChooser')\r\n : of([]);\r\n }));\r\n resolvedGroups = toSignal(this.#groupsFromService$, { initialValue: [] });\r\n\r\n photos = input<PhotoItem[] | undefined>();\r\n #photosFromService$ = toObservable(this.photos)\r\n .pipe(switchMap(photos => {\r\n if (photos) {\r\n return of(photos);\r\n }\r\n\r\n return (this.displayPhoto())\r\n ? this.#services.sp.getPhotos()\r\n : of([]);\r\n }));\r\n resolvedPhotos = toSignal(this.#photosFromService$, { initialValue: [] });\r\n //#endregion Either passed in or pulled from the service\r\n \r\n maxItemsToDisplay = input<number>(5);\r\n groupItemsOverMax = input(false);\r\n groupItemsOverMaxText = input<string>('users/groups');\r\n \r\n ignoreInvalidAccountNames = input<boolean>(false);\r\n \r\n displayType = input<UserFieldDisplayType>('PhotoAndDisplayName');\r\n emptyUserNameText = input<string>('Select user...');\r\n \r\n enableUserChooser = input(true);\r\n userChooserSettings = input<IUserChooserSettings>({\r\n ...USER_CHOOSER_DEFAULT_SETTINGS\r\n });\r\n \r\n //#region CSS Classes\r\n wrapperClass = input<string>('wrapper');\r\n emptyUserNameClass = input<string>('empty-user');\r\n validUserTextClass = input<string>('valid-user');\r\n manySelectedClass = input<string>('many-selected');\r\n invalidUserTextClass = input<string>('invalid-user');\r\n photoClass = input<string>('user-photo');\r\n userChooserPhotoClass = input<string>('user-chooser-photo');\r\n userChooserEnabledClass = input<string>('user-chooser-enabled');\r\n userChooserDisabledClass = input<string>('user-chooser-disabled');\r\n //#endregion CSS Classes\r\n\r\n //#endregion Inputs\r\n\r\n //#region Computed Properties\r\n totalItemCount = computed(() => this.userObjects().length + this.groupObjects().length);\r\n\r\n userObjects: Signal<UserObject[]> = computed(() => {\r\n const data: UserObject[] = this.selectedUsers()\r\n .map(accountName => ({\r\n accountName,\r\n label: accountName,\r\n user: this.resolvedUsers().find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase())\r\n }));\r\n\r\n data.forEach(dataItem => {\r\n if (dataItem.user) {\r\n // Photo\r\n dataItem.photo = this.resolvedPhotos().find(photo =>\r\n // Try to match the photo to the user by employee number, account name, or display name\r\n (photo.employeeNumber ?? 0) === +(dataItem.user!.employeeNumber ?? -1) ||\r\n (photo.accountName ?? 'photoaccountname').toLowerCase() === dataItem.user!.sAMAccountName!.toLowerCase() ||\r\n (photo.displayName ?? 'photodisplayname').toLowerCase() === dataItem.user!.displayName?.toLowerCase()\r\n );\r\n\r\n // Label\r\n switch (this.displayType()) {\r\n case 'PhotoAndDisplayName':\r\n case 'DisplayName':\r\n dataItem.label = dataItem.user!.displayName || dataItem.accountName;\r\n break;\r\n case 'Username':\r\n case 'PhotoAndUsername':\r\n dataItem.label = dataItem.accountName;\r\n break;\r\n case 'DisplayNameAndUsername':\r\n case 'PhotoDisplayNameAndUsername':\r\n dataItem.label = `${dataItem.user!.displayName} (${dataItem.accountName})`;\r\n break;\r\n };\r\n }\r\n });\r\n\r\n return data.filter(dataItem => this.ignoreInvalidAccountNames() ? !!dataItem.user : true);\r\n });\r\n\r\n groupObjects: Signal<GroupObject[]> = computed(() => {\r\n const data: GroupObject[] = this.selectedGroups()\r\n .map(accountName => ({\r\n accountName,\r\n label: accountName,\r\n group: this.resolvedGroups().find(g => g.sAMAccountName.toLowerCase() === accountName.toLowerCase())\r\n }));\r\n\r\n data.forEach(dataItem => {\r\n if (dataItem.group) {\r\n // Label\r\n dataItem.label = dataItem.group.displayName ?? dataItem.group.name ?? dataItem.accountName;\r\n }\r\n });\r\n\r\n return data.filter(dataItem => this.ignoreInvalidAccountNames() ? !!dataItem.group : true);\r\n });\r\n\r\n displayPhoto = computed(() => ['Photo', 'PhotoAndDisplayName', 'PhotoAndUsername', 'PhotoDisplayNameAndUsername']\r\n .includes(this.displayType()));\r\n displayName = computed(() => this.displayType() !== 'Photo');\r\n //#endregion Computed Properties\r\n\r\n onUserChooserClosed(event: UserChooserReturnValue | any) {\r\n this.userChooserClosed.emit(event);\r\n\r\n if (event === this.userChooserSettings().cancelReturnValue) {\r\n // console.log('User chooser canceled'); // debug\r\n } else {\r\n \r\n this.selectedUsers.set(this.userChooserSettings().returnType === 'Object' ?\r\n (event.users as CleavelandPriceUser[]).map(u => u.sAMAccountName) :\r\n event.users as string[]);\r\n\r\n this.selectedGroups.set(this.userChooserSettings().returnType === 'Object' ?\r\n (event.groups as Group[]).map(g => g.sAMAccountName) :\r\n event.groups as string[]);\r\n\r\n if (event.invalidUsers.length > 0 || event.invalidGroups.length > 0) {\r\n this.rejectedInvalidAccountNames.emit({\r\n users: event.invalidUsers,\r\n groups: event.invalidGroups\r\n });\r\n }\r\n }\r\n\r\n this.showUserChooser.set(false);\r\n }\r\n}\r\n\r\ntype UserObject = {\r\n accountName: string;\r\n user?: CleavelandPriceUser;\r\n photo?: PhotoItem;\r\n label?: string;\r\n}\r\n\r\ntype GroupObject = {\r\n accountName: string;\r\n group?: Group;\r\n label?: string;\r\n}"," <div (click)=\"enableUserChooser() && showUserChooser.set(true)\"\r\n [ngClass]=\"[wrapperClass(), enableUserChooser() ? userChooserEnabledClass() : userChooserDisabledClass()]\">\r\n\r\n @if (userObjects().length === 0 && groupObjects().length === 0) {\r\n <!-- No data provided, just present an empty user/group chooser -->\r\n <div [ngClass]=\"emptyUserNameClass()\">\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ emptyUserNameText() }}\r\n </div>\r\n }\r\n @else if (totalItemCount() > maxItemsToDisplay()) {\r\n <!-- Too many items to display, just show a count -->\r\n <div [ngClass]=\"manySelectedClass()\">\r\n @if (groupObjects().length === 0) {\r\n <!-- We only have Users -->\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ totalItemCount() }} users\r\n } @else if (groupObjects().length === 0) {\r\n <!-- We only have Groups -->\r\n <kendo-svg-icon [icon]=\"icons.group\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ totalItemCount() }} groups\r\n } @else {\r\n <!-- We have both Users and Groups -->\r\n @if (groupItemsOverMax()) {\r\n <!-- Lump users/groups together -->\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ totalItemCount() }} {{ groupItemsOverMaxText() }}\r\n } @else {\r\n <!-- List how many users/groups separately -->\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ userObjects().length }} users\r\n <kendo-svg-icon [icon]=\"icons.group\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n {{ groupObjects().length }} groups\r\n }\r\n }\r\n </div>\r\n\r\n }\r\n @else {\r\n <!-- Display the users/groups that were passed in -->\r\n\r\n <!-- Users -->\r\n @for (userObject of userObjects(); track userObject.accountName) {\r\n <div class=\"user-identity\" [class.with-photo]=\"displayPhoto()\">\r\n \r\n @if (displayPhoto()) {\r\n @if (userObject.photo) {\r\n <img [src]=\"userObject.photo!.encodedAbsUrl\" [ngClass]=\"photoClass()\" />\r\n } @else {\r\n @if (userObject.user) {\r\n <kendo-svg-icon [icon]=\"icons.user\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n } @else {\r\n <kendo-svg-icon [icon]=\"icons.unknown\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n }\r\n }\r\n }\r\n \r\n @if (displayName()) {\r\n <div id=\"name\"\r\n [ngClass]=\"userObject.user ? validUserTextClass() : invalidUserTextClass()\"\r\n [innerText]=\"userObject.label\">\r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n <!-- Groups -->\r\n @for (groupObject of groupObjects(); track groupObject.accountName) {\r\n <div class=\"user-identity\" [class.with-photo]=\"displayPhoto()\">\r\n \r\n @if (displayPhoto()) {\r\n @if (groupObject.group) {\r\n <kendo-svg-icon [icon]=\"icons.group\" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n } @else {\r\n <kendo-svg-icon [icon]=\"icons.unknown \" size=\"small\" [ngClass]=\"photoClass()\"/>\r\n }\r\n }\r\n \r\n @if (displayName()) {\r\n <div id=\"name\"\r\n [ngClass]=\"groupObject.group ? validUserTextClass() : invalidUserTextClass()\"\r\n [innerText]=\"groupObject.label\">\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n\r\n</div>\r\n\r\n<!-- Display User Chooser when the user clicks the component -->\r\n@if (showUserChooser()) {\r\n <!--\r\n TODO\r\n If we want to ensure that only valid users/groups are passed in...\r\n [selectedUsers]=\"data().filter(i => i.userOrGroup).map(i => i.accountName!)\"\r\n -->\r\n\r\n <user-chooser-dialog [users]=\"resolvedUsers()\" [groups]=\"resolvedGroups()\" [photos]=\"resolvedPhotos()\"\r\n [settings]=\"userChooserSettings()\"\r\n [photoClass]=\"userChooserPhotoClass()\"\r\n [selectedUsers]=\"selectedUsers()\" [selectedGroups]=\"selectedGroups()\"\r\n (close)=\"onUserChooserClosed($event)\" />\r\n}","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { ActiveDirectoryServiceOptions, ActiveDirectoryServiceOptionsToken } from '@cleavelandprice/ngx-lib/active-directory';\r\n\r\nimport { IconsModule, SVGIconModule } from '@progress/kendo-angular-icons';\r\nimport { GridModule } from \"@progress/kendo-angular-grid\";\r\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\r\nimport { DialogsModule } from \"@progress/kendo-angular-dialog\";\r\nimport { InputsModule } from '@progress/kendo-angular-inputs';\r\nimport { LabelModule } from '@progress/kendo-angular-label';\r\nimport { TabStripModule } from '@progress/kendo-angular-layout';\r\n\r\n\r\nimport { UserChooserDialogComponent } from './components/user-chooser-dialog/user-chooser-dialog';\r\nimport { UserChooserList } from './components/user-chooser-list/user-chooser-list';\r\nimport { UserFieldComponent } from './components/user-field/user-field';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n\r\n IconsModule, SVGIconModule,\r\n GridModule,\r\n ButtonsModule,\r\n DialogsModule,\r\n InputsModule,\r\n LabelModule,\r\n TabStripModule,\r\n\r\n UserChooserDialogComponent,\r\n UserChooserList,\r\n UserFieldComponent\r\n ],\r\n exports: [\r\n UserChooserDialogComponent,\r\n UserChooserList,\r\n UserFieldComponent\r\n ]\r\n})\r\nexport class KendoActiveDirectoryModule {\r\n static forRoot(config: ActiveDirectoryServiceOptions): ModuleWithProviders<KendoActiveDirectoryModule> {\r\n return {\r\n ngModule: KendoActiveDirectoryModule,\r\n providers: [\r\n {\r\n provide: ActiveDirectoryServiceOptionsToken,\r\n useValue: config\r\n }\r\n ]\r\n };\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: KendoActiveDirectoryModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'KendoActiveDirectoryModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './kendo-active-directory.api';\n"],"names":["i1"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "comment": "NGX-LIB primary entry point package.json",
3
3
  "name": "@cleavelandprice/ngx-lib",
4
- "version": "4.8.2",
4
+ "version": "4.8.3",
5
5
  "description": "Angular library providing foundational functionality to Cleaveland-Price applications",
6
6
  "peerDependencies": {
7
7
  "@angular/common": "^22.1.1",