Skip to content
This repository was archived by the owner on Feb 20, 2025. It is now read-only.

Commit b7ba6e6

Browse files
committed
improve type handling and logging
1 parent c1eb663 commit b7ba6e6

File tree

1 file changed

+34
-21
lines changed

1 file changed

+34
-21
lines changed

lib/useObjectState.js

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,57 @@
11
'use strict';
22

3-
import React, { useState } from 'react';
3+
import { useState } from 'react';
4+
5+
function useObjectState(initObject) {
6+
if (!isFilledObject(initObject)) {
7+
console.warn('A non-empty object must be provided to useObjectState. State not created.');
8+
return [];
9+
}
410

5-
function useObjectState(initObject = {}) {
611
const [state, setState] = useState(initObject);
712

813
const updateObject = (partialState) => {
9-
let partial = partialState;
10-
11-
if (typeof partial === 'function') {
12-
partial = partialState(state);
14+
if (typeof partialState === 'function') {
15+
partialState = partialState(state);
1316
}
1417

15-
if (
16-
!partial ||
17-
typeof partial !== 'object' ||
18-
Object.keys(partial).length === 0
19-
) {
20-
console.error('Object or function returning object must be passed to useObjectState setter. State not updated.');
18+
if (!isFilledObject(partialState)) {
19+
console.warn('An object or function returning an object must be passed to useObjectState setter. State not updated.');
2120
return;
2221
}
2322

2423
let stateCopy = Object.assign({}, state);
25-
let stateKeys = Object.keys(stateCopy);
24+
const stateKeys = Object.keys(stateCopy);
2625

27-
for (let [key, val] of Object.entries(partial)) {
28-
if (stateKeys.includes(key)) {
29-
if (typeof stateCopy[key] === 'object') {
30-
Object.assign(stateCopy[key], val);
26+
for (const [partialKey, partialVal] of Object.entries(partialState)) {
27+
if (stateKeys.includes(partialKey)) {
28+
if (typeof stateCopy[partialKey] === 'object') {
29+
Object.assign(stateCopy[partialKey], partialVal);
3130
} else {
32-
stateCopy[key] = val;
31+
stateCopy[partialKey] = partialVal;
3332
}
3433
}
3534
}
3635

3736
setState(stateCopy);
38-
}
37+
};
3938

40-
// Provide initial/changed object and function to component
4139
return [state, updateObject];
4240
}
4341

44-
export default useObjectState;
42+
function isFilledObject(obj) {
43+
if (
44+
!obj ||
45+
typeof obj !== 'object' ||
46+
Object.keys(obj).length === 0
47+
) {
48+
return false;
49+
}
50+
51+
return true;
52+
}
53+
54+
export default useObjectState;
55+
export {
56+
isFilledObject
57+
};

0 commit comments

Comments
 (0)