Skip to content

Commit c49d7c2

Browse files
authored
Merge pull request #14337 from guardian/doml/podcast-waves-sublinks
Render waveform in podcast cards in the correct area when there are sublinks
2 parents 17939b2 + dc8d0dd commit c49d7c2

File tree

4 files changed

+87
-67
lines changed

4 files changed

+87
-67
lines changed

dotcom-rendering/fixtures/manual/trails.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,7 @@ export const audioTrails: [DCRFrontCard, DCRFrontCard] = [
469469
altText:
470470
"TOPSHOT-FBL-EUR-C1-MILAN-FEYENOORD<br>TOPSHOT - Polish referee Szymon Marciniak gives a red card to AC Milan's French defender #19 Theo Hernandez (R) during the UEFA Champions League knockout round play-off second leg football match between AC Milan and Feyenoord at San Siro stadium in Milan, on February 18, 2025. (Photo by Piero CRUCIATTI / AFP) (Photo by PIERO CRUCIATTI/AFP via Getty Images)",
471471
},
472+
supportingContent: getSublinks(2),
472473
},
473474
];
474475

@@ -541,6 +542,7 @@ export const galleryTrails: [DCRFrontCard, DCRFrontCard] = [
541542
src: 'https://media.guim.co.uk/69ac2383ea611126b54373865dac3e7e77981d7e/0_39_5500_3302/master/5500.jpg',
542543
altText: 'A group of people in the street, some looking worried',
543544
},
545+
supportingContent: getSublinks(2),
544546
},
545547
];
546548

dotcom-rendering/src/components/Card/Card.stories.tsx

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import {
99
Pillar,
1010
} from '../../lib/articleFormat';
1111
import type { Branding } from '../../types/branding';
12-
import type { DCRContainerPalette } from '../../types/front';
12+
import type {
13+
DCRContainerPalette,
14+
DCRSupportingContent,
15+
} from '../../types/front';
1316
import type { MainMedia } from '../../types/mainMedia';
1417
import { ContainerOverrides } from '../ContainerOverrides';
1518
import { FrontSection } from '../FrontSection';
@@ -80,6 +83,19 @@ const mainGallery: MainMedia = {
8083
count: '5',
8184
};
8285

86+
const twoSublinks: DCRSupportingContent[] = [
87+
{
88+
...aBasicLink,
89+
headline: 'Headline 1',
90+
kickerText: 'Kicker',
91+
},
92+
{
93+
...aBasicLink,
94+
headline: 'Headline 2',
95+
kickerText: 'Kicker',
96+
},
97+
];
98+
8399
const CardWrapper = ({ children }: { children: React.ReactNode }) => {
84100
return (
85101
<div
@@ -345,23 +361,48 @@ export const WithMediaTypeAndSublinks = () => {
345361
design: ArticleDesign.Video,
346362
theme: Pillar.Sport,
347363
}}
348-
containerType="flexible/general"
349364
mainMedia={{ ...mainVideo, duration: 30 }}
350365
headlineText="Video"
351-
imagePositionOnDesktop="top"
352-
imagePositionOnMobile="left"
353-
supportingContent={[
354-
{
355-
...aBasicLink,
356-
headline: 'Headline 1',
357-
kickerText: 'Kicker',
358-
},
359-
{
360-
...aBasicLink,
361-
headline: 'Headline 2',
362-
kickerText: 'Kicker',
363-
},
364-
]}
366+
supportingContent={twoSublinks}
367+
/>
368+
</CardWrapper>
369+
<CardWrapper>
370+
<Card
371+
{...basicCardProps}
372+
format={{
373+
display: ArticleDisplay.Standard,
374+
design: ArticleDesign.Video,
375+
theme: Pillar.Sport,
376+
}}
377+
mainMedia={{ ...mainVideo, duration: 0 }}
378+
headlineText="Video without duration"
379+
supportingContent={twoSublinks}
380+
/>
381+
</CardWrapper>
382+
<CardWrapper>
383+
<Card
384+
{...basicCardProps}
385+
format={{
386+
display: ArticleDisplay.Standard,
387+
design: ArticleDesign.Audio,
388+
theme: Pillar.Sport,
389+
}}
390+
mainMedia={mainAudio}
391+
headlineText="Audio"
392+
supportingContent={twoSublinks}
393+
/>
394+
</CardWrapper>
395+
<CardWrapper>
396+
<Card
397+
{...basicCardProps}
398+
format={{
399+
display: ArticleDisplay.Standard,
400+
design: ArticleDesign.Gallery,
401+
theme: Pillar.Sport,
402+
}}
403+
mainMedia={mainGallery}
404+
headlineText="Gallery"
405+
supportingContent={twoSublinks}
365406
/>
366407
</CardWrapper>
367408
</CardGroup>
@@ -1764,18 +1805,7 @@ export const WithBetaContainerAndSublinks = () => {
17641805
{...basicCardProps}
17651806
containerType="flexible/general"
17661807
imagePositionOnMobile="bottom"
1767-
supportingContent={[
1768-
{
1769-
...aBasicLink,
1770-
headline: 'Headline 1',
1771-
kickerText: 'Kicker',
1772-
},
1773-
{
1774-
...aBasicLink,
1775-
headline: 'Headline 2',
1776-
kickerText: 'Kicker',
1777-
},
1778-
]}
1808+
supportingContent={twoSublinks}
17791809
/>
17801810
</CardWrapper>
17811811
</CardGroup>
@@ -1791,18 +1821,7 @@ export const WithBetaContainerAndSublinksNoImage = () => {
17911821
image={undefined}
17921822
containerType="flexible/general"
17931823
imagePositionOnMobile="bottom"
1794-
supportingContent={[
1795-
{
1796-
...aBasicLink,
1797-
headline: 'Headline 1',
1798-
kickerText: 'Kicker',
1799-
},
1800-
{
1801-
...aBasicLink,
1802-
headline: 'Headline 2',
1803-
kickerText: 'Kicker',
1804-
},
1805-
]}
1824+
supportingContent={twoSublinks}
18061825
/>
18071826
</CardWrapper>
18081827
</CardGroup>

dotcom-rendering/src/components/Card/components/CardLayout.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ type Props = {
2323

2424
const containerStyles = css`
2525
display: flex;
26+
position: relative;
2627
flex-basis: 100%;
2728
`;
2829

dotcom-rendering/src/components/FlexibleGeneral.stories.tsx

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@ import { breakpoints } from '@guardian/source/foundations';
22
import type { Meta, StoryObj } from '@storybook/react';
33
import { discussionApiUrl } from '../../fixtures/manual/discussionApiUrl';
44
import {
5+
audioTrails,
6+
galleryTrails,
57
getSublinks,
68
loopVideoCard,
79
opinionTrails,
810
trails,
11+
videoTrails,
912
} from '../../fixtures/manual/trails';
1013
import { ArticleDesign, ArticleDisplay, Pillar } from '../lib/articleFormat';
1114
import { customMockFetch } from '../lib/mockRESTCalls';
@@ -457,33 +460,13 @@ export const StandardCards: Story = {
457460
frontSectionTitle: 'Standard cards',
458461
groupedTrails: {
459462
...emptyGroupedTrails,
460-
standard: trails.slice(0, 4),
461-
},
462-
},
463-
};
464-
465-
export const StandardBoostedMediaCardWithSublinks: Story = {
466-
name: 'Standard boosted media card with sublinks',
467-
args: {
468-
frontSectionTitle: 'Standard boosted media card with sublinks',
469-
groupedTrails: {
470-
...emptyGroupedTrails,
471-
standard: [trails[1]].map((card) => ({
472-
...card,
473-
boostLevel: 'boost',
474-
supportingContent: getSublinks(2),
475-
})),
476-
},
477-
},
478-
};
479-
480-
export const OpinionStandardCards: Story = {
481-
name: 'Opinion standard cards',
482-
args: {
483-
frontSectionTitle: 'Opinion standard cards',
484-
groupedTrails: {
485-
...emptyGroupedTrails,
486-
standard: opinionTrails.slice(0, 2),
463+
standard: [
464+
...trails.slice(0, 4),
465+
...opinionTrails.slice(0, 2),
466+
...audioTrails.slice(0, 2),
467+
...galleryTrails.slice(0, 2),
468+
...videoTrails.slice(0, 2),
469+
],
487470
},
488471
},
489472
};
@@ -576,3 +559,18 @@ export const LoopVideoCards: Story = {
576559
},
577560
},
578561
};
562+
563+
export const StandardBoostedMediaCardWithSublinks: Story = {
564+
name: 'Standard boosted media card with sublinks',
565+
args: {
566+
frontSectionTitle: 'Standard boosted media card with sublinks',
567+
groupedTrails: {
568+
...emptyGroupedTrails,
569+
standard: [trails[1]].map((card) => ({
570+
...card,
571+
boostLevel: 'boost',
572+
supportingContent: getSublinks(2),
573+
})),
574+
},
575+
},
576+
};

0 commit comments

Comments
 (0)