OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / room / dm / room-dm.reducer.js

122 lines · javascript ref:
import { createSlice as e, createAction as t, createSelector as s } from "@reduxjs/toolkit"
import { ROOM_STATE_KEY as r } from "../room.constant"
import {
  ROOM_DM_STATE_KEY as o,
  ROOM_DM_EMPTY_ID as n,
  ROOM_DM_REPLY as m,
} from "./room-dm.constant"
export const ROOM_DM_INITIAL_STATE = {
  requestByStatus: {},
  received: { requests: [], byRequestId: {}, bySenderId: {}, activeRequestId: n },
  contact: { byMemberId: {}, byRoomId: {} },
  reply: { sending: !1, success: !1, errorMsg: "", type: null },
  request: { sending: !1, success: !1, errorMsg: "" },
  pairing: { bySeedId: {}, byRequestId: {} },
}
export const roomDmSlice = e({
  name: o,
  initialState: ROOM_DM_INITIAL_STATE,
  reducers: {
    setDmContact: (e, { payload: t }) => {
      ;((e.contact.byMemberId[t.memberId] = { ...e.contact.byMemberId[t.memberId], ...t }),
        (e.contact.byRoomId[t.roomId] = t.memberId))
    },
    setDmRequests: (e, { payload: { requests: t, status: s } }) => {
      e.requestByStatus[s] = t
      const r = Object.values(e.requestByStatus).flat()
      ;((e.received.requests = r), (e.received.byRequestId = {}), (e.received.bySenderId = {}))
      for (const t of r)
        ((e.received.byRequestId[t.id] = t), (e.received.bySenderId[t.senderId] = t.id))
    },
    setDmActiveId: (e, { payload: t }) => {
      e.received.activeRequestId = t || n
    },
    setDmRequestSuccess: (e) => {
      ;((e.request.sending = !1), (e.request.success = !0))
    },
    setDmRequestError: (e, { payload: t }) => {
      ;((e.request.errorMsg = t), (e.request.sending = !1))
    },
    setDmRequestSending: (e) => {
      ;((e.request.errorMsg = ""), (e.request.sending = !0))
    },
    setDmReplySuccess: (e, { payload: t }) => {
      ;((e.reply.sending = !1), (e.reply.success = !0))
    },
    setDmReplyError: (e, { payload: t }) => {
      ;((e.reply.errorMsg = t), (e.reply.sending = !1))
    },
    setDmReplySending: (e, { payload: t }) => {
      ;((e.reply.errorMsg = ""), (e.reply.sending = !0), (e.reply.type = t || null))
    },
    resetAfterReply: (e) => {
      ;((e.reply = ROOM_DM_INITIAL_STATE.reply),
        (e.received.activeRequestId = ROOM_DM_INITIAL_STATE.received.activeRequestId))
    },
    resetDmContact: (e, { payload: { memberId: t, roomId: s } }) => {
      ;(delete e.contact.byMemberId[t], delete e.contact.byRoomId[s])
    },
  },
})
export const getDmState = (e) => e[r][o]
export const getDmAllRequests = (e) => getDmState(e).received.requests
export const getDmRequestsById = (e) => getDmState(e).received.byRequestId
export const getDmRequestsBySenders = (e) => getDmState(e).received.bySenderId
export const getDmPairingBySeeds = (e) => getDmState(e).pairing.bySeedId
export const getDmPairingByRequests = (e) => getDmState(e).pairing.byRequestId
export const getDmContactByMembers = (e) => getDmState(e).contact.byMemberId
export const getDmMemberByRooms = (e) => getDmState(e).contact.byRoomId
export const getDmActiveId = (e) => getDmState(e).received.activeRequestId
export const getDmRequestSending = (e) => getDmState(e).request.sending
export const getDmRequestSuccess = (e) => getDmState(e).request.success
export const getDmRequestErrorMsg = (e) => getDmState(e).request.errorMsg
export const getDmReplySending = (e) => getDmState(e).reply.sending
export const getDmReplySuccess = (e) => getDmState(e).reply.success
export const getDmReplyErrorMsg = (e) => getDmState(e).reply.errorMsg
export const getDmReplyType = (e) => getDmState(e).reply.type
export const getDmReplySendingType = s([getDmState], (e) => {
  const { reply: t } = e
  return {
    acceptInProgress: t.sending && t.type === m.ACCEPT,
    rejectInProgress: t.sending && t.type === m.REJECT,
  }
})
export const getDmRequestById = (e) => (t) => getDmRequestsById(t)[e]
export const getDmRequestBySenderId = (e) => (t) => {
  const s = getDmRequestsBySenders(t)[e]
  return getDmRequestsById(t)[s]
}
export const getDmRequestByPairingId = (e) => (t) => {
  const s = getDmPairingBySeeds(t)[e]
  return s?.requestId ? getDmRequestsById(t)[s.requestId] : null
}
export const getDmRequests = s([getDmAllRequests], (e) => e.filter((e) => e.status.isPending))
export const getUnseenDmRequestCount = s([getDmRequests], (e) =>
  Array.isArray(e) ? e.filter((e) => !e.status.isSeen).length : 0,
)
export const getDmActiveRequest = (e) => {
  const t = getDmActiveId(e)
  return getDmRequestById(t)(e)
}
export const getDmContactInfo = (e) => (t) => getDmContactByMembers(t)[e]
export const getDmMemberByRoomId = (e) => (t) => getDmMemberByRooms(t)[e]
export const {
  setDmRequests: setDmRequests,
  setDmContact: setDmContact,
  resetDmContact: resetDmContact,
  setDmActiveId: setDmActiveId,
  setDmRequestSending: setDmRequestSending,
  setDmRequestSuccess: setDmRequestSuccess,
  setDmRequestError: setDmRequestError,
  setDmReplySending: setDmReplySending,
  setDmReplySuccess: setDmReplySuccess,
  setDmReplyError: setDmReplyError,
  resetAfterReply: resetAfterReply,
} = roomDmSlice.actions
export const dmReducer = roomDmSlice.reducer
export const dmRequestSubmit = t("dm/request-submit")
export const dmReplySubmit = t("dm/reply-submit", (e, t) => ({
  payload: { replyType: e, requestId: t },
}))
export const fetchDmContactInfoCmd = t("dm/fetch-contact-info-cmd")