import { createSignal, Signal } from "solid-js"; import { CaptionsIcon, SendIcon, XIcon } from "lucide-solid"; import { HStack, Stack, VStack } from "styled-system/jsx"; import { IconButton } from "~/components/ui/icon-button"; import { Spinner } from "~/components/ui/spinner"; import { Text } from "~/components/ui/text"; import { Link } from "~/components/ui/link"; import { parseCanonicalResourceUri } from "@atcute/lexicons/syntax"; import { css } from "styled-system/css"; import { sendPost, UploadStatus } from "~/lib/at"; import { toaster } from "~/components/Toaster"; import { Dialog } from "~/components/ui/dialog"; import { Textarea } from "~/components/ui/textarea"; import { Account } from "~/lib/accounts"; import { Popover } from "./ui/popover"; import { Progress } from "./ui/progress"; const PostDialog = (props: { result: Blob; account: Account | undefined; openSignal: Signal; initialAltText?: string; }) => { const [postContent, setPostContent] = createSignal(""); const [altText, setAltText] = createSignal( props.initialAltText ?? "", ); const [posting, setPosting] = createSignal(false); const [uploadStatus, setUploadStatus] = createSignal( null, ); const [open, setOpen] = props.openSignal; const getStatusMessage = () => { const status = uploadStatus(); if (!status) return ""; switch (status.stage) { case "auth": return "authenticating..."; case "uploading": return "uploading video..."; case "processing": return status.progress ? `processing video... ${Math.round(status.progress)}%` : "processing video..."; case "posting": return "creating post..."; case "complete": return "complete!"; default: return ""; } }; const getProgressValue = () => { const status = uploadStatus(); if (!status) return 0; switch (status.stage) { case "auth": return 5; case "uploading": return 10; case "processing": return status.progress ? 10 + status.progress * 0.6 : 40; case "posting": return 90; case "complete": return 100; default: return 0; } }; return ( setOpen(e.open)}>