pankod/refine

View on GitHub
packages/core/src/components/pages/auth/types.tsx

Summary

Maintainability
A
3 hrs
Test Coverage
import React, { PropsWithChildren } from "react";

export type OAuthProvider = {
  name: string;
  icon?: React.ReactNode;
  label?: string;
};

export interface LoginFormTypes {
  email?: string;
  password?: string;
  remember?: boolean;
  providerName?: string;
  redirectPath?: string;
}

export interface RegisterFormTypes {
  email?: string;
  password?: string;
  providerName?: string;
}

export interface ForgotPasswordFormTypes {
  email?: string;
}

export interface UpdatePasswordFormTypes {
  password?: string;
  confirmPassword?: string;
}

/**
 * This should be the base type for `AuthPage` component implementations in UI integrations.
 */
export type AuthPageProps<
  TWrapperProps extends {} = Record<keyof any, unknown>,
  TContentProps extends {} = Record<keyof any, unknown>,
  TFormProps extends {} = Record<keyof any, unknown>,
> = (
  | PropsWithChildren<{
      /**
       * @description The type of the auth page.
       * @default "login"
       * @optional
       */
      type?: "login";
      /**
       * @description Providers array for login with third party auth services.
       * @type [OAuthProvider](/docs/api-reference/core/components/auth-page/#interface)
       * @optional
       */
      providers?: OAuthProvider[];
      /**
       * @description Render a redirect to register page button node. If set to false, register button will not be rendered.
       * @default `"/register"`
       * @optional
       */
      registerLink?: React.ReactNode;
      /**
       * @description Render a redirect to forgot password page button node. If set to false, forgot password button will not be rendered.
       * @default `"/forgot-password"`
       * @optional
       */
      forgotPasswordLink?: React.ReactNode;
      /**
       * @description Render a remember me button node. If set to false, remember me button will not be rendered.
       * @optional
       */
      rememberMe?: React.ReactNode;
      /**
       * @description Can be used to hide the form components
       * @optional
       */
      hideForm?: boolean;
    }>
  | PropsWithChildren<{
      /**
       * @description The type of the auth page.
       * @optional
       */
      type: "register";
      /**
       * @description Providers array for login with third party auth services.
       * @optional
       */
      providers?: OAuthProvider[];
      /**
       * @description Render a redirect to login page button node. If set to false, login button will not be rendered.
       * @default `"/login"`
       * @optional
       */
      loginLink?: React.ReactNode;
      /**
       * @description Can be used to hide the form components
       * @optional
       */
      hideForm?: boolean;
    }>
  | PropsWithChildren<{
      /**
       * @description The type of the auth page.
       * @optional
       */
      type: "forgotPassword";
      /**
       * @description render a redirect to login page button node. If set to false, login button will not be rendered.
       * @optional
       */
      loginLink?: React.ReactNode;
    }>
  | PropsWithChildren<{
      /**
       * @description The type of the auth page.
       * @optional
       */
      type: "updatePassword";
    }>
) & {
  /**
   * @description The props that will be passed to the wrapper component.
   * @optional
   */
  wrapperProps?: TWrapperProps;
  /**
   * @description The props that will be passed to the content component.
   * @optional
   */
  contentProps?: TContentProps;
  /**
   * @description This method gives you the ability to render a custom content node.
   * @optional
   */
  renderContent?: (
    content: React.ReactNode,
    title: React.ReactNode,
  ) => React.ReactNode;
  /**
   * @description Can be used to pass additional properties for the `Form`
   * @optional
   */
  formProps?: TFormProps;
  /**
   * @description Can be used to pass `Title`
   * @optional
   *  */
  title?: React.ReactNode;
};

/**
 * This should be the base type for `AuthPage` `Login` component implementations in UI integrations.
 */
export type LoginPageProps<
  TWrapperProps extends {} = Record<keyof any, unknown>,
  TContentProps extends {} = Record<keyof any, unknown>,
  TFormProps extends {} = Record<keyof any, unknown>,
> = PropsWithChildren<{
  providers?: OAuthProvider[];
  registerLink?: React.ReactNode;
  forgotPasswordLink?: React.ReactNode;
  rememberMe?: React.ReactNode;
  wrapperProps?: TWrapperProps;
  renderContent?: (
    content: React.ReactNode,
    title: React.ReactNode,
  ) => React.ReactNode;
  contentProps?: TContentProps;
  formProps?: TFormProps;
  title?: React.ReactNode;
  hideForm?: boolean;
}>;

/**
 * This should be the base type for `AuthPage` `Register` component implementations in UI integrations.
 */
export type RegisterPageProps<
  TWrapperProps extends {} = Record<keyof any, unknown>,
  TContentProps extends {} = Record<keyof any, unknown>,
  TFormProps extends {} = Record<keyof any, unknown>,
> = PropsWithChildren<{
  providers?: OAuthProvider[];
  loginLink?: React.ReactNode;
  wrapperProps?: TWrapperProps;
  renderContent?: (
    content: React.ReactNode,
    title: React.ReactNode,
  ) => React.ReactNode;
  contentProps?: TContentProps;
  formProps?: TFormProps;
  title?: React.ReactNode;
  hideForm?: boolean;
}>;

/**
 * This should be the base type for `AuthPage` `Reset Password` component implementations in UI integrations.
 */
export type ForgotPasswordPageProps<
  TWrapperProps extends {} = Record<keyof any, unknown>,
  TContentProps extends {} = Record<keyof any, unknown>,
  TFormProps extends {} = Record<keyof any, unknown>,
> = PropsWithChildren<{
  loginLink?: React.ReactNode;
  wrapperProps?: TWrapperProps;
  renderContent?: (
    content: React.ReactNode,
    title: React.ReactNode,
  ) => React.ReactNode;
  contentProps?: TContentProps;
  formProps?: TFormProps;
  title?: React.ReactNode;
}>;

/**
 * This should be the base type for `AuthPage` `Update Password` component implementations in UI integrations.
 */
export type UpdatePasswordPageProps<
  TWrapperProps extends {} = Record<keyof any, unknown>,
  TContentProps extends {} = Record<keyof any, unknown>,
  TFormProps extends {} = Record<keyof any, unknown>,
> = PropsWithChildren<{
  wrapperProps?: TWrapperProps;
  renderContent?: (
    content: React.ReactNode,
    title: React.ReactNode,
  ) => React.ReactNode;
  contentProps?: TContentProps;
  formProps?: TFormProps;
  title?: React.ReactNode;
}>;