-
Notifications
You must be signed in to change notification settings - Fork 94
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Nu-1890] hide categories from a scenarios list and more scenario details when only one category is available #7183
Changes from all commits
e7d988a
b519119
022b1a2
495e87c
dbfd5d7
28de0bd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,37 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { useEffect, useState } from "react"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import HttpService, { ProcessingMode, ScenarioParametersCombination } from "../http/HttpService"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { useProcessFormDataOptions } from "./useProcessFormDataOptions"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
interface Props { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processCategory: string; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processingMode: ProcessingMode; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processEngine: string; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
export const useGetAllCombinations = ({ processCategory, processingMode, processEngine }: Props) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const [allCombinations, setAllCombinations] = useState<ScenarioParametersCombination[]>([]); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const [engineSetupErrors, setEngineSetupErrors] = useState<Record<string, string[]>>({}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const [isAllCombinationsLoading, setIsAllCombinationsLoading] = useState<boolean>(false); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const { isCategoryFieldVisible } = useProcessFormDataOptions({ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
allCombinations, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
value: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processCategory, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processingMode, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
processEngine, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
useEffect(() => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setIsAllCombinationsLoading(true); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HttpService.fetchScenarioParametersCombinations() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.then((response) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setAllCombinations(response.data.combinations); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setEngineSetupErrors(response.data.engineSetupErrors); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.finally(() => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
setIsAllCombinationsLoading(false); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, []); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+24
to
+34
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add error handling and cleanup to the fetch effect The current implementation lacks error handling and cleanup for the fetch request. Consider these improvements: useEffect(() => {
+ const abortController = new AbortController();
setIsAllCombinationsLoading(true);
- HttpService.fetchScenarioParametersCombinations()
+ HttpService.fetchScenarioParametersCombinations({ signal: abortController.signal })
.then((response) => {
setAllCombinations(response.data.combinations);
setEngineSetupErrors(response.data.engineSetupErrors);
})
+ .catch((error) => {
+ if (!error.name === 'AbortError') {
+ console.error('Failed to fetch scenario parameters:', error);
+ setEngineSetupErrors(prev => ({
+ ...prev,
+ fetch: ['Failed to load scenario parameters']
+ }));
+ }
+ })
.finally(() => {
setIsAllCombinationsLoading(false);
});
+ return () => {
+ abortController.abort();
+ };
}, []); 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return { allCombinations, isAllCombinationsLoading, isCategoryFieldVisible, engineSetupErrors }; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Hook requires test coverage for critical functionality
The
useGetAllCombinations
hook contains important business logic including:Currently, there are no dedicated tests for this hook. Given its critical role in:
Test coverage should be added to ensure reliability.
Key areas to test:
🔗 Analysis chain
Verify test coverage for useGetAllCombinations hook
The component now relies on this hook for critical functionality. Ensure comprehensive test coverage exists for the hook, especially for edge cases around category visibility determination.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 168
Script:
Length of output: 621
Script:
Length of output: 1949