Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JS@PayPal - Specialization with Dynamic React F...
Search
Bruno Sanches
September 23, 2016
Programming
1
110
JS@PayPal - Specialization with Dynamic React Forms
Bruno Sanches
September 23, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
550
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
200
Fragmented Architectures
denyspoltorak
0
150
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
700
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.8k
AI & Enginnering
codelynx
0
110
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
4
250
ぼくの開発環境2026
yuzneri
0
140
Package Management Learnings from Homebrew
mikemcquaid
0
210
CSC307 Lecture 07
javiergs
PRO
0
550
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
600
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
250
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
580
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.1k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
430
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
160
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
90
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
170
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
49k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
63
A Tale of Four Properties
chriscoyier
162
24k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Statistics for Hackers
jakevdp
799
230k
Transcript
Specialization with dynamic React forms
@brunopsanches Bruno Sanches
Scaling merchant onboarding Lessons and updates Usability tests Current status
Scaling merchant onboarding Lessons and updates Usability tests Current status
page1.dust email.dust email.js email.css name.dust name.js name.css address.dust address.js address.css
page1.js page1.css
Flow
Default flow Team 1 Group flow 1 Flow 1.1 Flow
1.2 Team 2 Group flow 2 Flow 2.1 Flow 2.2 Team 3 Flow 3 Team 4 Flow 4
Scaling merchant onboarding Lessons and updates Usability tests Current status
Rewrite
Rewrite Client && Server side
Rewrite Client && Server side F0 && Named Hooks
Rewrite Client && Server side F0 && Named Hooks React
forms && Specialization
React forms
Minimize client side code Flexibility++ Built for open source
None
None
None
None
None
None
None
None
Okay, that’s a lot of
None
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
"email": { "component": "TextInput", "validations": [ "required", "emailCheck" ], "attributes":
{ "title": "email.title", "placeholder": "email.placeholder", "name": "email" }, "wrapperAttributes": { "className": "col-md-12" } }
None
None
Rewrite Client && Server side F0 && Named Hooks React
forms && Specialization
Specialization On the server side Eliminate if (country === 'US')
statements
if (country === 'US') { }
if (country === 'US') { if (product === 'product1') {
} }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } } else if (group === 'EU') { }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } } else if (group === 'EU') { if (country === 'GB') { } }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } } else if (group === 'EU') { if (country === 'GB') { if (product === 'product1') { } } }
if (country === 'US') { if (product === 'product1') {
} else if (product === 'product2') { } } else if (group === 'EU') { if (country === 'GB') { if (product === 'product1') { if (experiment === 'exp1') { } } } }
None
None
Named Hooks to the rescue Isolates business logic
Named Hooks to the rescue Isolates business logic Open source
module https://github.com/brunops/named-hooks
Demo
1. Load base form 2. Resolve abstractions 3. Call hooks
4. Render
[ 'hookName', 'hookName_Group', 'hookName_Prod', 'hookName_Country', 'hookName_Country_Prod', 'hookName_Exp', 'hookName_Country_Exp', 'hookName_Country_Prod_Exp' ]
[ 'preRenderForm', 'preRenderForm_Group', 'preRenderForm_Prod', 'preRenderForm_Country', 'preRenderForm_Country_Prod', 'preRenderForm_Exp', 'preRenderForm_Country_Exp', 'preRenderForm_Country_Prod_Exp' ]
[ 'preRenderForm', 'preRenderForm_EU', 'preRenderForm_prod', 'preRenderForm_GB', 'preRenderForm_GB_prod', 'preRenderForm_exp', 'preRenderForm_GB_exp', 'preRenderForm_GB_prod_exp' ]
Scaling merchant onboarding Lessons and updates Usability tests Current status
Usability tests - Objective Tested with developers
Usability tests - Objective Tested with developers Configuration driven forms
Usability tests - Objective Tested with developers Configuration driven forms
Documentation discovery
Usability tests - Setup Script
Usability tests - Setup Script 1. Create a form with
text fields 2. Add a dropdown 3. Configure validations 4. Abstract fields 5. Create new page
Usability tests - Setup Script Six developers
Usability tests - Setup Script Six developers 30 minutes each
:(
Scaling merchant onboarding Lessons and updates Usability tests Current status
Current status 4 teams currently working with F0 Working towards
open sourcing https://github.paypal.com/f0/f0/issues
@brunopsanches Thank you