OpenDefaultAiAssistantButton.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import React, { useCallback, useMemo, type JSX } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import { NotAvailable } from '~/client/components/NotAvailable';
  4. import { NotAvailableForGuest } from '~/client/components/NotAvailableForGuest';
  5. import { useIsAiEnabled } from '~/stores-universal/context';
  6. import { useAiAssistantSidebar, useSWRxAiAssistants } from '../../stores/ai-assistant';
  7. import styles from './OpenDefaultAiAssistantButton.module.scss';
  8. const OpenDefaultAiAssistantButtonSubstance = (): JSX.Element => {
  9. const { t } = useTranslation();
  10. const { data: aiAssistantData } = useSWRxAiAssistants();
  11. const { openChat } = useAiAssistantSidebar();
  12. const defaultAiAssistant = useMemo(() => {
  13. if (aiAssistantData == null) {
  14. return null;
  15. }
  16. const allAiAssistants = [...aiAssistantData.myAiAssistants, ...aiAssistantData.teamAiAssistants];
  17. return allAiAssistants.find(aiAssistant => aiAssistant.isDefault);
  18. }, [aiAssistantData]);
  19. const openDefaultAiAssistantButtonClickHandler = useCallback(() => {
  20. if (defaultAiAssistant == null) {
  21. return;
  22. }
  23. openChat(defaultAiAssistant);
  24. }, [defaultAiAssistant, openChat]);
  25. return (
  26. <NotAvailableForGuest>
  27. <NotAvailable isDisabled={defaultAiAssistant == null} title={t('default_ai_assistant.not_set')}>
  28. <button
  29. type="button"
  30. className={`btn btn-search ${styles['btn-open-default-ai-assistant']}`}
  31. onClick={openDefaultAiAssistantButtonClickHandler}
  32. >
  33. <span className="growi-custom-icons fs-4 align-middle lh-1">ai_assistant</span>
  34. </button>
  35. </NotAvailable>
  36. </NotAvailableForGuest>
  37. );
  38. };
  39. const OpenDefaultAiAssistantButton = (): JSX.Element => {
  40. const { data: isAiEnabled } = useIsAiEnabled();
  41. if (!isAiEnabled) {
  42. return <></>;
  43. }
  44. return <OpenDefaultAiAssistantButtonSubstance />;
  45. };
  46. export default OpenDefaultAiAssistantButton;