Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: product configurator support #5347

Merged
merged 465 commits into from
Jan 27, 2021
Merged

feat: product configurator support #5347

merged 465 commits into from
Jan 27, 2021

Conversation

ChristophHi
Copy link
Contributor

@ChristophHi ChristophHi commented Nov 8, 2019

Contains a feature library that adds product configurator support to Spartacus. This includes a rule-based configurator that can be served by the SAP Variant Configurator in commerce, and a more lightweight configurator that allows to add a number of textual attributes to a product

@ChristophHi
Copy link
Contributor Author

This is not for merging soon, but to leave comments

@sonarcloud
Copy link

sonarcloud bot commented Jan 20, 2020

Kudos, SonarCloud Quality Gate passed!

Bug B 7 Bugs
Vulnerability A 0 Vulnerabilities (and Security Hotspot 0 Security Hotspots to review)
Code Smell A 0 Code Smells

88.3% 88.3% Coverage
0.5% 0.5% Duplication

@ChristophHi ChristophHi requested review from a team February 11, 2020 14:53
@ChristophHi ChristophHi requested a review from a team February 25, 2020 14:19
@CLAassistant
Copy link

CLAassistant commented Mar 4, 2020

CLA assistant check
All committers have signed the CLA.

@sonarcloud
Copy link

sonarcloud bot commented Mar 4, 2020

Kudos, SonarCloud Quality Gate passed!

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities (and Security Hotspot 0 Security Hotspots to review)
Code Smell A 0 Code Smells

No Coverage information No Coverage information
0.0% 0.0% Duplication

@ChristophHi ChristophHi requested a review from a team March 16, 2020 14:44
@sonarcloud
Copy link

sonarcloud bot commented Apr 15, 2020

Kudos, SonarCloud Quality Gate passed!

Bug B 9 Bugs
Vulnerability A 0 Vulnerabilities (and Security Hotspot 0 Security Hotspots to review)
Code Smell A 0 Code Smells

89.9% 89.9% Coverage
0.5% 0.5% Duplication

@cypress
Copy link

cypress bot commented May 25, 2020



Test summary

433 8 3 3Flakiness 2


Run details

Project spartacus
Status Failed
Commit c5038a1
Started Jan 27, 2021 8:20 AM
Ended Jan 27, 2021 8:58 AM
Duration 37:55 💡
OS Linux Ubuntu - 18.04
Browser Electron 87

View run in Cypress Dashboard ➡️


Failures

Run group: B2C (Linux, Electron )
accessibility/group-skipping.e2e-spec.ts Failed
1 Group Skipping - Checkout > shippingAddress > should tab through group skippers
Run group: B2B (Linux, Electron )
b2b/regression/my-company/budgets.e2e-spec.ts Failed
1 ... > should update
2 ... > should sort table data by code
3 ... > should sort table data by value
4 ... > should sort table data by unit
5 ... > should show no assignments
b2b/regression/my-company/cost-centers.e2e-spec.ts Failed
1 ... > should create
2 ... > should disable/enable

Flakiness

regression/site-context/language/language-product-details-page.e2e-spec.ts Flakiness
1 Language switch - product-details page > product-details page > should change language in the url
b2b/regression/my-company/budgets.e2e-spec.ts Flakiness
1 ... > should create

This comment has been generated by cypress-bot as a result of this project's GitHub integration settings. You can manage this integration in this project's settings in the Cypress Dashboard

ChristophHi and others added 20 commits August 18, 2020 09:29
* GH-8595 Disable addToCart button when pending changes are present

* GH-8595 Simplify effects and add tests
Add a conflict solver e2e test and refactor our e2e tests and helper classes
e2e tabbing tests available for configuration and overview pages
Navigation from Overview/Cart for issues/conflicts
* GH-8648 Wait until cart is completely done before reading from cart

* GH-8648 Remove obsolete and add test

* GH-8648 Add warning message in case cart is still busy
Activate Tests again (remove skips)
* GH-8741 delete group status after add to cart test

* GH-8741 fix syntax error
@github-actions
Copy link
Contributor

Public API changes

⚠️ @spartacus/product

-export * from "@spartacus/product/configurators";
-
 // (No @packageDocumentation comment for this package)

⚠️ @spartacus/product-configurator/common/assets

New entry point. Initial public api:

import { TranslationChunksConfig } from '@spartacus/core';
import { TranslationResources } from '@spartacus/core';

// @public (undocumented)
export const configuratorTranslationChunksConfig: TranslationChunksConfig;

// @public (undocumented)
export const configuratorTranslations: TranslationResources;


// (No @packageDocumentation comment for this package)

⚠️ @spartacus/product-configurator/common

New entry point. Initial public api:

import { Cart } from '@spartacus/core';
import { CartItemContext } from '@spartacus/storefront';
import { CurrentProductService } from '@spartacus/storefront';
import { ICON_TYPE } from '@spartacus/storefront';
import { Observable } from 'rxjs';
import { OrderEntry } from '@spartacus/core';
import { Product } from '@spartacus/core';
import { ProductListItemContext } from '@spartacus/storefront';
import { RouterState } from '@spartacus/core';
import { RoutingService } from '@spartacus/core';

// @public (undocumented)
export namespace CommonConfigurator {
    export interface Owner {
        configuratorType?: string;
        id?: string;
        key?: string;
        type?: OwnerType;
    }
    export enum OwnerType {
        // (undocumented)
        CART_ENTRY = "cartEntry",
        // (undocumented)
        ORDER_ENTRY = "orderEntry",
        // (undocumented)
        PRODUCT = "product"
    }
    // (undocumented)
    export interface ReadConfigurationFromCartEntryParameters {
        // (undocumented)
        cartEntryNumber?: string;
        // (undocumented)
        cartId?: string;
        // (undocumented)
        owner?: CommonConfigurator.Owner;
        // (undocumented)
        userId?: string;
    }
    // (undocumented)
    export interface ReadConfigurationFromOrderEntryParameters {
        // (undocumented)
        orderEntryNumber?: string;
        // (undocumented)
        orderId?: string;
        // (undocumented)
        owner?: CommonConfigurator.Owner;
        // (undocumented)
        userId?: string;
    }
}

// @public (undocumented)
export class CommonConfiguratorComponentsModule {
}

// @public (undocumented)
export class CommonConfiguratorModule {
}

// @public (undocumented)
export class CommonConfiguratorOccModule {
}

// @public
export class CommonConfiguratorTestUtilsService {
    static expectElementNotPresent(expect: any, htmlElement: Element, querySelector: string): void;
    static expectElementPresent(expect: any, htmlElement: Element, querySelector: string): void;
    static expectElementToContainText(expect: any, htmlElement: Element, querySelector: string, expectedText: string): void;
}

// @public
export class CommonConfiguratorUtilsService {
    decomposeOwnerId(ownerId: string): any;
    getCartId(cart: Cart): string;
    getComposedOwnerId(documentId: string, entryNumber: number): string;
    getNumberOfIssues(cartItem: OrderEntry): number;
    getUserId(cart: Cart): string;
    hasIssues(cartItem: OrderEntry): boolean;
    setOwnerKey(owner: CommonConfigurator.Owner): void;
}

// @public
export interface ConfigurationInfo {
    // (undocumented)
    configurationLabel?: string;
    // (undocumented)
    configurationValue?: string;
    // (undocumented)
    configuratorType?: string;
    // (undocumented)
    status?: string;
}

// @public (undocumented)
export class ConfiguratorCartEntryInfoComponent {
    constructor(cartItemContext?: CartItemContext);
    // (undocumented)
    cartItemContext?: CartItemContext;
    hasStatus(item: OrderEntry): boolean;
}

// @public (undocumented)
export class ConfiguratorCartEntryInfoModule {
}

// @public (undocumented)
export class ConfiguratorIssuesNotificationComponent {
    constructor(commonConfigUtilsService: CommonConfiguratorUtilsService, cartItemContext?: CartItemContext);
    // (undocumented)
    cartItemContext?: CartItemContext;
    // (undocumented)
    protected commonConfigUtilsService: CommonConfiguratorUtilsService;
    getNumberOfIssues(item: OrderEntry): number;
    hasIssues(item: OrderEntry): boolean;
    // (undocumented)
    iconTypes: typeof ICON_TYPE;
}

// @public (undocumented)
export class ConfiguratorIssuesNotificationModule {
}

// @public (undocumented)
export enum ConfiguratorProductScope {
    // (undocumented)
    CONFIGURATOR = "configurator"
}

// @public (undocumented)
export namespace ConfiguratorRouter {
    // (undocumented)
    export interface Data {
        // (undocumented)
        displayOnly?: boolean;
        // (undocumented)
        forceReload?: boolean;
        // (undocumented)
        isOwnerCartEntry?: boolean;
        // (undocumented)
        owner?: CommonConfigurator.Owner;
        // (undocumented)
        pageType?: PageType;
        // (undocumented)
        resolveIssues?: boolean;
    }
    // (undocumented)
    export enum PageType {
        // (undocumented)
        CONFIGURATION = "configuration",
        // (undocumented)
        OVERVIEW = "overview"
    }
}

// @public
export class ConfiguratorRouterExtractorService {
    constructor(configUtilsService: CommonConfiguratorUtilsService, routingService: RoutingService);
    // (undocumented)
    protected configUtilsService: CommonConfiguratorUtilsService;
    // (undocumented)
    createOwnerFromRouterState(routerState: RouterState): CommonConfigurator.Owner;
    // (undocumented)
    extractRouterData(): Observable<ConfiguratorRouter.Data>;
    protected getConfiguratorTypeFromSemanticRoute(semanticRoute: string): string;
    // (undocumented)
    protected readonly ROUTE_FRAGMENT_CONFIGURE = "configure";
    // (undocumented)
    protected readonly ROUTE_FRAGMENT_OVERVIEW = "configureOverview";
    // (undocumented)
    protected routingService: RoutingService;
}

// @public (undocumented)
export class ConfigureCartEntryComponent {
    constructor(commonConfigUtilsService: CommonConfiguratorUtilsService);
    // (undocumented)
    cartEntry: OrderEntry;
    // (undocumented)
    protected commonConfigUtilsService: CommonConfiguratorUtilsService;
    // (undocumented)
    disabled: boolean;
    getDisplayOnly(): boolean;
    getEntityKey(): string;
    getOwnerType(): CommonConfigurator.OwnerType;
    getRoute(): string;
    hasIssues(): boolean;
    isDisabled(): boolean;
    // (undocumented)
    msgBanner: boolean;
    // (undocumented)
    readOnly: boolean;
}

// @public (undocumented)
export class ConfigureCartEntryModule {
}

// @public (undocumented)
export class ConfigureProductComponent {
    constructor(productListItemContext: ProductListItemContext, currentProductService: CurrentProductService);
    // (undocumented)
    protected currentProductService: CurrentProductService;
    // (undocumented)
    ownerTypeProduct: CommonConfigurator.OwnerType;
    // (undocumented)
    product$: Observable<Product>;
    // (undocumented)
    protected productListItemContext: ProductListItemContext;
}

// @public (undocumented)
export class ConfigureProductModule {
}

// @public
export enum OrderEntryStatus {
    // (undocumented)
    Error = "ERROR",
    // (undocumented)
    Info = "INFO",
    // (undocumented)
    Success = "SUCCESS",
    // (undocumented)
    Warning = "WARNING"
}

// @public
export interface StatusSummary {
    // (undocumented)
    numberOfIssues?: number;
    // (undocumented)
    status?: OrderEntryStatus;
}


// (No @packageDocumentation comment for this package)

⚠️ @spartacus/product-configurator

New entry point. Initial public api:

// (No @packageDocumentation comment for this package)

💥 @spartacus/product-configurator/rulebased

New entry point that can't be analyzed with api-extractor. Please check the errors:

ERROR: "import * as ___ from ___;" is not supported yet for local files.

⚠️ @spartacus/product-configurator/rulebased/root

New entry point. Initial public api:

import { ModuleWithProviders } from '@angular/core';

// @public
export class RulebasedConfiguratorRootFeatureModule {
}

// @public
export class RulebasedConfiguratorRootModule {
    // (undocumented)
    static forRoot(): ModuleWithProviders<RulebasedConfiguratorRootModule>;
}

// @public
export class RulebasedConfiguratorRoutingModule {
    // (undocumented)
    static forRoot(): ModuleWithProviders<RulebasedConfiguratorRoutingModule>;
}

// @public
export class VariantConfiguratorInteractiveModule {
}

// @public
export class VariantConfiguratorOverviewModule {
}


// (No @packageDocumentation comment for this package)

⚠️ @spartacus/product-configurator/textfield

New entry point. Initial public api:

import { ActiveCartService } from '@spartacus/core';
import { CartModification } from '@spartacus/core';
import { CommonConfigurator } from '@spartacus/product-configurator/common';
import { CommonConfiguratorUtilsService } from '@spartacus/product-configurator/common';
import { ConfiguratorRouterExtractorService } from '@spartacus/product-configurator/common';
import { Converter } from '@spartacus/core';
import { ConverterService } from '@spartacus/core';
import { EventEmitter } from '@angular/core';
import { FormControl } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { OccEndpointsService } from '@spartacus/core';
import { OnInit } from '@angular/core';
import { StateUtils } from '@spartacus/core';
import { Store } from '@ngrx/store';

// @public (undocumented)
export const CONFIGURATOR_TYPE_TEXTFIELD = "TEXTFIELD";

// @public (undocumented)
export class ConfiguratorTextfieldAddToCartButtonComponent {
    constructor(configuratorTextfieldService: ConfiguratorTextfieldService);
    // Warning: (ae-forgotten-export) The symbol "ConfiguratorTextfield" needs to be exported by the entry point public_api.d.ts
    //
    // (undocumented)
    configuration: ConfiguratorTextfield.Configuration;
    // Warning: (ae-forgotten-export) The symbol "ConfiguratorTextfieldService" needs to be exported by the entry point public_api.d.ts
    //
    // (undocumented)
    protected configuratorTextfieldService: ConfiguratorTextfieldService;
    getButtonText(): string;
    onAddToCart(): void;
    // (undocumented)
    productCode: string;
}

// @public (undocumented)
export class ConfiguratorTextfieldFormComponent {
    constructor(configuratorTextfieldService: ConfiguratorTextfieldService, configRouterExtractorService: ConfiguratorRouterExtractorService);
    // (undocumented)
    protected configRouterExtractorService: ConfiguratorRouterExtractorService;
    // (undocumented)
    configuration$: Observable<ConfiguratorTextfield.Configuration>;
    // (undocumented)
    protected configuratorTextfieldService: ConfiguratorTextfieldService;
    updateConfiguration(attribute: ConfiguratorTextfield.ConfigurationInfo): void;
}

// @public (undocumented)
export class ConfiguratorTextfieldInputFieldComponent implements OnInit {
    constructor();
    // (undocumented)
    attribute: ConfiguratorTextfield.ConfigurationInfo;
    // (undocumented)
    attributeInputForm: FormControl;
    getId(attribute: ConfiguratorTextfield.ConfigurationInfo): string;
    getIdLabel(attribute: ConfiguratorTextfield.ConfigurationInfo): string;
    // (undocumented)
    protected getLabelForIdGeneration(attribute: ConfiguratorTextfield.ConfigurationInfo): string;
    // (undocumented)
    inputChange: EventEmitter<ConfiguratorTextfield.ConfigurationInfo>;
    // (undocumented)
    ngOnInit(): void;
    onInputChange(): void;
    // (undocumented)
    PREFIX_TEXTFIELD: string;
}

// Warning: (ae-forgotten-export) The symbol "ConfiguratorTextfieldAdapter" needs to be exported by the entry point public_api.d.ts
//
// @public (undocumented)
export class OccConfiguratorTextfieldAdapter implements ConfiguratorTextfieldAdapter {
    constructor(http: HttpClient, occEndpointsService: OccEndpointsService, converterService: ConverterService);
    // (undocumented)
    addToCart(parameters: ConfiguratorTextfield.AddToCartParameters): Observable<CartModification>;
    // (undocumented)
    protected converterService: ConverterService;
    // (undocumented)
    createConfiguration(productCode: string, owner: CommonConfigurator.Owner): Observable<ConfiguratorTextfield.Configuration>;
    // (undocumented)
    protected http: HttpClient;
    // (undocumented)
    protected occEndpointsService: OccEndpointsService;
    // (undocumented)
    readConfigurationForCartEntry(parameters: CommonConfigurator.ReadConfigurationFromCartEntryParameters): Observable<ConfiguratorTextfield.Configuration>;
    // (undocumented)
    updateConfigurationForCartEntry(parameters: ConfiguratorTextfield.UpdateCartEntryParameters): Observable<CartModification>;
}

// Warning: (ae-forgotten-export) The symbol "OccConfiguratorTextfield" needs to be exported by the entry point public_api.d.ts
//
// @public (undocumented)
export class OccConfiguratorTextfieldAddToCartSerializer implements Converter<ConfiguratorTextfield.AddToCartParameters, OccConfiguratorTextfield.AddToCartParameters> {
    constructor();
    convert(source: ConfiguratorTextfield.AddToCartParameters, target?: OccConfiguratorTextfield.AddToCartParameters): OccConfiguratorTextfield.AddToCartParameters;
    // (undocumented)
    protected convertInfo(source: ConfiguratorTextfield.ConfigurationInfo, occConfigurationInfos: OccConfiguratorTextfield.ConfigurationInfo[]): void;
}

// @public (undocumented)
export class OccConfiguratorTextfieldNormalizer implements Converter<OccConfiguratorTextfield.Configuration, ConfiguratorTextfield.Configuration> {
    constructor();
    convert(source: OccConfiguratorTextfield.Configuration, target?: ConfiguratorTextfield.Configuration): ConfiguratorTextfield.Configuration;
}

// @public (undocumented)
export class TextfieldConfiguratorComponentsModule {
}

// @public
export class TextfieldConfiguratorCoreModule {
}

// @public
export class TextfieldConfiguratorModule {
}

// @public (undocumented)
export class TextfieldConfiguratorOccModule {
}


// (No @packageDocumentation comment for this package)

⚠️ @spartacus/product-configurator/textfield/root

New entry point. Initial public api:

import { ModuleWithProviders } from '@angular/core';

// @public
export class TextfieldConfiguratorRootFeatureModule {
}

// @public
export class TextfieldConfiguratorRootModule {
    // (undocumented)
    static forRoot(): ModuleWithProviders<TextfieldConfiguratorRootModule>;
}

// @public
export class TextfieldConfiguratorRoutingModule {
    // (undocumented)
    static forRoot(): ModuleWithProviders<TextfieldConfiguratorRoutingModule>;
}


// (No @packageDocumentation comment for this package)

⚠️ @spartacus/storefront

 import { Region } from '@spartacus/core';
 import { Renderer2 } from '@angular/core';
 import { RendererFactory2 } from '@angular/core';
+import { ReplaySubject } from 'rxjs';
 import { ReplenishmentOrder } from '@spartacus/core';
 import { ReplenishmentOrderList } from '@spartacus/core';
 import { ReturnRequest } from '@spartacus/core';
@@
 }
 
 // @public (undocumented)
-export class CartItemComponent implements OnInit {
-    constructor(promotionService: PromotionService);
+export class CartItemComponent implements OnInit, OnChanges {
+    constructor(promotionService: PromotionService, cartItemContext?: CartItemContext);
     // (undocumented)
     appliedProductPromotions$: Observable<PromotionResult[]>;
     // (undocumented)
+    protected cartItemContext?: CartItemContext;
+    // (undocumented)
     compact: boolean;
     // (undocumented)
+    iconTypes: typeof ICON_TYPE;
+    // (undocumented)
     isProductOutOfStock(product: any): boolean;
     // (undocumented)
     item: OrderEntry;
     // (undocumented)
+    ngOnChanges(changes: SimpleChanges): void;
+    // (undocumented)
     ngOnInit(): void;
     // (undocumented)
     options: CartItemComponentOptions;
     // (undocumented)
+    readonly Outlets: typeof CartItemComponentOutlets;
+    // (undocumented)
     promotionLocation: PromotionLocation;
     // (undocumented)
     protected promotionService: PromotionService;
@@
 }
 
 // @public (undocumented)
+export enum CartItemComponentOutlets {
+    // (undocumented)
+    INFORMATION = "cx-cart-item.information",
+    // (undocumented)
+    START = "cx-cart-item.start"
+}
+
+// @public (undocumented)
+export class CartItemContext {
+    // (undocumented)
+    context$: Observable<CartItemContextModel>;
+}
+
+// @public (undocumented)
+export interface CartItemContextModel {
+    // (undocumented)
+    compact?: boolean;
+    // (undocumented)
+    item?: OrderEntry;
+    // (undocumented)
+    options?: CartItemComponentOptions;
+    // (undocumented)
+    promotionLocation?: PromotionLocation;
+    // (undocumented)
+    quantityControl?: FormControl;
+    // (undocumented)
+    readonly?: boolean;
+}
+
+// @public (undocumented)
 export class CartItemListComponent {
     constructor(activeCartService: ActiveCartService, selectiveCartService: SelectiveCartService);
     // (undocumented)
@@
     constructor(routingService: RoutingService, productService: ProductService);
     // (undocumented)
     protected readonly DEFAULT_PRODUCT_SCOPE = ProductScope.DETAILS;
+    // (undocumented)
+    protected getCode(): Observable<string>;
     getProduct(scopes?: (ProductScope | string)[] | ProductScope | string): Observable<Product | null>;
     }
 
@@
     // (undocumented)
     CARET_RIGHT = "CARET_RIGHT",
     // (undocumented)
+    CARET_UP = "CARET_UP",
+    // (undocumented)
     CART = "CART",
     // (undocumented)
     CIRCLE = "CIRCLE",
@@
     // (undocumented)
     basePrice?: any;
     // (undocumented)
+    configurationInfos?: any[];
+    // (undocumented)
     entryNumber?: number;
     // (undocumented)
     product?: any;
     // (undocumented)
     quantity?: any;
     // (undocumented)
+    statusSummaryList?: any[];
+    // (undocumented)
     totalPrice?: any;
     // (undocumented)
     updateable?: boolean;
@@
 }
 
 // @public (undocumented)
-export class ProductGridItemComponent {
+export class ProductGridItemComponent implements OnChanges {
+    constructor(productListItemContext: ProductListItemContext);
     // (undocumented)
+    ngOnChanges(): void;
+    // (undocumented)
+    readonly Outlets: typeof ProductListOutlets;
+    // (undocumented)
     product: any;
+    // (undocumented)
+    protected productListItemContext: ProductListItemContext;
 }
 
 // @public (undocumented)
@@
 }
 
 // @public (undocumented)
-export class ProductListItemComponent {
+export class ProductListItemComponent implements OnChanges {
+    constructor(productListItemContext: ProductListItemContext);
     // (undocumented)
+    ngOnChanges(): void;
+    // (undocumented)
+    readonly Outlets: typeof ProductListOutlets;
+    // (undocumented)
     product: any;
+    // (undocumented)
+    protected productListItemContext: ProductListItemContext;
 }
 
 // @public (undocumented)
+export abstract class ProductListItemContext {
+    // (undocumented)
+    readonly product$: Observable<Product>;
+}
+
+// @public (undocumented)
+export class ProductListItemContextOwner extends ProductListItemContext {
+    // (undocumented)
+    readonly product$: ReplaySubject<Product>;
+    // (undocumented)
+    setProduct(product: Product): void;
+}
+
+// @public (undocumented)
 export class ProductListModule {
 }
 
+// @public (undocumented)
+export enum ProductListOutlets {
+    // (undocumented)
+    GRID_ITEM_END = "PLP.GRID.ITEM.END",
+    // (undocumented)
+    LIST_ITEM_END = "PLP.LIST.ITEM.END"
+}
+
 // @public
 export interface ProductListRouteParams {
     brandCode?: string;

💥 @spartacus/product/configurators/common

Entry point removed. Are you sure it was intentional?

💥 @spartacus/product/configurators/cpq

Entry point removed. Are you sure it was intentional?

💥 @spartacus/product/configurators

Entry point removed. Are you sure it was intentional?

💥 @spartacus/product/configurators/textfield

Entry point removed. Are you sure it was intentional?

💥 @spartacus/product/configurators/variant

Entry point removed. Are you sure it was intentional?

⚠️ Some entry points are currently impossible to analyze.

Read more
  • @spartacus/cdc - ERROR: "import * as ___ from ___;" is not supported yet for local files.
  • @spartacus/core - ERROR: "import * as ___ from ___;" is not supported yet for local files.
  • @spartacus/organization/administration/core - ERROR: "import * as ___ from ___;" is not supported yet for local files.
  • @spartacus/organization/order-approval - ERROR: "import * as ___ from ___;" is not supported yet for local files.
  • @spartacus/product-configurator/rulebased - ERROR: "import * as ___ from ___;" is not supported yet for local files.
  • @spartacus/storefinder/core - ERROR: "import * as ___ from ___;" is not supported yet for local files.

💰 How to debug problems?

Read more

Problem with import * as ___

Api-extractor doesn't support this namespace syntax.
Check if you really need to use namespace in the library. Try to avoid namespaces when possible.

@sonarcloud
Copy link

sonarcloud bot commented Jan 27, 2021

Kudos, SonarCloud Quality Gate passed!

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

93.3% 93.3% Coverage
0.7% 0.7% Duplication

@Platonn Platonn changed the title Epic/product configuration feat: product configurator support Jan 27, 2021
@Platonn Platonn merged commit 0209173 into develop Jan 27, 2021
@Platonn Platonn deleted the epic/product-configuration branch January 27, 2021 17:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.