Skip to content

Commit 271492c

Browse files
committed
Fix entry restore with disabled locales
1 parent 2b4ebd5 commit 271492c

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

src/lib/services/contents/draft/backup.js

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { toRaw } from '@sveltia/utils/object';
33
import { IndexedDB } from '@sveltia/utils/storage';
44
import equal from 'fast-deep-equal';
55
import { get, writable } from 'svelte/store';
6+
import { createProxy } from '$lib/services/contents/draft/create';
67
import { entryDraft, i18nAutoDupEnabled } from '$lib/services/contents/draft';
78
import { siteConfigVersion } from '$lib/services/config';
89
import { backend } from '$lib/services/backends';
@@ -113,10 +114,12 @@ export const saveBackup = async (draft) => {
113114

114115
/**
115116
* Check if a draft backup is available, and restore it if requested by the user.
116-
* @param {string} collectionName - Collection name.
117-
* @param {string} [slug] - Entry slug. Existing entry only.
117+
* @param {object} args - Arguments.
118+
* @param {string} args.collectionName - Collection name.
119+
* @param {string} [args.fileName] - Collection file name.
120+
* @param {string} [args.slug] - Entry slug. Existing entry only.
118121
*/
119-
export const restoreBackupIfNeeded = async (collectionName, slug = '') => {
122+
export const restoreBackupIfNeeded = async ({ collectionName, fileName, slug = '' }) => {
120123
const backup = await getBackup(collectionName, slug);
121124

122125
if (!backup) {
@@ -141,10 +144,9 @@ export const restoreBackupIfNeeded = async (collectionName, slug = '') => {
141144
entryDraft.update((draft) => {
142145
if (draft) {
143146
draft.currentLocales = currentLocales;
144-
Object.entries(draft.currentValues).forEach(([locale, _currentValues]) => {
145-
Object.assign(_currentValues, currentValues[locale]);
146147

147-
Object.entries(_currentValues).forEach(([keyPath, value]) => {
148+
Object.entries(currentValues).forEach(([locale, valueMap]) => {
149+
Object.entries(valueMap).forEach(([keyPath, value]) => {
148150
if (typeof value === 'string') {
149151
[...value.matchAll(getBlobRegex('g'))].forEach(([blobURL]) => {
150152
const file = files[blobURL];
@@ -153,12 +155,26 @@ export const restoreBackupIfNeeded = async (collectionName, slug = '') => {
153155
// Regenerate a blob URL
154156
const newURL = URL.createObjectURL(file);
155157

156-
_currentValues[keyPath] = value.replaceAll(blobURL, newURL);
158+
valueMap[keyPath] = value.replaceAll(blobURL, newURL);
157159
draft.files[newURL] = file;
158160
}
159161
});
160162
}
161163
});
164+
165+
if (draft.currentValues[locale]) {
166+
Object.assign(draft.currentValues[locale], valueMap);
167+
} else {
168+
draft.currentValues[locale] = createProxy({
169+
draft: { collectionName, fileName },
170+
locale,
171+
target: structuredClone(valueMap),
172+
});
173+
}
174+
175+
if (!draft.originalValues[locale]) {
176+
draft.originalValues[locale] = {};
177+
}
162178
});
163179
}
164180

src/lib/services/contents/draft/create.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ export const createDraft = ({
397397
expanderStates: expanderStates ?? { _: {} },
398398
});
399399

400-
restoreBackupIfNeeded(collectionName, slug);
400+
restoreBackupIfNeeded({ collectionName, fileName, slug });
401401
};
402402

403403
/**

0 commit comments

Comments
 (0)