diff --git a/query-connector/src/app/(pages)/userManagement/components/DataProvider.tsx b/query-connector/src/app/(pages)/userManagement/components/DataProvider.tsx index 27e2fff9..3c00ba8f 100644 --- a/query-connector/src/app/(pages)/userManagement/components/DataProvider.tsx +++ b/query-connector/src/app/(pages)/userManagement/components/DataProvider.tsx @@ -9,7 +9,8 @@ interface UserManagementData { isOpen: boolean; title: string; subtitle: string; - content: JSX.Element; + placeholder: string; + subjectData: unknown; subjectType: SubjectType; }; } @@ -22,6 +23,9 @@ interface UserManagementContext extends UserManagementData { subjectId: string, ) => void; CloseEditSection: () => void; + HandleSearch: (searchFilter: string) => void; + HandleMemberUpdate: () => void; + HandleQueryUpdate: () => void; } const initData: UserManagementData = { @@ -29,7 +33,8 @@ const initData: UserManagementData = { isOpen: false, title: "", subtitle: "", - content: <>, + placeholder: "Search", + subjectData: [], subjectType: "Members", }, }; @@ -38,6 +43,9 @@ export const DataContext = createContext({ ...initData, OpenEditSection: () => {}, CloseEditSection: () => {}, + HandleSearch: (searchFilter: string) => {}, + HandleMemberUpdate: () => {}, + HandleQueryUpdate: () => {}, }); /** @@ -49,6 +57,9 @@ export const DataContext = createContext({ const DataProvider: React.FC = ({ children }) => { const [innerState, setInnerState] = useState(initData); + /** + * Event handlers for edit section + */ function CloseEditSection() { const newState: UserManagementData = { ...innerState, @@ -66,23 +77,74 @@ const DataProvider: React.FC = ({ children }) => { subjectType: SubjectType, subjectId: string, ) { - // here we retrieve the relevant data + let subjectData = null; + let placeholder = ""; + + if (subjectType == "Members") { + placeholder = "Search members"; + subjectData = GetTeamMembers(subjectId); + } else { + placeholder = "Search queries"; + subjectData = GetTeamQueries(subjectId); + } + const newState: UserManagementData = { ...innerState, TeamQueryEditSection: { ...innerState.TeamQueryEditSection, title, subtitle, + placeholder, subjectType, + subjectData, isOpen: true, }, }; setInnerState(newState); } + function HandleSearch(filter: string) { + // TODO data filtering + console.log("filtering ..."); + } + + function HandleMemberUpdate() { + console.log("update team members"); + } + + function HandleQueryUpdate() { + console.log("update team queries"); + } + + /** + * Data fetching + */ + + function GetTeamMembers(teamId: string): unknown { + // TODO retrieve member data + const ListOfMembers = ["Member 1", "Member 2", "Member 3"]; + return ListOfMembers; + } + + function GetTeamQueries(teamId: string): unknown { + // TODO retrieve queries data + const ListOfQueries = ["Query 1", "Query 2", "Query 3"]; + return ListOfQueries; + } + + /** + * HTML + */ return ( {children} diff --git a/query-connector/src/app/(pages)/userManagement/components/TeamQueryEditSection.tsx b/query-connector/src/app/(pages)/userManagement/components/TeamQueryEditSection.tsx index 81503fc7..fd72dce5 100644 --- a/query-connector/src/app/(pages)/userManagement/components/TeamQueryEditSection.tsx +++ b/query-connector/src/app/(pages)/userManagement/components/TeamQueryEditSection.tsx @@ -3,21 +3,70 @@ import { useContext } from "react"; import Drawer from "@/app/ui/designSystem/drawer/Drawer"; import { DataContext } from "./DataProvider"; +import classNames from "classnames"; +import { Checkbox } from "@trussworks/react-uswds"; /** * @returns TeamQueryEditSection component which is the collapsible section that allows to edit members and queries of a team */ const TeamQueryEditSection: React.FC = () => { - const { TeamQueryEditSection, CloseEditSection } = useContext(DataContext); + const { + TeamQueryEditSection, + CloseEditSection, + HandleSearch, + HandleMemberUpdate, + HandleQueryUpdate, + } = useContext(DataContext); + + /** + * DOM content helpers + */ + + function CreateListOfItems(items: string[]): JSX.Element { + const isMemberView = TeamQueryEditSection.subjectType == "Members"; + + const description = isMemberView + ? "members of {TeamQueryEditSection.title}" + : "queries of {TeamQueryEditSection.title}"; + + return ( +
    + {items.map((item: string) => ( +
  • + +
  • + ))} +
+ ); + } + + function GenerateContent(): JSX.Element { + return CreateListOfItems(TeamQueryEditSection.subjectData as string[]); + } + + /** + * HTML + */ return ( {}} + onSearch={HandleSearch} onClose={CloseEditSection} /> ); diff --git a/query-connector/src/app/(pages)/userManagement/userGroups/page.tsx b/query-connector/src/app/(pages)/userManagement/userGroups/page.tsx index 2ee3c871..8f399922 100644 --- a/query-connector/src/app/(pages)/userManagement/userGroups/page.tsx +++ b/query-connector/src/app/(pages)/userManagement/userGroups/page.tsx @@ -64,7 +64,12 @@ const UserGroups: React.FC = () => { unstyled aria-description={`Edit ${group.name} queries`} onClick={() => { - OpenEditSection(group.name, "Queries", "Query", group.id); + OpenEditSection( + group.name, + "Assigned queries", + "Query", + group.id, + ); }} > {GetQueryLabel(group.querySize)}