1- import React , { useEffect , useState } from 'react' ;
2- import { useParams } from 'next/navigation' ;
31import { graphql } from '@/gql' ;
42import {
53 CreateFileResourceInput ,
@@ -8,27 +6,26 @@ import {
86} from '@/gql/generated/graphql' ;
97import { useMutation , useQuery } from '@tanstack/react-query' ;
108import { parseAsString , useQueryState } from 'next-usequerystate' ;
9+ import { useParams } from 'next/navigation' ;
1110import {
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' ;
2823import { Icons } from '@/components/icons' ;
2924import { Loading } from '@/components/loading' ;
25+ import { GraphQL } from '@/lib/api' ;
3026import { useDatasetEditStatus } from '../../context' ;
3127import { TListItem } from '../page-layout' ;
28+ import PreviewData from './PreviewData' ;
3229import {
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