@wordpress/edit-widgets 4.9.0 → 4.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/error-boundary/index.js +3 -0
  3. package/build/components/error-boundary/index.js.map +1 -1
  4. package/build/components/header/undo-redo/redo.js +2 -1
  5. package/build/components/header/undo-redo/redo.js.map +1 -1
  6. package/build/components/keyboard-shortcut-help-modal/index.js +1 -3
  7. package/build/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  8. package/build/store/actions.js +1 -1
  9. package/build/store/actions.js.map +1 -1
  10. package/build/store/selectors.js +5 -7
  11. package/build/store/selectors.js.map +1 -1
  12. package/build/store/transformers.js +3 -1
  13. package/build/store/transformers.js.map +1 -1
  14. package/build-module/components/error-boundary/index.js +2 -0
  15. package/build-module/components/error-boundary/index.js.map +1 -1
  16. package/build-module/components/header/undo-redo/redo.js +3 -2
  17. package/build-module/components/header/undo-redo/redo.js.map +1 -1
  18. package/build-module/components/keyboard-shortcut-help-modal/index.js +1 -2
  19. package/build-module/components/keyboard-shortcut-help-modal/index.js.map +1 -1
  20. package/build-module/store/actions.js +1 -1
  21. package/build-module/store/actions.js.map +1 -1
  22. package/build-module/store/selectors.js +5 -6
  23. package/build-module/store/selectors.js.map +1 -1
  24. package/build-module/store/transformers.js +3 -1
  25. package/build-module/store/transformers.js.map +1 -1
  26. package/build-style/style-rtl.css +0 -3
  27. package/build-style/style.css +0 -3
  28. package/package.json +26 -26
  29. package/src/components/error-boundary/index.js +3 -0
  30. package/src/components/header/undo-redo/redo.js +6 -2
  31. package/src/components/keyboard-shortcut-help-modal/index.js +1 -2
  32. package/src/components/test/error-boundary.js +38 -0
  33. package/src/store/actions.js +1 -1
  34. package/src/store/selectors.js +10 -6
  35. package/src/store/transformers.js +3 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 4.12.0 (2022-08-10)
6
+
7
+ ## 4.11.0 (2022-07-27)
8
+
9
+ ## 4.10.0 (2022-07-13)
10
+
5
11
  ## 4.9.0 (2022-06-29)
6
12
 
7
13
  ## 4.8.0 (2022-06-15)
@@ -15,6 +15,8 @@ var _blockEditor = require("@wordpress/block-editor");
15
15
 
16
16
  var _compose = require("@wordpress/compose");
17
17
 
18
+ var _hooks = require("@wordpress/hooks");
19
+
18
20
  /**
19
21
  * WordPress dependencies
20
22
  */
@@ -43,6 +45,7 @@ class ErrorBoundary extends _element.Component {
43
45
  this.setState({
44
46
  error
45
47
  });
48
+ (0, _hooks.doAction)('editor.ErrorBoundary.errorLogged', error);
46
49
  }
47
50
 
48
51
  reboot() {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/components/error-boundary/index.js"],"names":["CopyButton","text","children","ref","ErrorBoundary","Component","constructor","arguments","reboot","bind","state","error","componentDidCatch","setState","props","onError","render","stack"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAPA;AACA;AACA;AAOA,SAASA,UAAT,OAA0C;AAAA,MAArB;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,GAAqB;AACzC,QAAMC,GAAG,GAAG,iCAAoBF,IAApB,CAAZ;AACA,SACC,4BAAC,kBAAD;AAAQ,IAAA,OAAO,EAAC,WAAhB;AAA4B,IAAA,GAAG,EAAGE;AAAlC,KACGD,QADH,CADD;AAKA;;AAEc,MAAME,aAAN,SAA4BC,kBAA5B,CAAsC;AACpDC,EAAAA,WAAW,GAAG;AACb,UAAO,GAAGC,SAAV;AAEA,SAAKC,MAAL,GAAc,KAAKA,MAAL,CAAYC,IAAZ,CAAkB,IAAlB,CAAd;AAEA,SAAKC,KAAL,GAAa;AACZC,MAAAA,KAAK,EAAE;AADK,KAAb;AAGA;;AAEDC,EAAAA,iBAAiB,CAAED,KAAF,EAAU;AAC1B,SAAKE,QAAL,CAAe;AAAEF,MAAAA;AAAF,KAAf;AACA;;AAEDH,EAAAA,MAAM,GAAG;AACR,SAAKM,KAAL,CAAWC,OAAX;AACA;;AAEDC,EAAAA,MAAM,GAAG;AACR,UAAM;AAAEL,MAAAA;AAAF,QAAY,KAAKD,KAAvB;;AACA,QAAK,CAAEC,KAAP,EAAe;AACd,aAAO,KAAKG,KAAL,CAAWZ,QAAlB;AACA;;AAED,WACC,4BAAC,oBAAD;AACC,MAAA,SAAS,EAAC,6BADX;AAEC,MAAA,OAAO,EAAG,CACT,4BAAC,kBAAD;AACC,QAAA,GAAG,EAAC,UADL;AAEC,QAAA,OAAO,EAAG,KAAKM,MAFhB;AAGC,QAAA,OAAO,EAAC;AAHT,SAKG,cAAI,kBAAJ,CALH,CADS,EAQT,4BAAC,UAAD;AAAY,QAAA,GAAG,EAAC,YAAhB;AAA6B,QAAA,IAAI,EAAGG,KAAK,CAACM;AAA1C,SACG,cAAI,YAAJ,CADH,CARS;AAFX,OAeG,cAAI,iDAAJ,CAfH,CADD;AAmBA;;AA5CmD","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { Warning } from '@wordpress/block-editor';\nimport { useCopyToClipboard } from '@wordpress/compose';\n\nfunction CopyButton( { text, children } ) {\n\tconst ref = useCopyToClipboard( text );\n\treturn (\n\t\t<Button variant=\"secondary\" ref={ ref }>\n\t\t\t{ children }\n\t\t</Button>\n\t);\n}\n\nexport default class ErrorBoundary extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.reboot = this.reboot.bind( this );\n\n\t\tthis.state = {\n\t\t\terror: null,\n\t\t};\n\t}\n\n\tcomponentDidCatch( error ) {\n\t\tthis.setState( { error } );\n\t}\n\n\treboot() {\n\t\tthis.props.onError();\n\t}\n\n\trender() {\n\t\tconst { error } = this.state;\n\t\tif ( ! error ) {\n\t\t\treturn this.props.children;\n\t\t}\n\n\t\treturn (\n\t\t\t<Warning\n\t\t\t\tclassName=\"edit-widgets-error-boundary\"\n\t\t\t\tactions={ [\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey=\"recovery\"\n\t\t\t\t\t\tonClick={ this.reboot }\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Attempt Recovery' ) }\n\t\t\t\t\t</Button>,\n\t\t\t\t\t<CopyButton key=\"copy-error\" text={ error.stack }>\n\t\t\t\t\t\t{ __( 'Copy Error' ) }\n\t\t\t\t\t</CopyButton>,\n\t\t\t\t] }\n\t\t\t>\n\t\t\t\t{ __( 'The editor has encountered an unexpected error.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/components/error-boundary/index.js"],"names":["CopyButton","text","children","ref","ErrorBoundary","Component","constructor","arguments","reboot","bind","state","error","componentDidCatch","setState","props","onError","render","stack"],"mappings":";;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AARA;AACA;AACA;AAQA,SAASA,UAAT,OAA0C;AAAA,MAArB;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,GAAqB;AACzC,QAAMC,GAAG,GAAG,iCAAoBF,IAApB,CAAZ;AACA,SACC,4BAAC,kBAAD;AAAQ,IAAA,OAAO,EAAC,WAAhB;AAA4B,IAAA,GAAG,EAAGE;AAAlC,KACGD,QADH,CADD;AAKA;;AAEc,MAAME,aAAN,SAA4BC,kBAA5B,CAAsC;AACpDC,EAAAA,WAAW,GAAG;AACb,UAAO,GAAGC,SAAV;AAEA,SAAKC,MAAL,GAAc,KAAKA,MAAL,CAAYC,IAAZ,CAAkB,IAAlB,CAAd;AAEA,SAAKC,KAAL,GAAa;AACZC,MAAAA,KAAK,EAAE;AADK,KAAb;AAGA;;AAEDC,EAAAA,iBAAiB,CAAED,KAAF,EAAU;AAC1B,SAAKE,QAAL,CAAe;AAAEF,MAAAA;AAAF,KAAf;AAEA,yBAAU,kCAAV,EAA8CA,KAA9C;AACA;;AAEDH,EAAAA,MAAM,GAAG;AACR,SAAKM,KAAL,CAAWC,OAAX;AACA;;AAEDC,EAAAA,MAAM,GAAG;AACR,UAAM;AAAEL,MAAAA;AAAF,QAAY,KAAKD,KAAvB;;AACA,QAAK,CAAEC,KAAP,EAAe;AACd,aAAO,KAAKG,KAAL,CAAWZ,QAAlB;AACA;;AAED,WACC,4BAAC,oBAAD;AACC,MAAA,SAAS,EAAC,6BADX;AAEC,MAAA,OAAO,EAAG,CACT,4BAAC,kBAAD;AACC,QAAA,GAAG,EAAC,UADL;AAEC,QAAA,OAAO,EAAG,KAAKM,MAFhB;AAGC,QAAA,OAAO,EAAC;AAHT,SAKG,cAAI,kBAAJ,CALH,CADS,EAQT,4BAAC,UAAD;AAAY,QAAA,GAAG,EAAC,YAAhB;AAA6B,QAAA,IAAI,EAAGG,KAAK,CAACM;AAA1C,SACG,cAAI,YAAJ,CADH,CARS;AAFX,OAeG,cAAI,iDAAJ,CAfH,CADD;AAmBA;;AA9CmD","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { Warning } from '@wordpress/block-editor';\nimport { useCopyToClipboard } from '@wordpress/compose';\nimport { doAction } from '@wordpress/hooks';\n\nfunction CopyButton( { text, children } ) {\n\tconst ref = useCopyToClipboard( text );\n\treturn (\n\t\t<Button variant=\"secondary\" ref={ ref }>\n\t\t\t{ children }\n\t\t</Button>\n\t);\n}\n\nexport default class ErrorBoundary extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.reboot = this.reboot.bind( this );\n\n\t\tthis.state = {\n\t\t\terror: null,\n\t\t};\n\t}\n\n\tcomponentDidCatch( error ) {\n\t\tthis.setState( { error } );\n\n\t\tdoAction( 'editor.ErrorBoundary.errorLogged', error );\n\t}\n\n\treboot() {\n\t\tthis.props.onError();\n\t}\n\n\trender() {\n\t\tconst { error } = this.state;\n\t\tif ( ! error ) {\n\t\t\treturn this.props.children;\n\t\t}\n\n\t\treturn (\n\t\t\t<Warning\n\t\t\t\tclassName=\"edit-widgets-error-boundary\"\n\t\t\t\tactions={ [\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey=\"recovery\"\n\t\t\t\t\t\tonClick={ this.reboot }\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Attempt Recovery' ) }\n\t\t\t\t\t</Button>,\n\t\t\t\t\t<CopyButton key=\"copy-error\" text={ error.stack }>\n\t\t\t\t\t\t{ __( 'Copy Error' ) }\n\t\t\t\t\t</CopyButton>,\n\t\t\t\t] }\n\t\t\t>\n\t\t\t\t{ __( 'The editor has encountered an unexpected error.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n}\n"]}
@@ -23,6 +23,7 @@ var _coreData = require("@wordpress/core-data");
23
23
  * WordPress dependencies
24
24
  */
25
25
  function RedoButton() {
26
+ const shortcut = (0, _keycodes.isAppleOS)() ? _keycodes.displayShortcut.primaryShift('z') : _keycodes.displayShortcut.primary('y');
26
27
  const hasRedo = (0, _data.useSelect)(select => select(_coreData.store).hasRedo(), []);
27
28
  const {
28
29
  redo
@@ -30,7 +31,7 @@ function RedoButton() {
30
31
  return (0, _element.createElement)(_components.ToolbarButton, {
31
32
  icon: !(0, _i18n.isRTL)() ? _icons.redo : _icons.undo,
32
33
  label: (0, _i18n.__)('Redo'),
33
- shortcut: _keycodes.displayShortcut.primaryShift('z') // If there are no undo levels we don't want to actually disable this
34
+ shortcut: shortcut // If there are no undo levels we don't want to actually disable this
34
35
  // button, because it will remove focus for keyboard users.
35
36
  // See: https://github.com/WordPress/gutenberg/issues/3486
36
37
  ,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/components/header/undo-redo/redo.js"],"names":["RedoButton","hasRedo","select","coreStore","redo","redoIcon","undoIcon","displayShortcut","primaryShift","undefined"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AARA;AACA;AACA;AAQe,SAASA,UAAT,GAAsB;AACpC,QAAMC,OAAO,GAAG,qBACbC,MAAF,IAAcA,MAAM,CAAEC,eAAF,CAAN,CAAoBF,OAApB,EADC,EAEf,EAFe,CAAhB;AAIA,QAAM;AAAEG,IAAAA;AAAF,MAAW,uBAAaD,eAAb,CAAjB;AACA,SACC,4BAAC,yBAAD;AACC,IAAA,IAAI,EAAG,CAAE,kBAAF,GAAYE,WAAZ,GAAuBC,WAD/B;AAEC,IAAA,KAAK,EAAG,cAAI,MAAJ,CAFT;AAGC,IAAA,QAAQ,EAAGC,0BAAgBC,YAAhB,CAA8B,GAA9B,CAHZ,CAIC;AACA;AACA;AAND;AAOC,qBAAgB,CAAEP,OAPnB;AAQC,IAAA,OAAO,EAAGA,OAAO,GAAGG,IAAH,GAAUK;AAR5B,IADD;AAYA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { ToolbarButton } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { redo as redoIcon, undo as undoIcon } from '@wordpress/icons';\nimport { displayShortcut } from '@wordpress/keycodes';\nimport { store as coreStore } from '@wordpress/core-data';\n\nexport default function RedoButton() {\n\tconst hasRedo = useSelect(\n\t\t( select ) => select( coreStore ).hasRedo(),\n\t\t[]\n\t);\n\tconst { redo } = useDispatch( coreStore );\n\treturn (\n\t\t<ToolbarButton\n\t\t\ticon={ ! isRTL() ? redoIcon : undoIcon }\n\t\t\tlabel={ __( 'Redo' ) }\n\t\t\tshortcut={ displayShortcut.primaryShift( 'z' ) }\n\t\t\t// If there are no undo levels we don't want to actually disable this\n\t\t\t// button, because it will remove focus for keyboard users.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/3486\n\t\t\taria-disabled={ ! hasRedo }\n\t\t\tonClick={ hasRedo ? redo : undefined }\n\t\t/>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/components/header/undo-redo/redo.js"],"names":["RedoButton","shortcut","displayShortcut","primaryShift","primary","hasRedo","select","coreStore","redo","redoIcon","undoIcon","undefined"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AARA;AACA;AACA;AAQe,SAASA,UAAT,GAAsB;AACpC,QAAMC,QAAQ,GAAG,6BACdC,0BAAgBC,YAAhB,CAA8B,GAA9B,CADc,GAEdD,0BAAgBE,OAAhB,CAAyB,GAAzB,CAFH;AAIA,QAAMC,OAAO,GAAG,qBACbC,MAAF,IAAcA,MAAM,CAAEC,eAAF,CAAN,CAAoBF,OAApB,EADC,EAEf,EAFe,CAAhB;AAIA,QAAM;AAAEG,IAAAA;AAAF,MAAW,uBAAaD,eAAb,CAAjB;AACA,SACC,4BAAC,yBAAD;AACC,IAAA,IAAI,EAAG,CAAE,kBAAF,GAAYE,WAAZ,GAAuBC,WAD/B;AAEC,IAAA,KAAK,EAAG,cAAI,MAAJ,CAFT;AAGC,IAAA,QAAQ,EAAGT,QAHZ,CAIC;AACA;AACA;AAND;AAOC,qBAAgB,CAAEI,OAPnB;AAQC,IAAA,OAAO,EAAGA,OAAO,GAAGG,IAAH,GAAUG;AAR5B,IADD;AAYA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { ToolbarButton } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { redo as redoIcon, undo as undoIcon } from '@wordpress/icons';\nimport { displayShortcut, isAppleOS } from '@wordpress/keycodes';\nimport { store as coreStore } from '@wordpress/core-data';\n\nexport default function RedoButton() {\n\tconst shortcut = isAppleOS()\n\t\t? displayShortcut.primaryShift( 'z' )\n\t\t: displayShortcut.primary( 'y' );\n\n\tconst hasRedo = useSelect(\n\t\t( select ) => select( coreStore ).hasRedo(),\n\t\t[]\n\t);\n\tconst { redo } = useDispatch( coreStore );\n\treturn (\n\t\t<ToolbarButton\n\t\t\ticon={ ! isRTL() ? redoIcon : undoIcon }\n\t\t\tlabel={ __( 'Redo' ) }\n\t\t\tshortcut={ shortcut }\n\t\t\t// If there are no undo levels we don't want to actually disable this\n\t\t\t// button, because it will remove focus for keyboard users.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/3486\n\t\t\taria-disabled={ ! hasRedo }\n\t\t\tonClick={ hasRedo ? redo : undefined }\n\t\t/>\n\t);\n}\n"]}
@@ -11,8 +11,6 @@ var _element = require("@wordpress/element");
11
11
 
12
12
  var _classnames = _interopRequireDefault(require("classnames"));
13
13
 
14
- var _lodash = require("lodash");
15
-
16
14
  var _components = require("@wordpress/components");
17
15
 
18
16
  var _i18n = require("@wordpress/i18n");
@@ -55,7 +53,7 @@ const ShortcutList = _ref => {
55
53
  }, shortcuts.map((shortcut, index) => (0, _element.createElement)("li", {
56
54
  className: "edit-widgets-keyboard-shortcut-help-modal__shortcut",
57
55
  key: index
58
- }, (0, _lodash.isString)(shortcut) ? (0, _element.createElement)(_dynamicShortcut.default, {
56
+ }, typeof shortcut === 'string' ? (0, _element.createElement)(_dynamicShortcut.default, {
59
57
  name: shortcut
60
58
  }) : (0, _element.createElement)(_shortcut.default, shortcut))))
61
59
  /* eslint-enable jsx-a11y/no-redundant-roles */
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/components/keyboard-shortcut-help-modal/index.js"],"names":["ShortcutList","shortcuts","map","shortcut","index","ShortcutSection","title","className","ShortcutCategorySection","categoryName","additionalShortcuts","categoryShortcuts","select","keyboardShortcutsStore","getCategoryShortcuts","concat","KeyboardShortcutHelpModal","isModalActive","toggleModal","bindGlobal","keyCombination","character","description","ariaLabel","textFormattingShortcuts"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { isString } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { Modal } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseShortcut,\n\tstore as keyboardShortcutsStore,\n} from '@wordpress/keyboard-shortcuts';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { textFormattingShortcuts } from './config';\nimport Shortcut from './shortcut';\nimport DynamicShortcut from './dynamic-shortcut';\n\nconst ShortcutList = ( { shortcuts } ) => (\n\t/*\n\t * Disable reason: The `list` ARIA role is redundant but\n\t * Safari+VoiceOver won't announce the list otherwise.\n\t */\n\t/* eslint-disable jsx-a11y/no-redundant-roles */\n\t<ul\n\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__shortcut-list\"\n\t\trole=\"list\"\n\t>\n\t\t{ shortcuts.map( ( shortcut, index ) => (\n\t\t\t<li\n\t\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__shortcut\"\n\t\t\t\tkey={ index }\n\t\t\t>\n\t\t\t\t{ isString( shortcut ) ? (\n\t\t\t\t\t<DynamicShortcut name={ shortcut } />\n\t\t\t\t) : (\n\t\t\t\t\t<Shortcut { ...shortcut } />\n\t\t\t\t) }\n\t\t\t</li>\n\t\t) ) }\n\t</ul>\n\t/* eslint-enable jsx-a11y/no-redundant-roles */\n);\n\nconst ShortcutSection = ( { title, shortcuts, className } ) => (\n\t<section\n\t\tclassName={ classnames(\n\t\t\t'edit-widgets-keyboard-shortcut-help-modal__section',\n\t\t\tclassName\n\t\t) }\n\t>\n\t\t{ !! title && (\n\t\t\t<h2 className=\"edit-widgets-keyboard-shortcut-help-modal__section-title\">\n\t\t\t\t{ title }\n\t\t\t</h2>\n\t\t) }\n\t\t<ShortcutList shortcuts={ shortcuts } />\n\t</section>\n);\n\nconst ShortcutCategorySection = ( {\n\ttitle,\n\tcategoryName,\n\tadditionalShortcuts = [],\n} ) => {\n\tconst categoryShortcuts = useSelect(\n\t\t( select ) => {\n\t\t\treturn select( keyboardShortcutsStore ).getCategoryShortcuts(\n\t\t\t\tcategoryName\n\t\t\t);\n\t\t},\n\t\t[ categoryName ]\n\t);\n\n\treturn (\n\t\t<ShortcutSection\n\t\t\ttitle={ title }\n\t\t\tshortcuts={ categoryShortcuts.concat( additionalShortcuts ) }\n\t\t/>\n\t);\n};\n\nexport default function KeyboardShortcutHelpModal( {\n\tisModalActive,\n\ttoggleModal,\n} ) {\n\tuseShortcut( 'core/edit-widgets/keyboard-shortcuts', toggleModal, {\n\t\tbindGlobal: true,\n\t} );\n\n\tif ( ! isModalActive ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal\"\n\t\t\ttitle={ __( 'Keyboard shortcuts' ) }\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ toggleModal }\n\t\t>\n\t\t\t<ShortcutSection\n\t\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__main-shortcuts\"\n\t\t\t\tshortcuts={ [ 'core/edit-widgets/keyboard-shortcuts' ] }\n\t\t\t/>\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Global shortcuts' ) }\n\t\t\t\tcategoryName=\"global\"\n\t\t\t/>\n\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Selection shortcuts' ) }\n\t\t\t\tcategoryName=\"selection\"\n\t\t\t/>\n\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Block shortcuts' ) }\n\t\t\t\tcategoryName=\"block\"\n\t\t\t\tadditionalShortcuts={ [\n\t\t\t\t\t{\n\t\t\t\t\t\tkeyCombination: { character: '/' },\n\t\t\t\t\t\tdescription: __(\n\t\t\t\t\t\t\t'Change the block type after adding a new paragraph.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\t/* translators: The forward-slash character. e.g. '/'. */\n\t\t\t\t\t\tariaLabel: __( 'Forward-slash' ),\n\t\t\t\t\t},\n\t\t\t\t] }\n\t\t\t/>\n\t\t\t<ShortcutSection\n\t\t\t\ttitle={ __( 'Text formatting' ) }\n\t\t\t\tshortcuts={ textFormattingShortcuts }\n\t\t\t/>\n\t\t</Modal>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/components/keyboard-shortcut-help-modal/index.js"],"names":["ShortcutList","shortcuts","map","shortcut","index","ShortcutSection","title","className","ShortcutCategorySection","categoryName","additionalShortcuts","categoryShortcuts","select","keyboardShortcutsStore","getCategoryShortcuts","concat","KeyboardShortcutHelpModal","isModalActive","toggleModal","bindGlobal","keyCombination","character","description","ariaLabel","textFormattingShortcuts"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { Modal } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseShortcut,\n\tstore as keyboardShortcutsStore,\n} from '@wordpress/keyboard-shortcuts';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { textFormattingShortcuts } from './config';\nimport Shortcut from './shortcut';\nimport DynamicShortcut from './dynamic-shortcut';\n\nconst ShortcutList = ( { shortcuts } ) => (\n\t/*\n\t * Disable reason: The `list` ARIA role is redundant but\n\t * Safari+VoiceOver won't announce the list otherwise.\n\t */\n\t/* eslint-disable jsx-a11y/no-redundant-roles */\n\t<ul\n\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__shortcut-list\"\n\t\trole=\"list\"\n\t>\n\t\t{ shortcuts.map( ( shortcut, index ) => (\n\t\t\t<li\n\t\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__shortcut\"\n\t\t\t\tkey={ index }\n\t\t\t>\n\t\t\t\t{ typeof shortcut === 'string' ? (\n\t\t\t\t\t<DynamicShortcut name={ shortcut } />\n\t\t\t\t) : (\n\t\t\t\t\t<Shortcut { ...shortcut } />\n\t\t\t\t) }\n\t\t\t</li>\n\t\t) ) }\n\t</ul>\n\t/* eslint-enable jsx-a11y/no-redundant-roles */\n);\n\nconst ShortcutSection = ( { title, shortcuts, className } ) => (\n\t<section\n\t\tclassName={ classnames(\n\t\t\t'edit-widgets-keyboard-shortcut-help-modal__section',\n\t\t\tclassName\n\t\t) }\n\t>\n\t\t{ !! title && (\n\t\t\t<h2 className=\"edit-widgets-keyboard-shortcut-help-modal__section-title\">\n\t\t\t\t{ title }\n\t\t\t</h2>\n\t\t) }\n\t\t<ShortcutList shortcuts={ shortcuts } />\n\t</section>\n);\n\nconst ShortcutCategorySection = ( {\n\ttitle,\n\tcategoryName,\n\tadditionalShortcuts = [],\n} ) => {\n\tconst categoryShortcuts = useSelect(\n\t\t( select ) => {\n\t\t\treturn select( keyboardShortcutsStore ).getCategoryShortcuts(\n\t\t\t\tcategoryName\n\t\t\t);\n\t\t},\n\t\t[ categoryName ]\n\t);\n\n\treturn (\n\t\t<ShortcutSection\n\t\t\ttitle={ title }\n\t\t\tshortcuts={ categoryShortcuts.concat( additionalShortcuts ) }\n\t\t/>\n\t);\n};\n\nexport default function KeyboardShortcutHelpModal( {\n\tisModalActive,\n\ttoggleModal,\n} ) {\n\tuseShortcut( 'core/edit-widgets/keyboard-shortcuts', toggleModal, {\n\t\tbindGlobal: true,\n\t} );\n\n\tif ( ! isModalActive ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal\"\n\t\t\ttitle={ __( 'Keyboard shortcuts' ) }\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ toggleModal }\n\t\t>\n\t\t\t<ShortcutSection\n\t\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__main-shortcuts\"\n\t\t\t\tshortcuts={ [ 'core/edit-widgets/keyboard-shortcuts' ] }\n\t\t\t/>\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Global shortcuts' ) }\n\t\t\t\tcategoryName=\"global\"\n\t\t\t/>\n\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Selection shortcuts' ) }\n\t\t\t\tcategoryName=\"selection\"\n\t\t\t/>\n\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Block shortcuts' ) }\n\t\t\t\tcategoryName=\"block\"\n\t\t\t\tadditionalShortcuts={ [\n\t\t\t\t\t{\n\t\t\t\t\t\tkeyCombination: { character: '/' },\n\t\t\t\t\t\tdescription: __(\n\t\t\t\t\t\t\t'Change the block type after adding a new paragraph.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\t/* translators: The forward-slash character. e.g. '/'. */\n\t\t\t\t\t\tariaLabel: __( 'Forward-slash' ),\n\t\t\t\t\t},\n\t\t\t\t] }\n\t\t\t/>\n\t\t\t<ShortcutSection\n\t\t\t\ttitle={ __( 'Text formatting' ) }\n\t\t\t\tshortcuts={ textFormattingShortcuts }\n\t\t\t/>\n\t\t</Modal>\n\t);\n}\n"]}
@@ -413,7 +413,7 @@ const moveBlockToWidgetArea = (clientId, widgetAreaId) => async _ref11 => {
413
413
  } = _ref12;
414
414
  return attributes.id === widgetAreaId;
415
415
  });
416
- const destinationRootClientId = destinationWidgetAreaBlock.clientId; // Get the index for moving to the end of the the destination widget area.
416
+ const destinationRootClientId = destinationWidgetAreaBlock.clientId; // Get the index for moving to the end of the destination widget area.
417
417
 
418
418
  const destinationInnerBlocksClientIds = registry.select(_blockEditor.store).getBlockOrder(destinationRootClientId);
419
419
  const destinationIndex = destinationInnerBlocksClientIds.length; // Reveal the widget area, if it's not open.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/store/actions.js"],"names":["persistStubPost","id","blocks","registry","stubPost","dispatch","coreStore","receiveEntityRecords","KIND","POST_TYPE","saveEditedWidgetAreas","select","editedWidgetAreas","getEditedWidgetAreas","length","saveWidgetAreas","noticesStore","createSuccessNotice","type","e","createErrorNotice","message","widgetAreas","widgetArea","saveWidgetArea","finishResolution","WIDGET_AREA_ENTITY_TYPE","widgetAreaId","widgets","getWidgets","post","getEditedEntityRecord","areaWidgets","Object","values","filter","sidebar","usedReferenceWidgets","widgetsBlocks","block","attributes","name","includes","push","deletedWidgets","widget","widgetsNewArea","getWidgetAreaForWidgetId","batchMeta","batchTasks","sidebarWidgetsIds","i","widgetId","oldWidget","editEntityRecord","undoIgnore","hasEdits","hasEditsForEntityRecord","saveEditedEntityRecord","saveEntityRecord","position","clientId","deleteEntityRecord","force","records","__experimentalBatch","preservedRecords","record","hasOwnProperty","failedWidgetNames","__internalWidgetId","error","getLastEntitySaveError","Error","join","trySaveWidgetArea","undefined","throwOnError","setWidgetIdForClientId","setWidgetAreasOpenState","widgetAreasOpenState","setIsWidgetAreaOpen","isOpen","setIsInserterOpened","value","setIsListViewOpened","closeGeneralSidebar","interfaceStore","disableComplementaryArea","editWidgetsStoreName","moveBlockToWidgetArea","sourceRootClientId","blockEditorStore","getBlockRootClientId","getBlocks","destinationWidgetAreaBlock","find","destinationRootClientId","destinationInnerBlocksClientIds","getBlockOrder","destinationIndex","isDestinationWidgetAreaOpen","getIsWidgetAreaOpen","moveBlocksToPosition"],"mappings":";;;;;;;;;;;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAKA;;AACA;;AAQA;;AAtBA;AACA;AACA;;AAQA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,eAAe,GAC3B,CAAEC,EAAF,EAAMC,MAAN,KACA,QAAoB;AAAA,MAAlB;AAAEC,IAAAA;AAAF,GAAkB;AACnB,QAAMC,QAAQ,GAAG,2BAAgBH,EAAhB,EAAoBC,MAApB,CAAjB;AACAC,EAAAA,QAAQ,CACNE,QADF,CACYC,eADZ,EAEEC,oBAFF,CAGEC,WAHF,EAIEC,gBAJF,EAKEL,QALF,EAME;AAAEH,IAAAA,EAAE,EAAEG,QAAQ,CAACH;AAAf,GANF,EAOE,KAPF;AASA,SAAOG,QAAP;AACA,CAdK;AAgBP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAMM,qBAAqB,GACjC,MACA,eAA4C;AAAA,MAApC;AAAEC,IAAAA,MAAF;AAAUN,IAAAA,QAAV;AAAoBF,IAAAA;AAApB,GAAoC;AAC3C,QAAMS,iBAAiB,GAAGD,MAAM,CAACE,oBAAP,EAA1B;;AACA,MAAK,EAAED,iBAAF,aAAEA,iBAAF,eAAEA,iBAAiB,CAAEE,MAArB,CAAL,EAAmC;AAClC;AACA;;AACD,MAAI;AACH,UAAMT,QAAQ,CAACU,eAAT,CAA0BH,iBAA1B,CAAN;AACAT,IAAAA,QAAQ,CACNE,QADF,CACYW,cADZ,EAEEC,mBAFF,CAEuB,cAAI,gBAAJ,CAFvB,EAE+C;AAC7CC,MAAAA,IAAI,EAAE;AADuC,KAF/C;AAKA,GAPD,CAOE,OAAQC,CAAR,EAAY;AACbhB,IAAAA,QAAQ,CAACE,QAAT,CAAmBW,cAAnB,EAAkCI,iBAAlC;AACC;AACA,uBAAS,cAAI,wBAAJ,CAAT,EAAyCD,CAAC,CAACE,OAA3C,CAFD,EAGC;AACCH,MAAAA,IAAI,EAAE;AADP,KAHD;AAOA;AACD,CAvBK;AAyBP;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAMH,eAAe,GACzBO,WAAF,IACA,eAAoC;AAAA,MAA5B;AAAEjB,IAAAA,QAAF;AAAYF,IAAAA;AAAZ,GAA4B;;AACnC,MAAI;AACH,SAAM,MAAMoB,UAAZ,IAA0BD,WAA1B,EAAwC;AACvC,YAAMjB,QAAQ,CAACmB,cAAT,CAAyBD,UAAU,CAACtB,EAApC,CAAN;AACA;AACD,GAJD,SAIU;AACT;AACA,UAAME,QAAQ,CACZE,QADI,CACMC,eADN,EAEJmB,gBAFI,CAGJ,iBAHI,EAIJjB,WAJI,EAKJkB,8BALI,EAMJ,mCANI,CAAN;AAQA;AACD,CAlBK;AAoBP;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAMF,cAAc,GACxBG,YAAF,IACA,eAA4C;AAAA,MAApC;AAAEtB,IAAAA,QAAF;AAAYM,IAAAA,MAAZ;AAAoBR,IAAAA;AAApB,GAAoC;AAC3C,QAAMyB,OAAO,GAAGjB,MAAM,CAACkB,UAAP,EAAhB;AAEA,QAAMC,IAAI,GAAG3B,QAAQ,CACnBQ,MADW,CACHL,eADG,EAEXyB,qBAFW,CAGXvB,WAHW,EAIXC,gBAJW,EAKX,kCAAuBkB,YAAvB,CALW,CAAb,CAH2C,CAW3C;;AACA,QAAMK,WAAW,GAAGC,MAAM,CAACC,MAAP,CAAeN,OAAf,EAAyBO,MAAzB,CACnB;AAAA,QAAE;AAAEC,MAAAA;AAAF,KAAF;AAAA,WAAmBA,OAAO,KAAKT,YAA/B;AAAA,GADmB,CAApB,CAZ2C,CAgB3C;AACA;AACA;AACA;;AACA,QAAMU,oBAAoB,GAAG,EAA7B;AACA,QAAMC,aAAa,GAAGR,IAAI,CAAC5B,MAAL,CAAYiC,MAAZ,CAAsBI,KAAF,IAAa;AACtD,UAAM;AAAEtC,MAAAA;AAAF,QAASsC,KAAK,CAACC,UAArB;;AAEA,QAAKD,KAAK,CAACE,IAAN,KAAe,oBAAf,IAAuCxC,EAA5C,EAAiD;AAChD,UAAKoC,oBAAoB,CAACK,QAArB,CAA+BzC,EAA/B,CAAL,EAA2C;AAC1C,eAAO,KAAP;AACA;;AACDoC,MAAAA,oBAAoB,CAACM,IAArB,CAA2B1C,EAA3B;AACA;;AACD,WAAO,IAAP;AACA,GAVqB,CAAtB,CArB2C,CAiC3C;AACA;AACA;;AACA,QAAM2C,cAAc,GAAG,EAAvB;;AACA,OAAM,MAAMC,MAAZ,IAAsBb,WAAtB,EAAoC;AACnC,UAAMc,cAAc,GAAGnC,MAAM,CAACoC,wBAAP,CAAiCF,MAAM,CAAC5C,EAAxC,CAAvB;;AACA,QAAK,CAAE6C,cAAP,EAAwB;AACvBF,MAAAA,cAAc,CAACD,IAAf,CAAqBE,MAArB;AACA;AACD;;AAED,QAAMG,SAAS,GAAG,EAAlB;AACA,QAAMC,UAAU,GAAG,EAAnB;AACA,QAAMC,iBAAiB,GAAG,EAA1B;;AACA,OAAM,IAAIC,CAAC,GAAG,CAAd,EAAiBA,CAAC,GAAGb,aAAa,CAACxB,MAAnC,EAA2CqC,CAAC,EAA5C,EAAiD;AAChD,UAAMZ,KAAK,GAAGD,aAAa,CAAEa,CAAF,CAA3B;AACA,UAAMC,QAAQ,GAAG,mCAAsBb,KAAtB,CAAjB;AACA,UAAMc,SAAS,GAAGzB,OAAO,CAAEwB,QAAF,CAAzB;AACA,UAAMP,MAAM,GAAG,0CAAwBN,KAAxB,EAA+Bc,SAA/B,CAAf,CAJgD,CAMhD;AACA;;AACAH,IAAAA,iBAAiB,CAACP,IAAlB,CAAwBS,QAAxB,EARgD,CAUhD;AACA;;AACA,QAAKC,SAAL,EAAiB;AAChB;AACAlD,MAAAA,QAAQ,CAACE,QAAT,CAAmBC,eAAnB,EAA+BgD,gBAA/B,CACC,MADD,EAEC,QAFD,EAGCF,QAHD,EAIC,EACC,GAAGP,MADJ;AAECT,QAAAA,OAAO,EAAET;AAFV,OAJD,EAQC;AAAE4B,QAAAA,UAAU,EAAE;AAAd,OARD;AAWA,YAAMC,QAAQ,GAAGrD,QAAQ,CACvBQ,MADe,CACPL,eADO,EAEfmD,uBAFe,CAEU,MAFV,EAEkB,QAFlB,EAE4BL,QAF5B,CAAjB;;AAIA,UAAK,CAAEI,QAAP,EAAkB;AACjB;AACA;;AAEDP,MAAAA,UAAU,CAACN,IAAX,CAAiB;AAAA,YAAE;AAAEe,UAAAA;AAAF,SAAF;AAAA,eAChBA,sBAAsB,CAAE,MAAF,EAAU,QAAV,EAAoBN,QAApB,CADN;AAAA,OAAjB;AAGA,KAxBD,MAwBO;AACN;AACAH,MAAAA,UAAU,CAACN,IAAX,CAAiB;AAAA,YAAE;AAAEgB,UAAAA;AAAF,SAAF;AAAA,eAChBA,gBAAgB,CAAE,MAAF,EAAU,QAAV,EAAoB,EACnC,GAAGd,MADgC;AAEnCT,UAAAA,OAAO,EAAET;AAF0B,SAApB,CADA;AAAA,OAAjB;AAMA;;AAEDqB,IAAAA,SAAS,CAACL,IAAV,CAAgB;AACfJ,MAAAA,KADe;AAEfqB,MAAAA,QAAQ,EAAET,CAFK;AAGfU,MAAAA,QAAQ,EAAEtB,KAAK,CAACsB;AAHD,KAAhB;AAKA;;AACD,OAAM,MAAMhB,MAAZ,IAAsBD,cAAtB,EAAuC;AACtCK,IAAAA,UAAU,CAACN,IAAX,CAAiB;AAAA,UAAE;AAAEmB,QAAAA;AAAF,OAAF;AAAA,aAChBA,kBAAkB,CAAE,MAAF,EAAU,QAAV,EAAoBjB,MAAM,CAAC5C,EAA3B,EAA+B;AAChD8D,QAAAA,KAAK,EAAE;AADyC,OAA/B,CADF;AAAA,KAAjB;AAKA;;AAED,QAAMC,OAAO,GAAG,MAAM7D,QAAQ,CAC5BE,QADoB,CACVC,eADU,EAEpB2D,mBAFoB,CAEChB,UAFD,CAAtB;AAGA,QAAMiB,gBAAgB,GAAGF,OAAO,CAAC7B,MAAR,CACtBgC,MAAF,IAAc,CAAEA,MAAM,CAACC,cAAP,CAAuB,SAAvB,CADQ,CAAzB;AAIA,QAAMC,iBAAiB,GAAG,EAA1B;;AAEA,OAAM,IAAIlB,CAAC,GAAG,CAAd,EAAiBA,CAAC,GAAGe,gBAAgB,CAACpD,MAAtC,EAA8CqC,CAAC,EAA/C,EAAoD;AACnD,UAAMN,MAAM,GAAGqB,gBAAgB,CAAEf,CAAF,CAA/B;AACA,UAAM;AAAEZ,MAAAA,KAAF;AAASqB,MAAAA;AAAT,QAAsBZ,SAAS,CAAEG,CAAF,CAArC,CAFmD,CAInD;AACA;;AACArB,IAAAA,IAAI,CAAC5B,MAAL,CAAa0D,QAAb,EAAwBpB,UAAxB,CAAmC8B,kBAAnC,GAAwDzB,MAAM,CAAC5C,EAA/D;AAEA,UAAMsE,KAAK,GAAGpE,QAAQ,CACpBQ,MADY,CACJL,eADI,EAEZkE,sBAFY,CAEY,MAFZ,EAEoB,QAFpB,EAE8B3B,MAAM,CAAC5C,EAFrC,CAAd;;AAGA,QAAKsE,KAAL,EAAa;AAAA;;AACZF,MAAAA,iBAAiB,CAAC1B,IAAlB,CAAwB,sBAAAJ,KAAK,CAACC,UAAN,wEAAkBC,IAAlB,MAA0BF,KAA1B,aAA0BA,KAA1B,uBAA0BA,KAAK,CAAEE,IAAjC,CAAxB;AACA;;AAED,QAAK,CAAES,iBAAiB,CAAEU,QAAF,CAAxB,EAAuC;AACtCV,MAAAA,iBAAiB,CAAEU,QAAF,CAAjB,GAAgCf,MAAM,CAAC5C,EAAvC;AACA;AACD;;AAED,MAAKoE,iBAAiB,CAACvD,MAAvB,EAAgC;AAC/B,UAAM,IAAI2D,KAAJ,CACL;AACC;AACA,kBAAI,2CAAJ,CAFD,EAGCJ,iBAAiB,CAACK,IAAlB,CAAwB,IAAxB,CAHD,CADK,CAAN;AAOA;;AAEDvE,EAAAA,QAAQ,CAACE,QAAT,CAAmBC,eAAnB,EAA+BgD,gBAA/B,CACC9C,WADD,EAECkB,8BAFD,EAGCC,YAHD,EAIC;AACCC,IAAAA,OAAO,EAAEsB;AADV,GAJD,EAOC;AAAEK,IAAAA,UAAU,EAAE;AAAd,GAPD;AAUAlD,EAAAA,QAAQ,CAAEsE,iBAAiB,CAAEhD,YAAF,CAAnB,CAAR;AAEAxB,EAAAA,QAAQ,CACNE,QADF,CACYC,eADZ,EAEEC,oBAFF,CAEwBC,WAFxB,EAE8BC,gBAF9B,EAEyCqB,IAFzC,EAE+C8C,SAF/C;AAGA,CAnKK;;;;AAqKP,MAAMD,iBAAiB,GACpBhD,YAAF,IACA,SAAoB;AAAA,MAAlB;AAAExB,IAAAA;AAAF,GAAkB;AACnBA,EAAAA,QAAQ,CACNE,QADF,CACYC,eADZ,EAEEoD,sBAFF,CAGElD,WAHF,EAIEkB,8BAJF,EAKEC,YALF,EAME;AACCkD,IAAAA,YAAY,EAAE;AADf,GANF;AAUA,CAbF;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,sBAAT,CAAiCjB,QAAjC,EAA2CT,QAA3C,EAAsD;AAC5D,SAAO;AACNlC,IAAAA,IAAI,EAAE,6BADA;AAEN2C,IAAAA,QAFM;AAGNT,IAAAA;AAHM,GAAP;AAKA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAAS2B,uBAAT,CAAkCC,oBAAlC,EAAyD;AAC/D,SAAO;AACN9D,IAAAA,IAAI,EAAE,6BADA;AAEN8D,IAAAA;AAFM,GAAP;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,mBAAT,CAA8BpB,QAA9B,EAAwCqB,MAAxC,EAAiD;AACvD,SAAO;AACNhE,IAAAA,IAAI,EAAE,yBADA;AAEN2C,IAAAA,QAFM;AAGNqB,IAAAA;AAHM,GAAP;AAKA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,mBAAT,CAA8BC,KAA9B,EAAsC;AAC5C,SAAO;AACNlE,IAAAA,IAAI,EAAE,wBADA;AAENkE,IAAAA;AAFM,GAAP;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,mBAAT,CAA8BH,MAA9B,EAAuC;AAC7C,SAAO;AACNhE,IAAAA,IAAI,EAAE,yBADA;AAENgE,IAAAA;AAFM,GAAP;AAIA;AAED;AACA;AACA;AACA;AACA;;;AACO,MAAMI,mBAAmB,GAC/B,MACA,UAAoB;AAAA,MAAlB;AAAEnF,IAAAA;AAAF,GAAkB;AACnBA,EAAAA,QAAQ,CACNE,QADF,CACYkF,gBADZ,EAEEC,wBAFF,CAE4BC,qBAF5B;AAGA,CANK;AAQP;AACA;AACA;AACA;AACA;AACA;;;;;AACO,MAAMC,qBAAqB,GACjC,CAAE7B,QAAF,EAAYlC,YAAZ,KACA,gBAA4C;AAAA,MAApC;AAAEtB,IAAAA,QAAF;AAAYM,IAAAA,MAAZ;AAAoBR,IAAAA;AAApB,GAAoC;AAC3C,QAAMwF,kBAAkB,GAAGxF,QAAQ,CACjCQ,MADyB,CACjBiF,kBADiB,EAEzBC,oBAFyB,CAEH,CAAEhC,QAAF,CAFG,CAA3B,CAD2C,CAK3C;AACA;AACA;;AACA,QAAMvC,WAAW,GAAGnB,QAAQ,CAACQ,MAAT,CAAiBiF,kBAAjB,EAAoCE,SAApC,EAApB;AACA,QAAMC,0BAA0B,GAAGzE,WAAW,CAAC0E,IAAZ,CAClC;AAAA,QAAE;AAAExD,MAAAA;AAAF,KAAF;AAAA,WAAsBA,UAAU,CAACvC,EAAX,KAAkB0B,YAAxC;AAAA,GADkC,CAAnC;AAGA,QAAMsE,uBAAuB,GAAGF,0BAA0B,CAAClC,QAA3D,CAZ2C,CAc3C;;AACA,QAAMqC,+BAA+B,GAAG/F,QAAQ,CAC9CQ,MADsC,CAC9BiF,kBAD8B,EAEtCO,aAFsC,CAEvBF,uBAFuB,CAAxC;AAGA,QAAMG,gBAAgB,GAAGF,+BAA+B,CAACpF,MAAzD,CAlB2C,CAoB3C;;AACA,QAAMuF,2BAA2B,GAAG1F,MAAM,CAAC2F,mBAAP,CACnCL,uBADmC,CAApC;;AAIA,MAAK,CAAEI,2BAAP,EAAqC;AACpChG,IAAAA,QAAQ,CAAC4E,mBAAT,CAA8BgB,uBAA9B,EAAuD,IAAvD;AACA,GA3B0C,CA6B3C;;;AACA9F,EAAAA,QAAQ,CACNE,QADF,CACYuF,kBADZ,EAEEW,oBAFF,CAGE,CAAE1C,QAAF,CAHF,EAIE8B,kBAJF,EAKEM,uBALF,EAMEG,gBANF;AAQA,CAxCK","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { transformBlockToWidget } from './transformers';\nimport {\n\tbuildWidgetAreaPostId,\n\tbuildWidgetAreasQuery,\n\tcreateStubPost,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Persists a stub post with given ID to core data store. The post is meant to be in-memory only and\n * shouldn't be saved via the API.\n *\n * @param {string} id Post ID.\n * @param {Array} blocks Blocks the post should consist of.\n * @return {Object} The post object.\n */\nexport const persistStubPost =\n\t( id, blocks ) =>\n\t( { registry } ) => {\n\t\tconst stubPost = createStubPost( id, blocks );\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tstubPost,\n\t\t\t\t{ id: stubPost.id },\n\t\t\t\tfalse\n\t\t\t);\n\t\treturn stubPost;\n\t};\n\n/**\n * Converts all the blocks from edited widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * Creates a snackbar notice on either success or error.\n *\n * @return {Function} An action creator.\n */\nexport const saveEditedWidgetAreas =\n\t() =>\n\tasync ( { select, dispatch, registry } ) => {\n\t\tconst editedWidgetAreas = select.getEditedWidgetAreas();\n\t\tif ( ! editedWidgetAreas?.length ) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait dispatch.saveWidgetAreas( editedWidgetAreas );\n\t\t\tregistry\n\t\t\t\t.dispatch( noticesStore )\n\t\t\t\t.createSuccessNotice( __( 'Widgets saved.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tregistry.dispatch( noticesStore ).createErrorNotice(\n\t\t\t\t/* translators: %s: The error message. */\n\t\t\t\tsprintf( __( 'There was an error. %s' ), e.message ),\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\t};\n\n/**\n * Converts all the blocks from specified widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {Object[]} widgetAreas Widget areas to save.\n * @return {Function} An action creator.\n */\nexport const saveWidgetAreas =\n\t( widgetAreas ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\ttry {\n\t\t\tfor ( const widgetArea of widgetAreas ) {\n\t\t\t\tawait dispatch.saveWidgetArea( widgetArea.id );\n\t\t\t}\n\t\t} finally {\n\t\t\t// saveEditedEntityRecord resets the resolution status, let's fix it manually.\n\t\t\tawait registry\n\t\t\t\t.dispatch( coreStore )\n\t\t\t\t.finishResolution(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tbuildWidgetAreasQuery()\n\t\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from a widget area specified by ID into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {string} widgetAreaId ID of the widget area to process.\n * @return {Function} An action creator.\n */\nexport const saveWidgetArea =\n\t( widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst widgets = select.getWidgets();\n\n\t\tconst post = registry\n\t\t\t.select( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetAreaId )\n\t\t\t);\n\n\t\t// Get all widgets from this area\n\t\tconst areaWidgets = Object.values( widgets ).filter(\n\t\t\t( { sidebar } ) => sidebar === widgetAreaId\n\t\t);\n\n\t\t// Remove all duplicate reference widget instances for legacy widgets.\n\t\t// Why? We filter out the widgets with duplicate IDs to prevent adding more than one instance of a widget\n\t\t// implemented using a function. WordPress doesn't support having more than one instance of these, if you try to\n\t\t// save multiple instances of these in different sidebars you will run into undefined behaviors.\n\t\tconst usedReferenceWidgets = [];\n\t\tconst widgetsBlocks = post.blocks.filter( ( block ) => {\n\t\t\tconst { id } = block.attributes;\n\n\t\t\tif ( block.name === 'core/legacy-widget' && id ) {\n\t\t\t\tif ( usedReferenceWidgets.includes( id ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tusedReferenceWidgets.push( id );\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t\t// Determine which widgets have been deleted. We can tell if a widget is\n\t\t// deleted and not just moved to a different area by looking to see if\n\t\t// getWidgetAreaForWidgetId() finds something.\n\t\tconst deletedWidgets = [];\n\t\tfor ( const widget of areaWidgets ) {\n\t\t\tconst widgetsNewArea = select.getWidgetAreaForWidgetId( widget.id );\n\t\t\tif ( ! widgetsNewArea ) {\n\t\t\t\tdeletedWidgets.push( widget );\n\t\t\t}\n\t\t}\n\n\t\tconst batchMeta = [];\n\t\tconst batchTasks = [];\n\t\tconst sidebarWidgetsIds = [];\n\t\tfor ( let i = 0; i < widgetsBlocks.length; i++ ) {\n\t\t\tconst block = widgetsBlocks[ i ];\n\t\t\tconst widgetId = getWidgetIdFromBlock( block );\n\t\t\tconst oldWidget = widgets[ widgetId ];\n\t\t\tconst widget = transformBlockToWidget( block, oldWidget );\n\n\t\t\t// We'll replace the null widgetId after save, but we track it here\n\t\t\t// since order is important.\n\t\t\tsidebarWidgetsIds.push( widgetId );\n\n\t\t\t// Check oldWidget as widgetId might refer to an ID which has been\n\t\t\t// deleted, e.g. if a deleted block is restored via undo after saving.\n\t\t\tif ( oldWidget ) {\n\t\t\t\t// Update an existing widget.\n\t\t\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'widget',\n\t\t\t\t\twidgetId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t},\n\t\t\t\t\t{ undoIgnore: true }\n\t\t\t\t);\n\n\t\t\t\tconst hasEdits = registry\n\t\t\t\t\t.select( coreStore )\n\t\t\t\t\t.hasEditsForEntityRecord( 'root', 'widget', widgetId );\n\n\t\t\t\tif ( ! hasEdits ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbatchTasks.push( ( { saveEditedEntityRecord } ) =>\n\t\t\t\t\tsaveEditedEntityRecord( 'root', 'widget', widgetId )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Create a new widget.\n\t\t\t\tbatchTasks.push( ( { saveEntityRecord } ) =>\n\t\t\t\t\tsaveEntityRecord( 'root', 'widget', {\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbatchMeta.push( {\n\t\t\t\tblock,\n\t\t\t\tposition: i,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} );\n\t\t}\n\t\tfor ( const widget of deletedWidgets ) {\n\t\t\tbatchTasks.push( ( { deleteEntityRecord } ) =>\n\t\t\t\tdeleteEntityRecord( 'root', 'widget', widget.id, {\n\t\t\t\t\tforce: true,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tconst records = await registry\n\t\t\t.dispatch( coreStore )\n\t\t\t.__experimentalBatch( batchTasks );\n\t\tconst preservedRecords = records.filter(\n\t\t\t( record ) => ! record.hasOwnProperty( 'deleted' )\n\t\t);\n\n\t\tconst failedWidgetNames = [];\n\n\t\tfor ( let i = 0; i < preservedRecords.length; i++ ) {\n\t\t\tconst widget = preservedRecords[ i ];\n\t\t\tconst { block, position } = batchMeta[ i ];\n\n\t\t\t// Set __internalWidgetId on the block. This will be persisted to the\n\t\t\t// store when we dispatch receiveEntityRecords( post ) below.\n\t\t\tpost.blocks[ position ].attributes.__internalWidgetId = widget.id;\n\n\t\t\tconst error = registry\n\t\t\t\t.select( coreStore )\n\t\t\t\t.getLastEntitySaveError( 'root', 'widget', widget.id );\n\t\t\tif ( error ) {\n\t\t\t\tfailedWidgetNames.push( block.attributes?.name || block?.name );\n\t\t\t}\n\n\t\t\tif ( ! sidebarWidgetsIds[ position ] ) {\n\t\t\t\tsidebarWidgetsIds[ position ] = widget.id;\n\t\t\t}\n\t\t}\n\n\t\tif ( failedWidgetNames.length ) {\n\t\t\tthrow new Error(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: List of widget names */\n\t\t\t\t\t__( 'Could not save the following widgets: %s.' ),\n\t\t\t\t\tfailedWidgetNames.join( ', ' )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\twidgetAreaId,\n\t\t\t{\n\t\t\t\twidgets: sidebarWidgetsIds,\n\t\t\t},\n\t\t\t{ undoIgnore: true }\n\t\t);\n\n\t\tdispatch( trySaveWidgetArea( widgetAreaId ) );\n\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords( KIND, POST_TYPE, post, undefined );\n\t};\n\nconst trySaveWidgetArea =\n\t( widgetAreaId ) =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.saveEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\twidgetAreaId,\n\t\t\t\t{\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t}\n\t\t\t);\n\t};\n\n/**\n * Sets the clientId stored for a particular widgetId.\n *\n * @param {number} clientId Client id.\n * @param {number} widgetId Widget id.\n *\n * @return {Object} Action.\n */\nexport function setWidgetIdForClientId( clientId, widgetId ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_ID_FOR_CLIENT_ID',\n\t\tclientId,\n\t\twidgetId,\n\t};\n}\n\n/**\n * Sets the open state of all the widget areas.\n *\n * @param {Object} widgetAreasOpenState The open states of all the widget areas.\n *\n * @return {Object} Action.\n */\nexport function setWidgetAreasOpenState( widgetAreasOpenState ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_AREAS_OPEN_STATE',\n\t\twidgetAreasOpenState,\n\t};\n}\n\n/**\n * Sets the open state of the widget area.\n *\n * @param {string} clientId The clientId of the widget area.\n * @param {boolean} isOpen Whether the widget area should be opened.\n *\n * @return {Object} Action.\n */\nexport function setIsWidgetAreaOpen( clientId, isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_WIDGET_AREA_OPEN',\n\t\tclientId,\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the inserter.\n *\n * @param {boolean|Object} value Whether the inserter should be\n * opened (true) or closed (false).\n * To specify an insertion point,\n * use an object.\n * @param {string} value.rootClientId The root client ID to insert at.\n * @param {number} value.insertionIndex The index to insert at.\n *\n * @return {Object} Action object.\n */\nexport function setIsInserterOpened( value ) {\n\treturn {\n\t\ttype: 'SET_IS_INSERTER_OPENED',\n\t\tvalue,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the list view.\n *\n * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.\n * @return {Object} Action object.\n */\nexport function setIsListViewOpened( isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_LIST_VIEW_OPENED',\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object signalling that the user closed the sidebar.\n *\n * @return {Object} Action creator.\n */\nexport const closeGeneralSidebar =\n\t() =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( interfaceStore )\n\t\t\t.disableComplementaryArea( editWidgetsStoreName );\n\t};\n\n/**\n * Action that handles moving a block between widget areas\n *\n * @param {string} clientId The clientId of the block to move.\n * @param {string} widgetAreaId The id of the widget area to move the block to.\n */\nexport const moveBlockToWidgetArea =\n\t( clientId, widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst sourceRootClientId = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockRootClientId( [ clientId ] );\n\n\t\t// Search the top level blocks (widget areas) for the one with the matching\n\t\t// id attribute. Makes the assumption that all top-level blocks are widget\n\t\t// areas.\n\t\tconst widgetAreas = registry.select( blockEditorStore ).getBlocks();\n\t\tconst destinationWidgetAreaBlock = widgetAreas.find(\n\t\t\t( { attributes } ) => attributes.id === widgetAreaId\n\t\t);\n\t\tconst destinationRootClientId = destinationWidgetAreaBlock.clientId;\n\n\t\t// Get the index for moving to the end of the the destination widget area.\n\t\tconst destinationInnerBlocksClientIds = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockOrder( destinationRootClientId );\n\t\tconst destinationIndex = destinationInnerBlocksClientIds.length;\n\n\t\t// Reveal the widget area, if it's not open.\n\t\tconst isDestinationWidgetAreaOpen = select.getIsWidgetAreaOpen(\n\t\t\tdestinationRootClientId\n\t\t);\n\n\t\tif ( ! isDestinationWidgetAreaOpen ) {\n\t\t\tdispatch.setIsWidgetAreaOpen( destinationRootClientId, true );\n\t\t}\n\n\t\t// Move the block.\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.moveBlocksToPosition(\n\t\t\t\t[ clientId ],\n\t\t\t\tsourceRootClientId,\n\t\t\t\tdestinationRootClientId,\n\t\t\t\tdestinationIndex\n\t\t\t);\n\t};\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/store/actions.js"],"names":["persistStubPost","id","blocks","registry","stubPost","dispatch","coreStore","receiveEntityRecords","KIND","POST_TYPE","saveEditedWidgetAreas","select","editedWidgetAreas","getEditedWidgetAreas","length","saveWidgetAreas","noticesStore","createSuccessNotice","type","e","createErrorNotice","message","widgetAreas","widgetArea","saveWidgetArea","finishResolution","WIDGET_AREA_ENTITY_TYPE","widgetAreaId","widgets","getWidgets","post","getEditedEntityRecord","areaWidgets","Object","values","filter","sidebar","usedReferenceWidgets","widgetsBlocks","block","attributes","name","includes","push","deletedWidgets","widget","widgetsNewArea","getWidgetAreaForWidgetId","batchMeta","batchTasks","sidebarWidgetsIds","i","widgetId","oldWidget","editEntityRecord","undoIgnore","hasEdits","hasEditsForEntityRecord","saveEditedEntityRecord","saveEntityRecord","position","clientId","deleteEntityRecord","force","records","__experimentalBatch","preservedRecords","record","hasOwnProperty","failedWidgetNames","__internalWidgetId","error","getLastEntitySaveError","Error","join","trySaveWidgetArea","undefined","throwOnError","setWidgetIdForClientId","setWidgetAreasOpenState","widgetAreasOpenState","setIsWidgetAreaOpen","isOpen","setIsInserterOpened","value","setIsListViewOpened","closeGeneralSidebar","interfaceStore","disableComplementaryArea","editWidgetsStoreName","moveBlockToWidgetArea","sourceRootClientId","blockEditorStore","getBlockRootClientId","getBlocks","destinationWidgetAreaBlock","find","destinationRootClientId","destinationInnerBlocksClientIds","getBlockOrder","destinationIndex","isDestinationWidgetAreaOpen","getIsWidgetAreaOpen","moveBlocksToPosition"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { transformBlockToWidget } from './transformers';\nimport {\n\tbuildWidgetAreaPostId,\n\tbuildWidgetAreasQuery,\n\tcreateStubPost,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Persists a stub post with given ID to core data store. The post is meant to be in-memory only and\n * shouldn't be saved via the API.\n *\n * @param {string} id Post ID.\n * @param {Array} blocks Blocks the post should consist of.\n * @return {Object} The post object.\n */\nexport const persistStubPost =\n\t( id, blocks ) =>\n\t( { registry } ) => {\n\t\tconst stubPost = createStubPost( id, blocks );\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tstubPost,\n\t\t\t\t{ id: stubPost.id },\n\t\t\t\tfalse\n\t\t\t);\n\t\treturn stubPost;\n\t};\n\n/**\n * Converts all the blocks from edited widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * Creates a snackbar notice on either success or error.\n *\n * @return {Function} An action creator.\n */\nexport const saveEditedWidgetAreas =\n\t() =>\n\tasync ( { select, dispatch, registry } ) => {\n\t\tconst editedWidgetAreas = select.getEditedWidgetAreas();\n\t\tif ( ! editedWidgetAreas?.length ) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait dispatch.saveWidgetAreas( editedWidgetAreas );\n\t\t\tregistry\n\t\t\t\t.dispatch( noticesStore )\n\t\t\t\t.createSuccessNotice( __( 'Widgets saved.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tregistry.dispatch( noticesStore ).createErrorNotice(\n\t\t\t\t/* translators: %s: The error message. */\n\t\t\t\tsprintf( __( 'There was an error. %s' ), e.message ),\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\t};\n\n/**\n * Converts all the blocks from specified widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {Object[]} widgetAreas Widget areas to save.\n * @return {Function} An action creator.\n */\nexport const saveWidgetAreas =\n\t( widgetAreas ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\ttry {\n\t\t\tfor ( const widgetArea of widgetAreas ) {\n\t\t\t\tawait dispatch.saveWidgetArea( widgetArea.id );\n\t\t\t}\n\t\t} finally {\n\t\t\t// saveEditedEntityRecord resets the resolution status, let's fix it manually.\n\t\t\tawait registry\n\t\t\t\t.dispatch( coreStore )\n\t\t\t\t.finishResolution(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tbuildWidgetAreasQuery()\n\t\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from a widget area specified by ID into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {string} widgetAreaId ID of the widget area to process.\n * @return {Function} An action creator.\n */\nexport const saveWidgetArea =\n\t( widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst widgets = select.getWidgets();\n\n\t\tconst post = registry\n\t\t\t.select( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetAreaId )\n\t\t\t);\n\n\t\t// Get all widgets from this area\n\t\tconst areaWidgets = Object.values( widgets ).filter(\n\t\t\t( { sidebar } ) => sidebar === widgetAreaId\n\t\t);\n\n\t\t// Remove all duplicate reference widget instances for legacy widgets.\n\t\t// Why? We filter out the widgets with duplicate IDs to prevent adding more than one instance of a widget\n\t\t// implemented using a function. WordPress doesn't support having more than one instance of these, if you try to\n\t\t// save multiple instances of these in different sidebars you will run into undefined behaviors.\n\t\tconst usedReferenceWidgets = [];\n\t\tconst widgetsBlocks = post.blocks.filter( ( block ) => {\n\t\t\tconst { id } = block.attributes;\n\n\t\t\tif ( block.name === 'core/legacy-widget' && id ) {\n\t\t\t\tif ( usedReferenceWidgets.includes( id ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tusedReferenceWidgets.push( id );\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t\t// Determine which widgets have been deleted. We can tell if a widget is\n\t\t// deleted and not just moved to a different area by looking to see if\n\t\t// getWidgetAreaForWidgetId() finds something.\n\t\tconst deletedWidgets = [];\n\t\tfor ( const widget of areaWidgets ) {\n\t\t\tconst widgetsNewArea = select.getWidgetAreaForWidgetId( widget.id );\n\t\t\tif ( ! widgetsNewArea ) {\n\t\t\t\tdeletedWidgets.push( widget );\n\t\t\t}\n\t\t}\n\n\t\tconst batchMeta = [];\n\t\tconst batchTasks = [];\n\t\tconst sidebarWidgetsIds = [];\n\t\tfor ( let i = 0; i < widgetsBlocks.length; i++ ) {\n\t\t\tconst block = widgetsBlocks[ i ];\n\t\t\tconst widgetId = getWidgetIdFromBlock( block );\n\t\t\tconst oldWidget = widgets[ widgetId ];\n\t\t\tconst widget = transformBlockToWidget( block, oldWidget );\n\n\t\t\t// We'll replace the null widgetId after save, but we track it here\n\t\t\t// since order is important.\n\t\t\tsidebarWidgetsIds.push( widgetId );\n\n\t\t\t// Check oldWidget as widgetId might refer to an ID which has been\n\t\t\t// deleted, e.g. if a deleted block is restored via undo after saving.\n\t\t\tif ( oldWidget ) {\n\t\t\t\t// Update an existing widget.\n\t\t\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'widget',\n\t\t\t\t\twidgetId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t},\n\t\t\t\t\t{ undoIgnore: true }\n\t\t\t\t);\n\n\t\t\t\tconst hasEdits = registry\n\t\t\t\t\t.select( coreStore )\n\t\t\t\t\t.hasEditsForEntityRecord( 'root', 'widget', widgetId );\n\n\t\t\t\tif ( ! hasEdits ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbatchTasks.push( ( { saveEditedEntityRecord } ) =>\n\t\t\t\t\tsaveEditedEntityRecord( 'root', 'widget', widgetId )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Create a new widget.\n\t\t\t\tbatchTasks.push( ( { saveEntityRecord } ) =>\n\t\t\t\t\tsaveEntityRecord( 'root', 'widget', {\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbatchMeta.push( {\n\t\t\t\tblock,\n\t\t\t\tposition: i,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} );\n\t\t}\n\t\tfor ( const widget of deletedWidgets ) {\n\t\t\tbatchTasks.push( ( { deleteEntityRecord } ) =>\n\t\t\t\tdeleteEntityRecord( 'root', 'widget', widget.id, {\n\t\t\t\t\tforce: true,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tconst records = await registry\n\t\t\t.dispatch( coreStore )\n\t\t\t.__experimentalBatch( batchTasks );\n\t\tconst preservedRecords = records.filter(\n\t\t\t( record ) => ! record.hasOwnProperty( 'deleted' )\n\t\t);\n\n\t\tconst failedWidgetNames = [];\n\n\t\tfor ( let i = 0; i < preservedRecords.length; i++ ) {\n\t\t\tconst widget = preservedRecords[ i ];\n\t\t\tconst { block, position } = batchMeta[ i ];\n\n\t\t\t// Set __internalWidgetId on the block. This will be persisted to the\n\t\t\t// store when we dispatch receiveEntityRecords( post ) below.\n\t\t\tpost.blocks[ position ].attributes.__internalWidgetId = widget.id;\n\n\t\t\tconst error = registry\n\t\t\t\t.select( coreStore )\n\t\t\t\t.getLastEntitySaveError( 'root', 'widget', widget.id );\n\t\t\tif ( error ) {\n\t\t\t\tfailedWidgetNames.push( block.attributes?.name || block?.name );\n\t\t\t}\n\n\t\t\tif ( ! sidebarWidgetsIds[ position ] ) {\n\t\t\t\tsidebarWidgetsIds[ position ] = widget.id;\n\t\t\t}\n\t\t}\n\n\t\tif ( failedWidgetNames.length ) {\n\t\t\tthrow new Error(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: List of widget names */\n\t\t\t\t\t__( 'Could not save the following widgets: %s.' ),\n\t\t\t\t\tfailedWidgetNames.join( ', ' )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\twidgetAreaId,\n\t\t\t{\n\t\t\t\twidgets: sidebarWidgetsIds,\n\t\t\t},\n\t\t\t{ undoIgnore: true }\n\t\t);\n\n\t\tdispatch( trySaveWidgetArea( widgetAreaId ) );\n\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords( KIND, POST_TYPE, post, undefined );\n\t};\n\nconst trySaveWidgetArea =\n\t( widgetAreaId ) =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.saveEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\twidgetAreaId,\n\t\t\t\t{\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t}\n\t\t\t);\n\t};\n\n/**\n * Sets the clientId stored for a particular widgetId.\n *\n * @param {number} clientId Client id.\n * @param {number} widgetId Widget id.\n *\n * @return {Object} Action.\n */\nexport function setWidgetIdForClientId( clientId, widgetId ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_ID_FOR_CLIENT_ID',\n\t\tclientId,\n\t\twidgetId,\n\t};\n}\n\n/**\n * Sets the open state of all the widget areas.\n *\n * @param {Object} widgetAreasOpenState The open states of all the widget areas.\n *\n * @return {Object} Action.\n */\nexport function setWidgetAreasOpenState( widgetAreasOpenState ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_AREAS_OPEN_STATE',\n\t\twidgetAreasOpenState,\n\t};\n}\n\n/**\n * Sets the open state of the widget area.\n *\n * @param {string} clientId The clientId of the widget area.\n * @param {boolean} isOpen Whether the widget area should be opened.\n *\n * @return {Object} Action.\n */\nexport function setIsWidgetAreaOpen( clientId, isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_WIDGET_AREA_OPEN',\n\t\tclientId,\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the inserter.\n *\n * @param {boolean|Object} value Whether the inserter should be\n * opened (true) or closed (false).\n * To specify an insertion point,\n * use an object.\n * @param {string} value.rootClientId The root client ID to insert at.\n * @param {number} value.insertionIndex The index to insert at.\n *\n * @return {Object} Action object.\n */\nexport function setIsInserterOpened( value ) {\n\treturn {\n\t\ttype: 'SET_IS_INSERTER_OPENED',\n\t\tvalue,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the list view.\n *\n * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.\n * @return {Object} Action object.\n */\nexport function setIsListViewOpened( isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_LIST_VIEW_OPENED',\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object signalling that the user closed the sidebar.\n *\n * @return {Object} Action creator.\n */\nexport const closeGeneralSidebar =\n\t() =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( interfaceStore )\n\t\t\t.disableComplementaryArea( editWidgetsStoreName );\n\t};\n\n/**\n * Action that handles moving a block between widget areas\n *\n * @param {string} clientId The clientId of the block to move.\n * @param {string} widgetAreaId The id of the widget area to move the block to.\n */\nexport const moveBlockToWidgetArea =\n\t( clientId, widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst sourceRootClientId = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockRootClientId( [ clientId ] );\n\n\t\t// Search the top level blocks (widget areas) for the one with the matching\n\t\t// id attribute. Makes the assumption that all top-level blocks are widget\n\t\t// areas.\n\t\tconst widgetAreas = registry.select( blockEditorStore ).getBlocks();\n\t\tconst destinationWidgetAreaBlock = widgetAreas.find(\n\t\t\t( { attributes } ) => attributes.id === widgetAreaId\n\t\t);\n\t\tconst destinationRootClientId = destinationWidgetAreaBlock.clientId;\n\n\t\t// Get the index for moving to the end of the destination widget area.\n\t\tconst destinationInnerBlocksClientIds = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockOrder( destinationRootClientId );\n\t\tconst destinationIndex = destinationInnerBlocksClientIds.length;\n\n\t\t// Reveal the widget area, if it's not open.\n\t\tconst isDestinationWidgetAreaOpen = select.getIsWidgetAreaOpen(\n\t\t\tdestinationRootClientId\n\t\t);\n\n\t\tif ( ! isDestinationWidgetAreaOpen ) {\n\t\t\tdispatch.setIsWidgetAreaOpen( destinationRootClientId, true );\n\t\t}\n\n\t\t// Move the block.\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.moveBlocksToPosition(\n\t\t\t\t[ clientId ],\n\t\t\t\tsourceRootClientId,\n\t\t\t\tdestinationRootClientId,\n\t\t\t\tdestinationIndex\n\t\t\t);\n\t};\n"]}
@@ -9,8 +9,6 @@ exports.isInserterOpened = isInserterOpened;
9
9
  exports.isListViewOpened = isListViewOpened;
10
10
  exports.isSavingWidgetAreas = void 0;
11
11
 
12
- var _lodash = require("lodash");
13
-
14
12
  var _data = require("@wordpress/data");
15
13
 
16
14
  var _widgets = require("@wordpress/widgets");
@@ -23,10 +21,6 @@ var _utils = require("./utils");
23
21
 
24
22
  var _constants = require("./constants");
25
23
 
26
- /**
27
- * External dependencies
28
- */
29
-
30
24
  /**
31
25
  * WordPress dependencies
32
26
  */
@@ -42,7 +36,11 @@ var _constants = require("./constants");
42
36
  */
43
37
  const getWidgets = (0, _data.createRegistrySelector)(select => () => {
44
38
  const widgets = select(_coreData.store).getEntityRecords('root', 'widget', (0, _utils.buildWidgetsQuery)());
45
- return (0, _lodash.keyBy)(widgets, 'id');
39
+ return (// Key widgets by their ID.
40
+ (widgets === null || widgets === void 0 ? void 0 : widgets.reduce((allWidgets, widget) => ({ ...allWidgets,
41
+ [widget.id]: widget
42
+ }), {})) || {}
43
+ );
46
44
  });
47
45
  /**
48
46
  * Returns API widget data for a particular widget ID.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/store/selectors.js"],"names":["getWidgets","select","widgets","coreStore","getEntityRecords","getWidget","state","id","editWidgetsStoreName","getWidgetAreas","query","KIND","WIDGET_AREA_ENTITY_TYPE","getWidgetAreaForWidgetId","widgetId","widgetAreas","find","widgetArea","post","getEditedEntityRecord","POST_TYPE","blockWidgetIds","blocks","map","block","includes","getParentWidgetAreaBlock","clientId","getBlock","getBlockName","getBlockParents","blockEditorStore","blockParents","widgetAreaClientId","parentClientId","getEditedWidgetAreas","ids","filter","hasEditsForEntityRecord","getReferenceWidgetBlocks","referenceWidgetName","results","_widgetArea","name","attributes","push","isSavingWidgetAreas","widgetAreasIds","isSaving","isSavingEntityRecord","widgetIds","Object","keys","undefined","getIsWidgetAreaOpen","widgetAreasOpenState","isInserterOpened","blockInserterPanel","__experimentalGetInsertionPoint","rootClientId","insertionIndex","canInsertBlockInWidgetArea","blockName","getBlocks","firstWidgetArea","canInsertBlockType","isListViewOpened","listViewPanel"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { keyBy } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport {\n\tbuildWidgetsQuery,\n\tbuildWidgetAreasQuery,\n\tbuildWidgetAreaPostId,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Returns all API widgets.\n *\n * @return {Object[]} API List of widgets.\n */\nexport const getWidgets = createRegistrySelector( ( select ) => () => {\n\tconst widgets = select( coreStore ).getEntityRecords(\n\t\t'root',\n\t\t'widget',\n\t\tbuildWidgetsQuery()\n\t);\n\n\treturn keyBy( widgets, 'id' );\n} );\n\n/**\n * Returns API widget data for a particular widget ID.\n *\n * @param {number} id Widget ID.\n *\n * @return {Object} API widget data for a particular widget ID.\n */\nexport const getWidget = createRegistrySelector(\n\t( select ) => ( state, id ) => {\n\t\tconst widgets = select( editWidgetsStoreName ).getWidgets();\n\t\treturn widgets[ id ];\n\t}\n);\n\n/**\n * Returns all API widget areas.\n *\n * @return {Object[]} API List of widget areas.\n */\nexport const getWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst query = buildWidgetAreasQuery();\n\treturn select( coreStore ).getEntityRecords(\n\t\tKIND,\n\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\tquery\n\t);\n} );\n\n/**\n * Returns widgetArea containing a block identify by given widgetId\n *\n * @param {string} widgetId The ID of the widget.\n * @return {Object} Containing widget area.\n */\nexport const getWidgetAreaForWidgetId = createRegistrySelector(\n\t( select ) => ( state, widgetId ) => {\n\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\treturn widgetAreas.find( ( widgetArea ) => {\n\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetArea.id )\n\t\t\t);\n\t\t\tconst blockWidgetIds = post.blocks.map( ( block ) =>\n\t\t\t\tgetWidgetIdFromBlock( block )\n\t\t\t);\n\t\t\treturn blockWidgetIds.includes( widgetId );\n\t\t} );\n\t}\n);\n\n/**\n * Given a child client id, returns the parent widget area block.\n *\n * @param {string} clientId The client id of a block in a widget area.\n *\n * @return {WPBlock} The widget area block.\n */\nexport const getParentWidgetAreaBlock = createRegistrySelector(\n\t( select ) => ( state, clientId ) => {\n\t\tconst { getBlock, getBlockName, getBlockParents } =\n\t\t\tselect( blockEditorStore );\n\t\tconst blockParents = getBlockParents( clientId );\n\t\tconst widgetAreaClientId = blockParents.find(\n\t\t\t( parentClientId ) =>\n\t\t\t\tgetBlockName( parentClientId ) === 'core/widget-area'\n\t\t);\n\t\treturn getBlock( widgetAreaClientId );\n\t}\n);\n\n/**\n * Returns all edited widget area entity records.\n *\n * @return {Object[]} List of edited widget area entity records.\n */\nexport const getEditedWidgetAreas = createRegistrySelector(\n\t( select ) => ( state, ids ) => {\n\t\tlet widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\tif ( ! widgetAreas ) {\n\t\t\treturn [];\n\t\t}\n\t\tif ( ids ) {\n\t\t\twidgetAreas = widgetAreas.filter( ( { id } ) =>\n\t\t\t\tids.includes( id )\n\t\t\t);\n\t\t}\n\t\treturn widgetAreas\n\t\t\t.filter( ( { id } ) =>\n\t\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( id )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map( ( { id } ) =>\n\t\t\t\tselect( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tid\n\t\t\t\t)\n\t\t\t);\n\t}\n);\n\n/**\n * Returns all blocks representing reference widgets.\n *\n * @param {string} referenceWidgetName Optional. If given, only reference widgets with this name will be returned.\n * @return {Array} List of all blocks representing reference widgets\n */\nexport const getReferenceWidgetBlocks = createRegistrySelector(\n\t( select ) =>\n\t\t( state, referenceWidgetName = null ) => {\n\t\t\tconst results = [];\n\t\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\t\tfor ( const _widgetArea of widgetAreas ) {\n\t\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( _widgetArea.id )\n\t\t\t\t);\n\t\t\t\tfor ( const block of post.blocks ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tblock.name === 'core/legacy-widget' &&\n\t\t\t\t\t\t( ! referenceWidgetName ||\n\t\t\t\t\t\t\tblock.attributes?.referenceWidgetName ===\n\t\t\t\t\t\t\t\treferenceWidgetName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresults.push( block );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n);\n\n/**\n * Returns true if any widget area is currently being saved.\n *\n * @return {boolean} True if any widget area is currently being saved. False otherwise.\n */\nexport const isSavingWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst widgetAreasIds = select( editWidgetsStoreName )\n\t\t.getWidgetAreas()\n\t\t?.map( ( { id } ) => id );\n\tif ( ! widgetAreasIds ) {\n\t\treturn false;\n\t}\n\n\tfor ( const id of widgetAreasIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst widgetIds = [\n\t\t...Object.keys( select( editWidgetsStoreName ).getWidgets() ),\n\t\tundefined, // account for new widgets without an ID\n\t];\n\tfor ( const id of widgetIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\t'root',\n\t\t\t'widget',\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n} );\n\n/**\n * Gets whether the widget area is opened.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} clientId The clientId of the widget area.\n *\n * @return {boolean} True if the widget area is open.\n */\nexport const getIsWidgetAreaOpen = ( state, clientId ) => {\n\tconst { widgetAreasOpenState } = state;\n\treturn !! widgetAreasOpenState[ clientId ];\n};\n\n/**\n * Returns true if the inserter is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the inserter is opened.\n */\nexport function isInserterOpened( state ) {\n\treturn !! state.blockInserterPanel;\n}\n\n/**\n * Get the insertion point for the inserter.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The root client ID and index to insert at.\n */\nexport function __experimentalGetInsertionPoint( state ) {\n\tconst { rootClientId, insertionIndex } = state.blockInserterPanel;\n\treturn { rootClientId, insertionIndex };\n}\n\n/**\n * Returns true if a block can be inserted into a widget area.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} blockName The name of the block being inserted.\n *\n * @return {boolean} True if the block can be inserted in a widget area.\n */\nexport const canInsertBlockInWidgetArea = createRegistrySelector(\n\t( select ) => ( state, blockName ) => {\n\t\t// Widget areas are always top-level blocks, which getBlocks will return.\n\t\tconst widgetAreas = select( blockEditorStore ).getBlocks();\n\n\t\t// Makes an assumption that a block that can be inserted into one\n\t\t// widget area can be inserted into any widget area. Uses the first\n\t\t// widget area for testing whether the block can be inserted.\n\t\tconst [ firstWidgetArea ] = widgetAreas;\n\t\treturn select( blockEditorStore ).canInsertBlockType(\n\t\t\tblockName,\n\t\t\tfirstWidgetArea.clientId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the list view is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the list view is opened.\n */\nexport function isListViewOpened( state ) {\n\treturn state.listViewPanel;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/store/selectors.js"],"names":["getWidgets","select","widgets","coreStore","getEntityRecords","reduce","allWidgets","widget","id","getWidget","state","editWidgetsStoreName","getWidgetAreas","query","KIND","WIDGET_AREA_ENTITY_TYPE","getWidgetAreaForWidgetId","widgetId","widgetAreas","find","widgetArea","post","getEditedEntityRecord","POST_TYPE","blockWidgetIds","blocks","map","block","includes","getParentWidgetAreaBlock","clientId","getBlock","getBlockName","getBlockParents","blockEditorStore","blockParents","widgetAreaClientId","parentClientId","getEditedWidgetAreas","ids","filter","hasEditsForEntityRecord","getReferenceWidgetBlocks","referenceWidgetName","results","_widgetArea","name","attributes","push","isSavingWidgetAreas","widgetAreasIds","isSaving","isSavingEntityRecord","widgetIds","Object","keys","undefined","getIsWidgetAreaOpen","widgetAreasOpenState","isInserterOpened","blockInserterPanel","__experimentalGetInsertionPoint","rootClientId","insertionIndex","canInsertBlockInWidgetArea","blockName","getBlocks","firstWidgetArea","canInsertBlockType","isListViewOpened","listViewPanel"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport {\n\tbuildWidgetsQuery,\n\tbuildWidgetAreasQuery,\n\tbuildWidgetAreaPostId,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Returns all API widgets.\n *\n * @return {Object[]} API List of widgets.\n */\nexport const getWidgets = createRegistrySelector( ( select ) => () => {\n\tconst widgets = select( coreStore ).getEntityRecords(\n\t\t'root',\n\t\t'widget',\n\t\tbuildWidgetsQuery()\n\t);\n\n\treturn (\n\t\t// Key widgets by their ID.\n\t\twidgets?.reduce(\n\t\t\t( allWidgets, widget ) => ( {\n\t\t\t\t...allWidgets,\n\t\t\t\t[ widget.id ]: widget,\n\t\t\t} ),\n\t\t\t{}\n\t\t) || {}\n\t);\n} );\n\n/**\n * Returns API widget data for a particular widget ID.\n *\n * @param {number} id Widget ID.\n *\n * @return {Object} API widget data for a particular widget ID.\n */\nexport const getWidget = createRegistrySelector(\n\t( select ) => ( state, id ) => {\n\t\tconst widgets = select( editWidgetsStoreName ).getWidgets();\n\t\treturn widgets[ id ];\n\t}\n);\n\n/**\n * Returns all API widget areas.\n *\n * @return {Object[]} API List of widget areas.\n */\nexport const getWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst query = buildWidgetAreasQuery();\n\treturn select( coreStore ).getEntityRecords(\n\t\tKIND,\n\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\tquery\n\t);\n} );\n\n/**\n * Returns widgetArea containing a block identify by given widgetId\n *\n * @param {string} widgetId The ID of the widget.\n * @return {Object} Containing widget area.\n */\nexport const getWidgetAreaForWidgetId = createRegistrySelector(\n\t( select ) => ( state, widgetId ) => {\n\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\treturn widgetAreas.find( ( widgetArea ) => {\n\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetArea.id )\n\t\t\t);\n\t\t\tconst blockWidgetIds = post.blocks.map( ( block ) =>\n\t\t\t\tgetWidgetIdFromBlock( block )\n\t\t\t);\n\t\t\treturn blockWidgetIds.includes( widgetId );\n\t\t} );\n\t}\n);\n\n/**\n * Given a child client id, returns the parent widget area block.\n *\n * @param {string} clientId The client id of a block in a widget area.\n *\n * @return {WPBlock} The widget area block.\n */\nexport const getParentWidgetAreaBlock = createRegistrySelector(\n\t( select ) => ( state, clientId ) => {\n\t\tconst { getBlock, getBlockName, getBlockParents } =\n\t\t\tselect( blockEditorStore );\n\t\tconst blockParents = getBlockParents( clientId );\n\t\tconst widgetAreaClientId = blockParents.find(\n\t\t\t( parentClientId ) =>\n\t\t\t\tgetBlockName( parentClientId ) === 'core/widget-area'\n\t\t);\n\t\treturn getBlock( widgetAreaClientId );\n\t}\n);\n\n/**\n * Returns all edited widget area entity records.\n *\n * @return {Object[]} List of edited widget area entity records.\n */\nexport const getEditedWidgetAreas = createRegistrySelector(\n\t( select ) => ( state, ids ) => {\n\t\tlet widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\tif ( ! widgetAreas ) {\n\t\t\treturn [];\n\t\t}\n\t\tif ( ids ) {\n\t\t\twidgetAreas = widgetAreas.filter( ( { id } ) =>\n\t\t\t\tids.includes( id )\n\t\t\t);\n\t\t}\n\t\treturn widgetAreas\n\t\t\t.filter( ( { id } ) =>\n\t\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( id )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map( ( { id } ) =>\n\t\t\t\tselect( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tid\n\t\t\t\t)\n\t\t\t);\n\t}\n);\n\n/**\n * Returns all blocks representing reference widgets.\n *\n * @param {string} referenceWidgetName Optional. If given, only reference widgets with this name will be returned.\n * @return {Array} List of all blocks representing reference widgets\n */\nexport const getReferenceWidgetBlocks = createRegistrySelector(\n\t( select ) =>\n\t\t( state, referenceWidgetName = null ) => {\n\t\t\tconst results = [];\n\t\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\t\tfor ( const _widgetArea of widgetAreas ) {\n\t\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( _widgetArea.id )\n\t\t\t\t);\n\t\t\t\tfor ( const block of post.blocks ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tblock.name === 'core/legacy-widget' &&\n\t\t\t\t\t\t( ! referenceWidgetName ||\n\t\t\t\t\t\t\tblock.attributes?.referenceWidgetName ===\n\t\t\t\t\t\t\t\treferenceWidgetName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresults.push( block );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n);\n\n/**\n * Returns true if any widget area is currently being saved.\n *\n * @return {boolean} True if any widget area is currently being saved. False otherwise.\n */\nexport const isSavingWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst widgetAreasIds = select( editWidgetsStoreName )\n\t\t.getWidgetAreas()\n\t\t?.map( ( { id } ) => id );\n\tif ( ! widgetAreasIds ) {\n\t\treturn false;\n\t}\n\n\tfor ( const id of widgetAreasIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst widgetIds = [\n\t\t...Object.keys( select( editWidgetsStoreName ).getWidgets() ),\n\t\tundefined, // account for new widgets without an ID\n\t];\n\tfor ( const id of widgetIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\t'root',\n\t\t\t'widget',\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n} );\n\n/**\n * Gets whether the widget area is opened.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} clientId The clientId of the widget area.\n *\n * @return {boolean} True if the widget area is open.\n */\nexport const getIsWidgetAreaOpen = ( state, clientId ) => {\n\tconst { widgetAreasOpenState } = state;\n\treturn !! widgetAreasOpenState[ clientId ];\n};\n\n/**\n * Returns true if the inserter is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the inserter is opened.\n */\nexport function isInserterOpened( state ) {\n\treturn !! state.blockInserterPanel;\n}\n\n/**\n * Get the insertion point for the inserter.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The root client ID and index to insert at.\n */\nexport function __experimentalGetInsertionPoint( state ) {\n\tconst { rootClientId, insertionIndex } = state.blockInserterPanel;\n\treturn { rootClientId, insertionIndex };\n}\n\n/**\n * Returns true if a block can be inserted into a widget area.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} blockName The name of the block being inserted.\n *\n * @return {boolean} True if the block can be inserted in a widget area.\n */\nexport const canInsertBlockInWidgetArea = createRegistrySelector(\n\t( select ) => ( state, blockName ) => {\n\t\t// Widget areas are always top-level blocks, which getBlocks will return.\n\t\tconst widgetAreas = select( blockEditorStore ).getBlocks();\n\n\t\t// Makes an assumption that a block that can be inserted into one\n\t\t// widget area can be inserted into any widget area. Uses the first\n\t\t// widget area for testing whether the block can be inserted.\n\t\tconst [ firstWidgetArea ] = widgetAreas;\n\t\treturn select( blockEditorStore ).canInsertBlockType(\n\t\t\tblockName,\n\t\t\tfirstWidgetArea.clientId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the list view is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the list view is opened.\n */\nexport function isListViewOpened( state ) {\n\treturn state.listViewPanel;\n}\n"]}
@@ -22,7 +22,9 @@ var _widgets = require("@wordpress/widgets");
22
22
  */
23
23
  function transformWidgetToBlock(widget) {
24
24
  if (widget.id_base === 'block') {
25
- const parsedBlocks = (0, _blocks.parse)(widget.instance.raw.content);
25
+ const parsedBlocks = (0, _blocks.parse)(widget.instance.raw.content, {
26
+ __unstableSkipAutop: true
27
+ });
26
28
 
27
29
  if (!parsedBlocks.length) {
28
30
  return (0, _widgets.addWidgetIdToBlock)((0, _blocks.createBlock)('core/paragraph', {}, []), widget.id);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/store/transformers.js"],"names":["transformWidgetToBlock","widget","id_base","parsedBlocks","instance","raw","content","length","id","attributes","_embedded","about","is_multi","idBase","transformBlockToWidget","block","relatedWidget","isValidLegacyWidgetBlock","name","rendered","rendered_form"],"mappings":";;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,sBAAT,CAAiCC,MAAjC,EAA0C;AAChD,MAAKA,MAAM,CAACC,OAAP,KAAmB,OAAxB,EAAkC;AACjC,UAAMC,YAAY,GAAG,mBAAOF,MAAM,CAACG,QAAP,CAAgBC,GAAhB,CAAoBC,OAA3B,CAArB;;AACA,QAAK,CAAEH,YAAY,CAACI,MAApB,EAA6B;AAC5B,aAAO,iCACN,yBAAa,gBAAb,EAA+B,EAA/B,EAAmC,EAAnC,CADM,EAENN,MAAM,CAACO,EAFD,CAAP;AAIA;;AACD,WAAO,iCAAoBL,YAAY,CAAE,CAAF,CAAhC,EAAuCF,MAAM,CAACO,EAA9C,CAAP;AACA;;AAED,MAAIC,UAAJ;;AACA,MAAKR,MAAM,CAACS,SAAP,CAAiBC,KAAjB,CAAwB,CAAxB,EAA4BC,QAAjC,EAA4C;AAC3CH,IAAAA,UAAU,GAAG;AACZI,MAAAA,MAAM,EAAEZ,MAAM,CAACC,OADH;AAEZE,MAAAA,QAAQ,EAAEH,MAAM,CAACG;AAFL,KAAb;AAIA,GALD,MAKO;AACNK,IAAAA,UAAU,GAAG;AACZD,MAAAA,EAAE,EAAEP,MAAM,CAACO;AADC,KAAb;AAGA;;AAED,SAAO,iCACN,yBAAa,oBAAb,EAAmCC,UAAnC,EAA+C,EAA/C,CADM,EAENR,MAAM,CAACO,EAFD,CAAP;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASM,sBAAT,CAAiCC,KAAjC,EAA6D;AAAA,MAArBC,aAAqB,uEAAL,EAAK;AACnE,MAAIf,MAAJ;AAEA,QAAMgB,wBAAwB,GAC7BF,KAAK,CAACG,IAAN,KAAe,oBAAf,KACEH,KAAK,CAACN,UAAN,CAAiBD,EAAjB,IAAuBO,KAAK,CAACN,UAAN,CAAiBL,QAD1C,CADD;;AAIA,MAAKa,wBAAL,EAAgC;AAAA;;AAC/BhB,IAAAA,MAAM,GAAG,EACR,GAAGe,aADK;AAERR,MAAAA,EAAE,0BAAEO,KAAK,CAACN,UAAN,CAAiBD,EAAnB,uEAAyBQ,aAAa,CAACR,EAFjC;AAGRN,MAAAA,OAAO,2BAAEa,KAAK,CAACN,UAAN,CAAiBI,MAAnB,yEAA6BG,aAAa,CAACd,OAH1C;AAIRE,MAAAA,QAAQ,2BAAEW,KAAK,CAACN,UAAN,CAAiBL,QAAnB,yEAA+BY,aAAa,CAACZ;AAJ7C,KAAT;AAMA,GAPD,MAOO;AACNH,IAAAA,MAAM,GAAG,EACR,GAAGe,aADK;AAERd,MAAAA,OAAO,EAAE,OAFD;AAGRE,MAAAA,QAAQ,EAAE;AACTC,QAAAA,GAAG,EAAE;AACJC,UAAAA,OAAO,EAAE,uBAAWS,KAAX;AADL;AADI;AAHF,KAAT;AASA,GAxBkE,CA0BnE;;;AACA,SAAOd,MAAM,CAACkB,QAAd;AACA,SAAOlB,MAAM,CAACmB,aAAd;AAEA,SAAOnB,MAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createBlock, parse, serialize } from '@wordpress/blocks';\nimport { addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Converts a widget entity record into a block.\n *\n * @param {Object} widget The widget entity record.\n * @return {Object} a block (converted from the entity record).\n */\nexport function transformWidgetToBlock( widget ) {\n\tif ( widget.id_base === 'block' ) {\n\t\tconst parsedBlocks = parse( widget.instance.raw.content );\n\t\tif ( ! parsedBlocks.length ) {\n\t\t\treturn addWidgetIdToBlock(\n\t\t\t\tcreateBlock( 'core/paragraph', {}, [] ),\n\t\t\t\twidget.id\n\t\t\t);\n\t\t}\n\t\treturn addWidgetIdToBlock( parsedBlocks[ 0 ], widget.id );\n\t}\n\n\tlet attributes;\n\tif ( widget._embedded.about[ 0 ].is_multi ) {\n\t\tattributes = {\n\t\t\tidBase: widget.id_base,\n\t\t\tinstance: widget.instance,\n\t\t};\n\t} else {\n\t\tattributes = {\n\t\t\tid: widget.id,\n\t\t};\n\t}\n\n\treturn addWidgetIdToBlock(\n\t\tcreateBlock( 'core/legacy-widget', attributes, [] ),\n\t\twidget.id\n\t);\n}\n\n/**\n * Converts a block to a widget entity record.\n *\n * @param {Object} block The block.\n * @param {Object?} relatedWidget A related widget entity record from the API (optional).\n * @return {Object} the widget object (converted from block).\n */\nexport function transformBlockToWidget( block, relatedWidget = {} ) {\n\tlet widget;\n\n\tconst isValidLegacyWidgetBlock =\n\t\tblock.name === 'core/legacy-widget' &&\n\t\t( block.attributes.id || block.attributes.instance );\n\n\tif ( isValidLegacyWidgetBlock ) {\n\t\twidget = {\n\t\t\t...relatedWidget,\n\t\t\tid: block.attributes.id ?? relatedWidget.id,\n\t\t\tid_base: block.attributes.idBase ?? relatedWidget.id_base,\n\t\t\tinstance: block.attributes.instance ?? relatedWidget.instance,\n\t\t};\n\t} else {\n\t\twidget = {\n\t\t\t...relatedWidget,\n\t\t\tid_base: 'block',\n\t\t\tinstance: {\n\t\t\t\traw: {\n\t\t\t\t\tcontent: serialize( block ),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\t// Delete read-only properties.\n\tdelete widget.rendered;\n\tdelete widget.rendered_form;\n\n\treturn widget;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/store/transformers.js"],"names":["transformWidgetToBlock","widget","id_base","parsedBlocks","instance","raw","content","__unstableSkipAutop","length","id","attributes","_embedded","about","is_multi","idBase","transformBlockToWidget","block","relatedWidget","isValidLegacyWidgetBlock","name","rendered","rendered_form"],"mappings":";;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,sBAAT,CAAiCC,MAAjC,EAA0C;AAChD,MAAKA,MAAM,CAACC,OAAP,KAAmB,OAAxB,EAAkC;AACjC,UAAMC,YAAY,GAAG,mBAAOF,MAAM,CAACG,QAAP,CAAgBC,GAAhB,CAAoBC,OAA3B,EAAoC;AACxDC,MAAAA,mBAAmB,EAAE;AADmC,KAApC,CAArB;;AAGA,QAAK,CAAEJ,YAAY,CAACK,MAApB,EAA6B;AAC5B,aAAO,iCACN,yBAAa,gBAAb,EAA+B,EAA/B,EAAmC,EAAnC,CADM,EAENP,MAAM,CAACQ,EAFD,CAAP;AAIA;;AACD,WAAO,iCAAoBN,YAAY,CAAE,CAAF,CAAhC,EAAuCF,MAAM,CAACQ,EAA9C,CAAP;AACA;;AAED,MAAIC,UAAJ;;AACA,MAAKT,MAAM,CAACU,SAAP,CAAiBC,KAAjB,CAAwB,CAAxB,EAA4BC,QAAjC,EAA4C;AAC3CH,IAAAA,UAAU,GAAG;AACZI,MAAAA,MAAM,EAAEb,MAAM,CAACC,OADH;AAEZE,MAAAA,QAAQ,EAAEH,MAAM,CAACG;AAFL,KAAb;AAIA,GALD,MAKO;AACNM,IAAAA,UAAU,GAAG;AACZD,MAAAA,EAAE,EAAER,MAAM,CAACQ;AADC,KAAb;AAGA;;AAED,SAAO,iCACN,yBAAa,oBAAb,EAAmCC,UAAnC,EAA+C,EAA/C,CADM,EAENT,MAAM,CAACQ,EAFD,CAAP;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASM,sBAAT,CAAiCC,KAAjC,EAA6D;AAAA,MAArBC,aAAqB,uEAAL,EAAK;AACnE,MAAIhB,MAAJ;AAEA,QAAMiB,wBAAwB,GAC7BF,KAAK,CAACG,IAAN,KAAe,oBAAf,KACEH,KAAK,CAACN,UAAN,CAAiBD,EAAjB,IAAuBO,KAAK,CAACN,UAAN,CAAiBN,QAD1C,CADD;;AAIA,MAAKc,wBAAL,EAAgC;AAAA;;AAC/BjB,IAAAA,MAAM,GAAG,EACR,GAAGgB,aADK;AAERR,MAAAA,EAAE,0BAAEO,KAAK,CAACN,UAAN,CAAiBD,EAAnB,uEAAyBQ,aAAa,CAACR,EAFjC;AAGRP,MAAAA,OAAO,2BAAEc,KAAK,CAACN,UAAN,CAAiBI,MAAnB,yEAA6BG,aAAa,CAACf,OAH1C;AAIRE,MAAAA,QAAQ,2BAAEY,KAAK,CAACN,UAAN,CAAiBN,QAAnB,yEAA+Ba,aAAa,CAACb;AAJ7C,KAAT;AAMA,GAPD,MAOO;AACNH,IAAAA,MAAM,GAAG,EACR,GAAGgB,aADK;AAERf,MAAAA,OAAO,EAAE,OAFD;AAGRE,MAAAA,QAAQ,EAAE;AACTC,QAAAA,GAAG,EAAE;AACJC,UAAAA,OAAO,EAAE,uBAAWU,KAAX;AADL;AADI;AAHF,KAAT;AASA,GAxBkE,CA0BnE;;;AACA,SAAOf,MAAM,CAACmB,QAAd;AACA,SAAOnB,MAAM,CAACoB,aAAd;AAEA,SAAOpB,MAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createBlock, parse, serialize } from '@wordpress/blocks';\nimport { addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Converts a widget entity record into a block.\n *\n * @param {Object} widget The widget entity record.\n * @return {Object} a block (converted from the entity record).\n */\nexport function transformWidgetToBlock( widget ) {\n\tif ( widget.id_base === 'block' ) {\n\t\tconst parsedBlocks = parse( widget.instance.raw.content, {\n\t\t\t__unstableSkipAutop: true,\n\t\t} );\n\t\tif ( ! parsedBlocks.length ) {\n\t\t\treturn addWidgetIdToBlock(\n\t\t\t\tcreateBlock( 'core/paragraph', {}, [] ),\n\t\t\t\twidget.id\n\t\t\t);\n\t\t}\n\t\treturn addWidgetIdToBlock( parsedBlocks[ 0 ], widget.id );\n\t}\n\n\tlet attributes;\n\tif ( widget._embedded.about[ 0 ].is_multi ) {\n\t\tattributes = {\n\t\t\tidBase: widget.id_base,\n\t\t\tinstance: widget.instance,\n\t\t};\n\t} else {\n\t\tattributes = {\n\t\t\tid: widget.id,\n\t\t};\n\t}\n\n\treturn addWidgetIdToBlock(\n\t\tcreateBlock( 'core/legacy-widget', attributes, [] ),\n\t\twidget.id\n\t);\n}\n\n/**\n * Converts a block to a widget entity record.\n *\n * @param {Object} block The block.\n * @param {Object?} relatedWidget A related widget entity record from the API (optional).\n * @return {Object} the widget object (converted from block).\n */\nexport function transformBlockToWidget( block, relatedWidget = {} ) {\n\tlet widget;\n\n\tconst isValidLegacyWidgetBlock =\n\t\tblock.name === 'core/legacy-widget' &&\n\t\t( block.attributes.id || block.attributes.instance );\n\n\tif ( isValidLegacyWidgetBlock ) {\n\t\twidget = {\n\t\t\t...relatedWidget,\n\t\t\tid: block.attributes.id ?? relatedWidget.id,\n\t\t\tid_base: block.attributes.idBase ?? relatedWidget.id_base,\n\t\t\tinstance: block.attributes.instance ?? relatedWidget.instance,\n\t\t};\n\t} else {\n\t\twidget = {\n\t\t\t...relatedWidget,\n\t\t\tid_base: 'block',\n\t\t\tinstance: {\n\t\t\t\traw: {\n\t\t\t\t\tcontent: serialize( block ),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\t// Delete read-only properties.\n\tdelete widget.rendered;\n\tdelete widget.rendered_form;\n\n\treturn widget;\n}\n"]}
@@ -8,6 +8,7 @@ import { __ } from '@wordpress/i18n';
8
8
  import { Button } from '@wordpress/components';
9
9
  import { Warning } from '@wordpress/block-editor';
10
10
  import { useCopyToClipboard } from '@wordpress/compose';
11
+ import { doAction } from '@wordpress/hooks';
11
12
 
12
13
  function CopyButton(_ref) {
13
14
  let {
@@ -34,6 +35,7 @@ export default class ErrorBoundary extends Component {
34
35
  this.setState({
35
36
  error
36
37
  });
38
+ doAction('editor.ErrorBoundary.errorLogged', error);
37
39
  }
38
40
 
39
41
  reboot() {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/components/error-boundary/index.js"],"names":["Component","__","Button","Warning","useCopyToClipboard","CopyButton","text","children","ref","ErrorBoundary","constructor","arguments","reboot","bind","state","error","componentDidCatch","setState","props","onError","render","stack"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,oBAA1B;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,OAAT,QAAwB,yBAAxB;AACA,SAASC,kBAAT,QAAmC,oBAAnC;;AAEA,SAASC,UAAT,OAA0C;AAAA,MAArB;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,GAAqB;AACzC,QAAMC,GAAG,GAAGJ,kBAAkB,CAAEE,IAAF,CAA9B;AACA,SACC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,WAAhB;AAA4B,IAAA,GAAG,EAAGE;AAAlC,KACGD,QADH,CADD;AAKA;;AAED,eAAe,MAAME,aAAN,SAA4BT,SAA5B,CAAsC;AACpDU,EAAAA,WAAW,GAAG;AACb,UAAO,GAAGC,SAAV;AAEA,SAAKC,MAAL,GAAc,KAAKA,MAAL,CAAYC,IAAZ,CAAkB,IAAlB,CAAd;AAEA,SAAKC,KAAL,GAAa;AACZC,MAAAA,KAAK,EAAE;AADK,KAAb;AAGA;;AAEDC,EAAAA,iBAAiB,CAAED,KAAF,EAAU;AAC1B,SAAKE,QAAL,CAAe;AAAEF,MAAAA;AAAF,KAAf;AACA;;AAEDH,EAAAA,MAAM,GAAG;AACR,SAAKM,KAAL,CAAWC,OAAX;AACA;;AAEDC,EAAAA,MAAM,GAAG;AACR,UAAM;AAAEL,MAAAA;AAAF,QAAY,KAAKD,KAAvB;;AACA,QAAK,CAAEC,KAAP,EAAe;AACd,aAAO,KAAKG,KAAL,CAAWX,QAAlB;AACA;;AAED,WACC,cAAC,OAAD;AACC,MAAA,SAAS,EAAC,6BADX;AAEC,MAAA,OAAO,EAAG,CACT,cAAC,MAAD;AACC,QAAA,GAAG,EAAC,UADL;AAEC,QAAA,OAAO,EAAG,KAAKK,MAFhB;AAGC,QAAA,OAAO,EAAC;AAHT,SAKGX,EAAE,CAAE,kBAAF,CALL,CADS,EAQT,cAAC,UAAD;AAAY,QAAA,GAAG,EAAC,YAAhB;AAA6B,QAAA,IAAI,EAAGc,KAAK,CAACM;AAA1C,SACGpB,EAAE,CAAE,YAAF,CADL,CARS;AAFX,OAeGA,EAAE,CAAE,iDAAF,CAfL,CADD;AAmBA;;AA5CmD","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { Warning } from '@wordpress/block-editor';\nimport { useCopyToClipboard } from '@wordpress/compose';\n\nfunction CopyButton( { text, children } ) {\n\tconst ref = useCopyToClipboard( text );\n\treturn (\n\t\t<Button variant=\"secondary\" ref={ ref }>\n\t\t\t{ children }\n\t\t</Button>\n\t);\n}\n\nexport default class ErrorBoundary extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.reboot = this.reboot.bind( this );\n\n\t\tthis.state = {\n\t\t\terror: null,\n\t\t};\n\t}\n\n\tcomponentDidCatch( error ) {\n\t\tthis.setState( { error } );\n\t}\n\n\treboot() {\n\t\tthis.props.onError();\n\t}\n\n\trender() {\n\t\tconst { error } = this.state;\n\t\tif ( ! error ) {\n\t\t\treturn this.props.children;\n\t\t}\n\n\t\treturn (\n\t\t\t<Warning\n\t\t\t\tclassName=\"edit-widgets-error-boundary\"\n\t\t\t\tactions={ [\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey=\"recovery\"\n\t\t\t\t\t\tonClick={ this.reboot }\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Attempt Recovery' ) }\n\t\t\t\t\t</Button>,\n\t\t\t\t\t<CopyButton key=\"copy-error\" text={ error.stack }>\n\t\t\t\t\t\t{ __( 'Copy Error' ) }\n\t\t\t\t\t</CopyButton>,\n\t\t\t\t] }\n\t\t\t>\n\t\t\t\t{ __( 'The editor has encountered an unexpected error.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/components/error-boundary/index.js"],"names":["Component","__","Button","Warning","useCopyToClipboard","doAction","CopyButton","text","children","ref","ErrorBoundary","constructor","arguments","reboot","bind","state","error","componentDidCatch","setState","props","onError","render","stack"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,oBAA1B;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,OAAT,QAAwB,yBAAxB;AACA,SAASC,kBAAT,QAAmC,oBAAnC;AACA,SAASC,QAAT,QAAyB,kBAAzB;;AAEA,SAASC,UAAT,OAA0C;AAAA,MAArB;AAAEC,IAAAA,IAAF;AAAQC,IAAAA;AAAR,GAAqB;AACzC,QAAMC,GAAG,GAAGL,kBAAkB,CAAEG,IAAF,CAA9B;AACA,SACC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,WAAhB;AAA4B,IAAA,GAAG,EAAGE;AAAlC,KACGD,QADH,CADD;AAKA;;AAED,eAAe,MAAME,aAAN,SAA4BV,SAA5B,CAAsC;AACpDW,EAAAA,WAAW,GAAG;AACb,UAAO,GAAGC,SAAV;AAEA,SAAKC,MAAL,GAAc,KAAKA,MAAL,CAAYC,IAAZ,CAAkB,IAAlB,CAAd;AAEA,SAAKC,KAAL,GAAa;AACZC,MAAAA,KAAK,EAAE;AADK,KAAb;AAGA;;AAEDC,EAAAA,iBAAiB,CAAED,KAAF,EAAU;AAC1B,SAAKE,QAAL,CAAe;AAAEF,MAAAA;AAAF,KAAf;AAEAX,IAAAA,QAAQ,CAAE,kCAAF,EAAsCW,KAAtC,CAAR;AACA;;AAEDH,EAAAA,MAAM,GAAG;AACR,SAAKM,KAAL,CAAWC,OAAX;AACA;;AAEDC,EAAAA,MAAM,GAAG;AACR,UAAM;AAAEL,MAAAA;AAAF,QAAY,KAAKD,KAAvB;;AACA,QAAK,CAAEC,KAAP,EAAe;AACd,aAAO,KAAKG,KAAL,CAAWX,QAAlB;AACA;;AAED,WACC,cAAC,OAAD;AACC,MAAA,SAAS,EAAC,6BADX;AAEC,MAAA,OAAO,EAAG,CACT,cAAC,MAAD;AACC,QAAA,GAAG,EAAC,UADL;AAEC,QAAA,OAAO,EAAG,KAAKK,MAFhB;AAGC,QAAA,OAAO,EAAC;AAHT,SAKGZ,EAAE,CAAE,kBAAF,CALL,CADS,EAQT,cAAC,UAAD;AAAY,QAAA,GAAG,EAAC,YAAhB;AAA6B,QAAA,IAAI,EAAGe,KAAK,CAACM;AAA1C,SACGrB,EAAE,CAAE,YAAF,CADL,CARS;AAFX,OAeGA,EAAE,CAAE,iDAAF,CAfL,CADD;AAmBA;;AA9CmD","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { Component } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { Button } from '@wordpress/components';\nimport { Warning } from '@wordpress/block-editor';\nimport { useCopyToClipboard } from '@wordpress/compose';\nimport { doAction } from '@wordpress/hooks';\n\nfunction CopyButton( { text, children } ) {\n\tconst ref = useCopyToClipboard( text );\n\treturn (\n\t\t<Button variant=\"secondary\" ref={ ref }>\n\t\t\t{ children }\n\t\t</Button>\n\t);\n}\n\nexport default class ErrorBoundary extends Component {\n\tconstructor() {\n\t\tsuper( ...arguments );\n\n\t\tthis.reboot = this.reboot.bind( this );\n\n\t\tthis.state = {\n\t\t\terror: null,\n\t\t};\n\t}\n\n\tcomponentDidCatch( error ) {\n\t\tthis.setState( { error } );\n\n\t\tdoAction( 'editor.ErrorBoundary.errorLogged', error );\n\t}\n\n\treboot() {\n\t\tthis.props.onError();\n\t}\n\n\trender() {\n\t\tconst { error } = this.state;\n\t\tif ( ! error ) {\n\t\t\treturn this.props.children;\n\t\t}\n\n\t\treturn (\n\t\t\t<Warning\n\t\t\t\tclassName=\"edit-widgets-error-boundary\"\n\t\t\t\tactions={ [\n\t\t\t\t\t<Button\n\t\t\t\t\t\tkey=\"recovery\"\n\t\t\t\t\t\tonClick={ this.reboot }\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ __( 'Attempt Recovery' ) }\n\t\t\t\t\t</Button>,\n\t\t\t\t\t<CopyButton key=\"copy-error\" text={ error.stack }>\n\t\t\t\t\t\t{ __( 'Copy Error' ) }\n\t\t\t\t\t</CopyButton>,\n\t\t\t\t] }\n\t\t\t>\n\t\t\t\t{ __( 'The editor has encountered an unexpected error.' ) }\n\t\t\t</Warning>\n\t\t);\n\t}\n}\n"]}
@@ -7,9 +7,10 @@ import { __, isRTL } from '@wordpress/i18n';
7
7
  import { ToolbarButton } from '@wordpress/components';
8
8
  import { useSelect, useDispatch } from '@wordpress/data';
9
9
  import { redo as redoIcon, undo as undoIcon } from '@wordpress/icons';
10
- import { displayShortcut } from '@wordpress/keycodes';
10
+ import { displayShortcut, isAppleOS } from '@wordpress/keycodes';
11
11
  import { store as coreStore } from '@wordpress/core-data';
12
12
  export default function RedoButton() {
13
+ const shortcut = isAppleOS() ? displayShortcut.primaryShift('z') : displayShortcut.primary('y');
13
14
  const hasRedo = useSelect(select => select(coreStore).hasRedo(), []);
14
15
  const {
15
16
  redo
@@ -17,7 +18,7 @@ export default function RedoButton() {
17
18
  return createElement(ToolbarButton, {
18
19
  icon: !isRTL() ? redoIcon : undoIcon,
19
20
  label: __('Redo'),
20
- shortcut: displayShortcut.primaryShift('z') // If there are no undo levels we don't want to actually disable this
21
+ shortcut: shortcut // If there are no undo levels we don't want to actually disable this
21
22
  // button, because it will remove focus for keyboard users.
22
23
  // See: https://github.com/WordPress/gutenberg/issues/3486
23
24
  ,
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/components/header/undo-redo/redo.js"],"names":["__","isRTL","ToolbarButton","useSelect","useDispatch","redo","redoIcon","undo","undoIcon","displayShortcut","store","coreStore","RedoButton","hasRedo","select","primaryShift","undefined"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,EAAaC,KAAb,QAA0B,iBAA1B;AACA,SAASC,aAAT,QAA8B,uBAA9B;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,IAAI,IAAIC,QAAjB,EAA2BC,IAAI,IAAIC,QAAnC,QAAmD,kBAAnD;AACA,SAASC,eAAT,QAAgC,qBAAhC;AACA,SAASC,KAAK,IAAIC,SAAlB,QAAmC,sBAAnC;AAEA,eAAe,SAASC,UAAT,GAAsB;AACpC,QAAMC,OAAO,GAAGV,SAAS,CACtBW,MAAF,IAAcA,MAAM,CAAEH,SAAF,CAAN,CAAoBE,OAApB,EADU,EAExB,EAFwB,CAAzB;AAIA,QAAM;AAAER,IAAAA;AAAF,MAAWD,WAAW,CAAEO,SAAF,CAA5B;AACA,SACC,cAAC,aAAD;AACC,IAAA,IAAI,EAAG,CAAEV,KAAK,EAAP,GAAYK,QAAZ,GAAuBE,QAD/B;AAEC,IAAA,KAAK,EAAGR,EAAE,CAAE,MAAF,CAFX;AAGC,IAAA,QAAQ,EAAGS,eAAe,CAACM,YAAhB,CAA8B,GAA9B,CAHZ,CAIC;AACA;AACA;AAND;AAOC,qBAAgB,CAAEF,OAPnB;AAQC,IAAA,OAAO,EAAGA,OAAO,GAAGR,IAAH,GAAUW;AAR5B,IADD;AAYA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { ToolbarButton } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { redo as redoIcon, undo as undoIcon } from '@wordpress/icons';\nimport { displayShortcut } from '@wordpress/keycodes';\nimport { store as coreStore } from '@wordpress/core-data';\n\nexport default function RedoButton() {\n\tconst hasRedo = useSelect(\n\t\t( select ) => select( coreStore ).hasRedo(),\n\t\t[]\n\t);\n\tconst { redo } = useDispatch( coreStore );\n\treturn (\n\t\t<ToolbarButton\n\t\t\ticon={ ! isRTL() ? redoIcon : undoIcon }\n\t\t\tlabel={ __( 'Redo' ) }\n\t\t\tshortcut={ displayShortcut.primaryShift( 'z' ) }\n\t\t\t// If there are no undo levels we don't want to actually disable this\n\t\t\t// button, because it will remove focus for keyboard users.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/3486\n\t\t\taria-disabled={ ! hasRedo }\n\t\t\tonClick={ hasRedo ? redo : undefined }\n\t\t/>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/components/header/undo-redo/redo.js"],"names":["__","isRTL","ToolbarButton","useSelect","useDispatch","redo","redoIcon","undo","undoIcon","displayShortcut","isAppleOS","store","coreStore","RedoButton","shortcut","primaryShift","primary","hasRedo","select","undefined"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,EAAaC,KAAb,QAA0B,iBAA1B;AACA,SAASC,aAAT,QAA8B,uBAA9B;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,IAAI,IAAIC,QAAjB,EAA2BC,IAAI,IAAIC,QAAnC,QAAmD,kBAAnD;AACA,SAASC,eAAT,EAA0BC,SAA1B,QAA2C,qBAA3C;AACA,SAASC,KAAK,IAAIC,SAAlB,QAAmC,sBAAnC;AAEA,eAAe,SAASC,UAAT,GAAsB;AACpC,QAAMC,QAAQ,GAAGJ,SAAS,KACvBD,eAAe,CAACM,YAAhB,CAA8B,GAA9B,CADuB,GAEvBN,eAAe,CAACO,OAAhB,CAAyB,GAAzB,CAFH;AAIA,QAAMC,OAAO,GAAGd,SAAS,CACtBe,MAAF,IAAcA,MAAM,CAAEN,SAAF,CAAN,CAAoBK,OAApB,EADU,EAExB,EAFwB,CAAzB;AAIA,QAAM;AAAEZ,IAAAA;AAAF,MAAWD,WAAW,CAAEQ,SAAF,CAA5B;AACA,SACC,cAAC,aAAD;AACC,IAAA,IAAI,EAAG,CAAEX,KAAK,EAAP,GAAYK,QAAZ,GAAuBE,QAD/B;AAEC,IAAA,KAAK,EAAGR,EAAE,CAAE,MAAF,CAFX;AAGC,IAAA,QAAQ,EAAGc,QAHZ,CAIC;AACA;AACA;AAND;AAOC,qBAAgB,CAAEG,OAPnB;AAQC,IAAA,OAAO,EAAGA,OAAO,GAAGZ,IAAH,GAAUc;AAR5B,IADD;AAYA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, isRTL } from '@wordpress/i18n';\nimport { ToolbarButton } from '@wordpress/components';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { redo as redoIcon, undo as undoIcon } from '@wordpress/icons';\nimport { displayShortcut, isAppleOS } from '@wordpress/keycodes';\nimport { store as coreStore } from '@wordpress/core-data';\n\nexport default function RedoButton() {\n\tconst shortcut = isAppleOS()\n\t\t? displayShortcut.primaryShift( 'z' )\n\t\t: displayShortcut.primary( 'y' );\n\n\tconst hasRedo = useSelect(\n\t\t( select ) => select( coreStore ).hasRedo(),\n\t\t[]\n\t);\n\tconst { redo } = useDispatch( coreStore );\n\treturn (\n\t\t<ToolbarButton\n\t\t\ticon={ ! isRTL() ? redoIcon : undoIcon }\n\t\t\tlabel={ __( 'Redo' ) }\n\t\t\tshortcut={ shortcut }\n\t\t\t// If there are no undo levels we don't want to actually disable this\n\t\t\t// button, because it will remove focus for keyboard users.\n\t\t\t// See: https://github.com/WordPress/gutenberg/issues/3486\n\t\t\taria-disabled={ ! hasRedo }\n\t\t\tonClick={ hasRedo ? redo : undefined }\n\t\t/>\n\t);\n}\n"]}
@@ -4,7 +4,6 @@ import { createElement } from "@wordpress/element";
4
4
  * External dependencies
5
5
  */
6
6
  import classnames from 'classnames';
7
- import { isString } from 'lodash';
8
7
  /**
9
8
  * WordPress dependencies
10
9
  */
@@ -38,7 +37,7 @@ const ShortcutList = _ref => {
38
37
  }, shortcuts.map((shortcut, index) => createElement("li", {
39
38
  className: "edit-widgets-keyboard-shortcut-help-modal__shortcut",
40
39
  key: index
41
- }, isString(shortcut) ? createElement(DynamicShortcut, {
40
+ }, typeof shortcut === 'string' ? createElement(DynamicShortcut, {
42
41
  name: shortcut
43
42
  }) : createElement(Shortcut, shortcut))))
44
43
  /* eslint-enable jsx-a11y/no-redundant-roles */
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/components/keyboard-shortcut-help-modal/index.js"],"names":["classnames","isString","Modal","__","useShortcut","store","keyboardShortcutsStore","useSelect","textFormattingShortcuts","Shortcut","DynamicShortcut","ShortcutList","shortcuts","map","shortcut","index","ShortcutSection","title","className","ShortcutCategorySection","categoryName","additionalShortcuts","categoryShortcuts","select","getCategoryShortcuts","concat","KeyboardShortcutHelpModal","isModalActive","toggleModal","bindGlobal","keyCombination","character","description","ariaLabel"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\nimport { isString } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { Modal } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseShortcut,\n\tstore as keyboardShortcutsStore,\n} from '@wordpress/keyboard-shortcuts';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { textFormattingShortcuts } from './config';\nimport Shortcut from './shortcut';\nimport DynamicShortcut from './dynamic-shortcut';\n\nconst ShortcutList = ( { shortcuts } ) => (\n\t/*\n\t * Disable reason: The `list` ARIA role is redundant but\n\t * Safari+VoiceOver won't announce the list otherwise.\n\t */\n\t/* eslint-disable jsx-a11y/no-redundant-roles */\n\t<ul\n\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__shortcut-list\"\n\t\trole=\"list\"\n\t>\n\t\t{ shortcuts.map( ( shortcut, index ) => (\n\t\t\t<li\n\t\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__shortcut\"\n\t\t\t\tkey={ index }\n\t\t\t>\n\t\t\t\t{ isString( shortcut ) ? (\n\t\t\t\t\t<DynamicShortcut name={ shortcut } />\n\t\t\t\t) : (\n\t\t\t\t\t<Shortcut { ...shortcut } />\n\t\t\t\t) }\n\t\t\t</li>\n\t\t) ) }\n\t</ul>\n\t/* eslint-enable jsx-a11y/no-redundant-roles */\n);\n\nconst ShortcutSection = ( { title, shortcuts, className } ) => (\n\t<section\n\t\tclassName={ classnames(\n\t\t\t'edit-widgets-keyboard-shortcut-help-modal__section',\n\t\t\tclassName\n\t\t) }\n\t>\n\t\t{ !! title && (\n\t\t\t<h2 className=\"edit-widgets-keyboard-shortcut-help-modal__section-title\">\n\t\t\t\t{ title }\n\t\t\t</h2>\n\t\t) }\n\t\t<ShortcutList shortcuts={ shortcuts } />\n\t</section>\n);\n\nconst ShortcutCategorySection = ( {\n\ttitle,\n\tcategoryName,\n\tadditionalShortcuts = [],\n} ) => {\n\tconst categoryShortcuts = useSelect(\n\t\t( select ) => {\n\t\t\treturn select( keyboardShortcutsStore ).getCategoryShortcuts(\n\t\t\t\tcategoryName\n\t\t\t);\n\t\t},\n\t\t[ categoryName ]\n\t);\n\n\treturn (\n\t\t<ShortcutSection\n\t\t\ttitle={ title }\n\t\t\tshortcuts={ categoryShortcuts.concat( additionalShortcuts ) }\n\t\t/>\n\t);\n};\n\nexport default function KeyboardShortcutHelpModal( {\n\tisModalActive,\n\ttoggleModal,\n} ) {\n\tuseShortcut( 'core/edit-widgets/keyboard-shortcuts', toggleModal, {\n\t\tbindGlobal: true,\n\t} );\n\n\tif ( ! isModalActive ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal\"\n\t\t\ttitle={ __( 'Keyboard shortcuts' ) }\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ toggleModal }\n\t\t>\n\t\t\t<ShortcutSection\n\t\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__main-shortcuts\"\n\t\t\t\tshortcuts={ [ 'core/edit-widgets/keyboard-shortcuts' ] }\n\t\t\t/>\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Global shortcuts' ) }\n\t\t\t\tcategoryName=\"global\"\n\t\t\t/>\n\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Selection shortcuts' ) }\n\t\t\t\tcategoryName=\"selection\"\n\t\t\t/>\n\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Block shortcuts' ) }\n\t\t\t\tcategoryName=\"block\"\n\t\t\t\tadditionalShortcuts={ [\n\t\t\t\t\t{\n\t\t\t\t\t\tkeyCombination: { character: '/' },\n\t\t\t\t\t\tdescription: __(\n\t\t\t\t\t\t\t'Change the block type after adding a new paragraph.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\t/* translators: The forward-slash character. e.g. '/'. */\n\t\t\t\t\t\tariaLabel: __( 'Forward-slash' ),\n\t\t\t\t\t},\n\t\t\t\t] }\n\t\t\t/>\n\t\t\t<ShortcutSection\n\t\t\t\ttitle={ __( 'Text formatting' ) }\n\t\t\t\tshortcuts={ textFormattingShortcuts }\n\t\t\t/>\n\t\t</Modal>\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/components/keyboard-shortcut-help-modal/index.js"],"names":["classnames","Modal","__","useShortcut","store","keyboardShortcutsStore","useSelect","textFormattingShortcuts","Shortcut","DynamicShortcut","ShortcutList","shortcuts","map","shortcut","index","ShortcutSection","title","className","ShortcutCategorySection","categoryName","additionalShortcuts","categoryShortcuts","select","getCategoryShortcuts","concat","KeyboardShortcutHelpModal","isModalActive","toggleModal","bindGlobal","keyCombination","character","description","ariaLabel"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\n/**\n * WordPress dependencies\n */\nimport { Modal } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport {\n\tuseShortcut,\n\tstore as keyboardShortcutsStore,\n} from '@wordpress/keyboard-shortcuts';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { textFormattingShortcuts } from './config';\nimport Shortcut from './shortcut';\nimport DynamicShortcut from './dynamic-shortcut';\n\nconst ShortcutList = ( { shortcuts } ) => (\n\t/*\n\t * Disable reason: The `list` ARIA role is redundant but\n\t * Safari+VoiceOver won't announce the list otherwise.\n\t */\n\t/* eslint-disable jsx-a11y/no-redundant-roles */\n\t<ul\n\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__shortcut-list\"\n\t\trole=\"list\"\n\t>\n\t\t{ shortcuts.map( ( shortcut, index ) => (\n\t\t\t<li\n\t\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__shortcut\"\n\t\t\t\tkey={ index }\n\t\t\t>\n\t\t\t\t{ typeof shortcut === 'string' ? (\n\t\t\t\t\t<DynamicShortcut name={ shortcut } />\n\t\t\t\t) : (\n\t\t\t\t\t<Shortcut { ...shortcut } />\n\t\t\t\t) }\n\t\t\t</li>\n\t\t) ) }\n\t</ul>\n\t/* eslint-enable jsx-a11y/no-redundant-roles */\n);\n\nconst ShortcutSection = ( { title, shortcuts, className } ) => (\n\t<section\n\t\tclassName={ classnames(\n\t\t\t'edit-widgets-keyboard-shortcut-help-modal__section',\n\t\t\tclassName\n\t\t) }\n\t>\n\t\t{ !! title && (\n\t\t\t<h2 className=\"edit-widgets-keyboard-shortcut-help-modal__section-title\">\n\t\t\t\t{ title }\n\t\t\t</h2>\n\t\t) }\n\t\t<ShortcutList shortcuts={ shortcuts } />\n\t</section>\n);\n\nconst ShortcutCategorySection = ( {\n\ttitle,\n\tcategoryName,\n\tadditionalShortcuts = [],\n} ) => {\n\tconst categoryShortcuts = useSelect(\n\t\t( select ) => {\n\t\t\treturn select( keyboardShortcutsStore ).getCategoryShortcuts(\n\t\t\t\tcategoryName\n\t\t\t);\n\t\t},\n\t\t[ categoryName ]\n\t);\n\n\treturn (\n\t\t<ShortcutSection\n\t\t\ttitle={ title }\n\t\t\tshortcuts={ categoryShortcuts.concat( additionalShortcuts ) }\n\t\t/>\n\t);\n};\n\nexport default function KeyboardShortcutHelpModal( {\n\tisModalActive,\n\ttoggleModal,\n} ) {\n\tuseShortcut( 'core/edit-widgets/keyboard-shortcuts', toggleModal, {\n\t\tbindGlobal: true,\n\t} );\n\n\tif ( ! isModalActive ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Modal\n\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal\"\n\t\t\ttitle={ __( 'Keyboard shortcuts' ) }\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ toggleModal }\n\t\t>\n\t\t\t<ShortcutSection\n\t\t\t\tclassName=\"edit-widgets-keyboard-shortcut-help-modal__main-shortcuts\"\n\t\t\t\tshortcuts={ [ 'core/edit-widgets/keyboard-shortcuts' ] }\n\t\t\t/>\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Global shortcuts' ) }\n\t\t\t\tcategoryName=\"global\"\n\t\t\t/>\n\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Selection shortcuts' ) }\n\t\t\t\tcategoryName=\"selection\"\n\t\t\t/>\n\n\t\t\t<ShortcutCategorySection\n\t\t\t\ttitle={ __( 'Block shortcuts' ) }\n\t\t\t\tcategoryName=\"block\"\n\t\t\t\tadditionalShortcuts={ [\n\t\t\t\t\t{\n\t\t\t\t\t\tkeyCombination: { character: '/' },\n\t\t\t\t\t\tdescription: __(\n\t\t\t\t\t\t\t'Change the block type after adding a new paragraph.'\n\t\t\t\t\t\t),\n\t\t\t\t\t\t/* translators: The forward-slash character. e.g. '/'. */\n\t\t\t\t\t\tariaLabel: __( 'Forward-slash' ),\n\t\t\t\t\t},\n\t\t\t\t] }\n\t\t\t/>\n\t\t\t<ShortcutSection\n\t\t\t\ttitle={ __( 'Text formatting' ) }\n\t\t\t\tshortcuts={ textFormattingShortcuts }\n\t\t\t/>\n\t\t</Modal>\n\t);\n}\n"]}
@@ -373,7 +373,7 @@ export const moveBlockToWidgetArea = (clientId, widgetAreaId) => async _ref11 =>
373
373
  } = _ref12;
374
374
  return attributes.id === widgetAreaId;
375
375
  });
376
- const destinationRootClientId = destinationWidgetAreaBlock.clientId; // Get the index for moving to the end of the the destination widget area.
376
+ const destinationRootClientId = destinationWidgetAreaBlock.clientId; // Get the index for moving to the end of the destination widget area.
377
377
 
378
378
  const destinationInnerBlocksClientIds = registry.select(blockEditorStore).getBlockOrder(destinationRootClientId);
379
379
  const destinationIndex = destinationInnerBlocksClientIds.length; // Reveal the widget area, if it's not open.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/store/actions.js"],"names":["__","sprintf","store","noticesStore","interfaceStore","getWidgetIdFromBlock","coreStore","blockEditorStore","transformBlockToWidget","buildWidgetAreaPostId","buildWidgetAreasQuery","createStubPost","KIND","POST_TYPE","WIDGET_AREA_ENTITY_TYPE","STORE_NAME","editWidgetsStoreName","persistStubPost","id","blocks","registry","stubPost","dispatch","receiveEntityRecords","saveEditedWidgetAreas","select","editedWidgetAreas","getEditedWidgetAreas","length","saveWidgetAreas","createSuccessNotice","type","e","createErrorNotice","message","widgetAreas","widgetArea","saveWidgetArea","finishResolution","widgetAreaId","widgets","getWidgets","post","getEditedEntityRecord","areaWidgets","Object","values","filter","sidebar","usedReferenceWidgets","widgetsBlocks","block","attributes","name","includes","push","deletedWidgets","widget","widgetsNewArea","getWidgetAreaForWidgetId","batchMeta","batchTasks","sidebarWidgetsIds","i","widgetId","oldWidget","editEntityRecord","undoIgnore","hasEdits","hasEditsForEntityRecord","saveEditedEntityRecord","saveEntityRecord","position","clientId","deleteEntityRecord","force","records","__experimentalBatch","preservedRecords","record","hasOwnProperty","failedWidgetNames","__internalWidgetId","error","getLastEntitySaveError","Error","join","trySaveWidgetArea","undefined","throwOnError","setWidgetIdForClientId","setWidgetAreasOpenState","widgetAreasOpenState","setIsWidgetAreaOpen","isOpen","setIsInserterOpened","value","setIsListViewOpened","closeGeneralSidebar","disableComplementaryArea","moveBlockToWidgetArea","sourceRootClientId","getBlockRootClientId","getBlocks","destinationWidgetAreaBlock","find","destinationRootClientId","destinationInnerBlocksClientIds","getBlockOrder","destinationIndex","isDestinationWidgetAreaOpen","getIsWidgetAreaOpen","moveBlocksToPosition"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { transformBlockToWidget } from './transformers';\nimport {\n\tbuildWidgetAreaPostId,\n\tbuildWidgetAreasQuery,\n\tcreateStubPost,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Persists a stub post with given ID to core data store. The post is meant to be in-memory only and\n * shouldn't be saved via the API.\n *\n * @param {string} id Post ID.\n * @param {Array} blocks Blocks the post should consist of.\n * @return {Object} The post object.\n */\nexport const persistStubPost =\n\t( id, blocks ) =>\n\t( { registry } ) => {\n\t\tconst stubPost = createStubPost( id, blocks );\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tstubPost,\n\t\t\t\t{ id: stubPost.id },\n\t\t\t\tfalse\n\t\t\t);\n\t\treturn stubPost;\n\t};\n\n/**\n * Converts all the blocks from edited widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * Creates a snackbar notice on either success or error.\n *\n * @return {Function} An action creator.\n */\nexport const saveEditedWidgetAreas =\n\t() =>\n\tasync ( { select, dispatch, registry } ) => {\n\t\tconst editedWidgetAreas = select.getEditedWidgetAreas();\n\t\tif ( ! editedWidgetAreas?.length ) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait dispatch.saveWidgetAreas( editedWidgetAreas );\n\t\t\tregistry\n\t\t\t\t.dispatch( noticesStore )\n\t\t\t\t.createSuccessNotice( __( 'Widgets saved.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tregistry.dispatch( noticesStore ).createErrorNotice(\n\t\t\t\t/* translators: %s: The error message. */\n\t\t\t\tsprintf( __( 'There was an error. %s' ), e.message ),\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\t};\n\n/**\n * Converts all the blocks from specified widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {Object[]} widgetAreas Widget areas to save.\n * @return {Function} An action creator.\n */\nexport const saveWidgetAreas =\n\t( widgetAreas ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\ttry {\n\t\t\tfor ( const widgetArea of widgetAreas ) {\n\t\t\t\tawait dispatch.saveWidgetArea( widgetArea.id );\n\t\t\t}\n\t\t} finally {\n\t\t\t// saveEditedEntityRecord resets the resolution status, let's fix it manually.\n\t\t\tawait registry\n\t\t\t\t.dispatch( coreStore )\n\t\t\t\t.finishResolution(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tbuildWidgetAreasQuery()\n\t\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from a widget area specified by ID into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {string} widgetAreaId ID of the widget area to process.\n * @return {Function} An action creator.\n */\nexport const saveWidgetArea =\n\t( widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst widgets = select.getWidgets();\n\n\t\tconst post = registry\n\t\t\t.select( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetAreaId )\n\t\t\t);\n\n\t\t// Get all widgets from this area\n\t\tconst areaWidgets = Object.values( widgets ).filter(\n\t\t\t( { sidebar } ) => sidebar === widgetAreaId\n\t\t);\n\n\t\t// Remove all duplicate reference widget instances for legacy widgets.\n\t\t// Why? We filter out the widgets with duplicate IDs to prevent adding more than one instance of a widget\n\t\t// implemented using a function. WordPress doesn't support having more than one instance of these, if you try to\n\t\t// save multiple instances of these in different sidebars you will run into undefined behaviors.\n\t\tconst usedReferenceWidgets = [];\n\t\tconst widgetsBlocks = post.blocks.filter( ( block ) => {\n\t\t\tconst { id } = block.attributes;\n\n\t\t\tif ( block.name === 'core/legacy-widget' && id ) {\n\t\t\t\tif ( usedReferenceWidgets.includes( id ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tusedReferenceWidgets.push( id );\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t\t// Determine which widgets have been deleted. We can tell if a widget is\n\t\t// deleted and not just moved to a different area by looking to see if\n\t\t// getWidgetAreaForWidgetId() finds something.\n\t\tconst deletedWidgets = [];\n\t\tfor ( const widget of areaWidgets ) {\n\t\t\tconst widgetsNewArea = select.getWidgetAreaForWidgetId( widget.id );\n\t\t\tif ( ! widgetsNewArea ) {\n\t\t\t\tdeletedWidgets.push( widget );\n\t\t\t}\n\t\t}\n\n\t\tconst batchMeta = [];\n\t\tconst batchTasks = [];\n\t\tconst sidebarWidgetsIds = [];\n\t\tfor ( let i = 0; i < widgetsBlocks.length; i++ ) {\n\t\t\tconst block = widgetsBlocks[ i ];\n\t\t\tconst widgetId = getWidgetIdFromBlock( block );\n\t\t\tconst oldWidget = widgets[ widgetId ];\n\t\t\tconst widget = transformBlockToWidget( block, oldWidget );\n\n\t\t\t// We'll replace the null widgetId after save, but we track it here\n\t\t\t// since order is important.\n\t\t\tsidebarWidgetsIds.push( widgetId );\n\n\t\t\t// Check oldWidget as widgetId might refer to an ID which has been\n\t\t\t// deleted, e.g. if a deleted block is restored via undo after saving.\n\t\t\tif ( oldWidget ) {\n\t\t\t\t// Update an existing widget.\n\t\t\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'widget',\n\t\t\t\t\twidgetId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t},\n\t\t\t\t\t{ undoIgnore: true }\n\t\t\t\t);\n\n\t\t\t\tconst hasEdits = registry\n\t\t\t\t\t.select( coreStore )\n\t\t\t\t\t.hasEditsForEntityRecord( 'root', 'widget', widgetId );\n\n\t\t\t\tif ( ! hasEdits ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbatchTasks.push( ( { saveEditedEntityRecord } ) =>\n\t\t\t\t\tsaveEditedEntityRecord( 'root', 'widget', widgetId )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Create a new widget.\n\t\t\t\tbatchTasks.push( ( { saveEntityRecord } ) =>\n\t\t\t\t\tsaveEntityRecord( 'root', 'widget', {\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbatchMeta.push( {\n\t\t\t\tblock,\n\t\t\t\tposition: i,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} );\n\t\t}\n\t\tfor ( const widget of deletedWidgets ) {\n\t\t\tbatchTasks.push( ( { deleteEntityRecord } ) =>\n\t\t\t\tdeleteEntityRecord( 'root', 'widget', widget.id, {\n\t\t\t\t\tforce: true,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tconst records = await registry\n\t\t\t.dispatch( coreStore )\n\t\t\t.__experimentalBatch( batchTasks );\n\t\tconst preservedRecords = records.filter(\n\t\t\t( record ) => ! record.hasOwnProperty( 'deleted' )\n\t\t);\n\n\t\tconst failedWidgetNames = [];\n\n\t\tfor ( let i = 0; i < preservedRecords.length; i++ ) {\n\t\t\tconst widget = preservedRecords[ i ];\n\t\t\tconst { block, position } = batchMeta[ i ];\n\n\t\t\t// Set __internalWidgetId on the block. This will be persisted to the\n\t\t\t// store when we dispatch receiveEntityRecords( post ) below.\n\t\t\tpost.blocks[ position ].attributes.__internalWidgetId = widget.id;\n\n\t\t\tconst error = registry\n\t\t\t\t.select( coreStore )\n\t\t\t\t.getLastEntitySaveError( 'root', 'widget', widget.id );\n\t\t\tif ( error ) {\n\t\t\t\tfailedWidgetNames.push( block.attributes?.name || block?.name );\n\t\t\t}\n\n\t\t\tif ( ! sidebarWidgetsIds[ position ] ) {\n\t\t\t\tsidebarWidgetsIds[ position ] = widget.id;\n\t\t\t}\n\t\t}\n\n\t\tif ( failedWidgetNames.length ) {\n\t\t\tthrow new Error(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: List of widget names */\n\t\t\t\t\t__( 'Could not save the following widgets: %s.' ),\n\t\t\t\t\tfailedWidgetNames.join( ', ' )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\twidgetAreaId,\n\t\t\t{\n\t\t\t\twidgets: sidebarWidgetsIds,\n\t\t\t},\n\t\t\t{ undoIgnore: true }\n\t\t);\n\n\t\tdispatch( trySaveWidgetArea( widgetAreaId ) );\n\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords( KIND, POST_TYPE, post, undefined );\n\t};\n\nconst trySaveWidgetArea =\n\t( widgetAreaId ) =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.saveEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\twidgetAreaId,\n\t\t\t\t{\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t}\n\t\t\t);\n\t};\n\n/**\n * Sets the clientId stored for a particular widgetId.\n *\n * @param {number} clientId Client id.\n * @param {number} widgetId Widget id.\n *\n * @return {Object} Action.\n */\nexport function setWidgetIdForClientId( clientId, widgetId ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_ID_FOR_CLIENT_ID',\n\t\tclientId,\n\t\twidgetId,\n\t};\n}\n\n/**\n * Sets the open state of all the widget areas.\n *\n * @param {Object} widgetAreasOpenState The open states of all the widget areas.\n *\n * @return {Object} Action.\n */\nexport function setWidgetAreasOpenState( widgetAreasOpenState ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_AREAS_OPEN_STATE',\n\t\twidgetAreasOpenState,\n\t};\n}\n\n/**\n * Sets the open state of the widget area.\n *\n * @param {string} clientId The clientId of the widget area.\n * @param {boolean} isOpen Whether the widget area should be opened.\n *\n * @return {Object} Action.\n */\nexport function setIsWidgetAreaOpen( clientId, isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_WIDGET_AREA_OPEN',\n\t\tclientId,\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the inserter.\n *\n * @param {boolean|Object} value Whether the inserter should be\n * opened (true) or closed (false).\n * To specify an insertion point,\n * use an object.\n * @param {string} value.rootClientId The root client ID to insert at.\n * @param {number} value.insertionIndex The index to insert at.\n *\n * @return {Object} Action object.\n */\nexport function setIsInserterOpened( value ) {\n\treturn {\n\t\ttype: 'SET_IS_INSERTER_OPENED',\n\t\tvalue,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the list view.\n *\n * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.\n * @return {Object} Action object.\n */\nexport function setIsListViewOpened( isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_LIST_VIEW_OPENED',\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object signalling that the user closed the sidebar.\n *\n * @return {Object} Action creator.\n */\nexport const closeGeneralSidebar =\n\t() =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( interfaceStore )\n\t\t\t.disableComplementaryArea( editWidgetsStoreName );\n\t};\n\n/**\n * Action that handles moving a block between widget areas\n *\n * @param {string} clientId The clientId of the block to move.\n * @param {string} widgetAreaId The id of the widget area to move the block to.\n */\nexport const moveBlockToWidgetArea =\n\t( clientId, widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst sourceRootClientId = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockRootClientId( [ clientId ] );\n\n\t\t// Search the top level blocks (widget areas) for the one with the matching\n\t\t// id attribute. Makes the assumption that all top-level blocks are widget\n\t\t// areas.\n\t\tconst widgetAreas = registry.select( blockEditorStore ).getBlocks();\n\t\tconst destinationWidgetAreaBlock = widgetAreas.find(\n\t\t\t( { attributes } ) => attributes.id === widgetAreaId\n\t\t);\n\t\tconst destinationRootClientId = destinationWidgetAreaBlock.clientId;\n\n\t\t// Get the index for moving to the end of the the destination widget area.\n\t\tconst destinationInnerBlocksClientIds = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockOrder( destinationRootClientId );\n\t\tconst destinationIndex = destinationInnerBlocksClientIds.length;\n\n\t\t// Reveal the widget area, if it's not open.\n\t\tconst isDestinationWidgetAreaOpen = select.getIsWidgetAreaOpen(\n\t\t\tdestinationRootClientId\n\t\t);\n\n\t\tif ( ! isDestinationWidgetAreaOpen ) {\n\t\t\tdispatch.setIsWidgetAreaOpen( destinationRootClientId, true );\n\t\t}\n\n\t\t// Move the block.\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.moveBlocksToPosition(\n\t\t\t\t[ clientId ],\n\t\t\t\tsourceRootClientId,\n\t\t\t\tdestinationRootClientId,\n\t\t\t\tdestinationIndex\n\t\t\t);\n\t};\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/store/actions.js"],"names":["__","sprintf","store","noticesStore","interfaceStore","getWidgetIdFromBlock","coreStore","blockEditorStore","transformBlockToWidget","buildWidgetAreaPostId","buildWidgetAreasQuery","createStubPost","KIND","POST_TYPE","WIDGET_AREA_ENTITY_TYPE","STORE_NAME","editWidgetsStoreName","persistStubPost","id","blocks","registry","stubPost","dispatch","receiveEntityRecords","saveEditedWidgetAreas","select","editedWidgetAreas","getEditedWidgetAreas","length","saveWidgetAreas","createSuccessNotice","type","e","createErrorNotice","message","widgetAreas","widgetArea","saveWidgetArea","finishResolution","widgetAreaId","widgets","getWidgets","post","getEditedEntityRecord","areaWidgets","Object","values","filter","sidebar","usedReferenceWidgets","widgetsBlocks","block","attributes","name","includes","push","deletedWidgets","widget","widgetsNewArea","getWidgetAreaForWidgetId","batchMeta","batchTasks","sidebarWidgetsIds","i","widgetId","oldWidget","editEntityRecord","undoIgnore","hasEdits","hasEditsForEntityRecord","saveEditedEntityRecord","saveEntityRecord","position","clientId","deleteEntityRecord","force","records","__experimentalBatch","preservedRecords","record","hasOwnProperty","failedWidgetNames","__internalWidgetId","error","getLastEntitySaveError","Error","join","trySaveWidgetArea","undefined","throwOnError","setWidgetIdForClientId","setWidgetAreasOpenState","widgetAreasOpenState","setIsWidgetAreaOpen","isOpen","setIsInserterOpened","value","setIsListViewOpened","closeGeneralSidebar","disableComplementaryArea","moveBlockToWidgetArea","sourceRootClientId","getBlockRootClientId","getBlocks","destinationWidgetAreaBlock","find","destinationRootClientId","destinationInnerBlocksClientIds","getBlockOrder","destinationIndex","isDestinationWidgetAreaOpen","getIsWidgetAreaOpen","moveBlocksToPosition"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { store as noticesStore } from '@wordpress/notices';\nimport { store as interfaceStore } from '@wordpress/interface';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport { transformBlockToWidget } from './transformers';\nimport {\n\tbuildWidgetAreaPostId,\n\tbuildWidgetAreasQuery,\n\tcreateStubPost,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Persists a stub post with given ID to core data store. The post is meant to be in-memory only and\n * shouldn't be saved via the API.\n *\n * @param {string} id Post ID.\n * @param {Array} blocks Blocks the post should consist of.\n * @return {Object} The post object.\n */\nexport const persistStubPost =\n\t( id, blocks ) =>\n\t( { registry } ) => {\n\t\tconst stubPost = createStubPost( id, blocks );\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tstubPost,\n\t\t\t\t{ id: stubPost.id },\n\t\t\t\tfalse\n\t\t\t);\n\t\treturn stubPost;\n\t};\n\n/**\n * Converts all the blocks from edited widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * Creates a snackbar notice on either success or error.\n *\n * @return {Function} An action creator.\n */\nexport const saveEditedWidgetAreas =\n\t() =>\n\tasync ( { select, dispatch, registry } ) => {\n\t\tconst editedWidgetAreas = select.getEditedWidgetAreas();\n\t\tif ( ! editedWidgetAreas?.length ) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait dispatch.saveWidgetAreas( editedWidgetAreas );\n\t\t\tregistry\n\t\t\t\t.dispatch( noticesStore )\n\t\t\t\t.createSuccessNotice( __( 'Widgets saved.' ), {\n\t\t\t\t\ttype: 'snackbar',\n\t\t\t\t} );\n\t\t} catch ( e ) {\n\t\t\tregistry.dispatch( noticesStore ).createErrorNotice(\n\t\t\t\t/* translators: %s: The error message. */\n\t\t\t\tsprintf( __( 'There was an error. %s' ), e.message ),\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\t};\n\n/**\n * Converts all the blocks from specified widget areas into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {Object[]} widgetAreas Widget areas to save.\n * @return {Function} An action creator.\n */\nexport const saveWidgetAreas =\n\t( widgetAreas ) =>\n\tasync ( { dispatch, registry } ) => {\n\t\ttry {\n\t\t\tfor ( const widgetArea of widgetAreas ) {\n\t\t\t\tawait dispatch.saveWidgetArea( widgetArea.id );\n\t\t\t}\n\t\t} finally {\n\t\t\t// saveEditedEntityRecord resets the resolution status, let's fix it manually.\n\t\t\tawait registry\n\t\t\t\t.dispatch( coreStore )\n\t\t\t\t.finishResolution(\n\t\t\t\t\t'getEntityRecord',\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tbuildWidgetAreasQuery()\n\t\t\t\t);\n\t\t}\n\t};\n\n/**\n * Converts all the blocks from a widget area specified by ID into widgets,\n * and submits a batch request to save everything at once.\n *\n * @param {string} widgetAreaId ID of the widget area to process.\n * @return {Function} An action creator.\n */\nexport const saveWidgetArea =\n\t( widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst widgets = select.getWidgets();\n\n\t\tconst post = registry\n\t\t\t.select( coreStore )\n\t\t\t.getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetAreaId )\n\t\t\t);\n\n\t\t// Get all widgets from this area\n\t\tconst areaWidgets = Object.values( widgets ).filter(\n\t\t\t( { sidebar } ) => sidebar === widgetAreaId\n\t\t);\n\n\t\t// Remove all duplicate reference widget instances for legacy widgets.\n\t\t// Why? We filter out the widgets with duplicate IDs to prevent adding more than one instance of a widget\n\t\t// implemented using a function. WordPress doesn't support having more than one instance of these, if you try to\n\t\t// save multiple instances of these in different sidebars you will run into undefined behaviors.\n\t\tconst usedReferenceWidgets = [];\n\t\tconst widgetsBlocks = post.blocks.filter( ( block ) => {\n\t\t\tconst { id } = block.attributes;\n\n\t\t\tif ( block.name === 'core/legacy-widget' && id ) {\n\t\t\t\tif ( usedReferenceWidgets.includes( id ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tusedReferenceWidgets.push( id );\n\t\t\t}\n\t\t\treturn true;\n\t\t} );\n\n\t\t// Determine which widgets have been deleted. We can tell if a widget is\n\t\t// deleted and not just moved to a different area by looking to see if\n\t\t// getWidgetAreaForWidgetId() finds something.\n\t\tconst deletedWidgets = [];\n\t\tfor ( const widget of areaWidgets ) {\n\t\t\tconst widgetsNewArea = select.getWidgetAreaForWidgetId( widget.id );\n\t\t\tif ( ! widgetsNewArea ) {\n\t\t\t\tdeletedWidgets.push( widget );\n\t\t\t}\n\t\t}\n\n\t\tconst batchMeta = [];\n\t\tconst batchTasks = [];\n\t\tconst sidebarWidgetsIds = [];\n\t\tfor ( let i = 0; i < widgetsBlocks.length; i++ ) {\n\t\t\tconst block = widgetsBlocks[ i ];\n\t\t\tconst widgetId = getWidgetIdFromBlock( block );\n\t\t\tconst oldWidget = widgets[ widgetId ];\n\t\t\tconst widget = transformBlockToWidget( block, oldWidget );\n\n\t\t\t// We'll replace the null widgetId after save, but we track it here\n\t\t\t// since order is important.\n\t\t\tsidebarWidgetsIds.push( widgetId );\n\n\t\t\t// Check oldWidget as widgetId might refer to an ID which has been\n\t\t\t// deleted, e.g. if a deleted block is restored via undo after saving.\n\t\t\tif ( oldWidget ) {\n\t\t\t\t// Update an existing widget.\n\t\t\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\t\t\t'root',\n\t\t\t\t\t'widget',\n\t\t\t\t\twidgetId,\n\t\t\t\t\t{\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t},\n\t\t\t\t\t{ undoIgnore: true }\n\t\t\t\t);\n\n\t\t\t\tconst hasEdits = registry\n\t\t\t\t\t.select( coreStore )\n\t\t\t\t\t.hasEditsForEntityRecord( 'root', 'widget', widgetId );\n\n\t\t\t\tif ( ! hasEdits ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tbatchTasks.push( ( { saveEditedEntityRecord } ) =>\n\t\t\t\t\tsaveEditedEntityRecord( 'root', 'widget', widgetId )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Create a new widget.\n\t\t\t\tbatchTasks.push( ( { saveEntityRecord } ) =>\n\t\t\t\t\tsaveEntityRecord( 'root', 'widget', {\n\t\t\t\t\t\t...widget,\n\t\t\t\t\t\tsidebar: widgetAreaId,\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbatchMeta.push( {\n\t\t\t\tblock,\n\t\t\t\tposition: i,\n\t\t\t\tclientId: block.clientId,\n\t\t\t} );\n\t\t}\n\t\tfor ( const widget of deletedWidgets ) {\n\t\t\tbatchTasks.push( ( { deleteEntityRecord } ) =>\n\t\t\t\tdeleteEntityRecord( 'root', 'widget', widget.id, {\n\t\t\t\t\tforce: true,\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tconst records = await registry\n\t\t\t.dispatch( coreStore )\n\t\t\t.__experimentalBatch( batchTasks );\n\t\tconst preservedRecords = records.filter(\n\t\t\t( record ) => ! record.hasOwnProperty( 'deleted' )\n\t\t);\n\n\t\tconst failedWidgetNames = [];\n\n\t\tfor ( let i = 0; i < preservedRecords.length; i++ ) {\n\t\t\tconst widget = preservedRecords[ i ];\n\t\t\tconst { block, position } = batchMeta[ i ];\n\n\t\t\t// Set __internalWidgetId on the block. This will be persisted to the\n\t\t\t// store when we dispatch receiveEntityRecords( post ) below.\n\t\t\tpost.blocks[ position ].attributes.__internalWidgetId = widget.id;\n\n\t\t\tconst error = registry\n\t\t\t\t.select( coreStore )\n\t\t\t\t.getLastEntitySaveError( 'root', 'widget', widget.id );\n\t\t\tif ( error ) {\n\t\t\t\tfailedWidgetNames.push( block.attributes?.name || block?.name );\n\t\t\t}\n\n\t\t\tif ( ! sidebarWidgetsIds[ position ] ) {\n\t\t\t\tsidebarWidgetsIds[ position ] = widget.id;\n\t\t\t}\n\t\t}\n\n\t\tif ( failedWidgetNames.length ) {\n\t\t\tthrow new Error(\n\t\t\t\tsprintf(\n\t\t\t\t\t/* translators: %s: List of widget names */\n\t\t\t\t\t__( 'Could not save the following widgets: %s.' ),\n\t\t\t\t\tfailedWidgetNames.join( ', ' )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tregistry.dispatch( coreStore ).editEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\twidgetAreaId,\n\t\t\t{\n\t\t\t\twidgets: sidebarWidgetsIds,\n\t\t\t},\n\t\t\t{ undoIgnore: true }\n\t\t);\n\n\t\tdispatch( trySaveWidgetArea( widgetAreaId ) );\n\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.receiveEntityRecords( KIND, POST_TYPE, post, undefined );\n\t};\n\nconst trySaveWidgetArea =\n\t( widgetAreaId ) =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( coreStore )\n\t\t\t.saveEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\twidgetAreaId,\n\t\t\t\t{\n\t\t\t\t\tthrowOnError: true,\n\t\t\t\t}\n\t\t\t);\n\t};\n\n/**\n * Sets the clientId stored for a particular widgetId.\n *\n * @param {number} clientId Client id.\n * @param {number} widgetId Widget id.\n *\n * @return {Object} Action.\n */\nexport function setWidgetIdForClientId( clientId, widgetId ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_ID_FOR_CLIENT_ID',\n\t\tclientId,\n\t\twidgetId,\n\t};\n}\n\n/**\n * Sets the open state of all the widget areas.\n *\n * @param {Object} widgetAreasOpenState The open states of all the widget areas.\n *\n * @return {Object} Action.\n */\nexport function setWidgetAreasOpenState( widgetAreasOpenState ) {\n\treturn {\n\t\ttype: 'SET_WIDGET_AREAS_OPEN_STATE',\n\t\twidgetAreasOpenState,\n\t};\n}\n\n/**\n * Sets the open state of the widget area.\n *\n * @param {string} clientId The clientId of the widget area.\n * @param {boolean} isOpen Whether the widget area should be opened.\n *\n * @return {Object} Action.\n */\nexport function setIsWidgetAreaOpen( clientId, isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_WIDGET_AREA_OPEN',\n\t\tclientId,\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the inserter.\n *\n * @param {boolean|Object} value Whether the inserter should be\n * opened (true) or closed (false).\n * To specify an insertion point,\n * use an object.\n * @param {string} value.rootClientId The root client ID to insert at.\n * @param {number} value.insertionIndex The index to insert at.\n *\n * @return {Object} Action object.\n */\nexport function setIsInserterOpened( value ) {\n\treturn {\n\t\ttype: 'SET_IS_INSERTER_OPENED',\n\t\tvalue,\n\t};\n}\n\n/**\n * Returns an action object used to open/close the list view.\n *\n * @param {boolean} isOpen A boolean representing whether the list view should be opened or closed.\n * @return {Object} Action object.\n */\nexport function setIsListViewOpened( isOpen ) {\n\treturn {\n\t\ttype: 'SET_IS_LIST_VIEW_OPENED',\n\t\tisOpen,\n\t};\n}\n\n/**\n * Returns an action object signalling that the user closed the sidebar.\n *\n * @return {Object} Action creator.\n */\nexport const closeGeneralSidebar =\n\t() =>\n\t( { registry } ) => {\n\t\tregistry\n\t\t\t.dispatch( interfaceStore )\n\t\t\t.disableComplementaryArea( editWidgetsStoreName );\n\t};\n\n/**\n * Action that handles moving a block between widget areas\n *\n * @param {string} clientId The clientId of the block to move.\n * @param {string} widgetAreaId The id of the widget area to move the block to.\n */\nexport const moveBlockToWidgetArea =\n\t( clientId, widgetAreaId ) =>\n\tasync ( { dispatch, select, registry } ) => {\n\t\tconst sourceRootClientId = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockRootClientId( [ clientId ] );\n\n\t\t// Search the top level blocks (widget areas) for the one with the matching\n\t\t// id attribute. Makes the assumption that all top-level blocks are widget\n\t\t// areas.\n\t\tconst widgetAreas = registry.select( blockEditorStore ).getBlocks();\n\t\tconst destinationWidgetAreaBlock = widgetAreas.find(\n\t\t\t( { attributes } ) => attributes.id === widgetAreaId\n\t\t);\n\t\tconst destinationRootClientId = destinationWidgetAreaBlock.clientId;\n\n\t\t// Get the index for moving to the end of the destination widget area.\n\t\tconst destinationInnerBlocksClientIds = registry\n\t\t\t.select( blockEditorStore )\n\t\t\t.getBlockOrder( destinationRootClientId );\n\t\tconst destinationIndex = destinationInnerBlocksClientIds.length;\n\n\t\t// Reveal the widget area, if it's not open.\n\t\tconst isDestinationWidgetAreaOpen = select.getIsWidgetAreaOpen(\n\t\t\tdestinationRootClientId\n\t\t);\n\n\t\tif ( ! isDestinationWidgetAreaOpen ) {\n\t\t\tdispatch.setIsWidgetAreaOpen( destinationRootClientId, true );\n\t\t}\n\n\t\t// Move the block.\n\t\tregistry\n\t\t\t.dispatch( blockEditorStore )\n\t\t\t.moveBlocksToPosition(\n\t\t\t\t[ clientId ],\n\t\t\t\tsourceRootClientId,\n\t\t\t\tdestinationRootClientId,\n\t\t\t\tdestinationIndex\n\t\t\t);\n\t};\n"]}
@@ -1,11 +1,6 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { keyBy } from 'lodash';
5
1
  /**
6
2
  * WordPress dependencies
7
3
  */
8
-
9
4
  import { createRegistrySelector } from '@wordpress/data';
10
5
  import { getWidgetIdFromBlock } from '@wordpress/widgets';
11
6
  import { store as coreStore } from '@wordpress/core-data';
@@ -24,7 +19,11 @@ import { STORE_NAME as editWidgetsStoreName } from './constants';
24
19
 
25
20
  export const getWidgets = createRegistrySelector(select => () => {
26
21
  const widgets = select(coreStore).getEntityRecords('root', 'widget', buildWidgetsQuery());
27
- return keyBy(widgets, 'id');
22
+ return (// Key widgets by their ID.
23
+ (widgets === null || widgets === void 0 ? void 0 : widgets.reduce((allWidgets, widget) => ({ ...allWidgets,
24
+ [widget.id]: widget
25
+ }), {})) || {}
26
+ );
28
27
  });
29
28
  /**
30
29
  * Returns API widget data for a particular widget ID.
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/store/selectors.js"],"names":["keyBy","createRegistrySelector","getWidgetIdFromBlock","store","coreStore","blockEditorStore","buildWidgetsQuery","buildWidgetAreasQuery","buildWidgetAreaPostId","KIND","POST_TYPE","WIDGET_AREA_ENTITY_TYPE","STORE_NAME","editWidgetsStoreName","getWidgets","select","widgets","getEntityRecords","getWidget","state","id","getWidgetAreas","query","getWidgetAreaForWidgetId","widgetId","widgetAreas","find","widgetArea","post","getEditedEntityRecord","blockWidgetIds","blocks","map","block","includes","getParentWidgetAreaBlock","clientId","getBlock","getBlockName","getBlockParents","blockParents","widgetAreaClientId","parentClientId","getEditedWidgetAreas","ids","filter","hasEditsForEntityRecord","getReferenceWidgetBlocks","referenceWidgetName","results","_widgetArea","name","attributes","push","isSavingWidgetAreas","widgetAreasIds","isSaving","isSavingEntityRecord","widgetIds","Object","keys","undefined","getIsWidgetAreaOpen","widgetAreasOpenState","isInserterOpened","blockInserterPanel","__experimentalGetInsertionPoint","rootClientId","insertionIndex","canInsertBlockInWidgetArea","blockName","getBlocks","firstWidgetArea","canInsertBlockType","isListViewOpened","listViewPanel"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { keyBy } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport {\n\tbuildWidgetsQuery,\n\tbuildWidgetAreasQuery,\n\tbuildWidgetAreaPostId,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Returns all API widgets.\n *\n * @return {Object[]} API List of widgets.\n */\nexport const getWidgets = createRegistrySelector( ( select ) => () => {\n\tconst widgets = select( coreStore ).getEntityRecords(\n\t\t'root',\n\t\t'widget',\n\t\tbuildWidgetsQuery()\n\t);\n\n\treturn keyBy( widgets, 'id' );\n} );\n\n/**\n * Returns API widget data for a particular widget ID.\n *\n * @param {number} id Widget ID.\n *\n * @return {Object} API widget data for a particular widget ID.\n */\nexport const getWidget = createRegistrySelector(\n\t( select ) => ( state, id ) => {\n\t\tconst widgets = select( editWidgetsStoreName ).getWidgets();\n\t\treturn widgets[ id ];\n\t}\n);\n\n/**\n * Returns all API widget areas.\n *\n * @return {Object[]} API List of widget areas.\n */\nexport const getWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst query = buildWidgetAreasQuery();\n\treturn select( coreStore ).getEntityRecords(\n\t\tKIND,\n\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\tquery\n\t);\n} );\n\n/**\n * Returns widgetArea containing a block identify by given widgetId\n *\n * @param {string} widgetId The ID of the widget.\n * @return {Object} Containing widget area.\n */\nexport const getWidgetAreaForWidgetId = createRegistrySelector(\n\t( select ) => ( state, widgetId ) => {\n\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\treturn widgetAreas.find( ( widgetArea ) => {\n\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetArea.id )\n\t\t\t);\n\t\t\tconst blockWidgetIds = post.blocks.map( ( block ) =>\n\t\t\t\tgetWidgetIdFromBlock( block )\n\t\t\t);\n\t\t\treturn blockWidgetIds.includes( widgetId );\n\t\t} );\n\t}\n);\n\n/**\n * Given a child client id, returns the parent widget area block.\n *\n * @param {string} clientId The client id of a block in a widget area.\n *\n * @return {WPBlock} The widget area block.\n */\nexport const getParentWidgetAreaBlock = createRegistrySelector(\n\t( select ) => ( state, clientId ) => {\n\t\tconst { getBlock, getBlockName, getBlockParents } =\n\t\t\tselect( blockEditorStore );\n\t\tconst blockParents = getBlockParents( clientId );\n\t\tconst widgetAreaClientId = blockParents.find(\n\t\t\t( parentClientId ) =>\n\t\t\t\tgetBlockName( parentClientId ) === 'core/widget-area'\n\t\t);\n\t\treturn getBlock( widgetAreaClientId );\n\t}\n);\n\n/**\n * Returns all edited widget area entity records.\n *\n * @return {Object[]} List of edited widget area entity records.\n */\nexport const getEditedWidgetAreas = createRegistrySelector(\n\t( select ) => ( state, ids ) => {\n\t\tlet widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\tif ( ! widgetAreas ) {\n\t\t\treturn [];\n\t\t}\n\t\tif ( ids ) {\n\t\t\twidgetAreas = widgetAreas.filter( ( { id } ) =>\n\t\t\t\tids.includes( id )\n\t\t\t);\n\t\t}\n\t\treturn widgetAreas\n\t\t\t.filter( ( { id } ) =>\n\t\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( id )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map( ( { id } ) =>\n\t\t\t\tselect( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tid\n\t\t\t\t)\n\t\t\t);\n\t}\n);\n\n/**\n * Returns all blocks representing reference widgets.\n *\n * @param {string} referenceWidgetName Optional. If given, only reference widgets with this name will be returned.\n * @return {Array} List of all blocks representing reference widgets\n */\nexport const getReferenceWidgetBlocks = createRegistrySelector(\n\t( select ) =>\n\t\t( state, referenceWidgetName = null ) => {\n\t\t\tconst results = [];\n\t\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\t\tfor ( const _widgetArea of widgetAreas ) {\n\t\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( _widgetArea.id )\n\t\t\t\t);\n\t\t\t\tfor ( const block of post.blocks ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tblock.name === 'core/legacy-widget' &&\n\t\t\t\t\t\t( ! referenceWidgetName ||\n\t\t\t\t\t\t\tblock.attributes?.referenceWidgetName ===\n\t\t\t\t\t\t\t\treferenceWidgetName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresults.push( block );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n);\n\n/**\n * Returns true if any widget area is currently being saved.\n *\n * @return {boolean} True if any widget area is currently being saved. False otherwise.\n */\nexport const isSavingWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst widgetAreasIds = select( editWidgetsStoreName )\n\t\t.getWidgetAreas()\n\t\t?.map( ( { id } ) => id );\n\tif ( ! widgetAreasIds ) {\n\t\treturn false;\n\t}\n\n\tfor ( const id of widgetAreasIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst widgetIds = [\n\t\t...Object.keys( select( editWidgetsStoreName ).getWidgets() ),\n\t\tundefined, // account for new widgets without an ID\n\t];\n\tfor ( const id of widgetIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\t'root',\n\t\t\t'widget',\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n} );\n\n/**\n * Gets whether the widget area is opened.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} clientId The clientId of the widget area.\n *\n * @return {boolean} True if the widget area is open.\n */\nexport const getIsWidgetAreaOpen = ( state, clientId ) => {\n\tconst { widgetAreasOpenState } = state;\n\treturn !! widgetAreasOpenState[ clientId ];\n};\n\n/**\n * Returns true if the inserter is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the inserter is opened.\n */\nexport function isInserterOpened( state ) {\n\treturn !! state.blockInserterPanel;\n}\n\n/**\n * Get the insertion point for the inserter.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The root client ID and index to insert at.\n */\nexport function __experimentalGetInsertionPoint( state ) {\n\tconst { rootClientId, insertionIndex } = state.blockInserterPanel;\n\treturn { rootClientId, insertionIndex };\n}\n\n/**\n * Returns true if a block can be inserted into a widget area.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} blockName The name of the block being inserted.\n *\n * @return {boolean} True if the block can be inserted in a widget area.\n */\nexport const canInsertBlockInWidgetArea = createRegistrySelector(\n\t( select ) => ( state, blockName ) => {\n\t\t// Widget areas are always top-level blocks, which getBlocks will return.\n\t\tconst widgetAreas = select( blockEditorStore ).getBlocks();\n\n\t\t// Makes an assumption that a block that can be inserted into one\n\t\t// widget area can be inserted into any widget area. Uses the first\n\t\t// widget area for testing whether the block can be inserted.\n\t\tconst [ firstWidgetArea ] = widgetAreas;\n\t\treturn select( blockEditorStore ).canInsertBlockType(\n\t\t\tblockName,\n\t\t\tfirstWidgetArea.clientId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the list view is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the list view is opened.\n */\nexport function isListViewOpened( state ) {\n\treturn state.listViewPanel;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/store/selectors.js"],"names":["createRegistrySelector","getWidgetIdFromBlock","store","coreStore","blockEditorStore","buildWidgetsQuery","buildWidgetAreasQuery","buildWidgetAreaPostId","KIND","POST_TYPE","WIDGET_AREA_ENTITY_TYPE","STORE_NAME","editWidgetsStoreName","getWidgets","select","widgets","getEntityRecords","reduce","allWidgets","widget","id","getWidget","state","getWidgetAreas","query","getWidgetAreaForWidgetId","widgetId","widgetAreas","find","widgetArea","post","getEditedEntityRecord","blockWidgetIds","blocks","map","block","includes","getParentWidgetAreaBlock","clientId","getBlock","getBlockName","getBlockParents","blockParents","widgetAreaClientId","parentClientId","getEditedWidgetAreas","ids","filter","hasEditsForEntityRecord","getReferenceWidgetBlocks","referenceWidgetName","results","_widgetArea","name","attributes","push","isSavingWidgetAreas","widgetAreasIds","isSaving","isSavingEntityRecord","widgetIds","Object","keys","undefined","getIsWidgetAreaOpen","widgetAreasOpenState","isInserterOpened","blockInserterPanel","__experimentalGetInsertionPoint","rootClientId","insertionIndex","canInsertBlockInWidgetArea","blockName","getBlocks","firstWidgetArea","canInsertBlockType","isListViewOpened","listViewPanel"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createRegistrySelector } from '@wordpress/data';\nimport { getWidgetIdFromBlock } from '@wordpress/widgets';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n/**\n * Internal dependencies\n */\nimport {\n\tbuildWidgetsQuery,\n\tbuildWidgetAreasQuery,\n\tbuildWidgetAreaPostId,\n\tKIND,\n\tPOST_TYPE,\n\tWIDGET_AREA_ENTITY_TYPE,\n} from './utils';\nimport { STORE_NAME as editWidgetsStoreName } from './constants';\n\n/**\n * Returns all API widgets.\n *\n * @return {Object[]} API List of widgets.\n */\nexport const getWidgets = createRegistrySelector( ( select ) => () => {\n\tconst widgets = select( coreStore ).getEntityRecords(\n\t\t'root',\n\t\t'widget',\n\t\tbuildWidgetsQuery()\n\t);\n\n\treturn (\n\t\t// Key widgets by their ID.\n\t\twidgets?.reduce(\n\t\t\t( allWidgets, widget ) => ( {\n\t\t\t\t...allWidgets,\n\t\t\t\t[ widget.id ]: widget,\n\t\t\t} ),\n\t\t\t{}\n\t\t) || {}\n\t);\n} );\n\n/**\n * Returns API widget data for a particular widget ID.\n *\n * @param {number} id Widget ID.\n *\n * @return {Object} API widget data for a particular widget ID.\n */\nexport const getWidget = createRegistrySelector(\n\t( select ) => ( state, id ) => {\n\t\tconst widgets = select( editWidgetsStoreName ).getWidgets();\n\t\treturn widgets[ id ];\n\t}\n);\n\n/**\n * Returns all API widget areas.\n *\n * @return {Object[]} API List of widget areas.\n */\nexport const getWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst query = buildWidgetAreasQuery();\n\treturn select( coreStore ).getEntityRecords(\n\t\tKIND,\n\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\tquery\n\t);\n} );\n\n/**\n * Returns widgetArea containing a block identify by given widgetId\n *\n * @param {string} widgetId The ID of the widget.\n * @return {Object} Containing widget area.\n */\nexport const getWidgetAreaForWidgetId = createRegistrySelector(\n\t( select ) => ( state, widgetId ) => {\n\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\treturn widgetAreas.find( ( widgetArea ) => {\n\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\tKIND,\n\t\t\t\tPOST_TYPE,\n\t\t\t\tbuildWidgetAreaPostId( widgetArea.id )\n\t\t\t);\n\t\t\tconst blockWidgetIds = post.blocks.map( ( block ) =>\n\t\t\t\tgetWidgetIdFromBlock( block )\n\t\t\t);\n\t\t\treturn blockWidgetIds.includes( widgetId );\n\t\t} );\n\t}\n);\n\n/**\n * Given a child client id, returns the parent widget area block.\n *\n * @param {string} clientId The client id of a block in a widget area.\n *\n * @return {WPBlock} The widget area block.\n */\nexport const getParentWidgetAreaBlock = createRegistrySelector(\n\t( select ) => ( state, clientId ) => {\n\t\tconst { getBlock, getBlockName, getBlockParents } =\n\t\t\tselect( blockEditorStore );\n\t\tconst blockParents = getBlockParents( clientId );\n\t\tconst widgetAreaClientId = blockParents.find(\n\t\t\t( parentClientId ) =>\n\t\t\t\tgetBlockName( parentClientId ) === 'core/widget-area'\n\t\t);\n\t\treturn getBlock( widgetAreaClientId );\n\t}\n);\n\n/**\n * Returns all edited widget area entity records.\n *\n * @return {Object[]} List of edited widget area entity records.\n */\nexport const getEditedWidgetAreas = createRegistrySelector(\n\t( select ) => ( state, ids ) => {\n\t\tlet widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\tif ( ! widgetAreas ) {\n\t\t\treturn [];\n\t\t}\n\t\tif ( ids ) {\n\t\t\twidgetAreas = widgetAreas.filter( ( { id } ) =>\n\t\t\t\tids.includes( id )\n\t\t\t);\n\t\t}\n\t\treturn widgetAreas\n\t\t\t.filter( ( { id } ) =>\n\t\t\t\tselect( coreStore ).hasEditsForEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( id )\n\t\t\t\t)\n\t\t\t)\n\t\t\t.map( ( { id } ) =>\n\t\t\t\tselect( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\t\t\tid\n\t\t\t\t)\n\t\t\t);\n\t}\n);\n\n/**\n * Returns all blocks representing reference widgets.\n *\n * @param {string} referenceWidgetName Optional. If given, only reference widgets with this name will be returned.\n * @return {Array} List of all blocks representing reference widgets\n */\nexport const getReferenceWidgetBlocks = createRegistrySelector(\n\t( select ) =>\n\t\t( state, referenceWidgetName = null ) => {\n\t\t\tconst results = [];\n\t\t\tconst widgetAreas = select( editWidgetsStoreName ).getWidgetAreas();\n\t\t\tfor ( const _widgetArea of widgetAreas ) {\n\t\t\t\tconst post = select( coreStore ).getEditedEntityRecord(\n\t\t\t\t\tKIND,\n\t\t\t\t\tPOST_TYPE,\n\t\t\t\t\tbuildWidgetAreaPostId( _widgetArea.id )\n\t\t\t\t);\n\t\t\t\tfor ( const block of post.blocks ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tblock.name === 'core/legacy-widget' &&\n\t\t\t\t\t\t( ! referenceWidgetName ||\n\t\t\t\t\t\t\tblock.attributes?.referenceWidgetName ===\n\t\t\t\t\t\t\t\treferenceWidgetName )\n\t\t\t\t\t) {\n\t\t\t\t\t\tresults.push( block );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n);\n\n/**\n * Returns true if any widget area is currently being saved.\n *\n * @return {boolean} True if any widget area is currently being saved. False otherwise.\n */\nexport const isSavingWidgetAreas = createRegistrySelector( ( select ) => () => {\n\tconst widgetAreasIds = select( editWidgetsStoreName )\n\t\t.getWidgetAreas()\n\t\t?.map( ( { id } ) => id );\n\tif ( ! widgetAreasIds ) {\n\t\treturn false;\n\t}\n\n\tfor ( const id of widgetAreasIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\tKIND,\n\t\t\tWIDGET_AREA_ENTITY_TYPE,\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\tconst widgetIds = [\n\t\t...Object.keys( select( editWidgetsStoreName ).getWidgets() ),\n\t\tundefined, // account for new widgets without an ID\n\t];\n\tfor ( const id of widgetIds ) {\n\t\tconst isSaving = select( coreStore ).isSavingEntityRecord(\n\t\t\t'root',\n\t\t\t'widget',\n\t\t\tid\n\t\t);\n\t\tif ( isSaving ) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n} );\n\n/**\n * Gets whether the widget area is opened.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} clientId The clientId of the widget area.\n *\n * @return {boolean} True if the widget area is open.\n */\nexport const getIsWidgetAreaOpen = ( state, clientId ) => {\n\tconst { widgetAreasOpenState } = state;\n\treturn !! widgetAreasOpenState[ clientId ];\n};\n\n/**\n * Returns true if the inserter is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the inserter is opened.\n */\nexport function isInserterOpened( state ) {\n\treturn !! state.blockInserterPanel;\n}\n\n/**\n * Get the insertion point for the inserter.\n *\n * @param {Object} state Global application state.\n *\n * @return {Object} The root client ID and index to insert at.\n */\nexport function __experimentalGetInsertionPoint( state ) {\n\tconst { rootClientId, insertionIndex } = state.blockInserterPanel;\n\treturn { rootClientId, insertionIndex };\n}\n\n/**\n * Returns true if a block can be inserted into a widget area.\n *\n * @param {Array} state The open state of the widget areas.\n * @param {string} blockName The name of the block being inserted.\n *\n * @return {boolean} True if the block can be inserted in a widget area.\n */\nexport const canInsertBlockInWidgetArea = createRegistrySelector(\n\t( select ) => ( state, blockName ) => {\n\t\t// Widget areas are always top-level blocks, which getBlocks will return.\n\t\tconst widgetAreas = select( blockEditorStore ).getBlocks();\n\n\t\t// Makes an assumption that a block that can be inserted into one\n\t\t// widget area can be inserted into any widget area. Uses the first\n\t\t// widget area for testing whether the block can be inserted.\n\t\tconst [ firstWidgetArea ] = widgetAreas;\n\t\treturn select( blockEditorStore ).canInsertBlockType(\n\t\t\tblockName,\n\t\t\tfirstWidgetArea.clientId\n\t\t);\n\t}\n);\n\n/**\n * Returns true if the list view is opened.\n *\n * @param {Object} state Global application state.\n *\n * @return {boolean} Whether the list view is opened.\n */\nexport function isListViewOpened( state ) {\n\treturn state.listViewPanel;\n}\n"]}
@@ -12,7 +12,9 @@ import { addWidgetIdToBlock } from '@wordpress/widgets';
12
12
 
13
13
  export function transformWidgetToBlock(widget) {
14
14
  if (widget.id_base === 'block') {
15
- const parsedBlocks = parse(widget.instance.raw.content);
15
+ const parsedBlocks = parse(widget.instance.raw.content, {
16
+ __unstableSkipAutop: true
17
+ });
16
18
 
17
19
  if (!parsedBlocks.length) {
18
20
  return addWidgetIdToBlock(createBlock('core/paragraph', {}, []), widget.id);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/edit-widgets/src/store/transformers.js"],"names":["createBlock","parse","serialize","addWidgetIdToBlock","transformWidgetToBlock","widget","id_base","parsedBlocks","instance","raw","content","length","id","attributes","_embedded","about","is_multi","idBase","transformBlockToWidget","block","relatedWidget","isValidLegacyWidgetBlock","name","rendered","rendered_form"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAT,EAAsBC,KAAtB,EAA6BC,SAA7B,QAA8C,mBAA9C;AACA,SAASC,kBAAT,QAAmC,oBAAnC;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,sBAAT,CAAiCC,MAAjC,EAA0C;AAChD,MAAKA,MAAM,CAACC,OAAP,KAAmB,OAAxB,EAAkC;AACjC,UAAMC,YAAY,GAAGN,KAAK,CAAEI,MAAM,CAACG,QAAP,CAAgBC,GAAhB,CAAoBC,OAAtB,CAA1B;;AACA,QAAK,CAAEH,YAAY,CAACI,MAApB,EAA6B;AAC5B,aAAOR,kBAAkB,CACxBH,WAAW,CAAE,gBAAF,EAAoB,EAApB,EAAwB,EAAxB,CADa,EAExBK,MAAM,CAACO,EAFiB,CAAzB;AAIA;;AACD,WAAOT,kBAAkB,CAAEI,YAAY,CAAE,CAAF,CAAd,EAAqBF,MAAM,CAACO,EAA5B,CAAzB;AACA;;AAED,MAAIC,UAAJ;;AACA,MAAKR,MAAM,CAACS,SAAP,CAAiBC,KAAjB,CAAwB,CAAxB,EAA4BC,QAAjC,EAA4C;AAC3CH,IAAAA,UAAU,GAAG;AACZI,MAAAA,MAAM,EAAEZ,MAAM,CAACC,OADH;AAEZE,MAAAA,QAAQ,EAAEH,MAAM,CAACG;AAFL,KAAb;AAIA,GALD,MAKO;AACNK,IAAAA,UAAU,GAAG;AACZD,MAAAA,EAAE,EAAEP,MAAM,CAACO;AADC,KAAb;AAGA;;AAED,SAAOT,kBAAkB,CACxBH,WAAW,CAAE,oBAAF,EAAwBa,UAAxB,EAAoC,EAApC,CADa,EAExBR,MAAM,CAACO,EAFiB,CAAzB;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASM,sBAAT,CAAiCC,KAAjC,EAA6D;AAAA,MAArBC,aAAqB,uEAAL,EAAK;AACnE,MAAIf,MAAJ;AAEA,QAAMgB,wBAAwB,GAC7BF,KAAK,CAACG,IAAN,KAAe,oBAAf,KACEH,KAAK,CAACN,UAAN,CAAiBD,EAAjB,IAAuBO,KAAK,CAACN,UAAN,CAAiBL,QAD1C,CADD;;AAIA,MAAKa,wBAAL,EAAgC;AAAA;;AAC/BhB,IAAAA,MAAM,GAAG,EACR,GAAGe,aADK;AAERR,MAAAA,EAAE,0BAAEO,KAAK,CAACN,UAAN,CAAiBD,EAAnB,uEAAyBQ,aAAa,CAACR,EAFjC;AAGRN,MAAAA,OAAO,2BAAEa,KAAK,CAACN,UAAN,CAAiBI,MAAnB,yEAA6BG,aAAa,CAACd,OAH1C;AAIRE,MAAAA,QAAQ,2BAAEW,KAAK,CAACN,UAAN,CAAiBL,QAAnB,yEAA+BY,aAAa,CAACZ;AAJ7C,KAAT;AAMA,GAPD,MAOO;AACNH,IAAAA,MAAM,GAAG,EACR,GAAGe,aADK;AAERd,MAAAA,OAAO,EAAE,OAFD;AAGRE,MAAAA,QAAQ,EAAE;AACTC,QAAAA,GAAG,EAAE;AACJC,UAAAA,OAAO,EAAER,SAAS,CAAEiB,KAAF;AADd;AADI;AAHF,KAAT;AASA,GAxBkE,CA0BnE;;;AACA,SAAOd,MAAM,CAACkB,QAAd;AACA,SAAOlB,MAAM,CAACmB,aAAd;AAEA,SAAOnB,MAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createBlock, parse, serialize } from '@wordpress/blocks';\nimport { addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Converts a widget entity record into a block.\n *\n * @param {Object} widget The widget entity record.\n * @return {Object} a block (converted from the entity record).\n */\nexport function transformWidgetToBlock( widget ) {\n\tif ( widget.id_base === 'block' ) {\n\t\tconst parsedBlocks = parse( widget.instance.raw.content );\n\t\tif ( ! parsedBlocks.length ) {\n\t\t\treturn addWidgetIdToBlock(\n\t\t\t\tcreateBlock( 'core/paragraph', {}, [] ),\n\t\t\t\twidget.id\n\t\t\t);\n\t\t}\n\t\treturn addWidgetIdToBlock( parsedBlocks[ 0 ], widget.id );\n\t}\n\n\tlet attributes;\n\tif ( widget._embedded.about[ 0 ].is_multi ) {\n\t\tattributes = {\n\t\t\tidBase: widget.id_base,\n\t\t\tinstance: widget.instance,\n\t\t};\n\t} else {\n\t\tattributes = {\n\t\t\tid: widget.id,\n\t\t};\n\t}\n\n\treturn addWidgetIdToBlock(\n\t\tcreateBlock( 'core/legacy-widget', attributes, [] ),\n\t\twidget.id\n\t);\n}\n\n/**\n * Converts a block to a widget entity record.\n *\n * @param {Object} block The block.\n * @param {Object?} relatedWidget A related widget entity record from the API (optional).\n * @return {Object} the widget object (converted from block).\n */\nexport function transformBlockToWidget( block, relatedWidget = {} ) {\n\tlet widget;\n\n\tconst isValidLegacyWidgetBlock =\n\t\tblock.name === 'core/legacy-widget' &&\n\t\t( block.attributes.id || block.attributes.instance );\n\n\tif ( isValidLegacyWidgetBlock ) {\n\t\twidget = {\n\t\t\t...relatedWidget,\n\t\t\tid: block.attributes.id ?? relatedWidget.id,\n\t\t\tid_base: block.attributes.idBase ?? relatedWidget.id_base,\n\t\t\tinstance: block.attributes.instance ?? relatedWidget.instance,\n\t\t};\n\t} else {\n\t\twidget = {\n\t\t\t...relatedWidget,\n\t\t\tid_base: 'block',\n\t\t\tinstance: {\n\t\t\t\traw: {\n\t\t\t\t\tcontent: serialize( block ),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\t// Delete read-only properties.\n\tdelete widget.rendered;\n\tdelete widget.rendered_form;\n\n\treturn widget;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/edit-widgets/src/store/transformers.js"],"names":["createBlock","parse","serialize","addWidgetIdToBlock","transformWidgetToBlock","widget","id_base","parsedBlocks","instance","raw","content","__unstableSkipAutop","length","id","attributes","_embedded","about","is_multi","idBase","transformBlockToWidget","block","relatedWidget","isValidLegacyWidgetBlock","name","rendered","rendered_form"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,WAAT,EAAsBC,KAAtB,EAA6BC,SAA7B,QAA8C,mBAA9C;AACA,SAASC,kBAAT,QAAmC,oBAAnC;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,sBAAT,CAAiCC,MAAjC,EAA0C;AAChD,MAAKA,MAAM,CAACC,OAAP,KAAmB,OAAxB,EAAkC;AACjC,UAAMC,YAAY,GAAGN,KAAK,CAAEI,MAAM,CAACG,QAAP,CAAgBC,GAAhB,CAAoBC,OAAtB,EAA+B;AACxDC,MAAAA,mBAAmB,EAAE;AADmC,KAA/B,CAA1B;;AAGA,QAAK,CAAEJ,YAAY,CAACK,MAApB,EAA6B;AAC5B,aAAOT,kBAAkB,CACxBH,WAAW,CAAE,gBAAF,EAAoB,EAApB,EAAwB,EAAxB,CADa,EAExBK,MAAM,CAACQ,EAFiB,CAAzB;AAIA;;AACD,WAAOV,kBAAkB,CAAEI,YAAY,CAAE,CAAF,CAAd,EAAqBF,MAAM,CAACQ,EAA5B,CAAzB;AACA;;AAED,MAAIC,UAAJ;;AACA,MAAKT,MAAM,CAACU,SAAP,CAAiBC,KAAjB,CAAwB,CAAxB,EAA4BC,QAAjC,EAA4C;AAC3CH,IAAAA,UAAU,GAAG;AACZI,MAAAA,MAAM,EAAEb,MAAM,CAACC,OADH;AAEZE,MAAAA,QAAQ,EAAEH,MAAM,CAACG;AAFL,KAAb;AAIA,GALD,MAKO;AACNM,IAAAA,UAAU,GAAG;AACZD,MAAAA,EAAE,EAAER,MAAM,CAACQ;AADC,KAAb;AAGA;;AAED,SAAOV,kBAAkB,CACxBH,WAAW,CAAE,oBAAF,EAAwBc,UAAxB,EAAoC,EAApC,CADa,EAExBT,MAAM,CAACQ,EAFiB,CAAzB;AAIA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASM,sBAAT,CAAiCC,KAAjC,EAA6D;AAAA,MAArBC,aAAqB,uEAAL,EAAK;AACnE,MAAIhB,MAAJ;AAEA,QAAMiB,wBAAwB,GAC7BF,KAAK,CAACG,IAAN,KAAe,oBAAf,KACEH,KAAK,CAACN,UAAN,CAAiBD,EAAjB,IAAuBO,KAAK,CAACN,UAAN,CAAiBN,QAD1C,CADD;;AAIA,MAAKc,wBAAL,EAAgC;AAAA;;AAC/BjB,IAAAA,MAAM,GAAG,EACR,GAAGgB,aADK;AAERR,MAAAA,EAAE,0BAAEO,KAAK,CAACN,UAAN,CAAiBD,EAAnB,uEAAyBQ,aAAa,CAACR,EAFjC;AAGRP,MAAAA,OAAO,2BAAEc,KAAK,CAACN,UAAN,CAAiBI,MAAnB,yEAA6BG,aAAa,CAACf,OAH1C;AAIRE,MAAAA,QAAQ,2BAAEY,KAAK,CAACN,UAAN,CAAiBN,QAAnB,yEAA+Ba,aAAa,CAACb;AAJ7C,KAAT;AAMA,GAPD,MAOO;AACNH,IAAAA,MAAM,GAAG,EACR,GAAGgB,aADK;AAERf,MAAAA,OAAO,EAAE,OAFD;AAGRE,MAAAA,QAAQ,EAAE;AACTC,QAAAA,GAAG,EAAE;AACJC,UAAAA,OAAO,EAAER,SAAS,CAAEkB,KAAF;AADd;AADI;AAHF,KAAT;AASA,GAxBkE,CA0BnE;;;AACA,SAAOf,MAAM,CAACmB,QAAd;AACA,SAAOnB,MAAM,CAACoB,aAAd;AAEA,SAAOpB,MAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createBlock, parse, serialize } from '@wordpress/blocks';\nimport { addWidgetIdToBlock } from '@wordpress/widgets';\n\n/**\n * Converts a widget entity record into a block.\n *\n * @param {Object} widget The widget entity record.\n * @return {Object} a block (converted from the entity record).\n */\nexport function transformWidgetToBlock( widget ) {\n\tif ( widget.id_base === 'block' ) {\n\t\tconst parsedBlocks = parse( widget.instance.raw.content, {\n\t\t\t__unstableSkipAutop: true,\n\t\t} );\n\t\tif ( ! parsedBlocks.length ) {\n\t\t\treturn addWidgetIdToBlock(\n\t\t\t\tcreateBlock( 'core/paragraph', {}, [] ),\n\t\t\t\twidget.id\n\t\t\t);\n\t\t}\n\t\treturn addWidgetIdToBlock( parsedBlocks[ 0 ], widget.id );\n\t}\n\n\tlet attributes;\n\tif ( widget._embedded.about[ 0 ].is_multi ) {\n\t\tattributes = {\n\t\t\tidBase: widget.id_base,\n\t\t\tinstance: widget.instance,\n\t\t};\n\t} else {\n\t\tattributes = {\n\t\t\tid: widget.id,\n\t\t};\n\t}\n\n\treturn addWidgetIdToBlock(\n\t\tcreateBlock( 'core/legacy-widget', attributes, [] ),\n\t\twidget.id\n\t);\n}\n\n/**\n * Converts a block to a widget entity record.\n *\n * @param {Object} block The block.\n * @param {Object?} relatedWidget A related widget entity record from the API (optional).\n * @return {Object} the widget object (converted from block).\n */\nexport function transformBlockToWidget( block, relatedWidget = {} ) {\n\tlet widget;\n\n\tconst isValidLegacyWidgetBlock =\n\t\tblock.name === 'core/legacy-widget' &&\n\t\t( block.attributes.id || block.attributes.instance );\n\n\tif ( isValidLegacyWidgetBlock ) {\n\t\twidget = {\n\t\t\t...relatedWidget,\n\t\t\tid: block.attributes.id ?? relatedWidget.id,\n\t\t\tid_base: block.attributes.idBase ?? relatedWidget.id_base,\n\t\t\tinstance: block.attributes.instance ?? relatedWidget.instance,\n\t\t};\n\t} else {\n\t\twidget = {\n\t\t\t...relatedWidget,\n\t\t\tid_base: 'block',\n\t\t\tinstance: {\n\t\t\t\traw: {\n\t\t\t\t\tcontent: serialize( block ),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\t// Delete read-only properties.\n\tdelete widget.rendered;\n\tdelete widget.rendered_form;\n\n\treturn widget;\n}\n"]}
@@ -468,9 +468,6 @@ body.is-fullscreen-mode .interface-interface-skeleton {
468
468
  .interface-preferences-modal .components-modal__content {
469
469
  padding: 0;
470
470
  }
471
- .interface-preferences-modal .components-modal__content::before {
472
- content: none;
473
- }
474
471
  }
475
472
 
476
473
  .interface-preferences__tabs .components-tab-panel__tabs {
@@ -468,9 +468,6 @@ body.is-fullscreen-mode .interface-interface-skeleton {
468
468
  .interface-preferences-modal .components-modal__content {
469
469
  padding: 0;
470
470
  }
471
- .interface-preferences-modal .components-modal__content::before {
472
- content: none;
473
- }
474
471
  }
475
472
 
476
473
  .interface-preferences__tabs .components-tab-panel__tabs {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/edit-widgets",
3
- "version": "4.9.0",
3
+ "version": "4.12.0",
4
4
  "description": "Widgets Page module for WordPress..",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -27,30 +27,30 @@
27
27
  "react-native": "src/index",
28
28
  "dependencies": {
29
29
  "@babel/runtime": "^7.16.0",
30
- "@wordpress/api-fetch": "^6.9.0",
31
- "@wordpress/block-editor": "^9.4.0",
32
- "@wordpress/block-library": "^7.9.0",
33
- "@wordpress/blocks": "^11.11.0",
34
- "@wordpress/components": "^19.14.0",
35
- "@wordpress/compose": "^5.10.0",
36
- "@wordpress/core-data": "^4.10.0",
37
- "@wordpress/data": "^6.12.0",
38
- "@wordpress/deprecated": "^3.12.0",
39
- "@wordpress/dom": "^3.12.0",
40
- "@wordpress/element": "^4.10.0",
41
- "@wordpress/hooks": "^3.12.0",
42
- "@wordpress/i18n": "^4.12.0",
43
- "@wordpress/icons": "^9.3.0",
44
- "@wordpress/interface": "^4.11.0",
45
- "@wordpress/keyboard-shortcuts": "^3.10.0",
46
- "@wordpress/keycodes": "^3.12.0",
47
- "@wordpress/media-utils": "^4.3.0",
48
- "@wordpress/notices": "^3.12.0",
49
- "@wordpress/plugins": "^4.10.0",
50
- "@wordpress/preferences": "^2.4.0",
51
- "@wordpress/reusable-blocks": "^3.10.0",
52
- "@wordpress/url": "^3.13.0",
53
- "@wordpress/widgets": "^2.10.0",
30
+ "@wordpress/api-fetch": "^6.12.0",
31
+ "@wordpress/block-editor": "^9.7.0",
32
+ "@wordpress/block-library": "^7.12.0",
33
+ "@wordpress/blocks": "^11.14.0",
34
+ "@wordpress/components": "^19.17.0",
35
+ "@wordpress/compose": "^5.13.0",
36
+ "@wordpress/core-data": "^4.13.0",
37
+ "@wordpress/data": "^6.15.0",
38
+ "@wordpress/deprecated": "^3.15.0",
39
+ "@wordpress/dom": "^3.15.0",
40
+ "@wordpress/element": "^4.13.0",
41
+ "@wordpress/hooks": "^3.15.0",
42
+ "@wordpress/i18n": "^4.15.0",
43
+ "@wordpress/icons": "^9.6.0",
44
+ "@wordpress/interface": "^4.14.0",
45
+ "@wordpress/keyboard-shortcuts": "^3.13.0",
46
+ "@wordpress/keycodes": "^3.15.0",
47
+ "@wordpress/media-utils": "^4.6.0",
48
+ "@wordpress/notices": "^3.15.0",
49
+ "@wordpress/plugins": "^4.13.0",
50
+ "@wordpress/preferences": "^2.7.0",
51
+ "@wordpress/reusable-blocks": "^3.13.0",
52
+ "@wordpress/url": "^3.16.0",
53
+ "@wordpress/widgets": "^2.13.0",
54
54
  "classnames": "^2.3.1",
55
55
  "lodash": "^4.17.21"
56
56
  },
@@ -61,5 +61,5 @@
61
61
  "publishConfig": {
62
62
  "access": "public"
63
63
  },
64
- "gitHead": "a80eeb62ec7cb1418b9915c277e084a29d6665e3"
64
+ "gitHead": "08358f53b627a15148c3a3e433cdf58cf8714aa4"
65
65
  }
@@ -6,6 +6,7 @@ import { __ } from '@wordpress/i18n';
6
6
  import { Button } from '@wordpress/components';
7
7
  import { Warning } from '@wordpress/block-editor';
8
8
  import { useCopyToClipboard } from '@wordpress/compose';
9
+ import { doAction } from '@wordpress/hooks';
9
10
 
10
11
  function CopyButton( { text, children } ) {
11
12
  const ref = useCopyToClipboard( text );
@@ -29,6 +30,8 @@ export default class ErrorBoundary extends Component {
29
30
 
30
31
  componentDidCatch( error ) {
31
32
  this.setState( { error } );
33
+
34
+ doAction( 'editor.ErrorBoundary.errorLogged', error );
32
35
  }
33
36
 
34
37
  reboot() {
@@ -5,10 +5,14 @@ import { __, isRTL } from '@wordpress/i18n';
5
5
  import { ToolbarButton } from '@wordpress/components';
6
6
  import { useSelect, useDispatch } from '@wordpress/data';
7
7
  import { redo as redoIcon, undo as undoIcon } from '@wordpress/icons';
8
- import { displayShortcut } from '@wordpress/keycodes';
8
+ import { displayShortcut, isAppleOS } from '@wordpress/keycodes';
9
9
  import { store as coreStore } from '@wordpress/core-data';
10
10
 
11
11
  export default function RedoButton() {
12
+ const shortcut = isAppleOS()
13
+ ? displayShortcut.primaryShift( 'z' )
14
+ : displayShortcut.primary( 'y' );
15
+
12
16
  const hasRedo = useSelect(
13
17
  ( select ) => select( coreStore ).hasRedo(),
14
18
  []
@@ -18,7 +22,7 @@ export default function RedoButton() {
18
22
  <ToolbarButton
19
23
  icon={ ! isRTL() ? redoIcon : undoIcon }
20
24
  label={ __( 'Redo' ) }
21
- shortcut={ displayShortcut.primaryShift( 'z' ) }
25
+ shortcut={ shortcut }
22
26
  // If there are no undo levels we don't want to actually disable this
23
27
  // button, because it will remove focus for keyboard users.
24
28
  // See: https://github.com/WordPress/gutenberg/issues/3486
@@ -2,7 +2,6 @@
2
2
  * External dependencies
3
3
  */
4
4
  import classnames from 'classnames';
5
- import { isString } from 'lodash';
6
5
 
7
6
  /**
8
7
  * WordPress dependencies
@@ -37,7 +36,7 @@ const ShortcutList = ( { shortcuts } ) => (
37
36
  className="edit-widgets-keyboard-shortcut-help-modal__shortcut"
38
37
  key={ index }
39
38
  >
40
- { isString( shortcut ) ? (
39
+ { typeof shortcut === 'string' ? (
41
40
  <DynamicShortcut name={ shortcut } />
42
41
  ) : (
43
42
  <Shortcut { ...shortcut } />
@@ -0,0 +1,38 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import * as wpHooks from '@wordpress/hooks';
5
+ /**
6
+ * Internal dependencies
7
+ */
8
+ import ErrorBoundary from '../error-boundary';
9
+ /**
10
+ * External dependencies
11
+ */
12
+ import { render } from '@testing-library/react';
13
+
14
+ const theError = new Error( 'Kaboom' );
15
+
16
+ const ChildComponent = () => {
17
+ throw theError;
18
+ };
19
+
20
+ describe( 'Error Boundary', () => {
21
+ describe( 'when error is thrown from a Child component', () => {
22
+ it( 'calls the `editor.ErrorBoundary.errorLogged` hook action with the error object', () => {
23
+ const doAction = jest.spyOn( wpHooks, 'doAction' );
24
+
25
+ render(
26
+ <ErrorBoundary>
27
+ <ChildComponent />
28
+ </ErrorBoundary>
29
+ );
30
+
31
+ expect( doAction ).toHaveBeenCalledWith(
32
+ 'editor.ErrorBoundary.errorLogged',
33
+ theError
34
+ );
35
+ expect( console ).toHaveErrored();
36
+ } );
37
+ } );
38
+ } );
@@ -406,7 +406,7 @@ export const moveBlockToWidgetArea =
406
406
  );
407
407
  const destinationRootClientId = destinationWidgetAreaBlock.clientId;
408
408
 
409
- // Get the index for moving to the end of the the destination widget area.
409
+ // Get the index for moving to the end of the destination widget area.
410
410
  const destinationInnerBlocksClientIds = registry
411
411
  .select( blockEditorStore )
412
412
  .getBlockOrder( destinationRootClientId );
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { keyBy } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -36,7 +31,16 @@ export const getWidgets = createRegistrySelector( ( select ) => () => {
36
31
  buildWidgetsQuery()
37
32
  );
38
33
 
39
- return keyBy( widgets, 'id' );
34
+ return (
35
+ // Key widgets by their ID.
36
+ widgets?.reduce(
37
+ ( allWidgets, widget ) => ( {
38
+ ...allWidgets,
39
+ [ widget.id ]: widget,
40
+ } ),
41
+ {}
42
+ ) || {}
43
+ );
40
44
  } );
41
45
 
42
46
  /**
@@ -12,7 +12,9 @@ import { addWidgetIdToBlock } from '@wordpress/widgets';
12
12
  */
13
13
  export function transformWidgetToBlock( widget ) {
14
14
  if ( widget.id_base === 'block' ) {
15
- const parsedBlocks = parse( widget.instance.raw.content );
15
+ const parsedBlocks = parse( widget.instance.raw.content, {
16
+ __unstableSkipAutop: true,
17
+ } );
16
18
  if ( ! parsedBlocks.length ) {
17
19
  return addWidgetIdToBlock(
18
20
  createBlock( 'core/paragraph', {}, [] ),