UNPKG

@ou-imdt/utils

Version:

Utility library for interactive media development

42 lines (37 loc) 1.6 kB
import isLocalAvailable from '../isLocalAvailable.js'; import getSavePrefix from './getSavePrefix.js'; /** * Loads data from localStorage. * @param {Object} options - Options for loading data. * @param {boolean | string} options.user - User/global, or group identifier. * @param {array} options.fields - Array of names - data to load. * @param {string} [options.activityId] - Optional activity ID. * @param {string} [options.documentId] - Optional document ID. * @param {string} [options.courseId] - Optional course ID. * @param {string} [options.modName] - Optional mod name. * @returns {Promise<any>} A promise that resolves with the loaded data, or rejects on error. */ export default async function loadDevData(options) { if (!isLocalAvailable()) throw new Error('Local storage is not available'); const { fields = ['widgetData'] } = options; try { await new Promise(resolve => setTimeout(resolve, 0)); // add flag to make async? const prefix = getSavePrefix(options); const values = Object.fromEntries(fields.map((key) => { return [key, JSON.parse(localStorage.getItem(`${prefix}:${key}`)) ?? '']; })); return values; } catch (err) { throw new Error('Error loading data'); } // TODO check with Mustafa/Edwin... // const local = {}; // if (['string', 'number'].includes(typeof user)) { // is a group // const data = localStorage.getItem(user); // const json = data ? JSON.parse(data) : {}; // fields.reduce((result, field) => { // result[field] = json[field] || ''; // return result; // }, local); // } }