OverviewFilesCommitsIssuesDocsReleasesPeers

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

118 lines · javascript ref:
import { createSlice as o, createAction as i, createSelector as e } from "@reduxjs/toolkit"
import { EMPTY_ROOM_ID as t, ROOM_STATE_KEY as n } from "../room.constant"
import { PAIRING_STATUS as a } from "./room-joint.model"
const r = {
    all: [],
    activeSeedId: "",
    lastPairingRoom: null,
    pairError: "",
    waitingDmMemberId: "",
  },
  m = { roomId: "", inProgress: !1, shouldConfirm: !1 }
export const ROOM_JOINT_INITIAL_STATE = {
  invitationLink: "",
  invitationPreviewByLink: {},
  pairing: r,
  leaving: m,
}
export const ROOM_JOINT_STATE_KEY = "joint"
export const roomJointSlice = o({
  name: "joint",
  initialState: ROOM_JOINT_INITIAL_STATE,
  reducers: {
    setRoomInvitation: (o, { payload: i }) => {
      const { invitationLink: e, invitationPreview: t } = i
      ;((o.invitationLink = e), t && (o.invitationPreviewByLink[e] = { url: e, ...t }))
    },
    clearRoomInvitation: (o) => {
      o.invitationLink = ROOM_JOINT_INITIAL_STATE.invitationLink
    },
    setRoomPairingActive: (o, { payload: i }) => {
      ;((o.pairing.activeSeedId = i ? i.seedId : o.pairing.all?.[0]?.seedId || t),
        o.pairing.activeSeedId && (o.pairing.waitingDmMemberId = t))
    },
    setWaitingDmMemberId: (o, { payload: i }) => {
      ;((o.pairing.waitingDmMemberId = i.waitingDmMemberId),
        i.waitingDmMemberId && (o.pairing.activeSeedId = t))
    },
    setPairingRoom: (o, { payload: i }) => {
      const { seedId: e } = i || {}
      if (!e) return
      o.pairing.lastPairingRoom = i
      const t = o.pairing.all.findIndex((o) => o.seedId === e)
      ;-1 !== t
        ? i.status === a.ASKED && i.messageId
          ? (o.pairing.all[t].messageId = i.messageId)
          : (o.pairing.all[t] = { ...o.pairing.all[t], ...i })
        : -1 === t && o.pairing.all.push(i)
    },
    setRoomPairError: (o, { payload: i }) => {
      o.pairing.pairError = i
    },
    clearPairingRoom: (o, { payload: i }) => {
      const { seedId: e, setNextActive: n, status: a } = i
      if (!e) return
      const r = o.pairing.all.findIndex((o) => o.seedId === e)
      if (-1 !== r) {
        const [i] = o.pairing.all.splice(r, 1)
        o.pairing.lastPairingRoom = { ...i, status: a }
      }
      o.pairing.activeSeedId === e && n
        ? (o.pairing.activeSeedId = o.pairing.all?.[0]?.seedId || t)
        : o.pairing.activeSeedId === e && (o.pairing.activeSeedId = t)
    },
    leaveRoomAsk: (o, { payload: i }) => {
      i && !o.leaving.roomId && (o.leaving.roomId = i)
    },
    leaveRoomSubmit: (o) => {
      o.leaving.inProgress = !0
    },
    leaveRoomConfirmationRequired: (o) => {
      ;((o.leaving.inProgress = !1), (o.leaving.shouldConfirm = !0))
    },
    leaveRoomConfirmForce: (o) => {
      o.leaving.inProgress = !0
    },
    leaveRoomCleanup: (o) => {
      o.leaving = m
    },
  },
})
export const getRoomJointState = (o) => o[n].joint
export const getRoomPairingState = (o) => getRoomJointState(o).pairing
export const getRoomPairingIdActive = (o) => getRoomPairingState(o).activeSeedId
export const getRoomAllPairing = (o) => getRoomPairingState(o).all || []
export const getWaitingDmMemberId = (o) => getRoomPairingState(o).waitingDmMemberId
export const getRoomPairingItemBySeedId = (o) => (i) =>
  getRoomAllPairing(i).find((i) => i?.seedId === o)
export const getRoomLastPairing = (o) => getRoomPairingState(o).lastPairingRoom
export const getRoomPairingCount = (o) => getRoomAllPairing(o).length
export const getRoomLeavingId = (o) => getRoomJointState(o).leaving.roomId
export const getRoomLeavingInProgress = (o) => getRoomJointState(o).leaving.inProgress
export const getRoomLeavingShouldConfirm = (o) => getRoomJointState(o).leaving.shouldConfirm
export const getRoomInvitation = (o) => getRoomJointState(o).invitationLink
export const getRoomInvitePreviewsByInvitationLink = (o) =>
  getRoomJointState(o).invitationPreviewByLink
export const getRoomPairError = (o) => getRoomPairingState(o).pairError
export const getRoomPairingMessageId = (o) =>
  e([getRoomAllPairing], (i) => i.find((i) => i.roomId === o)?.messageId)
export const {
  setPairingRoom: setPairingRoom,
  clearPairingRoom: clearPairingRoom,
  setRoomInvitation: setRoomInvitation,
  clearRoomInvitation: clearRoomInvitation,
  setRoomPairingActive: setRoomPairingActive,
  leaveRoomAsk: leaveRoomAsk,
  leaveRoomSubmit: leaveRoomSubmit,
  leaveRoomConfirmationRequired: leaveRoomConfirmationRequired,
  leaveRoomConfirmForce: leaveRoomConfirmForce,
  leaveRoomCleanup: leaveRoomCleanup,
  setRoomPairError: setRoomPairError,
  setWaitingDmMemberId: setWaitingDmMemberId,
} = roomJointSlice.actions
export const joinRoomSubmit = i("room/join-submit")
export const leaveRoomRejectForce = i("room/leave-reject-force")
export const leaveRoomSuccessEvent = i("room/leave-room-success-event")
export const roomPairCancel = i("room/pair-cancel")
export const createRoomInvitation = i("room/create-invitation-submit")