Просмотр исходного кода

fix non-autofixable biome errors

Futa Arai 3 месяцев назад
Родитель
Сommit
d74c858e76

+ 1 - 5
apps/app/src/client/components/CompleteUserRegistrationForm.tsx

@@ -121,11 +121,7 @@ export const CompleteUserRegistrationForm: React.FC<Props> = (props: Props) => {
               </p>
               </p>
             )}
             )}
 
 
-            <form
-              role="form"
-              onSubmit={handleSubmitRegistration}
-              id="registration-form"
-            >
+            <form onSubmit={handleSubmitRegistration} id="registration-form">
               <input type="hidden" name="token" value={token} />
               <input type="hidden" name="token" value={token} />
 
 
               <div className="input-group">
               <div className="input-group">

+ 1 - 1
apps/app/src/client/components/DataTransferForm.tsx

@@ -48,7 +48,7 @@ const DataTransferForm = (): JSX.Element => {
         <p className="mb-1">{t('g2g_data_transfer.once_transfer_key_used')}</p>
         <p className="mb-1">{t('g2g_data_transfer.once_transfer_key_used')}</p>
         <p
         <p
           className="mb-0"
           className="mb-0"
-          // eslint-disable-next-line react/no-danger
+          // biome-ignore lint/security/noDangerouslySetInnerHtml: translation contains HTML link
           dangerouslySetInnerHTML={{
           dangerouslySetInnerHTML={{
             __html: t('g2g_data_transfer.transfer_to_growi_cloud', {
             __html: t('g2g_data_transfer.transfer_to_growi_cloud', {
               documentationUrl,
               documentationUrl,

+ 1 - 1
apps/app/src/client/components/IdenticalPathPage.tsx

@@ -46,7 +46,7 @@ const IdenticalPathAlert: FC<IdenticalPathAlertProps> = (
         })}
         })}
         <br />
         <br />
         <span
         <span
-          // eslint-disable-next-line react/no-danger
+          // biome-ignore lint/security/noDangerouslySetInnerHtml: translation contains HTML link
           dangerouslySetInnerHTML={{
           dangerouslySetInnerHTML={{
             __html: t('See_more_detail_on_new_schema', {
             __html: t('See_more_detail_on_new_schema', {
               title: t('GROWI.5.0_new_schema'),
               title: t('GROWI.5.0_new_schema'),

+ 4 - 9
apps/app/src/client/components/InstallerForm.tsx

@@ -117,7 +117,7 @@ const InstallerForm = memo((props: Props): JSX.Element => {
           <div className="col-12">
           <div className="col-12">
             <div className="alert alert-danger text-center">
             <div className="alert alert-danger text-center">
               {registerErrors.map((err) => (
               {registerErrors.map((err) => (
-                <span>
+                <span key={err.message}>
                   {tWithOpt(err.message, err.args)}
                   {tWithOpt(err.message, err.args)}
                   <br />
                   <br />
                 </span>
                 </span>
@@ -126,12 +126,7 @@ const InstallerForm = memo((props: Props): JSX.Element => {
           </div>
           </div>
         )}
         )}
 
 
-        <form
-          role="form"
-          id="register-form"
-          className="ps-1"
-          onSubmit={submitHandler}
-        >
+        <form id="register-form" className="ps-1" onSubmit={submitHandler}>
           <div className="dropdown mb-3">
           <div className="dropdown mb-3">
             <div className="input-group dropdown-with-icon">
             <div className="input-group dropdown-with-icon">
               <span className="p-2 text-white opacity-75">
               <span className="p-2 text-white opacity-75">
@@ -149,9 +144,9 @@ const InstallerForm = memo((props: Props): JSX.Element => {
                 <span className="float-start">{t('meta.display_name')}</span>
                 <span className="float-start">{t('meta.display_name')}</span>
               </button>
               </button>
               <input type="hidden" name="registerForm[app:globalLang]" />
               <input type="hidden" name="registerForm[app:globalLang]" />
-              <div className="dropdown-menu" aria-labelledby="dropdownLanguage">
+              <div className="dropdown-menu">
                 {i18nConfig.locales.map((locale) => {
                 {i18nConfig.locales.map((locale) => {
-                  let fixedT;
+                  let fixedT: ((key: string) => string) | undefined;
                   if (i18n != null) {
                   if (i18n != null) {
                     fixedT = i18n.getFixedT(locale);
                     fixedT = i18n.getFixedT(locale);
                     i18n.loadLanguages(i18nConfig.locales);
                     i18n.loadLanguages(i18nConfig.locales);

+ 2 - 6
apps/app/src/client/components/InvitedForm.tsx

@@ -67,7 +67,7 @@ export const InvitedForm = (props: InvitedFormProps): JSX.Element => {
           <p className="alert alert-danger">
           <p className="alert alert-danger">
             {loginErrors.map((err) => {
             {loginErrors.map((err) => {
               return (
               return (
-                <span>
+                <span key={err.message}>
                   {t(err.message)}
                   {t(err.message)}
                   <br />
                   <br />
                 </span>
                 </span>
@@ -92,11 +92,7 @@ export const InvitedForm = (props: InvitedFormProps): JSX.Element => {
   return (
   return (
     <div className="nologin-dialog px-3 pb-3 mx-auto" id="nologin-dialog">
     <div className="nologin-dialog px-3 pb-3 mx-auto" id="nologin-dialog">
       {formNotification()}
       {formNotification()}
-      <form
-        role="form"
-        onSubmit={handleSubmit(submitHandler)}
-        id="invited-form"
-      >
+      <form onSubmit={handleSubmit(submitHandler)} id="invited-form">
         {/* Email Form */}
         {/* Email Form */}
         <div className="input-group">
         <div className="input-group">
           <span className="input-group-text">
           <span className="input-group-text">

+ 15 - 4
apps/app/src/client/components/NotFoundPage.tsx

@@ -9,25 +9,36 @@ type NotFoundPageProps = {
   path: string;
   path: string;
 };
 };
 
 
+const PageListIcon = () => (
+  <span className="material-symbols-outlined">subject</span>
+);
+const TimelineIcon = () => (
+  <span className="material-symbols-outlined">timeline</span>
+);
+
 const NotFoundPage = (props: NotFoundPageProps): JSX.Element => {
 const NotFoundPage = (props: NotFoundPageProps): JSX.Element => {
   const { t } = useTranslation();
   const { t } = useTranslation();
 
 
   const { path } = props;
   const { path } = props;
 
 
+  const PageListContent = useMemo(() => {
+    return () => <DescendantsPageList path={path} />;
+  }, [path]);
+
   const navTabMapping = useMemo(() => {
   const navTabMapping = useMemo(() => {
     return {
     return {
       pagelist: {
       pagelist: {
-        Icon: () => <span className="material-symbols-outlined">subject</span>,
-        Content: () => <DescendantsPageList path={path} />,
+        Icon: PageListIcon,
+        Content: PageListContent,
         i18n: t('page_list'),
         i18n: t('page_list'),
       },
       },
       timeLine: {
       timeLine: {
-        Icon: () => <span className="material-symbols-outlined">timeline</span>,
+        Icon: TimelineIcon,
         Content: PageTimeline,
         Content: PageTimeline,
         i18n: t('Timeline View'),
         i18n: t('Timeline View'),
       },
       },
     };
     };
-  }, [path, t]);
+  }, [PageListContent, t]);
 
 
   return (
   return (
     <div className="d-edit-none">
     <div className="d-edit-none">

+ 1 - 1
apps/app/src/client/components/PasswordResetExecutionForm.tsx

@@ -54,7 +54,7 @@ const PasswordResetExecutionForm: FC = () => {
   };
   };
 
 
   return (
   return (
-    <form role="form" onSubmit={changePassword}>
+    <form onSubmit={changePassword}>
       <div>
       <div>
         <div className="input-group">
         <div className="input-group">
           <input
           <input

+ 1 - 1
apps/app/src/client/components/PrivateLegacyPagesMigrationModal.tsx

@@ -112,7 +112,7 @@ const PrivateLegacyPagesMigrationModalSubstance = ({
       </ModalHeader>
       </ModalHeader>
       <ModalBody>
       <ModalBody>
         <div className="grw-scrollable-modal-body pb-1">
         <div className="grw-scrollable-modal-body pb-1">
-          <label>{t('private_legacy_pages.modal.converting_pages')}:</label>
+          <div>{t('private_legacy_pages.modal.converting_pages')}:</div>
           <br />
           <br />
           {/* Todo: change the way to show path on modal when too many pages are selected */}
           {/* Todo: change the way to show path on modal when too many pages are selected */}
           {/* https://redmine.weseek.co.jp/issues/82787 */}
           {/* https://redmine.weseek.co.jp/issues/82787 */}

+ 5 - 5
apps/app/src/client/components/SearchTypeahead.tsx

@@ -93,19 +93,19 @@ const SearchTypeahead: ForwardRefRenderFunction<IFocusable, Props> = (
 
 
   const typeaheadRef = useRef<TypeaheadRef>(null);
   const typeaheadRef = useRef<TypeaheadRef>(null);
 
 
-  const focusToTypeahead = () => {
+  const focusToTypeahead = useCallback(() => {
     const instance = typeaheadRef.current;
     const instance = typeaheadRef.current;
     if (instance != null) {
     if (instance != null) {
       instance.focus();
       instance.focus();
     }
     }
-  };
+  }, []);
 
 
-  const clearTypeahead = () => {
+  const clearTypeahead = useCallback(() => {
     const instance = typeaheadRef.current;
     const instance = typeaheadRef.current;
     if (instance != null) {
     if (instance != null) {
       instance.clear();
       instance.clear();
     }
     }
-  };
+  }, []);
 
 
   // publish focus()
   // publish focus()
   useImperativeHandle(ref, () => ({
   useImperativeHandle(ref, () => ({
@@ -126,7 +126,7 @@ const SearchTypeahead: ForwardRefRenderFunction<IFocusable, Props> = (
         onSearch('');
         onSearch('');
       }
       }
     },
     },
-    [onSearch],
+    [onSearch, clearTypeahead, focusToTypeahead],
   );
   );
 
 
   const searchHandler = useCallback(
   const searchHandler = useCallback(

+ 1 - 0
apps/app/src/client/components/StickyStretchableScroller.tsx

@@ -86,6 +86,7 @@ export const StickyStretchableScroller = (
     [resetScrollbar],
     [resetScrollbar],
   );
   );
 
 
+  // biome-ignore lint/correctness/useExhaustiveDependencies: ignore
   useEffect(() => {
   useEffect(() => {
     resetScrollbarDebounced();
     resetScrollbarDebounced();
   }, [isSticky, resetScrollbarDebounced]);
   }, [isSticky, resetScrollbarDebounced]);

+ 2 - 2
apps/app/src/client/components/TagCloudBox.tsx

@@ -32,14 +32,14 @@ const TagCloudBox: FC<Props> = memo((props: Props & typeof defaultProps) => {
         : tag.name;
         : tag.name;
 
 
     return (
     return (
-      <a
+      <button
         key={tag.name}
         key={tag.name}
         type="button"
         type="button"
         className="grw-tag badge me-2"
         className="grw-tag badge me-2"
         onClick={() => setSearchKeyword(`tag:${tag.name}`)}
         onClick={() => setSearchKeyword(`tag:${tag.name}`)}
       >
       >
         {tagNameFormat}
         {tagNameFormat}
-      </a>
+      </button>
     );
     );
   });
   });
 
 

+ 5 - 1
apps/app/src/client/components/TrashPageList.tsx

@@ -104,6 +104,10 @@ const DescendantsPageListForTrash = (): JSX.Element => {
   );
   );
 };
 };
 
 
+const PageListIcon = () => (
+  <span className="material-symbols-outlined">subject</span>
+);
+
 export const TrashPageList = (): JSX.Element => {
 export const TrashPageList = (): JSX.Element => {
   const { t } = useTranslation();
   const { t } = useTranslation();
   const emptyTrashButton = useEmptyTrashButton();
   const emptyTrashButton = useEmptyTrashButton();
@@ -111,7 +115,7 @@ export const TrashPageList = (): JSX.Element => {
   const navTabMapping = useMemo(() => {
   const navTabMapping = useMemo(() => {
     return {
     return {
       pagelist: {
       pagelist: {
-        Icon: () => <span className="material-symbols-outlined">subject</span>,
+        Icon: PageListIcon,
         Content: DescendantsPageListForTrash,
         Content: DescendantsPageListForTrash,
         i18n: t('page_list'),
         i18n: t('page_list'),
       },
       },