import React, { useState } from "react";
import {
Button,
Divider,
Form,
Heading,
Table,
TableHead,
TableHeader,
TableRow,
TableBody,
TableCell,
Flex,
SearchInput,
hubspot,
} from "@hubspot/ui-extensions";
hubspot.extend(({ actions }) => <Extension sendAlert={actions.addAlert} />);
const Extension = ({ sendAlert }) => {
const tableData = [
{ name: "Mark Scout", role: "Team Lead (MDR)" },
{ name: "Dylan George", role: "Macrodata Refiner" },
{ name: "Irving Bailiff", role: "Senior Refiner" },
{ name: "Helly Riggs", role: "New Hire" },
{ name: "Burt Goodman", role: "Department Head (O&D)" },
];
const [filteredData, setFilteredData] = useState(tableData);
const handleSubmit = e => {
const searchTerm = e.targetValue.searchInput;
sendAlert({ message: `You've searched for: ${searchTerm}` });
};
const searchTable = e => {
const searchTerm = e.targetValue.searchInput;
// Filter the table data based on search term
const filtered = tableData.filter(
item =>
item.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
item.role.toLowerCase().includes(searchTerm.toLowerCase())
);
setFilteredData(filtered);
sendAlert({
message: `Searched for: ${searchTerm}. Found ${filtered.length} result(s).`,
});
};
return (
<>
<Form onSubmit={searchTable}>
<Flex direction="column" gap="sm">
<Heading>Searchable table</Heading>
<Flex direction="row" gap="sm" alignSelf="end" align="end" justify="end">
<SearchInput name="searchInput" placeholder="Search Table" />
<Button type="submit">Search</Button>
</Flex>
<Table bordered={true} paginated={true} pageCount="5" limit={10}>
<TableHead>
<TableRow>
<TableHeader width="min">Name</TableHeader>
<TableHeader width="min">Role</TableHeader>
</TableRow>
</TableHead>
<TableBody>
{filteredData.map((item, index) => (
<TableRow key={index}>
<TableCell width="min">{item.name}</TableCell>
<TableCell width="min">{item.role}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</Flex>
</Form>
</>
);
};