From ea21712b9198ebc2e1e45eb0c1e6d96b259b0f26 Mon Sep 17 00:00:00 2001 From: Natalie Wee Date: Fri, 6 Jan 2023 14:56:28 -0500 Subject: [PATCH] refactor(ScoreSummary): add optional colorfulIcons prop add optional colorfulIcons prop to ScoreSummary component --- packages/gamut-labs/src/QuizScore/index.tsx | 26 ++++++--- .../gamut-labs/src/ScoreSummary/index.tsx | 50 ++++++++++++++--- .../__snapshots__/theme.test.ts.snap | 10 ++-- packages/gamut-styles/src/themes/core.ts | 2 +- .../Organisms/ScoreSummary.stories.mdx | 56 ++++++++++++++++++- 5 files changed, 118 insertions(+), 26 deletions(-) diff --git a/packages/gamut-labs/src/QuizScore/index.tsx b/packages/gamut-labs/src/QuizScore/index.tsx index 3d487a917b..cea946533b 100644 --- a/packages/gamut-labs/src/QuizScore/index.tsx +++ b/packages/gamut-labs/src/QuizScore/index.tsx @@ -1,24 +1,23 @@ import { Box, FlexBox, GridBox, Text } from '@codecademy/gamut'; import { CheckFilledIcon, DeleteFilledIcon } from '@codecademy/gamut-icons'; -import { Colors } from '@codecademy/gamut-styles'; import * as React from 'react'; interface QuizScoreProps { correctCount: number; total: number; - borderColor?: Colors; layout?: 'row' | 'column'; smallerFont?: boolean; numOfRows?: number; + colorfulIcons?: boolean; } export const QuizScore: React.FC = ({ - borderColor = 'white', correctCount, layout = 'row', smallerFont, total, numOfRows, + colorfulIcons, }) => { const isRowLayout = layout === 'row'; const moreThan5Rows = !isRowLayout && numOfRows && numOfRows > 5; @@ -44,10 +43,11 @@ export const QuizScore: React.FC = ({ {affirmation} = ({ justifyContent="center" display={total === correctCount ? 'flex' : 'grid'} > - + {correctCount} correct {correctCount < total && ( <> - + {`${ total - correctCount } to work on`} diff --git a/packages/gamut-labs/src/ScoreSummary/index.tsx b/packages/gamut-labs/src/ScoreSummary/index.tsx index 52a5cbbe03..1d09879cae 100644 --- a/packages/gamut-labs/src/ScoreSummary/index.tsx +++ b/packages/gamut-labs/src/ScoreSummary/index.tsx @@ -1,4 +1,5 @@ import { Anchor, Box, FlexBox, GridBox, Text } from '@codecademy/gamut'; +import { CheckFilledIcon, DeleteFilledIcon } from '@codecademy/gamut-icons'; import { Colors, pxRem } from '@codecademy/gamut-styles'; import { UserClickData } from '@codecademy/tracking'; import * as React from 'react'; @@ -14,27 +15,32 @@ export interface ScoreSummaryProps { pathSlug: string; trackSlug?: string; trackingData?: UserClickData; - borderColor?: Colors; lighterBorderColor?: Colors; layout?: 'column' | 'row'; untestedSubContent?: UntestedSubContent[]; trackUserClick?: (data: UserClickData) => void; description?: string; noMaxWidth?: boolean; + colorfulIcons?: boolean; } +const SHOW_REVIEW_SCORE = 0.6; +const PASSING_SCORE = 0.7; + const renderSubScores = ({ subScores, pathSlug, trackSlug, trackingData, trackUserClick, + colorfulIcons, }: { subScores: CorrectAnswerCountsBySubContent; pathSlug: string; trackSlug?: string; trackingData?: UserClickData; trackUserClick?: (data: UserClickData) => void; + colorfulIcons?: boolean; }) => Object.entries(subScores).map( ( @@ -63,10 +69,36 @@ const renderSubScores = ({ px={16} py={8} justifyContent="space-between" + alignItems="center" > - {subContentTitle} - - {subContentPercentCorrect <= 0.6 && trackSlug && ( + + {colorfulIcons ? ( + subContentPercentCorrect >= PASSING_SCORE ? ( + + ) : ( + + ) + ) : null} + {subContentTitle} + + + {subContentPercentCorrect < SHOW_REVIEW_SCORE && trackSlug && ( <> = ({ trackSlug, trackingData, untestedSubContent, - borderColor = 'white', lighterBorderColor = 'navy-400', layout = 'row', trackUserClick, description, noMaxWidth = false, + colorfulIcons = false, }) => { let numOfRows = Object.entries(subScores).length; if (untestedSubContent) { @@ -163,9 +195,10 @@ export const ScoreSummary: React.FC = ({ const isRowLayout = layout === 'row'; return ( - = ({ border={1} > {description && ( @@ -211,7 +244,7 @@ export const ScoreSummary: React.FC = ({ {description} )} - + = ({ trackSlug, trackingData, trackUserClick, + colorfulIcons, })} diff --git a/packages/gamut-styles/src/themes/__tests__/__snapshots__/theme.test.ts.snap b/packages/gamut-styles/src/themes/__tests__/__snapshots__/theme.test.ts.snap index f9cf02685e..956be0a4a9 100644 --- a/packages/gamut-styles/src/themes/__tests__/__snapshots__/theme.test.ts.snap +++ b/packages/gamut-styles/src/themes/__tests__/__snapshots__/theme.test.ts.snap @@ -526,7 +526,7 @@ Object { "danger": "#E85D7F", "danger-hover": "#DC5879", "feedback-error": "#E85D7F", - "feedback-success": "#F5FFE3", + "feedback-success": "#AEE938", "feedback-warning": "#FFFAE5", "interface": "#FFD300", "interface-hover": "#CCA900", @@ -824,7 +824,7 @@ monospace", "danger": "red-0", "danger-hover": "red-100", "feedback-error": "red-0", - "feedback-success": "green-0", + "feedback-success": "green-400", "feedback-warning": "yellow-0", "interface": "yellow-500", "interface-hover": "yellow-400", @@ -1002,7 +1002,7 @@ Object { "editor-value": "#FFD300", "editor-variable": "#AEE938", "feedback-error": "#E85D7F", - "feedback-success": "#F5FFE3", + "feedback-success": "#AEE938", "feedback-warning": "#FFFAE5", "interface": "#FFD300", "interface-hover": "#CCA900", @@ -1107,7 +1107,7 @@ Object { "--color-editor-value": "var(--color-yellow-500)", "--color-editor-variable": "var(--color-green-400)", "--color-feedback-error": "var(--color-red-0)", - "--color-feedback-success": "var(--color-green-0)", + "--color-feedback-success": "var(--color-green-400)", "--color-feedback-warning": "var(--color-yellow-0)", "--color-interface": "var(--color-yellow-500)", "--color-interface-hover": "var(--color-yellow-400)", @@ -1420,7 +1420,7 @@ monospace", "editor-value": "yellow-500", "editor-variable": "green-400", "feedback-error": "red-0", - "feedback-success": "green-0", + "feedback-success": "green-400", "feedback-warning": "yellow-0", "interface": "yellow-500", "interface-hover": "yellow-400", diff --git a/packages/gamut-styles/src/themes/core.ts b/packages/gamut-styles/src/themes/core.ts index e28d17da34..3b91394bf4 100644 --- a/packages/gamut-styles/src/themes/core.ts +++ b/packages/gamut-styles/src/themes/core.ts @@ -70,7 +70,7 @@ export const coreTheme = createTheme({ text: { _: 'white', accent: 'beige', disabled: 'navy-200' }, feedback: { error: 'red-0', - success: 'green-0', + success: 'green-400', warning: 'yellow-0', }, background: { diff --git a/packages/styleguide/stories/Brand Labs/Organisms/ScoreSummary.stories.mdx b/packages/styleguide/stories/Brand Labs/Organisms/ScoreSummary.stories.mdx index 713e5da608..afe491218e 100644 --- a/packages/styleguide/stories/Brand Labs/Organisms/ScoreSummary.stories.mdx +++ b/packages/styleguide/stories/Brand Labs/Organisms/ScoreSummary.stories.mdx @@ -65,18 +65,30 @@ This is for use on the syllabus + +## Colorful Icons + + + + {(args) => ( + + )} + +