import { useEntitySetContext } from "components/EntitySetProvider"; import { useEffect, useState } from "react"; import { useEntity } from "src/replicache"; import { useUIState } from "src/useUIState"; import { BlockProps } from "../Block"; import { elementId } from "src/utils/elementId"; import { focusBlock } from "src/utils/focusBlock"; import { AppBskyFeedDefs, AppBskyFeedPost, RichText } from "@atproto/api"; import { BlueskyEmbed, PostNotAvailable } from "./BlueskyEmbed"; import { BlueskyPostEmpty } from "./BlueskyEmpty"; import { BlueskyRichText } from "./BlueskyRichText"; import { Separator } from "components/Layout"; import { BlueskyTiny } from "components/Icons/BlueskyTiny"; import { CommentTiny } from "components/Icons/CommentTiny"; import { useLocalizedDate } from "src/hooks/useLocalizedDate"; export const BlueskyPostBlock = (props: BlockProps & { preview?: boolean }) => { let { permissions } = useEntitySetContext(); let isSelected = useUIState((s) => s.selectedBlocks.find((b) => b.value === props.entityID), ); let post = useEntity(props.entityID, "block/bluesky-post")?.data.value; useEffect(() => { if (props.preview) return; let input = document.getElementById(elementId.block(props.entityID).input); if (isSelected) { input?.focus(); } else input?.blur(); }, [isSelected, props.entityID, props.preview]); switch (true) { case !post: if (!permissions.write) return null; return ( ); case AppBskyFeedDefs.isBlockedPost(post) || AppBskyFeedDefs.isBlockedAuthor(post) || AppBskyFeedDefs.isNotFoundPost(post): return (
{BlueskyRichText({
record: record as AppBskyFeedPost.Record | null,
})}