diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 542f63f250..ca6254daed 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -30,8 +30,8 @@ "country-flag-icons": "^1.4.19", "csv-string": "^4.1.0", "cuid": "^2.1.8", - "date-fns": "^2.27.0", - "date-fns-tz": "^1.3.4", + "date-fns": "^3.6.0", + "date-fns-tz": "^3.1.3", "dayjs": "^1.10.7", "dayzed": "^3.2.2", "dedent": "^0.7.0", @@ -8742,23 +8742,20 @@ } }, "node_modules/date-fns": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", - "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==", - "engines": { - "node": ">=0.11" - }, + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" } }, "node_modules/date-fns-tz": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.4.tgz", - "integrity": "sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", + "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", "peerDependencies": { - "date-fns": ">=2.0.0" + "date-fns": "^3.0.0 || ^4.0.0" } }, "node_modules/dayjs": { @@ -8779,6 +8776,21 @@ "react": "^16.8 || ^17.0" } }, + "node_modules/dayzed/node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -26207,14 +26219,14 @@ } }, "date-fns": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.27.0.tgz", - "integrity": "sha512-sj+J0Mo2p2X1e306MHq282WS4/A8Pz/95GIFcsPNMPMZVI3EUrAdSv90al1k+p74WGLCruMXk23bfEDZa71X9Q==" + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==" }, "date-fns-tz": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.4.tgz", - "integrity": "sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", + "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==" }, "dayjs": { "version": "1.10.7", @@ -26228,6 +26240,16 @@ "requires": { "@babel/runtime": "^7.6.2", "date-fns": "^2.0.0" + }, + "dependencies": { + "date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "requires": { + "@babel/runtime": "^7.21.0" + } + } } }, "debug": { diff --git a/frontend/package.json b/frontend/package.json index fdf9722883..fa1cffaa42 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -26,8 +26,8 @@ "country-flag-icons": "^1.4.19", "csv-string": "^4.1.0", "cuid": "^2.1.8", - "date-fns": "^2.27.0", - "date-fns-tz": "^1.3.4", + "date-fns": "^3.6.0", + "date-fns-tz": "^3.1.3", "dayjs": "^1.10.7", "dayzed": "^3.2.2", "dedent": "^0.7.0", diff --git a/frontend/src/components/DatePicker/types.ts b/frontend/src/components/DatePicker/types.ts index 08be2d686e..651304a8b6 100644 --- a/frontend/src/components/DatePicker/types.ts +++ b/frontend/src/components/DatePicker/types.ts @@ -1,4 +1,5 @@ import { InputProps } from '@chakra-ui/react' +import { Locale } from 'date-fns' export interface DatePickerBaseProps extends Omit< diff --git a/frontend/src/features/admin-form/common/components/AdminFormNavbar/AdminFormNavbar.tsx b/frontend/src/features/admin-form/common/components/AdminFormNavbar/AdminFormNavbar.tsx index 4a9f01ff10..b49b99a84a 100644 --- a/frontend/src/features/admin-form/common/components/AdminFormNavbar/AdminFormNavbar.tsx +++ b/frontend/src/features/admin-form/common/components/AdminFormNavbar/AdminFormNavbar.tsx @@ -26,7 +26,7 @@ import { useBreakpointValue, useDisclosure, } from '@chakra-ui/react' -import format from 'date-fns/format' +import { format } from 'date-fns' import { SeenFlags } from '~shared/types' import { AdminFormDto, FormResponseMode } from '~shared/types/form/form' diff --git a/frontend/src/features/admin-form/responses/ResponsesPage/storage/utils/EncryptedResponseCsvGenerator/EncryptedResponseCsvGenerator.ts b/frontend/src/features/admin-form/responses/ResponsesPage/storage/utils/EncryptedResponseCsvGenerator/EncryptedResponseCsvGenerator.ts index 46b9644494..9a042b19fc 100644 --- a/frontend/src/features/admin-form/responses/ResponsesPage/storage/utils/EncryptedResponseCsvGenerator/EncryptedResponseCsvGenerator.ts +++ b/frontend/src/features/admin-form/responses/ResponsesPage/storage/utils/EncryptedResponseCsvGenerator/EncryptedResponseCsvGenerator.ts @@ -1,5 +1,5 @@ import { compareAsc, isValid, parseISO } from 'date-fns' -import { formatInTimeZone, zonedTimeToUtc } from 'date-fns-tz' +import { formatInTimeZone, fromZonedTime } from 'date-fns-tz' import type { Dictionary } from 'lodash' import { keyBy } from 'lodash' import type { Merge } from 'type-fest' @@ -179,8 +179,8 @@ export class EncryptedResponseCsvGenerator extends CsvGenerator { */ private _dateComparator(firstDate: string, secondDate: string): number { // cast to Asia/Singapore to ensure both dates are of the same timezone - const first = zonedTimeToUtc(firstDate, 'Asia/Singapore') - const second = zonedTimeToUtc(secondDate, 'Asia/Singapore') + const first = fromZonedTime(firstDate, 'Asia/Singapore') + const second = fromZonedTime(secondDate, 'Asia/Singapore') return compareAsc(first, second) } } diff --git a/package-lock.json b/package-lock.json index aff31476f8..4c12ee79c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "cookie-parser": "~1.4.6", "csv-string": "^4.1.1", "cuid": "^2.1.8", - "date-fns": "^2.30.0", + "date-fns": "^3.6.0", "dd-trace": "^5.22.0", "dedent-js": "~1.0.1", "dotenv": "^16.4.5", @@ -13566,6 +13566,22 @@ "dev": true, "license": "MIT" }, + "node_modules/concurrently/node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/concurrently/node_modules/has-flag": { "version": "4.0.0", "dev": true, @@ -14118,18 +14134,12 @@ } }, "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" } }, "node_modules/dayjs": { diff --git a/package.json b/package.json index dd906b7a14..08903fe11d 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "cookie-parser": "~1.4.6", "csv-string": "^4.1.1", "cuid": "^2.1.8", - "date-fns": "^2.30.0", + "date-fns": "^3.6.0", "dd-trace": "^5.22.0", "dedent-js": "~1.0.1", "dotenv": "^16.4.5", diff --git a/shared/package-lock.json b/shared/package-lock.json index 004270a27b..72345c80c2 100644 --- a/shared/package-lock.json +++ b/shared/package-lock.json @@ -8,7 +8,7 @@ "name": "shared", "version": "1.0.0", "dependencies": { - "date-fns": "^2.26.0", + "date-fns": "^3.6.0", "json-stringify-safe": "^5.0.1", "jszip": "^3.7.1", "libphonenumber-js": "^1.10.48", @@ -28,17 +28,6 @@ "prettier": "^3.2.5" } }, - "node_modules/@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -343,18 +332,12 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" } }, "node_modules/debug": { @@ -750,11 +733,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", diff --git a/shared/package.json b/shared/package.json index 51b375bce3..55ae854ae0 100644 --- a/shared/package.json +++ b/shared/package.json @@ -3,7 +3,7 @@ "version": "1.0.0", "description": "", "dependencies": { - "date-fns": "^2.26.0", + "date-fns": "^3.6.0", "json-stringify-safe": "^5.0.1", "jszip": "^3.7.1", "libphonenumber-js": "^1.10.48",