AiIntegration.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { useCallback } from 'react';
  2. import { useTranslation } from 'react-i18next';
  3. import { apiv3Put } from '~/client/util/apiv3-client';
  4. import { toastSuccess, toastError } from '~/client/util/toastr';
  5. export const AiIntegration = (): JSX.Element => {
  6. const { t } = useTranslation('admin');
  7. const clickRebuildVectorStoreButtonHandler = useCallback(async() => {
  8. try {
  9. await apiv3Put('/ai-integration/rebuild-vector-store');
  10. toastSuccess(t('ai_integration.rebuild_vector_store_succeeded'));
  11. }
  12. catch {
  13. toastError(t('ai_integration.rebuild_vector_store_failed'));
  14. }
  15. }, [t]);
  16. return (
  17. <div data-testid="admin-ai-integration">
  18. <h2 className="admin-setting-header">{ t('ai_integration.ai_search_management') }</h2>
  19. <div className="row">
  20. <label className="col-md-3 col-form-label text-start text-md-end">{ t('ai_integration.rebuild_vector_store_label') }</label>
  21. <div className="col-md-8">
  22. {/* TODO: https://redmine.weseek.co.jp/issues/153978 */}
  23. <button
  24. type="submit"
  25. className="btn btn-primary"
  26. onClick={clickRebuildVectorStoreButtonHandler}
  27. >
  28. {t('ai_integration.rebuild_vector_store')}
  29. </button>
  30. <p className="form-text text-muted">
  31. {t('ai_integration.rebuild_vector_store_explanation1')}<br />
  32. {t('ai_integration.rebuild_vector_store_explanation2')}<br />
  33. </p>
  34. </div>
  35. </div>
  36. </div>
  37. );
  38. };