Skip to content

feat: order robots according to updatedAt #572

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
May 6, 2025
2 changes: 1 addition & 1 deletion server/src/routes/storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,7 @@ router.post('/recordings/:id/duplicate', requireSignIn, async (req: Authenticate
return step;
});

const currentTimestamp = new Date().toISOString();
const currentTimestamp = new Date().toLocaleString();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Timestamp format change may cause inconsistency issues.

Changing from toISOString() to toLocaleString() aligns with the frontend changes that use updatedAt for sorting recordings, but introduces potential issues:

  1. toLocaleString() output varies by server locale, which may cause inconsistent display and sorting
  2. The codebase uses mixed timestamp formats (analytics events use ISO format while UI-facing values use locale format)
  3. String-based sorting of locale-formatted dates may not yield chronologically correct results

🏁 Script executed:

#!/bin/bash
# Check timestamp format consistency across the codebase
echo "Checking timestamp format usage patterns:"
echo "==========================================="
echo "ISO format usage:"
rg "toISOString\(\)" -A 2 -B 2 --no-heading

echo "\nLocale format usage:"
rg "toLocaleString\(\)" -A 2 -B 2 --no-heading

# Check if there's any date parsing logic in the frontend RecordingsTable component
echo "\nRelated date parsing in RecordingsTable component:"
rg -t tsx "updatedAt|createdAt|parse|sort" --include="RecordingsTable.tsx" -A 3 -B 3 --no-heading

Length of output: 16814


🏁 Script executed:

#!/bin/bash
set -e

echo "Locating RecordingsTable.tsx..."
fd --hidden --full-path --extension tsx RecordingsTable.tsx

echo -e "\nSearching for updatedAt usage in RecordingsTable.tsx..."
rg -n "updatedAt" -A3 -B3 -g "*RecordingsTable.tsx"

echo -e "\nSearching for sorting logic in RecordingsTable.tsx..."
rg -n "sort" -A3 -B3 -g "*RecordingsTable.tsx"

echo -e "\nSearching for any Date parsing or conversion in RecordingsTable.tsx..."
rg -n "new Date" -A3 -B3 -g "*RecordingsTable.tsx"

Length of output: 3148


🏁 Script executed:

#!/bin/bash
set -e

echo "Inspecting usage of currentTimestamp in storage.ts..."
rg -n "currentTimestamp" -A5 -B5 server/src/routes/storage.ts

Length of output: 859


Standardize timestamp formatting to ISO for storage and display

The switch to toLocaleString() does avoid string-based sorting (we’re parsing to Date and sorting by getTime()), but it still introduces two risks:

  • Locale-dependent output on the server can vary between environments and may break parsing
  • We now mix ISO (toISOString()) and locale strings across the codebase

To avoid subtle bugs and parsing edge cases, store timestamps in ISO everywhere (including here) and format them for display only on the client. For example, in server/src/routes/storage.ts (lines 408–419):

-   const currentTimestamp = new Date().toLocaleString();
+   const currentTimestamp = new Date().toISOString();

    const newRobot = await Robot.create({
      id: uuid(),
      userId: originalRobot.userId,
      recording_meta: {
        …,
-       createdAt: currentTimestamp,
-       updatedAt: currentTimestamp,
+       createdAt: currentTimestamp, // ISO format
+       updatedAt: currentTimestamp,
      },
      …
    });

– Revert or remove other uses of toLocaleString() for persisted timestamps
– Use client-side code (e.g. RecordingsTable) to format or localize ISO dates for display

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const currentTimestamp = new Date().toLocaleString();
const currentTimestamp = new Date().toISOString();
const newRobot = await Robot.create({
id: uuid(),
userId: originalRobot.userId,
recording_meta: {
,
createdAt: currentTimestamp, // ISO format
updatedAt: currentTimestamp,
},
});


const newRobot = await Robot.create({
id: uuid(),
Expand Down
2 changes: 1 addition & 1 deletion src/components/robot/RecordingsTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -749,4 +749,4 @@ const modalStyle = {
height: 'fit-content',
display: 'block',
padding: '20px',
};
};