@saooti/octopus-sdk 42.2.1 → 42.2.2
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-fO5eaqLJ.mjs → AdvancedSearch-C4segSRv.mjs} +6 -6
- package/dist/AdvancedSearch-C4segSRv.mjs.map +1 -0
- package/dist/AdvancedSearch-DD9tnLCw.mjs.map +1 -0
- package/dist/{CategoryFilter-Cu2a0YE9.mjs → CategoryFilter-CpplEC8n.mjs} +5 -5
- package/dist/CategoryFilter-CpplEC8n.mjs.map +1 -0
- package/dist/CategoryFilter-cbQR_ySd.mjs.map +1 -0
- package/dist/{CategoryList-DkxZDrO5.mjs → CategoryList-BTabY3vQ.mjs} +2 -2
- package/dist/CategoryList-BTabY3vQ.mjs.map +1 -0
- package/dist/CategoryList-DHEJoaez.mjs.map +1 -0
- package/dist/CategoryPage-BbsCC3Wr.mjs.map +1 -0
- package/dist/CategoryPage-BxvUmThb.mjs.map +1 -0
- package/dist/{CategoryPage-3HFz1i7_.mjs → CategoryPage-D755GvQZ.mjs} +3 -3
- package/dist/CategoryPage-D755GvQZ.mjs.map +1 -0
- package/dist/CategoryPage-DDBJ2krs.mjs.map +1 -0
- package/dist/CategoryPage-DRCYjOqG.mjs.map +1 -0
- package/dist/ChapteringModal-CSQqCWIk.mjs.map +1 -0
- package/dist/ChapteringModal-Dt8Rsauh.mjs.map +1 -0
- package/dist/{ChapteringModal-C-rdkbSz.mjs → ChapteringModal-ei6ZqVJU.mjs} +2 -2
- package/dist/ChapteringModal-ei6ZqVJU.mjs.map +1 -0
- package/dist/CheckIdentityModal-CNFVJVB_.mjs.map +1 -0
- package/dist/{CheckIdentityModal-N9h8yvhC.mjs → CheckIdentityModal-cpMOuJGv.mjs} +3 -3
- package/dist/CheckIdentityModal-cpMOuJGv.mjs.map +1 -0
- package/dist/ClipboardModal-2ZGF38VB.mjs.map +1 -0
- package/dist/{ClipboardModal-CnieIOJr.mjs → ClipboardModal-DzCUqSph.mjs} +2 -2
- package/dist/ClipboardModal-DzCUqSph.mjs.map +1 -0
- package/dist/CommentInput-CV46HJN8.mjs.map +1 -0
- package/dist/{CommentInput-CEioyN7X.mjs → CommentInput-D_p03L68.mjs} +6 -6
- package/dist/CommentInput-D_p03L68.mjs.map +1 -0
- package/dist/CommentInput-DwRbD74k.mjs.map +1 -0
- package/dist/CommentItem-B6_XUaFR.mjs.map +1 -0
- package/dist/CommentItem-CbbmwVXB.mjs.map +1 -0
- package/dist/CommentItem-DfKKazY0.mjs.map +1 -0
- package/dist/CommentItem-JRjSLmui.mjs.map +1 -0
- package/dist/{CommentItem-BefuRoxQ.mjs → CommentItem-MFN0JNW1.mjs} +8 -8
- package/dist/CommentItem-MFN0JNW1.mjs.map +1 -0
- package/dist/{CommentList-BsPwzqkf.mjs → CommentList-BkKy5ftL.mjs} +3 -3
- package/dist/CommentList-BkKy5ftL.mjs.map +1 -0
- package/dist/CommentList-BrP71Ug4.mjs.map +1 -0
- package/dist/CommentList-Ng_YXr74.mjs.map +1 -0
- package/dist/CommentList-tKA7NFHM.mjs.map +1 -0
- package/dist/CommentList-yarlxaXg.mjs.map +1 -0
- package/dist/{CommentMoreActions-C86aqy8M.mjs → CommentMoreActions-CBSvuOGJ.mjs} +5 -5
- package/dist/CommentMoreActions-CBSvuOGJ.mjs.map +1 -0
- package/dist/CommentMoreActions-D7guBdA7.mjs.map +1 -0
- package/dist/CommentName-frCHmngc.mjs.map +1 -0
- package/dist/{CommentName-DT1QyPi3.mjs → CommentName-zTMSdG4d.mjs} +3 -3
- package/dist/CommentName-zTMSdG4d.mjs.map +1 -0
- package/dist/{CommentParentInfo-9Fe-3e6c.mjs → CommentParentInfo-CRTYPb8P.mjs} +2 -2
- package/dist/CommentParentInfo-CRTYPb8P.mjs.map +1 -0
- package/dist/CommentParentInfo-D8qquB6k.mjs.map +1 -0
- package/dist/CommentParentInfo-DC4Q6wNO.mjs.map +1 -0
- package/dist/CommentParentInfo-temUvqNv.mjs.map +1 -0
- package/dist/{CommentPlayer-CiWQM64Y.mjs → CommentPlayer-BMuLmZdI.mjs} +3 -3
- package/dist/CommentPlayer-BMuLmZdI.mjs.map +1 -0
- package/dist/CommentPlayer-BPA_lEoE.mjs.map +1 -0
- package/dist/CommentPlayer-CUNi1Lxv.mjs.map +1 -0
- package/dist/{CommentSection-Be38YIkC.mjs → CommentSection-B91sHMDT.mjs} +5 -5
- package/dist/CommentSection-B91sHMDT.mjs.map +1 -0
- package/dist/CommentSection-CpYd7i8U.mjs.map +1 -0
- package/dist/CommentSection-CrqweNX4.mjs.map +1 -0
- package/dist/CommentSection-G8rMWPrM.mjs.map +1 -0
- package/dist/CommentSection-xjY6h7nn.mjs.map +1 -0
- package/dist/CommentStore-9WWuGwIj.mjs.map +1 -0
- package/dist/{CommentStore-Dv7j94Uo.mjs → CommentStore-ClU882RI.mjs} +2 -2
- package/dist/CommentStore-ClU882RI.mjs.map +1 -0
- package/dist/ContractPreviewModal-C4_20E99.mjs.map +1 -0
- package/dist/{ContractPreviewModal-CPT6bDpJ.mjs → ContractPreviewModal-Dn5MeLFo.mjs} +2 -2
- package/dist/ContractPreviewModal-Dn5MeLFo.mjs.map +1 -0
- package/dist/{DownloadPodcastButton-6D8qNAkT.mjs → DownloadPodcastButton-BI_sZWcJ.mjs} +3 -3
- package/dist/DownloadPodcastButton-BI_sZWcJ.mjs.map +1 -0
- package/dist/DownloadPodcastButton-CSRcg8Nl.mjs.map +1 -0
- package/dist/EditCommentModal-KAP1l9RK.mjs.map +1 -0
- package/dist/{EditCommentModal-aAcjhc0v.mjs → EditCommentModal-RbVMVDOp.mjs} +2 -2
- package/dist/EditCommentModal-RbVMVDOp.mjs.map +1 -0
- package/dist/{EmissionGroupChooser-Djt1IZg7.mjs → EmissionGroupChooser-BXqM4iXP.mjs} +2 -2
- package/dist/EmissionGroupChooser-BXqM4iXP.mjs.map +1 -0
- package/dist/EmissionGroupChooser-CO1WBOUi.mjs.map +1 -0
- package/dist/EmissionInlineList-B-r4eI3D.mjs.map +1 -0
- package/dist/{EmissionInlineList-BcrKpW8S.mjs → EmissionInlineList-Cy1lbYKY.mjs} +6 -6
- package/dist/EmissionInlineList-Cy1lbYKY.mjs.map +1 -0
- package/dist/EmissionInlineList-IKPyjBTQ.mjs.map +1 -0
- package/dist/EmissionItem-982WkWkg.mjs.map +1 -0
- package/dist/EmissionItem-B8q9hnN5.mjs.map +1 -0
- package/dist/{EmissionItem-DfkPRcPz.mjs → EmissionItem-BwXm3nNx.mjs} +5 -5
- package/dist/EmissionItem-BwXm3nNx.mjs.map +1 -0
- package/dist/EmissionItem-ZDlQ7B9S.mjs.map +1 -0
- package/dist/{EmissionList-DSuGp0JO.mjs → EmissionList-C8OxrndH.mjs} +6 -6
- package/dist/EmissionList-C8OxrndH.mjs.map +1 -0
- package/dist/EmissionList-C9-UUWMV.mjs.map +1 -0
- package/dist/EmissionList-Dk9xS4s_.mjs.map +1 -0
- package/dist/EmissionList-nrY7ASws.mjs.map +1 -0
- package/dist/EmissionList-vH4NX1NW.mjs.map +1 -0
- package/dist/EmissionPage-BHAPlZw-.mjs.map +1 -0
- package/dist/EmissionPage-B_2JalGG.mjs.map +1 -0
- package/dist/EmissionPage-D4PjyZzN.mjs.map +1 -0
- package/dist/EmissionPage-HGPCRuZD.mjs.map +1 -0
- package/dist/{EmissionPage-Bo9fK8HE.mjs → EmissionPage-nCNIiWCo.mjs} +25 -18
- package/dist/EmissionPage-nCNIiWCo.mjs.map +1 -0
- package/dist/EmissionPlayerItem-B_wRzikv.mjs.map +1 -0
- package/dist/{EmissionPlayerItem-D21OrPmm.mjs → EmissionPlayerItem-Degbnz9F.mjs} +5 -5
- package/dist/EmissionPlayerItem-Degbnz9F.mjs.map +1 -0
- package/dist/EmissionPlayerItem-Dkd0o1ee.mjs.map +1 -0
- package/dist/EmissionPresentationItem-BQ7HhOlC.mjs.map +1 -0
- package/dist/{EmissionPresentationItem-CwDIBurH.mjs → EmissionPresentationItem-CwBGPIgz.mjs} +2 -2
- package/dist/EmissionPresentationItem-CwBGPIgz.mjs.map +1 -0
- package/dist/{EmissionPresentationList-CASI5laP.mjs → EmissionPresentationList-BKI5mQdw.mjs} +4 -4
- package/dist/EmissionPresentationList-BKI5mQdw.mjs.map +1 -0
- package/dist/EmissionPresentationList-CLli23rs.mjs.map +1 -0
- package/dist/EmissionsPage-CO2xgVOR.mjs.map +1 -0
- package/dist/{EmissionsPage-Bw8Qtzlk.mjs → EmissionsPage-Cj7su56Z.mjs} +5 -5
- package/dist/EmissionsPage-Cj7su56Z.mjs.map +1 -0
- package/dist/EmissionsPage-DJdy0re_.mjs.map +1 -0
- package/dist/EmissionsPage-DR9r7_gH.mjs.map +1 -0
- package/dist/EmissionsPage-OVNfLKFu.mjs.map +1 -0
- package/dist/Error403Page-Ch535DfU.mjs.map +1 -0
- package/dist/{Error403Page-nTYCHwTi.mjs → Error403Page-DW2kK8ZZ.mjs} +2 -2
- package/dist/Error403Page-DW2kK8ZZ.mjs.map +1 -0
- package/dist/FooterGarSection-B76j-WZS.mjs.map +1 -0
- package/dist/{FooterGarSection-Cod8Key5.mjs → FooterGarSection-DVdF5RFq.mjs} +4 -4
- package/dist/FooterGarSection-DVdF5RFq.mjs.map +1 -0
- package/dist/FooterSection-BQiO-D1p.mjs.map +1 -0
- package/dist/{FooterSection-4WXBZj7c.mjs → FooterSection-CpYI9OGH.mjs} +5 -5
- package/dist/FooterSection-CpYI9OGH.mjs.map +1 -0
- package/dist/{HomeDropdown-CVe7yF6Y.mjs → HomeDropdown-D7FezAO8.mjs} +3 -3
- package/dist/HomeDropdown-D7FezAO8.mjs.map +1 -0
- package/dist/HomeDropdown-DQoMvBgU.mjs.map +1 -0
- package/dist/HomePage-BWs_az04.mjs.map +1 -0
- package/dist/HomePage-CMPKjRFA.mjs.map +1 -0
- package/dist/HomePage-CsXaeTCW.mjs.map +1 -0
- package/dist/HomePage-NH7OxpA_.mjs.map +1 -0
- package/dist/{HomePage-DupmOw6F.mjs → HomePage-vo6At2bL.mjs} +4 -4
- package/dist/HomePage-vo6At2bL.mjs.map +1 -0
- package/dist/{PodcastRubriqueList-BeTq7IRu.mjs → InlineRubriqueList-3ZVN9GJk.mjs} +14 -12
- package/dist/InlineRubriqueList-3ZVN9GJk.mjs.map +1 -0
- package/dist/InlineRubriqueList-D03VCzg8.mjs.map +1 -0
- package/dist/LikeSection-DtthHZj6.mjs.map +1 -0
- package/dist/{LikeSection-DAid96g9.mjs → LikeSection-jKjhnj88.mjs} +4 -4
- package/dist/LikeSection-jKjhnj88.mjs.map +1 -0
- package/dist/{ListPaginate-C9saxru9.mjs → ListPaginate-BXNnw_I8.mjs} +3 -3
- package/dist/ListPaginate-BXNnw_I8.mjs.map +1 -0
- package/dist/ListPaginate-COsL4t78.mjs.map +1 -0
- package/dist/ListPaginate-JuC0L113.mjs.map +1 -0
- package/dist/LiveHorizontalList-CFs9mGYs.mjs.map +1 -0
- package/dist/LiveHorizontalList-CWBQkS78.mjs.map +1 -0
- package/dist/LiveHorizontalList-DwPVmnvH.mjs.map +1 -0
- package/dist/LiveHorizontalList-jducN58c.mjs.map +1 -0
- package/dist/{LiveHorizontalList-OArlzudf.mjs → LiveHorizontalList-wgXkgFLv.mjs} +4 -4
- package/dist/LiveHorizontalList-wgXkgFLv.mjs.map +1 -0
- package/dist/LiveList-Bp-feBp9.mjs.map +1 -0
- package/dist/LiveList-ByyCyWUl.mjs.map +1 -0
- package/dist/{LiveList-EqIo_cye.mjs → LiveList-CA5n6VeN.mjs} +6 -6
- package/dist/LiveList-CA5n6VeN.mjs.map +1 -0
- package/dist/LiveList-Cah5VFun.mjs.map +1 -0
- package/dist/LiveList-DTAnN32j.mjs.map +1 -0
- package/dist/LivesPage-CNPMz3xS.mjs.map +1 -0
- package/dist/{LivesPage-BmHiBN8A.mjs → LivesPage-CTjXgU-Y.mjs} +5 -5
- package/dist/LivesPage-CTjXgU-Y.mjs.map +1 -0
- package/dist/LivesPage-CdhWyikV.mjs.map +1 -0
- package/dist/LivesPage-CwvFSl6G.mjs.map +1 -0
- package/dist/LivesPage-DyIfBEPX.mjs.map +1 -0
- package/dist/{MapPage-DcXKTGGh.mjs → MapPage-C_nGG0_5.mjs} +3 -3
- package/dist/MapPage-C_nGG0_5.mjs.map +1 -0
- package/dist/MapPage-DXV40zWN.mjs.map +1 -0
- package/dist/{MobileMenu-C0IYBWwF.mjs → MobileMenu-C95GAIm0.mjs} +4 -4
- package/dist/MobileMenu-C95GAIm0.mjs.map +1 -0
- package/dist/MobileMenu-CfHqWqsL.mjs.map +1 -0
- package/dist/NewsletterModal-4Lei4Y59.mjs.map +1 -0
- package/dist/{NewsletterModal-BzlUlz3P.mjs → NewsletterModal-B6ky7DBC.mjs} +2 -2
- package/dist/NewsletterModal-B6ky7DBC.mjs.map +1 -0
- package/dist/OrganisationChooser-BufDZsSd.mjs.map +1 -0
- package/dist/{OrganisationChooser-Bm4zqqCH.mjs → OrganisationChooser-CA0_LiTH.mjs} +3 -3
- package/dist/OrganisationChooser-CA0_LiTH.mjs.map +1 -0
- package/dist/{OrganisationChooserLight-BQ9B91mO.mjs → OrganisationChooserLight-BwG5mNdW.mjs} +2 -2
- package/dist/OrganisationChooserLight-BwG5mNdW.mjs.map +1 -0
- package/dist/OrganisationChooserLight-C2oGlc9Z.mjs.map +1 -0
- package/dist/{PageNotFound-BVQ8M8sO.mjs → PageNotFound-BHpjyNDo.mjs} +3 -3
- package/dist/PageNotFound-BHpjyNDo.mjs.map +1 -0
- package/dist/PageNotFound-IMnfLZqX.mjs.map +1 -0
- package/dist/{ParticipantInlineList-BQtQZFW1.mjs → ParticipantInlineList-A8UwjE4m.mjs} +5 -5
- package/dist/ParticipantInlineList-A8UwjE4m.mjs.map +1 -0
- package/dist/ParticipantInlineList-BpVOpEBm.mjs.map +1 -0
- package/dist/ParticipantInlineList-C5jWxedt.mjs.map +1 -0
- package/dist/ParticipantInlineList-C78uhskc.mjs.map +1 -0
- package/dist/ParticipantItem--Wv16z3V.mjs.map +1 -0
- package/dist/ParticipantItem-B3k4mf2V.mjs.map +1 -0
- package/dist/ParticipantItem-DAPOMGZD.mjs.map +1 -0
- package/dist/{ParticipantItem-EDPkxTT-.mjs → ParticipantItem-Szz8WXI6.mjs} +4 -4
- package/dist/ParticipantItem-Szz8WXI6.mjs.map +1 -0
- package/dist/ParticipantPage-BbKUwNKL.mjs.map +1 -0
- package/dist/ParticipantPage-Byq-9aCQ.mjs.map +1 -0
- package/dist/ParticipantPage-D4RVBlE-.mjs.map +1 -0
- package/dist/ParticipantPage-DfLxuZf-.mjs.map +1 -0
- package/dist/{ParticipantPage-BF-s1oof.mjs → ParticipantPage-y3OoBod8.mjs} +9 -9
- package/dist/ParticipantPage-y3OoBod8.mjs.map +1 -0
- package/dist/{ParticipantsPage-Bzt8Hxah.mjs → ParticipantsPage--BxmzVwz.mjs} +7 -7
- package/dist/ParticipantsPage--BxmzVwz.mjs.map +1 -0
- package/dist/ParticipantsPage-BEPHaCy5.mjs.map +1 -0
- package/dist/ParticipantsPage-BlQavFT6.mjs.map +1 -0
- package/dist/ParticipantsPage-D8ja25F9.mjs.map +1 -0
- package/dist/ParticipantsPage-R8LVrDFY.mjs.map +1 -0
- package/dist/{PlayerAnonymousModal-CbrqO1hs.mjs → PlayerAnonymousModal-BGPpTBPW.mjs} +3 -3
- package/dist/PlayerAnonymousModal-BGPpTBPW.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-BW239BiA.mjs.map +1 -0
- package/dist/PlayerCompact-BFC95d7Y.mjs.map +1 -0
- package/dist/PlayerCompact-C-WCTFZN.mjs.map +1 -0
- package/dist/{PlayerCompact-BtKfz384.mjs → PlayerCompact-DnJns8S2.mjs} +4 -4
- package/dist/PlayerCompact-DnJns8S2.mjs.map +1 -0
- package/dist/PlayerComponent-B8AGq9pg.mjs.map +1 -0
- package/dist/{PlayerComponent-CxNkDcFc.mjs → PlayerComponent-BRBrXVjI.mjs} +27 -39
- package/dist/PlayerComponent-BRBrXVjI.mjs.map +1 -0
- package/dist/PlayerComponent-BbvNS7sy.mjs.map +1 -0
- package/dist/PlayerComponent-By_JAwx_.mjs.map +1 -0
- package/dist/PlayerComponent-C425OWjX.mjs.map +1 -0
- package/dist/PlayerComponent-C5PNQ3TW.mjs.map +1 -0
- package/dist/PlayerComponent-Cnk_vePj.mjs.map +1 -0
- package/dist/PlayerComponent-CovfufPB.mjs.map +1 -0
- package/dist/PlayerComponent-DC4jQIwE.mjs.map +1 -0
- package/dist/PlayerComponent-DEUmVv0M.mjs.map +1 -0
- package/dist/PlayerComponent-DOXY0vL0.mjs.map +1 -0
- package/dist/PlayerComponent-DajZbHv7.mjs.map +1 -0
- package/dist/PlayerComponent-DejSC061.mjs.map +1 -0
- package/dist/PlayerComponent-p7W2UNk6.mjs.map +1 -0
- package/dist/PlayerLarge-3zzN7qom.mjs.map +1 -0
- package/dist/{PlayerLarge-BH6BLQxk.mjs → PlayerLarge-B97rRmrJ.mjs} +12 -10
- package/dist/PlayerLarge-B97rRmrJ.mjs.map +1 -0
- package/dist/PlayerLarge-BzwrEgVR.mjs.map +1 -0
- package/dist/PlayerLarge-CLOwDO6Q.mjs.map +1 -0
- package/dist/PlayerLarge-Chv7pMOU.mjs.map +1 -0
- package/dist/PlayerLarge-CkWGaDiY.mjs.map +1 -0
- package/dist/PlayerLarge-D0NMzCRi.mjs.map +1 -0
- package/dist/PlayerLarge-D3obSnYt.mjs.map +1 -0
- package/dist/PlayerLarge-DLGXpE3K.mjs.map +1 -0
- package/dist/PlayerLarge-QtUrqNm5.mjs.map +1 -0
- package/dist/PlayerLarge-juuY9yOX.mjs.map +1 -0
- package/dist/PlayerLarge-n7zyM6b_.mjs.map +1 -0
- package/dist/PlayerLarge-o4FVk0QB.mjs.map +1 -0
- package/dist/PlayerLarge-tMW3v2La.mjs.map +1 -0
- package/dist/PlayerPlayButton-CTu0337E.mjs.map +1 -0
- package/dist/PlayerPlayButton-CfJWIpoP.mjs.map +1 -0
- package/dist/{PlayerPlayButton-DT2OdqnI.mjs → PlayerPlayButton-zKdHGzFr.mjs} +5 -5
- package/dist/PlayerPlayButton-zKdHGzFr.mjs.map +1 -0
- package/dist/{PlayerProgressBar-CSYnPjZb.mjs → PlayerProgressBar-BG5NG596.mjs} +4 -4
- package/dist/PlayerProgressBar-BG5NG596.mjs.map +1 -0
- package/dist/PlayerProgressBar-Cjv8JVY2.mjs.map +1 -0
- package/dist/PlayerProgressBar-Co0_YEF3.mjs.map +1 -0
- package/dist/PlayerStore-B-L2PQ_b.mjs.map +1 -0
- package/dist/PlayerStore-C2XzSrF5.mjs.map +1 -0
- package/dist/{PlayerStore-DukkcHI_.mjs → PlayerStore-vYmnOEA_.mjs} +3 -3
- package/dist/PlayerStore-vYmnOEA_.mjs.map +1 -0
- package/dist/PlayerVideo-DD6NaGkU.mjs.map +1 -0
- package/dist/{PlayerVideo-_Uz00K_T.mjs → PlayerVideo-Ds0oYeTC.mjs} +5 -5
- package/dist/PlayerVideo-Ds0oYeTC.mjs.map +1 -0
- package/dist/PlayerVideo-cYHZOYMv.mjs.map +1 -0
- package/dist/PlayerVideoDigiteka-BPJdJNEB.mjs.map +1 -0
- package/dist/{PlayerVideoDigiteka-CjfuxXBF.mjs → PlayerVideoDigiteka-C7xb0ndg.mjs} +3 -3
- package/dist/PlayerVideoDigiteka-C7xb0ndg.mjs.map +1 -0
- package/dist/PlayerVideoDigiteka-oqtYXqYK.mjs.map +1 -0
- package/dist/PlayerVideoHls-CB4psqbz.mjs.map +1 -0
- package/dist/{PlayerVideoHls-Dms7iTSo.mjs → PlayerVideoHls-xSNqzBEw.mjs} +4 -4
- package/dist/PlayerVideoHls-xSNqzBEw.mjs.map +1 -0
- package/dist/PlayerVideoHls-zNbegJFp.mjs.map +1 -0
- package/dist/PlaylistPage-BUj1Lzfp.mjs.map +1 -0
- package/dist/PlaylistPage-BhcJkM15.mjs.map +1 -0
- package/dist/PlaylistPage-BsHMB2nn.mjs.map +1 -0
- package/dist/{PlaylistPage-CQX0LhXn.mjs → PlaylistPage-D4mcAo00.mjs} +12 -12
- package/dist/PlaylistPage-D4mcAo00.mjs.map +1 -0
- package/dist/PlaylistPage-DjAgejp8.mjs.map +1 -0
- package/dist/PlaylistsPage-B3V5-WT9.mjs.map +1 -0
- package/dist/PlaylistsPage-DSjvWTw5.mjs.map +1 -0
- package/dist/{PlaylistsPage-Bd-u4qlc.mjs → PlaylistsPage-Dr6HKHf8.mjs} +7 -7
- package/dist/PlaylistsPage-Dr6HKHf8.mjs.map +1 -0
- package/dist/PodcastFilterList-C-8AF1Dn.mjs.map +1 -0
- package/dist/{PodcastFilterList-DkH6bqv_.mjs → PodcastFilterList-CYwPiGko.mjs} +3 -3
- package/dist/PodcastFilterList-CYwPiGko.mjs.map +1 -0
- package/dist/PodcastFilterList-C_d1SyTB.mjs.map +1 -0
- package/dist/PodcastFilterList-ClMsIUaO.mjs.map +1 -0
- package/dist/PodcastFilterList-DBS0kvW6.mjs.map +1 -0
- package/dist/PodcastImage-B8o3T5zK.mjs.map +1 -0
- package/dist/{PodcastImage-BtxcPlrh.mjs → PodcastImage-Bs1lpubL.mjs} +4 -4
- package/dist/PodcastImage-Bs1lpubL.mjs.map +1 -0
- package/dist/PodcastImage-DBB5689n.mjs.map +1 -0
- package/dist/PodcastImage-DNLZH0dY.mjs.map +1 -0
- package/dist/PodcastImage-DrV8oxG8.mjs.map +1 -0
- package/dist/{PodcastInlineList-CVWfH5np.mjs → PodcastInlineList-B7-2QswT.mjs} +2 -2
- package/dist/PodcastInlineList-B7-2QswT.mjs.map +1 -0
- package/dist/PodcastInlineList-BVMV6Wvd.mjs.map +1 -0
- package/dist/PodcastInlineList-BXPpF0YD.mjs.map +1 -0
- package/dist/PodcastInlineList-CLjO1SpD.mjs.map +1 -0
- package/dist/PodcastInlineList-Cf5YF0j9.mjs.map +1 -0
- package/dist/PodcastInlineListTemplate-BX0tXOFx.mjs.map +1 -0
- package/dist/{PodcastInlineListTemplate-BWw1Ix-7.mjs → PodcastInlineListTemplate-DCWn3r7s.mjs} +4 -4
- package/dist/PodcastInlineListTemplate-DCWn3r7s.mjs.map +1 -0
- package/dist/PodcastIsPlaying-BG1_FgVX.mjs.map +1 -0
- package/dist/{PodcastIsPlaying-B7YVeSyB.mjs → PodcastIsPlaying-BsObdQGR.mjs} +2 -2
- package/dist/PodcastIsPlaying-BsObdQGR.mjs.map +1 -0
- package/dist/PodcastIsPlaying-Csd-C2jr.mjs.map +1 -0
- package/dist/PodcastItem-CGmEwYT4.mjs.map +1 -0
- package/dist/PodcastItem-CN6gwARQ.mjs.map +1 -0
- package/dist/PodcastItem-CdLjZKxf.mjs.map +1 -0
- package/dist/PodcastItem-D1MwHzhE.mjs.map +1 -0
- package/dist/{PodcastItem-CFk8MX9D.mjs → PodcastItem-_8ErwIDG.mjs} +7 -7
- package/dist/PodcastItem-_8ErwIDG.mjs.map +1 -0
- package/dist/PodcastList-BXla7F3u.mjs.map +1 -0
- package/dist/PodcastList-BqE8dwdc.mjs.map +1 -0
- package/dist/PodcastList-BvC6iOS6.mjs.map +1 -0
- package/dist/PodcastList-CRwA-s7F.mjs.map +1 -0
- package/dist/PodcastList-CVFr9WNS.mjs.map +1 -0
- package/dist/PodcastList-DZKxDulS.mjs.map +1 -0
- package/dist/{PodcastList-BLXPFjvL.mjs → PodcastList-DgLQjL0d.mjs} +6 -6
- package/dist/PodcastList-DgLQjL0d.mjs.map +1 -0
- package/dist/{PodcastList-c0Iwzakm.mjs → PodcastList-DhKeiBbv.mjs} +5 -5
- package/dist/PodcastList-DhKeiBbv.mjs.map +1 -0
- package/dist/PodcastList-Dtq6kEG4.mjs.map +1 -0
- package/dist/PodcastList-Dx-mo7Wo.mjs.map +1 -0
- package/dist/{PodcastPage-C_d9FaS7.mjs → PodcastPage-C5OCwW8q.mjs} +23 -23
- package/dist/PodcastPage-C5OCwW8q.mjs.map +1 -0
- package/dist/PodcastPage-CsVqOGWc.mjs.map +1 -0
- package/dist/PodcastPage-DQInD9ry.mjs.map +1 -0
- package/dist/PodcastPage-Dka9GEzi.mjs.map +1 -0
- package/dist/PodcastPage-acKIH0vO.mjs.map +1 -0
- package/dist/PodcastPlayBar-AgtR8Ia9.mjs.map +1 -0
- package/dist/PodcastPlayBar-D7CyLEM4.mjs.map +1 -0
- package/dist/{PodcastPlayBar-WjGn_KlZ.mjs → PodcastPlayBar-DC5HCx76.mjs} +4 -4
- package/dist/PodcastPlayBar-DC5HCx76.mjs.map +1 -0
- package/dist/PodcastPlayBasicButton-DHYxw3NX.mjs.map +1 -0
- package/dist/{PodcastPlayBasicButton-BNKlqhGR.mjs → PodcastPlayBasicButton-PJHza4d_.mjs} +2 -2
- package/dist/PodcastPlayBasicButton-PJHza4d_.mjs.map +1 -0
- package/dist/PodcastPlayBasicButton-gK82n3YL.mjs.map +1 -0
- package/dist/{PodcastPlayButton-B9hWbPEk.mjs → PodcastPlayButton-1eaXWTlG.mjs} +4 -4
- package/dist/PodcastPlayButton-1eaXWTlG.mjs.map +1 -0
- package/dist/PodcastPlayButton-Bosq5ozq.mjs.map +1 -0
- package/dist/PodcastPlayButton-DIQi57Oh.mjs.map +1 -0
- package/dist/PodcastPlayButton-DcjbCnlT.mjs.map +1 -0
- package/dist/PodcastPlayButton-DgSCyhrd.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-C0HZum5z.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-CSziI2j4.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-CvX2rauY.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-H_rnCHag.mjs.map +1 -0
- package/dist/{PodcastPlaylistInlineList-_csxbYAx.mjs → PodcastPlaylistInlineList-XTbhC8OJ.mjs} +5 -5
- package/dist/PodcastPlaylistInlineList-XTbhC8OJ.mjs.map +1 -0
- package/dist/{PodcastPresentationList-BD8XmnW0.mjs → PodcastPresentationList-BUl5Rq83.mjs} +5 -5
- package/dist/PodcastPresentationList-BUl5Rq83.mjs.map +1 -0
- package/dist/PodcastPresentationList-BvkEDbtG.mjs.map +1 -0
- package/dist/PodcastPresentationList-C0n-xr5w.mjs.map +1 -0
- package/dist/PodcastPresentationList-CnrMkINf.mjs.map +1 -0
- package/dist/PodcastPresentationList-DC-Oi_eK.mjs.map +1 -0
- package/dist/PodcastProgressBar-CP-0ptRF.mjs.map +1 -0
- package/dist/{PodcastProgressBar-B3XOeeJx.mjs → PodcastProgressBar-VG-mRcpi.mjs} +4 -4
- package/dist/PodcastProgressBar-VG-mRcpi.mjs.map +1 -0
- package/dist/PodcastProgressBar-jY43GoFx.mjs.map +1 -0
- package/dist/PodcastRawTranscript-BAu-dt2V.mjs.map +1 -0
- package/dist/{PodcastRawTranscript-D0Nm7jGM.mjs → PodcastRawTranscript-Bf6f5yNd.mjs} +3 -3
- package/dist/PodcastRawTranscript-Bf6f5yNd.mjs.map +1 -0
- package/dist/{PodcastSwiperList-DJ0O3dqM.mjs → PodcastSwiperList-BhulNkN-.mjs} +5 -5
- package/dist/PodcastSwiperList-BhulNkN-.mjs.map +1 -0
- package/dist/PodcastSwiperList-CGeumBPj.mjs.map +1 -0
- package/dist/PodcastSwiperList-CzUkS6M6.mjs.map +1 -0
- package/dist/PodcastSwiperList-DLKOAjUS.mjs.map +1 -0
- package/dist/PodcastSwiperList-DaTHwrHm.mjs.map +1 -0
- package/dist/PodcastmakerHeader-BZT-U0KX.mjs.map +1 -0
- package/dist/{PodcastmakerHeader-DAATtOG_.mjs → PodcastmakerHeader-Df0g2dCr.mjs} +2 -2
- package/dist/PodcastmakerHeader-Df0g2dCr.mjs.map +1 -0
- package/dist/PodcastsPage-B-Qzlif0.mjs.map +1 -0
- package/dist/PodcastsPage-BoK55Z9G.mjs.map +1 -0
- package/dist/PodcastsPage-CTzbr2VD.mjs.map +1 -0
- package/dist/{PodcastsPage-ZhEVoMp1.mjs → PodcastsPage-DSJUPRZE.mjs} +5 -5
- package/dist/PodcastsPage-DSJUPRZE.mjs.map +1 -0
- package/dist/PodcastsPage-Jg_jAix6.mjs.map +1 -0
- package/dist/{ProductorSearch-xs0kzX_E.mjs → ProductorSearch-BTj9gIOs.mjs} +3 -3
- package/dist/ProductorSearch-BTj9gIOs.mjs.map +1 -0
- package/dist/ProductorSearch-ziDbxrDd.mjs.map +1 -0
- package/dist/ProgressBar-BOq9RfZ2.mjs.map +1 -0
- package/dist/{ProgressBar-0DSoUTwB.mjs → ProgressBar-BVc0_6Lv.mjs} +2 -2
- package/dist/ProgressBar-BVc0_6Lv.mjs.map +1 -0
- package/dist/ProgressBar-Cgt2PqnO.mjs.map +1 -0
- package/dist/QrCode-DNiPIFIA.mjs.map +1 -0
- package/dist/{QrCode-CUP2O18d.mjs → QrCode-MCv4t_Bn.mjs} +2 -2
- package/dist/QrCode-MCv4t_Bn.mjs.map +1 -0
- package/dist/{QrCodeModal-DXBCuki7.mjs → QrCodeModal-Be8E0JlC.mjs} +2 -2
- package/dist/QrCodeModal-Be8E0JlC.mjs.map +1 -0
- package/dist/QrCodeModal-DYDKLLuw.mjs.map +1 -0
- package/dist/RadioCurrently-BJOmCSby.mjs.map +1 -0
- package/dist/RadioCurrently-CZePLInZ.mjs.map +1 -0
- package/dist/{RadioCurrently-D5M81oIX.mjs → RadioCurrently-DWySwV64.mjs} +4 -4
- package/dist/RadioCurrently-DWySwV64.mjs.map +1 -0
- package/dist/RadioHistory-7EGvEAMx.mjs.map +1 -0
- package/dist/RadioHistory-BdMa013x.mjs.map +1 -0
- package/dist/{RadioHistory-BgOve4jk.mjs → RadioHistory-DlQFZYp2.mjs} +3 -3
- package/dist/RadioHistory-DlQFZYp2.mjs.map +1 -0
- package/dist/{RadioImage-CUTRr3DL.mjs → RadioImage-BIe2KpG_.mjs} +5 -5
- package/dist/RadioImage-BIe2KpG_.mjs.map +1 -0
- package/dist/RadioImage-CXFZXN1N.mjs.map +1 -0
- package/dist/RadioImage-CpJmuc8a.mjs.map +1 -0
- package/dist/{RadioList-CwzOFHc1.mjs → RadioList-B23gsiEF.mjs} +5 -5
- package/dist/RadioList-B23gsiEF.mjs.map +1 -0
- package/dist/RadioList-BwzgNcMO.mjs.map +1 -0
- package/dist/RadioList-KvAacjmD.mjs.map +1 -0
- package/dist/RadioPage-CM_4A1AQ.mjs.map +1 -0
- package/dist/RadioPage-DkBL81mI.mjs.map +1 -0
- package/dist/{RadioPage-DVflzCV-.mjs → RadioPage-Jg2kmtna.mjs} +11 -11
- package/dist/RadioPage-Jg2kmtna.mjs.map +1 -0
- package/dist/{RadioPlanning-CJ7Qqyhs.mjs → RadioPlanning-2aWTnbZb.mjs} +3 -3
- package/dist/RadioPlanning-2aWTnbZb.mjs.map +1 -0
- package/dist/RadioPlanning-DHxcBVQo.mjs.map +1 -0
- package/dist/RadioProgressBar-BHAawrHe.mjs.map +1 -0
- package/dist/RadioProgressBar-CPjLAoPB.mjs.map +1 -0
- package/dist/{RadioProgressBar-BmJbzzQA.mjs → RadioProgressBar-yIz1oI5d.mjs} +2 -2
- package/dist/RadioProgressBar-yIz1oI5d.mjs.map +1 -0
- package/dist/RecaptchaModal-DKugsU7h.mjs.map +1 -0
- package/dist/{RecaptchaModal-DX9rAHUg.mjs → RecaptchaModal-dfMCfebx.mjs} +2 -2
- package/dist/RecaptchaModal-dfMCfebx.mjs.map +1 -0
- package/dist/ReportAbuseModal-Bxr7NTvH.mjs.map +1 -0
- package/dist/{ReportAbuseModal-CYCRaFAY.mjs → ReportAbuseModal-DZKRbYXJ.mjs} +4 -4
- package/dist/ReportAbuseModal-DZKRbYXJ.mjs.map +1 -0
- package/dist/RightsIndicator-BgW0q3af.mjs.map +1 -0
- package/dist/RightsIndicator-BtzqiPWc.mjs.map +1 -0
- package/dist/{RightsIndicator-qIU4_wiF.mjs → RightsIndicator-D5I3DOfO.mjs} +2 -2
- package/dist/RightsIndicator-D5I3DOfO.mjs.map +1 -0
- package/dist/RightsIndicator-NOZ05rEh.mjs.map +1 -0
- package/dist/RightsWrapper-Cv41FXNO.mjs.map +1 -0
- package/dist/{RightsWrapper-Cs6prZ3E.mjs → RightsWrapper-HasUbnny.mjs} +3 -3
- package/dist/RightsWrapper-HasUbnny.mjs.map +1 -0
- package/dist/{RubriqueFilter-OA_DJKL1.mjs → RubriqueFilter-3SPVH4nT.mjs} +3 -3
- package/dist/RubriqueFilter-3SPVH4nT.mjs.map +1 -0
- package/dist/RubriqueFilter-B_F2fyA0.mjs.map +1 -0
- package/dist/RubriqueList-CalsqgcR.mjs.map +1 -0
- package/dist/{RubriqueList-B94NM5yi.mjs → RubriqueList-TnVM2-Ry.mjs} +3 -3
- package/dist/RubriqueList-TnVM2-Ry.mjs.map +1 -0
- package/dist/RubriquePage-BhneK7GY.mjs.map +1 -0
- package/dist/RubriquePage-CPV9lztT.mjs.map +1 -0
- package/dist/{RubriquePage-DyusiBmp.mjs → RubriquePage-D223TaA2.mjs} +5 -5
- package/dist/RubriquePage-D223TaA2.mjs.map +1 -0
- package/dist/RubriquePage-DriBVVmv.mjs.map +1 -0
- package/dist/RubriquePage-x_tOmQCH.mjs.map +1 -0
- package/dist/SearchPage-B-KDO-5r.mjs.map +1 -0
- package/dist/{SearchPage-BGOBGS4j.mjs → SearchPage-BH1gYkHn.mjs} +3 -3
- package/dist/SearchPage-BH1gYkHn.mjs.map +1 -0
- package/dist/SearchPage-CXOoJF_2.mjs.map +1 -0
- package/dist/SearchPage-DyX_tEm5.mjs.map +1 -0
- package/dist/SearchPage-IvX74fSJ.mjs.map +1 -0
- package/dist/{ShareAnonymous-Chfdzzra.mjs → ShareAnonymous-4UxjKrIe.mjs} +6 -6
- package/dist/ShareAnonymous-4UxjKrIe.mjs.map +1 -0
- package/dist/ShareAnonymous-C4xPMrgf.mjs.map +1 -0
- package/dist/{ShareModalPlayer-CLY_JFFD.mjs → ShareModalPlayer-B0wPlpdU.mjs} +2 -2
- package/dist/ShareModalPlayer-B0wPlpdU.mjs.map +1 -0
- package/dist/ShareModalPlayer-CEvDV-I_.mjs.map +1 -0
- package/dist/ShareNewsletter-Bno5t4ay.mjs.map +1 -0
- package/dist/{ShareNewsletter-B4dn4-jA.mjs → ShareNewsletter-Cf9w-I6c.mjs} +2 -2
- package/dist/ShareNewsletter-Cf9w-I6c.mjs.map +1 -0
- package/dist/SharePlayer-BLqYnywl.mjs.map +1 -0
- package/dist/{SharePlayer-wHDYsWYd.mjs → SharePlayer-Oy1pWckd.mjs} +4 -4
- package/dist/SharePlayer-Oy1pWckd.mjs.map +1 -0
- package/dist/{SharePlayerRadio-D3LXD_gK.mjs → SharePlayerRadio-CI6glNuI.mjs} +3 -3
- package/dist/SharePlayerRadio-CI6glNuI.mjs.map +1 -0
- package/dist/SharePlayerRadio-c_HFTupz.mjs.map +1 -0
- package/dist/SharePlayerTypes-Dkmmw2We.mjs.map +1 -0
- package/dist/{SharePlayerTypes-eYSeVl-W.mjs → SharePlayerTypes-cUgCFZ65.mjs} +2 -2
- package/dist/SharePlayerTypes-cUgCFZ65.mjs.map +1 -0
- package/dist/{ShareSocialsButtons-iHtSoQ3K.mjs → ShareSocialsButtons-BYsXc2Jr.mjs} +2 -2
- package/dist/ShareSocialsButtons-BYsXc2Jr.mjs.map +1 -0
- package/dist/ShareSocialsButtons-DZLZc1c6.mjs.map +1 -0
- package/dist/SimpleLayout-BCsUQENG.mjs.map +1 -0
- package/dist/SimpleLayout-BGKNHHjx.mjs.map +1 -0
- package/dist/SimpleLayout-BHIdltFB.mjs.map +1 -0
- package/dist/SimpleLayout-BKkwQmN6.mjs.map +1 -0
- package/dist/SimpleLayout-BORx9hRX.mjs.map +1 -0
- package/dist/{SimpleLayout-Bk74CAAr.mjs → SimpleLayout-BTJyAJO6.mjs} +3 -3
- package/dist/SimpleLayout-BTJyAJO6.mjs.map +1 -0
- package/dist/SimpleLayout-BvOAauzs.mjs.map +1 -0
- package/dist/SimpleLayout-C3xekYgM.mjs.map +1 -0
- package/dist/SimpleLayout-C4xNk0R4.mjs.map +1 -0
- package/dist/SimpleLayout-CDcsE-Be.mjs.map +1 -0
- package/dist/SimpleLayout-D3M_c1Eu.mjs.map +1 -0
- package/dist/SimpleLayout-DJgC3LcZ.mjs.map +1 -0
- package/dist/SimpleLayout-DkvEZxow.mjs.map +1 -0
- package/dist/SimpleLayout-gtbBGlVV.mjs.map +1 -0
- package/dist/SmartLinkPage-BF8hfaWZ.mjs.map +1 -0
- package/dist/{SmartLinkPage-DbuQT8GM.mjs → SmartLinkPage-DQljzYa-.mjs} +5 -5
- package/dist/SmartLinkPage-DQljzYa-.mjs.map +1 -0
- package/dist/SmartLinkPage-DmlqwhYP.mjs.map +1 -0
- package/dist/SubscribeButtons-DO4MRuDr.mjs.map +1 -0
- package/dist/{SubscribeButtons-rnonTVzT.mjs → SubscribeButtons-lAAMYQCm.mjs} +3 -3
- package/dist/SubscribeButtons-lAAMYQCm.mjs.map +1 -0
- package/dist/{SwiperList-C1v0T1wx.mjs → SwiperList-C51H-enh.mjs} +2 -2
- package/dist/SwiperList-C51H-enh.mjs.map +1 -0
- package/dist/SwiperList-Dsq1MFX6.mjs.map +1 -0
- package/dist/TagList-B5C9zojs.mjs.map +1 -0
- package/dist/{TagList-VeuYS_zJ.mjs → TagList-D3Bn2fIn.mjs} +2 -2
- package/dist/TagList-D3Bn2fIn.mjs.map +1 -0
- package/dist/TagPage-B71pZpRY.mjs.map +1 -0
- package/dist/{TagPage-Bd81QJHn.mjs → TagPage-Brw9iL1F.mjs} +4 -4
- package/dist/TagPage-Brw9iL1F.mjs.map +1 -0
- package/dist/TagPage-CWRyUZkD.mjs.map +1 -0
- package/dist/TagPage-DFo25ZeP.mjs.map +1 -0
- package/dist/TagPage-sI917OpV.mjs.map +1 -0
- package/dist/TopBar-CaCA8kOs.mjs.map +1 -0
- package/dist/{TopBar-CZVp2T7C.mjs → TopBar-DIdhyJi_.mjs} +7 -7
- package/dist/TopBar-DIdhyJi_.mjs.map +1 -0
- package/dist/{UserButtonContent-DmNyGmWr.mjs → UserButtonContent-D13cVA34.mjs} +7 -7
- package/dist/UserButtonContent-D13cVA34.mjs.map +1 -0
- package/dist/UserButtonContent-DMKyXEmF.mjs.map +1 -0
- package/dist/{VideoModuleBox-yJZpgCw6.mjs → VideoModuleBox-CFQmvPrA.mjs} +2 -2
- package/dist/VideoModuleBox-CFQmvPrA.mjs.map +1 -0
- package/dist/VideoModuleBox-DsBLAMrh.mjs.map +1 -0
- package/dist/VideoPage-CfJeWV-R.mjs.map +1 -0
- package/dist/VideoPage-CnIZYz-k.mjs.map +1 -0
- package/dist/VideoPage-D6UNKt2D.mjs.map +1 -0
- package/dist/{VideoPage-y6G4Y2Zi.mjs → VideoPage-DU9dJviO.mjs} +10 -10
- package/dist/VideoPage-DU9dJviO.mjs.map +1 -0
- package/dist/VideoPage-OIb28KAS.mjs.map +1 -0
- package/dist/classicApi-C70YSK8J.mjs.map +1 -0
- package/dist/classicApi-DuzZv1Wk.mjs.map +1 -1
- package/dist/{classicApi-CkDHWZG1.mjs → classicApi-xjOqAovv.mjs} +11 -8
- package/dist/classicApi-xjOqAovv.mjs.map +1 -0
- package/dist/downloadHelper-C4q0i5xN.mjs.map +1 -0
- package/dist/{downloadHelper-DLdkblYN.mjs → downloadHelper-DY3fF3dA.mjs} +2 -2
- package/dist/downloadHelper-DY3fF3dA.mjs.map +1 -0
- package/dist/index.mjs +102 -97
- package/dist/index.mjs.map +1 -1
- package/dist/tests.mjs +2 -2
- package/dist/{useAdvancedParamInit-B7G2Mvjv.mjs → useAdvancedParamInit-CCprE3H2.mjs} +6 -6
- package/dist/useAdvancedParamInit-CCprE3H2.mjs.map +1 -0
- package/dist/useAdvancedParamInit-CT8CdPFW.mjs.map +1 -0
- package/dist/useDayjs-BPXVSBns.mjs.map +1 -0
- package/dist/{useDayjs-C3cnTiDW.mjs → useDayjs-DPVjvJPN.mjs} +2 -2
- package/dist/useDayjs-DPVjvJPN.mjs.map +1 -0
- package/dist/useErrorHandler-BxQT9ZGf.mjs.map +1 -0
- package/dist/{useErrorHandler-DtLjD9t_.mjs → useErrorHandler-D3XVxUh6.mjs} +2 -2
- package/dist/useErrorHandler-D3XVxUh6.mjs.map +1 -0
- package/dist/{useImageProxy-Bj0cOCct.mjs → useImageProxy-BdQJmj4a.mjs} +2 -2
- package/dist/useImageProxy-BdQJmj4a.mjs.map +1 -0
- package/dist/useImageProxy-DROuweGY.mjs.map +1 -0
- package/dist/{useOrgaComputed-BLSpEDfb.mjs → useOrgaComputed-B2Bq0VBT.mjs} +2 -2
- package/dist/useOrgaComputed-B2Bq0VBT.mjs.map +1 -0
- package/dist/useOrgaComputed-CGomgs0r.mjs.map +1 -0
- package/dist/{usePlayerLogicProgress-75G9QMg_.mjs → usePlayerLogicProgress-DcHbYGOR.mjs} +3 -3
- package/dist/usePlayerLogicProgress-DcHbYGOR.mjs.map +1 -0
- package/dist/usePlayerLogicProgress-Dchl5sUO.mjs.map +1 -0
- package/dist/usePlayerLogicProgress-lqnQ5qNd.mjs.map +1 -0
- package/dist/{usePodcastView-BftS642h.mjs → usePodcastView-BDZ6CGQj.mjs} +4 -4
- package/dist/usePodcastView-BDZ6CGQj.mjs.map +1 -0
- package/dist/usePodcastView-CI5le-WW.mjs.map +1 -0
- package/dist/usePresentationItem-Cw9fBYUi.mjs.map +1 -0
- package/dist/{usePresentationItem-CNXIk-Sf.mjs → usePresentationItem-UwAuhVqo.mjs} +4 -4
- package/dist/usePresentationItem-UwAuhVqo.mjs.map +1 -0
- package/dist/useRights-D8CLzCMH.mjs.map +1 -0
- package/dist/{useRights-Co0TgD8y.mjs → useRights-DSZ-5pFg.mjs} +2 -2
- package/dist/useRights-DSZ-5pFg.mjs.map +1 -0
- package/dist/{useRubriquesFilterComputed-VsdTUNL6.mjs → useRubriquesFilterComputed-BkDeXTf-.mjs} +2 -2
- package/dist/useRubriquesFilterComputed-BkDeXTf-.mjs.map +1 -0
- package/dist/useRubriquesFilterComputed-Bkre15fg.mjs.map +1 -0
- package/dist/useRubriquesFilterParam-BmE8v1fS.mjs.map +1 -0
- package/dist/{useRubriquesFilterParam--x07HEw1.mjs → useRubriquesFilterParam-Delgf48y.mjs} +2 -2
- package/dist/useRubriquesFilterParam-Delgf48y.mjs.map +1 -0
- package/dist/{useSharePlatforms-CSSRTkTG.mjs → useSharePlatforms-07n3JYu2.mjs} +3 -3
- package/dist/useSharePlatforms-07n3JYu2.mjs.map +1 -0
- package/dist/useSharePlatforms-B_3OwBFv.mjs.map +1 -0
- package/dist/{useSimplePageParam-ClaGQ9yj.mjs → useSimplePageParam-CsY_ie3c.mjs} +2 -2
- package/dist/useSimplePageParam-CsY_ie3c.mjs.map +1 -0
- package/dist/useSimplePageParam-ki2VyM-X.mjs.map +1 -0
- package/dist/{useTranslation-BNshNMQT.mjs → useTranslation-ChEasnl9.mjs} +25 -8
- package/dist/useTranslation-ChEasnl9.mjs.map +1 -0
- package/dist/useTranslation-D0R0BSx9.mjs.map +1 -0
- package/dist/usefetchRadioData-BPmkztGC.mjs.map +1 -0
- package/dist/{usefetchRadioData-C2cwiaCP.mjs → usefetchRadioData-CkrAfN1c.mjs} +2 -2
- package/dist/usefetchRadioData-CkrAfN1c.mjs.map +1 -0
- package/package.json +1 -1
- package/src/components/composable/player/usePlayerLive.ts +8 -7
- package/src/stores/AuthStore.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastItem-_8ErwIDG.mjs","names":[],"sources":["../src/components/display/podcasts/AnimatorsItem.vue","../src/components/display/podcasts/AnimatorsItem.vue","../src/components/display/podcasts/PodcastItemInfo.vue","../src/components/display/podcasts/PodcastItemInfo.vue","../src/components/display/podcasts/PodcastItem.vue","../src/components/display/podcasts/PodcastItem.vue"],"sourcesContent":["<template>\n <div\n v-if=\"animator\"\n class=\"d-flex align-items-center justify-content-start animators-item\"\n >\n <router-link\n :to=\"{\n name: 'participant',\n params: { participantId: animator.participantId },\n }\"\n :title=\"t('Participant name page', { name: animatorName })\"\n class=\"podcast-item-animator text-truncate\"\n >\n {{ animatorName }}\n </router-link>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Participant } from \"@/stores/class/general/participant\";\nimport { computed } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n animator: { default: undefined, type: Object as () => Participant },\n})\n\n//Composables\nconst { t } = useI18n();\n\n//Computed\nconst animatorName = computed(() => `${props.animator?.firstName ?? \"\"} ${ props.animator?.lastName ?? \"\"}`.trim());\n\n</script>\n\n<style lang=\"scss\">\n.octopus-app .podcast-item-animator {\n font-size: 0.55rem;\n font-weight: 300;\n text-transform: capitalize;\n}\n</style>\n","<template>\n <div\n v-if=\"animator\"\n class=\"d-flex align-items-center justify-content-start animators-item\"\n >\n <router-link\n :to=\"{\n name: 'participant',\n params: { participantId: animator.participantId },\n }\"\n :title=\"t('Participant name page', { name: animatorName })\"\n class=\"podcast-item-animator text-truncate\"\n >\n {{ animatorName }}\n </router-link>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { Participant } from \"@/stores/class/general/participant\";\nimport { computed } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n animator: { default: undefined, type: Object as () => Participant },\n})\n\n//Composables\nconst { t } = useI18n();\n\n//Computed\nconst animatorName = computed(() => `${props.animator?.firstName ?? \"\"} ${ props.animator?.lastName ?? \"\"}`.trim());\n\n</script>\n\n<style lang=\"scss\">\n.octopus-app .podcast-item-animator {\n font-size: 0.55rem;\n font-weight: 300;\n text-transform: capitalize;\n}\n</style>\n","<template>\n <div class=\"podcast-item-info\">\n <div class=\"podcast-item-status text-secondary h6 mx-2\">\n <time :datetime=\"podcast.pubDate\">\n {{ date }}\n </time>\n\n <PodcastSeasonInfo :podcast=\"podcast\" />\n </div>\n\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: podcast.podcastId },\n }\"\n class=\"text-dark flex-grow-1 title-podcast-item basic-line-clamp three-line\"\n :title=\"t('Episode name page', { name: podcast.title })\"\n >\n <RightsIndicator\n inline\n :podcast=\"podcast\"\n action=\"edit\"\n />\n {{ podcast.title }}\n </router-link>\n\n <PodcastPlayBar\n v-if=\"state.emissionsPage.progressBar\"\n :display-buton-play=\"true\"\n :podcast=\"podcast\"\n class=\"me-2\"\n />\n\n <div class=\"mx-2 d-flex align-items-center justify-content-between mt-2\">\n <div v-if=\"isPodcastmaker\" class=\"useless-div-for-podcastmaker\" />\n <AnimatorsItem\n v-if=\"podcast.animators && 0 !== podcast.animators.length\"\n class=\"w-0 flex-grow-1\"\n :animator=\"podcast.animators[0]\"\n />\n <router-link\n v-if=\"!isPodcastmaker\"\n :to=\"{\n name: 'productor',\n params: { productorId: podcast.organisation.id },\n }\"\n class=\"text-dark producer-podcast-item\"\n >\n {{ \"© \" + orgaNameDisplay }}\n </router-link>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AnimatorsItem from \"./AnimatorsItem.vue\";\nimport RightsIndicator from \"../RightsIndicator.vue\"; \nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport { computed, defineAsyncComponent } from \"vue\";\nimport { Podcast } from \"../../../stores/class/general/podcast\";\nimport { state } from \"../../../stores/ParamSdkStore\";\nimport { useI18n } from \"vue-i18n\";\nimport PodcastSeasonInfo from \"./PodcastSeasonInfo.vue\";\nimport { useDayjs } from \"../../composable/useDayjs\";\n\nconst PodcastPlayBar = defineAsyncComponent(\n () => import(\"./PodcastPlayBar.vue\"),\n);\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n})\n\n//Composables\nconst { t } = useI18n();\nconst { isPodcastmaker } = useOrgaComputed();\n\n//Computed\nconst { formatDate } = useDayjs();\n\nconst date = computed((): string => {\n return formatDate(props.podcast.pubDate);\n});\n\nconst orgaNameDisplay = computed(() =>{\n if (props.podcast.organisation.name.length > 30) {\n return props.podcast.organisation.name.substring(0, 30) + \"...\";\n }\n return props.podcast.organisation.name;\n});\n</script>\n\n<style scoped lang=\"scss\">\n.title-podcast-item {\n font-weight: 700;\n margin: 0.25rem 0.5rem 0.5rem;\n flex-grow: 1;\n font-size: 0.9rem;\n min-height: 3rem;\n line-height: 1rem;\n}\n\n.producer-podcast-item {\n font-size: 0.55rem;\n color: var(--octopus-gray-text);\n flex-shrink: 0;\n}\n\n.podcast-item-status {\n display: flex;\n justify-content: space-between;\n}\n</style>\n","<template>\n <div class=\"podcast-item-info\">\n <div class=\"podcast-item-status text-secondary h6 mx-2\">\n <time :datetime=\"podcast.pubDate\">\n {{ date }}\n </time>\n\n <PodcastSeasonInfo :podcast=\"podcast\" />\n </div>\n\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: podcast.podcastId },\n }\"\n class=\"text-dark flex-grow-1 title-podcast-item basic-line-clamp three-line\"\n :title=\"t('Episode name page', { name: podcast.title })\"\n >\n <RightsIndicator\n inline\n :podcast=\"podcast\"\n action=\"edit\"\n />\n {{ podcast.title }}\n </router-link>\n\n <PodcastPlayBar\n v-if=\"state.emissionsPage.progressBar\"\n :display-buton-play=\"true\"\n :podcast=\"podcast\"\n class=\"me-2\"\n />\n\n <div class=\"mx-2 d-flex align-items-center justify-content-between mt-2\">\n <div v-if=\"isPodcastmaker\" class=\"useless-div-for-podcastmaker\" />\n <AnimatorsItem\n v-if=\"podcast.animators && 0 !== podcast.animators.length\"\n class=\"w-0 flex-grow-1\"\n :animator=\"podcast.animators[0]\"\n />\n <router-link\n v-if=\"!isPodcastmaker\"\n :to=\"{\n name: 'productor',\n params: { productorId: podcast.organisation.id },\n }\"\n class=\"text-dark producer-podcast-item\"\n >\n {{ \"© \" + orgaNameDisplay }}\n </router-link>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AnimatorsItem from \"./AnimatorsItem.vue\";\nimport RightsIndicator from \"../RightsIndicator.vue\"; \nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport { computed, defineAsyncComponent } from \"vue\";\nimport { Podcast } from \"../../../stores/class/general/podcast\";\nimport { state } from \"../../../stores/ParamSdkStore\";\nimport { useI18n } from \"vue-i18n\";\nimport PodcastSeasonInfo from \"./PodcastSeasonInfo.vue\";\nimport { useDayjs } from \"../../composable/useDayjs\";\n\nconst PodcastPlayBar = defineAsyncComponent(\n () => import(\"./PodcastPlayBar.vue\"),\n);\n\n//Props \nconst props = defineProps({\n podcast: { default: () => ({}), type: Object as () => Podcast },\n})\n\n//Composables\nconst { t } = useI18n();\nconst { isPodcastmaker } = useOrgaComputed();\n\n//Computed\nconst { formatDate } = useDayjs();\n\nconst date = computed((): string => {\n return formatDate(props.podcast.pubDate);\n});\n\nconst orgaNameDisplay = computed(() =>{\n if (props.podcast.organisation.name.length > 30) {\n return props.podcast.organisation.name.substring(0, 30) + \"...\";\n }\n return props.podcast.organisation.name;\n});\n</script>\n\n<style scoped lang=\"scss\">\n.title-podcast-item {\n font-weight: 700;\n margin: 0.25rem 0.5rem 0.5rem;\n flex-grow: 1;\n font-size: 0.9rem;\n min-height: 3rem;\n line-height: 1rem;\n}\n\n.producer-podcast-item {\n font-size: 0.55rem;\n color: var(--octopus-gray-text);\n flex-shrink: 0;\n}\n\n.podcast-item-status {\n display: flex;\n justify-content: space-between;\n}\n</style>\n","<template>\n <article\n class=\"podcast-item-container border\"\n :data-pubdate=\"displayDate\"\n :data-count=\"podcast.downloadCount\"\n >\n <PodcastImage\n :podcast=\"podcast\"\n :hide-play=\"hoverDesc && 0 !== description.length\"\n :display-description=\"0 !== description.length\"\n :arrow-direction=\"arrowDirection\"\n :fetch-conference=\"fetchConference\"\n @hide-description=\"hideDescription\"\n @show-description=\"showDescription\"\n />\n <div\n v-if=\"hoverDesc\"\n ref=\"descriptionPodcastContainer\"\n class=\"element-description description-podcast-item html-wysiwyg-content\"\n :class=\"[\n hoverDesc && '' !== description ? 'visible' : 'invisible',\n !isMobile && isDescriptionBig ? 'after-element-description' : 'mobile-description-podcast-item',\n ]\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <div ref=\"descriptionPodcast\" v-html=\"displayHelper.urlify(description)\" />\n <!-- eslint-enable -->\n </div>\n <div\n @mouseenter=\"debounceShowDescriptionEvent\"\n @mouseleave=\"debounceHideDescriptionEvent\"\n >\n <PodcastItemInfo\n :podcast=\"podcast\"\n />\n </div>\n </article>\n</template>\n\n<script setup lang=\"ts\">\nimport debounce from '../../../helper/debounceHelper';\nimport PodcastItemInfo from \"./PodcastItemInfo.vue\";\nimport PodcastImage from \"./PodcastImage.vue\";\nimport dayjs from \"dayjs\";\nimport { Podcast } from \"../../../stores/class/general/podcast\";\nimport { computed, nextTick, onBeforeMount, ref, Ref, useTemplateRef } from \"vue\";\nimport { Conference } from \"@/stores/class/conference/conference\";\n\nimport displayHelper from \"../../../helper/displayHelper\";\n\n//Props \nconst props = defineProps<{\n podcast: Podcast;\n fetchConference?: Conference;\n}>();\n\n//Data \nconst isMobile = ref(false);\nconst firstDisplayDesc = ref(false);\nconst hoverDesc = ref(false);\nconst arrowDirection = ref(\"up\");\nconst isDescriptionBig = ref(false);\nconst debounceShowDescriptionEvent: Ref< undefined | (() => void)> = ref(undefined);\nconst debounceHideDescriptionEvent: Ref< undefined | (() => void)> = ref(undefined);\nconst descriptionPodcastRef = useTemplateRef('descriptionPodcast');\nconst descriptionPodcastContainerRef = useTemplateRef('descriptionPodcastContainer');\n\n//Computed\nconst displayDate = computed(() => dayjs(props.podcast.pubDate).format());\nconst description = computed(() => props.podcast.description ?? \"\");\n\nonBeforeMount(()=>{\n isMobile.value = window.matchMedia(\"(hover: none)\").matches;\n debounceShowDescriptionEvent.value = debounce(showDescription, 100);\n debounceHideDescriptionEvent.value = debounce(hideDescription, 100);\n})\n\n//Methods\nfunction initDescription(): void {\n if (firstDisplayDesc.value) {\n return;\n }\n const podcastDesc = descriptionPodcastRef?.value as HTMLElement;\n const podcastDescContainer = descriptionPodcastContainerRef?.value as HTMLElement;\n if (podcastDesc?.clientHeight > podcastDescContainer?.clientHeight) {\n isDescriptionBig.value = true;\n }\n firstDisplayDesc.value = true;\n}\nfunction showDescription(): void {\n arrowDirection.value = \"down\";\n hoverDesc.value = true;\n nextTick(() => {\n initDescription();\n });\n}\nfunction hideDescription(): void {\n arrowDirection.value = \"up\";\n hoverDesc.value = false;\n}\n</script>\n\n<style lang=\"scss\">\n\n.octopus-app {\n .podcast-item-container {\n display: flex;\n flex-direction: column;\n border-radius: var(--octopus-border-radius);\n position: relative;\n width: var(--octopus-podcast-size);\n height: 20.5rem;\n overflow: hidden;\n text-align: left;\n background: var(--octopus-background);\n flex-shrink: 0;\n\n .description-podcast-item {\n --octopus-max-height-description: var(--octopus-podcast-size);\n\n padding: 1rem;\n background-color: oklch(from var(--octopus-background) l c h / 90%);\n position: absolute;\n width: var(--octopus-podcast-size);\n height: var(--octopus-podcast-size);\n margin-top:0;\n\n &.mobile-description-podcast-item {\n overflow: auto;\n }\n }\n\n @media (width <= 450px) {\n width: var(--octopus-image-size);\n height: 19rem;\n\n .description-podcast-item {\n height: var(--octopus-image-size);\n width: var(--octopus-image-size);\n }\n }\n }\n}\n</style>\n","<template>\n <article\n class=\"podcast-item-container border\"\n :data-pubdate=\"displayDate\"\n :data-count=\"podcast.downloadCount\"\n >\n <PodcastImage\n :podcast=\"podcast\"\n :hide-play=\"hoverDesc && 0 !== description.length\"\n :display-description=\"0 !== description.length\"\n :arrow-direction=\"arrowDirection\"\n :fetch-conference=\"fetchConference\"\n @hide-description=\"hideDescription\"\n @show-description=\"showDescription\"\n />\n <div\n v-if=\"hoverDesc\"\n ref=\"descriptionPodcastContainer\"\n class=\"element-description description-podcast-item html-wysiwyg-content\"\n :class=\"[\n hoverDesc && '' !== description ? 'visible' : 'invisible',\n !isMobile && isDescriptionBig ? 'after-element-description' : 'mobile-description-podcast-item',\n ]\"\n >\n <!-- eslint-disable vue/no-v-html -->\n <div ref=\"descriptionPodcast\" v-html=\"displayHelper.urlify(description)\" />\n <!-- eslint-enable -->\n </div>\n <div\n @mouseenter=\"debounceShowDescriptionEvent\"\n @mouseleave=\"debounceHideDescriptionEvent\"\n >\n <PodcastItemInfo\n :podcast=\"podcast\"\n />\n </div>\n </article>\n</template>\n\n<script setup lang=\"ts\">\nimport debounce from '../../../helper/debounceHelper';\nimport PodcastItemInfo from \"./PodcastItemInfo.vue\";\nimport PodcastImage from \"./PodcastImage.vue\";\nimport dayjs from \"dayjs\";\nimport { Podcast } from \"../../../stores/class/general/podcast\";\nimport { computed, nextTick, onBeforeMount, ref, Ref, useTemplateRef } from \"vue\";\nimport { Conference } from \"@/stores/class/conference/conference\";\n\nimport displayHelper from \"../../../helper/displayHelper\";\n\n//Props \nconst props = defineProps<{\n podcast: Podcast;\n fetchConference?: Conference;\n}>();\n\n//Data \nconst isMobile = ref(false);\nconst firstDisplayDesc = ref(false);\nconst hoverDesc = ref(false);\nconst arrowDirection = ref(\"up\");\nconst isDescriptionBig = ref(false);\nconst debounceShowDescriptionEvent: Ref< undefined | (() => void)> = ref(undefined);\nconst debounceHideDescriptionEvent: Ref< undefined | (() => void)> = ref(undefined);\nconst descriptionPodcastRef = useTemplateRef('descriptionPodcast');\nconst descriptionPodcastContainerRef = useTemplateRef('descriptionPodcastContainer');\n\n//Computed\nconst displayDate = computed(() => dayjs(props.podcast.pubDate).format());\nconst description = computed(() => props.podcast.description ?? \"\");\n\nonBeforeMount(()=>{\n isMobile.value = window.matchMedia(\"(hover: none)\").matches;\n debounceShowDescriptionEvent.value = debounce(showDescription, 100);\n debounceHideDescriptionEvent.value = debounce(hideDescription, 100);\n})\n\n//Methods\nfunction initDescription(): void {\n if (firstDisplayDesc.value) {\n return;\n }\n const podcastDesc = descriptionPodcastRef?.value as HTMLElement;\n const podcastDescContainer = descriptionPodcastContainerRef?.value as HTMLElement;\n if (podcastDesc?.clientHeight > podcastDescContainer?.clientHeight) {\n isDescriptionBig.value = true;\n }\n firstDisplayDesc.value = true;\n}\nfunction showDescription(): void {\n arrowDirection.value = \"down\";\n hoverDesc.value = true;\n nextTick(() => {\n initDescription();\n });\n}\nfunction hideDescription(): void {\n arrowDirection.value = \"up\";\n hoverDesc.value = false;\n}\n</script>\n\n<style lang=\"scss\">\n\n.octopus-app {\n .podcast-item-container {\n display: flex;\n flex-direction: column;\n border-radius: var(--octopus-border-radius);\n position: relative;\n width: var(--octopus-podcast-size);\n height: 20.5rem;\n overflow: hidden;\n text-align: left;\n background: var(--octopus-background);\n flex-shrink: 0;\n\n .description-podcast-item {\n --octopus-max-height-description: var(--octopus-podcast-size);\n\n padding: 1rem;\n background-color: oklch(from var(--octopus-background) l c h / 90%);\n position: absolute;\n width: var(--octopus-podcast-size);\n height: var(--octopus-podcast-size);\n margin-top:0;\n\n &.mobile-description-podcast-item {\n overflow: auto;\n }\n }\n\n @media (width <= 450px) {\n width: var(--octopus-image-size);\n height: 19rem;\n\n .description-podcast-item {\n height: var(--octopus-image-size);\n width: var(--octopus-image-size);\n }\n }\n }\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-BXla7F3u.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastList.vue","../src/components/display/podcasts/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n","<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-BqE8dwdc.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastList.vue","../src/components/display/podcasts/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n","<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsEA,MAAM,QAAQ;EAkDd,MAAM,OAAO;EAGb,MAAM,UAAU,IAAI,IAAI;EACxB,MAAM,SAAS,IAAI,MAAM,KAAK;EAC9B,MAAM,QAAQ,IAAI,MAAM,IAAI;EAC5B,MAAM,aAAa,IAAI,CAAC;EACxB,MAAM,WAAW,IAAI,KAAK;EAC1B,MAAM,WAAgC,IAAI,CAAC,CAAC;EAG5C,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,EAAC,cAAa,gBAAgB;EACpC,MAAM,cAAc,eAAe;EACnC,MAAM,YAAY,aAAa;EAG/B,MAAM,eAAe,eAAe;GAClC,IAAI,SAAS,SAAS,MAAM,gBAC1B,OAAO,SAAS;GAElB,OAAO,SAAS,MAAM,MACpB,OAAO,OACP,KAAK,IAAI,OAAO,QAAQ,MAAM,OAAO,WAAW,KAAK,CACvD;EACF,CAAC;EACD,MAAM,iBAAiB,eAAe,GAAG,MAAM,MAAM,GAAG,MAAM,MAAM;EACpE,MAAM,UAAU,eAAe;GAC7B,OAAO,GAAG,aAAa,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,aAAa,GAAG,KAAK,MAAK;MAChF,MAAM,MAAM,GAAG,MAAM,cAAc,GAAG,MAAM,MAAM,GAAG,MAAM,YAAY,GAAG,MAAM,YAAY;MAC5F,MAAM,WAAW,GAAG,MAAM,aAAa,GAAG,MAAM,OAAO,GAAG,MAAM,MAAM,GAAG,MAAM,cAAc,GAAG,MAAM,eAAe,GAAG,MAAM,SAAS;MACvI,MAAM,UAAU,GAAG,MAAM,WAAW,GAAG,MAAM,cAAc,GAAG,MAAM,eAAe,GAAG,MAAM;EAClG,CAAC;EACD,MAAM,eAAe,eAAe;GAClC,IAAI,MAAM,gBACR,OAAO,MAAM;GAEf,OAAO,YAAY,eAAe,CAAC,YAAY,YAAY,IAAI,CAAC;EAClE,CAAC;EACD,MAAM,OAAO,eAAe,MAAM,cAAc,YAAY,aAAc,MAAM,gBAAgB,YAAY,IAAK;EACjH,MAAM,WAAW,eAAe;GAC9B,IAAI,CAAC,MAAM,iBACT,OAAO;GAET,QAAQ,MAAM,cAAd;IACE,KAAK,SACH,OAAO,MAAM,EAAE,eAAe;IAChC,KAAK,QACH,OAAO,MAAM,EAAE,cAAc;IAC/B,KAAK,QACH,OAAO,MAAM,EAAE,sBAAsB;IACvC,SACE,OAAO,MAAM,EAAE,cAAc;GACjC;EACF,CAAC;EAGD,MAAM,sBAAsB;GAC1B,OAAO,QAAQ,MAAM;GACrB,MAAM,QAAQ,MAAM;EACtB,CAAC;EACD,MAAM,eAAe,aAAa,IAAI,CAAC;EACvC,YAAU,MAAM,cAAc,aAAa,IAAI,CAAC;EAChD,MAAM,aAAa,aAAa,IAAI,CAAC;EACrC,MAAM,cAAc;GAClB,IACE,CAAC,SAAS,MAAM,OAAO,UACvB,MAAM,SAAS,MAAM,OAAO,OAAO,WAEnC,aAAa,KAAK;EAEtB,CAAC;EAED,oBAAkB,aAAa,KAAK,CAAC;EAGrC,eAAe,aAAa,OAA+B;GACzD,QAAQ,QAAQ;GAIhB,IAAI,WAA8B,KAAA;GAClC,IAAI,MAAM,aAAa,KAAA,KAAa,MAAM,aAAa,IACrD,WAAW,MAAM,aAAa,UAAU,MAAM,aAAa;GAG7D,MAAM,QAA8B;IAClC,OAAO,QAAQ,IAAI,OAAO;IAC1B,MAAM,MAAM;IACZ,gBAAgB,aAAa;IAC7B,YAAY,MAAM;IAClB,SAAS,MAAM,gBAAgB,KAAI,MAAK,EAAE,OAAO;IACjD,OAAO,MAAM;IACb,eAAe,MAAM;IACrB,OAAO,MAAM;IACb,aAAa,MAAM;IACnB,MAAM,KAAK;IACX,eAAe,MAAM;IACrB,cAAc,MAAM;IACpB,gBAAgB,MAAM,gBAAgB,SAClC,MAAM,iBACN,KAAA;IACJ,YAAY,MAAM,YAAY,SAAS,MAAM,aAAa,KAAA;IAC1D,cAAc,MAAM,cAAc,SAAS,MAAM,eAAe,KAAA;IAChE,eAAe,MAAM;IACrB;IACA,aAAa,MAAM,iBAAiB,UAAU,aAAa,SAAS,KAAA;IACpE,kBAAkB,CAAC,wBAAwB,OAAO,wBAAwB,UAAU;IACpF,WAAW,MAAM;IACjB,MAAM,MAAM,YAAY,SAAS,MAAM,aAAa,KAAA;IACpD,eAAe,MAAM,iBAAiB,KAAA;IACtC,QAAQ,MAAM;GAChB;GAEA,IAAI;IAEF,cAAc,OAAO,MADF,WAAW,WAAW,OAAO,IAAI,CAC3B;GAC3B,SAAS,OAAO;IACd,IAAI,iBAAiB,YACnB,UAAU,KAAmB;SAE7B,QAAQ,MAAM,SAAS,KAAK;GAEhC;EACF;EACA,SAAS,cACP,OACA,MACM;GACN,IAAI,OAAO;IACT,OAAO,QAAQ;IACf,SAAS,MAAM,SAAS;GAC1B;GACA,IAAI,OAAO,QAAQ,SAAS,MAAM,QAChC,KACE,IAAI,IAAI,SAAS,MAAM,SAAS,GAAG,MAAM,OAAO,QAAQ,MAAM,OAC9D,IAAI,KACJ,KAEA,SAAS,MAAM,KAAK,iBAAiB,CAAC;GAG1C,MAAM,mBAAmB,KAAK,OAAO,QAAQ,MAAsB;IACjE,OAAO,SAAS;GAClB,CAAC;GACD,SAAS,QAAQ,SAAS,MACvB,MAAM,GAAG,OAAO,KAAK,EACrB,OAAO,gBAAgB,EACvB,OACC,SAAS,MAAM,MAAM,OAAO,QAAQ,MAAM,OAAO,SAAS,MAAM,MAAM,CACxE;GACF,KAAK,SAAS,SAAS,KAAK;GAC5B,WAAW,QAAQ,MAAM,iBAAiB,MAAM,OAAO,KAAK;GAC5D,IAAI,MAAM,SAAS,MAAM,QACvB,KAAK,WAAW;GAElB,QAAQ,QAAQ;EAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBCzPW,OAAM,uBAAsB;;;qBAvBrC,YA+Ce,OAAA,iBAAA;EA9Cb,IAAG;EACK,OAAO,OAAA;0DAAA,OAAA,SAAM;EACb,iBAAe,OAAA;gEAAA,OAAA,QAAK;EACpB,aAAW,OAAA;6DAAA,OAAA,WAAQ;EAC1B,cAAmB,OAAA,aAAa,OAAA,SAAS,SAAM,IAAe,OAAA,EAAC,mBAAA,EAAA,IAA0B,OAAA,WAAU,CAAA,IAAM,OAAA,WAAmB,KAAA;EAK5H,eAAa,OAAA;EACb,SAAS,OAAA;EACT,gBAAc,OAAA,UAAU,OAAA,EAAC,sBAAA,IAA2B,KAAA;EACpD,cAAA,CAAoB,OAAA,WAAO,CAAK,OAAA,SAAS,SAAiB,OAAA,EAAC,6BAAA,IAA0C,KAAA;EAKrG,oBAAkB,OAAA;EAClB,qBAAmB;EACnB,2BAAyB,OAAA;;EAEf,MAAI,cAuBP,CAtBN,mBAsBM,OAtBN,YAsBM,EAAA,UAAA,IAAA,GArBJ,mBAoBc,UAAA,MAAA,WAnBA,OAAA,eAAL,MAAC;uBADV,YAoBc,OAAA,gBAAA;IAlBX,KAAK,EAAE;IACP,cAAY;;IAMF,SAAO,cASF,CARd,YAQc,wBAAA;KAPX,IAAE;;2BAA0E,EAAE,UAAS;;KAIvF,OAAO,OAAA,EAAC,qBAAA,EAAA,MAA8B,EAAE,MAAK,CAAA;;4BAEjC,CAAA,gBAAA,gBAAV,EAAE,KAAK,GAAA,CAAA,CAAA,CAAA;;;2BATZ,CAAA,MAFY,EAAE,aAAA,UAAA,GADhB,YAGE,OAAA,gBAAA;;KADC,SAAS"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-BvC6iOS6.mjs","names":[],"sources":["../src/components/display/playlist/PodcastList.vue","../src/components/display/playlist/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n","<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-CRwA-s7F.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastList.vue","../src/components/display/podcasts/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n","<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-CVFr9WNS.mjs","names":[],"sources":["../src/components/display/playlist/PodcastList.vue","../src/components/display/playlist/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n","<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-DZKxDulS.mjs","names":[],"sources":["../src/components/display/playlist/PodcastList.vue","../src/components/display/playlist/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n","<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
2
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BOaGB7Aw.mjs";
|
|
3
|
-
import { _ as playlistApi } from "./classicApi-
|
|
4
|
-
import { t as ListPaginate_default } from "./ListPaginate-
|
|
5
|
-
import { t as useErrorHandler } from "./useErrorHandler-
|
|
6
|
-
import { t as useOrgaComputed } from "./useOrgaComputed-
|
|
3
|
+
import { _ as playlistApi } from "./classicApi-xjOqAovv.mjs";
|
|
4
|
+
import { t as ListPaginate_default } from "./ListPaginate-BXNnw_I8.mjs";
|
|
5
|
+
import { t as useErrorHandler } from "./useErrorHandler-D3XVxUh6.mjs";
|
|
6
|
+
import { t as useOrgaComputed } from "./useOrgaComputed-B2Bq0VBT.mjs";
|
|
7
7
|
import { t as ClassicLazy_default } from "./ClassicLazy-7mFHxG6O.mjs";
|
|
8
8
|
import { t as ClassicSearch_default } from "./ClassicSearch-D5yT0JRA.mjs";
|
|
9
|
-
import { t as PodcastItem_default } from "./PodcastItem-
|
|
9
|
+
import { t as PodcastItem_default } from "./PodcastItem-_8ErwIDG.mjs";
|
|
10
10
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, onBeforeMount, openBlock, ref, renderList, resolveComponent, toDisplayString, watch, withCtx } from "vue";
|
|
11
11
|
import { useI18n } from "vue-i18n";
|
|
12
12
|
//#region src/components/display/playlist/PodcastList.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -179,4 +179,4 @@ var PodcastList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(Podcas
|
|
|
179
179
|
//#endregion
|
|
180
180
|
export { PodcastList_exports as n, PodcastList_default as t };
|
|
181
181
|
|
|
182
|
-
//# sourceMappingURL=PodcastList-
|
|
182
|
+
//# sourceMappingURL=PodcastList-DgLQjL0d.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-DgLQjL0d.mjs","names":[],"sources":["../src/components/display/playlist/PodcastList.vue","../src/components/display/playlist/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n","<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
2
|
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BOaGB7Aw.mjs";
|
|
3
|
-
import { i as useAuthStore, m as podcastApi, p as PodcastSort, r as useFilterStore } from "./classicApi-
|
|
4
|
-
import { t as ListPaginate_default } from "./ListPaginate-
|
|
5
|
-
import { t as useErrorHandler } from "./useErrorHandler-
|
|
3
|
+
import { i as useAuthStore, m as podcastApi, p as PodcastSort, r as useFilterStore } from "./classicApi-xjOqAovv.mjs";
|
|
4
|
+
import { t as ListPaginate_default } from "./ListPaginate-BXNnw_I8.mjs";
|
|
5
|
+
import { t as useErrorHandler } from "./useErrorHandler-D3XVxUh6.mjs";
|
|
6
6
|
import { r as emptyPodcastData, t as PodcastProcessingStatus } from "./podcast-Da9L7I5Q.mjs";
|
|
7
7
|
import { t as ClassicLazy_default } from "./ClassicLazy-7mFHxG6O.mjs";
|
|
8
|
-
import { t as PodcastItem_default } from "./PodcastItem-
|
|
8
|
+
import { t as PodcastItem_default } from "./PodcastItem-_8ErwIDG.mjs";
|
|
9
9
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, onBeforeMount, openBlock, ref, renderList, resolveComponent, toDisplayString, watch, withCtx } from "vue";
|
|
10
10
|
import { useI18n } from "vue-i18n";
|
|
11
11
|
import { AxiosError } from "axios";
|
|
@@ -334,4 +334,4 @@ var PodcastList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(Podcas
|
|
|
334
334
|
//#endregion
|
|
335
335
|
export { PodcastList_exports as n, PodcastList_default as t };
|
|
336
336
|
|
|
337
|
-
//# sourceMappingURL=PodcastList-
|
|
337
|
+
//# sourceMappingURL=PodcastList-DhKeiBbv.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-DhKeiBbv.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastList.vue","../src/components/display/podcasts/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n","<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-Dtq6kEG4.mjs","names":[],"sources":["../src/components/display/podcasts/PodcastList.vue","../src/components/display/podcasts/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n","<!--\n Component displaying a list of podcast\n DO NOT confuse this with PodcastList from playlist\n-->\n<template>\n <ListPaginate\n id=\"podcastListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n showCount && podcasts.length > 1\n ? t('Number podcasts', { nb: totalCount }) + sortText\n : undefined\n \"\n :total-count=\"totalCount\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length\n ? t(`No podcast match your query`)\n : undefined\n \"\n :just-size-chosen=\"justSizeChosen\"\n :player-responsive=\"true\"\n :force-update-parameters=\"forceUpdateParameters\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in displayArray\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport PodcastItem from \"./PodcastItem.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { Podcast, PodcastProcessingStatus, emptyPodcastData } from \"../../../stores/class/general/podcast\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { podcastApi, PodcastMonetisation, PodcastSearchOptions, PodcastSort } from \"../../../api/podcastApi\";\nimport { EmissionGroup } from \"@/api/groupsApi\";\nimport { useAuthStore } from \"@/stores/AuthStore\";\n\n//Props \nconst props = withDefaults(defineProps<{\n first?: number;\n size?: number;\n organisationId?: Array<string>;\n emissionId?: number;\n iabId?: number;\n participantId?: number;\n query?: string;\n monetisable?: PodcastMonetisation;\n popularSort?: boolean;\n reload?: boolean;\n before?: string;\n after?: string;\n includeHidden?: boolean;\n /** Enable the display of number of items in ListPaginate */\n showCount?: boolean;\n displaySortText?: boolean;\n /** Criteria to sort on */\n sortCriteria?: PodcastSort;\n validity?: 'true'|'false'|''|boolean; // TODO improve this\n rubriqueId?: Array<number>;\n rubriquageId?: Array<number>;\n noRubriquageId?: Array<number>;\n justSizeChosen?: boolean;\n withVideo?: boolean;\n includeTag?: Array<string>;\n forceUpdateParameters?: boolean;\n /** The beneficiaries to filter on */\n beneficiaries?: Array<string>;\n /** The emission groups to filter on */\n emissionGroups?: Array<EmissionGroup>;\n /** Show only episodes created by current user */\n onlyMyEpisodes?: boolean;\n /** The seasons to filter on */\n seasons?: Array<number>;\n}>(), {\n first: 0,\n size: 30,\n popularSort: false,\n reload: false,\n includeHidden: false,\n showCount: false,\n displaySortText: true,\n validity: '',\n justSizeChosen: false,\n withVideo: undefined,\n forceUpdateParameters: false\n});\n\n//Emits\nconst emit = defineEmits([\"fetch\", \"emptyList\"]);\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst isMobile = ref(false);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\nconst authStore = useAuthStore();\n\n//Computed\nconst displayArray = computed(() => {\n if (isMobile.value || props.justSizeChosen) {\n return podcasts.value;\n }\n return podcasts.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, totalCount.value),\n );\n});\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\nconst changed = computed(() => {\n return `${organisation.value}|${props.emissionId}|${props.sortCriteria}|${sort.value}\n ${props.iabId}|${props.participantId}|${props.query}|${props.monetisable}|${props.popularSort}|\n ${props.rubriqueId}|${props.rubriquageId}|${props.before}|${props.after}|${props.includeHidden}|${props.noRubriquageId}|${props.validity}|\n ${props.withVideo}|${props.includeTag}|${props.beneficiaries}|${props.emissionGroups}|${props.onlyMyEpisodes}`;\n});\nconst organisation = computed(() => {\n if (props.organisationId) {\n return props.organisationId;\n }\n return filterStore.filterOrgaId ? [filterStore.filterOrgaId] : [];\n});\nconst sort = computed(() => props.popularSort ? PodcastSort.POPULARITY : (props.sortCriteria ?? PodcastSort.DATE));\nconst sortText = computed(() => {\n if (!props.displaySortText) {\n return \"\";\n }\n switch (props.sortCriteria) {\n case \"SCORE\":\n return \" \" + t(\"sort by score\");\n case \"DATE\":\n return \" \" + t(\"sort by date\");\n case \"NAME\":\n return \" \" + t(\"sort by alphabetical\");\n default:\n return \" \" + t(\"sort by date\");\n }\n});\n\n//Watch\nwatch(changePaginate, () => {\n dfirst.value = props.first;\n dsize.value = props.size;\n});\nwatch(changed, () => fetchContent(true));\nwatch(()=>props.reload, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n if (\n !podcasts.value[dfirst.value] ||\n 0 === podcasts.value[dfirst.value].podcastId\n ) {\n fetchContent(false);\n }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n loading.value = true;\n\n // Sadly we kinda have no idea what will be passed as 'validity', we need to\n // handle multiple cases.\n let validity: undefined|boolean = undefined;\n if (props.validity !== undefined && props.validity !== '') {\n validity = props.validity === 'true' || props.validity === true;\n }\n \n const param: PodcastSearchOptions = {\n first: reset ? 0 : dfirst.value,\n size: dsize.value,\n organisationId: organisation.value,\n emissionId: props.emissionId,\n groupId: props.emissionGroups?.map(g => g.groupId),\n iabId: props.iabId,\n participantId: props.participantId,\n query: props.query,\n monetisable: props.monetisable,\n sort: sort.value,\n pubDateBefore: props.before,\n pubDateAfter: props.after,\n noRubriquageId: props.noRubriquageId?.length\n ? props.noRubriquageId\n : undefined,\n rubriqueId: props.rubriqueId?.length ? props.rubriqueId : undefined,\n rubriquageId: props.rubriquageId?.length ? props.rubriquageId : undefined,\n includeHidden: props.includeHidden,\n validity,\n publisherId: props.onlyMyEpisodes ? authStore.authProfile?.userId : undefined,\n processingStatus: [PodcastProcessingStatus.Ready, PodcastProcessingStatus.Processing],\n withVideo: props.withVideo,\n tags: props.includeTag?.length ? props.includeTag : undefined,\n beneficiaries: props.beneficiaries ?? undefined,\n season: props.seasons\n };\n\n try {\n const data = await podcastApi.searchFull(param, true);\n afterFetching(reset, data);\n } catch (error) {\n if (error instanceof AxiosError) {\n handle403(error as AxiosError);\n } else {\n console.error('error', error);\n }\n }\n}\nfunction afterFetching(\n reset: boolean,\n data: { count: number; result: Array<Podcast>; sort: string },\n): void {\n if (reset) {\n dfirst.value = 0;\n podcasts.value.length = 0;\n }\n if (dfirst.value > podcasts.value.length) {\n for (\n let i = podcasts.value.length - 1, len = dfirst.value + dsize.value;\n i < len;\n i++\n ) {\n podcasts.value.push(emptyPodcastData());\n }\n }\n const responsePodcasts = data.result.filter((p: Podcast | null) => {\n return null !== p;\n });\n podcasts.value = podcasts.value\n .slice(0, dfirst.value)\n .concat(responsePodcasts)\n .concat(\n podcasts.value.slice(dfirst.value + dsize.value, podcasts.value.length),\n );\n emit(\"fetch\", podcasts.value);\n totalCount.value = props.justSizeChosen ? props.size : data.count;\n if (0 === podcasts.value.length) {\n emit(\"emptyList\");\n }\n loading.value = false;\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PodcastList-Dx-mo7Wo.mjs","names":[],"sources":["../src/components/display/playlist/PodcastList.vue","../src/components/display/playlist/PodcastList.vue"],"sourcesContent":["<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n","<!--\n Component displaying a list of podcasts IN A PLAYLIST\n Do not confuse this with PodcastList from podcasts\n-->\n<template>\n <div>\n <h3 class=\"mb-3 align-self-baseline\">\n {{ titleList }}\n </h3>\n\n <ClassicSearch\n v-if=\"!loading && notEmptyPlaylist\"\n v-model:text-init=\"searchPattern\"\n class=\"align-self-baseline mb-2\"\n id-search=\"podcast-list-search\"\n :label=\"t('Search')\"\n />\n\n <ListPaginate\n id=\"podcastPlaylistListPaginate\"\n v-model:first=\"dfirst\"\n v-model:rows-per-page=\"dsize\"\n v-model:is-mobile=\"isMobile\"\n :text-count=\"\n podcasts.length > 1\n ? `${t('Number podcasts', { nb: podcasts.length })}`\n : undefined\n \"\n :total-count=\"podcasts.length\"\n :loading=\"loading\"\n :loading-text=\"loading ? t('Loading podcasts ...') : undefined\"\n :error-text=\"\n !loading && !podcasts.length && notEmptyPlaylist\n ? t(`No podcast match your query`)\n : undefined\n \"\n :player-responsive=\"true\"\n :force-update-parameters=\"true\"\n >\n <template #list>\n <div class=\"octopus-element-list\">\n <ClassicLazy\n v-for=\"p in podcastsDisplay\"\n :key=\"p.podcastId\"\n :min-height=\"410\"\n >\n <PodcastItem\n v-if=\"0 !== p.podcastId\"\n :podcast=\"p\"\n />\n\n <template #preview>\n <router-link\n :to=\"{\n name: 'podcast',\n params: { podcastId: p.podcastId },\n }\"\n :title=\"t('Episode name page', { name: p.title })\"\n >\n {{ p.title }}\n </router-link>\n </template>\n </ClassicLazy>\n </div>\n </template>\n </ListPaginate>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport {useOrgaComputed} from \"../../composable/useOrgaComputed\";\nimport PodcastItem from \"../podcasts/PodcastItem.vue\";\nimport ClassicSearch from \"../../form/ClassicSearch.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport { Podcast } from \"@/stores/class/general/podcast\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { playlistApi } from \"../../../api/playlistApi\";\n\n//Props \nconst props = defineProps({\n playlist: { default: () => ({}), type: Object as () => Playlist },\n first: { default: 0, type: Number },\n size: { default: 30, type: Number },\n query: { default: undefined, type: String },\n})\n\n//Emits\nconst emit = defineEmits([\"update:query\"]);\n\n//Data \nconst loading = ref(true);\nconst podcasts: Ref<Array<Podcast>> = ref([]);\nconst podcastsQuery: Ref<Array<Podcast>> = ref([]);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst searchPattern = ref(\"\");\nconst isMobile = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst { isEditRights } = useOrgaComputed();\n\n//Computed\nconst titleList = computed(() => notEmptyPlaylist.value? t(\"Podcasts in the playlist\"): t(\"No podcasts in the playlist\"));\nconst notEmptyPlaylist = computed(() => 0 !== Object.keys(props.playlist.samplingViews ?? []).length);\nconst podcastsDisplay = computed(() => {\n if (isMobile.value) {\n return podcastsQuery.value.slice(\n 0,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n }\n return podcastsQuery.value.slice(\n dfirst.value,\n Math.min(dfirst.value + dsize.value, podcasts.value.length),\n );\n});\nconst editRight = computed(() =>isEditRights(props.playlist.organisation?.id));\n\n//Watch\nwatch(searchPattern,() => {\n emit('update:query', searchPattern.value);\n if (\"\" !== searchPattern.value) {\n podcastsQuery.value = podcasts.value.filter((el: Podcast) => {\n return el.title\n .toLowerCase()\n .includes(searchPattern.value.toLowerCase());\n });\n } else {\n podcastsQuery.value = podcasts.value;\n }\n});\n\nonBeforeMount(fetchContent);\n\n\n//Methods\nasync function fetchContent(): Promise<void> {\n if (notEmptyPlaylist.value) {\n podcasts.value.length = 0;\n loading.value = true;\n try {\n podcasts.value = await playlistApi.getContentFull(props.playlist.playlistId);\n if (!editRight.value) {\n podcasts.value = podcasts.value.filter((p: Podcast | null) => {\n return (\n null !== p &&\n (!p.availability || true === p.availability.visibility)\n );\n });\n }\n podcastsQuery.value = podcasts.value;\n searchPattern.value = props.query ?? \"\";\n } catch (error) {\n handle403(error as AxiosError);\n }\n }\n loading.value = false;\n}\n</script>\n\n"],"mappings":"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"}
|