diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index ee98c5bdb0..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -# Contains the PDF file of the Tag as JSON string, thus does not need to be linted -src/components/CheckIn/tagTemplate.ts -package.json -package-lock.json -tsconfig.json - -# Ignore the Docusaurus website subdirectory -docs/** \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 4b5c4d69ed..62c42dfca0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -33,8 +33,30 @@ "jest", "import", "eslint-plugin-tsdoc", - "prettier" + "prettier", + "markdown" ], + + "overrides": [ + { + "files": ["**/*.md"], + "processor": "markdown/markdown" + }, + { + "files": ["**/*.md/*.js"], + "rules": { + "no-unused-vars": "off", + "no-undef": "off" + } + }, + { + "files": ["*.js"], + "rules": { + "@typescript-eslint/explicit-function-return-type": "off" + } + } + ], + "rules": { "react/destructuring-assignment": "error", "@typescript-eslint/explicit-module-boundary-types": "error", @@ -149,17 +171,15 @@ "**/*.less", "**/*.json", "**/*.svg", + "src/components/CheckIn/tagTemplate.ts", + "package.json", + "package-lock.json", + "tsconfig.json", + "docs/**", + "examples/**", "docs/docusaurus.config.ts", "docs/sidebars.ts", "docs/src/**", "docs/blog/**" - ], - "overrides": [ - { - "files": ["*.js"], - "rules": { - "@typescript-eslint/explicit-function-return-type": "off" - } - } ] } diff --git a/INSTALLATION.md b/INSTALLATION.md index 3c09f69e33..72d39def5a 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -16,6 +16,16 @@ This document provides instructions on how to set up and start a running instanc - [Installation using Docker](#installation-using-docker) - [Prerequisites](#prerequisites-1) - [Development Setup](#development-setup) +- [Talawa-Admin Service Setup Guide](#talawa-admin-service-setup-guide) + - [Prerequisites](#prerequisites-2) + - [Service Configuration](#service-configuration) + - [1. **Copy the `talawa_admin.service` file**](#1-copy-the-talawa_adminservice-file) + - [2. **Verify the CODEROOT Path**](#2-verify-the-coderoot-path) + - [3. **Set the Correct Working Directory**](#3-set-the-correct-working-directory) + - [4. **Ensure the `.env` File Exists**](#4-ensure-the-env-file-exists) + - [5. **Adjust User and Group**](#5-adjust-user-and-group) + - [Steps to Enable and Manage the Service](#steps-to-enable-and-manage-the-service) + - [Troubleshooting](#troubleshooting) @@ -380,3 +390,84 @@ If you don't want this hook to run, you can manually opt out of this using the `
``` + +# Talawa-Admin Service Setup Guide + +This guide outlines the steps to set up and manage the Talawa-Admin service on a Linux server using `systemd`. + +## Prerequisites + +- Firstly, You should have locally setup the Talawa-Admin repo using [Setting up this repository](#setting-up-this-repository) +- Ensure **Node.js** and **npm** are correctly installed and available for the specified user and group. +- It’s recommended to use **nvm** (Node Version Manager) for better management of different Node.js versions. +- Ensure you have root or sudo access to configure systemd services. +- Create a dedicated service user: + ```bash + sudo useradd -r -s /bin/false talawa_admin + sudo groupadd -r talawa_admin + sudo usermod -a -G talawa_admin talawa_admin + # Set proper directory permissions + sudo chown -R talawa_admin:talawa_admin /path/to/talawa-admin + sudo chmod 750 /path/to/talawa-admin + sudo find /path/to/talawa-admin -type f -exec chmod 640 {} \ + sudo chmod 600 /path/to/talawa-admin/.env + ``` + +--- + +### Service Configuration + +#### 1. **Copy the `talawa_admin.service` file** + - Place the `talawa_admin.service` file in the appropriate systemd directory based on your Linux distribution: + - For most distributions: `/etc/systemd/system/` + - For systems using `systemd`, this will be the default directory. + +#### 2. **Verify the CODEROOT Path** + - Ensure that the `CODEROOT` environment variable matches the absolute path to the Talawa-Admin code directory. + +#### 3. **Set the Correct Working Directory** + - Always use the absolute path for the `WorkingDirectory`. Do **not** use `$CODEROOT` in the `WorkingDirectory` field. + +#### 4. **Ensure the `.env` File Exists** + - Verify that the path in the `EnvironmentFile` line points to a valid `.env` file located in the root directory of the Talawa-Admin repository. + +#### 5. **Adjust User and Group** + - Modify the `User` and `Group` settings to match the user account intended to run the service. + +--- + +### Steps to Enable and Manage the Service + +1. **Reload the systemd daemon** to apply changes: + ```bash + sudo systemctl daemon-reload + ``` + +2. **Start the Talawa-Admin Service**: + ```bash + sudo systemctl start talawa_admin.service + ``` + +3. **Stop the Talawa-Admin Service**: + ```bash + sudo systemctl stop talawa_admin.service + ``` + +4. **Enable the Service to Start on Boot**: + ```bash + sudo systemctl enable talawa_admin.service + ``` + +--- + +### Troubleshooting + +- If you encounter any issues, you can check the status and logs of the service: + ```bash + sudo systemctl status talawa_admin.service + sudo journalctl -u talawa_admin.service + ``` + +--- + +By following these steps, you can set up and manage the Talawa-Admin service efficiently on your Linux server. \ No newline at end of file diff --git a/examples/linux/systemd/talawa_admin.service b/examples/linux/systemd/talawa_admin.service new file mode 100644 index 0000000000..87a2bf9082 --- /dev/null +++ b/examples/linux/systemd/talawa_admin.service @@ -0,0 +1,65 @@ + +################################################################################ +# +# READ ALL STEPS BEFORE PROCEEDING +# +# 0) Ensure that Node.js and npm are correctly installed and available for the +# specified user and group. +# Use nvm for better interaction with different node versions. +# 1) Place this file in the appropriate systemd directory based on your Linux +# distribution, e.g., /etc/systemd/system/. +# 2) Verify the CODEROOT path matches the Talawa-Admin code directory. +# 3) Always add the absolute path of talawa-admin directory to WorkingDirectory don't use $CODEROOT. +# 4) Ensure the EnvironmentFile path points to a valid .env file for the service. +# 5) Adjust the User and Group to match the user account intended to run the service. +# 6) Run the command "sudo systemctl daemon-reload" after saving changes. +# 7) Use "sudo systemctl start talawa_admin.service" to start the service. +# 8) Use "sudo systemctl stop talawa_admin.service" to stop the service. +# 9) Use "sudo systemctl enable talawa_admin.service" to start the service on boot. +# +################################################################################ + +[Unit] +Description=Talawa-Admin Service +After=network.target + +[Service] +User=talawa_admin +Group=talawa_admin +Environment=CODEROOT=path/to/your/talawa-admin +Environment=NODE_ENV=production + +# Absolute path is needed for working directory +WorkingDirectory=/path/to/your/talawa-admin + +################################################################################ +# No need to edit anything below here +################################################################################ + +EnvironmentFile=$CODEROOT/.env +ExecStart=/bin/bash -c '\ + if [ -f "$HOME/.nvm/nvm.sh" ]; then \ + . "$HOME/.nvm/nvm.sh" && \ + if nvm use default; then \ + exec npm run serve \ + else \ + echo "Failed to set Node.js version" >&2; \ + exit 1; \ + fi \ + else \ + echo "NVM not found" >&2; \ + exit 1; \ + fi' + +Restart=on-failure +RemainAfterExit=yes +ProtectSystem=full +NoNewPrivileges=true +PrivateTmp=true +Type=simple +RuntimeDirectory=talawa-admin + + +[Install] +WantedBy=multi-user.target + diff --git a/package-lock.json b/package-lock.json index 3b7c816f00..d30b4419a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -80,7 +80,6 @@ "@babel/preset-env": "^7.26.0", "@babel/preset-react": "^7.25.7", "@babel/preset-typescript": "^7.26.0", - "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.0.1", "@testing-library/user-event": "^12.1.10", @@ -107,6 +106,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.10.0", + "eslint-plugin-markdown": "^5.1.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.37.1", "eslint-plugin-tsdoc": "^0.3.0", @@ -5887,6 +5887,7 @@ "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -5906,6 +5907,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5922,6 +5924,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, + "peer": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -5936,6 +5939,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -5947,7 +5951,8 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@testing-library/jest-dom": { "version": "6.6.3", @@ -6032,7 +6037,8 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -8511,6 +8517,17 @@ "node": ">=10" } }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/character-entities-html4": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", @@ -8529,6 +8546,17 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -9700,7 +9728,8 @@ "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/dom-align": { "version": "1.12.4", @@ -10433,6 +10462,22 @@ } } }, + "node_modules/eslint-plugin-markdown": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-5.1.0.tgz", + "integrity": "sha512-SJeyKko1K6GwI0AN6xeCDToXDkfKZfXcexA6B+O2Wr2btUS9GrC+YgwSyVli5DJnctUHjFXcQ2cqTaAmVoLi2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^0.8.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, "node_modules/eslint-plugin-prettier": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", @@ -12359,6 +12404,32 @@ "loose-envify": "^1.0.0" } }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -12528,6 +12599,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -12616,6 +12698,17 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -15435,6 +15528,7 @@ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, + "peer": true, "bin": { "lz-string": "bin/bin.js" } @@ -15560,6 +15654,55 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/@types/mdast": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", + "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-to-hast": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", @@ -15580,6 +15723,17 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", @@ -15610,6 +15764,27 @@ "node": ">= 8" } }, + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, "node_modules/micromark-util-character": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", @@ -16468,6 +16643,36 @@ "node": ">= 0.10" } }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", diff --git a/package.json b/package.json index cd52ff6453..64c063a918 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,6 @@ "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.0.1", "@testing-library/user-event": "^12.1.10", - "@testing-library/dom": "^10.4.0", "@types/inquirer": "^9.0.7", "@types/jest": "^26.0.24", "@types/js-cookie": "^3.0.6", @@ -144,6 +143,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.10.0", + "eslint-plugin-markdown": "^5.1.0", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.37.1", "eslint-plugin-tsdoc": "^0.3.0", diff --git a/src/screens/UserPortal/Volunteer/VolunteerManagement.spec.tsx b/src/screens/UserPortal/Volunteer/VolunteerManagement.spec.tsx index 6fb9c218f9..d5f1957923 100644 --- a/src/screens/UserPortal/Volunteer/VolunteerManagement.spec.tsx +++ b/src/screens/UserPortal/Volunteer/VolunteerManagement.spec.tsx @@ -1,7 +1,6 @@ import React from 'react'; import type { RenderResult } from '@testing-library/react'; -import { screen, waitFor } from '@testing-library/dom'; -import { render } from '@testing-library/react'; +import { screen, waitFor, render } from '@testing-library/react'; import { MockedProvider } from '@apollo/react-testing'; import { I18nextProvider } from 'react-i18next'; import i18n from 'utils/i18nForTest';