import {
batch,
createSignal,
createUniqueId,
onMount,
type Component,
type Setter,
} from "solid-js";
import Scaffold from "../material/Scaffold";
import {
Avatar,
Button,
IconButton,
List,
ListItemButton,
ListItemIcon,
ListItemSecondaryAction,
ListItemText,
Radio,
Switch,
Divider,
} from "@suid/material";
import {
ArrowDropDown,
Public as PublicIcon,
Send,
People as PeopleIcon,
ThreeP as ThreePIcon,
ListAlt as ListAltIcon,
} from "@suid/icons-material";
import type { Account } from "../accounts/stores";
import tootComposers from "./TootComposer.module.css";
import { makeEventListener } from "@solid-primitives/event-listener";
import BottomSheet from "../material/BottomSheet";
type TootVisibility = "public" | "unlisted" | "private" | "direct";
const TootVisibilityPickerDialog: Component<{
open?: boolean;
onClose: () => void;
visibility: TootVisibility;
onVisibilityChange: (value: TootVisibility) => void;
}> = (props) => {
type Kind = "public" | "private" | "direct";
const kind = () =>
props.visibility === "public" || props.visibility === "unlisted"
? "public"
: props.visibility;
const setKind = (nv: Kind) => {
if (nv == "public") {
props.onVisibilityChange(discoverable() ? "public" : "unlisted");
} else {
props.onVisibilityChange(nv);
}
};
const discoverable = () => {
return props.visibility === "public";
};
const setDiscoverable = (setter: (v: boolean) => boolean) => {
const nval = setter(discoverable());
props.onVisibilityChange(nval ? "public" : "unlisted"); // trigger change
};
return (
}
>
setDiscoverable((x) => !x)}
>
);
};
const ReplyEditor: Component<{
profile: Account;
replyToDisplayName: string;
isTyping?: boolean
onTypingChange: (value: boolean) => void
}> = (props) => {
let inputRef: HTMLTextAreaElement;
const buttonId = createUniqueId();
const menuId = createUniqueId();
const typing = () => props.isTyping
const setTyping = (v: boolean) => props.onTypingChange(v)
const [visibility, setVisibility] = createSignal("public");
const [permPicker, setPermPicker] = createSignal(false);
onMount(() => {
makeEventListener(inputRef, "focus", () => setTyping(true));
});
const containerStyle = () =>
typing() || permPicker()
? {
position: "sticky" as const,
top: "var(--scaffold-topbar-height, 0)",
bottom: "var(--safe-area-inset-bottom, 0)",
"z-index": 2,
}
: undefined;
const visibilityText = () => {
switch (visibility()) {
case "public":
return "Discoverable";
case "unlisted":
return "Public";
case "private":
return "Only Followers";
case "direct":
return "Only Mentions";
}
};
return (
inputRef.focus()}
>
setPermPicker(false)}
visibility={visibility()}
onVisibilityChange={setVisibility}
/>
);
};
export default ReplyEditor;