RegularToot: refactor, add env context

This commit is contained in:
thislight 2024-11-23 22:21:14 +08:00
parent cbdf5e667d
commit ad7db8e865
No known key found for this signature in database
GPG key ID: FCFE5192241CCD4E
5 changed files with 164 additions and 123 deletions

View file

@ -14,6 +14,7 @@ import { setCache as setTootBottomSheetCache } from "./TootBottomSheet";
import RegularToot, {
findElementActionable,
findRootToot,
TootEnvProvider,
} from "./RegularToot";
import cardStyle from "~material/cards.module.css";
import type { ThreadNode } from "../masto/timelines";
@ -232,13 +233,10 @@ const TootList: Component<{
openFullScreenToot(status, element, true);
};
const vote = async ({
status,
votes,
}: {
status: mastodon.v1.Status;
votes: readonly number[];
}) => {
const vote = async (
status: mastodon.v1.Status,
votes: readonly number[]
) => {
const client = session()?.client;
if (!client) return;
@ -263,7 +261,6 @@ const TootList: Component<{
poll: npoll,
});
}
};
return (
@ -273,49 +270,50 @@ const TootList: Component<{
return <p>Oops: {String(err)}</p>;
}}
>
<div ref={props.ref} id={props.id} class="toot-list">
<Index each={props.threads}>
{(threadId, threadIdx) => {
const thread = createMemo(() =>
props.onUnknownThread(threadId())?.reverse(),
);
<TootEnvProvider value={{
boost: toggleBoost,
bookmark: onBookmark,
favourite: toggleFavourite,
reply: reply,
vote: vote
}}>
<div ref={props.ref} id={props.id} class="toot-list">
<Index each={props.threads}>
{(threadId, threadIdx) => {
const thread = createMemo(() =>
props.onUnknownThread(threadId())?.reverse(),
);
const threadLength = () => thread()?.length ?? 0;
const threadLength = () => thread()?.length ?? 0;
return (
<Index each={thread()}>
{(threadNode, index) => {
const status = () => threadNode().value;
return (
<Index each={thread()}>
{(threadNode, index) => {
const status = () => threadNode().value;
return (
<RegularToot
data-status-id={status().id}
data-thread={threadIdx}
data-thread-len={threadLength()}
data-thread-sort={index}
status={status()}
thread={
threadLength() > 1
? positionTootInThread(index, threadLength())
: undefined
}
class={cardStyle.card}
evaluated={checkIsExpended(status())}
actionable={checkIsExpended(status())}
onBookmark={onBookmark}
onRetoot={toggleBoost}
onFavourite={toggleFavourite}
onReply={reply}
onVote={vote}
onClick={[onItemClick, status()]}
/>
);
}}
</Index>
);
}}
</Index>
</div>
return (
<RegularToot
data-status-id={status().id}
data-thread-sort={index}
status={status()}
thread={
threadLength() > 1
? positionTootInThread(index, threadLength())
: undefined
}
class={cardStyle.card}
evaluated={checkIsExpended(status())}
actionable={checkIsExpended(status())}
onClick={[onItemClick, status()]}
/>
);
}}
</Index>
);
}}
</Index>
</div>
</TootEnvProvider>
</ErrorBoundary>
);
};