import {Topic, topicsCtx} from "@/contexts/topics"; import {Layout} from "../layout"; import {Spinner} from "../spinner"; import style from "./style.module.scss"; import {Button} from "../button"; import {Input} from "../input"; import {Clipboard, Trash2} from "preact-feather"; import {useContext, useEffect, useMemo, useRef, useState} from "preact/hooks"; import {frenchToIso8601, iso8601ToFrench} from "@/utils/dates"; import {FormGroup} from "../form"; import {Slider} from "../slider"; import cn from "classnames"; import {routeCtx, routes} from "@/contexts/route"; import {settingsCtx} from "@/contexts/settings"; import {Wysiwyg} from "@/components/wysiwyg"; import {Alert} from "@/components/alert"; import {logCtx} from "@/contexts/log"; import {Pagination} from "@/components/pagination"; const topicsPerPage = 10; export function Topics(props: { page: number, setPage: (newPage: number) => void, }) { const [importContent, setImportContent] = useState(""); const [topicsContext, setTopicsContext, topicsActions] = useContext(topicsCtx); const [, , logActions] = useContext(logCtx); const [settings, setSettings] = useContext(settingsCtx); useEffect(() => { if((topicsPerPage * props.page) >= topicsContext.topics.length) { props.setPage(Math.ceil(topicsContext.topics.length / topicsPerPage)/* - 1*/); } }, [topicsContext.topics.length]) const sortedTopics = useMemo(() => { return [...topicsContext.topics].sort((topicA, topicB) => { if (topicA.posts.length < 1 || topicB.posts.length < 1) { return 0; } return topicB.posts[topicB.posts.length - 1].date.localeCompare(topicA.posts[topicA.posts.length - 1].date); }); }, [topicsContext.topics]); const sortedTopicsSlice = useMemo( () => sortedTopics.slice(props.page * topicsPerPage, (props.page + 1) * topicsPerPage), [props.page, sortedTopics] ); const pendingGeneration = topicsContext.generation === "pending"; return (

Nouveau sujet

setSettings({...settings, postCount: v})} min={1} max={10} step={1} />

{ // setLastAddedTopicId(topicsActions.addTopic(user, title, text)); topicsActions.addTopic(user, title, text) props.setPage(0); window.scrollTo({top: 0, behavior: 'smooth'}); }} disabled={pendingGeneration} />