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

Merge pull request #9186 from weseek/feat/154432-make-ai-chat-unavailable-to-guest-users

feat: Make AI chat unavailable to guest users
Shun Miyazawa 1 год назад
Родитель
Сommit
844699a52a

+ 16 - 9
apps/app/src/client/components/PageControls/RagSearchButton.tsx

@@ -1,27 +1,34 @@
 import React, { useCallback } from 'react';
 import React, { useCallback } from 'react';
 
 
+import { NotAvailableForGuest } from '~/client/components/NotAvailableForGuest';
+import { useIsAiEnabled } from '~/stores-universal/context';
 import { useRagSearchModal } from '~/stores/rag-search';
 import { useRagSearchModal } from '~/stores/rag-search';
 
 
 import styles from './RagSearchButton.module.scss';
 import styles from './RagSearchButton.module.scss';
 
 
 const RagSearchButton = (): JSX.Element => {
 const RagSearchButton = (): JSX.Element => {
-
+  const { data: isAiEnabled } = useIsAiEnabled();
   const { open: openRagSearchModal } = useRagSearchModal();
   const { open: openRagSearchModal } = useRagSearchModal();
 
 
   const ragSearchButtonClickHandler = useCallback(() => {
   const ragSearchButtonClickHandler = useCallback(() => {
     openRagSearchModal();
     openRagSearchModal();
   }, [openRagSearchModal]);
   }, [openRagSearchModal]);
 
 
+  if (!isAiEnabled) {
+    return <></>;
+  }
 
 
   return (
   return (
-    <button
-      type="button"
-      className={`btn btn-search ${styles['btn-rag-search']}`}
-      onClick={ragSearchButtonClickHandler}
-      data-testid="open-search-modal-button"
-    >
-      <span className="material-symbols-outlined">chat</span>
-    </button>
+    <NotAvailableForGuest>
+      <button
+        type="button"
+        className={`btn btn-search ${styles['btn-rag-search']}`}
+        onClick={ragSearchButtonClickHandler}
+        data-testid="open-search-modal-button"
+      >
+        <span className="material-symbols-outlined">chat</span>
+      </button>
+    </NotAvailableForGuest>
   );
   );
 };
 };
 
 

+ 7 - 1
apps/app/src/pages/[[...path]].page.tsx

@@ -44,7 +44,7 @@ import {
   useIsAllReplyShown, useIsContainerFluid, useIsNotCreatable,
   useIsAllReplyShown, useIsContainerFluid, useIsNotCreatable,
   useIsUploadAllFileAllowed, useIsUploadEnabled,
   useIsUploadAllFileAllowed, useIsUploadEnabled,
   useElasticsearchMaxBodyLengthToIndex,
   useElasticsearchMaxBodyLengthToIndex,
-  useIsLocalAccountRegistrationEnabled,
+  useIsLocalAccountRegistrationEnabled, useIsAiEnabled,
 } from '~/stores-universal/context';
 } from '~/stores-universal/context';
 import { useEditingMarkdown } from '~/stores/editor';
 import { useEditingMarkdown } from '~/stores/editor';
 import {
 import {
@@ -190,6 +190,8 @@ type Props = CommonProps & {
   yjsData: CurrentPageYjsData,
   yjsData: CurrentPageYjsData,
 
 
   rendererConfig: RendererConfig,
   rendererConfig: RendererConfig,
+
+  aiEnabled: boolean,
 };
 };
 
 
 const Page: NextPageWithLayout<Props> = (props: Props) => {
 const Page: NextPageWithLayout<Props> = (props: Props) => {
@@ -242,6 +244,8 @@ const Page: NextPageWithLayout<Props> = (props: Props) => {
 
 
   useIsLocalAccountRegistrationEnabled(props.isLocalAccountRegistrationEnabled);
   useIsLocalAccountRegistrationEnabled(props.isLocalAccountRegistrationEnabled);
 
 
+  useIsAiEnabled(props.aiEnabled);
+
   const { pageWithMeta } = props;
   const { pageWithMeta } = props;
 
 
   const pageId = pageWithMeta?.data._id;
   const pageId = pageWithMeta?.data._id;
@@ -546,6 +550,8 @@ function injectServerConfigurations(context: GetServerSidePropsContext, props: P
     searchService, configManager, aclService,
     searchService, configManager, aclService,
   } = crowi;
   } = crowi;
 
 
+  props.aiEnabled = configManager.getConfig('crowi', 'app:aiEnabled');
+
   props.isSearchServiceConfigured = searchService.isConfigured;
   props.isSearchServiceConfigured = searchService.isConfigured;
   props.isSearchServiceReachable = searchService.isReachable;
   props.isSearchServiceReachable = searchService.isReachable;
   props.isSearchScopeChildrenAsDefault = configManager.getConfig('crowi', 'customize:isSearchScopeChildrenAsDefault');
   props.isSearchScopeChildrenAsDefault = configManager.getConfig('crowi', 'customize:isSearchScopeChildrenAsDefault');

+ 4 - 0
apps/app/src/stores-universal/context.tsx

@@ -206,6 +206,10 @@ export const useIsLocalAccountRegistrationEnabled = (initialData?: boolean): SWR
   return useContextSWR('isLocalAccountRegistrationEnabled', initialData);
   return useContextSWR('isLocalAccountRegistrationEnabled', initialData);
 };
 };
 
 
+export const useIsAiEnabled = (initialData?: boolean): SWRResponse<boolean, Error> => {
+  return useContextSWR('isAiEnabled', initialData);
+};
+
 /** **********************************************************
 /** **********************************************************
  *                     Computed contexts
  *                     Computed contexts
  *********************************************************** */
  *********************************************************** */