From 309a986e0762ec10aa2758f0d954710bec4d3ee5 Mon Sep 17 00:00:00 2001 From: robban64 <carl@schonfelder.se> Date: Tue, 20 Apr 2021 12:36:59 +0200 Subject: [PATCH] merge --- .gitignore | 2 +- client/src/Main.tsx | 8 +++++++- client/src/actions/presentation.ts | 2 +- client/src/interfaces/ApiModels.ts | 10 ++++++++++ client/src/interfaces/ApiRichModels.ts | 4 +--- client/src/interfaces/Slide.ts | 7 ------- client/src/interfaces/Team.ts | 4 ---- client/src/pages/admin/AdminPage.tsx | 7 ++++--- client/src/pages/admin/competitions/AddCompetition.tsx | 3 ++- .../presentationEditor/PresentationEditorPage.tsx | 2 ++ client/src/reducers/presentationReducer.ts | 3 +-- client/src/reducers/userReducer.ts | 5 ++--- server/app/apis/misc.py | 4 ++-- 13 files changed, 33 insertions(+), 28 deletions(-) delete mode 100644 client/src/interfaces/Slide.ts delete mode 100644 client/src/interfaces/Team.ts diff --git a/.gitignore b/.gitignore index a6906867..d5cf16df 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ htmlcov .pytest_cache /.idea .vs/ -*/static \ No newline at end of file +/server/app/static/ \ No newline at end of file diff --git a/client/src/Main.tsx b/client/src/Main.tsx index f32aad9f..bc0a2e85 100644 --- a/client/src/Main.tsx +++ b/client/src/Main.tsx @@ -1,5 +1,7 @@ -import React from 'react' +import React, { useEffect } from 'react' import { BrowserRouter, Route, Switch } from 'react-router-dom' +import { getTypes } from './actions/typesAction' +import { useAppDispatch } from './hooks' import AdminPage from './pages/admin/AdminPage' import LoginPage from './pages/login/LoginPage' import PresentationEditorPage from './pages/presentationEditor/PresentationEditorPage' @@ -11,6 +13,10 @@ import ViewSelectPage from './pages/views/ViewSelectPage' import SecureRoute from './utils/SecureRoute' const Main: React.FC = () => { + const dispatch = useAppDispatch() + useEffect(() => { + dispatch(getTypes()) + }, []) return ( <BrowserRouter> <Switch> diff --git a/client/src/actions/presentation.ts b/client/src/actions/presentation.ts index 9e482d2b..6821aa2c 100644 --- a/client/src/actions/presentation.ts +++ b/client/src/actions/presentation.ts @@ -1,5 +1,5 @@ import axios from 'axios' -import { Slide } from '../interfaces/Slide' +import { Slide } from '../interfaces/ApiModels' import { AppDispatch } from './../store' import Types from './types' diff --git a/client/src/interfaces/ApiModels.ts b/client/src/interfaces/ApiModels.ts index 3c72e99f..0053fc1b 100644 --- a/client/src/interfaces/ApiModels.ts +++ b/client/src/interfaces/ApiModels.ts @@ -32,9 +32,19 @@ export interface User extends NameID { city_id: number } +export interface Slide { + competition_id: number + id: number + order: number + timer: number + title: string +} + export interface Competition extends NameID { + font: string city_id: number year: number + background_image_id: number } export interface Team extends NameID { diff --git a/client/src/interfaces/ApiRichModels.ts b/client/src/interfaces/ApiRichModels.ts index e21ae5fa..99ee4ec2 100644 --- a/client/src/interfaces/ApiRichModels.ts +++ b/client/src/interfaces/ApiRichModels.ts @@ -1,5 +1,4 @@ -import { Component } from 'react' -import { Media, QuestionAlternative, QuestionAnswer, QuestionType } from './ApiModels' +import { Component, QuestionAlternative, QuestionAnswer, QuestionType } from './ApiModels' export interface RichCompetition { name: string @@ -17,7 +16,6 @@ export interface RichSlide { title: string competition_id: number components: Component[] - medias: Media[] questions: RichQuestion[] } diff --git a/client/src/interfaces/Slide.ts b/client/src/interfaces/Slide.ts deleted file mode 100644 index dcdbd366..00000000 --- a/client/src/interfaces/Slide.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface Slide { - competition_id: number - id: number - order: number - timer: number - title: string -} diff --git a/client/src/interfaces/Team.ts b/client/src/interfaces/Team.ts deleted file mode 100644 index 10b4350e..00000000 --- a/client/src/interfaces/Team.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface Team { - id: number - name: string -} diff --git a/client/src/pages/admin/AdminPage.tsx b/client/src/pages/admin/AdminPage.tsx index 8bbb68fa..beff5f93 100644 --- a/client/src/pages/admin/AdminPage.tsx +++ b/client/src/pages/admin/AdminPage.tsx @@ -59,11 +59,12 @@ const AdminView: React.FC = () => { const [openIndex, setOpenIndex] = React.useState(0) const { path, url } = useRouteMatch() const currentUser = useAppSelector((state) => state.user.userInfo) - const isAdmin = () => currentUser && currentUser.role.name === 'Admin' + const isAdmin = useAppSelector((state) => Boolean(state.roles.roles.find((x) => x.id === currentUser?.role_id))) const dispatch = useAppDispatch() const handleLogout = () => { dispatch(logoutUser()) } + useEffect(() => { dispatch(getCities()) dispatch(getRoles()) @@ -83,7 +84,7 @@ const AdminView: React.FC = () => { ] const renderItems = () => { - const menuItems = isAdmin() ? menuAdminItems : menuEditorItems + const menuItems = isAdmin ? menuAdminItems : menuEditorItems return menuItems.map((value, index) => ( <ListItem button @@ -105,7 +106,7 @@ const AdminView: React.FC = () => { <AppBar position="fixed" className={classes.appBar}> <Toolbar> <Typography variant="h5" noWrap> - {isAdmin() ? menuAdminItems[openIndex].text : menuEditorItems[openIndex].text} + {isAdmin ? menuAdminItems[openIndex].text : menuEditorItems[openIndex].text} </Typography> </Toolbar> </AppBar> diff --git a/client/src/pages/admin/competitions/AddCompetition.tsx b/client/src/pages/admin/competitions/AddCompetition.tsx index 3d45e629..e9666770 100644 --- a/client/src/pages/admin/competitions/AddCompetition.tsx +++ b/client/src/pages/admin/competitions/AddCompetition.tsx @@ -31,7 +31,8 @@ const competitionSchema: Yup.SchemaOf<formType> = Yup.object({ const AddCompetition: React.FC = (props: any) => { const [anchorEl, setAnchorEl] = React.useState<HTMLButtonElement | null>(null) const cities = useAppSelector((state) => state.cities.cities) - const userCity = useAppSelector((state) => state.user.userInfo?.city) + const currentUser = useAppSelector((state) => state.user.userInfo) + const userCity = cities.find((city) => city.id === currentUser?.city_id) const [selectedCity, setSelectedCity] = React.useState<City | undefined>(userCity) const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => { setAnchorEl(event.currentTarget) diff --git a/client/src/pages/presentationEditor/PresentationEditorPage.tsx b/client/src/pages/presentationEditor/PresentationEditorPage.tsx index 2993b12b..ce09f41d 100644 --- a/client/src/pages/presentationEditor/PresentationEditorPage.tsx +++ b/client/src/pages/presentationEditor/PresentationEditorPage.tsx @@ -9,6 +9,7 @@ import React, { useEffect } from 'react' import { useParams } from 'react-router-dom' import { getCities } from '../../actions/cities' import { getEditorCompetition } from '../../actions/editor' +import { getTypes } from '../../actions/typesAction' import { useAppDispatch, useAppSelector } from '../../hooks' import { Content } from '../views/styled' import SettingsPanel from './components/SettingsPanel' @@ -69,6 +70,7 @@ const PresentationEditorPage: React.FC = () => { useEffect(() => { dispatch(getEditorCompetition(id)) dispatch(getCities()) + dispatch(getTypes()) }, []) return ( <PresentationEditorContainer> diff --git a/client/src/reducers/presentationReducer.ts b/client/src/reducers/presentationReducer.ts index b4325680..936f8740 100644 --- a/client/src/reducers/presentationReducer.ts +++ b/client/src/reducers/presentationReducer.ts @@ -1,8 +1,7 @@ import { AnyAction } from 'redux' import Types from '../actions/types' +import { Slide, Team } from '../interfaces/ApiModels' import { RichCompetition } from './../interfaces/ApiRichModels' -import { Slide } from './../interfaces/Slide' -import { Team } from './../interfaces/Team' interface PresentationState { competition: RichCompetition diff --git a/client/src/reducers/userReducer.ts b/client/src/reducers/userReducer.ts index 6064292a..91c056d3 100644 --- a/client/src/reducers/userReducer.ts +++ b/client/src/reducers/userReducer.ts @@ -1,12 +1,11 @@ import { AnyAction } from 'redux' import Types from '../actions/types' -import { City, Role } from '../interfaces/ApiModels' interface UserInfo { name: string email: string - role: Role - city: City + role_id: number + city_id: number id: number } diff --git a/server/app/apis/misc.py b/server/app/apis/misc.py index a78c2f8c..a74ac6d1 100644 --- a/server/app/apis/misc.py +++ b/server/app/apis/misc.py @@ -1,7 +1,8 @@ import app.database.controller as dbc from app.apis import admin_required, item_response, list_response from app.core.dto import MiscDTO -from app.database.models import City, ComponentType, MediaType, QuestionType, Role, ViewType +from app.database.models import (City, ComponentType, MediaType, QuestionType, + Role, ViewType) from flask_jwt_extended import jwt_required from flask_restx import Resource, reqparse @@ -22,7 +23,6 @@ name_parser.add_argument("name", type=str, required=True, location="json") @api.route("/types") class TypesList(Resource): - @jwt_required def get(self): result = {} result["media_types"] = media_type_schema.dump(dbc.get.all(MediaType)) -- GitLab