Skip to content

Commit 5b2fac1

Browse files
committed
feat: card improvements and solve lint
1 parent 05e4444 commit 5b2fac1

9 files changed

Lines changed: 71 additions & 25 deletions

File tree

src/sections/collection/featured-items/FeaturedItemCard.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { useMemo } from 'react'
22
import DOMPurify from 'dompurify'
33
import { Link } from 'react-router-dom'
44
import cn from 'classnames'
5-
import { Card } from '@iqss/dataverse-design-system'
5+
import { Card, Stack } from '@iqss/dataverse-design-system'
6+
import { BoxArrowUpRight } from 'react-bootstrap-icons'
67
import {
78
CollectionFeaturedItem,
89
CustomFeaturedItem
@@ -55,7 +56,10 @@ export const FeaturedItemCard = ({ featuredItem, collectionId }: FeaturedItemPro
5556
<Link
5657
to={RouteWithParams.FEATURED_ITEM(collectionId, featuredItem.id.toString())}
5758
className="btn btn-secondary btn-sm">
58-
See {getDisplayValue(featuredItem.type)}
59+
<Stack direction="horizontal" gap={2}>
60+
<span className={styles.cta_link_text}>See {getDisplayValue(featuredItem.type)}</span>
61+
<BoxArrowUpRight size={14} />
62+
</Stack>
5963
</Link>
6064
</footer>
6165
</Card.Body>

src/sections/collection/featured-items/FeaturedItems.module.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@
154154
display: flex;
155155
align-items: center;
156156
justify-content: flex-end;
157+
158+
.cta_link_text {
159+
color: color.adjust($dv-brand-color, $lightness: -9%);
160+
font-weight: 500;
161+
}
157162
}
158163
}
159164
}

src/sections/collection/featured-items/FeaturedItems.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@ import styles from './FeaturedItems.module.scss'
1111
export interface FeaturedItemsProps {
1212
collectionRepository: CollectionRepository
1313
collectionId: string
14-
hideTitle?: boolean
1514
className?: string
1615
}
1716

1817
export const FeaturedItems = ({
1918
collectionRepository,
2019
collectionId,
21-
className,
22-
hideTitle = false
20+
className
2321
}: FeaturedItemsProps) => {
2422
const { t } = useTranslation('collection')
2523
const theme = useTheme()
@@ -101,7 +99,7 @@ export const FeaturedItems = ({
10199

102100
return (
103101
<div className={`${styles.featured_items} ${className || ''}`}>
104-
{!hideTitle && <h4>{t('featuredItems.title')}</h4>}
102+
<h4>{t('featuredItems.title')}</h4>
105103

106104
<div className={styles['slider-container']} data-testid="featured-items-slider">
107105
{!oneItemOnly && isOverflowing && (

src/sections/edit-collection-featured-items/featured-items-form/FeaturedItemsForm.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import { SortableContext } from '@dnd-kit/sortable'
66
import { useTranslation } from 'react-i18next'
77
import { toast } from 'react-toastify'
88
import { CollectionRepository } from '@/collection/domain/repositories/CollectionRepository'
9-
import { CollectionFeaturedItem } from '@/collection/domain/models/CollectionFeaturedItem'
9+
import {
10+
CollectionFeaturedItem,
11+
CustomFeaturedItem
12+
} from '@/collection/domain/models/CollectionFeaturedItem'
1013
import { FeaturedItemField } from './featured-item-field/FeaturedItemField'
1114
import { PreviewCarousel } from './preview-carousel/PreviewCarousel'
1215
import { FeaturedItemFieldWithSortId, FeaturedItemsFormData } from '../types'
@@ -160,7 +163,9 @@ export const FeaturedItemsForm = ({
160163
onAddField={handleOnAddField}
161164
onRemoveField={handleOnRemoveField}
162165
initialImageUrl={
163-
collectionFeaturedItems.find((item) => item.id === field.itemId)?.imageFileUrl
166+
(collectionFeaturedItems as CustomFeaturedItem[]).find(
167+
(item) => item.id === field.itemId
168+
)?.imageFileUrl
164169
}
165170
key={field.id}
166171
/>

src/sections/edit-collection-featured-items/featured-items-form/FeaturedItemsFormHelper.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { CollectionFeaturedItem } from '@/collection/domain/models/CollectionFeaturedItem'
1+
import {
2+
CollectionFeaturedItem,
3+
CustomFeaturedItem
4+
} from '@/collection/domain/models/CollectionFeaturedItem'
25
import { FeaturedItemField, FeaturedItemsFormData } from '../types'
36
import {
47
CollectionFeaturedItemDTO,
@@ -20,7 +23,7 @@ export class FeaturedItemsFormHelper {
2023
}
2124

2225
return collectionFeaturedItems.map((collectionFeaturedItem) => {
23-
const { id, content, imageFileUrl } = collectionFeaturedItem
26+
const { id, content, imageFileUrl } = collectionFeaturedItem as CustomFeaturedItem
2427

2528
return {
2629
content,

src/sections/homepage/Homepage.module.scss

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,26 @@
1010
padding-top: 2rem;
1111
}
1212

13+
.separation-line {
14+
width: 100%;
15+
height: 1px;
16+
margin: 0 auto;
17+
background-color: $dv-border-color;
18+
margin-block: 1.5rem;
19+
}
20+
1321
.featured-items-wrapper {
1422
min-width: 100%;
23+
24+
.separation-line {
25+
display: none;
26+
}
27+
28+
&:has(h4) {
29+
.separation-line {
30+
display: block;
31+
}
32+
}
1533
}
1634

1735
.middle-search-cta-wrapper {
@@ -23,11 +41,3 @@
2341
width: 100%;
2442
padding-block: 2rem;
2543
}
26-
27-
.separation-line {
28-
width: 100%;
29-
height: 1px;
30-
margin: 0 auto;
31-
background-color: $dv-border-color;
32-
margin-block: 1.5rem;
33-
}

src/sections/homepage/Homepage.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@ interface HomepageProps {
1414
collectionRepository: CollectionRepository
1515
}
1616

17-
// TODO:ME - Create Feaured Item by id page
18-
// TODO:ME - Use that page component for showing it in the preview carousel
17+
// TODO:ME - Add translations for home page texts
18+
// TODO:ME - Detect if user prefers reduced motion with javascript and avoid startValue of counter, else startValue of 0
19+
// TODO:ME - Placeholder skeleton featured items card while loading
1920
// TODO:ME - Modify card to show dvObject types and make a storybook example
21+
// TODO:ME - Storybook for Featured Item Page
22+
// TODO:ME - Unit tests for Homepage and new FeaturedItems slider
2023

2124
export const Homepage = ({ collectionRepository }: HomepageProps) => {
2225
const { collection, isLoading: isLoadingCollection } = useCollection(collectionRepository)
@@ -53,10 +56,9 @@ export const Homepage = ({ collectionRepository }: HomepageProps) => {
5356
<FeaturedItems
5457
collectionRepository={collectionRepository}
5558
collectionId={collection.id}
56-
// hideTitle
5759
/>
60+
<div className={styles['separation-line']} />
5861
</div>
59-
<div className={styles['separation-line']} />
6062
</>
6163
)}
6264

src/sections/homepage/usage/Usage.module.scss

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
@use 'sass:color';
12
@import 'node_modules/@iqss/dataverse-design-system/src/lib/assets/styles/design-tokens/colors.module';
23

34
.card {
@@ -17,8 +18,8 @@
1718
justify-content: flex-end;
1819

1920
.cta_link_text {
20-
color: $dv-brand-color;
21-
font-weight: 600;
21+
color: color.adjust($dv-brand-color, $lightness: -9%);
22+
font-weight: 500;
2223
}
2324
}
2425
}

src/stories/homepage/Homepage.stories.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import { Meta, StoryObj } from '@storybook/react'
22
import Homepage from '../../sections/homepage/Homepage'
33
import { WithI18next } from '../WithI18next'
44
import { WithLayout } from '../WithLayout'
5+
import { CollectionMockRepository } from '../collection/CollectionMockRepository'
6+
import { CollectionFeaturedItemMother } from '@tests/component/collection/domain/models/CollectionFeaturedItemMother'
7+
import { FakerHelper } from '@tests/component/shared/FakerHelper'
58

69
const meta: Meta<typeof Homepage> = {
710
title: 'Pages/Homepage',
@@ -17,5 +20,20 @@ export default meta
1720
type Story = StoryObj<typeof Homepage>
1821

1922
export const Default: Story = {
20-
render: () => <Homepage />
23+
render: () => <Homepage collectionRepository={new CollectionMockRepository()} />
24+
}
25+
26+
const collectionRepositoryWithFeaturedItems = new CollectionMockRepository()
27+
collectionRepositoryWithFeaturedItems.getFeaturedItems = () => {
28+
return new Promise((resolve) => {
29+
setTimeout(() => {
30+
resolve([
31+
...CollectionFeaturedItemMother.createFeaturedItems(),
32+
...CollectionFeaturedItemMother.createFeaturedItems()
33+
])
34+
}, FakerHelper.loadingTimout())
35+
})
36+
}
37+
export const WithFeaturedItems: Story = {
38+
render: () => <Homepage collectionRepository={collectionRepositoryWithFeaturedItems} />
2139
}

0 commit comments

Comments
 (0)