summaryrefslogtreecommitdiffstats
path: root/ui/src/state/store.ts
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src/state/store.ts')
-rw-r--r--ui/src/state/store.ts72
1 files changed, 72 insertions, 0 deletions
diff --git a/ui/src/state/store.ts b/ui/src/state/store.ts
new file mode 100644
index 00000000..08410ba8
--- /dev/null
+++ b/ui/src/state/store.ts
@@ -0,0 +1,72 @@
+import { create } from "zustand";
+import { parseISO } from "date-fns";
+
+import {
+ User,
+ DefaultUser,
+ HomeInfo,
+ DefaultHomeInfo,
+ Alias,
+ ShellHistory,
+} from "./models";
+
+import { invoke } from "@tauri-apps/api/core";
+
+// I'll probs want to slice this up at some point, but for now a
+// big blobby lump of state is fine.
+// Totally just hoping that structure will be emergent in the future.
+interface AtuinState {
+ user: User;
+ homeInfo: HomeInfo;
+ aliases: Alias[];
+ shellHistory: ShellHistory[];
+
+ refreshHomeInfo: () => void;
+ refreshAliases: () => void;
+ refreshShellHistory: (query?: string) => void;
+}
+
+export const useStore = create<AtuinState>()((set) => ({
+ user: DefaultUser,
+ homeInfo: DefaultHomeInfo,
+ aliases: [],
+ shellHistory: [],
+
+ refreshAliases: () => {
+ invoke("aliases").then((aliases: any) => {
+ set({ aliases: aliases });
+ });
+ },
+
+ refreshShellHistory: (query?: string) => {
+ if (query) {
+ invoke("search", { query: query })
+ .then((res: any) => {
+ set({ shellHistory: res });
+ })
+ .catch((e) => {
+ console.log(e);
+ });
+ } else {
+ invoke("list").then((res: any) => {
+ set({ shellHistory: res });
+ });
+ }
+ },
+
+ refreshHomeInfo: () => {
+ invoke("home_info")
+ .then((res: any) => {
+ set({
+ homeInfo: {
+ historyCount: res.history_count,
+ recordCount: res.record_count,
+ lastSyncTime: parseISO(res.last_sync),
+ },
+ });
+ })
+ .catch((e) => {
+ console.log(e);
+ });
+ },
+}));