aboutsummaryrefslogblamecommitdiff
path: root/readme.md
blob: 5b6912fb32ee9cb00a62a42402cc5ab4f8eb7ee6 (plain) (tree)






















































                                                                                                                                                                               
# Best Practices

Make your code ๐Ÿ’ฏ - A collection of best practices for software

## โ˜•๏ธ JavaScript โ˜•๏ธ

* 2 spaces (instead of tabs)
* Lint with `eslint:recommended` at a minimum
* Promises (not callbacks)

### โš›๏ธ React/Redux โš›๏ธ

* Lint with [`tslint-react`](https://github.com/palantir/tslint-react) or eslint's [`plugin:react/recommended`](https://github.com/yannickcr/eslint-plugin-react) at a minimum.
* No unnecessary and empty `<div>`โ€™s
* If `this.props.<variable name>` is used more than once, dereference it at the top of `render`.
* Extract variables used in `render()` to the top of `render()`
* API calls should lie in a testable file outside of components.

* Components should not wait for promises to resolve, instead listen on props via reduxโ€™ `mapStateToProps()`.
* Declare and export components in separate places (otherwise the web inspector cannot name components properly)

###  ๐“ฃ๐“ข TypeScript ๐“ฃ๐“ข

* Lint with [`tslint:recommended`](https://github.com/palantir/tslint) at a minimum.
* No implicit any (type everything thatโ€™s not inferable)
* Any variable declared without an initial value should be typed (`let patientId;`)
* In components which use `mapStateToProps`, separate `ownProps` from `connectedProps` into separate interfaces

## ๐Ÿ’… CSS ๐Ÿ’…

* Prefer Flexbox
* Classes should describe elements and not be generic (`Bigbox` -> `FAQContainer`)
* Mobile: <= 620px
* Tablet: 620px - 1024px
* Desktop: > 1024px

## HTML

* Use `<button>` tags over `<a>` tags for actions.
* Use svg's over all other image formats when possible.
* All `<img>` tags should have `โ€œaltโ€` text.
* Only use tables for tabular data (not for layout)
* Make use of html5 elements like `<header>`, `<footer>`, `<nav>`, `<section>`, etc.

## Npm

* Support the following `script`'s in your root `package.json`:

1. `โ€œwatchโ€`: Starts the dev server
2. `โ€œbuildโ€`: Builds static assets (if they exist)
4. `โ€œtestโ€`: Runs all tests (linting first, then unit tests)

## ๐Ÿ•ธ Browsers ๐Ÿ•ธ

* Avoid supporting versions of Internet Explorer before IE11.