Conversation
|
Congratulations on your new Raycast extension! 🚀 Due to our current reduced availability, the initial review may take up to 10-15 business days Once the PR is approved and merged, the extension will be available on our Store. |
pernielsentikaer
left a comment
There was a problem hiding this comment.
Hi 👋
Thanks for your contribution 💪
I have now tested your extension, and I have some feedback ready for you
I'm looking forward to testing this extension again 🔥
Request a new review when you are ready. Feel free to contact me here or at Slack if you have any questions.
extensions/doge-tracker/.eslintrc.js
Outdated
| @@ -0,0 +1,11 @@ | |||
| module.exports = { | |||
There was a problem hiding this comment.
Can we skip this file
|
Do you also have something @greptileai |
There was a problem hiding this comment.
PR Summary
Added a new DOGE Tracker extension that allows users to monitor cost-saving initiatives from the Department of Government Efficiency via Firebase integration.
- The extension displays initiatives in a searchable list with completion status and formatted currency values
- Implementation includes proper Firebase configuration and data fetching in
src/firebase.ts - Currency formatting utilities in
src/utils.tsprovide readable display of large financial values - The main view in
src/index.tsxupdates command metadata with total savings statistics - Consider adding error handling for the API call in
getInitiatives()function to handle potential network failures
💡 (1/5) You can manually trigger the bot by mentioning @greptileai in a comment!
11 file(s) reviewed, 7 comment(s)
Edit PR Review Bot Settings | Greptile
| const initiatives = Object.values(data) | ||
| .map((initiative) => ({ | ||
| ...initiative, | ||
| value: parseFloat(initiative.value), |
There was a problem hiding this comment.
style: parseFloat could return NaN if the value isn't a valid number. Consider adding a fallback or validation.
| async function fetchData() { | ||
| const data = await getInitiatives(); | ||
| setInitiatives(data); |
There was a problem hiding this comment.
logic: No error handling for the API call. If getInitiatives() fails, the error will be unhandled and the UI will remain in loading state indefinitely.
| useEffect(() => { | ||
| async function fetchData() { | ||
| const data = await getInitiatives(); | ||
| setInitiatives(data); | ||
| setIsLoading(false); | ||
|
|
||
| // Update command subtitle with stats | ||
| const totalValue = data.reduce((sum, init) => sum + init.value, 0); | ||
| const completedCount = data.filter((i) => i.progress).length; | ||
| const subtitle = `Total Savings: ${formatCompactCurrency(totalValue)} Total Initiatives: ${completedCount}`; | ||
| await updateCommandMetadata({ subtitle }); | ||
| } | ||
| fetchData(); | ||
| }, []); |
There was a problem hiding this comment.
style: Consider wrapping the API call in try/catch and using showFailureToast from @raycast/utils to handle potential network errors.
| // Update command subtitle with stats | ||
| const totalValue = data.reduce((sum, init) => sum + init.value, 0); | ||
| const completedCount = data.filter((i) => i.progress).length; | ||
| const subtitle = `Total Savings: ${formatCompactCurrency(totalValue)} Total Initiatives: ${completedCount}`; |
There was a problem hiding this comment.
style: Multiple spaces used for formatting the subtitle string. Consider using template literals with newlines or a more structured approach for better maintainability.
Co-authored-by: Per Nielsen Tikær <per@raycast.com>
Co-authored-by: Per Nielsen Tikær <per@raycast.com>
Co-authored-by: Per Nielsen Tikær <per@raycast.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
pernielsentikaer
left a comment
There was a problem hiding this comment.
Hi 👋
Looks good to me, approved 🔥
|
Published to the Raycast Store: |
|
🎉 🎉 🎉 We've rewarded your Raycast account with some credits. You will soon be able to exchange them for some swag. |
Description
This is an extension for the DOGE Tracker. It allows users to monitor cumulative savings and search specific initiatives.
Screencast
Checklist
npm run buildand tested this distribution build in Raycastassetsfolder are used by the extension itselfREADMEare placed outside of themetadatafolder