From e9329688b36d48d72b77ad8ad2f79d8d34ec59cb Mon Sep 17 00:00:00 2001 From: Muhammad Ali Date: Fri, 17 Jan 2025 11:58:04 +0500 Subject: [PATCH 1/3] Select current user as a reporter for jira task when calling api/request-changes or api/request-removal --- .../components/Navigation/Navigation.tsx | 3 +- .../components/OwnerAndReviewers/Reporter.tsx | 41 +++++++++++++++++++ .../RequestTaskModal/RequestTaskModal.tsx | 11 ++++- static/client/services/api/constants.ts | 2 +- static/client/services/api/types/pages.ts | 4 +- static/client/store/index.ts | 4 +- static/client/store/types.ts | 4 +- webapp/helper.py | 7 ++-- webapp/routes/jira.py | 10 +++-- webapp/schemas.py | 4 +- 10 files changed, 72 insertions(+), 18 deletions(-) create mode 100644 static/client/components/OwnerAndReviewers/Reporter.tsx diff --git a/static/client/components/Navigation/Navigation.tsx b/static/client/components/Navigation/Navigation.tsx index 139de460..806a86c1 100644 --- a/static/client/components/Navigation/Navigation.tsx +++ b/static/client/components/Navigation/Navigation.tsx @@ -9,6 +9,7 @@ import NavigationItems from "./NavigationItems"; import NavigationCollapseToggle from "@/components/Navigation/NavigationCollapseToggle"; import SiteSelector from "@/components/SiteSelector"; +import type { IUser } from "@/services/api/types/users"; import { useStore } from "@/store"; const Navigation = (): JSX.Element => { @@ -17,7 +18,7 @@ const Navigation = (): JSX.Element => { const [user, setUser] = useStore((state) => [state.user, state.setUser]); const logout = useCallback(() => { - setUser(null); + setUser({} as IUser); window.open("/logout", "_self"); }, [setUser]); diff --git a/static/client/components/OwnerAndReviewers/Reporter.tsx b/static/client/components/OwnerAndReviewers/Reporter.tsx new file mode 100644 index 00000000..f98ecd2c --- /dev/null +++ b/static/client/components/OwnerAndReviewers/Reporter.tsx @@ -0,0 +1,41 @@ +import { useCallback } from "react"; + +import CustomSearchAndFilter from "./CustomSearchAndFilter"; +import { useUsersRequest } from "./OwnerAndReviewers.hooks"; + +import { type IUser } from "@/services/api/types/users"; +import { useStore } from "@/store"; + +const Reporter = ({ reporter, setReporter }: { reporter: IUser | null; setReporter: Function }): JSX.Element => { + const user = useStore((state) => state.user); + const { options, setOptions, handleChange } = useUsersRequest(); + + const handleRemoveReporter = useCallback( + () => () => { + setReporter(user); + }, + [setReporter, user], + ); + + const handleSelectReporter = useCallback( + (option: IUser) => { + setOptions([]); + setReporter(option); + }, + [setOptions, setReporter], + ); + + return ( + + ); +}; + +export default Reporter; diff --git a/static/client/components/RequestTaskModal/RequestTaskModal.tsx b/static/client/components/RequestTaskModal/RequestTaskModal.tsx index 1b48d779..77b2f8c0 100644 --- a/static/client/components/RequestTaskModal/RequestTaskModal.tsx +++ b/static/client/components/RequestTaskModal/RequestTaskModal.tsx @@ -4,10 +4,12 @@ import { Button, Input, Modal, RadioInput, Spinner, Textarea, Tooltip } from "@c import type { IRequestTaskModalProps } from "./RequestTaskModal.types"; +import Reporter from "@/components/OwnerAndReviewers/Reporter"; import config from "@/config"; import { PagesServices } from "@/services/api/services/pages"; import { ChangeRequestType, PageStatus } from "@/services/api/types/pages"; import { DatesServices } from "@/services/dates"; +import { useStore } from "@/store"; const RequestTaskModal = ({ changeType, @@ -21,6 +23,8 @@ const RequestTaskModal = ({ const [summary, setSummary] = useState(); const [descr, setDescr] = useState(""); const [isLoading, setIsLoading] = useState(false); + const user = useStore((state) => state.user); + const [reporter, setReporter] = useState(user); const handleChangeDueDate = useCallback((e: ChangeEvent) => { setDueDate(e.target.value); @@ -52,7 +56,7 @@ const RequestTaskModal = ({ PagesServices.requestRemoval({ due_date: dueDate, webpage_id: webpage.id, - reporter_id: webpage.owner.id, + reporter_struct: reporter, description: descr, }).then(() => { setIsLoading(false); @@ -67,7 +71,7 @@ const RequestTaskModal = ({ PagesServices.requestChanges({ due_date: dueDate, webpage_id: webpage.id, - reporter_id: webpage.owner.id, + reporter_struct: reporter, type: changeType, summary, description: `Copy doc link: ${webpage.copy_doc_link} \n${descr}`, @@ -176,6 +180,9 @@ const RequestTaskModal = ({ )} +
+ +