OpenDefaultAiAssistantButton.tsx 1.8 KB

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