From 95f4196a982510f76edb266ed9a3735942e93445 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 28 Jan 2020 17:33:44 -0300 Subject: [PATCH 01/29] trabalhando no esqueleto da pagina de usuario --- src/Components/IllegalContentModal.js | 2 +- src/Components/LoginModal.js | 6 +- src/Components/MenuBar.js | 2 +- src/Components/SignUpModal.js | 2 +- src/Pages/UserPage.js | 189 ++++++++++++++++++++++++-- src/Store.js | 11 +- 6 files changed, 186 insertions(+), 26 deletions(-) diff --git a/src/Components/IllegalContentModal.js b/src/Components/IllegalContentModal.js index f623587a..7b2060f5 100644 --- a/src/Components/IllegalContentModal.js +++ b/src/Components/IllegalContentModal.js @@ -112,7 +112,7 @@ export default function IllegalContentModal (props) { <Fade in={props.open}> <StyledDivContainer > <StyledDivContent> - <StyledH2>{state.loginInfo.username}!</StyledH2> + <StyledH2>{state.currentUser.username}!</StyledH2> <div> <StyledParagraph>Seu recurso não está de acordo com os termos</StyledParagraph> </div> diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js index 1652dc66..17540183 100644 --- a/src/Components/LoginModal.js +++ b/src/Components/LoginModal.js @@ -20,7 +20,7 @@ import React, {useContext} from 'react'; import { Button } from '@material-ui/core'; import Modal from '@material-ui/core/Modal'; import Backdrop from '@material-ui/core/Backdrop'; -import Fade from '@material-ui/core/Fade'; +import Zoom from '@material-ui/core/Fade'; import styled from 'styled-components' import LoginContainer from './LoginContainer' import {Store} from '../Store.js' @@ -82,12 +82,12 @@ export default function LoginModal (props){ timeout: 500, }} > - <Fade in={props.open}> + <Zoom in={props.open} style={{ transitionDelay :"0.4ms"}}> <LoginContainer handleClose={props.handleClose} openSignUp={props.openSignUp} handleLoginInfo={handleLoginInfo} /> - </Fade> + </Zoom> </StyledLogin> ) } diff --git a/src/Components/MenuBar.js b/src/Components/MenuBar.js index d2ba1f46..f7c90fb5 100644 --- a/src/Components/MenuBar.js +++ b/src/Components/MenuBar.js @@ -107,7 +107,7 @@ export default function MenuBar(props){ ] const minhaArea = [ - { name: "Perfil e Atividades", href: "/perfil/atualizacoes"}, + { name: "Perfil e Atividades", href: "/perfil-atualizacoes"}, { name: "Recursos Publicados", href: "/perfil/recursos-publicados"}, { name: "Favoritos", href: "/perfil/favoritos"}, { name: "Coleções", href: "/perfil/colecoes"}, diff --git a/src/Components/SignUpModal.js b/src/Components/SignUpModal.js index c25758f4..5300aab6 100644 --- a/src/Components/SignUpModal.js +++ b/src/Components/SignUpModal.js @@ -90,7 +90,7 @@ export default function SignUpModal (props) { ) } - //useEffect(()=>{console.log(state.loginInfo)},[state.loginInfo]) + //useEffect(()=>{console.log(state.currentUser)},[state.currentUser]) return ( <StyledModalSignUp diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 8e5da3b4..25055b32 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -16,32 +16,191 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -import React from 'react'; +import React, {useState, useContext} from 'react'; import styled from 'styled-components' +import { Container } from 'react-grid-system' +import Button from '@material-ui/core/Button'; +import IconButton from '@material-ui/core/IconButton'; +import PhotoCamera from '@material-ui/icons/PhotoCamera'; +import Tooltip from '@material-ui/core/Tooltip'; +import Breadcrumbs from '@material-ui/core/Breadcrumbs'; +import Link from '@material-ui/core/Link'; +import Popover from '@material-ui/core/Popover'; +import { Store } from '../Store.js'; +import EditIcon from '@material-ui/icons/Edit'; - -const maindDiv = styled.div` +const HeaderDiv = styled.div` background-color : #f4f4f4; color : #666; font-size : 14px; line-height : 20px; ` -const breadcrumbsDiv = styled.div` + +const BreadcrumbsDiv = styled.div` + padding : 10px; + display : flex; + justify-content : center; +` + +const StyledBreadcrumbs = styled(Breadcrumbs)` display : flex; - justify:content : center; - padding: 10px; + justify-content : flex-start; + max-width : 1170px; +` + +const MainContainerDesktop = styled(Container)` + padding : 10px 0 8px 0; +` + +const ContainerUserProfile = styled(Container)` + padding : 0; + background-color : #fff; + magin-bottom: 30px; + width : 1170px; + margin-right : auto; + margin-left : auto; +` +const HeaderContainer = styled(Container)` + background-color : #afeeee; + position : relative; +` + +const CoverContainer = styled(Container)` + height : 230px; + position : relative; +` +const ProfileAvatarDiv = styled.div` + bottom : -65px; + left : 60px; + border-radius : 100%; + position : absolute; + width : 150px; + height : 150px; + overflow : hidden; + border : 8px solid #fff; + outline : 0; + cursor : pointer; +` +const ChangeAvatarDiv = styled.div` + height : 40px; + position: absolute; + width : 100%; + bottom : 0; + display : flex; + background-color : #000; + color : #fff; + justify-content : center; +` + +const UserProfileInfoDiv = styled.div` + position : absolute; + bottom : 0; + left : 260px; + overflow : hidden; + margin-bottom : 20px; +` + +const EditProfileAnchor = styled.a` + Button { + background-color : #fafafa; + position : absolute; + right : 5px; + bottom : 0; + margin-bottom : 20px; + color : #666; + padding : 0 10px; + text-decoration : none; + border-radius : 3px; + min-height : 36px; + min-width : 88px; + line-height : 36px; + border : 0; + display: inline-block; + text-align : center; + } ` export default function UserPage (props){ + const {state, dispatch} = useContext(Store) + const userImg = "" + const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) + + const handleHoverAlterarFoto = () => { + handleAlterarFoto(!hoverAlterarFoto) + } + + const redirect = () => { + props.history.push('/') + } + + return ( + <> + { + state.userIsLoggedIn? + ( + [ + <React.Fragment> + <HeaderDiv> + <BreadcrumbsDiv> + <StyledBreadcrumbs> + <Link href="/" style={{color:"#00bcd4"}}> + Página Inicial + </Link> + <span style={{color:"#a5a5a5"}}> + Minha área + </span> + <span style={{color:"#a5a5a5"}}> + Atividades + </span> + </StyledBreadcrumbs> + </BreadcrumbsDiv> + + <MainContainerDesktop> + <ContainerUserProfile> + <HeaderContainer> + <CoverContainer> + {userImg == "" && <span>cover art</span>} + <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" /> + <label htmlFor="icon-button-file"> + <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden"}}>ALTERAR CAPA</span>} placement="left"> + <IconButton style={{position:"absolute",right:"0",top:"0",color:"#fff"}}color="primary" aria-label="upload picture" component="span"> + <PhotoCamera /> + </IconButton> + </Tooltip> + </label> + </CoverContainer> + <ProfileAvatarDiv> + {userImg == "" && <span>user avatar</span>} + <ChangeAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}> + {hoverAlterarFoto && <span>Alterar Foto</span>} + </ChangeAvatarDiv> + </ProfileAvatarDiv> + <UserProfileInfoDiv> + <p style={{fontSize:"28px", color:"#fff", marginBottom:"2px", fontWeight:"500"}}>{state.currentUser.username}</p> + <div style={{fontSize:"14px", color:"#fff", marginBottom:"2px"}}> + <p>{state.currentUser.education}</p> + </div> + </UserProfileInfoDiv> + <EditProfileAnchor href="/perfil/configuracoes/editarperfil"> + <Button> + <EditIcon style={{marginRight:"5px"}}/> <span>EDITAR PERFIL</span> + </Button> + </EditProfileAnchor> + </HeaderContainer> + </ContainerUserProfile> + </MainContainerDesktop> + </HeaderDiv> + </React.Fragment> + ] + ) + : ( + <> + {redirect()} + </> + ) + } + </> - return ( - <mainDiv> - <breadcrumbsDiv> - <ol style={{listStyle:"none"}}> - <li><a href="/"><span>Página Principal</span> </a> </li>/<li><span>Minha área</span></li>/<li><span>Atividades</span></li> - </ol> - </breadcrumbsDiv> - </mainDiv> - ); + ) } diff --git a/src/Store.js b/src/Store.js index c2e0f669..3c12dad7 100644 --- a/src/Store.js +++ b/src/Store.js @@ -34,11 +34,12 @@ const initialState = { width: 0, height: 0 }, - loginInfo: { + currentUser: { username : 'Horstmann', email : '', accessToken : '', - client : '' + client : '', + education : '' } } @@ -63,19 +64,19 @@ function reducer(state, action) { return { ...state, userIsLoggedIn:action.userLoggedIn, - loginInfo:action.login + currentUser:action.login } case 'USER_SIGNED_UP': return { ...state, userIsLoggedIn:action.userLoggedIn, - loginInfo:action.login + currentUser:action.login } case 'USER_LOGGED_OUT': return { ...state, userIsLoggedIn:action.userLoggedOut, - loginInfo:action.login + currentUser:action.login } case 'USER_AGREED_TO_PUBLICATION_TERMS': return { -- GitLab From ac7d577f2476d52c032d32e6f3e12a358b6467d5 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Wed, 29 Jan 2020 11:44:09 -0300 Subject: [PATCH 02/29] progredindo no header da tela de usuario --- src/Pages/UserPage.js | 62 +++++++++++++++++++++++++++++---- src/Store.js | 4 ++- src/img/check-decagram-gray.svg | 3 ++ 3 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 src/img/check-decagram-gray.svg diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 25055b32..29d7c59c 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -28,6 +28,7 @@ import Link from '@material-ui/core/Link'; import Popover from '@material-ui/core/Popover'; import { Store } from '../Store.js'; import EditIcon from '@material-ui/icons/Edit'; +import CheckDecagram from '../img/check-decagram-gray.svg' const HeaderDiv = styled.div` background-color : #f4f4f4; @@ -58,6 +59,8 @@ const ContainerUserProfile = styled(Container)` magin-bottom: 30px; width : 1170px; margin-right : auto; + padding-left : 0 !important; + padding-right : 0 !important; margin-left : auto; ` const HeaderContainer = styled(Container)` @@ -120,9 +123,21 @@ const EditProfileAnchor = styled.a` } ` +const CheckTeacherDiv = styled.div` + font-size : 14px; + padding-top : 10px; + padding-left : 250px; + margin-bottom : -10px; + color : #666 !important; +` + +const RodapeDiv = styled.div` + +` + export default function UserPage (props){ const {state, dispatch} = useContext(Store) - const userImg = "" + const coverImg = '' const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) const handleHoverAlterarFoto = () => { @@ -155,11 +170,12 @@ export default function UserPage (props){ </StyledBreadcrumbs> </BreadcrumbsDiv> + <div style={{display:"flex", flexDirection:"column"}}> <MainContainerDesktop> <ContainerUserProfile> <HeaderContainer> <CoverContainer> - {userImg == "" && <span>cover art</span>} + {coverImg == "" && <span>cover art</span>} <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" /> <label htmlFor="icon-button-file"> <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden"}}>ALTERAR CAPA</span>} placement="left"> @@ -169,10 +185,10 @@ export default function UserPage (props){ </Tooltip> </label> </CoverContainer> - <ProfileAvatarDiv> - {userImg == "" && <span>user avatar</span>} - <ChangeAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}> - {hoverAlterarFoto && <span>Alterar Foto</span>} + <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}> + <img src={state.userAvatar}/> + <ChangeAvatarDiv style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}> + <span>Alterar Foto</span> </ChangeAvatarDiv> </ProfileAvatarDiv> <UserProfileInfoDiv> @@ -183,12 +199,44 @@ export default function UserPage (props){ </UserProfileInfoDiv> <EditProfileAnchor href="/perfil/configuracoes/editarperfil"> <Button> - <EditIcon style={{marginRight:"5px"}}/> <span>EDITAR PERFIL</span> + <EditIcon style={{marginRight:"5px", verticalAlign:"middle"}}/> <span>EDITAR PERFIL</span> </Button> </EditProfileAnchor> </HeaderContainer> + <CheckTeacherDiv> + <> + { + state.isCollaborativeTeacher ? + ( + [ + <> + <img src={CheckDecagram} style={{color:"#00bcd4"}}/> + <span>Professor(a)</span> + </> + ] + ) + : + ( + [ + <p style={{fontSize:"15px", lineHeight:"22px", textAlign:"left", margin:"0 0 10px"}}> + <span style={{cursor:"pointer"}}> + <span style={{paddingRight:"5px"}}> + <img src={CheckDecagram}/> + </span> + Você é professor(a) e gostaria de publicar recursos? + <span style={{color:"#00bcd4"}}> SAIBA MAIS</span> + </span> + </p> + ] + ) + } + </> + </CheckTeacherDiv> + <RodapeDiv> + </RodapeDiv> </ContainerUserProfile> </MainContainerDesktop> + </div> </HeaderDiv> </React.Fragment> ] diff --git a/src/Store.js b/src/Store.js index 3c12dad7..eaacb6bb 100644 --- a/src/Store.js +++ b/src/Store.js @@ -39,7 +39,9 @@ const initialState = { email : '', accessToken : '', client : '', - education : '' + education : '', + isCollaborativeTeacher : false, + userAvatar : '' } } diff --git a/src/img/check-decagram-gray.svg b/src/img/check-decagram-gray.svg new file mode 100644 index 00000000..a2415acd --- /dev/null +++ b/src/img/check-decagram-gray.svg @@ -0,0 +1,3 @@ +<svg width="22" height="21" viewBox="0 0 22 21" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M22 10.46L19.56 7.68L19.9 4L16.29 3.18L14.4 0L11 1.46L7.6 0L5.71 3.18L2.1 3.99L2.44 7.67L0 10.46L2.44 13.24L2.1 16.93L5.71 17.75L7.6 20.93L11 19.46L14.4 20.92L16.29 17.74L19.9 16.92L19.56 13.24L22 10.46ZM9 15.46L5 11.46L6.41 10.05L9 12.63L15.59 6.04L17 7.46L9 15.46Z" fill="#D1D1D1"/> +</svg> -- GitLab From 1b110ac88f5269c3d16f297bb80742b041686dac Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Thu, 30 Jan 2020 11:33:06 -0300 Subject: [PATCH 03/29] tabs quase pronto --- src/Components/MenuBar.js | 4 +- src/Components/MenuList.js | 13 +- src/Components/TabAtividades.js | 0 src/Pages/UserPage.js | 258 ++++++++++++++++++-------------- src/img/horstmann.jpg | Bin 0 -> 38951 bytes 5 files changed, 158 insertions(+), 117 deletions(-) create mode 100644 src/Components/TabAtividades.js create mode 100644 src/img/horstmann.jpg diff --git a/src/Components/MenuBar.js b/src/Components/MenuBar.js index f7c90fb5..75550ecf 100644 --- a/src/Components/MenuBar.js +++ b/src/Components/MenuBar.js @@ -29,7 +29,7 @@ import styled from 'styled-components' import { Store } from '../Store'; import CloudUploadIcon from '@material-ui/icons/CloudUpload'; import Notifications from "./Notifications.js" -import CustomizedMenus from './MenuList' +import MenuList from './MenuList' const ContainerStyled = styled(Container)` *{ text-decoration: none } @@ -149,7 +149,7 @@ export default function MenuBar(props){ <Notifications/> </div> - <CustomizedMenus items={minhaArea}/> + <MenuList items={minhaArea}/> </> ] diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js index 5652912f..ee25a683 100644 --- a/src/Components/MenuList.js +++ b/src/Components/MenuList.js @@ -42,7 +42,7 @@ const OverrideButton = styled(Button)` text-transform : none !important; ` -export default function CustomizedMenus(props) { +export default function MenuList(props) { const [anchorEl, setAnchorEl] = React.useState(null); const { state, dispatch } = useContext(Store) @@ -77,7 +77,16 @@ export default function CustomizedMenus(props) { onMouseEnter={handleClick} > - <img src={Profile} alt={''} style={{maxWidth:"50px", maxHeight:"50px", borderRadius:"25px"}}/> + { + state.currentUser.userAvatar === '' ? + ( + + <img src={Profile} alt={''} style={{maxWidth:"50px", maxHeight:"50px", borderRadius:"25px"}}/> + ): + ( + <img src={state.currentUser.userAvatar} alt={''}/> + ) + } <span style={{fontFamily:"inherit", fontWeight:"400", color:"#666"}}>Minha Ãrea </span> <KeyboardArrowDownIcon/> </OverrideButton> diff --git a/src/Components/TabAtividades.js b/src/Components/TabAtividades.js new file mode 100644 index 00000000..e69de29b diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 29d7c59c..f30f99e9 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -29,116 +29,14 @@ import Popover from '@material-ui/core/Popover'; import { Store } from '../Store.js'; import EditIcon from '@material-ui/icons/Edit'; import CheckDecagram from '../img/check-decagram-gray.svg' - -const HeaderDiv = styled.div` - background-color : #f4f4f4; - color : #666; - font-size : 14px; - line-height : 20px; -` - -const BreadcrumbsDiv = styled.div` - padding : 10px; - display : flex; - justify-content : center; -` - -const StyledBreadcrumbs = styled(Breadcrumbs)` - display : flex; - justify-content : flex-start; - max-width : 1170px; -` - -const MainContainerDesktop = styled(Container)` - padding : 10px 0 8px 0; -` - -const ContainerUserProfile = styled(Container)` - padding : 0; - background-color : #fff; - magin-bottom: 30px; - width : 1170px; - margin-right : auto; - padding-left : 0 !important; - padding-right : 0 !important; - margin-left : auto; -` -const HeaderContainer = styled(Container)` - background-color : #afeeee; - position : relative; -` - -const CoverContainer = styled(Container)` - height : 230px; - position : relative; -` -const ProfileAvatarDiv = styled.div` - bottom : -65px; - left : 60px; - border-radius : 100%; - position : absolute; - width : 150px; - height : 150px; - overflow : hidden; - border : 8px solid #fff; - outline : 0; - cursor : pointer; -` -const ChangeAvatarDiv = styled.div` - height : 40px; - position: absolute; - width : 100%; - bottom : 0; - display : flex; - background-color : #000; - color : #fff; - justify-content : center; -` - -const UserProfileInfoDiv = styled.div` - position : absolute; - bottom : 0; - left : 260px; - overflow : hidden; - margin-bottom : 20px; -` - -const EditProfileAnchor = styled.a` - Button { - background-color : #fafafa; - position : absolute; - right : 5px; - bottom : 0; - margin-bottom : 20px; - color : #666; - padding : 0 10px; - text-decoration : none; - border-radius : 3px; - min-height : 36px; - min-width : 88px; - line-height : 36px; - border : 0; - display: inline-block; - text-align : center; - } -` - -const CheckTeacherDiv = styled.div` - font-size : 14px; - padding-top : 10px; - padding-left : 250px; - margin-bottom : -10px; - color : #666 !important; -` - -const RodapeDiv = styled.div` - -` +import Tabs from '@material-ui/core/Tabs'; +import Tab from '@material-ui/core/Tab'; export default function UserPage (props){ const {state, dispatch} = useContext(Store) const coverImg = '' const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) + const [value, setValue] = useState(0); const handleHoverAlterarFoto = () => { handleAlterarFoto(!hoverAlterarFoto) @@ -148,6 +46,10 @@ export default function UserPage (props){ props.history.push('/') } + const handleChangeTab = (event, newValue) => { + setValue(newValue) + } + return ( <> { @@ -186,7 +88,7 @@ export default function UserPage (props){ </label> </CoverContainer> <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}> - <img src={state.userAvatar}/> + <img src={state.currentUser.userAvatar}/> <ChangeAvatarDiv style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}> <span>Alterar Foto</span> </ChangeAvatarDiv> @@ -219,13 +121,13 @@ export default function UserPage (props){ ( [ <p style={{fontSize:"15px", lineHeight:"22px", textAlign:"left", margin:"0 0 10px"}}> - <span style={{cursor:"pointer"}}> - <span style={{paddingRight:"5px"}}> - <img src={CheckDecagram}/> - </span> - Você é professor(a) e gostaria de publicar recursos? - <span style={{color:"#00bcd4"}}> SAIBA MAIS</span> - </span> + <span style={{cursor:"pointer"}}> + <span style={{paddingRight:"5px"}}> + <img src={CheckDecagram}/> + </span> + Você é professor(a) e gostaria de publicar recursos? + <span style={{color:"#00bcd4"}}> SAIBA MAIS</span> + </span> </p> ] ) @@ -233,6 +135,22 @@ export default function UserPage (props){ </> </CheckTeacherDiv> <RodapeDiv> + <NavBarContentContainer> + <Tabs + value ={value} + onChange ={handleChangeTab} + indicatorColor ="primary" + textColor ="primary" + variant = "scrollable" + scrollButtons = "auto" + > + <Tab label="Atividades"/> + <Tab label="Meus Recursos"/> + <Tab label="Favoritos"/> + <Tab label="Coleções"/> + <Tab label="Rede"/> + </Tabs> + </NavBarContentContainer> </RodapeDiv> </ContainerUserProfile> </MainContainerDesktop> @@ -252,3 +170,117 @@ export default function UserPage (props){ ) } + + const HeaderDiv = styled.div` + background-color : #f4f4f4; + color : #666; + font-size : 14px; + line-height : 20px; + ` + + const BreadcrumbsDiv = styled.div` + padding : 10px; + display : flex; + justify-content : center; + ` + + const StyledBreadcrumbs = styled(Breadcrumbs)` + display : flex; + justify-content : flex-start; + max-width : 1170px; + ` + + const MainContainerDesktop = styled(Container)` + padding : 10px 0 8px 0; + ` + + const ContainerUserProfile = styled(Container)` + padding : 0; + background-color : #fff; + magin-bottom: 30px; + width : 1170px; + margin-right : auto; + padding-left : 0 !important; + padding-right : 0 !important; + margin-left : auto; + ` + const HeaderContainer = styled(Container)` + background-color : #afeeee; + position : relative; + ` + + const CoverContainer = styled(Container)` + height : 230px; + position : relative; + ` + const ProfileAvatarDiv = styled.div` + bottom : -65px; + left : 60px; + border-radius : 100%; + position : absolute; + width : 150px; + height : 150px; + overflow : hidden; + border : 8px solid #fff; + outline : 0; + cursor : pointer; + ` + const ChangeAvatarDiv = styled.div` + height : 40px; + position: absolute; + width : 100%; + bottom : 0; + display : flex; + background-color : #000; + color : #fff; + justify-content : center; + ` + + const UserProfileInfoDiv = styled.div` + position : absolute; + bottom : 0; + left : 260px; + overflow : hidden; + margin-bottom : 20px; + ` + + const EditProfileAnchor = styled.a` + Button { + background-color : #fafafa; + position : absolute; + right : 5px; + bottom : 0; + margin-bottom : 20px; + color : #666; + padding : 0 10px; + text-decoration : none; + border-radius : 3px; + min-height : 36px; + min-width : 88px; + line-height : 36px; + border : 0; + display: inline-block; + text-align : center; + } + ` + + const CheckTeacherDiv = styled.div` + font-size : 14px; + padding-top : 10px; + padding-left : 250px; + margin-bottom : -10px; + color : #666 !important; + ` + + const RodapeDiv = styled.div` + justify-content : flex-end; + display : flex; + ` + + const NavBarContentContainer = styled(Container)` + background-color : #fff; + padding-bottom : 0; + overflow-x : hidden !important; + overflow-y : hid1den !important; + margin-right : 0 !important; + ` diff --git a/src/img/horstmann.jpg b/src/img/horstmann.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4e7e494f1615ddd3e2a650a2fc7099c8e4b3c1a GIT binary patch literal 38951 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¨rvY>)Y+xo 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� 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%0D}4m5%nvzOU!m<oDrI=0WYStLOI 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 literal 0 HcmV?d00001 -- GitLab From 29be7eefe9be7564255d6397af921a06b7ad9cb3 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Mon, 3 Feb 2020 18:57:09 -0300 Subject: [PATCH 04/29] revisitando modais de login e cadastro --- src/App.js | 6 - src/Components/Checkbox.js | 3 +- src/Components/FormInput.js | 13 +- src/Components/Header.js | 24 +- src/Components/LoginContainer.js | 217 +++++++++++------- src/Components/LoginModal.js | 35 ++- src/Components/MenuBar.js | 1 - src/Components/MenuList.js | 35 ++- .../PublicationPermissionsContent.js | 2 +- src/Components/SignUpContainer.js | 152 +++++++----- src/Components/SignUpModal.js | 20 +- src/Components/TabAtividades.js | 0 src/Components/TabPanelAtividades.js | 52 +++++ src/Pages/UserPage.js | 9 +- src/Store.js | 6 +- src/img/logo_google.svg | 1 + 16 files changed, 384 insertions(+), 192 deletions(-) delete mode 100644 src/Components/TabAtividades.js create mode 100644 src/Components/TabPanelAtividades.js create mode 100644 src/img/logo_google.svg diff --git a/src/App.js b/src/App.js index 96fcaca9..a02de521 100644 --- a/src/App.js +++ b/src/App.js @@ -73,16 +73,10 @@ export default function App(){ <Route path="/busca" component={Search} /> <Route path="/perfil-atualizacoes" component={UserPage} /> <Route path="/recurso" component={ResourcePage}/> - <Route path="/termos-publicar-recurso" component={TermsPage}/> <Route path="/permission" component={PublicationPermissionsPage}/> - {/*<Route path="termos-de-uso#publicacoes-de-usuario" component={}*/} - - <Route path="/termos" component={UserTerms}/> <Route path="/teste" component={Teste}/> - - </Switch> <EcFooter/> <GNUAGPLfooter/> diff --git a/src/Components/Checkbox.js b/src/Components/Checkbox.js index 9e497b4c..d2d9b96e 100644 --- a/src/Components/Checkbox.js +++ b/src/Components/Checkbox.js @@ -36,10 +36,11 @@ export default function LabeledCheckbox(props) { return ( <StyledFormControlLabel control={ - <StyledCheckbox + <Checkbox disabled = {props.disabledCheckbox} value = {props.checked} onChange = {props.handleChange} + style = { { color : props.disabledCheckbox ? "#000" : "#00bcd4"}} /> } label={<span style={{ fontSize: '12px' }}>{props.label}</span>} diff --git a/src/Components/FormInput.js b/src/Components/FormInput.js index 2a5a600c..e6bd1c68 100644 --- a/src/Components/FormInput.js +++ b/src/Components/FormInput.js @@ -21,12 +21,6 @@ import {makeStyles} from '@material-ui/styles'; import styled from 'styled-components' import TextField from '@material-ui/core/TextField'; -const FormContainerStyled = styled.form` - display: flex; - flex-wrap : wrap; - padding : 2px; -` - const StyledTextField = styled(TextField)` max-width: 100%; font-size : 15px; @@ -47,7 +41,7 @@ const useStyles = makeStyles(theme => ({ maxWidth: '100%', fontSize : '15px', fontWeight : 'lighter', - color : 'inherit', + color : '#00bcd4', width : '100%', }, })); @@ -56,8 +50,6 @@ export default function FormInput(props) { const classes = useStyles(); return ( - <FormContainerStyled noValidate autoComplete="off"> - <StyledTextField id="standard-basic" label={props.placeholder} @@ -68,9 +60,8 @@ export default function FormInput(props) { value = {props.value} onChange = {props.handleChange} InputProps={{className: classes.input}} + required = {props.required} style={{width:"100%"}} /> - - </FormContainerStyled> ); } diff --git a/src/Components/Header.js b/src/Components/Header.js index 623b91e1..386a3e4a 100644 --- a/src/Components/Header.js +++ b/src/Components/Header.js @@ -25,16 +25,31 @@ import SignUpModal from './SignUpModal' import LoginModal from './LoginModal' import { Store } from '../Store'; import ColaborarModal from './ColaborarModal.js' - +import Snackbar from '@material-ui/core/Snackbar'; +import MuiAlert from '@material-ui/lab/Alert'; //const StyledButton = styled(Button)` // background : #ffa54c !important; // boxShadow :none; //` +function Alert(props) { + return <MuiAlert elevation={6} variant="filled" {...props} />; +} + + export default function Header(props){ const { state, dispatch } = useContext(Store) const [signUpOpen, setSignUp] = useState(false) const [loginOpen, setLogin] = useState(false) + const [successfulLoginOpen, handleSuccessfulLogin] = useState(false) + + const toggleSnackbar = (event, reason) => { + if (reason === 'clickaway') { + return; + } + + handleSuccessfulLogin(false); + } const handleSignUp = () => { setSignUp(!signUpOpen) @@ -54,12 +69,17 @@ export default function Header(props){ return( <> <AcessibilityBar/> + <Snackbar open={successfulLoginOpen} autoHideDuration={1000} onClose={toggleSnackbar} + anchorOrigin = {{ vertical:'top', horizontal:'middle' }} + > + <Alert severity="success" style={{backgroundColor:"#00acc1"}}>Você está conectado(a)!</Alert> + </Snackbar> <MenuBar openSearchBar={handleClickSearch} openSignUp = {handleSignUp} openLogin = {handleLogin}/> { state.searchOpen && <SearchBar/> } <SignUpModal open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin}/> - <LoginModal open={loginOpen} handleClose={handleLogin} openSignUp={handleSignUp}/> + <LoginModal open={loginOpen} handleClose={handleLogin} openSignUp={handleSignUp} openSnackbar = {() => {handleSuccessfulLogin(true)}}/> {/*<ColaborarModal open={state.modalColaborarPlataformaOpen} handleClose={handleKyloren} />*/} </> diff --git a/src/Components/LoginContainer.js b/src/Components/LoginContainer.js index c148704c..8546fc4c 100644 --- a/src/Components/LoginContainer.js +++ b/src/Components/LoginContainer.js @@ -24,6 +24,7 @@ import styled from 'styled-components' import {device} from './device.js' import LabeledCheckbox from './Checkbox.js' import FormInput from "./FormInput.js" +import GoogleLogo from "../img/logo_google.svg" //arrumar isso const responseGoogle = (response) => { @@ -37,7 +38,7 @@ class LoginContainer extends Component { this.state = { email : "", senha : "", - checkboxChecked : true + checkboxChecked : false }; this.handleChecked = this.handleChecked.bind(this) } @@ -73,15 +74,16 @@ class LoginContainer extends Component { return ( <ContainerStyled > <DialogHeaderStyled> + <span style={{width:"32px"}}/> <H2Styled> Entrar - <StyledCloseModalButton onClick={this.props.handleClose}> - <CloseIcon/> - </StyledCloseModalButton> </H2Styled> + <StyledCloseModalButton onClick={this.props.handleClose}> + <CloseIcon/> + </StyledCloseModalButton> </DialogHeaderStyled> - <div style={{paddingTop: "20px"}}> - <div style={{marginTop:"0"}}> + <DialogContentDiv> + <SocialConnectDiv> <StyledGoogleLoginButton clientId="658977310896-knrl3gka66fldh83dao2rhgbblmd4un9.apps.googleusercontent.com" @@ -89,50 +91,54 @@ class LoginContainer extends Component { onFailure={responseGoogle} cookiePolicy={'single_host_origin'} > - <span style={{textTransform:"none", fontSize:"13px"}}>Usando o Google</span> + <span style={{textTransform:"none", fontSize:"13px", color : "#666"}}>Usando o Google</span> </StyledGoogleLoginButton> - </div> - </div> - - <H3Styled> - <RightSideStrikedH3/> - <span style={{verticalAlign:"middle"}}>ou</span> - <LeftSideStrikedH3/> - </H3Styled> - - <form ref="form" onSubmit={this.onSubmit}> - <FormInput - inputType={"text"} - name={"email"} - value={this.state.email} - placeholder={"E-mail *"} - handleChange={e => this.handleChange(e)} - /> - <br/> - <FormInput - inputType={"password"} - name={"senha"} - value={this.state.senha} - placeholder={"Senha *"} - handleChange={e => this.handleChange(e)} - /> - <br/> - - <RememberRecover> - <LabeledCheckbox label={<StyledSpan>Lembrar-me</StyledSpan>} onchange={this.handleChecked}/> - <span style={{paddingTop:"15px"}}>Esqueceu a senha?<a href="recuperar-senha" style={{textAlign: "right", color:"#4cd0e1"}}>Clique aqui!</a></span> - </RememberRecover> - - <ConfirmContainerStyled> - <StyledLoginButton onClick={e => this.onSubmit(e)} variant="contained"> - <span style={{borderRadius:"3px", boxSizing:"border-box", fontFamily:"Roboto, sans serif", fontWeight:"500", color:"#fff"}}>ENTRAR</span> - </StyledLoginButton> - </ConfirmContainerStyled> - </form> - - <DialogFooterStyled> - <span style={{textAlign:"center", fontSize: "14px", color:"rgb(102, 102, 102)"}}>Ainda não tem cadastro? <StyledAnchor href="" onClick={e => this.switchModal(e)}>CADASTRE-SE</StyledAnchor></span> - </DialogFooterStyled> + </SocialConnectDiv> + + <H3Div> + <H3Styled> + <RightSideStrikedH3/> + <span style={{verticalAlign:"middle"}}>ou</span> + <LeftSideStrikedH3/> + </H3Styled> + </H3Div> + + <form ref="form" onSubmit={this.onSubmit}> + <FormInput + inputType={"text"} + name={"email"} + value={this.state.email} + placeholder={"E-mail"} + handleChange={e => this.handleChange(e)} + required={true} + /> + <br/> + <FormInput + inputType={"password"} + name={"senha"} + value={this.state.senha} + placeholder={"Senha"} + handleChange={e => this.handleChange(e)} + required={true} + /> + <br/> + + <RememberRecover> + <LabeledCheckbox label={<StyledLabel><StyledSpan>Lembrar-me</StyledSpan></StyledLabel>} onchange={this.handleChecked} disabledCheckbox={this.state.checkboxChecked}/> + <UserForgotTheirPasswordSpan>Esqueceu a senha? <a href="recuperar-senha" style={{textAlign: "right", color:"#4cd0e1"}}>Clique aqui!</a></UserForgotTheirPasswordSpan> + </RememberRecover> + + <ConfirmContainerStyled> + <StyledLoginButton onClick={e => this.onSubmit(e)} variant="contained"> + <span style={{borderRadius:"3px", boxSizing:"border-box", fontFamily:"Roboto, sans serif", fontWeight:"500", color:"#fff"}}>ENTRAR</span> + </StyledLoginButton> + </ConfirmContainerStyled> + </form> + + <DialogFooterStyled> + <span style={{textAlign:"center", fontSize: "14px", color:"rgb(102, 102, 102)"}}>Ainda não tem cadastro? <StyledAnchor href="" onClick={e => this.switchModal(e)}>CADASTRE-SE</StyledAnchor></span> + </DialogFooterStyled> + </DialogContentDiv> </ContainerStyled> ) } @@ -144,24 +150,68 @@ const ContainerStyled = styled.div` box-sizing : border-box; background-color : white; max-width : none; + display : flex; + flex-direction : column; + min-width : 440px; + min-height : 550px; align : center; - padding-left : 25px; - padding-right:25px; - padding-bottom:10px; + padding : 10px; border-radius: 4px; + line-height : 20px; + font-size : 14px; @media ${device.mobileM} { width : 100%; height : 100%; } ` -const DialogHeaderStyled = styled.div` +export const DialogHeaderStyled = styled.div` text-align : center; - display : inline-flex; + display : flex; + flex-direction : row; justify-content : space-between; padding : 10px 26px 0 26px; height : 64px; ` +const H2Styled = styled.h2` + align-self : center; + color : #666; + font-size : 26px; + font-weight : 100; + font-family: 'Roboto', sans serif, 'Helvetica Neue', Helvetica, Arial, sans-serif !important; + justify-content: space-between; + text-align: center; + letter-spacing: .005em; +` + +export const StyledCloseModalButton = styled(Button)` + display : inline-block; + position : relative; + float : right !important; + margin-right : -8px !important; + background : transparent !important; + min-width: 0 !important; + width : 40px; +` +export const DialogContentDiv = styled.div` + padding : 20px 30px; + overflow : visible !important; +` + +export const SocialConnectDiv = styled.div` + margin-top : 0; + display : flex; + flex-direction : row; +` +export const StyledGoogleLoginButton = styled(GoogleLogin)` + background-color : #fff !important; + color : #666 !important; + border : 1px solid rgb(66, 133, 244); + box-shadow: 0 0 0 1px #4285f4 !important; + :hover { + background-color: #f4f4f4 !important; + } +` const DialogFooterStyled = styled.div` box-sizing : border-box; @@ -174,17 +224,6 @@ const DialogFooterStyled = styled.div` line-height : 1.42857143 ` -const H2Styled = styled.h2` - align-self : center; - color : #666; - font-size : 26px; - font-weight : 100; - font-family: 'Roboto', sans serif, 'Helvetica Neue', Helvetica, Arial, sans-serif !important; - justify-content: space-between; - padding: 10px 26px 0 26px; - text-align: center; - letter-spacing: .005em; -` const RightSideStrikedH3 = styled.div` display : inline-block; @@ -203,13 +242,10 @@ const LeftSideStrikedH3 = styled.div` margin-left : 5px; width : 45%; ` -const StyledGoogleLoginButton = styled(GoogleLogin)` - background-color: fff; - border : 1px solid rgb(66, 133, 244); - box-shadow: 0 0 0 1px #4285f4 !important; - :hover { - background-color: #f4f4f4 !important; - } + +export const H3Div = styled.div` + margin-top : 0; + margin-bottom : 10px; ` const H3Styled = styled.h3` @@ -224,24 +260,14 @@ const StyledAnchor = styled.a` color : #00bcd4; text-decoration : none; ` -const StyledCloseModalButton = styled(Button)` - display : inline-block; - position : relative; - float : right !important; - margin-right : -8px; - background : transparent; - min-width: 0 !important; - width : 40px; -` const ConfirmContainerStyled = styled.div` display : flex; margin-top : 10px; align-items : center; justify-content : center; - box-sizing : border-box; ` const StyledLoginButton = styled(Button)` - background-color: #00bcd4 !important; + background-color : #00bcd4 !important; box-shadow : none !important; outline: none !important; border : 0 !important; @@ -259,15 +285,32 @@ const StyledLoginButton = styled(Button)` } ` + const RememberRecover = styled.div` display : flex; justify-content : space-between; font-size: 12px; font-weight : 400; - margin-bottom: 16px; ` + +const StyledLabel = styled.div` + box-sizing : border-box; + position : relative; + vertical-align : middle !important; + color : #666; + +` + +const UserForgotTheirPasswordSpan = styled.span` + margin-top : 1em; + font-size : 12px; + font-weight : 400; + text-align : right; + color : #666; +` + const StyledSpan = styled.span` - font-size: 12px; - font-weight: 400; - padding-top: 2px; + font-size : 12px; + font-weight : 400; + padding-top : 2px; ` diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js index 17540183..65ff4e34 100644 --- a/src/Components/LoginModal.js +++ b/src/Components/LoginModal.js @@ -16,7 +16,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -import React, {useContext} from 'react'; +import React, {useContext, useState} from 'react'; import { Button } from '@material-ui/core'; import Modal from '@material-ui/core/Modal'; import Backdrop from '@material-ui/core/Backdrop'; @@ -26,6 +26,8 @@ import LoginContainer from './LoginContainer' import {Store} from '../Store.js' import axios from 'axios' import {apiUrl} from '../env'; +import Snackbar from '@material-ui/core/Snackbar'; +import MuiAlert from '@material-ui/lab/Alert'; const StyledLogin = styled(Modal)` margin : 0 !important; @@ -38,9 +40,21 @@ const StyledLogin = styled(Modal)` border-radius : 4px; ` +function Alert(props) { + return <MuiAlert elevation={6} variant="filled" {...props} />; +} export default function LoginModal (props){ const {state, dispatch} = useContext(Store) + const [snackbarOpened, handleSnackbar] = useState(false) + + const handleCloseSnackbar = (event, reason) => { + if (reason === 'clickaway') { + return; + } + + handleSnackbar(false); + } const handleLoginInfo = (login) => { axios.post(`${apiUrl}/auth/sign_in`, @@ -53,22 +67,32 @@ export default function LoginModal (props){ type: "USER_LOGGED_IN", userLoggedIn: !state.userIsLoggedIn, login: { - username : login.username, - email : login.email, + id : response.data.id, + username : response.data.name, + email : response.data.email, accessToken : response.headers['access-token'], - client : response.headers.client + clientToken : response.headers.client, + userAvatar : response.data.avatar_file_name, + userCover : response.data.cover_file_name } } ) props.handleClose(); + props.openSnackbar(); }, (error) => { - console.log(':()') + {handleSnackbar(true)} } ) } return ( + <> + <Snackbar open={snackbarOpened} autoHideDuration={1000} onClose={handleCloseSnackbar} + anchorOrigin = {{ vertical:'top', horizontal:'right' }} + > + <Alert severity="error">Ocorreu um erro ao se conectar!</Alert> + </Snackbar> <StyledLogin aria-labelledby="transition-modal-title" aria-describedby="transition-modal-description" @@ -89,5 +113,6 @@ export default function LoginModal (props){ /> </Zoom> </StyledLogin> + </> ) } diff --git a/src/Components/MenuBar.js b/src/Components/MenuBar.js index 75550ecf..17b4d9e2 100644 --- a/src/Components/MenuBar.js +++ b/src/Components/MenuBar.js @@ -113,7 +113,6 @@ export default function MenuBar(props){ { name: "Coleções", href: "/perfil/colecoes"}, { name: "Rede", href: "/perfil/rede"}, { name: "Configurações", href: "/perfil/cofiguracoes/editarperfil"}, - { name: "Sair", href:"/"} ] return( diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js index ee25a683..1268edb7 100644 --- a/src/Components/MenuList.js +++ b/src/Components/MenuList.js @@ -78,7 +78,7 @@ export default function MenuList(props) { > { - state.currentUser.userAvatar === '' ? + state.currentUser.userAvatar == '' || state.currentUser.userAvatar == null ? ( <img src={Profile} alt={''} style={{maxWidth:"50px", maxHeight:"50px", borderRadius:"25px"}}/> @@ -110,7 +110,7 @@ export default function MenuList(props) { <Link key={item.name} to={item.href} style={{textDecoration:"none"}} ><MenuItem style= {{fontSize:"14px", padding:"5px 20px", color:"#666"}}>{item.name}</MenuItem></Link> ) } - <Button onClick={handleLogout} style={{layout:"row", layoutAlign:"space-between-center"}}> <MenuItem>Sair<ExitToAppIcon style={{align:"right"}}/></MenuItem></Button> + <StyledButtonSair onClick={handleLogout}> <StyledMenuItem disableGutters={true}>Sair<StyledExitToAppIcon/></StyledMenuItem></StyledButtonSair> </Menu> @@ -118,6 +118,37 @@ export default function MenuList(props) { ); } +const StyledButtonSair = styled(Button)` + height : 31px; + width : 177px; + layout : row; + + .listItem { + width : 100% !important; + display : flex !important; + justify-content: space-between !important; + font-size : 14px !important; + color : #a5a5a5 !important; + padding : 5px 20px !important; + } +` + +const StyledExitToAppIcon = styled(ExitToAppIcon) ` + fontSize : 24px; + color : rgb(162,165,165); + align : right; + display : flex; + justify-content : flex-end; +` +const StyledMenuItem = styled(MenuItem)` + display : flex; + justify-content: space-between; + width : 100%; + font-size : 14px; + color : #a5a5a5; + padding : 5px 20px; +` + //import React from 'react'; //import Button from '@material-ui/core/Button'; //import ClickAwayListener from '@material-ui/core/ClickAwayListener'; diff --git a/src/Components/PublicationPermissionsContent.js b/src/Components/PublicationPermissionsContent.js index c40d49d7..3b62deef 100644 --- a/src/Components/PublicationPermissionsContent.js +++ b/src/Components/PublicationPermissionsContent.js @@ -31,7 +31,7 @@ export default function PublicationPermissionsContent (props) { <p>Ao prosseguir você concede a permissão de publicação do seu recurso ao nosso portal e se compromete a não infringir as polÃticas de conteúdos, estando então, a partir desse momento passÃvel de responsabilização pelo conteúdo a ser integrado a nossa rede. Para tanto atente-se as pontuações abaixo e verifique se o seu recurso está de acordo, antecipadamente, com as nossas condições. É recomendável a leitura das polÃticas de conteúdo estabelecidas - (<a href="termos-de-uso#publicacoes-de-usuario"><strong>PolÃticas de Conteúdo</strong></a>) + (<a href="/termos" style={{color:"initial"}}><strong>PolÃticas de Conteúdo</strong></a>) </p> <Typography variant="h5" style={{fontWeight:"300", color:"rgb(102, 102, 102)", fontSize:"22px"}}> Para que o recurso seja publicado na plataforma é preciso que ele esteja de acordo com as diretrizes abaixo, a presença de quaisquer dos itens a seguir diff --git a/src/Components/SignUpContainer.js b/src/Components/SignUpContainer.js index f87f002e..c41f3655 100644 --- a/src/Components/SignUpContainer.js +++ b/src/Components/SignUpContainer.js @@ -24,7 +24,7 @@ import CloseIcon from '@material-ui/icons/Close'; import styled from 'styled-components' import {device} from './device.js' import FormInput from "./FormInput.js" - +import {StyledCloseModalButton, DialogContentDiv, DialogHeaderStyled, SocialConnectDiv, StyledGoogleLoginButton, H3Div} from './LoginContainer.js' const responseGoogle = (response) => { console.log(response); } @@ -40,14 +40,36 @@ var callback = function () { console.log('Done!!!!'); }; +function validateUserInfo (name, email, password) { + const errors = [] + + if(name.lenght === 0 ) { + errors.push({name : "name", msg : "Faltou preencher seu nome completo."}) + } + if(email.length === 0) { + errors.push({name : "email", msg : "Faltou preencher seu e-mail."}) + } + else if ( (email.split("").filter(x => x === "@").length !== 1) || (email.indexOf(".") === -1) ){ + errors.push({name : "email", msg : "Insira um endereço de email válido."}) + errors.push({name : "email", msg : "Por exemplo: seunome@gmail.com, seunome@hotmail.com"}) + } + if(password.length === 0) { + errors.push({ name : "password", msg : "Faltou definir uma senha."}) + } + + return errors +} + class SignUpContainer extends Component { constructor (props) { super(props); this.state = { - nomeCompleto: "", + name: "", email: "", - senha: "" + password: "", + + errors : [] }; }; @@ -59,80 +81,97 @@ class SignUpContainer extends Component { handleChange = e => { this.setState({[e.target.name]: e.target.value}) + }; onSubmit = (e) => { //on submit we should prevent the page from refreshing e.preventDefault(); //though this is arguable - - //pass user info to Store.js and clear all text fields - this.props.handleLoginInfo(this.state) - this.setState({ - nomeCompleto: "", - email: "", - senha: "" - }) + const { name, email, password } = this.state; + const errors = validateUserInfo(name, email, password) + console.log(this.state) + if ( errors.length < 0) { + //pass user info to Store.js and clear all text fields + this.props.handleLoginInfo(this.state) + this.setState({ + name: "", + email: "", + password: "" + }) + } + else { + this.setState({errors}) + } } render () { + const { errors } = this.state; return ( <ContainerStyled > <DialogHeaderStyled> + <span style={{width:"32px"}}/> <H2Styled> Cadastrar-se - <StyledCloseModalButton onClick={this.props.handleClose} > - <CloseIcon /> - </StyledCloseModalButton> </H2Styled> + <StyledCloseModalButton onClick={this.props.handleClose} > + <CloseIcon /> + </StyledCloseModalButton> </DialogHeaderStyled> - <div style={{paddingTop: "20px"}}> - <div style={{marginTop:"0"}}> + <DialogContentDiv> + <SocialConnectDiv> <StyledGoogleLoginButton clientId="658977310896-knrl3gka66fldh83dao2rhgbblmd4un9.apps.googleusercontent.com" - onSuccess={responseGoogle} onFailure={responseGoogle} cookiePolicy={'single_host_origin'} > <span style={{textTransform:"none", fontSize:"13px"}}>Usando o Google</span> </StyledGoogleLoginButton> - </div> - </div> + </SocialConnectDiv> - <H3Styled> - <RightSideStrikedH3/> - <span style={{verticalAlign:"middle"}}>ou</span> - <LeftSideStrikedH3/> - </H3Styled> + <H3Div> + <H3Styled> + <RightSideStrikedH3/> + <span style={{verticalAlign:"middle"}}>ou</span> + <LeftSideStrikedH3/> + </H3Styled> + </H3Div> <form ref="form" onSubmit={this.onSubmit}> + {errors.map(error => ( + <p key={error.name}>Error: {error.msg}</p> + ))} <FormInput inputType={"text"} - name={"nomeCompleto"} - value={this.state.nomeCompleto} - placeholder={"Nome Completo *"} + name={"name"} + value={this.state.name} + placeholder={"Nome Completo"} handleChange={e => this.handleChange(e)} + required={true} /> <br/> <FormInput inputType={"text"} name={"email"} value={this.state.email} - placeholder={"E-mail *"} + placeholder={"E-mail"} handleChange={e => this.handleChange(e)} + required={true} /> <br/> <FormInput inputType={"password"} - name={"senha"} - value={this.state.senha} - placeholder={"Senha *"} + name={"password"} + value={this.state.password} + placeholder={"Senha"} handleChange={e => this.handleChange(e)} + required={true} /> <br/> - <StyledRecaptcha + <Recaptcha sitekey="6LcyFr8UAAAAAOd0Po6rmZC1D_nYik8nLCAkNKsc" + size="normal" render="explicit" onloadCallback={callback} /> @@ -156,6 +195,7 @@ class SignUpContainer extends Component { <DialogFooterStyled> <span style={{textAlign:"center", fontSize: "14px"}}>Já possui cadastro? <StyledAnchor href="" onClick={e => this.switchModal(e)}>ENTRAR</StyledAnchor></span> </DialogFooterStyled> + </DialogContentDiv> </ContainerStyled> ) } @@ -168,24 +208,19 @@ const ContainerStyled = styled.div` background-color : white; max-width : none; align : center; - padding-left : 25px; - padding-right:25px; - padding-bottom:10px; - border-radius: 4px; + display : flex; + flex-direction : column; + min-width : 450px; + min-height : 690px; + max-height : none; + position : relative; + padding : 10px; @media ${device.mobileM} { width : 100%; height : 100%; } ` -const DialogHeaderStyled = styled.div` - text-align : center; - display : inline-flex; - justify-content : space-between; - padding : 10px 26px 0 26px; - height : 64px; -` - const DialogFooterStyled = styled.div` box-sizing : border-box; font-family : 'Roboto', sans serif; @@ -197,15 +232,6 @@ const DialogFooterStyled = styled.div` line-height : 1.42857143 ` -const StyledGoogleLoginButton = styled(GoogleLogin)` - background-color: fff; - border : 1px solid rgb(66, 133, 244); - box-shadow: 0 0 0 1px #4285f4 !important; - :hover { - background-color: #f4f4f4 !important; - } -` - const TermosDeUsoStyled = styled.div` font-family: 'Roboto', sans serif, 'Helvetica Neue', Helvetica, Arial, sans-serif; color : #666; @@ -223,7 +249,6 @@ const H2Styled = styled.h2` font-weight : lighter; justify-content: space-between; font-family: 'Roboto', sans serif, 'Helvetica Neue', Helvetica, Arial, sans-serif !important; - padding: 10px 26px 0 26px; text-align: center; letter-spacing: .005em; ` @@ -257,15 +282,15 @@ const StyledAnchor = styled.a` color : #00bcd4; text-decoration : none; ` -const StyledCloseModalButton = styled(Button)` - display : inline-block; - position : relative; - float : right !important; - margin-right : -8px; - background : transparent; - min-width: 0 !important; - width : 40px; -` +//const StyledCloseModalButton = styled(Button)` +// display : inline-block; +// position : relative; +// float : right !important; +// margin-right : -8px; +// background : transparent; +// min-width: 0 !important; +// width : 40px; +//` const ConfirmContainerStyled = styled.div` display : flex; @@ -273,6 +298,7 @@ const ConfirmContainerStyled = styled.div` align-items : center; justify-content : center; box-sizing : border-box; + font-size : 13px; ` const StyledSignUpButton = styled(Button)` diff --git a/src/Components/SignUpModal.js b/src/Components/SignUpModal.js index 5300aab6..8a9ffb20 100644 --- a/src/Components/SignUpModal.js +++ b/src/Components/SignUpModal.js @@ -63,26 +63,32 @@ export default function SignUpModal (props) { const { state, dispatch } = useContext(Store) const handleLoginInfo = (newLogin) => { - + console.log(state.currentUser) axios.post(`${apiUrl}/auth`, { - name : newLogin.nomeCompleto, + name : newLogin.name, email: newLogin.email, - password : newLogin.senha, - password_confirmation : newLogin.senha + password : newLogin.password, + password_confirmation : newLogin.senha, + terms_of_service:true, + avatar: "" } ).then( (response) => { dispatch ( { type: 'USER_SIGNED_UP', userLoggedIn: !state.userIsLoggedIn, login: { - username : newLogin.username, - email : newLogin.email, + id : response.data.id, + username : response.data.name, + email : response.data.email, accessToken : response.headers['access-token'], - client : response.headers.client + clientToken : response.headers.client, + userAvatar : response.data.avatar_file_name, + userCover : response.data.cover_file_name } } ) + console.log(state.currentUser) props.handleClose() }, (error) => { console.log(':(') diff --git a/src/Components/TabAtividades.js b/src/Components/TabAtividades.js deleted file mode 100644 index e69de29b..00000000 diff --git a/src/Components/TabPanelAtividades.js b/src/Components/TabPanelAtividades.js new file mode 100644 index 00000000..24fa2b0c --- /dev/null +++ b/src/Components/TabPanelAtividades.js @@ -0,0 +1,52 @@ +import React, {useContext} from 'react' +import styled from 'styled-components' +import { Container } from 'react-grid-system' + +const MainContentContainer = styled(Container)` + background-color : #f4f4f4; + color : #666; + padding-bottom : 30px; +` +const DivNoPad = styled.div` + margin-bottom : 0; + padding-bottom : 0; +` + +const ColMDNoPad = styled.div` + padding : 0; + width : 100%; + float : left; +` + +const TituloDiv = styled.div` + font-size : 14px; + font-weight : 500; + letter-spacing : .01em; + line-height : 1.2em; +` + +const SubHeader = styled.div` + padding-top : 16px; + background-color : #fff; + padding-bottom : 0; +` + +export default function TabPanelAtividades (props) { + return ( + + <MainContentContainer> + <DivNoPad> + <ColMDNoPad> + <TituloDiv> + <SubHeader> + <div style={{display:"block", zIndex:"1", position:"relative"}}> + <p style={{marginBottom:"40px"}}>Todas Notificações</p> + </div> + </SubHeader> + </TituloDiv> + </ColMDNoPad> + </DivNoPad> + </MainContentContainer> + + ) +} diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index f30f99e9..0b7ab047 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -31,10 +31,10 @@ import EditIcon from '@material-ui/icons/Edit'; import CheckDecagram from '../img/check-decagram-gray.svg' import Tabs from '@material-ui/core/Tabs'; import Tab from '@material-ui/core/Tab'; +import TabPanelAtividades from '../Components/TabPanelAtividades.js' export default function UserPage (props){ const {state, dispatch} = useContext(Store) - const coverImg = '' const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) const [value, setValue] = useState(0); @@ -77,10 +77,10 @@ export default function UserPage (props){ <ContainerUserProfile> <HeaderContainer> <CoverContainer> - {coverImg == "" && <span>cover art</span>} + <img src={state.currentUser.userCover} alt = "user cover avatar" style= {{width:"100%", height:"100%", objectFit : "cover" }}/> <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" /> <label htmlFor="icon-button-file"> - <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden"}}>ALTERAR CAPA</span>} placement="left"> + <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left"> <IconButton style={{position:"absolute",right:"0",top:"0",color:"#fff"}}color="primary" aria-label="upload picture" component="span"> <PhotoCamera /> </IconButton> @@ -88,7 +88,7 @@ export default function UserPage (props){ </label> </CoverContainer> <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}> - <img src={state.currentUser.userAvatar}/> + <img src={state.currentUser.userAvatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/> <ChangeAvatarDiv style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}> <span>Alterar Foto</span> </ChangeAvatarDiv> @@ -155,6 +155,7 @@ export default function UserPage (props){ </ContainerUserProfile> </MainContainerDesktop> </div> + <TabPanelAtividades value={value} index = {0}/> </HeaderDiv> </React.Fragment> ] diff --git a/src/Store.js b/src/Store.js index eaacb6bb..6c19780f 100644 --- a/src/Store.js +++ b/src/Store.js @@ -35,13 +35,15 @@ const initialState = { height: 0 }, currentUser: { + id : '', username : 'Horstmann', email : '', accessToken : '', - client : '', + clientToken : '', education : '', isCollaborativeTeacher : false, - userAvatar : '' + userAvatar : '', + userCover : '' } } diff --git a/src/img/logo_google.svg b/src/img/logo_google.svg new file mode 100644 index 00000000..a939ddc1 --- /dev/null +++ b/src/img/logo_google.svg @@ -0,0 +1 @@ +<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18"><defs><style>.cls-1{fill:#4285f4;}.cls-2{fill:#34a853;}.cls-3{fill:#fbbc05;}.cls-4{fill:#ea4335;}.cls-5{fill:none;}</style></defs><title>btn_google_dark_normal_ios</title><g id="Google-Button"><g id="btn_google_dark_normal" data-name="btn google dark normal"><g id="logo_googleg_48dp" data-name="logo googleg 48dp"><path id="Shape" class="cls-1" d="M18.64,10.2a10.341,10.341,0,0,0-.164-1.841H10v3.481h4.844a4.14,4.14,0,0,1-1.8,2.716V16.82h2.909A8.777,8.777,0,0,0,18.64,10.2h0Z" transform="translate(-1 -1)"/><path id="Shape-2" data-name="Shape" class="cls-2" d="M10,19a8.592,8.592,0,0,0,5.956-2.18l-2.909-2.258A5.43,5.43,0,0,1,4.964,11.71H1.957v2.332A9,9,0,0,0,10,19h0Z" transform="translate(-1 -1)"/><path id="Shape-3" data-name="Shape" class="cls-3" d="M4.964,11.71a5.321,5.321,0,0,1,0-3.42V5.958H1.957a9.011,9.011,0,0,0,0,8.084L4.964,11.71h0Z" transform="translate(-1 -1)"/><path id="Shape-4" data-name="Shape" class="cls-4" d="M10,4.58a4.862,4.862,0,0,1,3.44,1.346l2.581-2.581A8.649,8.649,0,0,0,10,1,9,9,0,0,0,1.957,5.958L4.964,8.29A5.364,5.364,0,0,1,10,4.58h0Z" transform="translate(-1 -1)"/><path id="Shape-5" data-name="Shape" class="cls-5" d="M1,1H19V19H1V1Z" transform="translate(-1 -1)"/></g></g></g></svg> \ No newline at end of file -- GitLab From 5ed85c6c7b42a7393f737e7f5bac7fecb4a7d299 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 4 Feb 2020 19:43:53 -0300 Subject: [PATCH 05/29] trablhando no layout das abas da pagina de usuario --- src/App.js | 4 +- src/Components/FormInput.js | 2 + src/Components/MenuList.js | 12 +- src/Components/TabPanelAtividades.js | 109 ++++--- src/Components/TabPanelColecoes.js | 85 ++++++ src/Components/TabPanelFavoritos.js | 85 ++++++ src/Components/TabPanelMeusRecursos.js | 153 ++++++++++ src/Components/TabPanelRede.js | 85 ++++++ src/Pages/Contact.js | 401 +++++++++++++++++++++++++ src/Pages/UserPage.js | 247 ++++++++------- src/Pages/UserTerms.js | 2 +- src/img/banner-sobre.jpg | Bin 0 -> 90596 bytes 12 files changed, 1034 insertions(+), 151 deletions(-) create mode 100644 src/Components/TabPanelColecoes.js create mode 100644 src/Components/TabPanelFavoritos.js create mode 100644 src/Components/TabPanelMeusRecursos.js create mode 100644 src/Components/TabPanelRede.js create mode 100644 src/Pages/Contact.js create mode 100644 src/img/banner-sobre.jpg diff --git a/src/App.js b/src/App.js index a02de521..517c0b30 100644 --- a/src/App.js +++ b/src/App.js @@ -32,7 +32,7 @@ import {BrowserRouter, Switch, Route} from 'react-router-dom'; import { Store } from './Store' import TermsPage from './Pages/TermsPage.js' import PublicationPermissionsPage from './Pages/PublicationPermissionsPage.js' - +import Contact from './Pages/Contact.js' export default function App(){ // eslint-disable-next-line @@ -68,6 +68,7 @@ export default function App(){ <BrowserRouter> <Header /> <div style={{backgroundImage: "linear-gradient(to right,#ff7f00,#e81f4f,#673ab7,#00bcd4)", height:"5px"}}></div> + <link href="https://fonts.googleapis.com/css?family=Kalam|Pompiere|Roboto&display=swap" rel="stylesheet"/> <Switch> <Route path="/" exact={true} component={Home}/> <Route path="/busca" component={Search} /> @@ -77,6 +78,7 @@ export default function App(){ <Route path="/permission" component={PublicationPermissionsPage}/> <Route path="/termos" component={UserTerms}/> <Route path="/teste" component={Teste}/> + <Route path="/contato" component = {Contact}/> </Switch> <EcFooter/> <GNUAGPLfooter/> diff --git a/src/Components/FormInput.js b/src/Components/FormInput.js index e6bd1c68..bcbc40fb 100644 --- a/src/Components/FormInput.js +++ b/src/Components/FormInput.js @@ -61,6 +61,8 @@ export default function FormInput(props) { onChange = {props.handleChange} InputProps={{className: classes.input}} required = {props.required} + error = {props.error} + helperText ={props.help} style={{width:"100%"}} /> ); diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js index 1268edb7..0402b7e2 100644 --- a/src/Components/MenuList.js +++ b/src/Components/MenuList.js @@ -141,12 +141,12 @@ const StyledExitToAppIcon = styled(ExitToAppIcon) ` justify-content : flex-end; ` const StyledMenuItem = styled(MenuItem)` - display : flex; - justify-content: space-between; - width : 100%; - font-size : 14px; - color : #a5a5a5; - padding : 5px 20px; + display : flex !important; + justify-content: space-between !important; + width : 100% !important; + font-size : 14px !important; + color : #a5a5a5 !important; + padding : 5px 20px !important; ` //import React from 'react'; diff --git a/src/Components/TabPanelAtividades.js b/src/Components/TabPanelAtividades.js index 24fa2b0c..f65115ca 100644 --- a/src/Components/TabPanelAtividades.js +++ b/src/Components/TabPanelAtividades.js @@ -1,52 +1,85 @@ import React, {useContext} from 'react' import styled from 'styled-components' import { Container } from 'react-grid-system' +import Paper from '@material-ui/core/Paper'; +import Button from '@material-ui/core/Button'; -const MainContentContainer = styled(Container)` - background-color : #f4f4f4; - color : #666; - padding-bottom : 30px; -` -const DivNoPad = styled.div` - margin-bottom : 0; - padding-bottom : 0; -` +export default function TabPanelAtividades (props) { + return ( + <ContainerDivStyled> + <Paper elevation={3}> + <div> + <DivTitulo> + <InnerDivTitulo> + <TituloContent> + <p style={{margin:"0 0 10px", marginBottom : "40px"}}>Todas Notificações</p> + </TituloContent> + </InnerDivTitulo> + </DivTitulo> + {/*some sort of map with a list of notifications idk what though*/} + <div> + <LoadMoreButton><span>CARREGAR MAIS 4</span></LoadMoreButton> + <LoadMoreButton><span>CARREGAR MAIS 20</span></LoadMoreButton> + </div> + </div> + </Paper> + </ContainerDivStyled> + ) +} -const ColMDNoPad = styled.div` - padding : 0; - width : 100%; - float : left; +const LoadMoreButton = styled(Button)` + outline : none !important; + display : inline-block !important; + cusor : pointer !important; + min-height : 36px !important; + min-widht : 88px !important; + line-height: 36px !important; + vertical-align: middle !important; + border : 0 !important; + padding : 0 px !important; + margin : 6px 8px !important; + text-decoration : none !important; + font-weight : 500 !important; + overflow : hidden !important; + text-transform : uppercase !important; + font-size : 14px !important; ` -const TituloDiv = styled.div` - font-size : 14px; - font-weight : 500; - letter-spacing : .01em; - line-height : 1.2em; +const TituloContent = styled.div` + display : block; + z-index : 1; + position : relative; + font-family: Roboto, sans-serif; + font-weight : ligther; ` -const SubHeader = styled.div` +const InnerDivTitulo = styled.div` + margin-top : 24px; padding-top : 16px; - background-color : #fff; - padding-bottom : 0; + padding-left : 16px; + padding-right : 16px; + font-size: 30px; + font-weight: lighter; + color: #6e6e6e; + text-align: center; ` -export default function TabPanelAtividades (props) { - return ( - <MainContentContainer> - <DivNoPad> - <ColMDNoPad> - <TituloDiv> - <SubHeader> - <div style={{display:"block", zIndex:"1", position:"relative"}}> - <p style={{marginBottom:"40px"}}>Todas Notificações</p> - </div> - </SubHeader> - </TituloDiv> - </ColMDNoPad> - </DivNoPad> - </MainContentContainer> +const DivTitulo = styled.div` + display : flex; + justify-content : center; + font-size: 14px; + font-weight: 500; + letter-spacing: .01em; + line-height: 1.2em; + margin : 0; + border-bottom: 1px solid #eee; +` - ) -} +const ContainerDivStyled = styled.div` + max-width : 1140px; + margin-left : auto; + margin-right : auto; + margin-left : 20em; + background-color: #fff; +` diff --git a/src/Components/TabPanelColecoes.js b/src/Components/TabPanelColecoes.js new file mode 100644 index 00000000..2dd1c80f --- /dev/null +++ b/src/Components/TabPanelColecoes.js @@ -0,0 +1,85 @@ +import React, {useContext} from 'react' +import styled from 'styled-components' +import { Container } from 'react-grid-system' +import Paper from '@material-ui/core/Paper'; +import Button from '@material-ui/core/Button'; + +export default function TabPanelAtividades (props) { + return ( + <ContainerDivStyled> + <Paper elevation={3}> + <div> + <DivTitulo> + <InnerDivTitulo> + <TituloContent> + <p style={{margin:"0 0 10px", marginBottom : "40px"}}>Coleções</p> + </TituloContent> + </InnerDivTitulo> + </DivTitulo> + {/*some sort of map with a list of notifications idk what though*/} + <div> + <LoadMoreButton><span>CARREGAR MAIS 4</span></LoadMoreButton> + <LoadMoreButton><span>CARREGAR MAIS 20</span></LoadMoreButton> + </div> + </div> + </Paper> + </ContainerDivStyled> + ) +} + +const LoadMoreButton = styled(Button)` + outline : none !important; + display : inline-block !important; + cusor : pointer !important; + min-height : 36px !important; + min-widht : 88px !important; + line-height: 36px !important; + vertical-align: middle !important; + border : 0 !important; + padding : 0 px !important; + margin : 6px 8px !important; + text-decoration : none !important; + font-weight : 500 !important; + overflow : hidden !important; + text-transform : uppercase !important; + font-size : 14px !important; +` + +const TituloContent = styled.div` + display : block; + z-index : 1; + position : relative; + font-family: Roboto, sans-serif; + font-weight : ligther; +` + +const InnerDivTitulo = styled.div` + margin-top : 24px; + padding-top : 16px; + padding-left : 16px; + padding-right : 16px; + font-size: 30px; + font-weight: lighter; + color: #6e6e6e; + text-align: center; +` + + +const DivTitulo = styled.div` + display : flex; + justify-content : center; + font-size: 14px; + font-weight: 500; + letter-spacing: .01em; + line-height: 1.2em; + margin : 0; + border-bottom: 1px solid #eee; +` + +const ContainerDivStyled = styled.div` + max-width : 1140px; + margin-left : auto; + margin-right : auto; + margin-left : 20em; + background-color: #fff; +` diff --git a/src/Components/TabPanelFavoritos.js b/src/Components/TabPanelFavoritos.js new file mode 100644 index 00000000..287b765d --- /dev/null +++ b/src/Components/TabPanelFavoritos.js @@ -0,0 +1,85 @@ +import React, {useContext} from 'react' +import styled from 'styled-components' +import { Container } from 'react-grid-system' +import Paper from '@material-ui/core/Paper'; +import Button from '@material-ui/core/Button'; + +export default function TabPanelAtividades (props) { + return ( + <ContainerDivStyled> + <Paper elevation={3}> + <div> + <DivTitulo> + <InnerDivTitulo> + <TituloContent> + <p style={{margin:"0 0 10px", marginBottom : "40px"}}>Favoritos</p> + </TituloContent> + </InnerDivTitulo> + </DivTitulo> + {/*some sort of map with a list of notifications idk what though*/} + <div> + <LoadMoreButton><span>CARREGAR MAIS 4</span></LoadMoreButton> + <LoadMoreButton><span>CARREGAR MAIS 20</span></LoadMoreButton> + </div> + </div> + </Paper> + </ContainerDivStyled> + ) +} + +const LoadMoreButton = styled(Button)` + outline : none !important; + display : inline-block !important; + cusor : pointer !important; + min-height : 36px !important; + min-widht : 88px !important; + line-height: 36px !important; + vertical-align: middle !important; + border : 0 !important; + padding : 0 px !important; + margin : 6px 8px !important; + text-decoration : none !important; + font-weight : 500 !important; + overflow : hidden !important; + text-transform : uppercase !important; + font-size : 14px !important; +` + +const TituloContent = styled.div` + display : block; + z-index : 1; + position : relative; + font-family: Roboto, sans-serif; + font-weight : ligther; +` + +const InnerDivTitulo = styled.div` + margin-top : 24px; + padding-top : 16px; + padding-left : 16px; + padding-right : 16px; + font-size: 30px; + font-weight: lighter; + color: #6e6e6e; + text-align: center; +` + + +const DivTitulo = styled.div` + display : flex; + justify-content : center; + font-size: 14px; + font-weight: 500; + letter-spacing: .01em; + line-height: 1.2em; + margin : 0; + border-bottom: 1px solid #eee; +` + +const ContainerDivStyled = styled.div` + max-width : 1140px; + margin-left : auto; + margin-right : auto; + margin-left : 20em; + background-color: #fff; +` diff --git a/src/Components/TabPanelMeusRecursos.js b/src/Components/TabPanelMeusRecursos.js new file mode 100644 index 00000000..e1e714bd --- /dev/null +++ b/src/Components/TabPanelMeusRecursos.js @@ -0,0 +1,153 @@ +import React, {useContext} from 'react' +import styled from 'styled-components' +import { Container } from 'react-grid-system' +import Paper from '@material-ui/core/Paper'; +import Button from '@material-ui/core/Button'; + +export default function TabPanelAtividades (props) { + return ( + <React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + + <DivTitulo> + <StyledP>Recurso Publicado <b style={{fontWeight:"700", fontSize:"20px"}}>(0)</b></StyledP> + <StyledHR/> + </DivTitulo> + <div> + <DivTextoNoPublications> + <DivConteudoNaoPublicado> + <NoPubSpan>Você ainda não publicou nenhum Recurso!</NoPubSpan> + </DivConteudoNaoPublicado> + </DivTextoNoPublications> + </div> + </Paper> + </ContainerDivStyled> + + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Rascunhos<b style={{fontWeight:"700", fontSize:"20px"}}>(7)</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> //REMOVER ISSO + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 7</p> + <ButtonMostrarMais> + <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> + </ButtonMostrarMais> + </BtnAlinhaRecPvt> + </div> + </Paper> + </ContainerDivStyled> + + <ContainerDivStyled> + <Paper elevation={3}> + + <DivTitulo> + <StyledP>Recurso sendo avaliado pela curadoria <b style={{fontWeight:"700", fontSize:"20px"}}>(0)</b></StyledP> + <StyledHR/> + </DivTitulo> + <div> + <DivTextoNoPublications> + <DivConteudoNaoPublicado> + <NoPubSpan>Você não tem nenhum recurso sendo avaliado pelos curadores.</NoPubSpan> + </DivConteudoNaoPublicado> + </DivTextoNoPublications> + </div> + </Paper> + </ContainerDivStyled> + </React.Fragment> + ) +} + +const ButtonMostrarMais = styled(Button)` + background-color : #ff7f00 !important; + font-size: 14px !important; + font-weight: 500 !important; + height: 36px !important; + border-radius: 3px !important; + padding-left: 16px !important; + padding-right: 16px !important; + box-shadow: 0 2px 5px 0 rgba(0,0,0,.26) !important; + outline : none !important; + min-width : 88px !important; + vertical-align : middle !important; + margin : 6px 8px !important; + text-decoration : none !important; +` + +const BtnAlinhaRecPvt = styled.div` + text-align : center; + width : 100%; + float : left; + position : relative; + min-height : 1px; + padding-right : 15px; + padding-left : 15px; +` + +const DivContainerRecursosPublicados = styled.div` + width : 100%; + float : left; + position : relative; + min-height : 1px; + padding-right : 15px; + padding-left : 15px; +` + +const NoPubSpan = styled.span` + font-size : 24px; + font-family : Roboto; + font-weight : lighter; +` + +const DivConteudoNaoPublicado = styled.div` + position : relative; + top : 50%; + transform : translateY(-50%); +` + +const DivTextoNoPublications = styled.div` + height : 360px; + text-align : center; + width : 100%; + padding-right : 15px; + padding-left : 15px; +` + +const StyledHR = styled.hr` + border-color : #757575; + border-top: 1px solid #eee; + margin : 0 15px 0 15px; + padding-right : 0; + padding-left : 0; +` + +const StyledP = styled.p` + text-align : left; + margin-top : 10px; + padding-left : 15px; + padding-right : 15px; + font-weight : 300; + font-size : 1.875em; +` + +const DivTitulo = styled.div` + padding : 0; + margin-bottom : 10px; + width : 100; + display: flex; + flex-direction : column; +` + +const ContainerDivStyled = styled.div` + max-width : 1140px; + margin-left : auto; + margin-right : auto; + margin-left : 20em; + margin-bottom: 30px; + background-color: #fff; +` diff --git a/src/Components/TabPanelRede.js b/src/Components/TabPanelRede.js new file mode 100644 index 00000000..7dfefd6d --- /dev/null +++ b/src/Components/TabPanelRede.js @@ -0,0 +1,85 @@ +import React, {useContext} from 'react' +import styled from 'styled-components' +import { Container } from 'react-grid-system' +import Paper from '@material-ui/core/Paper'; +import Button from '@material-ui/core/Button'; + +export default function TabPanelAtividades (props) { + return ( + <ContainerDivStyled> + <Paper elevation={3}> + <div> + <DivTitulo> + <InnerDivTitulo> + <TituloContent> + <p style={{margin:"0 0 10px", marginBottom : "40px"}}>Rede</p> + </TituloContent> + </InnerDivTitulo> + </DivTitulo> + {/*some sort of map with a list of notifications idk what though*/} + <div> + <LoadMoreButton><span>CARREGAR MAIS 4</span></LoadMoreButton> + <LoadMoreButton><span>CARREGAR MAIS 20</span></LoadMoreButton> + </div> + </div> + </Paper> + </ContainerDivStyled> + ) +} + +const LoadMoreButton = styled(Button)` + outline : none !important; + display : inline-block !important; + cusor : pointer !important; + min-height : 36px !important; + min-widht : 88px !important; + line-height: 36px !important; + vertical-align: middle !important; + border : 0 !important; + padding : 0 px !important; + margin : 6px 8px !important; + text-decoration : none !important; + font-weight : 500 !important; + overflow : hidden !important; + text-transform : uppercase !important; + font-size : 14px !important; +` + +const TituloContent = styled.div` + display : block; + z-index : 1; + position : relative; + font-family: Roboto, sans-serif; + font-weight : ligther; +` + +const InnerDivTitulo = styled.div` + margin-top : 24px; + padding-top : 16px; + padding-left : 16px; + padding-right : 16px; + font-size: 30px; + font-weight: lighter; + color: #6e6e6e; + text-align: center; +` + + +const DivTitulo = styled.div` + display : flex; + justify-content : center; + font-size: 14px; + font-weight: 500; + letter-spacing: .01em; + line-height: 1.2em; + margin : 0; + border-bottom: 1px solid #eee; +` + +const ContainerDivStyled = styled.div` + max-width : 1140px; + margin-left : auto; + margin-right : auto; + margin-left : 20em; + background-color: #fff; +` diff --git a/src/Pages/Contact.js b/src/Pages/Contact.js new file mode 100644 index 00000000..0c0fccd5 --- /dev/null +++ b/src/Pages/Contact.js @@ -0,0 +1,401 @@ +/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana + +This file is part of Plataforma Integrada MEC. + +Plataforma Integrada MEC is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Plataforma Integrada MEC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ + +import React, { Component, useState, useEffect } from 'react'; +import styled from 'styled-components'; +import Banner1 from '../img/banner-sobre.jpg'; +import { TextField } from '@material-ui/core'; +import FormInput from "../Components/FormInput.js" +import axios from 'axios' +import {apiUrl} from '../env'; + + +const Seção1 = styled.div ` + width: 100%; + background-image: url(${Banner1}); + background-size: cover; + background-position: bottom center; + height: 250px; + color:#fff; + line-height: 1.1; + text-align: center; + padding-top: 120px; + + h2 { + font-family: Pompiere,cursive; + font-size: 52px; + color:#fff; + margin: 0; + padding-left: 0; + padding-right: 0; + font-weight: 500; + } + + h3 { + margin-top: 20px; + margin-bottom: 10px; + font-family: Roboto,sans-serif; + font-size: 30px; + font-weight: lighter; + + } +` + +const Seção2 = styled.div ` + height: 708px; + background-color: #f4f4f4; + display: flex; + justify-content: center; + align-items: center; +` +const Button = styled.button` + + background-color: #00acc1; + color:#fff; + font-family: Roboto,sans-serif; + font-size: 14px; + font-weight: 500; + height: 36px; + border-radius: 3px; + padding-left: 16px; + padding-right: 16px; + box-shadow: 0 2px 5px 0 rgba(0,0,0,.26); + outline: none; + position: relative; + cursor: pointer; + min-height: 36px; + min-width: 88px; + line-height: 36px; + vertical-align: middle; + align-items: center; + text-align: center; + border-radius: 3px; + box-sizing: border-box; + user-select: none; + border: 0; + padding: 0 6px; + padding-right: 6px; + padding-left: 6px; + margin: 6px 8px; + + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + font-style: inherit; + font-variant: inherit; + font-family: inherit; + text-decoration: none; + overflow: hidden; + transition: box-shadow .4s cubic-bezier(.25,.8,.25,1),background-color .4s cubic-bezier(.25,.8,.25,1); + + +` + +const Formulário = styled.div ` + background-color: #fff; + box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24); + padding: 40px; + height: 560px; + width: 480px; + color: #666; + + form .inputBlock { + margin-block: 22px; + + } + + form .inputBlock label { + font-size: 14px; + font-weight: bold; + display: block; + + } + + form .inputBlock input { + width: 100%; + height: 32px; + font-size: 14px; + border: 0; + border-bottom: 1px solid #eee; + + } + + form .inputBlock.Message input { + height: 131px; + } + + form buttom[type=submit] { + width: 100%; + border: 0; + margin-top: 30px; + background: #7d40e7 + border-radius: 2px; + padding: 15px 20px; + font-size: 16px; + font-weight: bold; + color: #fff; + cursor: pointer; + transition: background 0.5s; + + } + + form buttom[type=submit]:hover { + background: #6931ac + } + + + h2 { + font-size: 24px; + font-weight: lighter; + margin-bottom: 50px; + margin-top: 20px; + text-align: center; + + } +` + + + +const Seção3 = styled.div ` + height: 127px; + background-color: #f4f4f4; + color:#666; + line-height: 1.42857143; + font-size:18px; + text-align: center; + padding-top: 70px; + + + p { + margin: 0 0 10px 0; + } + + +` + +function validateNome (nome) { + let flag = false + if(nome.length === 0) { + flag = true + } + + return flag +} + + +function validateMensagem (mensagem) { + let flag = false + if(mensagem.length === 0) { + flag = true + } + + return flag +} + +function validateEmail (email) { + let flag = false + if (email.split("").filter(x => x === "@").length !== 1) { + flag = true + } + return flag +} + + + +function Contact (props) { + + const [nome, handleNome] = useState( + { + dict : { + key:false, + value:"" + } + }) + const [email, handleEmail] = useState( + { + dict : { + key:false, + value:"" + } + }) + const [mensagem, handleMensagem] = useState( + { + dict : { + key: false, + value:"" + } + }) + + + const preencheNome = (e) => { + const aux2 = e.target.value + const flag = validateNome(aux2) + handleNome({...nome, dict : { + key : flag, + value : e.target.value + }}) + console.log(nome) + } + + const preencheEmail = (e) => { + const aux = e.target.value + const flag = validateEmail(aux) + handleEmail({...email, dict : { + key : flag, + value : e.target.value + }}) + console.log(email) + } + + const preencheMensagem = (e) => { + const msg = e.target.value + console.log(msg) + let flag = validateMensagem(msg) + handleMensagem({...mensagem, dict : { + key : flag, + value : msg + }}) + console.log(mensagem) + } + + const limpaTudo = () => { + + handleNome({ + dict : { + key: false, + value:"" + }} + ); + + handleEmail({ + dict : { + key: false, + value:"" + }} + ) + + handleMensagem({ + dict : { + key: false, + value:"" + }} + ) + + } + + + + const onSubmit = (e) => { + //on submit we should prevent the page from refreshing + e.preventDefault(); //though this is arguable + console.log(!(nome.dict.key && email.dict.key && mensagem.dict.key )) + // Se não houver erro em nunhum dos campos E nenhum dos campos for vazio: a página faz o contato com o backend e os campos ficam em branco no formulário + if (!(nome.dict.key && email.dict.key && mensagem.dict.key ) && ((nome.dict.value.length > 0) && (email.dict.value.length > 0) && (mensagem.dict.value.length > 0))) { + + axios.post(`${apiUrl}/contacts`, + { + contact : { + name: nome.dict.value, + email: email.dict.value, + message: mensagem.dict.value + } + + } + ).then() + + + + limpaTudo(); + + } + + + + } + + + + return( + <> + <link href="https://fonts.googleapis.com/css?family=Kalam|Pompiere|Roboto:300,400&display=swap" rel="stylesheet"/> + <Seção1> + <h2>CONTATO</h2> + <h3>Quer enviar uma mensagem?</h3> + </Seção1> + + <Seção2> + + <Formulário noValidate autoComplete="off"> + <h2>Entre em contato para enviar dúvidas,<br/>sugestões ou crÃticas</h2> + <form onSubmit={e => onSubmit(e)}> + <FormInput + inputType={"text"} + name={"nome"} + value={nome.dict.value} + placeholder={"Nome *"} + error = {nome.dict.key} + help = {nome.dict.key ? "insira seu nome para o contato " : ""} + handleChange={e => preencheNome(e)} + /> + <br/> + <FormInput + inputType={"text"} + name={"email"} + value={email.dict.value} + placeholder={"E-mail *"} + error = {email.dict.key} + help = {email.dict.key ? "Formato de e-mail incorreto ou vazio, tente : usuario@provedor.com" : ""} + handleChange={e => preencheEmail(e)} + /> + <br/> + <br/> + <FormInput + inputType={"text"} + name={"mensagem"} + value={mensagem.dict.value} + placeholder={"Mensagem *"} + multi = {true} + rows = "5" + rowsMax = "6" + error = {mensagem.dict.key} + help = {mensagem.dict.key ? "Faltou escrever sua mensagem de sugestão, crÃtica ou dúvida." : "Escreva sua mensagem no campo acima."} + handleChange={e => preencheMensagem(e)} + /> + <br/> + <br/> + <div style={{display: "flex", justifyContent: "center"}}> + <Button onClick={e => onSubmit(e)} >ENVIAR MENSAGEM</Button> + </div> + </form> + + </Formulário> + </Seção2> + + <Seção3> + + <span>MEC - Ministério da Educação </span> + <p>Endereço: Esplanada dos Ministérios Bloco L - Ed.Sede e Anexos. CEP: 70.047-900 - BrasÃlia/DF. Telefone: 0800 616161</p> + + </Seção3> + </> + ); + +} + +export default Contact; diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 0b7ab047..f6bd664c 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -31,7 +31,12 @@ import EditIcon from '@material-ui/icons/Edit'; import CheckDecagram from '../img/check-decagram-gray.svg' import Tabs from '@material-ui/core/Tabs'; import Tab from '@material-ui/core/Tab'; +import Paper from '@material-ui/core/Paper'; import TabPanelAtividades from '../Components/TabPanelAtividades.js' +import TabPanelMeusRecursos from '../Components/TabPanelMeusRecursos.js' +import TabPanelFavoritos from '../Components/TabPanelFavoritos.js' +import TabPanelColecoes from '../Components/TabPanelColecoes.js' +import TabPanelRede from '../Components/TabPanelRede.js' export default function UserPage (props){ const {state, dispatch} = useContext(Store) @@ -52,110 +57,119 @@ export default function UserPage (props){ return ( <> + <link href="https://fonts.googleapis.com/css?family=Roboto:100,400,500&display=swap" rel="stylesheet"/> { state.userIsLoggedIn? ( [ <React.Fragment> <HeaderDiv> - <BreadcrumbsDiv> - <StyledBreadcrumbs> - <Link href="/" style={{color:"#00bcd4"}}> - Página Inicial - </Link> - <span style={{color:"#a5a5a5"}}> - Minha área - </span> - <span style={{color:"#a5a5a5"}}> - Atividades - </span> - </StyledBreadcrumbs> - </BreadcrumbsDiv> + <ContainerNoPad> + <BreadcrumbsDiv> + <StyledBreadcrumbs> + <Link href="/" style={{color:"#00bcd4"}}> + Página Inicial + </Link> + <span style={{color:"#a5a5a5"}}> + Minha área + </span> + <span style={{color:"#a5a5a5"}}> + Atividades + </span> + </StyledBreadcrumbs> + </BreadcrumbsDiv> - <div style={{display:"flex", flexDirection:"column"}}> - <MainContainerDesktop> - <ContainerUserProfile> - <HeaderContainer> - <CoverContainer> - <img src={state.currentUser.userCover} alt = "user cover avatar" style= {{width:"100%", height:"100%", objectFit : "cover" }}/> - <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" /> - <label htmlFor="icon-button-file"> - <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left"> - <IconButton style={{position:"absolute",right:"0",top:"0",color:"#fff"}}color="primary" aria-label="upload picture" component="span"> - <PhotoCamera /> - </IconButton> - </Tooltip> - </label> - </CoverContainer> - <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}> - <img src={state.currentUser.userAvatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/> - <ChangeAvatarDiv style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}> - <span>Alterar Foto</span> - </ChangeAvatarDiv> - </ProfileAvatarDiv> - <UserProfileInfoDiv> - <p style={{fontSize:"28px", color:"#fff", marginBottom:"2px", fontWeight:"500"}}>{state.currentUser.username}</p> - <div style={{fontSize:"14px", color:"#fff", marginBottom:"2px"}}> - <p>{state.currentUser.education}</p> - </div> - </UserProfileInfoDiv> - <EditProfileAnchor href="/perfil/configuracoes/editarperfil"> - <Button> - <EditIcon style={{marginRight:"5px", verticalAlign:"middle"}}/> <span>EDITAR PERFIL</span> - </Button> - </EditProfileAnchor> - </HeaderContainer> - <CheckTeacherDiv> - <> - { - state.isCollaborativeTeacher ? - ( - [ - <> - <img src={CheckDecagram} style={{color:"#00bcd4"}}/> - <span>Professor(a)</span> - </> - ] - ) - : - ( - [ - <p style={{fontSize:"15px", lineHeight:"22px", textAlign:"left", margin:"0 0 10px"}}> - <span style={{cursor:"pointer"}}> - <span style={{paddingRight:"5px"}}> - <img src={CheckDecagram}/> + <div style={{display:"flex", flexDirection:"column"}}> + <MainContainerDesktop> + <Paper elevation={3} style= {{width:"max-content"}}> + <ContainerUserProfile> + <HeaderContainer> + <CoverContainer> + <img src={state.currentUser.userCover} alt = "user cover avatar" style= {{width:"100%", height:"100%", objectFit : "cover" }}/> + <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" /> + <label htmlFor="icon-button-file"> + <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left"> + <IconButton style={{position:"absolute",right:"0",top:"0",color:"#fff"}}color="primary" aria-label="upload picture" component="span"> + <PhotoCamera /> + </IconButton> + </Tooltip> + </label> + </CoverContainer> + <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}> + <img src={state.currentUser.userAvatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/> + <ChangeAvatarDiv style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}> + <span>Alterar Foto</span> + </ChangeAvatarDiv> + </ProfileAvatarDiv> + <UserProfileInfoDiv> + <p style={{fontSize:"28px", color:"#fff", marginBottom:"2px", fontWeight:"500"}}>{state.currentUser.username}</p> + <div style={{fontSize:"14px", color:"#fff", marginBottom:"2px"}}> + <p>{state.currentUser.education}</p> + </div> + </UserProfileInfoDiv> + <EditProfileAnchor href="/perfil/configuracoes/editarperfil"> + <Button> + <EditIcon style={{marginRight:"5px", verticalAlign:"middle"}}/> <span>EDITAR PERFIL</span> + </Button> + </EditProfileAnchor> + </HeaderContainer> + <CheckTeacherDiv> + <> + { + state.isCollaborativeTeacher ? + ( + [ + <> + <img src={CheckDecagram} style={{color:"#00bcd4"}}/> + <span>Professor(a)</span> + </> + ] + ) + : + ( + [ + <p style={{fontSize:"15px", lineHeight:"22px", textAlign:"left", margin:"0 0 10px"}}> + <span style={{cursor:"pointer"}}> + <span style={{paddingRight:"5px"}}> + <img src={CheckDecagram}/> + </span> + Você é professor(a) e gostaria de publicar recursos? + <span style={{color:"#00bcd4"}}> SAIBA MAIS</span> </span> - Você é professor(a) e gostaria de publicar recursos? - <span style={{color:"#00bcd4"}}> SAIBA MAIS</span> - </span> - </p> - ] - ) - } - </> - </CheckTeacherDiv> - <RodapeDiv> - <NavBarContentContainer> - <Tabs - value ={value} - onChange ={handleChangeTab} - indicatorColor ="primary" - textColor ="primary" - variant = "scrollable" - scrollButtons = "auto" - > - <Tab label="Atividades"/> - <Tab label="Meus Recursos"/> - <Tab label="Favoritos"/> - <Tab label="Coleções"/> - <Tab label="Rede"/> - </Tabs> - </NavBarContentContainer> - </RodapeDiv> - </ContainerUserProfile> - </MainContainerDesktop> - </div> - <TabPanelAtividades value={value} index = {0}/> + </p> + ] + ) + } + </> + </CheckTeacherDiv> + <RodapeDiv> + <NavBarContentContainer> + <StyledTabs + value ={value} + onChange ={handleChangeTab} + indicatorColor ="primary" + textColor ="primary" + variant = "scrollable" + scrollButtons = "auto" + > + <StyledTab label="Atividades"/> + <StyledTab label="Meus Recursos"/> + <StyledTab label="Favoritos"/> + <StyledTab label="Coleções"/> + <StyledTab label="Rede"/> + </StyledTabs> + </NavBarContentContainer> + </RodapeDiv> + </ContainerUserProfile> + </Paper> + </MainContainerDesktop> + </div> + {value === 0 && <TabPanelAtividades/>} + {value === 1 && <TabPanelMeusRecursos/>} + {value === 2 && <TabPanelFavoritos/>} + {value === 3 && <TabPanelColecoes/>} + {value === 4 && <TabPanelRede/>} + </ContainerNoPad> </HeaderDiv> </React.Fragment> ] @@ -173,10 +187,15 @@ export default function UserPage (props){ } const HeaderDiv = styled.div` - background-color : #f4f4f4; - color : #666; - font-size : 14px; - line-height : 20px; + background-color : #f4f4f4; + color : #666; + font-size : 14px; + line-height : 20px; + padding-bottom : 40px; + ` + + const ContainerNoPad = styled.div` + min-width : "1170px" ` const BreadcrumbsDiv = styled.div` @@ -186,19 +205,19 @@ export default function UserPage (props){ ` const StyledBreadcrumbs = styled(Breadcrumbs)` - display : flex; - justify-content : flex-start; - max-width : 1170px; + display : flex; + justify-content : flex-start; + max-width : 1170px; ` const MainContainerDesktop = styled(Container)` - padding : 10px 0 8px 0; + padding : 10px 0 8px 0; ` const ContainerUserProfile = styled(Container)` padding : 0; background-color : #fff; - magin-bottom: 30px; + margin-bottom: 30px; width : 1170px; margin-right : auto; padding-left : 0 !important; @@ -285,3 +304,21 @@ export default function UserPage (props){ overflow-y : hid1den !important; margin-right : 0 !important; ` + +const StyledTabs = styled(Tabs)` + .MuiTab-textColorPrimary.Mui-selected { + color : #00bcd4 !important; + border-bottom-color : #00bcd4 !important; + } + .Mui-selected { + border-bottom-color : #00bcd4 !important; + } +` +const StyledTab = styled(Tab)` + .Mui-selected { + border-bottom-color : #00bcd4 !important; + } + .MuiTab-wrapper { + border-bottom-color : #00bcd4 !important; + } +` diff --git a/src/Pages/UserTerms.js b/src/Pages/UserTerms.js index 411fdd62..a6d9fe24 100644 --- a/src/Pages/UserTerms.js +++ b/src/Pages/UserTerms.js @@ -208,7 +208,7 @@ class UserTerms extends Component { return ( <div style={{color:"rgba(0,0,0,0.87"}} > - <link href="https://fonts.googleapis.com/css?family=Kalam|Pompiere|Roboto&display=swap" rel="stylesheet"/> + <BannerStyle> <h2 style={{width: "100%",textAlign: "center",marginTop:"0px", paddingTop:"6rem",marginBottom:"16px",fontSize:"52px",fontFamily: "'Pompiere', cursive",color:"#fff",fontWeight:"500"}}>TERMOS DE USO</h2> diff --git a/src/img/banner-sobre.jpg b/src/img/banner-sobre.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa5d39fcdde21ae4740e41723f6be0322ef9add0 GIT binary patch literal 90596 zcmbrlhg(z4^9Kr|6s1=I0|EllJ1AWt(!0`|bO^mC6cLn8kluSQq1QkVq)D#{H7K2g zCJ;ancrV}kyZ^zRJ^P$}_L)7;oO5<(W<N9g-{OD2@hH{bslCI)$H&9Nzb|<It>ak( z1Dzf4@YK|J@rd#8@E+ia;6K14x^HpaSLdjQ|6{`wys!Tw6%P+bS9?4>0zABLM0gMH zdxS+rg&!3DA6MA@FoOTDt$)w*Kl*P4?+YHm|4R?=>Cyj)h=`Doi0BD1$$fc3^@Q}v z{Y6DVO+kKNndxX~=$KiV7@1hP*x9*+1%&10-{b%PeZYS|@TiCh^oha<@Y(SmP~j6$ z;r};)2e^M-0{s8c|H*nU{X_f*kMIbIh)Moi#v}f}{+q+Ron~mA_aFh&hiVOehuV$z z%~ch(gNl8v0CmNAkmJni`2O>&5Q5l>5<QoY91N5GPUNSstCL&u;wwunf&cJ;O{l<^ z5N3vnJ(r|9^`6qdJyL8wkUUi#jp_YUWVJe67rfQn{NS#wOiXs6z!;vrJYgX##M`Jo z&`b`oko~2gYTm^?IW@P8c3Et}ky&rhW5KQl*B0JFknpd|IL(UqbgrNkrhlbBPwxyw z$hg-QaMz4?I)V}5<dJQb`kI?-W0+EgR-UXcYp_$~@|l{ScY5pmf-pfYqxbBj85zlw zqcRN>)W(356i7;&YV_dNz{S;3AmI7k$`MQPI0m-S<7TB)+vb=xg2DyW31x9LGp?z2 zaoX$)VQ`{1{&++f|B2k)A~bJF@zPXosE-IOEi%X^`l>*><~m47%vU(LS}Ub<)(H|Y z)2D7EIYv+ehey#1OJ@EY>eTO_l+RBX_7SXgJ$%MkwF``?Xb<*~_`)MbIF0rYBQf=} z{al}wA1*bOrac6zbMj~L%AXk<40_4_!TyMA)v9^UBii|c7RzMkg%2JW)H!4)YJVvb zm&<=!+*y?VV|mET?C|>s&upbrR`D@h7wy>DUm=Ks>iqihA)^8l>sy0wyhm<DTe3|f z*FxH}{y6#1X&HrQ%;Mk!`{Fu_GtTX9ECeE5`z-4&U~;C$OSQktRKtb`zo#pGCzrE7 z6%b+XxEiMT=wqk(0P({MSek{O+ar6Z25*v>Q{<IIaUcbL<jm-VcH#DlPX4U530{%! z2^Dru0uov7U##=$Fn0T3DM<EG9;&K7ACV`7|FbTgzRjL`R_xj&w>jI{45RSroWV8U zai_;@&V!kcVj`dvSI<D{AG&d}6q>qaQ|01OvmI=cwbIk2h_{A=JU2|r@#m%?Pj9W> zRJ;20I)BrRGQ&(tatoV1zyZZ4$EqcYh34aN*6{OXm$aO3R+;v0wE_b5=%92qw#5;9 zfSTb=41pGKW`Hc}EmEZj_Si-t)wU$h#DsHLqupKQCF*tZjGCb}kqjcyL7lTp{h}nz z;vi2vJjd0gD+!svL%;j0r>URJ`ew857~)2Hqa)Z}h=WHBnY9X7@$DdF+HCX`Dk`%7 zsM;R{$pxyI&AQG=Yr6psR)wd9jR0m7SDKi8QyU%>_R<fIriE3&o3+=W<<K0Q7F;@o zHWtMrqDmHtxAr{5^!#6q+Kbg%v5u{-1d<IPNVY{(9~3olxb4#!i`QB7o*}AAv+&y0 zQo^;&Y|{5~hLFv88{;VOY;o4j;?48UWxx2-Kg&*<Av!q1`)PdVccyadKfAbQCgd}F zAeNUCFySG$i6CrcV*h;p?(B|;k?=OLn9Jub(R&nH&0XXtY@|g#?R9>044rsfqhnMI zNur_aHi|+WF&Kx?0o<r)M38&Y&}S3YUJ}?ZpjqiJEv5@OUeLFIA1>E26F%%&;h%v` zi6JD@wi8Y-2)`6dPLk2qeW4KKEYwZlBFr2NQa|3>Nh>@(E0mXeEvZ!IdcNo!7nTYe z@wv8|wo-A_@_2OWbio4kx@qG|tX%U7)(}UY1`C#-Gj-75;IHl|CMrIeV3`#2<EBL` z31u(qWI27#Z1rIHSHEb|p<GY*kw>+fngKwW8cFOhFsK;uR@tvu8cie7x>??SwD<nQ zz6#3%=coqlI3sFok6(#B)n5%sLdkhp`eff0`ooU6`r(zIRw3MY{B<v5mj2V+IZT1l zRJ~2)n`MnN>r%Q97F9bL(M~sQ#Nzb7s6~IAz{Z_g)WNONYZk{zDa<Wlg6Ch@FPZ*~ znUlxjmy$^*@~R<Sn0(`)p0xAXXFHOX1LGf_&N`|FvM{r9kAl4de5V5ZHn`yq5Zem4 z001rbur;V7#TlF4c7%XK=q!^1lPxdVG%c+svo0i*9K5Tnx8<9Z6=9S(9iL`s>sTU5 zxHtDSR}WoahH;y{cT@F?kneAHK75;v__*Z`HmdFUnp(OP!FA}+p3;hA?fK_M*j+Ii z98i0%xnaE-P=bRv^aJv~21DfYaW<nMkEoHr#+WI+22Q_Q!KRTfOA9U?OV1VEF?(i2 zKi2K8bOc#2N9`(>^ZBg~5I3^`6<?ecOuY4ab7P_^G{+C_Vf_9<=P@WH7L=M{cMTL9 zsujyoqt@ol`&Qogb+i*={_bEN5@YKeL`pg(KjO@r+ExPm5Gvo3k)xNy|2lAtEJk;= zCX!N+BgqjCl5Eb8z$wi5`F8(@H+JWPk<+{R4=>jU!Cf}*A;A1v9qh{b&J^M28zLur z9A{ySV~HF=>|K7%Et)aY?Oe2-(1JxR_WxN65E=!0;--ws)j;FRXEwge9$+o$OTVsq zlNaLyD{!=ABcC(&WuChJ+SY4#Ti-kc4PCPk#6dJi4W90tQa;G1TJr!CG52_Mx7L4Y zcvu4dn7gvP=CQ+@Th2d*Hd*sxuAD0TNjkX`N3E#WbM|qub3UDyIt?EC4mZEHP4heM zY$wK#A#$*X&BQ<5KJWM%laKKg%oQ;Ia11l;DI2KA$O+kP@F^Z*Vd2?ehsAkEntt#> zz0l5}bIaolkb!YZkm;<x`9kf5Lgoatb>A7&qE$bq@v9icxno<M$>h#B<8QzJ!(?`? z3VKUz?>cm5@&tce)DA*mc(&+ZFZp#hPlxW0++wtdx>Bp4Uz;D*560W@K$n81+Oc<P z4&%AvNiX_~4_eAb-)dSO+_D~rc6qW8Z24bMd<5hFGMa$^p4-tCO{%0t6ID!?LIO^2 zxLz43)Gj}`OGLi@ym@oZe9n@cY4SmtnY=x1Be=)0ps(zw3!Xs@qI-1$2BK|4lr#J| z3H6^dLDUX{Cf2yLT;7a5n}{_qF;57n-mL<M!DVH2UY4iVaD`^^zpOe#7ba%VHtXq0 zCc7Whn<T!5*f#TXB+L9XZgh!&=tNA$9D~B3A9n>0oX8+guli>vvV`#57`;!lq;gU| z;e=*xNo1`?yh5NmDlvvf5Fw4KrxiRr1>2N`a)vDeSc%ya7XK_P<dc?f0K&gqYDzv( zNa--d=V=zG*YxAT6veiWXH$(WOBmioi1xl5E!%-$V;$Qg*=LK}KM<{c^b^y|TNzSM zMMLX_4Knn@2Im65TqM$pDsb!s%e$k--tl&h*UFoet*`!W$)PbxqwyV2A6wV6GoCf# zSJ$ka5S&n{+_JTIgM4BSj?H_Z)Wq~{51CdqP)ic=B>L@1SKWVjt9PCI`KRBxPFbdA zxHm)??+wjA;Lv8S`ju>`)eMB#>{GC%%Ge`*K!NL#e?|jZrT3<hRq0SJXQ}F|u13Oc zU_D1cM3x(aQ#j@1RM`S2J%My?q#Lv7)sdukyqbf+T8fEzl>dG~7VKSWBcX8Hl3Qb6 z-;A%+B~zOD%Rn9O_0%=o3l{^`>N@-C9|BEf-=ut=7oujm^mW)}_nq2vaz7}|Kc5)q zsVMBRZqGT@tjnVASZ)81`Cg@oX3m|BNY2MNs-79E;D7N?{?m??0<Nb#pKsz@4od}i zyn!nF$=KDRndAICQ%^znFx0|Idbn#@xu;-e?q_g4!KcN4WOOM_d_H6)o5B8}@+Oik zMiUcUk!weV^P}`pg>4L3Mjv}^-8_yO@OU!uAa3FfIcV}w|Gz87j(A~nQi4f+yR6fX zLV6Y#CdaPob5GTdkJ<(e$LxXRywa@zrXtQElGZd(&PNZi;0n{+YU-H958?r4N^gR_ zk7$0T@;wkD%t`o7Y`zn0*x+rMQJTAIW+<1jR}aRD$`Vbno-3cMsebu{yp~FPH}2UG zT!~z~u*e^-<zfg^eyVtRSBSTO+wHq*kDEUaoiptOs<-fAt|+LX4xsFb`ut8`zczrG z%+sK?;=4~HWr)(YcMBz}4awxz^f>7eaGZypu!m9+Gi{N!DofJ**?}v}%6X5lP2O=L z_*bgR^q~_Pc$TLlWE45NbZtA8>7Wc}S{EC`T}7UW4?Q&GF)ZZOZ6%s@&#b(r`shi> zk|p%?U3Sf2@n*yFi_6F4BLbl;8GEc%K_Y=u`4rR4lUHvt*K%et2GYaXn^$(IUl;rv zQAmZv-=fYL83%|MF^hAirF??j3S9nzw`h1vorU$40wvU&w2SRw&YRoFwBC{S+H(Q$ ze|XFVh-!YAf>w)Hb)EFmTAbgf=TSu;jaPOYb8R9aM%t4+UsrmMtuT>w<W}Q13t1C5 z8Hm(mxkGH=3eoVK$rEROO4?Sl*B7s=-)8O@z4iW5%d{`}d}$@eOiecJyxCg|=&ap1 z@aKzJy~%de{OcGKbLE-VBNvs0(4}M6)Bo_~2d0BqABI>Q8&n48eCsYq9bqUwpZLgw zkx2T};XBof%U@q@ljAPZ7`U1E^yc7J;PiAMHD|3N<;3I)BfqE@CsR>Ui<P%}l=yLf zZQvxZD~L`d=#z17okyOI%=~ri-va>3dHI6pu=L8KO8JCv_V4B@E#&w;XYiWQm~0Qd z|J~U(P;+>bLPdqhg!b<tS0kBkI{ktW17Uz(;f#5sw0$^y0Sw0;?midW;tqV5hR?j8 zrj$<$3$Nnyzs5Z{sh;?lQ-Abb@s`<YD)@3_#mh=wzPzG(#fK@S$ok4didnwzCO+X1 z8Jw8$z&OWp{QxB;HGkTJ4@gwoi^)p^(#-rime|q*h7i$@JdtKHGt+heD+pS-9Tbe5 z1ZH0kv|X&&9jw-iHsxoaXokRUjvYCVG6Y~{L6~>`Op|du0;6$A$Y}jeV~@qwshAuW zDj{_YKQ19e9MfxJ(NQc3*4@U)CF2|e#9T)=cdhh|o~P6p1*lk2>MiP-_JWKzGy577 z@|hp{lcB4Kh>?fVq=^Ep*J2p?6z<(mazV2c6Lzeva`OMc#Qw0aJKZPZA@u3~1}nt_ zr@t+@5TNKpCBqI&WB%_|KLtgQ2>0H8yp(zPU!-It^zP&|*fCkC{gP=Zl$%DyIe|h6 zM%U)fof78$Pg3?%JUE?k)j?-@Iin}x?9c2pd8pxn!Sp|Jt0~)?vC;LdYl{Haa)@RQ zSAq~y`bsb%8R`z-w&y;hc4{YAJxl9p;2D^T0w1b$|B_4>knWFrP|T5DYxV(1pET%l zW3FEbYtU0lw>|u1jKlmb$d|)ZOxZLUNuEz+Wg68zBi&#%0BUZyzLV4~449K{l^Dsd zH-i^F(=}hGEqhoVC6L~Cug#0re3<(Ki-V5AjRl**`(2SJoM|_^!v?su#0=HB6B;^4 zwg=k7@0dYyt~I@?!fHE^k9_Vr5R`rPDgR1S6OebYm%YT~`16TsL($96B$g6PbcA*i z-`<QF$u#>EoeE6{&t=KM3a#^MeXHFI1qfIfqdz081^GzDr{iX^M6IlNvGe~F8m@!D zzqp1vMNs@{k*-bgrV)l;sswqL&mTF<Ex;Uz0H(kpUQ#bLuekFEb&2fF{3O4CJ!?Xd zf66ZNFGDEUw#^qE&1PK&Nz<h=A38%qSmn<8TZSU@lPB~JB?<j~PKTTAf_sYoDJ@zx zp2}Kf{5-9@mJCnM0){A?kFb1|VVX2o?b+_rusv{i^pE$On1OSlFq7((_8eGqCo<em zR#gCx^59b6^?Jh+X9*ox9EFWzlRTa0toB&eYWRkd9)p~Y*2ncz3pZ}nQ3$<ZeVLkh z2491&>Q_f%6z$HHDRWy<C48-Wmj#1=?#T0x_gFsbaBM9t^?WZ~hIWX`jt<#QV?PEy zfd^R5Kf!BGh~8Cud$gi3+WmXwJpPxE(Abr$m8gPJ(R;dKqW}?yH*v+&bRSa4IG2Kx zUsz1lW%?{k8LQ-nJkGUC5$P+UVUjgPtMT5*Teq~TAGxX6W0768&xzp!)oyvmANG$e zTgJ(gOlN~Sl*(Q{jh!vQLL(~oWTri(HBA>@EN?mQ`kHi4^I+)ko#+fhSpHpwDhyQZ z%l(H}VKw@<>wwu{=17O3N%kVhqP?nML!jbqb1heR8aiLJUvmHT9k8O>${a&Ec9yR~ zGe$9uS$ZVafM5xDyrglM@<OOLZOXN|w88!{b_XBmY`RoV+5Rw{$JIW~Tng|-q;H## zECndj5{5q?(Fh!>w#}pdMj3E%`>5tYjv@#NgCq;1c-ai9R7u}^zAC)FrLoKrwxz6P ztnd{#6{1u$FvKjVV;N@MF-6-q?jFUL`L&j|{S+1nfZJKh_R;<cSJUg7t3W@O6$edH z?Dro6{934_)3>PP>xoxpd_==G;50d|&(z}#*|T0UjyZrlF5RN^`0@^I;aB5S^Gv-j z@W#=8d^W58o}KTv|EB7?R*hFZn@Ovugh!J~hNF-+v<A7ahq#~3+mQf)bbCjzpyE8W z9Q{T#UG}ANq%^8sM=kap={xPC$ehS-)d6S?pWeT!Pr%N~f`Ze)>$QJKmFz$J&Mikr z=ZmjTMZ9zAp@%nrvL^K<jbENA-qLhuujrI))2*aH4k1JgG=rO0gO}nk&G|-y6$bA2 zU(58fMPexx#V1WS4Z^GcD9)*G;G-PVpO7Z<UJ@t1MhZiSg**FTYRg}yo~m22(&Mz_ zleh74zDx$<zRw1HS87D$0M3|a=QV0a(Md)za;O~2c0Mk*4DpsM{!87LAj#+Ld<-7b zE_}N;b%KeA^R}}d0U~n{Xj-_RaIAkQ*xjQuIdzAtXEJ`sX$|P!cwAFkpE0(^!BP^a zG(2$<xb~3(Sk!MOCMNsOi5*_V_g>@!bV3@^7_>tojC4T;>|0tdNa`a)y0;m(JBr_3 zd?x)(wfAw}`)EfuV&JHXL@}(4Mr1{+Q`0j7E@ZZbpfb+f_x0Ogw{Aazu|L+%S-xo0 z@_u?Pt<xGb7e;%YN2fKK0RrhhwX~v9TDva!9eA){BLAz@TYbooi|=M=|0-JBJ;YDE zt9k5Y)!dZJe$8$}fU!^oPCOS5mZjj^Y4<%u4GmA$m@ajGG$!qNOC!8bA#s5n^cF4D zh<7DSx7DkgGA3{tjXB{qG%&q&33ru7)@{Fne<4e+J-2Qr1}7y%&mx^h9Ry7B_ksNK z(5xfqcS8qtAI)Uc$GHN%Nu$@Wux-Z*Hvug|S9M)m9kmlZsO2&|TQ6y+(d<&bbzF!c zdu$lT^0o0xXI7_H`f`0?S)ckVJ+z?c<1h3J(<@dKV;<rjN|=tTi{3L!q2a?l5i_>v z^pLUx+=r*QUx1}Luur@bPxH-pL8jKFc1N$@wfSDDJfEdGrl|1v{4gJkf5%S>w)B@j zUjTIUH$n<u=<oQL?|!p|qUXG*(Lt8C=o$YPgLeDN>5XcQZC4k5LMb~V2zj%Kk44SR z#UrJj!VZ`{Vl4|$w}s?~vn<04OT>*8-M5_-`MBw(o=?vol}60XO|nGzy-T7j(+tCd zoda-BHm?8~V_jJ6kKK_|OR0Vr7n+X1SclIX<|JQzj#O3u7{1@M0{Vb?d42@F)OOlW z6fCy1jpgf0F2hrwGVzP<jqqM&k9tug>>?FmpjuMg-nE?2Do|uuRLl2mNX$*J{e!z# zMdrt@-5n%-rfraq?)6I9z$rei>_lE+)Xx3bxyABXg64#lnOSusnVTFnTWb2R`q|-= zr>0ET%t3WkId6z*3tN1{$nxAre;#e^t$891;gcTzDv9&cZNv3q59F;fPVUGMJ_CZ~ z+zwmwEx*~cMw#P^bXRDl6{YeYZwk6>Pb0s6l&|$;Vx&v*!>8)!WJu?iUUZ;RrH>de z7f5aljeGD_z61{SamDGalo?srXF#FW`?)L2`eWR=H?fYXup{?9R>v8Mhz&7>Nw-n_ z=_{GgIO8p>mRM8EE%P@v9_~Yd^1+;B9h3UBjqbb1v6Z0g$K@nnW(*~K!!rtTZwJn} zvxv=s9~~!idcw0p-=Nv{|8Xr5sNRE6zqJ}BB0J8`R1))lGAOUk)-7tve5{nybXVs4 z@j4^OrI*a79+<O>$JFcb;vQG4ZmSYlWnLXaM(}?8G7NL*!%k$c%*xM8)D038ns?v2 zF_2??#0X#H&$v0%VosZeqUaLbZbc6vDqg|b+%T!cKX*!#hu0Qd^|b3HNflVX_<a2U zm+Ks;mCVEf%H96&l<-;)bZ8C6K>AfycW5YksjH`?@um;{k}y@%<a|B|(z#}yUE>sF zL9hH{&0zR1wOeC<<=Z;-t0E>)eN9<n36yJv6WWu`r2pu1de@``U!H6nErVDMIg!NX zy!u)Tg>UkckI2G=2<1iFeZ?mLWEZpP!8JL{SW{0N<7?AwXj+GoG+~zic+5!ok5{&2 z<>KuZV-*;2?{1Hrb8WB!$yPV&d-0q%j^riOA*y`EQHBxJU?H~~SFodmZTIPROanP; zXn+irNs2AO`uiA;w7rmzO|rWN)y?XaP48!BP@?jIkeY%OP^zZT_D%ce^7Vbacn2#Y z0AxE!=R@qn8P7p`3o>S&$g~Ut@u>z7C&9RQT&8#Id+yGxIi1IJ0GWzRYs$eWR3nKO z4+GZE2H9+Cc63d!eSjfn3Qz#tYVnEUZ}%qGjj6Rvj?ABxxSZ?uBnBTr1cHCDZQW|z z+4lYY4^OCSuhqO`cpB=TSi0&VMP|cv9kiUGGr@zs^y&VTXltgS5#-QEN}?kj(<(kQ zuy#RO6fQDLXU9|fEq`Xt-rUZ&-vfkj=L}v*|KseQQ!TP!W;T2ke7%{W<_eE~hFLUr z?eLTR&6m%9DBhZ67&fbEGYd73MHD>`;~5K2de#?Vwi-p%XC|+vO2h<U*vK%O6TzlU z_;}h$h6yKjR`}E}(R~$bTQy1E-&>ffDIec@GVLKbd52|D8M<~8QurPGDLG*FKmt<# zu`2gJypk0kZbm~LisSt}A@TO|UuHl57CSp(AadcgurJ@U-(JIA*4=`*_0B+3iXOz3 zm4Hvc>1{hq93rC#QGVw$7WkrV#6|bR1-VTizl6S5uIxr-U_voJ<+GuI_pgzTGiH)M zD<oX;#aaPhLO$nhdnV`90NwQijQzykk!3b&i`0LZfw}qk50|u;N{Zz;h~O4}w5=6E zGwf*6hnM|R+sa40#4bz^>;giV%kG043Y;5q<UK;+Cu;)r8V$&yCo$pxoJ@k<CdrSw zg%UJxK3D;WQQ8hx^lia~2==Ax6tZ}{fWr%WQ5Q_A;M|?-hsINS_E{l^!uA_3(ER>6 z^VLtUw}T}O=jgC_YwLwK|Ay?~bPcof1f;*>9|w5J{{5V<bX_)Q@!0eaQ)7`{x}@(y zi-Ud5LV55?l)i|WY-l)BV+oM&XW?t^4^bgJm&Y*`a9dVqbG<_s(IN9~YJ!Z)8$Lk@ zccZtYS(|p~aS`M$V!D1?R&b~%ApE4~<z0?_&BI{Y>3~@`nY36U_mrLrr&usfj-vWl z;5Y5uT)^B>p6|XQcsy$fWi^F3^g9clG}|m=?D4KD4SCm^HgzWRg`whH($&rS>id(J zS{qVZkJW~H=+%xJjV7HlfY5!OS7iFZWbqz)qBq7`pzQtLWIb8gg@oP!@Z++Je9aq6 z)J{cRFIEjz3{{BKR#XNlJty5ifY5pW!X>h{<L5_0JC~-Y={qQAXWKq9qU8NUYsw}K zK-29qcVFZkd!6@7)@7|?gi6s4Z(marOJSs#C;FdUYJE3q0(y$Ih3EzU3RBTg?ui4h z^HbLBHfz*3P)O<oAPRQ8p8`G(iOs3VUdOv~)u*j^%JkGi$!>&RZ{DmW!5%!ZJWD-M zkSP{$sH6Yl<Tb%&`+P#oTlwXttZx{Tb1k=Tb~Zb!a+7yctbSXI`7~0mMuNhmNkTv_ zd`=`BXI$>ssR7Z-S$~a@$fWP1pA<|fv+%RS)=eUt?KD3?K(Fi{!S<dW)&ti9elVM} zPz(o};JVy?MzK#$f@VEB^TGjq>{I2duNoS02<LlXI(!m*G{1^^!Tan#Jn6{D$=;hv zxnC7llONA*SZ(DVp6XN&P1By4dPEp4GEVPpgMV>viEGeP9|i??PqA$wAMx|nxg3Vk z&9Q^m6XgZ58M>XL@$GG&Nho<+?9=Ns-y3GxW(q5EE{hC|8QOd1&WjN{>={OV&b{s0 ztKVim&*3B-iazbDw)Ot8LvNnrpv-3QYI0A^xUIg}1<n%xmxW%ke?2%cjG_WZ{{BtV z)zvWW-_eeBoZ+6;%r$}86RLXCHP$a9;A!o)of?gbgxv+?!cs++(i&u~@2u!)(T<+h zGiQ{KP2ANEj$!(O{FT6q;N#?zLt*AHZk)}%Q#7S(_tBg8$gC#}{MovHsy*w7coAhw z{OHBLcR!CCNy--qk{_?wQr7y6>NIHU7smufJC>WS+h<HWWAFD3pOh*#gV3Pl30D(Z z@yE6TE~z~Jn`->xr$_&|%{@SngvTO#D?d(1JQ9CgQ9P_KTZ1T*6NcJa)_8S~OJh@H z5JbgtjSUqG7@NPY+$N9fuUS<Jn*xoW>|<T0az`&M(eXmO$;BBfTJIaG>MJUEum0`x z?lyo&_qca%9MfFSA7e5C_$I*0BvLPz@Ukor%yw$Tl<QyL_-vzkY3Z;qN$cr{B%!*b zOvM|yv-t7bWt^uApVf*zK5t0N4RB9A*qP<}53lBAEQHlML8u9s=2U7O08mboz*RRS z4<-<T^_*R=LyR4#yJ9w)E^9V|bs}_TA@oN~ielbb=gh~uSIeLR$*#MY9GmsTMVIZs zMDgvKf{MKm!EB86x&W-c(&Kf`A!01kl7owVQnu;kW|W7Kx^6$q#@0omq|{k(MaJ3W zqOHZNPov;(d_F0KZP{dUDr`@_M4htJEmHdS=lNLZ<>f~|o`vW)E15p!khJ8r9!<zB zCaWfUI9Mv6zM|+3=FFUJK7=TX%Ew@$gAe5-l11tk6BXxP%K>)w+O#=+Nk*t(pNyIv z0$N05Ls^ak3+UF*LInS%00T`r#;>iED(iFUyBJefaZHa!&kE0181q@j={HmiW*}~U z--ge6=NIPM=&f2V64wJY-@zxk`CF+7C!1T97(?og9nL=b>9Fp0U%A7Vz>B+%l8d%8 zv?p(Bsmgn5cuPHhQ9BcuJJ?D$$v@Y0FS9`mkorufS@MS&xU{557^eEU^F4mGX<Z}O zwTbljpjBY}`84EvOJ|Csnq3`+nVIg9SmOjnLiL$~91~aW4oMZZ{m5;C--B)EQeZ3C zDspTMM?Piv=g|@p1^y(SUXs;^#$`KBokd?GN@aBth2HtBr63P#BUwbdOrdn71sa&# zfs;(Qfj@xUW+ci;Ym6-|r^WsJnrp{-+w;$xF|JCtqA#xT;^*m_f<+z6`&*(bkK^C> zA@Eq_Dy0|2xsB24z`v2t=q~0BDKuhRY1F0_IdlYlaSVK1HRd+k)d5tq7ilUSOSkl3 zBk{cg1^)SICeFzEGPJe)CxR9-MxbCtDejSATb)Yknc2hszG0ec%{4*GQZLOPYak-M z7S!swjFHj=8x}zx0R408q?ZW9`geNB#P-}}S=LFk`+hskO7Qcj(41d*0*UWRDTryY zxfURN%5M$65%wgkwidioDELvA&`jw^A5i9MnvCLoKWteDm?*Ea-i;jAKOrc}W)pbv z;yoQiP2KT4oSG=h;Va2nVRQi5badiq*8!2{uQ%s>Bu1@RJQ@DQZw+)~6F4(RqTF%G zMDH}`!vyb@H(Q=(mh3g*YR)YIevn2Kxm32t8^yzGvK+^&d4xi#%Fy59<+$dqy-UD> z4qsl!nd$c6$l9veq;;yzA@z&wF!>sRot<6Ka`y7q(kN~Y-rUFGZ}!wY1lD~u<%c^6 z;8^jWoPrRF@pxZYc3Yquda&{DN7fH*dD(<tY(6_`>#I4aN>mz<PP7tmFarE>N*w0V z(Pb>TpxXdt-p*=Zs>@Kf`sd=Jh4~Jnjm}wV$_j^m{vY!#^A-}d0Re{69EIRTi;}l) zhfg1`7hyw0^HqK<rmN*8YVG+=<ZLxY@3X`&zGg`YG-mPqNM`Qr#}M1S`?9IllhHda z$uE_b*b8l?(pE4T+<fClZEQZYp@zrMg1R#;dPd(r1voCX>v#DHBl5kVcy>hTV&3qL z*jusK!=W|s(608`x=10gy8dMf|26$IMb$OoXuQ0-5+P4uYR=%Oab|>xt`8LoS|1SL zYnUfCg9ezQ8qJpY@tty1Jk$y6=&ef63s3V&^rLC2FbM8K=}@!BQ9iDjS7!feuEzCd z`OQehV_LU9R`y$l&D)f*N0en%1PM$@oW&FmzX#QI`d6ixj@J+L5l30Z5>r)QUp45a zymNp1XR@C&g}1v7@yP!fNiApR<xT<-bM@oJZmnNHyWn(%hWQ69Qy$ZxrX@a*uXz%R zRY&<!*+@zvK}>mAQ%5C0Sy?}=>?Io>sLV>Gw(fx`>9Jeq$CBOC_7JV$;TV0V25~ux zLNxE+rRQv`ZQhf@57Su<JqTdVs%1`8@$8h9EPw~vv0X15=MDq;M@t-1n5ycTD%2jQ zhZ9C+>UyElfB^wXliVe1C#eFpBX6|`{9NfAVxxWC*1o@gP_j&i=O`l9+IOg+hHd$4 zuzhk{Zb{L0?uE@nK+u*s=R%fH%+X$*dyuqUR_vgYG&!Mk9lZA`!vo9%nlXii5dF0v zRtuP002giV=;E(<R`DmmS8!8)V_pHkz;-bt?x7yln|Qyc;k@r@AFmVdJ)RW^0+d6~ zx_rKt?1-69TfJhVGZDsDr?YGA)~b|N?I1*1vs56lEB)XN#-<N8UeCixhVm4fkD-G} z)x|)sue{I00Rm=g7k639^>4tt&9cKam;N|E#1`6Ajk~MH9g3+X``~V>YeW3Dsqa4H zEn1?~^0vRTvNbdV8?oE)%MC#QGy?jYZ&7VbyeiLD%wQ!i+1_J{_9asmj`pJrm&l;Q zqf{&&XvvJH+8rw@?1NQh?IgLIe^3llc9u@Hwa}_3mnP49!+6nhSA;olYrPQ~sMa^} zBvgB|Ja6nv;wwO=kDr@J9fPju4I2|W3i|Y+c=)012Rd1!s>^?a?P?m3fpbU%9pS6O z$Va_wwGEZhk5$lAt0n?5ptW22Y~F%~^TyqqF8<sv-+_<7p9$MyRg6EHTR(coM9g7K zM;XpW{08>u4KYDJ^t)dzD7D=Wp(Is2#xS?~CqMYI($tuPjF`!|ZxSL4?o=nYJG%Z} zb8u~Om<&$*desPh{r<q_kswoh=Q1F6bpIER<~sE_Bjyod`f=?g)1i+Kq_mnvY$=3t zqeDo906<7Z0#sy+Y=ud)yT7Gg$jU!z(b~BMnZX-pC3JD}1B>#nG?)1`JbC3SzdVI0 z@<#L3;UPU0mGR<z*HNu|SurgE#u?2S6ke|*XqUAl&oaahWX=wXS*q#55Fz(SdO;ud zGuTeO0kvdLKTb=<Z_&&0>U&?YjiF)Fi^3+})PW+cQEJ^GARl}a?yOIg1H%cKl=eND zg;b`K-98#b6%yi;r?nRPA$~fGK+eD$mJWelRBFkZIsrN=iaQS@?v_?{9);=8hY%Eg z5w633{2A|^^h4X&*=8}z{FW(G^s3p~cH=lm_%^ID$GPvNQR1+OV|D>I^qqdU;RSIG zA(P5W^Aidiz~XUH$jSo!L951W$A5U)q5^znFPN;^@W(Zt(1j(|sM|T#8x?q0|0J+d z!l50OIcS?7e$^e&&Un6^taS{cZG^0Cw_Dz#;_er_va+9Txg(qd-a`F{Bl2!jgJI`C zJSphcA!%J-%1RMG9ux+<3_*Kqu4YJ#1g+F*BwuhI9Mye`9C!$U9+-!^Tsq2f@6(Tf zT`OGMavhO<l`^EU%R3c`yubik?0<OXA>}Qdpqvbfksi@EwNF#iH~kW+<sGYKboHN! zV}uq3N$uO~E=@DsUA<XQ#Y<~%9R0~`nN-crce}b`&^ErNsJ%VtQK>J`u>>ytl1-q1 z&Z+;B8O$pB7jh2cD3+GyE}lW{Q{TMJ-eQXhqDy~K&RJMmsASt3qM&%|y_pVj%j@Fa zD!-W2Csc}He)P7&4ZEFC2<1_aOZY&AV7~YdPwiZWXf7~<4m*O``6Ol^Ci$CFKbJH6 zr%86I^-&!pR$!r}T}rT^9jBGs@Xpn;J3*6FQhihNm7#z$CO=1c0`BIXiGjvyqS(_i zkB(wdFWLB<zdHsgC?`%SC~&C8UHYCl!h)zGa@!?p`$;9Io)qO7QBCsjuRK(FM)_~( z(@aN?=pQYCa{riu&A^Be)nIL%sn+C3jcaY8-0Ltu8zB=V<;<Q86y%qW?%_ec>15T9 z71ZQktDh;GdU(xZpv4iBZ_7Voryo}r)`V`p60p+2qU~$e+#Dbd@1SfCc%^DDK37!0 zrEMJHZman8ZgM8r0sUq<wDDf7ioQ+p@OfyZJj2=1%NT0?%!`lZnVW!g@{a}yttI}k z<wPHD=ZbbJ{jFx{iSo_6AVeU)vc`dTe&SgRf&oyfnlE1?ICZ!U2qt%!&8Dm3XNNiI zpJgpmfH2H(Vg1I!rJ}NWeR0aa^^>n#;iG5NZ<)sMaNYU>AEK0zvCv#4CrE)>hd&AD zQRl`w=ht2D#aCZpd&_nR+BiRmV^>A#lk7S7%zJ55XyoXyhHi96VOwrN+NTO6XAE*j zju)&<E0)oFyMRc+r}`FaC=PLr!FcF(gdLb_GO{kY$C0pXW!^rIBZ}YNL+9N;<;hd_ zmtNC!HcAP_3Z!3FT-Jri6uCnHRZl~#zT>hx)|Yxp<fe<ZGXuC8wiLKqN)d7Xb{p?@ zYX7*g6~4=~3sE=E=@|o~j58a#w)RcY@6%8Y`agX>>~wt=Gr{cTAMIrwRhY8#8OP$L zRP-Cg<}qR0a)-=kpE%DB$4wF_v<l0uif|b}2V3LJw~XY!SE6{nW}KY?>UDz?g-n9f z%49F|@!KVGKh7Z~M%@5h{sK9hwTkPzv2E3rqMz6j6<dD!l8LmIgRQ!(u<|u_@*cBE zO#?Go+I}T3)_l$cot*em$C)~RJD{FD`AYkg0ibMIv^yK5m0o8v0dJEsUBEsW7u$<@ z<9L8+R>z^Z*yrSEL}o<PC*ZAnwT5W-SU+31G*_qB;koAx3y1il$@|DxfXt-FHG!QC zwJD+H2d0H{>1}7%0zw0sz1XM>x=i~~TQE?dwdaKCRj-WbT@EwD_$iI&?;ZV&?X$%# zFVBI%olW6)9BzqnKN|OMj~h&sM2d|_4CoVha*8K)2Ib$17!KQ=0|_lU!lirR#dw8c z5?vw(A@U<yHs|H2{H*RjsMGw28Kj?|1;Q52j@GbbcSwWPv%_EzLq4^meViYN3V@yt zw_NcN8nG3Hua1Ql#n+3K)B)!uSXc}>0myS{H_1AwFEVZrQ3r7L`wB>hr4K8Dwa7Cg z3#J-EriA?^G;I94cN9iKl|A_3SiJiQG}3~1CBjOr{?$_Mzl+m^@8#ztfluC!dlf|q zogU#`r7(?hlQqc`JFBr*_x|?gm2^Oq?^I1lzVQ1Q_}wo`5teXB{tYmbUpvTa8kgvl zO#VDQ8oCGL1Kj5jqGwDO%Gv2hE?5#+MIs03)1TpXhtG!iq?<C$S+x0ue^o4i|JVdZ z=7MHYxF?}syR3hlR*LN1Qh|c#mAx@eIqKdwAxlOCqP(WlcxmZol7*DX%HyUBh?$X) zn@@HB!mqg{ryMcbT1LK#?M52~bOijSf0B1>kcAKEo%<}Eq!o+)fvypGTqd6jItKGI zV>t13<gi)9Xvld{psag6J@UJ<7Q9i;6qSVB!|WaHRj332fr%J|u<Q}@du^Q(Y(mQJ zv2+e<bj&`uHb=cDCBV_%RfqZvdQD(+)z}Xd^vF6r512ky{pqh}xqJSkf-&@UWa`;Z zeW4#^yokZ5Z`tSid_}q<p1XotM2KP7x!}=(1ZY)`D#$RG|9Ct!FtVMeU~-x7eRz<r zO)2@i=Se>x3My5F7=fWZaq2TFaN*z%g1++sW@ly|3eBNL&!N$1WOOZ%&m?vkO+|%P zjm~G0|5bCKAbZT=;tt8#yuuWyVFh+?_Ib8S^&COh9%?Q1`6tH>m!*Q-S*-Hj>tI#| zeh+tLiNg8bw`=`Otz##XwDLakFVz#HJa^X}Ynf}?O<U|r;aGQUGp5~Fs@;6<xoW)V zy8g}%&uL;<Ld+H&$DhY_IgbqI$@(>jIXqG4EKzDZnJsH*Id2{6AD<IB<}m`p0uDR? zG`)y}O%S}%O!J&awN?dK43Ta`?!_e8f8Ss1KeLn0U^%YfB7Av>MZCZI4^P3)C(TvO z1)_E6d!JvK_PRxmN4R@X1~}P!8u&~LR+Du2&V_EyHY5Q$c5;wsPC5oGv=vDo)qLVm zD$!{mA6nV_ed*~GPM~1Av%x?0<$B7u)K2HuR_Qle-(K<+PcSeM+VT7;`f9`5E!`Jl zROD8kgKz_xm8-qz_>6X=sqGVT&y3U2Ty~qU@MC{oo?m(0T549@EP|$*0U+x_5YR}W z48mB=Uo##<gp@%`khpc*vQ+$bMHjb&eZJk`dzgH7k~M=4_cWK{-jQ?#C9g=gQD&Ir zwfW1)457<}#WrEu51aWov(mGgPM2KRH>gzNt{-OI<>fITn4dpF+x_m$f7=G77!4)U zfaN+ycNkXvemtS&8CMBgmC0}RN^V1M2!<YQoCr!Ab?&H76wh%~+~*a4U7rntuj;Q! zx6~?YDl6lB4cTW*Pvfo+gTKGdKJ^g6`1gN?79ku<1hpj%U#ZR$nAv)$>G18wtgw{d z1&z!u^Q#n`1uh(Fv8PNsQ$dj4`-qy?J%UVTPhNRz7dm-5?mmCic#`S5P{xWZgI(b7 zHXguO%Av`n$r=L8yxaJ|oU6Fegg1MZBf4VK2%un$=^}5(lGS;TfUr_Z3<}C7WJ^@& z-|Uet@K&{kifTp#q{4!hn_GZZZa^B5(MK_Rv4h18@X!)3&1aDrGYVyk29pjC@1h)j z?%HnZMJWr&B_JNk`m4D$VuL2ZE=#9F6j{Tv7@6^FEwx92d@hKRr5;6Xp{N|ocG4Gn z1^|Ab*MdWm`a;Azz^%X%Y0%r|;z3iFBI^Y2Gao-fh0IVtW5Q|T$W{-<xk_7ZV`A_w zQ72a7=ZLy<R(_SM1`V7@RX%mOIcUK5T-srdK4o0lsC0&|^xTHM5kP}BKH9^6rBFeb zyAmwCDbOj-$TEnl4E=3mr{P{lW?`jxVU?&p(}=0Kmvk)eX-@$Ap=$%dwSdV(N~!rE zjppvaXN2tRm~XuYJ>-;8uN2F;)E>lVvz{;3wb#G4@PyKbcdEaye`M+IT0bFA={lh- zQKMZ!c$lDm+Savjtbq~Nw0V~IB4@B8qmvz>xbhy!?K|P%SW=EgOTzfPmk0J(mHj{_ zrM{+!87efTxFq7m7P#5J3L%-y@}4yBt6=Ym7<kx_9$Ha8J$8!Wmn%?{_ZS~EA>CQu z@(DWL{x$FV!Tq<D37T=@q{Q=S<t&2ZnZKcQR#tSh?}lmXcRk&^rsFreay47C-aD|L zPYk|LYwE8HeYqJGj3p&V^5Zc`gLwDxET_xKpAA~KOSlD1QU5XF1R+cJ<kXT?^pQE5 zC`XvnUR<^V$P}mS$5G5jUmI|5g$bdFm6Are5zbb~J+{rxoyQ4Ke$C>ZA1yOT+!W6a z70~UIhJ4WYyr#b1@K{OC@@r|!3SE<kuzOLTI0PQ7u4;xwMy4u_#h7n<JePRxhk1$N z56xJZJF~=~iR$fK25YGiK&5#)22ZPk9uV!9n%)*tDQnw?v`x7epxFawv7nI=hAcK7 z5H)ClvIx<*<{`moBP0>0l_)1i<sK7VVJOXqtWfrIEarf>7Vn%>*je+0ID{xUT~YTq zsqPYTnOJ>f!@6EqIPd;B5xYdlbuXj?m_@`y&wwTEC3%he1x63etNbiy;yn^>>Y3}@ zF-fSxMy|nUo)|Qh?5pql>@L>-5?-^7Z&jJSIr#2H^gOO?`#(G}zQ++!_lO8j1SP&+ z#=;CJ$o@jdiN^!gD5Nc9l;EQK2#u%@&Ei&8(LA3(-}|?5%0NCUWWBPlvT}g3uVG<D z)$I7$lFEY5e1XhZ(?lhab{oBcP@01;?pFS5WAH-S5bmy~dpH%a>T<<sa#Ge_SiVpL zCdEVAU^_e*P82Am)jYgrZ|U}+t#IczgBUT|*t;o5ou46(P<8-e`5OP<dQJRgg%8a( z6rNWHRN6ccm85!H<F(?fCE4EUYa(&zJyC0dwW>jJ)^HH6rCr~G)<DMJ&B}w|?A$dX zl&`QT(7krGgkp#Np7TQT;{U^w`!X~cRmo+P>D9|;AxRLE>Bc3acF}%L@pY>^U!~$4 zuzizjvLM6ENxgR<51p!>*1(hfPP6-6>ddCza1P9BP;Utn2s#Ib(gl9~ZCKDr`aSzv z^Mpk0rHX#qd+>gxdM#2Z>ney5^2Opu<hI`s%j+EJdM8&GC()qQ%c2;_a6o`*5Ulr; z=Lt&SPy{`Lih*JW%lSl1few5#bhWqueFPPNk`_UK+F=<CU+&5F?p~Wr4rE)C?jV*a zT!GioSShaEqu}vVK+NtK*geYRz}#+Sc0Pd50J&cj&Ny-PYf7}nj9dT>L3O`6%8L7Q z&BY^Y_NU(p?PmXEF8!QJQ?cpUKgDd=V|VJ$3c-o%p!X87krOj|hF>J|+d|vQ^CM%j zUNa_JqAfEskK!&3;~@+ra+3EOvZJ#5?}`us%ox}D+3--I(f9KD`jU|S0%}@GxoIV8 zJndL3FtL)#Xt9^Qrof2a^{2p!<bB4$<Ht&vpwX+$T~ih=-a{vs_Q?P6YL^U1StzzU zeWRhVz$!^v(`G8|nEYDbHI8zidgyO?t429Dyhev+^|N>$I+6DePBqxBQU-v$((`S^ zeEkjwV#>a)=S=gS6=Dnm#VYTjsO0Edqck8E`YQMHl70U330Wu>w@}RWDuk}W&$guN z-X)JccS_Hw;8MwEDgRYm$KnB7HW=GHXw2J9`t+v#e5I{_^DG}U#kMCW5d1v{`>OY( zF>LJG^`p$eMe2R>?Xy1{dvU;bqS+BJJ_$D7SG6fo5X}I6yAUhn5#%tUq1V|q@++Oq z>g&eHuQY*%R(+u!ri8pB;fPWOxg1V|*=6TEqb!lw5w0|DUmyg>?FX{>^u{S%KabjS z9|#9gi5O=lE8`5)>hIMRmvj;p6`fjv{*hIVnNH9&0Tru7W5M>BL_)!C%Jg)Q(ud^z zSF9qt4QB|7()-Xzvr@K5lkync=*Qee4h!pV<8_Izrl_?2ML7vr%?$m~#<Wz0A4GZ{ zdYe~Y);zc#YhwO3ylx5g=s?gK&r06*tUfFn;DDJ9uQAt>;f-udj}XL&k3elE1R$EI z7hYft>?tm)o(b{HY#iv&2te&?T|2N#x5O&Xa&f@<kl5i5^5>>8;FeXK*}iquvWo*) zHcyFrr@#DPwseA(2~xI=P?{xbW^VLqsYrv7vBiG)Nn+7{x6okH-pi`{!&Yd$bK*C% zK~>JR^F9MH_opWS|0;sNbiP!4pGQyp4mnimnpQW9HLv;mYoapJ8EIY<zuTpCYLde= znFq5VBp*C>=9C7}3OF>oD2`y3_VT}*B5Y7@G-7gcXgMl6EQ*in-mpTUv9r=O0$9n6 zAL9jDd!Kh<`?%BK{C9cCvz7($@VT*IzbZIbHuyh0B@EGa@Rs3F{6HYA!_}}`XNnJE zSOO^Kmw!f%YJdv?)S$7;GjbnIpZj>AA#MpxrY}hVe{U+tw8dBXK8FgswD<SeumuR| z6J(1_`Wa2lp&f?Td=G`+QkO;7&Pqe>Pm^7i&SS@Q%t{yTRTH&iF*jVAojna3plnuS z5<3V<`|Wt`cD?yA5d{$e*FX+Q6~uBX_`qw6elUO-vwiJ%vABc+jNH?kg6usGx#TFu za^``nsZ>VxZ+y_!9OydZ3m=K_=@1&UNxL%8jh@x$QZjA=ztVJYou;m^--eQXe^f$( zuJUGgm-OS$;RVt*LqWUV$hwpC0Fc&PRyZ|88i=Nv&(TN71hr$Lb4=aPGZM+BGH{M! zE}j`GBoqcuqQm+sD>k>w@o$5-<qFCwQXJ<yBX((~(}GX@)?~7kgDi5tizFuGU~U1y zQQ6s|=!UZc4Y8WD?-{hY<Nz*&c67FiQ9Z{|eSqeofrv@VV4%UTo*^T)u<Qy-62%i0 zQe$1|KLar8&yF|ETW<?@_!eHnguiptz~5V-kzUEUDE>j)8q@R5;uPfUIbnWgD{M{# zAO{cu001-S8RWgM>I(!JLt&7T$+>fWyQ@}2eF;Ny(7e=c_iwA}OhS~m`afo7H`}Y) zTxB`#QigA5QZ=R)QCY~ymL8dSW~7&X`d)>fpyFJDsp0+K5m+cSHlF~}m0DfnaRId8 z(|I{Qw4kLxk;jze!_?8?F?CVB!pic6NB+{9a97SE_<P2crD@j+iDT!|`)Eoz5EUcU zW-}+Ukbe}5Gpe{p2b*UAGj!2Mdwa2l?2R+?)bGygwy(-=+kW5F6;w*)p0z?o!T((7 zJohjVowvaXGHH=fML70TOaJMi+${%P>tmwb4k^;dd2>|g{`;L<tPmXn<kYS|->%Pv zWYEEhyD26(WkXG@z9eb$SWZi;zkEBW_2JI>)JxYwKNSUi_r*xZzT5xOU)(~56H)JS zNsd6qdhsz7xZM0X(ooS+Hk5($08B3}=coXtngJ^J_zPY1-segovzn}3gNqzKa6-M# zC$Zh=!<hl*-BBHnPbhaY0s;jBg@Boev8%fsOG!gxZ2i}>F=z_{<c<%b<B!*KkJB%W zhPKLd!MWk-^@iNnPpK@#zHtc|zop{LCVlH<``~BUY?5xd<ACg*Gp$4nn#Ak<9FA)M z1ah=!?r`VV9JKAwL)|ar>jY+B;h<l|(!7E&2pUZz7Fw@j$WhW&%#KhWPyv2WLAi5& z&D%ex?M36{wuKYQc&^SRY^n2eJ}vA|<@KsOQJD5nNk2O?H0$yABT6~LuO`9lk!^VB zeG7iw3ZkLMjzf{HZd5Ls%Y5_4d$g7sH28WYdLOa@bsrum4S6%3f1bwsD$6>8%$`oR zd>S!iWMFdO;MeAF?iId#CTFIicyDk>Ob@Y4XWo{#>gVu0$yWHx{q)p6+GAC@k6iH? zV{yttd6@R7h=P6b=^wbD&!-(Qr%@JX0pX3QW}JMxr7VitIOg~`AoT|p5a-~C{FDQ( zqXRkD`wgp8^O#LQ`fE`^#oSdc%g9*E%^c5)%Q+*m@$c%Wsc9iyE><CDRocu^Lt@$u z(NMYVM^r(o!=}d7T_vs2L;0w=Ls1_ySbwX^On;Fy3AzO1HV2MAg7Uy-obPY-zUL5* z8nk6}_BneqmFn*u4~Xi}&vWUlzxf4j9(>Tv^s%#_d-bt8ZhN<pWx*)+jyLFqimblR zqBBk2&c9_XxSV865esCHw2fI6`s|4yxD5z^Y=ty~3<a4#y|MP>ejwJX&mpX?m&ugN zzuLGq_V}A}jTPU?|3k-n$2HNkZNmXYMNoPPJ%t|7BvJ)L2q82nq9%wUN$5p7f*`1r z1VTxup=v0CfJzYo!P^obG?5|#0xBR<1O-7rl<Qr5?(2Eq?~iZu`(<~InR906oO8+^ zJ9}alCWq{Y!;j<NyyIw=KbtBsN5hLA>jInYmb@O?jBS)IT`XUJXu;>TGQU8f<j&7i z08R+j0xiU^+;fa*DY`StG|D-PR)6bTIfuOLzO@@@X!f0NIa;S~=wgqXz>(<ayAjqZ zRla&@^dIuatS+k)^4KGfTMxIr6J77S&eC}MsKujP{atSLV9X6C=v?Km``N$M1Cs79 zH9W9XQ20@BsA~9Gc$Wd*M=WoYq__|knptS$*XCi_6YV{v`ZiT^_L9#=*HV7IlP|us z@1fA-fZ@R9mHAW(HFbW`JXBps$Z{a6@lVF+*p0*s>c`&seA#Y|R!U5q^8z*&C_mmX z>anm@EF4u^`kK~#<?Ms^5&wa%wnb=liZ6!3?cec-&ah6FuqH2t4ATAc1*rRq9>!oI z4>ZdVAnEI;!tq)cv_f@H)To-BH#g=@hRrZ#E!V@(kJO~GG~W!bORZ?1Kjve5R9*C= zdFaE-r^?^AwYdM0)k-aOnncQ8o?j_SO|4!(--f@#7UXgqa?!cC@M{~K?=;3VdSa{I zU(zu6%%v~KQ7)p`W8sfaWdz1-ZfIRU@bm9Yr!pPNw$s{Wh^p0wy8VbgvCcx)Z(wp# zwAHB%Ppuv&){6dT9U)}(f?YOMHw{yg`e+OG<|_+u&_nS!9oQB4e7j8FM`UD0z5bHM zrR8v0^|RN*11fQg7g}B|iNw77Pz4M>p}K7*E-ld8OCsfMlOlvNtk}DAT9w5`c|F0= zk2mB^3yVuCQ*+7&UOr!*b6mq89Q@iBV^%+(Yuh`M)?ZcoP|okDBqgyUy)v@ia6f2? zP@}J|-GB)Rzt{rJehh8QeSDpDGV#<K^~>VT?iT0nJ`b|s&8$Cv+#KRis7|0GYJzWE z{H%JqmqHi6OK{K2d-~qy_^Vo<P~B+D&`5Rvg~pr)I3|?WD>uJSePCZI6{5^~1fg)* zYdQ3rA+_IBEVW4KA3--RdN$vUdr}ee`qMjKfN`oX4_sJmyVEV_XH0&xY|mxpXPdK) zr<PuRoIGrD&)U`@`#&LOtj76;)G~Md$hXNGMD<f|R;>L&q^0x{9#e{x%EQpFH>57T zy*!hr#$SCZ>&u|(<)Zx5FNW)n!^84Dzoye+M-No)RKAt@(BizYVqrDuIsY)^sNbY4 z5?}F>C&xnU?4{7EAg#M)_ey(g9+4P-UP{GX<%)6q2UPsR-1_$O?ptFu;^faRC%7*w zy^#v_IQCf;e`$E}{e1}Ld}FT6Dy&kZT|s?v;`E@8Pl!tuJ~eG#H}fHKznJce3r1oG zE_=63gn9DG-Ky4b^m%p3h3Chc@0Al4i<jF;rY>)M^*_-_M}3?}JgRUv86MR!=c-6H zKFEtU*K+1>zEQi+NKye&xMy14_Z$51ZS2{vI9H3WQ6Smvf8jFpA8JA+?HL}P5uBUw zC>u1L`RR?_;cWq^93`n;Bk&L!SG|6r+Iy(vUTH8=;?w2qg~v+AM3eg0xk8eb=jzqf z-+}7hUR1n<dc&n2R$@Z1KgXy_7u~%uS7~Wu@pk3b)4MhE+7n(GQUl0W5)KWE=1xC! zKCEAWuTQDM9JOQB>Zq)|EBB7i{1TWqTJkIS+_pR*wy?O$XO>-2U%!-|UHcZBop(5U zK6!oWt}L_!gcXYOyw>jJ)Ooh_H`n2MG0LKafYZ@Go~5=JTeFsWk$2QZw)wZzwgpga zjrFI>ZiF|NUL~JZ!V9_`$naJyJK<ojU4`F8wz;{N=ZgPQ<IF*gFD*QlBdV62PCpE5 zzuFi&@gJ@%&P|U4Q7*WBSwFEJ;uLs0^U0I*`k9ZbWG4+?SDE&k+y)(npFMl>1lqH# z%IT=N*dbMWehBDYMP+if+Mxd9Y2gORNH5&tdcot08l={IQ8NDQz=?&Typ1aPHYzNi z0~&l`Z^pbC7QO#s)=fC~#JR;=aToOWO&$CKk<|wt0fK+M2UhzBuf?_PR9c#;?*sUv z(~93L%_^FLRx?16D=qKG^_^_BUmes~_FQC#o12-VhlYIU%ePamIApF+4tKkLB7K3k z!PoD2s>MN$V3F;x%B)=7itCkDJtufn#j4-6yfs{~pYlO^Z&Z1+F;jH$<Pc2ww_Qc^ zw|7jQhF0^O8>#^}OOOmhs6CB=5A5K#`O1oa#2_G{m2V%r_I)saSl(m(sQ+?-u59EZ z-G`y~O~%*zQ!__mE?QkU{f_C`p%bctbe>%SJXa7;mVZ{g8Z^<7G@^ShDNvtLr}Aaa z^&{~PMP1gZ-Rn$JZ)n|`sqE>H!8Xk!kq)Z(|Clvp-}yD^Fp|N(cY#$}>eM#m-5I_v zDT*I?6mLv}91(kzsLyu*EPPWTTh*KO&P!3OG~z!wbE$=s7ct0%Xr&_hdrz8ho7SR0 zJoIKSTc#mnY}w|3bYMxn&-)f#D^Rr9$@pB#Lff|>JX>+uKXvh4%jB6)p}(N|SFB+9 z%#_==lNhE+{bySqHys~N{gm`}aa~81X0Nr<YAtw6Mx<rZa-)PbU=@0uHKeuj?ZYPD zaig!FZJuW)a6QOxJf^HJ&3b<3>rIOzxckNzdw+LXvO|x(Jyy1nCs6mw97&AKlsTVu z@9a~m_VR~2xnHG*hVUyZMK{&Jid{h#npWvK8dR^M#ZJfI7fTy8Rsp{zCoePSD?X}y z`Qkq7>N@Ljl$zG`EW+~eZ^=cAeMf?b56zUz-P_YsuTBn}d19kn-sXK--Ozh8{9EP9 z9cwMv(-Z!pyh%!}k5$fN7+q}f37*sMpkusSF*3+-%!c1Ww0m|2KPo7nWqw(533`+5 z^iJ6)`hI3<Xbb7-Q&zoLTXK+dsaBWQ!hAIw^S%6W{$V~JbDM**+IgE7Sm_s^&!3>1 z8#<-I4r*N8m!MlZ#Y(n4`YyB5DI}!drst(tjdoHJdl9oy=}AciCdO}5IW0Yo4bVr= z&pycOc>|?BW}FK)TLNc29`*{nkZ~yR+11;)mHFgI`AgM1{Dlcu#fr+jECbvdDb+>g zJGT{*Hg;O{CvP+#GD(kXTSf~_3d!1stdD5wUtYiaa8j(IrPeFC|ETJ_SPdsm{cuiE z(~H$_@ik)i@X4#M9~v*V9TcaoJhAvF_PC^le(lN8KUzhp)wbc`;p^PKxp@|mCy1IA zV1oW!U9$xLfwyAWS}NLijYE{NVpjdXdyHUDTXdqcvomP9y^IY?jhcSI$)~J3?{`a6 z^lJ~De67+GnsFCxX6}^+`pY<(5%P}mK^ewhaq{BcCv8-ntY7fHDDy6Ij~t2dOj4<L zO0CV=`tq6&crXZ)d0lqkIA>vKNSvv-C^f!%P0ZcB(9jE5J+6m(JpFY@j633)*VI#Q z()Sm+b!8f#e0!>sN8ViWK0Hgm-{gApy~y0|dDY30lo*eiJ3q{>u$2$CWQyrV%L?;l z&-}X3xZi0LX%U<m|JdW9C}l-f<I2cvnd-GNEAQ0V(u;SriMMNgjF0}Yl3H5->96Jy zy=n6T{LuZz$?Y=a_is+Gj>hei+^2Iy{YLJ80{xM1vX=rX-z|oR?z9vFr|@vVca+5c z$8XeM|504r2mX4E;uZvgU$t;|1TF4A|JSn=aMobiffUh|3jY`4UbF)pVu_RgB3u^s zXB}esW4Y%6w^Rtq9`<(c4?4$nMXKVCB8VIJznF=F*j_S_hyw6;gy3MT8M{vr5Rs~j zwFH5B_tFhs%mq1uKnReyw1-1nT`Wk+7(mqk2n2cr!uuT-js+dq3;aC*#9z(65Cl4K z<-Z6B!R6{!>$#WeFT}TpbGgOWJKVAZ+<t*Tc8C6^<f<MEWrm80CV@b_pfb>Y)c>IN zA+IbgvsC^DgcSas_Bm)|I0E^B6hZq53Tl5bkPga6={ax-2Aqj$aQ<RP+?U{GrFVeR zVnHCjpuZSsLLKdB3DjmEP%>9F5CI%o*igkg2b})i4ai5~FLuPSdC-m<D0fc@_`eXB zU$)sDpj1o#p1<L}Kh0Y<X29vtd9Cz+F+Q(C_c3EoCP)bX=wFPhb>VLvxHA7mK!i|q z2ndwz;Fux^{a=u;+PiF@hGKlC+5Z2j0|+E;_okQ2Jx8CH(NSH;hy`4%?HxR7o<O7V zoP)=DcW2xEkN)k{V!4GtAhGi}(C`}&`fob#SmRrOJF;u)_6qyF?6H1-8yX~4fdgW> zLUSLdgWhJ_90&o&{!I;(1{h1mS#3v9i<_0m>3>lmvhi*(NXiPM!u)SS;3Q#u1>{h% zr^tT~&6}}+y<{_J&;Lb0Tz*37pq3mBDD8hC(18j`(19xL*#Dc#Nd;&lovb^w*nd-r zzX3^t_MJ6`|Gx-OPw#&<0NlSH2uQ;f!j=245Z@gT=n80`qoUit2+#e!G@ur)e?8BE z_R;{z|C5hq?4A@?2<Z8LrFh-|_6zg}JN|zWE#tpJnz8?*RiJF3?EoPlo4=g|2pp&Y z&{z;?^nZm~02C;R@6NwMd-?7ON!@u4T<jg*v42Yfz2*NK+$$5fxUwho{J+R3a0YVW zdh}o5Z^;M$|3;4ee@Bjef`HIUinATGN2M9hbBmQ;$`c>UeFr4Y-JMJX-L=#7Eu){~ zQ{bM+p1qjP7sSV7%wr6yCBASydqE0DXm%(|AJRe~5Ko{ldq67LVjz1iH!egeLWh1L zTd|V-Sm`r!5Fd+hL;zhVn@`Q*L}oSt_e3E+(=y9mBQr<e!``F^%w5jleh!q0c<h$0 zrFOte713xV?tK_nTd7s(J`%n^_6U>@#A9_ORy51Fdm`TQroCI<O(Maa#e6i}h(aJ* zo+EhT<GIBVz=&};nftlJrPKLZ0VCo0`C9oGj&qmAg3fWg5yl{%SaH661V?W^Rn1W7 z1HT;YOIYK2T(&rfyL~?}LOl}4H(DWl6vb5)tMlM3F9*``cR^fN9Jw6E#ChV4wHVJe z`uNm*RB?lv{`H#mWbPiGEReXUrWKz`Hcu@6Kq=s>FSD`|nxlamx%k2tas|YbC2E5a zwc@%`TNzXVvL}AI=9wH+?mN+!ec+aGwqsd({G-g~N8HbOnz^os&pmL;cC348SLd1e zy6z%0`z50rUaElLF|`M&f%aJhdvSYaA9hd52s$5{k8o%Q<tT`O@O6C_R|q%|ei&b; z=7egf&2Z?$Sds0lxB(kb!y{N-c3f8ur=T1Vb@$b*v@}ENc+XoJiz6H>`1lUoF&<6^ zy782&zpuCD$T^txeeW0fT4H>3J1*ixe5|;)u@uKq4bQ#A(=3`7e`_r3iOOTG{Cw`` zs#@v5{fZq<4gx(<IATE}l)WzNrc~e?gzeQ3wXRn{2Uvh+@Q-+6`GUOYZXh-1?5<Gw zFm$34#0L^1*SZlzQ*d|?XvFwY-6%q|&#AkdW#!fv%l(||G>_ns(|}QP_gVNlLhszg z<RvSPI6OxHlL{U%JRnOkgidZ<d0it1&pN9WTv?4DG3I_@R|OK}i3Lpga3(?Hv>VEM z?nFGJ-560(mU99xWOq20yBo-TIJ@3qSWSbrXqkDa)=eCg%?7If2$=hN5O}XZOryzw z@WcX7-g6$|bP%5F3Sdi8jM(P77Zw)2#tpdobBr(c2oR`(I~H1Y>rRzoY4anHk6QL! zkON}M8~8*U$cZPGi<mA3dc;+!(hNFc;ft>;eKg_?+!qKiZxHu$slF^V(BV8rToodZ zdSwp>9X19b5aQ?3D?kK)-`Y?`_c2wV5D+kvKEm(C*ku~?z%0bvPHRD*129i40uN-w z7eufF0X?WzsI}cP7Qlf6Fn@7A1n3CbzO?S;RTN_)b`RwPsS$|Jxd#M6YA+{-v_zA| zL0rJl;rQqg&@sgMG|V_4F%3NU2x?e?%b_|J#3T3!=ntX<wR)g|{DfIzJXwbkV&cXi zuF5@4Rca|_KH`A*v>A8Ic<qU0!lQ@w?iD0K$c{zSD*)$VV>1&Lql~vA^Kbbl%$f(( z2!OlJ5Hz{2%=rnl?(pGk1)yJn#2tE6iEKdJiB~66rBskrR$Zk47%tb9#|P3a05jrp ztVPtSopT;#@zjZ>gLsVbrDCq$hmwK&Xdm%HINwhfd=twJ6wecHr2+A+-4B=v-@b?u z6ZT^@{Ao8UHP%buuDPyA*fpQSB_9Ulj!d^_&y~|F8L<}`BVGz1sdP054Fd6{0uU+2 zWk)!#bmyiOf~AoI1(d{tAJWq33gW5516@=!1#RL0s^Sypy#jI+HD*yAIC#899H8GL z9D?}7bMY}jU{2(+a69dbFmt|n1!$=(Ee%GO)!$YF>QrWlJC`md2DFG&-E<k@e^v@& zuBz^I;cPRjAg%PnvG`i|N~Rm2=DmZ*5pNQQ7}7=nOOT3-XZ8CI{deJT!q{Z^Heo<9 z7MQKiTU1xvdcKz&!82Tkzl}8|Tyk{<hI|b{5H~m1er_(FJzt}HE=NIJ+(P>Vg(1lO zA_}6=<EYa-#wKDgy903ae;tnkNgLcaG)CjLaG9QP2;CIYCAkV68MO9iS6jdWS_<MI zSgQ5200zBv8gmVc?9Rw4RFv)8kbFO_4(|<{w9jh9|9W;75tng}+@uqnYEk*->1th* z6|iwhIf%XN#RblhbGBGTxFdy8LGI3-tqw?>HP#-z^V|G~nj*WlmUjs)e~k*J=jo%R zkw!wWos?WQa_NM5EgGtnU|sA*N45oRWOj|x_nQfcXP}u+O(eq1lC9lO#GpkaFtlj) z?iuaK=1xk2K7<RKaK@msHQK12Ka~kC_$*}8YKZama598V8GSl&RjI2Dt?p&dEhAZq zb=CvJJs65m?~%d%7!m_%qyx@FBkK$OvqsWae7n>Jw;S$)FHXFly1aQ*bPNN9Itwd3 zu=kVPc5rluY>E_umHVM6%dGb~P|B|duBjOz+A%Vz>^LOUS!sLsw7tP?C@r9(Yi(9@ ze>+?iZjh&KN@*7A>Mc*`b;bt6J9=hzjvy`LH5E^0GE?0a4)$;FV#l_aI_+L^?+E&9 ztcb&9DY<dhOs4z<g3UH#?%yU8{$R;&)A%vD<U!&$K5!QJO~>h6IAndNqt}|UQRlIN zL`A#FP*L8T2M&<u4Lu`gHR%|k{c##7u=UquAri4oD7p2j#hRN5DZ~h8FDs=gh_OFF zZ$65dRZTBG8s$b;?xr_!wm5#G*8cGjP7rkKBc1F{OfRhpQlvYUCZ=aD|0yd~mHdJU z`o0#J1Ia#bf%d$k=tM}xC74c-yU&<q6Wm5ei{?riHQyI&nqP&T>l$pp6k+u)&UX?& z_U?Wd3sp5bZkt?>?6t0kH~1DLsh^opxOC)6>1UJA%lgo71Z(F8YBz(V&>ZxB-wxSI zM>_r_w2NHlP)1#CZF_y<&RTTecn;4(TDj>)GCAKN2bm0mUQ!*nt?uv-NWH7>=z!d` zP2g-vkMoQ>G8F3Bn>eNXTIn>U*f!zU?ZMvi8~n#|JsUi*VENv{i2YA9V44B8xoz;% zKd9-EhUBIw-TB@>Dbk3I!}_Pc_ZGUND7T?l$E%|Kt_*jA$ZXQ!<65-zoQMgBmZ7XZ zuplffnyf2w*G6t=+)CA;G$@$A)u7c@<qO$ekC7uhTLUGKqT2Hlp*;`=<+I^TuR%$k zPH>xaJJRiLgiN$0$^%nJ@ch`|q=T7?&%A8>n?-mpXByEubydP9_uXWkGuX|BlRT+6 z^~GbYX1DaSyJ$gOZUi_Zm&ic1uk4!MLZS7v%X=DMt9Ez3PBRlJ>-wF2dhN8=n3qtP z1%r&)%Ac4ys?yQib<ypmiMgpxK82uq=xPW9N0vwByuTV{&G@qYC$4XVNc`Bd<3AI~ zn-o^s8+>oqC9CnW(mCB4XjkYgtd}aW=^AD1LoHF8j(+ijn)~4p-3YvIi<X=Qku2Lh zy&w)@9OpcPN2ug~t`FCRlX7@7pxf;*>4C+r^hh*Hg#`;yLP^<H&s`FYN0JRGKTF0F z8C~6-LYRjPvO9uZH#+N&oo4q<cVB0&7=9T>FA_FP*L)*vz2p^c;C^Ud7a$ql=3GTg zsTRE&y=s`)@Kf&9=yjFNG`(fR>YqhJqt}H1vDQtwnepps-h1&yL*oXW4O3~ZU)^US zl2`nwClklZG+oi^Hhlxhw*yrjEQeL{ckWN<qEJV3ysv&uT-ME4IRSYVwwBOU*KpMg z14Z>_u$G4g`@i@(q@?8>$_TNGBPF8<N~4q-=^6=dQ@S$yWNoc}P>grfeUzqebY~pR zeG%1@yJ1FWDifo&#=`o4KUA7Y4XaK*#T=M}v=o7JXJeGymY{Qn)9%VI!CAcY6{zAn z24&U27B}COOE}1;&%%x!wZ2+_I{xhM5XclqE&-H>-5d6Nh6tjwv}H{w!^)8M6Fu5b z0xF*0*D({(CfzspBck=ET(@E3qn|}RI)IAOT!HYbaf5qJn{uB%i<2g<+j^}Sb^@W9 zsq6g_-weOB$^F>7S}||^6=(2e_~ftKiw9?m9imTf92^$lc(iU7twtOiMgwUASBTw! z_*c=CSu%0@q}h8f?0HSzwR$DWpIRwBy-M6|VpJ2|`Bin*SDQ-zCM~kPI2CI6083Z0 zx|?IE_CB<Po|XR1R~){5EUvjAf!(Zpti{kzh3zgG*CR*&xXXXLBrwcn;=_JDf_N5( zVwD4R{?F%ygVk>R+eS90q&4TqB)ZWL4BCO0mM_qv@x#5zG>&ZnFdnkqP4ojiHi}H- zMP9C(40?8Kv$yDla+c*blFS(nrE^N#l{k=QO-U25rsS#6l}@jjTF9NwF^9|=cD8Q9 z#;?;?%$xVrkQVVxF8IHCY1)*xyWU@6bm!OYDL@(gn?>sefZmFJ?1c^v|8L}?0FY)6 z1`_XOSM&qWao~!a>l~@KKPr(~v>-R9R}VCkj`UbtKC?MHC`cXViz_!3@e8;rbW)~f zOv!dd-bOa9xx1t%<Kv|@O&)cr9cQnXja~RANKZjn)0>1Yt!Rc5nxFUQma?)>Mn*_p z<b%>MGl6?M<)j^I_|bZ+Y;$b?j6`$_HLHyJr`O%+-u*$v;t!wxSU2L+_%z32@@Jh% z>QD|d@&`1+^4={hub>hc>zYfT(xGn7F=XR5bjdN{7Z9Uknd>?Bp$HV188~}411SkU zSW5G4hw?|G*w(w979!3WaLRX0M+|O_zpc)<$WpPm7^r<jf5gVY)*FCY_NxC^jfP)0 z>nHky|61D6IMA0pnl{nn{XT%L0w(L)I@PzPlRws6^eV8aZp^pw;;~O%uUl!611>kk zUJo{yn3UdWii@~OoPCBOi#GdDU54>S4`HpKJzwBs2^MLOC%nsE@V+VRgd*z#%d@A| zXxVIgD5V4<;`OVey0`zU?BN8RvW4^{VRF-@dI`RtjCjO<9`j)@CpTq8wM&%ISNxL| ztgJ*tpzF`95OwT!EZ8q+n~;%~mJy_2`%qK4P%hxfH8A%jG8%emI%-;hlX1T66<IFZ zeTn1zk?g|nfbiJl17|!`gJJ0Vi6N&Kph`-_LDRuYxa0w5NIKj25}R2VSQyls5ET7h zBfIBaMqz~B_J`l<pG;g14}@<q;aaT0q`?MOT-<r8s2Q)Ivsut6d+aw;?wtT^QtZPI z4dkEu2Gt!%O@}#ap9mc+I66g1cR91BLtNdA<>K1}ho3{FaykocsAswzmOp$oOIk|s zb$itgr3NL|zoC!c&Jkm3j2QhV531Hb1FKpwoOPqqm0zk`i5!dHap{J7Z0n8Z#Aluv z(YAW1q+Bc_z4M6E33Zr()9Nu5$zS-~wasXpX4r>SwDM(><1N?5pwNNc(X`pDhf3m> zGGEmwX#OS)eSn%<Rw9kqwZ1*T#Nx8kiO?>XULk+ChvJ86m(BCZmcP$cNv^vb)>Uzl z5|X4Rib92CQ>aN;r^(+j_fy!;*h_t?g3cDfM`fT5&opz$iVc|+Perq|Gnxu6dtS~A zpw*W)U;78-6(N+Wv<WUV{oLWGPy86Pg)(d>{K*}VFnj;9x#!puRk2O-r+}^i*bXiI zt<c+NSIFl|&EN7{C5|sHYYI${teY4ho}#uyCS^2d4)%MbH~nCpYP<$Fan=jW3pwLP zkD87m(k03-NyPLhj)a&~Nx%@1Y!OaLvysDC-1j9O$5A?n?n+Qh$NbqDbqLZBh4CqD zv^k%y0NKc0vjAJqzB^%WCVJr&iP#By2YdVXHw1grZ)(W@D=hk?QDL!lf4NcauONIy zV2vj$Nu}H_=Vg-cNYcnN-}H486DJ4+Gwvr!sLi(&d}^5`dfJmsH98sPmoY8zc=tnZ z)y)8#bcw^SyEGMOj5+nloN>iY;y_Jz&&eC6&?aZy_d*3`o}(%8ybc+-$*WQ`uGuFV zI;Y@nsPCrDj!DYnLqbsBWL;rYz-oB@-4p(UZmUrx+hlNLjUdh8{joLlgh9lrM6V05 zGWWH<fA41Q2Z4u59ow}=fksGNvQW;sdp}T8m88O>QP`*#3ur#15x5ZiZUVL4u7B-w zDeY>3b)o|btb{17Bk=x6jkFOlV~W$=Ap+H37-&_du=BEZ{t?=!pLRV-94!aA_T|oc z(d{>p0{09L-uV@H?aPq7bu@DQ)#_HyE!v|RAE%Kd_0PX+Jj>4lVhOK&w9&);rpoap zuKd<`TMHR+^H;u?1%E4<w}-XD7F4dO6zNL|K2^bZm&pma__pYts#%r8^!6{;DAi0a zubop@gvwWM2V@UspEgO9t=jnqL=PKe#e@u>Q|xxM7|d_Tt`l}!bqSdoeowxDTr_n1 zY&VeBDu~`4qtK$QawN*NOyQ8=a+9M4+f=u7^3(bqS@{5I=q?|wcs4@pn6zTG|FAsx z!uvVQT8YE+UhC+HL&cGRt(>N#iU&g0d&w(^V9{q^&%D`2Zc-P3QB?!{C$9Mw@+900 zSUnXBJG-H~6N}O+>cA1NpoqK~h1Xri_DK3NU{~1Q1V>AQfd+f+d|u4BeG+f(YC1d8 ze!)<=Qm!<TzGz+}*ASUrTQZX7qz$#hdJ<-h0}Oq~U?gocNt;i^5V6tVC$7|fvnV0b z7FWy1J8!65flu38q7e<vEAZfX!~Ngo(pn@1?im%d&s4R~0PUc5ZyIjiX<^%`OzGLD zhNE)p!{P2;;x6y?1fEW-ujEauED~UWL`80c!(BltgGrN+?{3*c5_}10|4b8u+1mT5 zADUYfs_EG-SKU0b<VP8wh^Q)+H10*2N>*55u3o^jp38?U`GLo_buxwGhC(lp;m6+X zM4G*sT#`Lczx&&MnjFxxd*jlZSI`4zS}Tft^`39P+(LKKsxsGsS-sbnYE(>=8d5{^ zG9<3akH<h4K1GtvGeo>FZ>7`Z$Y9NuYh+gv+B{9ep^I_xuFf^L*9S->EH3rHNJ91d zevIwh<<`4QYYIa<-|T>|`?!>L3F$cIl^jI$!V6x}1b@+#j!&E^J&_dVal(3bw1z;Z z+`eH0VmsO3x<m^5ci`6CF`3IMzlnGiyzdR&M{;|1e0mYshKDzc#q%T;1Sm_)u<*Rs zHW1g$<JN1M9@UH<Uo{Xlmk?$n+;M?SxVu5>C(SGDhD%Sd7l~gi!qtX0!UMxag5;4o z`!AqNV;mcNov{al3(hjGlO&XaR3Z2E6uPVmnvF&o=S{T0L2jQ{T_#UeWGHA_n8f$& zk`|r?y+Bp02L3P-H{UcOPD3wwNu2qL$vR}R=qBIs%sTDm`d6nhKgln^6VWllSDjha zm#iMDDHraOt-SUvegwZ-cy^byw+dxjXeu@DVj{`T?k3<rtGNyTfJP2zmZm8l3C7}9 zVV(5ka@@;a#3eU#rnEusaK@K?$I&7mId;=_>#@CU5o%olYv2QlWCdRt3rHqbn|Lz` znp%@>+H{xYn{7I-n%^~RSWwAJSg3zvpt8;av{NJ^2a^-Jg0+>&mO>I?+;%9ExDoIH zbbI%!&bx9CE^BHN7O^i(DX-%9xu(iQb{ThxJ(W4gbCKVE=aDdlbq0#wC~}^o7q$%` z1s4R*f0heUN=@iOSyQu55Pgf)D%#20_Gx-vW+5#D4T)VB9d0T&KWx-pyBOf0@H3^I znwFs)V1j!F*Znh0)$qa9yl#AYFRUeSPFD{VsLG**x7v@BLuJx(`<HXDOQ%@NNE}oA z9EGzjr1-sVJ@w(avfohP%Pg3(5u)k&vYe&CsMy(6PKI-Y{h+?9ySS-!h52T!u(JpC zPvo`!tdehhkRgLis|4H1&08*Eyn(-&NmwwQuG5)W6G5MS-Y=W$B5qx~Zp2wYbCf53 z<-tz}@3)8BNSkp>a!hEREN5Z5>S3&rb)XWh{CvBTNw@M~+vq@&IKtBobH@+!F{N~- zL-$9j(vTX<9jbMfMf`K8$tp8Z&PjXK*>3tY?_ovBZa8gVr#95to@evgQbJP_N&~(7 z%<6g_bAabHQ~=jj6|Pr&<VX7~c;BhZ1{WpY2{Jt}QyY#Y-FnjDyiflW?2cYrMV*Am z>G+AEENWD8mQxL4g7hyvy*H+zZV@_D6%iBjvBb}ucFL>3Cs6*;>gT34`S*&w1Xa&< zCx`&uN0BA3*5F}Q%t^y)h`g0x0o#@HvtB7Do=i+Zo+P{jKEp|`yn@`&Y%R5=Y9P^k z3hSI|CkzSA^2w<0aDEXmZDSvw`+<K=h&lX3IE?&Fy7JoKw4seq2$7kJVHV2yqjwU_ z(_s8@T^ms=GR@M^b>{2?B^*Pk`4*&<DhfX>gi)!p&M$#ea4$*9A}6dlRN4c0%71R0 zAWAq|91$^f?h^baB2*Ztj5R3eAdf*b12s==2wN4hQp)zZE@A@Z>RlVyDED9it8$8F z6tM}%NuVt)ujPD5@0&Q~8<opGkv`9<(H#83`PfK2@0R4QIcN3os|+DqgReOpEF9%> zBv3BfroQHTi-b2*U1DF+%&%V$uG~kSUkiV;lZ+rOc1g~$@}K+`5|*8F3i>?r=N=tN zDPo8xo0WW=!2cRF)H2=byf8p^=_%>#YK-|Dak6&n2l6RFtjOB>`xp6u+*uE$W~)48 zcoJ4y$qG*^(MLg&TloqCr|oBe3nvfr3^~tn_t>mc;M_5|(JGq1+OtQb_okLZN3Za` z_~govH<RM{Su;xUWecM*6h`9EgdQPMkt|5jfRpK}V<|;?DZ<!m%ygQSxv>3CEw<Ml znxrW7JP&SLabq;j-KG<P3qM+F?>w{UQU^~`NJ+fkPQxeCu61ELEC9jP*fh-b)wre- zC^-Kia=6?bG6j=-oMS&{5u8iEouM`(eZ6cbtS*2Q^0~W|%6IDte}+ielW(2+K`9M4 z?rU~gz_R3*{@4Q_K-wq!kD&wI2c5OUtZvE7Pm`d{_Ncq8!=DG3G%Dn~A;R`dUYM0x z$)ILJhlXADLl);*M2%nq<@-M%PLFvCdVf>#WfOy3dWeY|Gq<AwSdc2ejH<gtUCIJy z3DCn6XqX%k%=MS+oM#`Dl)rbUeM^Q3{-W;#wQwRlU*ESwqW3|!CTvp8YI_o4BCz3p zc-KTr`a7hVu<3vxR3)9-P;jkJDEH}eqVoxNY7rFa+4r9?6~UX5s||rN)^VfT63a7m zD#IW`2r?o6O5R}wo=#6ydgUr9bW=ryN|$^y0C!7!A9qu8x_Ond-n9YKS^9G78TRts zDNUB<i6{fc4rzi=91rV^`n-q?^uHi(?TC#Dw#dS8tgua-d_B`?yX$m4d$9HeJ$X3g zt_b;xC7r(Z)GR{^tcm*`=JNii6!{XO`V-x;Yi&J?KhjXNf%<!wUT$;a5cT&ZzT49E zzmzaxmrnf%8g8|4S{?oMI!$G=J4g3dpR{5}@sLnF{S@<L9m2`>p+c=BIDR$C8klwc zm0=vyj}v5aj**Ul^h~(0yEd^<h(pd|evrfX(s1bgoc_f0qSO6_vvo!9kz`0_Fq+f# zUP@|CNQDVGl%zllgm9G{yKFp0{SnJXqh|DlzX%V;?-S+W@*F@b6YwqnfZnAV0}Ur3 zd>i3JT=Yx=K2POtpbBLunLin(CDRPq=}%WFAv;W?wT<0dbIz3;^6z<NRdV*pA2zh{ zPd12o4}bQhXO{qH*3zf1x2x3QEc3D+4~2x0lRq4oe&SS+pDCscu^d;SboCUzzNcg~ zz3nW#yl~zs1y*`keu)t^#^+A(J7XH<(w?a)8K>2M0OkEwV3v}N^jz;$i(cTAss?KQ z)>|	-2(+U^Z*zr6Gm0tVAZvE1C9wCnJf+>-Z-->~WL5fU?jh(iV{cB<52pr+{`= z{ESTR;B+*w5eoTzwLgVZK$(T)61K8^2<7C@rBJX6K*D@6Oj!HsXyRxNRZQ<=bbR&n zd_Zi1TeYzqF*j+ky`AY@z<NE(-F4vs>VZKVOtK-)I#7FXAOp3LndtDX6Y$R{=V)<b zA)it!NrfB{gnal;6~=TWH#T|ZP0Ke}99kVa$fkl%asV$PCfd5ITIRd8H=0HYnEKL? zcOE}Ai%wtELF&t%*s{-{4cDxXm_s#$E9g10HMc({Z#)jQ&zMG7VQf-oXUC=0b30e0 z2Wrn*#!(=f2Z^RJ{uegQZw8RF7zk4*4fSk%@;eqv<P+muO%!ZM-pNqt=vgOrRPN=m zn5@r#nu3F6CdgeLS?YvSzKENe^<usD7}-6NSwJ-d@>R4w{ig`WEgw;bDv<+T@wv%a zLDEx+1nXu*<eMy^EV-9wMReqbCeHXRb>yeC=cmm57`;xA`5JLinrLcj7A*D(LwByo zw`3haOG%+NJ_|=pdr*i=+gad&KOLHMTKji^+l0;_a4h@dFfcHkqmH#{3UMnT*IRZm zX+C!a=}=7jPK??Jjyn9Y>wJ-3TBSgBRY78*(DNQ{tCg3=4-m!5Yt9B1=Q11z<t?3e z$5jOwUjZk*HuUWI-Rh_#gn{2S{w)Mi=PQqMczdjAkt9rusl>53>sy)$V>6xkxXiAT znHDWnz?aE<V$Fa=j3kaZ`qr}}Aw=_;0EU#K$e(<Q9<`;{cuJzXq4nmM84kxLIPDgg z*KGz?@2#pKSdOUvSx1o8IZWbQKbRhbXuy|V2e;N*{}fR8;yx3kQxc>z0FcUi<luFI zD|1(M@;lLcEVGU{yZxS24B=0j101d*jU^#V01Z7bD79^kd6INxA(S3C3)xH&5~8#Z zI*Y<>zyNbpk*Xw0oL|cUXPr?`f;LlWK1mX|GX-QqQydkjh!L?lX=a-q@YW{iM9lHc zlvUVvPID3Yk}miPt*SsJ9{QF13-v7EOcyF@VZi7RIc!^S;KT}=C<X8FBoIlNyj6m4 zTKw;Y)s3b65Jlg7GfOpuhG-iXUr+60Nr~bD2s$rPg7fL$aVC--uwNI@kb55bA(v-& zC$*O#d^Lz&tHLYWgScm;?)g`02G-L(ovoQ)L)1j+O_2dk8qz5p09gvuJHK!4Q}5JO z!-O9Z%Z8M{nt5;93lN>ld+Zf#VvijJc)yv6>xr2WHgi7$n=m&JyPcK%fH{<aDY3u0 zo7U_Z0wEHU)Aa|fDgjb#;!yE~5+sx*g@Pe)ciA1Jp)P0l#L4}B!YT<Ar%OW2r^%x8 zA6}(%j9dqD;xm4xHWeB;H1y9oc;v{*T<fMiwNDvKD|Anq(J$G5-{JgI{p-~|e3vB4 zyk4X%)Qvx`Zo2yTdEpZIozBl521OI)Ii@*#K8>Nq`R*1~@jXl6ajB(_@a#DDqJ`xL zenxqAR&PV{z~&g-^wYU=y|V>=_@2RsW~-4X&4SB}`M8RD85)`ezVX5JD?pb|#iPfs z3wRq={FDQ@bl@WKvE1;UF602}I4uz1i(5B~?F={oDSG|Q@3`x4eiYmNmk*6T{Wn$) zP?P{kr#@ITx7wMGxxr6bku`)(V3QPx$c3!HS>qllhD$i@3S<NWJS#5?t6O8ChF-!r z4vk`!H*Gj0RHR+^D%W__uSP+$DifCh<<#{cuHtgnyWRiP0uE$lKP^ytacdX&d!|B& zAK89RWW?(lv*k?17SyK)=Fbb6fdi@EWT>tV$`bnm#Y-=!24~5PEB>soDmp>`9eGLB zax!J%{5j9`64QkTk+KDoQ`CVb=LKccFr!}@h6w+xsakT5?2*y<D*9Lxt;SMol^hZY zc^HRpxGS`xq=P{R{(Zk7zgO#huL0tGkMu15mnmKpxb`EB18~TD$^fhfy~lx8|NKk; z*7oI(miP5G65JN!>>5l&&4iKA`0ph7fQ9t|Q8T+=?r8A7?eu;TgwYqdsNhcIMn?5~ zcQf@U&6mx2cEVK2&BQF=X$Pi9ngGQrO-T(Rl0Ra)c<GCM9lOUEhSMZ>Y=kDwp`it` z<0@~DqOF}e?}pBO+M%J$*;4LiRJs;|VPyQ<v}W@lAKyFgMaShPs2@L@-JNu5ZoqZ^ z%wUKJjX6In4$?U?KlKoIIg8vG8KhEIW$BxusLcM{4c3rS$?=*>J2R5ZP{|lr0-yDM zo%%X?D<D9zH2rm4540l=ldRCUZl$nR|Ci_8tNR|^TR#Q^!aDVVZTWq@6YMd!wB0xj zaSAR8N?|2!A=6r;MHOE&F#H%fV5-Ur)_T3KQ-KV;*2Nq+oy!z=fn&+25c7vCD0o)o zt1O{TswXq0c#zDIJ(99kdYL*9&rs@zzhtvH;j#aKy1%LP{;_IJI18rX=0j}M87OwL zS9^Jx6gjS!K4CK8^&riamxcKj9yo5Bc)~2$B+{rjQrqPPCrtyJ8KJDf+DWLW5><&( z>X`5BYRE60d|Wah42SUVstV5%LoiWG10L>rQ2REixBN@E!ufS4vjs94%kfHg%h`(j z2bBFx>wAq|10@cF!O@e1)jxLhuK>aYG%QT|R0cXUv-sM{)n0c~ebfV-*U{B<c~44j zg6R%7R+~gxf=X_m9qdK8F%~f=b8HyC*0n|=$2sJ!%jQe*=?g-C9?7>)ooffXc38)R z;h7~^qtylM5S*9YWqlv{vyoE})`%+)QI&4`io<;BmYyhHRs<Yc5#Ji!Sq2kV6bJn~ zt3ra<KLsGqlIv7FX}pG|rDKt&2bv0Acgr7)gkE(t^!3=VO6l})3NDpbZSS!1`8sa* zj4ws91LO81QW>jyh^oa-{|7Wvx9$SBZy5L0mOgUpwl;dC|DvJqM*VQVm7z7Bu;@{f zkB>7Gf<mJ3JMH(sSqNcK{MPwsFf|vbIk~rkNbwSpzqW1ySgTE16AHtB)tctJYim=k zd4Qlv*+iKNH4*j`Ph~8jW<=&>{{h7`@x1%#{Z=ILeU7|dAhX0|8sGEr?iv}B#c<T* zq2DFbh8OhmD{>}+DAty*?MdfP45gh>n=N`vJ{c46Y*JZTedVe-)Y>{K{o>giZ3s+C zN*A+Du5hm3MvB?XCEr}b@A9Xncr!=0Mtae3mC?6ek>O=IWdgQy#cYy}P^8TfyY}sh z8r7^a(Z1^OzG^!nP-l|1T>VHS@R-+nb^$CelDnmS?8m@Apib5eF@eq!`4r-+{VCCG zDP<`?p{RB`tSpL|?6Sgu8q+8}RJ3X)Gj8=48`n1yC^)FXra&7eU;ltNM`bwAVB&gx z>->w|1jLFmMoeG>>zqxaQuLO218I4;Zb@xg;9KWZu6~-!n5KG;h&CD_palD~x)kZ= zjLT7HeNDyYds{jS&ys4bywVg4v$4)!&tBAKq-b>)$T*w7OmfhNb!E%kT^c*Y)Rm;H zk#1FVdg<}!-!%$aZ$h-eCR2_qZf|KQe$TFA#2gCnuMd??vywp62zIjG9_pOHXee`A zWhQCo+ms>AlK4maXdCq-{bvDAaRaac{A#j@xX2rT96R3Xx-}80vLPT?TU1LDhslY^ z?R#V1iQJlAO`HK6kd*cv71p)*Xh3r$-!$64eUtl?C@y!Wz2sZI6ACKY9M@D2^>a&B zJV12b`pWKbThe_>p=>5sgmi_H$ZQKix%8FZI2>%mfXsp{uID&N{(_oUN8kI&;TWMz zU1W1V$PXsXpio7&@U0@0J|u;ZcVe*@_~I_;3D}_xZc%^|Ev<;Uk9?g!o2j9N$!LOx zn79N-T{<<2i$rR)S705Ukk3_L<9xSO_@L={k_6inc3h%7P#hop8l5&v^^vpi>KYh* z>m!%Se%(Fz`mLehw)%8K=b*4)&Iv2QM@1RKdwifc#8rIXLi~)-YQ!&x8_4;RK?4{Y z0Y6@JOHTK9kdeMbnt2KJqoHYg$7{zUajvfsWMmR|hbfpJQyZ8gR3vRJ$}!H=UCRPn zzx*bF|7EgOXZr0By<yx>3M?zc738N(D}uS+9BLmz72%$y1<YC%V2!Ad1?;$#Fza0D zerv4m=p9QXGfXjb&_v$$ll-`>Y14WaQ@1P4MUrjw&SlsQ1?$4Pd=QewcXbTySlYNH zo7M(|#e_pIk}bKD9ULrFFAnNS!RRP^8(k-Ri!;Z<2Ad`z&`2XprsJ1LtP0IHZM-1u zYtvwds(l!2+bsLNf9l5jsv-K4$bS-*BeB~0=41<@(0d!{aycd>aYiIWkSZdtG;|e7 zT?Begd~#O290OlrCoZg;{yqIA!ZEUI=I)FkiK=oj6&MFMggSghZOUJx%%sgluB!41 zV$o76Nx*tk=31XfH+AO06`R1%CC3PZr#9j`j@=$$C{Br!oc&}h;SDD01!SV14DXB- zWJ+iwea-gkAt5B)W6jh|)E=&_t@#lKLp*OErp*?smuk+!wszzS1*6QHZd7w3B>p2| zjpYrdGGOmE!2F#IV7ZaLbS41}=MDHUaWAE$yh&DMc7ECHsUAk!tDXT31_m(;p)i&4 z9ASbAE>B9Ow_`o2Hh@~su)dmGOS8GKxlJOn$oN@vdX36ef_G~CnmO^K>8XlH^R%oS zk4WWm5wEnzBZDfPrnj`k9PG5g43m{ZGzWhr-OQBobA8g5ilQWEtjvHIYuO8#sny4O zsDlLfEs*@xo2I06Y<z#eDwtmIARt{Z{yUkj_*w)ksw?7Xi_uUp#*MpSIN^y8=gxMm zJev<7K}lrE+&3dNBA8+gN(W5UBb6hJdZ6@de*S4ua%K2$@>3+G<1NY~V+ywA8ubZo zdT+uy!T<LI>&a=@_sB4E3ghD>d8Y4tj=wi27pd1;OLO=}wC~dQfwZQE88oW4=fkX) z1AW(?jVU*!2$Pdp4o}4VbvgG3dx-b*KhY(3oMN<y@a8o44x<Ax`qDGA%_>V6>S5@| z88Z>jx8m8ES~a5QDOicpL*{`DY3t}xr7$grR3-~fB8POAF+(D)Uz%Ip8xw+3AHbXM zvhiDE<!B*M7&zIwVvU~S_z~UX?1l|7l7sFys}g4@Pl*VLq9GX=&0aE3xg$C4xbvq| zOk0S+Pb!T{>%frSGWF?DB_vvXCh!(k8`m>D@O#h+ljBQ2Hrl}^!N~?05-uIYknd0B z?H4bxIqu&$pFJE`gG|dx-b(uxr?G1XGH%zG>?r@7P7by)5h>cf1P->KPsDEuISyId zpK4mG$l)ynt6BMX<c<#pgK5s0A%-#){zEG&ks;<6UenCUfyu(KR9<o?xBV9{=rh^* zX0?QMXIhO4@Tt=al~kUnH|to<!5MzPiYD-l`Od^tOxoAptGCr2V^Jzr6isp*S*{*w zl?Bxt-l0$y7)rP`dV{^pLE!_?L#zYHP`aEY^x1EcL0Ja|*w*xt1cl76lc}4rY;)^4 zwnkt&tlShLa;T*{O;O|zi!>yEjWfUQW1VoCt^hlBp+B|vYC>-zu1!8@5Vp+1p6T_q zW_Jmrt5P*{9FV)CgnvM}!cg)O3jMt`js%#;$IhlqF^|qh0s~47eeaVd&%<21I6sG} z9e6B1dcu#`P&$7Wh5|cWC3nqi8L?gCVU52s;Dq-+NpkdQZSC<(J&b1jX9#h;MW%4g zqRmY>X-kDL5E)vw(D*ue0ApX)5O_{SRE0r#{S2wloQCZ9d1kmIr1)zg?*wo!1($@K zwR%q`+M75xTtJ@(x?vt{$Gl>Lj+S?s@WqsLI4X8iC668|z->})V)#v#)C{sZ2}sch zby^~Wsu?KRJ}9_uzJ>wRq+nFX+^>P?=#9o;O*}RQ>`-!+GtfCWhV)HHh!tt5JYu6@ zj6DM^;yTOE)bY-DmRbm}SQle;`f@*@NT}T=&idHF&1-*-jqImnEFtqB!r8|d&RcIP zEH#R-N+VIB<rjX=q%JrF_ZO+{U%N;vvw0eKQN|(Kz;Ebo3DIa)-OY}vp=1a>?d*PE zo1omAI_TV}$CrcK^&9fmg&bj%tjJ86BlOi8a>t!qw!V9}tS8;dN>|mZf#y5Pt_W*S zsUI9@j7upoJE}5ETB)uP<mB!o@0|UzZw9J35!u;`A$=Nv`s8X}p@{X&M;nbWoV6Sh z?XhNTePEBr{v5Df4st;li-EhkBUuN8)oH*YfxT6vNuLEMrKnQ!H!#g)3qs4ecD=(m z+D!>#b|iPF12C!eSHt|}A@0ke+;Dyj7Pq@#RHx|#HO6#KNxatlPX?+MDd1=$47b|Y zJ-v|jWFV*dYVJC)DYTfcA{@HErPtknA^RY^&5LK#)x}F!skI5R$sD-p)TaV5DapRx z4HM0%a$seqIf$|5qcZ(;v9pkcjJx)7tE)1MHaHT>6e}?ic7Ih9CK)IV%_xAHci&Q; zV|OvFzmC67Rvc(}UzSFPrc{q|R!cs9Jd@Jv>-@MO3)xPEx#|u$z0H@SLnicS630IQ z6n8Lnob5M9yYx=jne6<kNf7)Gh^c82mXJU-FR+RizJ#GCe3R_uJa8S9LP0bG*d0kw zno80PbnpG-%Bw;2!zZYn)&`qkT89~*d3AzqtKke_Q!Juj2N8MKE1lEuoP-JmwuJ-> zb1MLwG`j={%mm}k(yrZ6va83MJJImNkzzK64#njxVs=jhu6xcZ+lT6+F8u?FayP9A z*JN2$cQ{6<qy^5p$hb5b31w`oA^$YXe>m21wg=8)GQOyi+~6^v*M|L0mt<}MFB!~e z<*3<YL=h$VGkM3?H@c7R<}|HZo8IZC(yl{H$#-y>zz>Ne5m0ce6~7ZFHIsF6NGDas z8|!jex=D)mZUYjpSL+PYZfSE&x=5b>lr#O0E5Fa2RLamU@mj3Y)w_Z6z9xgogOajT zf==smDra%4w3s@Vu))KnErF=#V_2xZdF5RZ$7#DaGp`|-K+%Xm<aaD~+Q0v+zNxaD zV?+nd$81VimJDccY30SR^`wXMwiPV_CM0{gny$HeW0WIM-C+Wi?8QR7jOx5%*<1PO zjoEPS{kUg=xK4Dy7__5{!|8!^rKKpj{dv?=AOLI&>nX}xXcH1*fHk1(<<rGm@KgVQ z7AT%2o$fj>mp4SVGdavzV`odlsFTNc2Wn~t4CqNe(9NnRLw^qX6JUobSComAmiu9y z;srr!v^$)cX?*V^&z+2)$Tdq8qP9&mBoX#8f8d#CrzWZqt3iK7CYf}SlBk{q`3j|< z<r`5<HL^3&7OKeTgkR1^w|R5gp^k|VvW}8Je6-A5n-!wse-7he(H}+53;cNd3qs?@ z19V-gU}?OPYVo60v!WIW0WR=Sako!fe>#8e7XM0fBvU?;Fd;WjKs{;ZLhNy(31!;y zRM?cnfkind9Xu_PpoyUcDkMo<!x_On%<1w^57DZY*CdP_X4H_mlnp0CGLD|yiaF8U z#KD+?54e&;nCbMJxnpR(;wF}2J}rVjg2za-I?^J8&M+Y#5>oQ`Ci10oQPu{WgK|#B zV0LjN=^YlQR`8Dn7)C&*l>;v<i{*dCRA1jEV=*3-w`U~QUa{XT<)D&W0_XbbLq*b= z414$8lSBDg!)|1w4TCfLQj(Rd{pHM3OV1p$UGmpIsZBGn{3Pb!Y!AWqHNg8)=(m!r zr|4gG8c~#CTOxd&{N4}0?YuPFVh;V7p(FCeF(o^4o_5&dLH}@u2S({sv){CVG(AJu zyCO}^PJ2N3Ov*ZfRajVrl!W5?dt1ZL$h0ZGN>o$HgHvh(H&4LN!0j>ghQy;Vs&1xz zx*vTOm&TKyTq{X)^P+SPw*YG@gO5Tv8-Uhq2~XKXSk(xID*3d-)Vj?&(UbhNb4u7y z7$tn%C=iA9uYX_{hdVnXei_2x)Y6zIQHO4F%UZATM{lu(beSxh;1a=jOb0H<D_tn< z-h1@!R{zZL@Z^Wz)(lJ3P$e8?_NSNwPLTh@)0;;_{lEYJz1oXthAdg;H48?z1}{st zUd(1U>Lny%#-Na`LgZapX2y&$V~=<lOB<E3M4__H*c(Ym#TZ*u_Nbxnv)AW$e&@{b z2j@8Fan0j#J+8-f-R{?Acsqk#usE*o|503VFS4}EKmBY$7V`D$j{*}>%A@d14a8)Y zldh4SuKHlxsIe4$;%U%VFyv}`y4!2v+|!1UeYKq<-%rEQ_qc1ti%w|IyNFOF5_^DA zF5qRtSOWC@`6qPk2k_3}EI2m~(P?lQ#8x^zMLH{^A?sH<X2QAGIh<&dAu~$MV#GIW zWbf-kj)n^nB^|2i0>l{<NL5r5E{nCte?J5`J0pRiA$0#-sB8lkE`Qqa???)J@|byP zG|;7`**WH&;+f;$4#FS4Wh4B)DXQqN!BmPl=i1tAir3QffQ?6=NpCn;iSPh+p7f;t zWg`bWJ_tI<5-I##atO?HxYu>RYF<TOl9kci<A*iuyb9-|ARXr?gbEF`FN)Fn{AER5 zf7P1c2xSVXoJ%T*XbD_4u-5Djw-nZgLBrJ-ZccFsRq^E$Zzls!&A{kyO%BW{g7NsM zFw5T3f8=|=rePd)<aMNMSbdZbxf2?ER?T>ZOmH!(I($SWS`B))d>~0Z1sL-eSRK<) z^|XScd5XSpr69)6N!KT$y;b<|YuA0p&n#wAr*K+#a!T*{zHgIr`_s&AQdG3^bk9St z^p=Ht;$w+^qRi-FI|R!R?Xzbr24x^Kv=;^d6Pa`f7odCTv)yB6Z8j60`e^z&A<2+m ze;Yc6b)Zs`nH7mF=6Z|4G4rIZFF`t}wZt1<_`LKy8Aa89@qIwCnJDk-MK(|A6+=st z9l9E@2+U!Pv7RkIdDr7Fp6}<cZ8_6>It@CBQ@ls1DyTO~c#m+6wT%gg#@0T4*GyiE z_A{6Ofz`fJ<VTsrs7J~l7<E<S&w&EjQ+SGSgo_;k-SS7+X7|KcjwNM=rDUXNY2Q)? z&Z6q8u8!f-Q026>=b+PSM8;v{BTeNao(cXchigKV7;S)VV!f0No7)!f!Xp^>K49$z z7am1K9(WXt#_2o;v<gnrQX#MVRXVKdu0zHO(8<XS?fhpf1H~;f>(4brHQg|-ijr*` z-+`*)&XSQi-sJlcwFcyfOZ^feIOk&GXAHhW-h-r46;@g4Inkd?M8sgM6Zi1f6Qr*y z6R6cQiUdQO_4c>nziHL)rOdDJKmLg7%+LpkIw<L%u_V66a~?|Hb<)86hGhbUgmz%5 zJKxLwfv4(|FTImFEC6hdPjRkS?0gj2&b3Q)=aH68GP;8r*<nkO{u;tqM)p)P>J;;X zt{QTyN@-f3RCLg*UH$e<kRh-^GOXCxA<A>-o8al*_LA@>aG-;$&4scLO+bYYeNL<c zeJ+4EnF`Q!g{qM%m=`tM^ibyNGusheFtirTw})OiWwpE@O0%{P7to0bAqDBI#+r$| ztu`GhLDz>lMwCCg))nD|vJ=YzFKoCRTTw+T>Bl=w$-uxo1KFMkcwfdmG^0M%c{1*9 z3)#q*<jo=*`6zmbxZt0e$^Dvnc?D;l%ZdKxi|!kcm|jeWess#DQT$Q35HXQVc}dVv zHPAhOG9K?-;J|x(KoP_OeUr8g2WmVV`>&p;?*N_>$)K>{a196Aj4YbM@W|fn``s^! zm?PyyVu_v;Hqhu!XolOrbPS91BS-z8bz&4Ihjgv=O&pPBIo|W)5kAjVza3<QNRcy_ z(>`t_q=;)3NSR#FQr%-1OMw$UqkNrr=+U|I_s!r7?q#iK)BKz?){(Bq-hID_NlkH- zLpAxC2agK%S7QYN|KcXS(=^P1{WL2^9ZG`DXfzY7rkFAEsZH`bMcc=W%IgfrAL$~Z z2igeM@_Pfz*IA`bm|VoSgCQ}8OMdMz|FqekHN;r?1AG)-vA4lSH4nrBd^_JlZOF|b zB|O%+HSWGkS&w2entVyNCsKB!+kk%sJDBmtQ2V+?#v*5Q(GS;-XQssxJ_An+)sn$j zCShLAAdvM}N3=wW3IcwB;_1+(yBPJXD@K;I#ljp?5c+ye!iRvlj6?4F7bxGU5~awr z-NjDYJYC%$N)LmB36j$-d-K`Gdc3235Mr?9v-`un>jI!rn5A*9$aY0hrbtmS8@(y0 zGlj=!XNFe2hthhYi8NEL(<LLLq}H&IN8tO4L`>FtcM1)ys20*z5Hwf+TszY<%JyS6 zDoAROl~v5`R+7=K3S5{S^H4l+w|qni5sdtR<90(xv7;^=`x}|~3$&xia@@^@_g#)s zUL9`MX4J{iZjcN&xuR1JcAR@L55CJKY#Dk)6mvY2So>;GtT;H~v`dj$iZ2dpBgQog zpxjQb|6rA&HC7loshu)*O4fZ6N+dl&`TDisR21GG$Zm(3BEN^5=EWdAO@_zK1MUNk z96K0-QNAvL@OLYSp^9$<9Z*dK6z5cZ1C79?cAzeVEDFc_OSUy6Y0z)fjFQ^|I`|!h z#-(^%ij2N|^cfJ<B(F-~#l(MClxBNLve5XsID57|rS<F0$y=8d$~7g_ROc<)Rx-Lq zOu26T^+5ps7h*yF7{((7FfFf2gWy~H7wof><obLy?R4ypy%7?s!WNgy-oD8^J(xZ8 z42D`w!{%Ww)a%mOBF}q~HN}W9BZFHE7%ruL?2<AA$O5M-+rbdI12$iS?f7lsRc)hP zRp{Yh_^v_zIB_ZXhsQywLzSKFcS{xb=C;GglkqZLOn;UtR%bv~l)WC^aO}DzzDwHH zKt`yq%&L!YD-DI~`oqKCD-p*+fLdU{o9Db_O53Oj0DA68Df$O6nN3G5)1wCOz}@@^ zlx;s|hZ-v}+5v&pwvhwBf$}UIx=VIHHaUW%e|2lAeNZrk<~LArHduYV0t+ILOLJHJ zm!K*=ZQO^-8&O?keI}C}BkVCB1aXdsWC>fT(>y2_w{}7~V?e)T)I6oOP#{w71^#^l z{7Uw4jtTtYMf=Pbg3buKQp9_g8c~L-VJyPLPD9Nj`HenDWy;NlA-`vs&&am4+rS59 zMi7+aLhyi2r7E+_h$iV`Bx{M0IsY$G3AZc2OnUISqMMrM6_fnnwNyo~FX;0~Sqj1= z;}#CRshSR(jWx(NaY8r7mC!lXQMj*R9S{BVPtw@tK5$(FdG<0QU+sW#8dw%#f?vb0 zN*qzGIysEY2hCdqRIEvWo{WYVrNJm{6)F5W)S)Su`)h}UxXz<NN$@cP>pfZePx_6t zomA{VxIU+0i4TY2STg!QIUPnuShQN7q5>J~6{;T*fM@{8{hdY*I<P_`MJVb6+BQw4 zW+Nlx#p;;)OZLV52xBF|0-zWXU32zbQ0|?~Ypl}mZMhO{m^o@*At3aA?>eqbc>Sgf z=9)guvs4Ohw>%~EN)vwfW{GkVhWJ&bVV)ZeK~YzTtrza)+c5GK=ZOyVnBj+mNxOqF zLDn7G<W}FBQHK(agF|{E)@WVO4HhhVvvQxJUe<!h)#}q_>J$+o!>FJn{5f728Qth= zdCY!JNLuv$D_^|%l9p{6y~c_iF^{u`T+x$`LyZqN29RG7<qU&?!i6t(fQEswUR?x) z58Zn9O6naWV5_2AHw6u<ZP!2xxLQ@glxkGGwPmq%7rL=U^<3krCUtt75Ap^h{ViKR zr*E${)>hR<f1TwPq9%vnhxxH+r?u~`XLQjsxX$R`XRjqv1`bT$;|@;|{qq?elVKzE zfXR4<m#{0t=Jx=}*R_<a!ig!168<&T7n`nY%#gxYB3wNHE!-=7F9Yibt>jQP!J*!D zc4u8L%-I&Vdv_mI-b*P_Qh|j-j-s!;|LR;2bh^~LE>)Wq71k5I`GEdGm)~B!FG)Mu zS;}O><l)EzH>8pyhpNEIzB4O|=pyBfy#C0#CBIAbzD)8x`OQ)MSaRQ?rT?vr`D+=w zlw+7pC~S{HOncJ7U2P$%3V%%{6dh32wQ^X;6r#cBtYrAteD@CNJv|nu36C|FJF91J zs<)ya$l33+w;NLu|J!h1aP{i|BfyM>q^C?lH*J;$Yk}9#iv^pBjU85~qBHQ%WP3~N zn217khqUWD1E0x$2s9s0@11$F4m*WC6YyP@LK4PER_jNs=N~G$F)zFSnCv|d=kwF1 zQkZ;3OI~B-nI_fNSXH!n37_c)RO-J&r+-rlKsma#=Re_6_>9G5UrGU>-*W!1DE*%h ziD+>%9}d5K*a1zTU6b6lA^DBnJsT16{_Y+e7C*|tivpjy=VjPxg#>wpbu6^idvenZ zV=)RFXOj*%ZhR8?^KHaplheoXMM*i(>1c2Z(kON|%}nlu5kt17Nyb<TbC8On<eNeN zh(nS_8nXi~!r|%b1KFq61;fJjWAOB`VM<Gng6N|p0>*R~1{<ZR2OsE`)Qlkne1G{q zqW9?1_|!2i(c1QPRS670rWAL|RocRb0p!ABHU{7e;;kX<lqp2KXTV!#HzeCi`?^<( zh(zp9Unh|lQa<)p8{yXs24ewTfX2OOsxQj#eMb8P?tTd>uEUz8n5qfX>T6<b?eU!@ z!#q|-Ffb?RKt7-ZR7IPX3<FlYTk{>*?G|?%f83b)ZARx9K({pmNWN~&*eo9w|5m~= zyDTeylzhgCfU^FTYrH#!)0%bh3-5s%V3D7!@GR=(EFdyEoTUCw{Y06lQ%#=q&g4$o z={Jsc=2dqZV7oVIGRXJnqC+7B=7%4x#dVR(gg*fkO)6$e7;SRA!&28aSFBJ1q3OvT z*}h9{26s&8xfgr7O!kyi78Df785wu`XO2kv*~*s%4v(-hwcUbMiu)W#B%1ejx^w!H zU<W^%cue};6H>C2QXB%y&D3^xg~t$|nVRI>qH-0Gyh9~g|2*EeZ{HrkxFx^Ek$~Hp z{P^E46%}vdf0SBjLQXRu+AQ}!2pFvXjJQ^6UTy5~vx`+#SQp#>TWkQtI~haT|Ajq6 zvHc$N*ftYr+l8`8eIPr)(iLjS0*F;i{g|l|gZE?|I2|RifT|Nd%mnb6k{)w@3^Q!y z|HN^)CTTt--RjTlwt#$&*=bpNov@}c2yu<KT{GVTe%JVY<SVfY(8=kK1kczRWfJ&L zl_}O=k#uJv9JJs1r?Z^ga#&-7`a)1h$9<A@mKLH$C`ybFSZ5b-Bc9Us+Pd@G@~MF# z7yiY7k_wGCNA#_fUZ$C}?lCt}9}LH8$;l4kJG6|M3(Oyu@Yehb0~O^2wa0s45j5jS zQeK2r1<fjX0EG-75Bi@To<Ur5=XwmYwF%XMlg>9!pEH+wmwKpQISAb(M@!B?+zaH_ z7aG5Kd74;Wz~I#(V}f0AfaY>(1~=IDBbV7lUHi|r(%q0;tK&cF;!gz(@?%8T$k)`p z`Wx>nA!0}V&$K`&$w(dy{!i-S`veflWC9<ztcNyK!{{cWx<5AbXkH_5;|DER-0ETm zE*AnYPT-34U($TsApEn7IL)#Y*qzLWkW4G&br*5TXXpEnOu(YJw;pS|mK9e16X5}x zyEw+OF@CIjh=v4i$b850j$k<>+=01((lx<6P`~H9=T;SR6-M?e?SDx}(?|y*!~iaA zRSma#dSRWHTv27FXyf+c)CO%V1RrCXaSv-WW32EB6)_fMQ88+Aa1SD)U#X@04$y#c zTl(;#95i~`{J>vIa+a}(3OkLT%_p)gFHNY2h4@j`Edj5Lk4kh&-#`|JnZ_AJ6j1Zg z_io7MCmV(cZD?dZo9;5Z)I2k3bKwS<WsS5xs<xA0;5#F`MKbS5nTELa-?zN?qxCay zs%lgFN1nk4=u|F{T_}pFBk}+gmoO(MGXO;ApK%py@S)h=<ks{5h9FCT>l6@Zxnvh? z<2)Tz4N#X6{<!Q}kKa1Y|5zQ|U<q*6fxU<q*I4QDrXZ&QbGlkqTz3adnj)&&l>Cuw z-t(JfiDUF;cgG5VVyuypWBHq)C&RxFML;ERTs#1Cy6>4x?Xb*ENz>lHT0D+>GXhab z?Wl^rxww&&TC>V(2Qc!C^XZ%`3E*kHg6dkpRrqd+Q(DqzrxO<{&4vuA-AON-zZe<K zA@5s^sI7xc22932ZGIAx`^3)6sOY7{(}db8BDhR-A&$QMq@up@*N&s!M)7BhpUdwR zIt$xXT`Ns&MED2F$u2|8irm|fqXY$Y3|6B~eXG6Zijh$pQ%ZT9DRJ|JduaqT2+c7m z_vh6vpB*R-VLfpH6h+m8zn3Ft0PICZa%&I}Ps!S0-vrfgXg~oK6ZHGXkwrkjRvAh) z2oqh>&bzUawAgdEaL)Yeb{WLQ3IUvM4Zx8E{>YBEu`FhqGymhCt{EFd8q4{#B<5jc zfA2p4rAU5ta;>n~&%#Jgc@^RmyXSwasu=@J+s_twcfPP1Lf1PY-61D47;7tprWF01 z%B!ABf1+r9xprb^5W6b{%mh&}fhELJQk;L@aJ`xql1_x#71YDuyP3RRYxb<p*4^Ef zr_OSkxm-gt^0);Q1b%N$^;Rhz*4gxmo56NjrFNu{G&R@vB*FF!_1Ry&l5zQV$eeaK zgM>JS71qXfX4o<UO9cnmqgwKAR}h4W)(bBQphFbvjZQ^k+YHivjMzys;<9Q%fPt*3 zPk!$(f~Uax|5jKASnB`(#C@b+xx>w^AnR(}SQ2*uh^?JfsO?`G>Y?Q6vp^UoJ`ETJ zvkOpeo&PsBiLxre^IIBOUHB0>mvn=*ly8~2>QW^E22@+C5`WC9{_zSPWPQ^DcRx2A zrjSI>)+cb%XEPm4`p+m7e>V?wr@s~we%2|0yllNQ69`0edglF3<O->b<YQ8=F*f|% zbvh#ADvvmB6G3VoD1-gA(}UFC&~$IDFawfmsw%&++!ehoY3>KkxbV8z6qG!$tLg!m z+N3@c@!Za+5Z<?x?Qoqef6I(K(d{-HT&#D?&&^W$vrQ$Woz220$j*MayA!K?wop0F zh9Q@&Bcsh-1ri3n4(@)RN&=sv)38`Kb#*9==C7Xz*bVpq!pRnz`0>(f0rrhAu;CED zjRbiIo7~#J)ok}ZAFIazPFgF`BErI94ey@&1a)4X9<RB|djp^AzbjAEll9hw$a)_a z#{vdg1HB@dN5x9!B7s-Ip_{yx4n{IwU^xP?c8qcak*Rc`)KS(jWKz<xkw~@nijhce z7$vB+rSlf~Bkbv+6Nv*iG-@L#wi0SAM&6$+)z2B4RXoy#uBvCUikgV{f#}6f9qL~P zjBmAcX7aXAnO{<pbnrI6;GXHDZuzg!lXOlg%kJ!L@?bZ|K*o<88}PGGQ{Ce5h<b!~ z0ackr8L$ECNO}r9jk*+JG{NkHHyDK~Bj5Hu6E{}VMSGc{Uj8=+8c&7&F$Jl_xx`V_ zX`{htNDfWQPW<~Vqa+>#c9rd+_>Ts{y%=6T<Y|BMSi5Y9CQaMD{bu`Q_1y52B4@uP z#nqI7*NstnDiVLJcBcL@_s{RkCQSyCrl$yT&{Kgp(Q{40W_+LUcH<PP0ANygLk8_i z@~iy&bcsEG!bg`6MJFCAH#w}$vh3wB6*vTjEFwmNs_Q)IMG7D?;xxLv`Z(F{TO+1G zzseqcj%>hZi9D&1BbbseYA1|c=2(f&TzDrDE3IhI(F#N%!|?{_2q)d3D$F41Z}$>- zNvsURjv$B5BvpKzk0jMw2?*WN$E4*P<z2O(g9Wg}if!9F)VLr@aFZf5Ysvc0$_YSE zRxH7AdpO?yS|IAM=CQ4p%Ht8aV%tJG>$n5jJFDz^%n@KPj96bE-cGjU!n>I7x3l%O z`(2&@ekB$^0sS9u5@KiHVWF<4%8#ZM(VRPM+MP@=^fl<D(IIFtnt(Nr1I$ra)z*2$ z1M*=6tJVYWc%!cYX=taZo2(q^num&(AL3c_M~ztMC=v^E01nooT*av3=5^<9Bj{9F z%gbcvchb_;x`q?1NDNhws>%9F@FKL?PjsR0+OUqmWf3;K;A|vp>E*gX>%}Xk9@K*l z%P4%i*^%6d9>45t2JMboUHfiV9GCfF(2vV?Ki$9Hc<3%n1?=zf)UFC1l6sQ}WCJU6 zN|04mS(S%^tZ|H8lEI0A9JTARtM*uuT~&Qm2v89S(vKeV)@D#rH>~<G7k=%S59Biy zbMp-NUNIXwJRa_iV0B>?<!iCmTv_<4<)!l>)#k8CsFd0+!~vT-9A{fFAleI83RMw) zh7I6*nn(1SweVN>yvhRmL|RiBkw;2<mV{nru+1BXU^<Ejm+V}o$m|V&%ja_Gv#wO` zw#@ud?q<f%h{@uT#4u}HX*C*#HlhjcL__P{g-HsfDQvX{B~n=QKzI&A7iD$?jwn(4 z(XTvkmXH5bR?R+6M1MK#8mbj!USk^yJ@jx(SxZ+>OY+G~tc6QrZu+PORJLYv!e(Gw zZxW+`Dm)<@Wi2)j@}JXn3+$JD5@SYru84kn??D*6EN628I5xY)nP+-udnijE%(dhF znX2AeP|9k_5aTAV`vy%N8UCdEh|iA}zP<zhuS-D~4?{;OHHCM_y@X6ztQy#%|3~e2 zL<p*5?2IhQ%QoUQ>klIse)%8GO4uf^^Ps$~1hzA<rtQq(1zh^}yWwQ=Lc#&U5l39! zGeSxgxovzVWPyt!jyuv24-RxOKeH|9N!5YN#2b1rN8Yuww=KHF39G(omhyR$(}Qdc zRkvv^%#wtRjVbypPSQ@>4%ulCo`%TFGA;VD0mf<J9#{*wkxE>o=b2Y8l4ghK_U_cf zXUtKPke${(H)*kFUd@?kc0@OwT3Q~?VjMcsXYiPpV5T?O-}`Gv2hcFXs!r|-7tUv- zQ-mh@_>O`SvO?}VS+dt(-vMQbj_QCHO?Oll&jF&_Ks1QC-T@6Vj5)$>pcw%zXk-bj zL-7L?)^6Q*j*+5_E&O+Cc-jfhYOD_GK=>h$DC!do;V<~yg|5W&E3L<uzvSgeA3G#D z%&a}Yb@VFhAJb`b{E0IKUfR*KnR5aCnsScDkbQlflcc4{pG!O#)~l<LJa%Q}h|Cui z17bi~VMEDRKS#-Hr4t8DRZ1ew7wnDnR*%P9hW4ek(GGW_mR+**(<HRH?WHdczTu_K z`Jo9Q*(i<5*(A;eir$$vnYz%)7<2!a`)kKR)zm4B5(Z2|KE4GM^)t}Xg?lwRZ1lm? zR2bzEiSB~pG0I6i)hkqw{mVck90p6ociktT_uCglz+t+pIoDl(YUS!)$(`&WcD&KX zL7w5?x4}ZDV4KTDGFfxGeX*8#{<G=87+u`*Q8+)&awtQiL~ux&ZP%8s2H;aH6I&_m z;bc~Wv=)&FOWQ4Qu@pcX1~*-4*0(>rpw>PY7eOno&%>VP25?QLnp)u0G|Aa9o~e9m zzHx(jm<l3Kx6_{aUHs2qf)NGTKBv95v(2u4qDp0I+yW)#U0Qty`hPVEM>lj#O$GD} zq4T#_R<!`22oq#g$`XKt&k*g`j%UsKbKAp^!}HL*BfVgXU{4PnnHW9lPxa!O=l+WW zX=CvcTx=-KDt}JcO;RUXvA=a~B|NbPdQe#9rToNi6Rnwg_rt{Z!!=4J(I+mQhI4Di zTe|;5sp39=LJg1|RjG{GH>NhWbk`DuuxH?Z%P!0A(`SiJpGI+CgJ6OXR+f~j8k<y* zHy<qGk-|cAm=M>t_wF0?Kc|W9Pf~VjkJm7Lub8x_f~`+shoVeI@X?}vjdqXlgtCbj zN|x;$Prl!gIPDC1n0BniB@dvlQP0856KI7Od#K`ySo?~{-(JZLbhs3UqO=x0`~j`s zwlrpQ#8P~PNb0$l14dKfM>Rek{Ih<W9I%d-JaG61Qjz7wA=?C1GfFwWSd)^2T2y$~ zmLFw*3-0l>?{}y|TZ*dw)u}6Ol;&`Kec|d2g^@biQ9-q24e!(9@`>$Ab$>n4Fsmlh zcJZz{kC>QOMcbdrJ7#fZgCdG(-;2!brALJkm!3lKzOCPJAeyXc&G`)K7l&l(p|e}I zPK+<PAF@ruLu#)&jJmwB`nVXMo;4~*&#a+Y|Ff83ChN2}%rv|YU_}K8v`?K{hb5jR z&tvGF)poX1t%!bKs4!@&ukEU5FV<QbNs!+x>Z&E9qkB4>D=3|<^m+vG=+7q{E#`Cx zf@mIrp!18_>WK}Hj*>rypG<VnSjJ@ySc6jP=L+I`(1uq%Vy?Ti=`Mk0Is4NpNcqRR z^Cy+2=0w+Dye*~ICK$GLhH5Z+yAMgrXrxiYOuBHD@Wl6=GMGsl+Z5<m#cCWaHMNoP z*0&|%!`)Xxsw^HVU$v9v3!lmg)qD9KM?Oxpjlu(yWR0!!iQ!-)gYFJ4@z)Of_GojO zyj^l9;XU)*>~O~dP4G<5DXC-wwV&yp)qfO4jYte%eoV7Jvq*D%Br!3}^87ETKC;-P z9bD%@o(%U-9S7JBe*McHH2q!=1=6|f=XK^oGHh-wmqUhkz-$$tjXK0vNpKq4!N``H zfUE~(siDG?KUp#g&*Mp3jgMwIbW-dX)@_M;EdJ0O!WR=xxkxil0?_$0Bzn`kE^8Sj zTT^}v6ny=(t>{SAgHye-q1<C#<Pj;boGI8t3L~NK2<VXu9;pXJyizj{PoDcS>WlAq zJ^cPCzdea_FiEDgA;KZi!^`d)QPoi0jFg$T{q5#Vn%iv?ME5kRdJ|p9;HJs3H_#XD zkwh4C#(rNk1$re>@1}O`M)W|U7L0L|S~EH652X6DLxHD)TqeO9lkonpi}K)>evzOM z0TRFuPUt;9sCfz-K`j9v5Br-P=l_6ZWaI;z-4=pUiVM$HS|v*f2_oq_xGMW|!qW_n zR_>Z&I0<6Hr&nd#Dxis8O$OVQkwCi!{qKvhmf2~f0ukwSurhIv_EJSd@}{ed?5O3x z*H2k;$yWOP*Y}#Xkoi@<|Et32q_Ek{TNVQP5yIa0OpwzUVJmzrcD?LX6X>D?>4T;N zgI|(y$DDo%P*TU?CO3DHa#^xNjN+V!f`Y*G^lk6}lAs27uNE{$VlrXRgEv1P3`h-n z_~&qd^(Lex{tkV8G=N@iL+5bcTiOR%w-IL$ENXm}m(T{`4@S@f+caNKldjlTBqohw zKOPmTqZD$$bA?`yJmG(+<^d~4--zqJ|6Q~WGzVg!EW=r!JvmsA!q05rHF#$18iI`U z4_xz9JKB94Wo$=wNLNGf96Cour!%r^+}IJ;{Ycgdg7RxeiB>b@VEC9=q0C|qQnmlo z&otOmKBEdVSH~A(2u)|6WLD6)iM&2Wsm0svnOk4m4JV=Lp4A(xT;3w}^%@ZjqtIUh zK6<-Se%$)^JGi!E)}hWL04B~_0+R6C>k0D*R7?F&r1N#5AE6oZ#({w}=*wlqB{Kxc z>fTL7T@DfEhp5jhG}b8r-Ku?KeuE9#YYHa)Ts9j(z)a?L$q2P`TF&``=>IKj^vh+q z-lfI*YD)~*DKb*dOs($N=})_^t_<JK^t_;rPb3)2P5zIk(vW#5Qv-I4+<`SZchHf| zpcxtoj?@n`XtzV&B8Jj*4p57`dN!W6ZaqFQ-qTfuNL3{IQ?gPSXAiUV*w$!F&yx~) zyl3U5l`wq^p65VK<tZ_}&YLQGW-8$h+iQY!f@SC!KWei^O=M+Md}u3%QLg|!4E<pG zBs}Pw!Vk8=_1<uu<KIDrSSCKqG-5<o%&tiZ)B3`m)~uF{rrY99+gHF)-{G4@Yw^6Q zJfDtjp!*%Vj^nY^R>aag^f8Nw^w}K>8ME8_s;T3|Sm}M^H55Is=Cm%S66yYLO6@^r zP1G4ssc}7rKa@otr2W&PYUeY*(cRUauf$_r=$O6al=XQPBT#n{Tyihj+y(i<I4qZn z-j<lI;jYC_`p3y-mBnoWIWrD$eKNM)9A5U2sCibz8&-8HLIla6*>^yWStT>Cf%X7p z#NjGPW^ML&Wwfu)Wys7(Olt@Cc{W)5$t&%d<xq6bC)ZyraPM*7AZVy4P=Pb|6}MtF z+Zm&<#QwG8YzH-CYXO<?#oFfA4o_gi>n5!1_nCkBYsXX-@Mn*zUppS6e(k6{k+9$& z@M{NhM9+fjQD#te@&e7oM6ejDXa80i)Hb4Uk9DCsTr}x?;TB8MPz^-T3^DF3csk&) zkd@A>cb^SY_DizK0^d<HvWFjeT5Gs;7xFz$+H19V(e~rh#bDr7I^cX71BU+)0_b}c zq2t~^%ebSJ(QoIe%g;<U%#bA)kdN6&AkT4R<#Ef}<6gvhvJsx|ukHBt*N#422OF}R z|JR*@W<8eTiOy0yoxgF;@6U#|`r@{3seq&UH0)kz-tZ^=>~yn%_-O@-Zg^HJ(}a*_ zj#QMFjK#OXArV%Erw5@kz+xq_33}?}>Graw=%F<Z4HT6>u=-4I(S1Ya&peUdw%B!Y z*xTa>>X=?w9b(WnBDm5_{=ic=kx44($y(YmE&qHwtRwG-rPcF&EUK_O);Kl_75K3# zRm)z`<Oe%fMgU-6oTypLe#1S{y=wqGZT>)O63E+Vd1_%czim@5r>0Pu70H13w`dv; zf*VX~gaKjZSX5p<Uc#1R!bkH|!=cc&ZW;X&EBhA;HU^B9SR!(p6gMrn3f?*YGbvIk z$0Ihr2?3nQ?(D<f0YA4POo-Li3ytoOx-PJ0)*`pY)5AaR)8)qywMo`Xmcp^V7r%D6 znY_Z9Db`8`9ZV%XH7JRdt-#OL+2QR*OGD9jyCccdDZ%9~n^xPmTBiG=Y={HAQbL!? z9FY}^q-iXbPx*xIQUssyE;tb6hdHvuU2{ge_Z7+qa%d)-Kn%zzOV|Yexh;0sCg~Rq zU-{8O{CsX&V@&s6RxzJmkxcKQ!O$iCwSSzXJH(?e((k5|z0~^C&^g|JZ&jk^#C-B$ zmh8#xgn0>6v%E)aPRN{EhdOEb$v89X*N)YPO3N?aE;kl;&cE`j@uoLj)nCQT#f}75 z$t7<eDZ5af*x3LFXZxt5Y)v5H<W);2%6knt<Y*J8AbBA)d+pkX`;3tY+_S(BMxp%M z#KJ=F{p8k}=x=)y7_;r8f~qD38c0R&YcuNdPMG|w3(aSM0HDbu+3W6Nal#LW&+hKe z`2IGhC*B{=?Yx?MVe0pmI^W6JeF8!D1IR~M^K9##(lf`=wwJT=dfEt+EJe|g?l+43 zo;%YpG<x5g921gX(Lt=6?XpLar8!|aVRSfPMSuEg!oi_cZkPCqhyQ$Eqf)A(KNWLO zQ0Qvk^2#LpTcjx>J-2eMKA1*x4Oh;6dZ;7>6vURv%~#>(X{iPH9j)E|cH^1U>u;WK zXOla+-v*Iz15L~GU?Bpn-qr@yk?+{P;?n_O1b}xD%XtKH--!~|^v_L@Bq@B7*W^}F zG)1z9zoLzrKzGV$;{mZhhwMtBP?_tVxO$Mr5D}GMdLD-Fv;3I5%3`hLQb7ux*ST>* z)(uLY?pWrT{OvYWAucQ5Y#~8wV<eW_EMNA5z1c)8$jLbB(kZf+RrcG^q2fnF{A3Rn zS7##(&#`!aEIi(>zLkvdXo8*Mc4cT*8jOFp*-DV|){WQ>VK8x=Ch!Tt^>x2zXcC4} zyuV5Q6{|_Rx+sfjf4ob`-T<fsZQ#c9G1Ig6kzYwz?0LzTQKxt4j!+LP7Vv%&=ir*T z%y2~mJrX`0Iu=FUiTKgA+56E~)f9}4{0ZNrbG`D+x=y0;`j@_B%pAC7Tj&%QE&s!6 z-q|1`c;Ru;30I@6$KTz;m+-L(hL2m8O%<Mq@@`tz9_k&1rR?s)k0MxTPH)BVLw_a5 zhj!H$tif23lieNEL(^2(tl-T2TgE0uU!#i%$>Ae<w1o`aw$w^cES5)lM*B%mcmQHh zQ_*lHb00(r(mp@Qr>6qpmNs|$cNW*fKR;Fb#m%=Def9uEf%<u}KKh*^D=BiTg+lM~ z`vwMO_q1KJQ73J^cmks+2vlGc3g4e>^VfcW#h}lu+svynmNFU>@x>s0tJ?30Er|*D zw;$<&EzjiVcjZ|t`WPB{=ad~;nmp~kI^LWhr+1W{$ni^sgIZulZFkTPt};SbRZs5^ zt$a+mshv<1VWyDYWpwaZ+3t9Onx<<^J}qnWa13<2e{<zkhOj2%ZIuLoY=P(O?~M7y zK@F5-WZtkOmIelzqwm;BHpykW-TS?=PvaaQ!g}0N1Kig0GBYw(8Ca69%*_60Wa7Rr z)G)Ha;V=4~c`CJIyH9rD@Sr(GA4NsW6_9y2c;1p8Pt+zmO+&AsZ~t^S*Kz^$YlrjJ z@GJjrbME#s0aN^<rCE9+K}$)`PHaeE)Da8z3WAgpONZWEAh!G6v`)&B2|n~h^)I*| z^^IeG3X*MVDRlCSQFJvXXjgoI$1$UDS&%v39|fjMjWI{H#zlmV`+@1~!=26W(Rq0{ zxDpJ9*2_pxTbeuzAG4I}OE?6ihzDp|%P%(F`Qh3Q+xQ+z7-nl2^JZT2hF1G&GC4w} z65+hg3>&Z@!b^7(GWqt6E#~3U6+ckTsOldiL?UG!T{OSt0cRwXY(MPEe{*y7L&CAQ zIZH26H{W$^OP`gc{1e8rX4BTavr{#ncA3fGW6o3fng815W=RojI{z>=2+8zROJ8T| zsCHI=^FI`75#^-G+bWVO<t<(krl->eob#fdr=nJ8UH{zd*l<8&IO40zm(X()371-n z7zcDr23BAED0(IKt^itZ$>GY$C;r@C*!lTf!11e0hn^mr+EVI^XA-%<)96Q9I!N3- zWPNT1{wWP$SV|!7tATtJNC4g<4?0`*t{cO%5mt=P&8M4{aCi5_-4|c-G~JB7-{Fc@ zH%gs0BdA|PeiR{l?jLfnqfy;#BRd<4f|;(e`@)S4*o<_IG~@Ns+m-Du%V8taeraCb z-ts918wAhS^>UTP%*P9oJ{62M2W#-*q~#`sW;u^okB{{VK+`@<+`VGG4XtIXcHKpN z6$7ZHq|ei|q`_zXpVEjBk83?AJsmEGd-0q_5Kx@QA3?cA2)Yp1Oy;+KtaiA(Q#`zi zSy6;+0@0AwBb8b?7ocJIiID`eO;ew#CZqfq7jW<z$~vp<r>7n1tW7`e*@uzNXJ;-s z9eSpV+ciWZQf<{)pZ_=T3@v(Hew*!3AiZv`-syRHsp+COc4TWi;e3ztmk>reS=~e4 zTA=^BX!=E()Bxank(J09&tE&1^9**O^szRYDUCbhoGU&(O``zK9lK6?lIGIkC2?50 zVgQf_1XOLEia&8_=nV609jn}^cz@NLp1i&GhN#Jvh<NO|2kOFw;Dl6$iPF0-0911a zh%lh8N*J*oM(&JS*rXYq)Y-v!ls&=za`J)c-2(;}sm~cbj<c0=w$)K7*_bZOiL685 ziQ4-2H8K0L+IoiKysv05&GbY`95dCT_R;Z{ZJ>s|&@r4RrvVUz32A-%mfAi?Z=NR9 zaGEdw+7T(H-v$VERGwtH>LMVR*#2lLRrX`*8}tt#b!jPtHmh06S<67-e}LBVG87B2 zAejJG=T@wrT%PSk=(PLf)MiB2cPUH`CTH<QzCdg;)O^Kf!be?q0|1`n-10dLfwEAy zx0O{NI`$9qsHgjaTPl}OUCh14TL50f22c0d$=cr>PpF#gumO^j5A8SXtjRNOn63H* zH&TvC9s_6)3bg<(hhsiUu^+31?rQ5_wZ|@jc%m9_pe;hq21J-Z%{c!3ckD&-^BNzo z))FQ>1!52n57r9PtH}^%&Yst<Ppy{3m+U;;)0P~gQgT4fp(i1#Lr0(OsUN2rkUpis z@75DGKzQt$%YZk~8n2B5I$5Of?<kElP}9OMURE<Q#n*LOp3cG&n&xtdu0}nhZKICa z9aMcM^iz&v0669Y&is7?sy$y?V|M_=j29hYVY2B#1oZu;jq${-ggmR@bAOk}z@X4L z6S1_N7H#9vVqf-3xSwAzckQ=d1;Dw8h)AFS_;k@~^C-fGIuWoO*h9B3I6*=*ED2=b zlTgd?Gy8i7bIU@_!9|MYf9J-yV5L~P)iPFvf6E*M18goQxrX=1+FDW6YpodYETQwF z|7`bA-`=78)EA6x3Du`7Kw5hrm+1$uP1`@RYXMp6q?vyjlYVN<QpW!|{zALrK|x~( zcb(>T?5IX#M5e71cC|wo*4cF5pO~-AQ%@+P_UStsuW&m9nKR#&CS_N<KkBQitE16A z9ktsR`XoH7E<A7LbJ`(Uj5+_ggo6N%;j=CI?6W(-+h{V^TgwUG|3}TKxYOMju%tL* zgxP8<QaooKQoYapXA8Q>gF1I7f_38nc%JVG<PEKANMA{|wR@&Fy*o!PEfRdBEWNTe zKt8v(&(+F$Ql=~I)CKoTvQ1De==w7~=PEfa>QF<&k=nO4mz0Cq{++6w*`8|ei(Mv2 z{|*&oK2$&Q*EW;+xrkSE>)qzojeV|{=mp(MupW}>;l%c`oaNY|dzb9r@e(31M>f)P zw!YyuAg<qb{prv>m=LT22i{Q?7U=H5pE+UgO!Y0;2H#T~Rs4>#G=^M>2G{xRCFFQS z_oTw}Z89R1E?+eLO*vJNRd%E@r!r1Q&Sz%)MXLC$D{?e<sTgs)%Nb4r)Dw0vGCJ7$ zCx$<#lwsVij9Sd362g!0vyDip)EH?Zh0FMADJZ=ZxDGT7GrM-y!m(&}gOF)J3@d8A z6YM{me9}50)O(z-zy}>p8coPfOS3e&W2Zeehq-7ol=wotuS6^f9BWhtmT-MI7JH^Y zqNN^tO5;-fBk38oLkiHWd22ZDMy|s-IDAr@8kE0|LdndVX$Ny9oilsN9aubwL2u02 zOBhe9+uD9ZtA66OCDCI>w$H1Uh+}w8Y5!RxI1wP@?v-w8y3*a37$7RLB<M-e-U*Y! zHhRWb>9iLRQ>6q(zt0|Z{po~$J@Td4wpwp2p=@%n@aa-42aWD=oz(k6r>0?zp!=Dk zkk8xpjiJICPM)VuAm_zA=LKZ1=#mYeo(G!rua;38viW(d1O+tb0^W;OPv#yWmmTQs zC4fri`Kx!#kCrS}UTyDBbzdEsxPXDxL<;}Zq&847$Ms}RHDs^Zh?SwK+ckZb(o>D~ zIiMPI7CPePDRk~s4;OvQ6|yt4y@5^<I5l9{oU@^>#Z&l?rQs!P$k;z%`u$ER+tU2Y zHluxnrcZgP@1@}q?XVXIkHU19nj^37)V@KXs<`EB=$+jd@iR|&3!`afp6TjspHEmf zV(=qv_$hhPC)7mXW!#i>r+&=7q{1F>t#0{WeINsr^n3Y(Jp*c5^3m@kGs;9<vTT&4 z!;=P}va8_wk{+)Zd;6)bghBUL*BO}!a9lv_I|=);?VS8tQphtfviQ2zhTB72nfT1a zi=I(@gzTG$5<ea2SW4QJDo{)MwqT@7MwTrLTmcy@jqX0ybLC_XgMYg7<&;tii_0=( zDP(XvhM136<KjOD-A&LMSPix&DQ4c-sSX7lesL(yWT?jPgp4_^YvaF^Y0lD&a8&0| zeySK?%VU*aufRNBi`m|UHTd#@P5AO}+6AoYQDs_98WsmvEQ(_~yib&gfdZ!|8TI{; zd9sJp#2a;{#ya~<DmMl4Tuy&~n>BVtd!zHO$h^j$ul9|Ra%ekpP-IE$rfErvYA{nB z$1iy}u<8kTen{^{pPMhH9vTUr?P>e?#SY^T!7-@5Q3qs{E7le#F>TrI0Kybjy<|R{ z{SS=Ot}w_!X4%{^_2;T(+tM5!s_jnUPhs+i0QO?D^Hu_NHT6%@=iU1iaucC(-Z>B7 z+|lNabauvWEZ@gsvVB@;<lpE@4d9fk?*u;1$~I;GxgxC(kgc6I%jsgSx38XdP9{%e zTQ~>G@OQ{oX3M9r(Fy$-@a-VT3JbCm$xKcX!Yqy6F;#+Kc0CszI&{Zr2J0IzzI}?m zYc+o>Z(mpXz4v{VyZMeVQ|F)@ly*UbhbBSutSr-4o59Fg3}voHHs<{`UU_)c$4o31 zNB`Qv9HP-QtnqY?U68a%IfXx>9>Q`(=LLW2Sw?47*}^<rR-hsW(I@M?##Ebd%OTr# z$i-vY(eI5w45@3*vBv88RE@SWTvoEFZ@&Da1lFPSKTozn_hYDY{&cd#fGbaZvg~tj z`-?Qo@eKitHq^cGF_VB%veUB1ihgsdH8DI9bn~=**MB^vy(Pz{SN$5If4f85!@bdg z3*U|#fvn(v?YK>e)&wmbZZy;bNpt|jg~=26Ad9P}<6r7LP4>MQrPjWb-$-|brpN3v z(0&s_&ChG3^F;tt>EV1$BfF!wl{nPFTdeNvtX4hq>~zTG4W)tYGi72Q-p$oYJtwDq z8(ND9p{eR1Gs>~el~_9WSBo+K)NKnkSr`*6nvmAXpuAVAjyG|70|&Egf*lCAR88{T z$C%SXSDPbg+BF54WGiK08?+sL+?ufa<Zod=C5hvs>6;qly5XIvcN6}Jsdc6@+q=%Y z0Pv&@QUO)c`T(3O;&{74a%`4))6(6+KeElgFyXqvBdk<jH#FM754hx0#miPR#nJzL z_Z&-Pqi^&~c@hJDLGxmQkwJoGt9DPsjGWD|Ki>&MiwafKcLRd28g5(LYH)-SaKa|4 zV;UnZQt}Hs^}7eUf&7`muN`}~?SJhk_Apg4KHS1|6QG0O)dL|Mho5<M0i(%6Q|mGt z;tlf%Il}^@vf;rLMc5RGbm!;4k<d`=#51*Y(S<J9{m>*44{U!il6<-hVz%#*Pf|{) z2S}lZbQT6A6XFUh#ox}#n3Hw%?2wfvCQ3HB%c=U79Qd+}7$7{Qdmy>?JrFieWH8!0 z;OF7~gv^5MgTuF@lD5MkD+0(KnB`G<3INgouai~yU{abIocXd#R&m~fm{yU+K;6%S zvsj<xC2QjU*3P!PE^D^w;m7(tSR%ZBEL53iFbs5>iv$2ga&Mify6Bs|o~VYHzzE!y z-@G`}k+Zawwl|FsT;7RcozM;}C}aGrk0D&SlchD>#a2rnt9&CXeaf%n^&t9R`-`%! zs;06+Bbs_{g~-iLG8B{XAiQ>J<Naj5Y*oLTPp|%N2QmtDII(-vB5-nPqyHQARbWl1 zF?=-Tjx?VlzQ<lU5OeE4n3aDW4NM)V!-xVN8o-6Xf>);bK<fgWScH2?g&dG*MaTUe zeHZA`o|FV9+2M|QS2TGfAkm51YfMFLVp}ZJeX;OHw5ZV!==bdEt!br-&m^T9E3q2n z!prE@VWLpw*_eIl|2JIYNenJ?y$~4JGHhDo-!=Se$4-GXZt3xDNXP1o=!H<^I%*f; zm!XnQ&mG6(MpIZ>n$ohRR;svPJA!w=chV=)QyO#_`A6RbCmle4>is+aPg{g~JdbPh zlflNI7S%^wE!cLB|G<4~!X~#MDploqK1m>wDT=e7i2%g8vpF5JFEVs;%Bn0-_7{^$ z=CjxBaBtxNx0q+n@g}8A;Q{g#(VZcyJ{A{O!AxSMil=d6q18+q^9I-wY`yrp5e<Mr zPD#l~7uqom2x~sTU-pz{zWcw{hUgk2KsBJ`SQdmI0SRqd?0Nbd<<5tT7zp!IHXoT$ zthIej62~52P(3w#30S^)@{$M`TGN!z=&72IB6Wv!t;PDh3R8#9#d^dVZzw5kyz6R~ zuguvr8vfU$T{g|h_U~#ERr6qoRrCtl1ICl($tK&4=!{;vdZf&KJb!Ho`8+H*yqt^b zc?QqQ|E^b;5q`bRp6wFg#L@uuX57~^<Bk5>p)47fD*#)-VDhb3Uu|P5$^{EqcEP98 zr{G^NxN}j_F?rG}<@|(P8*v*Yp&)6zI65(o5Z$uGn#J9Rane8yO20K6r(_1Y0cW{< z%BcGMzyB#Eo(v;^tk12tmB`rcqogMudI~ud(&8zN?eGloh?iKBrFKjEfH`HI|9kLE z@3gQRGSLkcLwW-jfVCnk&n2|`WK|EF<^<rLG@u$vqL@Jqwtc{egLQ|@+ZL-^z4=e2 z1P4P0d?HmR42GR9JawN<MYD<jdx(>B{-VPg)5mA31d|6`7%}drCq;hIqF*~?9d?6& zg`R-wcmLXPv;85xRNGW>)iqT056B*gR-Axi`Df#4Jw=I~)@=+HMn}8JU1XY{YHA7t zjs^#4f)M;$CPUlX8ia`p=5}vdwbn|5i7%<q{G8-Gt38TVeX05h+4Q0*Zo-VnW+?)l ziJ--L_={QDXKk%gH(s|vxBn^Gu(~7uw)}-v2X_H8;*&5+*%@QO!1GTg;1LdVPRhuf z4Ct1AG6qDVM@GvNa1xEk84q#DECGA4p?9RhS#@1OUzK}#O9Eu|R~z=F-lY<@X?VT; zVoCd-=+wgiyHO>6D6E}v-lN$YP4PbdL^U&*rl~CFk#Mua&?FyVZqIWF4g{lv`zqE7 ztA~KiNwA;tXZ+gn_EjxvA{9cXM&HXxA&GZ8i)X7fHYr7$$<8aw(2Wt$>gIvy&BGIh zkq>{uP2EStZ^a4BGjA~45^v**wyq72%Ce2iU6m6pTIs39_Ids!E(y-|yGA4Bj=Ulm zpRBK{Ka_ciZCOl<9=)BIQ;EJVv<oQjeE<urOF`A>cboX3d2$i`#=I+Uk8H$QOH(*V zwA(}B=EkRv8c&VKw=5dMn}*+Ozvzzr0<=y`ZXMDNsBrK1c;aG|wW&Ad39IF#R07$i zmOcd`mFSSIz;2;NF9ir*71@A&X4*QpNgf$u)~_9zoe6iUVmx$R2i9!9u3D$nmdw4l zCElN)YuE%tINKo=?!C97>>S)KF@jw!!qw^!UN|<&n{PPgUd~dc-Nm>sDeYqx4F;Yi ze7ULQ8bQUlrcQf+joaBJtk=}7PFx_HB<$r7LhY!sCVA&eW1@{5w;}S4q-dB92z0Tp zQC!s0?Cw2Qi1_ZuN>I|9au`M`NxT2<^<|{A2c(xJUf^zDeJF^lXaYj9;1`UXvi#S} zrRGZ(OBUrnmDHd;AF+09hc$I8MT0re_V*k~yU-8fQ+F++IH+K@%W1dlP$e;iC_Yp6 zYe(m+z&i(2^VR-0Dzu!OykF!*jlTc*?hO;nL8K#G%^=bFFAO=Pq1f?5Cp*LXHnCG? z^csq(YXncOvwOE!6oNqvaxzAs<zA@+uCVteM?ac7s-9syGp!2F=`GYk?WfdOR{`gs zFx&F-Y?B*(8{mT2OWiXy!?EpqV|!C7)&MsUqGh)+Qs1Pc-K6B7Q!>#0Kx_<fV`b9z z+Eo_b6&ZoqZd8Brbf3c&K6<Tcg4B2=)<e>P?w-!tW@bps^H#(;B67k_N=vtkGuFsE zt8#k}phjK1J1PJ}!WYu$-D9@E5FgT<g!2THlBYV9`j~DQZ&{c=faqMCxw>KQG%)}q zI-wGaRxRxht-9vKaum->Ip%VuYAUWoj_$LE18M)f?L6KF6-USj5Ez)|exE%LthOIG zztaUSA^4lO%;M|l1ju;8Y6370@YvxUf9%@*dm`X}qX2<<fq(3Pq7H-pJbuz;=Xo&f zZ$j8Eecu~0tp9Ho;9jdgzWVRhw<=~TKNJo(yNP^c`gU#>y^d^el46~iKj)b<8gVef z^3|~znf|(b!kg1S6cmf1@0{WU9lI>M_RO&P*30Ift2ZR=EDo>PK8)OXLMP?tjfdk= z?;)E>Kb|COyuB+p*~R~d^$?ib@&56CADQ-}&i|Mz3QlO;XGs5j_Tk&*OMmb8iw^Le zE|7lY?$$Lt4CM}P!ryyHN)?YNAGCb(PnGe9xJ%BIFD-jF3dKJHKg6A-Uvo*`qq6I% z8Pq!Ipe)j*7#seU2Oc~1O2vKu`6wy+j|$&|ng@}Ah77m1*Re>OolKK2CWn&m-jPjG zz@i=)cNFtu4?5~}KeIq0&lB2~(^~&G?~ASPFvT2A+pW<CJ^S#Wb-m9Sg|+kEH<MK0 z*%nb@A)Jv<JDag}lV>aTpO3w9V~x;J*Ls#1to!%_-L9E+svr6D!0W*#oKtLi%6Y;Z zvv?$7v`Hu5#Z{(!;7a0&e)*H*QE8N)isPR^XI++X*vq?*5vHAPe3FWukVR@m{nID) z$gmJOZ@sfj*;(pZ_@L_F!y7MbLeY!7*`>Bx$eW#oarfU^DBk;qoo*R%KJfF#>%N9l znfGU;#uhy*b04lozU@_KmpQ6A`a1@o*Kh3_Ej-tM*HOdt)a<Q>6D4M!6;+!*_MMol z_{z`&+^DP6&EY%b>PNC+A#E=zFt9533gip}UUs4netO|qROd$P>q*8Dnsr+G1(lNn z(JS58vttPOS!t}r{@JMEzu@qW7ysfMVoDw#?LT-i{>q5&!VG-wmdAu$16|3HSAS?< zff=g1N#WrqjY_8ZVt>@}BPN9>zv5&kmVF>cpB4C8hnzVx{?t`7YSbAYW_kO{9e>tK zX)c5(4rAhiOCDTrJiWZ{q)C!0@_x%liK(goN7Hvlv;DsBE3HwR)+n(@`>w4;&DzxJ zdMiz12Gz!_h`ncRDyUVPH&vrz#HLn^+KGs*C1Qm{&HnN^-}Cz`IVaC~&g-1Kp8L7) z>$>mjviqzU4bWa0<RLj016&QQr{wNVukqTxu=Hcja8lRKy*G6q5Z_<&Y+R$t@M+mz z4Ufpj&s-zhKg90#?Y5z<BztEI-q<a*tCf6t{_jO*yC=;-w$r<j07EXnQN^TJ{8X_v z!E&CxT;`jCb(V*Tvhj=;CF^dmp6?U&1#yRTFIR(wZHKKyEtef<C$4Rs)x3D8p?y5r z?~tR3SOqo)zp~VD-AK_@&AxSH@+BfgKiIIA@1}}D+)m2%HKotke#<^bQQ+CXXZDC& zcWdqrs0^n2NhW!-|EWL+?s!t&^smPxFL~vKH(cE07fAeyuZ{e2k$s}vgR!~CI~e-U z3y58j%6O>mcx(|3-;wO}xNP~on=4KMgB}kuH5TW5pX77oGA2i;IXt#}*!Cy-!|X`r zKQF7EmzlZ9FF(oqt$zSMwaxCuUzu`mlpmUZ8+U&=y=wRE=l`v$FvSC;s%9T#KFECZ zB>(xX=zGz!nVAs*%fZc7cb&NJWy=mfE%H|o&HcwOC2sx6|8}l9>gCTFe_8dS;U#eZ z*7Jw!mF1lrYTaiMex?OcqLWshBf;rqPck+9R?VMR=#gdO4dA$UAggzRY~Oyd)qVZ% zSd8W4BgMoMaWl&M`sDLCr*Y}ASJd5SR!@s`qVMd!GL4y^V_=Hi1R4vjX+;F2H8m!0 zm00iE8$9d8bXLsUu@R3f56$16S!CZ_Jedp(2sg|E<hPjTRr?J{uYKFdzV9Y1D3BfC zS!Eb`Q*B4oWV`ig_I*ls(;R1YkY})b>?q6Uf3D#FJj2}){qMFKz?QCPyhrtOL)5Li zrk&!p_rWC1yD2B7{1PLB&9_yH^!e{TEh*tgt&k9c_|8{EVnZhPGn1RvL75-H=PB8M z%~@o6a?do2b(P+>(^bX8Pb1uGB_AwjeDu=*Uo(3{o$iuc%(jN7Gf(eDw7!Z$;Z0xe z1bMvpMF+vJcd5}ak&_~yv>Kerd<&u$cy(?^g6tYpT^CVh$BWJpZrI*^XJ$>&hw4GJ zo&HJjz7t!n3Mu6JwoLz}1Uw@D!DQyoC;iW7C76LCJj>^-;kxLXvxthRpzdgo!3P0b z$M7Eq5FW{zX`<(?R?C$UO>uuk&T)YjwX{B{2fKBzT=dOf+=KlOr5`^nxt}MMx2I`$ zKSaxMdHA8ER;B&zhCk(#j~arEYz#(&Hv(Q%U;j&GWa?h~*6#*TcPr1Hqf^WfKb^CP zUsC8S&e7llN8x+n)sl0=J1T6?h&0&2;{3Uy5)XK{Bt=2TM)C+HSZ+IX<6cBG<5{Kc zZ0O6L$F?(fZ{Ctz84H5MNSD9Eu)Uh-4{7jDNs0HdNYl6_d+V0hMTDm0(b=bWU0JC& z`%oLtny1$aOAoIxmQxh^IzwnkZWrxgmRGWTB}Yepsq*Dtnde4dzI5E+PCXC#r0!8Y zGW6#!7587Ne=pkG-afM^_+VXKZGZEYb5J+bU5+%Vi+NMBdSU)d)5fqeAT*8{@oGU^ zKl`d&)5dw|&mX~x|K0%^UKsVh+yNhF{xekAR(~E+sw8w8!mg>`1prI(JaKzg?8;Dy zNByD+DQ*Raru^Z*dZy{TK}w0VR~c~2`*-@fwLb+4>RbvG%u1`XWnGuR?UcW$ijml& z{F@#c(O0O|b(-dnIv)*h4v!GIY#yI`{Z3}>hshSp=hfW5eOeuo*OjJ+LmHb`gw1?J zJZ+CobG}sePH1+coY&}^3Z3z0QL98i+<q*ZaOw*75NkeHa_@gnJoN`%j0+>@W`+#U z{JYICQ}N*Z-9^Ro^3)RA0kS1IoFev;kZDiTVjo#Kd#f$;Ve}pPyJ@>LMvE#ZM7vH+ zjb`$T#HsfW6M-)*IbWu@+%Z@kXtiWt9EXo>p*1|B>+a@4*QW<>eF`%4!x)rL`ry5y ztOcDuv8}Vn_6@us9~ssBJ2U5*scQWs|5ZbCCyQv7-U;Mk2d^gkC(F09A3vEjv%ZMF zm0XL*O*09<i5l_B6OH5r7F-6cpN#x3L=qUv&RrgU8a{$j0*B?x&09WL2L2r~ll=cK z`)62S>j%S;w=)3)Y<cz%J##c5)IorUAc}I6>#cy^Xv)R^DC4JX+tq(^pPwW>EpCj? zaP6qScamJ}`tY;PN6G@q9upsXll9KjS7tu`a8bL{kk3}6DHe_~f9iVce?RY60M8ih z`Hf1a<RJMJ$<bAcWi=(q&=)p*e^cJect!b3lSp!rKF@v6uaI>fJeKE~(X%bKBAuun zooGJkWzBdq!$(RSW#&(7O6Z3(exmO~m7W<LSN<=+QTCVb3Vqn&WF{{6w2=N;)qiKs z>0fnHvYy|*eDc3cMkm@^IEa!hZ(e@PE7BK#@>yTlAf^W?7rJci*+o1k>_ovhqgLM` z22?cXiY%uzmQh1j+=ZD}XIP|$w&C&h!pD>xP@L`mTR~Gk|L-dmJDae)_A`4gq42b# zdb!6v|KAE)i|uVMgNKXnoWT?9_AO~FZ>`ZO2Ul$>3r<QPhno{qfCfQ(zr$Os9~L(3 zlZ1S4Z$|(|l8qvI_??4OtRHlW*<ll%Op&{iQ_zVlOM?=5qClcYOP?c~>C1;RM>Bxi zQFdV<NIe{$Y?1rE-Bur+7x?&*5R%a)p&!ujDN@6_y1*?<w|qo-qr=NODDMFuwn_v9 z@6MBzT$%75(IIvJSUie&%}!uw*sb$uaI&8+w_gC%|F}^$W9sx9&cHyA0QGzvZF4Cj zn5py$&GD8J15h$O?vYVxSE4pD1*j^Y*I(N7?r(tfllmdaZi&rt+ah|>`DOFm&bQ3# zlw=vg!UBnOAJhUSyvvQ+lUveRTp81JhGIN1a-RiAOzLoJ5n;L+8p5}_6O3!<+CX4X zMpV%N$Qru&m#P>VnD6{f^0~!_;=wM)r@;hVlr%cWr%iA6sgEA2E(`GlcP&47p&%Ey z2vAyoFNKm2mTQ7={rGa;=$Zc-H^~$U$(7}DrZXBS4^Yo=KjBJU2^l^!;wHu2IY=Y{ zI5k)vW15aoQW#0#9o=6z6Bz2hOJkjRhzpyj#BS8G(?i#rawPaci=iL0AbBz^YIJoo z0qOk?177^DAidItDAkGbLq|V<!V?(ZW;DFoJl4Lz&M0clr3nmIlfv|ZWVz$vfmTM| z1U-uYV*zH9?<m2lcL5f4nC-|KckF;u#CSJGitFL`fOM`HU&bNN1O)x{V)nBzyP;cg zeY=YZ&Ue2kaD=e``0qyt$epD%>u1(FmC!D`lq}o>&g3Zfoj9@mwkh`5^diqnu4-`= zmnKi+Tch4KC?DP{hAmnQ)$_WnSsKDjj>c_MkCH>HLlIb)46*mPyyf2e8Xx{r-JY(x zHq^T8NXv;4bMD8TvRxD6TIPF4%9x+g82{?H25+GcF!Jm75!-u!cpARPR2T4F;h^=t z+eAZWmif7q6WZT7E6(1~_%9XPg$>+ZX`_JcNG$Z+55Z2Ww1*%VXxm+ZGzW5rdKLTS zV&?!7P_imtun0Dehtz~IOtI{mDc-;5kdL^>$27N4Vc&3FZb&8#3e!TB-)%d0o+#d@ z%_^evBDpN=s(qKlExi-y?sPYZ+h&)lF*nJW0*FonYS%!KFSVUMZbSBHgtcR9A2IUT z6{;w@(ovC*x-Zl6M47{Bjk+JP{Dej}+uXpgB`V|56K<Ll8Zv0@yK#7Kwp2p|tG&6h z-gkH~T#qRW4HbNA*nA#&Y&-U@BTshH2Pru(X~`iqK_9mHRcX*#If&!N9Je<R(9wR* z0?0_NXDRPrz6G}rB=byS9HT$&fc>e-n5<CZk1Q-}qn1b2eM%F&uhd4D^qsWeob4QX zGs=C1)vG!6hw0X31Y~U|UqmSkPYKjO55d+vA7RCY&%Sd;x%hc458u?_&gsw69@a@} z?XDFKK`^iIhmrMVeCvLuqbJ;JY<{OQBJH5QY5-rwJ^?Y)P^F_v7oN_AlR9TBNGw{; z!kg*pBqPS32HsaI@oZ8^Z6i}gFYD&zXDPO2B+YIfV4V#uaPB&R#v);i19&9pB&_>8 z7iZk%L~RXEn;Z%1ghM06+f0y6;5UeTw-}jL;HHc$$FAtV+q6pNct>u;Pb|MYzeIGK z?eonp5B^!F*~PxO5A;GC$bwNQhzr!~2G=Gtkr@dgS+@0bNQuWi)P9Ph)Epct2{6Py zB!prsK*Rg#P(^F;&01!DJ1EpqW1U_p_RZt2I$ICTZnTxCN_29epO#l)s}?3yss&4U zxLa~9LoNTpWA{BdFwo^(%%@KS9OP2bP!7YT%c&8X4;#;g4)gzDPw6_BV^$Q;ZMWl= z31UOlom_i@Vmf}n=FO4|Q}|^DG(YTKLJ6U*Jq8(}NZ-91NtL~_hnBO2Gr@6nf2l?r z1s#7*IQXl7Z{wvxoNz>OFdzHNA8kOR6@JSQHCDrIdCc7ZQnf#3&MM+dY6nVb<e?_0 zx7~+>k;kb*K$bL|DYd}uZG?!VqvX=lu~biw$$W!e-bRr^v6fGb_iweW1-^Q9z3?1# zV^gM&@X)|Kx{ZaJ08hd+>q@0mIp99EkYuC37&jZJg#7WLJkBd1AQY>ey{f!=$Ku8K zVYqB3^ENNvfUA$Sa<*jf^1aOEYYvz_x%1E}rjN4cLjfa~NOXjepS;TY^6vaDmY`ME zD51xrm32Jqhr3$d(<W1$Ykb=et)8!+#_lweB0ABRjpxvPh-Cex`5BfjP*sSvv2p3% z8%!UDOUtY4cxh9DVQPLh)_GS2dp5G{{+qUXpWC+msoOVFh{=Zv>~pQzZv<Jw{@h<G zTowVOh?uYUL58(ykX-_2H)nv9UL>l0g8O@oYa7(QN-RXY8eavb5TuKurlT^v@_iZh z7(j+vlawawS=|W*b_L(Si4qDUW?^^?o^io<(dwr4Sh}-<s$!%Oj}1p}sDqDPqtcz- zbpEtd+eTkds!l+l7;T_@XVzXb@46#F>Z-nj8_CextxT70pBmg;?Ul`7H+KxO=YP&I zshH32KKEmZYtl-A?ah7xuxBrT&s=~{8~K-Nw@z+b%FiBZt(bt7Hkip}Za@VU3|7|! z_I?Pqk-qq@LYMlQ%XB<Jb9^-0CQS#R^sqfHtU*p(bNI4=>avuxDzr|^gT%V+Oly(6 z@vTA2ec8RsgVdi$9vs-+anUH4OROV@8il%dD*dH$)3T>otaMtsPKrMF3v4Di6+)V? zDqN~0Pm)nh?M?;FXNkcbyIp$?T@5FgP&a|)=<nnE;f|!J^N@-JcZ6Wu4@UA8dB6Tr z{?hPzX%&5cQ{7`pDifWdv0OpabK1&u{t+<as$FeCZDq>!H_4a>+2jC*0>6&&v*yr7 zJkXJIZ}9stf15T&bF+w+kU)EX_GfjIkNZN)53M>nRExWgG9+N{(VhDNEBK<eh9lx% zs#87Y2$(NO7ecX<A_bf1uS?n4aa`o3D|-1Fsb#$iZVm((5ihMUB(0gW8A5(XQwRdG zj~OWzKr2q&+>37?j{ag%31TOckPcb?YP@`ADgyi(Z9H9P!x^sA{jHGS_7Lu|n!t9( zw-e;yc5(bTra80L(?fEmUgpQ7C4A7tXWWIkq?Qi&;R<Mgu9yJ~wnKs~EbL7V?Q;o# zsh$-!2)x5GoI}qAaTNm?GKLI1NjUZxPAOgpb)#zzrS$m#y;vIx-2~k<+s$_Hhgvma z<mG*K#Mc_!Ck;saw>fNn<0bIYt+Uy%{>-4zDFl0IKT%WNosGU~zADPcVt}Ctt-2bm z`jR^sT4$Rcu7LILPopM=^k7u(F=K>>1c!Ts@v@-;U+Y~&cA-p-zs%6?!1dz&swh#c z+r7@R<=}ct<_X^KTPEwgbk@u{oi3hVKKJ<kz*>1&sww!uj|J1vbv#Vu77ad`mNBcR ztv*IrpGy^8ri7*xs%S@6RiQ#*mzp4>=1-hxb)ec{eSUEKb3U?_*@XS}UZ4&)Xxfdy zR)J8m7s!(qz`6w^VT~d@1>De^ra%q?ryn~v%t$zEvl$S_=*#G;plWE(2#2}d{?4$4 z;~al&Xb0X47X^fK_1sBQY{jJ?d8FLHeO<WjqMKM+=Y&7%;ZO|It-TiQJ|8@+VP*@V zo4Xpj%nkk8H7B^+RSkWAem}jI@6tU!RM>4E{e1T8f3FK(UpA-Yx!6)v4s6O)lsRL; z&gb?=N_5AoDWU`p=#6~6n4|S@sYsVRO(~(rdVmB*u2A=E*c?eHHd~It_69aFTVrWT z$(_hhHDk~AfJf!B{xO@iYIo0Q?tIoC1+YQbg_u|Fb5?JfK!jQVZ!IunSA5a$Hp@C7 zMh9U8eB0ZC+$g;eiAn#DmphzU$G}h9TcPIJJ+6qyKBw1|G(pPnt1>5v6z{J?D~k&6 zLm3S%4Y*E~-#m4i4Eyd69Ti`Z(t_7f&aNXMdUrQtc4@)64>Ze$<sSuOLaLX=m@?QP z&;G!Za#JMJ^gNkgA*}LP8Ai^jotfDO13(MXhJ4z~!`p5F;~G;-ZH1hQZ|Qf@t^x$^ zWSSh7CDi->00!LIuBwB!jx4Hm8IL?9YZ_g7anY&PlrYSdWi}5`@*+T`yXulsjm7w! z*<cPvj&=jQk)4Vi$%>WSn`zi#tT5MKsy8<r7q1>$Q`57eE|j$Ch!Y#kDbMv445fJt zrcu5OcZI9bON4YIrgP!#qquS3Wv(BZ*xOdurj83w8Uk}1#=jRjhj8^q`uPkTix(-R zWPNDm#J-m%Ad^A{zxiU=a&LsE=>j?Y?`WMvZt7Dr0F+#=r1LkY5y|`Ur#?mUu7^p0 z_Q$M}-@sD&LOtsB(DzP^-!LDcokO5}Y<+#gw`-7d$lLTH-UT;dpv;E&U#g}yYvLK4 zbMOkZ{er?wY_+k-WW9ge$f^7pufj6)+Y4II#|?!xCO2S_P2zGxqy}6J-UM8q2W(Vm z5;%!%Z|_4p8#0{GT0MFPbaUZX_z7G@7Qo4i6EJ<G4PXCh$u~~^hj)`{JR)N>F7|&j z`AZox-R>yd{T?i>69Uw<I27s1#%M^FTCzNU*+T>7&i@RTv*CFzXS+ttlDp6AlwjS* z^VXzYxZ6Pp29QOC#xke2b4H!SswoMnWmr8SFW)mQ7<xY&|M;<5>dtHx*(mO0jy@Z! zS&pNnpZs7eM$4J^FbRPOfGT@MG9ze+3~u7!H>@s97|=*_6--0>dA|oEqo~q+l;gF{ z+FX!Mh}lYSqi=b+-eR5j-f))g=j5J9_zj%9T9Rlta|A|Me=AuSnl@vJ6Q7&{rDec+ zuE7()5{)Z1T=Q=)LRAXtRy3(SthXhpWss}Rfq>Y}<93T0@;9LFWf<6^SRq3H*N^WL z%s1+0Yi&w6_ZGmX0*HQ_=V*R7my(vpY&S;e3dFnvC<`%4$z${YZ{cOs)nA*f6oowT z*g$2Ty56pP-3fX<n!5aSC5m)|$ZEgj_pu}GV)@srUUuSi|7%PcKA_QoRz8neB|snl zAsKcJE}L=qp2+&k8u4x82Xhn4>;=|v;KfGS!D@)fX@Jk*Tg>dC%bE5;^rr+3lRuG| zko)53M4z5k9DX}Z5Etotr~9GYjzkA09-5wgB!hDdaQmq+Z~57<Mj;RC*r~WVo5O|; zL3b$03aKpIHR!jx_eJU1ov@osaj&ao)81lpWYEq_bpmXv@-2FTe)9n!J0{g-Tf(G= z5gHG<EekU_GgnaW5KE{${?YZ;`n?3a<lDpWH04tsp8^`i>4Y!n*PMOr59`Z1TOmqM zS2SAy%O@#1e5$rYUTrKWa&yjxpYAEKW0}WL;>K)-Bl00OAXzfc1@pQ0c;w*C%<6YW zv9q-kcx2eqj{?7KdThqW($b`b#!><$6o!e~L=_YLZGbS=SAnlJE<B+InmPccU%zt^ zuAZnabwRI{YFVga78LOZcp-ZjPP~j0g#V=yvI0ntGFWO}&)8fZaPuJR`Yfkq`Q6By z^6CE`6xWrmCCv&yj75|(H5i|=EU!exrfULssxNT<sVQ8TvXtHr8$Cx;w-&p`zQnnz z_uJEZJNw^TcvUIn_QC4-K{&%iq9mUZkGcGb@Dg1OZ-eru1$0d=wSt;7bX4f7xy247 zAre~tnAQ3V5*OYGqjSGp0GN{n=6HZzQ`fa;tG&13R%uMWonSykDcUFu4RiQYc#THJ zN_gr-sJbK3d)S@`3xv3G8k{z}r$U2@ZdBnQ%ol4o4>eZZjDRNng}HNB=aVJtN5!6o z8T~nigl&*#xP&gKm8VZN`$oCY&R;5Nz~{eI?!(HR3MAKb_v2rV!~05obk2Sc@);lG zME1k`Hy$9JrtTL>nq!|vNxrY9%>4B)e2&m30UdE^4;a0Va|*`QC8<@Na0SYhYIe~@ zT!A{L1N51Hn#uOpQNBD3;r{Lo!r-!HIQ<tigwTHxCS}X1ePNQp)1}}A2h(eD_la|( zIZ<{o7ws61PWXIQHBA6<%U>nOp=g_0Lr*{lVB-<?mc)IPHB7JS&DjIX4t(c)4P|>> zcVih29h8+yGG=tqW&jsTHN+s(dYJ$+844IWL+`B^v&J-@@hclf#V}Fmfoh@|a%;_@ zRJmWR`Q7jrlj{4%;fx($P>1ERL}za%@F!VwRdqzK5ec?V=P4^HsiU#tiDl53E;D(F zf)PBJ+v;A?D&!2&g)9i{))}@Y-96#1-~*#WRd&cIz8PzQ8}Tjhe*Wwjvm~-y0qGv7 z-`B@rwtGuRkz!jY!eM3ob5#SSZ*Q{IZjIO*1@Hbkc>SBXQ8MZQknLoK?IheXI!o87 zctn@ir)~Hx<+U_&G`qqu*17#~Q?7i!u_u+65YPzW60W1^1}W~5AX0*|M6&{GlQ;Ff zy;}`peZxeWz~*yll8?0&oaz17buFYQI`r9B1f7eJ3vGyg9Lbf)PkbnP(csUyn)Xd- zr<(1vrolyA7YFh2vvfwg1KSAi(>ox;N=!-|P!-BLtl1_!A^NPZB)VHgFBC7qUg{+% z1#b8SyyI!%U$^(ZR1~qz9%M2z$LmL)Myi-h-ZKFWj=04I81z5|ExR%jrqo}*v%0Eb z^^Z|(<l8rruFrIF{YK3}_`H4;S1?p<iT#k}b!IEo%R*SqGL*a*<C*IYS6ByZa<1gq z;}8zpz5AzPj#BC?^yT^+;Y<;U6H?<=I{|qZlTJ?#SsNy1VTGN@33`^m*m{Z7jje>f z^9M-yIL!z0V-LOKi8Ky#40y>XJi!Ju)eRp06)bz*Cw)hKv+)s2vp3FJ|Kr4@D{q~V za&(JcpUI6oO3KELN~;%es|Rs|2?2%rL}I@Z;mbRo+}{0mbnivJbPWi~B|9z>!5t`G z8D~8xtkl;!rj1K7MX<9<O=eh&rKEL=%0~rjulahoP|-S4bFAHx@(i(9^OvmT+C#mm zTdD!o10<0G)~sZJ^ZaPvFTx6-mOPfht(VzIxO16_k<xY7nUOSa>4;pw*vgKBe)X)9 z%PL>*u1I3EdQa5FswVdW6WsPLGRnbm>S%M3t0fEHi*{{Ws?#>BKwsb9$HvQ93GyAH z`sv3Rr6$&o?}VU`FyEm1_m1*Es89?Y7W?A!d8*$$N%!AEIQD`Y5Goy_+08>IAMpYn z=__d64pP^_jTwGc2P_3;T8eqm_LoY<(1jfAvAa0$<*WY@-zX}Rj2oD7;&tYDFHXNO zI8H0w4s6!_Q4MBKHfuq$Fmpg)D*3!z#j@+dGU>l*u=RuH6m%~@M|`v4)xXHs9`t8* z3K>*L8v<G`UWB^Gm46HTTs0MsZ_75I9W;7jCd$T?s0u1j!uS<_@5OKU$b1^k<`8RB zT+%juRedkT&(?Z>L!L@}?ko+V8`rC`yGUTf_5lp$6V<-w)Y3VhEb7U{EnIIR%qHRt z-pPFm4AXHQRcL!e9l!8{iLciUniU@_C^BH)<MstVq5Ti5r>uv@b)WmCW<f*o<y(Gj zdWx`WMhEBISEsBwwKWWr0SF0B|Lh<uz!F~$v_IC-aqW5r?VIS5n)`~r#|x{<kx|&t zYSo=E%ND*}#JMb&;$k36dgvPU;I+2LAofIT6<-%b7>c6sO@42Zrse)px!O4}T3lHh zNb<sx@6-8SpBJDm)yN&B)2}JvQVW=ipk_6O7OYAl%66Lb<mbb77$3Klq!|pocIw1Z zM!IJ}aQ)x@+Kvf#3yv}peA)-?$Np0B>?BQT3@bg6%+C&#PAu1-^5<AGXPUf~0*7ye zp?5Bm>a?Ls>}=p3pS&?ClRF1eu`N}1y&pT{)>KV}CbQZ={m`USsFSSt*0?&c8$#dB z{}_K$N78ddy{W@@JH>6^S8++?;=q4{Y=FJ;_zw-rw@bc2NMZYE=+doJd>UJwKFI<Z zDrm}?r<nRsMwemYGMR_Dj+LTW&#sDZm_UQ=a27>$F3&w|!SM&8l7WeC%Tj^e-ky0H z!+nriE56~Co!FS*L@yNBg<V~@ugz>lmJMMd@S9tsb0@GXj|Uh;ZQ>Y-jZXCkAJk7Q z3@rTqpg1)H`O1}*anZo@9>H~b1$yRQyy(SkdYW9sRl3k7LcJ#>?5dVqNh$xI2O}(V z!M!ss6>p>3L>sG}tw!CSUtcN1p+RC^k6;R4aYO8RNB-{PlWL8P<7$V;?i9IxzKlo8 zFT5?WP{}FP!riH4d<2uxmiCN`!%hRsHFFUSCDX~bw!39YVohJ@LA*ZK>%rayV}z7) zbe5<!z#c6ZA=hDt9ocgG^q~^U#P;mBU?n*PVjT6J0J4Y+ROx)2m^s~EXn+5k>;ur! zs%G@e)*NB?Cmw6)t!UEN0-GhC->L1UW8~wib%7wXt8pzP%~Cq|ui$K<p0B@E=uN{6 zZX%ix)vdb(b2+3K0@b^h4Chx!%GZ_E>rf5P{WW2nsPMwHCbIMqpV%hv20udI&WiPg z)Xr}~r|U*G>0ZJ-R*-RltRItiMYOh%3B;d*8@_=c7kzoIlvNiro;|L7f&?`Ls#!~B z``*z`o9R;uRM1%6Hl9?Z%<?0Md$fA-K93Y%y|>TIjk&%HRFV^ss`t9X_aM%j1;OFd zkN9Xz=B!F|Pgq#=B@mTAy!A^389(aYaf895URxP9eQCgcb75>TAOLqaue9mjKusp9 zrDC|OIrEr5SF43K57%$S2DTPtB|<+1ve13H8_rqDW6i3CCh?&H*LZ}Zacv4Dig&3m zg(!8JlvKA7T{x+SSOMZ}HkYNQ<{tl}x|<(=?2s7al4?{KY&ApdK3>wY1Ce#TaqHrg zX`d+@vny{6&(r|DksEbNZ3_E*%zvpQ{tXWx(!^Ma2zUCxp?*k<7aQ67JXybH@Is8f zUMyW3`J%O{E<xBY!=#m)md_enfk+RH6&e~lF}(mIjQvTwa@9IRbDaVe&e)<6zx2m! zP@q`QZY6YU)#9K&FwRHfIwhpKN6&Te6~%-K$MX%_!I}C1&O<}Z6pU(Y(p9w5ME_I8 zYzFSQaeU=%TDYZ;5t~wc>yN1J)GM@xe3(^-v>wI{j02j2$rif}=*!g046ZNzx@g_< z$5>GlC6Bu#0C(8TR-1*5WaV+s@DDyQF9fPD9M=Gxzp@aWVZS%y2X$bJ<RLK$0JJ0j zK?lgo^f?utH7Y6R*(Cg!<dmsAapqT*pOP@FxQPFnzU7{Ma?8)8LGD2V>IvzFXkbId zWkXIj@A4~G8fWQj4BzHPTZnP2xYe@p7*Z$5d)8;)C2}`Pbrrcpi%Lxyx%oRy<=k(V z1AHOA_4zyYKGNP!Zn92Z(yR2zy8u=qAm!V&r><)XqttYzc!YcIsw;<dQc`LD3NlNw zBn<YC4D)5U<8IqXKLAm>2$wxc0?zcoI=_`Arb&3bunN(IrKT$^|G2uTAVkZLX`w+j zQ|maTSvl5HIq1D(`;L7k`j3s-tjp<Jg-=a4XR!|F*O>v>7b-Y^R^NN?5v`NX=i=+~ zP4}e~3Bu%8G^tz(CYKf@QC!<)PQzS}oQm%PR&HbdIiaoMoy@hUSVKC!z&>mvB^%pa zS$9q-N&#N8*=M0E?qzdrFkYtl+Ptz#o0L%Rjg3)<Xp#DrD^CJDS`haJc^z3Z@F0ab zPC<gD3KRadL?3fbIx*Pe4IqxB)?D#?$OoR|&b~0|qjQbSRDnwhZLF^Az}5TDOVKW* zzzkpXVyvh7hPMU(L~mfS)zy>7ODmH%z_x{A_Lqr)r*gj9i>K^JX$9!sw9HJFe*SBe zf_Cs{XM<bMZ#LUB7;x|;N&hcN&&;*<4au&0=|`*3zau#xmislW$Ags*>VnBF84Z_P zGr;Xfn6;4<_J%kJzA=#I;F2+XXTJfORCm7xG%(qPfyRkA_<y|SDwnz<-s=kK9S~SL zJNUddPIB1jEl>dodh8<@uJ7(fH>I$Bz^aJ`I!f>ZG?($azC$6K300y}pYeu!wkT<d zQAgF)sI%nV9QD;AmajGfrE1Y%KnfdY9l}d^u~t7_mv<<~<lX_BmSlEW%S4&YI&^F9 zgL+;cDKylFU-#Rs-@Y&1?%_pQ)OehVcqKbZnoap!ADF+UmuG)R2yNW<v2M#rzQR3% zd9aR_X1$^jKxAVwD`7*wNkNUd3J}qPk^rF}O?*;AW|13Q1KXbfARh7?nB2tk6gz++ zlV8ev!%#OJ00-dfd0S$O5jlP%UP?8l!m{3}PSQ4&Trie5fkjLr4lmjV9)yz+@m40B zGtqdGETcRo1ru~<iqE-ENsCSPy*MT&xPW^3#!lGy_I_kZsXxp>R1&HNXc!oP-?v#^ zK+Q%+7+AR%CGuKzEiNkv8K*UfdHqP)TdWSH0MK+b&DclkhO!7jgers&cJ4?XjTi`& z)4%lCh8{MB!rbpPc<p-FljPgIjq7%j?G-C~IW*WFQ>ZlI`pka@?)88z?h-VVU(kP$ zWqQQ@yqi+k4hQ0r8r=<9J+cW%?&3E?2EbA#MiE=#YJt+-q&T~}efrcX%nn#gQ910e z3$yjw<;v5WqnKrH-rMZ3tI#{en>WVD^aPe&k~wqw4~Md4H>xQSNb9BcQ4kCBRnMY; zOV~Hx1L84G+Z!kI4Zr+n@?W1iwhY5dWUtYrZ<Z~G?biMN5Kb9n_^n^d_?N0Nj?5nm zY<xR#8^<UV`)5Mo+MUl?h`sdf>yh2-eB|6B@SGZWzm@2Nlx5G07dQpK2E1O#&2uqZ zG%qO*^ctME1IrUAy`tjU^L{+<YA0Ez%nmTjdn4`>?i8V_ZH*3!zLsx9;JN6!P;l2w z?cCr{)-G=MOuDl-xNETxdx^63IDrw}Vo%;4#-6j17tUGe`#juQs>^Cj4VYG<MC&$) z<L@2Vr6j;c%UnLV1g9pMrg_O3KDlNdhvW@w${|XH`^gQQ+fWP>1&!D?e_>Yb;A}`C z#z~E^ludl^ptx~AEQYywfsmh5csf`h({45Kmugusp47J<hgK4Tfz@P?QS^~nHS5&V zvZ?ZMRuP<utU=a3-?b4W*?7PxG6&4Dw=KofN@g*vX_fd2>jl;sFZ<m`1PA8uV&s%_ z|7it{kT_&btav_Y@V)pAzz$?P>*js{B(%_ZIvkj3JrD4d>+p=WyxSh~+N?RQ@3O5W zKi_!9zyRb~6U!;L2C_l5f<Xeb`&X#l^JaWdb0|`<F{>r?Y00H-Bi#qq4;4T)7mCIa z<^%!`20JvOJzfYR3O%;_2AgqR7=OWqX+jFtqw#Fn+CQ{z6y1lVYv}UWmp;Ewo~JNV zGQ&s>w0c3`vatG`n8K(q${EpEz+HvV>1IQNBD~H!*teUPBt9$-@YDP|eWh}yo@cYS zHW;UIbk`==EY>O`Z;Y`ERWbUx_n^+Lh@jSyK|Vc@MU@1Y?~OyP5RuoW1dVS6WEuN- zsVgXUR8+31c8G7TEtP!wSh5pZ<oD&ylSi=99HNx$CU|r1qVNNzsZV$f+s@flzh9XY zqY6|QM6m7V%yJcjohH*s;0Xx8P(0!|ozCN`Pg&Hfmm$WpJ}}kvd57$+rj@2dJT0$J zu6joGjKYYmXis-@*s|or295J0fyr*7Y6Dn`k~i$Hs8S}+Oa!FVRRx9wP*yH`=4_(a z63pdV;oKE@QVH^Fc?nAn1=_Yh>FnLkWKb|B-%b;FNOX)D5AjU9PMNhDFr<NnGb$#- zc@dNGJgYg1>jCX1vaX*u&RN)etfMhZ=9*kvhK>u89bv<Kf_i7|_1k}`L}C6}PK%(q z>v(>Pr{rzAR=0p^)Q>9Pw)(mhC7T2~xA-H!EWAyh)s9c&fgFMq#P-cwVewhPXQ1FY zk4+chzpdtGLGJ*Ylh?{-1$D&k#!Q}bHUf?F)$&9W&&egF@N3t7k0#&74AV3xN?tv8 z4z8n}xF%uE8PFEVJF|S{E{VVj7bJEZWfs%R3jRsypI;OiX$-AfnCf0=TS<Swx#5m( zzymjHh#>7b6{>s_aOb!<L6&Ne4}!D(kO*3zxRKis3XU(sOD`kbpRB)!@JBFC3uncf zIo4-{W;hC1H^}+U#3wk8hnVjkMffpFCc~k9yn=eWdE><-M%8d=Ox+$^B25b;Q_3~Q zYZ(qx?9lMASXR)e!karHXDRO&i7G*~yI=YZjsP6nGQ*y}DxGCmnR34l+#vO=L*1t^ z@-u9S2)`D0p0Ik&;yU!iZq?W7k(SK%nW3ZjC(sfHA@&<f8VO!I7~YSK39$i#3(~=i ze1iCw$(l={M#zg8bFO3n-hMpex9RZ@TzLolxIlZBxo_Lq&fsKkm>LjSE$H~NmM0J% z@U<9I^hSiw?GcoG`87k_L12xu@`*+gC~nUPv<yelmQ+b8bjxDw%djrb@ti&L!=oel zwf!OGXeFmL!}c$2uNz&@g&#Tdx;U~hE)!`*pHqsy*{b&t@XaWQb@GB0XfPcnDAvqp zu6!!%d(ihj?e=?LwL-rERiqU(ASY{Mz<q8(1t~Kjy9qgE+x|89J48)uGmphkBd+7M zu5hXBi;!h;A>G?6@m?|J1S_X>6Di^n*2TYrb6YbW7iaHlH7}Ue;^}GO9-Udmh3H>+ zl*;Ar!?sPkVM%VEfH})Zkls?<2G?vxJzD6zh0aodK@+@HZ3;2kJy)pWJ*!nZr2cF= z(BoMQhi3=2+fgQ+LbOZU4(~V*?8{57gv@c1=i0o;vfQW*z@Bh4TJ%qL26j5ApmrgQ z<FrVjw=qwte#YbJxYCjV%H!e*>X!jbibu!e-y$SS8h~pxuiy{M26J+@lS@^fEahU5 zzOtytaQ2f}VdG=g{F$1kfu9AbOCb)KuvR7q9x_1&alDeJmgrfD9mzSE_%m*Na&^sZ zp?)aIEvagOGpx&J-J3OR#wTUn@x!mzbr+k*dKK&W?NKDYUt}dKuZ}{nQ8J1$kpYQe z=V=tfwev|*Xxpi?WjA^e>pCSWI19QzJYVW8QMIG$Z2>#}PHn=~IEfZVQ8bQ~Dy;I} z;pfT-fGg;3rh^Xt^vt+B)zzkC<l6xG3&x;*o88B#kAjZs=^x%{<XZAvjd*yiYG!N? zKAG3wLY1T3Zl4OQjkg4{I&M5nF(nV|tepEtpWg@-p-@rP2-aV=uWYk$8_*X87U|<O zf2m|gi@~&00Hc2X$a)woqNSJ6hJN9cSYYEm8vYof0Z$);=LW%7m7kp>IWH5bo$?n4 zJs6*BLwkg0*LfWlup)L>gGsAvni==$fq9`$u@{B>4(6v0E_9U|=tmx!n~ad-Cian@ zD|A9JUqWdl>@AY0i%~Kh|F+J2Dwz{{w@Z8%o|((V6v;^Z!4zA`I;55A%1Bg?;H>H$ zBQg_Zhp2gIamD~=Zo4(lUq&DSMuz?kHL*yBVJl>hy^4fgfzV|mq*NH*f80@#ay3+A zBU-8$#$%HaGXSi^cC;M|3?C;lV|jM5*Q8eXuAi;9cl0Gs=&!79Um4atTsio@qAHg4 zm&&DTAO~ggs*><SKp8IguyGb!#iG08XZY+l8B@0G?i||XBFzf3_+ZURe$22vlVi~o zb=jHXwEdmDZ!tV7;1$K;X=oOM9>75p&w`TVdfZ2qi$ux>0t2ih`ey`EhOKh{QdM5) zqd;V@p>FbGAoy2kAIx(kU|slDd>`@!@&`66=aoNiaO7Zk^mL1Zs_{%{-^F*@MP7>f z$!|_qN*z1C+-tb;bu@`WXP_>+gPL4CQd68Kver`8`Zl9CcCqDSNkMg|d_%&(vD6Er zKXG$UNg`i)*5yv$N*NvCdEgqtM*6eizks)%GbzbliG~gEHhzS$Sqb+Vr!dM)@2WYB zpNh-GUK=c|o)Im+<uD=290yPMQ3Fo68gurd<9Y$Gr3jmD&I<ejRV~*AWE0u(n!1&I zmnptFcokUR)Vv}Qq`%$4hMBIeaTz$h_m_$UXC*KBWdNJ5P~N-&WDu%Wob^@Q67l3# zWOa`V^<rql{SFFF@Rw>Ma4a(Zo!01IDgbu+miuohI>w65LTuS_>?lf4+qwb2q{DG; z-nRZ-zSn^7%9Q60reid)jn?L#2@YhtTicsM-|H1Wr<M(9%!<5+km@k62}AWuUl>MM z_6xh=(JBqInn;(mnR+5`mG^VSA*F3cX(5}Ec%cCXwjJ93=}L0Jm5u@DSlA9`JI9?k z%alO8_z7ht3MMendpmXY3oX;)iOalzpt_%t^Ut#U$q-Hit60KiT~ij8tA|HAx06DP zP(qG&(teKyTb+J*CEZzlWHButrx1$*oA5io#?`l?9f`k!B>kA(>p+Igs4BetXd{Ju zU5V+NQFFt4{xk*-`?C@Fe8%n@CA$4?{H5XvSkciDW^6D^0H^NwK+s;c2*g=mwL2}P z@1xD*Zo!cKU#j#5Ix@Z^bmQBretrlH8lfzvjrb6yo15yvi+$13iP;S$Ma_cn=H+^- z&6iKdG6b<MuPP~d$?_duk9@5m*=}%BNiX9q#s+R<44V#r_!YZq%MZ;z-?@?*IsRL& zmUa1p%Xq?~y*SEa>@;&w<dPtkE-g7NSv4?NCAt35Q<ep|F)qORmntp*k-|u^0?{#* zjxhYuu;a*t0AH#^HU=d=&gD+GNL8Q~&Q1}A-H~d#D>JNHm@iM(7#bqoia5HcFTF?} zg87WoIG6S@{3Zj~@S_kV&a*z*oMV&7eLh*Ya$%n<%wcS$a0;VKB6-ZnpC#daQyAfz zhssJvIiTVlL1F{BHYrnW!YH;ADRSVY;YRXn2l4d=aKopBucaY-@JpM0Z=R19gd$yb z^F^GU>-HY?JGya2uVewB{w`ed)YSvT_NQst%A$FiMm&S?*O9n<u{GO_)v*kX*t088 zB*!^Yji^9c6v&ZaIltF1$E$Ls&3ZR^^zqjiFQDtiN`}>S4It4c&uNN)7*vk&>fhz{ z%nF>zZ^O<Ml;BE_vuY5;n|p*4_T^LQnEeFBg@K)}_-3mEXn(fzj^D8b!qYGPP|a1f zamGsaO#q><XGYGkRU%8*5z1XW{;d_SJX^gJke@u!-UdW!<PHoXAEyMl_rH79FvZ&_ zOLrOsWE&R{aeWJtrG^QYj<i9~wS0eff;>BH7(L;HRJ=t%c0L>CFbD${&eJrs&mfT1 zQrr28dz1us1-?X#0c!%K#H*y7O8lej_Uud5Y?e<Vu(Xf;rAYpIQO98*o@r(5c284U zL5_@JtdWhxc0jvf@k#7os(wP@Np@}z$cD!u1`!<%ZxOhs)~(z*^5v`Wp@?#L<AYO| zlyn8hd7_}`3}toC22;Z_Jkr<oQxDbT-gqnJ*nfX$6s56C0NIo8ZAIq<*>LTH8bB|D zj2YD6fKZ~ET$;?Ue!jJP&iN~tMOo{7mETsd`HK!c>umC90x^Wpd`s|6z)CLmjVSmx zVc~!x;s$ME<?2pVmezJ!aoYwAC+sa`^#vl8WVCtuDq&)0eFOvWX|F)qR-2el@@~!T zj^)ki&2Ro}-DuJSDK=U^^J(pMdx5B1kR`Z{g66=AF^lJ4Dz!c(o-{-QAJf{gp|`1I z(z3n4db!PSfvf~t2}9&;jYy+eg8)s%wbAB;>cZteipXM6yG<cEIO8HWLt)>{e4Hy* z_F6z++1h2hfwH$rQ9|#*>g!!>qS4T<fH_n@#boiUL&dx~1cT)oZRa7ALqGwhh3VYY zoX_?qVzcxZRnO={snPlRk<Bp7>`&c|BTbYlx6yb2?rh*s@3mU&0|zq>2(F#yJbSgU z?p@t}jIX`K&&L!wfFl(rk@`KyuI8s*uGdgj2}1#z*q{Vk=D<C(biZCBM*=1%Fc8eM z6BM;^{m^P<?WTXfmP~SS{^MjF*%Y!vnEdqz<v*Pbf23XMDvZry_+70YZKyE{<v&Yi zZxmnKam?tWOl-AFZ~JkF6wfBjNb7J&;8I=EiKg3Wi+`ycp4!KX_Ne>(Lc2A#g{z@r zYZ>asa(*3mWQ-Pi$7dhhr}kie3MV&a%^bMYSlrzfbjyqt9IMYVSyNdy(p>_k$dK04 zk@q?*s@-^yYe$-%4^Cy|u^}FcJ~2wkKV|es{ok`}hPl<ZAGU4FETi6ElWEuq@KD}k z4-5nWJcIdz(hbb1T>bOJ-i_xD2NVblTj<Vh>jkE-<o2rOUtoa&++KNNnG1|4Wa}S8 zCLx=OIqmc;%Lxv<Re|}~#Lj+4ZU(hT+8>j11W0~&f-<9mdGX{mI=x(y8uIj=ZoDvL z-Gg8?9MKF%{M%Ppc?5asYAe%v*-ac;qFWth!;?)YXvaqLbpxTBI7Vhl_4miXpPyro z-<%oeCZWxg7b7p95+d3FtmUp-C7CeiF)%mfY|xSFdthxgN&+mauGbw9({n}-RF<q^ zp(ipiJ62@{HNR<wl}!DZ=7@)WhTd$L*>(d(HStxC>IrI<!DcTWA1v!BQ|B8mWn-Vm zWQyT$GROc@qjaR1FzVx8JK`I2X_Eod97fGx=I~1ra(i~-tr>~cGu5ToW=6lZ5B~|Y z>SFs?{f=(Wlq~`s9j(l{2z`}WzaXJ@hZA%7uOapObQ2g$pGd3=nbNnXuAw9VyD@wy zQ(0#F^?R4VMh!|7D_B{xg^K{Mr{l23JxkoL5-MKRMem$Gn$rkRK7Z#AwawFN_te9` zu$Fe*sg-ryy)ZKgyd65&gK)phP~Kaf#oc?rCD0v^3|a5;13Ry?6I1hfEND6vM87d9 z3=I!~l%K<5=pU}|?k9Skh!GySr|$BKj6%v|hL>bLFQTLZQ{#Q)cl{0)Xxy~oXl=@r zm}mR9+%hw7&sRIy<(9b>T`$b>(N$Q)A}|7S&s7>w=rqC=XjMZcdw{1OC^Xb6!nV_T zJH;i<Re(G$a;_p5HbFkh0@6bu_~5kU(d=FuHa{FgmRQ@+?qKzQ!%>_N(8wXP)iwL? zl&1ZLJ%K!P>=m%|fmUL%gax6QYXytcO8+&{3Yo%zWah;DR+3E{_Zf@L4f}Pi>^CEp z;njmjAJ1}W=7ob#E>qsK9wW0m1SYD7?CcN4nn=l~oN5W@K~hz~NBlrv`#R3%%P{!p z5t6&BF`wgIQ^5BzobQg3-zwloNyMHY>c++=N2gzG6?D&kCxm=^byfYyRjSc#R<O0K zVr_|f??Nmet&F+kF*={oZ3Psj+uUNy=+R&(m}p=~PIzzULVcf;tZzOcrUA;!nU2N} zg^dpw%8bPv*#Bp5KP^T#?6AP88j(kr2vlkKg2f7a;oanc!jB&P?#<y*4UglemAza& zWDc@qFLK}a6(OFaOEGD5u1|UH8B+6VmeEz~cH^E0b7tdHV2SN3Z*|)GQLS#|klq_* z3+Og3DVcIyp=G+R9)MpJKd>jEuKH+kI9R)N(0Myb6%M^@SB??*OGPF$@X_A3-Oy-; z<Ns{iQ(BZS^RfZi6{R<XSzevXuXg=xBrnW-5cx~>GL0LH$$pw9%6EH}-dB;o`v4hS z$04_uH8yz88Z0urYG|OYu=B@FHo((+LCMulhxaXxW8bp+ZP_`uPX$ASJ}z;^{qrcQ zQdIs$jc$vCZm)crSf@8gn?W`DkaaPE!W9nD`3e3gAA_ZQ9{jO|i30S63le&gu8Q}5 z)fWm<>>mqR*8C*`p?J<J%*R(BJf4d-XB{?L09BkB?#3LD+`<DpIgXJ$ClK6RS>8O? z(v}HttRBoB%6<Qr!0Bt{%p4W_m{&R)uM-{W=uYXFoL$^|mhyrOOZCRJnL5i7+Z1M! zqfWv5+zouG$@L7b>3B*X<6aU@NqpKr`5SrIJ)TFD;!}rwCzNQcFuvvS{>|D&%!X;) zBkxe~dhEYhATRDIz;Lb_E|*DQeKulkaiZ7znTyA{07h$$w{UZn7Dx2bNXR&8D|&1& zzI4!F@<I^{7Feb>enqL7W41`CbtgOT?C(-Iwf^~;$R3Zy;Uy)tBnX3amlTL}8Rlqo zR^u0@%BvBSydDB|V7e7j6v+%R3P_^(eO&+iUEJ67rn1LT^tZJC(6%nPtPhE@-aAy> zpJ=HJ4(dwTr>yo<tR2EBfR(%CqHNTq^nlS;I7cD{I}R5pGA%HeU%zAYM>{7(XC<tV zOFc*E(W$HAIvDrqTq8zsH`{$<xIy?Y6`DAn45-C^sRtjPc}Op9Aq@@#oMJ6=O<E#C zUw!Z+SufG(I6F$Y6-#a9S_n!$!(d|lz>XgJN5kpr9Y%8lsOy2!oUIR^*|UNJV+^N2 z8ED_WYP=>+<hrbsFHCaD3t+*hBGlHZn3XJAMb7<twJ!-^hdBJQ;{NyR5(e6!k<|{G zbOchS1peI_f;H;6tNY*><IGHqie(T-8M&~8wJCnc9pmT+1&TvyYrPDXbK9Y5@34|r zq(}&ULC`dG$^BH1q~z&?OY8P$wUiQn76sis*{vYS>Ccg+bC|5jD^OtzxwhHXj@O!5 zMe4NH?DIs5z?1hYAz?h>kWJC!eKP#e$dP(FU_I6dHrVJ8vMlnHjX(We>|3&()O9mf z_j6rgl?m8ey#R9edv~zp@Z+i2nvT&#fr=^Lnc4)e#nNWm4P^?rH#gG8KCP0t6XISy zpZJK=et>0{bwfgK2=3dPtMsO+e_-7nY+kYdDkvL-pvZ0}bg}5L0L_t|gudciFhnvb zp<G|6flotMV@crKeN2#X5&xS=#H*$~zl;T&pSvlLGh8oE=;qq4B#-X=3k7Ph@$8Ig z#=J06=w1JJWaKy=`$)=y(8TC~ZxV_E?-lLGZ>Z$)y$t<RK!MEX_8#@%c*$-{#TTD6 zhEcR$Bq_I97{=-^)tW#}6cU+q5E-lm=Tn>SI(N?xsUu8yTRG*Z4g5S2oTMAJpKYIT zR)5_VSU3rN(P{unzgPF07HuGuA*XKEB;`DCBPkSKoywjor<M8wBJu`3oA@D&l=tMy z6#n~qmsp9fhA!f~=X<u)GIL{tXf1cKu;M%^G(lc^a9a7pNW|5$BSx)soAq~m>o#Wr zns@A9&MujuhY`zGPhyQs%Ov|#4x68b+D}SkfmIuWhh+{w0l3Q#QuHwe|G*e=Yr4*A z5tH`L>Hx)f4MOKQlotKSjS_YqWVD?42{-C&TT!n;LAz<JZ=L+ohT@g<cyk7^jxI6g zrFA4XxfoBDqJ+Rs4<@z?NFan1L%+>ZTaK|>G#v`efukzU1KS5n)fy9(0AIIL^y7aW z-ZaelY$LBd8?_vaDy0~OW%(3HWul61x3SQqaU7}wm(PS5aGxks#YrPj+-M?(K|U$u zXG|zONmb^%$ydl+%0<(q(?0OGd-cI<fA&22BUUVC4SF>^-&QSC%(B+5{@n=ezfF5A zrErnHhihe84c}p2j{v=P;kxlt!RI~Ez*dVrj^DQ0&DaF}Hscfi+GRow?4pt9r6V;9 z!0e^e9&p39;r~%|-GOYa@87C%ZTdB8@AfwKt-YyHEw^>A28|iC6`RCfF>BKXwOZAx zYcvTG#GcV0rA8uVOKZeRiK@|Ge*d0x{yOhD@B2KT=QB8v8~aGv@q*or8U3i@=h_;( zCYc(RoLh;=iWjJ{W(ddokfd-r6Zn_2-zN~a$ew9|E*c0B5K!HyY#gd8l|wNbYlaz< z?uEH3bZ~p|d*zgPbzGW3s+OtWmq_L_(Z8A4p2D4#1e#d>k{?s+yNX=en3m=olL!Jr zxYe`zO&_RhNOVJKT|*>jLG~0>AQD=I;pP$UhYCIQ@~`yKdF0!rTYaVy$nfAil!=n@ zSt9oZ+q=ki=I^!uY=QdPZc#Wkh1svqhKmf}57r4znglI8bDO7qLMCp51U4&nVx<le zn0D;Ow)8&mbSZ<+;^RrO7yc5<#-5C=4-7V=;aS*fw=T)OB!{=}2;aN9s{_Q=d&tqe zE0`RO?buj$N94l?F*qXOR??w5BLQ|=ftvF~VAWt8qd|YLZCBxcpXpHLfz<M=?PDMH zjTG~xXEqjid}0n-Q?-7oC^0qRqQn;-Fw=Yn4J;E`V;c})M+AY+W^y}2>aflZng=V> zV0cDLgIS`Nq4e3u2ObU7*9Z{&Rer;p8-hkrOZ!;{8Gf1K{0M$#!z$3mCr1&{TK^X( zQUtA#zs(XGu;bYfzqD?W&YJFYe~!)NmjOx7-DLSuH(UhLMK|YDX#V0kqOg}T@G$rR zmFiRadPF#F7RC^ol*CCL`=r$xSoL*NOHw!6J~UM>D=W3+PT!irs4H#%5JXYx&!Z!C zd|wp{Dflk0oGV0Kj4?~o_-Ynke52u){>};;xc_BOZR3(GX-#+)#q_YBOA7?y%zGyV zaX&CnH}R;wJPGP=^R|q<)$-^!6PI+F%UR5Y&kXDg`kW*MX_nE;YvHE}mfK^O^mi!2 zVp2gdvA%SC&(O>CtCKzWH%n2^d+f1<KZ|0yXU3-oBhNTNY4(YQ$elhJOo2iN$^XV{ z9_S~f@z9suu0pSg0})0&(2Qw_(npHTCD%?j*;s{%(}aAorCrM^6*Os06#EhtyT&S? z;mi(3dnH@(Z*Mglkk-85rh4w}Rg=<zuMvXlF?M`XQX6gL!|h$#NvFqkG^o2V-E~3U z4MR+>T9&4USe%Sz1u#fcoK64T!?nL{P9}UeBLaHN?^5|Uir4wa<|h?Q^>|1XR*~6% z#`QGkZu-CGT|0vTH)7;kw#8<PuDpoGeS1KFLmq)sd&`F;3_QisFqGV0O%rY(HN>od zHNLvp(BHVGe`%&~UMM?7LPP>!$3xnOAza8){d1iPuNUo&Z>NX`lCs5bVpeX>G!E=W zCwj7`KBfCkF_~C6I$LAaa!Rax*z&#hQZ?f^w-;%G*Fde95jR`!CI4=sKYlf7<IoM( z=jIFRuPSnL|J7Q0<OS?LVDA>C_2y`%7_#5cuGh<t&$<H8$fR%kHCqIFUC$FD%9n_* z{K`ZfCZ_Pl*-i0>G)fU{<vCKHkLj1iN{b+Qvv#O`_OLG>Nx1c-;^?5B<p-O|1^^|T zNppWRslcp?c+5{d@*I)pX(@?n)0!V{xfMX0Re48_?@Hjx(hI#oAEQ1EK#w9ZG++Wn z)$2U-;5SneOUS_XG&vBXF#V~tSBGD~s(qWYGK4i4JsS`#umhJ+ZJ{Ecu;y8Rvf@}) z2$Sq8cD{O1pi^lXT~Ll)og5|1eVY77%&tm0Cr^%rs;V=x&x*B2uBQ|PGmjFuM|j|J zXGPsUD%gMS@A*@<-8jfL;a{{8bYZ>d6)tNQI{dMa!T%`NWBLp0Le<RditNswS>7Yr zQF>3Fs6AV<g1yZ-8xbFFMTG$S@Vj5Ad-DRnnY_xco1--d++l*gTp|bHzYEz$m#;+z zoMgc#nR55Ew)O)O-tMYjF6h0S=hhw;xxZ95twU+NyQohm4}9vx_P<Cb$j^TER>#Rs zY|j{+`EUZ=dTJ~&?&4NS1H0z4MZ`Gsby#T@vQ9Lee;u23p1Lmwu(y-9H!-Vz$wY%L z;$8(6aIy|2Ln{VF9UHfoTF+DN`Yb4u^BGEo`3)R_K<L{em%@aCX=AFwsgJtcHsOZK z2YE!7O5`P-TLHp~nYY5sl57Y8`s|vJLPQfelguU0>xDcDVd3@s-w*gk*X=7wCw(VT z=?=Ns4Y|BIntf_LO939}kt)JPmhoQn=dBw#e1{2n`=AAx1`{a}P|d{$q6u5h6ApDZ z&;BX;FXKBW^n|Z+8#Hmk!XEK}ATve~wo^!ZY$xs$u@@4R2?XJ_XDj;=L_2%V)hBvc zP-D3N5AG-fvvXB##R2BNKS7yvHir(4@~n?5;g~~CJ+q(BUrLIbW)AG;6l_`1Bk8!t zG&qO!n8poGOa{5S7Z8-WhX?%^i$wZJ4#;Vl-WVR^t21{&Y5G*jYAnmsrk=l@llLB% zA-o}|Lp}XV-Z38}GodT2SxFifBW23m02TJcdKlyQ(c%Um0V)|>c8+8YvW_H+)v7)p z>N{)e*G(F1&JrtTz3VRM&j8WU_apoI^b8s$LN7n6K=U#3cawLw?Y`b@Z{g(ebP)04 zbE)%(iHrJbH3l{hJ~n<a)-DnBZeSHqo5y6{+g(ClEk2Vi#s;J1E?cA|ICk?}a8^?S z-;V6ln^HgbQkuOp2y>vPuy5ux)7s5XOQoN=Oaj-2$N_I6Bw!nd+(OWMP5EQv(+GrW z7F*re-yT9Noh-w}s;g{^Yx@f_LxOy)_%U!`WxnUy6jK|^;izWfjW;|g1kUynk847# zI0#?&i$4R{Y&8&M;Jn<P1Jz<_IW~LQ;I?V@XFJMXq&4tpJV~(kxx5qZb*~%K5_Wnt zA5Y<?jcr`|x06%sa?N^E`?KVXDg#ZsezgUs6Pa;s_kJ^_n;je^Rv*`0k+i$3=W<Vl zE<-tT+|g1Y@upQth_hF)$){`&*N&%uRx&Aj*;iL`f6;7-$2sw);5X@SNml71B7jdI z$ucjI6;!1(<q6VZ%xmX*>~ljtmkT}qOkfy+IggZp-@6d~r<$Tocid8G&w;p4nylnV z(M73g7ukv84<2GXO`R?4;}#X(LqEFjoMa3tZK2(i6=uEw#7A5YIGnU`!FLNve4xSf z(fagLlY7Pte0i)Crj`|i4Enx{T%Twqzhb2A2ng9Gm&vqIiu<*#%V2SfZFh}REWQb} z)MsrOxA&PXvGHu?&7kRh1J+R03zU0ZENj8!hJAdY_AkQrZp*amk?n<V!Ib!)uvcx2 zux`mMj^dmI#V56K>zTHfAMfvo7zIDP6O<x*b=??McqSruUixS0&9+8)5+H31R7w0v zJRPy-ySLa~;*%j|;g9F4TgT^^wq}rJS}w+nbA@DUWCixKX(HUrXWnOV0--H|XNKY6 z{3qhGt<%O{QWBN`&Q>&%Q(W*u?dV2s*_E6bADiUn8m?_?D=8~QLuLC5e^>_*(+Dg5 zyC}Yx33WD3=%GrFr`yd$>2QKC@fWD7v2y9}DlP68mXg(<bLPWjU-S@9Oc_{o_&h~i z=c0N~f@(S@B*o_S>!YFX%H&T|y2ZxqKrFi;q>g+hexbci|EHsq+^qe&g3T~B=#zRX z8?SbY&_Em-j3n?@7Kp&9AAHZ@OTpTZSml2lH&~c*Itm4+5IgA$?D5I{l3apNGm%{| zU<3D*g+hoPl$b4yD%G1CJ!582V@vL9^|j1R&u){+KQhQ@i!sILW18aq69pXNOMamM zf^bQL4|*UUg&&Mw@OQA*Su4!irLvoIcYy(r6bauP{wp(U;($#$fto=cfqY;ZqbFK8 zZkfK8NdAk1M=^7fnICOSI}~@*ahk<$adp1#>5{srj4M86I@ODV(<C=5%VYz)6sRnT zw#xhvTKH4g6A0-;*Nr<WIwG=j1K0bkm`cA9sQK8vReNeax&K<e9fi71PlV)C4*Y|W z(Y4iN6<0g|V^rqSF*Mf8@GqXrmJ2KC{;H1`FHrEpGhV|p<BQhF8*1Q$E0+R2pB@`S z4|&JJ@AudztoX<B1PfDKt`S=&hTj%@QvNg%id`P*x0l3!hgyRYKt?Tn_eVY^qJ5;? zmn$ZFG@8UzIE7PS06+V-Nme`Y)c;NW(R*flF-&J<>`;v@%ZFY|&3)c2x=Sz(Q)XWC zk=dv(?J<)LmZy$6Ex|VrIgxo7^Q+b9SMiwwQP?p2j@m?MY9%G=c1O_OG-O@jPnHpP zrsRtZ7S9E7o^lYQK>m6XRRF&SmOx-A-j<x){A5#SkK^Dy$K83;k9J2dEvc7tiD3Ch zVk#^N0*)<bLToG44O0el$K$I)f15!YW$$noaGIFyQFv~44j1SYXcv@00Qy2%*Ifn- z-b^WdBHnbOSyEB?NX9W7@1Gca906P=spP_`C~6%=rp0E<6f2lPdBP$+*t1e|*|I|V z&15IIB`i9%wn3Mf7T$W&J@%__#lCxlxO>4Ry=6et%Re@){mo>>Ft{5F_5OHrJ$(4T zWUqzu)JVi@X+YgCFC<ibnEV*AD&U(MP6BANHyg^H8q-uFWcqt59mQ=+>;x7w2_D7# zs@CLe)4PL)FYzzOE!UfUYCxZ$`*SL0kPwcaF7rj-Hfk?eT27OH*(lI~P_0O1OpT`j zx%X+DmB@hIYURhEJ40$h99)1uCa*yk;*#Nz)mtV<LvxQ#M(%~GC+0}Lq+ik&<zxlE z0zHD(AQz$@gli&7h+d2U$h)VSdiQyiLL36Vn<eUP(q9Jg;`iK#r1J}QgZHtH7*qQr zAsJCxsDrU}^?%yC7rP0>;Wg7YD#z6~5{oW37UB>K+f*M9c^Nql8vnY_Iz0t6ElN-y z6VZ}8*QMEP=71C$IVEG_i_?9}hlnisY=1>{!%mW`Mj-2n56|G`7=G|&-v#na_DnH8 zGkI(60^_t5cQ?O9Lh>i^IMGE0`5k5IVz}cUCK^9>Vi!wok}zHTfZZ-RGdMFmGyM?u znP0fU&2fDbdm1F-dX9ypUk(Ss9)LI2-<%{}GT1an9(kb6jMIRm(<?EQnn#&GLDG?| zw^oZYis$Y*QdE8wA$`j;OcmaKsXC_F5Z)IG^g?^^K<j&_!G$x|;sb{~-oLq4sA=DE z`j?xGl2b!-zt7q_m@zsB5JN95n0RvdnrhrNQyo+t*odCZjD+-%+z6myYd4y?(D)wU zyQP$C?(WNYrMJtfo;Hu2b54COQnBr@P~Ov<S=C+F`NKJ06?f~_P9_w(=U~@Exw6Lg zY*S%DhhYz?!bt(#OH|)?Ed-rtiSooJ!I)}4{+4|752zz4(dn$oL(v$LLzkfs(?2(@ z2_<Tnsu30Tl%2u|8<l5IL?t3))DI<j1!E6J<9Hk>Rw^4EX#1af#Pw>tDZ&(ysD2Iy zbDN?vmN~SBDC4-0PKkfCNeL8vRysc^b7PS@pm3BCUnqIeYbEo5dS|o5G1DdIq`rrO zsme4Bb|+jEL}Gr3-|OvVMjIKrDmWJB7nrK8s9sv0ukHKlkk-;qg%SjM)yl904@7=R z(D?n234RG|`_WF*l9ndJ?v|(er{aJwzZQ5F0X(9p=d)A;WQfuODRnU0q-lx*Xf;AF z@quqP9|3RyYzVt^F2b@N*!U_~Brnlc?BqJrS1~?nY8E!bmPt{#eUe?&*<y;?*wi|n zDXx<{V-;1wV~{U?S?6p$(!3JpzRb@Z=DM(z?sNJW$Lor@(!y?v<Cg$7Yf)KDJc?jf z^TYNo7~ithn|XB!%#93j8T)3&_VDK2-e3+GuH^W(j#|oY6Jn|$Sbl$&M4l(jKG(a_ zl2d8(w`YRKH~#fR-9uy?vIi&)^bpI4Dg*R+?8*;k^E{+=Syb`Z9vU2umrr~l$R-A1 z6hmf;MA)v6vP!UAa}oMvZmm%wel79|oqz1YcO~$WVlp1o-f}ic>uIt3D5Xm*brNlX zu~*`iE>(qS%ai!~Hba4be98mi3UQ+)j)-%iOE(kO^NdrDbs4<j24za@r<H;(K_&NH z<bZ$ga5<yfY%)M~yP#_Rpp8mq(3H`m+q~r`s+Wz2MKMGs)1p`!=ti!VKlDG@6*Q0M z6A6Bvm%pByr)7w#6q&jaqLGk@K^D`SsUO0me=+#6pP#Do96a}hn3=@kM>RMBiV=rN zTs1%Ky5NRYM@o(6xwHY1t3{z@hNRDmX93~9iJqPiPxzsc+B(H3CnXjDrjK}!m8twl zx!N!Lq{z`;byqL<@1Ds;Zb7rIYr1}$znRGTCUs4}nUEU|%KLmD&e3+W<g}B7td>#P z<>rI6BJiL_I8KK9JaK?!bS;2JQN;zmH)q#0qD!2b5)JWDkF5L}A>c_57s%-oWdbmP z)RkSFH2m36wB#bGw@cv|b@o?-i?;JIfGX3t<I@AA1}O0Q9#UwIgi~|lf?kP-1k{yN z-nicX^%71s7}RAM_2D>9mvtGiOvx7%OfNE;gEsgz&W=FWt(v5>M3~2&Doh&*q-)Le zN%gx$+{JMHtYa5gXOArbE!Rj6Fvjkc-@N+vM0WxPSQ0@0&V6!gk2C3?KX`FeTnc2x zUGpZ#l%qB_!KEp^8lsTDe?ZJ+WD1NIw#<Hkk9CGNX&&v%WyPfR!)L>yR-LRHmykX& z*9gHAm;X>AenB3-hp)hb-8v4TZbFV+^`17jpbw}b!ZPa_MK`Ksfy+dOV-|1nma&Z# zmk9LB8ANe{wF7!0Y)$}^IbSTT>iSv9Mh-#SxKlswzS>BcT;o+s%TTY+jL&m>YDxT= z6MjpyEweM@DP9(5t2anziTOGZ85OM`_f==o30$0UfFL^G72ep>=o_0mT!1veE<cLX z{t0x&;l8TYUY{TN(LNXjnv#PR)eYY|dSR4yDt44V5OaFvC&=BtN=JXDy68JXUFF-( z6C_x6n=cx&*x6;=V{^#*MRVghO@_h3J6dB59Y|V_(xB3P`JQGnzRQjY(%+%Wjz6BC zz^n~M|9(+d!&stVRZCB)mDPcaxle;lFNwat+-FvK$@w9m5(x2Il0?C$BpK(uIi^iE zf==60^VI+oKT2Xqac5s&JUUr0K*}Hy5H}cz$O$Ar_JWUbAp4FDJlBS^$GB@0mOu0T zQkz^<zHZ2;b0kxg66As>^A%A3>Wo&Pu$t^j2)QwJUX+}9wHZ737FZk`$(nmUn<Hz@ z9c!=mDFeyhxB01ToSNjXT!GVCtwOH71)Gx>ljnu#U*3CmeE!A56?ZD(KIv9gXl}l6 z&yB-d!F0WWm@L`i%PX^8U0rK^D(o@cfHodYwb?E-ORQ04EzTKS^KjaiKK1olyoy(T zOOM-y$H2L8kIQ+I%Te(UyHdb_u}E_5SG-JNzM_el+8d*lITtnT!@Gh{WxqsyNSh2* zW;9p>P7CCLcvBK`d-F?*E6e6>C=a34DZEAu^m#g>#6O9*xL*{<JixIi^C0pX@pi75 zIJ1F!?X>c1P4PwUcvoD+J-{uR{ddH<lI4>v`4@Ia*AD(9qVjLIur&6dZe{eCEk?Mt z)Jj^Zg~F+)$z>bWQ1ZUh>sC3#EB_6Fhd%D5r5T5hjJ}5i-+gQRfXk=Iw(7gas+_E= znX0;ro=@s+&%iwLIqIS^wbLs8ISKItZ061xvb(Z79YwWXGD(p`a&E0h@id_YBB^>< z<mlKWV-DubZQN9H#&VVzp%Pnc|1ok%fsr`)n~A52@qy&g-I4i*t@wZd&jGyj-QtY& zC}sV`^$-S}zrBZ4kax53rj#kuEzf($BWag9)vAuN!u-nP%yc7*baUe*l8J!dM%HoC zzFJ;Z>1*Izh<GHjL~aEW-k?K<hg_;8Dh-Jj2H7=mT$2~x<Jr_22x8sXlW-N`%31yC zhAR~eb&)=hE=e&E++_vXtR;fn5F>x>Y%F<7_0LQ08>jD+cQ5fFiqdh<C%y?ak)7IR z6h!SVv`avvoqug5d7o$<%g%Jmu`}6UtmqUGD{xAOC36175v~I7?9Q?kI0*m#%G~BD zNOL#<CTwJ2L}!@SjTt42$Ry;!hrntHiT{08VOhxJT7O7ueU&AWS)tjc6y>cgYb53Z zLoII1=1)o{_lW_P5-j09Kl3lGCOKCLv=M4aLWn;^chAaWY&>MuVlh1iFpbYY8{S<k zdB66XsREv)or9tnu4lj5pc<yIghhdi2J97b&;wwKESezOqS&e)(B8>;1Jk-U2A>fu zi{RN(J7G*NPx*&TEzZ;O^HF{&!dIsIQBGHCIPO(R?$|f>N10oNpt{NH0UOzs9y>l@ z$<PPx-<RqmT{1;}Q2+HVhqvC3P(!MRSN4EvR`epwXWysx^3!zXmZx8v^`{tM*Vc18 zANkwi71{c;YszI|f1H|Dhh4s%#I5x}>UQ5WW`_9^aZtLW!KguLY>K+8%NfrT+PCh9 zUMvHs;wG}#mVwIJ8S_dQAJrz1VzC6~0)hwIvn<=FvOtcRvEi-}!hU+_=1sP<n=CV4 zp8o6t{&YEs4TLElQ!M(9g9*qOoXg-KeDf!UJ&b}6GWB;SO{9~=p@NkQt1ezfRU(5w zQ`4Z8I;_?b-}?Gt0#hkP<E@y4QZ-A~44(EO3fK1@R(ttvJ@P7b>0Tp}8g?q&-#^7i z1{dimhakz4Ov#a0T%X^^dxNLfB^2#Qotl+4bn!1N<egEHfjr!>XZgyOI9_ijHB6Pk zYLw_>7f?MxWPWALi~mOv^s;OG^4FJX9lSbcl=QuwNTlFVy4pMo%@tgsHP_!aFLuD7 zAPWQ?r_Z=KJ{g}#E+qdk_LpLoLbGm-eXT%>Tpw3rVAt@WZ|ZLO_Pr^Jh#-cy`oAes z8ePG(<P>Je9>c;Nv5G1isQjxNgjJ0c)TI3h(E0G1aJZBeqIY+1>qZ%Ww@aog=oquR zo8K`b?~k3d`z*7i2YQ7UVUSi38+o|CXV-OPQa|YY^8%g(9easE2uA&*$9~EOvLbEo zV@8AT<#PhtC_d+%EyKADXb$<yx2DQT#c~s=XNx}h4>kdB4}-|QWw6-(GP&RoZs=+M z0J=sHoJVF(E(*$Yu<<xXxF|6;1TiCSTQova8qSo=A+gX8Oe*nIT6w{kWO_@8dsdo^ zX?2C3gyao2EHJX2eT2qaP&xxsNgopFOWEt4{!KGWJ2jh8j@)J|p$c=OUSHT2lW@fV zY)qnFeuBprzE{gYm@&tx{K($!n~g&Nd5?f6+)d^T^3(8v@fPa{88@aMwHyVHq6&`6 z8N7Pxdvsu<V6@4d3m119FTDPd5ye~B2!#Lf$Ssugb6MR{%X<AU?Rvg@oPXOi2H=eA zg@uz=Vu;*fPW8qn-Uc{{BM%uZPT5A3t)`Z&tWN|fp<hDz?qQ%iu0YF9g;fraKH?lp z8_wYJ0v<y}1H=t6AlKj{O8+#eJdhD{?<MjbANVQdqPxX2aTjXE<JM8^;v<#5Y!8Xn zS~t3qyA42db1!~Q{+tdh!xypGDl*hs*b>$5V!cD1(0=8a$HO@*7k9|PO@$0c^%3aX z$1UMX&nEI!PD_-;#ywqj{b^gAffjr<4(2lk=I>|bBujsIA)o3A<JzyGWN4nb)&h)J z%D7~{S7Kw}(`P$D0TF#vjXkZ&+snj^)0-_Z2L@f*CmriBGP@PMBzgA2>l_8@Y^hq7 zK_z=@T-o}z;NE0tW_hUFa3scW19k5(yf)nXV)F`)lfOZBj=Iqea*+y7xn<%SziL_C zsQ(L&3sR3mebeljA`d7UB5$R+P$doWk6vJ#PL)kNiz!<E*|NWxoCdsie0Y18jS&2* zh61(DdW$Lq@v1D-k_NUen{=gieZZ--Sqfj4tgJb=Ml5diuf@G9JN1#iy;P+Gp=yLr z;pRY)l~fvQkv*`El|@6ZAJwm~Jh9qYQC9t<B*W)2xxC#Jyq4un?k9y^g}olliD-%- z+I1K>t{57Z&K9DL%|M`+6e(L<9xd=aRKputa76j*eN+-9t{T;MoV%1Ud2PqPNXDx^ zTcW}C){K-R9BReeGE2vl;P*sQMn$bBub^hjvBl?KQMT{>k-wSbE|BUi4d2->+L0+y zz)BqR<D>kkh@VN{IX^m<dyn^0daa~4IUK`G%WsShi1@foix|NaKW!P0uD?Ef87riE z`Bq=ZY@aEVq98SBn8r`3U?p?q|E*>`y60xTUKjs~cWg#uEUzn%^?s4qXIUxyrG_-c zGp_PC(_&kmVHX|HIPP*2DC}HCZd%E=bJ9sUlcvYWUboU<T3=>UYT9SH%XioU#}bfj zxj?N^b|#W&f#h=)B@&Q1B4uD8j1pKi|0~l9m^k9X*rE7B4tLV^eE8gfWovG382pxG zrPF_Ex=v5E%30Mibr_GlZv=}DKemgraUrd9fi>Va8J8TcjWic}6o07p(%N?YWfgmS z@#RAN+O~w2Fubufxv0@{+q&-XNnpEl;^d!*S%=Go(S0cA!Nm6bBS&Weh_Zd-J5zi} zbs}wtDC{O$KY<7t<MY0AjxCh{On&cZ)K%-j(EVviPY0NZx{e%fZUB3rL5gCmgnxkA zr$XVe^VlbISqI`V?udBBSI@`wHa2i?c*GkulU{Uy$*to^Y3S*vmOTdsAh{09-hDnC zJ*~0lY6F>GSe$y{w_m>(*z&?@NpVPB@ZIEF1c<9@6veOhYh8zj^{Ss0$$_^8Y^_CZ ziBC5bdYu!r;)Nhk*$89D$gA>Zz&M<WmC^s&z6Q48;9ea1g9YPtyLJ0=OKGWP8{1IG zp6xb4f%tP^K+wobg=vf?=(`r3)ZB!TA5E(CnF-AI2<npYSA$Y8OFY@vz~RapUB!~P z=4#I?Y2C_e-j!cfk(qq$VE)iLth+RFd*D}FhfT9ehp{2DfZM1^T!*!1G|@lr%5va; zb`?*=ydhvOaYUs56GX3`lnT4hd|o?`&zW~bXPbIgmKQZBrT@P~<<S$rFJcK4T){~W z&rkI=#h`E67s3|&V#23|qjZ7$qu+He70*iU6?_I~I(W(y^aw1fWni>*juv9nio=Gf zCb`(~9WRM?3pYK1YU#Zl_e|w<_Y~qIZsq&NB*CG;mR}_d6+Dt+KwB!(+A~hD`g7jH z)=M(}&@_{46|bAjb;^Yn;a7OyJ-NG-_DwzQb8T_tfNbQmChTbF+&C8ts}lQ=0{-T* z=4naKQZM%LGi}q=@~Du>rJ;jk$so6u5i>3Sb2Ud;SU*GMxEXX>#+7wLPu%NUW{XdH z;I<qB%YYNsgWh|iVFJs1<IGvY?^QBm!Zy`1$FmlH;qjZRS0fD>-gyk?kY#B-<K|*y zA*(DOVQig|@HV4p)N^|}=$=X(=zx>Aye}^`X4{=cvpI{2eQpJgjjv4El0)IXV~5!2 zO@VmF9pMufbt?(Eq@c^U<x)4&{UJcdiR?Caf7u1%jA$L~j$(7K@{44n&JU?FEK_x` zRE87_+-(l^JedwHmoF*>%gN<9QWFIK-Xx{(LxJ}?fqA<qr4MVz0E9rKY8I=UDBU>% zN@AJ&2)rb4B6SIGI=JfCPbdMa)e=3lUD{@HCd}A(Fqld7pcNzhBiV-#Qi40Ti+ZM0 zG*Y7|@)XZy=fLx0P~1D%`VR-Yue&UF(gKn)JPwYC;e&m)AqTc$lS_xG#dYV(s8)5q z!6#k(_Czjnd%)0UdSgUc*Eg0qURU$9-C%|yXGl`*N_OOwq^$P=g#yWFW)6hcZ)xK` zUvv}eHR(aUgmA-1)Kr@oH>Zf2D)|3PehFxxj)JH}hX^EDyjYaImu#sv!uqr5ukW?* zS1#TxmD&co4qYgTi7UiouEt67qYc>hUWg~_QVpmH6qt=woJME6S>#xAv7%S}+dw|P zrC&Tqu3K@QLHZI3Ifv!X23zqXA}<=8Nh3ES%b%RG>1<XBCU&|sa=$jbP7JEJ_F%-C zoYbliMF0zDvvE0+gDK~>1g0QcCAB7{iz<>mm{g_5yrR`lW3$XrU7~QE8sOS6AZxIc zyBLoWgH*2Q56`IZ3^9d;342!D@$eH2#L#)Z%9E2u5xZUC!=Ef6L%da0jc$tK+yrv? zC1_((qJ3G+k>h^Eoiq2sDzN%@ul{y3-?eV^9sHG|>k#=MrOz1A_jF876cP?Z#dMZE z&b{d5)S3JcGDQ5qYL6xu#ed=HtbKD@4NGwN>EV<5q;n!wWbMfUtoEE?Ids^DxsQ(+ ztyh%xP*^@<WX?Hhv1{l&RQ6xOId-w!Ti!QMb(Me#B;?$uR{JyV;}a|3ESCb~=_?hc z%OEu(nu49~iqBs2^2C${0^BDBAk0Y`D6hore2wkF_3(P_`n25=5;q_;!)gAF(uvqC zyxYv6X8{x+%yLIS_LB?!ih`kpO5l%N?U~?ppq?5P#kmjfp99(|K_(~2|H+V<|Cd#3 z$jYZg#%Pwdp->2+;9~(7KN64_fDT$4ezDlr->@&{;#*A~??$0VxJnbu63ig_>tC}& zjSmEk6jSe|R_KOz1=;s9YUIH#Er?1Jp(d7T^n+5yx~|UC>zmnWQ;u!lT*e|Q#vBn1 z&oql8W8k)Hv+W<)D%B+!)lWf+SO}}kU7YB@j1$b`EUNkuC?{I&5O^lA$D@|7IQCUU zEqhePr>k>xX8&PIoE{1koOZ054MvY~_hN*njQMBF7r4}IjUK5Q%cxe??XbtFWgmOQ zr=DlXTil~9k~gK?VpC7x@p3FdHl>6K-xzN(C1bTLe;^0X@#7@X8S(}B`l}Has%zLi z4RG6*4}F&3yyYFWkvaXF+kFwGVs1s9B4+w^`omN&f0N#^dFnU`G<Umgo6`bp0Ft-i z%<vkyB^fXh85EZjWt8=s3BKR(D(FWU+ua-;omv79T<h=CK`ed|erf&aS}r(4Kn0*Y z#?7tLECWe(<UjW^JvcD%<V6AowUK<Ed8?-NjYU1X1a>1UQ*QZ)r4OAday=d&O*$JL zs*u+vJkAsGyeZXAUyYUQ@&BwwX6WvgRcz1$)EB}E1<^xGt0s1<V%wWu(hR;)v|OWB zd~M+O?0zHDmp7M%)iwDM$1o##P^TK2Z$7T`cK0Iym)%vVPRrESv(UeD4U!hVQlhUd zaUZhCeZ7X=$^2u0qnZ=eX$tV-%TYZyC;vgeaugeYD8~_~t|hV6uLw#uy<t8xy?1|# zsXNsnOCBu$C7-P&e!O;5ptTbtWe7mq!V#}9+%+L|SSoosSY*KJFlEki{qa)cc2o!j zsv25*`|Zq!!(;^1DUc))DOk(J=m>QH<6S_}`y<EDE=^P$t6?E#*;q`r<#|;{)b@ZG zGFU|>s9n;O_9OLp?31H~fFYd6eoDZ<Mpj6>VfbAlYKte0wr{eu_a7Z&jVCs9ms(5- zrHZDWh2w*4^&F3tLsiKP2hnHCO<Kx_3`JZZ+N(c0#GG-aOcaELAX}2Ma<}8$2AqQ* zT!H!~lG0;3G|TUvukb#8DgE_Ksr?_53QIMs+*!dU2cX558=<MyWdGBrPiKU*wjY)F z^-Js4h9;|^{DpO<6S<{>_AJg+&%C#8#^Xa^682|?p*xR?cVtagy5#02=u^`PaKD!b z0HLerMU~k2#ciCP=g97V6G_ie9Z%2nZw>}8c`GS7`}7?2wD`PC+R=G%w-d%@U>}sz zRy@!8$5LO*h|8i#n~v5F4X@}I4W$^Uh7m=d%ngMcWVnf$YtH$YBDEWsdKo6n__p35 z2yLiT-=C45Txi6W!Gkt~003ioJi-lHQ7Y*tdGDNKv-Ko6LF~4La}VE#NeO>?xtU1l zHq!C_gOy_g6%uZc)}$`vz4&u`Aty58ZbJt^?sH)I#J7;39~Z4{V;$HdAUF)lCsqEM z8!NQrm|er*80Ii{-`?mx9AB0qq_|8$hZ6M~dtMYRjc$!P*9S`fflgH5TX!58lpQIU zG;s`jzCGZ9ADHMujMByF)Lb))$WI((--lO5Ma4<;z_ZtX-xnMwklUA0M3TxiAs(B& zNnNTe+=IA}5f$7I;QtPAe)a##8@aCca@}3~++M3iai|y{xUqCY8t<n}3<$d!bv+<h z-DFiNFUUhetx02@gInx0fXW(xD(rLe=Xu)aR{Wq335?4vQt<T65CGaZgGOo$QD7tz zS*WF(OLuTL&{s*H*%|55S;yhA5QOmjIl@H|@nxu(>wSK-M4QANY>+u?hoP6Dn3v=Y zf>f=dzOi^@U;gc9uIoua=7N`aOJBP%DTZ`pb1ceeVkBPIZ<o8QFDvVd+J`81r5{kI zl2;*Y#&5U<x4J<SL5)$&zdmXva*{7)THXTwJ4`G&N_7Z%TPmzhw%N#HQ=xKk>}LG2 zkDx*&B`FHN^XmlkJM3_J8mGt9ZchclBlCibU3`d0u)bQ~SxIqp(w92TFdR=?FITNz zN}<aLFG-oTC`NnH4PgFH<zTvxR9&-nJ7WV?RW1IhEMa62(e6k8;S(s2*Al1@GeM+3 z7NX*ZbF9s3q&1?S#AL6Z&T}9(G^6`^2)0R-Zm#%qxKC!;d)cpwPzJr{s${tMZ>Ee2 ziq@V^JOd6(hk=X6*2|_Risk)t1ASe(fcH}R1)o96bymc#3-sUU3XAuA^%<{}&uP07 z0>q+H2;x`O3d?OhdpL7}bGw0qLQ<A($0pU(8Y2dTgy@|1V_*Znl+dbc$dJ5>4jG5N zY^74s)9dA8Ll(El#9t%#=i<SwDL)H$8gY@=4_^#j1r#~E|6+iPPcPAhJ@&|a%m)>& zdj-#Xx!o`vC(mrj1>yi=dLLk1$u#qDN6D~KfdeA9kv3OYbCq3HB7o(rR^Z*oWB9LJ zLq%i#>pM6#r<l>ruins&dCrytQSq0`&4c6~L$%_0vSTAdH3)90FY1y>t9_+fZX^5f zeHX-U+~S1FB1S5VED$mE4x5{g+Da@j->v2LK(uq|N3;wa8;)pp6tc3VQ;Jvg=M_d; zy1GOduaG|+LQ5saX%io55Y^Aw3On;^p30vDiwI7(9ORc|w{B~H{4$farjPB>4JUsi zbo4o}1`cVAMW|&utfEQ!vL`XP!mTgAnSR;4=jj^hSzyH7`ZkBmA^s-+1WBB~%tS1| z8ec)+hW>38zM4T#e4sTCg?ymehKwvLi}*i$Jf^fgH=9OjLaJr@-BbmcBFa2}E;sLb zT{yIBD?hbwo*vL#+;h3m+$p@93++?NpJU48t6Gl_RN&sg)yIJDEQvU8%z_U$llL98 zuaZ)B#?dcQ360#7Y%ZhV)aH;(e(a^a&v})3L?b-MR8~e_d9VX)TP7vo9Mdvt<)X|X ztMK0Mk;21=9*B+I)Qzs>V%iAQ*)vqi#$K>5w8Ebrflb$A9qz4W6dqG6JZeSZ8HjmC zz@rzlHUYBqIvt=j5+Yrzd(md3aOlZB<BQjxo;JlFdhQJzbCv2CEJ-xGM_pf1`;~u9 zNw_J$%RNt#c;2P6)b<|ZB?TDpbDh{4oVrE$TE8)pP5+c$QiiLD;AlwPv!*J>k^e1c zB@h7s0N40h5y;h+>yRH>a_DV_>{)1AU81|W>9O@9iUMcuj9qk}L5vl-J;btm+J%(a zQ{nD!dm+_c2QKc%>FW~Ab5l5@)V6gk=GD~ZSVNq)mu5xT6Ii>^u|YVvQs6qIHQFFE zAhc-Ief%V@jpSxY3vPB8?$inRpHE>o_+03S`lAkU@XVN`Os={z7aNncL#X*oJ+Xwd z|Gi-EhsBur&V@K5$AQ_9w2Ye?c7#7y=CkTyS~%`o3Jwv<+x=dxFJ%biu5R<0iN(GU zF4G+}-FD2sM-(0*EJ=Cz@9V0*8<FDDy|gog>Y`(9lm;{7Z$9oi7%$Q8blV1jvOn&* zCF=%@m?}vmS5(6w!EBwufxnq92uicMYG_N&OG_UB7mbka_@EEJi1m67{KohAEZ!RW z7><LEe|2$5vWOx593T6U-X(F23>gHQ>P@nUh{$YDQi-T+`v>l8N|g{m%EazYeAM@( z$)A{1j-lgR3=9+A<mxE<PI$K4H4}?^g7dVlx^tYsDIQE&`(}T9-8{u}d?1o;aedv8 zJ^FK?dmA{N7_Qa9TxtU)A=v&KCcMQ7N(Hd?a%oG*f|oQ^9e7a{nrzx721uX@5Y(k+ zMq)-%qepORGHMlp+~HO|OUl|FUH9B1By(K|hTvqq*q6A6(P8CoF8a7cC&XQQtth39 zhTlwof{cv76<$2gc)!_)Nrf2yWPZ0Tm)7$wptn$K$=y7~DNw>Ue{2laVL)DVeYC1< z-c(sk!q6N(X}jD{=Y&iD?99Ohz56RE2xLDe9GrO?(Q11dY4MQ`e}Gp6>y6?!W{#w5 zOPQ5T98~Ht&ihg9fp0$)U;ujF+$sqc7i&1hd{nj$a%iF(ha+<Ws+y`KnsrqduJe~O z;D@Pw4fXdXgJ{$!2@?xnzneYk)!n%|EhLzzou~>C-<{d2^d>Rj1(iL@6sdYDC(}l* z?t$dyn6awA^W3z>fY`^4H$3fkI>uo`IkaiL_KSviS2)Y#cMJu9Ra*}Y!%OoZ;G*t5 zb0-Zqsy0*RdCL|NZ=D^6wucIUfPQ~<r#FF+kw#3@Vr9S2HNB&y)go@LjWPyUo_;%( z(KgIDikluRH0G2U4-Bg8NnzT)$Y7o=f^TA@1k`yq5Qmlck=yXxWX~=uXW@0j&by== z<*@#k;@L08?e$GR4AzPET?aPr*Hu@*6drO&eDGx2`FP<nS<7@$gT&oBDYn>_#py)F zMPYv=Lxhe;x|}Li^H=y@fypDGpSftx57QgjfT#(?@l`hx#q-D}fvm&N{Z0+L8D_`j zSk6pMY_PB%tw(oHhBIu6Vy{c~{F^gs%K;Ujk~@VRXn$<>FD2*v!S~i~eLzz;yhDZO z{LV<1d7`vtmBxRA-x3Ah`Fax}firZl-zZe{ewj)Ec!>}YRSaC6{9|8twxC>yvLYI_ zxW|iBZ6kS-#h~RL49hf65<pg6HE4HjZ4Xxbop(yL-0vQ>`Y@GI&kYg)(CrK_%Ilrv zS3Tg4?pFa458y03{zPXQ<thR$JAFf1LbslFH-fWY+mv=<oUe5Pn|!$Rs<BO7kpi8( zT;65DuNoCyp|pO#_cF<3;tqdH^G+jd<2TcuANrSrHjXdWlzLZWJ}~U+R~9G30N+Z2 zo_og$cy1`tpV1#gF}2+sc@?vncg_5hC2)5(_r-c!0x3GOa$w2_3(3a<W2J*id><V5 z-KzX}{B#F18^Srbm>N$qO|{8*Al-OD1k15nNW)}6sgV$&6Pcy|6?dq$&yh0-9?K#u zq}F^Yi@}T1M`)_sM8+hGr^Z|KbJ!pN%GZdX@MP__>HRV3>S_(#od%{MfkU+I@VNEB z<t4Htds>Ub9~Yf&C{5$=u7)n-&<?%x=lHUem^MGoz_LD&UbHCqgQ&$qDm^;ALZVM! zxK)|A=ROOiyM$x0<sQRVHMwAWN{j2`Mz<a{Rw~y+D8{Bo+Lzk%k@{xQcu5p@BUo<f zi!j4gpxk_Y$$f7FlJj;kr`ZiMOkVr2FJ_Mp(W5NVX;-T2w+N%LzDs2ym@Y%~%oh<C zzJFg0u`(64aPui0?aAc6U5_MW2d_L>De7OsMv;i;s7gCnui}>H!~kbq5y<x$9>%5p z_v$ofNaa@XyZ))&<SBoab%V%m*S4>2^D5qvkwHYNI%#OQs-5s<_f|pHeyoxlB+?T} z!jRU2mX{nCU%aEqKMKfD%?Q9x%q>n77f4ej4Y5$u0@Y@Hgo}?)ONUjXWORRI978U} zuyIhE_7}5t8SoK;9ABB<t-wY_TQ~;2?NaFiJ8%S$EPlCHUL?VM6m1s%o@tdd607q) zw;JG)`{=TFBYk2qUk#3!vl97<MNWY5W&S|?9{N(jvBWzNE>Y~uOaZsKoIiIHCI2(A z=k<6KUP88m5ZqKQZ(&b3sJl34jN#Ke8XHZ$KewlcQ;o@yg9W3IBA}akoN=y5PxD0D zKtG*tK8PqzWy@#kj&I{v{S~WEvhfsf)pZF7*%yOqFng*8R{N0hmJy2<Jb|$(#q}~0 zo4X{Yp^rf(g^x{cbB?d(>~jykmuGh!JRX`hzW%l>uEcvlO~Wgy4*4x4B1A+O;b85y z^2f-T7(Q@HKGvt^Bt4Q6rU5Ly;l?fN2j*7xKM%6urIAUSm}P0*OMxnBE^aL{H=nK^ z-EM8!q$aT4RjjXPqdY#aEJA5P+l=y`+(Qgq2Mr74%5E5za`mll9~pFu(AppVL~|#v zE{4W4dPVP&aI&Vv=)bX@$YCzn1XHA7C7<Z>PE6)0LJ4se5D-9jbLpLJxd;hhW+>So zR4EbMx$7AS_)nw?JhehFn5*+J*)%g|?eXrSwAhHe&UL_6TnN{zvnR6p?EXs9uR`+5 zb`4riVSg@Yx6jkv@Am>fUB9<2cVz)cMPHbem@l1l-0a!K-rjloIL^9T#qQA)b><Js z9kmDzN8NT1ePz5?cw_}lQ2RC-THKA<W@j<Xrrza#+XPqPJDf>-Z^^p*K3yk6TK8U- zqN$dypTt*jh`AWZXidHkS*3j`i5>%RH@r(+QyWX%%G=MA*6>uRKnMDiI7Mb^(NNEL zUVl=sRBOZbvp^p?x~o}P;-PsuA*4z1gTJt6H(~e_qeuJ{RIDCSWk#0J8Y$%Z^{G3R zZi$g9iI#hMFq;O@u7fcMVAl$`KBJYC0$)IOd@Gnw0a4e0E?A1@ZdZ%`$lly+J=7aU zCvbOAWP-|6+VwyYHnEO&Y&jna`5W^~Ighsc=WJfQf95p}UA^l&|2Z&R$=&>^F>QX` z>2(p`MD<5O)Mp*f>_u{JZ)zIV)bB*=FD+MNSKXpAvf;=9g&)|L^_tx+b#G<hTp*+2 zNqtTMQRMN0c6t#eL&5nV%aCnN3z0$4rMw=qf1_~brHAv;^0fTTl*+qK#d~|fU?Y@4 zh%saGb{nVqsl36t6u4)v=X05Na2(rL49}?MW=j&>LVz-P)EskP0Mj?Rk9k>s7(vez z-3sSM!G%L(%Bx9tQwy1Z3`Kt~3B04w-4z+5a(Z?vkh^`fUeggqXncX?I%6@P3yDH{ zTwO`9RjyPbO*==V$`m$?hQCEdKejLqEg<sfk@iAxsEbYpQrT4C@1RkLGSre3y6YDO z;8VEnY3A@H9F7JF5kq5E<T#l2%#sUuNoO0H$oSj#aXHVszar=c<985sP98-;)C(W& zQH|yK=-r0&v%4=*P*WF8mMDXe<&9DGOUpAZwZ&7)4W3)p3P=WGI5R13Dr-VMC{p^& zj44aZ%;*u>-Xm-5E;x>c>V#$(Aa>b2@S=$l<K<8DP&SA}Pb0x`%>R(9BZp5FSmhZM zokC0^Wzd)`A9hgj*k)P9{HojAwW@4n*Kny>Cvd(&|GY0{6F+uXU~>v->tY#IPW@%c z0~P;E^%!t%-4I{#lB#PN0BO|HsBtZUDHI5?kxeY%)a<?-z~CchF&PZD;x9iuEh6Y` zR#(823f){UjO16*!<)Q$y7>j@g{;ru@0=mAi*HlrXRpu}yam!5xMtX4Kf5@!J@d;w z$3+gN3M8{4b`Z@UnA!J$v5;-bPtRE2otT(xd}Kr=g0!u$<hAoYo`O~opjIwx)mb}i z?fEGvO}mQQ?c~*x2$CYiIKH1&i7k8Diyt0%u6)k^a_q%7JX@fDuQY^|k+x5YQtd3Z zrBgQW8j@XJ7*V+cNahaT0g-@fUwnj+^-V2ITOb98UAp-t5=>7J_d0IID(2i<9BlE_ z(z><Fh)>Vyu5x_59gUb>pcq+O;rX5Y4mfhlZWt07iypY*$aXq9I;n%V+QYjnjE3-7 zyBgjB-4W%gf;c#Rz^rj&0+WN8&kMaG{~WQien8>>sZpHQsDD`t8k?<9psD&RC}sEn z+OQC*yWI;GPfv7l>+FtCjO{}0$lFDcTr20USPvIzL$nicuK4tEvgVH0+Vj5s0+=HM zQC~T`HkZ(!)zyF9emCQtu#4c?pW6$!MBX#>qeY-qb~0vwgfVE#{>{{^pTh?)g*oy= zxH>NFn=k;ILQTT%J2$m8iq6n6V0={oRd7)2H@86I$6A4#7mAt|%h}y&o2afLZk0<h z6`PzCdq7z*SdC!17B&q^mEhUnW(njP(XLO#3>{do*Nhi`*44N0-H~22<lLhwZ{(m4 z9mBRvvR~meKI0bK&qJ0KNaT!$4;^`woM?eg-|#4=?_nPW3}Jj2-z8i$K?I2Moe~y0 zS%Q08hvtyasoK)Iza~mN4t($lZjjIsVkpbxEo6DSdm;cks@g01q3zv@B0q3l?Kr0A z%jY@p&f7P~nFgfmMmBuZGDMDdeTj{h(Vo3C2=Bz(3hmclBJB}SYZpR0A}V2~4aXAk zapiB=@*|~3V42ue@{da$)y9LTBKJptlMC^lV=fmM+wryBo}&01RPLH;Wr<I)oeHIM z@XJ4VVAz|>!wYVy?$ACs#8SEj->&2CP9{jZ7)5IxqOpnoIU8GFxfp;>GM%BYP9snh zGaiAg<~Gwy+=cu;_4j9R4@%x&xj1AYRdB8445>7H4vg^h(he411J^7fFrv@ZuL1rz z%3B`BW*+8WfJ7r-exEXk;MqqZq%}mE(5krNcR*0{GEudpF2h+7K~NZ3peY!F6-J@K z=TVF3vGN`>l#zs&4-_=o5%d9(*P36;*&3soLunBC8(AA8_>(HZrlnfqAD7*$5WU5l zU1GUxuoT#EEM}oG+^W;%y7p&mi$RVCT}@A#bXWY1*1;TT%_dz?9|kB6W~(W~ZXue= zjyQPYb8OLkd*8?azAJ5@rmUw1I1(TkBYGzDQ`Kw$pOUVzZGjI&%L>UH77J}qiBfJQ zy$6Tg2Zg>_!XuD!<<PEZy(JU89l4Rhq7>X};NOsA?Ooz*p{{7NXL;2Dac9gQd(_f< zraUa-BDSXdB$ubNvn=3du+vK*C!TN{LiSZ{w?o{B$@dp76&6XJ*=iU@7G*rT!9Iov z#r(AM-9?uL%Pvj2bs2eivC?9{HgiNhOs9a)@F~nAS{oSD8zJi6#9}q=6wn)kxL4}< zw@HgL(WxSjf1e}4L+(#lf8D@8Eb)*$`o}qeloO7Rcal;Coqh7kwvS`EW3RLf340s( zLbU8NBqnc9Rj!pS0+@UJ$S^IC17~@~Q*J=98qK|Fm5|feHlT+2q!&}|H1z>oEgvke z%ST}EQ*E6zsnrhV`({+?Tb}qmdOsH%4V|NpL|{als@B!S#67&k0xwslt&&DAp0WII z8hD^?Hy8;}*DeW9y)Vq|y)^dIuA3Nqo)crC0RVF4%ReJQj!-#6LCEiZVAnG861>AT zQ(Q^|%-~Jb8#a^gR=iQS`|L?M$DOHjU!xLn!Kz<t*ObXJs^svJB1!-ta<WL;FgaN@ z4QtqnnPWt1c#pj7GibS%a<FIc7m5GxEx77;M175LBXH}p;xAEXi3jkB3Z}|BKC2RO z%{RrZdHd)!###6Hx%@WTF@AQc<+-w8dS47)5~@<py$5tIXUSRbjudwBqqs{5#Fi^1 zm-vk+oM~dQ^+6sTXlqND=fIvAB+-|sqMh+TX=eS8;ljKsGjozYU^D+e^3iwmLj51< z;$Q#$z-;LEDywsyU90&ZC&JB0Vp2myNQ9rEs1KCu%i#OvLE3hr%gkAh4AD<`7__w+ zG7%YGm!w*o)<VLmQNEqZPXGAL<af+}t+I76g~hx`(nZ``wx#CZNV+zP>6^V#r@a@A zj{xy`Ot$q^8e;dfsao)3^#g3PkNP)@RR^7j&NF9VojG$H!}h{e?~vM(?Bn!}_U1kH zgc=dDe1`Ea7(hPI)g`d^u=gk{(iaQ;IEmqac$Fzf79WeQ<@^0|@t{m$`~EL|7lP=@ zJ-0;df%kgWM27V{Q&6{5Gi9(P=!)oFR>ODp%ju+>4CmPzuE<`Q_-0SAob7(MYK&+U z{_JC>225KdImX9tBiyzmV^)S?iP#%Fye!?4#?KpiyNEavZ@t^YHc7b{o-w0%h?ISd zu&o1&#kWP;!pou*!-S4WCTi5FRjuy=21ezVZvZ5~FrQ#P-&-m6H{16@eZQo#<!4OR z{b+v&lCN6u(jH6+(dzU}j4TA19{2zSy-QYoW=ZL9QPg8}xr0|Xc0%uxUt`i5B76IK zj6bj&=XRYVRxRSUy|RX6CA&Q>cZV_n>dan-`z6p_r@oR|$agyzWM`?|l3QhPms9NS z#5r}!#!fPKCVaQMPuX}#3wL+MThDxVWd8uhSXyJT>^6GJ^duuNlCv|kv4)RKmuw0< z6Xl<40qs6s+3e?6&M&W1R}7H$QQ2yLOLi;jAo3>i(D^?ECiRzxs4mS#lsk`6Xz~*Q ze?*HjW>q>%VQjF%wlG<wV8cHxOVo{=JlXd)FzzTeL%VR$HfXmKR@7t{P1FmdHLLd9 zLN{gATXB{~%8+u+gkV_Vuk5bdY{oTe)w@>ioF(hTgwlUVzP1lw9+3XU{ZBogmG?Le z(+7ilyA@^W$T-h}v3S2B8|9yZ4DlHF7ugoW<e!Hg@lRv{DFawSCMGdZl5K!(qhfB` z7~8r5wPglf3>bg2{@5Keo)u2tt9OBKa9H-;yIXQL!kzqY%^97Dn<Qy2yl!5>l1h`a zEpE6vw4Hq6TP#N%4l!(q!>sPydx0TpU9?*;d3VO~mRVxiPB!a}ihC^nGQQbf;8SZe zs0;9{TNe)|<QU!<0UIi8>@QHZfHY$cqi)w0dS}?!tQb3WYLoe4IL0p2ZS%4Z$X!_X zZSR>PF7;{Eu6t>mGH-XLQ0+{ylbqWU8$YialVTK}!@1h(T@YZyEJi#(IZ5%ALdcfM z2K$nUbh|*EhlI$(52uj_V%O}h8t^_E%9!7<AGQmkQp|^E2p?kbKU9BL_qTdk4`n|8 z0Q-7P`rGm_&dcUmdR-Nd4Isk9!9YBL5AqMe!x#J|4}`yxt(Rs_9xEgf>z3<v@q-Oy zrK-TL-_H|1?YNR(Evzei0Ei5SVDj9vgLpSy7dZa_x!0B@ft%U8eMa)QT0A$F*s%L+ zoJ%9YZl$)IWU-c?t*b`eh$pMxZ6R1cwo5qs7G#ChhxdmME#qu0Eu6L6ySdDRWU;&B z4QV?BlJ<DBU=Ff>+tx`AgL&9LMY@qX$PS~Pp(Wf1uhRsmWXDn><mCp;HHHvKI|cf( z?grYmSY9>*AxBv@?P|@gT98knH`Hb=64MA7z2V_CWcUU^BKCI19G*LcZIkmQ2Uff& z8@4w3wb23ZGVJQwaNZmL03eX#;nem)Zf)Uv9YTw3SY@`uPVYR0muoGKG|L6OAz8K` zV11DLe(TAxjoAMHZ;r|PFL9gpe)0XS(hB*RC$Uehl4-y33{o%hgT@7!0Xqo(FeLM$ z>F}47&Itw?36W`)F+DQvyFD$vSPYzck6_6?v(pF~SBt_V{<5FE83s*<?a;t1-IrEa zN?&BJwl~|<-8c|SwfmMIXNZjNX)IHw+~BS>No`|nlIF@rZFtsQ<4$((2jneFz782; z`x-Fq>>K-JYa?VbHqJEXpyBEA>2G$w%Qy$umrk_WVX%ZSCD`2SXzp(jW%}3h+8Gh~ zjp;p{X<6@Vy$>SJx7+MlBSfC&SeS`;UM5TNOXYCA_a~(83G&B)$PB7?WL>Kx*248G z$$oDhPsdUpNKRrCLg;rdcFN4wR0RB<`AKW?*4!*1VU@Fh<<kP`K5Rxr*23&W2OUU2 zvutK31@3jR2o?;!MUm}@ETx<rtUqL=2)|<ejTSE2YDaq3+sV}TvL58O)TfHu@Ju76 ze**T6lkTGWV^g%50EG=ag7{wo%fpC1g3@5ilC=)-vemn0-Ilj)rTMbS%7*!WiOlP{ zw%+1?L-c|QxfJlcDL%xP1265wh}miTF&SWeY<*$!$!hB$;Y^R&iJr?nfPK0qDRAk2 z#;V;;$$s$5rHOTFN=sXKD>aBtTWzw7?;7xX21qzIoM3QSR{_SS%cv8a1iIQ-*=@Y- zmv)xh0O~>B*clP+wd_chY7cI~4x%nCqpP`U2FcyK{uv*$yHgw&oRILnTE5Jyc2C`! zm@wIwZLo+2mwnmzdY-K&><>?tT!V7O+>SikqYD;vKBp{7zS>RO^RxPek<iJqCEhY# zbu8Ir{bi(WxJ&~jT}c)?j{8a7sUs(H<h(K3**46Rx#~{jK!#Q@llgCUD`4*MNqWpZ ztp3^VPnul67W)-r;CON465WZfWP9A`Q|0mu&hdU&+0<*{1AH6!S@CVWJTT4Gxo+?> z-^*6K0>6h5OKP$n6NdpZ86=;}HbTJpZ}MBLFN}qJiSHnHt6vTszZtKLgR%BU?bGbN zSsM$*`?a$5720Fg?+)Ly8{cP3yX$)PJ@$I?Pk1Oyxm`1*sb^B|Sm4%Mw<R`Y#bvT_ zykQ>42_s}m!6|}pjkXQpvacGp*&H3`Zn)cd-@;eBtI{#lkJdBLpWf}^S$abHnP|WO zZ;)=B-EQk6x{y9Y_K@lvEin(N7&cDrsn`Sp%hqGu?(;B{2{?K%j{AY#iPuK>3u%rh zR>KVLFzv|Q9>ThqEL~dN$;XyiWtVX*ilzZ;GB_DPZ4uvM^|cF9?Al~D%O&o1{{YK2 zeT<O3A#GSjLxE&HOLtk;&X(M`-C0+jw5V)If$o(MS-v692zSI8k3dASc?oz}Z;}a` zPHinA<lA{SW?NenaROzB6x4q=%wiN`Zkbzc;gUfFYuEwC54XdE;uqzjz!DR<Ls_{b z`*&fm{gbD5wrg=^E&j`X+dlD5UFEZumYiW{QK~81%FS)wHdfi_yQB_63vC(9=PWqR zAMOVIoO|Gyd(IMdy1In3`o}58CE<AX#_#@&_(=03l;8(r0O&_!C8u7n;n2s^E9aaC zMh)89?kCD*HkQ3ec7&V~e;XJ1V)n`ahOssn`(UyRLUW{#*SjOJU|zAjfhAfOW&J?; z9IX3TJKgZ62dO@nNjQ7|0Gxu($8zg|4xERafJ$36vP%q{pLl(~TibV>Y`tx+MlSMf zSiAD;k~Pw9w1b@ybF6*{e<OTAp8$e<;2)jQV3gY5C7f7s-^pevgNEe)0LGhe$WM^J zEyNUXOhhvnkhE>ta(EnhJ}+!$FrER<UT_`QeiHuxIA{Eo^N2Uoe4K^7xbWg#sYFy0 z=NLHVQAx(=^82>AX<-O;eUlkmdzjhru=gX8+Fve=yPs0~K25y+zTI8h!sD|ov2?Q8 zZ7i}eeYVo-d*fDfk!_r9w%cfVWOlT5dPJ?wly!V3GSS0`5D-qD=faaF&MCfa^GgB3 zUifx?o=@WicGx1ALz$P|EIlJF2p3x?q;F#r`n*v!*69ytH9P+RW4q~KEg9P(^{lhs zSEWWeI=m#A*(P(cW!F9P_I=4xcwOuX?bFG0L69?y=cB{6$?Jq-Vi%T@{JU5Y?7Fhl zi`fME8J!^g2>1&(!qM=vd6e76@MWdEJK8p^Q!%LEY_?@>eoFj}F$u0DD69*st`#jr z=#N<6lfPwccs4Y)*a^-L_)9M><8oF~#Q8rldI2|Fow*OA7soxSqT(*p8+z^5?@oIo zVE1fex4YTsZ418J31?{Cy|XV@Qeei~`36x3W#y(}Gfo#RZSHq};g)Bq{k^gzH+EQ@ zZ!TM9oMoT!yluSob;kbya#7q1aJFTZN6_-|=@s}SI^O(Ul>9FmM|4sh3?thv%*Zp& z<nlRtnjP35!Wq#3b#1)z8QiJ^q_j(tfm!;2@#@v4$la1oJqAAeLmwrbT3)3OkdG8$ z>|ymCJ4Wr0MUn;FK9Z+SbN&e-mr{M;$D9Uab`sBG%QzD<!hM!;Zj$#qJHa8}Hp_qS zq6{087NtVk>_7F@yezHbHtxjj3LHh)y|+l*1&aqAPI0V1vW&vEq|O`Uu?kO<F^1XW zF3>*RCLRX3#(K0YHt!pg`yRk>^&>3!6TTAJhZFJ0VkI77K4*6}GP1c2^)&MXZ4uGr zt>O083ml64wh=DuvJ4F_hH*AhaJKm1y|T^>jC0w`I5^3rt}+9|GIN~aykx0w{B6|r z$o`P7u>sUhUy2Z2tcDe}=mdf9{{XVsThVx;Sk$#Jkj~OU>c$V8U+<hb0w%iFz?+fw z7l${U3wNg5*2DIP(#m7u9*l}RNFMvT`j>vgpk$t*FOEoec;|14$Sa1+PqqT)Kq5}a zb#(i0{G4=Ugfm<cTqj|XoI7!?lN%ZJ-w8cVanZM{=D;$JG6*K`CINq!Sw*XCHs!85 zTikoVF-n#n<SqgJLHPuHg8>DB9BjN7cwDz)ag}NpI~cQ>HijL8HW0G^0ELy9!3h?~ zrnLarNs{9#VC)h@>_e{utEnmP7V?m65@ZVe7ss5GI+&(-nhfw@?~KVAvek+Nc>C*i zED`}dr+~7sPkaX($#lH`0Kk(EUNYW9Lb7A7cFsn^%fJ5s!K-2SVGo2iY1RdSps-zG z7-gdjey|4%OuzYO^6S7w@Vz2ZNB6iruVZC9wL8-P04aFp-iE<CU~iV5xdD;ey$L&( zogS=vJ81Qjtl8Z%UKs)DyE|^@cUilVrq9kyXBkE|@PgWEL~g&}G7j$c4keh$*}23B zj4^qR_&hdju>G)GBQDLej{8bYyS0_QLt{f{3&r<_F4o4=35CKOe=wshjKP*5z+?*o z($eZk@H9)nZX(FFZZ(H<)J3w&@ZGSSjD}={AX_O|?o-1%0_r0%1Wcz}8(9g(H+!GD zAMOlDnJ7+d8)pS9$5I?vCNVS7SuJvKx}F}mG=U{@{bZMR+3>rL-Vc${9F8-Cho$Cw zwl%OW*Nl@m+asy(jkk^e0FC1;w~YS)ht3jC<oP#!WXXU%%fqR<cPoYN^Zx*lJ>p~y zfC--%7~b2<10FAlT`w8-LuGAteBk@cwtT(u)078<`~Lt$@cCX##}ki>$0y16hliWv z9#1Xu^~9UmdERH<4g?ONz#9Sr1bKMAN1U-g@Xx0QiNo^w<I%(G$b7$Vm!>bS2mE@E zZ=4(D@@Df9Jf80p95>bFu)iT>@UnPBy-bHtACV$Bga#k)6F1HeCV2L6dS-b?2g&mI z$0z(3i2neD{{a2h|HJ?s5di@J0R;g70000000000009vI5Fjv6U_k%c00;pB0RaL4 z_+-HJN7U&9%^y>WcF8hL0%Vd&B$7$Ze$yU|=?!l4re28q({&BvyGQPw5w&;+mfE)T zFUIsnmq(J{jpe&tF8AYlA#}H)c~f!eABo`)l{_=T>>P4na33?&81(Z4R}R)mB$9S1 zgNBL7pE^k-l1=k_quB~*o(1gDG!aZbW#hcpOLrKZnrd{^%We3~dlA+GVT(QxPN2uM zPz@#z!&jMnYV5d)$#0<z0~bripDXp=#1j_=2>lmC-01kA+Th~-&Rv7zXlrr9p-qR3 z9T0KpWbsReiHFB_-64aq%W|)b9S%A>Bs9BU4>Cz6#NZq<<GSm3uM68rB%IfbcU$0O zl1cDeYWz^it>c`}X>GRE`k}47mrJ#J^JTpeqpS~r((ZN|J_&v)H4L0XqJ~|EoDG4G zD}l1$d6VQ91CjE>@)&9>z4EhcoTHN*4MWU_&?lCY?q4f91Bl1PPPOq6Izi!lJnLOt zo)9{Nh47);J`Qz9j5(c8O*+$w@6P4#&E`Fe-y9EAJKpp?x$Vx_@F%!B5C6mfArSxp z0|NyC0RR9100000000pIAz&atZ~zc6P=Ju2|Jncu0RjO7KLE2HMM=S%o)HcgLgDsw z@7qm7_K(0P22^vCB*;{D9@iN4rwxpcO5Q>^Ov_HgFB#FzhSdB<T`ifQWVEF|oUh`g z`Vara02~nk00RL50RaI3000000000101y!%FhEdX|Jncu0RsU60sy_>HU`n)d?~_k zMDov9?k0HWT1E$X9!8&!UY|GBe<ZA|>u92ED=bS7P2u<m_;1;qC&F{9!!wPA5SfHe zJmY=`*j_dUOy_rWGAA444;hvVjVx{83L_Q_-wmQ;_@vC69zqv{CarIYA047IHnNV` zF9YgKK4Ls?mhr2*y70eXvoi85BEgAdBF%X}j!y@jkAn6yW=G8Uv$AjHr>^T5T5wwt zp|Q_R`SXYHm9(2#=Z6GdSe-LN&3<rw1Lu8ntgxoRD|KR8!u0$s&%Zlhz=04N&NCEg zDHAVNldQs@rz<!-ACEXaP)7@1TG&z(SWr{Kax1JFNXD{bd6k_JW_^#sr3htWY|Gi4 zE-om-5rPO);zF`6?dMrDH+S9O`!Wq8V+OO96q&J`6;xt{YRs~p2u-cs*}J<Rti1U` z)kG2v2vBTVCe7>!F%c3GIAL2``9qfZzDrq_iQZPI#Mm?o28Bdc_4zil>q_5{ZCV-y zprK~jHjyCAQZx{WGZMFkKE!&@GvM9>&3IoDGkADg2rEKBO5WcUC_OjjPc`z&3Mo^C zN(P(Uw4lZlcLTQGUzqY2$9(t59u?)R-WuGPhamz4Rg6TkXAAVb<Rjs~I(e3}D5AG_ zX_;fV6G3VCbJ?xrjNb$3UPdlZR<*n@4XTy9Nkl27e;ND{py4=eyv|va3@cNGj31{g ziQ5JJ5Us6`B*@2ri%4<4+u^fsD{FlL`%|o#_l<7u)>A~-bCgE&oMR4{7r&-bb-CFd zNsPv7!u1+pzPrDfoo|aaY+nbR&h?l^^M)<w;hs6|jRRWR`X?j|^n5Ui!uAnQ)E@KW z-f(?V!hlCq;Nw4zIX(tt%U6PABVl{|6XG?W646-~g0k}{{v71vejMSMWWbu)Hny|( z*T_2GLMa|daFOBR{z#+ZY>l&6^_*wxr%%D2<Yq>KGZ-CjN9&V*BC(+NCPStZd{2Df zneuFYXRu;y(wlw)*v1r54~Xz13g48E&{1S#GO~%k0Pxad(H?T!-`L2|v_kah_>LG- z!k!*8)Qy*!`5??=Hf7~(-;n7$I@s3uW@IKu^2&N+dmDaIFrbg7hInOb-an2uq{<^1 zwEYYjv_OqK7EuZ##sZFK49kBT4)WQbYO{7Vfx;1+dB*3Cej~$W1S@the+lq;-uKHs z$HOZN*xr6Q4$FJabG8+~0UtcKmSkq0WNi5Jvxkh2xmkPoDP&<cBKd`9)D1NJS;*e| zk?%aTt)>*eoq@*3#GCbRg4TI3jXdY#7M3lOBl~%uq;y;QCxOEV^uy3TqlSth57|rE zykQ>Bhw3<JqxMRC*m!IYyrwi;7{izJN@EInBMyr=IRC@|9}xfn1Oov90RaF200000 z000pIAR$l?FhBrcL2&=t00;pC0Ruk()M$^#hYSXugYt)9wp$bE)IK6IiIAC{CnHeO zH=hiR288d8F=`$yg<#xlV(jlVCDE9+J`X*o=8K1h!(AI=uy{0l406XXalm<avyG9; zdWGz4ijm^N)5>fkv|wr&4LbwQPMOHmdn2&8a14f?!+ckQ7#Lg{Y@;8a94aFbsyjo= zPlwl^4}y!?+$<vK;xal1bog;aDe>eT2C67dh<UDuO~J{@Xs{Nc<;O_UGCY2C@SP{& z4PbC!qn^Q-=pVw1&)OC**Bxi<ix=n<jIlnzaG#S;9}ky~!;_K3xfv`+4;BiDqf90A z+>akF4>@A|nmlA&N2bAYm{+H8VdqxOYT)4EZ4KdSyxpy+%H-i_5v#2DJv^6*NQ^Bw z86Hfg^)_LGq-5z`6QXe(Gre+Lm|rad>PDY0hQws$D^;S2XeF`IyXTB|CRXh<P8R~W jYFo4A$#|$g3p{7*mr(3ahAZW0+HjsUacvssGt>Xsa8v+i literal 0 HcmV?d00001 -- GitLab From 098e37b3e2c35cbbe5b7474f9eaf13eb48d45c70 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 4 Feb 2020 19:43:53 -0300 Subject: [PATCH 06/29] trablhando no layout das abas da pagina de usuario --- src/Components/TabPanelColecoes.js | 111 +++++++-------------- src/Components/TabPanelFavoritos.js | 129 +++++++++++-------------- src/Components/TabPanelMeusRecursos.js | 32 ++++-- src/Components/TabPanelRede.js | 111 +++++++-------------- 4 files changed, 153 insertions(+), 230 deletions(-) diff --git a/src/Components/TabPanelColecoes.js b/src/Components/TabPanelColecoes.js index 2dd1c80f..85d97654 100644 --- a/src/Components/TabPanelColecoes.js +++ b/src/Components/TabPanelColecoes.js @@ -3,83 +3,42 @@ import styled from 'styled-components' import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; +import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' -export default function TabPanelAtividades (props) { +export default function TabPanelColecoes (props) { return ( - <ContainerDivStyled> - <Paper elevation={3}> - <div> - <DivTitulo> - <InnerDivTitulo> - <TituloContent> - <p style={{margin:"0 0 10px", marginBottom : "40px"}}>Coleções</p> - </TituloContent> - </InnerDivTitulo> - </DivTitulo> - {/*some sort of map with a list of notifications idk what though*/} - <div> - <LoadMoreButton><span>CARREGAR MAIS 4</span></LoadMoreButton> - <LoadMoreButton><span>CARREGAR MAIS 20</span></LoadMoreButton> - </div> - </div> - </Paper> - </ContainerDivStyled> + <React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Minhas Coleções <b style={{fontWeight:"700", fontSize:"20px"}}>(2)</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> //REMOVER ISSO + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 2 de 2</p> + </BtnAlinhaRecPvt> + </div> + </Paper> + </ContainerDivStyled> + + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Coleções que eu sigo <b style={{fontWeight:"700", fontSize:"20px"}}>(4)</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> //REMOVER ISSO + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 4</p> + </BtnAlinhaRecPvt> + </div> + </Paper> + </ContainerDivStyled> + </React.Fragment> ) } - -const LoadMoreButton = styled(Button)` - outline : none !important; - display : inline-block !important; - cusor : pointer !important; - min-height : 36px !important; - min-widht : 88px !important; - line-height: 36px !important; - vertical-align: middle !important; - border : 0 !important; - padding : 0 px !important; - margin : 6px 8px !important; - text-decoration : none !important; - font-weight : 500 !important; - overflow : hidden !important; - text-transform : uppercase !important; - font-size : 14px !important; -` - -const TituloContent = styled.div` - display : block; - z-index : 1; - position : relative; - font-family: Roboto, sans-serif; - font-weight : ligther; -` - -const InnerDivTitulo = styled.div` - margin-top : 24px; - padding-top : 16px; - padding-left : 16px; - padding-right : 16px; - font-size: 30px; - font-weight: lighter; - color: #6e6e6e; - text-align: center; -` - - -const DivTitulo = styled.div` - display : flex; - justify-content : center; - font-size: 14px; - font-weight: 500; - letter-spacing: .01em; - line-height: 1.2em; - margin : 0; - border-bottom: 1px solid #eee; -` - -const ContainerDivStyled = styled.div` - max-width : 1140px; - margin-left : auto; - margin-right : auto; - margin-left : 20em; - background-color: #fff; -` diff --git a/src/Components/TabPanelFavoritos.js b/src/Components/TabPanelFavoritos.js index 287b765d..1615309d 100644 --- a/src/Components/TabPanelFavoritos.js +++ b/src/Components/TabPanelFavoritos.js @@ -3,83 +3,70 @@ import styled from 'styled-components' import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; +import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' -export default function TabPanelAtividades (props) { +export default function TabPanelFavoritos (props) { return ( - <ContainerDivStyled> - <Paper elevation={3}> - <div> - <DivTitulo> - <InnerDivTitulo> - <TituloContent> - <p style={{margin:"0 0 10px", marginBottom : "40px"}}>Favoritos</p> - </TituloContent> - </InnerDivTitulo> - </DivTitulo> - {/*some sort of map with a list of notifications idk what though*/} - <div> - <LoadMoreButton><span>CARREGAR MAIS 4</span></LoadMoreButton> - <LoadMoreButton><span>CARREGAR MAIS 20</span></LoadMoreButton> - </div> - </div> - </Paper> - </ContainerDivStyled> + <React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Recursos Favoritados <b style={{fontWeight:"700", fontSize:"20px"}}>(43)</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> //REMOVER ISSO + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 7</p> + <ButtonMostrarMais> + <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> + </ButtonMostrarMais> + <ButtonMostrarTodos> + <span style={{color:"#666", fontSize:"14px", fontWeight:"500"}}>MOSTRAR TODOS</span> + </ButtonMostrarTodos> + </BtnAlinhaRecPvt> + </div> + </Paper> + </ContainerDivStyled> + + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Recursos Favoritados <b style={{fontWeight:"700", fontSize:"20px"}}>(43)</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> //REMOVER ISSO + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 7</p> + <ButtonMostrarMaisColecao> + <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> + </ButtonMostrarMaisColecao> + <ButtonMostrarTodos> + <span style={{color:"#666", fontSize:"14px", fontWeight:"500"}}>MOSTRAR TODOS</span> + </ButtonMostrarTodos> + </BtnAlinhaRecPvt> + </div> + </Paper> + </ContainerDivStyled> + </React.Fragment> ) } -const LoadMoreButton = styled(Button)` +const ButtonMostrarMaisColecao = styled(Button)` + background-color : #503096 !important; + font-size: 14px !important; + font-weight: 500 !important; + height: 36px !important; + border-radius: 3px !important; + padding-left: 16px !important; + padding-right: 16px !important; + box-shadow: 0 2px 5px 0 rgba(0,0,0,.26) !important; outline : none !important; - display : inline-block !important; - cusor : pointer !important; - min-height : 36px !important; - min-widht : 88px !important; - line-height: 36px !important; - vertical-align: middle !important; - border : 0 !important; - padding : 0 px !important; + min-width : 88px !important; + vertical-align : middle !important; margin : 6px 8px !important; text-decoration : none !important; - font-weight : 500 !important; - overflow : hidden !important; - text-transform : uppercase !important; - font-size : 14px !important; -` - -const TituloContent = styled.div` - display : block; - z-index : 1; - position : relative; - font-family: Roboto, sans-serif; - font-weight : ligther; -` - -const InnerDivTitulo = styled.div` - margin-top : 24px; - padding-top : 16px; - padding-left : 16px; - padding-right : 16px; - font-size: 30px; - font-weight: lighter; - color: #6e6e6e; - text-align: center; -` - - -const DivTitulo = styled.div` - display : flex; - justify-content : center; - font-size: 14px; - font-weight: 500; - letter-spacing: .01em; - line-height: 1.2em; - margin : 0; - border-bottom: 1px solid #eee; -` - -const ContainerDivStyled = styled.div` - max-width : 1140px; - margin-left : auto; - margin-right : auto; - margin-left : 20em; - background-color: #fff; ` diff --git a/src/Components/TabPanelMeusRecursos.js b/src/Components/TabPanelMeusRecursos.js index e1e714bd..44e30ab1 100644 --- a/src/Components/TabPanelMeusRecursos.js +++ b/src/Components/TabPanelMeusRecursos.js @@ -38,6 +38,9 @@ export default function TabPanelAtividades (props) { <ButtonMostrarMais> <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> </ButtonMostrarMais> + <ButtonMostrarTodos> + <span style={{color:"#666", fontSize:"14px", fontWeight:"500"}}>MOSTRAR TODOS</span> + </ButtonMostrarTodos> </BtnAlinhaRecPvt> </div> </Paper> @@ -63,7 +66,22 @@ export default function TabPanelAtividades (props) { ) } -const ButtonMostrarMais = styled(Button)` +export const ButtonMostrarTodos = styled(Button)` + &:hover { + color : #d5d5d5 !important; + } + height : 36px !important; + padding-left: 16px !important; + padding-right: 16px !important; + font-weight: 500 !important; + border-radius: 3px !important; + color:#666 !important; + background-color: #e8e8e8 !important; + min-width : 88px !important; + height: 36px !important; +` + +export const ButtonMostrarMais = styled(Button)` background-color : #ff7f00 !important; font-size: 14px !important; font-weight: 500 !important; @@ -79,7 +97,7 @@ const ButtonMostrarMais = styled(Button)` text-decoration : none !important; ` -const BtnAlinhaRecPvt = styled.div` +export const BtnAlinhaRecPvt = styled.div` text-align : center; width : 100%; float : left; @@ -89,7 +107,7 @@ const BtnAlinhaRecPvt = styled.div` padding-left : 15px; ` -const DivContainerRecursosPublicados = styled.div` +export const DivContainerRecursosPublicados = styled.div` width : 100%; float : left; position : relative; @@ -118,7 +136,7 @@ const DivTextoNoPublications = styled.div` padding-left : 15px; ` -const StyledHR = styled.hr` +export const StyledHR = styled.hr` border-color : #757575; border-top: 1px solid #eee; margin : 0 15px 0 15px; @@ -126,7 +144,7 @@ const StyledHR = styled.hr` padding-left : 0; ` -const StyledP = styled.p` +export const StyledP = styled.p` text-align : left; margin-top : 10px; padding-left : 15px; @@ -135,7 +153,7 @@ const StyledP = styled.p` font-size : 1.875em; ` -const DivTitulo = styled.div` +export const DivTitulo = styled.div` padding : 0; margin-bottom : 10px; width : 100; @@ -143,7 +161,7 @@ const DivTitulo = styled.div` flex-direction : column; ` -const ContainerDivStyled = styled.div` +export const ContainerDivStyled = styled.div` max-width : 1140px; margin-left : auto; margin-right : auto; diff --git a/src/Components/TabPanelRede.js b/src/Components/TabPanelRede.js index 7dfefd6d..cebbf197 100644 --- a/src/Components/TabPanelRede.js +++ b/src/Components/TabPanelRede.js @@ -3,83 +3,42 @@ import styled from 'styled-components' import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; +import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' -export default function TabPanelAtividades (props) { +export default function TabPanelRede (props) { return ( - <ContainerDivStyled> - <Paper elevation={3}> - <div> - <DivTitulo> - <InnerDivTitulo> - <TituloContent> - <p style={{margin:"0 0 10px", marginBottom : "40px"}}>Rede</p> - </TituloContent> - </InnerDivTitulo> - </DivTitulo> - {/*some sort of map with a list of notifications idk what though*/} - <div> - <LoadMoreButton><span>CARREGAR MAIS 4</span></LoadMoreButton> - <LoadMoreButton><span>CARREGAR MAIS 20</span></LoadMoreButton> - </div> - </div> - </Paper> - </ContainerDivStyled> + <React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Seguidor <b style={{fontWeight:"700", fontSize:"20px"}}>(1)</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> //REMOVER ISSO + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregado 1 de 1</p> + </BtnAlinhaRecPvt> + </div> + </Paper> + </ContainerDivStyled> + + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Seguindo <b style={{fontWeight:"700", fontSize:"20px"}}>(1)</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> //REMOVER ISSO + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregado 1 de 1</p> + </BtnAlinhaRecPvt> + </div> + </Paper> + </ContainerDivStyled> + </React.Fragment> ) } - -const LoadMoreButton = styled(Button)` - outline : none !important; - display : inline-block !important; - cusor : pointer !important; - min-height : 36px !important; - min-widht : 88px !important; - line-height: 36px !important; - vertical-align: middle !important; - border : 0 !important; - padding : 0 px !important; - margin : 6px 8px !important; - text-decoration : none !important; - font-weight : 500 !important; - overflow : hidden !important; - text-transform : uppercase !important; - font-size : 14px !important; -` - -const TituloContent = styled.div` - display : block; - z-index : 1; - position : relative; - font-family: Roboto, sans-serif; - font-weight : ligther; -` - -const InnerDivTitulo = styled.div` - margin-top : 24px; - padding-top : 16px; - padding-left : 16px; - padding-right : 16px; - font-size: 30px; - font-weight: lighter; - color: #6e6e6e; - text-align: center; -` - - -const DivTitulo = styled.div` - display : flex; - justify-content : center; - font-size: 14px; - font-weight: 500; - letter-spacing: .01em; - line-height: 1.2em; - margin : 0; - border-bottom: 1px solid #eee; -` - -const ContainerDivStyled = styled.div` - max-width : 1140px; - margin-left : auto; - margin-right : auto; - margin-left : 20em; - background-color: #fff; -` -- GitLab From c5015adf418ee387241525ae272a64a49780e79b Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Wed, 5 Feb 2020 10:00:06 -0300 Subject: [PATCH 07/29] button publicar recurso arrumado --- src/Components/MenuBar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/MenuBar.js b/src/Components/MenuBar.js index 17b4d9e2..74fce862 100644 --- a/src/Components/MenuBar.js +++ b/src/Components/MenuBar.js @@ -136,7 +136,7 @@ export default function MenuBar(props){ <Link to="/termos-publicar-recurso"> <ButtonPublicarRecurso> <CloudUploadIcon style={{color:"white", marginLeft : "0"}}/> - <span style={{color : "#fff", textAlign: "center", alignSelf : "center", fontWeight:"100"}} > + <span style={{color : "#fff", textAlign: "center", alignSelf : "center", fontWeight:"500"}} > PUBLICAR RECURSO </span> -- GitLab From fd438c0bb8c767f6c87fd872b2211db422b576cb Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Wed, 5 Feb 2020 19:19:17 -0300 Subject: [PATCH 08/29] adicionado localStorage e requisicoes ao backend para algumas das abas --- src/Components/LoginContainerFunction.js | 364 +++++++++++++++++++++++ src/Components/LoginModal.js | 14 +- src/Components/MenuList.js | 1 + src/Components/ModalAlterarAvatar.js | 119 ++++++++ src/Components/SignUpContainer.js | 4 +- src/Components/SignUpModal.js | 5 + src/Components/TabPanelAtividades.js | 32 +- src/Components/TabPanelMeusRecursos.js | 4 +- src/Pages/UserPage.js | 40 ++- src/Store.js | 14 +- 10 files changed, 585 insertions(+), 12 deletions(-) create mode 100644 src/Components/LoginContainerFunction.js create mode 100644 src/Components/ModalAlterarAvatar.js diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js new file mode 100644 index 00000000..d1a5451b --- /dev/null +++ b/src/Components/LoginContainerFunction.js @@ -0,0 +1,364 @@ +/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana + +This file is part of Plataforma Integrada MEC. + +Plataforma Integrada MEC is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Plataforma Integrada MEC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ +import React, {useState} from "react"; +import GoogleLogin from 'react-google-login' +import { Button } from '@material-ui/core'; +//import FacebookLogin from 'react-facebook-login'; +import CloseIcon from '@material-ui/icons/Close'; +import styled from 'styled-components' +import {device} from './device.js' +import LabeledCheckbox from './Checkbox.js' +import FormInput from "./FormInput.js" +import GoogleLogo from "../img/logo_google.svg" + +function validateUserInput(type, input) { + let flag = false + + if (type === 'email') { + if(input.split("").filter(x => x === "@").length !== 1) { + flag = true + } + } + else if (type === 'senha') { + if(input.length < 1) { + flag = true + } + } + + return flag +} + +export default function LoginContainer (props) { + const [formEmail, setEmail] = useState( + { + dict : { + key : false, + value : "" + } + } + ) + + const [formSenha, setSenha] = useState( + { + dict : { + key : false, + value : "" + } + } + ) + + const [checkboxControl, handleCheckbox] = useState(false) + + const switchModal = (e) => { + e.preventDefault() + props.handleClose() + props.openSignUp() + } + + const handleChange = (e, type) => { + const userInput = e.target.value + const flag = validateUserInput(type, userInput) + + if(type === 'email') { + setEmail({...formEmail, dict : { + key : flag, + value : userInput + }}) + console.log(formEmail) + } + else if(type === 'senha') { + setSenha({...formSenha, dict : { + key : flag, + value : userInput + }}) + console.log(formSenha) + } + } + + const limpaCamposForm = () => { + setEmail({...formEmail, dict : { + key : false, + value : '' + }}); + + setSenha({...formSenha, dict : { + key : false, + value : '' + }}) + } + + const onSubmit = (e) => { + e.preventDefault() + const login = {email : formEmail.dict.value, senha : formSenha.dict.value} + + if (!(formEmail.dict.key && formSenha.dict.key)) { + props.handleLoginInfo(login) + limpaCamposForm() + } + + {/*if (checkboxControl) { + props.lembrarMe() + }*/} + } + + //arrumar isso + const responseGoogle = (response) => { + console.log(response); + } + + return ( + + <ContainerStyled > + <DialogHeaderStyled> + <span style={{width:"32px"}}/> + <H2Styled> Entrar + </H2Styled> + <StyledCloseModalButton onClick={props.handleClose}> + <CloseIcon/> + </StyledCloseModalButton> + </DialogHeaderStyled> + + <DialogContentDiv> + <SocialConnectDiv> + <StyledGoogleLoginButton + clientId="658977310896-knrl3gka66fldh83dao2rhgbblmd4un9.apps.googleusercontent.com" + onSuccess={responseGoogle} + onFailure={responseGoogle} + cookiePolicy={'single_host_origin'} + > + <span style={{textTransform:"none", fontSize:"13px", color : "#666"}}>Usando o Google</span> + </StyledGoogleLoginButton> + </SocialConnectDiv> + + <H3Div> + <H3Styled> + <RightSideStrikedH3/> + <span style={{verticalAlign:"middle"}}>ou</span> + <LeftSideStrikedH3/> + </H3Styled> + </H3Div> + + <form ref="form" onSubmit={e => onSubmit(e)}> + <FormInput + inputType={"text"} + name={"email"} + value={formEmail} + placeholder={"E-mail"} + handleChange={e => handleChange(e, 'email')} + required={true} + /> + <br/> + <FormInput + inputType={"password"} + name={"senha"} + value={formSenha} + placeholder={"Senha"} + handleChange={e => handleChange(e, 'senha')} + required={true} + /> + <br/> + + <RememberRecover> + <LabeledCheckbox label={<StyledLabel><StyledSpan>Lembrar-me</StyledSpan></StyledLabel>} onchange={() => {handleCheckbox(!checkboxControl)}} disabledCheckbox={checkboxControl}/> + <UserForgotTheirPasswordSpan>Esqueceu a senha? <a href="recuperar-senha" style={{textAlign: "right", color:"#4cd0e1"}}>Clique aqui!</a></UserForgotTheirPasswordSpan> + </RememberRecover> + + <ConfirmContainerStyled> + <StyledLoginButton onClick={e => onSubmit(e)} variant="contained"> + <span style={{borderRadius:"3px", boxSizing:"border-box", fontFamily:"Roboto, sans serif", fontWeight:"500", color:"#fff"}}>ENTRAR</span> + </StyledLoginButton> + </ConfirmContainerStyled> + </form> + + <DialogFooterStyled> + <span style={{textAlign:"center", fontSize: "14px", color:"rgb(102, 102, 102)"}}>Ainda não tem cadastro? <StyledAnchor href="" onClick={e => switchModal(e)}>CADASTRE-SE</StyledAnchor></span> + </DialogFooterStyled> + </DialogContentDiv> + </ContainerStyled> + + ) +} + + + const ContainerStyled = styled.div` + box-sizing : border-box; + background-color : white; + max-width : none; + display : flex; + flex-direction : column; + min-width : 440px; + + align : center; + padding : 10px; + border-radius: 4px; + line-height : 20px; + font-size : 14px; + @media ${device.mobileM} { + width : 100%; + height : 100%; + } + ` + + export const DialogHeaderStyled = styled.div` + text-align : center; + display : flex; + flex-direction : row; + justify-content : space-between; + padding : 10px 26px 0 26px; + height : 64px; + ` + const H2Styled = styled.h2` + align-self : center; + color : #666; + font-size : 26px; + font-weight : 100; + font-family: 'Roboto', sans serif, 'Helvetica Neue', Helvetica, Arial, sans-serif !important; + justify-content: space-between; + text-align: center; + letter-spacing: .005em; + ` + + export const StyledCloseModalButton = styled(Button)` + display : inline-block; + position : relative; + float : right !important; + margin-right : -8px !important; + background : transparent !important; + min-width: 0 !important; + width : 40px; + ` + export const DialogContentDiv = styled.div` + padding : 20px 30px; + overflow : visible !important; + ` + + export const SocialConnectDiv = styled.div` + margin-top : 0; + display : flex; + flex-direction : row; + ` + export const StyledGoogleLoginButton = styled(GoogleLogin)` + background-color : #fff !important; + color : #666 !important; + border : 1px solid rgb(66, 133, 244); + box-shadow: 0 0 0 1px #4285f4 !important; + :hover { + background-color: #f4f4f4 !important; + } + ` + + const DialogFooterStyled = styled.div` + box-sizing : border-box; + font-family : 'Roboto', sans serif; + margin : 20px -20px; + padding-top : 20px; + border-top : 1px #e5e5e5 solid; + justify-content : center; + text-align : center; + line-height : 1.42857143 + ` + + + const RightSideStrikedH3 = styled.div` + display : inline-block; + border-bottom: 1px dotted #666; + vertical-align : middle; + font-weight : 500; + margin-right : 5px; + width : 45%; + ` + + const LeftSideStrikedH3 = styled.div` + display : inline-block; + border-bottom: 1px dotted #666; + vertical-align : middle; + font-weight : 500; + margin-left : 5px; + width : 45%; + ` + + export const H3Div = styled.div` + margin-top : 0; + margin-bottom : 10px; + ` + + const H3Styled = styled.h3` + overflow : hidden; + text-align : center; + font-size : 14px; + color : #666; + margin : 10px 0; + ` + + const StyledAnchor = styled.a` + color : #00bcd4; + text-decoration : none; + ` + const ConfirmContainerStyled = styled.div` + display : flex; + margin-top : 10px; + align-items : center; + justify-content : center; + ` + const StyledLoginButton = styled(Button)` + background-color : #00bcd4 !important; + box-shadow : none !important; + outline: none !important; + border : 0 !important; + overflow : hidden !important; + width : 35% !important; + display : inline-block !important; + font-family : 'Roboto', sans serif !important; + font-size: 14px !important; + height : 36px !important; + align-items : center !important; + border-radius: 3px !important; + align-self : 50% !important; + :hover { + background-color : #00acc1 !important; + } + ` + + + const RememberRecover = styled.div` + display : flex; + justify-content : space-between; + font-size: 12px; + font-weight : 400; + ` + + const StyledLabel = styled.div` + box-sizing : border-box; + position : relative; + vertical-align : middle !important; + color : #666; + ` + + const UserForgotTheirPasswordSpan = styled.span` + margin-top : 1em; + font-size : 12px; + font-weight : 400; + text-align : right; + color : #666; + ` + + const StyledSpan = styled.span` + font-size : 12px; + font-weight : 400; + padding-top : 2px; + ` diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js index 65ff4e34..26607d36 100644 --- a/src/Components/LoginModal.js +++ b/src/Components/LoginModal.js @@ -22,7 +22,7 @@ import Modal from '@material-ui/core/Modal'; import Backdrop from '@material-ui/core/Backdrop'; import Zoom from '@material-ui/core/Fade'; import styled from 'styled-components' -import LoginContainer from './LoginContainer' +import LoginContainer from './LoginContainer.js' import {Store} from '../Store.js' import axios from 'axios' import {apiUrl} from '../env'; @@ -45,7 +45,8 @@ function Alert(props) { } export default function LoginModal (props){ - const {state, dispatch} = useContext(Store) + const {state, dispatch} = useContext(Store) + const [snackbarOpened, handleSnackbar] = useState(false) const handleCloseSnackbar = (event, reason) => { @@ -77,6 +78,15 @@ export default function LoginModal (props){ } } ) + // console.log(response.headers) + // console.log(response.data) + // console.log(response.data.data.name) + // console.log(response.data.data.uid) + localStorage.setItem('@portalmec/accessToken', response.headers['access-token']) + localStorage.setItem('@portalmec/clientToken', response.headers.client,) + localStorage.setItem('@portalmec/id', response.data.data.id) + localStorage.setItem('@portalmec/username', response.data.data.name) + localStorage.setItem('@portalmec/uid', response.data.data.uid) props.handleClose(); props.openSnackbar(); }, (error) => { diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js index 0402b7e2..910af9cf 100644 --- a/src/Components/MenuList.js +++ b/src/Components/MenuList.js @@ -55,6 +55,7 @@ export default function MenuList(props) { }; const handleLogout = () => { + localStorage.removeItem('@portalmec/username'); dispatch( { type: 'USER_LOGGED_OUT', userLoggedOut: !state.userIsLoggedIn, diff --git a/src/Components/ModalAlterarAvatar.js b/src/Components/ModalAlterarAvatar.js new file mode 100644 index 00000000..f770ebf1 --- /dev/null +++ b/src/Components/ModalAlterarAvatar.js @@ -0,0 +1,119 @@ +/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana + +This file is part of Plataforma Integrada MEC. + +Plataforma Integrada MEC is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Plataforma Integrada MEC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ + +import React, {useContext, useState} from 'react'; +import { Button } from '@material-ui/core'; +import Modal from '@material-ui/core/Modal'; +import Backdrop from '@material-ui/core/Backdrop'; +import Zoom from '@material-ui/core/Fade'; +import styled from 'styled-components' +import {Store} from '../Store.js' +import axios from 'axios' +import {apiUrl} from '../env'; +import CloseIcon from '@material-ui/icons/Close'; + +const StyledModal = styled(Modal)` + display : flex; + flex-direction : column; + border-radius : 4px; + background-color : #fff; + min-width : 560px; +` + +export default function ModarAlterarAvatar (props){ + const {state, dispatch} = useContext(Store) + + const handleLoginInfo = (login) => { + axios.post(`${apiUrl}`, + { + } + ).then( (response) => { + dispatch ({ + + }, (error) => { + + } + ) + } + + + return ( + <> + <StyledModal + aria-labelledby="transition-modal-title" + aria-describedby="transition-modal-description" + open={props.open} + animation={true} + centered={true} + onClose={props.handleClose} + closeAfterTransition + BackdropComponent={Backdrop} + BackdropProps={{ + timeout: 500, + }} + > + <Zoom in={props.open} style={{ transitionDelay :"0.4ms"}}> + <HeaderDiv> + <span style={{width:"32px"}}/> + <StyledH2>Editar Foto</StyledH2> + <StyledCloseModalButton onClick={this.props.handleClose}> + <CloseIcon/> + </StyledCloseModalButton> + </HeaderDiv> + <DialogDiv> + </DialogDiv> + </Zoom> + </StyledModal> + </> + ) +} + +const DialogDiv = styled.div` + padding : 20px 30px; + overflow : visible !important; +` + +const HeaderDiv = styled.div` + display : flex; + flex-direction : row; + align-items : center; + align-content : center; + max-width : 100%; +` +const StyledH2 = styled.h2` + font-size : 26px; + font-weight : lighter; + margin-top : 20px; + margin-bottom : 10px; + font-family: inherit; + line-height: 1.1; + color: inherit; +` +const StyledCloseModalButton = styled(Button)` + display : inline-block; + position : relative; + float : right !important; + margin-right : -8px !important; + background : transparent !important; + min-width: 0 !important; + width : 40px; + border-radius : 50%; + padding : 8px; + height : 40px; + margin : 0 6px; +` diff --git a/src/Components/SignUpContainer.js b/src/Components/SignUpContainer.js index c41f3655..21652735 100644 --- a/src/Components/SignUpContainer.js +++ b/src/Components/SignUpContainer.js @@ -90,7 +90,7 @@ class SignUpContainer extends Component { const { name, email, password } = this.state; const errors = validateUserInfo(name, email, password) console.log(this.state) - if ( errors.length < 0) { + if ( errors.length < 1) { //pass user info to Store.js and clear all text fields this.props.handleLoginInfo(this.state) this.setState({ @@ -211,7 +211,7 @@ const ContainerStyled = styled.div` display : flex; flex-direction : column; min-width : 450px; - min-height : 690px; + max-height : none; position : relative; padding : 10px; diff --git a/src/Components/SignUpModal.js b/src/Components/SignUpModal.js index 8a9ffb20..cf38fc14 100644 --- a/src/Components/SignUpModal.js +++ b/src/Components/SignUpModal.js @@ -88,6 +88,11 @@ export default function SignUpModal (props) { } } ) + localStorage.setItem('@portalmec/accessToken', response.headers['access-token']) + localStorage.setItem('@portalmec/clientToken', response.headers.client,) + localStorage.setItem('@portalmec/id', response.data.data.id) + localStorage.setItem('@portalmec/username', response.data.data.name) + localStorage.setItem('@portalmec/uid', response.data.data.uid) console.log(state.currentUser) props.handleClose() }, (error) => { diff --git a/src/Components/TabPanelAtividades.js b/src/Components/TabPanelAtividades.js index f65115ca..e26988af 100644 --- a/src/Components/TabPanelAtividades.js +++ b/src/Components/TabPanelAtividades.js @@ -1,10 +1,40 @@ -import React, {useContext} from 'react' +import React, {useContext, useState, useEffect} from 'react' import styled from 'styled-components' import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; +import axios from 'axios' +import {apiUrl} from '../env'; export default function TabPanelAtividades (props) { + const [notifications, setNotifications] = useState([]); + const [notificatonsLength, setLength] = useState(0); + + const config = { + headers : { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Token': localStorage.getItem('@portalmec/accessToken'), + 'Client': localStorage.getItem('@portalmec/clientToken'), + 'Uid': localStorage.getItem('@portalmec/uid'), + 'Host': 'api.portalmec.c3sl.ufpr.br', + 'Cookie': '' + } + } + + useEffect( () => { + axios.get(`${apiUrl}/feed`, config) + .then( (response) => { + // console.log(response) + setNotifications(response) + setLength(response.length) + }, + (error) => { + console.log('error while running getNotifications') + } + ) + }, []) + return ( <ContainerDivStyled> <Paper elevation={3}> diff --git a/src/Components/TabPanelMeusRecursos.js b/src/Components/TabPanelMeusRecursos.js index 44e30ab1..d43f9643 100644 --- a/src/Components/TabPanelMeusRecursos.js +++ b/src/Components/TabPanelMeusRecursos.js @@ -1,8 +1,10 @@ -import React, {useContext} from 'react' +import React, {useContext, useState, useEffect} from 'react' import styled from 'styled-components' import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; +import axios from 'axios' +import {apiUrl} from '../env'; export default function TabPanelAtividades (props) { return ( diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index f6bd664c..d8fef866 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -16,7 +16,7 @@ GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -import React, {useState, useContext} from 'react'; +import React, {useState, useContext, useEffect} from 'react'; import styled from 'styled-components' import { Container } from 'react-grid-system' import Button from '@material-ui/core/Button'; @@ -37,16 +37,50 @@ import TabPanelMeusRecursos from '../Components/TabPanelMeusRecursos.js' import TabPanelFavoritos from '../Components/TabPanelFavoritos.js' import TabPanelColecoes from '../Components/TabPanelColecoes.js' import TabPanelRede from '../Components/TabPanelRede.js' +import axios from 'axios' +import {apiUrl} from '../env'; export default function UserPage (props){ const {state, dispatch} = useContext(Store) const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) const [value, setValue] = useState(0); + const user = localStorage.getItem('@portalmec/username') + const id = localStorage.getItem('@portalmec/id') const handleHoverAlterarFoto = () => { handleAlterarFoto(!hoverAlterarFoto) } + useEffect( () => { + axios.get( (`${apiUrl}/users/` + id), { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Host': 'api.portalmec.c3sl.ufpr.br', + 'Cookie': '' + }) + .then( (response) => { + console.log(response) + dispatch ({ + type : 'USER_ACCESSED_USER_PAGE', + set: { + id : response.data.id, + email : response.data.email, + username : response.data.name, + education : response.data.education, + userAvatar : response.data.avatar, + userCover : response.data.cover, + followCount : response.data.follow_count, + collectionsCount: response.data.collections_count, + } + }) + console.log(state.currentUser) + }, + (error) => { + console.log('error while running ComponentDidMout') + } + ) + }, []) + const redirect = () => { props.history.push('/') } @@ -102,7 +136,7 @@ export default function UserPage (props){ </ChangeAvatarDiv> </ProfileAvatarDiv> <UserProfileInfoDiv> - <p style={{fontSize:"28px", color:"#fff", marginBottom:"2px", fontWeight:"500"}}>{state.currentUser.username}</p> + <p style={{fontSize:"28px", color:"#fff", marginBottom:"2px", fontWeight:"500"}}>{user}</p> <div style={{fontSize:"14px", color:"#fff", marginBottom:"2px"}}> <p>{state.currentUser.education}</p> </div> @@ -116,7 +150,7 @@ export default function UserPage (props){ <CheckTeacherDiv> <> { - state.isCollaborativeTeacher ? + state.currentUser.isCollaborativeTeacher ? ( [ <> diff --git a/src/Store.js b/src/Store.js index 6c19780f..8fc1382a 100644 --- a/src/Store.js +++ b/src/Store.js @@ -22,7 +22,7 @@ export const Store = React.createContext() const initialState = { searchOpen: false, - userIsLoggedIn : true, + userIsLoggedIn : false, userAgreedToPublicationTerms: false, userAgreedToPublicationPermissions: false, modalColaborarPlataformaOpen : false, @@ -36,14 +36,17 @@ const initialState = { }, currentUser: { id : '', - username : 'Horstmann', + username : '', email : '', accessToken : '', clientToken : '', education : '', isCollaborativeTeacher : false, userAvatar : '', - userCover : '' + userCover : '', + uid : '', + followCount : 0, + collectionsCount : 0 } } @@ -92,6 +95,11 @@ function reducer(state, action) { ...state, userAgreedToPublicationPermissions : action.userAgreement } + case 'USER_ACCESSED_USER_PAGE': + return { + ...state, + currentUser : action.set + } default: return state } -- GitLab From e07330e0b1f70e3e1e87fdc52a3f3b3c014ed545 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Thu, 6 Feb 2020 17:19:53 -0300 Subject: [PATCH 09/29] terminando de adicionar chamadas para as rotas; adicionada animacao de carregando e tentando criar o modal de mudar avatar --- src/Components/ComponentAlterarAvatar.js | 226 +++++++++++++++++++++++ src/Components/LoadingSpinner.js | 11 ++ src/Components/LoginContainer.js | 16 +- src/Components/LoginContainerFunction.js | 6 +- src/Components/LoginModal.js | 12 +- src/Components/ModalAlterarAvatar.js | 81 +++----- src/Components/SignUpContainer.js | 2 +- src/Components/SignUpModal.js | 18 +- src/Components/TabPanelAtividades.js | 93 +++++++--- src/Components/TabPanelColecoes.js | 147 +++++++++++---- src/Components/TabPanelFavoritos.js | 181 +++++++++++++----- src/Components/TabPanelMeusRecursos.js | 196 +++++++++++++++----- src/Components/TabPanelRede.js | 10 +- src/Pages/UserPage.js | 36 +++- src/img/Bolo.png | Bin 0 -> 394 bytes src/img/loading_busca.gif | Bin 0 -> 10901 bytes 16 files changed, 787 insertions(+), 248 deletions(-) create mode 100644 src/Components/ComponentAlterarAvatar.js create mode 100644 src/Components/LoadingSpinner.js create mode 100644 src/img/Bolo.png create mode 100644 src/img/loading_busca.gif diff --git a/src/Components/ComponentAlterarAvatar.js b/src/Components/ComponentAlterarAvatar.js new file mode 100644 index 00000000..3115167a --- /dev/null +++ b/src/Components/ComponentAlterarAvatar.js @@ -0,0 +1,226 @@ +/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana + +This file is part of Plataforma Integrada MEC. + +Plataforma Integrada MEC is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Plataforma Integrada MEC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ + +import React, {useContext,Component} from 'react'; +import { Button } from '@material-ui/core'; +import Modal from '@material-ui/core/Modal'; +import Backdrop from '@material-ui/core/Backdrop'; +import Zoom from '@material-ui/core/Fade'; +import styled from 'styled-components' +import {Store} from '../Store.js' +import axios from 'axios' +import {apiUrl} from '../env'; +import CloseIcon from '@material-ui/icons/Close'; +import Profile from '../img/default_profile0.png' + +const ChangeAvatarDiv = styled.div` + color:rgba(255,255,255,.7); + background-color:rgba(0,0,0,.5); + position: absolute;bottom: 0; + width: inherit; + text-align: center; + font-size: 18px; + padding-bottom: 5px; + font-weight: 400; + height: 30%; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; +` + +export default function ComponentAlterarAvatar (props) { + + + + return ( + <ModalDiv style={{maxWidth:"500px", maxHeight:"500px"}}> + <HeaderDiv> + <span style={{width:"32px"}}/> + <StyledH2>Editar Foto</StyledH2> + <StyledCloseModalButton onClick={props.handleClose}> + <CloseIcon/> + </StyledCloseModalButton> + </HeaderDiv> + <DialogDiv> + <div style={{marginTop:"0"}}> + <form> + <DivAlterarFoto> + <DivFlowHolder> + <AvatarCircleDiv> + { + props.userAvatar == '' || props.userAvatar == null ? + ( + + <img src={Profile} alt={'user avatar'} style={{height:"inherit", width:"inherit", objectFit:"cover"}}/> + ): + ( + <img src={this.props.userAvatar} alt={'user avatar'} style={{height:"inherit", width:"inherit", objectFit:"cover"}}/> + ) + } + <ChangeAvatarDiv> + <span>Alterar</span> + <input accept="image/*" id="icon-button-file" + type="file" + onChange={(e) => props.handleFile(e.target.files) }/> + </ChangeAvatarDiv> + </AvatarCircleDiv> + </DivFlowHolder> + </DivAlterarFoto> + <ButtonsDiv> + <ButtonCancelar><span>Cancelar</span></ButtonCancelar><ButtonConfirmar><span>Salvar Alterações</span></ButtonConfirmar> + </ButtonsDiv> + </form> + </div> + </DialogDiv> + </ModalDiv> + ) + +} + +const ModalDiv = styled.div` + background-color : #fff; + border-radius : 4px; + min-width : 560px; + color : #666; + display: flex; + flex-direction : column; +` + +const ButtonConfirmar = styled(Button)` + color : rgba(255,255,255,0.87); + background-color: rgb(0,188,212); + display: inline-block; + position: relative; + cursor: pointer; + min-height: 36px; + min-width: 88px; + line-height: 36px; + vertical-align: middle; + align-items: center; + text-align: center; + border-radius: 3px; + box-sizing: border-box; + user-select: none; + border: 0; + padding: 0 6px; + margin: 6px 8px; + background: transparent; + background-color: transparent; + color: currentColor; + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + font-style: inherit; + font-variant: inherit; + font-family: inherit; + text-decoration: none; + overflow: hidden; +` + +const ButtonCancelar = styled(Button)` + outline : none; + display: inline-block; + position: relative; + cursor: pointer; + min-height: 36px; + min-width: 88px; + line-height: 36px; + vertical-align: middle; + align-items: center; + text-align: center; + border-radius: 3px; + box-sizing: border-box; + user-select: none; + border: 0; + padding: 0 6px; + margin: 6px 8px; + background:transparent; + color: currentColor; + white-space: nowrap; + text-transform: uppercase; + font-weight: 500; + font-size: 14px; + font-style: inherit; + font-variant: inherit; + font-family: inherit; + text-decoration: none; + overflow: hidden; +` + +const ButtonsDiv = styled.div` + display: flex; + justify-content:flex-end; +` + +const AvatarCircleDiv = styled.div` + margin-bottom : 0; + border-radius : 50%; + height : 150px; + width : 150px; + position : relative; +` + +const DivFlowHolder =styled.div` + align-self : auto; +` + +const DivAlterarFoto = styled.div` + display : flex; + margin-bottom : 30px; + flex-direction : row; + align-items : center; + justify-content :center; +` + +const DialogDiv = styled.div` + padding : 20px 30px; + overflow : visible !important; +` + +const HeaderDiv = styled.div` + display : flex; + flex-direction : row; + align-items : center; + align-content : center; + justify-content : center; + max-width : 100%; +` +const StyledH2 = styled.h2` + font-size : 26px; + font-weight : lighter; + margin-top : 20px; + margin-bottom : 10px; + font-family: inherit; + line-height: 1.1; + color: inherit; +` +const StyledCloseModalButton = styled(Button)` + display : inline-block; + position : relative; + float : right !important; + margin-right : -8px !important; + background : transparent !important; + min-width: 0 !important; + width : 40px; + border-radius : 50%; + padding : 8px; + height : 40px; + margin : 0 6px; +` diff --git a/src/Components/LoadingSpinner.js b/src/Components/LoadingSpinner.js new file mode 100644 index 00000000..ffeec909 --- /dev/null +++ b/src/Components/LoadingSpinner.js @@ -0,0 +1,11 @@ +import React from 'react'; +import LoadingGif from '../img/loading_busca.gif' + + const LoadingSpinner = (props) => ( + <div style={{display:"flex", flexDirection:"column", alignItems:"center", justifyContent:"center"}}> + <img src={LoadingGif} /> + <span style={{textTransform:"uppercase"}}>{props.text}</span> + </div> + ); + + export default LoadingSpinner; diff --git a/src/Components/LoginContainer.js b/src/Components/LoginContainer.js index 8546fc4c..ccdc075a 100644 --- a/src/Components/LoginContainer.js +++ b/src/Components/LoginContainer.js @@ -36,8 +36,8 @@ class LoginContainer extends Component { super(props); this.state = { - email : "", - senha : "", + email : localStorage.getItem("@portalmec/email") || "", + senha : localStorage.getItem("@portalmec/senha") ||"", checkboxChecked : false }; this.handleChecked = this.handleChecked.bind(this) @@ -55,8 +55,9 @@ class LoginContainer extends Component { onSubmit = (e) => { e.preventDefault(); + const login = this.state - this.props.handleLoginInfo(this.state); + this.props.handleLoginInfo(login); this.setState({ email: "", @@ -65,8 +66,11 @@ class LoginContainer extends Component { } handleChecked = (e) => { + const value = !this.state.checkboxChecked + console.log(this.state.checkboxChecked) + console.log(value) this.setState({ - checkboxChecked : !this.state.checkboxChecked + checkboxChecked :value }) } @@ -124,12 +128,12 @@ class LoginContainer extends Component { <br/> <RememberRecover> - <LabeledCheckbox label={<StyledLabel><StyledSpan>Lembrar-me</StyledSpan></StyledLabel>} onchange={this.handleChecked} disabledCheckbox={this.state.checkboxChecked}/> + <LabeledCheckbox label={<StyledLabel><StyledSpan>Lembrar-me</StyledSpan></StyledLabel>} handleChange={this.handleChecked} /> <UserForgotTheirPasswordSpan>Esqueceu a senha? <a href="recuperar-senha" style={{textAlign: "right", color:"#4cd0e1"}}>Clique aqui!</a></UserForgotTheirPasswordSpan> </RememberRecover> <ConfirmContainerStyled> - <StyledLoginButton onClick={e => this.onSubmit(e)} variant="contained"> + <StyledLoginButton type="submit" variant="contained"> <span style={{borderRadius:"3px", boxSizing:"border-box", fontFamily:"Roboto, sans serif", fontWeight:"500", color:"#fff"}}>ENTRAR</span> </StyledLoginButton> </ConfirmContainerStyled> diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js index d1a5451b..c55da450 100644 --- a/src/Components/LoginContainerFunction.js +++ b/src/Components/LoginContainerFunction.js @@ -122,7 +122,7 @@ export default function LoginContainer (props) { } return ( - + <div> <ContainerStyled > <DialogHeaderStyled> <span style={{width:"32px"}}/> @@ -190,7 +190,7 @@ export default function LoginContainer (props) { </DialogFooterStyled> </DialogContentDiv> </ContainerStyled> - + </div> ) } @@ -202,7 +202,7 @@ export default function LoginContainer (props) { display : flex; flex-direction : column; min-width : 440px; - + align : center; padding : 10px; border-radius: 4px; diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js index 26607d36..052084e7 100644 --- a/src/Components/LoginModal.js +++ b/src/Components/LoginModal.js @@ -79,14 +79,18 @@ export default function LoginModal (props){ } ) // console.log(response.headers) - // console.log(response.data) + console.log(login) // console.log(response.data.data.name) // console.log(response.data.data.uid) localStorage.setItem('@portalmec/accessToken', response.headers['access-token']) localStorage.setItem('@portalmec/clientToken', response.headers.client,) - localStorage.setItem('@portalmec/id', response.data.data.id) - localStorage.setItem('@portalmec/username', response.data.data.name) - localStorage.setItem('@portalmec/uid', response.data.data.uid) + sessionStorage.setItem('@portalmec/id', response.data.data.id) + sessionStorage.setItem('@portalmec/username', response.data.data.name) + sessionStorage.setItem('@portalmec/uid', response.data.data.uid) + if (login.checkboxChecked) { + localStorage.setItem('@portalmec/email', login.email) + localStorage.setItem('@portalmec/senha', login.senha) //MUDAR ISSO ASAP + } props.handleClose(); props.openSnackbar(); }, (error) => { diff --git a/src/Components/ModalAlterarAvatar.js b/src/Components/ModalAlterarAvatar.js index f770ebf1..8bd1c57e 100644 --- a/src/Components/ModalAlterarAvatar.js +++ b/src/Components/ModalAlterarAvatar.js @@ -20,24 +20,26 @@ import React, {useContext, useState} from 'react'; import { Button } from '@material-ui/core'; import Modal from '@material-ui/core/Modal'; import Backdrop from '@material-ui/core/Backdrop'; -import Zoom from '@material-ui/core/Fade'; +import Fade from '@material-ui/core/Fade'; import styled from 'styled-components' import {Store} from '../Store.js' import axios from 'axios' import {apiUrl} from '../env'; import CloseIcon from '@material-ui/icons/Close'; +import Profile from '../img/default_profile0.png' +import ComponentAlterarAvatar from './ComponentAlterarAvatar.js' const StyledModal = styled(Modal)` display : flex; - flex-direction : column; - border-radius : 4px; - background-color : #fff; - min-width : 560px; + align-items: center; + justify-content : center; + text-align : center; + padding : 10px !important; ` export default function ModarAlterarAvatar (props){ const {state, dispatch} = useContext(Store) - + const [avatarFile, setFile] = useState('') const handleLoginInfo = (login) => { axios.post(`${apiUrl}`, { @@ -47,13 +49,18 @@ export default function ModarAlterarAvatar (props){ }, (error) => { - } - ) + } + ) + }) } + const handleFile = (selectorFiles : FileList) => { + console.log(selectorFiles) + {/*setFile()*/} + } return ( - <> + <StyledModal aria-labelledby="transition-modal-title" aria-describedby="transition-modal-description" @@ -67,53 +74,15 @@ export default function ModarAlterarAvatar (props){ timeout: 500, }} > - <Zoom in={props.open} style={{ transitionDelay :"0.4ms"}}> - <HeaderDiv> - <span style={{width:"32px"}}/> - <StyledH2>Editar Foto</StyledH2> - <StyledCloseModalButton onClick={this.props.handleClose}> - <CloseIcon/> - </StyledCloseModalButton> - </HeaderDiv> - <DialogDiv> - </DialogDiv> - </Zoom> + <Fade in={props.open} style={{ transitionDelay :"0.4ms"}}> + + <ComponentAlterarAvatar + userAvatar={state.currentUser.userAvatar} + handleFile={handleFile} + handleClose={props.handleClose} + /> + </Fade> </StyledModal> - </> + ) } - -const DialogDiv = styled.div` - padding : 20px 30px; - overflow : visible !important; -` - -const HeaderDiv = styled.div` - display : flex; - flex-direction : row; - align-items : center; - align-content : center; - max-width : 100%; -` -const StyledH2 = styled.h2` - font-size : 26px; - font-weight : lighter; - margin-top : 20px; - margin-bottom : 10px; - font-family: inherit; - line-height: 1.1; - color: inherit; -` -const StyledCloseModalButton = styled(Button)` - display : inline-block; - position : relative; - float : right !important; - margin-right : -8px !important; - background : transparent !important; - min-width: 0 !important; - width : 40px; - border-radius : 50%; - padding : 8px; - height : 40px; - margin : 0 6px; -` diff --git a/src/Components/SignUpContainer.js b/src/Components/SignUpContainer.js index 21652735..9d01f58d 100644 --- a/src/Components/SignUpContainer.js +++ b/src/Components/SignUpContainer.js @@ -176,7 +176,7 @@ class SignUpContainer extends Component { onloadCallback={callback} /> <ConfirmContainerStyled> - <StyledSignUpButton onClick={e => this.onSubmit(e)} variant="contained"> + <StyledSignUpButton type="submit" variant="contained"> <span style={{paddingLeft:"16px", paddingRight:"16px", borderRadius:"3px", boxSizing:"border-box", fontFamily:"Roboto, sans serif", fontWeight:"500", color:"#fff"}} diff --git a/src/Components/SignUpModal.js b/src/Components/SignUpModal.js index cf38fc14..49386ce7 100644 --- a/src/Components/SignUpModal.js +++ b/src/Components/SignUpModal.js @@ -41,23 +41,7 @@ const StyledModalSignUp = styled(Modal)` ` -const useStyles = makeStyles(theme => ({ - modal: { - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - textAlign: "center", - maxBlockSize: "350px", - width: '100%', - minBlockSize: "100px", - }, - paper: { - backgroundColor: "theme.palette.background.paper", - border: '2px solid #000', - boxShadow: " 0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12);", - align:"center", - }, -})); + export default function SignUpModal (props) { const { state, dispatch } = useContext(Store) diff --git a/src/Components/TabPanelAtividades.js b/src/Components/TabPanelAtividades.js index e26988af..074c12ed 100644 --- a/src/Components/TabPanelAtividades.js +++ b/src/Components/TabPanelAtividades.js @@ -5,29 +5,22 @@ import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; import axios from 'axios' import {apiUrl} from '../env'; +import Bolo from '../img/Bolo.png' +import LoadingSpinner from './LoadingSpinner.js' export default function TabPanelAtividades (props) { const [notifications, setNotifications] = useState([]); const [notificatonsLength, setLength] = useState(0); - - const config = { - headers : { - 'Accept': 'application/json', - 'Content-Type': 'application/json', - 'Access-Token': localStorage.getItem('@portalmec/accessToken'), - 'Client': localStorage.getItem('@portalmec/clientToken'), - 'Uid': localStorage.getItem('@portalmec/uid'), - 'Host': 'api.portalmec.c3sl.ufpr.br', - 'Cookie': '' - } - } + const [loading, handleLoading] = useState(true) useEffect( () => { - axios.get(`${apiUrl}/feed`, config) + axios.get(`${apiUrl}/feed`, props.config) .then( (response) => { - // console.log(response) - setNotifications(response) - setLength(response.length) + handleLoading(false) + console.log(response) + setNotifications(response.data) + console.log(response.data.length) + setLength(response.data.length) }, (error) => { console.log('error while running getNotifications') @@ -36,6 +29,7 @@ export default function TabPanelAtividades (props) { }, []) return ( + <ContainerDivStyled> <Paper elevation={3}> <div> @@ -46,17 +40,74 @@ export default function TabPanelAtividades (props) { </TituloContent> </InnerDivTitulo> </DivTitulo> - {/*some sort of map with a list of notifications idk what though*/} - <div> - <LoadMoreButton><span>CARREGAR MAIS 4</span></LoadMoreButton> - <LoadMoreButton><span>CARREGAR MAIS 20</span></LoadMoreButton> - </div> + { + loading ? + ( + <LoadingSpinner text={'Carregando Atividades'}/> + ) + : + ( + [ + <div> + { + notificatonsLength == 0 ? + ( + [ + <NoNotificationsDiv> + <div> + <div> + <H3Styled><img src={Bolo} alt='bolo' style={{width:"23px"}}/> Você se cadastrou na Plataforma</H3Styled> + </div> + <p + style={{fontSize:"15px", fontWeight:"lighter", margin:"0 0 10px", display:"flex", justifyContent:"center", textAlign:"center"}} + >Construa conosco a plataforma e amplie sua rede de conhecimento interagindo + <br/> + com pessoas envolvidas com experiências que ocorrem em todo o Brasil! + </p> + + </div> + </NoNotificationsDiv> + ] + ) + : + ( + [ <> + {/*some sort of map with a list of notifications idk what though*/} + <LoadMoreButton><span>CARREGAR MAIS 4</span></LoadMoreButton> + <LoadMoreButton><span>CARREGAR MAIS 20</span></LoadMoreButton> + </> + ] + ) + } + </div> + + ] + ) + } </div> </Paper> </ContainerDivStyled> ) } +const H3Styled = styled.h3` + font-size: 24px; + font-weight : lighter; + color : #00bcd4; + margin-top : 20px; + margin-bottom : 10px; + display : flex; + justify-content : center; + align-items : center; +` + +const NoNotificationsDiv = styled.div` + height : 250px; + display: flex; + align-items : center; + justify-content : center; +` + const LoadMoreButton = styled(Button)` outline : none !important; display : inline-block !important; diff --git a/src/Components/TabPanelColecoes.js b/src/Components/TabPanelColecoes.js index 85d97654..b865f48b 100644 --- a/src/Components/TabPanelColecoes.js +++ b/src/Components/TabPanelColecoes.js @@ -1,44 +1,123 @@ -import React, {useContext} from 'react' +import React, {useContext, useState, useEffect} from 'react' import styled from 'styled-components' import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' +import {NoPubSpan, DivConteudoNaoPublicado, DivTextoNoPublications} from './TabPanelMeusRecursos.js' +import LoadingSpinner from './LoadingSpinner.js' +import axios from 'axios' +import {apiUrl} from '../env'; export default function TabPanelColecoes (props) { + const [loading, handleLoading] = useState(true) + + const [userCollections, setuserCollections] = useState([]) + const [userCollectionsLength, setuserCollectionsLength] = useState(0) + + const [followedCollections, setFollowedCollections] = useState([]) + const [followedCollectionsLength, setfollowedCollectionsLength] = useState(0) + + useEffect( () => { + axios.all([ + axios.get((`${apiUrl}/users/` + props.id + '/collections'), props.config), + axios.get((`${apiUrl}/users/` + props.id + '/following/Collection'), props.config), + ]) + .then( (responseArr) => { + handleLoading(false) + console.log(responseArr) + console.log(responseArr[0].data) + console.log(responseArr[1].data) + }, + (error) => { + handleLoading(false) + console.log('error while running axios all') + } + ) + }, []) + return ( - <React.Fragment> - <ContainerDivStyled> - <Paper elevation={3}> - <DivTitulo> - <StyledP>Minhas Coleções <b style={{fontWeight:"700", fontSize:"20px"}}>(2)</b></StyledP> - <StyledHR/> - </DivTitulo> - <div style={{height : "400px"}}> //REMOVER ISSO - <DivContainerRecursosPublicados> - </DivContainerRecursosPublicados> - <BtnAlinhaRecPvt> - <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 2 de 2</p> - </BtnAlinhaRecPvt> - </div> - </Paper> - </ContainerDivStyled> - - <ContainerDivStyled> - <Paper elevation={3}> - <DivTitulo> - <StyledP>Coleções que eu sigo <b style={{fontWeight:"700", fontSize:"20px"}}>(4)</b></StyledP> - <StyledHR/> - </DivTitulo> - <div style={{height : "400px"}}> //REMOVER ISSO - <DivContainerRecursosPublicados> - </DivContainerRecursosPublicados> - <BtnAlinhaRecPvt> - <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 4</p> - </BtnAlinhaRecPvt> - </div> - </Paper> - </ContainerDivStyled> - </React.Fragment> + <> + { + loading ? + ( + <LoadingSpinner text={'CARREGANDO COLEÇÕES'}/> + + ) + : + ( + [ + <React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Minhas Coleções <b style={{fontWeight:"700", fontSize:"20px"}}>({userCollectionsLength})</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> + { + userCollectionsLength == 0 ? + ( + [ + <span>Adicionar tela "criar colecao" e a imagem</span> + ] + ) + : + ( + <> + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 2 de 2</p> + </BtnAlinhaRecPvt> + </> + ) + } + + </div> + </Paper> + </ContainerDivStyled> + + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Coleções que eu sigo <b style={{fontWeight:"700", fontSize:"20px"}}>({followedCollectionsLength})</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> + { + followedCollectionsLength == 0 ? + ( + [ + <> + <DivTextoNoPublications> + <DivConteudoNaoPublicado> + <NoPubSpan>Você ainda não segue nenhuma coleção.</NoPubSpan> + </DivConteudoNaoPublicado> + </DivTextoNoPublications> + </> + ] + ) + : + ( + [ + <> + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 4</p> + </BtnAlinhaRecPvt> + </> + ] + ) + } + </div> + </Paper> + </ContainerDivStyled> + </React.Fragment> + ] + ) + } + </> ) } diff --git a/src/Components/TabPanelFavoritos.js b/src/Components/TabPanelFavoritos.js index 1615309d..71c3e50a 100644 --- a/src/Components/TabPanelFavoritos.js +++ b/src/Components/TabPanelFavoritos.js @@ -1,57 +1,148 @@ -import React, {useContext} from 'react' +import React, {useContext, useState, useEffect} from 'react' import styled from 'styled-components' import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; +import axios from 'axios' +import {apiUrl} from '../env'; import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' +import {NoPubSpan, DivConteudoNaoPublicado, DivTextoNoPublications} from './TabPanelMeusRecursos.js' +import LoadingSpinner from './LoadingSpinner.js' export default function TabPanelFavoritos (props) { + const [loading, handleLoading] = useState(true) + + const [likedLearnObjs, setlikedLearnObjs] = useState([]) + const [likedLearnObjsLength, setlikedLearnObjsLength] = useState(0) + + const [likedCollections, setlikedCollections] = useState([]) + const [likedCollectionsLength, setlikedCollectionsLength] = useState(0) + + useEffect( () => { + axios.all([ + axios.get((`${apiUrl}/users/` + props.id + '/learning_objects/liked'), props.config), + axios.get((`${apiUrl}/users/` + props.id + '/collections/liked'), props.config), + ]) + .then( (responseArr) => { + handleLoading(false) + console.log(responseArr) + console.log(responseArr[0].data) + console.log(responseArr[1].data) + }, + (error) => { + handleLoading(false) + console.log('error while running axios all') + } + ) + }, []) + return ( - <React.Fragment> - <ContainerDivStyled> - <Paper elevation={3}> - <DivTitulo> - <StyledP>Recursos Favoritados <b style={{fontWeight:"700", fontSize:"20px"}}>(43)</b></StyledP> - <StyledHR/> - </DivTitulo> - <div style={{height : "400px"}}> //REMOVER ISSO - <DivContainerRecursosPublicados> - </DivContainerRecursosPublicados> - <BtnAlinhaRecPvt> - <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 7</p> - <ButtonMostrarMais> - <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> - </ButtonMostrarMais> - <ButtonMostrarTodos> - <span style={{color:"#666", fontSize:"14px", fontWeight:"500"}}>MOSTRAR TODOS</span> - </ButtonMostrarTodos> - </BtnAlinhaRecPvt> - </div> - </Paper> - </ContainerDivStyled> + <> + { + loading? + ( + <LoadingSpinner text={'CARREGANDO...'}/> + ) + : + ( + [ + <React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Recursos Favoritados <b style={{fontWeight:"700", fontSize:"20px"}}>({likedLearnObjsLength})</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> + { + likedLearnObjsLength == 0 ? + ( + [ + <> + <DivTextoNoPublications> + <DivConteudoNaoPublicado> + <NoPubSpan>Você ainda não curtiu nenhum Recurso.</NoPubSpan> + <p style={{fontFamily:"Roboto",fontSize:"16px"}}>Quando você favorita um recurso ele aparece nesta seção. Além disso, você + <br/> + aumenta o prestÃgio dele na Plataforma. Para favoritar, basta clicar no Ãcone de + <br/> + coração que aparece nos Recursos. + </p> + </DivConteudoNaoPublicado> + </DivTextoNoPublications> + </> + ] + ) + : + ( + [ + <> + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 7</p> + <ButtonMostrarMais> + <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> + </ButtonMostrarMais> + <ButtonMostrarTodos> + <span style={{color:"#666", fontSize:"14px", fontWeight:"500"}}>MOSTRAR TODOS</span> + </ButtonMostrarTodos> + </BtnAlinhaRecPvt> + </> + ] + ) + } + </div> + </Paper> + </ContainerDivStyled> - <ContainerDivStyled> - <Paper elevation={3}> - <DivTitulo> - <StyledP>Recursos Favoritados <b style={{fontWeight:"700", fontSize:"20px"}}>(43)</b></StyledP> - <StyledHR/> - </DivTitulo> - <div style={{height : "400px"}}> //REMOVER ISSO - <DivContainerRecursosPublicados> - </DivContainerRecursosPublicados> - <BtnAlinhaRecPvt> - <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 7</p> - <ButtonMostrarMaisColecao> - <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> - </ButtonMostrarMaisColecao> - <ButtonMostrarTodos> - <span style={{color:"#666", fontSize:"14px", fontWeight:"500"}}>MOSTRAR TODOS</span> - </ButtonMostrarTodos> - </BtnAlinhaRecPvt> - </div> - </Paper> - </ContainerDivStyled> - </React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Coleções Favoritadas <b style={{fontWeight:"700", fontSize:"20px"}}>({likedCollectionsLength})</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> + { + likedCollectionsLength == 0 ? + ( + [ + <> + <DivTextoNoPublications> + <DivConteudoNaoPublicado> + <NoPubSpan>Você ainda não curtiu nenhuma coleção.</NoPubSpan> + </DivConteudoNaoPublicado> + </DivTextoNoPublications> + </> + ] + ) + : + ( + [ + <> + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 7</p> + <ButtonMostrarMaisColecao> + <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> + </ButtonMostrarMaisColecao> + <ButtonMostrarTodos> + <span style={{color:"#666", fontSize:"14px", fontWeight:"500"}}>MOSTRAR TODOS</span> + </ButtonMostrarTodos> + </BtnAlinhaRecPvt> + </> + ] + ) + } + </div> + </Paper> + </ContainerDivStyled> + </React.Fragment> + ] + ) + } + </> ) } diff --git a/src/Components/TabPanelMeusRecursos.js b/src/Components/TabPanelMeusRecursos.js index d43f9643..1f2b432b 100644 --- a/src/Components/TabPanelMeusRecursos.js +++ b/src/Components/TabPanelMeusRecursos.js @@ -5,66 +5,160 @@ import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; import axios from 'axios' import {apiUrl} from '../env'; +import LoadingSpinner from './LoadingSpinner.js' export default function TabPanelAtividades (props) { + const [loading, handleLoading] = useState(true) + + const [learningObjects, setLearningObjects] = useState([]); + const [learningObjectsLength, setLengthLearnObj] = useState(0); + + const [drafts, setDrafts] = useState([]); + const [draftsLength, setLengthDrafts] = useState(0); + + const [curating, setCurating] = useState([]); + const [curatingLength, setLengthCurating] = useState(0); + + useEffect( () => { + axios.all([ + axios.get((`${apiUrl}/users/` + props.id + '/learning_objects'), props.config), + axios.get((`${apiUrl}/users/` + props.id + '/drafts'), props.config), + axios.get((`${apiUrl}/users/` + props.id + '/submissions?stats=submitted'), props.config) + ]) + .then( (responseArr) => { + handleLoading(false) + console.log(responseArr) + console.log(responseArr[0].data) + console.log(responseArr[1].data) + console.log(responseArr[2].data) + + }, + (error) => { + handleLoading(false) + console.log('error while running axios all') + } + ) + }, []) + + return ( - <React.Fragment> - <ContainerDivStyled> - <Paper elevation={3}> - - <DivTitulo> - <StyledP>Recurso Publicado <b style={{fontWeight:"700", fontSize:"20px"}}>(0)</b></StyledP> - <StyledHR/> - </DivTitulo> - <div> - <DivTextoNoPublications> + <> + { + loading ? + ( + <LoadingSpinner text={'Carregando Recursos'}/> + ) + : + ([ + <React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + + <DivTitulo> + <StyledP>Recurso Publicado <b style={{fontWeight:"700", fontSize:"20px"}}>({learningObjectsLength})</b></StyledP> + <StyledHR/> + </DivTitulo> + <div> + { + learningObjectsLength == 0 ? + ( + [ + <> + <DivTextoNoPublications> <DivConteudoNaoPublicado> - <NoPubSpan>Você ainda não publicou nenhum Recurso!</NoPubSpan> + <NoPubSpan>Você ainda não publicou nenhum Recurso!</NoPubSpan> </DivConteudoNaoPublicado> - </DivTextoNoPublications> - </div> - </Paper> - </ContainerDivStyled> - - <ContainerDivStyled> - <Paper elevation={3}> - <DivTitulo> - <StyledP>Rascunhos<b style={{fontWeight:"700", fontSize:"20px"}}>(7)</b></StyledP> - <StyledHR/> - </DivTitulo> - <div style={{height : "400px"}}> //REMOVER ISSO - <DivContainerRecursosPublicados> - </DivContainerRecursosPublicados> - <BtnAlinhaRecPvt> + </DivTextoNoPublications> + </> + ] + ) + : + ( + <> + {/**some sort of map with a list of notifications idk what though**/} + <span>stuff goes here</span> + </> + ) + + } + </div> + </Paper> + </ContainerDivStyled> + + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Rascunhos <b style={{fontWeight:"700", fontSize:"20px"}}>({draftsLength})</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> + { + draftsLength == 0 ? + ( + [ + <> + <DivTextoNoPublications> + <DivConteudoNaoPublicado> + <NoPubSpan>Você não tem nenhum recurso sendo editado.</NoPubSpan> + </DivConteudoNaoPublicado> + </DivTextoNoPublications> + </> + ] + ) + : ( + [ + <> + <DivContainerRecursosPublicados> + </DivContainerRecursosPublicados> + <BtnAlinhaRecPvt> <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregados 4 de 7</p> <ButtonMostrarMais> - <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> + <span style={{color:"#fff", fontSize:"14px", fontWeight:"500"}}>MOSTRAR MAIS</span> </ButtonMostrarMais> <ButtonMostrarTodos> - <span style={{color:"#666", fontSize:"14px", fontWeight:"500"}}>MOSTRAR TODOS</span> + <span style={{color:"#666", fontSize:"14px", fontWeight:"500"}}>MOSTRAR TODOS</span> </ButtonMostrarTodos> - </BtnAlinhaRecPvt> - </div> - </Paper> - </ContainerDivStyled> - - <ContainerDivStyled> - <Paper elevation={3}> - - <DivTitulo> - <StyledP>Recurso sendo avaliado pela curadoria <b style={{fontWeight:"700", fontSize:"20px"}}>(0)</b></StyledP> - <StyledHR/> - </DivTitulo> - <div> + </BtnAlinhaRecPvt> + </> + ] + ) + } + </div> + </Paper> + </ContainerDivStyled> + + <ContainerDivStyled> + <Paper elevation={3}> + + <DivTitulo> + <StyledP>Recurso sendo avaliado pela curadoria <b style={{fontWeight:"700", fontSize:"20px"}}>({curatingLength})</b></StyledP> + <StyledHR/> + </DivTitulo> + <div> + { + curatingLength == 0 ? + ( <DivTextoNoPublications> - <DivConteudoNaoPublicado> - <NoPubSpan>Você não tem nenhum recurso sendo avaliado pelos curadores.</NoPubSpan> - </DivConteudoNaoPublicado> + <DivConteudoNaoPublicado> + <NoPubSpan>Você não tem nenhum recurso sendo avaliado pelos curadores.</NoPubSpan> + </DivConteudoNaoPublicado> </DivTextoNoPublications> - </div> - </Paper> - </ContainerDivStyled> - </React.Fragment> + ) + : + ( + <> + {/**some sort of map with a list of notifications idk what though**/} + <span>stuff goes here</span> + </> + ) + } + </div> + </Paper> + </ContainerDivStyled> + </React.Fragment> + ]) + } + </> ) } @@ -118,19 +212,19 @@ export const DivContainerRecursosPublicados = styled.div` padding-left : 15px; ` -const NoPubSpan = styled.span` +export const NoPubSpan = styled.span` font-size : 24px; font-family : Roboto; font-weight : lighter; ` -const DivConteudoNaoPublicado = styled.div` +export const DivConteudoNaoPublicado = styled.div` position : relative; top : 50%; transform : translateY(-50%); ` -const DivTextoNoPublications = styled.div` +export const DivTextoNoPublications = styled.div` height : 360px; text-align : center; width : 100%; diff --git a/src/Components/TabPanelRede.js b/src/Components/TabPanelRede.js index cebbf197..e3f3aa61 100644 --- a/src/Components/TabPanelRede.js +++ b/src/Components/TabPanelRede.js @@ -1,11 +1,15 @@ -import React, {useContext} from 'react' +import React, {useContext, useState, useEffect} from 'react' import styled from 'styled-components' import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' +import axios from 'axios' +import {apiUrl} from '../env'; export default function TabPanelRede (props) { + + return ( <React.Fragment> <ContainerDivStyled> @@ -14,7 +18,7 @@ export default function TabPanelRede (props) { <StyledP>Seguidor <b style={{fontWeight:"700", fontSize:"20px"}}>(1)</b></StyledP> <StyledHR/> </DivTitulo> - <div style={{height : "400px"}}> //REMOVER ISSO + <div style={{height : "400px"}}> <DivContainerRecursosPublicados> </DivContainerRecursosPublicados> <BtnAlinhaRecPvt> @@ -30,7 +34,7 @@ export default function TabPanelRede (props) { <StyledP>Seguindo <b style={{fontWeight:"700", fontSize:"20px"}}>(1)</b></StyledP> <StyledHR/> </DivTitulo> - <div style={{height : "400px"}}> //REMOVER ISSO + <div style={{height : "400px"}}> <DivContainerRecursosPublicados> </DivContainerRecursosPublicados> <BtnAlinhaRecPvt> diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index d8fef866..e39dbe78 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -39,6 +39,7 @@ import TabPanelColecoes from '../Components/TabPanelColecoes.js' import TabPanelRede from '../Components/TabPanelRede.js' import axios from 'axios' import {apiUrl} from '../env'; +import ModarAlterarAvatar from '../Components/ModalAlterarAvatar.js' export default function UserPage (props){ const {state, dispatch} = useContext(Store) @@ -46,6 +47,23 @@ export default function UserPage (props){ const [value, setValue] = useState(0); const user = localStorage.getItem('@portalmec/username') const id = localStorage.getItem('@portalmec/id') + const [modalOpen, handleModal] = useState(false) + + const config = { + headers : { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Token': localStorage.getItem('@portalmec/accessToken'), + 'Client': localStorage.getItem('@portalmec/clientToken'), + 'Uid': sessionStorage.getItem('@portalmec/uid'), + 'Host': 'api.portalmec.c3sl.ufpr.br', + 'Cookie': '' + } + } + + const modalControl = () => { + handleModal(!modalOpen) + } const handleHoverAlterarFoto = () => { handleAlterarFoto(!hoverAlterarFoto) @@ -97,6 +115,10 @@ export default function UserPage (props){ ( [ <React.Fragment> + <ModarAlterarAvatar + open={modalOpen} + handleClose={modalControl} + /> <HeaderDiv> <ContainerNoPad> <BreadcrumbsDiv> @@ -129,7 +151,7 @@ export default function UserPage (props){ </Tooltip> </label> </CoverContainer> - <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}> + <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto} onClick={modalControl}> <img src={state.currentUser.userAvatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/> <ChangeAvatarDiv style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}> <span>Alterar Foto</span> @@ -198,11 +220,11 @@ export default function UserPage (props){ </Paper> </MainContainerDesktop> </div> - {value === 0 && <TabPanelAtividades/>} - {value === 1 && <TabPanelMeusRecursos/>} - {value === 2 && <TabPanelFavoritos/>} - {value === 3 && <TabPanelColecoes/>} - {value === 4 && <TabPanelRede/>} + {value === 0 && <TabPanelAtividades id={id} config={config}/>} + {value === 1 && <TabPanelMeusRecursos id={id} config={config}/>} + {value === 2 && <TabPanelFavoritos id={id} config={config}/>} + {value === 3 && <TabPanelColecoes id={id} config={config}/>} + {value === 4 && <TabPanelRede id={id} config={config}/>} </ContainerNoPad> </HeaderDiv> </React.Fragment> @@ -279,7 +301,7 @@ export default function UserPage (props){ outline : 0; cursor : pointer; ` - const ChangeAvatarDiv = styled.div` + export const ChangeAvatarDiv = styled.div` height : 40px; position: absolute; width : 100%; diff --git a/src/img/Bolo.png b/src/img/Bolo.png new file mode 100644 index 0000000000000000000000000000000000000000..509d2acae8705430a4707bb88fc07bd04ae33999 GIT binary patch literal 394 zcmV;50d@X~P)<h;3K|Lk000e1NJLTq000vJ000*V1^@s6>A`f`00009a7bBm000XU z000XU0RWnu7ytkO8FWQhbW?9;ba!ELWdK2BZ(?O2No`?gWm08fWO;GPWjp`?0T)R` zK~#9!%v8Y<f-n#S8<4kt@a;o7fUyEgh#jN^?7$MB0%<_S4tVGvAO5uhyki!}VG;tG zalDxwa&wo>v3H46Rh83)$^PsUa#J2-<d`icgww-Cni5@R)EN;(^f|(P5d7P6e%Ixj zDid$(F=5q}Y$EeozW)u`7Qe@KB_tnf2Hm*2fV9d@4d~O&jGI8Du?@1`R{thWmFU<| zV=X1gkhwJ7-0q!)!e%2>WW$72&2(gILaK?Sx)_t?3Zjez6^czM#8$;hZh!~f0!(~? z0}5<v5AZ8SzQBFu!xJXsu_!?z5o|`}geQn&5!Q>=^~zC5T^T!}1^qWa>E?fsB^G%2 o&C8mL9w=VbAy(38lurQ$07q<+GPoGwnE(I)07*qoM6N<$f@Uk9nE(I) literal 0 HcmV?d00001 diff --git a/src/img/loading_busca.gif b/src/img/loading_busca.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ce6d59693025fbd428c063f7f565a858c20d4db GIT binary patch literal 10901 zcmd6NcT`i`)^F$#dT)XufdHX|PC!7Zk^mmXLJ_5gE+934N|z9N@4biKJJO|h0TB=o z=^!E~V9AH)-gD1=<Gt~X@xJ^1c>ABd_u6yLHP_m+{`S6!)IunjI|3X5n>qk@`E~;5 zAAs>SLf13G>MKHyH22CbA*Pft_$JL^tRr)!^wTNf{<D>dPk`>Xd*6RN*Xa8C<znvJ z#pb(Xz|cz9@wb@AgM@FN0COM9g6BN8jtE!)p#R<74+o#Nz7e)3V)wofQmznci~!T? z<Bgky7(hRMoiLg8@=iZsar;frZXRZe@cE=J_ATMldxDTLVK9==>_8~JNm!^NRJ<Z= z>=Lw|66Dc@z-)pQme4v(n0rrfOCV&`1G*NTY<>bvt^)>^0KJQVnGZobp8-odfLHU1 ztNY3OUkLsHK*t<`Kmh!IeDD#dZ)x7UtFC%mQ%YQdgy>S$%OOL(+aL{dck|1$(shiB zxupZz9b|#Fv2#)ee`<RL2H9CDgAHW$B=lU=(YAKlKCbAyKDX{!`Z!oBSb?vrfRr$b zm?thz(C+3S%o9f^H${vx*xbt50<Cy?{d*V=2K`Cm?w|}-{rv#+droy{S2RdgTu#hV zLQWneuOKcdD=#l2FA9>9kd%c>NW-Ni#H6GZWh4}3q(J{Xz?ZYRT3IXVYiRv*uFE@R zu&ukhiy|EE<>e*rB`xmkY6F*4P*8wNNWrC~#4ahs+`OIK%`sw5ZjiquXrSFJUF}@l z?VO!Jza^SmID5D&gD*Ax#}b~n=;{4Su#=nkp9>PVbbbQIn7hCw#U<cRp8Q_dpVV&d z`slya_&-v+-Sc)q!}ZZ_&K|Co=u2|QU(A<#_uo(SoA6Q_MGa?5k0)p+ccg|g_;N(t z%FaqrP7<LZt0ASJASbOVDXA%k&_JkbX{t&~O3TV>$jYey#fx-ub2oRgME}KW_ct%% zzvWd_cSW1KJG<U<c6R*h?cKI@c6WBOb#?)%tN;17Ktcv~PFBudZo<E}_n+FLUF|&4 zR$8vkPe6a}kD}eb>F^KxuyVG%)WhX3af%2@G#X*9AStFGCxsA`ltjykT}BTHF@%JL zxrBn0q$R>i2K-NHm%RVljsHLz{8C}~Zv*%@gZOLc(#n2c{>!{CZ~o;VXs1iBaJ@8t zBEqkqKfYg_pMCp!dh+G?^U<fngZ;hTo$am7j~gG>*H+)JEHAxVe7i6|_hxoxdTMfF zd~9@NcxdqTK!0CvPj}a=&W`rB)|Td`#)kU3+M4RB%8K$bd}&E>QDH%TUT#iyR%S+e zT53viQer}UTx?8qRAfXrE({y`G9)-CFu>pM#q(#rKHeBFPY-uD*QYMdPEQ;i?CorA ztkG7M7UpKAj~|&lG&V9ccyRyTUHv<^|G1^6tAj#n-_+97P*+pEaa~1O>6)SfLS9Z* zMp{Zz0xm8lDgqN05`+ryL%@8XtGql{xVbnv*x6WFn3)(E=;>%_sDV_J6y#*2B*d3N zgzub`iUptp5d9tceusJh1;Jk@Feo_WWhgcb7akEA6&({B7oU)rl$?^9mY$KBm7SBD z!bDBZL3{;;FDs)XhLCfy=G8|radDKEx3#wulh-x$1TyikbPNu)UE%2N&E_H=W~n9z zT~|@LPF+|;OgD6ehkhcBo~Lz$qc((f6-755!~_z4-NC{1F^T+B`IRmP<PpUmk8>%w zv{q-D=$WwY_$xAZPgZ$FfEz-2AJ8C6bxo#%pWLstb74R>GK4Y6m6d|wDzgV@`$iCi zq=H}R$Yzys<Pk(^z~nfm5FaICL{`>iAE1t<%b@dkjRN#)T{G|i&2|?~Y9WkHf0P6y z235r9!Z^*fp8%1p1W{P`QNx3Ucyi8wBYUATSZNHeS+k-1?CO1Y$oYNZ=E;@#gyG5_ zq5Y#NWYT-6emGm@_2E2Gks4t;qW2mk5H=?kuj5@^ubX%6sobU>jm5)SUk>2v`G-*V zq<mry@%+p91y76C;iiK1D1Xc91Y_1i-SF49;^?S+1n_u!8+(P0xNqBK^>=+}CNPDS zf~L~zyvSsdb29^~;$Pxf0^x_U#2IdNb{<HbOg)P<*hk^7bY%G_?5mLdgPUP!Z-uxX z7^fETd*jUtsWk}wwm}$anTY{XCsNrp+2@_?H&cyN3HGI@pIrQ}LcSqfhC<hkER4b< zo@wXs3rS&+gs?fZer8DIb`KHshK1`yLaO80JfurNI}E9!Ka?9^CNz)L{$?J?k&4F{ zg`pvAaT_Kn)$9cVtts9^fv9HhLB=x2-m#ouHv8=y_42^J+z7d0S_b^t>UP0PU@nRw zk~DX;D8qAir#J`KJeZN2WWQTlc!8vJDQVo@EyLfi8#GtDZSTNX#$dizNxh^_RFwe5 z4})7}2I(U+Y{SsdeMW`oh!iaUUUZpbPXUtzQ;$vPsqD~DWBO9Q4WE}?+=^=%!k5nq zdxe}2I=_-iRbPES9IO37zo)o0DWi-k8?qZ$5oqZNK7xJ+uYbz=>It6iN-!xqgdGnc z$_awgt`@6&J9EA@y*2jFj7)hf^~DGHoNKEa1x#I~2IcWeuGhq_ewP&F9Eqstd6>2& zF)o~b&5cjipl3x8%vrWM8C-5cm8~uP961$)sDQsoX(##2FNaTehf;Z2oX(JO$9<Wu z4dYpXUWGC}NU?Q(?lED6uPx{6>Zcl-&!{f;;<w?pu<VaZk*OF%VcXrn!af-Y!9yph zW-z$Jm&$kP7FhgU*`U{aRKx<t>Xp8MMcha10_EOrxi5a5Po-Y``+f(*Ey{xWE%9qh zIEES^134-D$59_UydC|9qw2@8R!04gF9Qxpn*>jr<6E63GkdOY8_jvBQlbbyv4jNv zGz^tX<8{|UD2bZXMx2BGJO=tT;FsfMQJM8nXsVmSSMaAgjqk7;70l`D7r`kr%dTH? zK8-s27LNQudNm-|qcqR2{3%j^El5>!LEA3sh<cY&TT-XmCO8f->0Ey^tj+9`FMa*O zdTai5og-mAo#WTr0|x3R7>A%=+E@9V7F0C=H=SN0{%{f{R_i+tWkTH}eZEr9J$V0V z2r4fN)>lk9g76Q=)lk}I^(sRKCIZQb$XpX7v_ezhjNwEd_%tAW0!ABQ{_i-zPRx>1 z`!UQ8?l*YI=5cQpC_~Nn$0X(u>g<U-kA1G>T_-h)%Dbl-rGb1MtK!~#*pN4b&5Yqy z`h~%Ab5SUv0EHl9X--{FH4@UAVMsx!VmRnCs3w(~Se1{cWqX=YmxWY}FPEr<#+Boz zL^x4jD2f)a6+RU(XzVE*5p!e##+lJ88Dc1@IBulDIe`$Le(I-v!pSHM4<AEb(t{=a zjG#$>_#bh^Hes7CtlKxPEhF_X;%3?G-Tp+)sw}4H0%Gdz8^F#08amsY?4yiONn1h2 z`&umgJQ6@WA|}xCalH&VN4HY%XKIG#<9s2#Qk22)bW*E3bHM*Jy65F*UnL<U<3^U1 zS5#J2*VNY4SC>dir;w60bacMzYTzbGl<a;zIMl#*HI}`-f=`lU_RZY<!rR4nOUv&{ zE4as^!4+Wff}NLw__FmViE?hz-P4eXa=u9RgHK-xK{)~n-L?P`4gj<GS`(f$pNW<g z7SUvX1<YPfi6X@Wu-0gh8X7Ix!uw#1I3XxsDuXeRCb>Zk={6IzER|pn#kDZmC}(0Z z7e88dKaQuX&k!l|%LtbizD!eOC2NS8EzQ9*wc_5y	WUxn978$_@3bl2eq!g%6Ay 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 literal 0 HcmV?d00001 -- GitLab From d9ba289fdba9f490a63af9574d367aac13ee5374 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Fri, 7 Feb 2020 17:47:48 -0300 Subject: [PATCH 10/29] finalizando pagina do usuario (ainda sem cards de recursos) --- src/Components/ComponentAlterarAvatar.js | 216 +++++++++++------------ src/Components/ContainerRedeVazia.js | 72 ++++++++ src/Components/LoginModal.js | 18 +- src/Components/TabPanelMeusRecursos.js | 2 +- src/Components/TabPanelRede.js | 169 ++++++++++++++---- src/Components/TabRedeImgDiv.js | 10 ++ src/Pages/UserPage.js | 93 +++++----- src/img/no-rede-1.png | Bin 0 -> 16270 bytes src/img/no-rede-2.png | Bin 0 -> 72425 bytes src/img/no-rede-3.png | Bin 0 -> 21600 bytes 10 files changed, 386 insertions(+), 194 deletions(-) create mode 100644 src/Components/ContainerRedeVazia.js create mode 100644 src/Components/TabRedeImgDiv.js create mode 100644 src/img/no-rede-1.png create mode 100644 src/img/no-rede-2.png create mode 100644 src/img/no-rede-3.png diff --git a/src/Components/ComponentAlterarAvatar.js b/src/Components/ComponentAlterarAvatar.js index 3115167a..f6ed1c11 100644 --- a/src/Components/ComponentAlterarAvatar.js +++ b/src/Components/ComponentAlterarAvatar.js @@ -29,9 +29,10 @@ import CloseIcon from '@material-ui/icons/Close'; import Profile from '../img/default_profile0.png' const ChangeAvatarDiv = styled.div` - color:rgba(255,255,255,.7); + color : rgba(255,255,255,.7); background-color:rgba(0,0,0,.5); - position: absolute;bottom: 0; + position: absolute; + bottom: 0; width: inherit; text-align: center; font-size: 18px; @@ -44,54 +45,6 @@ const ChangeAvatarDiv = styled.div` justify-content: center; ` -export default function ComponentAlterarAvatar (props) { - - - - return ( - <ModalDiv style={{maxWidth:"500px", maxHeight:"500px"}}> - <HeaderDiv> - <span style={{width:"32px"}}/> - <StyledH2>Editar Foto</StyledH2> - <StyledCloseModalButton onClick={props.handleClose}> - <CloseIcon/> - </StyledCloseModalButton> - </HeaderDiv> - <DialogDiv> - <div style={{marginTop:"0"}}> - <form> - <DivAlterarFoto> - <DivFlowHolder> - <AvatarCircleDiv> - { - props.userAvatar == '' || props.userAvatar == null ? - ( - - <img src={Profile} alt={'user avatar'} style={{height:"inherit", width:"inherit", objectFit:"cover"}}/> - ): - ( - <img src={this.props.userAvatar} alt={'user avatar'} style={{height:"inherit", width:"inherit", objectFit:"cover"}}/> - ) - } - <ChangeAvatarDiv> - <span>Alterar</span> - <input accept="image/*" id="icon-button-file" - type="file" - onChange={(e) => props.handleFile(e.target.files) }/> - </ChangeAvatarDiv> - </AvatarCircleDiv> - </DivFlowHolder> - </DivAlterarFoto> - <ButtonsDiv> - <ButtonCancelar><span>Cancelar</span></ButtonCancelar><ButtonConfirmar><span>Salvar Alterações</span></ButtonConfirmar> - </ButtonsDiv> - </form> - </div> - </DialogDiv> - </ModalDiv> - ) - -} const ModalDiv = styled.div` background-color : #fff; @@ -102,70 +55,70 @@ const ModalDiv = styled.div` flex-direction : column; ` -const ButtonConfirmar = styled(Button)` - color : rgba(255,255,255,0.87); - background-color: rgb(0,188,212); - display: inline-block; - position: relative; - cursor: pointer; - min-height: 36px; - min-width: 88px; - line-height: 36px; - vertical-align: middle; - align-items: center; - text-align: center; - border-radius: 3px; - box-sizing: border-box; - user-select: none; - border: 0; - padding: 0 6px; - margin: 6px 8px; - background: transparent; - background-color: transparent; - color: currentColor; - white-space: nowrap; - text-transform: uppercase; - font-weight: 500; - font-size: 14px; - font-style: inherit; - font-variant: inherit; - font-family: inherit; - text-decoration: none; - overflow: hidden; +const StyledButtonConfirmar = styled(Button)` + background-color : #00acc1 !important; + color: #fff !important; + display: inline-block !important; + position: relative !important; + cursor: pointer !important; + min-height: 36px !important; + min-width: 88px !important; + line-height: 36px !important; + vertical-align: middle !important; + align-items: center !important; + text-align: center !important; + border-radius: 4px !important; + box-sizing: border-box !important; + user-select: none !important; + border: 0 !important; + padding: 0 6px !important; + margin: 6px 8px !important; + background: transparent !important; + background-color: transparent !important; + color: currentColor !important; + white-space: nowrap !important; + text-transform: uppercase !important; + font-weight: 500 !important; + font-size: 14px !important; + font-style: inherit !important; + font-variant: inherit !important; + font-family: inherit !important; + text-decoration: none !important; + overflow: hidden !important; ` const ButtonCancelar = styled(Button)` - outline : none; - display: inline-block; - position: relative; - cursor: pointer; - min-height: 36px; - min-width: 88px; - line-height: 36px; - vertical-align: middle; - align-items: center; - text-align: center; - border-radius: 3px; - box-sizing: border-box; - user-select: none; - border: 0; - padding: 0 6px; - margin: 6px 8px; - background:transparent; - color: currentColor; - white-space: nowrap; - text-transform: uppercase; - font-weight: 500; - font-size: 14px; - font-style: inherit; - font-variant: inherit; - font-family: inherit; - text-decoration: none; - overflow: hidden; + outline : none !important; + display: inline-block !important; + position: relative !important; + cursor: pointer !important; + min-height: 36px !important; + min-width: 88px !important; + line-height: 36px !important; + vertical-align: middle !important; + align-items: center !important; + text-align: center !important; + border-radius: 3px !important; + box-sizing: border-box !important; + user-select: none !important; + border: 0 !important; + padding: 0 6px !important; + margin: 6px 8px !important; + background:transparent !important; + color: currentColor !important; + white-space: nowrap !important; + text-transform: uppercase !important; + font-weight: 500 !important; + font-size: 14px !important; + font-style: inherit !important; + font-variant: inherit !important; + font-family: inherit !important; + text-decoration: none !important; + overflow: hidden !important; ` const ButtonsDiv = styled.div` - display: flex; + display : flex; justify-content:flex-end; ` @@ -224,3 +177,50 @@ const StyledCloseModalButton = styled(Button)` height : 40px; margin : 0 6px; ` + +export default function ComponentAlterarAvatar (props) { + return ( + <ModalDiv style={{maxWidth:"500px", maxHeight:"500px"}}> + <HeaderDiv> + <span style={{width:"32px"}}/> + <StyledH2>Editar Foto</StyledH2> + <StyledCloseModalButton onClick={props.handleClose}> + <CloseIcon/> + </StyledCloseModalButton> + </HeaderDiv> + <DialogDiv> + <div style={{marginTop:"0"}}> + <form> + <DivAlterarFoto> + <DivFlowHolder> + <AvatarCircleDiv> + { + props.userAvatar == '' || props.userAvatar == null ? + ( + + <img src={Profile} alt={'user avatar'} style={{height:"inherit", width:"inherit", objectFit:"cover"}}/> + ): + ( + <img src={this.props.userAvatar} alt={'user avatar'} style={{height:"inherit", width:"inherit", objectFit:"cover"}}/> + ) + } + <ChangeAvatarDiv> + <span>Alterar</span> + <input accept="image/*" id="icon-button-file" + type="file" + onChange={(e) => props.handleFile(e.target.files) } + style={{display:"none"}}/> + </ChangeAvatarDiv> + </AvatarCircleDiv> + </DivFlowHolder> + </DivAlterarFoto> + <ButtonsDiv> + <ButtonCancelar onClick={props.handleClose}><span>Cancelar</span></ButtonCancelar><StyledButtonConfirmar><span>Salvar Alterações</span></StyledButtonConfirmar> + </ButtonsDiv> + </form> + </div> + </DialogDiv> + </ModalDiv> + ) + +} diff --git a/src/Components/ContainerRedeVazia.js b/src/Components/ContainerRedeVazia.js new file mode 100644 index 00000000..287e33c1 --- /dev/null +++ b/src/Components/ContainerRedeVazia.js @@ -0,0 +1,72 @@ +import React, {useContext, useState, useEffect} from 'react' +import styled from 'styled-components' +import { Container } from 'react-grid-system' +import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' +import NoRede1 from '../img/no-rede-1.png' +import NoRede2 from '../img/no-rede-2.png' +import NoRede3 from '../img/no-rede-3.png' +import Paper from '@material-ui/core/Paper'; +import TabRedeImgDiv from './TabRedeImgDiv.js' + +export default function ContainerRedeVazia (props) { + return ( + <React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + <div> + <RedeVaziaBoxContainer> + <StyledSpan>Você ainda não tem uma rede. + <br/> + Veja como começar: + </StyledSpan> + <StyledSpan> + <StyledHr/> + <DivColumns> + <TabRedeImgDiv img={NoRede1} text={"Para encontrar um usuário especÃfico, você pode utilizar a barra de busca e selecionar a busca por \"pessoas\""}/> + <TabRedeImgDiv img={NoRede2} text={"Você pode começar a seguir uma pessoa clicando no botão \"seguir\" no card (A) ou na página dela (B)"}/> + <TabRedeImgDiv img={NoRede3} text={"Pronto! Agora você poderá acompanhar os novos recursos e coleções dessa pessoas na sua página, na aba \"Perfil e Atividades\""}/> + </DivColumns> + </StyledSpan> + </RedeVaziaBoxContainer> + </div> + </Paper> + </ContainerDivStyled> + </React.Fragment> + ) +} + +const DivColumns = styled.div` + display : flex; + flex-direction : row; + aling-items : space-between + padding-right : 15px; + padding-left : 15px +` + +const StyledHr = styled.hr` + margin-top : 20px; + margin-bottom : 20px; + border : 0; + border-top: 1px solid #eee; +` + +const RedeVaziaBoxContainer = styled.div` + background-color : #fff; + box-shadow: 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24); + padding: 30px; + padding-right: 30px; + padding-left: 30px; + margin-bottom: 30px; + text-align: center; + height: 100%; + padding-left: 0 !important; + padding-right: 0 !important; + margin-top: 20px; +} +` +const StyledSpan = styled.span` + font-weight : lighter; + margin-top: 0; + font-family: Roboto; + font-size: 24px; +` diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js index 052084e7..3b0482fd 100644 --- a/src/Components/LoginModal.js +++ b/src/Components/LoginModal.js @@ -69,19 +69,17 @@ export default function LoginModal (props){ userLoggedIn: !state.userIsLoggedIn, login: { id : response.data.id, - username : response.data.name, - email : response.data.email, + username : response.data.data.name, + email : response.data.data.email, accessToken : response.headers['access-token'], clientToken : response.headers.client, - userAvatar : response.data.avatar_file_name, - userCover : response.data.cover_file_name + userAvatar : response.data.data.avatar_file_name, + userCover : response.data.data.cover_file_name } } ) - // console.log(response.headers) - console.log(login) - // console.log(response.data.data.name) - // console.log(response.data.data.uid) + props.handleClose(); + props.openSnackbar(); localStorage.setItem('@portalmec/accessToken', response.headers['access-token']) localStorage.setItem('@portalmec/clientToken', response.headers.client,) sessionStorage.setItem('@portalmec/id', response.data.data.id) @@ -91,8 +89,6 @@ export default function LoginModal (props){ localStorage.setItem('@portalmec/email', login.email) localStorage.setItem('@portalmec/senha', login.senha) //MUDAR ISSO ASAP } - props.handleClose(); - props.openSnackbar(); }, (error) => { {handleSnackbar(true)} } @@ -120,7 +116,7 @@ export default function LoginModal (props){ timeout: 500, }} > - <Zoom in={props.open} style={{ transitionDelay :"0.4ms"}}> + <Zoom in={props.open} style={{ transitionDelay :"0.2ms"}}> <LoginContainer handleClose={props.handleClose} openSignUp={props.openSignUp} handleLoginInfo={handleLoginInfo} diff --git a/src/Components/TabPanelMeusRecursos.js b/src/Components/TabPanelMeusRecursos.js index 1f2b432b..29864d8c 100644 --- a/src/Components/TabPanelMeusRecursos.js +++ b/src/Components/TabPanelMeusRecursos.js @@ -23,7 +23,7 @@ export default function TabPanelAtividades (props) { axios.all([ axios.get((`${apiUrl}/users/` + props.id + '/learning_objects'), props.config), axios.get((`${apiUrl}/users/` + props.id + '/drafts'), props.config), - axios.get((`${apiUrl}/users/` + props.id + '/submissions?stats=submitted'), props.config) + axios.get((`${apiUrl}/users/` + props.id + '/submissions?status=submitted'), props.config) ]) .then( (responseArr) => { handleLoading(false) diff --git a/src/Components/TabPanelRede.js b/src/Components/TabPanelRede.js index e3f3aa61..8a7f2d4b 100644 --- a/src/Components/TabPanelRede.js +++ b/src/Components/TabPanelRede.js @@ -6,43 +6,144 @@ import Button from '@material-ui/core/Button'; import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' import axios from 'axios' import {apiUrl} from '../env'; +import LoadingSpinner from './LoadingSpinner.js' +import ContainerRedeVazia from './ContainerRedeVazia.js' +import {NoPubSpan, DivConteudoNaoPublicado, DivTextoNoPublications} from './TabPanelMeusRecursos.js' export default function TabPanelRede (props) { - + const [loading, handleLoading] = useState(true) + + const [followingList, setFollowing] = useState([]) + const [followingListLength, setFollowingLength] = useState(0) + + const [followersList, setFollowers] = useState([]) + const [followersListLength, setFollowersLength] = useState(1) + + useEffect( () => { + axios.all([ + axios.get((`${apiUrl}/users/` + props.id + '/following/User'), props.config), + axios.get((`${apiUrl}/users/` + props.id + '/followers'), props.config) + ]) + .then( (responseArr) => { + handleLoading(false) + console.log(responseArr) + console.log(responseArr[0].data) + console.log(responseArr[1].data) + + + }, + (error) => { + handleLoading(false) + console.log('error while running axios all') + } + ) + }, []) return ( - <React.Fragment> - <ContainerDivStyled> - <Paper elevation={3}> - <DivTitulo> - <StyledP>Seguidor <b style={{fontWeight:"700", fontSize:"20px"}}>(1)</b></StyledP> - <StyledHR/> - </DivTitulo> - <div style={{height : "400px"}}> - <DivContainerRecursosPublicados> - </DivContainerRecursosPublicados> - <BtnAlinhaRecPvt> - <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregado 1 de 1</p> - </BtnAlinhaRecPvt> - </div> - </Paper> - </ContainerDivStyled> - - <ContainerDivStyled> - <Paper elevation={3}> - <DivTitulo> - <StyledP>Seguindo <b style={{fontWeight:"700", fontSize:"20px"}}>(1)</b></StyledP> - <StyledHR/> - </DivTitulo> - <div style={{height : "400px"}}> - <DivContainerRecursosPublicados> - </DivContainerRecursosPublicados> - <BtnAlinhaRecPvt> - <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregado 1 de 1</p> - </BtnAlinhaRecPvt> - </div> - </Paper> - </ContainerDivStyled> - </React.Fragment> + <> + { + loading ? + ( + [ + <LoadingSpinner text={'CARREGANDO...'}/> + ] + ) + : + ( + [ + <> + { + followingListLength == 0 && followersListLength == 0 ? + ( + [ + <> + <ContainerRedeVazia/> + </> + ] + ) + : + ( + [ + <React.Fragment> + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Seguidor <b style={{fontWeight:"700", fontSize:"20px"}}>({followingListLength})</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> + { + followingListLength == 0 ? + ( + [ + <> + <DivTextoNoPublications> + <DivConteudoNaoPublicado> + <NoPubSpan>Você não possui nenhum seguidor.</NoPubSpan> + </DivConteudoNaoPublicado> + </DivTextoNoPublications> + </> + ] + ) + : + ( + [ + <> + <DivContainerRecursosPublicados/> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregado 1 de 1</p> + </BtnAlinhaRecPvt> + </> + ] + ) + } + </div> + </Paper> + </ContainerDivStyled> + + <ContainerDivStyled> + <Paper elevation={3}> + <DivTitulo> + <StyledP>Seguindo <b style={{fontWeight:"700", fontSize:"20px"}}>({followersListLength})</b></StyledP> + <StyledHR/> + </DivTitulo> + <div style={{height : "400px"}}> + { + followersListLength == 0 ? + ( + [ + <> + <DivTextoNoPublications> + <DivConteudoNaoPublicado> + <NoPubSpan>Você ainda não segue nenhum outro usuário.</NoPubSpan> + </DivConteudoNaoPublicado> + </DivTextoNoPublications> + </> + ] + ) + : + ( + [ + <> + <DivContainerRecursosPublicados/> + <BtnAlinhaRecPvt> + <p style={{margin:"0 0 10px", fontSize:"14px"}}>Carregado 1 de 1</p> + </BtnAlinhaRecPvt> + </> + ] + ) + } + </div> + </Paper> + </ContainerDivStyled> + </React.Fragment> + ] + ) + } + </> + ] + ) + } + </> ) } diff --git a/src/Components/TabRedeImgDiv.js b/src/Components/TabRedeImgDiv.js new file mode 100644 index 00000000..95ab72c3 --- /dev/null +++ b/src/Components/TabRedeImgDiv.js @@ -0,0 +1,10 @@ +import React from 'react' + +export default function TabRedeImgDiv (props) { + return ( + <div style={{width:"33.33333333%", textAlign : "center"}}> + <img src={props.img} alt={'no rede 1'} style={{width : "100%", verticalAlign : "middle", border : "0"}}/> + <p style={{fontSize : "14px", fontFamily : "Roboto", margin : "0 0 10px"}}>{props.text}</p> + </div> + ) +} diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index e39dbe78..89026587 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -39,7 +39,7 @@ import TabPanelColecoes from '../Components/TabPanelColecoes.js' import TabPanelRede from '../Components/TabPanelRede.js' import axios from 'axios' import {apiUrl} from '../env'; -import ModarAlterarAvatar from '../Components/ModalAlterarAvatar.js' +import ModalAlterarAvatar from '../Components/ModalAlterarAvatar.js' export default function UserPage (props){ const {state, dispatch} = useContext(Store) @@ -77,7 +77,6 @@ export default function UserPage (props){ 'Cookie': '' }) .then( (response) => { - console.log(response) dispatch ({ type : 'USER_ACCESSED_USER_PAGE', set: { @@ -91,7 +90,6 @@ export default function UserPage (props){ collectionsCount: response.data.collections_count, } }) - console.log(state.currentUser) }, (error) => { console.log('error while running ComponentDidMout') @@ -107,6 +105,11 @@ export default function UserPage (props){ setValue(newValue) } + const updateCover = (selectorFiles : FileList) => { + console.log(selectorFiles) + console.log(selectorFiles[0].name) + } + return ( <> <link href="https://fonts.googleapis.com/css?family=Roboto:100,400,500&display=swap" rel="stylesheet"/> @@ -115,7 +118,7 @@ export default function UserPage (props){ ( [ <React.Fragment> - <ModarAlterarAvatar + <ModalAlterarAvatar open={modalOpen} handleClose={modalControl} /> @@ -136,13 +139,13 @@ export default function UserPage (props){ </BreadcrumbsDiv> <div style={{display:"flex", flexDirection:"column"}}> - <MainContainerDesktop> + <MainContainerDesktop maxwidth="xl"> <Paper elevation={3} style= {{width:"max-content"}}> <ContainerUserProfile> <HeaderContainer> <CoverContainer> <img src={state.currentUser.userCover} alt = "user cover avatar" style= {{width:"100%", height:"100%", objectFit : "cover" }}/> - <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" /> + <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" onChange={(e) => updateCover(e.target.files)}/> <label htmlFor="icon-button-file"> <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left"> <IconButton style={{position:"absolute",right:"0",top:"0",color:"#fff"}}color="primary" aria-label="upload picture" component="span"> @@ -158,7 +161,7 @@ export default function UserPage (props){ </ChangeAvatarDiv> </ProfileAvatarDiv> <UserProfileInfoDiv> - <p style={{fontSize:"28px", color:"#fff", marginBottom:"2px", fontWeight:"500"}}>{user}</p> + <p style={{fontSize:"28px", color:"#fff", marginBottom:"2px", fontWeight:"500", backgroundColor:"#77777796", backgroundRadius : "8px"}}>{user}</p> <div style={{fontSize:"14px", color:"#fff", marginBottom:"2px"}}> <p>{state.currentUser.education}</p> </div> @@ -207,6 +210,7 @@ export default function UserPage (props){ textColor ="primary" variant = "scrollable" scrollButtons = "auto" + TabIndicatorProps={{style : {background:"#00bcd4"}}} > <StyledTab label="Atividades"/> <StyledTab label="Meus Recursos"/> @@ -242,35 +246,38 @@ export default function UserPage (props){ } - const HeaderDiv = styled.div` +const HeaderDiv = styled.div` background-color : #f4f4f4; color : #666; font-size : 14px; line-height : 20px; padding-bottom : 40px; - ` +` - const ContainerNoPad = styled.div` - min-width : "1170px" - ` +const ContainerNoPad = styled.div` + min-width : 1170px; +` - const BreadcrumbsDiv = styled.div` - padding : 10px; - display : flex; - justify-content : center; +const BreadcrumbsDiv = styled.div` + padding : 10px; + display : flex; + justify-content : center; ` - const StyledBreadcrumbs = styled(Breadcrumbs)` +const StyledBreadcrumbs = styled(Breadcrumbs)` display : flex; justify-content : flex-start; max-width : 1170px; - ` +` - const MainContainerDesktop = styled(Container)` +const MainContainerDesktop = styled(Container)` padding : 10px 0 8px 0; - ` + .MuiContainer-maxWidthXl { + max-width : 1170px !important; + } +` - const ContainerUserProfile = styled(Container)` +const ContainerUserProfile = styled(Container)` padding : 0; background-color : #fff; margin-bottom: 30px; @@ -279,17 +286,18 @@ export default function UserPage (props){ padding-left : 0 !important; padding-right : 0 !important; margin-left : auto; - ` - const HeaderContainer = styled(Container)` +` +const HeaderContainer = styled(Container)` background-color : #afeeee; position : relative; - ` +` - const CoverContainer = styled(Container)` + const CoverContainer = styled(Container)` height : 230px; position : relative; - ` - const ProfileAvatarDiv = styled.div` +` + +const ProfileAvatarDiv = styled.div` bottom : -65px; left : 60px; border-radius : 100%; @@ -300,8 +308,9 @@ export default function UserPage (props){ border : 8px solid #fff; outline : 0; cursor : pointer; - ` - export const ChangeAvatarDiv = styled.div` +` + +export const ChangeAvatarDiv = styled.div` height : 40px; position: absolute; width : 100%; @@ -310,18 +319,19 @@ export default function UserPage (props){ background-color : #000; color : #fff; justify-content : center; - ` +` - const UserProfileInfoDiv = styled.div` +const UserProfileInfoDiv = styled.div` position : absolute; bottom : 0; left : 260px; overflow : hidden; margin-bottom : 20px; - ` +` - const EditProfileAnchor = styled.a` +const EditProfileAnchor = styled.a` Button { + box-shadow : 0 2px 5px 0 rgba(0,0,0,.26); background-color : #fafafa; position : absolute; right : 5px; @@ -337,29 +347,32 @@ export default function UserPage (props){ border : 0; display: inline-block; text-align : center; + :hover{ + background-color : #fafafa; + } } - ` +` - const CheckTeacherDiv = styled.div` +const CheckTeacherDiv = styled.div` font-size : 14px; padding-top : 10px; padding-left : 250px; margin-bottom : -10px; color : #666 !important; - ` +` - const RodapeDiv = styled.div` +const RodapeDiv = styled.div` justify-content : flex-end; display : flex; - ` +` - const NavBarContentContainer = styled(Container)` +const NavBarContentContainer = styled(Container)` background-color : #fff; padding-bottom : 0; overflow-x : hidden !important; overflow-y : hid1den !important; margin-right : 0 !important; - ` +` const StyledTabs = styled(Tabs)` .MuiTab-textColorPrimary.Mui-selected { diff --git a/src/img/no-rede-1.png b/src/img/no-rede-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7d4510823fa703462511b4b7f8f6643a2e72639f GIT binary patch literal 16270 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	IwLkS=<jbBq>lGs{G@sun$5Pw} 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 VVy4qZK*2yD1zD9hWzuFJ{s*y%vnc=o literal 0 HcmV?d00001 diff --git a/src/img/no-rede-2.png b/src/img/no-rede-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c94c169f7caecd6763d628b87e752a45b1cd1d79 GIT binary patch literal 72425 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	x>fn<6#t5m>**1pE$ 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 literal 0 HcmV?d00001 diff --git a/src/img/no-rede-3.png b/src/img/no-rede-3.png new file mode 100644 index 0000000000000000000000000000000000000000..58b934c3bc3ee2dfa597b5386d66434973fca2cf GIT binary patch literal 21600 zcmaHSWmr_v_wFbnf`kf6htl034HD8R9V6W}l(dMnbhk7NB{6iUbW1k~3|%rXAOkbp z<L@8$%YE*LnR)g+XU<uB@3r3bu6ON;(o}y-fJcD`0)YsW6y>x*AS^Br=pN$Hec+o< z^#mcn2d<l<p$7;=`t0B9o^AdVa21H$Q{KQ+$JNHu#~fk}lCg5Nu%=UTHn+9bwl=r& zbsw@82Z3~smE>gJeONkL#SNfB2Hpi9SEn|%ajPH#Eh%ZELVLEKD89b$ZZvrB+8tgT z!qBL66Dl3#oCPMdd$TM}#~7RivR5%4t>rD)AQa^7eQ)uF=uhB&)A(#n<JHMs!;Rq9 zWKCRZBm420pX8<aX`GF%Z5RJk$JGsb+y_5Vu^6xt#Q#I_De&>64|t2T0N&`L@BQ~s zngr{=hpLfcPy8zV6Ch-XnXiCr_8*&rF<W)jvXZ`-<ZG|_(b`hgO)|30=O9pVk4)L_ zlIeih8*}I3kjH7M2C6AvXb4h3p!cGXjMwlBZ9X|(5GcWHSu`g~1fRaJmJ9?^EV0eH z>H1La+)GRFFf>Jj$^kIP_qh7xhp{(R;QE};seg0ql%gXcafGRWW`B_$K1kXnvaPJs z)l~lM8fi^3QjC7DagJq*g<{=Zu11^+#pnMdCx8L-fh^e1EEbDLptlZuw|Dr{RhxW= zto~Vmhj-%N%vnbr`;|xJM0#)Blz9`fFg9C~)I;@Rx=p)XsIHIlYs=;@X<X2tSQJwD znwW$^h~U8+0{J--E=|f_-Ta=ex{gHpSeA#N!N)kcdA7?a_)uH)rl2mPCH^b6){QQ- zGyTrD0Jq&5;`qz9?IDLsYqcn6Q^T{x)IOErqlz)}^(yW=#HJzrc<{==^Ax};X&2v0 z|3Aa40~+0S@ek``<(pFbnqb?Em6g%RSt<IRaHHh28UG&ewzsAoC8CmwY3&kc?Sw!M zOv7F-Og_O{ANaN7gO~i!(!nM!<L}-dJv0Ue!Ai1WLBosNec08VOS_QXXTaKuY)6g| z3(No16L9q+AfXb~K{xy|znk2+?DcMppGh@ss1>38^k(<hpfR(dL(B+${HGlk-_{{> zu%7m77qmr^2)<n1%1iLhvr|$neJdq%e<_evk;S>em4LVoI$3%<T!J3W!pzCVUL{OE zKz;AdlOtx9TRB0Zdo<6WyQR9vcR54|UFe|JkCQG~1LYw15nKwt&1sFaFqH0crXv4C z1M$CX@2n-d?#GO2d5s_#OACI9_UQ$K21Q9{(&uQ8Gxj9B6)L-jHoj_F@CH^FAZiR| z^^*!^n%KV{kZzlJ*c(o^)!RMZaUKvwHYgGLTg|S7#r=Fr`Ye4yG~&J-uY@eavjP&n z&tgwdfdk)-(I?FQt2(W&=_u#cuh4fG@mQ^9e2~aiqHHeevwKO;8ZCaTP*piRoR%{S zR?ze=yZ++p)L|lD(tqtUO2v9L%4Yxc%8|R4of|XVKV0Op&b9kHhHIiiDc5hj$>>C~ z(!P-@&6QCccP85UvorO$e%nKBFZuZ1mbd<^lS_YPorU$%Otiq`zb8SE<+qgV7g|-5 zHmyEm;`(%+E8B~!QY{|e&oBJZLrFsfBC1{a>qa`zTo+7r@Sh!dWF?!5(DQd_wZ{3} ztBjNkk3Ax+ywxGEY@N^+Q6>beo1P*u%EDHYU8pC|{-pg*PQOhox~9oUQdi%5tiyqA z2n2_=6#Q)J3O4TyG+<xIGxLdEr4ZI?{SCu13j5U)L&=q&J3>9N9DaM)Ogm*3Cj`oP zP`br+>azR$aJ*phfHZl+e0{~sM5Sjv-!yP~Q#8(?(4gxxPp4n<nIl2!13u7o4o^P; z-sYv@^L+5T^qycg*koUdurLR?u)0!0Y$f>CCh!_|?vPwXL?0a+LP<OJvAGSWcES5k zOvF;@HFQ5t^KZ@0iAHCTm2pIJCx~u9fW%N(WZb0j0vza~PnQDsr*wXS9`Rqg5$f`G zJFh!2;jGjU(me!Arpmp==%zB}n`-);X8Gc98DN$L&$rjPx${y3+N~<~Ro8x>Xv@`Q z7N1OcZJ%uMzxIp`xF}n<Z?zuKx_&rBb1y-qOW;n`bfiM_Z$&Zp^9~m?wdx_Vt5sx^ zWiA3{*d@MeCR1I_wPs*7ZHCc#d-r)wGAhqICVC=(s=0t6dMv}4TKzf;X=j7~zM*fs z)nOnJfVu^4kRln<`;gdi7rg(CImjoKdqU)T6^ZI+3v>#si=Dow#WBBn<+2P|k~#e3 zIV&^!d7rGa)WY=W+CAx?2?E~0WU}=~C6^tPZco~RZeCvVpQyL>@t>PYwp+klRA?Pe zlnw_{GbX+)e0OGvvY1vAR9>6TD*(Ty*`sK2x!Ev5-Q1@GRs{?V79q=7ApH$2l15I$ z-s#R<KTQ8c$9%}q*Xd+_Yvgsm^6|Ax@cWwzfwfnGGDDe5!_DZBw}f7hwU^OqV8R;& zZM;O*qR;GtDEwyT@GWHj^zp|IuXRk*<TGi6&{zfP7$pzjTzvN0Q@p#aAD20-l_Obf z2VPO<QB7<1H+EhG<hfRn7Sky`n=TUBnQ*aTSbJP@KgbFO_yAHiCfBu@$wQ@Au10## z=NQd>5eEPj(&=w<Uh%V-{r)9>tdCO1h~iW4oO=4rw#^~mUBG8t7TpDyxxdgwC-yMO zb{!}FyIcEZ^8pxh{Rx-IY<A=94&7d@fAspcTO)_Uz2!Qe!+EgeS-Z{2H!V)HJ=HDE zx6K??8XY_qF(V#;TL256GeL^v?`0Qp%J55eKWtSY!+Ie-7u8O%{W<)@bM7XjgvW3N z?VjK`Qv|wgQMc8Hw$=SqJHbeMoJjDBp?@WS=5r29+KYK-sSZI$_B!Dgi$R#K>tbGz zVX^aI@N69YlI{VFY0Gt<TR8|c)g9c7EI0|7?E1Q9VC+4%auEK?QT@d#kXZ|*XlBiV z8oF*rVr)y0#HJy?bjDWiW+wALT%FD8jm+=N!7pRWo=r+;rn!<CH?;DHRNWF?!oJbo zvr5dTahi{RagnYzJGA@FPGU?^MAhO45Z+CB?eN19N{C=Y6r;5_+7vHnR`9p-IV`r` zQL_E(NfhkdwT3J9Mk~mhu1Jrg4*-$m9u^!SIP>{oO(uAZ5If---WUih)6&TK@mz4w z-5aEdcHfyn_SOmJN86i2MgsbG&9}FjH=R8=p`EbO3xr{+V`a>F1L&@;4$<(qbe|^C z-)}WO=ZL1x)Zp@`+T%mW>j%VrQ?F{m#g{v8yRZ??QLA`#J*IWXUokEaTVqZSr=8@k z_ZAVwKt4>=_1HRDF6!1n#-=iYP5Ibq)$c4*3P^qv?{Z{~YfPLIS_x>DPF-EX;Hreg z>%PsYfxx{aAm#igHC+&ebUVRKWPI71jqJ;u*PDm~=7UNru5z}q9xA;Ao|Qv^U=$<4 z^KJv-yIM+i;?oCNMDz(y`?M7ZQ#fmKC~z$f6EraWb+-4c>V;9va}|nH3q*vC4yy&5 z3R6Y~Mj82ifA2(ZY`w7&tytt*9D*w$znbH{;cMQj>vP!?mYtwMrDbu9RParUU(k%i z5nJW$QEJ__K{Ljop_fO%`QUiYmBV$V!{XA8K4BaFJKZLTS;vEl_H?|YR4LYJhW@SS zsfl2=DLx&4pnZ_(k2>{Pmb$t@Jr_Qq=SCEG)r>aNKNt1`+zrj6`WVXoIQme}V>Df3 z2)5a5(e$CV6zswx2;PXHt7F={qbakwtS?}rcTx?NjnI1d+Hg_{Zn{onu=oPzHws&h z_lq0Vx>RiQNtO+fC&7vUd}3mp7{s>@Pz{_)Qt{VoP5`GNs?8|sR{sO|Zd=h#U>i$Q z6$7m?a~U6@V%8Vl6&GKw%XQ}HlJDo$fg*-LPPf39cKO^CK`OjAK#6iW{N_3tqk^c> zI|7K`Td&UT@n&P;v5KsU)crqy!49XC?tA(rYgQc|^2A#BXDcC^g!)me@4nm{BuJmA zX<0pPEenK?oayO5-!%?VMc3rA)|Jhp-;{YYQqqw0X64noR<(WYYW!@(%i!0<I8fP} zGREB2-PIAYN<g<fl+WkGQ`~)6sO`$PvrIbP;x6q{!)2;#$d}9h8}GB(DFvCk9Iu)r zezOWmHWb`=xzl4K={KxIf|WpdVj}48`ZM<vK)<$iU-lv)c{^(;YMMJ8PKoXV3bJZW z2y7Nn(N-TXqz9LkWQtZB0s{H?f+(zc+@`gDsjjXj!0<XV2){ZMQ)cXE)EN?d;;uGO ztH#m+5T&3%axrRY!oSxyJHglS0~hv3SlidLqU7_&cdk3L>Kd--<Fbc&c87s}7v`^p zMUM1m_2IMBKcXyj5KhK^19#3mnL&*$7+HetC@BYyrnL^wH1Ss7Uw1w?#=>F|Q=N6S zo&*5-hlc}bDmFq1+u%G<>-TU}Ik!FE@;d~wQ~U>?aS{mjn{LO`yY$Ph$)#7;q$Z|@ zkg=QtajK<Qe@*ovFI?RfR!{f3;}Ea&<l8L7uaL{r($<Q1K^mAAcM-t+ae%D4N=~Ak z;%^*191&0orjwf7Zc~1#ldc@rvhGRS900p^DcQLlp@YYiYH=Y(b*yN@GVX}#2E(KY z^Ua--hN)Ep)^%zkQHd2gD&T%B^+AEYJ@e;Im4KDO4PD}^B2FVic~3nS01(ihNuOSO zLz3Om>_7E^zlwVzj@GKy>(||{4Z`P5TwG0oLEc^_J=<e32h*#rPCln}TKJ&)wr3kP zJ1)o8)k7bSJC;0y%Q0yWvFn7=C>=*?GL6T`l<=;;=5)xOc&_4B{;+CuP`5TAyy?w; z3oAxWeLZcsF<w8S@FrdEw>Tt)QrWM<bH`;a#XwfIr^k+y-8p${s9>_!9&H@}{KZqI z2M79MiF{#6yMME~Cct^UlJwURn(wl2|2S-uNivnE(aExau{yhB<k+$sOFC_7Zeyj; zktIjY6)n*T@Ew7I=D}N34T^Lw1xR|oq(yv<O{RT<|N1CI2f8w<I(;kiG0AC0-}9kM zX_jEWN9R8TKBc8PnbByqHb+Me?SD8rYHF8S!k^lI+=RN1{_#sF9z3S$$Y%!DL2dUn zB;BrT^-QEbR^H!!L!y${^fDOrqH9s4@!IEx>8w90$T0J>th%d9ydS`j?a$9#0$tJU z)RzU)f57nyJ&PMM>(VR%Q=}`oy^5Itton<gR)72vP7`K2Z)KZe_5GlNRcJurMTl(^ zKs}e%3qG%3&%KOp`|&=ZlL%y}ANcjOnmf<iH*alTd>>nKM#9b8Sc~sCJL$Y}_u5+} zlwnezBZhd$%fs=48_0hAXnWc{<hPNLHJpz}hycd}9ENVB;=rX2*4B8F{(NMLYqNmj zGnj>8rsBVi50vS|NGfi=J#A$2KE?sPf2L>5dG53WiLqC5Z^X7qEc&+K6ja)&AIyyG z7G1$au8Q`5vvLo-)YnhZ{3ciD<fUdfsj(&;{DnNIqt@EbMFA)dMZLo2tPp9@$}uB& zZ`;KkoxSS(=W&lqmHsQIe6Tpa^}87yS)Uhndc<JJck_uQEp+V&vhLHkRU#9f2?BjN zLM%QPgGTG}Z@2h5I{DPtiPp3yw-wj5Ukcs<Wh;H0hPT{&sG$Wd>F@Z+E(^m`v>@Z| zB#ID3rX!n(Eba3`7#N#!#4DA(^4*$P7w%s3WRh|^|J%(!{2V0a7200IS}-B0#o@Es z;W?*r_(CA#Z__=HqL`9pd~If#hNVWkc<`Nz<7STQ-pNeWlC%uTh+cNCY;5;(nM92r z^0%uxA*DmGVJlj{a#vdu^wIuX@hB#_gaE}#<V94jH7o#NU4^EBzfyi+p#ij;IK#Fc z&!LR_k8Q*<t>`bB^nOfX%@<QFP{zaE`E-en4+a!BE{>-$&bA6;uO$P@?}g(4Ibq?= z!039L3?Zsz11a^+IB%Jp1e74cm2c{PQ)OP%vF2C2HRzA))O<d=olHr-lFE`+Nq9j- zX%=knyM$%IWTgp`4*!cngd0b!Z`_nhFu$V^``X?ZY|X0$gqZ`m_T<tDxi`D&TU0GE zSCiW)2;^z+WEk2tb@-0uHWaHGV3+o*vES2E{s;!W`@$~di)6BlsFAh6Lr)hP>W@{- zXxLM2pZsn(nhpfdGFsn?-UE$m_812k3NI`O#owKa#qaMH$XnyjxT%_<TpTIpv8w2V zmV!2&2$*zCV&E9e#TsEwe-P+<r2P>9v&bIfy;Gle(*IU0tN663^k(%e>VW<6A+haE zOewVG#Za!qNuvv2EE@FjDJN@#RF@46cnje1Y=N@Hw;u78UTy}=->kPU)8{yU9rVvF za@;lA&3Qd`++6$n;Vsxm*w<O4=qCuIpl0dbW6VOS;II(V|0GI|B}|F3`tkfsV8QU& z>Z}LTMOp-5V{kJ}xO(~K=h8LI`|%Amh%aaI{Wmg#{`;Y0Ry>ph)7O*nR0kcEt;SOF zh{f#&_663Wf@Ms~ih*I_>Q_k^rgcEKt#+GRU%*<O@aBC1Y{lj>V(0{vaQ(_`_VBeP zolMoB6I&gbTKN8;l`v<G<2j0UkK$J;2gi2WTgx4r==W>@-%?xuc~>y)+jAHJ;3)IK z@#)pd<$&e>xcO$Z1CBoxsGd9JISKwl+1xzod~N{=a4Eohj47RtHu?xm{G@~^Sju{- zA91457|-D0zP_gO;TYk$RPJe0?nTkP;I@)o>Smt?4?91h%jU}6*<Yf#Aj7~pZkF;! zL#NXHa++ivtL21zDg_di;LCNdS8C2F<lCWPb2oEt?e3sK?B{w7tEvqKrSCOVXPL91 z=jQyi72LL9ENPd$a~z2uJloPFBToTJt8eVlu~;)~*YU0EOCSNLHKqTPNw_@82st?0 zIC+`!Z=WcH3<S?I11E4O0KWie%iu<I9b3^EB3${B4+PJ6&#<Z9GC>n*v3M{p@73C7 zAH1fi<+Sno-bX41tuN8Mg$8l2yStopxYoQe95L7ROwe8sov;$&`BZQ|OBz2WV5n+k zx!jer+;ZZ+G$AGal!6k;$a8?0t>@?JU>OI%nw$)=uiUUdn)DwZMOuh#1K>d!<J4Nm zX=^w-KU!mxe_wk1e9|0<8I_=b%N#$Qxparr$-k>51Q&BSppPtR))diIQie+j$Hwlv zIR~wbLYGV+I99(OWAt{``QZqSSx%q*Q6<d!OEnSbn%+d3gg$yZXT(;2#YiVB))CV> zoJ2`FQ;%~G&>5|p#q`I<+XR?Ij?zr1k^r%>kj$P#!^40<`^h8u3nD^%5J(_g@w1Ml zpR?p#;Bwt~$FO-)b4P(2%QM_BQ_pAK^JEZU>m^S*2xP=QBzy+SkRgmwqDjHh;z*a6 zUb#9hqNXmu?`-YuJa^EU(vYHx`tWJ;$&0)}8EXNuBb%aChC2^H0|fvg{NnZAMZoUr zT(xZ17o$pGLkb$QN+n&wsDQF_P&lm0K0(@sk1vTF&`BdL6iI#PE@FCeuNtqc2T=jg zs=YM%hSI#C@K5Hx#c*jp3jC56$$bLUNJ~~DYmg%1v8_!1<p5pu(>}zA@oK2gv1{Nm zZN?9;az2Xg?yo0-vy3_>aa3YhAqi5m1hw)u(*p0}kvE_2DF{B`G38K@Z5>l30p_G5 z4k<s!G_8^EOL*T@MUPOjmF0QCzwe*p$nGog3nkahWUX~S21G<T-a;}hj@nkNg0X@2 zGX8|XntFJ0L#5+US_L;-wTLP&Il*&14-^VP-1ndP$noY7THP(~tAdlQfxYf)tB-|Q zv*MahC-<Z@&c#0c->d4Xd#;t|zbAK|kmw}^0`u+>wAMK#77Be?`pe3*nEC%+`sFu3 z;n#gcuG%||P4bjF&_FO<r7r2Gy(ke6VGRxWqsb$Xi>>V<Shkg=Tu26N{J&kOYq?)Q zU1m}ia1UvBh4VJYIc?U&v7vmRKDw~6Mw^Ff{~WulmFmkw*%D4<Za<(_M_S0$slG3L z#Fr^oX`R_9c_M9xk`kbb!pH9Ug24kV?q%+Dsn>Ro9d>)nIw^;;gtJDijrxZ}6U7VM z5;Mi<?@6a!|H#|HX?r+x9xj^;fK!p`Gp*^5Rs;`a`H_=}27P4hAW*$PL{xiLJ8SY& zE%xx@&-96z$A;UulR)lY{6YOF5Mbqe$4w)0yjIOWzT@jF%fEUW%wi!psfY{WKgIFS zn%z?YLX2`adQO*wn*}CJVmL5vjwpIoLqr#C4!KY6R#MGP(v<a=`r$|NOTDYFa|o71 z_N=z08~C+D<@PP#&6>=*9nw4^XAL&nM*?tFVkTaWlzUr}56C`XgZLJfG2fR>?+u$5 z?gfONVe?zwRzK<acu)FaIlJ<KkRKo_U_CxW>O2gUQI2N`ANpgf`VjB4q9ur@2Z-e6 zxs<r<9vVZztEBMg^J6{dP4o2hDHS;^MnuZc``_7*KH8(RlVx3u49aNBH`@@KDu=^9 zVmL(jD0S2)S`L`21Jr1bC51LMd*b3OuxkL;R`~hELXKC}fW=bO9{bf(6&VLiPRTyk z7AS!TcwRP@_p#X!cboXS!CXs$_h)Fm_H?Fe=cFX2J$~K55HZWxFteS;@-^hy&?8$_ zlA<k1kX0o2m=wP!=AQtkrQn7J^wkztKu@1{mAV)#7$<MdqygwV2>uCJoyuxk)ahN@ zh~TCZAc|sKT%4;}C0$o$S31vNp+LhSg+U8{tAQ+*ynzY-3=fpKSr2^%s9SgCJqAu$ zI>=>Yj7v?NYuC}EFe$XU3Xl<49$FE6A_G}HiqgF5Rq)oW@mv_lSTyG~6|UWBLp&8d zy1RJqpO?<CdYRa(mBfoX*z1D>8pK~;o-Yi(9tt0x+*t{7_zehMW$TAqw7bzLNFf=I z3uri!!-j|K%fo{{(EA<dLpPU6`AUF7KjqFR0i>i=zhcW?+S%+c!gFc4V6XxSR==1s z!##5R#LTXMNmYETkNCd{Kf8$iD$R$C{6qmIfp2|#u$!z}CWV%&=Z9OM>F~eh)bEqu za=Z*976N~5{fhk^m9v=xf4C(S@FoaXDTMa*Hj@|ka})Y_fBuPL)jtyT-jR1aO(neX z(Hr$PP#qu+pYN`#hXYnS{EW27`1aF|BzxaWaX+e;7!RkVf)TM7-x<Xc{%-PWj&^dI zOJi#z4p1w^HzlVdTbCSsKdg!?cr!+uCpp;^y(G)~A*39W7-s=W5TrSvVG*$s=h>Ss ztzxZ9>`~~&wpUCGRNw}4@J;7~KzwfkA!VUJ;jm67O5B%5LaOaaU#N#a6!Ef%S%Ck! zB~#H4<z+mORe1F-*J40N``Do?OJiDw+G9)lXrSl7QI|m@GUJ<mLa12gX*#S2aCc9@ zC8K^ksV1Yu8<$S!#nA=K;AMcUHnzC*(hhk>*#VLU1IEtTi&tLw6$K0Ly}lP)7xBC{ zg5>)y_@Kqjaoq-C#xEV+b%P2+Px=xlN~XmgewlpFVm(6+8e|J@wsA4JG%{2LlHE)B z(f<7rg@>U9qYj&GN}xe5#uwA^6M03atHI`KtbK1tWQP}kOIq`^`0^JOpJ07Fn%1-m z3>fP$c2q9viQ;s5uR6~=db{exL!nQ{5I<@v5j-ds(72tl%QF<PZyeOkJ@}+{kQRZg zSorDV`eoFdS7Z;5&*Se{uT`*Db*TXC9R+?kUbaZJ2oM#8Wc7K)CDD64w-rvZjbsF= zLQ9PIfCNE@yJH98BQ3R{3kv<A>BO5_Cc1nNlrU+l9Szcn)12%d-i(~2esse$>#zDI zW7Ue|Rp>ncZNJ0ia6k=Nubw6|lU#=XEP(s<8mslcDGG5h|M#qf`wwL=^imO#a(MSQ zBE{b%Dt`E@+r|_s1IeDXdygOZufwRQ&(x5`hoV{YPEJ(0NtCKG!NYpe_wkDbKV>Tc zP?7a(aRLp-|7|^f?64?cf2oCk>jDDVL>GLVCeXsC=jH#+3VKhWE^KwLkWArvl`iHU zXbJ;c?_CUM37;g%QYE<$q6_3uNCIi$7d2#Gm)-{{(&H4F68G_hze!G{u>^e-sG}gT z;d)9RZSG{PcM=J-ARkAB>EHwKP?w1x#^g;5qU(zuW6F+V1CnWyra8Z{UFic*aa@j` za<vJ$0*NeyAxw9f6A*Bvp^%Imz1I~_`lKnaKnXnv3<>Q&qV4pu-Qhbeuoo<NpzjQ? zIhcGk2>~xu;-Mmc^tq#eM;<7_l2)zQU=-vA`7Gfnxbm;o-UESk-E$-Z`mVV9ckeyw zA+C9t&54T~iLB@l*G0raJm@1oS@|cR;|Tib?uN|>tkgg3`}pq*VEzAl2<-3w4FA*7 z{m=0K-{6(DEPZ6N0+18etJd`++LT>m6B@h+poEwI#Gq)WSnrWdiyL3Bl7{H26s2ME zSBZ~Gc<7fRZZ-1uf-X`T=t)WiK%mUipRbmYYP#uyx|$?%bw@jdpJ_x^d^P-Ofw>Nf zR#vCgj#s_})YJM|;7Q;$pQJ1vkhI=1{M&k`jZ0LYoYs@R`k@BSK(Oe7P(MEDi$yk7 z6BXd6kN!0R%f$?wVYg`LBEV)zNVGWGJu;|<g$4EUObtgT@j-(EK=Rj*zqwk)x~m<? zB^v=O4>skGKPT1VF!sp!{Ozv2${mRBZ7k5>t!mTthbt`SPWKSisfCeUu7Z*zmb6Ji zQHlIjFY%Lw&Op6B{d8f?*PxF_qDAQA_Uc;v>kDE)U6V5H{`fPKs*O<%N5o+ZvT)a2 z96|;3e?|XkpPjClFnJ+#FDKW;j^!!|p%#a%#PSsB)$s=H&b&JT4~R|$=!QqxALS*R zo=8Xjd>L(Bm``&$)!orm56`-uC3y^@tDIf{z(S|C9o|h(vKEl@kMi#<&TRxN)BZ9W z*7DztW{SoJB^=v4H+0R{DauDk8*>AgGV;3ncyGSD16Gjas0sqLZUDEdtbTE9{q~=T zs8si)k8kAh_)GMN3g!MQz+P%#;SRtj2b9ICkrw3euhT`{Zjj`jaf#!5pjLQCn>Knx z3cvOvNXsca7x5R#y$&ANtO0$@;j0{kx)yz*1W0Bbx%a~MY_|!Vr5Jdkh)v#@>Puk% zWa~0RpMw${DUN}LT&Oyc^_zdE2&S#loDGEcen@BVz5IWiFZhoG|8LCymp}h!2)MW5 zciOlXtPRc2Nx%^Tz83aZN!z%}2Y9}3o<@P!ehr?DSnwFAJ!}^r1r*F72LVk0D4z83 zC?z%LVBU92iIb>857?hXJ@}OP<GoCXh8Z?vW~yPVwVqB?7)t*?fRx2dwvTv-bHAWM zKvJ3S@G=bkGPA1w*E=0MAuTl^u(a?k-Ee+V=ly=qlk?MBnd$K2!M2vU;4EpTeai#D z*6<G)w_<A^Kqa2OdK!pH5I;DwaTo-FSbpOv+lh+*2vr9gd1RDM6N~>k_0SlxwGQj7 zHYFfJ4=jPjGoQ!gy8GPjSTELqyP9I?nYHc`H1OWiAgsPD!pjqU;g1Rw0gSWBlcEy& zeW4_tHO|X=KXLGBdbbx(LME2^pomiLME`3MMt%)K&Ft$*ute$yhl$y89ME*s!{LBk z!q4&TX#UiQw!oJ@JmTx-V+(7R6ZuXzE3J+Sx073M)k_a_^n~UbS8w-KCDktpeS=WL z+3Q_L9jXSI?X_)tCtp~}mCED0Fy0koqD$^c&-tK=Apx@024;sy?D!U@oSuLJx5ET| ze^qztj)Fm%vI*kRUs@K;qNc&Gr;=WyTLa%R<icks5x=9-p2obIfL#!*c>GxiyouK& z0Wn1w)pd-Uk4--Pp2S$;SnKiU^ZY#Vqds)`utk=!UAA*`uC5thlwcyqhu&@Dy>E+S znYzMF^@Ci#hb6Mik}cm@Pu_CV#_B~mb9gA~jYJfcj9Z-GKR8{k6RTqZ0Vt?y@YcyL z3NE|gC^6nc6Kryer|@cgA%pbUxZizQF;m$IpDR}u_DoZgy$c-lhMQUetgf8Le|ljc z>!3YOP-=1R?094PCL&<M3#qKRtf`+%)|a<(JsvY))a-c$O>Z7`ZZk&@i|AS(Y-^YW zZRLdyoPfKbefw$5&)nBgx3m7n?UJaA(-{wE5xz69_eo&Yaf)ASMH_;6<b_F_#ReJs z?MfGY{E^64J*Bby*AqiDyP>tmGcPEc{fb%}OSLhnK4=8Y)Uvs^;-T2008)GE;O(wJ zZ>M~;-T99#2Z<80TGQ9eF5xZC-GM{5%Ur0Bm(yZF=k>RHH<f8nAA5Px-^g{??#Cum zs0h-3q6_sq>IIBRxY~$9|D$`!(<_;I%#EuxV>8%e(NgRZ8usYe<FQ5VI%B~w@pbb? z!CeCLsmWaw;#D@PB4rkE7U<IS(~*}oE90oyT35UBPP-pe&dmMQ4WjCslGeRZ*mVbO zt`ZF@)DiS9?Pey4Of`3r5&2ZE-D|<`0zXrA3XkPib4&QP9}!;f4M=(PEfAM|h=i_Q z+@{h7z4!O@x7H2zM!rp2`OIshXoD_!AlZDZX4tb0d%nJmtf6|SVFt-Vweg+E)KIq# z-F*V8xg02wie!Yd#O#$(x3NUNwcrG78CvzCeP4CDiJ64v(Szkc%!~YW;<%2LUA8^3 zWc4G3o(MLT`FCkH_7uqtF}Kwz-BA5nF_rAU;JWTsFu2L>`)+(T7+o@_k*M>R-BjYv z7g>UuhRfa%R(4|qUyMZN-$c-J>UaNz21VysHaQ&z*8dVR>P)GE&wC$DPIRM@AuYZ@ zGZgJnTYmAiI?rm1Gn<QCICj<jtaSo?GktX|g<y6}J8Wj;(g-*h+PzR~hOjMBus=B# zC()PVYv^#ICYup0WOQji`h@OOKfV=x<@IXDRsTmr?a85!gP}+p)AHI3>DL^Du(Pk$ z9oO~O<J?tu){U6%Rp@$Q3yfN9r8l*w#Wf|8_O52*Fh?96m)8sFLckv{0h08eo089n z4JG+(8A-?9sqAtk+QRj}tF$vN4jf#ffr=gJKatsP-4kVKuK4y?r6jQ1aVW(I^$-;t zk&Q?#Gn)!dR56i&6QQEFsmr8NtlEpYNrDPnb+*4fth}CrPMx!<WFH9y62^pcCfC*c zYAdaR*Jni&SoaYo|8V#cF61j0YV;bR+I%j2YRaFlN-<LI$i{8P2ganjHlv~dSc<{e z?caJ|z27u;0rTBqkd;d=m`3p?ut#P<NSah{(%QwjC-(hr@jEnM&-r|CK<|XJ2jL*3 ztJ|T%C{7%%;?Zd4@E3ByuvT$8_s?_pl4@`N)W7oI+*ekIEQ#0qAxuhFFh47|UWD~> zE9LW@uX1+^Es1jmV$nK6(*^ZM(j%Ncsm}Y9Xivb@lIyk0jGf<yb^AKou7oR+4@Wty zu<ODs^sO03R;1us+g09j7oV@j3;6vH!t{0R_k7ZFsJA2)z0;cD#ydh4j4EG}nOy@h z4u%rC%*8gEFLl$tK1;n+&?Q9l?_S2vR&uzUmV4=8^J!5ID_i5%QyFHlCBW0^54o|q zC`+pEj_bgm#mv@Au$i6<7E90IYmc+X9BKPW`Ci9X-1e)Xo>bRo%w9rU=+{+?8?A|F z?tMMJk915L6;h{@B=l|EGTiQSCxTovCe<fBOWt}r<{>LvjZ)yfWMQC-etCG^leqIk zI*DIucCLhiae|9gyt#hHoV<*1)`>?^v%Rr&a|@RGYzclA)fR1C$3ML$a~j<2#hlqs zNMtn(ewEJst-eknHxJfb008|f?(Nf^$n{AnpOdWrpirmY&Z4G1rv~B0MW1d{EPBj1 zjc#PJ*{*!9|9CuP(qR%FK)0JpYZg?Xj8(tmWBM(~AXeo_8|(V8c8tD~d1BkN$TT;h z#Y>yw8K1%kF`}S;3GoX$hOruhr1HGGr~FClIgLZxlD3HDkm0w+U(oTd4vhb>qmkem zg=%=*-)^NF{f_<8HE_?9Khx^1?s$F4JVz$8hWBOr#f?^ALQ}(xxN9TP&CZ`=!4Vka zh<z8=Wz4T7DLq=5=X2KWjl#;475wPhD_ZLI1f>6NUc8)?I-b=tQdPy5<+AV6N-rUZ z5iNPnlCtXVBc10_Ryac==@w%SeDak$i4e?A+j9gw(Q+&q6PrE!(r+4Cf&veb#>1e2 zW$3~oF3nD<SxEnCKYWNg45RP05^92UOJEN6KM@t_(1>WL<VxBeq`Y&ys5Ktc70}#C zw^Raiw<6!=51RuT661R{#2-E~y|fqUBh9+Izg?PbTOI8}itJW=d}R{}HNLG$p5v5> zJ>k43BH_AP_jX+3Abv+BLVd8Clrw{0A@);FRM}dtRL#WV!ljRQWpu)17NMn}^Q3Ou zw^C)Pc=2?fp|ZheN%oyd?;4SP`lqX{u8l0LiHGz4ga?%27jUZz^$4)<0V8gOnl&RN zZ7RS2VMh=w3FR{sy&41wsu;_%nj9)CKg6f7fGH18wNdEym2mSK63-5()JpLj9V$mT z8zgeE*ZYW?Vy)G6@f^j&QcOEMyMi`xb_7VM#D$D9Xq;u48htL5kHeDJMxZI1bKov~ z4l&)*X!l^(M(saI*Rd#actW{<V0!eb(a(&86sp2#w%yv}g(6p2@G03jV?%7R(1{Gj z#XmhIX_UBGgf@5jo7Y50ORY2D`DKb-XH2BMh3E^*<D^3>`Q&kP3d5f!`FEd%|5*5} zrzb~RVApN@RT=GnrlK&jG@L&faY>CiO^aK8_r~Ecp}U|6JF#VrIXP`%*U1Swzf?b5 z@4oB4u<2ixYRLS@M_QexnaUxl7@3^Du36pep6cPg+VM;xps#-!{6TQZpVfOUm4BOn z0M?w-uC8nUr6~!8`OTWRFu~2GsAdF^Ki%lP9!<|8Jm&LCfr8HDr0p+F7|5t&M5l74 z`%B#|1gf-Nr}RVQfv|bw_jDlG`(EStRs}#6>}}mpq1eC#nSs!Tw;y!BIK<%}aWK;~ z$w<-w@3Tm59G~KTZtuWk{VYBZGK#pbGU7z8?FRr~_wMhy-Aiisn*eAJCbD4&pDkj) zR&E;1ka`;>hZIbdTK6#tsDZxJoOg&tE2O(t&DrW!ro5hzySoTR{=Di&Sj9V~1gys2 zOa_X1llCrEyR3dwn2jlajJ0)uPjff=yk6u+1L<^nl;)w^*yk}40|j5&v1dXKLW@72 zb{!PXa2Z~vLz5~0d_cm)k_lO+of?s}LK;U9;%hImv$EvJxvb)HFtrbuVWN0FDdCg< znX{h)ZcGK<`rxaJ=Od)dt3!FqMiCuQdx)u_5>#^4g%4_WJ4A$gNFd)Po{2dAvw7ur zU5>eNkEKAlF0)1MQPMLdvKgTs!Wmwc;VI!R`C2qi=M`#C0$Ja3w8-dib0@L9I17^2 zhiYW>&1?7VEBs_Yy7lxh*~Os2MC@*;LS3q7ZH{ZGRO2LIck20L*Y-UuNSj0Z^)xhQ zR0XFnMAxe{%2>%Oq9h)3P(gB{qe~%nW4gb`Sk0B8X<Y0}KNsR8YiN%cnG}6q0dt13 zsBz3rJ~J~Js#J%R3<W;bCcW&h?rzg4Ie1%g0QPD0?hkyfHBh~D<B;or|3}nGN(F7< z64!!zq1V*%>nNlKf(|TMso=G`EOzV1G~4H9uZzvhQAh?!5PL#{&*Xo4+&R9d8}j&g zu7#bktbEid8oLU2<$lLB<!C}B>-Nm6dyXnTr)1QZu=AC~m+@^K>gq4u)2Eq@g`XJ5 z-EPbQM@axGx=z`^f7&<l0xER^;hG%BS-(RQqQxN=uUEsihe+RH5|FoZ{F5PAaB<#( z8pVIq%FB)B?4p$KtxQ$B@k*F$66J}=2h}F|c4e*9)Sw}E_6p}g*yG(|w|s|^myBPl zL#t9BbhYRzUoOX;m;!;T`GoTF%^`?OMK868p764i`H;BT$7%wq$B+Ai-4b`}$5l;O z3ccK{9208euA_iDLObIC8pnX6tSKM3j-g*dsWg26Sa$%bua3<exh+>Z__U^as8j6f zd2da=rcT=Y+vMbcnx@+Ap@n8f#f_KH<NN4Drf%vbJb(fv8{9DvK^Eg3zIN?_sM^Hp zNAgJ*-x}El!-?45oWB{6gQl-hf6;RiU|5wGRZ4CdDTaUJa#grk=Z-{b>cz%edM>1Q z|7N$u3U^+(J<22_6@#hnH831hz)77G18TLj)A$vxNCl@p=X`*hAQt@5zYd>?7TuyF zq&@%yQtmC!lpw{h(^Y`gPvP|2xd_Q`fq%c699%FR((S&iR@2inhCQfAhX{3U<Qf?& zWvZ={tE)FIk?*-qnED`NYWu6LOiV46b65#hG0_-2PtSO<;VjA0N`jQ!8iFbIO24mV z8bbUv%YQjNvipyt8&^f1%opD{ueM(AJdd#ou{^aF<aKZF%DoUVo4bp><T8A-f(rIn z#XGK_JFPWh^VjUM7cXx=k-03ItJE0QY|^*+b$Zx##?`An3oPTO7J9YV!$bg~T+qql zgQqQjSBUG}`)2-hpaN6k9_nbahdV)^d0>Cab8BRR4%=j|4EVk=pOAxg_0JuTr3fkO z8uKee1g1v7<qFZ&>D?VywcwH^ggU-DM=bge;_>Wj*@N2doJ*Q6iy}V}qtL7zBlwnH zmvCA}RsZU4m7z$09j{2J%c5sglht#=B=U8y-j0j~TlG1a*tKHLTdCTvce<&t%lt0L zpA#VE`d+Ym-y~hf2k+n=<1^US@7CVBt?a~0bR8D6i&-zvYML7r487H8+-mB|fuZ7C z#!^CM%$Pi+kT}A5#6FMqE9>FDD`shGilaCHoeTEG+z5C1+_T?=^fO}DfbV*f5(7DD z3#y@2p-b^SpZctK`>2V!+b(`uc`GXuYQY{izEKoU07!vSRd5nct9W91^C4G2qDDHx zDq#NBDpKxM%A2fz{l7bbd~(&piiTa_%yAxO_VqsD#kH)`_=+ezu&ShT#i^sXE#O(c z*Ds02<zr4V`$zc5q8K(RN(ZJU_+sCVGUaUZp!*V%!2OE*{_DkUafd#L35#|@0O9m& zrdgG$zAYUQ)gw=Ww)+(ozYdULi}C-Fkf-3`<+$n{(07o9OM~FMJxwd21}T$2CKKP| zg61b>PDzB#dB`p!D%!CD=_Mfyg`U<bVenPi=D{_mg;xK4r(>#9rF8aL_}jE#qtAOc zXvh?)h5mgI<e8}(B!@j=jpfA`xiv@|Bcy_g>E-AP$CZwtld7Vcf<UZLf1J)6%hl0P zoxRjOyl}^b^g;V=`KG39DK!zGz=xCgh<aqmRThQjp=Hf<Pn*WIJol^2uLw+jvm_0y zg--foo#rpGWbG3I|33jt3uk$us`6?73_Gi{D_OD|&)mCcW6LYma(&l$=S;P_JDr)V zE}P&;=bz|fXlXaB1+0kU)ir0h-9rleFm$4#23;|c0kFYydTC4j?VE@OHQ0prW#eC_ zV6_rvlKN~BlYi>ERs8oEw!%i4pU<i}xJ(S3z<Vt9jKW9qY6V_#o!|O)^Dc(}+7~|f zXOU@#PJ8GUF5ufW6o>nXSB{UX31eDI-F{xl`PFpVmO0w7u@fI(+2nT>9?~LAFHSY2 zTF!E|8ysemaaZrSaE_dhQG3(f(<kuch&jyW(75!UYj&xs)g^I8c{Yu_4tPf;_{$n@ z;-twvKoxsoTNUVG8dg+S?iL-BWkHx7^iSH6IU*DX$_fIcoLcvmFt^m4H=D~2C4~dG z5sz)5&q(Hv4`*my72?y~av|UkI)Kz3;ob*HW6m(_DHK)JIq;;-S`+g``=~^;c@$n+ z;U~QZ3imNU&SE!?i@mv|opeckos}9Z=qwy;1ZJF*f+xSvlF!bxH(A^B>P6kW(Pn%I zoGTc4lj-R*sWGEF+N`l(#oyOIhwBU374we}KOClBN^T+lSLOARAV2J)G|G)hRl0`K zEQ|P`+ybc2JL&UZx{|>QXPZ)c4+YoApkylXQ;7oAe^OwY;hfzKj9cKE@Z7X+&E}`m zV5vLH!!={);~}!)7$+aFmsV~c$Mp`;TcdglENf>#+mURJ*A%Qa$~lR(j#JU+n90** z0^#kkhw~c5PTtNOoyAJnERfAm|0r7!5JAsPICre>y0Wnw8tE71sam{5%XYm52j2j4 z(2R-*GRRY1)<n1p(ENy;))^}lJ39cahH}D?dfx6IN&NK!A}f2$xm%O1qg#5HlHY~c z31v2FB*)CRrEYoi-(6;HgO}@e*K%+A6|vk`FLjw4J{iOs^~m07{V_}TfcXKq$awZ9 zZ?FCOUxJRO6>0Su<X_r}IhDA9HX;6LR3FY(D!~D|!y8R8l3&M)z~iL{!x|jMU#pvn zhbEl;b=F#fywUXjgic;<GvduI2E_W0P+^10YXZSd82Vm7lp?y@C4g~TIlrx{PvW~y z&-I6me{yFp5^p`v9m9#Q6f`un>h|8Ca<1H#ZmVcgzIy=ld0IyWwxi40VzxgEyG`+5 z-}ur(2F3&QMrMS|+$hd-a{6GzzI^%<t7qBij9&+@jSpA3arbpJB+JxqqjR#GPekZ6 z8i~(o;~L9H_5_|;H~Dx=VKUhpS^r5^vr49kPyVc=kv2QE$(7XgYDA6yLPiVq*cCqY z7z((4jjQb*Wd)&G@-e6mpR46MK|O?BS7U_&x~91ErhZ<4OiaNWzQtr`YD+7@m*=jF zbN<~EKFGF)#;96PWbar5y45`F$(2lfgVplYmFRy8OR6UOkr+0|JhNqIS7nRoTBS{l zHv73%f!gxvv%e?N$J^7B&VwH5E|oB^xmt0+?I3eA1Eu-8cARbmu)m+GW!IEU<n|wj zty6!=%d=gq(pjg{VG?v7zSa%y*L}_))p7gg*ji=%J0Lwu>1lqQg;XS804k}S)={15 zDb%kD5Mvc*TLQLxf)k$5c|d&`!Uk28K3oOB#Z%ed6@T~x%RS({gB_ZRERNty-TduC zuqKUmAxGI!<o$HGN8QGv42dQkRzZC3=hYKniT*z?OhdkNPXu@CNik%9g)E>C^(z(% zguwTwQGst~ocQGXiduX(9WvmYh$x@@1_l50QTic`e4FAY@2*u|mRqE-#vd<K-cKMI zsUPO^wKGNmI;Kwt4f=u-*f0`C#?qe`rleKrzKuyUwW`@3(g??jG3c=jOw3BkK}*%E zc)I3ID)MeAPNE(+-|kp>Hj)ekAqwo{@yp;R*Y&BJ?{8mnfhYT%eq^R{&%pNzV~w=v zA9aBr5j`-I@-DSd7;jJVf)~JqFhg0}P)UXQPgxKKy;#r5Pa;dkU9B!*IY*Rh?LXCZ zpW2J41{}&xQdI4>slWX^7b0`*BWnsnkzDKBBrtMRLltduUCruPvM7VPEf2DTr*9Wg z-fg=YO%-y5*i2DO^%e;D{7pQR)wS{Mhz!%gZmadlw;#)9;&Vn%9MxxEaGh6i)T>NQ z`HUp9O0}ctp-+kdO_q#vYVODMR@tB@jJuJCLB&{)gu2)z*tR*VF#4iYS7lZl@xt)E zNp(h58He0@KPt-lF?{{FPVz6*L2b6OBCvYxRoD{(w~D{dLDJP^^%`}HuV2IbX*t=O znr}=aBrv9(SdMHe$-$QC^LG$%qqVcVl9qB)$zYBQm~!*sx}VE>qQB3{%}SGSJ~#L5 z_|>!4pw8W|T^k(ZZIB4LXh2nh-Mx#4IwnSbwI+<BIOymyKW}h%P1#4wN=7}7E$PFq zvr$Xu{{79+Mcfwlxd~25#mJ&Kw>Y(0Ione*j4>GQ_^=;<?j;(vXL<cW^)c6hl4oI@ zQy8WsYu8cia*+On{$Yo$3lCUOoWFvDedDjHW*l<aA8ybv_n@LI+UV1K3wkeq<vNb7 z?rAVvSgi#RlzvJGcOAp16rRw=dvwv;f|ZjzuVIYu7CA<uo&HJio?_JsfTpG7^*){I zvX*o5vcgc$BY8Eg(0OPDlBV+^d)jM04=btj9f``3e##!e=^*_^E$?areA~MyTO=JA z9QG+$xS?8QzO#SI_zX>?&fEhJWoZ|>w)_6&C^kr`IwW3MyyVh6b}8<S@uv8Q?d+HK zoTsq;wqLRBlI{`*3aVbvJSY69<FY7#bZ#AU%VnqP5=ki~MCls=gn=V|K`p$CmD|eN z-d&$=f%uWL$gJ>_M=s^8wEh@?%#?}xOKe1bF7sfcs#t!Z!$b;$MlH?<w=rIIQMW%1 z2M;rc{H_9{MNdrsInw%pJ7)d_>&8EKQu243<bFxrZ@!bj2nMgAEoScS4FonrLLZWt zHeK#>Ew?d?YwJzPytXdMw!DyF<G{y(%5I98lE>*qWBi+t(hr9PKsqvxmVa|F#{R-S zw!nQ}HZo7z?MS=~6{6JGwzcUoD_VIdyfu7&HevE|`YQimacz;4_Nh+^Hi)6H)<FGj z9f{z9sivW5GtUy_0+N5I&%6{L2O%w*dwEJcmU}n3MlVt|Y|&O;D4^RDm5I;Vg7>m| zlg<9!<5dF3G)Hoa_kY96mj;ngB`rR~<*|G{i4yNd?-#w$n11R?)itiiiSk3w82pEx z{cE56?o_u?N@8fP8-3b-Q7^1pQs9tbChDdtbrx%YQ%_)BmfboFOLIS0{Hkg)9!FfQ zW0>jf)9CPbDa_+S0*(CP=o{!IQ+3)s7t5`svi{Mbx8nvH(|ELZNl@9E(mZnV0bmvB zH3lsHa(tObPg#w9Emv&r1KS5qF#wuf_uo95ML`C_>n$qlzV?x(d_$gFI#0l^oK6q) z<997|XdL%NkD}tD*jm-5vU`&1Md!a9u%s!DcR`1(0AP`{E&o$s(}E7u-+~6vh|C25 zKDq9HIqF$m)|$03m8I;95C%Ft{T8XrU|$5b;nKd_^qSYi56gAGo#)3~3J$7E?x!;( zyN8DpT#;TfDiDmjYu3f20TIulsIxAkAk^DncGfhYs-la|d#Iqvi%-L3UesA+X*CUA zbozH}1ocK`v-!KxpEce4Y&=Tj2g~e?1eMuOCB6lwF9|3$^Tl^bzw7qTECer~_SJ+) zB-3|FE-GY}gN-qG_sH%TRGz|xaCvLKfA&9Vz6pJc(`mh9?)=HS$lXwD!=+hRuj0u8 z?iUkbCK0EQ&R_eq-eyD!uWllkq$CY}!;vH^RHKD-LR@>XyH$D<KxgW$O#*R)km%v? zt9IzNDDg)N&d_I)G+$yfpo8Lfj;qSZ+qjqsiL)6M<J=lM_KcdBPKMk2r8UOFRZ)ar zXII;;Kg<Vt;hH0WPTzi-teT~Xxtkv`g@*pjziN7cvn*fCXDlSIYhX#e582Xf?UFnv zi1|lxvi@8clj_SYK{oLMbiAw)#y)48t@ZYk+Eb|w2jE(wB4coXU=0J3o!(td@}14E z+G-BD?k4Ro!W}x<ElrU3#oyRzKCS>w&bVy5$ciSz<2rYG@3wHW6OTTLcZ81hnNkv! z2ZeY8uiAAb#yPnc-x<H0-Y#SA2<a8Zbgdu9WB+`<olM@^HJUZKP7cor{O`K5dS98Z z_sXjWrt;u=qLN!TRks?AwIu$poq>Ai4v@e!wRAh@ta<^%QVv5(T^aR*e<iOeJ*&s? z?EztikwT)i`X;oq*6c4Pbqi@s`Y$hMJ0G#-|KkSA(%FV{CT9J}_cx0J+;a-G3BVC% zmn<p&-fg?)UwRGpvJFh+0wup11ruNS0ZJO!fSCFy==<*cPGZzjS3+hHy}Q87VfuN` z2=`31QFVWhzSBEy0C(wKykwjj3DF_<KvDRKs%`e3alUZP-8=h}IWtMG%MRes-E;?G zf#Q#LG;w>XclvyH=Rm8E+l(^DkXe3?Y5Hq))Q<YBw8&EXcr{yguVx)#jC)9^c_!i$ zg@B+-)e}(85rmQ;MP%HHg$0&@x-EdOYwOr`LhE+eR#WC)x}JY+UOc3vx9=;dSqy7h z><deNWEKT=V!E_cUs_&*ZOK)pwKbkyrFYJ669TMr5F07KgDYR>zBP|GFbMXsYRfXj z#7agHoQd`s*zl4KR{{T9FAo16d+6mevchyM`35*@B+K=Uf`Cv(JNK%{C)Tr#h`>*w z3JtB#kkr!`Q79Cx?2w~L+6bDTo!=B&%@yHIt7hR=!fXzsUO^1Tjm(VQ+s6t`7r)hw zo=u7n2&ml$G+3OmdSjD&>kH={)2BgQ?d!yn)77e#zeJBNJLXPLa6bb_6D*%y@oI}W z<rdjl8@i{@uOFRJpZ&EOVoU2>*=;NT$$O$%hh4{3r%V}PH?EBp$QWG41RR-uX}mZV zj(2Dv(a#X!Eb^Q>vwPS=w7r<6MnWskUv?w6=4GaBzGIF*E398(-wE*4cgE)Y<lCLl zG+92w!-OjWTY;&HWu3U}{_<y7|LRYAiWp9;kYADM+HLoL?6%)Lwm=%NNimMoPitJG zIlJETNn9~b1VSsgTto!J^n9x-I09=r-^Ql!daGF1Eh?t|pH|L0s)=pU!vhG2L=dDz zq!U6gD4|PHkSaxb6%+`e7%5T?Rf>mR1tOtKQ;;eks0iqhpb!KUP^!R{j({BSfKt7C z@ZELRTld_z*1Pxqm(1+hne5rKXV1*{{g5yK!Rsi^@t!khOhqK=L0G%oJx>eS%PhyG zuk?R-o6<<l`+1Wc?|Z&)usUp8>`{e|ZOT(W%MWTep2e$6{#{@D2K^1=qgw%&5`<XG z(IGCo#5zZv3v<IMEq@;o)pD8<%Xoc$%p9w$zdk6ib0t|Tdb{K5eBo!;O=`^NoHp+m z8nYpXyT7N5hF&r)0i;<b%&K*Y`|4Mbqip>uC$2n7>=1BQmmcg`Di%o>*!*5_eYLN& zQeG#hzWlLp_66*F*NsEkUz*WDCZ;0F%m7tA`)QV&ROIlS65KvJpp@K1d%+^t!b6{^ zxkH~)e5vSnvRP<)t6^ZMYbM7vr`!1_Pj(AuN1v5&v1lGtnn_Odj7CS!Xl-&pf=0$z za=@|+WqC?wy!Kg3ABTmrRPwk|xmeKB`sW3{@(+!vms!TFZPRv%vZE5CWlN-~V$<As zvM!`HQD`Y4kYRJ_QKCpsWZ#+HGQ6W3`4@cX40wNi#*brVDWEcQ{pQDgM{lBsCG|#r z-D8u}v8Vk~DKPplLnCJxb+2yDdUA_rDN54H&$^q67*OKbh%eg>3uSqf%LKA9ijnK+ z<ZMKYJ`vl(cMfPyp+&W-yoURmn$zj@T<tY4RgS;HH@Xq+_SH#_&naD^q=Rkrvp@J5 zCYSWPtg#5}Y^d5Qh0qpBc2^r&@Q~=cUJSj>=j47BC5E)KF;Q<u!TsYVLE)sO`LHb` z-S(Jpc~`|PHJpWsL9_DHtILLW?pI<HhnWv5&g2<=-tFbik4Or1z2}FKKj~#{tuqf8 zvAa$<<~&Omxzm!8Rf);f;3l)UE4{|n+ZGW6o@!~`A6)KotWkTg7O=Cwa&gE_re$Q7 zKO{zK*U0uoOF;OG*y&@?I!FUKOCew$Jjum+lpd)Rr@p*QA}H{XxyMAKEVy!rM|u=T zWR{<o@Tun5hK#r6usMCaJ#lSso<CFN#nWN``Tp0=v;HXx@S`CSFkblTNhGuBKU5f= zJxVVu?)IqV`beH$u1RuX8VTio&cC;~FKl~dTx@o7k6Xgm+Th9F+OYk~_5Ge8{j>cL zL@#TMmqly*vH8i>Vwikqw8EpbP1l0JnVWpn|LeNXSh4AK&zV~JhpRC|tP1;{lNJy8 z-;W-*W!z(bOej{_-(Dekd!-e4`m<ayHJgiT+}fvBCFDQ<EzTp&R(WU0Yh02!?de?b zDnq_>*|uirQW^2x%>}jQ-JM)gD>0$U^rO3aj|i*H;iHA{@V5z`c_qIh-*<kT!5PiW zH>lLy)J9BC%0Tvl-$Fgn-Az}tvf|RCC8=cU)5XYz(6LtKPHunVWIl3Q_3XO}^!`ZA zbYJJjC(a#7>rL_)c2VaC`8B?BccDTt<MVwik`Lb_Woo5jg==t{u2<-_x%vL&_a`M~ zNAMXQ;f)WsTGsJ4Z9q%g)zH6v-bJz7rIDZ;QZPOl>=7E>^0A)y#XkS6DAm9vHCy1z zjV@Z};OG%l;#43*gn<T~Xu4=$Wjp?k&Ux-O#aYo)TGZpZD(o3E_XkHYZ->Yn&qq}Q zzb@zp7Po$5wqT*U#;ZQ7uhY{~@DO^TI5NhDm~4?%;vcK`*(s~k=U-hIcvezfd8)7M z+{P|Y?2e)bXfo$D=x1vjYA4*y3pQS4%AFtYr#K?O2_`rMde;xhoMwBTKgu(?xyQ6~ zzdlywCx!p`T=g22`EhRJw4};c{ZV7Lu|;2^M`rL3|9eXUmxD*uDPexjW*M5#DzBak zbZ&Gir_>1ZL4qY9XvQF($eU+{tj<jD01jzM&(?J4X`R+v0yTNl7dO=4UEZ-0Gu+cM z%eWlNFt9kQz-23-?AoU=KcxM2vM8lJ%pHn2p;L{-iN@w>tgrs!Yox%V6j{XP8nU3a z6Ykd>zPC>=B7Z3bgsGrc`>#F@3SDw1x1)yU)^vCEcy*>HQ~apiKz7?Tz7P~Sz6t!j zhfCjZDGU&SgZL^!yj(ItUWcFO_Xi7)6v^G}B7GFTUi<31%0;|rl-7sb<j+bGdwcxx z&O?J%sNOl8&I_|fmThLdN8x3e`<hP*6ap$2Pt~MRAi)7+EQ3LORIWfz_1+`O%KCTp z3=Mv-rq=Bf#a0*Y#$9CzTI($tZGYieWl%a#rr@{x5=KBz+a8}>A!U{v6~Z33UkwQV z+lB`5ZplOh)>83XCN_s*;(U3jy`B3`-&F7>H$>n$NO<X=0TC`g%9?CLw%(6?9kk>& zlYk&Y|95b#&!3d>|0WLq51_VFjFB;RJn+e|dIRv6DuA@A4%CCJTWS}7_~>Tm1Gv#S zK`TXl?+xXQq%$qlDb*2bE(_pGi|X-;@GbS*iPALCO!}tKkFouTO&?Mupo^{1Hl{8Q z74pSDS;gG+=`@u9nB|(?^@9D``gHZKC=A(VzoCMVq`?J6R6TAQC=YKcEruydXEJkz z{)VK0+tPhJ0!lpzkoR)0d^?ZEJfIA~z-J=w9UnKMq_X;_)z#}o)(|xErEuV@n(f1| zF1cT3aK+Zz+n-x__TB(o)o9YA1TOG~?=Vce@)gy}!=k;*RXI@&jyIYB=xx7Z;$svt z3Aolf2*9!W4)=tsY<8s@sjh7*%87Cvj|Sz81FGHn?e)a>r>y5$zsWbpvL-SDD^nS$ zRdX96-iq!dN?6a$igq;hz(l-O3-tCC<+av!AmQ5QTlw0U(Zh7^4Uoo^2HRB~tn@b= z(^iVU^_1xWA&vg7$Kp=^OSa&6UBTw6ikX(2`o<4-bO8O8=(}JS!Z`UkKsAskxK_4- zo_<l2-O-Z*;)DubLvUsgh}!@*n~j!b0<do{0nm4Hc%VukjvlnBZ>TdhADiQriAr!5 z4G?VjNd|Afi2&g75x^`1ZaB?QPP2}eiIA(D|2~xls&4}!A6+(_b{;_DlLN_5<E@dg z4Cku(rB6VD(-K&5yP4Vodn-L(V4HvdtukCY_J7Fi{|=~KZ-rrBV-VTDf#P5?<AEa1 za+LrD4nVM^mulAt5(oXhK1B@a&!|qb35FIX_D+DZH)ogPijk$=+zE*9kx@9nq|@3o zeQ=jI)zIdk5SnO(0G|#;=wcsbC7w3F&GriC9r`>~Op}EUGRPPwRMci;Vi6b4pkryE z^~5~mys%zzAeMOGj=@VzgIt(mT7+tzizNs#6<s6<9=pd2LFFIjnftYXAhLG!J7u>5 zf=mq!&+MJgv5Uha%`ogm*Vv&{v`+$)_XaR{0AuUc$q3y`%d`YS*z3QQ7>PoH`7ysX zw1P+Y3C1Y)dlN_~)sW^jH!w<MFA&>73fVj>8?eBTYXKq#Ty#Ir;qP;||G=3Yx)`g5 znPS!1c@`hxNsx_v=^)R6oV70j7}~zR4Lmzk>tfFm;~*cCzpU`iO*(NOHO0({;L?=I zK2(oSG`VXW3{OaKTgT*)2zqqjb%^Rdk*d;WNva!mzn2cu$2jQF+Eec%!rO!-QdBv} zIz?1#yp+iW1~@)Vca5G><8aoZq(9IpIoH|pA3mSwDwD%A>!cW;lk;{-5m<~=5Z(Se zHNiWheKewj8(Y7gXRv_h<Pmkg*4tm+pqOsU9#kijN&&hSygR3?wtch6ub=Y4CMHAP zr`yTrq&x(~u1R#~6XEwxg@Q_I*JV#$S{2jQ=_;H#SoB-Q=Os}R+hLuBgW7~9qea;4 z-CTsza)C4eZYbV1(aDfwi^WrauJ+OrrkAl0Ek(q@>HwG^X1JD;j4`}SJ_W+?)Mrcl zxaZJ<QxY%?z!z!(%}V4goCkQj28tR9%2brl${N$cv+oWJS!#NG;0oMU8WYq!Wma!i z6r`3SWp=1jxNgUU$F%-|&q+pAAV2}DZq3;+d`l3{Ydf$QfNX?DM+#{Sw!1rc!H{<6 zlM<8@AmOXPs13MYQa4o<b+8LT9qEck?`YQ_+=tvu#Fr)=Rzm~HR&XBIz@Dz}q)kbh z48SyI_`bXmMdOsFYM}k>GKl{o$W&61hhts*`IhI*EvKH*33(FZcTEWLoVK8Epo?#@ z>x$<s%Ij^Z8|nP~tHFgxg#3U3|LO8-aOVUjwGvJRO&DNtEu&K`;Km5*#^=-})CtS* zrN9k8)5@NxS-jY*i7qLM8`OnMqzcYuO_-yo58va94-SrCmy5iitIU0r>X|(FZD53q zUUli>iSN(f5gPhrnc%+UeX45CuS_bJx=`Eya|sh7#*IhcUf(%w#9R-YonSMm{;Ydo zhE#sF3P?x5ZYR(}>$Kkr+wWX-sn15x-7>~-e)Da}Nn%M%lLF@rn7k}Hb-F!h$PRs3 ztBhpPL7(UZnrYn#L5i&nUhObd9BG%8%--4ZDNdEcaQzBHBsg;>-p3s~=#b@y3H0=7 zak~9ks=UBjc^TKjYiZ#ki$n$3Bxxu1If#OX1)vp)ClF;aHfR~@Wgib{ectQbWH30o zsV2w<aJgc7zy-#{zsef?(*;m`g(rMe1cnb@u08;QuDN1hhZe^!qs$25j!y12G4g@A zxbz9ct`7wD?=%+p0y)SDBkS$U52^8t7@%M~Xuh^K5^QVU77yGYDc}iXxgUel6i?}F zw*nN<e`YOZqJjPsYl@WuM|BO9h>eB~Ar3GSma_w)OPu}Hkwr@;=ptV;)!aZ5_JOQ` z5A^*Du!>ArDr@^D(#1iVVw7p;k@|w|P$46XrU|&{IBH6DBfKyl=b7u@LeTN^vmK+> z3v22e6mu$zFQfXp!&@3C-BBKh$WHOm%Dil^QcWj}hq)6DwS7{{YCQ}g!+w>-01Y1u z?k>{C$AJY1LBAc2qk?Ap|NA|EHY(_c|1`h(&o4`VRsTN(j(_^Oe`Eg-?4^Gpi2VEY z|I56~zxq3%@BaSdku9S%H~>)OZuROKrxsKQMyv;5>;X;-{P7gSUo3%FcB3L7ItcsA Va4*7mH50BuSIbbdM&04pzXMD*zdQf{ literal 0 HcmV?d00001 -- GitLab From d93bc8cdb7d796786d883cb13acf4e7308fe1e50 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Fri, 7 Feb 2020 18:22:10 -0300 Subject: [PATCH 11/29] perdao, to com pressa --- src/Components/TabPanelColecoes.js | 39 +++++++++++++++++++++++++++-- src/img/Pagina_vazia_colecao.png | Bin 0 -> 90303 bytes 2 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/img/Pagina_vazia_colecao.png diff --git a/src/Components/TabPanelColecoes.js b/src/Components/TabPanelColecoes.js index b865f48b..9a3c44da 100644 --- a/src/Components/TabPanelColecoes.js +++ b/src/Components/TabPanelColecoes.js @@ -6,8 +6,10 @@ import Button from '@material-ui/core/Button'; import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' import {NoPubSpan, DivConteudoNaoPublicado, DivTextoNoPublications} from './TabPanelMeusRecursos.js' import LoadingSpinner from './LoadingSpinner.js' +import PaginaVaziaColecao from '../img/Pagina_vazia_colecao.png' import axios from 'axios' import {apiUrl} from '../env'; +import CreateNewFolderIcon from '@material-ui/icons/CreateNewFolder'; export default function TabPanelColecoes (props) { const [loading, handleLoading] = useState(true) @@ -54,12 +56,36 @@ export default function TabPanelColecoes (props) { <StyledP>Minhas Coleções <b style={{fontWeight:"700", fontSize:"20px"}}>({userCollectionsLength})</b></StyledP> <StyledHR/> </DivTitulo> - <div style={{height : "400px"}}> + <div style={{paddingRight:"15px", paddingLeft:"15px"}}> + <CardDiv> + <div style={{backgroundColor:"#673ab7", height:"250px", display:"flex", justifyContent:"center", alignItems:"center"}}> + <CreateNewFolderIcon style={{color:"#fff", fontSize:"70px"}}/> + <p style={{fontSize:"16px", margin:"0 0 10px"}}> + CRIAR COLEÇÃO + </p> + </div> + </CardDiv> { userCollectionsLength == 0 ? ( [ - <span>Adicionar tela "criar colecao" e a imagem</span> + <DivTextoNoPublications style={{width:"50%"}}> + <div style={{position:"relative", top:"50%", transform:"translateY(-50%)"}}> + <div> + <img src={PaginaVaziaColecao} alt="PaginaVaziaColecao" + style={{height:"150px",width:"150px", verticalAlign:"middle", border:"0"}}/> + <br/> + <span style={{fontFamily:"Roboto", fontWeight:"lighter", fontSize:"24px"}}> + Criamos a sua primeira Coleção! + </span> + <p style={{fontFamily:"Roboto", fontSize:"16px", margin:"0 0 10px"}}> + Adicione nela recursos que você queira acessar mais tarde. + <br/> + Crie novas coleções clicando no cartão roxo "Criar Colecão". + </p> + </div> + </div> + </DivTextoNoPublications> ] ) : @@ -121,3 +147,12 @@ export default function TabPanelColecoes (props) { </> ) } + +const CardDiv = styled.div` + margin-top : 10px; + margin-bottom : 10px; + width : 25%; + float : left; + padding-left : 15px; + padding-right : 15px; +` diff --git a/src/img/Pagina_vazia_colecao.png b/src/img/Pagina_vazia_colecao.png new file mode 100644 index 0000000000000000000000000000000000000000..0dbf187a01d49f7df1d69780d18ceaf38f3c4efa GIT binary patch literal 90303 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%0AId33LFw_F8{&%V~}LNVTFX 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�b@{_Jmby|9VIn5)NCzCXF6MO^l4I0rV9wHENm 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 literal 0 HcmV?d00001 -- GitLab From 7d22f4b97cc867273d59d033ac1467a504afba97 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Sat, 8 Feb 2020 14:49:31 -0300 Subject: [PATCH 12/29] comecando a trabalhar na pagina de editar o perfil --- src/App.js | 4 +- src/Components/MenuBar.js | 2 +- .../{ => TabPanels}/ContainerRedeVazia.js | 6 +- .../{ => TabPanels}/TabPanelAtividades.js | 6 +- .../{ => TabPanels}/TabPanelColecoes.js | 6 +- .../TabPanels/TabPanelEditarPerfil.js | 72 ++++++++++++ .../{ => TabPanels}/TabPanelFavoritos.js | 4 +- .../TabPanels/TabPanelGerenciarConta.js | 7 ++ .../{ => TabPanels}/TabPanelMeusRecursos.js | 4 +- .../{ => TabPanels}/TabPanelRede.js | 4 +- .../TabPanelSolicitarContaProfessor.js | 7 ++ .../{ => TabPanels}/TabRedeImgDiv.js | 0 src/Pages/EditProfilePage.js | 103 ++++++++++++++++++ src/Pages/UserPage.js | 62 ++++++----- 14 files changed, 242 insertions(+), 45 deletions(-) rename src/Components/{ => TabPanels}/ContainerRedeVazia.js (95%) rename src/Components/{ => TabPanels}/TabPanelAtividades.js (97%) rename src/Components/{ => TabPanels}/TabPanelColecoes.js (98%) create mode 100644 src/Components/TabPanels/TabPanelEditarPerfil.js rename src/Components/{ => TabPanels}/TabPanelFavoritos.js (99%) create mode 100644 src/Components/TabPanels/TabPanelGerenciarConta.js rename src/Components/{ => TabPanels}/TabPanelMeusRecursos.js (99%) rename src/Components/{ => TabPanels}/TabPanelRede.js (98%) create mode 100644 src/Components/TabPanels/TabPanelSolicitarContaProfessor.js rename src/Components/{ => TabPanels}/TabRedeImgDiv.js (100%) create mode 100644 src/Pages/EditProfilePage.js diff --git a/src/App.js b/src/App.js index 517c0b30..3ad7a3b8 100644 --- a/src/App.js +++ b/src/App.js @@ -33,6 +33,7 @@ import { Store } from './Store' import TermsPage from './Pages/TermsPage.js' import PublicationPermissionsPage from './Pages/PublicationPermissionsPage.js' import Contact from './Pages/Contact.js' +import EditProfilePage from './Pages/EditProfilePage.js' export default function App(){ // eslint-disable-next-line @@ -72,7 +73,8 @@ export default function App(){ <Switch> <Route path="/" exact={true} component={Home}/> <Route path="/busca" component={Search} /> - <Route path="/perfil-atualizacoes" component={UserPage} /> + <Route path="/perfil" component={UserPage} /> + <Route path="/editarperfil" component={EditProfilePage} /> <Route path="/recurso" component={ResourcePage}/> <Route path="/termos-publicar-recurso" component={TermsPage}/> <Route path="/permission" component={PublicationPermissionsPage}/> diff --git a/src/Components/MenuBar.js b/src/Components/MenuBar.js index 74fce862..6ea7dc37 100644 --- a/src/Components/MenuBar.js +++ b/src/Components/MenuBar.js @@ -107,7 +107,7 @@ export default function MenuBar(props){ ] const minhaArea = [ - { name: "Perfil e Atividades", href: "/perfil-atualizacoes"}, + { name: "Perfil e Atividades", href: "/perfil"}, { name: "Recursos Publicados", href: "/perfil/recursos-publicados"}, { name: "Favoritos", href: "/perfil/favoritos"}, { name: "Coleções", href: "/perfil/colecoes"}, diff --git a/src/Components/ContainerRedeVazia.js b/src/Components/TabPanels/ContainerRedeVazia.js similarity index 95% rename from src/Components/ContainerRedeVazia.js rename to src/Components/TabPanels/ContainerRedeVazia.js index 287e33c1..ad3b5863 100644 --- a/src/Components/ContainerRedeVazia.js +++ b/src/Components/TabPanels/ContainerRedeVazia.js @@ -2,9 +2,9 @@ import React, {useContext, useState, useEffect} from 'react' import styled from 'styled-components' import { Container } from 'react-grid-system' import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' -import NoRede1 from '../img/no-rede-1.png' -import NoRede2 from '../img/no-rede-2.png' -import NoRede3 from '../img/no-rede-3.png' +import NoRede1 from '../../img/no-rede-1.png' +import NoRede2 from '../../img/no-rede-2.png' +import NoRede3 from '../../img/no-rede-3.png' import Paper from '@material-ui/core/Paper'; import TabRedeImgDiv from './TabRedeImgDiv.js' diff --git a/src/Components/TabPanelAtividades.js b/src/Components/TabPanels/TabPanelAtividades.js similarity index 97% rename from src/Components/TabPanelAtividades.js rename to src/Components/TabPanels/TabPanelAtividades.js index 074c12ed..5e416be8 100644 --- a/src/Components/TabPanelAtividades.js +++ b/src/Components/TabPanels/TabPanelAtividades.js @@ -4,9 +4,9 @@ import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; import axios from 'axios' -import {apiUrl} from '../env'; -import Bolo from '../img/Bolo.png' -import LoadingSpinner from './LoadingSpinner.js' +import {apiUrl} from '../../env'; +import Bolo from '../../img/Bolo.png' +import LoadingSpinner from '../LoadingSpinner.js' export default function TabPanelAtividades (props) { const [notifications, setNotifications] = useState([]); diff --git a/src/Components/TabPanelColecoes.js b/src/Components/TabPanels/TabPanelColecoes.js similarity index 98% rename from src/Components/TabPanelColecoes.js rename to src/Components/TabPanels/TabPanelColecoes.js index 9a3c44da..fbe39831 100644 --- a/src/Components/TabPanelColecoes.js +++ b/src/Components/TabPanels/TabPanelColecoes.js @@ -5,10 +5,10 @@ import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' import {NoPubSpan, DivConteudoNaoPublicado, DivTextoNoPublications} from './TabPanelMeusRecursos.js' -import LoadingSpinner from './LoadingSpinner.js' -import PaginaVaziaColecao from '../img/Pagina_vazia_colecao.png' +import LoadingSpinner from '../LoadingSpinner.js' +import PaginaVaziaColecao from '../../img/Pagina_vazia_colecao.png' import axios from 'axios' -import {apiUrl} from '../env'; +import {apiUrl} from '../../env'; import CreateNewFolderIcon from '@material-ui/icons/CreateNewFolder'; export default function TabPanelColecoes (props) { diff --git a/src/Components/TabPanels/TabPanelEditarPerfil.js b/src/Components/TabPanels/TabPanelEditarPerfil.js new file mode 100644 index 00000000..dc90dc09 --- /dev/null +++ b/src/Components/TabPanels/TabPanelEditarPerfil.js @@ -0,0 +1,72 @@ +import React, {useContext} from 'react' +import styled from 'styled-components' +import { Store } from '../../Store.js'; +import Button from '@material-ui/core/Button'; +import IconButton from '@material-ui/core/IconButton'; +import PhotoCamera from '@material-ui/icons/PhotoCamera'; +import Tooltip from '@material-ui/core/Tooltip'; + +export default function TabPanelEditarPerfil (props) { + const {state, dispatch} = useContext(Store) + + const updateCover = (selectorFiles : FileList) => { + console.log(selectorFiles) + console.log(selectorFiles[0].name) + } + + return ( + <ContainerDIv> + <h1 style={{fontSize:"30px", fontWeight:"300", marginTop:"0", marginBottom:"10px"}}>Editar Perfil </h1> + <ContentDiv> + <div style={{padding:"0", display:"flex", flexDirection:"column"}}> + <HeaderContainer> + <div style={{position:"relative", height:"100%"}}> + <img src={state.currentUser.userCover} alt="user cover avatar" style={{width:"100%", height:"100%", objectFit:"cover"}}/> + <input accept="image/*" style = {{display:"none"}} id="icon-button-file" type="file" onChange={(e) => updateCover(e.target.files)}/> + <label htmlFor="icon-button-file"> + <Tooltip title={<span style={{fontSize:"14px", overflow:"hidden", transition:"all .5s ease"}}>ALTERAR CAPA</span>} placement="left"> + <IconButton style={{position:"absolute",right:"0",top:"0",color:"#fff"}}color="primary" aria-label="upload picture" component="span"> + <PhotoCamera /> + </IconButton> + </Tooltip> + </label> + </div> + </HeaderContainer> + </div> + </ContentDiv> + </ContainerDIv> + ) +} + +const HeaderContainer = styled.div` + background-color : #afeeee; + position : relative; + height : 150px; + border-radius : 8px; +` + +const ContentDiv = styled.div` + display : flex; + flex-direction : column; + align-content : stretch; + align-items : stretch; + font-family : 'Roboto', sans serif !important; + font-size : 14px; + justify-content : center; + line-height : 20px; + text-align : center; + color : #666; +` + +const ContainerDIv = styled.div` + box-shadow : 0 0 5px 0rgba(0,0,0,.25); + background-color : #fff; + text-align : start; + margin-left : auto; + margin-right : auto; + padding : 40px; + margin : 20px 0 20px 10px; + border-radius : 3px; + display : flex; + flex-direction : column; +` diff --git a/src/Components/TabPanelFavoritos.js b/src/Components/TabPanels/TabPanelFavoritos.js similarity index 99% rename from src/Components/TabPanelFavoritos.js rename to src/Components/TabPanels/TabPanelFavoritos.js index 71c3e50a..3cb7ea74 100644 --- a/src/Components/TabPanelFavoritos.js +++ b/src/Components/TabPanels/TabPanelFavoritos.js @@ -4,10 +4,10 @@ import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; import axios from 'axios' -import {apiUrl} from '../env'; +import {apiUrl} from '../../env'; import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' import {NoPubSpan, DivConteudoNaoPublicado, DivTextoNoPublications} from './TabPanelMeusRecursos.js' -import LoadingSpinner from './LoadingSpinner.js' +import LoadingSpinner from '../LoadingSpinner.js' export default function TabPanelFavoritos (props) { const [loading, handleLoading] = useState(true) diff --git a/src/Components/TabPanels/TabPanelGerenciarConta.js b/src/Components/TabPanels/TabPanelGerenciarConta.js new file mode 100644 index 00000000..cb552890 --- /dev/null +++ b/src/Components/TabPanels/TabPanelGerenciarConta.js @@ -0,0 +1,7 @@ +import React from 'react' + +export default function TabPanelGerenciarConta (props) { + return ( + <span>a</span> + ) +} diff --git a/src/Components/TabPanelMeusRecursos.js b/src/Components/TabPanels/TabPanelMeusRecursos.js similarity index 99% rename from src/Components/TabPanelMeusRecursos.js rename to src/Components/TabPanels/TabPanelMeusRecursos.js index 29864d8c..5e4c0616 100644 --- a/src/Components/TabPanelMeusRecursos.js +++ b/src/Components/TabPanels/TabPanelMeusRecursos.js @@ -4,8 +4,8 @@ import { Container } from 'react-grid-system' import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; import axios from 'axios' -import {apiUrl} from '../env'; -import LoadingSpinner from './LoadingSpinner.js' +import {apiUrl} from '../../env'; +import LoadingSpinner from '../LoadingSpinner.js' export default function TabPanelAtividades (props) { const [loading, handleLoading] = useState(true) diff --git a/src/Components/TabPanelRede.js b/src/Components/TabPanels/TabPanelRede.js similarity index 98% rename from src/Components/TabPanelRede.js rename to src/Components/TabPanels/TabPanelRede.js index 8a7f2d4b..2eb21b00 100644 --- a/src/Components/TabPanelRede.js +++ b/src/Components/TabPanels/TabPanelRede.js @@ -5,8 +5,8 @@ import Paper from '@material-ui/core/Paper'; import Button from '@material-ui/core/Button'; import {ButtonMostrarTodos, ButtonMostrarMais, BtnAlinhaRecPvt, DivContainerRecursosPublicados, ContainerDivStyled, DivTitulo, StyledP, StyledHR} from './TabPanelMeusRecursos.js' import axios from 'axios' -import {apiUrl} from '../env'; -import LoadingSpinner from './LoadingSpinner.js' +import {apiUrl} from '../../env'; +import LoadingSpinner from '../LoadingSpinner.js' import ContainerRedeVazia from './ContainerRedeVazia.js' import {NoPubSpan, DivConteudoNaoPublicado, DivTextoNoPublications} from './TabPanelMeusRecursos.js' diff --git a/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js b/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js new file mode 100644 index 00000000..c350edba --- /dev/null +++ b/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js @@ -0,0 +1,7 @@ +import React from 'react' + +export default function TabPanelSolicitarContaProfessor (props) { + return ( + <span>a</span> + ) +} diff --git a/src/Components/TabRedeImgDiv.js b/src/Components/TabPanels/TabRedeImgDiv.js similarity index 100% rename from src/Components/TabRedeImgDiv.js rename to src/Components/TabPanels/TabRedeImgDiv.js diff --git a/src/Pages/EditProfilePage.js b/src/Pages/EditProfilePage.js new file mode 100644 index 00000000..f3f4e041 --- /dev/null +++ b/src/Pages/EditProfilePage.js @@ -0,0 +1,103 @@ +import React, {useState, useContext, useEffect} from 'react'; +import styled from 'styled-components' +import {Link} from 'react-router-dom' +import Breadcrumbs from '@material-ui/core/Breadcrumbs'; +import {BreadcrumbsDiv, StyledBreadcrumbs} from './UserPage.js' +import Tabs from '@material-ui/core/Tabs' +import Tab from '@material-ui/core/Tab'; +import Paper from '@material-ui/core/Paper'; +import TabPanelEditarPerfil from '../Components/TabPanels/TabPanelEditarPerfil.js' +import TabPanelSolicitarContaProfessor from '../Components/TabPanels/TabPanelSolicitarContaProfessor.js' +import TabPanelGerenciarConta from '../Components/TabPanels/TabPanelGerenciarConta.js' + +export default function EditProfilePage (props) { + const [tabs, setTabs] = useState([ + 'Editar Perfil', 'Solicitar conta de Professor', 'Gerenciar Conta' + ]) + const [tabValue, setTabValue] = useState(0) + const handleChangeTab = (e, newValue) => { + setTabValue(newValue) + } + + return ( + <div style={{backgroundColor:"#f4f4f4", color:"#666"}}> + <BreadcrumbsDiv> + <StyledBreadcrumbs> + <Link to="/" style={{color:"#00bcd4", textDecoration:"none"}}> + Página Inicial + </Link> + <span> + Minha área + </span> + <span> + Configurações da Conta + </span> + <span> + {tabs[tabValue]} + </span> + </StyledBreadcrumbs> + </BreadcrumbsDiv> + + <MainContainerDiv> + <div style={{width : "auto", fontFamily:"Roboto"}}> + <Paper elevation={3} style= {{width:"max-content"}}> + <ConfiguracoesMenu> + <h4 style={{marginTop:"10px", fontFamily:"inherit", display:"flex", justifyContent:"center"}}> + Configurações da Conta + </h4> + <StyledTabs + orientation = "vertical" + variant = "scrollable" + value = {tabValue} + onChange = {handleChangeTab} + TabIndicatorProps = {{style : {display : "none"}}} + > + <StyledTab label={tabs[0]}/> + <StyledTab label={tabs[1]}/> + <StyledTab label={tabs[2]}/> + </StyledTabs> + </ConfiguracoesMenu> + </Paper> + </div> + <div style={{width : "auto", paddingLeft:"1em"}}> + <Paper elevation={3} style= {{width:"max-content"}}> + {tabValue === 0 && <TabPanelEditarPerfil/>} + {tabValue === 1 && <TabPanelSolicitarContaProfessor/>} + {tabValue === 2 && <TabPanelGerenciarConta/>} + </Paper> + </div> + </MainContainerDiv> + </div> + ) +} + +const StyledTabs = styled(Tabs)` + .Mui-selected { + background-color : #f4f4f4; + } +` + +const StyledTab = styled(Tab)` + &:hover { + background-color : #6666663d; + } +` + +const ConfiguracoesMenu = styled.div` + margin : 20px 0 20px 0; + border-radius : 3px; + padding : 20px 0; + background-color : #fff; + text-align : start; +` + +const MainContainerDiv = styled.div` + padding : 0; + width : 1170; + margin-right : auto; + margin-left : auto; + display : flex; + flex-direction : row; + align-content : center; + justify-content : center; +` diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 89026587..2b9ce6e0 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -24,7 +24,7 @@ import IconButton from '@material-ui/core/IconButton'; import PhotoCamera from '@material-ui/icons/PhotoCamera'; import Tooltip from '@material-ui/core/Tooltip'; import Breadcrumbs from '@material-ui/core/Breadcrumbs'; -import Link from '@material-ui/core/Link'; +import {Link} from 'react-router-dom'; import Popover from '@material-ui/core/Popover'; import { Store } from '../Store.js'; import EditIcon from '@material-ui/icons/Edit'; @@ -32,11 +32,11 @@ import CheckDecagram from '../img/check-decagram-gray.svg' import Tabs from '@material-ui/core/Tabs'; import Tab from '@material-ui/core/Tab'; import Paper from '@material-ui/core/Paper'; -import TabPanelAtividades from '../Components/TabPanelAtividades.js' -import TabPanelMeusRecursos from '../Components/TabPanelMeusRecursos.js' -import TabPanelFavoritos from '../Components/TabPanelFavoritos.js' -import TabPanelColecoes from '../Components/TabPanelColecoes.js' -import TabPanelRede from '../Components/TabPanelRede.js' +import TabPanelAtividades from '../Components/TabPanels/TabPanelAtividades.js' +import TabPanelMeusRecursos from '../Components/TabPanels/TabPanelMeusRecursos.js' +import TabPanelFavoritos from '../Components/TabPanels/TabPanelFavoritos.js' +import TabPanelColecoes from '../Components/TabPanels/TabPanelColecoes.js' +import TabPanelRede from '../Components/TabPanels/TabPanelRede.js' import axios from 'axios' import {apiUrl} from '../env'; import ModalAlterarAvatar from '../Components/ModalAlterarAvatar.js' @@ -44,7 +44,10 @@ import ModalAlterarAvatar from '../Components/ModalAlterarAvatar.js' export default function UserPage (props){ const {state, dispatch} = useContext(Store) const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) - const [value, setValue] = useState(0); + const [tabValue, setTabValue] = useState(0); + const [tabs, setTabs] = useState([ + 'Atividades', 'Meus Recursos', 'Favoritos', 'Coleções', 'Rede' + ]) const user = localStorage.getItem('@portalmec/username') const id = localStorage.getItem('@portalmec/id') const [modalOpen, handleModal] = useState(false) @@ -102,7 +105,7 @@ export default function UserPage (props){ } const handleChangeTab = (event, newValue) => { - setValue(newValue) + setTabValue(newValue) } const updateCover = (selectorFiles : FileList) => { @@ -126,14 +129,14 @@ export default function UserPage (props){ <ContainerNoPad> <BreadcrumbsDiv> <StyledBreadcrumbs> - <Link href="/" style={{color:"#00bcd4"}}> + <Link to="/" style={{color:"#00bcd4", textDecoration:"none"}}> Página Inicial </Link> - <span style={{color:"#a5a5a5"}}> + <span> Minha área </span> - <span style={{color:"#a5a5a5"}}> - Atividades + <span> + {tabs[tabValue]} </span> </StyledBreadcrumbs> </BreadcrumbsDiv> @@ -166,7 +169,7 @@ export default function UserPage (props){ <p>{state.currentUser.education}</p> </div> </UserProfileInfoDiv> - <EditProfileAnchor href="/perfil/configuracoes/editarperfil"> + <EditProfileAnchor to="/editarperfil"> <Button> <EditIcon style={{marginRight:"5px", verticalAlign:"middle"}}/> <span>EDITAR PERFIL</span> </Button> @@ -204,7 +207,7 @@ export default function UserPage (props){ <RodapeDiv> <NavBarContentContainer> <StyledTabs - value ={value} + value ={tabValue} onChange ={handleChangeTab} indicatorColor ="primary" textColor ="primary" @@ -212,11 +215,11 @@ export default function UserPage (props){ scrollButtons = "auto" TabIndicatorProps={{style : {background:"#00bcd4"}}} > - <StyledTab label="Atividades"/> - <StyledTab label="Meus Recursos"/> - <StyledTab label="Favoritos"/> - <StyledTab label="Coleções"/> - <StyledTab label="Rede"/> + <StyledTab label={tabs[0]}/> + <StyledTab label={tabs[1]}/> + <StyledTab label={tabs[2]}/> + <StyledTab label={tabs[3]}/> + <StyledTab label={tabs[4]}/> </StyledTabs> </NavBarContentContainer> </RodapeDiv> @@ -224,11 +227,11 @@ export default function UserPage (props){ </Paper> </MainContainerDesktop> </div> - {value === 0 && <TabPanelAtividades id={id} config={config}/>} - {value === 1 && <TabPanelMeusRecursos id={id} config={config}/>} - {value === 2 && <TabPanelFavoritos id={id} config={config}/>} - {value === 3 && <TabPanelColecoes id={id} config={config}/>} - {value === 4 && <TabPanelRede id={id} config={config}/>} + {tabValue === 0 && <TabPanelAtividades id={id} config={config}/>} + {tabValue === 1 && <TabPanelMeusRecursos id={id} config={config}/>} + {tabValue === 2 && <TabPanelFavoritos id={id} config={config}/>} + {tabValue === 3 && <TabPanelColecoes id={id} config={config}/>} + {tabValue === 4 && <TabPanelRede id={id} config={config}/>} </ContainerNoPad> </HeaderDiv> </React.Fragment> @@ -258,16 +261,19 @@ const ContainerNoPad = styled.div` min-width : 1170px; ` -const BreadcrumbsDiv = styled.div` +export const BreadcrumbsDiv = styled.div` padding : 10px; display : flex; justify-content : center; ` -const StyledBreadcrumbs = styled(Breadcrumbs)` +export const StyledBreadcrumbs = styled(Breadcrumbs)` display : flex; justify-content : flex-start; max-width : 1170px; + span { + color : #a5a5a5; + } ` const MainContainerDesktop = styled(Container)` @@ -329,7 +335,7 @@ const UserProfileInfoDiv = styled.div` margin-bottom : 20px; ` -const EditProfileAnchor = styled.a` +const EditProfileAnchor = styled(Link)` Button { box-shadow : 0 2px 5px 0 rgba(0,0,0,.26); background-color : #fafafa; @@ -348,7 +354,7 @@ const EditProfileAnchor = styled.a` display: inline-block; text-align : center; :hover{ - background-color : #fafafa; + background-color : #fafafa; } } ` -- GitLab From 0b9cf1958bec551972157fefb9ecc45642dc77e4 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Sat, 8 Feb 2020 17:11:42 -0300 Subject: [PATCH 13/29] login e signup transformados em funcao; primeira aba de editar perfil quase pronta --- src/Components/LoginContainerFunction.js | 25 +- src/Components/LoginModal.js | 2 +- src/Components/MenuBar.js | 2 + src/Components/SignUpContainerFunction.js | 364 ++++++++++++++++++ src/Components/SignUpModal.js | 2 +- .../TabPanels/TabPanelEditarPerfil.js | 227 ++++++++++- 6 files changed, 607 insertions(+), 15 deletions(-) create mode 100644 src/Components/SignUpContainerFunction.js diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js index c55da450..aae88a65 100644 --- a/src/Components/LoginContainerFunction.js +++ b/src/Components/LoginContainerFunction.js @@ -48,7 +48,7 @@ export default function LoginContainer (props) { { dict : { key : false, - value : "" + value : localStorage.getItem("@portalmec/email") || "", } } ) @@ -57,12 +57,12 @@ export default function LoginContainer (props) { { dict : { key : false, - value : "" + value : localStorage.getItem("@portalmec/senha") ||"" } } ) - const [checkboxControl, handleCheckbox] = useState(false) + const [checkboxControl, setCheckbox] = useState(false) const switchModal = (e) => { e.preventDefault() @@ -104,16 +104,13 @@ export default function LoginContainer (props) { const onSubmit = (e) => { e.preventDefault() - const login = {email : formEmail.dict.value, senha : formSenha.dict.value} + const login = {email : formEmail.dict.value, senha : formSenha.dict.value, checkbox : checkboxControl} - if (!(formEmail.dict.key && formSenha.dict.key)) { + if (!(formEmail.dict.key || formSenha.dict.key)) { props.handleLoginInfo(login) limpaCamposForm() } - {/*if (checkboxControl) { - props.lembrarMe() - }*/} } //arrumar isso @@ -153,28 +150,32 @@ export default function LoginContainer (props) { </H3Styled> </H3Div> - <form ref="form" onSubmit={e => onSubmit(e)}> + <form onSubmit={e => onSubmit(e)}> <FormInput inputType={"text"} name={"email"} - value={formEmail} + value={formEmail.dict.value} placeholder={"E-mail"} handleChange={e => handleChange(e, 'email')} required={true} + error = {formEmail.dict.key} + help = {formEmail.dict.key ? ( formEmail.dict.value.length == 0 ? "Faltou preencher seu e-mail." : <span>Insira um endereço de e-mail válido.<br/>Por exemplo: seunome@gmail.com, seunome@hotmail.com</span>) : ""} /> <br/> <FormInput inputType={"password"} name={"senha"} - value={formSenha} + value={formSenha.dict.value} placeholder={"Senha"} handleChange={e => handleChange(e, 'senha')} required={true} + error = {formSenha.dict.key} + help = {formSenha.dict.key ? "Faltou digitar sua senha." : ""} /> <br/> <RememberRecover> - <LabeledCheckbox label={<StyledLabel><StyledSpan>Lembrar-me</StyledSpan></StyledLabel>} onchange={() => {handleCheckbox(!checkboxControl)}} disabledCheckbox={checkboxControl}/> + <LabeledCheckbox label={<StyledLabel><StyledSpan>Lembrar-me</StyledSpan></StyledLabel>} handleChange={() => setCheckbox(!checkboxControl)}/> <UserForgotTheirPasswordSpan>Esqueceu a senha? <a href="recuperar-senha" style={{textAlign: "right", color:"#4cd0e1"}}>Clique aqui!</a></UserForgotTheirPasswordSpan> </RememberRecover> diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js index 3b0482fd..90601b64 100644 --- a/src/Components/LoginModal.js +++ b/src/Components/LoginModal.js @@ -22,7 +22,7 @@ import Modal from '@material-ui/core/Modal'; import Backdrop from '@material-ui/core/Backdrop'; import Zoom from '@material-ui/core/Fade'; import styled from 'styled-components' -import LoginContainer from './LoginContainer.js' +import LoginContainer from './LoginContainerFunction.js' import {Store} from '../Store.js' import axios from 'axios' import {apiUrl} from '../env'; diff --git a/src/Components/MenuBar.js b/src/Components/MenuBar.js index 6ea7dc37..0b13e96a 100644 --- a/src/Components/MenuBar.js +++ b/src/Components/MenuBar.js @@ -51,6 +51,7 @@ const ButtonPublicarRecurso = styled(Button)` border : 1px transparent solid; background-color : #ff7f00 !important; align-content : center; + font-weight : 500 !important; text-transform: capitalize !important; font-stretch : expanded; max-width: 200 !important; @@ -81,6 +82,7 @@ const Left = styled.span ` ` const ButtonPubRecursoStyled = styled(Button)` + font-weight : 500 !important; border : 1.5px #666 solid !important; color: #666; box-shadow: none; diff --git a/src/Components/SignUpContainerFunction.js b/src/Components/SignUpContainerFunction.js new file mode 100644 index 00000000..23e63006 --- /dev/null +++ b/src/Components/SignUpContainerFunction.js @@ -0,0 +1,364 @@ +/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana + +This file is part of Plataforma Integrada MEC. + +Plataforma Integrada MEC is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Plataforma Integrada MEC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ + +import React, {useState} from "react"; +import GoogleLogin from 'react-google-login' +import { Button } from '@material-ui/core'; +//import FacebookLogin from 'react-facebook-login'; +import CloseIcon from '@material-ui/icons/Close'; +import styled from 'styled-components' +import {device} from './device.js' +import FormInput from "./FormInput.js" +import {StyledCloseModalButton, DialogContentDiv, DialogHeaderStyled, SocialConnectDiv, StyledGoogleLoginButton, H3Div} from './LoginContainer.js' + +var Recaptcha = require('react-recaptcha') + +var callback = function () { + console.log('Done!!!!'); +}; + +function validateUserInput(type, input) { + let flag = false + + if (type === 'nome') { + if(input.length < 1) { + flag = true + } + } + else if (type === 'email') { + if(input.split("").filter(x => x === "@").length !== 1) { + flag = true + } + } + else if (type === 'senha') { + if(input.length < 1) { + flag = true + } + } + + return flag +} + +export default function SignUpContainer (props) { + const [formNome, setNome] = useState( + { + dict : { + key : false, + value : "", + } + } + ) + + const [formEmail, setEmail] = useState( + { + dict : { + key : false, + value : "", + } + } + ) + + const [formSenha, setSenha] = useState( + { + dict : { + key : false, + value : "" + } + } + ) + + const handleChange = (e, type) => { + const userInput = e.target.value + const flag = validateUserInput(type, userInput) + + if (type === 'nome') { + setNome({...formNome, dict : { + key : flag, + value : userInput + }}) + console.log(formNome) + } + else if(type === 'email') { + setEmail({...formEmail, dict : { + key : flag, + value : userInput + }}) + console.log(formEmail) + } + else if(type === 'senha') { + setSenha({...formSenha, dict : { + key : flag, + value : userInput + }}) + console.log(formSenha) + } + } + + const limpaCamposForm = () => { + setNome({...formNome, dict : { + key : false, + value : '' + }}) + + setEmail({...formEmail, dict : { + key : false, + value : '' + }}); + + setSenha({...formSenha, dict : { + key : false, + value : '' + }}) + } + + const responseGoogle = (response) => { + console.log(response); + } + + const switchModal = (e) => { + e.preventDefault() + props.handleClose() + props.openLogin() + }; + + const onSubmit = (e) => { + e.preventDefault(); + const newLogin = {name : formNome.dict.value, email : formEmail.dict.value, password : formSenha.dict.value} + + if (!(formNome.dict.key || formEmail.dict.key || formSenha.dict.key)) { + props.handleLoginInfo(newLogin) + limpaCamposForm() + } + } + + return ( + <ContainerStyled > + <DialogHeaderStyled> + <span style={{width:"32px"}}/> + <H2Styled> Cadastrar-se + </H2Styled> + <StyledCloseModalButton onClick={props.handleClose} > + <CloseIcon /> + </StyledCloseModalButton> + </DialogHeaderStyled> + + <DialogContentDiv> + <SocialConnectDiv> + <StyledGoogleLoginButton + clientId="658977310896-knrl3gka66fldh83dao2rhgbblmd4un9.apps.googleusercontent.com" + onSuccess={responseGoogle} + onFailure={responseGoogle} + cookiePolicy={'single_host_origin'} + > + <span style={{textTransform:"none", fontSize:"13px"}}>Usando o Google</span> + </StyledGoogleLoginButton> + </SocialConnectDiv> + + <H3Div> + <H3Styled> + <RightSideStrikedH3/> + <span style={{verticalAlign:"middle"}}>ou</span> + <LeftSideStrikedH3/> + </H3Styled> + </H3Div> + + <form onSubmit={onSubmit}> + <FormInput + inputType={"text"} + name={"name"} + value={formNome.dict.value} + placeholder={"Nome Completo"} + handleChange={e => handleChange(e, 'nome')} + required={true} + error={formNome.dict.key} + /> + <br/> + <FormInput + inputType={"text"} + name={"email"} + value={formEmail.dict.value} + placeholder={"E-mail"} + handleChange={e => handleChange(e, 'email')} + required={true} + error={formEmail.dict.key} + help = {formEmail.dict.key ? (formEmail.dict.value.length == 0 ? "Faltou preencher seu e-mail." : <span>Insira um endereço de e-mail válido.<br/>Por exemplo: seunome@gmail.com, seunome@hotmail.com</span>) : ""} + /> + <br/> + <FormInput + inputType={"password"} + name={"password"} + value={formSenha.dict.value} + placeholder={"Senha"} + handleChange={e => handleChange(e, 'senha')} + required={true} + error={formSenha.dict.key} + help={formSenha.dict.key ? "Faltou definir uma senha." : ""} + /> + <br/> + <Recaptcha + sitekey="6LcyFr8UAAAAAOd0Po6rmZC1D_nYik8nLCAkNKsc" + size="normal" + render="explicit" + onloadCallback={callback} + /> + <ConfirmContainerStyled> + <StyledSignUpButton type="submit" variant="contained"> + <span + style={{paddingLeft:"16px", paddingRight:"16px", borderRadius:"3px", boxSizing:"border-box", + fontFamily:"Roboto, sans serif", fontWeight:"500", color:"#fff"}} + > + CADASTRAR + </span> + </StyledSignUpButton> + </ConfirmContainerStyled> + </form> + + <TermosDeUsoStyled> + <p>Ao se cadastrar, você está aceitando os Termos de Uso e de PolÃtica + de Privacidade. <a href="./">Ler Termos</a>.</p> + </TermosDeUsoStyled> + + <DialogFooterStyled> + <span style={{textAlign:"center", fontSize: "14px"}}>Já possui cadastro? <StyledAnchor href="" onClick={e => switchModal(e)}>ENTRAR</StyledAnchor></span> + </DialogFooterStyled> + </DialogContentDiv> + </ContainerStyled> + ) +} + +const ContainerStyled = styled.div` + box-sizing : border-box; + background-color : white; + max-width : none; + align : center; + display : flex; + flex-direction : column; + min-width : 450px; + + max-height : none; + position : relative; + padding : 10px; + @media ${device.mobileM} { + width : 100%; + height : 100%; + } +` + +const DialogFooterStyled = styled.div` + box-sizing : border-box; + font-family : 'Roboto', sans serif; + margin : 20px -20px; + padding-top : 20px; + border-top : 1px #e5e5e5 solid; + justify-content : center; + text-align : center; + line-height : 1.42857143 +` + +const TermosDeUsoStyled = styled.div` + font-family: 'Roboto', sans serif, 'Helvetica Neue', Helvetica, Arial, sans-serif; + color : #666; + font-size : 13px; + margin : 0 0 10px; + max-width : 350px; + margin-top : 10px; + text-align : start; +` + +const H2Styled = styled.h2` + align-self : center; + color : #666; + font-size : 26px; + font-weight : lighter; + justify-content: space-between; + font-family: 'Roboto', sans serif, 'Helvetica Neue', Helvetica, Arial, sans-serif !important; + text-align: center; + letter-spacing: .005em; +` + +const H3Styled = styled.h3` + overflow : hidden; + text-align : center; + font-size : 14px; + color : #666; + margin : 10px 0; +` +const RightSideStrikedH3 = styled.div` + display : inline-block; + border-bottom: 1px dotted #666; + vertical-align : middle; + font-weight : 500; + margin-right : 5px; + width : 45%; +` + +const LeftSideStrikedH3 = styled.div` + display : inline-block; + border-bottom: 1px dotted #666; + vertical-align : middle; + font-weight : 500; + margin-left : 5px; + width : 45%; +` + +const StyledAnchor = styled.a` + color : #00bcd4; + text-decoration : none; +` +//const StyledCloseModalButton = styled(Button)` +// display : inline-block; +// position : relative; +// float : right !important; +// margin-right : -8px; +// background : transparent; +// min-width: 0 !important; +// width : 40px; +//` + +const ConfirmContainerStyled = styled.div` + display : flex; + margin-top : 10px; + align-items : center; + justify-content : center; + box-sizing : border-box; + font-size : 13px; +` + +const StyledSignUpButton = styled(Button)` + background-color: #00bcd4 !important; + box-shadow : none !important; + outline: none !important; + border : 0 !important; + overflow : hidden !important; + width : 50% !important; + display : inline-block !important; + font-family : 'Roboto', sans serif !important; + font-size: 14px !important; + height : 36px !important; + align-items : center !important; + border-radius: 3px !important; + align-self : 50% !important; + :hover { + background-color : #00acc1 !important; + } +` + +const StyledRecaptcha = styled(Recaptcha)` + display : flex !important; + justify-content : center !important; +` diff --git a/src/Components/SignUpModal.js b/src/Components/SignUpModal.js index 49386ce7..a04c9420 100644 --- a/src/Components/SignUpModal.js +++ b/src/Components/SignUpModal.js @@ -22,7 +22,7 @@ import Modal from '@material-ui/core/Modal'; import Backdrop from '@material-ui/core/Backdrop'; import Fade from '@material-ui/core/Fade'; import styled from 'styled-components' -import SignUpContainer from './SignUpContainer.js' +import SignUpContainer from './SignUpContainerFunction.js' import {Store} from '../Store.js' import axios from 'axios' import {apiUrl} from '../env'; diff --git a/src/Components/TabPanels/TabPanelEditarPerfil.js b/src/Components/TabPanels/TabPanelEditarPerfil.js index dc90dc09..e2503a72 100644 --- a/src/Components/TabPanels/TabPanelEditarPerfil.js +++ b/src/Components/TabPanels/TabPanelEditarPerfil.js @@ -1,19 +1,101 @@ -import React, {useContext} from 'react' +import React, {useContext, useState} from 'react' import styled from 'styled-components' import { Store } from '../../Store.js'; +import {Link} from 'react-router-dom' import Button from '@material-ui/core/Button'; import IconButton from '@material-ui/core/IconButton'; import PhotoCamera from '@material-ui/icons/PhotoCamera'; import Tooltip from '@material-ui/core/Tooltip'; +import FormInput from "../FormInput.js" + +function validateUserInput(type, input) { + let flag = false + + if (type === 'nome') { + if(input.length < 1) { + flag = true + } + } + else if (type === 'aboutMe') { + if(input.length > 160) { + flag = true + } + } + + return flag +} export default function TabPanelEditarPerfil (props) { const {state, dispatch} = useContext(Store) + const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) + + const [formNome, setNome] = useState({ + dict : { + key : false, + value : "" + } + }) + + const [formAboutMe, setAboutMe] = useState({ + dict : { + key : false, + value : "", + } + }) + + const handleHoverAlterarFoto = () => { + handleAlterarFoto(!hoverAlterarFoto) + } const updateCover = (selectorFiles : FileList) => { console.log(selectorFiles) console.log(selectorFiles[0].name) } + const handleChange = (e, type) => { + const userInput = e.target.value + const flag = validateUserInput(type, userInput) + + if(type === 'nome') { + setNome({...formNome, dict : { + key : flag, + value : userInput + }}) + console.log(formNome) + } + else if (type === 'aboutMe') { + setAboutMe({...formAboutMe, dict : { + key : flag, + value : userInput, + }}) + console.log(formAboutMe) + } + } + + const limpaCamposForm = () => { + setNome({...formNome, dict: { + key : false, + value : '' + }}) + + setAboutMe({...formAboutMe, dict: { + key : false, + value : '' + }}) + } + + const handleSubmit = (e) => { + e.preventDefault() + const info = {nome : formNome.dict.value, aboutMe : formAboutMe.dict.value} + const flagNome = formNome.dict.key + const flagAboutMe = formAboutMe.dict.key + + if (!(flagNome || flagAboutMe)) { + console.log(info) + limpaCamposForm() + } + } + return ( <ContainerDIv> <h1 style={{fontSize:"30px", fontWeight:"300", marginTop:"0", marginBottom:"10px"}}>Editar Perfil </h1> @@ -31,13 +113,156 @@ export default function TabPanelEditarPerfil (props) { </Tooltip> </label> </div> + <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto}> + <img src={state.currentUser.userAvatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/> + <ChangeAvatarDiv style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}> + <span>Alterar Foto</span> + </ChangeAvatarDiv> + </ProfileAvatarDiv> </HeaderContainer> + <br/> + <br/> + <br/> + <br/> + </div> + + <div style={{paddingTop:"90px"}}> + <div style={{display:"flex", flexDirection:"row"}}> + <form onSubmit={e => handleSubmit(e)}> + <FormInput + inputType={"text"} + name={"Nome Completo"} + value={formNome.dict.value} + placeholder={"Nome Completo"} + handleChange={e => handleChange(e, 'nome')} + required={true} + error={formNome.dict.key} + /> + <FormInput + inputType={"text"} + name={"Sobre Mim"} + value={formAboutMe.dict.value} + multi = {true} + rows="3" + rowsMax = "3" + error={formAboutMe.dict.key} + placeholder={"Sobre Mim"} + handleChange={e => handleChange(e, 'aboutMe')} + required={false} + help = {formAboutMe.dict.value.length + '/160'} + /> + </form> + </div> + <ButtonsDiv> + <Link to="perfil" ><ButtonCancelar ><span>CANCELAR</span></ButtonCancelar></Link> + <ButtonConfirmar onClick={e => handleSubmit(e)}><span>SALVAR ALTERAÇÕES</span></ButtonConfirmar> + </ButtonsDiv> </div> </ContentDiv> </ContainerDIv> ) } +const ButtonConfirmar = styled(Button)` + background-color : #00bcd4 !important; + color : #fff !important; + font-family : 'Roboto',sans-serif !important; + font-size : 14px !important; + font-weight : 500 !important; + padding-left : 16px !important; + padding-right : 16px !important; + outline : none !important; + margin : 6px 8px !important; + white-space : nowrap !important; + text-transform : uppercase !important; + font-weight : bold !important; + font-size : 14px !important; + font-style : inherit !important; + font-variant : inherit !important; + font-family : inherit !important; + text-decoration : none !important; + overflow : hidden !important; + display : inline-block !important; + position : relative !important; + cursor : pointer !important; + min-height : 36px !important; + min-width : 88px !important; + line-height : 36px !important; + vertical-align : middle !important; + align-items : center !important; + text-align : center !important; + border-radius : 3px !important; + box-sizing : border-box !important; + border : 0 !important; +` + +const ButtonCancelar = styled(Button)` + height : 36px !important; + padding-left : 16px !important; + padding-right : 16px !important; + font-weight : bold !important; + border-radius : 3px !important; + outline : none !important; + text-transform : uppercase !important; + font-weight : 500 !important; + font-size : 14px !important; + font-style : inherit !important; + font-variant : inherit !important; + font-family : inherit !important; + text-decoration : none !important; + overflow : hidden !important; + display : inline-block !important; + position : relative !important; + cursor : pointer !important; + min-height : 36px !important; + min-width : 88px !important; + line-height : 36px !important; + vertical-align : middle !important; + align-items : center !important; + text-align : center !important; + border-radius : 3px !important; + box-sizing : border-box !important; + user-select : none !important; + border : 0 !important; + padding : 0 6px !important; + margin : 6px 8px !important; + :hover{ + background-color : #f1f1f1 !important; + } + +` + +const ButtonsDiv = styled.div` + text-align : right; + margin-top : 80px; +` + +const ChangeAvatarDiv = styled.div` + height : 40px; + position: absolute; + width : 100%; + bottom : 0; + display : flex; + background-color : #000; + color : #fff; + justify-content : center; +` + +const ProfileAvatarDiv = styled.div` + bottom : -10px; + left : 120px !important; + border-radius : 100%; + position : absolute; + width : 100px !important; + height : 100px !important; + overflow : hidden; + border : 8px solid #fff; + outline : 0; + cursor : pointer; + z-index : 10; + background-color : #fff !important; +` + const HeaderContainer = styled.div` background-color : #afeeee; position : relative; -- GitLab From 84efe671070f209c9d87094e5a80c33174186edc Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 11 Feb 2020 10:03:19 -0300 Subject: [PATCH 14/29] layout de edicao de perfil pronto; falta adicionar as rotas --- src/Components/LoginContainerFunction.js | 4 +- src/Components/LoginModal.js | 2 +- src/Components/MenuBar.js | 12 +- src/Components/MenuList.js | 7 +- src/Components/SignUpContainerFunction.js | 2 +- .../TabPanels/TabPanelAtividades.js | 4 +- .../TabPanels/TabPanelEditarPerfil.js | 38 +-- .../TabPanels/TabPanelGerenciarConta.js | 235 +++++++++++++++++- .../TabPanelSolicitarContaProfessor.js | 113 ++++++++- src/Pages/EditProfilePage.js | 91 ++++++- src/Pages/RecuperarSenha.js | 0 src/Pages/UserPage.js | 6 +- src/Store.js | 3 +- 13 files changed, 455 insertions(+), 62 deletions(-) create mode 100644 src/Pages/RecuperarSenha.js diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js index aae88a65..5a0301f1 100644 --- a/src/Components/LoginContainerFunction.js +++ b/src/Components/LoginContainerFunction.js @@ -35,7 +35,7 @@ function validateUserInput(type, input) { } } else if (type === 'senha') { - if(input.length < 1) { + if(input.length < 8) { flag = true } } @@ -170,7 +170,7 @@ export default function LoginContainer (props) { handleChange={e => handleChange(e, 'senha')} required={true} error = {formSenha.dict.key} - help = {formSenha.dict.key ? "Faltou digitar sua senha." : ""} + help = {formSenha.dict.key ? (formSenha.dict.value.length == 0 ? "Faltou digitar sua senha." : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} /> <br/> diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js index 90601b64..9c41e3e1 100644 --- a/src/Components/LoginModal.js +++ b/src/Components/LoginModal.js @@ -40,7 +40,7 @@ const StyledLogin = styled(Modal)` border-radius : 4px; ` -function Alert(props) { +export function Alert(props) { return <MuiAlert elevation={6} variant="filled" {...props} />; } diff --git a/src/Components/MenuBar.js b/src/Components/MenuBar.js index 0b13e96a..f9e0a187 100644 --- a/src/Components/MenuBar.js +++ b/src/Components/MenuBar.js @@ -109,12 +109,12 @@ export default function MenuBar(props){ ] const minhaArea = [ - { name: "Perfil e Atividades", href: "/perfil"}, - { name: "Recursos Publicados", href: "/perfil/recursos-publicados"}, - { name: "Favoritos", href: "/perfil/favoritos"}, - { name: "Coleções", href: "/perfil/colecoes"}, - { name: "Rede", href: "/perfil/rede"}, - { name: "Configurações", href: "/perfil/cofiguracoes/editarperfil"}, + { name: "Perfil e Atividades", href: "/perfil", value : '0'}, + { name: "Recursos Publicados", href: "/perfil", value : '1'}, + { name: "Favoritos", href: "/perfil", value : '2'}, + { name: "Coleções", href: "/perfil", value : '3'}, + { name: "Rede", href: "/perfil", value : '4'}, + { name: "Configurações", href: "/editarperfil"}, ] return( diff --git a/src/Components/MenuList.js b/src/Components/MenuList.js index 910af9cf..d3f2a6ea 100644 --- a/src/Components/MenuList.js +++ b/src/Components/MenuList.js @@ -108,8 +108,11 @@ export default function MenuList(props) { { props.items.map((item)=> - <Link key={item.name} to={item.href} style={{textDecoration:"none"}} ><MenuItem style= {{fontSize:"14px", padding:"5px 20px", color:"#666"}}>{item.name}</MenuItem></Link> - ) + <Link to={{ + pathname : item.href, + state : item.value + }} style={{textDecoration:"none"}} ><MenuItem style= {{fontSize:"14px", padding:"5px 20px", color:"#666"}}>{item.name}</MenuItem></Link> + ) } <StyledButtonSair onClick={handleLogout}> <StyledMenuItem disableGutters={true}>Sair<StyledExitToAppIcon/></StyledMenuItem></StyledButtonSair> diff --git a/src/Components/SignUpContainerFunction.js b/src/Components/SignUpContainerFunction.js index 23e63006..84817081 100644 --- a/src/Components/SignUpContainerFunction.js +++ b/src/Components/SignUpContainerFunction.js @@ -46,7 +46,7 @@ function validateUserInput(type, input) { } } else if (type === 'senha') { - if(input.length < 1) { + if(input.length < 8) { flag = true } } diff --git a/src/Components/TabPanels/TabPanelAtividades.js b/src/Components/TabPanels/TabPanelAtividades.js index 5e416be8..eda3b1e5 100644 --- a/src/Components/TabPanels/TabPanelAtividades.js +++ b/src/Components/TabPanels/TabPanelAtividades.js @@ -17,9 +17,9 @@ export default function TabPanelAtividades (props) { axios.get(`${apiUrl}/feed`, props.config) .then( (response) => { handleLoading(false) - console.log(response) + //console.log(response) setNotifications(response.data) - console.log(response.data.length) + //console.log(response.data.length) setLength(response.data.length) }, (error) => { diff --git a/src/Components/TabPanels/TabPanelEditarPerfil.js b/src/Components/TabPanels/TabPanelEditarPerfil.js index e2503a72..67fc6a10 100644 --- a/src/Components/TabPanels/TabPanelEditarPerfil.js +++ b/src/Components/TabPanels/TabPanelEditarPerfil.js @@ -97,9 +97,9 @@ export default function TabPanelEditarPerfil (props) { } return ( - <ContainerDIv> - <h1 style={{fontSize:"30px", fontWeight:"300", marginTop:"0", marginBottom:"10px"}}>Editar Perfil </h1> - <ContentDiv> + <div className="card-config"> + <h1 style={{fontWeight:"300"}}>Editar Perfil </h1> + <div className='content-div'> <div style={{padding:"0", display:"flex", flexDirection:"column"}}> <HeaderContainer> <div style={{position:"relative", height:"100%"}}> @@ -158,8 +158,8 @@ export default function TabPanelEditarPerfil (props) { <ButtonConfirmar onClick={e => handleSubmit(e)}><span>SALVAR ALTERAÇÕES</span></ButtonConfirmar> </ButtonsDiv> </div> - </ContentDiv> - </ContainerDIv> + </div > + </div> ) } @@ -196,7 +196,7 @@ const ButtonConfirmar = styled(Button)` border : 0 !important; ` -const ButtonCancelar = styled(Button)` +export const ButtonCancelar = styled(Button)` height : 36px !important; padding-left : 16px !important; padding-right : 16px !important; @@ -269,29 +269,3 @@ const HeaderContainer = styled.div` height : 150px; border-radius : 8px; ` - -const ContentDiv = styled.div` - display : flex; - flex-direction : column; - align-content : stretch; - align-items : stretch; - font-family : 'Roboto', sans serif !important; - font-size : 14px; - justify-content : center; - line-height : 20px; - text-align : center; - color : #666; -` - -const ContainerDIv = styled.div` - box-shadow : 0 0 5px 0rgba(0,0,0,.25); - background-color : #fff; - text-align : start; - margin-left : auto; - margin-right : auto; - padding : 40px; - margin : 20px 0 20px 10px; - border-radius : 3px; - display : flex; - flex-direction : column; -` diff --git a/src/Components/TabPanels/TabPanelGerenciarConta.js b/src/Components/TabPanels/TabPanelGerenciarConta.js index cb552890..0c94d8b7 100644 --- a/src/Components/TabPanels/TabPanelGerenciarConta.js +++ b/src/Components/TabPanels/TabPanelGerenciarConta.js @@ -1,7 +1,238 @@ -import React from 'react' +import React, {useState} from 'react' +import Paper from '@material-ui/core/Paper'; +import Button from '@material-ui/core/Button'; +import FormInput from "../FormInput.js" +import {CompletarCadastroButton} from './TabPanelSolicitarContaProfessor.js' +import {ButtonCancelar} from './TabPanelEditarPerfil.js' + +function validateUserInput(type, input, confirmation) { + let flag = false + + if (type === 'senha') { + if(input.length < 8) { + flag = true + } + } + else if (type === 'confirmacao') { + if (input !== confirmation) + flag = true + } + + return flag +} + +function validateUserEmail(input) { + let flag = false + + if(input.split("").filter(x => x === "@").length !== 1 || !(input.match(/^([\w.%+-]+)@([\w-]+\.)+([\w]{2,})$/i))) { + flag = true + } + return flag +} export default function TabPanelGerenciarConta (props) { + const [senhaAtual, setSenhaAtual] = useState( + { + dict : { + key : false, + value : localStorage.getItem("@portalmec/senha") || "" + } + } + ) + + const [novaSenha, setNovaSenha] = useState( + { + dict : { + key : false, + value : "" + } + } + ) + + const [novaSenhaConfirmacao, setNovaSenhaConfirmacao] = useState( + { + dict : { + key : false, + value : "" + } + } + ) + + const [novoEmail, setNovoEmail] = useState( + { + dict : { + key : false, + value : "" + } + } + ) + + const handleChangeSenha = (e, type) => { + const userInput = e.target.value + const flag = (type === 'confirmacao' ? validateUserInput('confirmacao', userInput, novaSenha.dict.value) : validateUserInput('senha', userInput, '')) + + if(type === 'senhaAtual') { + setSenhaAtual({...senhaAtual, dict : { + key : flag, + value : userInput + }}) + console.log(senhaAtual) + } + else if(type === 'novaSenha') { + setNovaSenha({...novaSenha, dict : { + key : flag, + value : userInput + }}) + console.log(novaSenha) + } + else if (type === 'confirmacao'){ + setNovaSenhaConfirmacao({...novaSenhaConfirmacao, dict : { + key : flag, + value : userInput + }}) + console.log(novaSenhaConfirmacao) + } + } + + const handleChangeEmail = (e) => { + const userInput = e.target.value + const flag = validateUserEmail(userInput) + + setNovoEmail({...novoEmail, dict : { + key : flag, + value : userInput + }}) + + console.log(novoEmail) + } + + const limpaCamposForm = () => { + setSenhaAtual({...senhaAtual, dict : { + key : false, + value : '' + }}) + + setNovaSenha({...novaSenha, dict : { + key : false, + value : '' + }}) + + setNovaSenhaConfirmacao({...novaSenhaConfirmacao, dict : { + key : false, + value : '' + }}) + } + + const onSubmit = (e, type) => { + e.preventDefault() + + if (type === 'senha'){ + if (senhaAtual.dict.value === localStorage.getItem("@portalmec/senha")) { + const login = {senhaAtual : senhaAtual.dict.value, novaSenha : novaSenha.dict.value, novaSenhaConfirmacao : novaSenhaConfirmacao.dict.value} + + if (!(senhaAtual.dict.key || novaSenha.dict.key || novaSenhaConfirmacao.dict.key)) { + console.log(login) + limpaCamposForm() + props.handleSnackbar() + } + } + else { + console.log(localStorage.getItem("@portalmec/senha"), senhaAtual.dict.value) + } + } + else { + console.log(novoEmail.dict.value) + } + + } + return ( - <span>a</span> + <> + <Paper elevation={3} style= {{width:"100%"}}> + <div className='card-config'> + <div className='content-div'> + <h1>Gerenciar Conta</h1> + <div style={{display : "flex", flexDirection : "column"}}> + <form style={{width:"500px", margin : "0 0 20px 0"}} onSubmit={e => onSubmit(e, 'senha')}> + <h4 style={{display:"flex", justifyContent:"flex-start", fontSize:"18px"}}>Alterar Senha</h4> + <FormInput + inputType={"password"} + name={"Senha Atual"} + value={senhaAtual.dict.value} + placeholder={"Senha atual"} + handleChange={e => handleChangeSenha(e, 'senhaAtual')} + required={true} + error={senhaAtual.dict.key} + help={ senhaAtual.dict.key ? "Faltou inserir sua senha atual" : ""} + /> + <FormInput + inputType={"password"} + name={"Nova senha"} + value={novaSenha.dict.value} + placeholder={"Nova senha"} + handleChange={e => handleChangeSenha(e, 'novaSenha')} + required={true} + error={novaSenha.dict.key} + help={ novaSenha.dict.key ? (novaSenha.dict.value.length == 0 ? "Faltou definir uma nova senha" : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} + /> + <FormInput + inputType={"password"} + name={"Digite novamente a nova senha"} + value={novaSenhaConfirmacao.dict.value} + placeholder={"Digite novamente a nova senha"} + handleChange={e => handleChangeSenha(e, 'confirmacao')} + required={true} + error={novaSenhaConfirmacao.dict.key} + help={ novaSenhaConfirmacao.dict.key ? "As senhas devem ser iguais" : ""} + /> + <div style={{display:"flex", flexDirection:"row", justifyContent:"space-evenly"}}> + <span style={{paddingTop:"0.7em"}}><a href="recuperar-senha" style={{textAlign: "flex-start", color:"#00bcd4"}}>Esqueceu a senha?</a></span> + <div style={{margin:"0"}}> + <ButtonCancelar onClick={limpaCamposForm}>Limpar Campos</ButtonCancelar> + <CompletarCadastroButton type="submit">Alterar Senha</CompletarCadastroButton> + </div> + </div> + </form> + </div> + </div> + </div> + </Paper> + <Paper elevation={3} style= {{width:"100%"}}> + <div className='card-config'> + <div className='content-div'> + <div style={{display : "flex", flexDirection : "column"}}> + <form style={{width:"500px"}} onSubmit={(e) => onSubmit(e, 'email')}> + <h4 style={{display:"flex", justifyContent:"flex-start", fontSize:"18px"}}>Alterar e-mail</h4> + <FormInput + inputType={"text"} + name={"email"} + value={novoEmail.dict.value} + placeholder={"E-mail"} + handleChange={e => handleChangeEmail(e)} + required={true} + error = {novoEmail.dict.key} + /> + <div style={{margin:"0", display:"flex", justifyContent:"flex-start"}}> + <CompletarCadastroButton type="submit">SALVAR ALTERAÇÕES</CompletarCadastroButton> + </div> + </form> + </div> + </div> + </div> + </Paper> + <Paper elevation={3} style= {{width:"100%"}}> + <div className='card-config'> + <div className='content-div'> + <div> + <h4 style={{display:"flex", justifyContent:"flex-start", fontSize:"18px"}}>Conta</h4> + <span style={{margin:"0", display:"flex", justifyContent:"flex-start"}}>Antes de excluir a sua conta, saiba que ela será removida permanentemente.</span> + </div> + <div style={{margin:"0", display:"flex", justifyContent:"flex-start"}}> + <ButtonCancelar style={{color:'#eb4034'}}>EXCLUIR CONTA</ButtonCancelar> + </div> + </div> + </div> + </Paper> + </> ) } diff --git a/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js b/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js index c350edba..cd461887 100644 --- a/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js +++ b/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js @@ -1,7 +1,116 @@ -import React from 'react' +import React, {useContext} from 'react' +import { Store } from '../../Store.js'; +import styled from 'styled-components' +import Button from '@material-ui/core/Button'; +//3 casos + //Professor nao cadastrado (nao pediu OU submitter_request = rejected) + //Professor em análise (submitter_request = requested) + //Professor aceito (submitter_request = accepted) export default function TabPanelSolicitarContaProfessor (props) { + const {state, dispatch} = useContext(Store) + return ( - <span>a</span> + <div className='card-config'> + <div className='content-div'> + { + state.currentUser.submitter_request == 'default' || state.currentUser.submitter_request == 'rejected' ? + ( + [ + <div style={{paddingLeft:"100px", paddingRight:"101px"}}> + <ImageDiv/> + <StyledH2>Você é professor(a) da educação básica e gostaria de colaborar com a Plataforma?</StyledH2> + <StyledP>Ao ser identificado como professor(a), você poderá publicar e compartilhar recursos educacionais + digitais na plataforma com toda a comunidade escolar do paÃs. + </StyledP> + <div> + <CompletarCadastroButton> + SIM, COMPLETAR CADASTRO + </CompletarCadastroButton> + </div> + </div> + ] + ) + : + ( + [ + <> + { + state.currentUser.submitter_request == 'requested' ? + ( + [ + <span>Requested</span> + ] + ) + : + ( + [ + <span>Professor</span> + ] + ) + } + </> + ] + ) + } + </div> + </div> ) } + +export const CompletarCadastroButton = styled(Button)` + background-color : #00bcd4 !important; + color : #fff !important; + font-family : 'Roboto',sans-serif !important; + font-size : 14px !important; + font-weight : bold !important; + height : 36px !important; + border-radius : 3px !important; + padding-left : 16px !important; + padding-right : 16px !important; + outline : none !important; + margin : 6px 8px !important; + white-space : nowrap !important; + text-transform : uppercase !important; + font-weight : bold !important; + font-size : 14px !important; + font-style : inherit !important; + font-variant : inherit !important; + font-family : inherit !important; + text-decoration : none !important; + overflow : hidden !important; + display : inline-block !important; + position : relative !important; + cursor : pointer !important; + min-height : 36px !important; + min-width : 88px !important; + vertical-align : middle !important; + align-items : center !important; + text-align : center !important; + box-sizing : border-box !important; + border : 0 !important; +` + +const StyledP = styled.p` + font-size : 15px; + line-height : 22px; + text-align : left; + padding-bottom : 20px; +` + +const StyledH2 = styled.h2` + font-weight : 200; + font-size : 26px; + line-height : 36px; + text-align : left; + padding-bottom : 20px; +` + +const ImageDiv = styled.div` + background-image : url(https://plataformaintegrada.mec.gov.br/img/Publicar.png); + display : block; + height : 114px; + background-size : contain; + background-position : center center; + background-repeat : no-repeat; +` diff --git a/src/Pages/EditProfilePage.js b/src/Pages/EditProfilePage.js index f3f4e041..59ee4f37 100644 --- a/src/Pages/EditProfilePage.js +++ b/src/Pages/EditProfilePage.js @@ -9,6 +9,10 @@ import Paper from '@material-ui/core/Paper'; import TabPanelEditarPerfil from '../Components/TabPanels/TabPanelEditarPerfil.js' import TabPanelSolicitarContaProfessor from '../Components/TabPanels/TabPanelSolicitarContaProfessor.js' import TabPanelGerenciarConta from '../Components/TabPanels/TabPanelGerenciarConta.js' +import Snackbar from '@material-ui/core/Snackbar'; +import MuiAlert from '@material-ui/lab/Alert'; +import {Alert} from '../Components/LoginModal.js' +import Grid from '@material-ui/core/Grid' export default function EditProfilePage (props) { const [tabs, setTabs] = useState([ @@ -19,8 +23,21 @@ export default function EditProfilePage (props) { setTabValue(newValue) } + const [snackbarOpened, handleSnackbar] = useState(false) + const handleCloseSnackbar = (event, reason) => { + if (reason === 'clickaway') { + return; + } + + handleSnackbar(false); + } return ( <div style={{backgroundColor:"#f4f4f4", color:"#666"}}> + <Snackbar open={snackbarOpened} autoHideDuration={1000} onClose={handleCloseSnackbar} + anchorOrigin = {{ vertical:'top', horizontal:'right' }} + > + <Alert severity="success" style={{backgroundColor:"#00acc1"}}>Senha alterada com sucesso!</Alert> + </Snackbar> <BreadcrumbsDiv> <StyledBreadcrumbs> <Link to="/" style={{color:"#00bcd4", textDecoration:"none"}}> @@ -38,8 +55,9 @@ export default function EditProfilePage (props) { </StyledBreadcrumbs> </BreadcrumbsDiv> - <MainContainerDiv> - <div style={{width : "auto", fontFamily:"Roboto"}}> + <div style={{justifyContent:"center", width:"1170px", margin:"auto"}}> + <MainContainerDiv container spacing={3}> + <Grid item xs={3} style={{width : "auto", fontFamily:"Roboto"}} > <Paper elevation={3} style= {{width:"max-content"}}> <ConfiguracoesMenu> <h4 style={{marginTop:"10px", fontFamily:"inherit", display:"flex", justifyContent:"center"}}> @@ -58,19 +76,74 @@ export default function EditProfilePage (props) { </StyledTabs> </ConfiguracoesMenu> </Paper> - </div> - <div style={{width : "auto", paddingLeft:"1em"}}> - <Paper elevation={3} style= {{width:"max-content"}}> - {tabValue === 0 && <TabPanelEditarPerfil/>} + </Grid> + <TabContentDiv item xs={9}> + <Paper elevation={3} style= {{width:"100%"}}> + {tabValue === 0 && <TabPanelEditarPerfil />} {tabValue === 1 && <TabPanelSolicitarContaProfessor/>} - {tabValue === 2 && <TabPanelGerenciarConta/>} </Paper> - </div> + {tabValue === 2 && <TabPanelGerenciarConta handleSnackbar={() => {handleSnackbar(true)}}/>} + </TabContentDiv> </MainContainerDiv> + </div> </div> ) } +const TabContentDiv = styled(Grid)` + width : auto; + + .card-config { + padding : 40px; + margin : 20px 0 20px 10px; + border-radius : 3px; + box-shadow : 0 0 5px 0rgba(0,0,0,.25); + background-color : #fff; + text-align : start; + margin-left : auto; + margin-right : auto; + display : flex; + flex-direction : column; + } + + .content-div { + display : flex; + flex-direction : column; + align-content : stretch; + align-items : stretch; + font-family : 'Roboto', sans serif !important; + font-size : 14px; + justify-content : center; + line-height : 20px; + text-align : center; + color : #666; + } + + .h2 { + margin-top : 20px; + margin-bottom : 10px; + } + + .p { + margin : 0 0 10px; + } + + .h1 { + font-size : 30px; + font-weight : 300; + margin-top : 0; + margin-bottom : 10px; + } + + .h4 { + font-size : 18px; + margin-top : 10px; + margin-bottom : 10px; + font-weight : 500; + line-height : 1.1; + } +` + const StyledTabs = styled(Tabs)` .Mui-selected { background-color : #f4f4f4; @@ -91,7 +164,7 @@ const ConfiguracoesMenu = styled.div` text-align : start; ` -const MainContainerDiv = styled.div` +const MainContainerDiv = styled(Grid)` padding : 0; width : 1170; margin-right : auto; diff --git a/src/Pages/RecuperarSenha.js b/src/Pages/RecuperarSenha.js new file mode 100644 index 00000000..e69de29b diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 2b9ce6e0..28b81c21 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -44,7 +44,9 @@ import ModalAlterarAvatar from '../Components/ModalAlterarAvatar.js' export default function UserPage (props){ const {state, dispatch} = useContext(Store) const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) - const [tabValue, setTabValue] = useState(0); + const [tabValue, setTabValue] = useState( + Number(props.location.state) || 0 + ); const [tabs, setTabs] = useState([ 'Atividades', 'Meus Recursos', 'Favoritos', 'Coleções', 'Rede' ]) @@ -249,7 +251,7 @@ export default function UserPage (props){ } -const HeaderDiv = styled.div` +export const HeaderDiv = styled.div` background-color : #f4f4f4; color : #666; font-size : 14px; diff --git a/src/Store.js b/src/Store.js index 8fc1382a..3225fef5 100644 --- a/src/Store.js +++ b/src/Store.js @@ -46,7 +46,8 @@ const initialState = { userCover : '', uid : '', followCount : 0, - collectionsCount : 0 + collectionsCount : 0, + submitter_request : 'default' } } -- GitLab From 1ed4116a08f2f6af77b33786205fb83f0ff135af Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 11 Feb 2020 11:08:23 -0300 Subject: [PATCH 15/29] componente funcional validacao de input adicionado --- src/App.js | 3 +- src/Components/FormValidationFunction.js | 45 +++++++++++ src/Components/LoginContainerFunction.js | 24 +----- src/Components/SignUpContainerFunction.js | 35 ++------- .../TabPanels/TabPanelEditarPerfil.js | 22 +----- .../TabPanels/TabPanelGerenciarConta.js | 30 +------- src/Pages/PasswordRecoveryPage.js | 77 +++++++++++++++++++ src/Pages/RecuperarSenha.js | 0 8 files changed, 142 insertions(+), 94 deletions(-) create mode 100644 src/Components/FormValidationFunction.js create mode 100644 src/Pages/PasswordRecoveryPage.js delete mode 100644 src/Pages/RecuperarSenha.js diff --git a/src/App.js b/src/App.js index 3ad7a3b8..d2251d22 100644 --- a/src/App.js +++ b/src/App.js @@ -24,7 +24,7 @@ import EcFooter from './Components/EcFooter'; import GNUAGPLfooter from './Components/AGPLFooter'; import UserPage from './Pages/UserPage'; import UserTerms from './Pages/UserTerms'; - +import PasswordRecoveryPage from './Pages/PasswordRecoveryPage.js' import Teste from './Pages/Teste'; import ResourcePage from './Pages/ResourcePage'; @@ -81,6 +81,7 @@ export default function App(){ <Route path="/termos" component={UserTerms}/> <Route path="/teste" component={Teste}/> <Route path="/contato" component = {Contact}/> + <Route path="/recuperar-senha" component={PasswordRecoveryPage}/> </Switch> <EcFooter/> <GNUAGPLfooter/> diff --git a/src/Components/FormValidationFunction.js b/src/Components/FormValidationFunction.js new file mode 100644 index 00000000..c7a8407c --- /dev/null +++ b/src/Components/FormValidationFunction.js @@ -0,0 +1,45 @@ +import React from 'react' + +//fieldName : form field name +//userInput : user input for a given field +//confirmation : optional password confirmation argument +export default function ValidateUserInput (fieldName, userInput, confirmation) { + let flag = false + + switch(fieldName) { + case('username'): + if (userInput.length < 1) { + flag = true + } + break; + case('email'): + if(userInput.length < 7 || !(userInput.match(/^([\w.%+-]+)@([\w-]+\.)+([\w]{2,})$/i))) { + flag = true + } + break; + case('password'): + if (userInput.length < 8) { + flag = true + } + break; + case('confirmation'): + if (userInput !== confirmation) { + flag = true + } + break; + case('message'): + if(userInput.length === 0) { + flag = true + } + break; + case('aboutMe'): + if(userInput.length > 160) { + flag = true + } + break; + default: + break; + } + + return flag +} diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js index 5a0301f1..b02c7fcd 100644 --- a/src/Components/LoginContainerFunction.js +++ b/src/Components/LoginContainerFunction.js @@ -25,23 +25,7 @@ import {device} from './device.js' import LabeledCheckbox from './Checkbox.js' import FormInput from "./FormInput.js" import GoogleLogo from "../img/logo_google.svg" - -function validateUserInput(type, input) { - let flag = false - - if (type === 'email') { - if(input.split("").filter(x => x === "@").length !== 1) { - flag = true - } - } - else if (type === 'senha') { - if(input.length < 8) { - flag = true - } - } - - return flag -} +import ValidateUserInput from '../Components/FormValidationFunction.js' export default function LoginContainer (props) { const [formEmail, setEmail] = useState( @@ -72,7 +56,7 @@ export default function LoginContainer (props) { const handleChange = (e, type) => { const userInput = e.target.value - const flag = validateUserInput(type, userInput) + const flag = ValidateUserInput(type, userInput) if(type === 'email') { setEmail({...formEmail, dict : { @@ -81,7 +65,7 @@ export default function LoginContainer (props) { }}) console.log(formEmail) } - else if(type === 'senha') { + else if(type === 'password') { setSenha({...formSenha, dict : { key : flag, value : userInput @@ -167,7 +151,7 @@ export default function LoginContainer (props) { name={"senha"} value={formSenha.dict.value} placeholder={"Senha"} - handleChange={e => handleChange(e, 'senha')} + handleChange={e => handleChange(e, 'password')} required={true} error = {formSenha.dict.key} help = {formSenha.dict.key ? (formSenha.dict.value.length == 0 ? "Faltou digitar sua senha." : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} diff --git a/src/Components/SignUpContainerFunction.js b/src/Components/SignUpContainerFunction.js index 84817081..ed137f75 100644 --- a/src/Components/SignUpContainerFunction.js +++ b/src/Components/SignUpContainerFunction.js @@ -25,6 +25,7 @@ import styled from 'styled-components' import {device} from './device.js' import FormInput from "./FormInput.js" import {StyledCloseModalButton, DialogContentDiv, DialogHeaderStyled, SocialConnectDiv, StyledGoogleLoginButton, H3Div} from './LoginContainer.js' +import ValidateUserInput from '../Components/FormValidationFunction.js' var Recaptcha = require('react-recaptcha') @@ -32,28 +33,6 @@ var callback = function () { console.log('Done!!!!'); }; -function validateUserInput(type, input) { - let flag = false - - if (type === 'nome') { - if(input.length < 1) { - flag = true - } - } - else if (type === 'email') { - if(input.split("").filter(x => x === "@").length !== 1) { - flag = true - } - } - else if (type === 'senha') { - if(input.length < 8) { - flag = true - } - } - - return flag -} - export default function SignUpContainer (props) { const [formNome, setNome] = useState( { @@ -84,9 +63,9 @@ export default function SignUpContainer (props) { const handleChange = (e, type) => { const userInput = e.target.value - const flag = validateUserInput(type, userInput) + const flag = ValidateUserInput(type, userInput) - if (type === 'nome') { + if (type === 'username') { setNome({...formNome, dict : { key : flag, value : userInput @@ -100,7 +79,7 @@ export default function SignUpContainer (props) { }}) console.log(formEmail) } - else if(type === 'senha') { + else if(type === 'password') { setSenha({...formSenha, dict : { key : flag, value : userInput @@ -183,7 +162,7 @@ export default function SignUpContainer (props) { name={"name"} value={formNome.dict.value} placeholder={"Nome Completo"} - handleChange={e => handleChange(e, 'nome')} + handleChange={e => handleChange(e, 'username')} required={true} error={formNome.dict.key} /> @@ -204,10 +183,10 @@ export default function SignUpContainer (props) { name={"password"} value={formSenha.dict.value} placeholder={"Senha"} - handleChange={e => handleChange(e, 'senha')} + handleChange={e => handleChange(e, 'password')} required={true} error={formSenha.dict.key} - help={formSenha.dict.key ? "Faltou definir uma senha." : ""} + help = {formSenha.dict.key ? (formSenha.dict.value.length == 0 ? "Faltou digitar sua senha." : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} /> <br/> <Recaptcha diff --git a/src/Components/TabPanels/TabPanelEditarPerfil.js b/src/Components/TabPanels/TabPanelEditarPerfil.js index 67fc6a10..6274fcba 100644 --- a/src/Components/TabPanels/TabPanelEditarPerfil.js +++ b/src/Components/TabPanels/TabPanelEditarPerfil.js @@ -7,23 +7,9 @@ import IconButton from '@material-ui/core/IconButton'; import PhotoCamera from '@material-ui/icons/PhotoCamera'; import Tooltip from '@material-ui/core/Tooltip'; import FormInput from "../FormInput.js" +import ValidateUserInput from '../FormValidationFunction.js' -function validateUserInput(type, input) { - let flag = false - if (type === 'nome') { - if(input.length < 1) { - flag = true - } - } - else if (type === 'aboutMe') { - if(input.length > 160) { - flag = true - } - } - - return flag -} export default function TabPanelEditarPerfil (props) { const {state, dispatch} = useContext(Store) @@ -54,9 +40,9 @@ export default function TabPanelEditarPerfil (props) { const handleChange = (e, type) => { const userInput = e.target.value - const flag = validateUserInput(type, userInput) + const flag = ValidateUserInput(type, userInput) - if(type === 'nome') { + if(type === 'username') { setNome({...formNome, dict : { key : flag, value : userInput @@ -134,7 +120,7 @@ export default function TabPanelEditarPerfil (props) { name={"Nome Completo"} value={formNome.dict.value} placeholder={"Nome Completo"} - handleChange={e => handleChange(e, 'nome')} + handleChange={e => handleChange(e, 'username')} required={true} error={formNome.dict.key} /> diff --git a/src/Components/TabPanels/TabPanelGerenciarConta.js b/src/Components/TabPanels/TabPanelGerenciarConta.js index 0c94d8b7..74a9d839 100644 --- a/src/Components/TabPanels/TabPanelGerenciarConta.js +++ b/src/Components/TabPanels/TabPanelGerenciarConta.js @@ -4,31 +4,7 @@ import Button from '@material-ui/core/Button'; import FormInput from "../FormInput.js" import {CompletarCadastroButton} from './TabPanelSolicitarContaProfessor.js' import {ButtonCancelar} from './TabPanelEditarPerfil.js' - -function validateUserInput(type, input, confirmation) { - let flag = false - - if (type === 'senha') { - if(input.length < 8) { - flag = true - } - } - else if (type === 'confirmacao') { - if (input !== confirmation) - flag = true - } - - return flag -} - -function validateUserEmail(input) { - let flag = false - - if(input.split("").filter(x => x === "@").length !== 1 || !(input.match(/^([\w.%+-]+)@([\w-]+\.)+([\w]{2,})$/i))) { - flag = true - } - return flag -} +import ValidateUserInput from '../FormValidationFunction.js' export default function TabPanelGerenciarConta (props) { const [senhaAtual, setSenhaAtual] = useState( @@ -69,7 +45,7 @@ export default function TabPanelGerenciarConta (props) { const handleChangeSenha = (e, type) => { const userInput = e.target.value - const flag = (type === 'confirmacao' ? validateUserInput('confirmacao', userInput, novaSenha.dict.value) : validateUserInput('senha', userInput, '')) + const flag = (type === 'confirmacao' ? ValidateUserInput('confirmation', userInput, novaSenha.dict.value) : ValidateUserInput('password', userInput)) if(type === 'senhaAtual') { setSenhaAtual({...senhaAtual, dict : { @@ -96,7 +72,7 @@ export default function TabPanelGerenciarConta (props) { const handleChangeEmail = (e) => { const userInput = e.target.value - const flag = validateUserEmail(userInput) + const flag = ValidateUserInput('email', userInput) setNovoEmail({...novoEmail, dict : { key : flag, diff --git a/src/Pages/PasswordRecoveryPage.js b/src/Pages/PasswordRecoveryPage.js new file mode 100644 index 00000000..e13c5b99 --- /dev/null +++ b/src/Pages/PasswordRecoveryPage.js @@ -0,0 +1,77 @@ +import React, {useState} from 'react' +import {HeaderDiv, BreadcrumbsDiv, StyledBreadcrumbs} from './UserPage.js' +import Breadcrumbs from '@material-ui/core/Breadcrumbs'; +import {Link} from 'react-router-dom' +import Paper from '@material-ui/core/Paper'; +import styled from 'styled-components' +import FormInput from "../Components/FormInput.js" +import ValidateUserInput from '../Components/FormValidationFunction.js' + +export default function PasswordRecoveryPage (props) { + const [formEmail, setEmail] = useState( + { + dict : { + key : false, + value : "" + } + } + ) + + const handleChange = (e) => { + const userInput = e.target.value + const flag = ValidateUserInput('email', userInput) + + setEmail({...formEmail, dict : { + key : flag, + value : userInput + }}) + console.log(formEmail) + } + + return ( + <> + <HeaderDiv> + <div style={{minWidth:"1170px"}}> + <BreadcrumbsDiv> + <StyledBreadcrumbs> + <Link to="/" style={{color:"#00bcd4", textDecoration:"none"}}> + Página Inicial + </Link> + <span> + Recuperar senha + </span> + </StyledBreadcrumbs> + </BreadcrumbsDiv> + </div> + + <div style={{justifyContent:"center", width:"1170px", margin:"auto"}}> + <Paper elevation={3}> + <CardDiv> + <div style={{overflow:"hidden"}}> + <h2 style={{fontSize:"32px", fontWeight:"200", marginBottom:"20px"}}>Vamos encontrar a sua conta</h2> + <form> + <FormInput + inputType={"text"} + name={"email"} + value={formEmail.dict.value} + placeholder={"E-mail"} + handleChange={e => handleChange(e)} + required={true} + error = {formEmail.dict.key} + /> + </form> + </div> + </CardDiv> + </Paper> + </div> + </HeaderDiv> + </> + ) +} + +const CardDiv = styled.div` + background-color : #fff; + box-shadow : 0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24); + padding : 30px 60px; + margin : 50px 0; +` diff --git a/src/Pages/RecuperarSenha.js b/src/Pages/RecuperarSenha.js deleted file mode 100644 index e69de29b..00000000 -- GitLab From 1f8678ecdd04d6075ba44a80241bfa801881781c Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 11 Feb 2020 17:13:09 -0300 Subject: [PATCH 16/29] pagina de recuperar senha quase pronta --- .../PasswordRecoveryComponents/Default.js | 25 ++++++++ .../PasswordRecoveryComponents/Error.js | 27 ++++++++ .../PasswordRecoveryComponents/Success.js | 14 +++++ src/Pages/PasswordRecoveryPage.js | 62 ++++++++++++++----- 4 files changed, 112 insertions(+), 16 deletions(-) create mode 100644 src/Components/PasswordRecoveryComponents/Default.js create mode 100644 src/Components/PasswordRecoveryComponents/Error.js create mode 100644 src/Components/PasswordRecoveryComponents/Success.js diff --git a/src/Components/PasswordRecoveryComponents/Default.js b/src/Components/PasswordRecoveryComponents/Default.js new file mode 100644 index 00000000..3be99525 --- /dev/null +++ b/src/Components/PasswordRecoveryComponents/Default.js @@ -0,0 +1,25 @@ +import React from 'react' +import {CompletarCadastroButton} from '../TabPanels/TabPanelSolicitarContaProfessor.js' +import FormInput from "../FormInput.js" + +export default function Default (props) { + return ( + <div style={{overflow:"hidden", display:"inline-block"}}> + <h2 style={{fontSize:"32px", fontWeight:"200", marginBottom:"20px"}}>Vamos encontrar a sua conta</h2> + <form onSubmit={(e) => props.onSubmit(e)}> + <FormInput + inputType={"text"} + name={"email"} + value={props.value} + placeholder={"E-mail"} + handleChange={e => props.handleChange(e)} + required={true} + error = {props.error} + /> + <div style={{display:"flex", justifyContent:"center"}}> + <CompletarCadastroButton onClick={(e) => props.onSubmit(e, props.value)}>BUSCAR</CompletarCadastroButton> + </div> + </form> + </div> + ) +} diff --git a/src/Components/PasswordRecoveryComponents/Error.js b/src/Components/PasswordRecoveryComponents/Error.js new file mode 100644 index 00000000..ba9fc189 --- /dev/null +++ b/src/Components/PasswordRecoveryComponents/Error.js @@ -0,0 +1,27 @@ +import React from 'react' +import {CompletarCadastroButton} from '../TabPanels/TabPanelSolicitarContaProfessor.js' +import FormInput from "../FormInput.js" + +export default function Default (props) { + return ( + <div style={{overflow:"hidden", display:"inline-block"}}> + <h2 style={{fontSize:"32px", fontWeight:"200", marginBottom:"20px"}}>Ops! Não encontramos essa conta</h2> + <p>{props.email}</p> + <p>Verifique se o e-mail foi digitado corretamente ou se você utilizou algum outro e-mail.</p> + <form onSubmit={(e) => props.onSubmit(e)}> + <FormInput + inputType={"text"} + name={"email"} + value={props.value} + placeholder={"E-mail"} + handleChange={e => props.handleChange(e)} + required={true} + error = {props.error} + /> + <div style={{display:"flex", justifyContent:"center"}}> + <CompletarCadastroButton onClick={(e) => props.onSubmit(e, props.value)}>BUSCAR</CompletarCadastroButton> + </div> + </form> + </div> + ) +} diff --git a/src/Components/PasswordRecoveryComponents/Success.js b/src/Components/PasswordRecoveryComponents/Success.js new file mode 100644 index 00000000..558f0bf4 --- /dev/null +++ b/src/Components/PasswordRecoveryComponents/Success.js @@ -0,0 +1,14 @@ +import React from 'react' +import {CompletarCadastroButton} from '../TabPanels/TabPanelSolicitarContaProfessor.js' +import FormInput from "../FormInput.js" + +export default function Default (props) { + return ( + <div style={{overflow:"hidden", display:"inline-block", fontSize:"14px", textAlign:"start"}}> + <h2 style={{fontSize:"32px", fontWeight:"200", marginBottom:"20px"}}>Feito! Confira seu e-mail</h2> + <p> Enviamos um link para <span style={{color:"#00bcd4"}}>{props.email}</span> que permite alterar sua senha. </p> + <p style={{marginBottom:"30px"}}> Caso não chegue em sua caixa de entrada, dê uma olhada em outras pastas, como lixo eletrônico ou spam. </p> + <p> Não é o seu e-mail? <span style={{color:"#00bcd4", cursor:"pointer"}} onClick={() => {props.changeSwitch('default')}}> Tente Novamente.</span></p> + </div> + ) +} diff --git a/src/Pages/PasswordRecoveryPage.js b/src/Pages/PasswordRecoveryPage.js index e13c5b99..981a14e4 100644 --- a/src/Pages/PasswordRecoveryPage.js +++ b/src/Pages/PasswordRecoveryPage.js @@ -1,4 +1,4 @@ -import React, {useState} from 'react' +import React, {useState, useContext} from 'react' import {HeaderDiv, BreadcrumbsDiv, StyledBreadcrumbs} from './UserPage.js' import Breadcrumbs from '@material-ui/core/Breadcrumbs'; import {Link} from 'react-router-dom' @@ -6,8 +6,15 @@ import Paper from '@material-ui/core/Paper'; import styled from 'styled-components' import FormInput from "../Components/FormInput.js" import ValidateUserInput from '../Components/FormValidationFunction.js' +import {CompletarCadastroButton} from '../Components/TabPanels/TabPanelSolicitarContaProfessor.js' +import Default from '../Components/PasswordRecoveryComponents/Default.js' +import Success from '../Components/PasswordRecoveryComponents/Success.js' +import {Store} from '../Store.js' +import Error from '../Components/PasswordRecoveryComponents/Error.js' export default function PasswordRecoveryPage (props) { + const {state, dispatch} = useContext(Store) + const [formEmail, setEmail] = useState( { dict : { @@ -28,6 +35,42 @@ export default function PasswordRecoveryPage (props) { console.log(formEmail) } + const [aux, setCase] = useState('default') + const handleChangeSwitch = (value) => setCase(value); + + const onSubmit = (e, email) => { + e.stopPropagation() + const query = email + + setEmail({...formEmail, dict : { + key : false, + value : '' + }}) + handleChangeSwitch('error') + } + + + const components = { + default : <Default handleChange={handleChange} onSubmit={onSubmit} value={formEmail.dict.value} error={formEmail.dict.key}/>, + success : <Success email={state.currentUser.email} changeSwitch={handleChangeSwitch}/>, + error : <Error email={state.currentUser.email} handleChange={handleChange} onSubmit={onSubmit} value={formEmail.dict.value} error={formEmail.dict.key}/> + } + + const switchFunction = (value) => { + switch(value) { + case 'success': + return components.success; + break; + case 'error': + return components.error; + break; + default: + return components.default + break; + + } + } + return ( <> <HeaderDiv> @@ -44,23 +87,10 @@ export default function PasswordRecoveryPage (props) { </BreadcrumbsDiv> </div> - <div style={{justifyContent:"center", width:"1170px", margin:"auto"}}> + <div style={{justifyContent:"center", textAlign:"center", maxWidth:"600px", margin:"auto"}}> <Paper elevation={3}> <CardDiv> - <div style={{overflow:"hidden"}}> - <h2 style={{fontSize:"32px", fontWeight:"200", marginBottom:"20px"}}>Vamos encontrar a sua conta</h2> - <form> - <FormInput - inputType={"text"} - name={"email"} - value={formEmail.dict.value} - placeholder={"E-mail"} - handleChange={e => handleChange(e)} - required={true} - error = {formEmail.dict.key} - /> - </form> - </div> + {switchFunction(aux)} </CardDiv> </Paper> </div> -- GitLab From 77a5241cf94d6bcd82db4754bc1b7262dd6be60b Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 11 Feb 2020 17:30:35 -0300 Subject: [PATCH 17/29] checkbox color fixed --- src/Components/Checkbox.js | 9 +++------ src/Components/ColaborarModal.js | 9 ++++++--- src/Components/Header.js | 3 ++- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Components/Checkbox.js b/src/Components/Checkbox.js index d2d9b96e..3e0be625 100644 --- a/src/Components/Checkbox.js +++ b/src/Components/Checkbox.js @@ -25,10 +25,9 @@ const StyledFormControlLabel = styled(FormControlLabel)` .label { font-size : 12px !important; } -` - -const StyledCheckbox = styled(Checkbox)` - color : #00bcd4 !important; + .MuiCheckbox-colorSecondary.Mui-checked { + color : #00bcd4 !important; + } ` export default function LabeledCheckbox(props) { @@ -37,10 +36,8 @@ export default function LabeledCheckbox(props) { <StyledFormControlLabel control={ <Checkbox - disabled = {props.disabledCheckbox} value = {props.checked} onChange = {props.handleChange} - style = { { color : props.disabledCheckbox ? "#000" : "#00bcd4"}} /> } label={<span style={{ fontSize: '12px' }}>{props.label}</span>} diff --git a/src/Components/ColaborarModal.js b/src/Components/ColaborarModal.js index 29d6dc49..0a4fdd48 100644 --- a/src/Components/ColaborarModal.js +++ b/src/Components/ColaborarModal.js @@ -1,4 +1,4 @@ -import React, {useContext} from 'react'; +import React, {useContext, useState} from 'react'; import Modal from '@material-ui/core/Modal'; import Fade from '@material-ui/core/Fade'; import styled from 'styled-components' @@ -9,7 +9,7 @@ import CloseIcon from '@material-ui/icons/Close'; import LabeledCheckbox from "../Components/Checkbox.js" const StyledDivContainer = styled.div` - background-color : rgb(255,255,255);; + background-color : rgb(255,255,255); border-radius : 4px; border-shadow : #000; color : rgb(102,102,102); @@ -77,6 +77,8 @@ const Styledspan = styled.span` export default function ColaborarModal (props) { const {state, dispatch} = useContext(Store) + const [checkbox, controlCheckbox] = useState(false) + const handleCheckbox = () => controlCheckbox(!checkbox) return ( <StyledModal @@ -94,6 +96,7 @@ export default function ColaborarModal (props) { > <Fade in={props.open}> <StyledDivContainer> + <span style={{width:"32px"}}/> <StyledDivHeader> <StyledH2> Você é professor(a), da educação básica, e gostaria de colaborar com a Plataforma? @@ -126,7 +129,7 @@ export default function ColaborarModal (props) { </StyledButtonsDiv> </div> <div style={{display:"flex", alignItems:"flex-start"}}> - <LabeledCheckbox label={<Styledspan>Não perguntar novamente</Styledspan>} /> + <LabeledCheckbox label={<Styledspan>Não perguntar novamente</Styledspan>} checked={checkbox} handleChange={handleCheckbox}/> </div> </StyledDivContentInformation> </StyledDivDialogContent> diff --git a/src/Components/Header.js b/src/Components/Header.js index 386a3e4a..475572e1 100644 --- a/src/Components/Header.js +++ b/src/Components/Header.js @@ -42,6 +42,7 @@ export default function Header(props){ const [signUpOpen, setSignUp] = useState(false) const [loginOpen, setLogin] = useState(false) const [successfulLoginOpen, handleSuccessfulLogin] = useState(false) + const [modalColaborar, setModalColaborar] = useState(true) const toggleSnackbar = (event, reason) => { if (reason === 'clickaway') { @@ -80,7 +81,7 @@ export default function Header(props){ } <SignUpModal open={signUpOpen} handleClose={handleSignUp} openLogin={handleLogin}/> <LoginModal open={loginOpen} handleClose={handleLogin} openSignUp={handleSignUp} openSnackbar = {() => {handleSuccessfulLogin(true)}}/> - {/*<ColaborarModal open={state.modalColaborarPlataformaOpen} handleClose={handleKyloren} />*/} + <ColaborarModal open={modalColaborar} handleClose={() => {setModalColaborar(!modalColaborar)}} /> </> ) -- GitLab From 8f23486659d657b13adcdcc64aab79084e115d8a Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 11 Feb 2020 17:42:24 -0300 Subject: [PATCH 18/29] styling changes to colaborar modal --- src/Components/ColaborarModal.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Components/ColaborarModal.js b/src/Components/ColaborarModal.js index 0a4fdd48..395f305f 100644 --- a/src/Components/ColaborarModal.js +++ b/src/Components/ColaborarModal.js @@ -25,7 +25,7 @@ const StyledDivHeader = styled.div` text-align : center; display : flex; justify-content : space-between; - padding : 10px 58px 0 58px; + padding : 10px 26px 0 26px; color : #666; font-size : 40px; font-weight : 400; @@ -34,7 +34,7 @@ const StyledDivHeader = styled.div` ` const StyledDivDialogContent = styled.div` - padding : 20px 30px; + padding : 20px 0; ` const StyledButtonsDiv = styled.div` @@ -45,6 +45,7 @@ const StyledButtonsDiv = styled.div` const StyledButton = styled(Button)` background-color : #00acc1 !important; + width : 45% ` const StyledH2 = styled.h2` @@ -96,8 +97,8 @@ export default function ColaborarModal (props) { > <Fade in={props.open}> <StyledDivContainer> - <span style={{width:"32px"}}/> <StyledDivHeader> + <span style={{width:"32px"}}/> <StyledH2> Você é professor(a), da educação básica, e gostaria de colaborar com a Plataforma? </StyledH2> @@ -114,7 +115,7 @@ export default function ColaborarModal (props) { }} > <div style={{maxWidth:"350px", marginRight:"0", marginLeft:"auto", color:"#666"}}> - <p style={{textAlign:"start", fontSize:"15px", margin:"0 0 10"}}> + <p style={{textAlign:"justify", fontSize:"15px", margin:"0 0 10"}}> Ao ser identificado como professor(a), você poderá <span style={{color:"#00bcd4"}}> publicar e compartilhar recursos educacionais digitais </span> na plataforma com toda a comunidade escolar do paÃs. @@ -129,7 +130,7 @@ export default function ColaborarModal (props) { </StyledButtonsDiv> </div> <div style={{display:"flex", alignItems:"flex-start"}}> - <LabeledCheckbox label={<Styledspan>Não perguntar novamente</Styledspan>} checked={checkbox} handleChange={handleCheckbox}/> + <LabeledCheckbox label={<Styledspan>Não perguntar novamente!</Styledspan>} checked={checkbox} handleChange={handleCheckbox}/> </div> </StyledDivContentInformation> </StyledDivDialogContent> -- GitLab From f9aac1191357933030b1040e2af1be1fb6a1dafe Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Wed, 12 Feb 2020 19:47:09 -0300 Subject: [PATCH 19/29] layout pagina inicial de /professor pronto --- src/App.js | 3 +- src/Components/Header.js | 2 +- src/Components/LoginContainerFunction.js | 4 +- .../PageProfessorComponents/PartOne.js | 163 ++++++++++++++++++ .../PageProfessorComponents/PartThree.js | 7 + .../PageProfessorComponents/PartTwo.js | 7 + src/Components/Stepper.js | 53 ++++++ .../TabPanelSolicitarContaProfessor.js | 4 +- src/Pages/PageProfessor.js | 93 ++++++++++ src/Pages/TermsPage.js | 9 +- src/Pages/UserPage.js | 2 +- src/Store.js | 2 +- 12 files changed, 338 insertions(+), 11 deletions(-) create mode 100644 src/Components/PageProfessorComponents/PartOne.js create mode 100644 src/Components/PageProfessorComponents/PartThree.js create mode 100644 src/Components/PageProfessorComponents/PartTwo.js create mode 100644 src/Components/Stepper.js create mode 100644 src/Pages/PageProfessor.js diff --git a/src/App.js b/src/App.js index d2251d22..7b1049e2 100644 --- a/src/App.js +++ b/src/App.js @@ -26,7 +26,7 @@ import UserPage from './Pages/UserPage'; import UserTerms from './Pages/UserTerms'; import PasswordRecoveryPage from './Pages/PasswordRecoveryPage.js' import Teste from './Pages/Teste'; - +import PageProfessor from './Pages/PageProfessor.js' import ResourcePage from './Pages/ResourcePage'; import {BrowserRouter, Switch, Route} from 'react-router-dom'; import { Store } from './Store' @@ -82,6 +82,7 @@ export default function App(){ <Route path="/teste" component={Teste}/> <Route path="/contato" component = {Contact}/> <Route path="/recuperar-senha" component={PasswordRecoveryPage}/> + <Route path='/professor' component={PageProfessor}/> </Switch> <EcFooter/> <GNUAGPLfooter/> diff --git a/src/Components/Header.js b/src/Components/Header.js index 475572e1..c7821b5a 100644 --- a/src/Components/Header.js +++ b/src/Components/Header.js @@ -42,7 +42,7 @@ export default function Header(props){ const [signUpOpen, setSignUp] = useState(false) const [loginOpen, setLogin] = useState(false) const [successfulLoginOpen, handleSuccessfulLogin] = useState(false) - const [modalColaborar, setModalColaborar] = useState(true) + const [modalColaborar, setModalColaborar] = useState(false) const toggleSnackbar = (event, reason) => { if (reason === 'clickaway') { diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js index b02c7fcd..15b7c858 100644 --- a/src/Components/LoginContainerFunction.js +++ b/src/Components/LoginContainerFunction.js @@ -259,7 +259,7 @@ export default function LoginContainer (props) { ` - const RightSideStrikedH3 = styled.div` +export const RightSideStrikedH3 = styled.div` display : inline-block; border-bottom: 1px dotted #666; vertical-align : middle; @@ -268,7 +268,7 @@ export default function LoginContainer (props) { width : 45%; ` - const LeftSideStrikedH3 = styled.div` + export const LeftSideStrikedH3 = styled.div` display : inline-block; border-bottom: 1px dotted #666; vertical-align : middle; diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js new file mode 100644 index 00000000..d3e604a1 --- /dev/null +++ b/src/Components/PageProfessorComponents/PartOne.js @@ -0,0 +1,163 @@ +import React, {useState} from 'react' +import styled from 'styled-components' +import Stepper from '../Stepper.js' +import FormControl from '@material-ui/core/FormControl'; +import MenuItem from '@material-ui/core/MenuItem'; +import Select from '@material-ui/core/Select'; +import InputLabel from '@material-ui/core/InputLabel'; +import {Button} from '@material-ui/core' +import {RightSideStrikedH3, LeftSideStrikedH3} from '../LoginContainerFunction.js' +import Divider from '@material-ui/core/Divider'; +import {ButtonCancelar} from '../TabPanels/TabPanelEditarPerfil.js' + +export default function PartOne (props) { + const [uf, setUF] = useState('') + const handleChangeUF = (event) => {setUF(event.target.value)} + + const [municipio, setMunicipio] = useState('') + const handleChangeMunicipio = (event) => {setMunicipio(event.target.value)} + + return ( + <> + <Content> + <h4>Vamos localizar o seu cadastro:</h4> + <Stepper items={props.stepper}/> + <form style={{textAlign:"start"}}> + <p>Localize pelo menos uma escola que você tenha atuado até maio de 2017:</p> + <FormControl required style={{width:"100%"}}> + <InputLabel>Procure sua UF</InputLabel> + <Select + labelId="demo-simple-select-label" + id="demo-simple-select" + value={uf} + onChange={handleChangeUF} + > + <MenuItem value={10}>Ten</MenuItem> + <MenuItem value={20}>Twenty</MenuItem> + <MenuItem value={30}>Thirty</MenuItem> + </Select> + </FormControl> + <FormControl required style={{width:"100%"}}> + <InputLabel>Busque o seu municÃpio</InputLabel> + <Select + labelId="demo-simple-select-label" + id="demo-simple-select" + value={municipio} + onChange={handleChangeMunicipio} + > + <MenuItem value={10}>Ten</MenuItem> + <MenuItem value={20}>Twenty</MenuItem> + <MenuItem value={30}>Thirty</MenuItem> + </Select> + </FormControl> + <div style={{display:"flex", justifyContent:"center",paddingTop:"10px", paddingBottom:"10px"}}> + <ButtonConfirmar onClick={props.handleBuscar}>BUSCAR</ButtonConfirmar> + </div> + </form> + </Content> + <div style={{display:"flex", justifyContent:"center", alignItems:"center"}}> + <LeftSideStrikedH3/><StrikeSpan>ou</StrikeSpan><RightSideStrikedH3/> + </div> + <Content> + <form> + <p>Localize pelo código INEP da escola:</p> + <FormControl required style={{width:"100%"}}> + <InputLabel>Código INEP</InputLabel> + <Select + labelId="demo-simple-select-label" + id="demo-simple-select" + value={municipio} + onChange={handleChangeMunicipio} + > + <MenuItem value={10}>Ten</MenuItem> + <MenuItem value={20}>Twenty</MenuItem> + <MenuItem value={30}>Thirty</MenuItem> + </Select> + </FormControl> + <div style={{display:"flex", justifyContent:"center",paddingTop:"10px", paddingBottom:"10px"}}> + <ButtonConfirmar onClick={props.handleBuscar}>BUSCAR</ButtonConfirmar> + </div> + </form> + </Content> + <Divider/> + <ButtonsArea> + <ButtonCancelar>CANCELAR VERIFICAÇÃO</ButtonCancelar> + </ButtonsArea> + </> + ) +} + +const ButtonsArea = styled.div` + display : flex; + justify-content : center; + padding-top : 10px; + padding-bottom : 10px; +` + +const StrikeSpan = styled.span` + vertical-align : middle; + font-family : Roboto; + font-style : normal; + font-weight : 500; + line-height : 22px; + font-size : 15px; + letter-spacing : .01em; +` + +export const Content = styled.div` + margin-top : 16px; + margin-bottom : 16px; + margin-right : 10%; + margin-left : 10%; + + h4 { + text-align : center; + magin-bottom : 20px; + font-family: Roboto; + font-style : normal; + font-weight : 300; + line-height : 36px; + font-size : 26px; + margin-top : 20px; + } + + p { + font-family : Roboto; + font-style : normal; + font-weight : 400; + line-height : 21px; + font-size : 15px; + } +` +const ButtonConfirmar = styled(Button)` + background-color : #00bcd4 !important; + color : #fff !important; + font-family : 'Roboto',sans-serif !important; + font-size : 14px !important; + font-weight : bolder !important; + padding-left : 16px !important; + padding-right : 16px !important; + outline : none !important; + margin : 6px 8px !important; + white-space : nowrap !important; + text-transform : uppercase !important; + font-weight : bold !important; + font-size : 14px !important; + font-style : inherit !important; + font-variant : inherit !important; + font-family : inherit !important; + text-decoration : none !important; + overflow : hidden !important; + display : inline-block !important; + position : relative !important; + cursor : pointer !important; + min-height : 36px !important; + min-width : 88px !important; + line-height : 36px !important; + vertical-align : middle !important; + align-items : center !important; + text-align : center !important; + border-radius : 3px !important; + box-sizing : border-box !important; + border : 0 !important; +` diff --git a/src/Components/PageProfessorComponents/PartThree.js b/src/Components/PageProfessorComponents/PartThree.js new file mode 100644 index 00000000..50b355ca --- /dev/null +++ b/src/Components/PageProfessorComponents/PartThree.js @@ -0,0 +1,7 @@ +import React from 'react' + +export default function PartThree (props) { + return ( + <span>Part Three</span> + ) +} diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js new file mode 100644 index 00000000..8ad76c9f --- /dev/null +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -0,0 +1,7 @@ +import React from 'react' + +export default function PartTwo (props) { + return ( + <span>Part Two</span> + ) +} diff --git a/src/Components/Stepper.js b/src/Components/Stepper.js new file mode 100644 index 00000000..c550c2d9 --- /dev/null +++ b/src/Components/Stepper.js @@ -0,0 +1,53 @@ +import React, {useState} from 'react' +import styled from 'styled-components' + +export default function Stepper (props) { + + return ( + <div style={{display:"flex",justifyContent:"center", marginBottom:"50px"}}> + <FeedbackUpload> + { + props.items.map((item)=> + <div className={"page-selector " + (item.selected ? 'selected' : '')} > + {item.value} + </div> + ) + } + </FeedbackUpload> + </div> + ) +} + +const FeedbackUpload = styled.div` + width : 280px; + display : flex; + background :#e5e5e5; + flex-direction : row; + justify-content : space-between; + height : 50px; + align-items : center; + padding : 7px; + border-radius : 50px; + margin-top : 20px; + + .page-selector { + height : 36px; + width : 36px; + background : #fff; + border-radius : 50%; + color : #00bcd4; + line-height : 32px; + font-size : 20px; + font-weight : 500; + border: solid 3px #00bcd4; + text-align: center; + align-items : center; + vertical-align:middle; + } + + .selected { + background : #00bcd4; + color : #fff; + border-color : #00bcd4; + } +` diff --git a/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js b/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js index cd461887..648a3321 100644 --- a/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js +++ b/src/Components/TabPanels/TabPanelSolicitarContaProfessor.js @@ -14,7 +14,7 @@ export default function TabPanelSolicitarContaProfessor (props) { <div className='card-config'> <div className='content-div'> { - state.currentUser.submitter_request == 'default' || state.currentUser.submitter_request == 'rejected' ? + state.currentUser.submitter_request === 'default' || state.currentUser.submitter_request === 'rejected' ? ( [ <div style={{paddingLeft:"100px", paddingRight:"101px"}}> @@ -36,7 +36,7 @@ export default function TabPanelSolicitarContaProfessor (props) { [ <> { - state.currentUser.submitter_request == 'requested' ? + state.currentUser.submitter_request === 'requested' ? ( [ <span>Requested</span> diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js new file mode 100644 index 00000000..4905f415 --- /dev/null +++ b/src/Pages/PageProfessor.js @@ -0,0 +1,93 @@ +import React, {useState,useContext} from 'react' +import {Store} from '../Store.js' +import styled from 'styled-components' +import Paper from '@material-ui/core/Paper'; +import PartOne from '../Components/PageProfessorComponents/PartOne.js' +import PartTwo from '../Components/PageProfessorComponents/PartTwo.js' +import PartThree from '../Components/PageProfessorComponents/PartThree.js' + +export default function PageProfessor (props) { + const {state, dispatch} = useContext(Store) + + const redirect = () => { + props.history.push('/termos-publicar-recurso') + } + + const [stepper, handleStepper] = useState( + [ {value : '1', selected : true}, {value : '2', selected : false}, {value : '3', selected : false} ] + ) + + const handleBuscar = () => { + handleStepper( + [ {value : '1', selected : false}, {value : '2', selected : true}, {value : '3', selected : false} ] + ) + } + + const handleCancelar = () => { + props.history.push('/perfil/atualizacoes') + } + + return ( + <> + { + state.userAgreedToPublicationTerms? + ( + [ + <div style={{backgroundColor:"#f4f4f4", color:"#666"}}> + <div style={{display: "flex", justifyContent:"center", paddingTop:"5vh", paddingBottom:"5vh"}}> + <Paper elevation={3} style= {{width:"max-content"}}> + <div style={{paddingRight:"15px", paddingLeft:"15px"}}> + {stepper[0].selected && <PartOne stepper={stepper} handleBuscar={handleBuscar} handleCancelar={handleCancelar}/>} + {stepper[1].selected && <PartTwo/>} + {stepper[2].selected && <PartThree/>} + </div> + </Paper> + </div> + </div> + ] + ) + : + ( + <> + {redirect()} + </> + ) + } + </> + ) +} + +const ContainerDiv = styled.div` + .card { + box-shadow : 0 0 5px 0 rgba(0,0,0,.25); + background-color :#fff; + text-align : start; + margin-left : auto; + margin-right : auto; + } + + .part-one { + max-width : 570px; + } + + .container { + padding-right : 15px; + padding-left : 15px; + } + + .content { + margin-top : 16px; + margin-bottom : 16px; + margin-right : 10%; + margin-left : 10%; + } + + h4 { + font-family : Roboto; + font-style : normal; + font-weight : 300; + line-height : 36px; + font-size : 26px; + margin-top : 20px; + } +` diff --git a/src/Pages/TermsPage.js b/src/Pages/TermsPage.js index 65081cf7..e0b6dde2 100644 --- a/src/Pages/TermsPage.js +++ b/src/Pages/TermsPage.js @@ -76,9 +76,12 @@ export default function TermsContainer (props) { userAgreement: true }) - props.history.push('/permission') - - window.scrollTo(0, 0) + if (props.location.state.redirectedFromModal) { + props.history.push('/professor') + }else { + props.history.push('/permission') + window.scrollTo(0, 0) + } } return ( diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 28b81c21..76b15fe3 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -112,7 +112,7 @@ export default function UserPage (props){ const updateCover = (selectorFiles : FileList) => { console.log(selectorFiles) - console.log(selectorFiles[0].name) + console.log(selectorFiles[0]) } return ( diff --git a/src/Store.js b/src/Store.js index 3225fef5..d57a0cde 100644 --- a/src/Store.js +++ b/src/Store.js @@ -23,7 +23,7 @@ export const Store = React.createContext() const initialState = { searchOpen: false, userIsLoggedIn : false, - userAgreedToPublicationTerms: false, + userAgreedToPublicationTerms: true, userAgreedToPublicationPermissions: false, modalColaborarPlataformaOpen : false, search: { -- GitLab From 4e310f414887504c832902d3e6d717758c29f18f Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Wed, 12 Feb 2020 21:41:24 -0300 Subject: [PATCH 20/29] layout das 3 paginas de /professor prontos --- .../PageProfessorComponents/PartOne.js | 4 +- .../PageProfessorComponents/PartTwo.js | 58 ++++++++++++- src/Components/Table.js | 81 +++++++++++++++++++ src/Pages/PageProfessor.js | 2 +- 4 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 src/Components/Table.js diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js index d3e604a1..497ee823 100644 --- a/src/Components/PageProfessorComponents/PartOne.js +++ b/src/Components/PageProfessorComponents/PartOne.js @@ -8,7 +8,7 @@ import InputLabel from '@material-ui/core/InputLabel'; import {Button} from '@material-ui/core' import {RightSideStrikedH3, LeftSideStrikedH3} from '../LoginContainerFunction.js' import Divider from '@material-ui/core/Divider'; -import {ButtonCancelar} from '../TabPanels/TabPanelEditarPerfil.js' +import {ButtonCancelar} from './PartTwo.js' export default function PartOne (props) { const [uf, setUF] = useState('') @@ -87,7 +87,7 @@ export default function PartOne (props) { ) } -const ButtonsArea = styled.div` +export const ButtonsArea = styled.div` display : flex; justify-content : center; padding-top : 10px; diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js index 8ad76c9f..33941abd 100644 --- a/src/Components/PageProfessorComponents/PartTwo.js +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -1,7 +1,63 @@ import React from 'react' +import {Content, ButtonsArea} from './PartOne.js' +import Divider from '@material-ui/core/Divider'; +import Stepper from '../Stepper.js' +import CustomizedTables from '../Table.js' +import styled from 'styled-components' +import {Button} from '@material-ui/core' export default function PartTwo (props) { return ( - <span>Part Two</span> + <> + <Content> + <h4>Vamos localizar o seu cadastro:</h4> + <Stepper items={props.stepper}/> + </Content> + <Content> + <InputContainer> + <p>Selecione a sua escola:</p> + <CustomizedTables/> + </InputContainer> + </Content> + <Divider/> + <ButtonsArea> + <ButtonGrey>VOLTAR</ButtonGrey><ButtonCancelar>CANCELAR VERIFICAÇÃO</ButtonCancelar> + </ButtonsArea> + </> ) } + +export const ButtonCancelar = styled(Button)` + color: #666 !important; + font-family: 'Roboto',sans-serif !important; + font-size: 14px !important; + font-weight: bold !important; + height: 36px !important; + border-radius: 3px !important; + padding-left: 16px !important; + padding-right: 16px !important; +` + +const ButtonGrey = styled(Button)` + background-color : #fff !important; + border : 1.5px #666 solid !important; + color : #666 !important; + box-shadow : none !important; + font-family : 'Roboto',sans-serif !important; + font-size : 14px !important; + font-weight : bold !important; + height : 36px !important; + border-radius : 3px !important; + padding-left : 16px !important; + padding-right : 16px !important; + vertical-align : middle !important; + text-align : center !important; + align-items : center !important; + +` + +const InputContainer = styled.div` + max-width : 970px; + display : block; + flex : auto; +` diff --git a/src/Components/Table.js b/src/Components/Table.js new file mode 100644 index 00000000..8fe88f90 --- /dev/null +++ b/src/Components/Table.js @@ -0,0 +1,81 @@ +import React from 'react'; +import { withStyles, makeStyles } from '@material-ui/core/styles'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableCell from '@material-ui/core/TableCell'; +import TableContainer from '@material-ui/core/TableContainer'; +import TableHead from '@material-ui/core/TableHead'; +import TableRow from '@material-ui/core/TableRow'; +import Paper from '@material-ui/core/Paper'; + +const StyledTableCell = withStyles(theme => ({ + head: { + backgroundColor: '#00bcd4', + color: '#ffffff', + fontFamily: 'Roboto', + fontStyle: 'normal', + fontWeight: 500, + fontSize: 15, + letterSpacing: .01 + }, + body: { + fontSize: 14, + }, +}))(TableCell); + +const StyledTableRow = withStyles(theme => ({ + root: { + '&:nth-of-type(odd)': { + backgroundColor: theme.palette.background.default, + }, + }, +}))(TableRow); + +function createData(name, calories, fat, carbs) { + return { name, calories, fat, carbs}; +} + +const rows = [ + createData('Frozen yoghurt', 159, 6.0, 24), + createData('Ice cream sandwich', 237, 9.0, 37), + createData('Eclair', 262, 16.0, 24), + createData('Cupcake', 305, 3.7, 67), + createData('Gingerbread', 356, 16.0, 49), +]; + +const useStyles = makeStyles({ + table: { + minWidth: 970, + }, +}); + +export default function CustomizedTables() { + const classes = useStyles(); + + return ( + <TableContainer component={Paper}> + <Table className={classes.table} aria-label="customized table"> + <TableHead> + <TableRow> + <StyledTableCell>Codigo INEP</StyledTableCell> + <StyledTableCell align="right">Escola</StyledTableCell> + <StyledTableCell align="right">UF</StyledTableCell> + <StyledTableCell align="right">Cidade</StyledTableCell> + </TableRow> + </TableHead> + <TableBody> + {rows.map(row => ( + <StyledTableRow key={row.name}> + <StyledTableCell component="th" scope="row"> + {row.name} + </StyledTableCell> + <StyledTableCell align="right">{row.calories}</StyledTableCell> + <StyledTableCell align="right">{row.fat}</StyledTableCell> + <StyledTableCell align="right">{row.carbs}</StyledTableCell> + </StyledTableRow> + ))} + </TableBody> + </Table> + </TableContainer> + ); +} diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index 4905f415..e26be44d 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -38,7 +38,7 @@ export default function PageProfessor (props) { <Paper elevation={3} style= {{width:"max-content"}}> <div style={{paddingRight:"15px", paddingLeft:"15px"}}> {stepper[0].selected && <PartOne stepper={stepper} handleBuscar={handleBuscar} handleCancelar={handleCancelar}/>} - {stepper[1].selected && <PartTwo/>} + {stepper[1].selected && <PartTwo stepper={stepper}/>} {stepper[2].selected && <PartThree/>} </div> </Paper> -- GitLab From 67fa48c5eb45156f198fa0828bd8b501e80cf0da Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Wed, 12 Feb 2020 21:41:30 -0300 Subject: [PATCH 21/29] layout das 3 paginas de /professor prontos --- src/Components/FormInput.js | 4 + .../PageProfessorComponents/PartOne.js | 2 +- .../PageProfessorComponents/PartThree.js | 73 ++++++++++++++++++- .../PageProfessorComponents/PartTwo.js | 4 +- src/Components/Table.js | 4 +- src/Pages/PageProfessor.js | 10 ++- 6 files changed, 88 insertions(+), 9 deletions(-) diff --git a/src/Components/FormInput.js b/src/Components/FormInput.js index bcbc40fb..f9075068 100644 --- a/src/Components/FormInput.js +++ b/src/Components/FormInput.js @@ -64,6 +64,10 @@ export default function FormInput(props) { error = {props.error} helperText ={props.help} style={{width:"100%"}} + mask={props.mask} + multiline={props.multi} + rows={props.row} + rowsMax={props.rowMax} /> ); } diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js index 497ee823..a82555a5 100644 --- a/src/Components/PageProfessorComponents/PartOne.js +++ b/src/Components/PageProfessorComponents/PartOne.js @@ -129,7 +129,7 @@ export const Content = styled.div` font-size : 15px; } ` -const ButtonConfirmar = styled(Button)` +export const ButtonConfirmar = styled(Button)` background-color : #00bcd4 !important; color : #fff !important; font-family : 'Roboto',sans-serif !important; diff --git a/src/Components/PageProfessorComponents/PartThree.js b/src/Components/PageProfessorComponents/PartThree.js index 50b355ca..75a9faf5 100644 --- a/src/Components/PageProfessorComponents/PartThree.js +++ b/src/Components/PageProfessorComponents/PartThree.js @@ -1,7 +1,76 @@ -import React from 'react' +import React, {useState} from 'react' +import {Content, ButtonsArea} from './PartOne.js' +import {ButtonCancelar, ButtonGrey} from './PartTwo.js' +import FormControl from '@material-ui/core/FormControl'; +import InputLabel from '@material-ui/core/InputLabel'; +import Stepper from '../Stepper.js' +import FormInput from '../FormInput.js' +import styled from 'styled-components' +import {Button} from '@material-ui/core' export default function PartThree (props) { + const [phoneNumber, setPhoneNumber] = useState('') + const handleChangePhoneNumber = (event) => {setPhoneNumber(event.target.value)} + + const [cpf, setCpf] = useState('') + const handleChangeCpf = (event) => {setCpf(event.target.value)} return ( - <span>Part Three</span> + <> + <Content> + <h4>Vamos localizar o seu cadastro:</h4> + <Stepper items={props.stepper}/> + <form style={{textAlign:"start"}}> + <span>CENTRO EDUC INF MEU PEDACINHO DE CHAO</span> + <FormControl required style={{width:"100%"}}> + <p>Inserir o telefone da escola:</p> + <FormInput + inputType={'text'} + name={'DDD e Número'} + placeholder={'DDD e Número'} + value={phoneNumber} + handleChange={handleChangePhoneNumber} + > + </FormInput> + </FormControl> + <FormControl required style={{width:"100%"}}> + <p>Inserir o seu CPF</p> + <FormInput + inputType={'text'} + name={'11 dÃgitos'} + placeholder={'11 dÃgitos'} + value={cpf} + handleChange={handleChangeCpf} + mask={'999.999.999-99'} + > + </FormInput> + </FormControl> + <div style={{display:"flex", justifyContent:"space-evenly",paddingTop:"10px", paddingBottom:"10px"}}> + <div style={{display:"flex", justifyContent:"center"}}> + <ButtonConfirmar onClick={props.handleBuscar}>BUSCAR</ButtonConfirmar> + </div> + <div style={{display:"flex", justifyContent:"center"}}> + <ButtonGrey>VOLTAR</ButtonGrey><ButtonCancelar>CANCELAR</ButtonCancelar> + </div> + </div> + </form> + </Content> + </> ) } + +const ButtonConfirmar = styled(Button)` + background-color : #00bcd4 !important; + color : #fff !important; + box-shadow : none !important; + font-family : 'Roboto',sans-serif !important; + font-size : 14px !important; + font-weight : bold !important; + height : 36px !important; + border-radius : 3px !important; + padding-left : 16px !important; + padding-right : 16px !important; + vertical-align : middle !important; + text-align : center !important; + align-items : center !important; + +` diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js index 33941abd..d4af14b2 100644 --- a/src/Components/PageProfessorComponents/PartTwo.js +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -16,7 +16,7 @@ export default function PartTwo (props) { <Content> <InputContainer> <p>Selecione a sua escola:</p> - <CustomizedTables/> + <CustomizedTables onClick={props.onClickTable}/> </InputContainer> </Content> <Divider/> @@ -38,7 +38,7 @@ export const ButtonCancelar = styled(Button)` padding-right: 16px !important; ` -const ButtonGrey = styled(Button)` +export const ButtonGrey = styled(Button)` background-color : #fff !important; border : 1.5px #666 solid !important; color : #666 !important; diff --git a/src/Components/Table.js b/src/Components/Table.js index 8fe88f90..9bad6231 100644 --- a/src/Components/Table.js +++ b/src/Components/Table.js @@ -49,7 +49,7 @@ const useStyles = makeStyles({ }, }); -export default function CustomizedTables() { +export default function CustomizedTables(props) { const classes = useStyles(); return ( @@ -69,7 +69,7 @@ export default function CustomizedTables() { <StyledTableCell component="th" scope="row"> {row.name} </StyledTableCell> - <StyledTableCell align="right">{row.calories}</StyledTableCell> + <StyledTableCell align="right" onClick={props.onClick}>{row.calories}</StyledTableCell> <StyledTableCell align="right">{row.fat}</StyledTableCell> <StyledTableCell align="right">{row.carbs}</StyledTableCell> </StyledTableRow> diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index e26be44d..1f0eb796 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -27,6 +27,12 @@ export default function PageProfessor (props) { props.history.push('/perfil/atualizacoes') } + const onClickTable = () => { + handleStepper( + [ {value : '1', selected : false}, {value : '2', selected : false}, {value : '3', selected : true} ] + ) + } + return ( <> { @@ -38,8 +44,8 @@ export default function PageProfessor (props) { <Paper elevation={3} style= {{width:"max-content"}}> <div style={{paddingRight:"15px", paddingLeft:"15px"}}> {stepper[0].selected && <PartOne stepper={stepper} handleBuscar={handleBuscar} handleCancelar={handleCancelar}/>} - {stepper[1].selected && <PartTwo stepper={stepper}/>} - {stepper[2].selected && <PartThree/>} + {stepper[1].selected && <PartTwo stepper={stepper} onClickTable={onClickTable}/>} + {stepper[2].selected && <PartThree stepper={stepper}/>} </div> </Paper> </div> -- GitLab From 28ec63ad1ab472bf3acd70c7723216a495475bbe Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Thu, 13 Feb 2020 20:48:48 -0300 Subject: [PATCH 22/29] primeira parte de requisicao para ser professor pronta --- src/Components/FormInput.js | 2 +- src/Components/LoginModal.js | 4 +- .../PageProfessorComponents/PartOne.js | 163 +++++++++++++++--- .../PageProfessorComponents/PartTwo.js | 1 + .../TabPanels/TabPanelEditarPerfil.js | 44 +++-- src/Pages/PageProfessor.js | 41 ++++- src/Pages/UserPage.js | 4 +- src/env.js | 2 +- 8 files changed, 195 insertions(+), 66 deletions(-) diff --git a/src/Components/FormInput.js b/src/Components/FormInput.js index f9075068..47aeb1fa 100644 --- a/src/Components/FormInput.js +++ b/src/Components/FormInput.js @@ -66,7 +66,7 @@ export default function FormInput(props) { style={{width:"100%"}} mask={props.mask} multiline={props.multi} - rows={props.row} + rows={props.rows} rowsMax={props.rowMax} /> ); diff --git a/src/Components/LoginModal.js b/src/Components/LoginModal.js index 9c41e3e1..df1be6a4 100644 --- a/src/Components/LoginModal.js +++ b/src/Components/LoginModal.js @@ -80,8 +80,8 @@ export default function LoginModal (props){ ) props.handleClose(); props.openSnackbar(); - localStorage.setItem('@portalmec/accessToken', response.headers['access-token']) - localStorage.setItem('@portalmec/clientToken', response.headers.client,) + sessionStorage.setItem('@portalmec/accessToken', response.headers['access-token']) + sessionStorage.setItem('@portalmec/clientToken', response.headers.client,) sessionStorage.setItem('@portalmec/id', response.data.data.id) sessionStorage.setItem('@portalmec/username', response.data.data.name) sessionStorage.setItem('@portalmec/uid', response.data.data.uid) diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js index a82555a5..5c4b92f6 100644 --- a/src/Components/PageProfessorComponents/PartOne.js +++ b/src/Components/PageProfessorComponents/PartOne.js @@ -1,4 +1,4 @@ -import React, {useState} from 'react' +import React, {useState, useEffect} from 'react' import styled from 'styled-components' import Stepper from '../Stepper.js' import FormControl from '@material-ui/core/FormControl'; @@ -9,32 +9,128 @@ import {Button} from '@material-ui/core' import {RightSideStrikedH3, LeftSideStrikedH3} from '../LoginContainerFunction.js' import Divider from '@material-ui/core/Divider'; import {ButtonCancelar} from './PartTwo.js' +import axios from 'axios' +import FormInput from '../FormInput.js' + +function sortDict (dict) { + const newDict = dict.sort((a, b) => (a.name) > (b.name) ? 1 : -1) + return newDict + +} export default function PartOne (props) { - const [uf, setUF] = useState('') - const handleChangeUF = (event) => {setUF(event.target.value)} + //stores initial get response (list of states, sorted alphabetically) + const [ufList, setStates] = useState([]) + const handleSetStates = (states) => {setStates(states)} + + //stores list of cities sorted alphabetically + const [municipioList, setMunicipioList] = useState([]) + const handleSetMunicipioList = (municipios) => setMunicipioList(municipios) + + //stores a single user selected state + const [uf, setUF] = useState( + { + algumFoiEscolhido : false, + value : '' + } + ) - const [municipio, setMunicipio] = useState('') - const handleChangeMunicipio = (event) => {setMunicipio(event.target.value)} + //stores a single user selected city + const [municipio, setMunicipio] = useState( + { + algumFoiEscolhido : false, + value : '' + } + ) + + const [codigoINEP, setCodigoINEP] = useState( + { + codigoInvalido : false, + value : '' + } + ) + const handleCodigoINEP = (event) => { + const code = event.target.value + + setCodigoINEP({...codigoINEP, + codigoInvalido : false, + value : code + }) + } + + const validateINEP = () => { + const code = codigoINEP.value + + axios.get(('https://www.simcaq.c3sl.ufpr.br/api/v1/portal_mec_inep?filter=school_cod:' + code) + ).then( (response) => { + handleSubmit() + }, (error) => { + setCodigoINEP({...codigoINEP, + codigoInvalido : true, + value : '' + }) + } + ) + } + + const handleSubmit = () => { + props.handleBuscar(uf.value, municipio.value, codigoINEP.value) + } + + //on render component, call simcaq api and update ufList + useEffect ( () => { + axios.get(('https://simcaq.c3sl.ufpr.br/api/v1/state') + ).then( (response) => { + handleSetStates(sortDict(response.data.result)) + }, + (error) => console.log('erro acessando api do simcaq (estados)')) + }, []) + + const handleChooseUF = (event) => { + const ufID = event.target.value + setUF({...uf, + algumFoiEscolhido : true, + value : ufID + } + ) + + axios.get(('https://simcaq.c3sl.ufpr.br/api/v1/city?filter=state:' + ufID) + ).then( (response) => { + handleSetMunicipioList(sortDict(response.data.result)) + }, (error) => console.log('erro acessando api do simcaq (cidades)') + ) + } + + const handleChooseCity = (event) => { + const cityID = event.target.value + setMunicipio({...municipio, + algumFoiEscolhido : true, + value : cityID + } + ) + } return ( <> + {/*/////////////////////////////PRIMEIRA PARTE/////////////////////////////*/} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> <form style={{textAlign:"start"}}> - <p>Localize pelo menos uma escola que você tenha atuado até maio de 2017:</p> + <p>Localize pelo menos uma escola em que você tenha atuado até maio de 2017:</p> <FormControl required style={{width:"100%"}}> <InputLabel>Procure sua UF</InputLabel> <Select labelId="demo-simple-select-label" id="demo-simple-select" - value={uf} - onChange={handleChangeUF} + value={uf.value} + onChange={handleChooseUF} > - <MenuItem value={10}>Ten</MenuItem> - <MenuItem value={20}>Twenty</MenuItem> - <MenuItem value={30}>Thirty</MenuItem> + { + ufList.map( (ufs)=> + <MenuItem value={ufs.id}>{ufs.name}</MenuItem> + ) + } </Select> </FormControl> <FormControl required style={{width:"100%"}}> @@ -42,40 +138,51 @@ export default function PartOne (props) { <Select labelId="demo-simple-select-label" id="demo-simple-select" - value={municipio} - onChange={handleChangeMunicipio} + value={municipio.value} + onChange={handleChooseCity} > - <MenuItem value={10}>Ten</MenuItem> - <MenuItem value={20}>Twenty</MenuItem> - <MenuItem value={30}>Thirty</MenuItem> + { + municipioList.map( (cidades)=> + <MenuItem value={cidades.id}>{cidades.name}</MenuItem> + ) + } </Select> </FormControl> <div style={{display:"flex", justifyContent:"center",paddingTop:"10px", paddingBottom:"10px"}}> - <ButtonConfirmar onClick={props.handleBuscar}>BUSCAR</ButtonConfirmar> + <ButtonConfirmar + onClick={ ( (uf.algumFoiEscolhido && municipio.algumFoiEscolhido) ? handleSubmit : '')} + > + BUSCAR</ButtonConfirmar> </div> </form> </Content> + <div style={{display:"flex", justifyContent:"center", alignItems:"center"}}> <LeftSideStrikedH3/><StrikeSpan>ou</StrikeSpan><RightSideStrikedH3/> </div> + + {/*/////////////////////////////SEGUNDA PARTE/////////////////////////////*/} <Content> <form> <p>Localize pelo código INEP da escola:</p> <FormControl required style={{width:"100%"}}> - <InputLabel>Código INEP</InputLabel> - <Select - labelId="demo-simple-select-label" - id="demo-simple-select" - value={municipio} - onChange={handleChangeMunicipio} + <FormInput + inputType={'text'} + name={'Código INEP'} + value={codigoINEP.value} + handleChange = {handleCodigoINEP} + placeholder={'Código INEP'} + required={true} + error={codigoINEP.codigoInvalido} + help={codigoINEP.codigoInvalido ? <span style={{color:'red'}}>código INEP inválido</span> : ''} > - <MenuItem value={10}>Ten</MenuItem> - <MenuItem value={20}>Twenty</MenuItem> - <MenuItem value={30}>Thirty</MenuItem> - </Select> + </FormInput> </FormControl> <div style={{display:"flex", justifyContent:"center",paddingTop:"10px", paddingBottom:"10px"}}> - <ButtonConfirmar onClick={props.handleBuscar}>BUSCAR</ButtonConfirmar> + <ButtonConfirmar + onClick={validateINEP} + > + BUSCAR</ButtonConfirmar> </div> </form> </Content> diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js index d4af14b2..e8bce948 100644 --- a/src/Components/PageProfessorComponents/PartTwo.js +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -9,6 +9,7 @@ import {Button} from '@material-ui/core' export default function PartTwo (props) { return ( <> + {console.log(props.info)} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> diff --git a/src/Components/TabPanels/TabPanelEditarPerfil.js b/src/Components/TabPanels/TabPanelEditarPerfil.js index 6274fcba..fc445817 100644 --- a/src/Components/TabPanels/TabPanelEditarPerfil.js +++ b/src/Components/TabPanels/TabPanelEditarPerfil.js @@ -16,17 +16,13 @@ export default function TabPanelEditarPerfil (props) { const [hoverAlterarFoto, handleAlterarFoto] = React.useState(false) const [formNome, setNome] = useState({ - dict : { - key : false, - value : "" - } + key : false, + value : "" }) const [formAboutMe, setAboutMe] = useState({ - dict : { - key : false, - value : "", - } + key : false, + value : "", }) const handleHoverAlterarFoto = () => { @@ -43,38 +39,38 @@ export default function TabPanelEditarPerfil (props) { const flag = ValidateUserInput(type, userInput) if(type === 'username') { - setNome({...formNome, dict : { + setNome({...formNome, key : flag, value : userInput - }}) + }) console.log(formNome) } else if (type === 'aboutMe') { - setAboutMe({...formAboutMe, dict : { + setAboutMe({...formAboutMe, key : flag, value : userInput, - }}) + }) console.log(formAboutMe) } } const limpaCamposForm = () => { - setNome({...formNome, dict: { + setNome({...formNome, key : false, value : '' - }}) + }) - setAboutMe({...formAboutMe, dict: { + setAboutMe({...formAboutMe, key : false, value : '' - }}) + }) } const handleSubmit = (e) => { e.preventDefault() - const info = {nome : formNome.dict.value, aboutMe : formAboutMe.dict.value} - const flagNome = formNome.dict.key - const flagAboutMe = formAboutMe.dict.key + const info = {nome : formNome.value, aboutMe : formAboutMe.value} + const flagNome = formNome.key + const flagAboutMe = formAboutMe.key if (!(flagNome || flagAboutMe)) { console.log(info) @@ -118,24 +114,24 @@ export default function TabPanelEditarPerfil (props) { <FormInput inputType={"text"} name={"Nome Completo"} - value={formNome.dict.value} + value={formNome.value} placeholder={"Nome Completo"} handleChange={e => handleChange(e, 'username')} required={true} - error={formNome.dict.key} + error={formNome.key} /> <FormInput inputType={"text"} name={"Sobre Mim"} - value={formAboutMe.dict.value} + value={formAboutMe.value} multi = {true} rows="3" rowsMax = "3" - error={formAboutMe.dict.key} + error={formAboutMe.key} placeholder={"Sobre Mim"} handleChange={e => handleChange(e, 'aboutMe')} required={false} - help = {formAboutMe.dict.value.length + '/160'} + help = {formAboutMe.value.length + '/160'} /> </form> </div> diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index 1f0eb796..b89eacc8 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -13,24 +13,45 @@ export default function PageProfessor (props) { props.history.push('/termos-publicar-recurso') } + const [registerInformation, setRegisterInformation] = useState( + { + teacher_cpf: '', + school_phone: '', + school_name: '', + school_City: '', // perguntar se aqui é o id ou o nome + school_uf : '', //perguntar se aqui é o id ou o nome + inep_code: '' + } + ) + const [stepper, handleStepper] = useState( [ {value : '1', selected : true}, {value : '2', selected : false}, {value : '3', selected : false} ] ) - - const handleBuscar = () => { + const toggleStepper = (selected1, selected2, selected3) => { handleStepper( - [ {value : '1', selected : false}, {value : '2', selected : true}, {value : '3', selected : false} ] + [ + {value : '1', selected : selected1}, + {value : '2', selected : selected2}, + {value : '3', selected : selected3} + ] ) } + const handleBuscar = (uf, municipio, inep) => { + setRegisterInformation({...registerInformation, + school_uf : uf, + school_City : municipio, + inep_code : inep + }) + toggleStepper(false, true, false) + } + const handleCancelar = () => { props.history.push('/perfil/atualizacoes') } const onClickTable = () => { - handleStepper( - [ {value : '1', selected : false}, {value : '2', selected : false}, {value : '3', selected : true} ] - ) + toggleStepper(false, false, true) } return ( @@ -43,8 +64,12 @@ export default function PageProfessor (props) { <div style={{display: "flex", justifyContent:"center", paddingTop:"5vh", paddingBottom:"5vh"}}> <Paper elevation={3} style= {{width:"max-content"}}> <div style={{paddingRight:"15px", paddingLeft:"15px"}}> - {stepper[0].selected && <PartOne stepper={stepper} handleBuscar={handleBuscar} handleCancelar={handleCancelar}/>} - {stepper[1].selected && <PartTwo stepper={stepper} onClickTable={onClickTable}/>} + {stepper[0].selected && + <PartOne stepper={stepper} handleBuscar={handleBuscar} + handleCancelar={handleCancelar} + /> + } + {stepper[1].selected && <PartTwo stepper={stepper} onClickTable={onClickTable} info={registerInformation}/>} {stepper[2].selected && <PartThree stepper={stepper}/>} </div> </Paper> diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index 76b15fe3..f6650c98 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -58,8 +58,8 @@ export default function UserPage (props){ headers : { 'Accept': 'application/json', 'Content-Type': 'application/json', - 'Access-Token': localStorage.getItem('@portalmec/accessToken'), - 'Client': localStorage.getItem('@portalmec/clientToken'), + 'Access-Token': sessionStorage.getItem('@portalmec/accessToken'), + 'Client': sessionStorage.getItem('@portalmec/clientToken'), 'Uid': sessionStorage.getItem('@portalmec/uid'), 'Host': 'api.portalmec.c3sl.ufpr.br', 'Cookie': '' diff --git a/src/env.js b/src/env.js index f3072030..3ba1693d 100644 --- a/src/env.js +++ b/src/env.js @@ -17,7 +17,7 @@ You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -var apiDomain = 'https://api.portalmec.c3sl.ufpr.br', +var apiDomain = 'https://api.portalmec.c3sl.ufpr.br/', apiVersion = 'v1', apiUrl = apiDomain + '/' + apiVersion; -- GitLab From abf323c089dd5d0676f0118808101d184fa3f708 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Thu, 13 Feb 2020 20:56:10 -0300 Subject: [PATCH 23/29] ajeitando os formularios --- src/Components/LoginContainerFunction.js | 38 ++++--- src/Components/SignUpContainerFunction.js | 50 +++++----- .../TabPanels/TabPanelGerenciarConta.js | 98 ++++++++----------- 3 files changed, 82 insertions(+), 104 deletions(-) diff --git a/src/Components/LoginContainerFunction.js b/src/Components/LoginContainerFunction.js index 15b7c858..38150d43 100644 --- a/src/Components/LoginContainerFunction.js +++ b/src/Components/LoginContainerFunction.js @@ -30,19 +30,15 @@ import ValidateUserInput from '../Components/FormValidationFunction.js' export default function LoginContainer (props) { const [formEmail, setEmail] = useState( { - dict : { key : false, value : localStorage.getItem("@portalmec/email") || "", - } } ) const [formSenha, setSenha] = useState( { - dict : { key : false, value : localStorage.getItem("@portalmec/senha") ||"" - } } ) @@ -59,38 +55,38 @@ export default function LoginContainer (props) { const flag = ValidateUserInput(type, userInput) if(type === 'email') { - setEmail({...formEmail, dict : { + setEmail({...formEmail, key : flag, value : userInput - }}) + }) console.log(formEmail) } else if(type === 'password') { - setSenha({...formSenha, dict : { + setSenha({...formSenha, key : flag, value : userInput - }}) + }) console.log(formSenha) } } const limpaCamposForm = () => { - setEmail({...formEmail, dict : { + setEmail({...formEmail, key : false, value : '' - }}); + }); - setSenha({...formSenha, dict : { + setSenha({...formSenha, key : false, value : '' - }}) + }) } const onSubmit = (e) => { e.preventDefault() - const login = {email : formEmail.dict.value, senha : formSenha.dict.value, checkbox : checkboxControl} + const login = {email : formEmail.value, senha : formSenha.value, checkbox : checkboxControl} - if (!(formEmail.dict.key || formSenha.dict.key)) { + if (!(formEmail.key || formSenha.key)) { props.handleLoginInfo(login) limpaCamposForm() } @@ -138,23 +134,23 @@ export default function LoginContainer (props) { <FormInput inputType={"text"} name={"email"} - value={formEmail.dict.value} + value={formEmail.value} placeholder={"E-mail"} handleChange={e => handleChange(e, 'email')} required={true} - error = {formEmail.dict.key} - help = {formEmail.dict.key ? ( formEmail.dict.value.length == 0 ? "Faltou preencher seu e-mail." : <span>Insira um endereço de e-mail válido.<br/>Por exemplo: seunome@gmail.com, seunome@hotmail.com</span>) : ""} + error = {formEmail.key} + help = {formEmail.key ? ( formEmail.value.length == 0 ? "Faltou preencher seu e-mail." : <span>Insira um endereço de e-mail válido.<br/>Por exemplo: seunome@gmail.com, seunome@hotmail.com</span>) : ""} /> <br/> <FormInput inputType={"password"} name={"senha"} - value={formSenha.dict.value} + value={formSenha.value} placeholder={"Senha"} handleChange={e => handleChange(e, 'password')} required={true} - error = {formSenha.dict.key} - help = {formSenha.dict.key ? (formSenha.dict.value.length == 0 ? "Faltou digitar sua senha." : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} + error = {formSenha.key} + help = {formSenha.key ? (formSenha.value.length == 0 ? "Faltou digitar sua senha." : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} /> <br/> @@ -164,7 +160,7 @@ export default function LoginContainer (props) { </RememberRecover> <ConfirmContainerStyled> - <StyledLoginButton onClick={e => onSubmit(e)} variant="contained"> + <StyledLoginButton type="submit" variant="contained"> <span style={{borderRadius:"3px", boxSizing:"border-box", fontFamily:"Roboto, sans serif", fontWeight:"500", color:"#fff"}}>ENTRAR</span> </StyledLoginButton> </ConfirmContainerStyled> diff --git a/src/Components/SignUpContainerFunction.js b/src/Components/SignUpContainerFunction.js index ed137f75..44e3df95 100644 --- a/src/Components/SignUpContainerFunction.js +++ b/src/Components/SignUpContainerFunction.js @@ -36,28 +36,22 @@ var callback = function () { export default function SignUpContainer (props) { const [formNome, setNome] = useState( { - dict : { key : false, value : "", - } } ) const [formEmail, setEmail] = useState( { - dict : { key : false, value : "", - } } ) const [formSenha, setSenha] = useState( { - dict : { key : false, value : "" - } } ) @@ -66,43 +60,43 @@ export default function SignUpContainer (props) { const flag = ValidateUserInput(type, userInput) if (type === 'username') { - setNome({...formNome, dict : { + setNome({...formNome, key : flag, value : userInput - }}) + }) console.log(formNome) } else if(type === 'email') { - setEmail({...formEmail, dict : { + setEmail({...formEmail, key : flag, value : userInput - }}) + }) console.log(formEmail) } else if(type === 'password') { - setSenha({...formSenha, dict : { + setSenha({...formSenha, key : flag, value : userInput - }}) + }) console.log(formSenha) } } const limpaCamposForm = () => { - setNome({...formNome, dict : { + setNome({...formNome, key : false, value : '' - }}) + }) - setEmail({...formEmail, dict : { + setEmail({...formEmail, key : false, value : '' - }}); + }); - setSenha({...formSenha, dict : { + setSenha({...formSenha, key : false, value : '' - }}) + }) } const responseGoogle = (response) => { @@ -117,9 +111,9 @@ export default function SignUpContainer (props) { const onSubmit = (e) => { e.preventDefault(); - const newLogin = {name : formNome.dict.value, email : formEmail.dict.value, password : formSenha.dict.value} + const newLogin = {name : formNome.value, email : formEmail.value, password : formSenha.value} - if (!(formNome.dict.key || formEmail.dict.key || formSenha.dict.key)) { + if (!(formNome.key || formEmail.key || formSenha.key)) { props.handleLoginInfo(newLogin) limpaCamposForm() } @@ -160,33 +154,33 @@ export default function SignUpContainer (props) { <FormInput inputType={"text"} name={"name"} - value={formNome.dict.value} + value={formNome.value} placeholder={"Nome Completo"} handleChange={e => handleChange(e, 'username')} required={true} - error={formNome.dict.key} + error={formNome.key} /> <br/> <FormInput inputType={"text"} name={"email"} - value={formEmail.dict.value} + value={formEmail.value} placeholder={"E-mail"} handleChange={e => handleChange(e, 'email')} required={true} - error={formEmail.dict.key} - help = {formEmail.dict.key ? (formEmail.dict.value.length == 0 ? "Faltou preencher seu e-mail." : <span>Insira um endereço de e-mail válido.<br/>Por exemplo: seunome@gmail.com, seunome@hotmail.com</span>) : ""} + error={formEmail.key} + help = {formEmail.key ? (formEmail.value.length == 0 ? "Faltou preencher seu e-mail." : <span>Insira um endereço de e-mail válido.<br/>Por exemplo: seunome@gmail.com, seunome@hotmail.com</span>) : ""} /> <br/> <FormInput inputType={"password"} name={"password"} - value={formSenha.dict.value} + value={formSenha.value} placeholder={"Senha"} handleChange={e => handleChange(e, 'password')} required={true} - error={formSenha.dict.key} - help = {formSenha.dict.key ? (formSenha.dict.value.length == 0 ? "Faltou digitar sua senha." : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} + error={formSenha.key} + help = {formSenha.key ? (formSenha.value.length == 0 ? "Faltou digitar sua senha." : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} /> <br/> <Recaptcha diff --git a/src/Components/TabPanels/TabPanelGerenciarConta.js b/src/Components/TabPanels/TabPanelGerenciarConta.js index 74a9d839..4ed6f6a8 100644 --- a/src/Components/TabPanels/TabPanelGerenciarConta.js +++ b/src/Components/TabPanels/TabPanelGerenciarConta.js @@ -9,63 +9,51 @@ import ValidateUserInput from '../FormValidationFunction.js' export default function TabPanelGerenciarConta (props) { const [senhaAtual, setSenhaAtual] = useState( { - dict : { - key : false, - value : localStorage.getItem("@portalmec/senha") || "" - } - } - ) + key : false, + value : localStorage.getItem("@portalmec/senha") || "" + }) const [novaSenha, setNovaSenha] = useState( { - dict : { - key : false, - value : "" - } - } - ) + key : false, + value : "" + }) const [novaSenhaConfirmacao, setNovaSenhaConfirmacao] = useState( { - dict : { - key : false, - value : "" - } - } - ) + key : false, + value : "" + }) const [novoEmail, setNovoEmail] = useState( { - dict : { - key : false, - value : "" - } - } - ) + key : false, + value : "" + }) const handleChangeSenha = (e, type) => { const userInput = e.target.value - const flag = (type === 'confirmacao' ? ValidateUserInput('confirmation', userInput, novaSenha.dict.value) : ValidateUserInput('password', userInput)) + const flag = (type === 'confirmacao' ? ValidateUserInput('confirmation', userInput, novaSenha.value) : ValidateUserInput('password', userInput)) if(type === 'senhaAtual') { - setSenhaAtual({...senhaAtual, dict : { + setSenhaAtual({...senhaAtual, key : flag, value : userInput - }}) + }) console.log(senhaAtual) } else if(type === 'novaSenha') { - setNovaSenha({...novaSenha, dict : { + setNovaSenha({...novaSenha, key : flag, value : userInput - }}) + }) console.log(novaSenha) } else if (type === 'confirmacao'){ - setNovaSenhaConfirmacao({...novaSenhaConfirmacao, dict : { + setNovaSenhaConfirmacao({...novaSenhaConfirmacao, key : flag, value : userInput - }}) + }) console.log(novaSenhaConfirmacao) } } @@ -74,50 +62,50 @@ export default function TabPanelGerenciarConta (props) { const userInput = e.target.value const flag = ValidateUserInput('email', userInput) - setNovoEmail({...novoEmail, dict : { + setNovoEmail({...novoEmail, key : flag, value : userInput - }}) + }) console.log(novoEmail) } const limpaCamposForm = () => { - setSenhaAtual({...senhaAtual, dict : { + setSenhaAtual({...senhaAtual, key : false, value : '' - }}) + }) - setNovaSenha({...novaSenha, dict : { + setNovaSenha({...novaSenha, key : false, value : '' - }}) + }) - setNovaSenhaConfirmacao({...novaSenhaConfirmacao, dict : { + setNovaSenhaConfirmacao({...novaSenhaConfirmacao, key : false, value : '' - }}) + }) } const onSubmit = (e, type) => { e.preventDefault() if (type === 'senha'){ - if (senhaAtual.dict.value === localStorage.getItem("@portalmec/senha")) { - const login = {senhaAtual : senhaAtual.dict.value, novaSenha : novaSenha.dict.value, novaSenhaConfirmacao : novaSenhaConfirmacao.dict.value} + if (senhaAtual.value === localStorage.getItem("@portalmec/senha")) { + const login = {senhaAtual : senhaAtual.value, novaSenha : novaSenha.value, novaSenhaConfirmacao : novaSenhaConfirmacao.value} - if (!(senhaAtual.dict.key || novaSenha.dict.key || novaSenhaConfirmacao.dict.key)) { + if (!(senhaAtual.key || novaSenha.key || novaSenhaConfirmacao.key)) { console.log(login) limpaCamposForm() props.handleSnackbar() } } else { - console.log(localStorage.getItem("@portalmec/senha"), senhaAtual.dict.value) + console.log(localStorage.getItem("@portalmec/senha"), senhaAtual.value) } } else { - console.log(novoEmail.dict.value) + console.log(novoEmail.value) } } @@ -134,32 +122,32 @@ export default function TabPanelGerenciarConta (props) { <FormInput inputType={"password"} name={"Senha Atual"} - value={senhaAtual.dict.value} + value={senhaAtual.value} placeholder={"Senha atual"} handleChange={e => handleChangeSenha(e, 'senhaAtual')} required={true} - error={senhaAtual.dict.key} - help={ senhaAtual.dict.key ? "Faltou inserir sua senha atual" : ""} + error={senhaAtual.key} + help={ senhaAtual.key ? "Faltou inserir sua senha atual" : ""} /> <FormInput inputType={"password"} name={"Nova senha"} - value={novaSenha.dict.value} + value={novaSenha.value} placeholder={"Nova senha"} handleChange={e => handleChangeSenha(e, 'novaSenha')} required={true} - error={novaSenha.dict.key} - help={ novaSenha.dict.key ? (novaSenha.dict.value.length == 0 ? "Faltou definir uma nova senha" : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} + error={novaSenha.key} + help={ novaSenha.key ? (novaSenha.value.length == 0 ? "Faltou definir uma nova senha" : "A senha precisa ter no mÃnimo 8 caracteres.") : ""} /> <FormInput inputType={"password"} name={"Digite novamente a nova senha"} - value={novaSenhaConfirmacao.dict.value} + value={novaSenhaConfirmacao.value} placeholder={"Digite novamente a nova senha"} handleChange={e => handleChangeSenha(e, 'confirmacao')} required={true} - error={novaSenhaConfirmacao.dict.key} - help={ novaSenhaConfirmacao.dict.key ? "As senhas devem ser iguais" : ""} + error={novaSenhaConfirmacao.key} + help={ novaSenhaConfirmacao.key ? "As senhas devem ser iguais" : ""} /> <div style={{display:"flex", flexDirection:"row", justifyContent:"space-evenly"}}> <span style={{paddingTop:"0.7em"}}><a href="recuperar-senha" style={{textAlign: "flex-start", color:"#00bcd4"}}>Esqueceu a senha?</a></span> @@ -182,11 +170,11 @@ export default function TabPanelGerenciarConta (props) { <FormInput inputType={"text"} name={"email"} - value={novoEmail.dict.value} + value={novoEmail.value} placeholder={"E-mail"} handleChange={e => handleChangeEmail(e)} required={true} - error = {novoEmail.dict.key} + error = {novoEmail.key} /> <div style={{margin:"0", display:"flex", justifyContent:"flex-start"}}> <CompletarCadastroButton type="submit">SALVAR ALTERAÇÕES</CompletarCadastroButton> -- GitLab From 815ddba6e911987cbd9bb0cb069d8d3cf661b7e5 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Fri, 14 Feb 2020 15:26:00 -0300 Subject: [PATCH 24/29] trabalhando pag 2 --- .../PageProfessorComponents/PartOne.js | 48 +++++++++++-------- .../PageProfessorComponents/PartThree.js | 39 ++++++++++++--- .../PageProfessorComponents/PartTwo.js | 46 ++++++++++++++++-- src/Components/Table.js | 35 ++++++-------- src/Pages/PageProfessor.js | 40 ++++++++++++---- src/env.js | 7 ++- 6 files changed, 154 insertions(+), 61 deletions(-) diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js index 5c4b92f6..082ac22f 100644 --- a/src/Components/PageProfessorComponents/PartOne.js +++ b/src/Components/PageProfessorComponents/PartOne.js @@ -12,7 +12,7 @@ import {ButtonCancelar} from './PartTwo.js' import axios from 'axios' import FormInput from '../FormInput.js' -function sortDict (dict) { +export function sortDict (dict) { const newDict = dict.sort((a, b) => (a.name) > (b.name) ? 1 : -1) return newDict @@ -31,7 +31,9 @@ export default function PartOne (props) { const [uf, setUF] = useState( { algumFoiEscolhido : false, - value : '' + selected : '', //id + name : '', + abbreviation : '' } ) @@ -39,27 +41,28 @@ export default function PartOne (props) { const [municipio, setMunicipio] = useState( { algumFoiEscolhido : false, - value : '' + selected : '', + name : '' } ) const [codigoINEP, setCodigoINEP] = useState( { codigoInvalido : false, - value : '' + selected : '' } ) const handleCodigoINEP = (event) => { const code = event.target.value - + setCodigoINEP({...codigoINEP, codigoInvalido : false, - value : code + selected : code }) } const validateINEP = () => { - const code = codigoINEP.value + const code = codigoINEP.selected axios.get(('https://www.simcaq.c3sl.ufpr.br/api/v1/portal_mec_inep?filter=school_cod:' + code) ).then( (response) => { @@ -67,14 +70,15 @@ export default function PartOne (props) { }, (error) => { setCodigoINEP({...codigoINEP, codigoInvalido : true, - value : '' + selected : '' }) } ) } const handleSubmit = () => { - props.handleBuscar(uf.value, municipio.value, codigoINEP.value) + console.log('handle submit : ', uf.abbreviation, uf.selected, municipio.name, municipio.selected, codigoINEP.value) + props.handleBuscar(uf.abbreviation, uf.selected, municipio.name, municipio.selected, codigoINEP.value) } //on render component, call simcaq api and update ufList @@ -87,10 +91,14 @@ export default function PartOne (props) { }, []) const handleChooseUF = (event) => { - const ufID = event.target.value + const ufID = event.target.value.ufID + const ufAbbreviation = event.target.value.abbreviation + const ufName = event.target.value.name setUF({...uf, algumFoiEscolhido : true, - value : ufID + selected : ufID, + name : ufName, + abbreviation : ufAbbreviation } ) @@ -102,10 +110,12 @@ export default function PartOne (props) { } const handleChooseCity = (event) => { - const cityID = event.target.value + const cityID = event.target.value.id + const cityName = event.target.value.name setMunicipio({...municipio, algumFoiEscolhido : true, - value : cityID + selected : cityID, + name : cityName } ) } @@ -123,12 +133,12 @@ export default function PartOne (props) { <Select labelId="demo-simple-select-label" id="demo-simple-select" - value={uf.value} + value={uf.name} onChange={handleChooseUF} > { ufList.map( (ufs)=> - <MenuItem value={ufs.id}>{ufs.name}</MenuItem> + <MenuItem key={ufs.id} value={{abbreviation : ufs.abbreviation, ufID : ufs.id, name : ufs.name}}>{ufs.name}</MenuItem> ) } </Select> @@ -138,12 +148,12 @@ export default function PartOne (props) { <Select labelId="demo-simple-select-label" id="demo-simple-select" - value={municipio.value} + value={municipio.name} onChange={handleChooseCity} > { municipioList.map( (cidades)=> - <MenuItem value={cidades.id}>{cidades.name}</MenuItem> + <MenuItem value={{id : cidades.id, name : cidades.name}}>{cidades.name}</MenuItem> ) } </Select> @@ -169,7 +179,7 @@ export default function PartOne (props) { <FormInput inputType={'text'} name={'Código INEP'} - value={codigoINEP.value} + value={codigoINEP.selected} handleChange = {handleCodigoINEP} placeholder={'Código INEP'} required={true} @@ -188,7 +198,7 @@ export default function PartOne (props) { </Content> <Divider/> <ButtonsArea> - <ButtonCancelar>CANCELAR VERIFICAÇÃO</ButtonCancelar> + <ButtonCancelar onClick={props.handleCancelar}>CANCELAR VERIFICAÇÃO</ButtonCancelar> </ButtonsArea> </> ) diff --git a/src/Components/PageProfessorComponents/PartThree.js b/src/Components/PageProfessorComponents/PartThree.js index 75a9faf5..32aa2064 100644 --- a/src/Components/PageProfessorComponents/PartThree.js +++ b/src/Components/PageProfessorComponents/PartThree.js @@ -9,11 +9,33 @@ import styled from 'styled-components' import {Button} from '@material-ui/core' export default function PartThree (props) { - const [phoneNumber, setPhoneNumber] = useState('') - const handleChangePhoneNumber = (event) => {setPhoneNumber(event.target.value)} + const [phoneNumber, setPhoneNumber] = useState( + { + flagInvalid : false, + number : '' + } + ) + const handleChangePhoneNumber = (event) => { + const input = event.target.value.replace(/\D/,'') + setPhoneNumber({...phoneNumber, + flagInvalid : (input.length > 9 ? true : false), + number : (input.length > 9 ? phoneNumber.number : input), + }) + } + + const [cpf, setCpf] = useState( { + flagInvalid : false, + number : '' + }) + const handleChangeCpf = (event) => { + const input = event.target.value.replace(/\D/,'') + setCpf({...cpf, + flagInvalid : (input.length > 11 ? true : false), + number : (input.length > 11 ? cpf.number : input), + }) + } + - const [cpf, setCpf] = useState('') - const handleChangeCpf = (event) => {setCpf(event.target.value)} return ( <> <Content> @@ -25,10 +47,12 @@ export default function PartThree (props) { <p>Inserir o telefone da escola:</p> <FormInput inputType={'text'} + pattern="[0-9]" name={'DDD e Número'} placeholder={'DDD e Número'} - value={phoneNumber} + value={phoneNumber.number} handleChange={handleChangePhoneNumber} + error={phoneNumber.flagInvalid} > </FormInput> </FormControl> @@ -38,7 +62,7 @@ export default function PartThree (props) { inputType={'text'} name={'11 dÃgitos'} placeholder={'11 dÃgitos'} - value={cpf} + value={cpf.number} handleChange={handleChangeCpf} mask={'999.999.999-99'} > @@ -49,7 +73,8 @@ export default function PartThree (props) { <ButtonConfirmar onClick={props.handleBuscar}>BUSCAR</ButtonConfirmar> </div> <div style={{display:"flex", justifyContent:"center"}}> - <ButtonGrey>VOLTAR</ButtonGrey><ButtonCancelar>CANCELAR</ButtonCancelar> + <ButtonGrey onClick={() => props.goBack(false, true, false)}>VOLTAR</ButtonGrey> + <ButtonCancelar onClick={props.handleCancelar}>CANCELAR</ButtonCancelar> </div> </div> </form> diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js index e8bce948..2a9237e7 100644 --- a/src/Components/PageProfessorComponents/PartTwo.js +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -1,15 +1,47 @@ -import React from 'react' +import React, {useState, useEffect} from 'react' import {Content, ButtonsArea} from './PartOne.js' import Divider from '@material-ui/core/Divider'; import Stepper from '../Stepper.js' import CustomizedTables from '../Table.js' import styled from 'styled-components' import {Button} from '@material-ui/core' +import axios from 'axios' +import {simcaqAPIurl} from '../../env' +import {sortDict} from './PartOne.js' export default function PartTwo (props) { + const [htttpRequestDone, setDone] = useState(false) + const [schoolList, setSchoolList] = useState([]) + + useEffect ( () => { + const code = (props.info.inep_code || '') + const uf = (props.info.school_uf.id || '') + const municipio = (props.info.school_City.id || '') + console.log(code, uf, municipio) + //if user searched by inep code + if (code != '') { + axios.get((`${simcaqAPIurl}/portal_mec_inep?filter=school_cod:` + code) + ).then ((response) => { + console.log(response.data.result) + + setSchoolList(response.data.result) + setDone(true) + + }, (error) => console.log('erro ao dar get na escola por inep code') + )} + else if (uf != '' && municipio != '') { + axios.get((`${simcaqAPIurl}/school?filter=state:"` + uf + '",city_name:"' + municipio + '"') + ). then((response)=> { + console.log(response.data.result) + setSchoolList(sortDict(response.data.result)) + setDone(true) + }, (error) => console.log('erro ao dar get na escola por uf e municipio', code, uf, municipio) + )} + }, []) + return ( <> - {console.log(props.info)} + {console.log(props)} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> @@ -17,12 +49,18 @@ export default function PartTwo (props) { <Content> <InputContainer> <p>Selecione a sua escola:</p> - <CustomizedTables onClick={props.onClickTable}/> + + <CustomizedTables onClick={props.onClickTable} + columns={['Codigo INEP', 'Escola', 'UF', 'Cidade']} + rows={schoolList} + /> + </InputContainer> </Content> <Divider/> <ButtonsArea> - <ButtonGrey>VOLTAR</ButtonGrey><ButtonCancelar>CANCELAR VERIFICAÇÃO</ButtonCancelar> + <ButtonGrey onClick={() => props.goBack(true, false, false)}>VOLTAR</ButtonGrey> + <ButtonCancelar onClick={props.handleCancelar}>CANCELAR VERIFICAÇÃO</ButtonCancelar> </ButtonsArea> </> ) diff --git a/src/Components/Table.js b/src/Components/Table.js index 9bad6231..bdf987ce 100644 --- a/src/Components/Table.js +++ b/src/Components/Table.js @@ -31,17 +31,6 @@ const StyledTableRow = withStyles(theme => ({ }, }))(TableRow); -function createData(name, calories, fat, carbs) { - return { name, calories, fat, carbs}; -} - -const rows = [ - createData('Frozen yoghurt', 159, 6.0, 24), - createData('Ice cream sandwich', 237, 9.0, 37), - createData('Eclair', 262, 16.0, 24), - createData('Cupcake', 305, 3.7, 67), - createData('Gingerbread', 356, 16.0, 49), -]; const useStyles = makeStyles({ table: { @@ -53,29 +42,33 @@ export default function CustomizedTables(props) { const classes = useStyles(); return ( + <> + {console.log(props)} <TableContainer component={Paper}> <Table className={classes.table} aria-label="customized table"> <TableHead> <TableRow> - <StyledTableCell>Codigo INEP</StyledTableCell> - <StyledTableCell align="right">Escola</StyledTableCell> - <StyledTableCell align="right">UF</StyledTableCell> - <StyledTableCell align="right">Cidade</StyledTableCell> + { + props.columns.map( (column)=> + <StyledTableCell align="left">{column}</StyledTableCell> + ) + } </TableRow> </TableHead> <TableBody> - {rows.map(row => ( - <StyledTableRow key={row.name}> + {props.rows.map(row => ( + <StyledTableRow onClick={props.onClick} key={row.id}> <StyledTableCell component="th" scope="row"> - {row.name} + {row.id} </StyledTableCell> - <StyledTableCell align="right" onClick={props.onClick}>{row.calories}</StyledTableCell> - <StyledTableCell align="right">{row.fat}</StyledTableCell> - <StyledTableCell align="right">{row.carbs}</StyledTableCell> + <StyledTableCell align="left">{row.name}</StyledTableCell> + <StyledTableCell align="left">{row.state_name}</StyledTableCell> + <StyledTableCell align="left">{row.city_name}</StyledTableCell> </StyledTableRow> ))} </TableBody> </Table> </TableContainer> + </> ); } diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index b89eacc8..295818ce 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -18,8 +18,14 @@ export default function PageProfessor (props) { teacher_cpf: '', school_phone: '', school_name: '', - school_City: '', // perguntar se aqui é o id ou o nome - school_uf : '', //perguntar se aqui é o id ou o nome + school_City : { + id : '', + name : '' + }, + school_uf : { + id : '', + abbreviation : '' + }, inep_code: '' } ) @@ -37,13 +43,20 @@ export default function PageProfessor (props) { ) } - const handleBuscar = (uf, municipio, inep) => { + const handleBuscar = (ufAbbreviation, ufID, nomeMunicipio, idMunicipio, inep) => { + console.log(ufAbbreviation, ufID, nomeMunicipio, idMunicipio, inep) setRegisterInformation({...registerInformation, - school_uf : uf, - school_City : municipio, - inep_code : inep + school_uf : { + id : (ufID ? ufID : ''), + abbreviation: (ufAbbreviation ? ufAbbreviation : '') + }, + school_City : { + id : (idMunicipio ? idMunicipio : ''), + name : (nomeMunicipio ? nomeMunicipio : '') + }, + inep_code : (inep ? inep : '') }) - toggleStepper(false, true, false) + toggleStepper(false, false, true) } const handleCancelar = () => { @@ -69,8 +82,17 @@ export default function PageProfessor (props) { handleCancelar={handleCancelar} /> } - {stepper[1].selected && <PartTwo stepper={stepper} onClickTable={onClickTable} info={registerInformation}/>} - {stepper[2].selected && <PartThree stepper={stepper}/>} + {stepper[1].selected && + <PartTwo stepper={stepper} onClickTable={onClickTable} + info={registerInformation} goBack={toggleStepper} + handleCancelar={handleCancelar} + /> + } + {stepper[2].selected && + <PartThree stepper={stepper} goBack={toggleStepper} + handleCancelar={handleCancelar} + /> + } </div> </Paper> </div> diff --git a/src/env.js b/src/env.js index 3ba1693d..36b6bc8d 100644 --- a/src/env.js +++ b/src/env.js @@ -17,9 +17,14 @@ You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -var apiDomain = 'https://api.portalmec.c3sl.ufpr.br/', +var apiDomain = 'https://api.portalmec.c3sl.ufpr.br', apiVersion = 'v1', apiUrl = apiDomain + '/' + apiVersion; +var simcaqAPIDomain = 'https://www.simcaq.c3sl.ufpr.br', + apiVersion = 'v1', + simcaqAPIurl = simcaqAPIDomain + '/' + apiVersion + export {apiUrl}; export {apiDomain}; +export {simcaqAPIurl} -- GitLab From 4ab77487f3990eada1849ca7382bf70afab5bbee Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 18 Feb 2020 08:49:50 -0300 Subject: [PATCH 25/29] segunda parte da pagina de pedir pra ser professor pronta --- src/Components/ComponentAlterarAvatar.js | 17 ++++++---- .../PageProfessorComponents/PartOne.js | 8 +++-- .../PageProfessorComponents/PartThree.js | 3 +- .../PageProfessorComponents/PartTwo.js | 20 ++++++----- src/Components/Table.js | 11 ++++-- src/Pages/PageProfessor.js | 34 ++++++++++++++++--- src/Pages/UserPage.js | 2 +- src/Store.js | 2 +- src/env.js | 2 +- 9 files changed, 70 insertions(+), 29 deletions(-) diff --git a/src/Components/ComponentAlterarAvatar.js b/src/Components/ComponentAlterarAvatar.js index f6ed1c11..5ce25f28 100644 --- a/src/Components/ComponentAlterarAvatar.js +++ b/src/Components/ComponentAlterarAvatar.js @@ -128,6 +128,7 @@ const AvatarCircleDiv = styled.div` height : 150px; width : 150px; position : relative; + overflow: hidden; ` const DivFlowHolder =styled.div` @@ -204,13 +205,15 @@ export default function ComponentAlterarAvatar (props) { <img src={this.props.userAvatar} alt={'user avatar'} style={{height:"inherit", width:"inherit", objectFit:"cover"}}/> ) } - <ChangeAvatarDiv> - <span>Alterar</span> - <input accept="image/*" id="icon-button-file" - type="file" - onChange={(e) => props.handleFile(e.target.files) } - style={{display:"none"}}/> - </ChangeAvatarDiv> + <input accept="image/*" id="icon-button-file" + type="file" + onChange={(e) => props.handleFile(e.target.files) } + style={{display:"none"}}/> + <label for="icon-button-file" style={{width:"inherit"}}> + <ChangeAvatarDiv > + <span>Alterar</span> + </ChangeAvatarDiv> + </label> </AvatarCircleDiv> </DivFlowHolder> </DivAlterarFoto> diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js index 082ac22f..2628b227 100644 --- a/src/Components/PageProfessorComponents/PartOne.js +++ b/src/Components/PageProfessorComponents/PartOne.js @@ -11,6 +11,7 @@ import Divider from '@material-ui/core/Divider'; import {ButtonCancelar} from './PartTwo.js' import axios from 'axios' import FormInput from '../FormInput.js' +import {simcaqAPIurl} from '../../env' export function sortDict (dict) { const newDict = dict.sort((a, b) => (a.name) > (b.name) ? 1 : -1) @@ -64,8 +65,9 @@ export default function PartOne (props) { const validateINEP = () => { const code = codigoINEP.selected - axios.get(('https://www.simcaq.c3sl.ufpr.br/api/v1/portal_mec_inep?filter=school_cod:' + code) + axios.get((`${simcaqAPIurl}/portal_mec_inep?filter=school_cod:` + code) ).then( (response) => { + console.log('code ', code, ' is valid') handleSubmit() }, (error) => { setCodigoINEP({...codigoINEP, @@ -77,8 +79,8 @@ export default function PartOne (props) { } const handleSubmit = () => { - console.log('handle submit : ', uf.abbreviation, uf.selected, municipio.name, municipio.selected, codigoINEP.value) - props.handleBuscar(uf.abbreviation, uf.selected, municipio.name, municipio.selected, codigoINEP.value) + //console.log('handle submit : ', uf.abbreviation, uf.selected, municipio.name, municipio.selected, codigoINEP.selected) + props.handleBuscar(uf.abbreviation, uf.selected, municipio.name, municipio.selected, codigoINEP.selected) } //on render component, call simcaq api and update ufList diff --git a/src/Components/PageProfessorComponents/PartThree.js b/src/Components/PageProfessorComponents/PartThree.js index 32aa2064..28a88612 100644 --- a/src/Components/PageProfessorComponents/PartThree.js +++ b/src/Components/PageProfessorComponents/PartThree.js @@ -38,11 +38,12 @@ export default function PartThree (props) { return ( <> + {console.log(props)} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> <form style={{textAlign:"start"}}> - <span>CENTRO EDUC INF MEU PEDACINHO DE CHAO</span> + <span>{props.info.school_name}</span> <FormControl required style={{width:"100%"}}> <p>Inserir o telefone da escola:</p> <FormInput diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js index 2a9237e7..185341d6 100644 --- a/src/Components/PageProfessorComponents/PartTwo.js +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -17,31 +17,35 @@ export default function PartTwo (props) { const code = (props.info.inep_code || '') const uf = (props.info.school_uf.id || '') const municipio = (props.info.school_City.id || '') - console.log(code, uf, municipio) + //console.log(code, uf, municipio) + //if user searched by inep code if (code != '') { axios.get((`${simcaqAPIurl}/portal_mec_inep?filter=school_cod:` + code) ).then ((response) => { - console.log(response.data.result) + //console.log(response.data.result) - setSchoolList(response.data.result) + setSchoolList(sortDict(response.data.result)) setDone(true) }, (error) => console.log('erro ao dar get na escola por inep code') )} else if (uf != '' && municipio != '') { - axios.get((`${simcaqAPIurl}/school?filter=state:"` + uf + '",city_name:"' + municipio + '"') + axios.get((`${simcaqAPIurl}/school?filter=state:"` + uf + '",city:"' + municipio + '",year:2017') ). then((response)=> { - console.log(response.data.result) + //console.log(response.data.result) setSchoolList(sortDict(response.data.result)) setDone(true) }, (error) => console.log('erro ao dar get na escola por uf e municipio', code, uf, municipio) )} }, []) + const onClickTable = (city_name, id, name, state_name) => { + props.handleBuscar(city_name, id, name, state_name) + } + return ( <> - {console.log(props)} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> @@ -50,9 +54,9 @@ export default function PartTwo (props) { <InputContainer> <p>Selecione a sua escola:</p> - <CustomizedTables onClick={props.onClickTable} + <CustomizedTables columns={['Codigo INEP', 'Escola', 'UF', 'Cidade']} - rows={schoolList} + rows={schoolList} onClickTable={onClickTable} /> </InputContainer> diff --git a/src/Components/Table.js b/src/Components/Table.js index bdf987ce..1230013c 100644 --- a/src/Components/Table.js +++ b/src/Components/Table.js @@ -41,9 +41,13 @@ const useStyles = makeStyles({ export default function CustomizedTables(props) { const classes = useStyles(); + const onClick = (row) => { + const {city_name, id, name, state_name} = row + props.onClickTable(city_name, id, name, state_name) + } + return ( <> - {console.log(props)} <TableContainer component={Paper}> <Table className={classes.table} aria-label="customized table"> <TableHead> @@ -57,7 +61,9 @@ export default function CustomizedTables(props) { </TableHead> <TableBody> {props.rows.map(row => ( - <StyledTableRow onClick={props.onClick} key={row.id}> + <> + {console.log('console.log(row": ', row)} + <StyledTableRow onClick={() => onClick(row)} key={row.id}> <StyledTableCell component="th" scope="row"> {row.id} </StyledTableCell> @@ -65,6 +71,7 @@ export default function CustomizedTables(props) { <StyledTableCell align="left">{row.state_name}</StyledTableCell> <StyledTableCell align="left">{row.city_name}</StyledTableCell> </StyledTableRow> + </> ))} </TableBody> </Table> diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index 295818ce..b8068873 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -43,8 +43,8 @@ export default function PageProfessor (props) { ) } - const handleBuscar = (ufAbbreviation, ufID, nomeMunicipio, idMunicipio, inep) => { - console.log(ufAbbreviation, ufID, nomeMunicipio, idMunicipio, inep) + const handleBuscarParteUM = (ufAbbreviation, ufID, nomeMunicipio, idMunicipio, inep) => { + //console.log('handleBuscarParteUM: ', ufAbbreviation, ufID, nomeMunicipio, idMunicipio, inep) setRegisterInformation({...registerInformation, school_uf : { id : (ufID ? ufID : ''), @@ -56,6 +56,30 @@ export default function PageProfessor (props) { }, inep_code : (inep ? inep : '') }) + toggleStepper(false, true, false) + } + + const handleBuscarParteDois = (city_name, inep, school_name, state_name) => { + console.log(city_name, inep, school_name, state_name) + console.log((state_name ? state_name : '')) + + const uf_id = registerInformation.school_uf.id + const school_city_id = registerInformation.school_City.id + const prev_state_name = registerInformation.school_uf.abbreviation + const prev_city_name = registerInformation.school_City.name + + setRegisterInformation({...registerInformation, + school_uf : { + id : uf_id, + abbreviation: (state_name ? state_name : prev_state_name) + }, + school_City : { + id : school_city_id, + name : (city_name ? city_name : prev_city_name) + }, + school_name: (school_name ? school_name : ''), + inep_code : (inep ? inep : '') + }) toggleStepper(false, false, true) } @@ -78,19 +102,19 @@ export default function PageProfessor (props) { <Paper elevation={3} style= {{width:"max-content"}}> <div style={{paddingRight:"15px", paddingLeft:"15px"}}> {stepper[0].selected && - <PartOne stepper={stepper} handleBuscar={handleBuscar} + <PartOne stepper={stepper} handleBuscar={handleBuscarParteUM} handleCancelar={handleCancelar} /> } {stepper[1].selected && <PartTwo stepper={stepper} onClickTable={onClickTable} info={registerInformation} goBack={toggleStepper} - handleCancelar={handleCancelar} + handleCancelar={handleCancelar} handleBuscar={handleBuscarParteDois} /> } {stepper[2].selected && <PartThree stepper={stepper} goBack={toggleStepper} - handleCancelar={handleCancelar} + handleCancelar={handleCancelar} info={registerInformation} /> } </div> diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index f6650c98..f4457ff8 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -160,7 +160,7 @@ export default function UserPage (props){ </label> </CoverContainer> <ProfileAvatarDiv onMouseEnter={handleHoverAlterarFoto} onMouseLeave={handleHoverAlterarFoto} onClick={modalControl}> - <img src={state.currentUser.userAvatar} alt = "user avatar" style={{border:"0", verticalAlign:"middle"}}/> + <img src={state.currentUser.userAvatar} alt = "user avatar" style={{height : "inherit", width : "inherit", border:"0", verticalAlign:"middle"}}/> <ChangeAvatarDiv style={ {display : hoverAlterarFoto ? 'flex' : 'none'}}> <span>Alterar Foto</span> </ChangeAvatarDiv> diff --git a/src/Store.js b/src/Store.js index d57a0cde..539aecb6 100644 --- a/src/Store.js +++ b/src/Store.js @@ -22,7 +22,7 @@ export const Store = React.createContext() const initialState = { searchOpen: false, - userIsLoggedIn : false, + userIsLoggedIn : true, userAgreedToPublicationTerms: true, userAgreedToPublicationPermissions: false, modalColaborarPlataformaOpen : false, diff --git a/src/env.js b/src/env.js index 36b6bc8d..1f221ee7 100644 --- a/src/env.js +++ b/src/env.js @@ -21,7 +21,7 @@ var apiDomain = 'https://api.portalmec.c3sl.ufpr.br', apiVersion = 'v1', apiUrl = apiDomain + '/' + apiVersion; -var simcaqAPIDomain = 'https://www.simcaq.c3sl.ufpr.br', +var simcaqAPIDomain = 'https://www.simcaq.c3sl.ufpr.br/api', apiVersion = 'v1', simcaqAPIurl = simcaqAPIDomain + '/' + apiVersion -- GitLab From 2fe641609616900bfe1d52d88dc65394f130fc6e Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Tue, 18 Feb 2020 20:36:59 -0300 Subject: [PATCH 26/29] tela requisicao para ser professor pronta --- package-lock.json | 23 ++- package.json | 1 + src/Components/ModalConfirmarProfessor.js | 157 ++++++++++++++++++ .../PageProfessorComponents/PartOne.js | 3 +- .../PageProfessorComponents/PartThree.js | 16 +- .../PageProfessorComponents/PartTwo.js | 12 +- src/Components/Table.js | 1 - src/Pages/PageProfessor.js | 89 ++++++---- 8 files changed, 254 insertions(+), 48 deletions(-) create mode 100644 src/Components/ModalConfirmarProfessor.js diff --git a/package-lock.json b/package-lock.json index 99817446..4bb79c10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2338,9 +2338,9 @@ "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" }, "@hapi/hoek": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", - "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==" + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" }, "@hapi/joi": { "version": "15.1.1", @@ -12977,6 +12977,15 @@ "camelcase": "^5.0.0" } }, + "react-input-mask": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-input-mask/-/react-input-mask-2.0.4.tgz", + "integrity": "sha512-1hwzMr/aO9tXfiroiVCx5EtKohKwLk/NT8QlJXHQ4N+yJJFyUuMT+zfTpLBwX/lK3PkuMlievIffncpMZ3HGRQ==", + "requires": { + "invariant": "^2.2.4", + "warning": "^4.0.2" + } + }, "react-is": { "version": "16.8.6", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", @@ -15273,6 +15282,14 @@ "makeerror": "1.0.x" } }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", diff --git a/package.json b/package.json index 6786c289..b3585858 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "react-google-login": "^5.0.7", "react-grid-system": "^4.4.11", "react-icons": "^3.8.0", + "react-input-mask": "^2.0.4", "react-recaptcha": "^2.3.10", "react-responsive-carousel": "^3.1.51", "react-router-dom": "^5.1.2", diff --git a/src/Components/ModalConfirmarProfessor.js b/src/Components/ModalConfirmarProfessor.js new file mode 100644 index 00000000..1a07d031 --- /dev/null +++ b/src/Components/ModalConfirmarProfessor.js @@ -0,0 +1,157 @@ +/*Copyright (C) 2019 Centro de Computacao Cientifica e Software Livre +Departamento de Informatica - Universidade Federal do Parana + +This file is part of Plataforma Integrada MEC. + +Plataforma Integrada MEC is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Plataforma Integrada MEC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ + +import React, {useContext, useState} from 'react'; +import { Button } from '@material-ui/core'; +import Modal from '@material-ui/core/Modal'; +import Backdrop from '@material-ui/core/Backdrop'; +import Fade from '@material-ui/core/Fade'; +import styled from 'styled-components' +import {Store} from '../Store.js' +import axios from 'axios' +import {apiUrl} from '../env'; +import CloseIcon from '@material-ui/icons/Close'; + +const StyledModal = styled(Modal)` + display : flex; + align-items: center; + justify-content : center; + text-align : center; + padding : 10px !important; +` + +export default function ModalConfirmarProfessor (props){ + const {state, dispatch} = useContext(Store) + return ( + + <StyledModal + aria-labelledby="transition-modal-title" + aria-describedby="transition-modal-description" + open={props.open} + animation={true} + centered={true} + onClose={props.handleClose} + closeAfterTransition + BackdropComponent={Backdrop} + BackdropProps={{ + timeout: 500, + }} + > + <Fade in={props.open} style={{ transitionDelay :"0.4ms"}}> + <> + <ConfirmarProfessorComponent> + <HeaderDiv> + <span style={{width:"32px"}}/> + <h2>Confirme os Dados</h2> + <Button style={{marginRight:"-8px", color:"000"}} onClick={props.handleClose}> + <CloseIcon style={{color:"#666", cursor:"pointer", verticalAlign:"middle"}}/> + </Button> + </HeaderDiv> + + <DialogContentDiv> + <ContainerCentralized> + <p><strong>MunicÃpio - UF:</strong> {props.info.school_uf.abbreviation} - {props.info.school_City.name} </p> + <p><strong>Escola:</strong> {props.info.school_name}</p> + <p><strong>Telefone da Escola:</strong> {props.info.school_phone}</p> + <p><strong>Seu CPF:</strong> {props.info.teacher_cpf}</p> + <ButtonsDiv> + <ConfirmButton onClick ={props.confirmar}>CONFIRMAR</ConfirmButton> + <CancelButton onClick = {props.cancelar}>CANCELAR</CancelButton> + </ButtonsDiv> + </ContainerCentralized> + </DialogContentDiv> + </ConfirmarProfessorComponent> + </> + </Fade> + </StyledModal> + + ) +} + +const CancelButton = styled(Button)` + width : 140px !important; + color :#666 !important; + font-family : Roboto,sans-serif !important; + font-size : 14px !important; + font-weight : 500 !important; + height : 36px !important; + border-radius : 3px !important; + padding-left : 16px !important; + padding-right : 16px !important; + outline : none !important; + margin : 6px 8px !important; + display : inline-block !important; +` + +const ConfirmButton = styled(Button)` + width : 140px !important; + background-color : #00bcd4 !important; + color : #fff !important; + font-family : Roboto,sans-serif !important; + font-size : 14px !important; + font-weight : 500 !important; + height : 36px !important; + border-radius : 3px !important; + padding-left : 32px !important; + padding-right : 32px !important; + outline : none !important; + margin : 6px 8px !important; + display : inline-block !important; +` + +const ButtonsDiv = styled.div` + margin-top : 10px; + display : flex; + justify-content : center; +` + + +const ContainerCentralized = styled.div` + margin-top : 0; + padding-left : 20px; + padding-right : 30px; + + p { + font-size : 15px; + margin : 0 0 10px; + } +` + +const DialogContentDiv = styled.div` + padding : 20px 30px; + overflow : visible !important; +` + +const HeaderDiv = styled.div` + text-align : center; + display : flex; + justify-content : space-between; + padding : 10px 26px 0 26px; + + h2 { + font-size : 26px; + font-weight : lighter; + } +` + +const ConfirmarProfessorComponent = styled.div` + min-width : 600px; + border-radius : 4px; + background-color : #fff; + color : #666; +` diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js index 2628b227..1602ed72 100644 --- a/src/Components/PageProfessorComponents/PartOne.js +++ b/src/Components/PageProfessorComponents/PartOne.js @@ -80,7 +80,7 @@ export default function PartOne (props) { const handleSubmit = () => { //console.log('handle submit : ', uf.abbreviation, uf.selected, municipio.name, municipio.selected, codigoINEP.selected) - props.handleBuscar(uf.abbreviation, uf.selected, municipio.name, municipio.selected, codigoINEP.selected) + props.handleBuscar(uf.name, uf.selected, municipio.name, municipio.selected, codigoINEP.selected) } //on render component, call simcaq api and update ufList @@ -88,6 +88,7 @@ export default function PartOne (props) { axios.get(('https://simcaq.c3sl.ufpr.br/api/v1/state') ).then( (response) => { handleSetStates(sortDict(response.data.result)) + console.log(response.data.result) }, (error) => console.log('erro acessando api do simcaq (estados)')) }, []) diff --git a/src/Components/PageProfessorComponents/PartThree.js b/src/Components/PageProfessorComponents/PartThree.js index 28a88612..d5dcdbfc 100644 --- a/src/Components/PageProfessorComponents/PartThree.js +++ b/src/Components/PageProfessorComponents/PartThree.js @@ -18,7 +18,7 @@ export default function PartThree (props) { const handleChangePhoneNumber = (event) => { const input = event.target.value.replace(/\D/,'') setPhoneNumber({...phoneNumber, - flagInvalid : (input.length > 9 ? true : false), + flagInvalid : (input.length < 9 ? true : false), number : (input.length > 9 ? phoneNumber.number : input), }) } @@ -30,20 +30,25 @@ export default function PartThree (props) { const handleChangeCpf = (event) => { const input = event.target.value.replace(/\D/,'') setCpf({...cpf, - flagInvalid : (input.length > 11 ? true : false), + flagInvalid : (input.length < 11 ? true : false), number : (input.length > 11 ? cpf.number : input), }) } + const handleSubmit = () => { + const submit_phone = phoneNumber.number + const submit_cpf = cpf.number + + props.handleSubmit(submit_phone, submit_cpf) + } return ( <> - {console.log(props)} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> <form style={{textAlign:"start"}}> - <span>{props.info.school_name}</span> + <span>CENTRO EDUC INF MEU PEDACINHO DE CHAO</span> <FormControl required style={{width:"100%"}}> <p>Inserir o telefone da escola:</p> <FormInput @@ -66,12 +71,13 @@ export default function PartThree (props) { value={cpf.number} handleChange={handleChangeCpf} mask={'999.999.999-99'} + error={cpf.flagInvalid} > </FormInput> </FormControl> <div style={{display:"flex", justifyContent:"space-evenly",paddingTop:"10px", paddingBottom:"10px"}}> <div style={{display:"flex", justifyContent:"center"}}> - <ButtonConfirmar onClick={props.handleBuscar}>BUSCAR</ButtonConfirmar> + <ButtonConfirmar onClick={( (cpf.flagInvalid || phoneNumber.flagInvalid) ? () => {console.log('cpf.flagInvalid: ', cpf.flagInvalid, 'phoneNumber.flagInvalid: ', phoneNumber.flagInvalid)} : handleSubmit)}>BUSCAR</ButtonConfirmar> </div> <div style={{display:"flex", justifyContent:"center"}}> <ButtonGrey onClick={() => props.goBack(false, true, false)}>VOLTAR</ButtonGrey> diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js index 185341d6..8dd0d5b3 100644 --- a/src/Components/PageProfessorComponents/PartTwo.js +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -10,7 +10,6 @@ import {simcaqAPIurl} from '../../env' import {sortDict} from './PartOne.js' export default function PartTwo (props) { - const [htttpRequestDone, setDone] = useState(false) const [schoolList, setSchoolList] = useState([]) useEffect ( () => { @@ -20,22 +19,17 @@ export default function PartTwo (props) { //console.log(code, uf, municipio) //if user searched by inep code - if (code != '') { + if (code !== '') { axios.get((`${simcaqAPIurl}/portal_mec_inep?filter=school_cod:` + code) ).then ((response) => { - //console.log(response.data.result) - setSchoolList(sortDict(response.data.result)) - setDone(true) - }, (error) => console.log('erro ao dar get na escola por inep code') )} - else if (uf != '' && municipio != '') { + else if (uf !== '' && municipio !== '') { axios.get((`${simcaqAPIurl}/school?filter=state:"` + uf + '",city:"' + municipio + '",year:2017') - ). then((response)=> { + ).then((response)=> { //console.log(response.data.result) setSchoolList(sortDict(response.data.result)) - setDone(true) }, (error) => console.log('erro ao dar get na escola por uf e municipio', code, uf, municipio) )} }, []) diff --git a/src/Components/Table.js b/src/Components/Table.js index 1230013c..295b1bb1 100644 --- a/src/Components/Table.js +++ b/src/Components/Table.js @@ -62,7 +62,6 @@ export default function CustomizedTables(props) { <TableBody> {props.rows.map(row => ( <> - {console.log('console.log(row": ', row)} <StyledTableRow onClick={() => onClick(row)} key={row.id}> <StyledTableCell component="th" scope="row"> {row.id} diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index b8068873..6dc177da 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -5,9 +5,17 @@ import Paper from '@material-ui/core/Paper'; import PartOne from '../Components/PageProfessorComponents/PartOne.js' import PartTwo from '../Components/PageProfessorComponents/PartTwo.js' import PartThree from '../Components/PageProfessorComponents/PartThree.js' +import ModalConfirmarProfessor from '../Components/ModalConfirmarProfessor.js' +import axios from 'axios' +import {apiUrl} from '../env'; export default function PageProfessor (props) { const {state, dispatch} = useContext(Store) + const [modalOpen, toggleModal] = useState(false) + + const handleModal = () => { + toggleModal(!modalOpen) ; + } const redirect = () => { props.history.push('/termos-publicar-recurso') @@ -60,9 +68,6 @@ export default function PageProfessor (props) { } const handleBuscarParteDois = (city_name, inep, school_name, state_name) => { - console.log(city_name, inep, school_name, state_name) - console.log((state_name ? state_name : '')) - const uf_id = registerInformation.school_uf.id const school_city_id = registerInformation.school_City.id const prev_state_name = registerInformation.school_uf.abbreviation @@ -83,13 +88,32 @@ export default function PageProfessor (props) { toggleStepper(false, false, true) } + const handleSubmit = (phone, cpf) => { + setRegisterInformation({...registerInformation, + teacher_cpf: (phone ? phone : ''), + school_phone: (cpf ? cpf : ''), + }) + handleModal(); + } + const handleCancelar = () => { props.history.push('/perfil/atualizacoes') } - const onClickTable = () => { - toggleStepper(false, false, true) - } + const handleFinalSubmit = () => { + //adicionar headers de accessToken + axios.post( (`${apiUrl}/users/teacher_request`), { + 'city' : registerInformation.school_City.name, + 'cpf' : registerInformation.teacher_cpf, + 'inep_id' : registerInformation.inep_code, + 'phone' : registerInformation.school_phone, + 'school' : registerInformation.school_name, + 'uf' : registerInformation.school_uf.abbreviation + }) + .then( (response) => { + console.log(response.data) + }, (error) => console.log('deu erro') + )} return ( <> @@ -97,30 +121,37 @@ export default function PageProfessor (props) { state.userAgreedToPublicationTerms? ( [ - <div style={{backgroundColor:"#f4f4f4", color:"#666"}}> - <div style={{display: "flex", justifyContent:"center", paddingTop:"5vh", paddingBottom:"5vh"}}> - <Paper elevation={3} style= {{width:"max-content"}}> - <div style={{paddingRight:"15px", paddingLeft:"15px"}}> - {stepper[0].selected && - <PartOne stepper={stepper} handleBuscar={handleBuscarParteUM} - handleCancelar={handleCancelar} - /> - } - {stepper[1].selected && - <PartTwo stepper={stepper} onClickTable={onClickTable} - info={registerInformation} goBack={toggleStepper} - handleCancelar={handleCancelar} handleBuscar={handleBuscarParteDois} - /> - } - {stepper[2].selected && - <PartThree stepper={stepper} goBack={toggleStepper} - handleCancelar={handleCancelar} info={registerInformation} - /> - } - </div> - </Paper> + <> + <ModalConfirmarProfessor open={modalOpen} handleClose={handleModal} + info={registerInformation} confirmar = {() => {handleFinalSubmit()}} + cancelar = {() => {toggleModal()}} + /> + <div style={{backgroundColor:"#f4f4f4", color:"#666"}}> + <div style={{display: "flex", justifyContent:"center", paddingTop:"5vh", paddingBottom:"5vh"}}> + <Paper elevation={3} style= {{width:"max-content"}}> + <div style={{paddingRight:"15px", paddingLeft:"15px"}}> + {stepper[0].selected && + <PartOne stepper={stepper} handleBuscar={handleBuscarParteUM} + handleCancelar={handleCancelar} + /> + } + {stepper[1].selected && + <PartTwo stepper={stepper} + info={registerInformation} goBack={toggleStepper} + handleCancelar={handleCancelar} handleBuscar={handleBuscarParteDois} + /> + } + {stepper[2].selected && + <PartThree stepper={stepper} goBack={toggleStepper} + handleCancelar={handleCancelar} info={registerInformation} + handleSubmit={handleSubmit} + /> + } + </div> + </Paper> + </div> </div> - </div> + </> ] ) : -- GitLab From 42bbc1732b26d3be8089b46a5c5f95be3a57f171 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Wed, 19 Feb 2020 18:10:43 -0300 Subject: [PATCH 27/29] arrumando erros da pagina de professor, quase acabando --- src/Components/ModalConfirmarProfessor.js | 2 +- .../PageProfessorComponents/PartOne.js | 56 +++++++++++-------- .../PageProfessorComponents/PartTwo.js | 1 + src/Components/TabPanels/TabPanelRede.js | 2 +- src/Components/Table.js | 1 + src/Pages/PageProfessor.js | 30 ++++------ src/Pages/UserPage.js | 4 +- src/Store.js | 2 +- 8 files changed, 51 insertions(+), 47 deletions(-) diff --git a/src/Components/ModalConfirmarProfessor.js b/src/Components/ModalConfirmarProfessor.js index 1a07d031..361a391c 100644 --- a/src/Components/ModalConfirmarProfessor.js +++ b/src/Components/ModalConfirmarProfessor.js @@ -65,7 +65,7 @@ export default function ModalConfirmarProfessor (props){ <DialogContentDiv> <ContainerCentralized> - <p><strong>MunicÃpio - UF:</strong> {props.info.school_uf.abbreviation} - {props.info.school_City.name} </p> + <p><strong>MunicÃpio - UF:</strong> {props.info.school_uf.abbreviation} - {props.info.school_city.name} </p> <p><strong>Escola:</strong> {props.info.school_name}</p> <p><strong>Telefone da Escola:</strong> {props.info.school_phone}</p> <p><strong>Seu CPF:</strong> {props.info.teacher_cpf}</p> diff --git a/src/Components/PageProfessorComponents/PartOne.js b/src/Components/PageProfessorComponents/PartOne.js index 1602ed72..6fe3e70c 100644 --- a/src/Components/PageProfessorComponents/PartOne.js +++ b/src/Components/PageProfessorComponents/PartOne.js @@ -11,7 +11,6 @@ import Divider from '@material-ui/core/Divider'; import {ButtonCancelar} from './PartTwo.js' import axios from 'axios' import FormInput from '../FormInput.js' -import {simcaqAPIurl} from '../../env' export function sortDict (dict) { const newDict = dict.sort((a, b) => (a.name) > (b.name) ? 1 : -1) @@ -19,6 +18,18 @@ export function sortDict (dict) { } +const extractUFInfo = (ufs, name) => { + var id = '' + var abbreviation = '' + for (const obj of ufs) { + if (obj.name === name) { + id = obj.id + abbreviation = obj.abbreviation + } + } + return {id : id, abbreviation : abbreviation} +} + export default function PartOne (props) { //stores initial get response (list of states, sorted alphabetically) const [ufList, setStates] = useState([]) @@ -32,7 +43,6 @@ export default function PartOne (props) { const [uf, setUF] = useState( { algumFoiEscolhido : false, - selected : '', //id name : '', abbreviation : '' } @@ -42,7 +52,6 @@ export default function PartOne (props) { const [municipio, setMunicipio] = useState( { algumFoiEscolhido : false, - selected : '', name : '' } ) @@ -50,62 +59,62 @@ export default function PartOne (props) { const [codigoINEP, setCodigoINEP] = useState( { codigoInvalido : false, - selected : '' + value : '' } ) + const handleCodigoINEP = (event) => { const code = event.target.value setCodigoINEP({...codigoINEP, codigoInvalido : false, - selected : code + value : code }) } const validateINEP = () => { - const code = codigoINEP.selected + const code = codigoINEP.value - axios.get((`${simcaqAPIurl}/portal_mec_inep?filter=school_cod:` + code) + axios.get(('https://www.simcaq.c3sl.ufpr.br/api/v1/portal_mec_inep?filter=school_cod:' + code) ).then( (response) => { - console.log('code ', code, ' is valid') handleSubmit() }, (error) => { setCodigoINEP({...codigoINEP, codigoInvalido : true, - selected : '' + value : '' }) } ) } const handleSubmit = () => { - //console.log('handle submit : ', uf.abbreviation, uf.selected, municipio.name, municipio.selected, codigoINEP.selected) - props.handleBuscar(uf.name, uf.selected, municipio.name, municipio.selected, codigoINEP.selected) + console.log('handle submit : ', uf.abbreviation, uf.name, municipio.name, codigoINEP.value) + props.handleBuscar(uf.abbreviation, uf.name, municipio.name, codigoINEP.value) } //on render component, call simcaq api and update ufList useEffect ( () => { axios.get(('https://simcaq.c3sl.ufpr.br/api/v1/state') ).then( (response) => { + console.log(sortDict(response.data.result)) handleSetStates(sortDict(response.data.result)) - console.log(response.data.result) }, (error) => console.log('erro acessando api do simcaq (estados)')) }, []) const handleChooseUF = (event) => { - const ufID = event.target.value.ufID - const ufAbbreviation = event.target.value.abbreviation - const ufName = event.target.value.name + const ufName = event.target.value + const {id, abbreviation} = extractUFInfo(ufList, ufName) + console.log(id, abbreviation) + setUF({...uf, algumFoiEscolhido : true, - selected : ufID, name : ufName, - abbreviation : ufAbbreviation + abbreviation : abbreviation } ) - axios.get(('https://simcaq.c3sl.ufpr.br/api/v1/city?filter=state:' + ufID) + axios.get(('https://simcaq.c3sl.ufpr.br/api/v1/city?filter=state:' + id) ).then( (response) => { handleSetMunicipioList(sortDict(response.data.result)) }, (error) => console.log('erro acessando api do simcaq (cidades)') @@ -113,11 +122,10 @@ export default function PartOne (props) { } const handleChooseCity = (event) => { - const cityID = event.target.value.id - const cityName = event.target.value.name + const cityName = event.target.value + console.log(cityName) setMunicipio({...municipio, algumFoiEscolhido : true, - selected : cityID, name : cityName } ) @@ -141,7 +149,7 @@ export default function PartOne (props) { > { ufList.map( (ufs)=> - <MenuItem key={ufs.id} value={{abbreviation : ufs.abbreviation, ufID : ufs.id, name : ufs.name}}>{ufs.name}</MenuItem> + <MenuItem key={ufs.name} value={ufs.name}>{ufs.name}</MenuItem> ) } </Select> @@ -156,7 +164,7 @@ export default function PartOne (props) { > { municipioList.map( (cidades)=> - <MenuItem value={{id : cidades.id, name : cidades.name}}>{cidades.name}</MenuItem> + <MenuItem key={cidades.name} value={cidades.name}>{cidades.name}</MenuItem> ) } </Select> @@ -182,7 +190,7 @@ export default function PartOne (props) { <FormInput inputType={'text'} name={'Código INEP'} - value={codigoINEP.selected} + value={codigoINEP.value} handleChange = {handleCodigoINEP} placeholder={'Código INEP'} required={true} diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js index 8dd0d5b3..64113b9d 100644 --- a/src/Components/PageProfessorComponents/PartTwo.js +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -40,6 +40,7 @@ export default function PartTwo (props) { return ( <> + {console.log(props)} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> diff --git a/src/Components/TabPanels/TabPanelRede.js b/src/Components/TabPanels/TabPanelRede.js index 2eb21b00..d31f2bcf 100644 --- a/src/Components/TabPanels/TabPanelRede.js +++ b/src/Components/TabPanels/TabPanelRede.js @@ -17,7 +17,7 @@ export default function TabPanelRede (props) { const [followingListLength, setFollowingLength] = useState(0) const [followersList, setFollowers] = useState([]) - const [followersListLength, setFollowersLength] = useState(1) + const [followersListLength, setFollowersLength] = useState(0) useEffect( () => { axios.all([ diff --git a/src/Components/Table.js b/src/Components/Table.js index 295b1bb1..773a5fff 100644 --- a/src/Components/Table.js +++ b/src/Components/Table.js @@ -62,6 +62,7 @@ export default function CustomizedTables(props) { <TableBody> {props.rows.map(row => ( <> + {console.log(row)} <StyledTableRow onClick={() => onClick(row)} key={row.id}> <StyledTableCell component="th" scope="row"> {row.id} diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index 6dc177da..6660e976 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -26,13 +26,10 @@ export default function PageProfessor (props) { teacher_cpf: '', school_phone: '', school_name: '', - school_City : { - id : '', - name : '' - }, + school_city : '', school_uf : { - id : '', - abbreviation : '' + abbreviation : '', + name : '' }, inep_code: '' } @@ -51,17 +48,14 @@ export default function PageProfessor (props) { ) } - const handleBuscarParteUM = (ufAbbreviation, ufID, nomeMunicipio, idMunicipio, inep) => { - //console.log('handleBuscarParteUM: ', ufAbbreviation, ufID, nomeMunicipio, idMunicipio, inep) + const handleBuscarParteUM = (ufAbbreviation, ufName, nomeMunicipio, inep) => { + console.log('handleBuscarParteUM: ', ufAbbreviation, ufName, nomeMunicipio, inep) setRegisterInformation({...registerInformation, school_uf : { - id : (ufID ? ufID : ''), - abbreviation: (ufAbbreviation ? ufAbbreviation : '') - }, - school_City : { - id : (idMunicipio ? idMunicipio : ''), - name : (nomeMunicipio ? nomeMunicipio : '') + abbreviation: (ufAbbreviation ? ufAbbreviation : ''), + name : (ufName ? ufName : '') }, + school_city : (nomeMunicipio ? nomeMunicipio : ''), inep_code : (inep ? inep : '') }) toggleStepper(false, true, false) @@ -69,16 +63,16 @@ export default function PageProfessor (props) { const handleBuscarParteDois = (city_name, inep, school_name, state_name) => { const uf_id = registerInformation.school_uf.id - const school_city_id = registerInformation.school_City.id + const school_city_id = registerInformation.school_city.id const prev_state_name = registerInformation.school_uf.abbreviation - const prev_city_name = registerInformation.school_City.name + const prev_city_name = registerInformation.school_city.name setRegisterInformation({...registerInformation, school_uf : { id : uf_id, abbreviation: (state_name ? state_name : prev_state_name) }, - school_City : { + school_city : { id : school_city_id, name : (city_name ? city_name : prev_city_name) }, @@ -103,7 +97,7 @@ export default function PageProfessor (props) { const handleFinalSubmit = () => { //adicionar headers de accessToken axios.post( (`${apiUrl}/users/teacher_request`), { - 'city' : registerInformation.school_City.name, + 'city' : registerInformation.school_city.name, 'cpf' : registerInformation.teacher_cpf, 'inep_id' : registerInformation.inep_code, 'phone' : registerInformation.school_phone, diff --git a/src/Pages/UserPage.js b/src/Pages/UserPage.js index f4457ff8..420912ac 100644 --- a/src/Pages/UserPage.js +++ b/src/Pages/UserPage.js @@ -50,8 +50,8 @@ export default function UserPage (props){ const [tabs, setTabs] = useState([ 'Atividades', 'Meus Recursos', 'Favoritos', 'Coleções', 'Rede' ]) - const user = localStorage.getItem('@portalmec/username') - const id = localStorage.getItem('@portalmec/id') + const user = sessionStorage.getItem('@portalmec/username') + const id = sessionStorage.getItem('@portalmec/id') const [modalOpen, handleModal] = useState(false) const config = { diff --git a/src/Store.js b/src/Store.js index 539aecb6..d57a0cde 100644 --- a/src/Store.js +++ b/src/Store.js @@ -22,7 +22,7 @@ export const Store = React.createContext() const initialState = { searchOpen: false, - userIsLoggedIn : true, + userIsLoggedIn : false, userAgreedToPublicationTerms: true, userAgreedToPublicationPermissions: false, modalColaborarPlataformaOpen : false, -- GitLab From abb0fbbb80e9b4682779ac0caf5e00f37be5a505 Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Thu, 20 Feb 2020 11:59:57 -0300 Subject: [PATCH 28/29] pagina de requisicao professor quase pronta --- src/Components/ModalConfirmarProfessor.js | 2 +- .../PageProfessorComponents/PartThree.js | 1 + .../PageProfessorComponents/PartTwo.js | 6 +-- src/Pages/PageProfessor.js | 46 ++++++++++--------- src/env.js | 2 +- 5 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/Components/ModalConfirmarProfessor.js b/src/Components/ModalConfirmarProfessor.js index 361a391c..3cbb4e79 100644 --- a/src/Components/ModalConfirmarProfessor.js +++ b/src/Components/ModalConfirmarProfessor.js @@ -65,7 +65,7 @@ export default function ModalConfirmarProfessor (props){ <DialogContentDiv> <ContainerCentralized> - <p><strong>MunicÃpio - UF:</strong> {props.info.school_uf.abbreviation} - {props.info.school_city.name} </p> + <p><strong>MunicÃpio - UF:</strong> {props.info.school_uf.name} - {props.info.school_city} </p> <p><strong>Escola:</strong> {props.info.school_name}</p> <p><strong>Telefone da Escola:</strong> {props.info.school_phone}</p> <p><strong>Seu CPF:</strong> {props.info.teacher_cpf}</p> diff --git a/src/Components/PageProfessorComponents/PartThree.js b/src/Components/PageProfessorComponents/PartThree.js index d5dcdbfc..2ee7c262 100644 --- a/src/Components/PageProfessorComponents/PartThree.js +++ b/src/Components/PageProfessorComponents/PartThree.js @@ -44,6 +44,7 @@ export default function PartThree (props) { return ( <> + {console.log(props)} <Content> <h4>Vamos localizar o seu cadastro:</h4> <Stepper items={props.stepper}/> diff --git a/src/Components/PageProfessorComponents/PartTwo.js b/src/Components/PageProfessorComponents/PartTwo.js index 64113b9d..a4e68d4a 100644 --- a/src/Components/PageProfessorComponents/PartTwo.js +++ b/src/Components/PageProfessorComponents/PartTwo.js @@ -14,8 +14,8 @@ export default function PartTwo (props) { useEffect ( () => { const code = (props.info.inep_code || '') - const uf = (props.info.school_uf.id || '') - const municipio = (props.info.school_City.id || '') + const uf = (props.info.school_uf.abbreviation || '') + const municipio = (props.info.school_city || '') //console.log(code, uf, municipio) //if user searched by inep code @@ -26,7 +26,7 @@ export default function PartTwo (props) { }, (error) => console.log('erro ao dar get na escola por inep code') )} else if (uf !== '' && municipio !== '') { - axios.get((`${simcaqAPIurl}/school?filter=state:"` + uf + '",city:"' + municipio + '",year:2017') + axios.get((`${simcaqAPIurl}/school?search=state_name:"` + uf + '",city_name:"' + municipio + '"&filter=year:2017') ).then((response)=> { //console.log(response.data.result) setSchoolList(sortDict(response.data.result)) diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index 6660e976..e729721e 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -48,8 +48,8 @@ export default function PageProfessor (props) { ) } - const handleBuscarParteUM = (ufAbbreviation, ufName, nomeMunicipio, inep) => { - console.log('handleBuscarParteUM: ', ufAbbreviation, ufName, nomeMunicipio, inep) + const handleBuscarParteUm = (ufAbbreviation, ufName, nomeMunicipio, inep) => { + console.log('handleBuscarParteUm: ', ufAbbreviation, ufName, nomeMunicipio, inep) setRegisterInformation({...registerInformation, school_uf : { abbreviation: (ufAbbreviation ? ufAbbreviation : ''), @@ -62,27 +62,23 @@ export default function PageProfessor (props) { } const handleBuscarParteDois = (city_name, inep, school_name, state_name) => { - const uf_id = registerInformation.school_uf.id - const school_city_id = registerInformation.school_city.id - const prev_state_name = registerInformation.school_uf.abbreviation + const uf_abbreviation = registerInformation.school_uf.abbreviation + const prev_state_name = registerInformation.school_uf.name const prev_city_name = registerInformation.school_city.name setRegisterInformation({...registerInformation, school_uf : { - id : uf_id, - abbreviation: (state_name ? state_name : prev_state_name) - }, - school_city : { - id : school_city_id, - name : (city_name ? city_name : prev_city_name) + abbreviation : uf_abbreviation, + name: (state_name ? state_name : prev_state_name) }, + school_city :(city_name ? city_name : prev_city_name), school_name: (school_name ? school_name : ''), inep_code : (inep ? inep : '') }) toggleStepper(false, false, true) } - const handleSubmit = (phone, cpf) => { + const handleParteTres = (phone, cpf) => { setRegisterInformation({...registerInformation, teacher_cpf: (phone ? phone : ''), school_phone: (cpf ? cpf : ''), @@ -96,14 +92,20 @@ export default function PageProfessor (props) { const handleFinalSubmit = () => { //adicionar headers de accessToken - axios.post( (`${apiUrl}/users/teacher_request`), { - 'city' : registerInformation.school_city.name, - 'cpf' : registerInformation.teacher_cpf, - 'inep_id' : registerInformation.inep_code, - 'phone' : registerInformation.school_phone, - 'school' : registerInformation.school_name, - 'uf' : registerInformation.school_uf.abbreviation - }) + axios.post( `${apiUrl}/users/teacher_request`, { + city : registerInformation.school_city.name, + cpf : registerInformation.teacher_cpf, + inep_id : registerInformation.inep_code, + phone : registerInformation.school_phone, + school : registerInformation.school_name, + uf : registerInformation.school_uf.name + }, + { headers : { + 'Access-Token': sessionStorage.getItem('@portalmec/accessToken'), + 'Client': sessionStorage.getItem('@portalmec/clientToken'), + 'Uid': sessionStorage.getItem('@portalmec/uid') + }} + ) .then( (response) => { console.log(response.data) }, (error) => console.log('deu erro') @@ -125,7 +127,7 @@ export default function PageProfessor (props) { <Paper elevation={3} style= {{width:"max-content"}}> <div style={{paddingRight:"15px", paddingLeft:"15px"}}> {stepper[0].selected && - <PartOne stepper={stepper} handleBuscar={handleBuscarParteUM} + <PartOne stepper={stepper} handleBuscar={handleBuscarParteUm} handleCancelar={handleCancelar} /> } @@ -138,7 +140,7 @@ export default function PageProfessor (props) { {stepper[2].selected && <PartThree stepper={stepper} goBack={toggleStepper} handleCancelar={handleCancelar} info={registerInformation} - handleSubmit={handleSubmit} + handleSubmit={handleParteTres} /> } </div> diff --git a/src/env.js b/src/env.js index 1f221ee7..2450da0f 100644 --- a/src/env.js +++ b/src/env.js @@ -17,7 +17,7 @@ You should have received a copy of the GNU Affero General Public License along with Plataforma Integrada MEC. If not, see <http://www.gnu.org/licenses/>.*/ -var apiDomain = 'https://api.portalmec.c3sl.ufpr.br', +var apiDomain = 'https://api.portalmectest.c3sl.ufpr.br', apiVersion = 'v1', apiUrl = apiDomain + '/' + apiVersion; -- GitLab From 5096a364dc53c0be3086afedc63a2ea2aa63029d Mon Sep 17 00:00:00 2001 From: Lucas Schoenfelder <les17@inf.ufpr.br> Date: Fri, 21 Feb 2020 09:56:01 -0300 Subject: [PATCH 29/29] pagina do professor pronta --- .../ModalConfirmarProfessor.js | 4 +- .../SuccessfulRequest.js | 56 ++++++++++++++++++ src/Pages/PageProfessor.js | 23 ++++--- src/img/comentarios.png | Bin 0 -> 73553 bytes 4 files changed, 72 insertions(+), 11 deletions(-) rename src/Components/{ => PageProfessorComponents}/ModalConfirmarProfessor.js (97%) create mode 100644 src/Components/PageProfessorComponents/SuccessfulRequest.js create mode 100644 src/img/comentarios.png diff --git a/src/Components/ModalConfirmarProfessor.js b/src/Components/PageProfessorComponents/ModalConfirmarProfessor.js similarity index 97% rename from src/Components/ModalConfirmarProfessor.js rename to src/Components/PageProfessorComponents/ModalConfirmarProfessor.js index 3cbb4e79..05d49f3b 100644 --- a/src/Components/ModalConfirmarProfessor.js +++ b/src/Components/PageProfessorComponents/ModalConfirmarProfessor.js @@ -22,9 +22,8 @@ import Modal from '@material-ui/core/Modal'; import Backdrop from '@material-ui/core/Backdrop'; import Fade from '@material-ui/core/Fade'; import styled from 'styled-components' -import {Store} from '../Store.js' import axios from 'axios' -import {apiUrl} from '../env'; +import {apiUrl} from '../../env'; import CloseIcon from '@material-ui/icons/Close'; const StyledModal = styled(Modal)` @@ -36,7 +35,6 @@ const StyledModal = styled(Modal)` ` export default function ModalConfirmarProfessor (props){ - const {state, dispatch} = useContext(Store) return ( <StyledModal diff --git a/src/Components/PageProfessorComponents/SuccessfulRequest.js b/src/Components/PageProfessorComponents/SuccessfulRequest.js new file mode 100644 index 00000000..0e478b74 --- /dev/null +++ b/src/Components/PageProfessorComponents/SuccessfulRequest.js @@ -0,0 +1,56 @@ +import React from 'react' +import styled from 'styled-components' +import {ButtonConfirmar} from './PartOne.js' +import Comentarios from '../../img/comentarios.png' + +export default function SuccessfulRequest (props) { + const h4Text = 'Obrigado por fazer parte dessa rede!' + const pText = 'Em breve você poderá publicar os seus próprios reursos educacionais digitais. O MEC analisará as suas informações junto a escola e você será avisada(o) aqui na plataforma e em seu email: ' + + return ( + <div style={{maxWidth:"575px", padding : "0 36px"}}> + <div style={{display : "flex", flexDirection : "column"}}> + <StyledH4>{h4Text}</StyledH4> + <TextDiv> + <p>{pText} <b>{props.email}</b>.</p> + </TextDiv> + <div style={{display : 'flex', flexDirection : 'row', justifyContent : "center"}}> + <ButtonConfirmar>VOLTAR À PAGINA INICIAL</ButtonConfirmar> + </div> + <ImageDiv/> + </div> + </div> + ) +} + +const ImageDiv = styled.div` + height : 500px; + background-image : url(${Comentarios}); + background-repeat : no-repeat; + background-position : center center; +` + +const TextDiv = styled.div` + display : flex; + flex-direction : row; + + p { + text-align : justify; + font-family: Roboto; + font-style : normal; + font-weight : 400; + line-height : 21px; + font-size : 15px; + margin : 0 0 10px; + } +` + +const StyledH4 = styled.h4` + font-family : Roboto; + font-style : normal; + font-weight : 300; + line-height : 36px; + font-size : 26px; + margin-top : 20px; + margin-bottom : 20px; +` diff --git a/src/Pages/PageProfessor.js b/src/Pages/PageProfessor.js index e729721e..e177ade2 100644 --- a/src/Pages/PageProfessor.js +++ b/src/Pages/PageProfessor.js @@ -5,14 +5,14 @@ import Paper from '@material-ui/core/Paper'; import PartOne from '../Components/PageProfessorComponents/PartOne.js' import PartTwo from '../Components/PageProfessorComponents/PartTwo.js' import PartThree from '../Components/PageProfessorComponents/PartThree.js' -import ModalConfirmarProfessor from '../Components/ModalConfirmarProfessor.js' +import SuccessfulRequest from '../Components/PageProfessorComponents/SuccessfulRequest.js' +import ModalConfirmarProfessor from '../Components/PageProfessorComponents/ModalConfirmarProfessor.js' import axios from 'axios' import {apiUrl} from '../env'; export default function PageProfessor (props) { const {state, dispatch} = useContext(Store) const [modalOpen, toggleModal] = useState(false) - const handleModal = () => { toggleModal(!modalOpen) ; } @@ -36,14 +36,15 @@ export default function PageProfessor (props) { ) const [stepper, handleStepper] = useState( - [ {value : '1', selected : true}, {value : '2', selected : false}, {value : '3', selected : false} ] + [ {value : '1', selected : false}, {value : '2', selected : false}, {value : '3', selected : false}, {value : '4', selected : true}] ) - const toggleStepper = (selected1, selected2, selected3) => { + const toggleStepper = (selected1, selected2, selected3, selected4) => { handleStepper( [ {value : '1', selected : selected1}, {value : '2', selected : selected2}, - {value : '3', selected : selected3} + {value : '3', selected : selected3}, + {value : '4', selected : selected4} ] ) } @@ -58,7 +59,7 @@ export default function PageProfessor (props) { school_city : (nomeMunicipio ? nomeMunicipio : ''), inep_code : (inep ? inep : '') }) - toggleStepper(false, true, false) + toggleStepper(false, true, false, false) } const handleBuscarParteDois = (city_name, inep, school_name, state_name) => { @@ -75,7 +76,7 @@ export default function PageProfessor (props) { school_name: (school_name ? school_name : ''), inep_code : (inep ? inep : '') }) - toggleStepper(false, false, true) + toggleStepper(false, false, true, false) } const handleParteTres = (phone, cpf) => { @@ -109,7 +110,9 @@ export default function PageProfessor (props) { .then( (response) => { console.log(response.data) }, (error) => console.log('deu erro') - )} + ) + toggleStepper(false, false, false, true) + } return ( <> @@ -143,6 +146,10 @@ export default function PageProfessor (props) { handleSubmit={handleParteTres} /> } + { + stepper[3].selected && + <SuccessfulRequest email={state.currentUser.email}/> + } </div> </Paper> </div> diff --git a/src/img/comentarios.png b/src/img/comentarios.png new file mode 100644 index 0000000000000000000000000000000000000000..8427d16029a99af4896d1d1ea0b16c7a76f88450 GIT binary patch literal 73553 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 literal 0 HcmV?d00001 -- GitLab