Skip to content

Commit

Permalink
feat(product): filter products based on selected organization
Browse files Browse the repository at this point in the history
  • Loading branch information
belsman committed Jan 28, 2025
1 parent 5511ac0 commit 4d2c3c1
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 31 deletions.
117 changes: 87 additions & 30 deletions packages/core/state/src/lib/+state/product/product.effects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ import { Actions, createEffect, ofType } from '@ngrx/effects';
import { of } from 'rxjs';
import { catchError, exhaustMap, map, switchMap, tap } from 'rxjs/operators';

import { ROUTER } from '@console-core/config';
import { PAGINATION, ROUTER } from '@console-core/config';
import {
IIoRestorecommerceResourcebaseReadRequest,
IoRestorecommerceResourcebaseFilterOperation,
IoRestorecommerceResourcebaseFilterValueType,
IoRestorecommerceResourcebaseSortSortOrder,
} from '@console-core/graphql';
import {
ENotificationTypes,
Expand All @@ -20,41 +22,95 @@ import { AppFacade } from '../app';

import * as productActions from './product.actions';
import { productReadOneByIdRequest } from './product.actions';
import { concatLatestFrom } from '@ngrx/operators';
import { OrganizationFacade } from '@console-core/state';

import * as organizationActions from '../management/organization/organization.actions';

const page = {
limit: PAGINATION.limit,
offset: 0,
total: 0,
};

const queryVariables: IIoRestorecommerceResourcebaseReadRequest = {
sorts: [
{
field: 'meta.created',
order: IoRestorecommerceResourcebaseSortSortOrder.Ascending,
},
],
limit: page.limit,
offset: page.offset,
};

@Injectable()
export class ProductEffects {
productReadRequest$ = createEffect(() => {
let isLoadMore = false;
return this.actions$.pipe(
ofType(productActions.productReadRequest),
exhaustMap(({ payload }) =>
this.productService.read(payload).pipe(
tap((result) => {
if (payload.offset) {
isLoadMore = payload.offset > 0;
}
this.errorHandlingService.checkStatusAndThrow(
result?.data?.catalog?.product?.Read?.details
?.operationStatus as TOperationStatus
);
}),
map((result) => {
const items = (
result?.data?.catalog?.product?.Read?.details?.items || []
)?.map((item) => item?.payload) as IProduct[];
const payload = {
items: items,
isLoadMore,
};
return productActions.productReadRequestSuccess({
payload,
});
}),
catchError((error: Error) =>
of(productActions.productReadRequestFail({ error: error.message }))
)
)
)
ofType(
productActions.productReadRequest,
organizationActions.setSelectedGlobalOrganizationId,
organizationActions.selectedGlobalOrganizationHistory,
organizationActions.setPreviousSelectedGlobalOrganizationHistory,
organizationActions.cancelSelection
),
concatLatestFrom(() => [
this.organizationFacade.globalOrganizationLeafId$,
this.organizationFacade.globalOrganizationId$,
]),
exhaustMap(([action, organizationLeaf, organization]) => {
const productActionPayload =
action.type === productActions.productReadRequest.type
? action.payload
: queryVariables;

return this.productService
.read({
...productActionPayload,
// TODO: Override more filters.
filters: [
{
filters: [
{
field: 'meta.owners[*].attributes[**].value',
operation: IoRestorecommerceResourcebaseFilterOperation.In,
value: organizationLeaf || organization,
},
],
},
],
})
.pipe(
tap((result) => {
if (productActionPayload.offset) {
isLoadMore = productActionPayload.offset > 0;
}
this.errorHandlingService.checkStatusAndThrow(
result?.data?.catalog?.product?.Read?.details
?.operationStatus as TOperationStatus
);
}),
map((result) => {
const items = (
result?.data?.catalog?.product?.Read?.details?.items || []
)?.map((item) => item?.payload) as IProduct[];
const payload = {
items: items,
isLoadMore,
};
return productActions.productReadRequestSuccess({
payload,
});
}),
catchError((error: Error) =>
of(
productActions.productReadRequestFail({ error: error.message })
)
)
);
})
);
});

Expand Down Expand Up @@ -251,6 +307,7 @@ export class ProductEffects {
private readonly router: Router,
private readonly actions$: Actions,
private readonly appFacade: AppFacade,
private readonly organizationFacade: OrganizationFacade,
private readonly productService: ProductService,
private readonly errorHandlingService: ErrorHandlingService
) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const addTemporaryMetaForCatalogSrv = (
) => {
const item = (payload.items ?? [])[0];

// Hack to this bloody catalog-srv.
//TODO Change this ASAP. Hack to this bloody catalog-srv.
if (item) {
item.meta = {
owners: [
Expand Down

0 comments on commit 4d2c3c1

Please sign in to comment.