Skip to content

Commit 1890511

Browse files
authored
Merge pull request #121 from CivicDataLab/120-fix-access-model-issues
Fix access model issues
2 parents 638d458 + 1add535 commit 1890511

3 files changed

Lines changed: 49 additions & 17 deletions

File tree

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -257,13 +257,15 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
257257

258258
handleSave({ ...accessModelData, resources: updatedResources });
259259
};
260-
261260
const handleSelectAll = () => {
262261
const allResources =
263262
data?.datasetResources.map((resource: any) => ({
264263
label: resource.name,
265264
value: resource.id,
266-
schema: resource.schema,
265+
schema: resource.schema.map((field: any) => ({
266+
label: field.fieldName,
267+
value: field.id.toString(), // Ensure ID is a string for Combobox
268+
})),
267269
})) || [];
268270

269271
setSelectedFields(allResources);
@@ -272,15 +274,16 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
272274

273275
const updatedResources = allResources.map((resource: any) => ({
274276
resource: resource.value,
275-
fields: resource.schema.map((option: any) => option.value),
277+
fields: resource.schema.map((option: any) => parseInt(option.value, 10)), // Convert to integer
276278
}));
277279

278-
setAccessModelData((prevData) => ({
279-
...prevData,
280+
const updatedData = {
281+
...accessModelData,
280282
resources: updatedResources,
281-
}));
283+
};
282284

283-
handleSave({ ...accessModelData, resources: updatedResources });
285+
setAccessModelData(updatedData);
286+
handleSave(updatedData);
284287
};
285288

286289
const { mutate, isLoading: editMutationLoading } = useMutation(
@@ -460,10 +463,11 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
460463
<div className="flex items-end gap-6">
461464
<div className={cn(' w-3/4', styles.combobox)}>
462465
<Combobox
463-
displaySelected
466+
// displaySelected
464467
label={'Select Fields of the Resource'}
465468
list={availableResources}
466469
selectedValue={selectedFields}
470+
placeholder={`${selectedResources.length} resources selected`}
467471
name={''}
468472
helpText={
469473
'Only Resources added will be part of this Access Type. After adding select the Fields and Rows to be included'

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=" my-6 flex items-center justify-between px-3 py-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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export function EditLayout({ children, params }: LayoutProps) {
132132
organization={routerParams.organizationId.toString()}
133133
/>
134134
</div>
135-
<div className="bg-surface shadow-card border-l-divider rounded-tl-none flex-grow py-4">
135+
<div className="bg-surface shadow-card border-l-divider rounded-tl-none my-6 flex-grow">
136136
{children}
137137
</div>
138138
</div>

0 commit comments

Comments
 (0)