From d3e7ddfb5399fda892e6a995d4f32c14e6934c61 Mon Sep 17 00:00:00 2001 From: Collin Barrett Date: Mon, 3 Sep 2018 19:50:50 -0500 Subject: [PATCH] filter language by dropdown closes #379 --- .../ClientApp/components/Home.tsx | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/src/FilterLists.Web/ClientApp/components/Home.tsx b/src/FilterLists.Web/ClientApp/components/Home.tsx index 24638b980..2259d2d08 100644 --- a/src/FilterLists.Web/ClientApp/components/Home.tsx +++ b/src/FilterLists.Web/ClientApp/components/Home.tsx @@ -13,6 +13,8 @@ interface IHomeState { loadingRuleCount: boolean; software: ISoftwareDto[]; loadingSoftware: boolean; + languages: ILanguageDto[]; + loadingLanguages: boolean; pageSize: number; } @@ -26,13 +28,18 @@ export class Home extends React.Component, IHomeState> { loadingRuleCount: true, software: [], loadingSoftware: true, + languages: [], + loadingLanguages: true, pageSize: 20 }; this.updatePageSize = this.updatePageSize.bind(this); } render() { - const contents = this.state.loadingLists || this.state.loadingRuleCount || this.state.loadingSoftware + const contents = this.state.loadingLists || + this.state.loadingRuleCount || + this.state.loadingSoftware || + this.state.loadingLanguages ?

Loading...

@@ -71,6 +78,14 @@ export class Home extends React.Component, IHomeState> { loadingSoftware: false }); }); + fetch("https://filterlists.com/api/v1/languages") + .then(response => response.json() as Promise) + .then(data => { + this.setState({ + languages: data, + loadingLanguages: false + }); + }); } updatePageSize() { @@ -113,15 +128,15 @@ export class Home extends React.Component, IHomeState> { } return row[filter.id].join(",").split(",").includes(filter.value); }, - sortable: false, Filter: ({ filter, onChange }) => , + sortable: false, Cell: () => null, width: 100, headerClassName: "d-none d-md-block", @@ -147,14 +162,25 @@ export class Home extends React.Component, IHomeState> { Header: "Langs.", accessor: "languages", filterable: true, - filterMethod: (filter: any, row: any) => row[filter.id] - .map((e: any) => e.name.concat(e.iso6391)).join().toUpperCase() - .includes(filter.value.toUpperCase()), + filterMethod: (filter: any, row: any) => { + if (filter.value === "any") { + return true; + } + return row[filter.id].map((x: any) => x.iso6391).includes(filter.value); + }, + Filter: ({ filter, onChange }) => + , sortable: false, Cell: (cell: any) =>
{cell.value.map( (e: any) => {e.iso6391})}
, style: { whiteSpace: "inherit" }, - width: 60, + width: 100, headerClassName: "d-none d-md-block", className: "d-none d-md-block" }, @@ -192,7 +218,7 @@ export class Home extends React.Component, IHomeState> { } , style: { textAlign: "center" }, - width: 85 + width: 90 } ]} SubComponent={(row: any) => { @@ -209,6 +235,11 @@ interface ISoftwareDto { name: string; } +interface ILanguageDto { + iso6391: string; + name: string; +} + interface IListDto { id: number; name: string;