diff options
author | Thomas F. K. Jorna <[email protected]> | 2021-07-14 15:10:31 +0200 |
---|---|---|
committer | Thomas F. K. Jorna <[email protected]> | 2021-07-14 15:10:31 +0200 |
commit | e5021187e96b78b53203bd95d08d6818aea47d17 (patch) | |
tree | 37ec45d00eb963db53cd4bb4f04a770414b351cc /app/models/character-store/character-store.ts |
New Ignite 7.0.6 app
Diffstat (limited to 'app/models/character-store/character-store.ts')
-rw-r--r-- | app/models/character-store/character-store.ts | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/app/models/character-store/character-store.ts b/app/models/character-store/character-store.ts new file mode 100644 index 0000000..bd92615 --- /dev/null +++ b/app/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, {}) |