update: CRM customers, orders, device detail, and status system changes
- CustomerList, CustomerForm, CustomerDetail: various updates - Orders: removed OrderDetail and OrderForm, updated OrderList and index - DeviceDetail: updates - index.css: added new styles - CRM_STATUS_SYSTEM_PLAN.md: new planning document - Added customer-status assets and CustomerDetail subfolder Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -368,11 +368,11 @@ function LocationModal({ open, onClose, onSaved, device, coords, id }) {
|
||||
setSaving(true);
|
||||
const latNum = parseFloat(lat);
|
||||
const lngNum = parseFloat(lng);
|
||||
const coordStr = (!isNaN(latNum) && !isNaN(lngNum))
|
||||
? `${Math.abs(latNum).toFixed(7)}° ${latNum >= 0 ? "N" : "S"}, ${Math.abs(lngNum).toFixed(7)}° ${lngNum >= 0 ? "E" : "W"}`
|
||||
: device?.device_location_coordinates || "";
|
||||
const coordPayload = (!isNaN(latNum) && !isNaN(lngNum))
|
||||
? { lat: latNum, lng: lngNum }
|
||||
: (device?.device_location_coordinates || null);
|
||||
try {
|
||||
await api.put(`/devices/${id}`, { device_location: locName, device_location_coordinates: coordStr });
|
||||
await api.put(`/devices/${id}`, { device_location: locName, device_location_coordinates: coordPayload });
|
||||
await onSaved();
|
||||
onClose();
|
||||
} finally { setSaving(false); }
|
||||
@@ -1408,11 +1408,21 @@ function playbackPlaceholderForId(seedValue) {
|
||||
|
||||
function parseCoordinates(coordStr) {
|
||||
if (!coordStr) return null;
|
||||
// Support plain { lat, lng } objects (from API returning GeoPoint as dict)
|
||||
if (typeof coordStr === "object" && coordStr !== null) {
|
||||
const lat = parseFloat(coordStr.lat ?? coordStr.latitude);
|
||||
const lng = parseFloat(coordStr.lng ?? coordStr.longitude);
|
||||
if (!isNaN(lat) && !isNaN(lng)) return { lat, lng };
|
||||
return null;
|
||||
}
|
||||
const numbers = coordStr.match(/-?\d+(?:\.\d+)?/g);
|
||||
if (numbers && numbers.length >= 2) {
|
||||
const lat = parseFloat(numbers[0]);
|
||||
const lng = parseFloat(numbers[1]);
|
||||
let lat = parseFloat(numbers[0]);
|
||||
let lng = parseFloat(numbers[1]);
|
||||
if (!isNaN(lat) && !isNaN(lng)) {
|
||||
// Restore sign from direction letters (legacy string format)
|
||||
if (/\bS\b/.test(coordStr)) lat = -Math.abs(lat);
|
||||
if (/\bW\b/.test(coordStr)) lng = -Math.abs(lng);
|
||||
return { lat, lng };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user