From 0537572542ca1ec2108575b0f2caa370fa438c58 Mon Sep 17 00:00:00 2001 From: Nathan Panchout Date: Thu, 27 Mar 2025 10:52:26 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F(frontend)=20icon=20component?= =?UTF-8?q?=20refactoring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add variant to IconComponent and remove $isMaterialIcon prop - Replace all Text component used as icon with the Icon component. --- src/frontend/apps/impress/package.json | 1 + .../apps/impress/src/components/Icon.tsx | 48 ++++++------------- .../apps/impress/src/components/Text.tsx | 5 +- .../components/BlockNoteToolBar/AIButton.tsx | 48 ++++--------------- .../ModalConfirmDownloadUnsafe.tsx | 6 +-- .../components/custom-blocks/DividerBlock.tsx | 8 +--- .../components/custom-blocks/QuoteBlock.tsx | 15 ++---- .../doc-versioning/components/VersionList.tsx | 13 +++-- .../features/home/components/HomeBanner.tsx | 6 +-- .../features/home/components/HomeContent.tsx | 8 +--- .../src/features/language/LanguagePicker.tsx | 6 +-- src/frontend/apps/impress/src/pages/403.tsx | 10 +--- src/frontend/apps/impress/src/pages/404.tsx | 10 +--- .../impress/src/pages/docs/[id]/index.tsx | 6 +-- .../apps/impress/src/pages/offline/index.tsx | 10 +--- 15 files changed, 55 insertions(+), 145 deletions(-) diff --git a/src/frontend/apps/impress/package.json b/src/frontend/apps/impress/package.json index 195b1604..1b0aa46d 100644 --- a/src/frontend/apps/impress/package.json +++ b/src/frontend/apps/impress/package.json @@ -30,6 +30,7 @@ "@sentry/nextjs": "9.3.0", "@tanstack/react-query": "5.67.1", "canvg": "4.0.3", + "clsx": "2.1.1", "cmdk": "1.0.4", "crisp-sdk-web": "1.0.25", "docx": "9.1.1", diff --git a/src/frontend/apps/impress/src/components/Icon.tsx b/src/frontend/apps/impress/src/components/Icon.tsx index 0b602f7b..c99d3f99 100644 --- a/src/frontend/apps/impress/src/components/Icon.tsx +++ b/src/frontend/apps/impress/src/components/Icon.tsx @@ -1,42 +1,24 @@ +import clsx from 'clsx'; import { css } from 'styled-components'; import { Text, TextType } from '@/components'; -import { useCunninghamTheme } from '@/cunningham'; type IconProps = TextType & { iconName: string; + variant?: 'filled' | 'outlined'; }; -export const Icon = ({ iconName, ...textProps }: IconProps) => { - return ( - - {iconName} - - ); -}; - -interface IconBGProps extends TextType { - iconName: string; -} - -export const IconBG = ({ iconName, ...textProps }: IconBGProps) => { - const { colorsTokens } = useCunninghamTheme(); - +export const Icon = ({ + iconName, + variant = 'outlined', + ...textProps +}: IconProps) => { return ( {iconName} @@ -49,15 +31,13 @@ type IconOptionsProps = TextType & { export const IconOptions = ({ isHorizontal, ...props }: IconOptionsProps) => { return ( - - {isHorizontal ? 'more_horiz' : 'more_vert'} - + /> ); }; diff --git a/src/frontend/apps/impress/src/components/Text.tsx b/src/frontend/apps/impress/src/components/Text.tsx index bc7dec46..486daf29 100644 --- a/src/frontend/apps/impress/src/components/Text.tsx +++ b/src/frontend/apps/impress/src/components/Text.tsx @@ -11,7 +11,6 @@ type TextSizes = keyof typeof sizes; export interface TextProps extends BoxProps { as?: 'p' | 'span' | 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; $elipsis?: boolean; - $isMaterialIcon?: boolean; $weight?: CSSProperties['fontWeight']; $textAlign?: CSSProperties['textAlign']; $size?: TextSizes | (string & {}); @@ -57,14 +56,14 @@ export const TextStyled = styled(Box)` `; const Text = forwardRef>( - ({ className, $isMaterialIcon, ...props }, ref) => { + ({ className, ...props }, ref) => { return ( ); diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/AIButton.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/AIButton.tsx index a008372e..45bd1ed4 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/AIButton.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/AIButton.tsx @@ -14,7 +14,7 @@ import { PropsWithChildren, ReactNode, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { isAPIError } from '@/api'; -import { Box, Text } from '@/components'; +import { Box, Icon } from '@/components'; import { useDocOptions, useDocStore } from '@/docs/doc-management/'; import { @@ -108,11 +108,7 @@ export function AIGroupButton() { data-test="ai-actions" label="AI" mainTooltip={t('AI Actions')} - icon={ - - auto_awesome - - } + icon={} /> - text_fields - - } + icon={} > {t('Use as prompt')} - refresh - - } + icon={} > {t('Rephrase')} - summarize - - } + icon={} > {t('Summarize')} - check - - } + icon={} > {t('Correct')} - draw - - } + icon={} > {t('Beautify')} - emoji_emotions - - } + icon={} > {t('Emojify')} @@ -197,9 +169,7 @@ export function AIGroupButton() { subTrigger={true} > - - translate - + {t('Language')} diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/ModalConfirmDownloadUnsafe.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/ModalConfirmDownloadUnsafe.tsx index 19d9fa31..e38c8639 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/ModalConfirmDownloadUnsafe.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteToolBar/ModalConfirmDownloadUnsafe.tsx @@ -1,7 +1,7 @@ import { Button, Modal, ModalSize } from '@openfun/cunningham-react'; import { useTranslation } from 'react-i18next'; -import { Box, Text } from '@/components'; +import { Box, Icon, Text } from '@/components'; interface ModalConfirmDownloadUnsafeProps { onClose: () => void; @@ -52,9 +52,7 @@ export const ModalConfirmDownloadUnsafe = ({ $variation="1000" $direction="row" > - - warning - + {t('Warning')} } diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/DividerBlock.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/DividerBlock.tsx index a5a352f9..046f2ef8 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/DividerBlock.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/DividerBlock.tsx @@ -2,7 +2,7 @@ import { insertOrUpdateBlock } from '@blocknote/core'; import { createReactBlockSpec } from '@blocknote/react'; import { TFunction } from 'i18next'; -import { Box, Text } from '@/components'; +import { Box, Icon } from '@/components'; import { useCunninghamTheme } from '@/cunningham'; import { DocsBlockNoteEditor } from '../../types'; @@ -45,11 +45,7 @@ export const getDividerReactSlashMenuItems = ( }, aliases: ['divider', 'hr', 'horizontal rule', 'line', 'separator'], group, - icon: ( - - remove - - ), + icon: , subtext: t('Add a horizontal line'), }, ]; diff --git a/src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/QuoteBlock.tsx b/src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/QuoteBlock.tsx index cc72379a..a034c466 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/QuoteBlock.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/QuoteBlock.tsx @@ -1,9 +1,8 @@ import { defaultProps, insertOrUpdateBlock } from '@blocknote/core'; import { BlockTypeSelectItem, createReactBlockSpec } from '@blocknote/react'; import { TFunction } from 'i18next'; -import React from 'react'; -import { Box, Text } from '@/components'; +import { Box, Icon } from '@/components'; import { useCunninghamTheme } from '@/cunningham'; import { DocsBlockNoteEditor } from '../../types'; @@ -54,11 +53,7 @@ export const getQuoteReactSlashMenuItems = ( }, aliases: ['quote', 'blockquote', 'citation'], group, - icon: ( - - format_quote - - ), + icon: , subtext: t('Add a quote block'), }, ]; @@ -68,10 +63,6 @@ export const getQuoteFormattingToolbarItems = ( ): BlockTypeSelectItem => ({ name: t('Quote'), type: 'quote', - icon: () => ( - - format_quote - - ), + icon: () => , isSelected: (block) => block.type === 'quote', }); diff --git a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionList.tsx b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionList.tsx index 89bbd054..38f2ce38 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionList.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-versioning/components/VersionList.tsx @@ -3,7 +3,14 @@ import { DateTime } from 'luxon'; import { useTranslation } from 'react-i18next'; import { APIError } from '@/api'; -import { Box, BoxButton, InfiniteScroll, Text, TextErrors } from '@/components'; +import { + Box, + BoxButton, + Icon, + InfiniteScroll, + Text, + TextErrors, +} from '@/components'; import { Doc } from '@/docs/doc-management'; import { useDate } from '@/hook'; @@ -68,9 +75,7 @@ const VersionListState = ({ causes={error.cause} icon={ error.status === 502 ? ( - - wifi_off - + ) : undefined } /> diff --git a/src/frontend/apps/impress/src/features/home/components/HomeBanner.tsx b/src/frontend/apps/impress/src/features/home/components/HomeBanner.tsx index 37ffc727..4895eed2 100644 --- a/src/frontend/apps/impress/src/features/home/components/HomeBanner.tsx +++ b/src/frontend/apps/impress/src/features/home/components/HomeBanner.tsx @@ -76,11 +76,7 @@ export default function HomeBanner() { ) : ( diff --git a/src/frontend/apps/impress/src/features/home/components/HomeContent.tsx b/src/frontend/apps/impress/src/features/home/components/HomeContent.tsx index 30a95b1b..d70d9d4c 100644 --- a/src/frontend/apps/impress/src/features/home/components/HomeContent.tsx +++ b/src/frontend/apps/impress/src/features/home/components/HomeContent.tsx @@ -2,7 +2,7 @@ import { Button } from '@openfun/cunningham-react'; import { Trans, useTranslation } from 'react-i18next'; import { css } from 'styled-components'; -import { Box, Text } from '@/components'; +import { Box, Icon, Text } from '@/components'; import { useCunninghamTheme } from '@/cunningham'; import { Footer } from '@/features/footer'; import { LeftPanel } from '@/features/left-panel'; @@ -155,11 +155,7 @@ export function HomeContent() { $margin={{ top: 'small' }} >