diff --git a/public/favicon.ico b/public/favicon.ico index 9de53fc215d7c5f6237dc683a227df9bef053ced..c065b0c2909a48cf49774d75ef8271a0c251aef3 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html index ca83182efde7e14126ee348156ff8607c9bbb9d8..dc5567c4dede5d36eec705d550c2359a286d9539 100644 --- a/public/index.html +++ b/public/index.html @@ -5,7 +5,7 @@ <link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="theme-color" content="#000000" /> - <meta name="description" content="Le backoffice de l'application Ecolyo."> + <meta name="description" content="Le backoffice de l'application Ecolyo"> <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> <!-- manifest.json provides metadata used when your web app is installed on a @@ -26,8 +26,8 @@ <meta property="og:type" content="website"> <meta property="og:title" content="Ecolyo - Agent"> <meta property="og:description" content="Le backoffice de l'application Ecolyo."> - <meta property="og:image:secure_url" content="https://ecolyo-agent.grandlyon.com/og-icon.png"> - <meta property="og:image" content="https://ecolyo-agent.grandlyon.com/og-icon.png"> + <meta property="og:image:secure_url" content="https://ecolyo-agent.apps.grandlyon.com/og-icon.png"> + <meta property="og:image" content="https://ecolyo-agent.apps.grandlyon.com/og-icon.png"> <meta property="og:image:type" content="image/png" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="627" /> diff --git a/public/logo192.png b/public/logo192.png index 62e287da17b3a66f7d9745a726e35b6b7a79de88..623cb7bf3000f3651cdf9d75b69a8dba0f03c568 100644 Binary files a/public/logo192.png and b/public/logo192.png differ diff --git a/public/logo512.png b/public/logo512.png index d94e3e561d3c694f3d7627931c16b609fed77898..d9d38304ebbc0281cc43466098cd1ebcfdad658c 100644 Binary files a/public/logo512.png and b/public/logo512.png differ diff --git a/public/manifest.json b/public/manifest.json index e83c48a43f107bf021dbe4307076d4dc439b6863..dffefa3c279a68c530f7d2431307e9d347cf160e 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,15 +1,26 @@ { - "short_name": "Ecolyo Backoffice", - "name": "Ecolyo Backoffice", + "short_name": "Ecolyo Agent", + "name": "Ecolyo Agent", "icons": [ { "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", + "sizes": "32x32", "type": "image/x-icon" + }, + { + "src": "/logo192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/logo512.png", + "sizes": "512x512", + "type": "image/png" } + ], "start_url": ".", "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" + "theme_color": "#f1c017", + "background_color": "#32343d" } diff --git a/public/og-icon.png b/public/og-icon.png index ab931e75cc8477bbcb634499d985bb490ca8a91e..3346041ee68e2b35733bec00cc1649ea79abac38 100644 Binary files a/public/og-icon.png and b/public/og-icon.png differ diff --git a/src/App.tsx b/src/App.tsx index 2495ec0a34b50573029838c2607328603cec7508..75c23b356dc176087fb1e1406470926606725bd8 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,10 +1,10 @@ import { BrowserRouter } from 'react-router-dom' -import Layout from './components/Layout/Layout' -import Routes from './components/Routes/Routes' -import { UserContext } from './hooks/userContext' import { ToastContainer } from 'react-toastify' import 'react-toastify/dist/ReactToastify.css' +import Layout from './components/Layout/Layout' +import Router from './components/Routes/Router' import useFindUser from './hooks/useFindUser' +import { UserContext } from './hooks/userContext' function App() { const { user, setUser, isLoading } = useFindUser() @@ -13,7 +13,7 @@ function App() { <BrowserRouter> <UserContext.Provider value={{ user, setUser, isLoading }}> <Layout> - <Routes /> + <Router /> </Layout> </UserContext.Provider> <ToastContainer diff --git a/src/assets/icons/ecolyo-logo.svg b/src/assets/icons/ecolyo-logo.svg index 621cc029f36519cd39cb0fe7374214cc212b1f63..19e83415180be1bbcafe5dbabd47f3ed91cd62b3 100644 --- a/src/assets/icons/ecolyo-logo.svg +++ b/src/assets/icons/ecolyo-logo.svg @@ -1,6 +1,27 @@ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> -<path d="M255.999 481.889C474.502 396.445 457.52 274.97 446.199 93.788C376.006 90.6997 313.738 69.0814 255.999 33.0508C198.26 69.0814 135.993 90.6997 65.8002 93.788C54.4788 274.97 37.4967 396.445 255.999 481.889Z" fill="#1B1C22"/> -<path d="M256 0L241.197 9.23729C187.065 43.0172 129.418 62.9075 64.5724 65.7606L39.4287 66.8668L37.8561 92.0332C37.3892 99.5066 36.9038 106.942 36.4212 114.334C31.228 193.881 26.3573 268.489 48.2119 332.782C73.408 406.904 131.859 463.456 245.82 508.019L256 512V481.887C46.0642 399.793 53.5098 284.438 64.4576 114.823C64.9043 107.901 65.3569 100.89 65.8008 93.7859C135.993 90.6976 198.261 69.0793 256 33.0487V0Z" fill="#FFC600"/> -<path d="M256 0L270.803 9.23729C324.935 43.0172 382.582 62.9075 447.428 65.7606L472.571 66.8668L474.144 92.0332C474.611 99.5066 475.096 106.942 475.579 114.334C480.772 193.881 485.643 268.489 463.788 332.782C438.592 406.904 380.141 463.456 266.18 508.019L256 512V481.887C465.936 399.793 458.49 284.438 447.542 114.823C447.096 107.901 446.643 100.89 446.199 93.7859C376.007 90.6976 313.739 69.0793 256 33.0487V0Z" fill="#DB8300"/> -<path d="M186.954 176.453H196.887C200.854 176.453 204.659 178.014 207.464 180.791C210.269 183.569 211.845 187.337 211.845 191.265V341.625H171.996V191.265C171.996 187.337 173.572 183.569 176.377 180.791C179.183 178.014 182.987 176.453 186.954 176.453ZM255.971 249.669H265.904C269.871 249.669 273.676 251.229 276.481 254.007C279.286 256.785 280.862 260.552 280.862 264.481V341.625H241.013V264.481C241.013 260.552 242.589 256.785 245.394 254.007C248.199 251.229 252.004 249.669 255.971 249.669ZM329.101 221.346H339.034C343.001 221.346 346.806 222.907 349.611 225.685C352.416 228.463 353.992 232.23 353.992 236.158V341.625H314.143V236.158C314.143 232.23 315.719 228.463 318.524 225.685C321.329 222.907 325.134 221.346 329.101 221.346Z" fill="#FFC600"/> +<path d="M247.433 497.358C252.837 499.547 259.163 499.547 264.567 497.358C486.948 407.262 477.907 281.063 465.977 96.3447C465.209 84.467 455.628 75.1121 443.798 74.0067C380.124 68.0571 322.401 47.9351 268.387 16.354C260.739 11.882 251.261 11.882 243.613 16.354C189.599 47.9351 131.876 68.0571 68.2017 74.0067C56.3718 75.1121 46.7906 84.467 46.0235 96.3447C34.093 281.063 25.0517 407.262 247.433 497.358Z" fill="url(#paint0_radial_14038_3473)"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M447.306 94.4063C453.572 191.484 457.602 264.765 435.258 325.891C413.969 384.134 366.554 435.665 256 480.846C145.446 435.665 98.0312 384.134 76.7415 325.891C54.3978 264.765 58.4281 191.484 64.6936 94.4063C134.234 87.3155 197.344 65.2446 256 31.399C314.656 65.2446 377.765 87.3155 447.306 94.4063ZM265.042 510.27C259.338 512.577 252.661 512.577 246.958 510.27C13.1695 415.722 21.7314 283.434 34.2467 90.0638L34.393 87.8034C35.2027 75.2904 45.3146 65.435 57.7996 64.2705C125.001 58.0025 185.922 36.8041 242.926 3.5334C250.998 -1.1778 261.001 -1.1778 269.074 3.5334C326.078 36.8041 386.999 58.0025 454.2 64.2705C466.685 65.435 476.797 75.2903 477.607 87.8034L477.753 90.0637C490.268 283.434 498.83 415.722 265.042 510.27Z" fill="#FFC600"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M447.306 94.4063C453.572 191.484 457.602 264.765 435.258 325.891C413.969 384.134 366.554 435.665 256 480.846C145.446 435.665 98.0312 384.134 76.7415 325.891C54.3978 264.765 58.4281 191.484 64.6936 94.4063C134.234 87.3155 197.344 65.2446 256 31.399C314.656 65.2446 377.765 87.3155 447.306 94.4063ZM265.042 510.27C259.338 512.577 252.661 512.577 246.958 510.27C13.1695 415.722 21.7314 283.434 34.2467 90.0638L34.393 87.8034C35.2027 75.2904 45.3146 65.435 57.7996 64.2705C125.001 58.0025 185.922 36.8041 242.926 3.5334C250.998 -1.1778 261.001 -1.1778 269.074 3.5334C326.078 36.8041 386.999 58.0025 454.2 64.2705C466.685 65.435 476.797 75.2903 477.607 87.8034L477.753 90.0637C490.268 283.434 498.83 415.722 265.042 510.27Z" fill="url(#paint1_linear_14038_3473)" fill-opacity="0.75"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M256.005 512C259.097 511.999 262.19 511.422 265.039 510.27C498.827 415.722 490.266 283.434 477.75 90.0639L477.604 87.8034C476.794 75.2903 466.682 65.435 454.197 64.2705C386.996 58.0025 326.076 36.8041 269.071 3.5334C265.037 1.17914 260.521 0.00134373 256.005 0V31.4035C314.659 65.2466 377.766 87.3158 447.303 94.4063C453.569 191.484 457.599 264.765 435.255 325.891C413.966 384.133 366.554 435.662 256.005 480.842V512Z" fill="#DB8300"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M256.005 512C259.097 511.999 262.19 511.422 265.039 510.27C498.827 415.722 490.266 283.434 477.75 90.0639L477.604 87.8034C476.794 75.2903 466.682 65.435 454.197 64.2705C386.996 58.0025 326.076 36.8041 269.071 3.5334C265.037 1.17914 260.521 0.00134373 256.005 0V31.4035C314.659 65.2466 377.766 87.3158 447.303 94.4063C453.569 191.484 457.599 264.765 435.255 325.891C413.966 384.133 366.554 435.662 256.005 480.842V512Z" fill="url(#paint2_linear_14038_3473)" fill-opacity="0.75"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M158 164.293C158 152.439 167.61 142.829 179.464 142.829C191.319 142.829 200.929 152.439 200.929 164.293V314.676C200.929 317.99 198.242 320.676 194.929 320.676H164C160.686 320.676 158 317.99 158 314.676V164.293ZM234.658 240.964C234.658 229.11 244.268 219.5 256.122 219.5C267.976 219.5 277.586 229.11 277.586 240.964V314.689C277.586 318.002 274.9 320.689 271.586 320.689H240.658C237.344 320.689 234.658 318.002 234.658 314.689V240.964ZM332.794 188.829C320.939 188.829 311.33 198.439 311.33 210.293V314.681C311.33 317.995 314.016 320.681 317.33 320.681H348.258C351.572 320.681 354.258 317.995 354.258 314.681V210.293C354.258 198.439 344.648 188.829 332.794 188.829Z" fill="#FFC600"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M158 164.293C158 152.439 167.61 142.829 179.464 142.829C191.319 142.829 200.929 152.439 200.929 164.293V314.676C200.929 317.99 198.242 320.676 194.929 320.676H164C160.686 320.676 158 317.99 158 314.676V164.293ZM234.658 240.964C234.658 229.11 244.268 219.5 256.122 219.5C267.976 219.5 277.586 229.11 277.586 240.964V314.689C277.586 318.002 274.9 320.689 271.586 320.689H240.658C237.344 320.689 234.658 318.002 234.658 314.689V240.964ZM332.794 188.829C320.939 188.829 311.33 198.439 311.33 210.293V314.681C311.33 317.995 314.016 320.681 317.33 320.681H348.258C351.572 320.681 354.258 317.995 354.258 314.681V210.293C354.258 198.439 344.648 188.829 332.794 188.829Z" fill="url(#paint3_linear_14038_3473)"/> +<defs> +<radialGradient id="paint0_radial_14038_3473" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(147.047 71.4497) rotate(72.6071) scale(364.484 380.718)"> +<stop stop-color="#2B2D37"/> +<stop offset="1" stop-color="#15161B"/> +</radialGradient> +<linearGradient id="paint1_linear_14038_3473" x1="246.801" y1="495.463" x2="82.7521" y2="60.0435" gradientUnits="userSpaceOnUse"> +<stop stop-color="#CB6E00"/> +<stop offset="1" stop-color="#FFC600" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint2_linear_14038_3473" x1="397.051" y1="496.996" x2="255.995" y2="27.8499" gradientUnits="userSpaceOnUse"> +<stop stop-color="#793A00"/> +<stop offset="1" stop-color="#DB8300" stop-opacity="0"/> +</linearGradient> +<linearGradient id="paint3_linear_14038_3473" x1="354.258" y1="314.556" x2="167.199" y2="142.83" gradientUnits="userSpaceOnUse"> +<stop stop-color="#DB8300"/> +<stop offset="1" stop-color="#FFC600"/> +</linearGradient> +</defs> </svg> diff --git a/src/components/Consents/DowloadModal.tsx b/src/components/Consents/DowloadModal.tsx index 4730748274479250964c0504bbb4d3d26541ab87..e5774f8d852fe868ded8f60b2459d7ec009ddc33 100644 --- a/src/components/Consents/DowloadModal.tsx +++ b/src/components/Consents/DowloadModal.tsx @@ -1,6 +1,6 @@ import React from 'react' -import Modal from '../Modal/Modal' import dowloadIcon from '../../assets/icons/ico-download.svg' +import Modal from '../Newsletter/Modal/Modal' import styles from './DownloadModal.module.scss' interface DowloadModalProps { diff --git a/src/components/Layout/Layout.tsx b/src/components/Layout/Layout.tsx index 440e00c2e43f574869bf7b6311361cab24bbd4b1..56c36435a30b2940c7a3b97478277010c8bd2ebe 100644 --- a/src/components/Layout/Layout.tsx +++ b/src/components/Layout/Layout.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react' +import BottomBar from '../Navigation/BottomBar' +import SideBar from '../Navigation/SideBar' import styles from './layout.module.scss' -import Menu from '../Menu/Menu' -import Navbar from '../Navbar/Navbar' interface LayoutProps { children: React.ReactNode @@ -30,11 +30,11 @@ const Layout: React.FC<LayoutProps> = ({ children }: LayoutProps) => { <div className={styles.root}> {!isMobile ? ( <div className={styles.menuWrapper}> - <Menu /> + <SideBar /> </div> ) : ( <div className={styles.mobileNavWrapper}> - <Navbar /> + <BottomBar /> </div> )} <div className={styles.wrapper}> diff --git a/src/components/Navbar/Navbar.tsx b/src/components/Navigation/BottomBar.tsx similarity index 75% rename from src/components/Navbar/Navbar.tsx rename to src/components/Navigation/BottomBar.tsx index 209515a3fd64206879f56f37614f7689997c5065..ec7cf5f4a1453c04eb1c32f8898fad4b5e476ab0 100644 --- a/src/components/Navbar/Navbar.tsx +++ b/src/components/Navigation/BottomBar.tsx @@ -1,19 +1,18 @@ import React, { useContext } from 'react' import { NavLink } from 'react-router-dom' -import routes from '../../constants/routes.json' import { useAuth } from '../../hooks/useAuth' import { UserContext } from '../../hooks/userContext' -import { Route } from '../../models/route.model' -import './navbar.scss' +import { routes } from '../Routes/Router' +import './bottombar.scss' -const Navbar: React.FC = () => { +const BottomBar: React.FC = () => { const { user } = useContext(UserContext) const { logoutUser } = useAuth() return ( <div className="navbar"> <div className="menu-list"> - {routes.map((route: Route) => ( + {routes.map((route) => ( <NavLink key={route.label} to={route.path} activeClassName="active"> {route.label} </NavLink> @@ -33,4 +32,4 @@ const Navbar: React.FC = () => { ) } -export default Navbar +export default BottomBar diff --git a/src/components/Menu/Menu.tsx b/src/components/Navigation/SideBar.tsx similarity index 81% rename from src/components/Menu/Menu.tsx rename to src/components/Navigation/SideBar.tsx index 486a779d7bc4e0b731766cfd5503f58b7ee53174..c134495a62ab80f1984b733c8407a6b97c0526be 100644 --- a/src/components/Menu/Menu.tsx +++ b/src/components/Navigation/SideBar.tsx @@ -1,13 +1,12 @@ import React, { useContext } from 'react' -import routes from '../../constants/routes.json' -import logo from '../../assets/icons/ecolyo-logo.svg' -import './menu.scss' import { NavLink } from 'react-router-dom' -import { UserContext } from '../../hooks/userContext' +import logo from '../../assets/icons/ecolyo-logo.svg' import { useAuth } from '../../hooks/useAuth' -import { Route } from '../../models/route.model' +import { UserContext } from '../../hooks/userContext' +import { routes } from '../Routes/Router' +import './sidebar.scss' -const Menu: React.FC = () => { +const SideBar: React.FC = () => { const { user } = useContext(UserContext) const { logoutUser } = useAuth() @@ -17,7 +16,7 @@ const Menu: React.FC = () => { <img src={logo} alt="Ecolyo logo" className="logo" /> </div> <div className="menu-list"> - {routes.map((route: Route) => ( + {routes.map((route) => ( <NavLink key={route.label} to={route.path} activeClassName="active"> {route.label} </NavLink> @@ -43,4 +42,4 @@ const Menu: React.FC = () => { ) } -export default Menu +export default SideBar diff --git a/src/components/Navbar/navbar.scss b/src/components/Navigation/bottombar.scss similarity index 100% rename from src/components/Navbar/navbar.scss rename to src/components/Navigation/bottombar.scss diff --git a/src/components/Menu/menu.scss b/src/components/Navigation/sidebar.scss similarity index 100% rename from src/components/Menu/menu.scss rename to src/components/Navigation/sidebar.scss diff --git a/src/components/Editing/CustomEditor.tsx b/src/components/Newsletter/CustomEditor.tsx similarity index 100% rename from src/components/Editing/CustomEditor.tsx rename to src/components/Newsletter/CustomEditor.tsx diff --git a/src/components/Editing/CustomLink.tsx b/src/components/Newsletter/CustomLink.tsx similarity index 100% rename from src/components/Editing/CustomLink.tsx rename to src/components/Newsletter/CustomLink.tsx diff --git a/src/components/DateSelector/DateSelector.tsx b/src/components/Newsletter/DateSelector/DateSelector.tsx similarity index 94% rename from src/components/DateSelector/DateSelector.tsx rename to src/components/Newsletter/DateSelector/DateSelector.tsx index 0b501077fc401d01037d32c650ea37309fd3c3da..d872dd6434d19652d45844105e7ab5201c8dbd26 100644 --- a/src/components/DateSelector/DateSelector.tsx +++ b/src/components/Newsletter/DateSelector/DateSelector.tsx @@ -1,8 +1,8 @@ import React, { useState } from 'react' -import './dateSelector.scss' -import leftChevron from '../../assets/icons/left-chevron.svg' -import rightChevron from '../../assets/icons/right-chevron.svg' +import leftChevron from '../../../assets/icons/left-chevron.svg' +import rightChevron from '../../../assets/icons/right-chevron.svg' import Modal from '../Modal/Modal' +import './dateSelector.scss' interface DateSelectorProps { date: Date diff --git a/src/components/DateSelector/dateSelector.scss b/src/components/Newsletter/DateSelector/dateSelector.scss similarity index 86% rename from src/components/DateSelector/dateSelector.scss rename to src/components/Newsletter/DateSelector/dateSelector.scss index 5d079413075a9e6fbacf55fc964571cb02b1baca..cb2a92c023ff94fb33b4dad892a1cb2d26f7ae5a 100644 --- a/src/components/DateSelector/dateSelector.scss +++ b/src/components/Newsletter/DateSelector/dateSelector.scss @@ -1,6 +1,7 @@ -@import '../../styles/config/colors'; -@import '../../styles/config/typography'; -@import '../../styles/config/breakpoints'; +@import 'src/styles/config/colors'; +@import 'src/styles/config/typography'; +@import 'src/styles/config/breakpoints'; + .date-selector { display: flex; align-items: center; diff --git a/src/components/ImagePicker/ImagePicker.tsx b/src/components/Newsletter/ImagePicker/ImagePicker.tsx similarity index 94% rename from src/components/ImagePicker/ImagePicker.tsx rename to src/components/Newsletter/ImagePicker/ImagePicker.tsx index 705b2dcd48869ec84a8a00d1e5322e03b73f68e0..2e7efab07c434c6420e006767ed27560f782295e 100644 --- a/src/components/ImagePicker/ImagePicker.tsx +++ b/src/components/Newsletter/ImagePicker/ImagePicker.tsx @@ -1,10 +1,10 @@ +import Pagination from '@material-ui/lab/Pagination' import React, { useContext, useEffect, useState } from 'react' -import { NewsletterService } from '../../services/newsletter.service' +import { getAxiosXSRFHeader } from '../../../axios.config' +import { UserContext, UserContextProps } from '../../../hooks/userContext' +import { NewsletterService } from '../../../services/newsletter.service' import Modal from '../Modal/Modal' -import Pagination from '@material-ui/lab/Pagination' import SingleImage from './SingleImage' -import { UserContext, UserContextProps } from '../../hooks/userContext' -import { getAxiosXSRFHeader } from '../../axios.config' interface ImagePickerProps { imageURL: string diff --git a/src/components/ImagePicker/SingleImage.tsx b/src/components/Newsletter/ImagePicker/SingleImage.tsx similarity index 100% rename from src/components/ImagePicker/SingleImage.tsx rename to src/components/Newsletter/ImagePicker/SingleImage.tsx diff --git a/src/components/ImagePicker/imagePicker.scss b/src/components/Newsletter/ImagePicker/imagePicker.scss similarity index 85% rename from src/components/ImagePicker/imagePicker.scss rename to src/components/Newsletter/ImagePicker/imagePicker.scss index 249a99175ee8f037e6ea5cc5732257f2394792fd..d831ef10abcede991f3b82fb6104ee87d8e43a91 100644 --- a/src/components/ImagePicker/imagePicker.scss +++ b/src/components/Newsletter/ImagePicker/imagePicker.scss @@ -1,5 +1,5 @@ -@import '../../styles/config/colors'; -@import '../../styles/config/breakpoints'; +@import '../../../styles/config/colors'; +@import '../../../styles/config/breakpoints'; .image-picker { display: flex; diff --git a/src/components/MailSuject/mailSubject.scss b/src/components/Newsletter/MailSuject/mailSubject.scss similarity index 100% rename from src/components/MailSuject/mailSubject.scss rename to src/components/Newsletter/MailSuject/mailSubject.scss diff --git a/src/components/MailSuject/mailSubject.tsx b/src/components/Newsletter/MailSuject/mailSubject.tsx similarity index 94% rename from src/components/MailSuject/mailSubject.tsx rename to src/components/Newsletter/MailSuject/mailSubject.tsx index b60ee97ef69741f77e55c9e27b07dc896ad9b9a1..1b3374b251ec7d0e88ddad851c2e13cfc619f023 100644 --- a/src/components/MailSuject/mailSubject.tsx +++ b/src/components/Newsletter/MailSuject/mailSubject.tsx @@ -1,5 +1,5 @@ import React, { ChangeEvent } from 'react' -import { ContentItems } from '../Editing/Editing' +import { ContentItems } from '../Newsletter' import './mailSubject.scss' interface MailSubjectProps { @@ -18,7 +18,7 @@ const MailSubject: React.FC<MailSubjectProps> = ({ subject, handleChange, onDelete, -}: MailSubjectProps) => { +}) => { const handleChangeSubject = (e: ChangeEvent<HTMLInputElement>) => { handleChange(e.target.value, 'subject') } diff --git a/src/components/Modal/Modal.tsx b/src/components/Newsletter/Modal/Modal.tsx similarity index 83% rename from src/components/Modal/Modal.tsx rename to src/components/Newsletter/Modal/Modal.tsx index 7d7c146bfb054b64e141bb9487b150380f4c240a..c8ca2b97fadf34b7e4e6d77fc63bfcfa2cda4a84 100644 --- a/src/components/Modal/Modal.tsx +++ b/src/components/Newsletter/Modal/Modal.tsx @@ -6,7 +6,7 @@ interface ModalProps { classname?: string } -const Modal: React.FC<ModalProps> = ({ children, classname }: ModalProps) => { +const Modal: React.FC<ModalProps> = ({ children, classname }) => { return createPortal( <div className="modal-bg"> <div className="modal-container"> diff --git a/src/components/Modal/modal.scss b/src/components/Newsletter/Modal/modal.scss similarity index 94% rename from src/components/Modal/modal.scss rename to src/components/Newsletter/Modal/modal.scss index 1f479756c148175eeae7a188bd25af2a36c4ca0f..ae25cc96eb55815b1d094116dc26bd758602b687 100644 --- a/src/components/Modal/modal.scss +++ b/src/components/Newsletter/Modal/modal.scss @@ -1,4 +1,4 @@ -@import '../../styles/config/colors'; +@import '../../../styles/config/colors'; .modal-bg { background-color: rgba(27, 28, 34, 0.85); diff --git a/src/components/MonthlyInfo/MonthlyInfo.tsx b/src/components/Newsletter/MonthlyInfo/MonthlyInfo.tsx similarity index 87% rename from src/components/MonthlyInfo/MonthlyInfo.tsx rename to src/components/Newsletter/MonthlyInfo/MonthlyInfo.tsx index c28c461fb2d95ace4a25d258b1df035b46c8af89..18647cebc317f57ff573a4de833b17c7849b8038 100644 --- a/src/components/MonthlyInfo/MonthlyInfo.tsx +++ b/src/components/Newsletter/MonthlyInfo/MonthlyInfo.tsx @@ -1,10 +1,10 @@ import React from 'react' -import { ContentItems } from '../Editing/Editing' -import { convertStringToEditorState } from '../../utils/editorStateManagment' -import CustomEditor from '../Editing/CustomEditor' import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' -import './monthlyInfo.scss' +import { convertStringToEditorState } from '../../../utils/editorStateManagment' +import CustomEditor from '../CustomEditor' import ImagePicker from '../ImagePicker/ImagePicker' +import { ContentItems } from '../Newsletter' +import './monthlyInfo.scss' interface MonthlyInfoProps { onSave: () => Promise<void> onCancel: () => void @@ -30,7 +30,7 @@ const MonthlyInfo: React.FC<MonthlyInfoProps> = ({ handleChange, onDelete, imageURL, -}: MonthlyInfoProps) => { +}) => { return ( <div className="monthlyInfo"> <h2>Informations du mois (Optionnel)</h2> diff --git a/src/components/MonthlyInfo/monthlyInfo.scss b/src/components/Newsletter/MonthlyInfo/monthlyInfo.scss similarity index 100% rename from src/components/MonthlyInfo/monthlyInfo.scss rename to src/components/Newsletter/MonthlyInfo/monthlyInfo.scss diff --git a/src/components/MonthlyNews/MonthlyNews.tsx b/src/components/Newsletter/MonthlyNews/MonthlyNews.tsx similarity index 88% rename from src/components/MonthlyNews/MonthlyNews.tsx rename to src/components/Newsletter/MonthlyNews/MonthlyNews.tsx index 7699c52314d3bdcca1aa2ebf3053588b0becd6c5..0926e7a7b40c4784b9e9e805b35128407a81f1a3 100644 --- a/src/components/MonthlyNews/MonthlyNews.tsx +++ b/src/components/Newsletter/MonthlyNews/MonthlyNews.tsx @@ -1,8 +1,8 @@ import React, { ChangeEvent } from 'react' -import { ContentItems } from '../Editing/Editing' -import { convertStringToEditorState } from '../../utils/editorStateManagment' -import CustomEditor from '../Editing/CustomEditor' import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' +import { convertStringToEditorState } from '../../../utils/editorStateManagment' +import CustomEditor from '../CustomEditor' +import { ContentItems } from '../Newsletter' import './monthlyNews.scss' interface MonthlyNewsProps { @@ -23,7 +23,7 @@ const MonthlyNews: React.FC<MonthlyNewsProps> = ({ content, handleChange, onDelete, -}: MonthlyNewsProps) => { +}) => { const handleChangeTitle = (e: ChangeEvent<HTMLInputElement>) => { handleChange(e.target.value, 'title') } diff --git a/src/components/MonthlyNews/monthlyNews.scss b/src/components/Newsletter/MonthlyNews/monthlyNews.scss similarity index 100% rename from src/components/MonthlyNews/monthlyNews.scss rename to src/components/Newsletter/MonthlyNews/monthlyNews.scss diff --git a/src/components/Editing/Editing.tsx b/src/components/Newsletter/Newsletter.tsx similarity index 95% rename from src/components/Editing/Editing.tsx rename to src/components/Newsletter/Newsletter.tsx index 12e9537931e334fe9d9eb711ec8a3655725b9c31..36db58337e11101feaa12b26fe54cd4634ff9deb 100644 --- a/src/components/Editing/Editing.tsx +++ b/src/components/Newsletter/Newsletter.tsx @@ -5,21 +5,21 @@ import React, { useMemo, useState, } from 'react' -import DateSelector from '../DateSelector/DateSelector' -import { NewsletterService } from '../../services/newsletter.service' +import { getAxiosXSRFHeader } from '../../axios.config' import { UserContext, UserContextProps } from '../../hooks/userContext' -import { IMonthlyNews } from '../../models/monthlyNews.model' +import { IMailSubject } from '../../models/mailSubject.model' import { IMonthlyInfo } from '../../models/monthlyInfo.model' +import { IMonthlyNews } from '../../models/monthlyNews.model' import { IPoll } from '../../models/poll.model' -import { IMailSubject } from '../../models/mailSubject.model' -import MailSubject from '../MailSuject/mailSubject' -import Poll from '../Poll/Poll' -import MonthlyInfo from '../MonthlyInfo/MonthlyInfo' -import MonthlyNews from '../MonthlyNews/MonthlyNews' +import { NewsletterService } from '../../services/newsletter.service' import Loader from '../Loader/Loader' -import Modal from '../Modal/Modal' -import './editing.scss' -import { getAxiosXSRFHeader } from '../../axios.config' +import DateSelector from './DateSelector/DateSelector' +import MailSubject from './MailSuject/mailSubject' +import Modal from './Modal/Modal' +import MonthlyInfo from './MonthlyInfo/MonthlyInfo' +import MonthlyNews from './MonthlyNews/MonthlyNews' +import Poll from './Poll/Poll' +import './newsletter.scss' export type ContentItems = | 'monthlyInfo' @@ -28,8 +28,8 @@ export type ContentItems = | 'subject' | '' -const Editing: React.FC = () => { - // Fonctional rule : +const Newsletter: React.FC = () => { + // Functional rule : // Display next month after the 3rd of the current month const getCurrentNewsletterDate = (): Date => { const newsletterDate = new Date() @@ -354,4 +354,4 @@ const Editing: React.FC = () => { ) } -export default Editing +export default Newsletter diff --git a/src/components/Poll/Poll.tsx b/src/components/Newsletter/Poll/Poll.tsx similarity index 86% rename from src/components/Poll/Poll.tsx rename to src/components/Newsletter/Poll/Poll.tsx index d8df0bf0c6c08b4386cb788674e16cc5b043dc2d..2db7ebdcb43e2cb38203ded17888e195149e26a2 100644 --- a/src/components/Poll/Poll.tsx +++ b/src/components/Newsletter/Poll/Poll.tsx @@ -1,8 +1,8 @@ import React, { ChangeEvent } from 'react' -import { ContentItems } from '../Editing/Editing' -import CustomEditor from '../Editing/CustomEditor' -import { convertStringToEditorState } from '../../utils/editorStateManagment' import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css' +import { convertStringToEditorState } from '../../../utils/editorStateManagment' +import CustomEditor from '../CustomEditor' +import { ContentItems } from '../Newsletter' import './poll.scss' interface PollProps { diff --git a/src/components/Poll/poll.scss b/src/components/Newsletter/Poll/poll.scss similarity index 100% rename from src/components/Poll/poll.scss rename to src/components/Newsletter/Poll/poll.scss diff --git a/src/components/Editing/customEditor.scss b/src/components/Newsletter/customEditor.scss similarity index 100% rename from src/components/Editing/customEditor.scss rename to src/components/Newsletter/customEditor.scss diff --git a/src/components/Editing/editing.scss b/src/components/Newsletter/newsletter.scss similarity index 100% rename from src/components/Editing/editing.scss rename to src/components/Newsletter/newsletter.scss diff --git a/src/components/Settings/Settings.tsx b/src/components/Popups/Popups.tsx similarity index 99% rename from src/components/Settings/Settings.tsx rename to src/components/Popups/Popups.tsx index 91101a3fda14c0b8f34c104aff09b6a23949d8c5..24628c28a8faef517f1a7f57d53ca5e9b6a4b79d 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Popups/Popups.tsx @@ -6,15 +6,15 @@ import { CheckboxType } from '../../enum/checkboxType.enum' import { UserContext, UserContextProps } from '../../hooks/userContext' import { ICustomPopup, PopupDuration } from '../../models/cutomPopup.model' import { + Option, durationEnum, durationType, - Option, } from '../../models/durationOptios.model' import { IPartnersInfo } from '../../models/partnersInfo.model' import { CustomPopupService } from '../../services/customPopup.service' import { PartnersInfoService } from '../../services/partnersInfo.service' import Loader from '../Loader/Loader' -import './settings.scss' +import './popups.scss' const OPTIONS: Array<Option> = [ { @@ -31,7 +31,7 @@ const OPTIONS: Array<Option> = [ }, ] -const Settings: React.FC = () => { +const Popups: React.FC = () => { const [refreshData, setRefreshData] = useState(false) const [isLoading, setIsLoading] = useState(false) const [partnersInfo, setPartnersInfo] = useState<IPartnersInfo>({ @@ -231,7 +231,7 @@ const Settings: React.FC = () => { <p className="title pagetitle">Paramètres de l'appli</p> </div> - <div className="content settings"> + <div className="content popups"> {isLoading && <Loader />} {!isLoading && ( <> @@ -403,4 +403,4 @@ const Settings: React.FC = () => { ) } -export default Settings +export default Popups diff --git a/src/components/Settings/settings.scss b/src/components/Popups/popups.scss similarity index 99% rename from src/components/Settings/settings.scss rename to src/components/Popups/popups.scss index 9510c5271563b028768526719676a20c87494208..332a9617ba97107b70bbfc712a67c3e6cf9b0f62 100644 --- a/src/components/Settings/settings.scss +++ b/src/components/Popups/popups.scss @@ -1,6 +1,6 @@ @import '../../styles/config/colors'; -.settings { +.popups { .disabled { opacity: 0.5; } diff --git a/src/components/Routes/PrivateRoute.tsx b/src/components/Routes/PrivateRoute.tsx deleted file mode 100644 index 0f2fc3e428fdbef04645a0e0bf673c81528ff8ac..0000000000000000000000000000000000000000 --- a/src/components/Routes/PrivateRoute.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React, { useContext } from 'react' -import { Route, Redirect } from 'react-router-dom' -import { UserContext } from '../../hooks/userContext' - -interface PrivateRouteProps { - component: React.FC - path: string - exact: boolean -} - -const PrivateRoute: React.FC<PrivateRouteProps> = ({ - component, - path, - exact, -}: PrivateRouteProps) => { - const { user } = useContext(UserContext) - - return user ? ( - <Route path={path} exact={exact} component={component} /> - ) : ( - <Redirect to="/login" /> - ) -} -export default PrivateRoute diff --git a/src/components/Routes/Router.tsx b/src/components/Routes/Router.tsx new file mode 100644 index 0000000000000000000000000000000000000000..c48694e54b6f2ffb7e6165f2bd7ef621789aec16 --- /dev/null +++ b/src/components/Routes/Router.tsx @@ -0,0 +1,58 @@ +import React, { useContext } from 'react' +import { Redirect, Route, Switch } from 'react-router-dom' +import { UserContext } from '../../hooks/userContext' +import Consents from '../Consents/Consents' +import Login from '../Login/Login' +import Newsletter from '../Newsletter/Newsletter' +import Popups from '../Popups/Popups' +import Prices from '../Prices/Prices' + +export const links: { [key: string]: { label: string; path: string } } = { + newsletter: { + label: 'Newsletter', + path: '/newsletter', + }, + popups: { + label: 'Pop-ups', + path: '/popups', + }, + prices: { + label: 'Prix', + path: '/prices', + }, + consents: { + label: 'Consentements', + path: '/consents', + }, +} + +export const routes = Object.keys(links).map((key) => ({ + label: links[key].label, + path: links[key].path, +})) + +const Router: React.FC = () => { + const { user } = useContext(UserContext) + console.log(user) + + return ( + <Switch> + {user ? ( + <> + <Route exact path={links.newsletter.path} component={Newsletter} /> + <Route exact path={links.prices.path} component={Prices} /> + <Route exact path={links.popups.path} component={Popups} /> + <Route exact path={links.consents.path} component={Consents} /> + <Redirect path="*" to={links.newsletter.path} /> + </> + ) : ( + <> + <Route path="/login" component={Login} /> + <Redirect path="*" to="/login" /> + </> + )} + </Switch> + ) +} + +export default Router diff --git a/src/components/Routes/Routes.tsx b/src/components/Routes/Routes.tsx deleted file mode 100644 index 9e022e2e1f8c83a69de6a5624d7657f32b20db33..0000000000000000000000000000000000000000 --- a/src/components/Routes/Routes.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React, { useContext } from 'react' -import { Redirect, Route, Switch } from 'react-router-dom' -import { UserContext } from '../../hooks/userContext' -import Consents from '../Consents/Consents' -import Editing from '../Editing/Editing' -import Login from '../Login/Login' -import Prices from '../Prices/Prices' -import Settings from '../Settings/Settings' -import PrivateRoute from './PrivateRoute' - -const Routes: React.FC = () => { - const { user } = useContext(UserContext) - - return ( - <Switch> - {user && <Redirect path="/login" to="/editing" />} - <Route path="/login" component={Login} /> - <PrivateRoute exact path="/editing" component={Editing} /> - <PrivateRoute exact path="/prices" component={Prices} /> - <PrivateRoute exact path="/settings" component={Settings} /> - <PrivateRoute exact path="/consents" component={Consents} /> - <Redirect path="*" to="/editing" /> - </Switch> - ) -} - -export default Routes diff --git a/src/constants/routes.json b/src/constants/routes.json deleted file mode 100644 index edb9f99927426d2b57ab70ebd8d3246c72a2fb22..0000000000000000000000000000000000000000 --- a/src/constants/routes.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "label": "Consentements", - "path": "/consents" - }, - { - "label": "Edition", - "path": "/editing" - }, - { - "label": "Paramètres", - "path": "/settings" - }, - { - "label": "Prix", - "path": "/prices" - } -] diff --git a/src/hooks/useAuth.ts b/src/hooks/useAuth.ts index 11b8270e147023a64af9b8263014d2acdaf7a2ff..f7df8af3276d2ca619b6fa2c7558704bd5122570 100644 --- a/src/hooks/useAuth.ts +++ b/src/hooks/useAuth.ts @@ -2,6 +2,7 @@ import { useContext, useState } from 'react' import axios from 'axios' import { UserContext } from './userContext' import { useHistory } from 'react-router-dom' +import { links } from '../components/Routes/Router' export interface Auth { loginUser: () => Promise<void> @@ -38,7 +39,7 @@ export const useAuth = (): Auth => { const { data } = await axios.get(`/api/common/WhoAmI`) if (data && setUser) { setUser(data) - history.push('/editing') + history.push(links.newsletter.path) } } catch (e) { setError(e) diff --git a/src/models/route.model.ts b/src/models/route.model.ts deleted file mode 100644 index 116f14c77ce207f187cf2d5eeab39152c04ee74d..0000000000000000000000000000000000000000 --- a/src/models/route.model.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface Route { - label: string - path: string -} - -export interface Routes extends Array<Route> {}