diff --git a/packages/client-core/src/admin/components/Invite/AdminInvites.tsx b/packages/client-core/src/admin/components/Invite/AdminInvites.tsx index 6d3cc5b8af..fdadc139f3 100755 --- a/packages/client-core/src/admin/components/Invite/AdminInvites.tsx +++ b/packages/client-core/src/admin/components/Invite/AdminInvites.tsx @@ -75,15 +75,14 @@ const AdminInvites = ({ search, selectedInviteIds, setSelectedInviteIds }: Props } const handlePageChange = (event: React.MouseEvent | 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) => { rowsPerPage.set(parseInt(event.target.value, 10)) diff --git a/packages/client-core/src/admin/services/InviteService.ts b/packages/client-core/src/admin/services/InviteService.ts index d9b820828f..5f16a5d54a 100644 --- a/packages/client-core/src/admin/services/InviteService.ts +++ b/packages/client-core/src/admin/services/InviteService.ts @@ -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({ @@ -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') { @@ -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 - 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 + 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> - }) - - static inviteCreated = defineAction({ - type: 'ee.client.AdminInvite.ADMIN_INVITE_CREATED' as const, - invite: matches.object as Validator - }) - - static invitePatched = defineAction({ - type: 'ee.client.AdminInvite.ADMIN_INVITE_PATCHED' as const, - invite: matches.object as Validator - }) - - static inviteRemoved = defineAction({ - type: 'ee.client.AdminInvite.ADMIN_INVITE_REMOVED' as const, - invite: matches.object as Validator - }) - - static fetchingInvites = defineAction({ - type: 'ee.client.AdminInvite.FETCHING_ADMIN_INVITES' as const - }) -} diff --git a/packages/client-core/src/systems/AdminSystem.tsx b/packages/client-core/src/systems/AdminSystem.tsx index ff0e03cc19..4f73ae70de 100644 --- a/packages/client-core/src/systems/AdminSystem.tsx +++ b/packages/client-core/src/systems/AdminSystem.tsx @@ -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 { @@ -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) @@ -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)/ }