Skip to content

Commit 02cbc42

Browse files
committed
shell: Import ShellManifest as part of maintaining ShellState
This way, it is only validated once and not on every render.
1 parent 253d25b commit 02cbc42

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

pkg/shell/shell-modals.tsx

+3-5
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import { SearchIcon } from '@patternfly/react-icons';
3333

3434
import { useInit } from "hooks";
3535

36-
import { import_ShellManifest } from "./manifests";
36+
import { ShellState } from "./state";
3737

3838
import "menu-select-widget.scss";
3939

@@ -90,7 +90,7 @@ export const AboutCockpitModal = ({ dialogResult }) => {
9090
);
9191
};
9292

93-
export const LangModal = ({ dialogResult }) => {
93+
export const LangModal = ({ dialogResult, state } : { dialogResult, state: ShellState }) => {
9494
const language = document.cookie.replace(/(?:(?:^|.*;\s*)CockpitLang\s*=\s*([^;]*).*$)|^.*$/, "$1") || "en-us";
9595

9696
const [selected, setSelected] = useState(language);
@@ -106,8 +106,6 @@ export const LangModal = ({ dialogResult }) => {
106106
window.location.reload();
107107
}
108108

109-
const manifest = import_ShellManifest(cockpit.manifests.shell || { });
110-
111109
return (
112110
<Modal isOpen position="top" variant="small"
113111
id="display-language-modal"
@@ -144,7 +142,7 @@ export const LangModal = ({ dialogResult }) => {
144142
<MenuList>
145143
{
146144
(() => {
147-
const locales = manifest.locales || {};
145+
const locales = state.config.manifest.locales || {};
148146
const filteredLocales = Object.keys(locales)
149147
.filter(key => !searchInput || locales[key].toLowerCase().includes(searchInput.toString().toLowerCase()));
150148

pkg/shell/state.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,13 @@ import {
3232
compile_manifests, compute_frame_url,
3333
Location, ManifestItem, CompiledComponents,
3434
} from "./util.jsx";
35-
import { Manifest } from "./manifests";
35+
import { Manifest, ShellManifest, import_ShellManifest } from "./manifests";
3636

3737
export interface ShellConfig {
3838
language: string;
3939
language_direction: string;
4040
host_switcher_enabled: boolean;
41+
manifest: ShellManifest;
4142
}
4243

4344
export interface ShellFrame {
@@ -109,6 +110,7 @@ export class ShellState extends EventEmitter<ShellStateEvents> {
109110
language,
110111
language_direction: cockpit.language_direction,
111112
host_switcher_enabled: false,
113+
manifest: import_ShellManifest(cockpit.manifests.shell || {}),
112114
};
113115

114116
/* Host switcher enabled? */

pkg/shell/topnav.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { Toolbar, ToolbarContent, ToolbarItem } from "@patternfly/react-core/dis
3030
import { CogIcon, ExternalLinkAltIcon, HelpIcon } from '@patternfly/react-icons';
3131

3232
import { ShellState } from "./state";
33-
import { ManifestDocs, ManifestParentSection, import_ShellManifest } from "./manifests";
33+
import { ManifestDocs, ManifestParentSection } from "./manifests";
3434
import { ActivePagesDialog } from "./active-pages-modal.jsx";
3535
import { CredentialsModal } from './credentials.jsx';
3636
import { AboutCockpitModal, LangModal, OopsModal } from "./shell-modals.jsx";
@@ -150,7 +150,7 @@ export class TopNav extends React.Component {
150150
{cockpit.format(_("$0 documentation"), this.state.osRelease.NAME)}
151151
</DropdownItem>);
152152

153-
const shell_manifest = import_ShellManifest(cockpit.manifests.shell || {});
153+
const shell_manifest = this.props.state.config.manifest;
154154

155155
// global documentation for cockpit as a whole
156156
(shell_manifest.docs ?? []).forEach(doc => {
@@ -208,7 +208,7 @@ export class TopNav extends React.Component {
208208

209209
if (shell_manifest.locales)
210210
main_menu.push(<DropdownItem key="languages" className="display-language-menu"
211-
onClick={() => Dialogs.run(LangModal, {})}>
211+
onClick={() => Dialogs.run(LangModal, { state: this.props.state })}>
212212
{_("Display language")}
213213
</DropdownItem>);
214214

0 commit comments

Comments
 (0)