@saooti/octopus-sdk 42.3.0 → 42.3.1-beta1
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.
- package/dist/AdvancedSearch-C6BJzvGT.mjs.map +1 -0
- package/dist/AdvancedSearch-ChnJq71j.mjs.map +1 -0
- package/dist/{AdvancedSearch-DEh3iiuK.mjs → AdvancedSearch-D2jzRni-.mjs} +8 -8
- package/dist/AdvancedSearch-DN3WFduh.mjs.map +1 -0
- package/dist/AdvancedSearch-cLjakm-6.mjs.map +1 -0
- package/dist/CategoryFilter-B0S_nCvS.mjs.map +1 -0
- package/dist/CategoryFilter-BVrLO_pV.mjs.map +1 -0
- package/dist/{CategoryFilter-Djmal5bY.mjs → CategoryFilter-CLW42mHe.mjs} +3 -3
- package/dist/CategoryList-B_9GG6Z9.mjs.map +1 -0
- package/dist/{CategoryList-Dksp79Lm.mjs → CategoryList-C1LlWALb.mjs} +1 -1
- package/dist/CategoryList-DxR0fpKd.mjs.map +1 -0
- package/dist/CategoryPage-C7aKDtgs.mjs.map +1 -0
- package/dist/{CategoryPage-DC8fMny_.mjs → CategoryPage-DGPJ1VPS.mjs} +2 -2
- package/dist/CategoryPage-DlnAp05t.mjs.map +1 -0
- package/dist/ChapteringModal-BplEGZj2.mjs.map +1 -0
- package/dist/ChapteringModal-C9yuW_IU.mjs.map +1 -0
- package/dist/{ChapteringModal-Be9FF1yz.mjs → ChapteringModal-DiiVSG7s.mjs} +1 -1
- package/dist/CheckIdentityModal-BtGdsv2v.mjs.map +1 -0
- package/dist/CheckIdentityModal-Cry9ra4J.mjs.map +1 -0
- package/dist/{CheckIdentityModal-nMszYOsW.mjs → CheckIdentityModal-p2kvRJbK.mjs} +2 -2
- package/dist/ClassicDatePicker--q1yYb-S.mjs.map +1 -0
- package/dist/ClassicDatePicker-B8bI9QfF.mjs.map +1 -0
- package/dist/ClassicDatePicker-CopJVkF0.mjs.map +1 -0
- package/dist/{ClassicDatePicker-B7UA9CqR.mjs → ClassicDatePicker-CpkjKzJ5.mjs} +39 -38
- package/dist/ClassicDatePicker-NxGNQxHE.mjs.map +1 -0
- package/dist/{ClassicNotifications-DEpVRRHg.mjs → ClassicNotifications-8CVfGSqL.mjs} +1 -1
- package/dist/ClassicNotifications-BFQ-R6kO.mjs.map +1 -0
- package/dist/ClassicNotifications-DR0PM1Xp.mjs.map +1 -0
- package/dist/ClipboardModal-B_SZ6jDk.mjs.map +1 -0
- package/dist/{ClipboardModal-BUKwZYOf.mjs → ClipboardModal-ByVXPcKD.mjs} +1 -1
- package/dist/ClipboardModal-DjrZQRtY.mjs.map +1 -0
- package/dist/{CommentInput-US8ZtNj1.mjs → CommentInput-ByigNGTw.mjs} +4 -4
- package/dist/CommentInput-DPMj47uE.mjs.map +1 -0
- package/dist/CommentInput-DbhOyi7c.mjs.map +1 -0
- package/dist/CommentItem-AItzrTBi.mjs.map +1 -0
- package/dist/{CommentItem-CqWZPmbj.mjs → CommentItem-BbUPCvEC.mjs} +3 -3
- package/dist/CommentItem-CvNbH7Hf.mjs.map +1 -0
- package/dist/CommentList-BTyyCcX4.mjs.map +1 -0
- package/dist/{CommentList-CSYpqgNM.mjs → CommentList-BmyJ4sBi.mjs} +2 -2
- package/dist/CommentList-DP6wk4PD.mjs.map +1 -0
- package/dist/{CommentMoreActions-T5RN6BGq.mjs → CommentMoreActions-Bnx_Gjly.mjs} +3 -3
- package/dist/CommentMoreActions-C1l4Y_HY.mjs.map +1 -0
- package/dist/CommentMoreActions-DPbJnEEV.mjs.map +1 -0
- package/dist/{CommentName-DslRo9jg.mjs → CommentName-C5cbnPOy.mjs} +2 -2
- package/dist/CommentName-D5HN8bGE.mjs.map +1 -0
- package/dist/CommentName-DMom_kwo.mjs.map +1 -0
- package/dist/{CommentParentInfo-DMX3nkCb.mjs → CommentParentInfo-BO2YNPPR.mjs} +2 -2
- package/dist/CommentParentInfo-DWVF5Ewh.mjs.map +1 -0
- package/dist/CommentParentInfo-DqHfDpKs.mjs.map +1 -0
- package/dist/{CommentPlayer-D3JEVPKX.mjs → CommentPlayer-B4MXG-gG.mjs} +2 -2
- package/dist/CommentPlayer-B67saxPf.mjs.map +1 -0
- package/dist/CommentPlayer-BUtEvkoV.mjs.map +1 -0
- package/dist/CommentSection-BIZMRePu.mjs.map +1 -0
- package/dist/{CommentSection-Brn0VQcc.mjs → CommentSection-BpbKr-oT.mjs} +3 -3
- package/dist/CommentSection-MDKioQWf.mjs.map +1 -0
- package/dist/CommentStore-BBm8MjxW.mjs.map +1 -0
- package/dist/{CommentStore-hPTYaDGr.mjs → CommentStore-CysGkBHp.mjs} +8 -8
- package/dist/CommentStore-F5MVSrDw.mjs.map +1 -0
- package/dist/ContractPreviewModal-CFSkXgB4.mjs.map +1 -0
- package/dist/ContractPreviewModal-CKL6Rb_V.mjs.map +1 -0
- package/dist/{ContractPreviewModal-48Je4Wuy.mjs → ContractPreviewModal-Dd-1KasR.mjs} +2 -2
- package/dist/DateFilter-CGTz76bp.mjs.map +1 -0
- package/dist/DateFilter-CfeYepTO.mjs.map +1 -0
- package/dist/DateFilter-DFw66D2V.mjs.map +1 -0
- package/dist/DateFilter-QGaXHkcu.mjs.map +1 -0
- package/dist/{DateFilter-DztHuPm8.mjs → DateFilter-iv7CkVTP.mjs} +1 -1
- package/dist/{DownloadPodcastButton-BYWuLoNg.mjs → DownloadPodcastButton-6HtR84aE.mjs} +2 -2
- package/dist/DownloadPodcastButton-D2qeKDPT.mjs.map +1 -0
- package/dist/DownloadPodcastButton-Tr_Y4qMu.mjs.map +1 -0
- package/dist/{EditCommentModal-DacFxzLx.mjs → EditCommentModal-BDzkED7G.mjs} +1 -1
- package/dist/EditCommentModal-BZitN0Ir.mjs.map +1 -0
- package/dist/EditCommentModal-CcmCx_My.mjs.map +1 -0
- package/dist/EmissionGroupChooser-BJCKekKM.mjs.map +1 -0
- package/dist/EmissionGroupChooser-ByqGmsGw.mjs.map +1 -0
- package/dist/{EmissionGroupChooser-KmzQjp7d.mjs → EmissionGroupChooser-DWzoWRhp.mjs} +1 -1
- package/dist/EmissionInlineList-CdHQBjfR.mjs.map +1 -0
- package/dist/EmissionInlineList-CnA0d_k2.mjs.map +1 -0
- package/dist/{EmissionInlineList-BoEIAbLu.mjs → EmissionInlineList-ePdUy8g1.mjs} +5 -5
- package/dist/EmissionItem-B39oFnXF.mjs.map +1 -0
- package/dist/EmissionItem-CjAUdLb7.mjs.map +1 -0
- package/dist/{EmissionItem-BeQWw-UT.mjs → EmissionItem-CoMTOm31.mjs} +4 -4
- package/dist/EmissionList-B0UntYdC.mjs.map +1 -0
- package/dist/EmissionList-C7lQBdlW.mjs.map +1 -0
- package/dist/{EmissionList-DB7O1nj5.mjs → EmissionList-QkBmjbaP.mjs} +4 -4
- package/dist/EmissionPage-BF6s2ySo.mjs.map +1 -0
- package/dist/EmissionPage-B_-nDP5x.mjs.map +1 -0
- package/dist/{EmissionPage-CNYJ1Puo.mjs → EmissionPage-BoQglhf0.mjs} +9 -9
- package/dist/EmissionPage-C-ESprrZ.mjs.map +1 -0
- package/dist/EmissionPage-CPXcNHGS.mjs.map +1 -0
- package/dist/EmissionPage-mXbUqOh9.mjs.map +1 -0
- package/dist/{EmissionPlayerItem-S_yqupad.mjs → EmissionPlayerItem-B6d5hOlx.mjs} +3 -3
- package/dist/EmissionPlayerItem-C27zJBhY.mjs.map +1 -0
- package/dist/EmissionPlayerItem-C3fkgEaL.mjs.map +1 -0
- package/dist/EmissionPresentationItem-BNnDSWGQ.mjs.map +1 -0
- package/dist/EmissionPresentationItem-BeETY65I.mjs.map +1 -0
- package/dist/{EmissionPresentationItem-kJgKN7Ju.mjs → EmissionPresentationItem-DYDwfqwp.mjs} +1 -1
- package/dist/EmissionPresentationList-BD7rIUok.mjs.map +1 -0
- package/dist/EmissionPresentationList-CGMyY_iu.mjs.map +1 -0
- package/dist/{EmissionPresentationList-Bg9X3CJP.mjs → EmissionPresentationList-Cxi7QnIs.mjs} +3 -3
- package/dist/EmissionsPage-BIspB5uq.mjs.map +1 -0
- package/dist/EmissionsPage-Cgzvn2h8.mjs.map +1 -0
- package/dist/EmissionsPage-D09zTpGb.mjs.map +1 -0
- package/dist/{EmissionsPage-BLpGH_PR.mjs → EmissionsPage-D4KDPr8j.mjs} +5 -5
- package/dist/EmissionsPage-wjKBLFM6.mjs.map +1 -0
- package/dist/Error403Page-B6Q7ijY3.mjs.map +1 -0
- package/dist/Error403Page-DF08mgCL.mjs.map +1 -0
- package/dist/{Error403Page-BB69doEn.mjs → Error403Page-DVmC5AOd.mjs} +2 -2
- package/dist/FooterGarSection-BWahCyz0.mjs.map +1 -0
- package/dist/{FooterGarSection-B9nsnpfF.mjs → FooterGarSection-BqPggI3o.mjs} +3 -3
- package/dist/FooterGarSection-CN8ZfO7e.mjs.map +1 -0
- package/dist/FooterSection-BOjr1LRb.mjs.map +1 -0
- package/dist/{FooterSection-DdGtlbk-.mjs → FooterSection-C5FEIJlU.mjs} +11 -11
- package/dist/FooterSection-nVRzKSYN.mjs.map +1 -0
- package/dist/HomeDropdown-3fl_xltN.mjs.map +1 -0
- package/dist/{HomeDropdown-BqwwLStt.mjs → HomeDropdown-B9qhkjJy.mjs} +2 -2
- package/dist/HomeDropdown-DGNkJhG2.mjs.map +1 -0
- package/dist/{HomePage-JOUAKKfP.mjs → HomePage-CrAiSIgn.mjs} +3 -3
- package/dist/HomePage-D0Pbu_h1.mjs.map +1 -0
- package/dist/HomePage-ry0NfX1M.mjs.map +1 -0
- package/dist/InlineRubriqueList-BdpS1pVc.mjs.map +1 -0
- package/dist/InlineRubriqueList-BlcjQ4wR.mjs.map +1 -0
- package/dist/{InlineRubriqueList-BzcHKvM4.mjs → InlineRubriqueList-ezgexR-O.mjs} +1 -1
- package/dist/LikeSection-Cqj4y7qZ.mjs.map +1 -0
- package/dist/LikeSection-HJla-zgI.mjs.map +1 -0
- package/dist/{LikeSection-MmbHMunb.mjs → LikeSection-wNtNtvR6.mjs} +3 -3
- package/dist/{ListPaginate-5uRK_QKJ.mjs → ListPaginate-BPdnBcpe.mjs} +2 -2
- package/dist/ListPaginate-DYzRnp-2.mjs.map +1 -0
- package/dist/ListPaginate-DyR7HLIc.mjs.map +1 -0
- package/dist/LiveHorizontalList-CaujYMT3.mjs.map +1 -0
- package/dist/{LiveHorizontalList-CpoIRd4C.mjs → LiveHorizontalList-Db4bP06I.mjs} +3 -3
- package/dist/LiveHorizontalList-DhsOZPT3.mjs.map +1 -0
- package/dist/{LiveList-DYFBrNgg.mjs → LiveList-D2DEpx3e.mjs} +5 -5
- package/dist/LiveList-DOi4GV1x.mjs.map +1 -0
- package/dist/LiveList-Dh1mJVs7.mjs.map +1 -0
- package/dist/LivesPage-BvDLscOE.mjs.map +1 -0
- package/dist/{LivesPage-FSkmBdVw.mjs → LivesPage-Dqton3gU.mjs} +2 -2
- package/dist/LivesPage-yy_5pI8R.mjs.map +1 -0
- package/dist/MapPage-3n-rigBK.mjs.map +1 -0
- package/dist/MapPage-5GwE8Z4E.mjs.map +1 -0
- package/dist/{MapPage-DpBt2gWF.mjs → MapPage-bIe2a9O1.mjs} +2 -2
- package/dist/MobileMenu-BSos17v3.mjs.map +1 -0
- package/dist/{MobileMenu-CjNMfHUP.mjs → MobileMenu-DljmAIuw.mjs} +5 -5
- package/dist/MobileMenu-K0rNwrW1.mjs.map +1 -0
- package/dist/NewsletterModal-CFGXBtID.mjs.map +1 -0
- package/dist/NewsletterModal-CZNwpCK5.mjs.map +1 -0
- package/dist/{NewsletterModal-BurqHTFc.mjs → NewsletterModal-DZk0mSVC.mjs} +1 -1
- package/dist/OrganisationChooser-PpO7MD7f.mjs.map +1 -0
- package/dist/OrganisationChooser-Y_jO6oXv.mjs.map +1 -0
- package/dist/{OrganisationChooser-Dx-OT7MW.mjs → OrganisationChooser-yFfB9Xvq.mjs} +2 -2
- package/dist/{OrganisationChooserLight-BF5fT5pV.mjs → OrganisationChooserLight-Bcltbv-v.mjs} +1 -1
- package/dist/OrganisationChooserLight-Dh7wMH40.mjs.map +1 -0
- package/dist/OrganisationChooserLight-Dx_rkvpP.mjs.map +1 -0
- package/dist/PageNotFound-DeW-K_hL.mjs.map +1 -0
- package/dist/{PageNotFound-Cj-3Gv8T.mjs → PageNotFound-DogaoIFX.mjs} +2 -2
- package/dist/PageNotFound-gRuMWYCp.mjs.map +1 -0
- package/dist/ParticipantInlineList-CY_s6aJm.mjs.map +1 -0
- package/dist/{ParticipantInlineList-DEWqM1Io.mjs → ParticipantInlineList-D9pkOlvP.mjs} +4 -4
- package/dist/ParticipantInlineList-DSatB75C.mjs.map +1 -0
- package/dist/ParticipantItem-BG7yqRvD.mjs.map +1 -0
- package/dist/ParticipantItem-BTK25HID.mjs.map +1 -0
- package/dist/{ParticipantItem-BZAUIeSR.mjs → ParticipantItem-CbHOfVon.mjs} +3 -3
- package/dist/ParticipantPage-B4VnV8Yc.mjs.map +1 -0
- package/dist/{ParticipantPage-CzaHoWij.mjs → ParticipantPage-Bm18enqn.mjs} +6 -6
- package/dist/ParticipantPage-CNRNKTtC.mjs.map +1 -0
- package/dist/ParticipantPage-CpkhQjN2.mjs.map +1 -0
- package/dist/ParticipantPage-D61CCIqy.mjs.map +1 -0
- package/dist/ParticipantPage-Dh4JJCmJ.mjs.map +1 -0
- package/dist/ParticipantsPage-COaQrVID.mjs.map +1 -0
- package/dist/ParticipantsPage-DRVVU7qp.mjs.map +1 -0
- package/dist/{ParticipantsPage-goxJZQZZ.mjs → ParticipantsPage-DsHV_Ipv.mjs} +6 -6
- package/dist/{PlayerAnonymousModal-By96BtpA.mjs → PlayerAnonymousModal-B1iZ34O8.mjs} +2 -2
- package/dist/PlayerAnonymousModal-CBZStK-L.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-Cq6-Dn49.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-Cu2GGoAh.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-DiXWtNmM.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-DrQvDDym.mjs.map +1 -0
- package/dist/PlayerCompact-B9oeGx_g.mjs.map +1 -0
- package/dist/{PlayerCompact-CjU8xxVH.mjs → PlayerCompact-BDvyTiV5.mjs} +3 -3
- package/dist/PlayerCompact-E8ydrdJ4.mjs.map +1 -0
- package/dist/PlayerComponent-4Wj5XlrS.mjs.map +1 -0
- package/dist/{PlayerComponent-B58O6U6i.mjs → PlayerComponent-BGxfETJ7.mjs} +47 -47
- package/dist/PlayerComponent-C222I0kT.mjs.map +1 -0
- package/dist/PlayerComponent-CjNZNKKz.mjs.map +1 -0
- package/dist/PlayerComponent-UG_c6_yr.mjs.map +1 -0
- package/dist/{PlayerLarge-CWL5SDzD.mjs → PlayerLarge-9iGjvAUI.mjs} +5 -5
- package/dist/PlayerLarge-DP7RsA83.mjs.map +1 -0
- package/dist/PlayerLarge-DpiFO7gk.mjs.map +1 -0
- package/dist/PlayerLarge-HvRHSw4j.mjs.map +1 -0
- package/dist/PlayerLarge-X5uYCbyS.mjs.map +1 -0
- package/dist/{PlayerPlayButton-DmvV2YDi.mjs → PlayerPlayButton-BIsfgj0d.mjs} +4 -4
- package/dist/PlayerPlayButton-BQ4zJOrE.mjs.map +1 -0
- package/dist/PlayerPlayButton-kh4ZCdWh.mjs.map +1 -0
- package/dist/{PlayerProgressBar-Cl_mF4nD.mjs → PlayerProgressBar-DKYzPUpT.mjs} +2 -2
- package/dist/PlayerProgressBar-Dr-aFk7O.mjs.map +1 -0
- package/dist/PlayerProgressBar-xc1ZFPJY.mjs.map +1 -0
- package/dist/PlayerStore-Aq_ukXXS.mjs.map +1 -0
- package/dist/PlayerStore-C_QCHbT3.mjs.map +1 -0
- package/dist/{PlayerStore-CKprkxa0.mjs → PlayerStore-DggKki80.mjs} +1 -1
- package/dist/{PlayerVideo-CVUU7nHT.mjs → PlayerVideo-7decUhNG.mjs} +3 -3
- package/dist/PlayerVideo-Bhok6qYS.mjs.map +1 -0
- package/dist/PlayerVideo-CN609whx.mjs.map +1 -0
- package/dist/PlayerVideo-DXG_PsWA.mjs.map +1 -0
- package/dist/PlayerVideoDigiteka-B1rRVLzy.mjs.map +1 -0
- package/dist/PlayerVideoDigiteka-B6qODy7b.mjs.map +1 -0
- package/dist/{PlayerVideoDigiteka-DZIqqN8a.mjs → PlayerVideoDigiteka-Dxx63XHI.mjs} +2 -2
- package/dist/PlayerVideoHls-BoAbvi2b.mjs.map +1 -0
- package/dist/PlayerVideoHls-DBODDRmV.mjs.map +1 -0
- package/dist/PlayerVideoHls-DVNHm_O2.mjs.map +1 -0
- package/dist/{PlayerVideoHls-BirHOkZD.mjs → PlayerVideoHls-tRcw4ys1.mjs} +4 -4
- package/dist/PlaylistPage-BwF2VdGb.mjs.map +1 -0
- package/dist/PlaylistPage-CINwx3zE.mjs.map +1 -0
- package/dist/PlaylistPage-CPB647jC.mjs.map +1 -0
- package/dist/{PlaylistPage-DljbABur.mjs → PlaylistPage-DAiQgAL9.mjs} +35 -35
- package/dist/PlaylistPage-DDzE5GQs.mjs.map +1 -0
- package/dist/PlaylistPage-bm1nWKMg.mjs.map +1 -0
- package/dist/{PlaylistsPage-BSW-uPWF.mjs → PlaylistsPage-BVD9XkRW.mjs} +13 -13
- package/dist/PlaylistsPage-BwkVSYIp.mjs.map +1 -0
- package/dist/PlaylistsPage-Dvh77ql6.mjs.map +1 -0
- package/dist/PodcastFilterList-BBhzOM64.mjs.map +1 -0
- package/dist/PodcastFilterList-BKBjd36i.mjs.map +1 -0
- package/dist/{PodcastFilterList-YM90eN60.mjs → PodcastFilterList-DbluQzny.mjs} +2 -2
- package/dist/{PodcastImage-BtiQlrb3.mjs → PodcastImage-BFA22TgZ.mjs} +6 -6
- package/dist/PodcastImage-BhQKB5te.mjs.map +1 -0
- package/dist/PodcastImage-CHx3bUzt.mjs.map +1 -0
- package/dist/{PodcastInlineList-B32BSFqN.mjs → PodcastInlineList-COmwflcV.mjs} +1 -1
- package/dist/PodcastInlineList-CcNd_Hbs.mjs.map +1 -0
- package/dist/PodcastInlineList-akLivgog.mjs.map +1 -0
- package/dist/{PodcastInlineListTemplate-DTrS1UiG.mjs → PodcastInlineListTemplate-Chbi8aME.mjs} +3 -3
- package/dist/PodcastInlineListTemplate-DT9ZRs61.mjs.map +1 -0
- package/dist/PodcastInlineListTemplate-Dh1xF6xT.mjs.map +1 -0
- package/dist/PodcastIsPlaying-C0jcpBQd.mjs.map +1 -0
- package/dist/PodcastIsPlaying-H6P1CHAI.mjs.map +1 -0
- package/dist/{PodcastIsPlaying-BtmHnQi9.mjs → PodcastIsPlaying-ugHcefCy.mjs} +1 -1
- package/dist/PodcastItem-BfvK4ion.mjs.map +1 -0
- package/dist/{PodcastItem-TdtzApJ6.mjs → PodcastItem-Dhm8myBb.mjs} +6 -6
- package/dist/PodcastItem-DwK_Yu1G.mjs.map +1 -0
- package/dist/{PodcastList-Bbe3yWiu.mjs → PodcastList-BQX_YW4Q.mjs} +4 -4
- package/dist/PodcastList-C2R92m6S.mjs.map +1 -0
- package/dist/PodcastList-DWl6zz_z.mjs.map +1 -0
- package/dist/{PodcastList-BAOJhQ7G.mjs → PodcastList-DYhGnphb.mjs} +5 -5
- package/dist/PodcastList-Dbt4nmKg.mjs.map +1 -0
- package/dist/PodcastList-KaQBRbR9.mjs.map +1 -0
- package/dist/PodcastPage-B0pbZ5o_.mjs.map +1 -0
- package/dist/PodcastPage-BOA44Us4.mjs.map +1 -0
- package/dist/PodcastPage-C37Wa-qH.mjs.map +1 -0
- package/dist/PodcastPage-D0HYJxaK.mjs.map +1 -0
- package/dist/PodcastPage-D0U6-etV.mjs.map +1 -0
- package/dist/PodcastPage-DwMPY4po.mjs.map +1 -0
- package/dist/{PodcastPage-CAxub2do.mjs → PodcastPage-DyQYsdi4.mjs} +26 -26
- package/dist/PodcastPlayBar-Bo-W_dSK.mjs.map +1 -0
- package/dist/PodcastPlayBar-Cpr3Ff7J.mjs.map +1 -0
- package/dist/{PodcastPlayBar-gAEttclo.mjs → PodcastPlayBar-DX_WtPKh.mjs} +3 -3
- package/dist/PodcastPlayBasicButton-BvJPrxpI.mjs.map +1 -0
- package/dist/PodcastPlayBasicButton-CS5TNlmX.mjs.map +1 -0
- package/dist/{PodcastPlayBasicButton-7w91y2ow.mjs → PodcastPlayBasicButton-CVXhEUHB.mjs} +1 -1
- package/dist/{PodcastPlayButton-CQY0d6f-.mjs → PodcastPlayButton--gjzxW0o.mjs} +3 -3
- package/dist/PodcastPlayButton-BqvE4ZUl.mjs.map +1 -0
- package/dist/PodcastPlayButton-DW5Feest.mjs.map +1 -0
- package/dist/{PodcastPlaylistInlineList-BE5L8pSP.mjs → PodcastPlaylistInlineList-BNMWn-TD.mjs} +7 -7
- package/dist/PodcastPlaylistInlineList-BV31HaB2.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-HEdFAq1l.mjs.map +1 -0
- package/dist/{PodcastPresentationList-DH6Rq0Z4.mjs → PodcastPresentationList-B9vORr36.mjs} +4 -4
- package/dist/PodcastPresentationList-ChqvdXY0.mjs.map +1 -0
- package/dist/PodcastPresentationList-Dit6HvJr.mjs.map +1 -0
- package/dist/PodcastProgressBar-BoGtJPAa.mjs.map +1 -0
- package/dist/{PodcastProgressBar-DoeG7lDj.mjs → PodcastProgressBar-CyU6rIuS.mjs} +3 -3
- package/dist/PodcastProgressBar-DTRhKzW-.mjs.map +1 -0
- package/dist/{PodcastRawTranscript-Cktqtbcg.mjs → PodcastRawTranscript-BiuftXu-.mjs} +2 -2
- package/dist/PodcastRawTranscript-C8SJcaQE.mjs.map +1 -0
- package/dist/PodcastRawTranscript-nfzHM0k_.mjs.map +1 -0
- package/dist/PodcastRawTranscript-r5pRtZDg.mjs.map +1 -0
- package/dist/PodcastSwiperList-Bsg0q89o.mjs.map +1 -0
- package/dist/PodcastSwiperList-Cju5VHcH.mjs.map +1 -0
- package/dist/{PodcastSwiperList-DZ26-8xy.mjs → PodcastSwiperList-bOhOABMX.mjs} +4 -4
- package/dist/PodcastmakerHeader-6fIwE70J.mjs.map +1 -0
- package/dist/PodcastmakerHeader-BBPEy__r.mjs.map +1 -0
- package/dist/{PodcastmakerHeader-MhdOrssb.mjs → PodcastmakerHeader-CIoJwm1L.mjs} +1 -1
- package/dist/PodcastsPage-967SI8kL.mjs.map +1 -0
- package/dist/{PodcastsPage-BXjTDNhn.mjs → PodcastsPage-BZCrwDlm.mjs} +5 -5
- package/dist/PodcastsPage-DKWHzNNA.mjs.map +1 -0
- package/dist/PodcastsPage-DONqoMkB.mjs.map +1 -0
- package/dist/PodcastsPage-DhEMPqCT.mjs.map +1 -0
- package/dist/{ProductorSearch-Z36zTZK4.mjs → ProductorSearch-B7pJFNqX.mjs} +3 -3
- package/dist/ProductorSearch-BgmV_RCq.mjs.map +1 -0
- package/dist/ProductorSearch-C4Nv2HzS.mjs.map +1 -0
- package/dist/ProgressBar-BMeSiueh.mjs.map +1 -0
- package/dist/ProgressBar-C15ih0uL.mjs.map +1 -0
- package/dist/{ProgressBar-CTOa-MDz.mjs → ProgressBar-o17a2f1E.mjs} +1 -1
- package/dist/QrCode-BYLxjhwi.mjs.map +1 -0
- package/dist/QrCode-CCigeTaZ.mjs +109 -0
- package/dist/QrCode-CaXoOjo-.mjs.map +1 -0
- package/dist/QrCode-CcQR60hB.mjs.map +1 -0
- package/dist/QrCode-S_eLVZoz.mjs.map +1 -0
- package/dist/QrCode-XZMMiaX5.mjs.map +1 -0
- package/dist/QrCodeModal-BJOu1pAV.mjs.map +1 -0
- package/dist/QrCodeModal-BjT-0P0w.mjs.map +1 -0
- package/dist/QrCodeModal-BrabSTzq.mjs.map +1 -0
- package/dist/QrCodeModal-CjvbRYLW.mjs.map +1 -0
- package/dist/{QrCodeModal-DE3juCsN.mjs → QrCodeModal-Dpw_tCQ6.mjs} +1 -1
- package/dist/QrCodeModal-N2fjbP4S.mjs.map +1 -0
- package/dist/RadioCurrently-B_b8DV2w.mjs.map +1 -0
- package/dist/RadioCurrently-DufvDqm1.mjs.map +1 -0
- package/dist/{RadioCurrently-BlAhcc9E.mjs → RadioCurrently-ysRKhxKU.mjs} +3 -3
- package/dist/RadioHistory-B03bYMxm.mjs.map +1 -0
- package/dist/{RadioHistory-C7S79sZD.mjs → RadioHistory-DjsqvRgH.mjs} +2 -2
- package/dist/RadioHistory-Dv4gt9TM.mjs.map +1 -0
- package/dist/RadioImage-BFdiGgi_.mjs.map +1 -0
- package/dist/{RadioImage-BTn2Lquc.mjs → RadioImage-CSseYIVb.mjs} +4 -4
- package/dist/RadioImage-CrtD33dM.mjs.map +1 -0
- package/dist/RadioList--f7RDhHJ.mjs.map +1 -0
- package/dist/{RadioList-BD3zNwmk.mjs → RadioList-BZFFAobk.mjs} +4 -4
- package/dist/RadioList-De9NQ23Q.mjs.map +1 -0
- package/dist/RadioPage-BK1N--Kr.mjs.map +1 -0
- package/dist/RadioPage-BTtNFJI2.mjs.map +1 -0
- package/dist/RadioPage-Cqas0JX6.mjs.map +1 -0
- package/dist/RadioPage-DhSB0sX5.mjs.map +1 -0
- package/dist/RadioPage-DlahFXYC.mjs.map +1 -0
- package/dist/{RadioPage-Bv3oupa1.mjs → RadioPage-dMKtmHoU.mjs} +4 -4
- package/dist/RadioPlanning-BU1E8i4t.mjs.map +1 -0
- package/dist/{RadioPlanning-nkv_Mb_t.mjs → RadioPlanning-BmIxuUBI.mjs} +2 -2
- package/dist/RadioPlanning-Bx-N-xqX.mjs.map +1 -0
- package/dist/RadioProgressBar-0XM3ZTGU.mjs.map +1 -0
- package/dist/{RadioProgressBar-B2EgCOrK.mjs → RadioProgressBar-CQRGuPpC.mjs} +1 -1
- package/dist/RadioProgressBar-oyeS56mV.mjs.map +1 -0
- package/dist/{RecaptchaModal-w-9MlZ45.mjs → RecaptchaModal-BdW4xNlX.mjs} +1 -1
- package/dist/RecaptchaModal-DFlFQcHs.mjs.map +1 -0
- package/dist/RecaptchaModal-iLQ4UYOL.mjs.map +1 -0
- package/dist/ReportAbuseModal-BaPt2DLK.mjs.map +1 -0
- package/dist/{ReportAbuseModal-O1K7j7NV.mjs → ReportAbuseModal-Bi6upLga.mjs} +3 -3
- package/dist/ReportAbuseModal-CH7Y153n.mjs.map +1 -0
- package/dist/RightsIndicator-BH3jm_1O.mjs.map +1 -0
- package/dist/RightsIndicator-d8ffUFIj.mjs.map +1 -0
- package/dist/{RightsIndicator-D0cSu8j2.mjs → RightsIndicator-wm6dW8L3.mjs} +1 -1
- package/dist/RightsWrapper-C3BRHqqo.mjs.map +1 -0
- package/dist/{RightsWrapper-BUj_1bwR.mjs → RightsWrapper-DAZF0Iij.mjs} +4 -4
- package/dist/RightsWrapper-DJG9Ds6c.mjs.map +1 -0
- package/dist/{RubriqueFilter-RgardNnQ.mjs → RubriqueFilter-C3ImHHNV.mjs} +2 -2
- package/dist/RubriqueFilter-C9C_OiF5.mjs.map +1 -0
- package/dist/RubriqueFilter-_8V1n9-x.mjs.map +1 -0
- package/dist/RubriqueList-99-nWSvq.mjs.map +1 -0
- package/dist/{RubriqueList-DA9OYqUl.mjs → RubriqueList-Bl0AIvmm.mjs} +2 -2
- package/dist/RubriqueList-H_NHILuj.mjs.map +1 -0
- package/dist/RubriquePage-6KFPBPz8.mjs.map +1 -0
- package/dist/{RubriquePage-xgTOce7c.mjs → RubriquePage-BqDlwwdL.mjs} +4 -4
- package/dist/RubriquePage-Cwz9OqLO.mjs.map +1 -0
- package/dist/SearchPage-BtZnj3sA.mjs.map +1 -0
- package/dist/SearchPage-DMIV2AgJ.mjs.map +1 -0
- package/dist/{SearchPage-C3o5RPP0.mjs → SearchPage-y4ZwqHGE.mjs} +2 -2
- package/dist/ShareAnonymous-BeSQozvM.mjs.map +1 -0
- package/dist/ShareAnonymous-BgsR6Ahp.mjs.map +1 -0
- package/dist/ShareAnonymous-DVpKBKbi.mjs.map +1 -0
- package/dist/ShareAnonymous-DWArDFT0.mjs.map +1 -0
- package/dist/ShareAnonymous-IaVbb-rp.mjs.map +1 -0
- package/dist/{ShareAnonymous-bOwwEjPv.mjs → ShareAnonymous-q7zopt6i.mjs} +2 -2
- package/dist/ShareModalPlayer-BHmsvxXF.mjs.map +1 -0
- package/dist/{ShareModalPlayer-D2oBrSly.mjs → ShareModalPlayer-Cfnk68-U.mjs} +1 -1
- package/dist/ShareModalPlayer-DLBU3lsU.mjs.map +1 -0
- package/dist/ShareModalPlayer-O-CmDObW.mjs.map +1 -0
- package/dist/ShareModalPlayer-QYu8Q9ks.mjs.map +1 -0
- package/dist/ShareModalPlayer-Vga-96DM.mjs.map +1 -0
- package/dist/{ShareNewsletter-CNw1LziN.mjs → ShareNewsletter-BWIAt47D.mjs} +1 -1
- package/dist/ShareNewsletter-BhFk6ARk.mjs.map +1 -0
- package/dist/ShareNewsletter-JCO4h7rk.mjs.map +1 -0
- package/dist/SharePlayer-C-RgIOh1.mjs.map +1 -0
- package/dist/{SharePlayer-CRri0YED.mjs → SharePlayer-C0aveOwy.mjs} +2 -2
- package/dist/SharePlayer-CNXrUj8M.mjs.map +1 -0
- package/dist/SharePlayer-D0-qY2dS.mjs.map +1 -0
- package/dist/SharePlayer-DQoFa7iv.mjs.map +1 -0
- package/dist/SharePlayer-DwNl3E7o.mjs.map +1 -0
- package/dist/{SharePlayerRadio-DVsegQMu.mjs → SharePlayerRadio-BqaeyEls.mjs} +2 -2
- package/dist/SharePlayerRadio-CHvCtKdZ.mjs.map +1 -0
- package/dist/SharePlayerRadio-CIsy-rCC.mjs.map +1 -0
- package/dist/SharePlayerRadio-ChfNulnf.mjs.map +1 -0
- package/dist/SharePlayerRadio-DA-W-306.mjs.map +1 -0
- package/dist/SharePlayerRadio-DwPeLUsk.mjs.map +1 -0
- package/dist/SharePlayerTypes-CeMV4n10.mjs.map +1 -0
- package/dist/SharePlayerTypes-DdyoQZDi.mjs.map +1 -0
- package/dist/{SharePlayerTypes-BxkEoBSL.mjs → SharePlayerTypes-DyrqFDVJ.mjs} +1 -1
- package/dist/ShareSocialsButtons-BHWzJVne.mjs.map +1 -0
- package/dist/ShareSocialsButtons-Bjx2ONvj.mjs.map +1 -0
- package/dist/{ShareSocialsButtons-BJ3DqvIO.mjs → ShareSocialsButtons-PqMXhFEk.mjs} +1 -1
- package/dist/SimpleLayout-C29bPtbd.mjs.map +1 -0
- package/dist/{SimpleLayout-BJlcQjx9.mjs → SimpleLayout-CUavy1lD.mjs} +2 -2
- package/dist/SimpleLayout-Cjc3Q9Mb.mjs.map +1 -0
- package/dist/SimpleLayout-D4sVjQGu.mjs.map +1 -0
- package/dist/SimpleLayout-DaoXS--3.mjs.map +1 -0
- package/dist/{SmartLinkPage-DpD90wc7.mjs → SmartLinkPage-6HgX8LDv.mjs} +16 -16
- package/dist/SmartLinkPage-BcQmox7e.mjs.map +1 -0
- package/dist/SmartLinkPage-M_zB_Xp1.mjs.map +1 -0
- package/dist/{SubscribeButtons-zlRDGEzS.mjs → SubscribeButtons-Cy2S93qA.mjs} +2 -2
- package/dist/SubscribeButtons-CyGYD1B1.mjs.map +1 -0
- package/dist/SubscribeButtons-DjjZQfOU.mjs.map +1 -0
- package/dist/SwiperList-BNODHhLF.mjs.map +1 -0
- package/dist/SwiperList-Cqklwlg9.mjs.map +1 -0
- package/dist/{SwiperList-BlF3rPq5.mjs → SwiperList-O8nUg87R.mjs} +1 -1
- package/dist/TagList-4RDriU1J.mjs.map +1 -0
- package/dist/TagList-B5JPfT6j.mjs.map +1 -0
- package/dist/{TagList-BBHyaKp-.mjs → TagList-DGdjrNax.mjs} +1 -1
- package/dist/TagPage-BOsz6Bot.mjs.map +1 -0
- package/dist/TagPage-CALmJwxW.mjs.map +1 -0
- package/dist/{TagPage-DLpNBBjP.mjs → TagPage-DrznMl-f.mjs} +3 -3
- package/dist/{TopBar-CLWWRgr7.mjs → TopBar-CE-8lAPx.mjs} +36 -36
- package/dist/TopBar-CUCBss7X.mjs.map +1 -0
- package/dist/TopBar-CeQQ1hgH.mjs.map +1 -0
- package/dist/{UserButtonContent-BR3Rlqwp.mjs → UserButtonContent--VK68UsY.mjs} +6 -6
- package/dist/UserButtonContent-067qGenf.mjs.map +1 -0
- package/dist/UserButtonContent-Dqgyrgzv.mjs.map +1 -0
- package/dist/VideoModuleBox-9QgBI-Q-.mjs.map +1 -0
- package/dist/{VideoModuleBox-DxYJVwy3.mjs → VideoModuleBox-Bcqman6a.mjs} +1 -1
- package/dist/VideoModuleBox-BrVK2bDZ.mjs.map +1 -0
- package/dist/VideoModuleBox-DWO47_bZ.mjs.map +1 -0
- package/dist/VideoPage-4MB4zmnA.mjs.map +1 -0
- package/dist/VideoPage-C0_t7XMC.mjs.map +1 -0
- package/dist/VideoPage-CIDpzbkb.mjs.map +1 -0
- package/dist/{VideoPage-BaeTduNB.mjs → VideoPage-CaDhjXBc.mjs} +6 -6
- package/dist/VideoPage-DEJSfeFy.mjs.map +1 -0
- package/dist/{classicApi-pmODlqv5.mjs → classicApi-CGipMqf7.mjs} +267 -256
- package/dist/classicApi-CW1Z-HoF.mjs.map +1 -0
- package/dist/classicApi-OzToKuW1.mjs.map +1 -0
- package/dist/{downloadHelper-BAI-eqgA.mjs → downloadHelper-C3QooCxr.mjs} +1 -1
- package/dist/downloadHelper-D7dUpp5l.mjs.map +1 -0
- package/dist/downloadHelper-DwV3Mmd3.mjs.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.mjs +182 -182
- package/dist/src/components/form/ClassicDatePicker.vue.d.ts +16 -8
- package/dist/src/i18n.d.ts +2 -0
- package/dist/tests.mjs +2 -2
- package/dist/useAdvancedParamInit-BKw9VZ53.mjs.map +1 -0
- package/dist/useAdvancedParamInit-CyRmbqqe.mjs.map +1 -0
- package/dist/{useAdvancedParamInit-Bgvt8758.mjs → useAdvancedParamInit-D5roUdHI.mjs} +10 -10
- package/dist/useDayjs-BKBB00TF.mjs.map +1 -0
- package/dist/useDayjs-UQLGUbw5.mjs.map +1 -0
- package/dist/{useDayjs-DGb3L4kJ.mjs → useDayjs-VUs19G9T.mjs} +1 -1
- package/dist/useErrorHandler-BKN3lhJ5.mjs.map +1 -0
- package/dist/useErrorHandler-C3XnRTmp.mjs.map +1 -0
- package/dist/{useErrorHandler-D9W2BURn.mjs → useErrorHandler-x9sjDYSz.mjs} +1 -1
- package/dist/useImageProxy-AEcmDpvW.mjs.map +1 -0
- package/dist/useImageProxy-BzTG_GCn.mjs.map +1 -0
- package/dist/{useImageProxy-8ndy_oTo.mjs → useImageProxy-CCpDzPmQ.mjs} +1 -1
- package/dist/useOrgaComputed-4PduqYTq.mjs.map +1 -0
- package/dist/useOrgaComputed-C2n0FBbv.mjs.map +1 -0
- package/dist/{useOrgaComputed-CBJ5sDOm.mjs → useOrgaComputed-D81Jihm-.mjs} +2 -2
- package/dist/{usePlayerLogicProgress-C2L7cMdd.mjs → usePlayerLogicProgress-BybmSAcs.mjs} +2 -2
- package/dist/usePlayerLogicProgress-CKoCod6g.mjs.map +1 -0
- package/dist/usePlayerLogicProgress-DZaPRo6p.mjs.map +1 -0
- package/dist/usePodcastView-B-2HPFAo.mjs.map +1 -0
- package/dist/{usePodcastView-CoDJJr6Y.mjs → usePodcastView-CkM-n6iO.mjs} +3 -3
- package/dist/usePodcastView-jdYTK1cW.mjs.map +1 -0
- package/dist/{usePresentationItem-DZZVm3hh.mjs → usePresentationItem-CLEGZwI3.mjs} +3 -3
- package/dist/usePresentationItem-Com4i40U.mjs.map +1 -0
- package/dist/usePresentationItem-OpMean0v.mjs.map +1 -0
- package/dist/{useRights-DOXtpjv5.mjs → useRights-BI2tXXjR.mjs} +1 -1
- package/dist/useRights-Bsv9hr7w.mjs.map +1 -0
- package/dist/useRights-DfudFDI6.mjs.map +1 -0
- package/dist/{useRubriquesFilterComputed-DoUOqOrJ.mjs → useRubriquesFilterComputed-D1yqLnK4.mjs} +1 -1
- package/dist/useRubriquesFilterComputed-DGDJp2gc.mjs.map +1 -0
- package/dist/useRubriquesFilterComputed-NNE-FElk.mjs.map +1 -0
- package/dist/{useRubriquesFilterParam-BE8BbmAQ.mjs → useRubriquesFilterParam-2eMd5ND7.mjs} +1 -1
- package/dist/useRubriquesFilterParam-DE5dYl6c.mjs.map +1 -0
- package/dist/useRubriquesFilterParam-DXYD4G0D.mjs.map +1 -0
- package/dist/useSharePlatforms-CrQ8r5vT.mjs.map +1 -0
- package/dist/useSharePlatforms-D124fJ_v.mjs.map +1 -0
- package/dist/{useSharePlatforms-ZWYDJZBy.mjs → useSharePlatforms-sXgVxsL5.mjs} +5 -5
- package/dist/{useSimplePageParam-DFKSEyiE.mjs → useSimplePageParam-BrtYXOUt.mjs} +1 -1
- package/dist/useSimplePageParam-CruL7rLG.mjs.map +1 -0
- package/dist/useSimplePageParam-SaBaPhb8.mjs.map +1 -0
- package/dist/{useTranslation-Dr7KU7Y4.mjs → useTranslation-BVQwv02Q.mjs} +9 -9
- package/dist/useTranslation-Bf2zP_6C.mjs.map +1 -0
- package/dist/useTranslation-BuhzZoI8.mjs.map +1 -0
- package/dist/useTranslation-OWqckMEl.mjs.map +1 -0
- package/dist/usefetchRadioData-D01ws733.mjs.map +1 -0
- package/dist/usefetchRadioData-DDRPoD4s.mjs.map +1 -0
- package/dist/{usefetchRadioData-SLWfXkYt.mjs → usefetchRadioData-zyQNqiV3.mjs} +1 -1
- package/package.json +1 -1
- package/src/components/composable/useTranslation.ts +2 -2
- package/src/components/display/sharing/QrCode.vue +63 -64
- package/src/components/form/ClassicDatePicker.vue +14 -7
- package/src/components/misc/player/video/PlayerVideoHls.vue +3 -1
- package/src/i18n.ts +38 -29
- package/dist/QrCode-DuScZ7PD.mjs +0 -105
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { T as e } from "./classicApi-CGipMqf7.mjs";
|
|
2
2
|
import { createBlock as t, createCommentVNode as n, defineAsyncComponent as r, defineComponent as i, openBlock as a, unref as o } from "vue";
|
|
3
3
|
import { storeToRefs as s } from "pinia";
|
|
4
4
|
//#endregion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClassicNotifications-BFQ-R6kO.mjs","names":["_openBlock","_createBlock","_createCommentVNode","_sfc_main"],"sources":["../src/components/misc/ClassicNotifications.vue","../src/components/misc/ClassicNotifications.vue"],"sourcesContent":["<!--\n A component to display notifications\n-->\n<template>\n <MessageModal\n v-if=\"currentNotification\"\n :title=\"currentNotification.title\"\n :message=\"currentNotification.message\"\n :closeable=\"currentNotification.closeable !== false\"\n @close=\"clearNotification\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { storeToRefs } from 'pinia';\nimport { useNotificationStore } from '../../stores/NotificationStore';\n\nconst MessageModal = defineAsyncComponent(() => import('./modal/MessageModal.vue'));\n\nimport { defineAsyncComponent } from 'vue';\n\nconst {\n clearNotification\n} = useNotificationStore();\n\nconst {\n currentNotification,\n} = storeToRefs(useNotificationStore());\n</script>\n","<!--\n A component to display notifications\n-->\n<template>\n <MessageModal\n v-if=\"currentNotification\"\n :title=\"currentNotification.title\"\n :message=\"currentNotification.message\"\n :closeable=\"currentNotification.closeable !== false\"\n @close=\"clearNotification\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { storeToRefs } from 'pinia';\nimport { useNotificationStore } from '../../stores/NotificationStore';\n\nconst MessageModal = defineAsyncComponent(() => import('./modal/MessageModal.vue'));\n\nimport { defineAsyncComponent } from 'vue';\n\nconst {\n clearNotification\n} = useNotificationStore();\n\nconst {\n currentNotification,\n} = storeToRefs(useNotificationStore());\n</script>\n"],"mappings":";;;;;;;;;EAiBA,MAAM,eAAe,2BAA2B,OAAO,8BAA2B,CAAA,MAAA,MAAA,EAAA,CAAA,CAAA;EAIlF,MAAM,EACF,sBACA,qBAAqB;EAEzB,MAAM,EACF,wBACA,YAAY,qBAAqB,CAAC;;;;;;;;;;;;;;;;CCtBxB,OAAA,OAAA,uBADVA,UAAA,GAAAC,YAME,OAAA,iBAAA;;EAJG,OAAO,OAAA,oBAAoB;EAC3B,SAAS,OAAA,oBAAoB;EAC7B,WAAW,OAAA,oBAAoB,cAAS;EACxC,SAAO,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClassicNotifications-DR0PM1Xp.mjs","names":["_openBlock","_createBlock","_createCommentVNode","_sfc_main"],"sources":["../src/components/misc/ClassicNotifications.vue","../src/components/misc/ClassicNotifications.vue"],"sourcesContent":["<!--\n A component to display notifications\n-->\n<template>\n <MessageModal\n v-if=\"currentNotification\"\n :title=\"currentNotification.title\"\n :message=\"currentNotification.message\"\n :closeable=\"currentNotification.closeable !== false\"\n @close=\"clearNotification\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { storeToRefs } from 'pinia';\nimport { useNotificationStore } from '../../stores/NotificationStore';\n\nconst MessageModal = defineAsyncComponent(() => import('./modal/MessageModal.vue'));\n\nimport { defineAsyncComponent } from 'vue';\n\nconst {\n clearNotification\n} = useNotificationStore();\n\nconst {\n currentNotification,\n} = storeToRefs(useNotificationStore());\n</script>\n","<!--\n A component to display notifications\n-->\n<template>\n <MessageModal\n v-if=\"currentNotification\"\n :title=\"currentNotification.title\"\n :message=\"currentNotification.message\"\n :closeable=\"currentNotification.closeable !== false\"\n @close=\"clearNotification\"\n />\n</template>\n\n<script setup lang=\"ts\">\nimport { storeToRefs } from 'pinia';\nimport { useNotificationStore } from '../../stores/NotificationStore';\n\nconst MessageModal = defineAsyncComponent(() => import('./modal/MessageModal.vue'));\n\nimport { defineAsyncComponent } from 'vue';\n\nconst {\n clearNotification\n} = useNotificationStore();\n\nconst {\n currentNotification,\n} = storeToRefs(useNotificationStore());\n</script>\n"],"mappings":";;;;;;;;;EAiBA,MAAM,eAAe,2BAA2B,OAAO,8BAA2B,CAAA,MAAA,MAAA,EAAA,CAAA,CAAA;EAIlF,MAAM,EACF,sBACA,qBAAqB;EAEzB,MAAM,EACF,wBACA,YAAY,qBAAqB,CAAC;;;;;;;;;;;;;;;;CCtBxB,OAAA,OAAA,uBADVA,UAAA,GAAAC,YAME,OAAA,iBAAA;;EAJG,OAAO,OAAA,oBAAoB;EAC3B,SAAS,OAAA,oBAAoB;EAC7B,WAAW,OAAA,oBAAoB,cAAS;EACxC,SAAO,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClipboardModal-B_SZ6jDk.mjs","names":["_resolveComponent","_openBlock","_createBlock","_withCtx","_createElementVNode","_createTextVNode","_toDisplayString","_createVNode","_createCommentVNode","_sfc_main"],"sources":["../src/components/misc/modal/ClipboardModal.vue","../src/components/misc/modal/ClipboardModal.vue"],"sourcesContent":["<template>\n <ClassicModal\n id-modal=\"clipboard-modal\"\n :title-modal=\"t('RSS Link')\"\n @close=\"closePopup\"\n >\n <template #body>\n <p class=\"d-flex justify-content-between align-items-center\">\n {{ t(\"Rss feed:\") }}\n <span id=\"LINK\">{{ link }}</span>\n <ClassicCopyButton\n :text=\"t('Copy')\"\n :text-after-copy=\"t('Copied!')\"\n :data-to-copy=\"link\"\n :snackbar-text=\"t('Link in clipboard')\"\n />\n </p>\n <!--\n RssSection is not defined in the SDK: it is resolved at runtime from\n the consuming app's globally registered components (app.component()),\n and renders nothing if the app hasn't registered one under that name.\n -->\n <RssSection\n v-if=\"emission && undefined !== authStore.authOrgaId\"\n :emission=\"emission\"\n />\n </template>\n </ClassicModal>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicCopyButton from \"../../form/ClassicCopyButton.vue\";\nimport ClassicModal from \"../modal/ClassicModal.vue\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \ndefineProps({\n link: { default: \"\", type: String },\n emission: { default: undefined, type: Object as () => Emission },\n})\n\n//Emits\nconst emit = defineEmits([\"close\"]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Methods\nfunction closePopup(): void {\n emit(\"close\");\n}\n</script>\n","<template>\n <ClassicModal\n id-modal=\"clipboard-modal\"\n :title-modal=\"t('RSS Link')\"\n @close=\"closePopup\"\n >\n <template #body>\n <p class=\"d-flex justify-content-between align-items-center\">\n {{ t(\"Rss feed:\") }}\n <span id=\"LINK\">{{ link }}</span>\n <ClassicCopyButton\n :text=\"t('Copy')\"\n :text-after-copy=\"t('Copied!')\"\n :data-to-copy=\"link\"\n :snackbar-text=\"t('Link in clipboard')\"\n />\n </p>\n <!--\n RssSection is not defined in the SDK: it is resolved at runtime from\n the consuming app's globally registered components (app.component()),\n and renders nothing if the app hasn't registered one under that name.\n -->\n <RssSection\n v-if=\"emission && undefined !== authStore.authOrgaId\"\n :emission=\"emission\"\n />\n </template>\n </ClassicModal>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicCopyButton from \"../../form/ClassicCopyButton.vue\";\nimport ClassicModal from \"../modal/ClassicModal.vue\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \ndefineProps({\n link: { default: \"\", type: String },\n emission: { default: undefined, type: Object as () => Emission },\n})\n\n//Emits\nconst emit = defineEmits([\"close\"]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Methods\nfunction closePopup(): void {\n emit(\"close\");\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EA4CA,MAAM,OAAO;EAGb,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,YAAY,aAAa;EAG/B,SAAS,aAAmB;GAC1B,KAAK,OAAO;EACd;;;;;;;;;;;;;;;;;;AC9CS,IAAA,aAAA,EAAA,OAAM,oDAAmD;AAEpD,IAAA,aAAA,EAAA,IAAG,OAAM;;;CARrB,OAAAC,UAAA,GAAAC,YA0Be,OAAA,iBAAA;EAzBb,YAAS;EACR,eAAa,OAAA,EAAC,UAAA;EACd,SAAO,OAAA;;EAEG,MAAIC,cAUT;GATJC,mBASI,KATJ,YASI;IARCC,gBAAAC,gBAAA,OAAA,EAAC,WAAA,CAAA,IAAgB,KACpB,CAAA;IAAAF,mBAAiC,QAAjC,YAAiCE,gBAAd,OAAA,IAAI,GAAA,CAAA;IACvBC,YAKE,OAAA,sBAAA;KAJC,MAAM,OAAA,EAAC,MAAA;KACP,mBAAiB,OAAA,EAAC,SAAA;KAClB,gBAAc,OAAA;KACd,iBAAe,OAAA,EAAC,mBAAA;;;;;;;;GAGrBC,mBAAA,sPAAA;GAMQ,OAAA,YAAY,KAAA,MAAc,OAAA,UAAU,cAD5CP,UAAA,GAAAC,YAGE,uBAAA;;IADC,UAAU,OAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as e } from "./classicApi-
|
|
1
|
+
import { i as e } from "./classicApi-CGipMqf7.mjs";
|
|
2
2
|
import { t } from "./ClassicModal-Dl2IdzXZ.mjs";
|
|
3
3
|
import { t as n } from "./ClassicCopyButton-DJ9T09fS.mjs";
|
|
4
4
|
import { createBlock as r, createCommentVNode as i, createElementVNode as a, createTextVNode as o, createVNode as s, defineComponent as c, openBlock as l, resolveComponent as u, toDisplayString as d, unref as f, withCtx as p } from "vue";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClipboardModal-DjrZQRtY.mjs","names":["_resolveComponent","_openBlock","_createBlock","_withCtx","_createElementVNode","_createTextVNode","_toDisplayString","_createVNode","_createCommentVNode","_sfc_main"],"sources":["../src/components/misc/modal/ClipboardModal.vue","../src/components/misc/modal/ClipboardModal.vue"],"sourcesContent":["<template>\n <ClassicModal\n id-modal=\"clipboard-modal\"\n :title-modal=\"t('RSS Link')\"\n @close=\"closePopup\"\n >\n <template #body>\n <p class=\"d-flex justify-content-between align-items-center\">\n {{ t(\"Rss feed:\") }}\n <span id=\"LINK\">{{ link }}</span>\n <ClassicCopyButton\n :text=\"t('Copy')\"\n :text-after-copy=\"t('Copied!')\"\n :data-to-copy=\"link\"\n :snackbar-text=\"t('Link in clipboard')\"\n />\n </p>\n <!--\n RssSection is not defined in the SDK: it is resolved at runtime from\n the consuming app's globally registered components (app.component()),\n and renders nothing if the app hasn't registered one under that name.\n -->\n <RssSection\n v-if=\"emission && undefined !== authStore.authOrgaId\"\n :emission=\"emission\"\n />\n </template>\n </ClassicModal>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicCopyButton from \"../../form/ClassicCopyButton.vue\";\nimport ClassicModal from \"../modal/ClassicModal.vue\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \ndefineProps({\n link: { default: \"\", type: String },\n emission: { default: undefined, type: Object as () => Emission },\n})\n\n//Emits\nconst emit = defineEmits([\"close\"]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Methods\nfunction closePopup(): void {\n emit(\"close\");\n}\n</script>\n","<template>\n <ClassicModal\n id-modal=\"clipboard-modal\"\n :title-modal=\"t('RSS Link')\"\n @close=\"closePopup\"\n >\n <template #body>\n <p class=\"d-flex justify-content-between align-items-center\">\n {{ t(\"Rss feed:\") }}\n <span id=\"LINK\">{{ link }}</span>\n <ClassicCopyButton\n :text=\"t('Copy')\"\n :text-after-copy=\"t('Copied!')\"\n :data-to-copy=\"link\"\n :snackbar-text=\"t('Link in clipboard')\"\n />\n </p>\n <!--\n RssSection is not defined in the SDK: it is resolved at runtime from\n the consuming app's globally registered components (app.component()),\n and renders nothing if the app hasn't registered one under that name.\n -->\n <RssSection\n v-if=\"emission && undefined !== authStore.authOrgaId\"\n :emission=\"emission\"\n />\n </template>\n </ClassicModal>\n</template>\n\n<script setup lang=\"ts\">\nimport ClassicCopyButton from \"../../form/ClassicCopyButton.vue\";\nimport ClassicModal from \"../modal/ClassicModal.vue\";\nimport { Emission } from \"@/stores/class/general/emission\";\nimport { useAuthStore } from \"../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \ndefineProps({\n link: { default: \"\", type: String },\n emission: { default: undefined, type: Object as () => Emission },\n})\n\n//Emits\nconst emit = defineEmits([\"close\"]);\n\n//Composables\nconst { t } = useI18n();\nconst authStore = useAuthStore();\n\n//Methods\nfunction closePopup(): void {\n emit(\"close\");\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EA4CA,MAAM,OAAO;EAGb,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,YAAY,aAAa;EAG/B,SAAS,aAAmB;GAC1B,KAAK,OAAO;EACd;;;;;;;;;;;;;;;;;;AC9CS,IAAA,aAAA,EAAA,OAAM,oDAAmD;AAEpD,IAAA,aAAA,EAAA,IAAG,OAAM;;;CARrB,OAAAC,UAAA,GAAAC,YA0Be,OAAA,iBAAA;EAzBb,YAAS;EACR,eAAa,OAAA,EAAC,UAAA;EACd,SAAO,OAAA;;EAEG,MAAIC,cAUT;GATJC,mBASI,KATJ,YASI;IARCC,gBAAAC,gBAAA,OAAA,EAAC,WAAA,CAAA,IAAgB,KACpB,CAAA;IAAAF,mBAAiC,QAAjC,YAAiCE,gBAAd,OAAA,IAAI,GAAA,CAAA;IACvBC,YAKE,OAAA,sBAAA;KAJC,MAAM,OAAA,EAAC,MAAA;KACP,mBAAiB,OAAA,EAAC,SAAA;KAClB,gBAAc,OAAA;KACd,iBAAe,OAAA,EAAC,mBAAA;;;;;;;;GAGrBC,mBAAA,sPAAA;GAMQ,OAAA,YAAY,KAAA,MAAc,OAAA,UAAU,cAD5CP,UAAA,GAAAC,YAGE,uBAAA;;IADC,UAAU,OAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { i as e, t } from "./classicApi-
|
|
2
|
-
import { n } from "./PlayerStore-
|
|
3
|
-
import { t as r } from "./CommentStore-
|
|
1
|
+
import { i as e, t } from "./classicApi-CGipMqf7.mjs";
|
|
2
|
+
import { n } from "./PlayerStore-DggKki80.mjs";
|
|
3
|
+
import { t as r } from "./CommentStore-CysGkBHp.mjs";
|
|
4
4
|
import { t as i } from "./config-DMjLBcZ2.mjs";
|
|
5
5
|
import { computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createVNode as u, defineAsyncComponent as d, defineComponent as f, normalizeClass as p, openBlock as m, ref as h, toDisplayString as g, unref as _, useTemplateRef as v, watch as y } from "vue";
|
|
6
6
|
import { useI18n as b } from "vue-i18n";
|
|
@@ -26,7 +26,7 @@ var x = { class: "d-flex flex-column comment-input-container mt-3" }, S = {
|
|
|
26
26
|
},
|
|
27
27
|
emits: ["cancelAction", "newComment"],
|
|
28
28
|
setup(f, { emit: T }) {
|
|
29
|
-
let E = d(() => import("./CheckIdentityModal-
|
|
29
|
+
let E = d(() => import("./CheckIdentityModal-p2kvRJbK.mjs")), D = d(() => import("./CommentName-C5cbnPOy.mjs")), O = d(() => import("./MessageModal-BcqS77v6.mjs").then((e) => e.n)), k = d(() => import("./ClassicEmojiPicker-B4TAlZvo.mjs")), A = d(() => import("./ClassicContentEditable-CWmtRihd.mjs")), j = f, M = T, N = i.MAX_COMMENT, P = h(""), F = h(!1), I = h(!1), L = h(!1), R = v("textarea"), { t: z } = b(), B = n(), V = r(), H = e(), U = a(() => W.value <= N), W = a(() => P.value.length), G = a(() => j.inAnswerComment?.commentId ? z("Answer a comment") : z("Write a comment")), K = a(() => "-comment" + (j.inAnswerComment?.commentId ?? "-parent"));
|
|
30
30
|
y(() => j.focus, () => R?.value?.focus());
|
|
31
31
|
function q(e) {
|
|
32
32
|
P.value += e;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentInput-DPMj47uE.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-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":"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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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "./rolldown-runtime-Dy4uBu1J.mjs";
|
|
2
|
-
import { i as t } from "./classicApi-
|
|
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-
|
|
4
|
+
import { t as r } from "./CommentStore-CysGkBHp.mjs";
|
|
5
5
|
import { t as i } from "./ClassicPopover-DWR50Nxi.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";
|
|
@@ -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-
|
|
107
|
+
let m = p(() => import("./CommentInput-ByigNGTw.mjs")), g = p(() => import("./CommentParentInfo-BO2YNPPR.mjs")), _ = p(() => import("./LikeSection-wNtNtvR6.mjs")), C = p(() => import("./CommentMoreActions-Bnx_Gjly.mjs")), T = p(() => import("./CommentList-BmyJ4sBi.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":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCA,MAAM,OAAO,YAAY;EAQzB,MAAM,QAAQ;EAMd,MAAM,iBAAiB,IAAI,IAAI;EAC/B,MAAM,OAAO,IAAI,EAAE;EACnB,MAAM,eAA+D,IAAI,KAAA,CAAS;EAGlF,MAAM,EAAE,MAAM,QAAQ;EAGtB,MAAM,iBAAiB,eAAe,MAAM,QAAQ,QAAQ,SAAS,GAAG;EACxE,MAAM,WAAW,eAAe,MAAM,QAAQ,OAAO,QAAQ;EAC7D,MAAM,iBAAiB,eAAe,gBAAgB,MAAM,QAAQ,KAAK;EACzE,MAAM,WAAW,eAAe,eAAe,QAAQ,EAAE,WAAW,IAAI,EAAE,WAAW,CAAC;EACtF,MAAM,iBAAiB,eAAe;GACpC,IAAI,CAAC,eAAe,SAAS,CAAC,eAAe,OAC3C,OAAO,MAAM,QAAQ;GAEvB,OAAO,MAAM,QAAQ,QAAQ,UAAU,GAAG,GAAG,IAAI;EACnD,CAAC;EAED,gBAAc;GACZ,kBAAkB;GAClB,aAAa,QAAQ,kBAAkB;IACrC,kBAAkB;GACpB,GAAG,GAAK;EACV,CAAC;EAED,kBAAgB,cAAc,aAAa,KAA0B,CAAC;EAGtE,SAAS,OAAO,MAAsB;GACpC,OAAOA,sBAAc,OAAO,IAAI;EAClC;EACA,SAAS,oBAAoB;GAC3B,IAAI,CAAC,MAAM,QAAQ,MACjB,KAAK,QAAQ;GAEf,KAAK,QAAQ,MAAM,MAAM,QAAQ,IAAI,CAAC,CAAC,QAAQ;EACjD;;;;;;;;;;;;;;;;;;;;;;;;;;AC3FO,IAAAC,eAAA,EAAA,OAAM,2BAA0B;AAC9B,IAAAC,eAAA,EAAA,OAAM,oCAAmC;;;;;CAgB1C,OAAM;;;;CAjBZ,OAAAG,UAAA,GAAAC,mBAiCM,OAjCNL,cAiCM;EAhCJM,mBAsBM,OAtBNL,cAsBM;GArBJK,mBAI0B,UAAA;IAHvB,IAAE,oBAAsB,OAAA,QAAQ;IAChC,OAAKC,eAAA,CAAE,OAAA,iBAAc,gBAAA,eAChB,sBAAsB,CAAA;GACxB,GAAAC,gBAAA,OAAA,QAAQ,GAAA,IAAAN,YAAA;GACdO,YAIE,OAAA,mBAAA;IAHC,SAAS,OAAA;IACT,QAAM,oBAAsB,OAAA,QAAQ;IACpC,SAAS,OAAA,EAAC,iBAAA;;;;;;GAEbH,mBAEO,QAAA;IAFA,UAAU,OAAA,QAAQ;IAAM,OAAM;GAChC,GAAAE,gBAAA,OAAA,IAAI,GAAA,GAAA,UAAA;GAGD,OAAA,QAAQ,SAAS,OAAA,aADzBJ,UAAA,GAAAC,mBAMM,OANN,YAMM,CAFJI,YAAqC,OAAA,cAAA;IAAzB,MAAM;IAAI,OAAM;GAAS,CAAA,GAAAC,gBAAA,MACrCF,gBAAG,OAAA,EAAC,mBAAA,EAAA,IAA0B,OAAA,QAAQ,MAAK,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KAAAG,mBAAA,QAAA,IAAA;GAEjC,OAAA,aAAZP,UAAA,GAAAC,mBAA4D,QAAA;;IAApC,OAAKE,eAAA,YAAc,OAAA,QAAQ,KAAK;;;EAE1DI,mBAAA,gCAAA;EACAL,mBAAuC,OAAA,EAAlC,WAAQ,OAAA,OAAO,OAAA,cAAc,EAAA,GAAA,MAAA,GAAA,UAAA;EAClCK,mBAAA,iBAAA;EAEQ,OAAA,kBADRP,UAAA,GAAAC,mBAKI,KAAA;;GAHF,OAAM;GACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,iBAAc,CAAI,OAAA;EACtB,GAAAG,gBAAA,OAAA,QAAQ,GAAA,CAAA,KAAAG,mBAAA,QAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC4DlB,MAAM,eAAe,2BAA2B,OAAO,8BAAsB;EAC7E,MAAM,oBAAoB,2BAClB,OAAO,mCACf;EACA,MAAM,cAAc,2BACZ,OAAO,6BACf;EACA,MAAM,qBAAqB,2BACnB,OAAO,oCACf;EACA,MAAM,cAAc,2BAA2B,OAAO,6BAAqB;EAI3E,MAAM,QAAQ;EASd,MAAM,OAAO;EAGb,MAAM,qBAAqB,IAAI,KAAK;EACpC,MAAM,cAAc,IAAI,KAAK;EAC7B,MAAM,QAAQ,IAAI,KAAK;EACvB,MAAM,oBAAoB,IAAI,KAAK;EACnC,MAAM,gBAAiD,IAAI,KAAA,CAAS;EAGpE,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,YAAY,aAAa;EAC/B,MAAM,eAAe,gBAAgB;EAIrC,MAAM,mBAAmB,SAAS;GAChC,MAAsB;IACpB,OAAO,MAAM;GACf;GACA,IAAI,OAAuB;IACzB,IAAI,CAAC,YAAY,OACf,KAAK,kBAAkB,KAAK;GAEhC;EACF,CAAC;EACD,MAAM,aAAa,eAAe,KAAA,MAAc,MAAM,QAAQ,QAAQ;EACtE,MAAM,YAAY,eAAe;GAC/B,OACG,SAAS,UAAU,mBACjB,UAAU,eAAe,MAAM,SAAS,aAAa,MACtD,UAAU,eAAe,MAAM,mBACjC,SAAS,UAAU;EAEvB,CAAC;EACD,MAAM,iBAAiB,eAAe,gBAAgB,MAAM,QAAQ,KAAK;EACzE,MAAM,iBAAiB,eAAe;GACpC,OAAO,aAAa,kBAClB,MAAM,QACN,MAAM,SACN,KAAA,MAAc,UAAU,UAC1B;EACF,CAAC;EACD,MAAM,cAAc,eAAe,KAAA,MAAc,MAAM,SAAS,YAAY;EAI5E,SAAS,gBAAsB;GAC7B,mBAAmB,QAAQ;GAC3B,MAAM,QAAQ,CAAC,MAAM;EACvB;EACA,SAAS,WAAW,SAA+B;GACjD,mBAAmB,QAAQ,SAAS;GACpC,IAAI,CAAC,YAAY,OACf,cAAc,QAAQ;IAAE,MAAM;IAAmB;GAAQ;GAE3D,mBAAmB,QAAQ;EAC7B;EACA,SAAS,mBAAmB,WAAmB,QAAQ,MAAM;GAC3D,MAAM,gBAAgB,MAAM;GAC5B,IAAI,cAAc,WAAW;IAC3B,IAAI,OACF,cAAc,UAAU,KAAK,SAAS;SACjC;KACL,MAAM,QAAQ,cAAc,UAAU,QAAQ,SAAS;KACvD,IAAI,UAAU,IACZ,cAAc,UAAU,OAAO,OAAO,CAAC;IAE3C;GACF,OAAO,IAAI,OACT,cAAc,YAAY,CAAC,SAAS;GAEtC,KAAK,kBAAkB,aAAa;EACtC;EACA,SAAS,oBAAoB;GAC3B,IAAI,CAAC,YAAY,OACf,KAAK,eAAe;EAExB;EACA,SAAS,aAAa,OAAuB;GAC3C,IAAI,aAAa,MAAM,MACrB,mBAAmB,MAAM,QAAQ,SAAS;QACrC,IAAI,aAAa,MAAM,MAC5B,mBAAmB,MAAM,QAAQ,WAAW,KAAK;GAEnD,cAAc,QAAQ;EACxB;EACA,SAAS,uBAAuB,WAAmB;GACjD,mBAAmB,WAAW,KAAK;EACrC;EAEA,SAAa,EACX,aACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3MQ,IAAA,aAAA,EAAA,OAAM,gEAA+D;AAWnE,IAAA,aAAA,EAAA,OAAM,iCAAgC;;;CAiCzC,OAAM;;;CAhDZ,OAAAE,UAAA,GAAAC,mBA2EM,OAAA,EA1EJ,OAAKC,eAAA,CAAC,kEACE,OAAA,cAAU,CAAK,OAAA,aAAU,aAAA,UAAA,CAAA,EAAA,GAAA;EAEjCC,mBASM,OATN,YASM,CARJC,YAA+D,OAAA,qBAAA;GAA5C,SAAS,OAAA;GAAU,cAAY,OAAA;EAClD,GAAA,MAAA,GAAA,CAAA,WAAA,YAAA,CAAA,GAAAA,YAME,OAAA,uBAAA;GALQ,SAAS,OAAA;GAAA,oBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,mBAAgB;GAChC,cAAY,OAAA;GACZ,SAAS,OAAA;GACT,QAAQ,OAAA;GACR,iBAAgB,OAAA;;;;;;;EAGL,OAAA,kBAAhBJ,UAAA,GAAAC,mBAsDWI,UAAA,EAAA,KAAA,EAAA,GAAA;GArDTF,mBAqBM,OArBN,YAqBM;IApBJC,YAIE,OAAA,gBAAA;KAHQ,SAAS,OAAA;KAAA,oBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,OAAA,mBAAgB;KAChC,cAAY,OAAA;KACZ,SAAS,OAAA;;;;;;IAGH,CAAA,OAAA,QAAQ,YAAY,OAAA,kBAD7BJ,UAAA,GAAAC,mBAMS,UAAA;;KAJP,OAAM;KACL,SAAO,OAAA;IAEL,GAAAK,gBAAA,OAAA,EAAC,WAAA,CAAA,GAAA,CAAA,KAAAC,mBAAA,QAAA,IAAA;IAGE,OAAA,cAAc,OAAA,QAAQ,YAD9BP,UAAA,GAAAC,mBAOS,UAAA;;KALP,OAAM;KACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,oBAAiB,CAAI,OAAA;IAE1B,GAAA,CAAAO,gBAAAF,gBAAA,OAAA,EAAC,gBAAA,CAAA,IAAqB,KACzB,CAAA,GAAAF,YAAqE,OAAA,oBAAA,EAAnD,OAAKF,eAAA,EAAA,mBAAuB,OAAA,kBAAiB,CAAA,EAAA,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA,KAAAK,mBAAA,QAAA,IAAA;;GAI3D,OAAA,sBAAsB,OAAA,kBAD9BP,UAAA,GAAAS,YAQE,OAAA,iBAAA;;IANA,OAAM;IACL,OAAO,OAAA;IACP,SAAS,OAAA;IACT,qBAAmB,OAAA;IACnB,gBAAa,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,qBAAkB;IACjC,cAAa,OAAA;;;;;;GAGR,OAAA,QAAQ,WAAW,UAAM,CAAK,OAAA,cADtCT,UAAA,GAAAC,mBAqBM,OArBN,YAqBM,CAjBJE,mBAMS,UAAA;IALP,OAAM;IACL,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,OAAA,cAAW,CAAI,OAAA;GAEvB,GAAA,CAAAC,YAA+D,OAAA,oBAAA,EAA7C,OAAKF,eAAA,EAAA,mBAAuB,OAAA,YAAW,CAAA,EAAA,GAAA,MAAA,GAAA,CAAA,OAAA,CAAA,GAAMM,gBAAA,MAC/DF,gBAAG,OAAA,EAAC,cAAA,EAAA,IAAqB,OAAA,QAAQ,UAAU,OAAM,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAG3C,OAAA,eADRN,UAAA,GAAAS,YASE,OAAA,gBAAA;;IAPA,KAAI;IACH,SAAS,OAAA;IACT,MAAM;IACN,qBAAmB,OAAA,QAAQ;IAC3B,QAAQ,OAAA;IACR,mBAAiB,OAAA;IACjB,kBAAiB,OAAA;;;;;;;;EAKhB,OAAA,qBADRT,UAAA,GAAAS,YAKE,OAAA,sBAAA;;GAHA,OAAM;GACL,cAAY,OAAA,QAAQ;GACpB,cAAY,OAAA"}
|
|
@@ -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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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./ClassicLoading-CXfMjpyl.mjs";
|
|
2
|
-
import { t } from "./classicApi-
|
|
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-
|
|
68
|
+
let N = l(() => import("./CommentItem-BbUPCvEC.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(() => [{
|
|
69
69
|
title: G("The most recent"),
|
|
70
70
|
value: "DATE_DESC"
|
|
71
71
|
}, {
|
|
@@ -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,6 +1,6 @@
|
|
|
1
|
-
import { i as e, t } from "./classicApi-
|
|
1
|
+
import { i as e, t } from "./classicApi-CGipMqf7.mjs";
|
|
2
2
|
import { t as n } from "./useSelenium-DAM6EF3J.mjs";
|
|
3
|
-
import { t as r } from "./CommentStore-
|
|
3
|
+
import { t as r } from "./CommentStore-CysGkBHp.mjs";
|
|
4
4
|
import { Fragment as i, computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createVNode as u, defineAsyncComponent as d, defineComponent as f, openBlock as p, ref as m, renderList as h, resolveComponent as g, toDisplayString as _, unref as v, withCtx as y, withKeys as b } from "vue";
|
|
5
5
|
import { useI18n as x } from "vue-i18n";
|
|
6
6
|
import S from "vue-material-design-icons/DotsVertical.vue";
|
|
@@ -31,7 +31,7 @@ var C = { key: 0 }, w = [
|
|
|
31
31
|
},
|
|
32
32
|
emits: ["update:comment", "deleteComment"],
|
|
33
33
|
setup(f, { emit: E }) {
|
|
34
|
-
let D = d(() => import("./ClassicPopover-DWR50Nxi.mjs").then((e) => e.n)), O = d(() => import("./ReportAbuseModal-
|
|
34
|
+
let D = d(() => import("./ClassicPopover-DWR50Nxi.mjs").then((e) => e.n)), O = d(() => import("./ReportAbuseModal-Bi6upLga.mjs")), k = d(() => import("./EditCommentModal-BDzkED7G.mjs")), A = d(() => import("./MessageModal-BcqS77v6.mjs").then((e) => e.n)), j = f, M = E, N = m(!1), P = m(!1), F = m(void 0), I = m(void 0), L = m(!1), R = m(!1), z = m(!1), { t: B } = x(), { seleniumFormat: V } = n(), H = e(), U = r(), W = a({
|
|
35
35
|
get() {
|
|
36
36
|
return j.comment;
|
|
37
37
|
},
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommentMoreActions-C1l4Y_HY.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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"}
|