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

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 +53 -84
  7. package/lib/cjs/components/Composer/Composer.js +249 -443
  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 +53 -84
  125. package/lib/esm/components/Composer/Composer.js +246 -439
  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,
@@ -141,30 +97,14 @@ const reducer = (state, action) => {
141
97
  |Rule Name|Global class|Description|
142
98
  |---|---|---|
143
99
  |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.|
100
+ |ios|.SCComposer-ios|Styles applied to the root element when the device is ios.|
145
101
  |title|.SCComposer-title|Styles applied to the title element.|
146
- |titleDense|.SCComposer-title-dense|Styles applied to the dense title element.|
147
102
  |types|.SCComposer-types|Styles applied to the types element.|
148
- |avatar|.SCComposer-avatar|Styles applied to the avatar element.|
149
103
  |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.|
104
+ |attributes|.SCComposer-attributes|Styles applied to the attributes.|
156
105
  |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
106
  |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.|
107
+ |layerTransitionRoot|.SCComposer-layer-transition-root|Styles applied to the overlay layers (eg. location).|
168
108
 
169
109
 
170
110
  * @param inProps
@@ -173,33 +113,26 @@ function Composer(inProps) {
173
113
  // PROPS
174
114
  const props = (0, system_1.useThemeProps)({
175
115
  props: inProps,
176
- name: PREFIX
116
+ name: constants_1.PREFIX
177
117
  });
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"]);
118
+ 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
119
  // Context
180
- const scPrefernces = (0, react_core_1.useSCPreferences)();
120
+ const { preferences, features } = (0, react_core_1.useSCPreferences)();
181
121
  const scUserContext = (0, react_core_1.useSCUser)();
182
122
  const { enqueueSnackbar } = (0, notistack_1.useSnackbar)();
183
123
  // HOOKS
184
- const { scAddressingTags } = (0, react_core_1.useSCFetchAddressingTagList)({ fetch: rest.open });
185
124
  const theme = (0, styles_1.useTheme)();
186
125
  const fullScreen = (0, material_1.useMediaQuery)(theme.breakpoints.down('md'), { noSsr: typeof window !== 'undefined' });
187
126
  // State variables
188
127
  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
- };
128
+ const [layer, setLayer] = (0, react_1.useState)();
129
+ const [state, dispatch] = (0, react_1.useReducer)(reducer, Object.assign(Object.assign(Object.assign({}, COMPOSER_INITIAL_STATE), defaultValue), { key: (0, utils_1.random)() }));
130
+ const { key, id, type, title, titleError, html, categories, addressing, audience, medias, poll, pollError, location, error } = state;
198
131
  const destructureFeedObject = (_feedObject) => {
199
- if (_feedObject.type === Composer_1.COMPOSER_TYPE_POST) {
132
+ if (_feedObject.type === types_1.SCContributionType.POST) {
200
133
  _feedObject = _feedObject;
201
134
  }
202
- else if (_feedObject.type === Composer_1.COMPOSER_TYPE_DISCUSSION) {
135
+ else if (_feedObject.type === types_1.SCContributionType.DISCUSSION) {
203
136
  _feedObject = _feedObject;
204
137
  }
205
138
  else {
@@ -210,11 +143,10 @@ function Composer(inProps) {
210
143
  type: 'multiple',
211
144
  value: {
212
145
  id: _feedObject.id,
213
- type: _feedObject.type,
146
+ type: _feedObject.poll ? Composer_1.COMPOSER_TYPE_POLL : feedObject.type,
214
147
  title: _feedObject.title,
215
- text: _feedObject.html,
148
+ html: _feedObject.html,
216
149
  categories: _feedObject.categories,
217
- audience: _feedObject.addressing ? AUDIENCE_TAG : AUDIENCE_ALL,
218
150
  addressing: _feedObject.addressing,
219
151
  medias: _feedObject.medias,
220
152
  poll: _feedObject.poll,
@@ -228,43 +160,24 @@ function Composer(inProps) {
228
160
  }
229
161
  };
230
162
  // Edit state variables
231
- const editMode = Boolean((feedObjectId && feedObjectType) || feedObject);
163
+ const editMode = (0, react_1.useMemo)(() => Boolean((feedObjectId && feedObjectType) || feedObject), [feedObjectId, feedObjectType, feedObject]);
232
164
  const [isLoading, setIsLoading] = (0, react_1.useState)(editMode);
233
165
  const [loadError, setLoadError] = (0, react_1.useState)(false);
234
166
  // REFS
167
+ const dialogRef = (0, react_1.useRef)();
235
168
  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();
169
+ // Create a ref for medias because of state update error on chunk upload
170
+ const mediasRef = (0, react_1.useRef)({ medias });
171
+ mediasRef.current = { medias };
172
+ // MEMO
173
+ const hasPoll = (0, react_1.useMemo)(() => {
174
+ return poll && poll.title.length > 0 && poll.title.length < Composer_1.COMPOSER_TITLE_MAX_LENGTH && poll.choices.length >= Composer_1.COMPOSER_POLL_MIN_CHOICES;
175
+ }, [poll]);
176
+ const canSubmit = (0, react_1.useMemo)(() => {
177
+ return !isLoading && ((type === types_1.SCContributionType.DISCUSSION && title.length > 0 && title.length < Composer_1.COMPOSER_TITLE_MAX_LENGTH) ||
178
+ (type === types_1.SCContributionType.POST && ((0, utils_1.stripHtml)(html).length > 0 || medias.length > 0 || hasPoll)) ||
179
+ (type === Composer_1.COMPOSER_TYPE_POLL && hasPoll));
180
+ }, [isLoading, type, title, html, medias, hasPoll]);
268
181
  // Load feed object
269
182
  (0, react_1.useEffect)(() => {
270
183
  if (!editMode) {
@@ -288,11 +201,9 @@ function Composer(inProps) {
288
201
  })
289
202
  .then(() => setIsLoading(false));
290
203
  }, [editMode]);
291
- // Props update
292
- (0, react_1.useEffect)(() => setView(view), [view]);
293
204
  // Prevent unload
294
205
  (0, react_1.useEffect)(() => {
295
- if (!unloadRef.current && canSubmit()) {
206
+ if (!unloadRef.current && canSubmit) {
296
207
  unloadRef.current = true;
297
208
  const onUnload = (event) => {
298
209
  event.preventDefault();
@@ -300,129 +211,125 @@ function Composer(inProps) {
300
211
  };
301
212
  window.onbeforeunload = onUnload;
302
213
  }
303
- else if (unloadRef.current && !canSubmit()) {
214
+ else if (unloadRef.current && !canSubmit) {
304
215
  unloadRef.current = false;
305
216
  window.onbeforeunload = null;
306
217
  }
307
- }, [state]);
308
- // Autofocus
309
- (0, react_1.useEffect)(() => {
310
- if (!rest.open || fullScreen) {
311
- return;
312
- }
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
- };
218
+ }, [state, canSubmit]);
328
219
  /* Handlers */
329
- const handleChangeView = (view) => {
330
- return (event) => {
331
- setView(view);
332
- };
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) => {
220
+ const handleAddLayer = (0, react_1.useCallback)((layer) => setLayer(layer), []);
221
+ const handleRemoveLayer = (0, react_1.useCallback)(() => setLayer(null), []);
222
+ const handleChangeType = (0, react_1.useCallback)((value) => {
223
+ dispatch({ type: 'type', value });
224
+ }, []);
225
+ const handleChangePoll = (0, react_1.useCallback)((content) => {
342
226
  dispatch({
343
227
  type: 'multiple',
344
- value: {
345
- poll: poll,
346
- pollError: poll.title.length > Composer_1.COMPOSER_TITLE_MAX_LENGTH
228
+ value: Object.assign(Object.assign({}, content), { pollError: content.poll.title.length > Composer_1.COMPOSER_TITLE_MAX_LENGTH
347
229
  ? { titleError: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.title.error.maxlength", defaultMessage: "ui.composer.title.error.maxlength" }) }
348
- : null
349
- }
230
+ : null })
350
231
  });
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;
232
+ }, []);
233
+ const handleChangeDiscussion = (0, react_1.useCallback)((content) => {
234
+ dispatch({
235
+ type: 'multiple',
236
+ 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 })
237
+ });
238
+ }, []);
239
+ const handleChangePost = (0, react_1.useCallback)((content) => {
240
+ dispatch({
241
+ type: 'multiple',
242
+ value: Object.assign({}, content)
243
+ });
244
+ }, []);
245
+ const handleChangeCategories = (0, react_1.useCallback)((value) => {
246
+ dispatch({ type: 'categories', value });
247
+ setLayer(null);
248
+ }, []);
249
+ const handleAddCategoryLayer = (0, react_1.useCallback)(() => handleAddLayer({
250
+ name: 'category',
251
+ Component: CategoryLayer_1.default,
252
+ ComponentProps: {
253
+ onClose: handleRemoveLayer,
254
+ onSave: handleChangeCategories,
255
+ defaultValue: categories
384
256
  }
385
- };
386
- const handleClose = (event) => {
387
- if (unloadRef.current) {
388
- window.onbeforeunload = null;
257
+ }), [handleAddLayer, handleRemoveLayer, handleChangeCategories, categories]);
258
+ const handleChangeAudience = (0, react_1.useCallback)((value) => {
259
+ dispatch({ type: 'addressing', value });
260
+ setLayer(null);
261
+ }, []);
262
+ const handleAddAudienceLayer = (0, react_1.useCallback)(() => handleAddLayer({
263
+ name: 'audience',
264
+ Component: AudienceLayer_1.default,
265
+ ComponentProps: {
266
+ onClose: handleRemoveLayer,
267
+ onSave: handleChangeAudience,
268
+ defaultValue: addressing
389
269
  }
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) => {
270
+ }), [handleAddLayer, handleRemoveLayer, handleChangeAudience, addressing]);
271
+ const handleChangeLocation = (0, react_1.useCallback)((value) => {
272
+ dispatch({ type: 'location', value });
273
+ setLayer(null);
274
+ }, []);
275
+ const handleAddLocationLayer = (0, react_1.useCallback)(() => handleAddLayer({
276
+ name: 'location',
277
+ Component: LocationLayer_1.default,
278
+ ComponentProps: {
279
+ onClose: handleRemoveLayer,
280
+ onSave: handleChangeLocation,
281
+ defaultValue: location
282
+ }
283
+ }), [handleAddLayer, handleRemoveLayer, handleChangeLocation, location]);
284
+ const handleChangeMedias = (0, react_1.useCallback)((value) => {
285
+ const _medias = [...value];
420
286
  dispatch({
421
287
  type: 'medias',
422
- value: [...medias.filter((media) => newSort.findIndex((m) => m.id === media.id) === -1), ...newSort]
288
+ value: [...value]
423
289
  });
424
- };
425
- const handleSubmit = (event) => {
290
+ mediasRef.current.medias = _medias;
291
+ setLayer(null);
292
+ }, []);
293
+ const handleAddMedia = (0, react_1.useCallback)((media) => {
294
+ const _medias = [...mediasRef.current.medias, media];
295
+ dispatch({
296
+ type: 'medias',
297
+ value: _medias
298
+ });
299
+ mediasRef.current.medias = _medias;
300
+ }, []);
301
+ const handleMediaTriggerClick = (0, react_1.useCallback)((mediaObjectType) => (event) => {
302
+ if (mediaObjectType.layerComponent) {
303
+ handleAddLayer({
304
+ name: mediaObjectType.name,
305
+ Component: mediaObjectType.layerComponent,
306
+ ComponentProps: {
307
+ onClose: handleRemoveLayer,
308
+ onSave: handleChangeMedias,
309
+ defaultValue: medias
310
+ }
311
+ });
312
+ }
313
+ }, [handleAddLayer, handleRemoveLayer, handleChangeMedias, medias]);
314
+ const handleChangeAttributes = (0, react_1.useCallback)((content) => {
315
+ dispatch({
316
+ type: 'multiple',
317
+ value: Object.assign({}, content)
318
+ });
319
+ }, []);
320
+ const handleClickAttributes = (0, react_1.useCallback)((attr) => {
321
+ switch (attr) {
322
+ case 'categories':
323
+ handleAddCategoryLayer();
324
+ break;
325
+ case 'addressing':
326
+ handleAddAudienceLayer();
327
+ break;
328
+ }
329
+ }, [handleAddCategoryLayer, handleAddAudienceLayer]);
330
+ const handleSubmit = (0, react_1.useCallback)((event) => {
331
+ event.preventDefault();
332
+ event.stopPropagation();
426
333
  if (react_core_1.UserUtils.isBlocked(scUserContext.user)) {
427
334
  // deny submit action if authenticated user is blocked
428
335
  enqueueSnackbar(react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.common.userBlocked", defaultMessage: "ui.common.userBlocked" }), {
@@ -432,32 +339,29 @@ function Composer(inProps) {
432
339
  return;
433
340
  }
434
341
  // Extract hashtags and add to categories
435
- const _categories = [...categories.map((c) => c.id), ...(0, editor_1.extractHashtags)(text)];
342
+ const _categories = [...categories.map((c) => c.id), ...(0, editor_1.extractHashtags)(html)];
436
343
  const data = {
437
344
  title,
438
- text,
345
+ text: html,
439
346
  medias: medias.map((m) => m.id),
440
347
  categories: _categories.filter((item, index) => _categories.indexOf(item) === index)
441
348
  };
442
- if (preferences[react_core_1.SCPreferences.ADDONS_POLLS_ENABLED] && hasPoll()) {
349
+ if (preferences[react_core_1.SCPreferences.ADDONS_POLLS_ENABLED].value && hasPoll) {
443
350
  data.poll = poll;
444
351
  }
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
- };
352
+ if (preferences[react_core_1.SCPreferences.ADDONS_POST_GEOLOCATION_ENABLED].value && location) {
353
+ data.location = location;
451
354
  }
452
- if (scPrefernces.features.includes(types_1.SCFeatureName.TAGGING) && audience === AUDIENCE_TAG) {
355
+ if (features.includes(types_1.SCFeatureName.TAGGING) && addressing !== null) {
453
356
  data.addressing = addressing.map((t) => t.id);
454
357
  }
455
358
  setIsSubmitting(true);
456
359
  // Finding right url
457
- let url = api_services_1.Endpoints.Composer.url({ type });
360
+ const _type = type === Composer_1.COMPOSER_TYPE_POLL ? types_1.SCContributionType.POST : type;
361
+ let url = api_services_1.Endpoints.Composer.url({ type: _type });
458
362
  let method = api_services_1.Endpoints.Composer.method;
459
363
  if (editMode) {
460
- url = api_services_1.Endpoints.ComposerEdit.url({ type, id });
364
+ url = api_services_1.Endpoints.ComposerEdit.url({ type: feedObjectType ? feedObjectType : _type, id });
461
365
  method = api_services_1.Endpoints.ComposerEdit.method;
462
366
  }
463
367
  // Perform request
@@ -478,185 +382,87 @@ function Composer(inProps) {
478
382
  dispatch({ type: 'multiple', value: (0, api_services_1.formatHttpErrorCode)(error) });
479
383
  })
480
384
  .then(() => setIsSubmitting(false));
481
- };
482
- // MEMO
483
- const _EditorProps = (0, react_1.useMemo)(() => (EditorProps ? EditorProps : { toolbar: true, uploadImage: true }), [EditorProps, type]);
385
+ }, [scUserContext.user, feedObjectType, id, type, title, html, categories, addressing, audience, medias, poll, location, hasPoll]);
386
+ const handleClose = (0, react_1.useCallback)((event) => {
387
+ if (unloadRef.current) {
388
+ window.onbeforeunload = null;
389
+ }
390
+ onClose && onClose(event);
391
+ setLayer(null);
392
+ dispatch({ type: 'reset' });
393
+ }, [onClose]);
394
+ const handleClosePrompt = (0, react_1.useCallback)((event) => {
395
+ if (canSubmit) {
396
+ handleAddLayer({
397
+ name: 'close',
398
+ Component: CloseLayer_1.default,
399
+ ComponentProps: {
400
+ onClose: handleRemoveLayer,
401
+ onSave: handleClose
402
+ }
403
+ });
404
+ }
405
+ else {
406
+ handleClose(event);
407
+ }
408
+ }, [canSubmit, handleAddLayer, handleRemoveLayer, handleClose]);
484
409
  const isIOS = (0, react_1.useMemo)(() => (0, utils_1.iOS)(), []);
485
410
  // RENDER
486
411
  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]);
412
+ const content = (0, react_1.useMemo)(() => {
413
+ if (editMode && isLoading) {
414
+ return react_1.default.createElement(Skeleton_1.default, null);
415
+ }
416
+ else if (editMode && loadError) {
417
+ return (react_1.default.createElement(material_1.Alert, { severity: "error", onClose: handleClose },
418
+ react_1.default.createElement(material_1.AlertTitle, null,
419
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.edit.error.title", defaultMessage: "ui.composer.edit.error.title" })),
420
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.edit.error.content", defaultMessage: "ui.composer.edit.error.content" })));
421
+ }
422
+ switch (type) {
423
+ case Composer_1.COMPOSER_TYPE_POLL:
424
+ return react_1.default.createElement(ContentPoll_1.default, { key: key, onChange: handleChangePoll, value: { html, categories, addressing, medias, poll, location }, error: pollError, disabled: isSubmitting });
425
+ case types_1.SCContributionType.DISCUSSION:
426
+ 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) });
427
+ default:
428
+ 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) });
429
+ }
430
+ }, [key, type, title, html, categories, addressing, medias, poll, pollError, location, error, handleChangePoll, handleChangePost, isSubmitting]);
650
431
  if (!scUserContext.user && !(scUserContext.loading && open)) {
651
432
  return null;
652
433
  }
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()));
434
+ 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 }),
435
+ react_1.default.createElement("form", { onSubmit: handleSubmit, method: "post" },
436
+ react_1.default.createElement(material_1.DialogTitle, { className: classes.title },
437
+ react_1.default.createElement(material_1.IconButton, { onClick: handleClosePrompt },
438
+ react_1.default.createElement(Icon_1.default, null, "close")),
439
+ react_1.default.createElement(LoadingButton_1.default, { size: "small", type: "submit", color: "secondary", variant: "contained", disabled: !canSubmit, loading: isSubmitting },
440
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.submit", defaultMessage: "ui.composer.submit" }))),
441
+ react_1.default.createElement(material_1.DialogContent, { className: classes.content },
442
+ react_1.default.createElement(Attributes_1.default, { value: { categories, addressing, location }, className: classes.attributes, onChange: handleChangeAttributes, onClick: handleClickAttributes }),
443
+ content,
444
+ medias && medias.length > 0 && react_1.default.createElement(material_1.Box, { className: classes.medias }, mediaObjectTypes.map((mediaObjectType) => {
445
+ if (mediaObjectType.previewComponent) {
446
+ return react_1.default.createElement(mediaObjectType.previewComponent, { key: mediaObjectType.name, value: medias, onChange: handleChangeMedias });
447
+ }
448
+ else if (mediaObjectType.displayComponent) {
449
+ return react_1.default.createElement(mediaObjectType.displayComponent, { key: mediaObjectType.name, value: medias });
450
+ }
451
+ }))),
452
+ !canSubmit && !editMode && react_1.default.createElement(TypeSwitchButtonGroup_1.default, { className: classes.types, onChange: handleChangeType, size: "small", value: type }),
453
+ react_1.default.createElement(material_1.DialogActions, { className: classes.actions },
454
+ mediaObjectTypes
455
+ .filter((mediaObjectType) => mediaObjectType.triggerButton !== null)
456
+ .map((mediaObjectType) => {
457
+ const props = mediaObjectType.layerComponent ? { onClick: handleMediaTriggerClick(mediaObjectType) } : { onAdd: handleAddMedia };
458
+ 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)));
459
+ }),
460
+ react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting, onClick: handleAddCategoryLayer },
461
+ react_1.default.createElement(Icon_1.default, null, "category")),
462
+ 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")),
463
+ 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' },
464
+ react_1.default.createElement(Icon_1.default, null, "add_location_alt"))))),
465
+ layer && react_1.default.createElement(LayerTransitionRoot, { className: classes.layerTransitionRoot, in: true, container: dialogRef.current, direction: "left" },
466
+ react_1.default.createElement(layer.Component, Object.assign({}, layer.ComponentProps)))));
661
467
  }
662
468
  exports.default = Composer;