Files
astra-frontend/src/shared/utils/wrapperRequestChangeData.js

228 lines
6.1 KiB
JavaScript

import { fetchWrapper } from "../fetchWrapper";
import { removeEmptyFields, checkChangeData } from "./changesObjects";
export function getRequestChangeData(
createData,
updateData,
initData,
key,
id
) {
let isInitDataEmpty = [...Object.keys(removeEmptyFields(initData))].length;
if (Object.keys(removeEmptyFields(updateData)).length) {
if (!isInitDataEmpty) {
return fetchWrapper.post(
`general/${key}/create/`,
removeEmptyFields(createData)
);
}
if (JSON.stringify(updateData) !== JSON.stringify(initData)) {
return fetchWrapper.post(
`general/${key}/${id}/update/`,
removeEmptyFields(updateData)
);
}
return Promise.resolve();
}
return Promise.resolve();
}
export function getRequestArrayData(
initData,
updateData,
updateName,
idUpdateName,
api,
key
) {
const deleteRequests = initData
.filter((el) => !updateData.find((data) => data.id === el.id))
.map((el) => fetchWrapper.del(`${api}/${key}/${el.id}/delete/`));
const requests = updateData.map((el) => {
const requestObj = {
[updateName]: idUpdateName,
...el,
};
delete requestObj.id;
if (!el?.id) {
return fetchWrapper.post(`${api}/${key}/create/`, { ...requestObj });
}
if (
el?.id &&
checkChangeData(
initData.find((obj) => obj.id === el.id),
el
)
) {
return fetchWrapper.post(`${api}/${key}/${el.id}/update/`, {
...requestObj,
});
}
return Promise.resolve();
});
return requests.concat(deleteRequests);
}
export function getRequestNote(note, initNote, personId) {
if (note.id) {
const initChangeNote = initNote?.value || {
id: initNote.id,
value: initNote.description,
};
if (note.value && note.value !== initChangeNote.value) {
return fetchWrapper.post(`general/note/${note.id}/update/`, {
title: note.value,
description: note.value,
});
}
if (!note.value) {
return fetchWrapper.del(`general/note/${note.id}/delete/`);
}
}
if (!note.id && note.value) {
return fetchWrapper.post(`general/note/create/`, {
title: note.value,
description: note.value,
person: personId,
});
}
return Promise.resolve();
}
export function getRequestConfidant(confidant, initConfidant, initPerson, id) {
const medicalId = id;
const fullName = `${confidant.last_name.value} ${confidant.first_name.value} ${confidant.patronymic.value}`;
let contacts = [];
const phone = confidant.phone.value
? { username: confidant.phone.value, kind: "PHONE" }
: null;
const email = confidant.email.value
? { username: confidant.email.value, kind: "EMAIL" }
: null;
if (confidant.phone.id) phone.id = confidant.phone.id;
if (confidant.email.id) email.id = confidant.email.id;
if (phone) contacts.push(phone);
if (email) contacts.push(email);
contacts = contacts.concat(confidant.networks);
if (!confidant.id) {
return fetchWrapper
.post(`general/person/create/`, { full_name: fullName })
.then((res) => {
return getRequestNote(confidant.note, null, res.id)
.then(() =>
Promise.allSettled(
getRequestArrayData(
[],
contacts,
"person",
res.id,
"general",
"contact"
)
)
)
.then(() =>
fetchWrapper.post(
`medical_card/medical_history/${medicalId}/update/`,
{
confidant: [
{
person: {
id: res.id,
},
},
],
}
)
);
});
} else {
if (initPerson) {
if (initConfidant && initPerson.id !== initConfidant.id) {
fetchWrapper.del(
`medical_card/medical_history/${medicalId}/delete_confidant/`,
{
confidants: [
{
person: {
id: initConfidant.id,
},
},
],
}
);
}
return fetchWrapper
.post(`general/person/${confidant.id}/update/`, {
full_name: fullName,
})
.then(() =>
getRequestNote(confidant.note, initPerson.note, confidant.id)
)
.then(() => {
if (contacts.length) {
return Promise.allSettled(
getRequestArrayData(
initPerson.contacts,
contacts,
"person",
confidant.id,
"general",
"contact"
)
).then(() =>
fetchWrapper.post(
`medical_card/medical_history/${medicalId}/update/`,
{
confidant: [
{
person: {
id: confidant.id,
},
},
],
}
)
);
}
});
}
if (initConfidant && !initPerson) {
return fetchWrapper
.post(`general/person/${confidant.id}/update/`, {
full_name: fullName,
})
.then(() =>
getRequestNote(confidant.note, initConfidant.note, confidant.id)
)
.then(() => {
if (contacts.length) {
return Promise.allSettled(
getRequestArrayData(
initConfidant.networks,
contacts,
"person",
confidant.id,
"general",
"contact"
)
).then(() =>
fetchWrapper.post(
`medical_card/medical_history/${medicalId}/update/`,
{
confidant: [
{
person: {
id: confidant.id,
},
},
],
}
)
);
}
});
}
}
}