From 80f7780e843a6c906b736588c56af00b0ebc2f28 Mon Sep 17 00:00:00 2001 From: vicalcantFrontEnd <73868044+vicalcantFrontEnd@users.noreply.github.com> Date: Tue, 21 May 2024 07:20:38 -0600 Subject: [PATCH] fix(app-shell): fix nav-list menu (#2162) --- libs/components/src/app-shell/app-shell.scss | 16 +++++- .../src/app-shell/app-shell.stories.js | 9 ++++ libs/components/src/app-shell/app-shell.ts | 54 +++++++++---------- package-lock.json | 2 +- 4 files changed, 50 insertions(+), 31 deletions(-) diff --git a/libs/components/src/app-shell/app-shell.scss b/libs/components/src/app-shell/app-shell.scss index aa7fc4374a..620148f1ec 100644 --- a/libs/components/src/app-shell/app-shell.scss +++ b/libs/components/src/app-shell/app-shell.scss @@ -68,6 +68,7 @@ height: 100vh; grid-area: main; overflow: auto; + transition: margin-left 200ms ease-in-out; .main-wrapper { margin: 0 auto; @@ -99,6 +100,10 @@ .cov-drawer--open & { margin-left: 256px; } + + .cov-help--open & { + margin-right: var(--cv-help-width, 320px); + } } @media only screen and (max-width: 1600px) { @@ -112,7 +117,7 @@ grid-area: help; position: fixed; right: 0; - width: var(--help-width, 320px); + width: var(--cv-help-width, 320px); height: 100vh; overflow-y: auto; @@ -144,6 +149,14 @@ } } + :host([resizing]) .resize-handle { + display: block; + } + + :host(:not([resizing])) .resize-handle { + display: none; + } + .cov-help--closed & { width: 0; border: none; @@ -291,6 +304,7 @@ nav.navigation { .mdc-drawer--open { width: 256px; + transition-duration: 200ms; } .mdc-drawer--opening { diff --git a/libs/components/src/app-shell/app-shell.stories.js b/libs/components/src/app-shell/app-shell.stories.js index 3a4683c72d..1dc0ee84e5 100644 --- a/libs/components/src/app-shell/app-shell.stories.js +++ b/libs/components/src/app-shell/app-shell.stories.js @@ -22,6 +22,7 @@ export default { args: { contained: true, fullWidth: false, + resizing: true, }, argTypes: { navClick: { action: 'clicked' }, @@ -53,6 +54,7 @@ const Template = ({ forcedOpen = false, contained = true, fullWidth = false, + resizing = true, }) => { document.addEventListener( 'DOMContentLoaded', @@ -102,6 +104,8 @@ const Template = ({ ${forcedOpen ? `forcedOpen open` : ''} ${contained ? `contained` : ''} ${fullWidth ? `fullWidth` : ''} + ${resizing ? `resizing` : ''} + > @@ -312,3 +316,8 @@ export const fullWidth = Template.bind({}); fullWidth.args = { fullWidth: true, }; + +export const resizing = Template.bind({}); +resizing.args = { + resizing: true, +}; diff --git a/libs/components/src/app-shell/app-shell.ts b/libs/components/src/app-shell/app-shell.ts index d2717f0b71..f53e65873d 100644 --- a/libs/components/src/app-shell/app-shell.ts +++ b/libs/components/src/app-shell/app-shell.ts @@ -60,6 +60,12 @@ export class CovalentAppShell extends DrawerBase { @property({ type: Boolean, reflect: true }) helpOpen = false; + /** + * Make help resizable with drag/drop handle + */ + @property({ type: Boolean, reflect: true }) + helpResizable = false; + /** * Wrap the main area with a contained card surface */ @@ -82,13 +88,13 @@ export class CovalentAppShell extends DrawerBase { constructor() { super(); + this.resizeEvent(); this._resize = this._resize.bind(this); this._stopResize = this._stopResize.bind(this); this._startResizing = this._startResizing.bind(this); this._setupEventListeners(); window.addEventListener('DOMContentLoaded', () => { this.setupHelpPanelListeners(); - this.resizeEvent(); const storedWidth = localStorage.getItem('helpWidth'); if (storedWidth) { this.helpWidth = parseInt(storedWidth, 10); @@ -141,27 +147,9 @@ export class CovalentAppShell extends DrawerBase { }); } - override firstUpdated() { - const resizeHandle = this.shadowRoot?.querySelector('.resize-handle'); - if (resizeHandle) { - resizeHandle.addEventListener('mousedown', (event) => { - if (event instanceof MouseEvent) { - this._startResizing(event); - } - }); - - resizeHandle.addEventListener('dblclick', () => { - if (this.helpWidth > 320 || this.helpWidth !== 320) { - this.helpWidth = 320; - localStorage.setItem('helpWidth', '320'); - this.updateHelpPanelWidth(); - this.requestUpdate(); - } - }); - } - } - private _startResizing(event: MouseEvent) { + if (!this.helpResizable) return; + const resizeHandle = this.shadowRoot?.querySelector('.resize-handle'); if (event.target === resizeHandle) { this._startX = event.clientX; @@ -170,6 +158,15 @@ export class CovalentAppShell extends DrawerBase { document.addEventListener('mouseup', this._stopResize); (event.target as HTMLElement).classList.add('resizing'); } + + resizeHandle?.addEventListener('dblclick', () => { + if (this.helpWidth > 320 || this.helpWidth !== 320) { + this.helpWidth = 320; + localStorage.setItem('helpWidth', '320'); + this.updateHelpPanelWidth(); + this.requestUpdate(); + } + }); } private _resize(event: MouseEvent) { @@ -213,13 +210,10 @@ export class CovalentAppShell extends DrawerBase { } private updateHelpPanelWidth() { - const helpPanel = this.shadowRoot?.querySelector('.help') as HTMLElement; - const mainPanel = this.shadowRoot?.querySelector('.main') as HTMLElement; - - if (helpPanel && mainPanel) { - helpPanel.style.setProperty('--help-width', `${this.helpWidth}px`); - mainPanel.style.marginRight = `${this.helpWidth}px`; - } + const appShell = this.shadowRoot?.querySelector( + '.app-shell' + ) as HTMLElement; + appShell?.style.setProperty('--cv-help-width', `${this.helpWidth}px`); } private _handleMenuClick() { @@ -357,7 +351,9 @@ export class CovalentAppShell extends DrawerBase {
-
+ ${this.helpResizable + ? html`
` + : nothing}
diff --git a/package-lock.json b/package-lock.json index 1ff88d78b4..dfeafc700e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,7 +82,7 @@ "@commitlint/cli": "^18.4.3", "@commitlint/config-angular": "^16.2.1", "@commitlint/config-conventional": "^16.2.1", - "@covalent/tokens": "*", + "@covalent/tokens": "latest", "@nx/angular": "17.3.1", "@nx/cypress": "17.3.1", "@nx/eslint": "17.3.1",