fix(import): validate/normalize imported data, guard Excel I/O (#3)
- loadFromJSON and the localStorage startup load now run employees through normalizeEmployees(): fills missing constraints, drops unusable rows, de-duplicates ids, and discards invalid vacation ranges — preventing later crashes (e.g. c.neverDays on undefined) and same-day double-books. - Excel import is wrapped in try/catch with a typeof XLSX guard and user feedback; the Excel export button gets the same guard. - createEmployee reuses the shared defaultConstraints() factory. Adds normalizeEmployees tests (defaults, dropping, dedup, vacations) and a loadFromJSON normalization test. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
e851bb2833
commit
065876ced4
5 files changed
+118
-18
No files matched your search
@@ -1,6 +1,7 @@
|
||||
import { renderEmployees } from './employees.js';
|
||||
import { renderCalendar } from './calendar.js';
|
||||
import { renderDataTab } from './history.js';
|
||||
import { normalizeEmployees } from './data.js';
|
||||
|
||||
const STORAGE_KEY = 'morning-planner-state';
|
||||
|
||||
@@ -17,7 +18,7 @@ try {
|
||||
const saved = localStorage.getItem(STORAGE_KEY);
|
||||
if (saved) {
|
||||
const parsed = JSON.parse(saved);
|
||||
if (Array.isArray(parsed.employees)) state.employees = parsed.employees;
|
||||
if (Array.isArray(parsed.employees)) state.employees = normalizeEmployees(parsed.employees);
|
||||
if (parsed.calendar) state.calendar = parsed.calendar;
|
||||
if (Array.isArray(parsed.history)) state.history = parsed.history;
|
||||
if (parsed.settings && Number.isInteger(parsed.settings.moderatorsPerDay)
|
||||
|
||||
Reference in new issue
Block a user