Skip to content
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

[Feature] Communities break apart on the update user page #11584

Open
wants to merge 34 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
2d761de
accessor guarding/gate
vd1992 Sep 19, 2024
4a384ff
add inline fragments, type guards, switch to teamable
vd1992 Sep 19, 2024
236560b
operation and types changes
vd1992 Sep 20, 2024
29e4768
create community dialogs
vd1992 Sep 20, 2024
122b096
create and use community roles table
vd1992 Sep 20, 2024
d630289
Merge branch 'main' into 10632-update-user-page-communities
vd1992 Sep 20, 2024
89857bb
useAvailablePools and helper additions
vd1992 Sep 20, 2024
b647115
create ProcessRoleTable AddProcessRoleDialog
vd1992 Sep 20, 2024
a224cbd
create EditProcessRoleDialog RemoveProcessRoleDialog
vd1992 Sep 20, 2024
f45aa62
some clean-up
vd1992 Sep 20, 2024
86cad0b
community role options filtering logic
vd1992 Sep 20, 2024
d68f8dc
some more tidying
vd1992 Sep 20, 2024
d443846
lint
vd1992 Sep 20, 2024
e0ab125
chip/button styling change
vd1992 Sep 23, 2024
8850731
link styling
vd1992 Sep 23, 2024
7f427b3
hide column dialog, spacing tweak
vd1992 Sep 23, 2024
b3947b8
copy typos
vd1992 Sep 23, 2024
03c5156
Merge branch 'main' into 10632-update-user-page-communities
vd1992 Sep 26, 2024
b5f505b
extract message
vd1992 Sep 27, 2024
7e5e569
Apply suggestions from code review
vd1992 Oct 1, 2024
4a91b74
rename types
vd1992 Oct 1, 2024
ff54d60
clean up function
vd1992 Oct 1, 2024
31e4066
extract more messages
vd1992 Oct 1, 2024
4df91a0
run check intl
vd1992 Oct 1, 2024
8732078
fix mistake
vd1992 Oct 1, 2024
7f7c25b
Merge branch 'main' into 10632-update-user-page-communities
vd1992 Oct 2, 2024
7300dc1
add translations
vd1992 Oct 2, 2024
7541c5d
lint
vd1992 Oct 2, 2024
cbcb3d7
update language snapshot
vd1992 Oct 2, 2024
c82d536
requested copy changes
vd1992 Oct 2, 2024
11a5ec8
copy changes
vd1992 Oct 2, 2024
ddc17d7
copy changes
vd1992 Oct 3, 2024
43da513
Merge branch 'main' into 10632-update-user-page-communities
vd1992 Oct 3, 2024
41c3dda
further French cleaning
vd1992 Oct 3, 2024
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
5 changes: 5 additions & 0 deletions api/app/Models/RoleAssignment.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Support\Facades\Gate;

/**
* Class User
Expand Down Expand Up @@ -51,9 +52,13 @@ public function getTeamableAttribute()
}

if (is_null($this->team->teamable)) {
Gate::authorize('view', $this->team);

return $this->team;
}

Gate::authorize('view', $this->team->teamable);

return $this->team->teamable;
}

Expand Down
2 changes: 1 addition & 1 deletion api/graphql/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ type Role {
type RoleAssignment {
id: ID!
role: Role @belongsTo
teamable: HasRoleAssignments # Returns the related team, if it has a teamable returns that instead
teamable: HasRoleAssignments @guard # Returns the related team, if it has a teamable returns that instead, guarded in the accessor
team: Team @belongsTo
user: UserPublicProfile @morphTo
}
Expand Down
20 changes: 0 additions & 20 deletions apps/web/src/lang/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -363,10 +363,6 @@
"defaultMessage": "Diplôme d’études postsecondaires exigé",
"description": "Education level message when candidate has a diploma found on the request page."
},
"/pbxol": {
"defaultMessage": "Utilisez le bouton \"Ajouter une nouvelle adhésion\" pour commencer.",
"description": "Instructions for adding team membership to a user."
},
"/qN7tM": {
"defaultMessage": "Expérience supprimée",
"description": "Message displayed to user after experience deleted."
Expand Down Expand Up @@ -883,10 +879,6 @@
"defaultMessage": "Modifier {label}",
"description": "Label for link to edit a specific item in a table"
},
"2lNHxh": {
"defaultMessage": "Ajouter un nouveau rôle",
"description": "Label for the form to add a role to a user"
},
"2ly5G8": {
"defaultMessage": "L’autodéclaration aide notre équipe à mieux comprendre le bassin de candidats. Connaître la diversité du bassin de candidats aide l’équipe de recrutement et les gestionnaires d’embauche de Talents numériques du GC à éliminer les obstacles et à rendre notre processus plus inclusif. Cela nous permet également de suivre les progrès réalisés par rapport aux objectifs en matière de diversité et de veiller à ce que les groupes sous-représentés aient des possibilités équitables.",
"description": "Paragraph 3, importance of self-declaration"
Expand Down Expand Up @@ -3539,10 +3531,6 @@
"defaultMessage": "Citoyenneté :",
"description": "Citizenship label"
},
"GjaLl7": {
"defaultMessage": "Rôles des membres",
"description": "Title displayed for the role table display roles column"
},
"Gki8Ex": {
"defaultMessage": "{candidateCount, plural, one {<testId>{candidateCount}</testId> concordance approximative} other {<testId>{candidateCount}</testId> concordances approximatives} }",
"description": "Message for total estimated matching candidates in pool"
Expand Down Expand Up @@ -3799,10 +3787,6 @@
"defaultMessage": "Consentement notification par courriel",
"description": "Legend text for email notification consent checkbox in getting started form"
},
"Ibt1fL": {
"defaultMessage": "Ajouter une nouvelle adhésion",
"description": "Label for the form to add a team membership to a user"
},
"IexFo4": {
"defaultMessage": "Connaissance de l’autre langue officielle",
"description": "Second language proficiency label"
Expand Down Expand Up @@ -6370,10 +6354,6 @@
"defaultMessage": "{title} évaluation - {skillName}",
"description": "Header for application screening decision dialog."
},
"WCOVvw": {
"defaultMessage": "Utilisez le bouton \"Ajouter un nouveau rôle\" pour commencer.",
"description": "Instructions for adding a role to a user."
},
"WDKT2K": {
"defaultMessage": "Qu'est-ce qu'une CléGC?",
"description": "GCKey question for what is GCKey"
Expand Down
24 changes: 24 additions & 0 deletions apps/web/src/messages/adminMessages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,30 @@ const messages = defineMessages({
id: "ae3u1t",
description: "Title for key field",
},
rolesAdded: {
defaultMessage: "Role(s) added successfully",
id: "/17wgm",
description:
"Message displayed to user when one or more roles have been added to a user",
},
rolesUpdated: {
defaultMessage: "Member roles updated successfully",
id: "ALIgEC",
description:
"Alert displayed to user when a team member's roles have been updated",
},
rolesUpdateFailed: {
defaultMessage: "Member role update failed",
id: "Ly2bBb",
description:
"Alert displayed to user when an error occurs while editing a team member's roles",
},
roleRemoved: {
defaultMessage: "Role removed successfully",
id: "XcS2q2",
description:
"Message displayed to user when a role has been removed from a user",
},
});

export default messages;
Original file line number Diff line number Diff line change
Expand Up @@ -94,14 +94,7 @@ AddTeamMemberDialogProps) => {
}
})
.catch(() => {
toast.error(
intl.formatMessage({
defaultMessage: "Member role update failed",
id: "Ly2bBb",
description:
"Alert displayed to user when an error occurs while editing a team member's roles",
}),
);
toast.error(intl.formatMessage(adminMessages.rolesUpdateFailed));
});
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,25 +81,11 @@ const EditTeamMemberDialog = ({ user, team }: EditTeamMemberDialogProps) => {
.then((res) => {
if (!res.error) {
setIsOpen(false);
toast.success(
intl.formatMessage({
defaultMessage: "Member roles updated successfully",
id: "ALIgEC",
description:
"Alert displayed to user when a team member's roles have been updated",
}),
);
toast.success(intl.formatMessage(adminMessages.rolesAdded));
}
})
.catch(() => {
toast.error(
intl.formatMessage({
defaultMessage: "Member role update failed",
id: "Ly2bBb",
description:
"Alert displayed to user when an error occurs while editing a team member's roles",
}),
);
toast.error(intl.formatMessage(adminMessages.rolesUpdateFailed));
});
};

Expand Down
14 changes: 14 additions & 0 deletions apps/web/src/pages/Users/UpdateUserPage/UpdateUserPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ import {
UpdateUserRoles_Mutation,
UpdateUserSub_Mutation,
} from "./operations";
import CommunityRoleTable from "./components/CommunityRoleTable";
import ProcessRoleTable from "./components/ProcessRoleTable";

const UpdateUserOptions_Query = graphql(/* GraphQL */ `
query UpdateUserOptions {
Expand Down Expand Up @@ -398,6 +400,18 @@ const UpdateUserPage = () => {
availableRoles={availableRoles}
onUpdateUserRoles={handleUpdateUserRoles}
/>
<CommunityRoleTable
user={data.user}
authInfo={data.user?.authInfo}
availableRoles={availableRoles}
onUpdateUserRoles={handleUpdateUserRoles}
/>
<ProcessRoleTable
user={data.user}
authInfo={data.user?.authInfo}
availableRoles={availableRoles}
onUpdateUserRoles={handleUpdateUserRoles}
/>
<Heading level="h2" size="h3" data-h2-font-weight="base(700)">
{intl.formatMessage({
defaultMessage: "Advanced tools",
Expand Down
Loading
Loading