Skip to content

Commit

Permalink
#1259 circuit browser filter labels
Browse files Browse the repository at this point in the history
  • Loading branch information
jrmartin committed Nov 19, 2021
1 parent 463b104 commit ac3235e
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 22 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var locationCypherQuery = ( instances, paths, weight, autosuggest ) => ({
var locationCypherQuery = ( instances, paths, weight ) => ({
"statements": [
{
"statement" : "WITH [" + instances + "] AS neurons"
Expand All @@ -14,7 +14,6 @@ var locationCypherQuery = ( instances, paths, weight, autosuggest ) => ({
+ " relationshipWeightProperty: 'weight_p',"
+ " relationshipTypes: ['*'],"
+ " path: true"
+ " fq: ['shortform_autosuggest:" + autosuggest + "']"
+ "})"
+ " YIELD index, sourceNode, targetNode, nodeIds, path"
+ " WITH * ORDER BY index DESC"
Expand All @@ -26,19 +25,11 @@ var locationCypherQuery = ( instances, paths, weight, autosuggest ) => ({
]
});

var autosuggestFormat = query => {
if ( query?.startsWith("VFB") ){
return "shortform_autosuggest:VFB*";
} else if ( query?.startsWith("FB") ){
return "shortform_autosuggest:FB*";
} else if ( query?.startsWith("DataSet") ){
return "facets_annotation:DataSet";
} else if ( query?.startsWith("pub") ){
return "facets_annotation:pub";
}

return "";
};
var Neo4jLabels = {
FAFB : "FAFB",
L1EM : "L1EM",
FlyEM_HB : "FlyEM_HB"
}

// See query explanation on https://github.com/VirtualFlyBrain/graph_queries/blob/main/weighted_path.md

Expand Down Expand Up @@ -137,5 +128,5 @@ module.exports = {
styling,
restPostConfig,
locationCypherQuery,
autosuggestFormat
Neo4jLabels
};
32 changes: 30 additions & 2 deletions components/interface/VFBCircuitBrowser/Controls.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,9 +120,11 @@ const configuration = require('../../configuration/VFBCircuitBrowser/circuitBrow
const restPostConfig = require('../../configuration/VFBCircuitBrowser/circuitBrowserConfiguration').restPostConfig;
const cypherQuery = require('../../configuration/VFBCircuitBrowser/circuitBrowserConfiguration').locationCypherQuery;
const stylingConfiguration = require('../../configuration/VFBCircuitBrowser/circuitBrowserConfiguration').styling;
const Neo4jLabels = require('../../configuration/VFBCircuitBrowser/circuitBrowserConfiguration').Neo4jLabels;

const searchConfiguration = require('./../../configuration/VFBCircuitBrowser/datasources/SOLRclient').searchConfiguration;
const datasourceConfiguration = require('./../../configuration/VFBCircuitBrowser/datasources/SOLRclient').datasourceConfiguration;
const defaultDatasourceConfiguration = require('./../../configuration/VFBCircuitBrowser/datasources/SOLRclient').datasourceConfiguration;
const datasourceConfiguration = JSON.parse(JSON.stringify(defaultDatasourceConfiguration));

/**
* Create custom marks for Paths slider.
Expand Down Expand Up @@ -161,6 +163,10 @@ class AutocompleteResults extends Component {
this.setState({ filteredResults : results });
}

clearResults () {
this.setState({ filteredResults : {} });
}

getFilteredResults (){
return this.state.filteredResults;
}
Expand All @@ -179,8 +185,10 @@ class AutocompleteResults extends Component {
fullWidth
freeSolo
disableClearable
clearOnEscape
disablePortal
autoHighlight
clearOnBlur
value={this.fieldLabel}
id={this.props.index.toString()}
ListboxProps={{ style: { maxHeight: "10rem" } }}
Expand Down Expand Up @@ -267,6 +275,12 @@ class Controls extends Component {
this.props.vfbCircuitBrowser(UPDATE_CIRCUIT_QUERY, neurons);
delete this.autocompleteRef[id.toString()];
this.neuronFields = neurons;

if ( !this.state.neurons.find( neuron => neuron.id != "") ) {
// reset configuration of fq to default
datasourceConfiguration.query_settings.fq = defaultDatasourceConfiguration.query_settings.fq;
}

this.forceUpdate();
}

Expand Down Expand Up @@ -360,6 +374,12 @@ class Controls extends Component {
getResultsSOLR( event.target.value, this.autocompleteRef[this.setInputValue].current.handleResults,searchConfiguration.sorter,datasourceConfiguration );
}
this.neuronFields = neurons;

if ( !this.neuronFields.find( neuron => neuron.id != "") ) {
// reset configuration of fq to default
this.autocompleteRef[this.setInputValue].current.clearResults();
datasourceConfiguration.query_settings.fq = defaultDatasourceConfiguration.query_settings.fq;
}
}

/**
Expand All @@ -369,9 +389,17 @@ class Controls extends Component {
// Copy neurons and add selection to correct array index
let neurons = this.neuronFields;
let textFieldId = event.target.id.toString().split("-")[0];
let shortForm = this.autocompleteRef[textFieldId].current.getFilteredResults()[value] && this.autocompleteRef[textFieldId].current.getFilteredResults()[value].short_form;
let result = this.autocompleteRef[textFieldId].current.getFilteredResults()[value];
let shortForm = result && result.short_form;
neurons[index] = { id : shortForm, label : value };

result.facets_annotation.forEach( annotation => {
let facet = "facets_annotation:" + annotation;
if ( Object.values(Neo4jLabels).includes(annotation) && !datasourceConfiguration.query_settings.fq.includes(facet) ) {
datasourceConfiguration.query_settings.fq.push(facet);
}
});

// Keep track of query selected, and send an event to redux store that circuit has been updated
this.circuitQuerySelected = neurons;
this.props.vfbCircuitBrowser(UPDATE_CIRCUIT_QUERY, neurons);
Expand Down
5 changes: 1 addition & 4 deletions components/interface/VFBCircuitBrowser/VFBCircuitBrowser.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ const styles = theme => ({
const configuration = require('../../configuration/VFBCircuitBrowser/circuitBrowserConfiguration').configuration;
const restPostConfig = require('../../configuration/VFBCircuitBrowser/circuitBrowserConfiguration').restPostConfig;
const cypherQuery = require('../../configuration/VFBCircuitBrowser/circuitBrowserConfiguration').locationCypherQuery;
const autosuggestFormat = require('../../configuration/VFBCircuitBrowser/circuitBrowserConfiguration').autosuggestFormat;
const stylingConfiguration = require('../../configuration/VFBCircuitBrowser/circuitBrowserConfiguration').styling;

/**
Expand Down Expand Up @@ -198,10 +197,8 @@ class VFBCircuitBrowser extends Component {
if (this.__isMounted){
// Show loading spinner while cypher query search occurs
this.setState({ loading : true , neurons : neurons ? neurons : this.state.neurons, paths : paths ? paths : this.state.paths, weight : weight ? weight : this.state.weight, queryLoaded : false });
let suggestion = this.state.neurons.find( neuron => neuron.id != "" )?.id;
console.log("Suggestion ", suggestion);
// Perform cypher query. TODO: Remove hardcoded weight once edge weight is implemented
this.queryResults(cypherQuery(neurons ? neurons.map(a => `'${a.id}'`).join(",") : this.state.neurons, paths ? paths : this.state.paths, weight ? weight : this.state.weight, autosuggestFormat(suggestion)));
this.queryResults(cypherQuery(neurons ? neurons.map(a => `'${a.id}'`).join(",") : this.state.neurons, paths ? paths : this.state.paths, weight ? weight : this.state.weight));
}
}

Expand Down

0 comments on commit ac3235e

Please sign in to comment.