22 * License information at https://github.com/Caltech-IPAC/firefly/blob/master/License.txt
33 */
44import { Box , Button , ChipDelete , FormHelperText , Stack , Typography } from '@mui/joy' ;
5- import { getAppOptions , getPreference } from 'firefly/core/AppDataCntlr.js' ;
5+ import { getAppOptions } from 'firefly/core/AppDataCntlr.js' ;
66import { dispatchMultiValueChange } from 'firefly/fieldGroup/FieldGroupCntlr.js' ;
77import FieldGroupUtils , { getFieldVal } from 'firefly/fieldGroup/FieldGroupUtils.js' ;
88import { FieldGroup , FieldGroupCtx } from 'firefly/ui/FieldGroup.jsx' ;
@@ -12,18 +12,20 @@ import {
1212 ADQL_QUERY_KEY ,
1313 defTapBrowserState , deleteUserService , getMaxrecHardLimit ,
1414 loadObsCoreSchemaTables , tapHelpId , USER_ENTERED_TITLE ,
15- makeTapServiceOptions , USER_SERVICE_PREFS , getTapServiceOptions ,
15+ getServiceLabel ,
16+ getServiceNamesAsKey ,
17+ getTapServiceOptions ,
1618} from 'firefly/ui/tap/TapUtil.js' ;
1719import { ValidationField } from 'firefly/ui/ValidationField.jsx' ;
1820import { intValidator } from 'firefly/util/Validate.js' ;
1921import { makeSearchOnce } from 'firefly/util/WebUtil.js' ;
2022import { TextButton } from 'firefly/visualize/ui/Buttons.jsx' ;
2123import { once } from 'lodash' ;
2224import { bool , object , shape , string } from 'prop-types' ;
23- import React , { useContext , useEffect , useMemo , useRef , useState } from 'react' ;
25+ import React , { useContext , useEffect , useRef , useState } from 'react' ;
2426import { InputField } from '../InputField.jsx' ;
2527import { ListBoxInputFieldView } from '../ListBoxInputField.jsx' ;
26- import { useFieldGroupMetaState , useFieldGroupValue , useStoreConnector } from '../SimpleComponent.jsx' ;
28+ import { useFieldGroupMetaState , useFieldGroupValue } from '../SimpleComponent.jsx' ;
2729import { SwitchInputField } from '../SwitchInputField.jsx' ;
2830import { ConstraintContext , getHelperConstraints , getUploadConstraint , isTapUpload } from './Constraints.js' ;
2931import { TapTitleCustomizeButton } from './TableSearchHelpers' ;
@@ -120,13 +122,11 @@ function TapSearchPanelImpl({initArgs= {}, titleOn=true, lockService=false, lock
120122 const { setVal, getVal, setFld, groupKey} = useContext ( FieldGroupCtx ) ;
121123 const [ getTapBrowserState , setTapBrowserState ] = useFieldGroupMetaState ( defTapBrowserState ) ;
122124 const [ getUserTitle , setUserTitle ] = useFieldGroupValue ( USER_ENTERED_TITLE ) ;
123- const tapConfig = useStoreConnector ( ( ) => getAppOptions ( ) . tap ?? { } ) ;
124- const userServices = useStoreConnector ( ( ) => getPreference ( USER_SERVICE_PREFS , [ ] ) ) ;
125- const tapOps = useMemo ( ( ) => makeTapServiceOptions ( tapConfig . services , tapConfig . additional ?. services , userServices ) ,
126- [ tapConfig . services , tapConfig . additional ?. services , userServices ] ) ;
125+ const [ srvNameKey , setSrvNameKey ] = useState ( ( ) => getServiceNamesAsKey ( ) ) ;
127126 const tapState = getTapBrowserState ( ) ;
128- if ( ! initArgs ?. urlApi ?. execute ) searchFromAPIOnce ( true ) ; //if not execute then mark as done, i.e. disable any auto searching
129- initApiAddedServiceOnce ( initArgs ) ; //only look for the extra service the first time
127+ if ( ! initArgs ?. urlApi ?. execute ) searchFromAPIOnce ( true ) ; // if not execute then mark as done, i.e. disable any auto searching
128+ initApiAddedServiceOnce ( initArgs ) ; // only look for the extra service the first time
129+ const tapOps = getTapServiceOptions ( ) ;
130130 const { current :clickFuncRef } = useRef ( { clickFunc :undefined } ) ;
131131 const [ selectBy , setSelectBy ] = useState ( ( ) => {
132132 const val = getVal ( 'selectBy' ) ;
@@ -139,33 +139,28 @@ function TapSearchPanelImpl({initArgs= {}, titleOn=true, lockService=false, lock
139139 const [ serviceUrl , setServiceUrl ] = useState ( ( ) => getInitServiceUrl ( tapState , initArgs , tapOps , lockedServiceUrl , lockedServiceName ) ) ;
140140 activateInitArgsAdqlOnce ( groupKey , tapState , initArgs , setSelectBy ) ;
141141
142+
142143 const setServicesShowing = ( showing ) => {
143144 setServicesShowingInternal ( showing ) ;
144145 setTapBrowserState ( { ...getTapBrowserState ( ) , lastServicesShowing :showing } ) ;
145146 } ;
146147
147148 const obsCoreEnabled = obsCoreTableModel ?. tableData ?. data ?. length > 0 ;
148149
149- const onDeleteServiceOption = ( deletedValue , clearServiceOnDelete = false ) => {
150- deleteUserService ( deletedValue ) ;
151-
152- if ( clearServiceOnDelete ) {
153- setServiceUrl ( '' ) ;
154- setTapBrowserState ( { ...getTapBrowserState ( ) , serviceUrl : '' } ) ;
155- setVal ( ADQL_QUERY_KEY , '' ) ;
156- setFld ( ADQL_QUERY_KEY , { placeholder : '' , value : '' } ) ;
157- setObsCoreTableModel ( undefined ) ;
158- }
159- } ;
160-
161150 const onTapServiceOptionSelect = ( selectedOption ) => {
162- if ( ! selectedOption ) return ;
151+ if ( ! selectedOption ) {
152+ setSrvNameKey ( getServiceNamesAsKey ( ) ) ;
153+ return ;
154+ }
163155 setVal ( ADQL_QUERY_KEY , '' ) ;
164156 setFld ( ADQL_QUERY_KEY , { placeholder : '' , value : '' } ) ;
165- const nextServiceUrl = lockedServiceUrl ? serviceUrl : selectedOption ?. value ;
166- if ( ! lockedServiceUrl ) setServiceUrl ( nextServiceUrl ) ;
157+ if ( ! lockedServiceUrl ) {
158+ const serviceUrl = selectedOption ?. value ;
159+ setServiceUrl ( serviceUrl ) ;
160+ }
167161 setObsCoreTableModel ( undefined ) ;
168- setTapBrowserState ( { ...getTapBrowserState ( ) , serviceUrl : nextServiceUrl } ) ;
162+ setSrvNameKey ( getServiceNamesAsKey ( ) ) ;
163+ setTapBrowserState ( { ...getTapBrowserState ( ) , serviceUrl} ) ;
169164 } ;
170165
171166 useEffect ( ( ) => {
@@ -217,7 +212,7 @@ function TapSearchPanelImpl({initArgs= {}, titleOn=true, lockService=false, lock
217212
218213 < TapSearchPanelComponents { ...{
219214 servicesShowing, setServicesShowing, lockService, lockObsCore, lockedTableName, obsCoreLockTitle,
220- lockedSchemaName, onDeleteServiceOption ,
215+ lockedSchemaName, srvNameKey ,
221216 initArgs, selectBy, setSelectBy, serviceUrl, onTapServiceOptionSelect, titleOn, tapOps, obsCoreEnabled} } />
222217 </ FormPanel >
223218 </ ConstraintContext >
@@ -244,10 +239,10 @@ TapSearchPanel.propTypes= {
244239
245240
246241function TapSearchPanelComponents ( { initArgs, serviceUrl, servicesShowing, setServicesShowing, onTapServiceOptionSelect,
247- lockService, lockObsCore, obsCoreLockTitle, tapOps, onDeleteServiceOption ,
242+ lockService, lockObsCore, obsCoreLockTitle, tapOps,
248243 lockedSchemaName, lockedTableName, titleOn= true , selectBy, setSelectBy} ) {
249244
250- const serviceLabel = tapOps . find ( ( op ) => op . value === serviceUrl ) ?. labelOnly || '' ;
245+ const serviceLabel = getServiceLabel ( serviceUrl ) ;
251246 const [ obsCoreTableModel , setObsCoreTableModel ] = useState ( ) ;
252247 const [ error , setError ] = useState ( undefined ) ;
253248 const hasObsCoreTable = obsCoreTableModel ?. tableData ?. data ?. length > 0 ;
@@ -276,7 +271,7 @@ function TapSearchPanelComponents({initArgs, serviceUrl, servicesShowing, setSer
276271 return (
277272 < Stack flexGrow = { 1 } >
278273 { titleOn && < Typography { ...{ level :'h3' , sx :{ m :1 } } } > TAP Searches </ Typography > }
279- < Services { ...{ serviceUrl, servicesShowing : ( servicesShowing && ! lockService ) , onDeleteServiceOption ,
274+ < Services { ...{ serviceUrl, servicesShowing : ( servicesShowing && ! lockService ) ,
280275 tapOps, onTapServiceOptionSelect} } />
281276 { showWarning ?
282277 < ServiceWarning { ...{ error, serviceUrl} } /> :
@@ -309,7 +304,7 @@ function ServiceWarning({error,serviceUrl}) {
309304
310305}
311306
312- function Services ( { serviceUrl, servicesShowing, tapOps, onTapServiceOptionSelect, onDeleteServiceOption } ) {
307+ function Services ( { serviceUrl, servicesShowing, tapOps, onTapServiceOptionSelect} ) {
313308 const [ extraStyle , setExtraStyle ] = useState ( { overflow :'hidden' } ) ;
314309 const enterUrl = useFieldGroupValue ( 'enterUrl' ) [ 0 ] ( ) ;
315310
@@ -369,9 +364,11 @@ function Services({serviceUrl, servicesShowing, tapOps, onTapServiceOptionSelect
369364 } ,
370365 renderValue :
371366 ( { value} ) =>
372- ( < ServiceOpRender { ...{ ops : tapOps , value, onDeleteServiceOption, clearServiceOnDelete : true } } /> ) ,
367+ ( < ServiceOpRender { ...{ ops : tapOps , value,
368+ onTapServiceOptionSelect, clearServiceOnDelete :true } } /> ) ,
373369 decorator :
374- ( label , value ) => ( < ServiceOpRender { ...{ ops : tapOps , value, onDeleteServiceOption, clearServiceOnDelete : value === serviceUrl } } /> ) ,
370+ ( label , value ) => ( < ServiceOpRender { ...{ ops : tapOps , value,
371+ onTapServiceOptionSelect, clearServiceOnDelete :value === serviceUrl } } /> ) ,
375372 } } /> ) }
376373 < FormHelperText sx = { { m : .25 } } >
377374 { enterUrl ? 'Type the url of a TAP service & press enter' : 'Choose a TAP service from the list' }
@@ -383,7 +380,7 @@ function Services({serviceUrl, servicesShowing, tapOps, onTapServiceOptionSelect
383380}
384381
385382
386- function ServiceOpRender ( { ops, value, sx , onDeleteServiceOption , clearServiceOnDelete= false } ) {
383+ function ServiceOpRender ( { ops, value, onTapServiceOptionSelect , sx , clearServiceOnDelete= false } ) {
387384 const op = ops . find ( ( t ) => t . value === value ) ;
388385 if ( ! op ) return 'none' ;
389386 return (
@@ -399,15 +396,12 @@ function ServiceOpRender({ops, value, sx, onDeleteServiceOption, clearServiceOnD
399396 </ Stack >
400397 { op . userAdded &&
401398 < ChipDelete component = 'div' size = 'sm' sx = { { zIndex :2 } }
402- onMouseDown = { ( e ) => {
403- e . preventDefault ( ) ;
404- e . stopPropagation ( ) ;
405- } }
406- onClick = { ( e ) => {
407- e . preventDefault ( ) ;
408- e . stopPropagation ( ) ;
409- onDeleteServiceOption ( value , clearServiceOnDelete ) ;
410- } }
399+ onClick = { ( e ) => {
400+ deleteUserService ( value ) ;
401+ if ( clearServiceOnDelete ) onTapServiceOptionSelect ( { value :'' } ) ;
402+ else onTapServiceOptionSelect ( ) ;
403+ e . stopPropagation ?. ( ) ;
404+ } }
411405 />
412406 }
413407 </ Stack >
0 commit comments