From 70cdd2359f41c6cdb9325dd705e0eb6d3b30ca56 Mon Sep 17 00:00:00 2001 From: thatmattlove Date: Mon, 6 Dec 2021 11:29:26 -0700 Subject: [PATCH] Fix greeting state issue --- .../ui/components/greeting/greeting.tsx | 6 +- hyperglass/ui/hooks/types.ts | 9 --- hyperglass/ui/hooks/useGreeting.ts | 80 +++++++------------ 3 files changed, 34 insertions(+), 61 deletions(-) diff --git a/hyperglass/ui/components/greeting/greeting.tsx b/hyperglass/ui/components/greeting/greeting.tsx index 4ca2f8c..39288db 100644 --- a/hyperglass/ui/components/greeting/greeting.tsx +++ b/hyperglass/ui/components/greeting/greeting.tsx @@ -15,7 +15,7 @@ import { useGreeting, useOpposingColor } from '~/hooks'; import type { TGreeting } from './types'; -export const Greeting: React.FC = (props: TGreeting) => { +export const Greeting = (props: TGreeting): JSX.Element => { const { web, content } = useConfig(); const { isAck, isOpen, open, ack } = useGreeting(); @@ -31,7 +31,7 @@ export const Greeting: React.FC = (props: TGreeting) => { ack(false)} + onClose={() => ack(false, web.greeting.required)} isOpen={isOpen} motionPreset="slideInBottom" closeOnEsc={web.greeting.required} @@ -54,7 +54,7 @@ export const Greeting: React.FC = (props: TGreeting) => { - diff --git a/hyperglass/ui/hooks/types.ts b/hyperglass/ui/hooks/types.ts index 10097d5..ba15a11 100644 --- a/hyperglass/ui/hooks/types.ts +++ b/hyperglass/ui/hooks/types.ts @@ -20,15 +20,6 @@ export interface TOpposingOptions { dark?: string; } -export interface UseGreeting { - isAck: boolean; - isOpen: boolean; - greetingReady: boolean; - ack(value: boolean): void; - open(): void; - close(): void; -} - export type UseDevice = ( /** * Device's ID, e.g. the device.name field. diff --git a/hyperglass/ui/hooks/useGreeting.ts b/hyperglass/ui/hooks/useGreeting.ts index c962ba6..74b6f9c 100644 --- a/hyperglass/ui/hooks/useGreeting.ts +++ b/hyperglass/ui/hooks/useGreeting.ts @@ -1,54 +1,36 @@ import create from 'zustand'; import { persist } from 'zustand/middleware'; -import { useConfig } from '~/context'; import { withDev } from '~/util'; -import type { StateSelector, EqualityChecker } from 'zustand'; -import type { UseGreeting } from './types'; - -export function useGreeting(): UseGreeting; -export function useGreeting>( - selector: StateSelector, - equalityFn?: EqualityChecker, -): U; -export function useGreeting>( - selector: StateSelector, - equalityFn?: EqualityChecker, -): U; -export function useGreeting( - selector?: StateSelector, - equalityFn?: EqualityChecker, -): U { - const { - web: { - greeting: { required }, - }, - } = useConfig(); - const storeFn = create( - persist( - withDev( - set => ({ - isOpen: false, - isAck: false, - greetingReady: false, - ack(isAck: boolean): void { - const greetingReady = isAck ? true : !required ? true : false; - set(() => ({ isAck, greetingReady, isOpen: false })); - }, - open(): void { - set(() => ({ isOpen: true })); - }, - close(): void { - set(() => ({ isOpen: false })); - }, - }), - 'useGreeting', - ), - { name: 'hyperglass-greeting' }, - ), - ); - if (typeof selector === 'function') { - return storeFn(selector, equalityFn); - } - return storeFn() as U; +interface UseGreeting { + isAck: boolean; + isOpen: boolean; + greetingReady: boolean; + ack(value: boolean, required: boolean): void; + open(): void; + close(): void; } + +export const useGreeting = create( + persist( + withDev( + set => ({ + isOpen: false, + isAck: false, + greetingReady: false, + ack(isAck: boolean, required: boolean): void { + const greetingReady = isAck ? true : !required ? true : false; + set(() => ({ isAck, greetingReady, isOpen: false })); + }, + open(): void { + set(() => ({ isOpen: true })); + }, + close(): void { + set(() => ({ isOpen: false })); + }, + }), + 'useGreeting', + ), + { name: 'hyperglass-greeting' }, + ), +);