Skip to content

Commit a013534

Browse files
authored
Merge pull request #14398 from Baystef/migrate/stablecoinboxgrid
Migrate stablecoinboxgrid component to shadcn/tailwind
2 parents 0ed6557 + 4071c5e commit a013534

File tree

1 file changed

+29
-101
lines changed

1 file changed

+29
-101
lines changed

src/components/StablecoinBoxGrid.tsx

Lines changed: 29 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
import { useState } from "react"
22
import { useRouter } from "next/router"
33
import { useTranslation } from "next-i18next"
4-
import { Box, Flex } from "@chakra-ui/react"
5-
import { useColorModeValue } from "@chakra-ui/react"
64

75
import { ChildOnlyProp } from "@/lib/types"
86

7+
import { Flex } from "@/components/ui/flex"
8+
import InlineLink from "@/components/ui/Link"
9+
10+
import { cn } from "@/lib/utils/cn"
11+
912
import { isMobile } from "../lib/utils/isMobile"
1013

1114
import Emoji from "./Emoji"
12-
import InlineLink from "./Link"
13-
import OldHeading from "./OldHeading"
1415

1516
// Represent string as 32-bit integer
1617
const hashCode = (string: string): number => {
@@ -25,12 +26,12 @@ const hashCode = (string: string): number => {
2526

2627
// Theme variables from Theme.js
2728
const colors = [
28-
"gridYellow",
29-
"gridBlue",
30-
"gridGreen",
31-
"gridOrange",
32-
"gridPink",
33-
"gridPurple",
29+
"bg-yellow-300",
30+
"bg-blue-300",
31+
"bg-green-300",
32+
"bg-orange-100",
33+
"bg-pink-300",
34+
"bg-purple-300",
3435
]
3536

3637
interface ILink {
@@ -40,8 +41,6 @@ interface ILink {
4041

4142
type GridItemProps = {
4243
description: string
43-
columnNumber: number
44-
rowNumber: number
4544
emoji: string
4645
index: number
4746
title: string
@@ -54,85 +53,48 @@ type GridItemProps = {
5453
}
5554

5655
const OpenTitle = ({ title }: { title: string }) => {
57-
return (
58-
<OldHeading
59-
as="h3"
60-
fontSize={{ base: "2rem", sm: "2.5rem" }}
61-
fontWeight={700}
62-
marginTop={0}
63-
>
64-
{title}
65-
</OldHeading>
66-
)
56+
return <h3 className="mb-8 mt-0 text-3xl font-bold sm:text-4xl">{title}</h3>
6757
}
6858

6959
const Title = ({ title }: { title: string }) => {
70-
return (
71-
<OldHeading
72-
as="h3"
73-
fontSize={{ base: "2rem", sm: "2.5rem" }}
74-
fontWeight={400}
75-
marginTop={0}
76-
>
77-
{title}
78-
</OldHeading>
79-
)
60+
return <h3 className="mb-8 mt-0 text-3xl font-normal sm:text-4xl">{title}</h3>
8061
}
8162

8263
const Subtitle = ({ children }: ChildOnlyProp) => {
8364
return (
84-
<OldHeading
85-
as="h4"
86-
fontSize={{ base: "2xl", sm: "2rem" }}
87-
fontWeight={600}
88-
marginTop={0}
89-
padding={2}
90-
paddingBottom={4}
91-
borderBottom="1px solid"
92-
borderColor="black300"
93-
>
65+
<h4 className="mb-8 mt-0 border-b border-body-medium p-2 pb-4 text-2xl font-semibold sm:text-3xl">
9466
{children}
95-
</OldHeading>
67+
</h4>
9668
)
9769
}
9870

9971
const Body = ({ children }: ChildOnlyProp) => {
100-
return (
101-
<Box fontSize="xl" lineHeight="140%" color="black300">
102-
{children}
103-
</Box>
104-
)
72+
return <div className="text-xl text-gray-600">{children}</div>
10573
}
10674

10775
const StyledEmoji = ({ emoji }: { emoji: string }) => {
10876
return (
10977
<Emoji
110-
className="order-2 m-2 self-center text-8xl hover:rotate-12 hover:duration-500"
78+
className="order-2 m-2 self-center text-8xl duration-500 hover:rotate-12"
11179
text={emoji}
11280
/>
11381
)
11482
}
11583

11684
const Row = ({ children }: ChildOnlyProp) => {
11785
return (
118-
<Flex
119-
justify="space-between"
120-
marginTop={8}
121-
direction={{ base: "column", md: "row" }}
122-
>
86+
<Flex className="mt-8 flex-col justify-between md:flex-row">
12387
{children}
12488
</Flex>
12589
)
12690
}
12791

12892
const Column = ({ children }: ChildOnlyProp) => {
129-
return <Box width="100%">{children}</Box>
93+
return <div className="w-full">{children}</div>
13094
}
13195

13296
const GridItem = ({
13397
description,
134-
columnNumber,
135-
rowNumber,
13698
emoji,
13799
index,
138100
title,
@@ -146,38 +108,19 @@ const GridItem = ({
146108
const handleClick = (): void => {
147109
callback(index)
148110
}
149-
const shadow = useColorModeValue("tableBox.light", "tableBox.dark")
150111
const { t } = useTranslation("page-stablecoins")
151112

152113
return (
153114
<Flex
154115
id={`type-${index}`}
155116
onClick={() => handleClick()}
156-
gridRowStart={isOpen ? rowNumber : `auto`}
157-
gridRowEnd={isOpen ? `span 3` : `auto`}
158-
gridColumnStart={isOpen ? columnNumber : `auto`}
159-
color={isOpen ? "black300" : "text"}
160-
cursor={isOpen ? `auto` : `pointer`}
161-
background={isOpen ? color : "background.base"}
162-
direction={{
163-
base: "column",
164-
sm: `${isOpen ? "column" : "row"}`,
165-
lg: "column",
166-
}}
167-
justify={{
168-
base: `${isOpen ? "flex-start" : "space-between"}`,
169-
lg: "flex-start",
170-
}}
171-
align={{ base: "center", lg: "flex-start" }}
172-
border="1px solid"
173-
borderColor="text"
174-
padding={6}
175-
_hover={{
176-
background: isOpen ? color : "ednBackground",
177-
transition: isOpen ? "auto" : "transform 0.5s",
178-
transform: isOpen ? "auto" : "skewX(-5deg)",
179-
boxShadow: shadow,
180-
}}
117+
className={cn(
118+
"flex-col",
119+
isOpen
120+
? `${color} col-start-1 row-start-1 row-end-[span_3] cursor-auto justify-start text-gray-600 transition sm:flex-col`
121+
: "col-start-auto row-start-auto row-end-auto cursor-pointer justify-between bg-background transition-transform duration-500 hover:skew-x-[-5deg] hover:bg-background-highlight sm:flex-row",
122+
"items-center border border-body p-6 hover:shadow-table-box lg:flex-col lg:items-start lg:justify-start"
123+
)}
181124
>
182125
{isOpen ? (
183126
<Emoji className="mb-8 text-8xl" text={emoji} />
@@ -228,10 +171,7 @@ const GridItem = ({
228171
<InlineLink
229172
key={idx}
230173
href={link.url}
231-
color="black300"
232-
_hover={{
233-
color: "black",
234-
}}
174+
className="text-gray-600 hover:text-gray-900"
235175
>
236176
{link.text}
237177
</InlineLink>
@@ -273,18 +213,8 @@ const StablecoinBoxGrid = ({ items }: StablecoinBoxGridProps) => {
273213
}
274214

275215
return (
276-
<Box
277-
gridTemplateColumns="3fr 1fr"
278-
gridTemplateRows="3fr 3fr"
279-
borderRadius="sm"
280-
my={16}
281-
display={{ base: "flex", lg: "grid" }}
282-
flexDirection="column"
283-
maxW="100%"
284-
>
216+
<div className="my-16 flex max-w-full flex-col rounded-sm lg:grid lg:grid-cols-[3fr_1fr] lg:grid-rows-[3fr_3fr]">
285217
{items.map((item, idx) => {
286-
const columnNumber = 1
287-
const rowNumber = 1
288218
const colorIdx = hashCode(item.emoji) % colors.length
289219
const color = colors[colorIdx]
290220
return (
@@ -297,15 +227,13 @@ const StablecoinBoxGrid = ({ items }: StablecoinBoxGridProps) => {
297227
cons={item.cons}
298228
links={item.links}
299229
index={idx}
300-
columnNumber={columnNumber}
301-
rowNumber={rowNumber}
302230
isOpen={idx === indexOpen}
303231
callback={handleSelect}
304232
color={color}
305233
/>
306234
)
307235
})}
308-
</Box>
236+
</div>
309237
)
310238
}
311239

0 commit comments

Comments
 (0)