{"version":3,"file":"app-65286d99.4ceefaf6b27ea7f1.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,mCAAA,CAGD,0BACC,mCAAA,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@import 'functions.scss';\\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;\\r\\n\"],\"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,0BAAA,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@import 'functions.scss';\\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;\\r\\n\"],\"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","EventAggregator","FamilyNode","element","selectedNodeEvent","parent","getType","family","parentId","Element","TypeNode","type","QuantitySelector","selectedNodes","isTypeLevel","quantityParameters","selectedParameter","undefined","emptyParameterMessage","parameterMatcher","a","b","Boolean","reset","selectedNodesChanged","newValue","oldValue","console","log","length","familyDefinesQty","quantityParameterId","getTypeQuantityParameters","getFamilyQuantityParameters","setInitialQuantityParameter","map","x","filter","flt_uniqueQuantityIds","find","value","index","self","ixMatches","indexOf","save","setQuantityParameterOnType","setQuantityParameterOnFamily","observable","CategoryNodeModel","name","children","hasFamilies","icon","expanded","builtInCategory","visible","selected","families","hasChildren","toggleNode","getFamiliesByCategory","familyNode","FamilyNodeModel","types","y","TypeNodeModel","Summing","router","events","appContext","errorService","serviceBuilder","categories","searchTerm","selectedItems","pressedKey","viewContext","activate","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","nodeModels","i","BuildNodeModels","serverNode"],"sourceRoot":""}