init editSubmission design and profile data and manage research

This commit is contained in:
Mateusz Tylka 2023-07-28 13:32:20 +02:00
parent afd2361689
commit 01f82b1365
9 changed files with 161 additions and 44 deletions

View File

@ -9,7 +9,8 @@ const PopUpStyle = styled(FlexColumn)`
z-index: 100; z-index: 100;
width: 100%; width: 100%;
height: 100vh; height: 100vh;
background-color: ${({ theme }) => theme.colors.dark01}; background-color: ${({ theme, backgroundColor }) =>
backgroundColor ? backgroundColor : theme.colors.dark01};
.PopUpStyle__body { .PopUpStyle__body {
width: ${({ width }) => (width ? width : '60%')}; width: ${({ width }) => (width ? width : '60%')};
@ -31,6 +32,7 @@ const PopUp = (props) => {
return ( return (
<PopUpStyle <PopUpStyle
backgroundColor={props.backgroundColor}
padding={props.padding} padding={props.padding}
width={props.width} width={props.width}
height={props.height} height={props.height}

View File

@ -6,10 +6,11 @@ import RowsBackgroundStyle from './styles/RowsBackgroundStyle';
import TableRowFooter from './components/TableRowFooter'; import TableRowFooter from './components/TableRowFooter';
import deleteSubmission from '../../../api/deleteSubmission'; import deleteSubmission from '../../../api/deleteSubmission';
import theme from '../../../utils/theme'; import theme from '../../../utils/theme';
import DeletePopUp from './components/DeletePopUp/DeletePopUp'; import DeletePopUp from './components/DeletePopUp';
import MobileTable from './components/MobileTable/MobileTable'; import MobileTable from './components/MobileTable';
import Media from 'react-media'; import Media from 'react-media';
import editSubmission from '../../../api/editSubmission'; import editSubmission from '../../../api/editSubmission';
import EditPopUp from './components/EditPopUp';
const Table = ({ const Table = ({
items, items,
@ -22,6 +23,8 @@ const Table = ({
const tableUpdate = React.useCallback(() => updateState({}), []); const tableUpdate = React.useCallback(() => updateState({}), []);
const [deletedItems, setDeletedItems] = React.useState([]); const [deletedItems, setDeletedItems] = React.useState([]);
const [deletePopUp, setDeletePopUp] = React.useState(false); const [deletePopUp, setDeletePopUp] = React.useState(false);
const [editPopUp, setEditPopUp] = React.useState(false);
const itemsToRender = items.filter((item) => !deletedItems.includes(item)); const itemsToRender = items.filter((item) => !deletedItems.includes(item));
const deleteItem = async (item) => { const deleteItem = async (item) => {
@ -34,6 +37,10 @@ const Table = ({
); );
}; };
const editItem = async (item) => {
editSubmission(7355, '1,2,3', 'ssiema siema');
};
const desktopRender = () => { const desktopRender = () => {
return ( return (
<TableStyle rowFooter={rowFooter}> <TableStyle rowFooter={rowFooter}>
@ -49,11 +56,18 @@ const Table = ({
item={item} item={item}
setDeletePopUp={setDeletePopUp} setDeletePopUp={setDeletePopUp}
deletePopUp={deletePopUp} deletePopUp={deletePopUp}
deleteItem={() => editSubmission(7355, '1,2,3', 'ssiema siema')} deleteItem={deleteItem}
/>
<EditPopUp
item={item}
setEditPopUp={setEditPopUp}
editPopUp={editPopUp}
editItem={editItem}
/> />
<TableRowItems orderedKeys={orderedKeys} item={item} i={i} /> <TableRowItems orderedKeys={orderedKeys} item={item} i={i} />
<TableRowFooter <TableRowFooter
deleteItem={() => setDeletePopUp(true)} deleteItem={() => setDeletePopUp(true)}
editItem={() => setEditPopUp(true)}
rowFooter={rowFooter} rowFooter={rowFooter}
item={item} item={item}
i={i} i={i}

View File

@ -12,6 +12,7 @@ const DeletePopUp = ({ deletePopUp, setDeletePopUp, deleteItem, item }) => {
width="30%" width="30%"
height="30vh" height="30vh"
padding="32px" padding="32px"
backgroundColor={theme.colors.dark003}
closeHandler={() => setDeletePopUp(false)} closeHandler={() => setDeletePopUp(false)}
> >
<FlexColumn width="100%" height="100%" gap="48px"> <FlexColumn width="100%" height="100%" gap="48px">

View File

@ -0,0 +1,61 @@
import { createPortal } from 'react-dom';
import PopUp from '../../../PopUp';
import Button from '../../../Button';
import { H3 } from '../../../../../utils/fonts';
import { FlexColumn, FlexRow } from '../../../../../utils/containers';
import theme from '../../../../../utils/theme';
import SubmitInput from '../../../SubmitInput';
import TagsChoose from '../../../../../pages/Submit/components/TagsChoose/TagsChoose';
const EditPopUp = ({ editPopUp, setEditPopUp, editItem, item }) => {
if (editPopUp) {
return createPortal(
<PopUp
width="30%"
height="50vh"
padding="32px"
backgroundColor={theme.colors.dark003}
closeHandler={() => setEditPopUp(false)}
>
<FlexColumn width="100%" height="100%" gap="48px">
<H3>Editing submission</H3>
<SubmitInput
label="Description"
handler={(value) => {
console.log(value);
}}
/>
<TagsChoose
label="Submission tags"
updateTags={() => console.log('siema')}
tags={[]}
submissionTags={[]}
/>
<FlexRow gap="48px">
<Button
width="100px"
height="32px"
handler={() => {
setEditPopUp(false);
editItem(item);
}}
>
Confirm
</Button>
<Button
width="100px"
height="32px"
handler={() => setEditPopUp(false)}
backgroundColor={theme.colors.dark}
>
Cancel
</Button>
</FlexRow>
</FlexColumn>
</PopUp>,
document.body
);
}
};
export default EditPopUp;

View File

@ -0,0 +1 @@
export { default } from './EditPopUp';

View File

@ -5,14 +5,14 @@ import TableRowButtons from '../TableRowButtons/TableRowButtons';
import pensilIco from '../../../../../assets/pencil_ico.svg'; import pensilIco from '../../../../../assets/pencil_ico.svg';
import deleteIco from '../../../../../assets/delete_ico.svg'; import deleteIco from '../../../../../assets/delete_ico.svg';
const TableRowFooter = ({ rowFooter, item, i, deleteItem }) => { const TableRowFooter = ({ rowFooter, item, i, deleteItem, editItem }) => {
if (rowFooter) { if (rowFooter) {
return ( return (
<FlexRow className="TableStyle__row-footer"> <FlexRow className="TableStyle__row-footer">
<TableRowTags item={item} i={i} /> <TableRowTags item={item} i={i} />
<TableRowButtons <TableRowButtons
buttons={[ buttons={[
{ icon: pensilIco, handler: () => console.log('edit') }, { icon: pensilIco, handler: () => editItem(item) },
{ icon: deleteIco, handler: () => deleteItem(item) }, { icon: deleteIco, handler: () => deleteItem(item) },
]} ]}
/> />

View File

@ -1,6 +1,12 @@
import React from 'react'; import React from 'react';
import {Container, FlexColumn, FlexRow, Svg, TransBack} from '../../utils/containers'; import {
import {Body, Medium} from '../../utils/fonts'; Container,
FlexColumn,
FlexRow,
Svg,
TransBack,
} from '../../utils/containers';
import { Body, Medium } from '../../utils/fonts';
import theme from '../../utils/theme'; import theme from '../../utils/theme';
import userIco from '../../assets/user_ico.svg'; import userIco from '../../assets/user_ico.svg';
import KeyCloakService from '../../services/KeyCloakService'; import KeyCloakService from '../../services/KeyCloakService';
@ -15,8 +21,8 @@ const LoggedBarStyle = styled(FlexColumn)`
right: 0; right: 0;
align-items: flex-start; align-items: flex-start;
justify-content: flex-start; justify-content: flex-start;
background-color: ${({theme}) => theme.colors.white}; background-color: ${({ theme }) => theme.colors.white};
box-shadow: ${({theme}) => theme.shadow}; box-shadow: ${({ theme }) => theme.shadow};
z-index: 3; z-index: 3;
button { button {
@ -32,11 +38,11 @@ const LoggedBarStyle = styled(FlexColumn)`
&:hover { &:hover {
li { li {
color: ${({theme}) => theme.colors.green}; color: ${({ theme }) => theme.colors.green};
} }
div { div {
background-color: ${({theme}) => theme.colors.green}; background-color: ${({ theme }) => theme.colors.green};
} }
} }
@ -47,37 +53,61 @@ const LoggedBarStyle = styled(FlexColumn)`
`; `;
const LoggedBar = (props) => { const LoggedBar = (props) => {
return ( return (
<TransBack transition='transform' translateX={props.visible} <TransBack
onClick={props.loggedBarVisibleHandler} animTime='0.2s'> transition="transform"
<LoggedBarStyle onMouseEnter={props.loggedBarHoverTrue} translateX={props.visible}
onMouseLeave={props.loggedBarHoverFalse}> onClick={props.loggedBarVisibleHandler}
<FlexRow alignmentX='flex-start' alignmentY='flex-end' animTime="0.2s"
gap='16px' width='100%' padding='12px 16px'> >
<Svg src={userIco} width='32px' height='32px' backgroundColor={theme.colors.dark} size='cover'/> <LoggedBarStyle
<Medium as='p'> onMouseEnter={props.loggedBarHoverTrue}
{props.username} onMouseLeave={props.loggedBarHoverFalse}
</Medium> >
</FlexRow> <FlexRow
<Container width='90%' backgroundColor={theme.colors.dark05} height='1px'/> alignmentX="flex-start"
<FlexColumn as='ul' onClick={() => console.log('profile click')} alignmentY="flex-end"
gap='24px' padding='32px 24px' alignmentX='flex-start'> gap="16px"
<FlexRow as='button' gap='16px'> width="100%"
<Svg width='16px' height='16px' src={userIco} size='cover'/> padding="12px 16px"
<Body as='li'> >
Profile <Svg
</Body> src={userIco}
</FlexRow> width="32px"
<FlexRow as='button' onClick={props.visible === '0' ? KeyCloakService.doLogout : null} gap='16px'> height="32px"
<Svg width='16px' height='16px' src={loginIco} rotate='180deg'/> backgroundColor={theme.colors.dark}
<Body as='li'> size="cover"
Sign out />
</Body> <Medium as="p">{props.username}</Medium>
</FlexRow> </FlexRow>
</FlexColumn> <Container
</LoggedBarStyle> width="90%"
</TransBack> backgroundColor={theme.colors.dark05}
); height="1px"
/>
<FlexColumn
as="ul"
onClick={KeyCloakService.goToProfile}
gap="24px"
padding="32px 24px"
alignmentX="flex-start"
>
<FlexRow as="button" gap="16px">
<Svg width="16px" height="16px" src={userIco} size="cover" />
<Body as="li">Profile</Body>
</FlexRow>
<FlexRow
as="button"
onClick={props.visible === '0' ? KeyCloakService.doLogout : null}
gap="16px"
>
<Svg width="16px" height="16px" src={loginIco} rotate="180deg" />
<Body as="li">Sign out</Body>
</FlexRow>
</FlexColumn>
</LoggedBarStyle>
</TransBack>
);
}; };
export default LoggedBar; export default LoggedBar;

View File

@ -61,6 +61,11 @@ const getUsername = () => _kc.tokenParsed?.preferred_username;
const hasRole = (roles) => roles.some((role) => _kc.hasRealmRole(role)); const hasRole = (roles) => roles.some((role) => _kc.hasRealmRole(role));
const goToProfile = () => {
console.log(_kc.loadUserProfile());
_kc.accountManagement();
};
const KeyCloakService = { const KeyCloakService = {
initKeycloak, initKeycloak,
doLogin, doLogin,
@ -71,6 +76,7 @@ const KeyCloakService = {
getUsername, getUsername,
hasRole, hasRole,
doRegister, doRegister,
goToProfile,
}; };
export default KeyCloakService; export default KeyCloakService;

View File

@ -7,6 +7,8 @@ const colors = {
green05: 'rgba(27, 153, 139, 0.5)', green05: 'rgba(27, 153, 139, 0.5)',
green08: 'rgba(27, 153, 139, 0.8)', green08: 'rgba(27, 153, 139, 0.8)',
dark: '#343434', dark: '#343434',
dark003: 'rgba(52, 52, 52, 0.03)',
dark005: 'rgba(52, 52, 52, 0.05)',
dark01: 'rgba(52, 52, 52, 0.1)', dark01: 'rgba(52, 52, 52, 0.1)',
dark03: 'rgba(52, 52, 52, 0.3)', dark03: 'rgba(52, 52, 52, 0.3)',
dark04: 'rgba(52, 52, 52, 0.4)', dark04: 'rgba(52, 52, 52, 0.4)',