Files
ISA-Frontend/libs/checkout/data-access/src/lib/services/checkout-metadata.service.ts
Lorenz Hilpert 7950994d66 Merged PR 2057: feat(checkout): add branch selection to reward catalog
feat(checkout): add branch selection to reward catalog

- Add new select-branch-dropdown library with BranchDropdownComponent
  and SelectedBranchDropdownComponent for branch selection
- Extend DropdownButtonComponent with filter and option subcomponents
- Integrate branch selection into reward catalog page
- Add BranchesResource for fetching available branches
- Update CheckoutMetadataService with branch selection persistence
- Add comprehensive tests for dropdown components

Related work items: #5464
2025-11-27 10:38:52 +00:00

79 lines
2.3 KiB
TypeScript

import { Injectable, inject } from '@angular/core';
import { TabService, getMetadataHelper } from '@isa/core/tabs';
import {
CHECKOUT_REWARD_SELECTION_POPUP_OPENED_STATE_KEY,
CHECKOUT_REWARD_SHOPPING_CART_ID_METADATA_KEY,
CHECKOUT_SHOPPING_CART_ID_METADATA_KEY,
SELECTED_BRANCH_METADATA_KEY,
} from '../constants';
import z from 'zod';
import { Branch, BranchSchema } from '../schemas/branch.schema';
@Injectable({ providedIn: 'root' })
export class CheckoutMetadataService {
#tabService = inject(TabService);
setSelectedBranch(tabId: number, branch: Branch | undefined) {
this.#tabService.patchTabMetadata(tabId, {
[SELECTED_BRANCH_METADATA_KEY]: branch,
});
}
getSelectedBranch(tabId: number): Branch | undefined {
return getMetadataHelper(
tabId,
SELECTED_BRANCH_METADATA_KEY,
BranchSchema.optional(),
this.#tabService.entityMap(),
);
}
setShoppingCartId(tabId: number, shoppingCartId: number | undefined) {
this.#tabService.patchTabMetadata(tabId, {
[CHECKOUT_SHOPPING_CART_ID_METADATA_KEY]: shoppingCartId,
});
}
getShoppingCartId(tabId: number): number | undefined {
return getMetadataHelper(
tabId,
CHECKOUT_SHOPPING_CART_ID_METADATA_KEY,
z.number().optional(),
this.#tabService.entityMap(),
);
}
setRewardShoppingCartId(tabId: number, shoppingCartId: number | undefined) {
this.#tabService.patchTabMetadata(tabId, {
[CHECKOUT_REWARD_SHOPPING_CART_ID_METADATA_KEY]: shoppingCartId,
});
}
getRewardShoppingCartId(tabId: number): number | undefined {
return getMetadataHelper(
tabId,
CHECKOUT_REWARD_SHOPPING_CART_ID_METADATA_KEY,
z.number().optional(),
this.#tabService.entityMap(),
);
}
setRewardSelectionPopupOpenedState(
tabId: number,
opened: boolean | undefined,
) {
this.#tabService.patchTabMetadata(tabId, {
[CHECKOUT_REWARD_SELECTION_POPUP_OPENED_STATE_KEY]: opened,
});
}
getRewardSelectionPopupOpenedState(tabId: number): boolean | undefined {
return getMetadataHelper(
tabId,
CHECKOUT_REWARD_SELECTION_POPUP_OPENED_STATE_KEY,
z.boolean().optional(),
this.#tabService.entityMap(),
);
}
}