#2 front

已合併
lazarkostic 3 年之前 將 2 次代碼提交從 front合併至 master

+ 7
- 1
components/buttons/load-more/LoadMore.tsx 查看文件

@@ -3,7 +3,13 @@ import CircularProgress from '@mui/material/CircularProgress';
import { useTranslation } from 'next-i18next';
import Image from 'next/image';

const LoadMore = ({ fetchNextPage, isFetchingNextPage, hasNextPage }) => {
interface LoadMoreProps {
fetchNextPage: () => void;
isFetchingNextPage: boolean;
hasNextPage: boolean;
}

const LoadMore: React.FC<LoadMoreProps> = ({ fetchNextPage, isFetchingNextPage, hasNextPage }) => {
const { t } = useTranslation('products');
return (
<Button

+ 5
- 1
components/cards/card-container/CardContainer.tsx 查看文件

@@ -1,6 +1,10 @@
import { Box } from '@mui/system';

const CardContainer = ({ children }) => {
interface CardContainerProps {
children: JSX.Element;
}

const CardContainer: React.FC<CardContainerProps> = ({ children }) => {
return (
<Box
sx={{

+ 7
- 2
components/cards/data-card/DataCard.tsx 查看文件

@@ -1,10 +1,15 @@
import { Box, Card, Typography } from '@mui/material';
import Image from 'next/image';
import { ProductDataDB } from '../../../utils/interface/productInterface';

const DataCard = ({ data, quantity }) => {
interface DataCardProps {
data: ProductDataDB;
quantity: number;
}

const DataCard: React.FC<DataCardProps> = ({ data, quantity }) => {
return (
<Card
height="100%"
sx={{
backgroundColor: '#f2f2f2',
mb: 2,

+ 11
- 4
components/cards/order-card/OrderCard.tsx 查看文件

@@ -1,18 +1,23 @@
import { Card, Divider, Typography } from '@mui/material';
import { Box } from '@mui/system';
import { useTranslation } from 'next-i18next';
import { OrderCard } from '../../../utils/interface/orderInterface';

const OrderCard = ({ data }) => {
interface OrderCardProps {
data: OrderCard;
}

const OrderCard: React.FC<OrderCardProps> = ({ data }) => {
const { t } = useTranslation('profile');
return (
<Card
height="100%"
sx={{
backgroundColor: '#f2f2f2',
mb: 2,
p: 2,
mx: { xs: 0, sm: 1 },
width: { xs: '100%', sm: '47%', md: '100%', lg: '100%' },
height: "100%"
}}
>
<Box
@@ -23,8 +28,10 @@ const OrderCard = ({ data }) => {
}}
>
<Typography sx={{ fontWeight: 600 }}>
{t('profile:orderDate')}
{data.date}
<>
{t('profile:orderDate')}
{data.date}
</>
</Typography>
<Divider />
<Typography sx={{ mt: 1 }}>

+ 1
- 0
components/cart-content/CartContent.tsx 查看文件

@@ -46,6 +46,7 @@ const CartContent = () => {

const mapProductsToDom = () => {
if (cartInfo.cartStorage?.length) {
console.log('cart', cartInfo.cartStorage);
return cartInfo.cartStorage.map((element, i) => (
<CartCard
key={i}

+ 1
- 1
components/company-info/CompanyInfo.tsx 查看文件

@@ -2,7 +2,7 @@ import { Typography } from '@mui/material';
import { Box } from '@mui/system';
import { useTranslation } from 'next-i18next';
import Image from 'next/image';
const CompanyInfo = () => {
const CompanyInfo: React.FC = () => {
const { t } = useTranslation('home');
return (
<>

+ 1
- 1
components/empty-cart/EmptyCart.tsx 查看文件

@@ -1,7 +1,7 @@
import { Typography } from '@mui/material';
import { useTranslation } from 'next-i18next';

const EmptyCart = () => {
const EmptyCart: React.FC = () => {
const { t } = useTranslation('cart');
return (
<Typography

+ 1
- 1
components/features/Features.tsx 查看文件

@@ -5,7 +5,7 @@ import Image from 'next/image';
import FeatureItem from './FeatureItem';
import items from './items';

const Features = () => {
const Features: React.FC = () => {
const { t } = useTranslation('home');
return (
<>

+ 9
- 2
components/filter-sort/FilterSort.tsx 查看文件

@@ -1,8 +1,15 @@
import { Box } from '@mui/system';
import ProductType from '../product-type/ProductType';
import Sort from '../sort/sort';
import Sort from '../sort/Sort';

const FilterSort = ({
interface FilterSortProps {
sort: string;
handleSortChange: () => void;
productType: string;
handleProductTypeChange: () => void;
}

const FilterSort: React.FC<FilterSortProps> = ({
sort,
handleSortChange,
productType,

+ 5
- 11
components/layout/navbar/MobileNav.tsx 查看文件

@@ -8,16 +8,9 @@ import { CART_PAGE, PROFILE_PAGE } from '../../../constants/pages';
import { NavItemMobile } from './NavItem';
import { items } from './navItems';

interface MobileNavProps {
toggleDrawer: (toggle: boolean) => void;
session: any;
signOutHandler: () => void;
open: boolean;
totalQuantity?: number;

}

const MobileNav: React.FC<MobileNavProps> = ({
const MobileNav = ({
toggleDrawer,
session,
signOutHandler,
@@ -31,7 +24,8 @@ const MobileNav: React.FC<MobileNavProps> = ({
}}
anchor="left"
open={open}
onClose={toggleDrawer.bind(null, false)}
onClose={toggleDrawer(false)}
onOpen={toggleDrawer(true)}
>
<Box
sx={{
@@ -108,7 +102,7 @@ const MobileNav: React.FC<MobileNavProps> = ({
<>
<Link href="/auth/register">
<Button
onClick={toggleDrawer.bind(null, false)}
onClick={toggleDrawer(false)}
variant="contained"
sx={{ m: 1, width: 0.5 }}
>
@@ -117,7 +111,7 @@ const MobileNav: React.FC<MobileNavProps> = ({
</Link>
<Link href="/auth">
<Button
onClick={toggleDrawer.bind(null, false)}
onClick={toggleDrawer(false)}
variant="outlined"
sx={{ m: 1, width: 0.5 }}
>

+ 2
- 15
components/layout/navbar/NavItem.tsx 查看文件

@@ -1,15 +1,7 @@
import { Box, ListItemButton, ListItemText, Typography } from '@mui/material';
import Link from 'next/link';

type NavItemMobileProps = {
toggleDrawer: (toggle: boolean) => void;
icon: any;
name: string;
url: string;
totalQuantity: number;
}

export const NavItemMobile: React.FC<NavItemMobileProps> = ({
export const NavItemMobile = ({
toggleDrawer,
icon,
name,
@@ -56,13 +48,8 @@ export const NavItemMobile: React.FC<NavItemMobileProps> = ({
);
};

type NavItemDesktopProps = {
url: string;
router: any;
name: string;
}

export const NavItemDesktop: React.FC<NavItemDesktopProps> = ({ url, router, name }) => {
export const NavItemDesktop = ({ url, router, name }) => {
return (
<Box sx={{ width: 150, mr: 3, ml: 3 }}>
<Link href={url}>

+ 7
- 1
components/notification/Notification.tsx 查看文件

@@ -1,6 +1,12 @@
import { Alert, Snackbar } from '@mui/material';

const Notification = ({ handleCloseNotification, notification, open }) => {
interface NotificationProps {
handleCloseNotification: () => void;
notification: string;
open: boolean;
}

const Notification: React.FC<NotificationProps> = ({ handleCloseNotification, notification, open }) => {
return (
<Snackbar
anchorOrigin={{ vertical: 'top', horizontal: 'center' }}

+ 5
- 1
components/page-description/PageDescription.tsx 查看文件

@@ -1,7 +1,11 @@
import { Typography } from '@mui/material';
import { Box } from '@mui/system';

const PageDescription = ({ description }) => {
interface PageDescriptionProps {
description: string;
}

const PageDescription: React.FC<PageDescriptionProps> = ({ description }) => {
return (
<Box sx={{ ml: { xs: 2, md: 12 }, my: 3 }}>
<Typography sx={{ fontSize: 20 }}>{description}</Typography>

+ 6
- 1
components/product-type/ProductType.tsx 查看文件

@@ -1,7 +1,12 @@
import { FormControl, InputLabel, MenuItem, Select } from '@mui/material';
import { useTranslation } from 'next-i18next';

const ProductType = ({ productType, handleProductTypeChange }) => {
interface ProductTypeProps {
productType: string;
handleProductTypeChange: () => void;
}

const ProductType: React.FC<ProductTypeProps> = ({ productType, handleProductTypeChange }) => {
const { t } = useTranslation('products');
return (
<>

+ 14
- 10
components/products-content/ProductsContent.tsx 查看文件

@@ -6,21 +6,27 @@ import FilterSort from '../filter-sort/FilterSort';
import LoadingSpinner from '../loader/basic-spinner/LoadSpinner';
import ProductsGrid from '../products-grid/ProductsGrid';
import ProductsHero from '../products-hero/ProductsHero';
import { SelectChangeEvent } from "@mui/material";

const ProductsContent = () => {
const [filter, setFilter] = useState('');
const [sort, setSort] = useState('');
const [filter, setFilter] = useState<string>('');
const [sort, setSort] = useState<string>('');
const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } =
useInfiniteProducts(filter, sort);

const handleProductTypeChange = (event) => {
const filterText = event.target.value;
setFilter(filterText);
const handleProductTypeChange = () => {
return (event: SelectChangeEvent) => {
const filterText = event.target.value;
setFilter(filterText);
}
};

const handleSortChange = (event) => {
const sort = event.target.value;
setSort(sort);
const handleSortChange = () => {
return (event: SelectChangeEvent) => {
const sort = event.target.value;
setSort(sort);
}

};

return (
@@ -46,8 +52,6 @@ const ProductsContent = () => {
) : (
<ProductsGrid
allProducts={data}
sort={sort}
productType={filter}
fetchNextPage={fetchNextPage}
hasNextPage={hasNextPage}
isFetchingNextPage={isFetchingNextPage}

+ 10
- 6
components/products/featured-product/FeaturedProduct.tsx 查看文件

@@ -3,21 +3,28 @@ import useMediaQuery from '@mui/material/useMediaQuery';
import { Box } from '@mui/system';
import { useEffect, useState } from 'react';
import { useStore, useStoreUpdate } from '../../../store/cart-context';
import { ProductDataDB } from '../../../utils/interface/productInterface';
import ProductImage from './ProductImage';
import ProductInfo from './ProductInfo';

const FeaturedProduct = ({ product, bColor, side }) => {
interface FeaturedProductProps {
side: string;
bColor: string;
product: ProductDataDB;
}

const FeaturedProduct: React.FC<FeaturedProductProps> = ({ product, bColor, side }) => {
const matches = useMediaQuery('(min-width: 900px)');
const data = { name: product.name, description: product.description };
const { addCartValue } = useStoreUpdate();
const { cartStorage } = useStore();
const addProductToCart = (quantity) => addCartValue(product, quantity);
const addProductToCart = (quantity: number) => addCartValue(product, quantity);
const [inCart, setInCart] = useState(false);

useEffect(() => {
if (cartStorage) {
if (
cartStorage?.some((item) => item.product.customID === product.customID)
cartStorage?.some((item: FeaturedProductProps) => item.product.customID === product.customID)
)
setInCart(true);
}
@@ -45,7 +52,6 @@ const FeaturedProduct = ({ product, bColor, side }) => {
) : (
<ProductInfo
bColor={bColor}
side={side}
data={data}
addProductToCart={addProductToCart}
inCart={inCart}
@@ -54,7 +60,6 @@ const FeaturedProduct = ({ product, bColor, side }) => {
{side === 'left' ? (
<ProductInfo
bColor={bColor}
side={side}
data={data}
addProductToCart={addProductToCart}
inCart={inCart}
@@ -62,7 +67,6 @@ const FeaturedProduct = ({ product, bColor, side }) => {
) : !matches ? (
<ProductInfo
bColor={bColor}
side={side}
data={data}
addProductToCart={addProductToCart}
inCart={inCart}

+ 5
- 1
components/products/featured-product/ProductImage.tsx 查看文件

@@ -1,7 +1,11 @@
import { Box } from '@mui/system';
import Image from 'next/image';

const ProductImage = ({ image }) => {
interface ProductImageProps {
image: string;
}

const ProductImage: React.FC<ProductImageProps> = ({ image }) => {
return (
<Box
sx={{

+ 15
- 2
components/products/featured-product/ProductInfo.tsx 查看文件

@@ -3,10 +3,23 @@ import { Box } from '@mui/system';
import { useTranslation } from 'next-i18next';
import Image from 'next/image';
import { useState } from 'react';
import { ProductDataDB } from '../../../utils/interface/productInterface';

const ProductInfo = ({ data, bColor, addProductToCart, inCart }) => {
interface DataProps {
name: string;
description: string;
}

interface ProductInfoProps {
data: DataProps;
bColor: string;
inCart: boolean;
addProductToCart: (quantity: number) => void;
}

const ProductInfo: React.FC<ProductInfoProps> = ({ data, bColor, addProductToCart, inCart }) => {
const { t } = useTranslation('home');
const [quantity, setQuantity] = useState(1);
const [quantity, setQuantity] = useState<number>(1);

const handleIncrement = () => {
setQuantity((prevState) => prevState + 1);

+ 6
- 1
components/products/featured-products-list/FeaturedPorductsList.tsx 查看文件

@@ -1,7 +1,12 @@
import { Box } from '@mui/system';
import { ProductDataDB } from '../../../utils/interface/productInterface';
import FeaturedProduct from '../featured-product/FeaturedProduct';

const FeaturedProductsList = ({ featuredProducts }) => {
interface FeaturedProductListProps {
featuredProducts: ProductDataDB[];
}

const FeaturedProductsList: React.FC<FeaturedProductListProps> = ({ featuredProducts }) => {
return (
<Box
sx={{

+ 6
- 1
components/sort/Sort.tsx 查看文件

@@ -1,7 +1,12 @@
import { FormControl, InputLabel, MenuItem, Select } from '@mui/material';
import { useTranslation } from 'next-i18next';

const Sort = ({ sort, handleSortChange }) => {
interface SortProps {
sort: string;
handleSortChange: () => void;
}

const Sort: React.FC<SortProps> = ({ sort, handleSortChange }) => {
const { t } = useTranslation('products');
return (
<>

+ 1
- 2
pages/index.tsx 查看文件

@@ -8,13 +8,12 @@ import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
import FeaturedProductsList from '../components/products/featured-products-list/FeaturedPorductsList';
import Features from '../components/features/Features';
import CompanyInfo from '../components/company-info/CompanyInfo';
import { FeaturedProductsResponse } from '../requests/products/featuredProductsRequest';
import { useUserUpdate } from '../store/user-context';
import { getStorage } from '../utils/helpers/storage';
import { useEffect } from 'react';


const Home: NextPage<FeaturedProductsResponse> = ({ featuredProducts }) => {
const Home: NextPage = ({ featuredProducts }) => {
const { data: session } = useSession();
const { addUser } = useUserUpdate();


+ 1
- 1
pages/profile/index.tsx 查看文件

@@ -9,7 +9,7 @@ const ProfilePage: NextPage = (props) => {
return <ProfileContent orders={props.orders.orders}></ProfileContent>;
};

export async function getServerSideProps(context) {
export async function getServerSideProps(context: any) {
const session = await getSession({ req: context.req });

if (!session) {

+ 101
- 98
yarn.lock 查看文件

@@ -44,9 +44,9 @@
semver "^6.3.0"

"@babel/generator@^7.19.3", "@babel/generator@^7.19.4":
version "7.19.4"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.4.tgz#60050cf3f0a593d7b2471b4be4f62a56b949237f"
integrity sha512-5T2lY5vXqS+5UEit/5TwcIUeCnwgCljcF8IQRT6XRQPBrvLeq5V8W+URv+GvwoF3FP8tkhp++evVyDzkDGzNmA==
version "7.19.5"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.5.tgz#da3f4b301c8086717eee9cab14da91b1fa5dcca7"
integrity sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==
dependencies:
"@babel/types" "^7.19.4"
"@jridgewell/gen-mapping" "^0.3.2"
@@ -329,9 +329,9 @@
source-map-support "^0.5.16"

"@babel/runtime-corejs3@^7.10.2":
version "7.19.1"
resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.19.1.tgz#f0cbbe7edda7c4109cd253bb1dee99aba4594ad9"
integrity sha512-j2vJGnkopRzH+ykJ8h68wrHnEUmtK//E723jjixiAl/PPf6FhqY/vYRcMVlNydRKQjQsTsYEjpx+DZMIvnGk/g==
version "7.19.4"
resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.19.4.tgz#870dbfd9685b3dad5aeb2d00841bb8b6192e3095"
integrity sha512-HzjQ8+dzdx7dmZy4DQ8KV8aHi/74AjEbBGTFutBmg/pd3dY5/q1sfuOGPTFGEytlQhWoeVXqcK5BwMgIkRkNDQ==
dependencies:
core-js-pure "^3.25.1"
regenerator-runtime "^0.13.4"
@@ -566,55 +566,55 @@
"@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14"

"@mui/[email protected]0":
version "5.0.0-alpha.100"
resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.100.tgz#5587c98fb8c6fdf9138b92c519fe3fd79682f7ac"
integrity sha512-bSoJEKCENtmJrJDECHUe9PiqztIUACuSskyqw9ypqE7Dz3WxL3e8puFsWBkUsz+WOCjXh4B4Xljn88Ucxxv5HA==
"@mui/[email protected]1":
version "5.0.0-alpha.101"
resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.101.tgz#dba7e61716ecc946ad8cc3cba0b73796641c4022"
integrity sha512-a54BcXvArGOKUZ2zyS/7B9GNhAGgfomEQSkfEZ88Nc9jKvXA+Mppenfz5o4JCAnD8c4VlePmz9rKOYvvum1bZw==
dependencies:
"@babel/runtime" "^7.19.0"
"@emotion/is-prop-valid" "^1.2.0"
"@mui/types" "^7.2.0"
"@mui/utils" "^5.10.6"
"@mui/utils" "^5.10.9"
"@popperjs/core" "^2.11.6"
clsx "^1.2.1"
prop-types "^15.8.1"
react-is "^18.2.0"

"@mui/codemod@^5.10.8":
version "5.10.8"
resolved "https://registry.yarnpkg.com/@mui/codemod/-/codemod-5.10.8.tgz#b190872282db7e9159b58407b974590adc574cdf"
integrity sha512-7oDR6HmkxoFN5DoYOBRo46WfU0zyUZdrB11wDeCJDlQwgVdBqMrMF1gNCc3HyJUKYS8PJ3XDDv6/IWkOw3pafw==
version "5.10.9"
resolved "https://registry.yarnpkg.com/@mui/codemod/-/codemod-5.10.9.tgz#0cb6049b1c2f24d7b73d8ad6b307094d72fa9100"
integrity sha512-ga8I5OZ+Sfgx8uzy1RouTVGOZB7dL3I9npsLw2QvCWnEafdAMDFE7SpSjNCyyvdCmzekOjVtnZPqRUGwCmCVqg==
dependencies:
"@babel/core" "^7.19.3"
"@babel/runtime" "^7.19.0"
"@babel/traverse" "^7.19.3"
jscodeshift "^0.13.1"
jscodeshift-add-imports "^1.0.10"
yargs "^17.5.1"
yargs "^17.6.0"

"@mui/core-downloads-tracker@^5.10.8":
version "5.10.8"
resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.8.tgz#b00402dd0796e7e99a09cfc23cb0b0a6196c8e09"
integrity sha512-V5D7OInO4P9PdT/JACg7fwjbOORm3GklaMVgdGomjyxiyetgRND5CC9r35e1LK/DqHdoyDuhbFzdfrqWtpmEIw==
"@mui/core-downloads-tracker@^5.10.9":
version "5.10.9"
resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.9.tgz#0279aaeecd7903c91730258b242aba4cf674fde5"
integrity sha512-rqoFu4qww6KJBbXYhyRd9YXjwBHa3ylnBPSWbGf1bdfG0AYMKmVzg8zxkWvxAWOp97kvx3M2kNPb0xMIDZiogQ==

"@mui/icons-material@^5.10.6":
version "5.10.6"
resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.10.6.tgz#a032395cfe7fe8e9a8edde2d27b9e3bd23e5b935"
integrity sha512-QwxdRmLA46S94B0hExPDx0td+A2unF+33bQ6Cs+lNpJKVsm1YeHwNdYXYcnpWeHeQQ07055OXl7IB2GKDd0MfA==
version "5.10.9"
resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.10.9.tgz#f9522c49797caf30146acc576e37ecb4f95bbc38"
integrity sha512-sqClXdEM39WKQJOQ0ZCPTptaZgqwibhj2EFV9N0v7BU1PO8y4OcX/a2wIQHn4fNuDjIZktJIBrmU23h7aqlGgg==
dependencies:
"@babel/runtime" "^7.19.0"

"@mui/material@^5.10.8":
version "5.10.8"
resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.10.8.tgz#a223ec5f1128515107381e875f8d6257a00c3cd3"
integrity sha512-sF/Ka0IJjGXV52zoT4xAWEqXVRjNYbIjATo9L4Q5oQC5iJpGrKJFY16uNtWWB0+vp/nayAuPGZHrxtV+t3ecdQ==
version "5.10.9"
resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.10.9.tgz#4ee3910ebf2c93208ad0df8fadb88f23ce2a76d8"
integrity sha512-sdOzlgpCmyw48je+E7o9UGGJpgBaF+60FlTRpVpcd/z+LUhnuzzuis891yPI5dPPXLBDL/bO4SsGg51lgNeLBw==
dependencies:
"@babel/runtime" "^7.19.0"
"@mui/base" "5.0.0-alpha.100"
"@mui/core-downloads-tracker" "^5.10.8"
"@mui/system" "^5.10.8"
"@mui/base" "5.0.0-alpha.101"
"@mui/core-downloads-tracker" "^5.10.9"
"@mui/system" "^5.10.9"
"@mui/types" "^7.2.0"
"@mui/utils" "^5.10.6"
"@mui/utils" "^5.10.9"
"@types/react-transition-group" "^4.4.5"
clsx "^1.2.1"
csstype "^3.1.1"
@@ -622,13 +622,13 @@
react-is "^18.2.0"
react-transition-group "^4.4.5"

"@mui/private-theming@^5.10.6":
version "5.10.6"
resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.10.6.tgz#2c6bb2a4b7034cd402a099bd0349f217584e7b25"
integrity sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==
"@mui/private-theming@^5.10.9":
version "5.10.9"
resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.10.9.tgz#c427bfa736455703975cdb108dbde6a174ba7971"
integrity sha512-BN7/CnsVPVyBaQpDTij4uV2xGYHHHhOgpdxeYLlIu+TqnsVM7wUeF+37kXvHovxM6xmL5qoaVUD98gDC0IZnHg==
dependencies:
"@babel/runtime" "^7.19.0"
"@mui/utils" "^5.10.6"
"@mui/utils" "^5.10.9"
prop-types "^15.8.1"

"@mui/styled-engine@^5.10.8":
@@ -641,16 +641,16 @@
csstype "^3.1.1"
prop-types "^15.8.1"

"@mui/system@^5.10.8":
version "5.10.8"
resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.10.8.tgz#afea52aeed34bd2d98c993322b5b09585106953d"
integrity sha512-hRQ354zcrYP/KHqK8FheICSvE9raQaUgQaV+A3oD4JETaFUCVI9Ytt+RcQYgTqx02xlCXIjl8LK1rPjTneySqw==
"@mui/system@^5.10.9":
version "5.10.9"
resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.10.9.tgz#69447a81dabbccab3c930f17d10f9aca5ba87bf1"
integrity sha512-B6fFC0sK06hNmqY7fAUfwShQv594+u/DT1YEFHPtK4laouTu7V4vSGQWi1WJT9Bjs9Db5D1bRDJ+Yy+tc3QOYA==
dependencies:
"@babel/runtime" "^7.19.0"
"@mui/private-theming" "^5.10.6"
"@mui/private-theming" "^5.10.9"
"@mui/styled-engine" "^5.10.8"
"@mui/types" "^7.2.0"
"@mui/utils" "^5.10.6"
"@mui/utils" "^5.10.9"
clsx "^1.2.1"
csstype "^3.1.1"
prop-types "^15.8.1"
@@ -660,10 +660,10 @@
resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.0.tgz#91380c2d42420f51f404120f7a9270eadd6f5c23"
integrity sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==

"@mui/utils@^5.10.6":
version "5.10.6"
resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.10.6.tgz#98d432d2b05544c46efe356cf095cea3a37c2e59"
integrity sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==
"@mui/utils@^5.10.9":
version "5.10.9"
resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.10.9.tgz#9dc455f9230f43eeb81d96a9a4bdb3855bb9ea39"
integrity sha512-2tdHWrq3+WCy+G6TIIaFx3cg7PorXZ71P375ExuX61od1NOAJP1mK90VxQ8N4aqnj2vmO3AQDkV4oV2Ktvt4bA==
dependencies:
"@babel/runtime" "^7.19.0"
"@types/prop-types" "^15.7.5"
@@ -878,7 +878,12 @@
dependencies:
mongodb "*"

"@types/node@*", "@types/[email protected]":
"@types/node@*":
version "18.8.5"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.5.tgz#6a31f820c1077c3f8ce44f9e203e68a176e8f59e"
integrity sha512-Bq7G3AErwe5A/Zki5fdD3O6+0zDChhg671NfPjtIcbtzDNZTv4NPKMRFr7gtYPG7y+B8uTiNK4Ngd9T0FTar6Q==

"@types/[email protected]":
version "18.8.3"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.3.tgz#ce750ab4017effa51aed6a7230651778d54e327c"
integrity sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w==
@@ -954,47 +959,47 @@
"@types/webidl-conversions" "*"

"@typescript-eslint/parser@^5.21.0":
version "5.39.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.39.0.tgz#93fa0bc980a3a501e081824f6097f7ca30aaa22b"
integrity sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==
version "5.40.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.40.0.tgz#432bddc1fe9154945660f67c1ba6d44de5014840"
integrity sha512-Ah5gqyX2ySkiuYeOIDg7ap51/b63QgWZA7w6AHtFrag7aH0lRQPbLzUjk0c9o5/KZ6JRkTTDKShL4AUrQa6/hw==
dependencies:
"@typescript-eslint/scope-manager" "5.39.0"
"@typescript-eslint/types" "5.39.0"
"@typescript-eslint/typescript-estree" "5.39.0"
"@typescript-eslint/scope-manager" "5.40.0"
"@typescript-eslint/types" "5.40.0"
"@typescript-eslint/typescript-estree" "5.40.0"
debug "^4.3.4"

"@typescript-eslint/scope-manager@5.39.0":
version "5.39.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz#873e1465afa3d6c78d8ed2da68aed266a08008d0"
integrity sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==
"@typescript-eslint/scope-manager@5.40.0":
version "5.40.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz#d6ea782c8e3a2371ba3ea31458dcbdc934668fc4"
integrity sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw==
dependencies:
"@typescript-eslint/types" "5.39.0"
"@typescript-eslint/visitor-keys" "5.39.0"
"@typescript-eslint/types" "5.40.0"
"@typescript-eslint/visitor-keys" "5.40.0"

"@typescript-eslint/types@5.39.0":
version "5.39.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.39.0.tgz#f4e9f207ebb4579fd854b25c0bf64433bb5ed78d"
integrity sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==
"@typescript-eslint/types@5.40.0":
version "5.40.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.40.0.tgz#8de07e118a10b8f63c99e174a3860f75608c822e"
integrity sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==

"@typescript-eslint/typescript-estree@5.39.0":
version "5.39.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz#c0316aa04a1a1f4f7f9498e3c13ef1d3dc4cf88b"
integrity sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==
"@typescript-eslint/typescript-estree@5.40.0":
version "5.40.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.0.tgz#e305e6a5d65226efa5471ee0f12e0ffaab6d3075"
integrity sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg==
dependencies:
"@typescript-eslint/types" "5.39.0"
"@typescript-eslint/visitor-keys" "5.39.0"
"@typescript-eslint/types" "5.40.0"
"@typescript-eslint/visitor-keys" "5.40.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
semver "^7.3.7"
tsutils "^3.21.0"

"@typescript-eslint/visitor-keys@5.39.0":
version "5.39.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz#8f41f7d241b47257b081ddba5d3ce80deaae61e2"
integrity sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==
"@typescript-eslint/visitor-keys@5.40.0":
version "5.40.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz#dd2d38097f68e0d2e1e06cb9f73c0173aca54b68"
integrity sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==
dependencies:
"@typescript-eslint/types" "5.39.0"
"@typescript-eslint/types" "5.40.0"
eslint-visitor-keys "^3.3.0"

acorn-jsx@^5.3.2:
@@ -1283,9 +1288,9 @@ callsites@^3.0.0:
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==

caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001406:
version "1.0.30001418"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz#5f459215192a024c99e3e3a53aac310fc7cf24e6"
integrity sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==
version "1.0.30001419"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001419.tgz#3542722d57d567c8210d5e4d0f9f17336b776457"
integrity sha512-aFO1r+g6R7TW+PNQxKzjITwLOyDhVRLjW0LcwS/HCZGUUKTGNp9+IwLC4xyDSZBygVL/mxaFR3HIV6wEKQuSzw==

chalk@^2.0.0:
version "2.4.2"
@@ -1385,11 +1390,9 @@ [email protected]:
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==

convert-source-map@^1.5.0, convert-source-map@^1.7.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
dependencies:
safe-buffer "~5.1.1"
version "1.9.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==

cookie@^0.4.1:
version "0.4.2"
@@ -1559,9 +1562,9 @@ dom-helpers@^5.0.1:
csstype "^3.0.2"

electron-to-chromium@^1.4.251:
version "1.4.276"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.276.tgz#17837b19dafcc43aba885c4689358b298c19b520"
integrity sha512-EpuHPqu8YhonqLBXHoU6hDJCD98FCe6KDoet3/gY1qsQ6usjJoHqBH2YIVs8FXaAtHwVL8Uqa/fsYao/vq9VWQ==
version "1.4.281"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.281.tgz#8e3c7b6ae65d91aa3e8aa84faa6353e3dc758971"
integrity sha512-yer0w5wCYdFoZytfmbNhwiGI/3cW06+RV7E23ln4490DVMxs7PvYpbsrSmAiBn/V6gode8wvJlST2YfWgvzWIg==

emoji-regex@^8.0.0:
version "8.0.0"
@@ -1726,9 +1729,9 @@ eslint-plugin-react-hooks@^4.5.0:
integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==

eslint-plugin-react@^7.31.7:
version "7.31.9"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.9.tgz#7474ad4e21db368f61d17e1f2e78d43dbbdd50b2"
integrity sha512-vrVJwusIw4L99lyfXjtCw8HWdloajsiYslMavogrBe2Gl8gr95TJsJnOMRasN4b4N24I3XuJf6aAV6MhyGmjqw==
version "7.31.10"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz#6782c2c7fe91c09e715d536067644bbb9491419a"
integrity sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==
dependencies:
array-includes "^3.1.5"
array.prototype.flatmap "^1.3.0"
@@ -1994,9 +1997,14 @@ flatted@^3.1.0:
integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==

flow-parser@0.*:
version "0.188.2"
resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.188.2.tgz#cba2f8c8cdcf358d553cf89f0b9aaaa394fa6111"
integrity sha512-Qnvihm7h4YDgFVQV2h0TcLE421D20/giBg93Dtobj+CHRnZ39vmsbDPM9IenUBtZuY0vWRiJp6slOv7dvmlKbg==
version "0.189.0"
resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.189.0.tgz#ac569e89052ec0e979a2c16fa12d808cde1d553d"
integrity sha512-dS8FC7Ek6UyhDkjoTBSvZNLvNI6ukDzUtuugaSlANQfVwdQwiIwAVVdqnbczHr5uuNLQc/mWCR0Ag6nPUIBH9g==

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==

follow-redirects@^1.14.8:
version "1.15.2"
@@ -2786,9 +2794,9 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
brace-expansion "^1.1.7"

minimist@^1.2.0, minimist@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
version "1.2.7"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==

mixin-deep@^1.2.0:
version "1.3.2"
@@ -3444,11 +3452,6 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"

safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==

safe-regex-test@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
@@ -4014,7 +4017,7 @@ yargs-parser@^21.0.0:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==

yargs@^17.5.1:
yargs@^17.6.0:
version "17.6.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.0.tgz#e134900fc1f218bc230192bdec06a0a5f973e46c"
integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==

Loading…
取消
儲存