Consolidate toolbox loaders and reset helpers
Some checks failed
Deploy Sokko G / deploy (push) Failing after 2s
Some checks failed
Deploy Sokko G / deploy (push) Failing after 2s
This commit is contained in:
parent
6c61e11f9a
commit
865a4ffd97
7 changed files with 61 additions and 75 deletions
|
|
@ -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;
|
||||
|
|
|
|||
26
website/src/features/toolboxes/modules/resetUtils.js
Normal file
26
website/src/features/toolboxes/modules/resetUtils.js
Normal 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();
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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"] },
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue