From 1616a82aa6705e1a811659f0761cf3bd9a01fe9d Mon Sep 17 00:00:00 2001 From: wbglaeser Date: Sun, 16 Jun 2024 22:13:09 +0200 Subject: [PATCH] hydrate eligibility overview --- .../requirement-profiles-hydration.json | 11 +++++++++++ .../requirement-profiles.json | 0 .../EligibilityOverviewScreen.js | 10 +++++++--- .../components/EligibilityOverviewList.js | 2 +- .../hooks/useFetchEligibilityReports.js | 11 ++++++----- .../hooks/useFetchHydrationData.js | 17 +++++++++++++++++ src/services/validationService.js | 2 +- 7 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 public/assets/data/requirement-profiles/requirement-profiles-hydration.json rename public/assets/data/{ => requirement-profiles}/requirement-profiles.json (100%) create mode 100644 src/screens/eligibilty-overview/hooks/useFetchHydrationData.js diff --git a/public/assets/data/requirement-profiles/requirement-profiles-hydration.json b/public/assets/data/requirement-profiles/requirement-profiles-hydration.json new file mode 100644 index 00000000..fbc4ba93 --- /dev/null +++ b/public/assets/data/requirement-profiles/requirement-profiles-hydration.json @@ -0,0 +1,11 @@ +{ + "https://foerderfunke.org/default#eauto": { + "title": "E-Auto" + }, + "https://foerderfunke.org/default#kindergeld": { + "title": "Kindergeld" + }, + "https://foerderfunke.org/default#kinderzuschlag": { + "title": "Kinderzuschlag" + } +} diff --git a/public/assets/data/requirement-profiles.json b/public/assets/data/requirement-profiles/requirement-profiles.json similarity index 100% rename from public/assets/data/requirement-profiles.json rename to public/assets/data/requirement-profiles/requirement-profiles.json diff --git a/src/screens/eligibilty-overview/EligibilityOverviewScreen.js b/src/screens/eligibilty-overview/EligibilityOverviewScreen.js index 4bb7c9bb..0dd14e66 100644 --- a/src/screens/eligibilty-overview/EligibilityOverviewScreen.js +++ b/src/screens/eligibilty-overview/EligibilityOverviewScreen.js @@ -4,15 +4,19 @@ import Layout from "../../components/Layout"; import EligibilityOverviewList from "./components/EligibilityOverviewList"; import { useValidationReportStore } from '../../storage/zustand'; import {useFetchEligibilityReports} from "./hooks/useFetchEligibilityReports"; +import {useFetchHydrationData} from "./hooks/useFetchHydrationData"; const EligibilityOverviewScreen = () => { const [eligibilityData, setEligibilityData] = useState(); const validationReport = useValidationReportStore((state) => state.validationReport); - const fetchEligibilityReports = useFetchEligibilityReports({validationReport}); + const hydrationData = useFetchHydrationData(); + const fetchEligibilityReports = useFetchEligibilityReports({validationReport, hydrationData}); useEffect(() => { - setEligibilityData(fetchEligibilityReports()); - }, [fetchEligibilityReports]); + if (hydrationData) { + setEligibilityData(fetchEligibilityReports()); + } + }, [fetchEligibilityReports, hydrationData]); return ( diff --git a/src/screens/eligibilty-overview/components/EligibilityOverviewList.js b/src/screens/eligibilty-overview/components/EligibilityOverviewList.js index 1247c25f..9aabc1c3 100644 --- a/src/screens/eligibilty-overview/components/EligibilityOverviewList.js +++ b/src/screens/eligibilty-overview/components/EligibilityOverviewList.js @@ -25,7 +25,7 @@ const EligibilityOverviewList = ({items, eligble}) => { - {item} + {item.title} diff --git a/src/screens/eligibilty-overview/hooks/useFetchEligibilityReports.js b/src/screens/eligibilty-overview/hooks/useFetchEligibilityReports.js index c674df1c..5d9d42d7 100644 --- a/src/screens/eligibilty-overview/hooks/useFetchEligibilityReports.js +++ b/src/screens/eligibilty-overview/hooks/useFetchEligibilityReports.js @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { ValidationResult } from '@foerderfunke/matching-engine'; -export const useFetchEligibilityReports = ({ validationReport }) => { +export const useFetchEligibilityReports = ({ validationReport, hydrationData }) => { return useCallback(() => { if (!validationReport || !('reports' in validationReport)) { return { @@ -20,17 +20,18 @@ export const useFetchEligibilityReports = ({ validationReport }) => { for (let report of reports) { let { rpUri, result } = report; + const title = hydrationData[rpUri]?.title || 'Unknown Title'; if (result === ValidationResult.ELIGIBLE) { - eligibilityData.eligible.push(rpUri); + eligibilityData.eligible.push({uri: rpUri, title: title}); } if (result === ValidationResult.INELIGIBLE) { - eligibilityData.nonEligible.push(rpUri); + eligibilityData.nonEligible.push({uri: rpUri, title: title}); } if (result === ValidationResult.UNDETERMINABLE) { - eligibilityData.missingData.push(rpUri); + eligibilityData.missingData.push({uri: rpUri, title: title}); } } return eligibilityData; - }, [validationReport]); + }, [validationReport, hydrationData]); }; diff --git a/src/screens/eligibilty-overview/hooks/useFetchHydrationData.js b/src/screens/eligibilty-overview/hooks/useFetchHydrationData.js new file mode 100644 index 00000000..fb63d744 --- /dev/null +++ b/src/screens/eligibilty-overview/hooks/useFetchHydrationData.js @@ -0,0 +1,17 @@ +import { useState, useEffect } from 'react'; +import readJson from '../../../utilities/readJson'; + +export const useFetchHydrationData = () => { + const [hydrationData, setHydrationData] = useState(null); + + useEffect(() => { + const fetchData = async () => { + const data = await readJson('assets/data/requirement-profiles/requirement-profiles-hydration.json'); + setHydrationData(data); + }; + + fetchData(); + }, []); // Empty dependency array ensures this runs only once + + return hydrationData; +}; diff --git a/src/services/validationService.js b/src/services/validationService.js index 9cf4f861..91651264 100644 --- a/src/services/validationService.js +++ b/src/services/validationService.js @@ -17,7 +17,7 @@ export const runValidation = async (activeUser) => { const userProfileString = await convertUserProfileToTurtle(userProfile); // load validation config - const validationConfig = await readJson('assets/data/requirement-profiles.json'); + const validationConfig = await readJson('assets/data/requirement-profiles/requirement-profiles.json'); // validate user profile against datafields const datafieldsString = await fetchTurtleResource(validationConfig['datafields']);