UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 7.34 kB
{ "version": 3, "sources": ["../../../src/template-part/edit/import-controls.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf } from '@wordpress/i18n';\nimport { useMemo, useState } from '@wordpress/element';\nimport { useDispatch, useSelect, useRegistry } from '@wordpress/data';\nimport {\n\tButton,\n\tFlexBlock,\n\tFlexItem,\n\tSelectControl,\n\t__experimentalHStack as HStack,\n\t__experimentalSpacer as Spacer,\n} from '@wordpress/components';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { useCreateTemplatePartFromBlocks } from './utils/hooks';\nimport { transformWidgetToBlock } from './utils/transformers';\n\nconst SIDEBARS_QUERY = {\n\tper_page: -1,\n\t_fields: 'id,name,description,status,widgets',\n};\n\nexport function TemplatePartImportControls( { area, setAttributes } ) {\n\tconst [ selectedSidebar, setSelectedSidebar ] = useState( '' );\n\tconst [ isBusy, setIsBusy ] = useState( false );\n\n\tconst registry = useRegistry();\n\tconst { sidebars, hasResolved } = useSelect( ( select ) => {\n\t\tconst { getSidebars, hasFinishedResolution } = select( coreStore );\n\n\t\treturn {\n\t\t\tsidebars: getSidebars( SIDEBARS_QUERY ),\n\t\t\thasResolved: hasFinishedResolution( 'getSidebars', [\n\t\t\t\tSIDEBARS_QUERY,\n\t\t\t] ),\n\t\t};\n\t}, [] );\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\n\tconst createFromBlocks = useCreateTemplatePartFromBlocks(\n\t\tarea,\n\t\tsetAttributes\n\t);\n\n\tconst options = useMemo( () => {\n\t\tconst sidebarOptions = ( sidebars ?? [] )\n\t\t\t.filter(\n\t\t\t\t( widgetArea ) =>\n\t\t\t\t\twidgetArea.id !== 'wp_inactive_widgets' &&\n\t\t\t\t\twidgetArea.widgets.length > 0\n\t\t\t)\n\t\t\t.map( ( widgetArea ) => {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: widgetArea.id,\n\t\t\t\t\tlabel: widgetArea.name,\n\t\t\t\t};\n\t\t\t} );\n\n\t\tif ( ! sidebarOptions.length ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn [\n\t\t\t{ value: '', label: __( 'Select widget area' ) },\n\t\t\t...sidebarOptions,\n\t\t];\n\t}, [ sidebars ] );\n\n\t// Render an empty node while data is loading to avoid SlotFill re-positioning bug.\n\t// See: https://github.com/WordPress/gutenberg/issues/15641.\n\tif ( ! hasResolved ) {\n\t\treturn <Spacer marginBottom=\"0\" />;\n\t}\n\n\tif ( hasResolved && ! options.length ) {\n\t\treturn null;\n\t}\n\n\tasync function createFromWidgets( event ) {\n\t\tevent.preventDefault();\n\n\t\tif ( isBusy || ! selectedSidebar ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsBusy( true );\n\n\t\tconst sidebar = options.find(\n\t\t\t( { value } ) => value === selectedSidebar\n\t\t);\n\t\tconst { getWidgets } = registry.resolveSelect( coreStore );\n\n\t\t// The widgets API always returns a successful response.\n\t\tconst widgets = await getWidgets( {\n\t\t\tsidebar: sidebar.value,\n\t\t\t_embed: 'about',\n\t\t} );\n\n\t\tconst skippedWidgets = new Set();\n\t\tconst blocks = widgets.flatMap( ( widget ) => {\n\t\t\tconst block = transformWidgetToBlock( widget );\n\n\t\t\t// Skip the block if we have no matching transformations.\n\t\t\tif ( ! block ) {\n\t\t\t\tskippedWidgets.add( widget.id_base );\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\treturn block;\n\t\t} );\n\n\t\tawait createFromBlocks(\n\t\t\tblocks,\n\t\t\t/* translators: %s: name of the widget area */\n\t\t\tsprintf( __( 'Widget area: %s' ), sidebar.label )\n\t\t);\n\n\t\tif ( skippedWidgets.size ) {\n\t\t\tcreateErrorNotice(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: the list of widgets */\n\t\t\t\t\t__( 'Unable to import the following widgets: %s.' ),\n\t\t\t\t\tArray.from( skippedWidgets ).join( ', ' )\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tsetIsBusy( false );\n\t}\n\n\treturn (\n\t\t<Spacer marginBottom=\"4\">\n\t\t\t<HStack as=\"form\" onSubmit={ createFromWidgets }>\n\t\t\t\t<FlexBlock>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\tlabel={ __( 'Import widget area' ) }\n\t\t\t\t\t\tvalue={ selectedSidebar }\n\t\t\t\t\t\toptions={ options }\n\t\t\t\t\t\tonChange={ ( value ) => setSelectedSidebar( value ) }\n\t\t\t\t\t\tdisabled={ ! options.length }\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t/>\n\t\t\t\t</FlexBlock>\n\t\t\t\t<FlexItem\n\t\t\t\t\tstyle={ {\n\t\t\t\t\t\tmarginBottom: '8px',\n\t\t\t\t\t\tmarginTop: 'auto',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Button\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tisBusy={ isBusy }\n\t\t\t\t\t\taria-disabled={ isBusy || ! selectedSidebar }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ _x( 'Import', 'button label' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</FlexItem>\n\t\t\t</HStack>\n\t\t</Spacer>\n\t);\n}\n"], "mappings": "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", "names": [] }