assemble/ui/general/index.js

155 lines
3.9 KiB
JavaScript
Raw Permalink Normal View History

2024-01-28 21:17:45 +03:00
import { Box, Button, Card, TextField, Typography } from "@mui/material";
2024-01-28 21:38:16 +03:00
import React, { useEffect, useState } from "react";
2024-01-28 21:17:45 +03:00
import { useDispatch, useSelector } from "react-redux";
import {addPost} from "./posts.store"
import moment from "moment";
import("./index.scss");
2024-01-28 04:03:41 +03:00
export default function General(){
2024-01-28 21:17:45 +03:00
const posts = useSelector((state) => state.generalposts.posts)
return <>
<Box
width="100%"
height="100%"
display="flex"
flexDirection="column"
className="layout"
gap="10px"
>
<Box
display="flex"
flexDirection="row"
gap="10px"
className="header"
>
<Box className="maxcontent">
<Box>
<Typography fontSize="2em">
Assemble
</Typography>
</Box>
</Box>
</Box>
<Box
width="100%"
height="100%"
display="flex"
flexDirection="row"
className="master"
gap="10px"
flexGrow="1"
pb={1}
>
<Box className="rightpanel">
<Card
sx={{
width: "100%",
height: "100%"
}}
>
</Card>
</Box>
<Box className="middlepanel">
<CreateNewPost />
{posts.map(({id,date,context}) => {
return <PostTemplete
key={id}
id={id}
date={date}
context={context}
/>
})}
</Box>
<Box className="leftpanel">
<Card
sx={{
width: "100%",
height: "100%"
}}
>
</Card>
</Box>
</Box>
</Box>
</>
};
function CreateNewPost()
{
const dispatch = useDispatch()
const [text, setText] = useState("");
function clickEvent()
{
dispatch(addPost(text));
setText("");
}
return <Card sx={{p:1}}>
<Box>
<TextField
multiline
fullWidth
rows={2}
placeholder="Yeni bir gönderi yayımlayın...."
value={text}
onChange={(event) => setText(event.target.value) }
/>
</Box>
<Box mt={1}>
<Button
color="primary"
variant="contained"
onClick={clickEvent}
>
Yayınla
</Button>
</Box>
</Card>
}
function PostTemplete({id, date, context})
{
return <Card sx={{p:1}} title={id}>
<Box>
<Typography fontSize="0.7em">
Abdussamed ULUTAŞ
</Typography>
</Box>
<Box py={1}>
2024-01-28 21:30:13 +03:00
<Typography component="pre">
2024-01-28 21:17:45 +03:00
{context}
</Typography>
</Box>
<Box>
2024-01-28 21:38:16 +03:00
<RevokeTiming date={date} />
2024-01-28 21:17:45 +03:00
</Box>
</Card>
2024-01-28 21:38:16 +03:00
}
function RevokeTiming({date})
{
let [text, setText] = useState([,]);
function update()
{
setText([
moment(date).format("HH:mm:ss DD/MM/YYYY"),
moment(date).locale("tr").fromNow(false)
])
}
useEffect(()=>{
update();
let timer = setInterval( update, 30_000)
return () => clearInterval(timer)
},[]);
return <Typography fontSize="0.7em" color="#9b9b9b" title={text[0]}>
{text[1]} yayımladı
</Typography>
2024-01-28 21:17:45 +03:00
}