@e280/quay
Version:
File-browser and outliner UI for the web
34 lines (29 loc) • 1.35 kB
text/typescript
import {Permission} from "./permissions.js"
import {Codex} from "./aspects/codex/codex.js"
import {Schema} from "./aspects/codex/parts/types.js"
import {CodexItem} from "./aspects/codex/parts/codex-item.js"
import { Content } from "@benev/slate"
export type SearchFn<Sc extends Schema> = (item: CodexItem<Sc>) => boolean
export type SortFn<Sc extends Schema> = (a: CodexItem<Sc>, b: CodexItem<Sc>) => number
export interface GroupConfig<Sc extends Schema> {
codex: Codex<Sc>
root: CodexItem<Sc>
defaultFilter: string
filters: Map<string, SearchFn<Sc>>
defaultSort: string
sorts: Map<string, SortFn<Sc>>
search: (terms: string[], item: CodexItem<Sc>) => boolean
renderIcon: (item: CodexItem<Sc>, opened: boolean) => Content
renderLabel: (item: CodexItem<Sc>) => Content
renderPreview: (item: CodexItem<Sc>) => Content
permissions: (item: CodexItem<Sc>) => Permission
}
// export interface GroupActions<Sc extends Schema> {
// newFolder: (parent: CodexItem<Sc>) => Promise<void>
// move: (item: CodexItem<Sc>, target: CodexItem<Sc>) => Promise<void>
// delete: (item: CodexItem<Sc>) => Promise<void>
// rename: (item: CodexItem<Sc>, newName: string) => Promise<void>
// upload: (files: File[], target: CodexItem<Sc>) => Promise<void>
// search: (terms: string[]) => Promise<CodexItem<Sc>[]>
// refresh: () => Promise<void>
// }