From 2e11075fa750759b205c3058b4f426c5545b2769 Mon Sep 17 00:00:00 2001 From: Harshith Mullapudi Date: Mon, 25 Apr 2022 14:41:55 +0530 Subject: [PATCH 1/2] feat: added sorting for name, connector and lastsync field --- .../EntityTable/ConnectionTable.tsx | 20 ++++- .../EntityTable/ImplementationTable.tsx | 85 +++++++++++++++++-- 2 files changed, 95 insertions(+), 10 deletions(-) diff --git a/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx b/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx index 573c6dca7b4c..2e50c090ff89 100644 --- a/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx +++ b/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx @@ -57,7 +57,12 @@ const ConnectionTable: React.FC = ({ data, entity, onClickRow, onChangeS const sortData = useCallback( (a, b) => { - const result = a[`${sortBy}Name`].toLowerCase().localeCompare(b[`${sortBy}Name`].toLowerCase()); + let result; + if (sortBy === "lastSync") { + result = b[sortBy] - a[sortBy]; + } else { + result = a[`${sortBy}Name`].toLowerCase().localeCompare(b[`${sortBy}Name`].toLowerCase()); + } if (sortOrder === SortOrderEnum.DESC) { return -1 * result; @@ -69,7 +74,7 @@ const ConnectionTable: React.FC = ({ data, entity, onClickRow, onChangeS ); const sortingData = React.useMemo(() => data.sort(sortData), [sortData, data]); - + console.log(sortingData); const columns = React.useMemo( () => [ { @@ -129,7 +134,16 @@ const ConnectionTable: React.FC = ({ data, entity, onClickRow, onChangeS ), }, { - Header: , + Header: ( + <> + + onSortClick("lastSync")} + /> + + ), accessor: "lastSync", Cell: ({ cell, row }: CellProps) => ( diff --git a/airbyte-webapp/src/components/EntityTable/ImplementationTable.tsx b/airbyte-webapp/src/components/EntityTable/ImplementationTable.tsx index a914ae87a848..1011a33fa328 100644 --- a/airbyte-webapp/src/components/EntityTable/ImplementationTable.tsx +++ b/airbyte-webapp/src/components/EntityTable/ImplementationTable.tsx @@ -1,16 +1,20 @@ -import React from "react"; +import queryString from "query-string"; +import React, { useCallback } from "react"; import { FormattedMessage } from "react-intl"; import { CellProps } from "react-table"; import styled from "styled-components"; import Table from "components/Table"; +import useRouter from "hooks/useRouter"; + import AllConnectionsStatusCell from "./components/AllConnectionsStatusCell"; import ConnectEntitiesCell from "./components/ConnectEntitiesCell"; import ConnectorCell from "./components/ConnectorCell"; import LastSyncCell from "./components/LastSyncCell"; import NameCell from "./components/NameCell"; -import { EntityTableDataItem } from "./types"; +import SortButton from "./components/SortButton"; +import { EntityTableDataItem, SortOrderEnum } from "./types"; const Content = styled.div` margin: 0 32px 0 27px; @@ -23,10 +27,59 @@ type IProps = { }; const ImplementationTable: React.FC = ({ data, entity, onClickRow }) => { + const { query, push } = useRouter(); + const sortBy = query.sortBy || "entity"; + const sortOrder = query.order || SortOrderEnum.ASC; + + const onSortClick = useCallback( + (field: string) => { + const order = + sortBy !== field ? SortOrderEnum.ASC : sortOrder === SortOrderEnum.ASC ? SortOrderEnum.DESC : SortOrderEnum.ASC; + push({ + search: queryString.stringify( + { + sortBy: field, + order: order, + }, + { skipNull: true } + ), + }); + }, + [push, sortBy, sortOrder] + ); + + const sortData = useCallback( + (a, b) => { + let result; + if (sortBy === "lastSync") { + result = b[sortBy] - a[sortBy]; + } else { + result = a[`${sortBy}Name`].toLowerCase().localeCompare(b[`${sortBy}Name`].toLowerCase()); + } + + if (sortOrder === SortOrderEnum.DESC) { + return -1 * result; + } + + return result; + }, + [sortBy, sortOrder] + ); + + const sortingData = React.useMemo(() => data.sort(sortData), [sortData, data]); const columns = React.useMemo( () => [ { - Header: , + Header: ( + <> + + onSortClick("entity")} + /> + + ), headerHighlighted: true, accessor: "entityName", customWidth: 40, @@ -35,7 +88,16 @@ const ImplementationTable: React.FC = ({ data, entity, onClickRow }) => ), }, { - Header: , + Header: ( + <> + + onSortClick("connector")} + /> + + ), accessor: "connectorName", Cell: ({ cell, row }: CellProps) => ( @@ -49,7 +111,16 @@ const ImplementationTable: React.FC = ({ data, entity, onClickRow }) => ), }, { - Header: , + Header: ( + <> + + onSortClick("lastSync")} + /> + + ), accessor: "lastSync", Cell: ({ cell, row }: CellProps) => ( @@ -62,12 +133,12 @@ const ImplementationTable: React.FC = ({ data, entity, onClickRow }) => Cell: ({ cell }: CellProps) => , }, ], - [entity] + [entity, onSortClick, sortBy, sortOrder] ); return ( - +
); }; From bf5212251a3d3c37b7ad8b59b6faa705a9a9a7c7 Mon Sep 17 00:00:00 2001 From: Harshith Mullapudi Date: Mon, 25 Apr 2022 14:43:37 +0530 Subject: [PATCH 2/2] fix: remove console.log --- airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx b/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx index 2e50c090ff89..fabca8270de5 100644 --- a/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx +++ b/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx @@ -74,7 +74,7 @@ const ConnectionTable: React.FC = ({ data, entity, onClickRow, onChangeS ); const sortingData = React.useMemo(() => data.sort(sortData), [sortData, data]); - console.log(sortingData); + const columns = React.useMemo( () => [ {