@@ -36,7 +36,7 @@ type Props = {
3636} ;
3737
3838const RemoteZarr = ( { initStore, setInitStore, onOpenDescription } : Props ) => {
39- const [ showOverrides , setShowOverrides ] = useState ( false ) ;
39+ const [ showFetchOptions , setShowFetchOptions ] = useState ( false ) ;
4040 const [ preset , setPreset ] = useState < AuthPreset > ( 'none' ) ;
4141 const [ presetValue , setPresetValue ] = useState ( '' ) ;
4242 const [ headers , setHeaders ] = useState < HeaderRow [ ] > ( [ { key : '' , value : '' } ] ) ;
@@ -47,7 +47,7 @@ const RemoteZarr = ({ initStore, setInitStore, onOpenDescription }: Props) => {
4747 const updateHeader = ( i : number , field : 'key' | 'value' , val : string ) =>
4848 setHeaders ( h => h . map ( ( row , idx ) => idx === i ? { ...row , [ field ] : val } : row ) ) ;
4949
50- const buildOverrides = ( ) : RequestInit | undefined => {
50+ const buildFetchHandler = ( ) : ( ( request : Request ) => Promise < Response > ) | undefined => {
5151 const builtHeaders : Record < string , string > = { } ;
5252
5353 // Preset auth header
@@ -60,9 +60,12 @@ const RemoteZarr = ({ initStore, setInitStore, onOpenDescription }: Props) => {
6060 . filter ( r => r . key . trim ( ) )
6161 . forEach ( r => { builtHeaders [ r . key . trim ( ) ] = r . value . trim ( ) ; } ) ;
6262
63- return Object . keys ( builtHeaders ) . length > 0
64- ? { headers : builtHeaders }
65- : undefined ;
63+ if ( Object . keys ( builtHeaders ) . length === 0 ) return undefined ;
64+
65+ return ( request : Request ) => {
66+ Object . entries ( builtHeaders ) . forEach ( ( [ k , v ] ) => request . headers . set ( k , v ) ) ;
67+ return fetch ( request ) ;
68+ } ;
6669 } ;
6770
6871 return (
@@ -74,18 +77,18 @@ const RemoteZarr = ({ initStore, setInitStore, onOpenDescription }: Props) => {
7477 const url = input . value ;
7578 if ( ! url ) return ;
7679
77- const overrides = buildOverrides ( ) ;
78- if ( overrides && url . startsWith ( 'http://' ) ) {
80+ const fetchHandler = buildFetchHandler ( ) ;
81+ if ( fetchHandler && url . startsWith ( 'http://' ) ) {
7982 useGlobalStore . getState ( ) . setStatus ( 'Error: Cannot send auth headers over plain HTTP — use HTTPS.' ) ;
8083 return ;
8184 }
8285 const fetchOptions = {
83- ...( overrides && { overrides } ) ,
86+ ...( fetchHandler && { fetch : fetchHandler } ) ,
8487 } ;
8588
8689 useZarrStore . getState ( ) . setIcechunkOptions ( null ) ;
8790 useZarrStore . getState ( ) . setFetchOptions (
88- Object . keys ( fetchOptions ) . length > 0 ? fetchOptions : null
91+ fetchOptions . fetch !== undefined ? fetchOptions : null
8992 ) ;
9093 useGlobalStore . getState ( ) . setStatus ( 'Fetching...' ) ;
9194
@@ -102,19 +105,19 @@ const RemoteZarr = ({ initStore, setInitStore, onOpenDescription }: Props) => {
102105 </ Button >
103106 </ div >
104107
105- { /* Overrides */ }
108+ { /* FetchOptions */ }
106109 < div >
107110 < Button
108111 type = "button"
109112 variant = "ghost"
110113 className = "flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors cursor-pointer"
111- onClick = { ( ) => setShowOverrides ( v => ! v ) }
114+ onClick = { ( ) => setShowFetchOptions ( v => ! v ) }
112115 >
113- { showOverrides ? < ChevronUp size = { 12 } /> : < ChevronDown size = { 12 } /> }
114- Overrides
116+ { showFetchOptions ? < ChevronUp size = { 12 } /> : < ChevronDown size = { 12 } /> }
117+ fetchOptions
115118 </ Button >
116119
117- { showOverrides && (
120+ { showFetchOptions && (
118121 < div className = "flex flex-col gap-3 mt-2" >
119122
120123 { /* Auth preset selector */ }
0 commit comments