diff --git a/composable-ui/.env.development b/composable-ui/.env.development deleted file mode 100644 index 98e5c24..0000000 --- a/composable-ui/.env.development +++ /dev/null @@ -1,2 +0,0 @@ -NEXTAUTH_URL=http://localhost:3000 -NEXTAUTH_SECRET=LOREM_IPSUM_CHANGE_ME \ No newline at end of file diff --git a/composable-ui/.env.production b/composable-ui/.env.production deleted file mode 100644 index 0cb1b7c..0000000 --- a/composable-ui/.env.production +++ /dev/null @@ -1,7 +0,0 @@ - -# NETLIFY CONFIG -## If deploying to Netlify, -## set PNPM_FLAGS to support pnpm + Next.js. See https://docs.netlify.com/configure-builds/manage-dependencies/#pnpm -## set NEXT_FORCE_EDGE_IMAGES to improve image performance. See https://docs.netlify.com/integrations/frameworks/next-js/overview/#next-image-and-edge-functions -PNPM_FLAGS=--shamefully-hoist -NEXT_FORCE_EDGE_IMAGES=true diff --git a/composable-ui/src/components/layout/header.tsx b/composable-ui/src/components/layout/header.tsx index bbba984..bf63ddf 100644 --- a/composable-ui/src/components/layout/header.tsx +++ b/composable-ui/src/components/layout/header.tsx @@ -1,6 +1,4 @@ -import { useComposable, useCart } from 'hooks' -import { Logo } from 'components/logo' -import { CartIcon } from 'components/cart' +import { useComposable } from 'hooks' import { Box, Button, @@ -10,25 +8,21 @@ import { Grid, Link, } from '@chakra-ui/react' -import { LoginAction } from './login-action' -import { cmsNavLinks } from './_data' import { HamburgerIcon } from '@chakra-ui/icons' import { useRouter } from 'next/router' import { MenuItem } from 'components/menu/menu-item' import NextLink from 'next/link' import { Heading } from '@chakra-ui/react' import { Localisation } from 'components/pos/localisation' +import { useContext } from 'react' +import { LoyaltyProgramContext } from 'components/pos/loyalty-pogram-context' export const Header = () => { - const { cart } = useCart() - const { cartDrawer, menuDrawer } = useComposable() - const { - pathname, - basePath, - query: { slug }, - } = useRouter() - - // console.log({basePath, slug, pathname}) + const { menuDrawer } = useComposable() + const { pathname } = useRouter() + const { isLoyaltyProgram, setIsLoyaltyProgram } = useContext( + LoyaltyProgramContext + ) return ( @@ -60,11 +54,19 @@ export const Header = () => { justifyContent={{ base: 'center', md: 'left' }} > - {/* */} Voucherify PoT + { state={'/' === pathname ? 'Active' : 'Default'} rootProps={{ height: 'full', + disabled: isLoyaltyProgram, }} /> - {/* */} { height: 'full', }} /> - {/* {cmsNavLinks.map((el) => { - return ( - - ) - })} */} - {/* - - - */} - diff --git a/composable-ui/src/components/pos-page.tsx b/composable-ui/src/components/pos-page.tsx index b012770..cba2c95 100644 --- a/composable-ui/src/components/pos-page.tsx +++ b/composable-ui/src/components/pos-page.tsx @@ -22,12 +22,15 @@ import { CartSummary } from './cart' import { ProductsList } from './pos/products-list' import { Customer } from './pos/customer' import { CustomerRedeemable } from './pos/customer-redeemables' -import { useState } from 'react' +import { useContext, useState } from 'react' import { LoyaltyCardsList } from './pos/loyalty-cards-list' import { Order, ProductListResponse } from '@composable/types' import { useRouter } from 'next/router' +import { LoyaltyProgramContext } from './pos/loyalty-pogram-context' +import { SelectLoyaltyProgramModal } from './select-loyalty-program' export const PosPage = () => { + const { loyaltyProgram, isLoyaltyProgram } = useContext(LoyaltyProgramContext) const intl = useIntl() const [orderAdded, setOrderAdded] = useState() const toast = useToast() @@ -52,7 +55,6 @@ export const PosPage = () => { if (order) { await deleteCart() await signOut({ redirect: false }) - // setOrderAdded(undefined) router.push(`/order/${order.voucherifyOrderId}`) } else { setOrderAdded(order) @@ -61,7 +63,6 @@ export const PosPage = () => { }) const { isLoading, isEmpty, quantity } = cart - const title = intl.formatMessage({ id: 'cart.title' }) const productCartSize: 'sm' | 'lg' | undefined = useBreakpointValue({ base: 'sm', md: 'lg', @@ -92,6 +93,10 @@ export const PosPage = () => { setOrderAdded(undefined) } + if (!isLoyaltyProgram) { + return + } + if (orderAdded) { return ( @@ -235,7 +240,7 @@ export const PosPage = () => { > Scan loyalty card - + diff --git a/composable-ui/src/components/pos/loyalty-cards-list.tsx b/composable-ui/src/components/pos/loyalty-cards-list.tsx index a5eba70..6a5bc0f 100644 --- a/composable-ui/src/components/pos/loyalty-cards-list.tsx +++ b/composable-ui/src/components/pos/loyalty-cards-list.tsx @@ -11,13 +11,18 @@ import { } from '@chakra-ui/react' import { useLoyaltyCardsList } from 'hooks/use-loyalty-cards-list' import { signIn } from 'next-auth/react' +import { CAMPAIGNS } from 'enum/campaigns' export interface LoyaltyCardsListProps { onClick?: (productId: string) => unknown + campaignId: string } -export const LoyaltyCardsList = ({ onClick }: LoyaltyCardsListProps) => { - const { status, loyaltyCardsList } = useLoyaltyCardsList() +export const LoyaltyCardsList = ({ + onClick, + campaignId, +}: LoyaltyCardsListProps) => { + const { status, loyaltyCardsList } = useLoyaltyCardsList(campaignId) if (status !== 'success') { return <> } diff --git a/composable-ui/src/components/pos/loyalty-pogram-context.tsx b/composable-ui/src/components/pos/loyalty-pogram-context.tsx new file mode 100644 index 0000000..66e21ea --- /dev/null +++ b/composable-ui/src/components/pos/loyalty-pogram-context.tsx @@ -0,0 +1,64 @@ +import { CAMPAIGNS } from 'enum/campaigns' +import { + createContext, + useState, + Dispatch, + SetStateAction, + useEffect, +} from 'react' +import { LOCAL_STORAGE_LOYALTY_PROGRAM } from 'utils/constants' +import { useLocalStorage } from 'utils/local-storage' + +type LoyaltyProgramContextType = { + loyaltyProgram: { name: CAMPAIGNS | string; id: CAMPAIGNS | string } + setLoyaltyProgram: Dispatch< + SetStateAction<{ name: CAMPAIGNS | string; id: CAMPAIGNS | string }> + > + isLoyaltyProgram: boolean + setIsLoyaltyProgram: Dispatch> +} + +export const LoyaltyProgramContext = createContext({ + loyaltyProgram: { + name: CAMPAIGNS.LOYALTY_PROGRAM, + id: CAMPAIGNS.LOYALTY_PROGRAM_ID, + }, + setLoyaltyProgram: () => {}, + isLoyaltyProgram: false, + setIsLoyaltyProgram: () => false, +}) + +const LoyaltyProgram = ({ children }: { children: JSX.Element }) => { + const [activeLoyaltyProgram] = useLocalStorage( + LOCAL_STORAGE_LOYALTY_PROGRAM, + { name: '', id: '' } + ) + const [loyaltyProgram, setLoyaltyProgram] = useState({ + name: activeLoyaltyProgram.name, + id: activeLoyaltyProgram.id, + }) + const [isLoyaltyProgram, setIsLoyaltyProgram] = useState(true) + + useEffect(() => { + if (!loyaltyProgram.id) { + setIsLoyaltyProgram(false) + } else { + setIsLoyaltyProgram(true) + } + }, [loyaltyProgram, activeLoyaltyProgram.id]) + + return ( + + {children} + + ) +} + +export default LoyaltyProgram diff --git a/composable-ui/src/components/pos/order-item-list.tsx b/composable-ui/src/components/pos/order-item-list.tsx index 621c101..23b4ac5 100644 --- a/composable-ui/src/components/pos/order-item-list.tsx +++ b/composable-ui/src/components/pos/order-item-list.tsx @@ -22,11 +22,16 @@ import { import { VoucherifyOrder } from '@composable/types' import { Price } from 'components/price' -import { useEffect, useState } from 'react' +import { useContext, useEffect, useState } from 'react' +import { LoyaltyProgramContext } from './loyalty-pogram-context' export interface LoyaltyCardsListProps { order: VoucherifyOrder | null | undefined - onReturnProducts?: (voucherifyOrderId: string, productsIds: string[]) => any + onReturnProducts?: ( + voucherifyOrderId: string, + productsIds: string[], + campaignName: string + ) => any } export const OrderItemList = ({ @@ -34,6 +39,7 @@ export const OrderItemList = ({ onReturnProducts, }: LoyaltyCardsListProps) => { const [selectedItems, setSelectedItems] = useState([]) + const { loyaltyProgram } = useContext(LoyaltyProgramContext) useEffect(() => { setSelectedItems([]) @@ -43,7 +49,7 @@ export const OrderItemList = ({ if (!order?.id) { return } - onReturnProducts?.(order.id, selectedItems) + onReturnProducts?.(order.id, selectedItems, loyaltyProgram.name) } if (!order) { return null diff --git a/composable-ui/src/components/pos/orders-list.tsx b/composable-ui/src/components/pos/orders-list.tsx index e3027e0..bcbd58f 100644 --- a/composable-ui/src/components/pos/orders-list.tsx +++ b/composable-ui/src/components/pos/orders-list.tsx @@ -37,6 +37,7 @@ export const OrdersList = ({ onClick }: LoyaltyCardsListProps) => { if (status !== 'success') { return <> } + return ( {ordersList?.length ? ( diff --git a/composable-ui/src/components/return-products-page.tsx b/composable-ui/src/components/return-products-page.tsx index 06a9d11..4d55ad4 100644 --- a/composable-ui/src/components/return-products-page.tsx +++ b/composable-ui/src/components/return-products-page.tsx @@ -26,11 +26,15 @@ import { import { Customer } from './pos/customer' import { OrdersList } from './pos/orders-list' import { useOrder } from 'hooks/use-order' -import { useState } from 'react' +import { useContext, useEffect, useState } from 'react' import { OrderItemList } from './pos/order-item-list' import dayjs from 'dayjs' +import { LoyaltyProgramContext } from './pos/loyalty-pogram-context' +import { useRouter } from 'next/router' +import { SelectLoyaltyProgramModal } from './select-loyalty-program' export const ReturnProductsPage = () => { + const { loyaltyProgram, isLoyaltyProgram } = useContext(LoyaltyProgramContext) const [orderId, setOrderId] = useState() const { order, @@ -41,10 +45,20 @@ export const ReturnProductsPage = () => { }) const onReturnProducts = ( voucherifyOrderId: string, - productsIds: string[] + productsIds: string[], + campaignName: string ) => { - returnProductsFromOrderMutation({ voucherifyOrderId, productsIds }) + returnProductsFromOrderMutation({ + voucherifyOrderId, + productsIds, + campaignName, + }) } + + if (!isLoyaltyProgram) { + return + } + return ( diff --git a/composable-ui/src/components/select-loyalty-program.tsx b/composable-ui/src/components/select-loyalty-program.tsx new file mode 100644 index 0000000..9baa337 --- /dev/null +++ b/composable-ui/src/components/select-loyalty-program.tsx @@ -0,0 +1,83 @@ +import { ChangeEvent, useContext, useState } from 'react' +import { LoyaltyProgramContext } from './pos/loyalty-pogram-context' +import { Button, Container, Select, Text } from '@chakra-ui/react' +import { CAMPAIGNS } from 'enum/campaigns' +import { writeStorage } from 'utils/local-storage' +import { LOCAL_STORAGE_LOYALTY_PROGRAM } from 'utils/constants' +import { useRouter } from 'next/router' + +export const SelectLoyaltyProgramModal = () => { + const { setLoyaltyProgram } = useContext(LoyaltyProgramContext) + const [error, setError] = useState(undefined) + const [selectedOption, setSelectedOption] = useState({ name: '', id: '' }) + const router = useRouter() + + const handleChange = (e: ChangeEvent) => { + const id = e.target.value as CAMPAIGNS + setSelectedOption({ + name: + id === CAMPAIGNS.LOYALTY_PROGRAM_ID + ? CAMPAIGNS.LOYALTY_PROGRAM + : CAMPAIGNS.LOYALTY_PROGRAM_EARN_AND_BURN, + id, + }) + } + + const handleOnClick = (loyaltyProgram: { name: string; id: string }) => { + if (!selectedOption.id) { + return setError('Select loyalty program') + } + setLoyaltyProgram(loyaltyProgram) + writeStorage(LOCAL_STORAGE_LOYALTY_PROGRAM, loyaltyProgram) + router.reload() + } + + return ( + + + Choose your loyalty program + + + {error && ( + + Select loyalty program + + )} + + + ) +} diff --git a/composable-ui/src/enum/campaigns.ts b/composable-ui/src/enum/campaigns.ts new file mode 100644 index 0000000..e0c8979 --- /dev/null +++ b/composable-ui/src/enum/campaigns.ts @@ -0,0 +1,6 @@ +export enum CAMPAIGNS { + LOYALTY_PROGRAM = 'Loyalty Program', + LOYALTY_PROGRAM_ID = 'camp_uNiE8OM847iYYQcRizXGmFss', + LOYALTY_PROGRAM_EARN_AND_BURN = 'Loyalty Program - earn and burn', + LOYALTY_PROGRAM_EARN_AND_BURN_ID = 'camp_ocQNAUiVVKEliBzVD97nF1yu', +} diff --git a/composable-ui/src/hooks/use-loyalty-cards-list.ts b/composable-ui/src/hooks/use-loyalty-cards-list.ts index 41020e5..41d82f3 100644 --- a/composable-ui/src/hooks/use-loyalty-cards-list.ts +++ b/composable-ui/src/hooks/use-loyalty-cards-list.ts @@ -7,7 +7,7 @@ import { useSession } from 'next-auth/react' const USE_LOYALTY_CARDS_LIST_KEY = 'useLoyaltyCardsListKey' -export const useLoyaltyCardsList = () => { +export const useLoyaltyCardsList = (campaignId: string) => { const session = useSession() const queryClient = useQueryClient() const { client } = api.useContext() @@ -18,7 +18,9 @@ export const useLoyaltyCardsList = () => { const { data: loyaltyCardsList, status } = useQuery( [USE_LOYALTY_CARDS_LIST_KEY, session], async () => { - const response = await client.commerce.getLoyaltyCardsList.query() + const response = await client.commerce.getLoyaltyCardsList.query({ + campaignId, + }) return response }, { diff --git a/composable-ui/src/hooks/use-order.ts b/composable-ui/src/hooks/use-order.ts index b9257bb..99c6322 100644 --- a/composable-ui/src/hooks/use-order.ts +++ b/composable-ui/src/hooks/use-order.ts @@ -49,10 +49,15 @@ export const useOrder = ( */ const returnProductsFromOrder = useMutation( ['returnProductsFromOrder'], - async (variables: { voucherifyOrderId: string; productsIds: string[] }) => { + async (variables: { + voucherifyOrderId: string + productsIds: string[] + campaignName: string + }) => { const params = { voucherifyOrderId: variables.voucherifyOrderId, productsIds: variables.productsIds, + campaignName: variables.campaignName, } const response = await client.commerce.returnProductsFromOrder.mutate( params @@ -69,11 +74,16 @@ export const useOrder = ( * Cart Item Add Mutation */ const returnProductsFromOrderMutation = useCallback( - async (params: { voucherifyOrderId: string; productsIds: string[] }) => { + async (params: { + voucherifyOrderId: string + productsIds: string[] + campaignName: string + }) => { await returnProductsFromOrder.mutate( { voucherifyOrderId: params.voucherifyOrderId, productsIds: params.productsIds, + campaignName: params.campaignName, }, { onSuccess: diff --git a/composable-ui/src/pages/_app.tsx b/composable-ui/src/pages/_app.tsx index fef2a81..e2cacb0 100644 --- a/composable-ui/src/pages/_app.tsx +++ b/composable-ui/src/pages/_app.tsx @@ -9,19 +9,25 @@ import { ErrorBoundary } from 'components/error-boundary' import { Composable } from 'components/composable' import { Layout } from 'components/layout/layout' import { GOOGLE_TAG_MANAGER_ID } from 'utils/constants' +import LoyaltyProgram from 'components/pos/loyalty-pogram-context' const App = ({ Component, pageProps: { session, ...pageProps } }: AppProps) => { return ( - - - - - - - + + + + + + + + + diff --git a/composable-ui/src/pages/api/webhooks/voucherify.ts b/composable-ui/src/pages/api/webhooks/voucherify.ts index 69fe641..b323a2f 100644 --- a/composable-ui/src/pages/api/webhooks/voucherify.ts +++ b/composable-ui/src/pages/api/webhooks/voucherify.ts @@ -36,8 +36,8 @@ const voucherifyWebhookRoute = async ( return res.status(400).json({ message }) } - if (req.body.data?.campaign?.name !== 'Journie PoT Loyalty Program') { - const message = 'Only `Journie PoT Loyalty Program` campaign supported' + if (req.body.data?.campaign?.name !== 'Loyalty Program') { + const message = 'Only `Loyalty Program` campaign supported' console.log(`[voucherifyWebhookRoute]`, message) return res.status(200).json({ message }) } diff --git a/composable-ui/src/server/api/routers/commerce/procedures/cart/loyalty-cards-list.ts b/composable-ui/src/server/api/routers/commerce/procedures/cart/loyalty-cards-list.ts index 2783ab6..a5d253f 100644 --- a/composable-ui/src/server/api/routers/commerce/procedures/cart/loyalty-cards-list.ts +++ b/composable-ui/src/server/api/routers/commerce/procedures/cart/loyalty-cards-list.ts @@ -1,7 +1,9 @@ -import { z } from 'zod' import { protectedProcedure } from 'server/api/trpc' import { commerce } from 'server/data-source' +import { z } from 'zod' -export const getLoyaltyCardsList = protectedProcedure.query(async () => { - return await commerce.getLoyaltyCardsList() -}) +export const getLoyaltyCardsList = protectedProcedure + .input(z.object({ campaignId: z.string() })) + .query(async ({ input }) => { + return await commerce.getLoyaltyCardsList({ ...input }) + }) diff --git a/composable-ui/src/server/api/routers/commerce/procedures/checkout/return-products-from-order.ts b/composable-ui/src/server/api/routers/commerce/procedures/checkout/return-products-from-order.ts index 44cfe5d..985db0b 100644 --- a/composable-ui/src/server/api/routers/commerce/procedures/checkout/return-products-from-order.ts +++ b/composable-ui/src/server/api/routers/commerce/procedures/checkout/return-products-from-order.ts @@ -7,6 +7,7 @@ export const returnProductsFromOrder = publicProcedure z.object({ voucherifyOrderId: z.string(), productsIds: z.array(z.string()), + campaignName: z.string(), }) ) .mutation(async ({ input }) => { diff --git a/composable-ui/src/utils/constants.ts b/composable-ui/src/utils/constants.ts index 1aa0f4c..d66ef7e 100644 --- a/composable-ui/src/utils/constants.ts +++ b/composable-ui/src/utils/constants.ts @@ -1,5 +1,6 @@ export const LOCAL_STORAGE_CART_ID = 'cart_id' export const LOCAL_STORAGE_CART_UPDATED_AT = 'cart_updated_at' +export const LOCAL_STORAGE_LOYALTY_PROGRAM = 'loyalty_program' export const APP_CONFIG = { NAME: 'Voucherify POS - PoT', diff --git a/packages/commerce-generic/src/services/cart/add-cart-item.ts b/packages/commerce-generic/src/services/cart/add-cart-item.ts index e8d9035..c31365e 100644 --- a/packages/commerce-generic/src/services/cart/add-cart-item.ts +++ b/packages/commerce-generic/src/services/cart/add-cart-item.ts @@ -27,7 +27,6 @@ export const addCartItem: CommerceService['addCartItem'] = async ({ } cart.summary = calculateCartSummary(cart.items) - const cartWithDiscount = await updateCartDiscount(cart, user, localisation) return saveCart(cartWithDiscount) } diff --git a/packages/commerce-generic/src/services/cart/get-loyalty-cards-list.ts b/packages/commerce-generic/src/services/cart/get-loyalty-cards-list.ts index 6a002ab..1e9f05a 100644 --- a/packages/commerce-generic/src/services/cart/get-loyalty-cards-list.ts +++ b/packages/commerce-generic/src/services/cart/get-loyalty-cards-list.ts @@ -3,8 +3,8 @@ import { getCart as getCartFromStorage } from '../../data/mock-storage' import { getLoyaltyCardsList as getLoyaltyCardsListClient } from '@composable/voucherify' export const getLoyaltyCardsList: CommerceService['getLoyaltyCardsList'] = - async () => { - const loyaltyCards = await getLoyaltyCardsListClient() + async ({ campaignId }) => { + const loyaltyCards = await getLoyaltyCardsListClient(campaignId) return loyaltyCards.map((voucher) => ({ id: voucher.id, diff --git a/packages/commerce-generic/src/services/checkout/create-order.ts b/packages/commerce-generic/src/services/checkout/create-order.ts index 29d91b1..4bbfc24 100644 --- a/packages/commerce-generic/src/services/checkout/create-order.ts +++ b/packages/commerce-generic/src/services/checkout/create-order.ts @@ -77,28 +77,28 @@ export const createOrder: CommerceService['createOrder'] = async ({ phone: user.sourceId, }, }) - const evChargingItem = updatedOrder.items.find( - (item) => item.id === 'EV Charging' - ) - const evChargeAmount = evChargingItem - ? (evChargingItem.price + evChargingItem.tax) * evChargingItem.quantity - : 0 + // const evChargingItem = updatedOrder.items.find( + // (item) => item.id === 'EV Charging' + // ) + // const evChargeAmount = evChargingItem + // ? (evChargingItem.price + evChargingItem.tax) * evChargingItem.quantity + // : 0 - const isEvChargedForOver30Dollars = evChargeAmount > 30 + // const isEvChargedForOver30Dollars = evChargeAmount > 30 - if (isEvChargedForOver30Dollars) { - analytics.track({ - userId: user.sourceId, - event: 'Ev Charged For Over 30 Dollars', - properties: { - voucherifyOrderId, - localisation, - phone: user.sourceId, - evChargeAmount, - evChargeKwh: evChargingItem?.quantity, - }, - }) - } + // if (isEvChargedForOver30Dollars) { + // analytics.track({ + // userId: user.sourceId, + // event: 'Ev Charged For Over 30 Dollars', + // properties: { + // voucherifyOrderId, + // localisation, + // phone: user.sourceId, + // evChargeAmount, + // evChargeKwh: evChargingItem?.quantity, + // }, + // }) + // } } return { ...(await saveOrder(updatedOrder)), voucherifyOrderId } } diff --git a/packages/commerce-generic/src/services/checkout/return-products-from-order.ts b/packages/commerce-generic/src/services/checkout/return-products-from-order.ts index 84bd8c7..440f510 100644 --- a/packages/commerce-generic/src/services/checkout/return-products-from-order.ts +++ b/packages/commerce-generic/src/services/checkout/return-products-from-order.ts @@ -6,10 +6,11 @@ import { returnProductsFromOrder as returnProductsFromOrderService } from '@comp //@ts-ignore export const returnProductsFromOrder: CommerceService['returnProductsFromOrder'] = - async ({ voucherifyOrderId, productsIds }) => { + async ({ voucherifyOrderId, productsIds, campaignName }) => { const order = await returnProductsFromOrderService( voucherifyOrderId, - productsIds + productsIds, + campaignName ) return order } diff --git a/packages/types/src/commerce/commerce-service.ts b/packages/types/src/commerce/commerce-service.ts index c1edf17..76d61fe 100644 --- a/packages/types/src/commerce/commerce-service.ts +++ b/packages/types/src/commerce/commerce-service.ts @@ -239,6 +239,7 @@ export interface CommerceService { returnProductsFromOrder(params: { voucherifyOrderId: string productsIds: string[] + campaignName: string }): Promise getShippingMethods(): Promise @@ -256,7 +257,7 @@ export interface CommerceService { resetPassword(params: { email: string }): Promise - getLoyaltyCardsList(): Promise + getLoyaltyCardsList(params: { campaignId: string }): Promise getOrdersList(params: { user?: UserSession diff --git a/packages/voucherify/src/discount.ts b/packages/voucherify/src/discount.ts index b8f8c93..1db80cc 100644 --- a/packages/voucherify/src/discount.ts +++ b/packages/voucherify/src/discount.ts @@ -159,13 +159,12 @@ setInterval(() => { CUSTOMERS_PHONES_CACHE.clear() }, 5 * 60 * 1000) -export const getLoyaltyCardsList = async () => { +export const getLoyaltyCardsList = async (campaignId: string) => { try { const voucherify = getVoucherify() - const membersResponse = await voucherify.loyalties.listMembers( - 'camp_uNiE8OM847iYYQcRizXGmFss', - { limit: 100 } - ) + const membersResponse = await voucherify.loyalties.listMembers(campaignId, { + limit: 100, + }) return ( ( await Promise.all( @@ -282,7 +281,8 @@ export type VoucherifyOrder = OrderCalculated & { export const returnProductsFromOrder = async ( voucherifyOrderId: string, - productsIds: string[] + productsIds: string[], + campaignName: string ) => { if (!productsIds.length) { throw new Error( @@ -313,13 +313,13 @@ export const returnProductsFromOrder = async ( const vouchersResponse = await voucherify.vouchers.list({ customer: customer.id, - campaign: 'Loyalty Program', + campaign: campaignName, }) console.log('[returnProductsFromOrder] customer vouchers', vouchersResponse) if (vouchersResponse.vouchers.length !== 1) { throw new Error( - '[returnProductsFromOrder] Customer should have one "Journie PoT Loyalty Program" card' + '[returnProductsFromOrder] Customer should have one "Loyalty Program" card' ) } @@ -339,6 +339,7 @@ export const returnProductsFromOrder = async ( null, { limit: 100, page } ) + transactions.push(...transactionsPage.data) // it looks like Voucherify opagination is broken, page param is ignored. // hasMore = transactionsPage.has_more; @@ -484,7 +485,6 @@ export const getCustomerRedeemables = async (props: { cartToVoucherifyOrder(cart), localisation ) - console.log(order, 'ORDER???') try { const voucherify = getVoucherify() const qualificationResponse =