From 5cc4b834d10b01136869aa4c7ddbf1fbd1d5f94f Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Mon, 3 Feb 2025 23:03:32 +0000 Subject: [PATCH] Improve UI for project solutions --- .../Projects/ListProjectSolutions.tsx | 12 +- .../Projects/ProjectSolutionRow.tsx | 126 +++++++++++------- 2 files changed, 87 insertions(+), 51 deletions(-) diff --git a/src/components/Projects/ListProjectSolutions.tsx b/src/components/Projects/ListProjectSolutions.tsx index 7e10ebd8a..d361854f2 100644 --- a/src/components/Projects/ListProjectSolutions.tsx +++ b/src/components/Projects/ListProjectSolutions.tsx @@ -213,6 +213,13 @@ export function ListProjectSolutions(props: ListProjectSolutionsProps) { const selectedLanguage = pageState.language; + const setSelectedLanguage = (language: string) => { + setPageState((prev) => ({ + ...prev, + language: prev.language === language ? '' : language, + })); + }; + return (
{leavingRoadmapModal} @@ -221,7 +228,9 @@ export function ListProjectSolutions(props: ListProjectSolutionsProps) {

{projectData.title} Solutions

-

{projectData.description}

+

+ Solutions submitted by the community +

{!isLoading && (
@@ -260,6 +269,7 @@ export function ListProjectSolutions(props: ListProjectSolutionsProps) { counter={counter} onVote={handleSubmitVote} onVisitSolution={setShowLeavingRoadmapModal} + onLanguageClick={setSelectedLanguage} /> ))}
diff --git a/src/components/Projects/ProjectSolutionRow.tsx b/src/components/Projects/ProjectSolutionRow.tsx index 45934cd8e..5420cc2db 100644 --- a/src/components/Projects/ProjectSolutionRow.tsx +++ b/src/components/Projects/ProjectSolutionRow.tsx @@ -43,69 +43,95 @@ type ProjectSolutionRowProps = { counter: number; onVote: (solutionId: string, voteType: AllowedVoteType) => void; onVisitSolution: (solution: ProjectSolutionRowProps['solution']) => void; + onLanguageClick?: (language: string) => void; }; export function ProjectSolutionRow(props: ProjectSolutionRowProps) { - const { solution, counter, onVote, onVisitSolution } = props; + const { solution, counter, onVote, onVisitSolution, onLanguageClick } = props; const avatar = solution.user.avatar || ''; return ( -
-
-
- {solution.user.name} - {solution.user.name} - - {submittedAlternatives[counter % submittedAlternatives.length] || - 'submitted their solution'} - {' '} - - {getRelativeTimeString(solution?.submittedAt!)} - -
+
+
+ {solution.user.name} +
+
+ + {solution.user.name} + + + {submittedAlternatives[counter % submittedAlternatives.length] || + 'submitted their solution'} + + + ยท {getRelativeTimeString(solution?.submittedAt!)} + +
-
- - { - onVote(solution._id!, 'upvote'); - }} - /> +
+
+ + { + onVote(solution._id!, 'upvote'); + }} + /> + + { + onVote(solution._id!, 'downvote'); + }} + /> + +
- { - onVote(solution._id!, 'downvote'); + onVisitSolution(solution); }} - /> - - - + > + + Visit Solution + +
+ +
+ {solution.languages && solution.languages.length > 0 && ( +
+ {solution.languages.slice(0, 2).map((lang) => ( + + ))} +
+ )} +
); }