diff --git a/src/components/icon-button.mjs b/src/components/icon-button.mjs index 1d5b9fee..4a0cfe9f 100644 --- a/src/components/icon-button.mjs +++ b/src/components/icon-button.mjs @@ -24,5 +24,6 @@ export const IconButton = ({ }) => html` ${icon} + disabled=${disabled} onClick=${disabled ? null : onClick} + >${icon} `; diff --git a/src/components/index.mjs b/src/components/index.mjs index e51195ab..951fa76b 100644 --- a/src/components/index.mjs +++ b/src/components/index.mjs @@ -22,4 +22,4 @@ export {DropDown} from './drop-down.mjs'; export {Icon} from './icon.mjs'; export {IconButton} from './icon-button.mjs'; export {Panel} from './panel.mjs'; -export {TopBar, TopAppBar} from './top-bar.mjs'; +export {TopAppBar} from './top-app-bar.mjs'; diff --git a/src/components/top-bar.mjs b/src/components/top-app-bar.mjs similarity index 63% rename from src/components/top-bar.mjs rename to src/components/top-app-bar.mjs index d8168180..298ed7dd 100644 --- a/src/components/top-bar.mjs +++ b/src/components/top-app-bar.mjs @@ -15,49 +15,27 @@ */ import {html, IconButton} from './index.mjs'; -/** - * A TopBar partially based on Bulma's Navbar component. - */ -export const TopBar = ({ - title, - titleClass = 'navbar-item is-size-5 has-text-info has-text-weight-bold', - containerClass = '', - endComponents = '', - endComponentsClass = '', - fixed = false -}) => { - if (fixed) { - document.body.classList.add('has-navbar-fixed-top'); - } - return html` - - `; -}; - /** * A top app bar based on Material design (3) guidelines. * * @param icon represented using a Material Icon codepoint. * @param iconClick callback function to be executed when the icon is clicked. * @param headline the headline of the app bar. + * @param components or component containing an icon displayed at the end of the app bar. * @see https://m3.material.io/components/top-app-bar */ export const TopAppBar = ({ icon, iconClick = () => {}, - headline + headline, + trailingIcon }) => { document.body.classList.add('has-top-app-bar'); return html`
`; }; diff --git a/src/settings/__tests__/settings.browser.test.mjs b/src/settings/__tests__/settings.browser.test.mjs index 610b8bbc..19dafe5d 100644 --- a/src/settings/__tests__/settings.browser.test.mjs +++ b/src/settings/__tests__/settings.browser.test.mjs @@ -47,7 +47,7 @@ describe('Settings in Browser test suite', () => { }); test('Cancel should send close dialog event', () => { // When - fireEvent.click(document.querySelector('.settings__cancel')); + fireEvent.click(document.querySelector('.top-app-bar .leading-navigation-icon')); // Then expect(mockIpcRenderer.send).toHaveBeenCalledTimes(1); expect(mockIpcRenderer.send).toHaveBeenCalledWith('closeDialog'); diff --git a/src/settings/settings.browser.mjs b/src/settings/settings.browser.mjs index 12f472dc..93d6cf73 100644 --- a/src/settings/settings.browser.mjs +++ b/src/settings/settings.browser.mjs @@ -15,7 +15,7 @@ */ const {ipcRenderer} = window; -import {APP_EVENTS, Checkbox, TopBar, html, render, useReducer} from '../components/index.mjs'; +import {APP_EVENTS, html, render, useReducer, Checkbox, IconButton, TopAppBar} from '../components/index.mjs'; import { ACTIONS, reducer, dictionariesEnabled, setTabProperty, toggleTabProperty } from './settings.reducer.browser.mjs'; @@ -121,18 +121,10 @@ const Settings = ({initialState}) => { }); const cancel = () => ipcRenderer.send(APP_EVENTS.closeDialog); return html` - <${TopBar} fixed=${true} title='Settings' - endComponents=${html` - - `} + <${TopAppBar} headline='Settings' icon='\uE5C4' iconClick=${cancel} + trailingIcon=${html`<${IconButton} + className='settings__submit' icon='\ue161' onClick=${save} + disabled=${!state.canSave || state.invalidTabs.size !== 0}/>`} />