| import { Box, Button, ButtonGroup, Card, Typography } from '@mui/material'; | import { Box, Button, ButtonGroup, Card, Typography } from '@mui/material'; | ||||
| import { useTranslation } from 'next-i18next'; | import { useTranslation } from 'next-i18next'; | ||||
| import Image from 'next/image'; | import Image from 'next/image'; | ||||
| import { useState } from 'react'; | |||||
| import { useState, FC } from 'react'; | |||||
| import { ProductData } from '../../../utils/interface/productInterface'; | |||||
| const CartCard = ({ product, initialQuantity, remove, updateQuantity }) => { | |||||
| const [quantity, setQuantity] = useState(initialQuantity); | |||||
| const { t } = useTranslation('cart'); | |||||
| return ( | |||||
| <Card | |||||
| interface Props { | |||||
| product: ProductData; | |||||
| initialQuantity: number; | |||||
| remove: (x: string) => void; | |||||
| updateQuantity: (x: string, y: number) => void; | |||||
| } | |||||
| const CartCard: FC<Props> = ({ | |||||
| product, | |||||
| initialQuantity, | |||||
| remove, | |||||
| updateQuantity, | |||||
| }) => { | |||||
| const [quantity, setQuantity] = useState(initialQuantity); | |||||
| const { t } = useTranslation('cart'); | |||||
| return ( | |||||
| <Card | |||||
| sx={{ | |||||
| backgroundColor: '#f2f2f2', | |||||
| p: 2, | |||||
| mb: 2, | |||||
| }} | |||||
| > | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| flexDirection: { xs: 'column', md: 'row' }, | |||||
| justifyContent: { xs: 'center' }, | |||||
| }} | |||||
| > | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| justifyContent: 'center', | |||||
| mb: { xs: 2, md: 0 }, | |||||
| }} | |||||
| > | |||||
| <Image src={product.image} alt="profile" width={200} height={200} /> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| alignItems: 'center', | |||||
| justifyItems: 'center', | |||||
| width: { md: '40%' }, | |||||
| }} | |||||
| > | |||||
| <Typography | |||||
| align="center" | |||||
| sx={{ | sx={{ | ||||
| backgroundColor: '#f2f2f2', | |||||
| p: 2, | |||||
| mb: 2, | |||||
| mb: { xs: 5, sm: 5, md: 0 }, | |||||
| mr: { md: 5 }, | |||||
| width: '100%', | |||||
| fontWeight: 600, | |||||
| fontSize: { xs: 20, sm: 20 }, | |||||
| }} | }} | ||||
| > | |||||
| {product?.name} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| flexDirection: { xs: 'row', md: 'column' }, | |||||
| justifyContent: 'center', | |||||
| alignItems: { xs: 'flex-end', md: 'center' }, | |||||
| mb: { xs: 5, sm: 5, md: 0 }, | |||||
| mr: { md: 5 }, | |||||
| }} | |||||
| > | > | ||||
| <Box | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| flexDirection: 'column', | |||||
| alignItems: 'flex-end', | |||||
| mr: { xs: 2, md: 0 }, | |||||
| }} | |||||
| > | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| textAlign: 'center', | |||||
| height: 16, | |||||
| fontSize: 14, | |||||
| }} | |||||
| > | |||||
| {t('cart:quantity')} | |||||
| </Typography> | |||||
| <ButtonGroup | |||||
| size="small" | |||||
| aria-label="small outlined button group" | |||||
| sx={{ | |||||
| height: 35, | |||||
| mt: 1, | |||||
| backgroundColor: 'primary.main', | |||||
| color: 'white', | |||||
| border: 0, | |||||
| }} | |||||
| > | |||||
| <Button | |||||
| sx={{ | sx={{ | ||||
| display: 'flex', | |||||
| flexDirection: { xs: 'column', md: 'row' }, | |||||
| justifyContent: { xs: 'center' }, | |||||
| color: 'white', | |||||
| fontSize: 17, | |||||
| width: 25, | |||||
| }} | }} | ||||
| > | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| justifyContent: 'center', | |||||
| mb: { xs: 2, md: 0 }, | |||||
| }} | |||||
| > | |||||
| <Image src={product.image} alt="profile" width={200} height={200} /> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| alignItems: 'center', | |||||
| justifyItems: 'center', | |||||
| width: { md: '40%' }, | |||||
| }} | |||||
| > | |||||
| <Typography | |||||
| align="center" | |||||
| sx={{ | |||||
| mb: { xs: 5, sm: 5, md: 0 }, | |||||
| mr: { md: 5 }, | |||||
| width: '100%', | |||||
| fontWeight: 600, | |||||
| fontSize: { xs: 20, sm: 20 }, | |||||
| }} | |||||
| > | |||||
| {product?.name} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| flexDirection: { xs: 'row', md: 'column' }, | |||||
| justifyContent: 'center', | |||||
| alignItems: { xs: 'flex-end', md: 'center' }, | |||||
| mb: { xs: 5, sm: 5, md: 0 }, | |||||
| mr: { md: 5 }, | |||||
| }} | |||||
| > | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| flexDirection: 'column', | |||||
| alignItems: 'flex-end', | |||||
| mr: { xs: 2, md: 0 }, | |||||
| }} | |||||
| > | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| textAlign: 'center', | |||||
| height: 16, | |||||
| fontSize: 14, | |||||
| }} | |||||
| > | |||||
| {t('cart:quantity')} | |||||
| </Typography> | |||||
| <ButtonGroup | |||||
| size="small" | |||||
| aria-label="small outlined button group" | |||||
| sx={{ | |||||
| height: 35, | |||||
| mt: 1, | |||||
| backgroundColor: 'primary.main', | |||||
| color: 'white', | |||||
| border: 0, | |||||
| }} | |||||
| > | |||||
| <Button | |||||
| sx={{ | |||||
| color: 'white', | |||||
| fontSize: 17, | |||||
| width: 25, | |||||
| }} | |||||
| onClick={() => { | |||||
| if (quantity > 1) { | |||||
| updateQuantity(product?.customID, quantity - 1); | |||||
| setQuantity((prevState) => prevState - 1); | |||||
| } | |||||
| }} | |||||
| > | |||||
| - | |||||
| </Button> | |||||
| <Button | |||||
| sx={{ | |||||
| color: 'white', | |||||
| fontSize: 15, | |||||
| width: 25, | |||||
| }} | |||||
| > | |||||
| {quantity} | |||||
| </Button> | |||||
| <Button | |||||
| sx={{ | |||||
| color: 'white', | |||||
| fontSize: 17, | |||||
| width: 25, | |||||
| }} | |||||
| onClick={() => { | |||||
| updateQuantity(product?.customID, quantity + 1); | |||||
| setQuantity((prevState) => prevState + 1); | |||||
| }} | |||||
| > | |||||
| + | |||||
| </Button> | |||||
| </ButtonGroup> | |||||
| </Box> | |||||
| <Button | |||||
| disableRipple | |||||
| sx={{ | |||||
| height: 35, | |||||
| mt: 1, | |||||
| width: 118, | |||||
| fontSize: 15, | |||||
| textTransform: 'none', | |||||
| backgroundColor: '#C6453E', | |||||
| color: 'white', | |||||
| }} | |||||
| startIcon={ | |||||
| <Image src="/images/x.svg" alt="remove" width={15} height={15} /> | |||||
| } | |||||
| onClick={() => remove(product.customID)} | |||||
| > | |||||
| {t('cart:remove')} | |||||
| </Button> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| flexDirection: 'column', | |||||
| justifyContent: 'center', | |||||
| alignItems: 'center', | |||||
| }} | |||||
| > | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| textAlign: 'center', | |||||
| height: 25, | |||||
| fontSize: { xs: 15, md: 18 }, | |||||
| }} | |||||
| > | |||||
| {t('cart:priceTag')} | |||||
| {product?.price} | |||||
| </Typography> | |||||
| </Box> | |||||
| </Box> | |||||
| </Card> | |||||
| ); | |||||
| onClick={() => { | |||||
| if (quantity > 1) { | |||||
| updateQuantity(product?.customID, quantity - 1); | |||||
| setQuantity((prevState) => prevState - 1); | |||||
| } | |||||
| }} | |||||
| > | |||||
| - | |||||
| </Button> | |||||
| <Button | |||||
| sx={{ | |||||
| color: 'white', | |||||
| fontSize: 15, | |||||
| width: 25, | |||||
| }} | |||||
| > | |||||
| {quantity} | |||||
| </Button> | |||||
| <Button | |||||
| sx={{ | |||||
| color: 'white', | |||||
| fontSize: 17, | |||||
| width: 25, | |||||
| }} | |||||
| onClick={() => { | |||||
| updateQuantity(product?.customID, quantity + 1); | |||||
| setQuantity((prevState) => prevState + 1); | |||||
| }} | |||||
| > | |||||
| + | |||||
| </Button> | |||||
| </ButtonGroup> | |||||
| </Box> | |||||
| <Button | |||||
| disableRipple | |||||
| sx={{ | |||||
| height: 35, | |||||
| mt: 1, | |||||
| width: 118, | |||||
| fontSize: 15, | |||||
| textTransform: 'none', | |||||
| backgroundColor: '#C6453E', | |||||
| color: 'white', | |||||
| }} | |||||
| startIcon={ | |||||
| <Image src="/images/x.svg" alt="remove" width={15} height={15} /> | |||||
| } | |||||
| onClick={() => remove(product.customID)} | |||||
| > | |||||
| {t('cart:remove')} | |||||
| </Button> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| flexDirection: 'column', | |||||
| justifyContent: 'center', | |||||
| alignItems: 'center', | |||||
| }} | |||||
| > | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| textAlign: 'center', | |||||
| height: 25, | |||||
| fontSize: { xs: 15, md: 18 }, | |||||
| }} | |||||
| > | |||||
| {t('cart:priceTag')} | |||||
| {product?.price} | |||||
| </Typography> | |||||
| </Box> | |||||
| </Box> | |||||
| </Card> | |||||
| ); | |||||
| }; | }; | ||||
| export default CartCard; | export default CartCard; |
| import Image from 'next/image'; | import Image from 'next/image'; | ||||
| import { useRouter } from 'next/router'; | import { useRouter } from 'next/router'; | ||||
| import { setCookie } from 'nookies'; | import { setCookie } from 'nookies'; | ||||
| import { FC } from 'react'; | |||||
| const OrderSummaryCard = ({ data }) => { | |||||
| const { t } = useTranslation('cart'); | |||||
| const router = useRouter(); | |||||
| return ( | |||||
| <Card sx={{ p: 3, width: '100%', mb: 2, backgroundColor: '#f1f1f1' }}> | |||||
| <Typography | |||||
| sx={{ | |||||
| fontSize: 26, | |||||
| color: 'primary.main', | |||||
| textAlign: 'center', | |||||
| width: '100%', | |||||
| }} | |||||
| > | |||||
| {t('cart:orderTitle')} | |||||
| </Typography> | |||||
| <Typography sx={{ mt: 4 }}> | |||||
| {t('cart:itemsTotal')} | |||||
| {data.totalPrice.toFixed(2)} | |||||
| </Typography> | |||||
| <Typography sx={{ mt: 1.5 }}>{t('cart:shipping')}</Typography> | |||||
| <Typography sx={{ mt: 1.5, mb: 1.5 }}> | |||||
| {t('cart:total')} | |||||
| {data.totalPrice.toFixed(2)} | |||||
| </Typography> | |||||
| <Divider /> | |||||
| <Box sx={{ textAlign: 'center', mt: 4, width: '100%' }}> | |||||
| <Button | |||||
| disableRipple | |||||
| sx={{ | |||||
| '&.Mui-disabled': { | |||||
| backgroundColor: '#0066ff', | |||||
| color: '#fff', | |||||
| opacity: '0.6', | |||||
| }, | |||||
| '&:hover': { | |||||
| backgroundColor: '#0066ff', | |||||
| color: 'white', | |||||
| boxShadow: 'none', | |||||
| }, | |||||
| backgroundColor: '#0066ff', | |||||
| color: 'white', | |||||
| textTransform: 'none', | |||||
| px: 2, | |||||
| }} | |||||
| startIcon={ | |||||
| <Image src="/images/lock.svg" alt="lock" width={18} height={18} /> | |||||
| } | |||||
| disabled={data.totalQuantity > 0 ? false : true} | |||||
| onClick={() => { | |||||
| router.push('/checkout'); | |||||
| setCookie(null, 'checkout-session', 'active', { | |||||
| maxAge: 3600, | |||||
| expires: new Date(Date.now() + 3600), | |||||
| path: '/', | |||||
| }); | |||||
| }} | |||||
| > | |||||
| {t('cart:proceed')} | |||||
| </Button> | |||||
| </Box> | |||||
| <Typography sx={{ mt: 3, fontSize: 13 }}>{t('cart:infoMsg')}</Typography> | |||||
| </Card> | |||||
| ); | |||||
| interface Props { | |||||
| data: { | |||||
| totalPrice: number; | |||||
| totalQuantity: number; | |||||
| }; | |||||
| } | |||||
| const OrderSummaryCard: FC<Props> = ({ data }) => { | |||||
| const { t } = useTranslation('cart'); | |||||
| const router = useRouter(); | |||||
| return ( | |||||
| <Card sx={{ p: 3, width: '100%', mb: 2, backgroundColor: '#f1f1f1' }}> | |||||
| <Typography | |||||
| sx={{ | |||||
| fontSize: 26, | |||||
| color: 'primary.main', | |||||
| textAlign: 'center', | |||||
| width: '100%', | |||||
| }} | |||||
| > | |||||
| {t('cart:orderTitle')} | |||||
| </Typography> | |||||
| <Typography sx={{ mt: 4 }}> | |||||
| {t('cart:itemsTotal')} | |||||
| {data.totalPrice.toFixed(2)} | |||||
| </Typography> | |||||
| <Typography sx={{ mt: 1.5 }}>{t('cart:shipping')}</Typography> | |||||
| <Typography sx={{ mt: 1.5, mb: 1.5 }}> | |||||
| {t('cart:total')} | |||||
| {data.totalPrice.toFixed(2)} | |||||
| </Typography> | |||||
| <Divider /> | |||||
| <Box sx={{ textAlign: 'center', mt: 4, width: '100%' }}> | |||||
| <Button | |||||
| disableRipple | |||||
| sx={{ | |||||
| '&.Mui-disabled': { | |||||
| backgroundColor: '#0066ff', | |||||
| color: '#fff', | |||||
| opacity: '0.6', | |||||
| }, | |||||
| '&:hover': { | |||||
| backgroundColor: '#0066ff', | |||||
| color: 'white', | |||||
| boxShadow: 'none', | |||||
| }, | |||||
| backgroundColor: '#0066ff', | |||||
| color: 'white', | |||||
| textTransform: 'none', | |||||
| px: 2, | |||||
| }} | |||||
| startIcon={ | |||||
| <Image src="/images/lock.svg" alt="lock" width={18} height={18} /> | |||||
| } | |||||
| disabled={data.totalQuantity > 0 ? false : true} | |||||
| onClick={() => { | |||||
| router.push('/checkout'); | |||||
| setCookie(null, 'checkout-session', 'active', { | |||||
| maxAge: 3600, | |||||
| expires: new Date(Date.now() + 3600), | |||||
| path: '/', | |||||
| }); | |||||
| }} | |||||
| > | |||||
| {t('cart:proceed')} | |||||
| </Button> | |||||
| </Box> | |||||
| <Typography sx={{ mt: 3, fontSize: 13 }}>{t('cart:infoMsg')}</Typography> | |||||
| </Card> | |||||
| ); | |||||
| }; | }; | ||||
| export default OrderSummaryCard; | export default OrderSummaryCard; |
| import { destroyCookie } from 'nookies'; | import { destroyCookie } from 'nookies'; | ||||
| import { useEffect, useState } from 'react'; | import { useEffect, useState } from 'react'; | ||||
| import { useStore, useStoreUpdate } from '../../store/cart-context'; | import { useStore, useStoreUpdate } from '../../store/cart-context'; | ||||
| import { ProductData } from '../../utils/interface/productInterface'; | |||||
| import CartCard from '../cards/cart-card/CartCard'; | import CartCard from '../cards/cart-card/CartCard'; | ||||
| import OrderSummaryCard from '../cards/order-summary-card/OrderSummaryCard'; | import OrderSummaryCard from '../cards/order-summary-card/OrderSummaryCard'; | ||||
| import EmptyCart from '../empty-cart/EmptyCart'; | import EmptyCart from '../empty-cart/EmptyCart'; | ||||
| import PageWrapper from '../layout/page-wrapper/PageWrapper'; | import PageWrapper from '../layout/page-wrapper/PageWrapper'; | ||||
| import StepTitle from '../layout/steps-title/StepTitle'; | import StepTitle from '../layout/steps-title/StepTitle'; | ||||
| interface ICartInfo { | |||||
| cartStorage: { | |||||
| product: ProductData; | |||||
| quantity: number; | |||||
| }[]; | |||||
| totalPrice: number; | |||||
| totalQuantity: number; | |||||
| } | |||||
| const CartContent = () => { | const CartContent = () => { | ||||
| const { t } = useTranslation('cart'); | const { t } = useTranslation('cart'); | ||||
| const { cartStorage, totalPrice, totalQuantity } = useStore(); | const { cartStorage, totalPrice, totalQuantity } = useStore(); | ||||
| const { removeCartValue, updateItemQuantity } = useStoreUpdate(); | const { removeCartValue, updateItemQuantity } = useStoreUpdate(); | ||||
| const [cartInfo, setCartInfo] = useState({ | |||||
| const [cartInfo, setCartInfo] = useState<ICartInfo>({ | |||||
| cartStorage: [], | cartStorage: [], | ||||
| totalPrice: 0, | totalPrice: 0, | ||||
| totalQuantity: 0, | totalQuantity: 0, |
| import { useRouter } from 'next/router'; | import { useRouter } from 'next/router'; | ||||
| import { setCookie } from 'nookies'; | import { setCookie } from 'nookies'; | ||||
| import { useEffect, useState } from 'react'; | import { useEffect, useState } from 'react'; | ||||
| import { useStore } from '../../store/cart-context'; | |||||
| import { ICart, useStore } from '../../store/cart-context'; | |||||
| import { useCheckoutDataUpdate } from '../../store/checkout-context'; | import { useCheckoutDataUpdate } from '../../store/checkout-context'; | ||||
| import CardContainer from '../cards/card-container/CardContainer'; | import CardContainer from '../cards/card-container/CardContainer'; | ||||
| import DataCard from '../cards/data-card/DataCard'; | import DataCard from '../cards/data-card/DataCard'; | ||||
| import StepTitle from '../layout/steps-title/StepTitle'; | import StepTitle from '../layout/steps-title/StepTitle'; | ||||
| import PageDescription from '../page-description/PageDescription'; | import PageDescription from '../page-description/PageDescription'; | ||||
| interface FormValues { | |||||
| fullName: string; | |||||
| address: string; | |||||
| address2: string; | |||||
| city: string; | |||||
| country: string; | |||||
| postcode: string; | |||||
| } | |||||
| const CheckoutContent = () => { | const CheckoutContent = () => { | ||||
| const { t } = useTranslation('cart'); | const { t } = useTranslation('cart'); | ||||
| const { cartStorage } = useStore(); | const { cartStorage } = useStore(); | ||||
| const { addCheckoutValue } = useCheckoutDataUpdate(); | const { addCheckoutValue } = useCheckoutDataUpdate(); | ||||
| const [cartData, setCartData] = useState([]); | |||||
| const [cartData, setCartData] = useState<ICart[]>([]); | |||||
| const { data: session } = useSession(); | const { data: session } = useSession(); | ||||
| const router = useRouter(); | const router = useRouter(); | ||||
| setCartData(cartStorage); | setCartData(cartStorage); | ||||
| }, [cartStorage]); | }, [cartStorage]); | ||||
| const submitHandler = (formValues) => { | |||||
| addCheckoutValue( | |||||
| cartData, | |||||
| { ...formValues, email: session.user.email }, | |||||
| session.user._id | |||||
| ); | |||||
| setCookie(null, 'shipping-session', 'active', { | |||||
| maxAge: 3600, | |||||
| expires: new Date(Date.now() + 3600), | |||||
| path: '/', | |||||
| }); | |||||
| router.push('/shipping'); | |||||
| const submitHandler = (formValues: FormValues) => { | |||||
| if (session?.user) { | |||||
| addCheckoutValue( | |||||
| cartData, | |||||
| { ...formValues, email: session?.user?.email }, | |||||
| session?.user?._id | |||||
| ); | |||||
| setCookie(null, 'shipping-session', 'active', { | |||||
| maxAge: 3600, | |||||
| expires: new Date(Date.now() + 3600), | |||||
| path: '/', | |||||
| }); | |||||
| router.push('/shipping'); | |||||
| } | |||||
| }; | }; | ||||
| const mapProductsToDom = () => { | const mapProductsToDom = () => { | ||||
| <ContentContainer> | <ContentContainer> | ||||
| <Box flexGrow={1} sx={{ minWidth: '65%' }}> | <Box flexGrow={1} sx={{ minWidth: '65%' }}> | ||||
| <ShippingDetailsForm | <ShippingDetailsForm | ||||
| enableBtn={false} | |||||
| backBtn={true} | backBtn={true} | ||||
| isCheckout={true} | isCheckout={true} | ||||
| submitHandler={submitHandler} | submitHandler={submitHandler} |
| import { useFormik } from 'formik'; | import { useFormik } from 'formik'; | ||||
| import { useTranslation } from 'next-i18next'; | import { useTranslation } from 'next-i18next'; | ||||
| import { useRouter } from 'next/router'; | import { useRouter } from 'next/router'; | ||||
| import { useState } from 'react'; | |||||
| import { useState, FC } from 'react'; | |||||
| import { registerSchema } from '../../../schemas/shippingDetailsSchema'; | import { registerSchema } from '../../../schemas/shippingDetailsSchema'; | ||||
| import { useUserData } from '../../../store/user-context'; | import { useUserData } from '../../../store/user-context'; | ||||
| import ErrorMessageComponent from '../../mui/ErrorMessageComponent'; | import ErrorMessageComponent from '../../mui/ErrorMessageComponent'; | ||||
| const ShippingDetailsForm = ({ | |||||
| interface FormValues { | |||||
| fullName: string; | |||||
| address: string; | |||||
| address2: string; | |||||
| city: string; | |||||
| country: string; | |||||
| postcode: string; | |||||
| } | |||||
| interface Props { | |||||
| submitHandler: (x: FormValues) => void; | |||||
| backBtn: boolean; | |||||
| isCheckout: boolean; | |||||
| enableBtn: boolean; | |||||
| } | |||||
| const ShippingDetailsForm: FC<Props> = ({ | |||||
| submitHandler, | |||||
| backBtn = false, | backBtn = false, | ||||
| isCheckout = false, | isCheckout = false, | ||||
| submitHandler, | |||||
| enableBtn = true, | enableBtn = true, | ||||
| }) => { | }) => { | ||||
| const { t } = useTranslation('addressForm'); | const { t } = useTranslation('addressForm'); | ||||
| const { userStorage } = useUserData(); | const { userStorage } = useUserData(); | ||||
| const router = useRouter(); | const router = useRouter(); | ||||
| const formikSubmitHandler = async (values) => { | |||||
| const formikSubmitHandler = async (values: FormValues) => { | |||||
| submitHandler(values); | submitHandler(values); | ||||
| }; | }; | ||||
| import { Box } from '@mui/system'; | import { Box } from '@mui/system'; | ||||
| import { FC, ReactNode } from 'react'; | |||||
| const ContentContainer = ({ children }) => { | |||||
| return ( | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| flexDirection: { xs: 'column', md: 'row' }, | |||||
| mr: { xs: 2, md: 12 }, | |||||
| ml: { xs: 2, md: 12 }, | |||||
| }} | |||||
| > | |||||
| {children} | |||||
| </Box> | |||||
| ); | |||||
| interface Props { | |||||
| children: ReactNode; | |||||
| } | |||||
| const ContentContainer: FC<Props> = ({ children }) => { | |||||
| return ( | |||||
| <Box | |||||
| sx={{ | |||||
| display: 'flex', | |||||
| flexDirection: { xs: 'column', md: 'row' }, | |||||
| mr: { xs: 2, md: 12 }, | |||||
| ml: { xs: 2, md: 12 }, | |||||
| }} | |||||
| > | |||||
| {children} | |||||
| </Box> | |||||
| ); | |||||
| }; | }; | ||||
| export default ContentContainer; | export default ContentContainer; |
| import { Box } from '@mui/system'; | import { Box } from '@mui/system'; | ||||
| import { FC, ReactNode } from 'react'; | |||||
| const PageWrapper = ({ children }) => { | |||||
| return <Box sx={{ py: 10, height: '100%', width: '100%' }}>{children}</Box>; | |||||
| interface Props { | |||||
| children: ReactNode; | |||||
| } | |||||
| const PageWrapper: FC<Props> = ({ children }) => { | |||||
| return <Box sx={{ py: 10, height: '100%', width: '100%' }}>{children}</Box>; | |||||
| }; | }; | ||||
| export default PageWrapper; | export default PageWrapper; |
| import NavigateNextIcon from '@mui/icons-material/NavigateNext'; | import NavigateNextIcon from '@mui/icons-material/NavigateNext'; | ||||
| import { Breadcrumbs, Divider, Grid, Typography } from '@mui/material'; | import { Breadcrumbs, Divider, Grid, Typography } from '@mui/material'; | ||||
| import { FC } from 'react'; | |||||
| const StepTitle = ({ title, breadcrumbsArray }) => { | |||||
| return ( | |||||
| <> | |||||
| <Grid item xs={12}> | |||||
| interface Props { | |||||
| title: string; | |||||
| breadcrumbsArray: string[]; | |||||
| } | |||||
| const StepTitle: FC<Props> = ({ title, breadcrumbsArray }) => { | |||||
| return ( | |||||
| <> | |||||
| <Grid item xs={12}> | |||||
| <Typography | |||||
| variant="h4" | |||||
| sx={{ | |||||
| ml: { xs: 2, md: 12 }, | |||||
| mt: 12, | |||||
| height: '100%', | |||||
| color: 'primary.main', | |||||
| }} | |||||
| > | |||||
| {title} | |||||
| </Typography> | |||||
| </Grid> | |||||
| <Grid item xs={12}> | |||||
| <Divider | |||||
| sx={{ | |||||
| backgroundColor: 'primary.main', | |||||
| ml: { xs: 2, md: 12 }, | |||||
| mr: { xs: 2, md: 12 }, | |||||
| }} | |||||
| /> | |||||
| </Grid> | |||||
| <Grid item xs={12} sx={{ mt: 4 }}> | |||||
| <Breadcrumbs | |||||
| aria-label="breadcrumb" | |||||
| separator={<NavigateNextIcon fontSize="small" />} | |||||
| sx={{ ml: { xs: 2, md: 12 }, fontSize: 20 }} | |||||
| > | |||||
| {breadcrumbsArray && | |||||
| breadcrumbsArray.map((entry, index) => { | |||||
| return ( | |||||
| <Typography | <Typography | ||||
| variant="h4" | |||||
| sx={{ | |||||
| ml: { xs: 2, md: 12 }, | |||||
| mt: 12, | |||||
| height: '100%', | |||||
| color: 'primary.main', | |||||
| }} | |||||
| sx={{ fontSize: { xs: '16px', md: '22px' } }} | |||||
| key={index} | |||||
| color={ | |||||
| index === breadcrumbsArray.length - 1 ? 'red' : 'black' | |||||
| } | |||||
| > | > | ||||
| {title} | |||||
| {entry} | |||||
| </Typography> | </Typography> | ||||
| </Grid> | |||||
| <Grid item xs={12}> | |||||
| <Divider | |||||
| sx={{ | |||||
| backgroundColor: 'primary.main', | |||||
| ml: { xs: 2, md: 12 }, | |||||
| mr: { xs: 2, md: 12 }, | |||||
| }} | |||||
| /> | |||||
| </Grid> | |||||
| <Grid item xs={12} sx={{ mt: 4 }}> | |||||
| <Breadcrumbs | |||||
| aria-label="breadcrumb" | |||||
| separator={<NavigateNextIcon fontSize="small" />} | |||||
| sx={{ ml: { xs: 2, md: 12 }, fontSize: 20 }} | |||||
| > | |||||
| {breadcrumbsArray && | |||||
| breadcrumbsArray.map((entry, index) => { | |||||
| return ( | |||||
| <Typography | |||||
| sx={{ fontSize: { xs: '16px', md: '22px' } }} | |||||
| key={index} | |||||
| color={ | |||||
| index === breadcrumbsArray.length - 1 ? 'red' : 'black' | |||||
| } | |||||
| > | |||||
| {entry} | |||||
| </Typography> | |||||
| ); | |||||
| })} | |||||
| </Breadcrumbs> | |||||
| </Grid> | |||||
| </> | |||||
| ); | |||||
| ); | |||||
| })} | |||||
| </Breadcrumbs> | |||||
| </Grid> | |||||
| </> | |||||
| ); | |||||
| }; | }; | ||||
| export default StepTitle; | export default StepTitle; |
| import { destroyCookie } from 'nookies'; | import { destroyCookie } from 'nookies'; | ||||
| import { useEffect, useState } from 'react'; | import { useEffect, useState } from 'react'; | ||||
| import { postOrder } from '../../requests/products/postOrderRequest'; | |||||
| import { postOrder } from '../../requests/orders/postOrderRequest'; | |||||
| import { useStoreUpdate } from '../../store/cart-context'; | import { useStoreUpdate } from '../../store/cart-context'; | ||||
| import { | import { | ||||
| useCheckoutData, | |||||
| useCheckoutDataUpdate, | |||||
| useCheckoutData, | |||||
| useCheckoutDataUpdate, | |||||
| } from '../../store/checkout-context'; | } from '../../store/checkout-context'; | ||||
| import PageWrapper from '../layout/page-wrapper/PageWrapper'; | import PageWrapper from '../layout/page-wrapper/PageWrapper'; | ||||
| import StepTitle from '../layout/steps-title/StepTitle'; | import StepTitle from '../layout/steps-title/StepTitle'; | ||||
| let initialRender = true; | let initialRender = true; | ||||
| const ReviewContent = () => { | const ReviewContent = () => { | ||||
| const { t } = useTranslation('review'); | |||||
| const { checkoutStorage } = useCheckoutData(); | |||||
| const { parseCheckoutValue, clearCheckout } = useCheckoutDataUpdate(); | |||||
| const { clearCart } = useStoreUpdate(); | |||||
| const [orderData, setOrderData] = useState({}); | |||||
| const { t } = useTranslation('review'); | |||||
| const { checkoutStorage } = useCheckoutData(); | |||||
| const { parseCheckoutValue, clearCheckout } = useCheckoutDataUpdate(); | |||||
| const { clearCart } = useStoreUpdate(); | |||||
| const [orderData, setOrderData] = useState({}); | |||||
| const router = useRouter(); | |||||
| const router = useRouter(); | |||||
| useEffect(() => { | |||||
| if (initialRender) { | |||||
| setOrderData(parseCheckoutValue()); | |||||
| postOrder(parseCheckoutValue()); | |||||
| initialRender = false; | |||||
| return () => { | |||||
| clearCheckout(); | |||||
| clearCart(); | |||||
| destroyCookie(null, 'checkout-session', { | |||||
| path: '/', | |||||
| }); | |||||
| destroyCookie(null, 'shipping-session', { | |||||
| path: '/', | |||||
| }); | |||||
| destroyCookie(null, 'review-session', { | |||||
| path: '/', | |||||
| }); | |||||
| }; | |||||
| } | |||||
| }, [checkoutStorage]); | |||||
| useEffect(() => { | |||||
| if (initialRender) { | |||||
| setOrderData(parseCheckoutValue()); | |||||
| postOrder(parseCheckoutValue()); | |||||
| initialRender = false; | |||||
| return () => { | |||||
| clearCheckout(); | |||||
| clearCart(); | |||||
| destroyCookie(null, 'checkout-session', { | |||||
| path: '/', | |||||
| }); | |||||
| destroyCookie(null, 'shipping-session', { | |||||
| path: '/', | |||||
| }); | |||||
| destroyCookie(null, 'review-session', { | |||||
| path: '/', | |||||
| }); | |||||
| }; | |||||
| } | |||||
| }, [checkoutStorage]); | |||||
| return ( | |||||
| <PageWrapper> | |||||
| <StepTitle | |||||
| title="Review" | |||||
| breadcrumbsArray={['Cart', 'Checkout', 'Shipping', 'Payment', 'Review']} | |||||
| /> | |||||
| <Box sx={{ ml: { xs: 2 }, mr: { xs: 2 }, mt: 6 }}> | |||||
| <Box> | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| textAlign: 'center', | |||||
| color: 'primary.main', | |||||
| fontWeight: 600, | |||||
| fontSize: 22, | |||||
| }} | |||||
| > | |||||
| {t('review:orderMsg')} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box sx={{ mt: 1 }}> | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| fontWeight: 600, | |||||
| mt: 2, | |||||
| textAlign: 'center', | |||||
| }} | |||||
| > | |||||
| {t('review:note')} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box sx={{ mt: 1 }}> | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| textAlign: 'center', | |||||
| mt: 4, | |||||
| mb: 4, | |||||
| fontSize: 44, | |||||
| fontWeight: 600, | |||||
| }} | |||||
| > | |||||
| {t('review:title')} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| backgroundColor: '#f2f2f2', | |||||
| my: 1, | |||||
| ml: { md: 12 }, | |||||
| mr: { md: 12 }, | |||||
| borderRadius: 2, | |||||
| p: 2, | |||||
| }} | |||||
| > | |||||
| <Typography sx={{ fontSize: 18, fontWeight: 600 }}> | |||||
| {t('review:date')} | |||||
| {orderData.time} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| backgroundColor: '#f2f2f2', | |||||
| ml: { md: 12 }, | |||||
| mr: { md: 12 }, | |||||
| borderRadius: 2, | |||||
| p: 2, | |||||
| my: 1, | |||||
| }} | |||||
| > | |||||
| <Typography sx={{ fontSize: 18, fontWeight: 600 }}> | |||||
| {t('review:email')} | |||||
| {orderData?.shippingAddress?.email} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| backgroundColor: '#f2f2f2', | |||||
| ml: { md: 12 }, | |||||
| mr: { md: 12 }, | |||||
| borderRadius: 2, | |||||
| p: 2, | |||||
| my: 1, | |||||
| }} | |||||
| > | |||||
| <Typography sx={{ fontSize: 18, fontWeight: 600 }}> | |||||
| {t('review:total')} | |||||
| {orderData?.totalPrice?.toFixed(2)} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| backgroundColor: '#f2f2f2', | |||||
| ml: { md: 12 }, | |||||
| mr: { md: 12 }, | |||||
| borderRadius: 2, | |||||
| p: 2, | |||||
| my: 1, | |||||
| }} | |||||
| > | |||||
| <Typography sx={{ fontSize: 18, fontWeight: 600 }}> | |||||
| {t('review:shipping')} | |||||
| {orderData?.shippingAddress?.address},{' '} | |||||
| {orderData?.shippingAddress?.city},{' '} | |||||
| {orderData?.shippingAddress?.country},{' '} | |||||
| {orderData?.shippingAddress?.postcode} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box sx={{ mt: 1 }}> | |||||
| <Box | |||||
| sx={{ | |||||
| width: '100%', | |||||
| display: 'flex', | |||||
| justifyContent: 'center', | |||||
| mt: 2, | |||||
| borderRadius: 2, | |||||
| p: 1, | |||||
| }} | |||||
| > | |||||
| <Button | |||||
| variant="contained" | |||||
| sx={{ | |||||
| mt: 3, | |||||
| mb: 2, | |||||
| height: 50, | |||||
| width: 150, | |||||
| textTransform: 'none', | |||||
| backgroundColor: '#CBA213', | |||||
| color: 'white', | |||||
| mr: 2, | |||||
| fontSize: 16, | |||||
| }} | |||||
| onClick={() => { | |||||
| router.push('/'); | |||||
| }} | |||||
| > | |||||
| {t('review:back')} | |||||
| </Button> | |||||
| </Box> | |||||
| </Box> | |||||
| </Box> | |||||
| </PageWrapper> | |||||
| ); | |||||
| return ( | |||||
| <PageWrapper> | |||||
| <StepTitle | |||||
| title="Review" | |||||
| breadcrumbsArray={['Cart', 'Checkout', 'Shipping', 'Payment', 'Review']} | |||||
| /> | |||||
| <Box sx={{ ml: { xs: 2 }, mr: { xs: 2 }, mt: 6 }}> | |||||
| <Box> | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| textAlign: 'center', | |||||
| color: 'primary.main', | |||||
| fontWeight: 600, | |||||
| fontSize: 22, | |||||
| }} | |||||
| > | |||||
| {t('review:orderMsg')} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box sx={{ mt: 1 }}> | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| fontWeight: 600, | |||||
| mt: 2, | |||||
| textAlign: 'center', | |||||
| }} | |||||
| > | |||||
| {t('review:note')} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box sx={{ mt: 1 }}> | |||||
| <Typography | |||||
| sx={{ | |||||
| width: '100%', | |||||
| textAlign: 'center', | |||||
| mt: 4, | |||||
| mb: 4, | |||||
| fontSize: 44, | |||||
| fontWeight: 600, | |||||
| }} | |||||
| > | |||||
| {t('review:title')} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| backgroundColor: '#f2f2f2', | |||||
| my: 1, | |||||
| ml: { md: 12 }, | |||||
| mr: { md: 12 }, | |||||
| borderRadius: 2, | |||||
| p: 2, | |||||
| }} | |||||
| > | |||||
| <Typography sx={{ fontSize: 18, fontWeight: 600 }}> | |||||
| {t('review:date')} | |||||
| {orderData.time} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| backgroundColor: '#f2f2f2', | |||||
| ml: { md: 12 }, | |||||
| mr: { md: 12 }, | |||||
| borderRadius: 2, | |||||
| p: 2, | |||||
| my: 1, | |||||
| }} | |||||
| > | |||||
| <Typography sx={{ fontSize: 18, fontWeight: 600 }}> | |||||
| {t('review:email')} | |||||
| {orderData?.shippingAddress?.email} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| backgroundColor: '#f2f2f2', | |||||
| ml: { md: 12 }, | |||||
| mr: { md: 12 }, | |||||
| borderRadius: 2, | |||||
| p: 2, | |||||
| my: 1, | |||||
| }} | |||||
| > | |||||
| <Typography sx={{ fontSize: 18, fontWeight: 600 }}> | |||||
| {t('review:total')} | |||||
| {orderData?.totalPrice?.toFixed(2)} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box | |||||
| sx={{ | |||||
| backgroundColor: '#f2f2f2', | |||||
| ml: { md: 12 }, | |||||
| mr: { md: 12 }, | |||||
| borderRadius: 2, | |||||
| p: 2, | |||||
| my: 1, | |||||
| }} | |||||
| > | |||||
| <Typography sx={{ fontSize: 18, fontWeight: 600 }}> | |||||
| {t('review:shipping')} | |||||
| {orderData?.shippingAddress?.address},{' '} | |||||
| {orderData?.shippingAddress?.city},{' '} | |||||
| {orderData?.shippingAddress?.country},{' '} | |||||
| {orderData?.shippingAddress?.postcode} | |||||
| </Typography> | |||||
| </Box> | |||||
| <Box sx={{ mt: 1 }}> | |||||
| <Box | |||||
| sx={{ | |||||
| width: '100%', | |||||
| display: 'flex', | |||||
| justifyContent: 'center', | |||||
| mt: 2, | |||||
| borderRadius: 2, | |||||
| p: 1, | |||||
| }} | |||||
| > | |||||
| <Button | |||||
| variant="contained" | |||||
| sx={{ | |||||
| mt: 3, | |||||
| mb: 2, | |||||
| height: 50, | |||||
| width: 150, | |||||
| textTransform: 'none', | |||||
| backgroundColor: '#CBA213', | |||||
| color: 'white', | |||||
| mr: 2, | |||||
| fontSize: 16, | |||||
| }} | |||||
| onClick={() => { | |||||
| router.push('/'); | |||||
| }} | |||||
| > | |||||
| {t('review:back')} | |||||
| </Button> | |||||
| </Box> | |||||
| </Box> | |||||
| </Box> | |||||
| </PageWrapper> | |||||
| ); | |||||
| }; | }; | ||||
| export default ReviewContent; | export default ReviewContent; |
| const validator = require('validator'); | const validator = require('validator'); | ||||
| import { ProductData as IProduct } from '../utils/interface/productInterface'; | import { ProductData as IProduct } from '../utils/interface/productInterface'; | ||||
| import { OrderData as IOrder } from '../utils/interface/orderInterface'; | import { OrderData as IOrder } from '../utils/interface/orderInterface'; | ||||
| import { Schema, model, Types } from 'mongoose'; | |||||
| import { Schema, model, Types, models } from 'mongoose'; | |||||
| const OrderSchema = new Schema<IOrder>( | const OrderSchema = new Schema<IOrder>( | ||||
| { | { | ||||
| products: Array<IProduct>, | products: Array<IProduct>, | ||||
| } | } | ||||
| ); | ); | ||||
| const Order = model<IOrder>('Order', OrderSchema, 'Order'); | |||||
| const Order = models.Order || model<IOrder>('Order', OrderSchema, 'Order'); | |||||
| module.exports = Order; | module.exports = Order; |
| import { ProductData as IProduct } from '../utils/interface/productInterface'; | import { ProductData as IProduct } from '../utils/interface/productInterface'; | ||||
| import { Schema, model } from 'mongoose'; | |||||
| import { Schema, model, models } from 'mongoose'; | |||||
| const ProductSchema = new Schema<IProduct>({ | const ProductSchema = new Schema<IProduct>({ | ||||
| category: { | category: { | ||||
| }, | }, | ||||
| }); | }); | ||||
| const Product = model<IProduct>('Product', ProductSchema); | |||||
| const Product = models.Product || model<IProduct>('Product', ProductSchema); | |||||
| module.exports = Product; | module.exports = Product; |
| import { Schema, model } from 'mongoose'; | |||||
| import { Schema, model, models } from 'mongoose'; | |||||
| import { QuestionData as IQusetion } from '../utils/interface/questionInterface'; | import { QuestionData as IQusetion } from '../utils/interface/questionInterface'; | ||||
| const validator = require('validator'); | const validator = require('validator'); | ||||
| }, | }, | ||||
| }); | }); | ||||
| const Question = model<IQusetion>('Question', QuestionSchema, 'Questions'); | |||||
| const Question = | |||||
| models.Question || model<IQusetion>('Question', QuestionSchema, 'Questions'); | |||||
| module.exports = Question; | module.exports = Question; |
| import { Schema, model, Model } from 'mongoose'; | |||||
| import { Schema, model, Model, models } from 'mongoose'; | |||||
| import { | import { | ||||
| hashPassword, | hashPassword, | ||||
| verifyPassword, | verifyPassword, | ||||
| next(); | next(); | ||||
| }); | }); | ||||
| const User = model<IUser, UserModel>('User', UserSchema, 'User'); | |||||
| const User = models.User || model<IUser, UserModel>('User', UserSchema, 'User'); | |||||
| module.exports = User; | module.exports = User; |
| "@mui/codemod": "^5.10.8", | "@mui/codemod": "^5.10.8", | ||||
| "@mui/icons-material": "^5.10.6", | "@mui/icons-material": "^5.10.6", | ||||
| "@mui/material": "^5.10.8", | "@mui/material": "^5.10.8", | ||||
| "@sendgrid/mail": "^7.7.0", | |||||
| "@stripe/stripe-js": "^1.39.0", | "@stripe/stripe-js": "^1.39.0", | ||||
| "@tanstack/react-query": "^4.10.3", | "@tanstack/react-query": "^4.10.3", | ||||
| "@types/bcryptjs": "^2.4.2", | |||||
| "@types/mongodb": "^4.0.7", | "@types/mongodb": "^4.0.7", | ||||
| "@types/nookies": "^2.0.3", | |||||
| "@types/validator": "^13.7.7", | |||||
| "bcryptjs": "^2.4.3", | |||||
| "formik": "^2.2.9", | "formik": "^2.2.9", | ||||
| "mongoose": "^6.6.5", | |||||
| "next": "12.3.1", | "next": "12.3.1", | ||||
| "next-auth": "^4.13.0", | "next-auth": "^4.13.0", | ||||
| "next-i18next": "^11.3.0", | "next-i18next": "^11.3.0", | ||||
| "react": "18.2.0", | "react": "18.2.0", | ||||
| "react-dom": "18.2.0", | "react-dom": "18.2.0", | ||||
| "react-i18next": "^11.18.6", | "react-i18next": "^11.18.6", | ||||
| "yup": "^0.32.11", | |||||
| "@sendgrid/mail": "^7.7.0", | |||||
| "@types/bcryptjs": "^2.4.2", | |||||
| "@types/validator": "^13.7.7", | |||||
| "bcryptjs": "^2.4.3", | |||||
| "mongoose": "^6.6.5", | |||||
| "validator": "^13.7.0" | |||||
| "validator": "^13.7.0", | |||||
| "yup": "^0.32.11" | |||||
| }, | }, | ||||
| "devDependencies": { | "devDependencies": { | ||||
| "@tanstack/react-query-devtools": "^4.11.0", | "@tanstack/react-query-devtools": "^4.11.0", |
| import dbConnect from '../../../utils/helpers/dbHelpers'; | import dbConnect from '../../../utils/helpers/dbHelpers'; | ||||
| const User = require('../../../models/user'); | const User = require('../../../models/user'); | ||||
| // @ts-ignore | |||||
| export default NextAuth({ | export default NextAuth({ | ||||
| session: { | session: { | ||||
| strategy: 'jwt', | |||||
| // @ts-ignore | |||||
| jwt: true, | |||||
| }, | }, | ||||
| callbacks: { | callbacks: { | ||||
| async jwt({ token, user, account, profile, isNewUser }) { | |||||
| async jwt({ token, user }) { | |||||
| return { ...token, ...user }; | return { ...token, ...user }; | ||||
| }, | }, | ||||
| async session({ session, token, user }) { | |||||
| return session; | |||||
| // @ts-ignore | |||||
| async session({ token }) { | |||||
| return token; | |||||
| }, | }, | ||||
| }, | }, | ||||
| providers: [ | providers: [ | ||||
| Credentials({ | Credentials({ | ||||
| name: 'Credentials', | |||||
| credentials: { | |||||
| username: { label: 'Username', type: 'text' }, | |||||
| password: { label: 'Password', type: 'password' }, | |||||
| }, | |||||
| // @ts-ignore | // @ts-ignore | ||||
| async authorize(credentials) { | async authorize(credentials) { | ||||
| if (credentials) { | |||||
| await dbConnect(); | |||||
| await dbConnect(); | |||||
| const userData = await User.findByCredentials( | |||||
| credentials.username, | |||||
| credentials.password | |||||
| ); | |||||
| return { user: userData }; | |||||
| } | |||||
| return null; | |||||
| // @ts-ignore | |||||
| const userData = await User.findByCredentials( | |||||
| // @ts-ignore | |||||
| credentials.username, | |||||
| // @ts-ignore | |||||
| credentials.password | |||||
| ); | |||||
| return { user: userData }; | |||||
| }, | }, | ||||
| }), | }), | ||||
| ], | ], |
| import { NextPage } from 'next'; | |||||
| import { NextPage, GetStaticProps } from 'next'; | |||||
| import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; | import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; | ||||
| import CartContent from '../../components/cart-content/CartContent'; | import CartContent from '../../components/cart-content/CartContent'; | ||||
| const CartPage: NextPage = () => { | const CartPage: NextPage = () => { | ||||
| return <CartContent></CartContent>; | |||||
| return <CartContent></CartContent>; | |||||
| }; | }; | ||||
| export async function getStaticProps({ locale }: any) { | |||||
| return { | |||||
| props: { | |||||
| ...(await serverSideTranslations(locale, ['cart'])), | |||||
| }, | |||||
| }; | |||||
| } | |||||
| export const getStaticProps: GetStaticProps = async ({ locale }: any) => { | |||||
| return { | |||||
| props: { | |||||
| ...(await serverSideTranslations(locale, ['cart'])), | |||||
| }, | |||||
| }; | |||||
| }; | |||||
| export default CartPage; | export default CartPage; |
| import { NextPage } from 'next'; | |||||
| import { NextPage, GetServerSideProps } from 'next'; | |||||
| import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; | import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; | ||||
| import nookies from 'nookies'; | import nookies from 'nookies'; | ||||
| import CheckoutContent from '../../components/checkout-content/CheckoutContent'; | import CheckoutContent from '../../components/checkout-content/CheckoutContent'; | ||||
| return <CheckoutContent></CheckoutContent>; | return <CheckoutContent></CheckoutContent>; | ||||
| }; | }; | ||||
| export const getServerSideProps = async (ctx: any) => { | |||||
| export const getServerSideProps: GetServerSideProps = async (ctx: any) => { | |||||
| const cookies = nookies.get(ctx); | const cookies = nookies.get(ctx); | ||||
| if (!cookies['checkout-session']) { | if (!cookies['checkout-session']) { |
| import { createContext, useContext, useState } from 'react'; | |||||
| import { createContext, useContext, useState, FC, ReactNode } from 'react'; | |||||
| import { getStorage, setStorage } from '../utils/helpers/storage'; | import { getStorage, setStorage } from '../utils/helpers/storage'; | ||||
| const StorageContext = createContext({ | |||||
| import { ProductData } from '../utils/interface/productInterface'; | |||||
| export interface ICart { | |||||
| product: ProductData; | |||||
| quantity: number; | |||||
| } | |||||
| interface IStorage { | |||||
| cartStorage: ICart[]; | |||||
| totalPrice: number; | |||||
| totalQuantity: number; | |||||
| } | |||||
| interface IStorageDispatch { | |||||
| addCartValue: (x: ProductData, y: number) => void; | |||||
| clearCart: () => void; | |||||
| removeCartValue: (x: string) => void; | |||||
| updateItemQuantity: (x: string, y: number) => void; | |||||
| } | |||||
| interface Props { | |||||
| children: ReactNode; | |||||
| } | |||||
| const StorageContext = createContext<IStorage>({ | |||||
| cartStorage: [], | cartStorage: [], | ||||
| totalPrice: 0, | totalPrice: 0, | ||||
| totalQuantity: 0, | totalQuantity: 0, | ||||
| }); | }); | ||||
| const StorageDispatchContext = createContext({ | |||||
| addCartValue: (product, quantity) => {}, | |||||
| const StorageDispatchContext = createContext<IStorageDispatch>({ | |||||
| addCartValue: (product: ProductData, quantity: number) => {}, | |||||
| clearCart: () => {}, | clearCart: () => {}, | ||||
| removeCartValue: (productId) => {}, | |||||
| setCartStorage: (cart) => {}, | |||||
| updateItemQuantity: (productId, quantity) => {}, | |||||
| removeCartValue: (productId: string) => {}, | |||||
| updateItemQuantity: (productId: string, quantity: number) => {}, | |||||
| }); | }); | ||||
| export const useStore = () => { | export const useStore = () => { | ||||
| const useStorage = () => { | const useStorage = () => { | ||||
| const CART_KEY = 'cart-products'; | const CART_KEY = 'cart-products'; | ||||
| const [cartStorage, setCartStorage] = useState(getStorage(CART_KEY)); | |||||
| const [totalPrice, setTotalPrice] = useState(() => { | |||||
| const cart = getStorage(CART_KEY); | |||||
| const [cartStorage, setCartStorage] = useState<ICart[]>(getStorage(CART_KEY)); | |||||
| const [totalPrice, setTotalPrice] = useState<number>(() => { | |||||
| const cart: ICart[] = getStorage(CART_KEY); | |||||
| if (cart && cart.length) { | if (cart && cart.length) { | ||||
| return cart | return cart | ||||
| .map((entry) => entry?.product.price * entry?.quantity) | .map((entry) => entry?.product.price * entry?.quantity) | ||||
| .reduce((accum, curValue) => accum + curValue); | |||||
| .reduce((accum: number, curValue: number) => accum + curValue); | |||||
| } else { | } else { | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| }); | }); | ||||
| const [totalQuantity, setTotalQuantity] = useState(() => { | |||||
| const [totalQuantity, setTotalQuantity] = useState<number>(() => { | |||||
| const cart = getStorage(CART_KEY); | const cart = getStorage(CART_KEY); | ||||
| if (cart && cart.length) { | if (cart && cart.length) { | ||||
| } | } | ||||
| }); | }); | ||||
| const addCartValue = (product, quantity) => { | |||||
| const items = getStorage(CART_KEY); | |||||
| const addCartValue = (product: ProductData, quantity: number) => { | |||||
| const items: ICart[] = getStorage(CART_KEY); | |||||
| if (!items) { | if (!items) { | ||||
| setStorage(CART_KEY, [{ product, quantity }]); | |||||
| setStorage(CART_KEY, { product, quantity }); | |||||
| } else { | } else { | ||||
| const isItemDuplicate = items.some( | const isItemDuplicate = items.some( | ||||
| (item) => item.product.customID === product.customID | (item) => item.product.customID === product.customID | ||||
| if (!isItemDuplicate) { | if (!isItemDuplicate) { | ||||
| items.push({ product, quantity }); | items.push({ product, quantity }); | ||||
| setTotalQuantity((prevState) => prevState + 1); | |||||
| setTotalQuantity((prevState: number) => prevState + 1); | |||||
| setStorage(CART_KEY, items); | setStorage(CART_KEY, items); | ||||
| } else { | } else { | ||||
| return; | return; | ||||
| setCartStorage(items); | setCartStorage(items); | ||||
| }; | }; | ||||
| const updateItemQuantity = (productId, quantity) => { | |||||
| const updateItemQuantity = (productId: string, quantity: number) => { | |||||
| if (quantity < 0) return; | if (quantity < 0) return; | ||||
| const items = getStorage(CART_KEY); | |||||
| const items: ICart[] = getStorage(CART_KEY); | |||||
| let updatedItems = items; | let updatedItems = items; | ||||
| if (items) { | if (items) { | ||||
| }; | }; | ||||
| const clearCart = () => { | const clearCart = () => { | ||||
| setStorage(CART_KEY, []); | |||||
| setStorage(CART_KEY, {}); | |||||
| setTotalQuantity(0); | setTotalQuantity(0); | ||||
| setTotalPrice(0); | setTotalPrice(0); | ||||
| setCartStorage([]); | setCartStorage([]); | ||||
| }; | }; | ||||
| const removeCartValue = (productId) => { | |||||
| const items = getStorage(CART_KEY); | |||||
| const removeCartValue = (productId: string) => { | |||||
| const items: ICart[] = getStorage(CART_KEY); | |||||
| const newStorage = items?.filter( | const newStorage = items?.filter( | ||||
| (item) => item.product.customID !== productId | (item) => item.product.customID !== productId | ||||
| .reduce((accum, curValue) => accum + curValue); | .reduce((accum, curValue) => accum + curValue); | ||||
| setTotalPrice(newTotalPrice); | setTotalPrice(newTotalPrice); | ||||
| } | } | ||||
| setTotalQuantity((prevState) => prevState - 1); | |||||
| setTotalQuantity((prevState: number) => prevState - 1); | |||||
| setStorage(CART_KEY, newStorage); | setStorage(CART_KEY, newStorage); | ||||
| setCartStorage(newStorage); | setCartStorage(newStorage); | ||||
| }; | }; | ||||
| }; | }; | ||||
| }; | }; | ||||
| const StorageProvider = ({ children }) => { | |||||
| const StorageProvider: FC<Props> = ({ children }) => { | |||||
| const { | const { | ||||
| cartStorage, | cartStorage, | ||||
| totalPrice, | totalPrice, | ||||
| addCartValue, | addCartValue, | ||||
| clearCart, | clearCart, | ||||
| removeCartValue, | removeCartValue, | ||||
| setCartStorage, | |||||
| updateItemQuantity, | updateItemQuantity, | ||||
| }} | }} | ||||
| > | > |
| import { createContext, useContext, useState } from 'react'; | |||||
| import { createContext, useContext, useState, FC, ReactNode } from 'react'; | |||||
| import { getSStorage, setSStorage } from '../utils/helpers/storage'; | import { getSStorage, setSStorage } from '../utils/helpers/storage'; | ||||
| const CheckoutContext = createContext({ | |||||
| checkoutStorage: {}, | |||||
| import { ShippingData } from '../utils/interface/orderInterface'; | |||||
| import { ProductData } from '../utils/interface/productInterface'; | |||||
| import { UserData } from '../utils/interface/userInterface'; | |||||
| interface Props { | |||||
| children: ReactNode; | |||||
| } | |||||
| interface Products { | |||||
| product: ProductData; | |||||
| quantity: number; | |||||
| } | |||||
| interface CheckoutData { | |||||
| products: Products[]; | |||||
| userInfo: ShippingData; | |||||
| userID: string; | |||||
| } | |||||
| interface OrderData { | |||||
| products: Array<ProductData>; | |||||
| time: string; | |||||
| shippingAddress: ShippingData; | |||||
| totalPrice: number; | |||||
| numberOfItems: number; | |||||
| fulfilled: boolean; | |||||
| owner: string; | |||||
| stripeCheckoutId: string; | |||||
| } | |||||
| interface ICheckout { | |||||
| checkoutStorage: CheckoutData; | |||||
| } | |||||
| interface ICheckoutDispatch { | |||||
| addCheckoutValue: (x: Products[], y: ShippingData, z: string) => void; | |||||
| changeContact: (x: string) => void; | |||||
| changeShippingData: (x: ShippingData) => void; | |||||
| clearCheckout: () => void; | |||||
| parseCheckoutValue: () => OrderData; | |||||
| } | |||||
| const CheckoutContext = createContext<ICheckout>({ | |||||
| checkoutStorage: {} as CheckoutData, | |||||
| }); | }); | ||||
| const CheckoutDispatchContext = createContext({ | |||||
| addCheckoutValue: (products, userInfo, userID) => {}, | |||||
| changeContact: (email) => {}, | |||||
| changeShippingData: (shippingData) => {}, | |||||
| const CheckoutDispatchContext = createContext<ICheckoutDispatch>({ | |||||
| addCheckoutValue: ( | |||||
| products: Products[], | |||||
| userInfo: ShippingData, | |||||
| userID: string | |||||
| ) => {}, | |||||
| changeContact: (email: string) => {}, | |||||
| changeShippingData: (shippingData: ShippingData) => {}, | |||||
| clearCheckout: () => {}, | clearCheckout: () => {}, | ||||
| parseCheckoutValue: () => {}, | |||||
| parseCheckoutValue: () => { | |||||
| return {} as OrderData; | |||||
| }, | |||||
| }); | }); | ||||
| export const useCheckoutData = () => { | export const useCheckoutData = () => { | ||||
| const useCheckout = () => { | const useCheckout = () => { | ||||
| const CHECKOUT_KEY = 'checkout-data'; | const CHECKOUT_KEY = 'checkout-data'; | ||||
| const [checkoutStorage, setCheckoutStorage] = useState( | |||||
| const [checkoutStorage, setCheckoutStorage] = useState<CheckoutData>( | |||||
| getSStorage(CHECKOUT_KEY) | getSStorage(CHECKOUT_KEY) | ||||
| ); | ); | ||||
| const addCheckoutValue = (products, userInfo, userID) => { | |||||
| const addCheckoutValue = ( | |||||
| products: Products[], | |||||
| userInfo: ShippingData, | |||||
| userID: string | |||||
| ) => { | |||||
| setSStorage(CHECKOUT_KEY, { products, userInfo, userID }); | setSStorage(CHECKOUT_KEY, { products, userInfo, userID }); | ||||
| setCheckoutStorage({ products, userInfo, userID }); | setCheckoutStorage({ products, userInfo, userID }); | ||||
| const clearCheckout = () => { | const clearCheckout = () => { | ||||
| setSStorage(CHECKOUT_KEY, {}); | setSStorage(CHECKOUT_KEY, {}); | ||||
| setCheckoutStorage({}); | |||||
| setCheckoutStorage({} as CheckoutData); | |||||
| }; | }; | ||||
| const parseCheckoutValue = () => { | const parseCheckoutValue = () => { | ||||
| return dataToStore; | return dataToStore; | ||||
| }; | }; | ||||
| const changeContact = (email) => { | |||||
| const items = getSStorage(CHECKOUT_KEY); | |||||
| const changeContact = (email: string) => { | |||||
| const items: CheckoutData = getSStorage(CHECKOUT_KEY); | |||||
| items.userInfo.email = email; | items.userInfo.email = email; | ||||
| setSStorage(CHECKOUT_KEY, { ...items }); | setSStorage(CHECKOUT_KEY, { ...items }); | ||||
| setCheckoutStorage(items); | setCheckoutStorage(items); | ||||
| }; | }; | ||||
| const changeShippingData = (shippingData) => { | |||||
| const items = getSStorage(CHECKOUT_KEY); | |||||
| const changeShippingData = (shippingData: ShippingData) => { | |||||
| const items: CheckoutData = getSStorage(CHECKOUT_KEY); | |||||
| items.userInfo = { email: items.userInfo.email, ...shippingData }; | |||||
| items.userInfo = { ...shippingData, email: items.userInfo.email }; | |||||
| setSStorage(CHECKOUT_KEY, { ...items }); | setSStorage(CHECKOUT_KEY, { ...items }); | ||||
| parseCheckoutValue, | parseCheckoutValue, | ||||
| changeContact, | changeContact, | ||||
| changeShippingData, | changeShippingData, | ||||
| setCheckoutStorage, | |||||
| checkoutStorage, | checkoutStorage, | ||||
| }; | }; | ||||
| }; | }; | ||||
| const CheckoutProvider = ({ children }) => { | |||||
| const CheckoutProvider: FC<Props> = ({ children }) => { | |||||
| const { | const { | ||||
| checkoutStorage, | checkoutStorage, | ||||
| setCheckoutStorage, | |||||
| addCheckoutValue, | addCheckoutValue, | ||||
| clearCheckout, | clearCheckout, | ||||
| parseCheckoutValue, | parseCheckoutValue, | ||||
| <CheckoutContext.Provider value={{ checkoutStorage }}> | <CheckoutContext.Provider value={{ checkoutStorage }}> | ||||
| <CheckoutDispatchContext.Provider | <CheckoutDispatchContext.Provider | ||||
| value={{ | value={{ | ||||
| setCheckoutStorage, | |||||
| addCheckoutValue, | addCheckoutValue, | ||||
| clearCheckout, | clearCheckout, | ||||
| parseCheckoutValue, | parseCheckoutValue, |
| import { createContext, useContext, useState } from 'react'; | |||||
| import { createContext, useContext, useState, FC, ReactNode } from 'react'; | |||||
| import { | import { | ||||
| getStorage, | getStorage, | ||||
| removeStorage, | removeStorage, | ||||
| setStorage, | setStorage, | ||||
| } from '../utils/helpers/storage'; | } from '../utils/helpers/storage'; | ||||
| import { UserData } from '../utils/interface/userInterface'; | |||||
| const UserContext = createContext({ | |||||
| userStorage: [], | |||||
| interface Props { | |||||
| children: ReactNode; | |||||
| } | |||||
| interface IUserContext { | |||||
| userStorage: UserData; | |||||
| } | |||||
| interface IUserDispatch { | |||||
| addUser: (x: UserData) => void; | |||||
| clearUser: () => void; | |||||
| updateUserInfo: (x: UserData) => void; | |||||
| } | |||||
| const UserContext = createContext<IUserContext>({ | |||||
| userStorage: {} as UserData, | |||||
| }); | }); | ||||
| const UserDispatchContext = createContext({ | |||||
| addUser: (userData) => {}, | |||||
| const UserDispatchContext = createContext<IUserDispatch>({ | |||||
| addUser: (userData: UserData) => {}, | |||||
| clearUser: () => {}, | clearUser: () => {}, | ||||
| updateUserInfo: (newUserData) => {}, | |||||
| updateUserInfo: (newUserData: UserData) => {}, | |||||
| }); | }); | ||||
| export const useUserData = () => { | export const useUserData = () => { | ||||
| const USER_KEY = 'user-data'; | const USER_KEY = 'user-data'; | ||||
| const [userStorage, setUserStorage] = useState(getStorage(USER_KEY)); | const [userStorage, setUserStorage] = useState(getStorage(USER_KEY)); | ||||
| const addUser = (userData) => { | |||||
| const addUser = (userData: UserData) => { | |||||
| setStorage(USER_KEY, userData); | setStorage(USER_KEY, userData); | ||||
| setUserStorage(userData); | setUserStorage(userData); | ||||
| }; | }; | ||||
| const updateUserInfo = (newUserData) => { | |||||
| const updateUserInfo = (newUserData: UserData) => { | |||||
| setStorage(USER_KEY, newUserData); | setStorage(USER_KEY, newUserData); | ||||
| setUserStorage(newUserData); | setUserStorage(newUserData); | ||||
| }; | }; | ||||
| return { | return { | ||||
| userStorage, | userStorage, | ||||
| setUserStorage, | |||||
| addUser, | addUser, | ||||
| updateUserInfo, | updateUserInfo, | ||||
| clearUser, | clearUser, | ||||
| }; | }; | ||||
| }; | }; | ||||
| const UserProvider = ({ children }) => { | |||||
| const { userStorage, setUserStorage, addUser, updateUserInfo, clearUser } = | |||||
| useUser(); | |||||
| const UserProvider: FC<Props> = ({ children }) => { | |||||
| const { userStorage, addUser, updateUserInfo, clearUser } = useUser(); | |||||
| return ( | return ( | ||||
| <UserContext.Provider value={{ userStorage }}> | <UserContext.Provider value={{ userStorage }}> | ||||
| <UserDispatchContext.Provider | <UserDispatchContext.Provider | ||||
| value={{ | value={{ | ||||
| setUserStorage, | |||||
| addUser, | addUser, | ||||
| updateUserInfo, | updateUserInfo, | ||||
| clearUser, | clearUser, |
| "jsx": "preserve", | "jsx": "preserve", | ||||
| "incremental": true | "incremental": true | ||||
| }, | }, | ||||
| "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], | |||||
| "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "types/**/*.ts"], | |||||
| "exclude": ["node_modules"] | "exclude": ["node_modules"] | ||||
| } | } |
| import NextAuth from 'next-auth'; | |||||
| import { UserData } from '../utils/interface/userInterface'; | |||||
| declare module 'next-auth' { | |||||
| /** | |||||
| * Returned by `useSession`, `getSession` and received as a prop on the `SessionProvider` React Context | |||||
| */ | |||||
| interface Session { | |||||
| user: { | |||||
| address: string; | |||||
| address2: string; | |||||
| city: string; | |||||
| country: string; | |||||
| fullName: string; | |||||
| postcode: string; | |||||
| email: string; | |||||
| _id: string; | |||||
| }; | |||||
| } | |||||
| } |
| export const setStorage = (key: string, value: string) => { | |||||
| export const setStorage = (key: string, value: object) => { | |||||
| window.localStorage.setItem(key, JSON.stringify(value)); | window.localStorage.setItem(key, JSON.stringify(value)); | ||||
| }; | }; | ||||
| window.localStorage.removeItem(key); | window.localStorage.removeItem(key); | ||||
| }; | }; | ||||
| export const setSStorage = (key: string, value: string) => { | |||||
| export const setSStorage = (key: string, value: object) => { | |||||
| window.sessionStorage.setItem(key, JSON.stringify(value)); | window.sessionStorage.setItem(key, JSON.stringify(value)); | ||||
| }; | }; | ||||
| import { UserData } from './userInterface'; | import { UserData } from './userInterface'; | ||||
| import { ObjectId } from 'mongodb'; | import { ObjectId } from 'mongodb'; | ||||
| interface ShippingData extends UserData { | |||||
| export interface ShippingData extends UserData { | |||||
| email: string; | email: string; | ||||
| } | } | ||||
| dependencies: | dependencies: | ||||
| regenerator-runtime "^0.13.4" | regenerator-runtime "^0.13.4" | ||||
| <<<<<<< HEAD | |||||
| "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.19.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": | "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.19.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": | ||||
| ======= | |||||
| "@babel/runtime@^7.16.3": | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| version "7.19.4" | version "7.19.4" | ||||
| resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" | ||||
| integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== | integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== | ||||
| dependencies: | dependencies: | ||||
| regenerator-runtime "^0.13.4" | regenerator-runtime "^0.13.4" | ||||
| <<<<<<< HEAD | |||||
| "@babel/template@^7.18.10": | "@babel/template@^7.18.10": | ||||
| version "7.18.10" | version "7.18.10" | ||||
| resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" | ||||
| resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" | resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" | ||||
| integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== | integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| "@eslint/eslintrc@^1.3.3": | "@eslint/eslintrc@^1.3.3": | ||||
| version "1.3.3" | version "1.3.3" | ||||
| resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" | ||||
| resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.2.tgz#bab0f09d09de9fd83628220d496627681bc440d6" | resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.2.tgz#bab0f09d09de9fd83628220d496627681bc440d6" | ||||
| integrity sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA== | integrity sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA== | ||||
| <<<<<<< HEAD | |||||
| "@popperjs/core@^2.11.6": | "@popperjs/core@^2.11.6": | ||||
| version "2.11.6" | version "2.11.6" | ||||
| resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" | resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" | ||||
| integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== | integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| "@rushstack/eslint-patch@^1.1.3": | "@rushstack/eslint-patch@^1.1.3": | ||||
| version "1.2.0" | version "1.2.0" | ||||
| resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" | resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz#8be36a1f66f3265389e90b5f9c9962146758f728" | ||||
| integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== | integrity sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg== | ||||
| <<<<<<< HEAD | |||||
| "@stripe/stripe-js@^1.39.0": | |||||
| version "1.39.0" | |||||
| resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.39.0.tgz#b70d4d276862771c4b2c86558795358e08f0b77e" | |||||
| integrity sha512-BR7yzewVSBQgRao3V4HsTldpO4HpJUKcIlMDmBQaHqXUvkMpXHgOMF8/CZgFVMACS+pqvZIMmGuy3YvZlLEA2w== | |||||
| ======= | |||||
| "@sendgrid/client@^7.7.0": | "@sendgrid/client@^7.7.0": | ||||
| version "7.7.0" | version "7.7.0" | ||||
| resolved "https://registry.yarnpkg.com/@sendgrid/client/-/client-7.7.0.tgz#f8f67abd604205a0d0b1af091b61517ef465fdbf" | resolved "https://registry.yarnpkg.com/@sendgrid/client/-/client-7.7.0.tgz#f8f67abd604205a0d0b1af091b61517ef465fdbf" | ||||
| dependencies: | dependencies: | ||||
| "@sendgrid/client" "^7.7.0" | "@sendgrid/client" "^7.7.0" | ||||
| "@sendgrid/helpers" "^7.7.0" | "@sendgrid/helpers" "^7.7.0" | ||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| "@stripe/stripe-js@^1.39.0": | |||||
| version "1.39.0" | |||||
| resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.39.0.tgz#b70d4d276862771c4b2c86558795358e08f0b77e" | |||||
| integrity sha512-BR7yzewVSBQgRao3V4HsTldpO4HpJUKcIlMDmBQaHqXUvkMpXHgOMF8/CZgFVMACS+pqvZIMmGuy3YvZlLEA2w== | |||||
| "@swc/[email protected]": | "@swc/[email protected]": | ||||
| version "0.4.11" | version "0.4.11" | ||||
| dependencies: | dependencies: | ||||
| tslib "^2.4.0" | tslib "^2.4.0" | ||||
| <<<<<<< HEAD | |||||
| "@tanstack/match-sorter-utils@^8.1.1": | "@tanstack/match-sorter-utils@^8.1.1": | ||||
| version "8.5.14" | version "8.5.14" | ||||
| resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.5.14.tgz#12efcd536abe491d09521e0242bc4d51442f8a8a" | resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.5.14.tgz#12efcd536abe491d09521e0242bc4d51442f8a8a" | ||||
| "@tanstack/query-core" "4.10.3" | "@tanstack/query-core" "4.10.3" | ||||
| use-sync-external-store "^1.2.0" | use-sync-external-store "^1.2.0" | ||||
| "@types/bcryptjs@^2.4.2": | |||||
| version "2.4.2" | |||||
| resolved "https://registry.yarnpkg.com/@types/bcryptjs/-/bcryptjs-2.4.2.tgz#e3530eac9dd136bfdfb0e43df2c4c5ce1f77dfae" | |||||
| integrity sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ== | |||||
| "@types/hoist-non-react-statics@^3.3.1": | "@types/hoist-non-react-statics@^3.3.1": | ||||
| version "3.3.1" | version "3.3.1" | ||||
| resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" | resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" | ||||
| dependencies: | dependencies: | ||||
| "@types/react" "*" | "@types/react" "*" | ||||
| hoist-non-react-statics "^3.3.0" | hoist-non-react-statics "^3.3.0" | ||||
| ======= | |||||
| "@types/bcryptjs@^2.4.2": | |||||
| version "2.4.2" | |||||
| resolved "https://registry.yarnpkg.com/@types/bcryptjs/-/bcryptjs-2.4.2.tgz#e3530eac9dd136bfdfb0e43df2c4c5ce1f77dfae" | |||||
| integrity sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ== | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| "@types/json5@^0.0.29": | "@types/json5@^0.0.29": | ||||
| version "0.0.29" | version "0.0.29" | ||||
| resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.3.tgz#ce750ab4017effa51aed6a7230651778d54e327c" | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.3.tgz#ce750ab4017effa51aed6a7230651778d54e327c" | ||||
| integrity sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w== | integrity sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w== | ||||
| "@types/nookies@^2.0.3": | |||||
| version "2.0.3" | |||||
| resolved "https://registry.yarnpkg.com/@types/nookies/-/nookies-2.0.3.tgz#2173e8977a9163defc37fdcc3140a834f21373d1" | |||||
| integrity sha512-+PO/CKwVx7gDG5Pjr+UU/hL6/vFm1ppgW8cilV4AreLEpjbz0wiFvZ5Nld1VIRTr/RiB/KFmiyOzr8GboJfpqg== | |||||
| dependencies: | |||||
| nookies "*" | |||||
| "@types/parse-json@^4.0.0": | "@types/parse-json@^4.0.0": | ||||
| version "4.0.0" | version "4.0.0" | ||||
| resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" | resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" | ||||
| resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" | ||||
| integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== | ||||
| <<<<<<< HEAD | |||||
| base@^0.11.1: | base@^0.11.1: | ||||
| version "0.11.2" | version "0.11.2" | ||||
| resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" | ||||
| isobject "^3.0.1" | isobject "^3.0.1" | ||||
| mixin-deep "^1.2.0" | mixin-deep "^1.2.0" | ||||
| pascalcase "^0.1.1" | pascalcase "^0.1.1" | ||||
| ======= | |||||
| bcryptjs@^2.4.3: | bcryptjs@^2.4.3: | ||||
| version "2.4.3" | version "2.4.3" | ||||
| resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" | resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" | ||||
| integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ== | integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ== | ||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| brace-expansion@^1.1.7: | brace-expansion@^1.1.7: | ||||
| version "1.1.11" | version "1.1.11" | ||||
| dependencies: | dependencies: | ||||
| fill-range "^7.0.1" | fill-range "^7.0.1" | ||||
| <<<<<<< HEAD | |||||
| browserslist@^4.21.3: | browserslist@^4.21.3: | ||||
| version "4.21.4" | version "4.21.4" | ||||
| resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" | ||||
| node-releases "^2.0.6" | node-releases "^2.0.6" | ||||
| update-browserslist-db "^1.0.9" | update-browserslist-db "^1.0.9" | ||||
| bson@^4.7.0: | |||||
| ======= | |||||
| bson@^4.6.5, bson@^4.7.0: | bson@^4.6.5, bson@^4.7.0: | ||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| version "4.7.0" | version "4.7.0" | ||||
| resolved "https://registry.yarnpkg.com/bson/-/bson-4.7.0.tgz#7874a60091ffc7a45c5dd2973b5cad7cded9718a" | resolved "https://registry.yarnpkg.com/bson/-/bson-4.7.0.tgz#7874a60091ffc7a45c5dd2973b5cad7cded9718a" | ||||
| integrity sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA== | integrity sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA== | ||||
| resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" | ||||
| integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== | ||||
| <<<<<<< HEAD | |||||
| convert-source-map@^1.5.0, convert-source-map@^1.7.0: | convert-source-map@^1.5.0, convert-source-map@^1.7.0: | ||||
| version "1.8.0" | version "1.8.0" | ||||
| resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" | ||||
| resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" | ||||
| integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== | integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| cookie@^0.5.0: | cookie@^0.5.0: | ||||
| version "0.5.0" | version "0.5.0" | ||||
| resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" | ||||
| integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== | ||||
| <<<<<<< HEAD | |||||
| copy-anything@^3.0.2: | copy-anything@^3.0.2: | ||||
| version "3.0.2" | version "3.0.2" | ||||
| resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.2.tgz#7189171ff5e1893b2287e8bf574b8cd448ed50b1" | resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.2.tgz#7189171ff5e1893b2287e8bf574b8cd448ed50b1" | ||||
| resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" | ||||
| integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== | integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| core-js-pure@^3.25.1: | core-js-pure@^3.25.1: | ||||
| version "3.25.5" | version "3.25.5" | ||||
| resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.25.5.tgz#79716ba54240c6aa9ceba6eee08cf79471ba184d" | resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.25.5.tgz#79716ba54240c6aa9ceba6eee08cf79471ba184d" | ||||
| resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" | resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" | ||||
| integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== | integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== | ||||
| <<<<<<< HEAD | |||||
| debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: | |||||
| ======= | |||||
| [email protected], debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: | |||||
| [email protected], debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: | |||||
| version "4.3.4" | version "4.3.4" | ||||
| resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" | ||||
| integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== | ||||
| dependencies: | dependencies: | ||||
| ms "2.1.2" | ms "2.1.2" | ||||
| debug@^2.6.9: | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: | |||||
| version "2.6.9" | version "2.6.9" | ||||
| resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" | ||||
| integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== | ||||
| dependencies: | dependencies: | ||||
| ms "^2.1.1" | ms "^2.1.1" | ||||
| <<<<<<< HEAD | |||||
| debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: | |||||
| version "4.3.4" | |||||
| resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" | |||||
| integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== | |||||
| dependencies: | |||||
| ms "2.1.2" | |||||
| decode-uri-component@^0.2.0: | decode-uri-component@^0.2.0: | ||||
| version "0.2.0" | version "0.2.0" | ||||
| resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" | ||||
| integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== | integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| deep-is@^0.1.3: | deep-is@^0.1.3: | ||||
| version "0.1.4" | version "0.1.4" | ||||
| resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" | ||||
| integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== | ||||
| <<<<<<< HEAD | |||||
| deepmerge@^2.1.1: | deepmerge@^2.1.1: | ||||
| version "2.2.1" | version "2.2.1" | ||||
| resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" | ||||
| integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== | integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== | ||||
| ======= | |||||
| deepmerge@^4.2.2: | deepmerge@^4.2.2: | ||||
| version "4.2.2" | version "4.2.2" | ||||
| resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" | ||||
| integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== | ||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| define-properties@^1.1.3, define-properties@^1.1.4: | define-properties@^1.1.3, define-properties@^1.1.4: | ||||
| version "1.1.4" | version "1.1.4" | ||||
| resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" | ||||
| integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== | ||||
| <<<<<<< HEAD | |||||
| flow-parser@0.*: | flow-parser@0.*: | ||||
| version "0.188.2" | version "0.188.2" | ||||
| resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.188.2.tgz#cba2f8c8cdcf358d553cf89f0b9aaaa394fa6111" | resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.188.2.tgz#cba2f8c8cdcf358d553cf89f0b9aaaa394fa6111" | ||||
| integrity sha512-Qnvihm7h4YDgFVQV2h0TcLE421D20/giBg93Dtobj+CHRnZ39vmsbDPM9IenUBtZuY0vWRiJp6slOv7dvmlKbg== | integrity sha512-Qnvihm7h4YDgFVQV2h0TcLE421D20/giBg93Dtobj+CHRnZ39vmsbDPM9IenUBtZuY0vWRiJp6slOv7dvmlKbg== | ||||
| follow-redirects@^1.14.8: | |||||
| version "1.15.2" | |||||
| resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" | |||||
| integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== | |||||
| for-in@^1.0.2: | for-in@^1.0.2: | ||||
| version "1.0.2" | version "1.0.2" | ||||
| resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" | ||||
| integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== | integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== | ||||
| dependencies: | dependencies: | ||||
| map-cache "^0.2.2" | map-cache "^0.2.2" | ||||
| ======= | |||||
| follow-redirects@^1.14.8: | |||||
| version "1.15.2" | |||||
| resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" | |||||
| integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| fs.realpath@^1.0.0: | fs.realpath@^1.0.0: | ||||
| version "1.0.0" | version "1.0.0" | ||||
| resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" | ||||
| integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== | ||||
| <<<<<<< HEAD | |||||
| isobject@^2.0.0: | isobject@^2.0.0: | ||||
| version "2.1.0" | version "2.1.0" | ||||
| resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" | ||||
| resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" | ||||
| integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| jose@^4.1.4, jose@^4.9.3: | jose@^4.1.4, jose@^4.9.3: | ||||
| version "4.10.0" | version "4.10.0" | ||||
| resolved "https://registry.yarnpkg.com/jose/-/jose-4.10.0.tgz#2e0b7bcc80dd0775f8a4588e55beb9460c37d60a" | resolved "https://registry.yarnpkg.com/jose/-/jose-4.10.0.tgz#2e0b7bcc80dd0775f8a4588e55beb9460c37d60a" | ||||
| array-includes "^3.1.5" | array-includes "^3.1.5" | ||||
| object.assign "^4.1.3" | object.assign "^4.1.3" | ||||
| <<<<<<< HEAD | |||||
| [email protected]: | |||||
| version "2.4.1" | |||||
| resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.4.1.tgz#7d81ec518204a48c1cb16554af126806c3cd82b0" | |||||
| integrity sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA== | |||||
| kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: | ||||
| version "3.2.2" | version "3.2.2" | ||||
| resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" | ||||
| version "6.0.3" | version "6.0.3" | ||||
| resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" | ||||
| integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== | ||||
| ======= | |||||
| [email protected]: | |||||
| version "2.4.1" | |||||
| resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.4.1.tgz#7d81ec518204a48c1cb16554af126806c3cd82b0" | |||||
| integrity sha512-aJ9opVoXroQUPfovYP5kaj2lM7Jn02Gw13bL0lg9v0V7SaUc0qavPs0Eue7d2DcC3NjqI6QAUElXNsuZSeM+EA== | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| language-subtag-registry@~0.3.2: | language-subtag-registry@~0.3.2: | ||||
| version "0.3.22" | version "0.3.22" | ||||
| resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" | ||||
| integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== | ||||
| <<<<<<< HEAD | |||||
| neo-async@^2.5.0: | neo-async@^2.5.0: | ||||
| version "2.6.2" | version "2.6.2" | ||||
| resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" | ||||
| integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| next-auth@^4.13.0: | next-auth@^4.13.0: | ||||
| version "4.13.0" | version "4.13.0" | ||||
| resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.13.0.tgz#93d312cec2513ac3c5eb583ee0665da50059a902" | resolved "https://registry.yarnpkg.com/next-auth/-/next-auth-4.13.0.tgz#93d312cec2513ac3c5eb583ee0665da50059a902" | ||||
| preact-render-to-string "^5.1.19" | preact-render-to-string "^5.1.19" | ||||
| uuid "^8.3.2" | uuid "^8.3.2" | ||||
| <<<<<<< HEAD | |||||
| next-i18next@^11.3.0: | next-i18next@^11.3.0: | ||||
| version "11.3.0" | version "11.3.0" | ||||
| resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-11.3.0.tgz#bfce51d8df07fb5cd61097423eeb7d744e09ae25" | resolved "https://registry.yarnpkg.com/next-i18next/-/next-i18next-11.3.0.tgz#bfce51d8df07fb5cd61097423eeb7d744e09ae25" | ||||
| i18next-fs-backend "^1.1.4" | i18next-fs-backend "^1.1.4" | ||||
| react-i18next "^11.18.0" | react-i18next "^11.18.0" | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| [email protected]: | [email protected]: | ||||
| version "12.3.1" | version "12.3.1" | ||||
| resolved "https://registry.yarnpkg.com/next/-/next-12.3.1.tgz#127b825ad2207faf869b33393ec8c75fe61e50f1" | resolved "https://registry.yarnpkg.com/next/-/next-12.3.1.tgz#127b825ad2207faf869b33393ec8c75fe61e50f1" | ||||
| "@next/swc-win32-ia32-msvc" "12.3.1" | "@next/swc-win32-ia32-msvc" "12.3.1" | ||||
| "@next/swc-win32-x64-msvc" "12.3.1" | "@next/swc-win32-x64-msvc" "12.3.1" | ||||
| <<<<<<< HEAD | |||||
| node-dir@^0.1.17: | node-dir@^0.1.17: | ||||
| version "0.1.17" | version "0.1.17" | ||||
| resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" | resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" | ||||
| resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" | ||||
| integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== | integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== | ||||
| nookies@^2.5.2: | |||||
| nookies@*, nookies@^2.5.2: | |||||
| version "2.5.2" | version "2.5.2" | ||||
| resolved "https://registry.yarnpkg.com/nookies/-/nookies-2.5.2.tgz#cc55547efa982d013a21475bd0db0c02c1b35b27" | resolved "https://registry.yarnpkg.com/nookies/-/nookies-2.5.2.tgz#cc55547efa982d013a21475bd0db0c02c1b35b27" | ||||
| integrity sha512-x0TRSaosAEonNKyCrShoUaJ5rrT5KHRNZ5DwPCuizjgrnkpE5DRf3VL7AyyQin4htict92X1EQ7ejDbaHDVdYA== | integrity sha512-x0TRSaosAEonNKyCrShoUaJ5rrT5KHRNZ5DwPCuizjgrnkpE5DRf3VL7AyyQin4htict92X1EQ7ejDbaHDVdYA== | ||||
| cookie "^0.4.1" | cookie "^0.4.1" | ||||
| set-cookie-parser "^2.4.6" | set-cookie-parser "^2.4.6" | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| oauth@^0.9.15: | oauth@^0.9.15: | ||||
| version "0.9.15" | version "0.9.15" | ||||
| resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" | resolved "https://registry.yarnpkg.com/oauth/-/oauth-0.9.15.tgz#bd1fefaf686c96b75475aed5196412ff60cfb9c1" | ||||
| resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" | ||||
| integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== | ||||
| <<<<<<< HEAD | |||||
| object-copy@^0.1.0: | object-copy@^0.1.0: | ||||
| version "0.1.0" | version "0.1.0" | ||||
| resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" | ||||
| define-property "^0.2.5" | define-property "^0.2.5" | ||||
| kind-of "^3.0.3" | kind-of "^3.0.3" | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| object-hash@^2.0.1: | object-hash@^2.0.1: | ||||
| version "2.2.0" | version "2.2.0" | ||||
| resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" | ||||
| resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" | ||||
| integrity sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew== | integrity sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew== | ||||
| <<<<<<< HEAD | |||||
| prop-types@^15.6.2, prop-types@^15.8.1: | prop-types@^15.6.2, prop-types@^15.8.1: | ||||
| ======= | |||||
| prop-types@^15.8.1: | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| version "15.8.1" | version "15.8.1" | ||||
| resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" | ||||
| integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== | ||||
| get-intrinsic "^1.0.2" | get-intrinsic "^1.0.2" | ||||
| object-inspect "^1.9.0" | object-inspect "^1.9.0" | ||||
| <<<<<<< HEAD | |||||
| signal-exit@^3.0.2: | |||||
| version "3.0.7" | |||||
| resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" | |||||
| integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== | |||||
| ======= | |||||
| [email protected]: | [email protected]: | ||||
| version "16.0.0" | version "16.0.0" | ||||
| resolved "https://registry.yarnpkg.com/sift/-/sift-16.0.0.tgz#447991577db61f1a8fab727a8a98a6db57a23eb8" | resolved "https://registry.yarnpkg.com/sift/-/sift-16.0.0.tgz#447991577db61f1a8fab727a8a98a6db57a23eb8" | ||||
| integrity sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ== | integrity sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ== | ||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| signal-exit@^3.0.2: | |||||
| version "3.0.7" | |||||
| resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" | |||||
| integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== | |||||
| slash@^3.0.0: | slash@^3.0.0: | ||||
| version "3.0.0" | version "3.0.0" | ||||
| resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" | resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" | ||||
| integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== | integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== | ||||
| <<<<<<< HEAD | |||||
| use@^3.1.0: | use@^3.1.0: | ||||
| version "3.1.1" | version "3.1.1" | ||||
| resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" | ||||
| integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== | ||||
| ======= | |||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| uuid@^8.3.2: | uuid@^8.3.2: | ||||
| version "8.3.2" | version "8.3.2" | ||||
| resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" | ||||
| integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== | ||||
| <<<<<<< HEAD | |||||
| [email protected]: | |||||
| version "3.1.0" | |||||
| resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" | |||||
| integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== | |||||
| ======= | |||||
| validator@^13.7.0: | validator@^13.7.0: | ||||
| version "13.7.0" | version "13.7.0" | ||||
| resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" | resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" | ||||
| integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== | integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== | ||||
| >>>>>>> 4aca4a676353cc0960b4a07d32765f32d366fedf | |||||
| [email protected]: | |||||
| version "3.1.0" | |||||
| resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" | |||||
| integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== | |||||
| webidl-conversions@^7.0.0: | webidl-conversions@^7.0.0: | ||||
| version "7.0.0" | version "7.0.0" |