UNPKG

@websolutespa/payload-plugin-bowl-llm

Version:

LLM plugin for Bowl PayloadCms plugin

163 lines (162 loc) 7.4 kB
'use client'; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { MinimalTemplate } from '@payloadcms/next/templates'; import { Button, Form, Modal, SelectInput, toast, useConfig, useModal, useTranslation, XIcon } from '@payloadcms/ui'; import React, { useState } from 'react'; import './GenerateRulesModal.scss'; const baseClass = 'generate-rules-options'; export const BtnGenerateRulesVectorDb = (props)=>{ const { config } = useConfig(); const { routes: { api: apiRoute } = {} } = config; const modalKey = 'generate-rules-modal'; const { openModal, isModalOpen, closeAllModals } = useModal(); const [loading, setLoading] = React.useState(false); const [llmApps, setllmApps] = useState([]); const [selectedLlmApp, setSelectedLlmApp] = React.useState(''); const { t } = useTranslation(); const generateRules = async (appId)=>{ setLoading(true); try { const httpResponse = await fetch(`${apiRoute}/llm/rules`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, referrer: '', body: JSON.stringify({ appId: appId }) }); if (httpResponse.ok) { const response = await httpResponse.json(); const gotError = response.some((element)=>element.status === 'error'); if (!gotError) { toast.success(t('general:generateRulesSuccess')); } else { const toastMsg = /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx("div", { children: t('general:generateRulesError') }), /*#__PURE__*/ _jsx("ul", { children: response.filter((element)=>element.status === 'error').map((element)=>/*#__PURE__*/ _jsx("li", { children: /*#__PURE__*/ _jsxs("div", { children: [ `App: ${element.name}`, " - ", element.error ] }) })) }) ] }); toast.error(toastMsg, {}); // { autoClose: false }); } } else { throw new Error(`Response status: ${httpResponse.status}`); } } catch (error) { console.error(`${t('general:generateRulesError')}: ${error}`); toast.error(`${t('general:generateRulesError')}: ${error}`, {}); // { autoClose: false }); } finally{ setLoading(false); } }; const onSubmit = async ()=>{ try { // generate rules for the selected app generateRules(selectedLlmApp); closeAllModals(); } catch (error) { console.error(t('general:generateRulesError') + ': ', error); toast.error(t('general:generateRulesError')); } }; const handleClick = async ()=>{ try { // get user apps for which it's possible to generate rules const httpResponse = await fetch(`${apiRoute}/llm/apps`, { method: 'GET' }); const response = await httpResponse.json(); if (httpResponse.ok) { const apps = response; setllmApps(apps.map((app)=>({ value: app.id, label: app.name }))); if (apps.length > 1) { // user has many apps: open modal to select the app for which to generate rules openModal(modalKey); } else { // user has only one app: directly generate rules for that app await generateRules(apps[0].id); } } else { toast.error(response.message); return; } } catch (error) { console.error(t('general:generateRulesError') + ': ', error); toast.error(t('general:generateRulesError')); } }; return /*#__PURE__*/ _jsxs("div", { children: [ /*#__PURE__*/ _jsx(Button, { onClick: handleClick, disabled: loading, children: loading ? t('general:generatingRules') : t('general:generateRules') }), /*#__PURE__*/ _jsx(Modal, { slug: modalKey, className: `${baseClass}__modal`, children: isModalOpen(modalKey) && /*#__PURE__*/ _jsxs(MinimalTemplate, { children: [ /*#__PURE__*/ _jsxs("header", { className: `${baseClass}__header`, children: [ /*#__PURE__*/ _jsx("h3", { children: t('general:generateRulesModalTitle') }), /*#__PURE__*/ _jsx(Button, { buttonStyle: "none", onClick: closeAllModals, children: /*#__PURE__*/ _jsx(XIcon, {}) }) ] }), /*#__PURE__*/ _jsx("main", { className: `${baseClass}__main`, children: /*#__PURE__*/ _jsxs(Form, { onSubmit: onSubmit, children: [ /*#__PURE__*/ _jsx("div", { className: "render-fields", children: /*#__PURE__*/ _jsx(SelectInput, { label: t('general:selectLlmApp'), name: "llmApp", path: 'llmApp', options: llmApps, value: selectedLlmApp, onChange: (e)=>setSelectedLlmApp(e.value) }) }), /*#__PURE__*/ _jsx("div", { className: `${baseClass}__foot`, children: /*#__PURE__*/ _jsx(Button, { type: "submit", children: t('general:submit') }) }) ] }) }) ] }) }) ] }); }; //# sourceMappingURL=BtnGenerateRulesVectorDb.js.map