import {Post as PostType, Topic as TopicType, topicsCtx} from "@/contexts/topics"; import style from "./style.module.scss"; import {Preview} from "../preview"; import {iso8601ToFrench} from "@/utils/dates"; import {FormGroup} from "../form"; import {Slider} from "../slider"; import {Button} from "../button"; import {settingsCtx} from "@/contexts/settings"; import {useContext, useState, useMemo} from "preact/hooks"; import {Wysiwyg} from "@/components/wysiwyg"; import { ChevronRight, X, } from "preact-feather"; import cn from "classnames"; import {Pagination} from "@/components/pagination"; import {Spinner} from "@/components/spinner"; import {logCtx} from "@/contexts/log"; const postsPerPage = 10; export function Topic(props: { topic: TopicType, page: number, setPage: (newPage: number) => void, }) { /** * TODO * prendre la générationDate du premier post et remplacer toutes la dates (IA) avec celle-ci en calculant le delta en en l'appliquant à chaque post * Pour il faut remplacer la date des citations en prenant en compte le delta * */ const [topicsContext, , topicsActions] = useContext(topicsCtx); const [settings, setSettings] = useContext(settingsCtx); const [, , logActions] = useContext(logCtx); const [wysiwygText, setWysiwygText] = useState(""); const addQuote = (post: PostType) => { setWysiwygText((wysiwygText.length > 1 ? `${wysiwygText}\n\n` : "") + post.content.split("\n").map(l => `> ${l}`).join("\n")) } const postsSlice = useMemo( () => props.topic.posts.slice(props.page * postsPerPage, (props.page + 1) * postsPerPage), [props.page, props.topic.posts] ); const pendingGeneration = topicsContext.generation === "pending"; const pagination = ( ); return (
{pagination}
{postsSlice.map((post, index) => { const realIndex = postsPerPage * props.page + index; return ( addQuote(post)} remove={() => topicsActions.deletePost(props.topic.id, realIndex)} loading={pendingGeneration && realIndex >= props.topic.posts.length - 1} /> ) })}
{pagination}

Ajout de posts

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

{ topicsActions.addPost(props.topic.id, user, text) }} text={wysiwygText} setText={setWysiwygText} />
) } function Post(props: { post: PostType, quote: () => void, remove: () => void, loading: boolean, }) { return (
ahi
{props.post.user}
{iso8601ToFrench(props.post.date)}
{props.loading ? : null}
) }