changed background color & enhanced filtering

This commit is contained in:
Ruidy Nemausat 2020-02-21 11:32:10 +01:00
parent 2419627400
commit 4b43486c16
8 changed files with 71 additions and 31 deletions

View file

@ -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>
</> </>
); );

View file

@ -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} />
</> </>
); );
}; };

View file

@ -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} />
</> </>
); );
}; };

View file

@ -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>
</> </>
); );

View file

@ -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>
</> </>
); );

View file

@ -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

View file

@ -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"
} }
]; ];

View file

@ -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 />