Skip to content

Commit cc459ac

Browse files
committed
fix: restore mobile settings detail scrolling
1 parent d446630 commit cc459ac

3 files changed

Lines changed: 48 additions & 2 deletions

File tree

packages/web/src/features/settings/components/settings-page.test.tsx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,38 @@ describe("SettingsPage", () => {
801801
expect(screen.queryByLabelText("启动命令参数")).not.toBeInTheDocument();
802802
});
803803

804+
it("uses a scrollable mobile detail layout for secondary settings pages without fill-height classes", async () => {
805+
viewportMocks.viewport = "mobile";
806+
const sendCommand = vi.fn().mockResolvedValue({});
807+
const store = createConnectedStore(sendCommand);
808+
809+
renderSettingsPage(store);
810+
fireEvent.click(screen.getByRole("button", { name: "通用" }));
811+
812+
await waitFor(() => {
813+
expect(screen.getByText("通知")).toBeInTheDocument();
814+
});
815+
816+
const detailBody = document.querySelector(".settings-body--mobile");
817+
const detailContent = document.querySelector(".settings-content--mobile");
818+
819+
expect(detailBody).not.toBeNull();
820+
expect(detailContent).not.toBeNull();
821+
expect(document.querySelector(".settings-body--mobile-detail")).not.toBeNull();
822+
expect(document.querySelector(".settings-content--mobile-detail")).not.toBeNull();
823+
expect(document.querySelector(".settings-body--mobile.settings-body--fill-height")).toBeNull();
824+
expect(
825+
document.querySelector(".settings-content--mobile.settings-content--fill-height")
826+
).toBeNull();
827+
828+
fireEvent.click(screen.getByRole("button", { name: "返回" }));
829+
830+
expect(screen.getByRole("button", { name: "Providers" })).toBeInTheDocument();
831+
expect(document.querySelector(".settings-body--mobile")).toBeNull();
832+
expect(document.querySelector(".settings-body--mobile-detail")).toBeNull();
833+
expect(document.querySelector(".settings-content--mobile-detail")).toBeNull();
834+
});
835+
804836
it("shows provider base settings first on mobile and enters config files through the secondary action", async () => {
805837
viewportMocks.viewport = "mobile";
806838
const sendCommand = vi.fn().mockImplementation(async (op: string, args: unknown) => {

packages/web/src/features/settings/components/settings-page.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ export function SettingsPage() {
381381
);
382382

383383
const shouldShowMobileRoot = isMobile && navigationState.kind === "root";
384+
const isMobileDetailView = isMobile && navigationState.kind === "detail";
384385
const headerTitle = isMobile
385386
? t(shouldShowMobileRoot ? "settings.title" : activeSectionMeta.labelKey)
386387
: t("settings.title");
@@ -400,7 +401,7 @@ export function SettingsPage() {
400401
renderMobileRoot()
401402
) : (
402403
<div
403-
className={`settings-body ${isMobile ? "settings-body--mobile" : ""} ${contentLayoutMode === "fill-height" ? "settings-body--fill-height" : ""}`}
404+
className={`settings-body ${isMobile ? "settings-body--mobile" : ""} ${isMobileDetailView ? "settings-body--mobile-detail" : ""} ${contentLayoutMode === "fill-height" ? "settings-body--fill-height" : ""}`}
404405
>
405406
{isMobile ? null : (
406407
<aside className="settings-sidebar">
@@ -419,7 +420,7 @@ export function SettingsPage() {
419420
)}
420421

421422
<main
422-
className={`settings-content ${isMobile ? "settings-content--mobile" : ""} ${contentLayoutMode === "fill-height" ? "settings-content--fill-height" : ""}`}
423+
className={`settings-content ${isMobile ? "settings-content--mobile" : ""} ${isMobileDetailView ? "settings-content--mobile-detail" : ""} ${contentLayoutMode === "fill-height" ? "settings-content--fill-height" : ""}`}
423424
>
424425
{settingsLoadError && (
425426
<Notice

packages/web/src/styles/components.css

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9724,6 +9724,13 @@ textarea.input {
97249724
background: var(--bg-page);
97259725
}
97269726

9727+
.settings-body--mobile-detail {
9728+
display: flex;
9729+
flex: 1;
9730+
min-height: 0;
9731+
flex-direction: column;
9732+
}
9733+
97279734
.settings-body--mobile.settings-body--fill-height {
97289735
display: flex;
97299736
flex: 1;
@@ -9741,6 +9748,12 @@ textarea.input {
97419748
padding-bottom: var(--sp-5);
97429749
}
97439750

9751+
.settings-content--mobile-detail {
9752+
flex: 1;
9753+
min-height: 0;
9754+
overflow-y: auto;
9755+
}
9756+
97449757
.settings-page--mobile .settings-content--mobile-root {
97459758
padding-left: var(--sp-2);
97469759
padding-right: var(--sp-2);

0 commit comments

Comments
 (0)