{"version":3,"file":"app-65286d99.d9b911be3325422c.bundle.js","mappings":"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","sources":["webpack://client-app/./src/app/project/summing/quantity-selector/quantity-selector.scss","webpack://client-app/./src/app/project/summing/summing.scss","webpack://client-app/./src/app/project/summing/nodes/category-node.html","webpack://client-app/./src/app/project/summing/nodes/family-node.html","webpack://client-app/./src/app/project/summing/nodes/type-node.html","webpack://client-app/./src/app/project/summing/quantity-selector/quantity-selector.html","webpack://client-app/./src/app/project/summing/summing.html","webpack://client-app/./src/app/project/summing/nodes/category-node.ts","webpack://client-app/./src/app/project/summing/nodes/family-node.ts","webpack://client-app/./src/app/project/summing/nodes/type-node.ts","webpack://client-app/./src/app/project/summing/quantity-selector/quantity-selector.ts","webpack://client-app/./src/app/project/summing/nodes/node-models.ts","webpack://client-app/./src/app/project/summing/summing.ts"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".quantity-selector{display:grid;row-gap:15px}.quantity-selector .headline{background:#efefef;font-weight:600;padding:calc(15px / 2) calc(15px / 1.5)}.quantity-selector .value{padding:calc(15px / 2) calc(15px / 1.5)}.quantity-selector .section{border:1px solid rgba(0,0,0,.175)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/project/summing/quantity-selector/quantity-selector.scss\",\"webpack://./src/resources/customized-styles/variables.scss\"],\"names\":[],\"mappings\":\"AAEA,mBACC,YAAA,CACA,YCMQ,CDJR,6BACC,kBCFW,CDGX,eAAA,CACA,uCAAA,CAGD,0BACC,uCAAA,CAGD,4BACC,iCAAA\",\"sourcesContent\":[\"@import \\\"src/resources/customized-styles/variables\\\";\\r\\n\\r\\n.quantity-selector {\\r\\n\\tdisplay: grid;\\r\\n\\trow-gap: $gutter;\\r\\n\\r\\n\\t.headline {\\r\\n\\t\\tbackground: $grey-light;\\r\\n\\t\\tfont-weight: 600;\\r\\n\\t\\tpadding: calc(#{$gutter} / 2) calc(#{$gutter} / 1.5);\\r\\n\\t}\\r\\n\\r\\n\\t.value {\\r\\n\\t\\tpadding: calc(#{$gutter} / 2) calc(#{$gutter} / 1.5);\\r\\n\\t}\\r\\n\\r\\n\\t.section {\\r\\n\\t\\tborder: 1px solid $border-color;\\r\\n\\t}\\r\\n}\\r\\n\",\"$text-color: #333;\\r\\n$accent: #00B3C9;\\r\\n$accent-15pct: #D9F4F7;\\r\\n$bs-default: #f1f3f4;\\r\\n$grey: #dddddd;\\r\\n$grey-light: #efefef;\\r\\n$grey-lighter: #F0F3F4;\\r\\n$grey-darker: #A5A3A3;\\r\\n$white-hsl-97: hsla(0deg, 0%, 97%, 1);\\r\\n\\r\\n$gutter: 15px;\\r\\n\\r\\n$box-shadow: 0 0 0.25rem rgba(0, 0, 0, 0.175);\\r\\n$box-shadow-right: 0.05rem 0 0.25rem rgba(0, 0, 0, 0.175);\\r\\n$box-shadow-left: -0.05rem 0 0.25rem rgba(0, 0, 0, 0.175);\\r\\n$box-shadow-color: rgba(0, 0, 0, 0.175);\\r\\n\\r\\n$border-color: rgba(0, 0, 0, 0.175);\\r\\n\\r\\n\\r\\n// Showroom header\\r\\n$showroom-header-height: 350px;\\r\\n$showroom-header-height-small: 150px;\\r\\n$showroom-header-height-mobile: 200px;\\r\\n\\r\\n// Navigation\\r\\n$nav-width: 275px;\\r\\n$nav-width-collapsed: 50px;\\r\\n$nav-height-mobile: 50px;\\r\\n\\r\\n// Top bar\\r\\n$top-bar-height: 4em;\\r\\n\\r\\n// CSS grid table\\r\\n$css-grid-header-height: calc(4em + 1px);\\r\\n\\r\\n// Object Presentation\\r\\n$object-presentation-left-content-width: 250px;\\r\\n$object-presentation-left-content-width-lg: 350px;\\r\\n$object-presentation-img-height: 250px;\\r\\n\\r\\n\\r\\n// Card deck\\r\\n$card-height: 250px;\\r\\n\\r\\n\\r\\n// Select\\r\\n$select-min-width: 200px;\\r\\n\\r\\n\\r\\n// Modal\\r\\n$modal-header-height: 50px;\\r\\n$modal-footer-height: 50px;\\r\\n\\r\\n// Object Properties\\r\\n$object-properties-width: 480px;\\r\\n$object-properties-width--detailed: 560px;\\r\\n$object-properties-width-mobile: 100vw;\\r\\n$object-properties-width-mobile--detailed: 100vw;\\r\\n$object-properties-width-tablet: 480px;\\r\\n$object-properties-width-tablet--detailed: 560px;\\r\\n\\r\\n// Notification Center\\r\\n$notification-center-width: 500px;\\r\\n\\r\\n// 7.0 z-index Setting\\r\\n\\r\\n$btn-scroll-to-top-zindex: 1020 !default;\\r\\n$content-zindex: 1020 !default;\\r\\n$float-submenu-zindex: 1020 !default;\\r\\n$footer-zindex: 1020 !default;\\r\\n$header-zindex: 1020 !default;\\r\\n$header-fixed-zindex: 1040 !default;\\r\\n$sidebar-zindex: 1010 !default;\\r\\n$top-menu-zindex: 1015 !default;\\r\\n$theme-panel-zindex: 1020 !default;\\r\\n$page-loader-zindex : 9999 !default;\\r\\n$page-title-zindex: 1020 !default;\\r\\n$pace-loader-zindex: 1030 !default;\\r\\n$panel-expand-zindex: 1080 !default;\\r\\n\\r\\n// 2.0 RTL Setting\\r\\n\\r\\n$enable-rtl: false !default;\\r\\n\\r\\n// 6.0 App Component Setting\\r\\n\\r\\n$boxed-layout-width: rem(1280px) !default;\\r\\n$content-padding-x: rem(30px) !default;\\r\\n$content-padding-y: rem(20px) !default;\\r\\n$content-padding-x-sm: rem(20px) !default;\\r\\n$content-padding-y-sm: rem(20px) !default;\\r\\n$header-height: rem(50px) !default;\\r\\n$header-height-sm: rem(50px) !default;\\r\\n$sidebar-width: rem(220px) !default;\\r\\n$sidebar-minified-width: rem(60px) !default;\\r\\n$sidebar-wide-width: rem(250px) !default;\\r\\n$top-menu-height: rem(40px) !default;\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".summing{display:grid;grid-template-columns:1fr}.summing[data-quantity-selector=true]{grid-template-columns:1fr minmax(320px, 480px)}.summing__list{height:calc(100vh - 4em);overflow:auto;padding:15px 0}.summing__properties{box-shadow:-0.05rem 0 .25rem rgba(0,0,0,.175);height:100vh;overflow:auto;padding:15px;z-index:1020}[data-device-type=mobile] .summing__properties,[data-device-type=tablet] .summing__properties{height:calc(100vh - 50px)}.summing__properties__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:15px}.summing__properties__header .title{margin:0}.category-node{cursor:pointer;display:flex;align-items:center;height:2.5em;padding:0 15px;transition:all 100ms ease-in-out}.category-node--without-children{cursor:default;opacity:.6;padding-left:calc(15px + 18.875px)}.category-node__name{display:flex;align-items:center;height:inherit;width:100%;user-select:none}.category-node__icon{padding-right:calc(15px / 2)}.children{display:flex;flex-direction:column;padding-left:20px}category-node{display:block}family-node{display:block}type-node{display:block;margin-left:20px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/app/project/summing/summing.scss\",\"webpack://./src/resources/customized-styles/variables.scss\"],\"names\":[],\"mappings\":\"AAGA,SACC,YAAA,CACA,yBAAA,CAEA,sCACC,8CAAA,CAGD,eAGC,wBAAA,CAEA,aAAA,CACA,cAAA,CAGD,qBACC,6CCPgB,CDQhB,YAAA,CACA,aAAA,CACA,YCdO,CDeP,YC2CkC,CDzClC,8FACC,yBAAA,CAID,6BACC,YAAA,CACA,kBAAA,CACA,6BAAA,CACA,kBC1BM,CD4BN,oCACC,QAAA,CAMJ,eACC,cAAA,CACA,YAAA,CACA,kBAAA,CACA,YAAA,CACA,cAAA,CACA,gCAAA,CAWA,iCACC,cAAA,CACA,UAAA,CACA,kCAAA,CAGD,qBACC,YAAA,CACA,kBAAA,CACA,cAAA,CACA,UAAA,CACA,gBAAA,CAGD,qBACC,4BAAA,CAIF,UACC,YAAA,CACA,qBAAA,CACA,iBAAA,CAGD,cACC,aAAA,CAGD,YACC,aAAA,CAGD,UACC,aAAA,CACA,gBAAA\",\"sourcesContent\":[\"@import \\\"src/resources/customized-styles/variables\\\";\\r\\n@import \\\"src/resources/styling-admin\\\";\\r\\n\\r\\n.summing {\\r\\n\\tdisplay: grid;\\r\\n\\tgrid-template-columns: 1fr;\\r\\n\\t\\r\\n\\t&[data-quantity-selector=true] {\\r\\n\\t\\tgrid-template-columns: 1fr minmax(320px, 480px);\\r\\n\\t}\\r\\n\\r\\n\\t&__list {\\r\\n\\t\\t// now that we have a top-bar, \\r\\n\\t\\t// the list may no longer claim the full viewport-height:\\r\\n\\t\\theight: calc(100vh - #{$top-bar-height});\\r\\n\\r\\n\\t\\toverflow: auto;\\r\\n\\t\\tpadding: $gutter 0;\\r\\n\\t}\\r\\n\\r\\n\\t&__properties {\\r\\n\\t\\tbox-shadow: $box-shadow-left;\\r\\n\\t\\theight: 100vh;\\r\\n\\t\\toverflow: auto;\\r\\n\\t\\tpadding: $gutter;\\r\\n\\t\\tz-index: $content-zindex;\\r\\n\\r\\n\\t\\t[data-device-type=mobile] &, [data-device-type=tablet] & {\\r\\n\\t\\t\\theight: calc(100vh - #{$nav-height-mobile});\\r\\n\\t\\t}\\r\\n\\t\\r\\n\\r\\n\\t\\t&__header {\\r\\n\\t\\t\\tdisplay: flex;\\r\\n\\t\\t\\talign-items: center;\\r\\n\\t\\t\\tjustify-content: space-between;\\r\\n\\t\\t\\tmargin-bottom: $gutter;\\r\\n\\r\\n\\t\\t\\t.title {\\r\\n\\t\\t\\t\\tmargin: 0;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t}\\r\\n}\\r\\n\\r\\n.category-node {\\r\\n\\tcursor: pointer;\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n\\theight: 2.5em;\\r\\n\\tpadding: 0 $gutter;\\r\\n\\ttransition: all 100ms ease-in-out;\\r\\n\\r\\n\\t// &:hover {\\r\\n\\t// \\tbackground: $accent-15pct;\\r\\n\\t// }\\r\\n\\r\\n\\t// &.selected {\\r\\n\\t// \\tbackground: $accent;\\r\\n\\t// \\tcolor: $white;\\r\\n\\t// }\\r\\n\\t\\r\\n\\t&--without-children{\\r\\n\\t\\tcursor: default;\\r\\n\\t\\topacity: .6;\\r\\n\\t\\tpadding-left: calc(#{$gutter} + 18.875px);\\r\\n\\t}\\r\\n\\r\\n\\t&__name {\\r\\n\\t\\tdisplay: flex;\\r\\n\\t\\talign-items: center;\\r\\n\\t\\theight: inherit;\\r\\n\\t\\twidth: 100%;\\r\\n\\t\\tuser-select: none;\\r\\n\\t}\\r\\n\\r\\n\\t&__icon {\\r\\n\\t\\tpadding-right: calc(#{$gutter} / 2);\\r\\n\\t}\\r\\n}\\r\\n\\r\\n.children {\\r\\n\\tdisplay: flex;\\r\\n\\tflex-direction: column;\\r\\n\\tpadding-left: 20px;\\r\\n}\\r\\n\\r\\ncategory-node {\\r\\n\\tdisplay: block;\\r\\n}\\r\\n\\r\\nfamily-node {\\r\\n\\tdisplay: block;\\r\\n}\\r\\n\\r\\ntype-node {\\r\\n\\tdisplay: block;\\r\\n\\tmargin-left: 20px;\\r\\n}\\r\\n\",\"$text-color: #333;\\r\\n$accent: #00B3C9;\\r\\n$accent-15pct: #D9F4F7;\\r\\n$bs-default: #f1f3f4;\\r\\n$grey: #dddddd;\\r\\n$grey-light: #efefef;\\r\\n$grey-lighter: #F0F3F4;\\r\\n$grey-darker: #A5A3A3;\\r\\n$white-hsl-97: hsla(0deg, 0%, 97%, 1);\\r\\n\\r\\n$gutter: 15px;\\r\\n\\r\\n$box-shadow: 0 0 0.25rem rgba(0, 0, 0, 0.175);\\r\\n$box-shadow-right: 0.05rem 0 0.25rem rgba(0, 0, 0, 0.175);\\r\\n$box-shadow-left: -0.05rem 0 0.25rem rgba(0, 0, 0, 0.175);\\r\\n$box-shadow-color: rgba(0, 0, 0, 0.175);\\r\\n\\r\\n$border-color: rgba(0, 0, 0, 0.175);\\r\\n\\r\\n\\r\\n// Showroom header\\r\\n$showroom-header-height: 350px;\\r\\n$showroom-header-height-small: 150px;\\r\\n$showroom-header-height-mobile: 200px;\\r\\n\\r\\n// Navigation\\r\\n$nav-width: 275px;\\r\\n$nav-width-collapsed: 50px;\\r\\n$nav-height-mobile: 50px;\\r\\n\\r\\n// Top bar\\r\\n$top-bar-height: 4em;\\r\\n\\r\\n// CSS grid table\\r\\n$css-grid-header-height: calc(4em + 1px);\\r\\n\\r\\n// Object Presentation\\r\\n$object-presentation-left-content-width: 250px;\\r\\n$object-presentation-left-content-width-lg: 350px;\\r\\n$object-presentation-img-height: 250px;\\r\\n\\r\\n\\r\\n// Card deck\\r\\n$card-height: 250px;\\r\\n\\r\\n\\r\\n// Select\\r\\n$select-min-width: 200px;\\r\\n\\r\\n\\r\\n// Modal\\r\\n$modal-header-height: 50px;\\r\\n$modal-footer-height: 50px;\\r\\n\\r\\n// Object Properties\\r\\n$object-properties-width: 480px;\\r\\n$object-properties-width--detailed: 560px;\\r\\n$object-properties-width-mobile: 100vw;\\r\\n$object-properties-width-mobile--detailed: 100vw;\\r\\n$object-properties-width-tablet: 480px;\\r\\n$object-properties-width-tablet--detailed: 560px;\\r\\n\\r\\n// Notification Center\\r\\n$notification-center-width: 500px;\\r\\n\\r\\n// 7.0 z-index Setting\\r\\n\\r\\n$btn-scroll-to-top-zindex: 1020 !default;\\r\\n$content-zindex: 1020 !default;\\r\\n$float-submenu-zindex: 1020 !default;\\r\\n$footer-zindex: 1020 !default;\\r\\n$header-zindex: 1020 !default;\\r\\n$header-fixed-zindex: 1040 !default;\\r\\n$sidebar-zindex: 1010 !default;\\r\\n$top-menu-zindex: 1015 !default;\\r\\n$theme-panel-zindex: 1020 !default;\\r\\n$page-loader-zindex : 9999 !default;\\r\\n$page-title-zindex: 1020 !default;\\r\\n$pace-loader-zindex: 1030 !default;\\r\\n$panel-expand-zindex: 1080 !default;\\r\\n\\r\\n// 2.0 RTL Setting\\r\\n\\r\\n$enable-rtl: false !default;\\r\\n\\r\\n// 6.0 App Component Setting\\r\\n\\r\\n$boxed-layout-width: rem(1280px) !default;\\r\\n$content-padding-x: rem(30px) !default;\\r\\n$content-padding-y: rem(20px) !default;\\r\\n$content-padding-x-sm: rem(20px) !default;\\r\\n$content-padding-y-sm: rem(20px) !default;\\r\\n$header-height: rem(50px) !default;\\r\\n$header-height-sm: rem(50px) !default;\\r\\n$sidebar-width: rem(220px) !default;\\r\\n$sidebar-minified-width: rem(60px) !default;\\r\\n$sidebar-wide-width: rem(250px) !default;\\r\\n$top-menu-height: rem(40px) !default;\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","module.exports = \"\\r\\n\\r\\n\\r\\n\";","module.exports = \"\\r\\n\";","module.exports = \"\\r\\n\";","module.exports = \"\\r\\n\";","module.exports = \"\\r\\n\";","import { bindable, autoinject } from \"aurelia-framework\";\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\n\r\nimport {SummingService} from \"../../../services/summing/summing-service\";\r\nimport {ICategoryNodeModel} from \"./node-model-interfaces\";\r\n\r\n\r\n@autoinject\r\nexport class CategoryNode {\r\n\t@bindable public category: ICategoryNodeModel | undefined;\r\n\tprivate subscriptions: Subscription[] = [];\r\n\tprivate nodeSelectedEventName:string = \"category-node-selected\";\r\n\t\r\n\tconstructor(private eventAggregator: EventAggregator, private summingService: SummingService) {\r\n\t}\r\n\t\r\n\tselectNode(node: ICategoryNodeModel){\r\n\t\tnode.selectNode();\r\n\t\tthis.eventAggregator.publish(this.nodeSelectedEventName, node);\r\n\t}\r\n\r\n\tattached() {\r\n\t\t\r\n\t\tthis.subscriptions = [\r\n\t\t\tthis.eventAggregator.subscribe(this.nodeSelectedEventName, (selectedNode: ICategoryNodeModel) => {\r\n\t\t\t\tthis.nodeSelected(selectedNode);\r\n\t\t\t})\r\n\t\t];\r\n\t}\r\n\t\r\n\tnodeSelected(node:ICategoryNodeModel){\r\n\t\tif(this.category?.id !== node.id)\r\n\t\t\tthis.category?.deselectNode();\r\n\t}\r\n\r\n\tdetached() {\r\n\t\tthis.subscriptions.forEach(subscription => (\r\n\t\t\tsubscription.dispose()\r\n\t\t));\r\n\t}\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { bindable, autoinject } from \"aurelia-framework\";\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\n\r\nimport {SummingService} from \"../../../services/summing/summing-service\";\r\nimport {FamilyNodeSelectedEvent, ICategoryNodeModel, IFamilyNodeModel, INodeModel, ITypeNodeModel, TypeNodeSelectedEvent} from \"./node-model-interfaces\";\r\n\r\n@autoinject\r\nexport class FamilyNode {\r\n\t@bindable public family: IFamilyNodeModel | undefined;\r\n\t@bindable public parent: ICategoryNodeModel | undefined;\r\n\tprivate subscriptions: Subscription[] = [];\r\n\tprivate nodeSelectedEventName:string = \"family-node-selected\";\r\n\t\r\n\tconstructor(private eventAggregator: EventAggregator, private summingService: SummingService, private element:Element) {\r\n\t}\r\n\t\r\n\r\n\tattached() {\r\n\t\tthis.subscriptions = [\r\n\t\t\tthis.eventAggregator.subscribe(this.nodeSelectedEventName, (selectedNodeEvent:FamilyNodeSelectedEvent) => {\r\n\t\t\t\tthis.nodeSelected(selectedNodeEvent.node);\r\n\t\t\t}),\r\n\t\t\tthis.eventAggregator.subscribe(\"type-node-selected\", (selectedNodeEvent:TypeNodeSelectedEvent) => {\r\n\t\t\t\tthis.nodeSelected(selectedNodeEvent.node);\r\n\t\t\t})\r\n\t\t];\r\n\t}\r\n\r\n\tdetached() {\r\n\t\tthis.subscriptions.forEach(subscription => (\r\n\t\t\tsubscription.dispose()\r\n\t\t));\r\n\t}\r\n\t\r\n\tselectNode(node: IFamilyNodeModel){\r\n\t\tnode.selectNode();\r\n\t\tthis.eventAggregator.publish(this.nodeSelectedEventName, { node: node, parent: this.parent} );\r\n\t}\r\n\t\r\n\tnodeSelected(node:INodeModel){\r\n\t\tif (node.getType() !== this.family?.getType() || this.family.parentId != node.parentId)\r\n\t\t\tthis.family?.deselectNode();\r\n\t}\r\n}\r\n\r\n\r\n\r\n\r\n","import { bindable, autoinject } from \"aurelia-framework\";\r\nimport { EventAggregator, Subscription } from 'aurelia-event-aggregator';\r\nimport {SummingService} from \"../../../services/summing/summing-service\";\r\nimport {FamilyNodeSelectedEvent, IFamilyNodeModel, INodeModel, ITypeNodeModel, TypeNodeSelectedEvent} from \"./node-model-interfaces\";\r\n\r\n@autoinject\r\nexport class TypeNode {\r\n\t@bindable public type: ITypeNodeModel | undefined;\r\n\t@bindable public parent: IFamilyNodeModel | undefined;\r\n\tprivate subscriptions: Subscription[] = [];\r\n\tprivate nodeSelectedEventName:string = \"type-node-selected\";\r\n\t\r\n\tconstructor(private eventAggregator: EventAggregator, private summingService: SummingService, private element: Element) {\r\n\t}\r\n\t\r\n\tattached() {\r\n\t\tthis.subscriptions = [\r\n\t\t\tthis.eventAggregator.subscribe(this.nodeSelectedEventName, (selectedNodeEvent:TypeNodeSelectedEvent) => {\r\n\t\t\t\tthis.nodeSelected(selectedNodeEvent.node);\r\n\t\t\t}),\r\n\t\t\tthis.eventAggregator.subscribe(\"family-node-selected\", (selectedNodeEvent: FamilyNodeSelectedEvent) => {\r\n\t\t\t\tthis.nodeSelected(selectedNodeEvent.node);\r\n\t\t\t})\r\n\t\t];\r\n\t}\r\n\t\r\n\tdetached() {\r\n\t\tthis.subscriptions.forEach(subscription => (\r\n\t\t\tsubscription.dispose()\r\n\t\t));\r\n\t}\r\n\t\r\n\tselectNode(node: ITypeNodeModel){\r\n\t\tnode.selectNode();\r\n\t\tthis.eventAggregator.publish(this.nodeSelectedEventName, { node: node, parent: this.parent});\r\n\t}\r\n\r\n\tnodeSelected(node:INodeModel){\t\t\r\n\t\tif (this.type?.getType() !== node.getType() || this.type.parentId != node.parentId)\r\n\t\t\tthis.type?.deselectNode();\r\n\t}\t\r\n}\r\n","import {bindable, observable, autoinject} from \"aurelia-framework\";\r\nimport {SummingService} from \"../../../services/summing/summing-service\";\r\nimport { QuantityParameter } from \"app/models/quantity-parameter\";\r\nimport {INodeModel} from \"../nodes/node-model-interfaces\";\r\n\r\n@autoinject\r\nexport class QuantitySelector {\r\n\t@bindable @observable selectedNodes:INodeModel[] = [];\r\n\tisTypeLevel:boolean = false;\r\n\tquantityParameters:QuantityParameter[] = [];\r\n @observable selectedParameter:QuantityParameter | undefined = undefined; //null = null;\r\n\temptyParameterMessage: string = \"\";\t\r\n\tconstructor(private summingService: SummingService) {}\r\n\r\n\tparameterMatcher = (a: any, b: any) => Boolean(a) && Boolean(b) && a.id === b.id; // used in .html.\r\n\t\r\n\treset(): void {\r\n\t\tthis.selectedParameter = undefined; //null;\r\n\t\tthis.isTypeLevel = false;\r\n\t}\r\n\r\n\tasync selectedNodesChanged(newValue: any, oldValue: any) {\r\n\t\tconsole.log('selectedNodesChanged', newValue, oldValue);\r\n\r\n\t\tif (this.selectedNodes.length === 0) {\r\n\t\t console.log('zero selectedNodes -> reset.');\r\n\t\t\tthis.reset();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet node = this.selectedNodes[0];\r\n\t\tthis.isTypeLevel = node.getType() == \"type\";\r\n\t\t\r\n\t\tlet familyDefinesQty:boolean = false;\r\n\t\tif (this.isTypeLevel) {\r\n\t\t\tfamilyDefinesQty = (node.parent?.quantityParameterId !== undefined && node.parent.quantityParameterId !== \"00000000-0000-0000-0000-000000000000\" );\r\n\t\t\tthis.quantityParameters = await this.summingService.getTypeQuantityParameters(node.id);\r\n\t\t} else { // ie FAMILY-level.\r\n\t\t\tthis.quantityParameters = await this.summingService.getFamilyQuantityParameters(node.id); // hvad er overhovedet forskellen?\r\n\t\t}\r\n\t\tthis.emptyParameterMessage = ( familyDefinesQty ? \"Inherit from family\" : \"Quantity as Pieces\");\r\n\t\tthis.setInitialQuantityParameter(node.quantityParameterId);\r\n\t}\t\r\n\t\r\n\tsetInitialQuantityParameter(quantityParameterId:string):void {\r\n\t\tconsole.log('setInitialQuantityParameter, QPId:', quantityParameterId);\t\t\r\n\t\tthis.selectedParameter = undefined; //null;\r\n\t\tif (this.selectedNodes.length > 1) {\t\t\t\r\n\t\t\tlet uniqueQuantityIds = this.selectedNodes.map(x => x.quantityParameterId).filter(this.flt_uniqueQuantityIds);\t\t\t\r\n\t\t\tif (uniqueQuantityIds.length !== 1) { return; }\r\n\t\t} \r\n\t\tthis.selectedParameter = this.quantityParameters.find(x => x.id === quantityParameterId);\r\n\t}\r\n\r\n\tflt_uniqueQuantityIds(value:string, index:number, self:string[]):boolean {\r\n\t\tlet ixMatches = self.indexOf(value) === index;\r\n\t\tconsole.log(`uniqueQuantityIds, pos of value ${value} matches ix ${index}`);\r\n\t\treturn ixMatches;\r\n\t}\r\n\t\r\n\tasync save() {\r\n\t\tif (!this.selectedParameter) { return; }\r\n\t\tif (this.selectedNodes.length === 1 && this.selectedNodes[0].quantityParameterId == this.selectedParameter.id) {\r\n\t\t\tconsole.log('element already has qty param Id', this.selectedParameter.id);\r\n\t\t\treturn;\r\n\t\t}\t\t\t\t\t\r\n\t\tconsole.log('save - isTypeLevel?', this.isTypeLevel);\r\n\t\tif (this.isTypeLevel) {\r\n\t\t\tawait this.summingService.setQuantityParameterOnType(this.selectedNodes.map(x => x.id), this.selectedParameter.id);\r\n\t\t} else {\r\n\t\t\tawait this.summingService.setQuantityParameterOnFamily(this.selectedNodes.map(x => x.id), this.selectedParameter.id);\t\t\t\r\n\t\t}\t\t\r\n\t\tthis.selectedNodes.forEach( x => {\r\n\t\t\tif (this.selectedParameter) {\r\n\t\t\t\tx.quantityParameterId = this.selectedParameter.id;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import {ICategoryNodeModel, IFamilyNodeModel, INodeModel, ITypeNodeModel} from \"./node-model-interfaces\";\r\nimport {SummingService} from \"../../../services/summing/summing-service\";\r\n\r\nexport class CategoryNodeModel implements ICategoryNodeModel{\r\n \r\n\tpublic id: string;\r\n\tpublic name: string;\r\n\tpublic icon: string = \"\";\r\n\tpublic families: IFamilyNodeModel[];\r\n\tpublic expanded: boolean = false;\r\n\tpublic visible: boolean;\r\n\tpublic selected:boolean;\r\n\tpublic parentId: string = \"\";\r\n\tpublic parent: INodeModel | undefined;\r\n\tpublic quantityParameterId: string = \"\";\r\n\tpublic builtInCategory: number = -1;\r\n\tpublic hasFamilies: boolean;\r\n\t\r\n\t\r\n\tconstructor(id:string, name:string, children: IFamilyNodeModel[], private summingService: SummingService, hasFamilies:boolean) {\r\n\t\tthis.id = id;\r\n\t\tthis.name = name;\r\n\t\tthis.hasFamilies = hasFamilies;\r\n\t\tthis.visible = true;\r\n\t\tthis.selected = false;\r\n\t\tthis.families = children || [];\r\n\t}\r\n\r\n\thasChildren() {\r\n\t\treturn this.hasFamilies && this.families.length > 0;\r\n\t}\r\n\r\n\tselectNode(){\r\n\t\tthis.selected = true;\r\n\t}\r\n\r\n\tdeselectNode(){\r\n\t\tthis.selected = false;\r\n\t}\r\n\r\n\tasync toggleNode() {\r\n\t\tthis.expanded = !this.expanded;\r\n\t\tif (this.expanded === true) {\r\n\t\t\tif(this.families.length > 0)\r\n\t\t\t\treturn;\r\n\t\t\tlet families = await this.summingService.getFamiliesByCategory(this.id);\r\n\t\t\tthis.families = families.map(x => {\r\n\t\t\t\tlet familyNode = new FamilyNodeModel(x.id, this.id, this, x.name, x.builtInCategory, x.quantityParameterId, []);\r\n\t\t\t\tlet types = x.types.map((y: any) => new TypeNodeModel(y.id, x.id, familyNode, y.name, y.builtInCategory, y.quantityParameterId))\r\n\t\t\t\tfamilyNode.types = types;\r\n\t\t\t\treturn familyNode;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tgetType(): string {\r\n\t\treturn \"category\";\r\n\t}\r\n}\r\n\r\nexport class FamilyNodeModel implements IFamilyNodeModel{\r\n\tpublic id: string;\r\n\tpublic parentId:string;\r\n\tpublic parent: INodeModel | undefined;\r\n\tpublic name: string;\r\n\tpublic quantityParameterId: string;\r\n\tpublic icon: string = \"\";\r\n\tpublic types: ITypeNodeModel[];\r\n\tpublic expanded: boolean = false;\r\n\tpublic visible: boolean;\r\n\tpublic selected:boolean;\r\n\tpublic builtInCategory:number;\r\n\r\n\tconstructor(id:string, parentId:string, parent:INodeModel, name:string, builtInCategory:number, quantityParameterId:string, children: ITypeNodeModel[]) {\r\n\t\tthis.id = id;\r\n\t\tthis.parentId = parentId;\r\n\t\tthis.name = name;\r\n\t\tthis.builtInCategory = builtInCategory;\r\n\t\tthis.quantityParameterId = quantityParameterId;\r\n\t\tthis.visible = true;\r\n\t\tthis.selected = false;\r\n\t\tthis.types = children || [];\r\n\r\n\t\tif (this.hasChildren()) {\r\n\t\t\tthis.expanded = true;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\thasChildren() {\r\n\t\treturn this.types.length > 0;\r\n\t}\r\n\r\n\tselectNode(){\r\n\t\tthis.selected = true;\r\n\t}\r\n\r\n\tdeselectNode(){\r\n\t\tthis.selected = false;\r\n\t}\r\n\r\n\ttoggleNode() {\r\n\t\tthis.expanded = !this.expanded;\r\n\t}\r\n\r\n\tgetType():string{\r\n\t\treturn \"family\";\r\n\t}\r\n}\r\n\r\nexport class TypeNodeModel implements ITypeNodeModel{\r\n\tpublic id: string;\r\n\tpublic parentId:string;\r\n\tpublic parent: INodeModel;\r\n\tpublic name: string;\r\n\tpublic quantityParameterId: string;\r\n\tpublic builtInCategory:number;\r\n\tpublic icon: string = \"\";\r\n\tpublic visible: boolean;\r\n\tpublic selected:boolean;\r\n\r\n\tconstructor(id:string, parentId:string, parent:INodeModel, name:string, builtInCategory:number, quantityParameterId:string) {\r\n\t\tthis.id = id;\r\n\t\tthis.parentId = parentId;\r\n\t\tthis.parent = parent;\r\n\t\tthis.name = name;\r\n\t\tthis.quantityParameterId = quantityParameterId;\r\n\t\tthis.builtInCategory = builtInCategory;\r\n\t\tthis.visible = true;\r\n\t\tthis.selected = false;\r\n\r\n\t}\r\n\r\n\tselectNode(){\r\n\t\tthis.selected = true;\r\n\t}\r\n\r\n\tdeselectNode(){\r\n\t\tthis.selected = false;\r\n\t}\r\n\r\n\tgetType():string{\r\n\t\treturn \"type\";\r\n\t}\r\n}\r\n","import { ObjectServiceBuilder } from 'app/services/object-services/object-service-builder';\r\nimport { AppContextService } from 'app/services/app-context-service';\r\nimport { Router } from 'aurelia-router';\r\nimport { Subscription, EventAggregator } from 'aurelia-event-aggregator';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport { ErrorService } from 'app/services/error-service';\r\nimport { ParameterDefinitionService } from 'app/services/object-services/parameter-definition-service';\r\nimport {SummingService} from \"app/services/summing/summing-service\";\r\nimport {CategoryNodeModel, FamilyNodeModel} from \"./nodes/node-models\";\r\nimport {FamilyNodeSelectedEvent, ICategoryNodeModel, IFamilyNodeModel, INodeModel, TypeNodeSelectedEvent} from \"./nodes/node-model-interfaces\";\r\nimport { ProjectDto } from 'app/models/project-dto';\r\n\r\n@autoinject\r\nexport class Summing {\r\n\tpublic categories: ICategoryNodeModel[] = [];\r\n\tpublic searchTerm: string = \"\";\r\n\tpublic viewContext: string;\r\n\tprivate subscriptions: Subscription[] = [];\r\n\tprivate paramDefService: ParameterDefinitionService | undefined;\r\n\tpublic selectedNode: INodeModel | null = null;\r\n\tpublic selectedItems: INodeModel[] = [];\r\n\tprivate pressedKey:string = \"\";\r\n\tcurProject:ProjectDto | undefined ;\r\n\r\n\tconstructor(private router: Router, \r\n\t\t\t\tprivate events: EventAggregator, \r\n\t\t\t\tprivate appContext: AppContextService, \r\n\t\t\t\tprivate errorService: ErrorService, \r\n\t\t\t\tprivate serviceBuilder:ObjectServiceBuilder, \r\n\t\t\t\tprivate summingService: SummingService) {\r\n\t\tthis.viewContext = \"TopBar\";\r\n\t\t\r\n\t}\r\n\tasync activate(params: any, routeConfig: any, navigationInstruction: any) {\r\n\t\tif (params.projectId) {\r\n\t\t\tthis.appContext.setProject(params.projectId);//in-activate.\r\n\t\t\tthis.curProject = this.appContext.getSelectedProject(); \r\n\t\t}\r\n\t\tthis.paramDefService = this.serviceBuilder\r\n\t\t\t.ForAjourCollab_OSB(this.appContext.projectId)\r\n\t\t\t.BuildParameterDefinitionService();\r\n\r\n\t\tif (this.appContext.projectId) {\r\n\t\t\t//this.router.navigate('project/' + this.appContext.projectId + '/summing/');\r\n\t\t\tawait this.getCategories();\t\t\t\r\n\t\t} \r\n\t\tconst searchHandler = (data: any) => this.handleSearchEvent(data);\r\n\t\tthis.subscriptions = [\r\n\t\t\tthis.events.subscribe(this.viewContext + \":SearchTermChanged\", searchHandler),\r\n\t\t\tthis.events.subscribe(\"family-node-selected\", (nodeSelectedEvent:FamilyNodeSelectedEvent) => this.nodeSelected(nodeSelectedEvent.node, nodeSelectedEvent.parent)),\r\n\t\t\tthis.events.subscribe(\"type-node-selected\", (nodeSelectedEvent:TypeNodeSelectedEvent) => this.nodeSelected(nodeSelectedEvent.node, nodeSelectedEvent.parent))\r\n\t\t];\r\n\t}\t\r\n\tattached(){\r\n\t\twindow.addEventListener('keydown', e => this.pressedKey = e.key);\r\n\t\twindow.addEventListener('keyup', () => this.pressedKey = \"\");\r\n\t}\r\n\tnodeSelected(node:INodeModel, parent:INodeModel) {\r\n\t\tthis.selectedNode = node;\r\n\t\tif (this.selectedItems.length === 0) {\r\n\t\t\tthis.selectedItems.push(node);\r\n\t\t\tthis.selectedItems = [...this.selectedItems]; //Hack to trigger array changed in quantity-selector\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet previouslySelectedItem = this.selectedItems[this.selectedItems.length - 1];\r\n\t\tif (previouslySelectedItem.parentId !== node.parentId){\r\n\t\t\tthis.deselectAllSelectedItems();\r\n\t\t\tthis.clearSelectedItems();\r\n\t\t\tthis.selectedItems.push(node);\r\n\t\t\treturn;\r\n\t\t}\t\t\t\r\n\t\tif (this.pressedKey === 'Control') {\r\n\t\t\tif (!Boolean(this.selectedItems.includes(node))) {\r\n\t\t\t\tthis.selectedItems.push(node);\r\n\t\t\t} else {\r\n\t\t\t\tlet removedItems = this.selectedItems.splice(this.selectedItems.indexOf(node), 1);\r\n\t\t\t\tremovedItems.forEach(x => {\r\n\t\t\t\t\tif (x.selected) { x.deselectNode(); }\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tthis.selectedItems = [...this.selectedItems]; //Hack to trigger array changed in quantity-selector \r\n\t\t} else if (this.pressedKey === 'Shift') {\t\t\t\r\n\t\t\tlet arr:INodeModel[] = [];\r\n\t\t\tif (parent.getType() === \"family\") {\r\n\t\t\t\tarr = (parent).types;\r\n\t\t\t}\r\n\t\t\tif (parent.getType() === \"category\") {\r\n\t\t\t\tarr = (parent).families;\r\n\t\t\t}\r\n\t\t\tlet previouslySelectedItemIndex = arr.indexOf(previouslySelectedItem);\r\n\t\t\tlet currentNodeIndex = arr.indexOf(node);\r\n\t\t\tarr.forEach((x, index) => {\r\n\t\t\t\tif ((index > previouslySelectedItemIndex && index < currentNodeIndex) || (index < previouslySelectedItemIndex && index > currentNodeIndex)) {\r\n\t\t\t\t\tif (!Boolean(x.selected)) { x.selectNode(); }\r\n\t\t\t\t\tthis.selectedItems.push(x);\r\n\t\t\t\t}\r\n\t\t\t\tif (x === node) { this.selectedItems.push(node); }\r\n\t\t\t});\t\t\t\r\n\t\t\tthis.selectedItems = [...this.selectedItems]; //Hack to trigger array changed in quantity-selector \t\t\t\r\n\t\t} else {\r\n\t\t\tthis.deselectAllSelectedItems();\r\n\t\t\tthis.clearSelectedItems();\r\n\t\t\tnode.selectNode();\r\n\t\t\tthis.selectedItems.push(node);\r\n\t\t}\t\t\t\r\n\t}\t\r\n\tprivate clearSelectedItems():void{ this.selectedItems = []; }\r\n\tprivate deselectAllSelectedItems(){\r\n\t\tthis.selectedItems.forEach(x => {\r\n\t\t\tif (x.selected) {\r\n\t\t\t\tx.deselectNode();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\tpublic closeProperties() { this.selectedNode = null; }\r\n\tdetached() {\r\n\t\tthis.subscriptions.forEach(subscription => ( subscription.dispose() ));\r\n\t\twindow.removeEventListener('keydown', e => this.pressedKey = e.key);\r\n\t\twindow.removeEventListener('keyup', () => this.pressedKey = \"\");\r\n\t}\r\n\tprivate handleSearchEvent(data: string) { this.searchTerm = data; }\t\r\n\tprivate async getCategories(): Promise {\r\n\t\tlet categories = await this.summingService.getCategoriesOnProject();\r\n\t\t//removes the manual entry category from the frontend, but is still present in the backend for use elsewhere. \r\n\t\tcategories.splice(categories.findIndex(x => x.name === \"Manual Entry\"), 1);\r\n\t\tthis.categories = SummingModel.BuildFromServer(categories, this.summingService);\r\n\t}\r\n}\r\n\r\nexport class SummingModel {\r\n\t//constructor() {}\r\n\tpublic static BuildFromServer(categories:any, summingService: SummingService):CategoryNodeModel[]{\r\n\t\tlet nodeModels:CategoryNodeModel[] = [];\r\n\t\tfor(let i = 0; i < categories.length; i++){\r\n\t\t\tnodeModels.push(this.BuildNodeModels(categories[i], summingService))\r\n\t\t}\r\n\t\treturn nodeModels;\r\n\t}\r\n\tpublic static BuildNodeModels(serverNode:any, summingService: SummingService):CategoryNodeModel{\r\n\t\tlet nodeModels:FamilyNodeModel[] = [];\r\n\t\treturn new CategoryNodeModel(serverNode.id, serverNode.name, nodeModels, summingService, serverNode.hasFamilies);\r\n\t}\r\n}\r\n\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","CategoryNode","constructor","eventAggregator","summingService","subscriptions","nodeSelectedEventName","selectNode","node","this","publish","attached","subscribe","selectedNode","nodeSelected","category","deselectNode","detached","forEach","subscription","dispose","bindable","autoinject","FamilyNode","element","selectedNodeEvent","parent","getType","family","parentId","Element","TypeNode","type","QuantitySelector","selectedNodes","isTypeLevel","quantityParameters","selectedParameter","undefined","emptyParameterMessage","parameterMatcher","a","b","Boolean","reset","async","newValue","oldValue","console","log","length","familyDefinesQty","quantityParameterId","getTypeQuantityParameters","getFamilyQuantityParameters","setInitialQuantityParameter","map","x","filter","flt_uniqueQuantityIds","find","value","index","self","ixMatches","indexOf","setQuantityParameterOnType","setQuantityParameterOnFamily","observable","CategoryNodeModel","name","children","hasFamilies","icon","expanded","builtInCategory","visible","selected","families","hasChildren","getFamiliesByCategory","familyNode","FamilyNodeModel","types","y","TypeNodeModel","toggleNode","Summing","router","events","appContext","errorService","serviceBuilder","categories","searchTerm","selectedItems","pressedKey","viewContext","params","routeConfig","navigationInstruction","projectId","setProject","curProject","getSelectedProject","paramDefService","ForAjourCollab_OSB","BuildParameterDefinitionService","getCategories","data","handleSearchEvent","nodeSelectedEvent","window","addEventListener","e","key","previouslySelectedItem","deselectAllSelectedItems","clearSelectedItems","includes","splice","arr","previouslySelectedItemIndex","currentNodeIndex","closeProperties","removeEventListener","getCategoriesOnProject","findIndex","SummingModel","BuildFromServer","static","nodeModels","i","BuildNodeModels","serverNode"],"sourceRoot":""}