modo-claro
modified: src/hooks/useAgenda.js modified: src/index.css modified: src/main.jsx modified: src/mappers/reportMapper.js modified: src/pages/AgendaPage.jsx modified: src/pages/AuthPages.jsx modified: src/pages/MedicalRecordsPage.jsx modified: src/pages/PatientsPage.jsx modified: src/pages/ReportsPage.jsx modified: src/pages/SettingsPage.jsx modified: src/repositories/analyticsRepository.js modified: src/repositories/authRepository.js modified: src/repositories/patientRepository.js modified: src/repositories/reportRepository.js modified: src/repositories/repositoryUtils.js new file: src/utils/theme.js new file: vercel.json
This commit is contained in:
@@ -39,18 +39,28 @@ export const reportRepository = {
|
||||
},
|
||||
|
||||
async create(uiData) {
|
||||
const response = await fetch(`${apiConfig.restUrl}/reports`, {
|
||||
method: 'POST',
|
||||
headers: getAuthenticatedHeaders({ Prefer: 'return=representation' }),
|
||||
body: JSON.stringify(reportMapper.toApi(uiData)),
|
||||
})
|
||||
let lastResponse = null
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(await getResponseError(response, 'Falha ao criar relatório médico.'))
|
||||
for (const payload of buildCreatePayloads(reportMapper.toApi(uiData))) {
|
||||
const response = await fetch(`${apiConfig.restUrl}/reports`, {
|
||||
method: 'POST',
|
||||
headers: getAuthenticatedHeaders({ Prefer: 'return=representation' }),
|
||||
body: JSON.stringify(payload),
|
||||
})
|
||||
|
||||
if (response.ok) {
|
||||
const data = await response.json()
|
||||
return reportMapper.toUi(normalizeItem(data))
|
||||
}
|
||||
|
||||
lastResponse = response
|
||||
|
||||
if (response.status !== 400) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
const data = await response.json()
|
||||
return reportMapper.toUi(normalizeItem(data))
|
||||
throw new Error(await getResponseError(lastResponse, 'Falha ao criar relatório médico.'))
|
||||
},
|
||||
|
||||
async update(id, uiData) {
|
||||
@@ -68,3 +78,38 @@ export const reportRepository = {
|
||||
return reportMapper.toUi(normalizeItem(data))
|
||||
},
|
||||
}
|
||||
|
||||
function buildCreatePayloads(payload) {
|
||||
return uniquePayloads([
|
||||
omitFields(payload, ['order_number', 'created_by', 'updated_by']),
|
||||
omitFields(payload, ['order_number', 'created_by', 'updated_by', 'content_json']),
|
||||
omitFields(payload, ['order_number', 'created_by', 'updated_by', 'content_json', 'hide_date', 'hide_signature', 'due_at']),
|
||||
pickFields(payload, ['patient_id', 'status', 'exam', 'requested_by', 'cid_code', 'diagnosis', 'conclusion', 'content_html']),
|
||||
payload,
|
||||
])
|
||||
}
|
||||
|
||||
function omitFields(payload, fields) {
|
||||
return Object.fromEntries(
|
||||
Object.entries(payload).filter(([field]) => !fields.includes(field)),
|
||||
)
|
||||
}
|
||||
|
||||
function pickFields(payload, fields) {
|
||||
return Object.fromEntries(
|
||||
fields
|
||||
.filter((field) => payload[field] !== undefined)
|
||||
.map((field) => [field, payload[field]]),
|
||||
)
|
||||
}
|
||||
|
||||
function uniquePayloads(payloads) {
|
||||
const seen = new Set()
|
||||
|
||||
return payloads.filter((payload) => {
|
||||
const signature = JSON.stringify(payload)
|
||||
if (seen.has(signature)) return false
|
||||
seen.add(signature)
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user