mirror of
https://github.com/rjNemo/ticket_manager
synced 2026-06-12 11:46:40 +00:00
changed background color & enhanced filtering
This commit is contained in:
parent
2419627400
commit
4b43486c16
8 changed files with 71 additions and 31 deletions
|
|
@ -3,17 +3,27 @@ import { Activity } from "../types/Activity";
|
||||||
|
|
||||||
type IProps = {
|
type IProps = {
|
||||||
activities: Activity[];
|
activities: Activity[];
|
||||||
|
filterText: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const ActivityCollection: FC<IProps> = ({ activities }) => {
|
export const ActivityCollection: FC<IProps> = ({ activities, filterText }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<ul className="collection">
|
<ul className="collection">
|
||||||
{activities.map((activity: Activity) => (
|
{activities
|
||||||
<li key={activity.id} className="collection-item avatar">
|
.filter(
|
||||||
<ActivityEntry activity={activity} />
|
a =>
|
||||||
</li>
|
a.description.toLowerCase().includes(filterText.toLowerCase()) ||
|
||||||
))}
|
a.user.firstName
|
||||||
|
.toLowerCase()
|
||||||
|
.includes(filterText.toLowerCase()) ||
|
||||||
|
a.ticket.title.toLowerCase().includes(filterText.toLowerCase())
|
||||||
|
)
|
||||||
|
.map((activity: Activity) => (
|
||||||
|
<li key={activity.id} className="collection-item avatar">
|
||||||
|
<ActivityEntry activity={activity} />
|
||||||
|
</li>
|
||||||
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { FC, useState, ChangeEvent } from "react";
|
import React, { FC, useState, ChangeEvent, MouseEvent } from "react";
|
||||||
import { ActivityCollection } from "./ActivityCollection";
|
import { ActivityCollection } from "./ActivityCollection";
|
||||||
import { Activity } from "../types/Activity";
|
import { Activity } from "../types/Activity";
|
||||||
import { FilterBar } from "./FilterBar";
|
import { FilterBar } from "./FilterBar";
|
||||||
|
|
@ -9,7 +9,9 @@ type IProps = {
|
||||||
|
|
||||||
export const ActivityList: FC<IProps> = ({ activities }) => {
|
export const ActivityList: FC<IProps> = ({ activities }) => {
|
||||||
const [filterText, setFilterText] = useState<string>("");
|
const [filterText, setFilterText] = useState<string>("");
|
||||||
|
const clearFilterText: (e: MouseEvent) => void = (e: MouseEvent) => {
|
||||||
|
setFilterText("");
|
||||||
|
};
|
||||||
const handleChange: (e: ChangeEvent<HTMLInputElement>) => void = (
|
const handleChange: (e: ChangeEvent<HTMLInputElement>) => void = (
|
||||||
e: ChangeEvent<HTMLInputElement>
|
e: ChangeEvent<HTMLInputElement>
|
||||||
) => {
|
) => {
|
||||||
|
|
@ -20,9 +22,13 @@ export const ActivityList: FC<IProps> = ({ activities }) => {
|
||||||
<>
|
<>
|
||||||
<div className="row valign-wrapper">
|
<div className="row valign-wrapper">
|
||||||
<h3>Activity</h3>
|
<h3>Activity</h3>
|
||||||
<FilterBar filterText={filterText} handleChange={handleChange} />
|
<FilterBar
|
||||||
|
filterText={filterText}
|
||||||
|
handleChange={handleChange}
|
||||||
|
clearFilterText={clearFilterText}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<ActivityCollection activities={activities} />
|
<ActivityCollection activities={activities} filterText={filterText} />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { FC, useState, ChangeEvent } from "react";
|
import React, { FC, useState, ChangeEvent, MouseEvent } from "react";
|
||||||
import { AppFile } from "../types/AppFile";
|
import { AppFile } from "../types/AppFile";
|
||||||
import { FileCollection } from "./FileCollection";
|
import { FileCollection } from "./FileCollection";
|
||||||
import { InputFile } from "./InputFile";
|
import { InputFile } from "./InputFile";
|
||||||
|
|
@ -10,7 +10,9 @@ type IProps = {
|
||||||
|
|
||||||
export const FileList: FC<IProps> = ({ files }) => {
|
export const FileList: FC<IProps> = ({ files }) => {
|
||||||
const [filterText, setFilterText] = useState<string>("");
|
const [filterText, setFilterText] = useState<string>("");
|
||||||
|
const clearFilterText: (e: MouseEvent) => void = (e: MouseEvent) => {
|
||||||
|
setFilterText("");
|
||||||
|
};
|
||||||
const handleChange: (e: ChangeEvent<HTMLInputElement>) => void = (
|
const handleChange: (e: ChangeEvent<HTMLInputElement>) => void = (
|
||||||
e: ChangeEvent<HTMLInputElement>
|
e: ChangeEvent<HTMLInputElement>
|
||||||
) => {
|
) => {
|
||||||
|
|
@ -20,10 +22,14 @@ export const FileList: FC<IProps> = ({ files }) => {
|
||||||
<>
|
<>
|
||||||
<div className="row valign-wrapper">
|
<div className="row valign-wrapper">
|
||||||
<h3>Files</h3>
|
<h3>Files</h3>
|
||||||
<FilterBar filterText={filterText} handleChange={handleChange} />
|
<FilterBar
|
||||||
|
filterText={filterText}
|
||||||
|
handleChange={handleChange}
|
||||||
|
clearFilterText={clearFilterText}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<InputFile />
|
<InputFile />
|
||||||
<FileCollection files={files} />
|
<FileCollection files={files} filterText={filterText} />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -3,15 +3,22 @@ import { AppFile } from "../types/AppFile";
|
||||||
|
|
||||||
type IProps = {
|
type IProps = {
|
||||||
files: AppFile[];
|
files: AppFile[];
|
||||||
|
filterText: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FileCollection: FC<IProps> = ({ files }) => {
|
export const FileCollection: FC<IProps> = ({ files, filterText }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<ul className="collection">
|
<ul className="collection">
|
||||||
{files.map((file: AppFile) => (
|
{files
|
||||||
<FileEntry file={file} key={file.id} />
|
.filter(
|
||||||
))}
|
f =>
|
||||||
|
f.name.toLowerCase().includes(filterText.toLowerCase()) ||
|
||||||
|
f.format.toLowerCase().includes(filterText.toLowerCase())
|
||||||
|
)
|
||||||
|
.map((file: AppFile) => (
|
||||||
|
<FileEntry file={file} key={file.id} />
|
||||||
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,17 @@
|
||||||
import React, { FC } from "react";
|
import React, { FC, ChangeEvent, MouseEvent } from "react";
|
||||||
import { useRouteMatch } from "react-router-dom";
|
import { useRouteMatch } from "react-router-dom";
|
||||||
|
|
||||||
type IProps = {
|
type IProps = {
|
||||||
filterText: string;
|
filterText: string;
|
||||||
handleChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
handleChange: (e: ChangeEvent<HTMLInputElement>) => void;
|
||||||
|
clearFilterText: (e: MouseEvent<HTMLInputElement>) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FilterBar: FC<IProps> = ({ filterText, handleChange }) => {
|
export const FilterBar: FC<IProps> = ({
|
||||||
|
filterText,
|
||||||
|
handleChange,
|
||||||
|
clearFilterText
|
||||||
|
}) => {
|
||||||
const { url } = useRouteMatch();
|
const { url } = useRouteMatch();
|
||||||
const placeholder: string = url.split("/")[3];
|
const placeholder: string = url.split("/")[3];
|
||||||
return (
|
return (
|
||||||
|
|
@ -26,13 +31,10 @@ export const FilterBar: FC<IProps> = ({ filterText, handleChange }) => {
|
||||||
<label className="label-icon" htmlFor="search">
|
<label className="label-icon" htmlFor="search">
|
||||||
<i className="material-icons">filter_list</i>
|
<i className="material-icons">filter_list</i>
|
||||||
</label>
|
</label>
|
||||||
<i
|
<i className="material-icons" onClick={clearFilterText}>
|
||||||
className="material-icons" //onClick={clearSearchBar}
|
|
||||||
>
|
|
||||||
close
|
close
|
||||||
</i>
|
</i>
|
||||||
</div>
|
</div>
|
||||||
<div className="col s2 valign-wrapper"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { FC, useState, ChangeEvent } from "react";
|
import React, { FC, useState, ChangeEvent, MouseEvent } from "react";
|
||||||
import { Ticket } from "../types/Ticket";
|
import { Ticket } from "../types/Ticket";
|
||||||
import { FloatingButton } from "./FloatingButton";
|
import { FloatingButton } from "./FloatingButton";
|
||||||
import { HorizontalCard } from "./HorizontalCard";
|
import { HorizontalCard } from "./HorizontalCard";
|
||||||
|
|
@ -9,9 +9,12 @@ type TicketListProps = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const TicketList: FC<TicketListProps> = ({ tickets }) => {
|
export const TicketList: FC<TicketListProps> = ({ tickets }) => {
|
||||||
|
const [filterText, setFilterText] = useState<string>("");
|
||||||
|
const clearFilterText: (e: MouseEvent) => void = (e: MouseEvent) => {
|
||||||
|
setFilterText("");
|
||||||
|
};
|
||||||
const archiveTicket = () => {};
|
const archiveTicket = () => {};
|
||||||
const validateTicket = () => {};
|
const validateTicket = () => {};
|
||||||
const [filterText, setFilterText] = useState<string>("");
|
|
||||||
|
|
||||||
const handleChange: (e: ChangeEvent<HTMLInputElement>) => void = (
|
const handleChange: (e: ChangeEvent<HTMLInputElement>) => void = (
|
||||||
e: ChangeEvent<HTMLInputElement>
|
e: ChangeEvent<HTMLInputElement>
|
||||||
|
|
@ -44,12 +47,18 @@ export const TicketList: FC<TicketListProps> = ({ tickets }) => {
|
||||||
<div className="row valign-wrapper">
|
<div className="row valign-wrapper">
|
||||||
<h3>Tickets</h3>
|
<h3>Tickets</h3>
|
||||||
<FloatingButton color=" blue-grey lighten-4" size="small" />
|
<FloatingButton color=" blue-grey lighten-4" size="small" />
|
||||||
<FilterBar filterText={filterText} handleChange={handleChange} />
|
<FilterBar
|
||||||
|
filterText={filterText}
|
||||||
|
handleChange={handleChange}
|
||||||
|
clearFilterText={clearFilterText}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="col s12 grey">
|
<div className="col s12 grey">
|
||||||
<ul>
|
<ul>
|
||||||
{tickets
|
{tickets
|
||||||
.filter(t => t.title.includes(filterText))
|
.filter(t =>
|
||||||
|
t.title.toLowerCase().includes(filterText.toLowerCase())
|
||||||
|
)
|
||||||
.map((t: Ticket) => (
|
.map((t: Ticket) => (
|
||||||
<li key={t.id}>
|
<li key={t.id}>
|
||||||
<HorizontalCard
|
<HorizontalCard
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ export const ProjectController: FC = () => {
|
||||||
name: "Business Model Canvas",
|
name: "Business Model Canvas",
|
||||||
description: "Path to 1B$",
|
description: "Path to 1B$",
|
||||||
size: 2100,
|
size: 2100,
|
||||||
format: "pdf"
|
format: "png"
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ export const history = creacteHistory.createBrowserHistory();
|
||||||
export const AppRouter = () => {
|
export const AppRouter = () => {
|
||||||
return (
|
return (
|
||||||
<Router history={history}>
|
<Router history={history}>
|
||||||
<div>
|
<div className="grey lighten-4">
|
||||||
<Switch>
|
<Switch>
|
||||||
{/* <Route path="/">
|
{/* <Route path="/">
|
||||||
<HomeController />
|
<HomeController />
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue