{"version":3,"file":"discussion.93d93949.js","sources":["../../../frontend/api/v3/private/discussion.js"],"sourcesContent":["// Helpers\nimport { privateApiUrl, postRequest, putRequest, deleteRequest } from 'api/v3';\n\n/**\n * Create a discussion for discussion topic\n * @param {string} discussableType\n * @param {(string|number)} discussableId\n * @param {string} comment\n * @param {(string|number|null)} parentId\n * @param {boolean} force - Allow toxic comment\n * @param {string} locale - ISO 369 code\n * @returns {Promise}\n */\n\nexport const createDiscussion = (\n discussableType,\n discussableId,\n comment,\n parentId,\n force = false,\n locale = 'en'\n) => {\n const data = {\n discussable_type: discussableType,\n discussable_id: discussableId,\n body: `${comment}`,\n force,\n };\n\n if (parentId) {\n data.parent_id = parentId;\n }\n\n return postRequest(\n privateApiUrl('discussions', {\n locale,\n }),\n {\n data: {\n type: 'discussions',\n attributes: data,\n },\n }\n );\n};\n\n/**\n * Update a discussion attributes\n * @param {(number|string)} id\n * @param {object} body\n * @returns\n */\nexport const updateDiscussion = (id, body = {}) => {\n const url = privateApiUrl(`discussions/${id}`);\n return putRequest(url, {\n data: {\n type: 'discussions',\n attributes: body,\n },\n });\n};\n\n/**\n * Approve or reject a discussion\n * @param {object} discussion\n * @param {(number|string)} discussion.id\n * @param {string[]} discussion.moderationLabels\n * @param {boolean} approved\n * @returns\n */\nexport const approveDiscussion = (discussion, approved = true) => {\n // Remove the \"Requires moderation\" label\n const labels = discussion.moderationLabels.filter((label) => label !== 'Requires moderation');\n\n return updateDiscussion(discussion.id, {\n approved,\n require_moderation: false,\n moderation_labels: labels,\n force: true,\n });\n};\n\n/**\n * Get discussion replies URL\n * @param {(string|number)} id - discussion ID\n * @param {(string|number)} page\n * @param {(string|number)} size - item size\n * @returns {string}\n */\nexport const getDiscussionRepliesURL = (\n id,\n page = 1,\n size = 25,\n filter = {\n require_moderation: false,\n }\n) => {\n return privateApiUrl(`discussions/${id}/discussion_replies`, {\n page: {\n size,\n number: page,\n },\n sort: '-created_at',\n filter,\n });\n};\n\n/**\n * Like a discussion\n * @param {(number|string)} discussionId\n */\nexport const createDiscussionLike = (discussionId) => {\n return postRequest(privateApiUrl(`discussions/${discussionId}/discussion_likes`), {\n data: {\n type: 'discussion_like',\n attributes: {},\n },\n });\n};\n\n/**\n * Cancel remove the like of the discussion\n * @param {(string|number)} discussionId\n * @param {(string|number)} discussionLikeId\n * @returns\n */\nexport const removeDiscussionLike = (discussionId, discussionLikeId) => {\n return deleteRequest(\n privateApiUrl(`discussions/${discussionId}/discussion_likes/${discussionLikeId}`)\n );\n};\n\n/**\n * Create a report for a discussion\n * @param {(string|number)} discussionId\n * @param {(string|number)} reasonId\n * @returns\n */\nexport const createDiscussionReport = (discussionId, reasonId, body) => {\n return postRequest(privateApiUrl(`discussions/${discussionId}/discussion_reports`), {\n data: {\n type: 'discussion_report',\n attributes: {\n discussion_report_reason_id: reasonId,\n body,\n },\n },\n });\n};\n\n/**\n * Mark the report_acknowledged of discussion reports of a discussion to true\n * @param {(string|number)} discussionId\n * @returns\n */\nexport const markReportsAcknowledges = (discussionId) => {\n const url = privateApiUrl(\n `discussions/${discussionId}/discussion_reports/acknowledge_all_reports`\n );\n\n return putRequest(url);\n};\n\n/**\n * Retrieve the thread for a discussion\n * @param {(number|string)} discussionId\n * @returns {string}\n */\nexport const getDiscussionThreadURL = (discussionId) => {\n return privateApiUrl(`discussions/${discussionId}/discussion_threads`);\n};\n"],"names":["createDiscussion","discussableType","discussableId","comment","parentId","force","locale","data","postRequest","privateApiUrl","updateDiscussion","id","body","url","putRequest","approveDiscussion","discussion","approved","labels","label","getDiscussionRepliesURL","page","size","filter","createDiscussionLike","discussionId","removeDiscussionLike","discussionLikeId","deleteRequest","createDiscussionReport","reasonId","markReportsAcknowledges","getDiscussionThreadURL"],"mappings":"2aAca,MAAAA,EAAmB,CAC9BC,EACAC,EACAC,EACAC,EACAC,EAAQ,GACRC,EAAS,OACN,CACH,MAAMC,EAAO,CACX,iBAAkBN,EAClB,eAAgBC,EAChB,KAAM,GAAGC,IACT,MAAAE,CAAA,EAGF,OAAID,IACFG,EAAK,UAAYH,GAGZI,EACLC,EAAc,cAAe,CAC3B,OAAAH,CAAA,CACD,EACD,CACE,KAAM,CACJ,KAAM,cACN,WAAYC,CACd,CACF,CAAA,CAEJ,EAQaG,EAAmB,CAACC,EAAIC,EAAO,KAAO,CAC3C,MAAAC,EAAMJ,EAAc,eAAeE,GAAI,EAC7C,OAAOG,EAAWD,EAAK,CACrB,KAAM,CACJ,KAAM,cACN,WAAYD,CACd,CAAA,CACD,CACH,EAUaG,EAAoB,CAACC,EAAYC,EAAW,KAAS,CAEhE,MAAMC,EAASF,EAAW,iBAAiB,OAAQG,GAAUA,IAAU,qBAAqB,EAErF,OAAAT,EAAiBM,EAAW,GAAI,CACrC,SAAAC,EACA,mBAAoB,GACpB,kBAAmBC,EACnB,MAAO,EAAA,CACR,CACH,EASaE,EAA0B,CACrCT,EACAU,EAAO,EACPC,EAAO,GACPC,EAAS,CACP,mBAAoB,EACtB,IAEOd,EAAc,eAAeE,uBAAyB,CAC3D,KAAM,CACJ,KAAAW,EACA,OAAQD,CACV,EACA,KAAM,cACN,OAAAE,CAAA,CACD,EAOUC,EAAwBC,GAC5BjB,EAAYC,EAAc,eAAegB,oBAA+B,EAAG,CAChF,KAAM,CACJ,KAAM,kBACN,WAAY,CAAC,CACf,CAAA,CACD,EASUC,EAAuB,CAACD,EAAcE,IAC1CC,EACLnB,EAAc,eAAegB,sBAAiCE,GAAkB,CAAA,EAUvEE,EAAyB,CAACJ,EAAcK,EAAUlB,IACtDJ,EAAYC,EAAc,eAAegB,sBAAiC,EAAG,CAClF,KAAM,CACJ,KAAM,oBACN,WAAY,CACV,4BAA6BK,EAC7B,KAAAlB,CACF,CACF,CAAA,CACD,EAQUmB,EAA2BN,GAAiB,CACvD,MAAMZ,EAAMJ,EACV,eAAegB,8CAAA,EAGjB,OAAOX,EAAWD,CAAG,CACvB,EAOamB,EAA0BP,GAC9BhB,EAAc,eAAegB,sBAAiC"}