Skip to content

Commit f4311b3

Browse files
refactor: memoize getDefaultActionsMenu for performance optimization
1 parent c9e7737 commit f4311b3

1 file changed

Lines changed: 35 additions & 33 deletions

File tree

packages/user/src/components/UsersTable/UsersTable.tsx

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
type DataActionsMenuProperties,
1212
type FilterOption,
1313
} from "@prefabs.tech/react-ui";
14+
import { useCallback } from "react";
1415

1516
import { useUserActions } from "./useUserActionsMethods";
1617
import { InvitationModal } from "../Invitation";
@@ -234,43 +235,44 @@ export const UsersTable = ({
234235
},
235236
];
236237

237-
const getDefaultActionsMenu = (
238-
user: UserType,
239-
): DataActionsMenuProperties<UserType> => {
240-
const defaultActions: DataActionsMenuProperties<UserType>["actions"] = [];
238+
const getDefaultActionsMenu = useCallback(
239+
(user: UserType): DataActionsMenuProperties<UserType> => {
240+
const defaultActions: DataActionsMenuProperties<UserType>["actions"] = [];
241241

242-
if (currentUser?.id !== user.id) {
243-
defaultActions.push(
244-
{
245-
key: "enableUser",
246-
label: t("table.actions.enable"),
247-
icon: "pi pi-check",
248-
disabled: (user: UserType) => !user.disabled,
249-
onClick: (user: UserType) => handleEnableUser(user),
250-
requireConfirmationModal: true,
251-
confirmationOptions: {
252-
message: t("confirmation.enable.message"),
253-
header: t("confirmation.header"),
242+
if (currentUser?.id !== user.id) {
243+
defaultActions.push(
244+
{
245+
key: "enableUser",
246+
label: t("table.actions.enable"),
247+
icon: "pi pi-check",
248+
disabled: (user: UserType) => !user.disabled,
249+
onClick: (user: UserType) => handleEnableUser(user),
250+
requireConfirmationModal: true,
251+
confirmationOptions: {
252+
message: t("confirmation.enable.message"),
253+
header: t("confirmation.header"),
254+
},
254255
},
255-
},
256-
{
257-
key: "disableUser",
258-
label: t("table.actions.disable"),
259-
className: "danger",
260-
icon: "pi pi-times",
261-
disabled: (user: UserType) => user.disabled as boolean,
262-
onClick: (user: UserType) => handleDisableUser(user),
263-
requireConfirmationModal: true,
264-
confirmationOptions: {
265-
message: t("confirmation.disable.message"),
266-
header: t("confirmation.header"),
256+
{
257+
key: "disableUser",
258+
label: t("table.actions.disable"),
259+
className: "danger",
260+
icon: "pi pi-times",
261+
disabled: (user: UserType) => user.disabled as boolean,
262+
onClick: (user: UserType) => handleDisableUser(user),
263+
requireConfirmationModal: true,
264+
confirmationOptions: {
265+
message: t("confirmation.disable.message"),
266+
header: t("confirmation.header"),
267+
},
267268
},
268-
},
269-
);
270-
}
269+
);
270+
}
271271

272-
return { actions: defaultActions };
273-
};
272+
return { actions: defaultActions };
273+
},
274+
[currentUser?.id, t, handleEnableUser, handleDisableUser],
275+
);
274276

275277
const renderToolbar = () => {
276278
if (showInviteAction) {

0 commit comments

Comments
 (0)