Skip to content

Commit ac1c371

Browse files
authored
Firefly-1702: Merge pull request #1740 from Caltech-IPAC/FIREFLY-1702-lsdb
Firefly-1702: Experimental LSDB panel is enabled behind url api option
2 parents 9e0d3fc + dc284bc commit ac1c371

File tree

8 files changed

+92
-20
lines changed

8 files changed

+92
-20
lines changed

src/firefly/html/firefly-dev.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111
}
112112
},
113113
gatorProtocol: {
114-
title: 'LSDB Searches',
114+
title: 'My LSDB Searches',
115115
searchOptionsMask: 'Cone,Elliptical,Box,Polygon',
116116
services: [
117117
{

src/firefly/js/Firefly.js

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -299,21 +299,27 @@ function fireflyInit(props, appSpecificOptions={}, webApiCommands) {
299299
}
300300

301301
function setupGatorProtocolPanel(installedOptions, appProps) {
302-
if (!installedOptions.gatorProtocol?.services?.length) return appProps;
303-
if (!isArray(appProps.menu)) return appProps;
304-
const title=installedOptions.gatorProtocol.title ?? 'Gator Proto';
302+
const title=installedOptions?.gatorProtocol?.title ?? 'LSDB Searches';
303+
const ddPanels= appProps.dropdownPanels ?? [];
305304
const gatorProtoMenuItem= {
306305
label: title,
307-
action: 'GatorProtocol',
308-
primary: installedOptions.gatorProtocol.primary ?? true,
306+
action: 'GatorProtocolRootPanel',
307+
primary: installedOptions?.gatorProtocol?.primary ?? true,
309308
category:ARCHIVE
310309
};
311-
312-
const ddPanels= appProps.dropdownPanels ?? [];
313-
const gpPanel= <GatorProtocolRootPanel name='GatorProtocol' title={title}/>;
314-
const menu= [...appProps.menu, gatorProtoMenuItem];
315-
const dropdownPanels= [...ddPanels, gpPanel];
316-
return {...appProps, menu, dropdownPanels};
310+
if (window.location.search.substring(1).split('view=').pop().split('&')[0]==='GatorProtocolRootPanel') {
311+
if (!isArray(appProps.menu)) return appProps;
312+
const menu= [...appProps.menu, gatorProtoMenuItem];
313+
return {...appProps, menu, dropdownPanels:ddPanels};
314+
}
315+
else {
316+
if (!installedOptions.gatorProtocol?.services?.length) return appProps;
317+
if (!isArray(appProps.menu)) return appProps;
318+
const gpPanel= <GatorProtocolRootPanel name='GatorProtocol' title={title}/>;
319+
const menu= [...appProps.menu, gatorProtoMenuItem];
320+
const dropdownPanels= [...ddPanels, gpPanel];
321+
return {...appProps, menu, dropdownPanels};
322+
}
317323
}
318324

319325

src/firefly/js/api/WebApi.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import React from 'react';
33
import {WSCH} from '../core/History';
44
import {dispatchAddActionWatcher} from '../core/MasterSaga.js';
55
import {Logger} from '../util/Logger.js';
6+
import {isDefined} from '../util/WebUtil';
67
import {makeWorldPt, parseWorldPt} from '../visualize/Point';
78

89

@@ -386,7 +387,7 @@ export function makeExample(desc,cmd=undefined, params=undefined) {
386387
const sp= params ? Object.entries(params)
387388
.reduce( (str,[k,v]) => {
388389
const ary= isArray(v) ? v : [v];
389-
const result= ary.reduce( (pStr,e) => (pStr +`&${k}=${e}`),'');
390+
const result= ary.reduce( (pStr,e) => (pStr + (isDefined(e) ? `&${k}=${e}` : `&${k}`)),'');
390391
return str+ result;
391392
} ,'') : '';
392393
const cmdStr= cmd ? `${API_STR}=${cmd}${sp}` : API_STR;
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import {makeExamples} from 'firefly/api/WebApi';
2+
import {dispatchShowDropDown, dispatchUpdateMenu} from 'firefly/core/LayoutCntlr';
3+
import {isUndefined} from 'lodash';
4+
import {getMenu} from '../../core/AppDataCntlr';
5+
6+
7+
const lsdbOverview= {
8+
overview: [
9+
'Enable Experimental LSDB Search Panel'
10+
],
11+
allowAdditionalParameters: false,
12+
parameters: {
13+
enable: 'if defined panel is enabled'
14+
}
15+
};
16+
17+
const lsdbExample= [
18+
{
19+
desc:'Enable the LSDB panel',
20+
params:{ enable: undefined, }
21+
},
22+
];
23+
24+
function enablePanel(cmd,inParams) {
25+
26+
const params= {...inParams};
27+
if (isUndefined(params.enable)) return;
28+
setTimeout(() => {
29+
30+
const lsdbMenuItem= {
31+
label: 'LSDB Searches',
32+
action: 'GatorProtocolRootPanel',
33+
primary: true,
34+
category:'Archive Searches'
35+
};
36+
37+
const {menuItems,selected,showBgMonitor}= getMenu();
38+
if (!menuItems?.find(({action}) => action===lsdbMenuItem.action)) { // add the toolbar option
39+
const newMenuItems= [...menuItems];
40+
const dlDrop= lsdbMenuItem;
41+
newMenuItems.splice(1,0,dlDrop);
42+
dispatchUpdateMenu({selected,showBgMonitor,menuItems:newMenuItems});
43+
}
44+
dispatchShowDropDown({view:'GatorProtocolRootPanel'});
45+
},10);
46+
}
47+
48+
export function getLsdbCommands() {
49+
return [
50+
{
51+
cmd: 'lsdb',
52+
validate: () => ({valid:true}),
53+
execute: enablePanel,
54+
...lsdbOverview,
55+
examples: makeExamples('lsdb', lsdbExample),
56+
},
57+
];
58+
}

src/firefly/js/api/webApiCommands/ViewerWebApiCommands.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {isEmpty} from 'lodash';
22
import {getImageCommands} from './ImageCommands';
3+
import {getLsdbCommands} from './LsdbCommands';
34
import {getTableCommands} from './TableCommands';
45
import {getTapCommands} from './TapCommands';
56

@@ -13,6 +14,7 @@ export function getFireflyViewerWebApiCommands(cmdNameList, tapPanelList=[]) {
1314
...getImageCommands(),
1415
...getTableCommands(),
1516
...getTapCommands(tapPanelList),
17+
...getLsdbCommands()
1618
];
1719

1820
if (isEmpty(cmdNameList)) return allCommands;

src/firefly/js/ui/DropDownContainer.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import PropTypes from 'prop-types';
77
import {Alert, Stack} from '@mui/joy';
88

99
import {getDropDownInfo} from '../core/LayoutCntlr.js';
10+
import {GatorProtocolRootPanel} from '../visualize/ui/GatorProtocolRootPanel';
1011
import {SearchPanel} from './SearchPanel';
1112
import {HiPSSearchPanel} from '../visualize/ui/HiPSSearchPanel.jsx';
1213
import {IrsaCatalogSearchDefault} from '../visualize/ui/IrsaCatalogSearch.jsx';
@@ -47,6 +48,7 @@ export const dropDownMap = {
4748
WorkspaceDropDownCmd: {view: <WorkspaceDropdown />},
4849
DLGeneratedDropDownCmd: {view: <DLGeneratedDropDown name='DLGeneratedDropDownCmd' loadRegistry={false}/>, layout: {width: '100%'}},
4950
IrsaCatalog: {view: <IrsaCatalogSearchDefault/>, layout: {width: '100%'}},
51+
GatorProtocolRootPanel: {view:<GatorProtocolRootPanel name='GatorProtocol' title={'LSDB'}/>, layout: {width: '100%'}},
5052
ClassicVOCatalogPanelCmd : {view: <ClassicVOCatalogPanel/>, layout: {width: '100%'}},
5153
ClassicNedSearchCmd : {view: <ClassicNedSearchPanel/>, layout: {width: '100%'}},
5254
// --- testing

src/firefly/js/visualize/ui/GatorProtocolRootPanel.jsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,13 @@ function GatorProtocolPanelImpl({initArgs, lockedServiceUrl, lockedServiceName,
3535
const gpOps= getGatorProtoServiceOptions();
3636
const servicesShowing= true;
3737
const showWarning= !serviceUrl;
38+
const [enterUrl,setEnterUrl]= useFieldGroupValue('enterUrl');
3839

3940
useEffect( () => {
4041
if (!serviceUrl) {
41-
setServiceUrl(getInitServiceUrl(initArgs,gpOps, lockedServiceUrl,lockedServiceName));
42+
const initUrl= getInitServiceUrl(initArgs,gpOps, lockedServiceUrl,lockedServiceName);
43+
setServiceUrl(initUrl);
44+
if (!initUrl) setEnterUrl(true);
4245
}
4346
},[]);
4447

@@ -49,7 +52,7 @@ function GatorProtocolPanelImpl({initArgs, lockedServiceUrl, lockedServiceName,
4952
setServiceUrl(serviceUrl);
5053
};
5154
const searchOptionsMask= serviceUrl ?
52-
(getGatorProtoService(serviceUrl)?.searchOptionsMask ?? getAppOptions().gatorProtocol.searchOptionsMask) : undefined;
55+
(getGatorProtoService(serviceUrl)?.searchOptionsMask ?? getAppOptions()?.gatorProtocol?.searchOptionsMask) : undefined;
5356
const showSqlSection= serviceUrl ? getGatorProtoService(serviceUrl)?.showSqlSection : true;
5457

5558
return (
@@ -115,14 +118,14 @@ function Services({serviceUrl, servicesShowing, gpOps, onGatorProtoServiceOption
115118
<Typography {...{level:'title-lg', color:'primary', sx:{width:'17rem', mr:1} }}>
116119
Select Source
117120
</Typography>
118-
<SwitchInputField {...{ size:'sm', endDecorator:'Enter my URL', fieldKey:'enterUrl',
121+
{ Boolean(gpOps?.length) && <SwitchInputField {...{ size:'sm', endDecorator:'Enter my URL', fieldKey:'enterUrl',
119122
initState:{value:false},
120123
sx: {
121124
alignSelf: 'flex-start',
122125
'--Switch-trackWidth': '20px',
123126
'--Switch-trackHeight': '12px',
124127
},
125-
}} />
128+
}} /> }
126129
</Stack>
127130
<Stack>
128131
{enterUrl ? (
@@ -142,7 +145,7 @@ function Services({serviceUrl, servicesShowing, gpOps, onGatorProtoServiceOption
142145
<ListBoxInputFieldView {...{
143146
sx:{'& .MuiSelect-root':{width:'46.5rem'}},
144147
options:gpOps, value:serviceUrl,
145-
placeholder:'Choose SIAv2 Service...',
148+
placeholder:'Choose LSDB Service...',
146149
startDecorator:!gpOps.length ? <Button loading={true}/> : undefined,
147150
onChange:(ev, value) => {
148151
onGatorProtoServiceOptionSelect({value});
@@ -200,6 +203,6 @@ function getInitServiceUrl(initArgs,gpOps, lockedServiceUrl,lockedServiceName) {
200203
const url= gpOps.find( ({labelOnly}) => labelOnly===lockedServiceName)?.value;
201204
if (url) return url;
202205
}
203-
const {serviceUrl=gpOps[0].value} = gpOps;
206+
const {serviceUrl=gpOps?.[0]?.value} = gpOps;
204207
return serviceUrl;
205208
}

src/firefly/js/visualize/ui/GatorProtocolUtil.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export function addGatorProtoUserService(serviceUrl) {
5353
value: serviceUrl,
5454
userAdded: true,
5555
showSqlSection:false,
56-
searchOptionsMask: getAppOptions().gatorProtocol.searchOptionsMask
56+
searchOptionsMask: getAppOptions()?.gatorProtocol?.searchOptionsMask
5757
});
5858
dispatchAddPreference(USER_SERVICE_PREFS, userServices);
5959
}

0 commit comments

Comments
 (0)