├── src ├── features │ ├── logout │ │ ├── logout.css │ │ ├── logoutApiSlice.js │ │ └── Logout.jsx │ ├── auth │ │ ├── Layout.jsx │ │ ├── authApiSlice.js │ │ ├── RequireAuth.jsx │ │ ├── authSlice.js │ │ ├── RequireAdmin.jsx │ │ ├── Welcome.jsx │ │ └── SliderLogin.jsx │ ├── filiere │ │ └── filiereSlice.js │ ├── refetch │ │ └── refetchPostsSlice.js │ └── search │ │ └── searchSlice.js ├── components │ ├── accueil │ │ ├── accueil.css │ │ ├── Accueil.jsx │ │ ├── main │ │ │ ├── SearchMain.jsx │ │ │ └── post │ │ │ │ └── FiltrageAddPost.jsx │ │ ├── SearchAccueil.jsx │ │ └── right │ │ │ ├── notifications │ │ │ └── NotificationSide.jsx │ │ │ └── accountMight │ │ │ └── accountMight.jsx │ ├── stagiaire │ │ ├── header │ │ │ ├── CVPage.jsx │ │ │ └── header.css │ │ ├── interet │ │ │ ├── interet.css │ │ │ ├── Interets.jsx │ │ │ └── Interet.jsx │ │ ├── experiences │ │ │ └── experiences.css │ │ ├── formation │ │ │ └── formations.css │ │ ├── assets │ │ │ ├── ayadi_oussama.png │ │ │ └── ayadi_oussama1.jpg │ │ ├── competences │ │ │ └── competences.css │ │ ├── contact │ │ │ ├── Contact.jsx │ │ │ ├── contact.css │ │ │ └── SocialLinks.jsx │ │ ├── PDFDocument │ │ │ └── PDFDocument.jsx │ │ └── Stagiaire.jsx │ ├── images │ │ ├── ali.jpg │ │ ├── work.jpg │ │ ├── header.jpg │ │ └── PicsArt_06-02-10.10.55.jpg │ ├── stagiaires │ │ ├── stagiaires.css │ │ └── Stagiaires.jsx │ ├── navBar │ │ ├── Logo2.jsx │ │ ├── Logo.jsx │ │ ├── User.jsx │ │ └── navbar.jsx │ ├── calendrier │ │ ├── event-utils.js │ │ ├── calendrier.css │ │ └── MiniCalendrier.jsx │ ├── profile │ │ └── profile.css │ ├── calandar │ │ ├── Header.jsx │ │ ├── calendarComponent.css │ │ ├── ShowEventAlert.jsx │ │ ├── miniCalendar.css │ │ └── MiniCalendar.jsx │ ├── header │ │ ├── Header.jsx │ │ ├── Search.jsx │ │ └── header.css │ ├── archives │ │ ├── pdf │ │ │ ├── UpdatePDFAlert.jsx │ │ │ ├── AddPDFAlert.jsx │ │ │ └── PdfArchiveRow.jsx │ │ ├── AddCategoryAlert.jsx │ │ ├── UpdateCategoryAlert.jsx │ │ └── archives.css │ └── loadingSpinner │ │ ├── spinner.css │ │ └── LoadingSpinner.jsx ├── app │ ├── api │ │ ├── baseURL.js │ │ ├── filiereAxios.js │ │ ├── SearchAxios.js │ │ ├── audienceAxios.js │ │ ├── cvPdfAxios.js │ │ ├── axios.js │ │ ├── pdfAxios.js │ │ ├── apiSlice.js │ │ ├── postAxios.js │ │ ├── ArchiveAxios.js │ │ └── eventAxios.js │ └── store.js ├── cookies │ └── JWT │ │ ├── GetCookie.js │ │ ├── RemoveCookie.js │ │ └── SetCookie.js ├── dev │ ├── index.js │ ├── previews.jsx │ ├── useInitial.js │ ├── palette.jsx │ └── README.md ├── index.js ├── index.css └── App.css ├── public ├── assets │ ├── css │ │ └── bootstrap │ │ │ ├── mixins │ │ │ ├── _border-radius.css │ │ │ ├── _screen-reader.css │ │ │ └── _visibility.css │ │ │ ├── utilities │ │ │ └── _stretched-link.css │ │ │ └── _media.css │ ├── scss │ │ ├── bootstrap │ │ │ ├── utilities │ │ │ │ ├── _clearfix.scss │ │ │ │ ├── _overflow.scss │ │ │ │ ├── _screenreaders.scss │ │ │ │ ├── _visibility.scss │ │ │ │ ├── _shadows.scss │ │ │ │ ├── _float.scss │ │ │ │ ├── _align.scss │ │ │ │ ├── _background.scss │ │ │ │ ├── _stretched-link.scss │ │ │ │ ├── _sizing.scss │ │ │ │ ├── _position.scss │ │ │ │ ├── _display.scss │ │ │ │ ├── _embed.scss │ │ │ │ ├── _borders.scss │ │ │ │ ├── _text.scss │ │ │ │ ├── _spacing.scss │ │ │ │ └── _flex.scss │ │ │ ├── _media.scss │ │ │ ├── mixins │ │ │ │ ├── _clearfix.scss │ │ │ │ ├── _size.scss │ │ │ │ ├── _lists.scss │ │ │ │ ├── _text-truncate.scss │ │ │ │ ├── _visibility.scss │ │ │ │ ├── _resize.scss │ │ │ │ ├── _alert.scss │ │ │ │ ├── _nav-divider.scss │ │ │ │ ├── _text-hide.scss │ │ │ │ ├── _badge.scss │ │ │ │ ├── _transition.scss │ │ │ │ ├── _text-emphasis.scss │ │ │ │ ├── _float.scss │ │ │ │ ├── _list-group.scss │ │ │ │ ├── _reset-text.scss │ │ │ │ ├── _pagination.scss │ │ │ │ ├── _background-variant.scss │ │ │ │ ├── _box-shadow.scss │ │ │ │ ├── _deprecate.scss │ │ │ │ ├── _screen-reader.scss │ │ │ │ ├── _hover.scss │ │ │ │ ├── _table-row.scss │ │ │ │ ├── _image.scss │ │ │ │ ├── _border-radius.scss │ │ │ │ ├── _caret.scss │ │ │ │ ├── _grid.scss │ │ │ │ ├── _grid-framework.scss │ │ │ │ ├── _gradients.scss │ │ │ │ └── _buttons.scss │ │ │ ├── _transitions.scss │ │ │ ├── bootstrap-reboot.scss │ │ │ ├── _jumbotron.scss │ │ │ ├── _utilities.scss │ │ │ ├── _root.scss │ │ │ ├── bootstrap-grid.scss │ │ │ ├── bootstrap.scss │ │ │ ├── _close.scss │ │ │ ├── _toasts.scss │ │ │ ├── _code.scss │ │ │ ├── _grid.scss │ │ │ ├── _progress.scss │ │ │ ├── _mixins.scss │ │ │ ├── _spinners.scss │ │ │ ├── _images.scss │ │ │ ├── _badge.scss │ │ │ ├── _alert.scss │ │ │ ├── _breadcrumb.scss │ │ │ ├── _pagination.scss │ │ │ ├── _nav.scss │ │ │ ├── _type.scss │ │ │ ├── _functions.scss │ │ │ ├── _tooltip.scss │ │ │ ├── _buttons.scss │ │ │ └── _print.scss │ │ └── style.scss │ ├── images │ │ ├── logo.png │ │ ├── user.png │ │ ├── chercher.png │ │ ├── logout.png │ │ ├── menu-items │ │ │ ├── cv.png │ │ │ ├── list.png │ │ │ ├── more.png │ │ │ ├── Default.png │ │ │ ├── Vector.png │ │ │ ├── profile.png │ │ │ └── calendar.png │ │ └── dossier_candidature_rennes.pdf │ └── js │ │ └── main.js ├── ayadi.jpeg ├── favicon.ico ├── download.png ├── post │ ├── img1.png │ ├── img2.jpg │ └── img3.jpg ├── post_test.jpg ├── Logo_ofppt.png ├── login_img │ ├── logo.png │ ├── image1.png │ ├── image2.png │ └── image3.png ├── manifest.json └── index.html ├── .idea ├── vcs.xml ├── .gitignore ├── inspectionProfiles │ └── Project_Default.xml ├── modules.xml ├── istab-frontend1.iml └── php.xml ├── .gitignore ├── package.json └── README.md /src/features/logout/logout.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/accueil/accueil.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/features/logout/logoutApiSlice.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/stagiaire/header/CVPage.jsx: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/stagiaire/header/header.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/stagiaire/interet/interet.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/assets/css/bootstrap/mixins/_border-radius.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/assets/css/bootstrap/mixins/_screen-reader.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/assets/css/bootstrap/mixins/_visibility.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/stagiaire/experiences/experiences.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/stagiaire/formation/formations.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/ayadi.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/ayadi.jpeg -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/download.png -------------------------------------------------------------------------------- /public/post/img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/post/img1.png -------------------------------------------------------------------------------- /public/post/img2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/post/img2.jpg -------------------------------------------------------------------------------- /public/post/img3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/post/img3.jpg -------------------------------------------------------------------------------- /public/post_test.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/post_test.jpg -------------------------------------------------------------------------------- /public/Logo_ofppt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/Logo_ofppt.png -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_clearfix.scss: -------------------------------------------------------------------------------- 1 | .clearfix { 2 | @include clearfix(); 3 | } 4 | -------------------------------------------------------------------------------- /public/login_img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/login_img/logo.png -------------------------------------------------------------------------------- /public/login_img/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/login_img/image1.png -------------------------------------------------------------------------------- /public/login_img/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/login_img/image2.png -------------------------------------------------------------------------------- /public/login_img/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/login_img/image3.png -------------------------------------------------------------------------------- /public/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/logo.png -------------------------------------------------------------------------------- /public/assets/images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/user.png -------------------------------------------------------------------------------- /src/components/images/ali.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/src/components/images/ali.jpg -------------------------------------------------------------------------------- /src/components/images/work.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/src/components/images/work.jpg -------------------------------------------------------------------------------- /public/assets/images/chercher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/chercher.png -------------------------------------------------------------------------------- /public/assets/images/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/logout.png -------------------------------------------------------------------------------- /src/components/images/header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/src/components/images/header.jpg -------------------------------------------------------------------------------- /public/assets/images/menu-items/cv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/menu-items/cv.png -------------------------------------------------------------------------------- /public/assets/images/menu-items/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/menu-items/list.png -------------------------------------------------------------------------------- /public/assets/images/menu-items/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/menu-items/more.png -------------------------------------------------------------------------------- /public/assets/images/menu-items/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/menu-items/Default.png -------------------------------------------------------------------------------- /public/assets/images/menu-items/Vector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/menu-items/Vector.png -------------------------------------------------------------------------------- /public/assets/images/menu-items/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/menu-items/profile.png -------------------------------------------------------------------------------- /public/assets/images/menu-items/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/menu-items/calendar.png -------------------------------------------------------------------------------- /src/components/images/PicsArt_06-02-10.10.55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/src/components/images/PicsArt_06-02-10.10.55.jpg -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_media.scss: -------------------------------------------------------------------------------- 1 | .media { 2 | display: flex; 3 | align-items: flex-start; 4 | } 5 | 6 | .media-body { 7 | flex: 1; 8 | } 9 | -------------------------------------------------------------------------------- /src/components/stagiaire/assets/ayadi_oussama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/src/components/stagiaire/assets/ayadi_oussama.png -------------------------------------------------------------------------------- /src/components/stagiaire/assets/ayadi_oussama1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/src/components/stagiaire/assets/ayadi_oussama1.jpg -------------------------------------------------------------------------------- /public/assets/images/dossier_candidature_rennes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmaach/Istab-frontend/HEAD/public/assets/images/dossier_candidature_rennes.pdf -------------------------------------------------------------------------------- /src/app/api/baseURL.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | 3 | const api = axios.create({ 4 | baseURL: 'http://127.0.0.1:8000/api' 5 | }) 6 | export default api; -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | @mixin clearfix() { 2 | &::after { 3 | display: block; 4 | clear: both; 5 | content: ""; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/features/auth/Layout.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Outlet } from 'react-router-dom' 3 | 4 | const Layout = () => { 5 | return 6 | } 7 | 8 | export default Layout 9 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_overflow.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @each $value in $overflows { 4 | .overflow-#{$value} { overflow: $value !important; } 5 | } 6 | -------------------------------------------------------------------------------- /src/cookies/JWT/GetCookie.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Cookie from 'js-cookie' 3 | 4 | const GetCookie = (cookieName) => { 5 | return Cookie.get(cookieName); 6 | } 7 | 8 | export default GetCookie 9 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_size.scss: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | @mixin size($width, $height: $width) { 4 | width: $width; 5 | height: $height; 6 | @include deprecate("`size()`", "v4.3.0", "v5"); 7 | } 8 | -------------------------------------------------------------------------------- /src/cookies/JWT/RemoveCookie.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Cookie from 'js-cookie' 3 | 4 | const RemoveCookie = (cookieName) => { 5 | Cookie.remove(cookieName); 6 | } 7 | 8 | export default RemoveCookie 9 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_screenreaders.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Screenreaders 3 | // 4 | 5 | .sr-only { 6 | @include sr-only(); 7 | } 8 | 9 | .sr-only-focusable { 10 | @include sr-only-focusable(); 11 | } 12 | -------------------------------------------------------------------------------- /src/dev/index.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import {useInitial} from "./useInitial" 3 | 4 | const ComponentPreviews = React.lazy(() => import("./previews")) 5 | 6 | export { 7 | ComponentPreviews, 8 | useInitial 9 | } -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | 3 | // Unstyled keeps list items block level, just removes default browser padding and list-style 4 | @mixin list-unstyled { 5 | padding-left: 0; 6 | list-style: none; 7 | } 8 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_text-truncate.scss: -------------------------------------------------------------------------------- 1 | // Text truncate 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-truncate() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /src/components/stagiaires/stagiaires.css: -------------------------------------------------------------------------------- 1 | .linkto{ 2 | margin-top: 5rem; 3 | /* border: red 1px solid; */ 4 | color: var(--color-primary);; 5 | } 6 | .hh1{ 7 | color: var(--color-primary); 8 | margin-top: 5rem; 9 | float: right; 10 | } -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_visibility.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Visibility 4 | 5 | @mixin invisible($visibility) { 6 | visibility: $visibility !important; 7 | @include deprecate("`invisible()`", "v4.3.0", "v5"); 8 | } 9 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 5 | resize: $direction; // Options: horizontal, vertical, both 6 | } 7 | -------------------------------------------------------------------------------- /public/assets/css/bootstrap/utilities/_stretched-link.css: -------------------------------------------------------------------------------- 1 | .stretched-link::after { 2 | position: absolute; 3 | top: 0; 4 | right: 0; 5 | bottom: 0; 6 | left: 0; 7 | z-index: 1; 8 | pointer-events: auto; 9 | content: ""; 10 | background-color: rgba(0, 0, 0, 0); } 11 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_visibility.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // 4 | // Visibility utilities 5 | // 6 | 7 | .visible { 8 | visibility: visible !important; 9 | } 10 | 11 | .invisible { 12 | visibility: hidden !important; 13 | } 14 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /public/assets/css/bootstrap/_media.css: -------------------------------------------------------------------------------- 1 | .media { 2 | display: -webkit-box; 3 | display: -ms-flexbox; 4 | display: flex; 5 | -webkit-box-align: start; 6 | -ms-flex-align: start; 7 | align-items: flex-start; } 8 | 9 | .media-body { 10 | -webkit-box-flex: 1; 11 | -ms-flex: 1; 12 | flex: 1; } 13 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_shadows.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | .shadow-sm { box-shadow: $box-shadow-sm !important; } 4 | .shadow { box-shadow: $box-shadow !important; } 5 | .shadow-lg { box-shadow: $box-shadow-lg !important; } 6 | .shadow-none { box-shadow: none !important; } 7 | -------------------------------------------------------------------------------- /.idea/istab-frontend1.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/dev/previews.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Previews} from '@react-buddy/ide-toolbox' 3 | import {PaletteTree} from './palette' 4 | 5 | const ComponentPreviews = () => { 6 | return ( 7 | }> 8 | 9 | ) 10 | } 11 | 12 | export default ComponentPreviews -------------------------------------------------------------------------------- /src/cookies/JWT/SetCookie.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Cookie from 'js-cookie' 3 | 4 | const SetCookie = (cookieName,usrin) => { 5 | Cookie.set(cookieName,usrin,{ 6 | expires:1, 7 | secure:true, 8 | sameSite:'Strict', 9 | path:'/' 10 | }); 11 | } 12 | 13 | export default SetCookie 14 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | @mixin alert-variant($background, $border, $color) { 2 | color: $color; 3 | @include gradient-bg($background); 4 | border-color: $border; 5 | 6 | hr { 7 | border-top-color: darken($border, 5%); 8 | } 9 | 10 | .alert-link { 11 | color: darken($color, 10%); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_nav-divider.scss: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | @mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y) { 6 | height: 0; 7 | margin: $margin-y 0; 8 | overflow: hidden; 9 | border-top: 1px solid $color; 10 | } 11 | -------------------------------------------------------------------------------- /src/components/accueil/Accueil.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Welcome from '../../features/auth/Welcome' 3 | import Right from './right/right' 4 | import Main from './main/main' 5 | 6 | const Accueil = () => { 7 | return ( 8 |
9 |
10 | 11 |
12 | ) 13 | } 14 | 15 | export default Accueil 16 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_transitions.scss: -------------------------------------------------------------------------------- 1 | .fade { 2 | @include transition($transition-fade); 3 | 4 | &:not(.show) { 5 | opacity: 0; 6 | } 7 | } 8 | 9 | .collapse { 10 | &:not(.show) { 11 | display: none; 12 | } 13 | } 14 | 15 | .collapsing { 16 | position: relative; 17 | height: 0; 18 | overflow: hidden; 19 | @include transition($transition-collapse); 20 | } 21 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_text-hide.scss: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | @mixin text-hide($ignore-warning: false) { 3 | // stylelint-disable-next-line font-family-no-missing-generic-family-keyword 4 | font: 0/0 a; 5 | color: transparent; 6 | text-shadow: none; 7 | background-color: transparent; 8 | border: 0; 9 | 10 | @include deprecate("`text-hide()`", "v4.1.0", "v5", $ignore-warning); 11 | } 12 | -------------------------------------------------------------------------------- /src/components/navBar/Logo2.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import './navbar.css' 3 | import { NavLink } from 'react-router-dom' 4 | 5 | const Logo2 = () => { 6 | return ( 7 |
8 | 9 | logo 10 | 11 |
12 |
13 | ) 14 | } 15 | 16 | export default Logo2 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /src/app/api/filiereAxios.js: -------------------------------------------------------------------------------- 1 | import api from './baseURL' 2 | 3 | export const getFilieres = async (token) => { 4 | try { 5 | const headers = { Authorization: `Bearer ${token}` }; 6 | const response = await api.get('/filiere', { 7 | headers 8 | }); 9 | return response.data; 10 | 11 | } catch (error) { 12 | console.log(error); 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_badge.scss: -------------------------------------------------------------------------------- 1 | @mixin badge-variant($bg) { 2 | color: color-yiq($bg); 3 | background-color: $bg; 4 | 5 | @at-root a#{&} { 6 | @include hover-focus { 7 | color: color-yiq($bg); 8 | background-color: darken($bg, 10%); 9 | } 10 | 11 | &:focus, 12 | &.focus { 13 | outline: 0; 14 | box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_float.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @each $breakpoint in map-keys($grid-breakpoints) { 4 | @include media-breakpoint-up($breakpoint) { 5 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 6 | 7 | .float#{$infix}-left { float: left !important; } 8 | .float#{$infix}-right { float: right !important; } 9 | .float#{$infix}-none { float: none !important; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_transition.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-blacklist 2 | @mixin transition($transition...) { 3 | @if $enable-transitions { 4 | @if length($transition) == 0 { 5 | transition: $transition-base; 6 | } @else { 7 | transition: $transition; 8 | } 9 | } 10 | 11 | @if $enable-prefers-reduced-motion-media-query { 12 | @media (prefers-reduced-motion: reduce) { 13 | transition: none; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_text-emphasis.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Typography 4 | 5 | @mixin text-emphasis-variant($parent, $color) { 6 | #{$parent} { 7 | color: $color !important; 8 | } 9 | @if $emphasized-link-hover-darken-percentage != 0 { 10 | a#{$parent} { 11 | @include hover-focus { 12 | color: darken($color, $emphasized-link-hover-darken-percentage) !important; 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_align.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | .align-baseline { vertical-align: baseline !important; } // Browser default 4 | .align-top { vertical-align: top !important; } 5 | .align-middle { vertical-align: middle !important; } 6 | .align-bottom { vertical-align: bottom !important; } 7 | .align-text-bottom { vertical-align: text-bottom !important; } 8 | .align-text-top { vertical-align: text-top !important; } 9 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_float.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @mixin float-left { 4 | float: left !important; 5 | @include deprecate("The `float-left` mixin", "v4.3.0", "v5"); 6 | } 7 | @mixin float-right { 8 | float: right !important; 9 | @include deprecate("The `float-right` mixin", "v4.3.0", "v5"); 10 | } 11 | @mixin float-none { 12 | float: none !important; 13 | @include deprecate("The `float-none` mixin", "v4.3.0", "v5"); 14 | } 15 | -------------------------------------------------------------------------------- /src/components/calendrier/event-utils.js: -------------------------------------------------------------------------------- 1 | 2 | let eventGuid = 0 3 | let todayStr = new Date().toISOString().replace(/T.*$/, '') // YYYY-MM-DD of today 4 | 5 | export const INITIAL_EVENTS = [ 6 | { 7 | id: createEventId(), 8 | title: 'All-day event', 9 | start: todayStr 10 | }, 11 | { 12 | id: createEventId(), 13 | title: 'Timed event', 14 | start: todayStr + 'T12:00:00' 15 | } 16 | ] 17 | 18 | export function createEventId() { 19 | return String(eventGuid++) 20 | } -------------------------------------------------------------------------------- /src/features/filiere/filiereSlice.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from "@reduxjs/toolkit"; 2 | 3 | const filiereSlice = createSlice({ 4 | name: "filiere", 5 | initialState: { filieres: [] }, 6 | reducers: { 7 | getFiliere: (state, action) => { 8 | state.filieres = action.payload; 9 | }, 10 | }, 11 | }); 12 | 13 | export const { getFiliere } = filiereSlice.actions; 14 | export default filiereSlice.reducer; 15 | export const selectFiliereSlice = (state) => state.filiere.filieres; 16 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/) 3 | * Copyright 2011-2019 The Bootstrap Authors 4 | * Copyright 2011-2019 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */ 8 | 9 | @import "functions"; 10 | @import "variables"; 11 | @import "mixins"; 12 | @import "reboot"; 13 | -------------------------------------------------------------------------------- /src/features/auth/authApiSlice.js: -------------------------------------------------------------------------------- 1 | import { apiSlice } from '../../app/api/apiSlice' 2 | 3 | 4 | export const authApiSlice = apiSlice.injectEndpoints({ 5 | endpoints: builder => ({ 6 | login: builder.mutation({ 7 | query: credentials => ({ 8 | url: '/login', 9 | method: 'POST', 10 | body: { ...credentials } 11 | }) 12 | }), 13 | }) 14 | }) 15 | 16 | export const { 17 | useLoginMutation 18 | } = authApiSlice -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_jumbotron.scss: -------------------------------------------------------------------------------- 1 | .jumbotron { 2 | padding: $jumbotron-padding ($jumbotron-padding / 2); 3 | margin-bottom: $jumbotron-padding; 4 | color: $jumbotron-color; 5 | background-color: $jumbotron-bg; 6 | @include border-radius($border-radius-lg); 7 | 8 | @include media-breakpoint-up(sm) { 9 | padding: ($jumbotron-padding * 2) $jumbotron-padding; 10 | } 11 | } 12 | 13 | .jumbotron-fluid { 14 | padding-right: 0; 15 | padding-left: 0; 16 | @include border-radius(0); 17 | } 18 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_background.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @each $color, $value in $theme-colors { 4 | @include bg-variant(".bg-#{$color}", $value); 5 | } 6 | 7 | @if $enable-gradients { 8 | @each $color, $value in $theme-colors { 9 | @include bg-gradient-variant(".bg-gradient-#{$color}", $value); 10 | } 11 | } 12 | 13 | .bg-white { 14 | background-color: $white !important; 15 | } 16 | 17 | .bg-transparent { 18 | background-color: transparent !important; 19 | } 20 | -------------------------------------------------------------------------------- /src/components/stagiaire/competences/competences.css: -------------------------------------------------------------------------------- 1 | .competence{ 2 | margin-bottom: 2rem !important; 3 | } 4 | 5 | .add-icon-container { 6 | display: flex; 7 | flex-direction: column; 8 | align-items: center; 9 | justify-content: center; 10 | margin-top: 20px; 11 | } 12 | 13 | .add-icon { 14 | font-size: 48px; 15 | color: blue; 16 | transition: color 0.3s ease; 17 | cursor: pointer; 18 | } 19 | 20 | .add-text { 21 | font-size: 16px; 22 | color: gray; 23 | margin-top: 8px; 24 | } 25 | -------------------------------------------------------------------------------- /src/features/auth/RequireAuth.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { selectCurrentToken } from './authSlice'; 3 | import { Navigate, Outlet, useLocation } from 'react-router-dom'; 4 | import { useSelector } from 'react-redux'; 5 | 6 | const UseRequireAuth = () => { 7 | const token = useSelector(selectCurrentToken); 8 | const location = useLocation(); 9 | 10 | return token ? ( 11 | 12 | ) : ( 13 | 14 | ); 15 | }; 16 | 17 | export default UseRequireAuth; 18 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_stretched-link.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Stretched link 3 | // 4 | 5 | .stretched-link { 6 | &::after { 7 | position: absolute; 8 | top: 0; 9 | right: 0; 10 | bottom: 0; 11 | left: 0; 12 | z-index: 1; 13 | // Just in case `pointer-events: none` is set on a parent 14 | pointer-events: auto; 15 | content: ""; 16 | // IE10 bugfix, see https://stackoverflow.com/questions/16947967/ie10-hover-pseudo-class-doesnt-work-without-background-color 17 | background-color: rgba(0, 0, 0, 0); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/navBar/Logo.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import './navbar.css' 3 | import { NavLink } from 'react-router-dom' 4 | 5 | const Logo = () => { 6 | return ( 7 |
8 | 9 | logo 10 | 11 | ISTA 12 | Berkane 13 | 14 | 15 |
16 |
17 | ) 18 | } 19 | 20 | export default Logo 21 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | @mixin list-group-item-variant($state, $background, $color) { 4 | .list-group-item-#{$state} { 5 | color: $color; 6 | background-color: $background; 7 | 8 | &.list-group-item-action { 9 | @include hover-focus { 10 | color: $color; 11 | background-color: darken($background, 5%); 12 | } 13 | 14 | &.active { 15 | color: $white; 16 | background-color: $color; 17 | border-color: $color; 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/components/profile/profile.css: -------------------------------------------------------------------------------- 1 | .profile-container { 2 | padding-top: 200px; 3 | padding-bottom: 50px; 4 | padding-left: 200px; 5 | width: 1500px; 6 | display: flex; 7 | justify-content: center; 8 | } 9 | 10 | .card-media { 11 | position: relative; 12 | background-color: var(--color-primary); 13 | height: 200px; 14 | } 15 | 16 | .card-media img { 17 | position: absolute; 18 | top: 50%; 19 | left: 50%; 20 | transform: translate(-50%, -50%); 21 | } 22 | 23 | @media (max-width: 599px) { 24 | .card-media { 25 | height: 150px; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/dev/useInitial.js: -------------------------------------------------------------------------------- 1 | import {useState} from 'react' 2 | 3 | export const useInitial = () => { 4 | const [status, setStatus] = useState({ 5 | loading: false, 6 | error: false 7 | }) 8 | /* 9 | Implement hook functionality here. 10 | If you need to execute async operation, set loading to true and when it's over, set loading to false. 11 | If you caught some errors, set error status to true. 12 | Initial hook is considered to be successfully completed if it will return {loading: false, error: false}. 13 | */ 14 | return status 15 | } 16 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size or word-wrap. 4 | font-style: normal; 5 | font-weight: $font-weight-normal; 6 | line-height: $line-height-base; 7 | text-align: left; // Fallback for where `start` is not supported 8 | text-align: start; 9 | text-decoration: none; 10 | text-shadow: none; 11 | text-transform: none; 12 | letter-spacing: normal; 13 | word-break: normal; 14 | word-spacing: normal; 15 | white-space: normal; 16 | line-break: auto; 17 | } 18 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | @mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { 4 | .page-link { 5 | padding: $padding-y $padding-x; 6 | @include font-size($font-size); 7 | line-height: $line-height; 8 | } 9 | 10 | .page-item { 11 | &:first-child { 12 | .page-link { 13 | @include border-left-radius($border-radius); 14 | } 15 | } 16 | &:last-child { 17 | .page-link { 18 | @include border-right-radius($border-radius); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_utilities.scss: -------------------------------------------------------------------------------- 1 | @import "utilities/align"; 2 | @import "utilities/background"; 3 | @import "utilities/borders"; 4 | @import "utilities/clearfix"; 5 | @import "utilities/display"; 6 | @import "utilities/embed"; 7 | @import "utilities/flex"; 8 | @import "utilities/float"; 9 | @import "utilities/overflow"; 10 | @import "utilities/position"; 11 | @import "utilities/screenreaders"; 12 | @import "utilities/shadows"; 13 | @import "utilities/sizing"; 14 | @import "utilities/stretched-link"; 15 | @import "utilities/spacing"; 16 | @import "utilities/text"; 17 | @import "utilities/visibility"; 18 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_background-variant.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Contextual backgrounds 4 | 5 | @mixin bg-variant($parent, $color) { 6 | #{$parent} { 7 | background-color: $color !important; 8 | } 9 | a#{$parent}, 10 | button#{$parent} { 11 | @include hover-focus { 12 | background-color: darken($color, 10%) !important; 13 | } 14 | } 15 | } 16 | 17 | @mixin bg-gradient-variant($parent, $color) { 18 | #{$parent} { 19 | background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_sizing.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Width and height 4 | 5 | @each $prop, $abbrev in (width: w, height: h) { 6 | @each $size, $length in $sizes { 7 | .#{$abbrev}-#{$size} { #{$prop}: $length !important; } 8 | } 9 | } 10 | 11 | .mw-100 { max-width: 100% !important; } 12 | .mh-100 { max-height: 100% !important; } 13 | 14 | // Viewport additional helpers 15 | 16 | .min-vw-100 { min-width: 100vw !important; } 17 | .min-vh-100 { min-height: 100vh !important; } 18 | 19 | .vw-100 { width: 100vw !important; } 20 | .vh-100 { height: 100vh !important; } 21 | -------------------------------------------------------------------------------- /src/features/refetch/refetchPostsSlice.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from "@reduxjs/toolkit"; 2 | 3 | const refetchPostsSlice = createSlice({ 4 | name: "refetchPosts", 5 | initialState: { refetch: false }, 6 | reducers: { 7 | doRefetch: (state) => { 8 | state.refetch = true; 9 | }, 10 | dontRefetch: (state) => { 11 | state.refetch = false; 12 | } 13 | } 14 | }); 15 | 16 | export const {doRefetch,dontRefetch}= refetchPostsSlice.actions; 17 | export default refetchPostsSlice.reducer; 18 | export const selectRefetchPostsSlice = (state) => state.refetchPosts.refetch 19 | 20 | 21 | -------------------------------------------------------------------------------- /public/assets/js/main.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | 3 | const OptionsMenu = () => { 4 | const [showMenu, setShowMenu] = useState(false); 5 | 6 | const handleBtnClick = () => { 7 | setShowMenu(!showMenu); 8 | }; 9 | 10 | return ( 11 |
12 | 13 |
14 |
    15 |
  • Option 1
  • 16 |
  • Option 2
  • 17 |
  • Option 3
  • 18 |
19 |
20 |
21 | ); 22 | }; 23 | 24 | export default OptionsMenu; 25 | -------------------------------------------------------------------------------- /src/features/search/searchSlice.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from "@reduxjs/toolkit"; 2 | 3 | const searchSlice = createSlice({ 4 | name: "search", 5 | initialState: { searchData: {} }, 6 | reducers: { 7 | setResult: (state, action) => { 8 | const { searchData } = action.payload; 9 | return { ...state, searchData }; 10 | }, 11 | removeResult: (state, action) => { 12 | state.searchData = {}; 13 | }, 14 | }, 15 | }); 16 | 17 | export const { setResult, removeResult } = searchSlice.actions; 18 | 19 | export default searchSlice.reducer; 20 | 21 | export const selectSearchData = (state) => state.search.searchData; 22 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_box-shadow.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | @if $enable-shadows { 3 | $result: (); 4 | 5 | @if (length($shadow) == 1) { 6 | // We can pass `@include box-shadow(none);` 7 | $result: $shadow; 8 | } @else { 9 | // Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;` 10 | @for $i from 1 through length($shadow) { 11 | @if nth($shadow, $i) != "none" { 12 | $result: append($result, nth($shadow, $i), "comma"); 13 | } 14 | } 15 | } 16 | @if (length($result) > 0) { 17 | box-shadow: $result; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | ISTA Berkane 15 | 16 | 17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_position.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Common values 4 | @each $position in $positions { 5 | .position-#{$position} { position: $position !important; } 6 | } 7 | 8 | // Shorthand 9 | 10 | .fixed-top { 11 | position: fixed; 12 | top: 0; 13 | right: 0; 14 | left: 0; 15 | z-index: $zindex-fixed; 16 | } 17 | 18 | .fixed-bottom { 19 | position: fixed; 20 | right: 0; 21 | bottom: 0; 22 | left: 0; 23 | z-index: $zindex-fixed; 24 | } 25 | 26 | .sticky-top { 27 | @supports (position: sticky) { 28 | position: sticky; 29 | top: 0; 30 | z-index: $zindex-sticky; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_display.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // 4 | // Utilities for common `display` values 5 | // 6 | 7 | @each $breakpoint in map-keys($grid-breakpoints) { 8 | @include media-breakpoint-up($breakpoint) { 9 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 10 | 11 | @each $value in $displays { 12 | .d#{$infix}-#{$value} { display: $value !important; } 13 | } 14 | } 15 | } 16 | 17 | 18 | // 19 | // Utilities for toggling `display` in print 20 | // 21 | 22 | @media print { 23 | @each $value in $displays { 24 | .d-print-#{$value} { display: $value !important; } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_root.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | // Custom variable values only support SassScript inside `#{}`. 3 | @each $color, $value in $colors { 4 | --#{$color}: #{$value}; 5 | } 6 | 7 | @each $color, $value in $theme-colors { 8 | --#{$color}: #{$value}; 9 | } 10 | 11 | @each $bp, $value in $grid-breakpoints { 12 | --breakpoint-#{$bp}: #{$value}; 13 | } 14 | 15 | // Use `inspect` for lists so that quoted items keep the quotes. 16 | // See https://github.com/sass/sass/issues/2383#issuecomment-336349172 17 | --font-family-sans-serif: #{inspect($font-family-sans-serif)}; 18 | --font-family-monospace: #{inspect($font-family-monospace)}; 19 | } 20 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_deprecate.scss: -------------------------------------------------------------------------------- 1 | // Deprecate mixin 2 | // 3 | // This mixin can be used to deprecate mixins or functions. 4 | // `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to 5 | // some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap) 6 | @mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) { 7 | @if ($enable-deprecation-messages != false and $ignore-warning != true) { 8 | @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}."; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/components/calandar/Header.jsx: -------------------------------------------------------------------------------- 1 | import { Typography, Box, useTheme } from "@mui/material"; 2 | import { tokens } from "../../theme"; 3 | 4 | const Header = ({ title, subtitle }) => { 5 | const theme = useTheme(); 6 | const colors = tokens(theme.palette.mode); 7 | return ( 8 | 9 | 15 | {title} 16 | 17 | 18 | {subtitle} 19 | 20 | 21 | ); 22 | }; 23 | 24 | export default Header; 25 | -------------------------------------------------------------------------------- /src/components/calandar/calendarComponent.css: -------------------------------------------------------------------------------- 1 | .CalendarComponent { 2 | text-align: center; 3 | margin-top: 4rem; 4 | } 5 | 6 | .App-logo { 7 | animation: App-logo-spin infinite 20s linear; 8 | height: 80px; 9 | } 10 | 11 | .event-icons{ 12 | color: var(--color-text); 13 | font-size: 1.3rem; 14 | margin-bottom: 1px; 15 | } 16 | 17 | .App-header { 18 | background-color: #222; 19 | height: 150px; 20 | padding: 20px; 21 | color: white; 22 | } 23 | 24 | .App-title { 25 | font-size: 1.5em; 26 | } 27 | 28 | .App-intro { 29 | font-size: large; 30 | } 31 | 32 | @keyframes App-logo-spin { 33 | from { 34 | transform: rotate(0deg); 35 | } 36 | to { 37 | transform: rotate(360deg); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/components/accueil/main/SearchMain.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Post from './post/Post'; 3 | 4 | 5 | const SearchMain = (props) => { 6 | 7 | const data = props.data 8 | const posts = data.posts 9 | const stagiaires = data.stagiaires 10 | const documents = data.documents 11 | 12 | return ( 13 |
14 | 15 | {posts && 16 | posts.map((post) => ( 17 | 21 | ) 22 | ) 23 | } 24 | 25 |
26 | ); 27 | } 28 | 29 | 30 | export default SearchMain 31 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grid v4.3.1 (https://getbootstrap.com/) 3 | * Copyright 2011-2019 The Bootstrap Authors 4 | * Copyright 2011-2019 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | html { 9 | box-sizing: border-box; 10 | -ms-overflow-style: scrollbar; 11 | } 12 | 13 | *, 14 | *::before, 15 | *::after { 16 | box-sizing: inherit; 17 | } 18 | 19 | @import "functions"; 20 | @import "variables"; 21 | 22 | @import "mixins/breakpoints"; 23 | @import "mixins/grid-framework"; 24 | @import "mixins/grid"; 25 | 26 | @import "grid"; 27 | @import "utilities/display"; 28 | @import "utilities/flex"; 29 | @import "utilities/spacing"; 30 | -------------------------------------------------------------------------------- /src/dev/palette.jsx: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import {Fragment} from "react" 3 | import { 4 | Category, 5 | Component, 6 | Variant, 7 | Palette, 8 | } from "@react-buddy/ide-toolbox" 9 | import MUIPalette from "@react-buddy/palette-mui"; 10 | 11 | export const PaletteTree = () => ( 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | ) 23 | 24 | export function ExampleLoaderComponent() { 25 | return ( 26 | Loading... 27 | ) 28 | } -------------------------------------------------------------------------------- /src/components/calendrier/calendrier.css: -------------------------------------------------------------------------------- 1 | .calendrier { 2 | border: red 1px solid; 3 | width: 80%; 4 | } 5 | 6 | #minCalendrier-box { 7 | width: 90%; 8 | height: auto; 9 | transition: var(--transition); 10 | border-radius: 16px; 11 | background: rgb(255, 255, 255); 12 | box-shadow: #e2e2e2c4 0px 0px 4px; 13 | border: #e2e2e2c4 solid 1px; 14 | margin-top: 20px; 15 | } 16 | #title-minCalendrier { 17 | font-size: 20px; 18 | text-align: left; 19 | padding: 6px 12px 1px; 20 | flex-direction: column; 21 | } 22 | 23 | @media screen and (min-width: 1005px) and (max-width: 1281px) { 24 | 25 | #minCalendrier-box { 26 | /* border: red 1px solid; */ 27 | width: 80%; 28 | 29 | } 30 | } -------------------------------------------------------------------------------- /src/features/auth/authSlice.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from "@reduxjs/toolkit"; 2 | 3 | const authSlice = createSlice({ 4 | name: 'auth', 5 | initialState: { user: null, token: null }, 6 | reducers: { 7 | setCredentials: (state, action) => { 8 | const { user, token } = action.payload; 9 | return { ...state, user, token }; 10 | }, 11 | logOut: (state, action) => { 12 | state.user = null 13 | state.token = null 14 | }, 15 | } 16 | }) 17 | 18 | export const { setCredentials, logOut } = authSlice.actions 19 | 20 | export default authSlice.reducer 21 | 22 | export const selectCurrentUser = (state) => state.auth.user 23 | export const selectCurrentToken = (state) => state.auth.token -------------------------------------------------------------------------------- /.idea/php.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | 13 | 14 | 16 | 17 | 19 | -------------------------------------------------------------------------------- /src/components/accueil/SearchAccueil.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { useEffect } from 'react'; 3 | import SearchMain from './main/SearchMain'; 4 | import { useSelector } from 'react-redux'; 5 | import { selectSearchData } from '../../features/search/searchSlice'; 6 | import { useState } from 'react'; 7 | import Right from './right/right'; 8 | 9 | const SearchAccueil = () => { 10 | const dataSearch = useSelector(selectSearchData) 11 | const [data, setData] = useState({}) 12 | 13 | useEffect(() => { 14 | setData(dataSearch) 15 | }, [dataSearch]) 16 | 17 | return ( 18 |
19 | 22 | 23 |
24 | ) 25 | } 26 | 27 | export default SearchAccueil 28 | -------------------------------------------------------------------------------- /src/app/api/SearchAxios.js: -------------------------------------------------------------------------------- 1 | import api from "./baseURL"; 2 | 3 | export const search = async (query,token=null) => { 4 | try { 5 | if (token) { 6 | const headers = { Authorization: `Bearer ${token}` }; 7 | const response = await api.get('/search', { 8 | params: {query : query}, 9 | headers 10 | }) 11 | return response.data 12 | // console.log(response.data); 13 | }else{ 14 | const response = await api.get('/search', { 15 | params: {query : query} 16 | }) 17 | // console.log(response.data); 18 | return response.data 19 | 20 | } 21 | } catch (error) { 22 | console.log(error); 23 | 24 | } 25 | } -------------------------------------------------------------------------------- /src/app/api/audienceAxios.js: -------------------------------------------------------------------------------- 1 | import api from "./baseURL"; 2 | 3 | export const search = async (query,token=null) => { 4 | try { 5 | if (token) { 6 | const headers = { Authorization: `Bearer ${token}` }; 7 | const response = await api.get('/search', { 8 | params: {query : query}, 9 | headers 10 | }) 11 | return response.data 12 | // console.log(response.data); 13 | }else{ 14 | const response = await api.get('/search', { 15 | params: {query : query} 16 | }) 17 | // console.log(response.data); 18 | return response.data 19 | 20 | } 21 | } catch (error) { 22 | console.log(error); 23 | 24 | } 25 | } -------------------------------------------------------------------------------- /src/app/store.js: -------------------------------------------------------------------------------- 1 | import { configureStore } from "@reduxjs/toolkit"; 2 | import { apiSlice } from "./api/apiSlice"; 3 | import authReducer from "../features/auth/authSlice" 4 | import searchReducer from '../features/search/searchSlice' 5 | import filiereSlice from "../features/filiere/filiereSlice"; 6 | 7 | 8 | window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() 9 | 10 | 11 | export const store = configureStore({ 12 | reducer: { 13 | [apiSlice.reducerPath]: apiSlice.reducer, 14 | auth: authReducer, 15 | search: searchReducer, 16 | filiere: filiereSlice, 17 | }, 18 | middleware: getDefaultMiddleware => 19 | getDefaultMiddleware().concat(apiSlice.middleware), 20 | // convert to false before depoyment 21 | devTools: true 22 | }) -------------------------------------------------------------------------------- /src/features/auth/RequireAdmin.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { selectCurrentToken, selectCurrentUser } from './authSlice'; 3 | import { Navigate } from 'react-router-dom'; 4 | import { useSelector } from 'react-redux'; 5 | 6 | const RequireAdmin = ({ children }) => { 7 | const token = useSelector(selectCurrentToken); 8 | const currentUser = useSelector(selectCurrentUser); 9 | 10 | // Redirect to login page if token is not present 11 | if (!token) { 12 | return ; 13 | } 14 | 15 | // Redirect to home page if user is not an admin 16 | if (currentUser.role !== 'admin') { 17 | return ; 18 | } 19 | 20 | // Otherwise, render the child components 21 | return <>{children}; 22 | }; 23 | 24 | export default RequireAdmin; 25 | -------------------------------------------------------------------------------- /src/features/auth/Welcome.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { useSelector } from "react-redux" 3 | import { selectCurrentToken, selectCurrentUser } from '../../features/auth/authSlice' 4 | import { Link, Navigate, Outlet, useLocation } from 'react-router-dom' 5 | 6 | const Welcome = () => { 7 | const user = useSelector(selectCurrentUser) 8 | const token = useSelector(selectCurrentToken) 9 | 10 | const welcome = user ? `Welcome ${user.prenom} ${user.nom} !` : 'Welcome' 11 | const tokenAbbr = token ? `${token.slice(0, 9)}...` : '' 12 | const content = ( 13 |
14 |

{welcome}

15 |

Token : {tokenAbbr}

16 |

Go to profile

17 |
18 | ) 19 | 20 | return content 21 | } 22 | 23 | export default Welcome 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/app/api/cvPdfAxios.js: -------------------------------------------------------------------------------- 1 | // import api from './baseURL' 2 | 3 | // export const downloadCV = async (id) => { 4 | // try { 5 | // const response = await api.get(`/gcv${id}`, { 6 | // responseType: 'blob', 7 | // }); 8 | // return response.data; 9 | 10 | // } catch (error) { 11 | // console.log(error); 12 | // } 13 | // }; 14 | import api from './baseURL'; 15 | 16 | /** 17 | * @param {string} id 18 | * @returns {Promise} 19 | * @throws {Error} 20 | */ 21 | 22 | export const downloadCV = async (id) => { 23 | try { 24 | const response = await api.get(`/gcv/${id}`, { 25 | responseType: 'blob', 26 | }); 27 | return response.data; 28 | } catch (error) { 29 | console.error('Error downloading CV:', error); 30 | throw new Error('Failed to download CV. Please try again.'); 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /src/features/logout/Logout.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { useNavigate } from 'react-router-dom'; 3 | import { TbLogout } from 'react-icons/tb' 4 | import { useDispatch } from 'react-redux' 5 | import { logOut } from '../../features/auth/authSlice' 6 | import RemoveCookie from '../../cookies/JWT/RemoveCookie'; 7 | const { localStorage } = window; 8 | 9 | const Logout = () => { 10 | const dispatch = useDispatch(); 11 | const navigate = useNavigate(); 12 | 13 | const handleLogout = () => { 14 | dispatch(logOut()); 15 | RemoveCookie('jwt') 16 | localStorage.removeItem('credentials'); 17 | localStorage.removeItem('token'); 18 | navigate('/login'); 19 | } 20 | 21 | return ( 22 | 25 | ) 26 | } 27 | 28 | export default Logout 29 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Only display content to screen readers 2 | // 3 | // See: https://a11yproject.com/posts/how-to-hide-content/ 4 | // See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ 5 | 6 | @mixin sr-only { 7 | position: absolute; 8 | width: 1px; 9 | height: 1px; 10 | padding: 0; 11 | overflow: hidden; 12 | clip: rect(0, 0, 0, 0); 13 | white-space: nowrap; 14 | border: 0; 15 | } 16 | 17 | // Use in conjunction with .sr-only to only display content when it's focused. 18 | // 19 | // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 20 | // 21 | // Credit: HTML5 Boilerplate 22 | 23 | @mixin sr-only-focusable { 24 | &:active, 25 | &:focus { 26 | position: static; 27 | width: auto; 28 | height: auto; 29 | overflow: visible; 30 | clip: auto; 31 | white-space: normal; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | import 'bootstrap/dist/css/bootstrap.min.css'; 4 | import 'bootstrap/dist/js/bootstrap.bundle.min?ver=1.2.0'; 5 | import './index.css'; 6 | import App from './App'; 7 | import {BrowserRouter} from 'react-router-dom'; 8 | import {Provider} from 'react-redux'; 9 | import {store} from './app/store'; 10 | import {DevSupport} from "@react-buddy/ide-toolbox"; 11 | import {ComponentPreviews, useInitial} from "./dev"; 12 | 13 | const root = ReactDOM.createRoot(document.getElementById('root')); 14 | root.render( 15 | 16 | 17 | 20 | 21 | 22 | 23 | 24 | ); 25 | 26 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_hover.scss: -------------------------------------------------------------------------------- 1 | // Hover mixin and `$enable-hover-media-query` are deprecated. 2 | // 3 | // Originally added during our alphas and maintained during betas, this mixin was 4 | // designed to prevent `:hover` stickiness on iOS-an issue where hover styles 5 | // would persist after initial touch. 6 | // 7 | // For backward compatibility, we've kept these mixins and updated them to 8 | // always return their regular pseudo-classes instead of a shimmed media query. 9 | // 10 | // Issue: https://github.com/twbs/bootstrap/issues/25195 11 | 12 | @mixin hover { 13 | &:hover { @content; } 14 | } 15 | 16 | @mixin hover-focus { 17 | &:hover, 18 | &:focus { 19 | @content; 20 | } 21 | } 22 | 23 | @mixin plain-hover-focus { 24 | &, 25 | &:hover, 26 | &:focus { 27 | @content; 28 | } 29 | } 30 | 31 | @mixin hover-focus-active { 32 | &:hover, 33 | &:focus, 34 | &:active { 35 | @content; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/components/stagiaire/contact/Contact.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import './contact.css' 3 | import SocialLinks from './SocialLinks' 4 | 5 | const Contact = () => { 6 | const socialLinks = [ 7 | { 8 | id: 1, 9 | name: 'Twitter', 10 | link: 'https://twitter.com', 11 | icon: 'fab fa-twitter', 12 | }, 13 | { 14 | id: 2, 15 | name: 'Facebook', 16 | link: 'https://facebook.com', 17 | icon: 'fab fa-facebook', 18 | }, 19 | { 20 | id: 3, 21 | name: 'Instagram', 22 | link: 'https://instagram.com', 23 | icon: 'fab fa-instagram', 24 | }, 25 | ]; 26 | return ( 27 |
28 |

Contact 29 |

30 |
31 | 34 |
35 |
36 | ) 37 | } 38 | 39 | export default Contact 40 | -------------------------------------------------------------------------------- /src/components/stagiaire/contact/contact.css: -------------------------------------------------------------------------------- 1 | .social-links { 2 | display: flex; 3 | align-items: center; 4 | gap: 1rem; 5 | } 6 | 7 | .social-link { 8 | display: flex; 9 | align-items: center; 10 | justify-content: center; 11 | width: 2.5rem; 12 | height: 2.5rem; 13 | border-radius: 50%; 14 | background-color: #ccc; 15 | color: #fff; 16 | font-size: 1.25rem; 17 | transition: all 0.2s ease-in-out; 18 | } 19 | 20 | .social-link:hover { 21 | transform: scale(1.2); 22 | } 23 | 24 | .social-link svg { 25 | width: 1.25rem; 26 | height: 1.25rem; 27 | fill: currentColor; 28 | } 29 | 30 | .social-link.edit { 31 | background-color: #007bff; 32 | } 33 | 34 | .social-link.edit:hover { 35 | background-color: #0062cc; 36 | } 37 | 38 | .social-link.delete { 39 | background-color: #dc3545; 40 | } 41 | 42 | .social-link.delete:hover { 43 | background-color: #c82333; 44 | } 45 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_table-row.scss: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | @mixin table-row-variant($state, $background, $border: null) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table-#{$state} { 7 | &, 8 | > th, 9 | > td { 10 | background-color: $background; 11 | } 12 | 13 | @if $border != null { 14 | th, 15 | td, 16 | thead th, 17 | tbody + tbody { 18 | border-color: $border; 19 | } 20 | } 21 | } 22 | 23 | // Hover states for `.table-hover` 24 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 25 | .table-hover { 26 | $hover-background: darken($background, 5%); 27 | 28 | .table-#{$state} { 29 | @include hover { 30 | background-color: $hover-background; 31 | 32 | > td, 33 | > th { 34 | background-color: $hover-background; 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/utilities/_embed.scss: -------------------------------------------------------------------------------- 1 | // Credit: Nicolas Gallagher and SUIT CSS. 2 | 3 | .embed-responsive { 4 | position: relative; 5 | display: block; 6 | width: 100%; 7 | padding: 0; 8 | overflow: hidden; 9 | 10 | &::before { 11 | display: block; 12 | content: ""; 13 | } 14 | 15 | .embed-responsive-item, 16 | iframe, 17 | embed, 18 | object, 19 | video { 20 | position: absolute; 21 | top: 0; 22 | bottom: 0; 23 | left: 0; 24 | width: 100%; 25 | height: 100%; 26 | border: 0; 27 | } 28 | } 29 | 30 | @each $embed-responsive-aspect-ratio in $embed-responsive-aspect-ratios { 31 | $embed-responsive-aspect-ratio-x: nth($embed-responsive-aspect-ratio, 1); 32 | $embed-responsive-aspect-ratio-y: nth($embed-responsive-aspect-ratio, 2); 33 | 34 | .embed-responsive-#{$embed-responsive-aspect-ratio-x}by#{$embed-responsive-aspect-ratio-y} { 35 | &::before { 36 | padding-top: percentage($embed-responsive-aspect-ratio-y / $embed-responsive-aspect-ratio-x); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-text: #2F3A44; 3 | --color-text-light: #6C757D; 4 | --color-bg: #E8EDF0; 5 | --color-primary: #3d78d2; 6 | --color-primary-variant: #4f6d7a; 7 | --color-primary-variant2: rgba(77, 181, 255, 0.4); 8 | --color-white: #FFFFFF; 9 | --color--green-light: #F4F9FE; 10 | --color-light: #F4F9FE; 11 | 12 | --transition: all 400ms ease; 13 | } 14 | 15 | body { 16 | margin: 0; 17 | padding: 0; 18 | display: flex; 19 | flex-direction: column; 20 | justify-content: center; 21 | align-items: center; 22 | overflow: visible !important; 23 | } 24 | 25 | * { 26 | margin: 0; 27 | padding: 0; 28 | } 29 | 30 | .first-letter{ 31 | text-transform: capitalize; 32 | } 33 | 34 | @media (min-width: 200px) and (max-width: 499px) { 35 | body { 36 | margin: 0; 37 | padding: 0; 38 | display: contents; 39 | flex-direction: unset; 40 | } 41 | } 42 | 43 | @media screen and (min-width: 500px) and (max-width: 1005px) { 44 | #root { 45 | 46 | display: flex; 47 | flex-direction: column; 48 | justify-content: center; 49 | align-items: center; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v4.3.1 (https://getbootstrap.com/) 3 | * Copyright 2011-2019 The Bootstrap Authors 4 | * Copyright 2011-2019 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | @import "functions"; 9 | @import "variables"; 10 | @import "mixins"; 11 | @import "root"; 12 | @import "reboot"; 13 | @import "type"; 14 | @import "images"; 15 | @import "code"; 16 | @import "grid"; 17 | @import "tables"; 18 | @import "forms"; 19 | @import "buttons"; 20 | @import "transitions"; 21 | @import "dropdown"; 22 | @import "button-group"; 23 | @import "input-group"; 24 | @import "custom-forms"; 25 | @import "nav"; 26 | @import "navbar"; 27 | @import "card"; 28 | @import "breadcrumb"; 29 | @import "pagination"; 30 | @import "badge"; 31 | @import "jumbotron"; 32 | @import "alert"; 33 | @import "progress"; 34 | @import "media"; 35 | @import "list-group"; 36 | @import "close"; 37 | @import "toasts"; 38 | @import "modal"; 39 | @import "tooltip"; 40 | @import "popover"; 41 | @import "carousel"; 42 | @import "spinners"; 43 | @import "utilities"; 44 | @import "print"; 45 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_close.scss: -------------------------------------------------------------------------------- 1 | .close { 2 | float: right; 3 | @include font-size($close-font-size); 4 | font-weight: $close-font-weight; 5 | line-height: 1; 6 | color: $close-color; 7 | text-shadow: $close-text-shadow; 8 | opacity: .5; 9 | 10 | // Override 's hover style 11 | @include hover { 12 | color: $close-color; 13 | text-decoration: none; 14 | } 15 | 16 | &:not(:disabled):not(.disabled) { 17 | @include hover-focus { 18 | opacity: .75; 19 | } 20 | } 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 27 | 28 | // stylelint-disable-next-line selector-no-qualifying-type 29 | button.close { 30 | padding: 0; 31 | background-color: transparent; 32 | border: 0; 33 | appearance: none; 34 | } 35 | 36 | // Future-proof disabling of clicks on `` elements 37 | 38 | // stylelint-disable-next-line selector-no-qualifying-type 39 | a.close.disabled { 40 | pointer-events: none; 41 | } 42 | -------------------------------------------------------------------------------- /src/components/stagiaire/PDFDocument/PDFDocument.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Page, Document, StyleSheet } from '@react-pdf/renderer'; 3 | import Header from '../header/Header'; 4 | import Contact from '../contact/Contact'; 5 | import Competences from '../competences/Competences'; 6 | import Experiences from '../experiences/Experiences'; 7 | import Formations from '../formation/Formations'; 8 | import Interet from '../interet/Interet'; 9 | 10 | 11 | 12 | const styles = StyleSheet.create({ 13 | page: { 14 | fontFamily: 'Helvetica', 15 | fontSize: 11, 16 | paddingTop: 30, 17 | paddingBottom: 60, 18 | paddingHorizontal: 30, 19 | }, 20 | }); 21 | 22 | const PDFDocument = ({ stagiaireData }) => ( 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | ); 34 | 35 | export default PDFDocument; 36 | -------------------------------------------------------------------------------- /src/app/api/axios.js: -------------------------------------------------------------------------------- 1 | // import axios from "axios"; 2 | // import { useSelector } from "react-redux"; 3 | // import GetCookie from "../../cookies/JWT/GetCookie"; 4 | // import { selectCurrentUser } from "../../features/auth/authSlice"; 5 | // import api from './baseURL' 6 | // 7 | // // export const api = axios.create({ 8 | // // baseURL: 'http://127.0.0.1:8000/api' 9 | // // }) 10 | // 11 | // 12 | // export const search = async (query,token) => { 13 | // try { 14 | // if (token) { 15 | // const headers = { Authorization: `Bearer ${token}` }; 16 | // const response = await api.get('/search', { 17 | // params: {query : query}, 18 | // headers 19 | // }) 20 | // return response.data 21 | // // console.log(response.data); 22 | // }else{ 23 | // const response = await api.get('/search', { 24 | // params: {query : query} 25 | // }) 26 | // // console.log(response.data); 27 | // return response.data 28 | // 29 | // } 30 | // } catch (error) { 31 | // console.log(error); 32 | // 33 | // } 34 | // } 35 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_toasts.scss: -------------------------------------------------------------------------------- 1 | .toast { 2 | max-width: $toast-max-width; 3 | overflow: hidden; // cheap rounded corners on nested items 4 | @include font-size($toast-font-size); 5 | color: $toast-color; 6 | background-color: $toast-background-color; 7 | background-clip: padding-box; 8 | border: $toast-border-width solid $toast-border-color; 9 | box-shadow: $toast-box-shadow; 10 | backdrop-filter: blur(10px); 11 | opacity: 0; 12 | @include border-radius($toast-border-radius); 13 | 14 | &:not(:last-child) { 15 | margin-bottom: $toast-padding-x; 16 | } 17 | 18 | &.showing { 19 | opacity: 1; 20 | } 21 | 22 | &.show { 23 | display: block; 24 | opacity: 1; 25 | } 26 | 27 | &.hide { 28 | display: none; 29 | } 30 | } 31 | 32 | .toast-header { 33 | display: flex; 34 | align-items: center; 35 | padding: $toast-padding-y $toast-padding-x; 36 | color: $toast-header-color; 37 | background-color: $toast-header-background-color; 38 | background-clip: padding-box; 39 | border-bottom: $toast-border-width solid $toast-header-border-color; 40 | } 41 | 42 | .toast-body { 43 | padding: $toast-padding-x; // apply to both vertical and horizontal 44 | } 45 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_code.scss: -------------------------------------------------------------------------------- 1 | // Inline code 2 | code { 3 | @include font-size($code-font-size); 4 | color: $code-color; 5 | word-break: break-word; 6 | 7 | // Streamline the style when inside anchors to avoid broken underline and more 8 | a > & { 9 | color: inherit; 10 | } 11 | } 12 | 13 | // User input typically entered via keyboard 14 | kbd { 15 | padding: $kbd-padding-y $kbd-padding-x; 16 | @include font-size($kbd-font-size); 17 | color: $kbd-color; 18 | background-color: $kbd-bg; 19 | @include border-radius($border-radius-sm); 20 | @include box-shadow($kbd-box-shadow); 21 | 22 | kbd { 23 | padding: 0; 24 | @include font-size(100%); 25 | font-weight: $nested-kbd-font-weight; 26 | @include box-shadow(none); 27 | } 28 | } 29 | 30 | // Blocks of code 31 | pre { 32 | display: block; 33 | @include font-size($code-font-size); 34 | color: $pre-color; 35 | 36 | // Account for some code outputs that place code tags in pre tags 37 | code { 38 | @include font-size(inherit); 39 | color: inherit; 40 | word-break: normal; 41 | } 42 | } 43 | 44 | // Enable scrollable blocks of code 45 | .pre-scrollable { 46 | max-height: $pre-scrollable-max-height; 47 | overflow-y: scroll; 48 | } 49 | -------------------------------------------------------------------------------- /src/app/api/pdfAxios.js: -------------------------------------------------------------------------------- 1 | import api from './baseURL' 2 | 3 | export const downloadPDF = async (pdfPath) => { 4 | try { 5 | const response = await api.get('/downloadpdf', { 6 | params: { 7 | pdf_path: pdfPath 8 | }, 9 | responseType: 'blob', 10 | }); 11 | return response.data; 12 | 13 | } catch (error) { 14 | console.log(error); 15 | } 16 | }; 17 | 18 | export const UpdatePdfLibelle = async (pdf, token) => { 19 | try { 20 | const headers = { Authorization: `Bearer ${token}` }; 21 | const response = await api.put(`/pdf/update/${pdf.id}`, { 22 | libelle: pdf.libelle 23 | }, { 24 | headers: headers 25 | }); 26 | return response.data; 27 | } catch (error) { 28 | console.log(error); 29 | } 30 | }; 31 | 32 | 33 | export const removePdfFromCategory = async (id, token) => { 34 | try { 35 | const headers = { Authorization: `Bearer ${token}` }; 36 | const response = await api.post(`/pdf/removecategory/${id}`, null, { 37 | headers: headers 38 | }); 39 | return response.data; 40 | } catch (error) { 41 | console.log(error); 42 | throw error; 43 | } 44 | }; -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_grid.scss: -------------------------------------------------------------------------------- 1 | // Container widths 2 | // 3 | // Set the container width, and override it for fixed navbars in media queries. 4 | 5 | @if $enable-grid-classes { 6 | .container { 7 | @include make-container(); 8 | @include make-container-max-widths(); 9 | } 10 | } 11 | 12 | // Fluid container 13 | // 14 | // Utilizes the mixin meant for fixed width containers, but with 100% width for 15 | // fluid, full width layouts. 16 | 17 | @if $enable-grid-classes { 18 | .container-fluid { 19 | @include make-container(); 20 | } 21 | } 22 | 23 | // Row 24 | // 25 | // Rows contain and clear the floats of your columns. 26 | 27 | @if $enable-grid-classes { 28 | .row { 29 | @include make-row(); 30 | } 31 | 32 | // Remove the negative margin from default .row, then the horizontal padding 33 | // from all immediate children columns (to prevent runaway style inheritance). 34 | .no-gutters { 35 | margin-right: 0; 36 | margin-left: 0; 37 | 38 | > .col, 39 | > [class*="col-"] { 40 | padding-right: 0; 41 | padding-left: 0; 42 | } 43 | } 44 | } 45 | 46 | // Columns 47 | // 48 | // Common styles for small and large grid columns 49 | 50 | @if $enable-grid-classes { 51 | @include make-grid-columns(); 52 | } 53 | -------------------------------------------------------------------------------- /src/components/calendrier/MiniCalendrier.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import FullCalendar from '@fullcalendar/react' // must go before plugins 3 | import dayGridPlugin from '@fullcalendar/daygrid' 4 | import { Box, Skeleton } from '@mui/material' 5 | import { useState } from 'react'; 6 | import { Link } from 'react-router-dom' 7 | 8 | const MiniCalendrier = () => { 9 | const [isLoading, setIsLoading] = useState(false); 10 | return ( 11 |
12 |

Calendrier

13 | {isLoading 14 | ? 15 |
16 | 17 | 18 | 19 | 20 | 21 |
22 | : ( 23 | 27 | ) 28 | } 29 |
30 | Voir plus... 31 |
32 |
33 | ) 34 | } 35 | 36 | export default MiniCalendrier 37 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_progress.scss: -------------------------------------------------------------------------------- 1 | // Disable animation if transitions are disabled 2 | @if $enable-transitions { 3 | @keyframes progress-bar-stripes { 4 | from { background-position: $progress-height 0; } 5 | to { background-position: 0 0; } 6 | } 7 | } 8 | 9 | .progress { 10 | display: flex; 11 | height: $progress-height; 12 | overflow: hidden; // force rounded corners by cropping it 13 | @include font-size($progress-font-size); 14 | background-color: $progress-bg; 15 | @include border-radius($progress-border-radius); 16 | @include box-shadow($progress-box-shadow); 17 | } 18 | 19 | .progress-bar { 20 | display: flex; 21 | flex-direction: column; 22 | justify-content: center; 23 | color: $progress-bar-color; 24 | text-align: center; 25 | white-space: nowrap; 26 | background-color: $progress-bar-bg; 27 | @include transition($progress-bar-transition); 28 | } 29 | 30 | .progress-bar-striped { 31 | @include gradient-striped(); 32 | background-size: $progress-height $progress-height; 33 | } 34 | 35 | @if $enable-transitions { 36 | .progress-bar-animated { 37 | animation: progress-bar-stripes $progress-bar-animation-timing; 38 | 39 | @media (prefers-reduced-motion: reduce) { 40 | animation: none; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // 3 | // Used in conjunction with global variables to enable certain theme features. 4 | 5 | // Vendor 6 | @import "vendor/rfs"; 7 | 8 | // Deprecate 9 | @import "mixins/deprecate"; 10 | 11 | // Utilities 12 | @import "mixins/breakpoints"; 13 | @import "mixins/hover"; 14 | @import "mixins/image"; 15 | @import "mixins/badge"; 16 | @import "mixins/resize"; 17 | @import "mixins/screen-reader"; 18 | @import "mixins/size"; 19 | @import "mixins/reset-text"; 20 | @import "mixins/text-emphasis"; 21 | @import "mixins/text-hide"; 22 | @import "mixins/text-truncate"; 23 | @import "mixins/visibility"; 24 | 25 | // // Components 26 | @import "mixins/alert"; 27 | @import "mixins/buttons"; 28 | @import "mixins/caret"; 29 | @import "mixins/pagination"; 30 | @import "mixins/lists"; 31 | @import "mixins/list-group"; 32 | @import "mixins/nav-divider"; 33 | @import "mixins/forms"; 34 | @import "mixins/table-row"; 35 | 36 | // // Skins 37 | @import "mixins/background-variant"; 38 | @import "mixins/border-radius"; 39 | @import "mixins/box-shadow"; 40 | @import "mixins/gradients"; 41 | @import "mixins/transition"; 42 | 43 | // // Layout 44 | @import "mixins/clearfix"; 45 | @import "mixins/grid-framework"; 46 | @import "mixins/grid"; 47 | @import "mixins/float"; 48 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_spinners.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Rotating border 3 | // 4 | 5 | @keyframes spinner-border { 6 | to { transform: rotate(360deg); } 7 | } 8 | 9 | .spinner-border { 10 | display: inline-block; 11 | width: $spinner-width; 12 | height: $spinner-height; 13 | vertical-align: text-bottom; 14 | border: $spinner-border-width solid currentColor; 15 | border-right-color: transparent; 16 | // stylelint-disable-next-line property-blacklist 17 | border-radius: 50%; 18 | animation: spinner-border .75s linear infinite; 19 | } 20 | 21 | .spinner-border-sm { 22 | width: $spinner-width-sm; 23 | height: $spinner-height-sm; 24 | border-width: $spinner-border-width-sm; 25 | } 26 | 27 | // 28 | // Growing circle 29 | // 30 | 31 | @keyframes spinner-grow { 32 | 0% { 33 | transform: scale(0); 34 | } 35 | 50% { 36 | opacity: 1; 37 | } 38 | } 39 | 40 | .spinner-grow { 41 | display: inline-block; 42 | width: $spinner-width; 43 | height: $spinner-height; 44 | vertical-align: text-bottom; 45 | background-color: currentColor; 46 | // stylelint-disable-next-line property-blacklist 47 | border-radius: 50%; 48 | opacity: 0; 49 | animation: spinner-grow .75s linear infinite; 50 | } 51 | 52 | .spinner-grow-sm { 53 | width: $spinner-width-sm; 54 | height: $spinner-height-sm; 55 | } 56 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | 10 | @mixin img-fluid { 11 | // Part 1: Set a maximum relative to the parent 12 | max-width: 100%; 13 | // Part 2: Override the height to auto, otherwise images will be stretched 14 | // when setting a width and height attribute on the img element. 15 | height: auto; 16 | } 17 | 18 | 19 | // Retina image 20 | // 21 | // Short retina mixin for setting background-image and -size. 22 | 23 | @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { 24 | background-image: url($file-1x); 25 | 26 | // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, 27 | // but doesn't convert dppx=>dpi. 28 | // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. 29 | // Compatibility info: https://caniuse.com/#feat=css-media-resolution 30 | @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx 31 | only screen and (min-resolution: 2dppx) { // Standardized 32 | background-image: url($file-2x); 33 | background-size: $width-1x $height-1x; 34 | } 35 | @include deprecate("`img-retina()`", "v4.3.0", "v5"); 36 | } 37 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_images.scss: -------------------------------------------------------------------------------- 1 | // Responsive images (ensure images don't scale beyond their parents) 2 | // 3 | // This is purposefully opt-in via an explicit class rather than being the default for all ``s. 4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2, 5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) 6 | // which weren't expecting the images within themselves to be involuntarily resized. 7 | // See also https://github.com/twbs/bootstrap/issues/18178 8 | .img-fluid { 9 | @include img-fluid; 10 | } 11 | 12 | 13 | // Image thumbnails 14 | .img-thumbnail { 15 | padding: $thumbnail-padding; 16 | background-color: $thumbnail-bg; 17 | border: $thumbnail-border-width solid $thumbnail-border-color; 18 | @include border-radius($thumbnail-border-radius); 19 | @include box-shadow($thumbnail-box-shadow); 20 | 21 | // Keep them at most 100% wide 22 | @include img-fluid; 23 | } 24 | 25 | // 26 | // Figures 27 | // 28 | 29 | .figure { 30 | // Ensures the caption's text aligns with the image. 31 | display: inline-block; 32 | } 33 | 34 | .figure-img { 35 | margin-bottom: $spacer / 2; 36 | line-height: 1; 37 | } 38 | 39 | .figure-caption { 40 | @include font-size($figure-caption-font-size); 41 | color: $figure-caption-color; 42 | } 43 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | @include font-size($badge-font-size); 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | @include border-radius($badge-border-radius); 16 | @include transition($badge-transition); 17 | 18 | @at-root a#{&} { 19 | @include hover-focus { 20 | text-decoration: none; 21 | } 22 | } 23 | 24 | // Empty badges collapse automatically 25 | &:empty { 26 | display: none; 27 | } 28 | } 29 | 30 | // Quick fix for badges in buttons 31 | .btn .badge { 32 | position: relative; 33 | top: -1px; 34 | } 35 | 36 | // Pill badges 37 | // 38 | // Make them extra rounded with a modifier to replace v3's badges. 39 | 40 | .badge-pill { 41 | padding-right: $badge-pill-padding-x; 42 | padding-left: $badge-pill-padding-x; 43 | @include border-radius($badge-pill-border-radius); 44 | } 45 | 46 | // Colors 47 | // 48 | // Contextual variations (linked badges get darker on :hover). 49 | 50 | @each $color, $value in $theme-colors { 51 | .badge-#{$color} { 52 | @include badge-variant($value); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/components/header/Header.jsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react' 2 | import { RiSearchLine } from "react-icons/ri"; 3 | import './header.css' 4 | import { Link } from 'react-router-dom'; 5 | import { useDispatch, useSelector } from 'react-redux'; 6 | import { selectCurrentUser, setCredentials } from '../../features/auth/authSlice'; 7 | import Search from './Search'; 8 | import { Button } from '@mui/material'; 9 | 10 | const Header = () => { 11 | const user = useSelector(selectCurrentUser) 12 | const dispatch = useDispatch(); 13 | 14 | useEffect(() => { 15 | const storedUser = JSON.parse(localStorage.getItem('user')) 16 | if (storedUser) { 17 | dispatch(setCredentials({ 18 | user: storedUser, 19 | token: localStorage.getItem('token') 20 | })) 21 | } 22 | }, [dispatch]) 23 | return ( 24 |
25 | {/* */} 26 | {/* {!user && 27 | 28 | 34 | 35 | } */} 36 |
37 | ) 38 | } 39 | 40 | export default Header 41 | -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: $close-font-size + $alert-padding-x * 2; 31 | 32 | // Adjust close link position 33 | .close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | padding: $alert-padding-y $alert-padding-x; 38 | color: inherit; 39 | } 40 | } 41 | 42 | 43 | // Alternate styles 44 | // 45 | // Generate contextual modifier classes for colorizing the alert. 46 | 47 | @each $color, $value in $theme-colors { 48 | .alert-#{$color} { 49 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/components/accueil/right/notifications/NotificationSide.jsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import '../right.css' 3 | import { Link } from "react-router-dom"; 4 | import { formatDistanceToNow } from 'date-fns'; 5 | import frLocale from 'date-fns/locale/fr'; 6 | 7 | const NotificationSide = (props) => { 8 | const notif = props.notif 9 | 10 | 11 | const createdDate = new Date(notif.dateNotif); 12 | const relativeTime = formatDistanceToNow(createdDate, { locale: frLocale, addSuffix: true }); 13 | 14 | 15 | return ( 16 |
21 |
24 |

27 | {notif.poste ? "Nouveau poste" : "nouvelle évènement"} · {relativeTime} 28 |

29 |

33 | {notif.poste 34 | ? `${notif.nom} ${notif.prenom} publier un nouveau poste "${notif.poste.slice(0, 30)}..."` 35 | : `${notif.nom} ${notif.prenom} Ajouter une nouvelle évènement "${notif.event.slice(0, 30)}..."` 36 | } 37 |

38 |
39 |
40 | 41 | ); 42 | }; 43 | 44 | export default NotificationSide; 45 | -------------------------------------------------------------------------------- /src/components/calandar/ShowEventAlert.jsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import { 3 | Box, 4 | Button, 5 | Container, 6 | Dialog, 7 | DialogActions, 8 | DialogContent, 9 | DialogTitle, 10 | Typography, 11 | Skeleton, 12 | } from "@mui/material"; 13 | import GetCookie from "../../cookies/JWT/GetCookie"; 14 | import { showEvent } from "../../app/api/eventAxios"; 15 | import EventIcon from "@mui/icons-material/Event"; 16 | import DescriptionIcon from "@mui/icons-material/Description"; 17 | import GroupIcon from "@mui/icons-material/Group"; 18 | import ScheduleIcon from "@mui/icons-material/Schedule"; 19 | import EventDetails from "./EventDetails"; 20 | 21 | const ShowEventAlert = (props) => { 22 | const { open, handleClose, eventId, refetch, setRefetch } = props; 23 | 24 | return ( 25 | 30 | {"Détails de l'événement"} 31 | 32 | 38 | 39 | 40 | 41 | 42 | 43 | ); 44 | }; 45 | 46 | export default ShowEventAlert; 47 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | #container { 2 | width: 100%; 3 | background-color: white; 4 | display: flex; 5 | /* justify-content: space-between; */ 6 | } 7 | .unableNav{ 8 | display: none !important; 9 | } 10 | .no-margin{ 11 | margin: 0 !important; 12 | } 13 | #container{ 14 | color: var(--color-text) ; 15 | } 16 | .container-admin{ 17 | display: flex !important; 18 | width: 99% 19 | } 20 | .admin-content{ 21 | width: 98%; 22 | } 23 | @media (min-width: 200px) and (max-width: 499px) { 24 | #container { 25 | width: 100%; 26 | display: flex; 27 | justify-content: center; 28 | } 29 | 30 | #nav-box { 31 | position: fixed !important; 32 | bottom: 0; 33 | width: 100%; 34 | height: 3.6rem; 35 | border-radius: 1rem 1rem 0 0; 36 | 37 | } 38 | } 39 | 40 | @media screen and (min-width: 500px) and (max-width: 1005px) { 41 | #container { 42 | width: 100%; 43 | display: flex; 44 | justify-content: center; 45 | } 46 | 47 | #nav-box { 48 | width: 80%; 49 | padding-right: 1rem; 50 | justify-content: right; 51 | } 52 | } 53 | 54 | @media screen and (min-width: 1005px) and (max-width: 1281px){ 55 | #container { 56 | /* margin-left: 0% !important; */ 57 | /* border: red solid 1px; */ 58 | width: 100%; 59 | display: flex; 60 | justify-content: center; 61 | } 62 | 63 | #nav-box { 64 | /* width: 10%; */ 65 | /* margin-left: 1.2rem; */ 66 | /* justify-content: center; */ 67 | } 68 | } -------------------------------------------------------------------------------- /public/assets/scss/bootstrap/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | list-style: none; 7 | background-color: $breadcrumb-bg; 8 | @include border-radius($breadcrumb-border-radius); 9 | } 10 | 11 | .breadcrumb-item { 12 | // The separator between breadcrumbs (by default, a forward-slash: "/") 13 | + .breadcrumb-item { 14 | padding-left: $breadcrumb-item-padding; 15 | 16 | &::before { 17 | display: inline-block; // Suppress underlining of the separator in modern browsers 18 | padding-right: $breadcrumb-item-padding; 19 | color: $breadcrumb-divider-color; 20 | content: $breadcrumb-divider; 21 | } 22 | } 23 | 24 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built 25 | // without `