[CYS] Fix undefined query id warning (#41083)

* Fix Warning: Undefined array key "queryId"

* Add changelog

* Update trigger save button logo

* Update plugins/woocommerce-admin/client/customize-store/assembler-hub/sidebar/save-hub.tsx

Co-authored-by: Ilyas Foo <foo.ilyas@gmail.com>

---------

Co-authored-by: Ilyas Foo <foo.ilyas@gmail.com>
This commit is contained in:
Chi-Hsuan Huang 2023-11-01 12:30:47 +08:00 committed by GitHub
parent 1f625ca671
commit 2902cdee92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 5 deletions

View File

@ -4,7 +4,12 @@
/** /**
* External dependencies * External dependencies
*/ */
import { useContext, useState } from '@wordpress/element'; import {
useCallback,
useContext,
useEffect,
useState,
} from '@wordpress/element';
import { useQuery } from '@woocommerce/navigation'; import { useQuery } from '@woocommerce/navigation';
import { useSelect, useDispatch } from '@wordpress/data'; import { useSelect, useDispatch } from '@wordpress/data';
import { import {
@ -25,6 +30,8 @@ import { store as noticesStore } from '@wordpress/notices';
// @ts-ignore No types for this exist yet. // @ts-ignore No types for this exist yet.
import { useEntitiesSavedStatesIsDirty as useIsDirty } from '@wordpress/editor'; import { useEntitiesSavedStatesIsDirty as useIsDirty } from '@wordpress/editor';
import { recordEvent } from '@woocommerce/tracks'; import { recordEvent } from '@woocommerce/tracks';
// @ts-ignore No types for this exist yet.
import { useIsSiteEditorLoading } from '@wordpress/edit-site/build-module/components/layout/hooks';
/** /**
* Internal dependencies * Internal dependencies
@ -38,6 +45,7 @@ const PUBLISH_ON_SAVE_ENTITIES = [
name: 'wp_navigation', name: 'wp_navigation',
}, },
]; ];
let shouldTriggerSave = true;
export const SaveHub = () => { export const SaveHub = () => {
const urlParams = useQuery(); const urlParams = useQuery();
@ -47,6 +55,7 @@ export const SaveHub = () => {
const { resetHighlightedBlockIndex } = useContext( const { resetHighlightedBlockIndex } = useContext(
HighlightedBlockContext HighlightedBlockContext
); );
const isEditorLoading = useIsSiteEditorLoading();
// @ts-ignore No types for this exist yet. // @ts-ignore No types for this exist yet.
const { __unstableMarkLastChangeAsPersistent } = const { __unstableMarkLastChangeAsPersistent } =
useDispatch( blockEditorStore ); useDispatch( blockEditorStore );
@ -92,7 +101,7 @@ export const SaveHub = () => {
__experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits, __experimentalSaveSpecifiedEntityEdits: saveSpecifiedEntityEdits,
} = useDispatch( coreStore ); } = useDispatch( coreStore );
const save = async () => { const save = useCallback( async () => {
for ( const { kind, name, key, property } of dirtyEntityRecords ) { for ( const { kind, name, key, property } of dirtyEntityRecords ) {
if ( kind === 'root' && name === 'site' ) { if ( kind === 'root' && name === 'site' ) {
await saveSpecifiedEntityEdits( 'root', 'site', undefined, [ await saveSpecifiedEntityEdits( 'root', 'site', undefined, [
@ -115,7 +124,32 @@ export const SaveHub = () => {
__unstableMarkLastChangeAsPersistent(); __unstableMarkLastChangeAsPersistent();
} }
} }
}; }, [
dirtyEntityRecords,
editEntityRecord,
saveEditedEntityRecord,
saveSpecifiedEntityEdits,
__unstableMarkLastChangeAsPersistent,
] );
const isMainScreen = urlParams.path === '/customize-store/assembler-hub';
// Trigger a save when the editor is loaded and there are unsaved changes in main screen. This is needed to ensure FE is displayed correctly because some patterns have dynamic attributes that only generate in Editor.
useEffect( () => {
if ( isEditorLoading ) {
return;
}
if ( ! isMainScreen ) {
shouldTriggerSave = false;
return;
}
if ( shouldTriggerSave && isDirty ) {
save();
shouldTriggerSave = false;
}
}, [ isEditorLoading, isDirty, isMainScreen, save ] );
const onClickSaveButton = async () => { const onClickSaveButton = async () => {
const source = `${ urlParams.path.replace( const source = `${ urlParams.path.replace(
@ -153,13 +187,13 @@ export const SaveHub = () => {
}; };
const renderButton = () => { const renderButton = () => {
if ( urlParams.path === '/customize-store/assembler-hub' ) { if ( isMainScreen ) {
return ( return (
<Button <Button
variant="primary" variant="primary"
onClick={ onDone } onClick={ onDone }
className="edit-site-save-hub__button" className="edit-site-save-hub__button"
disabled={ isResolving } disabled={ isResolving || isEditorLoading }
aria-disabled={ isResolving } aria-disabled={ isResolving }
// @ts-ignore No types for this exist yet. // @ts-ignore No types for this exist yet.
__next40pxDefaultSize __next40pxDefaultSize

View File

@ -0,0 +1,4 @@
Significance: patch
Type: fix
Fix Undefined array key "queryId" error