Skip to content

Frontend Style Guidelines

Evan Rusackas edited this page Aug 10, 2022 · 6 revisions

This is a list of statements that describe how we do frontend development in Superset. While they might not be 100% true for all files in the repo, they represent the gold standard we strive towards for frontend quality and style.

  • We develop using TypeScript.
  • We use React for building components, and Redux to manage app/global state.
  • We prefer functional components to class components and use hooks for local component state.
  • We use Ant Design components from our component library whenever possible, only building our own custom components when it's required.
  • We use @emotion to provide styling for our components, co-locating styling within component files.
  • We use Jest for unit tests, React Testing Library for component tests, and Cypress for end-to-end tests.
  • We add tests for every new component or file added to the frontend.
  • We organize our repo so similar files live near each other, and tests are co-located with the files they test.
  • We prefer small, easily testable files and components.
  • We use ESLint and Prettier to automatically fix lint errors and format the code.
    • We do not debate code formatting style in PRs, instead relying on automated tooling to enforce it.
    • If there’s not a linting rule, we don’t have a rule!
  • We use React Storybook and Applitools to help preview/test and stabilize our components
    • Note: a public instance Storybook reflecting the master branch is available here.

References

This SIP formally adopted TypeScript as the main language for Superset frontend, started migration work for JavaScript => TypeScript, and added the requirement that all new frontend JavaScript should be written in TypeScript instead.

This SIP formally adopted Emotion as the method for adding styling to components, describes alternatives considered, and why migration is valuable.

This SIP replaced Bootstrap with Ant Design as our main component library, and describes how they should interact with style overrides provided by Emotion.

This SIP replaced Enzyme with React Testing Library for testing React components, primarily because RTL is the most used testing framework and fully supports the newest React features.

This SIP describes how we organize our frontend folders, including how we should group different types of modules and components, where tests should be located, and how files should be named.

Clone this wiki locally