From 9d72614d89096b05584a5da80cce13689b72eed5 Mon Sep 17 00:00:00 2001 From: Danny Rorabaugh Date: Mon, 11 Aug 2025 14:52:24 -0400 Subject: [PATCH 1/2] [WordCard, *Completed] Migrate from deprecated Grid --- src/components/Buttons/UndoButton.tsx | 54 +++++------- src/components/WordCard/DomainChipsGrid.tsx | 14 +-- src/components/WordCard/SenseCard.tsx | 7 +- src/components/WordCard/SummarySenseCard.tsx | 10 +-- src/components/WordCard/index.tsx | 27 +++--- .../MergeDuplicates/MergeDupsCompleted.tsx | 88 ++++++++----------- .../ReviewEntries/ReviewEntriesCompleted.tsx | 55 ++++++------ 7 files changed, 115 insertions(+), 140 deletions(-) diff --git a/src/components/Buttons/UndoButton.tsx b/src/components/Buttons/UndoButton.tsx index 72d3d79543..ada25bb818 100644 --- a/src/components/Buttons/UndoButton.tsx +++ b/src/components/Buttons/UndoButton.tsx @@ -1,4 +1,4 @@ -import { Button, Grid } from "@mui/material"; +import { Button } from "@mui/material"; import { ReactElement, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; @@ -30,35 +30,27 @@ export default function UndoButton(props: UndoButtonProps): ReactElement { } }, [isUndoAllowed, undoDialogOpen]); - return ( - - {isUndoEnabled ? ( -
- - setUndoDialogOpen(false)} - handleConfirm={() => - props.undo().then(() => setUndoDialogOpen(false)) - } - buttonIdCancel={props.buttonIdCancel} - buttonIdConfirm={props.buttonIdConfirm} - /> -
- ) : ( -
- -
- )} -
+ return isUndoEnabled ? ( + <> + + setUndoDialogOpen(false)} + handleConfirm={() => props.undo().then(() => setUndoDialogOpen(false))} + buttonIdCancel={props.buttonIdCancel} + buttonIdConfirm={props.buttonIdConfirm} + /> + + ) : ( + ); } diff --git a/src/components/WordCard/DomainChipsGrid.tsx b/src/components/WordCard/DomainChipsGrid.tsx index 19a994e139..3b8b714cd8 100644 --- a/src/components/WordCard/DomainChipsGrid.tsx +++ b/src/components/WordCard/DomainChipsGrid.tsx @@ -1,4 +1,4 @@ -import { Grid } from "@mui/material"; +import { Grid2 } from "@mui/material"; import { type ReactElement } from "react"; import { type SemanticDomain } from "api/models"; @@ -26,12 +26,14 @@ export default function DomainChipsGrid( }; return ( - + {props.semDoms.map((d) => ( - - - + ))} - + ); } diff --git a/src/components/WordCard/SenseCard.tsx b/src/components/WordCard/SenseCard.tsx index 4841f5b9ff..3cc1d43591 100644 --- a/src/components/WordCard/SenseCard.tsx +++ b/src/components/WordCard/SenseCard.tsx @@ -28,12 +28,7 @@ export default function SenseCard(props: SenseCardProps): ReactElement { const semDoms = props.sense.semanticDomains; return ( - + {/* Part of speech (if any) */}
diff --git a/src/components/WordCard/SummarySenseCard.tsx b/src/components/WordCard/SummarySenseCard.tsx index d07dee9f36..54d8702c71 100644 --- a/src/components/WordCard/SummarySenseCard.tsx +++ b/src/components/WordCard/SummarySenseCard.tsx @@ -1,4 +1,4 @@ -import { Card, CardContent, Chip, Grid, Typography } from "@mui/material"; +import { Card, CardContent, Chip, Grid2, Typography } from "@mui/material"; import { ReactElement } from "react"; import { useTranslation } from "react-i18next"; @@ -57,13 +57,11 @@ export default function SummarySenseCard( /> {/* Semantic domain numbers */} - + {domIds.map((id) => ( - - - + ))} - + ); diff --git a/src/components/WordCard/index.tsx b/src/components/WordCard/index.tsx index a91016cccd..d21c8be111 100644 --- a/src/components/WordCard/index.tsx +++ b/src/components/WordCard/index.tsx @@ -5,6 +5,7 @@ import { CardContent, CardHeader, IconButton, + Stack, Typography, } from "@mui/material"; import { Fragment, ReactElement, useEffect, useState } from "react"; @@ -89,13 +90,7 @@ export default function WordCard(props: WordCardProps): ReactElement { buttonLabel={ full ? WordCardLabel.ButtonCondense : WordCardLabel.ButtonExpand } - icon={ - full ? ( - t.palette.grey[900] }} /> - ) : ( - t.palette.grey[600] }} /> - ) - } + icon={full ? : } onClick={() => setFull(!full)} /> @@ -130,14 +125,16 @@ export default function WordCard(props: WordCardProps): ReactElement { {/* Senses */} {full ? ( - senses.map((s) => ( - - )) + + {senses.map((s) => ( + + ))} + ) : ( )} diff --git a/src/goals/MergeDuplicates/MergeDupsCompleted.tsx b/src/goals/MergeDuplicates/MergeDupsCompleted.tsx index 8f05fcfaa9..b286f4a837 100644 --- a/src/goals/MergeDuplicates/MergeDupsCompleted.tsx +++ b/src/goals/MergeDuplicates/MergeDupsCompleted.tsx @@ -1,5 +1,5 @@ import { ArrowRightAlt } from "@mui/icons-material"; -import { Card, Grid, Paper, Typography } from "@mui/material"; +import { Box, Card, Grid2, Paper, Stack, Typography } from "@mui/material"; import { ReactElement, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useSelector } from "react-redux"; @@ -53,48 +53,42 @@ export function MergeChange(props: { change: MergeUndoIds }): ReactElement { const isDeletion = !change.parentIds.length; return ( - + {isDeletion && {t("mergeDups.undo.deleted")}} {change.childIds.map((id) => ( - + ))} {!isDeletion && ( <> - - - + + + {change.parentIds.map((id) => ( - + ))} )} - { - await undoMerge(change); - }} - /> - + + { + await undoMerge(change); + }} + /> + + ); } @@ -110,11 +104,7 @@ export function doWordsIncludeMerges( ); } -interface WordPaperProps { - wordId: string; -} - -function WordPaper(props: WordPaperProps): ReactElement { +function WordBox(props: { wordId: string }): ReactElement { const [word, setWord] = useState(); const [flag, setFlag] = useState(newFlag()); @@ -126,7 +116,7 @@ function WordPaper(props: WordPaperProps): ReactElement { }, [word]); return ( - + - - - - {word?.vernacular} - - - - - - + + + {word?.vernacular} + + +
{word?.senses?.map(SenseCard)}
-
+ ); } diff --git a/src/goals/ReviewEntries/ReviewEntriesCompleted.tsx b/src/goals/ReviewEntries/ReviewEntriesCompleted.tsx index bbe541c661..de5279c010 100644 --- a/src/goals/ReviewEntries/ReviewEntriesCompleted.tsx +++ b/src/goals/ReviewEntries/ReviewEntriesCompleted.tsx @@ -1,5 +1,5 @@ import { ArrowRightAlt } from "@mui/icons-material"; -import { Grid, List, ListItem, Typography } from "@mui/material"; +import { Box, List, ListItem, Stack, Typography } from "@mui/material"; import { ReactElement, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { useSelector } from "react-redux"; @@ -67,31 +67,36 @@ function EditedEntry(props: { edit: EntryEdit }): ReactElement { return ( - - {!!oldWord && } - - + {!!oldWord && ( + + + + )} + + + + + + {!!newWord && ( + + + + )} + + + isInFrontier(newId)} + undo={() => undoEdit(props.edit)} /> - - {!!newWord && } - isInFrontier(newId)} - undo={() => undoEdit(props.edit)} - /> - + + ); } From 91ea3286c15d8f4ae599a1938710ea786640843f Mon Sep 17 00:00:00 2001 From: Danny Rorabaugh Date: Mon, 11 Aug 2025 15:07:28 -0400 Subject: [PATCH 2/2] Favor sx over style --- src/components/WordCard/SenseCard.tsx | 4 +-- src/components/WordCard/SenseCardText.tsx | 29 +++++++++---------- src/components/WordCard/SummarySenseCard.tsx | 11 ++----- .../MergeDuplicates/MergeDupsCompleted.tsx | 29 +++++++------------ .../ReviewEntries/ReviewEntriesCompleted.tsx | 3 +- .../Cells/EditCell/EditSensesCardContent.tsx | 4 +-- 6 files changed, 30 insertions(+), 50 deletions(-) diff --git a/src/components/WordCard/SenseCard.tsx b/src/components/WordCard/SenseCard.tsx index 3cc1d43591..a904b66403 100644 --- a/src/components/WordCard/SenseCard.tsx +++ b/src/components/WordCard/SenseCard.tsx @@ -28,8 +28,8 @@ export default function SenseCard(props: SenseCardProps): ReactElement { const semDoms = props.sense.semanticDomains; return ( - - + + {/* Part of speech (if any) */}
{gramInfo.catGroup !== GramCatGroup.Unspecified && ( diff --git a/src/components/WordCard/SenseCardText.tsx b/src/components/WordCard/SenseCardText.tsx index 94e27d4c1c..31c25587ca 100644 --- a/src/components/WordCard/SenseCardText.tsx +++ b/src/components/WordCard/SenseCardText.tsx @@ -1,14 +1,15 @@ import { + Box, + SxProps, Table, TableBody, TableCell, TableRow, Typography, } from "@mui/material"; -import { CSSProperties, ReactElement } from "react"; +import { ReactElement } from "react"; import { Sense } from "api/models"; -import theme from "types/theme"; import { TypographyWithFont } from "utilities/fontComponents"; interface SenseInLanguage { @@ -70,10 +71,10 @@ export default function SenseCardText(props: SenseCardTextProps): ReactElement { ); } -const defStyle: CSSProperties = { +const defSx: SxProps = { borderInlineStart: "1px solid black", - marginBottom: theme.spacing(1), - paddingInlineStart: theme.spacing(1), + mb: 1, + paddingInlineStart: 1, }; interface SenseTextRowsProps { @@ -87,18 +88,14 @@ function SenseTextRows(props: SenseTextRowsProps): ReactElement { <> {/* Gloss */} - + {lang} {":"} - - + + {props.senseInLang.glossText} @@ -107,13 +104,13 @@ function SenseTextRows(props: SenseTextRowsProps): ReactElement { {/* Definition */} {!!props.senseInLang.definitionText && !props.hideDefs && ( - - -
+ + + {props.senseInLang.definitionText} -
+
)} diff --git a/src/components/WordCard/SummarySenseCard.tsx b/src/components/WordCard/SummarySenseCard.tsx index 54d8702c71..c6dd43a349 100644 --- a/src/components/WordCard/SummarySenseCard.tsx +++ b/src/components/WordCard/SummarySenseCard.tsx @@ -8,7 +8,7 @@ import SensesTextSummary from "components/WordCard/SensesTextSummary"; import { groupGramInfo } from "utilities/wordUtilities"; interface SummarySenseCardProps { - backgroundColor?: string; + bgcolor?: string; senses: Sense[]; } @@ -28,13 +28,8 @@ export default function SummarySenseCard( const domIds = [...new Set(semDoms.map((d) => d.id))].sort(); return ( - - + + {/* Parts of speech */} {groupedGramInfo.map((info) => ( + {isDeletion && {t("mergeDups.undo.deleted")}} {change.childIds.map((id) => ( ))} {!isDeletion && ( <> - + {change.parentIds.map((id) => ( @@ -116,17 +115,9 @@ function WordBox(props: { wordId: string }): ReactElement { }, [word]); return ( - - - + + + {word?.vernacular} @@ -146,12 +137,12 @@ function SenseCard(sense: Sense): ReactElement { return ( diff --git a/src/goals/ReviewEntries/ReviewEntriesCompleted.tsx b/src/goals/ReviewEntries/ReviewEntriesCompleted.tsx index de5279c010..d9d3537914 100644 --- a/src/goals/ReviewEntries/ReviewEntriesCompleted.tsx +++ b/src/goals/ReviewEntries/ReviewEntriesCompleted.tsx @@ -13,7 +13,6 @@ import { EntryEdit, } from "goals/ReviewEntries/ReviewEntriesTypes"; import { type StoreState } from "rootRedux/types"; -import theme from "types/theme"; export default function ReviewEntriesCompleted(): ReactElement { const changes = useSelector( @@ -67,7 +66,7 @@ function EditedEntry(props: { edit: EntryEdit }): ReactElement { return ( - + {!!oldWord && ( diff --git a/src/goals/ReviewEntries/ReviewEntriesTable/Cells/EditCell/EditSensesCardContent.tsx b/src/goals/ReviewEntries/ReviewEntriesTable/Cells/EditCell/EditSensesCardContent.tsx index 18beddbe43..a8183b0284 100644 --- a/src/goals/ReviewEntries/ReviewEntriesTable/Cells/EditCell/EditSensesCardContent.tsx +++ b/src/goals/ReviewEntries/ReviewEntriesTable/Cells/EditCell/EditSensesCardContent.tsx @@ -86,9 +86,7 @@ export default function EditSensesCardContent( ) : ( change) ? yellow[100] : undefined - } + bgcolor={changes.some((change) => change) ? yellow[100] : undefined} senses={props.newSenses.filter( (s) => s.accessibility !== Status.Deleted )}