04/12/2023 - 12h30

recette2
cherif 2023-12-04 12:26:52 +01:00
parent 90deb8fa59
commit ddb2d4fea0
33 changed files with 4426 additions and 6275 deletions

1
.env
View File

@ -7,3 +7,4 @@ REACT_APP_API_URL_recette=https://devapimysy.mysy-training.com/
REACT_APP_API_URL=http://localhost:5001/ REACT_APP_API_URL=http://localhost:5001/
REACT_APP_BASE_URL=http://localhost:3009/recherche-formation REACT_APP_BASE_URL=http://localhost:3009/recherche-formation
REACT_APP_ENV=DEV REACT_APP_ENV=DEV
GENERATE_SOURCEMAP=false

365
package-lock.json generated
View File

@ -1,5 +1,5 @@
{ {
"name": "my-app2", "name": "MySy Training",
"version": "0.1.0", "version": "0.1.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
@ -33,6 +33,7 @@
"@mui/x-date-pickers": "^5.0.0", "@mui/x-date-pickers": "^5.0.0",
"@mui/x-date-pickers-pro": "^5.0.0", "@mui/x-date-pickers-pro": "^5.0.0",
"@nivo/bar": "^0.84.0", "@nivo/bar": "^0.84.0",
"@nivo/line": "^0.84.0",
"@nivo/pie": "^0.84.0", "@nivo/pie": "^0.84.0",
"@react-icons/all-files": "^4.1.0", "@react-icons/all-files": "^4.1.0",
"@stripe/react-stripe-js": "^1.12.0", "@stripe/react-stripe-js": "^1.12.0",
@ -57,6 +58,7 @@
"gatsby-plugin-cookie-gdpr-axeptio": "^1.0.2", "gatsby-plugin-cookie-gdpr-axeptio": "^1.0.2",
"google-map-react": "^2.1.10", "google-map-react": "^2.1.10",
"html-react-parser": "^2.0.0", "html-react-parser": "^2.0.0",
"increase-memory-limit": "^1.0.7",
"js-cookie": "^3.0.1", "js-cookie": "^3.0.1",
"js-file-download": "^0.4.12", "js-file-download": "^0.4.12",
"js-video-url-parser": "^0.5.1", "js-video-url-parser": "^0.5.1",
@ -5380,6 +5382,40 @@
"react": ">= 16.14.0 < 19.0.0" "react": ">= 16.14.0 < 19.0.0"
} }
}, },
"node_modules/@nivo/line": {
"version": "0.84.0",
"resolved": "https://registry.npmjs.org/@nivo/line/-/line-0.84.0.tgz",
"integrity": "sha512-QE0JwZ7oIwMnsDQeSr1Q6iyqD2UBVLtBMdfMsJLhnlI3V62VkY98/L3o8M7+7Wy/V2UiEMJ+14C2qhXd+XLgsA==",
"dependencies": {
"@nivo/annotations": "0.84.0",
"@nivo/axes": "0.84.0",
"@nivo/colors": "0.84.0",
"@nivo/core": "0.84.0",
"@nivo/legends": "0.84.0",
"@nivo/scales": "0.84.0",
"@nivo/tooltip": "0.84.0",
"@nivo/voronoi": "0.84.0",
"@react-spring/web": "9.4.5 || ^9.7.2",
"d3-shape": "^1.3.5",
"prop-types": "^15.7.2"
},
"peerDependencies": {
"react": ">= 16.14.0 < 19.0.0"
}
},
"node_modules/@nivo/line/node_modules/d3-path": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
"integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
},
"node_modules/@nivo/line/node_modules/d3-shape": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
"integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
"dependencies": {
"d3-path": "1"
}
},
"node_modules/@nivo/pie": { "node_modules/@nivo/pie": {
"version": "0.84.0", "version": "0.84.0",
"resolved": "https://registry.npmjs.org/@nivo/pie/-/pie-0.84.0.tgz", "resolved": "https://registry.npmjs.org/@nivo/pie/-/pie-0.84.0.tgz",
@ -5462,6 +5498,21 @@
"@react-spring/web": "9.4.5 || ^9.7.2" "@react-spring/web": "9.4.5 || ^9.7.2"
} }
}, },
"node_modules/@nivo/voronoi": {
"version": "0.84.0",
"resolved": "https://registry.npmjs.org/@nivo/voronoi/-/voronoi-0.84.0.tgz",
"integrity": "sha512-CJTb0sQWYNbfjjrCEK3W0jt1v+hqAd4fDUNJxB3SNRHEEQtF+MCr2EG3p/CWyxIb3avjF4N53/03tQpnuDwBvQ==",
"dependencies": {
"@nivo/core": "0.84.0",
"@types/d3-delaunay": "^5.3.0",
"@types/d3-scale": "^3.2.3",
"d3-delaunay": "^5.3.0",
"d3-scale": "^3.2.3"
},
"peerDependencies": {
"react": ">= 16.14.0 < 19.0.0"
}
},
"node_modules/@nodelib/fs.scandir": { "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -6555,6 +6606,11 @@
"resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-2.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-2.0.3.tgz",
"integrity": "sha512-+0EtEjBfKEDtH9Rk3u3kLOUXM5F+iZK+WvASPb0MhIZl8J8NUvGeZRwKCXl+P3HkYx5TdU4YtcibpqHkSR9n7w==" "integrity": "sha512-+0EtEjBfKEDtH9Rk3u3kLOUXM5F+iZK+WvASPb0MhIZl8J8NUvGeZRwKCXl+P3HkYx5TdU4YtcibpqHkSR9n7w=="
}, },
"node_modules/@types/d3-delaunay": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-5.3.4.tgz",
"integrity": "sha512-GEQuDXVKQvHulQ+ecKyCubOmVjXrifAj7VR26rWVAER/IbWemaT/Tmo84ESiTtoDghg5ILdMZH7pYXQEt/Vu9A=="
},
"node_modules/@types/d3-ease": { "node_modules/@types/d3-ease": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz",
@ -11530,6 +11586,14 @@
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz",
"integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ=="
}, },
"node_modules/d3-delaunay": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-5.3.0.tgz",
"integrity": "sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==",
"dependencies": {
"delaunator": "4"
}
},
"node_modules/d3-ease": { "node_modules/d3-ease": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
@ -15351,6 +15415,17 @@
"node": ">=0.8.19" "node": ">=0.8.19"
} }
}, },
"node_modules/increase-memory-limit": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/increase-memory-limit/-/increase-memory-limit-1.0.7.tgz",
"integrity": "sha512-ozyn+HHAPD9VxMT1U50A7G8XXlktUWhnnEDYSeDYnQjKsNrBWHqq6XfEA0uhMdDPD+q/7rXWlzF1CbXX/c1LiQ==",
"dependencies": {
"glob": "^7.1.1"
},
"bin": {
"increase-memory-limit": "index.js"
}
},
"node_modules/indent-string": { "node_modules/indent-string": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
@ -34194,7 +34269,8 @@
"@bedrock-layout/use-stateful-ref": { "@bedrock-layout/use-stateful-ref": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/@bedrock-layout/use-stateful-ref/-/use-stateful-ref-1.4.1.tgz", "resolved": "https://registry.npmjs.org/@bedrock-layout/use-stateful-ref/-/use-stateful-ref-1.4.1.tgz",
"integrity": "sha512-4eKO2KdQEXcR5LI4QcxqlJykJUDQJWDeWYAukIn6sRQYoabcfI5kDl61PUi6FR6o8VFgQ8IEP7HleKqWlSe8SQ==" "integrity": "sha512-4eKO2KdQEXcR5LI4QcxqlJykJUDQJWDeWYAukIn6sRQYoabcfI5kDl61PUi6FR6o8VFgQ8IEP7HleKqWlSe8SQ==",
"requires": {}
}, },
"@callstack/react-theme-provider": { "@callstack/react-theme-provider": {
"version": "3.0.8", "version": "3.0.8",
@ -34329,12 +34405,14 @@
"@csstools/postcss-unset-value": { "@csstools/postcss-unset-value": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz",
"integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==" "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==",
"requires": {}
}, },
"@csstools/selector-specificity": { "@csstools/selector-specificity": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz",
"integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==" "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==",
"requires": {}
}, },
"@date-io/core": { "@date-io/core": {
"version": "2.16.0", "version": "2.16.0",
@ -34566,7 +34644,8 @@
"@emotion/use-insertion-effect-with-fallbacks": { "@emotion/use-insertion-effect-with-fallbacks": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz",
"integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==" "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==",
"requires": {}
}, },
"@emotion/utils": { "@emotion/utils": {
"version": "1.0.0", "version": "1.0.0",
@ -34850,17 +34929,20 @@
"@fullcalendar/daygrid": { "@fullcalendar/daygrid": {
"version": "6.1.9", "version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.9.tgz", "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.9.tgz",
"integrity": "sha512-o/6joH/7lmVHXAkbaa/tUbzWYnGp/LgfdiFyYPkqQbjKEeivNZWF1WhHqFbhx0zbFONSHtrvkjY2bjr+Ef2quQ==" "integrity": "sha512-o/6joH/7lmVHXAkbaa/tUbzWYnGp/LgfdiFyYPkqQbjKEeivNZWF1WhHqFbhx0zbFONSHtrvkjY2bjr+Ef2quQ==",
"requires": {}
}, },
"@fullcalendar/interaction": { "@fullcalendar/interaction": {
"version": "6.1.9", "version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.9.tgz", "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.9.tgz",
"integrity": "sha512-I3FGnv0kKZpIwujg3HllbKrciNjTqeTYy3oJG226oAn7lV6wnrrDYMmuGmA0jPJAGN46HKrQqKN7ItxQRDec4Q==" "integrity": "sha512-I3FGnv0kKZpIwujg3HllbKrciNjTqeTYy3oJG226oAn7lV6wnrrDYMmuGmA0jPJAGN46HKrQqKN7ItxQRDec4Q==",
"requires": {}
}, },
"@fullcalendar/react": { "@fullcalendar/react": {
"version": "6.1.9", "version": "6.1.9",
"resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.9.tgz", "resolved": "https://registry.npmjs.org/@fullcalendar/react/-/react-6.1.9.tgz",
"integrity": "sha512-ioxu0V++pYz2u/N1LL1V8DkMyiKGRun0gMAll2tQz3Kzi3r9pTwncGKRb1zO8h0e+TrInU08ywk/l5lBwp7eog==" "integrity": "sha512-ioxu0V++pYz2u/N1LL1V8DkMyiKGRun0gMAll2tQz3Kzi3r9pTwncGKRb1zO8h0e+TrInU08ywk/l5lBwp7eog==",
"requires": {}
}, },
"@fullcalendar/timegrid": { "@fullcalendar/timegrid": {
"version": "6.1.9", "version": "6.1.9",
@ -35762,7 +35844,8 @@
"@mantine/hooks": { "@mantine/hooks": {
"version": "4.2.12", "version": "4.2.12",
"resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-4.2.12.tgz", "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-4.2.12.tgz",
"integrity": "sha512-/2GOsgv1tAUFBXOUV0YBZdDZHj3pHN82Sv1oI/hJMjfIT3ZkGeeiJO8Cw9cBcn76t6caP6Czi3hcuKhjz71O+A==" "integrity": "sha512-/2GOsgv1tAUFBXOUV0YBZdDZHj3pHN82Sv1oI/hJMjfIT3ZkGeeiJO8Cw9cBcn76t6caP6Czi3hcuKhjz71O+A==",
"requires": {}
}, },
"@mantine/rte": { "@mantine/rte": {
"version": "4.2.12", "version": "4.2.12",
@ -35862,7 +35945,8 @@
"@material-ui/types": { "@material-ui/types": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz",
"integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==" "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==",
"requires": {}
}, },
"@material-ui/utils": { "@material-ui/utils": {
"version": "4.11.3", "version": "4.11.3",
@ -35877,7 +35961,8 @@
"@modulz/radix-icons": { "@modulz/radix-icons": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/@modulz/radix-icons/-/radix-icons-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@modulz/radix-icons/-/radix-icons-4.0.0.tgz",
"integrity": "sha512-d79T4cYvMGMocVC/q1WiMO578FPFfUoxmXIkduc8cUQAPDr7thuEV5HrCHhqqqkoVaYD0QPct180ilcNUyGPrg==" "integrity": "sha512-d79T4cYvMGMocVC/q1WiMO578FPFfUoxmXIkduc8cUQAPDr7thuEV5HrCHhqqqkoVaYD0QPct180ilcNUyGPrg==",
"requires": {}
}, },
"@mui/base": { "@mui/base": {
"version": "5.0.0-beta.11", "version": "5.0.0-beta.11",
@ -36113,7 +36198,8 @@
"@mui/types": { "@mui/types": {
"version": "7.2.4", "version": "7.2.4",
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz",
"integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==" "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==",
"requires": {}
}, },
"@mui/utils": { "@mui/utils": {
"version": "5.14.5", "version": "5.14.5",
@ -36446,6 +36532,39 @@
"prop-types": "^15.7.2" "prop-types": "^15.7.2"
} }
}, },
"@nivo/line": {
"version": "0.84.0",
"resolved": "https://registry.npmjs.org/@nivo/line/-/line-0.84.0.tgz",
"integrity": "sha512-QE0JwZ7oIwMnsDQeSr1Q6iyqD2UBVLtBMdfMsJLhnlI3V62VkY98/L3o8M7+7Wy/V2UiEMJ+14C2qhXd+XLgsA==",
"requires": {
"@nivo/annotations": "0.84.0",
"@nivo/axes": "0.84.0",
"@nivo/colors": "0.84.0",
"@nivo/core": "0.84.0",
"@nivo/legends": "0.84.0",
"@nivo/scales": "0.84.0",
"@nivo/tooltip": "0.84.0",
"@nivo/voronoi": "0.84.0",
"@react-spring/web": "9.4.5 || ^9.7.2",
"d3-shape": "^1.3.5",
"prop-types": "^15.7.2"
},
"dependencies": {
"d3-path": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
"integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
},
"d3-shape": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
"integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
"requires": {
"d3-path": "1"
}
}
}
},
"@nivo/pie": { "@nivo/pie": {
"version": "0.84.0", "version": "0.84.0",
"resolved": "https://registry.npmjs.org/@nivo/pie/-/pie-0.84.0.tgz", "resolved": "https://registry.npmjs.org/@nivo/pie/-/pie-0.84.0.tgz",
@ -36526,6 +36645,18 @@
"@react-spring/web": "9.4.5 || ^9.7.2" "@react-spring/web": "9.4.5 || ^9.7.2"
} }
}, },
"@nivo/voronoi": {
"version": "0.84.0",
"resolved": "https://registry.npmjs.org/@nivo/voronoi/-/voronoi-0.84.0.tgz",
"integrity": "sha512-CJTb0sQWYNbfjjrCEK3W0jt1v+hqAd4fDUNJxB3SNRHEEQtF+MCr2EG3p/CWyxIb3avjF4N53/03tQpnuDwBvQ==",
"requires": {
"@nivo/core": "0.84.0",
"@types/d3-delaunay": "^5.3.0",
"@types/d3-scale": "^3.2.3",
"d3-delaunay": "^5.3.0",
"d3-scale": "^3.2.3"
}
},
"@nodelib/fs.scandir": { "@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -36719,7 +36850,8 @@
"@react-icons/all-files": { "@react-icons/all-files": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/@react-icons/all-files/-/all-files-4.1.0.tgz", "resolved": "https://registry.npmjs.org/@react-icons/all-files/-/all-files-4.1.0.tgz",
"integrity": "sha512-hxBI2UOuVaI3O/BhQfhtb4kcGn9ft12RWAFVMUeNjqqhLsHvFtzIkFaptBJpFDANTKoDfdVoHTKZDlwKCACbMQ==" "integrity": "sha512-hxBI2UOuVaI3O/BhQfhtb4kcGn9ft12RWAFVMUeNjqqhLsHvFtzIkFaptBJpFDANTKoDfdVoHTKZDlwKCACbMQ==",
"requires": {}
}, },
"@react-spring/animated": { "@react-spring/animated": {
"version": "9.7.3", "version": "9.7.3",
@ -36767,7 +36899,8 @@
"@restart/context": { "@restart/context": {
"version": "2.1.4", "version": "2.1.4",
"resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz", "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz",
"integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==" "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q==",
"requires": {}
}, },
"@restart/hooks": { "@restart/hooks": {
"version": "0.4.7", "version": "0.4.7",
@ -37298,6 +37431,11 @@
"resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-2.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-2.0.3.tgz",
"integrity": "sha512-+0EtEjBfKEDtH9Rk3u3kLOUXM5F+iZK+WvASPb0MhIZl8J8NUvGeZRwKCXl+P3HkYx5TdU4YtcibpqHkSR9n7w==" "integrity": "sha512-+0EtEjBfKEDtH9Rk3u3kLOUXM5F+iZK+WvASPb0MhIZl8J8NUvGeZRwKCXl+P3HkYx5TdU4YtcibpqHkSR9n7w=="
}, },
"@types/d3-delaunay": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-5.3.4.tgz",
"integrity": "sha512-GEQuDXVKQvHulQ+ecKyCubOmVjXrifAj7VR26rWVAER/IbWemaT/Tmo84ESiTtoDghg5ILdMZH7pYXQEt/Vu9A=="
},
"@types/d3-ease": { "@types/d3-ease": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz",
@ -38267,12 +38405,14 @@
"acorn-import-assertions": { "acorn-import-assertions": {
"version": "1.8.0", "version": "1.8.0",
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==" "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
"requires": {}
}, },
"acorn-jsx": { "acorn-jsx": {
"version": "5.3.2", "version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"requires": {}
}, },
"acorn-node": { "acorn-node": {
"version": "1.8.2", "version": "1.8.2",
@ -38363,7 +38503,8 @@
"ajv-errors": { "ajv-errors": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
"requires": {}
}, },
"ajv-formats": { "ajv-formats": {
"version": "2.1.1", "version": "2.1.1",
@ -38394,7 +38535,8 @@
"ajv-keywords": { "ajv-keywords": {
"version": "3.5.2", "version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"requires": {}
}, },
"alphanum-sort": { "alphanum-sort": {
"version": "1.0.2", "version": "1.0.2",
@ -38869,7 +39011,8 @@
"babel-plugin-named-asset-import": { "babel-plugin-named-asset-import": {
"version": "0.3.8", "version": "0.3.8",
"resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz",
"integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==" "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==",
"requires": {}
}, },
"babel-plugin-polyfill-corejs2": { "babel-plugin-polyfill-corejs2": {
"version": "0.3.3", "version": "0.3.3",
@ -39176,7 +39319,8 @@
"bootstrap": { "bootstrap": {
"version": "5.2.3", "version": "5.2.3",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
"integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==" "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
"requires": {}
}, },
"bootstrap-icons": { "bootstrap-icons": {
"version": "1.10.3", "version": "1.10.3",
@ -40333,7 +40477,8 @@
"css-declaration-sorter": { "css-declaration-sorter": {
"version": "6.3.1", "version": "6.3.1",
"resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz",
"integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==" "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==",
"requires": {}
}, },
"css-tree": { "css-tree": {
"version": "1.1.3", "version": "1.1.3",
@ -40437,22 +40582,26 @@
"postcss-discard-comments": { "postcss-discard-comments": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
"integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==" "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
"requires": {}
}, },
"postcss-discard-duplicates": { "postcss-discard-duplicates": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
"integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==" "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
"requires": {}
}, },
"postcss-discard-empty": { "postcss-discard-empty": {
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
"integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==" "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
"requires": {}
}, },
"postcss-discard-overridden": { "postcss-discard-overridden": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
"integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==" "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
"requires": {}
}, },
"postcss-merge-longhand": { "postcss-merge-longhand": {
"version": "5.1.7", "version": "5.1.7",
@ -40513,7 +40662,8 @@
"postcss-normalize-charset": { "postcss-normalize-charset": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
"integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==" "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
"requires": {}
}, },
"postcss-normalize-display-values": { "postcss-normalize-display-values": {
"version": "5.1.0", "version": "5.1.0",
@ -40788,7 +40938,8 @@
"css-prefers-color-scheme": { "css-prefers-color-scheme": {
"version": "6.0.3", "version": "6.0.3",
"resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz",
"integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==" "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==",
"requires": {}
}, },
"css-select": { "css-select": {
"version": "4.3.0", "version": "4.3.0",
@ -41047,7 +41198,8 @@
"cssnano-utils": { "cssnano-utils": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
"integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==" "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
"requires": {}
}, },
"csso": { "csso": {
"version": "4.2.0", "version": "4.2.0",
@ -41147,6 +41299,14 @@
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz",
"integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ=="
}, },
"d3-delaunay": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-5.3.0.tgz",
"integrity": "sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==",
"requires": {
"delaunator": "4"
}
},
"d3-ease": { "d3-ease": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
@ -41745,7 +41905,8 @@
"draftjs-utils": { "draftjs-utils": {
"version": "0.10.2", "version": "0.10.2",
"resolved": "https://registry.npmjs.org/draftjs-utils/-/draftjs-utils-0.10.2.tgz", "resolved": "https://registry.npmjs.org/draftjs-utils/-/draftjs-utils-0.10.2.tgz",
"integrity": "sha512-EstHqr3R3JVcilJrBaO/A+01GvwwKmC7e4TCjC7S94ZeMh4IVmf60OuQXtHHpwItK8C2JCi3iljgN5KHkJboUg==" "integrity": "sha512-EstHqr3R3JVcilJrBaO/A+01GvwwKmC7e4TCjC7S94ZeMh4IVmf60OuQXtHHpwItK8C2JCi3iljgN5KHkJboUg==",
"requires": {}
}, },
"duplexer": { "duplexer": {
"version": "0.1.1", "version": "0.1.1",
@ -42348,7 +42509,8 @@
"eslint-plugin-react-hooks": { "eslint-plugin-react-hooks": {
"version": "4.6.0", "version": "4.6.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
"integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==" "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
"requires": {}
}, },
"eslint-plugin-testing-library": { "eslint-plugin-testing-library": {
"version": "5.9.1", "version": "5.9.1",
@ -43329,7 +43491,8 @@
"gatsby-plugin-cookie-gdpr-axeptio": { "gatsby-plugin-cookie-gdpr-axeptio": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/gatsby-plugin-cookie-gdpr-axeptio/-/gatsby-plugin-cookie-gdpr-axeptio-1.0.2.tgz", "resolved": "https://registry.npmjs.org/gatsby-plugin-cookie-gdpr-axeptio/-/gatsby-plugin-cookie-gdpr-axeptio-1.0.2.tgz",
"integrity": "sha512-2XvGm0s6iS8tBGer/ntQ904L2LrQOR+MQ9o07/6We993bgZiqUvgezSxz39G/33GcN3Ccwn1tVSqhG48+nNjVQ==" "integrity": "sha512-2XvGm0s6iS8tBGer/ntQ904L2LrQOR+MQ9o07/6We993bgZiqUvgezSxz39G/33GcN3Ccwn1tVSqhG48+nNjVQ==",
"requires": {}
}, },
"generic-names": { "generic-names": {
"version": "2.0.1", "version": "2.0.1",
@ -43855,7 +44018,8 @@
"html-to-draftjs": { "html-to-draftjs": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/html-to-draftjs/-/html-to-draftjs-1.5.0.tgz", "resolved": "https://registry.npmjs.org/html-to-draftjs/-/html-to-draftjs-1.5.0.tgz",
"integrity": "sha512-kggLXBNciKDwKf+KYsuE+V5gw4dZ7nHyGMX9m0wy7urzWjKGWyNFetmArRLvRV0VrxKN70WylFsJvMTJx02OBQ==" "integrity": "sha512-kggLXBNciKDwKf+KYsuE+V5gw4dZ7nHyGMX9m0wy7urzWjKGWyNFetmArRLvRV0VrxKN70WylFsJvMTJx02OBQ==",
"requires": {}
}, },
"html-webpack-plugin": { "html-webpack-plugin": {
"version": "5.5.0", "version": "5.5.0",
@ -44012,7 +44176,8 @@
"icss-utils": { "icss-utils": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"requires": {}
}, },
"idb": { "idb": {
"version": "7.1.1", "version": "7.1.1",
@ -44098,6 +44263,14 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
}, },
"increase-memory-limit": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/increase-memory-limit/-/increase-memory-limit-1.0.7.tgz",
"integrity": "sha512-ozyn+HHAPD9VxMT1U50A7G8XXlktUWhnnEDYSeDYnQjKsNrBWHqq6XfEA0uhMdDPD+q/7rXWlzF1CbXX/c1LiQ==",
"requires": {
"glob": "^7.1.1"
}
},
"indent-string": { "indent-string": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
@ -45654,7 +45827,8 @@
"jest-pnp-resolver": { "jest-pnp-resolver": {
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==" "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"requires": {}
}, },
"jest-regex-util": { "jest-regex-util": {
"version": "27.5.1", "version": "27.5.1",
@ -48643,7 +48817,8 @@
"postcss-browser-comments": { "postcss-browser-comments": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz",
"integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==" "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==",
"requires": {}
}, },
"postcss-calc": { "postcss-calc": {
"version": "7.0.5", "version": "7.0.5",
@ -49137,7 +49312,8 @@
"postcss-flexbugs-fixes": { "postcss-flexbugs-fixes": {
"version": "5.0.2", "version": "5.0.2",
"resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz",
"integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==" "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==",
"requires": {}
}, },
"postcss-focus-visible": { "postcss-focus-visible": {
"version": "6.0.4", "version": "6.0.4",
@ -49158,12 +49334,14 @@
"postcss-font-variant": { "postcss-font-variant": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz",
"integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==" "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==",
"requires": {}
}, },
"postcss-gap-properties": { "postcss-gap-properties": {
"version": "3.0.5", "version": "3.0.5",
"resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz",
"integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==" "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==",
"requires": {}
}, },
"postcss-image-set-function": { "postcss-image-set-function": {
"version": "4.0.7", "version": "4.0.7",
@ -49186,7 +49364,8 @@
"postcss-initial": { "postcss-initial": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz",
"integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==" "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==",
"requires": {}
}, },
"postcss-js": { "postcss-js": {
"version": "4.0.0", "version": "4.0.0",
@ -49302,12 +49481,14 @@
"postcss-logical": { "postcss-logical": {
"version": "5.0.4", "version": "5.0.4",
"resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz",
"integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==" "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==",
"requires": {}
}, },
"postcss-media-minmax": { "postcss-media-minmax": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz",
"integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==" "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==",
"requires": {}
}, },
"postcss-merge-longhand": { "postcss-merge-longhand": {
"version": "4.0.11", "version": "4.0.11",
@ -49579,7 +49760,8 @@
"postcss-modules-extract-imports": { "postcss-modules-extract-imports": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
"integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
"requires": {}
}, },
"postcss-modules-local-by-default": { "postcss-modules-local-by-default": {
"version": "4.0.0", "version": "4.0.0",
@ -49956,7 +50138,8 @@
"postcss-opacity-percentage": { "postcss-opacity-percentage": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz",
"integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==" "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==",
"requires": {}
}, },
"postcss-ordered-values": { "postcss-ordered-values": {
"version": "4.1.2", "version": "4.1.2",
@ -50005,7 +50188,8 @@
"postcss-page-break": { "postcss-page-break": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz",
"integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==" "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==",
"requires": {}
}, },
"postcss-place": { "postcss-place": {
"version": "7.0.5", "version": "7.0.5",
@ -50166,7 +50350,8 @@
"postcss-replace-overflow-wrap": { "postcss-replace-overflow-wrap": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz",
"integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==" "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==",
"requires": {}
}, },
"postcss-selector-not": { "postcss-selector-not": {
"version": "6.0.1", "version": "6.0.1",
@ -50792,7 +50977,8 @@
"react-canvas-js": { "react-canvas-js": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/react-canvas-js/-/react-canvas-js-1.0.1.tgz", "resolved": "https://registry.npmjs.org/react-canvas-js/-/react-canvas-js-1.0.1.tgz",
"integrity": "sha512-rn+CEpdUmybItigZLPcSgecSf0kEWASa15jA3GbVsi9WJ19jngu/OW9+bUkepl5Eiioz0pkIiyny+3sJWcTcZg==" "integrity": "sha512-rn+CEpdUmybItigZLPcSgecSf0kEWASa15jA3GbVsi9WJ19jngu/OW9+bUkepl5Eiioz0pkIiyny+3sJWcTcZg==",
"requires": {}
}, },
"react-clock": { "react-clock": {
"version": "3.1.0", "version": "3.1.0",
@ -50898,7 +51084,8 @@
"react-confirm-alert": { "react-confirm-alert": {
"version": "2.8.0", "version": "2.8.0",
"resolved": "https://registry.npmjs.org/react-confirm-alert/-/react-confirm-alert-2.8.0.tgz", "resolved": "https://registry.npmjs.org/react-confirm-alert/-/react-confirm-alert-2.8.0.tgz",
"integrity": "sha512-qvNjJWuWUpTh+q4NecUjCMIWLNDl8IwW6JRIky5pzoiFBXsLWSA2Z1VsaDsQedwgyxEpKnMEJFETkDogBpv/kA==" "integrity": "sha512-qvNjJWuWUpTh+q4NecUjCMIWLNDl8IwW6JRIky5pzoiFBXsLWSA2Z1VsaDsQedwgyxEpKnMEJFETkDogBpv/kA==",
"requires": {}
}, },
"react-cookie": { "react-cookie": {
"version": "4.1.1", "version": "4.1.1",
@ -51050,7 +51237,8 @@
"bootstrap": { "bootstrap": {
"version": "4.6.2", "version": "4.6.2",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz",
"integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==" "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==",
"requires": {}
}, },
"entities": { "entities": {
"version": "2.2.0", "version": "2.2.0",
@ -51374,7 +51562,8 @@
"react-hook-form": { "react-hook-form": {
"version": "7.41.2", "version": "7.41.2",
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.41.2.tgz", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.41.2.tgz",
"integrity": "sha512-Uz5kNlfkEZve0sr5y2LsxPDGN3eNDjjKb1XJgand1E5Ay0S3zWo8YcJQNGu88/Zs6JaFnrJqTXbSr6B2q7wllA==" "integrity": "sha512-Uz5kNlfkEZve0sr5y2LsxPDGN3eNDjjKb1XJgand1E5Ay0S3zWo8YcJQNGu88/Zs6JaFnrJqTXbSr6B2q7wllA==",
"requires": {}
}, },
"react-html-parser": { "react-html-parser": {
"version": "2.0.2", "version": "2.0.2",
@ -51450,7 +51639,8 @@
"react-icons": { "react-icons": {
"version": "4.10.1", "version": "4.10.1",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz",
"integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==" "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==",
"requires": {}
}, },
"react-input-range": { "react-input-range": {
"version": "1.3.0", "version": "1.3.0",
@ -51533,7 +51723,8 @@
"react-meta-tags": { "react-meta-tags": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/react-meta-tags/-/react-meta-tags-1.0.1.tgz", "resolved": "https://registry.npmjs.org/react-meta-tags/-/react-meta-tags-1.0.1.tgz",
"integrity": "sha512-uylBI9UOI0QCGDsl6PlZaHnp+MxEpwslTlicPjnlcD68I8Kl2hdbuAZBRih+yU5StArSMB6T0jBrgst6rAuDYQ==" "integrity": "sha512-uylBI9UOI0QCGDsl6PlZaHnp+MxEpwslTlicPjnlcD68I8Kl2hdbuAZBRih+yU5StArSMB6T0jBrgst6rAuDYQ==",
"requires": {}
}, },
"react-motion": { "react-motion": {
"version": "0.5.2", "version": "0.5.2",
@ -51560,7 +51751,8 @@
"react-native-iphone-x-helper": { "react-native-iphone-x-helper": {
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz",
"integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==" "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==",
"requires": {}
}, },
"react-native-paper": { "react-native-paper": {
"version": "4.12.5", "version": "4.12.5",
@ -51605,12 +51797,14 @@
"react-onclickoutside": { "react-onclickoutside": {
"version": "6.12.2", "version": "6.12.2",
"resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.2.tgz", "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.12.2.tgz",
"integrity": "sha512-NMXGa223OnsrGVp5dJHkuKxQ4czdLmXSp5jSV9OqiCky9LOpPATn3vLldc+q5fK3gKbEHvr7J1u0yhBh/xYkpA==" "integrity": "sha512-NMXGa223OnsrGVp5dJHkuKxQ4czdLmXSp5jSV9OqiCky9LOpPATn3vLldc+q5fK3gKbEHvr7J1u0yhBh/xYkpA==",
"requires": {}
}, },
"react-only-when": { "react-only-when": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/react-only-when/-/react-only-when-1.0.2.tgz", "resolved": "https://registry.npmjs.org/react-only-when/-/react-only-when-1.0.2.tgz",
"integrity": "sha512-agE6l3L6bqaVuwNtjihTQ36M+VBfPS63KOzcNL4ZTmlwSxQPvhzIqmBWfiol0/wLYmKxCcBqgXkEJpvj5Kob8Q==" "integrity": "sha512-agE6l3L6bqaVuwNtjihTQ36M+VBfPS63KOzcNL4ZTmlwSxQPvhzIqmBWfiol0/wLYmKxCcBqgXkEJpvj5Kob8Q==",
"requires": {}
}, },
"react-overlays": { "react-overlays": {
"version": "5.2.1", "version": "5.2.1",
@ -51674,7 +51868,8 @@
"react-range": { "react-range": {
"version": "1.8.14", "version": "1.8.14",
"resolved": "https://registry.npmjs.org/react-range/-/react-range-1.8.14.tgz", "resolved": "https://registry.npmjs.org/react-range/-/react-range-1.8.14.tgz",
"integrity": "sha512-v2nyD5106rHf9dwHzq+WRlhCes83h1wJRHIMFjbZsYYsO6LF4mG/mR3cH7Cf+dkeHq65DItuqIbLn/3jjYjsHg==" "integrity": "sha512-v2nyD5106rHf9dwHzq+WRlhCes83h1wJRHIMFjbZsYYsO6LF4mG/mR3cH7Cf+dkeHq65DItuqIbLn/3jjYjsHg==",
"requires": {}
}, },
"react-rating-stars-component": { "react-rating-stars-component": {
"version": "2.2.0", "version": "2.2.0",
@ -51871,7 +52066,8 @@
"react-scroll-to-top": { "react-scroll-to-top": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/react-scroll-to-top/-/react-scroll-to-top-3.0.0.tgz", "resolved": "https://registry.npmjs.org/react-scroll-to-top/-/react-scroll-to-top-3.0.0.tgz",
"integrity": "sha512-I/k45Ujai097du59tHBbzGxN7Lyc6K8Uc3IChq6HMXaBfB8N/rrfm055T5Yv0DWfVpf6pOFaBmhD3LOfH5unGw==" "integrity": "sha512-I/k45Ujai097du59tHBbzGxN7Lyc6K8Uc3IChq6HMXaBfB8N/rrfm055T5Yv0DWfVpf6pOFaBmhD3LOfH5unGw==",
"requires": {}
}, },
"react-search-autocomplete": { "react-search-autocomplete": {
"version": "7.2.2", "version": "7.2.2",
@ -51986,7 +52182,8 @@
"react-side-effect": { "react-side-effect": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz",
"integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==" "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==",
"requires": {}
}, },
"react-simple-modal": { "react-simple-modal": {
"version": "1.1.5", "version": "1.1.5",
@ -52032,12 +52229,14 @@
"react-simple-modal-cb": { "react-simple-modal-cb": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/react-simple-modal-cb/-/react-simple-modal-cb-2.0.4.tgz", "resolved": "https://registry.npmjs.org/react-simple-modal-cb/-/react-simple-modal-cb-2.0.4.tgz",
"integrity": "sha512-BhUoY0ngqcAi2DtEq6Ii5HRh+yKOI+BB8ZlIILE5+2KLNH86Oeq9plq7KXKcKAzHtLPRr+iMqHqu7Hg8qdMTEA==" "integrity": "sha512-BhUoY0ngqcAi2DtEq6Ii5HRh+yKOI+BB8ZlIILE5+2KLNH86Oeq9plq7KXKcKAzHtLPRr+iMqHqu7Hg8qdMTEA==",
"requires": {}
}, },
"react-simple-star-rating": { "react-simple-star-rating": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/react-simple-star-rating/-/react-simple-star-rating-4.1.1.tgz", "resolved": "https://registry.npmjs.org/react-simple-star-rating/-/react-simple-star-rating-4.1.1.tgz",
"integrity": "sha512-mUj1FxGPchOly1Zj00eakntIEIZKxBaiGcMW+UE5RK3/UWt6+6i8HUHnIH8ICXbjQYS+gWGi4NamwgvMZYTYzg==" "integrity": "sha512-mUj1FxGPchOly1Zj00eakntIEIZKxBaiGcMW+UE5RK3/UWt6+6i8HUHnIH8ICXbjQYS+gWGi4NamwgvMZYTYzg==",
"requires": {}
}, },
"react-slideshow-image": { "react-slideshow-image": {
"version": "3.7.5", "version": "3.7.5",
@ -52096,7 +52295,8 @@
"react-social-login-buttons": { "react-social-login-buttons": {
"version": "3.6.1", "version": "3.6.1",
"resolved": "https://registry.npmjs.org/react-social-login-buttons/-/react-social-login-buttons-3.6.1.tgz", "resolved": "https://registry.npmjs.org/react-social-login-buttons/-/react-social-login-buttons-3.6.1.tgz",
"integrity": "sha512-DIz30W+C147s7wxwt8zgwjx5pE+gTJwtUzTNKpKZO3bEY06eLjcY1zvZ8h35hQd1Yjd7b4rLkeuZBwlLURYIfg==" "integrity": "sha512-DIz30W+C147s7wxwt8zgwjx5pE+gTJwtUzTNKpKZO3bEY06eLjcY1zvZ8h35hQd1Yjd7b4rLkeuZBwlLURYIfg==",
"requires": {}
}, },
"react-sortable-tree-patch-react-17": { "react-sortable-tree-patch-react-17": {
"version": "2.9.0", "version": "2.9.0",
@ -52264,7 +52464,8 @@
"react-to-print": { "react-to-print": {
"version": "2.14.13", "version": "2.14.13",
"resolved": "https://registry.npmjs.org/react-to-print/-/react-to-print-2.14.13.tgz", "resolved": "https://registry.npmjs.org/react-to-print/-/react-to-print-2.14.13.tgz",
"integrity": "sha512-PqUGgTRZvkyBzWgaZHVBECWPX2nGEc3HOUy6WNXof6HT4yTFI92wtIkqQtr4jfvHbadqjwTgzgh6vgN8KXlWWw==" "integrity": "sha512-PqUGgTRZvkyBzWgaZHVBECWPX2nGEc3HOUy6WNXof6HT4yTFI92wtIkqQtr4jfvHbadqjwTgzgh6vgN8KXlWWw==",
"requires": {}
}, },
"react-toastify": { "react-toastify": {
"version": "9.1.1", "version": "9.1.1",
@ -52297,12 +52498,14 @@
"react-transition-state": { "react-transition-state": {
"version": "1.1.5", "version": "1.1.5",
"resolved": "https://registry.npmjs.org/react-transition-state/-/react-transition-state-1.1.5.tgz", "resolved": "https://registry.npmjs.org/react-transition-state/-/react-transition-state-1.1.5.tgz",
"integrity": "sha512-ITY2mZqc2dWG2eitJkYNdcSFW8aKeOlkL2A/vowRrLL8GH3J6Re/SpD/BLvQzrVOTqjsP0b5S9N10vgNNzwMUQ==" "integrity": "sha512-ITY2mZqc2dWG2eitJkYNdcSFW8aKeOlkL2A/vowRrLL8GH3J6Re/SpD/BLvQzrVOTqjsP0b5S9N10vgNNzwMUQ==",
"requires": {}
}, },
"react-use-cookie": { "react-use-cookie": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/react-use-cookie/-/react-use-cookie-1.4.0.tgz", "resolved": "https://registry.npmjs.org/react-use-cookie/-/react-use-cookie-1.4.0.tgz",
"integrity": "sha512-e21YFkimh8OX6Ctqq89YeeiwsIL1jr2GyCeBdkBKDWY5X5o2yonbQuqfFODK4opteJS3F7ya0OuYg06lOeqvJQ==" "integrity": "sha512-e21YFkimh8OX6Ctqq89YeeiwsIL1jr2GyCeBdkBKDWY5X5o2yonbQuqfFODK4opteJS3F7ya0OuYg06lOeqvJQ==",
"requires": {}
}, },
"react-video-js-player": { "react-video-js-player": {
"version": "1.1.1", "version": "1.1.1",
@ -52844,7 +53047,8 @@
"reactjs-popup": { "reactjs-popup": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/reactjs-popup/-/reactjs-popup-2.0.5.tgz", "resolved": "https://registry.npmjs.org/reactjs-popup/-/reactjs-popup-2.0.5.tgz",
"integrity": "sha512-b5hv9a6aGsHEHXFAgPO5s1Jw1eSkopueyUVxQewGdLgqk2eW0IVXZrPRpHR629YcgIpC2oxtX8OOZ8a7bQJbxA==" "integrity": "sha512-b5hv9a6aGsHEHXFAgPO5s1Jw1eSkopueyUVxQewGdLgqk2eW0IVXZrPRpHR629YcgIpC2oxtX8OOZ8a7bQJbxA==",
"requires": {}
}, },
"reactstrap": { "reactstrap": {
"version": "9.1.5", "version": "9.1.5",
@ -53271,7 +53475,8 @@
"rifm": { "rifm": {
"version": "0.12.1", "version": "0.12.1",
"resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz", "resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz",
"integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==" "integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==",
"requires": {}
}, },
"rimraf": { "rimraf": {
"version": "3.0.2", "version": "3.0.2",
@ -54030,7 +54235,8 @@
"bootstrap": { "bootstrap": {
"version": "4.3.1", "version": "4.3.1",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz",
"integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==",
"requires": {}
} }
} }
}, },
@ -54749,7 +54955,8 @@
"style-loader": { "style-loader": {
"version": "3.3.1", "version": "3.3.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz",
"integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==" "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==",
"requires": {}
}, },
"style-to-js": { "style-to-js": {
"version": "1.1.1", "version": "1.1.1",
@ -54802,7 +55009,8 @@
"styled-jsx": { "styled-jsx": {
"version": "5.0.7", "version": "5.0.7",
"resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz",
"integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==" "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==",
"requires": {}
}, },
"stylehacks": { "stylehacks": {
"version": "4.0.3", "version": "4.0.3",
@ -55069,7 +55277,8 @@
"swr": { "swr": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/swr/-/swr-1.3.0.tgz", "resolved": "https://registry.npmjs.org/swr/-/swr-1.3.0.tgz",
"integrity": "sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==" "integrity": "sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==",
"requires": {}
}, },
"symbol-observable": { "symbol-observable": {
"version": "1.2.0", "version": "1.2.0",
@ -55753,17 +55962,20 @@
"use-composed-ref": { "use-composed-ref": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz",
"integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==" "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
"requires": {}
}, },
"use-global-state": { "use-global-state": {
"version": "0.1.2", "version": "0.1.2",
"resolved": "https://registry.npmjs.org/use-global-state/-/use-global-state-0.1.2.tgz", "resolved": "https://registry.npmjs.org/use-global-state/-/use-global-state-0.1.2.tgz",
"integrity": "sha512-zfkipI7HgwPEhYD8JTUxCrm50sHwXMbKAQ5WtAkD41LJ6XJTRZROgeMFxmAPdk58FcXPOOhOE+pUnE1HbGeTuw==" "integrity": "sha512-zfkipI7HgwPEhYD8JTUxCrm50sHwXMbKAQ5WtAkD41LJ6XJTRZROgeMFxmAPdk58FcXPOOhOE+pUnE1HbGeTuw==",
"requires": {}
}, },
"use-isomorphic-layout-effect": { "use-isomorphic-layout-effect": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
"integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==" "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
"requires": {}
}, },
"use-latest": { "use-latest": {
"version": "1.2.1", "version": "1.2.1",
@ -55776,7 +55988,8 @@
"use-sync-external-store": { "use-sync-external-store": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
"integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
"requires": {}
}, },
"util": { "util": {
"version": "0.11.1", "version": "0.11.1",
@ -56868,7 +57081,8 @@
"ws": { "ws": {
"version": "8.11.0", "version": "8.11.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==" "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
"requires": {}
} }
} }
}, },
@ -57383,7 +57597,8 @@
"ws": { "ws": {
"version": "7.5.9", "version": "7.5.9",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
"requires": {}
}, },
"wysiwyg": { "wysiwyg": {
"version": "2.0.0", "version": "2.0.0",

View File

@ -1,5 +1,5 @@
{ {
"name": "my-app2", "name": "MySy Training",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
@ -28,6 +28,7 @@
"@mui/x-date-pickers": "^5.0.0", "@mui/x-date-pickers": "^5.0.0",
"@mui/x-date-pickers-pro": "^5.0.0", "@mui/x-date-pickers-pro": "^5.0.0",
"@nivo/bar": "^0.84.0", "@nivo/bar": "^0.84.0",
"@nivo/line": "^0.84.0",
"@nivo/pie": "^0.84.0", "@nivo/pie": "^0.84.0",
"@react-icons/all-files": "^4.1.0", "@react-icons/all-files": "^4.1.0",
"@stripe/react-stripe-js": "^1.12.0", "@stripe/react-stripe-js": "^1.12.0",
@ -52,6 +53,7 @@
"gatsby-plugin-cookie-gdpr-axeptio": "^1.0.2", "gatsby-plugin-cookie-gdpr-axeptio": "^1.0.2",
"google-map-react": "^2.1.10", "google-map-react": "^2.1.10",
"html-react-parser": "^2.0.0", "html-react-parser": "^2.0.0",
"increase-memory-limit": "^1.0.7",
"js-cookie": "^3.0.1", "js-cookie": "^3.0.1",
"js-file-download": "^0.4.12", "js-file-download": "^0.4.12",
"js-video-url-parser": "^0.5.1", "js-video-url-parser": "^0.5.1",
@ -146,8 +148,8 @@
"wysiwyg": "^2.0.0" "wysiwyg": "^2.0.0"
}, },
"scripts": { "scripts": {
"start": "react-scripts start", "start": "set \"GENERATE_SOURCEMAP=false\" && react-scripts start --max-old-space-size=16384",
"build": "react-scripts build", "build": "react-scripts build --max-old-space-size=16384",
"test": "react-scripts test", "test": "react-scripts test",
"eject": "react-scripts eject", "eject": "react-scripts eject",
"winBuild": "set \"GENERATE_SOURCEMAP=false\" && react-scripts build" "winBuild": "set \"GENERATE_SOURCEMAP=false\" && react-scripts build"

View File

@ -0,0 +1,431 @@
import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import 'reactjs-popup/dist/index.css';
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import Box from '@mui/material/Box';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { tokens } from "./../theme";
import { MdOutlineAddchart, } from "react-icons/md";
import {
ListItem,
ListItemText,
useTheme,
} from "@mui/material";
import { ResponsiveLine } from '@nivo/line'
import { TbColumns2, TbColumns1 } from "react-icons/tb";
const Dashbord_Formation = (props) => {
const history = useHistory();
const [isLoading, setLoading] = useState();
const theme = useTheme();
const colors = tokens(theme.palette.mode);
const [isMySyDashboard, setisMySyDashboard] = useState(false);
var date_today_90j = new Date();
date_today_90j.setDate(date_today_90j.getDate() - 90);
const [p_filter_date_from, setp_filter_date_from] = useState(date_today_90j.toLocaleDateString('fr-FR'));
const [p_filter_date_to, setp_filter_date_to] = useState(new Date().toLocaleDateString('fr-FR'));
const [dashbord_internal_code, setdashbord_internal_code] = useState("");
const [Getall_Qry_Formation_Session_result_JSON, setGetall_Qry_Formation_Session_result_JSON] = useState([]);
const [Getall_Qry_Formation_Session_api, setGetall_Qry_Formation_Session_api] = useState();
const [Getall_Qry_Formation_Session_message, setGetall_Qry_Formation_Session_message] = useState();
const [Getall_Qry_Formation_Session_result, setGetall_Qry_Formation_Session_result] = useState([]);
function Getall_Qry_Formation_Session(event) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
var date_from = "";
if (p_filter_date_from) {
date_from = p_filter_date_from;
}
var date_to = "";
if (p_filter_date_to) {
date_to = p_filter_date_to;
}
form.append("token", stored_cookie);
form.append("session_start_date", date_from);
form.append("session_end_date", date_to);
form.append("filter_value", filter_value);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Qery_Formation_By_Session_By_Periode/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
console.log(" In Getall_Qry_Formation_Session res.data.status = " + res.data.status);
console.log(" In Getall_Qry_Formation_Session res.data.message r_class = " + res.data.message);
setGetall_Qry_Formation_Session_result_JSON(JSON.parse( res.data.message ));
var jsonObj = JSON.parse( res.data.message );
console.log(" jsonObj = ", jsonObj);
setGetall_Qry_Formation_Session_api("true");
setGetall_Qry_Formation_Session_result(res.data.message );
console.log(" Getall_Qry_Formation_Session_result_JSON = ", Getall_Qry_Formation_Session_result_JSON);
}
else {
setGetall_Qry_Formation_Session_api("false");
setGetall_Qry_Formation_Session_message(res.data.message);
alert(res.data.message)
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Getall_Qry_Formation_Session = ', error);
setGetall_Qry_Formation_Session_api("false");
alert("Impossible de récuperer les données demandées")
//setmyApimyApiMessage("")
})
}
useEffect(() => {
Getall_Qry_Formation_Session();
window.scrollTo({
top: 0,
behavior: "smooth",
});
}, [])
const [Add_To_User_TBD_api, setAdd_To_User_TBD_api] = useState();
const [Add_To_User_TBD_message, setAdd_To_User_TBD_message] = useState();
const [Add_To_User_TBD_result, setAdd_To_User_TBD_result] = useState();
function Add_To_User_TBD(local_dashbord_internal_code) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
//console.log(" ### dashbord_internal_code = ", local_dashbord_internal_code);
var tdb_title = "default";
var filter_val = "";
if (document.getElementsByName("tdb_title")[0]) {
tdb_title = document.getElementsByName("tdb_title")[0].value;
}
if (document.getElementsByName("filtre11")[0]) {
filter_val = document.getElementsByName("filtre11")[0].value;
}
// Si filter_val = "d", alors on va recuperer l'interval de date
if (String(filter_val) === "d") {
var date_from = p_filter_date_from;
var date_to = p_filter_date_to;
filter_val = "{'session_start_date':'" + String(date_from) + "' , 'session_end_date':'" + String(date_to) + "'}";
} else {
filter_val = "{'periode':'" + String(filter_val) + "'}"
}
form.append("token", stored_cookie);
form.append("dashbord_internal_code", local_dashbord_internal_code);
form.append("default_filter", filter_val);
form.append("title", tdb_title);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Add_To_User_Dashbord/";
//console.log(" ## myurl = ", myurl);
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Add_To_User_TBD res.data.status = " + res.data.status);
//console.log(" In Add_To_User_TBD res.data.message r_class = " + res.data.message);
setAdd_To_User_TBD_api("true");
setAdd_To_User_TBD_result(res.data.message);
settdb_title();
alert(res.data.message)
}
else {
setAdd_To_User_TBD_api("false");
setAdd_To_User_TBD_message(res.data.message);
alert(res.data.message)
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Add_To_User_TBD = ', error);
setAdd_To_User_TBD_api("false");
alert("Impossible d'ajouter le tableau de bord");
//setmyApimyApiMessage("")
})
}
const [filter_value, setfilter_value] = useState("d");
const [tdb_title, settdb_title] = useState();
const [display_nb_column, setdisplay_nb_column] = useState("2");
const [display_column_size, setdisplay_column_size] = useState("50%");
return (
<div className="dashbord_formation">
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
<h3> Tableaux de bord des formations</h3>
<div className="div_row"> &nbsp;</div>
<div className="div_row" style={{ "textAlign": "right", "paddingRight": "20px" }}> Affichage &nbsp;
<Tooltip id="my_tooltip_1_col" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my_tooltip_1_col" data-tooltip-content="Affichage sur une colonne">
<TbColumns1 style={{ "cursor": "pointer" }} onClick={(e) => {
setdisplay_nb_column("1");
setdisplay_column_size("100%");
}} />
</a> &nbsp; &nbsp;
<Tooltip id="my_tooltip_2_col" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my_tooltip_2_col" data-tooltip-content="Affichage sur deux colonnes">
<TbColumns2 style={{ "cursor": "pointer" }} onClick={(e) => {
setdisplay_nb_column("2");
setdisplay_column_size("50%");
}} />
</a> </div>
<div className="div_row">
<div className="" style={{ "width": "30%" }}>
Filtre <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre11"
id="filtre11"
select
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={filter_value}
onChange={(e) => {
setfilter_value(e.target.value);
}
}
>
<MenuItem value="m0" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Mois en cours &nbsp;&nbsp;</MenuItem>
<MenuItem value="m1" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Mois précédant &nbsp;</MenuItem>
<MenuItem value="d" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Choisir des dates &nbsp;</MenuItem>
</TextField>
</div>
{filter_value && String(filter_value) === "d" && <div>
<div className="session_caract">
Date Debut
<DatePicker
name="one_sessiondatedebut"
id="one_sessiondatedebut"
selected={new Date(moment(p_filter_date_from, "dd/MM/yyyy"))}
onChange={(date) => {
setp_filter_date_from(format(date, 'dd/MM/yyyy'));
}
}
showTimeSelect={false}
dateFormat="dd/MM/yyyy"
className="disabled_style session_caract_Dialog_DatePicker"
locale='fr-FR'
/>
</div>
<div className="session_caract">
Date Fin
<DatePicker
name="one_sessiondatefin"
id="one_sessiondatefin"
selected={new Date(moment(p_filter_date_to, "dd/MM/yyyy"))}
onChange={(date) => {
setp_filter_date_to(format(date, 'dd/MM/yyyy'));
}
}
showTimeSelect={false}
dateFormat="dd/MM/yyyy"
className="disabled_style enable_style"
/>
</div>
</div>}
<Button variant="contained" className="bton_enreg" onClick={(e) => {
Getall_Qry_Formation_Session();
}}> Afficher
</Button><br />
</div>
<div style={{ "float": "left", "width": "100%", "paddingRight": "5px" }}>
<div style={{ "float": "left", "width": String(display_column_size), "height": "42rem", "float": "left", "paddingRight": "5px" }} >
<div className="titre1" style={{ "float": "left", "cursor": "none" }}>
<nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Formation : Evolution session par formation </nav>
<Tooltip id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-content="Ajouter à ma liste de TBD">
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<MdOutlineAddchart style={{ "cursor": "pointer", }} onClick={(e) => settdb_title("1")} />
</nav>
</a>
</div>
{tdb_title && String(tdb_title) === "1" && <nav> Donnez un titre <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="tdb_title"
id="tdb_title"
text
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
/>
<nav style={{ "textAlign": "center" }}> <button onClick={(event) => {
setdashbord_internal_code("CODE_FORMATION_01")
Add_To_User_TBD("tbd_code_formation_01");
}}> Ajouter </button> &nbsp;&nbsp; <button onClick={(e) => settdb_title("0")}> Fermer </button>
</nav>
</nav>}
<Box style={{ "color": "black", "height": "30rem" }}>
&nbsp;
<ResponsiveLine
data={Getall_Qry_Formation_Session_result_JSON}
margin={{ top: 50, right: 110, bottom: 50, left: 60 }}
xScale={{ type: 'point' }}
yScale={{
type: 'linear',
min: 'auto',
max: 'auto',
stacked: true,
reverse: false
}}
yFormat=" >-.2f"
axisTop={null}
axisRight={null}
axisBottom={{
tickSize: 5,
tickPadding: 5,
tickRotation: 0,
legend: 'transportation',
legendOffset: 36,
legendPosition: 'middle'
}}
axisLeft={{
tickSize: 5,
tickPadding: 5,
tickRotation: 0,
legend: 'count',
legendOffset: -40,
legendPosition: 'middle'
}}
pointSize={10}
pointColor={{ theme: 'background' }}
pointBorderWidth={2}
pointBorderColor={{ from: 'serieColor' }}
pointLabelYOffset={-12}
useMesh={true}
legends={[
{
anchor: 'bottom-right',
direction: 'column',
justify: false,
translateX: 100,
translateY: 0,
itemsSpacing: 0,
itemDirection: 'left-to-right',
itemWidth: 80,
itemHeight: 20,
itemOpacity: 0.75,
symbolSize: 12,
symbolShape: 'circle',
symbolBorderColor: 'rgba(0, 0, 0, .5)',
effects: [
{
on: 'hover',
style: {
itemBackground: 'rgba(0, 0, 0, .03)',
itemOpacity: 1
}
}
]
}
]}
/>
</Box>
</div>
</div>
</div>
)
}
export default Dashbord_Formation;

View File

@ -0,0 +1,444 @@
import React, { useRef, useState, useEffect } from "react";
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom";
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import fileDownload from 'js-file-download'
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import "react-datepicker/dist/react-datepicker.css";
import Box from '@mui/material/Box';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { tokens } from "../theme";
import { MdDeleteForever } from "react-icons/md";
import {
useTheme,
} from "@mui/material";
import { ResponsiveLine } from '@nivo/line'
import { RiFileExcel2Line } from "react-icons/ri";
const Dashbord_Formation_Evol_Session = (props) => {
const [user_dashbord_id, setuser_dashbord_id] = useState(props.user_dashbord_id);
const history = useHistory();
const [isLoading, setLoading] = useState();
const theme = useTheme();
const colors = tokens(theme.palette.mode);
const [isMySyDashboard, setisMySyDashboard] = useState(false);
var date_today_90j = new Date();
date_today_90j.setDate(date_today_90j.getDate() - 90);
const [p_filter_date_from, setp_filter_date_from] = useState(date_today_90j.toLocaleDateString('fr-FR'));
const [p_filter_date_to, setp_filter_date_to] = useState(new Date().toLocaleDateString('fr-FR'));
const [Remove_From_User_TBD_api, setRemove_From_User_TBD_api] = useState();
const [Remove_From_User_TBD_message, setRemove_From_User_TBD_message] = useState();
const [Remove_From_User_TBD_result, setRemove_From_User_TBD_result] = useState();
function Remove_From_User_TBD() {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("user_dashbord_id", user_dashbord_id);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_To_User_Dashbord/";
//console.log(" ## myurl = ", myurl);
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
//console.log(" In Remove_From_User_TBD res.data.status = " + res.data.status);
//console.log(" In Remove_From_User_TBD res.data.message r_class = " + res.data.message);
setRemove_From_User_TBD_api("true");
setRemove_From_User_TBD_result(res.data.message);
Getall_Qry_Formation_Session();
alert(res.data.message);
window.location.reload();
}
else {
setRemove_From_User_TBD_api("false");
setRemove_From_User_TBD_message(res.data.message);
alert(res.data.message)
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Remove_From_User_TBD = ', error);
setRemove_From_User_TBD_api("false");
alert("Impossible de supprimer le tableau de bord de votre liste");
//setmyApimyApiMessage("")
})
}
const [Getall_Qry_Formation_Session_result_JSON, setGetall_Qry_Formation_Session_result_JSON] = useState([]);
const [Getall_Qry_Formation_Session_api, setGetall_Qry_Formation_Session_api] = useState();
const [Getall_Qry_Formation_Session_message, setGetall_Qry_Formation_Session_message] = useState();
const [Getall_Qry_Formation_Session_result, setGetall_Qry_Formation_Session_result] = useState([]);
function Getall_Qry_Formation_Session(event) {
var form = new FormData();
const stored_cookie = getCookie('tokenmysypart');
var date_from = "";
if (p_filter_date_from) {
date_from = p_filter_date_from;
}
var date_to = "";
if (p_filter_date_to) {
date_to = p_filter_date_to;
}
form.append("token", stored_cookie);
form.append("session_start_date", date_from);
form.append("session_end_date", date_to);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Qery_Formation_By_Session_By_Periode/";
setLoading(true);
axios.post(myurl, form).then(res => {
setLoading(false);
if (String(res.data.status) === String("true")) {
console.log(" In Getall_Qry_Formation_Session res.data.status = " + res.data.status);
console.log(" In Getall_Qry_Formation_Session res.data.message r_class = " + res.data.message);
setGetall_Qry_Formation_Session_result_JSON(JSON.parse( res.data.message ));
var jsonObj = JSON.parse( res.data.message );
console.log(" jsonObj = ", jsonObj);
setGetall_Qry_Formation_Session_api("true");
setGetall_Qry_Formation_Session_result(res.data.message );
console.log(" Getall_Qry_Formation_Session_result_JSON = ", Getall_Qry_Formation_Session_result_JSON);
}
else {
setGetall_Qry_Formation_Session_api("false");
setGetall_Qry_Formation_Session_message(res.data.message);
alert(res.data.message)
}
}).catch((error) => {
setLoading(false);
console.warn('Not good man :( Getall_Qry_Formation_Session = ', error);
setGetall_Qry_Formation_Session_api("false");
alert("Impossible de récuperer les données demandées")
//setmyApimyApiMessage("")
})
}
const [dashbord_internal_code, setdashbord_internal_code] = useState("");
useEffect(() => {
setp_filter_date_from(props.user_dashbord_filter_start);
setp_filter_date_to(props.user_dashbord_filter_end);
Getall_Qry_Formation_Session();
window.scrollTo({
top: 0,
behavior: "smooth",
});
}, [])
const [filter_value, setfilter_value] = useState("");
const [tdb_title, settdb_title] = useState();
function Export_Dashbord_to_CSV(local_dashbord_internal_id) {
const stored_cookie = getCookie('tokenmysypart');
var nom_fichier_cmd = "export_csv.csv";
console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- local_dashbord_internal_id = ", local_dashbord_internal_id);
var url = process.env.REACT_APP_API_URL + "myclass/api/Get_Qery_Formation_By_Session_By_Periode_Export_CSV/" + stored_cookie + "/" + local_dashbord_internal_id;
//console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- selected_id = ", selected_id, " --- url =", url);
setLoading(true);
axios.get(url, { responseType: 'blob', },)
.then((res) => {
setLoading(false);
//console.log(" In Export_Dashbord_to_CSV res.data = " + res.data);
if (String(res.data) === String("false")) {
alert("Impossible d'exporter les données (2) ");
} else {
fileDownload(res.data, nom_fichier_cmd)
}
}).catch((error) => {
setLoading(false);
console.error('Error:', error);
alert(" Impossible d'exporter les données ")
});
}
return (
<div className="dashbord_session" style={{ "marginLeft": "1px", "marginRight": "2px" }}>
{isLoading && <div className="loader-container">
<div className="mysy_spinner"> <img src={img_loading_spin} /> </div>
</div>}
{/* <div className="div_row">
<div className="" style={{ "width": "30%" }}>
Filtre <br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="filtre11"
id="filtre11"
select
InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
value={filter_value}
onChange={(e) => {
setfilter_value(e.target.value);
}
}
>
<MenuItem value="m0" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Mois en cours &nbsp;&nbsp;</MenuItem>
<MenuItem value="t0" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Trimestre en cours &nbsp;</MenuItem>
<MenuItem value="d" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Choisir des dates &nbsp;</MenuItem>
</TextField>
</div>
{filter_value && String(filter_value) === "d" && <div>
<div className="session_caract">
Date Debut
<DatePicker
name="one_sessiondatedebut"
id="one_sessiondatedebut"
selected={new Date(moment(p_filter_date_from, "dd/MM/yyyy"))}
onChange={(date) => {
setp_filter_date_from(format(date, 'dd/MM/yyyy'));
}
}
showTimeSelect={false}
dateFormat="dd/MM/yyyy"
className="disabled_style session_caract_Dialog_DatePicker"
locale='fr-FR'
/>
</div>
<div className="session_caract">
Date Fin
<DatePicker
name="one_sessiondatefin"
id="one_sessiondatefin"
selected={new Date(moment(p_filter_date_to, "dd/MM/yyyy"))}
onChange={(date) => {
setp_filter_date_to(format(date, 'dd/MM/yyyy'));
}
}
showTimeSelect={false}
dateFormat="dd/MM/yyyy"
className="disabled_style enable_style"
/>
</div>
</div>}
<Button variant="contained" className="bton_enreg" onClick={(e) => {
Getall_Qry_Session_Data();
Getall_Qry_Session_Data_By_Trainer();
}}> Afficher
</Button><br />
</div>*/}
<div style={{ "height": "40rem" }}>
<div className="titre1" style={{ "float": "left", "cursor": "none" }}>
<nav style={{ "width": "80%", "float": "left", "textAlign": "center" }}> TBD : {props.user_dashbord_title} - Du : {props.user_dashbord_filter_start} au : {props.user_dashbord_filter_end}</nav>
<Tooltip id="my-tooltip02" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip02" data-tooltip-content="Supprimer de ma liste de TBD">
<Popup
trigger={
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<MdDeleteForever style={{ "cursor": "pointer", }} />
</nav>
}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, le tableau sera supprimé de votre tableau de bord global.<br />
Vous pourrez le rajouter à nouveau si besoin. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
Remove_From_User_TBD();
//console.log('modal closed ');
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</a>
<Tooltip id="my-tooltip03" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip03" data-tooltip-content="Export Csv/Excel">
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<RiFileExcel2Line style={{ "cursor": "pointer", }} onClick={(event) => {
Export_Dashbord_to_CSV(props.user_dashbord_id);
}} />
</nav>
</a>
</div>
<Box style={{ "color": "black", "height": "30rem" }}>
&nbsp;
<ResponsiveLine
data={Getall_Qry_Formation_Session_result_JSON}
margin={{ top: 50, right: 110, bottom: 50, left: 60 }}
xScale={{ type: 'point' }}
yScale={{
type: 'linear',
min: 'auto',
max: 'auto',
stacked: true,
reverse: false
}}
yFormat=" >-.2f"
axisTop={null}
axisRight={null}
axisBottom={{
tickSize: 5,
tickPadding: 5,
tickRotation: 0,
legend: 'transportation',
legendOffset: 36,
legendPosition: 'middle'
}}
axisLeft={{
tickSize: 5,
tickPadding: 5,
tickRotation: 0,
legend: 'count',
legendOffset: -40,
legendPosition: 'middle'
}}
pointSize={10}
pointColor={{ theme: 'background' }}
pointBorderWidth={2}
pointBorderColor={{ from: 'serieColor' }}
pointLabelYOffset={-12}
useMesh={true}
legends={[
{
anchor: 'bottom-right',
direction: 'column',
justify: false,
translateX: 100,
translateY: 0,
itemsSpacing: 0,
itemDirection: 'left-to-right',
itemWidth: 80,
itemHeight: 20,
itemOpacity: 0.75,
symbolSize: 12,
symbolShape: 'circle',
symbolBorderColor: 'rgba(0, 0, 0, .5)',
effects: [
{
on: 'hover',
style: {
itemBackground: 'rgba(0, 0, 0, .03)',
itemOpacity: 1
}
}
]
}
]}
/>
</Box>
</div>
</div>
)
}
export default Dashbord_Formation_Evol_Session;

View File

@ -6,59 +6,20 @@ import Button from '@mui/material/Button';
import axios from "axios"; import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie'; import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css"; import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css' import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip' import { Tooltip } from 'react-tooltip'
import add_plus from "../mysy_img/plus.png";
import excel_icone from "../mysy_img/excel_icone.png";
import participants from "../mysy_img/participants.png";
import fileDownload from 'js-file-download'
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css'; import 'reactjs-popup/dist/index.css';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";
import DatePicker from "react-datepicker"; import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css"; import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns' import { format } from 'date-fns'
import moment from "moment"; import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box'; import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif"; import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
//import FullCalendar from "@fullcalendar/react";
import daygridPlugin from "@fullcalendar/daygrid";
//import interactionPlugin from "@fullcalendar/interaction";
//import timeGridPlugin from "@fullcalendar/timegrid";
import allLocales from '@fullcalendar/core/locales-all'
import { RepeatOnRounded } from "@mui/icons-material";
import { alignPropType } from "react-bootstrap/esm/types";
import { tokens } from "./../theme"; import { tokens } from "./../theme";
import { MdOutlineAddchart, MdAssignmentAdd, MdOutlinePlaylistRemove, MdDeleteForever } from "react-icons/md"; import { MdOutlineAddchart,} from "react-icons/md";
import FullCalendar, { formatDate } from "@fullcalendar/react";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin from "@fullcalendar/interaction";
import { import {
ListItem,
ListItemText,
useTheme, useTheme,
} from "@mui/material"; } from "@mui/material";
@ -69,10 +30,6 @@ import { TbColumns2, TbColumns1 } from "react-icons/tb";
const Dashbord_Session = (props) => { const Dashbord_Session = (props) => {
const myconntected_employee_id = props.conntected_employee_id;
const [selected_employee_id, setselected_employee_id] = useState(props.conntected_employee_id);
const history = useHistory(); const history = useHistory();
const [isLoading, setLoading] = useState(); const [isLoading, setLoading] = useState();
@ -187,6 +144,7 @@ const Dashbord_Session = (props) => {
form.append("token", stored_cookie); form.append("token", stored_cookie);
form.append("session_start_date", date_from); form.append("session_start_date", date_from);
form.append("session_end_date", date_to); form.append("session_end_date", date_to);
form.append("filter_value", filter_value);
@ -247,6 +205,7 @@ const Dashbord_Session = (props) => {
form.append("token", stored_cookie); form.append("token", stored_cookie);
form.append("session_start_date", date_from); form.append("session_start_date", date_from);
form.append("session_end_date", date_to); form.append("session_end_date", date_to);
form.append("filter_value", filter_value);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Qery_Session_By_Trainer_By_Periode/"; var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Qery_Session_By_Trainer_By_Periode/";
@ -309,7 +268,7 @@ const Dashbord_Session = (props) => {
form.append("token", stored_cookie); form.append("token", stored_cookie);
form.append("session_start_date", date_from); form.append("session_start_date", date_from);
form.append("session_end_date", date_to); form.append("session_end_date", date_to);
form.append("filter_value", filter_value);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Qery_Session_Repartition_Session_By_Trainer_By_Periode/"; var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Qery_Session_Repartition_Session_By_Trainer_By_Periode/";
@ -326,7 +285,7 @@ const Dashbord_Session = (props) => {
setGetall_Qry_Session_Data_Pourcent_Trainer_api("true"); setGetall_Qry_Session_Data_Pourcent_Trainer_api("true");
setGetall_Qry_Session_Data_Pourcent_Trainer_result(res.data.message); setGetall_Qry_Session_Data_Pourcent_Trainer_result(res.data.message);
// console.log("### setGetall_Qry_Session_Data_Pourcent_Trainer_result_JSON = ", Getall_Qry_Session_Data_Pourcent_Trainer_result_JSON); //console.log("### setGetall_Qry_Session_Data_Pourcent_Trainer_result_JSON = ", Getall_Qry_Session_Data_Pourcent_Trainer_result_JSON);
} }
else { else {
@ -361,7 +320,7 @@ const Dashbord_Session = (props) => {
}, []) }, [])
const [filter_value, setfilter_value] = useState("m0"); const [filter_value, setfilter_value] = useState("d");
const [tdb_title, settdb_title] = useState(); const [tdb_title, settdb_title] = useState();
const [display_nb_column, setdisplay_nb_column] = useState("2"); const [display_nb_column, setdisplay_nb_column] = useState("2");
@ -381,7 +340,7 @@ const Dashbord_Session = (props) => {
<TbColumns1 style={{ "cursor": "pointer" }} onClick={(e) => { <TbColumns1 style={{ "cursor": "pointer" }} onClick={(e) => {
setdisplay_nb_column("1"); setdisplay_nb_column("1");
setdisplay_column_size("100%"); setdisplay_column_size("100%");
console.log(" display_column_size = ", display_column_size);
}} /> }} />
</a> &nbsp; &nbsp; </a> &nbsp; &nbsp;
<Tooltip id="my_tooltip_2_col" style={{ "fontSize": "12px" }} /> <Tooltip id="my_tooltip_2_col" style={{ "fontSize": "12px" }} />
@ -389,7 +348,7 @@ const Dashbord_Session = (props) => {
<TbColumns2 style={{ "cursor": "pointer" }} onClick={(e) => { <TbColumns2 style={{ "cursor": "pointer" }} onClick={(e) => {
setdisplay_nb_column("2"); setdisplay_nb_column("2");
setdisplay_column_size("50%"); setdisplay_column_size("50%");
console.log(" display_column_size = ", display_column_size);
}} /> }} />
</a> </div> </a> </div>
@ -415,7 +374,7 @@ const Dashbord_Session = (props) => {
> >
<MenuItem value="m0" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Mois en cours &nbsp;&nbsp;</MenuItem> <MenuItem value="m0" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>Mois en cours &nbsp;&nbsp;</MenuItem>
<MenuItem value="t0" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Trimestre en cours &nbsp;</MenuItem> <MenuItem value="m1" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Mois précédant &nbsp;</MenuItem>
<MenuItem value="d" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Choisir des dates &nbsp;</MenuItem> <MenuItem value="d" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Choisir des dates &nbsp;</MenuItem>
</TextField> </TextField>
</div> </div>
@ -464,71 +423,52 @@ const Dashbord_Session = (props) => {
<Button variant="contained" className="bton_enreg" onClick={(e) => { <Button variant="contained" className="bton_enreg" onClick={(e) => {
Getall_Qry_Session_Data(); Getall_Qry_Session_Data();
Getall_Qry_Session_Data_By_Trainer(); Getall_Qry_Session_Data_By_Trainer();
Getall_Qry_Session_Data_Pourcent_Trainer();
}}> Afficher }}> Afficher
</Button><br /> </Button><br />
</div> </div>
<div style={{ "float": "left", "width": "100%" , "paddingRight":"5px" }}>
<div style={{ "float": "left", "width": String(display_column_size),"height":"30rem" , "float":"left", "paddingRight":"5px"}} >
<div style={{ "float": "left", "width": "100%", "paddingRight": "5px" }}>
<div style={{ "float": "left", "width": String(display_column_size), "height": "42rem", "float": "left", "paddingRight": "5px" }} >
<div className="titre1" style={{ "float": "left", "cursor": "none" }}> <div className="titre1" style={{ "float": "left", "cursor": "none" }}>
<nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Session : Taux de remplissage </nav> <nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Session : Taux de remplissage </nav>
<Tooltip id="my-tooltip01" style={{ "fontSize": "12px" }} /> <Tooltip id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-content="Ajouter à ma liste de TBD"> <a data-tooltip-id="my-tooltip01" data-tooltip-content="Ajouter à ma liste de TBD">
<Popup <nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
trigger={ <MdOutlineAddchart style={{ "cursor": "pointer", }} onClick={(e) => settdb_title("1")} />
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}> </nav>
<MdOutlineAddchart style={{ "cursor": "pointer", }} />
</nav>
}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, le tableau sera ajouté de votre tableau de bord global.<br />
Vous pourrez le supprimer à nouveau si besoin. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
setdashbord_internal_code("CODE_SESSION_01")
Add_To_User_TBD("tbd_code_session_01");
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</a> </a>
</div> </div>
{tdb_title && String(tdb_title) === "1" && <nav> Donnez un titre <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="tdb_title"
id="tdb_title"
text
<Box height="50vh" style={{ "color": "black" }}> InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
/>
<nav style={{ "textAlign": "center" }}> <button onClick={(event) => {
setdashbord_internal_code("CODE_SESSION_01")
Add_To_User_TBD("tbd_code_session_01");
}}> Ajouter </button> &nbsp;&nbsp; <button onClick={(e) => settdb_title("0")}> Fermer </button>
</nav>
</nav>}
<Box style={{ "color": "black", "height": "30rem" }}>
&nbsp; &nbsp;
<ResponsiveBar <ResponsiveBar
data={Getall_Qry_Session_Data_result_JSON} data={Getall_Qry_Session_Data_result_JSON}
@ -668,64 +608,41 @@ const Dashbord_Session = (props) => {
</div> </div>
<div style={{ "float": "left", "width": String(display_column_size),"height":"30rem" , "float":"left", "paddingRight":"5px"}} > <div style={{ "float": "left", "width": String(display_column_size), "height": "42rem", "float": "left", "paddingRight": "5px" }} >
<div className="titre1" style={{ "float": "left", "cursor": "none" }}> <div className="titre1" style={{ "float": "left", "cursor": "none" }}>
<nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Session : Nb Session par formateur </nav> <nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Session : Nb Session par formateur </nav>
<Tooltip id="my-tooltip01" style={{ "fontSize": "12px" }} /> <Tooltip id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-content="Ajouter à ma liste de TBD"> <a data-tooltip-id="my-tooltip01" data-tooltip-content="Ajouter à ma liste de TBD">
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<Popup <MdOutlineAddchart style={{ "cursor": "pointer", }} onClick={(e) => settdb_title("2")} />
trigger={ </nav>
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<MdOutlineAddchart style={{ "cursor": "pointer", }} />
</nav>
}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, le tableau sera ajouté de votre tableau de bord global.<br />
Vous pourrez le supprimer à nouveau si besoin. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
setdashbord_internal_code("CODE_SESSION_02")
Add_To_User_TBD("tbd_code_session_02");
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</a> </a>
</div> </div>
{tdb_title && String(tdb_title) === "2" && <nav> Donnez un titre <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="tdb_title"
id="tdb_title"
text
<Box height="50vh" style={{ "color": "black" }}> InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
/>
<nav style={{ "textAlign": "center" }}> <button onClick={(event) => {
setdashbord_internal_code("CODE_SESSION_02")
Add_To_User_TBD("tbd_code_session_02");
}}> Ajouter </button> &nbsp;&nbsp; <button onClick={(e) => settdb_title("0")}> Fermer </button>
</nav>
</nav>}
<Box style={{ "color": "black", "height": "30rem" }}>
&nbsp; &nbsp;
<ResponsiveBar <ResponsiveBar
data={Getall_Qry_Session_Data_By_Trainer_result_JSON} data={Getall_Qry_Session_Data_By_Trainer_result_JSON}
@ -866,67 +783,45 @@ const Dashbord_Session = (props) => {
</div> </div>
<div style={{ "float": "left", "width": String(display_column_size) ,"height":"30rem", "float":"left", "paddingRight":"5px"}} > <div style={{ "float": "left", "width": String(display_column_size), "height": "42rem", "float": "left", "paddingRight": "5px" }} >
<div className="titre1" style={{ "float": "left", "cursor": "none" }}> <div className="titre1" style={{ "float": "left", "cursor": "none" }}>
<nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Session : Repartition par Formateur </nav> <nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Session : Repartition par Formateur </nav>
<Tooltip id="my-tooltip01" style={{ "fontSize": "12px" }} /> <Tooltip id="my-tooltip01" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip01" data-tooltip-content="Ajouter à ma liste de TBD"> <a data-tooltip-id="my-tooltip01" data-tooltip-content="Ajouter à ma liste de TBD">
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<Popup <MdOutlineAddchart style={{ "cursor": "pointer", }} onClick={(e) => settdb_title("3")} />
trigger={ </nav>
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<MdOutlineAddchart style={{ "cursor": "pointer", }} />
</nav>
}
modal
nested
position="center center"
>
{close => (
<div>
<button className="gest_close" onClick={close}>
&times;
</button>
<div className="gest_header"> MySy Information </div>
<div className="gest_content">
{' '}
En confirmant cette opération, le tableau sera ajouté de votre tableau de bord global.<br />
Vous pourrez le supprimer à nouveau si besoin. <br />
</div>
<div className="gest_actions">
<div style={{ "width": "45%", "float": "left" }}>
<button className="gest_bton_popup" onClick={(event) => {
setdashbord_internal_code("CODE_SESSION_03")
Add_To_User_TBD("tbd_code_session_03");
close();
}}> Valider </button>
</div>
<div style={{ "width": "45%", "float": "right" }}>
<button
className="gest_bton_popup"
onClick={() => {
console.log('modal closed ');
close();
}}
>
Annuler
</button>
</div>
</div>
</div>
)}
</Popup>
</a> </a>
</div> </div>
{tdb_title && String(tdb_title) === "3" && <nav> Donnez un titre <TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
required
name="tdb_title"
id="tdb_title"
text
<Box height="50vh" style={{ "color": "black" }}> InputLabelProps={{
shrink: true,
}}
disabled={false}
className="disabled_style"
/>
<nav style={{ "textAlign": "center" }}> <button onClick={(event) => {
setdashbord_internal_code("CODE_SESSION_03")
Add_To_User_TBD("tbd_code_session_03");
}}> Ajouter </button> &nbsp;&nbsp; <button onClick={(e) => settdb_title("0")}> Fermer </button>
</nav>
</nav>}
<Box style={{ "color": "black", "height": "30rem" }}>
&nbsp; &nbsp;
<ResponsivePie <ResponsivePie
data={Getall_Qry_Session_Data_Pourcent_Trainer_result_JSON} data={Getall_Qry_Session_Data_Pourcent_Trainer_result_JSON}
margin={{ top: 40, right: 80, bottom: 80, left: 80 }} margin={{ top: 40, right: 80, bottom: 80, left: 80 }}
@ -1069,7 +964,7 @@ const Dashbord_Session = (props) => {
</div> </div>
</div> </div>
) )
} }

View File

@ -1,71 +1,27 @@
import React, { useRef, useState, useEffect } from "react"; import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios"; import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie'; import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css"; import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css' import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip' import { Tooltip } from 'react-tooltip'
import add_plus from "../mysy_img/plus.png";
import excel_icone from "../mysy_img/excel_icone.png";
import participants from "../mysy_img/participants.png";
import fileDownload from 'js-file-download' import fileDownload from 'js-file-download'
import Popup from 'reactjs-popup'; import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css'; import 'reactjs-popup/dist/index.css';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css"; import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box'; import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif"; import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
//import FullCalendar from "@fullcalendar/react";
import daygridPlugin from "@fullcalendar/daygrid";
//import interactionPlugin from "@fullcalendar/interaction";
//import timeGridPlugin from "@fullcalendar/timegrid";
import allLocales from '@fullcalendar/core/locales-all'
import { RepeatOnRounded } from "@mui/icons-material";
import { alignPropType } from "react-bootstrap/esm/types";
import { tokens } from "../theme"; import { tokens } from "../theme";
import { MdOutlineAddchart, MdAssignmentAdd, MdOutlinePlaylistRemove, MdDeleteForever } from "react-icons/md"; import { MdDeleteForever } from "react-icons/md";
import FullCalendar, { formatDate } from "@fullcalendar/react";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin from "@fullcalendar/interaction";
import { import {
ListItem,
ListItemText,
useTheme, useTheme,
} from "@mui/material"; } from "@mui/material";
import { ResponsivePie } from '@nivo/pie'
import { ResponsiveBar } from "@nivo/bar"; import { ResponsiveBar } from "@nivo/bar";
import { RiFileExcel2Line } from "react-icons/ri";
const Dashbord_Session_Par_Fteur = (props) => { const Dashbord_Session_Par_Fteur = (props) => {
@ -394,8 +350,12 @@ const Dashbord_Session_Par_Fteur = (props) => {
useEffect(() => { useEffect(() => {
setp_filter_date_from(props.user_dashbord_filter_start);
setp_filter_date_to(props.user_dashbord_filter_end);
Getall_Qry_Session_Data_By_Trainer(); Getall_Qry_Session_Data_By_Trainer();
window.scrollTo({ window.scrollTo({
top: 0, top: 0,
behavior: "smooth", behavior: "smooth",
@ -404,9 +364,39 @@ const Dashbord_Session_Par_Fteur = (props) => {
}, []) }, [])
const [filter_value, setfilter_value] = useState("m0"); const [filter_value, setfilter_value] = useState("");
const [tdb_title, settdb_title] = useState(); const [tdb_title, settdb_title] = useState();
function Export_Dashbord_to_CSV(local_dashbord_internal_id) {
const stored_cookie = getCookie('tokenmysypart');
var nom_fichier_cmd = "export_csv.csv";
console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- local_dashbord_internal_id = ", local_dashbord_internal_id);
var url = process.env.REACT_APP_API_URL + "myclass/api/Export_Dashbord_To_Csv/" + stored_cookie + "/" + local_dashbord_internal_id;
//console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- selected_id = ", selected_id, " --- url =", url);
setLoading(true);
axios.get(url, { responseType: 'blob', },)
.then((res) => {
setLoading(false);
//console.log(" In Export_Dashbord_to_CSV res.data = " + res.data);
if (String(res.data) === String("false")) {
alert("Impossible d'exporter les données (2) ");
} else {
fileDownload(res.data, nom_fichier_cmd)
}
}).catch((error) => {
setLoading(false);
console.error('Error:', error);
alert(" Impossible d'exporter les données ")
});
}
return ( return (
<div className="dashbord_session" style={{ "marginLeft": "1px", "marginRight": "2px" }}> <div className="dashbord_session" style={{ "marginLeft": "1px", "marginRight": "2px" }}>
{isLoading && <div className="loader-container"> {isLoading && <div className="loader-container">
@ -493,7 +483,7 @@ const Dashbord_Session_Par_Fteur = (props) => {
<div style={{ "height": "40rem" }}> <div style={{ "height": "40rem" }}>
<div className="titre1" style={{ "float": "left", "cursor": "none" }}> <div className="titre1" style={{ "float": "left", "cursor": "none" }}>
<nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Session : Nb Session par formateur </nav> <nav style={{ "width": "80%", "float": "left", "textAlign": "center" }}> TBD : {props.user_dashbord_title} - Du : {props.user_dashbord_filter_start} au : {props.user_dashbord_filter_end}</nav>
<Tooltip id="my-tooltip02" style={{ "fontSize": "12px" }} /> <Tooltip id="my-tooltip02" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip02" data-tooltip-content="Supprimer de ma liste de TBD"> <a data-tooltip-id="my-tooltip02" data-tooltip-content="Supprimer de ma liste de TBD">
<Popup <Popup
@ -544,6 +534,17 @@ const Dashbord_Session_Par_Fteur = (props) => {
)} )}
</Popup> </Popup>
</a> </a>
<Tooltip id="my-tooltip03" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip03" data-tooltip-content="Export Csv/Excel">
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<RiFileExcel2Line style={{ "cursor": "pointer", }} onClick={(event) => {
Export_Dashbord_to_CSV(props.user_dashbord_id);
}} />
</nav>
</a>
</div> </div>
<Box style={{ "color": "black", "height": "30rem" }}> <Box style={{ "color": "black", "height": "30rem" }}>

View File

@ -1,71 +1,26 @@
import React, { useRef, useState, useEffect } from "react"; import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios"; import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie'; import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css' import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip' import { Tooltip } from 'react-tooltip'
import add_plus from "../mysy_img/plus.png";
import excel_icone from "../mysy_img/excel_icone.png";
import participants from "../mysy_img/participants.png";
import fileDownload from 'js-file-download' import fileDownload from 'js-file-download'
import Popup from 'reactjs-popup'; import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css'; import 'reactjs-popup/dist/index.css';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css"; import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box'; import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif"; import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
//import FullCalendar from "@fullcalendar/react";
import daygridPlugin from "@fullcalendar/daygrid";
//import interactionPlugin from "@fullcalendar/interaction";
//import timeGridPlugin from "@fullcalendar/timegrid";
import allLocales from '@fullcalendar/core/locales-all'
import { RepeatOnRounded } from "@mui/icons-material";
import { alignPropType } from "react-bootstrap/esm/types";
import { tokens } from "../theme"; import { tokens } from "../theme";
import { MdOutlineAddchart, MdAssignmentAdd, MdOutlinePlaylistRemove, MdDeleteForever } from "react-icons/md"; import { MdDeleteForever } from "react-icons/md";
import FullCalendar, { formatDate } from "@fullcalendar/react";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin from "@fullcalendar/interaction";
import { import {
ListItem,
ListItemText,
useTheme, useTheme,
} from "@mui/material"; } from "@mui/material";
import { ResponsivePie } from '@nivo/pie' import { ResponsivePie } from '@nivo/pie'
import { ResponsiveBar } from "@nivo/bar";
import { RiFileExcel2Line } from "react-icons/ri";
const Dashbord_Session_Repartition_Fteur = (props) => { const Dashbord_Session_Repartition_Fteur = (props) => {
@ -84,8 +39,8 @@ const Dashbord_Session_Repartition_Fteur = (props) => {
date_today_90j.setDate(date_today_90j.getDate() - 90); date_today_90j.setDate(date_today_90j.getDate() - 90);
const [p_filter_date_from, setp_filter_date_from] = useState(date_today_90j.toLocaleDateString('fr-FR')); const [p_filter_date_from, setp_filter_date_from] = useState(props.user_dashbord_filter_start);
const [p_filter_date_to, setp_filter_date_to] = useState(new Date().toLocaleDateString('fr-FR')); const [p_filter_date_to, setp_filter_date_to] = useState(props.user_dashbord_filter_end);
const [Add_To_User_TBD_api, setAdd_To_User_TBD_api] = useState(); const [Add_To_User_TBD_api, setAdd_To_User_TBD_api] = useState();
const [Add_To_User_TBD_message, setAdd_To_User_TBD_message] = useState(); const [Add_To_User_TBD_message, setAdd_To_User_TBD_message] = useState();
@ -395,9 +350,12 @@ const Dashbord_Session_Repartition_Fteur = (props) => {
useEffect(() => { useEffect(() => {
setp_filter_date_from(props.user_dashbord_filter_start);
setp_filter_date_to(props.user_dashbord_filter_end);
Getall_Qry_Session_Data_Pourcent_Trainer(); Getall_Qry_Session_Data_Pourcent_Trainer();
window.scrollTo({ window.scrollTo({
top: 0, top: 0,
behavior: "smooth", behavior: "smooth",
@ -406,9 +364,39 @@ const Dashbord_Session_Repartition_Fteur = (props) => {
}, []) }, [])
const [filter_value, setfilter_value] = useState("m0"); const [filter_value, setfilter_value] = useState("");
const [tdb_title, settdb_title] = useState(); const [tdb_title, settdb_title] = useState();
function Export_Dashbord_to_CSV(local_dashbord_internal_id) {
const stored_cookie = getCookie('tokenmysypart');
var nom_fichier_cmd = "export_csv.csv";
console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- local_dashbord_internal_id = ", local_dashbord_internal_id);
var url = process.env.REACT_APP_API_URL + "myclass/api/Export_Dashbord_To_Csv/" + stored_cookie + "/" + local_dashbord_internal_id;
//console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- selected_id = ", selected_id, " --- url =", url);
setLoading(true);
axios.get(url, { responseType: 'blob', },)
.then((res) => {
setLoading(false);
//console.log(" In Export_Dashbord_to_CSV res.data = " + res.data);
if (String(res.data) === String("false")) {
alert("Impossible d'exporter les données (2) ");
} else {
fileDownload(res.data, nom_fichier_cmd)
}
}).catch((error) => {
setLoading(false);
console.error('Error:', error);
alert(" Impossible d'exporter les données ")
});
}
return ( return (
<div className="dashbord_session" style={{ "marginLeft": "1px", "marginRight": "2px" }}> <div className="dashbord_session" style={{ "marginLeft": "1px", "marginRight": "2px" }}>
{isLoading && <div className="loader-container"> {isLoading && <div className="loader-container">
@ -494,7 +482,7 @@ const Dashbord_Session_Repartition_Fteur = (props) => {
<div style={{ "height": "40rem" }}> <div style={{ "height": "40rem" }}>
<div className="titre1" style={{ "float": "left", "cursor": "none" }}> <div className="titre1" style={{ "float": "left", "cursor": "none" }}>
<nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Session : Repartition par Formateur </nav> <nav style={{ "width": "80%", "float": "left", "textAlign": "center" }}> TBD : {props.user_dashbord_title} - Du : {props.user_dashbord_filter_start} au : {props.user_dashbord_filter_end}</nav>
<Tooltip id="my-tooltip02" style={{ "fontSize": "12px" }} /> <Tooltip id="my-tooltip02" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip02" data-tooltip-content="Supprimer de ma liste de TBD"> <a data-tooltip-id="my-tooltip02" data-tooltip-content="Supprimer de ma liste de TBD">
<Popup <Popup
@ -545,8 +533,18 @@ const Dashbord_Session_Repartition_Fteur = (props) => {
)} )}
</Popup> </Popup>
</a> </a>
</div>
<Tooltip id="my-tooltip03" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip03" data-tooltip-content="Export Csv/Excel">
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<RiFileExcel2Line style={{ "cursor": "pointer", }} onClick={(event) => {
Export_Dashbord_to_CSV(props.user_dashbord_id);
}} />
</nav>
</a>
</div>
<Box style={{ "color": "black", "height": "30rem" }}> <Box style={{ "color": "black", "height": "30rem" }}>
&nbsp; &nbsp;

View File

@ -1,71 +1,28 @@
import React, { useRef, useState, useEffect } from "react"; import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios"; import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie'; import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css"; import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css' import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip' import { Tooltip } from 'react-tooltip'
import add_plus from "../mysy_img/plus.png";
import excel_icone from "../mysy_img/excel_icone.png";
import participants from "../mysy_img/participants.png";
import fileDownload from 'js-file-download' import fileDownload from 'js-file-download'
import Popup from 'reactjs-popup'; import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css'; import 'reactjs-popup/dist/index.css';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css"; import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box'; import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif"; import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
//import FullCalendar from "@fullcalendar/react";
import daygridPlugin from "@fullcalendar/daygrid";
//import interactionPlugin from "@fullcalendar/interaction";
//import timeGridPlugin from "@fullcalendar/timegrid";
import allLocales from '@fullcalendar/core/locales-all'
import { RepeatOnRounded } from "@mui/icons-material";
import { alignPropType } from "react-bootstrap/esm/types";
import { tokens } from "../theme"; import { tokens } from "../theme";
import { MdOutlineAddchart, MdAssignmentAdd, MdOutlinePlaylistRemove, MdDeleteForever } from "react-icons/md"; import { MdDeleteForever } from "react-icons/md";
import FullCalendar, { formatDate } from "@fullcalendar/react";
import dayGridPlugin from "@fullcalendar/daygrid";
import timeGridPlugin from "@fullcalendar/timegrid";
import interactionPlugin from "@fullcalendar/interaction";
import { import {
ListItem,
ListItemText,
useTheme, useTheme,
} from "@mui/material"; } from "@mui/material";
import { ResponsivePie } from '@nivo/pie'
import { ResponsiveBar } from "@nivo/bar"; import { ResponsiveBar } from "@nivo/bar";
import { RiFileExcel2Line } from "react-icons/ri";
const Dashbord_Session_Taux_Remplissage = (props) => { const Dashbord_Session_Taux_Remplissage = (props) => {
@ -84,8 +41,8 @@ const Dashbord_Session_Taux_Remplissage = (props) => {
date_today_90j.setDate(date_today_90j.getDate() - 90); date_today_90j.setDate(date_today_90j.getDate() - 90);
const [p_filter_date_from, setp_filter_date_from] = useState(date_today_90j.toLocaleDateString('fr-FR')); const [p_filter_date_from, setp_filter_date_from] = useState(props.user_dashbord_filter_start);
const [p_filter_date_to, setp_filter_date_to] = useState(new Date().toLocaleDateString('fr-FR')); const [p_filter_date_to, setp_filter_date_to] = useState(props.user_dashbord_filter_end);
const [Add_To_User_TBD_api, setAdd_To_User_TBD_api] = useState(); const [Add_To_User_TBD_api, setAdd_To_User_TBD_api] = useState();
const [Add_To_User_TBD_message, setAdd_To_User_TBD_message] = useState(); const [Add_To_User_TBD_message, setAdd_To_User_TBD_message] = useState();
@ -175,7 +132,7 @@ const Dashbord_Session_Taux_Remplissage = (props) => {
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_To_User_Dashbord/"; var myurl = process.env.REACT_APP_API_URL + "myclass/api/Delete_To_User_Dashbord/";
console.log(" ## myurl = ", myurl); //console.log(" ## myurl = ", myurl);
setLoading(true); setLoading(true);
axios.post(myurl, form).then(res => { axios.post(myurl, form).then(res => {
@ -228,15 +185,15 @@ const Dashbord_Session_Taux_Remplissage = (props) => {
} }
form.append("token", stored_cookie); form.append("token", stored_cookie);
form.append("session_start_date", date_from); form.append("session_start_date", date_from);
form.append("session_end_date", date_to); form.append("session_end_date", date_to);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Qery_List_Session_Data/"; var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_Qery_List_Session_Data/";
console.log(" ### form = ", form);
setLoading(true); setLoading(true);
axios.post(myurl, form).then(res => { axios.post(myurl, form).then(res => {
setLoading(false); setLoading(false);
@ -394,8 +351,13 @@ const Dashbord_Session_Taux_Remplissage = (props) => {
useEffect(() => { useEffect(() => {
setp_filter_date_from(props.user_dashbord_filter_start);
setp_filter_date_to(props.user_dashbord_filter_end);
Getall_Qry_Session_Data(); Getall_Qry_Session_Data();
window.scrollTo({ window.scrollTo({
top: 0, top: 0,
behavior: "smooth", behavior: "smooth",
@ -407,6 +369,36 @@ const Dashbord_Session_Taux_Remplissage = (props) => {
const [filter_value, setfilter_value] = useState("m0"); const [filter_value, setfilter_value] = useState("m0");
const [tdb_title, settdb_title] = useState(); const [tdb_title, settdb_title] = useState();
function Export_Dashbord_to_CSV(local_dashbord_internal_id) {
const stored_cookie = getCookie('tokenmysypart');
var nom_fichier_cmd = "export_csv.csv";
console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- local_dashbord_internal_id = ", local_dashbord_internal_id);
var url = process.env.REACT_APP_API_URL + "myclass/api/Export_Dashbord_To_Csv/" + stored_cookie + "/" + local_dashbord_internal_id;
//console.log(" nom_fichier_cmd = ", nom_fichier_cmd, " --- selected_id = ", selected_id, " --- url =", url);
setLoading(true);
axios.get(url, { responseType: 'blob', },)
.then((res) => {
setLoading(false);
//console.log(" In Export_Dashbord_to_CSV res.data = " + res.data);
if (String(res.data) === String("false")) {
alert( "Impossible d'exporter les données (2) ");
} else {
fileDownload(res.data, nom_fichier_cmd)
}
}).catch((error) => {
setLoading(false);
console.error('Error:', error);
alert(" Impossible d'exporter les données ")
});
}
return ( return (
<div className="dashbord_session" style={{ "marginLeft": "1px", "marginRight": "2px" }}> <div className="dashbord_session" style={{ "marginLeft": "1px", "marginRight": "2px" }}>
{isLoading && <div className="loader-container"> {isLoading && <div className="loader-container">
@ -491,7 +483,9 @@ const Dashbord_Session_Taux_Remplissage = (props) => {
<div style={{ "height": "40rem" }}> <div style={{ "height": "40rem" }}>
<div className="titre1" style={{ "float": "left", "cursor": "none" }}> <div className="titre1" style={{ "float": "left", "cursor": "none" }}>
<nav style={{ "width": "90%", "float": "left", "textAlign": "center" }}> TBD Session : Taux de remplissage </nav> <nav style={{ "width": "80%", "float": "left", "textAlign": "center" }}> TBD : {props.user_dashbord_title} - Du : {props.user_dashbord_filter_start} au : {props.user_dashbord_filter_end}</nav>
<Tooltip id="my-tooltip02" style={{ "fontSize": "12px" }} /> <Tooltip id="my-tooltip02" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip02" data-tooltip-content="Supprimer de ma liste de TBD"> <a data-tooltip-id="my-tooltip02" data-tooltip-content="Supprimer de ma liste de TBD">
@ -544,6 +538,17 @@ const Dashbord_Session_Taux_Remplissage = (props) => {
</Popup> </Popup>
</a> </a>
<Tooltip id="my-tooltip03" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my-tooltip03" data-tooltip-content="Export Csv/Excel">
<nav style={{ "width": "9%", "float": "right", "textAlign": "right", "cursor": "pointer" }}>
<RiFileExcel2Line style={{ "cursor": "pointer", }} onClick={(event) => {
Export_Dashbord_to_CSV(props.user_dashbord_id);
}} />
</nav>
</a>
</div> </div>

View File

@ -1,21 +1,10 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { useForm } from "react-hook-form";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import { Button, FormGroup, Label, Input } from "reactstrap";
import { Helmet } from "react-helmet"; import { Helmet } from "react-helmet";
import FormControl from '@mui/material/FormControl';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import { useParams } from 'react-router-dom' import { useParams } from 'react-router-dom'
import axios from "axios"; import axios from "axios";
import Box from '@mui/material/Box';
import InputLabel from '@mui/material/InputLabel';
import InputAdornment from '@mui/material/InputAdornment';
import TextField from '@mui/material/TextField';
import OutlinedInput from '@mui/material/OutlinedInput';
import Visibility from '@mui/icons-material/Visibility';
import VisibilityOff from '@mui/icons-material/VisibilityOff';
import IconButton from '@mui/material/IconButton';
import Header from "./Header"; import Header from "./Header";
import Footer from "./Fotter"; import Footer from "./Fotter";
import { getCookie } from 'react-use-cookie'; import { getCookie } from 'react-use-cookie';

View File

@ -1,49 +0,0 @@
import React, { useRef, useState, useEffect } from "react";
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css';
import ReactBootstrap from 'react-bootstrap'
import { Modal } from 'react-bootstrap';
import axios from "axios";
const DisplayClass = (props) => {
const [result, setResult] = useState("");
const [myApiResponse, setmyApiResponse] = useState("false");
const [myApiMessage, setmyApimyApiMessage] = useState("");
const [trainingRef, settrainingRef] = useState("");
function MyDisplayClass(e) {
var trainingind = e.target.value;
//console.log(" #################" + trainingind);
//alert(" la formation a traiter est : " + trainingind);
}
return (
<div>
<h2> Affichage detaillé d'une formation </h2>
<li className="displayclass">
<ul>
<li> Titre : {props.formation.title} </li>
<li> Description : {props.formation.description} </li>
<li> domain : {props.formation.domain} </li>
<li> Langue : {props.formation.lang} </li>
<li> Certification : {props.formation.certif} </li>
<li> Type : {props.formation.type} </li>
<li> Support : {props.formation.support} </li>
<li> Prix : {props.formation.price} </li>
</ul>
</li>
</div>
)
}
export default DisplayClass;

View File

@ -48,6 +48,7 @@ import { AiTwotoneEdit, AiTwotoneSave } from "react-icons/ai";
import Module_Absence from "./Module_Absence"; import Module_Absence from "./Module_Absence";
import { RiMoreFill } from "react-icons/ri"; import { RiMoreFill } from "react-icons/ri";
import Switch from '@mui/material/Switch'; import Switch from '@mui/material/Switch';
import { FcSearch } from "react-icons/fc";
const DisplayPartnerStagiaires = (props) => { const DisplayPartnerStagiaires = (props) => {
const history = useHistory(); const history = useHistory();
@ -4043,7 +4044,7 @@ const DisplayPartnerStagiaires = (props) => {
form.append("tuteur1_email", p_detail_tuteur1_email); form.append("tuteur1_email", p_detail_tuteur1_email);
} }
if (p_detail_tuteur1_telephone) if (p_detail_tuteur1_telephone)
form.append("tuteur1_telephone", p_detail_tuteur1_telephone); form.append("tuteur1_telephone", p_detail_tuteur1_telephone);
@ -4093,7 +4094,7 @@ const DisplayPartnerStagiaires = (props) => {
else else
form.append("tuteur2_prenom", ""); form.append("tuteur2_prenom", "");
if (p_detail_tuteur2_email && String(p_detail_tuteur2_email).trim() !== "" ) { if (p_detail_tuteur2_email && String(p_detail_tuteur2_email).trim() !== "") {
var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
if (!p_detail_tuteur2_email.match(validRegex)) { if (!p_detail_tuteur2_email.match(validRegex)) {
alert("L'adresse email est invalide."); alert("L'adresse email est invalide.");
@ -4101,7 +4102,7 @@ const DisplayPartnerStagiaires = (props) => {
} }
form.append("tuteur2_email", p_detail_tuteur2_email); form.append("tuteur2_email", p_detail_tuteur2_email);
} }
if (p_detail_tuteur2_telephone) if (p_detail_tuteur2_telephone)
@ -4169,6 +4170,66 @@ const DisplayPartnerStagiaires = (props) => {
}) })
} }
const [Dialog_convention_message, setDialog_convention_message] = React.useState(false);
const [Dialog_convention_open, setDialog_convention_open] = React.useState(false);
function Dialog_convention_handle_change_participant_session(message) {
setDialog_convention_message(message);
setDialog_convention_open(true);
}
const Dialog_convention_handleClose = () => {
//alert(" Utiliser le bouton 'fermer' ");
//setOpen(false);
};
const Dialog_convention_handleClose_buton = () => {
setDialog_convention_open(false);
};
const [selected_convention_id, setselected_convention_id] = useState();
const [selected_convention_type, setselected_convention_type] = useState("email");
const [selected_convention_email_destinataire_prod, setselected_convention_email_destinataire_prod] = useState("");
const [selected_convention_email_test, setselected_convention_email_test] = useState("");
const [Get_List_Stagiaire_Conventions_api, setGet_List_Stagiaire_Conventions_api] = useState();
const [Get_List_Stagiaire_Conventions_message, setGet_List_Stagiaire_Conventions_message] = useState();
const [Get_List_Stagiaire_Conventions_result, setGet_List_Stagiaire_Conventions_result] = useState();
function Get_List_Stagiaire_Conventions(event) {
var form = new FormData();
form.append("class_internal_url", selected_internal_url);
const stored_cookie = getCookie('tokenmysypart');
form.append("token", stored_cookie);
form.append("inscription_id", selected_id);
var myurl = process.env.REACT_APP_API_URL + "myclass/api/Get_List_Conventions_Stagiaire/";
axios.post(myurl, form).then(res => {
if (String(res.data.status) === String("true")) {
//console.log(" In Get_List_Stagiaire_Conventions res.data.status = " + res.data.status);
//console.log(" In Get_List_Stagiaire_Conventions res.data.message r_class = " + res.data.message);
setGet_List_Stagiaire_Conventions_api("true");
setGet_List_Stagiaire_Conventions_result(res.data.message);
}
else {
setGet_List_Stagiaire_Conventions_api("false");
setGet_List_Stagiaire_Conventions_message(res.data.message);
alert(res.data.message);
}
}).catch((error) => {
console.warn('Not good man :( Get_List_Stagiaire_Conventions = ', error);
setGet_List_Stagiaire_Conventions_api("false");
alert("Impossible de récupérer les modèles de convention");
//setmyApimyApiMessage("")
})
}
return ( return (
<div className="displaypartnerstagiaire"> <div className="displaypartnerstagiaire">
@ -4485,6 +4546,197 @@ const DisplayPartnerStagiaires = (props) => {
</Dialog> </Dialog>
<Dialog
open={Dialog_convention_open}
onClose={Dialog_convention_handleClose}
className="displaypartnersession"
>
<DialogTitle>MySy Information</DialogTitle>
<DialogContent className="DialogContent_width">
<div className="session_caract_Dialog" > Version convention
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_version_convention"
id="event_dialog_version_convention"
select
fullWidth
value={selected_convention_id}
onChange={(e) => {
setselected_convention_id(e.target.value);
var result2 = Get_List_Stagiaire_Conventions_result.filter((local_mymanager) => JSON.parse(local_mymanager)._id === String(e.target.value))
setselected_convention_type(JSON.parse(result2).type_doc);
}
}
>
{Get_List_Stagiaire_Conventions_result &&
Get_List_Stagiaire_Conventions_result.map((myclient) => (
<MenuItem key={JSON.parse(myclient)._id} value={JSON.parse(myclient)._id}
style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }}>
{JSON.parse(myclient).nom}&nbsp; <b>{JSON.parse(myclient).type_doc} </b>
</MenuItem>
))}
</TextField>
</div>
{String(selected_convention_type) === "email" && <div className="session_caract_Dialog" > Type Document<br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, width: '75%' }}
name="event_dialog_type_convention"
id="event_dialog_type_convention"
select
value={selected_convention_type}
onChange={(e) => {
setselected_convention_type(e.target.value);
}
}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
<MenuItem value="pdf" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >PDF &nbsp;</MenuItem>
</TextField>
{String(selected_convention_type) === "email" && <label className="bton_image_class" style={{ "width": "20%", "float": "right", "height": "3.5rem", "paddingTop": "15px" }} onClick={(e) => {
}} > <FcSearch /> &nbsp; Test</label>}
</div>}
{String(selected_convention_type) === "pdf" && <div className="session_caract_Dialog" > Type Document<br />
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 } }}
name="event_dialog_type_convention"
id="event_dialog_type_convention"
select
fullWidth
value={selected_convention_type}
onChange={(e) => {
setselected_convention_type(e.target.value);
}
}
>
<MenuItem value="email" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >Email &nbsp;</MenuItem>
<MenuItem value="pdf" style={{ "paddingLeft": "5px", "textAlign": "left", "width": "100%" }} >PDF &nbsp;</MenuItem>
</TextField>
</div>}
{String(selected_convention_type) === "email" && <div className="session_caract_Dialog" > Recevoir un pré-envoie
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_email_test_convention"
id="event_dialog_email_test_convention"
fullWidth
value={selected_convention_email_test}
onChange={(e) => {
setselected_convention_email_test(e.target.value);
}
}
/>
</div>
}
{String(selected_convention_type) === "pdf" && <div className="session_caract_Dialog" > Recevoir un pré-envoie
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_email_test_convention"
id="event_dialog_email_test_convention"
fullWidth
value=""
/>
</div>
}
{String(selected_convention_type) === "email" && <div className="session_caract_Dialog" > Email destinaitaire
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_email_production_convention"
id="event_dialog_email_production_convention"
fullWidth
value={selected_convention_email_destinataire_prod}
onChange={(e) => {
setselected_convention_email_destinataire_prod(e.target.value);
}
}
/>
</div>
}
{String(selected_convention_type) === "pdf" && <div className="session_caract_Dialog" > Email destinaitaire
<TextField
sx={{ '& legend': { display: 'none' }, '& fieldset': { top: 0 }, }}
name="event_dialog_email_production_convention"
id="event_dialog_email_production_convention"
fullWidth
value=""
/>
</div>
}
</DialogContent>
<DialogActions>
<div className="div_row">
<div className="div_row_gauche">
{String(selected_convention_type) === "email" && <Button onChange={(e) => {
if (String(selected_convention_email_test).length > 2) {
const response = window.confirm(" Vous allez envoyer le convention au destinaitaire final. Continuer ?");
if (!response) {
return;
}
alert(" Ok envoyé");
Dialog_convention_handleClose_buton();
}
}}
className="bton_enreg_dialog">Envoyer</Button>}
{String(selected_convention_type) === "pdf" && <Button onClick={"Add_One_Sequence_Session_Ressource"} className="bton_enreg_dialog">Télécharger</Button>}
</div>
<div className="div_row_droite" style={{ "textAlign": 'center' }}>
<Button onClick={Dialog_convention_handleClose_buton} className="bton_annule_dialog" >Fermer</Button>
</div>
</div>
</DialogActions>
</Dialog>
<h3> Vos stagiaires </h3> <h3> Vos stagiaires </h3>
<div className="div_row"> <div className="div_row">
@ -5536,6 +5788,17 @@ const DisplayPartnerStagiaires = (props) => {
</div> </div>
</div> </div>
<div className="div_row_droite">
<div style={{ "marginLeft": "1rem" }}>
<label className="bton_image_class" onClick={(e) => {
Get_List_Stagiaire_Conventions();
setDialog_convention_open(true);
}} >Editer une convention</label><br />
</div>
</div>
</div> </div>
<div className="session_data" > <div className="session_data" >

View File

@ -3,26 +3,14 @@ import { useForm } from "react-hook-form";
import axios from "axios"; import axios from "axios";
import Articles from "../components/Article"; import Articles from "../components/Article";
import { FaSearch, FaRegArrowAltCircleDown, FaRegArrowAltCircleUp } from 'react-icons/fa'; import { FaSearch, FaRegArrowAltCircleDown, FaRegArrowAltCircleUp } from 'react-icons/fa';
import { BsFillXCircleFill } from "react-icons/bs";
import { IoAddSharp } from "react-icons/io5";
import bannerimg from "../mysy_img/MYSY_banner_compte.png";
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import Pagination from "./TestPagination"; import Pagination from "./TestPagination";
import data from "./data/mock-data.json";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import { getCookie, removeCookie } from 'react-use-cookie'; import { getCookie, removeCookie } from 'react-use-cookie';
import { Helmet } from "react-helmet";
import LogoutOutlinedIcon from '@mui/icons-material/LogoutOutlined';
import Button from '@mui/material/Button';
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import Footer from "./Fotter";
import Header from "./Header";
import MenuItem from "@material-ui/core/MenuItem";
import Menu from "@material-ui/core/Menu";
import { confirmAlert } from 'react-confirm-alert'; // Import import { confirmAlert } from 'react-confirm-alert'; // Import
import { useCookies } from "react-cookie"; import { useCookies } from "react-cookie";
import connect_white from "../mysy_img/connect_white_v2.png";
import connect_green from "../mysy_img/connect_green.png";
let PageSize = 5; let PageSize = 5;
const ListeArticles = (props) => { const ListeArticles = (props) => {

View File

@ -1,59 +1,31 @@
import React, { useRef, useState, useEffect } from "react"; import React, { useRef, useState, useEffect } from "react";
import TextField from '@mui/material/TextField';
import MenuItem from '@mui/material/MenuItem';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import Button from '@mui/material/Button';
import axios from "axios"; import axios from "axios";
import { getCookie, setCookie } from 'react-use-cookie'; import { getCookie, setCookie } from 'react-use-cookie';
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css"; import "react-draft-wysiwyg/dist/react-draft-wysiwyg.css";
import { Editor } from '@tinymce/tinymce-react';
import parse from 'html-react-parser';
import { FcViewDetails, FcDisapprove } from "react-icons/fc";
import 'react-tooltip/dist/react-tooltip.css' import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip' import { Tooltip } from 'react-tooltip'
import add_plus from "../mysy_img/plus.png";
import excel_icone from "../mysy_img/excel_icone.png";
import participants from "../mysy_img/participants.png";
import fileDownload from 'js-file-download'
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css'; import 'reactjs-popup/dist/index.css';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint, FcPlanner } from "react-icons/fc";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css"; import "react-datepicker/dist/react-datepicker.css";
import { format } from 'date-fns'
import moment from "moment";
import InputAdornment from '@mui/material/InputAdornment';
import { AiFillCloseCircle } from "react-icons/ai";
import Box from '@mui/material/Box';
import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components';
import { CiTrash, CiBoxList } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif"; import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import FullCalendar from "@fullcalendar/react";
import daygridPlugin from "@fullcalendar/daygrid";
import interactionPlugin from "@fullcalendar/interaction";
import timeGridPlugin from "@fullcalendar/timegrid";
import allLocales from '@fullcalendar/core/locales-all'
import { RepeatOnRounded, RestaurantMenu } from "@mui/icons-material";
import { alignPropType } from "react-bootstrap/esm/types";
import ToggleSwitch from "./ToggleSwitch";
import Dashbord_Session_Par_Fteur from "./Dashbord_Session_Par_Fteur"; import Dashbord_Session_Par_Fteur from "./Dashbord_Session_Par_Fteur";
import Dashbord_Session_Taux_Remplissage from "./Dashbord_Session_Taux_Remplissage"; import Dashbord_Session_Taux_Remplissage from "./Dashbord_Session_Taux_Remplissage";
import Dashbord_Session_Repartition_Fteur from "./Dashbord_Session_Repartition_Fteur"; import Dashbord_Session_Repartition_Fteur from "./Dashbord_Session_Repartition_Fteur";
import Dashbord_Formation_Evol_Session from "./Dashbord_Formation_Evol_Session";
import { TbColumns2, TbColumns1 } from "react-icons/tb"; import { TbColumns2, TbColumns1 } from "react-icons/tb";
const Mon_Tableau_De_Bord = (props) => { const Mon_Tableau_De_Bord = (props) => {
@ -82,8 +54,8 @@ const Mon_Tableau_De_Bord = (props) => {
axios.post(myurl, form).then(res => { axios.post(myurl, form).then(res => {
setLoading(false); setLoading(false);
if (String(res.data.status) === String("true")) { if (String(res.data.status) === String("true")) {
console.log(" In Get_Connected_User_Dashbord res.data.status = " + res.data.status); //console.log(" In Get_Connected_User_Dashbord res.data.status = " + res.data.status);
console.log(" In Get_Connected_User_Dashbord res.data.message r_class = " + res.data.message); //console.log(" In Get_Connected_User_Dashbord res.data.message r_class = " + res.data.message);
setGet_Connected_User_Dashbord_api("true"); setGet_Connected_User_Dashbord_api("true");
setGet_Connected_User_Dashbord_result(res.data.message); setGet_Connected_User_Dashbord_result(res.data.message);
@ -117,6 +89,7 @@ const Mon_Tableau_De_Bord = (props) => {
const [display_nb_column, setdisplay_nb_column] = useState("2"); const [display_nb_column, setdisplay_nb_column] = useState("2");
const [display_column_size, setdisplay_column_size] = useState("49%");
return ( return (
<div className="mon_tableau_de_bord"> <div className="mon_tableau_de_bord">
@ -132,37 +105,55 @@ const Mon_Tableau_De_Bord = (props) => {
<a data-tooltip-id="my_tooltip_1_col" data-tooltip-content="Affichage sur une colonne"> <a data-tooltip-id="my_tooltip_1_col" data-tooltip-content="Affichage sur une colonne">
<TbColumns1 style={{ "cursor": "pointer" }} onClick={(e) => { <TbColumns1 style={{ "cursor": "pointer" }} onClick={(e) => {
setdisplay_nb_column("1"); setdisplay_nb_column("1");
setdisplay_column_size("95%");
}} /> }} />
</a> &nbsp; &nbsp; </a> &nbsp; &nbsp;
<Tooltip id="my_tooltip_2_col" style={{ "fontSize": "12px" }} /> <Tooltip id="my_tooltip_2_col" style={{ "fontSize": "12px" }} />
<a data-tooltip-id="my_tooltip_2_col" data-tooltip-content="Affichage sur deux colonnes"> <a data-tooltip-id="my_tooltip_2_col" data-tooltip-content="Affichage sur deux colonnes">
<TbColumns2 style={{ "cursor": "pointer" }} onClick={(e) => { <TbColumns2 style={{ "cursor": "pointer" }} onClick={(e) => {
setdisplay_nb_column("2"); setdisplay_nb_column("2");
setdisplay_column_size("49%");
}} /> }} />
</a> </div> </a> </div>
{display_nb_column && String(display_nb_column) == "2" && <div> {display_nb_column && <div>
{Get_Connected_User_Dashbord_result && {Get_Connected_User_Dashbord_result &&
Get_Connected_User_Dashbord_result.map((step) => ( Get_Connected_User_Dashbord_result.map((step) => (
<div className="div_row" style={{ "width": "49%", "float": "left", "paddingRight":"2px" }}> <div className="div_row" style={{ "width": String(display_column_size), "float": "left", "paddingRight": "2px" }}>
{String(JSON.parse(step).dashbord_internal_code) === "tbd_code_session_01" && {String(JSON.parse(step).dashbord_internal_code) === "tbd_code_session_01" &&
<Dashbord_Session_Taux_Remplissage user_dashbord_id={String(JSON.parse(step)._id)} /> <Dashbord_Session_Taux_Remplissage user_dashbord_id={String(JSON.parse(step)._id)}
user_dashbord_title={String(JSON.parse(step).title)}
user_dashbord_filter_start={String(JSON.parse(step).start_date)}
user_dashbord_filter_end={String(JSON.parse(step).end_date)} />
} }
{String(JSON.parse(step).dashbord_internal_code) === "tbd_code_session_02" && {String(JSON.parse(step).dashbord_internal_code) === "tbd_code_session_02" &&
<Dashbord_Session_Par_Fteur user_dashbord_id={String(JSON.parse(step)._id)} /> <Dashbord_Session_Par_Fteur user_dashbord_id={String(JSON.parse(step)._id)}
user_dashbord_title={String(JSON.parse(step).title)}
user_dashbord_filter_start={String(JSON.parse(step).start_date)}
user_dashbord_filter_end={String(JSON.parse(step).end_date)} />
} }
{String(JSON.parse(step).dashbord_internal_code) === "tbd_code_session_03" && {String(JSON.parse(step).dashbord_internal_code) === "tbd_code_session_03" &&
<Dashbord_Session_Repartition_Fteur user_dashbord_id={String(JSON.parse(step)._id)}
user_dashbord_title={String(JSON.parse(step).title)}
user_dashbord_filter_start={String(JSON.parse(step).start_date)}
user_dashbord_filter_end={String(JSON.parse(step).end_date)} />
}
<Dashbord_Session_Repartition_Fteur user_dashbord_id={String(JSON.parse(step)._id)} /> {String(JSON.parse(step).dashbord_internal_code) === "tbd_code_formation_01" &&
<Dashbord_Formation_Evol_Session user_dashbord_id={String(JSON.parse(step)._id)}
user_dashbord_title={String(JSON.parse(step).title)}
user_dashbord_filter_start={String(JSON.parse(step).start_date)}
user_dashbord_filter_end={String(JSON.parse(step).end_date)} />
} }
@ -171,41 +162,18 @@ const Mon_Tableau_De_Bord = (props) => {
))} ))}
</div>} </div>}
{!Get_Connected_User_Dashbord_result || Get_Connected_User_Dashbord_result.length <= 0 && <div>
{display_nb_column && String(display_nb_column) == "1" && <div> <div className="div_row">
{Get_Connected_User_Dashbord_result && <p className="text_tbd_vide"> Pour utiliser le votre tableau de bord, Merci de de configurer à partir du menu : "Configuration" == &gt; "Tableau de bord"</p>
Get_Connected_User_Dashbord_result.map((step) => (
</div>
<div className="div_row" style={{ "width": "95%", "float": "left" }}>
{String(JSON.parse(step).dashbord_internal_code) === "tbd_code_session_01" &&
<Dashbord_Session_Taux_Remplissage user_dashbord_id={String(JSON.parse(step)._id)} />
}
{String(JSON.parse(step).dashbord_internal_code) === "tbd_code_session_02" &&
<Dashbord_Session_Par_Fteur user_dashbord_id={String(JSON.parse(step)._id)} />
}
{String(JSON.parse(step).dashbord_internal_code) === "tbd_code_session_03" &&
<Dashbord_Session_Repartition_Fteur user_dashbord_id={String(JSON.parse(step)._id)} />
}
</div>
))}
</div>} </div>}
</div> </div>
) )
} }

View File

@ -1,6 +1,6 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import axios from "axios"; import axios from "axios";
import partnerbannerimg from "../mysy_img/MYSY_banner_compte.png";
import profileimg from "../mysy_img/MYSY-profil-2.png"; import profileimg from "../mysy_img/MYSY-profil-2.png";
import TrainingForm from "./AddClassManual" import TrainingForm from "./AddClassManual"
import PartnerTranings from "./DisplayPartnerTrainingsPagination"; import PartnerTranings from "./DisplayPartnerTrainingsPagination";
@ -12,11 +12,7 @@ import { useHistory } from "react-router-dom";
import PartnerInfo from "./UpdatePartnerInfo"; import PartnerInfo from "./UpdatePartnerInfo";
import PartenairStat from "./PartenairStat"; import PartenairStat from "./PartenairStat";
import { Helmet } from "react-helmet"; import { Helmet } from "react-helmet";
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import downarrow from "../mysy_img/downarrow.png";
import uparrow from "../mysy_img/uparrow.png";
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif"; import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import { GiTeacher } from "react-icons/gi"; import { GiTeacher } from "react-icons/gi";
import Footer from "./Fotter"; import Footer from "./Fotter";
@ -57,6 +53,7 @@ import Partner_Configuration_Session_Steps from "./Partner_Config_Session_Steps"
import Partner_Configuration_Jours_Travail from "./Partner_Config_Jours_Travail"; import Partner_Configuration_Jours_Travail from "./Partner_Config_Jours_Travail";
import Dashbord_Session from "./Dashbord_Session"; import Dashbord_Session from "./Dashbord_Session";
import Mon_Tableau_De_Bord from "./Mon_Tableau_De_Bord"; import Mon_Tableau_De_Bord from "./Mon_Tableau_De_Bord";
import Dashbord_Formation from "./Dashbord_Formation";
import Dialog from '@mui/material/Dialog'; import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions'; import DialogActions from '@mui/material/DialogActions';
@ -1579,11 +1576,19 @@ const Partner = (props) => {
</div> </div>
} }
{String(menu) === "dashbord_formation" && <div className="div_droite">
<Dashbord_Formation conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("dashbord", "read")} write_access={check_user_acces_right("dashbord", "write")} />
</div>
}
{String(menu) === "mon_tableau_de_bord" && <div className="div_droite"> {String(menu) === "mon_tableau_de_bord" && <div className="div_droite">
<Mon_Tableau_De_Bord conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("dashbord", "read")} write_access={check_user_acces_right("dashbord", "write")} /> <Mon_Tableau_De_Bord conntected_employee_id={conntected_employee_id} read_access={check_user_acces_right("dashbord", "read")} write_access={check_user_acces_right("dashbord", "write")} />
</div> </div>
} }

View File

@ -1,17 +1,14 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import partnerbannerimg from "../mysy_img/MYSY_banner_compte.png";
import { Button, FormGroup, Label, Input } from "reactstrap"; import { Button, FormGroup, Label, Input } from "reactstrap";
import { useCookies } from "react-cookie"; import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert'; import { confirmAlert } from 'react-confirm-alert';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import { Helmet } from "react-helmet"; import { Helmet } from "react-helmet";
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import Footer from "./Fotter"; import Footer from "./Fotter";
import MenuItem from "@material-ui/core/MenuItem";
import Menu from "@material-ui/core/Menu";
import Header from "./Header"; import Header from "./Header";
import { getCookie, removeCookie } from 'react-use-cookie'; import { getCookie, removeCookie } from 'react-use-cookie';

View File

@ -6,12 +6,9 @@ import { Button, FormGroup, Label, Input } from "reactstrap";
import { useCookies } from "react-cookie"; import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert'; import { confirmAlert } from 'react-confirm-alert';
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import { Helmet } from "react-helmet"; import { Helmet } from "react-helmet";
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import Footer from "./Fotter"; import Footer from "./Fotter";
import MenuItem from "@material-ui/core/MenuItem";
import Menu from "@material-ui/core/Menu";
import Header from "./Header"; import Header from "./Header";
import Visibility from '@mui/icons-material/Visibility'; import Visibility from '@mui/icons-material/Visibility';

View File

@ -32,12 +32,7 @@ import { Typography, LinearProgress, sliderClasses } from '@mui/material';
import styled from 'styled-components'; import styled from 'styled-components';
import { CiTrash } from "react-icons/ci"; import { CiTrash } from "react-icons/ci";
import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md"; import { MdAddCircleOutline, MdRemoveCircleOutline } from "react-icons/md";
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogContentText from '@mui/material/DialogContentText';
import DialogTitle from '@mui/material/DialogTitle';
import { TransitionProps } from '@mui/material/transitions';
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif"; import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";

View File

@ -1,8 +1,7 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import UpdateUserInfo from "../components/UpdateUserInfo";
import Button from '@mui/material/Button'; import Button from '@mui/material/Button';
import { AiOutlineEdit } from "react-icons/ai";
import { getCookie } from 'react-use-cookie'; import { getCookie } from 'react-use-cookie';
import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid'; import { DataGrid, GridToolbar, frFR } from '@mui/x-data-grid';
import axios from "axios"; import axios from "axios";
@ -15,24 +14,10 @@ import AccountCircle from '@mui/icons-material/AccountCircle';
import PhoneIcon from '@mui/icons-material/Phone' import PhoneIcon from '@mui/icons-material/Phone'
import EmailIcon from '@mui/icons-material/Email' import EmailIcon from '@mui/icons-material/Email'
import HomeIcon from '@mui/icons-material/Home' import HomeIcon from '@mui/icons-material/Home'
import { Button2, Form, FormGroup, Label } from "reactstrap";
import { faBullseye } from "@fortawesome/fontawesome-free-solid";
import tick_ok from "../mysy_img/tick_OK.png";
import tick_ko from "../mysy_img/tick_KO.png";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import CheckOut from "./CheckOut";
import PaymentMethod from "./PaymentMethode";
import { IoAddCircleOutline, IoCloseCircleOutline } from "react-icons/io5";
import fileDownload from 'js-file-download'
import PayementComponent_Carte from "./PaymentMethode_Carte"
import img_logo_stripe from "./../mysy_img/logo-stripe-secure.png";
import SendIcon from '@mui/icons-material/Send';
import { confirmAlert } from 'react-confirm-alert'; // Import
import { RiAddCircleLine } from "react-icons/ri";
import img_loading_spin from "./../mysy_img/mysy_spin_loading.gif";
import 'react-tooltip/dist/react-tooltip.css' import 'react-tooltip/dist/react-tooltip.css'
import { Tooltip } from 'react-tooltip'
import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css'; import 'reactjs-popup/dist/index.css';
import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc"; import { FcCancel, FcApproval, FcAcceptDatabase, FcPrint } from "react-icons/fc";

View File

@ -2,29 +2,15 @@ import React, { useState, useEffect, } from "react";
import { useForm } from "react-hook-form"; import { useForm } from "react-hook-form";
import { getCookie, setCookie } from 'react-use-cookie'; import { getCookie, setCookie } from 'react-use-cookie';
import Box from '@mui/material/Box'; import Box from '@mui/material/Box';
import InputLabel from '@mui/material/InputLabel';
import InputAdornment from '@mui/material/InputAdornment'; import InputAdornment from '@mui/material/InputAdornment';
import FormControl from '@mui/material/FormControl';
import TextField from '@mui/material/TextField'; import TextField from '@mui/material/TextField';
import AccountCircle from '@mui/icons-material/AccountCircle';
import PhoneIcon from '@mui/icons-material/Phone'
import EmailIcon from '@mui/icons-material/Email' import EmailIcon from '@mui/icons-material/Email'
import LanguageIcon from '@mui/icons-material/Language';
import HomeIcon from '@mui/icons-material/Home'
import { Button, Form, FormGroup, Label } from "reactstrap"; import { Button, Form, FormGroup, Label } from "reactstrap";
import PasswordIcon from '@mui/icons-material/Password'
import Visibility from '@mui/icons-material/Visibility'; import Visibility from '@mui/icons-material/Visibility';
import VisibilityOff from '@mui/icons-material/VisibilityOff'; import VisibilityOff from '@mui/icons-material/VisibilityOff';
import IconButton from '@mui/material/IconButton'; import IconButton from '@mui/material/IconButton';
import OutlinedInput from '@mui/material/OutlinedInput';
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import TwitterIcon from '@mui/icons-material/Twitter';
import FacebookIcon from '@mui/icons-material/Facebook';
import LinkedInIcon from '@mui/icons-material/LinkedIn';
import axios from "axios";
import { ConsoleView } from "react-device-detect";
import MenuItem from '@mui/material/MenuItem';

View File

@ -5,16 +5,13 @@ import { Button, FormGroup, Label, Input } from "reactstrap";
import { FacebookLoginButton, GoogleLoginButton } from "react-social-login-buttons"; import { FacebookLoginButton, GoogleLoginButton } from "react-social-login-buttons";
//import { getCookie, setCookie, removeCookie } from 'react-use-cookie'; //import { getCookie, setCookie, removeCookie } from 'react-use-cookie';
import { Helmet } from "react-helmet"; import { Helmet } from "react-helmet";
import { useCookies } from "react-cookie";
import { confirmAlert } from 'react-confirm-alert'; // Import
import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css import 'react-confirm-alert/src/react-confirm-alert.css'; // Import css
import tick_ok from "../mysy_img/tick_OK.png"; import tick_ok from "../mysy_img/tick_OK.png";
import tick_ko from "../mysy_img/tick_KO.png"; import tick_ko from "../mysy_img/tick_KO.png";
import Popup from 'reactjs-popup'; import Popup from 'reactjs-popup';
import 'reactjs-popup/dist/index.css'; import 'reactjs-popup/dist/index.css';
import axios from "axios";
import { useParams } from 'react-router-dom'
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import Footer from "./Fotter"; import Footer from "./Fotter";
import MenuItem from "@material-ui/core/MenuItem"; import MenuItem from "@material-ui/core/MenuItem";
import Menu from "@material-ui/core/Menu"; import Menu from "@material-ui/core/Menu";

View File

@ -1,11 +1,9 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { useForm } from "react-hook-form";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import { Helmet } from "react-helmet";
import DisplayUserGoals from "./DisplayUserGoals"; import DisplayUserGoals from "./DisplayUserGoals";
import { IoCloseCircleOutline, IoAddCircleOutline } from "react-icons/io5";
import { Button, Form, FormGroup, Label } from "reactstrap";
import UpdateUserGoals from "./UpdateUserGoals";
import UpdateUserProfil from "./UpdateUserProfil"; import UpdateUserProfil from "./UpdateUserProfil";
function ProfilObjectif() { function ProfilObjectif() {

File diff suppressed because it is too large Load Diff

View File

@ -3,10 +3,7 @@ import { useForm } from "react-hook-form";
import axios from "axios"; import axios from "axios";
import Articles from "../components/Article"; import Articles from "../components/Article";
import { FaSearch, FaRegArrowAltCircleDown, FaRegArrowAltCircleUp } from 'react-icons/fa'; import { FaSearch, FaRegArrowAltCircleDown, FaRegArrowAltCircleUp } from 'react-icons/fa';
import { BsFillXCircleFill } from "react-icons/bs";
import { IoAddSharp } from "react-icons/io5";
import bannerimg from "../mysy_img/MYSY_banner_compte.png";
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import Pagination from "./TestPagination"; import Pagination from "./TestPagination";
import data from "./data/mock-data.json"; import data from "./data/mock-data.json";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";

View File

@ -4,23 +4,9 @@ import axios from "axios";
import Formation from "./Formation_Cartouche_Com"; import Formation from "./Formation_Cartouche_Com";
import { FaSearch, FaRegArrowAltCircleDown, FaRegArrowAltCircleUp } from 'react-icons/fa'; import { FaSearch, FaRegArrowAltCircleDown, FaRegArrowAltCircleUp } from 'react-icons/fa';
import { BsFillXCircleFill } from "react-icons/bs"; import { BsFillXCircleFill } from "react-icons/bs";
import { IoAddSharp } from "react-icons/io5";
import bannerimg from "../mysy_img/MYSY_banner_compte.png";
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png"; import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import img_met_program from "../mysy_img/met_programmation.jpg";
import img_met_hotel from "../mysy_img/met_hotel.jpg";
import img_met_graphisme from "../mysy_img/metier_graphisme.jpg";
import img_met_autre from "../mysy_img/met_autre.jpg";
import img_met_digital from "../mysy_img/met_digital.jpg";
import img_met_management from "../mysy_img/met_management.jpg";
import img_met_projet from "../mysy_img/met_projet.jpg";
import img_met_market from "../mysy_img/met_market.jpg";
import img_met_autre2 from "../mysy_img/met_autre2.jpg";
import img_met_dev_perso from "../mysy_img/metier_dev_perso.jpg";
import img_met_rh from "../mysy_img/met_rh.jpg";
import img_met_bureautic from "../mysy_img/met_burautic.jpg"; import img_met_bureautic from "../mysy_img/met_burautic.jpg";
import img_met_vente from "../mysy_img/met_vente.jpg"; import img_met_vente from "../mysy_img/met_vente.jpg";
@ -31,14 +17,11 @@ import data from "./data/mock-data.json";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import { getCookie, removeCookie } from 'react-use-cookie'; import { getCookie, removeCookie } from 'react-use-cookie';
import { Helmet } from "react-helmet"; import { Helmet } from "react-helmet";
import NosArticlesAlaUne from "./ArticlesAlaUnes";
import Drole from "./DroleVsCherchezFormation";
import { Android } from "@mui/icons-material";
import AideRecherche from "./AideRecherche" import AideRecherche from "./AideRecherche"
import { useParams } from 'react-router-dom' import { useParams } from 'react-router-dom'
import Footer from "./Fotter"; import Footer from "./Fotter";
import LogoutOutlinedIcon from '@mui/icons-material/LogoutOutlined';
import Button from '@mui/material/Button';
import MenuItem from "@material-ui/core/MenuItem"; import MenuItem from "@material-ui/core/MenuItem";
import Menu from "@material-ui/core/Menu"; import Menu from "@material-ui/core/Menu";
import Header from "./Header"; import Header from "./Header";

File diff suppressed because it is too large Load Diff

View File

@ -4,26 +4,8 @@ import axios from "axios";
import Formation from "./Formation"; import Formation from "./Formation";
import { FaSearch, FaRegArrowAltCircleDown, FaRegArrowAltCircleUp } from 'react-icons/fa'; import { FaSearch, FaRegArrowAltCircleDown, FaRegArrowAltCircleUp } from 'react-icons/fa';
import { BsFillXCircleFill } from "react-icons/bs"; import { BsFillXCircleFill } from "react-icons/bs";
import { IoAddSharp, IoAtCircle } from "react-icons/io5";
import bannerimg from "../mysy_img/MYSY_banner_compte.png";
import bannerimg2 from "../mysy_img/MYSY-LOGO-BLUE.png";
import logowhite from "../mysy_img/MYSY-LOGO-WHITE.png";
import img_met_program from "../mysy_img/met_programmation.jpg";
import img_met_hotel from "../mysy_img/met_hotel.jpg";
import img_met_graphisme from "../mysy_img/metier_graphisme.jpg";
import img_met_autre from "../mysy_img/met_autre.jpg";
import img_met_digital from "../mysy_img/met_digital.jpg";
import img_met_management from "../mysy_img/met_management.jpg";
import img_met_projet from "../mysy_img/met_projet.jpg";
import img_met_market from "../mysy_img/met_market.jpg";
import img_met_autre2 from "../mysy_img/met_autre2.jpg";
import img_met_dev_perso from "../mysy_img/metier_dev_perso.jpg";
import img_met_rh from "../mysy_img/met_rh.jpg";
import img_met_bureautic from "../mysy_img/met_burautic.jpg";
import img_met_vente from "../mysy_img/met_vente.jpg";
import Pagination from "./TestPagination"; import Pagination from "./TestPagination";
@ -31,9 +13,7 @@ import data from "./data/mock-data.json";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import { getCookie, removeCookie } from 'react-use-cookie'; import { getCookie, removeCookie } from 'react-use-cookie';
import { Helmet } from "react-helmet"; import { Helmet } from "react-helmet";
import NosArticlesAlaUne from "./ArticlesAlaUnes";
import Drole from "./DroleVsCherchezFormation";
import { Android, NoEncryption } from "@mui/icons-material";
import AideRecherche from "./AideRecherche" import AideRecherche from "./AideRecherche"
import { useParams } from 'react-router-dom' import { useParams } from 'react-router-dom'
import Footer_v2 from "./Fotter_v2"; import Footer_v2 from "./Fotter_v2";

View File

@ -12,11 +12,7 @@ import EmailIcon from '@mui/icons-material/Email'
import LanguageIcon from '@mui/icons-material/Language'; import LanguageIcon from '@mui/icons-material/Language';
import HomeIcon from '@mui/icons-material/Home' import HomeIcon from '@mui/icons-material/Home'
import { Button, Form, FormGroup, Label } from "reactstrap"; import { Button, Form, FormGroup, Label } from "reactstrap";
import PasswordIcon from '@mui/icons-material/Password'
import Visibility from '@mui/icons-material/Visibility';
import VisibilityOff from '@mui/icons-material/VisibilityOff';
import IconButton from '@mui/material/IconButton';
import OutlinedInput from '@mui/material/OutlinedInput';
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import TwitterIcon from '@mui/icons-material/Twitter'; import TwitterIcon from '@mui/icons-material/Twitter';
import FacebookIcon from '@mui/icons-material/Facebook'; import FacebookIcon from '@mui/icons-material/Facebook';

View File

@ -1,4 +1,4 @@
import Recherche from "../components/Recherche.js";
import Navigation from "../components/Navigation"; import Navigation from "../components/Navigation";
import Footer from "./footer"; import Footer from "./footer";
@ -9,7 +9,7 @@ const recherche = () => {
<div> <div>
<Navigation /> <Navigation />
<div> <div>
<Recherche/>
</div> </div>
</div> </div>

View File

@ -1,4 +1,4 @@
import Recherche_new from "../components/Recherche_new";
import Navigation from "../components/Navigation"; import Navigation from "../components/Navigation";
import Footer from "./footer"; import Footer from "./footer";
@ -9,7 +9,7 @@ const recherche = () => {
<div> <div>
<Navigation /> <Navigation />
<div> <div>
<Recherche_new />
</div> </div>
</div> </div>

File diff suppressed because it is too large Load Diff

View File

@ -2565,6 +2565,17 @@
} }
.text_tbd_vide {
color: #34495E;
padding: 1.5rem;
font-size: 2rem;
display: inline-block;
margin-top: 5rem !important;
text-align: center;
}
} }
.MuiMenu-paper { .MuiMenu-paper {

View File

@ -89,4 +89,5 @@
@import "./components/partner_configuration_jours_travail"; @import "./components/partner_configuration_jours_travail";
@import "./components/dashbord_session"; @import "./components/dashbord_session";
@import "./components/mon_tableau_de_bord"; @import "./components/mon_tableau_de_bord";
@import "./components/dashbord_formation";