mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-05-04 07:57:28 +08:00
refresh webui forms and fix whatsapp bridge login state
This commit is contained in:
@@ -5,6 +5,9 @@ import { Check, RefreshCw } from 'lucide-react';
|
||||
import { useAppContext } from '../context/AppContext';
|
||||
import { formatLocalDateTime } from '../utils/time';
|
||||
import { Button, FixedButton, LinkButton } from '../components/Button';
|
||||
import Input from '../components/Input';
|
||||
import Select from '../components/Select';
|
||||
import Textarea from '../components/Textarea';
|
||||
|
||||
function dataUrlForArtifact(artifact: any) {
|
||||
const mime = String(artifact?.mime_type || '').trim() || 'application/octet-stream';
|
||||
@@ -234,11 +237,11 @@ const Nodes: React.FC = () => {
|
||||
<div className="grid grid-cols-1 xl:grid-cols-[300px_1fr_1.1fr] gap-4 flex-1 min-h-0">
|
||||
<div className="brand-card ui-panel rounded-[28px] overflow-hidden flex flex-col min-h-0">
|
||||
<div className="px-3 py-2 border-b border-zinc-800 dark:border-zinc-700 space-y-2">
|
||||
<input
|
||||
<Input
|
||||
value={nodeFilter}
|
||||
onChange={(e) => setNodeFilter(e.target.value)}
|
||||
placeholder={t('nodesFilterPlaceholder')}
|
||||
className="ui-input rounded-xl px-3 py-2 text-sm"
|
||||
className="rounded-xl px-3 py-2 text-sm"
|
||||
/>
|
||||
</div>
|
||||
<div className="overflow-y-auto min-h-0">
|
||||
@@ -398,19 +401,19 @@ const Nodes: React.FC = () => {
|
||||
<div className="px-3 py-2 border-b border-zinc-800 dark:border-zinc-700 space-y-2">
|
||||
<div className="text-xs text-zinc-400 uppercase tracking-wider">{t('nodeDispatchDetail')}</div>
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-2">
|
||||
<select value={dispatchActionFilter} onChange={(e) => setDispatchActionFilter(e.target.value)} className="ui-select rounded-xl px-2 py-2 text-xs">
|
||||
<Select value={dispatchActionFilter} onChange={(e) => setDispatchActionFilter(e.target.value)} className="rounded-xl px-2 py-2 text-xs">
|
||||
<option value="all">{t('allActions')}</option>
|
||||
{dispatchActions.map((action) => <option key={action} value={action}>{action}</option>)}
|
||||
</select>
|
||||
<select value={dispatchTransportFilter} onChange={(e) => setDispatchTransportFilter(e.target.value)} className="ui-select rounded-xl px-2 py-2 text-xs">
|
||||
</Select>
|
||||
<Select value={dispatchTransportFilter} onChange={(e) => setDispatchTransportFilter(e.target.value)} className="rounded-xl px-2 py-2 text-xs">
|
||||
<option value="all">{t('allTransports')}</option>
|
||||
{dispatchTransports.map((transport) => <option key={transport} value={transport}>{transport}</option>)}
|
||||
</select>
|
||||
<select value={dispatchStatusFilter} onChange={(e) => setDispatchStatusFilter(e.target.value)} className="ui-select rounded-xl px-2 py-2 text-xs">
|
||||
</Select>
|
||||
<Select value={dispatchStatusFilter} onChange={(e) => setDispatchStatusFilter(e.target.value)} className="rounded-xl px-2 py-2 text-xs">
|
||||
<option value="all">{t('allStatus')}</option>
|
||||
<option value="ok">ok</option>
|
||||
<option value="error">error</option>
|
||||
</select>
|
||||
</Select>
|
||||
</div>
|
||||
</div>
|
||||
<div className="grid grid-rows-[220px_1fr] min-h-0 flex-1">
|
||||
@@ -476,24 +479,24 @@ const Nodes: React.FC = () => {
|
||||
<div className="grid grid-cols-3 gap-2">
|
||||
<label className="space-y-1">
|
||||
<div className="text-zinc-500 text-[11px]">{t('mode')}</div>
|
||||
<select value={replayModeDraft} onChange={(e) => setReplayModeDraft(e.target.value)} className="ui-select w-full rounded-xl px-2 py-2 text-xs">
|
||||
<Select value={replayModeDraft} onChange={(e) => setReplayModeDraft(e.target.value)} className="w-full rounded-xl px-2 py-2 text-xs">
|
||||
<option value="auto">auto</option>
|
||||
<option value="p2p">p2p</option>
|
||||
<option value="relay">relay</option>
|
||||
</select>
|
||||
</Select>
|
||||
</label>
|
||||
<label className="space-y-1 col-span-2">
|
||||
<div className="text-zinc-500 text-[11px]">{t('model')}</div>
|
||||
<input value={replayModelDraft} onChange={(e) => setReplayModelDraft(e.target.value)} className="ui-input w-full rounded-xl px-3 py-2 text-xs" />
|
||||
<Input value={replayModelDraft} onChange={(e) => setReplayModelDraft(e.target.value)} className="w-full rounded-xl px-3 py-2 text-xs" />
|
||||
</label>
|
||||
</div>
|
||||
<label className="space-y-1 block">
|
||||
<div className="text-zinc-500 text-[11px]">{t('task')}</div>
|
||||
<textarea value={replayTaskDraft} onChange={(e) => setReplayTaskDraft(e.target.value)} className="ui-textarea min-h-24 w-full p-3 text-xs" />
|
||||
<Textarea value={replayTaskDraft} onChange={(e) => setReplayTaskDraft(e.target.value)} className="min-h-24 w-full p-3 text-xs" />
|
||||
</label>
|
||||
<label className="space-y-1 block">
|
||||
<div className="text-zinc-500 text-[11px]">{t('args')}</div>
|
||||
<textarea value={replayArgsDraft} onChange={(e) => setReplayArgsDraft(e.target.value)} className="ui-textarea min-h-40 w-full p-3 text-xs font-mono" />
|
||||
<Textarea value={replayArgsDraft} onChange={(e) => setReplayArgsDraft(e.target.value)} className="min-h-40 w-full p-3 text-xs font-mono" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user