UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

2 lines (1 loc) • 2.09 kB
import{eventScopedCache as b}from"../tools/event-scoped-cache.js";import a from"../tools/logger";import h from"../tools/settings";import{isLocalStorageAvailable as c}from"./localStorage";const s=b();function u(e){return`${h.EXPO}-${e}`}function x(e){return e}function g(e){return e==="bookmarked"?{exhibitors:[],events:[],speakers:[],booths:[]}:{exhibitors:[],events:[]}}function k(e,o){if(o==null||typeof o!="object")return a.log(`Invalid ${e} data in localStorage - using defaults`),g(e);if(Array.isArray(o)){const t=e==="bookmarked"?{exhibitors:o,events:[],speakers:[],booths:[]}:{exhibitors:o,events:[]};return a.log(`Migrated ${e} data from array to object format`),saveStorage(e,t),t}if(e==="bookmarked"){const t=o,r={...t};return"speakers"in r||(r.speakers=[]),"booths"in r||(r.booths=[]),(!t.speakers||!t.booths)&&(a.log(`Migrated ${e} data (added speakers or booths field)`),saveStorage(e,r)),r}return e==="visited"?o:(a.log(`Unsupported ${e} data format - using defaults`),g(e))}export function getStorage(e){const o=s().get(e);if(o)return o;const t=g(e);if(!c)return a.warn(`localStorage unavailable \u2014 using default for ${e}`),s().set(e,t),t;const r=u(e),f=e;let i=null;try{i=localStorage.getItem(r)??localStorage.getItem(f)}catch(n){a.warn(`localStorage access error for ${e}`,n)}if(!i)return s().set(e,t),t;try{const n=JSON.parse(i),l=k(e,n);return s().set(e,l),l}catch(n){return a.error(`Error parsing ${e} data`,n),s().set(e,t),t}}export function saveStorage(e,o){if(!c)return;const t=u(e);try{localStorage.setItem(t,JSON.stringify(o)),s().set(e,o);const r={exhibitors:o.exhibitors.length,events:o.events.length};o.speakers&&(r.speakers=o.speakers.length),o.booths&&(r.booths=o.booths.length),a.log(`save${e[0].toUpperCase()+e.slice(1)}ToLocalStorage`,r)}catch(r){a.error(`Failed to save ${e} data`,r)}}export function getBookmarkStorage(){return getStorage("bookmarked")}export function getVisitedStorage(){return getStorage("visited")}export function saveBookmarkStorage(e){saveStorage("bookmarked",e)}export function saveVisitedStorage(e){saveStorage("visited",e)}