This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
outline/app/types/index.js

164 lines
3.2 KiB
JavaScript

// @flow
import { type TFunction } from "react-i18next";
import { type Location } from "react-router-dom";
import theme from "shared/theme";
import RootStore from "stores/RootStore";
import Document from "models/Document";
export type Theme = typeof theme;
export type MenuItemClickable = {|
title: React.Node,
onClick: (event: SyntheticEvent<>) => void | Promise<void>,
visible?: boolean,
selected?: boolean,
disabled?: boolean,
icon?: React.Node,
|};
export type MenuItemWithChildren = {|
title: React.Node,
visible?: boolean,
disabled?: boolean,
style?: Object,
hover?: boolean,
items: MenuItem[],
icon?: React.Node,
|};
export type MenuSeparator = {|
type: "separator",
visible?: boolean,
|};
export type MenuHeading = {|
type: "heading",
visible?: boolean,
title: React.Node,
|};
export type ActionContext = {
isContextMenu: boolean,
isCommandBar: boolean,
activeCollectionId: ?string,
activeDocumentId: ?string,
location: Location,
stores: RootStore,
event?: Event,
t: TFunction,
};
export type Action = {|
id: string,
name: ((ActionContext) => string) | string,
section: ((ActionContext) => string) | string,
shortcut?: string[],
keywords?: string,
iconInContextMenu?: boolean,
icon?: React.Element,
placeholder?: ((ActionContext) => string) | string,
selected?: (ActionContext) => boolean,
visible?: (ActionContext) => boolean,
perform?: (ActionContext) => any,
children?: ((ActionContext) => Action[]) | Action[],
|};
export type CommandBarAction = {|
id: string,
name: string,
section: string,
shortcut?: string[],
keywords?: string,
placeholder?: string,
icon?: React.Element,
perform?: () => any,
children?: string[],
parent?: string,
|};
export type LocationWithState = Location & {
state: {
[key: string]: string,
},
};
export type Toast = {|
id: string,
createdAt: string,
message: string,
type: "warning" | "error" | "info" | "success",
timeout?: number,
reoccurring?: number,
action?: {
text: string,
onClick: () => void,
},
|};
export type FetchOptions = {
prefetch?: boolean,
revisionId?: string,
shareId?: string,
force?: boolean,
};
export type NavigationNode = {|
id: string,
title: string,
url: string,
children: NavigationNode[],
|};
// Pagination response in an API call
export type Pagination = {
limit: number,
nextPath: string,
offset: number,
};
// Pagination request params
export type PaginationParams = {|
limit?: number,
offset?: number,
sort?: string,
direction?: "ASC" | "DESC",
|};
export type SearchResult = {
ranking: number,
context: string,
document: Document,
};
export type MenuItem =
| {|
title: React.Node,
to: string,
visible?: boolean,
selected?: boolean,
disabled?: boolean,
icon?: React.Node,
|}
| MenuItemClickable
| {|
title: React.Node,
href: string,
visible?: boolean,
selected?: boolean,
disabled?: boolean,
level?: number,
icon?: React.Node,
|}
| MenuItemWithChildren
| MenuSeparator
| MenuHeading;
export type ToastOptions = {|
type: "warning" | "error" | "info" | "success",
timeout?: number,
action?: {
text: string,
onClick: () => void,
},
|};