Skip to content

Commit 9afc3b9

Browse files
committed
refactor functionality
1 parent 5f4fe5f commit 9afc3b9

1 file changed

Lines changed: 57 additions & 53 deletions

File tree

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

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

Lines changed: 57 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { AccessTypes, EditAccessModelInput } from '@/gql/generated/graphql';
55
import { useMutation, useQuery } from '@tanstack/react-query';
66
import {
77
Button,
8+
Combobox,
89
Divider,
910
Icon,
1011
Select,
@@ -130,14 +131,23 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
130131
});
131132
const [selectedResources, setSelectedResources] = useState<string[]>([]);
132133
const [showSelectAll, setShowSelectAll] = useState(false);
133-
const [availableResources, setAvailableResources] = useState<any[]>([]);
134+
135+
const [availableResources, setAvailableResources] = useState<
136+
{ label: string; value: string; schema: [] }[]
137+
>([]);
138+
139+
const [selectedFields, setSelectedFields] = useState<
140+
{ label: string; value: string }[]
141+
>([]);
134142

135143
useEffect(() => {
136144
if (data) {
137145
setAvailableResources(
138-
data.datasetResources.filter(
139-
(resource: any) => !selectedResources.includes(resource.id)
140-
)
146+
data.datasetResources.map((field: any) => ({
147+
label: field.name,
148+
value: field.id,
149+
schema: field.schema,
150+
}))
141151
);
142152
}
143153
}, [data, selectedResources]);
@@ -147,43 +157,54 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
147157
refetch();
148158
setAccessModelData({
149159
dataset: params.id,
150-
name: accessModelDetails.accessModel.name,
151-
description: accessModelDetails.accessModel.description,
152-
type: accessModelDetails.accessModel.type,
160+
name: accessModelDetails?.accessModel.name,
161+
description: accessModelDetails?.accessModel.description,
162+
type: accessModelDetails?.accessModel.type,
153163
resources: [],
154-
accessModelId: accessModelDetails.accessModel.id,
164+
accessModelId: accessModelDetails?.accessModel.id,
155165
});
156166
}
157167
}, [accessModelId]);
158168

159169
const [resId, setResId] = useState('');
160170

161171
// Inside handleAddResource function
162-
const handleAddResource = (resourceId: string) => {
163-
if (resourceId !== '') {
164-
setSelectedResources((prev) => [...prev, resourceId]);
165-
setResId('');
166-
setAvailableResources((prev) =>
167-
prev.filter((item) => item.id !== resourceId)
168-
); // Filter out the selected resource
169-
}
172+
const handleAddResource = (resourceId: any) => {
173+
setSelectedResources(resourceId);
174+
setResId('');
175+
setAvailableResources(resourceId); // Filter out the selected resource
176+
setSelectedFields(resourceId);
170177
};
171178

172-
const handleRemoveResource = (resourceId: string) => {
173-
setSelectedResources((prev) => prev.filter((id) => id !== resourceId));
174-
setResId('');
179+
const handleRemoveResource = (resourceId: any) => {
180+
// Filter out the selected resource from selectedResources
181+
setSelectedResources((prevResources) =>
182+
prevResources.filter((resource: any) => resource.value !== resourceId)
183+
);
184+
185+
// Filter out the selected fields associated with the removed resource
186+
setSelectedFields((prevFields) =>
187+
prevFields.filter((field) => field.value.split('.')[0] !== resourceId)
188+
);
189+
// Remove the corresponding resource from accessModelData.resources
175190
setAccessModelData((prevData: any) => ({
176191
...prevData,
177192
resources: prevData.resources.filter(
178-
(resource: any) => resource.resource !== resourceId
193+
(resource: any) => resource.id !== resourceId
179194
),
180195
}));
181196
};
182197

183198
const handleSelectAll = () => {
184-
const allResourceIds =
185-
data?.datasetResources.map((resource: any) => resource.id) || [];
186-
setSelectedResources(allResourceIds);
199+
const allResources =
200+
data?.datasetResources.map((resource: any) => ({
201+
label: resource.name,
202+
value: resource.id,
203+
schema: resource.schema,
204+
})) || [];
205+
setSelectedFields(allResources);
206+
207+
setSelectedResources(allResources);
187208
setShowSelectAll(false);
188209
};
189210

@@ -202,8 +223,6 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
202223

203224
const [isSheetOpen, setIsSheetOpen] = useState(false);
204225

205-
console.log(accessModelDetails);
206-
207226
return (
208227
<div className="rounded-2 border-2 border-solid border-baseGraySlateSolid6 px-6 py-8">
209228
<div className="mb-6 flex flex-wrap items-center justify-between gap-6">
@@ -346,34 +365,19 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
346365
</div>
347366

348367
<div className="flex flex-wrap items-center gap-5">
349-
<Select
350-
name={'resourceSelection'}
351-
className="w-4/5"
352-
options={
353-
availableResources.length > 0
354-
? [
355-
{ label: 'Select', value: '' },
356-
...availableResources.map((item) => ({
357-
label: item.name,
358-
value: item.id,
359-
})),
360-
]
361-
: [{ label: 'Select', value: '' }] // Render only 'Select' when no resources are available
362-
}
363-
label={'Select the Resources to be added to the Access Type'}
364-
onChange={(e) => setResId(e)}
365-
required
366-
value={resId}
367-
helpText="Only Resources added will be part of this Access Type. After adding select the Fields and Rows to be included"
368-
/>
368+
<div className="w-full">
369+
<Combobox
370+
displaySelected
371+
label={'Select Fields of the Resource'}
372+
list={availableResources}
373+
selectedValue={selectedFields}
374+
name={''}
375+
helpText={'Use the dropdown to add specific fields'}
376+
onChange={(e: any) => handleAddResource(e)}
377+
/>
378+
</div>
369379

370380
<div className="flex h-fit w-fit items-center gap-5">
371-
<Button onClick={() => handleAddResource(resId)} kind="secondary">
372-
<span className="flex items-center gap-1">
373-
<Text>Add</Text>
374-
<Icon source={Icons.plus} size={24} />
375-
</span>
376-
</Button>
377381
<Button onClick={handleSelectAll} kind="secondary">
378382
<span className="flex items-center gap-1">
379383
<Text>Select All</Text>
@@ -382,9 +386,9 @@ const AccessModelForm: React.FC<AccessModelProps> = ({
382386
</Button>
383387
</div>
384388
</div>
385-
{selectedResources.map((resourceId, index) => {
389+
{selectedResources?.map((resourceId: any, index) => {
386390
const selectedResource = data?.datasetResources.find(
387-
(resource: any) => resource.id === resourceId
391+
(resource: any) => resource.id === resourceId.value
388392
);
389393

390394
if (!selectedResource || !selectedResource.schema) {

0 commit comments

Comments
 (0)