import { hideFurnitureOn } from '@/utils/defaults'; /* Returns false if page furniture should be hidden on said route */ export const shouldBeVisible = (routeName) => !hideFurnitureOn.includes(routeName); /* Very rudimentary hash function for generative icons */ export const asciiHash = (input) => { const str = (!input || input.length === 0) ? Math.random().toString() : input; const reducer = (previousHash, char) => (previousHash || 0) + char.charCodeAt(0); const asciiSum = str.split('').reduce(reducer).toString(); const shortened = asciiSum.slice(0, 30) + asciiSum.slice(asciiSum.length - 30); return window.btoa(shortened); }; /* Encode potentially malicious characters from string */ export const sanitize = (string) => { const map = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/', }; const reg = /[&<>"'/]/ig; return string.replace(reg, (match) => (map[match])); }; /* Based on section title, item name and index, return a string value for ID */ const makeItemId = (sectionStr, itemStr, index) => { const charSum = sectionStr.split('').map((a) => a.charCodeAt(0)).reduce((x, y) => x + y); const itemTitleStr = itemStr.replace(/\s+/g, '-').replace(/[^a-zA-Z ]/g, '').toLowerCase(); return `${index}_${charSum}_${itemTitleStr}_${Math.random()}`; }; /* Given an array of sections, apply a unique ID to each item, and return modified array */ export const applyItemId = (inputSections) => { const sections = inputSections || []; sections.forEach((sec, secIdx) => { if (sec.items) { sec.items.forEach((item, itemIdx) => { sections[secIdx].items[itemIdx].id = makeItemId(sec.name, item.title, itemIdx); // TODO: Check if ID already exists, and if so, modify it }); } }); return sections; };