import { ChangeEventHandler, Dispatch, KeyboardEventHandler, MouseEventHandler, ReactNode, SetStateAction, useCallback, useEffect, useRef, useState } from "react"; import {FixedSizeList as List} from "react-window"; import Select, {createFilter, MenuListProps} from "react-select"; import * as R from 'ramda'; import {useQuery} from "@tanstack/react-query"; // TODO: Fix this for wrapping items, esp on phones const height = 35; function MenuList(props: MenuListProps) { const { options, children, maxHeight, getValue } = props as Omit & { children: ReactNode[] }; const [value] = getValue(); const initialOffset = options.indexOf(value) * height; return ( {({ index, style }) =>
{children[index]}
}
); } interface Option { label: string, value: string, data: { backlinks: unknown[] aliases?: string[] } } export function LargeSelect() { const { data: options, isLoading, } = useQuery({ queryKey: ['obsidian-metadata'], initialData: [], queryFn: async () => { const response = await fetch("/metadata") const fullData: any[] = await response.json(); return R.sortBy(v => -(v.data.backlinks?.length ?? 0), fullData.map(md => ({ value: md.relativePath, label: md.fileName, data: md, }) as Option)); }, }); const [selected, setSelected] = useState