Skip to content

Commit 1add535

Browse files
committed
add search in access model listing
1 parent a687338 commit 1add535

1 file changed

Lines changed: 36 additions & 8 deletions

File tree

  • app/[locale]/dashboard/organization/[organizationId]/dataset/[id]/edit/components

app/[locale]/dashboard/organization/[organizationId]/dataset/[id]/edit/components/AccessModelList.tsx

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
import { UUID } from 'crypto';
2-
import React, { useEffect } from 'react';
2+
import React, { useEffect, useState } from 'react';
33
import Link from 'next/link';
44
import { useParams } from 'next/navigation';
55
import { graphql } from '@/gql';
66
import { useMutation, useQuery } from '@tanstack/react-query';
7-
import { Button, DataTable, IconButton, Spinner, Text, toast } from 'opub-ui';
7+
import {
8+
Button,
9+
DataTable,
10+
IconButton,
11+
SearchInput,
12+
Spinner,
13+
Text,
14+
toast,
15+
} from 'opub-ui';
816

917
import { GraphQL } from '@/lib/api';
1018
import { formatDate, toTitleCase } from '@/lib/utils';
@@ -54,11 +62,16 @@ const AccessModelList: React.FC<AccessModelListProps> = ({
5462
})
5563
);
5664

65+
const [filteredRows, setFilteredRows] = useState<any[]>([]);
66+
5767
useEffect(() => {
5868
refetch();
59-
}, [list]);
69+
if (data?.accessModelResources) {
70+
setFilteredRows(data.accessModelResources);
71+
}
72+
}, [data, list]);
6073

61-
const { mutate } = useMutation(
74+
const { mutate, isLoading: deleteLoading } = useMutation(
6275
(data: { accessModelId: UUID }) => GraphQL(deleteAccessModel, data),
6376
{
6477
onSuccess: () => {
@@ -126,24 +139,39 @@ const AccessModelList: React.FC<AccessModelListProps> = ({
126139
}));
127140
};
128141

142+
const handleSearchChange = (e: string) => {
143+
const searchTerm = e.toLowerCase();
144+
const filtered = data?.accessModelResources.filter((row: any) =>
145+
row.name.toLowerCase().includes(searchTerm)
146+
);
147+
setFilteredRows(filtered || []);
148+
};
149+
129150
return (
130151
<div>
131-
{!data || isLoading ? (
152+
{!data || isLoading || deleteLoading ? (
132153
<div className=" mt-8 flex justify-center">
133154
<Spinner />
134155
</div>
135156
) : (
136157
<>
137-
<div className="flex items-center justify-between p-4">
158+
<div className=" my-6 flex flex-wrap items-center justify-between px-3 py-4">
138159
<Text>
139-
Showing {data.accessModelResources?.length} Access Types
160+
Showing {data?.accessModelResources?.length || 0} Access Types
140161
</Text>
162+
<SearchInput
163+
className="w-1/2 "
164+
placeholder="Search in Resources"
165+
label="Search"
166+
name="Search"
167+
onChange={(e) => handleSearchChange(e)}
168+
/>
141169
<Button onClick={(e) => setList(false)}>Add Access Type</Button>
142170
</div>
143171

144172
<DataTable
145173
columns={generateColumnData()}
146-
rows={generateTableData(data.accessModelResources)}
174+
rows={generateTableData(filteredRows)}
147175
hideSelection
148176
truncate
149177
hideFooter

0 commit comments

Comments
 (0)