blob: bd92615ed091b03d3aea80ec60ecfc00e415eae0 (
about) (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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, {})
|