@selfcommunity/react-ui 0.7.0-alpha.335 → 0.7.0-alpha.337

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 (316) hide show
  1. package/lib/cjs/components/BottomNavigation/BottomNavigation.js +8 -11
  2. package/lib/cjs/components/Composer/Attributes/Attributes.d.ts +22 -0
  3. package/lib/cjs/components/Composer/Attributes/Attributes.js +41 -0
  4. package/lib/cjs/components/Composer/Attributes/index.d.ts +3 -0
  5. package/lib/cjs/components/Composer/{Poll → Attributes}/index.js +2 -2
  6. package/lib/cjs/components/Composer/Composer.d.ts +61 -84
  7. package/lib/cjs/components/Composer/Composer.js +265 -441
  8. package/lib/cjs/components/Composer/Content/ContentDiscussion/ContentDiscussion.d.ts +32 -0
  9. package/lib/cjs/components/Composer/Content/ContentDiscussion/ContentDiscussion.js +53 -0
  10. package/lib/cjs/components/Composer/Content/ContentDiscussion/index.d.ts +3 -0
  11. package/lib/cjs/components/Composer/Content/ContentDiscussion/index.js +5 -0
  12. package/lib/cjs/components/Composer/Content/ContentPoll/ContentPoll.d.ts +26 -0
  13. package/lib/cjs/components/Composer/Content/ContentPoll/ContentPoll.js +129 -0
  14. package/lib/cjs/components/Composer/Content/ContentPoll/index.d.ts +3 -0
  15. package/lib/cjs/components/Composer/Content/ContentPoll/index.js +5 -0
  16. package/lib/cjs/components/Composer/Content/ContentPost/ContentPost.d.ts +32 -0
  17. package/lib/cjs/components/Composer/Content/ContentPost/ContentPost.js +51 -0
  18. package/lib/cjs/components/Composer/Content/ContentPost/index.d.ts +3 -0
  19. package/lib/cjs/components/Composer/Content/ContentPost/index.js +5 -0
  20. package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +11 -0
  21. package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.js +74 -0
  22. package/lib/cjs/components/Composer/Layer/AudienceLayer/index.d.ts +3 -0
  23. package/lib/cjs/components/Composer/Layer/AudienceLayer/index.js +5 -0
  24. package/lib/cjs/components/Composer/Layer/CategoryLayer/CategoryLayer.d.ts +9 -0
  25. package/lib/cjs/components/Composer/Layer/CategoryLayer/CategoryLayer.js +41 -0
  26. package/lib/cjs/components/Composer/Layer/CategoryLayer/index.d.ts +3 -0
  27. package/lib/cjs/components/Composer/Layer/CategoryLayer/index.js +5 -0
  28. package/lib/cjs/components/Composer/Layer/CloseLayer/CloseLayer.d.ts +7 -0
  29. package/lib/cjs/components/Composer/Layer/CloseLayer/CloseLayer.js +41 -0
  30. package/lib/cjs/components/Composer/Layer/CloseLayer/index.d.ts +3 -0
  31. package/lib/cjs/components/Composer/{Audience → Layer/CloseLayer}/index.js +2 -2
  32. package/lib/cjs/components/Composer/Layer/LocationLayer/LocationLayer.d.ts +9 -0
  33. package/lib/cjs/components/Composer/Layer/LocationLayer/LocationLayer.js +41 -0
  34. package/lib/cjs/components/Composer/Layer/LocationLayer/index.d.ts +3 -0
  35. package/lib/cjs/components/Composer/Layer/LocationLayer/index.js +5 -0
  36. package/lib/cjs/components/Composer/Skeleton.d.ts +0 -4
  37. package/lib/cjs/components/Composer/Skeleton.js +10 -72
  38. package/lib/cjs/components/Composer/TypeSwitchButtonGroup/TypeSwitchButtonGroup.d.ts +6 -0
  39. package/lib/cjs/components/Composer/TypeSwitchButtonGroup/TypeSwitchButtonGroup.js +47 -0
  40. package/lib/cjs/components/Composer/TypeSwitchButtonGroup/index.d.ts +3 -0
  41. package/lib/cjs/components/Composer/TypeSwitchButtonGroup/index.js +5 -0
  42. package/lib/cjs/components/Composer/constants.d.ts +1 -0
  43. package/lib/cjs/components/Composer/constants.js +4 -0
  44. package/lib/cjs/components/Composer/index.d.ts +2 -3
  45. package/lib/cjs/components/Composer/index.js +1 -6
  46. package/lib/cjs/components/ComposerIconButton/ComposerIconButton.d.ts +2 -1
  47. package/lib/cjs/components/ComposerIconButton/ComposerIconButton.js +8 -8
  48. package/lib/cjs/components/Editor/Editor.js +14 -5
  49. package/lib/cjs/components/Feed/prefetchedData.d.ts +2 -368
  50. package/lib/cjs/components/Feed/prefetchedData.js +17 -16
  51. package/lib/cjs/components/FeedObject/Actions/Share/Share.js +2 -2
  52. package/lib/cjs/components/FeedObject/FeedObject.d.ts +2 -2
  53. package/lib/cjs/components/FeedObject/FeedObject.js +5 -5
  54. package/lib/cjs/components/FeedObjectMediaPreview/FeedObjectMediaPreview.d.ts +38 -0
  55. package/lib/cjs/components/FeedObjectMediaPreview/FeedObjectMediaPreview.js +66 -0
  56. package/lib/cjs/components/FeedObjectMediaPreview/index.d.ts +3 -0
  57. package/lib/cjs/components/FeedObjectMediaPreview/index.js +5 -0
  58. package/lib/cjs/components/InlineComposerWidget/InlineComposerWidget.d.ts +25 -33
  59. package/lib/cjs/components/InlineComposerWidget/InlineComposerWidget.js +34 -67
  60. package/lib/cjs/components/InlineComposerWidget/Skeleton.d.ts +4 -5
  61. package/lib/cjs/components/InlineComposerWidget/Skeleton.js +17 -37
  62. package/lib/cjs/components/InlineComposerWidget/constants.d.ts +1 -0
  63. package/lib/cjs/components/InlineComposerWidget/constants.js +4 -0
  64. package/lib/cjs/components/LocationAutocomplete/LocationAutocomplete.d.ts +2 -2
  65. package/lib/cjs/components/LocationAutocomplete/LocationAutocomplete.js +4 -2
  66. package/lib/cjs/components/NavigationMenuIconButton/NavigationMenuIconButton.d.ts +1 -1
  67. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +0 -5
  68. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +19 -30
  69. package/lib/cjs/components/NavigationToolbarMobile/Skeleton.js +5 -6
  70. package/lib/cjs/components/NavigationToolbarMobile/constants.d.ts +1 -0
  71. package/lib/cjs/components/NavigationToolbarMobile/constants.js +4 -0
  72. package/lib/cjs/constants/Composer.d.ts +2 -0
  73. package/lib/cjs/constants/Composer.js +4 -2
  74. package/lib/cjs/index.d.ts +12 -12
  75. package/lib/cjs/index.js +14 -17
  76. package/lib/cjs/shared/Lightbox/Lightbox.js +2 -2
  77. package/lib/{esm/shared/Media/Image/PreviewComponent.d.ts → cjs/shared/Media/File/DisplayComponent.d.ts} +1 -11
  78. package/lib/cjs/shared/Media/{Image/PreviewComponent.js → File/DisplayComponent.js} +55 -145
  79. package/lib/{esm/shared/Media/Image/PreviewImage → cjs/shared/Media/File/Lightbox}/index.d.ts +4 -3
  80. package/lib/cjs/shared/Media/File/Lightbox/index.js +37 -0
  81. package/lib/cjs/shared/Media/File/PreviewComponent.d.ts +9 -0
  82. package/lib/cjs/shared/Media/File/PreviewComponent.js +51 -0
  83. package/lib/cjs/shared/Media/File/TriggerButton.d.ts +12 -0
  84. package/lib/cjs/shared/Media/File/TriggerButton.js +112 -0
  85. package/lib/cjs/shared/Media/File/asUploadButton.d.ts +7 -0
  86. package/lib/cjs/shared/Media/File/asUploadButton.js +30 -0
  87. package/lib/cjs/shared/Media/File/constants.d.ts +1 -0
  88. package/lib/cjs/shared/Media/File/constants.js +4 -0
  89. package/lib/cjs/shared/Media/File/filter.d.ts +3 -0
  90. package/lib/cjs/shared/Media/File/filter.js +4 -0
  91. package/lib/cjs/shared/Media/File/index.d.ts +3 -0
  92. package/lib/cjs/shared/Media/File/index.js +16 -0
  93. package/lib/cjs/shared/Media/Link/DisplayComponent.d.ts +20 -0
  94. package/lib/cjs/shared/Media/Link/DisplayComponent.js +69 -0
  95. package/lib/cjs/shared/Media/Link/LayerComponent.d.ts +9 -0
  96. package/lib/cjs/shared/Media/Link/LayerComponent.js +46 -0
  97. package/lib/cjs/shared/Media/Link/PreviewComponent.d.ts +7 -21
  98. package/lib/cjs/shared/Media/Link/PreviewComponent.js +28 -56
  99. package/lib/cjs/shared/Media/Link/TriggerButton.d.ts +4 -0
  100. package/lib/cjs/shared/Media/Link/TriggerButton.js +21 -0
  101. package/lib/cjs/shared/Media/Link/UrlTextField/index.js +1 -2
  102. package/lib/cjs/shared/Media/Link/constants.d.ts +1 -0
  103. package/lib/cjs/shared/Media/Link/constants.js +4 -0
  104. package/lib/cjs/shared/Media/Link/filter.d.ts +3 -0
  105. package/lib/cjs/shared/Media/Link/filter.js +4 -0
  106. package/lib/cjs/shared/Media/Link/index.js +9 -8
  107. package/lib/cjs/shared/Media/Share/DisplayComponent.d.ts +11 -0
  108. package/lib/cjs/shared/Media/Share/DisplayComponent.js +31 -0
  109. package/lib/cjs/shared/Media/Share/constants.d.ts +1 -0
  110. package/lib/cjs/shared/Media/Share/constants.js +4 -0
  111. package/lib/cjs/shared/Media/Share/filter.d.ts +3 -0
  112. package/lib/cjs/shared/Media/Share/filter.js +4 -0
  113. package/lib/cjs/shared/Media/Share/index.js +7 -7
  114. package/lib/cjs/shared/Media/index.d.ts +2 -4
  115. package/lib/cjs/shared/Media/index.js +3 -7
  116. package/lib/cjs/types/composer.d.ts +15 -0
  117. package/lib/cjs/types/composer.js +2 -0
  118. package/lib/cjs/types/media.d.ts +9 -5
  119. package/lib/esm/components/BottomNavigation/BottomNavigation.js +8 -11
  120. package/lib/esm/components/Composer/Attributes/Attributes.d.ts +22 -0
  121. package/lib/esm/components/Composer/Attributes/Attributes.js +38 -0
  122. package/lib/esm/components/Composer/Attributes/index.d.ts +3 -0
  123. package/lib/esm/components/Composer/Attributes/index.js +2 -0
  124. package/lib/esm/components/Composer/Composer.d.ts +61 -84
  125. package/lib/esm/components/Composer/Composer.js +262 -437
  126. package/lib/esm/components/Composer/Content/ContentDiscussion/ContentDiscussion.d.ts +32 -0
  127. package/lib/esm/components/Composer/Content/ContentDiscussion/ContentDiscussion.js +50 -0
  128. package/lib/esm/components/Composer/Content/ContentDiscussion/index.d.ts +3 -0
  129. package/lib/esm/components/Composer/Content/ContentDiscussion/index.js +2 -0
  130. package/lib/esm/components/Composer/Content/ContentPoll/ContentPoll.d.ts +26 -0
  131. package/lib/esm/components/Composer/Content/ContentPoll/ContentPoll.js +127 -0
  132. package/lib/esm/components/Composer/Content/ContentPoll/index.d.ts +3 -0
  133. package/lib/esm/components/Composer/Content/ContentPoll/index.js +2 -0
  134. package/lib/esm/components/Composer/Content/ContentPost/ContentPost.d.ts +32 -0
  135. package/lib/esm/components/Composer/Content/ContentPost/ContentPost.js +49 -0
  136. package/lib/esm/components/Composer/Content/ContentPost/index.d.ts +3 -0
  137. package/lib/esm/components/Composer/Content/ContentPost/index.js +2 -0
  138. package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +11 -0
  139. package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.js +72 -0
  140. package/lib/esm/components/Composer/Layer/AudienceLayer/index.d.ts +3 -0
  141. package/lib/esm/components/Composer/Layer/AudienceLayer/index.js +2 -0
  142. package/lib/esm/components/Composer/Layer/CategoryLayer/CategoryLayer.d.ts +9 -0
  143. package/lib/esm/components/Composer/Layer/CategoryLayer/CategoryLayer.js +39 -0
  144. package/lib/esm/components/Composer/Layer/CategoryLayer/index.d.ts +3 -0
  145. package/lib/esm/components/Composer/Layer/CategoryLayer/index.js +2 -0
  146. package/lib/esm/components/Composer/Layer/CloseLayer/CloseLayer.d.ts +7 -0
  147. package/lib/esm/components/Composer/Layer/CloseLayer/CloseLayer.js +39 -0
  148. package/lib/esm/components/Composer/Layer/CloseLayer/index.d.ts +3 -0
  149. package/lib/esm/components/Composer/Layer/CloseLayer/index.js +2 -0
  150. package/lib/esm/components/Composer/Layer/LocationLayer/LocationLayer.d.ts +9 -0
  151. package/lib/esm/components/Composer/Layer/LocationLayer/LocationLayer.js +39 -0
  152. package/lib/esm/components/Composer/Layer/LocationLayer/index.d.ts +3 -0
  153. package/lib/esm/components/Composer/Layer/LocationLayer/index.js +2 -0
  154. package/lib/esm/components/Composer/Skeleton.d.ts +0 -4
  155. package/lib/esm/components/Composer/Skeleton.js +6 -68
  156. package/lib/esm/components/Composer/TypeSwitchButtonGroup/TypeSwitchButtonGroup.d.ts +6 -0
  157. package/lib/esm/components/Composer/TypeSwitchButtonGroup/TypeSwitchButtonGroup.js +44 -0
  158. package/lib/esm/components/Composer/TypeSwitchButtonGroup/index.d.ts +3 -0
  159. package/lib/esm/components/Composer/TypeSwitchButtonGroup/index.js +2 -0
  160. package/lib/esm/components/Composer/constants.d.ts +1 -0
  161. package/lib/esm/components/Composer/constants.js +1 -0
  162. package/lib/esm/components/Composer/index.d.ts +2 -3
  163. package/lib/esm/components/Composer/index.js +1 -3
  164. package/lib/esm/components/ComposerIconButton/ComposerIconButton.d.ts +2 -1
  165. package/lib/esm/components/ComposerIconButton/ComposerIconButton.js +8 -8
  166. package/lib/esm/components/Editor/Editor.js +16 -7
  167. package/lib/esm/components/Feed/Feed.js +4 -4
  168. package/lib/esm/components/Feed/prefetchedData.d.ts +2 -368
  169. package/lib/esm/components/Feed/prefetchedData.js +17 -16
  170. package/lib/esm/components/FeedObject/Actions/Share/Share.js +4 -4
  171. package/lib/esm/components/FeedObject/FeedObject.d.ts +2 -2
  172. package/lib/esm/components/FeedObject/FeedObject.js +8 -8
  173. package/lib/esm/components/FeedObjectMediaPreview/FeedObjectMediaPreview.d.ts +38 -0
  174. package/lib/esm/components/FeedObjectMediaPreview/FeedObjectMediaPreview.js +64 -0
  175. package/lib/esm/components/FeedObjectMediaPreview/index.d.ts +3 -0
  176. package/lib/esm/components/FeedObjectMediaPreview/index.js +2 -0
  177. package/lib/esm/components/InlineComposerWidget/InlineComposerWidget.d.ts +25 -33
  178. package/lib/esm/components/InlineComposerWidget/InlineComposerWidget.js +31 -64
  179. package/lib/esm/components/InlineComposerWidget/Skeleton.d.ts +4 -5
  180. package/lib/esm/components/InlineComposerWidget/Skeleton.js +15 -35
  181. package/lib/esm/components/InlineComposerWidget/constants.d.ts +1 -0
  182. package/lib/esm/components/InlineComposerWidget/constants.js +1 -0
  183. package/lib/esm/components/LocationAutocomplete/LocationAutocomplete.d.ts +2 -2
  184. package/lib/esm/components/LocationAutocomplete/LocationAutocomplete.js +4 -2
  185. package/lib/esm/components/NavigationMenuIconButton/NavigationMenuIconButton.d.ts +1 -1
  186. package/lib/esm/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
  187. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +0 -5
  188. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +12 -23
  189. package/lib/esm/components/NavigationToolbarMobile/Skeleton.js +3 -4
  190. package/lib/esm/components/NavigationToolbarMobile/constants.d.ts +1 -0
  191. package/lib/esm/components/NavigationToolbarMobile/constants.js +1 -0
  192. package/lib/esm/constants/Composer.d.ts +2 -0
  193. package/lib/esm/constants/Composer.js +3 -1
  194. package/lib/esm/index.d.ts +12 -12
  195. package/lib/esm/index.js +33 -33
  196. package/lib/esm/shared/Lightbox/Lightbox.js +2 -2
  197. package/lib/{cjs/shared/Media/Image/PreviewComponent.d.ts → esm/shared/Media/File/DisplayComponent.d.ts} +1 -11
  198. package/lib/esm/shared/Media/{Image/PreviewComponent.js → File/DisplayComponent.js} +50 -140
  199. package/lib/{cjs/shared/Media/Image/PreviewImage → esm/shared/Media/File/Lightbox}/index.d.ts +4 -3
  200. package/lib/esm/shared/Media/File/Lightbox/index.js +34 -0
  201. package/lib/esm/shared/Media/File/PreviewComponent.d.ts +9 -0
  202. package/lib/esm/shared/Media/File/PreviewComponent.js +49 -0
  203. package/lib/esm/shared/Media/File/TriggerButton.d.ts +12 -0
  204. package/lib/esm/shared/Media/File/TriggerButton.js +110 -0
  205. package/lib/esm/shared/Media/File/asUploadButton.d.ts +7 -0
  206. package/lib/esm/shared/Media/File/asUploadButton.js +28 -0
  207. package/lib/esm/shared/Media/File/constants.d.ts +1 -0
  208. package/lib/esm/shared/Media/File/constants.js +1 -0
  209. package/lib/esm/shared/Media/File/filter.d.ts +3 -0
  210. package/lib/esm/shared/Media/File/filter.js +2 -0
  211. package/lib/esm/shared/Media/File/index.d.ts +3 -0
  212. package/lib/esm/shared/Media/File/index.js +13 -0
  213. package/lib/esm/shared/Media/Link/DisplayComponent.d.ts +20 -0
  214. package/lib/esm/shared/Media/Link/DisplayComponent.js +67 -0
  215. package/lib/esm/shared/Media/Link/LayerComponent.d.ts +9 -0
  216. package/lib/esm/shared/Media/Link/LayerComponent.js +44 -0
  217. package/lib/esm/shared/Media/Link/PreviewComponent.d.ts +7 -21
  218. package/lib/esm/shared/Media/Link/PreviewComponent.js +27 -54
  219. package/lib/esm/shared/Media/Link/TriggerButton.d.ts +4 -0
  220. package/lib/esm/shared/Media/Link/TriggerButton.js +19 -0
  221. package/lib/esm/shared/Media/Link/UrlTextField/index.js +2 -3
  222. package/lib/esm/shared/Media/Link/constants.d.ts +1 -0
  223. package/lib/esm/shared/Media/Link/constants.js +1 -0
  224. package/lib/esm/shared/Media/Link/filter.d.ts +3 -0
  225. package/lib/esm/shared/Media/Link/filter.js +2 -0
  226. package/lib/esm/shared/Media/Link/index.js +9 -8
  227. package/lib/esm/shared/Media/Share/DisplayComponent.d.ts +11 -0
  228. package/lib/esm/shared/Media/Share/DisplayComponent.js +29 -0
  229. package/lib/esm/shared/Media/Share/constants.d.ts +1 -0
  230. package/lib/esm/shared/Media/Share/constants.js +1 -0
  231. package/lib/esm/shared/Media/Share/filter.d.ts +3 -0
  232. package/lib/esm/shared/Media/Share/filter.js +2 -0
  233. package/lib/esm/shared/Media/Share/index.js +7 -7
  234. package/lib/esm/shared/Media/index.d.ts +2 -4
  235. package/lib/esm/shared/Media/index.js +2 -4
  236. package/lib/esm/types/composer.d.ts +15 -0
  237. package/lib/esm/types/composer.js +1 -0
  238. package/lib/esm/types/media.d.ts +9 -5
  239. package/lib/umd/react-ui.js +1 -1
  240. package/package.json +7 -7
  241. package/lib/cjs/components/Composer/Audience/Audience.d.ts +0 -71
  242. package/lib/cjs/components/Composer/Audience/Audience.js +0 -69
  243. package/lib/cjs/components/Composer/Audience/index.d.ts +0 -3
  244. package/lib/cjs/components/Composer/Poll/Poll.d.ts +0 -31
  245. package/lib/cjs/components/Composer/Poll/Poll.js +0 -151
  246. package/lib/cjs/components/Composer/Poll/index.d.ts +0 -3
  247. package/lib/cjs/shared/Media/Document/EditButton.d.ts +0 -2
  248. package/lib/cjs/shared/Media/Document/EditButton.js +0 -10
  249. package/lib/cjs/shared/Media/Document/EditComponent.d.ts +0 -3
  250. package/lib/cjs/shared/Media/Document/EditComponent.js +0 -103
  251. package/lib/cjs/shared/Media/Document/PreviewComponent.d.ts +0 -3
  252. package/lib/cjs/shared/Media/Document/PreviewComponent.js +0 -43
  253. package/lib/cjs/shared/Media/Document/index.d.ts +0 -3
  254. package/lib/cjs/shared/Media/Document/index.js +0 -16
  255. package/lib/cjs/shared/Media/Image/EditButton.d.ts +0 -2
  256. package/lib/cjs/shared/Media/Image/EditButton.js +0 -10
  257. package/lib/cjs/shared/Media/Image/EditComponent.d.ts +0 -3
  258. package/lib/cjs/shared/Media/Image/EditComponent.js +0 -102
  259. package/lib/cjs/shared/Media/Image/PreviewImage/index.js +0 -41
  260. package/lib/cjs/shared/Media/Image/index.d.ts +0 -3
  261. package/lib/cjs/shared/Media/Image/index.js +0 -16
  262. package/lib/cjs/shared/Media/Link/EditButton.d.ts +0 -2
  263. package/lib/cjs/shared/Media/Link/EditButton.js +0 -10
  264. package/lib/cjs/shared/Media/Link/EditComponent.d.ts +0 -3
  265. package/lib/cjs/shared/Media/Link/EditComponent.js +0 -46
  266. package/lib/cjs/shared/Media/Share/PreviewComponent.d.ts +0 -7
  267. package/lib/cjs/shared/Media/Share/PreviewComponent.js +0 -32
  268. package/lib/cjs/shared/Media/Video/EditButton.d.ts +0 -2
  269. package/lib/cjs/shared/Media/Video/EditButton.js +0 -10
  270. package/lib/cjs/shared/Media/Video/EditComponent.d.ts +0 -3
  271. package/lib/cjs/shared/Media/Video/EditComponent.js +0 -89
  272. package/lib/cjs/shared/Media/Video/PreviewComponent.d.ts +0 -19
  273. package/lib/cjs/shared/Media/Video/PreviewComponent.js +0 -37
  274. package/lib/cjs/shared/Media/Video/index.d.ts +0 -3
  275. package/lib/cjs/shared/Media/Video/index.js +0 -16
  276. package/lib/cjs/shared/MediasPreview/index.d.ts +0 -18
  277. package/lib/cjs/shared/MediasPreview/index.js +0 -44
  278. package/lib/esm/components/Composer/Audience/Audience.d.ts +0 -71
  279. package/lib/esm/components/Composer/Audience/Audience.js +0 -66
  280. package/lib/esm/components/Composer/Audience/index.d.ts +0 -3
  281. package/lib/esm/components/Composer/Audience/index.js +0 -2
  282. package/lib/esm/components/Composer/Poll/Poll.d.ts +0 -31
  283. package/lib/esm/components/Composer/Poll/Poll.js +0 -149
  284. package/lib/esm/components/Composer/Poll/index.d.ts +0 -3
  285. package/lib/esm/components/Composer/Poll/index.js +0 -2
  286. package/lib/esm/shared/Media/Document/EditButton.d.ts +0 -2
  287. package/lib/esm/shared/Media/Document/EditButton.js +0 -7
  288. package/lib/esm/shared/Media/Document/EditComponent.d.ts +0 -3
  289. package/lib/esm/shared/Media/Document/EditComponent.js +0 -101
  290. package/lib/esm/shared/Media/Document/PreviewComponent.d.ts +0 -3
  291. package/lib/esm/shared/Media/Document/PreviewComponent.js +0 -41
  292. package/lib/esm/shared/Media/Document/index.d.ts +0 -3
  293. package/lib/esm/shared/Media/Document/index.js +0 -13
  294. package/lib/esm/shared/Media/Image/EditButton.d.ts +0 -2
  295. package/lib/esm/shared/Media/Image/EditButton.js +0 -7
  296. package/lib/esm/shared/Media/Image/EditComponent.d.ts +0 -3
  297. package/lib/esm/shared/Media/Image/EditComponent.js +0 -100
  298. package/lib/esm/shared/Media/Image/PreviewImage/index.js +0 -38
  299. package/lib/esm/shared/Media/Image/index.d.ts +0 -3
  300. package/lib/esm/shared/Media/Image/index.js +0 -13
  301. package/lib/esm/shared/Media/Link/EditButton.d.ts +0 -2
  302. package/lib/esm/shared/Media/Link/EditButton.js +0 -7
  303. package/lib/esm/shared/Media/Link/EditComponent.d.ts +0 -3
  304. package/lib/esm/shared/Media/Link/EditComponent.js +0 -43
  305. package/lib/esm/shared/Media/Share/PreviewComponent.d.ts +0 -7
  306. package/lib/esm/shared/Media/Share/PreviewComponent.js +0 -29
  307. package/lib/esm/shared/Media/Video/EditButton.d.ts +0 -2
  308. package/lib/esm/shared/Media/Video/EditButton.js +0 -7
  309. package/lib/esm/shared/Media/Video/EditComponent.d.ts +0 -3
  310. package/lib/esm/shared/Media/Video/EditComponent.js +0 -87
  311. package/lib/esm/shared/Media/Video/PreviewComponent.d.ts +0 -19
  312. package/lib/esm/shared/Media/Video/PreviewComponent.js +0 -34
  313. package/lib/esm/shared/Media/Video/index.d.ts +0 -3
  314. package/lib/esm/shared/Media/Video/index.js +0 -13
  315. package/lib/esm/shared/MediasPreview/index.d.ts +0 -18
  316. package/lib/esm/shared/MediasPreview/index.js +0 -42
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LOCATION_VIEW = exports.POLL_VIEW = exports.AUDIENCE_VIEW = exports.MAIN_VIEW = void 0;
4
3
  const tslib_1 = require("tslib");
5
4
  const react_1 = tslib_1.__importStar(require("react"));
6
5
  const types_1 = require("@selfcommunity/types");
@@ -13,100 +12,57 @@ const styles_1 = require("@mui/material/styles");
13
12
  const Composer_1 = require("../../constants/Composer");
14
13
  const Media_1 = require("../../constants/Media");
15
14
  const LoadingButton_1 = tslib_1.__importDefault(require("@mui/lab/LoadingButton"));
16
- const Audience_1 = tslib_1.__importDefault(require("./Audience"));
17
- const CategoryAutocomplete_1 = tslib_1.__importDefault(require("../CategoryAutocomplete"));
15
+ const AudienceLayer_1 = tslib_1.__importDefault(require("./Layer/AudienceLayer"));
18
16
  const utils_1 = require("@selfcommunity/utils");
19
17
  const classnames_1 = tslib_1.__importDefault(require("classnames"));
20
- const Poll_1 = tslib_1.__importDefault(require("../FeedObject/Poll"));
21
- const Editor_1 = tslib_1.__importDefault(require("../Editor"));
22
- const Media_2 = require("../../shared/Media");
23
- const MediasPreview_1 = tslib_1.__importDefault(require("../../shared/MediasPreview"));
24
- const Poll_2 = tslib_1.__importDefault(require("./Poll"));
25
- const LocationAutocomplete_1 = tslib_1.__importDefault(require("../LocationAutocomplete"));
26
- const TagChip_1 = tslib_1.__importDefault(require("../../shared/TagChip"));
27
- const index_1 = require("./index");
18
+ const ContentPoll_1 = tslib_1.__importDefault(require("./Content/ContentPoll"));
28
19
  const notistack_1 = require("notistack");
29
20
  const system_1 = require("@mui/system");
30
21
  const editor_1 = require("../../utils/editor");
22
+ const TypeSwitchButtonGroup_1 = tslib_1.__importDefault(require("./TypeSwitchButtonGroup"));
23
+ const ContentPost_1 = tslib_1.__importDefault(require("./Content/ContentPost"));
24
+ const CategoryLayer_1 = tslib_1.__importDefault(require("./Layer/CategoryLayer"));
25
+ const LocationLayer_1 = tslib_1.__importDefault(require("./Layer/LocationLayer"));
26
+ const ContentDiscussion_1 = tslib_1.__importDefault(require("./Content/ContentDiscussion"));
27
+ const Media_2 = require("../../shared/Media");
28
+ const Attributes_1 = tslib_1.__importDefault(require("./Attributes"));
29
+ const constants_1 = require("./constants");
30
+ const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
31
+ const CloseLayer_1 = tslib_1.__importDefault(require("./Layer/CloseLayer"));
31
32
  const DialogTransition = (0, react_1.forwardRef)(function Transition(props, ref) {
32
33
  return react_1.default.createElement(material_1.Fade, Object.assign({ ref: ref }, props));
33
34
  });
34
- const TypeInput = (0, styles_1.styled)(material_1.InputBase, {
35
- slot: 'Root',
36
- overridesResolver: (props, styles) => styles.root
37
- })(({ theme }) => ({
38
- '&.Mui-InputBase-root': {
39
- 'label + &': {
40
- marginTop: theme.spacing(3)
41
- }
42
- },
43
- '& .Mui-InputBase-input': {
44
- position: 'relative',
45
- backgroundColor: theme.palette.background.paper,
46
- border: 0,
47
- padding: '10px 26px 10px 12px'
48
- }
49
- }));
50
- const PREFIX = 'SCComposer';
51
35
  const classes = {
52
- root: `${PREFIX}-root`,
53
- ios: `${PREFIX}-ios`,
54
- writing: `${PREFIX}-writing`,
55
- title: `${PREFIX}-title`,
56
- titleDense: `${PREFIX}-title-dense`,
57
- types: `${PREFIX}-types`,
58
- avatar: `${PREFIX}-avatar`,
59
- content: `${PREFIX}-content`,
60
- mediaContent: `${PREFIX}-mediaContent`,
61
- audienceContent: `${PREFIX}-audienceContent`,
62
- locationContent: `${PREFIX}-locationContent`,
63
- block: `${PREFIX}-block`,
64
- editor: `${PREFIX}-editor`,
65
- divider: `${PREFIX}-divider`,
66
- medias: `${PREFIX}-medias`,
67
- location: `${PREFIX}-location`,
68
- audience: `${PREFIX}-audience`,
69
- mediasActions: `${PREFIX}-mediasActions`,
70
- mediasActionsTitle: `${PREFIX}-mediasActionsTitle`,
71
- mediasActionsActions: `${PREFIX}-mediasActionsActions`,
72
- sortableMedia: `${PREFIX}-sortableMedia`,
73
- sortableMediaCover: `${PREFIX}-sortableMediaCover`,
74
- links: `${PREFIX}-links`,
75
- actions: `${PREFIX}-actions`,
76
- mediaActions: `${PREFIX}-media-actions`,
77
- filterActions: `${PREFIX}-filter-actions`,
78
- actionInput: `${PREFIX}-actionInput`,
79
- badgeError: `${PREFIX}-badgeError`
36
+ root: `${constants_1.PREFIX}-root`,
37
+ ios: `${constants_1.PREFIX}-ios`,
38
+ title: `${constants_1.PREFIX}-title`,
39
+ types: `${constants_1.PREFIX}-types`,
40
+ content: `${constants_1.PREFIX}-content`,
41
+ attributes: `${constants_1.PREFIX}-attributes`,
42
+ medias: `${constants_1.PREFIX}-medias`,
43
+ actions: `${constants_1.PREFIX}-actions`,
44
+ layerTransitionRoot: `${constants_1.PREFIX}-layer-transition-root`
80
45
  };
81
46
  const Root = (0, styles_1.styled)(material_1.Dialog, {
82
- name: PREFIX,
47
+ name: constants_1.PREFIX,
83
48
  slot: 'Root',
84
49
  overridesResolver: (props, styles) => styles.root
85
50
  })(() => ({}));
86
- exports.MAIN_VIEW = 'main';
87
- exports.AUDIENCE_VIEW = 'audience';
88
- exports.POLL_VIEW = 'poll';
89
- exports.LOCATION_VIEW = 'location';
90
- const AUDIENCE_ALL = 'all';
91
- const AUDIENCE_TAG = 'tag';
92
- const PREFERENCES = [
93
- react_core_1.SCPreferences.CONFIGURATIONS_POST_TYPE_ENABLED,
94
- react_core_1.SCPreferences.CONFIGURATIONS_DISCUSSION_TYPE_ENABLED,
95
- react_core_1.SCPreferences.ADDONS_POST_GEOLOCATION_ENABLED,
96
- react_core_1.SCPreferences.ADDONS_POLLS_ENABLED,
97
- react_core_1.SCPreferences.ADDONS_VIDEO_UPLOAD_ENABLED
98
- ];
51
+ const LayerTransitionRoot = (0, styles_1.styled)(material_1.Slide, {
52
+ name: constants_1.PREFIX,
53
+ slot: 'LayerTransitionRoot',
54
+ overridesResolver: (props, styles) => styles.layerTransitionRoot
55
+ })(({ theme }) => ({}));
99
56
  const COMPOSER_INITIAL_STATE = {
100
57
  id: null,
101
58
  type: null,
102
59
  title: '',
103
60
  titleError: null,
104
- text: '',
105
- textError: null,
61
+ html: '',
62
+ htmlError: null,
106
63
  categories: [],
107
64
  categoriesError: null,
108
- audience: AUDIENCE_ALL,
109
- addressing: [],
65
+ addressing: null,
110
66
  addressingError: null,
111
67
  medias: [],
112
68
  poll: null,
@@ -128,6 +84,14 @@ const reducer = (state, action) => {
128
84
  *
129
85
  *
130
86
  * The Composer component contains the logic around the creation of [Post](https://developers.selfcommunity.com/docs/apireference/v2/post/create_a_post) and [Discussion](https://developers.selfcommunity.com/docs/apireference/v2/discussion/create_a_discussion) objects.
87
+ *
88
+ *
89
+ :::info
90
+ To prevent the editor toolbar and action botton bar being hidden underneath the Virtual Keyboard you need to set the `interactive-widget=resizes-content` on meta viewport.
91
+ This works on chrome for android.
92
+ For iOS devices there is a lack of support of this meta so we force the blur event when the user start dragging.
93
+ [More information](https://bram.us/2021/09/13/prevent-items-from-being-hidden-underneath-the-virtual-keyboard-by-means-of-the-virtualkeyboard-api/)
94
+ :::
131
95
 
132
96
  #### Import
133
97
  ```jsx
@@ -141,30 +105,14 @@ const reducer = (state, action) => {
141
105
  |Rule Name|Global class|Description|
142
106
  |---|---|---|
143
107
  |root|.SCComposer-root|Styles applied to the root element.|
144
- |writing|.SCComposer-writing|Styles applied to the root element when user is writing in the editor.|
108
+ |ios|.SCComposer-ios|Styles applied to the root element when the device is ios.|
145
109
  |title|.SCComposer-title|Styles applied to the title element.|
146
- |titleDense|.SCComposer-title-dense|Styles applied to the dense title element.|
147
110
  |types|.SCComposer-types|Styles applied to the types element.|
148
- |avatar|.SCComposer-avatar|Styles applied to the avatar element.|
149
111
  |content|.SCComposer-content|Styles applied to the content.|
150
- |mediaContent|.SCComposer-mediaContent|Styles applied to the media content.|
151
- |audienceContent|.SCComposer-audienceContent|Styles applied to the audience content.|
152
- |locationContent|.SCComposer-locationContent|Styles applied to the location content.|
153
- |block|.SCComposer-block|Styles applied to the block element.|
154
- |editor|.SCComposer-editor|Styles applied to the editor element.|
155
- |divider|.SCComposer-divider|Styles applied to the divider element.|
112
+ |attributes|.SCComposer-attributes|Styles applied to the attributes.|
156
113
  |medias|.SCComposer-medias|Styles applied to the medias.|
157
- |location|.SCComposer-location|Styles applied to the location element.|
158
- |audience|.SCComposer-audience|Styles applied to the audience element.|
159
- |mediasActions|.SCComposer-mediasActions|Styles applied to the medias actions section.|
160
- |sortableMedia|.SCComposer-sortableMedia|Styles applied to the sortable media element.|
161
- |sortableMediaCover|.SCComposer-sortableMediaCover|Styles applied to the sortable media cover element.|
162
- |links|.SCComposer-links|Styles applied to the links element.|
163
114
  |actions|.SCComposer-actions|Styles applied to the actions section.|
164
- |mediaActions|.SCComposer-media-actions|Styles applied to the media actions section.|
165
- |filterActions|.SCComposer-filter-actions|Styles applied to the filter actions section.|
166
- |actionInput|.SCComposer-actionInput|Styles applied to the action input element.|
167
- |badgeError|.SCComposer-badgeError|Styles applied to the badge error element.|
115
+ |layerTransitionRoot|.SCComposer-layer-transition-root|Styles applied to the overlay layers (eg. location).|
168
116
 
169
117
 
170
118
  * @param inProps
@@ -173,33 +121,26 @@ function Composer(inProps) {
173
121
  // PROPS
174
122
  const props = (0, system_1.useThemeProps)({
175
123
  props: inProps,
176
- name: PREFIX
124
+ name: constants_1.PREFIX
177
125
  });
178
- const { feedObjectId = null, feedObjectType = null, feedObject = null, defaultValue = {}, view = exports.MAIN_VIEW, mediaObjectTypes = [Media_2.Image, Media_2.Document, Media_2.Link, Media_2.Share], EditorProps = null, onClose = null, onSuccess = null, maxWidth } = props, rest = tslib_1.__rest(props, ["feedObjectId", "feedObjectType", "feedObject", "defaultValue", "view", "mediaObjectTypes", "EditorProps", "onClose", "onSuccess", "maxWidth"]);
126
+ const { feedObjectId = null, feedObjectType = null, feedObject = null, defaultValue = {}, mediaObjectTypes = [Media_2.File, Media_2.Link, Media_2.Share], EditorProps = {}, onClose = null, onSuccess = null, maxWidth } = props, rest = tslib_1.__rest(props, ["feedObjectId", "feedObjectType", "feedObject", "defaultValue", "mediaObjectTypes", "EditorProps", "onClose", "onSuccess", "maxWidth"]);
179
127
  // Context
180
- const scPrefernces = (0, react_core_1.useSCPreferences)();
128
+ const { preferences, features } = (0, react_core_1.useSCPreferences)();
181
129
  const scUserContext = (0, react_core_1.useSCUser)();
182
130
  const { enqueueSnackbar } = (0, notistack_1.useSnackbar)();
183
131
  // HOOKS
184
- const { scAddressingTags } = (0, react_core_1.useSCFetchAddressingTagList)({ fetch: rest.open });
185
132
  const theme = (0, styles_1.useTheme)();
186
133
  const fullScreen = (0, material_1.useMediaQuery)(theme.breakpoints.down('md'), { noSsr: typeof window !== 'undefined' });
187
134
  // State variables
188
135
  const [isSubmitting, setIsSubmitting] = (0, react_1.useState)(false);
189
- const [_view, setView] = (0, react_1.useState)(view);
190
- const [composerTypes, setComposerTypes] = (0, react_1.useState)([]);
191
- const [mediaChunks, setMediaChunks] = (0, react_1.useState)([]);
192
- const [editorFocused, setEditorFocused] = (0, react_1.useState)(false);
193
- const [state, dispatch] = (0, react_1.useReducer)(reducer, Object.assign(Object.assign(Object.assign({}, COMPOSER_INITIAL_STATE), defaultValue), { view, key: (0, utils_1.random)() }));
194
- const { key, id, type, title, titleError, text, categories, addressing, audience, medias, poll, pollError, location, error } = state;
195
- const addMedia = (media) => {
196
- dispatch({ type: 'medias', value: [...medias, media] });
197
- };
136
+ const [layer, setLayer] = (0, react_1.useState)();
137
+ const [state, dispatch] = (0, react_1.useReducer)(reducer, Object.assign(Object.assign(Object.assign({}, COMPOSER_INITIAL_STATE), defaultValue), { key: (0, utils_1.random)() }));
138
+ const { key, id, type, title, titleError, html, categories, addressing, audience, medias, poll, pollError, location, error } = state;
198
139
  const destructureFeedObject = (_feedObject) => {
199
- if (_feedObject.type === Composer_1.COMPOSER_TYPE_POST) {
140
+ if (_feedObject.type === types_1.SCContributionType.POST) {
200
141
  _feedObject = _feedObject;
201
142
  }
202
- else if (_feedObject.type === Composer_1.COMPOSER_TYPE_DISCUSSION) {
143
+ else if (_feedObject.type === types_1.SCContributionType.DISCUSSION) {
203
144
  _feedObject = _feedObject;
204
145
  }
205
146
  else {
@@ -210,11 +151,10 @@ function Composer(inProps) {
210
151
  type: 'multiple',
211
152
  value: {
212
153
  id: _feedObject.id,
213
- type: _feedObject.type,
154
+ type: _feedObject.poll ? Composer_1.COMPOSER_TYPE_POLL : feedObject.type,
214
155
  title: _feedObject.title,
215
- text: _feedObject.html,
156
+ html: _feedObject.html,
216
157
  categories: _feedObject.categories,
217
- audience: _feedObject.addressing ? AUDIENCE_TAG : AUDIENCE_ALL,
218
158
  addressing: _feedObject.addressing,
219
159
  medias: _feedObject.medias,
220
160
  poll: _feedObject.poll,
@@ -228,43 +168,25 @@ function Composer(inProps) {
228
168
  }
229
169
  };
230
170
  // Edit state variables
231
- const editMode = Boolean((feedObjectId && feedObjectType) || feedObject);
171
+ const editMode = (0, react_1.useMemo)(() => Boolean((feedObjectId && feedObjectType) || feedObject), [feedObjectId, feedObjectType, feedObject]);
232
172
  const [isLoading, setIsLoading] = (0, react_1.useState)(editMode);
233
173
  const [loadError, setLoadError] = (0, react_1.useState)(false);
234
174
  // REFS
175
+ const dialogRef = (0, react_1.useRef)();
235
176
  const unloadRef = (0, react_1.useRef)(false);
236
- let titleRef = (0, react_1.useRef)();
237
- let editorRef = (0, react_1.useRef)();
238
- // Create a ref for medias becaouse of state update error on chunk upload
239
- const mediasRef = (0, react_1.useRef)({ medias, mediaChunks, addMedia, setMediaChunks });
240
- mediasRef.current = { medias, mediaChunks, addMedia, setMediaChunks };
241
- /*
242
- * Compute preferences
243
- */
244
- const preferences = (0, react_1.useMemo)(() => {
245
- const _preferences = {};
246
- PREFERENCES.map((p) => (_preferences[p] = p in scPrefernces.preferences ? scPrefernces.preferences[p].value : null));
247
- return _preferences;
248
- }, [scPrefernces.preferences]);
249
- /*
250
- * Compose the enabled types of posts that can be created based on preferences
251
- */
252
- const setEnabledComposerTypes = () => {
253
- const types = [];
254
- if (preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_TYPE_ENABLED]) {
255
- types.push(Composer_1.COMPOSER_TYPE_POST);
256
- }
257
- if (preferences[react_core_1.SCPreferences.CONFIGURATIONS_DISCUSSION_TYPE_ENABLED]) {
258
- types.push(Composer_1.COMPOSER_TYPE_DISCUSSION);
259
- }
260
- if (!type) {
261
- dispatch({ type: 'type', value: preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_TYPE_ENABLED] ? Composer_1.COMPOSER_TYPE_POST : Composer_1.COMPOSER_TYPE_DISCUSSION });
262
- }
263
- if (JSON.stringify(composerTypes) !== JSON.stringify(types)) {
264
- setComposerTypes(types);
265
- }
266
- };
267
- setEnabledComposerTypes();
177
+ // Create a ref for medias because of state update error on chunk upload
178
+ const mediasRef = (0, react_1.useRef)({ medias });
179
+ mediasRef.current = { medias };
180
+ // MEMO
181
+ const hasPoll = (0, react_1.useMemo)(() => {
182
+ return poll && poll.title.length > 0 && poll.title.length < Composer_1.COMPOSER_TITLE_MAX_LENGTH && poll.choices.length >= Composer_1.COMPOSER_POLL_MIN_CHOICES;
183
+ }, [poll]);
184
+ const canSubmit = (0, react_1.useMemo)(() => {
185
+ return !isLoading && ((type === types_1.SCContributionType.DISCUSSION && title.length > 0 && title.length < Composer_1.COMPOSER_TITLE_MAX_LENGTH) ||
186
+ (type === types_1.SCContributionType.POST && ((0, utils_1.stripHtml)(html).length > 0 || medias.length > 0 || hasPoll)) ||
187
+ (type === Composer_1.COMPOSER_TYPE_POLL && hasPoll));
188
+ }, [isLoading, type, title, html, medias, hasPoll]);
189
+ const isIOS = (0, react_1.useMemo)(() => (0, utils_1.iOS)(), []);
268
190
  // Load feed object
269
191
  (0, react_1.useEffect)(() => {
270
192
  if (!editMode) {
@@ -288,11 +210,9 @@ function Composer(inProps) {
288
210
  })
289
211
  .then(() => setIsLoading(false));
290
212
  }, [editMode]);
291
- // Props update
292
- (0, react_1.useEffect)(() => setView(view), [view]);
293
213
  // Prevent unload
294
214
  (0, react_1.useEffect)(() => {
295
- if (!unloadRef.current && canSubmit()) {
215
+ if (!unloadRef.current && canSubmit) {
296
216
  unloadRef.current = true;
297
217
  const onUnload = (event) => {
298
218
  event.preventDefault();
@@ -300,129 +220,135 @@ function Composer(inProps) {
300
220
  };
301
221
  window.onbeforeunload = onUnload;
302
222
  }
303
- else if (unloadRef.current && !canSubmit()) {
223
+ else if (unloadRef.current && !canSubmit) {
304
224
  unloadRef.current = false;
305
225
  window.onbeforeunload = null;
306
226
  }
307
- }, [state]);
308
- // Autofocus
227
+ }, [state, canSubmit]);
309
228
  (0, react_1.useEffect)(() => {
310
- if (!rest.open || fullScreen) {
229
+ if (!dialogRef.current || !isIOS) {
311
230
  return;
312
231
  }
313
- if (type === Composer_1.COMPOSER_TYPE_DISCUSSION) {
314
- titleRef.current && titleRef.current.focus();
315
- }
316
- else {
317
- editorRef.current && editorRef.current.focus();
318
- }
319
- }, [fullScreen, rest.open, type, editorRef]);
320
- // CHECKS
321
- const hasPoll = () => {
322
- return poll && poll.title.length > 0 && poll.title.length < Composer_1.COMPOSER_TITLE_MAX_LENGTH && poll.choices.length >= Composer_1.COMPOSER_POLL_MIN_CHOICES;
323
- };
324
- const canSubmit = () => {
325
- return ((type === Composer_1.COMPOSER_TYPE_DISCUSSION && title.length > 0 && title.length < Composer_1.COMPOSER_TITLE_MAX_LENGTH) ||
326
- (type === Composer_1.COMPOSER_TYPE_POST && ((0, utils_1.stripHtml)(text).length > 0 || medias.length > 0 || hasPoll())));
327
- };
328
- /* Handlers */
329
- const handleChangeView = (view) => {
330
- return (event) => {
331
- setView(view);
232
+ const handleBlur = () => {
233
+ dialogRef.current.focus();
332
234
  };
333
- };
334
- const handleChangeType = (event, child) => {
335
- const target = event.target;
336
- dispatch({ type: 'type', value: target.value });
337
- };
338
- const handleChangeText = (value) => {
339
- dispatch({ type: 'text', value });
340
- };
341
- const handleChangePoll = (poll) => {
235
+ dialogRef.current.addEventListener("touchstart", handleBlur);
236
+ return () => { var _a; return (_a = dialogRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener("touchstart", handleBlur); };
237
+ }, [dialogRef.current, isIOS]);
238
+ /* Handlers */
239
+ const handleAddLayer = (0, react_1.useCallback)((layer) => setLayer(layer), []);
240
+ const handleRemoveLayer = (0, react_1.useCallback)(() => setLayer(null), []);
241
+ const handleChangeType = (0, react_1.useCallback)((value) => {
242
+ dispatch({ type: 'type', value });
243
+ }, []);
244
+ const handleChangePoll = (0, react_1.useCallback)((content) => {
342
245
  dispatch({
343
246
  type: 'multiple',
344
- value: {
345
- poll: poll,
346
- pollError: poll.title.length > Composer_1.COMPOSER_TITLE_MAX_LENGTH
247
+ value: Object.assign(Object.assign({}, content), { pollError: content.poll.title.length > Composer_1.COMPOSER_TITLE_MAX_LENGTH
347
248
  ? { titleError: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.title.error.maxlength", defaultMessage: "ui.composer.title.error.maxlength" }) }
348
- : null
349
- }
249
+ : null })
350
250
  });
351
- };
352
- const handleChange = (prop) => (event, data) => {
353
- let target = null;
354
- switch (prop) {
355
- case 'title':
356
- target = event.target;
357
- dispatch({
358
- type: 'multiple',
359
- value: {
360
- title: target.value,
361
- titleError: target.value.length > Composer_1.COMPOSER_TITLE_MAX_LENGTH ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.title.error.maxlength", defaultMessage: "ui.composer.title.error.maxlength" })) : null
362
- }
363
- });
364
- break;
365
- case 'categories':
366
- case 'addressing':
367
- dispatch({ type: prop, value: event });
368
- break;
369
- case 'location':
370
- const value = event && (0, utils_1.isObject)(event)
371
- ? event['location']
372
- ? { location: event['location'], lat: event['lat'], lng: event['lng'] }
373
- : { location: event['full_address'], lat: event['lat'], lng: event['lng'] }
374
- : null;
375
- dispatch({ type: prop, value });
376
- break;
377
- case 'audience':
378
- data !== null && dispatch({ type: 'multiple', value: { audience: data, addressing: audience === AUDIENCE_ALL ? [] : audience } });
379
- break;
380
- default:
381
- target = event.target;
382
- dispatch({ type: prop, value: target.value });
383
- break;
251
+ }, []);
252
+ const handleChangeDiscussion = (0, react_1.useCallback)((content) => {
253
+ dispatch({
254
+ type: 'multiple',
255
+ value: Object.assign(Object.assign({}, content), { titleError: content.title.length > Composer_1.COMPOSER_TITLE_MAX_LENGTH ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.title.error.maxlength", defaultMessage: "ui.composer.title.error.maxlength" })) : null })
256
+ });
257
+ }, []);
258
+ const handleChangePost = (0, react_1.useCallback)((content) => {
259
+ dispatch({
260
+ type: 'multiple',
261
+ value: Object.assign({}, content)
262
+ });
263
+ }, []);
264
+ const handleChangeCategories = (0, react_1.useCallback)((value) => {
265
+ dispatch({ type: 'categories', value });
266
+ setLayer(null);
267
+ }, []);
268
+ const handleAddCategoryLayer = (0, react_1.useCallback)(() => handleAddLayer({
269
+ name: 'category',
270
+ Component: CategoryLayer_1.default,
271
+ ComponentProps: {
272
+ onClose: handleRemoveLayer,
273
+ onSave: handleChangeCategories,
274
+ defaultValue: categories
384
275
  }
385
- };
386
- const handleClose = (event) => {
387
- if (unloadRef.current) {
388
- window.onbeforeunload = null;
276
+ }), [handleAddLayer, handleRemoveLayer, handleChangeCategories, categories]);
277
+ const handleChangeAudience = (0, react_1.useCallback)((value) => {
278
+ dispatch({ type: 'addressing', value });
279
+ setLayer(null);
280
+ }, []);
281
+ const handleAddAudienceLayer = (0, react_1.useCallback)(() => handleAddLayer({
282
+ name: 'audience',
283
+ Component: AudienceLayer_1.default,
284
+ ComponentProps: {
285
+ onClose: handleRemoveLayer,
286
+ onSave: handleChangeAudience,
287
+ defaultValue: addressing
389
288
  }
390
- onClose && onClose(event);
391
- };
392
- const handleDeletePoll = (event) => {
393
- dispatch({ type: 'poll', value: null });
394
- setView(exports.MAIN_VIEW);
395
- };
396
- const handleDeleteLocation = (event) => {
397
- dispatch({ type: 'location', value: null });
398
- };
399
- const handleDeleteTag = (id) => (event) => {
400
- const _addressing = addressing.filter((t) => t.id !== id);
401
- dispatch({ type: 'multiple', value: { audience: _addressing.length === 0 ? AUDIENCE_ALL : AUDIENCE_TAG, addressing: _addressing } });
402
- };
403
- const handleDeleteMedia = (id, mediaObjectType) => {
404
- return (event) => {
405
- if (id) {
406
- dispatch({ type: 'medias', value: medias.filter((m) => m.id != id) });
407
- }
408
- else if (mediaObjectType) {
409
- dispatch({ type: 'medias', value: medias.filter((m) => !mediaObjectType.filter(m)) });
410
- }
411
- };
412
- };
413
- const handleMediaProgress = (chunks) => {
414
- mediasRef.current.setMediaChunks(chunks);
415
- };
416
- const handleAddMedia = (media) => {
417
- mediasRef.current.addMedia(media);
418
- };
419
- const handleSortMedia = (newSort) => {
289
+ }), [handleAddLayer, handleRemoveLayer, handleChangeAudience, addressing]);
290
+ const handleChangeLocation = (0, react_1.useCallback)((value) => {
291
+ dispatch({ type: 'location', value });
292
+ setLayer(null);
293
+ }, []);
294
+ const handleAddLocationLayer = (0, react_1.useCallback)(() => handleAddLayer({
295
+ name: 'location',
296
+ Component: LocationLayer_1.default,
297
+ ComponentProps: {
298
+ onClose: handleRemoveLayer,
299
+ onSave: handleChangeLocation,
300
+ defaultValue: location
301
+ }
302
+ }), [handleAddLayer, handleRemoveLayer, handleChangeLocation, location]);
303
+ const handleChangeMedias = (0, react_1.useCallback)((value) => {
304
+ const _medias = [...value];
420
305
  dispatch({
421
306
  type: 'medias',
422
- value: [...medias.filter((media) => newSort.findIndex((m) => m.id === media.id) === -1), ...newSort]
307
+ value: [...value]
423
308
  });
424
- };
425
- const handleSubmit = (event) => {
309
+ mediasRef.current.medias = _medias;
310
+ setLayer(null);
311
+ }, []);
312
+ const handleAddMedia = (0, react_1.useCallback)((media) => {
313
+ const _medias = [...mediasRef.current.medias, media];
314
+ dispatch({
315
+ type: 'medias',
316
+ value: _medias
317
+ });
318
+ mediasRef.current.medias = _medias;
319
+ }, []);
320
+ const handleMediaTriggerClick = (0, react_1.useCallback)((mediaObjectType) => (event) => {
321
+ if (mediaObjectType.layerComponent) {
322
+ handleAddLayer({
323
+ name: mediaObjectType.name,
324
+ Component: mediaObjectType.layerComponent,
325
+ ComponentProps: {
326
+ onClose: handleRemoveLayer,
327
+ onSave: handleChangeMedias,
328
+ defaultValue: medias
329
+ }
330
+ });
331
+ }
332
+ }, [handleAddLayer, handleRemoveLayer, handleChangeMedias, medias]);
333
+ const handleChangeAttributes = (0, react_1.useCallback)((content) => {
334
+ dispatch({
335
+ type: 'multiple',
336
+ value: Object.assign({}, content)
337
+ });
338
+ }, []);
339
+ const handleClickAttributes = (0, react_1.useCallback)((attr) => {
340
+ switch (attr) {
341
+ case 'categories':
342
+ handleAddCategoryLayer();
343
+ break;
344
+ case 'addressing':
345
+ handleAddAudienceLayer();
346
+ break;
347
+ }
348
+ }, [handleAddCategoryLayer, handleAddAudienceLayer]);
349
+ const handleSubmit = (0, react_1.useCallback)((event) => {
350
+ event.preventDefault();
351
+ event.stopPropagation();
426
352
  if (react_core_1.UserUtils.isBlocked(scUserContext.user)) {
427
353
  // deny submit action if authenticated user is blocked
428
354
  enqueueSnackbar(react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.common.userBlocked", defaultMessage: "ui.common.userBlocked" }), {
@@ -432,32 +358,29 @@ function Composer(inProps) {
432
358
  return;
433
359
  }
434
360
  // Extract hashtags and add to categories
435
- const _categories = [...categories.map((c) => c.id), ...(0, editor_1.extractHashtags)(text)];
361
+ const _categories = [...categories.map((c) => c.id), ...(0, editor_1.extractHashtags)(html)];
436
362
  const data = {
437
363
  title,
438
- text,
364
+ text: html,
439
365
  medias: medias.map((m) => m.id),
440
366
  categories: _categories.filter((item, index) => _categories.indexOf(item) === index)
441
367
  };
442
- if (preferences[react_core_1.SCPreferences.ADDONS_POLLS_ENABLED] && hasPoll()) {
368
+ if (preferences[react_core_1.SCPreferences.ADDONS_POLLS_ENABLED].value && hasPoll) {
443
369
  data.poll = poll;
444
370
  }
445
- if (preferences[react_core_1.SCPreferences.ADDONS_POST_GEOLOCATION_ENABLED] && location) {
446
- data.location = {
447
- location: location.location,
448
- lat: location.lat,
449
- lng: location.lng
450
- };
371
+ if (preferences[react_core_1.SCPreferences.ADDONS_POST_GEOLOCATION_ENABLED].value && location) {
372
+ data.location = location;
451
373
  }
452
- if (scPrefernces.features.includes(types_1.SCFeatureName.TAGGING) && audience === AUDIENCE_TAG) {
374
+ if (features.includes(types_1.SCFeatureName.TAGGING) && addressing !== null) {
453
375
  data.addressing = addressing.map((t) => t.id);
454
376
  }
455
377
  setIsSubmitting(true);
456
378
  // Finding right url
457
- let url = api_services_1.Endpoints.Composer.url({ type });
379
+ const _type = type === Composer_1.COMPOSER_TYPE_POLL ? types_1.SCContributionType.POST : type;
380
+ let url = api_services_1.Endpoints.Composer.url({ type: _type });
458
381
  let method = api_services_1.Endpoints.Composer.method;
459
382
  if (editMode) {
460
- url = api_services_1.Endpoints.ComposerEdit.url({ type, id });
383
+ url = api_services_1.Endpoints.ComposerEdit.url({ type: feedObjectType ? feedObjectType : _type, id });
461
384
  method = api_services_1.Endpoints.ComposerEdit.method;
462
385
  }
463
386
  // Perform request
@@ -478,185 +401,86 @@ function Composer(inProps) {
478
401
  dispatch({ type: 'multiple', value: (0, api_services_1.formatHttpErrorCode)(error) });
479
402
  })
480
403
  .then(() => setIsSubmitting(false));
481
- };
482
- // MEMO
483
- const _EditorProps = (0, react_1.useMemo)(() => (EditorProps ? EditorProps : { toolbar: true, uploadImage: true }), [EditorProps, type]);
484
- const isIOS = (0, react_1.useMemo)(() => (0, utils_1.iOS)(), []);
404
+ }, [scUserContext.user, feedObjectType, id, type, title, html, categories, addressing, audience, medias, poll, location, hasPoll]);
405
+ const handleClose = (0, react_1.useCallback)((event) => {
406
+ if (unloadRef.current) {
407
+ window.onbeforeunload = null;
408
+ }
409
+ onClose && onClose(event);
410
+ setLayer(null);
411
+ dispatch({ type: 'reset' });
412
+ }, [onClose]);
413
+ const handleClosePrompt = (0, react_1.useCallback)((event) => {
414
+ if (canSubmit) {
415
+ handleAddLayer({
416
+ name: 'close',
417
+ Component: CloseLayer_1.default,
418
+ ComponentProps: {
419
+ onClose: handleRemoveLayer,
420
+ onSave: handleClose
421
+ }
422
+ });
423
+ }
424
+ else {
425
+ handleClose(event);
426
+ }
427
+ }, [canSubmit, handleAddLayer, handleRemoveLayer, handleClose]);
485
428
  // RENDER
486
429
  const hasMediaShare = (0, react_1.useMemo)(() => medias.findIndex((m) => m.type === Media_1.MEDIA_TYPE_SHARE) !== -1, [medias]);
487
- const renderMediaAdornment = (mediaObjectType) => {
488
- return (react_1.default.createElement(material_1.Box, { className: classes.mediasActions },
489
- react_1.default.createElement(material_1.Typography, { className: classes.mediasActionsTitle },
490
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: `ui.composer.media.${mediaObjectType.name}.edit`, defaultMessage: `ui.composer.media.${mediaObjectType.name}.edit` })),
491
- react_1.default.createElement(material_1.Typography, { className: classes.mediasActionsActions },
492
- react_1.default.createElement(material_1.Tooltip, { title: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.edit", defaultMessage: "ui.composer.edit" }) },
493
- react_1.default.createElement(material_1.IconButton, { onClick: handleChangeView(mediaObjectType.name), color: "inherit" },
494
- react_1.default.createElement(Icon_1.default, null, "edit"))),
495
- react_1.default.createElement(material_1.Tooltip, { title: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.delete", defaultMessage: "ui.composer.delete" }) },
496
- react_1.default.createElement(material_1.IconButton, { onClick: handleDeleteMedia(null, mediaObjectType), color: "inherit" },
497
- react_1.default.createElement(Icon_1.default, null, "delete"))))));
498
- };
499
- const renderAudienceView = () => {
500
- return (react_1.default.createElement(react_1.default.Fragment, null,
501
- react_1.default.createElement(material_1.DialogTitle, { className: classes.title },
502
- react_1.default.createElement(material_1.Typography, { component: "div" },
503
- react_1.default.createElement(material_1.IconButton, { onClick: handleChangeView(exports.MAIN_VIEW) },
504
- react_1.default.createElement(Icon_1.default, null, "arrow_back"))),
505
- react_1.default.createElement(material_1.Box, null,
506
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.audience.title", defaultMessage: "ui.composer.audience.title" })),
507
- react_1.default.createElement(material_1.Box, null,
508
- react_1.default.createElement(material_1.Tooltip, { title: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.done", defaultMessage: "ui.composer.done" }) },
509
- react_1.default.createElement(material_1.IconButton, { onClick: handleChangeView(exports.MAIN_VIEW), color: "inherit" },
510
- react_1.default.createElement(Icon_1.default, null, "check"))))),
511
- react_1.default.createElement(material_1.DialogContent, { className: (0, classnames_1.default)(classes.content, classes.audienceContent) },
512
- react_1.default.createElement(material_1.Tabs, { value: audience, onChange: handleChange('audience'), "aria-label": "audience type" },
513
- react_1.default.createElement(material_1.Tab, { value: AUDIENCE_ALL, icon: react_1.default.createElement(Icon_1.default, null, "public"), label: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.audience.all", defaultMessage: "ui.composer.audience.all" }) }),
514
- react_1.default.createElement(material_1.Tab, { value: AUDIENCE_TAG, icon: react_1.default.createElement(Icon_1.default, null, "label"), label: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.audience.tag", defaultMessage: "ui.composer.audience.tag" }) })),
515
- react_1.default.createElement(material_1.Typography, { align: "center", className: classes.block },
516
- audience === AUDIENCE_ALL && (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.audience.all.message", defaultMessage: "ui.composer.audience.all.message" })),
517
- audience === AUDIENCE_TAG && (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.audience.tag.message", defaultMessage: "ui.composer.audience.tag.message" }))),
518
- audience === AUDIENCE_TAG && react_1.default.createElement(Audience_1.default, { onChange: handleChange('addressing'), defaultValue: addressing, tags: scAddressingTags }))));
519
- };
520
- const renderMediaView = (mediaObjectType) => {
521
- return () => {
522
- return (react_1.default.createElement(react_1.default.Fragment, null,
523
- react_1.default.createElement(material_1.DialogTitle, { className: classes.title },
524
- react_1.default.createElement(material_1.Typography, { component: "div" },
525
- react_1.default.createElement("span", null,
526
- react_1.default.createElement(material_1.IconButton, { onClick: handleChangeView(exports.MAIN_VIEW), disabled: mediasRef.current.mediaChunks.length > 0 },
527
- react_1.default.createElement(Icon_1.default, null, "arrow_back")))),
528
- react_1.default.createElement(material_1.Box, null,
529
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: `ui.composer.media.${mediaObjectType.name}.edit`, defaultMessage: `ui.composer.media.${mediaObjectType.name}.edit` })),
530
- react_1.default.createElement(material_1.Box, null,
531
- react_1.default.createElement(material_1.Tooltip, { title: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.done", defaultMessage: "ui.composer.done" }) },
532
- react_1.default.createElement("span", null,
533
- react_1.default.createElement(material_1.IconButton, { onClick: handleChangeView(exports.MAIN_VIEW), color: "inherit", disabled: mediasRef.current.mediaChunks.length > 0 },
534
- react_1.default.createElement(Icon_1.default, null, "check")))))),
535
- react_1.default.createElement(material_1.DialogContent, { className: (0, classnames_1.default)(classes.content, classes.mediaContent) }, react_1.default.createElement(mediaObjectType.editComponent, { medias: medias.filter(mediaObjectType.filter), onProgress: handleMediaProgress, onSuccess: handleAddMedia, onSort: handleSortMedia, onDelete: handleDeleteMedia }))));
536
- };
537
- };
538
- const renderPollView = () => {
539
- return (react_1.default.createElement(react_1.default.Fragment, null,
540
- react_1.default.createElement(material_1.DialogTitle, { className: classes.title },
541
- react_1.default.createElement(material_1.Typography, { component: "div" },
542
- react_1.default.createElement(material_1.IconButton, { onClick: handleChangeView(exports.MAIN_VIEW) },
543
- react_1.default.createElement(Icon_1.default, null, "arrow_back"))),
544
- react_1.default.createElement(material_1.Box, null,
545
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.poll", defaultMessage: "ui.composer.poll" })),
546
- react_1.default.createElement(material_1.Stack, { spacing: 2, direction: "row" },
547
- react_1.default.createElement(react_1.default.Fragment, null,
548
- react_1.default.createElement(material_1.Tooltip, { title: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.delete", defaultMessage: "ui.composer.delete" }) },
549
- react_1.default.createElement("span", null,
550
- react_1.default.createElement(material_1.IconButton, { onClick: handleDeletePoll, color: "inherit", disabled: !hasPoll() },
551
- react_1.default.createElement(Icon_1.default, null, "delete")))),
552
- react_1.default.createElement(material_1.Tooltip, { title: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.done", defaultMessage: "ui.composer.done" }) },
553
- react_1.default.createElement("span", null,
554
- react_1.default.createElement(material_1.IconButton, { onClick: handleChangeView(exports.MAIN_VIEW), color: "inherit", disabled: !hasPoll() },
555
- react_1.default.createElement(Icon_1.default, null, "check"))))))),
556
- react_1.default.createElement(material_1.DialogContent, { className: classes.content },
557
- react_1.default.createElement(Poll_2.default, { onChange: handleChangePoll, value: poll, error: pollError }))));
558
- };
559
- const renderLocationView = () => {
560
- return (react_1.default.createElement(react_1.default.Fragment, null,
561
- react_1.default.createElement(material_1.DialogTitle, { className: classes.title },
562
- react_1.default.createElement(material_1.Typography, { component: "div" },
563
- react_1.default.createElement(material_1.IconButton, { onClick: handleChangeView(exports.MAIN_VIEW) },
564
- react_1.default.createElement(Icon_1.default, null, "arrow_back"))),
565
- react_1.default.createElement(material_1.Box, null,
566
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.locationAutocomplete.title", defaultMessage: "ui.locationAutocomplete.title" })),
567
- react_1.default.createElement(material_1.Box, null,
568
- react_1.default.createElement(material_1.Tooltip, { title: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.done", defaultMessage: "ui.composer.done" }) },
569
- react_1.default.createElement(material_1.IconButton, { onClick: handleChangeView(exports.MAIN_VIEW), color: "inherit" },
570
- react_1.default.createElement(Icon_1.default, null, "check"))))),
571
- react_1.default.createElement(material_1.DialogContent, { className: (0, classnames_1.default)(classes.content, classes.locationContent) },
572
- react_1.default.createElement(LocationAutocomplete_1.default, { onChange: handleChange('location'), defaultValue: location ? { full_address: location.location } : '' }))));
573
- };
574
- const renderMainView = () => {
575
- return (react_1.default.createElement(react_1.default.Fragment, null,
576
- react_1.default.createElement(material_1.DialogTitle, { className: classes.title },
577
- react_1.default.createElement(material_1.Box, null,
578
- react_1.default.createElement(material_1.FormControl, { className: classes.types },
579
- react_1.default.createElement(material_1.Select, { value: type, onChange: handleChangeType, input: react_1.default.createElement(TypeInput, null), disabled: editMode }, composerTypes.map((t) => (react_1.default.createElement(material_1.MenuItem, { value: t, key: t },
580
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: `ui.composer.type.${t}`, defaultMessage: `ui.composer.type.${t}` }))))))),
581
- react_1.default.createElement(material_1.Box, null, !scUserContext.user ? react_1.default.createElement(material_1.Avatar, { className: classes.avatar }) : react_1.default.createElement(material_1.Avatar, { className: classes.avatar, src: scUserContext.user.avatar })),
582
- react_1.default.createElement(material_1.Box, null,
583
- react_1.default.createElement(material_1.IconButton, { onClick: handleClose },
584
- react_1.default.createElement(Icon_1.default, null, "close")))),
585
- react_1.default.createElement(material_1.DialogContent, { className: classes.content },
586
- type === Composer_1.COMPOSER_TYPE_DISCUSSION && (react_1.default.createElement("div", { className: classes.block },
587
- react_1.default.createElement(material_1.TextField, { inputRef: titleRef, label: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.title.label", defaultMessage: "ui.composer.title.label" }), fullWidth: true, variant: "outlined", value: title, multiline: true, onChange: handleChange('title'), InputProps: {
588
- endAdornment: react_1.default.createElement(material_1.Typography, { variant: "body2" }, Composer_1.COMPOSER_TITLE_MAX_LENGTH - title.length)
589
- }, error: Boolean(titleError), helperText: titleError, disabled: isSubmitting }))),
590
- react_1.default.createElement(Editor_1.default, Object.assign({ ref: editorRef }, _EditorProps, { key: `${key}-editor`, className: (0, classnames_1.default)(classes.block, classes.editor), onChange: handleChangeText, onFocus: () => setEditorFocused(true), defaultValue: text, editable: !isSubmitting })),
591
- react_1.default.createElement(material_1.Box, { className: classes.medias },
592
- react_1.default.createElement(MediasPreview_1.default, { medias: medias, mediaObjectTypes: mediaObjectTypes.map((mediaObjectType) => {
593
- return Object.assign(Object.assign({}, mediaObjectType), { previewProps: { adornment: mediaObjectType.editButton !== null ? renderMediaAdornment(mediaObjectType) : null, gallery: false } });
594
- }) })),
595
- poll && react_1.default.createElement(Poll_1.default, { pollObject: poll }),
596
- react_1.default.createElement(material_1.Stack, { spacing: 2, className: classes.audience, direction: "row" },
597
- location && (react_1.default.createElement(material_1.Chip, { icon: react_1.default.createElement(Icon_1.default, null, "add_location_alt"), label: location.location, onDelete: handleDeleteLocation, onClick: handleChangeView(exports.LOCATION_VIEW) })),
598
- audience === AUDIENCE_TAG &&
599
- addressing &&
600
- addressing.map((t) => (react_1.default.createElement(TagChip_1.default, { key: t.id, tag: t, onDelete: handleDeleteTag(t.id), icon: react_1.default.createElement(Icon_1.default, null, "label"), onClick: handleChangeView(exports.AUDIENCE_VIEW) })))),
601
- react_1.default.createElement("div", { className: classes.block },
602
- react_1.default.createElement(CategoryAutocomplete_1.default, { multiple: true, key: `${key}-categories`, onChange: handleChange('categories'), defaultValue: categories, disabled: isSubmitting })),
603
- error && (react_1.default.createElement(material_1.Typography, { className: classes.block, color: "error" },
604
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.error.generic", defaultMessage: "ui.composer.error.generic" })))),
605
- react_1.default.createElement(material_1.DialogActions, { className: classes.actions, onClick: () => setEditorFocused(false) },
606
- react_1.default.createElement(material_1.Typography, { className: classes.mediaActions },
607
- mediaObjectTypes
608
- .filter((mediaObjectType) => mediaObjectType.editButton !== null)
609
- .map((mediaObjectType) => (react_1.default.createElement(mediaObjectType.editButton, { key: mediaObjectType.name, onClick: handleChangeView(mediaObjectType.name), disabled: isSubmitting || hasMediaShare, color: medias.filter(mediaObjectType.filter).length > 0 ? 'primary' : 'default' }))),
610
- (preferences[react_core_1.SCPreferences.ADDONS_POLLS_ENABLED] || react_core_1.UserUtils.isStaff(scUserContext.user)) && (react_1.default.createElement(material_1.IconButton, { "aria-label": "add poll", color: poll ? 'primary' : 'default', disabled: isSubmitting, onClick: handleChangeView(exports.POLL_VIEW) },
611
- react_1.default.createElement(material_1.Badge, { className: classes.badgeError, badgeContent: pollError ? ' ' : null, color: "error" },
612
- react_1.default.createElement(Icon_1.default, null, "bar_chart"))))),
613
- react_1.default.createElement(material_1.Typography, { className: classes.filterActions },
614
- preferences[react_core_1.SCPreferences.ADDONS_POST_GEOLOCATION_ENABLED] && (react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting, onClick: handleChangeView(exports.LOCATION_VIEW), color: location !== null ? 'primary' : 'default' },
615
- react_1.default.createElement(Icon_1.default, null, "add_location_alt"))),
616
- scPrefernces.features.includes(types_1.SCFeatureName.TAGGING) && scAddressingTags.length > 0 && (react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting, onClick: handleChangeView(exports.AUDIENCE_VIEW) }, audience === AUDIENCE_TAG ? react_1.default.createElement(Icon_1.default, null, "label") : react_1.default.createElement(Icon_1.default, null, "public")))),
617
- react_1.default.createElement(LoadingButton_1.default, { onClick: handleSubmit, color: "primary", variant: "contained", disabled: !canSubmit(), loading: isSubmitting },
618
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.submit", defaultMessage: "ui.composer.submit" })))));
619
- };
620
- let child = null;
621
- switch (_view) {
622
- case exports.MAIN_VIEW:
623
- child = renderMainView;
624
- break;
625
- case exports.POLL_VIEW:
626
- child = renderPollView;
627
- break;
628
- case exports.AUDIENCE_VIEW:
629
- child = renderAudienceView;
630
- break;
631
- case exports.LOCATION_VIEW:
632
- child = renderLocationView;
633
- break;
634
- default:
635
- const media = mediaObjectTypes
636
- .filter((mediaObjectType) => mediaObjectType.editComponent !== null)
637
- .find((mv) => mv.name === _view);
638
- child = media ? renderMediaView(media) : renderMainView;
639
- }
640
- if (editMode && isLoading) {
641
- child = () => react_1.default.createElement(index_1.ComposerSkeleton, null);
642
- }
643
- else if (editMode && loadError) {
644
- child = () => (react_1.default.createElement(material_1.Alert, { severity: "error", onClose: handleClose },
645
- react_1.default.createElement(material_1.AlertTitle, null,
646
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.edit.error.title", defaultMessage: "ui.composer.edit.error.title" })),
647
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.edit.error.content", defaultMessage: "ui.composer.edit.error.content" })));
648
- }
649
- const _maxWidth = (0, react_1.useMemo)(() => (maxWidth ? maxWidth : type === Composer_1.COMPOSER_TYPE_DISCUSSION ? 'md' : 'sm'), [maxWidth, type]);
430
+ const content = (0, react_1.useMemo)(() => {
431
+ if (editMode && isLoading) {
432
+ return react_1.default.createElement(Skeleton_1.default, null);
433
+ }
434
+ else if (editMode && loadError) {
435
+ return (react_1.default.createElement(material_1.Alert, { severity: "error", onClose: handleClose },
436
+ react_1.default.createElement(material_1.AlertTitle, null,
437
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.edit.error.title", defaultMessage: "ui.composer.edit.error.title" })),
438
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.edit.error.content", defaultMessage: "ui.composer.edit.error.content" })));
439
+ }
440
+ switch (type) {
441
+ case Composer_1.COMPOSER_TYPE_POLL:
442
+ return react_1.default.createElement(ContentPoll_1.default, { key: key, onChange: handleChangePoll, value: { html, categories, addressing, medias, poll, location }, error: pollError, disabled: isSubmitting });
443
+ case types_1.SCContributionType.DISCUSSION:
444
+ return react_1.default.createElement(ContentDiscussion_1.default, { key: key, value: { title, html, categories, addressing, medias, poll, location }, error: { titleError, error }, onChange: handleChangeDiscussion, disabled: isSubmitting, EditorProps: Object.assign({ toolbar: true, uploadImage: true }, EditorProps) });
445
+ default:
446
+ return react_1.default.createElement(ContentPost_1.default, { key: key, value: { html, categories, addressing, medias, poll, location }, error: { error }, onChange: handleChangePost, disabled: isSubmitting, EditorProps: Object.assign({ toolbar: false, uploadImage: false }, EditorProps) });
447
+ }
448
+ }, [key, type, title, html, categories, addressing, medias, poll, pollError, location, error, handleChangePoll, handleChangePost, isSubmitting]);
650
449
  if (!scUserContext.user && !(scUserContext.loading && open)) {
651
450
  return null;
652
451
  }
653
- return (react_1.default.createElement(Root, Object.assign({ maxWidth: _maxWidth, TransitionComponent: DialogTransition, keepMounted: true, onClose: handleClose }, rest, { className: (0, classnames_1.default)(classes.root, { [classes.writing]: editorFocused, [classes.ios]: isIOS }), fullScreen: fullScreen }),
654
- editorFocused && fullScreen && (react_1.default.createElement(material_1.Box, { className: classes.titleDense },
655
- react_1.default.createElement(material_1.IconButton, { onClick: () => setEditorFocused(false) },
656
- react_1.default.createElement(material_1.Tooltip, { title: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.editorFullScreen.close", defaultMessage: "ui.composer.editorFullScreen.close" }) },
657
- react_1.default.createElement(Icon_1.default, null, "zoom_out_map"))),
658
- react_1.default.createElement(material_1.IconButton, { onClick: handleClose },
659
- react_1.default.createElement(Icon_1.default, null, "close")))),
660
- child()));
452
+ return (react_1.default.createElement(Root, Object.assign({ ref: dialogRef, TransitionComponent: DialogTransition, keepMounted: true, onClose: handleClose }, rest, { className: (0, classnames_1.default)(classes.root, { [classes.ios]: isIOS }), scroll: "body", fullScreen: fullScreen, tabIndex: -1 }),
453
+ react_1.default.createElement("form", { onSubmit: handleSubmit, method: "post" },
454
+ react_1.default.createElement(material_1.DialogTitle, { className: classes.title },
455
+ react_1.default.createElement(material_1.IconButton, { onClick: handleClosePrompt },
456
+ react_1.default.createElement(Icon_1.default, null, "close")),
457
+ react_1.default.createElement(LoadingButton_1.default, { size: "small", type: "submit", color: "secondary", variant: "contained", disabled: !canSubmit, loading: isSubmitting },
458
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.submit", defaultMessage: "ui.composer.submit" }))),
459
+ react_1.default.createElement(material_1.DialogContent, { className: classes.content },
460
+ react_1.default.createElement(Attributes_1.default, { value: { categories, addressing, location }, className: classes.attributes, onChange: handleChangeAttributes, onClick: handleClickAttributes }),
461
+ content,
462
+ medias && medias.length > 0 && react_1.default.createElement(material_1.Box, { className: classes.medias }, mediaObjectTypes.map((mediaObjectType) => {
463
+ if (mediaObjectType.previewComponent) {
464
+ return react_1.default.createElement(mediaObjectType.previewComponent, { key: mediaObjectType.name, value: medias, onChange: handleChangeMedias });
465
+ }
466
+ else if (mediaObjectType.displayComponent) {
467
+ return react_1.default.createElement(mediaObjectType.displayComponent, { key: mediaObjectType.name, value: medias });
468
+ }
469
+ }))),
470
+ !canSubmit && !editMode && react_1.default.createElement(TypeSwitchButtonGroup_1.default, { className: classes.types, onChange: handleChangeType, size: "small", value: type }),
471
+ react_1.default.createElement(material_1.DialogActions, { className: classes.actions },
472
+ mediaObjectTypes
473
+ .filter((mediaObjectType) => mediaObjectType.triggerButton !== null)
474
+ .map((mediaObjectType) => {
475
+ const props = mediaObjectType.layerComponent ? { onClick: handleMediaTriggerClick(mediaObjectType) } : { onAdd: handleAddMedia };
476
+ return (react_1.default.createElement(mediaObjectType.triggerButton, Object.assign({ key: mediaObjectType.name, disabled: isSubmitting || hasMediaShare, color: medias.filter(mediaObjectType.filter).length > 0 ? 'primary' : 'default' }, props)));
477
+ }),
478
+ react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting, onClick: handleAddCategoryLayer },
479
+ react_1.default.createElement(Icon_1.default, null, "category")),
480
+ react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting || !features.includes(types_1.SCFeatureName.TAGGING), onClick: handleAddAudienceLayer }, addressing === null || addressing.length === 0 ? react_1.default.createElement(Icon_1.default, null, "public") : react_1.default.createElement(Icon_1.default, null, "label")),
481
+ preferences[react_core_1.SCPreferences.ADDONS_POST_GEOLOCATION_ENABLED] && (react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting, onClick: handleAddLocationLayer, color: location !== null ? 'primary' : 'default' },
482
+ react_1.default.createElement(Icon_1.default, null, "add_location_alt"))))),
483
+ layer && react_1.default.createElement(LayerTransitionRoot, { className: classes.layerTransitionRoot, in: true, container: dialogRef.current, direction: "left" },
484
+ react_1.default.createElement(layer.Component, Object.assign({}, layer.ComponentProps)))));
661
485
  }
662
486
  exports.default = Composer;