Skip to content

Commit a89f1ac

Browse files
committed
refactor(EditResource): streamline resource handling and enhance preview functionality
1 parent a399bfa commit a89f1ac

File tree

1 file changed

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

1 file changed

+112
-72
lines changed

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

Lines changed: 112 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import React, { useEffect, useState } from 'react';
2-
import { useParams } from 'next/navigation';
31
import { graphql } from '@/gql';
42
import {
53
CreateFileResourceInput,
@@ -8,27 +6,26 @@ import {
86
} from '@/gql/generated/graphql';
97
import { useMutation, useQuery } from '@tanstack/react-query';
108
import { parseAsString, useQueryState } from 'next-usequerystate';
9+
import { useParams } from 'next/navigation';
1110
import {
1211
Button,
1312
Checkbox,
14-
Combobox,
15-
Dialog,
1613
Divider,
1714
DropZone,
1815
Icon,
19-
Select,
20-
Sheet,
2116
Spinner,
2217
Text,
2318
TextField,
24-
toast,
19+
toast
2520
} from 'opub-ui';
21+
import React, { useEffect, useState } from 'react';
2622

27-
import { GraphQL } from '@/lib/api';
2823
import { Icons } from '@/components/icons';
2924
import { Loading } from '@/components/loading';
25+
import { GraphQL } from '@/lib/api';
3026
import { useDatasetEditStatus } from '../../context';
3127
import { TListItem } from '../page-layout';
28+
import PreviewData from './PreviewData';
3229
import {
3330
createResourceFilesDoc,
3431
fetchSchema,
@@ -106,7 +103,24 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
106103
{ resourceId: resourceId }
107104
)
108105
);
109-
106+
const schemaMutation = useMutation(
107+
(data: { resourceId: string }) =>
108+
GraphQL(
109+
resetSchema,
110+
{
111+
// Entity Headers if present
112+
},
113+
data
114+
),
115+
{
116+
onSuccess: () => {
117+
schemaQuery.refetch();
118+
},
119+
onError: (err: any) => {
120+
toast(err);
121+
},
122+
}
123+
);
110124
const updateResourceMutation = useMutation(
111125
(data: {
112126
fileResourceInput: UpdateFileResourceInput;
@@ -132,7 +146,7 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
132146
resourceId: resourceId,
133147
});
134148
}
135-
refetch();
149+
resourceDetailsQuery.refetch();
136150
},
137151
onError: (err: any) => {
138152
toast(err.message || String(err));
@@ -141,25 +155,6 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
141155
}
142156
);
143157

144-
const schemaMutation = useMutation(
145-
(data: { resourceId: string }) =>
146-
GraphQL(
147-
resetSchema,
148-
{
149-
// Entity Headers if present
150-
},
151-
data
152-
),
153-
{
154-
onSuccess: () => {
155-
schemaQuery.refetch();
156-
},
157-
onError: (err: any) => {
158-
console.log('Error ::: ', err);
159-
},
160-
}
161-
);
162-
163158
const schemaQuery = useQuery<any>([`fetch_schema_${params.id}`], () =>
164159
GraphQL(
165160
fetchSchema,
@@ -217,11 +212,18 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
217212
refetch();
218213
},
219214
onError: (err: any) => {
220-
console.log('Error ::: ', err);
215+
toast(err.message, {
216+
action: {
217+
label: 'Dismiss',
218+
onClick: () => {},
219+
},
220+
});
221+
setFile([]);
221222
},
222223
}
223224
);
224225
const [isSheetOpen, setIsSheetOpen] = useState(false);
226+
const [showPreview, setShowPreview] = useState(false);
225227

226228
const [resourceName, setResourceName] = React.useState(
227229
resourceDetailsQuery.data?.resourceById.name
@@ -232,25 +234,32 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
232234
const [previewDetails, setPreviewDetails] = useState({
233235
startEntry: 0,
234236
endEntry: 0,
235-
isAllEntries: true,
237+
isAllEntries: false,
238+
});
239+
const [previewData, setPreviewData] = useState({
240+
rows: [],
241+
columns: [],
236242
});
237243

244+
238245
React.useEffect(() => {
239-
setResourceName(resourceDetailsQuery.data?.resourceById.name);
240-
setPreviewEnable(
241-
resourceDetailsQuery.data?.resourceById.previewEnabled ?? true
242-
);
246+
const ResourceData = resourceDetailsQuery.data?.resourceById;
247+
setResourceName(ResourceData?.name);
248+
setPreviewEnable(ResourceData?.previewEnabled );
243249
setPreviewDetails({
244-
startEntry:
245-
resourceDetailsQuery.data?.resourceById.previewDetails?.startEntry ?? 0,
246-
endEntry:
247-
resourceDetailsQuery.data?.resourceById.previewDetails?.endEntry ?? 0,
248-
isAllEntries:
249-
resourceDetailsQuery.data?.resourceById.previewDetails?.isAllEntries ??
250-
true,
250+
startEntry: ResourceData?.previewDetails?.startEntry ?? 0,
251+
endEntry: ResourceData?.previewDetails?.endEntry ?? 0,
252+
isAllEntries: ResourceData?.previewDetails?.isAllEntries ?? false,
251253
});
252-
253-
//fix this later
254+
setPreviewData({
255+
rows: ResourceData?.previewData?.rows,
256+
columns: ResourceData?.previewData?.columns,
257+
});
258+
if (ResourceData?.schema?.length === 0) {
259+
schemaMutation.mutate({
260+
resourceId: resourceId,
261+
});
262+
}
254263
}, [resourceDetailsQuery.data]);
255264

256265
const handleResourceChange = (e: any) => {
@@ -284,16 +293,36 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
284293

285294
const onDrop = React.useCallback(
286295
(_dropFiles: File[], acceptedFiles: File[]) => {
287-
updateResourceMutation.mutate({
288-
fileResourceInput: {
289-
id: resourceId,
290-
file: acceptedFiles[0],
296+
updateResourceMutation.mutate(
297+
{
298+
fileResourceInput: {
299+
id: resourceId,
300+
file: acceptedFiles[0],
301+
},
302+
isResetSchema: true,
291303
},
292-
isResetSchema: true,
293-
});
304+
{
305+
onSuccess: () => {
306+
// Automatically trigger schema mutation after file upload
307+
schemaMutation.mutate(
308+
{
309+
resourceId: resourceId,
310+
},
311+
{
312+
onSuccess: () => {
313+
toast('Schema updated successfully');
314+
schemaQuery.refetch();
315+
},
316+
}
317+
);
318+
resourceDetailsQuery.refetch();
319+
},
320+
}
321+
);
294322
},
295-
[]
323+
[resourceId]
296324
);
325+
297326
const fileInput = (
298327
<div className="flex">
299328
<Text className="break-all">
@@ -332,7 +361,7 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
332361
fileResourceInput: {
333362
id: resourceId,
334363
name: resourceName || '',
335-
previewEnabled: true,
364+
previewEnabled: previewEnable,
336365
previewDetails: {
337366
startEntry: 5,
338367
endEntry: 5,
@@ -341,18 +370,19 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
341370
},
342371
isResetSchema: false,
343372
});
344-
if (schema.length > 0) {
345-
const updatedScheme = schema.map((item) => {
346-
const { fieldName, ...rest } = item as any;
347-
return rest;
348-
});
349-
updateSchemaMutation.mutate({
350-
input: {
351-
resource: resourceId,
352-
updates: updatedScheme,
353-
},
354-
});
355-
}
373+
// to fix schema update
374+
// if (schema.length > 0) {
375+
// const updatedScheme = schema.map((item) => {
376+
// const { fieldName, ...rest } = item as any;
377+
// return rest;
378+
// });
379+
// updateSchemaMutation.mutate({
380+
// input: {
381+
// resource: resourceId,
382+
// updates: updatedScheme,
383+
// },
384+
// });
385+
// }
356386
};
357387

358388
const { setStatus } = useDatasetEditStatus();
@@ -361,8 +391,6 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
361391
setStatus(updateResourceMutation.isLoading ? 'loading' : 'success'); // update based on mutation state
362392
}, [updateResourceMutation.isLoading]);
363393

364-
365-
366394
return (
367395
<div>
368396
{resourceDetailsQuery.data?.resourceById ? (
@@ -413,7 +441,7 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
413441
</div>
414442
</div>
415443
</div>
416-
<div className="md:1/3 flex w-2/5 flex-col justify-between lg:w-1/4">
444+
<div className="flex flex-col justify-between lg:w-1/4">
417445
<Text className="pb-1">File associated with Data File</Text>
418446
<div className=" rounded-2 border-1 border-solid border-baseGraySlateSolid7 p-3 ">
419447
{fileInput}
@@ -443,11 +471,17 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
443471
>
444472
Preview Enabled
445473
</Checkbox>
446-
447-
<Button kind="tertiary" disabled={!previewEnable}>
448-
See Preview
449-
</Button>
450-
474+
<div>
475+
<Button
476+
kind="tertiary"
477+
disabled={!previewEnable}
478+
onClick={() => {
479+
setShowPreview(!showPreview);
480+
}}
481+
>
482+
{showPreview ? 'Hide Preview' : 'See Preview'}
483+
</Button>
484+
</div>
451485
{/* {previewEnable && (
452486
<>
453487
<Checkbox
@@ -487,6 +521,12 @@ export const EditResource = ({ refetch, allResources }: EditProps) => {
487521
</>
488522
)} */}
489523
</div>
524+
{showPreview && previewEnable && previewData && (
525+
<PreviewData
526+
isPreview={previewEnable}
527+
previewData={previewData}
528+
/>
529+
)}
490530
<div className="my-4">
491531
<div className="flex flex-wrap justify-between">
492532
<Text>Fields in the Resource</Text>

0 commit comments

Comments
 (0)