@wordpress/block-editor 12.0.0 → 12.1.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 (311) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +1 -1
  3. package/build/components/block-controls/slot.js +12 -4
  4. package/build/components/block-controls/slot.js.map +1 -1
  5. package/build/components/block-controls/slot.native.js +10 -1
  6. package/build/components/block-controls/slot.native.js.map +1 -1
  7. package/build/components/block-draggable/index.js +11 -7
  8. package/build/components/block-draggable/index.js.map +1 -1
  9. package/build/components/block-draggable/use-scroll-when-dragging.js +2 -2
  10. package/build/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  11. package/build/components/block-list/block-invalid-warning.native.js +15 -7
  12. package/build/components/block-list/block-invalid-warning.native.js.map +1 -1
  13. package/build/components/block-list/block-list-item-cell.native.js +15 -2
  14. package/build/components/block-list/block-list-item-cell.native.js.map +1 -1
  15. package/build/components/block-list/block-list-item.native.js +158 -195
  16. package/build/components/block-list/block-list-item.native.js.map +1 -1
  17. package/build/components/block-list/block-outline.native.js +57 -0
  18. package/build/components/block-list/block-outline.native.js.map +1 -0
  19. package/build/components/block-list/block.native.js +343 -299
  20. package/build/components/block-list/block.native.js.map +1 -1
  21. package/build/components/block-list/index.native.js +202 -298
  22. package/build/components/block-list/index.native.js.map +1 -1
  23. package/build/components/block-list/insertion-point.native.js +4 -2
  24. package/build/components/block-list/insertion-point.native.js.map +1 -1
  25. package/build/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  26. package/build/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  27. package/build/components/block-settings-menu/block-settings-dropdown.js +8 -10
  28. package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  29. package/build/components/block-settings-menu-controls/index.js +15 -4
  30. package/build/components/block-settings-menu-controls/index.js.map +1 -1
  31. package/build/components/block-tools/block-contextual-toolbar.js +17 -62
  32. package/build/components/block-tools/block-contextual-toolbar.js.map +1 -1
  33. package/build/components/block-tools/selected-block-popover.js +3 -8
  34. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  35. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  36. package/build/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  37. package/build/components/global-styles/advanced-panel.js +86 -0
  38. package/build/components/global-styles/advanced-panel.js.map +1 -0
  39. package/build/components/global-styles/color-panel.js +4 -1
  40. package/build/components/global-styles/color-panel.js.map +1 -1
  41. package/build/components/global-styles/dimensions-panel.js +6 -6
  42. package/build/components/global-styles/dimensions-panel.js.map +1 -1
  43. package/build/components/global-styles/hooks.js +1 -2
  44. package/build/components/global-styles/hooks.js.map +1 -1
  45. package/build/components/global-styles/index.js +24 -0
  46. package/build/components/global-styles/index.js.map +1 -1
  47. package/build/components/global-styles/typography-panel.js +1 -1
  48. package/build/components/global-styles/typography-panel.js.map +1 -1
  49. package/build/components/global-styles/use-global-styles-output.js +27 -4
  50. package/build/components/global-styles/use-global-styles-output.js.map +1 -1
  51. package/build/components/global-styles/utils.js +30 -0
  52. package/build/components/global-styles/utils.js.map +1 -1
  53. package/build/components/image-editor/use-save-image.js +24 -8
  54. package/build/components/image-editor/use-save-image.js.map +1 -1
  55. package/build/components/inserter-draggable-blocks/index.js +5 -0
  56. package/build/components/inserter-draggable-blocks/index.js.map +1 -1
  57. package/build/components/inspector-controls/fill.js +1 -1
  58. package/build/components/inspector-controls/fill.js.map +1 -1
  59. package/build/components/inspector-controls/fill.native.js +1 -1
  60. package/build/components/inspector-controls/fill.native.js.map +1 -1
  61. package/build/components/inspector-controls/slot.js +3 -6
  62. package/build/components/inspector-controls/slot.js.map +1 -1
  63. package/build/components/inspector-controls/slot.native.js +1 -1
  64. package/build/components/inspector-controls/slot.native.js.map +1 -1
  65. package/build/components/line-height-control/index.js +7 -2
  66. package/build/components/line-height-control/index.js.map +1 -1
  67. package/build/components/link-control/use-internal-input-value.js +9 -8
  68. package/build/components/link-control/use-internal-input-value.js.map +1 -1
  69. package/build/components/list-view/block-contents.js +7 -2
  70. package/build/components/list-view/block-contents.js.map +1 -1
  71. package/build/components/list-view/block-select-button.js +2 -1
  72. package/build/components/list-view/block-select-button.js.map +1 -1
  73. package/build/components/list-view/block.js +4 -4
  74. package/build/components/list-view/block.js.map +1 -1
  75. package/build/components/list-view/index.js +32 -18
  76. package/build/components/list-view/index.js.map +1 -1
  77. package/build/components/list-view/use-list-view-drop-zone.js +163 -11
  78. package/build/components/list-view/use-list-view-drop-zone.js.map +1 -1
  79. package/build/components/media-placeholder/index.js +68 -7
  80. package/build/components/media-placeholder/index.js.map +1 -1
  81. package/build/components/multi-selection-inspector/index.js +2 -2
  82. package/build/components/multi-selection-inspector/index.js.map +1 -1
  83. package/build/components/off-canvas-editor/leaf-more-menu.js +3 -1
  84. package/build/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  85. package/build/components/preview-options/index.js +6 -1
  86. package/build/components/preview-options/index.js.map +1 -1
  87. package/build/components/spacing-sizes-control/spacing-input-control.js +1 -1
  88. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  89. package/build/components/url-input/index.js +1 -2
  90. package/build/components/url-input/index.js.map +1 -1
  91. package/build/hooks/align.js +1 -1
  92. package/build/hooks/align.js.map +1 -1
  93. package/build/hooks/border.js +1 -1
  94. package/build/hooks/border.js.map +1 -1
  95. package/build/hooks/color.js +1 -1
  96. package/build/hooks/color.js.map +1 -1
  97. package/build/hooks/content-lock-ui.js +8 -12
  98. package/build/hooks/content-lock-ui.js.map +1 -1
  99. package/build/hooks/duotone.js +1 -1
  100. package/build/hooks/duotone.js.map +1 -1
  101. package/build/hooks/index.native.js +8 -0
  102. package/build/hooks/index.native.js.map +1 -1
  103. package/build/hooks/layout.js +2 -2
  104. package/build/hooks/layout.js.map +1 -1
  105. package/build/hooks/position.js +1 -1
  106. package/build/hooks/position.js.map +1 -1
  107. package/build/hooks/style.js +1 -1
  108. package/build/hooks/style.js.map +1 -1
  109. package/build/hooks/use-editor-wrapper-styles.native.js +255 -0
  110. package/build/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  111. package/build/hooks/use-typography-props.js +14 -10
  112. package/build/hooks/use-typography-props.js.map +1 -1
  113. package/build/index.native.js +31 -0
  114. package/build/index.native.js.map +1 -0
  115. package/build/utils/use-should-contextual-toolbar-show.js +16 -12
  116. package/build/utils/use-should-contextual-toolbar-show.js.map +1 -1
  117. package/build-module/components/block-controls/slot.js +11 -4
  118. package/build-module/components/block-controls/slot.js.map +1 -1
  119. package/build-module/components/block-controls/slot.native.js +9 -1
  120. package/build-module/components/block-controls/slot.native.js.map +1 -1
  121. package/build-module/components/block-draggable/index.js +10 -6
  122. package/build-module/components/block-draggable/index.js.map +1 -1
  123. package/build-module/components/block-draggable/use-scroll-when-dragging.js +2 -2
  124. package/build-module/components/block-draggable/use-scroll-when-dragging.js.map +1 -1
  125. package/build-module/components/block-list/block-invalid-warning.native.js +16 -8
  126. package/build-module/components/block-list/block-invalid-warning.native.js.map +1 -1
  127. package/build-module/components/block-list/block-list-item-cell.native.js +13 -2
  128. package/build-module/components/block-list/block-list-item-cell.native.js.map +1 -1
  129. package/build-module/components/block-list/block-list-item.native.js +160 -190
  130. package/build-module/components/block-list/block-list-item.native.js.map +1 -1
  131. package/build-module/components/block-list/block-outline.native.js +44 -0
  132. package/build-module/components/block-list/block-outline.native.js.map +1 -0
  133. package/build-module/components/block-list/block.native.js +341 -298
  134. package/build-module/components/block-list/block.native.js.map +1 -1
  135. package/build-module/components/block-list/index.native.js +203 -293
  136. package/build-module/components/block-list/index.native.js.map +1 -1
  137. package/build-module/components/block-list/insertion-point.native.js +4 -2
  138. package/build-module/components/block-list/insertion-point.native.js.map +1 -1
  139. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js +1 -1
  140. package/build-module/components/block-mobile-toolbar/block-actions-menu.native.js.map +1 -1
  141. package/build-module/components/block-settings-menu/block-settings-dropdown.js +8 -9
  142. package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
  143. package/build-module/components/block-settings-menu-controls/index.js +13 -5
  144. package/build-module/components/block-settings-menu-controls/index.js.map +1 -1
  145. package/build-module/components/block-tools/block-contextual-toolbar.js +18 -62
  146. package/build-module/components/block-tools/block-contextual-toolbar.js.map +1 -1
  147. package/build-module/components/block-tools/selected-block-popover.js +3 -7
  148. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  149. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +3 -2
  150. package/build-module/components/colors-gradients/use-multiple-origin-colors-and-gradients.js.map +1 -1
  151. package/build-module/components/global-styles/advanced-panel.js +74 -0
  152. package/build-module/components/global-styles/advanced-panel.js.map +1 -0
  153. package/build-module/components/global-styles/color-panel.js +5 -2
  154. package/build-module/components/global-styles/color-panel.js.map +1 -1
  155. package/build-module/components/global-styles/dimensions-panel.js +6 -6
  156. package/build-module/components/global-styles/dimensions-panel.js.map +1 -1
  157. package/build-module/components/global-styles/hooks.js +1 -2
  158. package/build-module/components/global-styles/hooks.js.map +1 -1
  159. package/build-module/components/global-styles/index.js +3 -1
  160. package/build-module/components/global-styles/index.js.map +1 -1
  161. package/build-module/components/global-styles/typography-panel.js +1 -1
  162. package/build-module/components/global-styles/typography-panel.js.map +1 -1
  163. package/build-module/components/global-styles/use-global-styles-output.js +25 -4
  164. package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
  165. package/build-module/components/global-styles/utils.js +25 -0
  166. package/build-module/components/global-styles/utils.js.map +1 -1
  167. package/build-module/components/image-editor/use-save-image.js +24 -8
  168. package/build-module/components/image-editor/use-save-image.js.map +1 -1
  169. package/build-module/components/inserter-draggable-blocks/index.js +4 -0
  170. package/build-module/components/inserter-draggable-blocks/index.js.map +1 -1
  171. package/build-module/components/inspector-controls/fill.js +1 -1
  172. package/build-module/components/inspector-controls/fill.js.map +1 -1
  173. package/build-module/components/inspector-controls/fill.native.js +1 -1
  174. package/build-module/components/inspector-controls/fill.native.js.map +1 -1
  175. package/build-module/components/inspector-controls/slot.js +4 -7
  176. package/build-module/components/inspector-controls/slot.js.map +1 -1
  177. package/build-module/components/inspector-controls/slot.native.js +1 -1
  178. package/build-module/components/inspector-controls/slot.native.js.map +1 -1
  179. package/build-module/components/line-height-control/index.js +7 -2
  180. package/build-module/components/line-height-control/index.js.map +1 -1
  181. package/build-module/components/link-control/use-internal-input-value.js +9 -8
  182. package/build-module/components/link-control/use-internal-input-value.js.map +1 -1
  183. package/build-module/components/list-view/block-contents.js +7 -3
  184. package/build-module/components/list-view/block-contents.js.map +1 -1
  185. package/build-module/components/list-view/block-select-button.js +2 -1
  186. package/build-module/components/list-view/block-select-button.js.map +1 -1
  187. package/build-module/components/list-view/block.js +4 -4
  188. package/build-module/components/list-view/block.js.map +1 -1
  189. package/build-module/components/list-view/index.js +32 -18
  190. package/build-module/components/list-view/index.js.map +1 -1
  191. package/build-module/components/list-view/use-list-view-drop-zone.js +160 -11
  192. package/build-module/components/list-view/use-list-view-drop-zone.js.map +1 -1
  193. package/build-module/components/media-placeholder/index.js +66 -7
  194. package/build-module/components/media-placeholder/index.js.map +1 -1
  195. package/build-module/components/multi-selection-inspector/index.js +2 -2
  196. package/build-module/components/multi-selection-inspector/index.js.map +1 -1
  197. package/build-module/components/off-canvas-editor/leaf-more-menu.js +3 -1
  198. package/build-module/components/off-canvas-editor/leaf-more-menu.js.map +1 -1
  199. package/build-module/components/preview-options/index.js +7 -2
  200. package/build-module/components/preview-options/index.js.map +1 -1
  201. package/build-module/components/spacing-sizes-control/spacing-input-control.js +1 -1
  202. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -1
  203. package/build-module/components/url-input/index.js +1 -2
  204. package/build-module/components/url-input/index.js.map +1 -1
  205. package/build-module/hooks/align.js +1 -1
  206. package/build-module/hooks/align.js.map +1 -1
  207. package/build-module/hooks/border.js +1 -1
  208. package/build-module/hooks/border.js.map +1 -1
  209. package/build-module/hooks/color.js +1 -1
  210. package/build-module/hooks/color.js.map +1 -1
  211. package/build-module/hooks/content-lock-ui.js +8 -11
  212. package/build-module/hooks/content-lock-ui.js.map +1 -1
  213. package/build-module/hooks/duotone.js +1 -1
  214. package/build-module/hooks/duotone.js.map +1 -1
  215. package/build-module/hooks/index.native.js +1 -0
  216. package/build-module/hooks/index.native.js.map +1 -1
  217. package/build-module/hooks/layout.js +2 -2
  218. package/build-module/hooks/layout.js.map +1 -1
  219. package/build-module/hooks/position.js +1 -1
  220. package/build-module/hooks/position.js.map +1 -1
  221. package/build-module/hooks/style.js +1 -1
  222. package/build-module/hooks/style.js.map +1 -1
  223. package/build-module/hooks/use-editor-wrapper-styles.native.js +242 -0
  224. package/build-module/hooks/use-editor-wrapper-styles.native.js.map +1 -0
  225. package/build-module/hooks/use-typography-props.js +14 -10
  226. package/build-module/hooks/use-typography-props.js.map +1 -1
  227. package/build-module/index.native.js +6 -0
  228. package/build-module/index.native.js.map +1 -0
  229. package/build-module/utils/use-should-contextual-toolbar-show.js +16 -12
  230. package/build-module/utils/use-should-contextual-toolbar-show.js.map +1 -1
  231. package/build-style/content-rtl.css +0 -1
  232. package/build-style/content.css +0 -1
  233. package/build-style/style-rtl.css +37 -13
  234. package/build-style/style.css +37 -13
  235. package/package.json +31 -31
  236. package/src/components/block-breadcrumb/style.scss +2 -1
  237. package/src/components/block-controls/slot.js +8 -4
  238. package/src/components/block-controls/slot.native.js +6 -1
  239. package/src/components/block-draggable/index.js +10 -6
  240. package/src/components/block-draggable/use-scroll-when-dragging.js +8 -2
  241. package/src/components/block-list/block-invalid-warning.native.js +17 -9
  242. package/src/components/block-list/block-list-item-cell.native.js +10 -1
  243. package/src/components/block-list/block-list-item.native.js +180 -208
  244. package/src/components/block-list/block-outline.native.js +58 -0
  245. package/src/components/block-list/block.native.js +564 -523
  246. package/src/components/block-list/content.scss +0 -1
  247. package/src/components/block-list/index.native.js +229 -298
  248. package/src/components/block-list/insertion-point.native.js +2 -2
  249. package/src/components/block-list/test/block-invalid-warning.native.js +48 -0
  250. package/src/components/block-list/test/index.native.js +205 -0
  251. package/src/components/block-mobile-toolbar/block-actions-menu.native.js +3 -1
  252. package/src/components/block-pattern-setup/style.scss +1 -4
  253. package/src/components/block-patterns-list/style.scss +1 -4
  254. package/src/components/block-settings-menu/block-settings-dropdown.js +10 -17
  255. package/src/components/block-settings-menu-controls/index.js +24 -4
  256. package/src/components/block-styles/style.scss +4 -4
  257. package/src/components/block-tools/block-contextual-toolbar.js +28 -62
  258. package/src/components/block-tools/selected-block-popover.js +3 -5
  259. package/src/components/block-tools/style.scss +8 -0
  260. package/src/components/colors-gradients/use-multiple-origin-colors-and-gradients.js +16 -2
  261. package/src/components/global-styles/advanced-panel.js +82 -0
  262. package/src/components/global-styles/color-panel.js +6 -1
  263. package/src/components/global-styles/dimensions-panel.js +6 -6
  264. package/src/components/global-styles/hooks.js +1 -5
  265. package/src/components/global-styles/index.js +6 -1
  266. package/src/components/global-styles/style.scss +14 -0
  267. package/src/components/global-styles/test/utils.js +57 -1
  268. package/src/components/global-styles/typography-panel.js +1 -1
  269. package/src/components/global-styles/use-global-styles-output.js +21 -3
  270. package/src/components/global-styles/utils.js +27 -0
  271. package/src/components/image-editor/use-save-image.js +20 -9
  272. package/src/components/inserter-draggable-blocks/index.js +4 -0
  273. package/src/components/inspector-controls/fill.js +1 -1
  274. package/src/components/inspector-controls/fill.native.js +1 -1
  275. package/src/components/inspector-controls/slot.js +4 -9
  276. package/src/components/inspector-controls/slot.native.js +1 -1
  277. package/src/components/line-height-control/index.js +7 -2
  278. package/src/components/line-height-control/stories/index.js +1 -1
  279. package/src/components/link-control/test/index.js +42 -0
  280. package/src/components/link-control/use-internal-input-value.js +8 -7
  281. package/src/components/list-view/block-contents.js +26 -20
  282. package/src/components/list-view/block-select-button.js +5 -1
  283. package/src/components/list-view/block.js +5 -2
  284. package/src/components/list-view/index.js +26 -14
  285. package/src/components/list-view/style.scss +5 -2
  286. package/src/components/list-view/test/use-list-view-drop-zone.js +88 -12
  287. package/src/components/list-view/use-list-view-drop-zone.js +194 -11
  288. package/src/components/media-placeholder/index.js +74 -1
  289. package/src/components/multi-selection-inspector/index.js +2 -2
  290. package/src/components/off-canvas-editor/leaf-more-menu.js +2 -1
  291. package/src/components/preview-options/index.js +9 -2
  292. package/src/components/spacing-sizes-control/spacing-input-control.js +1 -0
  293. package/src/components/url-input/index.js +1 -2
  294. package/src/hooks/align.js +2 -1
  295. package/src/hooks/border.js +2 -1
  296. package/src/hooks/color.js +2 -1
  297. package/src/hooks/content-lock-ui.js +3 -15
  298. package/src/hooks/duotone.js +1 -0
  299. package/src/hooks/index.native.js +1 -0
  300. package/src/hooks/layout.js +4 -2
  301. package/src/hooks/position.js +2 -1
  302. package/src/hooks/style.js +2 -1
  303. package/src/hooks/test/use-editor-wrapper-styles.native.js +282 -0
  304. package/src/hooks/test/use-typography-props.js +47 -2
  305. package/src/hooks/use-editor-wrapper-styles.native.js +250 -0
  306. package/src/hooks/use-editor-wrapper-styles.native.scss +11 -0
  307. package/src/hooks/use-typography-props.js +10 -11
  308. package/src/index.native.js +6 -0
  309. package/src/utils/use-should-contextual-toolbar-show.js +19 -9
  310. package/tsconfig.json +1 -0
  311. package/tsconfig.tsbuildinfo +1 -1
@@ -9,9 +9,8 @@ import { View, Platform, TouchableWithoutFeedback } from 'react-native';
9
9
  * WordPress dependencies
10
10
  */
11
11
 
12
- import { Component } from '@wordpress/element';
13
- import { withDispatch, withSelect } from '@wordpress/data';
14
- import { compose, withPreferredColorScheme } from '@wordpress/compose';
12
+ import { useRef, useState } from '@wordpress/element';
13
+ import { useSelect, useDispatch } from '@wordpress/data';
15
14
  import { createBlock } from '@wordpress/blocks';
16
15
  import { KeyboardAwareFlatList, ReadableContentView, WIDE_ALIGNMENTS, alignmentHelpers } from '@wordpress/components';
17
16
  import { __ } from '@wordpress/i18n';
@@ -47,74 +46,98 @@ const getStyles = (isRootList, isStackedHorizontally, horizontalAlignment) => {
47
46
  return computedStyles;
48
47
  };
49
48
 
50
- export class BlockList extends Component {
51
- constructor() {
52
- super(...arguments);
53
- this.extraData = {
54
- parentWidth: this.props.parentWidth,
55
- renderFooterAppender: this.props.renderFooterAppender,
56
- renderAppender: this.props.renderAppender,
57
- onDeleteBlock: this.props.onDeleteBlock,
58
- contentStyle: this.props.contentStyle
59
- };
60
- this.renderItem = this.renderItem.bind(this);
61
- this.renderBlockListFooter = this.renderBlockListFooter.bind(this);
62
- this.scrollViewInnerRef = this.scrollViewInnerRef.bind(this);
63
- this.addBlockToEndOfPost = this.addBlockToEndOfPost.bind(this);
64
- this.shouldFlatListPreventAutomaticScroll = this.shouldFlatListPreventAutomaticScroll.bind(this);
65
- this.shouldShowInnerBlockAppender = this.shouldShowInnerBlockAppender.bind(this);
66
- this.renderEmptyList = this.renderEmptyList.bind(this);
67
- this.getExtraData = this.getExtraData.bind(this);
68
- this.getCellRendererComponent = this.getCellRendererComponent.bind(this);
69
- this.onLayout = this.onLayout.bind(this);
70
- this.state = {
71
- blockWidth: this.props.blockWidth || 0
72
- };
73
- }
74
-
75
- addBlockToEndOfPost(newBlock) {
76
- this.props.insertBlock(newBlock, this.props.blockCount);
77
- }
78
-
79
- scrollViewInnerRef(ref) {
80
- this.scrollViewRef = ref;
81
- }
82
-
83
- shouldFlatListPreventAutomaticScroll() {
84
- return this.props.isBlockInsertionPointVisible;
85
- }
49
+ export default function BlockList(_ref) {
50
+ let {
51
+ blockWidth: initialBlockWidth,
52
+ contentResizeMode,
53
+ contentStyle,
54
+ filterInnerBlocks,
55
+ gridProperties,
56
+ header,
57
+ horizontal,
58
+ horizontalAlignment,
59
+ marginHorizontal = styles.defaultBlock.marginLeft,
60
+ marginVertical = styles.defaultBlock.marginTop,
61
+ onAddBlock,
62
+ onDeleteBlock,
63
+ orientation,
64
+ parentWidth,
65
+ renderAppender,
66
+ renderFooterAppender,
67
+ rootClientId,
68
+ title,
69
+ withFooter = true
70
+ } = _ref;
71
+ const {
72
+ blockClientIds,
73
+ blockCount,
74
+ blockInsertionPointIsVisible,
75
+ isReadOnly,
76
+ isRootList,
77
+ isFloatingToolbarVisible,
78
+ isStackedHorizontally,
79
+ maxWidth,
80
+ isRTL
81
+ } = useSelect(select => {
82
+ const {
83
+ getBlockCount,
84
+ getBlockHierarchyRootClientId,
85
+ getBlockOrder,
86
+ getSelectedBlockClientId,
87
+ isBlockInsertionPointVisible,
88
+ getSettings
89
+ } = select(blockEditorStore);
90
+ const selectedBlockClientId = getSelectedBlockClientId();
91
+ const rootBlockId = getBlockHierarchyRootClientId(selectedBlockClientId);
92
+ let blockOrder = getBlockOrder(rootClientId); // Display only block which fulfill the condition in passed `filterInnerBlocks` function.
93
+
94
+ if (filterInnerBlocks) {
95
+ blockOrder = filterInnerBlocks(blockOrder);
96
+ }
86
97
 
87
- shouldShowInnerBlockAppender() {
88
98
  const {
89
- blockClientIds,
90
- renderAppender
91
- } = this.props;
92
- return renderAppender && blockClientIds.length > 0;
93
- }
99
+ isRTL: isRTLSetting,
100
+ maxWidth: maxWidthSetting,
101
+ readOnly
102
+ } = getSettings();
103
+ return {
104
+ blockClientIds: blockOrder,
105
+ blockCount: getBlockCount(),
106
+ blockInsertionPointIsVisible: Platform.OS === 'ios' && isBlockInsertionPointVisible(),
107
+ isReadOnly: readOnly,
108
+ isRootList: rootClientId === undefined,
109
+ isFloatingToolbarVisible: !!selectedBlockClientId && !!getBlockCount(rootBlockId),
110
+ isStackedHorizontally: orientation === 'horizontal',
111
+ maxWidth: maxWidthSetting,
112
+ isRTL: isRTLSetting
113
+ };
114
+ }, [filterInnerBlocks, orientation, rootClientId]);
115
+ const {
116
+ insertBlock,
117
+ clearSelectedBlock
118
+ } = useDispatch(blockEditorStore);
119
+ const extraData = useRef({
120
+ parentWidth,
121
+ renderFooterAppender,
122
+ renderAppender,
123
+ onDeleteBlock,
124
+ contentStyle
125
+ });
126
+ const [blockWidth, setBlockWidth] = useState(initialBlockWidth || 0);
127
+
128
+ const addBlockToEndOfPost = newBlock => {
129
+ insertBlock(newBlock, blockCount);
130
+ };
94
131
 
95
- renderEmptyList() {
96
- return createElement(EmptyListComponentCompose, {
97
- rootClientId: this.props.rootClientId,
98
- renderAppender: this.props.renderAppender,
99
- renderFooterAppender: this.props.renderFooterAppender
100
- });
101
- }
132
+ const scrollViewRef = useRef(null);
102
133
 
103
- getExtraData() {
104
- const {
105
- parentWidth,
106
- renderFooterAppender,
107
- onDeleteBlock,
108
- contentStyle,
109
- renderAppender,
110
- gridProperties
111
- } = this.props;
112
- const {
113
- blockWidth
114
- } = this.state;
134
+ const shouldFlatListPreventAutomaticScroll = () => blockInsertionPointIsVisible;
135
+
136
+ const shouldShowInnerBlockAppender = () => renderAppender && blockClientIds.length > 0;
115
137
 
116
- if (this.extraData.parentWidth !== parentWidth || this.extraData.renderFooterAppender !== renderFooterAppender || this.extraData.onDeleteBlock !== onDeleteBlock || this.extraData.contentStyle !== contentStyle || this.extraData.renderAppender !== renderAppender || this.extraData.blockWidth !== blockWidth || this.extraData.gridProperties !== gridProperties) {
117
- this.extraData = {
138
+ const getExtraData = () => {
139
+ if (extraData.current.parentWidth !== parentWidth || extraData.current.renderFooterAppender !== renderFooterAppender || extraData.current.onDeleteBlock !== onDeleteBlock || extraData.current.contentStyle !== contentStyle || extraData.current.renderAppender !== renderAppender || extraData.current.blockWidth !== blockWidth || extraData.current.gridProperties !== gridProperties) {
140
+ extraData.current = {
118
141
  parentWidth,
119
142
  renderFooterAppender,
120
143
  onDeleteBlock,
@@ -125,101 +148,27 @@ export class BlockList extends Component {
125
148
  };
126
149
  }
127
150
 
128
- return this.extraData;
129
- }
130
-
131
- getCellRendererComponent(_ref) {
132
- let {
133
- children,
134
- item,
135
- onLayout
136
- } = _ref;
137
- const {
138
- rootClientId
139
- } = this.props;
140
- return createElement(BlockListItemCell, {
141
- children: children,
142
- clientId: item,
143
- onLayout: onLayout,
144
- rootClientId: rootClientId
145
- });
146
- }
151
+ return extraData.current;
152
+ };
147
153
 
148
- onLayout(_ref2) {
154
+ const onLayout = _ref2 => {
149
155
  let {
150
156
  nativeEvent
151
157
  } = _ref2;
152
158
  const {
153
159
  layout
154
160
  } = nativeEvent;
155
- const {
156
- blockWidth
157
- } = this.state;
158
- const {
159
- isRootList,
160
- maxWidth
161
- } = this.props;
162
161
  const layoutWidth = Math.floor(layout.width);
163
162
 
164
163
  if (isRootList && blockWidth !== layoutWidth) {
165
- this.setState({
166
- blockWidth: Math.min(layoutWidth, maxWidth)
167
- });
164
+ setBlockWidth(Math.min(layoutWidth, maxWidth));
168
165
  } else if (!isRootList && !blockWidth) {
169
- this.setState({
170
- blockWidth: Math.min(layoutWidth, maxWidth)
171
- });
166
+ setBlockWidth(Math.min(layoutWidth, maxWidth));
172
167
  }
173
- }
174
-
175
- render() {
176
- const {
177
- isRootList,
178
- isRTL
179
- } = this.props; // Use of Context to propagate the main scroll ref to its children e.g InnerBlocks.
180
-
181
- const blockList = isRootList ? createElement(BlockListProvider, {
182
- value: { ...DEFAULT_BLOCK_LIST_CONTEXT,
183
- scrollRef: this.scrollViewRef
184
- }
185
- }, createElement(BlockDraggableWrapper, {
186
- isRTL: isRTL
187
- }, _ref3 => {
188
- let {
189
- onScroll
190
- } = _ref3;
191
- return this.renderList({
192
- onScroll
193
- });
194
- })) : createElement(BlockListConsumer, null, _ref4 => {
195
- let {
196
- scrollRef
197
- } = _ref4;
198
- return this.renderList({
199
- parentScrollRef: scrollRef
200
- });
201
- });
202
- return blockList;
203
- }
168
+ };
204
169
 
205
- renderList() {
170
+ const renderList = function () {
206
171
  let extraProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
207
- const {
208
- clearSelectedBlock,
209
- blockClientIds,
210
- title,
211
- header,
212
- isReadOnly,
213
- isRootList,
214
- horizontal,
215
- marginVertical = styles.defaultBlock.marginTop,
216
- marginHorizontal = styles.defaultBlock.marginLeft,
217
- isFloatingToolbarVisible,
218
- isStackedHorizontally,
219
- horizontalAlignment,
220
- contentResizeMode,
221
- blockWidth
222
- } = this.props;
223
172
  const {
224
173
  parentScrollRef,
225
174
  onScroll
@@ -247,7 +196,7 @@ export class BlockList extends Component {
247
196
  return createElement(View, {
248
197
  style: containerStyle,
249
198
  onAccessibilityEscape: clearSelectedBlock,
250
- onLayout: this.onLayout,
199
+ onLayout: onLayout,
251
200
  testID: "block-list-wrapper"
252
201
  }, createElement(KeyboardAwareFlatList, _extends({}, Platform.OS === 'android' ? {
253
202
  removeClippedSubviews: false
@@ -255,58 +204,54 @@ export class BlockList extends Component {
255
204
  // Disable clipping on Android to fix focus losing. See https://github.com/wordpress-mobile/gutenberg-mobile/pull/741#issuecomment-472746541
256
205
  accessibilityLabel: "block-list",
257
206
  innerRef: ref => {
258
- this.scrollViewInnerRef(parentScrollRef || ref);
207
+ scrollViewRef.current = parentScrollRef || ref;
259
208
  },
260
209
  extraScrollHeight: extraScrollHeight,
261
210
  keyboardShouldPersistTaps: "always",
262
211
  scrollViewStyle: scrollViewStyle,
263
- extraData: this.getExtraData(),
212
+ extraData: getExtraData(),
264
213
  scrollEnabled: isRootList,
265
214
  contentContainerStyle: [horizontal && styles.horizontalContentContainer, isWider(blockWidth, 'medium') && (isContentStretch && isMultiBlocks ? styles.horizontalContentContainerStretch : styles.horizontalContentContainerCenter)],
266
215
  style: getStyles(isRootList, isStackedHorizontally, horizontalAlignment),
267
216
  data: blockClientIds,
268
217
  keyExtractor: identity,
269
- renderItem: this.renderItem,
270
- CellRendererComponent: this.getCellRendererComponent,
271
- shouldPreventAutomaticScroll: this.shouldFlatListPreventAutomaticScroll,
218
+ listKey: rootClientId ? `list-${rootClientId}` : 'list-root',
219
+ renderItem: renderItem,
220
+ CellRendererComponent: BlockListItemCell,
221
+ shouldPreventAutomaticScroll: shouldFlatListPreventAutomaticScroll,
272
222
  title: title,
273
223
  ListHeaderComponent: header,
274
- ListEmptyComponent: !isReadOnly && this.renderEmptyList,
275
- ListFooterComponent: this.renderBlockListFooter,
224
+ ListEmptyComponent: !isReadOnly && createElement(EmptyList, {
225
+ orientation: orientation,
226
+ rootClientId: rootClientId,
227
+ renderAppender: renderAppender,
228
+ renderFooterAppender: renderFooterAppender
229
+ }),
230
+ ListFooterComponent: createElement(Footer, {
231
+ addBlockToEndOfPost: addBlockToEndOfPost,
232
+ isReadOnly: isReadOnly,
233
+ renderFooterAppender: renderFooterAppender,
234
+ withFooter: withFooter
235
+ }),
276
236
  onScroll: onScroll
277
- })), this.shouldShowInnerBlockAppender() && createElement(View, {
237
+ })), shouldShowInnerBlockAppender() && createElement(View, {
278
238
  style: {
279
239
  marginHorizontal: marginHorizontal - styles.innerAppender.marginLeft
280
240
  }
281
241
  }, createElement(BlockListAppender, {
282
- rootClientId: this.props.rootClientId,
283
- renderAppender: this.props.renderAppender,
242
+ rootClientId: rootClientId,
243
+ renderAppender: renderAppender,
284
244
  showSeparator: true
285
245
  })));
286
- }
246
+ };
287
247
 
288
- renderItem(_ref5) {
248
+ const renderItem = _ref3 => {
289
249
  let {
290
- item: clientId
291
- } = _ref5;
292
- const {
293
- contentResizeMode,
294
- contentStyle,
295
- onAddBlock,
296
- onDeleteBlock,
297
- rootClientId,
298
- isStackedHorizontally,
299
- blockClientIds,
300
- parentWidth,
301
- marginVertical = styles.defaultBlock.marginTop,
302
- marginHorizontal = styles.defaultBlock.marginLeft,
303
- gridProperties
304
- } = this.props;
305
- const {
306
- blockWidth
307
- } = this.state; // Extracting the grid item properties here to avoid
250
+ item: clientId,
251
+ index
252
+ } = _ref3;
253
+ // Extracting the grid item properties here to avoid
308
254
  // re-renders in the blockListItem component.
309
-
310
255
  const isGridItem = !!gridProperties;
311
256
  const gridItemProps = gridProperties && {
312
257
  numOfColumns: gridProperties.numColumns,
@@ -314,6 +259,7 @@ export class BlockList extends Component {
314
259
  tileIndex: blockClientIds.indexOf(clientId)
315
260
  };
316
261
  return createElement(BlockListItem, _extends({
262
+ index: index,
317
263
  isStackedHorizontally: isStackedHorizontally,
318
264
  rootClientId: rootClientId,
319
265
  clientId: clientId,
@@ -324,137 +270,101 @@ export class BlockList extends Component {
324
270
  marginVertical: marginVertical,
325
271
  marginHorizontal: marginHorizontal,
326
272
  onDeleteBlock: onDeleteBlock,
327
- shouldShowInnerBlockAppender: this.shouldShowInnerBlockAppender,
273
+ shouldShowInnerBlockAppender: shouldShowInnerBlockAppender,
328
274
  blockWidth: blockWidth,
329
275
  isGridItem: isGridItem
330
276
  }, gridItemProps));
331
- }
277
+ }; // Use of Context to propagate the main scroll ref to its children e.g InnerBlocks.
332
278
 
333
- renderBlockListFooter() {
334
- const paragraphBlock = createBlock('core/paragraph');
335
- const {
336
- isReadOnly,
337
- withFooter = true,
338
- renderFooterAppender
339
- } = this.props;
340
279
 
341
- if (!isReadOnly && withFooter) {
342
- return createElement(Fragment, null, createElement(TouchableWithoutFeedback, {
343
- accessibilityLabel: __('Add paragraph block'),
344
- testID: __('Add paragraph block'),
345
- onPress: () => {
346
- this.addBlockToEndOfPost(paragraphBlock);
347
- }
348
- }, createElement(View, {
349
- style: styles.blockListFooter
350
- })));
351
- } else if (renderFooterAppender) {
352
- return renderFooterAppender();
280
+ const blockList = isRootList ? createElement(BlockListProvider, {
281
+ value: { ...DEFAULT_BLOCK_LIST_CONTEXT,
282
+ scrollRef: scrollViewRef.current
353
283
  }
354
-
355
- return null;
356
- }
357
-
284
+ }, createElement(BlockDraggableWrapper, {
285
+ isRTL: isRTL
286
+ }, _ref4 => {
287
+ let {
288
+ onScroll
289
+ } = _ref4;
290
+ return renderList({
291
+ onScroll
292
+ });
293
+ })) : createElement(BlockListConsumer, null, _ref5 => {
294
+ let {
295
+ scrollRef
296
+ } = _ref5;
297
+ return renderList({
298
+ parentScrollRef: scrollRef
299
+ });
300
+ });
301
+ return blockList;
358
302
  }
359
- export default compose([withSelect((select, _ref6) => {
360
- let {
361
- rootClientId,
362
- orientation,
363
- filterInnerBlocks
364
- } = _ref6;
365
- const {
366
- getBlockCount,
367
- getBlockHierarchyRootClientId,
368
- getBlockOrder,
369
- getSelectedBlockClientId,
370
- isBlockInsertionPointVisible,
371
- getSettings
372
- } = select(blockEditorStore);
373
- const isStackedHorizontally = orientation === 'horizontal';
374
- const selectedBlockClientId = getSelectedBlockClientId();
375
- let blockClientIds = getBlockOrder(rootClientId); // Display only block which fulfill the condition in passed `filterInnerBlocks` function.
376
-
377
- if (filterInnerBlocks) {
378
- blockClientIds = filterInnerBlocks(blockClientIds);
379
- }
380
303
 
381
- const {
382
- maxWidth
383
- } = getSettings();
384
- const isReadOnly = getSettings().readOnly;
385
- const blockCount = getBlockCount();
386
- const rootBlockId = getBlockHierarchyRootClientId(selectedBlockClientId);
387
- const isFloatingToolbarVisible = !!selectedBlockClientId && !!getBlockCount(rootBlockId);
388
- const isRTL = getSettings().isRTL;
389
- return {
390
- blockClientIds,
391
- blockCount,
392
- isBlockInsertionPointVisible: Platform.OS === 'ios' && isBlockInsertionPointVisible(),
304
+ function Footer(_ref6) {
305
+ let {
306
+ addBlockToEndOfPost,
393
307
  isReadOnly,
394
- isRootList: rootClientId === undefined,
395
- isFloatingToolbarVisible,
396
- isStackedHorizontally,
397
- maxWidth,
398
- isRTL
399
- };
400
- }), withDispatch(dispatch => {
401
- const {
402
- insertBlock,
403
- replaceBlock,
404
- clearSelectedBlock
405
- } = dispatch(blockEditorStore);
406
- return {
407
- clearSelectedBlock,
408
- insertBlock,
409
- replaceBlock
410
- };
411
- }), withPreferredColorScheme])(BlockList);
412
-
413
- class EmptyListComponent extends Component {
414
- render() {
415
- const {
416
- shouldShowInsertionPoint,
417
- rootClientId,
418
- renderAppender,
419
- renderFooterAppender
420
- } = this.props;
421
-
422
- if (renderFooterAppender || renderAppender === false) {
423
- return null;
424
- }
308
+ renderFooterAppender,
309
+ withFooter
310
+ } = _ref6;
425
311
 
426
- return createElement(View, {
427
- style: styles.defaultAppender
428
- }, createElement(ReadableContentView, {
429
- align: renderAppender ? WIDE_ALIGNMENTS.alignments.full : undefined
430
- }, createElement(BlockListAppender, {
431
- rootClientId: rootClientId,
432
- renderAppender: renderAppender,
433
- showSeparator: shouldShowInsertionPoint
312
+ if (!isReadOnly && withFooter) {
313
+ return createElement(Fragment, null, createElement(TouchableWithoutFeedback, {
314
+ accessibilityLabel: __('Add paragraph block'),
315
+ testID: __('Add paragraph block'),
316
+ onPress: () => {
317
+ const paragraphBlock = createBlock('core/paragraph');
318
+ addBlockToEndOfPost(paragraphBlock);
319
+ }
320
+ }, createElement(View, {
321
+ style: styles.blockListFooter
434
322
  })));
323
+ } else if (renderFooterAppender) {
324
+ return renderFooterAppender();
435
325
  }
436
326
 
327
+ return null;
437
328
  }
438
329
 
439
- const EmptyListComponentCompose = compose([withSelect((select, _ref7) => {
330
+ function EmptyList(_ref7) {
440
331
  let {
441
- rootClientId,
442
- orientation
332
+ orientation,
333
+ renderAppender,
334
+ renderFooterAppender,
335
+ rootClientId
443
336
  } = _ref7;
444
337
  const {
445
- getBlockOrder,
446
- getBlockInsertionPoint,
447
- isBlockInsertionPointVisible
448
- } = select(blockEditorStore);
449
- const isStackedHorizontally = orientation === 'horizontal';
450
- const blockClientIds = getBlockOrder(rootClientId);
451
- const insertionPoint = getBlockInsertionPoint();
452
- const blockInsertionPointIsVisible = isBlockInsertionPointVisible();
453
- const shouldShowInsertionPoint = !isStackedHorizontally && blockInsertionPointIsVisible && insertionPoint.rootClientId === rootClientId && ( // If list is empty, show the insertion point (via the default appender)
454
- blockClientIds.length === 0 || // Or if the insertion point is right before the denoted block.
455
- !blockClientIds[insertionPoint.index]);
456
- return {
457
338
  shouldShowInsertionPoint
458
- };
459
- })])(EmptyListComponent);
339
+ } = useSelect(select => {
340
+ const {
341
+ getBlockOrder,
342
+ getBlockInsertionPoint,
343
+ isBlockInsertionPointVisible
344
+ } = select(blockEditorStore);
345
+ const isStackedHorizontally = orientation === 'horizontal';
346
+ const blockClientIds = getBlockOrder(rootClientId);
347
+ const insertionPoint = getBlockInsertionPoint();
348
+ const blockInsertionPointIsVisible = isBlockInsertionPointVisible();
349
+ return {
350
+ shouldShowInsertionPoint: !isStackedHorizontally && blockInsertionPointIsVisible && insertionPoint.rootClientId === rootClientId && ( // If list is empty, show the insertion point (via the default appender)
351
+ blockClientIds.length === 0 || // Or if the insertion point is right before the denoted block.
352
+ !blockClientIds[insertionPoint.index])
353
+ };
354
+ });
355
+
356
+ if (renderFooterAppender || renderAppender === false) {
357
+ return null;
358
+ }
359
+
360
+ return createElement(View, {
361
+ style: styles.defaultAppender
362
+ }, createElement(ReadableContentView, {
363
+ align: renderAppender ? WIDE_ALIGNMENTS.alignments.full : undefined
364
+ }, createElement(BlockListAppender, {
365
+ rootClientId: rootClientId,
366
+ renderAppender: renderAppender,
367
+ showSeparator: shouldShowInsertionPoint
368
+ })));
369
+ }
460
370
  //# sourceMappingURL=index.native.js.map