From c14569a409fdf90af5d9a224c46a09984db01d1f Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Thu, 17 Aug 2023 14:01:22 +0400 Subject: [PATCH] Editor: Fix the 'useSelect' warning in the 'useIsDirty' hook --- .../hooks/use-is-dirty.js | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/packages/editor/src/components/entities-saved-states/hooks/use-is-dirty.js b/packages/editor/src/components/entities-saved-states/hooks/use-is-dirty.js index 7906dd800c661..e630c60b8c633 100644 --- a/packages/editor/src/components/entities-saved-states/hooks/use-is-dirty.js +++ b/packages/editor/src/components/entities-saved-states/hooks/use-is-dirty.js @@ -3,7 +3,7 @@ */ import { useSelect } from '@wordpress/data'; import { store as coreStore } from '@wordpress/core-data'; -import { useState } from '@wordpress/element'; +import { useMemo, useState } from '@wordpress/element'; import { __ } from '@wordpress/i18n'; const TRANSLATED_SITE_PROPERTIES = { @@ -18,38 +18,34 @@ const TRANSLATED_SITE_PROPERTIES = { }; export const useIsDirty = () => { - const { dirtyEntityRecords } = useSelect( ( select ) => { - const dirtyRecords = - select( coreStore ).__experimentalGetDirtyEntityRecords(); + const { editedEntities, siteEdits } = useSelect( ( select ) => { + const { __experimentalGetDirtyEntityRecords, getEntityRecordEdits } = + select( coreStore ); + return { + editedEntities: __experimentalGetDirtyEntityRecords(), + siteEdits: getEntityRecordEdits( 'root', 'site' ), + }; + }, [] ); + + const dirtyEntityRecords = useMemo( () => { // Remove site object and decouple into its edited pieces. - const dirtyRecordsWithoutSite = dirtyRecords.filter( + const editedEntitiesWithoutSite = editedEntities.filter( ( record ) => ! ( record.kind === 'root' && record.name === 'site' ) ); - const siteEdits = select( coreStore ).getEntityRecordEdits( - 'root', - 'site' - ); - - const siteEditsAsEntities = []; + const editedSiteEntities = []; for ( const property in siteEdits ) { - siteEditsAsEntities.push( { + editedSiteEntities.push( { kind: 'root', name: 'site', title: TRANSLATED_SITE_PROPERTIES[ property ] || property, property, } ); } - const dirtyRecordsWithSiteItems = [ - ...dirtyRecordsWithoutSite, - ...siteEditsAsEntities, - ]; - return { - dirtyEntityRecords: dirtyRecordsWithSiteItems, - }; - }, [] ); + return [ ...editedEntitiesWithoutSite, ...editedSiteEntities ]; + }, [ editedEntities, siteEdits ] ); // Unchecked entities to be ignored by save function. const [ unselectedEntities, _setUnselectedEntities ] = useState( [] );