'use client' import type { FC } from 'react' import React, { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import TemplateVarPanel, { PanelTitle, VarOpBtnGroup } from '../value-panel' import s from './style.module.css' import { AppInfoComp, ChatBtn, EditBtn, FootLogo, PromptTemplate } from './massive-component' import type { AppInfo, PromptConfig } from '@/types/app' import Toast from '@/app/components/base/toast' import Select from '@/app/components/base/select' import { DEFAULT_VALUE_MAX_LEN } from '@/config' // regex to match the {{}} and replace it with a span const regex = /\{\{([^}]+)\}\}/g export type IWelcomeProps = { conversationName: string hasSetInputs: boolean isPublicVersion: boolean siteInfo: AppInfo promptConfig: PromptConfig onStartChat: (inputs: Record) => void canEditInputs: boolean savedInputs: Record onInputsChange: (inputs: Record) => void } const Welcome: FC = ({ conversationName, hasSetInputs, isPublicVersion, siteInfo, promptConfig, onStartChat, canEditInputs, savedInputs, onInputsChange, }) => { const { t } = useTranslation() const hasVar = promptConfig.prompt_variables.length > 0 const [isFold, setIsFold] = useState(true) const [inputs, setInputs] = useState>((() => { if (hasSetInputs) return savedInputs const res: Record = {} if (promptConfig) { promptConfig.prompt_variables.forEach((item) => { res[item.key] = '' }) } return res })()) useEffect(() => { if (!savedInputs) { const res: Record = {} if (promptConfig) { promptConfig.prompt_variables.forEach((item) => { res[item.key] = '' }) } setInputs(res) } else { setInputs(savedInputs) } }, [savedInputs]) const highLightPromoptTemplate = (() => { if (!promptConfig) return '' const res = promptConfig.prompt_template.replace(regex, (match, p1) => { return `${inputs?.[p1] ? inputs?.[p1] : match}` }) return res })() const { notify } = Toast const logError = (message: string) => { notify({ type: 'error', message, duration: 3000 }) } const renderHeader = () => { return (
{conversationName}
) } const renderInputs = () => { return (
{promptConfig.prompt_variables.map(item => (
{item.type === 'select' && ( { setInputs({ ...inputs, [item.key]: e.target.value }) }} className={'w-full flex-grow py-2 pl-3 pr-3 box-border rounded-lg bg-gray-50'} maxLength={item.max_length || DEFAULT_VALUE_MAX_LEN} /> )} {item.type === 'paragraph' && (