@papaemmelab/isabl-web 0.3.12 → 0.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -89268,7 +89268,7 @@ exports = module.exports = __webpack_require__("2350")(false);
89268
89268
 
89269
89269
 
89270
89270
  // module
89271
- exports.push([module.i, ".isabl-base-card .v-data-table th.column.sortable.active.desc button.sort-icon{-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.isabl-base-card .v-data-table th.column.sortable.active button.sort-icon{color:var(--v-primary-base)}.isabl-base-card .v-data-table th.column.sortable button{font-size:13px!important;margin-left:4px}.isabl-base-card .v-data-table .v-data-table__wrapper{max-height:300px;overflow-y:auto}.isabl-base-card .v-data-table .table-cell{height:25px!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:300px;padding-left:5px!important}.isabl-base-card .v-data-table .table-cell .v-chip.v-size--small{height:20px}.isabl-base-card .v-data-table tr.table-headers.table-cell{position:sticky;top:0;background:#fff;cursor:pointer;height:32px}.isabl-base-card .v-data-table tr.table-headers.table-cell th{background:rgba(0,0,0,.04)}.isabl-base-card .v-data-table.theme--dark,.isabl-base-card .v-data-table.theme--dark tr.column-filters th,.isabl-base-card .v-data-table.theme--dark tr.table-headers.table-cell th{background:var(--v-surface-base)}.isabl-base-card .v-data-table th.column.sortable{padding:0 5px}.isabl-base-card .v-data-table tr.column-filters th{height:32px}.isabl-base-card .v-data-table .v-data-table__empty-wrapper>td{padding:0}.table-filter-input{min-width:150px}.table-filter-input .v-input__icon--append .v-icon{font-size:14px}.table-filter-input input{font-size:14px;font-weight:400;padding-left:6px!important}.table-filter-input label{font-size:13px;padding-left:6px}.column-filters{position:sticky;top:25px;background:#fff}.column-filters .v-select{margin:0}.column-filters .v-select .v-input__slot,.column-filters .v-select input{height:25px}.column-filters .v-select .v-icon{font-size:16px}.column-filters .v-select__selections{display:contents;max-width:120px;font-size:14px;font-weight:400}.column-filters .v-select__selections span,.column-filters .v-text-field .v-input__append-inner{padding:0}.v-list .v-list-item{min-height:25px}.v-list .v-list-item .v-list-item__title{font-size:14px;font-weight:400}.v-list .v-list-item .v-list-item__content{padding:0 10px}div.v-list--dense .v-list-item{min-height:25px;padding:0}div.v-list--dense .v-list-item .v-list-item__action{margin:0;padding:0 4px}div.v-list--dense .v-list-item .v-list-item__title{font-size:14px;font-weight:400}div.v-list--dense .v-list-item .v-list-item__content{padding:0}.v-select-list{overflow:hidden}.v-menu__content:not(.v-autocomplete__content) .v-list__tile{height:23px}table.v-table tbody tr{border:0!important}table.v-table thead tr{height:30px!important}table.v-table thead tr.v-datatable__progress{height:0!important;border-top:1px solid rgba(0,0,0,.05)}table.v-table thead th{padding-left:5px!important;padding-right:5px!important}div.v-data-table__actions{-ms-flex-wrap:nowrap;flex-wrap:nowrap}div.v-data-table__actions__pagination{width:100%;min-width:170px;margin:0 10px 0 10px}div.v-data-table__actions__select{white-space:normal;overflow:hidden;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-right:5px;max-width:100px}div.v-data-table__actions__select .v-select{margin-left:25px;margin-right:0;margin-top:0;margin-bottom:0}div.v-data-table__actions__range-controls{width:100%}div.v-data-table__actions button{margin:0;margin-right:5px}.section-toggle{cursor:pointer}.isabl-base-card .v-data-footer{font-size:12px;padding:0}.isabl-base-card .v-data-footer div.v-select__selection{font-size:12px}.isabl-base-card .v-data-footer div.v-select{margin:4px 0 4px 16px}.v-data-footer__select .v-menu__content .v-list-item{min-height:25px;font-size:14px}.v-data-footer__select .v-menu__content .v-list-item .v-list-item__content{padding:0}code.markdown-style{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(175,184,193,.2);border-radius:6px;color:#24292f}.v-data-table .v-data-footer .v-data-footer__select{margin-left:0;margin-right:auto}.v-data-table .v-data-footer .v-data-footer__pagination{margin-left:auto;margin-right:auto}.v-data-table .v-data-footer .v-data-footer__icons-before{margin-left:auto;margin-right:0}.v-data-table .v-data-footer .v-data-footer__icons-after{margin-left:0;margin-right:0}", ""]);
89271
+ exports.push([module.i, ".isabl-base-card .v-data-table th.column.sortable.active.desc button.sort-icon{-webkit-transform:rotate(-180deg);transform:rotate(-180deg)}.isabl-base-card .v-data-table th.column.sortable.active button.sort-icon{color:var(--v-primary-base)}.isabl-base-card .v-data-table th.column.sortable button{font-size:13px!important;margin-left:4px}.isabl-base-card .v-data-table .v-data-table__wrapper{max-height:300px;overflow-y:auto}.isabl-base-card .v-data-table .table-cell{height:25px!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:300px;padding-left:5px!important}.isabl-base-card .v-data-table .table-cell .v-chip.v-size--small{height:20px}.isabl-base-card .v-data-table tr.table-headers.table-cell{position:sticky;top:0;background:#fff;cursor:pointer;height:32px}.isabl-base-card .v-data-table tr.table-headers.table-cell th{background:rgba(0,0,0,.04)}.isabl-base-card .v-data-table.theme--dark,.isabl-base-card .v-data-table.theme--dark tr.column-filters th,.isabl-base-card .v-data-table.theme--dark tr.table-headers.table-cell th{background:var(--v-surface-base)}.isabl-base-card .v-data-table th.column.sortable{padding:0 5px}.isabl-base-card .v-data-table tr.column-filters th{height:32px}.isabl-base-card .v-data-table .v-data-table__empty-wrapper>td{padding:0}.table-filter-input{min-width:150px}.table-filter-input .v-input__icon--append .v-icon{font-size:14px}.table-filter-input input{font-size:14px;font-weight:400;padding-left:6px!important}.table-filter-input label{font-size:13px;padding-left:6px}.column-filters{position:sticky;top:25px;background:#fff;z-index:10}.column-filters .v-select{margin:0}.column-filters .v-select .v-input__slot,.column-filters .v-select input{height:25px}.column-filters .v-select .v-icon{font-size:16px}.column-filters .v-select__selections{display:contents;max-width:120px;font-size:14px;font-weight:400}.column-filters .v-select__selections span,.column-filters .v-text-field .v-input__append-inner{padding:0}.v-list .v-list-item{min-height:25px}.v-list .v-list-item .v-list-item__title{font-size:14px;font-weight:400}.v-list .v-list-item .v-list-item__content{padding:0 10px}div.v-list--dense .v-list-item{min-height:25px;padding:0}div.v-list--dense .v-list-item .v-list-item__action{margin:0;padding:0 4px}div.v-list--dense .v-list-item .v-list-item__title{font-size:14px;font-weight:400}div.v-list--dense .v-list-item .v-list-item__content{padding:0}.v-select-list{overflow:hidden}.v-menu__content:not(.v-autocomplete__content) .v-list__tile{height:23px}table.v-table tbody tr{border:0!important}table.v-table thead tr{height:30px!important}table.v-table thead tr.v-datatable__progress{height:0!important;border-top:1px solid rgba(0,0,0,.05)}table.v-table thead th{padding-left:5px!important;padding-right:5px!important}div.v-data-table__actions{-ms-flex-wrap:nowrap;flex-wrap:nowrap}div.v-data-table__actions__pagination{width:100%;min-width:170px;margin:0 10px 0 10px}div.v-data-table__actions__select{white-space:normal;overflow:hidden;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-right:5px;max-width:100px}div.v-data-table__actions__select .v-select{margin-left:25px;margin-right:0;margin-top:0;margin-bottom:0}div.v-data-table__actions__range-controls{width:100%}div.v-data-table__actions button{margin:0;margin-right:5px}.section-toggle{cursor:pointer}.isabl-base-card .v-data-footer{font-size:12px;padding:0}.isabl-base-card .v-data-footer div.v-select__selection{font-size:12px}.isabl-base-card .v-data-footer div.v-select{margin:4px 0 4px 16px}.v-data-footer__select .v-menu__content .v-list-item{min-height:25px;font-size:14px}.v-data-footer__select .v-menu__content .v-list-item .v-list-item__content{padding:0}code.markdown-style{padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(175,184,193,.2);border-radius:6px;color:#24292f}.v-data-table .v-data-footer .v-data-footer__select{margin-left:0;margin-right:auto}.v-data-table .v-data-footer .v-data-footer__pagination{margin-left:auto;margin-right:auto}.v-data-table .v-data-footer .v-data-footer__icons-before{margin-left:auto;margin-right:0}.v-data-table .v-data-footer .v-data-footer__icons-after{margin-left:0;margin-right:0}", ""]);
89272
89272
 
89273
89273
  // exports
89274
89274
 
@@ -91168,7 +91168,7 @@ module.exports = overArg;
91168
91168
  /***/ "9224":
91169
91169
  /***/ (function(module) {
91170
91170
 
91171
- module.exports = JSON.parse("{\"name\":\"@papaemmelab/isabl-web\",\"version\":\"0.3.12\",\"scripts\":{\"serve\":\"vue-cli-service serve\",\"lint\":\"vue-cli-service lint\",\"build-lib\":\"vue-cli-service build --target lib --name isabl-web ./src/main.js\",\"build-wc\":\"vue-cli-service build --target wc --name isabl-web ./src/components/*.vue\",\"build-wc-async\":\"vue-cli-service build --target wc-async --name isabl-web ./src/components/*.vue\",\"publish-app\":\"yarn version --patch && yarn build-lib && yarn publish --access public\",\"dev\":\"yarn build-lib --watch\",\"test:unit\":\"vue-cli-service test:unit\",\"test:e2e\":\"vue-cli-service test:e2e\",\"test:travis\":\"yarn test:e2e --headless\",\"test:submissions\":\"node tests/utils/create_test_submission.js\",\"test:report-coverage\":\"nyc report --reporter=text-lcov > coverage.lcov && codecov -t $CODECOV_TOKEN\",\"demo\":\"nodemon demo/demo-app.js\"},\"dependencies\":{\"@mdi/font\":\"^7.0.96\",\"ansi_up\":\"^5\",\"axios\":\"^0.21.1\",\"crossfilter\":\"^1.3.12\",\"crossfilter2\":\"^1.4.7\",\"d3-tip\":\"^0.9.1\",\"dc\":\"3.1.2\",\"detect-csv\":\"^1.1.0\",\"js-md5\":\"^0.7.3\",\"minify-css-string\":\"^1.0.0\",\"moment\":\"^2.22.2\",\"register-service-worker\":\"^1.5.2\",\"v-hotkey\":\"^0.6.0\",\"vue\":\"^2.5.16\",\"vue-clipboard2\":\"^0.2.1\",\"vue-gallery\":\"^1.4.0\",\"vue-highlightjs\":\"^1.3.3\",\"vue-json-excel\":\"^0.2.5\",\"vue-observe-visibility\":\"^0.4.6\",\"vue-router\":\"^3.0.1\",\"vue-upload-component\":\"^2.8.11\",\"vuetify\":\"2.6.10\",\"vuex\":\"^3.0.1\",\"vuex-router-sync\":\"^5.0.0\"},\"devDependencies\":{\"@cypress/code-coverage\":\"^1.10.1\",\"@vue/cli-plugin-babel\":\"^3.3.0\",\"@vue/cli-plugin-e2e-cypress\":\"^3.3.0\",\"@vue/cli-plugin-eslint\":\"^3.3.0\",\"@vue/cli-plugin-pwa\":\"^3.3.0\",\"@vue/cli-plugin-unit-jest\":\"^3.3.0\",\"@vue/cli-service\":\"^3.3.0\",\"@vue/eslint-config-prettier\":\"^3.0.5\",\"@vue/test-utils\":\"^1.0.0-beta.20\",\"axios-mock-adapter\":\"^1.15.0\",\"babel-core\":\"7.0.0-bridge.0\",\"babel-jest\":\"^23.0.1\",\"babel-plugin-istanbul\":\"^5.2.0\",\"codecov\":\"^3.6.1\",\"eslint-plugin-vuetify\":\"^1.1.0\",\"express\":\"^4.16.3\",\"html-webpack-plugin\":\"^3.2.0\",\"istanbul-lib-coverage\":\"^2.0.5\",\"mini-css-extract-plugin\":\"^0.4.2\",\"nyc\":\"^14.1.1\",\"sass\":\"^1.55.0\",\"sass-loader\":\"^7.0.1\",\"vue-template-compiler\":\"^2.5.16\",\"xlsx-populate\":\"^1.19.1\"},\"browserslist\":[\"> 1%\",\"last 2 versions\",\"not ie <= 8\"],\"main\":\"./dist/isabl-web.umd.min.js\",\"license\":\"MIT\",\"files\":[\"dist/isabl-web*.js\"],\"author\":\"Juan S. Medina - Juan E. Arango\",\"description\":\"Isabl Frontend of the MSK Academic License.\",\"bugs\":{\"url\":\"https://github.com/papaemmelab/isabl_web/issues\"},\"homepage\":\"https://github.com/papaemmelab/isabl_web#readme\"}");
91171
+ module.exports = JSON.parse("{\"name\":\"@papaemmelab/isabl-web\",\"version\":\"0.3.16\",\"scripts\":{\"serve\":\"vue-cli-service serve\",\"lint\":\"vue-cli-service lint\",\"build-lib\":\"vue-cli-service build --target lib --name isabl-web ./src/main.js\",\"build-wc\":\"vue-cli-service build --target wc --name isabl-web ./src/components/*.vue\",\"build-wc-async\":\"vue-cli-service build --target wc-async --name isabl-web ./src/components/*.vue\",\"publish-app\":\"yarn version --patch && yarn build-lib && yarn publish --access public\",\"dev\":\"yarn build-lib --watch\",\"test:unit\":\"vue-cli-service test:unit\",\"test:e2e\":\"vue-cli-service test:e2e\",\"test:travis\":\"yarn test:e2e --headless\",\"test:submissions\":\"node tests/utils/create_test_submission.js\",\"test:report-coverage\":\"nyc report --reporter=text-lcov > coverage.lcov && codecov -t $CODECOV_TOKEN\",\"demo\":\"nodemon demo/demo-app.js\"},\"dependencies\":{\"@mdi/font\":\"^7.0.96\",\"ansi_up\":\"^5\",\"axios\":\"^0.21.1\",\"crossfilter\":\"^1.3.12\",\"crossfilter2\":\"^1.4.7\",\"d3-tip\":\"^0.9.1\",\"dc\":\"3.1.2\",\"detect-csv\":\"^1.1.0\",\"js-md5\":\"^0.7.3\",\"minify-css-string\":\"^1.0.0\",\"moment\":\"^2.22.2\",\"register-service-worker\":\"^1.5.2\",\"v-hotkey\":\"^0.6.0\",\"vue\":\"^2.5.16\",\"vue-clipboard2\":\"^0.2.1\",\"vue-gallery\":\"^1.4.0\",\"vue-highlightjs\":\"^1.3.3\",\"vue-json-excel\":\"^0.2.5\",\"vue-observe-visibility\":\"^0.4.6\",\"vue-router\":\"^3.0.1\",\"vue-upload-component\":\"^2.8.11\",\"vuetify\":\"2.6.10\",\"vuex\":\"^3.0.1\",\"vuex-router-sync\":\"^5.0.0\"},\"devDependencies\":{\"@cypress/code-coverage\":\"^1.10.1\",\"@vue/cli-plugin-babel\":\"^3.3.0\",\"@vue/cli-plugin-e2e-cypress\":\"^3.3.0\",\"@vue/cli-plugin-eslint\":\"^3.3.0\",\"@vue/cli-plugin-pwa\":\"^3.3.0\",\"@vue/cli-plugin-unit-jest\":\"^3.3.0\",\"@vue/cli-service\":\"^3.3.0\",\"@vue/eslint-config-prettier\":\"^3.0.5\",\"@vue/test-utils\":\"^1.0.0-beta.20\",\"axios-mock-adapter\":\"^1.15.0\",\"babel-core\":\"7.0.0-bridge.0\",\"babel-jest\":\"^23.0.1\",\"babel-plugin-istanbul\":\"^5.2.0\",\"codecov\":\"^3.6.1\",\"eslint-plugin-vuetify\":\"^1.1.0\",\"express\":\"^4.16.3\",\"html-webpack-plugin\":\"^3.2.0\",\"istanbul-lib-coverage\":\"^2.0.5\",\"mini-css-extract-plugin\":\"^0.4.2\",\"nyc\":\"^14.1.1\",\"sass\":\"^1.55.0\",\"sass-loader\":\"^7.0.1\",\"vue-template-compiler\":\"^2.5.16\",\"xlsx-populate\":\"^1.19.1\"},\"browserslist\":[\"> 1%\",\"last 2 versions\",\"not ie <= 8\"],\"main\":\"./dist/isabl-web.umd.min.js\",\"license\":\"MIT\",\"files\":[\"dist/isabl-web*.js\"],\"author\":\"Juan S. Medina - Juan E. Arango\",\"description\":\"Isabl Frontend of the MSK Academic License.\",\"bugs\":{\"url\":\"https://github.com/papaemmelab/isabl_web/issues\"},\"homepage\":\"https://github.com/papaemmelab/isabl_web#readme\"}");
91172
91172
 
91173
91173
  /***/ }),
91174
91174
 
@@ -209313,7 +209313,7 @@ var tableColumns = (cov_2ayx42smu.s[23]++, {
209313
209313
  field: 'owner'
209314
209314
  }, {
209315
209315
  verboseName: 'Analyst',
209316
- field: 'analyist'
209316
+ field: 'analyst'
209317
209317
  }, {
209318
209318
  verboseName: 'Coordinator',
209319
209319
  field: 'coordinator'
@@ -222354,12 +222354,12 @@ var EditProfileModal_component = normalizeComponent(
222354
222354
  )
222355
222355
 
222356
222356
  /* harmony default export */ var EditProfileModal = (EditProfileModal_component.exports);
222357
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/projects/NewProjectModal.vue?vue&type=template&id=58c607e8&
222358
- var NewProjectModalvue_type_template_id_58c607e8_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('base-modal',{attrs:{"show-modal":_vm.showModal,"max-width":"800px"},on:{"close-modal":_vm.closeModal},scopedSlots:_vm._u([{key:"title",fn:function(){return [_vm._v("Create Project")]},proxy:true},{key:"content",fn:function(){return [_c('v-container',{staticClass:"pa-0"},[_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('v-text-field',{ref:"title",staticClass:"pt-6",attrs:{"v-show":_vm.showModal,"rules":[_vm.rules.required],"error-messages":_vm.errorMessages.title,"label":"Project Title","data-test":"new-project-title-input"},on:{"keyup":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }return _vm.submit.apply(null, arguments)}},model:{value:(_vm.project.title),callback:function ($$v) {_vm.$set(_vm.project, "title", $$v)},expression:"project.title"}})],1)],1),_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.showOptionalFields),expression:"showOptionalFields"}],staticClass:"pa-0"},[_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('v-text-field',{ref:"shortTitle",attrs:{"rules":[_vm.rules.unicode, _vm.rules.min10],"error-messages":_vm.errorMessages.short_title,"label":"Project Short Title","data-test":"new-project-short-input","counter":"","dense":"","maxlength":"30","hint":"Think of the objective of the project."},model:{value:(_vm.project.shortTitle),callback:function ($$v) {_vm.$set(_vm.project, "shortTitle", $$v)},expression:"project.shortTitle"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('v-select',{ref:"group",attrs:{"items":_vm.groups,"return-object":"","item-text":"slug","label":"Group","dense":"","data-test":"new-project-groups-input"},model:{value:(_vm.project.group),callback:function ($$v) {_vm.$set(_vm.project, "group", $$v)},expression:"project.group"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"principalInvestigator",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.principal_investigator,"field":"principalInvestigator","label":"Principal Investigator","data-test":"new-project-pi-input","hint":"Laboratory head or principal investigator","dense":""},on:{"update-value":_vm.updateValue}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"owner",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.owner,"field":"owner","label":"Project Owner","data-test":"new-project-owner-input","hint":"Who deals with the nitty-gritty of the project","dense":""},on:{"update-value":_vm.updateValue}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"coordinator",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.coordinator,"field":"coordinator","label":"Coordinator","data-test":"new-project-coord-input","hint":"Project manager or coordinator","dense":""},on:{"update-value":_vm.updateValue}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"analyst",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.analyst,"field":"analyst","label":"Data Analyst","data-test":"new-project-analyst-input","hint":"Person responsible for the data analysis"},on:{"update-value":_vm.updateValue}})],1)],1)],1)],1)]},proxy:true},{key:"footer-actions",fn:function(){return [_c('v-btn',{attrs:{"color":"primary darken-1","data-test":"new-project-optional-btn","text":""},on:{"click":_vm.toggleOptionalFields}},[_vm._v("Optional Fields")]),_c('v-btn',{attrs:{"color":"primary darken-1","data-test":"new-project-create-btn","text":""},on:{"click":_vm.submit}},[_vm._v("Create")])]},proxy:true}])})}
222359
- var NewProjectModalvue_type_template_id_58c607e8_staticRenderFns = []
222357
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/projects/NewProjectModal.vue?vue&type=template&id=070ec06c&
222358
+ var NewProjectModalvue_type_template_id_070ec06c_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('base-modal',{attrs:{"show-modal":_vm.showModal,"max-width":"800px"},on:{"close-modal":_vm.closeModal},scopedSlots:_vm._u([{key:"title",fn:function(){return [_vm._v("Create Project")]},proxy:true},{key:"content",fn:function(){return [_c('v-container',{staticClass:"pa-0"},[_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('v-text-field',{ref:"title",staticClass:"pt-6",attrs:{"v-show":_vm.showModal,"rules":[_vm.rules.required],"error-messages":_vm.errorMessages.title,"label":"Project Title","data-test":"new-project-title-input"},on:{"keyup":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }return _vm.submit.apply(null, arguments)}},model:{value:(_vm.project.title),callback:function ($$v) {_vm.$set(_vm.project, "title", $$v)},expression:"project.title"}})],1)],1),_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.showOptionalFields),expression:"showOptionalFields"}],staticClass:"pa-0"},[_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('v-text-field',{ref:"shortTitle",attrs:{"rules":[_vm.rules.unicode, _vm.rules.min10],"error-messages":_vm.errorMessages.short_title,"label":"Project Short Title","data-test":"new-project-short-input","counter":"","dense":"","maxlength":"30","hint":"Think of the objective of the project."},model:{value:(_vm.project.shortTitle),callback:function ($$v) {_vm.$set(_vm.project, "shortTitle", $$v)},expression:"project.shortTitle"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('v-select',{ref:"group",attrs:{"items":_vm.groups,"return-object":"","item-text":"slug","label":"Group","dense":"","data-test":"new-project-groups-input"},model:{value:(_vm.project.group),callback:function ($$v) {_vm.$set(_vm.project, "group", $$v)},expression:"project.group"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"principalInvestigator",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.principal_investigator,"field":"principalInvestigator","label":"Principal Investigator","data-test":"new-project-pi-input","hint":"Laboratory head or principal investigator","dense":""},on:{"update-value":_vm.updateValue}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"owner",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.owner,"field":"owner","label":"Project Owner","data-test":"new-project-owner-input","hint":"Who deals with the nitty-gritty of the project","dense":""},on:{"update-value":_vm.updateValue}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"coordinator",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.coordinator,"field":"coordinator","label":"Coordinator","data-test":"new-project-coord-input","hint":"Project manager or coordinator","dense":""},on:{"update-value":_vm.updateValue}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"analyst",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.analyst,"field":"analyst","label":"Data Analyst","data-test":"new-project-analyst-input","hint":"Person responsible for the data analysis"},on:{"update-value":_vm.updateValue}})],1)],1)],1)],1)]},proxy:true},{key:"footer-actions",fn:function(){return [_c('v-btn',{attrs:{"color":"primary darken-1","data-test":"new-project-optional-btn","text":""},on:{"click":_vm.toggleOptionalFields}},[_vm._v("Optional Fields")]),_c('v-btn',{attrs:{"color":"primary darken-1","data-test":"new-project-create-btn","text":""},on:{"click":_vm.submit}},[_vm._v("Create")])]},proxy:true}])})}
222359
+ var NewProjectModalvue_type_template_id_070ec06c_staticRenderFns = []
222360
222360
 
222361
222361
 
222362
- // CONCATENATED MODULE: ./src/components/projects/NewProjectModal.vue?vue&type=template&id=58c607e8&
222362
+ // CONCATENATED MODULE: ./src/components/projects/NewProjectModal.vue?vue&type=template&id=070ec06c&
222363
222363
 
222364
222364
  // EXTERNAL MODULE: ./node_modules/lodash/has.js
222365
222365
  var has = __webpack_require__("3852");
@@ -224522,7 +224522,7 @@ var UserSearchInput_component = normalizeComponent(
224522
224522
  // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/projects/NewProjectModal.vue?vue&type=script&lang=js&
224523
224523
  var cov_41uwsnrpn = function () {
224524
224524
  var path = "/Users/juanes/papaemmelab/isabl_web/src/components/projects/NewProjectModal.vue";
224525
- var hash = "880a7035d32da713e533258d2460ef2446ff3c8f";
224525
+ var hash = "39bf82dbca3de1e3096f5011f5bbc47921642eb4";
224526
224526
  var global = new Function("return this")();
224527
224527
  var gcv = "__coverage__";
224528
224528
  var coverageData = {
@@ -224560,272 +224560,272 @@ var cov_41uwsnrpn = function () {
224560
224560
  },
224561
224561
  "3": {
224562
224562
  start: {
224563
- line: 209,
224563
+ line: 208,
224564
224564
  column: 8
224565
224565
  },
224566
224566
  end: {
224567
- line: 211,
224568
- column: 9
224567
+ line: 208,
224568
+ column: 26
224569
224569
  }
224570
224570
  },
224571
224571
  "4": {
224572
224572
  start: {
224573
224573
  line: 210,
224574
- column: 10
224574
+ column: 8
224575
224575
  },
224576
224576
  end: {
224577
- line: 210,
224578
- column: 48
224577
+ line: 213,
224578
+ column: 9
224579
224579
  }
224580
224580
  },
224581
224581
  "5": {
224582
224582
  start: {
224583
- line: 212,
224584
- column: 8
224583
+ line: 211,
224584
+ column: 10
224585
224585
  },
224586
224586
  end: {
224587
- line: 212,
224588
- column: 26
224587
+ line: 211,
224588
+ column: 48
224589
224589
  }
224590
224590
  },
224591
224591
  "6": {
224592
224592
  start: {
224593
- line: 213,
224594
- column: 8
224593
+ line: 212,
224594
+ column: 10
224595
224595
  },
224596
224596
  end: {
224597
- line: 213,
224598
- column: 24
224597
+ line: 212,
224598
+ column: 26
224599
224599
  }
224600
224600
  },
224601
224601
  "7": {
224602
224602
  start: {
224603
- line: 219,
224603
+ line: 218,
224604
224604
  column: 4
224605
224605
  },
224606
224606
  end: {
224607
- line: 227,
224608
- column: 6
224607
+ line: 218,
224608
+ column: 26
224609
224609
  }
224610
224610
  },
224611
224611
  "8": {
224612
224612
  start: {
224613
- line: 220,
224613
+ line: 223,
224614
224614
  column: 6
224615
224615
  },
224616
224616
  end: {
224617
- line: 226,
224618
- column: 7
224617
+ line: 231,
224618
+ column: 8
224619
224619
  }
224620
224620
  },
224621
224621
  "9": {
224622
224622
  start: {
224623
- line: 221,
224623
+ line: 224,
224624
224624
  column: 8
224625
224625
  },
224626
224626
  end: {
224627
- line: 221,
224628
- column: 44
224627
+ line: 230,
224628
+ column: 9
224629
224629
  }
224630
224630
  },
224631
224631
  "10": {
224632
224632
  start: {
224633
- line: 222,
224634
- column: 13
224633
+ line: 225,
224634
+ column: 10
224635
224635
  },
224636
224636
  end: {
224637
- line: 226,
224638
- column: 7
224637
+ line: 225,
224638
+ column: 46
224639
224639
  }
224640
224640
  },
224641
224641
  "11": {
224642
224642
  start: {
224643
- line: 223,
224644
- column: 8
224643
+ line: 226,
224644
+ column: 15
224645
224645
  },
224646
224646
  end: {
224647
- line: 223,
224648
- column: 66
224647
+ line: 230,
224648
+ column: 9
224649
224649
  }
224650
224650
  },
224651
224651
  "12": {
224652
224652
  start: {
224653
- line: 224,
224654
- column: 13
224653
+ line: 227,
224654
+ column: 10
224655
224655
  },
224656
224656
  end: {
224657
- line: 226,
224658
- column: 7
224657
+ line: 227,
224658
+ column: 68
224659
224659
  }
224660
224660
  },
224661
224661
  "13": {
224662
224662
  start: {
224663
- line: 225,
224664
- column: 8
224663
+ line: 228,
224664
+ column: 15
224665
224665
  },
224666
224666
  end: {
224667
- line: 225,
224668
- column: 67
224667
+ line: 230,
224668
+ column: 9
224669
224669
  }
224670
224670
  },
224671
224671
  "14": {
224672
224672
  start: {
224673
- line: 231,
224674
- column: 6
224673
+ line: 229,
224674
+ column: 10
224675
224675
  },
224676
224676
  end: {
224677
- line: 234,
224678
- column: 7
224677
+ line: 229,
224678
+ column: 69
224679
224679
  }
224680
224680
  },
224681
224681
  "15": {
224682
224682
  start: {
224683
- line: 232,
224684
- column: 25
224683
+ line: 234,
224684
+ column: 6
224685
224685
  },
224686
224686
  end: {
224687
- line: 232,
224688
- column: 57
224687
+ line: 237,
224688
+ column: 7
224689
224689
  }
224690
224690
  },
224691
224691
  "16": {
224692
224692
  start: {
224693
- line: 233,
224694
- column: 8
224693
+ line: 235,
224694
+ column: 25
224695
224695
  },
224696
224696
  end: {
224697
- line: 233,
224698
- column: 38
224697
+ line: 235,
224698
+ column: 57
224699
224699
  }
224700
224700
  },
224701
224701
  "17": {
224702
224702
  start: {
224703
- line: 237,
224704
- column: 6
224703
+ line: 236,
224704
+ column: 8
224705
224705
  },
224706
224706
  end: {
224707
- line: 237,
224708
- column: 56
224707
+ line: 236,
224708
+ column: 38
224709
224709
  }
224710
224710
  },
224711
224711
  "18": {
224712
224712
  start: {
224713
- line: 238,
224713
+ line: 240,
224714
224714
  column: 6
224715
224715
  },
224716
224716
  end: {
224717
- line: 238,
224718
- column: 44
224717
+ line: 240,
224718
+ column: 56
224719
224719
  }
224720
224720
  },
224721
224721
  "19": {
224722
224722
  start: {
224723
- line: 239,
224723
+ line: 241,
224724
224724
  column: 6
224725
224725
  },
224726
224726
  end: {
224727
- line: 239,
224728
- column: 54
224727
+ line: 241,
224728
+ column: 44
224729
224729
  }
224730
224730
  },
224731
224731
  "20": {
224732
224732
  start: {
224733
224733
  line: 242,
224734
- column: 23
224734
+ column: 6
224735
224735
  },
224736
224736
  end: {
224737
224737
  line: 242,
224738
- column: 27
224738
+ column: 54
224739
224739
  }
224740
224740
  },
224741
224741
  "21": {
224742
224742
  start: {
224743
- line: 243,
224743
+ line: 245,
224744
224744
  column: 6
224745
224745
  },
224746
224746
  end: {
224747
- line: 243,
224747
+ line: 245,
224748
224748
  column: 32
224749
224749
  }
224750
224750
  },
224751
224751
  "22": {
224752
224752
  start: {
224753
- line: 244,
224753
+ line: 246,
224754
224754
  column: 6
224755
224755
  },
224756
224756
  end: {
224757
- line: 244,
224758
- column: 80
224757
+ line: 246,
224758
+ column: 70
224759
224759
  }
224760
224760
  },
224761
224761
  "23": {
224762
224762
  start: {
224763
- line: 244,
224763
+ line: 246,
224764
224764
  column: 45
224765
224765
  },
224766
224766
  end: {
224767
- line: 244,
224768
- column: 79
224767
+ line: 246,
224768
+ column: 69
224769
224769
  }
224770
224770
  },
224771
224771
  "24": {
224772
224772
  start: {
224773
- line: 247,
224773
+ line: 249,
224774
224774
  column: 6
224775
224775
  },
224776
224776
  end: {
224777
- line: 247,
224777
+ line: 249,
224778
224778
  column: 22
224779
224779
  }
224780
224780
  },
224781
224781
  "25": {
224782
224782
  start: {
224783
- line: 248,
224783
+ line: 250,
224784
224784
  column: 6
224785
224785
  },
224786
224786
  end: {
224787
- line: 248,
224787
+ line: 250,
224788
224788
  column: 31
224789
224789
  }
224790
224790
  },
224791
224791
  "26": {
224792
224792
  start: {
224793
- line: 251,
224793
+ line: 253,
224794
224794
  column: 6
224795
224795
  },
224796
224796
  end: {
224797
- line: 254,
224797
+ line: 256,
224798
224798
  column: 7
224799
224799
  }
224800
224800
  },
224801
224801
  "27": {
224802
224802
  start: {
224803
- line: 257,
224803
+ line: 259,
224804
224804
  column: 6
224805
224805
  },
224806
224806
  end: {
224807
- line: 257,
224807
+ line: 259,
224808
224808
  column: 32
224809
224809
  }
224810
224810
  },
224811
224811
  "28": {
224812
224812
  start: {
224813
- line: 258,
224813
+ line: 260,
224814
224814
  column: 6
224815
224815
  },
224816
224816
  end: {
224817
224817
  line: 260,
224818
- column: 8
224818
+ column: 77
224819
224819
  }
224820
224820
  },
224821
224821
  "29": {
224822
224822
  start: {
224823
- line: 259,
224824
- column: 8
224823
+ line: 260,
224824
+ column: 45
224825
224825
  },
224826
224826
  end: {
224827
- line: 259,
224828
- column: 39
224827
+ line: 260,
224828
+ column: 76
224829
224829
  }
224830
224830
  },
224831
224831
  "30": {
@@ -225010,7 +225010,7 @@ var cov_41uwsnrpn = function () {
225010
225010
  column: 12
225011
225011
  },
225012
225012
  end: {
225013
- line: 228,
225013
+ line: 219,
225014
225014
  column: 3
225015
225015
  }
225016
225016
  },
@@ -225020,118 +225020,118 @@ var cov_41uwsnrpn = function () {
225020
225020
  name: "(anonymous_4)",
225021
225021
  decl: {
225022
225022
  start: {
225023
- line: 219,
225024
- column: 34
225023
+ line: 221,
225024
+ column: 4
225025
225025
  },
225026
225026
  end: {
225027
- line: 219,
225028
- column: 35
225027
+ line: 221,
225028
+ column: 5
225029
225029
  }
225030
225030
  },
225031
225031
  loc: {
225032
225032
  start: {
225033
- line: 219,
225034
- column: 43
225033
+ line: 221,
225034
+ column: 22
225035
225035
  },
225036
225036
  end: {
225037
- line: 227,
225037
+ line: 232,
225038
225038
  column: 5
225039
225039
  }
225040
225040
  },
225041
- line: 219
225041
+ line: 221
225042
225042
  },
225043
225043
  "5": {
225044
225044
  name: "(anonymous_5)",
225045
225045
  decl: {
225046
225046
  start: {
225047
- line: 230,
225048
- column: 4
225047
+ line: 223,
225048
+ column: 36
225049
225049
  },
225050
225050
  end: {
225051
- line: 230,
225052
- column: 5
225051
+ line: 223,
225052
+ column: 37
225053
225053
  }
225054
225054
  },
225055
225055
  loc: {
225056
225056
  start: {
225057
- line: 230,
225058
- column: 24
225057
+ line: 223,
225058
+ column: 45
225059
225059
  },
225060
225060
  end: {
225061
- line: 235,
225062
- column: 5
225061
+ line: 231,
225062
+ column: 7
225063
225063
  }
225064
225064
  },
225065
- line: 230
225065
+ line: 223
225066
225066
  },
225067
225067
  "6": {
225068
225068
  name: "(anonymous_6)",
225069
225069
  decl: {
225070
225070
  start: {
225071
- line: 236,
225071
+ line: 233,
225072
225072
  column: 4
225073
225073
  },
225074
225074
  end: {
225075
- line: 236,
225075
+ line: 233,
225076
225076
  column: 5
225077
225077
  }
225078
225078
  },
225079
225079
  loc: {
225080
225080
  start: {
225081
- line: 236,
225082
- column: 27
225081
+ line: 233,
225082
+ column: 24
225083
225083
  },
225084
225084
  end: {
225085
- line: 240,
225085
+ line: 238,
225086
225086
  column: 5
225087
225087
  }
225088
225088
  },
225089
- line: 236
225089
+ line: 233
225090
225090
  },
225091
225091
  "7": {
225092
225092
  name: "(anonymous_7)",
225093
225093
  decl: {
225094
225094
  start: {
225095
- line: 241,
225095
+ line: 239,
225096
225096
  column: 4
225097
225097
  },
225098
225098
  end: {
225099
- line: 241,
225099
+ line: 239,
225100
225100
  column: 5
225101
225101
  }
225102
225102
  },
225103
225103
  loc: {
225104
225104
  start: {
225105
- line: 241,
225106
- column: 16
225105
+ line: 239,
225106
+ column: 27
225107
225107
  },
225108
225108
  end: {
225109
- line: 245,
225109
+ line: 243,
225110
225110
  column: 5
225111
225111
  }
225112
225112
  },
225113
- line: 241
225113
+ line: 239
225114
225114
  },
225115
225115
  "8": {
225116
225116
  name: "(anonymous_8)",
225117
225117
  decl: {
225118
225118
  start: {
225119
225119
  line: 244,
225120
- column: 36
225120
+ column: 4
225121
225121
  },
225122
225122
  end: {
225123
225123
  line: 244,
225124
- column: 37
225124
+ column: 5
225125
225125
  }
225126
225126
  },
225127
225127
  loc: {
225128
225128
  start: {
225129
225129
  line: 244,
225130
- column: 45
225130
+ column: 16
225131
225131
  },
225132
225132
  end: {
225133
- line: 244,
225134
- column: 79
225133
+ line: 247,
225134
+ column: 5
225135
225135
  }
225136
225136
  },
225137
225137
  line: 244
@@ -225141,21 +225141,21 @@ var cov_41uwsnrpn = function () {
225141
225141
  decl: {
225142
225142
  start: {
225143
225143
  line: 246,
225144
- column: 4
225144
+ column: 36
225145
225145
  },
225146
225146
  end: {
225147
225147
  line: 246,
225148
- column: 5
225148
+ column: 37
225149
225149
  }
225150
225150
  },
225151
225151
  loc: {
225152
225152
  start: {
225153
225153
  line: 246,
225154
- column: 17
225154
+ column: 45
225155
225155
  },
225156
225156
  end: {
225157
- line: 249,
225158
- column: 5
225157
+ line: 246,
225158
+ column: 69
225159
225159
  }
225160
225160
  },
225161
225161
  line: 246
@@ -225164,76 +225164,100 @@ var cov_41uwsnrpn = function () {
225164
225164
  name: "(anonymous_10)",
225165
225165
  decl: {
225166
225166
  start: {
225167
- line: 250,
225167
+ line: 248,
225168
225168
  column: 4
225169
225169
  },
225170
225170
  end: {
225171
- line: 250,
225171
+ line: 248,
225172
225172
  column: 5
225173
225173
  }
225174
225174
  },
225175
225175
  loc: {
225176
225176
  start: {
225177
- line: 250,
225178
- column: 22
225177
+ line: 248,
225178
+ column: 17
225179
225179
  },
225180
225180
  end: {
225181
- line: 255,
225181
+ line: 251,
225182
225182
  column: 5
225183
225183
  }
225184
225184
  },
225185
- line: 250
225185
+ line: 248
225186
225186
  },
225187
225187
  "11": {
225188
225188
  name: "(anonymous_11)",
225189
225189
  decl: {
225190
225190
  start: {
225191
- line: 256,
225191
+ line: 252,
225192
225192
  column: 4
225193
225193
  },
225194
225194
  end: {
225195
- line: 256,
225195
+ line: 252,
225196
225196
  column: 5
225197
225197
  }
225198
225198
  },
225199
225199
  loc: {
225200
225200
  start: {
225201
- line: 256,
225202
- column: 19
225201
+ line: 252,
225202
+ column: 22
225203
225203
  },
225204
225204
  end: {
225205
- line: 283,
225205
+ line: 257,
225206
225206
  column: 5
225207
225207
  }
225208
225208
  },
225209
- line: 256
225209
+ line: 252
225210
225210
  },
225211
225211
  "12": {
225212
225212
  name: "(anonymous_12)",
225213
225213
  decl: {
225214
225214
  start: {
225215
225215
  line: 258,
225216
- column: 36
225216
+ column: 4
225217
225217
  },
225218
225218
  end: {
225219
225219
  line: 258,
225220
- column: 37
225220
+ column: 5
225221
225221
  }
225222
225222
  },
225223
225223
  loc: {
225224
225224
  start: {
225225
225225
  line: 258,
225226
- column: 45
225226
+ column: 19
225227
225227
  },
225228
225228
  end: {
225229
- line: 260,
225230
- column: 7
225229
+ line: 283,
225230
+ column: 5
225231
225231
  }
225232
225232
  },
225233
225233
  line: 258
225234
225234
  },
225235
225235
  "13": {
225236
225236
  name: "(anonymous_13)",
225237
+ decl: {
225238
+ start: {
225239
+ line: 260,
225240
+ column: 36
225241
+ },
225242
+ end: {
225243
+ line: 260,
225244
+ column: 37
225245
+ }
225246
+ },
225247
+ loc: {
225248
+ start: {
225249
+ line: 260,
225250
+ column: 45
225251
+ },
225252
+ end: {
225253
+ line: 260,
225254
+ column: 76
225255
+ }
225256
+ },
225257
+ line: 260
225258
+ },
225259
+ "14": {
225260
+ name: "(anonymous_14)",
225237
225261
  decl: {
225238
225262
  start: {
225239
225263
  line: 263,
@@ -225256,8 +225280,8 @@ var cov_41uwsnrpn = function () {
225256
225280
  },
225257
225281
  line: 263
225258
225282
  },
225259
- "14": {
225260
- name: "(anonymous_14)",
225283
+ "15": {
225284
+ name: "(anonymous_15)",
225261
225285
  decl: {
225262
225286
  start: {
225263
225287
  line: 274,
@@ -225318,202 +225342,169 @@ var cov_41uwsnrpn = function () {
225318
225342
  "1": {
225319
225343
  loc: {
225320
225344
  start: {
225321
- line: 209,
225345
+ line: 210,
225322
225346
  column: 8
225323
225347
  },
225324
225348
  end: {
225325
- line: 211,
225349
+ line: 213,
225326
225350
  column: 9
225327
225351
  }
225328
225352
  },
225329
225353
  type: "if",
225330
225354
  locations: [{
225331
225355
  start: {
225332
- line: 209,
225356
+ line: 210,
225333
225357
  column: 8
225334
225358
  },
225335
225359
  end: {
225336
- line: 211,
225360
+ line: 213,
225337
225361
  column: 9
225338
225362
  }
225339
225363
  }, {
225340
225364
  start: {
225341
- line: 209,
225365
+ line: 210,
225342
225366
  column: 8
225343
225367
  },
225344
225368
  end: {
225345
- line: 211,
225369
+ line: 213,
225346
225370
  column: 9
225347
225371
  }
225348
225372
  }],
225349
- line: 209
225373
+ line: 210
225350
225374
  },
225351
225375
  "2": {
225352
225376
  loc: {
225353
225377
  start: {
225354
- line: 220,
225355
- column: 6
225378
+ line: 224,
225379
+ column: 8
225356
225380
  },
225357
225381
  end: {
225358
- line: 226,
225359
- column: 7
225382
+ line: 230,
225383
+ column: 9
225360
225384
  }
225361
225385
  },
225362
225386
  type: "if",
225363
225387
  locations: [{
225364
225388
  start: {
225365
- line: 220,
225366
- column: 6
225389
+ line: 224,
225390
+ column: 8
225367
225391
  },
225368
225392
  end: {
225369
- line: 226,
225370
- column: 7
225393
+ line: 230,
225394
+ column: 9
225371
225395
  }
225372
225396
  }, {
225373
225397
  start: {
225374
- line: 220,
225375
- column: 6
225398
+ line: 224,
225399
+ column: 8
225376
225400
  },
225377
225401
  end: {
225378
- line: 226,
225379
- column: 7
225402
+ line: 230,
225403
+ column: 9
225380
225404
  }
225381
225405
  }],
225382
- line: 220
225406
+ line: 224
225383
225407
  },
225384
225408
  "3": {
225385
225409
  loc: {
225386
225410
  start: {
225387
- line: 222,
225388
- column: 13
225411
+ line: 226,
225412
+ column: 15
225389
225413
  },
225390
225414
  end: {
225391
- line: 226,
225392
- column: 7
225415
+ line: 230,
225416
+ column: 9
225393
225417
  }
225394
225418
  },
225395
225419
  type: "if",
225396
225420
  locations: [{
225397
225421
  start: {
225398
- line: 222,
225399
- column: 13
225422
+ line: 226,
225423
+ column: 15
225400
225424
  },
225401
225425
  end: {
225402
- line: 226,
225403
- column: 7
225426
+ line: 230,
225427
+ column: 9
225404
225428
  }
225405
225429
  }, {
225406
225430
  start: {
225407
- line: 222,
225408
- column: 13
225431
+ line: 226,
225432
+ column: 15
225409
225433
  },
225410
225434
  end: {
225411
- line: 226,
225412
- column: 7
225435
+ line: 230,
225436
+ column: 9
225413
225437
  }
225414
225438
  }],
225415
- line: 222
225439
+ line: 226
225416
225440
  },
225417
225441
  "4": {
225418
225442
  loc: {
225419
225443
  start: {
225420
- line: 224,
225421
- column: 13
225444
+ line: 228,
225445
+ column: 15
225422
225446
  },
225423
225447
  end: {
225424
- line: 226,
225425
- column: 7
225448
+ line: 230,
225449
+ column: 9
225426
225450
  }
225427
225451
  },
225428
225452
  type: "if",
225429
225453
  locations: [{
225430
225454
  start: {
225431
- line: 224,
225432
- column: 13
225455
+ line: 228,
225456
+ column: 15
225433
225457
  },
225434
225458
  end: {
225435
- line: 226,
225436
- column: 7
225459
+ line: 230,
225460
+ column: 9
225437
225461
  }
225438
225462
  }, {
225439
225463
  start: {
225440
- line: 224,
225441
- column: 13
225464
+ line: 228,
225465
+ column: 15
225442
225466
  },
225443
225467
  end: {
225444
- line: 226,
225445
- column: 7
225468
+ line: 230,
225469
+ column: 9
225446
225470
  }
225447
225471
  }],
225448
- line: 224
225472
+ line: 228
225449
225473
  },
225450
225474
  "5": {
225451
225475
  loc: {
225452
225476
  start: {
225453
- line: 231,
225477
+ line: 234,
225454
225478
  column: 6
225455
225479
  },
225456
225480
  end: {
225457
- line: 234,
225481
+ line: 237,
225458
225482
  column: 7
225459
225483
  }
225460
225484
  },
225461
225485
  type: "if",
225462
225486
  locations: [{
225463
225487
  start: {
225464
- line: 231,
225488
+ line: 234,
225465
225489
  column: 6
225466
225490
  },
225467
225491
  end: {
225468
- line: 234,
225492
+ line: 237,
225469
225493
  column: 7
225470
225494
  }
225471
225495
  }, {
225472
225496
  start: {
225473
- line: 231,
225497
+ line: 234,
225474
225498
  column: 6
225475
225499
  },
225476
225500
  end: {
225477
- line: 234,
225501
+ line: 237,
225478
225502
  column: 7
225479
225503
  }
225480
225504
  }],
225481
- line: 231
225505
+ line: 234
225482
225506
  },
225483
225507
  "6": {
225484
- loc: {
225485
- start: {
225486
- line: 244,
225487
- column: 45
225488
- },
225489
- end: {
225490
- line: 244,
225491
- column: 79
225492
- }
225493
- },
225494
- type: "binary-expr",
225495
- locations: [{
225496
- start: {
225497
- line: 244,
225498
- column: 45
225499
- },
225500
- end: {
225501
- line: 244,
225502
- column: 56
225503
- }
225504
- }, {
225505
- start: {
225506
- line: 244,
225507
- column: 60
225508
- },
225509
- end: {
225510
- line: 244,
225511
- column: 79
225512
- }
225513
- }],
225514
- line: 244
225515
- },
225516
- "7": {
225517
225508
  loc: {
225518
225509
  start: {
225519
225510
  line: 261,
@@ -225546,7 +225537,7 @@ var cov_41uwsnrpn = function () {
225546
225537
  }],
225547
225538
  line: 261
225548
225539
  },
225549
- "8": {
225540
+ "7": {
225550
225541
  loc: {
225551
225542
  start: {
225552
225543
  line: 275,
@@ -225636,7 +225627,8 @@ var cov_41uwsnrpn = function () {
225636
225627
  "11": 0,
225637
225628
  "12": 0,
225638
225629
  "13": 0,
225639
- "14": 0
225630
+ "14": 0,
225631
+ "15": 0
225640
225632
  },
225641
225633
  b: {
225642
225634
  "0": [0, 0],
@@ -225646,8 +225638,7 @@ var cov_41uwsnrpn = function () {
225646
225638
  "4": [0, 0],
225647
225639
  "5": [0, 0],
225648
225640
  "6": [0, 0],
225649
- "7": [0, 0],
225650
- "8": [0, 0]
225641
+ "7": [0, 0]
225651
225642
  },
225652
225643
  inputSourceMap: {
225653
225644
  version: 3,
@@ -225656,10 +225647,10 @@ var cov_41uwsnrpn = function () {
225656
225647
  mappings: ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyJA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
225657
225648
  file: "NewProjectModal.vue",
225658
225649
  sourceRoot: "src/components/projects",
225659
- sourcesContent: ["<template>\n <base-modal\n :show-modal=\"showModal\"\n max-width=\"800px\"\n @close-modal=\"closeModal\"\n >\n <template v-slot:title>Create Project</template>\n\n <template v-slot:content>\n <v-container\n class=\"pa-0\"\n >\n <v-row>\n <v-col cols=\"16\">\n <v-text-field\n ref=\"title\"\n v-model=\"project.title\"\n :v-show=\"showModal\"\n :rules=\"[rules.required]\"\n :error-messages=\"errorMessages.title\"\n label=\"Project Title\"\n data-test=\"new-project-title-input\"\n class=\"pt-6\"\n @keyup.enter=\"submit\"\n />\n </v-col>\n </v-row>\n\n <div\n v-show=\"showOptionalFields\"\n class=\"pa-0\"\n >\n <v-row>\n <v-col cols=\"16\">\n <v-text-field\n ref=\"shortTitle\"\n v-model=\"project.shortTitle\"\n :rules=\"[rules.unicode, rules.min10]\"\n :error-messages=\"errorMessages.short_title\"\n label=\"Project Short Title\"\n data-test=\"new-project-short-input\"\n counter\n dense\n maxlength=\"30\"\n hint=\"Think of the objective of the project.\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <v-select\n ref=\"group\"\n v-model=\"project.group\"\n :items=\"groups\"\n return-object\n item-text=\"slug\"\n label=\"Group\"\n dense\n data-test=\"new-project-groups-input\"\n />\n </v-col>\n </v-row>\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"principalInvestigator\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.principal_investigator\"\n field=\"principalInvestigator\"\n label=\"Principal Investigator\"\n data-test=\"new-project-pi-input\"\n hint=\"Laboratory head or principal investigator\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"owner\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.owner\"\n field=\"owner\"\n label=\"Project Owner\"\n data-test=\"new-project-owner-input\"\n hint=\"Who deals with the nitty-gritty of the project\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"coordinator\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.coordinator\"\n field=\"coordinator\"\n label=\"Coordinator\"\n data-test=\"new-project-coord-input\"\n hint=\"Project manager or coordinator\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"analyst\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.analyst\"\n field=\"analyst\"\n label=\"Data Analyst\"\n data-test=\"new-project-analyst-input\"\n hint=\"Person responsible for the data analysis\"\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n </div>\n\n </v-container>\n </template>\n\n <template v-slot:footer-actions>\n <v-btn\n color=\"primary darken-1\"\n data-test=\"new-project-optional-btn\"\n text\n @click=\"toggleOptionalFields\"\n >Optional Fields</v-btn>\n\n <v-btn\n color=\"primary darken-1\"\n data-test=\"new-project-create-btn\"\n text\n @click=\"submit\"\n >Create</v-btn>\n </template>\n </base-modal>\n</template>\n\n<script>\nimport has from 'lodash/has'\n\nimport BaseModal from '@/components/base/BaseModal.vue'\nimport GroupSearchInput from '@/components/projects/GroupSearchInput'\nimport UserSearchInput from '@/components/projects/UserSearchInput'\nimport rules from '@/utils/rules'\nimport { createRecord, fetchListRecords } from '@/utils/api'\nimport { SHOW_ALERT } from '@/store/actions/alert'\nimport { SHOW_PANEL } from '@/store/actions/panels'\n\nexport default {\n name: 'NewProjectModal',\n components: {\n BaseModal,\n GroupSearchInput,\n UserSearchInput\n },\n props: {\n showModal: {\n type: Boolean,\n default: false,\n required: true\n },\n projects: {\n type: Array,\n default: () => []\n }\n },\n data() {\n return {\n isLoading: false,\n errorMessages: {},\n formHasErrors: false,\n fieldsToValidate: [\n 'title',\n 'shortTitle',\n 'group',\n 'principalInvestigator',\n 'owner',\n 'coordinator',\n 'analyst'\n ],\n groups: [],\n project: {},\n refs: {},\n rules,\n showOptionalFields: false,\n users: [],\n usersQuery: ''\n }\n },\n watch: {\n showModal(value) {\n if (value) {\n // ensure autofocus: https://github.com/vuetifyjs/vuetify/issues/1587\n if (this.$refs.title) {\n this.$nextTick(this.$refs.title.focus)\n }\n this.fetchGroups()\n this.resetForm()\n }\n }\n },\n mounted() {\n // Map all local and nested inputs to local 'refs'\n this.fieldsToValidate.forEach(field => {\n if (has(this.$refs[field], 'reset')) {\n this.refs[field] = this.$refs[field]\n } else if (has(this.$refs[field], '$refs.userSearchInput.reset')) {\n this.refs[field] = this.$refs[field].$refs.userSearchInput\n } else if (has(this.$refs[field], '$refs.groupSearchInput.reset')) {\n this.refs[field] = this.$refs[field].$refs.groupSearchInput\n }\n })\n },\n methods: {\n async fetchGroups() {\n if (!this.groups.length) {\n const response = await fetchListRecords('groups')\n this.groups = response.results\n }\n },\n toggleOptionalFields() {\n this.showOptionalFields = !this.showOptionalFields\n this.$nextTick(this.$refs.title.focus)\n this.$nextTick(this.$refs.title.resetValidation)\n },\n resetForm() {\n const { refs } = this\n this.formHasErrors = false\n this.fieldsToValidate.forEach(field => refs[field] && refs[field].reset())\n },\n closeModal() {\n this.resetForm()\n this.$emit('close-modal')\n },\n updateValue(data) {\n this.project = {\n ...this.project,\n ...data\n }\n },\n async submit() {\n this.formHasErrors = false\n this.fieldsToValidate.forEach(field => {\n this.refs[field].validate(true)\n })\n if (!this.formHasErrors) {\n createRecord('projects', this.project)\n .then(response => {\n const projectId = this.$get(response, 'pk', '')\n this.$store.dispatch(SHOW_ALERT, {\n message: `Project ${projectId} was succesfully created.`\n })\n\n this.$store.dispatch(SHOW_PANEL, {\n project: projectId\n })\n this.closeModal()\n })\n .catch(error => {\n if (error.response) {\n this.errorMessages = error.response.data\n this.$store.dispatch(SHOW_ALERT, {\n error: 'The project could not be created. Please try again.'\n })\n }\n })\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.v-expansion-panel__header {\n padding: 5px !important;\n}\n</style>\n"]
225650
+ sourcesContent: ["<template>\n <base-modal\n :show-modal=\"showModal\"\n max-width=\"800px\"\n @close-modal=\"closeModal\"\n >\n <template v-slot:title>Create Project</template>\n\n <template v-slot:content>\n <v-container\n class=\"pa-0\"\n >\n <v-row>\n <v-col cols=\"16\">\n <v-text-field\n ref=\"title\"\n v-model=\"project.title\"\n :v-show=\"showModal\"\n :rules=\"[rules.required]\"\n :error-messages=\"errorMessages.title\"\n label=\"Project Title\"\n data-test=\"new-project-title-input\"\n class=\"pt-6\"\n @keyup.enter=\"submit\"\n />\n </v-col>\n </v-row>\n\n <div\n v-show=\"showOptionalFields\"\n class=\"pa-0\"\n >\n <v-row>\n <v-col cols=\"16\">\n <v-text-field\n ref=\"shortTitle\"\n v-model=\"project.shortTitle\"\n :rules=\"[rules.unicode, rules.min10]\"\n :error-messages=\"errorMessages.short_title\"\n label=\"Project Short Title\"\n data-test=\"new-project-short-input\"\n counter\n dense\n maxlength=\"30\"\n hint=\"Think of the objective of the project.\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <v-select\n ref=\"group\"\n v-model=\"project.group\"\n :items=\"groups\"\n return-object\n item-text=\"slug\"\n label=\"Group\"\n dense\n data-test=\"new-project-groups-input\"\n />\n </v-col>\n </v-row>\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"principalInvestigator\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.principal_investigator\"\n field=\"principalInvestigator\"\n label=\"Principal Investigator\"\n data-test=\"new-project-pi-input\"\n hint=\"Laboratory head or principal investigator\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"owner\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.owner\"\n field=\"owner\"\n label=\"Project Owner\"\n data-test=\"new-project-owner-input\"\n hint=\"Who deals with the nitty-gritty of the project\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"coordinator\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.coordinator\"\n field=\"coordinator\"\n label=\"Coordinator\"\n data-test=\"new-project-coord-input\"\n hint=\"Project manager or coordinator\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"analyst\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.analyst\"\n field=\"analyst\"\n label=\"Data Analyst\"\n data-test=\"new-project-analyst-input\"\n hint=\"Person responsible for the data analysis\"\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n </div>\n\n </v-container>\n </template>\n\n <template v-slot:footer-actions>\n <v-btn\n color=\"primary darken-1\"\n data-test=\"new-project-optional-btn\"\n text\n @click=\"toggleOptionalFields\"\n >Optional Fields</v-btn>\n\n <v-btn\n color=\"primary darken-1\"\n data-test=\"new-project-create-btn\"\n text\n @click=\"submit\"\n >Create</v-btn>\n </template>\n </base-modal>\n</template>\n\n<script>\nimport has from 'lodash/has'\n\nimport BaseModal from '@/components/base/BaseModal.vue'\nimport GroupSearchInput from '@/components/projects/GroupSearchInput'\nimport UserSearchInput from '@/components/projects/UserSearchInput'\nimport rules from '@/utils/rules'\nimport { createRecord, fetchListRecords } from '@/utils/api'\nimport { SHOW_ALERT } from '@/store/actions/alert'\nimport { SHOW_PANEL } from '@/store/actions/panels'\n\nexport default {\n name: 'NewProjectModal',\n components: {\n BaseModal,\n GroupSearchInput,\n UserSearchInput\n },\n props: {\n showModal: {\n type: Boolean,\n default: false,\n required: true\n },\n projects: {\n type: Array,\n default: () => []\n }\n },\n data() {\n return {\n isLoading: false,\n errorMessages: {},\n formHasErrors: false,\n fieldsToValidate: [\n 'title',\n 'shortTitle',\n 'group',\n 'principalInvestigator',\n 'owner',\n 'coordinator',\n 'analyst'\n ],\n groups: [],\n project: {},\n refs: {},\n rules,\n showOptionalFields: false,\n users: [],\n usersQuery: ''\n }\n },\n watch: {\n showModal(value) {\n if (value) {\n this.fetchGroups()\n // ensure autofocus: https://github.com/vuetifyjs/vuetify/issues/1587\n if (this.$refs.title) {\n this.$nextTick(this.$refs.title.focus)\n this.resetForm()\n }\n }\n }\n },\n updated() {\n this.attachFieldRefs()\n },\n methods: {\n attachFieldRefs() {\n // Map all local and nested inputs to local 'refs' object\n this.fieldsToValidate.forEach(field => {\n if (has(this.$refs[field], 'reset')) {\n this.refs[field] = this.$refs[field]\n } else if (has(this.$refs[field], '$refs.userSearchInput.reset')) {\n this.refs[field] = this.$refs[field].$refs.userSearchInput\n } else if (has(this.$refs[field], '$refs.groupSearchInput.reset')) {\n this.refs[field] = this.$refs[field].$refs.groupSearchInput\n }\n })\n },\n async fetchGroups() {\n if (!this.groups.length) {\n const response = await fetchListRecords('groups')\n this.groups = response.results\n }\n },\n toggleOptionalFields() {\n this.showOptionalFields = !this.showOptionalFields\n this.$nextTick(this.$refs.title.focus)\n this.$nextTick(this.$refs.title.resetValidation)\n },\n resetForm() {\n this.formHasErrors = false\n this.fieldsToValidate.forEach(field => this.refs[field].reset())\n },\n closeModal() {\n this.resetForm()\n this.$emit('close-modal')\n },\n updateValue(data) {\n this.project = {\n ...this.project,\n ...data\n }\n },\n async submit() {\n this.formHasErrors = false\n this.fieldsToValidate.forEach(field => this.refs[field].validate(true))\n if (!this.formHasErrors) {\n createRecord('projects', this.project)\n .then(response => {\n const projectId = this.$get(response, 'pk', '')\n this.$store.dispatch(SHOW_ALERT, {\n message: `Project ${projectId} was succesfully created.`\n })\n\n this.$store.dispatch(SHOW_PANEL, {\n project: projectId\n })\n this.closeModal()\n })\n .catch(error => {\n if (error.response) {\n this.errorMessages = error.response.data\n this.$store.dispatch(SHOW_ALERT, {\n error: 'The project could not be created. Please try again.'\n })\n }\n })\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.v-expansion-panel__header {\n padding: 5px !important;\n}\n</style>\n"]
225660
225651
  },
225661
225652
  _coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
225662
- hash: "880a7035d32da713e533258d2460ef2446ff3c8f"
225653
+ hash: "39bf82dbca3de1e3096f5011f5bbc47921642eb4"
225663
225654
  };
225664
225655
  var coverage = global[gcv] || (global[gcv] = {});
225665
225656
 
@@ -225889,63 +225880,67 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
225889
225880
  if (value) {
225890
225881
  cov_41uwsnrpn.b[0][0]++;
225891
225882
  cov_41uwsnrpn.s[3]++;
225883
+ this.fetchGroups(); // ensure autofocus: https://github.com/vuetifyjs/vuetify/issues/1587
225884
+
225885
+ cov_41uwsnrpn.s[4]++;
225892
225886
 
225893
- // ensure autofocus: https://github.com/vuetifyjs/vuetify/issues/1587
225894
225887
  if (this.$refs.title) {
225895
225888
  cov_41uwsnrpn.b[1][0]++;
225896
- cov_41uwsnrpn.s[4]++;
225889
+ cov_41uwsnrpn.s[5]++;
225897
225890
  this.$nextTick(this.$refs.title.focus);
225891
+ cov_41uwsnrpn.s[6]++;
225892
+ this.resetForm();
225898
225893
  } else {
225899
225894
  cov_41uwsnrpn.b[1][1]++;
225900
225895
  }
225901
-
225902
- cov_41uwsnrpn.s[5]++;
225903
- this.fetchGroups();
225904
- cov_41uwsnrpn.s[6]++;
225905
- this.resetForm();
225906
225896
  } else {
225907
225897
  cov_41uwsnrpn.b[0][1]++;
225908
225898
  }
225909
225899
  }
225910
225900
  },
225911
- mounted: function mounted() {
225912
- var _this = this;
225913
-
225901
+ updated: function updated() {
225914
225902
  cov_41uwsnrpn.f[3]++;
225915
225903
  cov_41uwsnrpn.s[7]++;
225916
- // Map all local and nested inputs to local 'refs'
225917
- this.fieldsToValidate.forEach(function (field) {
225904
+ this.attachFieldRefs();
225905
+ },
225906
+ methods: {
225907
+ attachFieldRefs: function attachFieldRefs() {
225908
+ var _this = this;
225909
+
225918
225910
  cov_41uwsnrpn.f[4]++;
225919
225911
  cov_41uwsnrpn.s[8]++;
225920
-
225921
- if (has_default()(_this.$refs[field], 'reset')) {
225922
- cov_41uwsnrpn.b[2][0]++;
225912
+ // Map all local and nested inputs to local 'refs' object
225913
+ this.fieldsToValidate.forEach(function (field) {
225914
+ cov_41uwsnrpn.f[5]++;
225923
225915
  cov_41uwsnrpn.s[9]++;
225924
- _this.refs[field] = _this.$refs[field];
225925
- } else {
225926
- cov_41uwsnrpn.b[2][1]++;
225927
- cov_41uwsnrpn.s[10]++;
225928
225916
 
225929
- if (has_default()(_this.$refs[field], '$refs.userSearchInput.reset')) {
225930
- cov_41uwsnrpn.b[3][0]++;
225931
- cov_41uwsnrpn.s[11]++;
225932
- _this.refs[field] = _this.$refs[field].$refs.userSearchInput;
225917
+ if (has_default()(_this.$refs[field], 'reset')) {
225918
+ cov_41uwsnrpn.b[2][0]++;
225919
+ cov_41uwsnrpn.s[10]++;
225920
+ _this.refs[field] = _this.$refs[field];
225933
225921
  } else {
225934
- cov_41uwsnrpn.b[3][1]++;
225935
- cov_41uwsnrpn.s[12]++;
225922
+ cov_41uwsnrpn.b[2][1]++;
225923
+ cov_41uwsnrpn.s[11]++;
225936
225924
 
225937
- if (has_default()(_this.$refs[field], '$refs.groupSearchInput.reset')) {
225938
- cov_41uwsnrpn.b[4][0]++;
225939
- cov_41uwsnrpn.s[13]++;
225940
- _this.refs[field] = _this.$refs[field].$refs.groupSearchInput;
225925
+ if (has_default()(_this.$refs[field], '$refs.userSearchInput.reset')) {
225926
+ cov_41uwsnrpn.b[3][0]++;
225927
+ cov_41uwsnrpn.s[12]++;
225928
+ _this.refs[field] = _this.$refs[field].$refs.userSearchInput;
225941
225929
  } else {
225942
- cov_41uwsnrpn.b[4][1]++;
225930
+ cov_41uwsnrpn.b[3][1]++;
225931
+ cov_41uwsnrpn.s[13]++;
225932
+
225933
+ if (has_default()(_this.$refs[field], '$refs.groupSearchInput.reset')) {
225934
+ cov_41uwsnrpn.b[4][0]++;
225935
+ cov_41uwsnrpn.s[14]++;
225936
+ _this.refs[field] = _this.$refs[field].$refs.groupSearchInput;
225937
+ } else {
225938
+ cov_41uwsnrpn.b[4][1]++;
225939
+ }
225943
225940
  }
225944
225941
  }
225945
- }
225946
- });
225947
- },
225948
- methods: {
225942
+ });
225943
+ },
225949
225944
  fetchGroups: function () {
225950
225945
  var _fetchGroups = NewProjectModalvue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/regenerator_default.a.mark(function _callee() {
225951
225946
  var response;
@@ -225953,8 +225948,8 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
225953
225948
  while (1) {
225954
225949
  switch (_context.prev = _context.next) {
225955
225950
  case 0:
225956
- cov_41uwsnrpn.f[5]++;
225957
- cov_41uwsnrpn.s[14]++;
225951
+ cov_41uwsnrpn.f[6]++;
225952
+ cov_41uwsnrpn.s[15]++;
225958
225953
 
225959
225954
  if (this.groups.length) {
225960
225955
  _context.next = 12;
@@ -225962,13 +225957,13 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
225962
225957
  }
225963
225958
 
225964
225959
  cov_41uwsnrpn.b[5][0]++;
225965
- cov_41uwsnrpn.s[15]++;
225960
+ cov_41uwsnrpn.s[16]++;
225966
225961
  _context.next = 7;
225967
225962
  return fetchListRecords('groups');
225968
225963
 
225969
225964
  case 7:
225970
225965
  response = _context.sent;
225971
- cov_41uwsnrpn.s[16]++;
225966
+ cov_41uwsnrpn.s[17]++;
225972
225967
  this.groups = response.results;
225973
225968
  _context.next = 13;
225974
225969
  break;
@@ -225991,101 +225986,98 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
225991
225986
  return fetchGroups;
225992
225987
  }(),
225993
225988
  toggleOptionalFields: function toggleOptionalFields() {
225994
- cov_41uwsnrpn.f[6]++;
225995
- cov_41uwsnrpn.s[17]++;
225996
- this.showOptionalFields = !this.showOptionalFields;
225989
+ cov_41uwsnrpn.f[7]++;
225997
225990
  cov_41uwsnrpn.s[18]++;
225998
- this.$nextTick(this.$refs.title.focus);
225991
+ this.showOptionalFields = !this.showOptionalFields;
225999
225992
  cov_41uwsnrpn.s[19]++;
225993
+ this.$nextTick(this.$refs.title.focus);
225994
+ cov_41uwsnrpn.s[20]++;
226000
225995
  this.$nextTick(this.$refs.title.resetValidation);
226001
225996
  },
226002
225997
  resetForm: function resetForm() {
226003
- cov_41uwsnrpn.f[7]++;
226004
-
226005
- var _ref = (cov_41uwsnrpn.s[20]++, this),
226006
- refs = _ref.refs;
225998
+ var _this2 = this;
226007
225999
 
226000
+ cov_41uwsnrpn.f[8]++;
226008
226001
  cov_41uwsnrpn.s[21]++;
226009
226002
  this.formHasErrors = false;
226010
226003
  cov_41uwsnrpn.s[22]++;
226011
226004
  this.fieldsToValidate.forEach(function (field) {
226012
- cov_41uwsnrpn.f[8]++;
226005
+ cov_41uwsnrpn.f[9]++;
226013
226006
  cov_41uwsnrpn.s[23]++;
226014
- return (cov_41uwsnrpn.b[6][0]++, refs[field]) && (cov_41uwsnrpn.b[6][1]++, refs[field].reset());
226007
+ return _this2.refs[field].reset();
226015
226008
  });
226016
226009
  },
226017
226010
  closeModal: function closeModal() {
226018
- cov_41uwsnrpn.f[9]++;
226011
+ cov_41uwsnrpn.f[10]++;
226019
226012
  cov_41uwsnrpn.s[24]++;
226020
226013
  this.resetForm();
226021
226014
  cov_41uwsnrpn.s[25]++;
226022
226015
  this.$emit('close-modal');
226023
226016
  },
226024
226017
  updateValue: function updateValue(data) {
226025
- cov_41uwsnrpn.f[10]++;
226018
+ cov_41uwsnrpn.f[11]++;
226026
226019
  cov_41uwsnrpn.s[26]++;
226027
226020
  this.project = NewProjectModalvue_type_script_lang_js_objectSpread(NewProjectModalvue_type_script_lang_js_objectSpread({}, this.project), data);
226028
226021
  },
226029
226022
  submit: function () {
226030
226023
  var _submit = NewProjectModalvue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/regenerator_default.a.mark(function _callee2() {
226031
- var _this2 = this;
226024
+ var _this3 = this;
226032
226025
 
226033
226026
  return regenerator_default.a.wrap(function _callee2$(_context2) {
226034
226027
  while (1) {
226035
226028
  switch (_context2.prev = _context2.next) {
226036
226029
  case 0:
226037
- cov_41uwsnrpn.f[11]++;
226030
+ cov_41uwsnrpn.f[12]++;
226038
226031
  cov_41uwsnrpn.s[27]++;
226039
226032
  this.formHasErrors = false;
226040
226033
  cov_41uwsnrpn.s[28]++;
226041
226034
  this.fieldsToValidate.forEach(function (field) {
226042
- cov_41uwsnrpn.f[12]++;
226035
+ cov_41uwsnrpn.f[13]++;
226043
226036
  cov_41uwsnrpn.s[29]++;
226044
-
226045
- _this2.refs[field].validate(true);
226037
+ return _this3.refs[field].validate(true);
226046
226038
  });
226047
226039
  cov_41uwsnrpn.s[30]++;
226048
226040
 
226049
226041
  if (!this.formHasErrors) {
226050
- cov_41uwsnrpn.b[7][0]++;
226042
+ cov_41uwsnrpn.b[6][0]++;
226051
226043
  cov_41uwsnrpn.s[31]++;
226052
226044
  createRecord('projects', this.project).then(function (response) {
226053
- cov_41uwsnrpn.f[13]++;
226054
- var projectId = (cov_41uwsnrpn.s[32]++, _this2.$get(response, 'pk', ''));
226045
+ cov_41uwsnrpn.f[14]++;
226046
+ var projectId = (cov_41uwsnrpn.s[32]++, _this3.$get(response, 'pk', ''));
226055
226047
  cov_41uwsnrpn.s[33]++;
226056
226048
 
226057
- _this2.$store.dispatch(SHOW_ALERT, {
226049
+ _this3.$store.dispatch(SHOW_ALERT, {
226058
226050
  message: "Project ".concat(projectId, " was succesfully created.")
226059
226051
  });
226060
226052
 
226061
226053
  cov_41uwsnrpn.s[34]++;
226062
226054
 
226063
- _this2.$store.dispatch(SHOW_PANEL, {
226055
+ _this3.$store.dispatch(SHOW_PANEL, {
226064
226056
  project: projectId
226065
226057
  });
226066
226058
 
226067
226059
  cov_41uwsnrpn.s[35]++;
226068
226060
 
226069
- _this2.closeModal();
226061
+ _this3.closeModal();
226070
226062
  }).catch(function (error) {
226071
- cov_41uwsnrpn.f[14]++;
226063
+ cov_41uwsnrpn.f[15]++;
226072
226064
  cov_41uwsnrpn.s[36]++;
226073
226065
 
226074
226066
  if (error.response) {
226075
- cov_41uwsnrpn.b[8][0]++;
226067
+ cov_41uwsnrpn.b[7][0]++;
226076
226068
  cov_41uwsnrpn.s[37]++;
226077
- _this2.errorMessages = error.response.data;
226069
+ _this3.errorMessages = error.response.data;
226078
226070
  cov_41uwsnrpn.s[38]++;
226079
226071
 
226080
- _this2.$store.dispatch(SHOW_ALERT, {
226072
+ _this3.$store.dispatch(SHOW_ALERT, {
226081
226073
  error: 'The project could not be created. Please try again.'
226082
226074
  });
226083
226075
  } else {
226084
- cov_41uwsnrpn.b[8][1]++;
226076
+ cov_41uwsnrpn.b[7][1]++;
226085
226077
  }
226086
226078
  });
226087
226079
  } else {
226088
- cov_41uwsnrpn.b[7][1]++;
226080
+ cov_41uwsnrpn.b[6][1]++;
226089
226081
  }
226090
226082
 
226091
226083
  case 7:
@@ -226120,8 +226112,8 @@ var NewProjectModalvue_type_style_index_0_lang_scss_ = __webpack_require__("9434
226120
226112
 
226121
226113
  var NewProjectModal_component = normalizeComponent(
226122
226114
  projects_NewProjectModalvue_type_script_lang_js_,
226123
- NewProjectModalvue_type_template_id_58c607e8_render,
226124
- NewProjectModalvue_type_template_id_58c607e8_staticRenderFns,
226115
+ NewProjectModalvue_type_template_id_070ec06c_render,
226116
+ NewProjectModalvue_type_template_id_070ec06c_staticRenderFns,
226125
226117
  false,
226126
226118
  null,
226127
226119
  null,
@@ -243678,8 +243670,8 @@ var BaseTabs_component = normalizeComponent(
243678
243670
  )
243679
243671
 
243680
243672
  /* harmony default export */ var BaseTabs = (BaseTabs_component.exports);
243681
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/table/DataTable.vue?vue&type=template&id=74a20140&
243682
- var DataTablevue_type_template_id_74a20140_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{class:['isabl-base-card no-shadow', _vm.cardClasses]},[_c('base-section-title',{attrs:{"show-more":_vm.showTable},on:{"toggle-show-more":function($event){_vm.showTable = !_vm.showTable}},scopedSlots:_vm._u([{key:"title",fn:function(){return [_vm._v("\n "+_vm._s(_vm._f("capitalize")(_vm.title || _vm.model))+"\n "),(_vm.infoText)?_c('v-tooltip',{attrs:{"top":""},scopedSlots:_vm._u([{key:"activator",fn:function(ref){
243673
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/table/DataTable.vue?vue&type=template&id=31c65eb2&
243674
+ var DataTablevue_type_template_id_31c65eb2_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{class:['isabl-base-card no-shadow', _vm.cardClasses]},[_c('base-section-title',{attrs:{"show-more":_vm.showTable},on:{"toggle-show-more":function($event){_vm.showTable = !_vm.showTable}},scopedSlots:_vm._u([{key:"title",fn:function(){return [_vm._v("\n "+_vm._s(_vm._f("capitalize")(_vm.title || _vm.model))+"\n "),(_vm.infoText)?_c('v-tooltip',{attrs:{"top":""},scopedSlots:_vm._u([{key:"activator",fn:function(ref){
243683
243675
  var on = ref.on;
243684
243676
  return [_c('v-icon',_vm._g({staticClass:"pl-1",staticStyle:{"cursor":"help"},attrs:{"small":"","color":"grey lighten-2"}},on),[_vm._v("\n info\n ")])]}}],null,false,2192405103)},[_c('span',{attrs:{"text-center":""}},[_vm._v(_vm._s(_vm.infoText))])]):_vm._e()]},proxy:true},{key:"actions",fn:function(){return [(_vm.items)?_c('data-table-actions',{attrs:{"model":_vm.model,"items":_vm.items,"headers":_vm.headers,"global-search":_vm.globalSearch,"query-params":_vm.queryParams},on:{"fetch-data":_vm.updateSearchText}}):_vm._e()]},proxy:true}])}),_c('v-data-table',{directives:[{name:"show",rawName:"v-show",value:(_vm.showTable),expression:"showTable"}],attrs:{"headers":_vm.headers,"items":_vm.items,"server-items-length":_vm.totalItems,"loading":_vm.loading,"items-per-page":_vm.itemsPerPage,"page":_vm.page,"footer-props":{ itemsPerPageOptions: _vm.itemsPerPageItems, itemsPerPageText: '' },"loader-height":"2","calculate-widths":"","hide-default-header":"","dense":""},on:{"update:itemsPerPage":function($event){_vm.itemsPerPage=$event},"update:items-per-page":function($event){_vm.itemsPerPage=$event},"update:page":function($event){_vm.page=$event},"page-count":function($event){_vm.pageCount = $event}},scopedSlots:_vm._u([{key:"header",fn:function(ref){
243685
243677
  var props = ref.props;
@@ -243704,10 +243696,10 @@ return [_c('span',{class:[
243704
243696
  var pageStart = ref.pageStart;
243705
243697
  var pageStop = ref.pageStop;
243706
243698
  return [_c('span',{staticClass:"text-body-1"},[_vm._v("\n "+_vm._s(pageStart)+" - "+_vm._s(pageStop)+" of\n "),_c('span',{staticClass:"primary--text text-h6 mx-1"},[_vm._v(_vm._s(_vm._f("formatNumber")(_vm.totalItems)))])])]}}])})],1)}
243707
- var DataTablevue_type_template_id_74a20140_staticRenderFns = []
243699
+ var DataTablevue_type_template_id_31c65eb2_staticRenderFns = []
243708
243700
 
243709
243701
 
243710
- // CONCATENATED MODULE: ./src/components/table/DataTable.vue?vue&type=template&id=74a20140&
243702
+ // CONCATENATED MODULE: ./src/components/table/DataTable.vue?vue&type=template&id=31c65eb2&
243711
243703
 
243712
243704
  // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/table/DataTableActions.vue?vue&type=template&id=0e1da098&
243713
243705
  var DataTableActionsvue_type_template_id_0e1da098_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-row',{staticClass:"pa-0 ma-0 float-right"},[(_vm.searchText || _vm.showSearch)?_c('transition',{attrs:{"name":"slide"}},[_c('v-form',{on:{"submit":function($event){$event.preventDefault();}}},[_c('v-text-field',{ref:"input",staticClass:"pa-0 my-0 table-filter-input",attrs:{"autofocus":true,"append-icon":_vm.searchText ? 'close' : null,"label":"Search","data-test":"table-search-input","single-line":"","hide-details":"","dense":""},on:{"click:append":function($event){_vm.searchText ? (_vm.searchText = '') : null},"keyup":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"esc",27,$event.key,["Esc","Escape"])){ return null; }_vm.searchText = ''},"blur":_vm.onSearchInputBlur},model:{value:(_vm.searchText),callback:function ($$v) {_vm.searchText=$$v},expression:"searchText"}})],1)],1):_vm._e(),_c('v-speed-dial',{staticClass:"float-right",attrs:{"direction":"bottom","color":"primary","transition":"slide-y-transition","open-on-hover":""},scopedSlots:_vm._u([{key:"activator",fn:function(){return [_c('v-btn',{staticClass:"table-action-btn",attrs:{"fab":"","x-small":"","elevation":"0","color":"transparent"},on:{"click":function($event){_vm.showSearch = !_vm.showSearch}}},[(_vm.loading)?_c('v-progress-circular',{attrs:{"width":2,"size":18,"indeterminate":"","color":"primary"}}):(_vm.showActions || _vm.showSearch)?_c('v-icon',{attrs:{"small":""}},[_vm._v("\n search\n ")]):_c('v-icon',[_vm._v("\n more_vert\n ")])],1)]},proxy:true}]),model:{value:(_vm.showActions),callback:function ($$v) {_vm.showActions=$$v},expression:"showActions"}},[_c('JsonExcel',{attrs:{"fields":_vm.jsonHeaders,"fetch":_vm.fetchAllRecords,"worksheet":_vm.model,"name":_vm.exportedFilename,"before-finish":_vm.showFinishedAlert}},[_c('v-btn',{staticClass:"table-action-btn float-right",attrs:{"fab":"","x-small":""}},[_c('v-tooltip',{attrs:{"left":""},scopedSlots:_vm._u([{key:"activator",fn:function(ref){
@@ -247625,7 +247617,7 @@ var orderBy_default = /*#__PURE__*/__webpack_require__.n(orderBy);
247625
247617
  // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/table/DataTable.vue?vue&type=script&lang=js&
247626
247618
  var cov_2h6d9k0h00 = function () {
247627
247619
  var path = "/Users/juanes/papaemmelab/isabl_web/src/components/table/DataTable.vue";
247628
- var hash = "bc4de628811eceb42295fceb48086fc35aa352e5";
247620
+ var hash = "235fafbf88a72a48e239d67dc7b99e287750338d";
247629
247621
  var global = new Function("return this")();
247630
247622
  var gcv = "__coverage__";
247631
247623
  var coverageData = {
@@ -251043,10 +251035,10 @@ var cov_2h6d9k0h00 = function () {
251043
251035
  mappings: ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
251044
251036
  file: "DataTable.vue",
251045
251037
  sourceRoot: "src/components/table",
251046
- sourcesContent: ["<template>\n <v-card :class=\"['isabl-base-card no-shadow', cardClasses]\">\n <base-section-title\n :show-more=\"showTable\"\n @toggle-show-more=\"showTable = !showTable\"\n >\n <template v-slot:title>\n {{ title || model | capitalize }}\n <v-tooltip\n v-if=\"infoText\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n small\n style=\"cursor: help\"\n color=\"grey lighten-2\"\n class=\"pl-1\"\n v-on=\"on\"\n >\n info\n </v-icon>\n </template>\n <span text-center>{{ infoText }}</span>\n </v-tooltip>\n </template>\n <template v-slot:actions>\n <data-table-actions\n v-if=\"items\"\n :model=\"model\"\n :items=\"items\"\n :headers=\"headers\"\n :global-search=\"globalSearch\"\n :query-params=\"queryParams\"\n @fetch-data=\"updateSearchText\"\n />\n </template>\n </base-section-title>\n\n <v-data-table\n v-show=\"showTable\"\n :headers=\"headers\"\n :items=\"items\"\n :server-items-length=\"totalItems\"\n :loading=\"loading\"\n :items-per-page.sync=\"itemsPerPage\"\n :page.sync=\"page\"\n :footer-props=\"{ itemsPerPageOptions: itemsPerPageItems, itemsPerPageText: '' }\"\n loader-height=\"2\"\n calculate-widths\n hide-default-header\n dense\n @page-count=\"pageCount = $event\"\n >\n <template v-slot:header=\"{ props }\">\n <tr class=\"table-headers text-left table-cell py-0 font-normal\">\n <th\n v-for=\"header in props.headers\"\n :key=\"header.text\"\n :class=\"[\n 'column sortable',\n sortByColumns.includes(header.value)\n ? 'asc active'\n : '',\n sortByColumns.includes(`-${header.value}`)\n ? 'desc active'\n : ''\n ]\"\n >\n <v-hover v-slot=\"{ hover }\">\n <span\n :class=\"[\n 'font-weight-medium',\n 'grey--text',\n ]\"\n >\n {{ header.text }}\n <v-icon\n :color=\"\n hover || sortByColumns.includes(header.value) || sortByColumns.includes(`-${header.value}`)\n ? 'text--darken-2'\n : 'transparent'\n \"\n class=\"sort-icon\"\n style=\"vertical-align: middle\"\n small\n @click=\"changeSort(header.value)\"\n >arrow_downward</v-icon>\n <v-icon\n :color=\"hover ? 'text--darken-2' : 'transparent'\"\n class=\"\"\n style=\"vertical-align: middle\"\n small\n @click=\"toggleColumnFilters\"\n >filter_list</v-icon>\n </span>\n </v-hover>\n </th>\n </tr>\n <tr\n v-if=\"showFilters\"\n class=\"column-filters\"\n >\n <th\n v-for=\"header in props.headers\"\n :key=\"header.text\"\n class=\"pa-0 ma-0\"\n >\n <data-table-date-picker\n v-if=\"header.filterType === 'date'\"\n :header=\"header\"\n @filter-search=\"filterSearch\"\n />\n <data-table-select-filter\n v-else\n :header=\"header\"\n :model=\"title || model\"\n @filter-search=\"filterSearch\"\n />\n </th>\n </tr>\n </template>\n <template v-slot:item=\"attrs\">\n <tr>\n <td\n v-for=\"(header, index) in attrs.headers\"\n :key=\"index + header.verboseName\"\n class=\"text-left table-cell py-0 text-body-1\"\n >\n <!-- if value is a model(s) link -->\n <span v-if=\"header.model\">\n <span v-if=\"Array.isArray(getValue(attrs.item, header))\">\n <span\n v-for=\"(value, index) in getValue(attrs.item, header)\"\n :key=\"index\"\n class=\"active-link\"\n @click=\"onClickRecord(value, header.model)\"\n v-html=\"\n highlightText(value, header) +\n `${index + 1 < getValue(attrs.item, header).length ? ', ' : ''}`\n \"\n />\n </span>\n\n <span v-else>\n <span\n class=\"active-link\"\n @click=\"onClickRecord(getValue(attrs.item, header), header.model)\"\n v-html=\"tableValue(attrs.item, header)\"\n />\n </span>\n </span>\n\n <!-- if value is analysis' result -->\n <span\n v-else-if=\"header.field === 'status'\"\n :class=\"classValue(attrs.item, header.field)\"\n v-html=\"tableValue(attrs.item, header)\"\n />\n\n <div\n v-else-if=\"header.field === 'resultName'\"\n class=\"mr-2\"\n >\n <result-chip\n :result=\"attrs.item\"\n :result-index=\"itemsPerPage * (page - 1) + attrs.index\"\n show-all\n @display-result=\"$emit('display-result', $event)\"\n />\n </div>\n\n <span\n v-else-if=\"header.field === 'resultKey'\"\n class=\"mr-2\"\n >\n <code class=\"markdown-style\" v-html=\"tableValue(attrs.item, header)\"/>\n </span>\n\n <!-- any other case -->\n <span\n v-else\n v-html=\"tableValue(attrs.item, header)\"\n />\n </td>\n </tr>\n </template>\n\n <template v-slot:no-data>\n <td\n :colspan=\"headers.length\"\n class=\"text-left table-cell pa-0 text-body-1\"\n >{{ loading ? 'Querying records...' : errorMessage || 'No records found.' }}</td>\n </template>\n\n <template v-slot:loading>\n <td\n :colspan=\"headers.length\"\n class=\"text-left table-cell pa-0 text-body-1\"\n >Querying records...</td>\n </template>\n\n <template v-slot:no-results>\n <td\n :colspan=\"headers.length\"\n class=\"text-left table-cell pa-0 text-body-1\"\n >{{ loading ? 'Querying records...' : 'No records found.' }}</td>\n </template>\n\n <template v-slot:footer.page-text=\"{ pageStart, pageStop }\">\n <span class=\"text-body-1\">\n {{ pageStart }} - {{ pageStop }} of\n <span\n class=\"primary--text text-h6 mx-1\"\n >{{ totalItems | formatNumber }}</span>\n </span>\n </template>\n\n </v-data-table>\n </v-card>\n</template>\n\n<script>\nimport { fetchListRecords } from '@/utils/api'\nimport { SHOW_ALERT } from '@/store/actions/alert'\nimport { SHOW_PANEL } from '@/store/actions/panels'\nimport { tableColumns } from '@/utils/tableColumns'\nimport BaseSectionTitle from '@/components/base/BaseSectionTitle.vue'\nimport DataTableActions from '@/components/table/DataTableActions.vue'\nimport DataTableSelectFilter from '@/components/table/DataTableSelectFilter.vue'\nimport DataTableDatePicker from '@/components/table/DataTableDatePicker.vue'\nimport ResultChip from '@/components/analyses/ResultChip'\nimport debounce from 'lodash/debounce'\nimport isEqual from 'lodash/isEqual'\nimport orderBy from 'lodash/orderBy'\n\nexport default {\n name: 'DataTable',\n components: {\n BaseSectionTitle,\n DataTableActions,\n DataTableSelectFilter,\n DataTableDatePicker,\n ResultChip,\n },\n props: {\n model: {\n type: String,\n required: false\n },\n title: {\n type: String,\n default: ''\n },\n globalSearch: {\n type: Boolean,\n default: false\n },\n params: {\n type: Object,\n default: () => ({})\n },\n // skip columns using the verbose name\n skipColumns: {\n type: Array,\n default: () => []\n },\n // columns using the verbose name\n headersKey: {\n type: String,\n default: ''\n },\n cardClasses: {\n type: String,\n default: ''\n },\n collapse: {\n type: Boolean,\n default: false\n },\n infoText: {\n type: String,\n default: ''\n },\n openRecordsInNewTab: {\n type: Boolean,\n default: false\n },\n data: {\n type: Array,\n default: () => []\n },\n filterRemotely: {\n type: Boolean,\n default: true,\n },\n initialSort: {\n type: Array,\n default: () => [\"-pk\"]\n },\n initialItemsPerPage: {\n type: Number,\n default: 5,\n }\n },\n data() {\n return {\n items: this.filterRemotely ? [] : this.data,\n totalItems: 0,\n loading: true,\n showTable: !this.collapse,\n showFilters: false,\n\n // table params\n headers: tableColumns[this.headersKey || this.model]\n .map(col => {\n col.text = col.verboseName\n col.value = col.field\n return col\n })\n .filter(col => !this.skipColumns.includes(col.verboseName)),\n page: 1,\n pageCount: 0,\n itemsPerPage: this.initialItemsPerPage,\n itemsPerPageItems: [3, 5, 10, 25, 50, 200, 500, 5000],\n sortByColumns: this.initialSort,\n\n // query params\n limit: null,\n offset: null,\n ordering: null,\n errorMessage: null,\n searchText: '',\n filterParams: {},\n queryParams: {}\n }\n },\n watch: {\n params(newParams, oldParams) {\n if (!isEqual(newParams, oldParams)) {\n this.fetchData()\n }\n },\n page() {\n this.updateTable()\n },\n sortByColumns() {\n this.updateTable()\n },\n itemsPerPage() {\n this.updateTable()\n },\n data() {\n this.updateTable()\n }\n },\n created() {\n this.fetchData = debounce(this._fetchData, 500)\n this.updateTable()\n },\n methods: {\n changeSort(column) {\n let sort = this.sortByColumns\n\n if (sort.includes(column)) {\n // Make ordering column -> None\n sort = sort.filter(columns => columns !== column)\n } else if (sort.includes(`-${column}`)) {\n // Make ordering -column -> column\n sort = sort.filter(columns => columns !== `-${column}`)\n sort.push(column)\n } else {\n // Make ordering None -> -column\n sort.push(`-${column}`)\n }\n\n // Move pk to last if exist\n sort.push(sort.splice(sort.indexOf('pk'), 1)[0])\n sort.push(sort.splice(sort.indexOf('-pk'), 1)[0])\n\n this.sortByColumns = sort\n },\n filterSearch(value, field, filter = 'icontains') {\n field = field.split('.').join('__')\n value = Array.isArray(value) ? value.join(',') : value\n\n // Ensure only one filter per key\n this.filterParams = Object.keys(this.filterParams)\n .filter(param => {\n const filterWithSameKey = `${field}__`\n return !param.includes(filterWithSameKey)\n })\n .reduce((obj, key) => {\n obj[key] = this.filterParams[key]\n return obj\n }, {})\n\n this.filterParams[`${field}__${filter}`] = value\n this.offset = null\n this.page = 1\n this.fetchData()\n\n // Track when user makes any string search\n window.analytics.track('Filter from table column', {\n model: this.model,\n query: this.filterParams\n })\n },\n\n columnValueList(val) {\n return this.items.map(d => d[val])\n },\n\n updateSearchText(text) {\n this.searchText = text\n this.offset = null\n this.page = 1\n this.fetchData()\n\n // Track when user makes any string search\n window.analytics.track('Searched From Table', {\n model: this.model,\n search: this.searchText,\n query: this.queryParams\n })\n },\n\n tableValue(item, header) {\n let value = this.getValue(item, header)\n return this.highlightText(value, header)\n },\n\n formatValue(value) {\n return this.highlightText(value)\n },\n\n getValue(item, header) {\n return this.$get(\n item,\n header.accessor || header.field,\n header.default || '-'\n )\n },\n\n isTableSmall() {\n let tables = document.getElementsByClassName('v-datatable__actions')\n return tables && tables.length > 0 && tables[0].offsetWidth < 400\n },\n\n classValue(item, accessor) {\n let value = this.$get(item, accessor)\n .toString()\n .toLowerCase()\n return `status-${value}`\n },\n\n highlightText(rawText, header) {\n header = header.value.split('.').join('__')\n const filterParams = {\n ...this.filterParams,\n search: this.searchText\n }\n let keywords = Object.entries(filterParams)\n .filter(([key, value]) => {\n return (\n value &&\n typeof value !== 'boolean' &&\n (key === 'search' || key.replace(/(__icontains)/, '') === header)\n )\n })\n .map(([, value]) => value.toString().toLowerCase())\n\n let { text, element } = this.$getInnerHtmlText(rawText)\n let shownText = text ? text.toString().slice(0, 41) : ''\n let highlightText = shownText\n\n // Search for match of full string if not each word\n let wordsToHighlight = []\n keywords.forEach(keyword => {\n keyword = keyword.trim()\n if (keyword && shownText.toLowerCase().includes(keyword)) {\n wordsToHighlight.push(keyword)\n } else {\n keyword.split(' ').forEach(word => {\n if (word && shownText.toLowerCase().includes(word)) {\n wordsToHighlight.push(word)\n }\n })\n }\n })\n\n // Highlight the matches\n if (wordsToHighlight.length) {\n const keywordRegex = new RegExp(`(${wordsToHighlight.join('|')})`, 'gi')\n highlightText = text\n .toString()\n .replace(keywordRegex, '<span class=\"highlight\">$1</span>')\n }\n return this.$setInnerHtmlText(element, highlightText)\n },\n\n updateTable() {\n this.limit = this.itemsPerPage\n this.offset = this.itemsPerPage * (this.page - 1)\n this.ordering = this.sortByColumns.join(',')\n\n if (this.filterRemotely) {\n // Make server-side filtering\n this.fetchData()\n } else {\n // Local Items\n this.loading = true\n let rows = this.data\n\n if (this.searchText) {\n rows = rows.filter((row) =>\n Object.values(row).some((column) =>\n column.toLowerCase().includes(this.searchText.toLowerCase())\n )\n )\n }\n if (this.sortByColumns.length) {\n const columns = []\n const order = []\n this.sortByColumns.forEach(param => {\n const [first, ...rest] = param\n if (first === '-') {\n columns.push(rest.join(''))\n order.push('desc')\n } else {\n columns.push(param)\n order.push('asc')\n }\n })\n rows = orderBy(rows, columns, order)\n }\n rows = rows.slice(this.offset, this.offset + this.limit)\n this.items = rows\n this.totalItems = this.data.length\n this.pages = Math.ceil(this.totalItems / this.items)\n this.loading = false\n }\n },\n\n _fetchData() {\n this.loading = true\n const {\n model,\n limit,\n offset,\n ordering,\n params,\n filterParams,\n searchText\n } = this\n\n this.queryParams = {\n ...params,\n ...filterParams,\n limit,\n offset,\n search: searchText,\n ordering,\n }\n\n this.$emit('fetch-data', this.queryParams)\n\n fetchListRecords(model, this.queryParams)\n .then(response => {\n if (searchText === this.searchText) {\n this.items = response.results\n this.totalItems = response.count\n this.pages = Math.ceil(response.count / limit)\n this.errorMessage = response.error || ''\n }\n })\n .catch(error => {\n let errorMessage = `Search failed: `\n if (error.response) {\n const errorMessages = Object.values(error.response.data).flat()\n errorMessage += errorMessages.length ? errorMessages[0] : '...'\n }\n this.$store.dispatch(SHOW_ALERT, {\n error: errorMessage\n })\n })\n .finally(() => (this.loading = false))\n },\n\n onClickRecord(value, model) {\n if (this.openRecordsInNewTab) {\n const queryParams = {\n individual: 'bioModel',\n sample: 'bioModel',\n experiment: 'bioModel'\n }\n const queryParam = this.$get(queryParams, model, model)\n window.open(`/?${queryParam}=${value}`, '_blank')\n } else {\n this.$store.dispatch(SHOW_PANEL, {\n [model]: value\n })\n }\n },\n\n toggleColumnFilters() {\n this.showFilters = !this.showFilters\n if (!this.showFilters) {\n this.filterParams = {}\n this.fetchData()\n }\n },\n }\n}\n</script>\n\n<style lang=\"scss\">\n\n.isabl-base-card .v-data-table {\n th.column.sortable.active.desc button.sort-icon {\n transform: rotate(-180deg);\n }\n th.column.sortable.active button.sort-icon {\n color: var(--v-primary-base);\n }\n th.column.sortable button {\n font-size: 13px !important;\n margin-left: 4px;\n }\n .v-data-table__wrapper {\n max-height: 300px;\n overflow-y: auto;\n }\n .table-cell {\n height: 25px !important;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 300px;\n padding-left: 5px !important;\n .v-chip.v-size--small {\n height: 20px;\n }\n }\n tr.table-headers.table-cell {\n position: sticky;\n top: 0;\n background: white;\n cursor: pointer;\n height: 32px;\n th {\n // border-bottom: thin solid rgba(0,0,0,.12);\n background: rgba(0,0,0,.04);\n }\n }\n &.theme--dark, &.theme--dark tr.table-headers.table-cell th {\n background: var(--v-surface-base);\n }\n &.theme--dark tr.column-filters th {\n background: var(--v-surface-base);\n }\n th.column.sortable {\n padding: 0px 5px;\n }\n tr.column-filters th {\n height: 32px;\n }\n .v-data-table__empty-wrapper>td {\n padding: 0px;\n }\n}\n\n.table-filter-input {\n min-width: 150px;\n .v-input__icon--append .v-icon {\n font-size: 14px;\n }\n input {\n font-size: 14px;\n font-weight: 400;\n padding-left: 6px !important;\n }\n label {\n font-size: 13px;\n padding-left: 6px;\n }\n}\n.column-filters {\n position: sticky;\n top: 25px;\n background: white;\n .v-select {\n margin: 0px;\n .v-input__slot, input {\n height: 25px;\n }\n .v-icon {\n font-size: 16px;\n }\n }\n .v-select__selections {\n display: contents;\n max-width: 120px;\n font-size: 14px;\n font-weight: 400;\n span {\n padding: 0px;\n }\n }\n .v-text-field .v-input__append-inner {\n padding: 0px;\n }\n}\n\n.v-list .v-list-item {\n min-height: 25px;\n .v-list-item__title {\n font-size: 14px;\n font-weight: 400;\n }\n .v-list-item__content {\n padding: 0px 10px;\n }\n}\n\ndiv.v-list--dense .v-list-item {\n min-height: 25px;\n padding: 0px;\n .v-list-item__action {\n margin: 0px;\n padding: 0px 4px;\n }\n .v-list-item__title {\n font-size: 14px;\n font-weight: 400;\n }\n .v-list-item__content {\n padding: 0px;\n }\n}\n\n.v-select-list {\n overflow: hidden;\n}\n\n.v-menu__content:not(.v-autocomplete__content) {\n .v-list__tile {\n height: 23px;\n }\n}\ntable.v-table tbody tr {\n border: 0px !important;\n}\n\ntable.v-table thead {\n tr {\n height: 30px !important;\n }\n tr.v-datatable__progress {\n height: 0px !important;\n border-top: 1px solid rgba(0, 0, 0, 0.05);\n }\n th {\n padding-left: 5px !important;\n padding-right: 5px !important;\n }\n}\n\ndiv.v-data-table__actions {\n flex-wrap: nowrap;\n &__pagination {\n width: 100%;\n min-width: 170px;\n margin: 0 10px 0 10px;\n }\n &__select {\n white-space: normal;\n overflow: hidden;\n justify-content: flex-start;\n margin-right: 5px;\n max-width: 100px;\n .v-select {\n margin-left: 25px;\n margin-right: 0px;\n margin-top: 0px;\n margin-bottom: 0px;\n }\n }\n &__range-controls {\n width: 100%;\n }\n button {\n margin: 0px;\n margin-right: 5px;\n }\n}\n\n.section-toggle {\n cursor: pointer;\n}\n\n.isabl-base-card .v-data-footer {\n font-size: 12px;\n padding: 0px;\n div.v-select__selection {\n font-size: 12px;\n }\n div.v-select {\n margin: 4px 0px 4px 16px;\n }\n}\n.v-data-footer__select\n.v-menu__content .v-list-item {\n min-height: 25px;\n font-size: 14px;\n .v-list-item__content {\n padding: 0px;\n }\n}\n// Style taken from github\ncode.markdown-style {\n padding: 0.2em 0.4em;\n margin: 0;\n font-size: 85%;\n background-color: rgba(175,184,193,0.2);\n border-radius: 6px;\n color: #24292f;\n}\n\n.v-data-table .v-data-footer {\n .v-data-footer__select {\n margin-left: 0;\n margin-right: auto;\n }\n .v-data-footer__pagination {\n margin-left: auto;\n margin-right: auto;\n }\n .v-data-footer__icons-before {\n margin-left: auto;\n margin-right: 0;\n }\n .v-data-footer__icons-after {\n margin-left: 0;\n margin-right: 0;\n }\n}\n\n</style>\n"]
251038
+ sourcesContent: ["<template>\n <v-card :class=\"['isabl-base-card no-shadow', cardClasses]\">\n <base-section-title\n :show-more=\"showTable\"\n @toggle-show-more=\"showTable = !showTable\"\n >\n <template v-slot:title>\n {{ title || model | capitalize }}\n <v-tooltip\n v-if=\"infoText\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n small\n style=\"cursor: help\"\n color=\"grey lighten-2\"\n class=\"pl-1\"\n v-on=\"on\"\n >\n info\n </v-icon>\n </template>\n <span text-center>{{ infoText }}</span>\n </v-tooltip>\n </template>\n <template v-slot:actions>\n <data-table-actions\n v-if=\"items\"\n :model=\"model\"\n :items=\"items\"\n :headers=\"headers\"\n :global-search=\"globalSearch\"\n :query-params=\"queryParams\"\n @fetch-data=\"updateSearchText\"\n />\n </template>\n </base-section-title>\n\n <v-data-table\n v-show=\"showTable\"\n :headers=\"headers\"\n :items=\"items\"\n :server-items-length=\"totalItems\"\n :loading=\"loading\"\n :items-per-page.sync=\"itemsPerPage\"\n :page.sync=\"page\"\n :footer-props=\"{ itemsPerPageOptions: itemsPerPageItems, itemsPerPageText: '' }\"\n loader-height=\"2\"\n calculate-widths\n hide-default-header\n dense\n @page-count=\"pageCount = $event\"\n >\n <template v-slot:header=\"{ props }\">\n <tr class=\"table-headers text-left table-cell py-0 font-normal\">\n <th\n v-for=\"header in props.headers\"\n :key=\"header.text\"\n :class=\"[\n 'column sortable',\n sortByColumns.includes(header.value)\n ? 'asc active'\n : '',\n sortByColumns.includes(`-${header.value}`)\n ? 'desc active'\n : ''\n ]\"\n >\n <v-hover v-slot=\"{ hover }\">\n <span\n :class=\"[\n 'font-weight-medium',\n 'grey--text',\n ]\"\n >\n {{ header.text }}\n <v-icon\n :color=\"\n hover || sortByColumns.includes(header.value) || sortByColumns.includes(`-${header.value}`)\n ? 'text--darken-2'\n : 'transparent'\n \"\n class=\"sort-icon\"\n style=\"vertical-align: middle\"\n small\n @click=\"changeSort(header.value)\"\n >arrow_downward</v-icon>\n <v-icon\n :color=\"hover ? 'text--darken-2' : 'transparent'\"\n class=\"\"\n style=\"vertical-align: middle\"\n small\n @click=\"toggleColumnFilters\"\n >filter_list</v-icon>\n </span>\n </v-hover>\n </th>\n </tr>\n <tr\n v-if=\"showFilters\"\n class=\"column-filters\"\n >\n <th\n v-for=\"header in props.headers\"\n :key=\"header.text\"\n class=\"pa-0 ma-0\"\n >\n <data-table-date-picker\n v-if=\"header.filterType === 'date'\"\n :header=\"header\"\n @filter-search=\"filterSearch\"\n />\n <data-table-select-filter\n v-else\n :header=\"header\"\n :model=\"title || model\"\n @filter-search=\"filterSearch\"\n />\n </th>\n </tr>\n </template>\n <template v-slot:item=\"attrs\">\n <tr>\n <td\n v-for=\"(header, index) in attrs.headers\"\n :key=\"index + header.verboseName\"\n class=\"text-left table-cell py-0 text-body-1\"\n >\n <!-- if value is a model(s) link -->\n <span v-if=\"header.model\">\n <span v-if=\"Array.isArray(getValue(attrs.item, header))\">\n <span\n v-for=\"(value, index) in getValue(attrs.item, header)\"\n :key=\"index\"\n class=\"active-link\"\n @click=\"onClickRecord(value, header.model)\"\n v-html=\"\n highlightText(value, header) +\n `${index + 1 < getValue(attrs.item, header).length ? ', ' : ''}`\n \"\n />\n </span>\n\n <span v-else>\n <span\n class=\"active-link\"\n @click=\"onClickRecord(getValue(attrs.item, header), header.model)\"\n v-html=\"tableValue(attrs.item, header)\"\n />\n </span>\n </span>\n\n <!-- if value is analysis' result -->\n <span\n v-else-if=\"header.field === 'status'\"\n :class=\"classValue(attrs.item, header.field)\"\n v-html=\"tableValue(attrs.item, header)\"\n />\n\n <div\n v-else-if=\"header.field === 'resultName'\"\n class=\"mr-2\"\n >\n <result-chip\n :result=\"attrs.item\"\n :result-index=\"itemsPerPage * (page - 1) + attrs.index\"\n show-all\n @display-result=\"$emit('display-result', $event)\"\n />\n </div>\n\n <span\n v-else-if=\"header.field === 'resultKey'\"\n class=\"mr-2\"\n >\n <code class=\"markdown-style\" v-html=\"tableValue(attrs.item, header)\"/>\n </span>\n\n <!-- any other case -->\n <span\n v-else\n v-html=\"tableValue(attrs.item, header)\"\n />\n </td>\n </tr>\n </template>\n\n <template v-slot:no-data>\n <td\n :colspan=\"headers.length\"\n class=\"text-left table-cell pa-0 text-body-1\"\n >{{ loading ? 'Querying records...' : errorMessage || 'No records found.' }}</td>\n </template>\n\n <template v-slot:loading>\n <td\n :colspan=\"headers.length\"\n class=\"text-left table-cell pa-0 text-body-1\"\n >Querying records...</td>\n </template>\n\n <template v-slot:no-results>\n <td\n :colspan=\"headers.length\"\n class=\"text-left table-cell pa-0 text-body-1\"\n >{{ loading ? 'Querying records...' : 'No records found.' }}</td>\n </template>\n\n <template v-slot:footer.page-text=\"{ pageStart, pageStop }\">\n <span class=\"text-body-1\">\n {{ pageStart }} - {{ pageStop }} of\n <span\n class=\"primary--text text-h6 mx-1\"\n >{{ totalItems | formatNumber }}</span>\n </span>\n </template>\n\n </v-data-table>\n </v-card>\n</template>\n\n<script>\nimport { fetchListRecords } from '@/utils/api'\nimport { SHOW_ALERT } from '@/store/actions/alert'\nimport { SHOW_PANEL } from '@/store/actions/panels'\nimport { tableColumns } from '@/utils/tableColumns'\nimport BaseSectionTitle from '@/components/base/BaseSectionTitle.vue'\nimport DataTableActions from '@/components/table/DataTableActions.vue'\nimport DataTableSelectFilter from '@/components/table/DataTableSelectFilter.vue'\nimport DataTableDatePicker from '@/components/table/DataTableDatePicker.vue'\nimport ResultChip from '@/components/analyses/ResultChip'\nimport debounce from 'lodash/debounce'\nimport isEqual from 'lodash/isEqual'\nimport orderBy from 'lodash/orderBy'\n\nexport default {\n name: 'DataTable',\n components: {\n BaseSectionTitle,\n DataTableActions,\n DataTableSelectFilter,\n DataTableDatePicker,\n ResultChip,\n },\n props: {\n model: {\n type: String,\n required: false\n },\n title: {\n type: String,\n default: ''\n },\n globalSearch: {\n type: Boolean,\n default: false\n },\n params: {\n type: Object,\n default: () => ({})\n },\n // skip columns using the verbose name\n skipColumns: {\n type: Array,\n default: () => []\n },\n // columns using the verbose name\n headersKey: {\n type: String,\n default: ''\n },\n cardClasses: {\n type: String,\n default: ''\n },\n collapse: {\n type: Boolean,\n default: false\n },\n infoText: {\n type: String,\n default: ''\n },\n openRecordsInNewTab: {\n type: Boolean,\n default: false\n },\n data: {\n type: Array,\n default: () => []\n },\n filterRemotely: {\n type: Boolean,\n default: true,\n },\n initialSort: {\n type: Array,\n default: () => [\"-pk\"]\n },\n initialItemsPerPage: {\n type: Number,\n default: 5,\n }\n },\n data() {\n return {\n items: this.filterRemotely ? [] : this.data,\n totalItems: 0,\n loading: true,\n showTable: !this.collapse,\n showFilters: false,\n\n // table params\n headers: tableColumns[this.headersKey || this.model]\n .map(col => {\n col.text = col.verboseName\n col.value = col.field\n return col\n })\n .filter(col => !this.skipColumns.includes(col.verboseName)),\n page: 1,\n pageCount: 0,\n itemsPerPage: this.initialItemsPerPage,\n itemsPerPageItems: [3, 5, 10, 25, 50, 200, 500, 5000],\n sortByColumns: this.initialSort,\n\n // query params\n limit: null,\n offset: null,\n ordering: null,\n errorMessage: null,\n searchText: '',\n filterParams: {},\n queryParams: {}\n }\n },\n watch: {\n params(newParams, oldParams) {\n if (!isEqual(newParams, oldParams)) {\n this.fetchData()\n }\n },\n page() {\n this.updateTable()\n },\n sortByColumns() {\n this.updateTable()\n },\n itemsPerPage() {\n this.updateTable()\n },\n data() {\n this.updateTable()\n }\n },\n created() {\n this.fetchData = debounce(this._fetchData, 500)\n this.updateTable()\n },\n methods: {\n changeSort(column) {\n let sort = this.sortByColumns\n\n if (sort.includes(column)) {\n // Make ordering column -> None\n sort = sort.filter(columns => columns !== column)\n } else if (sort.includes(`-${column}`)) {\n // Make ordering -column -> column\n sort = sort.filter(columns => columns !== `-${column}`)\n sort.push(column)\n } else {\n // Make ordering None -> -column\n sort.push(`-${column}`)\n }\n\n // Move pk to last if exist\n sort.push(sort.splice(sort.indexOf('pk'), 1)[0])\n sort.push(sort.splice(sort.indexOf('-pk'), 1)[0])\n\n this.sortByColumns = sort\n },\n filterSearch(value, field, filter = 'icontains') {\n field = field.split('.').join('__')\n value = Array.isArray(value) ? value.join(',') : value\n\n // Ensure only one filter per key\n this.filterParams = Object.keys(this.filterParams)\n .filter(param => {\n const filterWithSameKey = `${field}__`\n return !param.includes(filterWithSameKey)\n })\n .reduce((obj, key) => {\n obj[key] = this.filterParams[key]\n return obj\n }, {})\n\n this.filterParams[`${field}__${filter}`] = value\n this.offset = null\n this.page = 1\n this.fetchData()\n\n // Track when user makes any string search\n window.analytics.track('Filter from table column', {\n model: this.model,\n query: this.filterParams\n })\n },\n\n columnValueList(val) {\n return this.items.map(d => d[val])\n },\n\n updateSearchText(text) {\n this.searchText = text\n this.offset = null\n this.page = 1\n this.fetchData()\n\n // Track when user makes any string search\n window.analytics.track('Searched From Table', {\n model: this.model,\n search: this.searchText,\n query: this.queryParams\n })\n },\n\n tableValue(item, header) {\n let value = this.getValue(item, header)\n return this.highlightText(value, header)\n },\n\n formatValue(value) {\n return this.highlightText(value)\n },\n\n getValue(item, header) {\n return this.$get(\n item,\n header.accessor || header.field,\n header.default || '-'\n )\n },\n\n isTableSmall() {\n let tables = document.getElementsByClassName('v-datatable__actions')\n return tables && tables.length > 0 && tables[0].offsetWidth < 400\n },\n\n classValue(item, accessor) {\n let value = this.$get(item, accessor)\n .toString()\n .toLowerCase()\n return `status-${value}`\n },\n\n highlightText(rawText, header) {\n header = header.value.split('.').join('__')\n const filterParams = {\n ...this.filterParams,\n search: this.searchText\n }\n let keywords = Object.entries(filterParams)\n .filter(([key, value]) => {\n return (\n value &&\n typeof value !== 'boolean' &&\n (key === 'search' || key.replace(/(__icontains)/, '') === header)\n )\n })\n .map(([, value]) => value.toString().toLowerCase())\n\n let { text, element } = this.$getInnerHtmlText(rawText)\n let shownText = text ? text.toString().slice(0, 41) : ''\n let highlightText = shownText\n\n // Search for match of full string if not each word\n let wordsToHighlight = []\n keywords.forEach(keyword => {\n keyword = keyword.trim()\n if (keyword && shownText.toLowerCase().includes(keyword)) {\n wordsToHighlight.push(keyword)\n } else {\n keyword.split(' ').forEach(word => {\n if (word && shownText.toLowerCase().includes(word)) {\n wordsToHighlight.push(word)\n }\n })\n }\n })\n\n // Highlight the matches\n if (wordsToHighlight.length) {\n const keywordRegex = new RegExp(`(${wordsToHighlight.join('|')})`, 'gi')\n highlightText = text\n .toString()\n .replace(keywordRegex, '<span class=\"highlight\">$1</span>')\n }\n return this.$setInnerHtmlText(element, highlightText)\n },\n\n updateTable() {\n this.limit = this.itemsPerPage\n this.offset = this.itemsPerPage * (this.page - 1)\n this.ordering = this.sortByColumns.join(',')\n\n if (this.filterRemotely) {\n // Make server-side filtering\n this.fetchData()\n } else {\n // Local Items\n this.loading = true\n let rows = this.data\n\n if (this.searchText) {\n rows = rows.filter((row) =>\n Object.values(row).some((column) =>\n column.toLowerCase().includes(this.searchText.toLowerCase())\n )\n )\n }\n if (this.sortByColumns.length) {\n const columns = []\n const order = []\n this.sortByColumns.forEach(param => {\n const [first, ...rest] = param\n if (first === '-') {\n columns.push(rest.join(''))\n order.push('desc')\n } else {\n columns.push(param)\n order.push('asc')\n }\n })\n rows = orderBy(rows, columns, order)\n }\n rows = rows.slice(this.offset, this.offset + this.limit)\n this.items = rows\n this.totalItems = this.data.length\n this.pages = Math.ceil(this.totalItems / this.items)\n this.loading = false\n }\n },\n\n _fetchData() {\n this.loading = true\n const {\n model,\n limit,\n offset,\n ordering,\n params,\n filterParams,\n searchText\n } = this\n\n this.queryParams = {\n ...params,\n ...filterParams,\n limit,\n offset,\n search: searchText,\n ordering,\n }\n\n this.$emit('fetch-data', this.queryParams)\n\n fetchListRecords(model, this.queryParams)\n .then(response => {\n if (searchText === this.searchText) {\n this.items = response.results\n this.totalItems = response.count\n this.pages = Math.ceil(response.count / limit)\n this.errorMessage = response.error || ''\n }\n })\n .catch(error => {\n let errorMessage = `Search failed: `\n if (error.response) {\n const errorMessages = Object.values(error.response.data).flat()\n errorMessage += errorMessages.length ? errorMessages[0] : '...'\n }\n this.$store.dispatch(SHOW_ALERT, {\n error: errorMessage\n })\n })\n .finally(() => (this.loading = false))\n },\n\n onClickRecord(value, model) {\n if (this.openRecordsInNewTab) {\n const queryParams = {\n individual: 'bioModel',\n sample: 'bioModel',\n experiment: 'bioModel'\n }\n const queryParam = this.$get(queryParams, model, model)\n window.open(`/?${queryParam}=${value}`, '_blank')\n } else {\n this.$store.dispatch(SHOW_PANEL, {\n [model]: value\n })\n }\n },\n\n toggleColumnFilters() {\n this.showFilters = !this.showFilters\n if (!this.showFilters) {\n this.filterParams = {}\n this.fetchData()\n }\n },\n }\n}\n</script>\n\n<style lang=\"scss\">\n\n.isabl-base-card .v-data-table {\n th.column.sortable.active.desc button.sort-icon {\n transform: rotate(-180deg);\n }\n th.column.sortable.active button.sort-icon {\n color: var(--v-primary-base);\n }\n th.column.sortable button {\n font-size: 13px !important;\n margin-left: 4px;\n }\n .v-data-table__wrapper {\n max-height: 300px;\n overflow-y: auto;\n }\n .table-cell {\n height: 25px !important;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 300px;\n padding-left: 5px !important;\n .v-chip.v-size--small {\n height: 20px;\n }\n }\n tr.table-headers.table-cell {\n position: sticky;\n top: 0;\n background: white;\n cursor: pointer;\n height: 32px;\n th {\n // border-bottom: thin solid rgba(0,0,0,.12);\n background: rgba(0,0,0,.04);\n }\n }\n &.theme--dark, &.theme--dark tr.table-headers.table-cell th {\n background: var(--v-surface-base);\n }\n &.theme--dark tr.column-filters th {\n background: var(--v-surface-base);\n }\n th.column.sortable {\n padding: 0px 5px;\n }\n tr.column-filters th {\n height: 32px;\n }\n .v-data-table__empty-wrapper>td {\n padding: 0px;\n }\n}\n\n.table-filter-input {\n min-width: 150px;\n .v-input__icon--append .v-icon {\n font-size: 14px;\n }\n input {\n font-size: 14px;\n font-weight: 400;\n padding-left: 6px !important;\n }\n label {\n font-size: 13px;\n padding-left: 6px;\n }\n}\n.column-filters {\n position: sticky;\n top: 25px;\n background: white;\n z-index: 10;\n .v-select {\n margin: 0px;\n .v-input__slot, input {\n height: 25px;\n }\n .v-icon {\n font-size: 16px;\n }\n }\n .v-select__selections {\n display: contents;\n max-width: 120px;\n font-size: 14px;\n font-weight: 400;\n span {\n padding: 0px;\n }\n }\n .v-text-field .v-input__append-inner {\n padding: 0px;\n }\n}\n\n.v-list .v-list-item {\n min-height: 25px;\n .v-list-item__title {\n font-size: 14px;\n font-weight: 400;\n }\n .v-list-item__content {\n padding: 0px 10px;\n }\n}\n\ndiv.v-list--dense .v-list-item {\n min-height: 25px;\n padding: 0px;\n .v-list-item__action {\n margin: 0px;\n padding: 0px 4px;\n }\n .v-list-item__title {\n font-size: 14px;\n font-weight: 400;\n }\n .v-list-item__content {\n padding: 0px;\n }\n}\n\n.v-select-list {\n overflow: hidden;\n}\n\n.v-menu__content:not(.v-autocomplete__content) {\n .v-list__tile {\n height: 23px;\n }\n}\ntable.v-table tbody tr {\n border: 0px !important;\n}\n\ntable.v-table thead {\n tr {\n height: 30px !important;\n }\n tr.v-datatable__progress {\n height: 0px !important;\n border-top: 1px solid rgba(0, 0, 0, 0.05);\n }\n th {\n padding-left: 5px !important;\n padding-right: 5px !important;\n }\n}\n\ndiv.v-data-table__actions {\n flex-wrap: nowrap;\n &__pagination {\n width: 100%;\n min-width: 170px;\n margin: 0 10px 0 10px;\n }\n &__select {\n white-space: normal;\n overflow: hidden;\n justify-content: flex-start;\n margin-right: 5px;\n max-width: 100px;\n .v-select {\n margin-left: 25px;\n margin-right: 0px;\n margin-top: 0px;\n margin-bottom: 0px;\n }\n }\n &__range-controls {\n width: 100%;\n }\n button {\n margin: 0px;\n margin-right: 5px;\n }\n}\n\n.section-toggle {\n cursor: pointer;\n}\n\n.isabl-base-card .v-data-footer {\n font-size: 12px;\n padding: 0px;\n div.v-select__selection {\n font-size: 12px;\n }\n div.v-select {\n margin: 4px 0px 4px 16px;\n }\n}\n.v-data-footer__select\n.v-menu__content .v-list-item {\n min-height: 25px;\n font-size: 14px;\n .v-list-item__content {\n padding: 0px;\n }\n}\n// Style taken from github\ncode.markdown-style {\n padding: 0.2em 0.4em;\n margin: 0;\n font-size: 85%;\n background-color: rgba(175,184,193,0.2);\n border-radius: 6px;\n color: #24292f;\n}\n\n.v-data-table .v-data-footer {\n .v-data-footer__select {\n margin-left: 0;\n margin-right: auto;\n }\n .v-data-footer__pagination {\n margin-left: auto;\n margin-right: auto;\n }\n .v-data-footer__icons-before {\n margin-left: auto;\n margin-right: 0;\n }\n .v-data-footer__icons-after {\n margin-left: 0;\n margin-right: 0;\n }\n}\n\n</style>\n"]
251047
251039
  },
251048
251040
  _coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
251049
- hash: "bc4de628811eceb42295fceb48086fc35aa352e5"
251041
+ hash: "235fafbf88a72a48e239d67dc7b99e287750338d"
251050
251042
  };
251051
251043
  var coverage = global[gcv] || (global[gcv] = {});
251052
251044
 
@@ -251905,8 +251897,8 @@ var DataTablevue_type_style_index_0_lang_scss_ = __webpack_require__("7bec");
251905
251897
 
251906
251898
  var DataTable_component = normalizeComponent(
251907
251899
  table_DataTablevue_type_script_lang_js_,
251908
- DataTablevue_type_template_id_74a20140_render,
251909
- DataTablevue_type_template_id_74a20140_staticRenderFns,
251900
+ DataTablevue_type_template_id_31c65eb2_render,
251901
+ DataTablevue_type_template_id_31c65eb2_staticRenderFns,
251910
251902
  false,
251911
251903
  null,
251912
251904
  null,
@@ -265125,12 +265117,12 @@ var ProjectPanelvue_type_template_id_7c1bc440_staticRenderFns = []
265125
265117
 
265126
265118
  // CONCATENATED MODULE: ./src/components/projects/ProjectPanel.vue?vue&type=template&id=7c1bc440&
265127
265119
 
265128
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=2fd2fca6&
265129
- var BaseDashboardvue_type_template_id_2fd2fca6_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"dashboard"},[_c('v-card',{staticClass:"isabl-base-card",attrs:{"flat":""}},[_c('dc-graph',{attrs:{"model":_vm.model,"params":_vm.params,"items":_vm.items,"figures":_vm.figures,"loading":_vm.loading,"max-records":_vm.maxRecords,"total-items":_vm.totalItems,"is-embedded":_vm.isEmbedded},on:{"set-max-records":_vm.setMaxRecords,"set-options":_vm.setOptions}})],1)],1)}
265130
- var BaseDashboardvue_type_template_id_2fd2fca6_staticRenderFns = []
265120
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=191c4226&
265121
+ var BaseDashboardvue_type_template_id_191c4226_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"dashboard"},[_c('v-card',{staticClass:"isabl-base-card",attrs:{"flat":""}},[_c('dc-graph',{attrs:{"model":_vm.model,"params":_vm.params,"items":_vm.items,"figures":_vm.figures,"loading":_vm.loading,"max-records":_vm.maxRecords,"total-items":_vm.totalItems,"is-embedded":_vm.isEmbedded},on:{"set-max-records":_vm.setMaxRecords,"set-options":_vm.setOptions}})],1)],1)}
265122
+ var BaseDashboardvue_type_template_id_191c4226_staticRenderFns = []
265131
265123
 
265132
265124
 
265133
- // CONCATENATED MODULE: ./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=2fd2fca6&
265125
+ // CONCATENATED MODULE: ./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=191c4226&
265134
265126
 
265135
265127
  // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/dashboard/DcGraph.vue?vue&type=template&id=7d68029b&
265136
265128
  var DcGraphvue_type_template_id_7d68029b_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"main",class:['main-dc', !_vm.isEmbedded ? 'px-2' : '']},[_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.loading),expression:"loading"}],staticClass:"overlay"},[_c('v-progress-circular',{staticClass:"loading",attrs:{"width":4,"size":40,"indeterminate":"","color":"primary"}}),_c('div',{staticClass:"mt-6"},[_vm._v("loading records...")])],1),_c('transition',{attrs:{"name":"slide-fade"}},[_c('data-table',{directives:[{name:"show",rawName:"v-show",value:(_vm.showPrefilterTable),expression:"showPrefilterTable"}],attrs:{"model":_vm.model,"params":_vm.params,"open-records-in-new-tab":!_vm.isEmbedded,"title":"Import Into dashboard","info-text":"Search and filter the records you may want to import into the interactive dashboard.","card-classes":"elevation-0 pa-0 mb-12"},on:{"fetch-data":_vm.setOptions}})],1),_c('div',{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:(_vm.onVisible),expression:"onVisible"}],staticClass:"dashboard-graphs dc-data-count",attrs:{"id":("dc-data-count-" + _vm.uuid)}},[_c('v-container',{attrs:{"fluid":""}},[_c('v-row',{staticClass:"pb-6 justify-space-between"},[_c('v-col',{staticClass:"pa-0",attrs:{"cols":"4"}},[_c('h2',{staticClass:"isabl-section-title text-left"},[_vm._v(_vm._s(_vm._f("capitalize")(_vm.title || 'Interactive Dashboard')))])]),_c('v-col',{staticClass:"text-center pa-0",attrs:{"cols":"4"}},[_c('span',{staticClass:"filter-count primary--text"}),_vm._v(" selected out of\n "),_c('span',{staticClass:"total-count primary--text"}),(_vm.totalItems && _vm.totalItems > _vm.maxRecords)?_c('span',{staticClass:"total-items"},[_vm._v("\n /\n "),_c('span',{staticClass:"primary--text"},[_c('b',[_vm._v(_vm._s(_vm._f("formatNumber")(_vm.totalItems)))])])]):_vm._e(),_vm._v("\n records\n\n "),(_vm.totalItems && _vm.totalItems > _vm.maxRecords)?_c('v-tooltip',{attrs:{"top":""},scopedSlots:_vm._u([{key:"activator",fn:function(ref){
@@ -291760,7 +291752,7 @@ var DcGraph_component = normalizeComponent(
291760
291752
  // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/dashboard/BaseDashboard.vue?vue&type=script&lang=js&
291761
291753
  var cov_21s3whnekh = function () {
291762
291754
  var path = "/Users/juanes/papaemmelab/isabl_web/src/components/dashboard/BaseDashboard.vue";
291763
- var hash = "80378eaf505b52746695623a345007e2d0c5f9ea";
291755
+ var hash = "0b4078169eae16bef6c925f7ea045fdcabd12d44";
291764
291756
  var global = new Function("return this")();
291765
291757
  var gcv = "__coverage__";
291766
291758
  var coverageData = {
@@ -292652,10 +292644,10 @@ var cov_21s3whnekh = function () {
292652
292644
  mappings: ";;;;;;;;;;;;;;;;;;;;AAoBA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
292653
292645
  file: "BaseDashboard.vue",
292654
292646
  sourceRoot: "src/components/dashboard",
292655
- sourcesContent: ["<template>\n <div ref=\"dashboard\">\n <v-card flat class=\"isabl-base-card\">\n <dc-graph\n :model=\"model\"\n :params=\"params\"\n :items=\"items\"\n :figures=\"figures\"\n :loading=\"loading\"\n :max-records=\"maxRecords\"\n :total-items=\"totalItems\"\n :is-embedded=\"isEmbedded\"\n @set-max-records=\"setMaxRecords\"\n @set-options=\"setOptions\"\n />\n </v-card>\n </div>\n</template>\n\n<script>\n import BasePanel from '@/components/base/BasePanel.vue'\n import BaseSectionTitle from '@/components/base/BaseSectionTitle.vue'\n import DataTable from '@/components/table/DataTable.vue'\n import DcGraph from '@/components/dashboard/DcGraph.vue'\n import { fetchListRecords } from '@/utils/api'\n import { SHOW_ALERT } from '@/store/actions/alert'\n\n export default {\n name: 'BaseDashboard',\n components: {\n BasePanel,\n BaseSectionTitle,\n DataTable,\n DcGraph\n },\n props: {\n params: {\n type: Object,\n default: () => ({})\n },\n isEmbedded: {\n type: Boolean,\n default: true\n },\n model: {\n type: String,\n required: true\n },\n figures: {\n type: Array,\n required: true\n },\n requiredFields: {\n type: Array,\n default: () => []\n }\n },\n data() {\n return {\n items: [],\n loading: false,\n maxRecords: 500,\n options: {},\n totalItems: null\n }\n },\n computed: {\n queryFields() {\n const fields = this.figures.map(figure => figure.queryFields)\n // flat and remove duplicates\n return [...new Set(fields.flat())]\n },\n fields() {\n return [\n ...new Set([\n 'pk',\n 'created',\n 'modified',\n 'analytics',\n ...this.requiredFields,\n ...this.queryFields\n ])\n ]\n .filter(i => !!i)\n .map(i => i.replace(/\\./g, '__'))\n }\n },\n created() {\n this.loading = true\n },\n methods: {\n setOptions(options) {\n delete options.offset\n this.options = options\n this.fetchData()\n },\n setMaxRecords(value) {\n if (value !== this.maxRecords) {\n this.maxRecords = value\n this.fetchData()\n }\n },\n fetchData() {\n this.loading = true\n\n const fields = this.fields.map(i => i.replace(/\\./g, '__'))\n fetchListRecords(this.model, {\n ...this.options,\n ...this.params,\n limit: this.maxRecords,\n distinct: true,\n fields,\n 'fields!': ''\n })\n .then(response => {\n this.items = response.results.map(r => {\n const result = {\n ...r,\n ...r.analytics\n }\n delete result.analytics\n return result\n })\n this.totalItems = response.count\n })\n .catch(error => {\n let errorMessage = `Search failed: `\n if (error.response) {\n const errorMessages = Object.values(error.response.data).flat()\n errorMessage += errorMessages.length ? errorMessages[0] : '...'\n }\n this.$store.dispatch(SHOW_ALERT, {\n error: errorMessage\n })\n })\n .finally(() => (this.loading = false))\n }\n }\n }\n</script>\n<style lang=\"scss\">\n.dashboard .panels {\n max-width: 95%;\n max-width: 1800px;\n padding-bottom: 100px;\n}\n</style>\n"]
292647
+ sourcesContent: ["<template>\n <div ref=\"dashboard\">\n <v-card flat class=\"isabl-base-card\">\n <dc-graph\n :model=\"model\"\n :params=\"params\"\n :items=\"items\"\n :figures=\"figures\"\n :loading=\"loading\"\n :max-records=\"maxRecords\"\n :total-items=\"totalItems\"\n :is-embedded=\"isEmbedded\"\n @set-max-records=\"setMaxRecords\"\n @set-options=\"setOptions\"\n />\n </v-card>\n </div>\n</template>\n\n<script>\nimport BasePanel from '@/components/base/BasePanel.vue'\nimport BaseSectionTitle from '@/components/base/BaseSectionTitle.vue'\nimport DataTable from '@/components/table/DataTable.vue'\nimport DcGraph from '@/components/dashboard/DcGraph.vue'\nimport { fetchListRecords } from '@/utils/api'\nimport { SHOW_ALERT } from '@/store/actions/alert'\n\nexport default {\n name: 'BaseDashboard',\n components: {\n BasePanel,\n BaseSectionTitle,\n DataTable,\n DcGraph\n },\n props: {\n params: {\n type: Object,\n default: () => ({})\n },\n isEmbedded: {\n type: Boolean,\n default: true\n },\n model: {\n type: String,\n required: true\n },\n figures: {\n type: Array,\n required: true\n },\n requiredFields: {\n type: Array,\n default: () => []\n }\n },\n data() {\n return {\n items: [],\n loading: false,\n maxRecords: 500,\n options: {},\n totalItems: null\n }\n },\n computed: {\n queryFields() {\n const fields = this.figures.map(figure => figure.queryFields)\n // flat and remove duplicates\n return [...new Set(fields.flat())]\n },\n fields() {\n return [\n ...new Set([\n 'pk',\n 'created',\n 'modified',\n 'analytics',\n ...this.requiredFields,\n ...this.queryFields\n ])\n ]\n .filter(i => !!i)\n .map(i => i.replace(/\\./g, '__'))\n }\n },\n created() {\n this.loading = true\n },\n methods: {\n setOptions(options) {\n delete options.offset\n this.options = options\n this.fetchData()\n },\n setMaxRecords(value) {\n if (value !== this.maxRecords) {\n this.maxRecords = value\n this.fetchData()\n }\n },\n fetchData() {\n this.loading = true\n\n const fields = this.fields.map(i => i.replace(/\\./g, '__'))\n fetchListRecords(this.model, {\n ...this.options,\n ...this.params,\n limit: this.maxRecords,\n distinct: true,\n fields,\n 'fields!': ''\n })\n .then(response => {\n this.items = response.results.map(r => {\n const result = {\n ...r,\n ...r.analytics\n }\n delete result.analytics\n return result\n })\n this.totalItems = response.count\n })\n .catch(error => {\n let errorMessage = `Search failed: `\n if (error.response) {\n const errorMessages = Object.values(error.response.data).flat()\n errorMessage += errorMessages.length ? errorMessages[0] : '...'\n }\n this.$store.dispatch(SHOW_ALERT, {\n error: errorMessage\n })\n })\n .finally(() => (this.loading = false))\n }\n }\n}\n</script>\n<style lang=\"scss\">\n.dashboard .panels {\n max-width: 95%;\n max-width: 1800px;\n padding-bottom: 100px;\n}\n</style>\n"]
292656
292648
  },
292657
292649
  _coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
292658
- hash: "80378eaf505b52746695623a345007e2d0c5f9ea"
292650
+ hash: "0b4078169eae16bef6c925f7ea045fdcabd12d44"
292659
292651
  };
292660
292652
  var coverage = global[gcv] || (global[gcv] = {});
292661
292653
 
@@ -292886,8 +292878,8 @@ var BaseDashboardvue_type_style_index_0_lang_scss_ = __webpack_require__("f624")
292886
292878
 
292887
292879
  var BaseDashboard_component = normalizeComponent(
292888
292880
  dashboard_BaseDashboardvue_type_script_lang_js_,
292889
- BaseDashboardvue_type_template_id_2fd2fca6_render,
292890
- BaseDashboardvue_type_template_id_2fd2fca6_staticRenderFns,
292881
+ BaseDashboardvue_type_template_id_191c4226_render,
292882
+ BaseDashboardvue_type_template_id_191c4226_staticRenderFns,
292891
292883
  false,
292892
292884
  null,
292893
292885
  null,