1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Fix spacing and layout of registered TopBar items (#4991)

This commit is contained in:
Sebastian Malton 2022-03-15 08:36:14 -04:00 committed by Jim Ehrismann
parent 711f98111a
commit 65b18c4e79
2 changed files with 39 additions and 45 deletions

View File

@ -13,10 +13,33 @@
justify-content: space-between;
/* Use topbar as draggable region */
-webkit-user-select: none;
user-select: none;
-webkit-app-region: drag;
}
.topBar .items {
align-items: center;
display: flex;
height: 100%;
-webkit-app-region: no-drag;
&:first-of-type {
padding-left: 1.5rem;
& > * {
margin-right: 1rem;
}
}
&:last-of-type {
padding-right: 1.5rem;
& > * {
margin-left: 1rem;
}
}
}
:global(.is-mac) .topBar {
padding-left: var(--hotbar-width);
}
@ -39,23 +62,8 @@
}
}
.tools {
@apply flex items-center;
-webkit-app-region: no-drag;
}
.controls {
align-self: flex-end;
padding-right: 1.5rem;
align-items: center;
display: flex;
height: 100%;
-webkit-app-region: no-drag;
}
.windowButtons {
display: flex;
margin-left: 1.5rem;
margin-right: -1.5rem;
> div {
@ -94,7 +102,8 @@
}
}
.minimize, .maximize {
.minimize,
.maximize {
&:hover {
background-color: var(--borderFaintColor);
}

View File

@ -22,7 +22,7 @@ import { WindowAction } from "../../../../common/ipc/window";
import isLinuxInjectable from "../../../../common/vars/is-linux.injectable";
import isWindowsInjectable from "../../../../common/vars/is-windows.injectable";
export interface TopBarProps extends React.HTMLAttributes<any> {}
export interface TopBarProps {}
interface Dependencies {
items: IComputedValue<TopBarRegistration[]>;
@ -41,7 +41,7 @@ ipcRendererOn("history:can-go-forward", (event, state: boolean) => {
nextEnabled.set(state);
});
const NonInjectedTopBar = observer(({ items, children, isWindows, isLinux, ...rest }: TopBarProps & Dependencies) => {
const NonInjectedTopBar = observer(({ items, isWindows, isLinux }: TopBarProps & Dependencies) => {
const elem = useRef<HTMLDivElement>();
const openAppContextMenu = () => {
@ -61,12 +61,9 @@ const NonInjectedTopBar = observer(({ items, children, isWindows, isLinux, ...re
};
const windowSizeToggle = (evt: React.MouseEvent) => {
if (elem.current != evt.target) {
// Skip clicking on child elements
return;
}
if (elem.current === evt.target) {
toggleMaximize();
}
};
const minimizeWindow = () => {
@ -84,8 +81,8 @@ const NonInjectedTopBar = observer(({ items, children, isWindows, isLinux, ...re
useEffect(() => watchHistoryState(), []);
return (
<div className={styles.topBar} onDoubleClick={windowSizeToggle} ref={elem} {...rest}>
<div className={styles.tools}>
<div className={styles.topBar} onDoubleClick={windowSizeToggle} ref={elem}>
<div className={styles.items}>
{(isWindows || isLinux) && (
<div className={styles.winMenu}>
<div onClick={openAppContextMenu} data-testid="window-menu">
@ -100,28 +97,24 @@ const NonInjectedTopBar = observer(({ items, children, isWindows, isLinux, ...re
<Icon
data-testid="home-button"
material="home"
className="ml-4"
onClick={goHome}
disabled={isActiveRoute(catalogRoute)}
/>
<Icon
data-testid="history-back"
material="arrow_back"
className="ml-5"
onClick={goBack}
disabled={!prevEnabled.get()}
/>
<Icon
data-testid="history-forward"
material="arrow_forward"
className="ml-5"
onClick={goForward}
disabled={!nextEnabled.get()}
/>
</div>
<div className={styles.controls}>
<div className={styles.items}>
{renderRegisteredItems(items.get())}
{children}
{(isWindows || isLinux) && (
<div className={cssNames(styles.windowButtons, { [styles.linuxButtons]: isLinux })}>
<div className={styles.minimize} data-testid="window-minimize" onClick={minimizeWindow}>
@ -147,23 +140,15 @@ const NonInjectedTopBar = observer(({ items, children, isWindows, isLinux, ...re
});
const renderRegisteredItems = (items: TopBarRegistration[]) => (
<div>
{items.map((registration, index) => {
items.map((registration, index) => {
if (!registration?.components?.Item) {
return null;
}
return (
<div key={index}>
<registration.components.Item />
</div>
);
})}
</div>
return <registration.components.Item key={index} />;
})
);
export const TopBar = withInjectables<Dependencies, TopBarProps>(NonInjectedTopBar, {
getProps: (di, props) => ({
items: di.inject(topBarItemsInjectable),