{"version":3,"sources":["webpack:///./build-targets/portal/packages/core/functionality/materialCheckboxes.js","webpack:///./packages/core/functionality/table.js","webpack:///./build-targets/portal/packages/core/functionality/table.js"],"names":["NAME","target","hasFunctionality","addInitializer","instance","opts","materialCheckboxes","cleanUp","_","invoke","on","purgeEls","el","querySelectorAll","getExcludedViews","forEach","field","whenShown","then","checkboxEl","querySelector","checkbox","MDCCheckbox","push","formField","MDCFormField","input","Backgrid","Extension","ClientSideFilter","prototype","search","matcher","bind","this","makeMatcher","query","col","collection","pageableCollection","getFirstPage","silent","reset","shadowCollection","filter","filtering","reindex","Props","prepareTable","selected","initializeBackgrid","self","Row","grid","Grid","columns","row","extend","initialize","listenTo","mv","e","$","Event","contextMenu","$el","trigger","apply","arguments","render","me","model","id","attr","rowAdded","serverSideSort","body","stopListening","sort","column","direction","contains","RangeError","isString","findWhere","name","set","renderOnChange","options","idx","indexOf","renderableChange","each","changed","val","attrName","get","rows","renderTable","c","isBoolean","editable","addClass","tableClassName","appendTo","$deleteBtn","gridFilter","$target","is","replaceWith","append","$gridFilter","i18n","t","clear","gridFilters","$targets","key","all","length","console","warn","selection","prop","selectChanged","edit","anchor","closest","hasClass","eventStr","action","Netx","Actions","Find","dispatcher","parseInt","getRowViewById","valid","matrix","isFunction","allows","isUndefined","enableTest","isNumber","userLevel","getUserLevel","performAction","clearFilters","remove","defer","cleanUpTable","Error","view","getRowById","getRowIdByElement","jQuery","$idElement","data","rowClicked","toggle","tr","ControlCell","pick","Base","CellEditor","configureSyncActions","events","HeaderCell","contextmenu","findContextMenu","insertContextMenu","Cell","backgridSelectFilter","SelectFilter","setTimeout","delegateEvents","extendFunctionality","stopPropagation","isTrigger","type","currentTarget","bindCollectionEvents","wrap","call","setSort","concat","checkHasResults","removeAttribute","Object","values","some","value","trueCollectionLength","hasOwnProperty","setAttribute","hasAssets","defineColumns","without","find","getUser","icons","faCaretDown","icon","html","faEllipsisV","faEquals","UIComponents","selectpicker","plugins","destroy","$selectEl","styleBase","doneButtonText","style","container","liveSearch","isMobile","noneSelectedText","noneResultsText","template","caret","assign","r","callByNeed","sortable","oldCaret","classList","add","innerHTML","HandleCell","empty","OriginalControlCellRender","debounce","__initializers__","constructor","func","columnName","omitRender","nxActions","actions","formatter","fromRaw","slice","map","enabledActions","getEnabledActions","event","label","join","initializeActions","renderActions","functionalityName","__functionality__","includes","cb","MaterialMenus"],"mappings":"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","file":"7.bundle.min.js?2.22.31.f488ddff.1688766848291","sourcesContent":["const NAME = 'materialCheckboxes';\n\nimport './css/materialCheckboxes.less';\n\nimport {MDCFormField} from '@material/form-field';\nimport {MDCCheckbox} from '@material/checkbox';\nimport {purgeEls} from '@netx/core/lib/utils';\n\nexport default function (target) {\n\tif (!target || target.hasFunctionality(NAME)) return target;\n\n\ttarget.addInitializer((instance, opts = {}) => {\n\t\tlet materialCheckboxes = [];\n\n\t\tconst cleanUp = () => {\n\t\t\t_.invoke(materialCheckboxes, 'destroy');\n\t\t\tmaterialCheckboxes = [];\n\t\t};\n\n\t\t// Hey, listen!\n\t\tinstance\n\t\t\t.on('preRenderHook', cleanUp)\n\t\t\t.on('removeHook', cleanUp)\n\t\t\t.on('postRenderHook', () => {\n\t\t\t\tpurgeEls(\n\t\t\t\t\t[...instance.el.querySelectorAll('.mdc-form-field')],\n\t\t\t\t\tinstance.getExcludedViews(),\n\t\t\t\t).forEach((field) => {\n\t\t\t\t\t// material needs to initialize after\n\t\t\t\t\t// the view is visible or the focus animation\n\t\t\t\t\t// wont work until it is clicked\n\t\t\t\t\tinstance.whenShown.then(() => {\n\t\t\t\t\t\tconst checkboxEl = field.querySelector('.mdc-checkbox');\n\t\t\t\t\t\tif (!checkboxEl) return;\n\n\t\t\t\t\t\tconst checkbox = new MDCCheckbox(checkboxEl);\n\t\t\t\t\t\tmaterialCheckboxes.push(checkbox);\n\n\t\t\t\t\t\tconst formField = new MDCFormField(field);\n\t\t\t\t\t\tformField.input = checkbox;\n\t\t\t\t\t\tmaterialCheckboxes.push(formField);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t}, NAME);\n\n\treturn target;\n}\n","/**\n * @module core/functionality/table\n */\n\nconst NAME = 'table';\n\n/**\n * Netx.Views.TableView uses Backgrid (backgridjs.com) to display the contents of a collection in tabular format, one model per row.\n * The rows are sortable, selectable and editable.\n * TableView includes event handlers for add, delete & edit buttons in the footer and for row-selection checkboxes.\n */\nimport Base from '../lib/netx-view';\nimport Backgrid from 'core-libs/backgrid-netx';\n\nBackgrid.Extension.ClientSideFilter.prototype.search = function () {\n\tvar matcher = _.bind(this.makeMatcher(this.query()), this);\n\tvar col = this.collection;\n\tif (col.pageableCollection)\n\t\tcol.pageableCollection.getFirstPage({silent: true});\n\tcol.reset(this.shadowCollection.filter(matcher), {\n\t\tfiltering: true,\n\t\treindex: false,\n\t});\n};\n\nconst Props = {\n\t/**\n\t * this.preRender() saves the state of any selection we might have. Do not override without calling the parent method.\n\t * @override\n\t */\n\tprepareTable() {\n\t\tthis.selected();\n\t},\n\n\t/** @method */\n\tinitializeBackgrid() {\n\t\tconst self = this;\n\t\tconst Row = Backgrid.Row.prototype;\n\t\t// Well - in order to support our actions/menus we need to treat a backgrid row as we would a child view\n\t\t// Each view has a model that pertains to the action/menu in question\n\t\t// In the long run I do not think this is terrible- not ideal but not terrible.\n\t\tthis.grid = new Backgrid.Grid({\n\t\t\tcolumns: this.columns,\n\t\t\tcollection: this.collection,\n\t\t\t// Attach the unique id of this model to every row's element as a data-id attribute\n\t\t\trow: Backgrid.Row.extend({\n\t\t\t\tinitialize(opts) {\n\t\t\t\t\tthis.listenTo(this, 'context:menu:rendered', function (mv) {\n\t\t\t\t\t\tvar e = $.Event('contextmenuRendered', {contextMenu: mv});\n\t\t\t\t\t\tthis.$el.trigger(e);\n\t\t\t\t\t});\n\t\t\t\t\treturn Row.initialize.apply(this, arguments);\n\t\t\t\t},\n\t\t\t\trender() {\n\t\t\t\t\tvar me = Row.render.apply(this, arguments);\n\t\t\t\t\tif (this.model.id) {\n\t\t\t\t\t\tthis.$el.attr('data-id', this.model.id);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support context menus\n\t\t\t\t\tif (self.contextMenu) {\n\t\t\t\t\t\tthis.$el\n\t\t\t\t\t\t\t.attr('data-contextmenu-target', self.contextMenu)\n\t\t\t\t\t\t\t.attr('data-nx-template', 'menuView-context')\n\t\t\t\t\t\t\t.attr('data-contextmenu-container', 'body');\n\t\t\t\t\t}\n\n\t\t\t\t\tself.rowAdded(this.model, this);\n\n\t\t\t\t\t// Chain\n\t\t\t\t\treturn me;\n\t\t\t\t},\n\t\t\t}),\n\t\t});\n\n\t\t// Just fire events - no actual sort on collection\n\t\tif (this.serverSideSort) {\n\t\t\tthis.grid.body.stopListening(this.collection, 'backgrid:sort');\n\t\t\tthis.grid.body.sort = function (column, direction) {\n\t\t\t\tif (!_.contains(['ascending', 'descending', null], direction)) {\n\t\t\t\t\tthrow new RangeError(\n\t\t\t\t\t\t'direction must be one of \"ascending\", \"descending\" or `null`',\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (_.isString(column)) {\n\t\t\t\t\tcolumn = this.columns.findWhere({name: column});\n\t\t\t\t}\n\n\t\t\t\tvar collection = this.collection;\n\n\t\t\t\tvar order;\n\t\t\t\tif (direction === 'ascending') order = -1;\n\t\t\t\telse if (direction === 'descending') order = 1;\n\t\t\t\telse order = null;\n\n\t\t\t\tcollection.trigger('backgrid:sorted', column, direction, collection);\n\t\t\t\tcolumn.set('direction', direction);\n\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tthis.grid.body.listenTo(\n\t\t\t\tthis.collection,\n\t\t\t\t'backgrid:sort',\n\t\t\t\tthis.grid.body.sort,\n\t\t\t);\n\t\t}\n\n\t\t// Rows do not have any listeners that trigger a render in Backgrid\n\t\t// We need to be able to adjust some things if one of our attributes have changed\n\t\t// TODO: We should kill this - create a controls cell for our action parsing and let views\n\t\t// decide what attribute changes mean things need to update - otherwise, cell's are already\n\t\t// rendering themselves when they change - I beleive this was primarily added due to action parsing\n\t\tif (this.renderOnChange) {\n\t\t\tthis.listenTo(this.collection, 'change', function (model, options) {\n\t\t\t\tif (!model) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Re-render just that model's row\n\t\t\t\tvar idx = this.collection.indexOf(model);\n\t\t\t\tif (idx > -1) {\n\t\t\t\t\tvar renderableChange = true;\n\t\t\t\t\t_.each(\n\t\t\t\t\t\tmodel.changed,\n\t\t\t\t\t\tfunction (val, attrName) {\n\t\t\t\t\t\t\tvar col = this.grid.columns.findWhere({name: attrName});\n\t\t\t\t\t\t\t// Do not render on cells in edit mode\n\t\t\t\t\t\t\tif (renderableChange && (!col || col.get('editable'))) {\n\t\t\t\t\t\t\t\trenderableChange = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthis,\n\t\t\t\t\t);\n\t\t\t\t\trenderableChange && this.grid.body.rows[idx].render();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Installs the grid in every element with the attribute 'data-grid'\n\t * @method\n\t */\n\trenderTable() {\n\t\t// DEVNOTE: Backgrid.js is geared towards web spreadsheets, so all cells default to editable. That's not what we generally want.\n\t\t// To flip that, we process the columns array and add 'editable:false' wherever it's not explicitly set to true.\n\t\t_.each(this.columns, (c) => {\n\t\t\tif (!_.isBoolean(c.editable)) {\n\t\t\t\tc.editable = false;\n\t\t\t}\n\t\t});\n\n\t\t// If we wait until shown to inject backgrid we can get more feedback in the DOM\n\t\tthis.whenShown.then(() => {\n\t\t\tif (!this.grid) {\n\t\t\t\tthis.initializeBackgrid();\n\t\t\t}\n\n\t\t\t// install the grid in the element with attr \"data-grid\"\n\t\t\t// Backgrid.render() is synchronous -- nothing to download!\n\t\t\tthis.grid\n\t\t\t\t.render()\n\t\t\t\t.$el.addClass(this.tableClassName)\n\t\t\t\t.appendTo(this.$('[data-grid]'));\n\n\t\t\tthis.trigger('backgrid:ready', this, this.grid);\n\t\t});\n\n\t\t// Cache\n\t\tthis.$deleteBtn = this.$('.btn-delete');\n\n\t\t////////////////////////////////////\n\t\t// GRID FILTERS\n\t\t////////////////////////////////////\n\t\t// If we have defined a filter, install it in the element with the class `.nx--grid-filter`\n\t\tif (this.gridFilter) {\n\t\t\t// Filter\n\t\t\tconst $target = this.$('.nx--grid-filter');\n\t\t\t$target.is(':input')\n\t\t\t\t? $target.replaceWith(this.gridFilter.render().el)\n\t\t\t\t: $target.append(this.gridFilter.render().el);\n\t\t\tthis.$gridFilter = this.gridFilter.$('input[type=\"search\"]');\n\t\t\tthis.$gridFilter\n\t\t\t\t.addClass('form-control')\n\t\t\t\t.attr('placeholder', i18n.t('i18n.filter'))\n\t\t\t\t.attr('data-nx-ignore', 'change');\n\t\t\t// Make sure we render with a clean search filter\n\t\t\tthis.gridFilter.clear();\n\t\t}\n\n\t\t// If we have defined a whole mess of filters, install each one in the element with the attr \"data-grid-filter-[name]\";\n\t\tif (this.gridFilters) {\n\t\t\tconst $targets = this.$('input.nx--grid-filter');\n\t\t\t_.each(this.gridFilters, (filter, key, all) => {\n\t\t\t\tvar $target = $targets.filter('[data-nx-filter=\"' + key + '\"]');\n\t\t\t\tif ($target.length) {\n\t\t\t\t\t$target.is(':input')\n\t\t\t\t\t\t? $target.replaceWith(filter.render().el)\n\t\t\t\t\t\t: $target.append(filter.render().el);\n\t\t\t\t\tfilter\n\t\t\t\t\t\t.$('input[type=\"search\"]')\n\t\t\t\t\t\t.addClass('form-control')\n\t\t\t\t\t\t.attr('placeholder', i18n.t('i18n.filter'))\n\t\t\t\t\t\t.attr('data-nx-ignore', 'change');\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn('No target could be found for the filter: ' + key);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t////////////////////////////////////\n\t\t// !GRID FILTERS\n\t\t////////////////////////////////////\n\n\t\t// restore the selection (if any)\n\t\t_.each(this.selection, (id) => {\n\t\t\tthis.$(`tr[data-id=\"${id}\"] :checkbox`).prop('checked', true);\n\t\t});\n\n\t\t// trigger this at render so that buttons & such get updated.\n\t\tthis.selectChanged(this.selection);\n\t},\n\n\t/**\n\t * this.edit(), this.add() and this.deleteSelected() do nothing by default.\n\t * You can either override them in your subclass to fire appropriate events, or specify Actions in your template that fire the same events.\n\t * (Implemeting this.edit() in your subclass is handy, because this.edit() gets the current selection as an argument.)\n\t */\n\t/**\n\t * Edit thing in table\n\t * @method\n\t * @param {string} id Unique ID of the selected row's model\n\t * @param {event} e Click event.\n\t */\n\tedit(id, e) {\n\t\tconst $target = this.$(e.target);\n\t\tconst anchor = $target.is('a') ? $target : $target.closest('a');\n\n\t\tif (\n\t\t\t// If it is on an anchor tag with an href then let it pass thorugh\n\t\t\t(anchor.length && anchor.attr('href')) ||\n\t\t\t// Do not interfere with editable cells\n\t\t\t$target.hasClass('editable')\n\t\t)\n\t\t\treturn true;\n\n\t\tif (!this.eventStr) return;\n\n\t\t// Try and pipe through action event system\n\t\tlet action = Netx.Actions.Find(`${this.eventStr}:edit`);\n\t\tif (!action) {\n\t\t\tdispatcher.trigger(\n\t\t\t\t`${this.eventStr}:edit`,\n\t\t\t\tthis.collection.get(parseInt(id)) || id,\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\t// TODO: More of a reason to break out the action tests - this is spot 3 where this info is needed\n\t\tconst row = this.getRowViewById(id);\n\t\tlet valid = true;\n\n\t\t// Matrix test\n\t\tif (\n\t\t\taction.matrix &&\n\t\t\t_.isFunction(row.model.allows) &&\n\t\t\t!row.model.allows(action.matrix)\n\t\t) {\n\t\t\t// Switch to view action if available\n\t\t\taction = Netx.Actions.Find(`${this.eventStr}:view`);\n\t\t\tvalid = !_.isUndefined(action);\n\t\t}\n\n\t\t// There is an enabler test\n\t\tif (valid && _.isFunction(action.enableTest)) {\n\t\t\tvalid = action.enableTest(this.getRowViewById(id));\n\t\t}\n\n\t\t// If still valid and there is a user level test\n\t\tif (valid && _.isNumber(action.userLevel)) {\n\t\t\tvalid = action.userLevel <= Netx.getUserLevel();\n\t\t}\n\t\tvalid && this.performAction(action, [this.getRowViewById(id), e]);\n\t\treturn false;\n\t},\n\n\t/**\n\t * @method\n\t * @param {boolean} remove Remove grid filters (destroy)\n\t */\n\tclearFilters(remove) {\n\t\t// If we have defined a filter, remove it\n\t\tif (this.gridFilter) {\n\t\t\t_.isFunction(this.gridFilter.clear) && this.gridFilter.clear();\n\t\t\t// Defer or risk an error while clear is occuring\n\t\t\tremove && _.defer(_.bind(this.gridFilter.remove, this.gridFilter));\n\t\t}\n\n\t\t// if we have defined a whole mess of filters, remove each one\n\t\tif (this.gridFilters) {\n\t\t\t_.each(this.gridFilters, (filter, key, all) => {\n\t\t\t\t_.isFunction(filter.clear) && filter.clear();\n\t\t\t\t// Defer or risk an error while clear is occuring\n\t\t\t\tremove && _.defer(_.bind(filter.remove, filter));\n\t\t\t});\n\t\t}\n\t},\n\n\t/** @override */\n\tcleanUpTable() {\n\t\t// Clean up backgrid\n\t\tthis.grid && this.grid.remove();\n\t\tthis.clearFilters(true);\n\t},\n\n\t/**\n\t * @method\n\t * @param {number} id Model id\n\t * @return {Backbone.View} View\n\t */\n\tgetRowViewById(id) {\n\t\tconst model = this.collection.get(id);\n\t\tif (!model) {\n\t\t\tthrow new Error(`cant find model \"${id}\" in this.collection`);\n\t\t}\n\n\t\tconst view = this.grid && this.grid.getRowById(model.id);\n\t\tif (view == null) {\n\t\t\tthrow new Error('Could not find view for model id ' + id);\n\t\t}\n\n\t\treturn view;\n\t},\n\n\t/**\n\t * @method\n\t * @param {element} el Element\n\t * @return {string} id\n\t */\n\tgetRowIdByElement(el) {\n\t\tif (!(el instanceof jQuery)) {\n\t\t\tel = this.$(el);\n\t\t}\n\t\tlet $idElement = el;\n\t\tif (!$idElement.is('[data-nx-id]') && !$idElement.is('[data-id]')) {\n\t\t\t$idElement = el.closest('[data-nx-id]');\n\t\t\tif (!$idElement.length) {\n\t\t\t\t$idElement = el.closest('[data-id]');\n\t\t\t}\n\t\t}\n\t\treturn $idElement.data('nx-id') || $idElement.data('id');\n\t},\n\n\t/**\n\t * @method\n\t * @param {Netx.Model} model Row model\n\t * @param {Backgrid.Row} row Row view\n\t */\n\trowAdded(model, row) {},\n\n\t/**\n\t * @method\n\t * @param {mixed} id Row's model id\n\t * @param {event} e `click` event\n\t */\n\trowClicked(id, e) {\n\t\tthis.edit(id, e);\n\t},\n\n\t/**\n\t * Triggered when row selections are changed.\n\t * By default it enables/disables `this.$deleteButton`. Override it to handle any other things you'd like to have change with the selection.\n\t * @param {array} selection Selection\n\t */\n\tselectChanged(selection) {\n\t\tthis.$deleteBtn && this.$deleteBtn.toggle(selection.length > 0);\n\t\treturn true;\n\t},\n\n\t/**\n\t * Returns an array of ids for the models that are selected.\n\t * It also caches that list in this.selected[].\n\t * @return {array} Selected rows\n\t */\n\tselected() {\n\t\tthis.selection = [];\n\t\t_.each(\n\t\t\tthis.$('.select-row-cell input:checked').closest('tr'),\n\t\t\tfunction (tr) {\n\t\t\t\tthis.selection.push(this.$(tr).attr('data-id'));\n\t\t\t},\n\t\t\tthis,\n\t\t);\n\t\treturn this.selection;\n\t},\n};\n\n// Give backgrid the ability to participate in our actions and menus\n// See Netx.Views.TableView (postRender) about this\n// These are the only methods necessary ( and which do not interfere with an Backgrid prototype methods ) to make this work\n_.extend(\n\tBackgrid.ControlCell.prototype,\n\t_.pick(\n\t\tBase.prototype,\n\t\t'configureActions',\n\t\t'disableAction',\n\t\t'enableAction',\n\t\t'getExcludedViews',\n\t\t'initializeActions',\n\t\t'performAction',\n\t\t'renderActions',\n\t),\n);\n\n// Give our custom backgrid cell access to our autocomplete methods\n_.extend(\n\tBackgrid.CellEditor.prototype,\n\t_.pick(Base.prototype, 'autocomplete', 'detectAutocomplete'),\n);\n// Give our backgrid column cells and rows access to our context menus\n_.extend(Backgrid.Row.prototype, {\n\tconfigureSyncActions: Base.prototype.configureSyncActions,\n\tevents: _.extend(Backgrid.HeaderCell.prototype.events, {\n\t\tcontextmenu: 'findContextMenu',\n\t}),\n\tfindContextMenu: Base.prototype.findContextMenu,\n\tinsertContextMenu: Base.prototype.insertContextMenu,\n});\n_.extend(Backgrid.HeaderCell.prototype, {\n\tconfigureSyncActions: Base.prototype.configureSyncActions,\n\tevents: _.extend(Backgrid.HeaderCell.prototype.events, {\n\t\tcontextmenu: 'findContextMenu',\n\t}),\n\tfindContextMenu: Base.prototype.findContextMenu,\n\tinsertContextMenu: Base.prototype.insertContextMenu,\n});\n_.extend(Backgrid.Cell.prototype, {\n\tconfigureSyncActions: Base.prototype.configureSyncActions,\n});\n\n// This solves the fact that delagateEvents does not get called\n// This is mainly a hack for the select menus - the listener for backgrid:select:filter:ready is just below in our system thing loop\nconst backgridSelectFilter = _.extend(\n\t{},\n\tBackgrid.Extension.SelectFilter.prototype,\n);\n_.extend(Backgrid.Extension.SelectFilter.prototype, {\n\trender() {\n\t\tbackgridSelectFilter.render.apply(this, arguments);\n\t\tsetTimeout(() => {\n\t\t\tdispatcher.trigger('backgrid:select:filter:ready', this.$el);\n\t\t}, 10);\n\t\tthis.delegateEvents();\n\t\treturn this;\n\t},\n});\n\nexport default function (target) {\n\tif (!target || target.hasFunctionality(NAME)) return target;\n\n\ttarget.extendFunctionality(Props);\n\n\ttarget.addInitializer((instance, opts = {}) => {\n\t\tinstance.$el.addClass('table-view');\n\t\tinstance.events = _.extend(\n\t\t\t{\n\t\t\t\t'click .nx-action'(e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t},\n\t\t\t\t'click tbody tr'(e) {\n\t\t\t\t\t// Let the context menu through\n\t\t\t\t\tif (e.isTrigger === 3) return;\n\n\t\t\t\t\tvar $target = instance.$(e.target);\n\t\t\t\t\tif (\n\t\t\t\t\t\t$target.closest('.selectpicker-cell').length ||\n\t\t\t\t\t\t$target.closest('.handle-cell').length ||\n\t\t\t\t\t\t$target.hasClass('handle-cell') ||\n\t\t\t\t\t\t$target.closest('.checkbox').length ||\n\t\t\t\t\t\te.target.type == 'checkbox'\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tinstance.rowClicked(\n\t\t\t\t\t\tinstance.$(e.currentTarget).closest('tr').attr('data-id'),\n\t\t\t\t\t\te,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\t'click .btn-add': 'add',\n\t\t\t\t'click .btn-delete': 'deleteSelected',\n\t\t\t\t'click .select-row-cell'() {\n\t\t\t\t\tinstance.selectChanged(instance.selected());\n\t\t\t\t},\n\t\t\t},\n\t\t\tinstance.events,\n\t\t);\n\n\t\t/** @override */\n\t\tinstance.bindCollectionEvents = _.wrap(\n\t\t\tinstance.bindCollectionEvents,\n\t\t\t(bindCollectionEvents) => {\n\t\t\t\tbindCollectionEvents.call(instance);\n\t\t\t\treturn instance.listenTo(\n\t\t\t\t\tinstance.collection,\n\t\t\t\t\t'backgrid:sort',\n\t\t\t\t\t(column, direction) => {\n\t\t\t\t\t\tinstance.collection.setSort(column.get('name'), direction);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\n\t\t// Wrap the excluded views method\n\t\tinstance.getExcludedViews = _.wrap(\n\t\t\tinstance.getExcludedViews,\n\t\t\t(getExcludedViews) => {\n\t\t\t\treturn [instance.el.querySelector('[data-grid]')].concat(\n\t\t\t\t\tgetExcludedViews.call(instance),\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\n\t\t/**\n\t\t * Differntiate between having `no-assets` and having `no-matches`\n\t\t * @override\n\t\t */\n\t\tinstance.checkHasResults = _.wrap(\n\t\t\tinstance.checkHasResults,\n\t\t\t(checkHasResults) => {\n\t\t\t\tconst el = instance.el;\n\n\t\t\t\t// Remove unless we hit the special case below.\n\t\t\t\tel.removeAttribute('data-nx-no-matches');\n\n\t\t\t\t// Check if we have filters, and if the filters have a value - if there is no filter or no value\n\t\t\t\t// fallback to the classic check\n\t\t\t\tif (\n\t\t\t\t\t(!instance.gridFilters ||\n\t\t\t\t\t\t!Object.values(instance.gridFilters).some(\n\t\t\t\t\t\t\t(gridFilter) => gridFilter.value !== '',\n\t\t\t\t\t\t)) &&\n\t\t\t\t\t(!instance.gridFilter || instance.gridFilter.value === '')\n\t\t\t\t)\n\t\t\t\t\treturn checkHasResults.call(instance);\n\n\t\t\t\t// The length of our collection without filtering\n\t\t\t\tvar trueCollectionLength = 0;\n\t\t\t\tif (instance.gridFilters) {\n\t\t\t\t\t// Loop over each filter until we hit any results at all\n\t\t\t\t\tconst gridFilters = instance.gridFilters;\n\t\t\t\t\tfor (let key in gridFilters) {\n\t\t\t\t\t\tif (gridFilters.hasOwnProperty(key)) {\n\t\t\t\t\t\t\ttrueCollectionLength = gridFilters[key].shadowCollection.length;\n\t\t\t\t\t\t\tif (trueCollectionLength > 0) break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttrueCollectionLength = instance.gridFilter.shadowCollection.length;\n\t\t\t\t}\n\n\t\t\t\t// If our original length is 0 then we do not have assets (unless this.hasAssets is defined and has other plans)\n\t\t\t\tif (!trueCollectionLength) {\n\t\t\t\t\tconst hasResults = _.isFunction(instance.hasAssets)\n\t\t\t\t\t\t? instance.hasAssets()\n\t\t\t\t\t\t: false;\n\t\t\t\t\tif (hasResults) {\n\t\t\t\t\t\tel.removeAttribute('data-nx-no-assets');\n\t\t\t\t\t\tel.removeAttribute('data-nx-no-results');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.setAttribute('data-nx-no-assets', true);\n\t\t\t\t\t\tel.setAttribute('data-nx-no-results', true);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// You have assets, but none of them match what you're searching for.\n\t\t\t\tif (instance.collection.length) {\n\t\t\t\t\tel.removeAttribute('data-nx-no-matches');\n\t\t\t\t\t// Still need to remove these in any event they may have been set\n\t\t\t\t\tel.removeAttribute('data-nx-no-assets');\n\t\t\t\t\tel.removeAttribute('data-nx-no-results');\n\t\t\t\t} else {\n\t\t\t\t\tel.setAttribute('data-nx-no-matches', true);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t/**\n\t\t * Support context menu for table rows\n\t\t * @type {string}\n\t\t */\n\t\tinstance.contextMenu = opts.contextMenu;\n\n\t\t/**\n\t\t * Alternately, this.eventStr is the prefix for both the submit & cancel events generated by the form.\n\t\t * For instance, if eventStr == 'module:foo',\n\t\t * form sumission will trigger 'module:foo:confirmed' on the dispatcher, and cancel will trigger 'module:foo:cancelled'.\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tinstance.eventStr = opts.eventStr;\n\n\t\t// Experimental feature.\n\t\t// BackGrid renders on add/remove/sort, but not on individual model changes, because of the way it handles editable cells.\n\t\t// https://github.com/wyuenho/backgrid/issues/37\n\t\t//\n\t\t// However, we rarely use the editable cells. We'd probably prefer the cells to render on every change.\n\t\t//\n\t\t// If this is true, we re-render the grid on collection change events. (see postRender grid creation section.)\n\t\t//\n\t\t// This could maybe default to true someday? I just don't know what that would do to the grid editor right now.\n\t\t//\n\t\tinstance.renderOnChange = opts.renderOnChange === true;\n\n\t\t/** @type {string} */\n\t\tinstance.tableClassName = opts.tableClassName || 'table table-hover';\n\n\t\t/**\n\t\t * Contains the current set of selected rows, referenced by the unique ID of the models in the collection.\n\t\t * @memberOf Netx.Views.TableView\n\t\t * @alias selection\n\t\t * @type {array}\n\t\t */\n\t\tinstance.selection = opts.selection || [];\n\n\t\tinstance.serverSideSort = opts.serverSideSort === true;\n\n\t\t/**\n\t\t * Children of this class should override this.columns to define their grid columns. See backgrid docs for details.\n\t\t * The default value is one column, containing select boxes for each row.\n\t\t * @memberOf Netx.Views.TableView\n\t\t * @alias columns\n\t\t * @type {object}\n\t\t */\n\t\tinstance.columns = instance.defineColumns();\n\t\t// remove any columns with a userLevel set to keep out lowdown users\n\t\tinstance.columns = _.without(\n\t\t\tinstance.columns,\n\t\t\t_.find(\n\t\t\t\tinstance.columns,\n\t\t\t\t(c) => c.userLevel && c.userLevel > Netx.getUser().get('type'),\n\t\t\t),\n\t\t);\n\n\t\tif (instance.serverSideSort && instance.collection.setSort) {\n\t\t\tinstance.listenTo(instance.collection, 'backgrid:sort', function (\n\t\t\t\tcolumn,\n\t\t\t\tdirection,\n\t\t\t) {\n\t\t\t\tthis.collection.setSort(column.get('name'), direction);\n\t\t\t});\n\t\t}\n\n\t\t// Hey, listen!\n\t\tinstance\n\t\t\t.on('preRenderHook', instance.prepareTable)\n\t\t\t.on('postRenderHook', instance.renderTable)\n\t\t\t.on('removeHook', instance.cleanUpTable)\n\n\t\t\t.on('hidden', () => {\n\t\t\t\t// DAM-6415\n\t\t\t\tinstance.clearFilters();\n\t\t\t});\n\t}, NAME);\n\n\treturn target;\n}\n","export {default} from '@netx/core/functionality/table';\n\nimport {getEnabledActions} from '@netx/core-permissions/properties/actions';\nimport {isMobile} from '@netx/core/lib/underscore-netx';\n\n// import 'theme-css/ui/tables.less';\n\nimport {icon} from '@fortawesome/fontawesome-svg-core';\nimport {\n\tfaCaretDown,\n\tfaEllipsisV,\n\tfaEquals,\n} from '@fortawesome/pro-solid-svg-icons';\n\nconst icons = {\n\tfaCaretDown: icon(faCaretDown).html,\n\tfaEllipsisV: icon(faEllipsisV).html,\n\tfaEquals: icon(faEquals).html,\n};\n\nBackgrid.UIComponents.selectpicker = function () {\n\tconst plugins = (this.plugins = this.plugins || {});\n\tif (plugins.selectpicker) {\n\t\tplugins.selectpicker.destroy();\n\t\tdelete plugins.selectpicker;\n\t}\n\n\t// Check that we want it\n\tconst selectpicker = this.column.get('selectpicker');\n\tif (!selectpicker) return;\n\n\tconst $selectEl = this.$('select');\n\tif (!$selectEl.length) return;\n\n\t$selectEl.selectpicker({\n\t\tstyleBase: 'mdc-button',\n\t\tdoneButtonText: 'done',\n\t\tstyle: '',\n\t\tcontainer: 'body',\n\t\tliveSearch: !isMobile(),\n\t\tnoneSelectedText: i18n.t('i18n.nothingSelected'),\n\t\t// This will be followed by \"search term\"\n\t\tnoneResultsText: i18n.t('i18n.noResultsMatchThing'),\n\t\ttemplate: {\n\t\t\tcaret: icons.faCaretDown,\n\t\t},\n\t\t...selectpicker,\n\t});\n\t// Store for cleanup\n\tplugins.selectpicker = $selectEl.data('selectpicker');\n\tthis.$el.addClass('selectpicker-cell');\n};\n\n// Create copy of original Backgrid.HeaderCell\nconst HeaderCell = {...Backgrid.HeaderCell.prototype};\n// Extend Backgrid.HeaderCell\nObject.assign(Backgrid.HeaderCell.prototype, {\n\t/** @override */\n\trender() {\n\t\tconst r = HeaderCell.render.apply(this, arguments);\n\n\t\tconst column = this.column;\n\t\tconst sortable = Backgrid.callByNeed(\n\t\t\tcolumn.sortable(),\n\t\t\tcolumn,\n\t\t\tthis.collection,\n\t\t);\n\t\tif (sortable && r.el) {\n\t\t\tconst oldCaret = r.el.querySelector('.sort-caret');\n\t\t\tif (oldCaret) {\n\t\t\t\toldCaret.classList.remove('sort-caret');\n\t\t\t\toldCaret.classList.add('sort-order');\n\t\t\t\toldCaret.innerHTML = icons.faCaretDown;\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t},\n});\n\n/**\n * Backgrid.HandleCell\n * Sets the right attributes for reorder handle\n * @class\n * @extends Backgrid.Cell\n */\nBackgrid.HandleCell.prototype.render = function () {\n\tthis.$el.empty().html(icons.faEquals);\n\n\treturn this;\n};\n\n// Backgrid.ControlCell\n// Push them in material menus\nimport MaterialMenus from '@netx/core/functionality/materialMenus';\n\n// Override methods\nconst ControlCell = Backgrid.ControlCell;\nconst OriginalControlCellRender = ControlCell.prototype.render;\nControlCell.prototype.initialize = function (opts) {\n\t// Super\n\tBackgrid.Cell.prototype.initialize.apply(this, arguments);\n\n\tconst column = this.column;\n\tconst model = this.model;\n\n\t// We are neither editable nor sortable\n\tcolumn.set({\n\t\teditable: false,\n\t\tsortable: false,\n\t});\n\n\t// Listen to all changes\n\tthis.stopListening(model, `change:${column.get('name')}`);\n\tthis.listenTo(model.collection, 'change sync', _.debounce(this.render, 10));\n\n\t// Set up any additonal functionality\n\tconst __initializers__ = this.constructor.__initializers__ || [];\n\t__initializers__.forEach((func) => func(this, opts));\n};\nControlCell.prototype.render = function () {\n\tconst column = this.column;\n\t// DAM-15560 band-aid until we rework menus and actions\n\tif (column.get('noMenu')) {\n\t\treturn OriginalControlCellRender.call(this);\n\t}\n\n\tthis.trigger('preRenderHook', this);\n\n\tconst model = this.model;\n\tconst columnName = column.get('name');\n\n\tthis.$el.empty().addClass(column.get('className') || `${columnName}-attr`);\n\n\tconst omitRender = column.get('omitRender');\n\t// If we should not render\n\tif (_.isFunction(omitRender) && omitRender(model.get(columnName), model)) {\n\t\treturn this;\n\t}\n\n\tconst nxActions = Netx.Actions;\n\t// Get the actual actions\n\tconst actions = this.formatter\n\t\t.fromRaw((column.get('actions') || []).slice(), model)\n\t\t.map((action) => {\n\t\t\treturn nxActions.Find(action);\n\t\t})\n\t\t.filter((action) => action != null);\n\n\tconst enabledActions = getEnabledActions(actions, this);\n\n\tif (!enabledActions.length) {\n\t\tthis.$el.html('');\n\t\treturn this;\n\t}\n\n\tthis.$el.html(\n\t\t[\n\t\t\t'