UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 12.2 kB
{ "version": 3, "sources": ["../../src/tag-cloud/edit.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tFlex,\n\tFlexItem,\n\tToggleControl,\n\tSelectControl,\n\tSpinner,\n\tRangeControl,\n\t__experimentalUnitControl as UnitControl,\n\t__experimentalUseCustomUnits as useCustomUnits,\n\t__experimentalParseQuantityAndUnitFromRawValue as parseQuantityAndUnitFromRawValue,\n\t__experimentalToolsPanel as ToolsPanel,\n\t__experimentalToolsPanelItem as ToolsPanelItem,\n} from '@wordpress/components';\nimport { useSelect } from '@wordpress/data';\nimport { __, sprintf } from '@wordpress/i18n';\nimport {\n\tInspectorControls,\n\tuseBlockProps,\n\tuseSettings,\n} from '@wordpress/block-editor';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useServerSideRender } from '@wordpress/server-side-render';\nimport { useDisabled } from '@wordpress/compose';\n\n/**\n * Internal dependencies\n */\nimport { useToolsPanelDropdownMenuProps } from '../utils/hooks';\nimport HtmlRenderer from '../utils/html-renderer';\n\n/**\n * Minimum number of tags a user can show using this block.\n *\n * @type {number}\n */\nconst MIN_TAGS = 1;\n\n/**\n * Maximum number of tags a user can show using this block.\n *\n * @type {number}\n */\nconst MAX_TAGS = 100;\n\nconst MIN_FONT_SIZE = 0.1;\nconst MAX_FONT_SIZE = 100;\n\nfunction TagCloudEdit( { attributes, setAttributes, name } ) {\n\tconst {\n\t\ttaxonomy,\n\t\tshowTagCounts,\n\t\tnumberOfTags,\n\t\tsmallestFontSize,\n\t\tlargestFontSize,\n\t} = attributes;\n\n\tconst [ availableUnits ] = useSettings( 'spacing.units' );\n\tconst dropdownMenuProps = useToolsPanelDropdownMenuProps();\n\n\t// The `pt` unit is used as the default value and is therefore\n\t// always considered an available unit.\n\tconst units = useCustomUnits( {\n\t\tavailableUnits: availableUnits\n\t\t\t? [ ...availableUnits, 'pt' ]\n\t\t\t: [ '%', 'px', 'em', 'rem', 'pt' ],\n\t} );\n\n\tconst taxonomies = useSelect(\n\t\t( select ) => select( coreStore ).getTaxonomies( { per_page: -1 } ),\n\t\t[]\n\t);\n\n\tconst getTaxonomyOptions = () => {\n\t\tconst selectOption = {\n\t\t\tlabel: __( '- Select -' ),\n\t\t\tvalue: '',\n\t\t\tdisabled: true,\n\t\t};\n\t\tconst taxonomyOptions = ( taxonomies ?? [] )\n\t\t\t.filter( ( tax ) => !! tax.show_cloud )\n\t\t\t.map( ( item ) => {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: item.slug,\n\t\t\t\t\tlabel: item.name,\n\t\t\t\t};\n\t\t\t} );\n\n\t\treturn [ selectOption, ...taxonomyOptions ];\n\t};\n\n\tconst onFontSizeChange = ( fontSizeLabel, newValue ) => {\n\t\t// eslint-disable-next-line @wordpress/no-unused-vars-before-return\n\t\tconst [ quantity, newUnit ] =\n\t\t\tparseQuantityAndUnitFromRawValue( newValue );\n\t\tif ( ! Number.isFinite( quantity ) ) {\n\t\t\treturn;\n\t\t}\n\t\tconst updateObj = { [ fontSizeLabel ]: newValue };\n\t\t// We need to keep in sync the `unit` changes to both `smallestFontSize`\n\t\t// and `largestFontSize` attributes.\n\t\tObject.entries( {\n\t\t\tsmallestFontSize,\n\t\t\tlargestFontSize,\n\t\t} ).forEach( ( [ attribute, currentValue ] ) => {\n\t\t\tconst [ currentQuantity, currentUnit ] =\n\t\t\t\tparseQuantityAndUnitFromRawValue( currentValue );\n\t\t\t// Only add an update if the other font size attribute has a different unit.\n\t\t\tif ( attribute !== fontSizeLabel && currentUnit !== newUnit ) {\n\t\t\t\tupdateObj[ attribute ] = `${ currentQuantity }${ newUnit }`;\n\t\t\t}\n\t\t} );\n\t\tsetAttributes( updateObj );\n\t};\n\n\tconst inspectorControls = (\n\t\t<InspectorControls>\n\t\t\t<ToolsPanel\n\t\t\t\tlabel={ __( 'Settings' ) }\n\t\t\t\tresetAll={ () => {\n\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\ttaxonomy: 'post_tag',\n\t\t\t\t\t\tshowTagCounts: false,\n\t\t\t\t\t\tnumberOfTags: 45,\n\t\t\t\t\t\tsmallestFontSize: '8pt',\n\t\t\t\t\t\tlargestFontSize: '22pt',\n\t\t\t\t\t} );\n\t\t\t\t} }\n\t\t\t\tdropdownMenuProps={ dropdownMenuProps }\n\t\t\t>\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => taxonomy !== 'post_tag' }\n\t\t\t\t\tlabel={ __( 'Taxonomy' ) }\n\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\tsetAttributes( { taxonomy: 'post_tag' } )\n\t\t\t\t\t}\n\t\t\t\t\tisShownByDefault\n\t\t\t\t>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tlabel={ __( 'Taxonomy' ) }\n\t\t\t\t\t\toptions={ getTaxonomyOptions() }\n\t\t\t\t\t\tvalue={ taxonomy }\n\t\t\t\t\t\tonChange={ ( selectedTaxonomy ) =>\n\t\t\t\t\t\t\tsetAttributes( { taxonomy: selectedTaxonomy } )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () =>\n\t\t\t\t\t\tsmallestFontSize !== '8pt' || largestFontSize !== '22pt'\n\t\t\t\t\t}\n\t\t\t\t\tlabel={ __( 'Font size' ) }\n\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\tsetAttributes( {\n\t\t\t\t\t\t\tsmallestFontSize: '8pt',\n\t\t\t\t\t\t\tlargestFontSize: '22pt',\n\t\t\t\t\t\t} )\n\t\t\t\t\t}\n\t\t\t\t\tisShownByDefault\n\t\t\t\t>\n\t\t\t\t\t<Flex gap={ 4 }>\n\t\t\t\t\t\t<FlexItem isBlock>\n\t\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Smallest size' ) }\n\t\t\t\t\t\t\t\tvalue={ smallestFontSize }\n\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\t\tonFontSizeChange(\n\t\t\t\t\t\t\t\t\t\t'smallestFontSize',\n\t\t\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t\t\tmin={ MIN_FONT_SIZE }\n\t\t\t\t\t\t\t\tmax={ MAX_FONT_SIZE }\n\t\t\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t\t<FlexItem isBlock>\n\t\t\t\t\t\t\t<UnitControl\n\t\t\t\t\t\t\t\tlabel={ __( 'Largest size' ) }\n\t\t\t\t\t\t\t\tvalue={ largestFontSize }\n\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\t\tonFontSizeChange(\n\t\t\t\t\t\t\t\t\t\t'largestFontSize',\n\t\t\t\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tunits={ units }\n\t\t\t\t\t\t\t\tmin={ MIN_FONT_SIZE }\n\t\t\t\t\t\t\t\tmax={ MAX_FONT_SIZE }\n\t\t\t\t\t\t\t\tsize=\"__unstable-large\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</FlexItem>\n\t\t\t\t\t</Flex>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => numberOfTags !== 45 }\n\t\t\t\t\tlabel={ __( 'Number of tags' ) }\n\t\t\t\t\tonDeselect={ () => setAttributes( { numberOfTags: 45 } ) }\n\t\t\t\t\tisShownByDefault\n\t\t\t\t>\n\t\t\t\t\t<RangeControl\n\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\tlabel={ __( 'Number of tags' ) }\n\t\t\t\t\t\tvalue={ numberOfTags }\n\t\t\t\t\t\tonChange={ ( value ) =>\n\t\t\t\t\t\t\tsetAttributes( { numberOfTags: value } )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmin={ MIN_TAGS }\n\t\t\t\t\t\tmax={ MAX_TAGS }\n\t\t\t\t\t\trequired\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t\t<ToolsPanelItem\n\t\t\t\t\thasValue={ () => showTagCounts !== false }\n\t\t\t\t\tlabel={ __( 'Show tag counts' ) }\n\t\t\t\t\tonDeselect={ () =>\n\t\t\t\t\t\tsetAttributes( { showTagCounts: false } )\n\t\t\t\t\t}\n\t\t\t\t\tisShownByDefault\n\t\t\t\t>\n\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\tlabel={ __( 'Show tag counts' ) }\n\t\t\t\t\t\tchecked={ showTagCounts }\n\t\t\t\t\t\tonChange={ () =>\n\t\t\t\t\t\t\tsetAttributes( { showTagCounts: ! showTagCounts } )\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</ToolsPanelItem>\n\t\t\t</ToolsPanel>\n\t\t</InspectorControls>\n\t);\n\n\tconst { content, status, error } = useServerSideRender( {\n\t\tattributes,\n\t\tskipBlockSupportAttributes: true,\n\t\tblock: name,\n\t} );\n\n\tconst disabledRef = useDisabled();\n\tconst blockProps = useBlockProps( { ref: disabledRef } );\n\n\treturn (\n\t\t<>\n\t\t\t{ inspectorControls }\n\t\t\t{ status === 'loading' && (\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<Spinner />\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ status === 'error' && (\n\t\t\t\t<div { ...blockProps }>\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{ sprintf(\n\t\t\t\t\t\t\t/* translators: %s: error message returned when rendering the block. */\n\t\t\t\t\t\t\t__( 'Error: %s' ),\n\t\t\t\t\t\t\terror\n\t\t\t\t\t\t) }\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t) }\n\t\t\t{ status === 'success' && (\n\t\t\t\t<HtmlRenderer wrapperProps={ blockProps } html={ content } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nexport default TagCloudEdit;\n"], "mappings": "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", "names": ["useCustomUnits", "coreStore", "parseQuantityAndUnitFromRawValue", "ToolsPanel", "ToolsPanelItem", "UnitControl", "HtmlRenderer"] }