Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add validation errors to form fields for callouts #6722

Merged
merged 12 commits into from
Dec 9, 2022

Conversation

tkgnm
Copy link
Contributor

@tkgnm tkgnm commented Dec 7, 2022

What does this change?

Callouts in DCR

This PR is part of a larger body of work to create a new Callout component in DCR. We are separating this PR into chunks so that it is easier to communicate the intent of each PR and to make it easier for DCR to review.

Why?

This PR adds more functionality to our callout form fields. We already have form components in the repo, but currently they do not take a custom validation error message which is necessary to display the custom styling provided by Source.

Previously, passing in custom validation information was not necessary as our legacy callout form did not use any form validation beyond what browsers provide by default. This meant that the only form of validation we could implement was to check if a required field was empty. This prevented us from using the custom Source error message styling as we need to pass a custom string down to the form field. With our validationErrors object, we can now do just this!

How have I tested this?

I've tested it on DCR code and it works just as expected - there are no changes to the UI or behaviour of the current (soon to be legacy) form, which is just what we expect. This is going to become more useful in a subsequent PR that will perform custom form validation on a callout component.

Screenshots

Default browser validation Custom source validation
before after

@github-actions
Copy link

github-actions bot commented Dec 7, 2022

⚡️ Lighthouse report for the changes in this PR

Lighthouse tested 2 URLs

⚠️ Budget exceeded for 4 of 10 audits.

Report for Article

tested url https://www.theguardian.com/commentisfree/2020/feb/08/hungary-now-for-the-new-right-what-venezuela-once-was-for-the-left

Category Status Expected Actual
First Contentful Paint 1500 1255
Largest Contentful Paint 3000 1960
Time to Interactive 3500 3300
Cumulative Layout Shift ⚠️ 0.002 0.016917
accessibility 0.97 1.000000

Report for Front

tested url https://www.theguardian.com/uk

Category Status Expected Actual
First Contentful Paint 1500 1415
Largest Contentful Paint 3000 2238
Time to Interactive ⚠️ 3500 3578
Cumulative Layout Shift ⚠️ 0.002 0.011139
accessibility ⚠️ 0.97 0.960000

@github-actions
Copy link

github-actions bot commented Dec 7, 2022

Size Change: -19.5 kB (-1%)

Total Size: 2.4 MB

Filename Size Change
dotcom-rendering/dist/3420.modern.********************.js 0 B -4.01 kB (removed) 🏆
dotcom-rendering/dist/4046.legacy.********************.js 0 B -7.44 kB (removed) 🏆
dotcom-rendering/dist/5226.modern.********************.js 9.48 kB -1.04 kB (-10%) 👏
dotcom-rendering/dist/5398.legacy.********************.js 0 B -4 kB (removed) 🏆
dotcom-rendering/dist/5398.modern.********************.js 0 B -3.69 kB (removed) 🏆
dotcom-rendering/dist/9408.legacy.********************.js 0 B -5.22 kB (removed) 🏆
dotcom-rendering/dist/9408.modern.********************.js 0 B -5.49 kB (removed) 🏆
dotcom-rendering/dist/bootCmp.legacy.********************.js 36.9 kB -336 B (-1%)
dotcom-rendering/dist/CalloutEmbedBlockComponent-importable.legacy.********************.js 4.93 kB +181 B (+4%)
dotcom-rendering/dist/CalloutEmbedBlockComponent-importable.modern.********************.js 4.64 kB +190 B (+4%)
dotcom-rendering/dist/frontend.server.js 542 kB +1.17 kB (0%)
dotcom-rendering/dist/HeaderTopBar-importable.legacy.********************.js 4.85 kB +351 B (+8%) 🔍
dotcom-rendering/dist/ReaderRevenueLinks-importable.legacy.********************.js 5.92 kB +3.56 kB (+151%) 🆘
dotcom-rendering/dist/ReaderRevenueLinks-importable.modern.********************.js 5.54 kB +3.27 kB (+144%) 🆘
dotcom-rendering/dist/sentryLoader.legacy.********************.js 37.7 kB -342 B (-1%)
dotcom-rendering/dist/SupportTheG-importable.modern.********************.js 5.5 kB +3.27 kB (+146%) 🆘
ℹ️ View Unchanged
Filename Size Change
dotcom-rendering/dist/1111.legacy.********************.js 4.19 kB 0 B
dotcom-rendering/dist/1111.modern.********************.js 4.14 kB 0 B
dotcom-rendering/dist/1124.modern.********************.js 8.35 kB 0 B
dotcom-rendering/dist/1423.modern.********************.js 3.53 kB 0 B
dotcom-rendering/dist/1522.legacy.********************.js 4.01 kB 0 B
dotcom-rendering/dist/1784.legacy.********************.js 3.81 kB 0 B
dotcom-rendering/dist/1954.modern.********************.js 6.7 kB 0 B
dotcom-rendering/dist/251.legacy.********************.js 4.65 kB 0 B
dotcom-rendering/dist/2513.legacy.********************.js 2.92 kB 0 B
dotcom-rendering/dist/2513.modern.********************.js 2.92 kB 0 B
dotcom-rendering/dist/2635.modern.********************.js 6.33 kB 0 B
dotcom-rendering/dist/2727.legacy.********************.js 4.28 kB 0 B
dotcom-rendering/dist/2850.legacy.********************.js 10.2 kB 0 B
dotcom-rendering/dist/2850.modern.********************.js 10.5 kB 0 B
dotcom-rendering/dist/2913.legacy.********************.js 6.77 kB 0 B
dotcom-rendering/dist/3014.modern.********************.js 24.6 kB 0 B
dotcom-rendering/dist/3039.legacy.********************.js 2.9 kB 0 B
dotcom-rendering/dist/3039.modern.********************.js 2.89 kB 0 B
dotcom-rendering/dist/3107.legacy.********************.js 6.05 kB 0 B
dotcom-rendering/dist/3107.modern.********************.js 5.92 kB 0 B
dotcom-rendering/dist/3178.legacy.********************.js 5.57 kB 0 B
dotcom-rendering/dist/3187.legacy.********************.js 8.05 kB 0 B
dotcom-rendering/dist/3230.legacy.********************.js 3.3 kB 0 B
dotcom-rendering/dist/3428.legacy.********************.js 3.75 kB 0 B
dotcom-rendering/dist/3428.modern.********************.js 3.75 kB 0 B
dotcom-rendering/dist/3490.legacy.********************.js 23.8 kB 0 B
dotcom-rendering/dist/3490.modern.********************.js 23.8 kB 0 B
dotcom-rendering/dist/3584.legacy.********************.js 1.8 kB 0 B
dotcom-rendering/dist/3584.modern.********************.js 1.8 kB 0 B
dotcom-rendering/dist/3738.legacy.********************.js 6.81 kB 0 B
dotcom-rendering/dist/3738.modern.********************.js 6.72 kB 0 B
dotcom-rendering/dist/3750.legacy.********************.js 25.1 kB 0 B
dotcom-rendering/dist/385.legacy.********************.js 5.29 kB 0 B
dotcom-rendering/dist/385.modern.********************.js 5.29 kB 0 B
dotcom-rendering/dist/4356.modern.********************.js 4.68 kB 0 B
dotcom-rendering/dist/4547.legacy.********************.js 4.62 kB 0 B
dotcom-rendering/dist/4547.modern.********************.js 4.59 kB 0 B
dotcom-rendering/dist/4734.legacy.********************.js 3.79 kB 0 B
dotcom-rendering/dist/4834.legacy.********************.js 3.98 kB 0 B
dotcom-rendering/dist/4834.modern.********************.js 3.43 kB 0 B
dotcom-rendering/dist/4850.modern.********************.js 4.23 kB 0 B
dotcom-rendering/dist/5001.modern.********************.js 20.6 kB 0 B
dotcom-rendering/dist/5226.legacy.********************.js 9.88 kB 0 B
dotcom-rendering/dist/5481.legacy.********************.js 3.45 kB 0 B
dotcom-rendering/dist/5481.modern.********************.js 3.43 kB 0 B
dotcom-rendering/dist/5578.legacy.********************.js 5.05 kB 0 B
dotcom-rendering/dist/5578.modern.********************.js 4.99 kB 0 B
dotcom-rendering/dist/5697.modern.********************.js 4.8 kB 0 B
dotcom-rendering/dist/5814.legacy.********************.js 3.79 kB 0 B
dotcom-rendering/dist/5888.modern.********************.js 4.61 kB 0 B
dotcom-rendering/dist/5951.legacy.********************.js 3.79 kB 0 B
dotcom-rendering/dist/598.legacy.********************.js 3.69 kB 0 B
dotcom-rendering/dist/598.modern.********************.js 3.38 kB 0 B
dotcom-rendering/dist/6053.legacy.********************.js 4.62 kB +5 B (0%)
dotcom-rendering/dist/6053.modern.********************.js 4.59 kB +4 B (0%)
dotcom-rendering/dist/6087.legacy.********************.js 6.21 kB 0 B
dotcom-rendering/dist/6131.legacy.********************.js 4.3 kB 0 B
dotcom-rendering/dist/6131.modern.********************.js 4.3 kB 0 B
dotcom-rendering/dist/6544.modern.********************.js 4.51 kB 0 B
dotcom-rendering/dist/6574.modern.********************.js 7.07 kB 0 B
dotcom-rendering/dist/6589.legacy.********************.js 7.45 kB 0 B
dotcom-rendering/dist/684.legacy.********************.js 7.56 kB 0 B
dotcom-rendering/dist/684.modern.********************.js 7.56 kB 0 B
dotcom-rendering/dist/6881.legacy.********************.js 6.08 kB 0 B
dotcom-rendering/dist/6881.modern.********************.js 5.57 kB 0 B
dotcom-rendering/dist/6918.modern.********************.js 3.77 kB 0 B
dotcom-rendering/dist/7154.legacy.********************.js 5.32 kB 0 B
dotcom-rendering/dist/7154.modern.********************.js 5.29 kB 0 B
dotcom-rendering/dist/7185.legacy.********************.js 3.55 kB 0 B
dotcom-rendering/dist/7185.modern.********************.js 3.53 kB 0 B
dotcom-rendering/dist/7417.legacy.********************.js 7.06 kB 0 B
dotcom-rendering/dist/7417.modern.********************.js 6.7 kB 0 B
dotcom-rendering/dist/7555.legacy.********************.js 8.12 kB -1 B (0%)
dotcom-rendering/dist/7555.modern.********************.js 6.69 kB 0 B
dotcom-rendering/dist/7576.legacy.********************.js 10.1 kB +2 B (0%)
dotcom-rendering/dist/7576.modern.********************.js 8.55 kB +2 B (0%)
dotcom-rendering/dist/7585.legacy.********************.js 5.32 kB 0 B
dotcom-rendering/dist/7585.modern.********************.js 5.29 kB 0 B
dotcom-rendering/dist/7716.legacy.********************.js 9.16 kB 0 B
dotcom-rendering/dist/7731.modern.********************.js 4.95 kB 0 B
dotcom-rendering/dist/7800.legacy.********************.js 11.3 kB 0 B
dotcom-rendering/dist/7800.modern.********************.js 11.3 kB 0 B
dotcom-rendering/dist/7812.modern.********************.js 4.2 kB 0 B
dotcom-rendering/dist/7829.modern.********************.js 3.4 kB 0 B
dotcom-rendering/dist/8227.legacy.********************.js 3.75 kB 0 B
dotcom-rendering/dist/8227.modern.********************.js 3.74 kB 0 B
dotcom-rendering/dist/8558.legacy.********************.js 5.22 kB 0 B
dotcom-rendering/dist/8558.modern.********************.js 5.49 kB 0 B
dotcom-rendering/dist/8571.modern.********************.js 5.57 kB 0 B
dotcom-rendering/dist/8829.legacy.********************.js 2.98 kB 0 B
dotcom-rendering/dist/8995.modern.********************.js 5.31 kB 0 B
dotcom-rendering/dist/9393.legacy.********************.js 4.19 kB 0 B
dotcom-rendering/dist/9394.legacy.********************.js 5.04 kB 0 B
dotcom-rendering/dist/9562.legacy.********************.js 6.45 kB 0 B
dotcom-rendering/dist/9613.legacy.********************.js 4.29 kB 0 B
dotcom-rendering/dist/9614.legacy.********************.js 21.6 kB 0 B
dotcom-rendering/dist/9751.legacy.********************.js 5.89 kB 0 B
dotcom-rendering/dist/9861.modern.********************.js 6.21 kB 0 B
dotcom-rendering/dist/9933.legacy.********************.js 9.14 kB 0 B
dotcom-rendering/dist/9933.modern.********************.js 8.61 kB 0 B
dotcom-rendering/dist/AlreadyVisited-importable.legacy.********************.js 5.72 kB 0 B
dotcom-rendering/dist/AlreadyVisited-importable.modern.********************.js 5.72 kB 0 B
dotcom-rendering/dist/atomIframe.legacy.********************.js 13.5 kB 0 B
dotcom-rendering/dist/atomIframe.modern.********************.js 13.4 kB 0 B
dotcom-rendering/dist/AudioAtomWrapper-importable.legacy.********************.js 524 B 0 B
dotcom-rendering/dist/AudioAtomWrapper-importable.modern.********************.js 486 B 0 B
dotcom-rendering/dist/bootCmp.modern.********************.js 33.1 kB 0 B
dotcom-rendering/dist/Branding-importable.legacy.********************.js 7.89 kB 0 B
dotcom-rendering/dist/Branding-importable.modern.********************.js 7.88 kB 0 B
dotcom-rendering/dist/braze-web-sdk-core.legacy.********************.js 36.9 kB 0 B
dotcom-rendering/dist/braze-web-sdk-core.modern.********************.js 36.9 kB 0 B
dotcom-rendering/dist/BrazeMessaging-importable.legacy.********************.js 9.11 kB -1 B (0%)
dotcom-rendering/dist/BrazeMessaging-importable.modern.********************.js 8.1 kB 0 B
dotcom-rendering/dist/Carousel-importable.legacy.********************.js 4.87 kB 0 B
dotcom-rendering/dist/Carousel-importable.modern.********************.js 4.7 kB 0 B
dotcom-rendering/dist/ChartAtomWrapper-importable.legacy.********************.js 284 B 0 B
dotcom-rendering/dist/ChartAtomWrapper-importable.modern.********************.js 275 B 0 B
dotcom-rendering/dist/CommentCount-importable.legacy.********************.js 1.53 kB 0 B
dotcom-rendering/dist/CommentCount-importable.modern.********************.js 1.51 kB 0 B
dotcom-rendering/dist/CommercialMetrics-importable.legacy.********************.js 4.41 kB 0 B
dotcom-rendering/dist/CommercialMetrics-importable.modern.********************.js 4.27 kB 0 B
dotcom-rendering/dist/CoreVitals-importable.legacy.********************.js 4.1 kB 0 B
dotcom-rendering/dist/CoreVitals-importable.modern.********************.js 3.73 kB 0 B
dotcom-rendering/dist/debug.js 1.75 kB 0 B
dotcom-rendering/dist/DiscussionContainer-importable.legacy.********************.js 3.86 kB 0 B
dotcom-rendering/dist/DiscussionContainer-importable.modern.********************.js 3.61 kB 0 B
dotcom-rendering/dist/DiscussionMeta-importable.legacy.********************.js 2.01 kB 0 B
dotcom-rendering/dist/DiscussionMeta-importable.modern.********************.js 1.97 kB 0 B
dotcom-rendering/dist/DocumentBlockComponent-importable.legacy.********************.js 1.67 kB 0 B
dotcom-rendering/dist/DocumentBlockComponent-importable.modern.********************.js 1.59 kB 0 B
dotcom-rendering/dist/dynamicImport.legacy.********************.js 22 kB 0 B
dotcom-rendering/dist/dynamicImport.modern.********************.js 21.5 kB 0 B
dotcom-rendering/dist/EditionDropdown-importable.legacy.********************.js 4.51 kB 0 B
dotcom-rendering/dist/EditionDropdown-importable.modern.********************.js 3.55 kB 0 B
dotcom-rendering/dist/EmbedBlockComponent-importable.legacy.********************.js 4.35 kB 0 B
dotcom-rendering/dist/EmbedBlockComponent-importable.modern.********************.js 3.15 kB 0 B
dotcom-rendering/dist/embedIframe.legacy.********************.js 13.5 kB 0 B
dotcom-rendering/dist/embedIframe.modern.********************.js 13.4 kB 0 B
dotcom-rendering/dist/EnhancePinnedPost-importable.legacy.********************.js 7.22 kB 0 B
dotcom-rendering/dist/EnhancePinnedPost-importable.modern.********************.js 6.66 kB 0 B
dotcom-rendering/dist/FetchCommentCounts-importable.legacy.********************.js 7.52 kB 0 B
dotcom-rendering/dist/FetchCommentCounts-importable.modern.********************.js 6.99 kB 0 B
dotcom-rendering/dist/FetchOnwardsData-importable.legacy.********************.js 2.76 kB 0 B
dotcom-rendering/dist/FetchOnwardsData-importable.modern.********************.js 2.71 kB 0 B
dotcom-rendering/dist/FilterButton-importable.legacy.********************.js 2.94 kB 0 B
dotcom-rendering/dist/FilterButton-importable.modern.********************.js 2.35 kB 0 B
dotcom-rendering/dist/FilterKeyEventsToggle-importable.legacy.********************.js 795 B 0 B
dotcom-rendering/dist/FilterKeyEventsToggle-importable.modern.********************.js 757 B 0 B
dotcom-rendering/dist/FocusStyles-importable.legacy.********************.js 4.73 kB 0 B
dotcom-rendering/dist/FocusStyles-importable.modern.********************.js 4.67 kB 0 B
dotcom-rendering/dist/ga.legacy.********************.js 20 kB 0 B
dotcom-rendering/dist/ga.modern.********************.js 19.3 kB 0 B
dotcom-rendering/dist/GetCricketScoreboard-importable.legacy.********************.js 2.16 kB 0 B
dotcom-rendering/dist/GetCricketScoreboard-importable.modern.********************.js 2.1 kB 0 B
dotcom-rendering/dist/GetMatchNav-importable.legacy.********************.js 7.82 kB 0 B
dotcom-rendering/dist/GetMatchNav-importable.modern.********************.js 7.69 kB 0 B
dotcom-rendering/dist/GetMatchStats-importable.legacy.********************.js 5.36 kB 0 B
dotcom-rendering/dist/GetMatchStats-importable.modern.********************.js 6.6 kB 0 B
dotcom-rendering/dist/GetMatchTabs-importable.legacy.********************.js 2.92 kB 0 B
dotcom-rendering/dist/GetMatchTabs-importable.modern.********************.js 2.83 kB 0 B
dotcom-rendering/dist/guardian-braze-components-banner.js 11.4 kB -1 B (0%)
dotcom-rendering/dist/guardian-braze-components-banner.legacy.********************.js 11.8 kB 0 B
dotcom-rendering/dist/guardian-braze-components-banner.modern.********************.js 11.6 kB +1 B (0%)
dotcom-rendering/dist/guardian-braze-components-end-of-article.js 10.1 kB 0 B
dotcom-rendering/dist/guardian-braze-components-end-of-article.legacy.********************.js 10.1 kB 0 B
dotcom-rendering/dist/guardian-braze-components-end-of-article.modern.********************.js 9.8 kB 0 B
dotcom-rendering/dist/GuideAtomWrapper-importable.legacy.********************.js 285 B 0 B
dotcom-rendering/dist/GuideAtomWrapper-importable.modern.********************.js 277 B 0 B
dotcom-rendering/dist/HeaderTopBar-importable.modern.********************.js 4.77 kB 0 B
dotcom-rendering/dist/initDiscussion.legacy.********************.js 32 kB 0 B
dotcom-rendering/dist/initDiscussion.modern.********************.js 29 kB 0 B
dotcom-rendering/dist/InstagramBlockComponent-importable.legacy.********************.js 5.84 kB 0 B
dotcom-rendering/dist/InstagramBlockComponent-importable.modern.********************.js 4.75 kB 0 B
dotcom-rendering/dist/InteractiveBlockComponent-importable.legacy.********************.js 4.53 kB 0 B
dotcom-rendering/dist/InteractiveBlockComponent-importable.modern.********************.js 4.37 kB 0 B
dotcom-rendering/dist/islands.legacy.********************.js 32.9 kB 0 B
dotcom-rendering/dist/islands.modern.********************.js 29.5 kB 0 B
dotcom-rendering/dist/KeyEventsCarousel-importable.legacy.********************.js 2.35 kB 0 B
dotcom-rendering/dist/KeyEventsCarousel-importable.modern.********************.js 1.98 kB 0 B
dotcom-rendering/dist/KnowledgeQuizAtomWrapper-importable.legacy.********************.js 289 B 0 B
dotcom-rendering/dist/KnowledgeQuizAtomWrapper-importable.modern.********************.js 281 B 0 B
dotcom-rendering/dist/LabsHeader-importable.legacy.********************.js 7.25 kB 0 B
dotcom-rendering/dist/LabsHeader-importable.modern.********************.js 4.71 kB 0 B
dotcom-rendering/dist/Links-importable.legacy.********************.js 1.99 kB 0 B
dotcom-rendering/dist/Links-importable.modern.********************.js 1.96 kB 0 B
dotcom-rendering/dist/LiveBlogEpic-importable.legacy.********************.js 2.03 kB 0 B
dotcom-rendering/dist/LiveBlogEpic-importable.modern.********************.js 1.97 kB 0 B
dotcom-rendering/dist/Liveness-importable.legacy.********************.js 6.8 kB 0 B
dotcom-rendering/dist/Liveness-importable.modern.********************.js 5.83 kB 0 B
dotcom-rendering/dist/MapEmbedBlockComponent-importable.legacy.********************.js 3.08 kB 0 B
dotcom-rendering/dist/MapEmbedBlockComponent-importable.modern.********************.js 5.25 kB 0 B
dotcom-rendering/dist/MostViewedFooter-importable.legacy.********************.js 3.08 kB 0 B
dotcom-rendering/dist/MostViewedFooter-importable.modern.********************.js 2.45 kB 0 B
dotcom-rendering/dist/MostViewedFooterData-importable.legacy.********************.js 2.44 kB 0 B
dotcom-rendering/dist/MostViewedFooterData-importable.modern.********************.js 2.4 kB 0 B
dotcom-rendering/dist/MostViewedRightWrapper-importable.legacy.********************.js 6.8 kB 0 B
dotcom-rendering/dist/MostViewedRightWrapper-importable.modern.********************.js 6.53 kB 0 B
dotcom-rendering/dist/newsletterEmbedIframe.legacy.********************.js 12.4 kB 0 B
dotcom-rendering/dist/newsletterEmbedIframe.modern.********************.js 12.4 kB 0 B
dotcom-rendering/dist/OnwardsUpper-importable.legacy.********************.js 7.87 kB 0 B
dotcom-rendering/dist/OnwardsUpper-importable.modern.********************.js 7.57 kB 0 B
dotcom-rendering/dist/ophan.legacy.********************.js 24.9 kB 0 B
dotcom-rendering/dist/ophan.modern.********************.js 24.1 kB 0 B
dotcom-rendering/dist/PersonalityQuizAtomWrapper-importable.legacy.********************.js 291 B 0 B
dotcom-rendering/dist/PersonalityQuizAtomWrapper-importable.modern.********************.js 284 B 0 B
dotcom-rendering/dist/ProfileAtomWrapper-importable.legacy.********************.js 284 B 0 B
dotcom-rendering/dist/ProfileAtomWrapper-importable.modern.********************.js 276 B 0 B
dotcom-rendering/dist/PulsingDot-importable.legacy.********************.js 2.31 kB 0 B
dotcom-rendering/dist/PulsingDot-importable.modern.********************.js 1.7 kB 0 B
dotcom-rendering/dist/QandaAtomWrapper-importable.legacy.********************.js 283 B 0 B
dotcom-rendering/dist/QandaAtomWrapper-importable.modern.********************.js 275 B 0 B
dotcom-rendering/dist/ReaderRevenueDev-importable.legacy.********************.js 4.64 kB 0 B
dotcom-rendering/dist/ReaderRevenueDev-importable.modern.********************.js 4.63 kB 0 B
dotcom-rendering/dist/readerRevenueDevUtils.js 2.67 kB 0 B
dotcom-rendering/dist/readerRevenueDevUtils.legacy.********************.js 3.97 kB 0 B
dotcom-rendering/dist/readerRevenueDevUtils.modern.********************.js 3.65 kB 0 B
dotcom-rendering/dist/RecipeMultiplier-importable.legacy.********************.js 5.71 kB 0 B
dotcom-rendering/dist/RecipeMultiplier-importable.modern.********************.js 4.59 kB 0 B
dotcom-rendering/dist/relativeTime.legacy.********************.js 12.5 kB 0 B
dotcom-rendering/dist/relativeTime.modern.********************.js 12.1 kB 0 B
dotcom-rendering/dist/RichLinkComponent-importable.legacy.********************.js 5.73 kB 0 B
dotcom-rendering/dist/RichLinkComponent-importable.modern.********************.js 5.7 kB 0 B
dotcom-rendering/dist/SecureSignupIframe-importable.legacy.********************.js 3.1 kB 0 B
dotcom-rendering/dist/SecureSignupIframe-importable.modern.********************.js 2.8 kB 0 B
dotcom-rendering/dist/sentry.legacy.********************.js 791 B 0 B
dotcom-rendering/dist/sentry.modern.********************.js 789 B 0 B
dotcom-rendering/dist/sentryLoader.modern.********************.js 33.6 kB 0 B
dotcom-rendering/dist/SetABTests-importable.legacy.********************.js 6.58 kB 0 B
dotcom-rendering/dist/SetABTests-importable.modern.********************.js 6.45 kB 0 B
dotcom-rendering/dist/ShareCount-importable.legacy.********************.js 1.64 kB 0 B
dotcom-rendering/dist/ShareCount-importable.modern.********************.js 1.62 kB 0 B
dotcom-rendering/dist/shimport.legacy.********************.js 9.53 kB 0 B
dotcom-rendering/dist/shimport.modern.********************.js 9.99 kB 0 B
dotcom-rendering/dist/ShowHideContainers-importable.legacy.********************.js 1.64 kB 0 B
dotcom-rendering/dist/ShowHideContainers-importable.modern.********************.js 1.07 kB 0 B
dotcom-rendering/dist/ShowMore-importable.legacy.********************.js 4.43 kB +39 B (+1%)
dotcom-rendering/dist/ShowMore-importable.modern.********************.js 4.32 kB +34 B (+1%)
dotcom-rendering/dist/SignInGateMain.js 3.01 kB 0 B
dotcom-rendering/dist/SignInGateMain.legacy.********************.js 5.21 kB 0 B
dotcom-rendering/dist/SignInGateMain.modern.********************.js 4.92 kB 0 B
dotcom-rendering/dist/SignInGateSelector-importable.legacy.********************.js 4.41 kB 0 B
dotcom-rendering/dist/SignInGateSelector-importable.modern.********************.js 4.12 kB 0 B
dotcom-rendering/dist/SlotBodyEnd-importable.legacy.********************.js 3.04 kB 0 B
dotcom-rendering/dist/SlotBodyEnd-importable.modern.********************.js 4.55 kB 0 B
dotcom-rendering/dist/SpotifyBlockComponent-importable.legacy.********************.js 3 kB 0 B
dotcom-rendering/dist/SpotifyBlockComponent-importable.modern.********************.js 5.17 kB 0 B
dotcom-rendering/dist/StickyBottomBanner-importable.legacy.********************.js 8.55 kB -2 B (0%)
dotcom-rendering/dist/StickyBottomBanner-importable.modern.********************.js 9.57 kB 0 B
dotcom-rendering/dist/SubNav-importable.legacy.********************.js 3.63 kB 0 B
dotcom-rendering/dist/SubNav-importable.modern.********************.js 3.05 kB 0 B
dotcom-rendering/dist/SupportTheG-importable.legacy.********************.js 5.88 kB 0 B
dotcom-rendering/dist/TimelineAtomWrapper-importable.legacy.********************.js 284 B 0 B
dotcom-rendering/dist/TimelineAtomWrapper-importable.modern.********************.js 276 B 0 B
dotcom-rendering/dist/TopicFilterBank-importable.legacy.********************.js 1.76 kB 0 B
dotcom-rendering/dist/TopicFilterBank-importable.modern.********************.js 1.7 kB 0 B
dotcom-rendering/dist/TopRightAdSlot-importable.legacy.********************.js 1.98 kB 0 B
dotcom-rendering/dist/TopRightAdSlot-importable.modern.********************.js 1.98 kB 0 B
dotcom-rendering/dist/TweetBlockComponent-importable.legacy.********************.js 827 B 0 B
dotcom-rendering/dist/TweetBlockComponent-importable.modern.********************.js 831 B 0 B
dotcom-rendering/dist/UnsafeEmbedBlockComponent-importable.legacy.********************.js 5.85 kB 0 B
dotcom-rendering/dist/UnsafeEmbedBlockComponent-importable.modern.********************.js 4.76 kB 0 B
dotcom-rendering/dist/VideoFacebookBlockComponent-importable.legacy.********************.js 3.09 kB 0 B
dotcom-rendering/dist/VideoFacebookBlockComponent-importable.modern.********************.js 5.27 kB 0 B
dotcom-rendering/dist/VineBlockComponent-importable.legacy.********************.js 5.64 kB 0 B
dotcom-rendering/dist/VineBlockComponent-importable.modern.********************.js 4.53 kB 0 B
dotcom-rendering/dist/YoutubeBlockComponent-importable.legacy.********************.js 7.05 kB 0 B
dotcom-rendering/dist/YoutubeBlockComponent-importable.modern.********************.js 6.76 kB 0 B

compressed-size-action

@@ -1,36 +1,43 @@
import { CampaignFieldSelect } from '../../../types/content';
import { Select as SourceSelect } from '@guardian/source-react-components';
import type { CampaignFieldSelect } from 'src/types/content';
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're now using the select box from Source - happy days!

children={[
{ label: 'default', value: 'Please choose an option ...' },
]
.concat(formField.options)
Copy link
Contributor Author

@tkgnm tkgnm Dec 8, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Source behaves in such a way that if a select box is mandatory, and the user has NOT changed the value, it will raise an error with the user. Therefore, we add a default 'Please choose an option' field to the start of any array of options passed down to us

Sorry - this is a mistake! Source does not provide us this behaviour. This logic will need to be added to form.tsx. This will come in a subsequent PR. I've now removed this change.

<>
<SourceTextArea
data-testid={`form-field-${formField.id}`}
label={formField.label}
supporting={formField.description}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously, the description was not rendered on a text area. I think this is a mistake, so I've added it here.

@tkgnm tkgnm changed the title Tom king form fields refactor Add validation errors to form fields for callouts Dec 8, 2022
@tkgnm tkgnm marked this pull request as ready for review December 8, 2022 16:43
@tkgnm tkgnm requested a review from a team as a code owner December 8, 2022 16:43
@bryophyta
Copy link
Contributor

Thanks for your helpful annotations in the PR comments! It's generally looking good to me, although I've noted a couple of issues. The ?? one is non-blocking, but it would be good to hear more about the label one before approving, if that's okay? Happy to discuss further if it'd be useful!

<label
css={[fieldLabelStyles, hideLabel && visuallyHidden]}
htmlFor={formField.name}
hidden={formField.hideLabel}
Copy link
Contributor Author

@tkgnm tkgnm Dec 8, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The hideLabel property is now used directly on the label element. If this is true, we implement the visuallyHidden style from Source. I believe that I am now essentially copying the same behaviour as Source (see here: https://github.com/guardian/csnx/blob/main/libs/%40guardian/source-react-components/src/label/Label.tsx)

If I am copying Source, that begs the question:

Q: Why have a custom FieldLabel? Does Source not always provide us a label?
A: Yes - it does, but unfortunately not every single sort of form component we need is available in Source. Hence, we may need to occasionally create a custom form component and give it our bespoke FieldLabel component for the label and description.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice write up, tom!

@@ -21,12 +23,14 @@ export const MultiSelect = ({
<div data-testid={`form-field-${formField.id}`}>
{multiple ? (
<CheckboxSelect
validationErrors={validationErrors ?? undefined}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implemented @bryophyta suggested refactoring - thanks for the tip!

formField: CampaignFieldSelect;
formData: { [key in string]: any };
setFormData: React.Dispatch<React.SetStateAction<{ [x: string]: any }>>;
};

export const Select = ({ formField, formData, setFormData }: Props) => (
<>
<FieldLabel formField={formField} />
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that we're using the Select component from Source, there is no need to use a custom FieldLabel - once again thanks for pointing that out @bryophyta

setFormData,
}: Props) => (
<SourceSelect
hideLabel={formField.hideLabel}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hideLabel being used here as Source would like us to :)

Copy link
Contributor

@abeddow91 abeddow91 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really great work and nice explanation comments

@tkgnm tkgnm requested a review from bryophyta December 9, 2022 09:41
Copy link
Contributor

@bryophyta bryophyta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for taking a look at the label issue, and thanks for such a clear write-up!

@tkgnm tkgnm merged commit 532184c into main Dec 9, 2022
@tkgnm tkgnm deleted the tom-king-form-fields-refactor branch December 9, 2022 11:39
nicl added a commit that referenced this pull request Dec 9, 2022
…efactor"

This reverts commit 532184c, reversing
changes made to f084a0f.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants