fix(app): latch startup store readiness
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* @vitest-environment jsdom
|
||||
*/
|
||||
import { renderHook } from "@testing-library/react";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { useLatchedBoolean } from "./use-latched-boolean";
|
||||
|
||||
describe("useLatchedBoolean", () => {
|
||||
it("stays true after the input first becomes true", () => {
|
||||
const { result, rerender } = renderHook(({ value }) => useLatchedBoolean(value), {
|
||||
initialProps: { value: false },
|
||||
});
|
||||
|
||||
expect(result.current).toBe(false);
|
||||
|
||||
rerender({ value: true });
|
||||
expect(result.current).toBe(true);
|
||||
|
||||
rerender({ value: false });
|
||||
expect(result.current).toBe(true);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,13 @@
|
||||
import { useEffect, useState } from "react";
|
||||
|
||||
export function useLatchedBoolean(value: boolean): boolean {
|
||||
const [hasLatched, setHasLatched] = useState(value);
|
||||
|
||||
useEffect(() => {
|
||||
if (value) {
|
||||
setHasLatched(true);
|
||||
}
|
||||
}, [value]);
|
||||
|
||||
return hasLatched || value;
|
||||
}
|
||||
Reference in New Issue
Block a user