@saooti/octopus-sdk 42.3.0 → 42.3.1

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 (615) hide show
  1. package/dist/{AdvancedSearch-DEh3iiuK.mjs → AdvancedSearch-BTbYmlMm.mjs} +8 -8
  2. package/dist/AdvancedSearch-C6BJzvGT.mjs.map +1 -0
  3. package/dist/AdvancedSearch-ChnJq71j.mjs.map +1 -0
  4. package/dist/AdvancedSearch-ChtUj3vS.mjs.map +1 -0
  5. package/dist/AdvancedSearch-D-9o5KzI.mjs.map +1 -0
  6. package/dist/AdvancedSearch-DH5YTENK.mjs.map +1 -0
  7. package/dist/AdvancedSearch-DN3WFduh.mjs.map +1 -0
  8. package/dist/AdvancedSearch-EpYd6K3d.mjs.map +1 -0
  9. package/dist/AdvancedSearch-PRJyRSID.mjs.map +1 -0
  10. package/dist/AdvancedSearch-_E2nwQ-A.mjs.map +1 -0
  11. package/dist/AdvancedSearch-cLjakm-6.mjs.map +1 -0
  12. package/dist/AdvancedSearch-k-fQfSBk.mjs.map +1 -0
  13. package/dist/AdvancedSearch-zFJq-WlO.mjs.map +1 -0
  14. package/dist/CategoryChooser-CSUjIA0D.mjs.map +1 -0
  15. package/dist/{CategoryChooser-CeF4n-nw.mjs → CategoryChooser-fAUMJNHu.mjs} +1 -1
  16. package/dist/CategoryFilter-B0S_nCvS.mjs.map +1 -0
  17. package/dist/CategoryFilter-BVrLO_pV.mjs.map +1 -0
  18. package/dist/{CategoryFilter-Djmal5bY.mjs → CategoryFilter-CsYCvEnz.mjs} +3 -3
  19. package/dist/CategoryFilter-DVwCpHLx.mjs.map +1 -0
  20. package/dist/CategoryList-B_9GG6Z9.mjs.map +1 -0
  21. package/dist/{CategoryList-Dksp79Lm.mjs → CategoryList-CDoIfrDw.mjs} +2 -2
  22. package/dist/CategoryList-CUae_phb.mjs.map +1 -0
  23. package/dist/CategoryList-DxR0fpKd.mjs.map +1 -0
  24. package/dist/CategoryPage-C7aKDtgs.mjs.map +1 -0
  25. package/dist/{CategoryPage-DC8fMny_.mjs → CategoryPage-Cl5Yuxnu.mjs} +2 -2
  26. package/dist/CategoryPage-DlnAp05t.mjs.map +1 -0
  27. package/dist/CategoryPage-Dlq5XQBS.mjs.map +1 -0
  28. package/dist/{CategorySearchFilter-KVYBscdd.mjs → CategorySearchFilter-Cce5zxZB.mjs} +1 -1
  29. package/dist/CategorySearchFilter-EULpSE2e.mjs.map +1 -0
  30. package/dist/ChapteringModal-BplEGZj2.mjs.map +1 -0
  31. package/dist/ChapteringModal-C9yuW_IU.mjs.map +1 -0
  32. package/dist/{ChapteringModal-Be9FF1yz.mjs → ChapteringModal-DiiVSG7s.mjs} +1 -1
  33. package/dist/{CheckIdentityModal-nMszYOsW.mjs → CheckIdentityModal-BrnYeGdk.mjs} +3 -3
  34. package/dist/CheckIdentityModal-BtGdsv2v.mjs.map +1 -0
  35. package/dist/CheckIdentityModal-CpRO7ehH.mjs.map +1 -0
  36. package/dist/CheckIdentityModal-Cry9ra4J.mjs.map +1 -0
  37. package/dist/ClassicDatePicker--q1yYb-S.mjs.map +1 -0
  38. package/dist/ClassicDatePicker-4ouU5ov9.mjs.map +1 -0
  39. package/dist/ClassicDatePicker-B8bI9QfF.mjs.map +1 -0
  40. package/dist/ClassicDatePicker-BTJWityQ.mjs +186 -0
  41. package/dist/ClassicDatePicker-CChR9LBd.mjs.map +1 -0
  42. package/dist/ClassicDatePicker-CopJVkF0.mjs.map +1 -0
  43. package/dist/ClassicDatePicker-DgcJCevR.mjs.map +1 -0
  44. package/dist/ClassicDatePicker-NxGNQxHE.mjs.map +1 -0
  45. package/dist/ClassicDatePicker-dgdGXcRk.mjs.map +1 -0
  46. package/dist/{ClassicEmojiPicker-B4TAlZvo.mjs → ClassicEmojiPicker-C0gm-DA2.mjs} +1 -1
  47. package/dist/ClassicEmojiPicker-CJZD8H7L.mjs.map +1 -0
  48. package/dist/{ClassicHelpButton-DT7T8tMe.mjs → ClassicHelpButton-BnRLmYuh.mjs} +1 -1
  49. package/dist/ClassicHelpButton-Qb4AwvWI.mjs.map +1 -0
  50. package/dist/{ClassicInputText-DJ5kURGM.mjs → ClassicInputText-YsntJkHk.mjs} +1 -1
  51. package/dist/ClassicInputText-npkVSUoH.mjs.map +1 -0
  52. package/dist/ClassicMultiselect-2I2K-o4R.mjs.map +1 -0
  53. package/dist/{ClassicMultiselect-CDHdJjjV.mjs → ClassicMultiselect-C0yzVQ8Y.mjs} +1 -1
  54. package/dist/{ClassicNotifications-DEpVRRHg.mjs → ClassicNotifications-8CVfGSqL.mjs} +1 -1
  55. package/dist/ClassicNotifications-BFQ-R6kO.mjs.map +1 -0
  56. package/dist/ClassicNotifications-DR0PM1Xp.mjs.map +1 -0
  57. package/dist/{ClassicPopover-DWR50Nxi.mjs → ClassicPopover-BUb-1WMB.mjs} +1 -1
  58. package/dist/ClassicPopover-BhMY2SMo.mjs.map +1 -0
  59. package/dist/ClipboardModal-B_SZ6jDk.mjs.map +1 -0
  60. package/dist/{ClipboardModal-BUKwZYOf.mjs → ClipboardModal-ByVXPcKD.mjs} +1 -1
  61. package/dist/ClipboardModal-DjrZQRtY.mjs.map +1 -0
  62. package/dist/{CommentInput-US8ZtNj1.mjs → CommentInput-CrRstzua.mjs} +4 -4
  63. package/dist/CommentInput-DPMj47uE.mjs.map +1 -0
  64. package/dist/CommentInput-DbhOyi7c.mjs.map +1 -0
  65. package/dist/CommentInput-I97yysBW.mjs.map +1 -0
  66. package/dist/CommentItem-AItzrTBi.mjs.map +1 -0
  67. package/dist/CommentItem-B7vvJwZI.mjs.map +1 -0
  68. package/dist/{CommentItem-CqWZPmbj.mjs → CommentItem-BYU67TIu.mjs} +4 -4
  69. package/dist/CommentItem-CvNbH7Hf.mjs.map +1 -0
  70. package/dist/CommentList-BTyyCcX4.mjs.map +1 -0
  71. package/dist/CommentList-CWrf45Di.mjs.map +1 -0
  72. package/dist/CommentList-DP6wk4PD.mjs.map +1 -0
  73. package/dist/{CommentList-CSYpqgNM.mjs → CommentList-snIIudVC.mjs} +2 -2
  74. package/dist/CommentMoreActions-BNajG7wk.mjs.map +1 -0
  75. package/dist/CommentMoreActions-C1l4Y_HY.mjs.map +1 -0
  76. package/dist/CommentMoreActions-DPbJnEEV.mjs.map +1 -0
  77. package/dist/{CommentMoreActions-T5RN6BGq.mjs → CommentMoreActions-y202UxL5.mjs} +3 -3
  78. package/dist/{CommentName-DslRo9jg.mjs → CommentName-CHBlEM7I.mjs} +3 -3
  79. package/dist/CommentName-D5HN8bGE.mjs.map +1 -0
  80. package/dist/CommentName-DMom_kwo.mjs.map +1 -0
  81. package/dist/CommentName-OJrxjSxu.mjs.map +1 -0
  82. package/dist/CommentParentInfo-DWVF5Ewh.mjs.map +1 -0
  83. package/dist/CommentParentInfo-Do3IlO95.mjs.map +1 -0
  84. package/dist/{CommentParentInfo-DMX3nkCb.mjs → CommentParentInfo-DoEeaQGU.mjs} +2 -2
  85. package/dist/CommentParentInfo-DqHfDpKs.mjs.map +1 -0
  86. package/dist/{CommentPlayer-D3JEVPKX.mjs → CommentPlayer-B4MXG-gG.mjs} +2 -2
  87. package/dist/CommentPlayer-B67saxPf.mjs.map +1 -0
  88. package/dist/CommentPlayer-BUtEvkoV.mjs.map +1 -0
  89. package/dist/CommentSection-BIZMRePu.mjs.map +1 -0
  90. package/dist/CommentSection-CSehg6MD.mjs.map +1 -0
  91. package/dist/{CommentSection-Brn0VQcc.mjs → CommentSection-DZf04NxT.mjs} +3 -3
  92. package/dist/CommentSection-MDKioQWf.mjs.map +1 -0
  93. package/dist/CommentStore-BBm8MjxW.mjs.map +1 -0
  94. package/dist/{CommentStore-hPTYaDGr.mjs → CommentStore-CysGkBHp.mjs} +8 -8
  95. package/dist/CommentStore-F5MVSrDw.mjs.map +1 -0
  96. package/dist/ContractPreviewModal-CFSkXgB4.mjs.map +1 -0
  97. package/dist/ContractPreviewModal-CKL6Rb_V.mjs.map +1 -0
  98. package/dist/{ContractPreviewModal-48Je4Wuy.mjs → ContractPreviewModal-Dd-1KasR.mjs} +2 -2
  99. package/dist/DateFilter-BwYSwGc-.mjs.map +1 -0
  100. package/dist/DateFilter-CGTz76bp.mjs.map +1 -0
  101. package/dist/DateFilter-CfeYepTO.mjs.map +1 -0
  102. package/dist/{DateFilter-DztHuPm8.mjs → DateFilter-Cnb_S8Up.mjs} +1 -1
  103. package/dist/DateFilter-DFw66D2V.mjs.map +1 -0
  104. package/dist/DateFilter-DMOUMeCh.mjs.map +1 -0
  105. package/dist/DateFilter-DdbvVu9Q.mjs.map +1 -0
  106. package/dist/DateFilter-Dr1nRuvZ.mjs.map +1 -0
  107. package/dist/DateFilter-QGaXHkcu.mjs.map +1 -0
  108. package/dist/{DownloadPodcastButton-BYWuLoNg.mjs → DownloadPodcastButton-6HtR84aE.mjs} +2 -2
  109. package/dist/DownloadPodcastButton-D2qeKDPT.mjs.map +1 -0
  110. package/dist/DownloadPodcastButton-Tr_Y4qMu.mjs.map +1 -0
  111. package/dist/{EditCommentModal-DacFxzLx.mjs → EditCommentModal-BQ03B6LC.mjs} +2 -2
  112. package/dist/EditCommentModal-BZitN0Ir.mjs.map +1 -0
  113. package/dist/EditCommentModal-CcmCx_My.mjs.map +1 -0
  114. package/dist/EditCommentModal-sj0yXd7-.mjs.map +1 -0
  115. package/dist/EmissionGroupChooser--428fdeK.mjs.map +1 -0
  116. package/dist/EmissionGroupChooser-BJCKekKM.mjs.map +1 -0
  117. package/dist/EmissionGroupChooser-ByqGmsGw.mjs.map +1 -0
  118. package/dist/EmissionGroupChooser-Cb3CF0uc.mjs.map +1 -0
  119. package/dist/EmissionGroupChooser-D4vMQH8g.mjs.map +1 -0
  120. package/dist/{EmissionGroupChooser-KmzQjp7d.mjs → EmissionGroupChooser-De_IpEhW.mjs} +2 -2
  121. package/dist/EmissionInlineList-CdHQBjfR.mjs.map +1 -0
  122. package/dist/EmissionInlineList-CnA0d_k2.mjs.map +1 -0
  123. package/dist/EmissionInlineList-DLUvPBNl.mjs.map +1 -0
  124. package/dist/{EmissionInlineList-BoEIAbLu.mjs → EmissionInlineList-dlb4gUOP.mjs} +5 -5
  125. package/dist/EmissionItem-B39oFnXF.mjs.map +1 -0
  126. package/dist/EmissionItem-BkPLFhAo.mjs.map +1 -0
  127. package/dist/EmissionItem-CjAUdLb7.mjs.map +1 -0
  128. package/dist/{EmissionItem-BeQWw-UT.mjs → EmissionItem-Dm_IGNkw.mjs} +4 -4
  129. package/dist/EmissionList-B0UntYdC.mjs.map +1 -0
  130. package/dist/EmissionList-BQSI4xbi.mjs.map +1 -0
  131. package/dist/{EmissionList-DB7O1nj5.mjs → EmissionList-C4JEYLyK.mjs} +4 -4
  132. package/dist/EmissionList-C7lQBdlW.mjs.map +1 -0
  133. package/dist/EmissionPage-BF6s2ySo.mjs.map +1 -0
  134. package/dist/EmissionPage-B_-nDP5x.mjs.map +1 -0
  135. package/dist/EmissionPage-C-ESprrZ.mjs.map +1 -0
  136. package/dist/{EmissionPage-CNYJ1Puo.mjs → EmissionPage-C4XUdzzm.mjs} +10 -10
  137. package/dist/EmissionPage-CPXcNHGS.mjs.map +1 -0
  138. package/dist/EmissionPage-EMgXCVhK.mjs.map +1 -0
  139. package/dist/EmissionPage-mXbUqOh9.mjs.map +1 -0
  140. package/dist/{EmissionPlayerItem-S_yqupad.mjs → EmissionPlayerItem-BLIdolRe.mjs} +3 -3
  141. package/dist/EmissionPlayerItem-C27zJBhY.mjs.map +1 -0
  142. package/dist/EmissionPlayerItem-C3fkgEaL.mjs.map +1 -0
  143. package/dist/EmissionPlayerItem-DxXG20G1.mjs.map +1 -0
  144. package/dist/EmissionPresentationItem-BNnDSWGQ.mjs.map +1 -0
  145. package/dist/EmissionPresentationItem-BeETY65I.mjs.map +1 -0
  146. package/dist/{EmissionPresentationItem-kJgKN7Ju.mjs → EmissionPresentationItem-DYDwfqwp.mjs} +1 -1
  147. package/dist/EmissionPresentationList-BD7rIUok.mjs.map +1 -0
  148. package/dist/EmissionPresentationList-CGMyY_iu.mjs.map +1 -0
  149. package/dist/{EmissionPresentationList-Bg9X3CJP.mjs → EmissionPresentationList-Cxi7QnIs.mjs} +3 -3
  150. package/dist/EmissionsPage-4To0aRBA.mjs.map +1 -0
  151. package/dist/{EmissionsPage-BLpGH_PR.mjs → EmissionsPage-B0bXLncg.mjs} +5 -5
  152. package/dist/EmissionsPage-BIspB5uq.mjs.map +1 -0
  153. package/dist/EmissionsPage-BhUjdpEu.mjs.map +1 -0
  154. package/dist/EmissionsPage-Bn1R_ipo.mjs.map +1 -0
  155. package/dist/EmissionsPage-CNXwdJuV.mjs.map +1 -0
  156. package/dist/EmissionsPage-CPmhIbFf.mjs.map +1 -0
  157. package/dist/EmissionsPage-Cgzvn2h8.mjs.map +1 -0
  158. package/dist/EmissionsPage-D09zTpGb.mjs.map +1 -0
  159. package/dist/EmissionsPage-Dl7qaQT1.mjs.map +1 -0
  160. package/dist/EmissionsPage-DyleZtu_.mjs.map +1 -0
  161. package/dist/EmissionsPage-OVpc7k1Z.mjs.map +1 -0
  162. package/dist/EmissionsPage-wjKBLFM6.mjs.map +1 -0
  163. package/dist/Error403Page-B6Q7ijY3.mjs.map +1 -0
  164. package/dist/Error403Page-DF08mgCL.mjs.map +1 -0
  165. package/dist/{Error403Page-BB69doEn.mjs → Error403Page-DVmC5AOd.mjs} +2 -2
  166. package/dist/FooterGarSection-BWahCyz0.mjs.map +1 -0
  167. package/dist/{FooterGarSection-B9nsnpfF.mjs → FooterGarSection-BqPggI3o.mjs} +3 -3
  168. package/dist/FooterGarSection-CN8ZfO7e.mjs.map +1 -0
  169. package/dist/FooterSection-BOjr1LRb.mjs.map +1 -0
  170. package/dist/{FooterSection-DdGtlbk-.mjs → FooterSection-C5FEIJlU.mjs} +11 -11
  171. package/dist/FooterSection-nVRzKSYN.mjs.map +1 -0
  172. package/dist/HomeDropdown-3fl_xltN.mjs.map +1 -0
  173. package/dist/HomeDropdown-DGNkJhG2.mjs.map +1 -0
  174. package/dist/{HomeDropdown-BqwwLStt.mjs → HomeDropdown-Fx6kQAuH.mjs} +3 -3
  175. package/dist/HomeDropdown-PvmOUzYb.mjs.map +1 -0
  176. package/dist/{HomePage-JOUAKKfP.mjs → HomePage-7PT7HmHs.mjs} +3 -3
  177. package/dist/HomePage-D0Pbu_h1.mjs.map +1 -0
  178. package/dist/HomePage-D6_D1f33.mjs.map +1 -0
  179. package/dist/HomePage-ry0NfX1M.mjs.map +1 -0
  180. package/dist/InlineRubriqueList-BdpS1pVc.mjs.map +1 -0
  181. package/dist/InlineRubriqueList-BlcjQ4wR.mjs.map +1 -0
  182. package/dist/{InlineRubriqueList-BzcHKvM4.mjs → InlineRubriqueList-ezgexR-O.mjs} +1 -1
  183. package/dist/{LikeSection-MmbHMunb.mjs → LikeSection-CGu4yOCr.mjs} +3 -3
  184. package/dist/LikeSection-Cqj4y7qZ.mjs.map +1 -0
  185. package/dist/LikeSection-D95IMsZE.mjs.map +1 -0
  186. package/dist/LikeSection-HJla-zgI.mjs.map +1 -0
  187. package/dist/{ListPaginate-5uRK_QKJ.mjs → ListPaginate-BPdnBcpe.mjs} +2 -2
  188. package/dist/ListPaginate-DYzRnp-2.mjs.map +1 -0
  189. package/dist/ListPaginate-DyR7HLIc.mjs.map +1 -0
  190. package/dist/LiveHorizontalList-Bqe351Ut.mjs.map +1 -0
  191. package/dist/{LiveHorizontalList-CpoIRd4C.mjs → LiveHorizontalList-Bs-Rz5Ws.mjs} +3 -3
  192. package/dist/LiveHorizontalList-CaujYMT3.mjs.map +1 -0
  193. package/dist/LiveHorizontalList-DhsOZPT3.mjs.map +1 -0
  194. package/dist/{LiveList-DYFBrNgg.mjs → LiveList-BVOEnAEc.mjs} +5 -5
  195. package/dist/LiveList-DMB3FxUM.mjs.map +1 -0
  196. package/dist/LiveList-DOi4GV1x.mjs.map +1 -0
  197. package/dist/LiveList-Dh1mJVs7.mjs.map +1 -0
  198. package/dist/LivesPage-BvDLscOE.mjs.map +1 -0
  199. package/dist/{LivesPage-FSkmBdVw.mjs → LivesPage-DG5VY4HF.mjs} +2 -2
  200. package/dist/LivesPage-DmSlg7iH.mjs.map +1 -0
  201. package/dist/LivesPage-yy_5pI8R.mjs.map +1 -0
  202. package/dist/MapPage-3n-rigBK.mjs.map +1 -0
  203. package/dist/MapPage-5GwE8Z4E.mjs.map +1 -0
  204. package/dist/{MapPage-DpBt2gWF.mjs → MapPage-bIe2a9O1.mjs} +2 -2
  205. package/dist/MobileMenu-BSos17v3.mjs.map +1 -0
  206. package/dist/{MobileMenu-CjNMfHUP.mjs → MobileMenu-BZ5nOrYw.mjs} +5 -5
  207. package/dist/MobileMenu-C6W37oJg.mjs.map +1 -0
  208. package/dist/MobileMenu-K0rNwrW1.mjs.map +1 -0
  209. package/dist/NewsletterModal-CFGXBtID.mjs.map +1 -0
  210. package/dist/NewsletterModal-CZNwpCK5.mjs.map +1 -0
  211. package/dist/{NewsletterModal-BurqHTFc.mjs → NewsletterModal-DZk0mSVC.mjs} +1 -1
  212. package/dist/OctopusMultiselect-CFUGyzeM.mjs.map +1 -0
  213. package/dist/OctopusMultiselect-Cn1lqbQo.mjs.map +1 -0
  214. package/dist/OctopusMultiselect-esu8BY0J.mjs.map +1 -0
  215. package/dist/{OctopusMultiselect-C8qljiaH.mjs → OctopusMultiselect-noQPQMZQ.mjs} +7 -5
  216. package/dist/OrganisationChooser-BKfXLT4G.mjs.map +1 -0
  217. package/dist/{OrganisationChooser-Dx-OT7MW.mjs → OrganisationChooser-C48cWqbY.mjs} +3 -3
  218. package/dist/OrganisationChooser-PpO7MD7f.mjs.map +1 -0
  219. package/dist/OrganisationChooser-Y_jO6oXv.mjs.map +1 -0
  220. package/dist/{OrganisationChooserLight-BF5fT5pV.mjs → OrganisationChooserLight-Bcltbv-v.mjs} +1 -1
  221. package/dist/OrganisationChooserLight-Dh7wMH40.mjs.map +1 -0
  222. package/dist/OrganisationChooserLight-Dx_rkvpP.mjs.map +1 -0
  223. package/dist/PageNotFound-DeW-K_hL.mjs.map +1 -0
  224. package/dist/{PageNotFound-Cj-3Gv8T.mjs → PageNotFound-DogaoIFX.mjs} +2 -2
  225. package/dist/PageNotFound-gRuMWYCp.mjs.map +1 -0
  226. package/dist/ParticipantInlineList-CY_s6aJm.mjs.map +1 -0
  227. package/dist/{ParticipantInlineList-DEWqM1Io.mjs → ParticipantInlineList-D9pkOlvP.mjs} +4 -4
  228. package/dist/ParticipantInlineList-DSatB75C.mjs.map +1 -0
  229. package/dist/ParticipantItem-BG7yqRvD.mjs.map +1 -0
  230. package/dist/ParticipantItem-BTK25HID.mjs.map +1 -0
  231. package/dist/{ParticipantItem-BZAUIeSR.mjs → ParticipantItem-CbHOfVon.mjs} +3 -3
  232. package/dist/ParticipantPage-B4VnV8Yc.mjs.map +1 -0
  233. package/dist/ParticipantPage-B6Gzg6ul.mjs.map +1 -0
  234. package/dist/ParticipantPage-CNRNKTtC.mjs.map +1 -0
  235. package/dist/ParticipantPage-CpkhQjN2.mjs.map +1 -0
  236. package/dist/ParticipantPage-D61CCIqy.mjs.map +1 -0
  237. package/dist/ParticipantPage-Dh4JJCmJ.mjs.map +1 -0
  238. package/dist/{ParticipantPage-CzaHoWij.mjs → ParticipantPage-nTp2MbgB.mjs} +6 -6
  239. package/dist/{ParticipantsPage-goxJZQZZ.mjs → ParticipantsPage-Bbz9lQ_0.mjs} +6 -6
  240. package/dist/ParticipantsPage-COaQrVID.mjs.map +1 -0
  241. package/dist/ParticipantsPage-DRVVU7qp.mjs.map +1 -0
  242. package/dist/ParticipantsPage-DhKCWwKE.mjs.map +1 -0
  243. package/dist/{PlayerAnonymousModal-By96BtpA.mjs → PlayerAnonymousModal-B1iZ34O8.mjs} +2 -2
  244. package/dist/PlayerAnonymousModal-CBZStK-L.mjs.map +1 -0
  245. package/dist/PlayerAnonymousModal-Cq6-Dn49.mjs.map +1 -0
  246. package/dist/PlayerAnonymousModal-Cu2GGoAh.mjs.map +1 -0
  247. package/dist/PlayerAnonymousModal-DiXWtNmM.mjs.map +1 -0
  248. package/dist/PlayerAnonymousModal-DrQvDDym.mjs.map +1 -0
  249. package/dist/PlayerCompact-B9oeGx_g.mjs.map +1 -0
  250. package/dist/PlayerCompact-DtMginEc.mjs.map +1 -0
  251. package/dist/PlayerCompact-E8ydrdJ4.mjs.map +1 -0
  252. package/dist/{PlayerCompact-CjU8xxVH.mjs → PlayerCompact-_39FpkWo.mjs} +4 -4
  253. package/dist/PlayerComponent-4Wj5XlrS.mjs.map +1 -0
  254. package/dist/{PlayerComponent-B58O6U6i.mjs → PlayerComponent-B1RsmSf0.mjs} +47 -47
  255. package/dist/PlayerComponent-BGVzhVz9.mjs.map +1 -0
  256. package/dist/PlayerComponent-BIshvul2.mjs.map +1 -0
  257. package/dist/PlayerComponent-BO7wUL2M.mjs.map +1 -0
  258. package/dist/PlayerComponent-C222I0kT.mjs.map +1 -0
  259. package/dist/PlayerComponent-CjNZNKKz.mjs.map +1 -0
  260. package/dist/PlayerComponent-UG_c6_yr.mjs.map +1 -0
  261. package/dist/{PlayerLarge-CWL5SDzD.mjs → PlayerLarge-BxdyYLOt.mjs} +5 -5
  262. package/dist/PlayerLarge-CPUAoR9q.mjs.map +1 -0
  263. package/dist/PlayerLarge-DP7RsA83.mjs.map +1 -0
  264. package/dist/PlayerLarge-DpiFO7gk.mjs.map +1 -0
  265. package/dist/PlayerLarge-Dwtmu4gz.mjs.map +1 -0
  266. package/dist/PlayerLarge-HvRHSw4j.mjs.map +1 -0
  267. package/dist/PlayerLarge-X5uYCbyS.mjs.map +1 -0
  268. package/dist/PlayerLarge-qwr3iWSX.mjs.map +1 -0
  269. package/dist/{PlayerPlayButton-DmvV2YDi.mjs → PlayerPlayButton-BIsfgj0d.mjs} +4 -4
  270. package/dist/PlayerPlayButton-BQ4zJOrE.mjs.map +1 -0
  271. package/dist/PlayerPlayButton-kh4ZCdWh.mjs.map +1 -0
  272. package/dist/PlayerProgressBar-C-I3dk3l.mjs.map +1 -0
  273. package/dist/PlayerProgressBar-Dr-aFk7O.mjs.map +1 -0
  274. package/dist/{PlayerProgressBar-Cl_mF4nD.mjs → PlayerProgressBar-dSschgez.mjs} +2 -2
  275. package/dist/PlayerProgressBar-xc1ZFPJY.mjs.map +1 -0
  276. package/dist/PlayerStore-Aq_ukXXS.mjs.map +1 -0
  277. package/dist/PlayerStore-C_QCHbT3.mjs.map +1 -0
  278. package/dist/{PlayerStore-CKprkxa0.mjs → PlayerStore-DggKki80.mjs} +1 -1
  279. package/dist/PlayerVideo-BNfhaNUn.mjs.map +1 -0
  280. package/dist/{PlayerVideo-CVUU7nHT.mjs → PlayerVideo-BWyvKlJT.mjs} +3 -3
  281. package/dist/PlayerVideo-Bhok6qYS.mjs.map +1 -0
  282. package/dist/PlayerVideo-CN609whx.mjs.map +1 -0
  283. package/dist/PlayerVideo-DXG_PsWA.mjs.map +1 -0
  284. package/dist/PlayerVideo-DzUapxuZ.mjs.map +1 -0
  285. package/dist/PlayerVideoDigiteka-B1rRVLzy.mjs.map +1 -0
  286. package/dist/PlayerVideoDigiteka-B6qODy7b.mjs.map +1 -0
  287. package/dist/{PlayerVideoDigiteka-DZIqqN8a.mjs → PlayerVideoDigiteka-Dxx63XHI.mjs} +2 -2
  288. package/dist/PlayerVideoHls-BoAbvi2b.mjs.map +1 -0
  289. package/dist/PlayerVideoHls-BsHaaJB-.mjs.map +1 -0
  290. package/dist/PlayerVideoHls-C0ddorEn.mjs.map +1 -0
  291. package/dist/PlayerVideoHls-DBODDRmV.mjs.map +1 -0
  292. package/dist/PlayerVideoHls-DVNHm_O2.mjs.map +1 -0
  293. package/dist/{PlayerVideoHls-BirHOkZD.mjs → PlayerVideoHls-DzbyXZsQ.mjs} +9 -7
  294. package/dist/{PlaylistPage-DljbABur.mjs → PlaylistPage-BdbqXFwR.mjs} +35 -35
  295. package/dist/PlaylistPage-BgUaPJet.mjs.map +1 -0
  296. package/dist/PlaylistPage-BwF2VdGb.mjs.map +1 -0
  297. package/dist/PlaylistPage-CINwx3zE.mjs.map +1 -0
  298. package/dist/PlaylistPage-CPB647jC.mjs.map +1 -0
  299. package/dist/PlaylistPage-DDzE5GQs.mjs.map +1 -0
  300. package/dist/PlaylistPage-bm1nWKMg.mjs.map +1 -0
  301. package/dist/PlaylistsPage-BwkVSYIp.mjs.map +1 -0
  302. package/dist/PlaylistsPage-C62NUvz4.mjs.map +1 -0
  303. package/dist/{PlaylistsPage-BSW-uPWF.mjs → PlaylistsPage-D08i24b2.mjs} +13 -13
  304. package/dist/PlaylistsPage-Dvh77ql6.mjs.map +1 -0
  305. package/dist/PodcastFilterList-BBhzOM64.mjs.map +1 -0
  306. package/dist/PodcastFilterList-BKBjd36i.mjs.map +1 -0
  307. package/dist/{PodcastFilterList-YM90eN60.mjs → PodcastFilterList-CL5ebQ69.mjs} +3 -3
  308. package/dist/PodcastFilterList-D9NTYS1v.mjs.map +1 -0
  309. package/dist/{PodcastImage-BtiQlrb3.mjs → PodcastImage-BFA22TgZ.mjs} +6 -6
  310. package/dist/PodcastImage-BhQKB5te.mjs.map +1 -0
  311. package/dist/PodcastImage-CHx3bUzt.mjs.map +1 -0
  312. package/dist/PodcastInlineList-CcNd_Hbs.mjs.map +1 -0
  313. package/dist/{PodcastInlineList-B32BSFqN.mjs → PodcastInlineList-H6BxXx0A.mjs} +1 -1
  314. package/dist/PodcastInlineList-akLivgog.mjs.map +1 -0
  315. package/dist/PodcastInlineList-jI2EvXSo.mjs.map +1 -0
  316. package/dist/{PodcastInlineListTemplate-DTrS1UiG.mjs → PodcastInlineListTemplate-Chbi8aME.mjs} +3 -3
  317. package/dist/PodcastInlineListTemplate-DT9ZRs61.mjs.map +1 -0
  318. package/dist/PodcastInlineListTemplate-Dh1xF6xT.mjs.map +1 -0
  319. package/dist/PodcastIsPlaying-C0jcpBQd.mjs.map +1 -0
  320. package/dist/PodcastIsPlaying-H6P1CHAI.mjs.map +1 -0
  321. package/dist/{PodcastIsPlaying-BtmHnQi9.mjs → PodcastIsPlaying-ugHcefCy.mjs} +1 -1
  322. package/dist/{PodcastItem-TdtzApJ6.mjs → PodcastItem-Baki7W0q.mjs} +6 -6
  323. package/dist/PodcastItem-BfvK4ion.mjs.map +1 -0
  324. package/dist/PodcastItem-DEhA78z9.mjs.map +1 -0
  325. package/dist/PodcastItem-DwK_Yu1G.mjs.map +1 -0
  326. package/dist/PodcastList-B4ic6Cij.mjs.map +1 -0
  327. package/dist/PodcastList-C2R92m6S.mjs.map +1 -0
  328. package/dist/PodcastList-DWl6zz_z.mjs.map +1 -0
  329. package/dist/PodcastList-Dbt4nmKg.mjs.map +1 -0
  330. package/dist/PodcastList-KaQBRbR9.mjs.map +1 -0
  331. package/dist/{PodcastList-BAOJhQ7G.mjs → PodcastList-N_XOE-hI.mjs} +5 -5
  332. package/dist/PodcastList-d3SGLPvF.mjs.map +1 -0
  333. package/dist/{PodcastList-Bbe3yWiu.mjs → PodcastList-yjd_exFg.mjs} +4 -4
  334. package/dist/PodcastPage-B0pbZ5o_.mjs.map +1 -0
  335. package/dist/PodcastPage-BOA44Us4.mjs.map +1 -0
  336. package/dist/PodcastPage-Bs1wz-0E.mjs.map +1 -0
  337. package/dist/PodcastPage-C37Wa-qH.mjs.map +1 -0
  338. package/dist/PodcastPage-D0HYJxaK.mjs.map +1 -0
  339. package/dist/PodcastPage-D0U6-etV.mjs.map +1 -0
  340. package/dist/PodcastPage-DwMPY4po.mjs.map +1 -0
  341. package/dist/{PodcastPage-CAxub2do.mjs → PodcastPage-SUEm-Enm.mjs} +26 -26
  342. package/dist/PodcastPlayBar-Bo-W_dSK.mjs.map +1 -0
  343. package/dist/PodcastPlayBar-CBtMWlVc.mjs.map +1 -0
  344. package/dist/{PodcastPlayBar-gAEttclo.mjs → PodcastPlayBar-COU17bnm.mjs} +3 -3
  345. package/dist/PodcastPlayBar-Cpr3Ff7J.mjs.map +1 -0
  346. package/dist/PodcastPlayBasicButton-BvJPrxpI.mjs.map +1 -0
  347. package/dist/PodcastPlayBasicButton-CS5TNlmX.mjs.map +1 -0
  348. package/dist/{PodcastPlayBasicButton-7w91y2ow.mjs → PodcastPlayBasicButton-CVXhEUHB.mjs} +1 -1
  349. package/dist/{PodcastPlayButton-CQY0d6f-.mjs → PodcastPlayButton--gjzxW0o.mjs} +3 -3
  350. package/dist/PodcastPlayButton-BqvE4ZUl.mjs.map +1 -0
  351. package/dist/PodcastPlayButton-DW5Feest.mjs.map +1 -0
  352. package/dist/PodcastPlaylistInlineList-BV31HaB2.mjs.map +1 -0
  353. package/dist/PodcastPlaylistInlineList-C-WYs6aE.mjs.map +1 -0
  354. package/dist/{PodcastPlaylistInlineList-BE5L8pSP.mjs → PodcastPlaylistInlineList-DsEHaYGZ.mjs} +7 -7
  355. package/dist/PodcastPlaylistInlineList-HEdFAq1l.mjs.map +1 -0
  356. package/dist/{PodcastPresentationList-DH6Rq0Z4.mjs → PodcastPresentationList-B9vORr36.mjs} +4 -4
  357. package/dist/PodcastPresentationList-ChqvdXY0.mjs.map +1 -0
  358. package/dist/PodcastPresentationList-Dit6HvJr.mjs.map +1 -0
  359. package/dist/{PodcastProgressBar-DoeG7lDj.mjs → PodcastProgressBar-B0FwZOTT.mjs} +3 -3
  360. package/dist/PodcastProgressBar-B8ONWq-Z.mjs.map +1 -0
  361. package/dist/PodcastProgressBar-BoGtJPAa.mjs.map +1 -0
  362. package/dist/PodcastProgressBar-DTRhKzW-.mjs.map +1 -0
  363. package/dist/{PodcastRawTranscript-Cktqtbcg.mjs → PodcastRawTranscript-BiuftXu-.mjs} +2 -2
  364. package/dist/PodcastRawTranscript-C8SJcaQE.mjs.map +1 -0
  365. package/dist/PodcastRawTranscript-nfzHM0k_.mjs.map +1 -0
  366. package/dist/PodcastRawTranscript-r5pRtZDg.mjs.map +1 -0
  367. package/dist/{PodcastSwiperList-DZ26-8xy.mjs → PodcastSwiperList-BKOYhrsH.mjs} +4 -4
  368. package/dist/PodcastSwiperList-Bsg0q89o.mjs.map +1 -0
  369. package/dist/PodcastSwiperList-BxsEv7_8.mjs.map +1 -0
  370. package/dist/PodcastSwiperList-Cju5VHcH.mjs.map +1 -0
  371. package/dist/PodcastmakerHeader-6fIwE70J.mjs.map +1 -0
  372. package/dist/PodcastmakerHeader-BBPEy__r.mjs.map +1 -0
  373. package/dist/{PodcastmakerHeader-MhdOrssb.mjs → PodcastmakerHeader-CIoJwm1L.mjs} +1 -1
  374. package/dist/PodcastsPage-967SI8kL.mjs.map +1 -0
  375. package/dist/{PodcastsPage-BXjTDNhn.mjs → PodcastsPage-B5NwPMyn.mjs} +5 -5
  376. package/dist/PodcastsPage-B7j2XxPZ.mjs.map +1 -0
  377. package/dist/PodcastsPage-BOzszXpc.mjs.map +1 -0
  378. package/dist/PodcastsPage-Bw0tzWoX.mjs.map +1 -0
  379. package/dist/PodcastsPage-D3TAYJV8.mjs.map +1 -0
  380. package/dist/PodcastsPage-DJsgHs7V.mjs.map +1 -0
  381. package/dist/PodcastsPage-DKWHzNNA.mjs.map +1 -0
  382. package/dist/PodcastsPage-DONqoMkB.mjs.map +1 -0
  383. package/dist/PodcastsPage-DUcfPeLD.mjs.map +1 -0
  384. package/dist/PodcastsPage-DWBgwD6o.mjs.map +1 -0
  385. package/dist/PodcastsPage-DZO4H1Ff.mjs.map +1 -0
  386. package/dist/PodcastsPage-DhEMPqCT.mjs.map +1 -0
  387. package/dist/ProductorSearch-BgmV_RCq.mjs.map +1 -0
  388. package/dist/{ProductorSearch-Z36zTZK4.mjs → ProductorSearch-BiUEs7mG.mjs} +3 -3
  389. package/dist/ProductorSearch-C4Nv2HzS.mjs.map +1 -0
  390. package/dist/ProductorSearch-DtVe_rU9.mjs.map +1 -0
  391. package/dist/ProgressBar-BMeSiueh.mjs.map +1 -0
  392. package/dist/ProgressBar-C15ih0uL.mjs.map +1 -0
  393. package/dist/{ProgressBar-CTOa-MDz.mjs → ProgressBar-CXB5q3-H.mjs} +2 -2
  394. package/dist/ProgressBar-DAUOWol1.mjs.map +1 -0
  395. package/dist/QrCode-BYLxjhwi.mjs.map +1 -0
  396. package/dist/QrCode-CCigeTaZ.mjs +109 -0
  397. package/dist/QrCode-CaXoOjo-.mjs.map +1 -0
  398. package/dist/QrCode-CcQR60hB.mjs.map +1 -0
  399. package/dist/QrCode-S_eLVZoz.mjs.map +1 -0
  400. package/dist/QrCode-XZMMiaX5.mjs.map +1 -0
  401. package/dist/QrCodeModal-BJOu1pAV.mjs.map +1 -0
  402. package/dist/QrCodeModal-BjT-0P0w.mjs.map +1 -0
  403. package/dist/QrCodeModal-BrabSTzq.mjs.map +1 -0
  404. package/dist/QrCodeModal-CjvbRYLW.mjs.map +1 -0
  405. package/dist/{QrCodeModal-DE3juCsN.mjs → QrCodeModal-Dpw_tCQ6.mjs} +1 -1
  406. package/dist/QrCodeModal-N2fjbP4S.mjs.map +1 -0
  407. package/dist/RadioCurrently-B_b8DV2w.mjs.map +1 -0
  408. package/dist/RadioCurrently-DufvDqm1.mjs.map +1 -0
  409. package/dist/{RadioCurrently-BlAhcc9E.mjs → RadioCurrently-ysRKhxKU.mjs} +3 -3
  410. package/dist/RadioHistory-B03bYMxm.mjs.map +1 -0
  411. package/dist/{RadioHistory-C7S79sZD.mjs → RadioHistory-DjsqvRgH.mjs} +2 -2
  412. package/dist/RadioHistory-Dv4gt9TM.mjs.map +1 -0
  413. package/dist/RadioImage-BFdiGgi_.mjs.map +1 -0
  414. package/dist/{RadioImage-BTn2Lquc.mjs → RadioImage-CSseYIVb.mjs} +4 -4
  415. package/dist/RadioImage-CrtD33dM.mjs.map +1 -0
  416. package/dist/RadioList--f7RDhHJ.mjs.map +1 -0
  417. package/dist/{RadioList-BD3zNwmk.mjs → RadioList-BZFFAobk.mjs} +4 -4
  418. package/dist/RadioList-De9NQ23Q.mjs.map +1 -0
  419. package/dist/RadioPage-BK1N--Kr.mjs.map +1 -0
  420. package/dist/RadioPage-BTtNFJI2.mjs.map +1 -0
  421. package/dist/RadioPage-CcK0y_5s.mjs.map +1 -0
  422. package/dist/RadioPage-Cqas0JX6.mjs.map +1 -0
  423. package/dist/{RadioPage-Bv3oupa1.mjs → RadioPage-Cwooj0wF.mjs} +4 -4
  424. package/dist/RadioPage-DhSB0sX5.mjs.map +1 -0
  425. package/dist/RadioPage-DlahFXYC.mjs.map +1 -0
  426. package/dist/RadioPlanning-BU1E8i4t.mjs.map +1 -0
  427. package/dist/{RadioPlanning-nkv_Mb_t.mjs → RadioPlanning-BmIxuUBI.mjs} +2 -2
  428. package/dist/RadioPlanning-Bx-N-xqX.mjs.map +1 -0
  429. package/dist/RadioProgressBar-0XM3ZTGU.mjs.map +1 -0
  430. package/dist/{RadioProgressBar-B2EgCOrK.mjs → RadioProgressBar-CQRGuPpC.mjs} +1 -1
  431. package/dist/RadioProgressBar-oyeS56mV.mjs.map +1 -0
  432. package/dist/{RecaptchaModal-w-9MlZ45.mjs → RecaptchaModal-BdW4xNlX.mjs} +1 -1
  433. package/dist/RecaptchaModal-DFlFQcHs.mjs.map +1 -0
  434. package/dist/RecaptchaModal-iLQ4UYOL.mjs.map +1 -0
  435. package/dist/ReportAbuseModal-BaPt2DLK.mjs.map +1 -0
  436. package/dist/ReportAbuseModal-BdZRe29L.mjs.map +1 -0
  437. package/dist/ReportAbuseModal-CH7Y153n.mjs.map +1 -0
  438. package/dist/{ReportAbuseModal-O1K7j7NV.mjs → ReportAbuseModal-jjGeXbB9.mjs} +4 -4
  439. package/dist/RightsIndicator-4pUsBq5j.mjs.map +1 -0
  440. package/dist/RightsIndicator-BH3jm_1O.mjs.map +1 -0
  441. package/dist/{RightsIndicator-D0cSu8j2.mjs → RightsIndicator-CPzWpH5Z.mjs} +1 -1
  442. package/dist/RightsIndicator-d8ffUFIj.mjs.map +1 -0
  443. package/dist/{RightsWrapper-BUj_1bwR.mjs → RightsWrapper-BTQ8GGUi.mjs} +5 -5
  444. package/dist/RightsWrapper-C3BRHqqo.mjs.map +1 -0
  445. package/dist/RightsWrapper-DJG9Ds6c.mjs.map +1 -0
  446. package/dist/RightsWrapper-nBURBTJX.mjs.map +1 -0
  447. package/dist/{RubriqueChoice-DaTWiDbl.mjs → RubriqueChoice-C-S-veJJ.mjs} +1 -1
  448. package/dist/RubriqueChoice-DsmnrUNs.mjs.map +1 -0
  449. package/dist/{RubriqueChooser-C33LorHa.mjs → RubriqueChooser-CNGn8LcP.mjs} +1 -1
  450. package/dist/RubriqueChooser-WmzcajTt.mjs.map +1 -0
  451. package/dist/RubriqueFilter-C9C_OiF5.mjs.map +1 -0
  452. package/dist/RubriqueFilter-DDI7DjMR.mjs.map +1 -0
  453. package/dist/RubriqueFilter-_8V1n9-x.mjs.map +1 -0
  454. package/dist/{RubriqueFilter-RgardNnQ.mjs → RubriqueFilter-rxiG8Wci.mjs} +3 -3
  455. package/dist/RubriqueList-99-nWSvq.mjs.map +1 -0
  456. package/dist/RubriqueList-BiRimk17.mjs.map +1 -0
  457. package/dist/RubriqueList-H_NHILuj.mjs.map +1 -0
  458. package/dist/{RubriqueList-DA9OYqUl.mjs → RubriqueList-rJj2IycY.mjs} +4 -4
  459. package/dist/RubriquePage-6KFPBPz8.mjs.map +1 -0
  460. package/dist/{RubriquePage-xgTOce7c.mjs → RubriquePage-BNEWnk3-.mjs} +4 -4
  461. package/dist/RubriquePage-Bpt-x7IK.mjs.map +1 -0
  462. package/dist/RubriquePage-Cwz9OqLO.mjs.map +1 -0
  463. package/dist/SearchPage-BtZnj3sA.mjs.map +1 -0
  464. package/dist/SearchPage-CbbbcXxs.mjs.map +1 -0
  465. package/dist/SearchPage-DMIV2AgJ.mjs.map +1 -0
  466. package/dist/{SearchPage-C3o5RPP0.mjs → SearchPage-DsZzPoEw.mjs} +2 -2
  467. package/dist/ShareAnonymous-BeSQozvM.mjs.map +1 -0
  468. package/dist/ShareAnonymous-BgsR6Ahp.mjs.map +1 -0
  469. package/dist/ShareAnonymous-CNWR1v6X.mjs.map +1 -0
  470. package/dist/{ShareAnonymous-bOwwEjPv.mjs → ShareAnonymous-DK2rnLl1.mjs} +3 -3
  471. package/dist/ShareAnonymous-DVpKBKbi.mjs.map +1 -0
  472. package/dist/ShareAnonymous-DWArDFT0.mjs.map +1 -0
  473. package/dist/ShareAnonymous-IaVbb-rp.mjs.map +1 -0
  474. package/dist/ShareModalPlayer-BHmsvxXF.mjs.map +1 -0
  475. package/dist/{ShareModalPlayer-D2oBrSly.mjs → ShareModalPlayer-Cfnk68-U.mjs} +1 -1
  476. package/dist/ShareModalPlayer-DLBU3lsU.mjs.map +1 -0
  477. package/dist/ShareModalPlayer-O-CmDObW.mjs.map +1 -0
  478. package/dist/ShareModalPlayer-QYu8Q9ks.mjs.map +1 -0
  479. package/dist/ShareModalPlayer-Vga-96DM.mjs.map +1 -0
  480. package/dist/{ShareNewsletter-CNw1LziN.mjs → ShareNewsletter-BWIAt47D.mjs} +1 -1
  481. package/dist/ShareNewsletter-BhFk6ARk.mjs.map +1 -0
  482. package/dist/ShareNewsletter-JCO4h7rk.mjs.map +1 -0
  483. package/dist/SharePlayer-C-RgIOh1.mjs.map +1 -0
  484. package/dist/{SharePlayer-CRri0YED.mjs → SharePlayer-C0aveOwy.mjs} +2 -2
  485. package/dist/SharePlayer-CNXrUj8M.mjs.map +1 -0
  486. package/dist/SharePlayer-D0-qY2dS.mjs.map +1 -0
  487. package/dist/SharePlayer-DQoFa7iv.mjs.map +1 -0
  488. package/dist/SharePlayer-DwNl3E7o.mjs.map +1 -0
  489. package/dist/{SharePlayerRadio-DVsegQMu.mjs → SharePlayerRadio-BqaeyEls.mjs} +2 -2
  490. package/dist/SharePlayerRadio-CHvCtKdZ.mjs.map +1 -0
  491. package/dist/SharePlayerRadio-CIsy-rCC.mjs.map +1 -0
  492. package/dist/SharePlayerRadio-ChfNulnf.mjs.map +1 -0
  493. package/dist/SharePlayerRadio-DA-W-306.mjs.map +1 -0
  494. package/dist/SharePlayerRadio-DwPeLUsk.mjs.map +1 -0
  495. package/dist/SharePlayerTypes-CeMV4n10.mjs.map +1 -0
  496. package/dist/SharePlayerTypes-DdyoQZDi.mjs.map +1 -0
  497. package/dist/{SharePlayerTypes-BxkEoBSL.mjs → SharePlayerTypes-DyrqFDVJ.mjs} +1 -1
  498. package/dist/ShareSocialsButtons-BHWzJVne.mjs.map +1 -0
  499. package/dist/ShareSocialsButtons-Bjx2ONvj.mjs.map +1 -0
  500. package/dist/{ShareSocialsButtons-BJ3DqvIO.mjs → ShareSocialsButtons-PqMXhFEk.mjs} +1 -1
  501. package/dist/{SimpleLayout-BJlcQjx9.mjs → SimpleLayout-9O9FZ69Q.mjs} +2 -2
  502. package/dist/SimpleLayout-B-QSfHeQ.mjs.map +1 -0
  503. package/dist/SimpleLayout-BauUacaf.mjs.map +1 -0
  504. package/dist/SimpleLayout-C29bPtbd.mjs.map +1 -0
  505. package/dist/SimpleLayout-Cjc3Q9Mb.mjs.map +1 -0
  506. package/dist/SimpleLayout-D4sVjQGu.mjs.map +1 -0
  507. package/dist/SimpleLayout-DaoXS--3.mjs.map +1 -0
  508. package/dist/SimpleLayout-vkWEZHLi.mjs.map +1 -0
  509. package/dist/{SmartLinkPage-DpD90wc7.mjs → SmartLinkPage-6HgX8LDv.mjs} +16 -16
  510. package/dist/SmartLinkPage-BcQmox7e.mjs.map +1 -0
  511. package/dist/SmartLinkPage-M_zB_Xp1.mjs.map +1 -0
  512. package/dist/SubscribeButtons-CyGYD1B1.mjs.map +1 -0
  513. package/dist/SubscribeButtons-DjjZQfOU.mjs.map +1 -0
  514. package/dist/{SubscribeButtons-zlRDGEzS.mjs → SubscribeButtons-IpzqDGIn.mjs} +3 -3
  515. package/dist/SubscribeButtons-yA2wowFc.mjs.map +1 -0
  516. package/dist/SwiperList-BNODHhLF.mjs.map +1 -0
  517. package/dist/SwiperList-Cqklwlg9.mjs.map +1 -0
  518. package/dist/{SwiperList-BlF3rPq5.mjs → SwiperList-O8nUg87R.mjs} +1 -1
  519. package/dist/TagList-4RDriU1J.mjs.map +1 -0
  520. package/dist/TagList-B5JPfT6j.mjs.map +1 -0
  521. package/dist/TagList-DVjqXiaA.mjs.map +1 -0
  522. package/dist/{TagList-BBHyaKp-.mjs → TagList-V9fAFATL.mjs} +2 -2
  523. package/dist/TagPage-BOsz6Bot.mjs.map +1 -0
  524. package/dist/TagPage-CALmJwxW.mjs.map +1 -0
  525. package/dist/{TagPage-DLpNBBjP.mjs → TagPage-CsFwN4sE.mjs} +3 -3
  526. package/dist/TagPage-DMuxYu6y.mjs.map +1 -0
  527. package/dist/{TopBar-CLWWRgr7.mjs → TopBar-0oG6YPlW.mjs} +37 -37
  528. package/dist/TopBar-CUCBss7X.mjs.map +1 -0
  529. package/dist/TopBar-CeQQ1hgH.mjs.map +1 -0
  530. package/dist/TopBar-DdxThCLR.mjs.map +1 -0
  531. package/dist/{UserButtonContent-BR3Rlqwp.mjs → UserButtonContent--VK68UsY.mjs} +6 -6
  532. package/dist/UserButtonContent-067qGenf.mjs.map +1 -0
  533. package/dist/UserButtonContent-Dqgyrgzv.mjs.map +1 -0
  534. package/dist/VideoModuleBox-9QgBI-Q-.mjs.map +1 -0
  535. package/dist/{VideoModuleBox-DxYJVwy3.mjs → VideoModuleBox-Bcqman6a.mjs} +1 -1
  536. package/dist/VideoModuleBox-BrVK2bDZ.mjs.map +1 -0
  537. package/dist/VideoModuleBox-DWO47_bZ.mjs.map +1 -0
  538. package/dist/VideoPage-4MB4zmnA.mjs.map +1 -0
  539. package/dist/VideoPage-BDGvtr1o.mjs.map +1 -0
  540. package/dist/{VideoPage-BaeTduNB.mjs → VideoPage-BjlaP2DU.mjs} +6 -6
  541. package/dist/VideoPage-C-yjvvhl.mjs.map +1 -0
  542. package/dist/VideoPage-C0_t7XMC.mjs.map +1 -0
  543. package/dist/VideoPage-CIDpzbkb.mjs.map +1 -0
  544. package/dist/VideoPage-D2V1oXGC.mjs.map +1 -0
  545. package/dist/VideoPage-DEJSfeFy.mjs.map +1 -0
  546. package/dist/{classicApi-pmODlqv5.mjs → classicApi-CGipMqf7.mjs} +267 -256
  547. package/dist/classicApi-CW1Z-HoF.mjs.map +1 -0
  548. package/dist/classicApi-OzToKuW1.mjs.map +1 -0
  549. package/dist/{downloadHelper-BAI-eqgA.mjs → downloadHelper-C3QooCxr.mjs} +1 -1
  550. package/dist/downloadHelper-D7dUpp5l.mjs.map +1 -0
  551. package/dist/downloadHelper-DwV3Mmd3.mjs.map +1 -0
  552. package/dist/index.css +1 -1
  553. package/dist/index.mjs +183 -183
  554. package/dist/src/components/form/ClassicDatePicker.vue.d.ts +24 -14
  555. package/dist/src/components/form/OctopusMultiselect.vue.d.ts +2 -0
  556. package/dist/src/i18n.d.ts +2 -0
  557. package/dist/tests.mjs +2 -2
  558. package/dist/useAdvancedParamInit-BKw9VZ53.mjs.map +1 -0
  559. package/dist/useAdvancedParamInit-CyRmbqqe.mjs.map +1 -0
  560. package/dist/{useAdvancedParamInit-Bgvt8758.mjs → useAdvancedParamInit-D5roUdHI.mjs} +10 -10
  561. package/dist/useDayjs-BKBB00TF.mjs.map +1 -0
  562. package/dist/useDayjs-UQLGUbw5.mjs.map +1 -0
  563. package/dist/{useDayjs-DGb3L4kJ.mjs → useDayjs-VUs19G9T.mjs} +1 -1
  564. package/dist/useErrorHandler-BKN3lhJ5.mjs.map +1 -0
  565. package/dist/useErrorHandler-C3XnRTmp.mjs.map +1 -0
  566. package/dist/{useErrorHandler-D9W2BURn.mjs → useErrorHandler-x9sjDYSz.mjs} +1 -1
  567. package/dist/useImageProxy-AEcmDpvW.mjs.map +1 -0
  568. package/dist/useImageProxy-BzTG_GCn.mjs.map +1 -0
  569. package/dist/{useImageProxy-8ndy_oTo.mjs → useImageProxy-CCpDzPmQ.mjs} +1 -1
  570. package/dist/useOrgaComputed-4PduqYTq.mjs.map +1 -0
  571. package/dist/useOrgaComputed-C2n0FBbv.mjs.map +1 -0
  572. package/dist/{useOrgaComputed-CBJ5sDOm.mjs → useOrgaComputed-D81Jihm-.mjs} +2 -2
  573. package/dist/{usePlayerLogicProgress-C2L7cMdd.mjs → usePlayerLogicProgress-BybmSAcs.mjs} +2 -2
  574. package/dist/usePlayerLogicProgress-CKoCod6g.mjs.map +1 -0
  575. package/dist/usePlayerLogicProgress-DZaPRo6p.mjs.map +1 -0
  576. package/dist/usePodcastView-B-2HPFAo.mjs.map +1 -0
  577. package/dist/{usePodcastView-CoDJJr6Y.mjs → usePodcastView-CkM-n6iO.mjs} +3 -3
  578. package/dist/usePodcastView-jdYTK1cW.mjs.map +1 -0
  579. package/dist/{usePresentationItem-DZZVm3hh.mjs → usePresentationItem-CLEGZwI3.mjs} +3 -3
  580. package/dist/usePresentationItem-Com4i40U.mjs.map +1 -0
  581. package/dist/usePresentationItem-OpMean0v.mjs.map +1 -0
  582. package/dist/{useRights-DOXtpjv5.mjs → useRights-BI2tXXjR.mjs} +1 -1
  583. package/dist/useRights-Bsv9hr7w.mjs.map +1 -0
  584. package/dist/useRights-DfudFDI6.mjs.map +1 -0
  585. package/dist/{useRubriquesFilterComputed-DoUOqOrJ.mjs → useRubriquesFilterComputed-D1yqLnK4.mjs} +1 -1
  586. package/dist/useRubriquesFilterComputed-DGDJp2gc.mjs.map +1 -0
  587. package/dist/useRubriquesFilterComputed-NNE-FElk.mjs.map +1 -0
  588. package/dist/{useRubriquesFilterParam-BE8BbmAQ.mjs → useRubriquesFilterParam-2eMd5ND7.mjs} +1 -1
  589. package/dist/useRubriquesFilterParam-DE5dYl6c.mjs.map +1 -0
  590. package/dist/useRubriquesFilterParam-DXYD4G0D.mjs.map +1 -0
  591. package/dist/useSharePlatforms-CrQ8r5vT.mjs.map +1 -0
  592. package/dist/useSharePlatforms-D124fJ_v.mjs.map +1 -0
  593. package/dist/{useSharePlatforms-ZWYDJZBy.mjs → useSharePlatforms-sXgVxsL5.mjs} +5 -5
  594. package/dist/{useSimplePageParam-DFKSEyiE.mjs → useSimplePageParam-BrtYXOUt.mjs} +1 -1
  595. package/dist/useSimplePageParam-CruL7rLG.mjs.map +1 -0
  596. package/dist/useSimplePageParam-SaBaPhb8.mjs.map +1 -0
  597. package/dist/{useTranslation-Dr7KU7Y4.mjs → useTranslation-BVQwv02Q.mjs} +9 -9
  598. package/dist/useTranslation-Bf2zP_6C.mjs.map +1 -0
  599. package/dist/useTranslation-BuhzZoI8.mjs.map +1 -0
  600. package/dist/useTranslation-OWqckMEl.mjs.map +1 -0
  601. package/dist/usefetchRadioData-D01ws733.mjs.map +1 -0
  602. package/dist/usefetchRadioData-DDRPoD4s.mjs.map +1 -0
  603. package/dist/{usefetchRadioData-SLWfXkYt.mjs → usefetchRadioData-zyQNqiV3.mjs} +1 -1
  604. package/package.json +1 -1
  605. package/src/components/composable/useTranslation.ts +2 -2
  606. package/src/components/display/sharing/QrCode.vue +63 -64
  607. package/src/components/form/ClassicDatePicker.vue +32 -20
  608. package/src/components/form/OctopusMultiselect.vue +3 -4
  609. package/src/components/misc/ClassicPopover.vue +1 -1
  610. package/src/components/misc/player/video/PlayerVideoHls.vue +160 -159
  611. package/src/i18n.ts +38 -29
  612. package/tests/components/form/ClassicDatePicker.spec.ts +32 -0
  613. package/tests/components/form/OctopusMultiselect.spec.ts +5 -4
  614. package/dist/ClassicDatePicker-B7UA9CqR.mjs +0 -187
  615. package/dist/QrCode-DuScZ7PD.mjs +0 -105
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentInput-DbhOyi7c.mjs","names":["Constants","classicApi","_openBlock","_createElementBlock","_createBlock","_createCommentVNode","_createVNode","_createElementVNode","_normalizeClass","_toDisplayString","_sfc_main"],"sources":["../src/components/display/comments/CommentInput.vue","../src/components/display/comments/CommentInput.vue"],"sourcesContent":["<template>\n <div class=\"d-flex flex-column comment-input-container mt-3\">\n <CommentName v-if=\"commentStore.commentUser?.name\" />\n <ClassicContentEditable\n ref=\"textarea\"\n v-model=\"newComment\"\n class=\"comment-input\"\n :placeholder=\"placeholder\"\n @focus=\"isTextareaActive = true\"\n />\n <div v-if=\"isTextareaActive\" class=\"d-flex justify-content-between mt-1\">\n <ClassicEmojiPicker\n :id=\"uniqueId\"\n popover-relative-class=\"page-element\"\n @emoji-selected=\"addEmojiSelected\"\n />\n <div class=\"d-flex ms-auto\">\n <p\n class=\"d-flex justify-content-end h6 me-3\"\n :class=\"{ 'text-danger': !commentTooLong }\"\n >\n {{ countComment + \" / \" + maxComment }}\n </p>\n <button class=\"btn me-2\" @mousedown=\"cancelAction\">\n {{ t(\"Cancel\") }}\n </button>\n <button\n class=\"btn btn-primary\"\n :disabled=\"0 === countComment || !commentTooLong\"\n @mousedown=\"requestToSend\"\n >\n {{ placeholder }}\n </button>\n </div>\n </div>\n <CheckIdentityModal\n v-if=\"isCheckIdentity\"\n @validate=\"postComment\"\n @close=\"isCheckIdentity = false\"\n />\n <MessageModal\n v-if=\"postError\"\n :validatetext=\"t('Close')\"\n :title=\"t('Error')\"\n :message=\"t('Error occurs while post your comment...')\"\n @close=\"postError = false\"\n @validate=\"postError = false\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport classicApi from \"../../../api/classicApi\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport Constants from \"../../../../public/config\";\nimport { defineAsyncComponent, ref, computed, watch, useTemplateRef } from \"vue\";\nimport { useCommentStore } from \"../../../stores/CommentStore\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\nconst CheckIdentityModal = defineAsyncComponent(\n () => import(\"./modal/CheckIdentityModal.vue\"),\n);\nconst CommentName = defineAsyncComponent(() => import(\"./CommentName.vue\"));\nconst MessageModal = defineAsyncComponent(\n () => import(\"../../misc/modal/MessageModal.vue\"),\n);\nconst ClassicEmojiPicker = defineAsyncComponent(\n () => import(\"../../form/ClassicEmojiPicker.vue\"),\n);\nconst ClassicContentEditable = defineAsyncComponent(\n () => import(\"../../form/ClassicContentEditable.vue\"),\n);\n\n//Props \nconst props = defineProps({\n podcast: { default: undefined, type: Object as () => Podcast },\n focus: { default: false, type: Boolean },\n inAnswerComment: {\n default: undefined,\n type: Object as () => CommentPodcast,\n },\n})\n\n//Emits\nconst emit = defineEmits([\"cancelAction\", \"newComment\"]);\n\n//Data \nconst maxComment = Constants.MAX_COMMENT;\nconst newComment = ref(\"\");\nconst isTextareaActive = ref(false);\nconst isCheckIdentity = ref(false);\nconst postError = ref(false);\nconst textareaRef = useTemplateRef('textarea');\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\nconst commentStore = useCommentStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst commentTooLong = computed(() => countComment.value <= maxComment);\nconst countComment = computed(() => newComment.value.length);\nconst placeholder = computed(() => props.inAnswerComment?.commentId? t(\"Answer a comment\"): t(\"Write a comment\"));\nconst uniqueId = computed(() => \"-comment\"+(props.inAnswerComment?.commentId??\"-parent\"));\n\n\n//Watch\nwatch(()=>props.focus, () => textareaRef?.value?.focus());\n\n\n//Methods\nfunction addEmojiSelected(emoji: string) {\n newComment.value += emoji;\n}\nfunction requestToSend(): void {\n if (commentStore.commentUser?.name) {\n postComment();\n } else {\n isCheckIdentity.value = true;\n }\n}\nfunction cancelAction(): void {\n newComment.value = \"\";\n isTextareaActive.value = false;\n emit(\"cancelAction\");\n}\nasync function postComment(): Promise<void> {\n try {\n const commentReceived = await classicApi.postData<CommentPodcast>({\n api: 2,\n path: \"comment/\",\n dataToSend: {\n answerTo: props.inAnswerComment?.commentId,\n content: newComment.value.trim(),\n name: commentStore.commentUser?.name ?? \"\",\n podcastId:\n props.podcast?.podcastId ?? props.inAnswerComment?.podcastId ?? 0,\n uuid: commentStore.commentUser?.uuid ?? \"\",\n timeline: defineTimelineValue(),\n },\n isNotAuth: undefined === authStore.authOrgaId,\n });\n emit(\"newComment\", commentReceived);\n newComment.value = \"\";\n isTextareaActive.value = false;\n } catch {\n postError.value = true;\n }\n isCheckIdentity.value = false;\n}\nfunction defineTimelineValue(): number {\n let timeline = 0;\n if (\n undefined !== props.podcast &&\n (playerStore.playerPodcast?.podcastId === props.podcast.podcastId ||\n playerStore.playerLive?.podcastId === props.podcast.podcastId)\n ) {\n timeline = Math.round(playerStore.playerElapsed * playerStore.playerTotal);\n if (props.podcast.duration && playerStore.playerPodcast) {\n timeline = Math.round(\n timeline - (playerStore.playerTotal - props.podcast.duration / 1000),\n );\n }\n }\n return timeline < 0 ? 0 : timeline;\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app .comment-input-container {\n .comment-input {\n border-bottom: 0.1rem solid var(--octopus-border-default);\n overflow: hidden;\n min-height: 36px;\n resize: none;\n }\n}\n</style>\n","<template>\n <div class=\"d-flex flex-column comment-input-container mt-3\">\n <CommentName v-if=\"commentStore.commentUser?.name\" />\n <ClassicContentEditable\n ref=\"textarea\"\n v-model=\"newComment\"\n class=\"comment-input\"\n :placeholder=\"placeholder\"\n @focus=\"isTextareaActive = true\"\n />\n <div v-if=\"isTextareaActive\" class=\"d-flex justify-content-between mt-1\">\n <ClassicEmojiPicker\n :id=\"uniqueId\"\n popover-relative-class=\"page-element\"\n @emoji-selected=\"addEmojiSelected\"\n />\n <div class=\"d-flex ms-auto\">\n <p\n class=\"d-flex justify-content-end h6 me-3\"\n :class=\"{ 'text-danger': !commentTooLong }\"\n >\n {{ countComment + \" / \" + maxComment }}\n </p>\n <button class=\"btn me-2\" @mousedown=\"cancelAction\">\n {{ t(\"Cancel\") }}\n </button>\n <button\n class=\"btn btn-primary\"\n :disabled=\"0 === countComment || !commentTooLong\"\n @mousedown=\"requestToSend\"\n >\n {{ placeholder }}\n </button>\n </div>\n </div>\n <CheckIdentityModal\n v-if=\"isCheckIdentity\"\n @validate=\"postComment\"\n @close=\"isCheckIdentity = false\"\n />\n <MessageModal\n v-if=\"postError\"\n :validatetext=\"t('Close')\"\n :title=\"t('Error')\"\n :message=\"t('Error occurs while post your comment...')\"\n @close=\"postError = false\"\n @validate=\"postError = false\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport classicApi from \"../../../api/classicApi\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport Constants from \"../../../../public/config\";\nimport { defineAsyncComponent, ref, computed, watch, useTemplateRef } from \"vue\";\nimport { useCommentStore } from \"../../../stores/CommentStore\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\nconst CheckIdentityModal = defineAsyncComponent(\n () => import(\"./modal/CheckIdentityModal.vue\"),\n);\nconst CommentName = defineAsyncComponent(() => import(\"./CommentName.vue\"));\nconst MessageModal = defineAsyncComponent(\n () => import(\"../../misc/modal/MessageModal.vue\"),\n);\nconst ClassicEmojiPicker = defineAsyncComponent(\n () => import(\"../../form/ClassicEmojiPicker.vue\"),\n);\nconst ClassicContentEditable = defineAsyncComponent(\n () => import(\"../../form/ClassicContentEditable.vue\"),\n);\n\n//Props \nconst props = defineProps({\n podcast: { default: undefined, type: Object as () => Podcast },\n focus: { default: false, type: Boolean },\n inAnswerComment: {\n default: undefined,\n type: Object as () => CommentPodcast,\n },\n})\n\n//Emits\nconst emit = defineEmits([\"cancelAction\", \"newComment\"]);\n\n//Data \nconst maxComment = Constants.MAX_COMMENT;\nconst newComment = ref(\"\");\nconst isTextareaActive = ref(false);\nconst isCheckIdentity = ref(false);\nconst postError = ref(false);\nconst textareaRef = useTemplateRef('textarea');\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\nconst commentStore = useCommentStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst commentTooLong = computed(() => countComment.value <= maxComment);\nconst countComment = computed(() => newComment.value.length);\nconst placeholder = computed(() => props.inAnswerComment?.commentId? t(\"Answer a comment\"): t(\"Write a comment\"));\nconst uniqueId = computed(() => \"-comment\"+(props.inAnswerComment?.commentId??\"-parent\"));\n\n\n//Watch\nwatch(()=>props.focus, () => textareaRef?.value?.focus());\n\n\n//Methods\nfunction addEmojiSelected(emoji: string) {\n newComment.value += emoji;\n}\nfunction requestToSend(): void {\n if (commentStore.commentUser?.name) {\n postComment();\n } else {\n isCheckIdentity.value = true;\n }\n}\nfunction cancelAction(): void {\n newComment.value = \"\";\n isTextareaActive.value = false;\n emit(\"cancelAction\");\n}\nasync function postComment(): Promise<void> {\n try {\n const commentReceived = await classicApi.postData<CommentPodcast>({\n api: 2,\n path: \"comment/\",\n dataToSend: {\n answerTo: props.inAnswerComment?.commentId,\n content: newComment.value.trim(),\n name: commentStore.commentUser?.name ?? \"\",\n podcastId:\n props.podcast?.podcastId ?? props.inAnswerComment?.podcastId ?? 0,\n uuid: commentStore.commentUser?.uuid ?? \"\",\n timeline: defineTimelineValue(),\n },\n isNotAuth: undefined === authStore.authOrgaId,\n });\n emit(\"newComment\", commentReceived);\n newComment.value = \"\";\n isTextareaActive.value = false;\n } catch {\n postError.value = true;\n }\n isCheckIdentity.value = false;\n}\nfunction defineTimelineValue(): number {\n let timeline = 0;\n if (\n undefined !== props.podcast &&\n (playerStore.playerPodcast?.podcastId === props.podcast.podcastId ||\n playerStore.playerLive?.podcastId === props.podcast.podcastId)\n ) {\n timeline = Math.round(playerStore.playerElapsed * playerStore.playerTotal);\n if (props.podcast.duration && playerStore.playerPodcast) {\n timeline = Math.round(\n timeline - (playerStore.playerTotal - props.podcast.duration / 1000),\n );\n }\n }\n return timeline < 0 ? 0 : timeline;\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app .comment-input-container {\n .comment-input {\n border-bottom: 0.1rem solid var(--octopus-border-default);\n overflow: hidden;\n min-height: 36px;\n resize: none;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentInput-I97yysBW.mjs","names":["Constants","classicApi","_openBlock","_createElementBlock","_createBlock","_createCommentVNode","_createVNode","_createElementVNode","_normalizeClass","_toDisplayString","_sfc_main"],"sources":["../src/components/display/comments/CommentInput.vue","../src/components/display/comments/CommentInput.vue"],"sourcesContent":["<template>\n <div class=\"d-flex flex-column comment-input-container mt-3\">\n <CommentName v-if=\"commentStore.commentUser?.name\" />\n <ClassicContentEditable\n ref=\"textarea\"\n v-model=\"newComment\"\n class=\"comment-input\"\n :placeholder=\"placeholder\"\n @focus=\"isTextareaActive = true\"\n />\n <div v-if=\"isTextareaActive\" class=\"d-flex justify-content-between mt-1\">\n <ClassicEmojiPicker\n :id=\"uniqueId\"\n popover-relative-class=\"page-element\"\n @emoji-selected=\"addEmojiSelected\"\n />\n <div class=\"d-flex ms-auto\">\n <p\n class=\"d-flex justify-content-end h6 me-3\"\n :class=\"{ 'text-danger': !commentTooLong }\"\n >\n {{ countComment + \" / \" + maxComment }}\n </p>\n <button class=\"btn me-2\" @mousedown=\"cancelAction\">\n {{ t(\"Cancel\") }}\n </button>\n <button\n class=\"btn btn-primary\"\n :disabled=\"0 === countComment || !commentTooLong\"\n @mousedown=\"requestToSend\"\n >\n {{ placeholder }}\n </button>\n </div>\n </div>\n <CheckIdentityModal\n v-if=\"isCheckIdentity\"\n @validate=\"postComment\"\n @close=\"isCheckIdentity = false\"\n />\n <MessageModal\n v-if=\"postError\"\n :validatetext=\"t('Close')\"\n :title=\"t('Error')\"\n :message=\"t('Error occurs while post your comment...')\"\n @close=\"postError = false\"\n @validate=\"postError = false\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport classicApi from \"../../../api/classicApi\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport Constants from \"../../../../public/config\";\nimport { defineAsyncComponent, ref, computed, watch, useTemplateRef } from \"vue\";\nimport { useCommentStore } from \"../../../stores/CommentStore\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\nconst CheckIdentityModal = defineAsyncComponent(\n () => import(\"./modal/CheckIdentityModal.vue\"),\n);\nconst CommentName = defineAsyncComponent(() => import(\"./CommentName.vue\"));\nconst MessageModal = defineAsyncComponent(\n () => import(\"../../misc/modal/MessageModal.vue\"),\n);\nconst ClassicEmojiPicker = defineAsyncComponent(\n () => import(\"../../form/ClassicEmojiPicker.vue\"),\n);\nconst ClassicContentEditable = defineAsyncComponent(\n () => import(\"../../form/ClassicContentEditable.vue\"),\n);\n\n//Props \nconst props = defineProps({\n podcast: { default: undefined, type: Object as () => Podcast },\n focus: { default: false, type: Boolean },\n inAnswerComment: {\n default: undefined,\n type: Object as () => CommentPodcast,\n },\n})\n\n//Emits\nconst emit = defineEmits([\"cancelAction\", \"newComment\"]);\n\n//Data \nconst maxComment = Constants.MAX_COMMENT;\nconst newComment = ref(\"\");\nconst isTextareaActive = ref(false);\nconst isCheckIdentity = ref(false);\nconst postError = ref(false);\nconst textareaRef = useTemplateRef('textarea');\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\nconst commentStore = useCommentStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst commentTooLong = computed(() => countComment.value <= maxComment);\nconst countComment = computed(() => newComment.value.length);\nconst placeholder = computed(() => props.inAnswerComment?.commentId? t(\"Answer a comment\"): t(\"Write a comment\"));\nconst uniqueId = computed(() => \"-comment\"+(props.inAnswerComment?.commentId??\"-parent\"));\n\n\n//Watch\nwatch(()=>props.focus, () => textareaRef?.value?.focus());\n\n\n//Methods\nfunction addEmojiSelected(emoji: string) {\n newComment.value += emoji;\n}\nfunction requestToSend(): void {\n if (commentStore.commentUser?.name) {\n postComment();\n } else {\n isCheckIdentity.value = true;\n }\n}\nfunction cancelAction(): void {\n newComment.value = \"\";\n isTextareaActive.value = false;\n emit(\"cancelAction\");\n}\nasync function postComment(): Promise<void> {\n try {\n const commentReceived = await classicApi.postData<CommentPodcast>({\n api: 2,\n path: \"comment/\",\n dataToSend: {\n answerTo: props.inAnswerComment?.commentId,\n content: newComment.value.trim(),\n name: commentStore.commentUser?.name ?? \"\",\n podcastId:\n props.podcast?.podcastId ?? props.inAnswerComment?.podcastId ?? 0,\n uuid: commentStore.commentUser?.uuid ?? \"\",\n timeline: defineTimelineValue(),\n },\n isNotAuth: undefined === authStore.authOrgaId,\n });\n emit(\"newComment\", commentReceived);\n newComment.value = \"\";\n isTextareaActive.value = false;\n } catch {\n postError.value = true;\n }\n isCheckIdentity.value = false;\n}\nfunction defineTimelineValue(): number {\n let timeline = 0;\n if (\n undefined !== props.podcast &&\n (playerStore.playerPodcast?.podcastId === props.podcast.podcastId ||\n playerStore.playerLive?.podcastId === props.podcast.podcastId)\n ) {\n timeline = Math.round(playerStore.playerElapsed * playerStore.playerTotal);\n if (props.podcast.duration && playerStore.playerPodcast) {\n timeline = Math.round(\n timeline - (playerStore.playerTotal - props.podcast.duration / 1000),\n );\n }\n }\n return timeline < 0 ? 0 : timeline;\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app .comment-input-container {\n .comment-input {\n border-bottom: 0.1rem solid var(--octopus-border-default);\n overflow: hidden;\n min-height: 36px;\n resize: none;\n }\n}\n</style>\n","<template>\n <div class=\"d-flex flex-column comment-input-container mt-3\">\n <CommentName v-if=\"commentStore.commentUser?.name\" />\n <ClassicContentEditable\n ref=\"textarea\"\n v-model=\"newComment\"\n class=\"comment-input\"\n :placeholder=\"placeholder\"\n @focus=\"isTextareaActive = true\"\n />\n <div v-if=\"isTextareaActive\" class=\"d-flex justify-content-between mt-1\">\n <ClassicEmojiPicker\n :id=\"uniqueId\"\n popover-relative-class=\"page-element\"\n @emoji-selected=\"addEmojiSelected\"\n />\n <div class=\"d-flex ms-auto\">\n <p\n class=\"d-flex justify-content-end h6 me-3\"\n :class=\"{ 'text-danger': !commentTooLong }\"\n >\n {{ countComment + \" / \" + maxComment }}\n </p>\n <button class=\"btn me-2\" @mousedown=\"cancelAction\">\n {{ t(\"Cancel\") }}\n </button>\n <button\n class=\"btn btn-primary\"\n :disabled=\"0 === countComment || !commentTooLong\"\n @mousedown=\"requestToSend\"\n >\n {{ placeholder }}\n </button>\n </div>\n </div>\n <CheckIdentityModal\n v-if=\"isCheckIdentity\"\n @validate=\"postComment\"\n @close=\"isCheckIdentity = false\"\n />\n <MessageModal\n v-if=\"postError\"\n :validatetext=\"t('Close')\"\n :title=\"t('Error')\"\n :message=\"t('Error occurs while post your comment...')\"\n @close=\"postError = false\"\n @validate=\"postError = false\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport classicApi from \"../../../api/classicApi\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport Constants from \"../../../../public/config\";\nimport { defineAsyncComponent, ref, computed, watch, useTemplateRef } from \"vue\";\nimport { useCommentStore } from \"../../../stores/CommentStore\";\nimport { usePlayerStore } from \"../../../stores/PlayerStore\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\nconst CheckIdentityModal = defineAsyncComponent(\n () => import(\"./modal/CheckIdentityModal.vue\"),\n);\nconst CommentName = defineAsyncComponent(() => import(\"./CommentName.vue\"));\nconst MessageModal = defineAsyncComponent(\n () => import(\"../../misc/modal/MessageModal.vue\"),\n);\nconst ClassicEmojiPicker = defineAsyncComponent(\n () => import(\"../../form/ClassicEmojiPicker.vue\"),\n);\nconst ClassicContentEditable = defineAsyncComponent(\n () => import(\"../../form/ClassicContentEditable.vue\"),\n);\n\n//Props \nconst props = defineProps({\n podcast: { default: undefined, type: Object as () => Podcast },\n focus: { default: false, type: Boolean },\n inAnswerComment: {\n default: undefined,\n type: Object as () => CommentPodcast,\n },\n})\n\n//Emits\nconst emit = defineEmits([\"cancelAction\", \"newComment\"]);\n\n//Data \nconst maxComment = Constants.MAX_COMMENT;\nconst newComment = ref(\"\");\nconst isTextareaActive = ref(false);\nconst isCheckIdentity = ref(false);\nconst postError = ref(false);\nconst textareaRef = useTemplateRef('textarea');\n\n//Composables\nconst { t } = useI18n();\nconst playerStore = usePlayerStore();\nconst commentStore = useCommentStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst commentTooLong = computed(() => countComment.value <= maxComment);\nconst countComment = computed(() => newComment.value.length);\nconst placeholder = computed(() => props.inAnswerComment?.commentId? t(\"Answer a comment\"): t(\"Write a comment\"));\nconst uniqueId = computed(() => \"-comment\"+(props.inAnswerComment?.commentId??\"-parent\"));\n\n\n//Watch\nwatch(()=>props.focus, () => textareaRef?.value?.focus());\n\n\n//Methods\nfunction addEmojiSelected(emoji: string) {\n newComment.value += emoji;\n}\nfunction requestToSend(): void {\n if (commentStore.commentUser?.name) {\n postComment();\n } else {\n isCheckIdentity.value = true;\n }\n}\nfunction cancelAction(): void {\n newComment.value = \"\";\n isTextareaActive.value = false;\n emit(\"cancelAction\");\n}\nasync function postComment(): Promise<void> {\n try {\n const commentReceived = await classicApi.postData<CommentPodcast>({\n api: 2,\n path: \"comment/\",\n dataToSend: {\n answerTo: props.inAnswerComment?.commentId,\n content: newComment.value.trim(),\n name: commentStore.commentUser?.name ?? \"\",\n podcastId:\n props.podcast?.podcastId ?? props.inAnswerComment?.podcastId ?? 0,\n uuid: commentStore.commentUser?.uuid ?? \"\",\n timeline: defineTimelineValue(),\n },\n isNotAuth: undefined === authStore.authOrgaId,\n });\n emit(\"newComment\", commentReceived);\n newComment.value = \"\";\n isTextareaActive.value = false;\n } catch {\n postError.value = true;\n }\n isCheckIdentity.value = false;\n}\nfunction defineTimelineValue(): number {\n let timeline = 0;\n if (\n undefined !== props.podcast &&\n (playerStore.playerPodcast?.podcastId === props.podcast.podcastId ||\n playerStore.playerLive?.podcastId === props.podcast.podcastId)\n ) {\n timeline = Math.round(playerStore.playerElapsed * playerStore.playerTotal);\n if (props.podcast.duration && playerStore.playerPodcast) {\n timeline = Math.round(\n timeline - (playerStore.playerTotal - props.podcast.duration / 1000),\n );\n }\n }\n return timeline < 0 ? 0 : timeline;\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app .comment-input-container {\n .comment-input {\n border-bottom: 0.1rem solid var(--octopus-border-default);\n overflow: hidden;\n min-height: 36px;\n resize: none;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentItem-AItzrTBi.mjs","names":["displayHelper","_hoisted_1","_hoisted_2","_hoisted_3","_sfc_render","_openBlock","_createElementBlock","_createElementVNode","_normalizeClass","_toDisplayString","_createVNode","_createTextVNode","_createCommentVNode","_sfc_main","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_createVNode","_Fragment","_toDisplayString","_createCommentVNode","_createTextVNode","_createBlock","_sfc_main"],"sources":["../src/components/display/comments/item/CommentBasicView.vue","../src/components/display/comments/item/CommentBasicView.vue","../src/components/display/comments/item/CommentItem.vue","../src/components/display/comments/item/CommentItem.vue"],"sourcesContent":["<template>\n <div class=\"d-flex flex-column w-100\">\n <div class=\"d-flex align-items-center h6 mb-2\">\n <button\n :id=\"'popover-comment' + comment.commentId\"\n :class=\"isValidComment ? 'c-hand-auto' : 'text-danger'\"\n class=\"btn-transparent me-2\"\n >{{ username }}</button>\n <ClassicPopover\n :disable=\"isValidComment\"\n :target=\"'popover-comment' + comment.commentId\"\n :content=\"t('Comment waiting')\"\n />\n <time :datetime=\"comment.date\" class=\"me-2\">\n {{ date }}\n </time>\n <div\n v-if=\"comment.abuse && editRight\"\n class=\"d-flex align-items-center text-danger me-2\"\n >\n <AlertIcon :size=\"16\" class=\"me-1\" />\n {{ t(\"abuse denounced\", { nb: comment.abuse }) }}\n </div>\n <span v-if=\"editRight\" :class=\"'status-' + comment.state\" />\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <pre v-html=\"urlify(contentDisplay)\" />\n <!-- eslint-enable -->\n <a\n v-if=\"commentTooLong\"\n class=\"c-hand font-italic\"\n @click=\"displayPreview = !displayPreview\"\n >{{ readMore }}\n </a>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AlertIcon from \"vue-material-design-icons/Alert.vue\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\ndayjs.extend(relativeTime);\nimport displayHelper from \"../../../../helper/displayHelper\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport ClassicPopover from \"../../../misc/ClassicPopover.vue\";\nimport { computed, onMounted, onUnmounted, Ref, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n editRight: { default: false, type: Boolean },\n})\n\n//Data \nconst displayPreview = ref(true);\nconst date = ref(\"\");\nconst dateInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n //Composables\nconst { t } = useI18n();\n\n//Computed\nconst commentTooLong = computed(() => props.comment.content.length > 300);\nconst username = computed(() => props.comment.poster.userName);\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst readMore = computed(() => displayPreview.value ? t(\"Read more\") : t(\"Read less\"));\nconst contentDisplay = computed(() => {\n if (!displayPreview.value || !commentTooLong.value) {\n return props.comment.content;\n }\n return props.comment.content.substring(0, 300) + \"...\";\n});\n\nonMounted(()=>{\n defineDateFromNow();\n dateInterval.value = setInterval(() => {\n defineDateFromNow();\n }, 60000);\n})\n \nonUnmounted(()=>clearInterval(dateInterval.value as unknown as number))\n\n//Methods\nfunction urlify(text:string|undefined){\n return displayHelper.urlify(text);\n}\nfunction defineDateFromNow() {\n if (!props.comment.date) {\n date.value = \"\";\n }\n date.value = dayjs(props.comment.date).fromNow();\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../../style/comments\";\n</style>\n","<template>\n <div class=\"d-flex flex-column w-100\">\n <div class=\"d-flex align-items-center h6 mb-2\">\n <button\n :id=\"'popover-comment' + comment.commentId\"\n :class=\"isValidComment ? 'c-hand-auto' : 'text-danger'\"\n class=\"btn-transparent me-2\"\n >{{ username }}</button>\n <ClassicPopover\n :disable=\"isValidComment\"\n :target=\"'popover-comment' + comment.commentId\"\n :content=\"t('Comment waiting')\"\n />\n <time :datetime=\"comment.date\" class=\"me-2\">\n {{ date }}\n </time>\n <div\n v-if=\"comment.abuse && editRight\"\n class=\"d-flex align-items-center text-danger me-2\"\n >\n <AlertIcon :size=\"16\" class=\"me-1\" />\n {{ t(\"abuse denounced\", { nb: comment.abuse }) }}\n </div>\n <span v-if=\"editRight\" :class=\"'status-' + comment.state\" />\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <pre v-html=\"urlify(contentDisplay)\" />\n <!-- eslint-enable -->\n <a\n v-if=\"commentTooLong\"\n class=\"c-hand font-italic\"\n @click=\"displayPreview = !displayPreview\"\n >{{ readMore }}\n </a>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AlertIcon from \"vue-material-design-icons/Alert.vue\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\ndayjs.extend(relativeTime);\nimport displayHelper from \"../../../../helper/displayHelper\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport ClassicPopover from \"../../../misc/ClassicPopover.vue\";\nimport { computed, onMounted, onUnmounted, Ref, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n editRight: { default: false, type: Boolean },\n})\n\n//Data \nconst displayPreview = ref(true);\nconst date = ref(\"\");\nconst dateInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n //Composables\nconst { t } = useI18n();\n\n//Computed\nconst commentTooLong = computed(() => props.comment.content.length > 300);\nconst username = computed(() => props.comment.poster.userName);\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst readMore = computed(() => displayPreview.value ? t(\"Read more\") : t(\"Read less\"));\nconst contentDisplay = computed(() => {\n if (!displayPreview.value || !commentTooLong.value) {\n return props.comment.content;\n }\n return props.comment.content.substring(0, 300) + \"...\";\n});\n\nonMounted(()=>{\n defineDateFromNow();\n dateInterval.value = setInterval(() => {\n defineDateFromNow();\n }, 60000);\n})\n \nonUnmounted(()=>clearInterval(dateInterval.value as unknown as number))\n\n//Methods\nfunction urlify(text:string|undefined){\n return displayHelper.urlify(text);\n}\nfunction defineDateFromNow() {\n if (!props.comment.date) {\n date.value = \"\";\n }\n date.value = dayjs(props.comment.date).fromNow();\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../../style/comments\";\n</style>\n","<template>\n <div\n class=\"d-flex flex-column flex-grow-1 w-100 really-light-secondary-bg\"\n :class=\"isAnAnswer && !isFlatList ? 'my-1 p-0' : 'my-3 p-2'\"\n >\n <div class=\"d-flex flex-nowrap justify-content-between align-items-center\">\n <CommentBasicView :comment=\"comment\" :edit-right=\"editRight\" />\n <CommentMoreActions\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n :config=\"config\"\n @delete-comment=\"emitDeleteComment\"\n />\n </div>\n <template v-if=\"isValidComment\">\n <div class=\"d-flex align-items-center mt-1\">\n <LikeSection\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n />\n <button\n v-if=\"!comment.answerTo && canPostComment\"\n class=\"btn btn-transparent\"\n @click=\"answerComment\"\n >\n {{ t(\"To answer\") }}\n </button>\n <button\n v-if=\"isFlatList && comment.answerTo\"\n class=\"btn btn-transparent d-flex align-items-center\"\n @click=\"showParentComment = !showParentComment\"\n >\n {{ t(\"In response to\") }}\n <ChevronDownIcon :class=\"{ 'arrow-transform': showParentComment }\" />\n </button>\n </div>\n <CommentInput\n v-if=\"isAnsweringComment && canPostComment\"\n class=\"ms-4\"\n :focus=\"focus\"\n :podcast=\"podcast\"\n :in-answer-comment=\"comment\"\n @cancel-action=\"isAnsweringComment = false\"\n @new-comment=\"newComment\"\n />\n <div\n v-if=\"comment.responses?.length && !isFlatList\"\n class=\"ms-4 mt-2 answers-section\"\n >\n <button\n class=\"d-flex align-items-center btn-transparent text-primary\"\n @click=\"showAnswers = !showAnswers\"\n >\n <ChevronDownIcon :class=\"{ 'arrow-transform': showAnswers }\" />\n {{ t(\"nb answers\", { nb: comment.responses.length }) }}\n </button>\n <CommentList\n v-if=\"showAnswers\"\n ref=\"commentList\"\n :podcast=\"podcast\"\n :size=\"5\"\n :answer-to-comment=\"comment.commentId\"\n :config=\"config\"\n :event-to-handle=\"eventToHandle\"\n @comment-deleted=\"updateForAnswerDeleted\"\n />\n </div>\n </template>\n <CommentParentInfo\n v-if=\"showParentComment\"\n class=\"ms-4\"\n :comment-id=\"comment.answerTo\"\n :edit-right=\"editRight\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ChevronDownIcon from \"vue-material-design-icons/ChevronDown.vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"../../../../stores/class/general/podcast\";\nimport CommentBasicView from \"./CommentBasicView.vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { defineAsyncComponent, ref, Ref, computed } from \"vue\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"../../../../stores/class/config/commentsConfig\";\nimport { useI18n } from \"vue-i18n\";\nconst CommentInput = defineAsyncComponent(() => import(\"../CommentInput.vue\"));\nconst CommentParentInfo = defineAsyncComponent(\n () => import(\"../CommentParentInfo.vue\"),\n);\nconst LikeSection = defineAsyncComponent(\n () => import(\"../like/LikeSection.vue\"),\n);\nconst CommentMoreActions = defineAsyncComponent(\n () => import(\"./CommentMoreActions.vue\"),\n);\nconst CommentList = defineAsyncComponent(() => import(\"../CommentList.vue\"));\n\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n podcast: { default: undefined, type: Object as () => Podcast },\n isFlatList: { default: false, type: Boolean },\n config: { default: undefined, type: Object as () => CommentsConfig },\n organisationId: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"deleteComment\", \"update:comment\"]);\n\n//Data \nconst isAnsweringComment = ref(false);\nconst showAnswers = ref(false);\nconst focus = ref(false);\nconst showParentComment = ref(false);\nconst eventToHandle : Ref<CommentMessage | undefined>= ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\nconst commentStore = useCommentStore();\n\n\n//Computed\nconst commentForVmodel = computed({\n get(): CommentPodcast {\n return props.comment;\n },\n set(value: CommentPodcast) {\n if (!eventActive.value) {\n emit(\"update:comment\", value);\n }\n },\n});\nconst isAnAnswer = computed(() => undefined !== props.comment.answerTo);\nconst editRight = computed(() => {\n return (\n (true === authStore.isRoleComments &&\n (authStore.authOrgaId === props.podcast?.organisation.id ||\n authStore.authOrgaId === props.organisationId)) ||\n true === authStore.isRoleAdmin\n );\n});\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst canPostComment = computed(() => {\n return commentStore.getCanPostComment(\n props.config,\n props.podcast,\n undefined !== authStore.authOrgaId,\n );\n});\nconst eventActive = computed(() => undefined !== props.podcast?.conferenceId);\n\n \n//Methods\nfunction answerComment(): void {\n isAnsweringComment.value = true;\n focus.value = !focus.value;\n}\nfunction newComment(comment: CommentPodcast): void {\n modifyAnswerNumber(comment.commentId);\n if (!eventActive.value) {\n eventToHandle.value = { type: \"CREATE\", comment: comment };\n }\n isAnsweringComment.value = false;\n}\nfunction modifyAnswerNumber(commentId: number, isAdd = true) {\n const commentToEdit = props.comment;\n if (commentToEdit.responses) {\n if (isAdd) {\n commentToEdit.responses.push(commentId);\n } else {\n const index = commentToEdit.responses.indexOf(commentId);\n if (index !== -1) {\n commentToEdit.responses.splice(index, 1);\n }\n }\n } else if (isAdd) {\n commentToEdit.responses = [commentId];\n }\n emit(\"update:comment\", commentToEdit);\n}\nfunction emitDeleteComment() {\n if (!eventActive.value) {\n emit(\"deleteComment\");\n }\n}\nfunction receiveEvent(event: CommentMessage) {\n if (\"CREATE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId);\n } else if (\"DELETE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId, false);\n }\n eventToHandle.value = event;\n}\nfunction updateForAnswerDeleted(commentId: number) {\n modifyAnswerNumber(commentId, false);\n}\n//Expose\ndefineExpose({\n receiveEvent\n});\n</script>\n","<template>\n <div\n class=\"d-flex flex-column flex-grow-1 w-100 really-light-secondary-bg\"\n :class=\"isAnAnswer && !isFlatList ? 'my-1 p-0' : 'my-3 p-2'\"\n >\n <div class=\"d-flex flex-nowrap justify-content-between align-items-center\">\n <CommentBasicView :comment=\"comment\" :edit-right=\"editRight\" />\n <CommentMoreActions\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n :config=\"config\"\n @delete-comment=\"emitDeleteComment\"\n />\n </div>\n <template v-if=\"isValidComment\">\n <div class=\"d-flex align-items-center mt-1\">\n <LikeSection\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n />\n <button\n v-if=\"!comment.answerTo && canPostComment\"\n class=\"btn btn-transparent\"\n @click=\"answerComment\"\n >\n {{ t(\"To answer\") }}\n </button>\n <button\n v-if=\"isFlatList && comment.answerTo\"\n class=\"btn btn-transparent d-flex align-items-center\"\n @click=\"showParentComment = !showParentComment\"\n >\n {{ t(\"In response to\") }}\n <ChevronDownIcon :class=\"{ 'arrow-transform': showParentComment }\" />\n </button>\n </div>\n <CommentInput\n v-if=\"isAnsweringComment && canPostComment\"\n class=\"ms-4\"\n :focus=\"focus\"\n :podcast=\"podcast\"\n :in-answer-comment=\"comment\"\n @cancel-action=\"isAnsweringComment = false\"\n @new-comment=\"newComment\"\n />\n <div\n v-if=\"comment.responses?.length && !isFlatList\"\n class=\"ms-4 mt-2 answers-section\"\n >\n <button\n class=\"d-flex align-items-center btn-transparent text-primary\"\n @click=\"showAnswers = !showAnswers\"\n >\n <ChevronDownIcon :class=\"{ 'arrow-transform': showAnswers }\" />\n {{ t(\"nb answers\", { nb: comment.responses.length }) }}\n </button>\n <CommentList\n v-if=\"showAnswers\"\n ref=\"commentList\"\n :podcast=\"podcast\"\n :size=\"5\"\n :answer-to-comment=\"comment.commentId\"\n :config=\"config\"\n :event-to-handle=\"eventToHandle\"\n @comment-deleted=\"updateForAnswerDeleted\"\n />\n </div>\n </template>\n <CommentParentInfo\n v-if=\"showParentComment\"\n class=\"ms-4\"\n :comment-id=\"comment.answerTo\"\n :edit-right=\"editRight\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ChevronDownIcon from \"vue-material-design-icons/ChevronDown.vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"../../../../stores/class/general/podcast\";\nimport CommentBasicView from \"./CommentBasicView.vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { defineAsyncComponent, ref, Ref, computed } from \"vue\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"../../../../stores/class/config/commentsConfig\";\nimport { useI18n } from \"vue-i18n\";\nconst CommentInput = defineAsyncComponent(() => import(\"../CommentInput.vue\"));\nconst CommentParentInfo = defineAsyncComponent(\n () => import(\"../CommentParentInfo.vue\"),\n);\nconst LikeSection = defineAsyncComponent(\n () => import(\"../like/LikeSection.vue\"),\n);\nconst CommentMoreActions = defineAsyncComponent(\n () => import(\"./CommentMoreActions.vue\"),\n);\nconst CommentList = defineAsyncComponent(() => import(\"../CommentList.vue\"));\n\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n podcast: { default: undefined, type: Object as () => Podcast },\n isFlatList: { default: false, type: Boolean },\n config: { default: undefined, type: Object as () => CommentsConfig },\n organisationId: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"deleteComment\", \"update:comment\"]);\n\n//Data \nconst isAnsweringComment = ref(false);\nconst showAnswers = ref(false);\nconst focus = ref(false);\nconst showParentComment = ref(false);\nconst eventToHandle : Ref<CommentMessage | undefined>= ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\nconst commentStore = useCommentStore();\n\n\n//Computed\nconst commentForVmodel = computed({\n get(): CommentPodcast {\n return props.comment;\n },\n set(value: CommentPodcast) {\n if (!eventActive.value) {\n emit(\"update:comment\", value);\n }\n },\n});\nconst isAnAnswer = computed(() => undefined !== props.comment.answerTo);\nconst editRight = computed(() => {\n return (\n (true === authStore.isRoleComments &&\n (authStore.authOrgaId === props.podcast?.organisation.id ||\n authStore.authOrgaId === props.organisationId)) ||\n true === authStore.isRoleAdmin\n );\n});\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst canPostComment = computed(() => {\n return commentStore.getCanPostComment(\n props.config,\n props.podcast,\n undefined !== authStore.authOrgaId,\n );\n});\nconst eventActive = computed(() => undefined !== props.podcast?.conferenceId);\n\n \n//Methods\nfunction answerComment(): void {\n isAnsweringComment.value = true;\n focus.value = !focus.value;\n}\nfunction newComment(comment: CommentPodcast): void {\n modifyAnswerNumber(comment.commentId);\n if (!eventActive.value) {\n eventToHandle.value = { type: \"CREATE\", comment: comment };\n }\n isAnsweringComment.value = false;\n}\nfunction modifyAnswerNumber(commentId: number, isAdd = true) {\n const commentToEdit = props.comment;\n if (commentToEdit.responses) {\n if (isAdd) {\n commentToEdit.responses.push(commentId);\n } else {\n const index = commentToEdit.responses.indexOf(commentId);\n if (index !== -1) {\n commentToEdit.responses.splice(index, 1);\n }\n }\n } else if (isAdd) {\n commentToEdit.responses = [commentId];\n }\n emit(\"update:comment\", commentToEdit);\n}\nfunction emitDeleteComment() {\n if (!eventActive.value) {\n emit(\"deleteComment\");\n }\n}\nfunction receiveEvent(event: CommentMessage) {\n if (\"CREATE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId);\n } else if (\"DELETE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId, false);\n }\n eventToHandle.value = event;\n}\nfunction updateForAnswerDeleted(commentId: number) {\n modifyAnswerNumber(commentId, false);\n}\n//Expose\ndefineExpose({\n receiveEvent\n});\n</script>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentItem-B7vvJwZI.mjs","names":["displayHelper","_hoisted_1","_hoisted_2","_hoisted_3","_sfc_render","_openBlock","_createElementBlock","_createElementVNode","_normalizeClass","_toDisplayString","_createVNode","_createTextVNode","_createCommentVNode","_sfc_main","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_createVNode","_Fragment","_toDisplayString","_createCommentVNode","_createTextVNode","_createBlock","_sfc_main"],"sources":["../src/components/display/comments/item/CommentBasicView.vue","../src/components/display/comments/item/CommentBasicView.vue","../src/components/display/comments/item/CommentItem.vue","../src/components/display/comments/item/CommentItem.vue"],"sourcesContent":["<template>\n <div class=\"d-flex flex-column w-100\">\n <div class=\"d-flex align-items-center h6 mb-2\">\n <button\n :id=\"'popover-comment' + comment.commentId\"\n :class=\"isValidComment ? 'c-hand-auto' : 'text-danger'\"\n class=\"btn-transparent me-2\"\n >{{ username }}</button>\n <ClassicPopover\n :disable=\"isValidComment\"\n :target=\"'popover-comment' + comment.commentId\"\n :content=\"t('Comment waiting')\"\n />\n <time :datetime=\"comment.date\" class=\"me-2\">\n {{ date }}\n </time>\n <div\n v-if=\"comment.abuse && editRight\"\n class=\"d-flex align-items-center text-danger me-2\"\n >\n <AlertIcon :size=\"16\" class=\"me-1\" />\n {{ t(\"abuse denounced\", { nb: comment.abuse }) }}\n </div>\n <span v-if=\"editRight\" :class=\"'status-' + comment.state\" />\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <pre v-html=\"urlify(contentDisplay)\" />\n <!-- eslint-enable -->\n <a\n v-if=\"commentTooLong\"\n class=\"c-hand font-italic\"\n @click=\"displayPreview = !displayPreview\"\n >{{ readMore }}\n </a>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AlertIcon from \"vue-material-design-icons/Alert.vue\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\ndayjs.extend(relativeTime);\nimport displayHelper from \"../../../../helper/displayHelper\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport ClassicPopover from \"../../../misc/ClassicPopover.vue\";\nimport { computed, onMounted, onUnmounted, Ref, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n editRight: { default: false, type: Boolean },\n})\n\n//Data \nconst displayPreview = ref(true);\nconst date = ref(\"\");\nconst dateInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n //Composables\nconst { t } = useI18n();\n\n//Computed\nconst commentTooLong = computed(() => props.comment.content.length > 300);\nconst username = computed(() => props.comment.poster.userName);\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst readMore = computed(() => displayPreview.value ? t(\"Read more\") : t(\"Read less\"));\nconst contentDisplay = computed(() => {\n if (!displayPreview.value || !commentTooLong.value) {\n return props.comment.content;\n }\n return props.comment.content.substring(0, 300) + \"...\";\n});\n\nonMounted(()=>{\n defineDateFromNow();\n dateInterval.value = setInterval(() => {\n defineDateFromNow();\n }, 60000);\n})\n \nonUnmounted(()=>clearInterval(dateInterval.value as unknown as number))\n\n//Methods\nfunction urlify(text:string|undefined){\n return displayHelper.urlify(text);\n}\nfunction defineDateFromNow() {\n if (!props.comment.date) {\n date.value = \"\";\n }\n date.value = dayjs(props.comment.date).fromNow();\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../../style/comments\";\n</style>\n","<template>\n <div class=\"d-flex flex-column w-100\">\n <div class=\"d-flex align-items-center h6 mb-2\">\n <button\n :id=\"'popover-comment' + comment.commentId\"\n :class=\"isValidComment ? 'c-hand-auto' : 'text-danger'\"\n class=\"btn-transparent me-2\"\n >{{ username }}</button>\n <ClassicPopover\n :disable=\"isValidComment\"\n :target=\"'popover-comment' + comment.commentId\"\n :content=\"t('Comment waiting')\"\n />\n <time :datetime=\"comment.date\" class=\"me-2\">\n {{ date }}\n </time>\n <div\n v-if=\"comment.abuse && editRight\"\n class=\"d-flex align-items-center text-danger me-2\"\n >\n <AlertIcon :size=\"16\" class=\"me-1\" />\n {{ t(\"abuse denounced\", { nb: comment.abuse }) }}\n </div>\n <span v-if=\"editRight\" :class=\"'status-' + comment.state\" />\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <pre v-html=\"urlify(contentDisplay)\" />\n <!-- eslint-enable -->\n <a\n v-if=\"commentTooLong\"\n class=\"c-hand font-italic\"\n @click=\"displayPreview = !displayPreview\"\n >{{ readMore }}\n </a>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AlertIcon from \"vue-material-design-icons/Alert.vue\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\ndayjs.extend(relativeTime);\nimport displayHelper from \"../../../../helper/displayHelper\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport ClassicPopover from \"../../../misc/ClassicPopover.vue\";\nimport { computed, onMounted, onUnmounted, Ref, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n editRight: { default: false, type: Boolean },\n})\n\n//Data \nconst displayPreview = ref(true);\nconst date = ref(\"\");\nconst dateInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n //Composables\nconst { t } = useI18n();\n\n//Computed\nconst commentTooLong = computed(() => props.comment.content.length > 300);\nconst username = computed(() => props.comment.poster.userName);\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst readMore = computed(() => displayPreview.value ? t(\"Read more\") : t(\"Read less\"));\nconst contentDisplay = computed(() => {\n if (!displayPreview.value || !commentTooLong.value) {\n return props.comment.content;\n }\n return props.comment.content.substring(0, 300) + \"...\";\n});\n\nonMounted(()=>{\n defineDateFromNow();\n dateInterval.value = setInterval(() => {\n defineDateFromNow();\n }, 60000);\n})\n \nonUnmounted(()=>clearInterval(dateInterval.value as unknown as number))\n\n//Methods\nfunction urlify(text:string|undefined){\n return displayHelper.urlify(text);\n}\nfunction defineDateFromNow() {\n if (!props.comment.date) {\n date.value = \"\";\n }\n date.value = dayjs(props.comment.date).fromNow();\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../../style/comments\";\n</style>\n","<template>\n <div\n class=\"d-flex flex-column flex-grow-1 w-100 really-light-secondary-bg\"\n :class=\"isAnAnswer && !isFlatList ? 'my-1 p-0' : 'my-3 p-2'\"\n >\n <div class=\"d-flex flex-nowrap justify-content-between align-items-center\">\n <CommentBasicView :comment=\"comment\" :edit-right=\"editRight\" />\n <CommentMoreActions\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n :config=\"config\"\n @delete-comment=\"emitDeleteComment\"\n />\n </div>\n <template v-if=\"isValidComment\">\n <div class=\"d-flex align-items-center mt-1\">\n <LikeSection\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n />\n <button\n v-if=\"!comment.answerTo && canPostComment\"\n class=\"btn btn-transparent\"\n @click=\"answerComment\"\n >\n {{ t(\"To answer\") }}\n </button>\n <button\n v-if=\"isFlatList && comment.answerTo\"\n class=\"btn btn-transparent d-flex align-items-center\"\n @click=\"showParentComment = !showParentComment\"\n >\n {{ t(\"In response to\") }}\n <ChevronDownIcon :class=\"{ 'arrow-transform': showParentComment }\" />\n </button>\n </div>\n <CommentInput\n v-if=\"isAnsweringComment && canPostComment\"\n class=\"ms-4\"\n :focus=\"focus\"\n :podcast=\"podcast\"\n :in-answer-comment=\"comment\"\n @cancel-action=\"isAnsweringComment = false\"\n @new-comment=\"newComment\"\n />\n <div\n v-if=\"comment.responses?.length && !isFlatList\"\n class=\"ms-4 mt-2 answers-section\"\n >\n <button\n class=\"d-flex align-items-center btn-transparent text-primary\"\n @click=\"showAnswers = !showAnswers\"\n >\n <ChevronDownIcon :class=\"{ 'arrow-transform': showAnswers }\" />\n {{ t(\"nb answers\", { nb: comment.responses.length }) }}\n </button>\n <CommentList\n v-if=\"showAnswers\"\n ref=\"commentList\"\n :podcast=\"podcast\"\n :size=\"5\"\n :answer-to-comment=\"comment.commentId\"\n :config=\"config\"\n :event-to-handle=\"eventToHandle\"\n @comment-deleted=\"updateForAnswerDeleted\"\n />\n </div>\n </template>\n <CommentParentInfo\n v-if=\"showParentComment\"\n class=\"ms-4\"\n :comment-id=\"comment.answerTo\"\n :edit-right=\"editRight\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ChevronDownIcon from \"vue-material-design-icons/ChevronDown.vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"../../../../stores/class/general/podcast\";\nimport CommentBasicView from \"./CommentBasicView.vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { defineAsyncComponent, ref, Ref, computed } from \"vue\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"../../../../stores/class/config/commentsConfig\";\nimport { useI18n } from \"vue-i18n\";\nconst CommentInput = defineAsyncComponent(() => import(\"../CommentInput.vue\"));\nconst CommentParentInfo = defineAsyncComponent(\n () => import(\"../CommentParentInfo.vue\"),\n);\nconst LikeSection = defineAsyncComponent(\n () => import(\"../like/LikeSection.vue\"),\n);\nconst CommentMoreActions = defineAsyncComponent(\n () => import(\"./CommentMoreActions.vue\"),\n);\nconst CommentList = defineAsyncComponent(() => import(\"../CommentList.vue\"));\n\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n podcast: { default: undefined, type: Object as () => Podcast },\n isFlatList: { default: false, type: Boolean },\n config: { default: undefined, type: Object as () => CommentsConfig },\n organisationId: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"deleteComment\", \"update:comment\"]);\n\n//Data \nconst isAnsweringComment = ref(false);\nconst showAnswers = ref(false);\nconst focus = ref(false);\nconst showParentComment = ref(false);\nconst eventToHandle : Ref<CommentMessage | undefined>= ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\nconst commentStore = useCommentStore();\n\n\n//Computed\nconst commentForVmodel = computed({\n get(): CommentPodcast {\n return props.comment;\n },\n set(value: CommentPodcast) {\n if (!eventActive.value) {\n emit(\"update:comment\", value);\n }\n },\n});\nconst isAnAnswer = computed(() => undefined !== props.comment.answerTo);\nconst editRight = computed(() => {\n return (\n (true === authStore.isRoleComments &&\n (authStore.authOrgaId === props.podcast?.organisation.id ||\n authStore.authOrgaId === props.organisationId)) ||\n true === authStore.isRoleAdmin\n );\n});\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst canPostComment = computed(() => {\n return commentStore.getCanPostComment(\n props.config,\n props.podcast,\n undefined !== authStore.authOrgaId,\n );\n});\nconst eventActive = computed(() => undefined !== props.podcast?.conferenceId);\n\n \n//Methods\nfunction answerComment(): void {\n isAnsweringComment.value = true;\n focus.value = !focus.value;\n}\nfunction newComment(comment: CommentPodcast): void {\n modifyAnswerNumber(comment.commentId);\n if (!eventActive.value) {\n eventToHandle.value = { type: \"CREATE\", comment: comment };\n }\n isAnsweringComment.value = false;\n}\nfunction modifyAnswerNumber(commentId: number, isAdd = true) {\n const commentToEdit = props.comment;\n if (commentToEdit.responses) {\n if (isAdd) {\n commentToEdit.responses.push(commentId);\n } else {\n const index = commentToEdit.responses.indexOf(commentId);\n if (index !== -1) {\n commentToEdit.responses.splice(index, 1);\n }\n }\n } else if (isAdd) {\n commentToEdit.responses = [commentId];\n }\n emit(\"update:comment\", commentToEdit);\n}\nfunction emitDeleteComment() {\n if (!eventActive.value) {\n emit(\"deleteComment\");\n }\n}\nfunction receiveEvent(event: CommentMessage) {\n if (\"CREATE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId);\n } else if (\"DELETE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId, false);\n }\n eventToHandle.value = event;\n}\nfunction updateForAnswerDeleted(commentId: number) {\n modifyAnswerNumber(commentId, false);\n}\n//Expose\ndefineExpose({\n receiveEvent\n});\n</script>\n","<template>\n <div\n class=\"d-flex flex-column flex-grow-1 w-100 really-light-secondary-bg\"\n :class=\"isAnAnswer && !isFlatList ? 'my-1 p-0' : 'my-3 p-2'\"\n >\n <div class=\"d-flex flex-nowrap justify-content-between align-items-center\">\n <CommentBasicView :comment=\"comment\" :edit-right=\"editRight\" />\n <CommentMoreActions\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n :config=\"config\"\n @delete-comment=\"emitDeleteComment\"\n />\n </div>\n <template v-if=\"isValidComment\">\n <div class=\"d-flex align-items-center mt-1\">\n <LikeSection\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n />\n <button\n v-if=\"!comment.answerTo && canPostComment\"\n class=\"btn btn-transparent\"\n @click=\"answerComment\"\n >\n {{ t(\"To answer\") }}\n </button>\n <button\n v-if=\"isFlatList && comment.answerTo\"\n class=\"btn btn-transparent d-flex align-items-center\"\n @click=\"showParentComment = !showParentComment\"\n >\n {{ t(\"In response to\") }}\n <ChevronDownIcon :class=\"{ 'arrow-transform': showParentComment }\" />\n </button>\n </div>\n <CommentInput\n v-if=\"isAnsweringComment && canPostComment\"\n class=\"ms-4\"\n :focus=\"focus\"\n :podcast=\"podcast\"\n :in-answer-comment=\"comment\"\n @cancel-action=\"isAnsweringComment = false\"\n @new-comment=\"newComment\"\n />\n <div\n v-if=\"comment.responses?.length && !isFlatList\"\n class=\"ms-4 mt-2 answers-section\"\n >\n <button\n class=\"d-flex align-items-center btn-transparent text-primary\"\n @click=\"showAnswers = !showAnswers\"\n >\n <ChevronDownIcon :class=\"{ 'arrow-transform': showAnswers }\" />\n {{ t(\"nb answers\", { nb: comment.responses.length }) }}\n </button>\n <CommentList\n v-if=\"showAnswers\"\n ref=\"commentList\"\n :podcast=\"podcast\"\n :size=\"5\"\n :answer-to-comment=\"comment.commentId\"\n :config=\"config\"\n :event-to-handle=\"eventToHandle\"\n @comment-deleted=\"updateForAnswerDeleted\"\n />\n </div>\n </template>\n <CommentParentInfo\n v-if=\"showParentComment\"\n class=\"ms-4\"\n :comment-id=\"comment.answerTo\"\n :edit-right=\"editRight\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ChevronDownIcon from \"vue-material-design-icons/ChevronDown.vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"../../../../stores/class/general/podcast\";\nimport CommentBasicView from \"./CommentBasicView.vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { defineAsyncComponent, ref, Ref, computed } from \"vue\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"../../../../stores/class/config/commentsConfig\";\nimport { useI18n } from \"vue-i18n\";\nconst CommentInput = defineAsyncComponent(() => import(\"../CommentInput.vue\"));\nconst CommentParentInfo = defineAsyncComponent(\n () => import(\"../CommentParentInfo.vue\"),\n);\nconst LikeSection = defineAsyncComponent(\n () => import(\"../like/LikeSection.vue\"),\n);\nconst CommentMoreActions = defineAsyncComponent(\n () => import(\"./CommentMoreActions.vue\"),\n);\nconst CommentList = defineAsyncComponent(() => import(\"../CommentList.vue\"));\n\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n podcast: { default: undefined, type: Object as () => Podcast },\n isFlatList: { default: false, type: Boolean },\n config: { default: undefined, type: Object as () => CommentsConfig },\n organisationId: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"deleteComment\", \"update:comment\"]);\n\n//Data \nconst isAnsweringComment = ref(false);\nconst showAnswers = ref(false);\nconst focus = ref(false);\nconst showParentComment = ref(false);\nconst eventToHandle : Ref<CommentMessage | undefined>= ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\nconst commentStore = useCommentStore();\n\n\n//Computed\nconst commentForVmodel = computed({\n get(): CommentPodcast {\n return props.comment;\n },\n set(value: CommentPodcast) {\n if (!eventActive.value) {\n emit(\"update:comment\", value);\n }\n },\n});\nconst isAnAnswer = computed(() => undefined !== props.comment.answerTo);\nconst editRight = computed(() => {\n return (\n (true === authStore.isRoleComments &&\n (authStore.authOrgaId === props.podcast?.organisation.id ||\n authStore.authOrgaId === props.organisationId)) ||\n true === authStore.isRoleAdmin\n );\n});\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst canPostComment = computed(() => {\n return commentStore.getCanPostComment(\n props.config,\n props.podcast,\n undefined !== authStore.authOrgaId,\n );\n});\nconst eventActive = computed(() => undefined !== props.podcast?.conferenceId);\n\n \n//Methods\nfunction answerComment(): void {\n isAnsweringComment.value = true;\n focus.value = !focus.value;\n}\nfunction newComment(comment: CommentPodcast): void {\n modifyAnswerNumber(comment.commentId);\n if (!eventActive.value) {\n eventToHandle.value = { type: \"CREATE\", comment: comment };\n }\n isAnsweringComment.value = false;\n}\nfunction modifyAnswerNumber(commentId: number, isAdd = true) {\n const commentToEdit = props.comment;\n if (commentToEdit.responses) {\n if (isAdd) {\n commentToEdit.responses.push(commentId);\n } else {\n const index = commentToEdit.responses.indexOf(commentId);\n if (index !== -1) {\n commentToEdit.responses.splice(index, 1);\n }\n }\n } else if (isAdd) {\n commentToEdit.responses = [commentId];\n }\n emit(\"update:comment\", commentToEdit);\n}\nfunction emitDeleteComment() {\n if (!eventActive.value) {\n emit(\"deleteComment\");\n }\n}\nfunction receiveEvent(event: CommentMessage) {\n if (\"CREATE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId);\n } else if (\"DELETE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId, false);\n }\n eventToHandle.value = event;\n}\nfunction updateForAnswerDeleted(commentId: number) {\n modifyAnswerNumber(commentId, false);\n}\n//Expose\ndefineExpose({\n receiveEvent\n});\n</script>\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./rolldown-runtime-Dy4uBu1J.mjs";
2
- import { i as t } from "./classicApi-pmODlqv5.mjs";
2
+ import { i as t } from "./classicApi-CGipMqf7.mjs";
3
3
  import { t as n } from "./displayHelper-DQtoqc_6.mjs";
4
- import { t as r } from "./CommentStore-hPTYaDGr.mjs";
5
- import { t as i } from "./ClassicPopover-DWR50Nxi.mjs";
4
+ import { t as r } from "./CommentStore-CysGkBHp.mjs";
5
+ import { t as i } from "./ClassicPopover-BUb-1WMB.mjs";
6
6
  import { Fragment as a, computed as o, createBlock as s, createCommentVNode as c, createElementBlock as l, createElementVNode as u, createTextVNode as d, createVNode as f, defineAsyncComponent as p, defineComponent as m, normalizeClass as h, onMounted as g, onUnmounted as _, openBlock as v, ref as y, toDisplayString as b, unref as x } from "vue";
7
7
  import { useI18n as S } from "vue-i18n";
8
8
  import C from "dayjs";
@@ -104,7 +104,7 @@ var D = { class: "d-flex flex-column w-100" }, O = { class: "d-flex align-items-
104
104
  },
105
105
  emits: ["deleteComment", "update:comment"],
106
106
  setup(e, { expose: n, emit: i }) {
107
- let m = p(() => import("./CommentInput-US8ZtNj1.mjs")), g = p(() => import("./CommentParentInfo-DMX3nkCb.mjs")), _ = p(() => import("./LikeSection-MmbHMunb.mjs")), C = p(() => import("./CommentMoreActions-T5RN6BGq.mjs")), T = p(() => import("./CommentList-CSYpqgNM.mjs")), E = e, D = i, O = y(!1), k = y(!1), A = y(!1), j = y(!1), M = y(void 0), { t: L } = S(), R = t(), z = r(), B = o({
107
+ let m = p(() => import("./CommentInput-CrRstzua.mjs")), g = p(() => import("./CommentParentInfo-DoEeaQGU.mjs")), _ = p(() => import("./LikeSection-CGu4yOCr.mjs")), C = p(() => import("./CommentMoreActions-y202UxL5.mjs")), T = p(() => import("./CommentList-snIIudVC.mjs")), E = e, D = i, O = y(!1), k = y(!1), A = y(!1), j = y(!1), M = y(void 0), { t: L } = S(), R = t(), z = r(), B = o({
108
108
  get() {
109
109
  return E.comment;
110
110
  },
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentItem-CvNbH7Hf.mjs","names":["displayHelper","_hoisted_1","_hoisted_2","_hoisted_3","_sfc_render","_openBlock","_createElementBlock","_createElementVNode","_normalizeClass","_toDisplayString","_createVNode","_createTextVNode","_createCommentVNode","_sfc_main","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_createVNode","_Fragment","_toDisplayString","_createCommentVNode","_createTextVNode","_createBlock","_sfc_main"],"sources":["../src/components/display/comments/item/CommentBasicView.vue","../src/components/display/comments/item/CommentBasicView.vue","../src/components/display/comments/item/CommentItem.vue","../src/components/display/comments/item/CommentItem.vue"],"sourcesContent":["<template>\n <div class=\"d-flex flex-column w-100\">\n <div class=\"d-flex align-items-center h6 mb-2\">\n <button\n :id=\"'popover-comment' + comment.commentId\"\n :class=\"isValidComment ? 'c-hand-auto' : 'text-danger'\"\n class=\"btn-transparent me-2\"\n >{{ username }}</button>\n <ClassicPopover\n :disable=\"isValidComment\"\n :target=\"'popover-comment' + comment.commentId\"\n :content=\"t('Comment waiting')\"\n />\n <time :datetime=\"comment.date\" class=\"me-2\">\n {{ date }}\n </time>\n <div\n v-if=\"comment.abuse && editRight\"\n class=\"d-flex align-items-center text-danger me-2\"\n >\n <AlertIcon :size=\"16\" class=\"me-1\" />\n {{ t(\"abuse denounced\", { nb: comment.abuse }) }}\n </div>\n <span v-if=\"editRight\" :class=\"'status-' + comment.state\" />\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <pre v-html=\"urlify(contentDisplay)\" />\n <!-- eslint-enable -->\n <a\n v-if=\"commentTooLong\"\n class=\"c-hand font-italic\"\n @click=\"displayPreview = !displayPreview\"\n >{{ readMore }}\n </a>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AlertIcon from \"vue-material-design-icons/Alert.vue\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\ndayjs.extend(relativeTime);\nimport displayHelper from \"../../../../helper/displayHelper\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport ClassicPopover from \"../../../misc/ClassicPopover.vue\";\nimport { computed, onMounted, onUnmounted, Ref, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n editRight: { default: false, type: Boolean },\n})\n\n//Data \nconst displayPreview = ref(true);\nconst date = ref(\"\");\nconst dateInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n //Composables\nconst { t } = useI18n();\n\n//Computed\nconst commentTooLong = computed(() => props.comment.content.length > 300);\nconst username = computed(() => props.comment.poster.userName);\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst readMore = computed(() => displayPreview.value ? t(\"Read more\") : t(\"Read less\"));\nconst contentDisplay = computed(() => {\n if (!displayPreview.value || !commentTooLong.value) {\n return props.comment.content;\n }\n return props.comment.content.substring(0, 300) + \"...\";\n});\n\nonMounted(()=>{\n defineDateFromNow();\n dateInterval.value = setInterval(() => {\n defineDateFromNow();\n }, 60000);\n})\n \nonUnmounted(()=>clearInterval(dateInterval.value as unknown as number))\n\n//Methods\nfunction urlify(text:string|undefined){\n return displayHelper.urlify(text);\n}\nfunction defineDateFromNow() {\n if (!props.comment.date) {\n date.value = \"\";\n }\n date.value = dayjs(props.comment.date).fromNow();\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../../style/comments\";\n</style>\n","<template>\n <div class=\"d-flex flex-column w-100\">\n <div class=\"d-flex align-items-center h6 mb-2\">\n <button\n :id=\"'popover-comment' + comment.commentId\"\n :class=\"isValidComment ? 'c-hand-auto' : 'text-danger'\"\n class=\"btn-transparent me-2\"\n >{{ username }}</button>\n <ClassicPopover\n :disable=\"isValidComment\"\n :target=\"'popover-comment' + comment.commentId\"\n :content=\"t('Comment waiting')\"\n />\n <time :datetime=\"comment.date\" class=\"me-2\">\n {{ date }}\n </time>\n <div\n v-if=\"comment.abuse && editRight\"\n class=\"d-flex align-items-center text-danger me-2\"\n >\n <AlertIcon :size=\"16\" class=\"me-1\" />\n {{ t(\"abuse denounced\", { nb: comment.abuse }) }}\n </div>\n <span v-if=\"editRight\" :class=\"'status-' + comment.state\" />\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <pre v-html=\"urlify(contentDisplay)\" />\n <!-- eslint-enable -->\n <a\n v-if=\"commentTooLong\"\n class=\"c-hand font-italic\"\n @click=\"displayPreview = !displayPreview\"\n >{{ readMore }}\n </a>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AlertIcon from \"vue-material-design-icons/Alert.vue\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\ndayjs.extend(relativeTime);\nimport displayHelper from \"../../../../helper/displayHelper\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport ClassicPopover from \"../../../misc/ClassicPopover.vue\";\nimport { computed, onMounted, onUnmounted, Ref, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n editRight: { default: false, type: Boolean },\n})\n\n//Data \nconst displayPreview = ref(true);\nconst date = ref(\"\");\nconst dateInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\n\n //Composables\nconst { t } = useI18n();\n\n//Computed\nconst commentTooLong = computed(() => props.comment.content.length > 300);\nconst username = computed(() => props.comment.poster.userName);\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst readMore = computed(() => displayPreview.value ? t(\"Read more\") : t(\"Read less\"));\nconst contentDisplay = computed(() => {\n if (!displayPreview.value || !commentTooLong.value) {\n return props.comment.content;\n }\n return props.comment.content.substring(0, 300) + \"...\";\n});\n\nonMounted(()=>{\n defineDateFromNow();\n dateInterval.value = setInterval(() => {\n defineDateFromNow();\n }, 60000);\n})\n \nonUnmounted(()=>clearInterval(dateInterval.value as unknown as number))\n\n//Methods\nfunction urlify(text:string|undefined){\n return displayHelper.urlify(text);\n}\nfunction defineDateFromNow() {\n if (!props.comment.date) {\n date.value = \"\";\n }\n date.value = dayjs(props.comment.date).fromNow();\n}\n</script>\n<style lang=\"scss\">\n@use \"../../../../style/comments\";\n</style>\n","<template>\n <div\n class=\"d-flex flex-column flex-grow-1 w-100 really-light-secondary-bg\"\n :class=\"isAnAnswer && !isFlatList ? 'my-1 p-0' : 'my-3 p-2'\"\n >\n <div class=\"d-flex flex-nowrap justify-content-between align-items-center\">\n <CommentBasicView :comment=\"comment\" :edit-right=\"editRight\" />\n <CommentMoreActions\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n :config=\"config\"\n @delete-comment=\"emitDeleteComment\"\n />\n </div>\n <template v-if=\"isValidComment\">\n <div class=\"d-flex align-items-center mt-1\">\n <LikeSection\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n />\n <button\n v-if=\"!comment.answerTo && canPostComment\"\n class=\"btn btn-transparent\"\n @click=\"answerComment\"\n >\n {{ t(\"To answer\") }}\n </button>\n <button\n v-if=\"isFlatList && comment.answerTo\"\n class=\"btn btn-transparent d-flex align-items-center\"\n @click=\"showParentComment = !showParentComment\"\n >\n {{ t(\"In response to\") }}\n <ChevronDownIcon :class=\"{ 'arrow-transform': showParentComment }\" />\n </button>\n </div>\n <CommentInput\n v-if=\"isAnsweringComment && canPostComment\"\n class=\"ms-4\"\n :focus=\"focus\"\n :podcast=\"podcast\"\n :in-answer-comment=\"comment\"\n @cancel-action=\"isAnsweringComment = false\"\n @new-comment=\"newComment\"\n />\n <div\n v-if=\"comment.responses?.length && !isFlatList\"\n class=\"ms-4 mt-2 answers-section\"\n >\n <button\n class=\"d-flex align-items-center btn-transparent text-primary\"\n @click=\"showAnswers = !showAnswers\"\n >\n <ChevronDownIcon :class=\"{ 'arrow-transform': showAnswers }\" />\n {{ t(\"nb answers\", { nb: comment.responses.length }) }}\n </button>\n <CommentList\n v-if=\"showAnswers\"\n ref=\"commentList\"\n :podcast=\"podcast\"\n :size=\"5\"\n :answer-to-comment=\"comment.commentId\"\n :config=\"config\"\n :event-to-handle=\"eventToHandle\"\n @comment-deleted=\"updateForAnswerDeleted\"\n />\n </div>\n </template>\n <CommentParentInfo\n v-if=\"showParentComment\"\n class=\"ms-4\"\n :comment-id=\"comment.answerTo\"\n :edit-right=\"editRight\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ChevronDownIcon from \"vue-material-design-icons/ChevronDown.vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"../../../../stores/class/general/podcast\";\nimport CommentBasicView from \"./CommentBasicView.vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { defineAsyncComponent, ref, Ref, computed } from \"vue\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"../../../../stores/class/config/commentsConfig\";\nimport { useI18n } from \"vue-i18n\";\nconst CommentInput = defineAsyncComponent(() => import(\"../CommentInput.vue\"));\nconst CommentParentInfo = defineAsyncComponent(\n () => import(\"../CommentParentInfo.vue\"),\n);\nconst LikeSection = defineAsyncComponent(\n () => import(\"../like/LikeSection.vue\"),\n);\nconst CommentMoreActions = defineAsyncComponent(\n () => import(\"./CommentMoreActions.vue\"),\n);\nconst CommentList = defineAsyncComponent(() => import(\"../CommentList.vue\"));\n\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n podcast: { default: undefined, type: Object as () => Podcast },\n isFlatList: { default: false, type: Boolean },\n config: { default: undefined, type: Object as () => CommentsConfig },\n organisationId: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"deleteComment\", \"update:comment\"]);\n\n//Data \nconst isAnsweringComment = ref(false);\nconst showAnswers = ref(false);\nconst focus = ref(false);\nconst showParentComment = ref(false);\nconst eventToHandle : Ref<CommentMessage | undefined>= ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\nconst commentStore = useCommentStore();\n\n\n//Computed\nconst commentForVmodel = computed({\n get(): CommentPodcast {\n return props.comment;\n },\n set(value: CommentPodcast) {\n if (!eventActive.value) {\n emit(\"update:comment\", value);\n }\n },\n});\nconst isAnAnswer = computed(() => undefined !== props.comment.answerTo);\nconst editRight = computed(() => {\n return (\n (true === authStore.isRoleComments &&\n (authStore.authOrgaId === props.podcast?.organisation.id ||\n authStore.authOrgaId === props.organisationId)) ||\n true === authStore.isRoleAdmin\n );\n});\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst canPostComment = computed(() => {\n return commentStore.getCanPostComment(\n props.config,\n props.podcast,\n undefined !== authStore.authOrgaId,\n );\n});\nconst eventActive = computed(() => undefined !== props.podcast?.conferenceId);\n\n \n//Methods\nfunction answerComment(): void {\n isAnsweringComment.value = true;\n focus.value = !focus.value;\n}\nfunction newComment(comment: CommentPodcast): void {\n modifyAnswerNumber(comment.commentId);\n if (!eventActive.value) {\n eventToHandle.value = { type: \"CREATE\", comment: comment };\n }\n isAnsweringComment.value = false;\n}\nfunction modifyAnswerNumber(commentId: number, isAdd = true) {\n const commentToEdit = props.comment;\n if (commentToEdit.responses) {\n if (isAdd) {\n commentToEdit.responses.push(commentId);\n } else {\n const index = commentToEdit.responses.indexOf(commentId);\n if (index !== -1) {\n commentToEdit.responses.splice(index, 1);\n }\n }\n } else if (isAdd) {\n commentToEdit.responses = [commentId];\n }\n emit(\"update:comment\", commentToEdit);\n}\nfunction emitDeleteComment() {\n if (!eventActive.value) {\n emit(\"deleteComment\");\n }\n}\nfunction receiveEvent(event: CommentMessage) {\n if (\"CREATE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId);\n } else if (\"DELETE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId, false);\n }\n eventToHandle.value = event;\n}\nfunction updateForAnswerDeleted(commentId: number) {\n modifyAnswerNumber(commentId, false);\n}\n//Expose\ndefineExpose({\n receiveEvent\n});\n</script>\n","<template>\n <div\n class=\"d-flex flex-column flex-grow-1 w-100 really-light-secondary-bg\"\n :class=\"isAnAnswer && !isFlatList ? 'my-1 p-0' : 'my-3 p-2'\"\n >\n <div class=\"d-flex flex-nowrap justify-content-between align-items-center\">\n <CommentBasicView :comment=\"comment\" :edit-right=\"editRight\" />\n <CommentMoreActions\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n :config=\"config\"\n @delete-comment=\"emitDeleteComment\"\n />\n </div>\n <template v-if=\"isValidComment\">\n <div class=\"d-flex align-items-center mt-1\">\n <LikeSection\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n :podcast=\"podcast\"\n />\n <button\n v-if=\"!comment.answerTo && canPostComment\"\n class=\"btn btn-transparent\"\n @click=\"answerComment\"\n >\n {{ t(\"To answer\") }}\n </button>\n <button\n v-if=\"isFlatList && comment.answerTo\"\n class=\"btn btn-transparent d-flex align-items-center\"\n @click=\"showParentComment = !showParentComment\"\n >\n {{ t(\"In response to\") }}\n <ChevronDownIcon :class=\"{ 'arrow-transform': showParentComment }\" />\n </button>\n </div>\n <CommentInput\n v-if=\"isAnsweringComment && canPostComment\"\n class=\"ms-4\"\n :focus=\"focus\"\n :podcast=\"podcast\"\n :in-answer-comment=\"comment\"\n @cancel-action=\"isAnsweringComment = false\"\n @new-comment=\"newComment\"\n />\n <div\n v-if=\"comment.responses?.length && !isFlatList\"\n class=\"ms-4 mt-2 answers-section\"\n >\n <button\n class=\"d-flex align-items-center btn-transparent text-primary\"\n @click=\"showAnswers = !showAnswers\"\n >\n <ChevronDownIcon :class=\"{ 'arrow-transform': showAnswers }\" />\n {{ t(\"nb answers\", { nb: comment.responses.length }) }}\n </button>\n <CommentList\n v-if=\"showAnswers\"\n ref=\"commentList\"\n :podcast=\"podcast\"\n :size=\"5\"\n :answer-to-comment=\"comment.commentId\"\n :config=\"config\"\n :event-to-handle=\"eventToHandle\"\n @comment-deleted=\"updateForAnswerDeleted\"\n />\n </div>\n </template>\n <CommentParentInfo\n v-if=\"showParentComment\"\n class=\"ms-4\"\n :comment-id=\"comment.answerTo\"\n :edit-right=\"editRight\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ChevronDownIcon from \"vue-material-design-icons/ChevronDown.vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"../../../../stores/class/general/podcast\";\nimport CommentBasicView from \"./CommentBasicView.vue\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { defineAsyncComponent, ref, Ref, computed } from \"vue\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"../../../../stores/class/config/commentsConfig\";\nimport { useI18n } from \"vue-i18n\";\nconst CommentInput = defineAsyncComponent(() => import(\"../CommentInput.vue\"));\nconst CommentParentInfo = defineAsyncComponent(\n () => import(\"../CommentParentInfo.vue\"),\n);\nconst LikeSection = defineAsyncComponent(\n () => import(\"../like/LikeSection.vue\"),\n);\nconst CommentMoreActions = defineAsyncComponent(\n () => import(\"./CommentMoreActions.vue\"),\n);\nconst CommentList = defineAsyncComponent(() => import(\"../CommentList.vue\"));\n\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n podcast: { default: undefined, type: Object as () => Podcast },\n isFlatList: { default: false, type: Boolean },\n config: { default: undefined, type: Object as () => CommentsConfig },\n organisationId: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"deleteComment\", \"update:comment\"]);\n\n//Data \nconst isAnsweringComment = ref(false);\nconst showAnswers = ref(false);\nconst focus = ref(false);\nconst showParentComment = ref(false);\nconst eventToHandle : Ref<CommentMessage | undefined>= ref(undefined);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\nconst commentStore = useCommentStore();\n\n\n//Computed\nconst commentForVmodel = computed({\n get(): CommentPodcast {\n return props.comment;\n },\n set(value: CommentPodcast) {\n if (!eventActive.value) {\n emit(\"update:comment\", value);\n }\n },\n});\nconst isAnAnswer = computed(() => undefined !== props.comment.answerTo);\nconst editRight = computed(() => {\n return (\n (true === authStore.isRoleComments &&\n (authStore.authOrgaId === props.podcast?.organisation.id ||\n authStore.authOrgaId === props.organisationId)) ||\n true === authStore.isRoleAdmin\n );\n});\nconst isValidComment = computed(() => \"VALIDATED\" === props.comment.state);\nconst canPostComment = computed(() => {\n return commentStore.getCanPostComment(\n props.config,\n props.podcast,\n undefined !== authStore.authOrgaId,\n );\n});\nconst eventActive = computed(() => undefined !== props.podcast?.conferenceId);\n\n \n//Methods\nfunction answerComment(): void {\n isAnsweringComment.value = true;\n focus.value = !focus.value;\n}\nfunction newComment(comment: CommentPodcast): void {\n modifyAnswerNumber(comment.commentId);\n if (!eventActive.value) {\n eventToHandle.value = { type: \"CREATE\", comment: comment };\n }\n isAnsweringComment.value = false;\n}\nfunction modifyAnswerNumber(commentId: number, isAdd = true) {\n const commentToEdit = props.comment;\n if (commentToEdit.responses) {\n if (isAdd) {\n commentToEdit.responses.push(commentId);\n } else {\n const index = commentToEdit.responses.indexOf(commentId);\n if (index !== -1) {\n commentToEdit.responses.splice(index, 1);\n }\n }\n } else if (isAdd) {\n commentToEdit.responses = [commentId];\n }\n emit(\"update:comment\", commentToEdit);\n}\nfunction emitDeleteComment() {\n if (!eventActive.value) {\n emit(\"deleteComment\");\n }\n}\nfunction receiveEvent(event: CommentMessage) {\n if (\"CREATE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId);\n } else if (\"DELETE\" === event.type) {\n modifyAnswerNumber(event.comment.commentId, false);\n }\n eventToHandle.value = event;\n}\nfunction updateForAnswerDeleted(commentId: number) {\n modifyAnswerNumber(commentId, false);\n}\n//Expose\ndefineExpose({\n receiveEvent\n});\n</script>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentList-BTyyCcX4.mjs","names":["classicApi","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createVNode","_withCtx","_Fragment","_renderList","_withKeys","_createCommentVNode","_normalizeClass","_createBlock","_sfc_main"],"sources":["../src/components/display/comments/CommentList.vue","../src/components/display/comments/CommentList.vue"],"sourcesContent":["<template>\n <div class=\"d-flex flex-column\">\n <div\n v-if=\"isNotAnAnswerList && 0 !== totalCount\"\n class=\"d-flex align-items-center mb-2\"\n >\n <div class=\"text-secondary me-3\">\n {{ t(\"Number comments\", { nb: totalCount }) }}\n </div>\n <button\n id=\"sort-by-comments\"\n class=\"btn btn-transparent d-flex align-items-center\"\n >\n <SortVariantIcon :size=\"30\" />\n <p class=\"ms-1\">{{ t(\"Sort by\") }}</p>\n </button>\n <ClassicPopover target=\"sort-by-comments\" :only-click=\"true\">\n <button\n v-for=\"sortOption in sortChoice\"\n :key=\"sortOption.value\"\n class=\"me-3 octopus-dropdown-item\"\n :disabled=\"sortOption.value === sortType\"\n @mousedown=\"changeSort(sortOption.value)\"\n @keydown.enter=\"changeSort(sortOption.value)\"\n >\n {{ sortOption.title }}\n </button>\n </ClassicPopover>\n </div>\n <div v-if=\"!loading && !error && 0 === totalCount\" class=\"text-center\">\n {{ t(\"No comments\") }}\n </div>\n <div\n ref=\"scrollComponent\"\n :class=\"isNotAnAnswerList ? 'scrolling-comments' : ''\"\n >\n <CommentItem\n v-for=\"(c, indexCom) in comments\"\n :id=\"'comItem' + c.commentId\"\n :key=\"c.commentId\"\n v-model:comment=\"comments[indexCom]\"\n :podcast=\"podcast\"\n :is-flat-list=\"isFlatList\"\n :config=\"config\"\n :organisation-id=\"organisationId\"\n @delete-comment=\"deleteComment(c.commentId)\"\n />\n <ClassicLoading\n :loading-text=\"loading && !error ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Comments loading error`) : undefined\"\n />\n <button\n v-if=\"!isNotAnAnswerList && dfirst + dsize < totalCount\"\n class=\"btn share-btn mx-2\"\n :title=\"t('See more')\"\n >\n <PlusIcon />\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport SortVariantIcon from \"vue-material-design-icons/SortVariant.vue\";\nimport PlusIcon from \"vue-material-design-icons/Plus.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport { computed, defineAsyncComponent, onMounted, onUnmounted, Ref, ref, useTemplateRef, watch } from \"vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"@/stores/class/config/commentsConfig\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n/* eslint-disable */\nconst CommentItem: any = defineAsyncComponent(() => import('./item/CommentItem.vue'));\n/* eslint-enable */\nconst ClassicPopover = defineAsyncComponent(\n () => import(\"../../misc/ClassicPopover.vue\"),\n);\n\n//Props \nconst props = defineProps({\n size: { default: 10, type: Number },\n podcast: { default: undefined, type: Object as () => Podcast },\n reload: { default: false, type: Boolean },\n answerToComment: { default: undefined, type: Number },\n isFlatList: { default: false, type: Boolean },\n stateFilter: { default: \"\", type: String },\n organisationId: { default: undefined, type: String },\n nbComments: { default: 0, type: Number },\n config: { default: undefined, type: Object as () => CommentsConfig },\n eventToHandle: { default: undefined, type: Object as () => CommentMessage },\n})\n\n//Emits\nconst emit = defineEmits([\"update:nbComments\", \"commentDeleted\"]);\n\n//Data \nconst loading = ref(false);\nconst error = ref(false);\nconst dfirst = ref(0);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst sortType = ref(\"DATE_DESC\");\nconst comments: Ref<Array<CommentPodcast>> = ref([]);\nconst scrollableSection: Ref<HTMLElement | undefined> = ref(undefined);\nconst scrollComponentRef = useTemplateRef('scrollComponent');\n\n//Composables\nconst { t } = useI18n();\n\n//Computed\nconst isNotAnAnswerList = computed(() => undefined === props.answerToComment);\nconst changed = computed(() => `${props.size}|${props.reload}|${dsize.value}|${props.stateFilter}|${props.podcast?.podcastId}|${props.organisationId}`);\nconst sortChoice = computed(() =>{\n return [\n { title: t(\"The most recent\"), value: \"DATE_DESC\" },\n { title: t(\"Top comments\"), value: \"LIKE_DESC\" },\n ];\n});\n\n//Watch\nwatch(totalCount, () => {emit(\"update:nbComments\", totalCount.value)});\nwatch(changed, () => {fetchContent(true);});\nwatch(()=>props.eventToHandle, async () => {\n if (!props.eventToHandle) {\n return;\n }\n if (props.answerToComment === props.eventToHandle.comment.answerTo) {\n switch (props.eventToHandle.type) {\n case \"CREATE\":\n createComment(props.eventToHandle.comment);\n break;\n case \"UPDATE\":\n updateComment(props.eventToHandle.comment);\n break;\n case \"DELETE\":\n deleteComment(props.eventToHandle.comment.commentId);\n break;\n default:\n break;\n }\n return;\n }\n if (undefined !== props.eventToHandle.comment.answerTo) {\n const comItem = scrollComponentRef?.value?.querySelector('#comItem' + props.eventToHandle.comment.answerTo) as InstanceType<typeof CommentItem>;\n comItem?.receiveEvent(props.eventToHandle);\n }\n}, {deep: true});\n\n\nonMounted(()=>{\n fetchContent(true);\n if (isNotAnAnswerList.value) {\n scrollableSection.value = scrollComponentRef?.value as HTMLElement;\n scrollableSection.value.addEventListener(\"scroll\", handleScroll);\n }\n})\n\nonUnmounted(()=>{\n if (isNotAnAnswerList.value) {\n scrollableSection.value?.removeEventListener(\"scroll\", handleScroll);\n }\n})\n\n\n//Methods\nfunction changeSort(sortTypeUpdate: string) {\n sortType.value = sortTypeUpdate;\n fetchContent(true);\n}\nfunction handleScroll() {\n if (\n scrollableSection.value &&\n totalCount.value > comments.value.length &&\n scrollableSection.value.scrollTop +\n scrollableSection.value.clientHeight >=\n scrollableSection.value.scrollHeight\n ) {\n fetchContent(false);\n }\n}\nfunction findCommentInCommentsLoaded(commentId: number) {\n return comments.value.findIndex(\n (element: CommentPodcast) => element.commentId === commentId,\n );\n}\nfunction createComment(comment: CommentPodcast) {\n comments.value.unshift(comment);\n totalCount.value += 1;\n}\nfunction updateComment(comment: CommentPodcast) {\n const commentIndex = findCommentInCommentsLoaded(comment.commentId);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1, comment);\n }\n}\nfunction deleteComment(commentIdToDelete: number) {\n const commentIndex = findCommentInCommentsLoaded(commentIdToDelete);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1);\n totalCount.value -= 1;\n emit(\"commentDeleted\", commentIdToDelete);\n }\n}\nasync function fetchContent(reset: boolean): Promise<void> {\n if (loading.value) {\n return;\n }\n loading.value = true;\n if (reset) {\n dfirst.value = 0;\n comments.value.length = 0;\n }\n const param = {\n first: dfirst.value,\n size: dsize.value,\n podcastId: props.podcast?.podcastId,\n sort: sortType.value,\n answerTo: props.answerToComment,\n hideAnswers: !props.isFlatList,\n state: props.stateFilter.length ? props.stateFilter : undefined,\n organisationId: props.organisationId,\n };\n try {\n const data = await classicApi.fetchData<\n ListClassicReturn<CommentPodcast>\n >({\n api: 2,\n path: \"comment/list\",\n parameters: param,\n });\n if (reset) {\n comments.value.length = 0;\n }\n comments.value.push(...data.result);\n totalCount.value = data.count;\n dfirst.value += dsize.value;\n loading.value = false;\n } catch (errorWs) {\n // Errors sometimes occur, and shouldn't trigger anything too drastic,\n // so we only log it, instead of using handle403\n console.error(errorWs);\n error.value = true;\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n .scrolling-comments {\n max-height: 715px;\n overflow-y: auto;\n }\n}\n</style>\n","<template>\n <div class=\"d-flex flex-column\">\n <div\n v-if=\"isNotAnAnswerList && 0 !== totalCount\"\n class=\"d-flex align-items-center mb-2\"\n >\n <div class=\"text-secondary me-3\">\n {{ t(\"Number comments\", { nb: totalCount }) }}\n </div>\n <button\n id=\"sort-by-comments\"\n class=\"btn btn-transparent d-flex align-items-center\"\n >\n <SortVariantIcon :size=\"30\" />\n <p class=\"ms-1\">{{ t(\"Sort by\") }}</p>\n </button>\n <ClassicPopover target=\"sort-by-comments\" :only-click=\"true\">\n <button\n v-for=\"sortOption in sortChoice\"\n :key=\"sortOption.value\"\n class=\"me-3 octopus-dropdown-item\"\n :disabled=\"sortOption.value === sortType\"\n @mousedown=\"changeSort(sortOption.value)\"\n @keydown.enter=\"changeSort(sortOption.value)\"\n >\n {{ sortOption.title }}\n </button>\n </ClassicPopover>\n </div>\n <div v-if=\"!loading && !error && 0 === totalCount\" class=\"text-center\">\n {{ t(\"No comments\") }}\n </div>\n <div\n ref=\"scrollComponent\"\n :class=\"isNotAnAnswerList ? 'scrolling-comments' : ''\"\n >\n <CommentItem\n v-for=\"(c, indexCom) in comments\"\n :id=\"'comItem' + c.commentId\"\n :key=\"c.commentId\"\n v-model:comment=\"comments[indexCom]\"\n :podcast=\"podcast\"\n :is-flat-list=\"isFlatList\"\n :config=\"config\"\n :organisation-id=\"organisationId\"\n @delete-comment=\"deleteComment(c.commentId)\"\n />\n <ClassicLoading\n :loading-text=\"loading && !error ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Comments loading error`) : undefined\"\n />\n <button\n v-if=\"!isNotAnAnswerList && dfirst + dsize < totalCount\"\n class=\"btn share-btn mx-2\"\n :title=\"t('See more')\"\n >\n <PlusIcon />\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport SortVariantIcon from \"vue-material-design-icons/SortVariant.vue\";\nimport PlusIcon from \"vue-material-design-icons/Plus.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport { computed, defineAsyncComponent, onMounted, onUnmounted, Ref, ref, useTemplateRef, watch } from \"vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"@/stores/class/config/commentsConfig\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n/* eslint-disable */\nconst CommentItem: any = defineAsyncComponent(() => import('./item/CommentItem.vue'));\n/* eslint-enable */\nconst ClassicPopover = defineAsyncComponent(\n () => import(\"../../misc/ClassicPopover.vue\"),\n);\n\n//Props \nconst props = defineProps({\n size: { default: 10, type: Number },\n podcast: { default: undefined, type: Object as () => Podcast },\n reload: { default: false, type: Boolean },\n answerToComment: { default: undefined, type: Number },\n isFlatList: { default: false, type: Boolean },\n stateFilter: { default: \"\", type: String },\n organisationId: { default: undefined, type: String },\n nbComments: { default: 0, type: Number },\n config: { default: undefined, type: Object as () => CommentsConfig },\n eventToHandle: { default: undefined, type: Object as () => CommentMessage },\n})\n\n//Emits\nconst emit = defineEmits([\"update:nbComments\", \"commentDeleted\"]);\n\n//Data \nconst loading = ref(false);\nconst error = ref(false);\nconst dfirst = ref(0);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst sortType = ref(\"DATE_DESC\");\nconst comments: Ref<Array<CommentPodcast>> = ref([]);\nconst scrollableSection: Ref<HTMLElement | undefined> = ref(undefined);\nconst scrollComponentRef = useTemplateRef('scrollComponent');\n\n//Composables\nconst { t } = useI18n();\n\n//Computed\nconst isNotAnAnswerList = computed(() => undefined === props.answerToComment);\nconst changed = computed(() => `${props.size}|${props.reload}|${dsize.value}|${props.stateFilter}|${props.podcast?.podcastId}|${props.organisationId}`);\nconst sortChoice = computed(() =>{\n return [\n { title: t(\"The most recent\"), value: \"DATE_DESC\" },\n { title: t(\"Top comments\"), value: \"LIKE_DESC\" },\n ];\n});\n\n//Watch\nwatch(totalCount, () => {emit(\"update:nbComments\", totalCount.value)});\nwatch(changed, () => {fetchContent(true);});\nwatch(()=>props.eventToHandle, async () => {\n if (!props.eventToHandle) {\n return;\n }\n if (props.answerToComment === props.eventToHandle.comment.answerTo) {\n switch (props.eventToHandle.type) {\n case \"CREATE\":\n createComment(props.eventToHandle.comment);\n break;\n case \"UPDATE\":\n updateComment(props.eventToHandle.comment);\n break;\n case \"DELETE\":\n deleteComment(props.eventToHandle.comment.commentId);\n break;\n default:\n break;\n }\n return;\n }\n if (undefined !== props.eventToHandle.comment.answerTo) {\n const comItem = scrollComponentRef?.value?.querySelector('#comItem' + props.eventToHandle.comment.answerTo) as InstanceType<typeof CommentItem>;\n comItem?.receiveEvent(props.eventToHandle);\n }\n}, {deep: true});\n\n\nonMounted(()=>{\n fetchContent(true);\n if (isNotAnAnswerList.value) {\n scrollableSection.value = scrollComponentRef?.value as HTMLElement;\n scrollableSection.value.addEventListener(\"scroll\", handleScroll);\n }\n})\n\nonUnmounted(()=>{\n if (isNotAnAnswerList.value) {\n scrollableSection.value?.removeEventListener(\"scroll\", handleScroll);\n }\n})\n\n\n//Methods\nfunction changeSort(sortTypeUpdate: string) {\n sortType.value = sortTypeUpdate;\n fetchContent(true);\n}\nfunction handleScroll() {\n if (\n scrollableSection.value &&\n totalCount.value > comments.value.length &&\n scrollableSection.value.scrollTop +\n scrollableSection.value.clientHeight >=\n scrollableSection.value.scrollHeight\n ) {\n fetchContent(false);\n }\n}\nfunction findCommentInCommentsLoaded(commentId: number) {\n return comments.value.findIndex(\n (element: CommentPodcast) => element.commentId === commentId,\n );\n}\nfunction createComment(comment: CommentPodcast) {\n comments.value.unshift(comment);\n totalCount.value += 1;\n}\nfunction updateComment(comment: CommentPodcast) {\n const commentIndex = findCommentInCommentsLoaded(comment.commentId);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1, comment);\n }\n}\nfunction deleteComment(commentIdToDelete: number) {\n const commentIndex = findCommentInCommentsLoaded(commentIdToDelete);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1);\n totalCount.value -= 1;\n emit(\"commentDeleted\", commentIdToDelete);\n }\n}\nasync function fetchContent(reset: boolean): Promise<void> {\n if (loading.value) {\n return;\n }\n loading.value = true;\n if (reset) {\n dfirst.value = 0;\n comments.value.length = 0;\n }\n const param = {\n first: dfirst.value,\n size: dsize.value,\n podcastId: props.podcast?.podcastId,\n sort: sortType.value,\n answerTo: props.answerToComment,\n hideAnswers: !props.isFlatList,\n state: props.stateFilter.length ? props.stateFilter : undefined,\n organisationId: props.organisationId,\n };\n try {\n const data = await classicApi.fetchData<\n ListClassicReturn<CommentPodcast>\n >({\n api: 2,\n path: \"comment/list\",\n parameters: param,\n });\n if (reset) {\n comments.value.length = 0;\n }\n comments.value.push(...data.result);\n totalCount.value = data.count;\n dfirst.value += dsize.value;\n loading.value = false;\n } catch (errorWs) {\n // Errors sometimes occur, and shouldn't trigger anything too drastic,\n // so we only log it, instead of using handle403\n console.error(errorWs);\n error.value = true;\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n .scrolling-comments {\n max-height: 715px;\n overflow-y: auto;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentList-CWrf45Di.mjs","names":["classicApi","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createVNode","_withCtx","_Fragment","_renderList","_withKeys","_createCommentVNode","_normalizeClass","_createBlock","_sfc_main"],"sources":["../src/components/display/comments/CommentList.vue","../src/components/display/comments/CommentList.vue"],"sourcesContent":["<template>\n <div class=\"d-flex flex-column\">\n <div\n v-if=\"isNotAnAnswerList && 0 !== totalCount\"\n class=\"d-flex align-items-center mb-2\"\n >\n <div class=\"text-secondary me-3\">\n {{ t(\"Number comments\", { nb: totalCount }) }}\n </div>\n <button\n id=\"sort-by-comments\"\n class=\"btn btn-transparent d-flex align-items-center\"\n >\n <SortVariantIcon :size=\"30\" />\n <p class=\"ms-1\">{{ t(\"Sort by\") }}</p>\n </button>\n <ClassicPopover target=\"sort-by-comments\" :only-click=\"true\">\n <button\n v-for=\"sortOption in sortChoice\"\n :key=\"sortOption.value\"\n class=\"me-3 octopus-dropdown-item\"\n :disabled=\"sortOption.value === sortType\"\n @mousedown=\"changeSort(sortOption.value)\"\n @keydown.enter=\"changeSort(sortOption.value)\"\n >\n {{ sortOption.title }}\n </button>\n </ClassicPopover>\n </div>\n <div v-if=\"!loading && !error && 0 === totalCount\" class=\"text-center\">\n {{ t(\"No comments\") }}\n </div>\n <div\n ref=\"scrollComponent\"\n :class=\"isNotAnAnswerList ? 'scrolling-comments' : ''\"\n >\n <CommentItem\n v-for=\"(c, indexCom) in comments\"\n :id=\"'comItem' + c.commentId\"\n :key=\"c.commentId\"\n v-model:comment=\"comments[indexCom]\"\n :podcast=\"podcast\"\n :is-flat-list=\"isFlatList\"\n :config=\"config\"\n :organisation-id=\"organisationId\"\n @delete-comment=\"deleteComment(c.commentId)\"\n />\n <ClassicLoading\n :loading-text=\"loading && !error ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Comments loading error`) : undefined\"\n />\n <button\n v-if=\"!isNotAnAnswerList && dfirst + dsize < totalCount\"\n class=\"btn share-btn mx-2\"\n :title=\"t('See more')\"\n >\n <PlusIcon />\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport SortVariantIcon from \"vue-material-design-icons/SortVariant.vue\";\nimport PlusIcon from \"vue-material-design-icons/Plus.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport { computed, defineAsyncComponent, onMounted, onUnmounted, Ref, ref, useTemplateRef, watch } from \"vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"@/stores/class/config/commentsConfig\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n/* eslint-disable */\nconst CommentItem: any = defineAsyncComponent(() => import('./item/CommentItem.vue'));\n/* eslint-enable */\nconst ClassicPopover = defineAsyncComponent(\n () => import(\"../../misc/ClassicPopover.vue\"),\n);\n\n//Props \nconst props = defineProps({\n size: { default: 10, type: Number },\n podcast: { default: undefined, type: Object as () => Podcast },\n reload: { default: false, type: Boolean },\n answerToComment: { default: undefined, type: Number },\n isFlatList: { default: false, type: Boolean },\n stateFilter: { default: \"\", type: String },\n organisationId: { default: undefined, type: String },\n nbComments: { default: 0, type: Number },\n config: { default: undefined, type: Object as () => CommentsConfig },\n eventToHandle: { default: undefined, type: Object as () => CommentMessage },\n})\n\n//Emits\nconst emit = defineEmits([\"update:nbComments\", \"commentDeleted\"]);\n\n//Data \nconst loading = ref(false);\nconst error = ref(false);\nconst dfirst = ref(0);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst sortType = ref(\"DATE_DESC\");\nconst comments: Ref<Array<CommentPodcast>> = ref([]);\nconst scrollableSection: Ref<HTMLElement | undefined> = ref(undefined);\nconst scrollComponentRef = useTemplateRef('scrollComponent');\n\n//Composables\nconst { t } = useI18n();\n\n//Computed\nconst isNotAnAnswerList = computed(() => undefined === props.answerToComment);\nconst changed = computed(() => `${props.size}|${props.reload}|${dsize.value}|${props.stateFilter}|${props.podcast?.podcastId}|${props.organisationId}`);\nconst sortChoice = computed(() =>{\n return [\n { title: t(\"The most recent\"), value: \"DATE_DESC\" },\n { title: t(\"Top comments\"), value: \"LIKE_DESC\" },\n ];\n});\n\n//Watch\nwatch(totalCount, () => {emit(\"update:nbComments\", totalCount.value)});\nwatch(changed, () => {fetchContent(true);});\nwatch(()=>props.eventToHandle, async () => {\n if (!props.eventToHandle) {\n return;\n }\n if (props.answerToComment === props.eventToHandle.comment.answerTo) {\n switch (props.eventToHandle.type) {\n case \"CREATE\":\n createComment(props.eventToHandle.comment);\n break;\n case \"UPDATE\":\n updateComment(props.eventToHandle.comment);\n break;\n case \"DELETE\":\n deleteComment(props.eventToHandle.comment.commentId);\n break;\n default:\n break;\n }\n return;\n }\n if (undefined !== props.eventToHandle.comment.answerTo) {\n const comItem = scrollComponentRef?.value?.querySelector('#comItem' + props.eventToHandle.comment.answerTo) as InstanceType<typeof CommentItem>;\n comItem?.receiveEvent(props.eventToHandle);\n }\n}, {deep: true});\n\n\nonMounted(()=>{\n fetchContent(true);\n if (isNotAnAnswerList.value) {\n scrollableSection.value = scrollComponentRef?.value as HTMLElement;\n scrollableSection.value.addEventListener(\"scroll\", handleScroll);\n }\n})\n\nonUnmounted(()=>{\n if (isNotAnAnswerList.value) {\n scrollableSection.value?.removeEventListener(\"scroll\", handleScroll);\n }\n})\n\n\n//Methods\nfunction changeSort(sortTypeUpdate: string) {\n sortType.value = sortTypeUpdate;\n fetchContent(true);\n}\nfunction handleScroll() {\n if (\n scrollableSection.value &&\n totalCount.value > comments.value.length &&\n scrollableSection.value.scrollTop +\n scrollableSection.value.clientHeight >=\n scrollableSection.value.scrollHeight\n ) {\n fetchContent(false);\n }\n}\nfunction findCommentInCommentsLoaded(commentId: number) {\n return comments.value.findIndex(\n (element: CommentPodcast) => element.commentId === commentId,\n );\n}\nfunction createComment(comment: CommentPodcast) {\n comments.value.unshift(comment);\n totalCount.value += 1;\n}\nfunction updateComment(comment: CommentPodcast) {\n const commentIndex = findCommentInCommentsLoaded(comment.commentId);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1, comment);\n }\n}\nfunction deleteComment(commentIdToDelete: number) {\n const commentIndex = findCommentInCommentsLoaded(commentIdToDelete);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1);\n totalCount.value -= 1;\n emit(\"commentDeleted\", commentIdToDelete);\n }\n}\nasync function fetchContent(reset: boolean): Promise<void> {\n if (loading.value) {\n return;\n }\n loading.value = true;\n if (reset) {\n dfirst.value = 0;\n comments.value.length = 0;\n }\n const param = {\n first: dfirst.value,\n size: dsize.value,\n podcastId: props.podcast?.podcastId,\n sort: sortType.value,\n answerTo: props.answerToComment,\n hideAnswers: !props.isFlatList,\n state: props.stateFilter.length ? props.stateFilter : undefined,\n organisationId: props.organisationId,\n };\n try {\n const data = await classicApi.fetchData<\n ListClassicReturn<CommentPodcast>\n >({\n api: 2,\n path: \"comment/list\",\n parameters: param,\n });\n if (reset) {\n comments.value.length = 0;\n }\n comments.value.push(...data.result);\n totalCount.value = data.count;\n dfirst.value += dsize.value;\n loading.value = false;\n } catch (errorWs) {\n // Errors sometimes occur, and shouldn't trigger anything too drastic,\n // so we only log it, instead of using handle403\n console.error(errorWs);\n error.value = true;\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n .scrolling-comments {\n max-height: 715px;\n overflow-y: auto;\n }\n}\n</style>\n","<template>\n <div class=\"d-flex flex-column\">\n <div\n v-if=\"isNotAnAnswerList && 0 !== totalCount\"\n class=\"d-flex align-items-center mb-2\"\n >\n <div class=\"text-secondary me-3\">\n {{ t(\"Number comments\", { nb: totalCount }) }}\n </div>\n <button\n id=\"sort-by-comments\"\n class=\"btn btn-transparent d-flex align-items-center\"\n >\n <SortVariantIcon :size=\"30\" />\n <p class=\"ms-1\">{{ t(\"Sort by\") }}</p>\n </button>\n <ClassicPopover target=\"sort-by-comments\" :only-click=\"true\">\n <button\n v-for=\"sortOption in sortChoice\"\n :key=\"sortOption.value\"\n class=\"me-3 octopus-dropdown-item\"\n :disabled=\"sortOption.value === sortType\"\n @mousedown=\"changeSort(sortOption.value)\"\n @keydown.enter=\"changeSort(sortOption.value)\"\n >\n {{ sortOption.title }}\n </button>\n </ClassicPopover>\n </div>\n <div v-if=\"!loading && !error && 0 === totalCount\" class=\"text-center\">\n {{ t(\"No comments\") }}\n </div>\n <div\n ref=\"scrollComponent\"\n :class=\"isNotAnAnswerList ? 'scrolling-comments' : ''\"\n >\n <CommentItem\n v-for=\"(c, indexCom) in comments\"\n :id=\"'comItem' + c.commentId\"\n :key=\"c.commentId\"\n v-model:comment=\"comments[indexCom]\"\n :podcast=\"podcast\"\n :is-flat-list=\"isFlatList\"\n :config=\"config\"\n :organisation-id=\"organisationId\"\n @delete-comment=\"deleteComment(c.commentId)\"\n />\n <ClassicLoading\n :loading-text=\"loading && !error ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Comments loading error`) : undefined\"\n />\n <button\n v-if=\"!isNotAnAnswerList && dfirst + dsize < totalCount\"\n class=\"btn share-btn mx-2\"\n :title=\"t('See more')\"\n >\n <PlusIcon />\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport SortVariantIcon from \"vue-material-design-icons/SortVariant.vue\";\nimport PlusIcon from \"vue-material-design-icons/Plus.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport { computed, defineAsyncComponent, onMounted, onUnmounted, Ref, ref, useTemplateRef, watch } from \"vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"@/stores/class/config/commentsConfig\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n/* eslint-disable */\nconst CommentItem: any = defineAsyncComponent(() => import('./item/CommentItem.vue'));\n/* eslint-enable */\nconst ClassicPopover = defineAsyncComponent(\n () => import(\"../../misc/ClassicPopover.vue\"),\n);\n\n//Props \nconst props = defineProps({\n size: { default: 10, type: Number },\n podcast: { default: undefined, type: Object as () => Podcast },\n reload: { default: false, type: Boolean },\n answerToComment: { default: undefined, type: Number },\n isFlatList: { default: false, type: Boolean },\n stateFilter: { default: \"\", type: String },\n organisationId: { default: undefined, type: String },\n nbComments: { default: 0, type: Number },\n config: { default: undefined, type: Object as () => CommentsConfig },\n eventToHandle: { default: undefined, type: Object as () => CommentMessage },\n})\n\n//Emits\nconst emit = defineEmits([\"update:nbComments\", \"commentDeleted\"]);\n\n//Data \nconst loading = ref(false);\nconst error = ref(false);\nconst dfirst = ref(0);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst sortType = ref(\"DATE_DESC\");\nconst comments: Ref<Array<CommentPodcast>> = ref([]);\nconst scrollableSection: Ref<HTMLElement | undefined> = ref(undefined);\nconst scrollComponentRef = useTemplateRef('scrollComponent');\n\n//Composables\nconst { t } = useI18n();\n\n//Computed\nconst isNotAnAnswerList = computed(() => undefined === props.answerToComment);\nconst changed = computed(() => `${props.size}|${props.reload}|${dsize.value}|${props.stateFilter}|${props.podcast?.podcastId}|${props.organisationId}`);\nconst sortChoice = computed(() =>{\n return [\n { title: t(\"The most recent\"), value: \"DATE_DESC\" },\n { title: t(\"Top comments\"), value: \"LIKE_DESC\" },\n ];\n});\n\n//Watch\nwatch(totalCount, () => {emit(\"update:nbComments\", totalCount.value)});\nwatch(changed, () => {fetchContent(true);});\nwatch(()=>props.eventToHandle, async () => {\n if (!props.eventToHandle) {\n return;\n }\n if (props.answerToComment === props.eventToHandle.comment.answerTo) {\n switch (props.eventToHandle.type) {\n case \"CREATE\":\n createComment(props.eventToHandle.comment);\n break;\n case \"UPDATE\":\n updateComment(props.eventToHandle.comment);\n break;\n case \"DELETE\":\n deleteComment(props.eventToHandle.comment.commentId);\n break;\n default:\n break;\n }\n return;\n }\n if (undefined !== props.eventToHandle.comment.answerTo) {\n const comItem = scrollComponentRef?.value?.querySelector('#comItem' + props.eventToHandle.comment.answerTo) as InstanceType<typeof CommentItem>;\n comItem?.receiveEvent(props.eventToHandle);\n }\n}, {deep: true});\n\n\nonMounted(()=>{\n fetchContent(true);\n if (isNotAnAnswerList.value) {\n scrollableSection.value = scrollComponentRef?.value as HTMLElement;\n scrollableSection.value.addEventListener(\"scroll\", handleScroll);\n }\n})\n\nonUnmounted(()=>{\n if (isNotAnAnswerList.value) {\n scrollableSection.value?.removeEventListener(\"scroll\", handleScroll);\n }\n})\n\n\n//Methods\nfunction changeSort(sortTypeUpdate: string) {\n sortType.value = sortTypeUpdate;\n fetchContent(true);\n}\nfunction handleScroll() {\n if (\n scrollableSection.value &&\n totalCount.value > comments.value.length &&\n scrollableSection.value.scrollTop +\n scrollableSection.value.clientHeight >=\n scrollableSection.value.scrollHeight\n ) {\n fetchContent(false);\n }\n}\nfunction findCommentInCommentsLoaded(commentId: number) {\n return comments.value.findIndex(\n (element: CommentPodcast) => element.commentId === commentId,\n );\n}\nfunction createComment(comment: CommentPodcast) {\n comments.value.unshift(comment);\n totalCount.value += 1;\n}\nfunction updateComment(comment: CommentPodcast) {\n const commentIndex = findCommentInCommentsLoaded(comment.commentId);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1, comment);\n }\n}\nfunction deleteComment(commentIdToDelete: number) {\n const commentIndex = findCommentInCommentsLoaded(commentIdToDelete);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1);\n totalCount.value -= 1;\n emit(\"commentDeleted\", commentIdToDelete);\n }\n}\nasync function fetchContent(reset: boolean): Promise<void> {\n if (loading.value) {\n return;\n }\n loading.value = true;\n if (reset) {\n dfirst.value = 0;\n comments.value.length = 0;\n }\n const param = {\n first: dfirst.value,\n size: dsize.value,\n podcastId: props.podcast?.podcastId,\n sort: sortType.value,\n answerTo: props.answerToComment,\n hideAnswers: !props.isFlatList,\n state: props.stateFilter.length ? props.stateFilter : undefined,\n organisationId: props.organisationId,\n };\n try {\n const data = await classicApi.fetchData<\n ListClassicReturn<CommentPodcast>\n >({\n api: 2,\n path: \"comment/list\",\n parameters: param,\n });\n if (reset) {\n comments.value.length = 0;\n }\n comments.value.push(...data.result);\n totalCount.value = data.count;\n dfirst.value += dsize.value;\n loading.value = false;\n } catch (errorWs) {\n // Errors sometimes occur, and shouldn't trigger anything too drastic,\n // so we only log it, instead of using handle403\n console.error(errorWs);\n error.value = true;\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n .scrolling-comments {\n max-height: 715px;\n overflow-y: auto;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentList-DP6wk4PD.mjs","names":["classicApi","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createVNode","_withCtx","_Fragment","_renderList","_withKeys","_createCommentVNode","_normalizeClass","_createBlock","_sfc_main"],"sources":["../src/components/display/comments/CommentList.vue","../src/components/display/comments/CommentList.vue"],"sourcesContent":["<template>\n <div class=\"d-flex flex-column\">\n <div\n v-if=\"isNotAnAnswerList && 0 !== totalCount\"\n class=\"d-flex align-items-center mb-2\"\n >\n <div class=\"text-secondary me-3\">\n {{ t(\"Number comments\", { nb: totalCount }) }}\n </div>\n <button\n id=\"sort-by-comments\"\n class=\"btn btn-transparent d-flex align-items-center\"\n >\n <SortVariantIcon :size=\"30\" />\n <p class=\"ms-1\">{{ t(\"Sort by\") }}</p>\n </button>\n <ClassicPopover target=\"sort-by-comments\" :only-click=\"true\">\n <button\n v-for=\"sortOption in sortChoice\"\n :key=\"sortOption.value\"\n class=\"me-3 octopus-dropdown-item\"\n :disabled=\"sortOption.value === sortType\"\n @mousedown=\"changeSort(sortOption.value)\"\n @keydown.enter=\"changeSort(sortOption.value)\"\n >\n {{ sortOption.title }}\n </button>\n </ClassicPopover>\n </div>\n <div v-if=\"!loading && !error && 0 === totalCount\" class=\"text-center\">\n {{ t(\"No comments\") }}\n </div>\n <div\n ref=\"scrollComponent\"\n :class=\"isNotAnAnswerList ? 'scrolling-comments' : ''\"\n >\n <CommentItem\n v-for=\"(c, indexCom) in comments\"\n :id=\"'comItem' + c.commentId\"\n :key=\"c.commentId\"\n v-model:comment=\"comments[indexCom]\"\n :podcast=\"podcast\"\n :is-flat-list=\"isFlatList\"\n :config=\"config\"\n :organisation-id=\"organisationId\"\n @delete-comment=\"deleteComment(c.commentId)\"\n />\n <ClassicLoading\n :loading-text=\"loading && !error ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Comments loading error`) : undefined\"\n />\n <button\n v-if=\"!isNotAnAnswerList && dfirst + dsize < totalCount\"\n class=\"btn share-btn mx-2\"\n :title=\"t('See more')\"\n >\n <PlusIcon />\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport SortVariantIcon from \"vue-material-design-icons/SortVariant.vue\";\nimport PlusIcon from \"vue-material-design-icons/Plus.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport { computed, defineAsyncComponent, onMounted, onUnmounted, Ref, ref, useTemplateRef, watch } from \"vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"@/stores/class/config/commentsConfig\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n/* eslint-disable */\nconst CommentItem: any = defineAsyncComponent(() => import('./item/CommentItem.vue'));\n/* eslint-enable */\nconst ClassicPopover = defineAsyncComponent(\n () => import(\"../../misc/ClassicPopover.vue\"),\n);\n\n//Props \nconst props = defineProps({\n size: { default: 10, type: Number },\n podcast: { default: undefined, type: Object as () => Podcast },\n reload: { default: false, type: Boolean },\n answerToComment: { default: undefined, type: Number },\n isFlatList: { default: false, type: Boolean },\n stateFilter: { default: \"\", type: String },\n organisationId: { default: undefined, type: String },\n nbComments: { default: 0, type: Number },\n config: { default: undefined, type: Object as () => CommentsConfig },\n eventToHandle: { default: undefined, type: Object as () => CommentMessage },\n})\n\n//Emits\nconst emit = defineEmits([\"update:nbComments\", \"commentDeleted\"]);\n\n//Data \nconst loading = ref(false);\nconst error = ref(false);\nconst dfirst = ref(0);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst sortType = ref(\"DATE_DESC\");\nconst comments: Ref<Array<CommentPodcast>> = ref([]);\nconst scrollableSection: Ref<HTMLElement | undefined> = ref(undefined);\nconst scrollComponentRef = useTemplateRef('scrollComponent');\n\n//Composables\nconst { t } = useI18n();\n\n//Computed\nconst isNotAnAnswerList = computed(() => undefined === props.answerToComment);\nconst changed = computed(() => `${props.size}|${props.reload}|${dsize.value}|${props.stateFilter}|${props.podcast?.podcastId}|${props.organisationId}`);\nconst sortChoice = computed(() =>{\n return [\n { title: t(\"The most recent\"), value: \"DATE_DESC\" },\n { title: t(\"Top comments\"), value: \"LIKE_DESC\" },\n ];\n});\n\n//Watch\nwatch(totalCount, () => {emit(\"update:nbComments\", totalCount.value)});\nwatch(changed, () => {fetchContent(true);});\nwatch(()=>props.eventToHandle, async () => {\n if (!props.eventToHandle) {\n return;\n }\n if (props.answerToComment === props.eventToHandle.comment.answerTo) {\n switch (props.eventToHandle.type) {\n case \"CREATE\":\n createComment(props.eventToHandle.comment);\n break;\n case \"UPDATE\":\n updateComment(props.eventToHandle.comment);\n break;\n case \"DELETE\":\n deleteComment(props.eventToHandle.comment.commentId);\n break;\n default:\n break;\n }\n return;\n }\n if (undefined !== props.eventToHandle.comment.answerTo) {\n const comItem = scrollComponentRef?.value?.querySelector('#comItem' + props.eventToHandle.comment.answerTo) as InstanceType<typeof CommentItem>;\n comItem?.receiveEvent(props.eventToHandle);\n }\n}, {deep: true});\n\n\nonMounted(()=>{\n fetchContent(true);\n if (isNotAnAnswerList.value) {\n scrollableSection.value = scrollComponentRef?.value as HTMLElement;\n scrollableSection.value.addEventListener(\"scroll\", handleScroll);\n }\n})\n\nonUnmounted(()=>{\n if (isNotAnAnswerList.value) {\n scrollableSection.value?.removeEventListener(\"scroll\", handleScroll);\n }\n})\n\n\n//Methods\nfunction changeSort(sortTypeUpdate: string) {\n sortType.value = sortTypeUpdate;\n fetchContent(true);\n}\nfunction handleScroll() {\n if (\n scrollableSection.value &&\n totalCount.value > comments.value.length &&\n scrollableSection.value.scrollTop +\n scrollableSection.value.clientHeight >=\n scrollableSection.value.scrollHeight\n ) {\n fetchContent(false);\n }\n}\nfunction findCommentInCommentsLoaded(commentId: number) {\n return comments.value.findIndex(\n (element: CommentPodcast) => element.commentId === commentId,\n );\n}\nfunction createComment(comment: CommentPodcast) {\n comments.value.unshift(comment);\n totalCount.value += 1;\n}\nfunction updateComment(comment: CommentPodcast) {\n const commentIndex = findCommentInCommentsLoaded(comment.commentId);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1, comment);\n }\n}\nfunction deleteComment(commentIdToDelete: number) {\n const commentIndex = findCommentInCommentsLoaded(commentIdToDelete);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1);\n totalCount.value -= 1;\n emit(\"commentDeleted\", commentIdToDelete);\n }\n}\nasync function fetchContent(reset: boolean): Promise<void> {\n if (loading.value) {\n return;\n }\n loading.value = true;\n if (reset) {\n dfirst.value = 0;\n comments.value.length = 0;\n }\n const param = {\n first: dfirst.value,\n size: dsize.value,\n podcastId: props.podcast?.podcastId,\n sort: sortType.value,\n answerTo: props.answerToComment,\n hideAnswers: !props.isFlatList,\n state: props.stateFilter.length ? props.stateFilter : undefined,\n organisationId: props.organisationId,\n };\n try {\n const data = await classicApi.fetchData<\n ListClassicReturn<CommentPodcast>\n >({\n api: 2,\n path: \"comment/list\",\n parameters: param,\n });\n if (reset) {\n comments.value.length = 0;\n }\n comments.value.push(...data.result);\n totalCount.value = data.count;\n dfirst.value += dsize.value;\n loading.value = false;\n } catch (errorWs) {\n // Errors sometimes occur, and shouldn't trigger anything too drastic,\n // so we only log it, instead of using handle403\n console.error(errorWs);\n error.value = true;\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n .scrolling-comments {\n max-height: 715px;\n overflow-y: auto;\n }\n}\n</style>\n","<template>\n <div class=\"d-flex flex-column\">\n <div\n v-if=\"isNotAnAnswerList && 0 !== totalCount\"\n class=\"d-flex align-items-center mb-2\"\n >\n <div class=\"text-secondary me-3\">\n {{ t(\"Number comments\", { nb: totalCount }) }}\n </div>\n <button\n id=\"sort-by-comments\"\n class=\"btn btn-transparent d-flex align-items-center\"\n >\n <SortVariantIcon :size=\"30\" />\n <p class=\"ms-1\">{{ t(\"Sort by\") }}</p>\n </button>\n <ClassicPopover target=\"sort-by-comments\" :only-click=\"true\">\n <button\n v-for=\"sortOption in sortChoice\"\n :key=\"sortOption.value\"\n class=\"me-3 octopus-dropdown-item\"\n :disabled=\"sortOption.value === sortType\"\n @mousedown=\"changeSort(sortOption.value)\"\n @keydown.enter=\"changeSort(sortOption.value)\"\n >\n {{ sortOption.title }}\n </button>\n </ClassicPopover>\n </div>\n <div v-if=\"!loading && !error && 0 === totalCount\" class=\"text-center\">\n {{ t(\"No comments\") }}\n </div>\n <div\n ref=\"scrollComponent\"\n :class=\"isNotAnAnswerList ? 'scrolling-comments' : ''\"\n >\n <CommentItem\n v-for=\"(c, indexCom) in comments\"\n :id=\"'comItem' + c.commentId\"\n :key=\"c.commentId\"\n v-model:comment=\"comments[indexCom]\"\n :podcast=\"podcast\"\n :is-flat-list=\"isFlatList\"\n :config=\"config\"\n :organisation-id=\"organisationId\"\n @delete-comment=\"deleteComment(c.commentId)\"\n />\n <ClassicLoading\n :loading-text=\"loading && !error ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Comments loading error`) : undefined\"\n />\n <button\n v-if=\"!isNotAnAnswerList && dfirst + dsize < totalCount\"\n class=\"btn share-btn mx-2\"\n :title=\"t('See more')\"\n >\n <PlusIcon />\n </button>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport SortVariantIcon from \"vue-material-design-icons/SortVariant.vue\";\nimport PlusIcon from \"vue-material-design-icons/Plus.vue\";\nimport ClassicLoading from \"../../form/ClassicLoading.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport { computed, defineAsyncComponent, onMounted, onUnmounted, Ref, ref, useTemplateRef, watch } from \"vue\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport {\n CommentMessage,\n CommentsConfig,\n} from \"@/stores/class/config/commentsConfig\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n/* eslint-disable */\nconst CommentItem: any = defineAsyncComponent(() => import('./item/CommentItem.vue'));\n/* eslint-enable */\nconst ClassicPopover = defineAsyncComponent(\n () => import(\"../../misc/ClassicPopover.vue\"),\n);\n\n//Props \nconst props = defineProps({\n size: { default: 10, type: Number },\n podcast: { default: undefined, type: Object as () => Podcast },\n reload: { default: false, type: Boolean },\n answerToComment: { default: undefined, type: Number },\n isFlatList: { default: false, type: Boolean },\n stateFilter: { default: \"\", type: String },\n organisationId: { default: undefined, type: String },\n nbComments: { default: 0, type: Number },\n config: { default: undefined, type: Object as () => CommentsConfig },\n eventToHandle: { default: undefined, type: Object as () => CommentMessage },\n})\n\n//Emits\nconst emit = defineEmits([\"update:nbComments\", \"commentDeleted\"]);\n\n//Data \nconst loading = ref(false);\nconst error = ref(false);\nconst dfirst = ref(0);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst sortType = ref(\"DATE_DESC\");\nconst comments: Ref<Array<CommentPodcast>> = ref([]);\nconst scrollableSection: Ref<HTMLElement | undefined> = ref(undefined);\nconst scrollComponentRef = useTemplateRef('scrollComponent');\n\n//Composables\nconst { t } = useI18n();\n\n//Computed\nconst isNotAnAnswerList = computed(() => undefined === props.answerToComment);\nconst changed = computed(() => `${props.size}|${props.reload}|${dsize.value}|${props.stateFilter}|${props.podcast?.podcastId}|${props.organisationId}`);\nconst sortChoice = computed(() =>{\n return [\n { title: t(\"The most recent\"), value: \"DATE_DESC\" },\n { title: t(\"Top comments\"), value: \"LIKE_DESC\" },\n ];\n});\n\n//Watch\nwatch(totalCount, () => {emit(\"update:nbComments\", totalCount.value)});\nwatch(changed, () => {fetchContent(true);});\nwatch(()=>props.eventToHandle, async () => {\n if (!props.eventToHandle) {\n return;\n }\n if (props.answerToComment === props.eventToHandle.comment.answerTo) {\n switch (props.eventToHandle.type) {\n case \"CREATE\":\n createComment(props.eventToHandle.comment);\n break;\n case \"UPDATE\":\n updateComment(props.eventToHandle.comment);\n break;\n case \"DELETE\":\n deleteComment(props.eventToHandle.comment.commentId);\n break;\n default:\n break;\n }\n return;\n }\n if (undefined !== props.eventToHandle.comment.answerTo) {\n const comItem = scrollComponentRef?.value?.querySelector('#comItem' + props.eventToHandle.comment.answerTo) as InstanceType<typeof CommentItem>;\n comItem?.receiveEvent(props.eventToHandle);\n }\n}, {deep: true});\n\n\nonMounted(()=>{\n fetchContent(true);\n if (isNotAnAnswerList.value) {\n scrollableSection.value = scrollComponentRef?.value as HTMLElement;\n scrollableSection.value.addEventListener(\"scroll\", handleScroll);\n }\n})\n\nonUnmounted(()=>{\n if (isNotAnAnswerList.value) {\n scrollableSection.value?.removeEventListener(\"scroll\", handleScroll);\n }\n})\n\n\n//Methods\nfunction changeSort(sortTypeUpdate: string) {\n sortType.value = sortTypeUpdate;\n fetchContent(true);\n}\nfunction handleScroll() {\n if (\n scrollableSection.value &&\n totalCount.value > comments.value.length &&\n scrollableSection.value.scrollTop +\n scrollableSection.value.clientHeight >=\n scrollableSection.value.scrollHeight\n ) {\n fetchContent(false);\n }\n}\nfunction findCommentInCommentsLoaded(commentId: number) {\n return comments.value.findIndex(\n (element: CommentPodcast) => element.commentId === commentId,\n );\n}\nfunction createComment(comment: CommentPodcast) {\n comments.value.unshift(comment);\n totalCount.value += 1;\n}\nfunction updateComment(comment: CommentPodcast) {\n const commentIndex = findCommentInCommentsLoaded(comment.commentId);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1, comment);\n }\n}\nfunction deleteComment(commentIdToDelete: number) {\n const commentIndex = findCommentInCommentsLoaded(commentIdToDelete);\n if (-1 !== commentIndex) {\n comments.value.splice(commentIndex, 1);\n totalCount.value -= 1;\n emit(\"commentDeleted\", commentIdToDelete);\n }\n}\nasync function fetchContent(reset: boolean): Promise<void> {\n if (loading.value) {\n return;\n }\n loading.value = true;\n if (reset) {\n dfirst.value = 0;\n comments.value.length = 0;\n }\n const param = {\n first: dfirst.value,\n size: dsize.value,\n podcastId: props.podcast?.podcastId,\n sort: sortType.value,\n answerTo: props.answerToComment,\n hideAnswers: !props.isFlatList,\n state: props.stateFilter.length ? props.stateFilter : undefined,\n organisationId: props.organisationId,\n };\n try {\n const data = await classicApi.fetchData<\n ListClassicReturn<CommentPodcast>\n >({\n api: 2,\n path: \"comment/list\",\n parameters: param,\n });\n if (reset) {\n comments.value.length = 0;\n }\n comments.value.push(...data.result);\n totalCount.value = data.count;\n dfirst.value += dsize.value;\n loading.value = false;\n } catch (errorWs) {\n // Errors sometimes occur, and shouldn't trigger anything too drastic,\n // so we only log it, instead of using handle403\n console.error(errorWs);\n error.value = true;\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.octopus-app {\n .scrolling-comments {\n max-height: 715px;\n overflow-y: auto;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./ClassicLoading-CXfMjpyl.mjs";
2
- import { t } from "./classicApi-pmODlqv5.mjs";
2
+ import { t } from "./classicApi-CGipMqf7.mjs";
3
3
  import { t as n } from "./_plugin-vue_export-helper-B3ysoDQm.mjs";
4
4
  import { Fragment as r, computed as i, createBlock as ee, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createVNode as c, defineAsyncComponent as l, defineComponent as u, normalizeClass as d, onMounted as f, onUnmounted as p, openBlock as m, ref as h, renderList as g, toDisplayString as _, unref as v, useTemplateRef as te, watch as y, withCtx as b, withKeys as x } from "vue";
5
5
  import S from "vue-material-design-icons/Plus.vue";
@@ -65,7 +65,7 @@ var T = { class: "d-flex flex-column" }, E = {
65
65
  },
66
66
  emits: ["update:nbComments", "commentDeleted"],
67
67
  setup(n, { emit: u }) {
68
- let N = l(() => import("./CommentItem-CqWZPmbj.mjs").then((e) => e.t)), ne = l(() => import("./ClassicPopover-DWR50Nxi.mjs").then((e) => e.n)), P = n, F = u, I = h(!1), L = h(!1), R = h(0), z = h(P.size), B = h(0), V = h("DATE_DESC"), H = h([]), U = h(void 0), W = te("scrollComponent"), { t: G } = C(), K = i(() => P.answerToComment === void 0), q = i(() => `${P.size}|${P.reload}|${z.value}|${P.stateFilter}|${P.podcast?.podcastId}|${P.organisationId}`), J = i(() => [{
68
+ let N = l(() => import("./CommentItem-BYU67TIu.mjs").then((e) => e.t)), ne = l(() => import("./ClassicPopover-BUb-1WMB.mjs").then((e) => e.n)), P = n, F = u, I = h(!1), L = h(!1), R = h(0), z = h(P.size), B = h(0), V = h("DATE_DESC"), H = h([]), U = h(void 0), W = te("scrollComponent"), { t: G } = C(), K = i(() => P.answerToComment === void 0), q = i(() => `${P.size}|${P.reload}|${z.value}|${P.stateFilter}|${P.podcast?.podcastId}|${P.organisationId}`), J = i(() => [{
69
69
  title: G("The most recent"),
70
70
  value: "DATE_DESC"
71
71
  }, {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommentMoreActions-BNajG7wk.mjs","names":["classicApi","_resolveComponent","_openBlock","_createElementBlock","_createBlock","_createCommentVNode","_createElementVNode","_createVNode","_withCtx","_Fragment","_renderList","_withKeys","_toDisplayString","_sfc_main"],"sources":["../src/components/display/comments/item/CommentMoreActions.vue","../src/components/display/comments/item/CommentMoreActions.vue"],"sourcesContent":["<template>\n <div v-if=\"isAtLeastOneMoreAction\">\n <ReportAbuseModal\n v-if=\"isReportAbuse\"\n v-model:comment=\"commentForVmodel\"\n @close=\"isReportAbuse = false\"\n />\n <EditCommentModal\n v-if=\"isEdit\"\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n @close=\"isEdit = false\"\n />\n <MessageModal\n v-if=\"confirmModal\"\n :validatetext=\"validateText\"\n :canceltext=\"canceltext\"\n :closable=\"false\"\n :title=\"modalTitle\"\n :message=\"modalMessage\"\n :focus=\"true\"\n @cancel=\"confirmModal = false\"\n @validate=\"actionComment\"\n @close=\"confirmModal = false\"\n />\n <button\n :id=\"'comment-dropdown' + comment.commentId\"\n class=\"btn share-btn\"\n :title=\"t('See more')\"\n :data-selenium=\"\n 'comment-dropdown-' + seleniumFormat(comment.poster.userName)\n \"\n >\n <DotsVerticalIcon />\n </button>\n <ClassicPopover\n :target=\"'comment-dropdown' + comment.commentId\"\n :only-click=\"true\"\n :left-pos=\"true\"\n >\n <template v-for=\"action in moreActions\" :key=\"action\">\n <button\n v-if=\"action.condition\"\n class=\"octopus-dropdown-item c-hand\"\n @mousedown=\"action.actionClick\"\n @keydown.enter=\"action.actionClick\"\n >\n {{ action.title }}\n </button>\n </template>\n </ClassicPopover>\n <!--\n CommentMoreActionsAdmin is not defined in the SDK: it is resolved at\n runtime from the consuming app's globally registered components\n (app.component()), and renders nothing if the app hasn't registered one\n under that name.\n -->\n <CommentMoreActionsAdmin\n v-if=\"editRight\"\n v-model:comment=\"commentForVmodel\"\n v-model:actions-admin=\"actionsAdmin\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport DotsVerticalIcon from \"vue-material-design-icons/DotsVertical.vue\";\nimport {useSelenium} from \"../../../composable/useSelenium\";\nimport classicApi from \"../../../../api/classicApi\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport { defineAsyncComponent, ref, Ref, computed } from \"vue\";\nimport { CommentsConfig } from \"@/stores/class/config/commentsConfig\";\nimport { useI18n } from \"vue-i18n\";\nconst ClassicPopover = defineAsyncComponent(\n () => import(\"../../../misc/ClassicPopover.vue\"),\n);\nconst ReportAbuseModal = defineAsyncComponent(\n () => import(\"../modal/ReportAbuseModal.vue\"),\n);\nconst EditCommentModal = defineAsyncComponent(\n () => import(\"../modal/EditCommentModal.vue\"),\n);\nconst MessageModal = defineAsyncComponent(\n () => import(\"../../../misc/modal/MessageModal.vue\"),\n);\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n podcast: { default: undefined, type: Object as () => Podcast },\n config: { default: undefined, type: Object as () => CommentsConfig },\n editRight: { default: false, type: Boolean },\n})\n\n//Emits\nconst emit = defineEmits([\"update:comment\", \"deleteComment\"]);\n\n//Data \nconst isEdit = ref(false);\nconst isReportAbuse = ref(false);\nconst actionName: Ref<string | undefined> = ref(undefined);\nconst actionsAdmin: Ref<string | undefined> = ref(undefined);\nconst confirmModal = ref(false);\nconst actionInProgress = ref(false);\nconst isError = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst { seleniumFormat } = useSelenium();\nconst authStore = useAuthStore();\nconst commentStore = useCommentStore();\n\n//Computed\nconst commentForVmodel = computed({\n get(): CommentPodcast {\n return props.comment;\n },\n set(value: CommentPodcast) {\n emit(\"update:comment\", value);\n },\n});\nconst isMyComment = computed(() => {\n const uuid = authStore.authProfile?.userId ?? commentStore.commentUser?.uuidHash;\n return uuid === props.comment?.poster.uuid;\n});\nconst isAtLeastOneMoreAction = computed(() => {\n return moreActions.value.some((el) => {\n return el.condition;\n });\n});\nconst moreActions = computed(() => {\n return [\n {\n title: t(\"Report abuse\"),\n actionClick: () => {\n isReportAbuse.value = true;\n },\n condition:\n commentStore.getCanReportAbuse(\n props.config,\n undefined !== authStore.authOrgaId,\n ) && !isMyComment.value,\n },\n {\n title: t(\"Managing reported abuses\"),\n actionClick: () => {\n actionsAdmin.value = \"abuse\";\n },\n condition: props.editRight && props.comment.abuse,\n },\n {\n title: t(\"Edit comment\"),\n actionClick: () => {\n isEdit.value = true;\n },\n condition: props.editRight || isMyComment.value,\n },\n {\n title: t(\"Comment information\"),\n actionClick: () => {\n actionsAdmin.value = \"info\";\n },\n condition: props.editRight && !props.podcast,\n },\n {\n title: t(\"Validate\"),\n actionClick: () => {\n actionName.value = \"validate\";\n isError.value = false;\n confirmModal.value = true;\n },\n condition:\n props.editRight &&\n (\"PENDING\" === props.comment.state ||\n \"NOT_VALID\" === props.comment.state),\n },\n {\n title: t(\"Invalidate\"),\n actionClick: () => {\n actionName.value = \"invalidate\";\n isError.value = false;\n confirmModal.value = true;\n },\n condition:\n props.editRight &&\n (\"PENDING\" === props.comment.state ||\n \"VALIDATED\" === props.comment.state),\n },\n {\n title: t(\"Delete comment\"),\n actionClick: () => {\n actionName.value = \"delete\";\n isError.value = false;\n confirmModal.value = true;\n },\n condition: props.editRight || isMyComment.value,\n },\n ];\n});\nconst validateText = computed(() => {\n if (isError.value) {\n return t(\"Close\");\n }\n return actionInProgress.value ? undefined : t(\"Yes\");\n});\nconst canceltext = computed(() => isError.value ? undefined : t(\"No\"));\nconst modalMessage = computed(() => {\n if (actionInProgress.value) {\n return t(\"Saving\");\n }\n if (isError.value) {\n return t(\"An error occurred\");\n }\n const name = { name: props.comment.poster.userName };\n switch (actionName.value) {\n case \"delete\":\n return t(\"Confirm comment deletion text\", name);\n case \"validate\":\n return t(\"Confirm comment valid text\", name);\n case \"invalidate\":\n return t(\"Confirm comment invalid text\", name);\n default:\n return \"\";\n }\n});\nconst modalTitle = computed(() => {\n if (\"delete\" === actionName.value) {\n return t(\"Delete comment\");\n }\n return t(\"Update comment\");\n}); \n \n\n//Methods\nasync function actionComment() {\n if (!props.comment) {\n return;\n }\n actionInProgress.value = true;\n isError.value = false;\n try {\n if (\"delete\" === actionName.value) {\n await classicApi.deleteData({\n api: 2,\n path: \"comment/\" + props.comment.commentId,\n parameters: props.editRight\n ? undefined\n : { uuid: commentStore.commentUser?.uuid },\n isNotAuth: !props.editRight,\n });\n emit(\"deleteComment\");\n } else {\n const commentUpdated = await classicApi.putData({\n api: 2,\n path: \"comment/\",\n dataToSend: {\n commentId: props.comment.commentId,\n content: props.comment.content,\n name: props.comment.poster.userName,\n state: \"validate\" === actionName.value ? \"VALIDATED\" : \"NOT_VALID\",\n },\n });\n emit(\"update:comment\", commentUpdated);\n }\n confirmModal.value = false;\n } catch {\n isError.value = true;\n }\n actionInProgress.value = false;\n}\n</script>\n","<template>\n <div v-if=\"isAtLeastOneMoreAction\">\n <ReportAbuseModal\n v-if=\"isReportAbuse\"\n v-model:comment=\"commentForVmodel\"\n @close=\"isReportAbuse = false\"\n />\n <EditCommentModal\n v-if=\"isEdit\"\n v-model:comment=\"commentForVmodel\"\n :edit-right=\"editRight\"\n @close=\"isEdit = false\"\n />\n <MessageModal\n v-if=\"confirmModal\"\n :validatetext=\"validateText\"\n :canceltext=\"canceltext\"\n :closable=\"false\"\n :title=\"modalTitle\"\n :message=\"modalMessage\"\n :focus=\"true\"\n @cancel=\"confirmModal = false\"\n @validate=\"actionComment\"\n @close=\"confirmModal = false\"\n />\n <button\n :id=\"'comment-dropdown' + comment.commentId\"\n class=\"btn share-btn\"\n :title=\"t('See more')\"\n :data-selenium=\"\n 'comment-dropdown-' + seleniumFormat(comment.poster.userName)\n \"\n >\n <DotsVerticalIcon />\n </button>\n <ClassicPopover\n :target=\"'comment-dropdown' + comment.commentId\"\n :only-click=\"true\"\n :left-pos=\"true\"\n >\n <template v-for=\"action in moreActions\" :key=\"action\">\n <button\n v-if=\"action.condition\"\n class=\"octopus-dropdown-item c-hand\"\n @mousedown=\"action.actionClick\"\n @keydown.enter=\"action.actionClick\"\n >\n {{ action.title }}\n </button>\n </template>\n </ClassicPopover>\n <!--\n CommentMoreActionsAdmin is not defined in the SDK: it is resolved at\n runtime from the consuming app's globally registered components\n (app.component()), and renders nothing if the app hasn't registered one\n under that name.\n -->\n <CommentMoreActionsAdmin\n v-if=\"editRight\"\n v-model:comment=\"commentForVmodel\"\n v-model:actions-admin=\"actionsAdmin\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport DotsVerticalIcon from \"vue-material-design-icons/DotsVertical.vue\";\nimport {useSelenium} from \"../../../composable/useSelenium\";\nimport classicApi from \"../../../../api/classicApi\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { CommentPodcast } from \"@/stores/class/general/comment\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { useCommentStore } from \"../../../../stores/CommentStore\";\nimport { defineAsyncComponent, ref, Ref, computed } from \"vue\";\nimport { CommentsConfig } from \"@/stores/class/config/commentsConfig\";\nimport { useI18n } from \"vue-i18n\";\nconst ClassicPopover = defineAsyncComponent(\n () => import(\"../../../misc/ClassicPopover.vue\"),\n);\nconst ReportAbuseModal = defineAsyncComponent(\n () => import(\"../modal/ReportAbuseModal.vue\"),\n);\nconst EditCommentModal = defineAsyncComponent(\n () => import(\"../modal/EditCommentModal.vue\"),\n);\nconst MessageModal = defineAsyncComponent(\n () => import(\"../../../misc/modal/MessageModal.vue\"),\n);\n\n//Props \nconst props = defineProps({\n comment: { default: () => ({}), type: Object as () => CommentPodcast },\n podcast: { default: undefined, type: Object as () => Podcast },\n config: { default: undefined, type: Object as () => CommentsConfig },\n editRight: { default: false, type: Boolean },\n})\n\n//Emits\nconst emit = defineEmits([\"update:comment\", \"deleteComment\"]);\n\n//Data \nconst isEdit = ref(false);\nconst isReportAbuse = ref(false);\nconst actionName: Ref<string | undefined> = ref(undefined);\nconst actionsAdmin: Ref<string | undefined> = ref(undefined);\nconst confirmModal = ref(false);\nconst actionInProgress = ref(false);\nconst isError = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst { seleniumFormat } = useSelenium();\nconst authStore = useAuthStore();\nconst commentStore = useCommentStore();\n\n//Computed\nconst commentForVmodel = computed({\n get(): CommentPodcast {\n return props.comment;\n },\n set(value: CommentPodcast) {\n emit(\"update:comment\", value);\n },\n});\nconst isMyComment = computed(() => {\n const uuid = authStore.authProfile?.userId ?? commentStore.commentUser?.uuidHash;\n return uuid === props.comment?.poster.uuid;\n});\nconst isAtLeastOneMoreAction = computed(() => {\n return moreActions.value.some((el) => {\n return el.condition;\n });\n});\nconst moreActions = computed(() => {\n return [\n {\n title: t(\"Report abuse\"),\n actionClick: () => {\n isReportAbuse.value = true;\n },\n condition:\n commentStore.getCanReportAbuse(\n props.config,\n undefined !== authStore.authOrgaId,\n ) && !isMyComment.value,\n },\n {\n title: t(\"Managing reported abuses\"),\n actionClick: () => {\n actionsAdmin.value = \"abuse\";\n },\n condition: props.editRight && props.comment.abuse,\n },\n {\n title: t(\"Edit comment\"),\n actionClick: () => {\n isEdit.value = true;\n },\n condition: props.editRight || isMyComment.value,\n },\n {\n title: t(\"Comment information\"),\n actionClick: () => {\n actionsAdmin.value = \"info\";\n },\n condition: props.editRight && !props.podcast,\n },\n {\n title: t(\"Validate\"),\n actionClick: () => {\n actionName.value = \"validate\";\n isError.value = false;\n confirmModal.value = true;\n },\n condition:\n props.editRight &&\n (\"PENDING\" === props.comment.state ||\n \"NOT_VALID\" === props.comment.state),\n },\n {\n title: t(\"Invalidate\"),\n actionClick: () => {\n actionName.value = \"invalidate\";\n isError.value = false;\n confirmModal.value = true;\n },\n condition:\n props.editRight &&\n (\"PENDING\" === props.comment.state ||\n \"VALIDATED\" === props.comment.state),\n },\n {\n title: t(\"Delete comment\"),\n actionClick: () => {\n actionName.value = \"delete\";\n isError.value = false;\n confirmModal.value = true;\n },\n condition: props.editRight || isMyComment.value,\n },\n ];\n});\nconst validateText = computed(() => {\n if (isError.value) {\n return t(\"Close\");\n }\n return actionInProgress.value ? undefined : t(\"Yes\");\n});\nconst canceltext = computed(() => isError.value ? undefined : t(\"No\"));\nconst modalMessage = computed(() => {\n if (actionInProgress.value) {\n return t(\"Saving\");\n }\n if (isError.value) {\n return t(\"An error occurred\");\n }\n const name = { name: props.comment.poster.userName };\n switch (actionName.value) {\n case \"delete\":\n return t(\"Confirm comment deletion text\", name);\n case \"validate\":\n return t(\"Confirm comment valid text\", name);\n case \"invalidate\":\n return t(\"Confirm comment invalid text\", name);\n default:\n return \"\";\n }\n});\nconst modalTitle = computed(() => {\n if (\"delete\" === actionName.value) {\n return t(\"Delete comment\");\n }\n return t(\"Update comment\");\n}); \n \n\n//Methods\nasync function actionComment() {\n if (!props.comment) {\n return;\n }\n actionInProgress.value = true;\n isError.value = false;\n try {\n if (\"delete\" === actionName.value) {\n await classicApi.deleteData({\n api: 2,\n path: \"comment/\" + props.comment.commentId,\n parameters: props.editRight\n ? undefined\n : { uuid: commentStore.commentUser?.uuid },\n isNotAuth: !props.editRight,\n });\n emit(\"deleteComment\");\n } else {\n const commentUpdated = await classicApi.putData({\n api: 2,\n path: \"comment/\",\n dataToSend: {\n commentId: props.comment.commentId,\n content: props.comment.content,\n name: props.comment.poster.userName,\n state: \"validate\" === actionName.value ? \"VALIDATED\" : \"NOT_VALID\",\n },\n });\n emit(\"update:comment\", commentUpdated);\n }\n confirmModal.value = false;\n } catch {\n isError.value = true;\n }\n actionInProgress.value = false;\n}\n</script>\n"],"mappings":"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"}