228 lines
6.1 KiB
JavaScript
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,
|
|
},
|
|
},
|
|
],
|
|
}
|
|
)
|
|
);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|