feat(export): subject/parameter members + dimension dispatcher
This commit is contained in:
@@ -102,6 +102,42 @@ export function buildStatusIndex(statuses) {
|
||||
return index;
|
||||
}
|
||||
|
||||
export function listSubjectMembers(animals, groupField) {
|
||||
const list = [...(animals ?? [])];
|
||||
const nameCounts = new Map();
|
||||
for (const a of list) {
|
||||
const n = a?.animal_name ?? '';
|
||||
nameCounts.set(n, (nameCounts.get(n) ?? 0) + 1);
|
||||
}
|
||||
const members = list.map((a) => {
|
||||
const name = a?.animal_name ?? '';
|
||||
const label = nameCounts.get(name) > 1 ? `${name} (${a?.animal_id_string ?? ''})` : name;
|
||||
return { id: a.id, label, animalId: a.id, group: subjectGroupValue(a, groupField) };
|
||||
});
|
||||
const grouped = !!groupField && groupField !== '__none__';
|
||||
members.sort((x, y) => {
|
||||
if (grouped) {
|
||||
const g = String(x.group ?? '').localeCompare(String(y.group ?? ''));
|
||||
if (g !== 0) return g;
|
||||
}
|
||||
return String(x.label).localeCompare(String(y.label));
|
||||
});
|
||||
return members;
|
||||
}
|
||||
|
||||
export function listParameterMembers(dailyTemplate, statuses) {
|
||||
return listExportableParams(dailyTemplate, statuses).map((p) => ({
|
||||
id: p.id, label: p.label, param: p, group: p.group,
|
||||
}));
|
||||
}
|
||||
|
||||
export function listDimensionMembers(dim, { statuses, animals, dailyTemplate, groupField }) {
|
||||
if (dim === 'date') return listDateMembers(statuses);
|
||||
if (dim === 'subject') return listSubjectMembers(animals, groupField);
|
||||
if (dim === 'parameter') return listParameterMembers(dailyTemplate, statuses);
|
||||
return [];
|
||||
}
|
||||
|
||||
// A cell has a value unless it is null, undefined, or the empty string.
|
||||
// (0 and false are real values.)
|
||||
function hasValue(v) {
|
||||
|
||||
Reference in New Issue
Block a user