index.d.ts 1.12 KB
Newer Older
jim's avatar
jim committed
1 2
import * as React from 'react';
import { RouteProps } from 'react-router';
ι™ˆεΈ…'s avatar
ι™ˆεΈ… committed
3

ι™ˆεΈ…'s avatar
ι™ˆεΈ… committed
4
type authorityFN = (currentAuthority?: string) => boolean;
ι™ˆεΈ…'s avatar
ι™ˆεΈ… committed
5 6 7

type authority = string | Array<string> | authorityFN | Promise<any>;

jim's avatar
jim committed
8 9 10 11 12
export type IReactComponent<P = any> =
  | React.StatelessComponent<P>
  | React.ComponentClass<P>
  | React.ClassicComponentClass<P>;

ι™ˆεΈ…'s avatar
ι™ˆεΈ… committed
13
interface Secured {
jim's avatar
jim committed
14
  (authority: authority, error?: React.ReactNode): <T extends IReactComponent>(target: T) => T;
ι™ˆεΈ…'s avatar
ι™ˆεΈ… committed
15 16 17 18 19
}

export interface AuthorizedRouteProps extends RouteProps {
  authority: authority;
}
jim's avatar
jim committed
20
export class AuthorizedRoute extends React.Component<AuthorizedRouteProps, any> {}
ι™ˆεΈ…'s avatar
ι™ˆεΈ… committed
21 22

interface check {
jim's avatar
jim committed
23
  <T extends IReactComponent, S extends IReactComponent>(
ι™ˆεΈ…'s avatar
ι™ˆεΈ… committed
24
    authority: authority,
jim's avatar
jim committed
25
    target: T,
jim's avatar
jim committed
26
    Exception: S
jim's avatar
jim committed
27
  ): T | S;
ι™ˆεΈ…'s avatar
ι™ˆεΈ… committed
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
}

interface AuthorizedProps {
  authority: authority;
  noMatch?: React.ReactNode;
}

export class Authorized extends React.Component<AuthorizedProps, any> {
  static Secured: Secured;
  static AuthorizedRoute: typeof AuthorizedRoute;
  static check: check;
}

declare function renderAuthorize(currentAuthority: string): typeof Authorized;

export default renderAuthorize;