From 67318f16a4afac1de72c2b918f2cc48dcd6feedd Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Tue, 19 Jul 2022 16:18:04 -0300 Subject: [PATCH] Regression: Fix permissions page pagination (#26304) --- .../hooks/usePermissionsAndRoles.ts | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/apps/meteor/client/views/admin/permissions/hooks/usePermissionsAndRoles.ts b/apps/meteor/client/views/admin/permissions/hooks/usePermissionsAndRoles.ts index e021674962f8..02454510f2b0 100644 --- a/apps/meteor/client/views/admin/permissions/hooks/usePermissionsAndRoles.ts +++ b/apps/meteor/client/views/admin/permissions/hooks/usePermissionsAndRoles.ts @@ -1,5 +1,6 @@ import type { IRole, IPermission } from '@rocket.chat/core-typings'; import { useMutableCallback } from '@rocket.chat/fuselage-hooks'; +import { escapeRegExp } from '@rocket.chat/string-helpers'; import { useCallback } from 'react'; import { ChatPermissions } from '../../../../../app/authorization/client/lib/ChatPermissions'; @@ -13,27 +14,32 @@ export const usePermissionsAndRoles = ( limit = 25, skip = 0, ): { permissions: IPermission[]; total: number; roleList: IRole[]; reload: () => void } => { - const getPermissions = useCallback(() => { - const filterRegExp = new RegExp(filter, 'i'); + const getFilter = useCallback(() => { + const filterRegExp = new RegExp(escapeRegExp(filter), 'i'); - return ChatPermissions.find( - { - level: type === 'permissions' ? { $ne: CONSTANTS.SETTINGS_LEVEL } : CONSTANTS.SETTINGS_LEVEL, - _id: filterRegExp, - }, - { + return { + level: type === 'permissions' ? { $ne: CONSTANTS.SETTINGS_LEVEL } : CONSTANTS.SETTINGS_LEVEL, + _id: filterRegExp, + }; + }, [type, filter]); + + const getPermissions = useCallback( + () => + ChatPermissions.find(getFilter(), { sort: { _id: 1, }, skip, limit, - }, - ); - }, [filter, limit, skip, type]); + }), + [limit, skip, getFilter], + ); + const getTotalPermissions = useCallback(() => ChatPermissions.find(getFilter()).count(), [getFilter]); const permissions = useReactiveValue(getPermissions); + const permissionsTotal = useReactiveValue(getTotalPermissions); const getRoles = useMutableCallback(() => Roles.find().fetch()); const roles = useReactiveValue(getRoles); - return { permissions: permissions.fetch(), total: permissions.count(false), roleList: roles, reload: getRoles }; + return { permissions: permissions.fetch(), total: permissionsTotal, roleList: roles, reload: getRoles }; };