Skip to content

feat(client): User permission set correctly also if user is not present on the 1st page of pagination in app/engine settings #1205

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Jun 5, 2025
Merged
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
180 changes: 85 additions & 95 deletions packages/client/src/components/settings/MembersTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -262,33 +262,56 @@ export const MembersTable = (props: MembersTableProps) => {
const memberSearchRef = useRef(undefined);

// get the api
const getMembersApi: Parameters<typeof useAPI>[0] =
let getMembersApi: Parameters<typeof useAPI>[0] = null;
let getUserDataApi: Parameters<typeof useAPI>[0] = null;
if (type === 'APP') {
getUserDataApi = [
'getProjectUsers',
adminMode,
id,
configStore.store.user.id,
permissionPriorityMapper(permissionFilter)?.permission,
0, // offset
1, // limit
];
getMembersApi = [
'getProjectUsers',
adminMode,
id,
debouncedSearch ? debouncedSearch : undefined,
permissionPriorityMapper(permissionFilter)?.permission,
(page + 1) * rowsPerPage - rowsPerPage, // offset
rowsPerPage, // limit
];
} else if (
type === 'DATABASE' ||
type === 'STORAGE' ||
type === 'MODEL' ||
type === 'VECTOR' ||
type === 'FUNCTION'
? [
'getEngineUsers',
adminMode,
id,
debouncedSearch ? debouncedSearch : undefined,
permissionPriorityMapper(permissionFilter)?.permission,
(page + 1) * rowsPerPage - rowsPerPage, // offset
rowsPerPage, // limit
]
: type === 'APP'
? [
'getProjectUsers',
adminMode,
id,
debouncedSearch ? debouncedSearch : undefined,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why did we get rid of this?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed it @AAfghahi and consolidated 2 if conditions into 1.

permissionPriorityMapper(permissionFilter)?.permission,
(page + 1) * rowsPerPage - rowsPerPage, // offset
rowsPerPage, // limit
]
: null;
) {
getUserDataApi = [
'getEngineUsers',
adminMode,
id,
configStore.store.user.id,
permissionPriorityMapper(permissionFilter)?.permission,
0, // offset
1, // limit
];
getMembersApi = [
'getEngineUsers',
adminMode,
id,
configStore.store.user.id,
permissionPriorityMapper(permissionFilter)?.permission,
0, // offset
1, // limit
];
}

const getMembers = useAPI(getMembersApi);
const userDetails = useAPI(getUserDataApi);

//Below UseEffect has been added so that search supersedes pagination , when the user goes to a different page and searches any user the pagination is set 0 and the user is being displayed.
useEffect(() => {
Expand All @@ -301,63 +324,34 @@ export const MembersTable = (props: MembersTableProps) => {
* Otherwise, it sets the user permission based on the user's permission in the members array.
* @param members The array of members to set the user details from
*/
const setUserDetails = (members: SETTINGS_PROVISIONED_USER[]) => {
if (members.length > 0) {
const data = members.filter(
(member) => member.name === configStore.store.user.name,
const setUserDetails = () => {
setUserData(userDetails.data.members[0]);
if (adminMode) {
const adminPermissionPriority = 'Author';
setUserPermission(
permissionPriorityMapper(adminPermissionPriority)
?.permission as SETTINGS_ROLE,
);
} else {
setUserPermission(
permissionPriorityMapper(
userDetails.data.members[0].permission === 'OWNER'
? 'Author'
: userDetails.data.members[0].permission,
)?.permission as SETTINGS_ROLE,
);
if (data.length > 0) {
setUserData(data[0]);
if (adminMode) {
// if logged in admin, need to provide all Author option previledges
const adminPermissionPriority = 'Author';
setUserPermission(
permissionPriorityMapper(adminPermissionPriority)
?.permission as SETTINGS_ROLE,
);
} else {
setUserPermission(
permissionPriorityMapper(data[0].permission)
?.permission as SETTINGS_ROLE,
);
}
} else {
if (adminMode) {
// if logged in admin, need to provide all Author option previledges
const adminPermissionPriority = 'Author';
setUserPermission(
permissionPriorityMapper(adminPermissionPriority)
?.permission as SETTINGS_ROLE,
);
}
}
}
};

/**
* When
**/
useEffect(() => {
if (getMembers.status !== 'SUCCESS' || !getMembers.data) {
if (userDetails.status !== 'SUCCESS' || !userDetails.data) {
return;
}

// setPage(0);
// setSelectedMembers([]);
setUserDetails(getMembers.data.members);

// select the member when done mounting
memberSearchRef.current?.focus();
}, [getMembers.status, getMembers.data]);

// useLayoutEffect(() => {
// if (getMembers.status !== 'SUCCESS' || !getMembers.data) {
// return;
// }

// // select the member when done mounting
// memberSearchRef.current?.focus();
// }, [getMembers.status, getMembers.data]);
setUserDetails();
}, [userDetails.status]);

/**
* Determines if the read-only option should be restricted for a given member.
Expand Down Expand Up @@ -679,8 +673,7 @@ export const MembersTable = (props: MembersTableProps) => {
<Button
disabled={
isLoading ||
(!adminMode &&
userPermission === 'Read-Only')
userPermission === 'Read-Only'
}
variant={'contained'}
onClick={() => {
Expand Down Expand Up @@ -716,8 +709,7 @@ export const MembersTable = (props: MembersTableProps) => {
<Checkbox
disabled={
userPermission ===
'Read-Only' &&
!adminMode
'Read-Only'
}
checked={
selectedMembers.length ===
Expand Down Expand Up @@ -812,8 +804,7 @@ export const MembersTable = (props: MembersTableProps) => {
<StyledCheckbox
disabled={
userPermission ===
'Read-Only' &&
!adminMode
'Read-Only'
}
checked={
isSelected
Expand Down Expand Up @@ -915,47 +906,46 @@ export const MembersTable = (props: MembersTableProps) => {
type,
'access',
) ||
(!adminMode &&
permissionPriorityMapper(
userPermission,
)
.priority >
1)
permissionPriorityMapper(
userPermission,
)
.priority >
1
}
/>
<RadioGroup.Item
value="Editor"
label="Editor"
disabled={
(userPermission === 'Editor' && user.permission === 'OWNER') ||
!configStore.isEngineOperationAvailable(
type,
'access',
) ||
(!adminMode &&
permissionPriorityMapper(
userPermission,
)
?.priority >
2)
permissionPriorityMapper(
userPermission,
)
?.priority >
2
}
/>
<RadioGroup.Item
value="Read-Only"
label="Read-Only"
disabled={
(userPermission === 'Editor' && user.permission === 'OWNER') ||
!configStore.isEngineOperationAvailable(
type,
'access',
) ||
(!adminMode &&
(permissionPriorityMapper(
userPermission,
)
?.priority >=
3 ||
readOnlyRestricted(
user,
)))
permissionPriorityMapper(
userPermission,
)
?.priority >=
3 ||
readOnlyRestricted(
user,
)
}
/>
</RadioGroup>
Expand Down
Loading