{"id":228007,"date":"2022-10-12T10:23:00","date_gmt":"2022-10-12T07:23:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228007"},"modified":"2022-11-09T00:13:09","modified_gmt":"2022-11-08T21:13:09","slug":"laegg-till-select2-som-en-inspectorcontrol-i-wordpress-gutenberg","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/laegg-till-select2-som-en-inspectorcontrol-i-wordpress-gutenberg\/","title":{"rendered":"L\u00e4gg till Select2 som en InspectorControl i WordPress Gutenberg"},"content":{"rendered":"\n<p>F\u00f6r ett projekt jag arbetade med ville jag anv\u00e4nda Select2 som en Gutenberg <code>InpectorControl<\/code>f\u00f6r att l\u00e5ta mig till\u00e4mpa inst\u00e4llningar p\u00e5 ett block. Den h\u00e4r handledningen kommer ocks\u00e5 att ge dig grunden du beh\u00f6ver f\u00f6r att f\u00e5 in en tredje parts React-komponent i WordPress Gutenberg Editor.<\/p>\n<p>Select2 \u00e4r en superh\u00e4ndig ers\u00e4ttning f\u00f6r utvalda l\u00e5dor p\u00e5 din webbplats. I synnerhet har den n\u00e5gra bra alternativ f\u00f6r att v\u00e4lja flera objekt.<\/p>\n<p>Den f\u00e4rdiga produkten, Select2 i WordPress Gutenberg InspectorControls<\/p>\n<p>Den goda nyheten \u00e4r att jag inte beh\u00f6vde bygga en React-komponent f\u00f6r att f\u00e5 in Select2 i Gutenberg, <a href=\"https:\/\/github.com\/JedWatson\/react-select\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>react-select<\/code>komponenten av Jed Watson<\/a>, g\u00f6r redan ett bra jobb med detta, men att f\u00e5 den att spela bra med Gutenberg var inte s\u00e5 l\u00e4tt som att bara f\u00f6lja instruktionerna.<\/p>\n<p>F\u00f6rst och fr\u00e4mst beh\u00f6vde vi installera komponenten i v\u00e5r build. Eftersom detta var p\u00e5 npm var det s\u00e5 enkelt som att skriva in f\u00f6ljande i v\u00e5r terminal:<\/p>\n<h2>Att f\u00e5 in Select2 i ett Gutenberg-block<\/h2>\n<p>Genom att anv\u00e4nda <a href=\"https:\/\/github.com\/zgordon\/gutenberg-course\/blob\/master\/blocks\/06-inspector-controls\/index.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zac Gordons Gutenberg Course Git repo<\/a> (en del av <a href=\"https:\/\/javascriptforwp.com\/courses\/gutenburg-development\/ref\/648\/?campaign=GutenbergDevelopment\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Zac Gordons fantastiska Gutenberg-utvecklingskurs<\/a>) som bas f\u00f6r mitt plugin (s\u00e4rskilt <code>InspectorControls<\/code>exemplet), <code>react-select<\/code>beh\u00f6vde jag l\u00e4gga till f\u00f6ljande inkluderar \u00f6verst i min fil:<\/p>\n<pre><code>import React from 'react';\nimport Select from 'react-select';\n<\/code><\/pre>\n<p>\u00c5 nej! Att kompilera detta ger oss ett fel:<\/p>\n<blockquote>\n<p>Modulen hittades inte: Fel: Kan inte l\u00f6sa &quot;reagera&quot;<\/p>\n<\/blockquote>\n<p>Var aldrig r\u00e4dd, den h\u00e4r fantastiska artikeln om <a href=\"https:\/\/www.cssigniter.com\/how-to-use-external-react-components-in-your-gutenberg-blocks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">&quot;Hur man anv\u00e4nder externa React-komponenter i dina Gutenberg-block&quot; av CSS Igniter<\/a> kom till unds\u00e4ttning, allt vi beh\u00f6ver g\u00f6ra \u00e4r att registrera <code>externals<\/code>i v\u00e5r <code>webpack.config.js<\/code>fil:<\/p>\n<pre><code>externals: {\n    'react': 'React',\n    'react-dom': 'ReactDOM',\n}\n<\/code><\/pre>\n<p>S\u00e5h\u00e4r:<\/p>\n<pre><code>module.exports = {\n    entry: {\n        '.\/assets\/js\/editor': '.\/blocks\/index.js',\n        '.\/assets\/js\/script': '.\/blocks\/script.js',\n    },\n    output: {\n        path: path.resolve( __dirname ),\n        filename: '[name].js',\n    },\n    externals: {\n        'react': 'React',\n        'react-dom': 'ReactDOM',\n    }\n...\n<\/code><\/pre>\n<h2>Registrering av InspectorControls<\/h2>\n<p>Inuti panelrullen p\u00e5 din <code>&lt;InspectorControls&gt;<\/code>komponent m\u00e5ste du l\u00e4gga till f\u00f6ljande:<\/p>\n<pre><code>&lt;Select\n    name='select-two'\n    value={ JSON.parse( selectedOption) }\n    onChange={ handleSelectChange }\n    options={[\n        { value: 'health', label: 'Health' },\n        { value: 'wealth', label: 'Wealth' },\n        { value: 'code', label: 'Code' },\n    ]}\n    isMulti='true'\n    \/&gt;\n<\/code><\/pre>\n<p>Vi \u00e4r inte riktigt klara, eftersom vi ocks\u00e5 kommer att beh\u00f6va registrera <code>selectedOption<\/code>attributet och <code>handleSelectChange<\/code>funktionen. Vi kan g\u00f6ra s\u00e5 h\u00e4r:<\/p>\n<pre><code>attributes: {\n    selectedOption: {\n        type: 'string',\n        default: null,\n    }\n},\n<\/code><\/pre>\n<p>&#8230;och nu till funktionen&#8230;<\/p>\n<pre><code>const handleSelectChange = (selectedOption) =&gt; setAttributes( { selectedOption: JSON.stringify( selectedOption) } );\n<\/code><\/pre>\n<p>V\u00e4nta, varf\u00f6r beh\u00f6ver vi <code>JSON.stringify()<\/code>och <code>JSON.parse()<\/code>v\u00e4rderingarna? Tja, eftersom v\u00e4rdet som <code>react-select<\/code>komponenten accepterar \u00e4r en array, och eftersom Gutenberg inte l\u00e5ter oss spara detta v\u00e4rde som en array, \u00e4r detta en l\u00f6sning vi kan anv\u00e4nda.<\/p>\n<h2>S\u00e4tta ihop det<\/h2>\n<p>Hela v\u00e5rt <code>InspectorControls<\/code>omr\u00e5de ska nu se ut s\u00e5 h\u00e4r:<\/p>\n<pre><code>...\nattributes: {\n    selectedOption: {\n        type: 'string',\n        default: null,\n    }\n},\nedit: props =&gt; {\n    const { attributes: { selectedOption }, className, setAttributes } = props;\n    const handleSelectChange = (selectedOption) =&gt; setAttributes( { selectedOption: JSON.stringify( selectedOption) } );\n    return [\n        &lt;InspectorControls&gt;\n            &lt;PanelBody\n                title={ __( 'Select2', 'text-domain') }\n            &gt;\n                &lt;PanelRow&gt;\n                    &lt;Select\n                        name='select-two'\n                        value={ JSON.parse( selectedOption) }\n                        onChange={ handleSelectChange }\n                        options={[\n                            { value: 'health', label: 'Health' },\n                            { value: 'wealth', label: 'Wealth' },\n                            { value: 'code', label: 'Code' },\n                        ]}\n            isMulti='true'\n                        \/&gt;\n                 &lt;\/PanelRow&gt;\n             &lt;\/PanelBody&gt;\n         &lt;\/InspectorControls&gt;,\n...\n<\/code><\/pre>\n<h2>Ser bra ut i Gutenberg<\/h2>\n<p>Som du kan se p\u00e5 sk\u00e4rmdumpen fungerar det ganska bra:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-169504-61e816febb7e8.png\" alt=\"L\u00e4gg till Select2 som en InspectorControl i WordPress Gutenberg\" \/>V\u00e4lj2 som en Gutenberg InspectorControl<\/p>\n<h2>Tar det vidare<\/h2>\n<p>Jag anv\u00e4nde den h\u00e4r Inspector Control i min Secure Blocks for Gutenberg-plugin, ta reda p\u00e5 hur jag fyllde Select2-kontrollen med <a href=\"https:\/\/wholesomecode.ltd\/articles\/working-with-gutenberg-and-the-wordpress-rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dynamisk data fr\u00e5n WordPress REST API<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/wholesomecode.ltd\" class=\"external external_icon\">wholesomecode.ltd<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00f6r ett projekt jag arbetade med ville jag anv\u00e4nda Select2 som en Gutenberg InpectorControl f\u00f6r att l\u00e5ta mig till\u00e4mpa inst\u00e4llningar p\u00e5 ett block. Denna handledning ger dig ocks\u00e5 grunden du beh\u00f6ver&#8230;<\/p>\n","protected":false},"author":1,"featured_media":224196,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[848,901,724],"tags":[1173],"class_list":["post-228007","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-koda","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228007","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=228007"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228007\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/224196"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228007"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228007"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}