Skip to content
Snippets Groups Projects
Store.js 5.04 KiB
Newer Older
/*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 from 'react'

export const Store = React.createContext()

const initialState = {
  searchOpen: false,
  userAgreedToPublicationPermissions: false,
  modalColaborarPlataformaOpen : false,
  search: {
    query: '*',
    class: 'LearningObject'
  },
  windowSize: {
    width: 0,
      askTeacherQuestion : false,
      follows_count : 0,
      collections_count : 0,
      submitter_request : 'default',
      roles : []
function reducer(state, action) {
  switch (action.type){
    case 'SAVE_SEARCH':
      return {
        ...state,
        search: action.newSearch
      }
    case 'HANDLE_SEARCH_BAR':
      return {
        ...state,
        searchOpen: action.opened
      }
    case 'WINDOW_SIZE':
      return {
        ...state,
        windowSize: action.innerWindow
      }
        if (action.login.avatar_file_name) {
            Object.defineProperty(action.login, 'avatar',
                Object.getOwnPropertyDescriptor(action.login, 'avatar_file_name'));
            delete action.login['avatar_file_name'];
        }
        if (action.login.cover_file_name) {
            Object.defineProperty(action.login, 'cover',
                Object.getOwnPropertyDescriptor(action.login, 'cover_file_name'));
            delete action.login['cover_file_name'];
        }
      return {
          ...state,
          userIsLoggedIn:action.userLoggedIn,
    }
    case 'USER_SIGNED_UP':
      return {
          ...state,
          userIsLoggedIn:action.userLoggedIn,
        return {
            ...state,
            userIsLoggedIn:action.userLoggedOut,
            currentUser:{
                askTeacherQuestion : false,
                id : '',
                name : '',
                email : '',
                avatar_file_name : '',
                cover_file_name : '',
                uid : '',
                follows_count : 0,
                collections_count : 0,
                submitter_request : 'default',
                roles : []
            },
            userAgreedToPublicationTerms: false,
            userAgreedToPublicationPermissions: false
        }
    case 'USER_AGREED_TO_PUBLICATION_TERMS':
        return {
            ...state,
            userAgreedToPublicationTerms: action.userAgreement
        }
    case 'USER_AGREED_TO_PUBLICATION_PERMISSIONS':
        return {
            ...state,
            userAgreedToPublicationPermissions : action.userAgreement
        }
    case 'USER_ACCESSED_USER_PAGE':
        return {
            ...state,
            currentUser : action.set
        }
Lucas Eduardo Schoenfelder's avatar
Lucas Eduardo Schoenfelder committed
    case 'USER_CHANGED_COVER':
        return {
            ...state,
            currentUser : action.currUser
        }
    case 'USER_DELETED_ACCOUNT':
        localStorage.clear()
        return {
            ...state,
            userIsLoggedIn:false,
            currentUser: {
                askTeacherQuestion : false,
                id : '',
                name : '',
                email : '',
                avatar_file_name : '',
                cover_file_name : '',
                uid : '',
                follows_count : 0,
                collections_count : 0,
                submitter_request : 'default',
                roles : []
            },
    case 'TOGGLE_MODAL_COLABORAR_PLATAFORMA':
        return {
            ...state,
            modalColaborarPlataformaOpen : action.modalColaborarPlataformaOpen
        }
    case 'GET_USER':
        return {
            ...state,
            currentUser:action.user
      }
    case 'USER_UPDATED_EMAIL':
        return {
            ...state,
            currentUser : action.currUser
        }
    const [state, dispatch] = React.useReducer(reducer, initialState);
    const value = { state, dispatch };  
    return (
        <Store.Provider value={value}>
            {props.children}
        </Store.Provider>
    )