edumanagerpro2/manager/scratch/update_others.cjs

75 lines
2.9 KiB
JavaScript

const fs = require('fs');
const path = require('path');
function processFile(filename, replaceSubjects = false) {
const filePath = path.join(__dirname, '../components', filename);
if (!fs.existsSync(filePath)) return;
let content = fs.readFileSync(filePath, 'utf8');
// Inject states and fetch
// Find a good place to inject. Usually after `const [isModalOpen, setIsModalOpen] = useState(false);` or similar.
// We'll just look for a known pattern or add it at the top of the component.
// We will find `const { showAlert, showConfirm } = useDialog();` and inject right after it
const hookDecl = `const { showAlert, showConfirm } = useDialog();`;
let fetchBlock = `
const [dbClasses, setDbClasses] = useState<any[]>(data?.classes || []);
const [dbCourses, setDbCourses] = useState<any[]>(data?.courses || []);
${replaceSubjects ? 'const [dbSubjects, setDbSubjects] = useState<any[]>(data?.subjects || []);' : ''}
React.useEffect(() => {
Promise.all([
fetch('/api/turmas').catch(() => ({ ok: false, json: async () => ({}) })),
fetch('/api/cursos').catch(() => ({ ok: false, json: async () => ({}) })),
${replaceSubjects ? "fetch('/api/disciplinas').catch(() => ({ ok: false, json: async () => ({}) }))" : ''}
]).then(async (responses) => {
const [resT, resC${replaceSubjects ? ', resS' : ''}] = responses;
if (resT && resT.ok) {
const jsonT = await resT.json();
if (jsonT.turmas) setDbClasses(jsonT.turmas.map((t: any) => ({
id: t.id, name: t.nome, courseId: t.curso_id, maxStudents: Number(t.max_alunos || 0)
})));
}
if (resC && resC.ok) {
const jsonC = await resC.json();
if (jsonC.cursos) setDbCourses(jsonC.cursos.map((c: any) => ({
id: c.id, name: c.nome, monthlyFee: Number(c.mensalidade || 0), registrationFee: Number(c.taxa_matricula || 0)
})));
}
${replaceSubjects ? `
if (resS && resS.ok) {
const jsonS = await resS.json();
if (jsonS.disciplinas) setDbSubjects(jsonS.disciplinas.map((d: any) => ({
id: d.id, name: d.nome
})));
}
` : ''}
}).catch(console.error);
}, []);
`;
if (content.includes(hookDecl) && !content.includes('const [dbClasses')) {
content = content.replace(hookDecl, hookDecl + '\n' + fetchBlock);
// Replace usages
content = content.replace(/data\.classes/g, 'dbClasses');
content = content.replace(/data\.courses/g, 'dbCourses');
if (replaceSubjects) {
content = content.replace(/data\.subjects/g, 'dbSubjects');
}
fs.writeFileSync(filePath, content, 'utf8');
console.log(filename + ' atualizado.');
}
}
processFile('Finance.tsx', false);
processFile('Exams.tsx', true);
processFile('Contracts.tsx', false);
processFile('LessonSchedule.tsx', false);
processFile('AttendanceQuery.tsx', false);
processFile('Certificates.tsx', true);
processFile('Messages.tsx', false);