{"version":3,"file":"ArtistVideo.de5794ac.js","sources":["app/assets/vite/stores/ArtistVideo.ts"],"sourcesContent":["import { store, Model } from \"hybrids\";\nimport { get, post, remove } from \"../utils/api\";\n\nimport Comment from \"./Comment\";\nimport { Patron } from \"./Broadcast\";\nimport Payment from \"./Payment\";\nimport Sponsor from \"./Sponsor\";\nimport User from \"./User\";\n\nconst URL = \"/artist_videos/:id\";\n\nconst PREFIX_LENGTH = 7;\n\nconst groupsOrder = new Map([\n [\"Artist\".slice(0, PREFIX_LENGTH), 0],\n [\"Artists\".slice(0, PREFIX_LENGTH), 0],\n [\"Accompanist\".slice(0, PREFIX_LENGTH), 1],\n [\"Executive Producer\".slice(0, PREFIX_LENGTH), 2],\n [\"Curator\".slice(0, PREFIX_LENGTH), 3],\n [\"Venue\".slice(0, PREFIX_LENGTH), 4],\n [\"Organizer\".slice(0, PREFIX_LENGTH), 5],\n [\"Producer\".slice(0, PREFIX_LENGTH), 6],\n [\"Promoter\".slice(0, PREFIX_LENGTH), 7],\n [\"Sponsor\".slice(0, PREFIX_LENGTH), 8],\n [\"Host\".slice(0, PREFIX_LENGTH), 9],\n [\"Staff\".slice(0, PREFIX_LENGTH), 10],\n [\"Volunteer\".slice(0, PREFIX_LENGTH), 11],\n [\"Advisor\".slice(0, PREFIX_LENGTH), 12],\n [\"Instructur\".slice(0, PREFIX_LENGTH), 13],\n [\"Teacher\".slice(0, PREFIX_LENGTH), 14],\n [\"Director\".slice(0, PREFIX_LENGTH), 15],\n [\"Board of Directors\".slice(0, PREFIX_LENGTH), 16],\n [\"Artistic Director\".slice(0, PREFIX_LENGTH), 17],\n [\"Designer\".slice(0, PREFIX_LENGTH), 18],\n [\"Collaborator\".slice(0, PREFIX_LENGTH), 19],\n [\"Owner\".slice(0, PREFIX_LENGTH), 20],\n]);\n\n\n\ninterface CollaboratorsGroup {\n name: string;\n collaborators: User[];\n}\n\ninterface ArtistVideo {\n id: string;\n name: string;\n description: string;\n src: string;\n url: string;\n iframely: string;\n muxDataApiKey: string;\n thumbnail: string;\n poster: string;\n collaboratorsGroups: CollaboratorsGroup[];\n sponsors: Sponsor[];\n owner?: User;\n payments: Payment[];\n users: User[];\n comments: Comment[];\n likedComments: Comment[];\n permissions: {\n canManageAllComments: boolean;\n };\n tags: string[];\n hasLike: boolean;\n\n // computed properties\n patrons: Patron[];\n}\n\nexport const sortVideoCollaboratorsGroups = (collaboratorsGroups: CollaboratorsGroup[]): CollaboratorsGroup[] => {\n return [...collaboratorsGroups].sort((g1, g2) => {\n const g1Val = groupsOrder.get(g1.name.slice(0, PREFIX_LENGTH));\n const g2Val = groupsOrder.get(g2.name.slice(0, PREFIX_LENGTH));\n if (g1Val < g2Val) {\n return -1;\n }\n return 1;\n });\n}\n\nexport async function removeComment(video: ArtistVideo, comment: Comment) {\n const set = new Set(video.comments);\n\n set.forEach((c) => {\n if (c === comment || c.parent === comment) {\n set.delete(c);\n }\n });\n\n store.set(video, { comments: [...set] });\n store.set(comment, null);\n\n await remove(`${URL}/comments/${comment.id}`, video.id);\n\n return null;\n}\n\nexport async function toggleCommentLike(video: ArtistVideo, comment: Comment) {\n const set = new Set(video.likedComments);\n const hasComment = set.has(comment);\n\n set[hasComment ? \"delete\" : \"add\"](comment);\n store.set(video, { likedComments: [...set] });\n\n const {id, ...values}: Comment = await post(\n `${URL}/comments/${comment.id}/${hasComment ? \"dislike\" : \"like\"}`,\n null,\n video.id\n );\n\n values.context = {\n type: \"video\",\n identifier: video.id,\n }\n\n return store.set(comment, values);\n}\n\nexport async function toggleVideoFavorite(video: ArtistVideo) {\n const { id, ...values }: ArtistVideo = await post(\n `${URL}/${video.hasLike ? \"dislike\" : \"like\"}`,\n null,\n video.id\n );\n return store.set(video, { hasLike: !video.hasLike });\n}\n\nconst ArtistVideo: Model = {\n id: true,\n name: \"\",\n description: \"\",\n src: \"\",\n url: \"\",\n iframely: \"\",\n muxDataApiKey: \"\",\n thumbnail: \"\",\n poster: \"\",\n collaboratorsGroups: [{\n name: \"\",\n collaborators: [User]\n }],\n collaborators: [User],\n sponsors: [Sponsor],\n owner: User,\n payments: [Payment],\n users: [User],\n comments: [Comment],\n likedComments: [Comment],\n permissions: {\n canManageAllComments: false,\n },\n tags: [\"\"],\n hasLike: false,\n\n // computed properties\n patrons: ({ payments }) => {\n const acc = new Map();\n\n payments\n .filter(({ user }) => store.ready(user))\n .forEach(({ user, amount }) => {\n const patron = { user, amount: (acc.get(user)?.amount ?? 0) + amount };\n\n acc.set(user, patron);\n });\n\n return [...acc].map(([_, patron]) => patron);\n },\n\n [store.connect]: {\n get: (id) => get(\"/artist_videos/:id\", id),\n set: (_, values) => values,\n list: (query) => {\n if (query && typeof query === \"object\") {\n if (query.related) {\n if (query.tag) {\n return get(\"/artist_videos/:id/related\", {\n id: query.id,\n tag_name: query.tag,\n page: query.page,\n });\n }\n\n return get(\"/artist_videos/:id/related\", {\n id: query.id,\n page: query.page,\n });\n } else if (query.featured) {\n return get(\"/artist_videos/featured\", {\n artist_id: query.artist_id,\n artist_type: query.artist_type,\n page: query.page,\n });\n } else if (query.tag) {\n return get(\"/artist_videos/tagged\", {\n tag: query.tag,\n page: query.page,\n });\n } else if (query.liked) {\n return get(\"/artist_videos/liked\", {\n page: query.page,\n user_id: query.user_id,\n });\n }\n }\n\n return get(\"/artist_videos\", query);\n },\n offline: 1000 * 60 * 60 * 24 * 7, // 7 days\n },\n};\n\nexport default ArtistVideo;\n"],"names":["URL","groupsOrder","Map","slice","sortVideoCollaboratorsGroups","collaboratorsGroups","sort","g1","g2","get","name","async","removeComment","video","comment","set","Set","comments","forEach","c","parent","delete","store","remove","id","toggleCommentLike","likedComments","hasComment","has","values","post","context","type","identifier","toggleVideoFavorite","hasLike","ArtistVideo","description","src","url","iframely","muxDataApiKey","thumbnail","poster","collaborators","User","sponsors","Sponsor","owner","payments","Payment","users","Comment","permissions","canManageAllComments","tags","patrons","acc","filter","user","ready","amount","patron","_b","_a","map","_","connect","list","query","related","tag","tag_name","page","featured","artist_id","artist_type","liked","user_id","offline"],"mappings":"+HASA,MAAMA,EAAM,qBAINC,MAAkBC,IAAoB,CAC1C,CAAC,SAASC,MAAM,EAHI,GAGe,GACnC,CAAC,UAAUA,MAAM,EAJG,GAIgB,GACpC,CAAC,cAAcA,MAAM,EALD,GAKoB,GACxC,CAAC,qBAAqBA,MAAM,EANR,GAM2B,GAC/C,CAAC,UAAUA,MAAM,EAPG,GAOgB,GACpC,CAAC,QAAQA,MAAM,EARK,GAQc,GAClC,CAAC,YAAYA,MAAM,EATC,GASkB,GACtC,CAAC,WAAWA,MAAM,EAVE,GAUiB,GACrC,CAAC,WAAWA,MAAM,EAXE,GAWiB,GACrC,CAAC,UAAUA,MAAM,EAZG,GAYgB,GACpC,CAAC,OAAOA,MAAM,EAbM,GAaa,GACjC,CAAC,QAAQA,MAAM,EAdK,GAcc,IAClC,CAAC,YAAYA,MAAM,EAfC,GAekB,IACtC,CAAC,UAAUA,MAAM,EAhBG,GAgBgB,IACpC,CAAC,aAAaA,MAAM,EAjBA,GAiBmB,IACvC,CAAC,UAAUA,MAAM,EAlBG,GAkBgB,IACpC,CAAC,WAAWA,MAAM,EAnBE,GAmBiB,IACrC,CAAC,qBAAqBA,MAAM,EApBR,GAoB2B,IAC/C,CAAC,oBAAoBA,MAAM,EArBP,GAqB0B,IAC9C,CAAC,WAAWA,MAAM,EAtBE,GAsBiB,IACrC,CAAC,eAAeA,MAAM,EAvBF,GAuBqB,IACzC,CAAC,QAAQA,MAAM,EAxBK,GAwBc,MAqCvBC,EAAgCC,GACpC,IAAIA,GAAqBC,MAAK,CAACC,EAAIC,IAC1BP,EAAYQ,IAAIF,EAAGG,KAAKP,MAAM,EA/D1B,IAgEJF,EAAYQ,IAAID,EAAGE,KAAKP,MAAM,EAhE1B,KAkET,EAEF,IAIWQ,eAAAC,EAAcC,EAAoBC,GACtD,MAAMC,EAAM,IAAIC,IAAIH,EAAMI,UAanB,OAXHF,EAAAG,SAASC,IACPA,IAAML,GAAWK,EAAEC,SAAWN,GAChCC,EAAIM,OAAOF,MAITG,EAAAP,IAAIF,EAAO,CAAEI,SAAU,IAAIF,KAC3BO,EAAAP,IAAID,EAAS,YAEbS,EAAO,GAAGvB,cAAgBc,EAAQU,KAAMX,EAAMW,IAE7C,KAGab,eAAAc,EAAkBZ,EAAoBC,GAC1D,MAAMC,EAAM,IAAIC,IAAIH,EAAMa,eACpBC,EAAaZ,EAAIa,IAAId,GAEvBC,EAAAY,EAAa,SAAW,OAAOb,GAC7BQ,EAAAP,IAAIF,EAAO,CAAEa,cAAe,IAAIX,KAEtC,MAAMS,GAACA,KAAOK,SAAyBC,EACrC,GAAG9B,cAAgBc,EAAQU,MAAMG,EAAa,UAAY,SAC1D,KACAd,EAAMW,IAQD,OALPK,EAAOE,QAAU,CACfC,KAAM,QACNC,WAAYpB,EAAMW,IAGbF,EAAMP,IAAID,EAASe,GAG5BlB,eAAsBuB,EAAoBrB,GAMjC,aALsCiB,EACzC,GAAG9B,KAAOa,EAAMsB,QAAU,UAAY,SACtC,KACAtB,EAAMW,IAEHF,EAAMP,IAAIF,EAAO,CAAEsB,SAAUtB,EAAMsB,UAG5C,MAAMC,EAAkC,CACtCZ,IAAI,EACJd,KAAM,GACN2B,YAAa,GACbC,IAAK,GACLC,IAAK,GACLC,SAAU,GACVC,cAAe,GACfC,UAAW,GACXC,OAAQ,GACRtC,oBAAqB,CAAC,CACpBK,KAAM,GACNkC,cAAe,CAACC,KAElBD,cAAe,CAACC,GAChBC,SAAU,CAACC,GACXC,MAAOH,EACPI,SAAU,CAACC,GACXC,MAAO,CAACN,GACR5B,SAAU,CAACmC,GACX1B,cAAe,CAAC0B,GAChBC,YAAa,CACXC,sBAAsB,GAExBC,KAAM,CAAC,IACPpB,SAAS,EAGTqB,QAAS,EAAGP,SAAAA,MACJ,MAAAQ,MAAUvD,IAUT,OARP+C,EACGS,QAAO,EAAGC,KAAAA,KAAWrC,EAAMsC,MAAMD,KACjCzC,SAAQ,EAAGyC,KAAAA,EAAME,OAAAA,cACV,MAAAC,EAAS,CAAEH,KAAAA,EAAME,QAAS,OAAAE,EAAA,OAAIC,EAAAP,EAAAhD,IAAIkD,SAAO,EAAAK,EAAAH,QAAUE,EAAA,GAAKF,GAE1DJ,EAAA1C,IAAI4C,EAAMG,MAGX,IAAIL,GAAKQ,KAAI,EAAEC,EAAGJ,KAAYA,KAGvC,CAACxC,EAAM6C,SAAU,CACf1D,IAAMe,GAAOf,EAAI,qBAAsBe,GACvCT,IAAK,CAACmD,EAAGrC,IAAWA,EACpBuC,KAAOC,IACD,GAAAA,GAA0B,iBAAVA,EAAoB,CACtC,GAAIA,EAAMC,QACR,OAAID,EAAME,IACD9D,EAAI,6BAA8B,CACvCe,GAAI6C,EAAM7C,GACVgD,SAAUH,EAAME,IAChBE,KAAMJ,EAAMI,OAIThE,EAAI,6BAA8B,CACvCe,GAAI6C,EAAM7C,GACViD,KAAMJ,EAAMI,OACb,GACQJ,EAAMK,SACf,OAAOjE,EAAI,0BAA2B,CACpCkE,UAAWN,EAAMM,UACjBC,YAAaP,EAAMO,YACnBH,KAAMJ,EAAMI,OACb,GACQJ,EAAME,IACf,OAAO9D,EAAI,wBAAyB,CAClC8D,IAAKF,EAAME,IACXE,KAAMJ,EAAMI,OACb,GACQJ,EAAMQ,MACf,OAAOpE,EAAI,uBAAwB,CACjCgE,KAAMJ,EAAMI,KACZK,QAAST,EAAMS,UAKd,OAAArE,EAAI,iBAAkB4D,IAE/BU,QAAS"}