From f6fe426afb268bf8a0ab2537515ca029ae609ac8 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Thu, 28 Mar 2024 15:49:43 +0530 Subject: [PATCH] View history of roles in teams-committees-councils page (#9122) * View history of roles in teams-committees-councils page * Removed metadata file --- app/models/team_member.rb | 1 + app/models/user_group.rb | 2 +- .../teams_committees_councils.html.erb | 4 +- .../TeamsCommitteesCouncils/GroupPage.jsx | 57 +++++++------------ .../TeamsCommitteesCouncils/RolesTable.jsx | 39 +++++++++++++ .../TeamsCommitteesCouncils/index.jsx | 4 +- 6 files changed, 66 insertions(+), 41 deletions(-) create mode 100644 app/webpacker/components/TeamsCommitteesCouncils/RolesTable.jsx diff --git a/app/models/team_member.rb b/app/models/team_member.rb index d40328290f7..432466f3b1e 100644 --- a/app/models/team_member.rb +++ b/app/models/team_member.rb @@ -80,6 +80,7 @@ def role { id: team.group_type + "_" + self.id.to_s, start_date: start_date, + end_date: end_date, is_active: current_member?, group: team.group || { id: team.group_type + "_" + team.id.to_s, diff --git a/app/models/user_group.rb b/app/models/user_group.rb index 6a9224b8b93..58b82c8e2e4 100644 --- a/app/models/user_group.rb +++ b/app/models/user_group.rb @@ -41,7 +41,7 @@ def roles role_list.concat(Team.board.reload.current_members.map(&:board_role)) end if self.councils? - TeamMember.where(team_id: self.team.id, end_date: nil).each do |team_member| + TeamMember.where(team_id: self.team.id).each do |team_member| role_list << team_member.role end end diff --git a/app/views/static_pages/teams_committees_councils.html.erb b/app/views/static_pages/teams_committees_councils.html.erb index 1a0e73ba771..f80bbce67d1 100644 --- a/app/views/static_pages/teams_committees_councils.html.erb +++ b/app/views/static_pages/teams_committees_councils.html.erb @@ -1,3 +1,5 @@ <% provide(:title, t("page.teams_committees_councils.title")) %> -<%= react_component('TeamsCommitteesCouncils') %> +<%= react_component('TeamsCommitteesCouncils', { + canViewPastRoles: current_user&.staff? +}) %> diff --git a/app/webpacker/components/TeamsCommitteesCouncils/GroupPage.jsx b/app/webpacker/components/TeamsCommitteesCouncils/GroupPage.jsx index 78829103c43..879ccf95a28 100644 --- a/app/webpacker/components/TeamsCommitteesCouncils/GroupPage.jsx +++ b/app/webpacker/components/TeamsCommitteesCouncils/GroupPage.jsx @@ -1,56 +1,39 @@ import React from 'react'; -import { Table } from 'semantic-ui-react'; +import { Header } from 'semantic-ui-react'; import EmailButton from '../EmailButton'; import { apiV0Urls } from '../../lib/requests/routes.js.erb'; import I18n from '../../lib/i18n'; import useLoadedData from '../../lib/hooks/useLoadedData'; import Loading from '../Requests/Loading'; import Errored from '../Requests/Errored'; -import UserBadge from '../UserBadge'; +import RolesTable from './RolesTable'; -export default function GroupPage({ group }) { +export default function GroupPage({ group, canViewPastRoles }) { const { - data: groupMembers, - loading: groupMembersLoading, - error: groupMembersError, + data: activeRoles, + loading: activeRolesLoading, + error: activeRolesError, } = useLoadedData(apiV0Urls.userRoles.listOfGroup(group.id, 'status,name', { isActive: true })); + const { + data: pastRoles, + loading: pastRolesLoading, + error: pastRolesError, + } = useLoadedData(apiV0Urls.userRoles.listOfGroup(group.id, 'status,name', { isActive: false })); - if (groupMembersLoading) return ; - if (groupMembersError) return ; + if (activeRolesLoading || pastRolesLoading) return ; + if (activeRolesError || pastRolesError) return ; return ( <>

{I18n.t(`page.teams_committees_councils.groups_description.${group.metadata.friendly_id}`)}

- - - - - {I18n.t('delegates_page.table.name')} - - - {I18n.t('delegates_page.table.role')} - - - - - - {groupMembers.map((groupMember) => ( - - - - - - {I18n.t(`enums.user_roles.status.${groupMember.group.group_type}.${groupMember.metadata.status}`)} - - - ))} - -
+ + {canViewPastRoles && ( + <> +
Past Roles
+ + + )} ); } diff --git a/app/webpacker/components/TeamsCommitteesCouncils/RolesTable.jsx b/app/webpacker/components/TeamsCommitteesCouncils/RolesTable.jsx new file mode 100644 index 00000000000..f5966b48048 --- /dev/null +++ b/app/webpacker/components/TeamsCommitteesCouncils/RolesTable.jsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Table } from 'semantic-ui-react'; +import I18n from '../../lib/i18n'; +import UserBadge from '../UserBadge'; + +export default function RolesTable({ roleList }) { + return ( + + + + + {I18n.t('delegates_page.table.name')} + + + {I18n.t('delegates_page.table.role')} + + + + + + {roleList.map((role) => ( + + + + + + {I18n.t(`enums.user_roles.status.${role.group.group_type}.${role.metadata.status}`)} + + + ))} + +
+ ); +} diff --git a/app/webpacker/components/TeamsCommitteesCouncils/index.jsx b/app/webpacker/components/TeamsCommitteesCouncils/index.jsx index eae50b11eea..c8b84075eae 100644 --- a/app/webpacker/components/TeamsCommitteesCouncils/index.jsx +++ b/app/webpacker/components/TeamsCommitteesCouncils/index.jsx @@ -11,7 +11,7 @@ import Errored from '../Requests/Errored'; import useHash from '../../lib/hooks/useHash'; import GroupPage from './GroupPage'; -export default function TeamsCommitteesCouncils() { +export default function TeamsCommitteesCouncils({ canViewPastRoles }) { const { data: teamsCommittees, loading: teamsCommitteesLoading, @@ -94,7 +94,7 @@ export default function TeamsCommitteesCouncils() { - +