From 8950952ef108040410f44c3ecf7b6de9808bbe6b Mon Sep 17 00:00:00 2001 From: shivamg9 Date: Mon, 19 Feb 2024 23:52:17 +0530 Subject: [PATCH 01/16] Added authentication --- next.config.js | 11 +- package-lock.json | 1761 +++++++++++++---- package.json | 8 +- src/app/[lang]/_error.ts | 0 src/app/[lang]/apply/page.tsx | 427 ++-- src/app/[lang]/components/Card.tsx | 13 +- src/app/[lang]/components/Pagination.tsx | 4 +- src/app/[lang]/components/auth.tsx | 59 + .../[lang]/components/navigation/Footer.tsx | 3 +- .../[lang]/components/navigation/Header.tsx | 16 +- .../navigation/LanguageDropdown.tsx | 53 +- .../components/navigation/ProfileDropdown.tsx | 91 +- src/app/[lang]/contactus/page.tsx | 3 +- src/app/[lang]/forms/page.tsx | 12 +- src/app/[lang]/home/page.tsx | 274 ++- src/app/[lang]/layout.tsx | 2 +- src/app/[lang]/login/layout.tsx | 32 + src/app/[lang]/login/loginbox.tsx | 91 + src/app/[lang]/login/page.tsx | 17 + src/app/[lang]/myprofile/page.tsx | 265 +-- src/app/[lang]/otherpage/page.tsx | 230 +++ src/app/[lang]/page.tsx | 8 +- src/app/[lang]/programs/page.tsx | 213 +- src/commons/styles/globals.css | 5 - src/dictionaries/en.json | 31 +- src/dictionaries/fr.json | 97 +- src/dictionaries/tl.json | 35 +- src/types/index.ts | 31 +- src/utils/index.ts | 63 +- src/utils/path.ts | 7 + 30 files changed, 2631 insertions(+), 1231 deletions(-) delete mode 100644 src/app/[lang]/_error.ts create mode 100644 src/app/[lang]/components/auth.tsx create mode 100644 src/app/[lang]/login/layout.tsx create mode 100644 src/app/[lang]/login/loginbox.tsx create mode 100644 src/app/[lang]/login/page.tsx create mode 100644 src/utils/path.ts diff --git a/next.config.js b/next.config.js index 29fb82d..551264b 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,13 @@ /** @type {import('next').NextConfig} */ -const nextConfig = {} -module.exports = nextConfig +const nextConfig = { + basePath: process.env.NEXT_PUBLIC_BASE_PATH || "", + images: { + domains: ['spar.openg2p.my'], // Add the domain(s) from which to load images + path: '/_next/image', + loader: 'default', + }, +}; +module.exports = nextConfig; diff --git a/package-lock.json b/package-lock.json index 92e84f4..b700205 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,12 @@ "name": "ssp-test", "version": "0.1.0", "dependencies": { + "@emotion/react": "^11.11.3", + "@emotion/styled": "^11.11.0", "@headlessui/react": "^1.7.17", "@heroicons/react": "^1.0.6", + "@mui/icons-material": "^5.15.7", + "@mui/material": "^5.15.7", "@tsed/react-formio": "^2.2.3", "@tsed/tailwind-formio": "^2.2.3", "@types/datatables.net": "^1.10.27", @@ -33,7 +37,7 @@ "next-auth": "^4.23.2", "next-intl": "^3.0.0-rc.2", "node-fetch": "^3.3.2", - "postcss": "8.4.30", + "postcss": "^8.4.34", "react": "18.2.0", "react-dom": "18.2.0", "react-paginate": "^8.2.0", @@ -47,7 +51,7 @@ "@types/jquery": "^3.5.27", "@types/negotiator": "^0.6.1", "@types/react-transition-group": "^4.4.9", - "postcss-nested": "^4.2.3" + "postcss-nested": "^6.0.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -69,10 +73,190 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -80,6 +264,160 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.3.tgz", + "integrity": "sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", + "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, "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", @@ -103,9 +441,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -132,19 +470,53 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.1.tgz", + "integrity": "sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, "node_modules/@formatjs/ecma402-abstract": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.17.3.tgz", - "integrity": "sha512-2Q4hmKQ6CM30mRG/YMdSBW8LXf32BfuOb1FZgG+uVWPC/SQMoiVFz5JaeOukt96v6TZ4ddE+bHCmd611PW38QA==", + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.2.tgz", + "integrity": "sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==", "dependencies": { - "@formatjs/intl-localematcher": "0.5.0", + "@formatjs/intl-localematcher": "0.5.4", "tslib": "^2.4.0" } }, "node_modules/@formatjs/ecma402-abstract/node_modules/@formatjs/intl-localematcher": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.0.tgz", - "integrity": "sha512-K1Xpg/8oyfCMxisJQa/fILoeoeyndcM0wcN8QiNG/uM5OAe1BcO1+2yd0gIboDI2tRJEsUi/sSBEYPbgkIdq4A==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", "dependencies": { "tslib": "^2.4.0" } @@ -227,9 +599,9 @@ } }, "node_modules/@formio/choices.js": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@formio/choices.js/-/choices.js-10.2.0.tgz", - "integrity": "sha512-dEF+es4yj3pstKHif7Ck14vQCZdN+b1Afojl0ufTmKw5WIjqas1KXEIBBgtsg4eY6bxqFkgEjtxsK4ecvEeZsA==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@formio/choices.js/-/choices.js-10.2.1.tgz", + "integrity": "sha512-NCE5u7jG3XGokJP16MyAbVSUptKu/mpJYAxd4PPIoLiO/l9Do5uoOQ0MgNb9qG9qABJiOX+qNRE8q8RybY/SwQ==", "dependencies": { "deepmerge": "^4.2.2", "fuse.js": "^6.6.2", @@ -252,10 +624,11 @@ "integrity": "sha512-rYBlvIPMNUd6sAaduOaiIwI4vfTAjHDRonko2qJn2RP1O//TQ7rcFIPYVYePJZ4OtOpwHiHAvAIh79McphZotQ==" }, "node_modules/@headlessui/react": { - "version": "1.7.17", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.17.tgz", - "integrity": "sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==", + "version": "1.7.18", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.18.tgz", + "integrity": "sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ==", "dependencies": { + "@tanstack/react-virtual": "^3.0.0-beta.60", "client-only": "^0.0.1" }, "engines": { @@ -275,12 +648,12 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -300,9 +673,50 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", @@ -339,18 +753,297 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.34", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.34.tgz", + "integrity": "sha512-e2mbTGTtReD/y5RFwnhkl1Tgl3XwgJhY040IlfkTVaU9f5LWrVhEnpRsYXu3B1CtLrwiWs4cu7aMHV9yRd4jpw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.7", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/base/node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.15.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.7.tgz", + "integrity": "sha512-AuF+Wo2Mp/edaO6vJnWjg+gj4tzEz5ChMZnAQpc22DXpSvM8ddgGcZvM7D7F99pIBoSv8ub+Iz0viL+yuGVmhg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.15.7", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.7.tgz", + "integrity": "sha512-EDAc8TVJGIA/imAvR3u4nANl2W5h3QeHieu2gK7Ypez/nIA55p08tHjf8UrMXEpxCAvfZO6piY9S9uaxETdicA==", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.15.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.7.tgz", + "integrity": "sha512-l6+AiKZH3iOJmZCnlpel8ghYQe9Lq0BEuKP8fGj3g5xz4arO9GydqYAtLPMvuHKtArj8lJGNuT2yHYxmejincA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/base": "5.0.0-beta.34", + "@mui/core-downloads-tracker": "^5.15.7", + "@mui/system": "^5.15.7", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.7", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, + "node_modules/@mui/private-theming": { + "version": "5.15.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.7.tgz", + "integrity": "sha512-bcEeeXm7GyQCQvN9dwo8htGv8/6tP05p0i02Z7GXm5EoDPlBcqTNGugsjNLoGq6B0SsdyanjJGw0Jw00o1yAOA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.15.7", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.15.7", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.7.tgz", + "integrity": "sha512-ixSdslOjK1kzdGcxqj7O3d14By/LPQ7EWknsViQ8RaeT863EAQemS+zvUJDTcOpkfJh6q6gPnYMIb2TJCs9eWA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.15.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.7.tgz", + "integrity": "sha512-9alZ4/dLxsTwUOdqakgzxiL5YW6ntqj0CfzWImgWnBMTZhgGcPsbYpBLniNkkk7/jptma4/bykWXHwju/ls/pg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.15.7", + "@mui/styled-engine": "^5.15.7", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.7", + "clsx": "^2.1.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/system/node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@mui/types": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", + "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.15.7", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.7.tgz", + "integrity": "sha512-8qhsxQRNV6aEOjjSk6YQIYJxkF5klhj8oG1FEEU4z6HV78TjNqRxMP08QGcdsibEbez+nihAaz6vu83b4XqbAg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/@next/env": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.1.tgz", - "integrity": "sha512-Ms8ZswqY65/YfcjrlcIwMPD7Rg/dVjdLapMcSHG26W6O67EJDF435ShW4H4LXi1xKO1oRc97tLXUpx8jpLe86A==" + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz", + "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==" }, "node_modules/@next/eslint-plugin-next": { "version": "13.5.2", @@ -361,9 +1054,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.1.tgz", - "integrity": "sha512-JyxnGCS4qT67hdOKQ0CkgFTp+PXub5W1wsGvIq98TNbF3YEIN7iDekYhYsZzc8Ov0pWEsghQt+tANdidITCLaw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", + "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", "cpu": [ "arm64" ], @@ -376,9 +1069,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.1.tgz", - "integrity": "sha512-625Z7bb5AyIzswF9hvfZWa+HTwFZw+Jn3lOBNZB87lUS0iuCYDHqk3ujuHCkiyPtSC0xFBtYDLcrZ11mF/ap3w==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", + "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", "cpu": [ "x64" ], @@ -391,9 +1084,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.1.tgz", - "integrity": "sha512-iVpn3KG3DprFXzVHM09kvb//4CNNXBQ9NB/pTm8LO+vnnnaObnzFdS5KM+w1okwa32xH0g8EvZIhoB3fI3mS1g==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", + "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", "cpu": [ "arm64" ], @@ -406,9 +1099,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.1.tgz", - "integrity": "sha512-mVsGyMxTLWZXyD5sen6kGOTYVOO67lZjLApIj/JsTEEohDDt1im2nkspzfV5MvhfS7diDw6Rp/xvAQaWZTv1Ww==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", + "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", "cpu": [ "arm64" ], @@ -421,9 +1114,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.1.tgz", - "integrity": "sha512-wMqf90uDWN001NqCM/auRl3+qVVeKfjJdT9XW+RMIOf+rhUzadmYJu++tp2y+hUbb6GTRhT+VjQzcgg/QTD9NQ==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", + "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", "cpu": [ "x64" ], @@ -436,9 +1129,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.1.tgz", - "integrity": "sha512-ol1X1e24w4j4QwdeNjfX0f+Nza25n+ymY0T2frTyalVczUmzkVD7QGgPTZMHfR1aLrO69hBs0G3QBYaj22J5GQ==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", + "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", "cpu": [ "x64" ], @@ -451,9 +1144,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.1.tgz", - "integrity": "sha512-WEmTEeWs6yRUEnUlahTgvZteh5RJc4sEjCQIodJlZZ5/VJwVP8p2L7l6VhzQhT4h7KvLx/Ed4UViBdne6zpIsw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", + "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", "cpu": [ "arm64" ], @@ -466,9 +1159,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.1.tgz", - "integrity": "sha512-oFpHphN4ygAgZUKjzga7SoH2VGbEJXZa/KL8bHCAwCjDWle6R1SpiGOdUdA8EJ9YsG1TYWpzY6FTbUA+iAJeww==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", + "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", "cpu": [ "ia32" ], @@ -481,9 +1174,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.1.tgz", - "integrity": "sha512-FFp3nOJ/5qSpeWT0BZQ+YE1pSMk4IMpkME/1DwKBwhg4mJLB9L+6EXuJi4JEwaJdl5iN+UUlmUD3IsR1kx5fAg==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", + "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", "cpu": [ "x64" ], @@ -535,6 +1228,15 @@ "url": "https://github.com/sponsors/panva" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -563,9 +1265,9 @@ "peer": true }, "node_modules/@rushstack/eslint-patch": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", - "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==" + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", + "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==" }, "node_modules/@sphinxxxx/color-conversion": { "version": "2.2.2", @@ -580,6 +1282,31 @@ "tslib": "^2.4.0" } }, + "node_modules/@tanstack/react-virtual": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.0.2.tgz", + "integrity": "sha512-9XbRLPKgnhMwwmuQMnJMv+5a9sitGNCSEtf/AZXzmJdesYk7XsjYHaEDny+IrJzvPNwZliIIDwCRiaUqR3zzCA==", + "dependencies": { + "@tanstack/virtual-core": "3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.0.0.tgz", + "integrity": "sha512-SYXOBTjJb05rXa2vl55TTwO40A6wKu0R5i1qQwhJYNDIqaIGF7D0HsLw+pJAyi2OvntlEIVusx3xtbbgSUi6zg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tsed/react-formio": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@tsed/react-formio/-/react-formio-2.2.3.tgz", @@ -608,17 +1335,17 @@ "integrity": "sha512-6ZWDXquVE+UrZ+bLQsyBK4Q0hhx7EHyb7yEr+AlUY3Dt2qtqLP8p/kB3hE0qG1+RP4Q6DN8aRjKbjphZEz5MAw==" }, "node_modules/@types/datatables.net": { - "version": "1.10.27", - "resolved": "https://registry.npmjs.org/@types/datatables.net/-/datatables.net-1.10.27.tgz", - "integrity": "sha512-r20sH6vTbqbn/Sr/e4Qhv5WYG/Soa6sLsqGqXv936ZZgyxW3yY+iZmboPfDXczw3izJyeUkDRBVCQRx7Ui4X2A==", + "version": "1.10.28", + "resolved": "https://registry.npmjs.org/@types/datatables.net/-/datatables.net-1.10.28.tgz", + "integrity": "sha512-Y6SZZCdJt7vXROaTBc/ifwhAqSBg7V0urM+RqZt3Tj9JN1U8KSgQ7EKpFG88g/j4MVrlYDfSH+yqSnK0MaIwMw==", "dependencies": { "@types/jquery": "*" } }, "node_modules/@types/jquery": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.27.tgz", - "integrity": "sha512-TR28Y8ezIGgfyA02UOh9x+Fy16/1qWYAnvtRd2gTBJuccX/vmddyti0MezLkTv7f+OLofVc2T961VPyKv1tXJQ==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.29.tgz", + "integrity": "sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg==", "dependencies": { "@types/sizzle": "*" } @@ -648,10 +1375,15 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==" }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, "node_modules/@types/prop-types": { - "version": "15.7.10", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz", - "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==" + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/react": { "version": "18.2.22", @@ -672,33 +1404,32 @@ } }, "node_modules/@types/react-transition-group": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.9.tgz", - "integrity": "sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==", - "dev": true, + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz", - "integrity": "sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA==" + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, "node_modules/@types/sizzle": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.6.tgz", - "integrity": "sha512-m04Om5Gz6kbjUwAQ7XJJQ30OdEFsSmAVsvn4NYwcTRyMVpKKa1aPuESw1n2CxS5fYkOQv3nHgDKeNa8e76fUkw==" + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==" }, "node_modules/@typescript-eslint/parser": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz", - "integrity": "sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==", - "dependencies": { - "@typescript-eslint/scope-manager": "6.10.0", - "@typescript-eslint/types": "6.10.0", - "@typescript-eslint/typescript-estree": "6.10.0", - "@typescript-eslint/visitor-keys": "6.10.0", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", + "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", + "dependencies": { + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4" }, "engines": { @@ -718,12 +1449,12 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz", - "integrity": "sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", + "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", "dependencies": { - "@typescript-eslint/types": "6.10.0", - "@typescript-eslint/visitor-keys": "6.10.0" + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -734,9 +1465,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz", - "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", + "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -746,15 +1477,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz", - "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", + "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", "dependencies": { - "@typescript-eslint/types": "6.10.0", - "@typescript-eslint/visitor-keys": "6.10.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", + "minimatch": "9.0.3", "semver": "^7.5.4", "ts-api-utils": "^1.0.1" }, @@ -771,12 +1503,34 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz", - "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", + "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", "dependencies": { - "@typescript-eslint/types": "6.10.0", + "@typescript-eslint/types": "6.20.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -793,9 +1547,9 @@ "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -1099,11 +1853,11 @@ } }, "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -1116,6 +1870,20 @@ "dequal": "^2.0.3" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1181,9 +1949,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "funding": [ { "type": "opencollective", @@ -1199,9 +1967,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", + "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, "bin": { @@ -1260,9 +2028,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001561", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", - "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", + "version": "1.0.30001581", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz", + "integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==", "funding": [ { "type": "opencollective", @@ -1331,9 +2099,9 @@ } }, "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/client-only": { "version": "0.0.1", @@ -1418,6 +2186,11 @@ "ticky": "1.0.1" } }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -1427,15 +2200,38 @@ } }, "node_modules/core-js": { - "version": "3.33.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.2.tgz", - "integrity": "sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ==", + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz", + "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==", "hasInstallScript": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, "node_modules/create-point-cb": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-point-cb/-/create-point-cb-1.2.0.tgz", @@ -1477,9 +2273,9 @@ } }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/custom-event": { "version": "1.0.1", @@ -1505,9 +2301,9 @@ } }, "node_modules/datatables.net": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.13.7.tgz", - "integrity": "sha512-lbmcCSrMU8VTaGwgCxWs/jbP8NVJlzXaUkK3SiiZY7tTjRp7XJw4InlOU+XUVZ4i4B2GBxue02/P5iVto1CGDg==", + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.13.8.tgz", + "integrity": "sha512-2pDamr+GUwPTby2OgriVB9dR9ftFKD2AQyiuCXzZIiG4d9KkKFQ7gqPfNmG7uj9Tc5kDf+rGj86do4LAb/V71g==", "dependencies": { "jquery": ">=1.7" } @@ -1719,9 +2515,9 @@ } }, "node_modules/dompurify": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", - "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.8.tgz", + "integrity": "sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ==" }, "node_modules/downloadjs": { "version": "1.4.7", @@ -1737,10 +2533,15 @@ "crossvent": "1.5.5" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/electron-to-chromium": { - "version": "1.4.579", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.579.tgz", - "integrity": "sha512-bJKvA+awBIzYR0xRced7PrQuRIwGQPpo6ZLP62GAShahU9fWpsNN2IP6BSP1BLDDSbxvBVRGAMWlvVVq3npmLA==" + "version": "1.4.650", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.650.tgz", + "integrity": "sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -1767,6 +2568,14 @@ "node": ">=10.13.0" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-abstract": { "version": "1.22.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", @@ -2060,9 +2869,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -2080,7 +2889,7 @@ "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -2367,9 +3176,9 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", "dependencies": { "reusify": "^1.0.4" } @@ -2445,6 +3254,11 @@ "node": ">=8" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2467,16 +3281,16 @@ "deprecated": "The project has been renamed to flag-icons" }, "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { @@ -2485,9 +3299,9 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "funding": [ { "type": "individual", @@ -2511,6 +3325,21 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -2536,12 +3365,12 @@ } }, "node_modules/formiojs": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/formiojs/-/formiojs-4.17.3.tgz", - "integrity": "sha512-SVNnzAugTYJrjQslDs/r2K8NBxcV4VpyUDAlRL5MMm7esog6XJGCCDXzIpECOUjy4lUXHf//a7n3xFnzvVDp7A==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/formiojs/-/formiojs-4.18.1.tgz", + "integrity": "sha512-1xEtww3NBwkJy1WiE5KQHMEM+uCDJNc/Dq/d11xEd3IQqyf41aIvAR4Y4FQToCdo7M7qyNTvR0TiTvXChOkNMA==", "dependencies": { "@formio/bootstrap3": "2.12.4-rc.1", - "@formio/choices.js": "10.2.0", + "@formio/choices.js": "10.2.1", "@formio/semantic": "2.6.1", "@formio/text-mask-addons": "^3.8.0-formio.2", "@formio/vanilla-text-mask": "^5.1.1-formio.1", @@ -2720,15 +3549,10 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dependencies": { "type-fest": "^0.20.2" }, @@ -2871,7 +3695,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "peer": true, "dependencies": { "react-is": "^16.7.0" } @@ -2930,9 +3753,9 @@ "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "engines": { "node": ">= 4" } @@ -3048,6 +3871,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", @@ -3154,6 +3982,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -3367,6 +4203,23 @@ "set-function-name": "^2.0.1" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jiti": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", @@ -3414,6 +4267,11 @@ "resolved": "https://registry.npmjs.org/json-logic-js/-/json-logic-js-2.0.2.tgz", "integrity": "sha512-ZBtBdMJieqQcH7IX/LaBsr5pX+Y5JIW+EhejtM3Ffg2jdN9Iwf+Ht6TbHnvAZ/YtwyuhPaCBlnvzrwVeWdvGDQ==" }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3628,18 +4486,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "engines": { "node": "*" } }, "node_modules/moment-timezone": { - "version": "0.5.43", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.43.tgz", - "integrity": "sha512-72j3aNyuIsDxdF1i7CEgV2FfxM1r6aaqJyLB2vwb33mXYyoyLly+F1zbWqhA3/bVIoJ4szlUoMbUnVdid32NUQ==", + "version": "0.5.44", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.44.tgz", + "integrity": "sha512-nv3YpzI/8lkQn0U6RkLd+f0W/zy/JnoR5/EyPz/dNkPTBjA2jNLCVxaiQ8QpeLymhSZvX0wCL5s27NQWdOPwAw==", "dependencies": { "moment": "^2.29.4" }, @@ -3698,17 +4564,17 @@ } }, "node_modules/next": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.1.tgz", - "integrity": "sha512-s4YaLpE4b0gmb3ggtmpmV+wt+lPRuGtANzojMQ2+gmBpgX9w5fTbjsy6dXByBuENsdCX5pukZH/GxdFgO62+pA==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz", + "integrity": "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==", "dependencies": { - "@next/env": "14.0.1", + "@next/env": "14.1.0", "@swc/helpers": "0.5.2", "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" + "styled-jsx": "5.1.1" }, "bin": { "next": "dist/bin/next" @@ -3717,15 +4583,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.0.1", - "@next/swc-darwin-x64": "14.0.1", - "@next/swc-linux-arm64-gnu": "14.0.1", - "@next/swc-linux-arm64-musl": "14.0.1", - "@next/swc-linux-x64-gnu": "14.0.1", - "@next/swc-linux-x64-musl": "14.0.1", - "@next/swc-win32-arm64-msvc": "14.0.1", - "@next/swc-win32-ia32-msvc": "14.0.1", - "@next/swc-win32-x64-msvc": "14.0.1" + "@next/swc-darwin-arm64": "14.1.0", + "@next/swc-darwin-x64": "14.1.0", + "@next/swc-linux-arm64-gnu": "14.1.0", + "@next/swc-linux-arm64-musl": "14.1.0", + "@next/swc-linux-x64-gnu": "14.1.0", + "@next/swc-linux-x64-musl": "14.1.0", + "@next/swc-win32-arm64-msvc": "14.1.0", + "@next/swc-win32-ia32-msvc": "14.1.0", + "@next/swc-win32-x64-msvc": "14.1.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -3743,9 +4609,9 @@ } }, "node_modules/next-auth": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.4.tgz", - "integrity": "sha512-5DGffi+OpkbU62vPQIJ1z+hFnmow+ec5Qrn9m6eoglIO51m0DlrmLxBduZEwKAYDEg9k2joi1yelgmq1vqK3aQ==", + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.5.tgz", + "integrity": "sha512-3RafV3XbfIKk6rF6GlLE4/KxjTcuMCifqrmD+98ejFq73SRoj2rmzoca8u764977lH/Q7jo6Xu6yM+Re1Mz/Og==", "dependencies": { "@babel/runtime": "^7.20.13", "@panva/hkdf": "^1.0.2", @@ -3778,13 +4644,19 @@ } }, "node_modules/next-intl": { - "version": "3.0.0-rc.9", - "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.0.0-rc.9.tgz", - "integrity": "sha512-MrHY5nhrVWPeqia7+1Fn2S4/qUgk05+3Ay+Fi1WTwsgT6eSrMv6+RfPmO6ITbKs0/xQ3T3miqjZcy1WWmGEnmg==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-3.5.3.tgz", + "integrity": "sha512-umcOmNX2cpbX/iMdhKOv/cEg4mJDda0KjrOFB8leINxwONe5VDuFJ3sw0RbE9wseN9P+CRGYZwWuuGHO1TLZMg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], "dependencies": { "@formatjs/intl-localematcher": "^0.2.32", "negotiator": "^0.6.3", - "use-intl": "3.0.0-rc.6" + "use-intl": "^3.5.3" }, "peerDependencies": { "next": "^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0", @@ -3854,9 +4726,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -3927,12 +4799,12 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -4028,11 +4900,11 @@ } }, "node_modules/openid-client": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.1.tgz", - "integrity": "sha512-PtrWsY+dXg6y8mtMPyL/namZSYVz8pjXz3yJiBNZsEdCnu9miHLB4ELVC85WvneMKo2Rg62Ay7NkuCpM0bgiLQ==", + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.4.tgz", + "integrity": "sha512-T1h3B10BRPKfcObdBklX639tVz+xh34O7GjofqrqiAQdm7eHsQ00ih18x6wuJ/E6FxdtS2u3FmUGPDeEcMwzNA==", "dependencies": { - "jose": "^4.15.1", + "jose": "^4.15.4", "lru-cache": "^6.0.0", "object-hash": "^2.2.0", "oidc-token-hash": "^5.0.3" @@ -4101,6 +4973,23 @@ "node": ">=6" } }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4130,6 +5019,29 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -4182,9 +5094,9 @@ } }, "node_modules/postcss": { - "version": "8.4.30", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", - "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", + "version": "8.4.34", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.34.tgz", + "integrity": "sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==", "funding": [ { "type": "opencollective", @@ -4200,7 +5112,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -4243,20 +5155,26 @@ } }, "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { "node": ">= 14" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" @@ -4270,43 +5188,36 @@ } } }, - "node_modules/postcss-nested": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz", - "integrity": "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2" + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "engines": { + "node": ">=14" } }, - "node_modules/postcss-nested/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-nested/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "postcss-selector-parser": "^6.0.11" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -4321,9 +5232,9 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/preact": { - "version": "10.18.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.18.2.tgz", - "integrity": "sha512-X/K43vocUHDg0XhWVmTTMbec4LT/iBMh+csCEqJk+pJqegaXsvjdqN80ZZ3L+93azWCnWCZ+WGwYb8SplxeNjA==", + "version": "10.19.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.3.tgz", + "integrity": "sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -4627,9 +5538,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", @@ -4730,12 +5641,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -4747,14 +5658,17 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4787,14 +5701,15 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", "dependencies": { "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -4850,10 +5765,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/signature_pad": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/signature_pad/-/signature_pad-4.1.6.tgz", - "integrity": "sha512-eoZB8qFPfCs7o00weajp5roNnE2gY2kTNjZsh805L8V+lYPagxoZi9qrBFS3A6sgbVq++ukdzgruK7tuv3JFXQ==" + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/signature_pad/-/signature_pad-4.1.7.tgz", + "integrity": "sha512-2Vmybep25VlDnvdgtE3v09KGawS8mL10lRpSq1RmPpLcS4eH8I1YPQUzXsxwnmepcAgDHQ2jyzgS6XhjKsYYAQ==" }, "node_modules/slash": { "version": "3.0.0", @@ -4863,15 +5789,6 @@ "node": ">=8" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -4917,6 +5834,66 @@ "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", @@ -4989,6 +5966,18 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -5030,14 +6019,19 @@ } } }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "7.1.6", + "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", @@ -5048,23 +6042,47 @@ "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -5141,24 +6159,6 @@ "node": ">= 6" } }, - "node_modules/tailwindcss/node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -5204,6 +6204,14 @@ "@popperjs/core": "^2.9.0" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5255,9 +6263,9 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -5441,9 +6449,9 @@ } }, "node_modules/use-intl": { - "version": "3.0.0-rc.6", - "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.0.0-rc.6.tgz", - "integrity": "sha512-vkPHZFFTrt/GnLPVn0HdCUeU+BgtitkuONa9e+XC3IeItd6RxJ28RMbAK43QI726N/CrAjds/fGjI8BF21u6Hw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-3.5.3.tgz", + "integrity": "sha512-aM/OmcoTdRz4YazQAbKlMIscDp9kzvM8EYkQRluf7VZtCPtKHC6HYSKzrxuSHNZP1E8TVsFiHUGrb2dkBoyCYA==", "dependencies": { "@formatjs/ecma402-abstract": "^1.11.4", "intl-messageformat": "^9.3.18" @@ -5477,22 +6485,10 @@ "@sphinxxxx/color-conversion": "^2.2.2" } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", "engines": { "node": ">= 8" } @@ -5597,6 +6593,93 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 5b45387..d9a5eee 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,12 @@ "lint": "next lint" }, "dependencies": { + "@emotion/react": "^11.11.3", + "@emotion/styled": "^11.11.0", "@headlessui/react": "^1.7.17", "@heroicons/react": "^1.0.6", + "@mui/icons-material": "^5.15.7", + "@mui/material": "^5.15.7", "@tsed/react-formio": "^2.2.3", "@tsed/tailwind-formio": "^2.2.3", "@types/datatables.net": "^1.10.27", @@ -34,7 +38,7 @@ "next-auth": "^4.23.2", "next-intl": "^3.0.0-rc.2", "node-fetch": "^3.3.2", - "postcss": "8.4.30", + "postcss": "^8.4.34", "react": "18.2.0", "react-dom": "18.2.0", "react-paginate": "^8.2.0", @@ -48,6 +52,6 @@ "@types/jquery": "^3.5.27", "@types/negotiator": "^0.6.1", "@types/react-transition-group": "^4.4.9", - "postcss-nested": "^4.2.3" + "postcss-nested": "^6.0.1" } } diff --git a/src/app/[lang]/_error.ts b/src/app/[lang]/_error.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/[lang]/apply/page.tsx b/src/app/[lang]/apply/page.tsx index 99f9120..569eed9 100644 --- a/src/app/[lang]/apply/page.tsx +++ b/src/app/[lang]/apply/page.tsx @@ -1,226 +1,227 @@ +// 'use client' +// import { useSearchParams } from 'next/navigation'; +// import { getProgramForm } from '@utils'; +// import Link from 'next/link'; +// import { Formio, Templates } from "@tsed/react-formio"; +// import tailwind from "@tsed/tailwind-formio"; +// import { useEffect, useState } from 'react' +// import { useRouter } from 'next/navigation'; +// import { ProgramForm } from '@types'; +// import Modal from '../components/Modal'; + + +// export default function Apply() { +// let currentId = 81 + +// const router = useRouter(); +// Formio.use(tailwind); +// Templates.framework = "tailwind"; +// const searchParams = useSearchParams() +// const formId = searchParams.get('formId') +// const [forms, setForm] = useState([]); + + +// useEffect(() => { + +// const fetchDraftData = async (form:any) => { +// try { +// const draftResponse = await fetch(`http://localhost:8000/submit/${currentId}`, { +// method: "GET", +// headers: { +// "Content-Type": "application/json", +// }, +// }); + +// const draftData = await draftResponse.json(); +// console.log("Draft data fetched:", draftData); + +// // Update form submission with draft data +// form.submission = { data: draftData.form_data.data }; +// console.log('try1', form.submission); +// } catch (error) { +// console.error("Error fetching draft data:", error); +// } +// }; +// const fetchData = async () => { +// var formData = await getProgramForm(formId); +// Formio.createForm(document.getElementById('formio'), +// formData[0].schema +// ).then( function (form) { +// const customSubmitButton = document.getElementById('custom-submit-button'); +// console.log('Custom Submit Button:', customSubmitButton); +// customSubmitButton?.addEventListener('click', () => { +// form.submit().then((submission:any) =>{ +// const submissionData = { +// id: currentId, +// form_data: submission, +// }; +// console.log('submission', submission.state) +// console.log('submission', submission) +// router.push(`submission?formId=${currentId}`); +// fetch(`http://localhost:8000/submit/${currentId}`, { +// method: "GET", +// }) +// .then((response) => { +// if (response.status === 200) { +// return fetch(`http://localhost:8000/submit/${currentId}`, { +// method: "PUT", +// body: JSON.stringify(submissionData), +// headers: { +// "Content-Type": "application/json", +// }, +// }); +// } else { +// return fetch("http://localhost:8000/submit", { +// method: "POST", +// body: JSON.stringify(submissionData), +// headers: { +// "Content-Type": "application/json", +// }, +// }); +// } +// }) +// .then((response) => response.json()) +// .then((data) => { +// if (submissionData.id) { +// console.log("Resource updated:", data); +// } else { +// console.log("Resource created:", data); +// } +// }) +// .catch((error) => { +// console.error("Error updating/creating resource:", error); +// }); + +// }) + +// }); +// fetchDraftData(form); + +// }); +// setForm(formData); +// //localStorage.setItem('formState', 'true'); +// }; +// fetchData(); +// },[currentId] ); + +// if (forms.length === 0) { +// return
Loading...
; +// } + +// return ( +//
+//
Application Form
+//
+// Home +// +// All Programs +// +//

Application Form

+//
+//
+//
+//

Application form

+//

{forms[0].program_name}

+//
+//
+//
+//
+//
+//

{forms[0].program_name}

+//

About the programsss

+//
+//
+// +// +//
+//
+//
+//
+ +// ); +// }; + 'use client' -import { useSearchParams } from 'next/navigation'; -import { getProgramData } from '@utils'; +import { fetchProgramForm } from '@utils'; import Link from 'next/link'; import { Formio, Templates } from "@tsed/react-formio"; import tailwind from "@tsed/tailwind-formio"; import { useEffect, useState } from 'react' -import { useRouter } from 'next/navigation'; import { ProgramForm } from '@types'; import Modal from '../components/Modal'; - +import { useSearchParams } from 'next/navigation' export default function Apply() { - let currentId = 74 - - const router = useRouter(); - Formio.use(tailwind); - Templates.framework = "tailwind"; - const searchParams = useSearchParams() - const formId = searchParams.get('formId') - const [forms, setForm] = useState([]); - - - useEffect(() => { - - const fetchDraftData = async (form:any) => { - try { - const draftResponse = await fetch(`http://localhost:8000/submit/${currentId}`, { - method: "GET", - headers: { - "Content-Type": "application/json", - }, - }); - - const draftData = await draftResponse.json(); - console.log("Draft data fetched:", draftData); - - // Update form submission with draft data - form.submission = { data: draftData.form_data.data }; - console.log('try1', form.submission); - } catch (error) { - console.error("Error fetching draft data:", error); - } - }; - const fetchData = async () => { - var formData = await getProgramData(formId); - Formio.createForm(document.getElementById('formio'), - formData[0].form_json_schema - ).then( function (form) { - const customSubmitButton = document.getElementById('custom-submit-button'); - console.log('Custom Submit Button:', customSubmitButton); - customSubmitButton?.addEventListener('click', () => { - form.submit().then((submission:any) =>{ - const submissionData = { - id: currentId, - form_data: submission, - }; - console.log('submission', submission.state) - console.log('submission', submission) - //router.push(`submission?formId=${currentId}`); - fetch(`http://localhost:8000/submit/${currentId}`, { - method: "GET", - }) - .then((response) => { - if (response.status === 200) { - return fetch(`http://localhost:8000/submit/${currentId}`, { - method: "PUT", - body: JSON.stringify(submissionData), - headers: { - "Content-Type": "application/json", - }, - }); - } else { - return fetch("http://localhost:8000/submit", { - method: "POST", - body: JSON.stringify(submissionData), - headers: { - "Content-Type": "application/json", - }, - }); - } - }) - .then((response) => response.json()) - .then((data) => { - if (submissionData.id) { - console.log("Resource updated:", data); - } else { - console.log("Resource created:", data); - } - }) - .catch((error) => { - console.error("Error updating/creating resource:", error); - }); - - }) - - }); - fetchDraftData(form); - - }); - setForm(formData); - //localStorage.setItem('formState', 'true'); - }; - fetchData(); - },[currentId] ); - - // useEffect(() => { - // const fetchDraftData = async (form:any) => { - // try { - // const draftResponse = await fetch(`http://localhost:8000/submit/${currentId}`, { - // method: "GET", - // headers: { - // "Content-Type": "application/json", - // }, - // }); - - // const draftData = await draftResponse.json(); - // console.log("Draft data fetched:", draftData); - - // // Update form submission with draft data - // form.submission = { data: draftData.form_data.data }; - // console.log('try1', form.submission); - // } catch (error) { - // console.error("Error fetching draft data:", error); - // } - // }; - // const fetchData = async () => { - // try { - // var formData = await getProgramData(formId); - // const form = await Formio.createForm(document.getElementById('formio'),formData[0].form_json_schema); - // const customSubmitButton = document.getElementById('custom-submit-button'); - // customSubmitButton?.addEventListener('click', async () => { - // form.submit().then((submission:any) =>{ - // const submissionData = { - // id: currentId, - // form_data: submission, - // }; - // console.log('submission', submission.state) - // console.log('submission', submission) - // fetch(`http://localhost:8000/submit/${currentId}`, { - // method: "GET", - // }) - // .then((response) => { - // if (response.status === 200) { - // return fetch(`http://localhost:8000/submit/${currentId}`, { - // method: "PUT", - // body: JSON.stringify(submissionData), - // headers: { - // "Content-Type": "application/json", - // }, - // }); - // } else { - // return fetch("http://localhost:8000/submit", { - // method: "POST", - // body: JSON.stringify(submissionData), - // headers: { - // "Content-Type": "application/json", - // }, - // }); - // } - // }) - // .then((response) => response.json()) - // .then((data) => { - // if (submissionData.id) { - // console.log("Resource updated:", data); - // } else { - // console.log("Resource created:", data); - // } - // }) - // .catch((error) => { - // console.error("Error updating/creating resource:", error); - // }); - // }) - // }); - // await fetchDraftData(form); - // setForm(formData) - // } catch (error) { - // console.error("Error creating form:", error); - // } - - // }; - - - // fetchData(); - // }, []); - - - if (forms.length === 0) { - return
Loading...
; - } - - return ( -
-
Application Form
-
- Home - - All Programs - -

Application Form

-
-
-
-

Application form

-

{forms[0].specific_program_name}

-
-
-
-
-
-

{forms[0].specific_program_name}

-

About the programsss

-
-
- - -
-
+ + Formio.use(tailwind); + Templates.framework = "tailwind"; + const [form, setForm] = useState(); + const searchParams = useSearchParams() + const programid = searchParams.get('programid') + useEffect(() => { + const fetchData = async () => { + const formData = await fetchProgramForm(Number(programid)); + console.log(formData) + if(formData?.schema){ + const formioElement = document.getElementById('formio'); + + // Ensure the formioElement exists before creating the form + if (formioElement) { + Formio.createForm(formioElement, formData.schema).then(function (form) { + form.on("submit", (submission: any) => { + const submissionData = { + form_data: submission, + }; + console.log('submission', submission.state); + console.log('submission', submission); + }); + }); + } + } + + setForm(formData); + }; + + fetchData(); + }, []); + + if (!form ) { + return
Loading...
; + } + + return ( +
+
Application Form
+
+ Home + + All Programs + +

Application Form

+
+
+
+

Application form

+

{form.program_name}

+
+
- - ); +
+

{form.program_name}

+

About the programsss

+
+
+ + +
+
+
+
+ ); }; diff --git a/src/app/[lang]/components/Card.tsx b/src/app/[lang]/components/Card.tsx index 4254b58..b1c2d08 100644 --- a/src/app/[lang]/components/Card.tsx +++ b/src/app/[lang]/components/Card.tsx @@ -30,7 +30,7 @@ export default async function Card ({
  • - medical + medical
    @@ -45,7 +45,7 @@ export default async function Card ({
  • - school + school
    @@ -60,9 +60,9 @@ export default async function Card ({
    @@ -76,7 +76,7 @@ export default async function Card ({
  • - medical + medical
    @@ -91,7 +91,7 @@ export default async function Card ({
  • - school + school
    @@ -109,6 +109,7 @@ export default async function Card ({ {page.card.view_all} +
    diff --git a/src/app/[lang]/components/Pagination.tsx b/src/app/[lang]/components/Pagination.tsx index 1bbcd1c..04fb37c 100644 --- a/src/app/[lang]/components/Pagination.tsx +++ b/src/app/[lang]/components/Pagination.tsx @@ -51,7 +51,7 @@ const Pagination = () => { @@ -68,7 +68,7 @@ const Pagination = () => { ))}
    diff --git a/src/app/[lang]/components/auth.tsx b/src/app/[lang]/components/auth.tsx new file mode 100644 index 0000000..1a39474 --- /dev/null +++ b/src/app/[lang]/components/auth.tsx @@ -0,0 +1,59 @@ +"use client"; + +import {useRouter} from "next/navigation"; +import { prefixBaseApiPath } from "@/utils/path"; + +import {useEffect} from "react"; + +// TODO: Try to use context or state +export const authContext: { + profile?: null | { + sub?: string; + name?: string; + given_name?: string; + family_name?: string; + middle_name?: string; + picture?: string; + email?: string; + gender?: string; + birthdate?: string; + address?: any; + phone_number?: string; + }; +} = {profile: null}; + +export function AuthUtil(params: {successRedirectUrl?: string; failedRedirectUrl?: string}) { + const {push} = useRouter(); + + function checkAndRedirect() { + if (params.successRedirectUrl && authContext.profile) return push(params.successRedirectUrl); + else if (params.failedRedirectUrl && !authContext.profile) return push(params.failedRedirectUrl); + } + + useEffect(() => { + fetch(prefixBaseApiPath("/auth/profile")) + .then((res) => { + if (res.ok) { + res + .json() + .then((resJson) => { + authContext.profile = resJson; + }) + .catch((err) => { + console.log("Error Getting profile json", err); + }) + .finally(checkAndRedirect); + } else { + console.log("Error Getting profile, res not ok"); + checkAndRedirect(); + } + }) + .catch((err) => { + console.log("Error Getting profile", err); + checkAndRedirect(); + }); + // TODO: Find better way. Disable dependency error for now + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + return <>; +} diff --git a/src/app/[lang]/components/navigation/Footer.tsx b/src/app/[lang]/components/navigation/Footer.tsx index 0bd4af3..0d57f3b 100644 --- a/src/app/[lang]/components/navigation/Footer.tsx +++ b/src/app/[lang]/components/navigation/Footer.tsx @@ -19,7 +19,8 @@ export default async function Footer({ lang }: { lang: Locale }) {
    Logo
    diff --git a/src/app/[lang]/components/navigation/LanguageDropdown.tsx b/src/app/[lang]/components/navigation/LanguageDropdown.tsx index 9f49b41..134ca0a 100644 --- a/src/app/[lang]/components/navigation/LanguageDropdown.tsx +++ b/src/app/[lang]/components/navigation/LanguageDropdown.tsx @@ -1,49 +1,60 @@ "use client" -import { Fragment, useState, useEffect } from 'react'; +import { Fragment, useState ,useEffect} from 'react'; import { Menu, Transition } from '@headlessui/react'; import { ChevronDownIcon } from '@heroicons/react/outline'; import Link from 'next/link'; - import { usePathname } from 'next/navigation'; function classNames(...classes: string[]): string { return classes.filter(Boolean).join(' '); } -export default function LanguageDropDown(): JSX.Element { +export default function LanguageDropDown() { const pathName = usePathname(); - const [selectedLanguage, setSelectedLanguage] = useState(() => { + const [selectedLanguage, setSelectedLanguage] = useState<'en' | 'fr' | 'tl'>(() => { if (typeof window !== 'undefined') { - return localStorage.getItem('selectedLanguage') || 'en'; + const storedLanguage = localStorage.getItem('selectedLanguage'); + return storedLanguage && ['en', 'fr', 'tl'].includes(storedLanguage) + ? (storedLanguage as 'en' | 'fr' | 'tl') + : 'en'; } else { - return localStorage.getItem('selectedLanguage') || 'en'; + return 'en'; } }); - - const handleLanguageChange = (locale: string) => { + const handleLanguageChange = (locale: 'en' | 'fr' | 'tl') => { setSelectedLanguage(locale); }; - const redirectedPathName = (locale: string) => { + + useEffect(() => { + const storedLanguage = localStorage.getItem('selectedLanguage'); + if (storedLanguage && ['en', 'fr', 'tl'].includes(storedLanguage)) { + setSelectedLanguage(storedLanguage as 'en' | 'fr' | 'tl'); + } + }, []); + + const redirectedPathName = (locale: 'en' | 'fr' | 'tl') => { if (!pathName) return '/'; const segments = pathName.split('/'); segments[1] = locale; return segments.join('/'); - }; - - useEffect(() => { - localStorage.setItem('selectedLanguage', selectedLanguage); - }, [selectedLanguage]); + }; + const getFlagImage = (locale: 'en' | 'fr' | 'tl') => { + const flagImages = { + en: 'http://spar.openg2p.my/spar/img/flag_en.png', + fr: 'http://spar.openg2p.my/spar/img/flag_fr.png', + tl: 'http://spar.openg2p.my/spar/img/flag_tl.png', + }; + return flagImages[locale]; + }; return (
    - {selectedLanguage === 'en' && English} - {selectedLanguage === 'fr' && Français} - {selectedLanguage === 'tl' && Filipino} - {selectedLanguage === 'en' ? 'English' : selectedLanguage === 'fr' ? 'Français' : 'Filipino'} + {selectedLanguage} + {selectedLanguage === 'en' ? 'English' : selectedLanguage === 'fr' ? 'Français' : 'Language'}
    @@ -70,7 +81,7 @@ export default function LanguageDropDown(): JSX.Element { 'px-4 py-2 text-sm flex items-center gap-2' )} > - English + English English )} @@ -86,7 +97,7 @@ export default function LanguageDropDown(): JSX.Element { 'px-4 py-2 text-sm flex items-center gap-2' )} > - Français + Français Français )} @@ -102,7 +113,7 @@ export default function LanguageDropDown(): JSX.Element { 'px-4 py-2 text-sm flex items-center gap-2' )} > - Filipino + Filipino Filipino )} diff --git a/src/app/[lang]/components/navigation/ProfileDropdown.tsx b/src/app/[lang]/components/navigation/ProfileDropdown.tsx index 6f76769..a9ff153 100644 --- a/src/app/[lang]/components/navigation/ProfileDropdown.tsx +++ b/src/app/[lang]/components/navigation/ProfileDropdown.tsx @@ -5,20 +5,42 @@ import { Menu, Transition } from '@headlessui/react'; import { ChevronDownIcon } from '@heroicons/react/outline'; import Link from 'next/link'; import Image from 'next/image'; - +import { Locale } from '@i18n.config'; +import { prefixBaseApiPath } from "@/utils/path"; +import { authContext } from "../auth"; +import { useRouter } from "next/navigation"; +import { + Avatar} from "@mui/material"; +import { useState } from 'react'; function classNames(...classes: string[]): string { return classes.filter(Boolean).join(' '); } -export default function ProfileDropDown(): JSX.Element { +export default function ProfileDropDown({ lang }: { lang: Locale }): JSX.Element { + + const router = useRouter(); + const [anchorEl, setAnchorEl] = useState(null); + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const logoutHandler = () => { + fetch(prefixBaseApiPath("/auth/logout"), { + method: "POST", + }).finally(() => { + authContext.profile = null; + router.replace("/en/login"); + }); + }; return (
    - English @@ -35,10 +57,11 @@ export default function ProfileDropDown(): JSX.Element { >
    - + {({ active }) => ( - )} -
    {({ active }) => (
    ); } - -
    - - Account - -
    - - -
    - - {({ active }) => ( - - My profile - - )} - -
    - - {({ active }) => ( - - )} - -
    -
    -
    -
    -
    \ No newline at end of file diff --git a/src/app/[lang]/contactus/page.tsx b/src/app/[lang]/contactus/page.tsx index dbaa497..85ab10a 100644 --- a/src/app/[lang]/contactus/page.tsx +++ b/src/app/[lang]/contactus/page.tsx @@ -1,13 +1,14 @@ 'use client' import React from 'react' import Link from 'next/link' - +import { AuthUtil } from '../components/auth' function ContactUs() { return (
    + ;
    Contact Us
    diff --git a/src/app/[lang]/forms/page.tsx b/src/app/[lang]/forms/page.tsx index 99372bf..106f22a 100644 --- a/src/app/[lang]/forms/page.tsx +++ b/src/app/[lang]/forms/page.tsx @@ -1,6 +1,6 @@ 'use client' import { ProgramForm } from '@types'; -import { fetchProgramForms } from '@utils' +import { getProgramForm } from '@utils' import { useRouter } from 'next/navigation'; import React, { useState,useEffect} from 'react'; import Link from 'next/link' @@ -15,10 +15,10 @@ export default function ProgramList({ params: { lang } }: { const [formState, setFormState] = useState(false); const router = useRouter(); const handleApplyClick = (form: ProgramForm) => { - router.push(`apply?formId=${form.id}`); + router.push(`apply?formId=${form.program_id}`); }; const handleViewClick = (form: ProgramForm) => { - router.push(`submission?formId=${form.id}`); + router.push(`submission?formId=${form.program_id}`); }; @@ -33,7 +33,7 @@ export default function ProgramList({ params: { lang } }: { } const { page } = dictionary; setPage(page); - const fetchedForms = await fetchProgramForms(); + const fetchedForms = await getProgramForm(); setForms(fetchedForms); setIsDataEmpty(!Array.isArray(fetchedForms) || fetchedForms.length < 1 || !forms); const storedFormState = localStorage.getItem('formState'); @@ -124,7 +124,7 @@ export default function ProgramList({ params: { lang } }: { > {index + 1} - {form.specific_program_name} + {form.program_name} diff --git a/src/app/[lang]/home/page.tsx b/src/app/[lang]/home/page.tsx index b16c362..d2d5d95 100644 --- a/src/app/[lang]/home/page.tsx +++ b/src/app/[lang]/home/page.tsx @@ -1,14 +1,14 @@ -// 'use client' +'use client' import React from 'react' -import { MouseEventHandler, useState } from "react"; +// import { MouseEventHandler, useState } from "react"; import { Card, Pagination } from '../components'; -import { fetchPrograms } from '@/utils' +import { fetchProgramDetails } from '@/utils' import { SearchBar } from '../components'; import { Suspense } from 'react' import Loading from '../loading'; import { getDictionary } from '@/lib/dictionary' -import { Locale, i18n } from '@/i18n.config' -import { Program } from '@types'; +import { Locale } from '@/i18n.config' +import { AuthUtil } from '../components/auth'; export default async function Page({ searchParams, params: { lang } }: { @@ -23,12 +23,7 @@ export default async function Page({ searchParams, params: { lang } }: { // const [sortOrder, setSortOrder] = useState("ascn"); // type SortKeys = keyof Program; // type SortOrder = "ascn" | "desc"; - const query = searchParams?.query || ''; - const currentPage = Number(searchParams?.page) || 1; - const programs = await fetchPrograms({ - program: query || "", - currentPage: currentPage, - }); + // function sortData({ // tableData, // sortKey, @@ -51,14 +46,6 @@ export default async function Page({ searchParams, params: { lang } }: { // return sortedData; // } // const sortedData = () => sortData({ tableData: programs, sortKey, reverse: sortOrder === "desc" }); - - - const isDataEmpty = !Array.isArray(programs) || programs.length < 1 || !programs - const dictionary = await getDictionary(lang); - if (!dictionary) { - return null; - } - const { page } = dictionary; // function SortButton({ // sortOrder, // columnKey, @@ -99,21 +86,39 @@ export default async function Page({ searchParams, params: { lang } }: { // setSortKey(key); // } + + const query = searchParams?.query || ''; + const currentPage = Number(searchParams?.page) || 1; + + const programs = await fetchProgramDetails({ + program: query || "", + currentPage: currentPage, + }); + + + const isDataEmpty = !Array.isArray(programs) || programs.length < 1 || !programs + const dictionary = await getDictionary(lang); + if (!dictionary) { + return null; + } + const { page } = dictionary; + return (
    - {!isDataEmpty ? ( -
    -
    -
    -

    {page.home.title}

    - -
    - }> -
    - - - - {/* {headers.map((row) => { + + {!isDataEmpty ? ( +
    +
    +
    +

    {page.home.title}

    + +
    + }> +
    +
    + + + {/* {headers.map((row) => { return ( ); })} */} - - + - - - - - - - - - - {programs.map((program, index) => ( - - - - - - - - - + + + + + + - ))} - -
    @@ -130,128 +135,101 @@ export default async function Page({ searchParams, params: { lang } }: {
    - {page.home.number} - -
    + {page.home.number} +
    +
    {page.home.program_name} - -
    -
    -
    - {page.home.application_id} - -
    -
    -
    - {page.home.program_status} - -
    -
    -
    - {page.home.application_status} - -
    -
    -
    - {page.home.submiited_on} - -
    -
    -
    - {page.home.entitlement} - -
    -
    -
    - {page.home.amount_receieved} - -
    -
    {index + 1} - {program.program_name} - - {program.application_id} - - - - - - {program.submitted_on} - - {program.entitlement} - - {program.amount_received} - +
    + {page.home.enrollment_status} + +
    +
    +
    + {page.home.total_funds_awaited} + +
    +
    +
    + {page.home.total_funds_received} + +
    +
    -
    -
    - {/*
    + + + {programs.map((program, index) => ( + + {index + 1} + + {program.program_name} + + + + + {/* + + */} + + {program.total_funds_awaited} + + {/* + {program.is_multiple_form_submission} + */} + + {program.total_funds_received} + + + ))} + + +
    + + {/*
    */} +
    -
    - ) : ( -
    -

    - Oops no results -

    -

    Message

    -
    - )} + ) : ( +
    +

    + Oops no results +

    +

    Message

    +
    + )} -
    - -
    +
    + +
    ); }; diff --git a/src/app/[lang]/layout.tsx b/src/app/[lang]/layout.tsx index 69067e1..97e0a35 100644 --- a/src/app/[lang]/layout.tsx +++ b/src/app/[lang]/layout.tsx @@ -25,7 +25,7 @@ export default function RootLayout({ -
    +
    {children}
    diff --git a/src/app/[lang]/login/layout.tsx b/src/app/[lang]/login/layout.tsx new file mode 100644 index 0000000..cf7bc20 --- /dev/null +++ b/src/app/[lang]/login/layout.tsx @@ -0,0 +1,32 @@ +import '@/commons/styles/globals.css' +import type { Metadata } from 'next' + +import { Locale, i18n } from '@/i18n.config' +import { GlobalContextProvider } from '../Context/store'; + +export const metadata: Metadata = { + title: 'Self service portal', +} +export async function generateStaticParams() { + return i18n.locales.map(locale => ({ lang: locale })) + +} + +export default function RootLayout({ + children, params }: { + children: React.ReactNode, + params: { lang: Locale } + }) { + return ( + + + + + + + {children} + + + + ) +} \ No newline at end of file diff --git a/src/app/[lang]/login/loginbox.tsx b/src/app/[lang]/login/loginbox.tsx new file mode 100644 index 0000000..9871d2c --- /dev/null +++ b/src/app/[lang]/login/loginbox.tsx @@ -0,0 +1,91 @@ +"use client"; + +import {Avatar, Button} from "@mui/material"; +import {SyntheticEvent, useEffect, useState} from "react"; +import { prefixBaseApiPath } from "@/utils/path"; +import Link from "next/link"; +import Image from "next/image"; + +type LoginProvider = { + id: number; + name: string; + type: string; + displayName: string; + displayIconUrl: string; +}; + +export default function LoginBox() { + function handleLoginSubmit(e: SyntheticEvent) { + e.preventDefault(); + console.log("You clicked submit."); + } + + const [loginProviders, setLoginProviders] = useState([]); + + function getLoginProviders() { + fetch(prefixBaseApiPath(`/auth/getLoginProviders`)).then((res) => { + res.json().then((resJson: {loginProviders: LoginProvider[]}) => { + setLoginProviders(resJson.loginProviders); + }); + }); + } + + useEffect(getLoginProviders, []); + + return ( +
    +
    +
    +
    + Logo +
    +
    + + +
    +
    +
    + +
    + Reset Password +
    + +
    + +
    +
    + +
    +
    + OR +
    +
    + {loginProviders && + loginProviders.length !== 0 && + loginProviders.map((x) => ( + + ))} +
    +
    +
    +
    + + ); +} diff --git a/src/app/[lang]/login/page.tsx b/src/app/[lang]/login/page.tsx new file mode 100644 index 0000000..9e1ebce --- /dev/null +++ b/src/app/[lang]/login/page.tsx @@ -0,0 +1,17 @@ + +import { AuthUtil } from "../components/auth"; +import LoginBox from "./loginbox"; +import Link from "next/link"; +export default async function Login() { + return ( +
    + + +
    +
    + Facing any challenges? Help +
    +
    +
    + ); +} diff --git a/src/app/[lang]/myprofile/page.tsx b/src/app/[lang]/myprofile/page.tsx index 540fc10..0cc8959 100644 --- a/src/app/[lang]/myprofile/page.tsx +++ b/src/app/[lang]/myprofile/page.tsx @@ -1,248 +1,67 @@ 'use client' + + import React from 'react' import Link from 'next/link' import { Formio, Templates } from "@tsed/react-formio"; import tailwind from "@tsed/tailwind-formio"; -import { useEffect } from 'react' +import { useState, MouseEvent } from "react"; +import { Locale } from '@/i18n.config' +import { authContext } from "../components/auth"; +import { AuthUtil } from '../components/auth' +import { getDictionary } from '@/lib/dictionary' -function Profile() { +export default async function Profile({ + params: { lang } +}: { + params: { lang: Locale } +}) { Formio.use(tailwind); Templates.framework = "tailwind"; let currentId = 72; - // useEffect(() => { - // const fetchData = async () => { - // Formio.createForm(document.getElementById('formio'), { - // components: [ - // { - // type: "textfield", - // key: "firstName", - // label: "First Name", - // input: true, - // }, - // { - // type: "textfield", - // key: "lastName", - // label: "Last Name", - // input: true, - // }, - // { - // type: "textfield", - // key: "middleName", - // label: "Middle Name", - // input: true, - // }, - // { - // type: "button", - // action: "submit", - // key: "submit", - // label: "Save Submission", - // }, - // { - // type: "button", - // action: "saveState", - // state: "draft", - // key: "saveDraft", - // label: "Save as Draft", - // }, - // ], - // } - // ).then( function (form) { - // const customSubmitButton = document.getElementById('custom-submit-button'); - // console.log('Custom Submit Button:', customSubmitButton); - // customSubmitButton?.addEventListener('click', () => { - // form.on("submit", (submission: any) =>{ - // const submissionData = { - // id: currentId, - // form_data: submission, - // }; - // console.log('submission', submission.state) - // console.log('submission', submission) - // fetch(`http://localhost:8000/submit/${currentId}`, { - // method: "GET", - // }) - // .then((response) => { - // if (response.status === 200) { - // return fetch(`http://localhost:8000/submit/${currentId}`, { - // method: "PUT", - // body: JSON.stringify(submissionData), - // headers: { - // "Content-Type": "application/json", - // }, - // }); - // } else { - // return fetch("http://localhost:8000/submit", { - // method: "POST", - // body: JSON.stringify(submissionData), - // headers: { - // "Content-Type": "application/json", - // }, - // }); - // } - // }) - // .then((response) => response.json()) - // .then((data) => { - // if (submissionData.id) { - // console.log("Resource updated:", data); - // } else { - // console.log("Resource created:", data); - // } - // }) - // .catch((error) => { - // console.error("Error updating/creating resource:", error); - // }); + - // }) + - // fetch(`http://localhost:8000/submit/${currentId}`, { - // method: "GET", - // headers: { - // "Content-Type": "application/json", - // }, - // }) - // .then((response) => response.json()) - // .then((draftData) => { - // console.log("Draft data fetched:", draftData); - // form.submission = { data: draftData.form_data.data }; - // console.log('try1', form.submission) - // }) - // .catch((error) => { - // console.error("Error fetching draft data:", error); - // }) - // }); - // }); - // }; - // fetchData() - // }, []); + const [anchorEl, setAnchorEl] = useState(null); + const open = Boolean(anchorEl); + const handleClick = (event: MouseEvent) => { + setAnchorEl(event.currentTarget); + }; - useEffect(() => { - const fetchDraftData = async (form:any) => { - try { - const draftResponse = await fetch(`http://localhost:8000/submit/${currentId}`, { - method: "GET", - headers: { - "Content-Type": "application/json", - }, - }); - - const draftData = await draftResponse.json(); - console.log("Draft data fetched:", draftData); - - // Update form submission with draft data - form.submission = { data: draftData.form_data.data }; - console.log('try1', form.submission); - } catch (error) { - console.error("Error fetching draft data:", error); - } - }; - const fetchData = async () => { - try { - const form = await Formio.createForm(document.getElementById('formio'), { - components: [ - { - type: "textfield", - key: "firstName", - label: "First Name", - input: true, - }, - { - type: "textfield", - key: "lastName", - label: "Last Name", - input: true, - }, - { - type: "textfield", - key: "middleName", - label: "Middle Name", - input: true, - }, - { - type: "button", - action: "submit", - key: "submit", - label: "Save Submission", - }, - { - type: "button", - action: "saveState", - state: "draft", - key: "saveDraft", - label: "Save as Draft", - }, - ], - }); - - const customSubmitButton = document.getElementById('custom-submit-button'); - customSubmitButton?.addEventListener('click', async () => { - form.submit().then((submission:any) =>{ - const submissionData = { - id: currentId, - form_data: submission, - }; - console.log('submission', submission.state) - console.log('submission', submission) - fetch(`http://localhost:8000/submit/${currentId}`, { - method: "GET", - }) - .then((response) => { - if (response.status === 200) { - return fetch(`http://localhost:8000/submit/${currentId}`, { - method: "PUT", - body: JSON.stringify(submissionData), - headers: { - "Content-Type": "application/json", - }, - }); - } else { - return fetch("http://localhost:8000/submit", { - method: "POST", - body: JSON.stringify(submissionData), - headers: { - "Content-Type": "application/json", - }, - }); - } - }) - .then((response) => response.json()) - .then((data) => { - if (submissionData.id) { - console.log("Resource updated:", data); - } else { - console.log("Resource created:", data); - } - }) - .catch((error) => { - console.error("Error updating/creating resource:", error); - }); - }) - }); - await fetchDraftData(form); - } catch (error) { - console.error("Error creating form:", error); - } - }; - - fetchData(); - }, []); - + const dictionary = await getDictionary(lang); + if (!dictionary) { + return null; + } + const { page } = dictionary return (
    +
    Profile
    Home -

    Profile

    -
    -
    -
    -
    - +

    My Profile

    +
    +
    +
    Name
    + {authContext.profile ? authContext.profile.name : ""} +
    Last Name
    + {authContext.profile ? authContext.profile.middle_name : ""} +
    Gender:
    + {authContext.profile ? authContext.profile.gender : ""} +
    Birthdate:
    + {authContext.profile ? authContext.profile.birthdate : ""} +
    Email:
    + {authContext.profile ? authContext.profile.email : ""} +
    Phone:
    + {authContext.profile ? authContext.profile.phone_number : ""} +
    +
    ) } - -export default Profile \ No newline at end of file diff --git a/src/app/[lang]/otherpage/page.tsx b/src/app/[lang]/otherpage/page.tsx index cd7c696..fb014d4 100644 --- a/src/app/[lang]/otherpage/page.tsx +++ b/src/app/[lang]/otherpage/page.tsx @@ -1,14 +1,244 @@ import React from 'react' import Link from 'next/link' +import { AuthUtil } from '../components/auth' +import { useEffect } from 'react'; function Others() { + + + + // useEffect(() => { + // const fetchData = async () => { + // Formio.createForm(document.getElementById('formio'), { + // components: [ + // { + // type: "textfield", + // key: "firstName", + // label: "First Name", + // input: true, + // }, + // { + // type: "textfield", + // key: "lastName", + // label: "Last Name", + // input: true, + // }, + // { + // type: "textfield", + // key: "middleName", + // label: "Middle Name", + // input: true, + // }, + // { + // type: "button", + // action: "submit", + // key: "submit", + // label: "Save Submission", + // }, + // { + // type: "button", + // action: "saveState", + // state: "draft", + // key: "saveDraft", + // label: "Save as Draft", + // }, + // ], + // } + // ).then( function (form) { + // const customSubmitButton = document.getElementById('custom-submit-button'); + // console.log('Custom Submit Button:', customSubmitButton); + // customSubmitButton?.addEventListener('click', () => { + // form.on("submit", (submission: any) =>{ + // const submissionData = { + // id: currentId, + // form_data: submission, + // }; + // console.log('submission', submission.state) + // console.log('submission', submission) + // fetch(`http://localhost:8000/submit/${currentId}`, { + // method: "GET", + // }) + // .then((response) => { + // if (response.status === 200) { + // return fetch(`http://localhost:8000/submit/${currentId}`, { + // method: "PUT", + // body: JSON.stringify(submissionData), + // headers: { + // "Content-Type": "application/json", + // }, + // }); + // } else { + // return fetch("http://localhost:8000/submit", { + // method: "POST", + // body: JSON.stringify(submissionData), + // headers: { + // "Content-Type": "application/json", + // }, + // }); + // } + // }) + // .then((response) => response.json()) + // .then((data) => { + // if (submissionData.id) { + // console.log("Resource updated:", data); + // } else { + // console.log("Resource created:", data); + // } + // }) + // .catch((error) => { + // console.error("Error updating/creating resource:", error); + // }); + + // }) + + // fetch(`http://localhost:8000/submit/${currentId}`, { + // method: "GET", + // headers: { + // "Content-Type": "application/json", + // }, + // }) + // .then((response) => response.json()) + // .then((draftData) => { + // console.log("Draft data fetched:", draftData); + // form.submission = { data: draftData.form_data.data }; + // console.log('try1', form.submission) + // }) + // .catch((error) => { + // console.error("Error fetching draft data:", error); + // }) + // }); + // }); + // }; + // fetchData() + // }, []); + + // useEffect(() => { + // const fetchDraftData = async (form: any) => { + // try { + // const draftResponse = await fetch(`http://localhost:8000/submit/${currentId}`, { + // method: "GET", + // headers: { + // "Content-Type": "application/json", + // }, + // }); + + // const draftData = await draftResponse.json(); + // console.log("Draft data fetched:", draftData); + + // // Update form submission with draft data + // form.submission = { data: draftData.form_data.data }; + // console.log('try1', form.submission); + // } catch (error) { + // console.error("Error fetching draft data:", error); + // } + // }; + // const fetchData = async () => { + // try { + // const form = await Formio.createForm(document.getElementById('formio'), { + // components: [ + // { + // type: "textfield", + // key: "firstName", + // label: "First Name", + // input: true, + // }, + // { + // type: "textfield", + // key: "lastName", + // label: "Last Name", + // input: true, + // }, + // { + // type: "textfield", + // key: "middleName", + // label: "Middle Name", + // input: true, + // }, + // { + // type: "button", + // action: "submit", + // key: "submit", + // label: "Save Submission", + // }, + // { + // type: "button", + // action: "saveState", + // state: "draft", + // key: "saveDraft", + // label: "Save as Draft", + // }, + // ], + // }); + + // const customSubmitButton = document.getElementById('custom-submit-button'); + // customSubmitButton?.addEventListener('click', async () => { + // form.submit().then((submission: any) => { + // const submissionData = { + // id: currentId, + // form_data: submission, + // }; + // console.log('submission', submission.state) + // console.log('submission', submission) + // fetch(`http://localhost:8000/submit/${currentId}`, { + // method: "GET", + // }) + // .then((response) => { + // if (response.status === 200) { + // return fetch(`http://localhost:8000/submit/${currentId}`, { + // method: "PUT", + // body: JSON.stringify(submissionData), + // headers: { + // "Content-Type": "application/json", + // }, + // }); + // } else { + // return fetch("http://localhost:8000/submit", { + // method: "POST", + // body: JSON.stringify(submissionData), + // headers: { + // "Content-Type": "application/json", + // }, + // }); + // } + // }) + // .then((response) => response.json()) + // .then((data) => { + // if (submissionData.id) { + // console.log("Resource updated:", data); + // } else { + // console.log("Resource created:", data); + // } + // }) + // .catch((error) => { + // console.error("Error updating/creating resource:", error); + // }); + // }) + // }); + // await fetchDraftData(form); + + // } catch (error) { + // console.error("Error creating form:", error); + // } + // }; + + // fetchData(); + // }, []); + return (
    +
    Others
    Home

    Others

    +
    +
    +
    +
    + +
    +
    diff --git a/src/app/[lang]/page.tsx b/src/app/[lang]/page.tsx index 8d97561..44fc62b 100644 --- a/src/app/[lang]/page.tsx +++ b/src/app/[lang]/page.tsx @@ -1,14 +1,13 @@ import React from 'react' import { Locale } from '@/i18n.config' import { getDictionary } from '@/lib/dictionary' +import { AuthUtil } from './components/auth'; -//import {redirect} from 'next/navigation'; export default async function page({ params: { lang } }: { params: { lang: Locale } }) { - //redirect('/en'); const dictionary = await getDictionary(lang); if (!dictionary) { return null; @@ -18,8 +17,9 @@ export default async function page({ return (
    -

    {page.main.title}

    -

    {page.main.description}

    + {/*

    {page.main.title}

    +

    {page.main.description}

    */} + ;
    ) diff --git a/src/app/[lang]/programs/page.tsx b/src/app/[lang]/programs/page.tsx index 04837a6..6085d2f 100644 --- a/src/app/[lang]/programs/page.tsx +++ b/src/app/[lang]/programs/page.tsx @@ -7,10 +7,10 @@ import { Locale } from '@i18n.config' import { getDictionary } from '@lib/dictionary' import { Suspense } from 'react'; import { Pagination, SearchBar } from '../components'; -import { MouseEventHandler, useState } from "react"; +import { AuthUtil } from '../components/auth'; +import { useState ,useEffect} from 'react'; +import { useRouter } from 'next/navigation'; import { Program } from '@types'; - - export default async function ProgrmPage({ searchParams, params: { lang } }: { searchParams?: { query?: string; @@ -19,85 +19,121 @@ export default async function ProgrmPage({ searchParams, params: { lang } }: { params: { lang: Locale } }) { - const [sortKey, setSortKey] = useState("id"); - const [sortOrder, setSortOrder] = useState("ascn"); - type SortKeys = keyof Program; - type SortOrder = "ascn" | "desc"; + // const [sortKey, setSortKey] = useState("id"); + // const [sortOrder, setSortOrder] = useState("ascn"); + // type SortKeys = keyof Program; + // type SortOrder = "ascn" | "desc"; + + // function sortData({ + // tableData, + // sortKey, + // reverse, + // }: { + // tableData: Program[]; + // sortKey: SortKeys; + // reverse: boolean; + // }) { + // if (!sortKey) return tableData; + + // const sortedData = programs.sort((a, b) => { + // return a[sortKey] > b[sortKey] ? 1 : -1; + // }); + + // if (reverse) { + // return sortedData.reverse(); + // } + + // return sortedData; + // } + // const sortedData = () => sortData({ tableData: programs, sortKey, reverse: sortOrder === "desc" }); + + const router = useRouter(); const query = searchParams?.query || ''; const currentPage = Number(searchParams?.page) || 1; const programs = await fetchPrograms({ program: query || "", currentPage: currentPage, }); - function sortData({ - tableData, - sortKey, - reverse, - }: { - tableData: Program[]; - sortKey: SortKeys; - reverse: boolean; - }) { - if (!sortKey) return tableData; - - const sortedData = programs.sort((a, b) => { - return a[sortKey] > b[sortKey] ? 1 : -1; - }); - - if (reverse) { - return sortedData.reverse(); - } - - return sortedData; - } - const sortedData = () => sortData({ tableData: programs, sortKey, reverse: sortOrder === "desc" }); + + const handleApplyClick = (program: Program) => { + router.push(`apply?programid=${program.id}`); + }; + const handleViewClick = (program: Program) => { + router.push(`submission?programId=${program.id}`); + + }; + const isDataEmpty = !Array.isArray(programs) || programs.length < 1 || !programs + const dictionary = await getDictionary(lang); if (!dictionary) { - return null; + return; } const { page } = dictionary; - function SortButton({ - sortOrder, - columnKey, - sortKey, - onClick, - }: { - sortOrder: SortOrder; - columnKey: SortKeys; - sortKey: SortKeys; - onClick: MouseEventHandler; - }) { - return ( - - ); - } - const headers: { key: SortKeys; label: string }[] = [ - { key: "id", label: "ID" }, - { key: "program_name", label: "Program Name" }, - { key: "program_status", label: "Program Status" }, - { key: "application_status", label:" Application Status" }, - ]; + // useEffect(() => { + // const fetchData = async () => { + + + // const storedFormState = localStorage.getItem('formState'); + // if (storedFormState === 'true') { + // setFormState(true); + // } + // }; - function changeSort(key: SortKeys) { - setSortOrder(sortOrder === "ascn" ? "desc" : "ascn"); + // fetchData(); - setSortKey(key); - } + // }, ); + // function SortButton({ + // sortOrder, + // columnKey, + // sortKey, + // onClick, + // }: { + // sortOrder: SortOrder; + // columnKey: SortKeys; + // sortKey: SortKeys; + // onClick: MouseEventHandler; + // }) { + // return ( + // + // ); + // } + + // const headers: { key: SortKeys; label: string }[] = [ + // { key: "id", label: "ID" }, + // { key: "program_name", label: "Program Name" }, + // { key: "program_status", label: "Program Status" }, + // { key: "application_status", label: " Application Status" }, + // ]; + + // function changeSort(key: SortKeys) { + // setSortOrder(sortOrder === "ascn" ? "desc" : "ascn"); + + // setSortKey(key); + // } return (
    +
    All Programs
    @@ -119,7 +155,7 @@ export default async function ProgrmPage({ searchParams, params: { lang } }: { - {headers.map((row) => { + {/* {headers.map((row) => { return (
    @@ -135,13 +171,13 @@ export default async function ProgrmPage({ searchParams, params: { lang } }: {
    ); - })} - {/* + })} */} + {page.home.number}
    - {page.programs.program_name} + {page.programs.name}
    - {page.programs.status} + {page.programs.has_applied} - */} + - {sortedData().map((program, index) => ( + {programs.map((program, index) => ( {index + 1} - {program.program_name} + {program.name} + - - Apply - +
    + {program.state === 'submitted' ? ( + + ) : ( + + )} +
    ))} diff --git a/src/commons/styles/globals.css b/src/commons/styles/globals.css index d272fc1..0f2d9c7 100644 --- a/src/commons/styles/globals.css +++ b/src/commons/styles/globals.css @@ -21,8 +21,3 @@ html,body{ width: 100%; } } */ - - -.sort-reverse { - transform: rotate(180deg); -} \ No newline at end of file diff --git a/src/dictionaries/en.json b/src/dictionaries/en.json index e0437ae..a502127 100644 --- a/src/dictionaries/en.json +++ b/src/dictionaries/en.json @@ -13,16 +13,14 @@ "title": "About Us", "description": "This is the about page" }, - "home": { - "title": "My Applications", - "number": "No.", - "program_name": "Program Name", - "application_id": " Application Id", - "program_status": " Program Status", - "application_status": "Application Status", - "submiited_on": "Submiited On", - "entitlement": "Entitlement (in USD)", - "amount_receieved": "Amount Receieved", + "programs": { + "name": "Program Name", + "description": " Description ", + "state": " Program Status", + "has_applied": "Status", + "is_portal_form_mapped": "Portal Mapped", + "is_multiple_form_submission": "Multiple Form Submission", + "last_application_status": "Application Status", "error": "Oops no results" }, "card": { @@ -43,11 +41,16 @@ "description_c": "", "view_all": "View all" }, - "programs": { - "title": "All Programs", - "status":"Status", + "home": { + "title": "My Applications", + "number": "No.", + "enrollment_status":"Status", "program_name": "Program Name", - "actions":"Actions" + "total_funds_awaited":"Total Funds Awaited", + "total_funds_received": "Total Funds Received" + }, + "lang": { + "language": "English" } } } diff --git a/src/dictionaries/fr.json b/src/dictionaries/fr.json index 365124d..0cb923c 100644 --- a/src/dictionaries/fr.json +++ b/src/dictionaries/fr.json @@ -1,53 +1,54 @@ { "footer": { - "about": "À propos de nous", - "contact": "Contactez-nous", - "others": "Autres" + "about": "À propos de nous", + "contact": "Contactez-nous", + "others": "Autres" }, "page": { - "main": { - "title": "Bienvenue sur le portail de libre-service", - "description": "Connexion au portail de libre-service" - }, - "about": { - "title": "À propos de nous", - "description": "Ceci est la page À propos" - }, - "home": { - "title": "Mes applications", - "number": "N°", - "program_name": "Nom du programme", - "application_id": "Identifiant de l'application", - "program_status": "État du programme", - "application_status": "État de l'application", - "submiited_on": "Soumis le", - "entitlement": "Droit (en USD)", - "amount_receieved": "Montant reçu", - "error": "Oops, pas de résultats" - }, - "card": { - "title_a": "Tous les programmes", - "heading_a1": "Santé", - "description_a1": "Plus de 30 programmes disponibles", - "heading_a2": "Éducation", - "description_a2": "Plus de 55 programmes disponibles", - - "title_b": "Autres services", - "heading_b1": "Aide", - "description_b1": "Appuyez ici pour obtenir de l'aide", - "heading_b2": "FAQ", - "description_b2": "Appuyez pour en savoir plus", - - "title_c": "Droits", - "heading_c": "", - "description_c": "", - "view_all": "Voir tout" - }, - "programs": { - "title": "All Programs", - "status":"Status", - "program_name": "Program Name", - "actions":"Actions" - } + "main": { + "title": "Bienvenue sur le portail de libre-service", + "description": "Connexion au portail de libre-service" + }, + "about": { + "title": "À propos de nous", + "description": "Ceci est la page À propos" + }, + "programs": { + "name": "Nom du Programme", + "description": "Description", + "state": "État du Programme", + "has_applied": "Statut de Candidature", + "is_portal_form_mapped": "Portail Mappé", + "is_multiple_form_submission": "Soumission de Formulaires Multiple", + "last_application_status": "Statut de la Dernière Candidature", + "error": "Oops, pas de résultats" + }, + "card": { + "title_a": "Tous les programmes", + "heading_a1": "Santé", + "description_a1": "Plus de 30 programmes disponibles", + "heading_a2": "Éducation", + "description_a2": "Plus de 55 programmes disponibles", + "title_b": "Autres services", + "heading_b1": "Aide", + "description_b1": "Appuyez ici pour obtenir de l'aide", + "heading_b2": "FAQ", + "description_b2": "Appuyez pour en savoir plus", + "title_c": "Droits", + "heading_c": "", + "description_c": "", + "view_all": "Voir tout" + }, + "home": { + "title": "Mes Applications", + "number": "N°", + "enrollment_status": "statut d'inscription", + "program_name": "Nom du Programme", + "total_funds_awaited": "Fonds Totaux En Attente", + "total_funds_received": "Fonds Totaux Reçus" + }, + "lang": { + "language": "French" + } } -} +} \ No newline at end of file diff --git a/src/dictionaries/tl.json b/src/dictionaries/tl.json index 35e3627..cb167ca 100644 --- a/src/dictionaries/tl.json +++ b/src/dictionaries/tl.json @@ -13,17 +13,15 @@ "title": "Tungkol sa Amin", "description": "Ito ay tungkol sa pahina" }, - "home": { - "title": "Aking Mga Aplikasyon", - "number": "Blg.", - "program_name": "Pangalan ng Programa", - "application_id": "Id ng Aplikasyon", - "program_status": "Kalagayan ng Programa", - "application_status": "Kalagayan ng Aplikasyon", - "submiited_on": "Nai-pasa noong", - "entitlement": "Karapatan (sa USD)", - "amount_receieved": "Halaga na Natanggap", - "error": "Ay, walang resulta" + "programs": { + "name": "Pangalan ng Programa", + "description": "Deskripsyon", + "state": "Katayuan ng Programa", + "has_applied": "Katayuan ng Aplikasyon", + "is_portal_form_mapped": "Nakamapa sa Portal", + "is_multiple_form_submission": "Maramihang Pagsusumite ng Form", + "last_application_status": "Katayuan ng Huling Aplikasyon", + "error": "Ay, wala mga resulta" }, "card": { "title_a": "Lahat ng Programa", @@ -43,11 +41,16 @@ "description_c": "", "view_all": "Tingnan ang Lahat" }, - "programs": { - "title": "All Programs", - "status":"Status", - "program_name": "Program Name", - "actions":"Actions" + "home": { + "title": "Aking Mga Aplikasyon", + "number": "Hindi.", + "enrollment_status": "katayuan sa pag-eenroll", + "program_name": "Pangalan ng Programa", + "total_funds_awaited": "Kabuuang Inaasahang Pondo", + "total_funds_received": "Kabuuang Natanggap na Pondo" + }, + "lang": { + "language": "Filipino" } } } diff --git a/src/types/index.ts b/src/types/index.ts index 2ac0f65..47ae310 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -6,23 +6,35 @@ export interface SearchProgramsProps{ } export interface Program { id: number; + name: string; + description: number; + state: string; + has_applied: string; + is_portal_form_mapped: string; + is_multiple_form_submission: number; + last_application_status: number; +} +export interface ProgramDetails { program_name: string; - application_id: number; - program_status: string; - application_status: string; - submitted_on: string; - entitlement: number; - amount_received: number; + enrollment_status: string; + total_funds_awaited: 0; + total_funds_received: 0; } export interface ProgramForm { + program_id:number; id: number; - specific_program_name : string; - application_status:string; - form_json_schema : Record; + schema: { + components: Record[]; + }; + submission_data:{}, + program_name : string; + program_description:string; } + + export interface FilterProps{ program :string; currentPage:number; @@ -30,6 +42,7 @@ export interface FilterProps{ + export interface ProfileFilter{ id:number; } diff --git a/src/utils/index.ts b/src/utils/index.ts index 33949a8..e7cc60a 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,51 +1,60 @@ -import { Program,Profile, FilterProps ,ProfileFilter ,ProgramForm} from '@types'; +import { Program,ProgramForm, FilterProps ,ProfileFilter ,ProgramDetails} from '@types'; +import { prefixBaseApiPath } from './path'; // import { unstable_noStore as noStore } from 'next/cache'; + // const res = await fetch(`http://localhost:8000/programs?program_id=${program}&page=${currentPage}`); -export async function fetchPrograms(filters: FilterProps): Promise { - //await new Promise(resolve=>setTimeout(resolve,3000)) + +export async function fetchProgramDetails(filters: FilterProps): Promise { const { program ,currentPage} = filters - const res = await fetch(`http://localhost:8000/programs?program_name=${program}&page=${currentPage}`); + const res = await fetch(prefixBaseApiPath("/programdetails")); if (!res.ok) { throw new Error('Failed to fetch data') } - + return res.json() - // noStore(); + } -export async function getProgramData (formId: string | null) { - +export async function fetchPrograms(filters: FilterProps): Promise { + const { program ,currentPage} = filters try { - const response = await fetch(`http://localhost:8000/forms?id=${formId}`); // Replace with your API endpoint + const response = await fetch( + prefixBaseApiPath(`/program`) + ); const data = await response.json(); return data; } catch (error) { - console.error('Error fetching program data:', error); - return null; + console.error("Error fetching form data:", error); + return []; } // noStore(); -}; -export async function fetchProgramForms(): Promise { - const res = await fetch('http://localhost:8000/forms'); - if (!res.ok) { - throw new Error('Failed to fetch data'); +} +export async function fetchProgramForm(programId: number): Promise { + try { + const response = await fetch( + prefixBaseApiPath(`/form/${programId}`) + ); + const data = await response.json(); + return data; + } catch (error) { + console.error("Error fetching program data:", error); + return null; } - return res.json(); - // noStore(); } -export async function fetchProfile(filters: ProfileFilter): Promise { - const { id } = filters - const res = await fetch(`http://localhost:8000/profile?id=${id}`) - if (!res.ok) { - - throw new Error('Failed to fetch data') +export async function SubmitForm(programId: number): Promise { + try { + const response = await fetch( + prefixBaseApiPath(`/forms/programid=${programId}/submit`) + ); + const data = await response.json(); + return data; + } catch (error) { + console.error("Error fetching form data:", error); + return null; } - - return res.json() - // noStore(); } diff --git a/src/utils/path.ts b/src/utils/path.ts new file mode 100644 index 0000000..17522d9 --- /dev/null +++ b/src/utils/path.ts @@ -0,0 +1,7 @@ +export function prefixBasePath(path: string) { + return (process.env.NEXT_PUBLIC_BASE_PATH || "") + path; +} + +export function prefixBaseApiPath(path: string) { + return (process.env.NEXT_PUBLIC_BASE_API_PATH || "") + path; +} From ceeb1b5a33e0ff3345d9b1beb9e49811b799d455 Mon Sep 17 00:00:00 2001 From: shivamg9 Date: Fri, 23 Feb 2024 00:12:31 +0530 Subject: [PATCH 02/16] added applications and benefits pages --- .gitignore | 2 +- .pre-commit-config.yaml | 49 ++ src/app/[lang]/Context/store.tsx | 8 +- src/app/[lang]/aboutus/page.tsx | 7 +- src/app/[lang]/applications/page.tsx | 411 +++++++++++++++++ src/app/[lang]/apply/page.tsx | 7 +- src/app/[lang]/benefits/page.tsx | 422 ++++++++++++++++++ src/app/[lang]/components/Card.tsx | 4 +- src/app/[lang]/components/Pagination.tsx | 2 - src/app/[lang]/components/Search.tsx | 2 +- src/app/[lang]/components/SearchBar.tsx | 6 +- src/app/[lang]/components/SearchProgram.tsx | 2 +- src/app/[lang]/components/error.tsx | 2 +- src/app/[lang]/components/index.ts | 2 +- .../[lang]/components/navigation/Footer.tsx | 2 +- .../[lang]/components/navigation/Header.tsx | 6 +- .../navigation/LanguageDropdown.tsx | 6 +- .../components/navigation/ProfileDropdown.tsx | 3 +- src/app/[lang]/contactus/page.tsx | 2 +- src/app/[lang]/error.tsx | 2 +- src/app/[lang]/forms/page.tsx | 15 +- src/app/[lang]/home/page.tsx | 9 +- src/app/[lang]/login/layout.tsx | 2 +- src/app/[lang]/login/loginbox.tsx | 2 +- src/app/[lang]/myprofile/page.tsx | 14 +- src/app/[lang]/not-found.tsx | 2 +- src/app/[lang]/otherpage/page.tsx | 2 +- src/app/[lang]/page.tsx | 1 - src/app/[lang]/programs/page.tsx | 8 +- src/app/[lang]/submission/page.tsx | 11 +- src/commons/styles/globals.css | 2 +- src/constants/index.ts | 2 +- src/dictionaries/en.json | 22 +- src/dictionaries/fr.json | 24 +- src/dictionaries/tl.json | 40 +- src/i18n.config.ts | 4 +- src/lib/dictionary.ts | 2 +- src/types/index.ts | 25 +- src/utils/index.ts | 37 +- tailwind.config.ts | 2 +- 40 files changed, 1067 insertions(+), 106 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 src/app/[lang]/applications/page.tsx create mode 100644 src/app/[lang]/benefits/page.tsx diff --git a/.gitignore b/.gitignore index 1f63d80..1429617 100644 --- a/.gitignore +++ b/.gitignore @@ -42,4 +42,4 @@ yarn-error.log* .vercel # Typescript -*.tsbuildinfo \ No newline at end of file +*.tsbuildinfo diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..336b7e1 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,49 @@ +exclude: | + (?x) + # We don't want to mess with tool-generated files + .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/| + # Maybe reactivate this when all README files include prettier ignore tags? + ^README\.md$| + # Repos using Sphinx to generate docs don't need prettying + ^docs/_templates/.*\.html$| + # You don't usually want a bot to modify your legal texts + (LICENSE.*|COPYING.*) +default_language_version: + python: python3 +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: debug-statements + - id: fix-encoding-pragma + args: ["--remove"] + - id: check-case-conflict + - id: check-docstring-first + - id: check-executables-have-shebangs + - id: check-merge-conflict + - id: check-symlinks + - id: check-toml + - id: check-yaml + args: + - --unsafe + - id: mixed-line-ending + args: ["--fix=lf"] + - repo: https://github.com/asottile/pyupgrade + rev: v3.11.0 + hooks: + - id: pyupgrade + args: + - --py3-plus + - --keep-runtime-typing + - repo: https://github.com/psf/black + rev: 23.9.1 + hooks: + - id: black + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.0.289 + hooks: + - id: ruff + args: + - --fix diff --git a/src/app/[lang]/Context/store.tsx b/src/app/[lang]/Context/store.tsx index 222e092..4565e39 100644 --- a/src/app/[lang]/Context/store.tsx +++ b/src/app/[lang]/Context/store.tsx @@ -7,16 +7,16 @@ import { createContext, useContext, Dispatch, SetStateAction, useState } from "r interface ContextProps { formState: boolean, setFormState: Dispatch>, - + } const GlobalContext = createContext({ formState: false, - setFormState: () => {}, + setFormState: () => {}, }) export const GlobalContextProvider = ({children }: {children: React.ReactNode}) => { const [formState, setFormState] = useState(false); - + return ( {children} @@ -24,4 +24,4 @@ export const GlobalContextProvider = ({children }: {children: React.ReactNode}) ) }; -export const useGlobalContext = () => useContext(GlobalContext); \ No newline at end of file +export const useGlobalContext = () => useContext(GlobalContext); diff --git a/src/app/[lang]/aboutus/page.tsx b/src/app/[lang]/aboutus/page.tsx index 13611ff..06b5c6f 100644 --- a/src/app/[lang]/aboutus/page.tsx +++ b/src/app/[lang]/aboutus/page.tsx @@ -21,16 +21,15 @@ export default async function AboutUs({ Home

    About us

    - +

    {page.about.title}

    {page.about.description}

    - +
    - +
    ) } - diff --git a/src/app/[lang]/applications/page.tsx b/src/app/[lang]/applications/page.tsx new file mode 100644 index 0000000..4b003ed --- /dev/null +++ b/src/app/[lang]/applications/page.tsx @@ -0,0 +1,411 @@ +'use client' +import React from 'react'; +import Link from 'next/link' +import { fetchApplicationDetails } from '@utils' +import Loading from '../loading'; +import { Locale } from '@i18n.config' +import { getDictionary } from '@lib/dictionary' +import { Suspense } from 'react'; +import { Pagination, SearchBar } from '../components'; +import { AuthUtil } from '../components/auth'; +import { useState ,useEffect} from 'react'; +import { useRouter } from 'next/navigation'; +import { ApplicationDetails } from '@types'; +export default async function ApplcnPage({ searchParams, params: { lang } }: { + searchParams?: { + query?: string; + page?: string; + }, + params: { lang: Locale } +}) { + + // const [sortKey, setSortKey] = useState("id"); + // const [sortOrder, setSortOrder] = useState("ascn"); + // type SortKeys = keyof Program; + // type SortOrder = "ascn" | "desc"; + + // function sortData({ + // tableData, + // sortKey, + // reverse, + // }: { + // tableData: Program[]; + // sortKey: SortKeys; + // reverse: boolean; + // }) { + // if (!sortKey) return tableData; + + // const sortedData = programs.sort((a, b) => { + // return a[sortKey] > b[sortKey] ? 1 : -1; + // }); + + // if (reverse) { + // return sortedData.reverse(); + // } + + // return sortedData; + // } + // const sortedData = () => sortData({ tableData: programs, sortKey, reverse: sortOrder === "desc" }); + + const router = useRouter(); + const query = searchParams?.query || ''; + const currentPage = Number(searchParams?.page) || 1; + const applications = await fetchApplicationDetails({ + application: query || "", + currentPage: currentPage, + + }); + + + + const handleApplyClick = (application: ApplicationDetails) => { + router.push(`apply?applicationid=${application.application_id}`); + }; + const handleViewClick = (application: ApplicationDetails) => { + router.push(`submission?applicationId=${application.application_id}`); + + }; + + const isDataEmpty = !Array.isArray(applications) || applications.length < 1 || !applications + + const dictionary = await getDictionary(lang); + if (!dictionary) { + return; + } + const { page } = dictionary; + + + // useEffect(() => { + // const fetchData = async () => { + + + // const storedFormState = localStorage.getItem('formState'); + // if (storedFormState === 'true') { + // setFormState(true); + // } + // }; + + // fetchData(); + + // }, ); + // function SortButton({ + // sortOrder, + // columnKey, + // sortKey, + // onClick, + // }: { + // sortOrder: SortOrder; + // columnKey: SortKeys; + // sortKey: SortKeys; + // onClick: MouseEventHandler; + // }) { + // return ( + // + // ); + // } + + // const headers: { key: SortKeys; label: string }[] = [ + // { key: "id", label: "ID" }, + // { key: "program_name", label: "Program Name" }, + // { key: "program_status", label: "Program Status" }, + // { key: "application_status", label: " Application Status" }, + // ]; + + // function changeSort(key: SortKeys) { + // setSortOrder(sortOrder === "ascn" ? "desc" : "ascn"); + + // setSortKey(key); + // } +// return ( +//
    +// +//
    +//
    All Applications
    +//
    +// Home +// +//

    All Applications

    +//
    +//
    +// {!isDataEmpty ? ( +//
    +//
    +//
    +//

    {page.application.title}

    +// +//
    +// }> +//
    +// +// + +// +// {/* {headers.map((row) => { +// return ( +// +// ); +// })} */} +// +// + +// +// +// +// +// +// {applications.map((application, index) => ( +// +// +// +// +// +// +// ))} +// +//
    +//
    +// {row.label}{" "} +// changeSort(row.key)} +// {...{ +// sortOrder, +// sortKey, +// }} +// /> +//
    +//
    +// {page.application.number} +// +//
    +// {page.application.program_name} +// + +// +// +//
    +//
    +//
    +// {page.application.application_id} +// +// +// +//
    +//
    +//
    +// {page.application.application_status} +// +// +// +//
    +//
    {index + 1} +// {application.program_name} +// +// + +// +//
    +// {application.application_status === 'submitted' ? ( +// +// ) : ( +// +// )} +//
    +//
    +//
    +//
    +//
    +// +//
    +//
    +//
    +// ) : ( +//
    +//

    Oops no results

    +//

    Message

    +//
    +// )} + +//
    + +// ) +// } +return ( +
    + + {!isDataEmpty ? ( +
    +
    +
    +

    {page.application.title}

    + +
    + {/*
    +

    {page.application.title}

    + +
    */} + }> +
    + + + + + + + + + + + + {applications.map((application, index) => ( + + + + + {/* */} + + {/* */} + + + ))} + +
    + {page.application.number} + +
    {page.application.program_name} + +
    +
    +
    + {page.application.application_status} + +
    +
    +
    + {page.application.application_id} + +
    +
    +
    + {page.application.date_applied} + +
    +
    {index + 1} + {application.program_name} + + + + + + {application.application_id} + + {program.is_multiple_form_submission} + + {application.date_applied} +
    +
    +
    + {/*
    + +
    */} +
    +
    + ) : ( +
    +

    + Oops no results +

    +

    Message

    +
    + )} +
    +); +}; diff --git a/src/app/[lang]/apply/page.tsx b/src/app/[lang]/apply/page.tsx index 569eed9..1a6d031 100644 --- a/src/app/[lang]/apply/page.tsx +++ b/src/app/[lang]/apply/page.tsx @@ -44,7 +44,7 @@ // }; // const fetchData = async () => { // var formData = await getProgramForm(formId); -// Formio.createForm(document.getElementById('formio'), +// Formio.createForm(document.getElementById('formio'), // formData[0].schema // ).then( function (form) { // const customSubmitButton = document.getElementById('custom-submit-button'); @@ -52,7 +52,7 @@ // customSubmitButton?.addEventListener('click', () => { // form.submit().then((submission:any) =>{ // const submissionData = { -// id: currentId, +// id: currentId, // form_data: submission, // }; // console.log('submission', submission.state) @@ -99,7 +99,7 @@ // }); // setForm(formData); -// //localStorage.setItem('formState', 'true'); +// //localStorage.setItem('formState', 'true'); // }; // fetchData(); // },[currentId] ); @@ -224,4 +224,3 @@ export default function Apply() {
    ); }; - diff --git a/src/app/[lang]/benefits/page.tsx b/src/app/[lang]/benefits/page.tsx new file mode 100644 index 0000000..149d9e9 --- /dev/null +++ b/src/app/[lang]/benefits/page.tsx @@ -0,0 +1,422 @@ +'use client' +import React from 'react'; +import Link from 'next/link' +import { fetchBenefitDetails } from '@utils' +import Loading from '../loading'; +import { Locale } from '@i18n.config' +import { getDictionary } from '@lib/dictionary' +import { Suspense } from 'react'; +import { Pagination, SearchBar } from '../components'; +import { AuthUtil } from '../components/auth'; +import { useState ,useEffect} from 'react'; +import { useRouter } from 'next/navigation'; +import { BenefitDetails } from '@types'; +export default async function BenefPage({ searchParams, params: { lang } }: { + searchParams?: { + query?: string; + page?: string; + }, + params: { lang: Locale } +}) { + + // const [sortKey, setSortKey] = useState("id"); + // const [sortOrder, setSortOrder] = useState("ascn"); + // type SortKeys = keyof Program; + // type SortOrder = "ascn" | "desc"; + + // function sortData({ + // tableData, + // sortKey, + // reverse, + // }: { + // tableData: Program[]; + // sortKey: SortKeys; + // reverse: boolean; + // }) { + // if (!sortKey) return tableData; + + // const sortedData = programs.sort((a, b) => { + // return a[sortKey] > b[sortKey] ? 1 : -1; + // }); + + // if (reverse) { + // return sortedData.reverse(); + // } + + // return sortedData; + // } + // const sortedData = () => sortData({ tableData: programs, sortKey, reverse: sortOrder === "desc" }); + + const router = useRouter(); + const query = searchParams?.query || ''; + const currentPage = Number(searchParams?.page) || 1; + const benefits = await fetchBenefitDetails({ + benefit: query || "", + currentPage: currentPage, + + }); + + + + const handleApplyClick = (benefit: BenefitDetails) => { + router.push(`apply?ern=${benefit.entitlement_reference_number}`); + }; + const handleViewClick = (benefit: BenefitDetails) => { + router.push(`submission?ERN=${benefit.entitlement_reference_number}`); + + }; + + const isDataEmpty = !Array.isArray(benefits) || benefits.length < 1 || !benefits + + const dictionary = await getDictionary(lang); + if (!dictionary) { + return; + } + const { page } = dictionary; + + + // useEffect(() => { + // const fetchData = async () => { + + + // const storedFormState = localStorage.getItem('formState'); + // if (storedFormState === 'true') { + // setFormState(true); + // } + // }; + + // fetchData(); + + // }, ); + // function SortButton({ + // sortOrder, + // columnKey, + // sortKey, + // onClick, + // }: { + // sortOrder: SortOrder; + // columnKey: SortKeys; + // sortKey: SortKeys; + // onClick: MouseEventHandler; + // }) { + // return ( + // + // ); + // } + + // const headers: { key: SortKeys; label: string }[] = [ + // { key: "id", label: "ID" }, + // { key: "program_name", label: "Program Name" }, + // { key: "program_status", label: "Program Status" }, + // { key: "application_status", label: " Application Status" }, + // ]; + + // function changeSort(key: SortKeys) { + // setSortOrder(sortOrder === "ascn" ? "desc" : "ascn"); + + // setSortKey(key); + // } +// return ( +//
    +// +//
    +//
    All Applications
    +//
    +// Home +// +//

    All Applications

    +//
    +//
    +// {!isDataEmpty ? ( +//
    +//
    +//
    +//

    {page.application.title}

    +// +//
    +// }> +//
    +// +// + +// +// {/* {headers.map((row) => { +// return ( +// +// ); +// })} */} +// +// + +// +// +// +// +// +// {applications.map((application, index) => ( +// +// +// +// +// +// +// ))} +// +//
    +//
    +// {row.label}{" "} +// changeSort(row.key)} +// {...{ +// sortOrder, +// sortKey, +// }} +// /> +//
    +//
    +// {page.application.number} +// +//
    +// {page.application.program_name} +// + +// +// +//
    +//
    +//
    +// {page.application.application_id} +// +// +// +//
    +//
    +//
    +// {page.application.application_status} +// +// +// +//
    +//
    {index + 1} +// {application.program_name} +// +// + +// +//
    +// {application.application_status === 'submitted' ? ( +// +// ) : ( +// +// )} +//
    +//
    +//
    +//
    +//
    +// +//
    +//
    +//
    +// ) : ( +//
    +//

    Oops no results

    +//

    Message

    +//
    +// )} + +//
    + +// ) +// } +return ( +
    + + {!isDataEmpty ? ( +
    +
    +
    +

    {page.benefit.title}

    + +
    + {/*
    +

    {page.application.title}

    + +
    */} + }> +
    + + + + + + + + + + + + + {benefits.map((benefit, index) => ( + + + + + {/* */} + + {/* */} + + + + ))} + +
    + {page.benefit.number} + +
    {page.benefit.program_name} + +
    +
    +
    + {page.benefit.enrollment_status} + +
    +
    +
    + {page.benefit.entitlement_reference_number} + +
    +
    +
    + {page.benefit.funds_awaited} + +
    +
    +
    + {page.benefit.funds_received} + +
    +
    {index + 1} + {benefit.program_name} + + + + + + {benefit.entitlement_reference_number ? benefit.entitlement_reference_number : 'Entitlement not approved'} + + {program.is_multiple_form_submission} + + {benefit.funds_received} + + {benefit.funds_awaited} +
    +
    +
    + {/*
    + +
    */} +
    +
    + ) : ( +
    +

    + Oops no results +

    +

    Message

    +
    + )} +
    +); +}; diff --git a/src/app/[lang]/components/Card.tsx b/src/app/[lang]/components/Card.tsx index b1c2d08..e4cc550 100644 --- a/src/app/[lang]/components/Card.tsx +++ b/src/app/[lang]/components/Card.tsx @@ -109,7 +109,7 @@ export default async function Card ({ {page.card.view_all} - +
    @@ -122,4 +122,4 @@ export default async function Card ({
    ) -} \ No newline at end of file +} diff --git a/src/app/[lang]/components/Pagination.tsx b/src/app/[lang]/components/Pagination.tsx index 04fb37c..95a2c8b 100644 --- a/src/app/[lang]/components/Pagination.tsx +++ b/src/app/[lang]/components/Pagination.tsx @@ -77,5 +77,3 @@ const Pagination = () => { }; export default Pagination; - - diff --git a/src/app/[lang]/components/Search.tsx b/src/app/[lang]/components/Search.tsx index c77a1e0..ce7b6e8 100644 --- a/src/app/[lang]/components/Search.tsx +++ b/src/app/[lang]/components/Search.tsx @@ -37,4 +37,4 @@ function Search() { ) } -export default Search; \ No newline at end of file +export default Search; diff --git a/src/app/[lang]/components/SearchBar.tsx b/src/app/[lang]/components/SearchBar.tsx index 53a2905..5cf2802 100644 --- a/src/app/[lang]/components/SearchBar.tsx +++ b/src/app/[lang]/components/SearchBar.tsx @@ -13,10 +13,10 @@ function SearchBar() { const searchParams = useSearchParams(); const pathname = usePathname(); const { replace } = useRouter(); - + const [program, setProgram] = useState(''); - + const handleSearch = (e: React.FormEvent) => { e.preventDefault(); if (program === '') { @@ -48,4 +48,4 @@ function SearchBar() { ) } -export default SearchBar; \ No newline at end of file +export default SearchBar; diff --git a/src/app/[lang]/components/SearchProgram.tsx b/src/app/[lang]/components/SearchProgram.tsx index 23bb0c0..8967b09 100644 --- a/src/app/[lang]/components/SearchProgram.tsx +++ b/src/app/[lang]/components/SearchProgram.tsx @@ -89,4 +89,4 @@ const SearchProgram = ({ program, setProgram }: SearchProgramsProps) => { ) } -export default SearchProgram \ No newline at end of file +export default SearchProgram diff --git a/src/app/[lang]/components/error.tsx b/src/app/[lang]/components/error.tsx index 2f6bc08..60e75c6 100644 --- a/src/app/[lang]/components/error.tsx +++ b/src/app/[lang]/components/error.tsx @@ -23,4 +23,4 @@ export default function Error({error, reset}: Props) {
    ); -} \ No newline at end of file +} diff --git a/src/app/[lang]/components/index.ts b/src/app/[lang]/components/index.ts index 69e9e60..d2092df 100644 --- a/src/app/[lang]/components/index.ts +++ b/src/app/[lang]/components/index.ts @@ -20,4 +20,4 @@ export { Search, Toast, Pagination -} \ No newline at end of file +} diff --git a/src/app/[lang]/components/navigation/Footer.tsx b/src/app/[lang]/components/navigation/Footer.tsx index 0d57f3b..eeb198e 100644 --- a/src/app/[lang]/components/navigation/Footer.tsx +++ b/src/app/[lang]/components/navigation/Footer.tsx @@ -37,7 +37,7 @@ export default async function Footer({ lang }: { lang: Locale }) { {footer.others}
  • - +

    © 2023 National Social Benefits Portal. All rights reserved. diff --git a/src/app/[lang]/components/navigation/Header.tsx b/src/app/[lang]/components/navigation/Header.tsx index eb8ad16..5a00f70 100644 --- a/src/app/[lang]/components/navigation/Header.tsx +++ b/src/app/[lang]/components/navigation/Header.tsx @@ -20,14 +20,14 @@ export default async function Header({ lang }: { lang: Locale }) {
    Logo - +
    diff --git a/src/app/[lang]/components/navigation/LanguageDropdown.tsx b/src/app/[lang]/components/navigation/LanguageDropdown.tsx index 134ca0a..48a6cd8 100644 --- a/src/app/[lang]/components/navigation/LanguageDropdown.tsx +++ b/src/app/[lang]/components/navigation/LanguageDropdown.tsx @@ -21,7 +21,7 @@ export default function LanguageDropDown() { return 'en'; } }); - + const handleLanguageChange = (locale: 'en' | 'fr' | 'tl') => { setSelectedLanguage(locale); }; @@ -33,13 +33,13 @@ export default function LanguageDropDown() { setSelectedLanguage(storedLanguage as 'en' | 'fr' | 'tl'); } }, []); - + const redirectedPathName = (locale: 'en' | 'fr' | 'tl') => { if (!pathName) return '/'; const segments = pathName.split('/'); segments[1] = locale; return segments.join('/'); - }; + }; const getFlagImage = (locale: 'en' | 'fr' | 'tl') => { const flagImages = { en: 'http://spar.openg2p.my/spar/img/flag_en.png', diff --git a/src/app/[lang]/components/navigation/ProfileDropdown.tsx b/src/app/[lang]/components/navigation/ProfileDropdown.tsx index a9ff153..fe56b78 100644 --- a/src/app/[lang]/components/navigation/ProfileDropdown.tsx +++ b/src/app/[lang]/components/navigation/ProfileDropdown.tsx @@ -59,7 +59,7 @@ export default function ProfileDropDown({ lang }: { lang: Locale }): JSX.Element
    {({ active }) => ( - ); } - diff --git a/src/app/[lang]/contactus/page.tsx b/src/app/[lang]/contactus/page.tsx index 85ab10a..80ab0a5 100644 --- a/src/app/[lang]/contactus/page.tsx +++ b/src/app/[lang]/contactus/page.tsx @@ -21,4 +21,4 @@ function ContactUs() { ) } -export default ContactUs \ No newline at end of file +export default ContactUs diff --git a/src/app/[lang]/error.tsx b/src/app/[lang]/error.tsx index 227c80e..0a0ebd5 100644 --- a/src/app/[lang]/error.tsx +++ b/src/app/[lang]/error.tsx @@ -23,4 +23,4 @@ export default function Error({error, reset}: Props) {
    ); -} \ No newline at end of file +} diff --git a/src/app/[lang]/forms/page.tsx b/src/app/[lang]/forms/page.tsx index 106f22a..d626bae 100644 --- a/src/app/[lang]/forms/page.tsx +++ b/src/app/[lang]/forms/page.tsx @@ -19,9 +19,9 @@ export default function ProgramList({ params: { lang } }: { }; const handleViewClick = (form: ProgramForm) => { router.push(`submission?formId=${form.program_id}`); - + }; - + const [isDataEmpty, setIsDataEmpty] = useState(true); const [page, setPage] = useState(null); const [forms ,setForms] =useState([]) @@ -41,12 +41,12 @@ export default function ProgramList({ params: { lang } }: { setFormState(true); } }; - - fetchData(); + + fetchData(); }, [lang]); return ( - +
    All Programs
    @@ -165,9 +165,6 @@ export default function ProgramList({ params: { lang } }: {
    )}
    - + ) } - - - diff --git a/src/app/[lang]/home/page.tsx b/src/app/[lang]/home/page.tsx index d2d5d95..3ade08a 100644 --- a/src/app/[lang]/home/page.tsx +++ b/src/app/[lang]/home/page.tsx @@ -86,7 +86,7 @@ export default async function Page({ searchParams, params: { lang } }: { // setSortKey(key); // } - + const query = searchParams?.query || ''; const currentPage = Number(searchParams?.page) || 1; @@ -94,8 +94,8 @@ export default async function Page({ searchParams, params: { lang } }: { program: query || "", currentPage: currentPage, }); - - + + const isDataEmpty = !Array.isArray(programs) || programs.length < 1 || !programs const dictionary = await getDictionary(lang); if (!dictionary) { @@ -233,6 +233,3 @@ export default async function Page({ searchParams, params: { lang } }: {
    ); }; - - - diff --git a/src/app/[lang]/login/layout.tsx b/src/app/[lang]/login/layout.tsx index cf7bc20..44e6fa1 100644 --- a/src/app/[lang]/login/layout.tsx +++ b/src/app/[lang]/login/layout.tsx @@ -29,4 +29,4 @@ export default function RootLayout({ ) -} \ No newline at end of file +} diff --git a/src/app/[lang]/login/loginbox.tsx b/src/app/[lang]/login/loginbox.tsx index 9871d2c..a2b19be 100644 --- a/src/app/[lang]/login/loginbox.tsx +++ b/src/app/[lang]/login/loginbox.tsx @@ -55,7 +55,7 @@ export default function LoginBox() {
    Reset Password
    - +
    diff --git a/src/app/[lang]/myprofile/page.tsx b/src/app/[lang]/myprofile/page.tsx index 0cc8959..78c2375 100644 --- a/src/app/[lang]/myprofile/page.tsx +++ b/src/app/[lang]/myprofile/page.tsx @@ -19,9 +19,9 @@ export default async function Profile({ Formio.use(tailwind); Templates.framework = "tailwind"; let currentId = 72; - - + + const [anchorEl, setAnchorEl] = useState(null); const open = Boolean(anchorEl); @@ -48,19 +48,19 @@ export default async function Profile({
    -
    Name
    +
    Name
    {authContext.profile ? authContext.profile.name : ""} -
    Last Name
    +
    Last Name
    {authContext.profile ? authContext.profile.middle_name : ""}
    Gender:
    {authContext.profile ? authContext.profile.gender : ""} -
    Birthdate:
    +
    Birthdate:
    {authContext.profile ? authContext.profile.birthdate : ""}
    Email:
    {authContext.profile ? authContext.profile.email : ""} -
    Phone:
    +
    Phone:
    {authContext.profile ? authContext.profile.phone_number : ""} -
    +
    ) diff --git a/src/app/[lang]/not-found.tsx b/src/app/[lang]/not-found.tsx index a3b20b2..b7d83ec 100644 --- a/src/app/[lang]/not-found.tsx +++ b/src/app/[lang]/not-found.tsx @@ -14,4 +14,4 @@ export default function NotFound() { ) -} \ No newline at end of file +} diff --git a/src/app/[lang]/otherpage/page.tsx b/src/app/[lang]/otherpage/page.tsx index fb014d4..c2b3724 100644 --- a/src/app/[lang]/otherpage/page.tsx +++ b/src/app/[lang]/otherpage/page.tsx @@ -245,4 +245,4 @@ function Others() { ) } -export default Others \ No newline at end of file +export default Others diff --git a/src/app/[lang]/page.tsx b/src/app/[lang]/page.tsx index 44fc62b..9003d94 100644 --- a/src/app/[lang]/page.tsx +++ b/src/app/[lang]/page.tsx @@ -25,4 +25,3 @@ export default async function page({ ) } - diff --git a/src/app/[lang]/programs/page.tsx b/src/app/[lang]/programs/page.tsx index 6085d2f..4272d85 100644 --- a/src/app/[lang]/programs/page.tsx +++ b/src/app/[lang]/programs/page.tsx @@ -23,7 +23,7 @@ export default async function ProgrmPage({ searchParams, params: { lang } }: { // const [sortOrder, setSortOrder] = useState("ascn"); // type SortKeys = keyof Program; // type SortOrder = "ascn" | "desc"; - + // function sortData({ // tableData, // sortKey, @@ -56,7 +56,7 @@ export default async function ProgrmPage({ searchParams, params: { lang } }: { }); - + const handleApplyClick = (program: Program) => { router.push(`apply?programid=${program.id}`); }; @@ -76,8 +76,8 @@ export default async function ProgrmPage({ searchParams, params: { lang } }: { // useEffect(() => { // const fetchData = async () => { - - + + // const storedFormState = localStorage.getItem('formState'); // if (storedFormState === 'true') { // setFormState(true); diff --git a/src/app/[lang]/submission/page.tsx b/src/app/[lang]/submission/page.tsx index 851847b..c3ba7f7 100644 --- a/src/app/[lang]/submission/page.tsx +++ b/src/app/[lang]/submission/page.tsx @@ -21,7 +21,7 @@ export default function Submission() { setIsToastVisible(false); }; return ( - +
    Program Submission
    @@ -33,7 +33,7 @@ export default function Submission() {

    Program Submission

    - +
    Thank you. Your application has been submitted successfully. @@ -90,10 +90,3 @@ export default function Submission() {
    ); }; - - - - - - - diff --git a/src/commons/styles/globals.css b/src/commons/styles/globals.css index 0f2d9c7..a854135 100644 --- a/src/commons/styles/globals.css +++ b/src/commons/styles/globals.css @@ -12,7 +12,7 @@ html,body{ overflow-x: hidden; margin: 0; width:100%; - + } /* @media (min-width: 1024px) { footer { diff --git a/src/constants/index.ts b/src/constants/index.ts index 718b9a0..1c3a5b2 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -3,4 +3,4 @@ export const programs = [ "p-2", "p-3", "p-4", -]; \ No newline at end of file +]; diff --git a/src/dictionaries/en.json b/src/dictionaries/en.json index a502127..b87c982 100644 --- a/src/dictionaries/en.json +++ b/src/dictionaries/en.json @@ -39,16 +39,34 @@ "title_c": "Entitlements", "heading_c": "", "description_c": "", - "view_all": "View all" + "view_all": "View all", + "application": "Application" }, "home": { - "title": "My Applications", + "title": "My Dashboard", "number": "No.", "enrollment_status":"Status", "program_name": "Program Name", "total_funds_awaited":"Total Funds Awaited", "total_funds_received": "Total Funds Received" }, + "application": { + "title": "My Application", + "number": "No.", + "program_name": "Program Name", + "application_id": "Application ID", + "date_applied": "Date Applied", + "application_status": "Application Status" + }, + "benefit": { + "title": "My Benefits", + "number": "No.", + "program_name": "Program Name", + "enrollment_status": "Enrollment Status", + "funds_awaited": "Funds Awaited", + "funds_received": "Funds Received", + "entitlement_reference_number": "Entitlement Reference Number" + }, "lang": { "language": "English" } diff --git a/src/dictionaries/fr.json b/src/dictionaries/fr.json index 0cb923c..0fcd45c 100644 --- a/src/dictionaries/fr.json +++ b/src/dictionaries/fr.json @@ -37,18 +37,36 @@ "title_c": "Droits", "heading_c": "", "description_c": "", - "view_all": "Voir tout" + "view_all": "Voir tout", + "application": "Application" }, "home": { - "title": "Mes Applications", + "title": "Mon Tableau de Bord", "number": "N°", "enrollment_status": "statut d'inscription", "program_name": "Nom du Programme", "total_funds_awaited": "Fonds Totaux En Attente", "total_funds_received": "Fonds Totaux Reçus" }, + "application": { + "title": "Ma Candidature", + "number": "N°", + "program_name": "Nom du Programme", + "application_id": "ID de Candidature", + "date_applied": "Date de Candidature", + "application_status": "Statut de la Candidature" + }, + "benefit": { + "title": "Mes Avantages", + "number": "N°", + "program_name": "Nom du Programme", + "enrollment_status": "Statut d'Inscription", + "funds_awaited": "Fonds en Attente", + "funds_received": "Fonds Reçus", + "entitlement_reference_number": "Numéro de Référence du Droit" + }, "lang": { "language": "French" } } -} \ No newline at end of file +} diff --git a/src/dictionaries/tl.json b/src/dictionaries/tl.json index cb167ca..15a4136 100644 --- a/src/dictionaries/tl.json +++ b/src/dictionaries/tl.json @@ -14,14 +14,14 @@ "description": "Ito ay tungkol sa pahina" }, "programs": { - "name": "Pangalan ng Programa", - "description": "Deskripsyon", - "state": "Katayuan ng Programa", - "has_applied": "Katayuan ng Aplikasyon", - "is_portal_form_mapped": "Nakamapa sa Portal", - "is_multiple_form_submission": "Maramihang Pagsusumite ng Form", - "last_application_status": "Katayuan ng Huling Aplikasyon", - "error": "Ay, wala mga resulta" + "name": "Pangalan ng Programa", + "description": "Deskripsyon", + "state": "Katayuan ng Programa", + "has_applied": "Katayuan ng Aplikasyon", + "is_portal_form_mapped": "Nakamapa sa Portal", + "is_multiple_form_submission": "Maramihang Pagsusumite ng Form", + "last_application_status": "Katayuan ng Huling Aplikasyon", + "error": "Ay, wala mga resulta" }, "card": { "title_a": "Lahat ng Programa", @@ -39,16 +39,34 @@ "title_c": "Karapatan", "heading_c": "", "description_c": "", - "view_all": "Tingnan ang Lahat" + "view_all": "Tingnan ang Lahat", + "application": "Application" }, "home": { - "title": "Aking Mga Aplikasyon", - "number": "Hindi.", + "title": "Aking Dashboard", + "number": "Blg.", "enrollment_status": "katayuan sa pag-eenroll", "program_name": "Pangalan ng Programa", "total_funds_awaited": "Kabuuang Inaasahang Pondo", "total_funds_received": "Kabuuang Natanggap na Pondo" }, + "application": { + "title": "Aking Aplikasyon", + "number": "Blg.", + "program_name": "Pangalan ng Programa", + "application_id": "ID ng Aplikasyon", + "date_applied": "Petsa ng Aplikasyon", + "application_status": "Katayuan ng Aplikasyon" + }, + "benefit": { + "title": "Aking Mga Benepisyo", + "number": "Blg.", + "program_name": "Pangalan ng Programa", + "enrollment_status": "Katayuan ng Pagpaparehistro", + "funds_awaited": "Mga Pondong Hinihintay", + "funds_received": "Mga Pondong Natanggap", + "entitlement_reference_number": "Numero ng Sanggunian sa Karapatan" + }, "lang": { "language": "Filipino" } diff --git a/src/i18n.config.ts b/src/i18n.config.ts index eaa39ae..a511288 100644 --- a/src/i18n.config.ts +++ b/src/i18n.config.ts @@ -2,5 +2,5 @@ export const i18n = { defaultLocale: 'en', locales: ['en', 'tl','fr'] } as const - - export type Locale = (typeof i18n)['locales'][number] \ No newline at end of file + + export type Locale = (typeof i18n)['locales'][number] diff --git a/src/lib/dictionary.ts b/src/lib/dictionary.ts index f647b83..b9d88f4 100644 --- a/src/lib/dictionary.ts +++ b/src/lib/dictionary.ts @@ -13,6 +13,6 @@ export const getDictionary = async (locale: Locale) => { } else if (locale === 'fr') { return dictionaries.fr(); } else if (locale === 'tl') { - return dictionaries.tl(); + return dictionaries.tl(); } }; diff --git a/src/types/index.ts b/src/types/index.ts index 47ae310..26b95e4 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -21,6 +21,19 @@ export interface ProgramDetails { total_funds_received: 0; } +export interface ApplicationDetails { + program_name: string; + application_id: number; + date_applied: string; + application_status: string; +} +export interface BenefitDetails { + program_name: string; + enrollment_status: string; + funds_awaited: number; + funds_received: number; + entitlement_reference_number: number; +} export interface ProgramForm { @@ -37,10 +50,18 @@ export interface ProgramForm { export interface FilterProps{ program :string; - currentPage:number; + currentPage:number; } +export interface ApplFilterProps{ + application : string; + currentPage: number; +} +export interface BenefFilterProps{ + benefit : string; + currentPage: number; +} export interface ProfileFilter{ @@ -49,7 +70,7 @@ export interface ProfileFilter{ export interface Profile{ id:number; given_name: string; - family_name: string; + family_name: string; addl_name: string; date_of_birth: string; email: string; diff --git a/src/utils/index.ts b/src/utils/index.ts index e7cc60a..8f1c42c 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,23 +1,46 @@ -import { Program,ProgramForm, FilterProps ,ProfileFilter ,ProgramDetails} from '@types'; +import { Program,ProgramForm, FilterProps, ApplFilterProps, BenefFilterProps, ProfileFilter, ProgramDetails, ApplicationDetails, BenefitDetails,} from '@types'; import { prefixBaseApiPath } from './path'; // import { unstable_noStore as noStore } from 'next/cache'; // const res = await fetch(`http://localhost:8000/programs?program_id=${program}&page=${currentPage}`); - -export async function fetchProgramDetails(filters: FilterProps): Promise { - const { program ,currentPage} = filters - const res = await fetch(prefixBaseApiPath("/programdetails")); + export async function fetchProgramDetails(filters: FilterProps): Promise { + const { program ,currentPage} = filters; + const res = await fetch(prefixBaseApiPath(`/programdetails`)); + + if (!res.ok) { + + throw new Error('Failed to fetch data'); + } + + return res.json(); + +} + +export async function fetchApplicationDetails(filters: ApplFilterProps): Promise { + const { application ,currentPage} = filters + const res = await fetch(prefixBaseApiPath("/applicationdetails")); if (!res.ok) { throw new Error('Failed to fetch data') } - + return res.json() - + } +export async function fetchBenefitDetails(filters: BenefFilterProps): Promise { + const { benefit ,currentPage} = filters; + const res = await fetch(prefixBaseApiPath("/benefitdetails")); + if (!res.ok) { + + throw new Error('Failed to fetch data'); + } + + return res.json(); + +} export async function fetchPrograms(filters: FilterProps): Promise { const { program ,currentPage} = filters diff --git a/tailwind.config.ts b/tailwind.config.ts index c24a5e8..2be4491 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -162,7 +162,7 @@ const config: Config = { white: ["2px dotted white", "2px"], black: ["2px dotted black", "2px"] } - + }, plugins: [], } From c34ccde5c0cb27f819c53722349629544b363199 Mon Sep 17 00:00:00 2001 From: shivamg9 Date: Fri, 23 Feb 2024 16:06:55 +0530 Subject: [PATCH 03/16] added applications and benefits links in home --- public/img/applications.png | Bin 0 -> 2176 bytes public/img/benefits.png | Bin 0 -> 5042 bytes src/app/[lang]/components/Card.tsx | 53 +++++++++++++++++++++++++++-- src/dictionaries/en.json | 11 +++--- src/dictionaries/fr.json | 11 +++--- src/dictionaries/tl.json | 12 ++++--- 6 files changed, 71 insertions(+), 16 deletions(-) create mode 100644 public/img/applications.png create mode 100644 public/img/benefits.png diff --git a/public/img/applications.png b/public/img/applications.png new file mode 100644 index 0000000000000000000000000000000000000000..9f45e2862e53bf2199fa5ee7603137757dd5e3aa GIT binary patch literal 2176 zcmV-`2!Hp9P)^nU0oz3B;w-Y%F4>t*4Cb$o~*2_ zYinytN=kBaa+Q^pjEsyjGBQCyLASTJ>|aPD000NKNklYgghh5QZrh5L8OJ zhzdf*yZrzEw*o~bZIa0hDU&@X@25SS?KF>&CUZ+$t*EHWXjHUAP%%0OV*NEpf>AnI zWIT-7oAlVL>OOKf?o;V;YcyDsIi94)tXKDn$nhyXVw1*m5=UElyk;#aQ$FiR57(k0 z0pw14ur}p{C1or z@4H^rsBYnqoM*eT%cAZHno%!;M380_K_W;)iXaiBrulZU*uF3$Ie(G{=|7jY(#iH5 zJHj9@KhV&3!M7v}vdI%w&b!vSBtagNn%te#ssur{b&e$2FpUXev26ANrd1aXkaI!CX_M|}WO&q@@9D8CQw~1LV9D`CI6AMV2V^9j@ z+5*Db084?)tIpv`?;Lw_PpyrKqf1NpA0@Yqzq)?VU_9UbZ`=5mc5zR+wiJ-OaJ|Y8 z$V~HvaBV3d6~{j-Hc!L5dtKd-r*KexF=0J<_W~g5U!ypN0F&iY?Pu!=KEc%&>?X|*uTSERAxCZ@ax)?R-gIULWnS{(PTektB!zlv8fF3zy@2l5F%e66om zONGQ=5F3)5RVR7`fevP0x9UE?xW7LT7&bk}&Jm;o{@^ox#OV!O6)p%Y!!T9MfC2jh zfhC^IHT|Fi2=tSU)uZ6o=Luv!TtP$m`(lb;WCOVY9~91i_h0GWMi_FCyPcS+oV zjKSk#W~sV7ttK8^-HGWB*1cw}COZ(AytBEWr=|Z)koC|I!7epm6uI}*J+CH-bkc(# zkhaauEj1oe7nPo}K-4xridH^AwmL6Fqr69}a_^ykBsdp*15 z!TBKCyrD@e%1kN1zm4J8QXVEdtvr<(J)L9yAScI*4Pu>xHSuyj89ED3TL>=5h{VB6 zm7vwtAeF=gA(o=EqQLkx1R+^2$SVzm6H^(X{ReQ}_zt( z(L1Pd0WJu&-;bPNz&obYG(H#PnFvBHyEizuK$Qv+E{MZ+QPDjSO*y^5Ky39OdyP&0Kv*ESb8GDA2nqyuZq3n{pg_<52mvHRV@nQsA_QdC_aH2QjRwR!4n;b4kXj2a zPXp^faOc(~0&WGFd%;NTn+vvcO8`M1Cazj(@4Z)sCZ^m9R;?hG9v7Mh+I#QCcWwzF zc&yA(<|7C2#FXQ41@_54yMDhpU(e>rIwNIn`5=u8Ed&|3rh{cc&@($z=L#uN5M$r< zpWKUaBtdZJ_6;|3lq3k6nEEEvO9+Bkt1fpUwLHjyobBAI5(7c1E)!~VlNbo<+*V5) z5J`bxRhJIVttuf9wCa*rDj^1f?%l~nkTM`>X{U>Gt4an0ogoF;B({zJ8Jw?4tyl}I zgJm3hVRx*kH9#g+OKOnZ?M;iW%ecA^s@=@KsOw7`&H?cje5lkfBe^M9+ThG&1zGzE zYt@pmr9Wj@++p;ma6UQSKG_$3-X1Zj>^2U`sa5M$XC6jeW*uLR`O_;8s>O2-5r^MR z;k-WUmFUkT>?1(S0OoEJlGPr>@KJpi_*te4c(=;CPvC6Y)tUwka)`d?r60S7`z~18 zuusPY4f3r{>g?pZE6(ly@1J-CS;KEmYeJg+&mvDtN-6FFJO?Dt;uKE=EO2GMM(A1VnH5c3Kcq*iG?u0<5V)Cm}*5@F1*Yk@fUom~uMdxvWSy`##( zPm_9}x}9GhBy(%Ef=8bzrM*jCox8+AVQ6Nc6zC)ZrKG7onkWI{+Exh)22SbEH-kSe z0pi-R3j(0W2E!X;sf`54)UAte3jx#4+x?N5^}NJEMs5u_nSkO{X-4Fyv? z1mcT|^4jMq+MX#W!WRgyZ7pz4^`O`mtEQk5rZtj2p0000OGZvATSsN0s{}|Vg?ip zA|WKAqM<_2&`=@}*AWN=9X&lAB_)EMmKvzj0-p%_8@z1vOk6h*h?}A}x%dQxgoNl= z#U#a$XkMg{0GO1Nl;Ro%6BQMc5EmOaQa}ia6hRA!ppi&nw6G8oc!Y(K5)#ONiiC(T z(1S!u2nzsjpj@%n`Z*0Ln_P#90l-It^F zMUMTDc%+UiE~yA-t3~^=p8#K!sx~?WmdDuTCXe7O6k&wkoTq%=&|Wq^=|GxZK6_|= zA*trO8dIlKJreVE(&C70$#|fdtXNa6$VrRLK4}bDY+SGoD}I)m6=>^6l8O<#6oczv z+u!2B22kUc2la9*ET&Qh8V7*tASQbCm-B3O#?Wedb7H)NHe!62B7j;n;!Zu(Hs*wL z!M@Z7WF<7=R!rz-(cIM-!XSyz$d*YFYnGLi*C)R0MM0gV!7m3n?!+8(71E*!8g{Dg zJ4)t-?YSUjA0(X7s!r!j_NmxNN7^Uh6Y8z=i=Tz&*ryc}0gBR+N`UFB6#Fl$*Xc|b zt0&ZHoR4CVx>)=fjo6NQKj?NsYxtECh2LX=8lXdKnwvZ7q3uYFzi|Mv7?3_6RG*L3 zeN{(2hF0$fr>ghc>Kxv}2=QYaH{)ivFNY+=o zoL!;BMy1QU&pB%R;&4eugar!}4P2uWM{i{XJ$7YAq(iyiMlmO;+5RAsiWa3`OVtQ; zqCuevXDhgtCm%fNR9H@UKh*wJn)A5NvFUkAwnFx8fBkH9gj>rqq zfj<(=2JoF>vPol2ZC^@>n(eo{l9HG=+iaVnouhZ+Rn~6%=9fE>JKldw$kYF1skU+4 zD)uxvcC>U88QaI$&mPi>NDWo^;SONLFwOR{FDLzTjrr~j5{T=rd3yhw1x*1CRAHH3 zi$)@11b0J915U-P!CzpbJ6iPrIef={uw%b*!G?WWfei=`V3*H3jg79T`VuX7@((b= zx#j`F7yvHd7-QP=b`GiuSFGsTSG!rSvZGNln&u{+k@h9$B}UH_@61P;p_^u!o6x#VH+P?^Gy97_i2ayz1!%UT9Tk}^N_j?iF zB^$T7x>rlPw;Xj@czr_WAKI$aqzitTklW0FGYuZK>W|LXGehv=+_;d+8PU)EB{SY> zT$_%7ZM|8D=xA%r7)w9UIrT8`rP}Db9#=@g>BeuNbbk+M!u+3*1B^Yt*!d{eR*Ssf zRu`3AR1F3eKG?o8TF5EaIt|;E%G9)k;42bQTtnAD>T%YfP1RBN%+vcxZPphcjs0@V zj}~#8M(p*+dM#_uZjB*R1=d7w9f^M5`IWjlg+9K!#biP|VydX+<}>{H+q};EJ&_;7 z*-lQO5Shp5iAtX*KgAf!{Df8*@Qk^89ahezO!mif6gclXrdUCef=SxO<2_FLaa%L(Nsc8vP zoLb4S(ATmW^DX^NYg(t?RrIX3r*idsUDTZB^kt!A~?@<+bX~2S3RS$ zk-!n=52JPeiXP{r^wK%F2U)`n&j0xR?5HP_f-T~N6#hxhxY5--s;+X5;XFnWv=hKi z$+ypVU|!Y~9!WvREGi~Kl5lLoVdUji=1Q@D`RNh?i#nTUeu;%&;fgQ2}$HvfA4fR4X9eS6wHPaT21#sP?u0l_uDRGWZ zS%F*KKkmbA)g&nmK5r^Tj4c0H|0!Ebch;etk~`h-wCXSXpjjuYq)V1hwV@QJ;pISB zhQ5=<6(eDm7l`Ezc{|Gbv^iq0Ec9h2*;0VZgyvnvCPans{lQjJTFJa%rNc9Fb6$1X z5k}2Oc?-7i&%%|KH+K}QVAJE#Y><8S3lPO|YtJ)zq&&6`_H`<*nK5uGu8_KAv`%A; zAQhvprw{JTlvlH_Quf-B%jo#KqQ^8Cz?#^>bJktK!g(ieg0qRi!5+8=AI3IMGNoJd zU4T+Xfgz1uz*ybRP^=W!ah&|x`YU@(CzuL?Umd1-Nm@np4&t;2`W913!*u7}eFn`eS=#vkt)B$%2r(iY*m zf6)$$R{nBcIV(7?u_uaBj_3n^swK9cU#06b>&C=l%O9pEVZuU!%TU!lwg-OSDxKYb z-L`|1)DTuYYCdVESm}DYICwu(oumV6bc!y^sL$!~AX5m4MX|Z!nJ4Z|&E(R2ARxg8 zq@tYs;_6IkMR(>pJHW9Bnw(?4sIFFl<4na>7_^Wkq5AOai8(w)%)-$e=!VF~R<3L}BH% z%3@wEmUP+SXm~z82>z1}`T94w2<(+S)8Mp|5gfFhzutMvpQx6ol)^22--3UEJ|-jT zjip*pnBK#W!Ovs==o&cX+$A;IG%WruCAoO|V7oagnK+2gvOUwXgz!7HbCFR?zy-)Y zY=vldruyqNj1UT$!frRDfAaMr+catYKO;4u#U8Q0VHXjBPG8k zOvHuYdL0!{(vb4212VEETUlM1E3pzrrOZcV@TQ4P*++ePdG6XF^LPfc!Sm^^tf>cs z%ofR39<3SUL=M}f#H)=TeY~39LDSuwn^n}gcbF6%dunG+eAUE4yHIS0%*5YEJzY(% z+iy1X{{FdXw~+7IIo=%-KKsK&v#4!1{)1+GYu%ddmQ{FiPLi!4t6RjWtvrf!LX1}i zW^^d-NU_o!yYcw-YTt*mWlrgcnIre1AaFBP3UvFK%I3*`!KY(9Sf+qQYNMJZ%s88#asI;{h2=%2TJlFyQZTT@8ECO7N~@ z8SOtj`Y4(GSD~*18T?yMcxQa-yX7k9<)q;!J|%k=6)MCh4JeEARad)P1Mi8AWRmNB zIfBdyRH|s7Z-Vqi?(S6SoDzOckC8DCpHhYnvYy>{K;r|Mk13qckLj?5-uC>X{ zY5AYc00%qewd`wo!1ndbLfaakWNn+I4#1pJ69`a|kt{c~3-BQW-zJdopDA}tqt2U7yl3rZLcl@{D{w26aWh6HHxSiXkc33VX2?t9dcBZl zJk$v?GahDtRSh@v8bWpLqi@7?&Mr!P&+V{sKdBY{qiERv(fAYK4YBY@Huh9lesRH9 z+|9{_z>qIx5HZ?I;mlDb~hmb9BX00mk(CSTZ^VQa;6)lIuK{{NCrtFEM zlvO|Iz|}bypn`J+{UD-l2Z^eUYKGAz%?l8!j{Z5BqhTg@_0pA6b@@{hS3;wXLX$_E zmU^CkUwl$sIbiq9Mkw5u>IPgSd(;~zR71<*r*s6qk$k!$1+makIA3u>-;oP6u8ol7IRgEzxE4LM7iJUJg z0`_>$PsQK6=F(pY-WMnHFDVy%B>W9uA?;|oz95T(B~0C^qvk2Qo+S2urRi^;aZypO z`v6=ye2QMMFQr#7^2RLrQz9NmO zNH!pkn8VG4_!|czHkBEUTBZV7YuIYzx7x1dudelHI<&K5iA$`mF)w(^eoL6W0G*Oc z$t~7Y53Cua*N)90hFZwGuv_up{0hQZ-K#VzKpvaT?kIs9tT05D5Y4ohmH)nl`c>$s zZ`V=cXE3q)?)H>--Zy-N7o&aC%o`68;ynxb=$ggO6Ri|CLC3T0s@>mqN5ez&AnZ+d4$8UHty!bI^?mOnyVK`GF6 zy3`L}@T{ceK{Dyu?h!O8K15Nuik#a6Qe}O6U@}3 zTYZa@d|0#0lwv44T(3U5Q&x?1Q>pfwA*k8)>WH}jhcZc5xG4io-iZdX6 z(d5qaHO{fBbB|3F+!(6euk-3B)3oHu1^e-y8t5F*s(m&>k=f%`jK4*6hLxJvrY8Q4WvCD^Ws%b`&gkI($hq3=gI*Edg_vV%U6PrBP@Fo*V|Hs9I60jv@ z=FD>kYnPBdl^wjNd}NUNbIf|rC*;RBi+Q2DQ^yb{KT~qj!SVfYQage zES7HD2%0C)BnsJ=J=Uu2(%S<^!3DH2fw zd6IlrelY(&<}yLSAArwh?uT3k`3AZ;Rc{Z>Wl-||g$7pP3m6DadigJtCES1)_`=EI zU-_vRHCt8Vg3SP6x>N!bh;M!i65s6G`8 jp$Jvd29qMRL5hkX-v4~T^)O1>R8+-b{$XMM7gPTR1jZ}< literal 0 HcmV?d00001 diff --git a/src/app/[lang]/components/Card.tsx b/src/app/[lang]/components/Card.tsx index e4cc550..3413ae9 100644 --- a/src/app/[lang]/components/Card.tsx +++ b/src/app/[lang]/components/Card.tsx @@ -112,13 +112,62 @@ export default async function Card ({
    -
    + +
    {page.card.title_c}
    -
    +
    +
    +
      +
    • +
      +
      + medical +
      +
      + + {page.card.heading_c1} + +

      + {page.card.description_c1} +

      +
      +
      +
    • +
    • +
      +
      + school +
      +
      + + {page.card.heading_c2} + +

      + {page.card.description_c2} +

      +
      +
      +
    • +
    +
    + + {/*
    +
    +
    {page.card.title_c}
    + +
    +
    */} + {/* + {page.card.applications} + + + {page.card.benefits} + */} + {/*
    */}
    ) diff --git a/src/dictionaries/en.json b/src/dictionaries/en.json index b87c982..9267712 100644 --- a/src/dictionaries/en.json +++ b/src/dictionaries/en.json @@ -37,10 +37,13 @@ "description_b2": "Tap to know more", "title_c": "Entitlements", - "heading_c": "", - "description_c": "", - "view_all": "View all", - "application": "Application" + "heading_c1": "Applications", + "description_c1": "Tap to view your Applications", + "heading_c2": "Benefits", + "description_c2": "Tap to view your Benefits", + + "view_all": "View all" + }, "home": { "title": "My Dashboard", diff --git a/src/dictionaries/fr.json b/src/dictionaries/fr.json index 0fcd45c..b76b679 100644 --- a/src/dictionaries/fr.json +++ b/src/dictionaries/fr.json @@ -34,11 +34,12 @@ "description_b1": "Appuyez ici pour obtenir de l'aide", "heading_b2": "FAQ", "description_b2": "Appuyez pour en savoir plus", - "title_c": "Droits", - "heading_c": "", - "description_c": "", - "view_all": "Voir tout", - "application": "Application" + "title_c": "Entitlements", + "heading_c1": "Applications", + "description_c1": "Tap to view your Applications", + "heading_c2": "Benefits", + "description_c2": "Tap to view your Benefits", + "view_all": "View all" }, "home": { "title": "Mon Tableau de Bord", diff --git a/src/dictionaries/tl.json b/src/dictionaries/tl.json index 15a4136..61d710f 100644 --- a/src/dictionaries/tl.json +++ b/src/dictionaries/tl.json @@ -36,11 +36,13 @@ "heading_b2": "Mga Katanungan (FAQ)", "description_b2": "Pindutin upang malaman pa ang higit", - "title_c": "Karapatan", - "heading_c": "", - "description_c": "", - "view_all": "Tingnan ang Lahat", - "application": "Application" + "title_c": "Entitlements", + "heading_c1": "Applications", + "description_c1": "Tap to view your Applications", + "heading_c2": "Benefits", + "description_c2": "Tap to view your Benefits", + + "view_all": "View all" }, "home": { "title": "Aking Dashboard", From 9655cd556a72c72b479e507c972e914c7370c764 Mon Sep 17 00:00:00 2001 From: shivamg9 Date: Mon, 26 Feb 2024 23:56:26 +0530 Subject: [PATCH 04/16] added URL in home and modified all program page --- .../[lang]/components/navigation/Footer.tsx | 2 +- .../[lang]/components/navigation/Header.tsx | 2 +- src/app/[lang]/programs/page.tsx | 35 +++++++++---------- src/dictionaries/en.json | 12 +++---- src/dictionaries/fr.json | 4 +-- src/dictionaries/tl.json | 4 +-- src/types/index.ts | 4 +-- 7 files changed, 30 insertions(+), 33 deletions(-) diff --git a/src/app/[lang]/components/navigation/Footer.tsx b/src/app/[lang]/components/navigation/Footer.tsx index eeb198e..56fe27d 100644 --- a/src/app/[lang]/components/navigation/Footer.tsx +++ b/src/app/[lang]/components/navigation/Footer.tsx @@ -17,7 +17,7 @@ export default async function Footer({ lang }: { lang: Locale }) {