allow decimal in roles leaderboard
This commit is contained in:
parent
db593f9a6c
commit
e084690999
|
|
@ -323,12 +323,26 @@ export function MappingField({ field, control }) {
|
|||
/>
|
||||
</td>
|
||||
<td>
|
||||
<Form.Control
|
||||
type="number"
|
||||
step="any"
|
||||
value={row.weight ?? 1}
|
||||
onChange={(e) => rhf.onChange(patchRow(rows, index, { weight: e.target.value }))}
|
||||
/>
|
||||
{field.decimalWeight ? (
|
||||
<Form.Control
|
||||
type="text"
|
||||
inputMode="decimal"
|
||||
value={row.weight ?? 1}
|
||||
onChange={(e) => {
|
||||
const next = e.target.value;
|
||||
if (next === '' || /^\d*\.?\d*$/.test(next)) {
|
||||
rhf.onChange(patchRow(rows, index, { weight: next }));
|
||||
}
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
<Form.Control
|
||||
type="number"
|
||||
step="any"
|
||||
value={row.weight ?? 1}
|
||||
onChange={(e) => rhf.onChange(patchRow(rows, index, { weight: e.target.value }))}
|
||||
/>
|
||||
)}
|
||||
</td>
|
||||
<td>
|
||||
<Form.Select
|
||||
|
|
|
|||
|
|
@ -46,6 +46,13 @@ function bySortOrder(left, right) {
|
|||
return (Number(left?.sort_order) || 0) - (Number(right?.sort_order) || 0);
|
||||
}
|
||||
|
||||
function toApiDate(value) {
|
||||
const text = String(value || '').slice(0, 10);
|
||||
const parts = text.split('-');
|
||||
if (parts.length !== 3 || parts[0].length !== 4) return value || '';
|
||||
return `${parts[1]}/${parts[2]}/${parts[0]}`;
|
||||
}
|
||||
|
||||
function itemsToMap(items) {
|
||||
const values = {};
|
||||
(items || []).forEach((item) => {
|
||||
|
|
@ -141,6 +148,7 @@ const leaderboards = {
|
|||
title: 'Choose Metric',
|
||||
type: 'mapping',
|
||||
variant: 'grouped',
|
||||
decimalWeight: true,
|
||||
required: true,
|
||||
metrics,
|
||||
fullwidth: true,
|
||||
|
|
@ -222,6 +230,8 @@ const leaderboards = {
|
|||
const leaderboardType = payload.leaderboard_roles_type === 'team' ? 'team' : 'roles';
|
||||
payload.leaderboard_roles_type = leaderboardType;
|
||||
payload.sort_order = payload.sort_order === '' || payload.sort_order == null ? 0 : Number(payload.sort_order);
|
||||
payload.validity_start = toApiDate(payload.validity_start);
|
||||
payload.validity_end = toApiDate(payload.validity_end);
|
||||
payload.visible_roles = asArray(payload.visible_roles);
|
||||
payload.reporting_roles = asArray(payload.reporting_roles);
|
||||
payload.intervals = asArray(payload.intervals);
|
||||
|
|
@ -250,7 +260,12 @@ const leaderboards = {
|
|||
metric: row.metric,
|
||||
display: row.display || '',
|
||||
sort_order: row.sort_order === '' || row.sort_order == null ? 0 : Number(row.sort_order),
|
||||
weight: row.weight === '' || row.weight == null ? '1' : String(row.weight),
|
||||
weight: (() => {
|
||||
const text = row.weight == null ? '' : String(row.weight).trim();
|
||||
const num = Number(text);
|
||||
if (text === '' || !Number.isFinite(num) || num <= 0) return '1';
|
||||
return text.endsWith('.') ? String(num) : text;
|
||||
})(),
|
||||
}));
|
||||
payload.combined_metrics = stringifyCombinedMetrics(
|
||||
(Array.isArray(payload.combined_metrics) ? payload.combined_metrics : []).filter((row) => row?.type),
|
||||
|
|
|
|||
Loading…
Reference in New Issue