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