Skip to content

Commit 6ff9f62

Browse files
committed
revert changes for additional bugs
1 parent 9b0cb5f commit 6ff9f62

2 files changed

Lines changed: 48 additions & 93 deletions

File tree

src/firefly/js/ui/tap/TapSearchRootPanel.jsx

Lines changed: 37 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* License information at https://github.com/Caltech-IPAC/firefly/blob/master/License.txt
33
*/
44
import {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';
66
import {dispatchMultiValueChange} from 'firefly/fieldGroup/FieldGroupCntlr.js';
77
import FieldGroupUtils, {getFieldVal} from 'firefly/fieldGroup/FieldGroupUtils.js';
88
import {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';
1719
import {ValidationField} from 'firefly/ui/ValidationField.jsx';
1820
import {intValidator} from 'firefly/util/Validate.js';
1921
import {makeSearchOnce} from 'firefly/util/WebUtil.js';
2022
import {TextButton} from 'firefly/visualize/ui/Buttons.jsx';
2123
import {once} from 'lodash';
2224
import {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';
2426
import {InputField} from '../InputField.jsx';
2527
import {ListBoxInputFieldView} from '../ListBoxInputField.jsx';
26-
import {useFieldGroupMetaState, useFieldGroupValue, useStoreConnector} from '../SimpleComponent.jsx';
28+
import {useFieldGroupMetaState, useFieldGroupValue} from '../SimpleComponent.jsx';
2729
import {SwitchInputField} from '../SwitchInputField.jsx';
2830
import {ConstraintContext, getHelperConstraints, getUploadConstraint, isTapUpload} from './Constraints.js';
2931
import {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

246241
function 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>

src/firefly/js/ui/tap/TapUtil.js

Lines changed: 11 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -574,45 +574,27 @@ export function getTapServices() {
574574
const baseName= 'User Entered';
575575

576576
function getUserServiceAry() {
577-
const seen = new Set();
578-
579-
return [...getPreference(USER_SERVICE_PREFS, [])]
580-
.filter((entry) => entry?.value?.trim())
581-
.filter((entry) => {
582-
const key = normalizeTapUrl(entry.value);
583-
if (!key || seen.has(key)) return false;
584-
seen.add(key);
585-
return true;
586-
});
577+
return getPreference(USER_SERVICE_PREFS, []);
587578
}
588579

589-
590580
export function addUserService(serviceUrl) {
591-
const userServices = getUserServiceAry();
592-
const normalizedServiceUrl = normalizeTapUrl(serviceUrl);
593-
if (getTapServices().some(({value}) => normalizeTapUrl(value) === normalizedServiceUrl)) return; //don't add if service already exists
594-
595-
const usedNumAry = userServices
596-
.map((s) => s.label)
581+
const userServices= getUserServiceAry();
582+
if (getTapServiceByURL(serviceUrl)) return; // don't add if service already exist
583+
const usedNumAry= userServices
584+
.map( (s) => s.label)
597585
.filter((title) => title && title.startsWith(baseName))
598586
.map((title) => title.trim().split('-')?.[1])
599587
.map(Number)
600588
.filter(Boolean);
601589

602590
const maxNum = usedNumAry?.length ? Math.max(...usedNumAry) : 0;
603-
const label = userServices.every((s) => s.label !== baseName) ? baseName : `${baseName} - ${maxNum + 1}`;
604-
605-
dispatchAddPreference(USER_SERVICE_PREFS, [
606-
...userServices,
607-
{label, serviceId: label.replaceAll(/\s/g, ''), value: serviceUrl, userAdded: true},
608-
]);
591+
const label= userServices.every( (s) => s.label!==baseName) ? baseName : baseName + ` - ${maxNum + 1}`;
592+
userServices.push({ label, serviceId:label.replaceAll(/\s/g,''), value: serviceUrl, userAdded: true});
593+
dispatchAddPreference(USER_SERVICE_PREFS, userServices);
609594
}
610595

611596
export function deleteUserService(serviceUrl) {
612-
const normalizedServiceUrl = normalizeTapUrl(serviceUrl);
613-
const userServices = getUserServiceAry().filter(
614-
(s) => normalizeTapUrl(s.value) !== normalizedServiceUrl
615-
);
597+
const userServices= getUserServiceAry().filter( (s) => s.value!==serviceUrl);
616598
dispatchAddPreference(USER_SERVICE_PREFS, userServices);
617599
}
618600

@@ -717,28 +699,7 @@ export const getServiceHiPS= (serviceUrl) => getTapServiceByURL(serviceUrl)?.hip
717699

718700

719701

720-
export const normalizeTapUrl = (url='') => url.trim().replace(/\/+$/, '').toLowerCase();
721-
722-
export function makeTapServiceOptions(baseServices, additionalServices, userServices=[]) {
723-
const startingTapServices= hasElements(baseServices) ? [...baseServices] : makeTAPDefaultServicesByName();
724-
const mergedServices= mergeServices(startingTapServices, additionalServices);
725-
const allServices= [...mergedServices, ...userServices];
726-
const seen = new Set();
727-
728-
return allServices
729-
.map(({label, value, userAdded=false}) => ({label:value, value, labelOnly:label, userAdded}))
730-
.filter((op) => {
731-
const key = normalizeTapUrl(op.value);
732-
if (!key || seen.has(key)) return false;
733-
seen.add(key);
734-
return true;
735-
});
736-
}
737-
738-
export const getTapServiceOptions = () => {
739-
const {tap} = getAppOptions();
740-
return makeTapServiceOptions(tap?.services, tap?.additional?.services, getUserServiceAry());
741-
};
742-
702+
export const getTapServiceOptions= () =>
703+
getTapServices().map(({label,value,userAdded=false})=>({label:value, value, labelOnly:label, userAdded}));
743704

744705
export const getServiceNamesAsKey= () => getTapServiceOptions().map(({label}) => label).join('-');

0 commit comments

Comments
 (0)