Fix add remove button for multifield attributes

This commit is contained in:
Joseph Garrone 2024-06-02 00:31:08 +02:00
parent 6cdb83d730
commit 96a88fe865
2 changed files with 41 additions and 15 deletions

View File

@ -426,21 +426,23 @@ function AddRemoveButtonsMultiValuedAttribute(props: {
return (
<>
{hasRemove && (
<button
id={`kc-remove${idPostfix}`}
type="button"
className="pf-c-button pf-m-inline pf-m-link"
onClick={() =>
dispatchFormAction({
action: "update",
name: attribute.name,
valueOrValues: values.filter((_, i) => i !== fieldIndex)
})
}
>
{msg("remove")}
{hasRemove ? <>&nbsp;|&nbsp;</> : null}
</button>
<>
<button
id={`kc-remove${idPostfix}`}
type="button"
className="pf-c-button pf-m-inline pf-m-link"
onClick={() =>
dispatchFormAction({
action: "update",
name: attribute.name,
valueOrValues: values.filter((_, i) => i !== fieldIndex)
})
}
>
{msg("remove")}
</button>
{hasAdd ? <>&nbsp;|&nbsp;</> : null}
</>
)}
{hasAdd && (
<button

View File

@ -0,0 +1,24 @@
import "minimal-polyfills/Object.fromEntries";
/**
* Functionally equivalent to structuredClone but
* functions are not cloned but kept as is.
* (as opposed to structuredClone that chokes if it encounters a function)
*/
export function structuredCloneButFunctions<T>(o: T): T {
if (!(o instanceof Object)) {
return o;
}
if (typeof o === "function") {
return o;
}
if (o instanceof Array) {
return o.map(structuredCloneButFunctions) as any;
}
return Object.fromEntries(
Object.entries(o).map(([key, value]) => [key, structuredCloneButFunctions(value)])
) as any;
}