{ "version": 3, "sources": ["external-global:@serenity-is/corelib", "external-global:@serenity-is/corelib/q", "external-global:react", "external-global:react-dom", "external-global:@serenity-is/corelib/slick", "external-global:@serenity-is/sleekgrid", "../Modules/index.ts", "../Modules/GridEditing/GridEditController.ts", "../Modules/GridEditing/GridEditWrapper.ts", "../Modules/GridMixins/AutoColumnWidthMixin.ts", "../Modules/GridMixins/CardViewItems.tsx", "../Modules/GridMixins/CardViewMixin.ts", "../Modules/GridMixins/CustomSummaryMixin.ts", "../Modules/GridMixins/DraggableGroupingMixin.ts", "../Modules/GridMixins/DraggableGroupingPlugin.ts", "../Modules/GridMixins/EntityGridDialog.ts", "../Modules/GridMixins/FavoriteViewsMixin.ts", "../Modules/GridMixins/HeaderFiltersMixin.ts", "../Modules/GridMixins/HeaderFiltersPlugin.ts", "../Modules/Tools/IdleTimeout.ts", "../Modules/Tools/UIOverrides.ts", "../Modules/Wizards/WizardDialog.ts"], "sourcesContent": ["module.exports = Serenity;", "module.exports = Q;", "module.exports = React;", "module.exports = ReactDOM;", "module.exports = Slick;", "module.exports = Slick;", "export * from \"./GridEditing/GridEditController\";\nexport * from \"./GridEditing/GridEditWrapper\";\nexport * from \"./GridMixins/AutoColumnWidthMixin\";\nexport * from \"./GridMixins/CardViewItems\";\nexport * from \"./GridMixins/CardViewMixin\";\nexport * from \"./GridMixins/CustomSummaryMixin\";\nexport * from \"./GridMixins/DraggableGroupingMixin\";\nexport * from \"./GridMixins/DraggableGroupingPlugin\";\nexport * from \"./GridMixins/EntityGridDialog\";\nexport * from \"./GridMixins/FavoriteViewsMixin\";\nexport * from \"./GridMixins/HeaderFiltersMixin\";\nexport * from \"./GridMixins/HeaderFiltersPlugin\";\nexport * from \"./Tools/IdleTimeout\";\nexport * from \"./Tools/UIOverrides\";\nexport * from \"./Wizards/WizardDialog\";\n", "\uFEFFimport { DataGrid, SaveRequest, PropertyItemsData, EditorTypeRegistry, EntityGrid, ToolButton, PropertyItem } from \"@serenity-is/corelib\";\r\nimport { deepClone, Dictionary, extend, getHighlightTarget, isBS3, notifyError, notifyWarning, serviceRequest, tryFirst, tryGetText } from \"@serenity-is/corelib/q\";\r\nimport { CellStylesHash, Column, EditorClass, EditorFactory, EditorOptions, RowCell } from \"@serenity-is/sleekgrid\";\r\nimport { GridEditWrapper } from \"./GridEditWrapper\";\r\n\r\nexport interface GridEditOptions {\r\n grid: DataGrid;\r\n autoSave?: boolean;\r\n bulkSaveHandler?: (reqs: SaveRequest[]) => Promise;\r\n editable?: (column: Column, item: TItem) => boolean;\r\n editorParams?: any;\r\n refreshAfterSave?: boolean;\r\n resetOnLoad?: boolean;\r\n saveHandler?: (req: SaveRequest) => Promise;\r\n saveServiceMethod?: string;\r\n showValidationError?: boolean;\r\n undoRowDblEsc?: boolean;\r\n validator?: (value: any, args: EditorOptions) => string;\r\n}\r\n\r\nconst defaultGridEditOptions: Partial = {\r\n autoSave: false,\r\n refreshAfterSave: true,\r\n resetOnLoad: true,\r\n showValidationError: true,\r\n undoRowDblEsc: true\r\n} as const;\r\n\r\nexport class GridEditController implements EditorFactory {\r\n\r\n private _options: GridEditOptions;\r\n private dirtyStyles: CellStylesHash = {};\r\n\r\n constructor(opt: GridEditOptions) {\r\n this._options = opt = extend(extend({}, defaultGridEditOptions), opt) as GridEditOptions;\r\n\r\n opt.grid.slickGrid.setOptions({\r\n editable: true,\r\n editorFactory: this,\r\n enableCellNavigation: true,\r\n editorCellNavOnLRKeys: false,\r\n autoEdit: true,\r\n editCommandHandler: (item: any, column, command) => {\r\n var orig = item.__orig;\r\n if (orig == null)\r\n item.__orig = extend({}, item);\r\n command.execute();\r\n this.updateModifiedClassesForRow(command.row);\r\n opt.grid[\"updateInterface\"]();\r\n\r\n if (opt.autoSave)\r\n this.saveChanges();\r\n }\r\n });\r\n\r\n var priorEscCell: RowCell;\r\n\r\n if (opt.undoRowDblEsc) {\r\n // cancel changes for current row on double escape\r\n opt.grid.slickGrid.onKeyDown.subscribe(e => {\r\n if (e.key === \"Escape\" &&\r\n !opt.grid.slickGrid.getCellEditor()) {\r\n var activeCell = opt.grid.slickGrid.getActiveCell();\r\n if (activeCell != null &&\r\n activeCell.row >= 0 &&\r\n activeCell.cell >= 0 &&\r\n priorEscCell != null &&\r\n activeCell.row == priorEscCell.row &&\r\n activeCell.cell == priorEscCell.cell) {\r\n priorEscCell = null;\r\n this.undoRowChanges(activeCell.row);\r\n opt.grid.slickGrid.updateRow(activeCell.row);\r\n }\r\n else\r\n priorEscCell = activeCell;\r\n }\r\n else\r\n priorEscCell = null;\r\n });\r\n }\r\n\r\n if (opt.showValidationError) {\r\n opt.grid.slickGrid.onValidationError.subscribe((e, args) => {\r\n showValidationError(args.cellNode, args.validationResults.msg);\r\n });\r\n }\r\n\r\n if (opt.resetOnLoad) {\r\n opt.grid.view?.onDataLoaded.subscribe(() => {\r\n this.undoChanges();\r\n });\r\n }\r\n }\r\n\r\n updateModifiedClassesForRow(row: number) {\r\n var slick = this._options.grid.slickGrid;\r\n var item = slick.getDataItem(row);\r\n var orig = (item as any).__orig;\r\n if (orig == null)\r\n delete this.dirtyStyles[row];\r\n else {\r\n var styles = this.dirtyStyles[row];\r\n if (styles == null)\r\n this.dirtyStyles[row] = styles = {};\r\n var cols = slick.getColumns();\r\n for (var cell = 0; cell < cols.length; cell++) {\r\n var col = cols[cell];\r\n var field = col.editableProperty?.name ?? col.field;\r\n if (field == null ||\r\n !this.isFieldDirty(item, field))\r\n delete styles[col.id];\r\n else\r\n styles[col.id] = \"slick-cell-dirty\";\r\n }\r\n }\r\n slick.setCellCssStyles(\"dirtycells\", deepClone(this.dirtyStyles));\r\n }\r\n\r\n get options() {\r\n return this._options;\r\n }\r\n\r\n getEditor(column: Column, row: number): EditorClass {\r\n\r\n if (column.editable === false)\r\n return null;\r\n\r\n if (this._options.editable != null) {\r\n var item = this._options.grid.slickGrid.getDataItem(row);\r\n var editable = this._options.editable(column, item);\r\n if (editable != null && !editable)\r\n return null;\r\n }\r\n\r\n if (column.editableProperty == void 0 &&\r\n column.sourceItem &&\r\n column.sourceItem.filteringIdField != null) {\r\n var pid = this._options.grid[\"propertyItemsData\"] as PropertyItemsData;\r\n if (pid != null) {\r\n var idField = column.sourceItem.filteringIdField;\r\n column.editableProperty = tryFirst(pid.items || [], x => x.name == idField) ??\r\n tryFirst(pid.additionalItems || [], x => x.name == idField) ?? null;\r\n }\r\n }\r\n\r\n var propertyItem = column.editableProperty ?? column.sourceItem;\r\n\r\n if (propertyItem == null ||\r\n propertyItem.readOnly ||\r\n propertyItem.updatable === false ||\r\n EditorTypeRegistry.get(column.sourceItem.editorType ?? \"String\") == null)\r\n return null;\r\n\r\n return GridEditWrapper;\r\n }\r\n\r\n isDirty() {\r\n var slick = this._options.grid?.slickGrid;\r\n if (!slick)\r\n return false;\r\n var dataLength = slick.getDataLength();\r\n for (var i = 0; i < dataLength; i++) {\r\n var item = slick.getDataItem(i);\r\n if (this.isItemDirty(item))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n isItemDirty(item: any) {\r\n return item && item.__orig &&\r\n Object.keys(item).some(key => key !== \"__orig\" && item.__orig[key] != item[key]);\r\n }\r\n\r\n isFieldDirty(item: any, field: string) {\r\n return item.__orig && (item.__orig[field] != item[field]);\r\n }\r\n\r\n undoRowChanges(row: number) {\r\n var item = this._options.grid.slickGrid.getDataItem(row);\r\n if (item && item.__orig) {\r\n var orig = item.__orig;\r\n for (var i in item)\r\n delete item[i];\r\n for (var i in orig)\r\n item[i] = orig[i];\r\n }\r\n this.updateModifiedClassesForRow(row);\r\n }\r\n\r\n undoChanges() {\r\n var slick = this._options.grid?.slickGrid;\r\n if (!slick)\r\n return;\r\n var dataLength = slick.getDataLength();\r\n for (var row = 0; row < dataLength; row++) {\r\n var item = slick.getDataItem(row);\r\n if (item.__orig)\r\n this.undoRowChanges(row);\r\n }\r\n for (var key in this.dirtyStyles)\r\n delete this.dirtyStyles[key];\r\n slick.setCellCssStyles(\"dirtycells\", deepClone(this.dirtyStyles));\r\n slick.invalidate();\r\n }\r\n\r\n saveChanges() {\r\n\r\n var slick = this._options.grid?.slickGrid;\r\n if (!slick)\r\n return;\r\n\r\n var dataLength = slick.getDataLength();\r\n var requests: Dictionary> = {};\r\n\r\n for (var row = 0; row < dataLength; row++) {\r\n var item = slick.getDataItem(row);\r\n if (this.isItemDirty(item)) {\r\n var request: SaveRequest = {\r\n EntityId: item.__orig[this._options.grid[\"getIdProperty\"]()],\r\n Entity: Object.create(null) as TItem\r\n };\r\n for (var field of Object.keys(item)) {\r\n if (field === \"__orig\")\r\n continue;\r\n if (this.isFieldDirty(item, field))\r\n request.Entity[field] = item[field];\r\n }\r\n if (Object.keys(request.Entity as any).length)\r\n requests[row] = request;\r\n }\r\n }\r\n\r\n var rows = Object.keys(requests);\r\n var current = -1;\r\n var self = this;\r\n\r\n (function saveNext() {\r\n if (++current >= rows.length) {\r\n self.undoChanges();\r\n if (self._options.refreshAfterSave)\r\n self._options.grid.refresh();\r\n self._options.grid[\"updateInterface\"]();\r\n return;\r\n }\r\n\r\n var row = parseInt(rows[current], 10);\r\n var request = requests[row];\r\n var item = self._options.grid.slickGrid.getDataItem(row);\r\n\r\n const then = () => {\r\n delete item.__orig;\r\n delete request[row];\r\n self.updateModifiedClassesForRow(row);\r\n saveNext();\r\n }\r\n\r\n const fail = () => {\r\n if (self._options.autoSave)\r\n self.undoRowChanges(row);\r\n self._options.grid[\"updateInterface\"]();\r\n }\r\n\r\n if (self._options.saveHandler) {\r\n self._options.saveHandler(request)\r\n .then(then)\r\n .catch(fail);\r\n }\r\n else {\r\n var serviceMethod = self._options.saveServiceMethod;\r\n\r\n if (serviceMethod == null) {\r\n var getService = (self._options.grid as EntityGrid)[\"getService\"];\r\n if (getService)\r\n serviceMethod = getService() + \"/Update\";\r\n }\r\n\r\n if (serviceMethod)\r\n serviceRequest(serviceMethod, request, then)\r\n .fail(fail);\r\n else\r\n notifyWarning(\"Save handler for edit controller is not defined!\");\r\n }\r\n })();\r\n }\r\n\r\n static saveChangesButton(controller: () => GridEditController): ToolButton {\r\n return {\r\n title: tryGetText('Controls.EntityGrid.SaveChangesButton') ?? \"Save Changes\",\r\n cssClass: 'apply-changes-button',\r\n disabled: () => !controller()?.isDirty(),\r\n onClick: () => controller()?.saveChanges(),\r\n separator: true\r\n }\r\n }\r\n\r\n static undoButton(controller: () => GridEditController): ToolButton {\r\n return {\r\n hint: tryGetText('Controls.EntityGrid.UndoChangesButton') ?? \"Undo Changes\",\r\n cssClass: 'undo-changes-button',\r\n icon: 'fa-undo',\r\n disabled: () => !controller()?.isDirty(),\r\n onClick: e => controller()?.undoChanges()\r\n }\r\n }\r\n}\r\n\r\nfunction showValidationError(el: HTMLElement, msg) {\r\n if ($.fn.tooltip) {\r\n var $el: any;\r\n var hl = getHighlightTarget(el);\r\n if (hl)\r\n $el = $(hl);\r\n else\r\n $el = $(el);\r\n\r\n $.fn.tooltip && $el.tooltip({\r\n title: msg,\r\n trigger: 'manual'\r\n }).tooltip('show');\r\n\r\n window.setTimeout(function () {\r\n $el.tooltip(isBS3() ? 'destroy' : 'dispose');\r\n }, 1500);\r\n }\r\n else\r\n notifyError(msg);\r\n}\r\n\r\ndeclare module \"@serenity-is/sleekgrid\" {\r\n interface Column {\r\n editable?: boolean;\r\n editableProperty?: PropertyItem;\r\n editorParams?: any;\r\n }\r\n}", "\uFEFFimport { Widget, EditorTypeRegistry, EditorUtils, Select2Editor, BooleanEditor } from \"@serenity-is/corelib\";\r\nimport { extend, isInstanceOfType, localText } from \"@serenity-is/corelib/q\";\r\nimport { Editor, EditorOptions, Grid, Position, ValidationResult } from \"@serenity-is/sleekgrid\";\r\nimport { GridEditController } from \"./GridEditController\";\r\n\r\nexport class GridEditWrapper implements Editor {\r\n private args: EditorOptions;\r\n private editor: Widget;\r\n private defaultValue: any;\r\n\r\n constructor(args: EditorOptions) {\r\n this.args = args;\r\n\r\n var propertyItem = args.column.editableProperty ?? args.column.sourceItem;\r\n var controller = (args.grid as Grid).getOptions().editorFactory as GridEditController;\r\n\r\n this.editor = Widget.create({\r\n container: $(args.container),\r\n element: el => el.addClass('s-cell-editor'),\r\n type: EditorTypeRegistry.get(propertyItem.editorType ?? \"String\"),\r\n options: extend(extend(extend({}, propertyItem.editorParams),\r\n controller?.options?.editorParams ?? {}) || {}, args.column.editorParams || {})\r\n });\r\n\r\n this.editor.element.focus();\r\n this.editor.element[0][\"select\"] && this.editor.element[0][\"select\"]();\r\n }\r\n\r\n focus(): void {\r\n this.editor.element.focus();\r\n }\r\n\r\n isValueChanged(): boolean {\r\n return JSON.stringify(this.serializeValue()) !=\r\n JSON.stringify(this.defaultValue);\r\n }\r\n\r\n keyCaptureList?: number[];\r\n\r\n loadValue(source: any): void {\r\n const propertyItem = this.args.column.editableProperty ?? this.args.column.sourceItem;\r\n EditorUtils.loadValue(this.editor, propertyItem, source);\r\n this.defaultValue = this.serializeValue();\r\n }\r\n\r\n serializeValue() {\r\n const propertyItem = this.args.column.editableProperty ?? this.args.column.sourceItem;\r\n const target = Object.create(null);\r\n EditorUtils.saveValue(this.editor, propertyItem, target);\r\n\r\n if (propertyItem.name !== this.args.column.name &&\r\n isInstanceOfType(this.editor, Select2Editor))\r\n target[this.args.column.field] = (this.editor as Select2Editor).text;\r\n\r\n return target;\r\n }\r\n\r\n applyValue(target: any, state: any): void {\r\n for (var k of Object.keys(state))\r\n target[k] = state[k];\r\n }\r\n\r\n position?(pos: Position): void {\r\n }\r\n\r\n preClick?(): void {\r\n if (this.args.column.sourceItem?.editorType == \"Boolean\")\r\n (this.editor as BooleanEditor).value = !(this.editor as BooleanEditor).value;\r\n }\r\n\r\n hide?(): void {\r\n }\r\n\r\n show?(): void {\r\n }\r\n\r\n validate?(): ValidationResult {\r\n const propertyItem = this.args.column.editableProperty ?? this.args.column.sourceItem;\r\n const value = EditorUtils.getValue(this.editor);\r\n if (propertyItem.required &&\r\n value == null || (typeof value === \"string\" && !value.trim().length)) {\r\n return {\r\n valid: false,\r\n msg: localText(\"Validation.Required\")\r\n }\r\n }\r\n\r\n if (this.args.column.validator != null) {\r\n var result = this.args.column.validator(value, this.args);\r\n if (!result.valid)\r\n return result;\r\n }\r\n\r\n var controller = (this.args.grid as Grid).getOptions().editorFactory as GridEditController;\r\n if (controller &&\r\n controller.options?.validator) {\r\n var message = controller.options.validator(value, this.args);\r\n if (message != null)\r\n return { valid: false, msg: message };\r\n }\r\n\r\n return { valid: true, msg: null }\r\n }\r\n\r\n destroy() {\r\n this.editor?.destroy();\r\n }\r\n}", "\uFEFFimport { DataGrid, Decorators, GridPersistanceFlags, LazyLoadHelper, PersistedGridSettings, Widget } from \"@serenity-is/corelib\";\r\nimport { any, htmlEncode } from \"@serenity-is/corelib/q\";\r\nimport { Column, Grid } from \"@serenity-is/sleekgrid\";\r\n\r\nexport interface AutoColumnWidthMixinOptions {\r\n grid: DataGrid;\r\n /** Disable auto size on load behavior, default is false, user can stil auto size by double click */\r\n disabled?: boolean;\r\n /** True to just auto size once on load, not on every load, like after changing pages, sorting etc, default is false */\r\n autoSizeAllJustOnce?: boolean;\r\n /** Disable auto size on load behavior if user manually resizes a column, default is true */\r\n disableIfUserResize?: boolean;\r\n /** If column has an explicit width set in Form.cs, use that width on auto size, doesn't effect manually triggered auto size */\r\n useExplicitWidths?: () => boolean;\r\n /** Set to true if headers shouldn't affect auto width, default is false.\r\n * If passed a number, header are considered for auto width but only up to that \r\n * number, e.g. if you pass 200, and header width is 300, 200 will be used */\r\n ignoreHeaders?: boolean | number;\r\n /** Maximum rows to scan in data source, default is 40*/\r\n maxRows?: number;\r\n /** Maximum auto column width, default value is 400 */\r\n maxWidth?: number;\r\n /** Minimum auto column width, default value is 30 */\r\n minWidth?: number;\r\n /** Callback used before user auto size all columns */\r\n beforeUserAutoSizeAll?: () => void;\r\n /** Callback used after user auto size all columns */\r\n afterUserAutoSizeAll?: () => void;\r\n /** extra delta for input border and padding */\r\n inputDelta?: number;\r\n}\r\n\r\n/**\r\n * A mixin that can be applied to a DataGrid for auto size column width functionality\r\n */\r\n@Decorators.registerClass(\"Serenity.AutoColumnWidthMixin\")\r\nexport class AutoColumnWidthMixin extends Widget {\r\n\r\n private slickGrid: Grid;\r\n private $container: JQuery;\r\n private autoSizing: number = 0;\r\n private inputDelta: number;\r\n private markupReadyOnce: boolean;\r\n private oldMarkupReady: () => void;\r\n private oldPersistSettings: (flags?: GridPersistanceFlags) => void;\r\n private oldGetCurrentSettings: (flags?: GridPersistanceFlags) => PersistedGridSettings;\r\n private oldRestoreSettings: (settings?: PersistedGridSettings, flags?: GridPersistanceFlags) => void;\r\n public disabled: boolean;\r\n\r\n private columnResizeHandler = () => {\r\n if (!this.autoSizing && (this.options.disableIfUserResize ?? true))\r\n this.disabled = true;\r\n }\r\n\r\n constructor(options: AutoColumnWidthMixinOptions) {\r\n super(options.grid.element, options);\r\n\r\n if (options.disabled != null)\r\n this.disabled = !!options.disabled;\r\n\r\n this.slickGrid = options.grid.slickGrid;\r\n this.$container = $((this.slickGrid as any).getContainerNode());\r\n\r\n this.$container.on('dblclick.' + this.uniqueName, '.slick-resizable-handle', (e) => this.resizeHandleClick(e));\r\n this.slickGrid.onColumnsResized.subscribe(this.columnResizeHandler);\r\n var self = this;\r\n\r\n this.oldMarkupReady = options.grid['markupReady'];\r\n options.grid['markupReady'] = function () {\r\n self.oldMarkupReady && self.oldMarkupReady.call(this);\r\n if (!self.disabled && (!self.markupReadyOnce || !self.options.autoSizeAllJustOnce))\r\n self.autoSizeAll(self.disabled != null ? false : null);\r\n self.markupReadyOnce = true;\r\n };\r\n\r\n this.oldPersistSettings = options.grid['persistSettings'];\r\n options.grid['persistSettings'] = function (flags?: GridPersistanceFlags) {\r\n if (self.autoSizing)\r\n return;\r\n self.oldPersistSettings.call(this, flags);\r\n };\r\n\r\n this.oldGetCurrentSettings = options.grid['getCurrentSettings'];\r\n options.grid['getCurrentSettings'] = function (flags?: GridPersistanceFlags): PersistedGridSettings {\r\n flags = flags || this.gridPersistanceFlags();\r\n flags.columnWidths = flags.columnWidths ?? !!self.disabled;\r\n return self.oldGetCurrentSettings.call(this, flags);\r\n }\r\n\r\n this.oldRestoreSettings = options.grid['restoreSettings'];\r\n options.grid['restoreSettings'] = function (settings?: PersistedGridSettings, flags?: GridPersistanceFlags) {\r\n if (settings == null)\r\n settings = this.getPersistedSettings();\r\n\r\n flags = flags || this.gridPersistanceFlags();\r\n\r\n if (settings != null &&\r\n settings.columns &&\r\n (flags.columnWidths || any(settings.columns, x => x.width != null)))\r\n self.disabled = true;\r\n\r\n self.oldRestoreSettings.call(this, settings, flags);\r\n }\r\n\r\n this.inputDelta = options.inputDelta ?? 8;\r\n\r\n if (!this.disabled)\r\n this.autoSizeAll();\r\n }\r\n\r\n destroy() {\r\n if (this.options && this.options.grid) {\r\n this.options.grid.element.off('.' + this.uniqueName);\r\n this.options.grid['markupReady'] = this.oldMarkupReady;\r\n }\r\n\r\n this.slickGrid && this.slickGrid.onColumnsResized.unsubscribe(this.columnResizeHandler);\r\n\r\n this.options = null;\r\n this.slickGrid = null;\r\n this.$container = null;\r\n super.destroy();\r\n }\r\n\r\n\r\n private resizeHandleClick(e: JQueryEventObject) {\r\n if (e.ctrlKey) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.options.beforeUserAutoSizeAll && this.options.beforeUserAutoSizeAll();\r\n this.autoSizeAll(false);\r\n this.options.afterUserAutoSizeAll && this.options.afterUserAutoSizeAll();\r\n this.disabled = false;\r\n return;\r\n }\r\n\r\n var $header = $(e.currentTarget).closest('.slick-header-column');\r\n var columnDef = $header.data('column') as Column;\r\n\r\n if (!columnDef || !columnDef.resizable)\r\n return;\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n this.autoSizeColumn($header, columnDef);\r\n }\r\n\r\n private createCellNodes(sb: string[]): HTMLDivElement[] {\r\n const row = document.createElement('div');\r\n row.classList.add('slick-row', 's-offscreen');\r\n row.style.visibility = 'hidden';\r\n\r\n row.innerHTML = sb.join('');\r\n if (row.childNodes.length > 0)\r\n this.slickGrid.getCanvasNode().appendChild(row);\r\n\r\n if (Array[\"from\"])\r\n return Array[\"from\"](row.childNodes) as HTMLDivElement[];\r\n\r\n var childNodes = row.childNodes;\r\n var length = row.childNodes.length;\r\n var cellNodes: HTMLDivElement[] = [];\r\n for (var i = 0; i < length; i++)\r\n cellNodes.push(childNodes[i] as HTMLDivElement);\r\n\r\n return cellNodes;\r\n }\r\n\r\n private calcMaxWidthFromCellNodes(cellNodes: HTMLDivElement[], columnDef: Column, header: HTMLElement) {\r\n var maxAllowedWidth = columnDef.maxWidth > 0 ? columnDef.maxWidth : this.options.maxWidth;\r\n var maxWidth = 0;\r\n\r\n for (let index = 0; index < cellNodes.length; index++) {\r\n const cellNode = cellNodes[index];\r\n\r\n var width = cellNode.offsetWidth +\r\n (cellNode.dataset?.isInputNode === \"1\" ? (this.inputDelta ?? 0) : 0);\r\n\r\n if (width > maxWidth)\r\n maxWidth = width;\r\n\r\n if (maxAllowedWidth > 0 && width >= maxAllowedWidth)\r\n break;\r\n }\r\n\r\n var autoWidth = maxWidth || 0;\r\n\r\n if (typeof this.options.ignoreHeaders == \"number\") {\r\n autoWidth = Math.max(Math.min(this.options.ignoreHeaders, header.offsetWidth, autoWidth));\r\n }\r\n else if (!this.options.ignoreHeaders) {\r\n autoWidth = Math.max(header.offsetWidth, autoWidth);\r\n }\r\n\r\n autoWidth = (autoWidth || 0) + 1;\r\n\r\n if (columnDef.maxWidth > 0)\r\n autoWidth = Math.min(autoWidth, columnDef.maxWidth);\r\n else\r\n autoWidth = Math.min(autoWidth, this.options.maxWidth || 400);\r\n\r\n if (columnDef.minWidth > 0)\r\n autoWidth = Math.max(autoWidth, columnDef.minWidth);\r\n else\r\n autoWidth = Math.max(autoWidth, this.options.minWidth || 30);\r\n\r\n return autoWidth;\r\n }\r\n\r\n private getAutoColumnWidth($header: JQuery, columnDef: Column) {\r\n var colIndex = this.slickGrid.getColumnIndex(columnDef.id);\r\n var sb: string[] = [];\r\n this.renderColumnCells(sb, columnDef, colIndex, this.getMaxCalcLength());\r\n const cellNodes = this.createCellNodes(sb);\r\n try {\r\n let headerClone: HTMLElement;\r\n if (!this.options.ignoreHeaders)\r\n headerClone = createHeaderClone($header[0]);\r\n\r\n try {\r\n return this.calcMaxWidthFromCellNodes(cellNodes, columnDef, headerClone)\r\n } finally {\r\n headerClone?.parentElement?.removeChild(headerClone);\r\n }\r\n }\r\n finally {\r\n var rowNode = cellNodes[0]?.parentElement;\r\n rowNode && rowNode.parentElement.removeChild(rowNode);\r\n }\r\n }\r\n\r\n private autoSizeColumn($header: JQuery, columnDef: Column) {\r\n const autoWidth = this.getAutoColumnWidth($header, columnDef);\r\n\r\n if (autoWidth !== columnDef.width) {\r\n this.autoSizing++;\r\n try {\r\n columnDef.width = autoWidth;\r\n this.slickGrid.setColumns(this.slickGrid.getColumns());\r\n this.slickGrid.onColumnsResized.notify();\r\n }\r\n finally {\r\n this.autoSizing--;\r\n }\r\n }\r\n }\r\n\r\n private queueAutoSize: number = 0;\r\n\r\n public autoSizeAll(useExplicitWidths?: boolean) {\r\n if (!this.$container.is(':visible')) {\r\n\r\n if (this.queueAutoSize <= 0) {\r\n this.queueAutoSize++;\r\n LazyLoadHelper.executeOnceWhenShown(this.$container, () => this.autoSizeAll(useExplicitWidths));\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (this.queueAutoSize > 0) {\r\n this.queueAutoSize--;\r\n }\r\n\r\n this.autoSizing++;\r\n try {\r\n\r\n var $headers = this.$container.find(\".slick-header-column\");\r\n useExplicitWidths = useExplicitWidths ?? (this.options.useExplicitWidths && this.options.useExplicitWidths());\r\n var maxRows = this.getMaxCalcLength();\r\n let sb: string[] = [];\r\n const headerClones: HTMLElement[] = [];\r\n\r\n try {\r\n $headers.each((index, el) => {\r\n var columnDef = $(el).data('column') as Column;\r\n if (columnDef && this.getPreSetWidth(columnDef) == null) {\r\n var colIndex = this.slickGrid.getColumnIndex(columnDef.id);\r\n this.renderColumnCells(sb, columnDef, colIndex, maxRows);\r\n }\r\n else {\r\n for (var i = 0; i < maxRows; i++)\r\n sb.push('
');\r\n }\r\n\r\n if (!this.options.ignoreHeaders)\r\n headerClones.push(createHeaderClone(el as HTMLElement));\r\n });\r\n\r\n let allCellNodes = this.createCellNodes(sb);\r\n try {\r\n\r\n $headers.each((index, el) => {\r\n var columnDef = $(el).data('column') as Column;\r\n if (!columnDef)\r\n return;\r\n\r\n var cellNodes = allCellNodes.slice(index * maxRows, (index + 1) * maxRows);\r\n\r\n var autoWidth = this.getPreSetWidth(columnDef);\r\n if (autoWidth == null) {\r\n autoWidth = this.calcMaxWidthFromCellNodes(cellNodes, columnDef, headerClones[index]);\r\n }\r\n columnDef.width = autoWidth;\r\n });\r\n }\r\n finally {\r\n var rowNode = allCellNodes[0]?.parentElement;\r\n rowNode && rowNode.parentElement?.removeChild(rowNode);\r\n }\r\n } finally {\r\n headerClones.forEach(el => el?.parentElement?.removeChild(el));\r\n }\r\n\r\n this.slickGrid.setColumns(this.slickGrid.getColumns());\r\n this.slickGrid.onColumnsResized.notify();\r\n }\r\n finally {\r\n this.autoSizing--;\r\n }\r\n }\r\n\r\n private getMaxCalcLength() {\r\n var length = this.slickGrid.getDataLength();\r\n if ((this.options.maxRows ?? 40) < length)\r\n length = this.options.maxRows ?? 40;\r\n return length;\r\n }\r\n\r\n private renderColumnCells(sb: string[], columnDef: Column, colIndex: number, maxRows: number) {\r\n\r\n for (var i = 0; i < maxRows; i++) {\r\n sb.push('
');\r\n continue;\r\n }\r\n\r\n var format = this.slickGrid.getFormatter(i, columnDef);\r\n var ctx = this.slickGrid.getFormatterContext(i, colIndex);\r\n let child: HTMLInputElement;\r\n let childHtml: string;\r\n\r\n if (format) {\r\n try {\r\n childHtml = format(ctx);\r\n }\r\n catch (ex) {\r\n childHtml = htmlEncode(item[columnDef.field] ?? '');\r\n }\r\n }\r\n else\r\n childHtml = htmlEncode(item[columnDef.field]);\r\n\r\n if (childHtml?.length > 5 && childHtml.substring(0, 6) == \"', htmlEncode(child.value), '');\r\n continue;\r\n }\r\n }\r\n\r\n sb.push('>', childHtml, '');\r\n }\r\n }\r\n\r\n getPreSetWidth(columnDef: Column): number {\r\n if (this.options.useExplicitWidths && columnDef.sourceItem && columnDef.sourceItem.width > 0 && columnDef.sourceItem.widthSet)\r\n return columnDef.sourceItem.width;\r\n }\r\n}\r\n\r\nfunction createHeaderClone(element: HTMLElement): HTMLElement {\r\n const clone = element.cloneNode(true) as HTMLElement;\r\n clone.style.cssText = 'position: absolute; visibility: hidden; right: auto; text-overflow: initial; white-space: nowrap;';\r\n element.parentNode.insertBefore(clone, element);\r\n\r\n return clone;\r\n}", "\uFEFFimport React from \"react\";\r\n\r\nexport interface CardViewItemsProps {\r\n items: TItem[];\r\n renderItem: (item: TItem, index: number) => React.ReactNode;\r\n colClass: string;\r\n}\r\n\r\nexport class CardViewItems extends React.Component> {\r\n render(): React.ReactNode {\r\n return (\r\n
\r\n {this.props.items.map((item, index) =>\r\n
\r\n
\r\n {this.props.renderItem(item, index)}\r\n
\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n}", "\uFEFFimport { DataGrid, GridPersistanceFlags, PersistedGridSettings } from \"@serenity-is/corelib\";\r\nimport { htmlEncode, localText, trimToNull } from \"@serenity-is/corelib/q\";\r\nimport React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { CardViewItems } from \"./CardViewItems\";\r\n\r\nexport type CardViewType = \"card\" | \"grid\";\r\n\r\n/**\r\n * A mixin that can be applied to a DataGrid for card view functionality\r\n */\r\nexport class CardViewMixin {\r\n\r\n private dataGrid: DataGrid;\r\n private cardContainer: JQuery;\r\n\r\n constructor(private options: CardViewMixinOptions) {\r\n var dg = this.dataGrid = options.grid;\r\n\r\n var btnGroup = $(`\r\n
\r\n\r\n \r\n\r\n\r\n \r\n\r\n
`)\r\n .prependTo(dg.element.find('.grid-title'));\r\n\r\n this.cardContainer = $('
')\r\n .insertAfter(dg.element.children('.grid-container'));\r\n\r\n btnGroup.find('[data-view]').click((e) => {\r\n this.switchView($(e.target).closest('[data-view]').attr('data-view') as CardViewType);\r\n });\r\n\r\n if (options.viewType)\r\n this.switchView(this.options.viewType, false);\r\n\r\n this.resizeCardView();\r\n\r\n dg.element.bind('layout', () => this.resizeCardView());\r\n\r\n (dg.view as any).onDataChanged.subscribe(() => {\r\n this.updateCardItems();\r\n });\r\n\r\n var oldCurrentSettings = (dg as any).getCurrentSettings;\r\n (dg as any).getCurrentSettings = function (flag: GridPersistanceFlags) {\r\n var settings = oldCurrentSettings.apply(dg, [flag]);\r\n settings['viewType'] = btnGroup.find('[data-view].active').val();\r\n return settings;\r\n };\r\n\r\n var self = this;\r\n var oldRestoreSettings = (dg as any).restoreSettings;\r\n (dg as any).restoreSettings = function (settings?: PersistedGridSettings, flags?: GridPersistanceFlags) {\r\n oldRestoreSettings.apply(dg, [settings, flags]);\r\n\r\n if (settings == null) {\r\n var storage = this.getPersistanceStorage();\r\n if (storage == null)\r\n return;\r\n\r\n var json = trimToNull(storage.getItem(this.getPersistanceKey()));\r\n if (!json)\r\n return;\r\n\r\n settings = JSON.parse(json);\r\n }\r\n\r\n var viewType = (settings as any).viewType;\r\n if (viewType == \"card\" ||\r\n viewType == \"list\")\r\n self.switchView(viewType, false);\r\n };\r\n }\r\n\r\n public switchView(viewType: CardViewType, persist: boolean = true) {\r\n\r\n var button = this.dataGrid.element\r\n .find('.btn[data-view=\"' + viewType + '\"]');\r\n\r\n button.addClass('active').siblings('.active').not(button).removeClass('active');\r\n\r\n var card = viewType == 'card';\r\n this.dataGrid.element.children('.card-container').toggle(card);\r\n this.dataGrid.element.children('.grid-container').toggle(!card);\r\n\r\n if (card)\r\n this.updateCardItems();\r\n\r\n if (persist)\r\n (this.dataGrid as any).persistSettings();\r\n\r\n this.dataGrid.element.trigger('layout');\r\n }\r\n\r\n private updateCardItems() {\r\n ReactDOM.render(React.createElement(CardViewItems, {\r\n items: this.dataGrid.getItems(),\r\n renderItem: this.options.renderItem,\r\n colClass: this.options.cardClass ?? \"col-12 col-md-6 col-lg-6 col-xxl-4\"\r\n }), this.cardContainer[0]);\r\n }\r\n\r\n private resizeCardView() {\r\n var gc = this.dataGrid.element.children('.grid-container');\r\n if (!gc.is(':visible'))\r\n return;\r\n var height = gc.height();\r\n if (height) {\r\n this.dataGrid.element.children('.card-container').css({\r\n height: height + 'px'\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport interface CardViewMixinOptions {\r\n grid: DataGrid;\r\n renderItem: (item: TItem, index: number) => React.ReactNode;\r\n viewType?: CardViewType;\r\n cardClass?: string;\r\n}\r\n\r\nif (typeof globalThis !== \"undefined\" && globalThis.Q && globalThis.Q.initFullHeightGridPage) {\r\n globalThis.Q.initFullHeightGridPage = function (gridDiv: JQuery) {\r\n $('body').addClass('full-height-page');\r\n gridDiv.addClass('responsive-height');\r\n var layout = function () {\r\n var inPageContent = gridDiv.parent().hasClass('page-content') ||\r\n gridDiv.parent().is('section.content');\r\n if (inPageContent) {\r\n gridDiv.css('height', '1px').css('overflow', 'hidden');\r\n }\r\n var cc = gridDiv.children('.card-container');\r\n if (cc.length && cc.is(':visible')) {\r\n cc.hide();\r\n gridDiv.children('.grid-container').show();\r\n try {\r\n globalThis.Q.layoutFillHeight(gridDiv);\r\n gridDiv.triggerHandler('layout');\r\n }\r\n finally {\r\n gridDiv.children('.grid-container').hide();\r\n cc.show();\r\n }\r\n }\r\n else {\r\n globalThis.Q.layoutFillHeight(gridDiv);\r\n if (inPageContent) {\r\n gridDiv.css('overflow', '');\r\n }\r\n gridDiv.triggerHandler('layout');\r\n }\r\n };\r\n if ($('body').hasClass('has-layout-event')) {\r\n $('body').bind('layout', layout);\r\n gridDiv.one('remove', function () {\r\n $(window).off('layout', layout);\r\n $('body').off('layout', layout);\r\n });\r\n }\r\n else if ((window as any).Metronic) {\r\n (window as any).Metronic.addResizeHandler(layout);\r\n }\r\n else {\r\n $(window).resize(layout);\r\n }\r\n layout();\r\n globalThis.Q.Router?.resolve();\r\n }\r\n}", "\uFEFFimport { DataGrid, GridPersistanceFlags, PersistedGridSettings, SummaryType } from \"@serenity-is/corelib\";\r\nimport { tryFirst, toId } from \"@serenity-is/corelib/q\";\r\nimport { Aggregators } from \"@serenity-is/corelib/slick\";\r\nimport { Column } from \"@serenity-is/sleekgrid\";\r\n\r\ndeclare module \"@serenity-is/sleekgrid\" {\r\n interface Column {\r\n summaryType?: import(\"@serenity-is/corelib\").SummaryType;\r\n }\r\n}\r\n\r\nexport interface CustomSummaryMixinOptions {\r\n grid: DataGrid;\r\n}\r\n\r\nfunction toAggregator(summaryType: SummaryType): any {\r\n switch (summaryType) {\r\n case SummaryType.Sum: return Aggregators.Sum;\r\n case SummaryType.Avg: return Aggregators.Avg;\r\n case SummaryType.Max: return Aggregators.Max;\r\n case SummaryType.Min: return Aggregators.Min;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport class CustomSummaryMixin {\r\n\r\n constructor(options: CustomSummaryMixinOptions) {\r\n var dg = options.grid;\r\n\r\n var getDefaultAggregators = () => {\r\n var columns = dg['allColumns'];\r\n var aggregators: any[] = [];\r\n for (var x of columns) {\r\n\r\n if (x.sourceItem == null)\r\n continue;\r\n\r\n if (x.sourceItem.summaryType != null &&\r\n x.sourceItem.summaryType != SummaryType.Disabled) {\r\n\r\n var aggregator = toAggregator(x.sourceItem.summaryType);\r\n if (aggregator == null)\r\n continue;\r\n\r\n x.summaryType = x.sourceItem.summaryType;\r\n aggregators.push(new aggregator(x.field));\r\n }\r\n }\r\n\r\n return aggregators;\r\n };\r\n\r\n\r\n dg.view.setSummaryOptions({\r\n aggregators: getDefaultAggregators()\r\n });\r\n\r\n var aggregatesPopup = $(`
    \r\n
  • Sum
  • \r\n
  • Average
  • \r\n
  • Min
  • \r\n
  • Max
  • \r\n
`).appendTo(document.body)\r\n .click(e => {\r\n if (!$(e.target).is(\"li\"))\r\n return;\r\n\r\n var col = aggregatesPopup.data(\"column\") as Column;\r\n if (col == null || !col.id)\r\n return;\r\n\r\n var column = tryFirst(dg['allColumns'] as Column[], x => x.id == col.id);\r\n if (!column)\r\n return;\r\n\r\n if (column.sourceItem == null ||\r\n column.sourceItem.summaryType == null ||\r\n column.sourceItem.summaryType == SummaryType.Disabled)\r\n return;\r\n\r\n var agg = toId($(e.target).data('agg'));\r\n if (agg === column.summaryType)\r\n return;\r\n\r\n column.summaryType = agg;\r\n\r\n var aggregators = dg['allColumns']\r\n .filter(x => x.summaryType)\r\n .map(x => {\r\n var aggregator = toAggregator(x.summaryType)\r\n if (aggregator == null)\r\n return null;\r\n\r\n return new aggregator(x.field);\r\n }).filter(x => x != null);\r\n\r\n dg.view.setSummaryOptions({\r\n aggregators: aggregators\r\n });\r\n\r\n var grouping = (dg.view as any).getGrouping();\r\n for (var i = 0; i < grouping.length; i++)\r\n grouping[i].aggregators = aggregators;\r\n\r\n dg.view.setGrouping(grouping);\r\n dg.slickGrid.invalidate();\r\n });\r\n\r\n dg.element.on('click', '.slick-footerrow-column', e => {\r\n e.preventDefault();\r\n\r\n var col = $(e.currentTarget).data('column');\r\n if (!col || !col.id)\r\n return;\r\n\r\n var column = tryFirst(dg['allColumns'] as Column[], x => x.id == col.id);\r\n if (!column)\r\n return;\r\n\r\n if (!column ||\r\n !column.sourceItem ||\r\n column.sourceItem.summaryType == null ||\r\n column.sourceItem.summaryType == SummaryType.Disabled)\r\n return;\r\n\r\n aggregatesPopup.data('column', column)\r\n .show()\r\n .css('top', (e.pageY - aggregatesPopup.height()) + 'px')\r\n .css('left', e.pageX + 'px')\r\n .children('li')\r\n .removeClass('active')\r\n .end()\r\n .children('li[data-agg=' + column.summaryType + ']')\r\n .addClass('active');\r\n\r\n $(document.body).off('click.aggregatesMenu' + dg['uniqueName']);\r\n\r\n window.setTimeout(() => $(document.body)\r\n .on(\"click.aggregatesMenu\" + dg['uniqueName'], () => {\r\n aggregatesPopup.hide();\r\n $(document.body).off('click.aggregatesMenu' + dg['uniqueName']);\r\n }), 1);\r\n });\r\n\r\n var oldCurrentSettings = (dg as any).getCurrentSettings;\r\n (dg as any).getCurrentSettings = function (flags: GridPersistanceFlags) {\r\n var settings = oldCurrentSettings.apply(dg, [flags]);\r\n return settings;\r\n };\r\n\r\n var oldRestoreSettings = (dg as any).restoreSettings;\r\n (dg as any).restoreSettings = function (settings?: PersistedGridSettings,\r\n flags?: GridPersistanceFlags) {\r\n oldRestoreSettings.apply(dg, [settings, flags]);\r\n };\r\n }\r\n}", "\uFEFFimport { DataGrid } from \"@serenity-is/corelib\";\r\nimport { trimToNull, tryFirst } from \"@serenity-is/corelib/q\";\r\nimport { GroupInfo } from \"@serenity-is/corelib/slick\";\r\nimport { Column, Group } from \"@serenity-is/sleekgrid\";\r\nimport { DraggableGroupingPlugin, GroupChangeInfo } from \"./DraggableGroupingPlugin\";\r\n\r\nexport interface GridPersistanceFlags {\r\n groupColumns?: boolean;\r\n}\r\n\r\nexport interface PersistedGridSettings {\r\n groupColumns?: string[];\r\n}\r\n\r\nexport interface DraggableGroupingMixinOptions {\r\n grid: DataGrid;\r\n onGroupChanged?: (info: GroupChangeInfo) => void;\r\n getCount?: (group: Group) => number;\r\n displayTotalsRow?: boolean;\r\n collapsed?: boolean;\r\n}\r\n\r\nfunction sortBy(field: string, reverse?: boolean, primer?: (value: any) => any) {\r\n\r\n var key = function (x: any) {\r\n return primer ? primer(x[field]) : x[field]\r\n };\r\n\r\n return function (a: any, b: any) {\r\n var A = key(a), B = key(b);\r\n return (A < B ? -1 : (A > B ? 1 : 0)) * [1, -1][+!!reverse];\r\n }\r\n};\r\n\r\nexport class DraggableGroupingMixin {\r\n\r\n public readonly plugin: DraggableGroupingPlugin;\r\n\r\n constructor(options: DraggableGroupingMixinOptions) {\r\n var dg = options.grid;\r\n\r\n var plugin = this.plugin = new DraggableGroupingPlugin({\r\n getAllColumns: () => (dg as any).allColumns,\r\n getCount: options.getCount,\r\n displayTotalsRow: options.displayTotalsRow,\r\n collapsed: options.collapsed\r\n });\r\n\r\n dg.slickGrid.registerPlugin(plugin);\r\n\r\n plugin.onGroupChanged.subscribe((e, args) => {\r\n if (args.userChange && !(dg as any).restoringSettings) {\r\n (dg as any).persistSettings(null);\r\n\r\n if (options.onGroupChanged)\r\n options.onGroupChanged(args);\r\n }\r\n });\r\n\r\n var oldCurrentSettings = (dg as any).getCurrentSettings;\r\n (dg as any).getCurrentSettings = function (flags: GridPersistanceFlags) {\r\n var settings = oldCurrentSettings.apply(dg, [flags]);\r\n\r\n if (flags == null || flags.groupColumns == null || flags.groupColumns) {\r\n var grouping = (dg.view as any).getGrouping() as GroupInfo[] || [];\r\n settings['groupColumns'] = grouping.map(x => x.getter)\r\n .filter(x => x != null && typeof x == \"string\");\r\n }\r\n\r\n return settings;\r\n };\r\n\r\n function loadGroupCols(groupColsToLoad: string[]) {\r\n if (groupColsToLoad == null)\r\n return;\r\n\r\n var columns = (dg as any).allColumns as Column[];\r\n\r\n var groupCols = groupColsToLoad\r\n .map(x => tryFirst(columns, z => z.id == x))\r\n .filter(x => x != null);\r\n\r\n var groupings = groupCols.map((e: Column) => {\r\n if (e['grouping'] == null)\r\n e['grouping'] = plugin.getGroupingFor(e);\r\n\r\n return e['grouping'];\r\n });\r\n\r\n dg.view.setGrouping(groupings as any);\r\n plugin.setDroppedGroups(groupCols.map(x => x.id));\r\n dg.slickGrid.invalidate();\r\n };\r\n\r\n function getDefaultGroupCols() {\r\n var colsWithOrder = (dg as any).allColumns.filter((x: Column) => x.sourceItem != null &&\r\n x.sourceItem.groupOrder != null) as Column[];\r\n if (colsWithOrder.length) {\r\n return colsWithOrder.sort(sortBy('groupOrder')).map(x => x.id);\r\n }\r\n return null;\r\n }\r\n\r\n var oldRestoreSettings = (dg as any).restoreSettings;\r\n (dg as any).restoreSettings = function (settings?: PersistedGridSettings, flags?: GridPersistanceFlags) {\r\n (dg as any).restoringSettings++;\r\n try {\r\n oldRestoreSettings.apply(dg, [settings, flags]);\r\n\r\n if (!(flags == null || flags.groupColumns == null || flags.groupColumns))\r\n return;\r\n\r\n var groupColsToLoad: string[] = null;\r\n\r\n if (settings == null) {\r\n var storage = this.getPersistanceStorage();\r\n if (storage != null) {\r\n var json = trimToNull(storage.getItem(this.getPersistanceKey()));\r\n if (json) {\r\n groupColsToLoad = (JSON.parse(json) || {}).groupColumns;\r\n }\r\n }\r\n }\r\n else\r\n groupColsToLoad = settings.groupColumns;\r\n\r\n if (groupColsToLoad == null) {\r\n groupColsToLoad = getDefaultGroupCols();\r\n }\r\n\r\n loadGroupCols(groupColsToLoad);\r\n }\r\n finally {\r\n (dg as any).restoringSettings--;\r\n }\r\n };\r\n }\r\n}", "\uFEFFimport { htmlEncode, indexOf, tryGetText } from \"@serenity-is/corelib/q\";\r\nimport { GroupInfo } from \"@serenity-is/corelib/slick\";\r\nimport { Column, EventEmitter, Grid, Group, NonDataRow } from \"@serenity-is/sleekgrid\";\r\n\r\ndeclare module \"@serenity-is/sleekgrid\" {\r\n interface Column {\r\n grouping?: false | GroupInfo;\r\n }\r\n}\r\n\r\nexport interface DraggableGroupingOptions {\r\n deleteIconCssClass?: string;\r\n deleteIconImage?: string;\r\n dropPlaceHolderText?: string;\r\n getGroupingFor?: (column: Column) => GroupInfo;\r\n getAllColumns?: () => Column[];\r\n getCount?: (group: Group) => number;\r\n displayTotalsRow?: boolean;\r\n collapsed?: boolean;\r\n}\r\n\r\nexport interface GroupChangeInfo {\r\n groupingArray: any[];\r\n userChange: boolean;\r\n}\r\n\r\n/**\r\n * Based on plugin at https://github.com/muthukumarse/Slickgrid\r\n */\r\nexport class DraggableGroupingPlugin {\r\n\r\n private grid: Grid;\r\n private gridUid: string;\r\n private dropbox: JQuery;\r\n private dropboxPlaceholder: JQuery;\r\n private expandAll: JQuery;\r\n private collapseAll: JQuery;\r\n private options: DraggableGroupingOptions;\r\n private columnsGroupBy: Column[];\r\n public readonly onGroupChanged = new EventEmitter();\r\n\r\n constructor(options?: DraggableGroupingOptions) {\r\n var defaults: DraggableGroupingOptions = {\r\n deleteIconCssClass: 'fa fa-cross'\r\n };\r\n\r\n this.options = $.extend(true, {}, defaults, options);\r\n }\r\n\r\n public init(grid: Grid) {\r\n this.grid = grid;\r\n this.gridUid = grid['getUID']();\r\n\r\n this.dropbox = $(grid['getGroupingPanel']());\r\n var dropPlaceHolderText = this.options.dropPlaceHolderText ||\r\n tryGetText(\"Site.DraggableGroupingMixin.DropPlaceholder\") ||\r\n \"Drag a column header here to group by that column\";\r\n\r\n this.dropbox.html(\"
\" +\r\n htmlEncode(dropPlaceHolderText) + \"
\" +\r\n `
` +\r\n `
`);\r\n\r\n this.dropboxPlaceholder = this.dropbox.find(\".slick-dropped-placeholder\");\r\n this.expandAll = this.dropbox.find(\".slick-group-expand-all\");\r\n this.collapseAll = this.dropbox.find(\".slick-group-collapse-all\");\r\n this.setupColumnDropbox();\r\n\r\n var cols = this.getColumns();\r\n for (var i = 0; i < cols.length; i++) {\r\n var col = cols[i];\r\n grid['updateColumnHeader'](col.id);\r\n }\r\n\r\n this.columnsGroupBy = [];\r\n }\r\n\r\n private getColumns(): Column[] {\r\n return (this.options.getAllColumns && this.options.getAllColumns()) ||\r\n this.grid.getColumns();\r\n }\r\n\r\n public destroy() {\r\n this.onGroupChanged.clear();\r\n }\r\n\r\n private setupColumnDropbox() {\r\n var _self = this;\r\n this.dropbox.droppable({\r\n activeClass: \"ui-state-default\",\r\n hoverClass: \"ui-state-hover\",\r\n accept: \":not(.ui-sortable-helper)\",\r\n deactivate: (event, ui) => {\r\n this.dropbox.removeClass(\"slick-header-column-denied\");\r\n },\r\n drop: (_, ui) => {\r\n this.addGroupColumn(ui.draggable.attr('id').replace(_self.gridUid, \"\")) &&\r\n this.groupChanged(true);\r\n },\r\n over: (_, ui) => {\r\n var id = (ui.draggable).attr('id').replace(this.gridUid, \"\");\r\n this.getColumns().forEach((e, i, a) => {\r\n if (e.id == id) {\r\n if (e.grouping !== false) {\r\n this.dropbox.addClass(\"slick-header-column-denied\");\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n this.dropbox.sortable({\r\n items: \"div.slick-dropped-grouping\",\r\n cursor: \"default\",\r\n tolerance: \"pointer\",\r\n helper: \"clone\",\r\n update: (event, ui) => {\r\n var sortArray = $(event.target).sortable('toArray', {\r\n attribute: 'data-id'\r\n }),\r\n newGroupingOrder = [];\r\n for (var i = 0, l = sortArray.length; i < l; i++) {\r\n for (var a = 0, b = this.columnsGroupBy.length; a < b; a++) {\r\n if (this.columnsGroupBy[a].id == sortArray[i]) {\r\n newGroupingOrder.push(this.columnsGroupBy[a]);\r\n break;\r\n }\r\n }\r\n }\r\n this.columnsGroupBy = newGroupingOrder;\r\n this.groupChanged(true);\r\n }\r\n });\r\n\r\n this.expandAll.on('click', (e) => {\r\n (this.grid.getData() as any).expandAllGroups();\r\n });\r\n\r\n this.collapseAll.on('click', (e) => {\r\n (this.grid.getData() as any).collapseAllGroups();\r\n });\r\n }\r\n\r\n public getGroupingFor(column: Column): GroupInfo {\r\n var g = null;\r\n\r\n if (this.options.getGroupingFor) {\r\n g = this.options.getGroupingFor(column);\r\n }\r\n\r\n if (g === false)\r\n return g;\r\n\r\n var fld = column.field || column.id;\r\n var asc = 1;\r\n var s = this.grid.getSortColumns();\r\n if (s != null && s.length > 0) {\r\n for (var x of s) {\r\n if (x.columnId == column.id) {\r\n asc = x.sortAsc ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return $.extend({\r\n getter: fld,\r\n displayTotalsRow: this.options.displayTotalsRow,\r\n comparer: function (a, b) {\r\n return (a.value === b.value ? 0 :\r\n (((a.value != null && b.value == null) || (a.value > b.value)) ? asc : -asc));\r\n },\r\n formatter: (g: Group) => {\r\n var text;\r\n if (column.formatter) {\r\n try {\r\n var item = new NonDataRow();\r\n item[\"__grp\"] = g;\r\n item[column.field] = g.value;\r\n text = column.formatter(-1, -1, g.value, column, item);\r\n }\r\n catch (e) {\r\n text = htmlEncode(g.value);\r\n }\r\n }\r\n else\r\n text = htmlEncode(g.value);\r\n\r\n var count = this.options.getCount ? this.options.getCount(g) : g.count;\r\n return '' +\r\n (column.name || column.field || column.id) + ': ' +\r\n text + ' (' +\r\n (count || 0).toString() + \")\";\r\n },\r\n collapsed: true\r\n }, g);\r\n }\r\n\r\n private addGroupColumn(columnid: string): boolean {\r\n var columnAllowed = true;\r\n this.columnsGroupBy.forEach(function (clmn, i, a) {\r\n if (clmn.id == columnid) {\r\n columnAllowed = false;\r\n }\r\n });\r\n\r\n var gridColumns = this.getColumns();\r\n\r\n if (!columnAllowed)\r\n return;\r\n\r\n var columnAdded = false;\r\n gridColumns.forEach((col, i, a) => {\r\n if (col.id !== columnid || col.grouping === false)\r\n return;\r\n\r\n if (col.grouping == null || $.isEmptyObject(col.grouping)) {\r\n col.grouping = this.getGroupingFor(col);\r\n if (col.grouping as any === false)\r\n return;\r\n }\r\n\r\n var entry = $(\"
\");\r\n\r\n var groupText = $(\"
\" +\r\n htmlEncode(col.name) + \"
\")\r\n\r\n groupText.appendTo(entry);\r\n\r\n var groupRemoveIcon = $(\"
\");\r\n if (this.options.deleteIconCssClass)\r\n groupRemoveIcon.addClass(this.options.deleteIconCssClass);\r\n\r\n if (this.options.deleteIconImage)\r\n groupRemoveIcon.css(\"background\", \"url(\" + this.options.deleteIconImage + \") no-repeat center right\");\r\n\r\n if (!this.options.deleteIconCssClass && !this.options.deleteIconImage)\r\n groupRemoveIcon.addClass('slick-groupby-remove-image');\r\n\r\n groupRemoveIcon.appendTo(entry);\r\n\r\n $(\"
\").appendTo(entry);\r\n entry.appendTo(this.dropbox);\r\n\r\n this.columnsGroupBy.push(col);\r\n groupRemoveIcon.one('click', () => this.removeIconClick(col.id, entry));\r\n columnAdded = true;\r\n });\r\n\r\n if (columnAdded) {\r\n this.grid.invalidate();\r\n return true;\r\n }\r\n }\r\n\r\n public setDroppedGroups(idList: string[]) {\r\n this.columnsGroupBy = [];\r\n this.dropbox.find(\".slick-dropped-grouping\").remove();\r\n if (!idList || !idList.length)\r\n return;\r\n for (var i = 0; i < idList.length; i++) {\r\n this.addGroupColumn(idList[i]);\r\n }\r\n this.groupChanged(false);\r\n }\r\n\r\n private removeIconClick(id: string, entry: JQuery) {\r\n entry.remove();\r\n var changed = false;\r\n var idx;\r\n while ((idx = indexOf(this.columnsGroupBy, x => x.id == id)) >= 0) {\r\n this.columnsGroupBy.splice(idx, 1);\r\n changed = true;\r\n }\r\n changed && this.groupChanged(true);\r\n }\r\n\r\n private updateInterface() {\r\n var hasGrouping = !!(this.columnsGroupBy && this.columnsGroupBy.length);\r\n this.collapseAll.toggle(hasGrouping);\r\n this.expandAll.toggle(hasGrouping);\r\n this.dropboxPlaceholder.toggle(!hasGrouping);\r\n }\r\n\r\n private groupChanged(userChange: boolean) {\r\n this.updateInterface();\r\n\r\n if (this.columnsGroupBy.length == 0) {\r\n (this.grid.getData() as any).setGrouping([]);\r\n this.onGroupChanged.notify({ groupColumns: [], userChange });\r\n this.grid.invalidate();\r\n return;\r\n }\r\n\r\n var groupingArray: any[] = [];\r\n this.columnsGroupBy.forEach(function (element) {\r\n groupingArray.push(element.grouping);\r\n });\r\n\r\n (this.grid.getData() as any).setGrouping(groupingArray);\r\n this.grid.invalidate();\r\n this.onGroupChanged.notify({ groupColumns: groupingArray, userChange });\r\n }\r\n\r\n public static setupColumnReorder(grid: Grid, $headers: JQuery,\r\n setupColumnResize: () => void, trigger: (ev: any, p: any) => void) {\r\n $headers.filter(\":ui-sortable\").sortable(\"destroy\");\r\n var $headerDraggableGroupBy = $(grid['getGroupingPanel']());\r\n var columns = grid.getColumns();\r\n var uid = grid['getUID']();\r\n $headers.sortable({\r\n distance: 3,\r\n cursor: \"default\",\r\n tolerance: \"intersection\",\r\n helper: \"clone\",\r\n placeholder: \"slick-sortable-placeholder ui-state-default slick-header-column\",\r\n forcePlaceholderSize: true,\r\n appendTo: \"body\",\r\n start: function (e, ui) {\r\n $(ui.helper).addClass(\"slick-header-column-active\");\r\n },\r\n beforeStop: function (e, ui) {\r\n $(ui.helper).removeClass(\"slick-header-column-active\");\r\n var hasDroppedColumn = $headerDraggableGroupBy\r\n .find(\".slick-dropped-grouping\").length;\r\n if (hasDroppedColumn > 0) {\r\n $headerDraggableGroupBy.find(\".slick-dropped-placeholder\").hide();\r\n $headerDraggableGroupBy.find(\".slick-dropped-grouping\").show();\r\n }\r\n },\r\n stop: function (e) {\r\n if (!grid['getEditorLock']().commitCurrentEdit()) {\r\n $(this).sortable(\"cancel\");\r\n return;\r\n }\r\n\r\n var reorderedIds = $headers.sortable(\"toArray\");\r\n var reorderedColumns = [];\r\n for (var i = 0; i < reorderedIds.length; i++) {\r\n reorderedColumns.push(columns[grid.getColumnIndex(\r\n reorderedIds[i].replace(uid, \"\"))]);\r\n }\r\n grid.setColumns(reorderedColumns);\r\n trigger(grid.onColumnsReordered, {});\r\n e.stopPropagation();\r\n setupColumnResize();\r\n }\r\n });\r\n }\r\n}\r\n\r\ntypeof globalThis != \"undefined\" && globalThis[\"Slick\"] && globalThis[\"Slick\"][\"Plugins\"] && (globalThis.Slick[\"Plugins\"][\"DraggableGrouping\"] = DraggableGroupingPlugin);", "\uFEFFimport { Decorators, EditorUtils, EntityDialog, EntityGrid, FormKeyAttribute, IEditDialog, ItemNameAttribute, PropertyGrid, PropertyGridMode, PropertyGridOptions, SaveRequest, SubDialogHelper, TabsExtensions, TemplatedDialog, ToolButton, ValidationHelper, Widget } from \"@serenity-is/corelib\";\r\nimport { confirmDialog, DeleteResponse, endsWith, Exception, format, getAttributes, getForm, getInstanceType, isEmptyOrNull, LT, notifySuccess, RetrieveRequest, RetrieveResponse, Router, SaveResponse, serviceCall, ServiceOptions, localText, tryGetText, UndeleteRequest, UndeleteResponse, validateOptions, validatorAbortHandler } from \"@serenity-is/corelib/q\";\r\n\r\n/** Auto save types */\r\nexport enum AutoSaveOption {\r\n /** Never auto save */\r\n Never = 0,\r\n /** Automatically save pending changes without asking */\r\n Auto = 1,\r\n /** Ask for confirmation from user to save pending changes */\r\n Confirm = 2\r\n}\r\n\r\n@Decorators.registerClass('Serenity.EntityGridDialog', [IEditDialog])\r\nexport class EntityGridDialog extends EntityGrid {\r\n\r\n protected tabs: JQuery;\r\n protected validator: JQueryValidation.Validator;\r\n declare idPrefix: string;\r\n protected dialogPane: JQuery;\r\n protected entity: TItem;\r\n protected entityId: any;\r\n protected propertyGrid: PropertyGrid;\r\n\r\n protected isDialogOpen: boolean;\r\n protected saveAndCloseButton: JQuery;\r\n protected applyChangesButton: JQuery;\r\n protected deleteButton: JQuery;\r\n protected undeleteButton: JQuery;\r\n protected cloneButton: JQuery;\r\n\r\n protected localizationGrid: PropertyGrid;\r\n protected localizationButton: JQuery;\r\n protected localizationPendingValue: any;\r\n protected localizationLastValue: any;\r\n protected loadedState: string;\r\n protected triedAutoSaveForCurrentEntity: boolean;\r\n\r\n constructor(container: JQuery, opt?: TOptions) {\r\n super(container, opt);\r\n\r\n this.element.on('ondatachange.' + this.uniqueName, () => {\r\n this.subDialogDataChange();\r\n });\r\n\r\n this.element.on('handleroute.' + this.uniqueName, (e, arg) => {\r\n if (arg.handled)\r\n return;\r\n\r\n if (!arg.route && this.isDialogOpen) {\r\n this.dialogClose();\r\n }\r\n });\r\n\r\n $(window).on('resize.' + this.uniqueName, () => {\r\n this.arrange();\r\n });\r\n }\r\n\r\n protected createSlickGrid() {\r\n var slickGrid = super.createSlickGrid();\r\n\r\n this.idPrefix = this.uniqueName + '_DLG_';\r\n\r\n this.element.addClass('s-GridWithDialog');\r\n\r\n this.dialogPane = $(`
`)\r\n .appendTo(this.slickContainer);\r\n\r\n var widgetMarkup = this.getTemplate().replace(new RegExp('~_', 'g'), this.idPrefix);\r\n this.dialogPane.html(widgetMarkup);\r\n\r\n this.initValidator();\r\n this.initTabs();\r\n this.initPropertyGrid();\r\n this.initLocalizationGrid();\r\n return slickGrid;\r\n }\r\n\r\n public destroy(): void {\r\n\r\n $(window).off('resize.' + this.uniqueName);\r\n\r\n if (this.propertyGrid) {\r\n this.propertyGrid.destroy();\r\n this.propertyGrid = null;\r\n }\r\n\r\n if (this.localizationGrid) {\r\n this.localizationGrid.destroy();\r\n this.localizationGrid = null;\r\n }\r\n this.undeleteButton = null;\r\n this.applyChangesButton = null;\r\n this.deleteButton = null;\r\n this.saveAndCloseButton = null;\r\n this.tabs && this.tabs.tabs('destroy');\r\n this.tabs = null;\r\n this.validator && this.byId('Form').remove();\r\n this.validator = null;\r\n super.destroy();\r\n }\r\n\r\n protected getItemCssClass(item: TItem, index: number) {\r\n var klass = super.getItemCssClass(item, index);\r\n\r\n if (this.isDialogOpen && this.entityId == item[this.getIdProperty()]) {\r\n return (klass || \"\") + \" editing-item\";\r\n }\r\n\r\n return klass;\r\n }\r\n\r\n getSaveState() {\r\n try {\r\n return $.toJSON(this.getSaveEntity());\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n protected hasPendingChanges() {\r\n return this.getSaveState() != this.loadedState;\r\n }\r\n\r\n protected autoSaveOnSwitch(): AutoSaveOption {\r\n return AutoSaveOption.Never;\r\n }\r\n\r\n protected autoSaveOnClose(): AutoSaveOption {\r\n return AutoSaveOption.Never;\r\n }\r\n\r\n protected checkPendingChangesOnSwitch(entityOrId: any, proceed: () => void) {\r\n if (this.isDialogOpen &&\r\n (typeof entityOrId == \"number\" || typeof entityOrId == \"string\")) {\r\n\r\n if (entityOrId == this.entityId)\r\n return;\r\n\r\n if (this.autoSaveOnSwitch() && this.hasPendingChanges()) {\r\n\r\n if (this.autoSaveOnSwitch() == AutoSaveOption.Confirm || this.triedAutoSaveForCurrentEntity) {\r\n confirmDialog(localText(\"Site.Dialogs.PendingChangesConfirmation\"),\r\n () => {\r\n this.save(response => {\r\n proceed();\r\n });\r\n },\r\n {\r\n onNo: () => {\r\n this.loadResponse({});\r\n proceed();\r\n }\r\n });\r\n }\r\n else {\r\n this.triedAutoSaveForCurrentEntity = true;\r\n this.save(response => {\r\n proceed();\r\n });\r\n }\r\n\r\n return;\r\n }\r\n }\r\n\r\n proceed();\r\n }\r\n\r\n protected editItem(entityOrId: any) {\r\n this.checkPendingChangesOnSwitch(entityOrId, () => {\r\n super.editItem(entityOrId);\r\n });\r\n }\r\n\r\n protected createEntityDialog(itemType: string, callback?: (dlg: Widget) => void): Widget {\r\n if (itemType == this.getItemType()) {\r\n callback && callback(this);\r\n return this;\r\n }\r\n\r\n return super.createEntityDialog(itemType, callback);\r\n }\r\n\r\n protected layout() {\r\n super.layout();\r\n }\r\n\r\n protected byId(id: string): JQuery {\r\n return $('#' + this.idPrefix + id);\r\n }\r\n\r\n protected getDefaultTemplateName(): string {\r\n return TemplatedDialog.prototype['getDefaultTemplateName'].call(this);\r\n }\r\n\r\n protected getTemplateName(): string {\r\n return TemplatedDialog.prototype['getTemplateName'].call(this);\r\n }\r\n\r\n protected getFallbackTemplate(): string {\r\n return `
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
`;\r\n }\r\n\r\n protected getTemplate(): string {\r\n return TemplatedDialog.prototype['getTemplate'].call(this);\r\n }\r\n\r\n protected getValidatorOptions(): JQueryValidation.ValidationOptions {\r\n return {};\r\n }\r\n\r\n protected initValidator(): void {\r\n var form = this.byId('Form');\r\n if (form.length > 0) {\r\n var valOptions = this.getValidatorOptions();\r\n this.validator = form.validate(validateOptions(valOptions));\r\n }\r\n }\r\n\r\n protected resetValidation() {\r\n this.validator && (this.validator as any).resetAll();\r\n }\r\n\r\n protected validateForm() {\r\n return this.validator == null || !!this.validator.form();\r\n }\r\n\r\n public dialogOpen(): void {\r\n if (!this.isDialogOpen) {\r\n this.element.toggleClass(\"dialog-open\", true);\r\n this.isDialogOpen = true;\r\n this.updateInterface();\r\n this.layout();\r\n this.onDialogOpen();\r\n\r\n Router.dialog(this.element, this.dialogPane, () => this.getEditHash());\r\n this.dialogPane.triggerHandler('panelopen');\r\n }\r\n }\r\n\r\n protected getEditHash() {\r\n if (this.entityId)\r\n return 'edit/' + this.entityId.toString();\r\n else\r\n return 'new';\r\n }\r\n\r\n protected onDialogOpen(): void {\r\n if (!$(document.documentElement).hasClass('mobile-device'))\r\n $(':input', this.dialogPane).not('button').eq(0).focus();\r\n\r\n this.arrange();\r\n this.tabs && this.tabs.tabs('option', 'active', 0);\r\n }\r\n\r\n protected arrange(): void {\r\n if (window.innerWidth < 768) {\r\n this.dialogPane.children('.panel-titlebar')\r\n .prependTo(this.element);\r\n }\r\n else {\r\n this.element.children('.panel-titlebar')\r\n .prependTo(this.dialogPane);\r\n }\r\n\r\n this.dialogPane.find('.require-layout').filter(':visible').each(function (i, e) {\r\n $(e).triggerHandler('layout');\r\n });\r\n }\r\n\r\n protected onDialogClose() {\r\n $(document).trigger('click');\r\n\r\n if (($ as any).qtip) {\r\n $(document.body).children('.qtip').each(function (index, el) {\r\n ($(el) as any).qtip('hide');\r\n });\r\n }\r\n }\r\n\r\n protected getDialogTitle() {\r\n return \"\";\r\n }\r\n\r\n public dialogClose(): void {\r\n if (this.isDialogOpen) {\r\n this.triedAutoSaveForCurrentEntity = false;\r\n this.element.toggleClass(\"dialog-open\", false);\r\n this.isDialogOpen = false;\r\n this.updateInterface();\r\n this.layout();\r\n this.onDialogClose();\r\n this.dialogPane.triggerHandler('panelclose');\r\n }\r\n }\r\n\r\n public get dialogTitle(): string {\r\n return this.element.data('dialogtitle');\r\n }\r\n\r\n public set dialogTitle(value: string) {\r\n var oldTitle = this.dialogTitle;\r\n this.element.data('dialogtitle', value);\r\n if (oldTitle != this.dialogTitle) {\r\n this.setupDialogTitle();\r\n this.arrange();\r\n }\r\n }\r\n\r\n protected setupDialogTitle(): void {\r\n var value = this.dialogTitle ?? this.getDialogTitle();\r\n var pt = this.dialogPane.children('.panel-titlebar')\r\n .add(this.element.children('.panel-titlebar'));\r\n if (isEmptyOrNull(value)) {\r\n pt.remove();\r\n }\r\n else {\r\n if (!pt.length) {\r\n pt = $(\"
\")\r\n .prependTo(this.dialogPane);\r\n }\r\n pt.children('.panel-titlebar-text').text(value);\r\n if (!pt.children('.panel-titlebar-close').length) {\r\n $('')\r\n .prependTo(pt)\r\n .click(e => {\r\n if (this.autoSaveOnClose() && this.hasPendingChanges()) {\r\n e.preventDefault();\r\n\r\n if (this.autoSaveOnClose() == AutoSaveOption.Confirm || this.triedAutoSaveForCurrentEntity) {\r\n confirmDialog(localText(\"Site.Dialogs.PendingChangesConfirmation\"),\r\n () => this.saveAndCloseButton.click(),\r\n {\r\n onNo: () => {\r\n this.dialogClose();\r\n }\r\n });\r\n }\r\n else {\r\n this.triedAutoSaveForCurrentEntity = true;\r\n this.saveAndCloseButton.click();\r\n }\r\n }\r\n else\r\n this.dialogClose();\r\n });\r\n }\r\n }\r\n }\r\n\r\n protected initTabs(): void {\r\n var tabsDiv = this.byId('Tabs');\r\n if (tabsDiv.length === 0) {\r\n return;\r\n }\r\n this.tabs = tabsDiv.tabs({});\r\n this.tabs.bind('tabsactivate', () => this.arrange());\r\n }\r\n\r\n protected get_entity(): TItem {\r\n return this.entity;\r\n }\r\n\r\n protected set_entity(entity: any): void {\r\n this.entity = entity || new Object();\r\n }\r\n\r\n protected get_entityId(): any {\r\n return this.entityId;\r\n }\r\n\r\n protected set_entityId(value: any) {\r\n this.entityId = value;\r\n }\r\n\r\n protected getEntityNameFieldValue(): any {\r\n return (this.get_entity()[this.getNameProperty()] ?? '').toString();\r\n }\r\n\r\n protected getEntityTitle(): string {\r\n if (!this.isEditMode()) {\r\n return format(localText('Controls.EntityDialog.NewRecordTitle'), this.getEntitySingular());\r\n }\r\n else {\r\n var title = this.getEntityNameFieldValue() ?? '';\r\n return format(localText('Controls.EntityDialog.EditRecordTitle'),\r\n this.getEntitySingular(), (isEmptyOrNull(title) ? '' : (' (' + title + ')')));\r\n }\r\n }\r\n\r\n protected updateTitle(): void {\r\n this.dialogTitle = this.getEntityTitle();\r\n }\r\n\r\n protected isCloneMode(): boolean {\r\n return false;\r\n }\r\n\r\n protected isEditMode(): boolean {\r\n return this.get_entityId() != null && !this.isCloneMode();\r\n }\r\n\r\n protected isDeleted(): boolean {\r\n return EntityDialog.prototype[\"isDeleted\"].apply(this, arguments);\r\n }\r\n\r\n protected isNew(): boolean {\r\n return this.get_entityId() == null;\r\n }\r\n\r\n protected isNewOrDeleted(): boolean {\r\n return this.isNew() || this.isDeleted();\r\n }\r\n\r\n protected getDeleteOptions(callback: (response: DeleteResponse) => void): ServiceOptions {\r\n return {};\r\n }\r\n\r\n protected deleteHandler(options: ServiceOptions, callback: (response: DeleteResponse) => void): void {\r\n serviceCall(options);\r\n }\r\n\r\n protected doDelete(callback: (response: DeleteResponse) => void): void {\r\n return EntityDialog.prototype[\"doDelete\"].apply(this, arguments);\r\n }\r\n\r\n protected onDeleteSuccess(response: DeleteResponse): void {\r\n return EntityDialog.prototype[\"onDeleteSuccess\"].apply(this, arguments);\r\n }\r\n\r\n protected attrs(attrType: { new(...args: any[]): TAttr }): TAttr[] {\r\n return getAttributes(getInstanceType(this), attrType, true);\r\n }\r\n\r\n protected getEntityType(): string {\r\n\r\n var name = super.getEntityType();\r\n if (endsWith(name, 'Grid')) {\r\n this['entityType'] = name = name.substr(0, name.length - 4);\r\n }\r\n\r\n return name;\r\n }\r\n\r\n private formKey: string;\r\n\r\n protected getFormKey(): string {\r\n if (this.formKey != null)\r\n return this.formKey;\r\n\r\n var attributes = this.attrs(FormKeyAttribute);\r\n\r\n if (attributes.length >= 1)\r\n return (this.formKey = attributes[0].value);\r\n\r\n return (this.formKey = this.getEntityType());\r\n }\r\n\r\n private entitySingular: string;\r\n\r\n protected getEntitySingular(): string {\r\n if (this.entitySingular != null)\r\n return this.entitySingular;\r\n\r\n var attributes = this.attrs(ItemNameAttribute);\r\n\r\n if (attributes.length >= 1) {\r\n this.entitySingular = attributes[0].value;\r\n this.entitySingular = LT.getDefault(this.entitySingular, this.entitySingular);\r\n }\r\n else {\r\n var es = tryGetText(this.getLocalTextDbPrefix() + 'EntitySingular');\r\n if (es == null)\r\n es = this.getEntityType();\r\n this.entitySingular = es;\r\n }\r\n\r\n return this.entitySingular;\r\n }\r\n\r\n protected getNameProperty(): string {\r\n return EntityDialog.prototype[\"getNameProperty\"].apply(this, arguments);\r\n }\r\n\r\n protected getIsDeletedProperty(): string {\r\n return EntityDialog.prototype[\"getIsDeletedProperty\"].apply(this, arguments);\r\n }\r\n\r\n load(entityOrId: any, done: () => void, fail: (ex: Exception) => void): void {\r\n return EntityDialog.prototype.load.call(this, entityOrId, done, fail);\r\n }\r\n\r\n loadNewAndOpenDialog(): void {\r\n this.loadResponse({});\r\n this.dialogOpen();\r\n }\r\n\r\n loadEntityAndOpenDialog(entity: TItem, asPanel?: boolean): void {\r\n this.loadResponse({ Entity: entity });\r\n this.dialogOpen();\r\n }\r\n\r\n protected loadResponse(data: any): void {\r\n var oldEntityId = this.entityId;\r\n data = data || {};\r\n this.onLoadingData(data);\r\n var entity = data.Entity || new Object();\r\n this.beforeLoadEntity(entity);\r\n this.loadEntity(entity);\r\n this.set_entity(entity);\r\n this.afterLoadEntity();\r\n if (this.isDialogOpen && oldEntityId != this.entityId)\r\n Router.replaceLast(this.getEditHash(), true);\r\n\r\n if (this.autoSaveOnClose() ||\r\n this.autoSaveOnSwitch()) {\r\n this.triedAutoSaveForCurrentEntity = false;\r\n this.loadedState = this.getSaveState();\r\n }\r\n }\r\n\r\n protected loadEntity(entity: TItem): void {\r\n var idField = this.getIdProperty();\r\n\r\n if (idField != null)\r\n this.set_entityId(entity[idField]);\r\n\r\n this.set_entity(entity);\r\n\r\n if (this.propertyGrid != null) {\r\n this.propertyGrid.set_mode((this.isEditMode() ?\r\n PropertyGridMode.update : PropertyGridMode.insert));\r\n this.propertyGrid.load(entity);\r\n }\r\n }\r\n\r\n protected beforeLoadEntity(entity: TItem): void {\r\n this.localizationPendingValue = null;\r\n this.localizationLastValue = null;\r\n }\r\n\r\n protected afterLoadEntity(): void {\r\n this.updateInterface();\r\n this.updateTitle();\r\n this.slickGrid.invalidate();\r\n }\r\n\r\n public loadByIdAndOpenDialog(entityId: any) {\r\n this.loadById(entityId,\r\n response => window.setTimeout(() => this.dialogOpen(), 0),\r\n () => {\r\n if (!this.element.is(':visible')) {\r\n this.element.remove();\r\n }\r\n });\r\n }\r\n\r\n protected onLoadingData(data: RetrieveResponse): void {\r\n }\r\n\r\n protected getLoadByIdOptions(id: any, callback: (response: RetrieveResponse) => void): ServiceOptions> {\r\n return {};\r\n }\r\n\r\n protected getLoadByIdRequest(id: any): RetrieveRequest {\r\n var request: RetrieveRequest = {};\r\n request.EntityId = id;\r\n return request;\r\n }\r\n\r\n protected reloadById(): void {\r\n this.loadById(this.get_entityId());\r\n }\r\n\r\n loadById(id: any, callback?: (response: RetrieveResponse) => void, fail?: () => void): void {\r\n return EntityDialog.prototype[\"loadById\"].apply(this, arguments);\r\n }\r\n\r\n protected loadByIdHandler(options: ServiceOptions>, callback: (response: RetrieveResponse) => void, fail: () => void): void {\r\n return EntityDialog.prototype[\"loadByIdHandler\"].apply(this, arguments);\r\n }\r\n\r\n protected initLocalizationGrid(): void {\r\n return EntityDialog.prototype[\"initLocalizationGrid\"].apply(this, arguments);\r\n }\r\n\r\n protected initLocalizationGridCommon(pgOptions: PropertyGridOptions): void {\r\n return EntityDialog.prototype[\"initLocalizationGridCommon\"].apply(this, arguments);\r\n }\r\n\r\n protected isLocalizationMode(): boolean {\r\n return this.localizationButton != null && this.localizationButton.hasClass('pressed');\r\n }\r\n\r\n protected isLocalizationModeAndChanged(): boolean {\r\n return EntityDialog.prototype[\"isLocalizationModeAndChanged\"].apply(this, arguments);\r\n }\r\n\r\n protected localizationButtonClick(): void {\r\n return EntityDialog.prototype[\"localizationButtonClick\"].apply(this, arguments);\r\n }\r\n\r\n protected getLanguages(): any[] {\r\n return EntityDialog.prototype[\"getLanguages\"].apply(this, arguments);\r\n }\r\n\r\n protected loadLocalization(): void {\r\n EntityDialog.prototype[\"loadLocalization\"].apply(this, arguments);\r\n }\r\n\r\n protected setLocalizationGridCurrentValues(): void {\r\n EntityDialog.prototype[\"setLocalizationGridCurrentValues\"].apply(this, arguments);\r\n }\r\n\r\n protected getLocalizationGridValue(): any {\r\n return EntityDialog.prototype[\"getLocalizationGridValue\"].apply(this, arguments);\r\n }\r\n\r\n protected getPendingLocalizations(): any {\r\n return EntityDialog.prototype[\"getPendingLocalizations\"].apply(this, arguments);\r\n }\r\n\r\n protected initPropertyGrid(): void {\r\n var pgDiv = this.byId('PropertyGrid');\r\n if (pgDiv.length <= 0) {\r\n return;\r\n }\r\n var pgOptions = this.getPropertyGridOptions();\r\n this.propertyGrid = (new PropertyGrid(pgDiv, pgOptions)).init(null);\r\n if (this.element.closest('.ui-dialog').hasClass('s-Flexify')) {\r\n this.propertyGrid.element.children('.categories').flexHeightOnly(1);\r\n }\r\n }\r\n\r\n protected getFormPropertyItems() {\r\n var formKey = this.getFormKey();\r\n return getForm(formKey);\r\n }\r\n\r\n protected getPropertyGridOptions(): PropertyGridOptions {\r\n return {\r\n idPrefix: this.idPrefix,\r\n items: this.getFormPropertyItems(),\r\n mode: PropertyGridMode.insert,\r\n localTextPrefix: 'Forms.' + this.getFormKey() + '.',\r\n useCategories: true\r\n };\r\n }\r\n\r\n protected validateBeforeSave(): boolean {\r\n return true;\r\n }\r\n\r\n protected getSaveOptions(callback: (response: SaveResponse) => void): ServiceOptions {\r\n\r\n var opt: ServiceOptions = {};\r\n\r\n opt.service = this.getService() + '/' + (this.isEditMode() ? 'Update' : 'Create'),\r\n\r\n opt.onSuccess = response => {\r\n this.triedAutoSaveForCurrentEntity = false;\r\n this.onSaveSuccess(response);\r\n\r\n callback && callback(response);\r\n\r\n var typ = (this.isEditMode() ? 'update' : 'create');\r\n\r\n var ent = opt.request == null ? null : opt.request.Entity;\r\n var eid: any = this.isEditMode() ? this.get_entityId() :\r\n (response == null ? null : response.EntityId);\r\n\r\n var dci = {\r\n type: typ,\r\n entity: ent,\r\n entityId: eid\r\n };\r\n\r\n this.element.triggerHandler('ondatachange', [dci]);\r\n };\r\n\r\n opt.onCleanup = () => {\r\n this.validator && validatorAbortHandler(this.validator);\r\n };\r\n\r\n opt.request = this.getSaveRequest();\r\n\r\n return opt;\r\n }\r\n\r\n protected getSaveEntity(): TItem {\r\n\r\n var entity: TItem = new Object() as any;\r\n\r\n if (this.propertyGrid != null) {\r\n this.propertyGrid.save(entity);\r\n }\r\n\r\n if (this.isEditMode()) {\r\n var idField = this.getIdProperty();\r\n if (idField != null && entity[idField] == null) {\r\n entity[idField] = this.get_entityId();\r\n }\r\n }\r\n\r\n return entity;\r\n }\r\n\r\n protected getSaveRequest(): SaveRequest {\r\n\r\n var entity = this.getSaveEntity();\r\n var req: SaveRequest = {};\r\n req.Entity = entity;\r\n\r\n if (this.isEditMode()) {\r\n var idField = this.getIdProperty();\r\n if (idField != null) {\r\n req.EntityId = this.get_entityId();\r\n }\r\n }\r\n\r\n if (this.localizationPendingValue != null) {\r\n req.Localizations = this.getPendingLocalizations();\r\n }\r\n\r\n return req;\r\n }\r\n\r\n protected onSaveSuccess(response: SaveResponse): void {\r\n }\r\n\r\n protected save_submitHandler(callback: (response: SaveResponse) => void): void {\r\n var options = this.getSaveOptions(callback);\r\n this.saveHandler(options, callback);\r\n }\r\n\r\n protected save(callback?: (response: SaveResponse) => void): void | boolean {\r\n return ValidationHelper.submit(this.byId('Form'),\r\n () => this.validateBeforeSave(),\r\n () => this.save_submitHandler(callback));\r\n }\r\n\r\n protected saveHandler(options: ServiceOptions,\r\n callback: (response: SaveResponse) => void): void {\r\n serviceCall(options);\r\n }\r\n\r\n protected createToolbar(buttons: ToolButton[]) {\r\n\r\n super.createToolbar(buttons);\r\n\r\n if (!this.toolbar)\r\n return;\r\n\r\n this.saveAndCloseButton = this.toolbar.findButton('save-and-close-button').hide();\r\n this.saveAndCloseButton.prev('.separator').addClass('dialog-button-separator');\r\n this.applyChangesButton = this.toolbar.findButton('apply-changes-button').hide();\r\n this.deleteButton = this.toolbar.findButton('delete-button').hide();\r\n this.undeleteButton = this.toolbar.findButton('undo-delete-button').hide();\r\n this.cloneButton = this.toolbar.findButton('clone-button').hide();\r\n this.localizationButton = this.toolbar.findButton('localization-button').hide();\r\n }\r\n\r\n protected showSaveSuccessMessage(response: SaveResponse): void {\r\n notifySuccess(localText('Controls.EntityDialog.SaveSuccessMessage'), '', null);\r\n }\r\n\r\n protected getButtons(): ToolButton[] {\r\n\r\n var list = super.getButtons();\r\n\r\n list.push({\r\n title: localText('Controls.EntityDialog.SaveButton'),\r\n cssClass: 'save-and-close-button dialog-button',\r\n icon: 'fa-check-circle text-purple',\r\n hotkey: 'alt+s',\r\n separator: true,\r\n onClick: () => {\r\n this.save(response => {\r\n this.dialogClose();\r\n });\r\n },\r\n visible: () => !!this.isDialogOpen && !this.isDeleted() && !this.isViewMode(),\r\n disabled: () => !this.hasSavePermission() || this.readOnly,\r\n });\r\n\r\n list.push({\r\n title: '',\r\n hint: localText('Controls.EntityDialog.ApplyChangesButton'),\r\n cssClass: 'apply-changes-button dialog-button',\r\n hotkey: 'alt+a',\r\n icon: 'fa-clipboard-check text-purple',\r\n onClick: () => {\r\n this.save(response1 => {\r\n\r\n if (this.isEditMode()) {\r\n var id1 = response1.EntityId;\r\n if (id1 == null) {\r\n id1 = this.get_entityId();\r\n }\r\n this.loadById(id1);\r\n }\r\n else {\r\n this.loadById(response1.EntityId);\r\n }\r\n\r\n this.showSaveSuccessMessage(response1);\r\n });\r\n },\r\n visible: () => !!this.isDialogOpen && !this.isDeleted() && !this.isViewMode(),\r\n disabled: () => !this.hasSavePermission() || this.readOnly\r\n });\r\n\r\n list.push({\r\n title: localText('Controls.EntityDialog.DeleteButton'),\r\n cssClass: 'delete-button dialog-button',\r\n icon: 'fa-trash-o text-red',\r\n hotkey: 'alt+x',\r\n onClick: () => {\r\n confirmDialog(localText('Controls.EntityDialog.DeleteConfirmation'), () => {\r\n this.doDelete(() => this.dialogClose());\r\n });\r\n },\r\n visible: () => !!this.isDialogOpen && this.isEditMode() && !this.isDeleted() && !this.isViewMode(),\r\n disabled: () => !this.hasDeletePermission() || this.readOnly\r\n });\r\n\r\n list.push({\r\n title: localText('Controls.EntityDialog.UndeleteButton'),\r\n cssClass: 'undo-delete-button dialog-button',\r\n onClick: () => {\r\n if (this.isDeleted()) {\r\n confirmDialog(localText('Controls.EntityDialog.UndeleteConfirmation'), () => {\r\n this.undelete(() => this.loadById(this.get_entityId()));\r\n });\r\n }\r\n },\r\n visible: () => !!this.isDialogOpen && this.isEditMode() && this.isDeleted() && !this.isViewMode(),\r\n disabled: () => !this.hasDeletePermission() || this.readOnly\r\n });\r\n\r\n list.push({\r\n title: localText('Controls.EntityDialog.LocalizationButton'),\r\n cssClass: 'localization-button dialog-button',\r\n onClick: () => this.localizationButtonClick()\r\n });\r\n\r\n list.push({\r\n title: localText('Controls.EntityDialog.CloneButton'),\r\n cssClass: 'clone-button dialog-button',\r\n icon: 'fa-clone',\r\n onClick: () => {\r\n\r\n if (!this.isEditMode()) {\r\n return;\r\n }\r\n\r\n var cloneEntity = this.getCloningEntity();\r\n\r\n Widget.create({\r\n type: getInstanceType(this),\r\n init: w => SubDialogHelper.bubbleDataChange(\r\n SubDialogHelper.cascade(w, this.element), this, true)\r\n .loadEntityAndOpenDialog(cloneEntity, null)\r\n });\r\n },\r\n visible: () => false,\r\n disabled: () => !this.hasInsertPermission() || this.readOnly\r\n });\r\n\r\n return list;\r\n }\r\n\r\n protected getCloningEntity(): TItem {\r\n return EntityDialog.prototype[\"getCloningEntity\"].apply(this, arguments);\r\n }\r\n\r\n protected updateInterface(): void {\r\n\r\n EditorUtils.setContainerReadOnly(this.dialogPane, false);\r\n\r\n var isOpen = !!this.isDialogOpen;\r\n var isLocalizationMode = this.isLocalizationMode();\r\n var hasSavePermission = this.hasSavePermission();\r\n var viewMode = this.isViewMode();\r\n var readOnly = this.readOnly;\r\n\r\n this.toolbar?.updateInterface();\r\n\r\n if (this.tabs != null) {\r\n TabsExtensions.setDisabled(this.tabs, 'Log', !isOpen || this.isNewOrDeleted());\r\n }\r\n\r\n if (this.propertyGrid != null) {\r\n this.propertyGrid.element.toggle(isOpen && !isLocalizationMode);\r\n }\r\n\r\n if (this.localizationGrid != null) {\r\n this.localizationGrid.element.toggle(isOpen && isLocalizationMode);\r\n }\r\n\r\n if (this.localizationButton != null) {\r\n this.localizationButton.toggle(this.localizationGrid != null);\r\n this.localizationButton.find('.button-inner')\r\n .text((this.isLocalizationMode() ?\r\n localText('Controls.EntityDialog.LocalizationBack') :\r\n localText('Controls.EntityDialog.LocalizationButton')));\r\n }\r\n\r\n if (isLocalizationMode && isOpen) {\r\n\r\n if (this.toolbar != null)\r\n this.toolbar.findButton('tool-button')\r\n .not('.localization-hidden')\r\n .addClass('.localization-hidden').hide();\r\n\r\n this.localizationButton && this.localizationButton.show();\r\n\r\n return;\r\n }\r\n\r\n this.toolbar.findButton('localization-hidden')\r\n .removeClass('localization-hidden').show();\r\n\r\n if (!hasSavePermission || viewMode || readOnly)\r\n EditorUtils.setContainerReadOnly(this.byId(\"Form\"), true);\r\n }\r\n\r\n protected getUndeleteOptions(callback?: (response: UndeleteResponse) => void): ServiceOptions {\r\n return EntityDialog.prototype[\"getUndeleteOptions\"].apply(this, arguments);\r\n }\r\n\r\n protected undeleteHandler(options: ServiceOptions, callback: (response: UndeleteResponse) => void): void {\r\n return EntityDialog.prototype[\"undeleteHandler\"].apply(this, arguments);\r\n }\r\n\r\n protected undelete(callback?: (response: UndeleteResponse) => void): void {\r\n return EntityDialog.prototype[\"undelete\"].apply(this, arguments);\r\n }\r\n\r\n protected getInsertPermission(): string {\r\n return EntityDialog.prototype[\"getInsertPermission\"].apply(this, arguments);\r\n }\r\n\r\n protected getUpdatePermission(): string {\r\n return EntityDialog.prototype[\"getUpdatePermission\"].apply(this, arguments);\r\n }\r\n\r\n protected getDeletePermission(): string {\r\n return EntityDialog.prototype[\"getDeletePermission\"].apply(this, arguments);\r\n }\r\n\r\n protected hasDeletePermission() {\r\n return EntityDialog.prototype[\"hasDeletePermission\"].apply(this, arguments);\r\n }\r\n\r\n protected hasInsertPermission() {\r\n return EntityDialog.prototype[\"hasInsertPermission\"].apply(this, arguments);\r\n }\r\n\r\n protected hasUpdatePermission() {\r\n return EntityDialog.prototype[\"hasUpdatePermission\"].apply(this, arguments);\r\n }\r\n\r\n protected hasSavePermission(): boolean {\r\n return EntityDialog.prototype[\"hasSavePermission\"].apply(this, arguments);\r\n }\r\n\r\n protected editClicked: boolean;\r\n\r\n protected isViewMode() {\r\n return EntityDialog.prototype[\"isViewMode\"].apply(this, arguments);\r\n }\r\n\r\n protected useViewMode() {\r\n return EntityDialog.prototype[\"useViewMode\"].apply(this, arguments);\r\n }\r\n}", "\uFEFFimport { DataGrid, SettingStorage } from \"@serenity-is/corelib\";\r\nimport { htmlEncode, format, notifySuccess, notifyWarning, localText, trimToNull } from \"@serenity-is/corelib/q\";\r\n\r\n/**\r\n * A mixin that can be applied to a DataGrid for favorite views functionality\r\n */\r\nexport class FavoriteViewsMixin {\r\n\r\n private dataGrid: DataGrid;\r\n private ul: JQuery;\r\n\r\n constructor(private options: FavoriteViewsMixinOptions) {\r\n var dg = this.dataGrid = options.grid;\r\n\r\n var dropdown = $(`\r\n
\r\n \r\n
    \r\n
  • \r\n
    ${htmlEncode(localText(\"Site.FavoriteViewsMixin.SaveView\"))}
    \r\n
    \r\n
    \r\n
  • \r\n
\r\n
\r\n`)\r\n .prependTo(dg.element.find(\".grid-title\"));\r\n\r\n dropdown.on('shown.bs.dropdown', e => {\r\n dropdown.find('input[type=text]').focus();\r\n });\r\n\r\n var viewName = dropdown.find('li.save input[type=text]');\r\n\r\n dropdown.find('button.save-button').click(() => {\r\n var name = trimToNull(viewName.val());\r\n if (!name) {\r\n notifyWarning(localText(\"Site.FavoriteViewsMixin.EmptyNameError\"));\r\n return;\r\n }\r\n\r\n var favorites = this.getFavorites();\r\n favorites[name] = (dg as any).getCurrentSettings();\r\n this.saveFavorites(favorites);\r\n notifySuccess(format(localText(\"Site.FavoriteViewsMixin.SaveSuccessMessage\"), name));\r\n viewName.val('');\r\n this.populateFavorites();\r\n });\r\n\r\n this.ul = dropdown.children(\"ul\");\r\n this.ul.on('click', 'i.fa-trash-o', e => {\r\n var name = $(e.target).closest('li').children('a').text();\r\n var favorites = this.getFavorites();\r\n delete favorites[name];\r\n this.saveFavorites(favorites);\r\n this.populateFavorites();\r\n notifyWarning(format(localText(\"Site.FavoriteViewsMixin.DeleteSuccessMessage\"), name));\r\n });\r\n\r\n this.ul.on('click', 'a', e => {\r\n var name = $(e.target).text();\r\n var favorites = this.getFavorites();\r\n var settings = favorites[name];\r\n if (settings) {\r\n (dg as any).restoreSettings(settings);\r\n dg.refresh();\r\n notifySuccess(format(localText(\"Site.FavoriteViewsMixin.LoadedViewMessage\"), name));\r\n }\r\n });\r\n\r\n this.populateFavorites();\r\n }\r\n\r\n private populateFavorites() {\r\n var favorites = this.getFavorites();\r\n\r\n var saveLI = this.ul.children('.save');\r\n this.ul.children().not(saveLI).remove();\r\n\r\n var keys = Object.keys(favorites).sort();\r\n if (keys.length) {\r\n for (var k of keys) {\r\n var li = $('
  • ')\r\n .insertBefore(saveLI)\r\n .children('a')\r\n .text(k)\r\n .end();\r\n\r\n $('')\r\n .attr('title', localText(\"Site.FavoriteViewsMixin.DeleteButtonHint\"))\r\n .appendTo(li);\r\n }\r\n\r\n $('
  • ').insertBefore(saveLI);\r\n }\r\n }\r\n\r\n private saveFavorites(favorites: object) {\r\n var storage = (this.dataGrid as any).getPersistanceStorage() as SettingStorage;\r\n var key = \"Views:\" + (this.dataGrid as any).getPersistanceKey();\r\n storage.setItem(key, JSON.stringify(favorites));\r\n }\r\n\r\n private getFavorites() {\r\n var storage = (this.dataGrid as any).getPersistanceStorage() as SettingStorage;\r\n var key = \"Views:\" + (this.dataGrid as any).getPersistanceKey();\r\n return JSON.parse(storage.getItem(key) || \"{}\") || {};\r\n }\r\n}\r\n\r\nexport interface FavoriteViewsMixinOptions {\r\n // data grid object\r\n grid: DataGrid;\r\n}", "\uFEFFimport { DataGrid, ListRequest, ListResponse, Criteria } from \"@serenity-is/corelib\";\r\nimport { deepClone, serviceCall } from \"@serenity-is/corelib/q\";\r\nimport { Column } from \"@serenity-is/sleekgrid\";\r\nimport { HeaderFiltersPlugin, HeaderFilterType } from \"./HeaderFiltersPlugin\";\r\n\r\nexport interface HeadersFiltersMixinOptions {\r\n grid: DataGrid;\r\n filterByText?: boolean;\r\n}\r\n\r\n/**\r\n * A mixin that can be applied to a DataGrid for column filters functionality\r\n */\r\nexport class HeaderFiltersMixin {\r\n\r\n private filterByText: boolean;\r\n\r\n constructor(options: HeadersFiltersMixinOptions) {\r\n \r\n var skipColumnFilters: Column = null;\r\n var cache: any = {};\r\n\r\n if (options.filterByText == null) {\r\n this.filterByText = !options.grid.view.url || \r\n !options.grid.view['getPagingInfo']().rowsPerPage;\r\n }\r\n else\r\n this.filterByText = !!options.filterByText;\r\n\r\n var filterPlugin = new HeaderFiltersPlugin({\r\n getFilterType: (col: Column) => {\r\n if (this.filterByText)\r\n return HeaderFilterType.text;\r\n\r\n if (col.sortable != null && !col.sortable)\r\n return HeaderFilterType.disabled;\r\n\r\n if (col.sourceItem != null && \r\n col.sourceItem.notFilterable != null &&\r\n col.sourceItem.notFilterable)\r\n return HeaderFilterType.disabled;\r\n\r\n return HeaderFilterType.value;\r\n },\r\n getFilterValues: (col: Column, done: (vals: any[]) => void) => {\r\n if (col.headerFilterType == HeaderFilterType.text)\r\n return done(null);\r\n\r\n skipColumnFilters = col;\r\n try {\r\n if (!(options.grid as any).onViewSubmit()) {\r\n done([]);\r\n return;\r\n }\r\n }\r\n finally {\r\n skipColumnFilters = null;\r\n }\r\n\r\n var req = deepClone(options.grid.view.params) as ListRequest;\r\n req.DistinctFields = [col.field];\r\n req.Skip = 0;\r\n req.Take = 0;\r\n var cacheKey = $.toJSON(req);\r\n var cached = cache[cacheKey];\r\n if (cached && cached.expires > new Date().getTime())\r\n done(cached.value);\r\n else {\r\n serviceCall({\r\n request: req,\r\n url: options.grid.view.url,\r\n onSuccess: (response: ListResponse) => {\r\n cache[cacheKey] = {\r\n value: response.Values,\r\n expires: new Date().getTime() + 1000 * 30\r\n };\r\n done(response.Values);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n filterPlugin.onFilterApplied.subscribe((e, data) => {\r\n var column = data.column as Column;\r\n if (column && column.headerFilterType == HeaderFilterType.text)\r\n options.grid.view.setItems(options.grid.view.getItems(), true);\r\n else\r\n options.grid.refresh();\r\n });\r\n\r\n options.grid.slickGrid.registerPlugin(filterPlugin);\r\n\r\n var me = this;\r\n\r\n var oldOnViewSubmit = (options.grid as any).onViewSubmit;\r\n (options.grid as any).onViewSubmit = function () {\r\n if (!oldOnViewSubmit.call(this))\r\n return false;\r\n\r\n var cols = this.slickGrid.getColumns() as Column[];\r\n var request = (this.view.params as ListRequest);\r\n for (var col of cols) {\r\n if (col === skipColumnFilters ||\r\n col.headerFilterType == HeaderFilterType.text)\r\n continue;\r\n\r\n var vals = col.headerFilterValues;\r\n if (vals && vals.length) {\r\n var nonNull = vals.filter((z: any) => z != null);\r\n var criteria = [[col.field], 'in', [nonNull]];\r\n if (nonNull.length !== vals.length) {\r\n if (nonNull.length > 0)\r\n criteria = Criteria.or(['is null', [col.field]], criteria);\r\n else\r\n criteria = ['is null', [col.field]];\r\n }\r\n\r\n request.Criteria = Criteria.and(request.Criteria, criteria);\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n var oldOnViewFilter = (options.grid as any).onViewFilter;\r\n (options.grid as any).onViewFilter = function (item: any) {\r\n if (!oldOnViewFilter.apply(this, arguments))\r\n return false;\r\n\r\n var cols = this.slickGrid.getColumns() as Column[];\r\n for (var col of cols) {\r\n if (col.headerFilterType != HeaderFilterType.text)\r\n continue;\r\n\r\n var vals = col.headerFilterValues;\r\n if (vals && vals.length) {\r\n var filterValue = filterPlugin.getFilterValue(item, col);\r\n if (vals.indexOf(filterValue) < 0)\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n}", "\uFEFFimport { htmlEncode, tryGetText } from \"@serenity-is/corelib/q\";\r\nimport { RemoteView } from \"@serenity-is/corelib/slick\";\r\nimport { Column, EventEmitter, EventSubscriber, Grid } from \"@serenity-is/sleekgrid\";\r\n\r\nexport enum HeaderFilterType {\r\n disabled = 0,\r\n value = 1,\r\n text = 2\r\n}\r\n\r\ndeclare module \"@serenity-is/sleekgrid\" {\r\n interface Column {\r\n headerFilterType?: HeaderFilterType;\r\n headerFilterValues?: object[];\r\n }\r\n}\r\n\r\n/*\r\n Based on SlickGrid Header Menu Plugin (https://github.com/mleibman/SlickGrid/blob/master/plugins/slick.headermenu.js)\r\n Based on SlickGrid Spreadsheet Plugins (https://github.com/danny-sg/slickgrid-spreadsheet-plugins/blob/master/ext.headerfilter.js)\r\n (Can't be used at the same time as the header menu plugin as it implements the dropdown in the same way)\r\n*/\r\n\r\nexport interface HeaderFiltersOptions {\r\n buttonImage?: string;\r\n buttonClass?: string;\r\n useColumnFormatter?: boolean;\r\n getFilterValues?: (column: Column, callback: (values: object[], texts?: string[]) => void) => void;\r\n getFilterType?: (column: Column) => HeaderFilterType;\r\n}\r\n\r\nexport class HeaderFiltersPlugin {\r\n\r\n private grid: Grid;\r\n private menu: JQuery;\r\n private searchInput: JQuery;\r\n private handler: EventSubscriber;\r\n private options: HeaderFiltersOptions;\r\n private checkedValues : any = new window['Set']();\r\n private filterValues: object[];\r\n private filterTexts: string[];\r\n public onFilterApplied = new EventEmitter();\r\n public onCommand = new EventEmitter();\r\n\r\n constructor(options: HeaderFiltersOptions) {\r\n this.handler = new EventSubscriber();\r\n\r\n var defaults: HeaderFiltersOptions = {\r\n buttonClass: \"headerfilterbutton\",\r\n useColumnFormatter: true,\r\n getFilterValues: null\r\n };\r\n\r\n this.options = $.extend(true, {}, defaults, options);\r\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\r\n }\r\n \r\n init(g: Grid) {\r\n \r\n this.grid = g;\r\n this.handler.subscribe(g.onHeaderCellRendered, this.handleHeaderCellRendered.bind(this))\r\n .subscribe(g.onBeforeHeaderCellDestroy, this.handleBeforeHeaderCellDestroy.bind(this))\r\n .subscribe(g.onClick, this.handleBodyMouseDown.bind(this))\r\n .subscribe(g.onColumnsResized, this.columnsResized.bind(this));\r\n\r\n g.setColumns(g.getColumns());\r\n\r\n $(document.body).bind(\"mousedown\", this.handleBodyMouseDown = this.handleBodyMouseDown.bind(this));\r\n }\r\n\r\n destroy() {\r\n this.handler.unsubscribeAll();\r\n $(document.body).unbind(\"mousedown\", this.handleBodyMouseDown);\r\n }\r\n\r\n getFilterType(column: Column) {\r\n if (column.headerFilterType != null)\r\n return column.headerFilterType;\r\n\r\n if (this.options.getFilterType != null) {\r\n column.headerFilterType = this.options.getFilterType(column);\r\n if (column.headerFilterType != null)\r\n return column.headerFilterType;\r\n }\r\n\r\n if (column.headerFilterType == null)\r\n column.headerFilterType = HeaderFilterType.value;\r\n\r\n return column.headerFilterType;\r\n }\r\n\r\n private handleBodyMouseDown(e: any) {\r\n if (this.menu && this.menu[0] != e.target && !$.contains(this.menu[0], e.target)) {\r\n this.hideMenu();\r\n }\r\n }\r\n\r\n private hideMenu() {\r\n if (this.menu) {\r\n this.menu.remove();\r\n this.menu = null;\r\n }\r\n }\r\n\r\n private handleHeaderCellRendered(e: any, args: any) {\r\n var column = args.column as Column;\r\n\r\n var filterType = this.getFilterType(column);\r\n if (filterType === HeaderFilterType.disabled)\r\n return false;\r\n\r\n var $el = $(\"\")\r\n .addClass(\"slick-header-menubutton s-header-filter-button\")\r\n .data(\"column\", column);\r\n\r\n if (this.options.buttonImage) {\r\n $el.css(\"background-image\", \"url(\" + this.options.buttonImage + \")\");\r\n }\r\n\r\n this.setButtonIsFiltered($el, column.headerFilterValues != null && column.headerFilterValues.length > 0);\r\n\r\n $(args.node).addClass('has-header-menubutton');\r\n $el.on(\"click\", e => {\r\n e.stopPropagation();\r\n this.showFilter(e);\r\n }).appendTo(args.node);\r\n }\r\n\r\n private handleBeforeHeaderCellDestroy(e: any, args: any) {\r\n $(args.node)\r\n .find(\".s-header-filter-button\")\r\n .remove();\r\n }\r\n\r\n private addMenuItem(menu: JQuery, columnDef: Column, title: string, command: string, image: string) {\r\n var $item = $(\"
    \")\r\n .data(\"command\", command)\r\n .data(\"column\", columnDef)\r\n .bind(\"click\", this.handleMenuItemClick)\r\n .appendTo(menu);\r\n\r\n var $icon = $(\"
    \")\r\n .appendTo($item);\r\n\r\n if (image) {\r\n $icon.css(\"background-image\", \"url(\" + image + \")\");\r\n }\r\n\r\n $(\"\")\r\n .text(title)\r\n .appendTo($item);\r\n }\r\n\r\n private addSearchInput(menu: JQuery, columnDef: Column) {\r\n return $('')\r\n .data(\"column\", columnDef)\r\n .bind(\"keyup\", (e) => {\r\n this.updateFilterValues(columnDef, () => {});\r\n })\r\n .appendTo(menu);\r\n }\r\n\r\n private updateFilterItems(columnDef: Column) {\r\n var filterOptions = \"\";\r\n\r\n this.checkedValues = new window['Set'](columnDef.headerFilterValues || []);\r\n\r\n for (var i = 0; i < this.filterValues.length; i++) {\r\n var filtered = this.checkedValues.has(this.filterValues[i]);\r\n filterOptions += \"\";\r\n }\r\n\r\n var $filter = this.menu.find('.filter');\r\n $filter.empty().append($(filterOptions));\r\n\r\n $(':checkbox', $filter).bind('click', e => {\r\n this.onCheckboxClick($(e.target));\r\n });\r\n }\r\n\r\n private getFilterText(item: any, column: Column): string {\r\n var value = item[column.field];\r\n\r\n if (this.options.useColumnFormatter && column && column.formatter) {\r\n try {\r\n var fmtResult = column.formatter(-1, -1, value, column, item);\r\n var html = typeof fmtResult == \"string\" ? fmtResult : fmtResult?.text;\r\n \r\n if (value == null && fmtResult === '') {\r\n return (htmlEncode(tryGetText(\"Site.HeaderFiltersMixin.Null\") || \"(null)\"));\r\n }\r\n\r\n return html;\r\n }\r\n catch (ex) {\r\n }\r\n }\r\n\r\n if (value == null)\r\n return (htmlEncode(tryGetText(\"Site.HeaderFiltersMixin.Null\") || \"(null)\"));\r\n\r\n return htmlEncode(value);\r\n }\r\n\r\n private showFilter(e: any) {\r\n var $menuButton = $(e.target);\r\n var columnDef = $menuButton.data(\"column\") as Column;\r\n\r\n this.checkedValues = new window['Set'](columnDef.headerFilterValues || []);\r\n\r\n if (!this.menu)\r\n this.menu = $(\"
    \").appendTo(document.body).hide();\r\n else\r\n this.menu.empty();\r\n\r\n this.searchInput = this.addSearchInput(this.menu, columnDef);\r\n\r\n var filterOptions = \"\";\r\n\r\n var $filter = $(\"
    \")\r\n .appendTo(this.menu);\r\n\r\n var buttons = $('
    ').appendTo(this.menu);\r\n\r\n $('')\r\n .appendTo(buttons)\r\n .bind('click', ev => {\r\n if (Array['from']) {\r\n columnDef.headerFilterValues = Array['from'](this.checkedValues);\r\n }\r\n else {\r\n columnDef.headerFilterValues = [];\r\n this.checkedValues && this.checkedValues.forEach((x: any) => columnDef.headerFilterValues.push(x));\r\n }\r\n this.setButtonIsFiltered($menuButton, columnDef.headerFilterValues.length > 0);\r\n this.handleApply(ev, columnDef);\r\n });\r\n\r\n $('')\r\n .appendTo(buttons)\r\n .bind('click', ev => {\r\n if (columnDef.headerFilterValues)\r\n columnDef.headerFilterValues.length = 0;\r\n this.setButtonIsFiltered($menuButton, false);\r\n this.handleApply(ev, columnDef);\r\n });\r\n\r\n $('')\r\n .appendTo(buttons)\r\n .bind('click', e => this.hideMenu());\r\n\r\n $(':checkbox', $filter).bind('click', (e) => {\r\n this.onCheckboxClick($(e.target));\r\n });\r\n\r\n this.updateFilterValues(columnDef, () => {\r\n this.menu.show();\r\n $filter.css('height', null);\r\n var menuHeight = this.menu.height();\r\n var buttonHeight = $(e.target).height();\r\n\r\n var offset = $(e.target).offset();\r\n var left = offset.left - this.menu.width() + $(e.target).width() - 8;\r\n\r\n var menuTop = offset.top + buttonHeight;\r\n\r\n var windowScrollTop = $(window).scrollTop();\r\n var bottomBoundary = $(window).height() + windowScrollTop;\r\n var contentWrapperTop = (parseInt($('div.content-wrapper').css('padding-top'), 10) || 0);\r\n\r\n if (menuTop + menuHeight > bottomBoundary &&\r\n bottomBoundary - menuTop + contentWrapperTop < menuTop - windowScrollTop) {\r\n menuTop -= (menuHeight + buttonHeight + 8);\r\n\r\n if (menuTop < windowScrollTop)\r\n menuTop = windowScrollTop;\r\n }\r\n\r\n var extraHeight = menuTop + menuHeight - bottomBoundary;\r\n\r\n if (extraHeight > 0) {\r\n $filter.css('height', ($filter.height() - extraHeight));\r\n }\r\n\r\n this.menu.css(\"top\", menuTop).css(\"left\", (left > 0 ? left : 0));\r\n });\r\n }\r\n\r\n private columnsResized() {\r\n this.hideMenu();\r\n }\r\n\r\n private onCheckboxClick($checkbox: JQuery) {\r\n var index = $checkbox.val();\r\n var $filter = $checkbox.parent().parent();\r\n\r\n if ($checkbox.val() < 0) {\r\n if ($checkbox.prop('checked')) {\r\n $(':checkbox', $filter).prop('checked', true);\r\n this.checkedValues = new window['Set'](this.filterValues || []);\r\n } else {\r\n $(':checkbox', $filter).prop('checked', false);\r\n this.checkedValues.clear();\r\n }\r\n } else {\r\n var value = this.filterValues[index];\r\n var has = this.checkedValues.has(value);\r\n\r\n if ($checkbox.prop('checked') && !has) {\r\n this.checkedValues.add(value);\r\n }\r\n else if (has) {\r\n this.checkedValues.delete(value);\r\n }\r\n }\r\n }\r\n\r\n private setButtonIsFiltered($el: JQuery, filtered: boolean) {\r\n $el.toggleClass('is-filtered', filtered);\r\n }\r\n\r\n private handleApply(e: any, columnDef: Column) {\r\n this.hideMenu();\r\n\r\n this.onFilterApplied.notify({ \r\n \"grid\": this.grid, \r\n \"column\": columnDef \r\n }, e, this);\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n private containsFilter(filter: string): ((text: string) => boolean) {\r\n if (filter == null && filter.length == 0)\r\n return v => true;\r\n\r\n var lowercaseFilter = htmlEncode(filter).toLowerCase();\r\n\r\n return (text: string) => {\r\n text = (text ?? '').toString().replace(/<[^>]+>/g, '').toLowerCase();\r\n return text.indexOf(lowercaseFilter) >= 0;\r\n };\r\n }\r\n\r\n public getFilterValue(item: any, column: Column) {\r\n var value = item[column.field];\r\n if (this.options.useColumnFormatter &&\r\n column.formatter != null &&\r\n column.headerFilterType == HeaderFilterType.text) {\r\n return (this.getFilterText(item, column)\r\n .replace(/<[^>]+>/g, ''));\r\n }\r\n\r\n return value;\r\n }\r\n\r\n private sortFilterValues() {\r\n var idx: number[] = [];\r\n for (var i = 0; i < this.filterValues.length; i++) {\r\n idx[i] = i;\r\n }\r\n idx.sort((x, y) => {\r\n var A = this.filterValues[x];\r\n var B = this.filterValues[y];\r\n return (A < B ? -1 : (A > B ? 1 : 0));\r\n });\r\n var newFilterValues = [];\r\n var newFilterTexts = [];\r\n for (var i = 0; i < idx.length; i++) {\r\n newFilterValues.push(this.filterValues[i]);\r\n newFilterTexts.push(this.filterTexts[i]);\r\n }\r\n this.filterValues = newFilterValues;\r\n this.filterTexts = newFilterTexts;\r\n }\r\n\r\n private updateFilterValues(column: Column, done: () => void) {\r\n if (this.options.getFilterValues != null) {\r\n this.options.getFilterValues(column, (values: object[], texts: string[]) => {\r\n if (values == null) {\r\n this.updateFilterValuesFromData(column);\r\n this.updateFilterItems(column);\r\n done();\r\n }\r\n else {\r\n this.filterValues = [];\r\n this.filterTexts = [];\r\n\r\n texts = texts || values.map(x => {\r\n var item: any = {};\r\n item[column.field] = x;\r\n return this.getFilterText(item, column);\r\n });\r\n\r\n var filter = this.containsFilter(this.searchInput.val());\r\n this.filterValues = values.filter((x, i) => {\r\n if (filter(texts[i])) {\r\n this.filterTexts.push(texts[i]);\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n this.sortFilterValues();\r\n this.updateFilterItems(column);\r\n done();\r\n }\r\n });\r\n }\r\n else {\r\n this.updateFilterValuesFromData(column);\r\n this.updateFilterItems(column);\r\n done();\r\n }\r\n }\r\n\r\n private updateFilterValuesFromData(column: Column) {\r\n\r\n this.filterValues = [];\r\n this.filterTexts = [];\r\n var dataView = ((this.grid.getData() as any) as RemoteView);\r\n \r\n var items: any[];\r\n if (this.checkedValues && this.checkedValues.size) {\r\n items = dataView.getItems();\r\n }\r\n else {\r\n items = [];\r\n for (var i = 0; i < dataView.getLength(); i++) {\r\n items.push(dataView.getItem(i));\r\n }\r\n }\r\n\r\n var seen = new window['Set']();\r\n var searchText = this.searchInput.val();\r\n var searchFilter = this.containsFilter(searchText);\r\n for (var item of items) {\r\n var value = this.getFilterValue(item, column);\r\n if (!seen.has(value)) {\r\n var text = this.getFilterText(item, column);\r\n if (searchFilter(text)) {\r\n seen.add(value);\r\n this.filterValues.push(value);\r\n this.filterTexts.push(text);\r\n }\r\n }\r\n }\r\n \r\n this.sortFilterValues();\r\n }\r\n\r\n private handleMenuItemClick(e: any) {\r\n var command = $(this).data(\"command\");\r\n var columnDef = $(this).data(\"column\");\r\n\r\n this.hideMenu();\r\n\r\n this.onCommand.notify({\r\n \"grid\": this,\r\n \"column\": columnDef,\r\n \"command\": command\r\n }, e, this);\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n}\r\n\r\ntypeof globalThis != \"undefined\" && globalThis[\"Slick\"] && globalThis[\"Slick\"][\"Plugins\"] && (globalThis.Slick[\"Plugins\"][\"HeaderFilters\"] = HeaderFiltersPlugin);\r\n", "\uFEFFimport { htmlEncode, resolveUrl, localText } from \"@serenity-is/corelib/q\";\r\n\r\nexport interface IdleTimeoutOptions {\r\n /** which events to consider as an activity. */\r\n activityEvents?: string;\r\n /** signout user if no activity within this duration (seconds). default is 900 (15 mins). */\r\n activityTimeout?: number;\r\n /** optional callback that is called just before signing out */\r\n beforeSignout?: () => void;\r\n /** interval for checking timer, default is 5 seconds */\r\n checkInterval?: number;\r\n /** interval for calling keep alive url in seconds, default is 300 (5 mins) */\r\n keepAliveTimer?: number;\r\n /** keep alive url */\r\n keepAliveUrl?: string;\r\n /** url used to signout user */\r\n signoutUrl?: string;\r\n /** show warning for this number of seconds */\r\n warningDuration?: number;\r\n}\r\n\r\nexport class IdleTimeout {\r\n\r\n private options: IdleTimeoutOptions;\r\n private idleTimer: number;\r\n private keepAliveTimer: number;\r\n private warningTimer: number;\r\n private remainingTimer: number;\r\n\r\n constructor(options: IdleTimeoutOptions) {\r\n this.options = $.extend({}, IdleTimeout.defaults, options);\r\n\r\n localStorage.setItem('IdleTimeout:LastActivity', $.now().toString());\r\n localStorage.removeItem('IdleTimeout:Signout');\r\n\r\n var mouseX: number, mouseY: number;\r\n $('body').on(this.options.activityEvents, e => {\r\n\r\n if (e.type == 'mousemove') {\r\n\r\n if (e.clientX == mouseX && e.clientY == mouseY)\r\n return;\r\n\r\n mouseX = e.clientX;\r\n mouseY = e.clientY;\r\n }\r\n\r\n if (!this.isWarningActive()) {\r\n this.resetIdleTimer();\r\n }\r\n });\r\n\r\n if (this.options.keepAliveTimer)\r\n this.startKeepAliveTimer();\r\n\r\n this.resetIdleTimer();\r\n }\r\n\r\n protected startKeepAliveTimer() {\r\n\r\n clearTimeout(this.keepAliveTimer);\r\n\r\n var keepSessionAlive = () => {\r\n $.get(resolveUrl(this.options.keepAliveUrl) + '?' + new Date().getTime());\r\n this.startKeepAliveTimer();\r\n };\r\n\r\n this.keepAliveTimer = setTimeout(keepSessionAlive, this.options.keepAliveTimer * 1000);\r\n }\r\n\r\n protected isWarningActive() {\r\n return $('#idle-timeout-warning').is(':visible');\r\n }\r\n\r\n protected startWarningTimer() {\r\n this.warningTimer = setInterval(() => this.warningTimeout(), this.options.checkInterval * 1000);\r\n }\r\n\r\n protected stopWarningTimer() {\r\n clearInterval(this.warningTimer);\r\n clearInterval(this.remainingTimer);\r\n };\r\n\r\n protected warningTimeout() {\r\n if (this.getRemainingSeconds() < 0)\r\n this.signout();\r\n }\r\n\r\n protected resetIdleTimer() {\r\n clearTimeout(this.idleTimer);\r\n localStorage.setItem('IdleTimeout:LastActivity', $.now().toString());\r\n this.idleTimeout();\r\n };\r\n\r\n protected idleTimeout() {\r\n this.checkActivityTimeout();\r\n this.idleTimer = setTimeout(() => this.idleTimeout(), this.options.checkInterval * 1000);\r\n };\r\n\r\n protected checkActivityTimeout() {\r\n\r\n var timeLimit = parseInt(localStorage.getItem('IdleTimeout:LastActivity') || $.now().toString()) +\r\n (this.options.activityTimeout - (this.options.warningDuration || 0)) * 1000;\r\n\r\n if ($.now() > timeLimit) {\r\n if (!this.options.warningDuration) {\r\n this.signout();\r\n } else {\r\n this.showWarning();\r\n this.startWarningTimer();\r\n }\r\n } else if (localStorage.getItem('IdleTimeout:Signout')) {\r\n this.signout();\r\n } else if (this.isWarningActive()) {\r\n this.closeWarning();\r\n this.stopWarningTimer();\r\n }\r\n }\r\n\r\n protected signout() {\r\n localStorage.setItem('IdleTimeout:Signout', \"1\");\r\n clearTimeout(this.keepAliveTimer);\r\n this.stopWarningTimer();\r\n this.closeWarning();\r\n this.options.beforeSignout && this.options.beforeSignout();\r\n if (this.options.signoutUrl)\r\n window.location.href = resolveUrl(this.options.signoutUrl);\r\n }\r\n\r\n protected showWarning() {\r\n var warningDialog = $('#idle-timeout-warning');\r\n if (!warningDialog.length) {\r\n warningDialog = $(`
    \r\n
    \r\n
    \r\n
    \r\n

    ${htmlEncode(localText(\"Controls.IdleTimeout.WarningTitle\"))}

    \r\n \r\n
    \r\n
    \r\n

    ${htmlEncode(localText(\"Controls.IdleTimeout.WarningMessage\"))}

    \r\n

    ${htmlEncode(localText(\"Controls.IdleTimeout.CountdownMessage\"))}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    `).appendTo(document.body);\r\n\r\n $('#idle-timeout-warning-signout').on('click', () => this.signout());\r\n warningDialog.on('hide.bs.modal', () => {\r\n clearTimeout(this.warningTimer);\r\n clearTimeout(this.remainingTimer);\r\n this.resetIdleTimer();\r\n });\r\n }\r\n\r\n warningDialog['modal']('show');\r\n this.countdownDisplay();\r\n }\r\n\r\n protected closeWarning() {\r\n var warning = $('#idle-timeout-warning').off('hide.bs.modal');\r\n if (warning.length && warning.data() && warning.data()['bs.modal'] && warning.data()['bs.modal'].isShown) {\r\n warning.removeClass('fade');\r\n warning['modal']('hide');\r\n warning.remove();\r\n }\r\n }\r\n\r\n protected getRemainingSeconds() {\r\n var timeLimit = parseInt(localStorage.getItem('IdleTimeout:LastActivity') || $.now().toString()) +\r\n (this.options.activityTimeout * 1000);\r\n return Math.ceil(((timeLimit - $.now()) / 1000));\r\n }\r\n\r\n protected countdownDisplay() {\r\n clearTimeout(this.remainingTimer);\r\n var update = () => {\r\n var remainingSeconds = Math.max(this.getRemainingSeconds(), 1);\r\n var percentLeft = 100 * Math.max(1, remainingSeconds) / (this.options.warningDuration || 1);\r\n $('#idle-timeout-progress').css('width', percentLeft + '%');\r\n $('#idle-timeout-seconds').text(remainingSeconds);\r\n };\r\n this.remainingTimer = setInterval(update, 500);\r\n update();\r\n };\r\n\r\n static defaults: IdleTimeoutOptions = {\r\n activityEvents: 'click keyup mouseup mousemove scroll touchend touchmove wheel mousewheel',\r\n activityTimeout: 900,\r\n checkInterval: 5,\r\n keepAliveTimer: 300,\r\n keepAliveUrl: '~/Account/KeepAlive',\r\n signoutUrl: '~/Account/Signout',\r\n warningDuration: 60,\r\n }\r\n}\r\n", "\uFEFFexport function setupUIOverrides() {\r\n // no-op, all overrides are moved to corelib\r\n}", "\uFEFFimport { TemplatedDialog, PropertyGrid, WX, PropertyGridOptions, PropertyGridMode, PropertyItem, Decorators } from \"@serenity-is/corelib\";\r\nimport { htmlEncode, confirmDialog, getForm, localText } from \"@serenity-is/corelib/q\";\r\n\r\n/**\r\n * A dialog/panel base class that easily generates a wizard UI from tabs in a form definition (e.g. Form.cs)\r\n */\r\n@Decorators.registerClass(\"Serenity.WizardDialog\")\r\nexport abstract class WizardDialog extends TemplatedDialog {\r\n\r\n private wizardGrid: PropertyGrid;\r\n\r\n /**\r\n * Creates a new wizard dialog\r\n * @param opt options, might be used by derived classes\r\n */\r\n constructor(opt?: TOptions) {\r\n super(opt);\r\n\r\n this.element.children().addClass(\"wizard-horz\");\r\n\r\n this.wizardGrid = new PropertyGrid(this.byId(\"WizardGrid\"),\r\n this.getPropertyGridOptions());\r\n\r\n this.wizardGrid.element.children(\".property-tabs\").children('li').each((i, li) => {\r\n var $li = $(li);\r\n var h = $li.children('a').html();\r\n $li.html('').attr('data-step', i + 1);\r\n $('').text(i + 1).appendTo($li);\r\n $('').html(h).appendTo($li);\r\n $('').appendTo($li);\r\n });\r\n\r\n this.byId(\"CancelButton\").click((e) => this.confirmCancel(e));\r\n\r\n this.byId(\"BackButton\").click(() => {\r\n this.moveToStep(this.step - 1);\r\n });\r\n\r\n this.byId(\"NextButton\").click(() => {\r\n if (!this.validateForm())\r\n return false;\r\n\r\n this.moveToStep(this.step + 1);\r\n });\r\n\r\n this.wizardGrid.element.children(\".property-tabs\")\r\n .on(\"click\", \"li\", e => {\r\n var step = $(e.currentTarget).data('step');\r\n\r\n if (step > this.step)\r\n return;\r\n\r\n this.moveToStep(step);\r\n });\r\n\r\n this.wizardGrid.load(this.getInitialEntity());\r\n\r\n this.getStepLink(this._step).addClass(\"in show active\");\r\n this.getStepPanel(this._step).addClass(\"in show active\")\r\n\r\n this.element.on('dialogbeforeclose panelbeforeclose', e => {\r\n if (!WX.hasOriginalEvent(e))\r\n return;\r\n\r\n this.confirmCancel(e);\r\n });\r\n }\r\n\r\n /**\r\n * gets property grid options\r\n */\r\n protected getPropertyGridOptions(): PropertyGridOptions {\r\n return {\r\n idPrefix: this.idPrefix,\r\n mode: PropertyGridMode.insert,\r\n items: this.getPropertyItems(),\r\n localTextPrefix: this.getLocalTextPrefix(),\r\n useCategories: true\r\n };\r\n }\r\n\r\n /**\r\n * gets form key to use to load property items / tabs\r\n */\r\n protected getFormKey(): string {\r\n return null;\r\n }\r\n\r\n /**\r\n * gets local text prefix for labels\r\n */\r\n protected getLocalTextPrefix(): string {\r\n return \"\";\r\n }\r\n\r\n /**\r\n * gets list of property items to shown on form, uses form key to load items by default\r\n */\r\n protected getPropertyItems(): PropertyItem[] {\r\n var formKey = this.getFormKey();\r\n if (formKey)\r\n return getForm(formKey);\r\n\r\n return [];\r\n }\r\n\r\n /**\r\n * gets initial entity to load onto form, override these to customize initial form values\r\n */\r\n protected getInitialEntity(): TEntity {\r\n return {} as TEntity;\r\n }\r\n\r\n // gets maximum number of steps from\r\n protected get maxSteps() {\r\n return this.wizardGrid.element\r\n .children(\".property-tabs\")\r\n .children(\"li\")\r\n .length;\r\n }\r\n\r\n /**\r\n * moves to a step, by calling one of next, back or finish methods based on target step\r\n * @param toStep the target step to move to\r\n */\r\n protected moveToStep(toStep: number) {\r\n if (toStep == this.step || toStep < 1 || toStep > this.maxSteps + 1)\r\n return;\r\n\r\n if (toStep >= this.maxSteps + 1) {\r\n this.finish();\r\n return;\r\n }\r\n\r\n (toStep < this.step ? this.back : this.next).call(this, toStep);\r\n }\r\n\r\n private _step: number = 1;\r\n\r\n // gets current step\r\n protected get step(): number {\r\n return this._step;\r\n }\r\n\r\n // sets current step directly, skipping any validation\r\n protected set step(value: number) {\r\n this.getStepLink(this._step).removeClass(\"in active\");\r\n this.getStepPanel(this._step).removeClass(\"in show active\");\r\n this.getStepLink(value).addClass(\"in active\");\r\n this.getStepPanel(value).addClass(\"in show active\")\r\n .find(\".require-layout\").triggerHandler(\"layout\");\r\n var s: number;\r\n for (s = value; s <= this._step; s++)\r\n this.getStepLink(s).removeClass(\"complete\").find(\"span.badge\").removeClass(\"badge-success\");\r\n for (s = this._step; s < value; s++)\r\n this.getStepLink(s).addClass(\"complete\").find(\"span.badge\").addClass(\"badge-success\");\r\n\r\n this._step = value;\r\n\r\n this.byId(\"BackButton\").toggleClass('disabled', this._step <= 1);\r\n this.byId(\"NextButton\").children('.txt').text(localText(\"Site.WizardDialog.\" +\r\n (this._step == this.maxSteps ? \"Finish\" : \"Next\") + \"Button\"));\r\n }\r\n\r\n /**\r\n * called to reset the form, and go back to first step\r\n */\r\n protected reset() {\r\n this.step = 1;\r\n this.wizardGrid.load(this.getInitialEntity());\r\n }\r\n\r\n /**\r\n * is called when user clicks the Finish button (next button on last step)\r\n */\r\n protected finish() {\r\n this.dialogClose();\r\n }\r\n\r\n /**\r\n * next method is called when user tries to go forward\r\n * @param toStep the step user is trying to move to, usually one step ahead\r\n */\r\n protected next(toStep: number) {\r\n this.step = toStep;\r\n }\r\n\r\n /**\r\n * back method is called when user tries to go backward\r\n * @param toStep the step user is trying to move to, usually one step back but can also be multiple\r\n */\r\n protected back(toStep: number) {\r\n this.step = toStep;\r\n }\r\n\r\n private getStepLink(step: number) {\r\n return this.wizardGrid.element\r\n .children(\".property-tabs\")\r\n .children(\"li\").eq(step - 1);\r\n }\r\n\r\n private getStepPanel(step: number) {\r\n return this.wizardGrid.element\r\n .children(\".property-panes\")\r\n .children().eq(step - 1)\r\n }\r\n\r\n /**\r\n * make sure derived classes use WizardDialog template,\r\n * if they don't define one of their own\r\n */\r\n protected getFallbackTemplate() {\r\n return `\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    `;\r\n }\r\n\r\n /**\r\n * gets cancel confirmation message, return null to disable confirmation\r\n */\r\n protected getCancelMessage() {\r\n return localText(\"Site.WizardDialog.CancelMessage\");\r\n }\r\n\r\n /**\r\n * confirms when user tries to cancel or close the wizard\r\n * @param e\r\n */\r\n protected confirmCancel(e: JQueryEventObject) {\r\n var cancelMessage = this.getCancelMessage();\r\n if (!cancelMessage) {\r\n e.preventDefault();\r\n this.dialogClose();\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n confirmDialog(cancelMessage,\r\n () => {\r\n this.dialogClose();\r\n });\r\n }\r\n\r\n /** gets save entity from form, optionally from a limited list of steps (tabs)\r\n * @param steps the list of steps to read data from, pass null to get all\r\n */\r\n protected getSaveEntity(steps?: number[]): TEntity {\r\n var entity = {} as TEntity;\r\n this.wizardGrid.save(entity);\r\n\r\n if (steps != null) {\r\n var maxSteps = this.maxSteps;\r\n for (var i = 1; i <= maxSteps; i++) {\r\n if (steps.indexOf(i) >= 0)\r\n continue;\r\n\r\n var panel = this.getStepPanel(i);\r\n panel.find('.field').each((z, el) => {\r\n var field = $(el).attr('class').split(' ')[1];\r\n if (field)\r\n delete entity[field];\r\n });\r\n }\r\n }\r\n\r\n return entity;\r\n }\r\n\r\n // gets value of compact steps option\r\n protected get compactSteps() {\r\n return this.element.children().hasClass(\"compact-steps\");\r\n }\r\n\r\n // sets value of compact steps option, when it is on, inactive step titles only show\r\n // numbers and gets visible on hover. this is better there are many steps to fit\r\n protected set compactSteps(value: boolean) {\r\n this.element.children().toggleClass(\"compact-steps\", value);\r\n }\r\n}\r\n"], "mappings": "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", "names": ["require_corelib", "__commonJSMin", "exports", "module", "require_q", "__commonJSMin", "exports", "module", "require_react", "__commonJSMin", "exports", "module", "require_react_dom", "__commonJSMin", "exports", "module", "require_slick", "__commonJSMin", "exports", "module", "require_sleekgrid", "__commonJSMin", "exports", "module", "Modules_exports", "__export", "AutoColumnWidthMixin", "AutoSaveOption", "CardViewItems", "CardViewMixin", "CustomSummaryMixin", "DraggableGroupingMixin", "DraggableGroupingPlugin", "EntityGridDialog", "FavoriteViewsMixin", "GridEditController", "GridEditWrapper", "HeaderFilterType", "HeaderFiltersMixin", "HeaderFiltersPlugin", "IdleTimeout", "WizardDialog", "setupUIOverrides", "import_corelib", "import_q", "import_corelib", "import_q", "GridEditWrapper", "args", "_a", "_b", "_c", "_d", "propertyItem", "controller", "el", "source", "target", "state", "k", "pos", "value", "result", "message", "__name", "defaultGridEditOptions", "GridEditController", "opt", "_a", "item", "column", "command", "orig", "priorEscCell", "e", "activeCell", "args", "showValidationError", "row", "_b", "slick", "styles", "cols", "cell", "col", "field", "_c", "_d", "editable", "pid", "idField", "x", "propertyItem", "GridEditWrapper", "dataLength", "i", "key", "requests", "request", "rows", "current", "self", "__name", "saveNext", "then", "fail", "serviceMethod", "getService", "controller", "el", "msg", "$el", "hl", "import_corelib", "import_q", "AutoColumnWidthMixin", "options", "_a", "__name", "e", "self", "flags", "settings", "x", "$header", "columnDef", "sb", "row", "childNodes", "length", "cellNodes", "i", "header", "_b", "maxAllowedWidth", "maxWidth", "index", "cellNode", "width", "autoWidth", "colIndex", "headerClone", "createHeaderClone", "rowNode", "useExplicitWidths", "$headers", "maxRows", "headerClones", "el", "allCellNodes", "item", "format", "ctx", "child", "childHtml", "ex", "cellTemplate", "__decorateClass", "element", "clone", "import_react", "CardViewItems", "React", "item", "index", "__name", "import_q", "import_react", "import_react_dom", "CardViewMixin", "options", "dg", "btnGroup", "e", "oldCurrentSettings", "flag", "settings", "self", "oldRestoreSettings", "flags", "storage", "json", "viewType", "persist", "button", "card", "_a", "ReactDOM", "React", "CardViewItems", "gc", "height", "__name", "gridDiv", "layout", "inPageContent", "cc", "import_corelib", "import_q", "import_slick", "toAggregator", "summaryType", "__name", "CustomSummaryMixin", "options", "dg", "getDefaultAggregators", "columns", "aggregators", "x", "aggregator", "aggregatesPopup", "e", "col", "column", "agg", "grouping", "i", "oldCurrentSettings", "flags", "settings", "oldRestoreSettings", "import_q", "import_q", "import_sleekgrid", "DraggableGroupingPlugin", "options", "defaults", "grid", "dropPlaceHolderText", "cols", "i", "col", "_self", "event", "ui", "_", "id", "e", "a", "sortArray", "newGroupingOrder", "l", "b", "column", "g", "fld", "asc", "x", "text", "item", "count", "columnid", "columnAllowed", "clmn", "gridColumns", "columnAdded", "entry", "groupText", "groupRemoveIcon", "idList", "changed", "idx", "hasGrouping", "userChange", "groupingArray", "element", "$headers", "setupColumnResize", "trigger", "$headerDraggableGroupBy", "columns", "uid", "hasDroppedColumn", "reorderedIds", "reorderedColumns", "__name", "sortBy", "field", "reverse", "primer", "key", "__name", "x", "a", "b", "A", "B", "DraggableGroupingMixin", "options", "dg", "plugin", "DraggableGroupingPlugin", "e", "args", "oldCurrentSettings", "flags", "settings", "grouping", "loadGroupCols", "groupColsToLoad", "columns", "groupCols", "z", "groupings", "getDefaultGroupCols", "colsWithOrder", "oldRestoreSettings", "storage", "json", "import_corelib", "import_q", "AutoSaveOption", "EntityGridDialog", "container", "opt", "e", "arg", "slickGrid", "widgetMarkup", "item", "index", "klass", "entityOrId", "proceed", "response", "itemType", "callback", "id", "form", "valOptions", "i", "el", "value", "oldTitle", "_a", "pt", "tabsDiv", "entity", "title", "options", "attrType", "name", "attributes", "es", "done", "fail", "asPanel", "data", "oldEntityId", "idField", "entityId", "request", "pgOptions", "pgDiv", "formKey", "typ", "ent", "eid", "dci", "req", "buttons", "list", "response1", "id1", "cloneEntity", "w", "isOpen", "isLocalizationMode", "hasSavePermission", "viewMode", "readOnly", "__name", "__decorateClass", "import_q", "FavoriteViewsMixin", "options", "dg", "dropdown", "e", "viewName", "name", "favorites", "settings", "saveLI", "keys", "k", "li", "storage", "key", "__name", "import_corelib", "import_q", "import_q", "import_sleekgrid", "HeaderFilterType", "HeaderFiltersPlugin", "options", "defaults", "g", "column", "e", "args", "filterType", "$el", "menu", "columnDef", "title", "command", "image", "$item", "$icon", "filterOptions", "i", "filtered", "$filter", "item", "value", "fmtResult", "html", "ex", "$menuButton", "buttons", "ev", "x", "menuHeight", "buttonHeight", "offset", "left", "menuTop", "windowScrollTop", "bottomBoundary", "contentWrapperTop", "extraHeight", "$checkbox", "index", "has", "filter", "v", "lowercaseFilter", "text", "idx", "y", "A", "B", "newFilterValues", "newFilterTexts", "done", "values", "texts", "dataView", "items", "seen", "searchText", "searchFilter", "__name", "HeaderFiltersMixin", "options", "skipColumnFilters", "cache", "filterPlugin", "HeaderFiltersPlugin", "col", "done", "req", "cacheKey", "cached", "response", "e", "data", "column", "me", "oldOnViewSubmit", "cols", "request", "vals", "nonNull", "z", "criteria", "oldOnViewFilter", "item", "filterValue", "__name", "import_q", "_IdleTimeout", "options", "mouseX", "mouseY", "e", "keepSessionAlive", "__name", "timeLimit", "warningDialog", "warning", "update", "remainingSeconds", "percentLeft", "IdleTimeout", "setupUIOverrides", "__name", "import_corelib", "import_q", "WizardDialog", "opt", "i", "li", "$li", "h", "e", "step", "formKey", "toStep", "value", "s", "cancelMessage", "steps", "entity", "maxSteps", "panel", "z", "el", "field", "__name", "__decorateClass"] }