Compare commits

..

No commits in common. "02d723cc0b611271d9ab0c13d31b808f0ef0d79c" and "e73d00843172e4854ac33cf55dba9501d99ad796" have entirely different histories.

6 changed files with 28 additions and 116 deletions

View File

@ -71,30 +71,6 @@
margin-top: 10px; margin-top: 10px;
} }
@media (width <= 570px) {
.report-tag-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
}
.report-tag {
> .report-tag-count-good {
color: var(--tag-color-good);
}
> .report-tag-count-ok {
color: var(--tag-color-ok);
}
> .report-tag-count-bad {
color: var(--tag-color-bad);
}
> .report-tag-count-very-bad {
color: var(--tag-color-very-bad);
}
}
}
.report-comment:hover { .report-comment:hover {
background-color: #383d49; background-color: #383d49;
cursor: default; cursor: default;

View File

@ -4,46 +4,29 @@ import NicknameList from "~/components/itemDialog/nicknameList";
import CommentsList from "~/components/itemDialog/commentsList"; import CommentsList from "~/components/itemDialog/commentsList";
import TagList from "~/components/itemDialog/tagList"; import TagList from "~/components/itemDialog/tagList";
import TitleHeader from "~/components/itemDialog/titleHeader"; import TitleHeader from "~/components/itemDialog/titleHeader";
import useWindowDimensions from "~/hooks/windowDimensions";
import trimLink from "~/functions/trimLink";
export default function ItemDialog({ blacklistItem, open, handleClose }: { blacklistItem: BlacklistItem|null, open: boolean, handleClose: Function }){ export default function ItemDialog({ blacklistItem, open, handleClose }: { blacklistItem: BlacklistItem|null, open: boolean, handleClose: Function }){
if (blacklistItem){ return (
const { width } = useWindowDimensions(); <Dialog
return ( open={open}
<Dialog onClose={() => handleClose()}
open={open} >
onClose={() => handleClose()} <DialogTitle>
> <TitleHeader name={blacklistItem?.link} handleClose={handleClose}/>
<DialogTitle> <TagList
<TitleHeader name={width < 570 ? trimLink(blacklistItem?.link) : blacklistItem?.link} handleClose={handleClose}/> afk={blacklistItem?.afk}
<TagList cheater={blacklistItem?.cheater}
afk={blacklistItem?.afk} griefer={blacklistItem?.griefer}
cheater={blacklistItem?.cheater} toxic={blacklistItem?.toxic}
griefer={blacklistItem?.griefer} useless={blacklistItem?.useless}
toxic={blacklistItem?.toxic} smurf={blacklistItem?.smurf}
useless={blacklistItem?.useless} />
smurf={blacklistItem?.smurf} </DialogTitle>
/> <Divider sx={{marginTop: '10px', marginBottom: '10px', alignSelf: 'center'}}/>
</DialogTitle> <DialogContent>
<Divider sx={{marginTop: '10px', marginBottom: '10px', alignSelf: 'center'}}/> <NicknameList nicknames={blacklistItem?.nicknames}/>
<DialogContent> <CommentsList comments={blacklistItem?.comments}/>
<NicknameList nicknames={blacklistItem?.nicknames}/> </DialogContent>
<CommentsList comments={blacklistItem?.comments}/> </Dialog>
</DialogContent> )
</Dialog>
)
} else {
return (
<Dialog
open={open}
onClose={() => handleClose()}
>
<DialogContent>
Error: No item
</DialogContent>
</Dialog>
)
}
} }

View File

@ -1,7 +1,5 @@
import {BlacklistItem} from "~/classes/blacklistItem"; import {BlacklistItem} from "~/classes/blacklistItem";
import {Button, CircularProgress} from "@mui/material"; import {Button, CircularProgress} from "@mui/material";
import useWindowDimensions from "~/hooks/windowDimensions";
import trimLink from "~/functions/trimLink";
export default function ItemList({ isFetching, blacklistItems, showDialog }: { isFetching: boolean, blacklistItems: BlacklistItem[], showDialog: Function }) { export default function ItemList({ isFetching, blacklistItems, showDialog }: { isFetching: boolean, blacklistItems: BlacklistItem[], showDialog: Function }) {
if (isFetching){ if (isFetching){
@ -12,12 +10,11 @@ export default function ItemList({ isFetching, blacklistItems, showDialog }: { i
) )
} else { } else {
if (blacklistItems.length > 0){ if (blacklistItems.length > 0){
const { width } = useWindowDimensions();
return ( return (
<div className="list-container"> <div className="list-container">
<div className="item-list"> <div className="item-list">
{blacklistItems.map((item) => { {blacklistItems.map((item) => {
return <Button onClick={() => showDialog(item)} variant="text">{width < 570 ? trimLink(item.link) : item.link}</Button> return <Button onClick={() => showDialog(item)} variant="text">{item.link}</Button>
})} })}
</div> </div>
</div> </div>

View File

@ -1,3 +1,4 @@
import type {BlacklistItem} from "~/classes/blacklistItem";
import { import {
Button, Button,
Checkbox, Checkbox,
@ -40,16 +41,8 @@ export default function ReportDialog({ open, handleClose }: { open: boolean, han
const handleSend = async () => { const handleSend = async () => {
setLoading(true); setLoading(true);
let cleanLink = link.trim().toLowerCase();
if (cleanLink.endsWith('/')) {
cleanLink = cleanLink.slice(0, -1);
}
setLink(cleanLink);
let blacklistReport = new BlacklistReport( let blacklistReport = new BlacklistReport(
cleanLink, link,
nickname, nickname,
comment, comment,
afk, afk,
@ -59,9 +52,8 @@ export default function ReportDialog({ open, handleClose }: { open: boolean, han
useless, useless,
smurf smurf
); );
await sendReport(blacklistReport).then((result: boolean) => { await sendReport(blacklistReport).then((result: boolean) => {
setLoading(false); setLoading(true);
clearValues(); clearValues();
handleClose(); handleClose();
}); });
@ -146,7 +138,7 @@ export default function ReportDialog({ open, handleClose }: { open: boolean, han
/> />
</div> </div>
<div style={{width: '100%', display: 'flex', justifyContent: 'space-around'}}> <div style={{width: '100%', display: 'flex', justifyContent: 'space-around'}}>
<Button loading={loading} onClick={() => handleSend()} variant="contained">Send</Button> <Button onClick={() => handleSend()} variant="contained">Send</Button>
<Button onClick={() => handleClose()} variant="outlined">Cancel</Button> <Button onClick={() => handleClose()} variant="outlined">Cancel</Button>
</div> </div>
</DialogContent> </DialogContent>

View File

@ -1,9 +0,0 @@
export default function trimLink(link: string){
if (link.includes('/id')){
return link.split('/id')[1];
} else if (link.includes('/profiles')){
return link.split('/profiles')[1];
} else {
return link;
}
}

View File

@ -1,27 +0,0 @@
import { useState, useEffect } from "react";
export default function useWindowDimensions() {
// На сервере инициализируем значениями по умолчанию (0 или null)
const [dimensions, setDimensions] = useState({
width: typeof window !== 'undefined' ? window.innerWidth : 0,
height: typeof window !== 'undefined' ? window.innerHeight : 0,
});
useEffect(() => {
// Этот код гарантированно выполнится ТОЛЬКО в браузере
function handleResize() {
setDimensions({
width: window.innerWidth,
height: window.innerHeight,
});
}
// Устанавливаем точные размеры сразу при монтировании
handleResize();
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
return dimensions;
}