1
0
Fork 1
mirror of https://github.com/thatmattlove/hyperglass.git synced 2026-01-17 08:48:05 +00:00

Fix greeting state issue

This commit is contained in:
thatmattlove 2021-12-06 11:29:26 -07:00
parent 6afe23bd17
commit 70cdd2359f
3 changed files with 34 additions and 61 deletions

View file

@ -15,7 +15,7 @@ import { useGreeting, useOpposingColor } from '~/hooks';
import type { TGreeting } from './types';
export const Greeting: React.FC<TGreeting> = (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<TGreeting> = (props: TGreeting) => {
<Modal
size="lg"
isCentered
onClose={() => 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<TGreeting> = (props: TGreeting) => {
<Markdown content={content.greeting} />
</ModalBody>
<ModalFooter>
<Button colorScheme="primary" onClick={() => ack(true)}>
<Button colorScheme="primary" onClick={() => ack(true, web.greeting.required)}>
{web.greeting.button}
</Button>
</ModalFooter>

View file

@ -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.

View file

@ -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<U extends ValueOf<UseGreeting>>(
selector: StateSelector<UseGreeting, U>,
equalityFn?: EqualityChecker<U>,
): U;
export function useGreeting<U extends Partial<UseGreeting>>(
selector: StateSelector<UseGreeting, U>,
equalityFn?: EqualityChecker<U>,
): U;
export function useGreeting<U extends UseGreeting>(
selector?: StateSelector<UseGreeting, U>,
equalityFn?: EqualityChecker<U>,
): U {
const {
web: {
greeting: { required },
},
} = useConfig();
const storeFn = create<UseGreeting>(
persist(
withDev<UseGreeting>(
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<U>(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<UseGreeting>(
persist(
withDev<UseGreeting>(
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' },
),
);