import { call as e, put as r, takeLatest as o, select as i, fork as t } from "redux-saga/effects"
import {
updateLatestMembersReportedOrder as m,
appendOlderMembersReportedOrder as d,
upsertMembersReportedById as l,
updateMembersReportedLoadingStatus as c,
setMembersReportedInViewRange as s,
resetMembersReported as n,
subscribeMembersReported as a,
loadOlderMembersReported as b,
} from "./members-reported.action"
import {
getMembersReportedMinClock as p,
getMembersReportedLoadingStatus as y,
getMembersReportedAnchorClock as f,
} from "./members-reported.selectors"
import { MEMBER_REPORTED_DEFAULT_LIMIT as u } from "./members-reported.constant"
import { LOADING_STATUS as R } from "../../lib/clock-list"
import { memberWaitProfileData as g } from "../member.saga"
import { taskErrorSaga as S } from "../../error"
import { apiSubscribeSaga as L } from "../../lib"
import { getCoreBackend as E } from "../../../backend"
import { apiCall as O } from "../../../api/core"
import { getMyMemberCapabilities as k, isMemberCapabilityChanged as A } from "../member.reducer"
import { canModerate as D } from "../member.model"
function* M(e) {
yield r(n())
try {
const o = E(),
i = u
yield L([o.subscribeReportedMembers, e, { limit: i }], (e) => r(m(e)), {
onError: (e) => S("membersReportedLatestSubscribeSaga", e),
})
} catch (e) {
;(yield r(c(R.ERROR)), yield S("membersReportedLatestSubscribeSaga", e))
}
}
function* h(o) {
try {
const t = yield i(y),
m = yield i(p)
if (t === R.ALL_LOADED || null == m) return
yield r(c(R.LOADING))
const l = E(),
s = u,
n = yield e(O, l.getReportedMembers, o, { clock: m, limit: s })
yield r(d(n))
} catch (e) {
;(yield r(c(R.ERROR)), yield S("loadOlderMembersReportedSaga", e))
}
}
function* I(e) {
const o = yield i(k(e))
if (!D(o)) return void (yield r(n()))
const t = yield i(f),
m = null === t ? { limit: u } : { clock: t, limit: u }
yield L([E().subscribeReportedMembers, e, m], (e) => r(l(e)), {
onError: (e) => S("membersReportedAnchorDataSaga", e),
})
}
function* x(e) {
yield o([s, m, d, A], I, e)
}
export function* membersReportedSaga(e, i) {
yield g({ roomId: e, memberId: i })
try {
;(yield t(x, e), yield o(a, M, e), yield o(b, h, e))
} finally {
yield r(n())
}
}