Skip to content

Commit

Permalink
Safeguard against empty observables
Browse files Browse the repository at this point in the history
  • Loading branch information
ddelemeny committed Feb 21, 2024
1 parent 055080a commit 7775bbd
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 16 deletions.
16 changes: 11 additions & 5 deletions src/components/LuceneQueryEditor.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,23 @@ export function LuceneQueryEditor(props: LuceneQueryEditorProps){

const {autocompleter} = props;
const datasourceCompletions = useCallback(async (context: CompletionContext)=>{
let suggestions;
let word = context.matchBefore(/\S*/);
if (!word){ return null }
const suggestions = await autocompleter(word?.text);
return {
from: word.from + suggestions.from,
options: suggestions.options
suggestions = await autocompleter(word?.text);
if (suggestions && suggestions.options.length > 0 ) {
return {
from: word.from + suggestions.from,
options: suggestions.options
}
}
return null
}, [autocompleter])


const autocomplete = autocompletion({ override: [datasourceCompletions] })
const autocomplete = autocompletion({
override: [datasourceCompletions]
})

return (<CodeMirror
ref={editorRef}
Expand Down
25 changes: 14 additions & 11 deletions src/datasource/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -277,14 +277,15 @@ export class QuickwitDataSource
getTerms(queryDef: TermsQuery, range = getDefaultTimeRange()): Observable<MetricFindValue[]> {
const dataquery = this.getDataQueryRequest(queryDef, range)
return super.query(dataquery).pipe(
mergeMap(res=> res.data.map((df: DataFrame)=>{

return df.fields[0]!.values.map((bucket)=>({
text: bucket,
value: bucket,
}))
mergeMap(res=> {
return res.data.map((df: DataFrame)=>{
if (df.fields.length === 0) { return [] }
return df.fields[0].values.map((bucket)=>({
text: bucket,
value: bucket,
}))
})
})
)
)
}

Expand Down Expand Up @@ -335,15 +336,17 @@ export class QuickwitDataSource
* Get tag keys for adhoc filters
*/
getTagKeys(spec?: FieldCapsSpec) {
return lastValueFrom(this.getFields(spec));
const fields = this.getFields(spec)
return lastValueFrom(fields, {defaultValue:[]});
}

/**
* Get tag values for adhoc filters
*/
getTagValues(options: any) {
const range = getDefaultTimeRange();
return lastValueFrom(this.getTerms({ field: options.key }, range));
const terms = this.getTerms({ field: options.key }, range)
return lastValueFrom(terms, {defaultValue:[]});
}

/**
Expand Down Expand Up @@ -436,12 +439,12 @@ export class QuickwitDataSource
if (query) {
if (parsedQuery.find === 'fields') {
parsedQuery.type = this.interpolateLuceneQuery(parsedQuery.type);
return lastValueFrom(this.getFields({aggregatable:true, type:parsedQuery.type, _range:range}));
return lastValueFrom(this.getFields({aggregatable:true, type:parsedQuery.type, _range:range}), {defaultValue:[]});
}
if (parsedQuery.find === 'terms') {
parsedQuery.field = this.interpolateLuceneQuery(parsedQuery.field);
parsedQuery.query = this.interpolateLuceneQuery(parsedQuery.query);
return lastValueFrom(this.getTerms(parsedQuery, range));
return lastValueFrom(this.getTerms(parsedQuery, range), {defaultValue:[]});
}
}
return Promise.resolve([]);
Expand Down

0 comments on commit 7775bbd

Please sign in to comment.