50
Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016

Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Dev Brown Bag

How to Use Shared WidgetsBrendan Todaro

Kyle Nicola

12/14/2016

Page 2: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• React

• Modular Javascript patterns and tooling

• Setting up a new Javascript module

• Code organization

• Versioning plan

Not covered

Page 3: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Motivation

Widgets Library

How to Use a Widget

Shared Utilities

Contributing

Support

Future Directions

Slide 4

Slide 11

Slide 17

Slide 26

Slide 36

Slide 43

Slide 47

Agenda

Page 4: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Motivation

Page 5: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

1. Shared design, shared environment, no shared code

2. Generational shift to modular Javascript

3. Urgency to increase developer productivity

4. Industry standard

5. Tableau has unique constraints

Goal: Unify design and decrease time spent implementing UI

Motivation

Page 6: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Same design, same environment, no shared code

Page 7: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Generational shift to modular Javascript

VizClientVizPortal

Client

Server

Manager UI

Module

Module

Module

Widgets

Module

Maestro

Page 8: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

“You could build widgets independently for every client we have... Or create reusable widgets and share them.”

Scott Sherman, Dev Blog, April 2016

Page 9: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Industry standard

Page 10: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• Viz Client event system

• Hybrid React apps

• Unification

Tableau has unique constraints

Page 11: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Widgets Library

Page 12: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

1. Currently available widgets

2. Showcase

3. What’s included in a widget

Widgets Library

Page 13: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• Button

• Text field

• Checkbox

• Radio button

• Toggle

• Dropdown menu

• Flyout list menu

• Dialog

Currently available widgets

Page 15: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• Unification styles

• UX-approved behavior

• Keyboard accessibility

• Screen reader accessibility

• SVG icons

• Testing hooks

What’s included in a widget

Page 16: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

How to Use a Widget

Page 17: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

1. API

2. Controlled Components

3. Customization

4. Test IDs

5. Client-specific compatibility

6. Application configuration

How to Use a Widget

Page 18: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

API

Page 19: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

API

Page 20: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

API

Page 21: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Controlled components

[Copy content]

Page 22: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Customization

[Copy content]

Page 23: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Test IDs

[Copy content]

Page 24: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• VizClient• Z-index for stacking

• Vizportal/Angular• Wrap in directive

Client-specific compatibility

Page 25: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Application* configuration

Page 26: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Shared Utilities

Page 27: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

1. Stacking

2. Overlay

3. Interactive Styling

4. TabStyles and Dynamic Theming

5. CSS Injection

6. Other

Shared Utilities

Page 28: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Stacking

[Copy content]

Page 29: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Overlay

[Copy content]

Page 30: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Interactive Styling

[Copy content]

Page 31: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

TabStyles and Dynamic Theming

[Copy content]

Page 32: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Pointer Events Adapter

[Copy content]

Page 33: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

CSS Injection

[Copy content]

Page 34: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• React Helpers

• Polyfills

Other Utils

Page 35: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Contributing

Page 36: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

1. What belongs in Shared Widgets

2. Contribution process

3. Development flow

4. Component composition

5. Recent contributors

Contributing

Page 37: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• Could it be used in multiple clients?

• Able to follow most of our current patterns?

• Is it big enough to warrant its own module?

• Require 3rd party libraries?

What belongs in Shared Widgets

Page 38: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

1. Check if the widget is planned

2. Contact Kevin Mason, our PM

3. Work with Visual Design for approval

Contribution process

Page 39: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

1. Develop• modules/web/shared-widgets

• VSCode recommended

• > npm run dev

• > npm run test-dev

2. Update C# type definitions• workgroup/vqlweb/scriptsharp/tableau-libraries/SharedWidgets

• Build and test in Viz Client

3. Update showcase• workgroup/webclients/shared-widgets-showcase

• > npm run update-sw & npm run all & npm run copy

Development flow

Page 40: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Component composition

DynamicThemeComponent

FlyoutListMenuWidget

ListMenuWidgetOverlay

StackingComponentWrapperMenuItemWidget

Block (DomWidget)

Page 41: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• Rachel Boy

• Roy Xia

• Vignesh Rangaishenvi

Recent contributors

Page 42: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Support

Page 43: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

1. Handshake agreement

2. Subscribe to announcements

3. Feedback

Support

Page 45: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• Publishing announcements to this wiki page is the way we’ll communicate upcoming changes

Subscribe to announcements

Page 47: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

Future Directions

Page 48: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• Full replacement of current components

• Published versions to Artifactory

• Improve touch experience

• Next generation of Unification design

• Make it public

Future Directions

Page 49: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

• Matt York

• Michael Becke

• Jeff Raymakers

• Jonathan DeKlotz

• Daniel Leventhal

• Cody Meyer

• Jarrod Lombardo

• Chris Wyman

• Kyle Gupton

Thank You

Page 50: Dev Brown Bag How to Use Shared Widgets - Brendan Todaro · Dev Brown Bag How to Use Shared Widgets Brendan Todaro Kyle Nicola 12/14/2016 •React •Modular Javascript patterns and

http://devmockup/visualDesign/widgets.html