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>
|
||||||
<td>
|
<td>
|
||||||
<Form.Control
|
{field.decimalWeight ? (
|
||||||
type="number"
|
<Form.Control
|
||||||
step="any"
|
type="text"
|
||||||
value={row.weight ?? 1}
|
inputMode="decimal"
|
||||||
onChange={(e) => rhf.onChange(patchRow(rows, index, { weight: e.target.value }))}
|
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>
|
||||||
<td>
|
<td>
|
||||||
<Form.Select
|
<Form.Select
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,13 @@ function bySortOrder(left, right) {
|
||||||
return (Number(left?.sort_order) || 0) - (Number(right?.sort_order) || 0);
|
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) {
|
function itemsToMap(items) {
|
||||||
const values = {};
|
const values = {};
|
||||||
(items || []).forEach((item) => {
|
(items || []).forEach((item) => {
|
||||||
|
|
@ -141,6 +148,7 @@ const leaderboards = {
|
||||||
title: 'Choose Metric',
|
title: 'Choose Metric',
|
||||||
type: 'mapping',
|
type: 'mapping',
|
||||||
variant: 'grouped',
|
variant: 'grouped',
|
||||||
|
decimalWeight: true,
|
||||||
required: true,
|
required: true,
|
||||||
metrics,
|
metrics,
|
||||||
fullwidth: true,
|
fullwidth: true,
|
||||||
|
|
@ -222,6 +230,8 @@ const leaderboards = {
|
||||||
const leaderboardType = payload.leaderboard_roles_type === 'team' ? 'team' : 'roles';
|
const leaderboardType = payload.leaderboard_roles_type === 'team' ? 'team' : 'roles';
|
||||||
payload.leaderboard_roles_type = leaderboardType;
|
payload.leaderboard_roles_type = leaderboardType;
|
||||||
payload.sort_order = payload.sort_order === '' || payload.sort_order == null ? 0 : Number(payload.sort_order);
|
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.visible_roles = asArray(payload.visible_roles);
|
||||||
payload.reporting_roles = asArray(payload.reporting_roles);
|
payload.reporting_roles = asArray(payload.reporting_roles);
|
||||||
payload.intervals = asArray(payload.intervals);
|
payload.intervals = asArray(payload.intervals);
|
||||||
|
|
@ -250,7 +260,12 @@ const leaderboards = {
|
||||||
metric: row.metric,
|
metric: row.metric,
|
||||||
display: row.display || '',
|
display: row.display || '',
|
||||||
sort_order: row.sort_order === '' || row.sort_order == null ? 0 : Number(row.sort_order),
|
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(
|
payload.combined_metrics = stringifyCombinedMetrics(
|
||||||
(Array.isArray(payload.combined_metrics) ? payload.combined_metrics : []).filter((row) => row?.type),
|
(Array.isArray(payload.combined_metrics) ? payload.combined_metrics : []).filter((row) => row?.type),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue