feat: implement internationalization for UI text, refactor localStorage keys, and add input validation for state setters.
This commit is contained in:
31
src/state.js
31
src/state.js
@@ -1,25 +1,42 @@
|
||||
import { getISOWeek } from './utils.js';
|
||||
import { LS } from './constants.js';
|
||||
|
||||
export let allWeeks = [];
|
||||
export let currentWeekNumber = getISOWeek(new Date());
|
||||
export let currentYear = new Date().getFullYear();
|
||||
export let displayMode = 'this-week';
|
||||
export let authToken = localStorage.getItem('kantine_authToken');
|
||||
export let currentUser = localStorage.getItem('kantine_currentUser');
|
||||
export let authToken = localStorage.getItem(LS.AUTH_TOKEN);
|
||||
export let currentUser = localStorage.getItem(LS.CURRENT_USER);
|
||||
export let orderMap = new Map();
|
||||
export let userFlags = new Set(JSON.parse(localStorage.getItem('kantine_flags') || '[]'));
|
||||
export let userFlags = new Set(JSON.parse(localStorage.getItem(LS.FLAGS) || '[]'));
|
||||
export let pollIntervalId = null;
|
||||
export let langMode = localStorage.getItem('kantine_lang') || 'de';
|
||||
export let highlightTags = JSON.parse(localStorage.getItem('kantine_highlightTags') || '[]');
|
||||
export let langMode = localStorage.getItem(LS.LANG) || 'de';
|
||||
export let highlightTags = JSON.parse(localStorage.getItem(LS.HIGHLIGHT_TAGS) || '[]');
|
||||
|
||||
export function setAllWeeks(weeks) { allWeeks = weeks; }
|
||||
export function setCurrentWeekNumber(week) { currentWeekNumber = week; }
|
||||
export function setCurrentYear(year) { currentYear = year; }
|
||||
export function setDisplayMode(mode) { displayMode = mode; }
|
||||
export function setAuthToken(token) { authToken = token; }
|
||||
export function setCurrentUser(user) { currentUser = user; }
|
||||
export function setOrderMap(map) { orderMap = map; }
|
||||
export function setUserFlags(flags) { userFlags = flags; }
|
||||
export function setPollIntervalId(id) { pollIntervalId = id; }
|
||||
export function setLangMode(lang) { langMode = lang; }
|
||||
export function setHighlightTags(tags) { highlightTags = tags; }
|
||||
|
||||
/** Only 'this-week' and 'next-week' are valid display modes. */
|
||||
export function setDisplayMode(mode) {
|
||||
if (mode !== 'this-week' && mode !== 'next-week') {
|
||||
console.warn(`[state] Invalid displayMode: "${mode}". Ignoring.`);
|
||||
return;
|
||||
}
|
||||
displayMode = mode;
|
||||
}
|
||||
|
||||
/** Only 'de', 'en', and 'all' are valid language modes. */
|
||||
export function setLangMode(lang) {
|
||||
if (!['de', 'en', 'all'].includes(lang)) {
|
||||
console.warn(`[state] Invalid langMode: "${lang}". Ignoring.`);
|
||||
return;
|
||||
}
|
||||
langMode = lang;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user