diff --git a/backend/src/main/java/com/synbiohub/sbh3/services/AdminService.java b/backend/src/main/java/com/synbiohub/sbh3/services/AdminService.java index 226d0db6..edd16975 100644 --- a/backend/src/main/java/com/synbiohub/sbh3/services/AdminService.java +++ b/backend/src/main/java/com/synbiohub/sbh3/services/AdminService.java @@ -295,6 +295,7 @@ public String getTheme() throws IOException { json.set("suppressErrorLogs", ConfigUtil.get("suppressErrorLogs")); json.set("firstLaunch", ConfigUtil.get("firstLaunch")); json.set("uriPrefix", ConfigUtil.get("uriPrefix")); + json.set("defaultGraph", ConfigUtil.get("defaultGraph")); String result = mapper.writeValueAsString(json); return result; } diff --git a/frontend/components/Search/AdvancedSearch/AdditionalFilter.js b/frontend/components/Search/AdvancedSearch/AdditionalFilter.js index 25f3e236..eba80f72 100644 --- a/frontend/components/Search/AdvancedSearch/AdditionalFilter.js +++ b/frontend/components/Search/AdvancedSearch/AdditionalFilter.js @@ -16,6 +16,14 @@ export default function AdditionalFilter(properties) { const wrapIRI = v => (v?.startsWith("http") ? `<${v}>` : v); const searchQuery = useSelector(state => state.search.query); const privateGraphUri = useSelector(state => state.user.graphUri); + const theme = JSON.parse(localStorage.getItem('theme')) || {}; + const publicGraphUri = theme.defaultGraph || ''; + const fromClause = [ + publicGraphUri ? `FROM <${publicGraphUri}>` : '', + privateGraphUri ? `FROM <${privateGraphUri}>` : '' + ] + .filter(Boolean) + .join('\n'); useEffect(() => { const newFilters = [...properties.extraFilters]; @@ -68,7 +76,7 @@ export default function AdditionalFilter(properties) { sparql={configureQuery(searchObject, { predicate: wrapIRI(properties.extraFilters[properties.index].filter), //selectedPredicate constraints: buildFacetConstraints(properties, searchQuery, undefined, properties.index), - from: privateGraphUri ? `FROM <${privateGraphUri}>` : '' + from: fromClause })} parseResult={result => { const count = result.count ? ` (${result.count.value})` : ''; diff --git a/frontend/components/Search/AdvancedSearch/Options.js b/frontend/components/Search/AdvancedSearch/Options.js index 8d769d8e..23bd22d3 100644 --- a/frontend/components/Search/AdvancedSearch/Options.js +++ b/frontend/components/Search/AdvancedSearch/Options.js @@ -28,17 +28,26 @@ export default function Options(properties) { const searchQuery = useSelector(state => state.search.query); const username = useSelector(state => state.user.username); const privateGraphUri = useSelector(state => state.user.graphUri); + const theme = JSON.parse(localStorage.getItem('theme')) || {}; + const publicGraphUri = theme.defaultGraph || ''; + + const fromClause = [ + publicGraphUri ? `FROM <${publicGraphUri}>` : '', + privateGraphUri ? `FROM <${privateGraphUri}>` : '' + ] + .filter(Boolean) + .join('\n'); const facetQuery = (template, excludeFacet) => configureQuery(template, { constraints: buildFacetConstraints(properties, searchQuery, excludeFacet), - from: username ? `FROM <${privateGraphUri}>` : '' + from: fromClause }); // load predicates on component mount useEffect(() => { - loadPredicates(setPredicates, token, dispatch, privateGraphUri); - }, [privateGraphUri]); + loadPredicates(setPredicates, token, dispatch, fromClause); + }, [fromClause]); // map through extra filters to display them const filterDisplay = properties.extraFilters.map((element, index) => { @@ -182,16 +191,15 @@ export default function Options(properties) { } // function to load predicates -const loadPredicates = async (setPredicates, token, dispatch, privateGraphUri) => { - const results = await fetchPredicates(token, dispatch, privateGraphUri); +const loadPredicates = async (setPredicates, token, dispatch, fromClause) => { + const results = await fetchPredicates(token, dispatch, fromClause); setPredicates(results); }; // function to fetch predicates -const fetchPredicates = async (token, dispatch, privateGraphUri) => { - const from = privateGraphUri ? `FROM <${privateGraphUri}>` : ''; +const fetchPredicates = async (token, dispatch, fromClause) => { const url = `${publicRuntimeConfig.backend}/sparql?query=${encodeURIComponent( - configureQuery(getPredicates, { from }) + configureQuery(getPredicates, { from: fromClause || '' }) )}`; try { const headers = {