Skip to content

feat: CPQ configurator process backed by CPQ 2.0 API (CXSPA-13470)#21556

Draft
Larisa-Staroverova wants to merge 19 commits into
developfrom
feature/support_cpq_v2
Draft

feat: CPQ configurator process backed by CPQ 2.0 API (CXSPA-13470)#21556
Larisa-Staroverova wants to merge 19 commits into
developfrom
feature/support_cpq_v2

Conversation

@Larisa-Staroverova

Copy link
Copy Markdown
Contributor

No description provided.

@Larisa-Staroverova Larisa-Staroverova requested review from a team as code owners May 28, 2026 08:36
@github-actions github-actions Bot marked this pull request as draft May 28, 2026 08:36
@Larisa-Staroverova Larisa-Staroverova marked this pull request as ready for review May 29, 2026 12:16
@Larisa-Staroverova Larisa-Staroverova marked this pull request as draft May 29, 2026 12:27
@cypress

cypress Bot commented May 29, 2026

Copy link
Copy Markdown

spartacus    Run #53423

Run Properties:  status check passed Passed #53423  •  git commit bb43a969a1 ℹ️: Merge 8219fbeba7c44727307ee3ed7396c6b62bc33c3d into ca5759fdd1b26d1142e23aef3193...
Project spartacus
Branch Review feature/support_cpq_v2
Run status status check passed Passed #53423
Run duration 04m 19s
Commit git commit bb43a969a1 ℹ️: Merge 8219fbeba7c44727307ee3ed7396c6b62bc33c3d into ca5759fdd1b26d1142e23aef3193...
Committer LarisaStar
View all properties for this run ↗︎

Test results
Tests that failed  Failures 0
Tests that were flaky  Flaky 3
Tests that did not run due to a developer annotating a test with .skip  Pending 0
Tests that did not run due to a failure in a mocha hook  Skipped 0
Tests that passed  Passing 101
View all changes introduced in this branch ↗︎

@Larisa-Staroverova Larisa-Staroverova changed the title feat: CPQ configurator process backed by CPQ 2.0 API (CXSPA-12242) feat: CPQ configurator process backed by CPQ 2.0 API (CXSPA-13470) Jun 9, 2026

@ChristophHi ChristophHi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The DDLB consisting the possible value behaves strange. The 'de-select' options is rendered twice, in addition the description changes after something has been selected.

Image Image

take(1),
map((currentGroupId) => {
// Group ids of conflict groups (Configurator.GroupType.CONFLICT_GROUP) always start with 'CONFLICT'
const applicableCurrentGroupId =

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see why this change is relevant for CPQ, as we don't have conflict groups. Why is this part of the PR and what exactly does it address?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code was refactored because it did not work in conjunction with the conflict solver; specifically, the conflict group ID became unstable during a new round trip in the VCP scenario.

map((configResponse) => {
configResponse.owner = owner;
return configResponse;
return this.store.pipe(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From my pov we should not access the store from an OCC adapter. The enrichment of the configuration with an already existing state should happen in the reducer.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The intention was to prevent the call to readConfiguration, since CPQ createConfiguration already contains the data for all groups; otherwise, readConfiguration would have been used to retrieve the data for the specific group from the backend. In the VCP case, readConfiguration was to be called as usual.

@Larisa-Staroverova Larisa-Staroverova Jul 2, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A reducer is a pure function that executes after an action has been dispatched. When READ_CONFIGURATION_SUCCESS reaches the reducer, the HTTP request has already been executed (or skipped) by that point. Because reducers are designed to be free of side effects, they cannot initiate, cancel, or prevent network requests. Managing side effects is the responsibility of the effects layer (readConfiguration$, groupChange$) and, in the current implementation, the adapter.
Therefore, if the objective is to prevent readConfiguration from being called for CPQ, that logic must remain in the effect or adapter layer rather than in the reducer.

@ChristophHi ChristophHi Jul 2, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That statement is correct. Of course I didn't mean that the reducer would interfere with network requests. Still it is able to merge a new state with an existing one, together with the effects we should be able to avoid adapter calls and fetch data from the existing state

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.

2 participants