fix(dashboard): resolve loop and datepicker issues in class and session edit forms
This commit is contained in:
@@ -112,7 +112,7 @@ import Button from 'primevue/button';
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const { showSuccess, showError } = useToast();
|
||||
const { toLatinDigits, getTodayJalali } = usePersianDate();
|
||||
const { toLatinDigits, toJalaliPickerValue, toGregorianIso, getTodayJalali } = usePersianDate();
|
||||
|
||||
const sessionId = route.params.id;
|
||||
const isEditMode = computed(() => !!sessionId);
|
||||
@@ -132,7 +132,7 @@ const form = reactive({
|
||||
course: null,
|
||||
class: null,
|
||||
professor: null,
|
||||
day: moment().locale('fa').format('jYYYY/jMM/jDD'),
|
||||
day: getTodayJalali(),
|
||||
startTime: '19:00',
|
||||
endTime: '20:30',
|
||||
status: 'scheduled',
|
||||
@@ -142,27 +142,19 @@ const form = reactive({
|
||||
adminNotes: []
|
||||
});
|
||||
|
||||
const toGregorianIso = (jalaliValue) => {
|
||||
if (!jalaliValue) return null;
|
||||
if (jalaliValue instanceof Date) return jalaliValue.toISOString();
|
||||
const latin = toLatinDigits(String(jalaliValue));
|
||||
const m = moment(latin, 'jYYYY/jMM/jDD');
|
||||
return m.isValid() ? m.toDate().toISOString() : null;
|
||||
};
|
||||
|
||||
const toJalaliDisplay = (value) => {
|
||||
if (!value) return '';
|
||||
return moment(value).locale('fa').format('jYYYY/jMM/jDD');
|
||||
};
|
||||
|
||||
const loadClasses = async (courseId) => {
|
||||
if (!courseId) {
|
||||
classes.value = [];
|
||||
return;
|
||||
}
|
||||
const res = await classApi.getAll({ limit: 100, courseId });
|
||||
const data = res.data || res;
|
||||
classes.value = Array.isArray(data) ? data : (data.items || data.data || []);
|
||||
try {
|
||||
const res = await classApi.getAll({ limit: 100, courseId });
|
||||
const data = res.data || res;
|
||||
classes.value = Array.isArray(data) ? data : (data.items || data.data || []);
|
||||
} catch (err) {
|
||||
console.warn('Failed to load classes for course:', err);
|
||||
classes.value = [];
|
||||
}
|
||||
};
|
||||
|
||||
const onCourseChange = async () => {
|
||||
@@ -172,19 +164,25 @@ const onCourseChange = async () => {
|
||||
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const [cRes, pRes] = await Promise.all([
|
||||
const [cResult, pResult] = await Promise.allSettled([
|
||||
courseApi.getAll({ limit: 100 }),
|
||||
professorApi.getAll({ limit: 100 })
|
||||
]);
|
||||
|
||||
const cData = cRes.data || cRes;
|
||||
courses.value = Array.isArray(cData) ? cData : (cData.items || cData.courses || cData.data || []);
|
||||
if (cResult.status === 'fulfilled') {
|
||||
const cRes = cResult.value;
|
||||
const cData = cRes.data || cRes;
|
||||
courses.value = Array.isArray(cData) ? cData : (cData.items || cData.courses || cData.data || []);
|
||||
}
|
||||
|
||||
const pData = pRes.data || pRes;
|
||||
professors.value = (Array.isArray(pData) ? pData : (pData.items || pData.professors || pData.data || [])).map((p) => ({
|
||||
...p,
|
||||
name: `${p.name || ''} ${p.surname || ''}`.trim()
|
||||
}));
|
||||
if (pResult.status === 'fulfilled') {
|
||||
const pRes = pResult.value;
|
||||
const pData = pRes.data || pRes;
|
||||
professors.value = (Array.isArray(pData) ? pData : (pData.items || pData.professors || pData.data || [])).map((p) => ({
|
||||
...p,
|
||||
name: `${p.name || ''} ${p.surname || ''}`.trim()
|
||||
}));
|
||||
}
|
||||
|
||||
if (sessionId) {
|
||||
const res = await sessionApi.getOne(sessionId);
|
||||
@@ -195,7 +193,7 @@ const fetchData = async () => {
|
||||
course: courseId,
|
||||
class: data.class?._id || data.class || null,
|
||||
professor: data.professor?._id || data.professor || null,
|
||||
day: toJalaliDisplay(data.day || data.date),
|
||||
day: toJalaliPickerValue(data.day || data.date) || getTodayJalali(),
|
||||
startTime: data.startTime || '19:00',
|
||||
endTime: data.endTime || '20:30',
|
||||
status: data.status || 'scheduled',
|
||||
|
||||
Reference in New Issue
Block a user