summaryrefslogtreecommitdiff
path: root/app/models/root-store/root-store-context.ts
diff options
context:
space:
mode:
authorThomas F. K. Jorna <[email protected]>2021-07-14 15:10:31 +0200
committerThomas F. K. Jorna <[email protected]>2021-07-14 15:10:31 +0200
commite5021187e96b78b53203bd95d08d6818aea47d17 (patch)
tree37ec45d00eb963db53cd4bb4f04a770414b351cc /app/models/root-store/root-store-context.ts
New Ignite 7.0.6 app
Diffstat (limited to 'app/models/root-store/root-store-context.ts')
-rw-r--r--app/models/root-store/root-store-context.ts22
1 files changed, 22 insertions, 0 deletions
diff --git a/app/models/root-store/root-store-context.ts b/app/models/root-store/root-store-context.ts
new file mode 100644
index 0000000..537e51c
--- /dev/null
+++ b/app/models/root-store/root-store-context.ts
@@ -0,0 +1,22 @@
+import { createContext, useContext } from "react"
+import { RootStore } from "./root-store"
+
+/**
+ * Create a context we can use to
+ * - Provide access to our stores from our root component
+ * - Consume stores in our screens (or other components, though it's
+ * preferable to just connect screens)
+ */
+const RootStoreContext = createContext<RootStore>({} as RootStore)
+
+/**
+ * The provider our root component will use to expose the root store
+ */
+export const RootStoreProvider = RootStoreContext.Provider
+
+/**
+ * A hook that screens can use to gain access to our stores, with
+ * `const { someStore, someOtherStore } = useStores()`,
+ * or less likely: `const rootStore = useStores()`
+ */
+export const useStores = () => useContext(RootStoreContext)