From afe42e66bc63eb9d62a2b18c96bb22b45e91a701 Mon Sep 17 00:00:00 2001 From: DenisaCG Date: Wed, 26 Jul 2023 15:04:12 +0200 Subject: [PATCH 1/7] add signal for toggling expansion of subpanels in an Accordion Panel --- packages/widgets/src/accordionpanel.ts | 12 ++++++ .../widgets/tests/src/accordionpanel.spec.ts | 38 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/packages/widgets/src/accordionpanel.ts b/packages/widgets/src/accordionpanel.ts index 20e6e24aa..4437937c7 100644 --- a/packages/widgets/src/accordionpanel.ts +++ b/packages/widgets/src/accordionpanel.ts @@ -8,6 +8,7 @@ import { SplitLayout } from './splitlayout'; import { SplitPanel } from './splitpanel'; import { Title } from './title'; import { Widget } from './widget'; +import { ISignal, Signal } from '@lumino/signaling'; /** * A panel which arranges its widgets into resizable sections separated by a title widget. @@ -53,6 +54,13 @@ export class AccordionPanel extends SplitPanel { return (this.layout as AccordionLayout).titles; } + /** + * A signal emitted when an element of the AccordionPanel is collapsed or expanded. + */ + get expansionToggled(): ISignal { + return this._expansionToggled; + } + /** * Add a widget to the end of the panel. * @@ -321,6 +329,9 @@ export class AccordionPanel extends SplitPanel { this.setRelativeSizes(newSize, false); } + // Emit the expansion state signal. + this._expansionToggled.emit(); + if (widget.isHidden) { title.classList.add('lm-mod-expanded'); title.setAttribute('aria-expanded', 'true'); @@ -333,6 +344,7 @@ export class AccordionPanel extends SplitPanel { } private _widgetSizesCache: WeakMap = new WeakMap(); + private _expansionToggled = new Signal(this); } /** diff --git a/packages/widgets/tests/src/accordionpanel.spec.ts b/packages/widgets/tests/src/accordionpanel.spec.ts index b93a22bdc..d403dfdb7 100644 --- a/packages/widgets/tests/src/accordionpanel.spec.ts +++ b/packages/widgets/tests/src/accordionpanel.spec.ts @@ -230,6 +230,44 @@ describe('@lumino/widgets', () => { }); }); + describe('#expansionToggled', () => { + let panel: AccordionPanel; + let layout: AccordionLayout; + + beforeEach(() => { + panel = new AccordionPanel(); + layout = panel.layout as AccordionLayout; + let widgets = [new Widget(), new Widget(), new Widget()]; + widgets.forEach(w => { + panel.addWidget(w); + }); + panel.setRelativeSizes([10, 10, 10, 20]); + Widget.attach(panel, document.body); + MessageLoop.flush(); + }); + + afterEach(() => { + panel.dispose(); + }); + + it('should be emitted when the expansion status of an element is changed by the user', done => { + panel.expansionToggled.connect((sender, _) => { + expect(sender).to.equal(panel); + done(); + }); + if (!layout.widgets[0].isHidden) { + panel.collapse(0); + } + panel.expansionToggled.connect((sender, _) => { + expect(sender).to.equal(panel); + done(); + }); + if (layout.widgets[0].isHidden) { + panel.expand(0); + } + }); + }); + describe('#handleEvent()', () => { let panel: LogAccordionPanel; let layout: AccordionLayout; From 2a14a1fbcfe9eb6637dbe110e9b5fc5b35d7dbc5 Mon Sep 17 00:00:00 2001 From: Denisa Checiu <91504950+DenisaCG@users.noreply.github.com> Date: Wed, 26 Jul 2023 15:41:19 +0200 Subject: [PATCH 2/7] Apply cosmetic reviews and add widget index to signal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Frédéric Collonval --- packages/widgets/src/accordionpanel.ts | 8 ++++---- packages/widgets/tests/src/accordionpanel.spec.ts | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/widgets/src/accordionpanel.ts b/packages/widgets/src/accordionpanel.ts index 4437937c7..e44f051fc 100644 --- a/packages/widgets/src/accordionpanel.ts +++ b/packages/widgets/src/accordionpanel.ts @@ -55,9 +55,9 @@ export class AccordionPanel extends SplitPanel { } /** - * A signal emitted when an element of the AccordionPanel is collapsed or expanded. + * A signal emitted when a widget of the AccordionPanel is collapsed or expanded. */ - get expansionToggled(): ISignal { + get expansionToggled(): ISignal { return this._expansionToggled; } @@ -330,7 +330,7 @@ export class AccordionPanel extends SplitPanel { } // Emit the expansion state signal. - this._expansionToggled.emit(); + this._expansionToggled.emit(index); if (widget.isHidden) { title.classList.add('lm-mod-expanded'); @@ -344,7 +344,7 @@ export class AccordionPanel extends SplitPanel { } private _widgetSizesCache: WeakMap = new WeakMap(); - private _expansionToggled = new Signal(this); + private _expansionToggled = new Signal(this); } /** diff --git a/packages/widgets/tests/src/accordionpanel.spec.ts b/packages/widgets/tests/src/accordionpanel.spec.ts index d403dfdb7..22ebc71d8 100644 --- a/packages/widgets/tests/src/accordionpanel.spec.ts +++ b/packages/widgets/tests/src/accordionpanel.spec.ts @@ -250,21 +250,21 @@ describe('@lumino/widgets', () => { panel.dispose(); }); - it('should be emitted when the expansion status of an element is changed by the user', done => { + it('should be emitted when the a widget is collapsed', done => { panel.expansionToggled.connect((sender, _) => { expect(sender).to.equal(panel); done(); }); - if (!layout.widgets[0].isHidden) { - panel.collapse(0); - } + panel.collapse(0); + it('should be emitted when the a widget is expanded', done => { + // first collapse a widget + panel.collapse(0); + panel.expansionToggled.connect((sender, _) => { expect(sender).to.equal(panel); done(); }); - if (layout.widgets[0].isHidden) { - panel.expand(0); - } + panel.expand(0); }); }); From bb14d9439dd3fea3d05c71abfaa8c5cc92d28d93 Mon Sep 17 00:00:00 2001 From: DenisaCG Date: Wed, 26 Jul 2023 15:44:48 +0200 Subject: [PATCH 3/7] additional comsetic changes --- packages/widgets/src/accordionpanel.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/widgets/src/accordionpanel.ts b/packages/widgets/src/accordionpanel.ts index e44f051fc..d06abac38 100644 --- a/packages/widgets/src/accordionpanel.ts +++ b/packages/widgets/src/accordionpanel.ts @@ -3,12 +3,12 @@ import { ArrayExt } from '@lumino/algorithm'; import { Message } from '@lumino/messaging'; +import { ISignal, Signal } from '@lumino/signaling'; import { AccordionLayout } from './accordionlayout'; import { SplitLayout } from './splitlayout'; import { SplitPanel } from './splitpanel'; import { Title } from './title'; import { Widget } from './widget'; -import { ISignal, Signal } from '@lumino/signaling'; /** * A panel which arranges its widgets into resizable sections separated by a title widget. @@ -329,9 +329,6 @@ export class AccordionPanel extends SplitPanel { this.setRelativeSizes(newSize, false); } - // Emit the expansion state signal. - this._expansionToggled.emit(index); - if (widget.isHidden) { title.classList.add('lm-mod-expanded'); title.setAttribute('aria-expanded', 'true'); @@ -341,6 +338,9 @@ export class AccordionPanel extends SplitPanel { title.setAttribute('aria-expanded', 'false'); widget.hide(); } + + // Emit the expansion state signal. + this._expansionToggled.emit(index); } private _widgetSizesCache: WeakMap = new WeakMap(); From bf4744e11a9d8e7d71fe20bebf4d32d2a96db1f6 Mon Sep 17 00:00:00 2001 From: DenisaCG Date: Wed, 26 Jul 2023 15:51:11 +0200 Subject: [PATCH 4/7] fixed syntax error --- .../widgets/tests/src/accordionpanel.spec.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/widgets/tests/src/accordionpanel.spec.ts b/packages/widgets/tests/src/accordionpanel.spec.ts index 22ebc71d8..255364fc2 100644 --- a/packages/widgets/tests/src/accordionpanel.spec.ts +++ b/packages/widgets/tests/src/accordionpanel.spec.ts @@ -256,15 +256,16 @@ describe('@lumino/widgets', () => { done(); }); panel.collapse(0); - it('should be emitted when the a widget is expanded', done => { - // first collapse a widget - panel.collapse(0); - - panel.expansionToggled.connect((sender, _) => { - expect(sender).to.equal(panel); - done(); + it('should be emitted when the a widget is expanded', done => { + // first collapse a widget + panel.collapse(0); + + panel.expansionToggled.connect((sender, _) => { + expect(sender).to.equal(panel); + done(); + }); + panel.expand(0); }); - panel.expand(0); }); }); From 0fae883445d6ec13e10326992175f96a558262b3 Mon Sep 17 00:00:00 2001 From: DenisaCG Date: Wed, 26 Jul 2023 16:12:32 +0200 Subject: [PATCH 5/7] delete unnecessary layout instance from expansionToggled test --- packages/widgets/tests/src/accordionpanel.spec.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/widgets/tests/src/accordionpanel.spec.ts b/packages/widgets/tests/src/accordionpanel.spec.ts index 255364fc2..2ceb533d5 100644 --- a/packages/widgets/tests/src/accordionpanel.spec.ts +++ b/packages/widgets/tests/src/accordionpanel.spec.ts @@ -232,11 +232,9 @@ describe('@lumino/widgets', () => { describe('#expansionToggled', () => { let panel: AccordionPanel; - let layout: AccordionLayout; beforeEach(() => { panel = new AccordionPanel(); - layout = panel.layout as AccordionLayout; let widgets = [new Widget(), new Widget(), new Widget()]; widgets.forEach(w => { panel.addWidget(w); From 2d56a0b33e23180e245ff1a905dd83e049b2589a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Thu, 27 Jul 2023 14:59:19 +0200 Subject: [PATCH 6/7] Bracket error for test group --- .../widgets/tests/src/accordionpanel.spec.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/widgets/tests/src/accordionpanel.spec.ts b/packages/widgets/tests/src/accordionpanel.spec.ts index 2ceb533d5..bfff8f05f 100644 --- a/packages/widgets/tests/src/accordionpanel.spec.ts +++ b/packages/widgets/tests/src/accordionpanel.spec.ts @@ -254,16 +254,17 @@ describe('@lumino/widgets', () => { done(); }); panel.collapse(0); - it('should be emitted when the a widget is expanded', done => { - // first collapse a widget - panel.collapse(0); - - panel.expansionToggled.connect((sender, _) => { - expect(sender).to.equal(panel); - done(); - }); - panel.expand(0); + }); + + it('should be emitted when the a widget is expanded', done => { + // first collapse a widget + panel.collapse(0); + + panel.expansionToggled.connect((sender, _) => { + expect(sender).to.equal(panel); + done(); }); + panel.expand(0); }); }); From 841237e960f1ad3b6965dd42669153c3b506a3e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Collonval?= Date: Thu, 27 Jul 2023 15:15:31 +0200 Subject: [PATCH 7/7] Fix API extraction --- review/api/widgets.api.md | 1 + 1 file changed, 1 insertion(+) diff --git a/review/api/widgets.api.md b/review/api/widgets.api.md index 20010fbf3..c11eab012 100644 --- a/review/api/widgets.api.md +++ b/review/api/widgets.api.md @@ -56,6 +56,7 @@ export class AccordionPanel extends SplitPanel { addWidget(widget: Widget): void; collapse(index: number): void; expand(index: number): void; + get expansionToggled(): ISignal; handleEvent(event: Event): void; insertWidget(index: number, widget: Widget): void; protected onAfterDetach(msg: Message): void;