Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion buildScript/webpack.config.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
/* eslint-env node */
/* global process */

import webpack from 'webpack';
import TerserPlugin from 'terser-webpack-plugin';
Expand Down
14 changes: 1 addition & 13 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -80,29 +80,17 @@ export default [
// rules with existing violations: warn until the sites are addressed
"no-case-declarations": 1,
"no-async-promise-executor": 1,
"no-cond-assign": 1,
"no-constant-binary-expression": 1,
"no-control-regex": 1,
"no-debugger": 1,
"no-empty-pattern": 1,
"no-extra-boolean-cast": 1,
"no-import-assign": 1,
"no-irregular-whitespace": 1,
"no-prototype-builtins": 1,
"no-redeclare": 1,
"no-regex-spaces": 1,
"no-sparse-arrays": 1,
"no-undef": 1,
"no-unreachable": 1,
"no-unsafe-optional-chaining": 1,
"no-useless-escape": 1,
"@stylistic/js/semi": [1, "always"], // restore to [2, "always"]

"@stylistic/js/arrow-parens": [2, "always"],
"@stylistic/js/comma-spacing": 0,
"@stylistic/js/jsx-quotes": [1, "prefer-single"],
"@stylistic/js/key-spacing": 0,
"@stylistic/js/no-multi-spaces": 0,
"@stylistic/js/semi": [2, "always"],
"@stylistic/js/space-infix-ops": 0,
"@stylistic/js/quotes": [2, "single", {avoidEscape: true, allowTemplateLiterals: "avoidEscape"}],
"react/jsx-boolean-value": [1, "always"],
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/api/webApiCommands/SiaCommands.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export const siaPanelOverview= {
obsCoreWavelengthRangeType : 'Type of Wavelength search for Observations. `contains` or `overlaps`',
obsCoreWavelengthContains : `Wavelength value (in ${wvlUnit}) when selecting \`obsCoreWavelengthRangeType=contains\``,
obsCoreWavelengthMinRange : `Upper limit of an observation's wavelength coverage (in ${wvlUnit}). Requires \`obsCoreWavelengthRangeType=overlaps\``,
obsCoreWavelengthMaxRange : `Lower limit of an observation\'s wavelength coverage (in ${wvlUnit}). Requires \`obsCoreWavelengthRangeType=overlaps\``,
obsCoreWavelengthMaxRange : `Lower limit of an observation's wavelength coverage (in ${wvlUnit}). Requires \`obsCoreWavelengthRangeType=overlaps\``,

[ReservedParams.POSITION.name]: ['coordinates of the search',...ReservedParams.POSITION.desc],
[ReservedParams.SR.name]: ['radius of search (optional)',...ReservedParams.SR.desc],
Expand Down
6 changes: 3 additions & 3 deletions src/firefly/js/api/webApiCommands/TapCommands.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export const tapPanelOverview= {
obsCoreWavelengthRangeType : 'Type of Wavelength search for Observations. `contains` or `overlaps`',
obsCoreWavelengthContains : `Wavelength value (in ${wvlUnit}) when selecting \`obsCoreWavelengthRangeType=contains\``,
obsCoreWavelengthMinRange : `Upper limit of an observation's wavelength coverage (in ${wvlUnit}). Requires \`obsCoreWavelengthRangeType=overlaps\``,
obsCoreWavelengthMaxRange : `Lower limit of an observation\'s wavelength coverage (in ${wvlUnit}). Requires \`obsCoreWavelengthRangeType=overlaps\``,
obsCoreWavelengthMaxRange : `Lower limit of an observation's wavelength coverage (in ${wvlUnit}). Requires \`obsCoreWavelengthRangeType=overlaps\``,
[ReservedParams.POSITION.name]: ['coordinates of the search',...ReservedParams.POSITION.desc],
[ReservedParams.SR.name]: ['radius of search (optional)',...ReservedParams.SR.desc],
polygon: 'polygon as a list of ra dec strings, example: 269.3 68.2, 272.85 68.2, 272.7 66.7, 269.3 66.7',
Expand Down Expand Up @@ -134,7 +134,7 @@ WHERE CONTAINS(POINT('ICRS', ra, dec),CIRCLE('ICRS', 83.63321237, 22.01446012, 0
service: 'https://irsa.ipac.caltech.edu/TAP',
adql:
`SELECT ra,dec,sigra,sigdec,sigradec,w1mpro,w1sigmpro,w1snr,w1rchi2,w1mpro_allwise,w1sigmpro_allwise,w4mpro_allwise,w4sigmpro_allwise \
FROM neowiser_p1bs_psd WHERE CONTAINS(POINT('ICRS', ra, dec), CIRCLE(\'ICRS\', 10.68479, 41.26906, 0.013))=1`,
FROM neowiser_p1bs_psd WHERE CONTAINS(POINT('ICRS', ra, dec), CIRCLE('ICRS', 10.68479, 41.26906, 0.013))=1`,
}
},
{
Expand All @@ -143,7 +143,7 @@ FROM neowiser_p1bs_psd WHERE CONTAINS(POINT('ICRS', ra, dec), CIRCLE(\'ICRS\', 1
service: 'https://irsa.ipac.caltech.edu/TAP',
adql:
`SELECT ra,dec,sigra,sigdec,sigradec,w2mpro,w2sigmpro,w2snr,w2rchi2,w2mpro_allwise,w2sigmpro_allwise,w3mpro_allwise,w3sigmpro_allwise \
FROM neowiser_p1bs_psd WHERE CONTAINS(POINT('ICRS', ra, dec), CIRCLE(\'ICRS\', 10.68479, 41.26906, 0.013))=1`,
FROM neowiser_p1bs_psd WHERE CONTAINS(POINT('ICRS', ra, dec), CIRCLE('ICRS', 10.68479, 41.26906, 0.013))=1`,
execute: 'true',
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/astro/net/Resolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export var parseResolver= function(resolveStr) {
if (!resolveStr) return undefined;
var retval= null;
for( var resolveType in Resolver) {
if( Resolver.hasOwnProperty( resolveType ) ) {
if (Object.hasOwn(Resolver, resolveType)) {
if (resolveStr.toLowerCase()===Resolver[resolveType].key) {
retval= Resolver[resolveType];
break;
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/charts/ChartUtil.js
Original file line number Diff line number Diff line change
Expand Up @@ -727,7 +727,7 @@ export function getDataChangesForMappings({tableModel, mappings, traceNum}) {

let getDataVal;
const changes = {};
changes[`fireflyData.${traceNum}.isLoading`] = !Boolean(tableModel);
changes[`fireflyData.${traceNum}.isLoading`] = !tableModel;
if (tableModel) {
const cols = tableModel.tableData.columns.map((c) => c.name);
const transposed = tableModel.tableData.columns.map(() => []);
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/charts/ChartsCntlr.js
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ function chartUpdate(action) {
return (dispatch) => {
const {chartId, changes, replaceTableSources=false} = action.payload;
// when selection is undefined, selections layer must be removed
if (changes.hasOwnProperty('selection') && !changes.selection) changes['layout.selections'] = [];
if (Object.hasOwn(changes, 'selection') && !changes.selection) changes['layout.selections'] = [];
// remove any table's mappings from changes because it will be applied by the connectors.
const changesWithoutTblMappings = omitBy(changes, (v) => isString(v) && v.match(TBL_SRC_PATTERN));
set(action, 'payload.changes', changesWithoutTblMappings);
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/charts/ui/ChartsContainer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ export const ActiveChartsPanel = (props) => {
chartId,
tbl_group,
toolbarVariant,
showToolbar: !Boolean(noChartToolbar),
showToolbar: !noChartToolbar,
}}/>
);
}
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/charts/ui/MultiChartViewer.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ export class MultiChartViewer extends PureComponent {
//console.log('Active chart ID: '+activeItemId);

const ToolBar = expandedMode ? MultiChartToolbarExpanded : MultiChartToolbarStandard;
const showChartToolbar = !Boolean(noChartToolbar);
const showChartToolbar = !noChartToolbar;

const borderSettings= useBorder ?
{border: '1px solid', borderColor: 'divider', borderRadius: '5px'} : {};
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/charts/ui/PlotlyWrapper.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ function deltas(a, b, wrapArray=true) {
const doDiff = (a2, b2, r, wrapArray) => {
forEach(a2, function(v, k) {
// already checked this or equal or original has no value...
if (b2 && (r.hasOwnProperty(k) || shallowequal(b2[k], v))) return;
if (b2 && (Object.hasOwn(r, k) || shallowequal(b2[k], v))) return;
// but what if it returns an empty object? still attach?
r[k] = b2 && isPlainObject(v) ? diff(v, b2[k], wrapArray) : v;
if (wrapArray && Array.isArray(r[k])) {
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/core/AppDataCntlr.js
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ export function dispatchConnectionStatus({lost, reason}) {
export function dispatchNotifyRemoteAppReady() {
const channel= getWsChannel();
if (!channel) return;
const [, sourceChannel, app] = channel.match(channel_matcher) || [,channel];
const [, sourceChannel, app] = channel.match(channel_matcher) || [undefined, channel];
dispatchRemoteAction(sourceChannel,{ type : NOTIFY_REMOTE_APP_READY, payload: {ready:true, viewerChannel:channel}});
}

Expand Down
3 changes: 0 additions & 3 deletions src/firefly/js/core/background/BackgroundCntlr.js
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,6 @@ function reducer(state={}, action={}) {
nstate = TblUtil.smartMerge(nstate, updates);
}
return nstate;
break;
case BG_LOAD_JOBS: {
const {jobs, overflow} = action.payload;
let nstate = state;
Expand All @@ -256,14 +255,12 @@ function reducer(state={}, action={}) {
nstate = updateObject(nstate, updates);
}
return nstate;
break;
}
case BG_SET_INFO : {
const {email, notifEnabled} = action.payload;
let nstate = updateSet(state, 'email', email);
nstate = updateSet(nstate, 'notifEnabled', notifEnabled);
return nstate;
break;
}
default:
return state;
Expand Down
1 change: 0 additions & 1 deletion src/firefly/js/drawingLayers/Artifact.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,6 @@ function getLayerChanges(drawLayer, action) {
const {tableModel}= action.payload.changes;
return tableModel ? Object.assign({tableModel}, createDrawData(drawLayer, tableModel)) :
{tableModel:null, drawData: null};
break;

case ATTACH_LAYER_TO_PLOT:
case CHANGE_VISIBILITY:
Expand Down
14 changes: 7 additions & 7 deletions src/firefly/js/drawingLayers/ComputeWebGridData.js
Original file line number Diff line number Diff line change
Expand Up @@ -133,28 +133,28 @@ function getRangeFromFourSides(plot, csys, cc){
var wLen, hLen;
wLen = width/det;
hLen = height/det;
for (var i=0; i<wLen; i++){
for (let i=0; i<wLen; i++){
x=i*det;
y=0;
points1[i]= cc.getWorldCoords(makeDevicePt(x, y), csys);
}
//from 0,0 to 0, height: (0, 0) - (0, height)
for (var i=0; i<hLen; i++){
for (let i=0; i<hLen; i++){
x=0;
y=i*det;
points2[i]= cc.getWorldCoords(makeDevicePt(x, y), csys);
}

//from (0, height) - (width, height)
for (var i=0; i<wLen; i++){
for (let i=0; i<wLen; i++){
x=i*det;
y=height;
points3[i]= cc.getWorldCoords(makeDevicePt(x, y), csys);
}

//from (width, 0) - (width, height)
//from 0,0 to 0, height: (0, 0) - (0, height)
for (var i=0; i<hLen; i++){
for (let i=0; i<hLen; i++){
x=width;
y=i*det;
points4[i]= cc.getWorldCoords(makeDevicePt(x, y), csys);
Expand Down Expand Up @@ -753,7 +753,7 @@ function findPoints(cc,csys, intervals, x0, y0,dx, dy, opoints){
if (opoints) {
i0 = 1;
di = 2;
for (var i=0; i <= intervals; i += 2) {
for (let i=0; i <= intervals; i += 2) {
xpoints[0][i] = opoints[0][Math.trunc(i/2)];
xpoints[1][i] = opoints[1][Math.trunc(i/2)];
}
Expand All @@ -764,7 +764,7 @@ function findPoints(cc,csys, intervals, x0, y0,dx, dy, opoints){
}

var sharedLon, wpt, ip, xy,sharedLat,tx, ty;
for (var i=i0; i <= intervals; i += di) {
for (let i=i0; i <= intervals; i += di) {
tx= x0+i*dx;
tx = tx > 360?tx-360:tx;
tx=tx<0?tx+360:tx;
Expand Down Expand Up @@ -1367,7 +1367,7 @@ function getLevels(ranges,factor, maxLines){
levels[i]=[];
}
else if ( Math.abs(min - (-90.0)) < 0.1 && Math.abs(max - 90.0) <0.1){ //include both poles
levels[i]= [-75.,-60., -45., -30., -15., 0.,
15., 30., 45., 60., 75.];
levels[i]= [-75.,-60., -45., -30., -15., 0., 15., 30., 45., 60., 75.];
}
else {
/* LZ DM-10491: introduced this simple algorithm to calculate the intervals. The previous one
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/drawingLayers/FootprintTool.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import {
} from './MarkerTool.js';
import {getFootprintToolUIComponent} from './FootprintToolUI.jsx';
import ShapeDataObj from '../visualize/draw/ShapeDataObj.js';
import {clone} from '../util/WebUtil.js'
import {clone} from '../util/WebUtil.js';
import {getDS9Region} from '../rpc/PlotServicesJson.js';
import {FootprintFactory} from '../visualize/draw/FootprintFactory.js';
import {makeImagePt} from '../visualize/Point.js';
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/drawingLayers/SearchTarget.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ function creator(initPayload, presetDefaults) {
destroyWhenAllDetached: true,
canUserChangeColor: ColorChangeType.DYNAMIC,
canUserDelete,
allocatedColor: !Boolean(color),
allocatedColor: !color,
};
return DrawLayer.makeDrawLayer(drawLayerId || `${ID}-${idCnt}`,TYPE_ID, {}, options, drawingDef, [RECENTER, UPDATE_SEARCH_TARGET]);
}
Expand Down
6 changes: 3 additions & 3 deletions src/firefly/js/fieldGroup/FieldGroupUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ function validateSingle(groupKey, includeUnmounted) {
const newValue= fields[key].value();
if (typeof newValue=== 'object' && // check to see if return is an object that includes {value: any} and not a promise
!newValue.then &&
newValue.hasOwnProperty('value') ) {
dispatchValueChange({valid:true,fieldKey:key,groupKey,...newValue});
Object.hasOwn(newValue, 'value') ) {
dispatchValueChange({valid:true, fieldKey:key, groupKey, ...newValue});
}
else {
dispatchValueChange({fieldKey:key,groupKey,valid:true,value:newValue});
dispatchValueChange({valid:true, fieldKey:key, groupKey, value:newValue});
}
}
});
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/metaConvert/DataProductsWatcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ function watchDataProductsTable(tbl_id, action, cancelSelf, params) {
const dpView= getViewer(mvRoot, dataTypeViewerId);

if (!action) {
if (paused) paused= !Boolean(imView || dpView);
if (paused) paused= !(imView || dpView);
if (!paused && getActiveTableId()===tbl_id) {
updateDataProducts(factoryKey, null, firstTime, tbl_id, activateParams);
firstTime= false;
Expand Down
4 changes: 2 additions & 2 deletions src/firefly/js/tables/__tests__/FilterInfo-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ describe('FilterInfo', () => {
}
};

TblUtil.getTblById = jest.fn().mockReturnValue(aStringColumn); // mock getTblById to return the aStringColumn table
jest.spyOn(TblUtil, 'getTblById').mockReturnValue(aStringColumn); // mock getTblById to return the aStringColumn table

let actual = FilterInfo.conditionValidator('=abc', 'a_fake_tbl_id', 'desc');
expect(actual.valid).toBe(true);
Expand All @@ -36,7 +36,7 @@ describe('FilterInfo', () => {
}
};

TblUtil.getTblById = jest.fn().mockReturnValue(aNumericColumn); // once again mock getTblById to return the different (numeric) table
jest.spyOn(TblUtil, 'getTblById').mockReturnValue(aNumericColumn); // once again mock getTblById to return the different (numeric) table

const {valid, value} = FilterInfo.conditionValidator('>1.23', 'a_fake_tbl_id', 'ra');
expect(valid).toBe(true);
Expand Down
6 changes: 3 additions & 3 deletions src/firefly/js/tables/__tests__/TableUtil-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ describe('TableUtil: datarights', () => {
],
}
};
TblUtil.getTblById = jest.fn().mockReturnValue(table);
jest.spyOn(TblUtil, 'getTblById').mockReturnValue(table);

const dataRoot = dataReducer({data:{id123: table}}, {type: TABLE_LOADED, payload: table});
const otable = get(dataRoot, 'id123');
Expand All @@ -378,7 +378,7 @@ describe('TableUtil: datarights', () => {
],
}
};
TblUtil.getTblById = jest.fn().mockReturnValue(table);
jest.spyOn(TblUtil, 'getTblById').mockReturnValue(table);

const dataRoot = dataReducer({data:{id123: table}}, {type: TABLE_LOADED, payload: table});
const otable = get(dataRoot, 'id123');
Expand All @@ -401,7 +401,7 @@ describe('TableUtil: datarights', () => {
],
}
};
TblUtil.getTblById = jest.fn().mockReturnValue(table);
jest.spyOn(TblUtil, 'getTblById').mockReturnValue(table);

const dataRoot = dataReducer({data:{id123: table}}, {type: TABLE_LOADED, payload: table});
const otable = get(dataRoot, 'id123');
Expand Down
4 changes: 2 additions & 2 deletions src/firefly/js/tables/reducer/TableDataReducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ function fixStatus(root, tbl_id) {
if (code && (code < 200 || code >= 400)) {
if (!table.error) { // if there error status but no error in tableModel, add error for backward compatibility.
const {message:error, cause} = parseError(message);
return updateSet(root, [tbl_id, 'error'], new Error(error, {cause}) || 'Unable to load table.');
return updateSet(root, [tbl_id, 'error'], new Error(error, {cause}));
}
}
} else {
Expand All @@ -189,6 +189,6 @@ function fixStatus(root, tbl_id) {

function parseStatus(error) {
if (!error) return {code:200, message: ''};
const [,code=500,message=error] = error.trim?.().match(/^(\d{3})\W+(.*)/) || [,,];
const [,code=500,message=error] = error.trim?.().match(/^(\d{3})\W+(.*)/) || [];
return {code, message};
}
2 changes: 1 addition & 1 deletion src/firefly/js/tables/ui/BasicTableView.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ function makeColumnTag(props, col, idx) {
tbl_id, renderers, startIdx, cellRenderers} = props;

if (col.visibility && col.visibility !== 'show') return false;
const HeadRenderer = get(renderers, [col.name, 'headRenderer'], showHeader ? HeaderCell : ({})=>null);
const HeadRenderer = renderers?.[col.name]?.headRenderer ?? (showHeader ? HeaderCell : ()=>null);
const CellRenderer = renderers?.[col.name]?.cellRenderer || cellRenderers?.[idx];
const fixed = col.fixed || false;
const {resizable=true} = col;
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/templates/fireflyviewer/LandingPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ function EmptyResults({icon, text, subtext, summaryText, actionItems, slotProps}
return (
<Sheet variant='soft' sx={{pt: 8, pb: 4, px: 2}} {...slotProps?.root}>
<Stack spacing={10} alignItems='center'>
<Stack spacing={Boolean(subtext) ? 6 : 3}>
<Stack spacing={subtext ? 6 : 3}>
<Stack spacing={2} alignItems='center'>
{icon}
<Stack spacing={.5} alignItems='center'>
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/templates/lightcurve/LcResult.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ export class LcResult extends PureComponent {
}

export function defaultDownloadPanel(mission='', cutoutSize, addtlParams={}) {
mission = mission.replace(/[\/ ]/g, '_'); // clean up mission description to be used for save as value.
mission = mission.replace(/[/ ]/g, '_'); // clean up mission description to be used for save as value.
return (
<DownloadButton
makeButton={(onClick,tbl_id,isRowSelected) => {
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/templates/lightcurve/generic/errorMsg.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export const ERROR_MSG_KEY = {
IMAGE_FETCH: 'imageFetchedError'
}
};
2 changes: 1 addition & 1 deletion src/firefly/js/ui/PositionFieldDef.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ export function formatPosForHelp(wp) {
}
}
else {
s = `<div style=\"font-size:10px;\">
s = `<div style="font-size:10px;">
${lonStr},&nbsp;${latStr}&nbsp;&nbsp;${csys}</div>`;
s += getEQJ2000(wp);
}
Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/ui/TargetFeedback.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ function formatExample(row, fieldKey, setFld) {
}
})}
</Stack>
)
);
}


Expand Down
2 changes: 1 addition & 1 deletion src/firefly/js/ui/dynamic/DLGenAnalyzeSearch.js
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ export function supportsUpload(qAna, standardID, useConcurrent= false) {
const hasUpload= getCisxUIValue(qAna,'IRSA_SIA_upload_extension') && isSIAStandardID(standardID);
if (!hasUpload) return false;
if (!useConcurrent) return true;
return !Boolean(qAna.concurrentSearchDef?.length);
return !qAna.concurrentSearchDef?.length;
}


Expand Down
Loading
Loading