{
  "version": 3,
  "sources": ["../../src/hooks/template-part-navigation-edit-button.js"],
  "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { addFilter } from '@wordpress/hooks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useCallback } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport {\n\t__unstableBlockToolbarLastItem as BlockToolbarLastItem,\n\tstore as blockEditorStore,\n} from '@wordpress/block-editor';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useSelect, useDispatch, useRegistry } from '@wordpress/data';\nimport { store as interfaceStore } from '@wordpress/interface';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\n// Block name constants\nconst NAVIGATION_BLOCK_NAME = 'core/navigation';\nconst TEMPLATE_PART_BLOCK_NAME = 'core/template-part';\n\n// Complementary area identifier for the block inspector\nconst BLOCK_INSPECTOR_AREA = 'edit-post/block';\n\n/**\n * Component that renders the \"Edit navigation\" button for template parts\n * that contain navigation blocks.\n *\n * @param {Object} props          Component props.\n * @param {string} props.clientId The template part block client ID.\n * @return {React.JSX.Element} The Edit navigation button component or null if not applicable.\n */\nfunction TemplatePartNavigationEditButton( { clientId } ) {\n\tconst registry = useRegistry();\n\tconst { selectBlock, flashBlock } = useDispatch( blockEditorStore );\n\tconst { requestInspectorTab } = unlock( useDispatch( blockEditorStore ) );\n\tconst { enableComplementaryArea } = useDispatch( interfaceStore );\n\n\tconst {\n\t\thasNavigationBlocks,\n\t\tfirstNavigationBlockId,\n\t\tisNavigationEditable,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetClientIdsOfDescendants,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockEditingMode,\n\t\t\t} = select( blockEditorStore );\n\n\t\t\tconst descendants = getClientIdsOfDescendants( clientId );\n\t\t\tconst navigationBlocksInTemplatePart = descendants.filter(\n\t\t\t\t( blockId ) => getBlockName( blockId ) === NAVIGATION_BLOCK_NAME\n\t\t\t);\n\n\t\t\tconst _hasNavigationBlocks =\n\t\t\t\tnavigationBlocksInTemplatePart.length > 0;\n\t\t\tconst _firstNavigationBlockId = _hasNavigationBlocks\n\t\t\t\t? navigationBlocksInTemplatePart[ 0 ]\n\t\t\t\t: null;\n\n\t\t\treturn {\n\t\t\t\thasNavigationBlocks: _hasNavigationBlocks,\n\t\t\t\tfirstNavigationBlockId: _firstNavigationBlockId,\n\t\t\t\t// We can't use the useBlockEditingMode hook here because the current\n\t\t\t\t// context is the template part, not the navigation block.\n\t\t\t\tisNavigationEditable:\n\t\t\t\t\tgetBlockEditingMode( _firstNavigationBlockId ) !==\n\t\t\t\t\t'disabled',\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst onEditNavigation = useCallback( () => {\n\t\tif ( firstNavigationBlockId ) {\n\t\t\t// Batch all dispatches so the request is in the store before\n\t\t\t// InspectorControlsTabs mounts. Without this, the Content tab flashes\n\t\t\t// before animating to List View.\n\t\t\tregistry.batch( () => {\n\t\t\t\tselectBlock( firstNavigationBlockId );\n\t\t\t\tflashBlock( firstNavigationBlockId, 500 );\n\t\t\t\tenableComplementaryArea( 'core', BLOCK_INSPECTOR_AREA );\n\t\t\t\trequestInspectorTab( 'list', {\n\t\t\t\t\topenPanel: firstNavigationBlockId,\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\t}, [\n\t\tfirstNavigationBlockId,\n\t\tregistry,\n\t\tselectBlock,\n\t\tflashBlock,\n\t\tenableComplementaryArea,\n\t\trequestInspectorTab,\n\t] );\n\n\t// Only show if template part contains navigation blocks and they are editable\n\tif ( ! hasNavigationBlocks || ! isNavigationEditable ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<BlockToolbarLastItem>\n\t\t\t<ToolbarGroup>\n\t\t\t\t<ToolbarButton\n\t\t\t\t\tlabel={ __( 'Edit navigation' ) }\n\t\t\t\t\tonClick={ onEditNavigation }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Edit navigation' ) }\n\t\t\t\t</ToolbarButton>\n\t\t\t</ToolbarGroup>\n\t\t</BlockToolbarLastItem>\n\t);\n}\n\n/**\n * Higher-order component that adds the Edit navigation button to template part blocks.\n */\nconst withTemplatePartNavigationEditButton = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\tconst isTemplatePart = props.name === TEMPLATE_PART_BLOCK_NAME;\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<BlockEdit key=\"edit\" { ...props } />\n\t\t\t\t{ props.isSelected && isTemplatePart && (\n\t\t\t\t\t<TemplatePartNavigationEditButton\n\t\t\t\t\t\tclientId={ props.clientId }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</>\n\t\t);\n\t},\n\t'withTemplatePartNavigationEditButton'\n);\n\n// Register the filter.\naddFilter(\n\t'editor.BlockEdit',\n\t'core/editor/with-template-part-navigation-edit-button',\n\twithTemplatePartNavigationEditButton\n);\n"],
  "mappings": ";AAGA,SAAS,iBAAiB;AAC1B,SAAS,kCAAkC;AAC3C,SAAS,mBAAmB;AAC5B,SAAS,UAAU;AACnB;AAAA,EACC,kCAAkC;AAAA,EAClC,SAAS;AAAA,OACH;AACP,SAAS,eAAe,oBAAoB;AAC5C,SAAS,WAAW,aAAa,mBAAmB;AACpD,SAAS,SAAS,sBAAsB;AAKxC,SAAS,cAAc;AA0FnB,SAmBD,UAnBC,KAmBD,YAnBC;AAvFJ,IAAM,wBAAwB;AAC9B,IAAM,2BAA2B;AAGjC,IAAM,uBAAuB;AAU7B,SAAS,iCAAkC,EAAE,SAAS,GAAI;AACzD,QAAM,WAAW,YAAY;AAC7B,QAAM,EAAE,aAAa,WAAW,IAAI,YAAa,gBAAiB;AAClE,QAAM,EAAE,oBAAoB,IAAI,OAAQ,YAAa,gBAAiB,CAAE;AACxE,QAAM,EAAE,wBAAwB,IAAI,YAAa,cAAe;AAEhE,QAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACD,IAAI;AAAA,IACH,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,gBAAiB;AAE7B,YAAM,cAAc,0BAA2B,QAAS;AACxD,YAAM,iCAAiC,YAAY;AAAA,QAClD,CAAE,YAAa,aAAc,OAAQ,MAAM;AAAA,MAC5C;AAEA,YAAM,uBACL,+BAA+B,SAAS;AACzC,YAAM,0BAA0B,uBAC7B,+BAAgC,CAAE,IAClC;AAEH,aAAO;AAAA,QACN,qBAAqB;AAAA,QACrB,wBAAwB;AAAA;AAAA;AAAA,QAGxB,sBACC,oBAAqB,uBAAwB,MAC7C;AAAA,MACF;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,QAAM,mBAAmB,YAAa,MAAM;AAC3C,QAAK,wBAAyB;AAI7B,eAAS,MAAO,MAAM;AACrB,oBAAa,sBAAuB;AACpC,mBAAY,wBAAwB,GAAI;AACxC,gCAAyB,QAAQ,oBAAqB;AACtD,4BAAqB,QAAQ;AAAA,UAC5B,WAAW;AAAA,QACZ,CAAE;AAAA,MACH,CAAE;AAAA,IACH;AAAA,EACD,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AAGF,MAAK,CAAE,uBAAuB,CAAE,sBAAuB;AACtD,WAAO;AAAA,EACR;AAEA,SACC,oBAAC,wBACA,8BAAC,gBACA;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ,GAAI,iBAAkB;AAAA,MAC9B,SAAU;AAAA,MAER,aAAI,iBAAkB;AAAA;AAAA,EACzB,GACD,GACD;AAEF;AAKA,IAAM,uCAAuC;AAAA,EAC5C,CAAE,cAAe,CAAE,UAAW;AAC7B,UAAM,iBAAiB,MAAM,SAAS;AAEtC,WACC,iCACC;AAAA,0BAAC,aAAuB,GAAG,SAAZ,MAAoB;AAAA,MACjC,MAAM,cAAc,kBACrB;AAAA,QAAC;AAAA;AAAA,UACA,UAAW,MAAM;AAAA;AAAA,MAClB;AAAA,OAEF;AAAA,EAEF;AAAA,EACA;AACD;AAGA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;",
  "names": []
}
