Skip to content
Snippets Groups Projects
Commit 212f9dd2 authored by Emil Wahlqvist's avatar Emil Wahlqvist
Browse files

Resolve "Fix editor page styling"

parent b56c81e4
No related branches found
No related tags found
1 merge request!111Resolve "Fix editor page styling"
Pipeline #42917 passed with warnings
import { Button, Checkbox, CircularProgress, Divider, Menu, MenuItem, Typography } from '@material-ui/core' import { Button, CircularProgress, Divider, Menu, MenuItem, Typography } from '@material-ui/core'
import AppBar from '@material-ui/core/AppBar'
import { CheckboxProps } from '@material-ui/core/Checkbox'
import CssBaseline from '@material-ui/core/CssBaseline' import CssBaseline from '@material-ui/core/CssBaseline'
import Drawer from '@material-ui/core/Drawer'
import ListItemText from '@material-ui/core/ListItemText' import ListItemText from '@material-ui/core/ListItemText'
import { createStyles, makeStyles, Theme, withStyles } from '@material-ui/core/styles'
import AddOutlinedIcon from '@material-ui/icons/AddOutlined' import AddOutlinedIcon from '@material-ui/icons/AddOutlined'
import axios from 'axios' import axios from 'axios'
import React, { useEffect, useState } from 'react' import React, { useEffect, useState } from 'react'
...@@ -13,22 +9,29 @@ import { getCities } from '../../actions/cities' ...@@ -13,22 +9,29 @@ import { getCities } from '../../actions/cities'
import { getEditorCompetition, setEditorSlideId, setEditorViewId } from '../../actions/editor' import { getEditorCompetition, setEditorSlideId, setEditorViewId } from '../../actions/editor'
import { getTypes } from '../../actions/typesAction' import { getTypes } from '../../actions/typesAction'
import { useAppDispatch, useAppSelector } from '../../hooks' import { useAppDispatch, useAppSelector } from '../../hooks'
import { RichSlide } from '../../interfaces/ApiRichModels'
import { renderSlideIcon } from '../../utils/renderSlideIcon' import { renderSlideIcon } from '../../utils/renderSlideIcon'
import { RemoveMenuItem } from '../admin/styledComp' import { RemoveMenuItem } from '../admin/styledComp'
import { Content, InnerContent } from '../views/styled' import { Content, InnerContent } from '../views/styled'
import SettingsPanel from './components/SettingsPanel' import SettingsPanel from './components/SettingsPanel'
import SlideDisplay from './components/SlideDisplay' import SlideDisplay from './components/SlideDisplay'
import { import {
AppBarEditor,
CenteredSpinnerContainer, CenteredSpinnerContainer,
HomeIcon, HomeIcon,
LeftDrawer,
RightDrawer,
PresentationEditorContainer, PresentationEditorContainer,
SlideList, SlideList,
SlideListItem, SlideListItem,
ToolBarContainer, ToolBarContainer,
ViewButton, ViewButton,
ViewButtonClicked,
ViewButtonGroup, ViewButtonGroup,
ToolbarMargin,
FillLeftContainer,
PositionBottom,
FillRightContainer,
CompetitionName,
RightPanelScroll,
} from './styled' } from './styled'
const initialState = { const initialState = {
...@@ -40,52 +43,11 @@ const initialState = { ...@@ -40,52 +43,11 @@ const initialState = {
const leftDrawerWidth = 150 const leftDrawerWidth = 150
const rightDrawerWidth = 390 const rightDrawerWidth = 390
const useStyles = makeStyles((theme: Theme) =>
createStyles({
appBar: {
width: `calc(100% - ${rightDrawerWidth}px)`,
marginLeft: leftDrawerWidth,
marginRight: rightDrawerWidth,
},
leftDrawer: {
width: leftDrawerWidth,
flexShrink: 0,
position: 'relative',
zIndex: 1,
},
rightDrawer: {
width: rightDrawerWidth,
flexShrink: 0,
},
leftDrawerPaper: {
width: leftDrawerWidth,
},
rightDrawerPaper: {
width: rightDrawerWidth,
background: '#EAEAEA',
},
// necessary for content to be below app bar
toolbar: theme.mixins.toolbar,
content: {
flexGrow: 1,
backgroundColor: theme.palette.background.default,
padding: theme.spacing(3),
},
alignCheckboxText: {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
paddingRight: 20,
},
})
)
interface CompetitionParams { interface CompetitionParams {
competitionId: string competitionId: string
} }
const PresentationEditorPage: React.FC = () => { const PresentationEditorPage: React.FC = () => {
const classes = useStyles()
const { competitionId }: CompetitionParams = useParams() const { competitionId }: CompetitionParams = useParams()
const dispatch = useAppDispatch() const dispatch = useAppDispatch()
const activeSlideId = useAppSelector((state) => state.editor.activeSlideId) const activeSlideId = useAppSelector((state) => state.editor.activeSlideId)
...@@ -103,7 +65,7 @@ const PresentationEditorPage: React.FC = () => { ...@@ -103,7 +65,7 @@ const PresentationEditorPage: React.FC = () => {
} }
const createNewSlide = async () => { const createNewSlide = async () => {
await axios.post(`/api/competitions/${competitionId}/slides`, { title: 'new slide' }) await axios.post(`/api/competitions/${competitionId}/slides`, { title: 'Ny sida' })
dispatch(getEditorCompetition(competitionId)) dispatch(getEditorCompetition(competitionId))
} }
...@@ -138,17 +100,6 @@ const PresentationEditorPage: React.FC = () => { ...@@ -138,17 +100,6 @@ const PresentationEditorPage: React.FC = () => {
setContextState(initialState) setContextState(initialState)
} }
const GreenCheckbox = withStyles({
root: {
color: '#FFFFFF',
'&$checked': {
color: '#FFFFFF',
},
},
checked: {},
})((props: CheckboxProps) => <Checkbox color="default" {...props} />)
const [checkbox, setCheckbox] = useState(false)
const viewTypes = useAppSelector((state) => state.types.viewTypes) const viewTypes = useAppSelector((state) => state.types.viewTypes)
const [activeViewTypeName, setActiveViewTypeName] = useState('') const [activeViewTypeName, setActiveViewTypeName] = useState('')
const changeView = (clickedViewTypeName: string) => { const changeView = (clickedViewTypeName: string) => {
...@@ -162,20 +113,16 @@ const PresentationEditorPage: React.FC = () => { ...@@ -162,20 +113,16 @@ const PresentationEditorPage: React.FC = () => {
return ( return (
<PresentationEditorContainer> <PresentationEditorContainer>
<CssBaseline /> <CssBaseline />
<AppBar position="fixed" className={classes.appBar}> <AppBarEditor leftDrawerWidth={leftDrawerWidth} rightDrawerWidth={rightDrawerWidth} position="fixed">
<ToolBarContainer> <ToolBarContainer>
<Button component={Link} to="/admin/tävlingshanterare" style={{ padding: 0 }}> <Button component={Link} to="/admin/tävlingshanterare" style={{ padding: 0 }}>
<HomeIcon src="/t8.png" /> <HomeIcon src="/t8.png" />
</Button> </Button>
<Typography variant="h6" noWrap> <CompetitionName variant="h5" noWrap>
{competition.name} {competition.name}
</Typography> </CompetitionName>
<ViewButtonGroup> <ViewButtonGroup>
<GreenCheckbox checked={checkbox} onChange={(event) => setCheckbox(event.target.checked)} />
<Typography className={classes.alignCheckboxText} variant="button">
Applicera ändringar på samtliga vyer
</Typography>
<ViewButton <ViewButton
$activeView={activeViewTypeName === 'Audience'} $activeView={activeViewTypeName === 'Audience'}
variant="contained" variant="contained"
...@@ -194,19 +141,11 @@ const PresentationEditorPage: React.FC = () => { ...@@ -194,19 +141,11 @@ const PresentationEditorPage: React.FC = () => {
</ViewButton> </ViewButton>
</ViewButtonGroup> </ViewButtonGroup>
</ToolBarContainer> </ToolBarContainer>
</AppBar> </AppBarEditor>
<Drawer <LeftDrawer leftDrawerWidth={leftDrawerWidth} rightDrawerWidth={undefined} variant="permanent" anchor="left">
className={classes.leftDrawer} <FillLeftContainer leftDrawerWidth={leftDrawerWidth} rightDrawerWidth={undefined}>
variant="permanent" <ToolbarMargin />
classes={{ <SlideList>
paper: classes.leftDrawerPaper,
}}
anchor="left"
>
<div className={classes.toolbar} />
<Divider />
<SlideList>
<div>
{competition.slides && {competition.slides &&
competition.slides.map((slide) => ( competition.slides.map((slide) => (
<SlideListItem <SlideListItem
...@@ -221,33 +160,30 @@ const PresentationEditorPage: React.FC = () => { ...@@ -221,33 +160,30 @@ const PresentationEditorPage: React.FC = () => {
<ListItemText primary={`Sida ${slide.order + 1}`} /> <ListItemText primary={`Sida ${slide.order + 1}`} />
</SlideListItem> </SlideListItem>
))} ))}
</div> </SlideList>
<div> <PositionBottom>
<Divider /> <Divider />
<SlideListItem divider button onClick={() => createNewSlide()}> <SlideListItem divider button onClick={() => createNewSlide()}>
<ListItemText primary="Ny sida" /> <ListItemText primary="Ny sida" />
<AddOutlinedIcon /> <AddOutlinedIcon />
</SlideListItem> </SlideListItem>
</div> </PositionBottom>
</SlideList> </FillLeftContainer>
</Drawer> </LeftDrawer>
<div className={classes.toolbar} /> <ToolbarMargin />
<Drawer <RightDrawer leftDrawerWidth={undefined} rightDrawerWidth={rightDrawerWidth} variant="permanent" anchor="right">
className={classes.rightDrawer} <FillRightContainer leftDrawerWidth={undefined} rightDrawerWidth={rightDrawerWidth}>
variant="permanent" <RightPanelScroll>
classes={{ {!competitionLoading ? (
paper: classes.rightDrawerPaper, <SettingsPanel />
}} ) : (
anchor="right" <CenteredSpinnerContainer>
> <CircularProgress />
{!competitionLoading ? ( </CenteredSpinnerContainer>
<SettingsPanel /> )}
) : ( </RightPanelScroll>
<CenteredSpinnerContainer> </FillRightContainer>
<CircularProgress /> </RightDrawer>
</CenteredSpinnerContainer>
)}
</Drawer>
<Content leftDrawerWidth={leftDrawerWidth} rightDrawerWidth={rightDrawerWidth}> <Content leftDrawerWidth={leftDrawerWidth} rightDrawerWidth={rightDrawerWidth}>
<InnerContent> <InnerContent>
......
import { Button, List, ListItem, Toolbar } from '@material-ui/core' import { AppBar, Button, Drawer, List, ListItem, Toolbar, Typography } from '@material-ui/core'
import styled from 'styled-components' import styled from 'styled-components'
interface ViewButtonProps {
$activeView: boolean
}
interface DrawerSizeProps {
leftDrawerWidth: number | undefined
rightDrawerWidth: number | undefined
}
const AppBarHeight = 64
const SlideListHeight = 60
export const ToolBarContainer = styled(Toolbar)` export const ToolBarContainer = styled(Toolbar)`
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding-left: 0; padding-left: 0;
` `
interface ViewButtonProps {
$activeView: boolean
}
export const ViewButton = styled(Button)<ViewButtonProps>` export const ViewButton = styled(Button)<ViewButtonProps>`
margin-right: 8px; margin-right: 8px;
background: ${(props) => (props.$activeView ? '#5a0017' : undefined)}; background: ${(props) => (props.$activeView ? '#5a0017' : undefined)};
...@@ -27,16 +35,19 @@ export const ViewButtonGroup = styled.div` ...@@ -27,16 +35,19 @@ export const ViewButtonGroup = styled.div`
` `
export const SlideList = styled(List)` export const SlideList = styled(List)`
height: 100%; height: calc(100% - ${SlideListHeight}px);
display: flex; padding: 0px;
flex-direction: column; overflow-y: auto;
justify-content: space-between; `
export const RightPanelScroll = styled(List)`
padding: 0px; padding: 0px;
overflow-y: auto;
` `
export const SlideListItem = styled(ListItem)` export const SlideListItem = styled(ListItem)`
text-align: center; text-align: center;
height: 60px; height: ${SlideListHeight}px;
` `
export const PresentationEditorContainer = styled.div` export const PresentationEditorContainer = styled.div`
...@@ -51,5 +62,54 @@ export const CenteredSpinnerContainer = styled.div` ...@@ -51,5 +62,54 @@ export const CenteredSpinnerContainer = styled.div`
` `
export const HomeIcon = styled.img` export const HomeIcon = styled.img`
height: 64px; height: ${AppBarHeight}px;
`
export const LeftDrawer = styled(Drawer)<DrawerSizeProps>`
width: ${(props) => (props ? props.leftDrawerWidth : 0)}px;
flex-shrink: 0;
position: relative;
z-index: 1;
`
export const RightDrawer = styled(Drawer)<DrawerSizeProps>`
width: ${(props) => (props ? props.rightDrawerWidth : 0)}px;
flex-shrink: 0;
`
export const AppBarEditor = styled(AppBar)<DrawerSizeProps>`
width: calc(100% - ${(props) => (props ? props.rightDrawerWidth : 0)}px);
left: 0;
margin-left: leftDrawerWidth;
margin-right: rightDrawerWidth;
`
// Necessary for content to be below app bar
export const ToolbarMargin = styled.div`
padding-top: ${AppBarHeight}px;
`
export const FillLeftContainer = styled.div<DrawerSizeProps>`
width: ${(props) => (props ? props.leftDrawerWidth : 0)}px;
height: calc(100% - ${SlideListHeight}px);
overflow: hidden;
`
export const FillRightContainer = styled.div<DrawerSizeProps>`
width: ${(props) => (props ? props.rightDrawerWidth : 0)}px;
height: 100%;
overflow-y: auto;
background: #e9e9e9;
`
export const PositionBottom = styled.div`
position: absolute;
bottom: 0;
width: 100%;
`
export const CompetitionName = styled(Typography)`
text-decoration: none;
position: absolute;
left: 180px;
` `
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment