import type * as actionTypes from '../actionTypes.js'; import type { Action } from 'redux'; import type { BlackoutError, Brand, Category, ProductCategory, WishlistItem, WishlistSet } from '@farfetch/blackout-client'; import type { MerchantEntity, ProductEntity, WishlistSetEntities } from '../../entities/types/index.js'; import type { NormalizedSchema } from 'normalizr'; import type { WishlistsState } from './state.types.js'; export type WishlistNormalizedPayload = NormalizedSchema<{ brands: Record; categories: Record; wishlistItems: Record; merchants: Record; products: Record; }, WishlistsState['result']>; export type WishlistItemActionMetadata = { from?: string; affiliation?: string; coupon?: string; position?: number; value?: number; isMainWishlist?: boolean; } & Record; export type WishlistSetsNormalizedPayload = NormalizedSchema<{ wishlistSets: WishlistSetEntities; }, Array>; export type WishlistSetNormalizedPayload = NormalizedSchema<{ wishlistSets: WishlistSetEntities; }, WishlistSet['setId']>; export type WishlistSetActionMetadata = { from?: string; } & Record; export interface FetchWishlistFailureAction extends Action { payload: { error: BlackoutError; }; type: typeof actionTypes.FETCH_WISHLIST_FAILURE; } export interface FetchWishlistRequestAction extends Action { type: typeof actionTypes.FETCH_WISHLIST_REQUEST; } export interface FetchWishlistSuccessAction extends Action { payload: WishlistNormalizedPayload; type: typeof actionTypes.FETCH_WISHLIST_SUCCESS; } export type FetchWishlistAction = FetchWishlistFailureAction | FetchWishlistRequestAction | FetchWishlistSuccessAction; export interface AddWishlistItemFailureAction extends Action { meta: { productId: ProductEntity['id']; }; payload: { error: BlackoutError; }; type: typeof actionTypes.ADD_WISHLIST_ITEM_FAILURE; } export interface AddWishlistItemRequestAction extends Action { meta: { productId: ProductEntity['id']; }; type: typeof actionTypes.ADD_WISHLIST_ITEM_REQUEST; } export interface AddWishlistItemSuccessAction extends Action { meta: { productId: ProductEntity['id']; }; payload: WishlistNormalizedPayload; type: typeof actionTypes.ADD_WISHLIST_ITEM_SUCCESS; } export type AddWishlistItemAction = AddWishlistItemFailureAction | AddWishlistItemRequestAction | AddWishlistItemSuccessAction; export interface RemoveWishlistItemFailureAction extends Action { meta: { productId: ProductEntity['id'] | undefined; wishlistItemId: WishlistItem['id']; }; payload: { error: BlackoutError; }; type: typeof actionTypes.REMOVE_WISHLIST_ITEM_FAILURE; } export interface RemoveWishlistItemRequestAction extends Action { meta: { productId: ProductEntity['id'] | undefined; wishlistItemId: WishlistItem['id']; }; type: typeof actionTypes.REMOVE_WISHLIST_ITEM_REQUEST; } export interface RemoveWishlistItemSuccessAction extends Action { meta: { productId: ProductEntity['id'] | undefined; wishlistItemId: WishlistItem['id']; }; payload: WishlistNormalizedPayload; type: typeof actionTypes.REMOVE_WISHLIST_ITEM_SUCCESS; } export type RemoveWishlistItemAction = RemoveWishlistItemFailureAction | RemoveWishlistItemRequestAction | RemoveWishlistItemSuccessAction; export interface UpdateWishlistItemFailureAction extends Action { meta: { productId: ProductEntity['id'] | undefined; wishlistItemId: WishlistItem['id']; }; payload: { error: BlackoutError; }; type: typeof actionTypes.UPDATE_WISHLIST_ITEM_FAILURE; } export interface UpdateWishlistItemRequestAction extends Action { meta: { productId: ProductEntity['id'] | undefined; wishlistItemId: WishlistItem['id']; }; type: typeof actionTypes.UPDATE_WISHLIST_ITEM_REQUEST; } export interface UpdateWishlistItemSuccessAction extends Action { meta: { productId: ProductEntity['id'] | undefined; wishlistItemId: WishlistItem['id']; }; payload: WishlistNormalizedPayload; type: typeof actionTypes.UPDATE_WISHLIST_ITEM_SUCCESS; } export type UpdateWishlistItemAction = UpdateWishlistItemFailureAction | UpdateWishlistItemRequestAction | UpdateWishlistItemSuccessAction; export interface ResetWishlistStateAction extends Action { payload: { fieldsToReset?: string[]; }; type: typeof actionTypes.RESET_WISHLIST_STATE; } export interface ResetWishlistEntitiesAction extends Action { type: typeof actionTypes.RESET_WISHLIST_ENTITIES; } export interface FetchWishlistSetsFailureAction extends Action { payload: { error: BlackoutError; }; type: typeof actionTypes.FETCH_WISHLIST_SETS_FAILURE; } export interface FetchWishlistSetsRequestAction extends Action { type: typeof actionTypes.FETCH_WISHLIST_SETS_REQUEST; } export interface FetchWishlistSetsSuccessAction extends Action { payload: WishlistSetsNormalizedPayload; type: typeof actionTypes.FETCH_WISHLIST_SETS_SUCCESS; } export type FetchWishlistSetsAction = FetchWishlistSetsRequestAction | FetchWishlistSetsFailureAction | FetchWishlistSetsSuccessAction; export interface AddWishlistSetFailureAction extends Action { payload: { error: BlackoutError; }; type: typeof actionTypes.ADD_WISHLIST_SET_FAILURE; } export interface AddWishlistSetRequestAction extends Action { type: typeof actionTypes.ADD_WISHLIST_SET_REQUEST; } export interface AddWishlistSetSuccessAction extends Action { payload: WishlistSetNormalizedPayload; type: typeof actionTypes.ADD_WISHLIST_SET_SUCCESS; } export type AddWishlistSetAction = AddWishlistSetRequestAction | AddWishlistSetFailureAction | AddWishlistSetSuccessAction; export interface FetchWishlistSetFailureAction extends Action { meta: { wishlistSetId: WishlistSet['setId']; }; payload: { error: BlackoutError; }; type: typeof actionTypes.FETCH_WISHLIST_SET_FAILURE; } export interface FetchWishlistSetRequestAction extends Action { meta: { wishlistSetId: WishlistSet['setId']; }; type: typeof actionTypes.FETCH_WISHLIST_SET_REQUEST; } export interface FetchWishlistSetSuccessAction extends Action { meta: { wishlistSetId: WishlistSet['setId']; }; payload: WishlistSetNormalizedPayload; type: typeof actionTypes.FETCH_WISHLIST_SET_SUCCESS; } export type FetchWishlistSetAction = FetchWishlistSetRequestAction | FetchWishlistSetFailureAction | FetchWishlistSetSuccessAction; export interface RemoveWishlistSetFailureAction extends Action { meta: { wishlistSetId: WishlistSet['setId']; }; payload: { error: BlackoutError; }; type: typeof actionTypes.REMOVE_WISHLIST_SET_FAILURE; } export interface RemoveWishlistSetRequestAction extends Action { meta: { wishlistSetId: WishlistSet['setId']; }; type: typeof actionTypes.REMOVE_WISHLIST_SET_REQUEST; } export interface RemoveWishlistSetSuccessAction extends Action { meta: { wishlistSetId: WishlistSet['setId']; }; type: typeof actionTypes.REMOVE_WISHLIST_SET_SUCCESS; } export type RemoveWishlistSetAction = RemoveWishlistSetRequestAction | RemoveWishlistSetFailureAction | RemoveWishlistSetSuccessAction; export interface UpdateWishlistSetFailureAction extends Action { meta: { wishlistSetId: WishlistSet['setId']; }; payload: { error: BlackoutError; }; type: typeof actionTypes.UPDATE_WISHLIST_SET_FAILURE; } export interface UpdateWishlistSetRequestAction extends Action { meta: { wishlistSetId: WishlistSet['setId']; }; type: typeof actionTypes.UPDATE_WISHLIST_SET_REQUEST; } export interface UpdateWishlistSetSuccessAction extends Action { meta: { wishlistSetId: WishlistSet['setId']; }; type: typeof actionTypes.UPDATE_WISHLIST_SET_SUCCESS; } export type UpdateWishlistSetAction = UpdateWishlistSetRequestAction | UpdateWishlistSetFailureAction | UpdateWishlistSetSuccessAction; export interface ResetWishlistSetsStateAction extends Action { payload: { fieldsToReset?: string[]; }; type: typeof actionTypes.RESET_WISHLIST_SETS_STATE; } export interface ResetWishlistSetsEntitiesAction extends Action { type: typeof actionTypes.RESET_WISHLIST_SETS_ENTITIES; }