diff --git a/.vs/JTT_CrM/v17/.suo b/.vs/JTT_CrM/v17/.suo new file mode 100644 index 0000000..e5837e9 Binary files /dev/null and b/.vs/JTT_CrM/v17/.suo differ diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..4b33db9 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,9 @@ +{ + "ExpandedNodes": [ + "", + "\\src", + "\\src\\components" + ], + "SelectedNode": "\\src\\components\\Menu.js", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000..b9dc2e1 Binary files /dev/null and b/.vs/slnx.sqlite differ diff --git a/Doc/commande.txt b/Doc/commande.txt new file mode 100644 index 0000000..5e46291 --- /dev/null +++ b/Doc/commande.txt @@ -0,0 +1,12 @@ +cd server-api + +npm install --save body-parser +npm install --save cors +npm install --save mysql +npm install --save express +npm install -g nodemon +npm install --save-dev nodemon + + +npm install --save axios +npm install @mui/material @emotion/react @emotion/styled \ No newline at end of file diff --git a/README.md b/README.md index 5b89ad8..72a1067 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ [![Quality Gate Status](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=jtt_crm&metric=alert_status&token=4e704a73064f9dd9388eb33b182fcfe6f8aed2a4)](https://codefirst.iut.uca.fr/sonar/dashboard?id=jtt_crm) [![Code Smells](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=jtt_crm&metric=code_smells&token=4e704a73064f9dd9388eb33b182fcfe6f8aed2a4)](https://codefirst.iut.uca.fr/sonar/dashboard?id=jtt_crm) [![Lines of Code](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=jtt_crm&metric=ncloc&token=4e704a73064f9dd9388eb33b182fcfe6f8aed2a4)](https://codefirst.iut.uca.fr/sonar/dashboard?id=jtt_crm) -[![Quality Gate Status](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=jtt_crm&metric=alert_status&token=4e704a73064f9dd9388eb33b182fcfe6f8aed2a4)](https://codefirst.iut.uca.fr/sonar/dashboard?id=jtt_crm) [![Bugs](https://codefirst.iut.uca.fr/sonar/api/project_badges/measure?project=jtt_crm&metric=bugs&token=4e704a73064f9dd9388eb33b182fcfe6f8aed2a4)](https://codefirst.iut.uca.fr/sonar/dashboard?id=jtt_crm) diff --git a/package-lock.json b/package-lock.json index 0af3c07..6583b16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,12 +15,12 @@ "@fullcalendar/list": "^5.11.3", "@fullcalendar/react": "^5.11.2", "@fullcalendar/timegrid": "^5.11.3", - "@mui/material": "^5.10.13", + "@mui/material": "^5.10.15", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "addeventlistener": "^2.0.0", - "axios": "^1.1.3", + "axios": "^1.2.0", "chart": "^0.1.2", "chart.js": "^3.9.1", "crypto-js": "^4.1.1", @@ -1813,11 +1813,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.10" }, "engines": { "node": ">=6.9.0" @@ -3234,14 +3234,14 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@mui/base": { - "version": "5.0.0-alpha.105", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.105.tgz", - "integrity": "sha512-4IPBcJQIgVVXQvN6DQMoCHed52GBtwSqYs0jD0dDcMR3o76AodQtpEeWFz3p7mJoc6f/IHBl9U6jEfL1r/kM4g==", + "version": "5.0.0-alpha.107", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.107.tgz", + "integrity": "sha512-HX/BD8CSe+Y/dpbZ5aKJScJhKQ/Hw6du2yd68Upv2cO67bwixyZ64h3aNcdDu7RQzI7nrZQm0JykffP1Orgq0g==", "dependencies": { - "@babel/runtime": "^7.19.0", + "@babel/runtime": "^7.20.1", "@emotion/is-prop-valid": "^1.2.0", - "@mui/types": "^7.2.0", - "@mui/utils": "^5.10.9", + "@mui/types": "^7.2.1", + "@mui/utils": "^5.10.15", "@popperjs/core": "^2.11.6", "clsx": "^1.2.1", "prop-types": "^15.8.1", @@ -3271,25 +3271,25 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.10.13", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.13.tgz", - "integrity": "sha512-zWkWPV/SaNdsIdxAWiuVGZ+Ue3BkfSIlU/BFIrJmuUcwiIa7gQsbI/DOpj1KzLvqZhdEe2wC1aG4nCHfzgc1Hg==", + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.15.tgz", + "integrity": "sha512-xFcS0LpdF0Q1qJrrNsYUv9PU+ovvhCEPTOMw2jcpEFtl3CA87dLpvztORR5oE2UBFjWF7qLQLOwboQU1+xC7Cw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/material": { - "version": "5.10.13", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.13.tgz", - "integrity": "sha512-TkkT1rNc0/hhL4/+zv4gYcA6egNWBH/1Tz+azoTnQIUdZ32fgwFI2pFX2KVJNTt30xnLznxDWtTv7ilmJQ52xw==", - "dependencies": { - "@babel/runtime": "^7.19.0", - "@mui/base": "5.0.0-alpha.105", - "@mui/core-downloads-tracker": "^5.10.13", - "@mui/system": "^5.10.13", - "@mui/types": "^7.2.0", - "@mui/utils": "^5.10.9", + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.15.tgz", + "integrity": "sha512-OqoHfUtVMppFHgk2M95j+pR8MWfLKhzSdz4aKEfIpFrHIHbYang+oY7Iy/exX+vqpZSEGHgHQ0cGX0hGTGx9cg==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@mui/base": "5.0.0-alpha.107", + "@mui/core-downloads-tracker": "^5.10.15", + "@mui/system": "^5.10.15", + "@mui/types": "^7.2.1", + "@mui/utils": "^5.10.15", "@types/react-transition-group": "^4.4.5", "clsx": "^1.2.1", "csstype": "^3.1.1", @@ -3329,12 +3329,12 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/@mui/private-theming": { - "version": "5.10.9", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.9.tgz", - "integrity": "sha512-BN7/CnsVPVyBaQpDTij4uV2xGYHHHhOgpdxeYLlIu+TqnsVM7wUeF+37kXvHovxM6xmL5qoaVUD98gDC0IZnHg==", + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.15.tgz", + "integrity": "sha512-l7CsUj5kYdYz118/JHSvZZTYE9WnIWwln0td5jYATnYw9cNX4ygD6AkKOUYZ1Jitp1YLJqcO8jCP9E5/Nql9IQ==", "dependencies": { - "@babel/runtime": "^7.19.0", - "@mui/utils": "^5.10.9", + "@babel/runtime": "^7.20.1", + "@mui/utils": "^5.10.15", "prop-types": "^15.8.1" }, "engines": { @@ -3355,12 +3355,12 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.10.8", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.8.tgz", - "integrity": "sha512-w+y8WI18EJV6zM/q41ug19cE70JTeO6sWFsQ7tgePQFpy6ToCVPh0YLrtqxUZXSoMStW5FMw0t9fHTFAqPbngw==", + "version": "5.10.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.14.tgz", + "integrity": "sha512-bgKdM57ExogWpIfhL/ngSlzF4FhbH00vYF+Y5VALTob4uslFqje0xzoWmbfcCn4cZt2NXxZJIwhsq4vzo5itlw==", "dependencies": { - "@babel/runtime": "^7.19.0", - "@emotion/cache": "^11.10.3", + "@babel/runtime": "^7.20.1", + "@emotion/cache": "^11.10.5", "csstype": "^3.1.1", "prop-types": "^15.8.1" }, @@ -3386,15 +3386,15 @@ } }, "node_modules/@mui/system": { - "version": "5.10.13", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.13.tgz", - "integrity": "sha512-Xzx26Asu5fVlm0ucm+gnJmeX4Y1isrpVDvqxX4yJaOT7Fzmd8Lfq9ih3QMfZajns5LMtUiOuCQlVFRtUG5IY7A==", - "dependencies": { - "@babel/runtime": "^7.19.0", - "@mui/private-theming": "^5.10.9", - "@mui/styled-engine": "^5.10.8", - "@mui/types": "^7.2.0", - "@mui/utils": "^5.10.9", + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.15.tgz", + "integrity": "sha512-WZmgmpYTMXAaD++QetaaM/miwhNh1JJY1dH7MJH/3Fuv3r3gnhfzE6A55lDqWxkQmlWUO2DCn/cnNZ0FkSdZUg==", + "dependencies": { + "@babel/runtime": "^7.20.1", + "@mui/private-theming": "^5.10.15", + "@mui/styled-engine": "^5.10.14", + "@mui/types": "^7.2.1", + "@mui/utils": "^5.10.15", "clsx": "^1.2.1", "csstype": "^3.1.1", "prop-types": "^15.8.1" @@ -3425,9 +3425,9 @@ } }, "node_modules/@mui/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz", - "integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.1.tgz", + "integrity": "sha512-c5mSM7ivD8EsqK6HUi9hQPr5V7TJ/IRThUQ9nWNYPdhCGriTSQV4vL6DflT99LkM+wLiIS1rVjphpEWxERep7A==", "peerDependencies": { "@types/react": "*" }, @@ -3438,11 +3438,11 @@ } }, "node_modules/@mui/utils": { - "version": "5.10.9", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.9.tgz", - "integrity": "sha512-2tdHWrq3+WCy+G6TIIaFx3cg7PorXZ71P375ExuX61od1NOAJP1mK90VxQ8N4aqnj2vmO3AQDkV4oV2Ktvt4bA==", + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.15.tgz", + "integrity": "sha512-6AW4MLBUijJi31hxx+6utTJM2q/4hbO+QiMdtwM+f4Iy+BfFnh/elhb08apxNYLfuugPnXXpkDmzEjg+8uDU9g==", "dependencies": { - "@babel/runtime": "^7.19.0", + "@babel/runtime": "^7.20.1", "@types/prop-types": "^15.7.5", "@types/react-is": "^16.7.1 || ^17.0.0", "prop-types": "^15.8.1", @@ -5490,9 +5490,9 @@ } }, "node_modules/axios": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz", - "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.0.tgz", + "integrity": "sha512-zT7wZyNYu3N5Bu0wuZ6QccIf93Qk1eV8LOewxgjOZFd2DenOs98cJ7+Y6703d0wkaXGY6/nZd4EweJaHz9uzQw==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -15205,9 +15205,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.0", @@ -19105,11 +19105,11 @@ } }, "@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.10" } }, "@babel/runtime-corejs3": { @@ -20102,14 +20102,14 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "@mui/base": { - "version": "5.0.0-alpha.105", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.105.tgz", - "integrity": "sha512-4IPBcJQIgVVXQvN6DQMoCHed52GBtwSqYs0jD0dDcMR3o76AodQtpEeWFz3p7mJoc6f/IHBl9U6jEfL1r/kM4g==", + "version": "5.0.0-alpha.107", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.107.tgz", + "integrity": "sha512-HX/BD8CSe+Y/dpbZ5aKJScJhKQ/Hw6du2yd68Upv2cO67bwixyZ64h3aNcdDu7RQzI7nrZQm0JykffP1Orgq0g==", "requires": { - "@babel/runtime": "^7.19.0", + "@babel/runtime": "^7.20.1", "@emotion/is-prop-valid": "^1.2.0", - "@mui/types": "^7.2.0", - "@mui/utils": "^5.10.9", + "@mui/types": "^7.2.1", + "@mui/utils": "^5.10.15", "@popperjs/core": "^2.11.6", "clsx": "^1.2.1", "prop-types": "^15.8.1", @@ -20124,21 +20124,21 @@ } }, "@mui/core-downloads-tracker": { - "version": "5.10.13", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.13.tgz", - "integrity": "sha512-zWkWPV/SaNdsIdxAWiuVGZ+Ue3BkfSIlU/BFIrJmuUcwiIa7gQsbI/DOpj1KzLvqZhdEe2wC1aG4nCHfzgc1Hg==" + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.15.tgz", + "integrity": "sha512-xFcS0LpdF0Q1qJrrNsYUv9PU+ovvhCEPTOMw2jcpEFtl3CA87dLpvztORR5oE2UBFjWF7qLQLOwboQU1+xC7Cw==" }, "@mui/material": { - "version": "5.10.13", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.13.tgz", - "integrity": "sha512-TkkT1rNc0/hhL4/+zv4gYcA6egNWBH/1Tz+azoTnQIUdZ32fgwFI2pFX2KVJNTt30xnLznxDWtTv7ilmJQ52xw==", - "requires": { - "@babel/runtime": "^7.19.0", - "@mui/base": "5.0.0-alpha.105", - "@mui/core-downloads-tracker": "^5.10.13", - "@mui/system": "^5.10.13", - "@mui/types": "^7.2.0", - "@mui/utils": "^5.10.9", + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.10.15.tgz", + "integrity": "sha512-OqoHfUtVMppFHgk2M95j+pR8MWfLKhzSdz4aKEfIpFrHIHbYang+oY7Iy/exX+vqpZSEGHgHQ0cGX0hGTGx9cg==", + "requires": { + "@babel/runtime": "^7.20.1", + "@mui/base": "5.0.0-alpha.107", + "@mui/core-downloads-tracker": "^5.10.15", + "@mui/system": "^5.10.15", + "@mui/types": "^7.2.1", + "@mui/utils": "^5.10.15", "@types/react-transition-group": "^4.4.5", "clsx": "^1.2.1", "csstype": "^3.1.1", @@ -20155,53 +20155,53 @@ } }, "@mui/private-theming": { - "version": "5.10.9", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.9.tgz", - "integrity": "sha512-BN7/CnsVPVyBaQpDTij4uV2xGYHHHhOgpdxeYLlIu+TqnsVM7wUeF+37kXvHovxM6xmL5qoaVUD98gDC0IZnHg==", + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.10.15.tgz", + "integrity": "sha512-l7CsUj5kYdYz118/JHSvZZTYE9WnIWwln0td5jYATnYw9cNX4ygD6AkKOUYZ1Jitp1YLJqcO8jCP9E5/Nql9IQ==", "requires": { - "@babel/runtime": "^7.19.0", - "@mui/utils": "^5.10.9", + "@babel/runtime": "^7.20.1", + "@mui/utils": "^5.10.15", "prop-types": "^15.8.1" } }, "@mui/styled-engine": { - "version": "5.10.8", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.8.tgz", - "integrity": "sha512-w+y8WI18EJV6zM/q41ug19cE70JTeO6sWFsQ7tgePQFpy6ToCVPh0YLrtqxUZXSoMStW5FMw0t9fHTFAqPbngw==", + "version": "5.10.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.10.14.tgz", + "integrity": "sha512-bgKdM57ExogWpIfhL/ngSlzF4FhbH00vYF+Y5VALTob4uslFqje0xzoWmbfcCn4cZt2NXxZJIwhsq4vzo5itlw==", "requires": { - "@babel/runtime": "^7.19.0", - "@emotion/cache": "^11.10.3", + "@babel/runtime": "^7.20.1", + "@emotion/cache": "^11.10.5", "csstype": "^3.1.1", "prop-types": "^15.8.1" } }, "@mui/system": { - "version": "5.10.13", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.13.tgz", - "integrity": "sha512-Xzx26Asu5fVlm0ucm+gnJmeX4Y1isrpVDvqxX4yJaOT7Fzmd8Lfq9ih3QMfZajns5LMtUiOuCQlVFRtUG5IY7A==", - "requires": { - "@babel/runtime": "^7.19.0", - "@mui/private-theming": "^5.10.9", - "@mui/styled-engine": "^5.10.8", - "@mui/types": "^7.2.0", - "@mui/utils": "^5.10.9", + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.10.15.tgz", + "integrity": "sha512-WZmgmpYTMXAaD++QetaaM/miwhNh1JJY1dH7MJH/3Fuv3r3gnhfzE6A55lDqWxkQmlWUO2DCn/cnNZ0FkSdZUg==", + "requires": { + "@babel/runtime": "^7.20.1", + "@mui/private-theming": "^5.10.15", + "@mui/styled-engine": "^5.10.14", + "@mui/types": "^7.2.1", + "@mui/utils": "^5.10.15", "clsx": "^1.2.1", "csstype": "^3.1.1", "prop-types": "^15.8.1" } }, "@mui/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.0.tgz", - "integrity": "sha512-lGXtFKe5lp3UxTBGqKI1l7G8sE2xBik8qCfrLHD5olwP/YU0/ReWoWT7Lp1//ri32dK39oPMrJN8TgbkCSbsNA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.1.tgz", + "integrity": "sha512-c5mSM7ivD8EsqK6HUi9hQPr5V7TJ/IRThUQ9nWNYPdhCGriTSQV4vL6DflT99LkM+wLiIS1rVjphpEWxERep7A==", "requires": {} }, "@mui/utils": { - "version": "5.10.9", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.9.tgz", - "integrity": "sha512-2tdHWrq3+WCy+G6TIIaFx3cg7PorXZ71P375ExuX61od1NOAJP1mK90VxQ8N4aqnj2vmO3AQDkV4oV2Ktvt4bA==", + "version": "5.10.15", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.10.15.tgz", + "integrity": "sha512-6AW4MLBUijJi31hxx+6utTJM2q/4hbO+QiMdtwM+f4Iy+BfFnh/elhb08apxNYLfuugPnXXpkDmzEjg+8uDU9g==", "requires": { - "@babel/runtime": "^7.19.0", + "@babel/runtime": "^7.20.1", "@types/prop-types": "^15.7.5", "@types/react-is": "^16.7.1 || ^17.0.0", "prop-types": "^15.8.1", @@ -21711,9 +21711,9 @@ "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==" }, "axios": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz", - "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.0.tgz", + "integrity": "sha512-zT7wZyNYu3N5Bu0wuZ6QccIf93Qk1eV8LOewxgjOZFd2DenOs98cJ7+Y6703d0wkaXGY6/nZd4EweJaHz9uzQw==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -28595,9 +28595,9 @@ } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { "version": "0.15.0", diff --git a/package.json b/package.json index 0965eb6..10f2b72 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,12 @@ "@fullcalendar/list": "^5.11.3", "@fullcalendar/react": "^5.11.2", "@fullcalendar/timegrid": "^5.11.3", - "@mui/material": "^5.10.13", + "@mui/material": "^5.10.15", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "addeventlistener": "^2.0.0", - "axios": "^1.1.3", + "axios": "^1.2.0", "chart": "^0.1.2", "chart.js": "^3.9.1", "crypto-js": "^4.1.1", diff --git a/server-api/api.js b/server-api/api.js index e90b4fd..c95ec21 100644 --- a/server-api/api.js +++ b/server-api/api.js @@ -86,6 +86,20 @@ app.get('/User/Auth/:login/:pwd', (req, res) => { }); }); +app.get('/User/Auth/Password/:id/:pwd', (req, res) => { + + const id = req.params.id; + const pwd = req.params.pwd; + let sql = 'SELECT login FROM users WHERE iduser = ? AND password = ?'; + + db.query(sql, [id, pwd], (err, result) => { + if (err) throw err; + + console.log(result); + res.send(result); + }); +}); + app.get('/User/Role/:login', (req, res) => { const login = req.params.login; @@ -155,18 +169,45 @@ app.put('/User/Update/:id', (req, res) => { const id = req.params.id; let form = req.body; - const sql = `UPDATE users SET lastname = ?, firstname = ?, idrole = ?, login = ?, password = ?, phone = ?, mail = ? WHERE (iduser = ?)`; - db.query(sql, [form.lastname, form.firstname, form.idrole, form.login, form.password, form.phone, form.mail, id], (err, result) => { + const sql = `UPDATE users SET lastname = ?, firstname = ?, idrole = ?, login = ?, phone = ?, mail = ? WHERE (iduser = ?)`; + db.query(sql, [form.lastname, form.firstname, form.idrole, form.login, form.phone, form.mail, id], (err, result) => { + if (err) throw err; + console.log(result); + res.send('Post update...'); + }); +}); + +app.put('/User/Update/Password/:id', (req, res) => { + + const id = req.params.id; + let form = req.body; + + console.log(form.newPassword); + + const sql = `UPDATE users SET password = ? WHERE (iduser = ?)`; + db.query(sql, [form.newPassword, id], (err, result) => { + if (err) throw err; + console.log(result); + res.send('Post password update...'); + }); +}); + +app.delete('/User/Delete/:id', (req, res) => { + + const id = req.params.id; + + const sql = `DELETE FROM users WHERE (iduser = ?)`; + db.query(sql, [id], (err, result) => { if (err) throw err; console.log(result); - res.send('Post added...'); + res.send('Post delete...'); }); }); //Api pour les contacts de la page repertoire -app.get('/Contact/All', (req, res) => { - let sql = 'SELECT * FROM contacts ORDER BY idcontact'; +app.get('/Contact/AllWithCustomerName', (req, res) => { + let sql = 'SELECT c.*, cu.name FROM contacts c, customers cu WHERE cu.idCustomer = c.idCustomer ORDER BY idcontact'; db.query(sql, (err, result) => { if (err) throw err; console.log(result); diff --git a/src/App.js b/src/App.js index 1b97d3b..94bb84f 100644 --- a/src/App.js +++ b/src/App.js @@ -4,6 +4,7 @@ import Compte from './pages/Compte'; import Connexion from './pages/Connexion'; import Admin_modif from './pages/Admin_modif'; import Admin_supp from './pages/Admin_supp'; +import Admin_devis from './pages/Admin_devis'; import Dashboard from './pages/Dashboard'; import Analyse from './pages/Analyse'; import Admin_list from './pages/Admin_list'; @@ -13,6 +14,8 @@ import Repertoire from './pages/Repertoire'; import Parametres from './pages/Parametres'; import Chargement from './pages/Chargement'; import { Component } from 'fullcalendar'; +import RestartPassword from './pages/RestartPassword'; + diff --git a/src/components/NavigationAdmin.js b/src/components/NavigationAdmin.js index d1fc0d4..19db335 100644 --- a/src/components/NavigationAdmin.js +++ b/src/components/NavigationAdmin.js @@ -6,24 +6,25 @@ const NavigationAdmin = (props) => { return (
- - - - - - - - - - +
+ +
+
+ + + + + + + + + + + + +
); }; - -function changeColor() { - let b1 = document.querySelector('button'); - b1.style.backgroundColor = "rgb(170,170,170)"; -} - export default NavigationAdmin; \ No newline at end of file diff --git a/src/pages/Admin_create.js b/src/pages/Admin_create.js index 6523549..b9d2528 100644 --- a/src/pages/Admin_create.js +++ b/src/pages/Admin_create.js @@ -36,7 +36,6 @@ function Admin_create() { const formData = new FormData(event.currentTarget); const values = Object.fromEntries(formData.entries()); - {/* Verif value login exist déja */} console.log(values.firstname); api.get('/User/Exist/'+ values.login).then((response) => { const login = response.data; @@ -58,8 +57,7 @@ function Admin_create() { return (
- {/**/} - {/* Create a admin page */} +

Admin

Création d'utilisateur

diff --git a/src/pages/Admin_devis.js b/src/pages/Admin_devis.js new file mode 100644 index 0000000..0e5c7f1 --- /dev/null +++ b/src/pages/Admin_devis.js @@ -0,0 +1,24 @@ +import React, { useState, useEffect } from 'react'; +import axios from 'axios' +import NavigationAdmin from '../components/NavigationAdmin.js'; +import { TableContainer,Table,TableHead,TableBody,TableRow,TableCell } from '@mui/material'; +import { Paper } from '@mui/material'; + +const api = axios.create({ + baseURL: 'http://localhost:8080' + }) + +const Admin_devis = () => { + + return ( +
+ + +
+

Devis

+
+
+ ); +}; + +export default Admin_devis; \ No newline at end of file diff --git a/src/pages/Admin_list.js b/src/pages/Admin_list.js index d31c28a..67ff739 100644 --- a/src/pages/Admin_list.js +++ b/src/pages/Admin_list.js @@ -10,6 +10,11 @@ const api = axios.create({ function Admin_list() { + const [theme, setTheme] = useState("light"); + if (localStorage.getItem('theme') && localStorage.getItem("theme") !== '' && localStorage.getItem("theme") !== theme) { + setTheme(localStorage.getItem("theme")) + } + const [users, setUsers] = useState([]); const [selectedIdUser, setSelectedIdUser] = useState(); @@ -24,10 +29,10 @@ function Admin_list() { setSelectedIdUser(iduser); }; + return ( -
+ - {/* Create a page to delete an user in the admin page*/}

Admin

@@ -39,28 +44,6 @@ function Admin_list() {
- {/* -
- - -
-

- Dupont Jacques -

-

- Carreau Alexis -

-
- - -
- - -
- -
-
- */} @@ -94,7 +77,7 @@ function Admin_list() { - + ); }; diff --git a/src/pages/Admin_modif.js b/src/pages/Admin_modif.js index 5ef1fa3..d04aeb7 100644 --- a/src/pages/Admin_modif.js +++ b/src/pages/Admin_modif.js @@ -2,10 +2,11 @@ import axios from 'axios' import React, { useState, useEffect } from 'react'; import NavigationAdmin from '../components/NavigationAdmin.js'; import Admin from './Admin_create.js'; -import { useLocation } from "react-router-dom" +import { useLocation } from "react-router-dom"; import Select, { SelectChangeEvent } from '@mui/material/Select'; import MenuItem from '@mui/material/MenuItem'; import { NavLink } from 'react-router-dom'; +import { useNavigate } from "react-router-dom"; const api = axios.create({ baseURL: 'http://localhost:8080' @@ -24,6 +25,8 @@ function Admin_modif() { const [mail, setMail] = useState(); const [login, setLogin] = useState(); + const navigate = useNavigate(); + useEffect(() =>{ api.get('/Role/All/').then((response) => { setRoles(response.data); @@ -38,9 +41,9 @@ function Admin_modif() { setLastName(response.data[0].lastname); setFirstName(response.data[0].firstname); + setLogin(response.data[0].login); setPhone(response.data[0].phone); setMail(response.data[0].mail); - setLogin(response.data[0].login); }); }, []); @@ -81,12 +84,13 @@ function Admin_modif() { api.put(apiString, values).then((response) => { console.log(response.data); }); + + navigate("/Admin_list"); } return (
- {/* Create a admin page */}

Admin

Modification d'utilisateur

@@ -97,15 +101,16 @@ function Admin_modif() {

Nom :

Prénom :

+

Login :

Rôle :

-

Identifiant :

-

Identifiant :

-

Mot de passe :

+

Téléphone :

+

Mail :

+ -
- -
+ Réinitialiser le mot de passe
diff --git a/src/pages/Admin_supp.js b/src/pages/Admin_supp.js index 5279a0d..6a1db1d 100644 --- a/src/pages/Admin_supp.js +++ b/src/pages/Admin_supp.js @@ -1,66 +1,52 @@ import React, { useState, useEffect } from 'react'; import axios from 'axios' import NavigationAdmin from '../components/NavigationAdmin.js'; +import { NavLink, useLocation } from "react-router-dom"; import { TableContainer,Table,TableHead,TableBody,TableRow,TableCell } from '@mui/material'; import { Paper } from '@mui/material'; +import { useNavigate } from "react-router-dom"; const api = axios.create({ baseURL: 'http://localhost:8080' }) -const Admin_supp = () => { +function Admin_supp(){ - const [users, setUsers] = useState([]); - const [selectedIdUser, setSelectedIdUser] = useState(); + const location = useLocation(); + const { iduser } = location.state; + + const [selectedUser, setSelectedUsers] = useState([]); + + const navigate = useNavigate(); useEffect(() =>{ - api.get('/User/All/').then((response) => { - setUsers(response.data); - setSelectedIdUser(response.data[0].iduser); + const apiString = '/User/Id/' + iduser; + api.get(apiString).then((response) => { + console.log(response.data[0]); + setSelectedUsers(response.data[0]); }); }, []); - const handleClick = (event, iduser) => { - setSelectedIdUser(iduser); - }; + function checkDelete(event){ + + event.preventDefault(); + + const apiString = '/User/Delete/' + iduser; + api.delete(apiString).then((response) => { + console.log(response.data); + }); + + navigate("/Admin_list"); + } return (
- {/* Create a page to delete an user in the admin page*/}

Admin

Supression d'utilisateur

-
- - - - -
- {/* -
- - -
-

- Dupont Jacques -

-

- Carreau Alexis -

-
- - -
- - -
- -
-
- */} @@ -70,29 +56,24 @@ const Admin_supp = () => { Identifiant Téléphone Email - Rôle - {users.map((user) => ( - handleClick(event, user.iduser)} - selected={user.iduser === selectedIdUser} - > - {user.lastname} - {user.firstname} - {user.login} - {user.phone} - {user.mail} - {user.name} - - ))} + + {selectedUser.lastname} + {selectedUser.firstname} + {selectedUser.login} + {selectedUser.phone} + {selectedUser.mail} +
+
+ + Retour +
); diff --git a/src/pages/Compte.js b/src/pages/Compte.js index 71f3f7a..c9ac993 100644 --- a/src/pages/Compte.js +++ b/src/pages/Compte.js @@ -1,13 +1,18 @@ import { Component } from '@fullcalendar/core'; -import React, { useState } from 'react'; +import userEvent from '@testing-library/user-event'; +import React, { useEffect, useState } from 'react'; import NavigationDashboard from '../components/NavigationDashboard'; import img1 from '../img/logo_personEntouré.svg'; +import axios from 'axios' - +const api = axios.create({ + baseURL: 'http://localhost:8080' + }) function Compte() { - const [theme, setTheme] = useState("light"); + const [theme, setTheme] = useState("light"); + const [modification, setModification] = useState(false); if (localStorage.getItem('theme') && localStorage.getItem("theme") !== '' && localStorage.getItem("theme") !== theme) { setTheme(localStorage.getItem("theme")) } @@ -18,11 +23,8 @@ function Compte() { setFile(URL.createObjectURL(e.target.files[0])); } - const [modification, setModification] = useState(false); - const modificationHandler = () => { setModification((modification) => !modification) - console.log("modificationHandler") console.log(modification) } @@ -66,6 +68,7 @@ function Compte() {

Nom Complet :

+

{}

Mateo Centeno

diff --git a/src/pages/Repertoire.js b/src/pages/Repertoire.js index bd28525..c32adf3 100644 --- a/src/pages/Repertoire.js +++ b/src/pages/Repertoire.js @@ -1,26 +1,17 @@ import NavigationDashboard from '../components/NavigationDashboard'; import React, { useState, useEffect } from 'react'; -import { BrowserRouter as Router, Switch, Route, Routes } from 'react-router-dom'; -import { v4 as uuid } from 'uuid'; -import Header from '../components/Contact/Header'; -import AddContact from '../components/Contact/AddContact' -import ContactList from '../components/Contact/ContactList'; -import ContactDetail from '../components/Contact/ContactDetail'; -import EditContact from '../components/Contact/EditContact'; import axios from 'axios'; import user from '../images/user.jpg'; -import { Link, useLocation } from 'react-router-dom'; - import { TableContainer, Table, TableHead, TableBody, TableRow, TableCell } from '@mui/material'; import { Paper } from '@mui/material'; - const api = axios.create({ baseURL: 'http://localhost:8080' }) function Repertoire() { + const [theme, setTheme] = useState("light"); if (localStorage.getItem('theme') && localStorage.getItem("theme") !== '' && localStorage.getItem("theme") !== theme) { setTheme(localStorage.getItem("theme")) @@ -29,80 +20,102 @@ function Repertoire() { const [contacts, setContacts] = useState([]); const [SearchTerm, setSearchTerm] = useState(""); const [SearchResults, setSearchResults] = useState([]); + const [customers, setCustomers] = useState([]); + useEffect(() => { - api.get('/Contact/All').then((response) => { + api.get('/Contact/AllWithCustomerName').then((response) => { setContacts(response.data); setSearchTerm(response.data[0].idcontact); }); }, []); - return ( - - + useEffect(() => { + api.get('/Customer/All').then((response) => { + setCustomers(response.data); + }); + }, []); + return ( +
+ {/* Create an account page */} - -
- {/* Create an account page */} -
-

Repertoire

-
+
+

Repertoire

+
+
+ + + + +
+ +
+
+
+ +
+
- +
- -
+ + + + + + + Photo + Nom + Prénom + Entreprise + + + + {contacts.map((contact) => ( + + + {contact.lastname} + {contact.firstname} + {contact.name} + + ))} + +
+
-
- -
-
-

Repertoire

-

Liste des utilisateurs

-
-
- - - - -
- - - - - Nom - Prénom - Identifiant - Téléphone + {/* +
+ + + Entreprise + Nom + Prénom + + + + + {contacts.map((contact) => ( + handleClick(event, contact.idcontact)} + // selected={contact.idcontact === selectedIdcontact} + > + + {contact.idcustomer.name} + {contact.lastname} + {contact.firstname} - - - {contacts.map((contact) => ( - handleClick(event, contact.idcontact)} - // selected={contact.idcontact === selectedIdcontact} - > - {contact.lastname} - {contact.firstname} - {contact.phone} - {contact.mail} - - ))} - -
-
-
-
-
-
+ ))} + + + */}
- +
); }; diff --git a/src/pages/RestartPassword.js b/src/pages/RestartPassword.js new file mode 100644 index 0000000..0fac4bf --- /dev/null +++ b/src/pages/RestartPassword.js @@ -0,0 +1,105 @@ +import axios from 'axios' +import React, { useState, useEffect } from 'react'; +import NavigationAdmin from '../components/NavigationAdmin.js'; +import Admin from './Admin_create.js'; +import { useLocation } from "react-router-dom"; +import Select, { SelectChangeEvent } from '@mui/material/Select'; +import MenuItem from '@mui/material/MenuItem'; +import { NavLink } from 'react-router-dom'; +import CryptoJS from 'crypto-js'; +import { useNavigate } from "react-router-dom"; + + +const api = axios.create({ + baseURL: 'http://localhost:8080' + }) + +function RestartPassword() { + const location = useLocation(); + const { iduser } = location.state; + console.log(iduser); + + const [password, setPassword] = useState(""); + const [confPassword, setConfPassword] = useState(""); + const [newPassword, setNewPassword] = useState(""); + + const navigate = useNavigate(); + + function handleChangePassword(event){ + setPassword(event.target.value); + }; + + function handleChangeConfPassword(event){ + setConfPassword(event.target.value); + }; + + function handleChangeNewPassword(event){ + setNewPassword(event.target.value); + }; + + function checkRestartPassword(event){ + + const formData = new FormData(event.currentTarget); + const values = Object.fromEntries(formData.entries()); + + event.preventDefault(); + + if(password === confPassword) + { + const apiString = '/User/Auth/Password/' + iduser + "/" + CryptoJS.SHA256(confPassword).toString(CryptoJS.enc.Hex); + api.get(apiString).then((response) => { + const login = response.data; + if (login.length > 0){ + console.log(values.newPassword); + + values.newPassword = CryptoJS.SHA256(newPassword).toString(CryptoJS.enc.Hex); + + const apiStringUpdate = '/User/Update/Password/' + iduser; + api.put(apiStringUpdate, values).then((response) => { + console.log(response.data); + }); + + navigate("/Admin_list"); + } + else{ + console.log("trt"); + } + }); + } + } + + return ( +
+ + {/* Create a admin page */} +
+

Admin

+

Modification d'utilisateur

+
+
+ + +
+

Mot de passe :

+

Confirmation mot de passe :

+

Nouveau mot de passe :

+
+ + + + + + +
+
+ + Retour +
+
+
+
+
+ ); +}; + +export default RestartPassword; \ No newline at end of file diff --git a/src/styles/components/_admin.scss b/src/styles/components/_admin.scss index 4907f7d..b396002 100644 --- a/src/styles/components/_admin.scss +++ b/src/styles/components/_admin.scss @@ -1,3 +1,8 @@ +.dark{ + background-color: $xiketic; + color: white; +} + body { .page_admin { @@ -8,63 +13,86 @@ body { .nav_bar_verticale { display: flex; flex-direction: column; - width: 200px; + justify-content: space-around; + margin: 10px; + width: 230px; background: rgba(255, 255, 255, 0.143); box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(1.5px); border-radius: 15px; border: 1px solid rgba(255, 255, 255, 0.18); - margin: 10px; - - - .create_user { - padding: 5px; - text-decoration: none; - align-self: center; - } - .modify_user { - padding: 5px; - text-decoration: none; - align-self: center; - } + .logoCRM { + display: flex; + flex-direction: column; + justify-content: space-around; + align-items: center; - .delete_user { - padding: 5px; - text-decoration: none; - align-self: center; + .logo { + max-width: 150px; + max-height: 150px; + } } - - .bouton { + .BoutonNav { display: flex; - justify-content: center; - align-items: center; - position: relative; - width: 180px; - height: 100px; - border-radius: 10px; - font-size: 13.5px; - font-weight: bold; - transition: 1s box-shadow; - border: none; - box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); - background-color: rgb(163, 163, 163, 0.371); - border: 1px solid rgba(255,255,255,0.1); - backdrop-filter: blur(30px); - color: rgb(255, 255, 255); - cursor: pointer; - font-size: 17px; - - &:hover{ - box-shadow: 0, 5px, 35px, 0 rgba(0, 0, 0, 1); - color: white; - background-color: rgba(114, 114, 114, 0.371); + flex-direction: column; + justify-content: space-evenly; + height: 450px; + margin-bottom: 180px; + + .create_user { + display: flex; + padding: 5px; + text-decoration: none; + align-self: center; } + + .modify_user { + display: flex; + padding: 5px; + text-decoration: none; + align-self: center; + } + + .delete_user { + display: flex; + padding: 5px; + text-decoration: none; + align-self: center; + } + + .list_devis { + display: flex; + padding: 5px; + text-decoration: none; + align-self: center; + } + + .bouton { + display: flex; + justify-content: center; + align-items: center; + width: 150px; + height: 60px; + font-size: 17px; + font-weight: bold; + transition: 1s box-shadow; + border: none; + cursor: pointer; + color: white; + background-color: grey; + border-radius: 15px; - &:active{ - background-color:rgba(68, 68, 68, 0.972); + &:hover { + color: white; + background-color: rgba(114, 114, 114, 0.371); + } + + &:active { + background-color: rgba(68, 68, 68, 0.972); + } } } } @@ -74,14 +102,14 @@ body { .Titre_Formulaire{ display: flex; flex-direction: column; + margin: 10px 10px 10px 0px; + padding: 10px; flex-basis: 100%; background: rgba(255, 255, 255, 0.3); border-radius: 15px; box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(15px); - margin: 10px; - padding: 10px; .Titre { display: flex; @@ -198,42 +226,43 @@ body { margin-top: 5%; .bouton_val{ - //display: flex; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 150px; + height: 40px; + font-size: 20px; + text-decoration: none; + color: white; background-color: grey; - border: 1px solid rgba(255, 255, 255, 0.1); - backdrop-filter: blur(30px); - color: rgb(255, 255, 255); - cursor: pointer; - font-size: 15px; border-radius: 15px; - width: 20%; + border: 0; &:hover { - box-shadow: 0, 5px, 35px, 0 rgba(0, 0, 0, 1); color: white; background-color: rgba(114, 114, 114, 0.371); } - + &:active { background-color: rgba(68, 68, 68, 0.972); } } .bouton_ann{ - //display: flex; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 150px; + height: 40px; + font-size: 20px; + text-decoration: none; + color: white; background-color: grey; - border: 0px solid rgba(255, 255, 255, 0.1); - backdrop-filter: blur(30px); - color: rgb(255, 255, 255); - cursor: pointer; - font-size: 15px; border-radius: 15px; - width: 20%; - text-decoration: none; - text-align: center; &:hover { - box-shadow: 0, 5px, 35px, 0 rgba(0, 0, 0, 1); color: white; background-color: rgba(114, 114, 114, 0.371); } @@ -248,14 +277,14 @@ body { .Titre_Formulaire_Rech{ display: flex; flex-direction: column; + margin: 10px 10px 10px 0px; + padding: 10px; flex-basis: 100%; background: rgba(255, 255, 255, 0.3); border-radius: 15px; box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(15px); - margin: 10px; - padding: 10px; .Titre { display: flex; @@ -469,5 +498,24 @@ body { } } } + + .devis { + display: flex; + flex-direction: column; + width: 100%; + margin: 10px 10px 10px 0; + background: rgba(255, 255, 255, 0.3); + border-radius: 15px; + box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); + backdrop-filter: blur(3px); + -webkit-backdrop-filter: blur(15px); + + .Titre { + display: flex; + margin: 10px; + font-size: 70px; + font-weight: bold; + } + } } } \ No newline at end of file diff --git a/src/styles/components/_analyse.scss b/src/styles/components/_analyse.scss index 54cc0d0..166e983 100644 --- a/src/styles/components/_analyse.scss +++ b/src/styles/components/_analyse.scss @@ -1,7 +1,4 @@ -.dark{ - background-color: $xiketic; - color: white; -} + body { diff --git a/src/styles/components/_calendrier.scss b/src/styles/components/_calendrier.scss index b836b73..a0fe08e 100644 --- a/src/styles/components/_calendrier.scss +++ b/src/styles/components/_calendrier.scss @@ -1,7 +1,4 @@ -.dark{ - background-color: $xiketic; - color: white; -} + body { diff --git a/src/styles/components/_compte.scss b/src/styles/components/_compte.scss index 20dbbd2..98039f9 100644 --- a/src/styles/components/_compte.scss +++ b/src/styles/components/_compte.scss @@ -1,7 +1,4 @@ -.dark{ - background-color: $xiketic; - color: white; -} + body { diff --git a/src/styles/components/_connexion.scss b/src/styles/components/_connexion.scss index bc1ff41..cd111d7 100644 --- a/src/styles/components/_connexion.scss +++ b/src/styles/components/_connexion.scss @@ -1,7 +1,3 @@ -.dark{ - background-color: $xiketic; - color: white; -} body { .page_connexion { diff --git a/src/styles/components/_dashboard.scss b/src/styles/components/_dashboard.scss index 870974b..15c6f35 100644 --- a/src/styles/components/_dashboard.scss +++ b/src/styles/components/_dashboard.scss @@ -1,7 +1,4 @@ -.dark{ - background-color: $xiketic; - color: white; -} + body { .page_dashboard { diff --git a/src/styles/components/_parametre.scss b/src/styles/components/_parametre.scss index bc57fd5..56dc3b2 100644 --- a/src/styles/components/_parametre.scss +++ b/src/styles/components/_parametre.scss @@ -1,8 +1,3 @@ -.dark{ - background-color: $xiketic; - color: white; -} - body { background-color: $alice-blue; color: black; diff --git a/src/styles/components/_repertoire.scss b/src/styles/components/_repertoire.scss index b7b355f..7ed5f78 100644 --- a/src/styles/components/_repertoire.scss +++ b/src/styles/components/_repertoire.scss @@ -1,17 +1,12 @@ -.dark{ - background-color: $xiketic; - color: white; -} - body { - - .page_Repertoire { + + #page_repertoire { display: flex; flex-direction: column; justify-content: space-evenly; width: auto; height: 100vh; - + .haut_de_page { display: flex; flex-direction: row; @@ -21,7 +16,7 @@ body { height: 10%; align-items: center; margin: 10px 10px 5px 10px; - + background: rgba(255, 255, 255, 0.3); border-radius: 15px; box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); @@ -31,7 +26,7 @@ body { .titre { font-size: 40px; } - + .rechLogo { display: flex; flex-direction: row; @@ -85,9 +80,9 @@ body { width: 100px; height: 100px; } - } + } } - + .bas_de_page { display: flex; flex-direction: row; @@ -98,7 +93,7 @@ body { .nav_bar_verticale { display: flex; flex-direction: column; - justify-content: space-around; + justify-content: space-evenly; align-items: center; width: 5%; margin: 5px 5px 10px 10px; @@ -153,7 +148,7 @@ body { border: none; cursor: pointer; - .logo_nav_bar{ + .logo_nav_bar { display: flex; margin: 10px; height: 50px; @@ -162,15 +157,105 @@ body { } } - .Repertoire { - display: flex; - flex-direction: row; - justify-content: space-between; - width: 94.3%; - height: auto; - margin: 5px 10px 10px 5px; + .contenu { + width: 100%; + .searchAndAddButton { + height: 100px; + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + justify-content: space-between; + + .boutonAddContact { + display: flex; + justify-content: center; + align-items: center; + height: 40px; + min-width: 150px; + margin: 30px 30px; + border-radius: 25px; + box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); + } + + .input_box { + display: flex; + justify-content: center; + align-items: center; + position: relative; + height: 40px; + max-width: 350px; + width: 100%; + margin: 30px 30px; + border-radius: 25px; + box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.37); + + input { + position: relative; + width: 100%; + height: 100%; + padding: 0 15px 0 65px; + outline: none; + border: none; + border-radius: 25px; + font-size: 16px; + font-weight: 400; + color: #333; + } + + .search { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 60px; + border-radius: 25px 0 0 25px; + + .search-icon { + font-size: 30px; + color: black; + } + } + } + + } + + .tabListContact { + margin-bottom: 20px; + padding-right: 10px; + height: 82%; + scroll-behavior: smooth; + overflow-y: scroll; + + &::-webkit-scrollbar { + width: 15px; + } + + &::-webkit-scrollbar-track { + background: #f1f1f1; + } + + &::-webkit-scrollbar-thumb { + background: #888; + border-radius: 10px; + } + + &::-webkit-scrollbar-thumb:hover { + background: #555; + } + .photoContact{ + width: 50px; + height: 50px; + border-radius: 50%; + object-fit: cover; + border: 1px solid black; + } + } } } } -} +} \ No newline at end of file diff --git a/src/styles/settings.scss b/src/styles/settings.scss index 1bfe1c4..01c4180 100644 --- a/src/styles/settings.scss +++ b/src/styles/settings.scss @@ -14,19 +14,7 @@ $rufous: #9b2915ff; $xiketic: #020114ff; $beau-blue: #b1c5d2; -/* SCSS HSL */ -$alice-blue: hsla(204, 28%, 93%, 1); -$blue-munsell: hsla(190, 100%, 32%, 1); -$malachite: hsla(142, 80%, 55%, 1); -$rufous: hsla(9, 76%, 35%, 1); -$xiketic: hsla(243, 90%, 4%, 1); - -/* SCSS RGB */ -$alice-blue: rgba(232, 238, 242, 1); -$blue-munsell: rgba(0, 136, 163, 1); -$malachite: rgba(50, 232, 117, 1); -$rufous: rgba(155, 41, 21, 1); -$xiketic: rgb(21, 18, 75); + /* SCSS Gradient */ $gradient-top: linear-gradient(0deg, #e8eef2ff, #0088a3ff, #32e875ff, #9b2915ff, #020114ff); @@ -59,4 +47,9 @@ body { li { list-style-type: none; +} + +.dark{ + background-color: $xiketic; + color: white; } \ No newline at end of file