diff options
author | Kirill Rogovoy <[email protected]> | 2021-07-20 21:24:52 +0300 |
---|---|---|
committer | Kirill Rogovoy <[email protected]> | 2021-07-20 21:24:52 +0300 |
commit | 5f4611d65e40eae3ca6191a15f68d69ea5a1c4cb (patch) | |
tree | 273dfc086444533d86d580961c92ba8d14781a67 /app_expo/models/character-store | |
parent | f0bf4e7afdcd8b02a62be45ab3e7d047ed865a79 (diff) |
WIP
Diffstat (limited to 'app_expo/models/character-store')
-rw-r--r-- | app_expo/models/character-store/character-store.test.ts | 7 | ||||
-rw-r--r-- | app_expo/models/character-store/character-store.ts | 37 |
2 files changed, 44 insertions, 0 deletions
diff --git a/app_expo/models/character-store/character-store.test.ts b/app_expo/models/character-store/character-store.test.ts new file mode 100644 index 0000000..fc17694 --- /dev/null +++ b/app_expo/models/character-store/character-store.test.ts @@ -0,0 +1,7 @@ +import { CharacterStoreModel } from './character-store' + +test('can be created', () => { + const instance = CharacterStoreModel.create({}) + + expect(instance).toBeTruthy() +}) diff --git a/app_expo/models/character-store/character-store.ts b/app_expo/models/character-store/character-store.ts new file mode 100644 index 0000000..9751118 --- /dev/null +++ b/app_expo/models/character-store/character-store.ts @@ -0,0 +1,37 @@ +import { Instance, SnapshotOut, types } from 'mobx-state-tree' +import { CharacterModel, CharacterSnapshot } from '../character/character' +import { CharacterApi } from '../../services/api/character-api' +import { withEnvironment } from '../extensions/with-environment' + +/** + * Example store containing Rick and Morty characters + */ +export const CharacterStoreModel = types + .model('CharacterStore') + .props({ + characters: types.optional(types.array(CharacterModel), []), + }) + .extend(withEnvironment) + .actions((self) => ({ + saveCharacters: (characterSnapshots: CharacterSnapshot[]) => { + self.characters.replace(characterSnapshots) + }, + })) + .actions((self) => ({ + getCharacters: async () => { + const characterApi = new CharacterApi(self.environment.api) + const result = await characterApi.getCharacters() + + if (result.kind === 'ok') { + self.saveCharacters(result.characters) + } else { + __DEV__ && console.tron.log(result.kind) + } + }, + })) + +type CharacterStoreType = Instance<typeof CharacterStoreModel> +export interface CharacterStore extends CharacterStoreType {} +type CharacterStoreSnapshotType = SnapshotOut<typeof CharacterStoreModel> +export interface CharacterStoreSnapshot extends CharacterStoreSnapshotType {} +export const createCharacterStoreDefaultModel = () => types.optional(CharacterStoreModel, {}) |