From 8e5c1e57ab78a489f8c3e1755bf4ea1aabbe4101 Mon Sep 17 00:00:00 2001 From: Collin Barrett Date: Sun, 9 Sep 2018 17:10:58 -0500 Subject: [PATCH 1/4] wip --- .../ClientApp/components/Home.tsx | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/FilterLists.Web/ClientApp/components/Home.tsx b/src/FilterLists.Web/ClientApp/components/Home.tsx index be3c8e4c0..dd2e4e4b2 100644 --- a/src/FilterLists.Web/ClientApp/components/Home.tsx +++ b/src/FilterLists.Web/ClientApp/components/Home.tsx @@ -15,6 +15,7 @@ interface IHomeState { loadingSoftware: boolean; languages: ILanguageDto[]; loadingLanguages: boolean; + columnVisibility: IColumnVisibility[]; pageSize: number; } @@ -30,6 +31,14 @@ export class Home extends React.Component, IHomeState> { loadingSoftware: true, languages: [], loadingLanguages: true, + columnVisibility: [ + { column: "name", visible: true }, + { column: "software", visible: true }, + { column: "tags", visible: true }, + { column: "languages", visible: true }, + { column: "updatedDate", visible: true }, + { column: "details", visible: true } + ], pageSize: 20 }; this.updatePageSize = this.updatePageSize.bind(this); @@ -45,6 +54,7 @@ export class Home extends React.Component, IHomeState> {

:
{Home.renderTagline(this.state)} + {this.renderColumnVisibilityCheckboxes()} {Home.renderFilterListsTable(this.state)}
; return
@@ -102,6 +112,19 @@ export class Home extends React.Component, IHomeState> {

; } + private renderColumnVisibilityCheckboxes() { + return
+ {this.state.columnVisibility.map((c: IColumnVisibility) => this.renderColumnVisibilityCheckbox(c))} +
; + }; + + private renderColumnVisibilityCheckbox(props: IColumnVisibility) { + return
+ + +
; + } + private static renderFilterListsTable(state: IHomeState) { return Date: Sun, 9 Sep 2018 17:36:15 -0500 Subject: [PATCH 2/4] add cbxes below table ref #336 --- .../ClientApp/components/Home.tsx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/FilterLists.Web/ClientApp/components/Home.tsx b/src/FilterLists.Web/ClientApp/components/Home.tsx index dd2e4e4b2..aed99e46b 100644 --- a/src/FilterLists.Web/ClientApp/components/Home.tsx +++ b/src/FilterLists.Web/ClientApp/components/Home.tsx @@ -32,12 +32,12 @@ export class Home extends React.Component, IHomeState> { languages: [], loadingLanguages: true, columnVisibility: [ - { column: "name", visible: true }, - { column: "software", visible: true }, - { column: "tags", visible: true }, - { column: "languages", visible: true }, - { column: "updatedDate", visible: true }, - { column: "details", visible: true } + { column: "Name", visible: true }, + { column: "Software", visible: true }, + { column: "Tags", visible: true }, + { column: "Languages", visible: true }, + { column: "Updated Date", visible: true }, + { column: "Details", visible: true } ], pageSize: 20 }; @@ -54,8 +54,8 @@ export class Home extends React.Component, IHomeState> {

:
{Home.renderTagline(this.state)} - {this.renderColumnVisibilityCheckboxes()} {Home.renderFilterListsTable(this.state)} + {this.renderColumnVisibilityCheckboxes()}
; return
{contents} @@ -100,7 +100,7 @@ export class Home extends React.Component, IHomeState> { updatePageSize() { this.setState({ - pageSize: Math.max(Math.floor((window.innerHeight - 361) / 52), 5) + pageSize: Math.max(Math.floor((window.innerHeight - 386) / 52), 5) }); } @@ -113,15 +113,15 @@ export class Home extends React.Component, IHomeState> { } private renderColumnVisibilityCheckboxes() { - return
- {this.state.columnVisibility.map((c: IColumnVisibility) => this.renderColumnVisibilityCheckbox(c))} + return
+ Visible:  {this.state.columnVisibility.map((c: IColumnVisibility) => this.renderColumnVisibilityCheckbox(c))}
; }; private renderColumnVisibilityCheckbox(props: IColumnVisibility) { return
- - + +
; } From 88322b511091be042f29b5bd492e26b1705f5acb Mon Sep 17 00:00:00 2001 From: Collin Barrett Date: Sun, 9 Sep 2018 17:55:36 -0500 Subject: [PATCH 3/4] add dynamic show props on columns ref #336 --- .../ClientApp/components/Home.tsx | 77 ++++++++++++------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/src/FilterLists.Web/ClientApp/components/Home.tsx b/src/FilterLists.Web/ClientApp/components/Home.tsx index aed99e46b..88a6a426a 100644 --- a/src/FilterLists.Web/ClientApp/components/Home.tsx +++ b/src/FilterLists.Web/ClientApp/components/Home.tsx @@ -19,6 +19,15 @@ interface IHomeState { pageSize: number; } +const columnVisibilityDefaults = [ + { column: "Name", visible: true }, + { column: "Software", visible: true }, + { column: "Tags", visible: true }, + { column: "Languages", visible: true }, + { column: "Updated Date", visible: true }, + { column: "Details", visible: true } +]; + export class Home extends React.Component, IHomeState> { constructor(props: any) { super(props); @@ -31,14 +40,7 @@ export class Home extends React.Component, IHomeState> { loadingSoftware: true, languages: [], loadingLanguages: true, - columnVisibility: [ - { column: "Name", visible: true }, - { column: "Software", visible: true }, - { column: "Tags", visible: true }, - { column: "Languages", visible: true }, - { column: "Updated Date", visible: true }, - { column: "Details", visible: true } - ], + columnVisibility: columnVisibilityDefaults, pageSize: 20 }; this.updatePageSize = this.updatePageSize.bind(this); @@ -112,19 +114,6 @@ export class Home extends React.Component, IHomeState> {

; } - private renderColumnVisibilityCheckboxes() { - return
- Visible:  {this.state.columnVisibility.map((c: IColumnVisibility) => this.renderColumnVisibilityCheckbox(c))} -
; - }; - - private renderColumnVisibilityCheckbox(props: IColumnVisibility) { - return
- - -
; - } - private static renderFilterListsTable(state: IHomeState) { return , IHomeState> { .includes(filter.value.toUpperCase()), sortMethod: (a: any, b: any) => a.toUpperCase() > b.toUpperCase() ? 1 : -1, Cell: (cell: any) =>

{cell.value}

, - style: { overflow: "visible" } + style: { overflow: "visible" }, + show: state.columnVisibility.filter((c: IColumnVisibility) => { + return c.column === "Name"; + })[0].visible }, { Header: "Software Support", @@ -164,7 +156,10 @@ export class Home extends React.Component, IHomeState> { Cell: () => null, width: 250, headerClassName: "d-none d-md-block", - className: "d-none d-md-block" + className: "d-none d-md-block", + show: state.columnVisibility.filter((c: IColumnVisibility) => { + return c.column === "Software"; + })[0].visible }, { Header: "Tags", @@ -180,7 +175,10 @@ export class Home extends React.Component, IHomeState> { }} title={e.description}>{e.name})}
, width: 200, headerClassName: "d-none d-md-block", - className: "d-none d-md-block" + className: "d-none d-md-block", + show: state.columnVisibility.filter((c: IColumnVisibility) => { + return c.column === "Tags"; + })[0].visible }, { Header: "Languages", @@ -202,11 +200,15 @@ export class Home extends React.Component, IHomeState> { , sortable: false, Cell: (cell: any) =>
{cell.value.map( - (e: any) => {e.iso6391})}
, + (e: any) => {e.iso6391}) + }
, style: { whiteSpace: "inherit" }, width: 100, headerClassName: "d-none d-md-block", - className: "d-none d-md-block" + className: "d-none d-md-block", + show: state.columnVisibility.filter((c: IColumnVisibility) => { + return c.column === "Languages"; + })[0].visible }, { Header: "Updated", @@ -222,7 +224,10 @@ export class Home extends React.Component, IHomeState> { style: { whiteSpace: "inherit" }, width: 100, headerClassName: "d-none d-md-block", - className: "d-none d-md-block" + className: "d-none d-md-block", + show: state.columnVisibility.filter((c: IColumnVisibility) => { + return c.column === "Updated Date"; + })[0].visible }, { Header: "Details", @@ -242,7 +247,10 @@ export class Home extends React.Component, IHomeState> { }
, style: { textAlign: "center" }, - width: 90 + width: 90, + show: state.columnVisibility.filter((c: IColumnVisibility) => { + return c.column === "Details"; + })[0].visible } ]} SubComponent={(row: any) => { @@ -252,6 +260,19 @@ export class Home extends React.Component, IHomeState> { }} className="-striped -highlight"/>; } + + private renderColumnVisibilityCheckboxes() { + return
+ Visible:  {this.state.columnVisibility.map((c: IColumnVisibility) => this.renderColumnVisibilityCheckbox(c))} +
; + }; + + private renderColumnVisibilityCheckbox(props: IColumnVisibility) { + return
+ + +
; + } } interface ISoftwareDto { From b793e5180a2eb813ff3c5067590fa2901deba544 Mon Sep 17 00:00:00 2001 From: Collin Barrett Date: Sun, 9 Sep 2018 19:22:50 -0500 Subject: [PATCH 4/4] it works! closes #336 --- .../ClientApp/components/Home.tsx | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/FilterLists.Web/ClientApp/components/Home.tsx b/src/FilterLists.Web/ClientApp/components/Home.tsx index 88a6a426a..e107909f9 100644 --- a/src/FilterLists.Web/ClientApp/components/Home.tsx +++ b/src/FilterLists.Web/ClientApp/components/Home.tsx @@ -269,10 +269,26 @@ export class Home extends React.Component, IHomeState> { private renderColumnVisibilityCheckbox(props: IColumnVisibility) { return
- + this.checkColumn(props)}/>
; } + + private checkColumn(props: IColumnVisibility) { + const columnVisibility = this.state.columnVisibility; + const index = this.findWithAttr(columnVisibility, "column", props.column); + columnVisibility[index].visible = !columnVisibility[index].visible; + this.forceUpdate(); + } + + private findWithAttr(array: any, attr: any, value: any) { + for (let i = 0; i < array.length; i += 1) { + if (array[i][attr] === value) { + return i; + } + } + return -1; + } } interface ISoftwareDto {