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

Merge branch 'master' into feat/unified-merge-view

Shun Miyazawa 1 год назад
Родитель
Сommit
c6cdf48219
100 измененных файлов с 157 добавлено и 97 удалено
  1. 14 3
      .github/workflows/reusable-app-prod.yml
  2. 8 1
      apps/app/bin/swagger-jsdoc/definition-apiv3.js
  3. 4 0
      apps/app/bin/swagger-jsdoc/generate-spec-apiv3.sh
  4. 2 2
      apps/app/package.json
  5. 1 1
      apps/app/src/client/components/Admin/AdminHome/EnvVarsTable.tsx
  6. 3 0
      apps/app/src/client/components/Admin/App/AwsSetting.tsx
  7. 3 0
      apps/app/src/client/components/Admin/App/AzureSetting.tsx
  8. 1 1
      apps/app/src/client/components/Admin/App/FileUploadSetting.tsx
  9. 3 0
      apps/app/src/client/components/Admin/App/GcsSetting.tsx
  10. 1 1
      apps/app/src/client/components/Admin/App/MaskedInput.tsx
  11. 1 1
      apps/app/src/client/components/Admin/App/PageBulkExportSettings.tsx
  12. 1 1
      apps/app/src/client/components/Admin/App/QuestionnaireSettings.tsx
  13. 1 1
      apps/app/src/client/components/Admin/Common/AdminInstallButtonRow.tsx
  14. 1 1
      apps/app/src/client/components/Admin/Common/AdminUpdateButtonRow.tsx
  15. 1 1
      apps/app/src/client/components/Admin/Common/LabeledProgressBar.tsx
  16. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizeCssSetting.tsx
  17. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizeFunctionOption.tsx
  18. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizeFunctionSetting.tsx
  19. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizeLayoutSetting.tsx
  20. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizeLogoSetting.tsx
  21. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizeNoscriptSetting.tsx
  22. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizePresentationSetting.tsx
  23. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizeScriptSetting.tsx
  24. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizeSidebarSetting.tsx
  25. 1 1
      apps/app/src/client/components/Admin/Customize/CustomizeThemeOptions.tsx
  26. 3 1
      apps/app/src/client/components/Admin/Customize/CustomizeThemeSetting.tsx
  27. 1 1
      apps/app/src/client/components/Admin/Customize/ThemeColorBox.tsx
  28. 1 1
      apps/app/src/client/components/Admin/ElasticsearchManagement/NormalizeIndicesControls.tsx
  29. 1 1
      apps/app/src/client/components/Admin/ElasticsearchManagement/ReconnectControls.tsx
  30. 1 1
      apps/app/src/client/components/Admin/ExportArchiveData/ArchiveFilesTable.tsx
  31. 1 1
      apps/app/src/client/components/Admin/ExportArchiveData/ArchiveFilesTableMenu.tsx
  32. 3 1
      apps/app/src/client/components/Admin/ExportArchiveData/SelectCollectionsModal.tsx
  33. 3 1
      apps/app/src/client/components/Admin/ExportArchiveDataPage.tsx
  34. 1 1
      apps/app/src/client/components/Admin/ForbiddenPage.tsx
  35. 1 1
      apps/app/src/client/components/Admin/FullTextSearchManagement.tsx
  36. 1 1
      apps/app/src/client/components/Admin/G2GDataTransfer.tsx
  37. 1 1
      apps/app/src/client/components/Admin/G2GDataTransferExportForm.tsx
  38. 1 1
      apps/app/src/client/components/Admin/G2GDataTransferStatusIcon.tsx
  39. 1 1
      apps/app/src/client/components/Admin/ImportData/GrowiArchive/ErrorViewer.tsx
  40. 1 1
      apps/app/src/client/components/Admin/ManageExternalAccount.tsx
  41. 1 1
      apps/app/src/client/components/Admin/MarkdownSetting/MarkDownSettingContents.tsx
  42. 1 1
      apps/app/src/client/components/Admin/MarkdownSetting/WhitelistInput.tsx
  43. 1 1
      apps/app/src/client/components/Admin/NotFoundPage.tsx
  44. 1 1
      apps/app/src/client/components/Admin/Notification/ManageGlobalNotification.tsx
  45. 1 1
      apps/app/src/client/components/Admin/Notification/NotificationTypeIcon.tsx
  46. 1 1
      apps/app/src/client/components/Admin/Security/LdapAuthTest.tsx
  47. 1 1
      apps/app/src/client/components/Admin/SlackIntegration/BotTypeCard.tsx
  48. 3 0
      apps/app/src/client/components/Admin/SlackIntegration/Bridge.tsx
  49. 1 1
      apps/app/src/client/components/Admin/SlackIntegration/CustomBotWithProxyConnectionStatus.tsx
  50. 1 1
      apps/app/src/client/components/Admin/SlackIntegration/CustomBotWithoutProxyConnectionStatus.tsx
  51. 2 1
      apps/app/src/client/components/Admin/SlackIntegration/MessageBasedOnConnection.jsx
  52. 3 0
      apps/app/src/client/components/Admin/SlackIntegration/SlackAppIntegrationControl.tsx
  53. 3 1
      apps/app/src/client/components/Admin/SlackIntegration/SlackIntegration.tsx
  54. 2 1
      apps/app/src/client/components/Admin/UserGroup/UserGroupDropdown.tsx
  55. 1 1
      apps/app/src/client/components/Admin/UserGroup/UserGroupTable.tsx
  56. 1 1
      apps/app/src/client/components/Admin/UserGroupDetail/UserGroupDetailPage.tsx
  57. 3 1
      apps/app/src/client/components/Admin/UserGroupDetail/UserGroupPageList.tsx
  58. 1 1
      apps/app/src/client/components/Admin/UserGroupDetail/UserGroupUserModal.tsx
  59. 1 1
      apps/app/src/client/components/Admin/UserGroupDetail/UserGroupUserTable.tsx
  60. 1 1
      apps/app/src/client/components/Admin/Users/ExternalAccountTable.tsx
  61. 1 1
      apps/app/src/client/components/Admin/Users/GrantAdminButton.tsx
  62. 1 1
      apps/app/src/client/components/Admin/Users/GrantReadOnlyButton.tsx
  63. 1 1
      apps/app/src/client/components/Admin/Users/RevokeAdminButton.tsx
  64. 1 1
      apps/app/src/client/components/Admin/Users/RevokeAdminMenuItem.tsx
  65. 1 1
      apps/app/src/client/components/Admin/Users/RevokeReadOnlyMenuItem.tsx
  66. 1 1
      apps/app/src/client/components/Admin/Users/SortIcons.tsx
  67. 1 1
      apps/app/src/client/components/Admin/Users/StatusSuspendMenuItem.tsx
  68. 2 0
      apps/app/src/client/components/AlertSiteUrlUndefined.tsx
  69. 1 1
      apps/app/src/client/components/AuthorInfo/AuthorInfo.tsx
  70. 1 1
      apps/app/src/client/components/Bookmarks/BookmarkFolderItemControl.tsx
  71. 3 1
      apps/app/src/client/components/Bookmarks/BookmarkFolderMenu.tsx
  72. 1 1
      apps/app/src/client/components/Bookmarks/BookmarkFolderNameInput.tsx
  73. 1 1
      apps/app/src/client/components/Bookmarks/BookmarkItem.tsx
  74. 1 1
      apps/app/src/client/components/Bookmarks/BookmarkItemRenameInput.tsx
  75. 1 1
      apps/app/src/client/components/Bookmarks/DragAndDropWrapper.tsx
  76. 3 1
      apps/app/src/client/components/Comments.tsx
  77. 1 1
      apps/app/src/client/components/Common/DrawerToggler/DrawerToggler.tsx
  78. 1 1
      apps/app/src/client/components/Common/Dropdown/PageItemControl.tsx
  79. 1 1
      apps/app/src/client/components/Common/LazyRenderer.tsx
  80. 1 1
      apps/app/src/client/components/ContentLinkButtons.tsx
  81. 1 1
      apps/app/src/client/components/CustomNavigation/CustomNav.tsx
  82. 2 1
      apps/app/src/client/components/CustomNavigation/CustomNavAndContents.tsx
  83. 1 1
      apps/app/src/client/components/CustomNavigation/CustomTabContent.tsx
  84. 1 1
      apps/app/src/client/components/DataTransferForm.tsx
  85. 1 1
      apps/app/src/client/components/DeleteBookmarkFolderModal.tsx
  86. 1 1
      apps/app/src/client/components/DescendantsPageList.tsx
  87. 3 1
      apps/app/src/client/components/DescendantsPageListModal.tsx
  88. 1 1
      apps/app/src/client/components/EmptyTrashButton.tsx
  89. 1 1
      apps/app/src/client/components/ForbiddenPage.tsx
  90. 1 1
      apps/app/src/client/components/GrantedGroupsInheritanceSelectModal.tsx
  91. 1 1
      apps/app/src/client/components/Hotkeys/Subscribers/ShowShortcutsModal.tsx
  92. 1 1
      apps/app/src/client/components/Icons/FolderIcon.tsx
  93. 1 1
      apps/app/src/client/components/Icons/RecentlyCreatedIcon.tsx
  94. 1 1
      apps/app/src/client/components/IdenticalPathPage.tsx
  95. 3 1
      apps/app/src/client/components/InAppNotification/InAppNotificationDropdown.tsx
  96. 1 1
      apps/app/src/client/components/InAppNotification/InAppNotificationElm.tsx
  97. 1 1
      apps/app/src/client/components/InAppNotification/ModelNotification/ModelNotification.tsx
  98. 1 1
      apps/app/src/client/components/InAppNotification/ModelNotification/PageBulkExportJobModelNotification.tsx
  99. 2 2
      apps/app/src/client/components/InfiniteScroll.tsx
  100. 1 1
      apps/app/src/client/components/InstallerForm.tsx

+ 14 - 3
.github/workflows/reusable-app-prod.yml

@@ -266,7 +266,7 @@ jobs:
       if: always()
       uses: actions/upload-artifact@v4
       with:
-        name: blob-report-${{ matrix.shard }}
+        name: blob-report-${{ matrix.browser }}-${{ matrix.shard }}
         path: blob-report
         retention-days: 30
 
@@ -302,10 +302,21 @@ jobs:
       run: |
         pnpm install --frozen-lockfile
 
+    - name: Download blob reports
+      uses: actions/download-artifact@v4
+      with:
+        pattern: blob-report-*
+        path: all-blob-reports
+        merge-multiple: true
+
     - name: Merge into HTML Report
       run: |
-        mkdir -p all-blob-reports
-        pnpm playwright merge-reports --reporter html ./all-blob-reports
+        mkdir -p playwright-report
+        if [ -z "$(ls all-blob-reports/*.zip all-blob-reports/*.blob 2>/dev/null || true)" ]; then
+          echo "<html><body><h1>No test results available</h1><p>This could be because tests were skipped or all artifacts were not available.</p></body></html>" > playwright-report/index.html
+        else
+          pnpm playwright merge-reports --reporter html all-blob-reports
+        fi
 
     - name: Upload HTML report
       uses: actions/upload-artifact@v4

+ 8 - 1
apps/app/bin/swagger-jsdoc/definition-apiv3.js

@@ -44,10 +44,11 @@ module.exports = {
         'BookmarkFolders',
         'Page',
         'Pages',
+        'PageListing',
         'Revisions',
         'ShareLinks',
         'Users',
-        '',
+        'UserUISettings',
         '',
       ],
     },
@@ -68,6 +69,7 @@ module.exports = {
       name: 'System Management API',
       tags: [
         'Home',
+        'Activity',
         'AdminHome',
         'AppSettings',
         'ExternalUserGroups',
@@ -79,12 +81,17 @@ module.exports = {
         'GROWI to GROWI Transfer',
         'MongoDB',
         'NotificationSetting',
+        'Plugins',
+        'Questionnaire',
         'QuestionnaireSetting',
+        'SlackIntegration',
         'SlackIntegrationSettings',
         'SlackIntegrationSettings (with proxy)',
         'SlackIntegrationSettings (without proxy)',
         'SlackIntegrationLegacySetting',
         'ShareLink Management',
+        'Templates',
+        'Staff',
         'UserGroupRelations',
         'UserGroups',
         'Users Management',

+ 4 - 0
apps/app/bin/swagger-jsdoc/generate-spec-apiv3.sh

@@ -11,5 +11,9 @@ swagger-jsdoc \
   -o "${OUT}" \
   -d "${APP_PATH}/bin/swagger-jsdoc/definition-apiv3.js" \
   "${APP_PATH}/src/features/external-user-group/server/routes/apiv3/*.ts" \
+  "${APP_PATH}/src/features/questionnaire/server/routes/apiv3/*.ts" \
+  "${APP_PATH}/src/features/templates/server/routes/apiv3/*.ts" \
+  "${APP_PATH}/src/features/growi-plugin/server/routes/apiv3/**/*.ts" \
   "${APP_PATH}/src/server/routes/apiv3/**/*.{js,ts}" \
+  "${APP_PATH}/src/server/routes/login.js" \
   "${APP_PATH}/src/server/models/openapi/**/*.{js,ts}"

+ 2 - 2
apps/app/package.json

@@ -168,7 +168,7 @@
     "multer": "~1.4.0",
     "multer-autoreap": "^1.0.3",
     "mustache": "^4.2.0",
-    "next": "^14.2.25",
+    "next": "^14.2.26",
     "next-dynamic-loading-props": "^0.1.1",
     "next-i18next": "^15.3.1",
     "next-superjson": "^0.0.4",
@@ -228,7 +228,7 @@
     "string-width": "=4.2.2",
     "superjson": "^1.9.1",
     "swagger-jsdoc": "^6.2.8",
-    "swr": "^2.2.2",
+    "swr": "^2.3.2",
     "throttle-debounce": "^5.0.0",
     "ts-deepmerge": "^6.2.0",
     "tslib": "^2.8.0",

+ 1 - 1
apps/app/src/client/components/Admin/AdminHome/EnvVarsTable.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 type EnvVarsTableProps = {
   envVars: Record<string, string | number | boolean>,

+ 3 - 0
apps/app/src/client/components/Admin/App/AwsSetting.tsx

@@ -1,5 +1,8 @@
+import type { JSX } from 'react';
+
 import { useTranslation } from 'next-i18next';
 
+
 export type AwsSettingMoleculeProps = {
   s3ReferenceFileWithRelayMode
   s3Region

+ 3 - 0
apps/app/src/client/components/Admin/App/AzureSetting.tsx

@@ -1,7 +1,10 @@
+import type { JSX } from 'react';
+
 import { useTranslation } from 'next-i18next';
 
 import MaskedInput from './MaskedInput';
 
+
 export type AzureSettingMoleculeProps = {
   azureReferenceFileWithRelayMode
   azureUseOnlyEnvVars

+ 1 - 1
apps/app/src/client/components/Admin/App/FileUploadSetting.tsx

@@ -1,4 +1,4 @@
-import type { ChangeEvent } from 'react';
+import type { ChangeEvent, JSX } from 'react';
 import React, { useCallback } from 'react';
 
 import { useTranslation } from 'next-i18next';

+ 3 - 0
apps/app/src/client/components/Admin/App/GcsSetting.tsx

@@ -1,5 +1,8 @@
+import type { JSX } from 'react';
+
 import { useTranslation } from 'next-i18next';
 
+
 export type GcsSettingMoleculeProps = {
   gcsReferenceFileWithRelayMode
   gcsUseOnlyEnvVars

+ 1 - 1
apps/app/src/client/components/Admin/App/MaskedInput.tsx

@@ -1,4 +1,4 @@
-import { useState } from 'react';
+import { useState, type JSX } from 'react';
 
 import styles from './MaskedInput.module.scss';
 

+ 1 - 1
apps/app/src/client/components/Admin/App/PageBulkExportSettings.tsx

@@ -1,5 +1,5 @@
 import {
-  useState, useCallback, useEffect,
+  useState, useCallback, useEffect, type JSX,
 } from 'react';
 
 import { LoadingSpinner } from '@growi/ui/dist/components';

+ 1 - 1
apps/app/src/client/components/Admin/App/QuestionnaireSettings.tsx

@@ -1,5 +1,5 @@
 import {
-  useState, useCallback, useEffect,
+  useState, useCallback, useEffect, type JSX,
 } from 'react';
 
 import { LoadingSpinner } from '@growi/ui/dist/components';

+ 1 - 1
apps/app/src/client/components/Admin/Common/AdminInstallButtonRow.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 type Props = {
   onClick: () => void,

+ 1 - 1
apps/app/src/client/components/Admin/Common/AdminUpdateButtonRow.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

+ 1 - 1
apps/app/src/client/components/Admin/Common/LabeledProgressBar.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { Progress } from 'reactstrap';
 

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizeCssSetting.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 import { Card, CardBody } from 'reactstrap';

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizeFunctionOption.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 type Props = {
   optionId: string

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizeFunctionSetting.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 import { Card, CardBody } from 'reactstrap';

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizeLayoutSetting.tsx

@@ -1,5 +1,5 @@
 import React, {
-  useCallback, useEffect, useState,
+  useCallback, useEffect, useState, type JSX,
 } from 'react';
 
 import { LoadingSpinner } from '@growi/ui/dist/components';

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizeLogoSetting.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback, useState } from 'react';
+import React, { useCallback, useState, type JSX } from 'react';
 
 import { useTranslation } from 'react-i18next';
 

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizeNoscriptSetting.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 import { PrismAsyncLight } from 'react-syntax-highlighter';

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizePresentationSetting.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizeScriptSetting.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 import { PrismAsyncLight } from 'react-syntax-highlighter';

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizeSidebarSetting.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import { LoadingSpinner } from '@growi/ui/dist/components';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/Customize/CustomizeThemeOptions.tsx

@@ -1,4 +1,4 @@
-import React, { useMemo } from 'react';
+import React, { useMemo, type JSX } from 'react';
 
 import { type GrowiThemeMetadata, GrowiThemeSchemeType } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 3 - 1
apps/app/src/client/components/Admin/Customize/CustomizeThemeSetting.tsx

@@ -1,4 +1,6 @@
-import React, { useCallback, useEffect, useState } from 'react';
+import React, {
+  useCallback, useEffect, useState, type JSX,
+} from 'react';
 
 import { PresetThemes, PresetThemesMetadatas } from '@growi/preset-themes';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/Customize/ThemeColorBox.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import type { GrowiThemeMetadata } from '@growi/core';
 

+ 1 - 1
apps/app/src/client/components/Admin/ElasticsearchManagement/NormalizeIndicesControls.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

+ 1 - 1
apps/app/src/client/components/Admin/ElasticsearchManagement/ReconnectControls.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { LoadingSpinner } from '@growi/ui/dist/components';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/ExportArchiveData/ArchiveFilesTable.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { format } from 'date-fns/format';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/ExportArchiveData/ArchiveFilesTableMenu.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

+ 3 - 1
apps/app/src/client/components/Admin/ExportArchiveData/SelectCollectionsModal.tsx

@@ -1,4 +1,6 @@
-import React, { useCallback, useState, useEffect } from 'react';
+import React, {
+  useCallback, useState, useEffect, type JSX,
+} from 'react';
 
 import { useTranslation } from 'next-i18next';
 import {

+ 3 - 1
apps/app/src/client/components/Admin/ExportArchiveDataPage.tsx

@@ -1,4 +1,6 @@
-import React, { useCallback, useEffect, useState } from 'react';
+import React, {
+  useCallback, useEffect, useState, type JSX,
+} from 'react';
 
 import { useTranslation } from 'react-i18next';
 

+ 1 - 1
apps/app/src/client/components/Admin/ForbiddenPage.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import DefaultErrorPage from 'next/error';
 import { useTranslation } from 'react-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/FullTextSearchManagement.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

+ 1 - 1
apps/app/src/client/components/Admin/G2GDataTransfer.tsx

@@ -1,5 +1,5 @@
 import React, {
-  useCallback, useEffect, useState,
+  useCallback, useEffect, useState, type JSX,
 } from 'react';
 
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/G2GDataTransferExportForm.tsx

@@ -1,5 +1,5 @@
 import React, {
-  useState, useEffect, useCallback, useMemo,
+  useState, useEffect, useCallback, useMemo, type JSX,
 } from 'react';
 
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/G2GDataTransferStatusIcon.tsx

@@ -1,4 +1,4 @@
-import React, { type ComponentPropsWithoutRef } from 'react';
+import React, { type ComponentPropsWithoutRef, type JSX } from 'react';
 
 import { LoadingSpinner } from '@growi/ui/dist/components';
 

+ 1 - 1
apps/app/src/client/components/Admin/ImportData/GrowiArchive/ErrorViewer.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { Modal, ModalHeader, ModalBody } from 'reactstrap';
 

+ 1 - 1
apps/app/src/client/components/Admin/ManageExternalAccount.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback, useEffect } from 'react';
+import React, { useCallback, useEffect, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 import Link from 'next/link';

+ 1 - 1
apps/app/src/client/components/Admin/MarkdownSetting/MarkDownSettingContents.tsx

@@ -1,4 +1,4 @@
-import React, { useEffect } from 'react';
+import React, { useEffect, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 import { Card, CardBody } from 'reactstrap';

+ 1 - 1
apps/app/src/client/components/Admin/MarkdownSetting/WhitelistInput.tsx

@@ -1,4 +1,4 @@
-import { useCallback, useRef } from 'react';
+import { useCallback, useRef, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

+ 1 - 1
apps/app/src/client/components/Admin/NotFoundPage.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

+ 1 - 1
apps/app/src/client/components/Admin/Notification/ManageGlobalNotification.tsx

@@ -1,5 +1,5 @@
 import React, {
-  useCallback, useMemo, useEffect, useState,
+  useCallback, useMemo, useEffect, useState, type JSX,
 } from 'react';
 
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/Notification/NotificationTypeIcon.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { UncontrolledTooltip } from 'reactstrap';
 

+ 1 - 1
apps/app/src/client/components/Admin/Security/LdapAuthTest.tsx

@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useState, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

+ 1 - 1
apps/app/src/client/components/Admin/SlackIntegration/BotTypeCard.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { SlackbotType } from '@growi/slack';
 import { useTranslation } from 'next-i18next';

+ 3 - 0
apps/app/src/client/components/Admin/SlackIntegration/Bridge.tsx

@@ -1,7 +1,10 @@
 
+import type { JSX } from 'react';
+
 import { useTranslation } from 'next-i18next';
 import { UncontrolledTooltip } from 'reactstrap';
 
+
 const ProxyCircle = () => (
   <div className="grw-bridge-proxy-circle position-relative">
     <div className="circle position-absolute m-auto z-1 bg-primary border-light rounded-circle">

+ 1 - 1
apps/app/src/client/components/Admin/SlackIntegration/CustomBotWithProxyConnectionStatus.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import type { ConnectionStatus } from '@growi/slack';
 import Image from 'next/image';

+ 1 - 1
apps/app/src/client/components/Admin/SlackIntegration/CustomBotWithoutProxyConnectionStatus.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import type { ConnectionStatus } from '@growi/slack';
 import Image from 'next/image';

+ 2 - 1
apps/app/src/client/components/Admin/SlackIntegration/MessageBasedOnConnection.jsx

@@ -1,6 +1,7 @@
 import React from 'react';
-import PropTypes from 'prop-types';
+
 import { useTranslation } from 'next-i18next';
+import PropTypes from 'prop-types';
 
 
 const MessageBasedOnConnection = (props) => {

+ 3 - 0
apps/app/src/client/components/Admin/SlackIntegration/SlackAppIntegrationControl.tsx

@@ -1,6 +1,9 @@
 
+import type { JSX } from 'react';
+
 import { useTranslation } from 'next-i18next';
 
+
 type Props = {
   slackAppIntegration: {
     _id: string,

+ 3 - 1
apps/app/src/client/components/Admin/SlackIntegration/SlackIntegration.tsx

@@ -1,4 +1,6 @@
-import React, { useState, useEffect, useCallback } from 'react';
+import React, {
+  useState, useEffect, useCallback, type JSX,
+} from 'react';
 
 import { SlackbotType } from '@growi/slack';
 import { LoadingSpinner } from '@growi/ui/dist/components';

+ 2 - 1
apps/app/src/client/components/Admin/UserGroup/UserGroupDropdown.tsx

@@ -1,4 +1,5 @@
-import React, { FC, useCallback } from 'react';
+import type { FC } from 'react';
+import React, { useCallback } from 'react';
 
 import type { IUserGroupHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/UserGroup/UserGroupTable.tsx

@@ -1,4 +1,4 @@
-import type { FC } from 'react';
+import type { FC, JSX } from 'react';
 import React, { useState, useEffect } from 'react';
 
 import type { IUserGroupHasId, IUserGroupRelation, IUserHasId } from '@growi/core';

+ 1 - 1
apps/app/src/client/components/Admin/UserGroupDetail/UserGroupDetailPage.tsx

@@ -1,5 +1,5 @@
 import React, {
-  useState, useCallback, useEffect,
+  useState, useCallback, useEffect, type JSX,
 } from 'react';
 
 import {

+ 3 - 1
apps/app/src/client/components/Admin/UserGroupDetail/UserGroupPageList.tsx

@@ -1,4 +1,6 @@
-import React, { useEffect, useState, useCallback } from 'react';
+import React, {
+  useEffect, useState, useCallback, type JSX,
+} from 'react';
 
 import type { IPageHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/UserGroupDetail/UserGroupUserModal.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import type { IUserGroupHasId, IUserHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/UserGroupDetail/UserGroupUserTable.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { UserPicture } from '@growi/ui/dist/components';
 import { format as dateFnsFormat } from 'date-fns/format';

+ 1 - 1
apps/app/src/client/components/Admin/Users/ExternalAccountTable.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import type { IAdminExternalAccount } from '@growi/core';
 import { format as dateFnsFormat } from 'date-fns/format';

+ 1 - 1
apps/app/src/client/components/Admin/Users/GrantAdminButton.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import type { IUserHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/Users/GrantReadOnlyButton.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import type { IUserHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/Users/RevokeAdminButton.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import type { IUserHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/Users/RevokeAdminMenuItem.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import type { IUserHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/Users/RevokeReadOnlyMenuItem.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import type { IUserHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/Admin/Users/SortIcons.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 type SortIconsProps = {
   onClick: (sortOrder: string) => void,

+ 1 - 1
apps/app/src/client/components/Admin/Users/StatusSuspendMenuItem.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import type { IUserHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 2 - 0
apps/app/src/client/components/AlertSiteUrlUndefined.tsx

@@ -1,3 +1,5 @@
+import type { JSX } from 'react';
+
 import { useTranslation } from 'next-i18next';
 
 import { useSiteUrl } from '~/stores-universal/context';

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

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import type { IUserHasId } from '@growi/core';
 import { isPopulated, type IUser, type Ref } from '@growi/core';

+ 1 - 1
apps/app/src/client/components/Bookmarks/BookmarkFolderItemControl.tsx

@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useState, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 import {

+ 3 - 1
apps/app/src/client/components/Bookmarks/BookmarkFolderMenu.tsx

@@ -1,4 +1,6 @@
-import React, { useCallback, useMemo, useState } from 'react';
+import React, {
+  useCallback, useMemo, useState, type JSX,
+} from 'react';
 
 import { useTranslation } from 'next-i18next';
 import { DropdownItem, DropdownMenu, UncontrolledDropdown } from 'reactstrap';

+ 1 - 1
apps/app/src/client/components/Bookmarks/BookmarkFolderNameInput.tsx

@@ -1,4 +1,4 @@
-import type { ChangeEvent } from 'react';
+import type { ChangeEvent, JSX } from 'react';
 import { useCallback, useRef, useState } from 'react';
 
 import { useRect } from '@growi/ui/dist/utils';

+ 1 - 1
apps/app/src/client/components/Bookmarks/BookmarkItem.tsx

@@ -1,4 +1,4 @@
-import React, { useCallback, useState } from 'react';
+import React, { useCallback, useState, type JSX } from 'react';
 
 import nodePath from 'path';
 

+ 1 - 1
apps/app/src/client/components/Bookmarks/BookmarkItemRenameInput.tsx

@@ -1,4 +1,4 @@
-import type { ChangeEvent } from 'react';
+import type { ChangeEvent, JSX } from 'react';
 import { useCallback, useRef, useState } from 'react';
 
 import { useRect } from '@growi/ui/dist/utils';

+ 1 - 1
apps/app/src/client/components/Bookmarks/DragAndDropWrapper.tsx

@@ -1,4 +1,4 @@
-import type { ReactNode } from 'react';
+import type { ReactNode, JSX } from 'react';
 
 import { useDrag, useDrop } from 'react-dnd';
 

+ 3 - 1
apps/app/src/client/components/Comments.tsx

@@ -1,4 +1,6 @@
-import React, { useEffect, useMemo, useRef } from 'react';
+import React, {
+  useEffect, useMemo, useRef, type JSX,
+} from 'react';
 
 import type { IRevisionHasId } from '@growi/core';
 import { pagePathUtils } from '@growi/core/dist/utils';

+ 1 - 1
apps/app/src/client/components/Common/DrawerToggler/DrawerToggler.tsx

@@ -1,4 +1,4 @@
-import { type ReactNode } from 'react';
+import { type ReactNode, type JSX } from 'react';
 
 import { useDrawerOpened } from '~/stores/ui';
 

+ 1 - 1
apps/app/src/client/components/Common/Dropdown/PageItemControl.tsx

@@ -1,5 +1,5 @@
 import React, {
-  useState, useCallback, useEffect,
+  useState, useCallback, useEffect, type JSX,
 } from 'react';
 
 import {

+ 1 - 1
apps/app/src/client/components/Common/LazyRenderer.tsx

@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react';
+import React, { useEffect, useState, type JSX } from 'react';
 
 type Props = {
   shouldRender: boolean | (() => boolean),

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

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { USER_STATUS, type IUserHasId } from '@growi/core';
 import { useTranslation } from 'next-i18next';

+ 1 - 1
apps/app/src/client/components/CustomNavigation/CustomNav.tsx

@@ -1,5 +1,5 @@
 import React, {
-  useEffect, useState, useRef, useMemo, useCallback,
+  useEffect, useState, useRef, useMemo, useCallback, type JSX,
 } from 'react';
 
 import type { Breakpoint } from '@growi/ui/dist/interfaces';

+ 2 - 1
apps/app/src/client/components/CustomNavigation/CustomNavAndContents.tsx

@@ -1,4 +1,5 @@
-import React, { ReactNode, useState } from 'react';
+import type { ReactNode } from 'react';
+import React, { useState, type JSX } from 'react';
 
 import CustomNav, { CustomNavTab, CustomNavDropdown } from './CustomNav';
 import CustomTabContent from './CustomTabContent';

+ 1 - 1
apps/app/src/client/components/CustomNavigation/CustomTabContent.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import {
   TabContent, TabPane,

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

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

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

@@ -7,9 +7,9 @@ import {
   Modal, ModalBody, ModalFooter, ModalHeader,
 } from 'reactstrap';
 
+import { FolderIcon } from '~/client/components/Icons/FolderIcon';
 import { deleteBookmarkFolder } from '~/client/util/bookmark-utils';
 import { toastError } from '~/client/util/toastr';
-import { FolderIcon } from '~/client/components/Icons/FolderIcon';
 import { useBookmarkFolderDeleteModal } from '~/stores/modal';
 
 

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

@@ -1,4 +1,4 @@
-import React, { useCallback, useState } from 'react';
+import React, { useCallback, useState, type JSX } from 'react';
 
 import type {
   IDataWithMeta,

+ 3 - 1
apps/app/src/client/components/DescendantsPageListModal.tsx

@@ -1,5 +1,7 @@
 
-import React, { useState, useMemo, useEffect } from 'react';
+import React, {
+  useState, useMemo, useEffect, type JSX,
+} from 'react';
 
 import { useTranslation } from 'next-i18next';
 import dynamic from 'next/dynamic';

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

@@ -1,4 +1,4 @@
-import React, { useCallback } from 'react';
+import React, { useCallback, type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

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

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 import { useTranslation } from 'next-i18next';
 

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

@@ -1,4 +1,4 @@
-import { useState } from 'react';
+import { useState, type JSX } from 'react';
 
 import { useTranslation } from 'react-i18next';
 import {

+ 1 - 1
apps/app/src/client/components/Hotkeys/Subscribers/ShowShortcutsModal.tsx

@@ -1,4 +1,4 @@
-import React, { useEffect } from 'react';
+import React, { useEffect, type JSX } from 'react';
 
 import { useShortcutsModal } from '~/stores/modal';
 

+ 1 - 1
apps/app/src/client/components/Icons/FolderIcon.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 type Props = {
   isOpen: boolean

+ 1 - 1
apps/app/src/client/components/Icons/RecentlyCreatedIcon.tsx

@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { type JSX } from 'react';
 
 export const RecentlyCreatedIcon = (): JSX.Element => (
   <svg

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

@@ -1,4 +1,4 @@
-import type { FC } from 'react';
+import type { FC, JSX } from 'react';
 import React from 'react';
 
 import { DevidedPagePath } from '@growi/core/dist/models';

+ 3 - 1
apps/app/src/client/components/InAppNotification/InAppNotificationDropdown.tsx

@@ -1,4 +1,6 @@
-import React, { useState, useEffect, useRef } from 'react';
+import React, {
+  useState, useEffect, useRef, type JSX,
+} from 'react';
 
 import { useTranslation } from 'next-i18next';
 import { useRipple } from 'react-use-ripple';

+ 1 - 1
apps/app/src/client/components/InAppNotification/InAppNotificationElm.tsx

@@ -1,4 +1,4 @@
-import type { FC } from 'react';
+import type { FC, JSX } from 'react';
 import React from 'react';
 
 import type { HasObjectId } from '@growi/core';

+ 1 - 1
apps/app/src/client/components/InAppNotification/ModelNotification/ModelNotification.tsx

@@ -1,4 +1,4 @@
-import type { FC } from 'react';
+import type { FC, JSX } from 'react';
 import React from 'react';
 
 import type { HasObjectId } from '@growi/core';

+ 1 - 1
apps/app/src/client/components/InAppNotification/ModelNotification/PageBulkExportJobModelNotification.tsx

@@ -33,7 +33,7 @@ export const usePageBulkExportJobModelNotification = (notification: IInAppNotifi
 
   notification.parsedSnapshot = pageBulkExportJobSerializers.parseSnapshot(notification.snapshot);
 
-  const getSubMsg = (): React.ReactElement => {
+  const getSubMsg = (): JSX.Element => {
     if (notification.action === SupportedAction.ACTION_PAGE_BULK_EXPORT_COMPLETED && notification.target == null) {
       return <div className="text-danger"><small>{t('page_export.bulk_export_download_expired')}</small></div>;
     }

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

@@ -1,4 +1,4 @@
-import type { Ref } from 'react';
+import type { Ref, JSX } from 'react';
 import React, { useEffect, useState } from 'react';
 
 import { LoadingSpinner } from '@growi/ui/dist/components';
@@ -30,7 +30,7 @@ const useIntersection = <E extends HTMLElement>(): [boolean, Ref<E>] => {
   return [intersecting, (el) => { if (el != null) setElement(el); }];
 };
 
-const LoadingIndicator = (): React.ReactElement => {
+const LoadingIndicator = (): JSX.Element => {
   return (
     <div className="text-muted text-center">
       <LoadingSpinner className="me-1 fs-3" />

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

@@ -1,4 +1,4 @@
-import type { FormEventHandler } from 'react';
+import type { FormEventHandler, JSX } from 'react';
 import { memo, useCallback, useState } from 'react';
 
 import { Lang, AllLang } from '@growi/core';

Некоторые файлы не были показаны из-за большого количества измененных файлов