Skip to content

Conversation

@Jondyr
Copy link
Member

@Jondyr Jondyr commented Nov 10, 2025

Description

Lazy loading of app routes. Makes loading individual pages not load the entire app.

Verification

  • Related issues are connected (if applicable)
  • Your code builds clean without any errors or warnings
  • Manual testing done (required)
  • Relevant automated test added (if you find this hard, leave it and we'll help out)

Summary by CodeRabbit

  • Improvements
    • Features now lazy-load to reduce initial load time and improve perceived performance.
    • A loading spinner is shown while features initialise, giving clearer feedback during navigation.
    • No functional or visual changes to existing components beyond loading behaviour.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 10, 2025

Walkthrough

Multiple UI feature components were converted from named exports to default exports; several index re-exports were removed. Tests were updated to use default imports. Routes were changed to lazy-load features via React.lazy and PageRoutes now wraps subapps with Suspense and a StudioPageSpinner fallback.

Changes

Cohort / File(s) Summary
Component Export Conversions
src/Designer/frontend/app-development/features/aiAssistant/AiAssistant.tsx, src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.tsx, src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.tsx, src/Designer/frontend/app-development/features/appSettings/AppSettings.tsx, src/Designer/frontend/app-development/features/overview/components/Overview.tsx, src/Designer/frontend/app-development/features/processEditor/ProcessEditor.tsx, src/Designer/frontend/app-development/features/textEditor/TextEditor.tsx, src/Designer/frontend/app-development/features/uiEditor/UiEditor.tsx
Converted from named exports to default exports and adjusted function declaration syntax; no internal logic changes.
Index File Updates / Re-exports Removed
src/Designer/frontend/app-development/features/aiAssistant/index.ts, src/Designer/frontend/app-development/features/appContentLibrary/index.ts, src/Designer/frontend/app-development/features/processEditor/index.ts
Removed public re-export statements; components are no longer re-exported from these index files.
Test Import Updates
src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx, src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.test.tsx, src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx, src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx, src/Designer/frontend/app-development/features/processEditor/ProcessEditor.test.tsx, src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx, src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
Updated tests to import components as default imports to match changed exports.
Routing — Lazy Loading
src/Designer/frontend/app-development/router/routes.tsx
Replaced static imports with React.lazy(() => import(...)) for feature components; routing map preserved.
Route Rendering — Suspense Fallback
src/Designer/frontend/app-development/router/PageRoutes.tsx
Wrapped dynamically loaded subapps in React.Suspense with StudioPageSpinner fallback; added Suspense and spinner imports.

Sequence Diagram(s)

sequenceDiagram
    participant Router as Router
    participant PageRoutes as PageRoutes
    participant Suspense as Suspense (React.Suspense)
    participant Spinner as StudioPageSpinner
    participant Subapp as Lazy-loaded Subapp

    Router->>PageRoutes: match route, request subapp
    PageRoutes->>Suspense: render <Suspense fallback=Spinner>
    Suspense->>Spinner: display fallback UI
    Note over Suspense,Subapp: React.lazy triggers dynamic import
    Suspense->>Subapp: dynamic import completes -> mount
    Subapp-->>PageRoutes: rendered subapp content
    Suspense-->>PageRoutes: remove fallback
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Review focus: consistent export refactor across multiple components and corresponding test import updates.
  • Pay extra attention to:
    • All import sites (other modules/tests) updated to default imports.
    • Lazy-loading correctness in routes.tsx and interaction with any error boundaries.
    • Suspense fallback behaviour in PageRoutes.tsx.

"I hopped through code with ears held high,
Exports made simple beneath the sky.
Lazy loads hum, a spinner's bright cheer,
Small changes, big smiles — a rabbit's small cheer. 🐇"

Pre-merge checks and finishing touches

✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: lazy app routes' clearly summarises the main change—implementing lazy loading of app routes—which aligns with the substantial refactoring across multiple files.
Description check ✅ Passed The description is mostly complete, following the template with all required sections populated. However, automated tests were not added, though this is marked as optional per the template.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/lazy-app-routes

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 88cc088 and 21e2261.

📒 Files selected for processing (9)
  • src/Designer/frontend/app-development/features/aiAssistant/index.ts (0 hunks)
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/processEditor/ProcessEditor.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/processEditor/index.ts (0 hunks)
  • src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx (1 hunks)
💤 Files with no reviewable changes (2)
  • src/Designer/frontend/app-development/features/processEditor/index.ts
  • src/Designer/frontend/app-development/features/aiAssistant/index.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx
  • src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.test.tsx
  • src/Designer/frontend/app-development/features/processEditor/ProcessEditor.test.tsx
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx
🧰 Additional context used
🧠 Learnings (11)
📓 Common learnings
Learnt from: mirkoSekulic
Repo: Altinn/altinn-studio PR: 16095
File: src/App/app-template-dotnet/src/App/models/model.cs:10-29
Timestamp: 2025-08-15T05:53:32.529Z
Learning: When moving app templates in Altinn Studio, mirkoSekulic prefers to keep the PR scope strictly limited to the move operation itself, with all content changes (including code quality improvements, naming convention fixes, and attribute cleanup) deferred to separate PRs for better maintainability and atomic changes.
Learnt from: framitdavid
Repo: Altinn/altinn-studio PR: 16372
File: src/Designer/frontend/libs/studio-components/src/components/index.ts:34-34
Timestamp: 2025-09-23T08:53:19.508Z
Learning: In the Altinn Studio codebase, when moving components from studio-components-legacy to studio-components, the team prefers to handle the component migration and remaining import updates in separate PRs to maintain focused, atomic changes.
Learnt from: mirkoSekulic
Repo: Altinn/altinn-studio PR: 16191
File: .dockerignore:3-3
Timestamp: 2025-08-26T12:35:44.069Z
Learning: In the Altinn Studio repository, mirkoSekulic is implementing a phased directory restructuring approach where backend and testdata are moved first, followed by separate moves for readme, frontend, and development directories into the Designer directory. This ensures atomic changes and prevents path reference issues during the transition.
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 0
File: :0-0
Timestamp: 2025-09-10T12:02:06.348Z
Learning: In the Altinn Studio repository, the team convention is to remove irrelevant checkboxes from the PR template description rather than leaving them unmarked. This makes it clear that the author has intentionally considered each item and removed non-applicable ones, helping to avoid merging PRs with incomplete checklists.
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 16064
File: frontend/libs/studio-components/src/components/StudioCheckboxGroup/StudioGetCheckboxProps.ts:1-1
Timestamp: 2025-08-12T05:59:20.146Z
Learning: In the Altinn Studio codebase, deep exports from digdir/designsystemet-react should be avoided. The team prefers using shared wrappers for design system imports to prevent breakage from upstream internal path changes, but such refactoring should be done in separate PRs to maintain focused scope.
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 16064
File: frontend/libs/studio-components/src/components/StudioCheckboxGroup/StudioGetCheckboxProps.ts:1-1
Timestamp: 2025-08-12T06:09:55.275Z
Learning: In the Altinn Studio codebase, the preferred approach for eliminating dependencies on deep imports from digdir/designsystemet-react is to make the code completely independent of deep imports rather than using shared wrappers. This approach would eliminate the need for import path adjustments during future Design System package updates.
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 16064
File: frontend/libs/studio-components/src/components/StudioCheckboxGroup/StudioGetCheckboxProps.ts:1-1
Timestamp: 2025-08-12T06:09:55.275Z
Learning: In the Altinn Studio codebase, the preferred approach for eliminating dependencies on deep imports from digdir/designsystemet-react is to make the code completely independent of deep imports rather than using shared wrappers. This approach would eliminate the need for import path adjustments during future Design System package updates.
Learnt from: JamalAlabdullah
Repo: Altinn/altinn-studio PR: 16518
File: src/Designer/frontend/libs/studio-components/src/components/StudioToggleableTextfieldSchema/StudioToggleableTextfieldSchema.stories.tsx:2-3
Timestamp: 2025-10-06T17:51:23.307Z
Learning: Altinn/altinn-studio: In Storybook stories (*.stories.tsx) under Designer/frontend libs, the project convention is to import types (Meta, StoryFn/StoryObj) from 'storybook/react-vite' rather than 'storybook/react'. Prefer 'storybook/react-vite' in future reviews for consistency.
Learnt from: cammiida
Repo: Altinn/altinn-studio PR: 16877
File: src/App/frontend/lighthouse-auth.mjs:62-64
Timestamp: 2025-11-03T19:01:47.721Z
Learning: In Altinn Studio's app-frontend testing setup, the component-library test app (located at src/test/apps/component-library/App) serves as the backend, while the frontend is served separately via webpack dev server (started with 'yarn run start' from src/App/frontend). These are two distinct layers that work together during Lighthouse CI testing.
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/**/*.test.{ts,tsx} : In tests that require form layout context, use `renderWithProviders` from `src/test/renderWithProviders.tsx`
Learnt from: mgunnerud
Repo: Altinn/altinn-studio PR: 16187
File: frontend/resourceadm/components/ResourcePageInputs/ResourceSwitchInput.tsx:3-3
Timestamp: 2025-08-25T13:55:27.042Z
Learning: In the Altinn Studio codebase, when migrating from studio/components-legacy to studio/components, PRs should focus only on components that have available replacements in the new package. Components without new implementations should remain in the legacy package until replacements are available, supporting an incremental migration approach.
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/**/*.test.{ts,tsx} : In tests that require form layout context, use `renderWithProviders` from `src/test/renderWithProviders.tsx`

Applied to files:

  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/layout/*/{config.ts,Component.tsx,index.tsx,config.generated.ts} : Layout components must follow the standardized structure: include `config.ts`, `Component.tsx`, `index.tsx`, and generated `config.generated.ts` in each `src/layout/<Component>/` directory

Applied to files:

  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx
  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
📚 Learning: 2025-10-06T17:51:23.307Z
Learnt from: JamalAlabdullah
Repo: Altinn/altinn-studio PR: 16518
File: src/Designer/frontend/libs/studio-components/src/components/StudioToggleableTextfieldSchema/StudioToggleableTextfieldSchema.stories.tsx:2-3
Timestamp: 2025-10-06T17:51:23.307Z
Learning: Altinn/altinn-studio: In Storybook stories (*.stories.tsx) under Designer/frontend libs, the project convention is to import types (Meta, StoryFn/StoryObj) from 'storybook/react-vite' rather than 'storybook/react'. Prefer 'storybook/react-vite' in future reviews for consistency.

Applied to files:

  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/__mocks__/** : Mock external dependencies under `src/__mocks__/`

Applied to files:

  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
📚 Learning: 2025-10-28T20:54:18.494Z
Learnt from: JamalAlabdullah
Repo: Altinn/altinn-studio PR: 16787
File: src/Designer/frontend/packages/ux-editor-v3/src/components/toolbar/RuleModal.test.tsx:70-70
Timestamp: 2025-10-28T20:54:18.494Z
Learning: Test inconsistencies in the ux-editor-v3 package do not need to be fixed, as indicated by the maintainer for the file `src/Designer/frontend/packages/ux-editor-v3/src/components/toolbar/RuleModal.test.tsx`.

Applied to files:

  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
📚 Learning: 2025-11-03T19:01:47.721Z
Learnt from: cammiida
Repo: Altinn/altinn-studio PR: 16877
File: src/App/frontend/lighthouse-auth.mjs:62-64
Timestamp: 2025-11-03T19:01:47.721Z
Learning: In Altinn Studio's app-frontend testing setup, the component-library test app (located at src/test/apps/component-library/App) serves as the backend, while the frontend is served separately via webpack dev server (started with 'yarn run start' from src/App/frontend). These are two distinct layers that work together during Lighthouse CI testing.

Applied to files:

  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/**/*.{ts,tsx} : Avoid using `any` and unnecessary type assertions (`as Type`); prefer precise types and refactor existing casts to improve TypeScript safety

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
📚 Learning: 2025-09-25T05:56:34.552Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/backend/CLAUDE.md:0-0
Timestamp: 2025-09-25T05:56:34.552Z
Learning: Applies to src/App/backend/test/Altinn.App.Core.Tests/Features/**/*.cs : Add corresponding tests mirroring features under test/Altinn.App.Core.Tests/Features

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/**/*.module.css : Use CSS Modules for component styling; follow the `*.module.css` naming convention

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
📚 Learning: 2025-08-08T13:24:30.117Z
Learnt from: nkylstad
Repo: Altinn/altinn-studio PR: 0
File: :0-0
Timestamp: 2025-08-08T13:24:30.117Z
Learning: In Altinn/altinn-studio PR reviews, when unit tests need React Query/TanStack Query data, prefer seeding with QueryClient.setQueryData over rendering/mocking use…Query hooks and waiting for isSuccess. Flag patterns like renderHookWithMockStore(() => use…Query(...)) and waitFor(() => expect(result.current.isSuccess).toBe(true)) and recommend the simpler setQueryData approach. Cite the internal Confluence guideline on component tests and the best-practice example in useAddItemToLayoutMutation.test.ts (lines updated 08.08.2025).

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
⏰ 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). (4)
  • GitHub Check: CodeQL
  • GitHub Check: Testing
  • GitHub Check: Typechecking and linting
  • GitHub Check: Build environment and run e2e test
🔇 Additional comments (3)
src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx (1)

3-3: LGTM! Import correctly updated to support lazy loading.

The change from a named import to a default import aligns with the component's conversion to a default export, which is necessary for React.lazy() compatibility as part of the lazy loading implementation.

src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx (1)

3-3: LGTM! Import correctly updated to default export.

The import statement has been properly updated to reflect the conversion of AppSettings to a default export, which supports the PR's lazy loading implementation.

src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx (1)

8-8: LGTM! Import updated to match default export.

The import correctly reflects the component's conversion to a default export, supporting the lazy loading implementation. The test usage remains valid and no behavioral changes are introduced.


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.

@github-actions github-actions bot added area/process Area: Related to app process (e.g. signing, receipt, fill inn, payment, etc). area/text-editor Area: Related to creating, translating and editing texts. area/app-deploy Area: Related to deploying apps from Altinn Studio to Altinn Apps. skip-releasenotes Issues that do not make sense to list in our release notes area/overview Area: Related to the overview page frontend solution/studio/designer labels Nov 10, 2025
@Jondyr Jondyr moved this to 👷 In progress in Team Altinn Studio Nov 10, 2025
@Jondyr Jondyr self-assigned this Nov 10, 2025
@Jondyr Jondyr added the squad/utforming Issues that belongs to the named squad. label Nov 10, 2025
@Jondyr Jondyr force-pushed the feat/lazy-app-routes branch from 8e15a1c to 88cc088 Compare November 10, 2025 08:22
@codecov
Copy link

codecov bot commented Nov 10, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 96.19%. Comparing base (f63ea9c) to head (21e2261).
⚠️ Report is 207 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff            @@
##             main   #16931    +/-   ##
========================================
  Coverage   96.19%   96.19%            
========================================
  Files        2447     2384    -63     
  Lines       30790    30380   -410     
  Branches     3544     3494    -50     
========================================
- Hits        29618    29225   -393     
+ Misses        864      852    -12     
+ Partials      308      303     -5     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@Jondyr Jondyr marked this pull request as ready for review November 10, 2025 10:20
Copy link
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: 1

🧹 Nitpick comments (1)
src/Designer/frontend/app-development/router/PageRoutes.tsx (1)

40-44: Consider providing a descriptive spinner title.

The Suspense wrapper correctly handles lazy-loaded components, but the empty spinnerTitle provides no feedback to users during chunk loading. Consider using a generic loading message.

-              <Suspense fallback={<StudioPageSpinner spinnerTitle='' />}>
+              <Suspense fallback={<StudioPageSpinner spinnerTitle={t('general.loading')} />}>
                 <route.subapp />
               </Suspense>

Note: This would require adding useTranslation hook if not already present in scope.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c422381 and 88cc088.

📒 Files selected for processing (19)
  • src/Designer/frontend/app-development/features/aiAssistant/AiAssistant.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/aiAssistant/index.ts (0 hunks)
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/appContentLibrary/index.ts (0 hunks)
  • src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/appSettings/AppSettings.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/overview/components/Overview.tsx (2 hunks)
  • src/Designer/frontend/app-development/features/processEditor/ProcessEditor.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/processEditor/ProcessEditor.tsx (2 hunks)
  • src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/textEditor/TextEditor.tsx (2 hunks)
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx (1 hunks)
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.tsx (2 hunks)
  • src/Designer/frontend/app-development/router/PageRoutes.tsx (3 hunks)
  • src/Designer/frontend/app-development/router/routes.tsx (1 hunks)
💤 Files with no reviewable changes (2)
  • src/Designer/frontend/app-development/features/aiAssistant/index.ts
  • src/Designer/frontend/app-development/features/appContentLibrary/index.ts
🧰 Additional context used
🧠 Learnings (23)
📓 Common learnings
Learnt from: mirkoSekulic
Repo: Altinn/altinn-studio PR: 16095
File: src/App/app-template-dotnet/src/App/models/model.cs:10-29
Timestamp: 2025-08-15T05:53:32.529Z
Learning: When moving app templates in Altinn Studio, mirkoSekulic prefers to keep the PR scope strictly limited to the move operation itself, with all content changes (including code quality improvements, naming convention fixes, and attribute cleanup) deferred to separate PRs for better maintainability and atomic changes.
Learnt from: framitdavid
Repo: Altinn/altinn-studio PR: 16372
File: src/Designer/frontend/libs/studio-components/src/components/index.ts:34-34
Timestamp: 2025-09-23T08:53:19.508Z
Learning: In the Altinn Studio codebase, when moving components from studio-components-legacy to studio-components, the team prefers to handle the component migration and remaining import updates in separate PRs to maintain focused, atomic changes.
Learnt from: mirkoSekulic
Repo: Altinn/altinn-studio PR: 16191
File: .dockerignore:3-3
Timestamp: 2025-08-26T12:35:44.069Z
Learning: In the Altinn Studio repository, mirkoSekulic is implementing a phased directory restructuring approach where backend and testdata are moved first, followed by separate moves for readme, frontend, and development directories into the Designer directory. This ensures atomic changes and prevents path reference issues during the transition.
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/backend/CLAUDE.md:0-0
Timestamp: 2025-09-25T05:56:34.552Z
Learning: Applies to src/App/backend/src/Altinn.App.Core/Features/**/*.cs : New features should live under src/Altinn.App.Core/Features with clear responsibility, DI registration, and telemetry
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/**/*.test.{ts,tsx} : In tests that require form layout context, use `renderWithProviders` from `src/test/renderWithProviders.tsx`
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 16064
File: frontend/libs/studio-components/src/components/StudioCheckboxGroup/StudioGetCheckboxProps.ts:1-1
Timestamp: 2025-08-12T05:59:20.146Z
Learning: In the Altinn Studio codebase, deep exports from digdir/designsystemet-react should be avoided. The team prefers using shared wrappers for design system imports to prevent breakage from upstream internal path changes, but such refactoring should be done in separate PRs to maintain focused scope.
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/layout/*/{config.ts,Component.tsx,index.tsx,config.generated.ts} : Layout components must follow the standardized structure: include `config.ts`, `Component.tsx`, `index.tsx`, and generated `config.generated.ts` in each `src/layout/<Component>/` directory

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.tsx
  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
  • src/Designer/frontend/app-development/router/routes.tsx
  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx
📚 Learning: 2025-10-13T13:22:34.098Z
Learnt from: ErlingHauan
Repo: Altinn/altinn-studio PR: 16572
File: src/Designer/frontend/libs/studio-assistant/src/components/ChatColumn/Messages/Messages.tsx:15-17
Timestamp: 2025-10-13T13:22:34.098Z
Learning: In the studio-assistant chat interface (src/Designer/frontend/libs/studio-assistant), messages are always displayed in the same order and are not reordered, so using array index as the React key in the Messages component is acceptable.

Applied to files:

  • src/Designer/frontend/app-development/features/aiAssistant/AiAssistant.tsx
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/**/*.test.{ts,tsx} : In tests that require form layout context, use `renderWithProviders` from `src/test/renderWithProviders.tsx`

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
  • src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.test.tsx
  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx
  • src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
  • src/Designer/frontend/app-development/features/processEditor/ProcessEditor.test.tsx
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx
📚 Learning: 2025-10-06T17:51:23.307Z
Learnt from: JamalAlabdullah
Repo: Altinn/altinn-studio PR: 16518
File: src/Designer/frontend/libs/studio-components/src/components/StudioToggleableTextfieldSchema/StudioToggleableTextfieldSchema.stories.tsx:2-3
Timestamp: 2025-10-06T17:51:23.307Z
Learning: Altinn/altinn-studio: In Storybook stories (*.stories.tsx) under Designer/frontend libs, the project convention is to import types (Meta, StoryFn/StoryObj) from 'storybook/react-vite' rather than 'storybook/react'. Prefer 'storybook/react-vite' in future reviews for consistency.

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx
  • src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.tsx
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/**/*.{ts,tsx} : Avoid using `any` and unnecessary type assertions (`as Type`); prefer precise types and refactor existing casts to improve TypeScript safety

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/**/*.module.css : Use CSS Modules for component styling; follow the `*.module.css` naming convention

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.tsx
📚 Learning: 2025-09-25T05:56:34.552Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/backend/CLAUDE.md:0-0
Timestamp: 2025-09-25T05:56:34.552Z
Learning: Applies to src/App/backend/test/Altinn.App.Core.Tests/Features/**/*.cs : Add corresponding tests mirroring features under test/Altinn.App.Core.Tests/Features

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
📚 Learning: 2025-09-24T07:36:20.665Z
Learnt from: CR
Repo: Altinn/altinn-studio PR: 0
File: src/App/frontend/CLAUDE.md:0-0
Timestamp: 2025-09-24T07:36:20.665Z
Learning: Applies to src/App/frontend/src/__mocks__/** : Mock external dependencies under `src/__mocks__/`

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
  • src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx
📚 Learning: 2025-08-08T13:24:30.117Z
Learnt from: nkylstad
Repo: Altinn/altinn-studio PR: 0
File: :0-0
Timestamp: 2025-08-08T13:24:30.117Z
Learning: In Altinn/altinn-studio PR reviews, when unit tests need React Query/TanStack Query data, prefer seeding with QueryClient.setQueryData over rendering/mocking use…Query hooks and waiting for isSuccess. Flag patterns like renderHookWithMockStore(() => use…Query(...)) and waitFor(() => expect(result.current.isSuccess).toBe(true)) and recommend the simpler setQueryData approach. Cite the internal Confluence guideline on component tests and the best-practice example in useAddItemToLayoutMutation.test.ts (lines updated 08.08.2025).

Applied to files:

  • src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx
  • src/Designer/frontend/app-development/features/processEditor/ProcessEditor.test.tsx
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx
📚 Learning: 2025-08-12T06:09:55.275Z
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 16064
File: frontend/libs/studio-components/src/components/StudioCheckboxGroup/StudioGetCheckboxProps.ts:1-1
Timestamp: 2025-08-12T06:09:55.275Z
Learning: In the Altinn Studio codebase, the preferred approach for eliminating dependencies on deep imports from digdir/designsystemet-react is to make the code completely independent of deep imports rather than using shared wrappers. This approach would eliminate the need for import path adjustments during future Design System package updates.

Applied to files:

  • src/Designer/frontend/app-development/router/routes.tsx
📚 Learning: 2025-08-12T05:59:20.146Z
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 16064
File: frontend/libs/studio-components/src/components/StudioCheckboxGroup/StudioGetCheckboxProps.ts:1-1
Timestamp: 2025-08-12T05:59:20.146Z
Learning: In the Altinn Studio codebase, deep exports from digdir/designsystemet-react should be avoided. The team prefers using shared wrappers for design system imports to prevent breakage from upstream internal path changes, but such refactoring should be done in separate PRs to maintain focused scope.

Applied to files:

  • src/Designer/frontend/app-development/router/routes.tsx
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.tsx
📚 Learning: 2025-01-13T12:57:14.239Z
Learnt from: mirkoSekulic
Repo: Altinn/altinn-studio PR: 14408
File: backend/tests/Designer.Tests/DbIntegrationTests/DeploymentEntityRepository/CreateIntegrationTests.cs:32-34
Timestamp: 2025-01-13T12:57:14.239Z
Learning: The DeploymentType feature in Designer is being implemented in phases. The initial implementation (PR #14408) only includes the Deploy type as default value, with Decommission functionality planned for future PRs.

Applied to files:

  • src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.tsx
📚 Learning: 2025-10-28T20:54:18.494Z
Learnt from: JamalAlabdullah
Repo: Altinn/altinn-studio PR: 16787
File: src/Designer/frontend/packages/ux-editor-v3/src/components/toolbar/RuleModal.test.tsx:70-70
Timestamp: 2025-10-28T20:54:18.494Z
Learning: Test inconsistencies in the ux-editor-v3 package do not need to be fixed, as indicated by the maintainer for the file `src/Designer/frontend/packages/ux-editor-v3/src/components/toolbar/RuleModal.test.tsx`.

Applied to files:

  • src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx
  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
📚 Learning: 2025-09-26T12:03:51.850Z
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 0
File: :0-0
Timestamp: 2025-09-26T12:03:51.850Z
Learning: In PR #16443, TomasEng clarified that the ExpressionTexts type in studio/components does not require additional keys like dataModel, resource, or missingDataModelLabel that were suggested in a review comment. TypeScript compilation would catch any missing required properties, confirming the migration is correctly implemented.

Applied to files:

  • src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx
📚 Learning: 2025-09-26T12:03:56.908Z
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 0
File: :0-0
Timestamp: 2025-09-26T12:03:56.908Z
Learning: In the Altinn Studio codebase, when reviewing migration from studio/components-legacy to studio/components for the StudioExpression component, the ExpressionTexts type interface does not require additional keys like `dataModel`, `resource`, or `missingDataModelLabel`. TypeScript compilation will catch any missing required properties, so successful builds indicate proper type compliance.

Applied to files:

  • src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx
📚 Learning: 2025-07-03T14:54:51.389Z
Learnt from: mgunnerud
Repo: Altinn/altinn-studio PR: 15826
File: frontend/resourceadm/components/ResourcePageInputs/ResourceLanguageTextField.tsx:95-95
Timestamp: 2025-07-03T14:54:51.389Z
Learning: The StudioTextfield component at frontend/libs/studio-components/src/components/StudioTextfield/StudioTextfield.tsx has a typing limitation where it only accepts `Ref<HTMLInputElement>` even when rendering textarea elements (when multiline=true). This creates a type mismatch between the ref type and the actual element type, requiring workarounds like removing ref props when both input and textarea elements need to be supported.

Applied to files:

  • src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx
📚 Learning: 2025-11-03T18:58:18.996Z
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 16876
File: src/Designer/frontend/libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListsPage/CodeListsPage.tsx:17-23
Timestamp: 2025-11-03T18:58:18.996Z
Learning: In src/Designer/frontend/libs/studio-content-library/src/ContentLibrary/LibraryBody/pages/CodeListsPage/CodeListsPage.tsx, the CodeListsPage component is intentionally an uncontrolled component where the codeLists prop only initializes state on mount and does not synchronize when the prop changes. This is because the createCodeListMap function generates random UUIDs for keys, making it impure. Re-calling it after the first render would reassign keys and significantly disrupt the UI (unmounting/remounting components). The component manages its own state for draft/editing purposes, and the prop is not expected to change to anything that doesn't correspond to the internal state.

Applied to files:

  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.tsx
📚 Learning: 2025-01-17T12:16:17.666Z
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 14429
File: frontend/app-development/features/appContentLibrary/utils/mapToCodeListDataList.ts:4-5
Timestamp: 2025-01-17T12:16:17.666Z
Learning: The `mapToCodeListDataList` function in frontend/app-development/features/appContentLibrary/utils/mapToCodeListDataList.ts expects `optionListDataList` to be set when called. Query failure cases that could result in undefined input are handled at a higher level.

Applied to files:

  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.tsx
📚 Learning: 2025-11-03T19:01:47.721Z
Learnt from: cammiida
Repo: Altinn/altinn-studio PR: 16877
File: src/App/frontend/lighthouse-auth.mjs:62-64
Timestamp: 2025-11-03T19:01:47.721Z
Learning: In Altinn Studio's app-frontend testing setup, the component-library test app (located at src/test/apps/component-library/App) serves as the backend, while the frontend is served separately via webpack dev server (started with 'yarn run start' from src/App/frontend). These are two distinct layers that work together during Lighthouse CI testing.

Applied to files:

  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx
  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx
📚 Learning: 2025-09-25T08:50:58.936Z
Learnt from: Jondyr
Repo: Altinn/altinn-studio PR: 16431
File: src/Designer/frontend/packages/ux-editor/src/converters/formLayoutConverters/externalLayoutToInternal.ts:28-33
Timestamp: 2025-09-25T08:50:58.936Z
Learning: The Altinn Studio codebase contains two parallel UX editor packages: `ux-editor` (current/newer) and `ux-editor-v3` (legacy). When reviewing code changes, need to distinguish between these versions as they have different API implementations, particularly around datamodel binding conversions.

Applied to files:

  • src/Designer/frontend/app-development/features/uiEditor/UiEditor.tsx
📚 Learning: 2025-10-24T08:37:15.119Z
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 0
File: :0-0
Timestamp: 2025-10-24T08:37:15.119Z
Learning: The `studio-content-library` package at `src/Designer/frontend/libs/studio-content-library` is a TypeScript library and does not require Python-style docstring coverage checks.

Applied to files:

  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx
📚 Learning: 2025-06-16T12:41:06.726Z
Learnt from: TomasEng
Repo: Altinn/altinn-studio PR: 15659
File: frontend/packages/ux-editor/src/components/config/editModal/EditOptions/OptionTabs/EditTab/CodeListDialog/CodeListDialog.test.tsx:145-151
Timestamp: 2025-06-16T12:41:06.726Z
Learning: In the Altinn Studio codebase, TomasEng has confirmed that using `expect(screen.getByRole('dialog')).toBeVisible` directly with `waitFor` is acceptable and equivalent to wrapping it in a function callback. This pattern is intentionally used in their testing setup.

Applied to files:

  • src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx
🧬 Code graph analysis (2)
src/Designer/frontend/app-development/router/routes.tsx (8)
src/Designer/frontend/app-development/features/overview/components/Overview.tsx (1)
  • Overview (12-46)
src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.tsx (1)
  • DeployPage (16-71)
src/Designer/frontend/app-development/features/processEditor/ProcessEditor.tsx (1)
  • ProcessEditor (26-136)
src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.tsx (1)
  • AppContentLibrary (41-78)
src/Designer/frontend/app-development/features/appSettings/AppSettings.tsx (1)
  • AppSettings (9-27)
src/Designer/frontend/app-development/features/textEditor/TextEditor.tsx (1)
  • TextEditor (18-70)
src/Designer/frontend/app-development/features/aiAssistant/AiAssistant.tsx (1)
  • AiAssistant (12-47)
src/Designer/frontend/app-development/features/uiEditor/UiEditor.tsx (1)
  • UiEditor (13-46)
src/Designer/frontend/app-development/features/processEditor/ProcessEditor.tsx (1)
src/Designer/frontend/packages/process-editor/src/ProcessEditor.tsx (1)
  • ProcessEditor (37-89)
⏰ 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: Testing
🔇 Additional comments (16)
src/Designer/frontend/app-development/features/aiAssistant/AiAssistant.tsx (1)

12-12: Export style change enables lazy loading.

The conversion to a default export is correct and necessary for React.lazy compatibility, supporting the lazy loading implementation mentioned in the PR objectives.

src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.tsx (1)

16-16: Export style change enables lazy loading.

The conversion to a default export is correct and necessary for React.lazy compatibility.

src/Designer/frontend/app-development/features/appSettings/AppSettings.tsx (1)

9-9: Export style change enables lazy loading.

The conversion to a default export is correct and necessary for React.lazy compatibility.

src/Designer/frontend/app-development/features/appSettings/AppSettings.test.tsx (1)

3-3: Test import correctly updated.

The import correctly reflects the default export change in AppSettings.tsx.

src/Designer/frontend/app-development/features/appPublish/pages/DeployPage.test.tsx (1)

3-3: Test import correctly updated.

The import correctly reflects the default export change in DeployPage.tsx.

src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.tsx (1)

41-41: Export style change enables lazy loading.

The conversion to a default export is correct and necessary for React.lazy compatibility.

src/Designer/frontend/app-development/features/processEditor/ProcessEditor.test.tsx (1)

3-3: Test import correctly updated.

The import correctly reflects the default export change in ProcessEditor.tsx.

src/Designer/frontend/app-development/features/uiEditor/UiEditor.test.tsx (1)

8-8: Test import correctly updated.

The import correctly reflects the default export change in UiEditor.tsx.

src/Designer/frontend/app-development/features/textEditor/TextEditor.test.tsx (1)

5-5: LGTM! Import updated to match default export.

The import style correctly reflects the TextEditor component's conversion to a default export, aligning with the lazy-loading implementation in the routing layer.

src/Designer/frontend/app-development/features/overview/components/Overview.test.tsx (1)

3-3: LGTM! Import correctly updated.

The default import aligns with the Overview component's new default export and supports the lazy-loading strategy.

src/Designer/frontend/app-development/features/appContentLibrary/AppContentLibrary.test.tsx (1)

3-3: LGTM! Import style updated correctly.

The default import properly reflects AppContentLibrary's conversion to a default export, supporting lazy loading in routes.

src/Designer/frontend/app-development/router/PageRoutes.tsx (1)

1-1: LGTM! Suspense imports added for lazy loading.

The Suspense and StudioPageSpinner imports are correctly added to support asynchronous component loading.

Also applies to: 22-22

src/Designer/frontend/app-development/features/overview/components/Overview.tsx (1)

12-12: LGTM! Export converted to default for lazy loading.

The conversion from named export to default export enables React.lazy dynamic imports. The component logic remains unchanged.

Also applies to: 46-46

src/Designer/frontend/app-development/router/routes.tsx (1)

1-17: Excellent implementation of lazy loading!

The conversion to React.lazy with dynamic imports enables code splitting, so each route's code is only loaded when needed. This should significantly improve initial bundle size and page load performance.

All components correctly use default exports (as verified by the corresponding component file changes in this PR), satisfying React.lazy requirements.

src/Designer/frontend/app-development/features/uiEditor/UiEditor.tsx (1)

13-13: LGTM! Export converted to default for lazy loading.

The conversion to default export enables the component to be dynamically imported via React.lazy in the routing layer, supporting code splitting.

Also applies to: 46-46

src/Designer/frontend/app-development/features/textEditor/TextEditor.tsx (1)

18-18: LGTM! Export converted to default for lazy loading.

The default export enables React.lazy dynamic imports, allowing the TextEditor to be loaded on demand. Component logic remains unchanged.

Also applies to: 70-70

import { OnProcessTaskRemoveHandler } from './handlers/OnProcessTaskRemoveHandler';

export const ProcessEditor = (): React.ReactElement => {
export default function ProcessEditor(): React.ReactElement {
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Export change correctly enables lazy loading.

The conversion from named arrow function export to default function export is appropriate for enabling React.lazy() dynamic imports as per the PR objectives. The syntax is correct.

However, this is a breaking change for any code that imports this component using a named import.

Run the following script to verify that all imports have been updated to default imports and that no stale named imports remain:

Also applies to: 136-136


🏁 Script executed:

#!/bin/bash
# Description: Verify all imports of ProcessEditor from this file use default import syntax.
# Expected: Only default imports or dynamic imports (React.lazy).

# Search for any remaining named imports of ProcessEditor from this specific file path
rg -n --type=ts --type=tsx -C3 "import\s*\{\s*ProcessEditor\s*\}" | rg -C3 "features/processEditor"

# Also check for any index file that might still be re-exporting this component
fd -e ts -e tsx "index" -x rg -l "ProcessEditor" {} | xargs rg -n "export.*ProcessEditor.*from.*['\"]\.\/ProcessEditor"

Length of output: 179


🏁 Script executed:

#!/bin/bash
# Description: Verify all imports of ProcessEditor from features/processEditor directory.
# Fixed version with correct rg syntax and file types.

echo "=== Searching for named imports of ProcessEditor ==="
rg -n --type=ts -C3 'import\s*\{\s*ProcessEditor\s*\}' 

echo ""
echo "=== Searching for default imports of ProcessEditor ==="
rg -n --type=ts -C3 'import.*ProcessEditor.*from' | grep -i "features/processEditor"

echo ""
echo "=== Searching for React.lazy imports of ProcessEditor ==="
rg -n --type=ts -C3 'React\.lazy.*ProcessEditor'

echo ""
echo "=== Searching for index files exporting ProcessEditor ==="
fd -e ts -e js "index" | xargs rg -n "export.*ProcessEditor" 2>/dev/null || echo "No index file exports found"

Length of output: 3276


🏁 Script executed:

#!/bin/bash
# Description: Find where ProcessEditor is used, especially with React.lazy

echo "=== Searching for files importing from app-development/features/processEditor ==="
rg -n --type=ts -C3 "from.*['\"].*features/processEditor['\"]" | head -50

echo ""
echo "=== Searching for React.lazy usage in the codebase ==="
rg -n --type=ts 'React\.lazy' | head -30

echo ""
echo "=== Checking what imports the index.ts file ==="
rg -n --type=ts "from.*['\"].*features/processEditor/index['\"]" 

echo ""
echo "=== Looking at the index.ts file content ==="
cat "src/Designer/frontend/app-development/features/processEditor/index.ts"

Length of output: 1488


🏁 Script executed:

#!/bin/bash
# Description: Get exact import and usage of ProcessEditor in routes.tsx

echo "=== Full context around React.lazy(ProcessEditor) in routes.tsx ==="
sed -n '1,20p' "src/Designer/frontend/app-development/router/routes.tsx"

Length of output: 1147


🏁 Script executed:

#!/bin/bash
# Description: Confirm if index.ts file is imported anywhere

echo "=== Searching for imports from processEditor index file ==="
rg -n --type=ts "from.*['\"].*processEditor['\"]" | grep -v "ProcessEditor.tsx" | grep -v "ProcessEditor.test"

echo ""
echo "=== Checking all variants of index imports ==="
rg -n --type=ts "from.*['\"]app-development/features/processEditor['\"]"

Length of output: 107


Fix index.ts re-export to match new default export pattern.

The export style change to default function is correctly applied and routes.tsx correctly imports directly from the component file. However, src/Designer/frontend/app-development/features/processEditor/index.ts contains export * from './ProcessEditor', which cannot re-export default exports in ES modules and will break any code attempting to import via the index path.

Update the index file to:

export { default } from './ProcessEditor';

or alternatively:

export { default as ProcessEditor } from './ProcessEditor';
🤖 Prompt for AI Agents
In
src/Designer/frontend/app-development/features/processEditor/ProcessEditor.tsx
around line 26, the component was changed to a default export but the package
index re-export uses `export * from './ProcessEditor'`, which cannot re-export
default ES module exports; update
src/Designer/frontend/app-development/features/processEditor/index.ts to
explicitly re-export the default (for example use an `export { default } from
'./ProcessEditor'` or `export { default as ProcessEditor } from
'./ProcessEditor'`) so imports via the index path resolve correctly.

@Jondyr Jondyr force-pushed the feat/lazy-app-routes branch from 88cc088 to 21e2261 Compare November 10, 2025 11:40
@Jondyr Jondyr moved this from 👷 In progress to 🔎 In review in Team Altinn Studio Nov 12, 2025
@Jondyr Jondyr removed their assignment Nov 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/app-deploy Area: Related to deploying apps from Altinn Studio to Altinn Apps. area/overview Area: Related to the overview page area/process Area: Related to app process (e.g. signing, receipt, fill inn, payment, etc). area/text-editor Area: Related to creating, translating and editing texts. frontend skip-releasenotes Issues that do not make sense to list in our release notes solution/studio/designer squad/utforming Issues that belongs to the named squad.

Projects

Status: 🔎 In review

Development

Successfully merging this pull request may close these issues.

1 participant