You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
57 lines
1.5 KiB
import storage from '@/services/local-storage.service' |
|
import { createContext, useContext, useState } from 'react' |
|
|
|
type TZapContext = { |
|
defaultZapSats: number |
|
updateDefaultSats: (sats: number) => void |
|
defaultZapComment: string |
|
updateDefaultComment: (comment: string) => void |
|
quickZap: boolean |
|
updateQuickZap: (quickZap: boolean) => void |
|
} |
|
|
|
const ZapContext = createContext<TZapContext | undefined>(undefined) |
|
|
|
export const useZap = () => { |
|
const context = useContext(ZapContext) |
|
if (!context) { |
|
throw new Error('useZap must be used within a ZapProvider') |
|
} |
|
return context |
|
} |
|
|
|
export function ZapProvider({ children }: { children: React.ReactNode }) { |
|
const [defaultZapSats, setDefaultZapSats] = useState<number>(storage.getDefaultZapSats()) |
|
const [defaultZapComment, setDefaultZapComment] = useState<string>(storage.getDefaultZapComment()) |
|
const [quickZap, setQuickZap] = useState<boolean>(storage.getQuickZap()) |
|
|
|
const updateDefaultSats = (sats: number) => { |
|
storage.setDefaultZapSats(sats) |
|
setDefaultZapSats(sats) |
|
} |
|
|
|
const updateDefaultComment = (comment: string) => { |
|
storage.setDefaultZapComment(comment) |
|
setDefaultZapComment(comment) |
|
} |
|
|
|
const updateQuickZap = (quickZap: boolean) => { |
|
storage.setQuickZap(quickZap) |
|
setQuickZap(quickZap) |
|
} |
|
|
|
return ( |
|
<ZapContext.Provider |
|
value={{ |
|
defaultZapSats, |
|
updateDefaultSats, |
|
defaultZapComment, |
|
updateDefaultComment, |
|
quickZap, |
|
updateQuickZap |
|
}} |
|
> |
|
{children} |
|
</ZapContext.Provider> |
|
) |
|
}
|
|
|