Create state for each study

This commit is contained in:
keisuke-umezawa
2024-03-04 17:58:00 +09:00
parent 3745b23eb9
commit b3a63b2d75
3 changed files with 13 additions and 11 deletions
+6 -6
View File
@@ -51,9 +51,9 @@ export const actionCreator = () => {
const setStudySummariesLoading = useSetRecoilState<boolean>(
studySummariesLoadingState
)
const setStudyDetailLoading = useSetRecoilState<boolean>(
studyDetailLoadingState
)
const [studyDetailLoading, setStudyDetailLoading] = useRecoilState<
Record<number, boolean>
>(studyDetailLoadingState)
const setStudyDetailState = (studyId: number, study: StudyDetail) => {
setStudyDetails((prevVal) => {
@@ -235,7 +235,7 @@ export const actionCreator = () => {
}
const updateStudyDetail = (studyId: number) => {
setStudyDetailLoading(true)
setStudyDetailLoading({ ...studyDetailLoading, [studyId]: true })
let nLocalFixedTrials = 0
if (studyId in studyDetails) {
const currentTrials = studyDetails[studyId].trials
@@ -247,7 +247,7 @@ export const actionCreator = () => {
}
getStudyDetailAPI(studyId, nLocalFixedTrials)
.then((study) => {
setStudyDetailLoading(false)
setStudyDetailLoading({ ...studyDetailLoading, [studyId]: false })
const currentFixedTrials =
studyId in studyDetails
? studyDetails[studyId].trials.slice(0, nLocalFixedTrials)
@@ -256,7 +256,7 @@ export const actionCreator = () => {
setStudyDetailState(studyId, study)
})
.catch((err) => {
setStudyDetailLoading(false)
setStudyDetailLoading({ ...studyDetailLoading, [studyId]: false })
const reason = err.response?.data.reason
if (reason !== undefined) {
enqueueSnackbar(`Failed to fetch study (reason=${reason})`, {
@@ -54,7 +54,9 @@ export const StudyDetail: FC<{
const action = actionCreator()
const studyId = useURLVars()
const studyDetail = useStudyDetailValue(studyId)
const isLoading = useRecoilValue<boolean>(studyDetailLoadingState)
const isLoading = useRecoilValue<Record<number, boolean>>(
studyDetailLoadingState
)
const reloadInterval = useRecoilValue<number>(reloadIntervalState)
const studyName = useStudyName(studyId)
const isPreferential = useStudyIsPreferential(studyId)
@@ -63,7 +65,7 @@ export const StudyDetail: FC<{
studyName !== null ? `${studyName} (id=${studyId})` : `Study #${studyId}`
useEffect(() => {
if (!isLoading) {
if (!isLoading[studyId]) {
action.updateStudyDetail(studyId)
}
action.updateAPIMeta()
@@ -90,7 +92,7 @@ export const StudyDetail: FC<{
}
const intervalId = setInterval(function () {
if (!isLoading) {
if (!isLoading[studyId]) {
action.updateStudyDetail(studyId)
}
}, interval)
+2 -2
View File
@@ -65,9 +65,9 @@ export const studySummariesLoadingState = atom<boolean>({
default: false,
})
export const studyDetailLoadingState = atom<boolean>({
export const studyDetailLoadingState = atom<Record<number, boolean>>({
key: "studyDetailLoading",
default: false,
default: {},
})
export const useStudyDetailValue = (studyId: number): StudyDetail | null => {