diff --git a/package-lock.json b/package-lock.json index a33949a01c..2717c114a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "talawa-admin", "version": "3.0.0", "dependencies": { "@apollo/client": "^3.4.0-beta.19", @@ -32,7 +33,7 @@ "history": "^5.3.0", "i18next": "^21.8.14", "i18next-browser-languagedetector": "^8.0.0", - "i18next-http-backend": "^1.4.1", + "i18next-http-backend": "^2.5.2", "inquirer": "^8.0.0", "js-cookie": "^3.0.1", "markdown-toc": "^1.2.0", @@ -43,19 +44,19 @@ "react-bootstrap": "^2.7.4", "react-datepicker": "^7.2.0", "react-dom": "^17.0.2", - "react-google-recaptcha": "^2.1.0", + "react-google-recaptcha": "^3.1.0", "react-i18next": "^11.18.1", "react-icons": "^5.2.1", "react-infinite-scroll-component": "^6.1.0", "react-multi-carousel": "^2.8.5", "react-redux": "^7.2.5", - "react-router-dom": "^6.23.1", + "react-router-dom": "^6.24.1", "react-scripts": "5.0.1", "react-toastify": "^9.0.3", "redux": "^4.1.1", "redux-thunk": "^2.3.0", "sanitize-html": "^2.13.0", - "typedoc-plugin-markdown": "^4.0.3", + "typedoc-plugin-markdown": "^4.1.2", "typescript": "^4.3.5", "web-vitals": "^1.0.1" }, @@ -95,7 +96,7 @@ "lint-staged": "^15.2.7", "postcss-modules": "^6.0.0", "sass": "^1.77.4", - "tsx": "^4.16.0" + "tsx": "^4.16.2" }, "engines": { "node": ">=20.x" @@ -4982,9 +4983,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", - "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.1.tgz", + "integrity": "sha512-mCOMec4BKd6BRGBZeSnGiIgwsbLGp3yhVqAD8H+PxiRNEHgDpZb8J1TnrSDlg97t0ySKMQJTHCWBCmBpSmkF6Q==", "engines": { "node": ">=14.0.0" } @@ -5107,6 +5108,15 @@ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==" }, + "node_modules/@shikijs/core": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.3.tgz", + "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==", + "peer": true, + "dependencies": { + "@types/hast": "^3.0.4" + } + }, "node_modules/@sinclair/typebox": { "version": "0.24.51", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", @@ -5873,6 +5883,15 @@ "@types/node": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "peer": true, + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/history": { "version": "4.7.11", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", @@ -6237,6 +6256,12 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "peer": true + }, "node_modules/@types/warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", @@ -6871,12 +6896,6 @@ "node": ">=8" } }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "peer": true - }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8845,11 +8864,11 @@ } }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { @@ -13134,11 +13153,11 @@ } }, "node_modules/i18next-http-backend": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-1.4.5.tgz", - "integrity": "sha512-tLuHWuLWl6CmS07o+UB6EcQCaUjrZ1yhdseIN7sfq0u7phsMePJ8pqlGhIAdRDPF/q7ooyo5MID5DRFBCH+x5w==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.2.tgz", + "integrity": "sha512-+K8HbDfrvc1/2X8jpb7RLhI9ZxBDpx3xogYkQwGKlWAUXLSEGXzgdt3EcUjLlBCdMwdQY+K+EUF6oh8oB6rwHw==", "dependencies": { - "cross-fetch": "3.1.5" + "cross-fetch": "4.0.0" } }, "node_modules/iconv-lite": { @@ -15957,12 +15976,6 @@ "node": ">=6" } }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "peer": true - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -16123,6 +16136,15 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "peer": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/lint-staged": { "version": "15.2.7", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", @@ -16849,6 +16871,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "peer": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "peer": true + }, "node_modules/markdown-link": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", @@ -16882,18 +16927,6 @@ "node": ">=0.10.0" } }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "peer": true, - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/math-random": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", @@ -16904,6 +16937,12 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "peer": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -17370,9 +17409,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -19986,6 +20025,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", @@ -20435,12 +20483,12 @@ "dev": true }, "node_modules/react-google-recaptcha": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-2.1.0.tgz", - "integrity": "sha512-K9jr7e0CWFigi8KxC3WPvNqZZ47df2RrMAta6KmRoE4RUi7Ys6NmNjytpXpg4HI/svmQJLKR+PncEPaNJ98DqQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz", + "integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==", "dependencies": { "prop-types": "^15.5.0", - "react-async-script": "^1.1.1" + "react-async-script": "^1.2.0" }, "peerDependencies": { "react": ">=16.4.1" @@ -20570,11 +20618,11 @@ } }, "node_modules/react-router": { - "version": "6.23.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", - "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.1.tgz", + "integrity": "sha512-PTXFXGK2pyXpHzVo3rR9H7ip4lSPZZc0bHG5CARmj65fTT6qG7sTngmb6lcYu1gf3y/8KxORoy9yn59pGpCnpg==", "dependencies": { - "@remix-run/router": "1.16.1" + "@remix-run/router": "1.17.1" }, "engines": { "node": ">=14.0.0" @@ -20584,12 +20632,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.23.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", - "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.1.tgz", + "integrity": "sha512-U19KtXqooqw967Vw0Qcn5cOvrX5Ejo9ORmOtJMzYWtCT4/WOfFLIZGGsVLxcd9UkBO0mSTZtXqhZBsWlHr7+Sg==", "dependencies": { - "@remix-run/router": "1.16.1", - "react-router": "6.23.1" + "@remix-run/router": "1.17.1", + "react-router": "6.24.1" }, "engines": { "node": ">=14.0.0" @@ -22238,15 +22286,13 @@ } }, "node_modules/shiki": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", - "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.3.tgz", + "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==", "peer": true, "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" + "@shikijs/core": "1.10.3", + "@types/hast": "^3.0.4" } }, "node_modules/side-channel": { @@ -23648,9 +23694,9 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/tsx": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.0.tgz", - "integrity": "sha512-MPgN+CuY+4iKxGoJNPv+1pyo5YWZAQ5XfsyobUG+zoKG7IkvCPLZDEyoIb8yLS2FcWci1nlxAqmvPlFWD5AFiQ==", + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.2.tgz", + "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==", "dev": true, "dependencies": { "esbuild": "~0.21.5", @@ -23811,32 +23857,36 @@ } }, "node_modules/typedoc": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.7.tgz", - "integrity": "sha512-m6A6JjQRg39p2ZVRIN3NKXgrN8vzlHhOS+r9ymUYtcUP/TIQPvWSq7YgE5ZjASfv5Vd5BW5xrir6Gm2XNNcOow==", + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.3.tgz", + "integrity": "sha512-6d2Sw9disvvpdk4K7VNjKr5/3hzijtfQVHRthhDqJgnhMHy1wQz4yPMJVKXElvnZhFr0nkzo+GzjXDTRV5yLpg==", "peer": true, "dependencies": { "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.7" + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "shiki": "^1.9.1", + "yaml": "^2.4.5" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 16" + "node": ">= 18" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x" } }, "node_modules/typedoc-plugin-markdown": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.0.3.tgz", - "integrity": "sha512-0tZbeVGGCd4+lpoIX+yHWgUfyaLZCQCgJOpuVdTtOtD3+jKaedJ4sl/tkNaYBPeWVKiyDkSHfGuHkq53jlzIFg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.1.2.tgz", + "integrity": "sha512-jZt8jmQLbmg9jmFQyfJrjLf6ljRwJ5fKMeqmFr0oPXmeX5ZRYYtCe6y/058vDESE/R+TwEvNua6SuG43UBbszw==", + "engines": { + "node": ">= 18" + }, "peerDependencies": { - "typedoc": "0.25.x" + "typedoc": "0.26.x" } }, "node_modules/typedoc/node_modules/brace-expansion": { @@ -23849,9 +23899,9 @@ } }, "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "peer": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -23863,6 +23913,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/typedoc/node_modules/yaml": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -23875,6 +23937,12 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "peer": true + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -24228,18 +24296,6 @@ "node": ">=0.10.0" } }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "peer": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "peer": true - }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -26602,9 +26658,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "@babel/runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", - "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", "requires": { "regenerator-runtime": "^0.14.0" }, @@ -27129,10 +27185,164 @@ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, + "@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "dev": true, + "optional": true + }, "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "dev": true, "optional": true }, @@ -27231,18 +27441,28 @@ "@floating-ui/utils": "^0.2.0" } }, + "@floating-ui/react": { + "version": "0.26.19", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.19.tgz", + "integrity": "sha512-Jk6zITdjjIvjO/VdQFvpRaD3qPwOHH6AoDHxjhpy+oK4KFgaSP871HYWUAPdnLmx1gQ+w/pB312co3tVml+BXA==", + "requires": { + "@floating-ui/react-dom": "^2.1.1", + "@floating-ui/utils": "^0.2.4", + "tabbable": "^6.0.0" + } + }, "@floating-ui/react-dom": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", - "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", "requires": { "@floating-ui/dom": "^1.0.0" } }, "@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.4.tgz", + "integrity": "sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==" }, "@gar/promisify": { "version": "1.1.3", @@ -27692,9 +27912,9 @@ } }, "@mui/core-downloads-tracker": { - "version": "5.15.19", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.19.tgz", - "integrity": "sha512-tCHSi/Tomez9ERynFhZRvFO6n9ATyrPs+2N80DMDzp6xDVirbBjEwhPcE+x7Lj+nwYw0SqFkOxyvMP0irnm55w==" + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.20.tgz", + "integrity": "sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==" }, "@mui/icons-material": { "version": "5.14.0", @@ -27705,16 +27925,16 @@ } }, "@mui/material": { - "version": "5.15.19", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.19.tgz", - "integrity": "sha512-lp5xQBbcRuxNtjpWU0BWZgIrv2XLUz4RJ0RqFXBdESIsKoGCQZ6P3wwU5ZPuj5TjssNiKv9AlM+vHopRxZhvVQ==", + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.20.tgz", + "integrity": "sha512-tVq3l4qoXx/NxUgIx/x3lZiPn/5xDbdTE8VrLczNpfblLYZzlrbxA7kb9mI8NoBF6+w9WE9IrxWnKK5KlPI2bg==", "requires": { "@babel/runtime": "^7.23.9", "@mui/base": "5.0.0-beta.40", - "@mui/core-downloads-tracker": "^5.15.19", - "@mui/system": "^5.15.15", + "@mui/core-downloads-tracker": "^5.15.20", + "@mui/system": "^5.15.20", "@mui/types": "^7.2.14", - "@mui/utils": "^5.15.14", + "@mui/utils": "^5.15.20", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.3", @@ -27731,12 +27951,12 @@ } }, "@mui/private-theming": { - "version": "5.15.14", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.14.tgz", - "integrity": "sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==", + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.20.tgz", + "integrity": "sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.14", + "@mui/utils": "^5.15.20", "prop-types": "^15.8.1" } }, @@ -27752,15 +27972,15 @@ } }, "@mui/system": { - "version": "5.15.15", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.15.tgz", - "integrity": "sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==", + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.20.tgz", + "integrity": "sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==", "requires": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.14", + "@mui/private-theming": "^5.15.20", "@mui/styled-engine": "^5.15.14", "@mui/types": "^7.2.14", - "@mui/utils": "^5.15.14", + "@mui/utils": "^5.15.20", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -27780,9 +28000,9 @@ "requires": {} }, "@mui/utils": { - "version": "5.15.14", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.14.tgz", - "integrity": "sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==", + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.20.tgz", + "integrity": "sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==", "requires": { "@babel/runtime": "^7.23.9", "@types/prop-types": "^15.7.11", @@ -27791,14 +28011,14 @@ } }, "@mui/x-charts": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-7.4.0.tgz", - "integrity": "sha512-W6A0ZJmfXLeAtuml0Yi7gvjxS6aW/2h6uO9PQNuE/rpV0iIEMU5bVfcJZGMVlh0WY+43FEicI1/8n6FzMcfZdg==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-7.8.0.tgz", + "integrity": "sha512-SosaVtx4Ig1nu/loH6Mq4peH5Pq5UvVEnsMfe4G2IEVrMxfwrktWJo+86t9LxiHTERt4wxPKnsqlhkgBIf9ePQ==", "requires": { - "@babel/runtime": "^7.24.0", + "@babel/runtime": "^7.24.7", "@mui/base": "^5.0.0-beta.40", - "@mui/system": "^5.15.14", - "@mui/utils": "^5.15.14", + "@mui/system": "^5.15.20", + "@mui/utils": "^5.15.20", "@react-spring/rafz": "^9.7.3", "@react-spring/web": "^9.7.3", "clsx": "^2.1.1", @@ -28095,9 +28315,9 @@ } }, "@remix-run/router": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.2.tgz", - "integrity": "sha512-+Rnav+CaoTE5QJc4Jcwh5toUpnVLKYbpU6Ys0zqbakqbaLQHeglLVHPfxOiQqdNmUy5C2lXz5dwC6tQNX2JW2Q==" + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.1.tgz", + "integrity": "sha512-mCOMec4BKd6BRGBZeSnGiIgwsbLGp3yhVqAD8H+PxiRNEHgDpZb8J1TnrSDlg97t0ySKMQJTHCWBCmBpSmkF6Q==" }, "@restart/hooks": { "version": "0.4.10", @@ -28184,6 +28404,15 @@ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==" }, + "@shikijs/core": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.3.tgz", + "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==", + "peer": true, + "requires": { + "@types/hast": "^3.0.4" + } + }, "@sinclair/typebox": { "version": "0.24.51", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", @@ -28694,6 +28923,15 @@ "@types/node": "*" } }, + "@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "peer": true, + "requires": { + "@types/unist": "*" + } + }, "@types/history": { "version": "4.7.11", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", @@ -28874,6 +29112,15 @@ "csstype": "^3.0.2" } }, + "@types/react-beautiful-dnd": { + "version": "13.1.8", + "resolved": "https://registry.npmjs.org/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.8.tgz", + "integrity": "sha512-E3TyFsro9pQuK4r8S/OL6G99eq7p8v29sX0PM7oT8Z+PJfZvSQTx4zTQbUJ+QZXioAF0e7TGBEcA1XhYhCweyQ==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, "@types/react-bootstrap": { "version": "0.32.32", "resolved": "https://registry.npmjs.org/@types/react-bootstrap/-/react-bootstrap-0.32.32.tgz", @@ -29048,6 +29295,12 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "peer": true + }, "@types/warning": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", @@ -29469,7 +29722,9 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": {} + "requires": { + "ajv": "^8.0.0" + } }, "ansi-align": { "version": "3.0.1", @@ -29506,12 +29761,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "peer": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -30212,11 +30461,11 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "brotli": { @@ -30956,11 +31205,11 @@ } }, "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "requires": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.12" } }, "cross-spawn": { @@ -30986,6 +31235,14 @@ "postcss-selector-parser": "^6.0.9" } }, + "css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "requires": { + "tiny-invariant": "^1.0.6" + } + }, "css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -31406,6 +31663,7 @@ "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "devOptional": true, "requires": { "@babel/runtime": "^7.21.0" } @@ -32020,33 +32278,34 @@ } }, "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "escalade": { @@ -32984,9 +33243,9 @@ "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "requires": { "to-regex-range": "^5.0.1" } @@ -33399,9 +33658,9 @@ } }, "get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", "dev": true, "requires": { "resolve-pkg-maps": "^1.0.0" @@ -33602,9 +33861,9 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==" + "version": "16.8.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.2.tgz", + "integrity": "sha512-cvVIBILwuoSyD54U4cF/UXDh5yAobhNV/tPygI4lZhgOIJQE/WLWC4waBRb4I6bDVYb3OVx3lfHbaQOEoUD5sg==" }, "graphql-tag": { "version": "2.12.6", @@ -34098,19 +34357,19 @@ } }, "i18next-browser-languagedetector": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.8.tgz", - "integrity": "sha512-Svm+MduCElO0Meqpj1kJAriTC6OhI41VhlT/A0UPjGoPZBhAHIaGE5EfsHlTpgdH09UVX7rcc72pSDDBeKSQQA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.0.tgz", + "integrity": "sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==", "requires": { - "@babel/runtime": "^7.19.0" + "@babel/runtime": "^7.23.2" } }, "i18next-http-backend": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-1.4.5.tgz", - "integrity": "sha512-tLuHWuLWl6CmS07o+UB6EcQCaUjrZ1yhdseIN7sfq0u7phsMePJ8pqlGhIAdRDPF/q7ooyo5MID5DRFBCH+x5w==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.5.2.tgz", + "integrity": "sha512-+K8HbDfrvc1/2X8jpb7RLhI9ZxBDpx3xogYkQwGKlWAUXLSEGXzgdt3EcUjLlBCdMwdQY+K+EUF6oh8oB6rwHw==", "requires": { - "cross-fetch": "3.1.5" + "cross-fetch": "4.0.0" } }, "iconv-lite": { @@ -36159,12 +36418,6 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, - "jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "peer": true - }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -36290,22 +36543,31 @@ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, + "linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "peer": true, + "requires": { + "uc.micro": "^2.0.0" + } + }, "lint-staged": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", - "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", + "version": "15.2.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.7.tgz", + "integrity": "sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==", "dev": true, "requires": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "3.0.0", - "listr2": "8.0.1", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.4", + "execa": "~8.0.1", + "lilconfig": "~3.1.1", + "listr2": "~8.2.1", + "micromatch": "~4.0.7", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.4.2" }, "dependencies": { "chalk": { @@ -36315,9 +36577,9 @@ "dev": true }, "commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true }, "execa": { @@ -36356,9 +36618,9 @@ "dev": true }, "lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true }, "mimic-fn": { @@ -36404,9 +36666,9 @@ "dev": true }, "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true } } @@ -36454,16 +36716,16 @@ } }, "listr2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", - "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", + "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", "dev": true, "requires": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.0.0", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "wrap-ansi": "^9.0.0" }, "dependencies": { @@ -36639,13 +36901,10 @@ }, "dependencies": { "ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", - "dev": true, - "requires": { - "type-fest": "^3.0.0" - } + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true }, "ansi-regex": { "version": "6.0.1", @@ -36704,12 +36963,6 @@ "ansi-regex": "^6.0.1" } }, - "type-fest": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", - "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", - "dev": true - }, "wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", @@ -36803,6 +37056,28 @@ "optional": true, "peer": true }, + "markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "peer": true, + "requires": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "peer": true + } + } + }, "markdown-link": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", @@ -36827,12 +37102,6 @@ "strip-color": "^0.1.0" } }, - "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", - "peer": true - }, "math-random": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", @@ -36843,6 +37112,12 @@ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, + "mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "peer": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -36856,6 +37131,11 @@ "fs-monkey": "^1.0.4" } }, + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, "meow": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", @@ -36913,11 +37193,11 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -37187,9 +37467,9 @@ } }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" }, @@ -38758,9 +39038,9 @@ "dev": true }, "prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==" }, "prettier-linter-helpers": { "version": "1.0.0", @@ -38946,6 +39226,12 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, + "punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "peer": true + }, "pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", @@ -38993,6 +39279,11 @@ "performance-now": "^2.1.0" } }, + "raf-schd": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==" + }, "randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", @@ -39115,6 +39406,20 @@ "prop-types": "^15.5.0" } }, + "react-beautiful-dnd": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz", + "integrity": "sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==", + "requires": { + "@babel/runtime": "^7.9.2", + "css-box-model": "^1.2.0", + "memoize-one": "^5.1.1", + "raf-schd": "^4.0.2", + "react-redux": "^7.2.0", + "redux": "^4.0.4", + "use-memo-one": "^1.1.1" + } + }, "react-bootstrap": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.8.0.tgz", @@ -39135,16 +39440,27 @@ } }, "react-datepicker": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.16.0.tgz", - "integrity": "sha512-hNQ0PAg/LQoVbDUO/RWAdm/RYmPhN3cz7LuQ3hqbs24OSp69QCiKOJRrQ4jk1gv1jNR5oYu8SjjgfDh8q6Q1yw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-7.2.0.tgz", + "integrity": "sha512-Hhs1Fk6/ZqpGGg9QX/JjzvgEJoSFKYCAvRVdBbjxvOjflsXutFprAl/E0ZOm1J+/b/jQqU03WMTTNLcw5nXcuw==", "requires": { - "@popperjs/core": "^2.11.8", - "classnames": "^2.2.6", - "date-fns": "^2.30.0", + "@floating-ui/react": "^0.26.2", + "clsx": "^2.1.0", + "date-fns": "^3.3.1", "prop-types": "^15.7.2", - "react-onclickoutside": "^6.12.2", - "react-popper": "^2.3.0" + "react-onclickoutside": "^6.13.0" + }, + "dependencies": { + "clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" + }, + "date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==" + } } }, "react-dev-utils": { @@ -39240,15 +39556,16 @@ "react-fast-compare": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "dev": true }, "react-google-recaptcha": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-2.1.0.tgz", - "integrity": "sha512-K9jr7e0CWFigi8KxC3WPvNqZZ47df2RrMAta6KmRoE4RUi7Ys6NmNjytpXpg4HI/svmQJLKR+PncEPaNJ98DqQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-google-recaptcha/-/react-google-recaptcha-3.1.0.tgz", + "integrity": "sha512-cYW2/DWas8nEKZGD7SCu9BSuVz8iOcOLHChHyi7upUuVhkpkhYG/6N3KDiTQ3XAiZ2UAZkfvYKMfAHOzBOcGEg==", "requires": { "prop-types": "^15.5.0", - "react-async-script": "^1.1.1" + "react-async-script": "^1.2.0" } }, "react-i18next": { @@ -39299,6 +39616,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", + "dev": true, "requires": { "react-fast-compare": "^3.0.1", "warning": "^4.0.2" @@ -39330,20 +39648,20 @@ "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==" }, "react-router": { - "version": "6.22.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.2.tgz", - "integrity": "sha512-YD3Dzprzpcq+tBMHBS822tCjnWD3iIZbTeSXMY9LPSG541EfoBGyZ3bS25KEnaZjLcmQpw2AVLkFyfgXY8uvcw==", + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.1.tgz", + "integrity": "sha512-PTXFXGK2pyXpHzVo3rR9H7ip4lSPZZc0bHG5CARmj65fTT6qG7sTngmb6lcYu1gf3y/8KxORoy9yn59pGpCnpg==", "requires": { - "@remix-run/router": "1.15.2" + "@remix-run/router": "1.17.1" } }, "react-router-dom": { - "version": "6.22.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.2.tgz", - "integrity": "sha512-WgqxD2qySEIBPZ3w0sHH+PUAiamDeszls9tzqMPBDA1YYVucTBXLU7+gtRfcSnhe92A3glPnvSxK2dhNoAVOIQ==", + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.1.tgz", + "integrity": "sha512-U19KtXqooqw967Vw0Qcn5cOvrX5Ejo9ORmOtJMzYWtCT4/WOfFLIZGGsVLxcd9UkBO0mSTZtXqhZBsWlHr7+Sg==", "requires": { - "@remix-run/router": "1.15.2", - "react-router": "6.22.2" + "@remix-run/router": "1.17.1", + "react-router": "6.24.1" } }, "react-scripts": { @@ -40579,15 +40897,13 @@ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" }, "shiki": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", - "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.3.tgz", + "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==", "peer": true, "requires": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" + "@shikijs/core": "1.10.3", + "@types/hast": "^3.0.4" } }, "side-channel": { @@ -41231,6 +41547,11 @@ "tslib": "^2.6.2" } }, + "tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, "tailwindcss": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", @@ -41477,6 +41798,11 @@ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" }, + "tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -41666,15 +41992,14 @@ } }, "tsx": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.14.0.tgz", - "integrity": "sha512-xHtFaKtHxM9LOklMmJdI3BEnQq/D5F73Of2E1GDrITi9sgoVkvIsrQUTY1G8FlmGtA+awCI4EBlTRRYxkL2sRg==", + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.16.2.tgz", + "integrity": "sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==", "dev": true, "requires": { - "esbuild": "~0.18.20", + "esbuild": "~0.21.5", "fsevents": "~2.3.3", - "get-tsconfig": "^4.7.2", - "source-map-support": "^0.5.21" + "get-tsconfig": "^4.7.5" } }, "tunnel-agent": { @@ -41783,15 +42108,16 @@ } }, "typedoc": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.7.tgz", - "integrity": "sha512-m6A6JjQRg39p2ZVRIN3NKXgrN8vzlHhOS+r9ymUYtcUP/TIQPvWSq7YgE5ZjASfv5Vd5BW5xrir6Gm2XNNcOow==", + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.3.tgz", + "integrity": "sha512-6d2Sw9disvvpdk4K7VNjKr5/3hzijtfQVHRthhDqJgnhMHy1wQz4yPMJVKXElvnZhFr0nkzo+GzjXDTRV5yLpg==", "peer": true, "requires": { "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.7" + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "shiki": "^1.9.1", + "yaml": "^2.4.5" }, "dependencies": { "brace-expansion": { @@ -41804,20 +42130,26 @@ } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "peer": true, "requires": { "brace-expansion": "^2.0.1" } + }, + "yaml": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "peer": true } } }, "typedoc-plugin-markdown": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.0.2.tgz", - "integrity": "sha512-4MV3M+0lsmIaXuDBzeqLYemZqwTQDWQow+o8zdT9hC7KFu06GaFo2uUEbkjE6pgZA9hnkOTtzRVd0R9YJWcH8A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.1.2.tgz", + "integrity": "sha512-jZt8jmQLbmg9jmFQyfJrjLf6ljRwJ5fKMeqmFr0oPXmeX5ZRYYtCe6y/058vDESE/R+TwEvNua6SuG43UBbszw==", "requires": {} }, "typescript": { @@ -41825,6 +42157,12 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, + "uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "peer": true + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -41998,6 +42336,12 @@ "prepend-http": "^2.0.0" } }, + "use-memo-one": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", + "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "requires": {} + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -42088,18 +42432,6 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" }, - "vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "peer": true - }, - "vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "peer": true - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", diff --git a/package.json b/package.json index 5af6cca56d..9d8a23f885 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "history": "^5.3.0", "i18next": "^21.8.14", "i18next-browser-languagedetector": "^8.0.0", - "i18next-http-backend": "^1.4.1", + "i18next-http-backend": "^2.5.2", "inquirer": "^8.0.0", "js-cookie": "^3.0.1", "markdown-toc": "^1.2.0", @@ -41,19 +41,19 @@ "react-bootstrap": "^2.7.4", "react-datepicker": "^7.2.0", "react-dom": "^17.0.2", - "react-google-recaptcha": "^2.1.0", + "react-google-recaptcha": "^3.1.0", "react-i18next": "^11.18.1", "react-icons": "^5.2.1", "react-infinite-scroll-component": "^6.1.0", "react-multi-carousel": "^2.8.5", "react-redux": "^7.2.5", - "react-router-dom": "^6.23.1", + "react-router-dom": "^6.24.1", "react-scripts": "5.0.1", "react-toastify": "^9.0.3", "redux": "^4.1.1", "redux-thunk": "^2.3.0", "sanitize-html": "^2.13.0", - "typedoc-plugin-markdown": "^4.0.3", + "typedoc-plugin-markdown": "^4.1.2", "typescript": "^4.3.5", "web-vitals": "^1.0.1" }, @@ -128,7 +128,7 @@ "lint-staged": "^15.2.7", "postcss-modules": "^6.0.0", "sass": "^1.77.4", - "tsx": "^4.16.0" + "tsx": "^4.16.2" }, "resolutions": { "@apollo/client": "^3.4.0-beta.19", diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 3539eb037e..74e4c38a23 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -76,5 +76,10 @@ "noFiltersApplied": "No filters applied", "manage": "Manage", "searchResultsFor": "Search results for {{text}}", - "none": "None" + "none": "None", + "Donate": "Donate", + "addedSuccessfully": "{{item}} added Successfully", + "updatedSuccessfully": "{{item}} updated Successfully", + "removedSuccessfully": "{{item}} removed Successfully", + "successfullyUpdated": "Successfully Updated" } diff --git a/public/locales/en/errors.json b/public/locales/en/errors.json index 90b2acca9f..155d747bcf 100644 --- a/public/locales/en/errors.json +++ b/public/locales/en/errors.json @@ -5,5 +5,6 @@ "notAuthorised": "Sorry! you are not Authorised!", "errorSendingMail": "Error sending mail", "emailNotRegistered": "Email not registered", - "notFoundMsg": "Oops! The Page you requested was not found!" + "notFoundMsg": "Oops! The Page you requested was not found!", + "errorOccurredCouldntCreate": "An error occurred. Couldn't create {{entity}}" } diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json index bdc8d419f0..96d3518ee7 100644 --- a/public/locales/en/translation.json +++ b/public/locales/en/translation.json @@ -589,7 +589,9 @@ "userPasswordUpdate": { "previousPassword": "Previous Password", "newPassword": "New Password", - "confirmNewPassword": "Confirm New Password" + "confirmNewPassword": "Confirm New Password", + "passCantBeEmpty": "Password can't be empty", + "passNoMatch": "New and Confirm password do not match." }, "orgDelete": { "deleteOrg": "Delete Org" @@ -728,7 +730,10 @@ }, "postCard": { "likes": "Likes", - "comments": "Comments" + "comments": "Comments", + "viewPost": "View Post", + "editPost": "Edit Post", + "postedOn": "Posted on {{date}}" }, "home": { "posts": "Posts", @@ -745,7 +750,8 @@ "startPost": "Start a post", "media": "Media", "event": "Event", - "article": "Article" + "article": "Article", + "postNowVisibleInFeed": "Post now visible in feed" }, "settings": { "profileSettings": "Profile Settings", @@ -854,7 +860,10 @@ "deleteAdvertisement": "Delete Advertisement", "deleteAdvertisementMsg": "Do you want to remove this advertisement?", "view": "View", - "editAdvertisement": "Edit Advertisement" + "editAdvertisement": "Edit Advertisement", + "advertisementDeleted": "Advertisement deleted successfully.", + "endDateGreaterOrEqual": "End Date should be greater than or equal to Start Date", + "advertisementCreated": "Advertisement created successfully." }, "userChat": { "chat": "Chat", @@ -956,5 +965,13 @@ "successfulUpdation": "Action Item updated successfully", "notes": "Notes", "save": "Save" + }, + "checkIn": { + "errorCheckingIn": "Error checking in", + "checkedInSuccessfully": "Checked in successfully" + }, + "eventRegistrantsModal": { + "errorAddingAttendee": "Error adding attendee", + "errorRemovingAttendee": "Error removing attendee" } } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 46f4ac85cd..f338a3f661 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -76,5 +76,10 @@ "noFiltersApplied": "Aucun filtre appliqué", "manage": "Gérer", "searchResultsFor": "Résultats de recherche pour {{text}}", - "none": "Aucun" + "none": "Aucun", + "Donate": "Faire un don", + "addedSuccessfully": "{{item}} ajouté avec succès", + "updatedSuccessfully": "{{item}} mis à jour avec succès", + "removedSuccessfully": "{{item}} supprimé avec succès", + "successfullyUpdated": "Mis à jour avec succès" } diff --git a/public/locales/fr/errors.json b/public/locales/fr/errors.json index 5788340a97..f5aea03266 100644 --- a/public/locales/fr/errors.json +++ b/public/locales/fr/errors.json @@ -5,5 +5,6 @@ "notAuthorised": "Désolé! ", "errorSendingMail": "Erreur lors de l'envoi du courrier", "emailNotRegistered": "Email non enregistré", - "notFoundMsg": "Oops! " + "notFoundMsg": "Oops! ", + "errorOccurredCouldntCreate": "Une erreur s'est produite. Impossible de créer {{entity}}" } diff --git a/public/locales/fr/translation.json b/public/locales/fr/translation.json index 8ff6b2ece7..1239b49158 100644 --- a/public/locales/fr/translation.json +++ b/public/locales/fr/translation.json @@ -594,7 +594,9 @@ "userPasswordUpdate": { "previousPassword": "Mot de passe précédent", "newPassword": "nouveau mot de passe", - "confirmNewPassword": "Confirmer le nouveau mot de passe" + "confirmNewPassword": "Confirmer le nouveau mot de passe", + "passCantBeEmpty": "Le mot de passe ne peut pas être vide", + "passNoMatch": "Le nouveau mot de passe et la confirmation du mot de passe ne correspondent pas." }, "orgDelete": { "deleteOrg": "Supprimer l'organisation" @@ -732,7 +734,10 @@ }, "postCard": { "likes": "Aime", - "comments": "commentaires" + "comments": "commentaires", + "viewPost": "Voir le message", + "editPost": "Modifier le message", + "postedOn": "Publié le {{date}}" }, "home": { "posts": "Des postes", @@ -749,7 +754,8 @@ "startPost": "Démarrer un message", "media": "Médias", "event": "Événement", - "article": "Article" + "article": "Article", + "postNowVisibleInFeed": "Le post est maintenant visible dans le fil d'actualité" }, "settings": { "profileSettings": "Paramètres de profil", @@ -861,7 +867,10 @@ "deleteAdvertisement": "Supprimer la publicité", "deleteAdvertisementMsg": "Voulez-vous supprimer cette publicité ?", "view": "Voir", - "editAdvertisement": "Modifier l'annonce" + "editAdvertisement": "Modifier l'annonce", + "advertisementDeleted": "Publicité supprimée avec succès.", + "endDateGreaterOrEqual": "La date de fin doit être supérieure ou égale à la date de début", + "advertisementCreated": "Publicité créée avec succès." }, "userChat": { "chat": "Chat", @@ -954,7 +963,6 @@ "successfulCreation": "Élément d'action créé avec succès", "successfulUpdation": "Élément d'action mis à jour avec succès", "notes": "Remarques", - "save": "Sauvegarder", "assignee": "Cessionnaire", "assigner": "Assigner", "assignmentDate": "Date d'affectation", @@ -962,6 +970,15 @@ "actionItemActive": "Actif", "actionItemStatus": "Statut de l'action", "actionItemCompleted": "Élément d'action terminé", - "markCompletion": "Marquer l'achèvement" + "markCompletion": "Marquer l'achèvement", + "save": "Sauvegarder" + }, + "checkIn": { + "errorCheckingIn": "Erreur lors de l'enregistrement", + "checkedInSuccessfully": "Enregistrement réussi" + }, + "eventRegistrantsModal": { + "errorAddingAttendee": "Erreur lors de l'ajout du participant", + "errorRemovingAttendee": "Erreur lors de la suppression du participant" } } diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index cb30270abb..c6faba1094 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -76,5 +76,10 @@ "noFiltersApplied": "कोई फ़िल्टर लागू नहीं हैं", "manage": "प्रबंधित करें", "searchResultsFor": "{{text}} के लिए खोज परिणाम", - "none": "कोई नहीं" + "none": "कोई नहीं", + "Donate": "दान करें", + "addedSuccessfully": "{{item}} सफलतापूर्वक जोड़ा गया", + "updatedSuccessfully": "{{item}} सफलतापूर्वक अपडेट किया गया", + "removedSuccessfully": "{{item}} सफलतापूर्वक हटाया गया", + "successfullyUpdated": "सफलतापूर्वक अपडेट किया गया" } diff --git a/public/locales/hi/errors.json b/public/locales/hi/errors.json index 5e08ee8e9e..c31c72fa34 100644 --- a/public/locales/hi/errors.json +++ b/public/locales/hi/errors.json @@ -5,5 +5,6 @@ "notAuthorised": "क्षमा मांगना! ", "errorSendingMail": "मेल भेजने में त्रुटि", "emailNotRegistered": "ईमेल पंजीकृत नहीं है", - "notFoundMsg": "उफ़! " + "notFoundMsg": "उफ़! ", + "errorOccurredCouldntCreate": "एक त्रुटि हुई। {{entity}} नहीं बना सके" } diff --git a/public/locales/hi/translation.json b/public/locales/hi/translation.json index 0e3434871d..b78b7f17b2 100644 --- a/public/locales/hi/translation.json +++ b/public/locales/hi/translation.json @@ -594,7 +594,9 @@ "userPasswordUpdate": { "previousPassword": "पिछला पासवर्ड", "newPassword": "नया पासवर्ड", - "confirmNewPassword": "नए पासवर्ड की पुष्टि करें" + "confirmNewPassword": "नए पासवर्ड की पुष्टि करें", + "passCantBeEmpty": "पासवर्ड खाली नहीं हो सकता", + "passNoMatch": "नया पासवर्ड और पुष्टि पासवर्ड मेल नहीं खाते।" }, "orgDelete": { "deleteOrg": "संगठन हटाएं" @@ -732,7 +734,10 @@ }, "postCard": { "likes": "पसंद है", - "comments": "टिप्पणियाँ" + "comments": "टिप्पणियाँ", + "viewPost": "पोस्ट देखें", + "editPost": "पोस्ट संपादित करें", + "postedOn": "{{date}} को पोस्ट किया गया" }, "home": { "posts": "पदों", @@ -749,7 +754,8 @@ "startPost": "एक पोस्ट प्रारंभ करें", "media": "मिडिया", "event": "आयोजन", - "article": "लेख" + "article": "लेख", + "postNowVisibleInFeed": "पोस्ट अब फीड में दिखाई दे रहा है" }, "settings": { "profileSettings": "पार्श्वचित्र समायोजन", @@ -861,7 +867,10 @@ "deleteAdvertisement": "विज्ञापन हटाएँ", "deleteAdvertisementMsg": "क्या आप यह विज्ञापन हटाना चाहते हैं?", "view": "देखना", - "editAdvertisement": "विज्ञापन संपादित करें" + "editAdvertisement": "विज्ञापन संपादित करें", + "advertisementDeleted": "विज्ञापन सफलतापूर्वक हटाया गया।", + "endDateGreaterOrEqual": "समाप्ति तिथि प्रारंभ तिथि से अधिक या उसके बराबर होनी चाहिए", + "advertisementCreated": "विज्ञापन सफलतापूर्वक बनाया गया।" }, "userChat": { "chat": "बात करना", @@ -954,7 +963,6 @@ "successfulCreation": "कार्रवाई आइटम सफलतापूर्वक बनाया गया", "successfulUpdation": "कार्रवाई आइटम सफलतापूर्वक अपडेट किया गया", "notes": "टिप्पणियाँ", - "save": "बचाना", "assignee": "संपत्ति-भागी", "assigner": "असाइनर", "assignmentDate": "असाइनमेंट तिथि", @@ -962,6 +970,15 @@ "actionItemActive": "सक्रिय", "actionItemStatus": "कार्रवाई आइटम स्थिति", "actionItemCompleted": "कार्रवाई आइटम पूर्ण हुआ", - "markCompletion": "पूर्णता को चिह्नित करें" + "markCompletion": "पूर्णता को चिह्नित करें", + "save": "बचाना" + }, + "checkIn": { + "errorCheckingIn": "चेक-इन में त्रुटि", + "checkedInSuccessfully": "सफलतापूर्वक चेक-इन किया गया" + }, + "eventRegistrantsModal": { + "errorAddingAttendee": "उपस्थित होने वाले को जोड़ने में त्रुटि", + "errorRemovingAttendee": "उपस्थित होने वाले को हटाने में त्रुटि" } } diff --git a/public/locales/sp/common.json b/public/locales/sp/common.json index d9d1663f7d..55d3e609fe 100644 --- a/public/locales/sp/common.json +++ b/public/locales/sp/common.json @@ -76,5 +76,10 @@ "noFiltersApplied": "No se aplicaron filtros", "manage": "Administrar", "searchResultsFor": "Resultados de búsqueda para {{text}}", - "none": "Ninguno" + "none": "Ninguno", + "Donate": "Donar", + "addedSuccessfully": "{{item}} agregado con éxito", + "updatedSuccessfully": "{{item}} actualizado con éxito", + "removedSuccessfully": "{{item}} eliminado con éxito", + "successfullyUpdated": "Actualizado con éxito" } diff --git a/public/locales/sp/errors.json b/public/locales/sp/errors.json index 90b2acca9f..7d5440637f 100644 --- a/public/locales/sp/errors.json +++ b/public/locales/sp/errors.json @@ -5,5 +5,6 @@ "notAuthorised": "Sorry! you are not Authorised!", "errorSendingMail": "Error sending mail", "emailNotRegistered": "Email not registered", - "notFoundMsg": "Oops! The Page you requested was not found!" + "notFoundMsg": "Oops! The Page you requested was not found!", + "errorOccurredCouldntCreate": "Ocurrió un error. No se pudo crear {{entity}}" } diff --git a/public/locales/sp/translation.json b/public/locales/sp/translation.json index 8c4b179c29..854b60b19d 100644 --- a/public/locales/sp/translation.json +++ b/public/locales/sp/translation.json @@ -762,7 +762,9 @@ "newPassword": "Nueva contraseña", "confirmNewPassword": "Confirmar nueva contraseña", "saveChanges": "Guardar cambios", - "cancel": "Cancelar" + "cancel": "Cancelar", + "passCantBeEmpty": "La contraseña no puede estar vacía", + "passNoMatch": "La nueva contraseña y la confirmación no coinciden." }, "orgDelete": { "deleteOrg": "Eliminar organización" @@ -943,7 +945,10 @@ }, "postCard": { "likes": "Gustos", - "comments": "Comentarios" + "comments": "Comentarios", + "viewPost": "Ver publicación", + "editPost": "Editar publicación", + "postedOn": "Publicado el {{date}}" }, "home": { "feed": "Alimentar", @@ -953,7 +958,8 @@ "startPost": "Comenzar una publicación", "media": "Medios", "event": "Evento", - "article": "Artículo" + "article": "Artículo", + "postNowVisibleInFeed": "La publicación ahora es visible en el feed" }, "settings": { "settings": "Ajustes", @@ -1081,6 +1087,9 @@ "view": "Ver", "edit": "Editar", "editAdvertisement": "Editar Anuncio", + "advertisementDeleted": "Anuncio eliminado con éxito.", + "endDateGreaterOrEqual": "La fecha de finalización debe ser mayor o igual a la fecha de inicio", + "advertisementCreated": "Anuncio creado con éxito.", "saveChanges": "Guardar Cambios", "endOfResults": "Fin de los resultados" }, @@ -1196,7 +1205,6 @@ "successfulCreation": "Elemento de acción creado exitosamente", "successfulUpdation": "Elemento de acción actualizado correctamente", "notes": "Notas", - "save": "Guardar", "assignee": "Cesionario", "assigner": "Asignador", "assignmentDate": "Fecha de asignación", @@ -1204,6 +1212,15 @@ "actionItemActive": "Activo", "actionItemStatus": "Estado del elemento de acción", "actionItemCompleted": "Elemento de acción completado", - "markCompletion": "Marcar finalización" + "markCompletion": "Marcar finalización", + "save": "Guardar" + }, + "checkIn": { + "errorCheckingIn": "Error al registrarse", + "checkedInSuccessfully": "Registrado con éxito" + }, + "eventRegistrantsModal": { + "errorAddingAttendee": "Error al agregar asistente", + "errorRemovingAttendee": "Error al eliminar asistente" } } diff --git a/public/locales/zh/common.json b/public/locales/zh/common.json index 3e3da4db19..9e4596f272 100644 --- a/public/locales/zh/common.json +++ b/public/locales/zh/common.json @@ -76,5 +76,10 @@ "noFiltersApplied": "未应用筛选器", "manage": "管理", "searchResultsFor": "搜索结果:{{text}}", - "none": "没有" + "none": "没有", + "Donate": "捐赠", + "addedSuccessfully": "{{item}} 添加成功", + "updatedSuccessfully": "{{item}} 更新成功", + "removedSuccessfully": "{{item}} 删除成功", + "successfullyUpdated": "更新成功" } diff --git a/public/locales/zh/errors.json b/public/locales/zh/errors.json index 7ddfe06ab4..1466985403 100644 --- a/public/locales/zh/errors.json +++ b/public/locales/zh/errors.json @@ -5,5 +5,6 @@ "notAuthorised": "对不起!", "errorSendingMail": "发送邮件时出错", "emailNotRegistered": "邮箱未注册", - "notFoundMsg": "哎呀!" + "notFoundMsg": "哎呀!", + "errorOccurredCouldntCreate": "发生错误。 无法创建{{entity}}" } diff --git a/public/locales/zh/translation.json b/public/locales/zh/translation.json index 3300994b80..581701c9db 100644 --- a/public/locales/zh/translation.json +++ b/public/locales/zh/translation.json @@ -594,7 +594,9 @@ "userPasswordUpdate": { "previousPassword": "旧密码", "newPassword": "新密码", - "confirmNewPassword": "确认新密码" + "confirmNewPassword": "确认新密码", + "passCantBeEmpty": "密码不能为空", + "passNoMatch": "新密码和确认密码不匹配。" }, "orgDelete": { "deleteOrg": "删除组织" @@ -732,7 +734,10 @@ }, "postCard": { "likes": "喜欢", - "comments": "评论" + "comments": "评论", + "viewPost": "查看帖子", + "editPost": "编辑帖子", + "postedOn": "发布于 {{date}}" }, "home": { "posts": "帖子", @@ -749,7 +754,8 @@ "startPost": "开始发帖", "media": "媒体", "event": "事件", - "article": "文章" + "article": "文章", + "postNowVisibleInFeed": "帖子现在在动态中可见" }, "settings": { "profileSettings": "配置文件设置", @@ -861,7 +867,10 @@ "deleteAdvertisement": "删除广告", "deleteAdvertisementMsg": "您想删除该广告吗?", "view": "看法", - "editAdvertisement": "编辑广告" + "editAdvertisement": "编辑广告", + "advertisementDeleted": "广告已成功删除。", + "endDateGreaterOrEqual": "结束日期应大于或等于开始日期", + "advertisementCreated": "广告已成功创建。" }, "userChat": { "chat": "聊天", @@ -954,7 +963,6 @@ "successfulCreation": "操作项创建成功", "successfulUpdation": "操作项已成功更新", "notes": "笔记", - "save": "节省", "assignee": "受让人", "assigner": "分配者", "assignmentDate": "任务分配日期", @@ -962,6 +970,15 @@ "actionItemActive": "积极的", "actionItemStatus": "行动项目状态", "actionItemCompleted": "行动项目已完成", - "markCompletion": "标记完成" + "markCompletion": "标记完成", + "save": "节省" + }, + "checkIn": { + "errorCheckingIn": "签到错误", + "checkedInSuccessfully": "成功签到" + }, + "eventRegistrantsModal": { + "errorAddingAttendee": "添加与会者时出错", + "errorRemovingAttendee": "删除与会者时出错" } } diff --git a/src/GraphQl/Mutations/mutations.ts b/src/GraphQl/Mutations/mutations.ts index e3765dc771..69e4c85e9e 100644 --- a/src/GraphQl/Mutations/mutations.ts +++ b/src/GraphQl/Mutations/mutations.ts @@ -97,6 +97,7 @@ export const UPDATE_USER_MUTATION = gql` $state: String $country: String $image: String + $appLanguageCode: String ) { updateUserProfile( data: { @@ -110,6 +111,7 @@ export const UPDATE_USER_MUTATION = gql` employmentStatus: $empStatus maritalStatus: $maritalStatus address: { line1: $address, state: $state, countryCode: $country } + appLanguageCode: $appLanguageCode } file: $image ) { @@ -185,6 +187,7 @@ export const LOGIN_MUTATION = gql` _id } isSuperAdmin + appLanguageCode } accessToken refreshToken diff --git a/src/components/AddOn/core/AddOnRegister/AddOnRegister.test.tsx b/src/components/AddOn/core/AddOnRegister/AddOnRegister.test.tsx index dcd749ba41..6df580aa76 100644 --- a/src/components/AddOn/core/AddOnRegister/AddOnRegister.test.tsx +++ b/src/components/AddOn/core/AddOnRegister/AddOnRegister.test.tsx @@ -149,7 +149,7 @@ describe('Testing AddOnRegister', () => { userEvent.click(screen.getByTestId('addonregisterBtn')); await wait(100); - expect(toast.success).toBeCalledWith('Plugin Added Successfully'); + expect(toast.success).toBeCalledWith('Plugin added Successfully'); }); }); diff --git a/src/components/AddOn/core/AddOnRegister/AddOnRegister.tsx b/src/components/AddOn/core/AddOnRegister/AddOnRegister.tsx index 9f88775265..059eae5d43 100644 --- a/src/components/AddOn/core/AddOnRegister/AddOnRegister.tsx +++ b/src/components/AddOn/core/AddOnRegister/AddOnRegister.tsx @@ -52,7 +52,7 @@ function addOnRegister(): JSX.Element { }); if (data) { - toast.success('Plugin Added Successfully'); + toast.success(tCommon('addedSuccessfully', { item: 'Plugin' })); setTimeout(() => { navigate(0); }, 2000); diff --git a/src/components/Advertisements/Advertisements.test.tsx b/src/components/Advertisements/Advertisements.test.tsx index fcb8889dad..b45e1bab38 100644 --- a/src/components/Advertisements/Advertisements.test.tsx +++ b/src/components/Advertisements/Advertisements.test.tsx @@ -407,7 +407,7 @@ describe('Testing Advertisement Component', () => { userEvent.click(screen.getByTestId('addonregister')); expect( - await screen.findByText('Advertisement created successfully'), + await screen.findByText('Advertisement created successfully.'), ).toBeInTheDocument(); }); diff --git a/src/components/Advertisements/core/AdvertisementEntry/AdvertisementEntry.tsx b/src/components/Advertisements/core/AdvertisementEntry/AdvertisementEntry.tsx index cbc933a894..afb66e7ff4 100644 --- a/src/components/Advertisements/core/AdvertisementEntry/AdvertisementEntry.tsx +++ b/src/components/Advertisements/core/AdvertisementEntry/AdvertisementEntry.tsx @@ -54,7 +54,7 @@ function advertisementEntry({ id: id.toString(), }, }); - toast.error('Advertisement Deleted'); + toast.success(t('advertisementDeleted')); setButtonLoading(false); setAfter(null); } catch (error: unknown) { diff --git a/src/components/Advertisements/core/AdvertisementRegister/AdvertisementRegister.test.tsx b/src/components/Advertisements/core/AdvertisementRegister/AdvertisementRegister.test.tsx index a38823a97c..c3aa536d1f 100644 --- a/src/components/Advertisements/core/AdvertisementRegister/AdvertisementRegister.test.tsx +++ b/src/components/Advertisements/core/AdvertisementRegister/AdvertisementRegister.test.tsx @@ -229,7 +229,7 @@ describe('Testing Advertisement Register Component', () => { await waitFor(() => { fireEvent.click(getByText(translations.register)); }); - expect(toast.success).toBeCalledWith('Advertisement created successfully'); + expect(toast.success).toBeCalledWith('Advertisement created successfully.'); expect(setTimeoutSpy).toHaveBeenCalled(); }); @@ -295,7 +295,7 @@ describe('Testing Advertisement Register Component', () => { await waitFor(() => { fireEvent.click(getByText(translations.saveChanges)); }); - expect(toast.success).toBeCalledWith('Advertisement created successfully'); + expect(toast.success).toBeCalledWith('Advertisement created successfully.'); expect(setTimeoutSpy).toHaveBeenCalled(); }); @@ -330,7 +330,7 @@ describe('Testing Advertisement Register Component', () => { fireEvent.click(getByText(translations.register)); }); expect(toast.error).toBeCalledWith( - 'An error occured, could not create new advertisement', + `An error occurred. Couldn't create advertisement`, ); expect(setTimeoutSpy).toHaveBeenCalled(); }); @@ -400,7 +400,7 @@ describe('Testing Advertisement Register Component', () => { fireEvent.click(getByText(translations.register)); }); expect(toast.error).toBeCalledWith( - 'End date must be greater than or equal to start date', + 'End Date should be greater than or equal to Start Date', ); expect(setTimeoutSpy).toHaveBeenCalled(); }); @@ -521,7 +521,7 @@ describe('Testing Advertisement Register Component', () => { fireEvent.click(getByText(translations.saveChanges)); await waitFor(() => { expect(toast.error).toBeCalledWith( - 'End date must be greater than or equal to start date', + 'End Date should be greater than or equal to Start Date', ); }); }); diff --git a/src/components/Advertisements/core/AdvertisementRegister/AdvertisementRegister.tsx b/src/components/Advertisements/core/AdvertisementRegister/AdvertisementRegister.tsx index 78bfec9ead..89ca1c6cb3 100644 --- a/src/components/Advertisements/core/AdvertisementRegister/AdvertisementRegister.tsx +++ b/src/components/Advertisements/core/AdvertisementRegister/AdvertisementRegister.tsx @@ -47,6 +47,7 @@ function advertisementRegister({ }: InterfaceAddOnRegisterProps): JSX.Element { const { t } = useTranslation('translation', { keyPrefix: 'advertisement' }); const { t: tCommon } = useTranslation('common'); + const { t: tErrors } = useTranslation('errors'); const { orgId: currentOrg } = useParams(); @@ -107,7 +108,7 @@ function advertisementRegister({ try { console.log('At handle register', formState); if (formState.endDate < formState.startDate) { - toast.error('End date must be greater than or equal to start date'); + toast.error(t('endDateGreaterOrEqual')); return; } const { data } = await create({ @@ -122,7 +123,7 @@ function advertisementRegister({ }); if (data) { - toast.success('Advertisement created successfully'); + toast.success(t('advertisementCreated')); setFormState({ name: '', advertisementMedia: '', @@ -135,7 +136,9 @@ function advertisementRegister({ setAfter(null); } catch (error: unknown) { if (error instanceof Error) { - toast.error('An error occured, could not create new advertisement'); + toast.error( + tErrors('errorOccurredCouldntCreate', { entity: 'advertisement' }), + ); console.log('error occured', error.message); } } @@ -155,7 +158,7 @@ function advertisementRegister({ updatedFields.type = formState.type; } if (formState.endDate < formState.startDate) { - toast.error('End date must be greater than or equal to start date'); + toast.error(t('endDateGreaterOrEqual')); return; } const startDateFormattedString = dayjs(formState.startDate).format( @@ -195,7 +198,9 @@ function advertisementRegister({ }); if (data) { - toast.success('Advertisement updated successfully'); + toast.success( + tCommon('updatedSuccessfully', { item: 'Advertisement' }), + ); handleClose(); setAfter(null); } diff --git a/src/components/ChangeLanguageDropdown/ChangeLanguageDropDown.tsx b/src/components/ChangeLanguageDropdown/ChangeLanguageDropDown.tsx index e3ee7a987f..e4bda6fd7f 100644 --- a/src/components/ChangeLanguageDropdown/ChangeLanguageDropDown.tsx +++ b/src/components/ChangeLanguageDropdown/ChangeLanguageDropDown.tsx @@ -3,6 +3,10 @@ import { Dropdown } from 'react-bootstrap'; import i18next from 'i18next'; import { languages } from 'utils/languages'; import cookies from 'js-cookie'; +import { UPDATE_USER_MUTATION } from 'GraphQl/Mutations/mutations'; +import { useMutation } from '@apollo/client'; +import useLocalStorage from 'utils/useLocalstorage'; +const { getItem } = useLocalStorage(); interface InterfaceChangeLanguageDropDownProps { parentContainerStyle?: string; @@ -10,14 +14,28 @@ interface InterfaceChangeLanguageDropDownProps { btnTextStyle?: string; } -export const changeLanguage = async (languageCode: string): Promise => { - await i18next.changeLanguage(languageCode); -}; - const ChangeLanguageDropDown = ( props: InterfaceChangeLanguageDropDownProps, ): JSX.Element => { const currentLanguageCode = cookies.get('i18next') || 'en'; + const userId = getItem('userId'); + const [updateUser] = useMutation(UPDATE_USER_MUTATION); + + const changeLanguage = async (languageCode: string): Promise => { + if (userId) { + try { + await updateUser({ + variables: { + appLanguageCode: languageCode, + }, + }); + await i18next.changeLanguage(languageCode); + cookies.set('i18next', languageCode); + } catch (error) { + console.log('Error in changing language', error); + } + } + }; return ( { await act(() => { @@ -16,14 +23,44 @@ async function wait(ms = 100): Promise { }); } +const MOCKS = [ + { + request: { + query: UPDATE_USER_MUTATION, + variables: { + appLanguageCode: 'fr', + }, + }, + result: { + data: { + updateUserProfile: { + _id: '1', + }, + }, + }, + }, + { + request: { + query: UPDATE_USER_MUTATION, + variables: { + appLanguageCode: 'hi', + }, + }, + error: new Error('An error occurred'), + }, +]; + +const link = new StaticMockLink(MOCKS, true); describe('Testing Change Language Dropdown', () => { test('Component Should be rendered properly', async () => { const { getByTestId } = render( - - - - - , + + + + + + + , ); expect(getByTestId('language-dropdown-container')).toBeInTheDocument(); @@ -51,11 +88,13 @@ describe('Testing Change Language Dropdown', () => { btnTextStyle: 'btnTextStyle', }; const { getByTestId } = render( - - - - - , + + + + + + + , ); getByTestId('language-dropdown-container').className.includes( props.parentContainerStyle, @@ -71,9 +110,11 @@ describe('Testing Change Language Dropdown', () => { }); render( - - - , + + + + + , ); await wait(); @@ -83,24 +124,35 @@ describe('Testing Change Language Dropdown', () => { test('Testing change language functionality', async () => { Object.defineProperty(window.document, 'cookie', { writable: true, - value: 'i18next=en', + value: 'i18next=sp', }); + setItem('userId', '1'); const { getByTestId } = render( - - - , + + + + + , ); userEvent.click(getByTestId('language-dropdown-btn')); await wait(); - languages.map((language) => { - const changeLanguageBtn = getByTestId( - `change-language-btn-${language.code}`, - ); - expect(changeLanguageBtn).toBeInTheDocument(); - userEvent.click(changeLanguageBtn); - expect(cookies.get('i18next')).toBe(language.code); - }); + const changeLanguageBtn = getByTestId(`change-language-btn-fr`); + await wait(); + expect(changeLanguageBtn).toBeInTheDocument(); + await wait(); + userEvent.click(changeLanguageBtn); + await wait(); + expect(cookies.get('i18next')).toBe('fr'); + await wait(); + userEvent.click(getByTestId('language-dropdown-btn')); + await wait(); + const changeLanguageBtnHi = getByTestId(`change-language-btn-hi`); + await wait(); + expect(changeLanguageBtnHi).toBeInTheDocument(); + await wait(); + userEvent.click(changeLanguageBtnHi); + await wait(); }); }); diff --git a/src/components/CheckIn/TableRow.test.tsx b/src/components/CheckIn/TableRow.test.tsx index 8d41f1036b..9a206047d0 100644 --- a/src/components/CheckIn/TableRow.test.tsx +++ b/src/components/CheckIn/TableRow.test.tsx @@ -45,7 +45,7 @@ describe('Testing Table Row for CheckIn Table', () => { fireEvent.click(queryByText('Check In') as Element); await waitFor(() => - expect(queryByText('Checked in successfully!')).toBeInTheDocument(), + expect(queryByText('Checked in successfully')).toBeInTheDocument(), ); }); @@ -130,9 +130,7 @@ describe('Testing Table Row for CheckIn Table', () => { fireEvent.click(queryByText('Check In') as Element); await waitFor(() => - expect( - queryByText('There was an error in checking in!'), - ).toBeInTheDocument(), + expect(queryByText('Error checking in')).toBeInTheDocument(), ); await waitFor(() => expect(queryByText('Oops')).toBeInTheDocument()); }); diff --git a/src/components/CheckIn/TableRow.tsx b/src/components/CheckIn/TableRow.tsx index bceaf3a49d..8daa5ed222 100644 --- a/src/components/CheckIn/TableRow.tsx +++ b/src/components/CheckIn/TableRow.tsx @@ -6,6 +6,7 @@ import { MARK_CHECKIN } from 'GraphQl/Mutations/mutations'; import { toast } from 'react-toastify'; import { generate } from '@pdfme/generator'; import { tagTemplate } from './tagTemplate'; +import { useTranslation } from 'react-i18next'; export const TableRow = ({ data, @@ -15,6 +16,7 @@ export const TableRow = ({ refetch: () => void; }): JSX.Element => { const [checkInMutation] = useMutation(MARK_CHECKIN); + const { t } = useTranslation('translation', { keyPrefix: 'checkIn' }); const markCheckIn = (): void => { // as we do not want to clutter the UI currently with the same (only provide the most basic of operations) @@ -25,11 +27,11 @@ export const TableRow = ({ }, }) .then(() => { - toast.success('Checked in successfully!'); + toast.success(t('checkedInSuccessfully')); refetch(); }) .catch((err) => { - toast.error('There was an error in checking in!'); + toast.error(t('errorCheckingIn')); toast.error(err.message); }); }; diff --git a/src/components/EventRegistrantsModal/EventRegistrantsModal.test.tsx b/src/components/EventRegistrantsModal/EventRegistrantsModal.test.tsx index 597502ac8e..8a084fef24 100644 --- a/src/components/EventRegistrantsModal/EventRegistrantsModal.test.tsx +++ b/src/components/EventRegistrantsModal/EventRegistrantsModal.test.tsx @@ -194,9 +194,7 @@ describe('Testing Event Registrants Modal', () => { ); await waitFor(() => - expect( - queryByText('Added the attendee successfully!'), - ).toBeInTheDocument(), + expect(queryByText('Attendee added Successfully')).toBeInTheDocument(), ); }); @@ -244,9 +242,7 @@ describe('Testing Event Registrants Modal', () => { ); await waitFor(() => - expect( - queryByText('There was an error in adding the attendee!'), - ).toBeInTheDocument(), + expect(queryByText('Error adding attendee')).toBeInTheDocument(), ); }); @@ -286,9 +282,7 @@ describe('Testing Event Registrants Modal', () => { ); await waitFor(() => - expect( - queryByText('Removed the attendee successfully!'), - ).toBeInTheDocument(), + expect(queryByText('Attendee removed Successfully')).toBeInTheDocument(), ); }); @@ -328,9 +322,7 @@ describe('Testing Event Registrants Modal', () => { ); await waitFor(() => - expect( - queryByText('There was an error in removing the attendee!'), - ).toBeInTheDocument(), + expect(queryByText('Error removing attendee')).toBeInTheDocument(), ); }); }); diff --git a/src/components/EventRegistrantsModal/EventRegistrantsModal.tsx b/src/components/EventRegistrantsModal/EventRegistrantsModal.tsx index 0b3ef64d28..811dd44941 100644 --- a/src/components/EventRegistrantsModal/EventRegistrantsModal.tsx +++ b/src/components/EventRegistrantsModal/EventRegistrantsModal.tsx @@ -13,6 +13,7 @@ import Chip from '@mui/material/Chip'; import Stack from '@mui/material/Stack'; import TextField from '@mui/material/TextField'; import Autocomplete from '@mui/material/Autocomplete'; +import { useTranslation } from 'react-i18next'; type ModalPropType = { show: boolean; @@ -28,21 +29,26 @@ interface InterfaceUser { } export const EventRegistrantsModal = (props: ModalPropType): JSX.Element => { + const { eventId, orgId, handleClose, show } = props; const [member, setMember] = useState(null); const [addRegistrantMutation] = useMutation(ADD_EVENT_ATTENDEE); const [removeRegistrantMutation] = useMutation(REMOVE_EVENT_ATTENDEE); + const { t } = useTranslation('translation', { + keyPrefix: 'eventRegistrantsModal', + }); + const { t: tCommon } = useTranslation('common'); const { data: attendeesData, loading: attendeesLoading, refetch: attendeesRefetch, } = useQuery(EVENT_ATTENDEES, { - variables: { id: props.eventId }, + variables: { id: eventId }, }); const { data: memberData, loading: memberLoading } = useQuery(MEMBERS_LIST, { - variables: { id: props.orgId }, + variables: { id: orgId }, }); const addRegistrant = (): void => { @@ -54,15 +60,15 @@ export const EventRegistrantsModal = (props: ModalPropType): JSX.Element => { addRegistrantMutation({ variables: { userId: member._id, - eventId: props.eventId, + eventId: eventId, }, }) .then(() => { - toast.success('Added the attendee successfully!'); + toast.success(tCommon('addedSuccessfully', { item: 'Attendee' })); attendeesRefetch(); }) .catch((err) => { - toast.error('There was an error in adding the attendee!'); + toast.error(t('errorAddingAttendee')); toast.error(err.message); }); }; @@ -72,15 +78,15 @@ export const EventRegistrantsModal = (props: ModalPropType): JSX.Element => { removeRegistrantMutation({ variables: { userId, - eventId: props.eventId, + eventId: eventId, }, }) .then(() => { - toast.success('Removed the attendee successfully!'); + toast.success(tCommon('removedSuccessfully', { item: 'Attendee' })); attendeesRefetch(); }) .catch((err) => { - toast.error('There was an error in removing the attendee!'); + toast.error(t('errorRemovingAttendee')); toast.error(err.message); }); }; @@ -96,12 +102,7 @@ export const EventRegistrantsModal = (props: ModalPropType): JSX.Element => { return ( <> - + Event Registrants diff --git a/src/components/UserPasswordUpdate/UserPasswordUpdate.test.tsx b/src/components/UserPasswordUpdate/UserPasswordUpdate.test.tsx index 2aa5756717..4fcbb18070 100644 --- a/src/components/UserPasswordUpdate/UserPasswordUpdate.test.tsx +++ b/src/components/UserPasswordUpdate/UserPasswordUpdate.test.tsx @@ -110,9 +110,7 @@ describe('Testing User Password Update', () => { userEvent.click(screen.getByText(/Save Changes/i)); await wait(); - expect(mockToast.error).toHaveBeenCalledWith( - 'The password field cannot be empty.', - ); + expect(mockToast.error).toHaveBeenCalledWith(`Password can't be empty`); }); test('displays an error when new and confirm password field does not match', async () => { diff --git a/src/components/UserPasswordUpdate/UserPasswordUpdate.tsx b/src/components/UserPasswordUpdate/UserPasswordUpdate.tsx index 78fea1df53..f9cb899f2d 100644 --- a/src/components/UserPasswordUpdate/UserPasswordUpdate.tsx +++ b/src/components/UserPasswordUpdate/UserPasswordUpdate.tsx @@ -32,12 +32,12 @@ const UserUpdate: React.FC< !formState.newPassword || !formState.confirmNewPassword ) { - toast.error('The password field cannot be empty.'); + toast.error(t('passCantBeEmpty')); return; } if (formState.newPassword !== formState.confirmNewPassword) { - toast.error('New and Confirm password do not match.'); + toast.error(t('passNoMatch')); return; } @@ -51,7 +51,7 @@ const UserUpdate: React.FC< }); /* istanbul ignore next */ if (data) { - toast.success('Successful updated'); + toast.success(tCommon('updatedSuccessfully', { item: 'Password' })); setTimeout(() => { window.location.reload(); }, 2000); diff --git a/src/components/UserPortal/Login/Login.module.css b/src/components/UserPortal/Login/Login.module.css deleted file mode 100644 index 98be9db02a..0000000000 --- a/src/components/UserPortal/Login/Login.module.css +++ /dev/null @@ -1,29 +0,0 @@ -.forgotPasswordContainer { - display: flex; - justify-content: flex-end; - flex-direction: row; - margin: 5px 0px; -} - -.forgotPasswordText { - color: black; - font-size: 12px; - margin: 2px 0px; -} - -.borderNone { - border: none; -} - -.colorWhite { - color: white; -} - -.colorPrimary { - background: #31bb6b; -} - -.colorPrimaryHover:hover { - background: #31bb6b; - border: none; -} diff --git a/src/components/UserPortal/Login/Login.test.tsx b/src/components/UserPortal/Login/Login.test.tsx deleted file mode 100644 index 9248c5e9ec..0000000000 --- a/src/components/UserPortal/Login/Login.test.tsx +++ /dev/null @@ -1,306 +0,0 @@ -import type { SetStateAction } from 'react'; -import React from 'react'; -import { act, render, screen } from '@testing-library/react'; -import { MockedProvider } from '@apollo/react-testing'; -import userEvent from '@testing-library/user-event'; -import { I18nextProvider } from 'react-i18next'; - -import { LOGIN_MUTATION } from 'GraphQl/Mutations/mutations'; -import { BrowserRouter } from 'react-router-dom'; -import { Provider } from 'react-redux'; -import { store } from 'state/store'; -import i18nForTest from 'utils/i18nForTest'; -import { StaticMockLink } from 'utils/StaticMockLink'; -import Login from './Login'; -import { toast } from 'react-toastify'; - -const MOCKS = [ - { - request: { - query: LOGIN_MUTATION, - variables: { - email: 'johndoe@gmail.com', - password: 'johndoe', - }, - }, - result: { - data: { - login: { - user: { - _id: '1', - firstName: 'firstname', - lastName: 'secondname', - email: 'tempemail@example.com', - image: 'image', - }, - accessToken: 'accessToken', - refreshToken: 'refreshToken', - appUserProfile: { - adminFor: [ - { - _id: 'id', - }, - ], - isSuperAdmin: true, - }, - }, - }, - }, - }, - { - request: { - query: LOGIN_MUTATION, - variables: { - email: 'johndoe@gmail.com', - password: 'jdoe', - }, - }, - result: { - data: { - login: { - user: { - _id: '1', - firstName: 'firstname', - lastName: 'secondname', - email: 'tempemail@example.com', - image: 'image', - }, - appUserProfile: { - adminFor: {}, - isSuperAdmin: false, - }, - accessToken: 'accessToken', - refreshToken: 'refreshToken', - }, - }, - }, - }, - { - request: { - query: LOGIN_MUTATION, - variables: { - email: 'invalid@gmail.com', - password: 'anything', - }, - }, - result: {}, - }, -]; - -const link = new StaticMockLink(MOCKS, true); - -async function wait(ms = 100): Promise { - await act(() => { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); - }); -} - -jest.mock('react-toastify', () => ({ - toast: { - success: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }, -})); -const mockNavigate = jest.fn(); -jest.mock('react-router-dom', () => ({ - ...jest.requireActual('react-router-dom'), - useNavigate: () => mockNavigate, -})); - -const setCurrentMode: React.Dispatch> = jest.fn(); - -const props = { - setCurrentMode, -}; - -describe('Testing Login Component [User Portal]', () => { - test('Component should be rendered properly', async () => { - render( - - - - - - - - - , - ); - - await wait(); - }); - - test('Expect the mode to be changed to Register', async () => { - render( - - - - - - - - - , - ); - - await wait(); - - userEvent.click(screen.getByTestId('setRegisterBtn')); - - expect(setCurrentMode).toBeCalledWith('register'); - }); - - test('toast.error is triggered if the email input is empty.', async () => { - render( - - - - - - - - - , - ); - - await wait(); - - userEvent.click(screen.getByTestId('loginBtn')); - - expect(toast.error).toBeCalledWith( - 'Please enter a valid email and password.', - ); - }); - - test('toast.error is triggered if the password input is empty.', async () => { - const formData = { - email: 'johndoe@gmail.com', - password: 'joe', - }; - - render( - - - - - - - - - , - ); - - await wait(); - - userEvent.type(screen.getByPlaceholderText(/Enter Email/i), formData.email); - userEvent.click(screen.getByTestId('loginBtn')); - - expect(toast.error).toBeCalledWith( - 'Please enter a valid email and password.', - ); - }); - - test('Incorrect password is entered.', async () => { - const formData = { - email: 'invalid@gmail.com', - password: 'anything', - }; - - render( - - - - - - - - - , - ); - - await wait(); - - userEvent.type(screen.getByPlaceholderText(/Enter Email/i), formData.email); - - userEvent.type( - screen.getByPlaceholderText(/Enter Password/i), - formData.password, - ); - - userEvent.click(screen.getByTestId('loginBtn')); - - expect(toast.error).toBeCalled(); - - await wait(); - }); - - test('Login details are entered correctly.', async () => { - const formData = { - email: 'johndoe@gmail.com', - password: 'johndoe', - }; - - render( - - - - - - - - - , - ); - - await wait(); - - userEvent.type(screen.getByPlaceholderText(/Enter Email/i), formData.email); - - userEvent.type( - screen.getByPlaceholderText(/Enter Password/i), - formData.password, - ); - - userEvent.click(screen.getByTestId('loginBtn')); - - await wait(); - expect(mockNavigate).toHaveBeenCalledWith('/user/organizations'); - }); - - test('Current user has not been approved by admin.', async () => { - const formData = { - email: 'johndoe@gmail.com', - password: 'jdoe', - }; - - render( - - - - - - - - - , - ); - - await wait(); - - userEvent.type(screen.getByPlaceholderText(/Enter Email/i), formData.email); - - userEvent.type( - screen.getByPlaceholderText(/Enter Password/i), - formData.password, - ); - - userEvent.click(screen.getByTestId('loginBtn')); - - expect(toast.error).toBeCalled(); - - await wait(); - }); -}); diff --git a/src/components/UserPortal/Login/Login.tsx b/src/components/UserPortal/Login/Login.tsx deleted file mode 100644 index 517170263e..0000000000 --- a/src/components/UserPortal/Login/Login.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import { useMutation } from '@apollo/client'; -import { LockOutlined } from '@mui/icons-material'; -import EmailOutlinedIcon from '@mui/icons-material/EmailOutlined'; -import type { ChangeEvent, SetStateAction } from 'react'; -import React from 'react'; -import { Button, Form, InputGroup } from 'react-bootstrap'; -import { useTranslation } from 'react-i18next'; -import { Link, useNavigate } from 'react-router-dom'; -import { toast } from 'react-toastify'; - -import { LOGIN_MUTATION } from 'GraphQl/Mutations/mutations'; -import { errorHandler } from 'utils/errorHandler'; -import useLocalStorage from 'utils/useLocalstorage'; -import styles from './Login.module.css'; - -interface InterfaceLoginProps { - setCurrentMode: React.Dispatch>; -} - -export default function login(props: InterfaceLoginProps): JSX.Element { - const { t } = useTranslation('translation', { keyPrefix: 'userLogin' }); - const { t: tCommon } = useTranslation('common'); - - const navigate = useNavigate(); - - const { setCurrentMode } = props; - - const { setItem } = useLocalStorage(); - - const handleModeChangeToRegister = (): void => { - setCurrentMode('register'); - }; - - const [loginMutation] = useMutation(LOGIN_MUTATION); - - const [loginVariables, setLoginVariables] = React.useState({ - email: '', - password: '', - }); - - const handleLogin = async (): Promise => { - if (!(loginVariables.email && loginVariables.password)) { - toast.error(t('invalidDetailsMessage')); - } else { - try { - const { data } = await loginMutation({ - variables: { - email: loginVariables.email, - password: loginVariables.password, - }, - }); - - setItem('token', data.login.accessToken); - setItem('userId', data.login.user._id); - navigate('/user/organizations'); - } catch (error: unknown) { - errorHandler(t, error); - } - } - }; - - /* istanbul ignore next */ - const handleEmailChange = (e: ChangeEvent): void => { - const email = e.target.value; - - setLoginVariables({ - email, - password: loginVariables.password, - }); - }; - - /* istanbul ignore next */ - const handlePasswordChange = (e: ChangeEvent): void => { - const password = e.target.value; - - setLoginVariables({ - email: loginVariables.email, - password, - }); - }; - - return ( - <> -

{tCommon('login')}

- -
-
{tCommon('emailAddress')}
- - - - - - -
{tCommon('password')}
- - - - - - -
- -
- - {tCommon('forgotPassword')} - -
- - -
- - - ); -} diff --git a/src/components/UserPortal/PostCard/PostCard.test.tsx b/src/components/UserPortal/PostCard/PostCard.test.tsx index 1ba0459b6d..64f6670223 100644 --- a/src/components/UserPortal/PostCard/PostCard.test.tsx +++ b/src/components/UserPortal/PostCard/PostCard.test.tsx @@ -185,7 +185,7 @@ describe('Testing PostCard Component [User Portal]', () => { { id: '64eb13beca85de60ebe0ed0e', creator: { - _id: '63d6064458fce20ee25c3bf7', + id: '63d6064458fce20ee25c3bf7', firstName: 'Noble', lastName: 'Mittal', email: 'test@gmail.com', @@ -199,7 +199,7 @@ describe('Testing PostCard Component [User Portal]', () => { { id: '64eb13beca85de60ebe0ed0b', creator: { - _id: '63d6064458fce20ee25c3bf8', + id: '63d6064458fce20ee25c3bf8', firstName: 'Priyanshu', lastName: 'Bartwal', email: 'test1@gmail.com', @@ -338,7 +338,7 @@ describe('Testing PostCard Component [User Portal]', () => { userEvent.click(screen.getByTestId('editPostBtn')); await wait(); - expect(toast.success).toBeCalledWith('Successfully edited the Post.'); + expect(toast.success).toBeCalledWith('Post updated Successfully'); }); test('Delete post should work properly', async () => { diff --git a/src/components/UserPortal/PostCard/PostCard.tsx b/src/components/UserPortal/PostCard/PostCard.tsx index dda296d403..d1bfbb1391 100644 --- a/src/components/UserPortal/PostCard/PostCard.tsx +++ b/src/components/UserPortal/PostCard/PostCard.tsx @@ -180,10 +180,10 @@ export default function postCard(props: InterfacePostCard): JSX.Element { setCommentInput(''); setNumComments((numComments) => numComments + 1); - const newComment: any = { - id: createEventData.createComment._id, + const newComment: InterfaceCommentCardProps = { + id: createEventData.createComment.id, creator: { - id: createEventData.createComment.creator.id, + id: createEventData.createComment.creator._id, firstName: createEventData.createComment.creator.firstName, lastName: createEventData.createComment.creator.lastName, email: createEventData.createComment.creator.email, @@ -214,7 +214,7 @@ export default function postCard(props: InterfacePostCard): JSX.Element { props.fetchPosts(); toggleEditPost(); - toast.success('Successfully edited the Post.'); + toast.success(tCommon('updatedSuccessfully', { item: 'Post' })); } catch (error: unknown) { /* istanbul ignore next */ errorHandler(t, error); @@ -287,7 +287,7 @@ export default function postCard(props: InterfacePostCard): JSX.Element { {props.title} - Posted On: {props.postedAt} + {t('postedOn', { date: props.postedAt })} {props.text} @@ -302,7 +302,7 @@ export default function postCard(props: InterfacePostCard): JSX.Element { data-testid={'viewPostBtn'} onClick={toggleViewPost} > - View Post + {t('viewPost')} @@ -339,7 +339,7 @@ export default function postCard(props: InterfacePostCard): JSX.Element {

Comments

{numComments ? ( - comments.map((comment: any, index: any) => { + comments.map((comment, index: number) => { const cardProps: InterfaceCommentCardProps = { id: comment.id, creator: { @@ -415,7 +415,7 @@ export default function postCard(props: InterfacePostCard): JSX.Element {

- Edit Post + {t('editPost')}

@@ -439,7 +439,7 @@ export default function postCard(props: InterfacePostCard): JSX.Element { data-testid={'editPostBtn'} onClick={handleEditPost} > - Edit Post + {t('editPost')}
diff --git a/src/components/UserPortal/StartPostModal/StartPostModal.tsx b/src/components/UserPortal/StartPostModal/StartPostModal.tsx index 036bcd904e..91f3563147 100644 --- a/src/components/UserPortal/StartPostModal/StartPostModal.tsx +++ b/src/components/UserPortal/StartPostModal/StartPostModal.tsx @@ -60,7 +60,7 @@ const startPostModal = ({ /* istanbul ignore next */ if (data) { toast.dismiss(); - toast.success('Your post is now visible in the feed.'); + toast.success(t('postNowVisibleInFeed')); fetchPosts(); handleHide(); } diff --git a/src/components/UserPortal/UserSidebarOrg/UserSidebarOrg.tsx b/src/components/UserPortal/UserSidebarOrg/UserSidebarOrg.tsx index 7d78d3765e..b56d5ea085 100644 --- a/src/components/UserPortal/UserSidebarOrg/UserSidebarOrg.tsx +++ b/src/components/UserPortal/UserSidebarOrg/UserSidebarOrg.tsx @@ -150,7 +150,7 @@ const UserSidebarOrg = ({ } />
- {name} + {tCommon(name)} )} diff --git a/src/components/UsersTableItem/UsersTableItem.tsx b/src/components/UsersTableItem/UsersTableItem.tsx index 2b35489066..9d6ec65187 100644 --- a/src/components/UsersTableItem/UsersTableItem.tsx +++ b/src/components/UsersTableItem/UsersTableItem.tsx @@ -56,7 +56,7 @@ const UsersTableItem = (props: Props): JSX.Element => { }, }); if (data) { - toast.success('Removed User from Organization successfully'); + toast.success(tCommon('removedSuccessfully', { item: 'User' })); resetAndRefetch(); } } catch (error: unknown) { diff --git a/src/index.tsx b/src/index.tsx index 015f0cac2a..28af9b58d7 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -25,7 +25,6 @@ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; import App from './App'; import { store } from './state/store'; -import './utils/i18n'; import { BACKEND_URL, REACT_APP_BACKEND_WEBSOCKET_URL, @@ -44,14 +43,16 @@ const theme = createTheme({ }, }); import useLocalStorage from 'utils/useLocalstorage'; +import i18n from './utils/i18n'; const { getItem } = useLocalStorage(); - const authLink = setContext((_, { headers }) => { + const lng = i18n.language; return { headers: { ...headers, authorization: 'Bearer ' + getItem('token') || '', + 'Accept-Language': lng, }, }; }); diff --git a/src/screens/LoginPage/LoginPage.tsx b/src/screens/LoginPage/LoginPage.tsx index 90b2b28b49..24b247e427 100644 --- a/src/screens/LoginPage/LoginPage.tsx +++ b/src/screens/LoginPage/LoginPage.tsx @@ -34,6 +34,7 @@ import { socialMediaLinks } from '../../constants'; import styles from './LoginPage.module.css'; import type { InterfaceQueryOrganizationListObject } from 'utils/interfaces'; import { Autocomplete, TextField } from '@mui/material'; +import i18n from 'utils/i18n'; const loginPage = (): JSX.Element => { const { t } = useTranslation('translation', { keyPrefix: 'loginPage' }); @@ -290,6 +291,7 @@ const loginPage = (): JSX.Element => { /* istanbul ignore next */ if (loginData) { + i18n.changeLanguage(loginData.login.appUserProfile.appLanguageCode); const { login } = loginData; const { user, appUserProfile } = login; const isAdmin: boolean = diff --git a/src/screens/MemberDetail/MemberDetail.tsx b/src/screens/MemberDetail/MemberDetail.tsx index 49b9f60a7a..be9b891b3c 100644 --- a/src/screens/MemberDetail/MemberDetail.tsx +++ b/src/screens/MemberDetail/MemberDetail.tsx @@ -185,7 +185,7 @@ const MemberDetail: React.FC = ({ id }): JSX.Element => { setItem('Email', email); setItem('UserImage', image); } - toast.success('Successful updated'); + toast.success(tCommon('successfullyUpdated')); } } catch (error: unknown) { if (error instanceof Error) { @@ -490,7 +490,6 @@ const MemberDetail: React.FC = ({ id }): JSX.Element => {