Skip to content

Commit

Permalink
finalize PR
Browse files Browse the repository at this point in the history
  • Loading branch information
nafiz1001 committed Sep 16, 2024
1 parent d598c7c commit beda6ee
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 25 deletions.
14 changes: 9 additions & 5 deletions frontend/src/components/datasets/DatasetDetailContent.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Descriptions, Spin } from "antd"
import React, { useEffect, useState } from "react"
import React, { useCallback, useEffect, useState } from "react"
import { useParams } from "react-router-dom"
import { useAppDispatch, useAppSelector } from '../../hooks'
import { get } from "../../modules/datasets/actions"
Expand All @@ -17,7 +17,7 @@ const DatasetDetailContent = () => {
const datasetsById = useAppSelector(selectDatasetsByID)
const dispatch = useAppDispatch()
const { id: datasetId } = useParams();
const dataset: Dataset | undefined = datasetsById[datasetId!];
const dataset: Dataset | undefined = datasetId ? datasetsById[datasetId] : undefined
const [laneValidationStatus, setLaneValidationStatus] = useState<ValidationStatus>()
useEffect(() => {
if (!dataset) {
Expand All @@ -41,8 +41,12 @@ const DatasetDetailContent = () => {
const loading = (value: string | number | undefined) => {
return value ?? "Loading..."
}

console.info(dataset, laneValidationStatus)

const refreshDataset = useCallback(async () => {
if (datasetId) {
await dispatch(get(datasetId))
}
}, [datasetId, dispatch])

return <>
<AppPageHeader
Expand Down Expand Up @@ -74,7 +78,7 @@ const DatasetDetailContent = () => {
<Descriptions.Item label={"Readsets Released"} span={1}>{loading(dataset?.released_status_count)}</Descriptions.Item>
</Descriptions>
{dataset && laneValidationStatus !== undefined
? <ReadsetsListContent dataset={dataset} laneValidationStatus={laneValidationStatus} />
? <ReadsetsListContent dataset={dataset} laneValidationStatus={laneValidationStatus} refreshDataset={refreshDataset} />
: <Spin />}
</div>
</PageContent>
Expand Down
50 changes: 33 additions & 17 deletions frontend/src/components/readsets/ReadsetsListContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { ReleaseStatus } from "../../models/fms_api_models";
import { ExpandableConfig } from "antd/lib/table/interface";
import api from "../../utils/api";
import produce from "immer";
import { useCurrentUser } from "../../hooks/useCurrentUser";

const RELEASE_STATUS_STRING = {
[ReleaseStatus.RELEASED]: 'Released',
Expand All @@ -37,9 +38,13 @@ const OPPOSITE_STATUS = {
interface ReadsetsListContentProps {
dataset: Dataset
laneValidationStatus: ValidationStatus
refreshDataset: () => Promise<void>
}

const ReadsetsListContent = ({ dataset, laneValidationStatus }: ReadsetsListContentProps) => {
const ReadsetsListContent = ({ dataset, laneValidationStatus, refreshDataset }: ReadsetsListContentProps) => {
const user = useCurrentUser()
const isAdmin = user ? user.is_staff : false

const readsetTableState = useAppSelector(selectReadsetsTable)
const readsetTableCallbacks = usePagedItemsActionsCallbacks(ReadsetTableActions)
const dispatch = useAppDispatch()
Expand All @@ -55,12 +60,16 @@ const ReadsetsListContent = ({ dataset, laneValidationStatus }: ReadsetsListCont
dispatch(ReadsetTableActions.listPage(1))
}, [dataset.id, dispatch])

const canReleaseOrBlockReadsets = (laneValidationStatus === ValidationStatus.PASSED || laneValidationStatus === ValidationStatus.FAILED)
const canReleaseOrBlockReadsets =
(!dataset.latest_release_update && (laneValidationStatus === ValidationStatus.PASSED || laneValidationStatus === ValidationStatus.FAILED)) ||
( dataset.latest_release_update && isAdmin)

const releaseStatusManager = useReleaseStatusManager(dataset.id)

const renderReleaseStatus = useCallback((_: any, { readset }: ObjectWithReadset) => (
<ReleaseStatusButton releaseStatus={releaseStatusManager.readsetReleaseStates[readset.id]} disabled={!canReleaseOrBlockReadsets}
<ReleaseStatusButton
releaseStatus={releaseStatusManager.readsetReleaseStates[readset.id]}
disabled={!canReleaseOrBlockReadsets}
onClick={() => {
const { id } = readset
releaseStatusManager.toggleReleaseStatus(id)
Expand Down Expand Up @@ -91,25 +100,29 @@ const ReadsetsListContent = ({ dataset, laneValidationStatus }: ReadsetsListCont
}

const allReadsetsReleased = !someReadsetsAvailable && !someReadsetsBlocked
const releaseAllEnabled = !allReadsetsReleased && canReleaseOrBlockReadsets

const allReadsetsBlocked = !someReadsetsAvailable && !someReadsetsReleased
const undoChangesEnabled = someReadsetsChangedStatus
const saveChangesEnabled = someReadsetsChangedStatus && allReadsetsReleasedOrBlocked
const blockAllEnabled = !allReadsetsBlocked && canReleaseOrBlockReadsets

const undoChangesEnabled = someReadsetsChangedStatus && canReleaseOrBlockReadsets
const saveChangesEnabled = someReadsetsChangedStatus && allReadsetsReleasedOrBlocked && canReleaseOrBlockReadsets

return <div>
<Button
style={{ margin: 6 }}
onClick={() => {
releaseStatusManager.setAllReleaseStatus(ReleaseStatus.RELEASED)
}}
disabled={allReadsetsReleased}>
disabled={!releaseAllEnabled}>
Release All
</Button>
<Button
style={{ margin: 6 }}
onClick={() => {
releaseStatusManager.setAllReleaseStatus(ReleaseStatus.BLOCKED)
}}
disabled={allReadsetsBlocked}>
disabled={!blockAllEnabled}>
Block All
</Button>
<Button
Expand All @@ -122,16 +135,17 @@ const ReadsetsListContent = ({ dataset, laneValidationStatus }: ReadsetsListCont
</Button>
<Button
style={{ margin: 6 }}
onClick={() => {
releaseStatusManager.updateReleaseStatus(filters)
onClick={async () => {
await releaseStatusManager.updateReleaseStatus(filters)
await refreshDataset()
}}
type={"primary"}
disabled={!saveChangesEnabled}>
Save Changes
</Button>
</div>
},
[filters, releaseStatusManager])
[canReleaseOrBlockReadsets, filters, refreshDataset, releaseStatusManager])

const mapContainerIDs = useItemsByIDToDataObjects(selectReadsetsByID, wrapReadset)

Expand Down Expand Up @@ -236,7 +250,7 @@ function useReleaseStatusManager(datasetID: Dataset["id"]) {
}
}
await dispatch(api.datasets.setReleaseStatus(datasetID, finalNewReleaseStates, filters))
await dispatch(ReadsetTableActions.refreshPage())
// await dispatch(ReadsetTableActions.refreshPage()) // already updated implicitly by refreshDataset
for (const key in finalNewReleaseStates) {
setReadsetReleaseStates(produce((prev) => {
prev[key] = {
Expand Down Expand Up @@ -357,7 +371,8 @@ interface ReleaseStatusButtonProps {
function ReleaseStatusButton({ releaseStatus, disabled, onClick }: ReleaseStatusButtonProps) {
const newReleaseStatus = releaseStatus?.new
const oldReleaseStatus = releaseStatus?.old
return (oldReleaseStatus !== undefined ? <Button
return (oldReleaseStatus !== undefined
? <Button
disabled={disabled}
style={{
color: newReleaseStatus != oldReleaseStatus && newReleaseStatus !== undefined
Expand All @@ -368,11 +383,12 @@ function ReleaseStatusButton({ releaseStatus, disabled, onClick }: ReleaseStatus
width: "6em"
}}
onClick={onClick}
>
{newReleaseStatus !== undefined
? RELEASE_STATUS_STRING[newReleaseStatus]
: RELEASE_STATUS_STRING[oldReleaseStatus]}
</Button> : <Spin />)
>
{newReleaseStatus !== undefined
? RELEASE_STATUS_STRING[newReleaseStatus]
: RELEASE_STATUS_STRING[oldReleaseStatus]}
</Button>
: <Spin />)
}

function checkIfDecimal(str: string) {
Expand Down
5 changes: 2 additions & 3 deletions frontend/src/utils/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,11 @@ const api = {
},

datasets: {
get: id => get(`/datasets/${id}/`),
get: (id: FMSDataset["id"]) => get<JsonResponse<FMSDataset>>(`/datasets/${id}/`),
list: (options, abort?) => get("/datasets/", options, { abort }),
setReleaseStatus: (
id: Dataset["id"],
updates: Record<Readset["id"],
ReleaseStatus.RELEASED | ReleaseStatus.BLOCKED>,
updates: Record<Readset["id"], ReleaseStatus.RELEASED | ReleaseStatus.BLOCKED>,
filters = {}
) => patch<JsonResponse<FMSDataset>>(`/datasets/${id}/set_release_status/`, { updates, filters }),
addArchivedComment: (id, comment) => post(`/datasets/${id}/add_archived_comment/`, { comment })
Expand Down

0 comments on commit beda6ee

Please sign in to comment.