/**
* GoingsOn - Day Planning Schedule & Review Module
* Schedule task modal, daily review.
*/
(function() {
'use strict';
const esc = GoingsOn.utils.escapeHtml;
const escAttr = GoingsOn.utils.escapeAttr;
// ============ Schedule Task Modal ============
/**
* Open the schedule task modal with time slot picker and duration presets.
* @param {string} id - Task ID to schedule
*/
function openScheduleTaskModal(id) {
const now = new Date();
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
const timeSlots = [];
for (let hour = 6; hour <= 21; hour++) {
for (let min = 0; min < 60; min += 15) {
const slotTime = new Date(today.getTime() + hour * 60 * 60 * 1000 + min * 60 * 1000);
if (slotTime > now) {
timeSlots.push({
time: slotTime,
label: slotTime.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' })
});
}
}
}
const timeSlotsHtml = timeSlots.slice(0, 12).map(slot => `
`).join('');
const content = `
You are reviewing a past day (${esc(displayDate)}), not today.
`
: '';
const content = `
${banner}
${reflectionHtml}
`;
const title = isPast ? `Reviewing Past: ${displayDate}` : `Wrap Up: ${displayDate}`;
GoingsOn.ui.openModal(title, content);
requestAnimationFrame(() => {
setupDailyReviewAutoSave();
GoingsOn.planReviewToggle.autoGrowReflection({
idPrefix: 'daily',
prompts: REFLECTION_PROMPTS,
});
});
}
async function saveDailyReview() {
const dateStr = formatDateForApi(GoingsOn.state.dayPlanDate);
const wentWellInput = document.getElementById('daily-went-well');
const improveInput = document.getElementById('daily-improve');
try {
await GoingsOn.api.dailyNotes.upsert({
noteDate: dateStr,
wentWell: wentWellInput?.value?.trim() || '',
couldImprove: improveInput?.value?.trim() || '',
isReviewed: true,
});
GoingsOn.ui.closeModal();
GoingsOn.ui.showToast('Daily review saved!', 'success');
updateDayNudges(true, true);
} catch (err) {
GoingsOn.ui.showToast('Failed to save daily review: ' + err, 'error');
}
}
// ============ Populate GoingsOn.dayPlanSchedule Namespace ============
GoingsOn.dayPlanSchedule = {
openScheduleTaskModal,
selectTimeSlot,
selectDuration,
scheduleTaskFromModal,
openFinishReviewModal,
saveDailyReview,
loadDayReviewPane,
};
})();