Skip to content

Commit 4183bc5

Browse files
committed
Use hash anchor to handle switching groups tabs
This is to allow specific group page tabs to be linked to from outside of the groups page.
1 parent d608dd6 commit 4183bc5

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

src/app/components/pages/Groups.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, {MutableRefObject, useEffect, useMemo, useRef, useState} from "react";
2+
import {connect} from "react-redux";
23
import {
34
Button,
45
ButtonDropdown,
@@ -21,8 +22,9 @@ import {
2122
UncontrolledButtonDropdown,
2223
UncontrolledTooltip
2324
} from "reactstrap";
24-
import {Link} from "react-router-dom";
25+
import {Link, withRouter} from "react-router-dom";
2526
import {
27+
AppState,
2628
mutationSucceeded,
2729
resetMemberPassword,
2830
showAdditionalManagerSelfRemovalModal,
@@ -556,9 +558,9 @@ export const GroupSelector = ({user, groups, allGroups, selectedGroup, setSelect
556558
? sortedGroups.map((g: AppGroup) =>
557559
<div key={g.id} className="group-item p-2" data-testid={"group-item"}>
558560
<div className="d-flex justify-content-between align-items-center group-name-buttons">
559-
<Button title={isStaff(user) ? `Group id: ${g.id}` : undefined} color="link" data-testid={"select-group"} className="text-start px-1 py-1 flex-fill group-name" onClick={() => setSelectedGroupId(g.id)}>
561+
<Link to={`/groups#${g.id}`} title={isStaff(user) ? `Group id: ${g.id}` : undefined} color="link" data-testid={"select-group"} className="text-start px-1 py-1 group-name d-flex flex-fill">
560562
{g.groupName}
561-
</Button>
563+
</Link>
562564
{showArchived &&
563565
<button
564566
onClick={(e) => {e.stopPropagation(); confirmDeleteGroup(g);}}
@@ -578,7 +580,14 @@ export const GroupSelector = ({user, groups, allGroups, selectedGroup, setSelect
578580
</Card>;
579581
};
580582

581-
export const Groups = ({user}: {user: RegisteredUserDTO}) => {
583+
const stateToProps = (_state: AppState, props: any) => {
584+
const {location: {hash}} = props;
585+
return {
586+
hashAnchor: hash?.slice(1) ?? null
587+
};
588+
};
589+
590+
const GroupsComponent = ({user, hashAnchor}: {user: RegisteredUserDTO, hashAnchor: number}) => {
582591
const dispatch = useAppDispatch();
583592
const [showArchived, setShowArchived] = useState(false);
584593
const groupQuery = useGetGroupsQuery(showArchived);
@@ -589,7 +598,12 @@ export const Groups = ({user}: {user: RegisteredUserDTO}) => {
589598

590599
const [createGroup] = useCreateGroupMutation();
591600

592-
const [selectedGroupId, setSelectedGroupId] = useState<number>();
601+
const [selectedGroupId, setSelectedGroupId] = useState<number | undefined>();
602+
useEffect(() => {
603+
// @ts-ignore
604+
const tab: number = hashAnchor && parseInt(hashAnchor);
605+
setSelectedGroupId(tab);
606+
}, [hashAnchor]);
593607
const selectedGroup = (isLoading || isFetching) ? undefined : groups?.find(g => g.id === selectedGroupId);
594608

595609
const createNewGroup: (newGroupName: string) => Promise<boolean> = async (newGroupName: string) => {
@@ -638,3 +652,5 @@ export const Groups = ({user}: {user: RegisteredUserDTO}) => {
638652
</ShowLoadingQuery>
639653
</Container>;
640654
};
655+
656+
export const Groups = withRouter(connect(stateToProps)(GroupsComponent));

0 commit comments

Comments
 (0)