summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/lib/utils/autosave.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/lib/utils/autosave.js')
-rw-r--r--app/assets/javascripts/lib/utils/autosave.js40
1 files changed, 36 insertions, 4 deletions
diff --git a/app/assets/javascripts/lib/utils/autosave.js b/app/assets/javascripts/lib/utils/autosave.js
index dac1da743a2..01316be06a2 100644
--- a/app/assets/javascripts/lib/utils/autosave.js
+++ b/app/assets/javascripts/lib/utils/autosave.js
@@ -1,8 +1,27 @@
+import { isString } from 'lodash';
import { capitalizeFirstCharacter } from '~/lib/utils/text_utility';
+const normalizeKey = (autosaveKey) => {
+ let normalizedKey;
+
+ if (Array.isArray(autosaveKey) && autosaveKey.every(isString)) {
+ normalizedKey = autosaveKey.join('/');
+ } else if (isString(autosaveKey)) {
+ normalizedKey = autosaveKey;
+ } else {
+ // eslint-disable-next-line @gitlab/require-i18n-strings
+ throw new Error('Invalid autosave key');
+ }
+
+ return `autosave/${normalizedKey}`;
+};
+
+const lockVersionKey = (autosaveKey) => `${normalizeKey(autosaveKey)}/lockVersion`;
+
export const clearDraft = (autosaveKey) => {
try {
- window.localStorage.removeItem(`autosave/${autosaveKey}`);
+ window.localStorage.removeItem(normalizeKey(autosaveKey));
+ window.localStorage.removeItem(lockVersionKey(autosaveKey));
} catch (e) {
// eslint-disable-next-line no-console
console.error(e);
@@ -11,7 +30,17 @@ export const clearDraft = (autosaveKey) => {
export const getDraft = (autosaveKey) => {
try {
- return window.localStorage.getItem(`autosave/${autosaveKey}`);
+ return window.localStorage.getItem(normalizeKey(autosaveKey));
+ } catch (e) {
+ // eslint-disable-next-line no-console
+ console.error(e);
+ return null;
+ }
+};
+
+export const getLockVersion = (autosaveKey) => {
+ try {
+ return window.localStorage.getItem(lockVersionKey(autosaveKey));
} catch (e) {
// eslint-disable-next-line no-console
console.error(e);
@@ -19,9 +48,12 @@ export const getDraft = (autosaveKey) => {
}
};
-export const updateDraft = (autosaveKey, text) => {
+export const updateDraft = (autosaveKey, text, lockVersion) => {
try {
- window.localStorage.setItem(`autosave/${autosaveKey}`, text);
+ window.localStorage.setItem(normalizeKey(autosaveKey), text);
+ if (lockVersion) {
+ window.localStorage.setItem(lockVersionKey(autosaveKey), lockVersion);
+ }
} catch (e) {
// eslint-disable-next-line no-console
console.error(e);