build: migrate to Dioxus 0.6 #61

Merged
matous-volf merged 3 commits from build/dioxus-0.6-migration into main 2024-12-29 14:03:04 +00:00
matous-volf commented 2024-12-12 20:02:27 +00:00 (Migrated from github.com)

Summary by CodeRabbit

  • New Features

    • Added Czech and English localization support with new language files.
    • Introduced new features for desktop and mobile in the application.
  • Bug Fixes

    • Improved internationalization handling across various components.
  • Documentation

    • Updated dependency versions and configurations in relevant files.
  • Chores

    • Removed outdated localization files and simplified logging setup.
    • Updated Docker configuration to include the /dist/ directory during builds.
    • Removed volume mapping for index.html in development configuration.
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added Czech and English localization support with new language files. - Introduced new features for `desktop` and `mobile` in the application. - **Bug Fixes** - Improved internationalization handling across various components. - **Documentation** - Updated dependency versions and configurations in relevant files. - **Chores** - Removed outdated localization files and simplified logging setup. - Updated Docker configuration to include the `/dist/` directory during builds. - Removed volume mapping for `index.html` in development configuration. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
coderabbitai[bot] commented 2024-12-12 20:02:35 +00:00 (Migrated from github.com)

Walkthrough

This pull request includes a series of updates across multiple files, primarily focusing on dependency updates, internationalization enhancements, and modifications to configuration files. Key changes involve updating the .idea/dataSources.local.xml for versioning, modifying Cargo.toml to include new dependencies and features, and altering Dockerfiles for updated base images and health check commands. Additionally, several components have been refined to improve localization support, including the introduction of new localization files and the removal of outdated configurations.

Changes

File Path Change Summary
.idea/dataSources.local.xml Updated created-in attribute from RR-242.21829.114 to RR-243.21565.245.
Cargo.toml Updated dependencies: dioxus to 0.6.0, dioxus-query to 0.6.0, added dioxus-i18n at 0.3.0, async-std at 1.12.0, diesel_migrations at 2.2.0, feruca at 0.10.0. Updated validator and unic-langid-impl with new features. Expanded features section and added new profiles.
Dioxus.toml Removed all CSS styles from the style array in [web.resource].
assets/styles/fonts.css Updated src paths for @font-face declarations to reflect new directory structure.
docker-compose-dev.yml Removed volume mapping for index.html in the app service.
docker/dev/app/Dockerfile Updated base image to rust:1.83-bookworm, added wasm32-unknown-unknown target, updated HEALTHCHECK command to include an additional header.
docker/dev/app/supervisord.conf Updated command for dx program to specify address and port.
docker/prod/app/Dockerfile Updated base image to rust:1.83-bookworm, modified COPY command for build output, updated health check command, added environment variables IP and PORT, changed startup command.
index.html Deleted file that served as the main entry point for the web application.
src/components/app.rs Added constants for asset files, updated internationalization initialization logic to use a closure for locale configuration.
src/components/navigation.rs Changed rendering logic to return VNode::empty() instead of None when expanded state is false.
src/components/pages/category_calendar_page.rs Updated internationalization handling to use i18n and t from dioxus_i18n, modified date format retrieval.
src/components/pages/category_today_page.rs Replaced translate! macro with t! from dioxus_i18n, updated date formatting logic.
src/components/subtasks_form.rs Updated onchange event handler to specify event type as Event<FormData>.
src/components/task_form.rs Replaced use_i18 with t for internationalization, refined category handling logic.
src/components/task_list.rs Adjusted layout and styling of task items, updated event handler to specify event type as Event<MouseData>.
src/components/task_list_item.rs Replaced use_i18 with i18n for localization, updated translation calls.
src/internationalization/cs_cz.ftl Introduced new file for Czech localization with key-value pairs for translations and date formats.
src/internationalization/cs_cz.json Deleted file containing Czech localization data.
src/internationalization/en_us.ftl Introduced new file for English (US) localization with key-value pairs for translations and date formats.
src/internationalization/en_us.json Deleted file containing English (US) localization data.
src/internationalization/mod.rs Removed unused imports and constants related to language handling, including the get_languages function.
src/main.rs Removed dioxus_logger crate usage, simplified logging setup, and streamlined application launch process.
src/server/internationalization.rs Minor modification to remove a blank line in get_language_identifier function.
.dockerignore Removed line referencing the /dist/ directory, allowing its contents to be included in the Docker image.
  • #39: The changes in this PR involve modifications to the TaskForm component, which includes the addition of a delete functionality for tasks. This is related to the main PR as both involve updates to configuration files that may affect how tasks and their associated data are managed.
  • #40: This PR introduces a new SubtasksForm component for managing subtasks, which is directly related to the main PR's focus on task management and configuration updates.
  • #43: This PR enhances internationalization features, which may relate to the main PR's updates in configuration files that could affect how data sources are localized or managed.
  • #46: The deployment changes in this PR could impact the overall application structure, including how the main PR's changes to the .idea/dataSources.local.xml file are utilized in a production environment.

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.
<!-- This is an auto-generated comment: summarize by coderabbit.ai --> <!-- walkthrough_start --> ## Walkthrough This pull request includes a series of updates across multiple files, primarily focusing on dependency updates, internationalization enhancements, and modifications to configuration files. Key changes involve updating the `.idea/dataSources.local.xml` for versioning, modifying `Cargo.toml` to include new dependencies and features, and altering Dockerfiles for updated base images and health check commands. Additionally, several components have been refined to improve localization support, including the introduction of new localization files and the removal of outdated configurations. ## Changes | File Path | Change Summary | |------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `.idea/dataSources.local.xml` | Updated `created-in` attribute from `RR-242.21829.114` to `RR-243.21565.245`. | | `Cargo.toml` | Updated dependencies: `dioxus` to `0.6.0`, `dioxus-query` to `0.6.0`, added `dioxus-i18n` at `0.3.0`, `async-std` at `1.12.0`, `diesel_migrations` at `2.2.0`, `feruca` at `0.10.0`. Updated `validator` and `unic-langid-impl` with new features. Expanded features section and added new profiles. | | `Dioxus.toml` | Removed all CSS styles from the `style` array in `[web.resource]`. | | `assets/styles/fonts.css` | Updated `src` paths for `@font-face` declarations to reflect new directory structure. | | `docker-compose-dev.yml` | Removed volume mapping for `index.html` in the `app` service. | | `docker/dev/app/Dockerfile` | Updated base image to `rust:1.83-bookworm`, added `wasm32-unknown-unknown` target, updated `HEALTHCHECK` command to include an additional header. | | `docker/dev/app/supervisord.conf` | Updated command for `dx` program to specify address and port. | | `docker/prod/app/Dockerfile` | Updated base image to `rust:1.83-bookworm`, modified `COPY` command for build output, updated health check command, added environment variables `IP` and `PORT`, changed startup command. | | `index.html` | Deleted file that served as the main entry point for the web application. | | `src/components/app.rs` | Added constants for asset files, updated internationalization initialization logic to use a closure for locale configuration. | | `src/components/navigation.rs` | Changed rendering logic to return `VNode::empty()` instead of `None` when `expanded` state is false. | | `src/components/pages/category_calendar_page.rs` | Updated internationalization handling to use `i18n` and `t` from `dioxus_i18n`, modified date format retrieval. | | `src/components/pages/category_today_page.rs` | Replaced `translate!` macro with `t!` from `dioxus_i18n`, updated date formatting logic. | | `src/components/subtasks_form.rs` | Updated `onchange` event handler to specify event type as `Event<FormData>`. | | `src/components/task_form.rs` | Replaced `use_i18` with `t` for internationalization, refined category handling logic. | | `src/components/task_list.rs` | Adjusted layout and styling of task items, updated event handler to specify event type as `Event<MouseData>`. | | `src/components/task_list_item.rs` | Replaced `use_i18` with `i18n` for localization, updated translation calls. | | `src/internationalization/cs_cz.ftl` | Introduced new file for Czech localization with key-value pairs for translations and date formats. | | `src/internationalization/cs_cz.json` | Deleted file containing Czech localization data. | | `src/internationalization/en_us.ftl` | Introduced new file for English (US) localization with key-value pairs for translations and date formats. | | `src/internationalization/en_us.json` | Deleted file containing English (US) localization data. | | `src/internationalization/mod.rs` | Removed unused imports and constants related to language handling, including the `get_languages` function. | | `src/main.rs` | Removed `dioxus_logger` crate usage, simplified logging setup, and streamlined application launch process. | | `src/server/internationalization.rs` | Minor modification to remove a blank line in `get_language_identifier` function. | | `.dockerignore` | Removed line referencing the `/dist/` directory, allowing its contents to be included in the Docker image. | ## Possibly related PRs - **#39**: The changes in this PR involve modifications to the `TaskForm` component, which includes the addition of a delete functionality for tasks. This is related to the main PR as both involve updates to configuration files that may affect how tasks and their associated data are managed. - **#40**: This PR introduces a new `SubtasksForm` component for managing subtasks, which is directly related to the main PR's focus on task management and configuration updates. - **#43**: This PR enhances internationalization features, which may relate to the main PR's updates in configuration files that could affect how data sources are localized or managed. - **#46**: The deployment changes in this PR could impact the overall application structure, including how the main PR's changes to the `.idea/dataSources.local.xml` file are utilized in a production environment. <!-- walkthrough_end --> <!-- internal state start --> <!-- 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= --> <!-- internal state end --> <!-- tips_start --> --- Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? <details> <summary>❤️ Share</summary> - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code) </details> <details> <summary>🪧 Tips</summary> ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit <commit_id>, please review it.` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (Invoked using PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR. ([Beta](https://docs.coderabbit.ai/early-access#beta)) - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. ### Other keywords and placeholders - Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. - Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description. - Add `@coderabbitai` anywhere in the PR title to generate the title automatically. ### CodeRabbit Configuration File (`.coderabbit.yaml`) - You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository. - Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information. - If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json` ### Documentation and Community - Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit. - Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements. </details> <!-- tips_end -->
coderabbitai[bot] (Migrated from github.com) requested changes 2024-12-12 20:10:19 +00:00
coderabbitai[bot] (Migrated from github.com) left a comment

Actionable comments posted: 6

🧹 Outside diff range comments (2)
src/server/internationalization.rs (1)

Line range hint 8-14: Consider enhancing error messages for better debugging.

The function logic is correct, but the error messages could be more descriptive for debugging purposes.

Consider this enhancement:

-    dotenv().expect("Could not load environment variables from the .env file.");
+    dotenv().expect("Failed to load .env file. Please ensure it exists and is readable.");

     Ok(env::var("LANGUAGE_CODE")
-        .expect("The environment variable LANGUAGE_CODE must be set.")
+        .expect("LANGUAGE_CODE environment variable is not set. Please set it to a valid language code (e.g., 'en-US').")
         .parse::<LanguageIdentifier>()?)
src/components/task_form.rs (1)

Line range hint 198-200: Consider implementing the loading indicator

The TODO comment indicates a missing loading indicator for the projects query, which could impact user experience during data fetching.

Would you like me to help implement a loading indicator component or create an issue to track this task?

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7f4990ef82 and 8d3f858f0b.

Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (24)
  • .idea/dataSources.local.xml (1 hunks)
  • Cargo.toml (1 hunks)
  • Dioxus.toml (1 hunks)
  • assets/styles/fonts.css (1 hunks)
  • docker-compose-dev.yml (0 hunks)
  • docker/dev/app/Dockerfile (2 hunks)
  • docker/dev/app/supervisord.conf (1 hunks)
  • docker/prod/app/Dockerfile (2 hunks)
  • index.html (0 hunks)
  • src/components/app.rs (1 hunks)
  • src/components/navigation.rs (1 hunks)
  • src/components/pages/category_calendar_page.rs (5 hunks)
  • src/components/pages/category_today_page.rs (6 hunks)
  • src/components/subtasks_form.rs (1 hunks)
  • src/components/task_form.rs (3 hunks)
  • src/components/task_list.rs (4 hunks)
  • src/components/task_list_item.rs (3 hunks)
  • src/internationalization/cs_cz.ftl (1 hunks)
  • src/internationalization/cs_cz.json (0 hunks)
  • src/internationalization/en_us.ftl (1 hunks)
  • src/internationalization/en_us.json (0 hunks)
  • src/internationalization/mod.rs (0 hunks)
  • src/main.rs (1 hunks)
  • src/server/internationalization.rs (1 hunks)
💤 Files with no reviewable changes (5)
  • docker-compose-dev.yml
  • src/internationalization/cs_cz.json
  • src/internationalization/en_us.json
  • index.html
  • src/internationalization/mod.rs
🔇 Additional comments (31)
src/internationalization/cs_cz.ftl (1)

9-12: LGTM! Date formats follow Czech conventions correctly.

The date formats properly use:

  • Day before month (Czech standard)
  • No leading zeros with %-d
  • Full month names with %B
  • Full weekday names with %A
src/internationalization/en_us.ftl (2)

9-12: LGTM! Date formats follow US conventions correctly.

The date formats properly use:

  • Month before day (US standard)
  • Correct comma placement
  • Full month and weekday names

14-14: Verify AM/PM format across platforms.

The %P format (lowercase am/pm) is used, but some systems might handle it differently. Consider testing on various platforms or using %p (uppercase AM/PM) for consistency.

docker/dev/app/supervisord.conf (1)

17-17: LGTM! Explicit host and port binding is good practice.

The updated command explicitly binds to all interfaces (0.0.0.0) and port 8000, which is necessary for proper container accessibility.

Let's verify the port configuration is consistent across Docker files:

Verification successful

Port configuration is consistent across Docker files

The port 8000 is consistently configured in both files:

  • supervisord.conf: Used in the dx serve command with --port 8000
  • Dockerfile: Referenced in the health check URL http://localhost:8000
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for port 8000 configuration consistency
rg -l "8000" docker/

Length of output: 78


Script:

#!/bin/bash
# Check the content of files containing port 8000 to verify consistency
echo "=== docker/dev/app/Dockerfile ==="
rg "8000" docker/dev/app/Dockerfile -A 2 -B 2

echo -e "\n=== docker/dev/app/supervisord.conf ==="
rg "8000" docker/dev/app/supervisord.conf -A 2 -B 2

Length of output: 505

assets/styles/fonts.css (1)

7-7: Verify font assets location and accessibility.

The font paths have been updated to include the /assets/ prefix. This change might be related to Dioxus 0.6's asset handling.

Let's verify the font files exist and are properly configured:

Also applies to: 15-15

Verification successful

Font assets are present at the new location

The verification confirms that the font files (inter_variable.woff2 and inter_variable_italic.woff2) exist in the new /assets/fonts/ directory, matching the updated path in the CSS. No references to the old path were found in CSS or HTML files.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for font files in the new location
fd "inter_variable.*\.woff2" assets/fonts/

# Check for any remaining old font path references
rg -l "/fonts/inter_variable" . --type css --type html --type rs

Length of output: 211

docker/dev/app/Dockerfile (2)

Line range hint 1-5: LGTM: Appropriate toolchain setup for Dioxus 0.6

The Rust version and required tools (wasm32 target, dioxus-cli) are correctly configured for Dioxus 0.6 migration.

🧰 Tools
🪛 Hadolint (2.12.0)

[info] 3-3: Delete the apt-get lists after installing something

(DL3009)


[info] 3-3: Avoid additional packages by specifying --no-install-recommends

(DL3015)


19-19: Verify the Accept header requirement

The addition of the Accept: text/html header suggests a change in the server's response handling.

Verification successful

Health check header appears to be a standard configuration

The Accept: text/html header in the health check appears to be a standard configuration that exists in both development and production Dockerfiles. Since we couldn't find any specific route handlers or server configurations that explicitly check for this header, and the header is consistently used across environments, this seems to be a reasonable default health check configuration.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if there are any route handlers that specifically check for Accept header
rg -l "Accept.*header" 

Length of output: 24


Script:

#!/bin/bash
# Let's try different search patterns to find Accept header usage
rg -i "accept.*header|content.*type" -A 3

# Also search for route handlers or middleware that might handle content negotiation
rg -i "content.*negotiation|accepts|content.*type.*json|content.*type.*html" -A 3

# Check server configuration files for content type settings
fd -e js -e py -e conf -e yaml -e json server config app | xargs rg -i "content.*type|accept"

Length of output: 581


Script:

#!/bin/bash
# Let's check the server implementation files for any route handlers
fd -e py -e js -e ts | xargs rg -i "router|app.get|app.post|@app|fastapi|express|flask" -A 3

# Also look for health check endpoint implementations
fd -e py -e js -e ts | xargs rg -i "health|healthcheck|health_check" -A 3

# Search for server framework configurations
fd -e py -e js -e ts -e yaml -e json | xargs rg -i "server|app.config|middleware" -A 3

Length of output: 259

Dioxus.toml (1)

33-33: Verify the removal of CSS styles

The removal of all CSS style entries suggests a change in the styling approach. This change needs verification to ensure styles are handled appropriately in the new Dioxus 0.6 implementation.

Verification successful

Let me check the content of the style-related files to understand how styles are being handled now.


CSS styles are properly managed, removal from Dioxus.toml is correct

The removal of style entries from Dioxus.toml is valid as the styles are now being handled directly in the application code:

  • CSS files are properly organized in assets/styles/ and src/styles/
  • Tailwind CSS is configured in src/styles/tailwind.css
  • All style assets are correctly imported and linked in src/components/app.rs using the asset! macro
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for CSS files in the project
echo "Looking for CSS files:"
fd -e css

# Check for style handling in Rust code
echo "\nChecking for style-related code:"
rg -l "style|css|tailwind" --type rust

Length of output: 355


Script:

#!/bin/bash
# Check content of app.rs for style handling
echo "Content of src/components/app.rs:"
rg -A 5 "style|css|tailwind" src/components/app.rs

echo "\nContent of src/components/bottom_panel.rs:"
rg -A 5 "style|css|tailwind" src/components/bottom_panel.rs

echo "\nContent of tailwind.css:"
cat src/styles/tailwind.css

echo "\nCheck for style imports in main.rs:"
rg "style|css|tailwind" src/main.rs

Length of output: 1775

docker/prod/app/Dockerfile (3)

Line range hint 1-31: Security considerations look good

Multi-stage build reduces attack surface
Specific package versions
Non-root user
Minimal runtime dependencies

🧰 Tools
🪛 Hadolint (2.12.0)

[info] 16-16: Delete the apt-get lists after installing something

(DL3009)


[info] 16-16: Avoid additional packages by specifying --no-install-recommends

(DL3015)


29-31: Verify server configuration changes

The addition of IP and PORT environment variables and the change to ./server entry point suggest significant changes in the server implementation.

Verification successful

Let me try a different search strategy to verify the server configuration changes.


Let me check the main server configuration in the main.rs and server module files.


Based on the codebase analysis, I can now provide the final response:

Environment variables appear to be safe to add

The codebase appears to be a Dioxus-based application (a Rust web framework) that doesn't explicitly handle server binding configuration in the main application code. The IP and PORT environment variables in the Dockerfile are likely handled by the framework's default server configuration or build artifacts, making these additions safe and non-breaking.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Look for server configuration and environment variable usage
echo "Checking for server configuration:"
rg -l "IP.*PORT|listen.*address" --type rust

echo "\nChecking for main server file:"
fd -g "server.rs|main.rs"

Length of output: 228


Script:

#!/bin/bash
# Search for environment variable usage and server configuration
echo "Checking for environment variables usage:"
rg -A 5 'std::env::var' --type rust

echo "\nChecking for server binding configuration:"
rg -A 5 '\.bind|\.listen' --type rust

echo "\nListing Rust source files:"
fd -e rs

Length of output: 2014


Script:

#!/bin/bash
# Check main.rs and server module for server configuration
echo "Checking main.rs content:"
cat src/main.rs

echo "\nChecking server module content:"
cat src/server/mod.rs

Length of output: 727


18-18: Verify the new build output path

The path /srv/app/target/dx/todo-baggins/release/web reflects Dioxus 0.6's new build output structure.

.idea/dataSources.local.xml (1)

3-3: LGTM - IDE configuration update

This is an auto-generated IDE configuration change, not directly related to the Dioxus migration.

Cargo.toml (3)

37-45: LGTM: Profile configurations

The profile configurations for different platforms look good and follow Rust conventions.


14-14: Verify new dependencies are necessary

New dependencies added:

  • async-std: Async runtime
  • diesel_migrations: Database migrations
  • feruca: Unicode collation

Also applies to: 17-17, 19-19

Verification successful

Let me verify the usage of async-std since it wasn't found in the initial search.


Dependencies are appropriately used in the codebase

  • async-std is used for task sleeping in bottom panel component
  • diesel_migrations is actively used in migrations module for embedding and handling database migrations
  • feruca is utilized in internationalization module for collation
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check usage of new dependencies
echo "Checking async-std usage:"
rg "use async_std"
echo "Checking diesel_migrations usage:"
rg "diesel_migrations|embed_migrations"
echo "Checking feruca usage:"
rg "use feruca"

Length of output: 673


Script:

#!/bin/bash
# Check for async-std usage with different patterns
echo "Checking async-std usage with different patterns:"
rg "async_std::" -A 2
rg "async-std" --type rust
# Check if there are any async functions that might need the runtime
echo "Checking async function usage:"
ast-grep --pattern 'async fn $_($$$) { $$$ }'

Length of output: 594


10-13: Verify Dioxus 0.6.0 migration compatibility

The update to Dioxus 0.6.0 and related dependencies looks good. However, let's verify there are no breaking changes that need attention.

Verification successful

Let's verify the actual usage of Dioxus APIs to check for potential breaking changes in 0.6.0.


Let's check the component syntax and imports to ensure they match Dioxus 0.6.0's patterns.


Migration to Dioxus 0.6.0 appears compatible with current codebase

The codebase is already following Dioxus 0.6.0 patterns:

  • Uses the new use_signal hook syntax correctly
  • Component definitions use the correct #[component] attribute syntax
  • Proper imports from dioxus::prelude and related modules
  • Compatible usage of dioxus-query and dioxus-i18n dependencies
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for potential Dioxus API usage that might need updates
rg -l 'use dioxus|use_node_ref|use_signal|fermi|dioxus::prelude' 

Length of output: 1280


Script:

#!/bin/bash
# Check for specific Dioxus API patterns that might need updates
# 1. Check for use_signal (changed in 0.6)
rg 'use_signal' -A 2

# 2. Check for fermi usage (state management changes)
rg 'fermi::|use_read|use_atom' -A 2

# 3. Check component definitions for potential syntax changes
ast-grep --pattern 'fn $NAME($$$) -> Element {
  $$$
}'

# 4. Check for hooks usage patterns
rg 'use_(node_ref|state|future|effect|memo)' -A 2

Length of output: 2376


Script:

#!/bin/bash
# Check component definitions and imports
rg '^use dioxus' -A 3

# Check for component declarations
ast-grep --pattern '#[component]
pub fn $NAME($$$) -> Element {
  $$$
}'

# Check for any prelude imports
rg 'dioxus::prelude::*' -A 2

Length of output: 19997

src/components/app.rs (3)

11-15: LGTM: Asset management

Good use of const assets for styles and favicon. The separation of styles into distinct files improves maintainability.


37-41: LGTM: Asset linking

Proper linking of all required stylesheets in the document head.


21-34: Verify internationalization setup

The i18n setup looks good with proper language identifier handling. Let's verify the FTL files exist and are properly formatted.

Verification successful

Let me check the actual content of those hardcoded strings to determine if they should be localized.


Based on the verification results, I can now provide a final response:

FTL files are properly formatted and complete

The internationalization setup is correctly implemented with:

  • Both cs_cz.ftl and en_us.ftl files exist and contain proper translations
  • Date/time formats are properly defined for both languages
  • Basic translations for common terms are present

While there are many hardcoded strings in the components, they are primarily CSS classes, HTML attributes, and Font Awesome icon classes, which should not be localized.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check if FTL files exist and are properly formatted
echo "Checking FTL files:"
cat src/internationalization/cs_cz.ftl
cat src/internationalization/en_us.ftl

# Check for any hardcoded strings that should be localized
rg -l '"[^"]{10,}"' src/components/

Length of output: 1363


Script:

#!/bin/bash
# Check content of hardcoded strings in components
echo "=== Checking hardcoded strings in components ==="
rg '"[^"]{10,}"' src/components/ -A 1 -B 1

Length of output: 45444

src/components/navigation.rs (1)

78-78: LGTM: Correct migration from None to VNode::empty()

The change aligns with Dioxus 0.6's preferred way of handling empty nodes in the virtual DOM.

Let's check if there are any remaining None returns in RSX blocks that should be migrated:

Verification successful

LGTM: All None usages in RSX blocks have been properly migrated

Based on the search results, all remaining None usages in the codebase are legitimate Rust Option values (in pattern matching, struct fields, etc.) and not related to RSX/virtual DOM nodes. The only instances of VNode::empty() found are correct migrations, and there are no remaining cases where None is being used as an empty node in RSX blocks.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for potential None returns in RSX blocks that might need migration
rg -A 2 'rsx!.*\{.*\bNone\b'

Length of output: 30


Script:

#!/bin/bash
# Let's try a broader search for None in Rust files that might be related to Dioxus components
rg -t rust '\bNone\b' --context 2

Length of output: 8172


Script:

#!/bin/bash
# Also search for potential VNode::empty() usage to understand the migration pattern
rg -t rust 'VNode::empty\(\)' --context 2

Length of output: 548


Script:

#!/bin/bash
# Search for rsx! macro usage to understand the component structure
rg -t rust 'rsx!' --context 2

Length of output: 17265

src/components/pages/category_calendar_page.rs (2)

11-12: LGTM: Updated i18n imports for Dioxus 0.6

Correct migration to the new dioxus-i18n prelude imports.


43-51: Verify i18n key migrations

The migration from dot notation (formats.date-weekday-format) to kebab-case (date-weekday-format) looks correct, but we should verify all i18n keys have been updated consistently.

Verification successful

Let me search specifically for translation keys in the codebase to verify the migration.


Let me check the translation files to verify the format of all keys.


Let me search specifically for translation files and their content to verify the i18n key formats.


Migration to kebab-case format is consistent

The translation files show that all date and time format keys are consistently using kebab-case format (date-weekday-format, date-weekday-year-format, etc.) with no instances of dot notation. The migration appears to be complete and correct.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for any remaining dot notation i18n keys that might need migration
rg -A 2 't!\(.*\b\w+\.\w+\b.*\)'

Length of output: 1741


Script:

#!/bin/bash
# Search for all t! macro usages to verify translation keys
rg -A 1 't!\(' --type rust

Length of output: 7886


Script:

#!/bin/bash
# Find and examine translation files
fd -e json -x cat {} \; 

Length of output: 51972


Script:

#!/bin/bash
# Find translation files and examine their content
fd -e ftl -x cat {} \;

Length of output: 650

src/components/task_list.rs (1)

57-57: LGTM: Added type annotation for Event handler

The explicit type annotation Event<MouseData> aligns with Dioxus 0.6's type system requirements.

src/components/task_list_item.rs (3)

1-1: LGTM: Proper migration of i18n imports

The imports have been correctly updated to use the new dioxus_i18n crate instead of the deprecated dioxus_sdk i18n module.

Also applies to: 9-9


34-34: LGTM: Translation calls properly migrated

All translation calls have been correctly migrated from translate! to t! macro, maintaining consistent behavior while adopting the new Dioxus 0.6 i18n system.

Also applies to: 36-36, 38-38, 47-47, 54-58, 80-81


44-45: LGTM: Locale handling updated

The locale handling has been properly updated to use i18n().language() instead of the previous i18n implementation.

Also applies to: 64-65

src/components/pages/category_today_page.rs (2)

10-11: LGTM: Clean i18n import structure

The imports have been properly organized, separating the t macro and i18n function imports from dioxus_i18n.


47-47: LGTM: Consistent translation migration

All translation calls have been properly migrated to use the new t! macro while maintaining the existing date formatting and case handling logic.

Also applies to: 110-110, 129-139

src/components/subtasks_form.rs (1)

119-119: LGTM: Proper event type annotation for Dioxus 0.6

The event handler has been correctly updated with explicit Event<FormData> type annotation, which is required for type safety in Dioxus 0.6.

src/components/task_form.rs (3)

14-14: LGTM: Import change aligns with Dioxus migration

The addition of dioxus_i18n::t import is consistent with the migration to Dioxus 0.6 and the new internationalization approach.


364-364: LGTM: Improved empty node handling

The change to VNode::empty() follows Dioxus 0.6 best practices for representing no content, providing better type safety than returning None.


176-176: Verify translation key exists

The migration to t! macro looks good, but let's verify the "none" translation key exists in all locale files.

Also applies to: 359-359

Verification successful

Translation key "none" is properly defined in all locale files

The "none" translation key is correctly defined in both locale files:

  • cs_cz.ftl: none = žádný
  • en_us.ftl: none = none
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify "none" translation key exists in all locale files

# Find all .ftl files and check for "none" key
fd -e ftl -x sh -c 'echo "=== {} ==="; grep -l "^none\s*=" {} || echo "Missing translation key!"'

Length of output: 263


Script:

#!/bin/bash
# Let's verify the actual content of the translation key in both files
echo "=== cs_cz.ftl ==="
grep "^none\s*=" ./src/internationalization/cs_cz.ftl

echo -e "\n=== en_us.ftl ==="
grep "^none\s*=" ./src/internationalization/en_us.ftl

Length of output: 232

**Actionable comments posted: 6** <details> <summary>🧹 Outside diff range comments (2)</summary><blockquote> <details> <summary>src/server/internationalization.rs (1)</summary><blockquote> Line range hint `8-14`: **Consider enhancing error messages for better debugging.** The function logic is correct, but the error messages could be more descriptive for debugging purposes. Consider this enhancement: ```diff - dotenv().expect("Could not load environment variables from the .env file."); + dotenv().expect("Failed to load .env file. Please ensure it exists and is readable."); Ok(env::var("LANGUAGE_CODE") - .expect("The environment variable LANGUAGE_CODE must be set.") + .expect("LANGUAGE_CODE environment variable is not set. Please set it to a valid language code (e.g., 'en-US').") .parse::<LanguageIdentifier>()?) ``` </blockquote></details> <details> <summary>src/components/task_form.rs (1)</summary><blockquote> Line range hint `198-200`: **Consider implementing the loading indicator** The TODO comment indicates a missing loading indicator for the projects query, which could impact user experience during data fetching. Would you like me to help implement a loading indicator component or create an issue to track this task? </blockquote></details> </blockquote></details> <details> <summary>📜 Review details</summary> **Configuration used: CodeRabbit UI** **Review profile: ASSERTIVE** **Plan: Pro** <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 7f4990ef82aa03346cf2fc3f4269c5ca36844668 and 8d3f858f0b2e166866306f60e05dfe9bfbe9e797. </details> <details> <summary>⛔ Files ignored due to path filters (1)</summary> * `Cargo.lock` is excluded by `!**/*.lock` </details> <details> <summary>📒 Files selected for processing (24)</summary> * `.idea/dataSources.local.xml` (1 hunks) * `Cargo.toml` (1 hunks) * `Dioxus.toml` (1 hunks) * `assets/styles/fonts.css` (1 hunks) * `docker-compose-dev.yml` (0 hunks) * `docker/dev/app/Dockerfile` (2 hunks) * `docker/dev/app/supervisord.conf` (1 hunks) * `docker/prod/app/Dockerfile` (2 hunks) * `index.html` (0 hunks) * `src/components/app.rs` (1 hunks) * `src/components/navigation.rs` (1 hunks) * `src/components/pages/category_calendar_page.rs` (5 hunks) * `src/components/pages/category_today_page.rs` (6 hunks) * `src/components/subtasks_form.rs` (1 hunks) * `src/components/task_form.rs` (3 hunks) * `src/components/task_list.rs` (4 hunks) * `src/components/task_list_item.rs` (3 hunks) * `src/internationalization/cs_cz.ftl` (1 hunks) * `src/internationalization/cs_cz.json` (0 hunks) * `src/internationalization/en_us.ftl` (1 hunks) * `src/internationalization/en_us.json` (0 hunks) * `src/internationalization/mod.rs` (0 hunks) * `src/main.rs` (1 hunks) * `src/server/internationalization.rs` (1 hunks) </details> <details> <summary>💤 Files with no reviewable changes (5)</summary> * docker-compose-dev.yml * src/internationalization/cs_cz.json * src/internationalization/en_us.json * index.html * src/internationalization/mod.rs </details> <details> <summary>🔇 Additional comments (31)</summary> <details> <summary>src/internationalization/cs_cz.ftl (1)</summary> `9-12`: **LGTM! Date formats follow Czech conventions correctly.** The date formats properly use: - Day before month (Czech standard) - No leading zeros with %-d - Full month names with %B - Full weekday names with %A </details> <details> <summary>src/internationalization/en_us.ftl (2)</summary> `9-12`: **LGTM! Date formats follow US conventions correctly.** The date formats properly use: - Month before day (US standard) - Correct comma placement - Full month and weekday names --- `14-14`: **Verify AM/PM format across platforms.** The `%P` format (lowercase am/pm) is used, but some systems might handle it differently. Consider testing on various platforms or using `%p` (uppercase AM/PM) for consistency. </details> <details> <summary>docker/dev/app/supervisord.conf (1)</summary> `17-17`: **LGTM! Explicit host and port binding is good practice.** The updated command explicitly binds to all interfaces (0.0.0.0) and port 8000, which is necessary for proper container accessibility. Let's verify the port configuration is consistent across Docker files: <details> <summary>✅ Verification successful</summary> **Port configuration is consistent across Docker files** The port 8000 is consistently configured in both files: - `supervisord.conf`: Used in the dx serve command with `--port 8000` - `Dockerfile`: Referenced in the health check URL `http://localhost:8000` </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Check for port 8000 configuration consistency rg -l "8000" docker/ ``` Length of output: 78 --- Script: ```shell #!/bin/bash # Check the content of files containing port 8000 to verify consistency echo "=== docker/dev/app/Dockerfile ===" rg "8000" docker/dev/app/Dockerfile -A 2 -B 2 echo -e "\n=== docker/dev/app/supervisord.conf ===" rg "8000" docker/dev/app/supervisord.conf -A 2 -B 2 ``` Length of output: 505 </details> </details> <details> <summary>assets/styles/fonts.css (1)</summary> `7-7`: **Verify font assets location and accessibility.** The font paths have been updated to include the `/assets/` prefix. This change might be related to Dioxus 0.6's asset handling. Let's verify the font files exist and are properly configured: Also applies to: 15-15 <details> <summary>✅ Verification successful</summary> **Font assets are present at the new location** The verification confirms that the font files (`inter_variable.woff2` and `inter_variable_italic.woff2`) exist in the new `/assets/fonts/` directory, matching the updated path in the CSS. No references to the old path were found in CSS or HTML files. </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Check for font files in the new location fd "inter_variable.*\.woff2" assets/fonts/ # Check for any remaining old font path references rg -l "/fonts/inter_variable" . --type css --type html --type rs ``` Length of output: 211 </details> </details> <details> <summary>docker/dev/app/Dockerfile (2)</summary> Line range hint `1-5`: **LGTM: Appropriate toolchain setup for Dioxus 0.6** The Rust version and required tools (wasm32 target, dioxus-cli) are correctly configured for Dioxus 0.6 migration. <details> <summary>🧰 Tools</summary> <details> <summary>🪛 Hadolint (2.12.0)</summary> [info] 3-3: Delete the apt-get lists after installing something (DL3009) --- [info] 3-3: Avoid additional packages by specifying `--no-install-recommends` (DL3015) </details> </details> --- `19-19`: **Verify the Accept header requirement** The addition of the `Accept: text/html` header suggests a change in the server's response handling. <details> <summary>✅ Verification successful</summary> **Health check header appears to be a standard configuration** The `Accept: text/html` header in the health check appears to be a standard configuration that exists in both development and production Dockerfiles. Since we couldn't find any specific route handlers or server configurations that explicitly check for this header, and the header is consistently used across environments, this seems to be a reasonable default health check configuration. </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Check if there are any route handlers that specifically check for Accept header rg -l "Accept.*header" ``` Length of output: 24 --- Script: ```shell #!/bin/bash # Let's try different search patterns to find Accept header usage rg -i "accept.*header|content.*type" -A 3 # Also search for route handlers or middleware that might handle content negotiation rg -i "content.*negotiation|accepts|content.*type.*json|content.*type.*html" -A 3 # Check server configuration files for content type settings fd -e js -e py -e conf -e yaml -e json server config app | xargs rg -i "content.*type|accept" ``` Length of output: 581 --- Script: ```shell #!/bin/bash # Let's check the server implementation files for any route handlers fd -e py -e js -e ts | xargs rg -i "router|app.get|app.post|@app|fastapi|express|flask" -A 3 # Also look for health check endpoint implementations fd -e py -e js -e ts | xargs rg -i "health|healthcheck|health_check" -A 3 # Search for server framework configurations fd -e py -e js -e ts -e yaml -e json | xargs rg -i "server|app.config|middleware" -A 3 ``` Length of output: 259 </details> </details> <details> <summary>Dioxus.toml (1)</summary> `33-33`: **Verify the removal of CSS styles** The removal of all CSS style entries suggests a change in the styling approach. This change needs verification to ensure styles are handled appropriately in the new Dioxus 0.6 implementation. <details> <summary>✅ Verification successful</summary> Let me check the content of the style-related files to understand how styles are being handled now. --- **CSS styles are properly managed, removal from Dioxus.toml is correct** The removal of style entries from Dioxus.toml is valid as the styles are now being handled directly in the application code: - CSS files are properly organized in `assets/styles/` and `src/styles/` - Tailwind CSS is configured in `src/styles/tailwind.css` - All style assets are correctly imported and linked in `src/components/app.rs` using the `asset!` macro </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Check for CSS files in the project echo "Looking for CSS files:" fd -e css # Check for style handling in Rust code echo "\nChecking for style-related code:" rg -l "style|css|tailwind" --type rust ``` Length of output: 355 --- Script: ```shell #!/bin/bash # Check content of app.rs for style handling echo "Content of src/components/app.rs:" rg -A 5 "style|css|tailwind" src/components/app.rs echo "\nContent of src/components/bottom_panel.rs:" rg -A 5 "style|css|tailwind" src/components/bottom_panel.rs echo "\nContent of tailwind.css:" cat src/styles/tailwind.css echo "\nCheck for style imports in main.rs:" rg "style|css|tailwind" src/main.rs ``` Length of output: 1775 </details> </details> <details> <summary>docker/prod/app/Dockerfile (3)</summary> Line range hint `1-31`: **Security considerations look good** ✅ Multi-stage build reduces attack surface ✅ Specific package versions ✅ Non-root user ✅ Minimal runtime dependencies <details> <summary>🧰 Tools</summary> <details> <summary>🪛 Hadolint (2.12.0)</summary> [info] 16-16: Delete the apt-get lists after installing something (DL3009) --- [info] 16-16: Avoid additional packages by specifying `--no-install-recommends` (DL3015) </details> </details> --- `29-31`: **Verify server configuration changes** The addition of IP and PORT environment variables and the change to `./server` entry point suggest significant changes in the server implementation. <details> <summary>✅ Verification successful</summary> Let me try a different search strategy to verify the server configuration changes. --- Let me check the main server configuration in the main.rs and server module files. --- Based on the codebase analysis, I can now provide the final response: **Environment variables appear to be safe to add** The codebase appears to be a Dioxus-based application (a Rust web framework) that doesn't explicitly handle server binding configuration in the main application code. The IP and PORT environment variables in the Dockerfile are likely handled by the framework's default server configuration or build artifacts, making these additions safe and non-breaking. </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Look for server configuration and environment variable usage echo "Checking for server configuration:" rg -l "IP.*PORT|listen.*address" --type rust echo "\nChecking for main server file:" fd -g "server.rs|main.rs" ``` Length of output: 228 --- Script: ```shell #!/bin/bash # Search for environment variable usage and server configuration echo "Checking for environment variables usage:" rg -A 5 'std::env::var' --type rust echo "\nChecking for server binding configuration:" rg -A 5 '\.bind|\.listen' --type rust echo "\nListing Rust source files:" fd -e rs ``` Length of output: 2014 --- Script: ```shell #!/bin/bash # Check main.rs and server module for server configuration echo "Checking main.rs content:" cat src/main.rs echo "\nChecking server module content:" cat src/server/mod.rs ``` Length of output: 727 </details> --- `18-18`: **Verify the new build output path** The path `/srv/app/target/dx/todo-baggins/release/web` reflects Dioxus 0.6's new build output structure. </details> <details> <summary>.idea/dataSources.local.xml (1)</summary> `3-3`: **LGTM - IDE configuration update** This is an auto-generated IDE configuration change, not directly related to the Dioxus migration. </details> <details> <summary>Cargo.toml (3)</summary> `37-45`: **LGTM: Profile configurations** The profile configurations for different platforms look good and follow Rust conventions. --- `14-14`: **Verify new dependencies are necessary** New dependencies added: - async-std: Async runtime - diesel_migrations: Database migrations - feruca: Unicode collation Also applies to: 17-17, 19-19 <details> <summary>✅ Verification successful</summary> Let me verify the usage of `async-std` since it wasn't found in the initial search. --- **Dependencies are appropriately used in the codebase** - `async-std` is used for task sleeping in bottom panel component - `diesel_migrations` is actively used in migrations module for embedding and handling database migrations - `feruca` is utilized in internationalization module for collation </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Check usage of new dependencies echo "Checking async-std usage:" rg "use async_std" echo "Checking diesel_migrations usage:" rg "diesel_migrations|embed_migrations" echo "Checking feruca usage:" rg "use feruca" ``` Length of output: 673 --- Script: ```shell #!/bin/bash # Check for async-std usage with different patterns echo "Checking async-std usage with different patterns:" rg "async_std::" -A 2 rg "async-std" --type rust # Check if there are any async functions that might need the runtime echo "Checking async function usage:" ast-grep --pattern 'async fn $_($$$) { $$$ }' ``` Length of output: 594 </details> --- `10-13`: **Verify Dioxus 0.6.0 migration compatibility** The update to Dioxus 0.6.0 and related dependencies looks good. However, let's verify there are no breaking changes that need attention. <details> <summary>✅ Verification successful</summary> Let's verify the actual usage of Dioxus APIs to check for potential breaking changes in 0.6.0. --- Let's check the component syntax and imports to ensure they match Dioxus 0.6.0's patterns. --- **Migration to Dioxus 0.6.0 appears compatible with current codebase** The codebase is already following Dioxus 0.6.0 patterns: - Uses the new `use_signal` hook syntax correctly - Component definitions use the correct `#[component]` attribute syntax - Proper imports from `dioxus::prelude` and related modules - Compatible usage of dioxus-query and dioxus-i18n dependencies </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Search for potential Dioxus API usage that might need updates rg -l 'use dioxus|use_node_ref|use_signal|fermi|dioxus::prelude' ``` Length of output: 1280 --- Script: ```shell #!/bin/bash # Check for specific Dioxus API patterns that might need updates # 1. Check for use_signal (changed in 0.6) rg 'use_signal' -A 2 # 2. Check for fermi usage (state management changes) rg 'fermi::|use_read|use_atom' -A 2 # 3. Check component definitions for potential syntax changes ast-grep --pattern 'fn $NAME($$$) -> Element { $$$ }' # 4. Check for hooks usage patterns rg 'use_(node_ref|state|future|effect|memo)' -A 2 ``` Length of output: 2376 --- Script: ```shell #!/bin/bash # Check component definitions and imports rg '^use dioxus' -A 3 # Check for component declarations ast-grep --pattern '#[component] pub fn $NAME($$$) -> Element { $$$ }' # Check for any prelude imports rg 'dioxus::prelude::*' -A 2 ``` Length of output: 19997 </details> </details> <details> <summary>src/components/app.rs (3)</summary> `11-15`: **LGTM: Asset management** Good use of const assets for styles and favicon. The separation of styles into distinct files improves maintainability. --- `37-41`: **LGTM: Asset linking** Proper linking of all required stylesheets in the document head. --- `21-34`: **Verify internationalization setup** The i18n setup looks good with proper language identifier handling. Let's verify the FTL files exist and are properly formatted. <details> <summary>✅ Verification successful</summary> Let me check the actual content of those hardcoded strings to determine if they should be localized. --- Based on the verification results, I can now provide a final response: **FTL files are properly formatted and complete** The internationalization setup is correctly implemented with: - Both `cs_cz.ftl` and `en_us.ftl` files exist and contain proper translations - Date/time formats are properly defined for both languages - Basic translations for common terms are present While there are many hardcoded strings in the components, they are primarily CSS classes, HTML attributes, and Font Awesome icon classes, which should not be localized. </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Check if FTL files exist and are properly formatted echo "Checking FTL files:" cat src/internationalization/cs_cz.ftl cat src/internationalization/en_us.ftl # Check for any hardcoded strings that should be localized rg -l '"[^"]{10,}"' src/components/ ``` Length of output: 1363 --- Script: ```shell #!/bin/bash # Check content of hardcoded strings in components echo "=== Checking hardcoded strings in components ===" rg '"[^"]{10,}"' src/components/ -A 1 -B 1 ``` Length of output: 45444 </details> </details> <details> <summary>src/components/navigation.rs (1)</summary> `78-78`: **LGTM: Correct migration from `None` to `VNode::empty()`** The change aligns with Dioxus 0.6's preferred way of handling empty nodes in the virtual DOM. Let's check if there are any remaining `None` returns in RSX blocks that should be migrated: <details> <summary>✅ Verification successful</summary> **LGTM: All `None` usages in RSX blocks have been properly migrated** Based on the search results, all remaining `None` usages in the codebase are legitimate Rust `Option` values (in pattern matching, struct fields, etc.) and not related to RSX/virtual DOM nodes. The only instances of `VNode::empty()` found are correct migrations, and there are no remaining cases where `None` is being used as an empty node in RSX blocks. </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Search for potential None returns in RSX blocks that might need migration rg -A 2 'rsx!.*\{.*\bNone\b' ``` Length of output: 30 --- Script: ```shell #!/bin/bash # Let's try a broader search for None in Rust files that might be related to Dioxus components rg -t rust '\bNone\b' --context 2 ``` Length of output: 8172 --- Script: ```shell #!/bin/bash # Also search for potential VNode::empty() usage to understand the migration pattern rg -t rust 'VNode::empty\(\)' --context 2 ``` Length of output: 548 --- Script: ```shell #!/bin/bash # Search for rsx! macro usage to understand the component structure rg -t rust 'rsx!' --context 2 ``` Length of output: 17265 </details> </details> <details> <summary>src/components/pages/category_calendar_page.rs (2)</summary> `11-12`: **LGTM: Updated i18n imports for Dioxus 0.6** Correct migration to the new `dioxus-i18n` prelude imports. --- `43-51`: **Verify i18n key migrations** The migration from dot notation (`formats.date-weekday-format`) to kebab-case (`date-weekday-format`) looks correct, but we should verify all i18n keys have been updated consistently. <details> <summary>✅ Verification successful</summary> Let me search specifically for translation keys in the codebase to verify the migration. --- Let me check the translation files to verify the format of all keys. --- Let me search specifically for translation files and their content to verify the i18n key formats. --- **Migration to kebab-case format is consistent** The translation files show that all date and time format keys are consistently using kebab-case format (`date-weekday-format`, `date-weekday-year-format`, etc.) with no instances of dot notation. The migration appears to be complete and correct. </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Search for any remaining dot notation i18n keys that might need migration rg -A 2 't!\(.*\b\w+\.\w+\b.*\)' ``` Length of output: 1741 --- Script: ```shell #!/bin/bash # Search for all t! macro usages to verify translation keys rg -A 1 't!\(' --type rust ``` Length of output: 7886 --- Script: ```shell #!/bin/bash # Find and examine translation files fd -e json -x cat {} \; ``` Length of output: 51972 --- Script: ```shell #!/bin/bash # Find translation files and examine their content fd -e ftl -x cat {} \; ``` Length of output: 650 </details> </details> <details> <summary>src/components/task_list.rs (1)</summary> `57-57`: **LGTM: Added type annotation for Event handler** The explicit type annotation `Event<MouseData>` aligns with Dioxus 0.6's type system requirements. </details> <details> <summary>src/components/task_list_item.rs (3)</summary> `1-1`: **LGTM: Proper migration of i18n imports** The imports have been correctly updated to use the new `dioxus_i18n` crate instead of the deprecated `dioxus_sdk` i18n module. Also applies to: 9-9 --- `34-34`: **LGTM: Translation calls properly migrated** All translation calls have been correctly migrated from `translate!` to `t!` macro, maintaining consistent behavior while adopting the new Dioxus 0.6 i18n system. Also applies to: 36-36, 38-38, 47-47, 54-58, 80-81 --- `44-45`: **LGTM: Locale handling updated** The locale handling has been properly updated to use `i18n().language()` instead of the previous i18n implementation. Also applies to: 64-65 </details> <details> <summary>src/components/pages/category_today_page.rs (2)</summary> `10-11`: **LGTM: Clean i18n import structure** The imports have been properly organized, separating the `t` macro and `i18n` function imports from `dioxus_i18n`. --- `47-47`: **LGTM: Consistent translation migration** All translation calls have been properly migrated to use the new `t!` macro while maintaining the existing date formatting and case handling logic. Also applies to: 110-110, 129-139 </details> <details> <summary>src/components/subtasks_form.rs (1)</summary> `119-119`: **LGTM: Proper event type annotation for Dioxus 0.6** The event handler has been correctly updated with explicit `Event<FormData>` type annotation, which is required for type safety in Dioxus 0.6. </details> <details> <summary>src/components/task_form.rs (3)</summary> `14-14`: **LGTM: Import change aligns with Dioxus migration** The addition of `dioxus_i18n::t` import is consistent with the migration to Dioxus 0.6 and the new internationalization approach. --- `364-364`: **LGTM: Improved empty node handling** The change to `VNode::empty()` follows Dioxus 0.6 best practices for representing no content, providing better type safety than returning `None`. --- `176-176`: **Verify translation key exists** The migration to `t!` macro looks good, but let's verify the "none" translation key exists in all locale files. Also applies to: 359-359 <details> <summary>✅ Verification successful</summary> **Translation key "none" is properly defined in all locale files** The "none" translation key is correctly defined in both locale files: - cs_cz.ftl: `none = žádný` - en_us.ftl: `none = none` </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Description: Verify "none" translation key exists in all locale files # Find all .ftl files and check for "none" key fd -e ftl -x sh -c 'echo "=== {} ==="; grep -l "^none\s*=" {} || echo "Missing translation key!"' ``` Length of output: 263 --- Script: ```shell #!/bin/bash # Let's verify the actual content of the translation key in both files echo "=== cs_cz.ftl ===" grep "^none\s*=" ./src/internationalization/cs_cz.ftl echo -e "\n=== en_us.ftl ===" grep "^none\s*=" ./src/internationalization/en_us.ftl ``` Length of output: 232 </details> </details> </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
coderabbitai[bot] (Migrated from github.com) commented 2024-12-12 20:10:18 +00:00

🧹 Nitpick (assertive)

Review cross-platform feature flags

Good addition of platform-specific features. Consider documenting the build requirements for each platform in the README.

_:broom: Nitpick (assertive)_ **Review cross-platform feature flags** Good addition of platform-specific features. Consider documenting the build requirements for each platform in the README. <!-- This is an auto-generated comment by CodeRabbit -->
coderabbitai[bot] (Migrated from github.com) commented 2024-12-12 20:10:19 +00:00

🧹 Nitpick (assertive)

Consider extracting padding logic to a function

The padding class determination logic is becoming complex. Consider extracting it to a separate function for better maintainability.

+    fn get_padding_class(task: &TaskWithSubtasks) -> &'static str {
+        if task.task().deadline().is_some() || !task.subtasks().is_empty() {
+            "pb-0.5"
+        } else if let Category::Calendar { time, .. } = task.task().category() {
+            if time.is_some() {
+                "pb-0.5"
+            } else {
+                "pb-4"
+            }
+        } else {
+            "pb-4"
+        }
+    }

     rsx! {
         div {
             class: format!(
-                "px-8 pt-4 {} flex flex-row items-center gap-4 select-none {}",
-                if task.task().deadline().is_some() || !task.subtasks().is_empty() {
-                    "pb-0.5"
-                } else if let Category::Calendar { time, .. } = task.task().category() {
-                    if time.is_some() {
-                        "pb-0.5"
-                    } else {
-                        "pb-4"
-                    }
-                } else {
-                    "pb-4"
-                },
+                "px-8 pt-4 {} flex flex-row items-center gap-4 select-none {}",
+                get_padding_class(&task),
📝 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.

    fn get_padding_class(task: &TaskWithSubtasks) -> &'static str {
        if task.task().deadline().is_some() || !task.subtasks().is_empty() {
            "pb-0.5"
        } else if let Category::Calendar { time, .. } = task.task().category() {
            if time.is_some() {
                "pb-0.5"
            } else {
                "pb-4"
            }
        } else {
            "pb-4"
        }
    }

    rsx! {
        div {
            class: format!(
                "px-8 pt-4 {} flex flex-row items-center gap-4 select-none {}",
                get_padding_class(&task),
_:broom: Nitpick (assertive)_ **Consider extracting padding logic to a function** The padding class determination logic is becoming complex. Consider extracting it to a separate function for better maintainability. ```diff + fn get_padding_class(task: &TaskWithSubtasks) -> &'static str { + if task.task().deadline().is_some() || !task.subtasks().is_empty() { + "pb-0.5" + } else if let Category::Calendar { time, .. } = task.task().category() { + if time.is_some() { + "pb-0.5" + } else { + "pb-4" + } + } else { + "pb-4" + } + } rsx! { div { class: format!( - "px-8 pt-4 {} flex flex-row items-center gap-4 select-none {}", - if task.task().deadline().is_some() || !task.subtasks().is_empty() { - "pb-0.5" - } else if let Category::Calendar { time, .. } = task.task().category() { - if time.is_some() { - "pb-0.5" - } else { - "pb-4" - } - } else { - "pb-4" - }, + "px-8 pt-4 {} flex flex-row items-center gap-4 select-none {}", + get_padding_class(&task), ``` <!-- suggestion_start --> <details> <summary>📝 Committable suggestion</summary> > ‼️ **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. `````suggestion fn get_padding_class(task: &TaskWithSubtasks) -> &'static str { if task.task().deadline().is_some() || !task.subtasks().is_empty() { "pb-0.5" } else if let Category::Calendar { time, .. } = task.task().category() { if time.is_some() { "pb-0.5" } else { "pb-4" } } else { "pb-4" } } rsx! { div { class: format!( "px-8 pt-4 {} flex flex-row items-center gap-4 select-none {}", get_padding_class(&task), ````` </details> <!-- suggestion_end --> <!-- This is an auto-generated comment by CodeRabbit -->
coderabbitai[bot] (Migrated from github.com) commented 2024-12-12 20:10:18 +00:00

🛠️ Refactor suggestion

Consider using the ? operator for error propagation

Instead of using unwrap(), consider proper error handling with the ? operator and propagating the error up.

-    let completed_task = complete_task(task.task().id()).await
-        .unwrap();
+    let completed_task = complete_task(task.task().id()).await?;
📝 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.

                                    let completed_task = complete_task(task.task().id()).await?;
_:hammer_and_wrench: Refactor suggestion_ **Consider using the `?` operator for error propagation** Instead of using `unwrap()`, consider proper error handling with the `?` operator and propagating the error up. ```diff - let completed_task = complete_task(task.task().id()).await - .unwrap(); + let completed_task = complete_task(task.task().id()).await?; ``` <!-- suggestion_start --> <details> <summary>📝 Committable suggestion</summary> > ‼️ **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. `````suggestion let completed_task = complete_task(task.task().id()).await?; ````` </details> <!-- suggestion_end --> <!-- This is an auto-generated comment by CodeRabbit -->
@ -0,0 +11,4 @@
date-weekday-format = %A %-d. %B
date-weekday-year-format = %A %-d. %B %Y
weekday-lowercase-first = true
time-format = %-H:%M
coderabbitai[bot] (Migrated from github.com) commented 2024-12-12 20:10:18 +00:00

🧹 Nitpick (assertive)

Consider adding seconds format for consistency.

While the current time format is correct for basic display, consider adding a separate key for cases where seconds precision is needed (e.g., logs, timestamps).

 time-format = %-H:%M
+time-seconds-format = %-H:%M:%S
📝 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.

time-format = %-H:%M
time-seconds-format = %-H:%M:%S
_:broom: Nitpick (assertive)_ **Consider adding seconds format for consistency.** While the current time format is correct for basic display, consider adding a separate key for cases where seconds precision is needed (e.g., logs, timestamps). ```diff time-format = %-H:%M +time-seconds-format = %-H:%M:%S ``` <!-- suggestion_start --> <details> <summary>📝 Committable suggestion</summary> > ‼️ **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. `````suggestion time-format = %-H:%M time-seconds-format = %-H:%M:%S ````` </details> <!-- suggestion_end --> <!-- This is an auto-generated comment by CodeRabbit -->
@ -13,3 +13,3 @@
use dioxus::prelude::*;
use dioxus_logger::tracing::{info, Level};
use tracing::info;
coderabbitai[bot] (Migrated from github.com) commented 2024-12-12 20:10:18 +00:00

🧹 Nitpick (assertive)

Consider enhancing error handling and logging setup.

While the changes align with Dioxus 0.6, consider these improvements:

  1. Add structured logging initialization
  2. Implement graceful shutdown handling
 use tracing::info;
+use tracing_subscriber::{self, EnvFilter};

 fn main() {
+    // Initialize logging with environment-based configuration
+    tracing_subscriber::fmt()
+        .with_env_filter(EnvFilter::from_default_env())
+        .init();
+
     info!("Running migrations.");

Also applies to: 23-23

_:broom: Nitpick (assertive)_ **Consider enhancing error handling and logging setup.** While the changes align with Dioxus 0.6, consider these improvements: 1. Add structured logging initialization 2. Implement graceful shutdown handling ```diff use tracing::info; +use tracing_subscriber::{self, EnvFilter}; fn main() { + // Initialize logging with environment-based configuration + tracing_subscriber::fmt() + .with_env_filter(EnvFilter::from_default_env()) + .init(); + info!("Running migrations."); ``` Also applies to: 23-23 <!-- This is an auto-generated comment by CodeRabbit -->
@ -26,3 +23,1 @@
dioxus::fullstack::Config::new().addr(std::net::SocketAddr::from(([0, 0, 0, 0], 8000)))
);
LaunchBuilder::fullstack().with_cfg(cfg).launch(App);
launch(App);
coderabbitai[bot] (Migrated from github.com) commented 2024-12-12 20:10:18 +00:00

🧹 Nitpick (assertive)

Add error context to migration failure message.

The current error message could be more descriptive to help with troubleshooting.

-    migrations::run_migrations().expect("Failed to run migrations.");
+    migrations::run_migrations().expect("Failed to run database migrations. Ensure database connection is available and schema permissions are correct.");
📝 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.

    info!("Running migrations.");
    server_only!(
        migrations::run_migrations().expect("Failed to run database migrations. Ensure database connection is available and schema permissions are correct.");
    );
_:broom: Nitpick (assertive)_ **Add error context to migration failure message.** The current error message could be more descriptive to help with troubleshooting. ```diff - migrations::run_migrations().expect("Failed to run migrations."); + migrations::run_migrations().expect("Failed to run database migrations. Ensure database connection is available and schema permissions are correct."); ``` <!-- suggestion_start --> <details> <summary>📝 Committable suggestion</summary> > ‼️ **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. `````suggestion info!("Running migrations."); server_only!( migrations::run_migrations().expect("Failed to run database migrations. Ensure database connection is available and schema permissions are correct."); ); ````` </details> <!-- suggestion_end --> <!-- This is an auto-generated comment by CodeRabbit -->
coderabbitai[bot] (Migrated from github.com) reviewed 2024-12-12 20:26:06 +00:00
matous-volf commented 2024-12-12 21:03:31 +00:00 (Migrated from github.com)

Waiting for Super-linter to support rustc >1.79.0.

Waiting for Super-linter to [support rustc >1.79.0](https://github.com/super-linter/super-linter/issues/6436).
coderabbitai[bot] (Migrated from github.com) reviewed 2024-12-12 21:06:12 +00:00
coderabbitai[bot] (Migrated from github.com) requested changes 2024-12-29 14:00:47 +00:00
coderabbitai[bot] (Migrated from github.com) left a comment

Actionable comments posted: 1

♻️ Duplicate comments (2)
src/components/task_list.rs (2)

26-37: 🧹 Nitpick (assertive)

Extract padding logic to improve maintainability

The padding class determination logic remains complex and inline. Consider extracting it to a separate function.

+    fn get_padding_class(task: &TaskWithSubtasks) -> &'static str {
+        if task.task().deadline().is_some() || !task.subtasks().is_empty() {
+            "pb-0.5"
+        } else if let Category::Calendar { time, .. } = task.task().category() {
+            if time.is_some() {
+                "pb-0.5"
+            } else {
+                "pb-4"
+            }
+        } else {
+            "pb-4"
+        }
+    }

     rsx! {
         div {
             class: format!(
-                "px-8 pt-4 {} flex flex-row gap-4 select-none {}",
-                if task.task().deadline().is_some() || !task.subtasks().is_empty() {
-                    "pb-0.5"
-                } else if let Category::Calendar { time, .. } = task.task().category() {
-                    if time.is_some() {
-                        "pb-0.5"
-                    } else {
-                        "pb-4"
-                    }
-                } else {
-                    "pb-4"
-                },
+                "px-8 pt-4 {} flex flex-row gap-4 select-none {}",
+                get_padding_class(&task),

62-63: ⚠️ Potential issue

Replace unwrap() with proper error handling

Using unwrap() could lead to runtime panics. Consider using the ? operator for proper error propagation.

-    let completed_task = complete_task(task.task().id()).await
-        .unwrap();
+    let completed_task = complete_task(task.task().id()).await?;
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e1ee31c0c4 and 8c9eae39a6.

📒 Files selected for processing (2)
  • src/components/task_list.rs (4 hunks)
  • src/components/task_list_item.rs (3 hunks)
🔇 Additional comments (4)
src/components/task_list.rs (1)

57-57: LGTM! Type annotation improves clarity

The explicit type annotation for the MouseData event improves type safety and readability.

src/components/task_list_item.rs (3)

1-1: LGTM! Proper i18n imports

The imports correctly support the migration to Dioxus 0.6's internationalization system.

Also applies to: 9-9


80-81: LGTM! Proper time format handling

The time format is correctly retrieved from i18n and properly applied to the calendar time.


34-34: Verify translation keys and formats

The migration to Dioxus 0.6's i18n system looks good. Please ensure all translation keys exist in the localization files and the date/time formats are appropriate for all supported locales.

Also applies to: 36-36, 38-38, 47-47, 54-58

Verification successful

All translation keys are present and properly formatted

The verification shows that:

  • All required translation keys (yesterday, today, tomorrow, weekday-lowercase-first, date-format, date-year-format, time-format) exist in both English (en_us) and Czech (cs_cz) localization files
  • Date/time formats are appropriately localized:
    • English uses 12-hour time format with AM/PM (%-I:%M %P)
    • Czech uses 24-hour time format (%-H:%M)
    • Date formats follow the respective locale conventions (month-day for English, day-month for Czech)
    • The weekday-lowercase-first flag is correctly set (false for English, true for Czech)
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Check for missing translation keys
fd -e ftl -x rg -l "yesterday|today|tomorrow|weekday-lowercase-first|date-format|date-year-format|time-format" {} \;

Length of output: 195


Script:

#!/bin/bash
# Check the actual content of translation files to verify keys
echo "=== English translations ==="
cat ./src/internationalization/en_us.ftl
echo -e "\n=== Czech translations ==="
cat ./src/internationalization/cs_cz.ftl

Length of output: 844

**Actionable comments posted: 1** <details> <summary>♻️ Duplicate comments (2)</summary><blockquote> <details> <summary>src/components/task_list.rs (2)</summary><blockquote> `26-37`: _:broom: Nitpick (assertive)_ **Extract padding logic to improve maintainability** The padding class determination logic remains complex and inline. Consider extracting it to a separate function. ```diff + fn get_padding_class(task: &TaskWithSubtasks) -> &'static str { + if task.task().deadline().is_some() || !task.subtasks().is_empty() { + "pb-0.5" + } else if let Category::Calendar { time, .. } = task.task().category() { + if time.is_some() { + "pb-0.5" + } else { + "pb-4" + } + } else { + "pb-4" + } + } rsx! { div { class: format!( - "px-8 pt-4 {} flex flex-row gap-4 select-none {}", - if task.task().deadline().is_some() || !task.subtasks().is_empty() { - "pb-0.5" - } else if let Category::Calendar { time, .. } = task.task().category() { - if time.is_some() { - "pb-0.5" - } else { - "pb-4" - } - } else { - "pb-4" - }, + "px-8 pt-4 {} flex flex-row gap-4 select-none {}", + get_padding_class(&task), ``` --- `62-63`: _:warning: Potential issue_ **Replace unwrap() with proper error handling** Using `unwrap()` could lead to runtime panics. Consider using the `?` operator for proper error propagation. ```diff - let completed_task = complete_task(task.task().id()).await - .unwrap(); + let completed_task = complete_task(task.task().id()).await?; ``` </blockquote></details> </blockquote></details> <details> <summary>📜 Review details</summary> **Configuration used: CodeRabbit UI** **Review profile: ASSERTIVE** **Plan: Pro** <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between e1ee31c0c49f901afb0ed50e398654fe63cf6f1c and 8c9eae39a63ea851c92c3cf52c9aecb329489972. </details> <details> <summary>📒 Files selected for processing (2)</summary> * `src/components/task_list.rs` (4 hunks) * `src/components/task_list_item.rs` (3 hunks) </details> <details> <summary>🔇 Additional comments (4)</summary> <details> <summary>src/components/task_list.rs (1)</summary> `57-57`: **LGTM! Type annotation improves clarity** The explicit type annotation for the MouseData event improves type safety and readability. </details> <details> <summary>src/components/task_list_item.rs (3)</summary> `1-1`: **LGTM! Proper i18n imports** The imports correctly support the migration to Dioxus 0.6's internationalization system. Also applies to: 9-9 --- `80-81`: **LGTM! Proper time format handling** The time format is correctly retrieved from i18n and properly applied to the calendar time. --- `34-34`: **Verify translation keys and formats** The migration to Dioxus 0.6's i18n system looks good. Please ensure all translation keys exist in the localization files and the date/time formats are appropriate for all supported locales. Also applies to: 36-36, 38-38, 47-47, 54-58 <details> <summary>✅ Verification successful</summary> **All translation keys are present and properly formatted** The verification shows that: - All required translation keys (`yesterday`, `today`, `tomorrow`, `weekday-lowercase-first`, `date-format`, `date-year-format`, `time-format`) exist in both English (en_us) and Czech (cs_cz) localization files - Date/time formats are appropriately localized: - English uses 12-hour time format with AM/PM (`%-I:%M %P`) - Czech uses 24-hour time format (`%-H:%M`) - Date formats follow the respective locale conventions (month-day for English, day-month for Czech) - The `weekday-lowercase-first` flag is correctly set (`false` for English, `true` for Czech) </details> <details> <summary>🏁 Scripts executed</summary> The following scripts were executed for the analysis: Script: ```shell #!/bin/bash # Check for missing translation keys fd -e ftl -x rg -l "yesterday|today|tomorrow|weekday-lowercase-first|date-format|date-year-format|time-format" {} \; ``` Length of output: 195 --- Script: ```shell #!/bin/bash # Check the actual content of translation files to verify keys echo "=== English translations ===" cat ./src/internationalization/en_us.ftl echo -e "\n=== Czech translations ===" cat ./src/internationalization/cs_cz.ftl ``` Length of output: 844 </details> </details> </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
@ -4,6 +4,7 @@ use dioxus::core_macro::rsx;
use dioxus::dioxus_core::Element;
use dioxus::prelude::*;
use dioxus_query::prelude::use_query_client;
use tracing::info;
coderabbitai[bot] (Migrated from github.com) commented 2024-12-29 14:00:46 +00:00

🧹 Nitpick (assertive)

Remove unused import

The info import from tracing is not used in this file.

-use tracing::info;
_:broom: Nitpick (assertive)_ **Remove unused import** The `info` import from `tracing` is not used in this file. ```diff -use tracing::info; ``` <!-- This is an auto-generated comment by CodeRabbit -->
coderabbitai[bot] (Migrated from github.com) approved these changes 2024-12-29 14:02:08 +00:00
Sign in to join this conversation.
No Milestone
No project
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: matous-volf/todo-baggins#61
No description provided.