diff --git a/pkg/app/web/src/components/application-detail.test.tsx b/pkg/app/web/src/components/application-detail.test.tsx index 6737051092..2c3d40da92 100644 --- a/pkg/app/web/src/components/application-detail.test.tsx +++ b/pkg/app/web/src/components/application-detail.test.tsx @@ -5,7 +5,11 @@ import { MemoryRouter } from "react-router-dom"; import { createStore, render, screen, waitFor } from "../../test-utils"; import { server } from "../mocks/server"; import { AppState } from "../modules"; -import { syncApplication } from "../modules/applications"; +import { + Application, + syncApplication, + ApplicationSyncStatus, +} from "../modules/applications"; import { SyncStrategy } from "../modules/deployments"; import { dummyApplication } from "../__fixtures__/dummy-application"; import { dummyApplicationLiveState } from "../__fixtures__/dummy-application-live-state"; @@ -25,11 +29,25 @@ afterAll(() => { server.close(); }); +const deployingApp: Application = { + ...dummyApplication, + deploying: true, + id: "deploying-app", + syncState: { + status: ApplicationSyncStatus.DEPLOYING, + headDeploymentId: "", + reason: "", + shortReason: "", + timestamp: 0, + }, +}; + const baseState: DeepPartial = { applications: { - ids: [dummyApplication.id], + ids: [dummyApplication.id, deployingApp.id], entities: { [dummyApplication.id]: dummyApplication, + [deployingApp.id]: deployingApp, }, adding: false, disabling: {}, @@ -75,6 +93,20 @@ describe("ApplicationDetail", () => { expect(screen.getByRole("button", { name: /sync$/i })).toBeInTheDocument(); }); + it("shows application sync state as deploying if application is deploying", () => { + const store = createStore(baseState); + render( + + + , + { + store, + } + ); + + expect(screen.getByText("Deploying")).toBeInTheDocument(); + }); + describe("sync", () => { it("dispatch sync action if click sync button", async () => { const store = createStore(baseState); diff --git a/pkg/app/web/src/components/application-detail.tsx b/pkg/app/web/src/components/application-detail.tsx index 5144ffde50..9c42402b74 100644 --- a/pkg/app/web/src/components/application-detail.tsx +++ b/pkg/app/web/src/components/application-detail.tsx @@ -24,6 +24,7 @@ import { AppState } from "../modules"; import { Application, ApplicationDeploymentReference, + ApplicationSyncStatus, fetchApplication, selectById as selectApplicationById, syncApplication, @@ -235,10 +236,17 @@ export const ApplicationDetail: FC = memo(function ApplicationDetail({ {app?.syncState ? ( <> - + - {APPLICATION_SYNC_STATUS_TEXT[app.syncState.status]} + {app.deploying + ? APPLICATION_SYNC_STATUS_TEXT[ + ApplicationSyncStatus.DEPLOYING + ] + : APPLICATION_SYNC_STATUS_TEXT[app.syncState.status]} diff --git a/pkg/app/web/src/components/application-list-item.tsx b/pkg/app/web/src/components/application-list-item.tsx index 7fa894e85e..d05ee721d5 100644 --- a/pkg/app/web/src/components/application-list-item.tsx +++ b/pkg/app/web/src/components/application-list-item.tsx @@ -116,7 +116,10 @@ export const ApplicationListItem: FC = memo( {app.syncState ? ( <> - + {APPLICATION_SYNC_STATUS_TEXT[app.syncState.status]} diff --git a/pkg/app/web/src/components/sync-status-icon.stories.tsx b/pkg/app/web/src/components/sync-status-icon.stories.tsx index 9464043ded..2d0760d416 100644 --- a/pkg/app/web/src/components/sync-status-icon.stories.tsx +++ b/pkg/app/web/src/components/sync-status-icon.stories.tsx @@ -9,9 +9,12 @@ export default { export const overview: React.FC = () => ( <> - - - - + + + + ); diff --git a/pkg/app/web/src/components/sync-status-icon.tsx b/pkg/app/web/src/components/sync-status-icon.tsx index 46c42d0757..f8834130e9 100644 --- a/pkg/app/web/src/components/sync-status-icon.tsx +++ b/pkg/app/web/src/components/sync-status-icon.tsx @@ -29,11 +29,16 @@ const useStyles = makeStyles((theme) => ({ interface Props { status: ApplicationSyncStatus; + deploying: boolean; } -export const SyncStatusIcon: FC = ({ status }) => { +export const SyncStatusIcon: FC = ({ status, deploying }) => { const classes = useStyles(); + if (deploying) { + return ; + } + switch (status) { case ApplicationSyncStatus.UNKNOWN: return ;