@colijnit/configurator 261.20.7 → 261.20.9

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.
@@ -2,9 +2,9 @@ import * as i0 from '@angular/core';
2
2
  import { Injectable, EventEmitter, HostBinding, ViewEncapsulation, Component, Input, Output, HostListener, ViewChild, Directive, ElementRef, ViewChildren, TemplateRef, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
3
3
  import * as i5 from '@angular/common';
4
4
  import { CommonModule, AsyncPipe } from '@angular/common';
5
+ import { BehaviorSubject, Subject, combineLatest, debounceTime } from 'rxjs';
5
6
  import * as THREE from 'three';
6
7
  import { Color, WebGLRenderer, Box3, Vector3, Scene, PerspectiveCamera, MathUtils, AmbientLight, DirectionalLight, Group, Euler, Object3D, EventDispatcher, MeshBasicMaterial, Mesh, PlaneGeometry, DoubleSide, MeshStandardMaterial, CylinderGeometry, RingGeometry, Matrix4, Raycaster, BufferGeometry, Line, DataTexture, RGFormat, UnsignedByteType, LinearFilter, Shape, Vector2, SphereGeometry, SRGBColorSpace, PCFSoftShadowMap, ShadowMaterial, LightProbe, Texture as Texture$1, MeshPhongMaterial, NoToneMapping, TextureLoader, RGBAFormat, Quaternion, PointLight, BoxGeometry, BackSide, FrontSide, ShapeGeometry } from 'three';
7
- import { BehaviorSubject, Subject, combineLatest } from 'rxjs';
8
8
  import { HdecoPlacement } from '@colijnit/configuratorapi/build/enum/hdeco-placement.enum';
9
9
  import * as i6 from '@colijnit/utilities';
10
10
  import { ObjectUtils, MaterialUtils, DeviceUtils as DeviceUtils$1, DeviceTier as DeviceTier$1, TranslationModule, UtilitiesPipesModule } from '@colijnit/utilities';
@@ -56,12 +56,6 @@ import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter.js';
56
56
  import { MatButtonModule } from '@angular/material/button';
57
57
  import { MatIconModule } from '@angular/material/icon';
58
58
 
59
- var ConfigurationTemplate;
60
- (function (ConfigurationTemplate) {
61
- ConfigurationTemplate["default"] = "default";
62
- ConfigurationTemplate["showFullConfiguration"] = "showFullConfiguration";
63
- })(ConfigurationTemplate || (ConfigurationTemplate = {}));
64
-
65
59
  class ArParameters {
66
60
  depthOcclusion = false;
67
61
  depthHitTest = false;
@@ -144,6 +138,7 @@ class SettingOptions {
144
138
  groupedShowAllBtn = false;
145
139
  showSavePresetButton = false;
146
140
  showLoadPresetButton = false;
141
+ showSceneBuildLoader = false;
147
142
  }
148
143
 
149
144
  class RenderParameters {
@@ -418,14 +413,13 @@ class ConfiguratorEventService {
418
413
  buildStarted = new BehaviorSubject(false);
419
414
  buildFinished = new BehaviorSubject(undefined);
420
415
  addedToScene = new BehaviorSubject(undefined);
421
- configurationTemplateChange = new BehaviorSubject(undefined);
422
416
  articleNotFound = new BehaviorSubject(undefined);
423
417
  selectionWithAnswersChanged = new BehaviorSubject(undefined);
424
418
  glbCreated = new Subject();
425
419
  showOutline = new Subject();
426
420
  showErrorOutline = new Subject();
427
421
  hideOutline = new Subject();
428
- articleReceived = new Subject();
422
+ articleReceived = new BehaviorSubject(undefined);
429
423
  selectionsReceived = new Subject();
430
424
  answersReceived = new Subject();
431
425
  extraAnswerDataLoaded = new Subject();
@@ -1036,11 +1030,11 @@ class ConfiguratorConnectorService {
1036
1030
  selections = this._boFactory.makeBOArrayFromRawBackendDataArray(Selection, response.resultObjects);
1037
1031
  }
1038
1032
  if (this.article.showFullConfiguration) {
1039
- this._appEventService.configurationTemplateChange.next(ConfigurationTemplate.showFullConfiguration);
1033
+ // this._appEventService.configurationTemplateChange.next(ConfigurationTemplate.showFullConfiguration);
1040
1034
  await this._createSelectorFullConfiguration(selections);
1041
1035
  }
1042
1036
  else {
1043
- this._appEventService.configurationTemplateChange.next(ConfigurationTemplate.default);
1037
+ // this._appEventService.configurationTemplateChange.next(ConfigurationTemplate.default);
1044
1038
  this._prepareSelections(selections);
1045
1039
  }
1046
1040
  }
@@ -7079,7 +7073,8 @@ class ConfiguringService {
7079
7073
  this._subs.push(combineLatest([
7080
7074
  this._appEventService.skuSet,
7081
7075
  this._appEventService.instanceIdSet
7082
- ]).subscribe(async ([sku, instanceId]) => {
7076
+ ]).pipe(debounceTime(0) // wait for events to finish, because skuSet and instanceIdSet events are emitted simultaneously
7077
+ ).subscribe(([sku, instanceId]) => {
7083
7078
  this.sku = sku;
7084
7079
  if (this.sku) {
7085
7080
  this.instanceId = undefined;
@@ -8597,6 +8592,7 @@ class AnswersSlideoutComponent {
8597
8592
  // TODO change to input
8598
8593
  valutaSymbol = '€';
8599
8594
  hasInfoOpen = false;
8595
+ showTagFilter = false;
8600
8596
  _openCount = 0;
8601
8597
  _answers;
8602
8598
  _subs = [];
@@ -8619,6 +8615,7 @@ class AnswersSlideoutComponent {
8619
8615
  this.valutaSymbol = this.settingsService.settings.currencySymbol;
8620
8616
  }
8621
8617
  this.bottomAlign = this.settingsService.settings.options.bottomAnswers;
8618
+ this.showTagFilter = this.settingsService.settings.options.showTagFilter;
8622
8619
  }
8623
8620
  }));
8624
8621
  }
@@ -8825,7 +8822,7 @@ class AnswersSlideoutComponent {
8825
8822
  ></co-color-filter>
8826
8823
  }
8827
8824
  </div>
8828
- @if (settingsService.settings.options.showTagFilter) {
8825
+ @if (showTagFilter) {
8829
8826
  <div class="filter">
8830
8827
  @for (tag of tagArray; track tag) {
8831
8828
  <co-tag-filter
@@ -8837,7 +8834,7 @@ class AnswersSlideoutComponent {
8837
8834
  }
8838
8835
  }
8839
8836
  <div class="cards" visibilityObserverMaster>
8840
- @for (answer of filteredAnswers; track answer) {
8837
+ @for (answer of filteredAnswers; track answer.id) {
8841
8838
  @if (answer.isGroupHeader) {
8842
8839
  <div class="group-header-wrapper">
8843
8840
  <div class="group-header-title">
@@ -8973,7 +8970,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
8973
8970
  ></co-color-filter>
8974
8971
  }
8975
8972
  </div>
8976
- @if (settingsService.settings.options.showTagFilter) {
8973
+ @if (showTagFilter) {
8977
8974
  <div class="filter">
8978
8975
  @for (tag of tagArray; track tag) {
8979
8976
  <co-tag-filter
@@ -8985,7 +8982,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
8985
8982
  }
8986
8983
  }
8987
8984
  <div class="cards" visibilityObserverMaster>
8988
- @for (answer of filteredAnswers; track answer) {
8985
+ @for (answer of filteredAnswers; track answer.id) {
8989
8986
  @if (answer.isGroupHeader) {
8990
8987
  <div class="group-header-wrapper">
8991
8988
  <div class="group-header-title">
@@ -9974,7 +9971,6 @@ class SelectionsSummaryComponent {
9974
9971
  canClose = true;
9975
9972
  answersTemplate;
9976
9973
  answerToShowFromSelectionText;
9977
- showSaveAndLoadConfiguration;
9978
9974
  customDimensions = false;
9979
9975
  disableMouse = false;
9980
9976
  handledocumentMouseUp(event) {
@@ -10024,7 +10020,7 @@ class SelectionsSummaryComponent {
10024
10020
  this.selectionToCustomize = sel;
10025
10021
  }
10026
10022
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: SelectionsSummaryComponent, deps: [{ token: ConfiguratorConnectorService }, { token: IconCacheService }], target: i0.ɵɵFactoryTarget.Component });
10027
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: SelectionsSummaryComponent, isStandalone: false, selector: "co-selections-summary", inputs: { selections: "selections", showLabel: "showLabel", canClose: "canClose", answersTemplate: "answersTemplate", answerToShowFromSelectionText: "answerToShowFromSelectionText", showSaveAndLoadConfiguration: "showSaveAndLoadConfiguration", customDimensions: "customDimensions" }, outputs: { closeClick: "closeClick", cancelAnswers: "cancelAnswers", selectSelection: "selectSelection", repeatSelection: "repeatSelection", deleteSelection: "deleteSelection" }, host: { listeners: { "document:mouseup": "handledocumentMouseUp($event)", "document:mousemove": "handleDocumentMouseDown($event)" }, properties: { "class.co-selections-summary": "this.showClass", "class.custom-dimensions": "this.customDimensions", "class.disable-mouse": "this.disableMouse" } }, ngImport: i0, template: `
10023
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: SelectionsSummaryComponent, isStandalone: false, selector: "co-selections-summary", inputs: { selections: "selections", showLabel: "showLabel", canClose: "canClose", answersTemplate: "answersTemplate", answerToShowFromSelectionText: "answerToShowFromSelectionText", customDimensions: "customDimensions" }, outputs: { closeClick: "closeClick", cancelAnswers: "cancelAnswers", selectSelection: "selectSelection", repeatSelection: "repeatSelection", deleteSelection: "deleteSelection" }, host: { listeners: { "document:mouseup": "handledocumentMouseUp($event)", "document:mousemove": "handleDocumentMouseDown($event)" }, properties: { "class.co-selections-summary": "this.showClass", "class.custom-dimensions": "this.customDimensions", "class.disable-mouse": "this.disableMouse" } }, ngImport: i0, template: `
10028
10024
  @if (showLabel || canClose) {
10029
10025
  <header class="drawer__header">
10030
10026
  @if (showLabel) {
@@ -10039,7 +10035,7 @@ class SelectionsSummaryComponent {
10039
10035
  }
10040
10036
  @if (selections && selections.length > 0) {
10041
10037
  <div class="selections-content small-scrollbar">
10042
- @for (sel of selections; track sel; let index = $index) {
10038
+ @for (sel of selections; track sel.id; let index = $index) {
10043
10039
  <co-selections-summary-line
10044
10040
  [selection]="sel"
10045
10041
  [answersTemplate]="answersTemplate ? answersTemplate : undefined"
@@ -10083,7 +10079,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
10083
10079
  }
10084
10080
  @if (selections && selections.length > 0) {
10085
10081
  <div class="selections-content small-scrollbar">
10086
- @for (sel of selections; track sel; let index = $index) {
10082
+ @for (sel of selections; track sel.id; let index = $index) {
10087
10083
  <co-selections-summary-line
10088
10084
  [selection]="sel"
10089
10085
  [answersTemplate]="answersTemplate ? answersTemplate : undefined"
@@ -10123,8 +10119,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
10123
10119
  type: Input
10124
10120
  }], answerToShowFromSelectionText: [{
10125
10121
  type: Input
10126
- }], showSaveAndLoadConfiguration: [{
10127
- type: Input
10128
10122
  }], customDimensions: [{
10129
10123
  type: HostBinding,
10130
10124
  args: ['class.custom-dimensions']
@@ -10187,7 +10181,6 @@ class LiteSelectorComponent {
10187
10181
  canClose = true;
10188
10182
  animateSlideout = true;
10189
10183
  customDimensions = false;
10190
- showSaveAndLoadConfiguration;
10191
10184
  showChange = new EventEmitter();
10192
10185
  answerChosen = new EventEmitter();
10193
10186
  answerToShowFromSelectionText;
@@ -10240,7 +10233,7 @@ class LiteSelectorComponent {
10240
10233
  // this.iOne.getMoodImageForAnswerSelection(answerSelected.answer, false);
10241
10234
  }
10242
10235
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: LiteSelectorComponent, deps: [{ token: SwitchBuildFurnitureService }, { token: ConfiguratorConnectorService }, { token: ConfiguringService }], target: i0.ɵɵFactoryTarget.Component });
10243
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: LiteSelectorComponent, isStandalone: false, selector: "co-lite-selector", inputs: { show: "show", showLabel: "showLabel", canClose: "canClose", animateSlideout: "animateSlideout", customDimensions: "customDimensions", showSaveAndLoadConfiguration: "showSaveAndLoadConfiguration" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.co-lite-selector": "this.showClass", "class.custom-dimensions": "this.customDimensions" } }, viewQueries: [{ propertyName: "templateAnswers", first: true, predicate: ["templateAnswers"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
10236
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: LiteSelectorComponent, isStandalone: false, selector: "co-lite-selector", inputs: { show: "show", showLabel: "showLabel", canClose: "canClose", animateSlideout: "animateSlideout", customDimensions: "customDimensions" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.co-lite-selector": "this.showClass", "class.custom-dimensions": "this.customDimensions" } }, viewQueries: [{ propertyName: "templateAnswers", first: true, predicate: ["templateAnswers"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
10244
10237
  <ng-container>
10245
10238
  @if (configuratorConnectorService.selectionsToDisplay.length > 0) {
10246
10239
  <co-selections-summary
@@ -10251,7 +10244,6 @@ class LiteSelectorComponent {
10251
10244
  [answersTemplate]="inlineAnswers ? templateAnswers : undefined"
10252
10245
  [answerToShowFromSelectionText]="answerToShowFromSelectionText"
10253
10246
  [selections]="configuratorConnectorService.selectionsToDisplay"
10254
- [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
10255
10247
  (selectSelection)="onSelectionsSummarySelectSelection($event)"
10256
10248
  (repeatSelection)="onSelectionsSummarySelectSelection($event, false, true)"
10257
10249
  (deleteSelection)="onSelectionsSummaryDeleteSelection($event)"
@@ -10276,7 +10268,7 @@ class LiteSelectorComponent {
10276
10268
  ></co-answers-slideout>
10277
10269
  }
10278
10270
  </ng-template>
10279
- `, isInline: true, dependencies: [{ kind: "component", type: AnswersSlideoutComponent, selector: "co-answers-slideout", inputs: ["question", "showTitle", "showFilter", "answers", "useSlideout", "customDimensions"], outputs: ["answerChosen"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SelectionsSummaryComponent, selector: "co-selections-summary", inputs: ["selections", "showLabel", "canClose", "answersTemplate", "answerToShowFromSelectionText", "showSaveAndLoadConfiguration", "customDimensions"], outputs: ["closeClick", "cancelAnswers", "selectSelection", "repeatSelection", "deleteSelection"] }], animations: [
10271
+ `, isInline: true, dependencies: [{ kind: "component", type: AnswersSlideoutComponent, selector: "co-answers-slideout", inputs: ["question", "showTitle", "showFilter", "answers", "useSlideout", "customDimensions"], outputs: ["answerChosen"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SelectionsSummaryComponent, selector: "co-selections-summary", inputs: ["selections", "showLabel", "canClose", "answersTemplate", "answerToShowFromSelectionText", "customDimensions"], outputs: ["closeClick", "cancelAnswers", "selectSelection", "repeatSelection", "deleteSelection"] }], animations: [
10280
10272
  trigger('showSelections', [
10281
10273
  state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
10282
10274
  state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
@@ -10299,7 +10291,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
10299
10291
  [answersTemplate]="inlineAnswers ? templateAnswers : undefined"
10300
10292
  [answerToShowFromSelectionText]="answerToShowFromSelectionText"
10301
10293
  [selections]="configuratorConnectorService.selectionsToDisplay"
10302
- [showSaveAndLoadConfiguration]="showSaveAndLoadConfiguration"
10303
10294
  (selectSelection)="onSelectionsSummarySelectSelection($event)"
10304
10295
  (repeatSelection)="onSelectionsSummarySelectSelection($event, false, true)"
10305
10296
  (deleteSelection)="onSelectionsSummaryDeleteSelection($event)"
@@ -10354,8 +10345,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
10354
10345
  args: ['class.custom-dimensions']
10355
10346
  }, {
10356
10347
  type: Input
10357
- }], showSaveAndLoadConfiguration: [{
10358
- type: Input
10359
10348
  }], showChange: [{
10360
10349
  type: Output
10361
10350
  }], answerChosen: [{
@@ -10683,7 +10672,7 @@ class ProductConfiguratorSelectorOptionDropDownComponent {
10683
10672
  <div class="configurator-option-dropdown-container">
10684
10673
  <div class="custom-select-wrapper">
10685
10674
  <select class="option-dropdown-select" (change)="onChange($event)">
10686
- @for (option of options; track option; let i = $index) {
10675
+ @for (option of options; track option.id; let i = $index) {
10687
10676
  <option [value]="option" [selected]="option.selected === 'F'">
10688
10677
  @if (option.nodeText) {
10689
10678
  <p [textContent]="option.nodeText | localize:true | async"></p>
@@ -10709,7 +10698,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
10709
10698
  <div class="configurator-option-dropdown-container">
10710
10699
  <div class="custom-select-wrapper">
10711
10700
  <select class="option-dropdown-select" (change)="onChange($event)">
10712
- @for (option of options; track option; let i = $index) {
10701
+ @for (option of options; track option.id; let i = $index) {
10713
10702
  <option [value]="option" [selected]="option.selected === 'F'">
10714
10703
  @if (option.nodeText) {
10715
10704
  <p [textContent]="option.nodeText | localize:true | async"></p>
@@ -10865,7 +10854,7 @@ class ProductConfiguratorSelectorOptionComponent {
10865
10854
  @if (this.selection.displayOptionControl !== configurationDisplayOption.DropDown
10866
10855
  && !this.largeTileOptions.includes(this.selection.displayOptionControl)
10867
10856
  && !this.smallTileOptions.includes(this.selection.displayOptionControl)) {
10868
- @for (child of listOfChoices; track child) {
10857
+ @for (child of listOfChoices; track child.id) {
10869
10858
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
10870
10859
  @if (this.selection.displayOptionControl === configurationDisplayOption.Button) {
10871
10860
  <co-product-configurator-selector-option-button
@@ -10914,7 +10903,7 @@ class ProductConfiguratorSelectorOptionComponent {
10914
10903
  @if (
10915
10904
  this.largeTileOptions.includes(this.selection.displayOptionControl)
10916
10905
  || this.smallTileOptions.includes(this.selection.displayOptionControl)) {
10917
- @for (child of visibleAnswers; track child) {
10906
+ @for (child of visibleAnswers; track child.id) {
10918
10907
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
10919
10908
  <co-product-configurator-selector-option-tile
10920
10909
  [option]="child"
@@ -10970,7 +10959,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
10970
10959
  @if (this.selection.displayOptionControl !== configurationDisplayOption.DropDown
10971
10960
  && !this.largeTileOptions.includes(this.selection.displayOptionControl)
10972
10961
  && !this.smallTileOptions.includes(this.selection.displayOptionControl)) {
10973
- @for (child of listOfChoices; track child) {
10962
+ @for (child of listOfChoices; track child.id) {
10974
10963
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
10975
10964
  @if (this.selection.displayOptionControl === configurationDisplayOption.Button) {
10976
10965
  <co-product-configurator-selector-option-button
@@ -11019,7 +11008,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
11019
11008
  @if (
11020
11009
  this.largeTileOptions.includes(this.selection.displayOptionControl)
11021
11010
  || this.smallTileOptions.includes(this.selection.displayOptionControl)) {
11022
- @for (child of visibleAnswers; track child) {
11011
+ @for (child of visibleAnswers; track child.id) {
11023
11012
  <div class="selector-option-wrapper" [class.active]="child.selected ==='F'">
11024
11013
  <co-product-configurator-selector-option-tile
11025
11014
  [option]="child"
@@ -11554,7 +11543,6 @@ class ProductConfiguratorComponent {
11554
11543
  showLabel = true;
11555
11544
  canClose = true;
11556
11545
  customDimensions = false;
11557
- showSaveAndLoadConfiguration;
11558
11546
  showChange = new EventEmitter();
11559
11547
  answerChosen = new EventEmitter();
11560
11548
  valutaSymbol = '€'; // TODO this should be a setting
@@ -11582,7 +11570,11 @@ class ProductConfiguratorComponent {
11582
11570
  if (selection) {
11583
11571
  this.onSelectionsSummarySelectSelection(selection);
11584
11572
  }
11585
- }), this._eventService.articleReceived.subscribe((article) => this._handleArticleReceived(article)), this._eventService.selectionWithAnswersChanged.subscribe((selections) => this._handleSelectionWithAnswersChanged(selections)));
11573
+ }), this._eventService.articleReceived.subscribe((article) => {
11574
+ if (article) {
11575
+ this._handleArticleReceived(article);
11576
+ }
11577
+ }), this._eventService.selectionWithAnswersChanged.subscribe((selections) => this._handleSelectionWithAnswersChanged(selections)));
11586
11578
  }
11587
11579
  ngOnDestroy() {
11588
11580
  this._subs.forEach(s => s.unsubscribe());
@@ -11616,7 +11608,7 @@ class ProductConfiguratorComponent {
11616
11608
  }
11617
11609
  }
11618
11610
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ProductConfiguratorComponent, deps: [{ token: ConfiguratorConnectorService }, { token: SwitchBuildFurnitureService }, { token: ConfiguratorSettingsService }, { token: ProductConfiguratorService }, { token: IconCacheService }, { token: i1.DomSanitizer }, { token: ConfiguringService }, { token: ConfiguratorEventService }], target: i0.ɵɵFactoryTarget.Component });
11619
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorComponent, isStandalone: false, selector: "co-product-configurator", inputs: { showHeaderInformation: "showHeaderInformation", showSelections: "showSelections", showLabel: "showLabel", canClose: "canClose", customDimensions: "customDimensions", showSaveAndLoadConfiguration: "showSaveAndLoadConfiguration" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.co-product-configurator": "this.showClass" } }, ngImport: i0, template: `
11611
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ProductConfiguratorComponent, isStandalone: false, selector: "co-product-configurator", inputs: { showHeaderInformation: "showHeaderInformation", showSelections: "showSelections", showLabel: "showLabel", canClose: "canClose", customDimensions: "customDimensions" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, host: { properties: { "class.co-product-configurator": "this.showClass" } }, ngImport: i0, template: `
11620
11612
  <div class="product-configurator-container">
11621
11613
  @if (showHeaderInformation) {
11622
11614
  <div class="product-configurator-header">
@@ -11723,8 +11715,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
11723
11715
  type: Input
11724
11716
  }], customDimensions: [{
11725
11717
  type: Input
11726
- }], showSaveAndLoadConfiguration: [{
11727
- type: Input
11728
11718
  }], showChange: [{
11729
11719
  type: Output
11730
11720
  }], answerChosen: [{
@@ -11739,9 +11729,11 @@ class ConfiguratorComponent {
11739
11729
  _buildFurnitureService;
11740
11730
  _configuratorConnectorService;
11741
11731
  showClass = true;
11732
+ show = true;
11742
11733
  set sku(value) {
11734
+ this._reset();
11743
11735
  this._sku = value;
11744
- if (this._sku && this.loaded) {
11736
+ if (this.loaded) {
11745
11737
  this._configuratorEventService.skuSet.next(this._sku);
11746
11738
  this._skuSet = true;
11747
11739
  }
@@ -11750,8 +11742,9 @@ class ConfiguratorComponent {
11750
11742
  return this._sku;
11751
11743
  }
11752
11744
  set instanceId(value) {
11745
+ this._reset();
11753
11746
  this._instanceId = value;
11754
- if (this._instanceId && this.loaded) {
11747
+ if (this.loaded) {
11755
11748
  this._configuratorEventService.instanceIdSet.next(this._instanceId);
11756
11749
  this._instanceIdSet = true;
11757
11750
  }
@@ -11785,11 +11778,12 @@ class ConfiguratorComponent {
11785
11778
  resultHasErrors = false;
11786
11779
  showErrorDiagram = false;
11787
11780
  configurationResultObject;
11788
- showFullConfiguration = false;
11781
+ showFullConfiguration = undefined;
11789
11782
  showLiteSelector = false;
11790
11783
  showSelections = false;
11791
11784
  showAnswers = false;
11792
11785
  loaded = false;
11786
+ forceShow = false;
11793
11787
  _subs = [];
11794
11788
  _loadingFromPreset = false;
11795
11789
  _settings;
@@ -11797,6 +11791,7 @@ class ConfiguratorComponent {
11797
11791
  _instanceIdSet = false;
11798
11792
  _sku;
11799
11793
  _skuSet = false;
11794
+ _alreadyReset = false;
11800
11795
  constructor(settingsService, loaderService, _configuratorEventService, _configuringService, _buildFurnitureService, _configuratorConnectorService) {
11801
11796
  this.settingsService = settingsService;
11802
11797
  this.loaderService = loaderService;
@@ -11804,7 +11799,11 @@ class ConfiguratorComponent {
11804
11799
  this._configuringService = _configuringService;
11805
11800
  this._buildFurnitureService = _buildFurnitureService;
11806
11801
  this._configuratorConnectorService = _configuratorConnectorService;
11807
- this._subs.push(this._configuratorEventService.articleNotFound.subscribe((buildResult) => this._handleArticleNotFound(buildResult)), this._configuratorEventService.answerCountReceived.subscribe((answerCount) => this._handleAnswerCountReceived(answerCount)), this._configuratorEventService.buildFinished.subscribe((resultObject) => this._handleBuildFinished(resultObject)), this._configuratorEventService.configurationTemplateChange.subscribe((template) => this._handleTemplateChange(template)), this._configuratorConnectorService.controllerInitialized.subscribe((initialized) => {
11802
+ this._subs.push(this._configuratorEventService.articleNotFound.subscribe((buildResult) => this._handleArticleNotFound(buildResult)), this._configuratorEventService.answerCountReceived.subscribe((answerCount) => this._handleAnswerCountReceived(answerCount)), this._configuratorEventService.buildFinished.subscribe((resultObject) => this._handleBuildFinished(resultObject)), this._configuratorEventService.articleReceived.subscribe((article) => {
11803
+ if (article) {
11804
+ this.showFullConfiguration = !!article.showFullConfiguration;
11805
+ }
11806
+ }), this._configuratorConnectorService.controllerInitialized.subscribe((initialized) => {
11808
11807
  if (initialized) {
11809
11808
  this.loaded = true;
11810
11809
  if (this._sku && !this._skuSet) {
@@ -11816,6 +11815,12 @@ class ConfiguratorComponent {
11816
11815
  this._instanceIdSet = true;
11817
11816
  }
11818
11817
  }
11818
+ }), combineLatest([
11819
+ this._configuratorEventService.skuSet,
11820
+ this._configuratorEventService.instanceIdSet
11821
+ ]).pipe(debounceTime(0) // wait for events to finish, because skuSet and instanceIdSet events are emitted simultaneously
11822
+ ).subscribe(([sku, instanceId]) => {
11823
+ this._alreadyReset = false;
11819
11824
  }));
11820
11825
  }
11821
11826
  ngOnInit() {
@@ -11864,9 +11869,7 @@ class ConfiguratorComponent {
11864
11869
  }
11865
11870
  _handleAnswerCountReceived(answerCount) {
11866
11871
  this.showAnswers = answerCount > 0;
11867
- if (this.showAnswers) {
11868
- this.showLiteSelector = !this._loadingFromPreset;
11869
- }
11872
+ this.forceShow = this.showAnswers;
11870
11873
  }
11871
11874
  _handleBuildFinished(result) {
11872
11875
  if (!result) {
@@ -11881,20 +11884,24 @@ class ConfiguratorComponent {
11881
11884
  this.showErrorDiagram = true;
11882
11885
  }
11883
11886
  }
11884
- _handleTemplateChange(template) {
11885
- if (template === ConfigurationTemplate.default) {
11886
- this.showFullConfiguration = false;
11887
- }
11888
- else if (template === ConfigurationTemplate.showFullConfiguration) {
11889
- this.showFullConfiguration = true;
11890
- }
11891
- else {
11892
- this.showFullConfiguration = false;
11887
+ _reset() {
11888
+ if (this._alreadyReset) {
11889
+ return;
11893
11890
  }
11891
+ this._configuratorConnectorService.cleanUp();
11892
+ this.showFullConfiguration = undefined;
11893
+ this._configuratorEventService.skuSet.next(undefined);
11894
+ this._configuratorEventService.instanceIdSet.next(undefined);
11895
+ this._configuratorEventService.instanceSet.next(undefined);
11896
+ this._configuratorEventService.articleNotFound.next(undefined);
11897
+ this._configuratorEventService.selectionWithAnswersChanged.next(undefined);
11898
+ this._configuratorEventService.articleReceived.next(undefined);
11899
+ this._configuratorEventService.buildFinished.next(undefined);
11900
+ this._alreadyReset = true;
11894
11901
  }
11895
11902
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfiguratorComponent, deps: [{ token: ConfiguratorSettingsService }, { token: LoaderService }, { token: ConfiguratorEventService }, { token: ConfiguringService }, { token: SwitchBuildFurnitureService }, { token: ConfiguratorConnectorService }], target: i0.ɵɵFactoryTarget.Component });
11896
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ConfiguratorComponent, isStandalone: false, selector: "co-configurator", inputs: { sku: "sku", instanceId: "instanceId", settings: "settings", scene: "scene", showLoader: "showLoader", showProgressBar: "showProgressBar", showErrorMessages: "showErrorMessages", outputErrorMessages: "outputErrorMessages", canCloseConfigurator: "canCloseConfigurator", animateSlideout: "animateSlideout", showHeaderInformation: "showHeaderInformation" }, outputs: { isLoading: "isLoading", updateProgressBar: "updateProgressBar", errorMessages: "errorMessages", showChange: "showChange" }, host: { properties: { "class.co-configurator": "this.showClass" } }, ngImport: i0, template: `
11897
- @if (loaded) {
11903
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ConfiguratorComponent, isStandalone: false, selector: "co-configurator", inputs: { show: "show", sku: "sku", instanceId: "instanceId", settings: "settings", scene: "scene", showLoader: "showLoader", showProgressBar: "showProgressBar", showErrorMessages: "showErrorMessages", outputErrorMessages: "outputErrorMessages", canCloseConfigurator: "canCloseConfigurator", animateSlideout: "animateSlideout", showHeaderInformation: "showHeaderInformation" }, outputs: { isLoading: "isLoading", updateProgressBar: "updateProgressBar", errorMessages: "errorMessages", showChange: "showChange" }, host: { properties: { "class.co-configurator": "this.showClass" } }, ngImport: i0, template: `
11904
+ @if (loaded && (show || forceShow)) {
11898
11905
  @if (showProgressBar) {
11899
11906
  <co-progress-bar></co-progress-bar>
11900
11907
  }
@@ -11907,7 +11914,7 @@ class ConfiguratorComponent {
11907
11914
  (closeErrorDialoag)="handleCloseErrorDialog()"
11908
11915
  ></co-configurator-error-dialog>
11909
11916
  }
11910
- @if (!showFullConfiguration) {
11917
+ @if (showFullConfiguration === false) {
11911
11918
  <co-lite-selector
11912
11919
  class="floating"
11913
11920
  [animateSlideout]="animateSlideout"
@@ -11927,14 +11934,14 @@ class ConfiguratorComponent {
11927
11934
  }
11928
11935
 
11929
11936
  }
11930
- `, isInline: true, dependencies: [{ kind: "component", type: ProgressBarComponent, selector: "co-progress-bar" }, { kind: "component", type: ConfiguratorLoaderComponent, selector: "co-configurator-loader", inputs: ["show"] }, { kind: "component", type: ConfiguratorErrorDialogComponent, selector: "co-configurator-error-dialog", inputs: ["errorMessages"], outputs: ["closeErrorDialoag"] }, { kind: "component", type: LiteSelectorComponent, selector: "co-lite-selector", inputs: ["show", "showLabel", "canClose", "animateSlideout", "customDimensions", "showSaveAndLoadConfiguration"], outputs: ["showChange", "answerChosen"] }, { kind: "component", type: ProductConfiguratorComponent, selector: "co-product-configurator", inputs: ["showHeaderInformation", "showSelections", "showLabel", "canClose", "customDimensions", "showSaveAndLoadConfiguration"], outputs: ["showChange", "answerChosen"] }], encapsulation: i0.ViewEncapsulation.None });
11937
+ `, isInline: true, dependencies: [{ kind: "component", type: ProgressBarComponent, selector: "co-progress-bar" }, { kind: "component", type: ConfiguratorLoaderComponent, selector: "co-configurator-loader", inputs: ["show"] }, { kind: "component", type: ConfiguratorErrorDialogComponent, selector: "co-configurator-error-dialog", inputs: ["errorMessages"], outputs: ["closeErrorDialoag"] }, { kind: "component", type: LiteSelectorComponent, selector: "co-lite-selector", inputs: ["show", "showLabel", "canClose", "animateSlideout", "customDimensions"], outputs: ["showChange", "answerChosen"] }, { kind: "component", type: ProductConfiguratorComponent, selector: "co-product-configurator", inputs: ["showHeaderInformation", "showSelections", "showLabel", "canClose", "customDimensions"], outputs: ["showChange", "answerChosen"] }], encapsulation: i0.ViewEncapsulation.None });
11931
11938
  }
11932
11939
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfiguratorComponent, decorators: [{
11933
11940
  type: Component,
11934
11941
  args: [{
11935
11942
  selector: 'co-configurator',
11936
11943
  template: `
11937
- @if (loaded) {
11944
+ @if (loaded && (show || forceShow)) {
11938
11945
  @if (showProgressBar) {
11939
11946
  <co-progress-bar></co-progress-bar>
11940
11947
  }
@@ -11947,7 +11954,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
11947
11954
  (closeErrorDialoag)="handleCloseErrorDialog()"
11948
11955
  ></co-configurator-error-dialog>
11949
11956
  }
11950
- @if (!showFullConfiguration) {
11957
+ @if (showFullConfiguration === false) {
11951
11958
  <co-lite-selector
11952
11959
  class="floating"
11953
11960
  [animateSlideout]="animateSlideout"
@@ -11974,6 +11981,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
11974
11981
  }], ctorParameters: () => [{ type: ConfiguratorSettingsService }, { type: LoaderService }, { type: ConfiguratorEventService }, { type: ConfiguringService }, { type: SwitchBuildFurnitureService }, { type: ConfiguratorConnectorService }], propDecorators: { showClass: [{
11975
11982
  type: HostBinding,
11976
11983
  args: ['class.co-configurator']
11984
+ }], show: [{
11985
+ type: Input
11977
11986
  }], sku: [{
11978
11987
  type: Input
11979
11988
  }], instanceId: [{
@@ -14285,6 +14294,9 @@ class SceneButtonUtils {
14285
14294
  if (selection.hdecoPositioning !== 'N') {
14286
14295
  const len = selection.decoNode ? selection.decoNode.connectors.length : 0;
14287
14296
  for (let i = 0; i < len; i++) {
14297
+ if (selection.decoNode.connectors[i] === null) {
14298
+ return;
14299
+ }
14288
14300
  const conObject = this._getConnectorObject(child, selection.decoNode.connectors[i].connector);
14289
14301
  const conObjectParent = ObjectUtils.GetParentItem(conObject, CustomObject3D);
14290
14302
  const existingButton = result.find((eab) => {
@@ -15277,7 +15289,6 @@ class ConfiguratorSceneComponent {
15277
15289
  _floorService;
15278
15290
  canvasElement;
15279
15291
  elementToolbar;
15280
- showSceneBuildLoader = true;
15281
15292
  showClass = true;
15282
15293
  totalSteps = 8;
15283
15294
  currentStep = 0;
@@ -15290,6 +15301,7 @@ class ConfiguratorSceneComponent {
15290
15301
  showElementToolbar = false;
15291
15302
  animateEditAddButtons = false;
15292
15303
  enabledDownloadDialog = false;
15304
+ showSceneBuildLoader;
15293
15305
  development = false;
15294
15306
  showDownloadDialog = false;
15295
15307
  showCameraSettingsDialog = false;
@@ -15328,6 +15340,12 @@ class ConfiguratorSceneComponent {
15328
15340
  if (started) {
15329
15341
  this.setSceneBuildLoader = started;
15330
15342
  }
15343
+ }), this._eventService.addedToScene.subscribe((result) => {
15344
+ if (result) {
15345
+ if (this.currentStep !== this.totalSteps) {
15346
+ this._loaderProcessUpdate(this.totalSteps);
15347
+ }
15348
+ }
15331
15349
  }), this._settingsService.settingsLoaded.subscribe((loaded) => {
15332
15350
  if (loaded && this._settingsService.settings && this._settingsService.settings.options) {
15333
15351
  if (this._settingsService.settings.options.showDownloadButton) {
@@ -15341,6 +15359,7 @@ class ConfiguratorSceneComponent {
15341
15359
  this._createCameraSettingsButton();
15342
15360
  }
15343
15361
  this.development = this._settingsService.settings.options.development;
15362
+ this.showSceneBuildLoader = this._settingsService.settings.options.showSceneBuildLoader;
15344
15363
  }
15345
15364
  }));
15346
15365
  }
@@ -15555,7 +15574,7 @@ class ConfiguratorSceneComponent {
15555
15574
  this._dimensionsService.enabled = !this._dimensionsService.enabled;
15556
15575
  }
15557
15576
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: ConfiguratorSceneComponent, deps: [{ token: ConfiguratorSettingsService }, { token: ConfiguratorRotationService }, { token: ConfiguratorDynamicCameraService }, { token: ConfiguratorSceneService }, { token: ConfiguratorEventService }, { token: ConfiguratorCameraService }, { token: ConfiguratorItemService }, { token: SwitchBuildFurnitureService }, { token: SceneOptionsService }, { token: DimensionsService }, { token: FloorPlaneService }], target: i0.ɵɵFactoryTarget.Component });
15558
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ConfiguratorSceneComponent, isStandalone: false, selector: "co-configurator-scene", inputs: { showSceneBuildLoader: "showSceneBuildLoader" }, host: { properties: { "class.co-configurator-scene": "this.showClass" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvas"], descendants: true, read: ElementRef }, { propertyName: "elementToolbar", first: true, predicate: ElementToolbarComponent, descendants: true }], ngImport: i0, template: `
15577
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.18", type: ConfiguratorSceneComponent, isStandalone: false, selector: "co-configurator-scene", host: { properties: { "class.co-configurator-scene": "this.showClass" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvas"], descendants: true, read: ElementRef }, { propertyName: "elementToolbar", first: true, predicate: ElementToolbarComponent, descendants: true }], ngImport: i0, template: `
15559
15578
  @if (showSceneBuildLoader && setSceneBuildLoader) {
15560
15579
  <co-configurator-scene-loader
15561
15580
  [loaderProgress]="loaderProgress">
@@ -15651,8 +15670,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
15651
15670
  }], elementToolbar: [{
15652
15671
  type: ViewChild,
15653
15672
  args: [ElementToolbarComponent]
15654
- }], showSceneBuildLoader: [{
15655
- type: Input
15656
15673
  }], showClass: [{
15657
15674
  type: HostBinding,
15658
15675
  args: ['class.co-configurator-scene']