fix(web): satisfy prettier and align the switcher layout spec after the upgrade control

Co-authored-by: multica-agent <[email protected]>
This commit is contained in:
Chin Rock
2026-10-21 08:06:42 +00:00
co-authored by multica-agent
parent fa2913a986
commit 61c59687c2
5 changed files with 32 additions and 11 deletions
@@ -70,7 +70,9 @@ import { Button } from '@/components/ui/button';
import WorkspaceSwitcher, {
OPEN_WORKSPACE_SETTINGS_EVENT,
} from '@/app/home/components/workspace-settings/WorkspaceSwitcher';
const CloudPlansDialog = lazy(() => import('@/app/home/components/workspace-settings/CloudPlansDialog'));
const CloudPlansDialog = lazy(
() => import('@/app/home/components/workspace-settings/CloudPlansDialog'),
);
import NewVersionDialog from '@/app/home/components/new-version-dialog/NewVersionDialog';
import SettingsDialog, {
SettingsSection,
@@ -44,7 +44,9 @@ export default function WorkspaceSwitcher({
aria-label={t('workspace.switchWorkspace')}
>
<Building2 className="size-4 shrink-0" />
<span className="max-w-[6rem] truncate">{currentWorkspace.workspace.name}</span>
<span className="max-w-[6rem] truncate">
{currentWorkspace.workspace.name}
</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="start" className="w-64 p-1.5">
+2 -1
View File
@@ -103,7 +103,8 @@ const jaJP = {
retentionHelp: '保存期間を過ぎた履歴は自動的に削除されます。',
credits: '毎月 {{count}} クレジット',
creditsLabel: 'モデルクレジット',
creditsHelp: '年払いでも、契約の各月にクレジットが付与されます。クレジットが不足しても、独自に設定したモデルプロバイダーを引き続き利用できます。',
creditsHelp:
'年払いでも、契約の各月にクレジットが付与されます。クレジットが不足しても、独自に設定したモデルプロバイダーを引き続き利用できます。',
platforms: '主要プラットフォームに対応',
excludedPlatforms: '対象外:{{platforms}}',
allPlatforms: '現在利用可能なすべてのプラットフォーム',
+2 -1
View File
@@ -99,7 +99,8 @@ const zhHans = {
retentionHelp: '超过保留时长的消息记录会自动清理。',
credits: '每月赠送 {{count}} 积分',
creditsLabel: '模型积分',
creditsHelp: '每个订阅月自动发放,年付计划同样按月发放。积分用尽后,仍可接入自行配置的模型供应商继续使用。',
creditsHelp:
'每个订阅月自动发放,年付计划同样按月发放。积分用尽后,仍可接入自行配置的模型供应商继续使用。',
platforms: '支持主流平台',
excludedPlatforms: '不支持:{{platforms}}',
allPlatforms: '支持当前所有可用平台',
+22 -7
View File
@@ -55,6 +55,11 @@ for (const scenario of [
});
await expect(trigger).toHaveCount(scenario === 'singleton-local' ? 0 : 1);
if (scenario === 'singleton-local') return;
const upgrade = page.getByRole('button', {
name: 'Change or upgrade plan',
exact: true,
});
await expect(upgrade).toHaveCount(1);
const sidebar = page.locator('[data-slot="sidebar-inner"]');
const header = sidebar.locator('[data-slot="sidebar-header"]');
const home = sidebar.getByText('Home', { exact: true });
@@ -62,20 +67,30 @@ for (const scenario of [
name: 'Models',
exact: true,
});
const [headerBox, triggerBox, homeBox, navBox] = await Promise.all([
header.boundingBox(),
trigger.boundingBox(),
home.boundingBox(),
navigation.boundingBox(),
]);
const [headerBox, triggerBox, homeBox, navBox, upgradeBox] =
await Promise.all([
header.boundingBox(),
trigger.boundingBox(),
home.boundingBox(),
navigation.boundingBox(),
upgrade.boundingBox(),
]);
expect(triggerBox!.y).toBeGreaterThanOrEqual(
headerBox!.y + headerBox!.height,
);
expect(triggerBox!.y + triggerBox!.height).toBeLessThanOrEqual(homeBox!.y);
expect(Math.abs(triggerBox!.x - navBox!.x)).toBeLessThanOrEqual(1);
// The upgrade control shares the switcher row and owns its trailing edge,
// so the row stays flush with the navigation column while the switcher
// itself ends before the control.
expect(Math.abs(triggerBox!.y - upgradeBox!.y)).toBeLessThanOrEqual(1);
expect(upgradeBox!.x).toBeGreaterThanOrEqual(
triggerBox!.x + triggerBox!.width,
);
expect(
Math.abs(triggerBox!.x + triggerBox!.width - navBox!.x - navBox!.width),
Math.abs(upgradeBox!.x + upgradeBox!.width - navBox!.x - navBox!.width),
).toBeLessThanOrEqual(1);
await expect(upgrade).toBeVisible();
await trigger.click();
const row = page
.getByRole('menuitem')