fix: clean action log — no UUID/ID duplicates, smart expanded row
This commit is contained in:
parent
a5b9dc1153
commit
bb439a4d93
|
|
@ -301,24 +301,31 @@ export const ActionLogPanel = ({ orderGroupId = null }) => {
|
|||
</td>
|
||||
)}
|
||||
</tr>
|
||||
{expandedId === log.id && (
|
||||
{expandedId === log.id && (() => {
|
||||
const hasChange = log.old_value && log.new_value && log.old_value !== log.new_value;
|
||||
const isDriverAction = log.action === "driver_assigned" || log.action === "driver_removed";
|
||||
const detailEntries = (log.details && typeof log.details === "object")
|
||||
? Object.entries(log.details).filter(([k]) => k !== "source" && k !== "driver_name" && k !== "driver_id")
|
||||
: [];
|
||||
return (
|
||||
<tr className="bg-[var(--color-surface-strong)]">
|
||||
<td colSpan={orderGroupId ? 4 : 5} className="py-2 px-3">
|
||||
<div className="space-y-1 text-xs">
|
||||
{log.old_value && (
|
||||
<div><span className="text-[var(--color-text-muted)]">Было:</span> {resolveName(log.old_value)}</div>
|
||||
{hasChange && !isDriverAction && (
|
||||
<div><span className="text-[var(--color-text-muted)]">Было:</span> {resolveName(log.old_value)} → <span className="text-[var(--color-text-muted)]">Стало:</span> {resolveName(log.new_value)}</div>
|
||||
)}
|
||||
{log.new_value && (
|
||||
<div><span className="text-[var(--color-text-muted)]">Стало:</span> {resolveName(log.new_value)}</div>
|
||||
{isDriverAction && log.details?.driver_name && !log.old_value && (
|
||||
<div><span className="text-[var(--color-text-muted)]">Водитель:</span> {log.details.driver_name}</div>
|
||||
)}
|
||||
{log.details && typeof log.details === "object" && (
|
||||
{isDriverAction && log.old_value && (
|
||||
<div><span className="text-[var(--color-text-muted)]">Было:</span> {resolveName(log.old_value)} → <span className="text-[var(--color-text-muted)]">Стало:</span> {log.details?.driver_name || resolveName(log.new_value)}</div>
|
||||
)}
|
||||
{detailEntries.length > 0 && (
|
||||
<div className="space-y-0.5">
|
||||
{Object.entries(log.details)
|
||||
.filter(([k]) => k !== "source")
|
||||
.map(([k, v]) => (
|
||||
{detailEntries.map(([k, v]) => (
|
||||
<div key={k}>
|
||||
<span className="text-[var(--color-text-muted)]">
|
||||
{{driver_name: "Водитель", driver_id: "ID", problem_type: "Тип проблемы", delivery_date_source: "Источник даты"}[k] || k}:
|
||||
{{problem_type: "Тип проблемы", delivery_date_source: "Источник даты"}[k] || k}:
|
||||
</span> {UUID_RE.test(String(v)) ? resolveName(String(v)) : String(v)}
|
||||
</div>
|
||||
))}
|
||||
|
|
@ -336,7 +343,8 @@ export const ActionLogPanel = ({ orderGroupId = null }) => {
|
|||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
)}
|
||||
);
|
||||
})()}
|
||||
</React.Fragment>
|
||||
))}
|
||||
</tbody>
|
||||
|
|
|
|||
|
|
@ -274,7 +274,7 @@ export const assignDriverToOrderGroup = async ({
|
|||
const driverName = data?.assigned_driver?.name || driverId || "—";
|
||||
const oldDriverName = currentGroup?.assigned_driver?.name || currentGroup?.assigned_driver_id || "";
|
||||
const logPayload = driverId
|
||||
? { orderGroupId, action: "driver_assigned", oldValue: oldDriverName || undefined, newValue: driverName, details: { driver_id: driverId, driver_name: driverName } }
|
||||
? { orderGroupId, action: "driver_assigned", oldValue: oldDriverName || undefined, newValue: driverName, details: { driver_name: driverName } }
|
||||
: { orderGroupId, action: "driver_removed", oldValue: oldDriverName, newValue: "Снят", details: { driver_name: oldDriverName } };
|
||||
await logAction(logPayload).catch(() => {});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue