Przeglądaj źródła

Create union type for RegistrationMode

Shun Miyazawa 3 lat temu
rodzic
commit
62a38d7094

+ 4 - 3
packages/app/src/components/CompleteUserRegistrationForm.tsx

@@ -4,6 +4,7 @@ import { useTranslation } from 'next-i18next';
 
 import { apiv3Get, apiv3Post } from '~/client/util/apiv3-client';
 import { UserActivationErrorCode } from '~/interfaces/errors/user-activation';
+import { RegistrationMode } from '~/interfaces/registration-mode';
 
 import { toastSuccess, toastError } from '../client/util/apiNotification';
 
@@ -13,7 +14,7 @@ interface Props {
   email: string,
   token: string,
   errorCode?: UserActivationErrorCode,
-  registrationMode: string,
+  registrationMode: RegistrationMode,
   isEmailAuthenticationEnabled: boolean,
 }
 
@@ -65,7 +66,7 @@ const CompleteUserRegistrationForm: React.FC<Props> = (props: Props) => {
 
       setIsSuccessToRagistration(true);
 
-      if (registrationMode !== 'Restricted') {
+      if (registrationMode !== RegistrationMode.RESTRICTED) {
         window.location.href = '/login';
       }
     }
@@ -76,7 +77,7 @@ const CompleteUserRegistrationForm: React.FC<Props> = (props: Props) => {
     }
   }, [name, password, token, username, registrationMode]);
 
-  if (isSuccessToRagistration && registrationMode === 'Restricted') {
+  if (isSuccessToRagistration && registrationMode === RegistrationMode.RESTRICTED) {
     return <CompleteUserRegistration />;
   }
 

+ 5 - 4
packages/app/src/components/LoginForm.tsx

@@ -9,6 +9,7 @@ import ReactCardFlip from 'react-card-flip';
 import { apiv3Post } from '~/client/util/apiv3-client';
 import { LoginErrorCode } from '~/interfaces/errors/login-error';
 import { IErrorV3 } from '~/interfaces/errors/v3-error';
+import { RegistrationMode } from '~/interfaces/registration-mode';
 import { toArrayIfNot } from '~/utils/array-utils';
 
 import { CompleteUserRegistration } from './CompleteUserRegistration';
@@ -19,7 +20,7 @@ type LoginFormProps = {
   email?: string,
   isRegistrationEnabled: boolean,
   isEmailAuthenticationEnabled: boolean,
-  registrationMode: string,
+  registrationMode: RegistrationMode,
   registrationWhiteList: string[],
   isPasswordResetEnabled: boolean,
   isLocalStrategySetup: boolean,
@@ -288,7 +289,7 @@ export const LoginForm = (props: LoginFormProps): JSX.Element => {
         return;
       }
 
-      if (registrationMode === 'Restricted') {
+      if (registrationMode === RegistrationMode.RESTRICTED) {
         setIsSuccessToRagistration(true);
         return;
       }
@@ -324,7 +325,7 @@ export const LoginForm = (props: LoginFormProps): JSX.Element => {
 
     return (
       <React.Fragment>
-        {registrationMode === 'Restricted' && (
+        {registrationMode === RegistrationMode.RESTRICTED && (
           <p className="alert alert-warning">
             {t('page_register.notice.restricted')}
             <br />
@@ -486,7 +487,7 @@ export const LoginForm = (props: LoginFormProps): JSX.Element => {
     emailForRegistrationOrder, props.username, props.name, props.email, registrationWhiteList, switchForm, handleRegisterFormSubmit,
   ]);
 
-  if (registrationMode === 'Restricted' && isSuccessToRagistration && !isEmailAuthenticationEnabled) {
+  if (registrationMode === RegistrationMode.RESTRICTED && isSuccessToRagistration && !isEmailAuthenticationEnabled) {
     return <CompleteUserRegistration />;
   }
 

+ 7 - 0
packages/app/src/interfaces/registration-mode.ts

@@ -0,0 +1,7 @@
+export const RegistrationMode = {
+  OPEN: 'Open',
+  RESTRICTED: 'Restricted',
+  CLOSED: 'Closed',
+} as const;
+
+export type RegistrationMode = typeof RegistrationMode[keyof typeof RegistrationMode];

+ 2 - 3
packages/app/src/pages/login.page.tsx

@@ -1,6 +1,5 @@
 import React from 'react';
 
-
 import {
   NextPage, GetServerSideProps, GetServerSidePropsContext,
 } from 'next';
@@ -9,19 +8,19 @@ import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
 import { NoLoginLayout } from '~/components/Layout/NoLoginLayout';
 import { LoginForm } from '~/components/LoginForm';
 import type { CrowiRequest } from '~/interfaces/crowi-request';
+import type { RegistrationMode } from '~/interfaces/registration-mode';
 
 import {
   useCsrfToken,
   useCurrentPathname,
 } from '../stores/context';
 
-
 import {
   CommonProps, getServerSideCommonProps, useCustomTitle, getNextI18NextConfig,
 } from './utils/commons';
 
 type Props = CommonProps & {
-  registrationMode: string,
+  registrationMode: RegistrationMode,
   pageWithMetaStr: string,
   isMailerSetup: boolean,
   enabledStrategies: unknown,

+ 2 - 1
packages/app/src/pages/user-activation.page.tsx

@@ -5,6 +5,7 @@ import CompleteUserRegistrationForm from '~/components/CompleteUserRegistrationF
 import { NoLoginLayout } from '~/components/Layout/NoLoginLayout';
 import type { CrowiRequest } from '~/interfaces/crowi-request';
 import type { UserActivationErrorCode } from '~/interfaces/errors/user-activation';
+import type { RegistrationMode } from '~/interfaces/registration-mode';
 import { IUserRegistrationOrder } from '~/server/models/user-registration-order';
 
 import {
@@ -15,7 +16,7 @@ type Props = CommonProps & {
   token: string
   email: string
   errorCode?: UserActivationErrorCode
-  registrationMode: string
+  registrationMode: RegistrationMode
   isEmailAuthenticationEnabled: boolean
 }