Skip to content
This repository has been archived by the owner on Aug 21, 2024. It is now read-only.

refactor(client-core)(invite service): remove action receptor usage #8317

Merged
merged 2 commits into from
Jul 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,14 @@ const AdminInvites = ({ search, selectedInviteIds, setSelectedInviteIds }: Props
}

const handlePageChange = (event: React.MouseEvent<HTMLButtonElement> | null, newPage: number) => {
const incDec = page.value < newPage ? 'increment' : 'decrement'
AdminInviteService.fetchAdminInvites(incDec, search, sortField.value, fieldOrder.value)
AdminInviteService.fetchAdminInvites(search, newPage, sortField.value, fieldOrder.value)
page.set(newPage)
}

useEffect(() => {
if (inviteState.updateNeeded.value === true)
AdminInviteService.fetchAdminInvites(undefined, search, sortField.value, fieldOrder.value)
}, [search, inviteState.updateNeeded.value, sortField.value, fieldOrder.value])
AdminInviteService.fetchAdminInvites(search, page.value, sortField.value, fieldOrder.value)
}, [search, inviteState.updateNeeded.value, page.value, sortField.value, fieldOrder.value])

const handleRowsPerPageChange = (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
rowsPerPage.set(parseInt(event.target.value, 10))
Expand Down
142 changes: 27 additions & 115 deletions packages/client-core/src/admin/services/InviteService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,11 @@ Ethereal Engine. All Rights Reserved.
import { Paginated } from '@feathersjs/feathers'

import { Invite as InviteInterface } from '@etherealengine/common/src/interfaces/Invite'
import { Invite as InviteType } from '@etherealengine/common/src/interfaces/Invite'
import multiLogger from '@etherealengine/common/src/logger'
import { matches, Validator } from '@etherealengine/engine/src/common/functions/MatchesUtils'
import { defineAction, defineState, dispatchAction, getMutableState } from '@etherealengine/hyperflux'
import { Engine } from '@etherealengine/engine/src/ecs/classes/Engine'
import { defineState, getMutableState } from '@etherealengine/hyperflux'

import { API } from '../../API'
import { NotificationService } from '../../common/services/NotificationService'

const logger = multiLogger.child({ component: 'client-core:InviteService' })

//State
export const INVITE_PAGE_LIMIT = 100

export const AdminInviteState = defineState({
Expand All @@ -54,81 +48,33 @@ export const AdminInviteState = defineState({
})
})

export const invitesRetrievedReceptor = (action: typeof AdminInviteActions.invitesRetrieved.matches._TYPE) => {
const state = getMutableState(AdminInviteState)
return state.merge({
invites: action.invites.data,
skip: action.invites.skip,
limit: action.invites.limit,
total: action.invites.total,
retrieving: false,
fetched: true,
updateNeeded: false,
lastFetched: Date.now()
})
}

export const inviteCreatedReceptor = (action: typeof AdminInviteActions.inviteCreated.matches._TYPE) => {
const state = getMutableState(AdminInviteState)
return state.merge({ updateNeeded: true, created: true })
}

export const invitePatchedReceptor = (action: typeof AdminInviteActions.invitePatched.matches._TYPE) => {
const state = getMutableState(AdminInviteState)
return state.merge({ updateNeeded: true })
}

export const inviteRemovedReceptor = (action: typeof AdminInviteActions.inviteRemoved.matches._TYPE) => {
const state = getMutableState(AdminInviteState)
return state.merge({ updateNeeded: true })
}

export const fetchingInvitesReceptor = (action: typeof AdminInviteActions.fetchingInvites.matches._TYPE) => {
const state = getMutableState(AdminInviteState)
return state.merge({ retrieving: true, fetched: false })
}

export const AdminInviteReceptors = {
invitesRetrievedReceptor,
inviteCreatedReceptor,
invitePatchedReceptor,
inviteRemovedReceptor
}

//Service
export const AdminInviteService = {
updateInvite: async (id: string, invite: InviteInterface) => {
try {
const result = await API.instance.client.service('invite').update(id, invite)
dispatchAction(AdminInviteActions.invitePatched({ invite: result }))
await Engine.instance.api.service('invite').update(id, invite)
getMutableState(AdminInviteState).merge({ updateNeeded: true })
} catch (err) {
NotificationService.dispatchNotify(err.message, { variant: 'error' })
}
},
removeInvite: async (id: string) => {
const result = (await API.instance.client.service('invite').remove(id)) as InviteInterface
dispatchAction(AdminInviteActions.inviteRemoved({ invite: result }))
await Engine.instance.api.service('invite').remove(id)
getMutableState(AdminInviteState).merge({ updateNeeded: true })
},
createInvite: async (invite: any) => {
try {
const result = await API.instance.client.service('invite').create(invite)
dispatchAction(AdminInviteActions.inviteCreated({ invite: result as InviteType }))
await Engine.instance.api.service('invite').create(invite)
getMutableState(AdminInviteState).merge({ updateNeeded: true, created: true })
} catch (err) {
NotificationService.dispatchNotify(err.message, { variant: 'error' })
}
},
fetchAdminInvites: async (
incDec?: 'increment' | 'decrement',
search?: string,
sortField = 'id',
orderBy = 'asc',
value: string | null = null
) => {
fetchAdminInvites: async (search?: string, page = 0, sortField = 'id', orderBy = 'asc') => {
getMutableState(AdminInviteState).merge({ retrieving: true, fetched: false })
try {
dispatchAction(AdminInviteActions.fetchingInvites({}))
const adminInviteState = getMutableState(AdminInviteState).value
const skip = adminInviteState.skip
const limit = adminInviteState.limit
const adminInviteState = getMutableState(AdminInviteState)
const limit = adminInviteState.limit.value
const skip = page * limit
let sortData = {}
if (sortField.length > 0) {
if (sortField === 'type') {
Expand All @@ -140,62 +86,28 @@ export const AdminInviteService = {
sortData[sortField] = orderBy === 'desc' ? -1 : 1
}
}
const invites = (await API.instance.client.service('invite').find({
const invites = (await Engine.instance.api.service('invite').find({
query: {
$sort: {
...sortData
},
$skip: skip * INVITE_PAGE_LIMIT,
$limit: limit
// search: value
}
})) as Paginated<InviteInterface>
dispatchAction(AdminInviteActions.invitesRetrieved({ invites }))
} catch (error) {
logger.error(error)
}
},
searchAdminInvites: async (value, orderBy = 'asc') => {
try {
const invites = (await API.instance.client.service('invite').find({
query: {
search: value,
$sort: {
name: orderBy === 'desc' ? 0 : 1
},
$skip: getMutableState(AdminInviteState).skip.value,
$limit: getMutableState(AdminInviteState).limit.value
$limit: limit,
search
}
})) as Paginated<InviteInterface>
getMutableState(AdminInviteState).merge({
invites: invites.data,
skip: invites.skip,
limit: invites.limit,
total: invites.total,
retrieving: false,
fetched: true,
updateNeeded: false,
lastFetched: Date.now()
})
} catch (error) {
logger.error(error)
NotificationService.dispatchNotify(error.message, { variant: 'error' })
}
}
}

//Action
export class AdminInviteActions {
static invitesRetrieved = defineAction({
type: 'ee.client.AdminInvite.ADMIN_INVITES_RETRIEVED' as const,
invites: matches.object as Validator<unknown, Paginated<InviteInterface>>
})

static inviteCreated = defineAction({
type: 'ee.client.AdminInvite.ADMIN_INVITE_CREATED' as const,
invite: matches.object as Validator<unknown, InviteInterface>
})

static invitePatched = defineAction({
type: 'ee.client.AdminInvite.ADMIN_INVITE_PATCHED' as const,
invite: matches.object as Validator<unknown, InviteInterface>
})

static inviteRemoved = defineAction({
type: 'ee.client.AdminInvite.ADMIN_INVITE_REMOVED' as const,
invite: matches.object as Validator<unknown, InviteInterface>
})

static fetchingInvites = defineAction({
type: 'ee.client.AdminInvite.FETCHING_ADMIN_INVITES' as const
})
}
9 changes: 0 additions & 9 deletions packages/client-core/src/systems/AdminSystem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ import { AdminBotCommandActions, AdminBotsCommandReceptors } from '../admin/serv
import { AdminBotsActions, AdminBotServiceReceptors } from '../admin/services/BotsService'
import { AdminBuildStatusActions, AdminBuildStatusReceptors } from '../admin/services/BuildStatusService'
import { AdminGroupActions, AdminGroupServiceReceptors } from '../admin/services/GroupService'
import { AdminInviteActions, AdminInviteReceptors } from '../admin/services/InviteService'
import { AdminLocationActions, AdminLocationReceptors } from '../admin/services/LocationService'
import { AdminPartyActions, AdminPartyReceptors } from '../admin/services/PartyService'
import {
Expand Down Expand Up @@ -138,10 +137,6 @@ const activeRoutesRetrievedQueue = defineActionQueue(AdminActiveRouteActions.act

const fetchedInstanceServerQueue = defineActionQueue(InstanceServerSettingActions.fetchedInstanceServer.matches)
const chargebeeSettingRetrievedQueue = defineActionQueue(AdminChargebeeSettingActions.chargebeeSettingRetrieved.matches)
const invitesRetrievedQueue = defineActionQueue(AdminInviteActions.invitesRetrieved.matches)
const inviteCreatedQueue = defineActionQueue(AdminInviteActions.inviteCreated.matches)
const invitePatchedQueue = defineActionQueue(AdminInviteActions.invitePatched.matches)
const inviteRemovedQueue = defineActionQueue(AdminInviteActions.inviteRemoved.matches)
// const authSettingRetrievedQueue = defineActionQueue(AuthSettingsActions.authSettingRetrieved.matches)
// const authSettingPatchedQueue = defineActionQueue(AuthSettingsActions.authSettingPatched.matches)
// const fetchedClientQueue = defineActionQueue(ClientSettingActions.fetchedClient.matches)
Expand Down Expand Up @@ -224,10 +219,6 @@ const execute = () => {
for (const action of fetchedInstanceServerQueue()) AdminInstanceServerReceptors.fetchedInstanceServerReceptor(action)
for (const action of chargebeeSettingRetrievedQueue())
AdminChargebeeReceptors.chargebeeSettingRetrievedReceptor(action)
for (const action of invitesRetrievedQueue()) AdminInviteReceptors.invitesRetrievedReceptor(action)
for (const action of inviteCreatedQueue()) AdminInviteReceptors.inviteCreatedReceptor(action)
for (const action of invitePatchedQueue()) AdminInviteReceptors.invitePatchedReceptor(action)
for (const action of inviteRemovedQueue()) AdminInviteReceptors.inviteRemovedReceptor(action)
// for (const action of authSettingRetrievedQueue()) // AuthSettingsReceptors.authSettingRetrievedReceptor(action)/ }
// for (const action of authSettingPatchedQueue()) // AuthSettingsReceptors.authSettingPatchedReceptor(action)/ }
// for (const action of fetchedClientQueue()) // ClientSettingReceptors.fetchedClientReceptor(action)/ }
Expand Down