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

type authorityFN = () => string;

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 15 16
  (authority: authority, error?: React.ReactNode): <T extends IReactComponent>(
    target: T,
  ) => T;
ι™ˆεΈ…'s avatar
ι™ˆεΈ… committed
17 18 19 20 21 22 23 24
}

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

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

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;