Skip to content

Commit 9b65ade

Browse files
committed
Fixed fieldset rerender issue
1 parent 9661296 commit 9b65ade

File tree

7 files changed

+23
-29
lines changed

7 files changed

+23
-29
lines changed

docs/bundle.js

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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "frui",
3-
"version": "0.0.9",
3+
"version": "0.0.10",
44
"license": "MIT",
55
"description": "A collection of vanilla react and tailwind components written in typescript.",
66
"author": "Chris <chris@incept.asia>",

src/hooks/useFieldset.ts

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { FieldsetConfig } from '../types';
22
//hooks
3-
import { useState, useEffect } from 'react';
3+
import { useState } from 'react';
44

55
export default function useFieldset<ValueType = any>(
66
config: FieldsetConfig<ValueType>
@@ -17,35 +17,25 @@ export default function useFieldset<ValueType = any>(
1717
const safeValues: (ValueType|undefined)[] = Array.isArray(value) ? value : [];
1818
//hooks
1919
const [ values, setValues ] = useState(safeValues);
20-
const [ changed, changeValues ] = useState<(ValueType|undefined)[]>();
2120
//handlers
2221
const handlers = {
23-
set: (values: (ValueType|undefined)[]) => {
24-
//set values
25-
setValues(values);
26-
//serialize the old change value and the new value
27-
const serial1 = changed
28-
? JSON.stringify(changed.filter(Boolean))
29-
: undefined;
30-
const serial2 = JSON.stringify(values.filter(Boolean));
22+
set: (newValues: (ValueType|undefined)[]) => {
23+
//serialize the new value
24+
const serial = JSON.stringify(newValues);
3125
//if the values are different, update the change value
32-
if (serial1 !== serial2) {
33-
changeValues(values);
26+
if (serial !== JSON.stringify(values)) {
27+
const final = JSON
28+
.parse(serial)
29+
.map((value: any) => value === null ? undefined : value);
30+
const clean = final
31+
.filter((value: any) => typeof value !== 'undefined');
32+
setValues(final);
33+
onChange && onChange(clean as ValueType[]);
34+
onUpdate && onUpdate(clean as ValueType[]);
3435
}
3536
},
3637
add: () => handlers.set(values.concat([emptyValue]))
3738
}
38-
//effects
39-
useEffect(() => {
40-
//we only want to update the value if the change value is different
41-
changed
42-
&& onChange
43-
&& onChange(changed.filter(Boolean) as ValueType[]);
44-
//for consistency
45-
changed
46-
&& onUpdate
47-
&& onUpdate(changed.filter(Boolean) as ValueType[]);
48-
}, [ changed ]);
4939

5040
return { values, handlers };
5141
}

src/react/FieldMetadata.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,11 +176,12 @@ const Fields: React.FC<FieldsProps<FieldMetadataType>> = (props) => {
176176
);
177177
};
178178

179+
const Fieldset = make<FieldMetadataType>(Fields);
180+
179181
/**
180182
* Metadata Fieldset Component (Main)
181183
*/
182184
const FieldMetadata: React.FC<FieldsetProps<FieldMetadataType>> = (props) => {
183-
const Fieldset = make<FieldMetadataType>(Fields);
184185
return (<Fieldset {...props} emptyValue={['', '']} />);
185186
}
186187

src/react/FieldTextlist.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,12 @@ const Fields: React.FC<FieldsProps<FieldTextlistType>> = (props) => {
8585
);
8686
};
8787

88+
const Fieldset = make<FieldTextlistType>(Fields);
89+
8890
/**
8991
* Textlist Fieldset Component (Main)
9092
*/
9193
const FieldTextlist: React.FC<FieldsetProps<FieldTextlistType>> = (props) => {
92-
const Fieldset = make<FieldTextlistType>(Fields);
9394
return (<Fieldset {...props} emptyValue={''} />);
9495
}
9596

src/tailwind/FieldMetadata.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,11 +176,12 @@ const Fields: React.FC<FieldsProps<FieldMetadataType>> = (props) => {
176176
);
177177
};
178178

179+
const Fieldset = make<FieldMetadataType>(Fields);
180+
179181
/**
180182
* Metadata Fieldset Component (Main)
181183
*/
182184
const FieldMetadata: React.FC<FieldsetProps<FieldMetadataType>> = (props) => {
183-
const Fieldset = make<FieldMetadataType>(Fields);
184185
return (<Fieldset {...props} emptyValue={['', '']} />);
185186
}
186187

src/tailwind/FieldTextlist.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,12 @@ const Fields: React.FC<FieldsProps<FieldTextlistType>> = (props) => {
7777
);
7878
};
7979

80+
const Fieldset = make<FieldTextlistType>(Fields);
81+
8082
/**
8183
* Textlist Component (Main)
8284
*/
8385
const FieldTextlist: React.FC<FieldsetProps<FieldTextlistType>> = (props) => {
84-
const Fieldset = make<FieldTextlistType>(Fields);
8586
return (<Fieldset {...props} emptyValue={''} />);
8687
}
8788

0 commit comments

Comments
 (0)