Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Dev #656

Merged
merged 6 commits into from
Dec 20, 2024
Merged

Dev #656

merged 6 commits into from
Dec 20, 2024

Conversation

jekuer
Copy link
Collaborator

@jekuer jekuer commented Dec 20, 2024

Type(s) of changes

  • (Bug) fix
  • New functionality

Description of the change

  • Ukranian localization
  • time zone management upgrade
  • better documentation

Checklist

  • My code follows the code style of this project (I at least ran npm run format).
  • I have read the CONTRIBUTING document.

Summary by CodeRabbit

Release Notes for Version 2.8.0

  • New Features

    • Added support for the Ukrainian language.
    • Enhanced localization for "no results" messages in autocomplete components.
  • Improvements

    • Updated styling for the "Add to Calendar" button across various themes (light and dark modes).
    • Improved clarity and usability of documentation for integrating with frameworks like Astro and React.
  • Bug Fixes

    • Refined event handling and user interaction logic for the "Add to Calendar" button.
  • Documentation

    • Updated CHANGELOG and README to reflect new features and contributors.
  • Chores

    • Updated various dependencies to their latest versions.

Copy link

coderabbitai bot commented Dec 20, 2024

Walkthrough

This pull request introduces version 2.8.0 of the Add to Calendar Button library, with significant updates across multiple files. The changes primarily focus on adding Ukrainian language support, updating dependencies, refining CSS styles, and improving type safety in various components. The update includes version bumps in package.json, nuxt configuration, and multiple source files, along with localization improvements and minor code enhancements.

Changes

File/Directory Change Summary
.gitignore Added entries for node_modules, dist, testing.html, example.html, .DS_Store, and .idea/
CHANGELOG.md Added entry for version 2.8 with Ukrainian language support
README.md Added new contributor Yevgen Sukharenko
assets/css/* Updated version from 2.7.3 to 2.8.0 across multiple CSS files
demo/components/ Various type safety and localization improvements
demo/i18n/locales/ Added Ukrainian translations and updated English and German locales
demo/nuxt.config.ts Updated i18n and tailwindcss configurations
demo/package.json Updated multiple dependencies to latest versions
src/* Version bumped to 2.8.0 across all source files
package.json Updated version to 2.8.0 and updated dependencies

Sequence Diagram

sequenceDiagram
    participant User
    participant AddToCalendarButton
    participant LocalizationService
    participant EventGenerator

    User->>AddToCalendarButton: Interact with button
    AddToCalendarButton->>LocalizationService: Detect language
    LocalizationService-->>AddToCalendarButton: Return translations
    AddToCalendarButton->>EventGenerator: Generate calendar event
    EventGenerator-->>AddToCalendarButton: Return event details
    AddToCalendarButton->>User: Display calendar options
Loading

Tip

CodeRabbit's docstrings feature is now available as part of our Early Access Program! Simply use the command @coderabbitai generate docstrings to have CodeRabbit automatically generate docstrings for your pull request. We would love to hear your feedback on Discord.


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.

@jekuer jekuer merged commit 83ea43c into main Dec 20, 2024
5 of 6 checks passed
Copy link

@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: 1

🧹 Nitpick comments (7)
demo/components/controls/timezoneAutocomplete.vue (1)

138-139: LGTM! Consider adding aria-live for better accessibility

The change from CSS visibility to conditional rendering is more Vue-idiomatic. The translation integration aligns well with the PR's localization objectives.

Consider adding aria-live="polite" to the no-results message for better screen reader support:

-        <ul v-if="isInputFocused && !getFilteredTimezoneOptions().length" :id="elNoResultsID" class="autocomplete-result-list absolute z-10 mt-3 max-h-36 w-full overflow-auto rounded-md bg-white py-1 text-sm shadow-lg ring ring-red-600/75 focus:outline-none dark:bg-zinc-700">
+        <ul v-if="isInputFocused && !getFilteredTimezoneOptions().length" :id="elNoResultsID" aria-live="polite" class="autocomplete-result-list absolute z-10 mt-3 max-h-36 w-full overflow-auto rounded-md bg-white py-1 text-sm shadow-lg ring ring-red-600/75 focus:outline-none dark:bg-zinc-700">
demo/components/controls/configSearch.vue (1)

173-174: LGTM! Consider the same accessibility enhancement

The implementation is consistent with timezoneAutocomplete.vue, which is great for maintainability.

Consider adding aria-live="polite" to match the suggested improvement in timezoneAutocomplete.vue:

-        <ul v-if="isInputFocused && !getFilteredOptions().length" :id="elNoResultsID" class="autocomplete-result-list absolute z-10 mt-3 max-h-36 w-full overflow-auto rounded-md bg-white py-1 text-sm shadow-lg ring ring-red-600/75 focus:outline-none dark:bg-zinc-700">
+        <ul v-if="isInputFocused && !getFilteredOptions().length" :id="elNoResultsID" aria-live="polite" class="autocomplete-result-list absolute z-10 mt-3 max-h-36 w-full overflow-auto rounded-md bg-white py-1 text-sm shadow-lg ring ring-red-600/75 focus:outline-none dark:bg-zinc-700">
demo/components/controls/select.vue (2)

14-18: Consider making SelectOption interface more specific

While the types improve code safety, the SelectOption interface is very permissive.

Consider defining specific properties based on your usage:

-interface SelectOption {
-  [key: string]: any;
-}
+interface SelectOption {
+  label?: string;
+  value: string | number;
+  key?: string;
+  [key: string]: unknown;  // If additional properties are needed
+}

82-104: Consider reducing code duplication in utility functions

The utility functions are well-structured but contain similar logic.

Consider extracting the common logic:

+const getOptionProperty = (option: SelectOption, prop?: string) => {
+  if (!option) return '';
+  if (typeof option === 'object' && prop) {
+    return option[prop] ?? '';
+  }
+  return option?.toString() ?? '';
+};

-const getOptionKey = (option: SelectOption) => {
-  if (!option) return '';
-  if (typeof option === 'object' && props.byKey) {
-    return option[props.byKey] ?? '';
-  }
-  return option?.toString() ?? '';
-};
+const getOptionKey = (option: SelectOption) => getOptionProperty(option, props.byKey);

-const getOptionValue = (option: SelectOption) => {
-  if (!option) return '';
-  if (typeof option === 'object' && props.byValue) {
-    return option[props.byValue] ?? '';
-  }
-  return option;
-};
+const getOptionValue = (option: SelectOption) => getOptionProperty(option, props.byValue);

-const getOptionLabel = (option: SelectOption) => {
-  if (!option) return '';
-  if (typeof option === 'object' && props.byKey) {
-    return option[props.byKey] ?? '';
-  }
-  return option?.toString() ?? '';
-};
+const getOptionLabel = (option: SelectOption) => getOptionProperty(option, props.byKey);
demo/components/playground/playgroundArea.vue (1)

40-40: Consider using a more specific type annotation.

The any type annotation is too broad for this use case. Since showMC is a boolean ref, the watch callback parameter should be typed as boolean.

-  watch(showMC, (val: any) => {
+  watch(showMC, (val: boolean) => {
demo/components/playground/attrs/layoutAttrs.vue (1)

32-32: Consider using a more specific type annotation.

The any type annotation is too broad. Since modelValue is of type Object (as defined in props), consider using that type or creating a more specific interface/type for the model value.

-  watch(() => props.modelValue, (val: any) => {
+  watch(() => props.modelValue, (val: typeof props.modelValue) => {
README.md (1)

290-290: Add alt text to contributor images

For better accessibility, consider adding alt text to the contributor images.

-<a href="https://github.com/sukharenko"><img src="https://avatars.githubusercontent.com/u/2049036?v=4" title="Yevgen Sukharenko" width="60" height="60"></a>
+<a href="https://github.com/sukharenko"><img src="https://avatars.githubusercontent.com/u/2049036?v=4" alt="Yevgen Sukharenko" title="Yevgen Sukharenko" width="60" height="60"></a>
🧰 Tools
🪛 Markdownlint (0.37.0)

290-290: null
Images should have alternate text (alt text)

(MD045, no-alt-text)

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 485db72 and 335cb56.

⛔ Files ignored due to path filters (2)
  • demo/package-lock.json is excluded by !**/package-lock.json
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (42)
  • .gitignore (1 hunks)
  • CHANGELOG.md (1 hunks)
  • README.md (1 hunks)
  • assets/css/atcb-3d.css (1 hunks)
  • assets/css/atcb-date.css (1 hunks)
  • assets/css/atcb-flat.css (1 hunks)
  • assets/css/atcb-neumorphism.css (1 hunks)
  • assets/css/atcb-round.css (1 hunks)
  • assets/css/atcb-text.css (1 hunks)
  • assets/css/atcb.css (1 hunks)
  • demo/components/controls/configSearch.vue (1 hunks)
  • demo/components/controls/select.vue (6 hunks)
  • demo/components/controls/timezoneAutocomplete.vue (1 hunks)
  • demo/components/footer.vue (1 hunks)
  • demo/components/languageSwitcher.vue (1 hunks)
  • demo/components/playground/attrs/dateAttrs.vue (1 hunks)
  • demo/components/playground/attrs/layoutAttrs.vue (3 hunks)
  • demo/components/playground/playgroundArea.vue (1 hunks)
  • demo/error.vue (1 hunks)
  • demo/i18n/locales/de.json (1 hunks)
  • demo/i18n/locales/en.json (1 hunks)
  • demo/layouts/default.vue (1 hunks)
  • demo/layouts/home.vue (1 hunks)
  • demo/models/language.ts (2 hunks)
  • demo/nuxt.config.ts (1 hunks)
  • demo/package.json (1 hunks)
  • demo/pages/use-with-astro.vue (2 hunks)
  • demo/public/atcb.css (1 hunks)
  • demo/tailwind.config.ts (2 hunks)
  • package.json (3 hunks)
  • src/atcb-control.js (1 hunks)
  • src/atcb-decorate.js (1 hunks)
  • src/atcb-event.js (1 hunks)
  • src/atcb-generate-pro.js (1 hunks)
  • src/atcb-generate-rich-data.js (1 hunks)
  • src/atcb-generate.js (1 hunks)
  • src/atcb-globals.js (1 hunks)
  • src/atcb-i18n.js (2 hunks)
  • src/atcb-init.js (1 hunks)
  • src/atcb-links.js (1 hunks)
  • src/atcb-util.js (1 hunks)
  • src/atcb-validate.js (1 hunks)
✅ Files skipped from review due to trivial changes (17)
  • demo/components/footer.vue
  • src/atcb-event.js
  • CHANGELOG.md
  • assets/css/atcb-neumorphism.css
  • src/atcb-util.js
  • src/atcb-validate.js
  • src/atcb-links.js
  • .gitignore
  • src/atcb-control.js
  • src/atcb-globals.js
  • assets/css/atcb-flat.css
  • assets/css/atcb-3d.css
  • assets/css/atcb-date.css
  • assets/css/atcb-text.css
  • src/atcb-generate-rich-data.js
  • src/atcb-generate-pro.js
  • demo/public/atcb.css
🧰 Additional context used
🪛 Markdownlint (0.37.0)
README.md

290-290: null
Images should have alternate text (alt text)

(MD045, no-alt-text)

🔇 Additional comments (33)
demo/pages/use-with-astro.vue (6)

17-23: Ensure string conversion handles all locales correctly.
The concatenation of the language string in lines 17 and 23 looks straightforward. Just confirm that no additional trimming or encoding is needed (e.g., when locale.value includes special characters). Otherwise, this is acceptable.


36-37: Content update confirmation.
The new instructional paragraphs for Astro integration appear correct and give clearer guidance.


39-45: Well-structured installation steps.
These additions improve clarity on how to install and use the React-based component. No issues found.


46-50: Clear step definitions.
The headings and paragraphs outline the setup steps in a logical flow. This structure is user-friendly.


52-70: Verify the custom props in the React wrapper.

  1. The function “atcb(props: AddToCalendarButtonType)” is simple and uses the component straightforwardly.
  2. Confirm all props (label, name, startDate, etc.) are provided in the correct format.
    Overall, no apparent issues.

73-74: Final usage example.
The updated usage snippet, including the import from ../layouts/Layout.astro, is consistent with the instructions and looks correct.

Also applies to: 78-84, 87-87

src/atcb-decorate.js (1)

6-6: Version bump to 2.8.0.
No issues. Ensure this version tag is consistently updated across docs and package files.

src/atcb-init.js (1)

6-6: Version bump to 2.8.0.
Matches the rest of the codebase updates. Always confirm the package.json and changelog reflect the same version.

src/atcb-generate.js (1)

6-6: Version bump to 2.8.0.
This is in line with the other files. Update any references in docs as well.

demo/models/language.ts (1)

23-23: LGTM: Ukrainian language support properly implemented

The addition of Ukrainian language support follows the correct ISO 639-1 standard ('uk') and maintains consistent formatting with other language entries. The implementation aligns well with the PR's localization objectives.

Also applies to: 52-52

demo/package.json (2)

52-52: Timezone library update aligns with PR objectives

The upgrade of timezones-ical-library to version 1.9.0 supports the PR's goal of improving time zone management.


41-42: Verify compatibility with major version updates

Several dependencies have major version bumps that warrant verification:

  • @nuxtjs/i18n: 8.x → 9.x
  • @nuxtjs/sitemap: 6.x → 7.x
  • nuxt-schema-org: 3.x → 4.x

Please ensure these updates don't introduce breaking changes affecting the application.

Also applies to: 49-50

demo/tailwind.config.ts (1)

1-4: LGTM: Improved type safety and modern syntax

The changes enhance the configuration file by:

  • Converting to ES modules syntax
  • Adding TypeScript type safety with Config type
  • Using modern import syntax for plugins

Also applies to: 71-72

demo/components/languageSwitcher.vue (1)

5-7: LGTM! Type safety improvements

Good improvement to use the official LocaleObject type from @nuxtjs/i18n instead of local declarations. This change reduces maintenance overhead and ensures type consistency with the i18n package.

package.json (2)

3-3: LGTM! Version bump aligns with feature additions

The version increment to 2.8.0 is appropriate for the addition of Ukrainian localization and timezone management improvements.


99-99: Verify compatibility with updated timezones-ical-library

The upgrade of timezones-ical-library from 1.8.3 to 1.9.0 aligns with the timezone management improvements. However, we should verify there are no breaking changes.

✅ Verification successful

Library upgrade from 1.8.3 to 1.9.0 appears safe to proceed

The verification shows consistent usage of the library's core functions (tzlib_get_ical_block, tzlib_get_offset, tzlib_get_timezones) across the codebase, and these are standard timezone utility functions that are unlikely to have breaking changes in a minor version update (1.8.3 to 1.9.0). The usage patterns are straightforward and focused on basic timezone operations:

  • Timezone validation in src/atcb-validate.js
  • Timezone block generation for iCal in src/atcb-links.js
  • Offset calculations in src/atcb-util.js and src/atcb-decorate.js
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for breaking changes in timezones-ical-library

# Check the changelog or releases for breaking changes
gh api repos/add2cal/timezones-ical-library/releases | jq -r '.[].body' | grep -i "breaking"

# Look for any existing usage patterns that might be affected
rg -l "timezones-ical-library" | xargs rg "import.*timezones-ical-library"

Length of output: 1132


Script:

#!/bin/bash
# Let's check the package.json file to see the previous version
git show HEAD~1:package.json | grep "timezones-ical-library"

# Let's also check the commit history for any related changes
git log -n 5 --oneline | grep -i "timezone"

# Let's examine the actual usage of the library functions
rg "tzlib_get_ical_block|tzlib_get_offset|tzlib_get_timezones" -A 2

Length of output: 4873

demo/components/controls/select.vue (3)

22-22: LGTM! Type safety improvements

The prop types are now more specific and properly typed for Vue 3 using PropType.

Also applies to: 38-38


126-128: LGTM! Improved null handling and localization

The placeholder handling is now more robust with proper null checks and localization support.


152-152: LGTM! Consistent use of utility functions

The option rendering is now more maintainable with the new utility functions.

Also applies to: 160-160

demo/components/playground/attrs/layoutAttrs.vue (1)

84-88: LGTM! Well-structured computed properties.

The new computed properties improve code organization and maintainability by centralizing the options mapping logic. The implementation is clean and consistent across all option types.

demo/nuxt.config.ts (1)

261-272: LGTM! Improved configuration structure.

The changes enhance type safety and follow best practices:

  • Updated i18n configuration using the language property
  • Moved configuration files to TypeScript

Also applies to: 277-277

demo/i18n/locales/en.json (2)

298-300: LGTM! Clear and helpful improvements to the Astro integration guide.

The changes provide better guidance by:

  • Using more specific language ("best solution")
  • Adding important client-side rendering considerations
  • Recommending the React wrapper approach

302-309: LGTM! Comprehensive setup instructions added.

The new content provides excellent step-by-step guidance for:

  • Component creation and naming
  • Handling multiple buttons
  • Package installation and imports
  • Component usage
demo/i18n/locales/de.json (1)

298-309: LGTM! German translations accurately mirror English changes.

The translations maintain both technical accuracy and natural German language flow while preserving the meaning of the English content.

assets/css/atcb.css (1)

8-8: LGTM! Version number updated to 2.8.0.

Version bump aligns with the PR objectives.

README.md (1)

290-290: LGTM: New contributor added

New contributor Yevgen Sukharenko has been properly added to the kudos section with correct formatting and links.

🧰 Tools
🪛 Markdownlint (0.37.0)

290-290: null
Images should have alternate text (alt text)

(MD045, no-alt-text)

demo/layouts/home.vue (1)

8-8: LGTM! Consistent locale head configuration update.

The simplified configuration aligns with the changes in other layout files, maintaining consistency across the codebase.

Let's verify the consistency of this change across other layout files:

✅ Verification successful

Locale head configuration is consistent across layout files

The verification confirms that both home.vue and default.vue layout files use identical useLocaleHead configuration with key: 'id', maintaining consistency throughout the codebase.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the locale head configuration is consistent across layout files
# Expect: All layout files should use the same configuration

# Search for useLocaleHead configurations
rg -A 1 "useLocaleHead\(\{" demo/layouts/

Length of output: 222

demo/layouts/default.vue (1)

9-9: LGTM! Maintains consistent locale head configuration.

The change aligns perfectly with the configuration in home.vue, demonstrating consistent refactoring across layouts.

demo/error.vue (2)

31-31: LGTM! Completes consistent locale head configuration.

The change maintains the same simplified configuration pattern seen in other layout files.


Line range hint 19-24: Verify the 404 redirect logic for language paths.

The code includes specific handling for paths starting with '/en/', redirecting them to their non-'/en/' counterparts. This is a good practice for URL normalization.

Let's verify the language path handling:

✅ Verification successful

Let me gather more information about language-related routing and configuration in the codebase.


Let me check the content of these configuration files to understand the language setup.


Based on the gathered information, I can now provide the final response:

The 404 redirect for /en/ paths aligns with the site's i18n configuration.

The redirect logic is consistent with the site's internationalization setup, where:

  • English is the default language (defaultLocale: 'en')
  • The i18n strategy is prefix_except_default, meaning non-default languages get prefixed
  • The 404 redirect from /en/ to the non-prefixed path is the correct behavior as English URLs should not have the language prefix
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify language path handling consistency
# Expect: No hardcoded language paths in other components

# Search for language path handling patterns
rg -A 2 "path\.startsWith\('/[a-z]{2}/'\)" 

Length of output: 250


Script:

#!/bin/bash
# Search for language-related configurations and routing patterns
rg -i "language|locale" --type vue --type js --type ts -A 3

# Search for other URL path manipulations
rg "route\.path|path\." --type vue --type js --type ts -A 2

# Look for i18n or nuxt configuration files
fd -e js -e ts -e json "i18n|nuxt.config"

Length of output: 285


Script:

#!/bin/bash
# Check i18n and nuxt configuration content
cat demo/i18n/i18n.config.ts
cat demo/nuxt.config.ts

# Search with correct file types (removing --type vue as it's not recognized)
rg -i "language|locale" --type ts --type js -A 3
rg "route\.path|path\." --type ts --type js -A 2

Length of output: 97045

assets/css/atcb-round.css (1)

8-8: LGTM: Version update

The version number has been updated from 2.7.3 to 2.8.0 in the file header.

src/atcb-i18n.js (2)

6-6: LGTM: Version update

The version number has been updated from 2.7.3 to 2.8.0 in the file header.


823-857: LGTM: Ukrainian language support added

The Ukrainian language translations have been properly implemented with all required keys and consistent formatting. The translations maintain the same structure as other languages, including proper handling of HTML tags and special characters.

✅ Verification successful

Ukrainian translations are complete and correctly implemented

The verification shows that all translation keys present in the Ukrainian (uk) translations match the unique keys from the English translations. The apparent duplicates in the English output are due to the grep pattern matching the same keys multiple times in the file, but when considering unique keys, both languages have the same set of translations with consistent formatting.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that Ukrainian translations have all required keys compared to English

# Get all keys from English translations
echo "Checking for missing translation keys in Ukrainian..."
rg -A 1 "en: {|'[^']+': '[^']+'" src/atcb-i18n.js | grep -o "'[^']\+'" | sort > /tmp/en_keys.txt

# Get all keys from Ukrainian translations
rg -A 1 "uk: {|'[^']+': '[^']+'" src/atcb-i18n.js | grep -o "'[^']\+'" | sort > /tmp/uk_keys.txt

# Compare the keys
diff /tmp/en_keys.txt /tmp/uk_keys.txt

Length of output: 591


Script:

#!/bin/bash
# Let's try a simpler approach to extract and compare translation keys

# Extract English keys
echo "English keys:"
rg "en: \{" -A 100 src/atcb-i18n.js | rg "^\s+'[^']+': " | sed "s/^\s\+'//;s/':.*$//" | sort

echo -e "\nUkrainian keys:"
rg "uk: \{" -A 100 src/atcb-i18n.js | rg "^\s+'[^']+': " | sed "s/^\s\+'//;s/':.*$//" | sort

Length of output: 2352

@@ -34,7 +34,7 @@ watch(internalValue, () => {
emit('update:modelValue', internalValue);
}, { deep: true });

watch(() => props.modelValue, (val) => {
watch(() => props.modelValue, (val: any) => {
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Consider using a more specific type instead of 'any'

While adding type annotation is good, using any bypasses TypeScript's type checking benefits. Consider using a more specific type based on the modelValue prop type.

-watch(() => props.modelValue, (val: any) => {
+watch(() => props.modelValue, (val: typeof props.modelValue) => {
📝 Committable suggestion

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

Suggested change
watch(() => props.modelValue, (val: any) => {
watch(() => props.modelValue, (val: typeof props.modelValue) => {

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.

2 participants