pretur.navigation
Version:
SPA navigation helper using react and redux
82 lines (81 loc) • 2.92 kB
TypeScript
/// <reference types="react" />
import { ComponentClass, StatelessComponent } from 'react';
import { Dispatch, ReducibleNode } from 'reducible-node';
import { PageInstance } from './pageInstance';
import { Navigator } from './navigator';
export declare type ValidTreeNode = {
[path: string]: PageFolder | Page;
};
export declare type PageTreeNode<T extends ValidTreeNode = {}> = T;
export interface PageFolder<T extends ValidTreeNode = {}> {
path: string;
title: string;
contents: PageTreeNode<T>;
}
export declare function folder<T extends ValidTreeNode = {}>(title: string, contents: PageTreeNode<T>): PageFolder<T>;
export interface ReplaceOptions<TParams> {
mutex?: string;
params?: TParams;
title?: string;
parent?: string;
openedFrom?: string;
}
export interface OpenOptions<TParams> extends ReplaceOptions<TParams> {
insertAfterMutex?: string;
}
export interface Page<TParams = any, TState = any> {
readonly type: {
params: TParams;
state: TState;
};
title?: string;
path: string;
hidden: boolean;
persistent: boolean;
component: ComponentClass<any> | StatelessComponent<any>;
node: ReducibleNode<TState>;
open: (dispatch: Dispatch, navigator: Navigator, opt?: OpenOptions<TParams>) => void;
replace: (dispatch: Dispatch, navigator: Navigator, target: string, opt?: ReplaceOptions<TParams>) => void;
}
export interface BuildPageOptions {
title?: string;
hidden?: boolean;
persistent?: boolean;
}
export declare function buildPage<TParams, TState>(component: ComponentClass<any> | StatelessComponent<any>, node: ReducibleNode<TState>, options?: BuildPageOptions): Page<TParams, TState>;
export interface PageOccurrence<TParams = {}> {
path: string;
mutex: string;
params?: TParams;
title?: string;
parent?: string;
openedFrom?: string;
}
export declare type PathTreeNode = string | PathTree;
export interface PathTree extends Array<PathTreeNode> {
}
export declare class Pages<T extends ValidTreeNode = any> {
private pages;
private folders;
private calculatedPathTree;
private calculatedFolderContents;
private calculatedFilteredPathTree;
private calculatedFilteredFolderContents;
readonly prefix: string;
readonly tree: PageTreeNode<T>;
constructor(prefix: string, root: PageTreeNode<T>);
hasPage(path: string): boolean;
getPage(path: string): Page;
hasFolder(path: string): boolean;
getFolder(path: string): PageFolder;
isHidden(path: string): boolean;
readonly pathTree: PathTree;
readonly folderContents: {
[folder: string]: string[];
};
readonly filteredPathTree: PathTree;
readonly filteredFolderContents: {
[folder: string]: string[];
};
buildInstance<TState, TReducerBuilderData>(occurrence: PageOccurrence<TReducerBuilderData>): PageInstance<TState, TReducerBuilderData>;
}