Skip to content

Add 60-second replication delay notification#1344

Merged
riderx merged 1 commit into
mainfrom
riderx/60s-replication-toast
Jan 1, 2026
Merged

Add 60-second replication delay notification#1344
riderx merged 1 commit into
mainfrom
riderx/60s-replication-toast

Conversation

@riderx
Copy link
Copy Markdown
Member

@riderx riderx commented Jan 1, 2026

Summary

Users are now informed via toast notifications that cloud changes (channel settings, bundle assignments, device overrides) take up to 60 seconds to propagate globally due to heavy read replication infrastructure.

Test plan

  • Update a channel setting (e.g., toggle iOS or Android) and verify the "Changes will take up to 60 seconds..." toast appears
  • Assign a bundle to a channel and verify the replication delay toast appears
  • Override a device to a specific channel and verify the toast appears
  • Test in multiple languages to ensure translations display correctly

Checklist

  • Code follows project style and passes linting
  • Change requires documentation update
  • E2E test coverage added
  • Changes tested manually across multiple pages

Summary by CodeRabbit

  • New Features
    • Added cloud replication delay notifications across various channel and device operations, informing users that changes may take up to 60 seconds to propagate globally.
    • Updated localization with new messaging for cloud replication delays across multiple languages including German, English, Spanish, French, Hindi, Indonesian, Italian, Japanese, Korean, Polish, Portuguese, Russian, Turkish, Vietnamese, and Simplified Chinese.

✏️ Tip: You can customize this high-level summary in your review settings.

Users are now informed via toast notifications that channel settings changes, bundle assignments, and device overrides take up to 60 seconds to propagate globally due to heavy read replication.

Changes include:
- Add replication delay toasts after successful channel settings updates
- Add replication delay toasts after bundle-to-channel assignments
- Add replication delay toasts after device-to-channel overrides
- Translate the message to all 15 supported languages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jan 1, 2026

📝 Walkthrough

Walkthrough

This PR replaces the no-organization-selected translation key with a new cloud-replication-delay key across all language files, and adds toast notifications to Vue components that display this message after channel linking, unlinking, and related operations.

Changes

Cohort / File(s) Summary
Translation files
messages/de.json, messages/en.json, messages/es.json, messages/fr.json, messages/hi.json, messages/id.json, messages/it.json, messages/ja.json, messages/ko.json, messages/pl.json, messages/pt-br.json, messages/ru.json, messages/tr.json, messages/vi.json, messages/zh-cn.json
Removed no-organization-selected key and added new cloud-replication-delay key with localized text indicating 60-second global propagation delay across all language variants. Minor syntax adjustments (trailing commas) where needed for JSON validity.
Vue component notifications
src/pages/app/[package].bundle.[bundle].vue, src/pages/app/[package].channel.[channel].devices.vue, src/pages/app/[package].channel.[channel].vue, src/pages/app/[package].device.[device].vue
Added cloud-replication-delay toast notifications displayed after successful channel operations (link, unlink, update, revert). Early return added in error path of device overwrite to prevent duplicate success handling.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested labels

enhancement

Poem

🐰 A message for the cloud's delay,
Sixty seconds to find its way,
From channel links to global spread,
Toast notifications now are fed!
A rabbit cheers the UI's care,
Replication waits—oh what a pair! 🌍✨

Pre-merge checks

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely describes the main change: adding toast notifications about a 60-second replication delay for cloud changes.
Description check ✅ Passed The description includes a clear summary, comprehensive test plan, and partially completed checklist. However, it lacks screenshots/videos which are recommended for UI changes and E2E test coverage remains unchecked.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
src/pages/app/[package].bundle.[bundle].vue (1)

320-328: Consistent replication-delay messaging on unlink; consider extending to bulk unlink helper

Adding the cloud-replication-delay info toast after channels-unlinked-successfully keeps unlink UX consistent with the link path. For full consistency, you might also show the same toast inside unlinkChannels() (lines 572–607) where multiple channels are unlinked in one shot.

src/pages/app/[package].channel.[channel].vue (1)

454-459: Consider adding user-facing error notification.

The success path now correctly shows the replication delay toast, which is great. However, when an error occurs (line 455), it's only logged to the console without any user-facing feedback.

Consider adding a toast notification in the error path to inform users when the auto-update setting fails to save:

💡 Suggested enhancement
  if (error) {
    console.error(error)
+   toast.error(t('error-update-channel'))
  }
  else {
    toast.info(t('cloud-replication-delay'))
  }
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1a6959d and b0c8458.

📒 Files selected for processing (19)
  • messages/de.json
  • messages/en.json
  • messages/es.json
  • messages/fr.json
  • messages/hi.json
  • messages/id.json
  • messages/it.json
  • messages/ja.json
  • messages/ko.json
  • messages/pl.json
  • messages/pt-br.json
  • messages/ru.json
  • messages/tr.json
  • messages/vi.json
  • messages/zh-cn.json
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
  • src/pages/app/[package].device.[device].vue
🧰 Additional context used
📓 Path-based instructions (9)
src/**/*.vue

📄 CodeRabbit inference engine (CLAUDE.md)

src/**/*.vue: Use Vue 3 with Composition API and <script setup> syntax for frontend components
Style components using TailwindCSS with DaisyUI components

src/**/*.vue: Use Vue 3 <script setup> syntax exclusively for all Vue component scripts
Use Tailwind utility classes for layout and spacing in Vue components
Use DaisyUI components (d-btn, d-input, d-card) for interactive elements in Vue components
Use Konsta components ONLY for safe area helpers (top/bottom insets) in Vue components; avoid other uses
Use useRoute() from vue-router to access route parameters and useRouter() for programmatic navigation in Vue components

Use DaisyUI (d- prefixed classes) for buttons, inputs, and other interactive primitives to keep behavior and spacing consistent

Files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
**/*.{ts,tsx,js,jsx,vue}

📄 CodeRabbit inference engine (CLAUDE.md)

Use single quotes and no semicolons per @antfu/eslint-config

Files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
src/pages/**/*.vue

📄 CodeRabbit inference engine (CLAUDE.md)

Use file-based routing with unplugin-vue-router for frontend pages

Frontend file-based routing uses src/pages/ directory structure; routes auto-generate with unplugin-vue-router and types are available in src/typed-router.d.ts

Files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
{capacitor.config.{ts,js},src/**/*.{ts,tsx,vue}}

📄 CodeRabbit inference engine (CLAUDE.md)

Mobile apps should use Capacitor with app ID ee.forgr.capacitor_go for native mobile functionality

Files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
src/**/*.{ts,tsx,vue,js}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use ~/ alias for imports from src/ directory in frontend TypeScript and Vue components

Files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
src/**/*.{vue,ts,js}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Frontend ESLint must pass before commit; run bun lint:fix to auto-fix issues in frontend files

Files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
src/**/*.{vue,css,scss}

📄 CodeRabbit inference engine (AGENTS.md)

The web client is built with Vue.js and Tailwind CSS; lean on utility classes and composition-friendly patterns rather than bespoke CSS

Files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
src/**/*.{vue,ts,tsx,js}

📄 CodeRabbit inference engine (AGENTS.md)

Konsta components are reserved for the safe area helpers; avoid importing konsta anywhere else in the app

Files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
src/**/*.{css,scss,vue}

📄 CodeRabbit inference engine (AGENTS.md)

Mirror the Capgo design palette from src/styles/style.css (e.g., --color-primary-500: #515271, --color-azure-500: #119eff) when introducing new UI, using deep slate bases with the Extract azure highlight and soft radii

Files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
🧠 Learnings (2)
📚 Learning: 2025-05-29T18:21:17.703Z
Learnt from: WcaleNieWolny
Repo: Cap-go/capgo PR: 1107
File: src/components/dashboard/AppSetting.vue:85-182
Timestamp: 2025-05-29T18:21:17.703Z
Learning: In setUpdateChannelSync function in src/components/dashboard/AppSetting.vue, the database update code at the end is intentionally outside the conflict-resolution if block and should run for cases where sync is being toggled without conflicts or after conflicts are resolved. The return statements inside the dialog handling correctly prevent database updates when the user cancels.

Applied to files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
📚 Learning: 2025-12-23T01:19:04.593Z
Learnt from: riderx
Repo: Cap-go/capgo PR: 1297
File: src/components/dashboard/DeploymentBanner.vue:77-79
Timestamp: 2025-12-23T01:19:04.593Z
Learning: In the Cap-go codebase, ensure that app permission checks never include the role 'owner'. App-level permissions should be based on the user_min_right enum with values: read, upload, write, admin, super_admin (and NOT owner). This pattern applies across Vue components that perform permission checks; if you find a check referencing 'owner' for app-level access, replace it with the appropriate user_min_right value and keep organization-level owner handling in organization.ts.

Applied to files:

  • src/pages/app/[package].device.[device].vue
  • src/pages/app/[package].bundle.[bundle].vue
  • src/pages/app/[package].channel.[channel].devices.vue
  • src/pages/app/[package].channel.[channel].vue
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Run tests
🔇 Additional comments (22)
messages/fr.json (1)

1342-1342: Cloud‑replication delay FR string looks correct

La frase es clara, gramaticalmente correcta y refleja bien “Changes will take up to 60 seconds to propagate globally”. No veo problemas de uso en toasts ni de formato.

messages/it.json (1)

1334-1334: Cloud‑replication delay IT string looks correct

Texto natural y correcto: comunica claramente que los cambios tardan hasta 60 segundos en propagarse globalmente, sin problemas de formato.

messages/ja.json (1)

1334-1334: Cloud‑replication delay JA string looks correct

日本語として自然で、変更がグローバルに反映されるまで「最大60秒かかる」旨が正しく伝わっています。フォーマット上の問題もありません。

messages/es.json (1)

1342-1342: Cloud‑replication delay ES string looks correct

Redacción clara y natural; transmite bien que los cambios tardan hasta 60 segundos en propagarse globalmente, sin riesgos de formato en el i18n.

messages/hi.json (1)

1333-1333: Hindi cloud-replication-delay string is accurate and well-formed

The translation reads naturally, correctly conveys the 60‑second global propagation delay, and JSON structure is valid.

messages/de.json (1)

1342-1342: German cloud-replication-delay translation matches intent

The sentence is idiomatic, correctly reflects the 60‑second global propagation note, and the JSON is syntactically correct.

messages/vi.json (1)

882-882: Vietnamese updates read clearly and match semantics

Both changes look good:

  • no-organization-selected now uses a clear, natural phrasing.
  • cloud-replication-delay accurately conveys that changes can take up to 60 seconds to propagate globally, and JSON structure is valid.

Also applies to: 1333-1333

messages/ko.json (1)

883-883: Korean translations are natural and semantically correct

The revised no-organization-selected string is clear, and cloud-replication-delay gives an idiomatic, accurate description of the 60‑second global replication delay with valid JSON.

Also applies to: 1334-1334

src/pages/app/[package].bundle.[bundle].vue (1)

261-265: Replication-delay toast after successful channel link is correctly placed

The info toast is shown only after setChannel and getChannels resolve and after the existing linked-bundle success toast, which aligns with the new replication-delay UX without affecting control flow.

messages/en.json (1)

1403-1404: English replication-delay copy and JSON structure look good

The new cloud-replication-delay key and updated channel-disable-auto-update-under-native label are clear and correctly wired for use in toasts, with valid JSON syntax.

messages/pl.json (1)

1333-1334: Polish translation for replication delay is aligned with intent

cloud-replication-delay is added with clear wording that mirrors the English meaning, and JSON remains valid.

messages/id.json (1)

1333-1334: Indonesian replication-delay translation and JSON look correct

cloud-replication-delay is added with accurate Indonesian phrasing and valid JSON structure.

messages/zh-cn.json (1)

1334-1334: LGTM! Translation key added correctly.

The new cloud-replication-delay translation key is properly formatted and provides clear messaging about the 60-second propagation delay for cloud changes. The Chinese translation accurately conveys this information to users.

src/pages/app/[package].channel.[channel].devices.vue (1)

150-158: LGTM! Proper error handling and user notification flow.

The implementation correctly handles both error and success cases:

  • Early return on error (line 153) prevents the success logic from executing
  • Success path shows the replication delay notification to inform users about propagation time
  • reload() ensures the UI reflects the updated state

This pattern is consistent with similar changes across other components in this PR.

messages/ru.json (1)

1333-1333: LGTM! Russian translation added correctly.

The cloud-replication-delay key is properly formatted with an accurate Russian translation that clearly communicates the 60-second global propagation delay to users.

src/pages/app/[package].channel.[channel].vue (2)

153-155: LGTM! Success notification properly implemented.

The else block correctly shows the replication delay notification only when the channel update succeeds (no error). This provides users with clear feedback about the expected propagation time.


326-326: LGTM! Replication delay notification added after revert.

The toast notification is properly placed after the channel data is refreshed, informing users about the propagation delay following a successful revert to built-in operation.

src/pages/app/[package].device.[device].vue (2)

291-296: LGTM! Unlink notification includes replication delay warning.

After successfully unlinking a channel, users receive both a success confirmation and a replication delay notification. This dual-toast pattern is consistent with other components in this PR and clearly communicates both the immediate success and the expected propagation delay.


305-310: LGTM! Link notification includes replication delay warning.

The success path properly shows both the channel-linked confirmation and the replication delay notification. This follows the same pattern as the unlink operation and aligns with the PR objectives to inform users about the 60-second propagation delay for cloud changes.

messages/pt-br.json (1)

1334-1334: Translation addition looks good.

The new cloud-replication-delay key clearly communicates the 60-second propagation delay to users. The Portuguese translation reads naturally.

Minor note: The "60 segundos" timeframe is hardcoded in the translation string. If this delay duration ever changes, all language files will need updates. Consider whether this is acceptable or if a parameterized approach would be better for future maintenance.

messages/tr.json (2)

882-882: Verify unrelated translation change.

The value for no-organization-selected was updated from "Organizasyon seçilmedi" to "Kuruluş seçilmedi". This change appears unrelated to the PR's stated purpose of adding replication delay notifications.

Was this translation refinement intentional, or was it an accidental modification? If intentional, it's fine—just want to confirm this wasn't inadvertently included.


1333-1333: New replication delay translation added successfully.

The cloud-replication-delay key provides clear notification to Turkish-speaking users about the 60-second propagation delay. The translation reads naturally.

Same consideration as with other language files: "60 saniye" is hardcoded, so any future changes to the delay duration will require updating all translation files.

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Jan 1, 2026

@riderx riderx merged commit 1894647 into main Jan 1, 2026
10 of 11 checks passed
@riderx riderx deleted the riderx/60s-replication-toast branch January 1, 2026 14:35
Dalanir pushed a commit that referenced this pull request Jan 12, 2026
…1344)

Users are now informed via toast notifications that channel settings changes, bundle assignments, and device overrides take up to 60 seconds to propagate globally due to heavy read replication.

Changes include:
- Add replication delay toasts after successful channel settings updates
- Add replication delay toasts after bundle-to-channel assignments
- Add replication delay toasts after device-to-channel overrides
- Translate the message to all 15 supported languages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant