Skip to content

feat: translate quick start#8875

Open
mikeallisonJS wants to merge 51 commits intomainfrom
26-00-MA-feat-translate-quick-start
Open

feat: translate quick start#8875
mikeallisonJS wants to merge 51 commits intomainfrom
26-00-MA-feat-translate-quick-start

Conversation

@mikeallisonJS
Copy link
Copy Markdown
Collaborator

@mikeallisonJS mikeallisonJS commented Mar 18, 2026

Summary by CodeRabbit

  • New Features

    • AI-powered translation now includes journey customization fields and descriptions, with a "Translate with AI" option and progress UI.
  • Improvements

    • Better language selection and fallback handling for customization translations; multiselect labels and additional block fields are translatable.
    • Preserves template placeholders ({{ }}); streamed translations apply per-item with isolated error handling and finer-grained progress.
  • Tests

    • Expanded unit and integration tests covering translation scenarios and edge cases.
  • Localization

    • Added UI strings for translation controls and prompts.

Kneesal and others added 15 commits November 17, 2025 02:13
- Added .cursorignore to exclude environment files.
- Updated .gitignore to include new personal Claude rules and Strapi CMS config files.
- Modified .prettierignore to include Kubernetes manifests.
- Updated package.json with new dependencies and version upgrades.
- Added new rules and guidelines for backend, frontend, and infrastructure in .claude directory.
- Updated workflows to improve dependency installation and notifications.
- Adjusted TypeScript configuration for better module resolution.
…put structure

- Replaced instances of generateObject with generateText in translation logic.
- Adjusted mock implementations and test cases to reflect the new function usage.
- Updated return values to align with the new Output structure in the translation schema.
- Enhanced error handling in LanguageScreen for guest and signed-in users during journey duplication.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 18, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Switches AI calls to generateText/streamText with Output wrappers, adds translateCustomizationFields (implementation + tests), changes streamed block validation/update flow, includes customization fields in queries/subscriptions/cache, adds AI translation UI and language selection, and upgrades Gemini model + SDK versions.

Changes

Cohort / File(s) Summary
Core translation service & tests
apis/api-journeys-modern/src/schema/journeyAiTranslate/journeyAiTranslate.ts, apis/api-journeys-modern/src/schema/journeyAiTranslate/journeyAiTranslate.spec.ts
Replaced generateObject/streamObject with generateText/streamText + Output wrappers; migrated to gemini-2.5-flash; reworked streamed element handling with per-item validation/try-catch, new BlockTranslation schemas, allowed-field maps, and updated prompt/schema usage.
Customization translation module & tests
apis/api-journeys-modern/src/schema/journeyAiTranslate/translateCustomizationFields/translateCustomizationFields.ts, .../index.ts, .../translateCustomizationFields.spec.ts
New exported translateCustomizationFields implementation translating description (preserving {{ }}) and field value/defaultValue via AI; Zod output schemas; comprehensive Jest tests covering null/empty cases, placeholder preservation, language fallback, and prompt assertions.
Language detection & shared AI updates
apis/api-journeys-modern/src/schema/journeyLanguageAiDetect/journeyLanguageAiDetect.ts, libs/shared/ai/src/getImageDescription/getImageDescription.ts
Switched to generateText + Output.object usage and updated destructuring from objectoutput; bumped Gemini model to gemini-2.5-flash.
GraphQL schema & subscription/cache changes
apis/api-journeys-modern/schema.graphql, apis/api-gateway/schema.graphql, libs/journeys/ui/src/libs/useJourneyAiTranslateSubscription/useJourneyAiTranslateSubscription.ts
Added optional userLanguageId/userLanguageName to JourneyAiTranslateInput; subscription now accepts/forwards those variables and returns journeyCustomizationDescription + journeyCustomizationFields; Apollo cache writeFragment updated to persist these fields.
Admin UI: translation flows & dialogs
apps/journeys-admin/src/components/TemplateCustomization/.../LanguageScreen/LanguageScreen.tsx, apps/journeys-admin/src/components/JourneyList/.../TranslateJourneyDialog/TranslateJourneyDialog.tsx, apps/journeys-admin/src/components/Team/.../CopyToTeamMenuItem/CopyToTeamMenuItem.tsx
Added "Translate with AI" toggle, translation-language selection/validation, start subscription flow (duplication + subscription variables including userLanguage*), progress UI, and subscription completion/error handling; internal state extended to carry userLanguageId/userLanguageName.
UI components & template extraction
apps/journeys-admin/src/components/Editor/.../MultiselectOptionEdit/MultiselectOptionEdit.tsx, libs/journeys/ui/src/components/MultiselectOption/MultiselectOption.tsx, apps/journeys-admin/src/.../getTemplateCustomizationFields/getTemplateCustomizationFields.ts
Resolve labels via journey customization values when applicable (imports/use of resolve/useGetValueFromJourneyCustomizationString); include MultiselectOptionBlock.label in template customization extraction.
Template/fragment usages & button components
libs/journeys/ui/src/components/TemplateView/CreateJourneyButton/CreateJourneyButton.tsx
Extended internal JourneyForTemplate.language shape to include id, added userLanguageId/userLanguageName into translationVariables initialization for template-based creation flows.
Locales, deps & misc
libs/locales/en/journeys-ui.json, package.json
Added English locale strings for the translation UI and bumped ai and @ai-sdk/google package versions.
Specs & mocks updated
apis/api-journeys-modern/src/schema/journeyAiTranslate/journeyAiTranslate.spec.ts, .../translateCustomizationFields/translateCustomizationFields.spec.ts
Updated Jest mocks from Output.object/Output.array and generateText/streamText shapes; added tests for customization translation, null/empty cases, language fallback, and streaming behaviors.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant UI as Admin UI
    participant Sub as Translate Subscription
    participant API as journeyAiTranslate API
    participant AI as Gemini AI
    participant DB as Database
    participant Cache as Apollo Cache

    User->>UI: Enable "Translate with AI" + pick language
    UI->>UI: Duplicate journey (if signed-in)
    UI->>Sub: Start translation subscription (includes userLanguageName/Id)
    Sub->>API: Run translation flow
    API->>AI: generateText (metadata & customization fields)
    AI-->>API: Output.object/array (translated metadata/fields)
    API->>AI: streamText (elementStream for blocks)
    AI-->>API: Streamed block translation elements (elementStream)
    API->>DB: Update blocks & customization fields (per-item, validated)
    DB-->>API: Confirm updates
    API->>Sub: Emit progress updates + final journey
    Sub->>Cache: writeFragment (journey + customization fields)
    Cache-->>Sub: Cache updated
    Sub->>UI: Notify completion
    UI->>User: Show success & continue
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 47.06% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'feat: translate quick start' is overly broad and vague. It does not clearly convey the specific changes made (AI translation for customization fields, model upgrades, schema updates, and UI enhancements across multiple components). Consider a more descriptive title that captures the main scope, such as 'feat: add AI translation for journey customization fields and blocks' or 'feat: implement customization field translation with improved AI models'.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 26-00-MA-feat-translate-quick-start

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.

@infracost
Copy link
Copy Markdown

infracost bot commented Mar 18, 2026

💰 Infracost report

Monthly estimate increased by $155 📈

Changed project Baseline cost Usage cost* Total change New monthly cost
infrastructure +$155 - +$155 (+10%) $1,770

*Usage costs can be estimated by updating Infracost Cloud settings, see docs for other options.

Estimate details (includes details of unsupported resources)
Key: * usage cost, ~ changed, + added, - removed

──────────────────────────────────
Project: infrastructure
Module path: infrastructure

~ module.prod.module.eks.aws_eks_node_group.az_2a_ondemand
  +$63 ($125 → $188)

    ~ Instance usage (Linux/UNIX, on-demand, t3.large)
      +$61 ($121 → $182)

    ~ Storage (general purpose SSD, gp2)
      +$2 ($4 → $6)

~ module.stage.module.eks.aws_eks_node_group.az_2a_ondemand
  +$63 ($125 → $188)

    ~ Instance usage (Linux/UNIX, on-demand, t3.large)
      +$61 ($121 → $182)

    ~ Storage (general purpose SSD, gp2)
      +$2 ($4 → $6)

~ module.prod.module.arclight.module.ecs-task.aws_ecs_service.ecs_service
  +$36 ($36 → $72)

    ~ Per GB per hour
      +$6 ($6 → $13)

    ~ Per vCPU per hour
      +$30 ($30 → $59)

+ module.prod.module.cms.module.ecs-task.aws_ecs_service.ecs_service
  +$36

    + Per GB per hour
      +$6

    + Per vCPU per hour
      +$30

+ module.stage.module.cms.module.ecs-task.aws_ecs_service.ecs_service
  +$36

    + Per GB per hour
      +$6

    + Per vCPU per hour
      +$30

~ module.stage.module.api-journeys.module.ecs-task.aws_ecs_service.ecs_service
  -$36 ($72 → $36)

    ~ Per GB per hour
      -$6 ($13 → $6)

    ~ Per vCPU per hour
      -$30 ($59 → $30)

~ module.stage.module.api-gateway-stage.module.ecs-task.aws_ecs_service.ecs_service
  -$43 ($85 → $43)

    ~ Per GB per hour
      -$13 ($26 → $13)

    ~ Per vCPU per hour
      -$30 ($59 → $30)

Monthly cost change for infrastructure (Module path: infrastructure)
Amount:  +$155 ($1,615 → $1,770)
Percent: +10%

──────────────────────────────────
Key: * usage cost, ~ changed, + added, - removed

*Usage costs can be estimated by updating Infracost Cloud settings, see docs for other options.

918 cloud resources were detected:
∙ 126 were estimated
∙ 790 were free
∙ 2 are not supported yet, see https://infracost.io/requested-resources:
  ∙ 1 x aws_s3_bucket_accelerate_configuration
  ∙ 1 x aws_s3_bucket_request_payment_configuration

Infracost estimate: Monthly estimate increased by $155 ↑
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Changed project                                    ┃ Baseline cost ┃ Usage cost* ┃ Total change ┃
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━━┫
┃ infrastructure                                     ┃         +$155 ┃           - ┃ +$155 (+10%) ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━━┛
This comment will be updated when code changes.

@jesus-film-bot
Copy link
Copy Markdown

Ran Plan for dir: infrastructure workspace: default

Show Output
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
~ update in-place
- destroy
+/- create replacement and then destroy

Terraform will perform the following actions:

  # module.prod.module.api-analytics.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
        id                                 = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/api-analytics-prod-service"
        name                               = "api-analytics-prod-service"
        tags                               = {}
      ~ task_definition                    = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-analytics-prod:9" -> (known after apply)
        # (18 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

  # module.prod.module.api-analytics.module.ecs-task.aws_ecs_task_definition.ecs_task_definition must be replaced
+/- resource "aws_ecs_task_definition" "ecs_task_definition" {
      ~ arn                      = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-analytics-prod:9" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-analytics-prod" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                    name             = "jfp-api-analytics-prod-app"
                  ~ secrets          = [
                      + {
                          + name      = "DD_API_KEY"
                          + valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
                        },
                        {
                            name      = "GATEWAY_HMAC_SECRET"
                            valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-analytics/prod/GATEWAY_HMAC_SECRET"
                        },
                        # (1 unchanged element hidden)
                        {
                            name      = "PLAUSIBLE_SECRET_KEY_BASE"
                            valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-analytics/prod/PLAUSIBLE_SECRET_KEY_BASE"
                        },
                      - {
                          - name      = "PRISMA_LOCATION_ANALYTICS"
                          - valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-analytics/prod/PRISMA_LOCATION_ANALYTICS"
                        },
                      - {
                          - name      = "DD_API_KEY"
                          - valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
                        },
                    ]
                  - systemControls   = []
                    # (9 unchanged attributes hidden)
                },
              ~ {
                  - cpu               = 0
                    name              = "jfp-api-analytics-prod-datadog-agent"
                  - systemControls    = []
                    # (9 unchanged attributes hidden)
                },
              ~ {
                  - cpu                   = 0
                    name                  = "jfp-api-analytics-prod-log-router"
                  - systemControls        = []
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ enable_fault_injection   = false -> (known after apply)
      ~ id                       = "jfp-api-analytics-prod" -> (known after apply)
      ~ revision                 = 9 -> (known after apply)
      - tags                     = {} -> null
      ~ tags_all                 = {} -> (known after apply)
        # (12 unchanged attributes hidden)
    }

  # module.prod.module.api-analytics.module.ecs-task.aws_ssm_parameter.parameters["PRISMA_LOCATION_ANALYTICS"] will be destroyed
  # (because key ["PRISMA_LOCATION_ANALYTICS"] is not in for_each map)
- resource "aws_ssm_parameter" "parameters" {
      - arn             = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-analytics/prod/PRISMA_LOCATION_ANALYTICS" -> null
      - data_type       = "text" -> null
      - id              = "/ecs/api-analytics/prod/PRISMA_LOCATION_ANALYTICS" -> null
      - key_id          = "alias/aws/ssm" -> null
      - name            = "/ecs/api-analytics/prod/PRISMA_LOCATION_ANALYTICS" -> null
      - overwrite       = true -> null
      - region          = "us-east-2" -> null
      - tags            = {
          - "name" = "PRISMA_LOCATION_ANALYTICS"
        } -> null
      - tags_all        = {
          - "name" = "PRISMA_LOCATION_ANALYTICS"
        } -> null
      - tier            = "Standard" -> null
      - type            = "SecureString" -> null
      - value           = (sensitive value) -> null
      - value_wo        = (write-only attribute) -> null
      - version         = 3 -> null
        # (2 unchanged attributes hidden)
    }

  # module.prod.module.api-media.module.ecs-task.aws_appautoscaling_target.service_autoscaling will be updated in-place
~ resource "aws_appautoscaling_target" "service_autoscaling" {
        id                 = "service/jfp-ecs-cluster-prod/api-media-prod-service"
      ~ min_capacity       = 2 -> 1
        tags               = {}
        # (8 unchanged attributes hidden)

        # (1 unchanged block hidden)
    }

  # module.prod.module.api-media.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
      ~ desired_count                      = 2 -> 1
        id                                 = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/api-media-prod-service"
        name                               = "api-media-prod-service"
        tags                               = {}
        # (18 unchanged attributes hidden)

        # (5 unchanged blocks hidden)
    }

  # module.prod.module.arclight.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
      ~ desired_count                      = 1 -> 2
        id                                 = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/arclight-prod-service"
        name                               = "arclight-prod-service"
        tags                               = {}
        # (18 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

  # module.stage.module.api-users.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
        id                                 = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-stage/api-users-stage-service"
        name                               = "api-users-stage-service"
        tags                               = {}
      ~ task_definition                    = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-users-stage:44" -> (known after apply)
        # (18 unchanged attributes hidden)

        # (4 unchanged blocks hidden)
    }

  # module.stage.module.api-users.module.ecs-task.aws_ecs_task_definition.ecs_task_definition must be replaced
+/- resource "aws_ecs_task_definition" "ecs_task_definition" {
      ~ arn                      = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-users-stage:44" -> (known after apply)
      ~ arn_without_revision     = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-users-stage" -> (known after apply)
      ~ container_definitions    = jsonencode(
          ~ [
              ~ {
                    name             = "jfp-api-users-stage-app"
                  ~ secrets          = [
                        # (4 unchanged elements hidden)
                        {
                            name      = "GATEWAY_HMAC_SECRET"
                            valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-users/stage/GATEWAY_HMAC_SECRET"
                        },
                      - {
                          - name      = "GATEWAY_URL"
                          - valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-users/stage/GATEWAY_URL"
                        },
                        {
                            name      = "GOOGLE_APPLICATION_JSON"
                            valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-users/stage/GOOGLE_APPLICATION_JSON"
                        },
                        # (8 unchanged elements hidden)
                    ]
                  - systemControls   = []
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name              = "jfp-api-users-stage-datadog-agent"
                  - systemControls    = []
                    # (9 unchanged attributes hidden)
                },
              ~ {
                    name                  = "jfp-api-users-stage-log-router"
                  - systemControls        = []
                    # (10 unchanged attributes hidden)
                },
            ] # forces replacement
        )
      ~ enable_fault_injection   = false -> (known after apply)
      ~ id                       = "jfp-api-users-stage" -> (known after apply)
      ~ revision                 = 44 -> (known after apply)
      - tags                     = {} -> null
      ~ tags_all                 = {} -> (known after apply)
        # (12 unchanged attributes hidden)
    }

  # module.stage.module.api-users.module.ecs-task.aws_ssm_parameter.parameters["GATEWAY_URL"] will be destroyed
  # (because key ["GATEWAY_URL"] is not in for_each map)
- resource "aws_ssm_parameter" "parameters" {
      - arn             = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-users/stage/GATEWAY_URL" -> null
      - data_type       = "text" -> null
      - has_value_wo    = false -> null
      - id              = "/ecs/api-users/stage/GATEWAY_URL" -> null
      - key_id          = "alias/aws/ssm" -> null
      - name            = "/ecs/api-users/stage/GATEWAY_URL" -> null
      - overwrite       = true -> null
      - region          = "us-east-2" -> null
      - tags            = {
          - "name" = "GATEWAY_URL"
        } -> null
      - tags_all        = {
          - "name" = "GATEWAY_URL"
        } -> null
      - tier            = "Standard" -> null
      - type            = "SecureString" -> null
      - value           = (sensitive value) -> null
      - value_wo        = (write-only attribute) -> null
      - version         = 3 -> null
        # (2 unchanged attributes hidden)
    }

Plan: 2 to add, 5 to change, 4 to destroy.
╷
│ Warning: Deprecated Resource
│ 
│   with module.datadog.datadog_integration_aws.sandbox,
│   on modules/aws/datadog/main.tf line 118, in resource "datadog_integration_aws" "sandbox":
│  118: resource "datadog_integration_aws" "sandbox" {
│ 
│ **This resource is deprecated - use the `datadog_integration_aws_account`
│ resource instead**:
│ https://registry.terraform.io/providers/DataDog/datadog/latest/docs/resources/integration_aws_account
╵
╷
│ Warning: Deprecated attribute
│ 
│   on .terraform/modules/datadog.datadog_log_forwarder/modules/log_forwarder/main.tf line 2, in locals:
│    2:   bucket_name = var.bucket_name != "" ? var.bucket_name : "datadog-forwarder-${data.aws_caller_identity.current.account_id}-${data.aws_region.current.name}"
│ 
│ The attribute "name" is deprecated. Refer to the provider documentation for
│ details.
│ 
│ (and 2 more similar warnings elsewhere)
╵
  • ▶️ To apply this plan, comment:
    atlantis apply -d infrastructure
  • 🚮 To delete this plan and lock, click here
  • 🔁 To plan this project again, comment:
    atlantis plan -d infrastructure

Plan: 2 to add, 5 to change, 4 to destroy.


  • ⏩ To apply all unapplied plans from this Pull Request, comment:
    atlantis apply
  • 🚮 To delete all plans and locks from this Pull Request, comment:
    atlantis unlock

… screens

- Added loading states to the Next and Done buttons in various screens (DoneScreen, LanguageScreen, LinksScreen, MediaScreen, SocialScreen, TextScreen) to enhance user experience during asynchronous operations.
- Updated button components to reflect loading states and prevent multiple submissions.
- Ensured that loading states are properly managed in the component state for better UI feedback.
- Removed dotenv and prisma from package.json as they are no longer needed in the project.
@nx-cloud
Copy link
Copy Markdown

nx-cloud bot commented Mar 18, 2026

View your CI Pipeline Execution ↗ for commit 8300c61

Command Status Duration Result
nx run player-e2e:e2e ✅ Succeeded 4s View ↗
nx run watch-e2e:e2e ✅ Succeeded 22s View ↗
nx run journeys-admin-e2e:e2e ✅ Succeeded 31s View ↗
nx run journeys-e2e:e2e ✅ Succeeded 28s View ↗
nx run resources-e2e:e2e ✅ Succeeded 18s View ↗
nx run watch-modern-e2e:e2e ✅ Succeeded 4s View ↗
nx run short-links-e2e:e2e ✅ Succeeded 4s View ↗
nx run videos-admin-e2e:e2e ✅ Succeeded 4s View ↗
Additional runs (24) ✅ Succeeded ... View ↗

☁️ Nx Cloud last updated this comment at 2026-04-02 21:48:37 UTC

@nx-cloud
Copy link
Copy Markdown

nx-cloud bot commented Mar 18, 2026

View your CI Pipeline Execution ↗ for commit c052613

Command Status Duration Result
nx run-many --target=upload-sourcemaps --projec... ✅ Succeeded 3s View ↗
nx run-many --target=upload-sourcemaps --projec... ✅ Succeeded <1s View ↗
nx run-many --target=deploy --projects=docs ✅ Succeeded 37s View ↗
nx run-many --target=deploy --projects=short-links ✅ Succeeded 30s View ↗

☁️ Nx Cloud last updated this comment at 2026-03-19 01:03:29 UTC

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 18, 2026

Warnings
⚠️ ❗ Big PR (3804 changes)

(change count - 3804): Pull Request size seems relatively large. If Pull Request contains multiple changes, split each into separate PR will helps faster, easier review.

Generated by 🚫 dangerJS against 8300c61

@github-actions github-actions bot temporarily deployed to Preview - watch March 19, 2026 00:00 Inactive
@github-actions github-actions bot temporarily deployed to Preview - resources March 19, 2026 00:00 Inactive
mikeallisonJS and others added 4 commits March 26, 2026 20:26
… tracking

This commit updates the LanguageScreen component to improve team selection functionality for users. It introduces logic to set the last active team ID and ensures that the team selection reflects the user's current context. Additionally, it modifies the JourneyCustomizeTeamSelect component to streamline team selection handling. The changes enhance the user experience by providing better team management and integration with the journey duplication process.
This commit enhances the LanguageScreen component by integrating the `journeyCustomizationDescriptionTranslate` mutation. It adds logic to automatically translate the journey description when the user's locale differs from the selected journey language during the duplication process. This improvement streamlines the user experience and ensures accurate localization of journey descriptions.
This commit updates the LanguageScreen component to include error handling for the description translation process. It ensures that navigation is not blocked if the translation fails, improving the user experience during journey duplication.
@blacksmith-sh

This comment has been minimized.

@stage-branch-merger
Copy link
Copy Markdown

I see you added the "on stage" label, I'll get this merged to the stage branch!

@stage-branch-merger
Copy link
Copy Markdown

Merge conflict attempting to merge this into stage. Please fix manually.

…ation handling

This commit modifies the quickStartTemplate function to accept a reset action, allowing for improved customization of journey templates. It enhances the customization description with additional fields and updates the creation of customization fields to use createMany for efficiency. Additionally, it refines the handling of curly braces in translation processes to ensure accurate preservation of template variables. These changes streamline the journey creation process and improve localization capabilities.
This update modifies the `resolveJourneyCustomizationString` function to support both "{{ key }}" and "{{ key: value }}" syntaxes. It allows for inline values to be resolved when no matching field exists, improving the flexibility of customization templates. Additionally, test cases have been updated to reflect these changes, ensuring accurate resolution of both quoted and unquoted inline values.
@stage-branch-merger
Copy link
Copy Markdown

Merge conflict attempting to merge this into stage. Please fix manually.

This update clarifies the translation instructions by removing redundant examples and emphasizing the importance of preserving template variables within curly braces. The changes aim to enhance the understanding of translation processes while maintaining cultural appropriateness and conciseness in UI contexts.
@stage-branch-merger
Copy link
Copy Markdown

Merge conflict attempting to merge this into stage. Please fix manually.

This update introduces the `translateValue` function to handle the translation of customization field values alongside the journey customization description. It modifies the `journeyCustomizationDescriptionTranslate` mutation to include logic for translating field values when a description is absent or empty. Additionally, the schema has been updated to include `journeyCustomizationFields` in relevant queries, improving the overall translation capabilities for journey customizations.
…ation

This update modifies the `videoPublishChildren` mutation to include additional parameters: `mode` and `dryRun`, allowing for more flexible publishing options. The result type has been updated to reflect changes in published video IDs and counts, and a new type for unpublished videos has been introduced to handle validation failures. Additionally, the `videoPublishChildrenAndLanguages` mutation has been removed to streamline the API. Tests have been updated accordingly to ensure proper functionality.
… videoPublishChildren types

This update removes the `videoPublishChildrenAndLanguages` mutation to simplify the API. The `videoPublishChildren` mutation has been enhanced with new parameters: `mode` and `dryRun`, and the result type has been updated to include additional fields for published videos and validation failures. A new type for unpublished videos has also been introduced, improving error handling during the publishing process.
@stage-branch-merger
Copy link
Copy Markdown

Merge conflict attempting to merge this into stage. Please fix manually.

@stage-branch-merger
Copy link
Copy Markdown

Merge conflict attempting to merge this into stage. Please fix manually.

@blacksmith-sh

This comment has been minimized.

mikeallisonJS and others added 2 commits April 2, 2026 21:35
- Introduced batch translation for customization fields and descriptions to improve efficiency.
- Updated translation prompts to ensure cultural appropriateness and preserve specific formats.
- Refactored translation logic to handle multiple values in a single AI call, reducing the number of requests.
- Added new schemas for batch translation responses and improved error handling in translation processes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants