Skip to content

Commit 7f5ce03

Browse files
committed
feat(EditResource): enhance resource editing with improved file handling and UI updates
1 parent 27c8143 commit 7f5ce03

File tree

1 file changed

+90
-116
lines changed
  • app/[locale]/dashboard/[entityType]/[entitySlug]/dataset/[id]/edit/resources/components

1 file changed

+90
-116
lines changed

app/[locale]/dashboard/[entityType]/[entitySlug]/dataset/[id]/edit/resources/components/EditResource.tsx

Lines changed: 90 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState } from 'react';
1+
import React, { useEffect, useState } from 'react';
22
import { useParams } from 'next/navigation';
33
import {
44
CreateFileResourceInput,
@@ -16,6 +16,7 @@ import {
1616
DropZone,
1717
Icon,
1818
Select,
19+
Sheet,
1920
Spinner,
2021
Text,
2122
TextField,
@@ -24,6 +25,7 @@ import {
2425

2526
import { GraphQL } from '@/lib/api';
2627
import { Icons } from '@/components/icons';
28+
import { useDatasetEditStatus } from '../../context';
2729
import { TListItem } from '../page-layout';
2830
import {
2931
createResourceFilesDoc,
@@ -32,6 +34,7 @@ import {
3234
updateResourceDoc,
3335
updateSchema,
3436
} from './query';
37+
import ResourceHeader from './ResourceHeader';
3538
import { ResourceSchema } from './ResourceSchema';
3639

3740
interface EditProps {
@@ -73,7 +76,8 @@ export const EditResource = ({ refetch, list }: EditProps) => {
7376
refetch();
7477
},
7578
onError: (err: any) => {
76-
console.log('Error ::: ', err);
79+
toast(err.message || String(err));
80+
setFile([]);
7781
},
7882
}
7983
);
@@ -158,6 +162,7 @@ export const EditResource = ({ refetch, list }: EditProps) => {
158162
},
159163
}
160164
);
165+
const [isSheetOpen, setIsSheetOpen] = useState(false);
161166

162167
const getResourceObject = (resourceId: string) => {
163168
return list.find((item: TListItem) => item.value === resourceId);
@@ -166,10 +171,8 @@ export const EditResource = ({ refetch, list }: EditProps) => {
166171
const [resourceName, setResourceName] = React.useState(
167172
getResourceObject(resourceId)?.label
168173
);
169-
const [resourceDesc, setResourceDesc] = React.useState(
170-
getResourceObject(resourceId)?.description
171-
);
172-
const [previewEnable, setPreviewEnable] = useState(true);
174+
175+
const [previewEnable, setPreviewEnable] = useState(false);
173176

174177
const [previewDetails, setPreviewDetails] = useState({
175178
startEntry: 0,
@@ -179,7 +182,6 @@ export const EditResource = ({ refetch, list }: EditProps) => {
179182

180183
React.useEffect(() => {
181184
setResourceName(getResourceObject(resourceId)?.label);
182-
setResourceDesc(getResourceObject(resourceId)?.description);
183185
setPreviewEnable(getResourceObject(resourceId)?.previewEnabled ?? true);
184186
setPreviewDetails({
185187
startEntry: getResourceObject(resourceId)?.previewDetails.startEntry ?? 0,
@@ -193,8 +195,7 @@ export const EditResource = ({ refetch, list }: EditProps) => {
193195

194196
const handleResourceChange = (e: any) => {
195197
setResourceId(e, { shallow: false });
196-
setResourceName(getResourceObject(e)?.label);
197-
setResourceDesc(getResourceObject(e)?.description);
198+
refetch();
198199
};
199200

200201
const [file, setFile] = React.useState<File[]>([]);
@@ -208,6 +209,7 @@ export const EditResource = ({ refetch, list }: EditProps) => {
208209
},
209210
});
210211
setFile((files) => [...files, ...acceptedFiles]);
212+
setIsSheetOpen(false);
211213
},
212214
[]
213215
);
@@ -264,16 +266,18 @@ export const EditResource = ({ refetch, list }: EditProps) => {
264266
}));
265267
}
266268
};
269+
270+
console.log(previewEnable);
271+
267272
const saveResource = () => {
268273
updateResourceMutation.mutate({
269274
fileResourceInput: {
270275
id: resourceId,
271-
description: resourceDesc || '',
272276
name: resourceName || '',
273-
previewEnabled: previewEnable,
277+
previewEnabled: true,
274278
previewDetails: {
275-
startEntry: +previewDetails.startEntry || 0,
276-
endEntry: +previewDetails.endEntry || 0,
279+
startEntry: 5,
280+
endEntry: 5,
277281
isAllEntries: previewDetails.isAllEntries,
278282
},
279283
},
@@ -293,123 +297,93 @@ export const EditResource = ({ refetch, list }: EditProps) => {
293297
}
294298
};
295299

300+
const { setStatus } = useDatasetEditStatus();
301+
302+
useEffect(() => {
303+
setStatus(updateResourceMutation.isLoading ? 'loading' : 'success'); // update based on mutation state
304+
}, [updateResourceMutation.isLoading]);
305+
296306
return (
297-
<div className=" bg-basePureWhite px-6 py-8">
298-
<div className="flex items-center gap-6">
299-
<Text>Resource Name :</Text>
300-
<div className=" w-3/6">
301-
<Select
302-
label="Resource List"
303-
labelHidden
304-
options={list}
305-
value={getResourceObject(resourceId)?.value}
306-
onChange={(e) => {
307-
handleResourceChange(e);
308-
}}
309-
name="Resource List"
310-
/>
311-
</div>
312-
<Dialog>
313-
<Dialog.Trigger>
314-
<Button className=" mx-5">ADD NEW RESOURCE</Button>
315-
</Dialog.Trigger>
316-
<Dialog.Content title={'Add New Resource'}>
317-
<DropZone name="file_upload" allowMultiple={true} onDrop={dropZone}>
318-
{uploadedFile}
319-
{file.length === 0 && <DropZone.FileUpload />}
320-
</DropZone>
321-
</Dialog.Content>
322-
</Dialog>
323-
<Button
324-
className=" w-1/5 justify-end"
325-
size="medium"
326-
kind="tertiary"
327-
variant="interactive"
328-
onClick={listViewFunction}
329-
>
330-
<div className="flex items-center gap-2">
331-
<Text color="interactive">
332-
Go back to <br />
333-
Resource List
334-
</Text>
335-
<Icon source={Icons.cross} color="interactive" />
336-
</div>
337-
</Button>
338-
</div>
307+
<div className=" rounded-4 border-2 border-solid border-greyExtralight px-6 py-8">
308+
<ResourceHeader
309+
listViewFunction={listViewFunction}
310+
isSheetOpen={isSheetOpen}
311+
setIsSheetOpen={setIsSheetOpen}
312+
dropZone={dropZone}
313+
uploadedFile={uploadedFile}
314+
file={file}
315+
list={list}
316+
resourceId={resourceId}
317+
handleResourceChange={handleResourceChange}
318+
/>
319+
339320
<Divider className="mb-8 mt-6" />
340-
<div className="flex justify-center">
341-
<Button
342-
className="w-1/3"
343-
loading={updateResourceMutation.isLoading}
344-
onClick={saveResource}
345-
>
346-
SAVE RESOURCE
347-
</Button>
348-
</div>
349-
<div className="mt-8 flex items-stretch gap-10">
350-
<div className="flex w-4/5 flex-col">
351-
<div className="mb-10 flex gap-6 ">
352-
<div className="w-2/3">
353-
<TextField
354-
value={resourceName}
355-
onChange={(text) => setResourceName(text)}
356-
label="Resource Name"
357-
name="a"
358-
required
359-
helpText="To know about best practices for naming Resources go to our User Guide"
360-
/>
361-
</div>
362-
<div className="w-1/3">
363-
<Combobox
364-
name="geo_list"
365-
label="Data Standard Followed"
366-
placeholder="Search Locations"
367-
list={[
368-
{
369-
label: 'v3',
370-
value: 'v3',
371-
},
372-
]}
373-
displaySelected
374-
required
375-
error="This field is required"
376-
/>
321+
322+
<div className="mt-8 flex flex-wrap items-stretch gap-10 md:flex-nowrap lg:flex-nowrap">
323+
<div className="flex w-full flex-col gap-3 md:w-3/5 lg:w-4/5">
324+
<div>
325+
<TextField
326+
value={resourceName}
327+
onChange={(text) => setResourceName(text)}
328+
onBlur={saveResource}
329+
multiline={2}
330+
label="Data File Name"
331+
name="a"
332+
required
333+
/>
334+
</div>
335+
<div>
336+
<Text className=" underline">
337+
Good practices for naming Data Files
338+
</Text>
339+
<div>
340+
<ol className="list-decimal pl-6">
341+
<li>Try to include as many keywords as possible in the name</li>
342+
<li>Mention the date or time period of the Data File</li>
343+
<li>Mention the geography if applicable</li>
344+
<li>
345+
Follow a similar format for naming all Data Files in a Dataset
346+
</li>
347+
</ol>
377348
</div>
378349
</div>
379-
<TextField
380-
key={resourceId}
381-
value={resourceDesc}
382-
onChange={(text) => setResourceDesc(text)}
383-
label="Resource Description"
384-
name="resourceDesc"
385-
multiline={4}
386-
/>
387350
</div>
388-
389-
<div className="flex w-1/5 flex-col justify-between border-1 border-solid border-baseGraySlateSolid7 p-3 ">
390-
{fileInput}
391-
392-
<DropZone
393-
name="file_upload"
394-
allowMultiple={false}
395-
onDrop={onDrop}
396-
className="w-full border-none bg-baseGraySlateSolid5"
397-
label="Change file for this resource"
398-
>
399-
<DropZone.FileUpload />
400-
</DropZone>
351+
<div className="md:1/3 flex w-2/5 flex-col justify-between lg:w-1/4">
352+
<Text className="pb-1">File associated with Data File</Text>
353+
<div className=" rounded-2 border-1 border-solid border-baseGraySlateSolid7 p-3 ">
354+
{fileInput}
355+
<div className="mt-4 lg:mt-8">
356+
<DropZone
357+
name="file_upload"
358+
allowMultiple={false}
359+
onDrop={onDrop}
360+
className="h-40 w-full border-none bg-baseGraySlateSolid5"
361+
label="Change file for this Data File"
362+
>
363+
<DropZone.FileUpload />
364+
</DropZone>
365+
</div>
366+
</div>
401367
</div>
402368
</div>
369+
403370
<div className="my-8 flex items-center gap-8 align-middle">
404371
<Checkbox
405372
name={'previewEnabled'}
406373
checked={previewEnable}
407-
onChange={() => setPreviewEnable(!previewEnable)}
374+
onChange={() => {
375+
setPreviewEnable(previewEnable === false ? true : false);
376+
saveResource();
377+
}}
408378
>
409379
Preview Enabled
410380
</Checkbox>
411381

412-
{previewEnable && (
382+
<Button kind="tertiary" disabled={!previewEnable}>
383+
See Preview
384+
</Button>
385+
386+
{/* {previewEnable && (
413387
<>
414388
<Checkbox
415389
name={'isAllEntries'}
@@ -446,7 +420,7 @@ export const EditResource = ({ refetch, list }: EditProps) => {
446420
</>
447421
)}
448422
</>
449-
)}
423+
)} */}
450424
</div>
451425
<div className="my-4">
452426
<div className="flex flex-wrap justify-between">

0 commit comments

Comments
 (0)