diff --git a/src/apps/work/src/lib/components/ShowcasePostPreview/ShowcasePostPreview.module.scss b/src/apps/work/src/lib/components/ShowcasePostPreview/ShowcasePostPreview.module.scss index 5311dee53..7f4a2985d 100644 --- a/src/apps/work/src/lib/components/ShowcasePostPreview/ShowcasePostPreview.module.scss +++ b/src/apps/work/src/lib/components/ShowcasePostPreview/ShowcasePostPreview.module.scss @@ -141,6 +141,62 @@ &:hover { text-decoration: underline; } + + &[target] { + &::after { + content: ""; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; + -webkit-mask-size: 12px 12px; + mask-size: 12px 12px; + -webkit-mask-image: url(./assets/external-link.svg); + mask-image: url(./assets/external-link.svg); + width: 12px; + height: 12px; + display: inline-block; + background-color: currentColor; + margin-left: $sp-1; + } + } + } + + table { + display: block; + overflow-x: auto; + max-width: 100%; + border-collapse: collapse; + } + + th, + td { + border: 1px solid $black-20; + padding: 10px; + text-align: left; + vertical-align: top; + } + + pre { + background: $black-10; + border-radius: 8px; + padding: 16px; + overflow-x: auto; + white-space: pre-wrap; + word-break: break-word; + } + + code { + background: $black-10; + border-radius: 4px; + padding: 2px 4px; + } + + blockquote { + border-left: 4px solid $black-20; + color: $black-80; + padding-left: 16px; + margin: 0; } } @@ -244,7 +300,7 @@ } .challengeTitle { - color: $black-100; + color: $link-blue-dark; font-family: Roboto; font-size: 16px; font-weight: 500; @@ -252,7 +308,6 @@ text-decoration: none; &:hover { - color: $link-blue-dark; text-decoration: none; } } @@ -268,12 +323,28 @@ display: flex; flex-wrap: wrap; align-items: center; - gap: 8px; color: $black-80; font-family: Roboto; font-size: 14px; font-weight: 400; line-height: 22px; + min-width: 220px; + + span { + display: flex; + align-items: center; + } +} + +.statSeparator::before { + display: block; + content: ""; + border-radius: 50%; + width: 3px; + height: 3px; + background: url('data:image/svg+xml,') center no-repeat; + margin-left: 8px; + margin-right: 8px; } .challengeViewLink { diff --git a/src/apps/work/src/lib/components/ShowcasePostPreview/ShowcasePostPreview.tsx b/src/apps/work/src/lib/components/ShowcasePostPreview/ShowcasePostPreview.tsx index dd0630a83..d20c1e18e 100644 --- a/src/apps/work/src/lib/components/ShowcasePostPreview/ShowcasePostPreview.tsx +++ b/src/apps/work/src/lib/components/ShowcasePostPreview/ShowcasePostPreview.tsx @@ -199,7 +199,7 @@ const ShowcasePostPreview: FC = props => { )} {typeof challenge.numOfRegistrants === 'number' && ( - + {challenge.numOfRegistrants} {' '} registrants diff --git a/src/apps/work/src/lib/components/ShowcasePostPreview/assets/external-link.svg b/src/apps/work/src/lib/components/ShowcasePostPreview/assets/external-link.svg new file mode 100644 index 000000000..cc724f815 --- /dev/null +++ b/src/apps/work/src/lib/components/ShowcasePostPreview/assets/external-link.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/apps/work/src/pages/showcase/ProjectShowcasePage/ProjectShowcasePage.tsx b/src/apps/work/src/pages/showcase/ProjectShowcasePage/ProjectShowcasePage.tsx index c01539f8b..2c354b018 100644 --- a/src/apps/work/src/pages/showcase/ProjectShowcasePage/ProjectShowcasePage.tsx +++ b/src/apps/work/src/pages/showcase/ProjectShowcasePage/ProjectShowcasePage.tsx @@ -880,6 +880,41 @@ export const ProjectShowcasePage: FC = () => { selectedChallengeOptions, ]) + const handlePreviewListPost = useCallback(async (post: ProjectShowcasePost) => { + if (!projectId) { + return + } + + setIsLoadingPreview(true) + setIsPreviewModalOpen(true) + + try { + const postDetails = await fetchProjectShowcasePost(projectId, post.id) + const builtPreview = await buildShowcasePreviewData({ + categoryOptions: categoryOptions.slice(1), + challengeOptions: [], + editingPost: postDetails, + formData: mapPostToFormData(postDetails), + industryOptions: industryOptions.slice(1), + manageMode: 'edit', + projectId, + projectTitle: postDetails.projectTitle || projectResult.project?.name || 'Project', + }) + setPreviewData(builtPreview) + } catch (err) { + showErrorToast(err instanceof Error ? err.message : 'Unable to load post preview.') + setIsPreviewModalOpen(false) + setPreviewData(undefined) + } finally { + setIsLoadingPreview(false) + } + }, [ + categoryOptions, + industryOptions, + projectId, + projectResult.project?.name, + ]) + const updatePostInCache = useCallback( async (updatedPost: ProjectShowcasePost) => { await postsResult.mutate(currentData => { @@ -1335,6 +1370,17 @@ export const ProjectShowcasePage: FC = () => { {canManageProjectShowcasePosts && ( <> + {post.status !== 'ARCHIVED' && (