diff --git a/static/js/components/PublishStatusIndicator.tsx b/static/js/components/PublishStatusIndicator.tsx index 01a303fc1..9a45b18c7 100644 --- a/static/js/components/PublishStatusIndicator.tsx +++ b/static/js/components/PublishStatusIndicator.tsx @@ -2,7 +2,7 @@ import * as React from "react" import { PublishStatus } from "../constants" -const publishStatusMessage = (status: PublishStatus): string => { +export const publishStatusMessage = (status: PublishStatus | null): string => { switch (status) { case PublishStatus.NotStarted: return "Not started" diff --git a/static/js/pages/SitesDashboard.tsx b/static/js/pages/SitesDashboard.tsx index 5b20e3ee5..a3c04d53f 100644 --- a/static/js/pages/SitesDashboard.tsx +++ b/static/js/pages/SitesDashboard.tsx @@ -4,6 +4,7 @@ import { useRequest } from "redux-query-react" import { Link } from "react-router-dom" import PaginationControls from "../components/PaginationControls" +import { publishStatusMessage } from "../components/PublishStatusIndicator" import { WebsiteListingParams, @@ -20,7 +21,7 @@ import Dropdown from "../components/Dropdown" import UnpublishDialog from "../components/UnpublishDialog" import { useURLParamFilter, usePagination } from "../hooks/search" import { usePermission } from "../hooks/permissions" -import { Permission } from "../constants" +import { Permission, PublishStatus } from "../constants" function getListingParams(search: string): WebsiteListingParams { const qsParams = new URLSearchParams(search) @@ -30,6 +31,25 @@ function getListingParams(search: string): WebsiteListingParams { return searchString ? { offset, search: searchString } : { offset } } +export const publishStatusIndicatorClass = ( + status: PublishStatus | null, +): string => { + switch (status) { + case PublishStatus.NotStarted: + return "text-secondary" + case PublishStatus.Pending: + case PublishStatus.Started: + return "text-warning" + case PublishStatus.Aborted: + case PublishStatus.Errored: + return "text-danger" + case PublishStatus.Success: + return "text-success" + default: + return "" + } +} + export default function SitesDashboard(): JSX.Element { const [websiteToUnpublish, setWebsiteToUnpublish] = useState(null) @@ -95,10 +115,28 @@ export default function SitesDashboard(): JSX.Element { key={site.uuid} >
- {site.publish_date && !site.unpublished ? ( -
Published
+ {!site.publish_date && !site.live_publish_status ? ( +
Never Published
+ ) : site.unpublished ? ( +
Unpublished from Production
+ ) : site.draft_publish_date && !site.publish_date ? ( +
Draft
+ ) : PublishStatus.Success === site.live_publish_status ? ( +
+ Published +
) : ( -
Draft
+
+ {publishStatusMessage(site.live_publish_status)} +
)} item.id !== "1", diff --git a/static/js/types/websites.ts b/static/js/types/websites.ts index 7b9cac5de..3a961d563 100644 --- a/static/js/types/websites.ts +++ b/static/js/types/websites.ts @@ -258,6 +258,7 @@ export type Website = WebsiteStatus & { url_path: string | null url_suggestion: string s3_path: string | null + live_publish_status: PublishStatus | null } type WebsiteRoleEditable = typeof ROLE_ADMIN | typeof ROLE_EDITOR diff --git a/websites/serializers.py b/websites/serializers.py index aa6a5fc0a..f3e7995a3 100644 --- a/websites/serializers.py +++ b/websites/serializers.py @@ -106,6 +106,7 @@ class Meta: "owner", "url_path", "unpublished", + "live_publish_status", ] extra_kwargs = {"owner": {"write_only": True}}