From 204b01da69834520c94eced2ed371361395d00e3 Mon Sep 17 00:00:00 2001 From: Amit Mangal Date: Mon, 4 Feb 2019 13:27:52 +0530 Subject: [PATCH 1/4] Integrate TSLint --- .eslintrc | 36 ------ .travis.yml | 2 +- README.md | 19 +-- __tests__/App.tsx | 6 +- __tests__/views/home.tsx | 7 +- index.js | 17 +-- package.json | 6 +- shared/redux/constants/actionTypes.tsx | 6 +- shared/redux/reducers/app.tsx | 10 +- shared/redux/reducers/index.tsx | 2 +- shared/redux/store/index.tsx | 4 +- src/constants/screen.tsx | 6 +- src/navigators/index.tsx | 10 +- src/navigators/navigation.tsx | 149 ++++++++++++------------ src/view/assets/images/rn_ts.png | Bin 0 -> 4953 bytes src/view/assets/images/rnn2.png | Bin 0 -> 16000 bytes src/view/assets/images/ts_rn.png | Bin 0 -> 27574 bytes src/view/screens/home/Component.tsx | 6 +- src/view/screens/home/index.tsx | 10 +- src/view/screens/home/styles.tsx | 10 +- src/view/screens/index.tsx | 28 +++-- src/view/screens/settings/Component.tsx | 4 +- src/view/screens/settings/index.tsx | 10 +- src/view/screens/settings/styles.tsx | 10 +- src/view/screens/splash/Component.tsx | 10 +- src/view/screens/splash/index.tsx | 10 +- src/view/screens/splash/styles.tsx | 14 ++- src/view/styles/global.tsx | 92 +++++++-------- src/view/styles/typography.tsx | 20 ++-- tsconfig.json | 8 +- tslint.js | 88 ++++++++++++++ tslint.json | 3 + yarn.lock | 147 ++++++++++++++++++++++- 33 files changed, 471 insertions(+), 279 deletions(-) delete mode 100644 .eslintrc create mode 100644 src/view/assets/images/rn_ts.png create mode 100644 src/view/assets/images/rnn2.png create mode 100644 src/view/assets/images/ts_rn.png create mode 100644 tslint.js create mode 100644 tslint.json diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 8da7796..0000000 --- a/.eslintrc +++ /dev/null @@ -1,36 +0,0 @@ -{ - "extends": "airbnb", - "parser": "babel-eslint", - "parserOptions": { - "ecmaFeatures": { - "classes": true - } - }, - "rules": { - "react/jsx-filename-extension": [ - "error", - { - "extensions": [".js", ".jsx"] - } - ], - "no-new": "warn", - "global-require": "off", - "no-console": "error", - "import/no-extraneous-dependencies": "off", - "import/extensions": "off", - "import/no-unresolved": "off", - "jsx-a11y/anchor-is-valid": "off", - "no-underscore-dangle": "error", - "prefer-promise-reject-errors": "error", - "no-nested-ternary": "error", - "react/no-multi-comp": "off", - "comma-dangle": 0, - "prefer-destructuring": 1 - }, - "env": { - "jest": true - }, - "globals": { - "__DEV__": true - } -} diff --git a/.travis.yml b/.travis.yml index 43d67ea..9691e50 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ jobs: language: node_js node_js: 8.11.2 install: yarn - script: npm run lint + script: yarn lint - stage: Build Android 🤖 before_install: - sudo apt-get install build-essential checkinstall && sudo apt-get install libssl-dev diff --git a/README.md b/README.md index a9d2530..bc0d826 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![License](https://img.shields.io/github/license/AmitM30/react-native-typescript-boilerplate.svg) ![Build](https://build.appcenter.ms/v0.1/apps/d3466edd-c992-45c8-abd3-a2f40f6a7fa1/branches/master/badge) -### An opinionated [React Native](https://facebook.github.io/react-native/docs/getting-started) Starter Kit with [React Native Navigation](https://github.com/wix/react-native-navigation) + [Redux](https://github.com/reactjs/redux) + [Eslint](https://github.com/airbnb/javascript) to build iOS / Android apps using [TypeScript](https://github.com/Microsoft/TypeScript-React-Native-Starter) +### An opinionated [React Native](https://facebook.github.io/react-native/docs/getting-started) Starter Kit with [React Native Navigation](https://github.com/wix/react-native-navigation) + [Redux](https://github.com/reactjs/redux) + [TSLint](https://github.com/airbnb/javascript) to build iOS / Android apps using [TypeScript](https://github.com/Microsoft/TypeScript-React-Native-Starter) The project has been setup based off [RN Getting Started](https://facebook.github.io/react-native/docs/getting-started) and instructions from [Microsoft's Github TypeScript React Native Starter](https://github.com/Microsoft/TypeScript-React-Native-Starter) repo. @@ -17,7 +17,7 @@ You might also want to [rename](https://medium.com/the-react-native-log/how-to-r _Disclaimer_: This is an **opinionated** approach to building apps with RN. The project structure is inspired by multiple production apps built by the contributors. -The project uses and encourages to use industry best practices / tools / libraries like RNN, redux, eslint, separation of concern and structure to build a maintainable app. +The project uses and encourages to use industry best practices / tools / libraries like RNN, redux, tslint, separation of concern and structure to build a maintainable app. ### Table of Contents @@ -62,10 +62,11 @@ The project uses and encourages to use industry best practices / tools / librari │ ├── presentation │ └── redux ├── .babelrc -├── .eslintrc Lint configuration - extending AirBnb ├── .gitignore -├── .travis.yml Travis CI +├── .travis.yml Travis CI ├── tsconfig.json TypeScript Configuration +├── tslint.js TSLint configuration - extending AirBnb +├── tsconfig.json ├── app.json ├── index.js Application Entry point ├── package.json @@ -113,16 +114,16 @@ and the launch from IDE. #### Lint -To run lint on the application: +To run tslint on the application: ``` -npm run lint +yarn lint ``` -To fix lint issues automatically +To fix most tslint issues automatically ``` -npm run lint:fix +yarn lint:fix ``` #### Unit Test @@ -166,7 +167,7 @@ Please check out [Contributing](https://github.com/AmitM30/react-native-typescri #### Authors -- **Anurag Chutani** - _Android Setup_ - [Profile](https://github.com/a7urag) +- [**Anurag Chutani**](https://github.com/a7urag) - _Android Setup_ See also the list of [contributors](https://github.com/AmitM30/react-native-typescript-boilerplate/contributors) who participated in this project. diff --git a/__tests__/App.tsx b/__tests__/App.tsx index db4a9f6..4b154ee 100644 --- a/__tests__/App.tsx +++ b/__tests__/App.tsx @@ -4,12 +4,12 @@ */ import 'react-native'; -import renderer from 'react-test-renderer'; +import reactTestRenderer from 'react-test-renderer'; -import App from '../src/navigators'; +import * as App from '../src/navigators'; // Note: test renderer must be required after react-native. it('renders correctly', () => { - renderer.create(App()); + reactTestRenderer.create(App()); }); diff --git a/__tests__/views/home.tsx b/__tests__/views/home.tsx index c5354f9..936d996 100644 --- a/__tests__/views/home.tsx +++ b/__tests__/views/home.tsx @@ -1,11 +1,10 @@ -import React from 'react'; import 'react-native'; -import renderer from 'react-test-renderer'; +import reactTestRenderer from 'react-test-renderer'; -import Home from '../../src/view/screens/home'; +import * as Home from '../../src/view/screens/home'; // Note: test renderer must be required after react-native. it('renders correctly with defaults', () => { - const tree = renderer.create().toJSON(); + const tree = reactTestRenderer.create().toJSON(); expect(tree).toMatchSnapshot(); }); diff --git a/index.js b/index.js index 1798e1c..0e36f5b 100644 --- a/index.js +++ b/index.js @@ -1,14 +1,7 @@ -// /** -// * @format -// * @lint-ignore-every XPLATJSCOPYRIGHT1 -// */ - -// import { AppRegistry } from "react-native"; -// import App from "./App"; -// import { name as appName } from "./app.json"; - -// AppRegistry.registerComponent(appName, () => App); - -import App from './src/navigators'; +/** + * @format + * @lint-ignore-every XPLATJSCOPYRIGHT1 + */ +import App from "./src/navigators"; App(); diff --git a/package.json b/package.json index 8ab104a..3dd6e2f 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,8 @@ "start": "node node_modules/react-native/local-cli/cli.js start", "test": "jest", "android": "react-native run-android --variant=Debug", - "lint": "eslint .", - "lint:fix": "npm run lint -- --fix" + "lint": "tslint --project ./tsconfig.json", + "lint:fix": "tslint --fix --project ./tsconfig.json" }, "dependencies": { "react": "16.6.3", @@ -67,6 +67,8 @@ "react-test-renderer": "16.6.3", "regenerator-runtime": "^0.13.1", "ts-jest": "^23.10.5", + "tslint": "^5.12.1", + "tslint-config-airbnb": "^5.11.1", "typescript": "^3.2.4" }, "jest": { diff --git a/shared/redux/constants/actionTypes.tsx b/shared/redux/constants/actionTypes.tsx index 9bbdda2..efe6068 100644 --- a/shared/redux/constants/actionTypes.tsx +++ b/shared/redux/constants/actionTypes.tsx @@ -1,8 +1,8 @@ /* Add All Action constants here */ -const ActionTypes = { +const ACTION_TYPES = { // Splash Actions - SPLASH_LAUNCHED: 'SPLASH_LAUNCHED' + SPLASH_LAUNCHED: 'SPLASH_LAUNCHED', }; -export default ActionTypes; +export { ACTION_TYPES }; diff --git a/shared/redux/reducers/app.tsx b/shared/redux/reducers/app.tsx index 58d5639..05e22dd 100644 --- a/shared/redux/reducers/app.tsx +++ b/shared/redux/reducers/app.tsx @@ -1,14 +1,14 @@ -import ActionTypes from '../constants/actionTypes'; +import { ACTION_TYPES } from '../constants/actionTypes'; const initialState = { - isLoading: false + isLoading: false, }; -export default (state = initialState, action) => { +export default (state = initialState, action: any) => { switch (action.type) { - case ActionTypes.SPLASH_LAUNCHED: + case ACTION_TYPES.SPLASH_LAUNCHED: return { - ...state + ...state, }; default: return state; diff --git a/shared/redux/reducers/index.tsx b/shared/redux/reducers/index.tsx index 4817673..9dd1c50 100644 --- a/shared/redux/reducers/index.tsx +++ b/shared/redux/reducers/index.tsx @@ -8,5 +8,5 @@ import { combineReducers } from 'redux'; import app from './app'; export default combineReducers({ - app + app, }); diff --git a/shared/redux/store/index.tsx b/shared/redux/store/index.tsx index cd2a1aa..c04fda9 100644 --- a/shared/redux/store/index.tsx +++ b/shared/redux/store/index.tsx @@ -1,10 +1,10 @@ import { applyMiddleware, createStore } from 'redux'; -import thunkMiddleware from 'redux-thunk'; +import * as thunkMiddleware from 'redux-thunk'; import { createLogger } from 'redux-logger'; import reducers from '../reducers'; -let middlewares = [thunkMiddleware]; +let middlewares = [thunkMiddleware.default]; if (__DEV__) { const loggerMiddleware = createLogger(); middlewares = [...middlewares, loggerMiddleware]; diff --git a/src/constants/screen.tsx b/src/constants/screen.tsx index 9a9fbe5..1fb5ee0 100644 --- a/src/constants/screen.tsx +++ b/src/constants/screen.tsx @@ -1,9 +1,9 @@ // Screen ids constants -const Screens = { +const SCREENS = { Splash: 'Splash', Home: 'Home', - Settings: 'Settings' + Settings: 'Settings', }; -export default Screens; +export { SCREENS }; diff --git a/src/navigators/index.tsx b/src/navigators/index.tsx index 066d561..2c3bc8a 100644 --- a/src/navigators/index.tsx +++ b/src/navigators/index.tsx @@ -2,7 +2,7 @@ import { Navigation } from 'react-native-navigation'; import { Provider } from 'react-redux'; import store from '../../shared/redux/store'; -import registerScreens from '../view/screens'; +import { registerScreens } from '../view/screens'; import { showSplash } from './navigation'; /** @@ -10,16 +10,14 @@ import { showSplash } from './navigation'; */ registerScreens({ store, Provider }); -const App = () => { +const app = () => { Navigation.events().registerAppLaunchedListener(() => { Navigation.setDefaultOptions({ - topBar: { - visible: true - } + topBar: { visible: true }, }); showSplash(); }); }; -export default App; +export default app; diff --git a/src/navigators/navigation.tsx b/src/navigators/navigation.tsx index 1f235ba..4b553a7 100644 --- a/src/navigators/navigation.tsx +++ b/src/navigators/navigation.tsx @@ -1,89 +1,88 @@ import { Navigation } from 'react-native-navigation'; -import Screens from '../constants/screen'; -import TYPOGRAPHY from '../view/styles/typography'; +import { SCREENS } from '../constants/screen'; +import { TYPOGRAPHY } from '../view/styles/typography'; export const showSplash = () => { Navigation.setRoot({ root: { - component: { - name: Screens.Splash - } - } + component: { name: SCREENS.Splash }, + }, }); }; -export const tabbedNavigation = () => Navigation.setRoot({ - root: { - bottomTabs: { - id: 'BottomTabsId', - children: [ - { - stack: { - children: [ - { - component: { - name: Screens.Home, - passProps: { - text: 'This is Home' +export const tabbedNavigation = () => + Navigation.setRoot({ + root: { + bottomTabs: { + id: 'BottomTabsId', + children: [ + { + stack: { + children: [ + { + component: { + name: SCREENS.Home, + passProps: { + text: 'This is Home', + }, + options: { + topBar: { + visible: false, + drawBehind: true, + animate: true, + }, + bottomTab: { + fontSize: 12, + text: 'Home', + textColor: TYPOGRAPHY.Color.Primary, + selectedTextColor: TYPOGRAPHY.Color.Primary, + icon: require('../view/assets/images/tabbar/home.png'), + selectedIcon: require('../view/assets/images/tabbar/home.png'), + }, + }, }, - options: { - topBar: { - visible: false, - drawBehind: true, - animate: true + }, + ], + }, + }, + { + stack: { + children: [ + { + component: { + name: SCREENS.Settings, + options: { + topBar: { + visible: false, + drawBehind: true, + animate: true, + }, + bottomTab: { + text: 'Settings', + fontSize: 12, + textColor: TYPOGRAPHY.Color.Primary, + selectedTextColor: TYPOGRAPHY.Color.Primary, + icon: require('../view/assets/images/tabbar/settings.png'), + selectedIcon: require('../view/assets/images/tabbar/settings.png'), + }, }, - bottomTab: { - fontSize: 12, - text: 'Home', - textColor: TYPOGRAPHY.Color.Primary, - selectedTextColor: TYPOGRAPHY.Color.Primary, - icon: require('../view/assets/images/tabbar/home.png'), - selectedIcon: require('../view/assets/images/tabbar/home.png') - } - } - } - } - ] - } + }, + }, + ], + }, + }, + ], + options: { + bottomTabs: { + visible: true, + titleDisplayMode: 'alwaysShow', + backgroundColor: TYPOGRAPHY.Color.Default, + drawBehind: true, + }, }, - { - stack: { - children: [ - { - component: { - name: Screens.Settings, - options: { - topBar: { - visible: false, - drawBehind: true, - animate: true - }, - bottomTab: { - text: 'Settings', - fontSize: 12, - textColor: TYPOGRAPHY.Color.Primary, - selectedTextColor: TYPOGRAPHY.Color.Primary, - icon: require('../view/assets/images/tabbar/settings.png'), - selectedIcon: require('../view/assets/images/tabbar/settings.png') - } - } - } - } - ] - } - } - ], - options: { - bottomTabs: { - visible: true, - titleDisplayMode: 'alwaysShow', - backgroundColor: TYPOGRAPHY.Color.Default, - drawBehind: true - } - } - } - } -}); + }, + }, + }); export default tabbedNavigation; diff --git a/src/view/assets/images/rn_ts.png b/src/view/assets/images/rn_ts.png new file mode 100644 index 0000000000000000000000000000000000000000..edf133961fd7a7e8c4073721ec0671240c462dba GIT binary patch literal 4953 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 literal 0 HcmV?d00001 diff --git a/src/view/assets/images/ts_rn.png b/src/view/assets/images/ts_rn.png new file mode 100644 index 0000000000000000000000000000000000000000..12dd9d9ff12e29d1bd4cdaa4ce32b48ed9dba77a GIT binary patch literal 27574 zcmZ^JWmH?w(=fC^C>GqEqQzZ9p-6ErP`tRiTWPSOEws36ad!>wF2RF41Su{r{r%7L z@y*HEGrMHc5$fB(h1m+=?)^X!@N;+^6A?SI{Slf?(4g@4mu zkY9io1jD)Om$qhV=l>@DBlrTp5d07M?gd`oJ26~%VevBM-f-c*etKVfZ1;u2$jZSy z?BIXMM*lafXX)TYLPO|3k@TTAFHgtT4qw_Ad;{pM-ojN_>-yl*{>uojtjeE}ovF2> z?7{7rj?LoHov!(V7p9dHd-c=1jZ=Gb>ql{28^60Z%Eouv=J#7>_xNR$`DIm17Vi;! zMi9J*EpkW9bA~-?Rt02Lcw&YXl13aWmv!tbu@u6UdxIM{u+BAWOK583h;AY(WCd*?k^qNX^ujbAZ8+;If0zBRFpRk%~D-xaaueCW~RV)Nj)InQ^`Pjr?)26CO&*o z=dh9=7sqwHRqhqI((;>HoelxP`jecLgr?Wx5hUnE0EDkuk3~d9ul|Am-=D?q@+ZG7C4R4kIq|Ka1ucUGX`N_s7mgH8UE>brGF}EzWU2B>B-=Pd&*9AL_?GXju3KrmuXq47}CENJQL-Up?IjI|h$Jf1mpz4HC5NZe=-y?MT@Qn_5 z-f03Du~*_=Nq7kH3F2sHgY_{wk<%REb>bHl%>9T!;az?AS+5gQx3eZInU~>51`2xq z3yxy!VAA49`Sg-WaZ3N8^u!A>zj#cMlZY_P*u1Q6)JR^_AG*@6K9SEA62?Qb|9GX| zq@cNoAXZt>w@oxGvcf{)7$*(*Htyk#kFWmdn95h82`7gzn_&GeVS|Mt$)fV{k$sW> zXwM?nMEb}nA+3?i%>0;b_1|(^vFFfO^3Q_$sIXQ^dDuS8pH{S3OF>qs0o3JAqjT`t;Ena(1TD$y3rMTpH{Lk@MKmR6B(oCi) zPfrcrsm1X9k4_I_f3c~<3X4K!PeBU3u>agBG*RF|5$m&+hOZJO4D$jny%jdIwK#zWN-#zXi z7BmKT;gqEjC(*~kIVN0rOus%5agwW4Tc>olQje}ur1;Kdh8fK~L;l+2OO;R2D-iTq zO{K7A@>I+9eMQG)QQ?JYpz8jn7kSs&YZ9XUi)Rym!*-v2JfA^Oj^nZDyzWtYht}HA z(yd{7@5R`s{HSgXJEM@YpcMYuUlnRuZ!y!a;M@%r5pxQ7@URl$%o>BYvdLvDHNu%C zVe&Yl02KjN!-!zq{g9z4XZ&uK6fz|>*X7|^1zdPx|7V%&n}RzOhnSYSsQyBEy!kYS zO2wH?*??#6ncMEwg%e&JDU%zw+YfdMpV>6=aSn(!h{7fDU&+1uo`cBsbool=h@lOG zW2t)jSmemVvhaA!xqhYJLxiV-i_a%1nTP6hZC#4oB&MuW-0(14*VtQ0vGY@M60_s? zH#&L@AVL{ML^Zfr#a5ByueY0nxC~92EXa;3?dCLg?z&fJ7lh*eVHJkg@zAK=4$O9wliG)&seuL_hb;Mv1KUt4tt}a3R^jr4JD@edZQ7{hc*{{N6^3V=e zZwzjho9N=5+N0;W$@^SW!dDOP6?@qg;Jlu_n&jAkfgDD&?nenvI&o2?sjObbP?&eC ziz-^Td_?uEZqwSHscOhr%k!_xE|aFCs<6#V#9OKyqj2k@@_6&Pk}sdx!vT+!u=ef2h~Tr^QLALZmw(X*>UB}!zO=6w&8t5)v2nvFbpc}x z2kWY{f<3Ygcrk%u`RFVp1J%SJvvlb`0rcQX^DLovz8M(sfxiUZ>}_G+8(1&J!HafC zH+VlWIj#nA?>VISMQN}IWtxML>YTzU(?7raY0r{d5=X^aUHT_$*4#T|7j`Obv1~+( z&bmUBe3n71^R*<=Cv!JztE9+~%iQLFjaL^?@bBW;UX~y96W`KE{;lxDK4>j}dRt zJvixH)sap6Cb^Z2NW~qO4UBjAI2d^|m7FPuqRx8Lks2l^teCC#+i(D%8Y#J!6sf_a; z_53O0G3^dl9d_n{Ep-jW_dhRx@j~l>edOf#g#d!qsI6>bk5*Rhh-z-t?v$45iaOwl z`v+Mxjo{$|ixWde%(-LmBko+{ zZyL^OeFpAoqw21=beA|PP{WPNqr)R`71nAXW<*UDRy#c|R9NvqYnaTUdj~Tm4zp&z zQ%1MozI{G$CUF`S}CwoBIHu7z$ktv9LzXw(;qC!{p%rC5mmS_i0$ zGGHeBQwQoMDqmLo<}PjWwpZj*HPv9M?L4IAMF|0-J_t*+AKD8Tn{3TfzPhl9DLwzj zu#V0Mwh|6px`HHuOCB+VWnYtM1!tL)E4OSSs=B^81q#{19S1Y7mEs3XZYLVZ*|Wq%?JS<4m0f<#Kjwk4owz6l)~ivKrXuCV7Q-WH@z0?h%|} z;i28_j%Dq~?wNcVphKLZz6o+I9lFU+Uhk8(dJ*E3So^M=u>{grUAOS0I@i=GV>5FY#H+80TX+jogcI2Ji+aZ zhgic;aFiHOmH+;F-5~dP0g6{ZLvel0@yvmJcCN?ABJ#Q57!R?fb@|jB9Romr_ykq5 zQ1`TI-+B>jlzwdlor$Btoa!0tj>gARCUkEpl+N096^)G%kIgcuAY0B5A(6fB z)a=98upqFY%%G0UyAtw>?e|xB%6r2*lp8{l0u_i)GCe{$MbJP-x1*m4V%eK3Af?_( zFNI6OBXCf~(PNJ$S?-w|i9bHO_LrYrKC)yoJ?z6zzhexwxj$(0mswfB5`@npQRt@{ zE2sRy+Gz^wFPX}y4NnLZa;a!G!r7*3@^d!*{Oo>d<+qrTE!DDyx(zgR^?Bf!`~e)U zF$Rk@nDpo-kk86Fe$eLr=#?mRvFCFSyD@ab{J~euw=ijMjW^If2Wl*&q(2nzmJf)H z1QBuxtJtjZ4aAMyHAmFqoP|G9i< zTOH|+w+GQ<(itbQ-`sW=QG+$oQe^YPz2#7FgXxIe(GsBK(D+X_M6r*Z9YsjkFf3#M zeq1SPc?B76xk4$utI0UTH#G>{m|4v;^GxQ2F97IDLbQwZBbGDGjIi`%^8mjx*3`Vm zj=(_aC{NY0okdFZ;IL0Mwy^YY=Z|VhM_?`#Dy}Tv_}qr{#YFUb*uzAv@2r(~zh9G` zihw1DhKDHM!rO6Esw4WF*Td}n{}Qe~cYt?zpq8t42G2e0p0>|&=*O^Yx>!;X*WxX` z`G6(PCMY_u5~%#^tS5~KdEDS1cagK(Juc0qg-c&d(uqb(5nrqr&wd?2SOc){Jya3v zaDcIDAmcN}`xTRa*aEh+Lli?v2_JWsrl@z^DEuS2cVfcTm-2`)t{`tRI+@4@tFh5C zl$t7mVcU{GRFiHs(F6 zrI-7x&gi9$tAR4wxelobKpqk$`IQ9LHRpR{#ka3|O}xvGz=v-v-yc=pDkXiTcd;!^ z6%27*1o*xWu1)cB;(&IEm~3n;`PXFho8rpUd8)6$!!AD*nR1)Qk@4R#NLao z5N_0pYF|OvGPJlW88CF|QvEu9w_}fep%O(U$*Xg?O#CbqciM&YOCm-;8h;e4k##)L zAMRQpmTIg*TqXNyp)`Mo^4y%Nl#;!Un&=85WWXR2-LfBNPKoxK@}h3k!pg`#xv)+O<+ke!I zt{|R*!qtN2+1ZL1ttw(DMo>U3dLNncu&X(h-uU+S8syRrb&5xBn=_~}&3 z<8#Kldze;h7_t3`sE6pEESh z22;sLR}0`yND|jk^A=9Z`QwSe-Lyyjp_9$hC}Xqii#_m>g$u`(rq;3=^=oYm~X&R6Itv4id>IS zpmKyEc3RWKN2hERuiMhI*CDT{j+kycefTjR)(R>oaT9(CS(F_&?sowK83bLk)eeK& z54u<51F9!C!8CPBu|TX<%s5|z)ML$cu*xWhbT*q_B>-4#RiU(Z2GK#Zh2qRklXH_T zl;G}-*Uc%DfNn-^JUDrWWb+F==%OCNlcxaD$FI@+IB_Mqbs)|BuX;DWjE%t|gX;6V zDHy_g(woR(IG@I6EEaqwozSRI1g~_}a_0L1i9x3Am=+Xdp3+&+R(m6QX@5N!7<^to zD0L$$B_0>fj#eI_jXn}SL_k?CCUpTWj!MQM`1JkLg97RO89mTBV~Re~@TO?6j{Qh1E9pK5!2KGe(k)H{W225xY-*M-yWg zJLhRNq5{(S-otQZJAD;tZOUt%r8`r*u*8#NGG^jX29JL>bhlCTA7ZuqB0sr>*cL{1iU3IESN)CIwAWrl z-&Y&+=tWfND2oNsGJg<8dZ-znT zhbeHvD2STtx}KE-Wk5%djTG^zZ~USjWH{NL#?~__j4?xKY-b`XNN7 zm{jr(f6yKCMB8yBD`_6q{;aq+_FzK2R;}0H=gUd`#;(IIs7z|9Xhhmlg5epvAZRjA zkxhv1U9Ip|zzPpuT;X0LiabAZ;%v@^C7FQ@+25a1DhJ}V$8|(nS~Qo0u-8HgS||R` z8LiZ0OFWq+K4aZ~KR;J42u11=pqb(2?16%m7-%HB5|&b~mV57Esnut=xQ>KuhsVja z2Uq505!7U#R@zHvkx&+(Mb52zOchXs>mt$h?4dxjvtpTF5iy%NYfjR(1=92yO94?y zrpxtK!wU57gA9AA&BX_?QWcO7E?TZ<1z{&LNYI$itWssU;qUcYXU-4F2LnXrUXWosbq1+F^wsUC>BVLp~opT-Qvl63-;rx-!M(dUX#;9^QzL95h=UQqpz)-MroqO zx9Q|=!(z>PHs}!mKgX_!wKH$0`a4l1-M@&DaTu*dMI&=09KtF3E%aVd4an^S?WHCq zfLCu92UBwrF)S0@GE>^siP{%xsNK2q_SFZ>u#a^Wxo-_Y?>g9ccko-`#aQ5tAsSks7(s%g1%l_HWU znHAgUBwV33;s}H(C?nTI;b)M zD5;9aRd+#2jQuBQ<&U*P;!)JCbR@8kN47oJ6d(bWsuvF;H1b#~>H=&+L-K}`Hau~D z_QV8i_A@R zvAQ^dj&IjdjeL*Y*1;t2u1DVc9Xx+x{F`OzMAA<6pkv;s8VY=gp>O&DVU(pT38qlQ zOqN%6&tGve`zpx{*{9YiFV7$w!~KA{YKlqZ^~BCko8aB@vVZAfU1Pr_DbViyaiPq! zB1Z4KwjyyHkdE@T3{c?Gu5@0`uID0zBJ1k&zibs1gzxxi?@id#mEulO(E(5oNy5#* zuQC(JTAp=b1Kq${g{3s4zfULXd4g{>%)BU8u(flqDu^bS4%W<~fhQL;zcn9F%$mROEd<}MxIbE70mD%M4o`{xZXIQa~uQ_=QsX~x0*IOZB* z{h+lngM|8&)Z;|QX2xinzn7Ozf_{&G*5UBW+RyfBZfmV}j{FVsiME~<1li3uU+ir7 z1;s$bcqU>?hjbZIUs_yT*)Q4Zr$c~!alGy3C*fhXDZ46~0i-5T8*i}xfU)pzV5$t9 ziz)S1UZJ*A|B~7CC%37jw>AJHXNU4u^yrXGf>uQt0^&TG6~( zvH&@S0-sEOl{I#`)r#!R#FlU{h&>t2rndf}oEHHb6y*NSFpP>up(6Kaf6Yf&XBXV^ z{pf`kC&l?!Va1}eMCBThQv8c$+U>~SCJhU>+!pfgZtp(Q1E^R5iFseFH71CfwJnF~=vVSm2oPuCyXDdr4=aEME?(X&HrO!RK?ynykG)gy^RIGV7s z?EL=Lx4CL;y-_=}D15xKDea0YdZ$0J0q(YhsMH#8lZn6T+*1lqXZM5ahcI6s9-cZ9 z^O5=TmF#T#49#DWj;aL>-VHsbY+z!)6gq0~AT56N=|MX_kd8jvziNoESSs<&8b!Lc zV~kghyPJj>)o~7X>kcBHi(e&P)+y8R$F2(7nR*0-v~}?F|cp zVXj`p=Wc=^_l7+IE=dcGZJInEs0?mS2Gu;H!*Y??T?8<2t|y<7Yo7!G+Gr8VaM| zw7K=9R1boY4Nzq~kk`x#Y-UI$Hlpr6TCT&z)wQOhq2u~XdE4V-YN~u-wX@MXN~Qho zJF*p=cxo<8Yx_`~8A)U|XQnnPT(+q zJN6V%cG%K&GUO$8ZW^uaf$lk923hRiR`;)Y+|ToAY+HNwF$)-(C#CRX751yte>uFx zFj({8B7b9NG)CrRY`FGCgyIG^ru#GXQ@NW{rC!YU%35D1Rql=irVRHam6;o3@5?=? z7c6eEtIMEux@uV&5#%-6QB|88x6ymIXW#CjBn zVy!p|@F(h-^GO{ML~1eh=P)(#I)1hsqilt#oQn#v8 zN=hK&NZI1pXiBkK;rGz0dlO{(m!_GH(QcFpSOu%E08c0u-07t%FP~ahnDM}+ zil`7VN+gWgp1!%p-@xC$U`w9_Imzi7-)>8VG zo|re0xTR5`HrtK!o;YXvp*JWibO8XWAkI;gZt}o$d#^rL4e{Nay4MFUjt2Df6$aKD zrSVTG=x-&o@Gd%Pil#q%0`DV$DB1PTH^zr0`YsipN3NK=0P}OUtD1$-KOHE^%E;(O zyo#6a_=~4oi`wTH{Wy=lzNzQ3)K!r8ugUiLO~M)#F$a>qfh{HSRoFLJJ zp7G{E|7cwl4>yEtg0r#lO^|c>%wJiVdXx;Z-kp<=lUulR;>82m|d!uY$M(H`B4Ke#d9$1j4ytE4Ghv3z`j z9{~(a#!+_2J`|h`-F$bI;?~l5+gV6OMef{4T1H|cJYIn-vP-)%Tli5sKXPVO=*h%z zYv~;y)-@Z>&l}^t#aFwHszJ)tY*9x0S1)g7fuDS#3v3g=F_CRQ23R}kYt0qkWPR!n zbHz;iP`%3WDZeIlv-?;&6v&@xpinsuhrEP~@{*}Nn-+&5GIyKX;ymYGi8Wb#s>@5? ztpdFBytOx1$A|XH0nAsZU4ZV^f$i7Rb{{=!bhShO=^~D#bz0(}wYWQuAYkKGlJ``?EqwO{8}XEC=XN(@WwBmi)=Gc3jz=4H{5T6c(~MnFJ3vs-tFK^ljojhL ziwmCS813iky*(?L`L4s>-rjAgFK#Ein_$zK-tSuz z-=`nV?pgUVDKBDxp###`?Tw?Lyd^ik%BM7AJj6~{jY%RNz5bFgGBUEm!=mRWTg77s zhrQ1V4)*q=tnL0)J)tJ22Gut(=g%EE@G_9B#Plb7GOnyDlwJY8C~MMN{fd;D`lj$a zB8L!bgOa|s4KPh?-;x8~aT@v>pj~rG|E=Q&UPQIgC>zI^pWs0GF@=NO$;pYMqvL7b zbfvDvQpU*GRmbPGm6er;OY2R}WdDx87N8U+^e*8oHyBvND&P9pD(;@4iL#AQ&gC{w z9&jB!C$yp@wP+pUNMU(nEM<5!+0!+*+ULR0yTC<<0K42-TiA@~Ez&MTrxJa{ESkVo z_T2kkqj&jonZ(q7fYz3H$mX(6_GcHjsBF6Sy&q?)tua9)lz9DmcJ96|XX1X+S8!c> zdqG3t!V&9fQDk{}cK1k=a$TF~6@s$4$K18}Q=6xYXiY1AY$mQB99iBdVNN!p45e1o z;IJ@5J*1GpXqF@=WBRYr^f~YQk6U%>J`jEQH()3o)738(tiEH>uG77~f}%i-;MbRd z_{OH#hMVh~k(P*1?e0^WJc-oR{74{!*?jp*?2peG z*0;^W3sYlv{zQUpnpcR7)=t{PL`96!TTgtFIaC|8D(g@M>lrN-{GD$`m3H9fO{05=&!F! zW8JhCIHofRUuprMlWDr~{uWxko8d75e%CO{hp%{n(Y;^-z0CRPQ+QFFh7aj#URg91OTe2`DEUF&7MAb+{#{G`HZtGlt20P}y}%%Uzvl^Zy%gXh z`~7R9{TKwY5O_J~{bsu5v&2m?>biDj+b(d9|N5`}HCljkbNZsb&ePp0eFU)GSj5*z z6}9VNk|VAjNu2o^?C>*Tgy^TRTO2zy^ak1U#u!z}cC9l_qAJ?3uTpFrS+JE}<&_)an#Y?LYE*(5#mB+>RJ|JjgdVq%k%gGyH6B6O-g!vwegz$3^FG;XKq54#Xq9-b?u9< z6RMhWEn1}-Y6T9ABNGA~&DhQ%ad^db)U!0(Hu|WDRvx0C=5UBu9$>KiixzZ~7Rur_ z={&)^NaffN{>Q|&QEb9KnP{mQU_&N_zt#YyN)ix$GI!(3%NAxtrLqeMF{?>_)5Smp z^K!B2&5cf@1M9?%E}AE++-M~dfdU6p@z|9c{vtfzt>%XV+v$t>5Sef{^!wYr*E#6M zZ~?o;Xm(6v(ISx|4ka_fEfmsBwC&M-1oJmAgfRe?U@xEsA?!M2n*E0*85m9)dxxP+ z{g9xcxXFre zwc;*N9pN(@xKyRIe#Q~@4yjLkgP-t+jv-n+1;1o(()EO)qop5zQo`V?^kG1m&HK;s z8_Ht*%z5mwtni;fq)U01o#C=ma*0Z$)w0fo1-4tLg_~d@>75@WInX}WZWF|@plpel z@yO9&2`@}Npi?k>*n=QfTU&g;f0Z-E$vI{8Rjb<>WMwagv!GG)2+;?ha(#7L(nx!) ztpLaEnBBi_++aUb76_qgd~N_+h&4yPrm|ZAcavZbv_wmKnS6IpxOuGG;Edmh35{&2 z|BJw(>j%fKA1WhQ{^dnHZeu{h;R4{xL80Czshdl<94ZpvNX$gtxF*Icu+`8g4(FQ}JzO`9smhTB-#hiZ1gipxC*(2B1n z?y_Gqrv@Goya~~)@DS<-=-qZ6;W)%nLyrh|2yEog*B_h zI`EJ2x5in2x>*nr@sn!iJz+^1axAIjP`S^E`7FP^k;pLkwMc*4 zQ74r|v3~XZXS4N`FpJ=de2SS_;N3%X)W6L$K>_}u4+h5Y5!p5Hvy}wwSU_lJ887c8 zotiqp+j5X^v#I2p2|ozQkjWbO`jKGZ1=pTF)Qxp2x*2- zjqcY(T2Nyyj7v$e4+UY$Zl(O5S1Z&Y=h|AE!^`3?MRoX9fsVjb-yj}{*g`a7l$`04 zz$BVA)6*}yQ~M6{n?8R7&{yHxMHE5jkTipE~bwQNcwqrOhA zVNCCj%TO!#eVst-*9{@jo>TdNMq|Iq5rnWQg?7^X)m#rEc^UHVPCEM(+dAoG+HQ^u zy(SE%oS8poS_IBfz|iG*A%B_bb@DX-E#$^Ca`paGBq&pG;=)JSL~RAYlC>Fcz}aXl zl>m>m9WPR&m0#rpLPyXD*|!;zopiRpP6|6#+j*3lr+4+ul&jy38Z~eV7@{l4u;36G zAB-L2J)m+`GGgyuA4W#UTqwqx2;z$Y^BEfVo4sVlBWrVQDg3^TEn>f$3>y4f~+pIX%j}u!+6@cExkv{yJKn!6J6k~sTz5mE=AfKm7 zlIU~Im&R`xj2`H?6ocYx>Fa3!_wi6*oG20Z*+zc8#u(Q@y3!y;tXwtTTM`zw*MmM6Yd0*2vQL@U=n4$M~)p_ zg?!Qb8ZF_K9Dg|2Cw;@tMqZ%KpPSrP;~!U+6v*#>s>Mkho0zzJ5wzL-&HQ>t2JeF4 z6nHgn!fSg&{jwOb&JxQvY!Ioq4k!2TEbsegPpZ9$bX`6=L;pz1TbjYo`#Zkyf;We>KJE(ed9SXI`}ovQhkjiatxDUcAY9+0^@;$tDD% z@4y5qn1R&?&L(SqPe$cOz7)&Z%NCKP4;pqZOB;WMy8$)hej@+}vKVABQX|7sr}FUv zDj@exU$d#>aovRidk2~ecKcb=W;*XTI3Ks+{>Xvim-5omR`RC>PLPwgH>aRLv;NPO z>Fdo(DS_y794ZV%cH@0fGbrw~UAgu1JRf57NrCZf#cIWeflr-pK!QKQu4tfeF;y8{ z71os|yjgKK>C@I$yy&O$BTo5T>_-_VGq=z zHapq@63jO;tG&rul!|@>CwU!j7lJpy^ne@A>Lom8QETarGEy7qw&G*aTO=G6GbMB&Rw`=j{}QTg?QuCyu9H)dcb-8IX+cn8^D3=n<>~!koe@yB_|Xp_opaGE*$`Th95Z-5tYDP&v`I{SRL zH75d6S85Rv0u6m-Is{h;!N3F(*lbOnd-X#+xA1VDE?$Af;_3T+OS8)r2-xNoNM|%P zYjh7cr3^(ebwiY_{=jePreF&V&qWahoBApb0fp=9!pqUK8iJEBk9hz2F0|KRDPSE; z(<#RG+R`*aiq9v#GjIaw08pXfl}oEur8{=@Js4<_iQQ39DzNfNY0{={U7_4wANy4r z7|3tobYX`|F~*jj=klq2v^}7v#r~fcD4mJ|58k<*_wLuD`c=*#RK#Zx7Epbe$BQ3+ zr6rfqwJ*Ex0;D)thJi=hlC0`+mclVjz4;^O-$no}5V6FSR`(P4@#@6$;CS#hu$orB zQJO;}1fcNpVdvLN0^v4|?hjw8qTajX1Qt%*%M2Li0;Q~OjDL3m7}mjJ3vx(QifnFb z$97sP)rbfcZJD$$rFdjFU>FOYdP`CQ*N`q|`0x=eea1jO%b~Go2RVd+pvZ@GY#e>{ z?K=21Dpis(50!=UZ`+c34;N&-R0v|xtKD4-5a+M&7ss6?Yt`=>>l47pvfaHa&}uj& z@L^x4!<8(zc0ieIvIZtLgL3%FJ<`xsa=c4HNv{5K5)NVEP{QKK=6^UvS7GB9?X~0k zz7944I+Rh@oCi7I8}iz|M#%V%qSe(qSpVLyatop2KCJ2RD4G@}r$^$KDwz6`T~!Jv zn~D#A5(()Q)gCn}Rm@j<9n>}=8kzv!N!_tj3Xk29qp=7%m)(`Zx?CpLddt4k=p^l? zfqcHovc(#%f~`mw_J<$vaJ91GfgFZyFtWmd2;MfhN~)0V+}T`E(2EEWmO92POl17} z)|d>i=A@p*TURYHixh)${N{893MUnRA91@=M z@@=BDwB2!tQ$NHU5yrK?kCpQka|?_~?&tL$CQ(@})EvQ?2O(1qw!PFIK}rXNw#X3) z(dvCW!kaQ=cJj-<7K}i0Rnl$=(VgDKW*3(fY zF|c^N0=N*_d!2g!eitO~-1OYUz_S1HASR5p8b8xSd1Y?8DJn=z#MrSR-N_>G=W!5y%4{l=MX_+WuDssqjtp_LZ64^4xfd z)Oll_L9Tt7)HgvDCfBMQ3%zy>9>Hjee%p^kRnZ=;ib1)#IS}K|)y$pjbiNK_vE=9m z-ylZh8U6J6E?7#PG!bJ`*UmUsur2FsSGJ?bei?c)f`|SPe|-P3ELs<{4~NyRZC?cJ zd}zt*0}6AL`xq#N1Q{~`mc8s}Ln0$wP9m&@c*Y~TNx$8l`tlz8i=f*5knZUi9Ih8>cbBlSt=p_!cel zGuPiY6{WuuWOgE{+iTS)ILLXR`qAhltO)$fw9eY^sID0q!^?qP`%Mi9-Lkgz!4 zoe{-0%^+@_0AJrzH({u&D*HAU&b$U*m6&I_f`96XRESmn4s=m}cHV$-_WQBp6p+w} zrER|zxRo|`Ti=THBSOq0mZ40G%aLHg2w|7pB``4(aZ_HuVPC5G>C@H)%&)>H87|hSuOe56Vc2Hz zN0X5)JgPh#Zsno=x6m(?%TJAa+uw4j(C8_p^>su-#zR{6F^li+-YkQ5E305$!`rRZ zZ(N2^tFzye%TXS=YpfgNOhagtWN5#=1yjXFRv$FCYD`X3VD!b`%JaX)$bOm^vZM7h zeB;sXXQx@69f~;wzS;l}6TEo`t}#pMBA8BD{KUinM;VVlW>H?g{*tUfI_ciJ`OTEQ zLrpoXXdn{}OTq2Nz1*Xn2fS%r?ELklGM*`{F!MG>p9XX>aP{1OXv+LQLmvUhySPb~ z*>Hdwr@l@}mo0VFuQM%K93wdx9leqy3Q$Mzbt(r^=I&u_G<$`R6+oJpny@_B-{Ip# zIK20sq!8ZtM&|`koJXIokO9bY>3Ky)XD*QJ;tFebxBDIK!I&%#TeD4$V3DNTG$|d; z&EcKd9`+u8nsvHuOlD0w9qO0_y}nBr)P}vm&5n4Bh!sk=`k6Qw_!j;vHs_*hP~iGT z9olrAryccj_sGbc`a-v>yq_p4njvSe_b#UZtKI(3AhX{Gy?TuZsph#KeRCB;jZw{i zkwCSWJc5HP({_!Py*8qN1k~3UB~}!y6Td&)AgJVie=pwYa?{&`RN}?xeo6s&xn}u2 z(L{Q+Z5k$-$m!khlPH)D01ABKUzpiycFjw*y8iP?6e|DT%Pm_ns`rZkc&Np2Zz+Uh z$O?5zngv^)Wo!yY30v0#SZd5bwl~0Dq|Vko2c7jSo$+~*wT(!lMPwZ>huM4jn7-CW zXNA9xX!xDGp^!vArunLT!c38g@sONJd^x-*?kag24gFQEbeera^J2ZyM&5sR$Pq%#9b=c95hbXErBh=ZryUX^G!} ztc;9jWK1-nl=lrXEdnevcB=uuapGG>$Ivk9P7WRyg|PCjQXo^*1{y zAXr_eOj$8G8ry8vLmUnURuQIKOrGJAZb^O>Ie*?G!mM`p_TT<8Oz&16lupzi3f}!V zX^(DTynA;^-pA?Q^?j+S;3L)5UIZky=vYjTSJmid303WK48u^0BRJm;H!4b7%FU^7 zeiRiHLQO_QK08icQ#C>HXcUhp3rWc}KUIMW>!|1yqf9Gr1D6JTw zs|EO7^H$Hi%P0rp8uiZE@WSl6J$Ql+%}!B{M1Vq6D)-299iP)z?sFg&Dg1RgPwo7tVn&^g_9^FH^xbRP4cTl@-3Ny1eZpe5y~CQxfEncd z0X8g!0E-V-kC9P#fgdF#d{Uywl;hvnWieNp3b;FcDt05MXf2305Lj*9Kt@EqI_h&v z)i5_CPThs5^;wXcfy=lBnez*6pfie9!!#FbI*xk1-G^<8!$|f603xKpvjnv6TBp88 zveRXV0llR!oc--k4gu$T#jdr7GA2o#irg2|s+8I_XVziqg~`_!sgcxhVE%>SqQyV zQaUP!*E6BSonItBRhxf+Md;yF)2piusLIdBu?ET|*~xWwpOsj&R*QEkOhn_dDxX-t zh!iiQra>JIiQQD6K7MOv`V#~@5M=+X!%o?WFX#uc=BpgWUSwx>gG^iHxEA-Ybv2v> zW@M$VIm`GFJGT1zKAv1AC>)4Vcm(K^k{#r%|NhB-K%t+B-cRm8`eliv)v%`U_|#Ur zvOU0l#CX2;Teo>bV$%2;Hg|{{&Xao+ICqX5?I|r#KQ#N1f(tXvIWx3nQdF>S_YmQd z5i(X+aIcN0k+W>|u;O=n@H9%Oukpg`YI6!I1xn&Sx`a$`8qp=~9cT^(U#;DSe6BxV z_dq6_hkJ-3Y%|9z zMIpaRvld}I&3Svce}e4>%Qb*d*8lc={<*Pa;1Xm>xaL`={!7m!YZMUbk;|Om#DfrsXYEpzNx;=M>n#8N{T@L z-l@Rc4+lI+OH1-g<)8&&UbNc}=!9uc)wyhi&OZ`%An2bdYq%6V!{*;6iL|4Hf~UKH zhI`)%-z_FDWHK_iXdwzZ_Ujgix3!$Z4tnPld$YdX7_UPo0J8Q9jgsX4DRqN5nDfz{sS{YG|T!%{eH%AL!3AHDe(&`sl%EnKOw+uN~ zuZp#JGXiUeY*q!6{qHS2WQ)(b-!H|cLl~x${V#SN3l6oyUEZX9$k;z@zs%>?tK5&? ztZ$LJKDZ~56?Q_#ahtNPc9P8^S^e|&z+dEq1Qxl_^?r+5Q06v5_S0*1V=ET8(~xh1 zA-P3V)w^~-o0Omg0bFQ5#~ct0WiGUP=&fI*9^^zMqyihplylDJHot_k#ewZR zLk<>@{5S*aIK6^t!;tRfoOL7M(tBO#Mr+~+mB$GFWSxN2DII*~f*CR^A4wHg^KWS| zr!mgzF+qv*SKNEn^={M|8n1*L+3_>ZdI6D34JWR|?g1WBaj$YLUyfc7s6!w5PS%^N zPHq>jLVRtbBki&Z!0!ueVn9aJ(DC%^7UTtqN(YRgy=umw@t&`5+(Ii8V zB!XKCz$U@#$0=Z@|F{_4Wv>F_9GvR|L^8jfKzXl#LuPoAc1}$hXvhLumb=JDCs4@9Cjyd>X!VA8v;ByNo$z)(A2tfqtRivntAXPfjn<$|}=+#i9 zgCJFU4G1W`cMu35NDCzx`aQn)`QJ}B-;!rDJF_!8XLjZ{dk&e%OopobU3x`HSqFCa z$W7L4Cf7V^hdviOz~uE=e?{S7ZnyIm_PsN~EJQ#~x~y9|Z%OY`B-}D_rXX<2=kM8A zLUf^FFDN`OlBb*IF{P2q^ZG)~bWt!bc`9mBM9t^1xYTF;MMiTS()*A7J$iJ$GZdAS z|0L@Ksobp>gfdi+M`JDm$>}NDc}y90-(3w&XZ)jPMY9sb9i=EBfLc((oN$^ zPPWgeZIi!~&w*rF7WMf-RGi&^%YruN$)-6yPE6p&kU=4 z#DCop+mNBTXpz}OVxvas?^gv4u4%C9NB|8mc9cxveXxJ_ICIL`Jq4}kUD-aad_dX3 zYQ_{WGsJvWU44l_ny#*2}3QfzX2SxvxSe=vaY&g}Kw1YhE_&#YoXAyhoG%{Ko`XTY zrW=&)cTJ6}1}crR+jrB4HXJM4oz#AX9iq<1hVT_aqk3<*9u-X7XeYG$u6AKm8fL3BQgx&m-Wx4RW1qwVwQ6hii zljO%)MI(nkNf1CtjnFY>;ul?4g@3W?j6_I|)vKfa@a?nL1QmyLC{TFmgnP(h0=1FY z1eCkvnf3E&h+!0^PGaViW@X#B&X4{K#TuJr42qHkLRt?MU$_gE3T6*@d%9Fw=SPre zPtja8STSw%JE3<74Ie6teu|CA${3w9fJWwY_MUMl*QF)s6z5FNHRVWA=Z~7k-wkJj zGT1#8yJ$Gk)Ix@U=_`;3E2S&JAcq*zz#u5yIV30C?2 z2}8aeLz%l;H>kTl=^|a|v3B(;^WcdGGYb>2PfpkI-Px9w6I+Z-F5I}=OA6niu@l>+ z!9l-*hJ0Nk{TQ^2+KLamPwu2{ZdsgEz#q1^Kl zI!x|b&02k+7Nch;is7zf+tC4WDB-GD(YpQbLNFEq@} zB>UfcSTvbBmzNL!5~w4D&L$6YF}|!Gc7yJ-$`^U0ZJ%s^Al6Jxaq>>SPt&)S*%8<( z+WSNO{5IkS4Hw^gzPj{oDhJ?ZU@FC5=M_+~)rZAZICd7uUcOPG0MK~TouCCX9E_Qwy%{hVO}DReC8=)Bn7m1| z5;6OnB4X8F=eQNJxID%7()&ca^P>+c1B+w)q$iphtxXQ4v1=8Km8NYPiZe8C-zxQU zFhU-xk;A7%?KuKqHGqB<$y;MMAKnkZI{AOGY%)8|1=N9EV=Xv@0Yp1MH>H#YG{#3; z5(9tqmq7C<2|LkN$U=U8<=DkThlQ~MzK4hxBZ*M}zqe_OrDD~pEIv`4wR<3eN2D`> zFdSnt5T=v)+~QjQxV!A=wl=+4@_gl|gZ+`N8zU*6vN*7F;VtKvY0owFl1h2#6v5C@ zO_z^GE(1ualPh3%s+Z2csFdXkZ%X}x(g{yingX#HNs8q%II zmxKees_Zns>1?;6D98hC3?*!|MpzrOE2Ku-XF8=>8@IS_K@)eVbTdSv3*_U#VKYvw z3k*=>U)g>&%_rBEb*&#JLg^oPd2S5k&vh_BG^b*WTzkOe4CV=)>B`94gp}nyQ5PoTS@sfQ*JR{e4;PcTZmT_5< zf~#M%kN;M3#qz}3{+^|{A151i=jjG(Hf?Z!{&Ou|wr8?@@04&XOmm_YETDlkpa!)3h@cUkECLa<;c@$(M-R~|L34MZh( z_@E5ukEZFuy_$fsqT;vCEn4|*J^!y>@>x~6BpPPIy%-a;bre|eNw;L6j9zxC>x>8W zhM#X|p(cKEOK{P4g=@45cfWVili)lwd{v&apYRTS5a%3#Sd;Sn{f!m*%Vc?|NR&w0 z)JLOA|Dq33EyOIu9pI{9Z+ER%%+Hib7K465#4e;1|3HYZ4^G;PUyCZyp3yuurB|>D zsPe66vhKbJ;rWL64pIz^iX^lW2lZyw%^lBoKxtazPqtP3wm@ zBGVGTH;Uii;9@^@I2&42I_l`qW|sVl=uQcMVj4^Y4+_K#<#gL=*1WujgW23Kcv*Cw zRfo`P^>RPJ@nlhKbv?(qZpJ0e?g-ImRXqX-e+lQ%Yg0v#Yl)e&dPNdXq^69~Cs@?0 zvbN95iimxoFWvf~NdF7~Zxb-j;zBDTYJB-IHc?+KFenPLAq7MxuYmbCfn_q`Qw_`0 zz^4Ty1FPK~m0yn~wB%X?FerkZohQ0NX3Htl$RT+5Y0_$y4)D6crFjP(et??xResPGl@a0r+;{VQ}19m=zvy{eXAsQc@1H z?M4`wYs2S_2BDsI@iC+)XC`}> zmF+g3F*!tg_olu#pDg7bG`*-L*RXQGKo*nok;kf-xc}!f0Y4A!4JR_niOpwdct!~L zVZ%Mq9tsIoNck!T^~Z4qB%2R^8r&fKCaYfJc8{sxWT#FQYUJlN(+(_vTa5Ld0Uk1usUFue_X(p|Ly3dkdu0+t+cRZd~>@ZgQd#`W`{g9fM7*aX#!CpzvkSX~|(;cuAA^V=VFxBQIU zN1pgw6>uz`n!4PKU!`p283`d|zxE)O!~&{pP@ph>)AAwD{V_*UC_|pmd((7DYa4Y( zTyV79Yv8^e_FR%~i*uhOm7MT2W@w|7_?`Jb*qg$c1_ByKC3q)rc(AllZRG2j+YFte zVGaj}*_CvD+-y{T(_(ZpxS31h{y1a#`hGL%A*$!k@NQt+7tf&6SdEYIIGEy^lYqzL z7=fdYZzcE{AcM$S%~AdaGOGUG`NN!_R?udQ;r*ryFIo($oaGRu4ZHkeOdKBx7=IJt z#wF;BDuo1na-_Z!StKy0boq-mQ~j0<^||p-h2lDw0anQFlUsJQ8VY&>L=Z<2P*`ox z(#yO5-1(RZEVa`nE<4MKJIQyuYdb4vfDK|&9_&Y}F}CI@17$GuT5}`|xYnq0!@(lL zq65gtbHBa#Is_&gaw&Lzw$*j;{K8hYwfqnzc1yf5YC}KCEFW-34?@V;PGFBOsL*gV z3HLs5jEF4QR4PHn%ri|M%D}rDrDOi0QuSG2Ot z*;k;`q$lf#>T|Ih%PD;coz(hg*#~b9xCJk~s33!!0kBem>yhHw;Z^u*+#BZD#W*i{ zK>fduwqgu!L(>Z&6c?pX69zj6-ddB)%0egD>b*BE2J-c_^;N_W$pWjussZ)x z+HO$JFJ#)ZnHB`#^uT}y+NdkAo!1&cHWhXdGT)8L(0G)6VH3Q1I+|tiz24c(bTUyR z6oZ5HJ{;(2imW04f~8)d0M107>-G_B^7Nu#TLNtA^BZgR3}^@taL+)gcxwxIJev=m z$-7Zw8fI>zbBy*7(DZB`{iLV+=PB?IbVfq%mcX`D-Z2v|ck=#FUWGrqtny*S+e?}C zayi%l*6-A2Aj_|C1x_-`s=^h^l)Xr_7#-rDws}Hj=Ughu(nQ}lv9$7|fZYNl@eBtW z0sxgi9et?Rk^edFVmx`*kGF(UMs1QDkiJ`8a}8y*0GhIFZWT+<(fke})ml@;$QtnS z5H*Ts>}e0dt=!)IboTq-$ODK0JJgsado5^6IzZB{ghOibU69QNa;wB;3|-f>dHV2N zIsaGr;Gzp7u@|Y@=Lnj)y`#mCqy`AE&AR~MGQj}hSB~%GfIV$g5KYpoJ``9fF#OrOY2ENX^)J78B129dom7@ zO9w>Tbmt=DVaPXvpAdZ@QA8)m(7x|zG_)2G$43LnG$+faN``3t_0R}3vU~h%JGD8S zv=2?C!uwLf8V6%|AtG_906^P?m5@XonsyB*UJt>hvs){)(cocj`Pl30n%W82B-D&;g$Rln)OU3$Gd8Qp#YD$6U5p&7>!rH|!GsmnHFr6a)AQhg8{o_;@)K-~F3Id#JN0(ulUnvYi zc%hM7Y*P;kVBxinwc~g_fbycigK_H;t)WB#uwX&RfRsnpHg~OU1xVb`vZ+cC1HO)Qb7qC& z6@N7=HIRjY%r+|BNR|g5q9o4s=smSqK`+2)m*goCjmqu3_sJlhUXbWLEpkhm{^2V; zs(2gpA?p6wlRJ2D1DVH!crcCTDv@9#0_f~h&uDvzCndGF_{6C9lN7L?i(WDS0O+j| z(DlZUX>mLHEf4bM(~gXq1RKP$8XuoJzW71?OVT6jR1b^%(T$u21AM6QB>OgBdN#)d zh}V|jr409^wiG`W2b)d4`>w}_dHGqb2o6?VRxOm1?vkY8*asv{et;y1O^v5k;K#!+ z!!zGXzY)DF|16%;DeNZV_Avf?XHz+-ab|h%0v@q7sRa-AV&E zr-jZIL^P|dvS;wg7I=Z&gO)2}AN7J9?jmEr)7S0+RVk*&U#1Bmtpvv_Q(<7}Ov9i4 z=Im*}1T5BPb%d7l*I6ggaIFG-=M_h(b*>@h6?l)GJM}1yx4PxA{63soN?&8|`;tKf zczB!cUZghCl@L4nM4d#i*n{k4Rv8;)upHMJuk&>7l9H?Wtpp*&F_zAEd9#R9LbgyT zTH?mC97O+5OE_FVXOMf{D%?~{&verA_bZoTk0}DvF;c0mYC*nvPBNf>R)YKM2N%3R zMr#s==ZT1JP;`pm?R)XjYL4EHS5tgJNwQ3Df3u+>v5tqR1JVbH+&RU#FJzF#y}|=s zWg+#yh=uT&i>(J+C#GAiZxE(H%jVN?$`y2omZ(pd;S?EY-R>r!jG%LR z|KqP!Z7-0Yr7lhS(gWO}uypm=Lb+j56aQY9w7BK(pTNS1+ic>Kw1KUovBFCKJ`Q_maZ{l(QZatNu|y%2%*9EP#pe;RsUg1Yy4cz4$Xq*D~D4PI_nR^o89G&(uS z6@aEg_Jv%86%8W6*}Cm#3Lptv!e5dnaw%KKR@Ae`fISilSvVe3Htg*OE z3p}z<5mByi{#Y!&<4{^a18K$XpKSa!hz9TXIA>@YbvS?huoHZ{x$fMQ+<~wqTT>32 z{#J7xUon=!q8mTv#D|%M1&Fi0-tEBH+4cp^UljjT;&X4VJv$Y@|H@v}dl$_s?+{sY zJQWRYFZ^Oc`ogxG8+&dVd}+okQG(V`2>uc23NYqoj;~0H>y$!fs97$4U+@VKj!RyF zuSR}l4XXPa%YSvf(#w}g-VNB5W##X`aYrlg2IxUlg~2^&qZ$3w=DSy5$8)D|uhVOy z=L4vvI-Gowf?v$o03YJ0XGI=VRZpavzJ+ttN4bo$9y>go&O9e z=O8Pi&Iu6JSLv9pvhM-SoT=-j1nTr@2BPj{oQJYgb_vp}AEG|dKpr;qL|OzR0M`OE zwGWR@4|}?@U$V8yzkY2kZIKrmBwP0Km+AxG*TD4+Ha9UU1{_eIRxyeX$aMdmdniuY zeu6qLkn3MwTA%VKgUwImp~hqYz7R#w<-*l=vE9?!GD<4r-Y1{cDXoq{ z0YRhq*H?$Azz2NW_KjR0Dbzly%p^O$gho^x=*5Aj(?h^9)#5}D1`EKI4l+SVW6WM7 zx#u+9rwzJYjA;n-S@7gqm4T4 zHRUP|UtbyJLR<^Q{s11PK2W|ct=oR>^!-08>&n$&7e z%4or8-0$E;J-;QOmWI{?%3euL4AcP!XBf2XRC*dmfgubb_*s~*rOYzd@C zjDdbti+Jj@b|2ux9u{}?4y82vE&_H|!wn(OKVR72R3_D?$-9X4E^YD?T>mU9 z>kw-+^DW3*vonBG)l*wcgY(dlcZRL{HmBQqg}vHELiiRna)}abH=j76izk z`7aE$xQ?;11l+DuMe9d>nkOW|LysHDR@3CQf~1zOozBjb9X-c&hitW&{3JRKH&7_ znmItVIsiJd>euB;(hgeO@Vn`=;7U?sROg~5LfTQxhR^-7XSmt@^BvT1kFPnoc>MQf z36V#$GbM4rKOZFxHRcZrs7iR&aPQLW4j#9DP?C3roYoyZhU_e{@5%}YWBvTdwC{G4 zcg+%f5XzQ$gyIQ?cM|MsBo6V{Y8-PzpE5tW8gpjdnIoT=nBXlQAB;|`A2B=sI5(HI zP}^Qw)5?U`dphlQBKk|J7J0tn)}0vP*p!BStbUpe8+aB?@SqWkdKb=;7GWW6P0O!2 z16m;YFy;8D7U&_vDb!uQcxBmYG-L^H(i+l zDZVUv(`MgS{T0e^I!)7lE=^HxkCBS#@}6jqjMUE3l#gW$1z6DtmdLUxMSMyB_2+5v!Lh0ZE1;lj{yw z3)w@>A(^{hxh!V27ouY#&tVMkL<}AiS%-j|?2Ee5{5ujhaZKJ zKYH9?VaRSV1=7fe7~dl{Jjj)(?@BBO6IwjgH~1=vMILrDPHBbl1bCAO726g#X4kA` zLvb?WufHepLwSwvxM(LdgK=0?GcyBmh@VQ=AD*gevQwUO*sMa^v@BXUs-7S$!7-w% z;dS{kLGR>o3&iTA?~m!+tZheK_8MKS;K8Qj(O>!1y)Ux6FOu*ty^a5_Rv#WU63R18X5tAIw$|*_8byJ5bGp(Z6`_fW)LrS< ztU`jGIL*Eq%fKp`%<7M3 z-9K0J-o3LaWT4dzbwLq>EUc{s38KDpomG{c!`A<13U&Vu6#E?>${Xlw?N9~|6X9_^ zAXDs7lOlf@Y!@vT1#G2y?~LL1{Xq+SDQLgelrH+GeF_w*{2fP4AFCz)3f8RVf}cV(<~<|OwD`B1s)m~C!70X{*^}GxZBC1HbCp#PdScwI#X_&`rT1EY-mi+e8fP3 zqyx$Ty>CJL^$znP+bD?ta)uU~GGIi{XVLbPj2bUrDuPerSla!2nQM)aoI%)6Vm za;a%)0(8tDfY~7md9ik`J*PAd@>iA@ZtW5gGZl}J3(HHKeZlnC5KrW?z8hn6it>=T zX>P7Ii_Cjo%EE0@&V4sA>{oAazo!|W0Uxr*UOX#$$9cTTbP6Pou8v+CXxjbw%ry2T z57HQmqB_J!8w*LAzKOI1&w#pvB#ejKaUPOcH|;gmy8Lv}g~F-~?={A3F6YL_Pt|4Q z+;y2wo!wox^PsqsyA7-OX?GQIJ*dVp>-BF>y2`+*X3X-!NN9TO;g2O$X}C`D^5*7d zyJ6azV@0JQd(XV`<=o6(ocqDDmRt%e>!N93mCvshYlFT(dtCUGsq=!|RyMSedho^Q zV^tN9w-K=8#LiW#)}Kr_sHT=GUQ+sgc-R3o_KSd|hX8(qS%UdJ^T?(tZ1%PrwLcxm z`#Hoh-9Y>iC&N2i3g2nv>><#>-7r#w@n9Z$0;KVlMX-WB3iuy?SlS2iKum?@h@VS1 z7PS`K!4VhAwu~LEBzCLl+sT(d^MOkpzeckM%dcQ)553Tu5g{tb< z`=`}tq+EKuT#R^Smfk`p>eGA}L5PFQxmGpDRRK7RO6W}36w;bjt$z*^k^RvwHK#<_ za;tdpyDit95L@16g|24+{fBOWRh)m|XKwPpCH-w@kV+Jxt4$(v4+U=JBEBBw-i>&2 z86`eeprsorK&Cpb5!6|oc6~!qYU!RjgxkMm!MfI8 z-9qO1XBlw;>o3Oox()LU7YRw~Tw`)O@TR4AkLh|Zb*g(6W3VW1nRcUd82WNr)H(U2-%g8*n$IZ2Jn9TZ1A)@E|!{ocH@B?!YQH^g6PpMrj+XTrBetJVrR4Sfg}?xX`Lu?7X3-NpPY!J)B!g z)QiKb!|#?R6+aTz3{uTIk^`T^0-M;(U05m|T#axMBsA@)-h^$qQLDSSa*iq03Xv@5 z@ZiSa(Op&&^svGVVj-Gb~HyX@h?~Oj}z49^=?=1hq?@k&kY8ZIbu`$ zF@gapO|ZZ!WpmdtPV)iFEBZ!{ZWU6Rc7?uw)MdpZx?Z)&dn()=)kTIFCr?#;Bb5=W zGMdbVO8F;5i|3{1eBWsvwk*exNyTbH0^qs4*HXGIV?kOU)M=vz`0n^j7`3=zx-r$c zc;r}AfImTBvr{Bm-s-08gwit9rP0j_Shm6XmvLrn)N8Iq?6rzdTZMjAH?*`t8OmHY zM50GpdyH3^omn!VxG?KCc5tj|>NJ1I78{LMjp@@DUN65@Fhk|2*g3sR!J92}#vE~2 zaKIk7pztLjvq}+oQ>3|WDJh>x!R+VdW&He);cH{rr`}(|^>=mF<wQ;jut^!d(Pe z7Ob$VY?%)tB}jsV8rtbSIoQk$B} zp<4fALL}XB|HrqE{20WXya8U?`N~4{BB(R$P@G%R#6OaRwBtWDq1=jx1UzmlcCn+JZY^Szb?5{Ja#&&i*q+Xe|F~{7F?Qh3_t~~^JjGXj z{sh5gh1aUra1QG}k@$gi(^e>wpR>=~8}qHA|FVDa<9gsLHsa!i>K@XH5EFIjyQwz`mya1!=e`(lC$+cqio9Mvf8|R z;yO@!k4W{?zC`w;?%D?oxhx481^IXtSd?G0in$}}vGBZuV?3sp0$5HPLKvQjWJcz)uF5gD8)rap#G7CSW7oj%TasM}%L$OE z!Bfs8bYJDGuZER!**erzq77nq_6OB8A7#ZYv`s|^VsSo+6nS6phOsCgNQu}m=>3{Q zZHOdJN+QrT?AA+eY5i#_jUTt6pe%aq_xZA9WO_u``^|cLLwJZH^=i8mcW`Wm(yWe?gaLTZqIp!o{(F~ zB_z?Xr%HQ22<3QCBoty?7q_9EJe%+Mz$uw;6kzG^mCvnM=5I% zOs$rxoUNz2W&0@PudiiYGj4^m+rT^D3yE13^EO)QU=F_H5#V|{)9HR%N%h>Oow;(V z2P8DgRQY1rfFif~d1Tycc6^|q1nQlHFKg~i1ytn5|Gx>%tT2{mU2lUKh7OPTKj6o& z4Y)*^%Of&#v7TenUk;zMBtJWhfWx%QF7D)ip3n8}5H-BbGrn5d2>3d=Ab)WX8{3)KeT^`!Ct)ChC zis)SkNvtl8f7#!7J`I{Z6hEreUtv#X-?-DODHwO(m}6|rda%GB)YSFh)I`pwZ&Gyk zWQynW&t%gcrW4)LzfuF6DoMoU8U5@0wt8(w<`*uXp0D^s+*WiKMy2Mrk+Cs95X-75 zGlKJ-Bbd$>ucVqoGhHA1Epq+dL_pWc)0$_ZoMM#&rXn32+5N=r@^8MHXtFkeRrV}@ z(Dv<(S^QBodl(eQ9@n@Y@YwPEb=WCcEB%;D!S0u-&+%>V13e7(rD66M5TM!s+f8y2h9GP zbod~Dc(_0`rh>%Re^;B%2Uil!ynOB6KQ6V46S}8W3`_-M$e^E-wV+77S=na%6f~%G z!pz%ZFU~;79PUt8Str`TF)-%yhqQ&@|B7m1Woo6dV0v2DGhQNl|C8pNK{-lzw$XcW z0%dDOsa3SgHw|N$qnnd0)pu|2-F%@s@jq${1NUYJrr(!PPI~lLn308{dI|d2uf(f= z^h~VI3Kq)q!x$V*gm1XWlQ}&rhCe(k+Wi8MVr=+1z8TRTUg*XoP&)D4OCC*M}CwiK1+Bf1N z#u3S_4SF~Si}@lN4^uTe=AU4eI1^-?Hs { +class Home extends React.PureComponent { constructor(props: Props) { super(props); this.state = { - name: props.name || 'Amit' + name: props.name || 'Amit', }; } diff --git a/src/view/screens/home/index.tsx b/src/view/screens/home/index.tsx index 9273664..520cb95 100644 --- a/src/view/screens/home/index.tsx +++ b/src/view/screens/home/index.tsx @@ -1,14 +1,14 @@ import { connect } from 'react-redux'; -import Home from './Component'; +import Component from './Component'; const mapStateToProps = () => ({}); const mapDispatchToProps = () => ({}); -const HomeContainer = connect( +const homeContainer = connect( mapStateToProps, - mapDispatchToProps -)(Home); + mapDispatchToProps, +)(Component); -export default HomeContainer; +export default homeContainer; diff --git a/src/view/screens/home/styles.tsx b/src/view/screens/home/styles.tsx index c35f24c..30c3d2e 100644 --- a/src/view/screens/home/styles.tsx +++ b/src/view/screens/home/styles.tsx @@ -1,13 +1,13 @@ import { StyleSheet } from 'react-native'; -import TYPOGRAPHY from '../../styles/typography'; +import { TYPOGRAPHY } from '../../styles/typography'; -const Styles = StyleSheet.create({ +const styles = StyleSheet.create({ container: { flex: 1, display: 'flex', - backgroundColor: TYPOGRAPHY.Color.Default - } + backgroundColor: TYPOGRAPHY.COLOR.Default, + }, }); -export default Styles; +export default styles; diff --git a/src/view/screens/index.tsx b/src/view/screens/index.tsx index badee8c..24a37ae 100644 --- a/src/view/screens/index.tsx +++ b/src/view/screens/index.tsx @@ -1,17 +1,25 @@ import { Navigation } from 'react-native-navigation'; -import Screens from '../../constants/screen'; +import { SCREENS } from '../../constants/screen'; -import Splash from './splash'; -import Home from './home'; -import Settings from './settings'; +import * as Splash from './splash'; +import * as Home from './home'; +import * as Settings from './settings'; -const registerComponentWithRedux = (redux: any) => (name: string, component: any) => { - Navigation.registerComponentWithRedux(name, () => component, redux.Provider, redux.store); +const registerComponentWithRedux = (redux: any) => ( + name: string, + component: any, +) => { + Navigation.registerComponentWithRedux( + name, + () => component, + redux.Provider, + redux.store, + ); }; -export default function registerScreens(redux: any) { - registerComponentWithRedux(redux)(Screens.Splash, Splash); - registerComponentWithRedux(redux)(Screens.Home, Home); - registerComponentWithRedux(redux)(Screens.Settings, Settings); +export function registerScreens(redux: any) { + registerComponentWithRedux(redux)(SCREENS.Splash, Splash.default); + registerComponentWithRedux(redux)(SCREENS.Home, Home.default); + registerComponentWithRedux(redux)(SCREENS.Settings, Settings.default); } diff --git a/src/view/screens/settings/Component.tsx b/src/view/screens/settings/Component.tsx index cc78fd2..593aced 100644 --- a/src/view/screens/settings/Component.tsx +++ b/src/view/screens/settings/Component.tsx @@ -1,4 +1,4 @@ -import React, { PureComponent } from 'react'; +import * as React from 'react'; import { View, Text } from 'react-native'; import styles from './styles'; @@ -7,7 +7,7 @@ export interface Props {} interface State {} -class Settings extends PureComponent { +class Settings extends React.PureComponent { constructor(props: Props) { super(props); this.state = {}; diff --git a/src/view/screens/settings/index.tsx b/src/view/screens/settings/index.tsx index 636628d..7aff87d 100644 --- a/src/view/screens/settings/index.tsx +++ b/src/view/screens/settings/index.tsx @@ -1,14 +1,14 @@ import { connect } from 'react-redux'; -import Settings from './Component'; +import Component from './Component'; const mapStateToProps = () => ({}); const mapDispatchToProps = () => ({}); -const SettingsContainer = connect( +const settingsContainer = connect( mapStateToProps, - mapDispatchToProps -)(Settings); + mapDispatchToProps, +)(Component); -export default SettingsContainer; +export default settingsContainer; diff --git a/src/view/screens/settings/styles.tsx b/src/view/screens/settings/styles.tsx index c35f24c..30c3d2e 100644 --- a/src/view/screens/settings/styles.tsx +++ b/src/view/screens/settings/styles.tsx @@ -1,13 +1,13 @@ import { StyleSheet } from 'react-native'; -import TYPOGRAPHY from '../../styles/typography'; +import { TYPOGRAPHY } from '../../styles/typography'; -const Styles = StyleSheet.create({ +const styles = StyleSheet.create({ container: { flex: 1, display: 'flex', - backgroundColor: TYPOGRAPHY.Color.Default - } + backgroundColor: TYPOGRAPHY.COLOR.Default, + }, }); -export default Styles; +export default styles; diff --git a/src/view/screens/splash/Component.tsx b/src/view/screens/splash/Component.tsx index a23d4a8..13e3a84 100644 --- a/src/view/screens/splash/Component.tsx +++ b/src/view/screens/splash/Component.tsx @@ -1,7 +1,5 @@ -import React, { PureComponent } from 'react'; -import { - View, Text, SafeAreaView, Button -} from 'react-native'; +import * as React from 'react'; +import { View, Text, SafeAreaView, Button } from 'react-native'; import { tabbedNavigation } from '../../../navigators/navigation'; import styles from './styles'; @@ -10,7 +8,7 @@ export interface Props {} interface State {} -class Splash extends PureComponent { +class Splash extends React.PureComponent { constructor(props: Props) { super(props); this.state = {}; @@ -20,7 +18,7 @@ class Splash extends PureComponent { navigateToHome = () => { tabbedNavigation(); - }; + } render() { return ( diff --git a/src/view/screens/splash/index.tsx b/src/view/screens/splash/index.tsx index 63cec96..513c312 100644 --- a/src/view/screens/splash/index.tsx +++ b/src/view/screens/splash/index.tsx @@ -1,14 +1,14 @@ import { connect } from 'react-redux'; -import Splash from './Component'; +import Component from './Component'; const mapStateToProps = () => ({}); const mapDispatchToProps = () => ({}); -const SplashContainer = connect( +const splashContainer = connect( mapStateToProps, - mapDispatchToProps -)(Splash); + mapDispatchToProps, +)(Component); -export default SplashContainer; +export default splashContainer; diff --git a/src/view/screens/splash/styles.tsx b/src/view/screens/splash/styles.tsx index c35f24c..607750c 100644 --- a/src/view/screens/splash/styles.tsx +++ b/src/view/screens/splash/styles.tsx @@ -1,13 +1,17 @@ import { StyleSheet } from 'react-native'; -import TYPOGRAPHY from '../../styles/typography'; +import { TYPOGRAPHY } from '../../styles/typography'; -const Styles = StyleSheet.create({ +const styles = StyleSheet.create({ container: { flex: 1, display: 'flex', - backgroundColor: TYPOGRAPHY.Color.Default - } + alignItems: 'center', + backgroundColor: TYPOGRAPHY.COLOR.Default, + }, + image: { + width: '70%', + }, }); -export default Styles; +export default styles; diff --git a/src/view/styles/global.tsx b/src/view/styles/global.tsx index c6b9cf1..41bbc6f 100644 --- a/src/view/styles/global.tsx +++ b/src/view/styles/global.tsx @@ -1,26 +1,26 @@ import { StyleSheet, Platform } from 'react-native'; -import TYPOGRAPHY from './typography'; +import { TYPOGRAPHY } from './TYPOGRAPHY'; -export const WidgetPaddingValue = 16; +export const widgetPaddingValue = 16; -const Layout = StyleSheet.create({ +const LAYOUT = StyleSheet.create({ SafeArea: { flex: 1, - backgroundColor: TYPOGRAPHY.Color.Primary + backgroundColor: TYPOGRAPHY.COLOR.Primary, }, container: { - flex: 1 + flex: 1, }, pageContainer: { - padding: 16 + padding: 16, }, shadow: { shadowOpacity: 0.5, shadowRadius: 2.5, shadowOffset: { width: 2, height: 2 }, - elevation: Platform.OS === 'ios' ? 0 : 7 - } + elevation: Platform.OS === 'ios' ? 0 : 7, + }, }); const CTA = { @@ -32,12 +32,12 @@ const CTA = { height: 48, paddingVertical: 8, paddingHorizontal: 10, - borderRadius: 5 + borderRadius: 5, }, primaryText: { fontSize: 16, - color: TYPOGRAPHY.Color.Primary, - textAlign: 'center' + color: TYPOGRAPHY.COLOR.Primary, + textAlign: 'center', }, secondary: { flexDirection: 'row', @@ -45,81 +45,81 @@ const CTA = { justifyContent: 'space-between', height: 48, borderWidth: 1, - backgroundColor: TYPOGRAPHY.Color.Default, + backgroundColor: TYPOGRAPHY.COLOR.Default, borderRadius: 5, - borderColor: TYPOGRAPHY.Color.Primary + borderColor: TYPOGRAPHY.COLOR.Primary, }, secondaryText: { - color: TYPOGRAPHY.Color.Primary, + color: TYPOGRAPHY.COLOR.Primary, fontSize: 16, - textAlign: 'center' - } + textAlign: 'center', + }, }), TouchableOpacity: { - default: 0.8 - } + default: 0.8, + }, }; -const Fonts = StyleSheet.create({ +const FONTS = StyleSheet.create({ h1: { fontSize: 30, - fontFamily: TYPOGRAPHY.Font.Primary, - color: TYPOGRAPHY.Color.DefaultSelected + fontFamily: TYPOGRAPHY.FONT.Primary, + color: TYPOGRAPHY.COLOR.DefaultSelected, }, body: { fontSize: 16, - fontFamily: TYPOGRAPHY.Font.Primary, - color: TYPOGRAPHY.Color.Default + fontFamily: TYPOGRAPHY.FONT.Primary, + color: TYPOGRAPHY.COLOR.Default, }, subTitle: { fontSize: 14, - fontFamily: TYPOGRAPHY.Font.Primary, - color: TYPOGRAPHY.Color.Secondary - } + fontFamily: TYPOGRAPHY.FONT.Primary, + color: TYPOGRAPHY.COLOR.Secondary, + }, }); -const Text = StyleSheet.create({ +const TEXT = StyleSheet.create({ Default: { textAlign: 'left', - fontFamily: TYPOGRAPHY.Font.Primary, + fontFamily: TYPOGRAPHY.FONT.Primary, fontSize: 14, - color: TYPOGRAPHY.Color.Primary + color: TYPOGRAPHY.COLOR.Primary, }, Bold: { textAlign: 'left', fontSize: 14, - fontFamily: TYPOGRAPHY.Font.Primary, - color: TYPOGRAPHY.Color.Primary - } + fontFamily: TYPOGRAPHY.FONT.Primary, + color: TYPOGRAPHY.COLOR.Primary, + }, }); -const TextInput = { +const TEXT_INPUT = { Style: StyleSheet.create({ Default: { - fontFamily: TYPOGRAPHY.Font.Primary, + fontFamily: TYPOGRAPHY.FONT.Primary, textAlign: 'left', fontSize: 12, borderWidth: 0.2, - borderColor: TYPOGRAPHY.Color.Border, - color: TYPOGRAPHY.Color.Primary + borderColor: TYPOGRAPHY.COLOR.Border, + color: TYPOGRAPHY.COLOR.Primary, }, Bold: { - fontFamily: TYPOGRAPHY.Font.Primary, + fontFamily: TYPOGRAPHY.FONT.Primary, textAlign: 'left', fontSize: 12, borderWidth: 0.2, - borderColor: TYPOGRAPHY.Color.Border, - color: TYPOGRAPHY.Color.Primary - } - }) + borderColor: TYPOGRAPHY.COLOR.Border, + color: TYPOGRAPHY.COLOR.Primary, + }, + }), }; const GLOBAL = { - Layout, + LAYOUT, CTA, - Fonts, - Text, - TextInput + FONTS, + TEXT, + TEXT_INPUT, }; -export default GLOBAL; +export { GLOBAL }; diff --git a/src/view/styles/typography.tsx b/src/view/styles/typography.tsx index bd94c6f..4f951d2 100644 --- a/src/view/styles/typography.tsx +++ b/src/view/styles/typography.tsx @@ -1,4 +1,4 @@ -const Color = { +const COLOR = { // CTA Primary: '#565656', Secondary: '#399be0', @@ -6,21 +6,21 @@ const Color = { DefaultSelected: '#222222', Border: '#E7E7E8', Success: '#2BC480', - Warning: '#D91E5B' + Warning: '#D91E5B', }; -const Font = { - Primary: 'Helvetica' +const FONT = { + Primary: 'Helvetica', }; -const Button = { - radius: 5 +const BUTTON = { + radius: 5, }; const TYPOGRAPHY = { - Color, - Font, - Button + COLOR, + FONT, + BUTTON, }; -export default TYPOGRAPHY; +export { TYPOGRAPHY }; diff --git a/tsconfig.json b/tsconfig.json index c607e59..d6f1268 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,12 +22,12 @@ /* Strict Type-Checking Options */ "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, + "strictNullChecks": true /* Enable strict null checks. */, + "strictFunctionTypes": true /* Enable strict checking of function types. */, // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */, // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ /* Additional Checks */ diff --git a/tslint.js b/tslint.js new file mode 100644 index 0000000..24271da --- /dev/null +++ b/tslint.js @@ -0,0 +1,88 @@ +const path = require('path'); + +module.exports = { + rulesDirectory: [ + path.join(path.dirname(require.resolve('tslint-consistent-codestyle')), './'), + path.join(path.dirname(require.resolve('tslint-eslint-rules')), 'dist/rules'), + path.join(path.dirname(require.resolve('tslint-microsoft-contrib')), './') + ], + rules: { + // based on https://github.com/airbnb/javascript/tree/74fb34f08d4f1961169e9c37c9036a5b42aa7bf1 + 'prefer-const': true, // 2.1, 13.1 + 'no-var-keyword': true, // 2.2 + 'object-literal-shorthand': true, // 3.3, 3.4 + 'object-shorthand-properties-first': true, // 3.5 + 'object-literal-key-quotes': [true, 'as-needed'], // 3.6 + 'prefer-array-literal': true, // 4.1 + quotemark: [true, 'single', 'avoid-escape', 'avoid-template', 'jsx-double'], // 6.1, 6.5 + 'prefer-template': true, // 6.3 + 'no-eval': true, // 6.4 + 'no-function-constructor-with-string-args': true, // 7.10 + 'space-before-function-paren': [ + true, + { + anonymous: 'always', // 7.11 + named: 'never' // 19.3 + } + ], + 'no-parameter-reassignment': true, // 7.12 + align: [true, 'arguments', 'parameters'], // 7.15 + 'ter-prefer-arrow-callback': [true], // 8.1 + 'arrow-parens': false, // 8.2 + 'ter-arrow-parens': [true, 'as-needed', { requireForBlockBody: true }], // 8.4 + 'no-duplicate-imports': true, // 10.4 + 'one-variable-per-declaration': [true, 'ignore-for-loop'], // 13.2 + 'no-increment-decrement': true, // 13.6 + 'triple-equals': [true, 'allow-null-check'], // 15.1 + 'no-boolean-literal-compare': true, // 15.3 + curly: [true, 'ignore-same-line'], // 16.1 + 'brace-style': [true, '1tbs', { allowSingleLine: true }], // 16.2 + 'no-else-after-return': true, // 16.3 + 'comment-format': [true, 'check-space'], // 18.3 + indent: [true, 'spaces'], // 19.1 + 'ter-indent': [true, 2, { SwitchCase: 1 }], // 19.1 + whitespace: [ + true, + 'check-branch', // 19.3 + 'check-decl', // 19.4 + 'check-operator', // 19.4 + 'check-preblock', // 19.2 + 'check-separator' // 19.14 + ], + eofline: true, // 19.5 + 'space-in-parens': [true, 'never'], // 19.9 + 'array-bracket-spacing': [true, 'never'], // 19.10 + 'object-curly-spacing': [true, 'always'], // 19.11 + 'max-line-length': [true, 100], // 19.12 + 'block-spacing': true, // 19.13 + 'ter-computed-property-spacing': true, // 19.15 + 'ter-func-call-spacing': true, // 19.16 + 'no-trailing-whitespace': true, // 19.18 + 'no-consecutive-blank-lines': true, // 19.19 + 'trailing-comma': [ + true, + { + multiline: 'always', + singleline: 'never', + esSpecCompliant: true + } + ], // 20.2 + semicolon: [true, 'always'], // 21.1 + 'no-construct': true, // 22.2, 22.3, 22.6 + radix: true, // 22.3 + 'function-name': [ + true, + { + 'function-regex': /^[a-z$][\w\d]+$/, + 'method-regex': /^[a-z$][\w\d]+$/, + 'private-method-regex': /^[a-z$][\w\d]+$/, + 'protected-method-regex': /^[a-z$][\w\d]+$/, + 'static-method-regex': /^[a-z$][\w\d]+$/ + } // 23.1 + ], + 'variable-name': [true, 'check-format'], // 23.2 + 'class-name': true, // 23.3 + 'no-this-assignment': [true, 'allow-destructuring'], // 23.5 + 'import-name': true // 23.6 + } +}; diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..35b2163 --- /dev/null +++ b/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "tslint-config-airbnb" +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8e1cd18..901baaa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -761,6 +761,25 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" +"@fimbul/bifrost@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@fimbul/bifrost/-/bifrost-0.17.0.tgz#f0383ba7e40992e3193dc87e2ddfde2ad62a9cf4" + integrity sha512-gVTkJAOef5HtN6LPmrtt5fAUmBywwlgmObsU3FBhPoNeXPLaIl2zywXkJEtvvVLQnaFmtff3x+wIj5lHRCDE3Q== + dependencies: + "@fimbul/ymir" "^0.17.0" + get-caller-file "^2.0.0" + tslib "^1.8.1" + tsutils "^3.5.0" + +"@fimbul/ymir@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@fimbul/ymir/-/ymir-0.17.0.tgz#4f28389b9f804d1cd202e11983af1743488b7815" + integrity sha512-xMXM9KTXRLHLVS6dnX1JhHNEkmWHcAVCQ/4+DA1KKwC/AFnGHzu/7QfQttEPgw3xplT+ILf9e3i64jrFwB3JtA== + dependencies: + inversify "^5.0.0" + reflect-metadata "^0.1.12" + tslib "^1.8.1" + "@types/jest@^23.3.13": version "23.3.13" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.13.tgz#c81484b6f4ca007bb09887ed15ecb3286d58f928" @@ -1095,7 +1114,7 @@ axobject-query@^2.0.2: dependencies: ast-types-flow "0.0.7" -babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= @@ -1771,7 +1790,7 @@ buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" -builtin-modules@^1.0.0: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -1846,7 +1865,7 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" dependencies: @@ -1981,7 +2000,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.9.0: +commander@^2.11.0, commander@^2.12.1, commander@^2.9.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -2248,6 +2267,19 @@ diff-sequences@^24.0.0: version "24.0.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.0.0.tgz#cdf8e27ed20d8b8d3caccb4e0c0d8fe31a173013" +diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +doctrine@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" + integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM= + dependencies: + esutils "^1.1.6" + isarray "0.0.1" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -2575,6 +2607,11 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" +esutils@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" + integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U= + esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -2981,6 +3018,11 @@ get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" +get-caller-file@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.1.tgz#25835260d3a2b9665fcdbb08cb039a7bbf7011c0" + integrity sha512-SpOZHfz845AH0wJYVuZk2jWDqFmu7Xubsx+ldIpwzy5pDUpu7OJHK7QYNSA2NPlDSKQwM1GFaAkciOWjjW92Sg== + get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -3273,6 +3315,11 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +inversify@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/inversify/-/inversify-5.0.1.tgz#500d709b1434896ce5a0d58915c4a4210e34fb6e" + integrity sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ== + invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" @@ -3485,6 +3532,11 @@ is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3947,7 +3999,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.12.0, js-yaml@^3.9.0: +js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.9.0: version "3.12.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" dependencies: @@ -5509,6 +5561,11 @@ redux@^4.0.0, redux@^4.0.1: loose-envify "^1.4.0" symbol-observable "^1.2.0" +reflect-metadata@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + regenerate-unicode-properties@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" @@ -6283,11 +6340,89 @@ ts-jest@^23.10.5: semver "^5.5" yargs-parser "10.x" -tslib@1.9.3, tslib@^1.9.0: +tslib@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" + integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== + +tslib@1.9.3, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslint-config-airbnb@^5.11.1: + version "5.11.1" + resolved "https://registry.yarnpkg.com/tslint-config-airbnb/-/tslint-config-airbnb-5.11.1.tgz#51a27fbb8bf24c144d064a274a71da47e7ece617" + integrity sha512-hkaittm2607vVMe8eotANGN1CimD5tor7uoY3ypg2VTtEcDB/KGWYbJOz58t8LI4cWSyWtgqYQ5F0HwKxxhlkQ== + dependencies: + tslint-consistent-codestyle "^1.14.1" + tslint-eslint-rules "^5.4.0" + tslint-microsoft-contrib "~5.2.1" + +tslint-consistent-codestyle@^1.14.1: + version "1.15.0" + resolved "https://registry.yarnpkg.com/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.15.0.tgz#a3acf8d0a3ca0dc7d1285705102ba1fe4a17c4cb" + integrity sha512-6BNDBbZh2K0ibRXe70Mkl9gfVttxQ3t3hqV1BRDfpIcjrUoOgD946iH4SrXp+IggDgeMs3dJORjD5tqL5j4jXg== + dependencies: + "@fimbul/bifrost" "^0.17.0" + tslib "^1.7.1" + tsutils "^2.29.0" + +tslint-eslint-rules@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5" + integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w== + dependencies: + doctrine "0.7.2" + tslib "1.9.0" + tsutils "^3.0.0" + +tslint-microsoft-contrib@~5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz#a6286839f800e2591d041ea2800c77487844ad81" + integrity sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA== + dependencies: + tsutils "^2.27.2 <2.29.0" + +tslint@^5.12.1: + version "5.12.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.1.tgz#8cec9d454cf8a1de9b0a26d7bdbad6de362e52c1" + integrity sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw== + dependencies: + babel-code-frame "^6.22.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^3.2.0" + glob "^7.1.1" + js-yaml "^3.7.0" + minimatch "^3.0.4" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.27.2" + +tsutils@^2.27.2, tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +"tsutils@^2.27.2 <2.29.0": + version "2.28.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" + integrity sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA== + dependencies: + tslib "^1.8.1" + +tsutils@^3.0.0, tsutils@^3.5.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.8.0.tgz#7a3dbadc88e465596440622b65c04edc8e187ae5" + integrity sha512-XQdPhgcoTbCD8baXC38PQ0vpTZ8T3YrE+vR66YIj/xvDt1//8iAhafpIT/4DmvzzC1QFapEImERu48Pa01dIUA== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" From bbb4c3c9fe24604246f52ae9570dbf1f24d0cdf2 Mon Sep 17 00:00:00 2001 From: Amit Mangal Date: Mon, 4 Feb 2019 14:02:36 +0530 Subject: [PATCH 2/4] Add custom Elements, Button --- src/navigators/navigation.tsx | 10 ++++---- src/view/assets/images/ts_rn.png | Bin 27574 -> 0 bytes src/view/elements/buttons.tsx | 29 ++++++++++++++++++++++++ src/view/elements/custom.tsx | 28 +++++++++++++++++++++++ src/view/screens/home/Component.tsx | 9 ++++---- src/view/screens/settings/Component.tsx | 5 ++-- src/view/screens/splash/Component.tsx | 18 ++++++++++++--- src/view/styles/global.tsx | 16 +++++++------ 8 files changed, 94 insertions(+), 21 deletions(-) delete mode 100644 src/view/assets/images/ts_rn.png create mode 100644 src/view/elements/buttons.tsx create mode 100644 src/view/elements/custom.tsx diff --git a/src/navigators/navigation.tsx b/src/navigators/navigation.tsx index 4b553a7..0357d29 100644 --- a/src/navigators/navigation.tsx +++ b/src/navigators/navigation.tsx @@ -35,8 +35,8 @@ export const tabbedNavigation = () => bottomTab: { fontSize: 12, text: 'Home', - textColor: TYPOGRAPHY.Color.Primary, - selectedTextColor: TYPOGRAPHY.Color.Primary, + textColor: TYPOGRAPHY.COLOR.Primary, + selectedTextColor: TYPOGRAPHY.COLOR.Secondary, icon: require('../view/assets/images/tabbar/home.png'), selectedIcon: require('../view/assets/images/tabbar/home.png'), }, @@ -61,8 +61,8 @@ export const tabbedNavigation = () => bottomTab: { text: 'Settings', fontSize: 12, - textColor: TYPOGRAPHY.Color.Primary, - selectedTextColor: TYPOGRAPHY.Color.Primary, + textColor: TYPOGRAPHY.COLOR.Primary, + selectedTextColor: TYPOGRAPHY.COLOR.Secondary, icon: require('../view/assets/images/tabbar/settings.png'), selectedIcon: require('../view/assets/images/tabbar/settings.png'), }, @@ -77,7 +77,7 @@ export const tabbedNavigation = () => bottomTabs: { visible: true, titleDisplayMode: 'alwaysShow', - backgroundColor: TYPOGRAPHY.Color.Default, + backgroundColor: TYPOGRAPHY.COLOR.Default, drawBehind: true, }, }, diff --git a/src/view/assets/images/ts_rn.png b/src/view/assets/images/ts_rn.png deleted file mode 100644 index 12dd9d9ff12e29d1bd4cdaa4ce32b48ed9dba77a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27574 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 any; +export interface Props { + title: string; + onClick: Callback; + style?: Text.propTypes.style; +} + +interface State {} + +/** + * Default Button + */ +const ButtonDefault = ({ title, onClick, style }: Props) => ( + onClick()} + > + {title} + +); + +export { ButtonDefault }; diff --git a/src/view/elements/custom.tsx b/src/view/elements/custom.tsx new file mode 100644 index 0000000..17c187b --- /dev/null +++ b/src/view/elements/custom.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; +import { Text } from 'react-native'; + +import { GLOBAL } from '../styles/global'; + +export interface Props { + style: Text.propTypes.style; +} + +interface State {} + +class CText extends React.PureComponent { + static defaultProps = { + style: GLOBAL.TEXT.Default, + }; + + render() { + const { style, children } = this.props; + + return ( + + {children} + + ); + } +} + +export { CText }; diff --git a/src/view/screens/home/Component.tsx b/src/view/screens/home/Component.tsx index c6c1cb2..840ff49 100644 --- a/src/view/screens/home/Component.tsx +++ b/src/view/screens/home/Component.tsx @@ -1,7 +1,8 @@ import * as React from 'react'; -import { View, Text } from 'react-native'; +import { View } from 'react-native'; import styles from './styles'; +import { CText } from '../../elements/custom'; export interface Props { name: string; @@ -15,7 +16,7 @@ class Home extends React.PureComponent { constructor(props: Props) { super(props); this.state = { - name: props.name || 'Amit', + name: props.name || 'RN + TS + RNN2', }; } @@ -26,8 +27,8 @@ class Home extends React.PureComponent { return ( - Home - {name} + Home + {name} ); } diff --git a/src/view/screens/settings/Component.tsx b/src/view/screens/settings/Component.tsx index 593aced..6abcdce 100644 --- a/src/view/screens/settings/Component.tsx +++ b/src/view/screens/settings/Component.tsx @@ -1,7 +1,8 @@ import * as React from 'react'; -import { View, Text } from 'react-native'; +import { View } from 'react-native'; import styles from './styles'; +import { CText } from '../../elements/custom'; export interface Props {} @@ -18,7 +19,7 @@ class Settings extends React.PureComponent { render() { return ( - Settings + Settings ); } diff --git a/src/view/screens/splash/Component.tsx b/src/view/screens/splash/Component.tsx index 13e3a84..cea829f 100644 --- a/src/view/screens/splash/Component.tsx +++ b/src/view/screens/splash/Component.tsx @@ -1,8 +1,9 @@ import * as React from 'react'; -import { View, Text, SafeAreaView, Button } from 'react-native'; +import { View, Image, SafeAreaView } from 'react-native'; import { tabbedNavigation } from '../../../navigators/navigation'; import styles from './styles'; +import { ButtonDefault } from '../../elements/buttons'; export interface Props {} @@ -24,8 +25,19 @@ class Splash extends React.PureComponent { return ( - Splash -