UNPKG

@ou-imdt/utils

Version:

Utility library for interactive media development

37 lines (32 loc) 1.48 kB
import isLocalAvailable from '../isLocalAvailable.js'; import getSavePrefix from './getSavePrefix.js'; /** * Saves data to localStorage. * @param {object} options - Options for saving data. * @param {boolean | string} options.user - User/global, or group identifier. * @param {object} options.values - Data to be saved. * @param {string} [options.activityId] - Optional activity ID. * @param {string} [options.documentId] - Optional document ID. * @param {string} [options.courseId] - Optional course ID. * @param {string} [options.previousValues] - Previous data to compare. * @param {function} [options.onRetry] - Callback function that is called if previous values changed. * @returns {Promise<any>} A promise that resolves with the saved data, or rejects on error. */ export default async function saveDevData(options) { if (!isLocalAvailable()) throw new Error('Local storage is not available'); try { await new Promise(resolve => setTimeout(resolve, 0)); // add flag to make async? const { values = {} } = options; const prefix = getSavePrefix(options); for (const [key, value] of Object.entries(values)) { localStorage.setItem(`${prefix}:${key}`, JSON.stringify(value)); } return true; } catch (err) { throw new Error(`Unable to save data: ${err}`); } // TODO check with Mustafa/Edwin... // if (['string', 'number'].includes(typeof user)) { // localStorage.setItem(user, JSON.stringify(values)) // } }