79 lines
1.8 KiB
TypeScript
79 lines
1.8 KiB
TypeScript
const STORAGE_KEY = 'questionnaire';
|
|
|
|
function save(
|
|
usage: string,
|
|
questionnaireType: string,
|
|
answers: { [key: number]: string },
|
|
) {
|
|
try {
|
|
const drafts = JSON.parse(
|
|
localStorage.getItem(`${STORAGE_KEY}_${usage}`) || '{}',
|
|
);
|
|
drafts[questionnaireType] = {
|
|
answers,
|
|
savedAt: new Date().toISOString(),
|
|
};
|
|
localStorage.setItem(`${STORAGE_KEY}_${usage}`, JSON.stringify(drafts));
|
|
return true;
|
|
} catch (error) {
|
|
console.error('Failed to save draft:', error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function load(
|
|
usage: string,
|
|
questionnaireType: string,
|
|
): { [key: number]: string } | null {
|
|
try {
|
|
const drafts = JSON.parse(
|
|
localStorage.getItem(`${STORAGE_KEY}_${usage}`) || '{}',
|
|
);
|
|
return drafts[questionnaireType]?.answers || null;
|
|
} catch (error) {
|
|
console.error('Failed to load draft:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function clear(usage: string, questionnaireType: string) {
|
|
try {
|
|
const key = `${STORAGE_KEY}_${usage}`;
|
|
const drafts = JSON.parse(localStorage.getItem(key) || '{}');
|
|
|
|
if (!(questionnaireType in drafts)) {
|
|
return false;
|
|
}
|
|
|
|
delete drafts[questionnaireType];
|
|
|
|
if (Object.keys(drafts).length === 0) {
|
|
localStorage.removeItem(key);
|
|
} else {
|
|
localStorage.setItem(key, JSON.stringify(drafts));
|
|
}
|
|
|
|
return true;
|
|
} catch (error) {
|
|
console.error('Failed to clear draft:', error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export function saveDraft(
|
|
questionnaireType: string,
|
|
answers: { [key: number]: string },
|
|
) {
|
|
return save('draft', questionnaireType, answers);
|
|
}
|
|
|
|
export function loadDraft(
|
|
questionnaireType: string,
|
|
): { [key: number]: string } | null {
|
|
return load('draft', questionnaireType);
|
|
}
|
|
|
|
export function clearDraft(questionnaireType: string) {
|
|
return clear('draft', questionnaireType);
|
|
}
|