import { FeedController } from "$/lib/api/feeds"; import { getFeedName } from "$/lib/feeds"; import type { FeedGeneratorView, SavedFeedItem } from "$/lib/types"; import * as logger from "@tauri-apps/plugin-log"; import { createSignal, For, onMount, Show } from "solid-js"; import { FeedChipAvatar } from "../feeds/FeedChipAvatar"; import { Icon, LoadingIcon } from "../shared/Icon"; import type { FeedPickerSelection } from "./types"; function feedKindLabel(feed: SavedFeedItem) { switch (feed.type) { case "timeline": { return "Timeline"; } case "list": { return "List"; } default: { return "Feed"; } } } export function FeedPicker(props: { onSelect: (selection: FeedPickerSelection) => void }) { const [feeds, setFeeds] = createSignal([]); const [generators, setGenerators] = createSignal>({}); const [loading, setLoading] = createSignal(true); onMount(async () => { try { const prefs = await FeedController.getPreferences(); setFeeds(prefs.savedFeeds); const uris = [...new Set(prefs.savedFeeds.filter((feed) => feed.type === "feed").map((feed) => feed.value))]; if (uris.length > 0) { const hydrated = await FeedController.getFeedGenerators(uris); setGenerators(Object.fromEntries(hydrated.feeds.map((generator) => [generator.uri, generator]))); } } catch (err) { logger.error(`Failed to load feeds for column picker: ${String(err)}`); } finally { setLoading(false); } }); return (

No saved feeds found.

No saved feeds found.

}> {(feed) => ( )}
); } export function ExplorerPicker(props: { onSubmit: (uri: string) => void }) { const [value, setValue] = createSignal(""); function handleSubmit(e: Event) { e.preventDefault(); const uri = value().trim(); if (uri) { props.onSubmit(uri); } } return (
); } export function DiagnosticsPicker(props: { onSubmit: (did: string) => void }) { const [value, setValue] = createSignal(""); function handleSubmit(e: Event) { e.preventDefault(); const did = value().trim(); if (did) { props.onSubmit(did); } } return (
); } export function MessagesPicker(props: { onSubmit: () => void }) { return (

Direct messages

Opens your DM inbox inside the deck. Message content is blurred until you hover or focus the column.

); }