Consolidate toolbox loaders and reset helpers
Some checks failed
Deploy Sokko G / deploy (push) Failing after 2s

This commit is contained in:
Shinuwa 2026-09-10 13:45:48 +02:00
parent 6c61e11f9a
commit 865a4ffd97
7 changed files with 61 additions and 75 deletions

View file

@ -1,4 +1,5 @@
// Rôle : regroupe les calculs purs de l'arbre d'objectifs.
import { getLatestDailyReset, getLatestWeeklyReset } from "./resetUtils.js";
export const GOAL_TREE_KINDS = ["step", "text", "checklist"];
export const GOAL_TREE_RESET_TYPES = ["none", "daily", "weekly"];
export const GOAL_TREE_ICON_NAMES = ["cube", "fire", "flask", "grass", "leaf", "meat", "powder", "tear", "ball"];
@ -220,32 +221,6 @@ export function evaluateGoalTreeNodes(nodes) {
}));
}
function parseResetTime(value) {
const [hours, minutes] = String(value || "00:00").split(":").map((part) => Number.parseInt(part, 10));
return {
hours: Number.isInteger(hours) ? Math.min(23, Math.max(0, hours)) : 0,
minutes: Number.isInteger(minutes) ? Math.min(59, Math.max(0, minutes)) : 0
};
}
function getLatestDailyReset(now, resetTime) {
const { hours, minutes } = parseResetTime(resetTime);
const reset = new Date(now);
reset.setHours(hours, minutes, 0, 0);
if (reset.getTime() > now) reset.setDate(reset.getDate() - 1);
return reset.getTime();
}
function getLatestWeeklyReset(now, resetTime, weekDay) {
const { hours, minutes } = parseResetTime(resetTime);
const reset = new Date(now);
reset.setHours(hours, minutes, 0, 0);
const dayDiff = (reset.getDay() - weekDay + 7) % 7;
reset.setDate(reset.getDate() - dayDiff);
if (reset.getTime() > now) reset.setDate(reset.getDate() - 7);
return reset.getTime();
}
export function applyGoalTreeDueResets(data, now = Date.now()) {
let latestResetAt = data.lastResetAt || 0;
let changed = false;

View file

@ -0,0 +1,26 @@
// Rôle : partage les calculs de réinitialisation temporelle des outils.
export function parseResetTime(value) {
const [hours, minutes] = String(value || "00:00").split(":").map((part) => Number.parseInt(part, 10));
return {
hours: Number.isInteger(hours) ? Math.min(23, Math.max(0, hours)) : 0,
minutes: Number.isInteger(minutes) ? Math.min(59, Math.max(0, minutes)) : 0
};
}
export function getLatestDailyReset(now, resetTime) {
const { hours, minutes } = parseResetTime(resetTime);
const reset = new Date(now);
reset.setHours(hours, minutes, 0, 0);
if (reset.getTime() > now) reset.setDate(reset.getDate() - 1);
return reset.getTime();
}
export function getLatestWeeklyReset(now, resetTime, weekDay) {
const { hours, minutes } = parseResetTime(resetTime);
const reset = new Date(now);
reset.setHours(hours, minutes, 0, 0);
const dayDiff = (reset.getDay() - weekDay + 7) % 7;
reset.setDate(reset.getDate() - dayDiff);
if (reset.getTime() > now) reset.setDate(reset.getDate() - 7);
return reset.getTime();
}

View file

@ -1,4 +1,6 @@
// Rôle : regroupe les constantes et helpers purs de l'outil task planner.
import { getLatestDailyReset, getLatestWeeklyReset, parseResetTime } from "./resetUtils.js";
export const TASK_TYPES = ["daily", "weekly", "unique"];
const DAILY_RESET_SOON_MS = 6 * 60 * 60 * 1000;
const WEEKLY_RESET_SOON_MS = 48 * 60 * 60 * 1000;
@ -19,32 +21,6 @@ export function getTaskTypeLabel(type, textContent) {
return textContent.uniqueType || "Ponctuelle";
}
export function parseResetTime(value) {
const [hours, minutes] = String(value || "00:00").split(":").map((part) => Number.parseInt(part, 10));
return {
hours: Number.isInteger(hours) ? Math.min(23, Math.max(0, hours)) : 0,
minutes: Number.isInteger(minutes) ? Math.min(59, Math.max(0, minutes)) : 0
};
}
export function getLatestDailyReset(now, resetTime) {
const { hours, minutes } = parseResetTime(resetTime);
const reset = new Date(now);
reset.setHours(hours, minutes, 0, 0);
if (reset.getTime() > now) reset.setDate(reset.getDate() - 1);
return reset.getTime();
}
export function getLatestWeeklyReset(now, resetTime, weekDay) {
const { hours, minutes } = parseResetTime(resetTime);
const reset = new Date(now);
reset.setHours(hours, minutes, 0, 0);
const dayDiff = (reset.getDay() - weekDay + 7) % 7;
reset.setDate(reset.getDate() - dayDiff);
if (reset.getTime() > now) reset.setDate(reset.getDate() - 7);
return reset.getTime();
}
export function getNextDailyReset(now, resetTime) {
const { hours, minutes } = parseResetTime(resetTime);
const reset = new Date(now);

View file

@ -1,4 +1,4 @@
// Rôle : centralise les métadonnées légères des outils toolbox sans importer leurs composants.
// Rôle : centralise les métadonnées et les chargeurs lazy des outils toolbox.
export const TOOLBOX_MODULE_DEFINITIONS = {
notepad: {
label: "Bloc Note",
@ -162,6 +162,26 @@ export const TOOLBOX_MODULES = Object.fromEntries(Object.entries(TOOLBOX_MODULE_
{ label: definition.label, icon: definition.icon }
]));
export const TOOLBOX_MODULE_LOADERS = {
notepad: () => import("./modules/NotepadModule.jsx").then((module) => ({ default: module.NotepadModule })),
memos: () => import("./modules/MemosModule.jsx").then((module) => ({ default: module.MemosModule })),
checklist: () => import("./modules/ChecklistModule.jsx").then((module) => ({ default: module.ChecklistModule })),
images: () => import("./modules/ImagesModule.jsx").then((module) => ({ default: module.ImagesModule })),
links: () => import("./modules/LinksModule.jsx").then((module) => ({ default: module.LinksModule })),
counters: () => import("./modules/CountersModule.jsx").then((module) => ({ default: module.CountersModule })),
randomizer: () => import("./modules/RandomizerModule.jsx").then((module) => ({ default: module.RandomizerModule })),
rngSimulator: () => import("./modules/RngSimulatorModule.jsx").then((module) => ({ default: module.RngSimulatorModule })),
combos: () => import("./modules/CombosModule.jsx").then((module) => ({ default: module.CombosModule })),
calculator: () => import("./modules/CalculatorModule.jsx").then((module) => ({ default: module.CalculatorModule })),
calendar: () => import("./modules/CalendarModule.jsx").then((module) => ({ default: module.CalendarModule })),
table: () => import("./modules/TableModule.jsx").then((module) => ({ default: module.TableModule })),
goalTree: () => import("./modules/GoalTreeModule.jsx").then((module) => ({ default: module.GoalTreeModule })),
timer: () => import("./modules/TimerModule.jsx").then((module) => ({ default: module.TimerModule })),
taskPlanner: () => import("./modules/TaskPlannerModule.jsx").then((module) => ({ default: module.TaskPlannerModule })),
equipmentPlanner: () => import("./modules/EquipmentPlannerModule.jsx").then((module) => ({ default: module.EquipmentPlannerModule })),
imageAnnotation: () => import("./modules/ImageAnnotationModule.jsx").then((module) => ({ default: module.ImageAnnotationModule }))
};
export const LIBRARY_CATEGORY_DEFINITIONS = [
{ key: "notesTracking", types: ["memos", "notepad", "checklist", "counters"] },
{ key: "references", types: ["images", "imageAnnotation", "links"] },