From e94804173d18f34f5db34d41d31cd30cbff06357 Mon Sep 17 00:00:00 2001 From: Ben Mitchinson Date: Sat, 18 Apr 2020 23:51:12 -0500 Subject: [PATCH] first easy-peasy attempt --- pwa/package-lock.json | 76 +++++++++++++++++++- pwa/package.json | 1 + pwa/src/App.tsx | 49 +++++++------ pwa/src/state/enums.ts | 11 +++ pwa/src/state/models/newPatientFormModels.ts | 40 +++++++++++ pwa/src/state/store.ts | 6 ++ pwa/src/state/storeIndex.ts | 16 +++++ 7 files changed, 175 insertions(+), 24 deletions(-) create mode 100644 pwa/src/state/enums.ts create mode 100644 pwa/src/state/models/newPatientFormModels.ts create mode 100644 pwa/src/state/store.ts create mode 100644 pwa/src/state/storeIndex.ts diff --git a/pwa/package-lock.json b/pwa/package-lock.json index 155f8d0..c858cac 100644 --- a/pwa/package-lock.json +++ b/pwa/package-lock.json @@ -4556,6 +4556,11 @@ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -4935,6 +4940,37 @@ } } }, + "easy-peasy": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/easy-peasy/-/easy-peasy-3.3.0.tgz", + "integrity": "sha512-wkTDAG+nRy+4g8Z3/k1vuTyrhxet19oY5MCmuRgOObm8dtZ2m+g5Mk/sdf3UWPuyx/sKIYH5Fy/HXab8iNKjTQ==", + "requires": { + "debounce": "^1.2.0", + "immer-peasy": "3.1.3", + "is-plain-object": "^3.0.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.6.2", + "redux": "^4.0.5", + "redux-thunk": "^2.3.0", + "symbol-observable": "^1.2.0", + "ts-toolbelt": "^6.1.6" + }, + "dependencies": { + "is-plain-object": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz", + "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==", + "requires": { + "isobject": "^4.0.0" + } + }, + "isobject": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", + "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==" + } + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -7125,6 +7161,11 @@ "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" }, + "immer-peasy": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/immer-peasy/-/immer-peasy-3.1.3.tgz", + "integrity": "sha512-WzoZ96A93jOmcDOLNChMWAqy+ZU8vEYQx2DcKjgo7P5SToiJs+GL+5yQbWzH8X02Lhvv6xrGgVNa1xbki66Eow==" + }, "import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -9390,6 +9431,11 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" }, + "map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=" + }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -9428,6 +9474,14 @@ "p-is-promise": "^2.0.0" } }, + "memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=", + "requires": { + "map-or-similar": "^1.5.0" + } + }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -12875,6 +12929,20 @@ "strip-indent": "^3.0.0" } }, + "redux": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", + "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "redux-thunk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -14807,8 +14875,7 @@ "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "symbol-tree": { "version": "3.2.4", @@ -15228,6 +15295,11 @@ "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.5.tgz", "integrity": "sha512-ti7OGMOUOzo66wLF3liskw6YQIaSsBgc4GOAlWRnIEj8htCxJUxskanMUoJOD6MDCRAXo36goXJZch+nOS0VMA==" }, + "ts-toolbelt": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.5.1.tgz", + "integrity": "sha512-zjnZ/vy1eUA0li3H0JXecl0R3jiP42snpLimsrppt9V3LLbM4NM4jMgjXQ4S67hvehq+r9CxpX4Wj6RnFRzReA==" + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", diff --git a/pwa/package.json b/pwa/package.json index 80c48ce..4b05093 100644 --- a/pwa/package.json +++ b/pwa/package.json @@ -13,6 +13,7 @@ "@types/react-dom": "^16.9.5", "@types/react-router-dom": "^5.1.4", "antd-mobile": "^2.3.1", + "easy-peasy": "^3.3.0", "node-sass": "^4.13.1", "react": "^16.12.0", "react-dom": "^16.12.0", diff --git a/pwa/src/App.tsx b/pwa/src/App.tsx index b54f231..d3a2e01 100644 --- a/pwa/src/App.tsx +++ b/pwa/src/App.tsx @@ -1,6 +1,9 @@ import React from 'react' import { BrowserRouter as Router, Switch, Route } from 'react-router-dom' +import { StoreProvider } from 'easy-peasy' +import store from './state/store' + import Login from './components/Login' import LandingPage from './components/LandingPage' import PatientInfoPlaceholder from './components/PatientInfoPlaceholder' @@ -11,28 +14,30 @@ import './antd-mobile.css' const App: React.FunctionComponent = () => { return ( - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + ) } diff --git a/pwa/src/state/enums.ts b/pwa/src/state/enums.ts new file mode 100644 index 0000000..551557c --- /dev/null +++ b/pwa/src/state/enums.ts @@ -0,0 +1,11 @@ +export enum SEX { + male = 'male', + female = 'female', +} + +export enum Y_N { + YES = 1, + NO = 0, +} + +export default {} diff --git a/pwa/src/state/models/newPatientFormModels.ts b/pwa/src/state/models/newPatientFormModels.ts new file mode 100644 index 0000000..4287ec1 --- /dev/null +++ b/pwa/src/state/models/newPatientFormModels.ts @@ -0,0 +1,40 @@ +import { Action, action } from 'easy-peasy' +import { SEX, Y_N } from '../enums' + +interface PatientInfoFormFields { + firstName?: string + lastName?: string + nickname?: string + sex?: SEX + birthDate?: Date + age?: number + phone?: string + town?: string + firstVisit?: Y_N + weight?: number + height?: number + bloodPressure?: string + temperature?: number + pulse?: number + zScore?: number + albendazole?: Y_N + alergies?: string + medicines?: string + chiefComplaint?: string[] + history?: string + exam?: string +} + +export interface PatientInfoFormModel { + fields: PatientInfoFormFields + updateFields: Action +} + +const patientInfoFormModel: PatientInfoFormModel = { + fields: {}, + updateFields: action((state, payload) => { + state.fields = payload + }), +} + +export default patientInfoFormModel diff --git a/pwa/src/state/store.ts b/pwa/src/state/store.ts new file mode 100644 index 0000000..e8cf686 --- /dev/null +++ b/pwa/src/state/store.ts @@ -0,0 +1,6 @@ +import { createStore } from 'easy-peasy' +import storeIndex from './storeIndex' + +const store = createStore(storeIndex) + +export default store diff --git a/pwa/src/state/storeIndex.ts b/pwa/src/state/storeIndex.ts new file mode 100644 index 0000000..bdb4ed9 --- /dev/null +++ b/pwa/src/state/storeIndex.ts @@ -0,0 +1,16 @@ +import { createTypedHooks } from 'easy-peasy' + +import patientInfoFormModel from './models/newPatientFormModels' + +export const storeModels = { + patientInfoFormModel, +} + +export const { + useStore, + useStoreState, + useStoreActions, + useStoreDispatch, +} = createTypedHooks() + +export default storeModels