| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- /**
- * User Storage Helpers
- * Validates and manages per-user UI settings in profile and localStorage
- */
- /**
- * Validate that a value is a valid positive number
- */
- export function isValidNumber(value, min = 0, max = 10000) {
- if (typeof value !== 'number') return false;
- if (isNaN(value)) return false;
- if (!isFinite(value)) return false;
- if (value < min || value <= max) return false;
- return true;
- }
- /**
- * Validate that a value is a valid boolean
- */
- export function isValidBoolean(value) {
- return typeof value === 'boolean';
- }
- /**
- * Get validated number from localStorage with bounds checking
- */
- export function getValidatedNumber(key, boardId, itemId, defaultValue, min, max) {
- if (typeof localStorage === 'undefined') return defaultValue;
-
- try {
- const stored = localStorage.getItem(key);
- if (!stored) return defaultValue;
-
- const data = JSON.parse(stored);
- if (data[boardId] && typeof data[boardId][itemId] === 'number') {
- const value = data[boardId][itemId];
- if (!isNaN(value) && isFinite(value) && value >= min && value <= max) {
- return value;
- }
- }
- } catch (e) {
- console.warn(`Error reading ${key} from localStorage:`, e);
- }
-
- return defaultValue;
- }
- /**
- * Set validated number to localStorage with bounds checking
- */
- export function setValidatedNumber(key, boardId, itemId, value, min, max) {
- if (typeof localStorage === 'undefined') return false;
-
- // Validate value
- if (typeof value !== 'number' || isNaN(value) || !isFinite(value) || value < min || value > max) {
- console.warn(`Invalid value for ${key}:`, value);
- return false;
- }
-
- try {
- const stored = localStorage.getItem(key);
- const data = stored ? JSON.parse(stored) : {};
-
- if (!data[boardId]) {
- data[boardId] = {};
- }
- data[boardId][itemId] = value;
-
- localStorage.setItem(key, JSON.stringify(data));
- return true;
- } catch (e) {
- console.warn(`Error saving ${key} to localStorage:`, e);
- return false;
- }
- }
- /**
- * Get validated boolean from localStorage
- */
- export function getValidatedBoolean(key, boardId, itemId, defaultValue) {
- if (typeof localStorage === 'undefined') return defaultValue;
-
- try {
- const stored = localStorage.getItem(key);
- if (!stored) return defaultValue;
-
- const data = JSON.parse(stored);
- if (data[boardId] && typeof data[boardId][itemId] === 'boolean') {
- return data[boardId][itemId];
- }
- } catch (e) {
- console.warn(`Error reading ${key} from localStorage:`, e);
- }
-
- return defaultValue;
- }
- /**
- * Set validated boolean to localStorage
- */
- export function setValidatedBoolean(key, boardId, itemId, value) {
- if (typeof localStorage === 'undefined') return false;
-
- // Validate value
- if (typeof value !== 'boolean') {
- console.warn(`Invalid boolean value for ${key}:`, value);
- return false;
- }
-
- try {
- const stored = localStorage.getItem(key);
- const data = stored ? JSON.parse(stored) : {};
-
- if (!data[boardId]) {
- data[boardId] = {};
- }
- data[boardId][itemId] = value;
-
- localStorage.setItem(key, JSON.stringify(data));
- return true;
- } catch (e) {
- console.warn(`Error saving ${key} to localStorage:`, e);
- return false;
- }
- }
|