Skip to content

Commit 4fd82ff

Browse files
committed
1.0.7 - Allow for undefined properties in the session data
1 parent 5fd2ffa commit 4fd82ff

File tree

9 files changed

+32
-26
lines changed

9 files changed

+32
-26
lines changed

dist/index.js

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.modern.js

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.modern.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/types.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Dispatch, SetStateAction } from "react";
22
import { Dispatcher } from "./dispatcher";
3-
export declare type SessionValueType = {} | null;
3+
export declare type SessionValueType = {} | null | undefined;
44
export declare type SessionGenericData = {
55
[key: string]: SessionValueType;
66
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@peteck/react-context-session",
3-
"version": "1.0.6",
3+
"version": "1.0.7",
44
"description": "Arbitrary session data with support for multiple contexts",
55
"author": "Peteck",
66
"license": "MIT",

src/index.test.tsx

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type SessionData = {
2121
a: number;
2222
b: number;
2323
c: string;
24+
d?: boolean;
2425
};
2526

2627
const useSession = useSessionImpl<SessionData>();
@@ -49,12 +50,19 @@ function TestComponent1() {
4950
}
5051

5152
function TestComponent2() {
52-
const [{ c }, set] = useSession(["c"]);
53+
const [{ c, d }, set] = useSession(["c", "d"]);
5354

5455
return (
5556
<div>
5657
<p id="c">{c}</p>
57-
<button id="btn2" onClick={() => set("c", String(Number(c) + 1))} />
58+
<p id="d">{d === true ? "true" : "false"}</p>
59+
<button
60+
id="btn2"
61+
onClick={() => {
62+
set("c", String(Number(c) + 1));
63+
set("d", true);
64+
}}
65+
/>
5866
</div>
5967
);
6068
}
@@ -64,19 +72,26 @@ function TestComponent3() {
6472

6573
return (
6674
<div>
67-
<button id="btn3" onClick={() => set("c", "TEST")} />
75+
<button
76+
id="btn3"
77+
onClick={() => {
78+
set("c", "TEST");
79+
set("d", undefined);
80+
}}
81+
/>
6882
</div>
6983
);
7084
}
7185

7286
function ObserverComponent() {
73-
const [{ a, b, c }] = useSession(["b", "c", "a"]);
87+
const [{ a, b, c, d }] = useSession(["b", "c", "a", "d"]);
7488

7589
return (
7690
<div>
7791
<span id="o-a">{a}</span>
7892
<span id="o-b">{b}</span>
7993
<span id="o-c">{c}</span>
94+
<span id="o-d">{typeof d}</span>
8095
</div>
8196
);
8297
}
@@ -101,14 +116,18 @@ function TestApp({
101116
);
102117
}
103118

104-
function testData(a: number, b: number, c: string) {
119+
function testData(a: number, b: number, c: string, d?: boolean) {
105120
expect(Number(container.querySelector("#a").innerHTML)).toBe(a);
106121
expect(Number(container.querySelector("#b").innerHTML)).toBe(b);
107122
expect(container.querySelector("#c").innerHTML).toBe(c);
123+
expect(container.querySelector("#d").innerHTML).toBe(
124+
d === true ? "true" : "false",
125+
);
108126

109127
expect(Number(container.querySelector("#o-a").innerHTML)).toBe(a);
110128
expect(Number(container.querySelector("#o-b").innerHTML)).toBe(b);
111129
expect(container.querySelector("#o-c").innerHTML).toBe(c);
130+
expect(container.querySelector("#o-d").innerHTML).toBe(typeof d);
112131
}
113132

114133
it("can not use useSession hook without session provider", () => {
@@ -120,7 +139,7 @@ it("data has the correct default values", () => {
120139
act(() => {
121140
render(<TestApp />, container);
122141
});
123-
testData(defaultData.a, defaultData.b, defaultData.c);
142+
testData(defaultData.a, defaultData.b, defaultData.c, defaultData.d);
124143
});
125144

126145
it("can set session values", () => {
@@ -140,13 +159,14 @@ it("can set session values", () => {
140159
defaultData.a + 1,
141160
defaultData.b + 1,
142161
String(Number(defaultData.c) + 1),
162+
true,
143163
);
144164

145165
act(() => {
146166
btn3.dispatchEvent(new MouseEvent("click", { bubbles: true }));
147167
});
148168

149-
testData(defaultData.a + 1, defaultData.b + 1, "TEST");
169+
testData(defaultData.a + 1, defaultData.b + 1, "TEST", defaultData.d);
150170
});
151171

152172
it("can mount and dismount", () => {

src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Dispatch, SetStateAction } from "react";
22
import { Dispatcher } from "./dispatcher";
33

4-
export type SessionValueType = {} | null;
4+
export type SessionValueType = {} | null | undefined;
55
export type SessionGenericData = { [key: string]: SessionValueType };
66
export type SessionDispatchFunc = Dispatch<SetStateAction<any>>;
77
export type SessionContextKey = string;

src/use-session.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,6 @@ export function useSessionBase<
6666

6767
const set = useCallback(
6868
<P extends keyof DataType>(key: P, value: DataType[P]) => {
69-
if (typeof context.data[key] === "undefined") {
70-
throw new Error(
71-
`"${key}" is not defined in the default session values. Make sure it's present and try again.`,
72-
);
73-
}
74-
7569
context.data[key] = value;
7670

7771
if (context.onChange) {

0 commit comments

Comments
 (0)