Skip to content

Commit

Permalink
feat: added sorting for name, connector and lastsync field (#12302)
Browse files Browse the repository at this point in the history
* feat: added sorting for name, connector and lastsync field

* fix: remove console.log
  • Loading branch information
harshithmullapudi authored May 12, 2022
1 parent 087f389 commit cbcbab4
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 9 deletions.
18 changes: 16 additions & 2 deletions airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,12 @@ const ConnectionTable: React.FC<IProps> = ({ 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;
Expand Down Expand Up @@ -129,7 +134,16 @@ const ConnectionTable: React.FC<IProps> = ({ data, entity, onClickRow, onChangeS
),
},
{
Header: <FormattedMessage id="tables.lastSync" />,
Header: (
<>
<FormattedMessage id="tables.lastSync" />
<SortButton
wasActive={sortBy === "lastSync"}
lowToLarge={sortOrder === SortOrderEnum.ASC}
onClick={() => onSortClick("lastSync")}
/>
</>
),
accessor: "lastSync",
Cell: ({ cell, row }: CellProps<ITableDataItem>) => (
<LastSyncCell timeInSecond={cell.value} enabled={row.original.enabled} />
Expand Down
85 changes: 78 additions & 7 deletions airbyte-webapp/src/components/EntityTable/ImplementationTable.tsx
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -23,10 +27,59 @@ type IProps = {
};

const ImplementationTable: React.FC<IProps> = ({ 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: <FormattedMessage id="tables.name" />,
Header: (
<>
<FormattedMessage id="tables.name" />
<SortButton
wasActive={sortBy === "entity"}
lowToLarge={sortOrder === SortOrderEnum.ASC}
onClick={() => onSortClick("entity")}
/>
</>
),
headerHighlighted: true,
accessor: "entityName",
customWidth: 40,
Expand All @@ -35,7 +88,16 @@ const ImplementationTable: React.FC<IProps> = ({ data, entity, onClickRow }) =>
),
},
{
Header: <FormattedMessage id="tables.connector" />,
Header: (
<>
<FormattedMessage id="tables.connector" />
<SortButton
wasActive={sortBy === "connector"}
lowToLarge={sortOrder === SortOrderEnum.ASC}
onClick={() => onSortClick("connector")}
/>
</>
),
accessor: "connectorName",
Cell: ({ cell, row }: CellProps<EntityTableDataItem>) => (
<ConnectorCell value={cell.value} enabled={row.original.enabled} img={row.original.connectorIcon} />
Expand All @@ -49,7 +111,16 @@ const ImplementationTable: React.FC<IProps> = ({ data, entity, onClickRow }) =>
),
},
{
Header: <FormattedMessage id="tables.lastSync" />,
Header: (
<>
<FormattedMessage id="tables.lastSync" />
<SortButton
wasActive={sortBy === "lastSync"}
lowToLarge={sortOrder === SortOrderEnum.ASC}
onClick={() => onSortClick("lastSync")}
/>
</>
),
accessor: "lastSync",
Cell: ({ cell, row }: CellProps<EntityTableDataItem>) => (
<LastSyncCell timeInSecond={cell.value} enabled={row.original.enabled} />
Expand All @@ -62,12 +133,12 @@ const ImplementationTable: React.FC<IProps> = ({ data, entity, onClickRow }) =>
Cell: ({ cell }: CellProps<EntityTableDataItem>) => <AllConnectionsStatusCell connectEntities={cell.value} />,
},
],
[entity]
[entity, onSortClick, sortBy, sortOrder]
);

return (
<Content>
<Table columns={columns} data={data} onClickRow={onClickRow} erroredRows />
<Table columns={columns} data={sortingData} onClickRow={onClickRow} erroredRows />
</Content>
);
};
Expand Down

0 comments on commit cbcbab4

Please sign in to comment.