From de45407d31beb53801bc0431fc1d1e1f156a0ef8 Mon Sep 17 00:00:00 2001 From: griest024 Date: Tue, 13 Feb 2024 21:48:56 -0500 Subject: [PATCH] feat(checkout,order): move placed order facade and selector to checkout (#2750) --- libs/checkout/package.json | 2 + libs/checkout/state/ng-package.json | 6 + libs/checkout/state/package.json | 3 + .../state/src/checkout-state.module.ts | 15 +++ .../placed-order-facade.interface.ts | 19 +++ .../placed-order/placed-order.facade.spec.ts | 92 +++++++++++++++ .../placed-order/placed-order.facade.ts | 38 ++++++ libs/checkout/state/src/facades/public_api.ts | 2 + libs/checkout/state/src/index.ts | 1 + libs/checkout/state/src/public_api.ts | 5 + .../src/reducers/order-reducers.interface.ts | 8 ++ .../checkout/state/src/reducers/public_api.ts | 1 + .../src/selectors/checkout-all.selector.ts | 19 +++ .../selectors/placed-order.selector.spec.ts | 111 ++++++++++++++++++ .../src/selectors/placed-order.selector.ts | 54 +++++++++ .../state/src/selectors/public_api.ts | 1 + libs/checkout/state/testing/ng-package.json | 6 + libs/checkout/state/testing/package.json | 3 + .../testing/src/checkout-testing.module.ts | 15 +++ libs/checkout/state/testing/src/index.ts | 1 + .../testing/src/mock-placed-order-facade.ts | 17 +++ libs/checkout/state/testing/src/public_api.ts | 2 + libs/checkout/testing/ng-package.json | 2 +- libs/checkout/tsconfig.json | 6 + .../facades/order/order-facade.interface.ts | 6 + .../src/selectors/order-entities.selector.ts | 4 + 26 files changed, 438 insertions(+), 1 deletion(-) create mode 100644 libs/checkout/state/ng-package.json create mode 100644 libs/checkout/state/package.json create mode 100644 libs/checkout/state/src/checkout-state.module.ts create mode 100644 libs/checkout/state/src/facades/placed-order/placed-order-facade.interface.ts create mode 100644 libs/checkout/state/src/facades/placed-order/placed-order.facade.spec.ts create mode 100644 libs/checkout/state/src/facades/placed-order/placed-order.facade.ts create mode 100644 libs/checkout/state/src/facades/public_api.ts create mode 100644 libs/checkout/state/src/index.ts create mode 100644 libs/checkout/state/src/public_api.ts create mode 100644 libs/checkout/state/src/reducers/order-reducers.interface.ts create mode 100644 libs/checkout/state/src/reducers/public_api.ts create mode 100644 libs/checkout/state/src/selectors/checkout-all.selector.ts create mode 100644 libs/checkout/state/src/selectors/placed-order.selector.spec.ts create mode 100644 libs/checkout/state/src/selectors/placed-order.selector.ts create mode 100644 libs/checkout/state/src/selectors/public_api.ts create mode 100644 libs/checkout/state/testing/ng-package.json create mode 100644 libs/checkout/state/testing/package.json create mode 100644 libs/checkout/state/testing/src/checkout-testing.module.ts create mode 100644 libs/checkout/state/testing/src/index.ts create mode 100644 libs/checkout/state/testing/src/mock-placed-order-facade.ts create mode 100644 libs/checkout/state/testing/src/public_api.ts diff --git a/libs/checkout/package.json b/libs/checkout/package.json index 24e4dec289..6bb6c206a1 100644 --- a/libs/checkout/package.json +++ b/libs/checkout/package.json @@ -31,6 +31,7 @@ "@angular/core": "0.0.0-PLACEHOLDER", "@daffodil/cart": "0.0.0-PLACEHOLDER", "@daffodil/core": "0.0.0-PLACEHOLDER", + "@daffodil/order": "0.0.0-PLACEHOLDER", "@daffodil/product": "0.0.0-PLACEHOLDER", "@ngrx/effects": "0.0.0-PLACEHOLDER", "@ngrx/entity": "0.0.0-PLACEHOLDER", @@ -44,6 +45,7 @@ "devDependencies": { "@daffodil/cart": "0.0.0-PLACEHOLDER", "@daffodil/core": "0.0.0-PLACEHOLDER", + "@daffodil/order": "0.0.0-PLACEHOLDER", "@daffodil/product": "0.0.0-PLACEHOLDER" } } diff --git a/libs/checkout/state/ng-package.json b/libs/checkout/state/ng-package.json new file mode 100644 index 0000000000..0f621f8520 --- /dev/null +++ b/libs/checkout/state/ng-package.json @@ -0,0 +1,6 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-entrypoint.schema.json", + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/libs/checkout/state/package.json b/libs/checkout/state/package.json new file mode 100644 index 0000000000..716e512cd3 --- /dev/null +++ b/libs/checkout/state/package.json @@ -0,0 +1,3 @@ +{ + "name": "@daffodil/checkout/state" +} diff --git a/libs/checkout/state/src/checkout-state.module.ts b/libs/checkout/state/src/checkout-state.module.ts new file mode 100644 index 0000000000..2911e79c68 --- /dev/null +++ b/libs/checkout/state/src/checkout-state.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; + +import { DaffCartStateModule } from '@daffodil/cart/state'; +import { DaffOrderStateModule } from '@daffodil/order/state'; + +/** + * The module for `@daffodil/checkout/state`. + */ +@NgModule({ + imports: [ + DaffCartStateModule, + DaffOrderStateModule, + ], +}) +export class DaffCheckoutStateModule {} diff --git a/libs/checkout/state/src/facades/placed-order/placed-order-facade.interface.ts b/libs/checkout/state/src/facades/placed-order/placed-order-facade.interface.ts new file mode 100644 index 0000000000..79a34f59bb --- /dev/null +++ b/libs/checkout/state/src/facades/placed-order/placed-order-facade.interface.ts @@ -0,0 +1,19 @@ +import { Action } from '@ngrx/store'; +import { Observable } from 'rxjs'; + +import { DaffStoreFacade } from '@daffodil/core/state'; +import { DaffOrder } from '@daffodil/order'; + +/** + * Represents the surface of placed order state. + */ +export interface DaffCheckoutPlacedOrderFacadeInterface extends DaffStoreFacade { + /** + * The most recently placed order (if any). + */ + placedOrder$: Observable; + /** + * Whether there is a placed order. + */ + hasPlacedOrder$: Observable; +} diff --git a/libs/checkout/state/src/facades/placed-order/placed-order.facade.spec.ts b/libs/checkout/state/src/facades/placed-order/placed-order.facade.spec.ts new file mode 100644 index 0000000000..f858b4594f --- /dev/null +++ b/libs/checkout/state/src/facades/placed-order/placed-order.facade.spec.ts @@ -0,0 +1,92 @@ +import { TestBed } from '@angular/core/testing'; +import { + StoreModule, + combineReducers, + Store, +} from '@ngrx/store'; +import { cold } from 'jasmine-marbles'; + +import { + DaffCartPlaceOrderSuccess, + daffCartReducers, + DAFF_CART_STORE_FEATURE_KEY, +} from '@daffodil/cart/state'; +import { DaffCheckoutStateRootSlice } from '@daffodil/checkout/state'; +import { DaffOrder } from '@daffodil/order'; +import { + DaffOrderLoadSuccess, + daffOrderReducers, + DAFF_ORDER_STORE_FEATURE_KEY, +} from '@daffodil/order/state'; +import { DaffOrderFactory } from '@daffodil/order/testing'; + +import { DaffCheckoutPlacedOrderFacade } from './placed-order.facade'; + +describe('@daffodil/checkout/state | DaffCheckoutPlacedOrderFacade', () => { + let store: Store; + let facade: DaffCheckoutPlacedOrderFacade; + let orderFactory: DaffOrderFactory; + + let mockOrder: DaffOrder; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ + StoreModule.forRoot({ + [DAFF_ORDER_STORE_FEATURE_KEY]: combineReducers(daffOrderReducers), + [DAFF_CART_STORE_FEATURE_KEY]: combineReducers(daffCartReducers), + }), + ], + providers: [ + DaffCheckoutPlacedOrderFacade, + ], + }); + + store = TestBed.inject(Store); + facade = TestBed.inject(DaffCheckoutPlacedOrderFacade); + orderFactory = TestBed.inject(DaffOrderFactory); + + mockOrder = orderFactory.create(); + }); + + it('should be created', () => { + expect(facade).toBeTruthy(); + }); + + it('should be able to dispatch an action to the store', () => { + spyOn(store, 'dispatch'); + const action = { type: 'SOME_TYPE' }; + + facade.dispatch(action); + expect(store.dispatch).toHaveBeenCalledWith(action); + expect(store.dispatch).toHaveBeenCalledTimes(1); + }); + + describe('placedOrder$', () => { + it('should initially be null', () => { + const expected = cold('a', { a: null }); + expect(facade.placedOrder$).toBeObservable(expected); + }); + + it('should contain the order upon a successful place order and order load', () => { + const expected = cold('a', { a: mockOrder }); + store.dispatch(new DaffCartPlaceOrderSuccess({ orderId: mockOrder.id, cartId: 'cartId' })); + store.dispatch(new DaffOrderLoadSuccess(mockOrder)); + expect(facade.placedOrder$).toBeObservable(expected); + }); + }); + + describe('hasPlacedOrder$', () => { + it('should initially be false', () => { + const expected = cold('a', { a: false }); + expect(facade.hasPlacedOrder$).toBeObservable(expected); + }); + + it('should be true upon a successful place order and order load', () => { + const expected = cold('a', { a: true }); + store.dispatch(new DaffCartPlaceOrderSuccess({ orderId: mockOrder.id, cartId: 'cartId' })); + store.dispatch(new DaffOrderLoadSuccess(mockOrder)); + expect(facade.hasPlacedOrder$).toBeObservable(expected); + }); + }); +}); diff --git a/libs/checkout/state/src/facades/placed-order/placed-order.facade.ts b/libs/checkout/state/src/facades/placed-order/placed-order.facade.ts new file mode 100644 index 0000000000..a04206b482 --- /dev/null +++ b/libs/checkout/state/src/facades/placed-order/placed-order.facade.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { + Action, + Store, + select, +} from '@ngrx/store'; +import { Observable } from 'rxjs'; + +import { DaffOrder } from '@daffodil/order'; + +import { DaffCheckoutPlacedOrderFacadeInterface } from './placed-order-facade.interface'; +import { DaffCheckoutStateRootSlice } from '../../reducers/public_api'; +import { getDaffCheckoutSelectors } from '../../selectors/public_api'; + +/** + * @inheritdoc + */ +@Injectable({ + providedIn: 'root', +}) +export class DaffCheckoutPlacedOrderFacade implements DaffCheckoutPlacedOrderFacadeInterface { + placedOrder$: Observable; + hasPlacedOrder$: Observable; + + constructor(private store: Store>) { + const { + selectPlacedOrder, + selectHasPlacedOrder, + } = getDaffCheckoutSelectors(); + + this.placedOrder$ = this.store.pipe(select(selectPlacedOrder)); + this.hasPlacedOrder$ = this.store.pipe(select(selectHasPlacedOrder)); + } + + dispatch(action: Action) { + this.store.dispatch(action); + } +} diff --git a/libs/checkout/state/src/facades/public_api.ts b/libs/checkout/state/src/facades/public_api.ts new file mode 100644 index 0000000000..f47ed77e97 --- /dev/null +++ b/libs/checkout/state/src/facades/public_api.ts @@ -0,0 +1,2 @@ +export { DaffCheckoutPlacedOrderFacadeInterface } from './placed-order/placed-order-facade.interface'; +export { DaffCheckoutPlacedOrderFacade } from './placed-order/placed-order.facade'; diff --git a/libs/checkout/state/src/index.ts b/libs/checkout/state/src/index.ts new file mode 100644 index 0000000000..4aaf8f92ed --- /dev/null +++ b/libs/checkout/state/src/index.ts @@ -0,0 +1 @@ +export * from './public_api'; diff --git a/libs/checkout/state/src/public_api.ts b/libs/checkout/state/src/public_api.ts new file mode 100644 index 0000000000..d1f1aa25ad --- /dev/null +++ b/libs/checkout/state/src/public_api.ts @@ -0,0 +1,5 @@ +export * from './selectors/public_api'; +export * from './facades/public_api'; +export * from './reducers/public_api'; + +export { DaffCheckoutStateModule } from './checkout-state.module'; diff --git a/libs/checkout/state/src/reducers/order-reducers.interface.ts b/libs/checkout/state/src/reducers/order-reducers.interface.ts new file mode 100644 index 0000000000..8ec4e80853 --- /dev/null +++ b/libs/checkout/state/src/reducers/order-reducers.interface.ts @@ -0,0 +1,8 @@ +import { DaffCartStateRootSlice } from '@daffodil/cart/state'; +import { DaffOrder } from '@daffodil/order'; +import { DaffOrderStateRootSlice } from '@daffodil/order/state'; + +/** + * The footprint of `@daffodil/checkout/state` in root. + */ +export interface DaffCheckoutStateRootSlice extends DaffCartStateRootSlice, DaffOrderStateRootSlice {} diff --git a/libs/checkout/state/src/reducers/public_api.ts b/libs/checkout/state/src/reducers/public_api.ts new file mode 100644 index 0000000000..b94b07aa7c --- /dev/null +++ b/libs/checkout/state/src/reducers/public_api.ts @@ -0,0 +1 @@ +export { DaffCheckoutStateRootSlice } from './order-reducers.interface'; diff --git a/libs/checkout/state/src/selectors/checkout-all.selector.ts b/libs/checkout/state/src/selectors/checkout-all.selector.ts new file mode 100644 index 0000000000..cc27423ed6 --- /dev/null +++ b/libs/checkout/state/src/selectors/checkout-all.selector.ts @@ -0,0 +1,19 @@ +import { DaffOrder } from '@daffodil/order'; + +import { + DaffCheckoutPlacedOrderSelectors, + getCheckoutPlacedOrderSelectors, +} from './placed-order.selector'; + +export type DaffCheckoutSelectors = DaffCheckoutPlacedOrderSelectors; + +/** + * Gets all of `@daffodil/checkout/state` selectors. + */ +export const getDaffCheckoutSelectors = (() => { + let cache; + return (): DaffCheckoutSelectors => + cache = cache || { + ...getCheckoutPlacedOrderSelectors(), + }; +})(); diff --git a/libs/checkout/state/src/selectors/placed-order.selector.spec.ts b/libs/checkout/state/src/selectors/placed-order.selector.spec.ts new file mode 100644 index 0000000000..0de760abaf --- /dev/null +++ b/libs/checkout/state/src/selectors/placed-order.selector.spec.ts @@ -0,0 +1,111 @@ +import { TestBed } from '@angular/core/testing'; +import { + Store, + select, + combineReducers, + StoreModule, +} from '@ngrx/store'; +import { cold } from 'jasmine-marbles'; + +import { + DAFF_CART_STORE_FEATURE_KEY, + daffCartReducers, + DaffCartPlaceOrderSuccess, +} from '@daffodil/cart/state'; +import { DaffCheckoutStateRootSlice } from '@daffodil/checkout/state'; +import { + DaffOrder, + DaffOrderCollection, +} from '@daffodil/order'; +import { + DaffOrderListSuccess, + daffOrderReducers, + DAFF_ORDER_STORE_FEATURE_KEY, +} from '@daffodil/order/state'; +import { + DaffOrderCollectionFactory, + DaffOrderFactory, +} from '@daffodil/order/testing'; + +import { getCheckoutPlacedOrderSelectors } from './placed-order.selector'; + +describe('@daffodil/checkout/state | getCheckoutPlacedOrderSelectors', () => { + let store: Store; + + let orderFactory: DaffOrderFactory; + let orderCollectionFactory: DaffOrderCollectionFactory; + + let mockOrder: DaffOrder; + let mockOrderCollection: DaffOrderCollection; + + const { + selectPlacedOrder, + selectHasPlacedOrder, + } = getCheckoutPlacedOrderSelectors(); + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ + StoreModule.forRoot({ + [DAFF_CART_STORE_FEATURE_KEY]: combineReducers(daffCartReducers), + [DAFF_ORDER_STORE_FEATURE_KEY]: combineReducers(daffOrderReducers), + }), + ], + }); + + store = TestBed.inject(Store); + orderFactory = TestBed.inject(DaffOrderFactory); + orderCollectionFactory = TestBed.inject(DaffOrderCollectionFactory); + + mockOrderCollection = orderCollectionFactory.create(); + mockOrder = mockOrderCollection.data[mockOrderCollection.metadata.ids[0]]; + + store.dispatch(new DaffOrderListSuccess(mockOrderCollection)); + }); + + describe('selectPlacedOrder', () => { + it('should initially be null', () => { + const selector = store.pipe(select(selectPlacedOrder)); + const expected = cold('a', { a: null }); + + expect(selector).toBeObservable(expected); + }); + + describe('when an order has been placed and loaded', () => { + beforeEach(() => { + store.dispatch(new DaffCartPlaceOrderSuccess({ orderId: mockOrder.id, cartId: 'cartId' })); + store.dispatch(new DaffOrderListSuccess(mockOrderCollection)); + }); + + it('should select the most recently placed order', () => { + const selector = store.pipe(select(selectPlacedOrder)); + const expected = cold('a', { a: mockOrder }); + + expect(selector).toBeObservable(expected); + }); + }); + }); + + describe('selectHasPlacedOrder', () => { + it('should initially be false', () => { + const selector = store.pipe(select(selectHasPlacedOrder)); + const expected = cold('a', { a: false }); + + expect(selector).toBeObservable(expected); + }); + + describe('when an order has been placed and loaded', () => { + beforeEach(() => { + store.dispatch(new DaffCartPlaceOrderSuccess({ orderId: mockOrder.id, cartId: 'cartId' })); + store.dispatch(new DaffOrderListSuccess(mockOrderCollection)); + }); + + it('should select if the most recently placed order exists', () => { + const selector = store.pipe(select(selectHasPlacedOrder)); + const expected = cold('a', { a: true }); + + expect(selector).toBeObservable(expected); + }); + }); + }); +}); diff --git a/libs/checkout/state/src/selectors/placed-order.selector.ts b/libs/checkout/state/src/selectors/placed-order.selector.ts new file mode 100644 index 0000000000..a7a81fd3e0 --- /dev/null +++ b/libs/checkout/state/src/selectors/placed-order.selector.ts @@ -0,0 +1,54 @@ +import { + createSelector, + MemoizedSelector, +} from '@ngrx/store'; + +import { getDaffCartSelectors } from '@daffodil/cart/state'; +import { DaffOrder } from '@daffodil/order'; +import { getDaffOrderSelectors } from '@daffodil/order/state'; + +import { DaffCheckoutStateRootSlice } from '../reducers/public_api'; + +/** + * Selectors for the most recently placed order. + */ +export interface DaffCheckoutPlacedOrderSelectors { + /** + * Selector for the most recently placed order (if any). + */ + selectPlacedOrder: MemoizedSelector, T>; + /** + * Selector for the existence of the most recently placed order. + */ + selectHasPlacedOrder: MemoizedSelector, boolean>; +} + +const createCheckoutPlacedOrderSelectors = (): DaffCheckoutPlacedOrderSelectors => { + const { selectCartOrderId } = getDaffCartSelectors(); + const { selectOrder, selectOrderEntities } = getDaffOrderSelectors(); + + const selectPlacedOrder = createSelector( + selectOrderEntities, + selectCartOrderId, + (orders, orderId) => orderId ? selectOrder(orderId).projector(orders) : null, + ); + + const selectHasPlacedOrder = createSelector( + selectPlacedOrder, + placedOrder => !!placedOrder, + ); + + return { + selectPlacedOrder, + selectHasPlacedOrder, + }; +}; + +/** + * Gets the placed order selectors. + */ +export const getCheckoutPlacedOrderSelectors = (() => { + let cache; + return (): DaffCheckoutPlacedOrderSelectors => + cache = cache || createCheckoutPlacedOrderSelectors(); +})(); diff --git a/libs/checkout/state/src/selectors/public_api.ts b/libs/checkout/state/src/selectors/public_api.ts new file mode 100644 index 0000000000..b3c1c53c5d --- /dev/null +++ b/libs/checkout/state/src/selectors/public_api.ts @@ -0,0 +1 @@ +export * from './checkout-all.selector'; diff --git a/libs/checkout/state/testing/ng-package.json b/libs/checkout/state/testing/ng-package.json new file mode 100644 index 0000000000..7dcb29e536 --- /dev/null +++ b/libs/checkout/state/testing/ng-package.json @@ -0,0 +1,6 @@ +{ + "$schema": "../../../../node_modules/ng-packagr/ng-entrypoint.schema.json", + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/libs/checkout/state/testing/package.json b/libs/checkout/state/testing/package.json new file mode 100644 index 0000000000..efbef7f1a7 --- /dev/null +++ b/libs/checkout/state/testing/package.json @@ -0,0 +1,3 @@ +{ + "name": "@daffodil/checkout/state/testing" +} diff --git a/libs/checkout/state/testing/src/checkout-testing.module.ts b/libs/checkout/state/testing/src/checkout-testing.module.ts new file mode 100644 index 0000000000..2879ef6f4d --- /dev/null +++ b/libs/checkout/state/testing/src/checkout-testing.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; + +import { DaffCheckoutPlacedOrderFacade } from '@daffodil/checkout/state'; + +import { MockDaffCheckoutPlacedOrderFacade } from './mock-placed-order-facade'; + +/** + * Mocks the `@daffodil/checkout/state` facades for testing purposes. + */ +@NgModule({ + providers: [ + { provide: DaffCheckoutPlacedOrderFacade, useExisting: MockDaffCheckoutPlacedOrderFacade }, + ], +}) +export class DaffCheckoutTestingModule {} diff --git a/libs/checkout/state/testing/src/index.ts b/libs/checkout/state/testing/src/index.ts new file mode 100644 index 0000000000..4aaf8f92ed --- /dev/null +++ b/libs/checkout/state/testing/src/index.ts @@ -0,0 +1 @@ +export * from './public_api'; diff --git a/libs/checkout/state/testing/src/mock-placed-order-facade.ts b/libs/checkout/state/testing/src/mock-placed-order-facade.ts new file mode 100644 index 0000000000..413f30f637 --- /dev/null +++ b/libs/checkout/state/testing/src/mock-placed-order-facade.ts @@ -0,0 +1,17 @@ +import { Injectable } from '@angular/core'; +import { Action } from '@ngrx/store'; +import { BehaviorSubject } from 'rxjs'; + +import { DaffCheckoutPlacedOrderFacadeInterface } from '@daffodil/checkout/state'; +import { DaffOrder } from '@daffodil/order'; + +/** + * @inheritdoc + */ +@Injectable({ providedIn: 'root' }) +export class MockDaffCheckoutPlacedOrderFacade implements DaffCheckoutPlacedOrderFacadeInterface { + placedOrder$: BehaviorSubject = new BehaviorSubject(null); + hasPlacedOrder$: BehaviorSubject = new BehaviorSubject(false); + + dispatch(action: Action) {}; +} diff --git a/libs/checkout/state/testing/src/public_api.ts b/libs/checkout/state/testing/src/public_api.ts new file mode 100644 index 0000000000..430295147f --- /dev/null +++ b/libs/checkout/state/testing/src/public_api.ts @@ -0,0 +1,2 @@ +export { MockDaffCheckoutPlacedOrderFacade } from './mock-placed-order-facade'; +export { DaffCheckoutTestingModule } from './checkout-testing.module'; diff --git a/libs/checkout/testing/ng-package.json b/libs/checkout/testing/ng-package.json index 22e4fdefa6..9e480669ca 100644 --- a/libs/checkout/testing/ng-package.json +++ b/libs/checkout/testing/ng-package.json @@ -1,5 +1,5 @@ { - "$schema": "../../node_modules/ng-packagr/ng-entrypoint.schema.json", + "$schema": "../../../node_modules/ng-packagr/ng-entrypoint.schema.json", "lib": { "entryFile": "src/index.ts" } diff --git a/libs/checkout/tsconfig.json b/libs/checkout/tsconfig.json index 87e3d60915..47d6367c60 100644 --- a/libs/checkout/tsconfig.json +++ b/libs/checkout/tsconfig.json @@ -9,6 +9,12 @@ "@daffodil/checkout": [ "libs/checkout/src" ], + "@daffodil/checkout/state": [ + "libs/checkout/state/src" + ], + "@daffodil/checkout/state/testing": [ + "libs/checkout/state/testing/src" + ], "@daffodil/checkout/testing": [ "libs/checkout/testing/src" ], diff --git a/libs/order/state/src/facades/order/order-facade.interface.ts b/libs/order/state/src/facades/order/order-facade.interface.ts index 8dea17279b..10cdcc07d4 100644 --- a/libs/order/state/src/facades/order/order-facade.interface.ts +++ b/libs/order/state/src/facades/order/order-facade.interface.ts @@ -20,7 +20,13 @@ export interface DaffOrderFacadeInterface exten orderCount$: Observable; orderEntities$: Observable>; + /** + * @deprecated in favor of {@link DaffCheckoutPlacedOrderFacadeInterface#placedOrder$} + */ placedOrder$: Observable; + /** + * @deprecated in favor of {@link DaffCheckoutPlacedOrderFacadeInterface#hasPlacedOrder$} + */ hasPlacedOrder$: Observable; getOrder$(orderId: T['id']): Observable; diff --git a/libs/order/state/src/selectors/order-entities.selector.ts b/libs/order/state/src/selectors/order-entities.selector.ts index 865698952f..cf5c686f34 100644 --- a/libs/order/state/src/selectors/order-entities.selector.ts +++ b/libs/order/state/src/selectors/order-entities.selector.ts @@ -45,10 +45,14 @@ export interface DaffOrderEntitySelectors { /** * Selector for the most recently placed order (if any). + * + * @deprecated in favor of {@link DaffCheckoutPlacedOrderSelectors#selectPlacedOrder} */ selectPlacedOrder: MemoizedSelector, T>; /** * Selector for the existence of the most recently placed order. + * + * @deprecated in favor of {@link DaffCheckoutPlacedOrderSelectors#selectHasPlacedOrder} */ selectHasPlacedOrder: MemoizedSelector, boolean>;