@veloceapps/sdk 4.0.0 → 4.0.1
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.
- package/bundles/veloce-sdk-core.umd.js +35 -31
- package/bundles/veloce-sdk-core.umd.js.map +1 -1
- package/bundles/veloce-sdk.umd.js +17 -16
- package/bundles/veloce-sdk.umd.js.map +1 -1
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +2 -6
- package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +36 -31
- package/esm2015/src/components/header/cart-overlay/cart-preview.component.js +6 -6
- package/esm2015/src/components/header/header.component.js +3 -2
- package/esm2015/src/components/header/header.types.js +1 -1
- package/esm2015/src/resolvers/quote.resolver.js +4 -3
- package/esm2015/src/services/flow.service.js +7 -8
- package/fesm2015/veloce-sdk-core.js +35 -30
- package/fesm2015/veloce-sdk-core.js.map +1 -1
- package/fesm2015/veloce-sdk.js +16 -15
- package/fesm2015/veloce-sdk.js.map +1 -1
- package/package.json +4 -4
- package/src/components/header/header.types.d.ts +1 -0
package/fesm2015/veloce-sdk.js
CHANGED
@@ -364,9 +364,9 @@ class CartPreviewComponent {
|
|
364
364
|
}
|
365
365
|
}
|
366
366
|
ngAfterViewInit() {
|
367
|
-
combineLatest([this.readonlyProductId$, this.shouldUpdate$, this.overlayPanel.onShow])
|
367
|
+
combineLatest([this.readonlyProductId$, this.isEditMode$, this.shouldUpdate$, this.overlayPanel.onShow])
|
368
368
|
.pipe(filter(() => this.overlayPanel.overlayVisible), takeUntil(this.destroyed$))
|
369
|
-
.subscribe(([readonlyProductId]) => this.updateControls(this.products, readonlyProductId));
|
369
|
+
.subscribe(([readonlyProductId, isEditMode]) => this.updateControls(this.products, isEditMode, readonlyProductId));
|
370
370
|
}
|
371
371
|
ngOnDestroy() {
|
372
372
|
this.destroyed$.next();
|
@@ -400,7 +400,7 @@ class CartPreviewComponent {
|
|
400
400
|
const productIds = this.products.map(product => product.id);
|
401
401
|
this.flowConfiguration.delete(productIds);
|
402
402
|
}
|
403
|
-
updateControls(products, readonlyProductId) {
|
403
|
+
updateControls(products, isEditMode, readonlyProductId) {
|
404
404
|
const ids = [];
|
405
405
|
products.forEach(item => {
|
406
406
|
var _a;
|
@@ -414,7 +414,7 @@ class CartPreviewComponent {
|
|
414
414
|
else {
|
415
415
|
(_a = this.form.controls[item.id]) === null || _a === void 0 ? void 0 : _a.setValue(item.qty);
|
416
416
|
}
|
417
|
-
if (item.productId === readonlyProductId) {
|
417
|
+
if (!isEditMode || item.deleted || item.productId === readonlyProductId) {
|
418
418
|
this.form.controls[item.id].disable();
|
419
419
|
}
|
420
420
|
else {
|
@@ -426,7 +426,7 @@ class CartPreviewComponent {
|
|
426
426
|
}
|
427
427
|
}
|
428
428
|
CartPreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CartPreviewComponent, deps: [{ token: i2$1.FlowConfigurationService }, { token: FlowRouterService }, { token: i2$1.ProductImagesService }, { token: i2$1.QuoteDraftService }], target: i0.ɵɵFactoryTarget.Component });
|
429
|
-
CartPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: CartPreviewComponent, selector: "vl-cart-preview", inputs: { products: "products" }, viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: OverlayPanel, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<p-overlayPanel\n styleClass=\"navigation-settings-overlay flow-header-overlay center\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"flow-header-overlay__wrapper\" *vlLet=\"readonlyProductId$ | async as readonlyProductId\">\n <ng-container *vlLet=\"isEditMode$ | async as isEditMode\">\n <ng-container *ngIf=\"products.length > 0; else empty\">\n <h2 class=\"flow-header-overlay__title\">\n <span>Products ({{ products.length }})</span>\n <i class=\"vl-icon vl-icon-close close-icon\" (click)=\"overlayPanel.hide()\"></i>\n </h2>\n\n <div class=\"product header\">\n <span>Product</span>\n <span class=\"text-right\">Qty</span>\n <span class=\"text-right\">MRR</span>\n <span class=\"text-right\">NRR</span>\n </div>\n\n <div class=\"scrollable-wrapper\">\n <div class=\"product\" *ngFor=\"let product of products\">\n <div
|
429
|
+
CartPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: CartPreviewComponent, selector: "vl-cart-preview", inputs: { products: "products" }, viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: OverlayPanel, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<p-overlayPanel\n styleClass=\"navigation-settings-overlay flow-header-overlay center\"\n showTransitionOptions=\"0ms\"\n hideTransitionOptions=\"0ms\"\n>\n <ng-template pTemplate>\n <div class=\"flow-header-overlay__wrapper\" *vlLet=\"readonlyProductId$ | async as readonlyProductId\">\n <ng-container *vlLet=\"isEditMode$ | async as isEditMode\">\n <ng-container *ngIf=\"products.length > 0; else empty\">\n <h2 class=\"flow-header-overlay__title\">\n <span>Products ({{ products.length }})</span>\n <i class=\"vl-icon vl-icon-close close-icon\" (click)=\"overlayPanel.hide()\"></i>\n </h2>\n\n <div class=\"product header\">\n <span>Product</span>\n <span class=\"text-right\">Qty</span>\n <span class=\"text-right\">MRR</span>\n <span class=\"text-right\">NRR</span>\n </div>\n\n <div class=\"scrollable-wrapper\">\n <div class=\"product\" *ngFor=\"let product of products\">\n <div\n class=\"product__info\"\n *vlLet=\"!isEditMode || product.deleted || readonlyProductId === product.productId as readonlyProduct\"\n >\n <div class=\"product__image-wrapper\">\n <div\n *ngIf=\"getImageUrl(product.productId) | async as imageUrl; else noImage\"\n class=\"product__image\"\n [ngStyle]=\"{ 'background-image': 'url(' + imageUrl + ')' }\"\n ></div>\n </div>\n <div class=\"flex flex-column justify-content-center\">\n <div class=\"word-break\">{{ product.name }}</div>\n <div>\n <p-button\n label=\"Configure\"\n [disabled]=\"readonlyProduct || !product.configurable\"\n styleClass=\"p-button-link p-button-sm pl-0\"\n (onClick)=\"navigateToProductConfiguration(product.productId, product.id)\"\n ></p-button>\n <p-button\n label=\"Delete\"\n [disabled]=\"readonlyProduct\"\n styleClass=\"p-button-link p-button-sm p-button-danger pl-0 pr-0\"\n (onClick)=\"deleteHandler(product)\"\n ></p-button>\n </div>\n </div>\n </div>\n\n <span>\n <p-inputNumber\n *ngIf=\"form.controls[product.id] as control\"\n class=\"qty-control\"\n [formControl]=\"$any(control)\"\n [min]=\"1\"\n [required]=\"true\"\n (onBlur)=\"controlBlurHandler(product)\"\n ></p-inputNumber>\n </span>\n <span class=\"text-right pt-3\">${{ product.mrr }}</span>\n <span class=\"text-right pt-3\">${{ product.nrr }}</span>\n </div>\n\n <ng-template #noImage>\n <i class=\"vl-icon vl-icon-no-image no-image-icon\"></i>\n </ng-template>\n </div>\n\n <div class=\"flex justify-content-end mt-3\">\n <p-button\n label=\"Clear cart\"\n styleClass=\"p-button-link p-button-sm p-button-danger pl-0 pr-0\"\n [disabled]=\"!isEditMode || readonlyProductId\"\n (onClick)=\"deleteAllHandler()\"\n ></p-button>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-template #empty>\n <h2 class=\"flow-header-overlay__title\">\n <span>Empty Cart</span>\n <i class=\"vl-icon vl-icon-close close-icon\" (click)=\"overlayPanel.hide()\"></i>\n </h2>\n\n <span class=\"empty-state\">There are no products added to the Shopping Cart yet.</span>\n </ng-template>\n </div>\n </ng-template>\n</p-overlayPanel>\n", styles: [".flow-header-overlay__wrapper{display:flex;flex-direction:column;width:460px;max-height:600px}.flow-header-overlay__wrapper .close-icon{cursor:pointer}.flow-header-overlay__title{display:flex;justify-content:space-between;align-items:center;margin:0 0 16px}.empty-state{color:var(--vl-text-color-deep-accent)}.scrollable-wrapper{overflow:auto}.product{display:grid;grid-template-columns:auto 60px 80px 80px;padding:16px 0}.product:not(.header){border-bottom:1px solid var(--vl-border-color)}.product.header{color:var(--vl-text-color-deep-accent);padding-bottom:0}.product__info{display:flex;grid-gap:16px;gap:16px}.product__image-wrapper{flex-shrink:0;height:64px;width:64px;display:flex;justify-content:center;align-items:center;background:var(--vl-primary-nav-overlay-bg);border-radius:4px}.product__image{background-size:contain;background-repeat:no-repeat;background-position:center;height:calc(100% - 12px);width:calc(100% - 12px)}.product .qty-control ::ng-deep .p-inputnumber-input{align-self:flex-start;text-align:right;width:100%}.word-break{word-break:break-word}.no-image-icon{color:#b4d1ef;height:18px;width:18px}\n"], components: [{ type: i3$1.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { type: i5$2.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown"] }], directives: [{ type: i2$3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i3.LetDirective, selector: "[vlLet]", inputs: ["vlLet"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }], pipes: { "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
430
430
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: CartPreviewComponent, decorators: [{
|
431
431
|
type: Component,
|
432
432
|
args: [{
|
@@ -596,7 +596,7 @@ class FlowHeaderComponent {
|
|
596
596
|
this.activePriceList$ = this.quoteDraftService.activePriceList$;
|
597
597
|
this.status$ = this.contextService.resolve$().pipe(map(context => { var _a; return (_a = context.properties.Status) !== null && _a !== void 0 ? _a : ''; }));
|
598
598
|
this.isEditMode$ = this.quoteDraftService.isEditMode$();
|
599
|
-
this.products$ = this.flowConfiguration.
|
599
|
+
this.products$ = this.flowConfiguration.get().pipe(map(lineItems => this.generateProducts(lineItems)));
|
600
600
|
this.isConfigurationRoute$ = this.routerService.isConfigurationRoute$();
|
601
601
|
this.isCartRoute$ = this.routerService.isCartRoute$();
|
602
602
|
this.isCatalogRoute$ = this.routerService.isCatalogRoute$();
|
@@ -794,6 +794,7 @@ class FlowHeaderComponent {
|
|
794
794
|
productId: target.productId,
|
795
795
|
name: target.name,
|
796
796
|
configurable: target.properties['#configurable'] === 'true',
|
797
|
+
deleted: target.actionCode === 'DELETE',
|
797
798
|
qty: target.qty,
|
798
799
|
mrr: this.formatMetric(target.properties.VDM_Total_MRR),
|
799
800
|
nrr: this.formatMetric(target.properties.VDM_Total_NRR),
|
@@ -886,21 +887,20 @@ class FlowService {
|
|
886
887
|
this.integrationState
|
887
888
|
.listen$(FlowAction.FLOW_APPLY_PRODUCT_CONFIGURATION)
|
888
889
|
.pipe(switchMap(() => {
|
890
|
+
const quoteDraft = this.quoteDraftService.quoteDraft;
|
889
891
|
const lineItem = this.configurationService.getSnapshot();
|
890
|
-
if (!lineItem) {
|
892
|
+
if (!quoteDraft || !lineItem) {
|
891
893
|
return of(undefined);
|
892
894
|
}
|
893
|
-
const
|
894
|
-
const isNewLineItem = currentState.every(li => li.id !== lineItem.id);
|
895
|
+
const isNewLineItem = quoteDraft.currentState.every(li => li.id !== lineItem.id);
|
895
896
|
let updatedState;
|
896
897
|
if (isNewLineItem) {
|
897
|
-
updatedState = [...currentState, lineItem];
|
898
|
+
updatedState = [...quoteDraft.currentState, lineItem];
|
898
899
|
}
|
899
900
|
else {
|
900
|
-
updatedState = currentState.map(li => (li.id === lineItem.id ? lineItem : li));
|
901
|
+
updatedState = quoteDraft.currentState.map(li => (li.id === lineItem.id ? lineItem : li));
|
901
902
|
}
|
902
|
-
this.
|
903
|
-
return this.flowConfigurationService.calculate$();
|
903
|
+
return this.flowConfigurationService.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }));
|
904
904
|
}), tap(() => {
|
905
905
|
this.configurationService.hasUnsavedChanges = false;
|
906
906
|
this.flowRouterService.navigateToShoppingCart();
|
@@ -1786,8 +1786,9 @@ class QuoteResolver {
|
|
1786
1786
|
return from(this.router.navigate([parentUrl, '404'], { state: { message } }));
|
1787
1787
|
}
|
1788
1788
|
calculate$() {
|
1789
|
-
|
1790
|
-
|
1789
|
+
const quoteDraft = this.quoteDraftService.quoteDraft;
|
1790
|
+
if (!this.quoteDraftService.isStandalone && quoteDraft) {
|
1791
|
+
return this.flowConfiguration.calculate$(quoteDraft);
|
1791
1792
|
}
|
1792
1793
|
return of(undefined);
|
1793
1794
|
}
|