@wordpress/data 6.4.1 → 6.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -252,29 +252,31 @@ export function migrateFeaturePreferencesToPreferencesStore(
252
252
  : sourceFeatures;
253
253
 
254
254
  if ( featuresToMigrate ) {
255
- const targetFeatures = state[ preferencesStoreName ]?.preferences;
255
+ const existingPreferences = state[ preferencesStoreName ]?.preferences;
256
256
 
257
257
  // Avoid migrating features again if they've previously been migrated.
258
- if ( ! targetFeatures?.[ sourceStoreName ] ) {
258
+ if ( ! existingPreferences?.[ sourceStoreName ] ) {
259
259
  // Set the feature values in the interface store, the features
260
260
  // object is keyed by 'scope', which matches the store name for
261
261
  // the source.
262
262
  persistence.set( preferencesStoreName, {
263
263
  preferences: {
264
- ...targetFeatures,
264
+ ...existingPreferences,
265
265
  [ sourceStoreName ]: featuresToMigrate,
266
266
  },
267
267
  } );
268
268
 
269
269
  // Remove migrated feature preferences from `interface`.
270
270
  if ( interfaceFeatures ) {
271
- const otherInterfaceFeatures =
271
+ const otherInterfaceState = state[ interfaceStoreName ];
272
+ const otherInterfaceScopes =
272
273
  state[ interfaceStoreName ]?.preferences?.features;
273
274
 
274
275
  persistence.set( interfaceStoreName, {
276
+ ...otherInterfaceState,
275
277
  preferences: {
276
278
  features: {
277
- ...otherInterfaceFeatures,
279
+ ...otherInterfaceScopes,
278
280
  [ sourceStoreName ]: undefined,
279
281
  },
280
282
  },
@@ -283,9 +285,11 @@ export function migrateFeaturePreferencesToPreferencesStore(
283
285
 
284
286
  // Remove migrated feature preferences from the source.
285
287
  if ( sourceFeatures ) {
288
+ const otherSourceState = state[ sourceStoreName ];
286
289
  const sourcePreferences = state[ sourceStoreName ]?.preferences;
287
290
 
288
291
  persistence.set( sourceStoreName, {
292
+ ...otherSourceState,
289
293
  preferences: {
290
294
  ...sourcePreferences,
291
295
  features: undefined,
@@ -335,8 +339,10 @@ export function migrateIndividualPreferenceToPreferencesStore(
335
339
  } );
336
340
 
337
341
  // Remove migrated feature preferences from the source.
342
+ const otherSourceState = state[ sourceStoreName ];
338
343
  const allSourcePreferences = state[ sourceStoreName ]?.preferences;
339
344
  persistence.set( sourceStoreName, {
345
+ ...otherSourceState,
340
346
  preferences: {
341
347
  ...allSourcePreferences,
342
348
  [ key ]: undefined,
@@ -344,56 +350,62 @@ export function migrateIndividualPreferenceToPreferencesStore(
344
350
  } );
345
351
  }
346
352
 
347
- /**
348
- * Move the 'features' object in local storage from the sourceStoreName to the
349
- * interface store.
350
- *
351
- * @param {Object} persistence The persistence interface.
352
- * @param {string} sourceStoreName The name of the store that has persisted
353
- * preferences to migrate to the interface
354
- * package.
355
- */
356
- export function migrateFeaturePreferencesToInterfaceStore(
357
- persistence,
358
- sourceStoreName
353
+ export function migrateThirdPartyFeaturePreferencesToPreferencesStore(
354
+ persistence
359
355
  ) {
360
356
  const interfaceStoreName = 'core/interface';
361
- const state = persistence.get();
362
- const sourcePreferences = state[ sourceStoreName ]?.preferences;
363
- const sourceFeatures = sourcePreferences?.features;
357
+ const preferencesStoreName = 'core/preferences';
364
358
 
365
- if ( sourceFeatures ) {
366
- const targetFeatures =
367
- state[ interfaceStoreName ]?.preferences?.features;
359
+ let state = persistence.get();
368
360
 
369
- // Avoid migrating features again if they've previously been migrated.
370
- if ( ! targetFeatures?.[ sourceStoreName ] ) {
371
- // Set the feature values in the interface store, the features
372
- // object is keyed by 'scope', which matches the store name for
373
- // the source.
374
- persistence.set( interfaceStoreName, {
375
- preferences: {
376
- features: {
377
- ...targetFeatures,
378
- [ sourceStoreName ]: sourceFeatures,
379
- },
380
- },
381
- } );
361
+ const interfaceScopes = state[ interfaceStoreName ]?.preferences?.features;
382
362
 
383
- // Remove feature preferences from the source.
384
- persistence.set( sourceStoreName, {
385
- preferences: {
386
- ...sourcePreferences,
387
- features: undefined,
388
- },
389
- } );
363
+ for ( const scope in interfaceScopes ) {
364
+ // Don't migrate any core 'scopes'.
365
+ if ( scope.startsWith( 'core' ) ) {
366
+ continue;
367
+ }
368
+
369
+ // Skip this scope if there are no features to migrates
370
+ const featuresToMigrate = interfaceScopes[ scope ];
371
+ if ( ! featuresToMigrate ) {
372
+ continue;
390
373
  }
374
+
375
+ const existingPreferences = state[ preferencesStoreName ]?.preferences;
376
+
377
+ // Add the data to the preferences store structure.
378
+ persistence.set( preferencesStoreName, {
379
+ preferences: {
380
+ ...existingPreferences,
381
+ [ scope ]: featuresToMigrate,
382
+ },
383
+ } );
384
+
385
+ // Remove the data from the interface store structure.
386
+ // Call `persistence.get` again to make sure `state` is up-to-date with
387
+ // any changes from the previous iteration of this loop.
388
+ state = persistence.get();
389
+ const otherInterfaceState = state[ interfaceStoreName ];
390
+ const otherInterfaceScopes =
391
+ state[ interfaceStoreName ]?.preferences?.features;
392
+
393
+ persistence.set( interfaceStoreName, {
394
+ ...otherInterfaceState,
395
+ preferences: {
396
+ features: {
397
+ ...otherInterfaceScopes,
398
+ [ scope ]: undefined,
399
+ },
400
+ },
401
+ } );
391
402
  }
392
403
  }
393
404
 
394
405
  persistencePlugin.__unstableMigrate = ( pluginOptions ) => {
395
406
  const persistence = createPersistenceInterface( pluginOptions );
396
407
 
408
+ // Boolean feature preferences.
397
409
  migrateFeaturePreferencesToPreferencesStore(
398
410
  persistence,
399
411
  'core/edit-widgets'
@@ -406,14 +418,27 @@ persistencePlugin.__unstableMigrate = ( pluginOptions ) => {
406
418
  persistence,
407
419
  'core/edit-post'
408
420
  );
421
+ migrateFeaturePreferencesToPreferencesStore(
422
+ persistence,
423
+ 'core/edit-site'
424
+ );
425
+ migrateThirdPartyFeaturePreferencesToPreferencesStore( persistence );
426
+
427
+ // Other ad-hoc preferences.
409
428
  migrateIndividualPreferenceToPreferencesStore(
410
429
  persistence,
411
430
  'core/edit-post',
412
431
  'hiddenBlockTypes'
413
432
  );
414
- migrateFeaturePreferencesToPreferencesStore(
433
+ migrateIndividualPreferenceToPreferencesStore(
415
434
  persistence,
416
- 'core/edit-site'
435
+ 'core/edit-post',
436
+ 'editorMode'
437
+ );
438
+ migrateIndividualPreferenceToPreferencesStore(
439
+ persistence,
440
+ 'core/edit-post',
441
+ 'preferredStyleVariations'
417
442
  );
418
443
  migrateIndividualPreferenceToPreferencesStore(
419
444
  persistence,