Skip to content

fix(front): settings skeleton, app-detail header & empty favorites#21209

Merged
FelixMalfait merged 5 commits into
mainfrom
fix/settings-skeleton-loader
Jun 4, 2026
Merged

fix(front): settings skeleton, app-detail header & empty favorites#21209
FelixMalfait merged 5 commits into
mainfrom
fix/settings-skeleton-loader

Conversation

@FelixMalfait

@FelixMalfait FelixMalfait commented Jun 4, 2026

Copy link
Copy Markdown
Member

Three small post-redesign UI fixes. Each is an independent commit, so they can be split into separate PRs if preferred.

1. Settings loading skeleton — match the rounded-card layout

The redesign (#21131) moved settings chrome into a rounded card (SettingsPageLayout: bordered header with breadcrumb + centered title, optional secondary bar, 760px body), but SettingsSkeletonLoader still rendered the old flat PageHeader + PageBody — so pages painted as a full-width flat bar then snapped into the card.

  • SettingsSkeletonLoader now reproduces the card and reuses the real SettingsPageHeader + SettingsPageContainer, so the frame aligns by construction; the card CSS is replicated (not SettingsPageLayout) to avoid the layout's side effects (hotkeys, side panel, info banner).
  • It's composed with SettingsSectionSkeletonLoader so the loading body is identical whether or not chrome is present. Rule: no chrome on screen yet → full-page skeleton; chrome already on screen → body-only SettingsSectionSkeletonLoader (the admin Enterprise tab now uses it, matching its sibling tabs). A short comment on each component documents this.

2. Application detail header — pass a plain title

SettingsApplicationDetails / SettingsAvailableApplicationDetails passed a custom SettingsApplicationDetailTitle (avatar + name + multi-line description, fixed width) into SettingsPageLayout's centered single-line title slot, which broke the header. They now pass the app's display name like every other page. The available-app "unlisted" notice moves into the body as a reusable InlineBanner; the now-unused SettingsApplicationDetailTitle is removed.

3. Navigation — hide Favorites when empty

Always rendering the Favorites section (#21087) left a stray "Favorites" title above Workspace for users with no favorites. It now renders only when at least one favorite exists (redundant per-child guards dropped). Note: the "+ add favorite" entry point therefore appears once you have ≥1 favorite; the first favorite is created from a record/view as before.

Verification

  • nx typecheck twenty-front ✅ · oxlint + oxfmt --check on changed files ✅
  • i18n catalogs intentionally untouched — handled by the repo's separate i18n pipeline.

The settings redesign (#21131) moved the page chrome into a single
rounded card (SettingsPageLayout: a bordered header with breadcrumb and
centered title, an optional secondary bar, and the 760px body). The
loading skeleton was never updated, so it still rendered the old flat
PageHeader + PageBody — every settings page loaded as a full-width flat
bar and then snapped into the bordered card.

Rebuild SettingsSkeletonLoader to mirror the card chrome by reusing the
real SettingsPageHeader and SettingsPageContainer, and compose it with
the existing SettingsSectionSkeletonLoader so the loading body is
identical whether or not chrome is already present:

- SettingsSkeletonLoader = card chrome + SettingsSectionSkeletonLoader.
  Used when no settings chrome is on screen yet: the route-level Suspense
  fallback, or a page whose data-dependent title/breadcrumb can't render
  until its data has loaded.
- SettingsSectionSkeletonLoader = body only. Used for loading states
  inside an already-rendered page; the admin Enterprise tab now uses it,
  matching its sibling admin tabs instead of nesting a second card.

Document the rule on both components so they stay one composed pattern.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

No issues found across 3 files

Re-trigger cubic

SettingsApplicationDetails and SettingsAvailableApplicationDetails passed
a custom SettingsApplicationDetailTitle (avatar + name + multi-line
description block, fixed at OBJECT_SETTINGS_WIDTH) into SettingsPageLayout's
title slot. That slot is the centered, single-line title of the rounded-card
header, so the block overflowed and broke the header layout.

Pass the application's display name as the title, like every other settings
page. The available-app "unlisted" notice moves into the page body as an
InlineBanner so it is preserved. SettingsApplicationDetailTitle is now unused
and removed.
Always rendering the section (#21087) left a stray "Favorites" title above
the Workspace section for users with no favorites. Render the section only
when at least one favorite exists, and drop the now-redundant per-child
emptiness guards.
Comment thread packages/twenty-front/src/modules/settings/components/SettingsSkeletonLoader.tsx Outdated
@FelixMalfait FelixMalfait changed the title fix(settings): align loading skeleton with the rounded-card layout fix(front): settings skeleton, app-detail header & empty favorites Jun 4, 2026
@twenty-ci-bot-public

twenty-ci-bot-public Bot commented Jun 4, 2026

Copy link
Copy Markdown

🔍 Automated Pre-Review

No issues detected - This PR is ready for human review.


View details

Automated pre-review — human approval still required.

@twenty-ci-bot-public

twenty-ci-bot-public Bot commented Jun 4, 2026

Copy link
Copy Markdown

🚀 Preview Environment Ready!

Your preview environment is available at: https://mailed-timely-using-suffering.trycloudflare.com

This environment will automatically shut down after 5 hours.

@FelixMalfait FelixMalfait merged commit a3a44c8 into main Jun 4, 2026
98 checks passed
@FelixMalfait FelixMalfait deleted the fix/settings-skeleton-loader branch June 4, 2026 07:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant