diff --git a/frontend/package.json b/frontend/package.json index c5ae181..c38672e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -33,13 +33,13 @@ "axios-auth-refresh": "^2.2.7", "color": "^3.1.2", "date-fns": "^2.14.0", + "dayjs": "^1.9.1", "graphql": "^15.0.0", "graphql-tag": "^2.10.3", "history": "^4.10.1", "immer": "^6.0.3", "jwt-decode": "^2.2.0", "lodash": "^4.17.15", - "moment": "^2.24.0", "prop-types": "^15.7.2", "react": "^16.12.0", "react-autosize-textarea": "^7.0.0", @@ -52,9 +52,9 @@ "react-router-dom": "^5.1.2", "react-scripts": "3.4.0", "react-select": "^3.1.0", - "rich-markdown-editor": "^10.6.5", "react-timeago": "^4.4.0", "react-toastify": "^6.0.8", + "rich-markdown-editor": "^10.6.5", "styled-components": "^5.0.1", "typescript": "~3.7.2" }, diff --git a/frontend/src/Projects/Project/Board/FilterMeta.tsx b/frontend/src/Projects/Project/Board/FilterMeta.tsx index fb10af3..c443d7c 100644 --- a/frontend/src/Projects/Project/Board/FilterMeta.tsx +++ b/frontend/src/Projects/Project/Board/FilterMeta.tsx @@ -5,7 +5,6 @@ import { TaskMetaFilters, TaskMeta, TaskMetaMatch, DueDateFilterType } from 'sha import Input from 'shared/components/ControlledInput'; import { Popup, usePopup } from 'shared/components/PopupMenu'; import produce from 'immer'; -import moment from 'moment'; import { mixin } from 'shared/utils/styles'; import Member from 'shared/components/Member'; diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index 085471f..668234c 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -8,15 +8,28 @@ import { HttpLink } from 'apollo-link-http'; import { onError } from 'apollo-link-error'; import { enableMapSet } from 'immer'; import { ApolloLink, Observable, fromPromise } from 'apollo-link'; -import moment from 'moment'; +import dayjs from 'dayjs'; +import updateLocale from 'dayjs/plugin/updateLocale'; +import isSameOrAfter from 'dayjs/plugin/isSameOrAfter'; +import customParseFormat from 'dayjs/plugin/customParseFormat'; +import isBetween from 'dayjs/plugin/isBetween'; +import weekday from 'dayjs/plugin/weekday'; import { getAccessToken, getNewToken, setAccessToken } from 'shared/utils/accessToken'; import cache from './App/cache'; import App from './App'; // https://able.bio/AnasT/apollo-graphql-async-access-token-refresh--470t1c8 + +dayjs.extend(isSameOrAfter); + +dayjs.extend(weekday); +dayjs.extend(isBetween); +dayjs.extend(customParseFormat); enableMapSet(); -moment.updateLocale('en', { +dayjs.extend(updateLocale); + +dayjs.updateLocale('en', { week: { dow: 1, // First day of week is Monday doy: 7, // First week of year must contain 1 January (7 + 1 - 1) diff --git a/frontend/src/shared/components/DueDateManager/index.tsx b/frontend/src/shared/components/DueDateManager/index.tsx index a9a2915..62cc1d8 100644 --- a/frontend/src/shared/components/DueDateManager/index.tsx +++ b/frontend/src/shared/components/DueDateManager/index.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect, forwardRef } from 'react'; -import moment from 'moment'; +import dayjs from 'dayjs'; import styled from 'styled-components'; import DatePicker from 'react-datepicker'; import _ from 'lodash'; @@ -110,12 +110,12 @@ const HeaderActions = styled.div` `; const DueDateManager: React.FC = ({ task, onDueDateChange, onRemoveDueDate, onCancel }) => { - const now = moment(); + const now = dayjs(); const { register, handleSubmit, errors, setValue, setError, formState, control } = useForm(); const [startDate, setStartDate] = useState(new Date()); useEffect(() => { - const newDate = moment(startDate).format('YYYY-MM-DD'); + const newDate = dayjs(startDate).format('YYYY-MM-DD'); setValue('endDate', newDate); }, [startDate]); @@ -135,7 +135,7 @@ const DueDateManager: React.FC = ({ task, onDueDateChange, 'December', ]; const saveDueDate = (data: any) => { - const newDate = moment(`${data.endDate} ${moment(data.endTime).format('h:mm A')}`, 'YYYY-MM-DD h:mm A'); + const newDate = dayjs(`${data.endDate} ${dayjs(data.endTime).format('h:mm A')}`, 'YYYY-MM-DD h:mm A'); if (newDate.isValid()) { onDueDateChange(task, newDate.toDate()); } diff --git a/frontend/src/shared/components/Lists/index.tsx b/frontend/src/shared/components/Lists/index.tsx index 0317519..f64508e 100644 --- a/frontend/src/shared/components/Lists/index.tsx +++ b/frontend/src/shared/components/Lists/index.tsx @@ -10,7 +10,7 @@ import { getNewDraggablePosition, getAfterDropDraggableList, } from 'shared/utils/draggables'; -import moment from 'moment'; +import dayjs from 'dayjs'; import { TaskSorting, TaskSortingType, TaskSortingDirection, sortTasks } from 'shared/utils/sorting'; import { Container, BoardContainer, BoardWrapper } from './Styles'; @@ -51,7 +51,7 @@ export type TaskStatusFilter = { export interface TaskMetaFilterName { meta: TaskMeta; - value?: string | moment.Moment | null; + value?: string | dayjs.Dayjs | null; id?: string | null; } @@ -104,30 +104,30 @@ function shouldStatusFilter(task: Task, filter: TaskStatusFilter) { return true; } if (filter.status === TaskStatus.COMPLETE && task.completedAt && task.complete === true) { - const completedAt = moment(task.completedAt); - const REFERENCE = moment(); // fixed just for testing, use moment(); + const completedAt = dayjs(task.completedAt); + const REFERENCE = dayjs(); switch (filter.since) { case TaskSince.TODAY: const TODAY = REFERENCE.clone().startOf('day'); return completedAt.isSame(TODAY, 'd'); case TaskSince.YESTERDAY: const YESTERDAY = REFERENCE.clone() - .subtract(1, 'days') + .subtract(1, 'day') .startOf('day'); return completedAt.isSameOrAfter(YESTERDAY, 'd'); case TaskSince.ONE_WEEK: const ONE_WEEK = REFERENCE.clone() - .subtract(7, 'days') + .subtract(7, 'day') .startOf('day'); return completedAt.isSameOrAfter(ONE_WEEK, 'd'); case TaskSince.TWO_WEEKS: const TWO_WEEKS = REFERENCE.clone() - .subtract(14, 'days') + .subtract(14, 'day') .startOf('day'); return completedAt.isSameOrAfter(TWO_WEEKS, 'd'); case TaskSince.THREE_WEEKS: const THREE_WEEKS = REFERENCE.clone() - .subtract(21, 'days') + .subtract(21, 'day') .startOf('day'); return completedAt.isSameOrAfter(THREE_WEEKS, 'd'); default: @@ -353,7 +353,7 @@ const SimpleLists: React.FC = ({ task.dueDate ? { isPastDue: false, - formattedDate: moment(task.dueDate).format('MMM D, YYYY'), + formattedDate: dayjs(task.dueDate).format('MMM D, YYYY'), } : undefined } diff --git a/frontend/src/shared/components/Lists/metaFilter.ts b/frontend/src/shared/components/Lists/metaFilter.ts index f4716b4..4091283 100644 --- a/frontend/src/shared/components/Lists/metaFilter.ts +++ b/frontend/src/shared/components/Lists/metaFilter.ts @@ -1,5 +1,5 @@ import { TaskMetaFilters, DueDateFilterType } from 'shared/components/Lists'; -import moment from 'moment'; +import dayjs from 'dayjs'; enum ShouldFilter { NO_FILTER, @@ -24,8 +24,8 @@ export default function shouldMetaFilter(task: Task, filters: TaskMetaFilters) { isFiltered = shouldFilter(!(task.dueDate && task.dueDate !== null)); } if (task.dueDate) { - const taskDueDate = moment(task.dueDate); - const today = moment(); + const taskDueDate = dayjs(task.dueDate); + const today = dayjs(); let start; let end; switch (filters.dueDate.type) { @@ -40,7 +40,7 @@ export default function shouldMetaFilter(task: Task, filters: TaskMetaFilters) { taskDueDate.isBefore( today .clone() - .add(1, 'days') + .add(1, 'day') .endOf('day'), ), ); @@ -60,12 +60,12 @@ export default function shouldMetaFilter(task: Task, filters: TaskMetaFilters) { start = today .clone() .weekday(0) - .add(7, 'days') + .add(7, 'day') .startOf('day'); end = today .clone() .weekday(6) - .add(7, 'days') + .add(7, 'day') .endOf('day'); isFiltered = shouldFilter(taskDueDate.isBetween(start, end)); break; @@ -73,7 +73,7 @@ export default function shouldMetaFilter(task: Task, filters: TaskMetaFilters) { start = today.clone().startOf('day'); end = today .clone() - .add(7, 'days') + .add(7, 'day') .endOf('day'); isFiltered = shouldFilter(taskDueDate.isBetween(start, end)); break; @@ -81,7 +81,7 @@ export default function shouldMetaFilter(task: Task, filters: TaskMetaFilters) { start = today.clone().startOf('day'); end = today .clone() - .add(14, 'days') + .add(14, 'day') .endOf('day'); isFiltered = shouldFilter(taskDueDate.isBetween(start, end)); break; @@ -89,7 +89,7 @@ export default function shouldMetaFilter(task: Task, filters: TaskMetaFilters) { start = today.clone().startOf('day'); end = today .clone() - .add(21, 'days') + .add(21, 'day') .endOf('day'); isFiltered = shouldFilter(taskDueDate.isBetween(start, end)); break; diff --git a/frontend/src/shared/components/TaskDetails/index.tsx b/frontend/src/shared/components/TaskDetails/index.tsx index 9d9b23f..2f95e43 100644 --- a/frontend/src/shared/components/TaskDetails/index.tsx +++ b/frontend/src/shared/components/TaskDetails/index.tsx @@ -17,7 +17,7 @@ import dark from 'shared/utils/editorTheme'; import styled from 'styled-components'; import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd'; -import moment from 'moment'; +import dayjs from 'dayjs'; import Task from 'shared/icons/Task'; import { @@ -182,7 +182,7 @@ const TaskDetails: React.FC = ({ }} > {task.dueDate ? ( - {moment(task.dueDate).format('MMM D [at] h:mm A')} + {dayjs(task.dueDate).format('MMM D [at] h:mm A')} ) : ( No due date )} diff --git a/frontend/src/shared/utils/sorting.ts b/frontend/src/shared/utils/sorting.ts index f10ca4a..057e9d7 100644 --- a/frontend/src/shared/utils/sorting.ts +++ b/frontend/src/shared/utils/sorting.ts @@ -1,4 +1,4 @@ -import moment from 'moment'; +import dayjs from 'dayjs'; export enum TaskSortingType { NONE, @@ -46,7 +46,7 @@ export function sortTasks(a: Task, b: Task, taskSorting: TaskSorting) { if (b.dueDate && !a.dueDate) { return 1; } - return moment(a.dueDate).diff(moment(b.dueDate)); + return dayjs(a.dueDate).diff(dayjs(b.dueDate)); } if (taskSorting.type === TaskSortingType.COMPLETE) { if (a.complete && !b.complete) { diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 2aa6ef8..984164e 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -1342,7 +1342,7 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@7.8.4", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": +"@babel/runtime@7.8.4", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.4", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.4.tgz#d79f5a2040f7caa24d53e563aad49cbc05581308" integrity sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ== @@ -1610,46 +1610,6 @@ ts-node "^8" tslib "^1" -"@fortawesome/fontawesome-common-types@^0.2.27": - version "0.2.27" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.27.tgz#19706345859fc46adf3684ed01d11b40903b87e9" - integrity sha512-97GaByGaXDGMkzcJX7VmR/jRJd8h1mfhtA7RsxDBN61GnWE/PPCZhOdwG/8OZYktiRUF0CvFOr+VgRkJrt6TWg== - -"@fortawesome/fontawesome-svg-core@^1.2.27": - version "1.2.27" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.27.tgz#e4db8e3be81a40988213507c3e3d0c158a6641a3" - integrity sha512-sOD3DKynocnHYpuw2sLPnTunDj7rLk91LYhi2axUYwuGe9cPCw7Bsu9EWtVdNJP+IYgTCZIbyARKXuy5K/nv+Q== - dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.27" - -"@fortawesome/free-brands-svg-icons@^5.12.1": - version "5.12.1" - resolved "https://registry.yarnpkg.com/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.12.1.tgz#67977addd15e21e57aa1ed71cd2ddecdfaa88647" - integrity sha512-IYUYcgGsQuwiIHjRGfeSTCIQKUSZMb6FsV6mDj78K0D+YzGJkM4cvEBBUMHtnla5D2HCxncMI/9JX5YIk2GHeQ== - dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.27" - -"@fortawesome/free-regular-svg-icons@^5.12.1": - version "5.12.1" - resolved "https://registry.yarnpkg.com/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.12.1.tgz#4b378d93655acc5e432d5ed7ee127768dd351a99" - integrity sha512-bGda18seHXb+24K6DPUFzqn4kG7B+JViP/BscMcNUXvT00M86xNhdgP2TXSdflQXn53QWqymKjx/8rhaDOJyhA== - dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.27" - -"@fortawesome/free-solid-svg-icons@^5.12.1": - version "5.12.1" - resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.12.1.tgz#76b6f958a3471821ff146f8f955e6d7cfe87147c" - integrity sha512-k3MwRFFUhyL4cuCJSaHDA0YNYMELDXX0h8JKtWYxO5XD3Dn+maXOMrVAAiNGooUyM2v/wz/TOaM0jxYVKeXX7g== - dependencies: - "@fortawesome/fontawesome-common-types" "^0.2.27" - -"@fortawesome/react-fontawesome@^0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.8.tgz#cb6d4dd3aeec45b6ff2d48c812317a6627618511" - integrity sha512-I5h9YQg/ePA3Br9ISS18fcwOYmzQYDSM1ftH03/8nHkiqIVHtUyQBw482+60dnzvlr82gHt3mGm+nDUp159FCw== - dependencies: - prop-types "^15.5.10" - "@graphql-codegen/cli@^1.13.2": version "1.13.2" resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-1.13.2.tgz#4cfb3a4d766e3177ff727ea1b93429fd0f93cfcd" @@ -2181,11 +2141,6 @@ dependencies: any-observable "^0.3.0" -"@sheerun/mutationobserver-shim@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b" - integrity sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q== - "@storybook/addon-actions@^5.3.13": version "5.3.13" resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.13.tgz#faf57ca14a46ce0c69168c631fbfc3d79d294b38" @@ -2947,47 +2902,6 @@ "@svgr/plugin-svgo" "^4.3.1" loader-utils "^1.2.3" -"@testing-library/dom@^6.11.0": - version "6.12.2" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-6.12.2.tgz#5d549acf43f2e0c23b2abfd4e36d65594c3b2741" - integrity sha512-KCnvHra5fV+wDxg3wJObGvZFxq7v1DJt829GNFLuRDjKxVNc/B5AdsylNF5PMHFbWMXDsHwM26d2NZcZO9KjbQ== - dependencies: - "@babel/runtime" "^7.6.2" - "@sheerun/mutationobserver-shim" "^0.3.2" - "@types/testing-library__dom" "^6.0.0" - aria-query "3.0.0" - pretty-format "^24.9.0" - wait-for-expect "^3.0.0" - -"@testing-library/jest-dom@^4.2.4": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-4.2.4.tgz#00dfa0cbdd837d9a3c2a7f3f0a248ea6e7b89742" - integrity sha512-j31Bn0rQo12fhCWOUWy9fl7wtqkp7In/YP2p5ZFyRuiiB9Qs3g+hS4gAmDWONbAHcRmVooNJ5eOHQDCOmUFXHg== - dependencies: - "@babel/runtime" "^7.5.1" - chalk "^2.4.1" - css "^2.2.3" - css.escape "^1.5.1" - jest-diff "^24.0.0" - jest-matcher-utils "^24.0.0" - lodash "^4.17.11" - pretty-format "^24.0.0" - redent "^3.0.0" - -"@testing-library/react@^9.3.2": - version "9.4.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-9.4.0.tgz#b021ac8cb987c8dc54c6841875f745bf9b2e88e5" - integrity sha512-XdhDWkI4GktUPsz0AYyeQ8M9qS/JFie06kcSnUVcpgOwFjAu9vhwR83qBl+lw9yZWkbECjL8Hd+n5hH6C0oWqg== - dependencies: - "@babel/runtime" "^7.7.6" - "@testing-library/dom" "^6.11.0" - "@types/testing-library__react" "^9.1.2" - -"@testing-library/user-event@^7.1.2": - version "7.2.1" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-7.2.1.tgz#2ad4e844175a3738cb9e7064be5ea070b8863a1c" - integrity sha512-oZ0Ib5I4Z2pUEcoo95cT1cr6slco9WY7yiPpG+RGNkj8YcYgJnM7pXmYmorNOReh8MIGcKSqXyeGjxnr8YiZbA== - "@types/anymatch@*": version "1.3.1" resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" @@ -3337,21 +3251,6 @@ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.5.tgz#9adbc12950582aa65ead76bffdf39fe0c27a3c02" integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ== -"@types/testing-library__dom@*", "@types/testing-library__dom@^6.0.0": - version "6.12.1" - resolved "https://registry.yarnpkg.com/@types/testing-library__dom/-/testing-library__dom-6.12.1.tgz#37af28fae051f9e3feed5684535b1540c97ae28b" - integrity sha512-cgqnEjxKk31tQt29j4baSWaZPNjQf3bHalj2gcHQTpW5SuHRal76gOpF0vypeEo6o+sS5inOvvNdzLY0B3FB2A== - dependencies: - pretty-format "^24.3.0" - -"@types/testing-library__react@^9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@types/testing-library__react/-/testing-library__react-9.1.2.tgz#e33af9124c60a010fc03a34eff8f8a34a75c4351" - integrity sha512-CYaMqrswQ+cJACy268jsLAw355DZtPZGt3Jwmmotlcu8O/tkoXBI6AeZ84oZBJsIsesozPKzWzmv/0TIU+1E9Q== - dependencies: - "@types/react-dom" "*" - "@types/testing-library__dom" "*" - "@types/uglify-js@*": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082" @@ -4193,7 +4092,7 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@3.0.0, aria-query@^3.0.0: +aria-query@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= @@ -6255,12 +6154,7 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= - -css@^2.0.0, css@^2.2.3: +css@^2.0.0: version "2.2.4" resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== @@ -6426,6 +6320,11 @@ date-fns@^2.0.1: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.12.0.tgz#01754c8a2f3368fc1119cf4625c3dad8c1845ee6" integrity sha512-qJgn99xxKnFgB1qL4jpxU7Q2t0LOn1p8KMIveef3UZD7kqjT3tpFNNdXJelEHhE+rUgffriXriw/sOSU+cS1Hw== +dayjs@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.9.1.tgz#201a755f7db5103ed6de63ba93a984141c754541" + integrity sha512-01NCTBg8cuMJG1OQc6PR7T66+AFYiPwgDvdJmvJBn29NGzIG+DIFxPLNjHzwz3cpFIvG+NcwIjP9hSaPVoOaDg== + de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" @@ -9720,7 +9619,7 @@ jest-config@^24.9.0: pretty-format "^24.9.0" realpath-native "^1.1.0" -jest-diff@^24.0.0, jest-diff@^24.3.0, jest-diff@^24.9.0: +jest-diff@^24.3.0, jest-diff@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -9837,7 +9736,7 @@ jest-leak-detector@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-matcher-utils@^24.0.0, jest-matcher-utils@^24.9.0: +jest-matcher-utils@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== @@ -12965,7 +12864,7 @@ pretty-error@^2.1.1: renderkid "^2.0.1" utila "~0.4" -pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.9.0: +pretty-format@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== @@ -14183,14 +14082,6 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - redux@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" @@ -16820,11 +16711,6 @@ w3c-xmlserializer@^1.1.2: webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" -wait-for-expect@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/wait-for-expect/-/wait-for-expect-3.0.2.tgz#d2f14b2f7b778c9b82144109c8fa89ceaadaa463" - integrity sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag== - walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"