@ou-imdt/utils
Version:
Utility library for interactive media development
42 lines (37 loc) • 1.6 kB
JavaScript
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);
// }
}