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:
parent
6afe23bd17
commit
70cdd2359f
3 changed files with 34 additions and 61 deletions
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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' },
|
||||
),
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue