Как создать вспомогательную функцию
Есть три похожих кода:
function startEdit(id, name) {
setNotes(
notes.map((note) => {
if (note.id === id) {
const fields = note.fields.map((field) => {
if (field.name === name) {
return { ...field,
isEdit: true
}
} else return field
})
return {
id,
fields
}
} else {
return note
}
})
)
}
function endEdit(id, name) {
setNotes(
notes.map((note) => {
if (note.id === id) {
const fields = note.fields.map((field) => {
if (field.name === name) {
return { ...field,
isEdit: false
}
} else return field
})
return {
id,
fields
}
} else {
return note
}
})
)
}
function changeCell(id, name, e) {
setNotes(
notes.map((note) => {
if (note.id === id) {
const fields = note.fields.map((field) => {
if (field.name === name) {
return { ...field,
value: e.target.value
}
} else return field
})
return {
id,
fields
}
} else {
return note
}
})
)
}
Как создать вспомогательную функцию и сократить код?
Ответы (1 шт):
Автор решения: entithat
→ Ссылка
setNotes(notes => notes.map(wrapperMap({isEdit: true })));
setNotes(notes => notes.map(wrapperMap({isEdit: false })));
setNotes(notes => notes.map(wrapperMap({value: e.target.value })));
function wrapperMap(obj) {
return (note) => {
if (note.id === id) {
const fields = note.fields.map((field) =>
field.name === name ? { ...field, ...obj } : field
);
return { id, fields };
}
return note;
};
}