From 6b02139dea5a0bb27fb709b2e30b0a552c7191d8 Mon Sep 17 00:00:00 2001 From: Yoan VALLET <ext.sopra.yvallet@grandlyon.com> Date: Mon, 29 Jun 2020 18:51:39 +0200 Subject: [PATCH] feat: implement feedbacks modal logic --- .../ContainerComponents/CozyBar/CozyBar.tsx | 8 +++++-- .../Feedbacks/Feedbacks.tsx | 20 ++++++++++++++++ .../ContainerComponents/Header/Header.tsx | 8 +++++-- .../ViewContainer/ViewContainer.tsx | 2 ++ .../FeedbacksModal/FeedbacksModal.tsx | 23 +++++++++++++++++++ .../Contexts/AppContextProvider.tsx | 7 ++++++ 6 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 src/components/ContainerComponents/Feedbacks/Feedbacks.tsx create mode 100644 src/components/ContentComponents/FeedbacksModal/FeedbacksModal.tsx diff --git a/src/components/ContainerComponents/CozyBar/CozyBar.tsx b/src/components/ContainerComponents/CozyBar/CozyBar.tsx index c9232c0a6..0a455f242 100644 --- a/src/components/ContainerComponents/CozyBar/CozyBar.tsx +++ b/src/components/ContainerComponents/CozyBar/CozyBar.tsx @@ -19,12 +19,16 @@ const CozyBar = ({ t, }: CozyBarProps) => { const { BarLeft, BarCenter, BarRight } = cozy.bar - const { screenType } = useContext(AppContext) + const { screenType, setFeedbacksOpened } = useContext(AppContext) const handleClickBack = () => { history.goBack() } + const handleClickFeedbacks = () => { + setFeedbacksOpened(true) + } + const cozyBarCustom = (screen?: ScreenType) => { if (screen === ScreenType.MOBILE) { return ( @@ -48,7 +52,7 @@ const CozyBar = ({ className="cv-button" icon={FeedbacksIcon} size={40} - onClick={() => handleClickBack()} + onClick={() => handleClickFeedbacks()} /> </BarRight> </React.Fragment> diff --git a/src/components/ContainerComponents/Feedbacks/Feedbacks.tsx b/src/components/ContainerComponents/Feedbacks/Feedbacks.tsx new file mode 100644 index 000000000..83075762f --- /dev/null +++ b/src/components/ContainerComponents/Feedbacks/Feedbacks.tsx @@ -0,0 +1,20 @@ +import React, { useContext } from 'react' +import { AppContext } from 'components/Contexts/AppContextProvider' +import FeedbacksModal from 'components/ContentComponents/FeedbacksModal/FeedbacksModal' + +const Feedbacks: React.FC = () => { + const { feedbacksIsOpened, setFeedbacksOpened } = useContext(AppContext) + + const handleCloseClick = () => { + setFeedbacksOpened(false) + } + + return ( + <FeedbacksModal + opened={feedbacksIsOpened} + handleCloseClick={handleCloseClick} + /> + ) +} + +export default Feedbacks diff --git a/src/components/ContainerComponents/Header/Header.tsx b/src/components/ContainerComponents/Header/Header.tsx index cad87eb16..5d342bd66 100644 --- a/src/components/ContainerComponents/Header/Header.tsx +++ b/src/components/ContainerComponents/Header/Header.tsx @@ -28,7 +28,7 @@ const Header: React.FC<HeaderProps> = ({ t, }: HeaderProps) => { const header = useRef(null) - const { screenType } = useContext(AppContext) + const { screenType, setFeedbacksOpened } = useContext(AppContext) const cozyBarHeight = 48 const headerBottomHeight = 8 @@ -36,6 +36,10 @@ const Header: React.FC<HeaderProps> = ({ history.goBack() } + const handleClickFeedbacks = () => { + setFeedbacksOpened(true) + } + useEffect(() => { if (screenType === ScreenType.MOBILE) { setHeaderHeight( @@ -88,7 +92,7 @@ const Header: React.FC<HeaderProps> = ({ className="header-feedbacks-button" icon={FeedbacksIcon} size={40} - onClick={() => handleClickBack()} + onClick={() => handleClickFeedbacks()} /> </div> {children} diff --git a/src/components/ContainerComponents/ViewContainer/ViewContainer.tsx b/src/components/ContainerComponents/ViewContainer/ViewContainer.tsx index 500f05b0f..9f0704db9 100644 --- a/src/components/ContainerComponents/ViewContainer/ViewContainer.tsx +++ b/src/components/ContainerComponents/ViewContainer/ViewContainer.tsx @@ -19,6 +19,7 @@ import LockedChallengeDetailsViewContainer from './LockedChallengeDetailsViewCon import AvailableChallengeDetailsViewContainer from './AvailableChallengeDetailsViewContainer' import SplashContainer from 'components/ContainerComponents/SplashContainer/SplashContainer' import LegalNoticeViewContainer from './LegalNoticeViewContainer' +import Feedbacks from 'components/ContainerComponents/Feedbacks/Feedbacks' export const history = createBrowserHistory() @@ -29,6 +30,7 @@ export const ViewContainer = () => { <AppContextProvider> <Navbar /> <Main> + <Feedbacks /> <Content className="app-content"> <ScrollToTop> <Switch> diff --git a/src/components/ContentComponents/FeedbacksModal/FeedbacksModal.tsx b/src/components/ContentComponents/FeedbacksModal/FeedbacksModal.tsx new file mode 100644 index 000000000..46bc1c2a6 --- /dev/null +++ b/src/components/ContentComponents/FeedbacksModal/FeedbacksModal.tsx @@ -0,0 +1,23 @@ +import React from 'react' +import { translate } from 'cozy-ui/react/I18n' +import Modal from 'components/CommonKit/Modal/Modal' + +interface FeedbacksModalProps { + opened: boolean + t: Function + handleCloseClick: () => void +} + +const FeedbacksModal: React.FC<FeedbacksModalProps> = ({ + opened, + t, + handleCloseClick, +}: FeedbacksModalProps) => { + return ( + <Modal open={opened} handleCloseClick={handleCloseClick}> + <div>TEST</div> + </Modal> + ) +} + +export default translate()(FeedbacksModal) diff --git a/src/components/Contexts/AppContextProvider.tsx b/src/components/Contexts/AppContextProvider.tsx index 55efeda0c..45ea66fca 100644 --- a/src/components/Contexts/AppContextProvider.tsx +++ b/src/components/Contexts/AppContextProvider.tsx @@ -31,6 +31,8 @@ interface AppContextProps { setWelcomeModalViewed: Function chartIsLoaded: boolean setChartIsLoaded: Function + feedbacksIsOpened: boolean + setFeedbacksOpened: Function } export const AppContext = React.createContext<AppContextProps>({ @@ -56,6 +58,8 @@ export const AppContext = React.createContext<AppContextProps>({ setWelcomeModalViewed: () => null, chartIsLoaded: false, setChartIsLoaded: () => null, + feedbacksIsOpened: false, + setFeedbacksOpened: () => null, }) interface AppContextProviderProps { @@ -68,6 +72,7 @@ const AppContextProvider: React.FC<AppContextProviderProps> = ({ client, }: AppContextProviderProps) => { const [chartIsLoaded, setChartIsLoaded] = useState<boolean>(false) + const [feedbacksIsOpened, setFeedbacksOpened] = useState<boolean>(false) const [isIndexesLoading, setIndexesLoading] = useState<boolean>(false) const [isIndexesLoadingSuccess, setIndexesLoadingSuccess] = useState< boolean | null @@ -325,6 +330,8 @@ const AppContextProvider: React.FC<AppContextProviderProps> = ({ setWelcomeModalViewed, setChartIsLoaded, chartIsLoaded, + feedbacksIsOpened, + setFeedbacksOpened, }} > {children} -- GitLab