diff --git a/web/src/api/l10n/system.ts b/web/src/api/l10n/system.ts index 98cfde5a4b..66a21b5ae5 100644 --- a/web/src/api/l10n/system.ts +++ b/web/src/api/l10n/system.ts @@ -28,7 +28,7 @@ type Keymap = { /** * Keyboard name (e.g., "English (US)"). */ - name: string; + description: string; }; type Locale = { @@ -39,7 +39,7 @@ type Locale = { /** * Language name (e.g., "English"). */ - name: string; + language: string; /** * Territory name (e.g., "United States"). */ diff --git a/web/src/components/core/InstallerOptions.tsx b/web/src/components/core/InstallerOptions.tsx index 0d6e0a29b9..39cdd1bb04 100644 --- a/web/src/components/core/InstallerOptions.tsx +++ b/web/src/components/core/InstallerOptions.tsx @@ -107,7 +107,7 @@ const KeyboardFormInput = ({ value, onChange }: SelectProps) => { onChange={onChange} > {keymaps.map((keymap, index) => ( - + ))} diff --git a/web/src/components/l10n/KeyboardSelection.test.tsx b/web/src/components/l10n/KeyboardSelection.test.tsx index 65b06976f6..98a51731b4 100644 --- a/web/src/components/l10n/KeyboardSelection.test.tsx +++ b/web/src/components/l10n/KeyboardSelection.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -25,32 +25,28 @@ import KeyboardSelection from "./KeyboardSelection"; import userEvent from "@testing-library/user-event"; import { screen } from "@testing-library/react"; import { mockNavigateFn, installerRender } from "~/test-utils"; -import { Keymap } from "~/api/system"; +import { Keymap } from "~/api/l10n/system"; + +const mockPatchConfigFn = jest.fn(); const keymaps: Keymap[] = [ - { id: "us", name: "English" }, - { id: "es", name: "Spanish" }, + { id: "us", description: "English" }, + { id: "es", description: "Spanish" }, ]; -const mockUpdateConfigFn = jest.fn(); - jest.mock("~/components/product/ProductRegistrationAlert", () => () => (
ProductRegistrationAlert Mock
)); -jest.mock("~/queries/system", () => ({ - ...jest.requireActual("~/queries/system"), +jest.mock("~/hooks/api", () => ({ + ...jest.requireActual("~/hooks/api"), useSystem: () => ({ l10n: { keymaps } }), -})); - -jest.mock("~/queries/proposal", () => ({ - ...jest.requireActual("~/queries/proposal"), useProposal: () => ({ l10n: { keymap: "us" } }), })); -jest.mock("~/api/api", () => ({ - ...jest.requireActual("~/api/api"), - updateConfig: (config) => mockUpdateConfigFn(config), +jest.mock("~/api", () => ({ + ...jest.requireActual("~/api"), + patchConfig: (config) => mockPatchConfigFn(config), })); jest.mock("react-router", () => ({ @@ -65,6 +61,6 @@ it("allows changing the keyboard", async () => { await userEvent.click(option); const button = await screen.findByRole("button", { name: "Select" }); await userEvent.click(button); - expect(mockUpdateConfigFn).toHaveBeenCalledWith({ l10n: { keymap: "es" } }); + expect(mockPatchConfigFn).toHaveBeenCalledWith({ l10n: { keymap: "es" } }); expect(mockNavigateFn).toHaveBeenCalledWith(-1); }); diff --git a/web/src/components/l10n/KeyboardSelection.tsx b/web/src/components/l10n/KeyboardSelection.tsx index 5885d39e0d..95112038c8 100644 --- a/web/src/components/l10n/KeyboardSelection.tsx +++ b/web/src/components/l10n/KeyboardSelection.tsx @@ -34,15 +34,15 @@ export default function KeyboardSelection() { const navigate = useNavigate(); const { l10n: { keymaps }, - } = useSystem(); + } = useSystem({ suspense: true }); const { l10n: { keymap: currentKeymap }, - } = useProposal(); + } = useProposal({ suspense: true }); // FIXME: get current keymap from either, proposal or config const [selected, setSelected] = useState(currentKeymap); const [filteredKeymaps, setFilteredKeymaps] = useState( - keymaps.sort((k1, k2) => (k1.name > k2.name ? 1 : -1)), + keymaps.sort((k1, k2) => (k1.description > k2.description ? 1 : -1)), ); const searchHelp = _("Filter by description or keymap code"); @@ -54,7 +54,7 @@ export default function KeyboardSelection() { navigate(-1); }; - let keymapsList = filteredKeymaps.map(({ id, name }) => { + let keymapsList = filteredKeymaps.map(({ id, description }) => { return ( setSelected(id)} label={ - {name} + {description} {id} } diff --git a/web/src/components/l10n/L10nPage.test.tsx b/web/src/components/l10n/L10nPage.test.tsx index 173c50277c..36373c1771 100644 --- a/web/src/components/l10n/L10nPage.test.tsx +++ b/web/src/components/l10n/L10nPage.test.tsx @@ -24,19 +24,20 @@ import React from "react"; import { screen, within } from "@testing-library/react"; import { installerRender } from "~/test-utils"; import L10nPage from "~/components/l10n/L10nPage"; -import { System, Keymap, Locale, Timezone } from "~/api/system"; -import { Proposal } from "~/api/proposal"; +import { Keymap, Locale, Timezone } from "~/api/l10n/system"; +import { useProposal, useSystem } from "~/hooks/api"; + +let mockSystemData: ReturnType; +let mockProposedData: ReturnType; -let mockSystemData: System; -let mockProposedData: Proposal; const locales: Locale[] = [ - { id: "en_US.UTF-8", name: "English", territory: "United States" }, - { id: "es_ES.UTF-8", name: "Spanish", territory: "Spain" }, + { id: "en_US.UTF-8", language: "English", territory: "United States" }, + { id: "es_ES.UTF-8", language: "Spanish", territory: "Spain" }, ]; const keymaps: Keymap[] = [ - { id: "us", name: "English" }, - { id: "es", name: "Spanish" }, + { id: "us", description: "English" }, + { id: "es", description: "Spanish" }, ]; const timezones: Timezone[] = [ @@ -50,11 +51,8 @@ jest.mock("~/components/product/ProductRegistrationAlert", () => () => ( jest.mock("~/components/core/InstallerOptions", () => () =>
InstallerOptions Mock
); -jest.mock("~/queries/system", () => ({ +jest.mock("~/hooks/api", () => ({ useSystem: () => mockSystemData, -})); - -jest.mock("~/queries/proposal", () => ({ useProposal: () => mockProposedData, })); @@ -69,9 +67,6 @@ beforeEach(() => { mockProposedData = { l10n: { - locales, - keymaps, - timezones, locale: "en_US.UTF-8", keymap: "us", timezone: "Europe/Berlin", diff --git a/web/src/components/l10n/L10nPage.tsx b/web/src/components/l10n/L10nPage.tsx index 2d17e18330..6331226355 100644 --- a/web/src/components/l10n/L10nPage.tsx +++ b/web/src/components/l10n/L10nPage.tsx @@ -67,9 +67,8 @@ const InstallerL10nSettingsInfo = () => { */ export default function L10nPage() { // FIXME: retrieve selection from config when ready - const { l10n: l10nProposal } = useProposal(); - const { l10n: l10nSystem } = useSystem(); - console.log(l10nProposal); + const { l10n: l10nProposal } = useProposal({ suspense: true }); + const { l10n: l10nSystem } = useSystem({ suspense: true }); const locale = l10nProposal.locale && l10nSystem.locales.find((l) => l.id === l10nProposal.locale); @@ -96,7 +95,7 @@ export default function L10nPage() { } > - {locale ? `${locale.name} - ${locale.territory}` : _("Wrong selection")} + {locale ? `${locale.language} - ${locale.territory}` : _("Wrong selection")} @@ -109,7 +108,7 @@ export default function L10nPage() { } > - {keymap ? keymap.name : _("Wrong selection")} + {keymap ? keymap.description : _("Wrong selection")} diff --git a/web/src/components/l10n/LocaleSelection.test.tsx b/web/src/components/l10n/LocaleSelection.test.tsx index 8e890ca97b..b93940d2ce 100644 --- a/web/src/components/l10n/LocaleSelection.test.tsx +++ b/web/src/components/l10n/LocaleSelection.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright (c) [2023-2024] SUSE LLC + * Copyright (c) [2023-2025] SUSE LLC * * All Rights Reserved. * @@ -25,32 +25,28 @@ import LocaleSelection from "./LocaleSelection"; import userEvent from "@testing-library/user-event"; import { screen } from "@testing-library/react"; import { mockNavigateFn, installerRender } from "~/test-utils"; -import { Locale } from "~/api/system"; +import { Locale } from "~/api/l10n/system"; + +const mockPatchConfigFn = jest.fn(); const locales: Locale[] = [ - { id: "en_US.UTF-8", name: "English", territory: "United States" }, - { id: "es_ES.UTF-8", name: "Spanish", territory: "Spain" }, + { id: "en_US.UTF-8", language: "English", territory: "United States" }, + { id: "es_ES.UTF-8", language: "Spanish", territory: "Spain" }, ]; -const mockUpdateConfigFn = jest.fn(); - jest.mock("~/components/product/ProductRegistrationAlert", () => () => (
ProductRegistrationAlert Mock
)); -jest.mock("~/queries/system", () => ({ - ...jest.requireActual("~/queries/system"), +jest.mock("~/hooks/api", () => ({ + ...jest.requireActual("~/hooks/api"), useSystem: () => ({ l10n: { locales } }), -})); - -jest.mock("~/queries/proposal", () => ({ - ...jest.requireActual("~/queries/proposal"), useProposal: () => ({ l10n: { locales, locale: "us_US.UTF-8", keymap: "us" } }), })); -jest.mock("~/api/api", () => ({ - ...jest.requireActual("~/api/api"), - updateConfig: (config) => mockUpdateConfigFn(config), +jest.mock("~/api", () => ({ + ...jest.requireActual("~/api"), + patchConfig: (config) => mockPatchConfigFn(config), })); jest.mock("react-router", () => ({ @@ -65,7 +61,7 @@ it("allows changing the keyboard", async () => { await userEvent.click(option); const button = await screen.findByRole("button", { name: "Select" }); await userEvent.click(button); - expect(mockUpdateConfigFn).toHaveBeenCalledWith({ + expect(mockPatchConfigFn).toHaveBeenCalledWith({ l10n: { locale: "es_ES.UTF-8" }, }); expect(mockNavigateFn).toHaveBeenCalledWith(-1); diff --git a/web/src/components/l10n/LocaleSelection.tsx b/web/src/components/l10n/LocaleSelection.tsx index 0b7f89169b..36dfccd371 100644 --- a/web/src/components/l10n/LocaleSelection.tsx +++ b/web/src/components/l10n/LocaleSelection.tsx @@ -35,10 +35,10 @@ export default function LocaleSelection() { const navigate = useNavigate(); const { l10n: { locales }, - } = useSystem(); + } = useSystem({ suspense: true }); const { l10n: { locale: currentLocale }, - } = useProposal(); + } = useProposal({ suspense: true }); const [selected, setSelected] = useState(currentLocale); const [filteredLocales, setFilteredLocales] = useState(locales); @@ -50,7 +50,7 @@ export default function LocaleSelection() { navigate(-1); }; - let localesList = filteredLocales.map(({ id, name, territory }) => { + let localesList = filteredLocales.map(({ id, language, territory }) => { return ( setSelected(id)} label={ - {name} + {language} {territory} {id} diff --git a/web/src/components/l10n/TimezoneSelection.test.tsx b/web/src/components/l10n/TimezoneSelection.test.tsx index 98d3c2d67f..84a6fc371b 100644 --- a/web/src/components/l10n/TimezoneSelection.test.tsx +++ b/web/src/components/l10n/TimezoneSelection.test.tsx @@ -1,5 +1,5 @@ /* - * Copyright (c) [2024] SUSE LLC + * Copyright (c) [2024-2025] SUSE LLC * * All Rights Reserved. * @@ -25,13 +25,9 @@ import TimezoneSelection from "./TimezoneSelection"; import userEvent from "@testing-library/user-event"; import { screen } from "@testing-library/react"; import { mockNavigateFn, installerRender } from "~/test-utils"; -import { Timezone } from "~/api/system"; +import { Timezone } from "~/api/l10n/system"; -jest.mock("~/components/product/ProductRegistrationAlert", () => () => ( -
ProductRegistrationAlert Mock
-)); - -const mockUpdateConfigFn = jest.fn(); +const mockPatchConfigFn = jest.fn(); const timezones: Timezone[] = [ { id: "Europe/Berlin", parts: ["Europe", "Berlin"], country: "Germany", utcOffset: 120 }, @@ -50,14 +46,19 @@ const timezones: Timezone[] = [ }, ]; -jest.mock("~/queries/system", () => ({ - ...jest.requireActual("~/queries/system"), +jest.mock("~/components/product/ProductRegistrationAlert", () => () => ( +
ProductRegistrationAlert Mock
+)); + +jest.mock("~/hooks/api", () => ({ + ...jest.requireActual("~/hooks/api"), useSystem: () => ({ l10n: { timezones } }), + useProposal: () => ({ l10n: { timezones, timezone: "Europe/Berlin" } }), })); -jest.mock("~/queries/proposal", () => ({ - ...jest.requireActual("~/queries/proposal"), - useProposal: () => ({ l10n: { timezones, timezone: "Europe/Berlin" } }), +jest.mock("~/api", () => ({ + ...jest.requireActual("~/api"), + patchConfig: (config) => mockPatchConfigFn(config), })); jest.mock("react-router", () => ({ @@ -65,11 +66,6 @@ jest.mock("react-router", () => ({ useNavigate: () => mockNavigateFn, })); -jest.mock("~/api/api", () => ({ - ...jest.requireActual("~/api/api"), - updateConfig: (config) => mockUpdateConfigFn(config), -})); - beforeEach(() => { const mockedDate = new Date(2024, 6, 1, 12, 0); @@ -89,7 +85,7 @@ it("allows changing the timezone", async () => { await user.click(option); const button = await screen.findByRole("button", { name: "Select" }); await user.click(button); - expect(mockUpdateConfigFn).toHaveBeenCalledWith({ l10n: { timezone: "Europe/Madrid" } }); + expect(mockPatchConfigFn).toHaveBeenCalledWith({ l10n: { timezone: "Europe/Madrid" } }); expect(mockNavigateFn).toHaveBeenCalledWith(-1); }); diff --git a/web/src/components/l10n/TimezoneSelection.tsx b/web/src/components/l10n/TimezoneSelection.tsx index f7d14e971c..068cd7dcfd 100644 --- a/web/src/components/l10n/TimezoneSelection.tsx +++ b/web/src/components/l10n/TimezoneSelection.tsx @@ -69,10 +69,10 @@ export default function TimezoneSelection() { const navigate = useNavigate(); const { l10n: { timezones }, - } = useSystem(); + } = useSystem({ suspense: true }); const { l10n: { timezone: currentTimezone }, - } = useProposal(); + } = useProposal({ suspense: true }); const displayTimezones = timezones.map(timezoneWithDetails); const [selected, setSelected] = useState(currentTimezone);