This repository has been archived on 2026-08-11. You can view files and clone it, but cannot push or open issues or pull requests.
Gishen-Mob/lib/stores/locationStore.ts
kirukib d40cb22ff4 Finalize profile, prescription, and checkout with shared UI modules.
Add payment/notification prefs, assisted pharmacist codes, Rx status journey, and mock payment intents so demo flows match the storefront brief.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-10 14:53:34 +03:00

80 lines
2.3 KiB
TypeScript

import AsyncStorage from "@react-native-async-storage/async-storage";
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
export type Fulfillment = "delivery" | "pickup";
export type PaymentMethod =
| "chapa"
| "arifpay"
| "telebirr"
| "mpesa"
| "bank"
| "cod"
| "pay_at_branch";
type LocationState = {
fulfillment: Fulfillment;
areaLabel: string;
branchId: string | null;
lat: number | null;
lng: number | null;
paymentPreference: PaymentMethod;
setFulfillment: (f: Fulfillment) => void;
setAreaLabel: (label: string) => void;
setBranchId: (id: string | null) => void;
setCoords: (lat: number | null, lng: number | null) => void;
setPaymentPreference: (m: PaymentMethod) => void;
allowedPayments: () => PaymentMethod[];
};
export const useLocationStore = create<LocationState>()(
persist(
(set, get) => ({
fulfillment: "delivery",
areaLabel: "Addis Ababa",
branchId: null,
lat: null,
lng: null,
paymentPreference: "chapa",
setFulfillment: (fulfillment) => {
const next: Partial<LocationState> = { fulfillment };
if (
fulfillment === "delivery" &&
(get().paymentPreference === "pay_at_branch" ||
get().paymentPreference === "cod")
) {
// COD stays valid for delivery; only strip pay_at_branch
if (get().paymentPreference === "pay_at_branch") {
next.paymentPreference = "chapa";
}
}
if (fulfillment === "pickup" && get().paymentPreference === "cod") {
next.paymentPreference = "pay_at_branch";
}
set(next);
},
setAreaLabel: (areaLabel) => set({ areaLabel }),
setBranchId: (branchId) => set({ branchId }),
setCoords: (lat, lng) => set({ lat, lng }),
setPaymentPreference: (paymentPreference) => set({ paymentPreference }),
allowedPayments: () => {
const online: PaymentMethod[] = [
"chapa",
"arifpay",
"telebirr",
"mpesa",
"bank",
];
return get().fulfillment === "pickup"
? [...online, "pay_at_branch"]
: [...online, "cod"];
},
}),
{
name: "gishen-location",
storage: createJSONStorage(() => AsyncStorage),
version: 2,
}
)
);