OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / app / app.reducer.js

175 lines · javascript ref:
import { createSlice as t, createAction as e } from "@reduxjs/toolkit"
import {
  getCallIsOngoing as p,
  getCallPeersCount as a,
  getCallStatus as o,
  isCallJoinedMode as s,
} from "../call/call.reducer"
import { EMPTY_ROOM_ID as i } from "../room/room.constant"
import { getRoomItemById as n } from "../room/room.selector"
import {
  getPreferencesPrivateMode as r,
  NOTIFICATIONS_ALERT_TYPES as l,
  NOTIFICATIONS_TYPES as c,
} from "../preferences"
import { PLATFORM_UPDATE_STATUS as d } from "../platform/platform.constants"
import {
  APP_STATE_KEY as u,
  APP_STATUS as A,
  APP_UPDATE_REASONS as S,
  APP_DELAY_BEFORE_UPDATE as g,
} from "./app.constants"
export const APP_INITIAL_STATE = {
  appStatus: A.LOADING,
  appVersion: 0,
  updateRequired: !1,
  forceUpdateRequired: !1,
  applicationKey: "",
  linkData: "",
  currentRoomId: i,
  currentCallRoomId: i,
  locale: "",
  localeIsUpdating: !1,
  notificationsType: c.ALL,
  notificationsAlerts: Object.values(l),
  updateReason: void 0,
  updateCountdownEnd: void 0,
  updateStatus: d.UPDATED,
  systemUpdateRemaining: 0,
  systemUpdating: !1,
  lastToastNotificationSeen: 0,
  isClearingOldFiles: !1,
}
export const appSlice = t({
  name: u,
  initialState: APP_INITIAL_STATE,
  reducers: {
    initApplication: (t, { payload: e }) => {
      const { applicationKey: p, linkData: a, lastToastNotificationSeen: o } = e
      ;((t.applicationKey = p), (t.linkData = a), (t.lastToastNotificationSeen = o))
    },
    appRoomInvitationLinkServed: (t) => {
      t.linkData = ""
    },
    setAppCurrentRoomId: (t, e) => {
      t.currentRoomId = e.payload.roomId
    },
    setAppCurrentCallRoomId: (t, e) => {
      t.currentCallRoomId = e.payload
    },
    initAppLocale: (t, e) => {
      t.locale = e.payload
    },
    setAppLocale: (t, e) => {
      ;((t.locale = e.payload), (t.localeIsUpdating = !0))
    },
    setAppLocaleSuccess: (t) => {
      t.localeIsUpdating = !1
    },
    setAppNotificationsType: (t, e) => {
      t.notificationsType = e.payload
    },
    setAppNotificationsAlerts: (t, e) => {
      t.notificationsAlerts = e.payload
    },
    toggleAppNotificationsAlert: (t, e) => {
      const p = t.notificationsAlerts.includes(e.payload)
      t.notificationsAlerts = p
        ? t.notificationsAlerts.filter((t) => t !== e.payload)
        : (t.notificationsAlerts = [...t.notificationsAlerts, e.payload])
    },
    setAppInitialStatus: (t, { payload: { status: e, appVersion: p } }) => {
      ;((t.appStatus = e), (t.appVersion = p))
    },
    setAppStatus: (t, { payload: e }) => {
      const { appStatus: p } = t
      p !== e &&
        p !== A.TEARDOWN &&
        ((t.appStatus = e),
        e === A.IDENTITY_SETUP && ((t.currentRoomId = i), (t.currentCallRoomId = i)))
    },
    setUpdateRequired: (t, { payload: { timestamp: e, reason: p } }) => {
      ;((t.updateRequired = !0),
        (t.updateReason = p || S.APP_UPGRADE),
        (t.updateCountdownEnd = e + g))
    },
    setForceUpdateRequired: (t) => {
      t.forceUpdateRequired = !0
    },
    setUpdateStatus: (t, { payload: e }) => {
      t.updateStatus !== e && (t.updateStatus = e)
    },
    setSystemUpdate: (t, { payload: { remaining: e } }) => {
      ;((t.systemUpdateRemaining = e || 0), (t.systemUpdating = t.systemUpdateRemaining > 0))
    },
    setLastToastNotificationSeen: (t, { payload: e }) => {
      t.lastToastNotificationSeen = e
    },
    setIsClearingOldFiles: (t, { payload: e }) => {
      t.isClearingOldFiles = e
    },
  },
})
export const getAppState = (t) => t[u]
export const getApplicationKey = (t) => getAppState(t).applicationKey
export const getAppCurrentRoomId = (t) => getAppState(t).currentRoomId
export const getAppCurrentCallRoomId = (t) => getAppState(t).currentCallRoomId
export const hasAppCurrentRoomCallMatch = (t) => {
  const { currentCallRoomId: e, currentRoomId: p } = getAppState(t)
  return e === p
}
export const getAppLocale = (t) => getAppState(t).locale
export const getAppNotificationsAlerts = (t) => getAppState(t).notificationsAlerts
export const getAppLocaleIsUpdating = (t) => getAppState(t).localeIsUpdating
export const getAppStatus = (t) => getAppState(t).appStatus
export const getUpdateRequired = (t) => getAppState(t).updateRequired
export const getForceUpdateRequired = (t) => getAppState(t).forceUpdateRequired
export const getUpdateCountdownEnd = (t) => getAppState(t).updateCountdownEnd
export const getUpdateReason = (t) => getAppState(t).updateReason
export const getUpdateStatus = (t) => getAppState(t).updateStatus
export const getAppStatusLoading = (t) => getAppState(t).appStatus === A.LOADING
export const getAppStatusTeardown = (t) => getAppState(t).appStatus === A.TEARDOWN
export const getAppStatusCriticalError = (t) => getAppState(t).appStatus === A.CRITICAL_ERROR
export const getSystemUpdateRemaining = (t) => getAppState(t).systemUpdateRemaining
export const getIsSystemUpdating = (t) => getAppState(t).systemUpdating
export const getLastToastNotificationSeen = (t) => getAppState(t).lastToastNotificationSeen
export const isOngoingCallByRoomId = (t, e) => {
  const { currentCallRoomId: o } = getAppState(t)
  return a(t, e) > 0 || !(e !== o || !p(t)) || !!n(e)(t)?.activeCallId
}
export const getRoomBlurred = (t, e) =>
  !!r(t) && (!e || !s(o(t)) || e !== getAppCurrentCallRoomId(t))
export const getIsSelfDestructing = (t) => getAppState(t).appStatus === A.DESTRUCTING
export const getIsClearingOldFiles = (t) => getAppState(t).isClearingOldFiles
export const {
  setAppInitialStatus: setAppInitialStatus,
  setAppStatus: setAppStatus,
  setAppCurrentRoomId: setAppCurrentRoomId,
  setAppCurrentCallRoomId: setAppCurrentCallRoomId,
  initAppLocale: initAppLocale,
  setAppLocale: setAppLocale,
  setAppNotificationsType: setAppNotificationsType,
  setAppNotificationsAlerts: setAppNotificationsAlerts,
  toggleAppNotificationsAlert: toggleAppNotificationsAlert,
  setAppLocaleSuccess: setAppLocaleSuccess,
  initApplication: initApplication,
  appRoomInvitationLinkServed: appRoomInvitationLinkServed,
  setUpdateRequired: setUpdateRequired,
  setForceUpdateRequired: setForceUpdateRequired,
  setUpdateStatus: setUpdateStatus,
  setSystemUpdate: setSystemUpdate,
  setLastToastNotificationSeen: setLastToastNotificationSeen,
  setIsClearingOldFiles: setIsClearingOldFiles,
} = appSlice.actions
export const appTeardownEvent = () => setAppStatus(A.TEARDOWN)
export const appIdentitySetupStart = e("app/identity-setup-start")
export const appIdentitySetupCancel = e("app/identity-setup-cancel")
export const runAppModeIdentitySetupCmd = e("app/mode-identity-setup")
export const runAppModeNormalCmd = e("app/mode-normal")
export const selfDestruct = e("app/self-destruct")
export const isSetAppStatusRunning = (t) =>
  (setAppStatus.match(t) && t.payload === A.RUNNING) ||
  (setAppInitialStatus.match(t) && t.payload.status === A.RUNNING)
export const getAppInitialState = appSlice.getInitialState
export const appReducer = appSlice.reducer