import React, { useCallback, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Modal, ModalHeader, ModalBody, ModalFooter, Form, FormGroup, Label, Input, } from 'reactstrap'; import { toastError, toastSuccess } from '~/client/util/toastr'; import type { IPageForItem } from '~/interfaces/page'; import { usePageSelectModal } from '~/stores/modal'; import loggerFactory from '~/utils/logger'; import type { SelectedPage } from '../../../interfaces/selected-page'; import { createAiAssistant } from '../../services/ai-assistant'; import { useAiAssistantManegementModal } from '../../stores/ai-assistant'; import { SelectedPageList } from '../Common/SelectedPageList'; import styles from './AiAssistantManegementModal.module.scss'; const moduleClass = styles['grw-ai-assistant-manegement'] ?? ''; const logger = loggerFactory('growi:openai:client:components:AiAssistantManegementModal'); const AiAssistantManegementModalSubstance = (): JSX.Element => { const { open: openPageSelectModal } = usePageSelectModal(); const [selectedPages, setSelectedPages] = useState([]); const clickOpenPageSelectModalHandler = useCallback(() => { const onSelected = (page: IPageForItem, isIncludeSubPage: boolean) => { const selectedPageIds = selectedPages.map(selectedPage => selectedPage.page._id); if (page._id != null && !selectedPageIds.includes(page._id)) { setSelectedPages([...selectedPages, { page, isIncludeSubPage }]); } }; openPageSelectModal({ onSelected, isHierarchicalSelectionMode: true }); }, [openPageSelectModal, selectedPages]); const clickRmoveSelectedPageHandler = useCallback((pageId: string) => { setSelectedPages(selectedPages.filter(selectedPage => selectedPage.page._id !== pageId)); }, [selectedPages]); const clickCreateAiAssistantHandler = useCallback(async() => { try { const pagePathPatterns = selectedPages .map(selectedPage => (selectedPage.isIncludeSubPage ? `${selectedPage.page.path}/*` : selectedPage.page.path)) .filter((path): path is string => path !== undefined && path !== null); await createAiAssistant({ name: 'test', description: 'test', additionalInstruction: 'test', pagePathPatterns, shareScope: 'publicOnly', accessScope: 'publicOnly', }); toastSuccess('アシスタントを作成しました'); } catch (err) { toastError('アシスタントの作成に失敗しました'); logger.error(err); } }, [selectedPages]); return (
help
help
help

メモ内容はアシスタントには影響しません。

); }; export const AiAssistantManegementModal = (): JSX.Element => { const { t } = useTranslation(); const { data: aiAssistantManegementModalData, close: closeAiAssistantManegementModal } = useAiAssistantManegementModal(); const isOpened = aiAssistantManegementModalData?.isOpened ?? false; return ( ai_assistant 新規アシスタントの追加 {/* TODO i18n */} { isOpened && ( ) } ); };