mirror of
https://github.com/rjNemo/ticket_manager
synced 2026-06-12 11:46:40 +00:00
simplified newticketform
This commit is contained in:
parent
0b4b605280
commit
ec53a6edb6
6 changed files with 33 additions and 68 deletions
|
|
@ -1,33 +1,21 @@
|
||||||
import React, { FC, useState, ChangeEvent, useEffect, FormEvent } from "react";
|
import React, { FC, useState, useEffect, FormEvent } from "react";
|
||||||
import { useParams } from "react-router-dom";
|
|
||||||
import { Modal } from "./Modal";
|
import { Modal } from "./Modal";
|
||||||
import { NewTicketTabRouter } from "./NewTicketTabRouter";
|
|
||||||
import { User } from "../types/User";
|
|
||||||
import { Ticket } from "../types/Ticket";
|
import { Ticket } from "../types/Ticket";
|
||||||
import { patch, post } from "../utils/http";
|
import { post } from "../utils/http";
|
||||||
import { Constants } from "../utils/Constants";
|
import { Constants } from "../utils/Constants";
|
||||||
import { Project } from "../types/Project";
|
|
||||||
import { HttpResponse } from "../types/HttpResponse";
|
import { HttpResponse } from "../types/HttpResponse";
|
||||||
|
import { NewTicketForm } from "./NewTicketForm";
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
show: boolean;
|
show: boolean;
|
||||||
handleClose(): void;
|
handleClose(): void;
|
||||||
allUsers: User[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const NewTicketModal: FC<IProps> = ({ show, handleClose, allUsers }) => {
|
export const NewTicketModal: FC<IProps> = ({ show, handleClose }) => {
|
||||||
const [filterText, setFilterText] = useState<string>("");
|
|
||||||
const { id } = useParams();
|
|
||||||
const [title, setTitle] = useState("");
|
const [title, setTitle] = useState("");
|
||||||
const [description, setDescription] = useState("");
|
const [description, setDescription] = useState("");
|
||||||
const [endingDate, setEndingDate] = useState("");
|
const [endingDate, setEndingDate] = useState("");
|
||||||
|
|
||||||
const handleChange: (e: ChangeEvent<HTMLInputElement>) => void = (
|
|
||||||
e: ChangeEvent<HTMLInputElement>
|
|
||||||
) => {
|
|
||||||
setFilterText(e.target.value);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleSubmit: (event: FormEvent<HTMLFormElement>) => void = async (
|
const handleSubmit: (event: FormEvent<HTMLFormElement>) => void = async (
|
||||||
e: FormEvent
|
e: FormEvent
|
||||||
) => {
|
) => {
|
||||||
|
|
@ -39,12 +27,12 @@ export const NewTicketModal: FC<IProps> = ({ show, handleClose, allUsers }) => {
|
||||||
creatorId: "20bf4b2a-7209-4826-96cd-29c2bc937a94",
|
creatorId: "20bf4b2a-7209-4826-96cd-29c2bc937a94",
|
||||||
projectId: 1
|
projectId: 1
|
||||||
};
|
};
|
||||||
console.log(newTicket);
|
// console.log(newTicket);
|
||||||
const response: HttpResponse<Ticket> = await post<Ticket>(
|
const response: HttpResponse<Ticket> = await post<Ticket>(
|
||||||
`${Constants.ticketsURI}`,
|
`${Constants.ticketsURI}`,
|
||||||
newTicket
|
newTicket
|
||||||
);
|
);
|
||||||
console.log(response.parsedBody);
|
// console.log(response.parsedBody);
|
||||||
handleClose();
|
handleClose();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -68,9 +56,7 @@ export const NewTicketModal: FC<IProps> = ({ show, handleClose, allUsers }) => {
|
||||||
|
|
||||||
<form onSubmit={handleSubmit}>
|
<form onSubmit={handleSubmit}>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<NewTicketTabRouter
|
<NewTicketForm
|
||||||
tabNames={["Details", "Members"]}
|
|
||||||
users={allUsers}
|
|
||||||
title={title}
|
title={title}
|
||||||
setTitle={setTitle}
|
setTitle={setTitle}
|
||||||
description={description}
|
description={description}
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,10 @@
|
||||||
import React, { FC } from "react";
|
import React, { FC } from "react";
|
||||||
import { Route, useRouteMatch, Redirect } from "react-router-dom";
|
import { useRouteMatch } from "react-router-dom";
|
||||||
import { TabRouterHeader } from "./TabRouterHeader";
|
import { TabRouterHeader } from "./TabRouterHeader";
|
||||||
import { NewTicketForm } from "./NewTicketForm";
|
import { NewTicketForm } from "./NewTicketForm";
|
||||||
import { MemberList } from "./MemberList";
|
|
||||||
import { User } from "../types/User";
|
|
||||||
import { Ticket } from "../types/Ticket";
|
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
tabNames: string[];
|
tabNames: string[];
|
||||||
users: User[];
|
|
||||||
description: string;
|
description: string;
|
||||||
setDescription: React.Dispatch<React.SetStateAction<string>>;
|
setDescription: React.Dispatch<React.SetStateAction<string>>;
|
||||||
title: string;
|
title: string;
|
||||||
|
|
@ -19,7 +15,6 @@ interface IProps {
|
||||||
|
|
||||||
export const NewTicketTabRouter: FC<IProps> = ({
|
export const NewTicketTabRouter: FC<IProps> = ({
|
||||||
tabNames,
|
tabNames,
|
||||||
users,
|
|
||||||
description,
|
description,
|
||||||
setDescription,
|
setDescription,
|
||||||
title,
|
title,
|
||||||
|
|
@ -33,22 +28,14 @@ export const NewTicketTabRouter: FC<IProps> = ({
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<TabRouterHeader tabNames={tabNames} />
|
<TabRouterHeader tabNames={tabNames} />
|
||||||
|
|
||||||
<Redirect from={url} to={`${url}/details`} />
|
<NewTicketForm
|
||||||
|
title={title}
|
||||||
<Route path={`${url}/details`}>
|
setTitle={setTitle}
|
||||||
<NewTicketForm
|
description={description}
|
||||||
title={title}
|
setDescription={setDescription}
|
||||||
setTitle={setTitle}
|
endingDate={endingDate}
|
||||||
description={description}
|
setEndingDate={setEndingDate}
|
||||||
setDescription={setDescription}
|
/>
|
||||||
endingDate={endingDate}
|
|
||||||
setEndingDate={setEndingDate}
|
|
||||||
/>
|
|
||||||
</Route>
|
|
||||||
|
|
||||||
<Route path={`${url}/members`}>
|
|
||||||
<MemberList users={users} />
|
|
||||||
</Route>
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,10 @@ import { Route, useRouteMatch, Redirect } from "react-router-dom";
|
||||||
import { TabRouterHeader } from "./TabRouterHeader";
|
import { TabRouterHeader } from "./TabRouterHeader";
|
||||||
import { TicketList } from "./TicketList";
|
import { TicketList } from "./TicketList";
|
||||||
import { FileList } from "./AppFileList";
|
import { FileList } from "./AppFileList";
|
||||||
import { ActivityList } from "./ActivityList";
|
// import { ActivityList } from "./ActivityList";
|
||||||
import { Ticket } from "../types/Ticket";
|
import { Ticket } from "../types/Ticket";
|
||||||
import { AppFile } from "../types/AppFile";
|
import { AppFile } from "../types/AppFile";
|
||||||
import { Activity } from "../types/Activity";
|
import { Activity } from "../types/Activity";
|
||||||
import { User } from "../types/User";
|
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
tickets: Ticket[];
|
tickets: Ticket[];
|
||||||
|
|
@ -15,15 +14,13 @@ interface IProps {
|
||||||
tabNames: string[];
|
tabNames: string[];
|
||||||
files: AppFile[];
|
files: AppFile[];
|
||||||
activities: Activity[];
|
activities: Activity[];
|
||||||
allUsers: User[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const TabRouter: FC<IProps> = ({
|
export const TabRouter: FC<IProps> = ({
|
||||||
tickets,
|
tickets,
|
||||||
tabNames,
|
tabNames,
|
||||||
files,
|
files,
|
||||||
activities,
|
activities
|
||||||
allUsers
|
|
||||||
}) => {
|
}) => {
|
||||||
const { url } = useRouteMatch();
|
const { url } = useRouteMatch();
|
||||||
|
|
||||||
|
|
@ -35,16 +32,16 @@ export const TabRouter: FC<IProps> = ({
|
||||||
<Redirect from={url} to={`${url}/tickets`} />
|
<Redirect from={url} to={`${url}/tickets`} />
|
||||||
|
|
||||||
<Route path={`${url}/tickets`}>
|
<Route path={`${url}/tickets`}>
|
||||||
<TicketList tickets={tickets} users={allUsers} />
|
<TicketList tickets={tickets} />
|
||||||
</Route>
|
</Route>
|
||||||
|
|
||||||
<Route path={`${url}/files`}>
|
<Route path={`${url}/files`}>
|
||||||
<FileList files={files} />
|
<FileList files={files} />
|
||||||
</Route>
|
</Route>
|
||||||
|
|
||||||
<Route path={`${url}/activity`}>
|
{/* <Route path={`${url}/activity`}>
|
||||||
<ActivityList activities={activities} />
|
<ActivityList activities={activities} />
|
||||||
</Route>
|
</Route> */}
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ import { Ticket } from "../types/Ticket";
|
||||||
import { FloatingButton } from "./FloatingButton";
|
import { FloatingButton } from "./FloatingButton";
|
||||||
import { HorizontalCard } from "./HorizontalCard";
|
import { HorizontalCard } from "./HorizontalCard";
|
||||||
import { FilterBar } from "./FilterBar";
|
import { FilterBar } from "./FilterBar";
|
||||||
import { User } from "../types/User";
|
|
||||||
import { HttpResponse } from "../types/HttpResponse";
|
import { HttpResponse } from "../types/HttpResponse";
|
||||||
import { put } from "../utils/http";
|
import { put } from "../utils/http";
|
||||||
import { Constants } from "../utils/Constants";
|
import { Constants } from "../utils/Constants";
|
||||||
|
|
@ -11,15 +10,13 @@ import { NewTicketModal } from "./NewTicketModal";
|
||||||
|
|
||||||
type TicketListProps = {
|
type TicketListProps = {
|
||||||
tickets: Ticket[];
|
tickets: Ticket[];
|
||||||
users: User[];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const TicketList: FC<TicketListProps> = ({ tickets, users }) => {
|
export const TicketList: FC<TicketListProps> = ({ tickets }) => {
|
||||||
const [filterText, setFilterText] = useState<string>("");
|
const [filterText, setFilterText] = useState<string>("");
|
||||||
const clearFilterText: (e: MouseEvent) => void = (e: MouseEvent) => {
|
const clearFilterText: (e: MouseEvent) => void = (e: MouseEvent) => {
|
||||||
setFilterText("");
|
setFilterText("");
|
||||||
};
|
};
|
||||||
// const archiveTicket = () => {};
|
|
||||||
|
|
||||||
const onClick: (e: MouseEvent) => void = (e: MouseEvent) => {
|
const onClick: (e: MouseEvent) => void = (e: MouseEvent) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
@ -45,7 +42,6 @@ export const TicketList: FC<TicketListProps> = ({ tickets, users }) => {
|
||||||
setShowNew(false);
|
setShowNew(false);
|
||||||
}}
|
}}
|
||||||
show={showNew}
|
show={showNew}
|
||||||
allUsers={users}
|
|
||||||
/>
|
/>
|
||||||
<h3>Tickets</h3>
|
<h3>Tickets</h3>
|
||||||
<FloatingButton
|
<FloatingButton
|
||||||
|
|
@ -59,7 +55,7 @@ export const TicketList: FC<TicketListProps> = ({ tickets, users }) => {
|
||||||
clearFilterText={clearFilterText}
|
clearFilterText={clearFilterText}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="col s12 grey">
|
<div className="col s12 grey lighten-1">
|
||||||
<ul>
|
<ul>
|
||||||
{filteredTickets.length === 0 ? (
|
{filteredTickets.length === 0 ? (
|
||||||
<HorizontalCard />
|
<HorizontalCard />
|
||||||
|
|
@ -76,7 +72,6 @@ export const TicketList: FC<TicketListProps> = ({ tickets, users }) => {
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
// archiveTicket={archiveTicket}
|
|
||||||
/>
|
/>
|
||||||
))
|
))
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ export const UsersModalEntry: FC<IProps> = ({ user, setMembers, members }) => {
|
||||||
return Boolean(members.find(m => m.id === id));
|
return Boolean(members.find(m => m.id === id));
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div className="row">
|
<div className="valign-wrapper">
|
||||||
<label htmlFor={user.id}>
|
<label htmlFor={user.id}>
|
||||||
<input
|
<input
|
||||||
id={user.id}
|
id={user.id}
|
||||||
|
|
@ -27,15 +27,16 @@ export const UsersModalEntry: FC<IProps> = ({ user, setMembers, members }) => {
|
||||||
/>
|
/>
|
||||||
<span>
|
<span>
|
||||||
{user.fullName}
|
{user.fullName}
|
||||||
<img
|
{" "}
|
||||||
className="circle"
|
|
||||||
src={user.picture}
|
|
||||||
width="32vh"
|
|
||||||
height="32vh"
|
|
||||||
alt={user.fullName}
|
|
||||||
/>
|
|
||||||
</span>
|
</span>
|
||||||
</label>
|
</label>
|
||||||
|
<img
|
||||||
|
className="circle"
|
||||||
|
src={user.picture}
|
||||||
|
width="32vh"
|
||||||
|
height="32vh"
|
||||||
|
alt={user.fullName}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ export const ProjectPage: FC<IProps> = ({ viewModel }) => {
|
||||||
activities
|
activities
|
||||||
} = viewModel;
|
} = viewModel;
|
||||||
|
|
||||||
const tabNames: string[] = ["Tickets", "Files", "Activity"];
|
const tabNames: string[] = ["Tickets", "Files"]; //, "Activity"];
|
||||||
const [showModal, setShowModal] = useState<boolean>(false);
|
const [showModal, setShowModal] = useState<boolean>(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
@ -59,7 +59,6 @@ export const ProjectPage: FC<IProps> = ({ viewModel }) => {
|
||||||
tickets={tickets}
|
tickets={tickets}
|
||||||
files={files}
|
files={files}
|
||||||
activities={activities}
|
activities={activities}
|
||||||
allUsers={allUsers}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue