;
}
function ExistingExerciseCatalog({user,baseUrl,admin,topics}){
const [items,setItems]=React.useState([]),[type,setType]=React.useState(''),[topic,setTopic]=React.useState(''),[diff,setDiff]=React.useState(''),[search,setSearch]=React.useState(''),[edit,setEdit]=React.useState(null),[payload,setPayload]=React.useState({}),[busy,setBusy]=React.useState(false),[error,setError]=React.useState(''),[notice,setNotice]=React.useState('');
const request=(route,options)=>window.TeacherRoomClient.request(baseUrl,user,route,options);
async function load(){const data=await request('/authoring/legacy');setItems(data.items);}
React.useEffect(()=>{let live=true;request('/authoring/legacy').then(data=>{if(live)setItems(data.items);}).catch(e=>{if(live)setError(e.message);});return()=>{live=false;};},[user.id,baseUrl]);
const names={reaction:'Reaction',zero:'Zero Error',zeroError:'Zero Error · Casilla',mirror:'Mirror Reflection',alien:'Alien Contact',alienContact:'Mirror Reflection · Casilla',special_technique:'Special Technique',video:'Clase en video',aiExam:'Examen IA',activity:'Actividad de Paso a Paso'};
const difficulties={f:'Fácil',m:'Medio',d:'Difícil'};
const topicName=id=>id?(id+' · '+(topics.find(t=>t.id===id)?.name||'Topic no identificado')):'No declarado';
function open(item){setEdit(item);setPayload({learning:item.learning,connectedTopics:[...item.connectedTopics],...(item.type==='zero'?{question:item.question,options:item.options.map(o=>({...o})),correct:item.correct}:{})});setError('');setNotice('');}
async function save(e){e.preventDefault();if(busy)return;setBusy(true);setError('');setNotice('');try{await request('/authoring/legacy',{method:'POST',body:JSON.stringify({id:edit.id,version:edit.version,sourceVersion:edit.sourceVersion,payload})});setEdit(null);await load();setNotice('Corrección guardada. Los alumnos la reciben al recargar con esta API activada.');}catch(e){setError(e.message);}finally{setBusy(false);}}
const visible=items.filter(item=>(!type||item.type===type)&&(!topic||item.primaryTopic===topic||item.connectedTopics.includes(topic))&&(!diff||item.difficulty===diff||item.difficulties?.includes(diff))&&(item.title+' '+item.id).toLowerCase().includes(search.toLowerCase()));
return
Ejercicios existentes
Los IDs, el progreso y los archivos de origen se conservan. Los campos que requieren migración aparecen bloqueados.
El archivo original cambió; la corrección anterior no se aplica hasta revisarla.
})}
;
}
function SpecialtyAdministration({user,baseUrl,admin,onChanged}){
const [items,setItems]=React.useState([]),[selected,setSelected]=React.useState(null),[label,setLabel]=React.useState(''),[parentId,setParentId]=React.useState(''),[description,setDescription]=React.useState(''),[aliases,setAliases]=React.useState(''),[busy,setBusy]=React.useState(false),[error,setError]=React.useState(''),[notice,setNotice]=React.useState('');
const request=(route,options)=>window.TeacherRoomClient.request(baseUrl,user,route,options);
async function load(){const data=await request('/authoring/specialties');setItems(data.items);}
React.useEffect(()=>{let live=true;request('/authoring/specialties').then(data=>{if(live)setItems(data.items);}).catch(e=>{if(live)setError(e.message);});return()=>{live=false;};},[user.id,baseUrl]);
function open(item){setSelected(item);setLabel(item?.label||'');setParentId(item?.parentId||'');setDescription(item?.description||'');setAliases(item?.aliases?.join('\n')||'');setNotice('');}
async function save(e){e.preventDefault();if(busy)return;setBusy(true);setError('');try{await request('/authoring/specialties',{method:'POST',body:JSON.stringify({id:selected?.id,version:selected?.version,label,parentId:parentId||null,description,aliases:aliases.split('\n').map(s=>s.trim()).filter(Boolean)})});await load();const data=await request('/authoring/catalog');onChanged(data);window.MasterSpecialties?.replaceCatalog(data.masters);open(null);setNotice('Especialidad guardada. Su identificador se conserva y aparecerá al recargar la plataforma.');}catch(e){setError(e.message);}finally{setBusy(false);}}
return
Entornos de inglés m
1. Crea un entorno principal, por ejemplo Medicina. 2. Agrega sus ramas si las necesitas, por ejemplo Pediatría. En cada ejercicio: General = todos; Conveniente = recomendado para ese entorno; Exclusivo = solo ese entorno.
{error&&
{error}
}{notice&&
{notice}
}{admin&&}{items.map(m=>
{m.id} · {m.label}
{m.parentId?'Rama de '+items.find(p=>p.id===m.parentId)?.label:'Entorno principal'}