From 69223141a40cfca998f37a33d872067e9cdd588a Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Thu, 12 Nov 2020 23:52:06 +0100 Subject: [PATCH] Add basic management structure --- package.json | 3 +- public/index.html | 1 + src/api/dto/course.ts | 1 - src/app.tsx | 5 +- src/hooks/state.ts | 5 + src/i18n.ts | 2 + src/management/api/dto/edition.ts | 9 ++ src/management/api/edition.ts | 17 ++ src/management/api/index.ts | 7 + src/management/edition/list.tsx | 75 +++++++++ src/management/middleware.tsx | 14 ++ src/management/routing.tsx | 15 ++ src/routing.tsx | 7 +- src/state/reducer/user.ts | 7 +- src/styles/footer.scss | 31 +++- translations/management.en.yaml | 0 translations/management.pl.yaml | 8 + yarn.lock | 255 +++++++++++++++++++++++++++++- 18 files changed, 447 insertions(+), 15 deletions(-) create mode 100644 src/management/api/dto/edition.ts create mode 100644 src/management/api/edition.ts create mode 100644 src/management/api/index.ts create mode 100644 src/management/edition/list.tsx create mode 100644 src/management/middleware.tsx create mode 100644 src/management/routing.tsx create mode 100644 translations/management.en.yaml create mode 100644 translations/management.pl.yaml diff --git a/package.json b/package.json index 7610207..43c30a5 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "@babel/preset-typescript": "^7.10.1", "@date-io/moment": "^1.3.13", "@material-ui/core": "^4.10.1", + "@material-ui/data-grid": "^4.0.0-alpha.9", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.55", "@material-ui/pickers": "^3.2.10", @@ -38,9 +39,9 @@ "i18next": "^19.6.0", "i18next-browser-languagedetector": "^5.0.0", "jsonwebtoken": "^8.5.1", + "material-table": "^1.69.1", "material-ui-dropzone": "^3.3.0", "mdi-material-ui": "^6.17.0", - "moment-timezone": "^2.26.0", "moment-timezone": "^0.5.31", "node-sass": "^4.14.1", "optimize-css-assets-webpack-plugin": "5.0.3", diff --git a/public/index.html b/public/index.html index 987754d..c4577dc 100644 --- a/public/index.html +++ b/public/index.html @@ -5,6 +5,7 @@ + Zgłoszenie praktyki studenckiej diff --git a/src/api/dto/course.ts b/src/api/dto/course.ts index 8b13f1f..62bcda0 100644 --- a/src/api/dto/course.ts +++ b/src/api/dto/course.ts @@ -17,7 +17,6 @@ export const courseDtoTransformer: Transformer = { id: subject.id, name: subject.name, desiredSemesters: [], - possibleProgramEntries: [], // todo }; } } diff --git a/src/app.tsx b/src/app.tsx index 607090a..621b34a 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -102,7 +102,10 @@ function App() { }
- + +
    +
  • zarządzanie
  • +
{ t('copyright', { date: moment() }) }
diff --git a/src/hooks/state.ts b/src/hooks/state.ts index 9fc52a6..9422e15 100644 --- a/src/hooks/state.ts +++ b/src/hooks/state.ts @@ -3,6 +3,7 @@ import { AppState } from "@/state/reducer"; import { Edition, getEditionDeadlines } from "@/data/edition"; import { editionSerializationTransformer } from "@/serialization"; import { Student } from "@/data"; +import { UserState } from "@/state/reducer/user"; export const useCurrentStudent = () => useSelector( state => state.student @@ -16,3 +17,7 @@ export const useDeadlines = () => { const edition = useCurrentEdition() as Edition; return getEditionDeadlines(edition); } + +export const useCurrentUser = () => useSelector( + state => state.user +) diff --git a/src/i18n.ts b/src/i18n.ts index a5e47ec..fe8160e 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -10,9 +10,11 @@ import { convertToRoman } from "@/utils/numbers"; const resources = { en: { translation: require('../translations/en.yaml'), + management: require('../translations/management.en.yaml'), }, pl: { translation: require('../translations/pl.yaml'), + management: require('../translations/management.pl.yaml'), } } diff --git a/src/management/api/dto/edition.ts b/src/management/api/dto/edition.ts new file mode 100644 index 0000000..a12d5b1 --- /dev/null +++ b/src/management/api/dto/edition.ts @@ -0,0 +1,9 @@ +import { Identifiable } from "@/data"; +import { CourseDTO } from "@/api/dto/course"; + +export interface EditionDTO extends Identifiable { + editionStart: string; + editionFinish: string; + reportingStart: string; + course: CourseDTO; +} diff --git a/src/management/api/edition.ts b/src/management/api/edition.ts new file mode 100644 index 0000000..7317572 --- /dev/null +++ b/src/management/api/edition.ts @@ -0,0 +1,17 @@ +import { axios } from "@/api"; +import { EditionDTO, editionDtoTransformer } from "@/api/dto/edition"; +import { Edition } from "@/data/edition"; +import { prepare } from "@/routing"; + +const MANAGEMENT_EDITION_INDEX_ENDPOINT = '/management/editions'; +const MANAGEMENT_EDITION_ENDPOINT = '/management/editions/:edition'; + +export async function all(): Promise { + const response = await axios.get(MANAGEMENT_EDITION_INDEX_ENDPOINT); + return response.data.map(dto => editionDtoTransformer.transform(dto)); +} + +export async function details(edition: string): Promise { + const response = await axios.get(prepare(MANAGEMENT_EDITION_ENDPOINT, { edition })); + return editionDtoTransformer.transform(response.data); +} diff --git a/src/management/api/index.ts b/src/management/api/index.ts new file mode 100644 index 0000000..ea6d6a7 --- /dev/null +++ b/src/management/api/index.ts @@ -0,0 +1,7 @@ +import * as edition from "./edition" + +export const api = { + edition +} + +export default api; diff --git a/src/management/edition/list.tsx b/src/management/edition/list.tsx new file mode 100644 index 0000000..4c53e0a --- /dev/null +++ b/src/management/edition/list.tsx @@ -0,0 +1,75 @@ +import React, { useCallback } from "react"; +import { Page } from "@/pages/base"; +import { useTranslation } from "react-i18next"; +import { useAsync } from "@/hooks"; +import api from "@/management/api"; +import { Async } from "@/components/async"; +import { Container } from "@material-ui/core"; +import MaterialTable, { Action, Column } from "material-table"; +import { Edition } from "@/data/edition"; +import { Pencil } from "mdi-material-ui"; + +export type EditionDetailsProps = { + edition: string; +} + +export function EditionDetails({ edition, ...props }: EditionDetailsProps) { + const result = useAsync(useCallback(() => api.edition.details(edition), [ edition ])); + + return { edition =>
{ JSON.stringify(edition, null, 2) }
}
+} + +export function ManagementEditionsList() { + const { t } = useTranslation("management"); + const editions = useAsync(useCallback(api.edition.all, [])); + + const columns: Column[] = [ + { + title: t("edition.fields.id"), + field: "id", + cellStyle: { whiteSpace: "nowrap" } + }, + { + title: t("edition.fields.start"), + render: edition => edition.startDate.format("DD.MM.yyyy"), + customSort: (a, b) => b.startDate.unix() - a.startDate.unix(), + }, + { + title: t("edition.fields.end"), + render: edition => edition.endDate.format("DD.MM.yyyy"), + customSort: (a, b) => b.endDate.unix() - a.endDate.unix(), + }, + { + title: t("edition.fields.course"), + customSort: (a, b) => a.course.name.localeCompare(b.course.name), + render: edition => edition.course.name, + }, + ] + + const actions: Action[] = [ + { + icon: () => , + onClick: () => {}, + } + ] + + return + + { t("edition.index.title") } + + + + { editions => + } + title={ t("edition.index.title") } + options={{ search: false, actionsColumnIndex: -1 }} + /> + } + + + ; +} diff --git a/src/management/middleware.tsx b/src/management/middleware.tsx new file mode 100644 index 0000000..7dd339d --- /dev/null +++ b/src/management/middleware.tsx @@ -0,0 +1,14 @@ +import { isLoggedInMiddleware } from "@/middleware"; +import { useCurrentUser } from "@/hooks"; +import React from "react"; +import { Middleware } from "@/routing"; + +export const isManagerMiddleware: Middleware = Next => isLoggedInMiddleware(() => { + const user = useCurrentUser(); + + if (user.isManager) { + return ; + } + + return
; +}) diff --git a/src/management/routing.tsx b/src/management/routing.tsx new file mode 100644 index 0000000..510d970 --- /dev/null +++ b/src/management/routing.tsx @@ -0,0 +1,15 @@ +import { Route } from "@/routing"; +import { isManagerMiddleware } from "@/management/middleware"; +import { ManagementEditionsList } from "@/management/edition/list"; +import React from "react"; + +export const managementRoutes: Route[] = ([ + { name: "editions_index", path: "/editions", content: ManagementEditionsList } +] as Route[]).map( + ({ name, path, middlewares = [], ...route }): Route => ({ + name: `management:${ name }`, + path: `/management${ path }`, + middlewares: [ isManagerMiddleware, ...middlewares ], + ...route + }) +); diff --git a/src/routing.tsx b/src/routing.tsx index 8b88172..1df7a20 100644 --- a/src/routing.tsx +++ b/src/routing.tsx @@ -10,8 +10,9 @@ import PickEditionPage from "@/pages/edition/pick"; import { isLoggedInMiddleware, isReadyMiddleware } from "@/middleware"; import UserFillPage from "@/pages/user/fill"; import UserProfilePage from "@/pages/user/profile"; +import { managementRoutes } from "@/management/routing"; -type Route = { +export type Route = { name?: string; content: () => ReactComponentElement, condition?: () => boolean, @@ -48,8 +49,10 @@ export const routes: Route[] = [ { name: "user_fill", path: "/user/data", content: () => , middlewares: [ isLoggedInMiddleware ] }, { name: "user_profile", path: "/user/profile", content: () => , middlewares: [ isLoggedInMiddleware ] }, + ...managementRoutes, + // fallback route for 404 pages - { name: "fallback", path: "*", content: () => } + { name: "fallback", path: "*", content: () => }, ] const routeNameMap = new Map(routes.filter(({ name }) => !!name).map(({ name, path }) => [name, path instanceof Array ? path[0] : path])) as Map diff --git a/src/state/reducer/user.ts b/src/state/reducer/user.ts index 1757986..8865626 100644 --- a/src/state/reducer/user.ts +++ b/src/state/reducer/user.ts @@ -3,10 +3,12 @@ import { UserAction, UserActions } from "@/state/actions/user"; export type UserState = { loggedIn: boolean; token?: string; + isManager: boolean; } const initialUserState: UserState = { loggedIn: false, + isManager: false, } const userReducer = (state: UserState = initialUserState, action: UserAction): UserState => { @@ -16,12 +18,11 @@ const userReducer = (state: UserState = initialUserState, action: UserAction): U ...state, loggedIn: true, token: action.token, + isManager: true, } case UserActions.Logout: - return { - loggedIn: false - }; + return initialUserState; } return state; diff --git a/src/styles/footer.scss b/src/styles/footer.scss index 943ddb0..3c851bf 100644 --- a/src/styles/footer.scss +++ b/src/styles/footer.scss @@ -10,5 +10,34 @@ } .footer__copyright { - text-align: right; + margin-left: auto; +} + +.footer__menu { + display: block; + padding: 0; + margin: 0; + + li { + display: inline-block; + + &:not(:first-child) { + margin-left: .5rem; + &::before { + content: "•"; + opacity: 0.6; + margin-right: .5rem; + } + } + } + + a { + color: white; + text-decoration: none; + opacity: 0.8; + + &:hover { + opacity: 1.0; + } + } } diff --git a/translations/management.en.yaml b/translations/management.en.yaml new file mode 100644 index 0000000..e69de29 diff --git a/translations/management.pl.yaml b/translations/management.pl.yaml new file mode 100644 index 0000000..f90117a --- /dev/null +++ b/translations/management.pl.yaml @@ -0,0 +1,8 @@ +edition: + index: + title: "Edycje praktyk" + fields: + id: Identyfikator + start: Początek + end: Koniec + course: Kierunek diff --git a/yarn.lock b/yarn.lock index 281e4cd..a27287f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -912,6 +912,14 @@ "@babel/helper-plugin-utils" "^7.10.1" "@babel/plugin-transform-typescript" "^7.10.1" +"@babel/runtime-corejs3@^7.9.6": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.5.tgz#ffee91da0eb4c6dae080774e94ba606368e414f4" + integrity sha512-roGr54CsTmNPPzZoCP1AmDXuBoNao7tnSA83TXTwt+UK5QVyh1DIJnrgYRPWKCF2flqZQXwa7Yr8v7VmLzF0YQ== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + "@babel/runtime@7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.0.tgz#337eda67401f5b066a6f205a3113d4ac18ba495b" @@ -940,6 +948,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.10.1", "@babel/template@^7.8.6": version "7.10.1" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.1.tgz#e167154a94cb5f14b28dc58f5356d2162f539811" @@ -988,6 +1003,13 @@ resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa" integrity sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA== +"@date-io/date-fns@^1.1.0": + version "1.3.13" + resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-1.3.13.tgz#7798844041640ab393f7e21a7769a65d672f4735" + integrity sha512-yXxGzcRUPcogiMj58wVgFjc9qUYrCnnU9eLcyNbsQCmae4jPuZCDoIBR21j8ZURsM7GRtU62VOw5yNd4dDHunA== + dependencies: + "@date-io/core" "^1.3.13" + "@date-io/moment@^1.3.13": version "1.3.13" resolved "https://registry.yarnpkg.com/@date-io/moment/-/moment-1.3.13.tgz#56c2772bc4f6675fc6970257e6033e7a7c2960f0" @@ -1050,6 +1072,16 @@ react-is "^16.8.0" react-transition-group "^4.4.0" +"@material-ui/data-grid@^4.0.0-alpha.9": + version "4.0.0-alpha.9" + resolved "https://registry.yarnpkg.com/@material-ui/data-grid/-/data-grid-4.0.0-alpha.9.tgz#a5f48550ea7c1ebdbcde9c7e0889ec9600473fec" + integrity sha512-2aXKQI6BH800i1AQzR3+p2eEET4ejVeGFlJQXBFvzBGodBW/AGfT2WsJGkmkriiVvD6jpsNsC5XF0HMAAcIFPA== + dependencies: + "@material-ui/utils" "^5.0.0-alpha.14" + prop-types "^15.7.2" + reselect "^4.0.0" + tslib "^2.0.0" + "@material-ui/icons@^4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.9.1.tgz#fdeadf8cb3d89208945b33dbc50c7c616d0bd665" @@ -1068,7 +1100,7 @@ prop-types "^15.7.2" react-is "^16.8.0" -"@material-ui/pickers@^3.2.10": +"@material-ui/pickers@^3.2.10", "@material-ui/pickers@^3.2.2": version "3.2.10" resolved "https://registry.yarnpkg.com/@material-ui/pickers/-/pickers-3.2.10.tgz#19df024895876eb0ec7cd239bbaea595f703f0ae" integrity sha512-B8G6Obn5S3RCl7hwahkQj9sKUapwXWFjiaz/Bsw1fhYFdNMnDUolRiWQSoKPb1/oKe37Dtfszoywi1Ynbo3y8w== @@ -1126,6 +1158,17 @@ prop-types "^15.7.2" react-is "^16.8.0" +"@material-ui/utils@^5.0.0-alpha.14": + version "5.0.0-alpha.15" + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-5.0.0-alpha.15.tgz#b3ff9ae27f0b1ba60fe85ed318c49e4796d7eece" + integrity sha512-hxzqf4W7FVnVWB0x/+FKUwdcR3YUyoe7SeDBdsqPTkcUstU7RvrJztCAhybmeT3nTRQBd28HKGguM6oSCbboUw== + dependencies: + "@babel/runtime" "^7.4.4" + "@types/prop-types" "^15.7.3" + "@types/react-is" "^16.7.1 || ^17.0.0" + prop-types "^15.7.2" + react-is "^16.8.0 || ^17.0.0" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1200,7 +1243,7 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prop-types@*": +"@types/prop-types@*", "@types/prop-types@^15.7.3": version "15.7.3" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== @@ -1210,6 +1253,11 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== +"@types/raf@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.0.tgz#2b72cbd55405e071f1c4d29992638e022b20acc2" + integrity sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw== + "@types/react-dom@^16.9.0": version "16.9.8" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" @@ -1217,6 +1265,13 @@ dependencies: "@types/react" "*" +"@types/react-is@^16.7.1 || ^17.0.0": + version "16.7.1" + resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-16.7.1.tgz#d3f1c68c358c00ce116b55ef5410cf486dd08539" + integrity sha512-dMLFD2cCsxtDgMkTydQCM0PxDq8vwc6uN5M/jRktDfYvH3nQj6pjC9OrCXS2lKlYoYTNJorI/dI8x9dpLshexQ== + dependencies: + "@types/react" "*" + "@types/react-redux@^7.1.9": version "7.1.9" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.9.tgz#280c13565c9f13ceb727ec21e767abe0e9b4aec3" @@ -2034,6 +2089,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-arraybuffer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz#4b944fac0191aa5907afe2d8c999ccc57ce80f45" + integrity sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ== + base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" @@ -2258,6 +2318,11 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.6.2, browserslist@^4. node-releases "^1.1.53" pkg-up "^2.0.0" +btoa@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" + integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -2415,6 +2480,18 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, can resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001081.tgz#40615a3c416a047c5a4d45673e5257bf128eb3b5" integrity sha512-iZdh3lu09jsUtLE6Bp8NAbJskco4Y3UDtkR3GTCJGsbMowBU5IWDFF79sV2ws7lSqTzWyKazxam2thasHymENQ== +canvg@^3.0.6: + version "3.0.7" + resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.7.tgz#e45b87a64116af906917f7cad57d370ea372d682" + integrity sha512-4sq6iL5Q4VOXS3PL1BapiXIZItpxYyANVzsAKpTPS5oq4u3SKbGfUcbZh2gdLCQ3jWpG/y5wRkMlBBAJhXeiZA== + dependencies: + "@babel/runtime-corejs3" "^7.9.6" + "@types/raf" "^3.4.0" + raf "^3.4.1" + rgbcolor "^1.0.1" + stackblur-canvas "^2.0.0" + svg-pathdata "^5.0.5" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -2769,6 +2846,11 @@ core-js-compat@^3.6.2: browserslist "^4.8.5" semver "7.0.0" +core-js-pure@^3.0.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.7.0.tgz#28a57c861d5698e053f0ff36905f7a3301b4191e" + integrity sha512-EZD2ckZysv8MMt4J6HSvS9K2GdtlZtdBncKAmF9lr2n0c9dJUaUN88PSTjvgwCgQPWKTkERXITgS6JJRAnljtg== + core-js@^2.4.0, core-js@^2.5.0: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" @@ -2779,6 +2861,11 @@ core-js@^3.5.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== +core-js@^3.6.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f" + integrity sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -2888,6 +2975,13 @@ css-blank-pseudo@^0.1.4: dependencies: postcss "^7.0.5" +css-box-model@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" + integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== + dependencies: + tiny-invariant "^1.0.6" + css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -2909,6 +3003,13 @@ css-has-pseudo@^0.10.0: postcss "^7.0.6" postcss-selector-parser "^5.0.0-rc.4" +css-line-break@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-1.1.1.tgz#d5e9bdd297840099eb0503c7310fd34927a026ef" + integrity sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA== + dependencies: + base64-arraybuffer "^0.2.0" + css-loader@3.4.2: version "3.4.2" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.4.2.tgz#d3fdb3358b43f233b78501c5ed7b1c6da6133202" @@ -3124,6 +3225,11 @@ date-easter@^0.2.5: resolved "https://registry.yarnpkg.com/date-easter/-/date-easter-0.2.5.tgz#85ddce23ee4e08b7b71fd3420c89d3d3576bec2f" integrity sha512-pMvZSqQgPBqnUQEHhRMy7f8Dk3KYY/NPFMFHGK4mU+xM1+SX+zc9IoQMcNtS3HuJjCn3mp0GQwBzsZXz3Thjww== +date-fns@^2.0.0-alpha.27: + version "2.16.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" + integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== + date-holidays-parser@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/date-holidays-parser/-/date-holidays-parser-1.4.3.tgz#f0bd101c1fa8e091b01cfd8dd7791b7401695cf9" @@ -3151,6 +3257,11 @@ date-holidays@^1.5.3: lodash.pick "^4.4.0" prepin "^1.0.3" +debounce@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" + integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -3384,6 +3495,11 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +dompurify@^2.0.12: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.2.2.tgz#cb8c2b1a2f3c8a0b565127504ae4eedec176a972" + integrity sha512-BsGR4nDLaC5CNBnyT5I+d5pOeaoWvgVeg6Gq/aqmKYWMPR07131u60I80BvExLAJ0FQEIBQ1BTicw+C5+jOyrg== + domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -3785,6 +3901,11 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fast-deep-equal@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3853,6 +3974,11 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filefy@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/filefy/-/filefy-0.1.10.tgz#174677c8e2fa5bc39a3af0ed6fb492f16b8fbf42" + integrity sha512-VgoRVOOY1WkTpWH+KBy8zcU1G7uQTVsXqhWEgzryB9A5hg2aqCyZ6aQ/5PSzlqM5+6cnVrX6oYV0XqD3HZSnmQ== + filesize@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f" @@ -4510,6 +4636,13 @@ html-webpack-plugin@4.0.0-beta.11: tapable "^1.1.3" util.promisify "1.0.0" +html2canvas@^1.0.0-rc.5: + version "1.0.0-rc.7" + resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.0.0-rc.7.tgz#70c159ce0e63954a91169531894d08ad5627ac98" + integrity sha512-yvPNZGejB2KOyKleZspjK/NruXVQuowu8NnV2HYG7gW7ytzl+umffbtUI62v2dCHQLDdsK6HIDtyJZ0W3neerA== + dependencies: + css-line-break "1.1.1" + htmlparser2@^3.3.0: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" @@ -5252,6 +5385,24 @@ jsonwebtoken@^8.5.1: ms "^2.1.1" semver "^5.6.0" +jspdf-autotable@3.5.9: + version "3.5.9" + resolved "https://registry.yarnpkg.com/jspdf-autotable/-/jspdf-autotable-3.5.9.tgz#8a625ef2aead44271da95e9f649843c401536925" + integrity sha512-ZRfiI5P7leJuWmvC0jGVXu227m68C2Jfz1dkDckshmDYDeVFCGxwIBYdCUXJ8Eb2CyFQC2ok82fEWO+xRDovDQ== + +jspdf@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-2.1.0.tgz#2322f8644bc41845b3abe20db4c3ca0adeadb84c" + integrity sha512-NQygqZEKhSw+nExySJxB72Ge/027YEyIM450Vh/hgay/H9cgZNnkXXOQPRspe9EuCW4sq92zg8hpAXyyBdnaIQ== + dependencies: + atob "^2.1.2" + btoa "^1.2.1" + optionalDependencies: + canvg "^3.0.6" + core-js "^3.6.0" + dompurify "^2.0.12" + html2canvas "^1.0.0-rc.5" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -5646,6 +5797,24 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +material-table@^1.69.1: + version "1.69.1" + resolved "https://registry.yarnpkg.com/material-table/-/material-table-1.69.1.tgz#8d1c8b23207f18bd3328cae1b5775ede284682e6" + integrity sha512-7MA8kMtr8ToPE6gNUbOGIb4g+RGOLWK8s9gXZYNwFtg6fGAjWEJ+iqBrMmdq7fkMmTRcyOd7/sC/5OPPY8CNGg== + dependencies: + "@date-io/date-fns" "^1.1.0" + "@material-ui/pickers" "^3.2.2" + classnames "^2.2.6" + date-fns "^2.0.0-alpha.27" + debounce "^1.2.0" + fast-deep-equal "2.0.1" + filefy "0.1.10" + jspdf "2.1.0" + jspdf-autotable "3.5.9" + prop-types "^15.6.2" + react-beautiful-dnd "^13.0.0" + react-double-scrollbar "0.0.15" + material-ui-dropzone@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/material-ui-dropzone/-/material-ui-dropzone-3.3.0.tgz#5adb64e7ad71953eb29c7d0616b0b693904eb412" @@ -5693,6 +5862,11 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" +memoize-one@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== + memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -5875,7 +6049,7 @@ moment-timezone@^0.5.27, moment-timezone@^0.5.31: dependencies: moment ">= 2.9.0" -"moment@>= 2.9.0", moment@^2.26.0: +"moment@>= 2.9.0": version "2.26.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a" integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw== @@ -7445,6 +7619,11 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +raf-schd@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" + integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ== + raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -7494,6 +7673,19 @@ react-app-polyfill@^1.0.6: regenerator-runtime "^0.13.3" whatwg-fetch "^3.0.0" +react-beautiful-dnd@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz#f70cc8ff82b84bc718f8af157c9f95757a6c3b40" + integrity sha512-87It8sN0ineoC3nBW0SbQuTFXM6bUqM62uJGY4BtTf0yzPl8/3+bHMWkgIe0Z6m8e+gJgjWxefGRVfpE3VcdEg== + dependencies: + "@babel/runtime" "^7.8.4" + css-box-model "^1.2.0" + memoize-one "^5.1.1" + raf-schd "^4.0.2" + react-redux "^7.1.1" + redux "^4.0.4" + use-memo-one "^1.1.1" + react-dev-utils@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-10.2.1.tgz#f6de325ae25fa4d546d09df4bb1befdc6dd19c19" @@ -7534,6 +7726,11 @@ react-dom@^16.13.1: prop-types "^15.6.2" scheduler "^0.19.1" +react-double-scrollbar@0.0.15: + version "0.0.15" + resolved "https://registry.yarnpkg.com/react-double-scrollbar/-/react-double-scrollbar-0.0.15.tgz#e915ab8cb3b959877075f49436debfdb04288fe4" + integrity sha1-6RWrjLO5WYdwdfSUNt6/2wQoj+Q= + react-dropzone@^10.2.1: version "10.2.2" resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-10.2.2.tgz#67b4db7459589a42c3b891a82eaf9ade7650b815" @@ -7561,16 +7758,32 @@ react-i18next@^11.7.0: "@babel/runtime" "^7.3.1" html-parse-stringify2 "2.0.1" -react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.9.0: +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.9.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +"react-is@^16.8.0 || ^17.0.0": + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + react-moment@^0.9.7: version "0.9.7" resolved "https://registry.yarnpkg.com/react-moment/-/react-moment-0.9.7.tgz#ca570466595b1aa4f7619e62da18b3bb2de8b6f3" integrity sha512-ifzUrUGF6KRsUN2pRG5k56kO0mJBr8kRkWb0wNvtFIsBIxOuPxhUpL1YlXwpbQCbHq23hUu6A0VEk64HsFxk9g== +react-redux@^7.1.1: + version "7.2.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.2.tgz#03862e803a30b6b9ef8582dadcc810947f74b736" + integrity sha512-8+CQ1EvIVFkYL/vu6Olo7JFLWop1qRUeb46sGtIMDCSpgwPQq8fPLpirIB0iTqFe9XYEFPHssdX8/UwN6pAkEA== + dependencies: + "@babel/runtime" "^7.12.1" + hoist-non-react-statics "^3.3.2" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^16.13.1" + react-redux@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d" @@ -7715,7 +7928,7 @@ redux-thunk@^2.3.0: resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== -redux@*, redux@^4.0.0, redux@^4.0.5: +redux@*, redux@^4.0.0, redux@^4.0.4, redux@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== @@ -7882,6 +8095,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +reselect@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" + integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -7952,6 +8170,11 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= +rgbcolor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d" + integrity sha1-1lBezbMEplldom+ktDMHMGd1lF0= + rifm@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/rifm/-/rifm-0.7.0.tgz#debe951a9c83549ca6b33e5919f716044c2230be" @@ -8461,6 +8684,11 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stackblur-canvas@^2.0.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.4.0.tgz#2b2eba910cb46f6feae918e1c402f863d602c01b" + integrity sha512-Z+HixfgYV0ss3C342DxPwc+UvN1SYWqoz7Wsi3xEDWEnaBkSCL3Ey21gF4io+WlLm8/RIrSnCrDBIEcH4O+q5Q== + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -8696,6 +8924,11 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +svg-pathdata@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/svg-pathdata/-/svg-pathdata-5.0.5.tgz#65e8d765642ba15fe15434444087d082bc526b29" + integrity sha512-TAAvLNSE3fEhyl/Da19JWfMAdhSXTYeviXsLSoDT1UM76ADj5ndwAPX1FKQEgB/gFMPavOy6tOqfalXKUiXrow== + svgo@^1.0.0: version "1.3.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" @@ -8798,7 +9031,7 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= -tiny-invariant@^1.0.2: +tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: version "1.1.0" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== @@ -8913,6 +9146,11 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== +tslib@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" @@ -9082,6 +9320,11 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-memo-one@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.1.tgz#39e6f08fe27e422a7d7b234b5f9056af313bd22c" + integrity sha512-oFfsyun+bP7RX8X2AskHNTxu+R3QdE/RC5IefMbqptmACAA/gfol1KDD5KRzPsGMa62sWxGZw+Ui43u6x4ddoQ== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"