linguabot commited on
Commit
c2d355d
·
verified ·
1 Parent(s): 9633da8

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. client/src/components/Refinity.tsx +24 -0
client/src/components/Refinity.tsx CHANGED
@@ -51,6 +51,7 @@ const Refinity: React.FC = () => {
51
  const addTaskFileRef = React.useRef<HTMLInputElement | null>(null);
52
  const [addingSourceUploading, setAddingSourceUploading] = React.useState<boolean>(false);
53
  const [taskMenuOpen, setTaskMenuOpen] = React.useState<boolean>(false);
 
54
 
55
  const task = React.useMemo(() => tasks.find(t => t.id === selectedTaskId) || tasks[0], [tasks, selectedTaskId]);
56
  const taskVersions = React.useMemo(() => versions.filter(v => v.taskId === (task?.id || '')), [versions, task?.id]);
@@ -154,6 +155,22 @@ const Refinity: React.FC = () => {
154
  setStage('editor');
155
  };
156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  const selectManual = (id: string) => {
158
  setCurrentVersionId(id);
159
  setStage('editor');
@@ -230,6 +247,13 @@ const Refinity: React.FC = () => {
230
  </button>
231
  {uploading && <span className="text-sm text-gray-600">Uploading…</span>}
232
  </div>
 
 
 
 
 
 
 
233
  </div>
234
  </div>
235
 
 
51
  const addTaskFileRef = React.useRef<HTMLInputElement | null>(null);
52
  const [addingSourceUploading, setAddingSourceUploading] = React.useState<boolean>(false);
53
  const [taskMenuOpen, setTaskMenuOpen] = React.useState<boolean>(false);
54
+ const [pastedTranslation, setPastedTranslation] = React.useState<string>('');
55
 
56
  const task = React.useMemo(() => tasks.find(t => t.id === selectedTaskId) || tasks[0], [tasks, selectedTaskId]);
57
  const taskVersions = React.useMemo(() => versions.filter(v => v.taskId === (task?.id || '')), [versions, task?.id]);
 
155
  setStage('editor');
156
  };
157
 
158
+ const submitPastedTranslation = async () => {
159
+ const text = (pastedTranslation || '').trim();
160
+ if (!text) return;
161
+ try {
162
+ const base = ((api.defaults as any)?.baseURL as string || '').replace(/\/$/, '');
163
+ const resp = await fetch(`${base}/api/refinity/tasks/${encodeURIComponent(task?.id || '')}/versions`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ originalAuthor: username, revisedBy: undefined, content: text }) });
164
+ const saved = await resp.json().catch(()=>({}));
165
+ if (!resp.ok) throw new Error(saved?.error || 'Failed to save version');
166
+ const newVersion: Version = { id: saved._id, taskId: saved.taskId, originalAuthor: saved.originalAuthor, revisedBy: saved.revisedBy, versionNumber: saved.versionNumber, content: saved.content, parentVersionId: saved.parentVersionId };
167
+ setVersions(prev => [...prev, newVersion]);
168
+ setCurrentVersionId(newVersion.id);
169
+ setPastedTranslation('');
170
+ setStage('flow');
171
+ } catch {}
172
+ };
173
+
174
  const selectManual = (id: string) => {
175
  setCurrentVersionId(id);
176
  setStage('editor');
 
247
  </button>
248
  {uploading && <span className="text-sm text-gray-600">Uploading…</span>}
249
  </div>
250
+ <div className="mt-4">
251
+ <label className="block text-sm text-gray-700 mb-1">Or paste translation</label>
252
+ <textarea value={pastedTranslation} onChange={(e)=>setPastedTranslation(e.target.value)} rows={3} className="relative z-10 w-full px-4 py-3 border border-ui-border rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 bg-white" placeholder="Paste translation text here…" />
253
+ <div className="mt-2">
254
+ <button onClick={submitPastedTranslation} className="relative overflow-hidden inline-flex items-center justify-center gap-2 px-3 py-1.5 text-sm font-medium rounded-2xl text-white ring-1 ring-inset ring-white/50 backdrop-blur-md backdrop-brightness-110 backdrop-saturate-150 bg-indigo-600/70 active:translate-y-0.5 transition-all duration-200">Use pasted text</button>
255
+ </div>
256
+ </div>
257
  </div>
258
  </div>
259