1- import React , { useState } from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
22import { useParams } from 'next/navigation' ;
33import {
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
2526import { GraphQL } from '@/lib/api' ;
2627import { Icons } from '@/components/icons' ;
28+ import { useDatasetEditStatus } from '../../context' ;
2729import { TListItem } from '../page-layout' ;
2830import {
2931 createResourceFilesDoc ,
@@ -32,6 +34,7 @@ import {
3234 updateResourceDoc ,
3335 updateSchema ,
3436} from './query' ;
37+ import ResourceHeader from './ResourceHeader' ;
3538import { ResourceSchema } from './ResourceSchema' ;
3639
3740interface 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