diff --git a/server/src/main.ts b/server/src/main.ts index 8047b12..97c7a1a 100644 --- a/server/src/main.ts +++ b/server/src/main.ts @@ -3,7 +3,11 @@ import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { AppModule } from './app.module'; async function bootstrap() { - const app = await NestFactory.create(AppModule); + const app = await NestFactory.create(AppModule, { + cors: { + origin: process.env.FRONTEND_URL + } + }); const config = new DocumentBuilder() .setTitle('Sim-JMS') diff --git a/web/package.json b/web/package.json index 9be89ca..7f3992b 100644 --- a/web/package.json +++ b/web/package.json @@ -14,11 +14,14 @@ "@emotion/styled": "^11.11.0", "@mui/icons-material": "^5.14.6", "@mui/material": "^5.14.3", + "@mui/x-date-pickers": "^6.13.0", "@types/node": "20.4.8", "@types/react": "18.2.18", "@types/react-dom": "18.2.7", + "axios": "^1.5.0", "eslint-config-next": "13.4.12", "jest-junit": "^16.0.0", + "moment": "^2.29.4", "next": "13.4.12", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/web/src/app/job/hooks.ts b/web/src/app/job/hooks.ts index 3d559dd..b9ed0cb 100644 --- a/web/src/app/job/hooks.ts +++ b/web/src/app/job/hooks.ts @@ -1,5 +1,7 @@ -import { JobTable } from '@/utils/types/job'; -import { useContext, useState } from 'react'; +import { axiosInstance } from '@/utils/services/axios'; +import { JobSchema, JobTable, JobTableRow } from '@/utils/types/job'; +import { ScheduleSchema } from '@/utils/types/schedule'; +import { useContext, useEffect, useState } from 'react'; import { JobListContext } from './context'; export const useJobListContext = (): JobTable => { @@ -14,9 +16,92 @@ export const useJobListContext = (): JobTable => { export const useHooks = () => { const [page, setPage] = useState(1); + const [perPage] = useState(12); + const [jobs, setJobs] = useState([]); + const [count, setCount] = useState(0); + const [pageCount, setPageCount] = useState(1); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(); + + useEffect(() => { + axiosInstance + .get('/jobs', { + params: { + page, + perPage + } + }) + .then((response) => { + setCount(response?.data.count); + setJobs(convertTableData(response?.data.jobs)); + setPageCount(Math.ceil(response?.data.count / perPage)); + setIsLoading(false); + }) + .catch((e) => { + console.log(e); + setIsLoading(false); + setError('Something went wrong.'); + }); + }, [page, perPage]); return { + jobs, + count, page, - setPage + pageCount, + isLoading, + error, + setPage, }; }; + +const formatDate = (date: string): string => { + return new Date(date).toLocaleDateString('en-US', { + year: 'numeric', + month: '2-digit', + day: '2-digit' + }); +}; + +const formatTime = (date: string): string => { + return new Date(date).toLocaleTimeString('en-US', { + hour: '2-digit', + minute: '2-digit', + hour12: false, + }); +}; + +const formatSchedules = (schedules: ScheduleSchema[]): string[] => { + const scheduleData = schedules.map((schedule: ScheduleSchema) => { + const startDateTime = `${formatDate(schedule.startDate)} ${formatTime(schedule.startTime)}`; + const endDateTime = `${formatTime(schedule.endTime)}`; + return `${startDateTime} - ${endDateTime}`; + }); + + return scheduleData; +}; + +const formatEnum = (value: string): string => { + let words = value.split('_'); + words = words.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()); + return words.join(' '); +} + +const convertTableData = (data: JobSchema[]): JobTableRow[] => { + const tableData = data.map((job: JobSchema) => ({ + id: job.id, + title: job.title, + customer: `${job.customer.firstName} ${job.customer.lastName}`, + tags: job.tags.map((tag) => formatEnum(tag)).sort(), + schedules: formatSchedules(job.schedules).sort(), + estimation: { + status: job.estimation?.status ? formatEnum(job.estimation?.status) : 'Not Yet Created', + cost: job.estimation?.totalCost ? `₱ ${job.estimation?.totalCost}` : '-' + }, + personInCharge: `${job.personInCharge.firstName} ${job.personInCharge.lastName}`, + pipelinePhase: formatEnum(job.pipelinePhase), + createdAt: formatDate(job.createdAt) + })); + + return tableData; +}; diff --git a/web/src/app/job/page.tsx b/web/src/app/job/page.tsx index f6f5116..98f910d 100644 --- a/web/src/app/job/page.tsx +++ b/web/src/app/job/page.tsx @@ -1,37 +1,67 @@ 'use client'; import Pagination from '@/components/atoms/Pagination'; +import StatusDisplay from '@/components/molecules/StatusDisplay'; import JobListTable from '@/components/organisms/JobListTable'; import SearchFilterHeader from '@/components/organisms/SearchFilterHeader'; -import { JobColumns, JobData } from '@/utils/constants/jobTableData'; -import { Grid } from '@mui/material'; +import { JobColumns } from '@/utils/constants/jobTableData'; +import { Grid, Typography } from '@mui/material'; +import { Fragment } from 'react'; import { JobListContext } from './context'; import { useHooks } from './hooks'; const JobList = (): JSX.Element => { - const { page, setPage } = useHooks(); + const { page, jobs, count, pageCount, setPage, isLoading, error } = + useHooks(); return (
- - - + value={{ columns: JobColumns, data: jobs }}> + {isLoading ? ( + + ) : error ? ( + + ) : ( + + + + + {!count ? ( + + + No jobs found + + + ) : ( + + + + + + + + + )} - - - - - - - + )}
); diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx index ddbd120..1f643ee 100644 --- a/web/src/app/layout.tsx +++ b/web/src/app/layout.tsx @@ -1,24 +1,23 @@ -import type { Metadata } from 'next' -import { ThemeProvider } from '@mui/material' +import { ThemeProvider } from '@mui/material'; +import type { Metadata } from 'next'; -import { theme } from '@/assets/theme' +import { theme } from '@/assets/theme'; import Wrapper from './wrapper'; export const metadata: Metadata = { - title: 'Create Next App', - description: 'Generated by create next app', -} + title: 'JMS' +}; export default function RootLayout({ - children, + children }: { - children: React.ReactNode + children: React.ReactNode; }) { - return ( - - - {children} - - - ) + return ( + + + {children} + + + ); } diff --git a/web/src/components/molecules/CreatedDateRangeFilter/hooks.ts b/web/src/components/molecules/CreatedDateRangeFilter/hooks.ts index fd3c385..b0ab4b4 100644 --- a/web/src/components/molecules/CreatedDateRangeFilter/hooks.ts +++ b/web/src/components/molecules/CreatedDateRangeFilter/hooks.ts @@ -1,9 +1,10 @@ -import { Moment } from 'moment'; -import { useState } from 'react'; +import moment, { type Moment } from 'moment'; +import { useEffect, useState } from 'react'; export const useHooks = () => { - const [startDate, setStartDate] = useState(); - const [endDate, setEndDate] = useState(); + const [startDate, setStartDate] = useState(moment().startOf('month')); + const [endDate, setEndDate] = useState(moment()); + const [isInvalidDate, setIsInvalidDate] = useState(false); const handleStartDateChange = (date: Moment | null): void => { setStartDate(date); @@ -13,10 +14,17 @@ export const useHooks = () => { setEndDate(date); }; + useEffect(() => { + if (startDate && endDate) { + setIsInvalidDate(endDate <= startDate); + } + }, [startDate, endDate]); + return { startDate, handleStartDateChange, endDate, - handleEndDateChange + handleEndDateChange, + isInvalidDate }; }; diff --git a/web/src/components/molecules/CreatedDateRangeFilter/index.tsx b/web/src/components/molecules/CreatedDateRangeFilter/index.tsx index abfc4b8..9746682 100644 --- a/web/src/components/molecules/CreatedDateRangeFilter/index.tsx +++ b/web/src/components/molecules/CreatedDateRangeFilter/index.tsx @@ -1,6 +1,5 @@ 'use-client'; -import styles from '@/styles/Filter.module.css'; import { Box } from '@mui/material'; import { DatePicker } from '@mui/x-date-pickers'; import { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment'; @@ -8,38 +7,67 @@ import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; import { useHooks } from './hooks'; const CreateDateRangeFilter = () => { - const { startDate, handleStartDateChange, endDate, handleEndDateChange } = - useHooks(); + const { + startDate, + handleStartDateChange, + endDate, + handleEndDateChange, + isInvalidDate + } = useHooks(); return ( {' - '} diff --git a/web/src/components/molecules/StatusDisplay/index.tsx b/web/src/components/molecules/StatusDisplay/index.tsx new file mode 100644 index 0000000..f45a18d --- /dev/null +++ b/web/src/components/molecules/StatusDisplay/index.tsx @@ -0,0 +1,27 @@ +import { Box, CircularProgress, Typography } from '@mui/material'; + +interface Props { + isLoading?: boolean; + error?: string; +} + +const StatusDisplay = ({ isLoading = false, error }: Props): JSX.Element => { + return ( + + {isLoading ? ( + + ) : ( + error && {error} + )} + + ); +}; + +export default StatusDisplay; diff --git a/web/src/components/organisms/JobListTable/index.tsx b/web/src/components/organisms/JobListTable/index.tsx index 2af535b..4793763 100644 --- a/web/src/components/organisms/JobListTable/index.tsx +++ b/web/src/components/organisms/JobListTable/index.tsx @@ -1,8 +1,7 @@ /* eslint-disable no-mixed-spaces-and-tabs */ import { useJobListContext } from '@/app/job/hooks'; import StatusChip from '@/components/atoms/StatusChip'; -import { TableColumn } from '@/utils/constants/jobTableData'; -import { JobTableRow } from '@/utils/types/job'; +import { JobTableRow, TableColumn } from '@/utils/types/job'; import { Box, Paper, @@ -58,7 +57,7 @@ const JobListTable = (): JSX.Element => { case 'cost': return ( - {`₱ ${row.estimation.cost.toFixed(2)}`} + {row.estimation.cost} ); default: @@ -97,7 +96,7 @@ const JobListTable = (): JSX.Element => { - {data.map((row: JobTableRow) => ( + {data?.map((row: JobTableRow) => ( {columns.map( (column: TableColumn, index) => ( diff --git a/web/src/utils/constants/jobTableData.ts b/web/src/utils/constants/jobTableData.ts index 9df75ac..56ac2e7 100644 --- a/web/src/utils/constants/jobTableData.ts +++ b/web/src/utils/constants/jobTableData.ts @@ -1,4 +1,4 @@ -import { JobTableRow, TableColumn } from '../types/job'; +import { TableColumn } from '../types/job'; export const JobColumns : TableColumn[] = [ { key: 'title', label: 'Job Title', width: 200 }, @@ -11,190 +11,3 @@ export const JobColumns : TableColumn[] = [ { key: 'cost', label: 'Cost', width: 120 }, { key: 'createdAt', label: 'Created At', width: 120 } ]; - -export const JobData: JobTableRow[] = [ - { - id: 1, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A', 'Tag B'], - schedules: ['5-25-2023 5:00 - 15:00'], - estimation: { - status: 'Approved', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - }, - { - id: 2, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A', 'Tag B', 'Tag C', 'Tag D', 'Tag E'], - schedules: ['5-25-2023 5:00 - 15:00', '5-26-2023 5:00 - 15:00'], - estimation: { - status: 'Making', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - }, - { - id: 3, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A'], - schedules: ['5-25-2023 5:00 - 15:00'], - estimation: { - status: 'Sent to Customer', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - }, - { - id: 4, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A', 'Tag B'], - schedules: ['5-25-2023 5:00 - 15:00'], - estimation: { - status: 'Closed', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - }, - { - id: 5, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A', 'Tag B'], - schedules: [ - '5-25-2023 5:00 - 15:00', - '5-26-2023 5:00 - 15:00', - '5-26-2023 5:00 - 15:00' - ], - estimation: { - status: 'Not yet Created', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - }, - { - id: 6, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A'], - schedules: ['5-25-2023 5:00 - 15:00'], - estimation: { - status: 'Not yet Created', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - }, - { - id: 7, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A'], - schedules: ['5-25-2023 5:00 - 15:00'], - estimation: { - status: 'Not yet Created', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - }, - { - id: 8, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A'], - schedules: ['5-25-2023 5:00 - 15:00'], - estimation: { - status: 'Not yet Created', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - }, - { - id: 9, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A'], - schedules: ['5-25-2023 5:00 - 15:00'], - estimation: { - status: 'Not yet Created', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - }, - { - id: 10, - title: 'New Summit', - customer: 'John Doe', - tags: ['Tag A'], - schedules: ['5-25-2023 5:00 - 15:00'], - estimation: { - status: 'Not yet Created', - cost: 650.0 - }, - personInCharge: 'Michael Murry', - pipelinePhase: 'Delivery', - createdAt: new Date('5-2-2023').toLocaleDateString('en-US', { - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - } -]; diff --git a/web/src/utils/constants/navbarMenu.ts b/web/src/utils/constants/navbarMenu.ts index 305e460..0613bb7 100644 --- a/web/src/utils/constants/navbarMenu.ts +++ b/web/src/utils/constants/navbarMenu.ts @@ -15,7 +15,7 @@ export const Menus: IMenu[] = [ { name: "Job List", Icon: Home, - href: "/", + href: "/job", }, { name: "Calendar", diff --git a/web/src/utils/constants/statusChipColor.ts b/web/src/utils/constants/statusChipColor.ts index 0f15dd6..a31ff2c 100644 --- a/web/src/utils/constants/statusChipColor.ts +++ b/web/src/utils/constants/statusChipColor.ts @@ -3,9 +3,9 @@ export interface ChipProps { } export const ChipColors: Record = { - 'Not yet Created': '#FFB4AF', + 'Not Yet Created': '#FFB4AF', Making: '#FDFF8F', Approved: '#8AFFB2', - 'Sent to Customer': '#84C1FF', + 'Sent To Customer': '#84C1FF', Closed: '#65707b33' }; diff --git a/web/src/utils/services/axios.ts b/web/src/utils/services/axios.ts new file mode 100644 index 0000000..65be5c8 --- /dev/null +++ b/web/src/utils/services/axios.ts @@ -0,0 +1,8 @@ +import axios from 'axios'; + +export const axiosInstance = axios.create({ + baseURL: process.env.NEXT_PUBLIC_API_BASE_URL, + headers: { + 'Content-Type': 'application/json', + }, +}); diff --git a/web/src/utils/types/customer.ts b/web/src/utils/types/customer.ts new file mode 100644 index 0000000..c7392ff --- /dev/null +++ b/web/src/utils/types/customer.ts @@ -0,0 +1,8 @@ +export interface CustomerSchema { + id: number; + firstName: string; + lastName: string; + email: string; + contact: string; + address: string; +} diff --git a/web/src/utils/types/estimation.ts b/web/src/utils/types/estimation.ts new file mode 100644 index 0000000..6d08484 --- /dev/null +++ b/web/src/utils/types/estimation.ts @@ -0,0 +1,7 @@ +export interface EstimationSchema { + id: number; + title: string; + document: string; + totalCost: number; + status: string; +} diff --git a/web/src/utils/types/job.ts b/web/src/utils/types/job.ts index 816ad2d..33eee65 100644 --- a/web/src/utils/types/job.ts +++ b/web/src/utils/types/job.ts @@ -1,3 +1,8 @@ +import { CustomerSchema } from './customer'; +import { EstimationSchema } from './estimation'; +import { ScheduleSchema } from './schedule'; +import { UserSchema } from './user'; + export interface TableColumn { key: string; label: string; @@ -6,7 +11,7 @@ export interface TableColumn { export interface EstimationType { status: string; - cost: number; + cost: string | number; } export interface JobTableRow { @@ -24,5 +29,26 @@ export interface JobTableRow { export interface JobTable { columns: TableColumn[]; - data: JobTableRow[]; + data?: JobTableRow[]; +} + +export interface JobSchema { + id: number; + title: string; + type: string; + tags: string[]; + remarks?: string; + customer: CustomerSchema; + paymentMethod: string; + personInCharge: UserSchema; + schedules: ScheduleSchema[]; + estimation?: EstimationSchema; + pipelinePhase: string; + createdAt: string; + updatedAt: string; +} + +export interface JobListType { + jobs: JobSchema[]; + count: number } diff --git a/web/src/utils/types/schedule.ts b/web/src/utils/types/schedule.ts new file mode 100644 index 0000000..dd2f53b --- /dev/null +++ b/web/src/utils/types/schedule.ts @@ -0,0 +1,7 @@ +export interface ScheduleSchema { + id: number; + startDate: string; + endDate: string; + startTime: string; + endTime: string; +} diff --git a/web/src/utils/types/user.ts b/web/src/utils/types/user.ts new file mode 100644 index 0000000..2db10dd --- /dev/null +++ b/web/src/utils/types/user.ts @@ -0,0 +1,7 @@ +export interface UserSchema { + id: number; + firstName: string; + lastName: string; + email: string; + role: string; +} diff --git a/web/yarn.lock b/web/yarn.lock index 8662640..3b7148c 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -277,6 +277,13 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" @@ -423,6 +430,33 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== +"@floating-ui/core@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" + integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== + dependencies: + "@floating-ui/utils" "^0.1.1" + +"@floating-ui/dom@^1.5.1": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.2.tgz#6812e89d1d4d4ea32f10d15c3b81feb7f9836d89" + integrity sha512-6ArmenS6qJEWmwzczWyhvrXRdI/rI78poBcW0h/456+onlabit+2G+QxHx5xTOX60NBJQXjsCLFbW2CmsXpUog== + dependencies: + "@floating-ui/core" "^1.4.1" + "@floating-ui/utils" "^0.1.1" + +"@floating-ui/react-dom@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.0.2.tgz#fab244d64db08e6bed7be4b5fcce65315ef44d20" + integrity sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ== + dependencies: + "@floating-ui/dom" "^1.5.1" + +"@floating-ui/utils@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.2.tgz#b7e9309ccce5a0a40ac482cb894f120dba2b357f" + integrity sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -677,6 +711,21 @@ prop-types "^15.8.1" react-is "^18.2.0" +"@mui/base@^5.0.0-alpha.87": + version "5.0.0-beta.14" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.14.tgz#315b67b0fd231cbd47e8d54f8f92be23122e4d66" + integrity sha512-Je/9JzzYObsuLCIClgE8XvXNFb55IEz8n2NtStUfASfNiVrwiR8t6VVFFuhofehkyTIN34tq1qbBaOjCnOovBw== + dependencies: + "@babel/runtime" "^7.22.10" + "@emotion/is-prop-valid" "^1.2.1" + "@floating-ui/react-dom" "^2.0.1" + "@mui/types" "^7.2.4" + "@mui/utils" "^5.14.8" + "@popperjs/core" "^2.11.8" + clsx "^2.0.0" + prop-types "^15.8.1" + react-is "^18.2.0" + "@mui/core-downloads-tracker@^5.14.4": version "5.14.4" resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.4.tgz#a517265647ee9660170107d68905db5e400576c5" @@ -756,6 +805,30 @@ prop-types "^15.8.1" react-is "^18.2.0" +"@mui/utils@^5.14.7", "@mui/utils@^5.14.8": + version "5.14.8" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.8.tgz#e1737d5fcd54aa413d6b1aaea3ea670af2919402" + integrity sha512-1Ls2FfyY2yVSz9NEqedh3J8JAbbZAnUWkOWLE2f4/Hc4T5UWHMfzBLLrCqExfqyfyU+uXYJPGeNIsky6f8Gh5Q== + dependencies: + "@babel/runtime" "^7.22.10" + "@types/prop-types" "^15.7.5" + "@types/react-is" "^18.2.1" + prop-types "^15.8.1" + react-is "^18.2.0" + +"@mui/x-date-pickers@^6.13.0": + version "6.13.0" + resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-6.13.0.tgz#de9acfbc7697aed2bcbea6996173b45e3f0ee0d5" + integrity sha512-mNfWXrS9PMLI+lgeEw6R08g5j1Yewat+A7MiI2QuwZteX3b83JQnm73RCGrSFTpvOP1/v6yIBPbxPZin5eu6GA== + dependencies: + "@babel/runtime" "^7.22.15" + "@mui/base" "^5.0.0-alpha.87" + "@mui/utils" "^5.14.7" + "@types/react-transition-group" "^4.4.6" + clsx "^2.0.0" + prop-types "^15.8.1" + react-transition-group "^4.4.5" + "@next/env@13.4.12": version "13.4.12" resolved "https://registry.yarnpkg.com/@next/env/-/env-13.4.12.tgz#0b88115ab817f178bf9dc0c5e7b367277595b58d" @@ -1308,6 +1381,15 @@ axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== +axios@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" + integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^3.1.1: version "3.2.1" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" @@ -2130,6 +2212,11 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -3270,6 +3357,11 @@ mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +moment@^2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -3574,6 +3666,11 @@ prop-types@^15.6.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"