From 5df9395003dde9b9589ee6d30a64fc0435d90ac3 Mon Sep 17 00:00:00 2001 From: vicky-primathon <67091118+vicky-primathon@users.noreply.github.com> Date: Thu, 2 Jul 2020 11:56:01 +0530 Subject: [PATCH] Created header for common functionalities in Table Widget (#12) Co-authored-by: Arpit Mohan --- .../appsmith/ReactTableComponent.tsx | 7 ++ .../designSystems/appsmith/Table.tsx | 83 +++----------- .../designSystems/appsmith/TableHeader.tsx | 90 ++++++++++++++++ .../appsmith/TableStyledWrappers.tsx | 7 ++ app/client/src/widgets/TableWidget.tsx | 101 +++++++++--------- 5 files changed, 170 insertions(+), 118 deletions(-) create mode 100644 app/client/src/components/designSystems/appsmith/TableHeader.tsx diff --git a/app/client/src/components/designSystems/appsmith/ReactTableComponent.tsx b/app/client/src/components/designSystems/appsmith/ReactTableComponent.tsx index 8524aaf6d8..dcac5b03a9 100644 --- a/app/client/src/components/designSystems/appsmith/ReactTableComponent.tsx +++ b/app/client/src/components/designSystems/appsmith/ReactTableComponent.tsx @@ -11,6 +11,7 @@ interface ReactTableComponentState { pageSize: number; action: string; columnName: string; + isLoading: boolean; } export interface ReactTableColumnProps { @@ -45,6 +46,7 @@ interface ReactTableComponentProps { widgetId: string; isDisabled?: boolean; isVisible?: boolean; + isLoading: boolean; renderMode: RenderMode; width: number; height: number; @@ -91,6 +93,7 @@ export class ReactTableComponent extends React.Component< action: "", columnName: "", pageSize: props.pageSize, + isLoading: props.isLoading, }; } @@ -102,6 +105,9 @@ export class ReactTableComponent extends React.Component< if (this.props.pageSize !== prevProps.pageSize) { this.setState({ pageSize: this.props.pageSize }); } + if (this.props.isLoading !== prevProps.isLoading) { + this.setState({ isLoading: this.props.isLoading }); + } this.mountEvents(); } @@ -461,6 +467,7 @@ export class ReactTableComponent extends React.Component< const columns = this.getTableColumns(); return ( void; @@ -100,7 +99,17 @@ export const Table = (props: TableProps) => { height={props.height} id={`table${props.widgetId}`} > -
+ +
{headerGroups.map((headerGroup: any, index: number) => ( @@ -220,66 +229,6 @@ export const Table = (props: TableProps) => {
- {props.serverSidePaginationEnabled && ( - - { - props.prevPageClick(); - }} - > - - - - {props.pageNo + 1} - - { - props.nextPageClick(); - }} - > - - - - )} - {!props.serverSidePaginationEnabled && ( - - { - const pageNo = currentPageIndex > 0 ? currentPageIndex - 1 : 0; - props.updatePageNo(pageNo + 1); - }} - > - - - {pageOptions.map((pageNumber: number, index: number) => { - return ( - { - props.updatePageNo(pageNumber + 1); - }} - className="page-item" - > - {index + 1} - - ); - })} - { - const pageNo = - currentPageIndex < pageCount - 1 ? currentPageIndex + 1 : 0; - props.updatePageNo(pageNo + 1); - }} - > - - - - )} ); }; diff --git a/app/client/src/components/designSystems/appsmith/TableHeader.tsx b/app/client/src/components/designSystems/appsmith/TableHeader.tsx new file mode 100644 index 0000000000..729e27952b --- /dev/null +++ b/app/client/src/components/designSystems/appsmith/TableHeader.tsx @@ -0,0 +1,90 @@ +import React from "react"; +import { + PaginationWrapper, + TableHeaderWrapper, + PaginationItemWrapper, +} from "./TableStyledWrappers"; +import { Icon } from "@blueprintjs/core"; + +interface TableHeaderProps { + updatePageNo: Function; + nextPageClick: () => void; + prevPageClick: () => void; + pageNo: number; + pageCount: number; + currentPageIndex: number; + pageOptions: number[]; + serverSidePaginationEnabled: boolean; +} + +const TableHeader = (props: TableHeaderProps) => { + return ( + + {props.serverSidePaginationEnabled && ( + + { + props.prevPageClick(); + }} + > + + + + {props.pageNo + 1} + + { + props.nextPageClick(); + }} + > + + + + )} + {!props.serverSidePaginationEnabled && ( + + { + const pageNo = + props.currentPageIndex > 0 ? props.currentPageIndex - 1 : 0; + props.updatePageNo(pageNo + 1); + }} + > + + + {props.pageOptions.map((pageNumber: number, index: number) => { + return ( + { + props.updatePageNo(pageNumber + 1); + }} + className="page-item" + > + {index + 1} + + ); + })} + { + const pageNo = + props.currentPageIndex < props.pageCount - 1 + ? props.currentPageIndex + 1 + : 0; + props.updatePageNo(pageNo + 1); + }} + > + + + + )} + + ); +}; + +export default TableHeader; diff --git a/app/client/src/components/designSystems/appsmith/TableStyledWrappers.tsx b/app/client/src/components/designSystems/appsmith/TableStyledWrappers.tsx index 5e00de266f..7c669bdb44 100644 --- a/app/client/src/components/designSystems/appsmith/TableStyledWrappers.tsx +++ b/app/client/src/components/designSystems/appsmith/TableStyledWrappers.tsx @@ -255,3 +255,10 @@ export const CellWrapper = styled.div<{ isHidden: boolean }>` } } `; + +export const TableHeaderWrapper = styled.div` + display: flex; + align-items: center; + width: 100%; + border-bottom: 1px solid ${Colors.GEYSER_LIGHT}; +`; diff --git a/app/client/src/widgets/TableWidget.tsx b/app/client/src/widgets/TableWidget.tsx index fee45055f9..29ab24207f 100644 --- a/app/client/src/widgets/TableWidget.tsx +++ b/app/client/src/widgets/TableWidget.tsx @@ -109,57 +109,56 @@ class TableWidget extends BaseWidget { // /* return ( }> -
- { - super.updateWidgetMetaProperty("pageNo", pageNo); - }} - updateHiddenColumns={(hiddenColumns?: string[]) => { - super.updateWidgetProperty("hiddenColumns", hiddenColumns); - }} - updateColumnType={(columnTypeMap: { - [key: string]: { type: string; format: string }; - }) => { - super.updateWidgetProperty("columnTypeMap", columnTypeMap); - }} - updateColumnName={(columnNameMap: { [key: string]: string }) => { - super.updateWidgetProperty("columnNameMap", columnNameMap); - }} - handleResizeColumn={(columnSizeMap: { [key: string]: number }) => { - super.updateWidgetProperty("columnSizeMap", columnSizeMap); - }} - handleReorderColumn={(columnOrder: string[]) => { - super.updateWidgetProperty("columnOrder", columnOrder); - }} - columnSizeMap={this.props.columnSizeMap} - resetSelectedRowIndex={this.resetSelectedRowIndex} - disableDrag={(disable: boolean) => { - this.disableDrag(disable); - }} - /> -
+ { + super.updateWidgetMetaProperty("pageNo", pageNo); + }} + updateHiddenColumns={(hiddenColumns?: string[]) => { + super.updateWidgetProperty("hiddenColumns", hiddenColumns); + }} + updateColumnType={(columnTypeMap: { + [key: string]: { type: string; format: string }; + }) => { + super.updateWidgetProperty("columnTypeMap", columnTypeMap); + }} + updateColumnName={(columnNameMap: { [key: string]: string }) => { + super.updateWidgetProperty("columnNameMap", columnNameMap); + }} + handleResizeColumn={(columnSizeMap: { [key: string]: number }) => { + super.updateWidgetProperty("columnSizeMap", columnSizeMap); + }} + handleReorderColumn={(columnOrder: string[]) => { + super.updateWidgetProperty("columnOrder", columnOrder); + }} + columnSizeMap={this.props.columnSizeMap} + resetSelectedRowIndex={this.resetSelectedRowIndex} + disableDrag={(disable: boolean) => { + this.disableDrag(disable); + }} + />
); // */