feat: [FC-0099] add button & modal for adding new team members (#3)

* feat: add team roles management and update related hooks and types

* feat: implement add new team member functionality with modal and actions

* test: add some missing tests

* test: add unit tests for AddNewTeamMemberModal and update context mocks

* test: add toast close functionality and loading state handling in AddNewTeamMemberTrigger tests

* fix: update LibrariesAuthZTeamView to include canManageTeam check for AddNewTeamMemberTrigger

* fix: correct API endpoint paths and update authorization scope format

* refactor: improve error handling & address PR feedback

* refactor: group AddNewTeamMemberModal in 1 folder

* fix: reset modal values to close action

* refactor: replace useAddTeamMember with useAssignTeamMembersRole

* feat: add tooltip

* test: fix test after rebase

* refactor: enhance user intruction with placeholder

* style: remove unnecessary inline style

* fix:  remove the error style on change the textarea value

* fix: add useState to display toast

* fix: remove empty strings from the user input

* fix: validate error users to apply style

---------

Co-authored-by: Diana Olarte <diana.olarte@edunext.co>
This commit is contained in:
Brayan Cerón
2025-10-21 17:02:21 -05:00
committed by GitHub
parent b50731187b
commit 52fbb7ea9d
16 changed files with 1119 additions and 9 deletions

View File

@@ -13,6 +13,16 @@ export type PermissionsByRole = {
permissions: string[];
userCount: number;
};
export interface PutAssignTeamMembersRoleResponse {
completed: { user: string; status: string }[];
errors: { userIdentifier: string; error: string }[];
}
export interface AssignTeamMembersRoleRequest {
users: string[];
role: string;
scope: string;
}
// TODO: replece api path once is created
export const getTeamMembers = async (object: string): Promise<TeamMember[]> => {
@@ -20,6 +30,13 @@ export const getTeamMembers = async (object: string): Promise<TeamMember[]> => {
return camelCaseObject(data.results);
};
export const assignTeamMembersRole = async (
data: AssignTeamMembersRoleRequest,
): Promise<PutAssignTeamMembersRoleResponse> => {
const res = await getAuthenticatedHttpClient().put(getApiUrl('/api/authz/v1/roles/users/'), data);
return camelCaseObject(res.data);
};
// TODO: this should be replaced in the future with Console API
export const getLibrary = async (libraryId: string): Promise<LibraryMetadata> => {
const { data } = await getAuthenticatedHttpClient().get(getStudioApiUrl(`/api/libraries/v2/${libraryId}/`));