1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/src/renderer/components/list/list.tsx
Alex Andreev cd2215097a Using new columns format in Pods list
Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
2022-08-04 11:56:15 +03:00

58 lines
1.6 KiB
TypeScript

/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import styles from "./list.module.scss";
import themeStyles from "./table-theme.module.scss";
import React, { useState } from "react";
import { SearchInput } from "../input";
import type { TableOptions } from '@tanstack/react-table'
import { getCoreRowModel } from '@tanstack/react-table'
import { Table } from "../table/react-table";
export type SearchFilter<T> = (item: T) => string;
export interface ListProps<T> extends TableOptions<T> {
filters: SearchFilter<T>[];
title?: React.ReactNode;
}
export function List<T>({ columns, data, title, filters }: ListProps<T>) {
const [search, setSearch] = useState<string>("");
const query = search.toLowerCase();
const filteredData = data.filter((item, index) => (
filters.some(getText => String(getText(data[index])).toLowerCase().includes(query))
));
return (
<>
<div className="flex align-center justify-between mb-6">
<div className="mr-6">
{title}
</div>
<div>
<SearchInput
value={search}
theme="round-black"
onChange={setSearch}
className={styles.searchInput}
/>
</div>
</div>
<Table
columns={columns}
data={filteredData}
getCoreRowModel={getCoreRowModel()}
className={themeStyles.tableTheme}
/>
{filteredData.length == 0 && (
<div className={styles.notFound}>No data found</div>
)}
</>
);
}