@api-client/ui 0.0.10 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc +16 -1
- package/demo/elements/index.html +3 -0
- package/demo/elements/store/file-picker.html +15 -0
- package/demo/elements/store/file-picker.ts +134 -0
- package/demo/elements/store/index.html +19 -0
- package/demo/index.html +3 -0
- package/demo/layout/index.html +91 -0
- package/demo/layout/index.ts +182 -0
- package/demo/store/StorePlugin.js +1 -0
- package/dist/bindings/base/StoreBindings.d.ts +5 -0
- package/dist/bindings/base/StoreBindings.d.ts.map +1 -1
- package/dist/bindings/base/StoreBindings.js +15 -1
- package/dist/bindings/base/StoreBindings.js.map +1 -1
- package/dist/define/store/file-picker.d.ts +9 -0
- package/dist/define/store/file-picker.d.ts.map +1 -0
- package/dist/define/store/file-picker.js +10 -0
- package/dist/define/store/file-picker.js.map +1 -0
- package/dist/define/{files → store}/share-file.d.ts +1 -1
- package/dist/define/store/share-file.d.ts.map +1 -0
- package/dist/define/{files → store}/share-file.js +2 -2
- package/dist/define/store/share-file.js.map +1 -0
- package/dist/elements/layout/SplitItem.d.ts +1 -9
- package/dist/elements/layout/SplitItem.d.ts.map +1 -1
- package/dist/elements/layout/SplitItem.js +27 -20
- package/dist/elements/layout/SplitItem.js.map +1 -1
- package/dist/elements/layout/SplitLayout.d.ts +16 -14
- package/dist/elements/layout/SplitLayout.d.ts.map +1 -1
- package/dist/elements/layout/SplitLayout.js +47 -42
- package/dist/elements/layout/SplitLayout.js.map +1 -1
- package/dist/elements/layout/SplitPanel.d.ts +7 -2
- package/dist/elements/layout/SplitPanel.d.ts.map +1 -1
- package/dist/elements/layout/SplitPanel.js +130 -52
- package/dist/elements/layout/SplitPanel.js.map +1 -1
- package/dist/elements/layout/SplitView.d.ts.map +1 -1
- package/dist/elements/layout/SplitView.js +18 -14
- package/dist/elements/layout/SplitView.js.map +1 -1
- package/dist/elements/layout/type.d.ts +3 -3
- package/dist/elements/layout/type.d.ts.map +1 -1
- package/dist/elements/layout/type.js.map +1 -1
- package/dist/elements/store/FilePicker.element.d.ts +87 -0
- package/dist/elements/store/FilePicker.element.d.ts.map +1 -0
- package/dist/elements/store/FilePicker.element.js +263 -0
- package/dist/elements/store/FilePicker.element.js.map +1 -0
- package/dist/elements/store/FilePicker.styles.d.ts +3 -0
- package/dist/elements/store/FilePicker.styles.d.ts.map +1 -0
- package/dist/elements/store/FilePicker.styles.js +72 -0
- package/dist/elements/store/FilePicker.styles.js.map +1 -0
- package/dist/elements/store/FilesLib.d.ts +10 -0
- package/dist/elements/store/FilesLib.d.ts.map +1 -0
- package/dist/elements/store/FilesLib.js +38 -0
- package/dist/elements/store/FilesLib.js.map +1 -0
- package/dist/elements/{files/ShareFile.d.ts → store/ShareFile.element.d.ts} +1 -1
- package/dist/elements/store/ShareFile.element.d.ts.map +1 -0
- package/dist/elements/{files/ShareFile.js → store/ShareFile.element.js} +1 -1
- package/dist/elements/store/ShareFile.element.js.map +1 -0
- package/dist/elements/store/ShareFile.styles.d.ts.map +1 -0
- package/dist/elements/{files → store}/ShareFile.styles.js.map +1 -1
- package/dist/events/EventTypes.d.ts +1 -0
- package/dist/events/EventTypes.d.ts.map +1 -1
- package/dist/events/EventTypes.js +1 -0
- package/dist/events/EventTypes.js.map +1 -1
- package/dist/events/Events.d.ts +1 -0
- package/dist/events/Events.d.ts.map +1 -1
- package/dist/events/StoreEvents.d.ts +8 -1
- package/dist/events/StoreEvents.d.ts.map +1 -1
- package/dist/events/StoreEvents.js +19 -0
- package/dist/events/StoreEvents.js.map +1 -1
- package/dist/pages/ApplicationScreen.d.ts +1 -1
- package/dist/pages/ApplicationScreen.d.ts.map +1 -1
- package/dist/pages/ApplicationScreen.js +4 -2
- package/dist/pages/ApplicationScreen.js.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.d.ts +0 -6
- package/dist/pages/api-client/ApiClient.screen.d.ts.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.js +16 -29
- package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.d.ts +1 -1
- package/dist/pages/api-client/Authenticate.screen.d.ts.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.js +2 -2
- package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
- package/dist/pages/api-client/pages/Files.page.d.ts +6 -35
- package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
- package/dist/pages/api-client/pages/Files.page.js +32 -141
- package/dist/pages/api-client/pages/Files.page.js.map +1 -1
- package/dist/pages/api-client/pages/Shared.page.d.ts +1 -5
- package/dist/pages/api-client/pages/Shared.page.d.ts.map +1 -1
- package/dist/pages/api-client/pages/Shared.page.js +1 -40
- package/dist/pages/api-client/pages/Shared.page.js.map +1 -1
- package/dist/pages/demo/DemoPage.d.ts +7 -0
- package/dist/pages/demo/DemoPage.d.ts.map +1 -1
- package/dist/pages/demo/DemoPage.js +14 -0
- package/dist/pages/demo/DemoPage.js.map +1 -1
- package/dist/pages/http-project/HttpClientCommands.d.ts.map +1 -1
- package/dist/pages/http-project/HttpClientCommands.js +28 -12
- package/dist/pages/http-project/HttpClientCommands.js.map +1 -1
- package/dist/store/FileSystem.d.ts +90 -0
- package/dist/store/FileSystem.d.ts.map +1 -0
- package/dist/store/FileSystem.js +260 -0
- package/dist/store/FileSystem.js.map +1 -0
- package/dist/styles/global-styles.d.ts.map +1 -1
- package/dist/styles/global-styles.js +7 -0
- package/dist/styles/global-styles.js.map +1 -1
- package/dist/ui/icons/Icons.d.ts +2 -1
- package/dist/ui/icons/Icons.d.ts.map +1 -1
- package/dist/ui/icons/Icons.js +1 -0
- package/dist/ui/icons/Icons.js.map +1 -1
- package/dist/ui/list/UiDropdownList.d.ts +9 -1
- package/dist/ui/list/UiDropdownList.d.ts.map +1 -1
- package/dist/ui/list/UiDropdownList.js +39 -17
- package/dist/ui/list/UiDropdownList.js.map +1 -1
- package/dist/ui/list/UiList.d.ts +6 -1
- package/dist/ui/list/UiList.d.ts.map +1 -1
- package/dist/ui/list/UiList.js +24 -9
- package/dist/ui/list/UiList.js.map +1 -1
- package/dist/ui/table/DataTable.d.ts +4 -0
- package/dist/ui/table/DataTable.d.ts.map +1 -1
- package/dist/ui/table/DataTable.js +23 -1
- package/dist/ui/table/DataTable.js.map +1 -1
- package/package.json +2 -1
- package/src/bindings/base/StoreBindings.ts +16 -1
- package/src/define/store/file-picker.ts +12 -0
- package/src/define/{files → store}/share-file.ts +2 -2
- package/src/elements/layout/SplitItem.ts +29 -21
- package/src/elements/layout/SplitLayout.ts +53 -43
- package/src/elements/layout/SplitPanel.ts +140 -57
- package/src/elements/layout/SplitView.ts +18 -15
- package/src/elements/layout/type.ts +3 -4
- package/src/elements/store/FilePicker.element.ts +297 -0
- package/src/elements/store/FilePicker.styles.ts +72 -0
- package/src/elements/store/FilesLib.ts +32 -0
- package/src/events/EventTypes.ts +1 -0
- package/src/events/StoreEvents.ts +21 -1
- package/src/pages/ApplicationScreen.ts +5 -3
- package/src/pages/api-client/ApiClient.screen.ts +16 -31
- package/src/pages/api-client/Authenticate.screen.ts +2 -2
- package/src/pages/api-client/pages/Files.page.ts +37 -164
- package/src/pages/api-client/pages/Shared.page.ts +2 -40
- package/src/pages/demo/DemoPage.ts +17 -0
- package/src/pages/http-project/HttpClientCommands.ts +28 -12
- package/src/store/FileSystem.ts +325 -0
- package/src/styles/global-styles.ts +7 -0
- package/src/ui/icons/Icons.ts +2 -1
- package/src/ui/list/UiDropdownList.ts +44 -17
- package/src/ui/list/UiList.ts +26 -10
- package/src/ui/table/DataTable.ts +29 -3
- package/test/elements/layout/SplitItem.test.ts +76 -75
- package/test/elements/layout/SplitLayoutManager.test.ts +70 -69
- package/test/elements/layout/SplitPanel.test.ts +10 -7
- package/test/elements/store/FilePicker.test.ts +241 -0
- package/test/env.js +3 -0
- package/test/helpers/StoreHelper.ts +390 -0
- package/tsconfig.eslint.json +10 -0
- package/web-test-runner.config.mjs +51 -2
- package/dist/define/files/share-file.d.ts.map +0 -1
- package/dist/define/files/share-file.js.map +0 -1
- package/dist/define/layout/layout-panel.d.ts +0 -7
- package/dist/define/layout/layout-panel.d.ts.map +0 -1
- package/dist/define/layout/layout-panel.js +0 -3
- package/dist/define/layout/layout-panel.js.map +0 -1
- package/dist/elements/files/ShareFile.d.ts.map +0 -1
- package/dist/elements/files/ShareFile.js.map +0 -1
- package/dist/elements/files/ShareFile.styles.d.ts.map +0 -1
- package/dist/elements/layout/LayoutManager.d.ts +0 -327
- package/dist/elements/layout/LayoutManager.d.ts.map +0 -1
- package/dist/elements/layout/LayoutManager.js +0 -747
- package/dist/elements/layout/LayoutManager.js.map +0 -1
- package/dist/elements/layout/LayoutPanelElement.d.ts +0 -62
- package/dist/elements/layout/LayoutPanelElement.d.ts.map +0 -1
- package/dist/elements/layout/LayoutPanelElement.js +0 -628
- package/dist/elements/layout/LayoutPanelElement.js.map +0 -1
- package/src/define/layout/layout-panel.ts +0 -9
- package/src/elements/layout/LayoutManager.ts +0 -930
- package/src/elements/layout/LayoutPanelElement.ts +0 -651
- /package/dist/elements/{files → store}/ShareFile.styles.d.ts +0 -0
- /package/dist/elements/{files → store}/ShareFile.styles.js +0 -0
- /package/src/elements/{files/ShareFile.ts → store/ShareFile.element.ts} +0 -0
- /package/src/elements/{files → store}/ShareFile.styles.ts +0 -0
|
@@ -27,14 +27,15 @@ export interface IDataTableOptions {
|
|
|
27
27
|
|
|
28
28
|
export type RenderContent = string | TemplateResult | TemplateResult[];
|
|
29
29
|
|
|
30
|
-
type DataEvents = 'header' | 'item' | 'empty' | 'activate' | 'select' | 'render';
|
|
30
|
+
type DataEvents = 'header' | 'item' | 'empty' | 'activate' | 'select' | 'render' | 'scrollend';
|
|
31
31
|
|
|
32
32
|
type CellCallback<T> = (item: T) => TemplateResult[];
|
|
33
33
|
type ActivateCallback<T> = (item: T) => void;
|
|
34
34
|
type SelectCallback = (item: string | string[]) => void;
|
|
35
|
+
type Callback = () => void;
|
|
35
36
|
|
|
36
37
|
type DataEventsMap<T> = {
|
|
37
|
-
[key in DataEvents]?: SelectCallback | CellCallback<T> | CellCallback<T[]> | ActivateCallback<T> | ActivateCallback<T[]> | {(): TemplateResult | TemplateResult[]};
|
|
38
|
+
[key in DataEvents]?: Callback | SelectCallback | CellCallback<T> | CellCallback<T[]> | ActivateCallback<T> | ActivateCallback<T[]> | {(): TemplateResult | TemplateResult[]};
|
|
38
39
|
};
|
|
39
40
|
|
|
40
41
|
export interface ICellOptions {
|
|
@@ -227,6 +228,7 @@ export class DataTable<T> {
|
|
|
227
228
|
this.handleClick = this.handleClick.bind(this);
|
|
228
229
|
this.handleKeyDown = this.handleKeyDown.bind(this);
|
|
229
230
|
this.handleFocus = this.handleFocus.bind(this);
|
|
231
|
+
this.handleListScroll = this.handleListScroll.bind(this);
|
|
230
232
|
}
|
|
231
233
|
|
|
232
234
|
addEventListener(type: 'header', listener: () => TemplateResult[]): void;
|
|
@@ -241,6 +243,8 @@ export class DataTable<T> {
|
|
|
241
243
|
|
|
242
244
|
addEventListener(type: 'select', listener: SelectCallback): void;
|
|
243
245
|
|
|
246
|
+
addEventListener(type: 'scrollend', listener: Callback): void;
|
|
247
|
+
|
|
244
248
|
addEventListener(type: DataEvents, listener: SelectCallback | CellCallback<T> | CellCallback<T[]> | ActivateCallback<T> | ActivateCallback<T[]> | {(): TemplateResult | TemplateResult[]}): void {
|
|
245
249
|
this.#listeners[type] = listener;
|
|
246
250
|
}
|
|
@@ -585,6 +589,15 @@ export class DataTable<T> {
|
|
|
585
589
|
}
|
|
586
590
|
}
|
|
587
591
|
|
|
592
|
+
protected handleListScroll(e: Event): void {
|
|
593
|
+
const list = e.target as HTMLElement;
|
|
594
|
+
const { scrollTop, offsetHeight, scrollHeight } = list;
|
|
595
|
+
const bottom = scrollTop + offsetHeight >= scrollHeight - 20; // 20 is the offset which qualifies as the end. An arbitrary number.
|
|
596
|
+
if (bottom) {
|
|
597
|
+
this.dispatchScrollEnd();
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
588
601
|
protected renderHeader(): TemplateResult {
|
|
589
602
|
const cells = this.dispatchHeader();
|
|
590
603
|
return html`
|
|
@@ -602,7 +615,7 @@ export class DataTable<T> {
|
|
|
602
615
|
const contents = !!items && !!items.length ? items.map(item => this.renderItem(item)) : this.renderEmpty();
|
|
603
616
|
const dbListener = active ? this.dblclickHandler : undefined;
|
|
604
617
|
return html`
|
|
605
|
-
<div class="data-table-body" role="rowgroup" @dblclick="${dbListener}">
|
|
618
|
+
<div class="data-table-body" role="rowgroup" @dblclick="${dbListener}" @scroll="${{ handleEvent: this.handleListScroll, passive: true }}">
|
|
606
619
|
${contents}
|
|
607
620
|
</div>`;
|
|
608
621
|
}
|
|
@@ -715,4 +728,17 @@ export class DataTable<T> {
|
|
|
715
728
|
console.warn(e);
|
|
716
729
|
}
|
|
717
730
|
}
|
|
731
|
+
|
|
732
|
+
protected dispatchScrollEnd(): void {
|
|
733
|
+
const callback = this.#listeners.scrollend as Callback;
|
|
734
|
+
if (!callback) {
|
|
735
|
+
return;
|
|
736
|
+
}
|
|
737
|
+
try {
|
|
738
|
+
callback();
|
|
739
|
+
} catch (e) {
|
|
740
|
+
// eslint-disable-next-line no-console
|
|
741
|
+
console.warn(e);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
718
744
|
}
|
|
@@ -295,7 +295,7 @@ describe('layout', () => {
|
|
|
295
295
|
});
|
|
296
296
|
});
|
|
297
297
|
|
|
298
|
-
describe('
|
|
298
|
+
describe('getParents()', () => {
|
|
299
299
|
let manager: SplitLayout;
|
|
300
300
|
|
|
301
301
|
beforeEach(() => {
|
|
@@ -308,8 +308,8 @@ describe('layout', () => {
|
|
|
308
308
|
kind: 'test-kind',
|
|
309
309
|
label: 'test-label',
|
|
310
310
|
});
|
|
311
|
-
const result = instance.
|
|
312
|
-
assert.
|
|
311
|
+
const result = instance.getParents();
|
|
312
|
+
assert.deepEqual(result, []);
|
|
313
313
|
});
|
|
314
314
|
|
|
315
315
|
it('returns the parent panel', () => {
|
|
@@ -319,81 +319,82 @@ describe('layout', () => {
|
|
|
319
319
|
kind: 'test-kind',
|
|
320
320
|
label: 'test-label',
|
|
321
321
|
});
|
|
322
|
-
const result = instance.
|
|
323
|
-
assert.deepEqual(result, panel);
|
|
322
|
+
const result = instance.getParents();
|
|
323
|
+
assert.deepEqual(result, [panel]);
|
|
324
324
|
});
|
|
325
325
|
});
|
|
326
326
|
|
|
327
|
-
describe('remove()', () => {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
});
|
|
327
|
+
// describe('remove()', () => {
|
|
328
|
+
// let manager: SplitLayout;
|
|
329
|
+
// let panel: SplitPanel;
|
|
330
|
+
// let item: SplitItem;
|
|
331
|
+
|
|
332
|
+
// beforeEach(() => {
|
|
333
|
+
// manager = new SplitLayout();
|
|
334
|
+
// panel = manager.addPanel();
|
|
335
|
+
// item = panel.addItem({
|
|
336
|
+
// key: 'test-key',
|
|
337
|
+
// kind: 'test-kind',
|
|
338
|
+
// label: 'test-label',
|
|
339
|
+
// });
|
|
340
|
+
// });
|
|
341
|
+
|
|
342
|
+
// it('removes the item from definitions', () => {
|
|
343
|
+
// item.remove();
|
|
344
|
+
// const result = manager.definitions.get(item.key);
|
|
345
|
+
// assert.notOk(result);
|
|
346
|
+
// });
|
|
347
|
+
|
|
348
|
+
// it('removes the item from the parent items', () => {
|
|
349
|
+
// item.remove();
|
|
350
|
+
// assert.deepEqual(panel.items, []);
|
|
351
|
+
// });
|
|
352
|
+
|
|
353
|
+
// it('informs the panel listeners about item removed', () => {
|
|
354
|
+
// const spy = sinon.spy();
|
|
355
|
+
// manager.addEventListener('closetab', spy);
|
|
356
|
+
// item.remove();
|
|
357
|
+
// assert.isTrue(spy.calledOnce, 'the event is dispatched');
|
|
358
|
+
// const e = spy.args[0][0] as CustomEvent<ITabCloseDetail>;
|
|
359
|
+
// assert.equal(e.detail.tab, item.key, 'has the item key on the detail')
|
|
360
|
+
// assert.equal(e.detail.panel, panel.key, 'has the panel key on the detail')
|
|
361
|
+
// });
|
|
362
|
+
|
|
363
|
+
// it('informs the panel listeners about layout change', () => {
|
|
364
|
+
// const spy = sinon.spy();
|
|
365
|
+
// manager.addEventListener('change', spy);
|
|
366
|
+
// item.remove();
|
|
367
|
+
// assert.isTrue(spy.calledOnce, 'the event is dispatched');
|
|
368
|
+
// });
|
|
369
|
+
// });
|
|
370
|
+
|
|
371
|
+
// describe('setSelected()', () => {
|
|
372
|
+
// let manager: SplitLayout;
|
|
373
|
+
// let panel: SplitPanel;
|
|
374
|
+
// let item: SplitItem;
|
|
375
|
+
|
|
376
|
+
// beforeEach(() => {
|
|
377
|
+
// manager = new SplitLayout();
|
|
378
|
+
// panel = manager.addPanel();
|
|
379
|
+
// item = panel.addItem({
|
|
380
|
+
// key: 'test-key',
|
|
381
|
+
// kind: 'test-kind',
|
|
382
|
+
// label: 'test-label',
|
|
383
|
+
// });
|
|
384
|
+
// });
|
|
385
|
+
|
|
386
|
+
// it('sets item selected with the panel', () => {
|
|
387
|
+
// item.setSelected();
|
|
388
|
+
// assert.equal(panel.selected, item.key);
|
|
389
|
+
// });
|
|
390
|
+
|
|
391
|
+
// it('informs the panel listeners about layout change', () => {
|
|
392
|
+
// const spy = sinon.spy();
|
|
393
|
+
// manager.addEventListener('change', spy);
|
|
394
|
+
// item.setSelected();
|
|
395
|
+
// assert.isTrue(spy.calledOnce, 'the event is dispatched');
|
|
396
|
+
// });
|
|
397
|
+
// });
|
|
397
398
|
|
|
398
399
|
describe('setLabel()', () => {
|
|
399
400
|
let manager: SplitLayout;
|
|
@@ -2,10 +2,10 @@ import { assert, aTimeout, fixture, html } from '@open-wc/testing';
|
|
|
2
2
|
import { TemplateResult } from 'lit';
|
|
3
3
|
import sinon from 'sinon';
|
|
4
4
|
import { ISplitItem, SplitItem } from '../../../src/elements/layout/SplitItem.js';
|
|
5
|
-
import { SplitLayout } from '../../../src/elements/layout/SplitLayout.js';
|
|
5
|
+
import { ITabCloseDetail, SplitLayout } from '../../../src/elements/layout/SplitLayout.js';
|
|
6
6
|
import { ISplitPanel, SplitPanel } from '../../../src/elements/layout/SplitPanel.js';
|
|
7
7
|
import SplitView from '../../../src/elements/layout/SplitView.js';
|
|
8
|
-
import { LayoutType,
|
|
8
|
+
import { LayoutType, SplitDirection, SplitRegion } from '../../../src/elements/layout/type.js';
|
|
9
9
|
import '../../../src/define/layout/split-view.js';
|
|
10
10
|
|
|
11
11
|
describe('layout', () => {
|
|
@@ -194,29 +194,29 @@ describe('layout', () => {
|
|
|
194
194
|
});
|
|
195
195
|
});
|
|
196
196
|
|
|
197
|
-
describe('
|
|
197
|
+
describe('getParents()', () => {
|
|
198
198
|
let manager: SplitLayout;
|
|
199
199
|
|
|
200
200
|
beforeEach(() => {
|
|
201
201
|
manager = new SplitLayout();
|
|
202
202
|
});
|
|
203
203
|
|
|
204
|
-
it('returns
|
|
205
|
-
const result = manager.
|
|
206
|
-
assert.
|
|
204
|
+
it('returns empty array when no item or panel', () => {
|
|
205
|
+
const result = manager.getParents('unknown');
|
|
206
|
+
assert.deepEqual(result, []);
|
|
207
207
|
});
|
|
208
208
|
|
|
209
209
|
it('returns a parent for a panel that is a panel', () => {
|
|
210
210
|
const p1 = manager.addPanel();
|
|
211
211
|
const p2 = p1.addPanel();
|
|
212
|
-
const result = manager.
|
|
213
|
-
assert.deepEqual(result, p1);
|
|
212
|
+
const result = manager.getParents(p2.key);
|
|
213
|
+
assert.deepEqual(result, [p1]);
|
|
214
214
|
});
|
|
215
215
|
|
|
216
|
-
it('returns
|
|
216
|
+
it('returns empty array when the parent is the manager', () => {
|
|
217
217
|
const p1 = manager.addPanel();
|
|
218
|
-
const result = manager.
|
|
219
|
-
assert.
|
|
218
|
+
const result = manager.getParents(p1.key);
|
|
219
|
+
assert.deepEqual(result, []);
|
|
220
220
|
});
|
|
221
221
|
|
|
222
222
|
it('returns a parent for an item', () => {
|
|
@@ -226,20 +226,20 @@ describe('layout', () => {
|
|
|
226
226
|
key: 'b',
|
|
227
227
|
label: 'c',
|
|
228
228
|
});
|
|
229
|
-
const result = manager.
|
|
230
|
-
assert.deepEqual(result, p1);
|
|
229
|
+
const result = manager.getParents(i1.key);
|
|
230
|
+
assert.deepEqual(result, [p1]);
|
|
231
231
|
});
|
|
232
232
|
|
|
233
|
-
it('returns
|
|
233
|
+
it('returns empty array for an item that has been removes', () => {
|
|
234
234
|
const p1 = manager.addPanel();
|
|
235
235
|
const i1 = p1.addItem({
|
|
236
236
|
kind: 'a',
|
|
237
237
|
key: 'b',
|
|
238
238
|
label: 'c',
|
|
239
239
|
});
|
|
240
|
-
|
|
241
|
-
const result = manager.
|
|
242
|
-
assert.
|
|
240
|
+
p1.removeChildItem(i1);
|
|
241
|
+
const result = manager.getParents(i1.key);
|
|
242
|
+
assert.deepEqual(result, []);
|
|
243
243
|
});
|
|
244
244
|
});
|
|
245
245
|
|
|
@@ -361,10 +361,11 @@ describe('layout', () => {
|
|
|
361
361
|
it('dispatches the "nameitem" event', () => {
|
|
362
362
|
const spy = sinon.spy();
|
|
363
363
|
manager.addEventListener('closetab', spy);
|
|
364
|
-
manager.notifyTabClose('test');
|
|
364
|
+
manager.notifyTabClose('test', 'key');
|
|
365
365
|
assert.isTrue(spy.calledOnce);
|
|
366
|
-
const event = spy.args[0][0] as CustomEvent<
|
|
367
|
-
assert.equal(event.detail, 'test');
|
|
366
|
+
const event = spy.args[0][0] as CustomEvent<ITabCloseDetail>;
|
|
367
|
+
assert.equal(event.detail.tab, 'test');
|
|
368
|
+
assert.equal(event.detail.panel, 'key');
|
|
368
369
|
});
|
|
369
370
|
});
|
|
370
371
|
|
|
@@ -484,7 +485,7 @@ describe('layout', () => {
|
|
|
484
485
|
kind: '',
|
|
485
486
|
label: '',
|
|
486
487
|
});
|
|
487
|
-
const parent = i1.
|
|
488
|
+
const parent = i1.getParents()[0];
|
|
488
489
|
assert.ok(parent, 'has the parent');
|
|
489
490
|
const foundParent = manager.findPanel(parent.key);
|
|
490
491
|
assert.ok(foundParent, 'the parent is in the layout');
|
|
@@ -500,7 +501,7 @@ describe('layout', () => {
|
|
|
500
501
|
kind: '',
|
|
501
502
|
label: '',
|
|
502
503
|
});
|
|
503
|
-
const itemParent = i1.
|
|
504
|
+
const itemParent = i1.getParents()[0];
|
|
504
505
|
// p1 has panels in it so it must be p2.
|
|
505
506
|
assert.deepEqual(itemParent, p2);
|
|
506
507
|
});
|
|
@@ -514,7 +515,7 @@ describe('layout', () => {
|
|
|
514
515
|
kind: '',
|
|
515
516
|
label: '',
|
|
516
517
|
});
|
|
517
|
-
const itemParent = i1.
|
|
518
|
+
const itemParent = i1.getParents()[0];
|
|
518
519
|
assert.deepEqual(itemParent, p2);
|
|
519
520
|
});
|
|
520
521
|
|
|
@@ -721,48 +722,48 @@ describe('layout', () => {
|
|
|
721
722
|
});
|
|
722
723
|
});
|
|
723
724
|
|
|
724
|
-
describe('removeRelative()', () => {
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
});
|
|
725
|
+
// describe('removeRelative()', () => {
|
|
726
|
+
// let manager: SplitLayout;
|
|
727
|
+
|
|
728
|
+
// beforeEach(() => {
|
|
729
|
+
// manager = new SplitLayout();
|
|
730
|
+
// });
|
|
731
|
+
|
|
732
|
+
// it('calls removeRelative() on the parent with defaults', () => {
|
|
733
|
+
// const p1 = manager.addPanel();
|
|
734
|
+
// const spy = sinon.spy(p1, 'removeRelative');
|
|
735
|
+
// const i1 = p1.addItem({
|
|
736
|
+
// key: 'i1',
|
|
737
|
+
// kind: '',
|
|
738
|
+
// label: '',
|
|
739
|
+
// });
|
|
740
|
+
// manager.removeRelative(i1.key);
|
|
741
|
+
// assert.isTrue(spy.calledOnce);
|
|
742
|
+
// assert.equal(spy.args[0][0], i1.key, 'passes the key');
|
|
743
|
+
// assert.isUndefined(spy.args[0][1], 'has no direction specified');
|
|
744
|
+
// });
|
|
745
|
+
|
|
746
|
+
// it('calls removeRelative() on the parent with the direction', () => {
|
|
747
|
+
// const p1 = manager.addPanel();
|
|
748
|
+
// const spy = sinon.spy(p1, 'removeRelative');
|
|
749
|
+
// const i1 = p1.addItem({
|
|
750
|
+
// key: 'i1',
|
|
751
|
+
// kind: '',
|
|
752
|
+
// label: '',
|
|
753
|
+
// });
|
|
754
|
+
// manager.removeRelative(i1.key, SplitCloseDirection.left);
|
|
755
|
+
// assert.isTrue(spy.calledOnce);
|
|
756
|
+
// assert.equal(spy.args[0][0], i1.key, 'passes the key');
|
|
757
|
+
// assert.equal(spy.args[0][1], SplitCloseDirection.left, 'has the direction');
|
|
758
|
+
// });
|
|
759
|
+
|
|
760
|
+
// it('does nothing when item is not found', () => {
|
|
761
|
+
// const p1 = manager.addPanel();
|
|
762
|
+
// const spy = sinon.spy(p1, 'removeRelative');
|
|
763
|
+
// manager.removeRelative('unknown', SplitCloseDirection.left);
|
|
764
|
+
// assert.isFalse(spy.called);
|
|
765
|
+
// });
|
|
766
|
+
// });
|
|
766
767
|
|
|
767
768
|
describe('moveItem()', () => {
|
|
768
769
|
let manager: SplitLayout;
|
|
@@ -788,7 +789,7 @@ describe('layout', () => {
|
|
|
788
789
|
kind: '',
|
|
789
790
|
label: '',
|
|
790
791
|
});
|
|
791
|
-
manager.moveItem(p1.key, p1.key, i1.key, 1);
|
|
792
|
+
manager.moveItem(p1.key, p1.key, i1.key, { index: 1 });
|
|
792
793
|
assert.equal(i1.index, 1, 'the #1 has changed index');
|
|
793
794
|
assert.equal(i2.index, 0, 'the #2 has changed index');
|
|
794
795
|
assert.equal(i3.index, 2, 'the #3 has unchanged index');
|
|
@@ -812,7 +813,7 @@ describe('layout', () => {
|
|
|
812
813
|
kind: '',
|
|
813
814
|
label: '',
|
|
814
815
|
});
|
|
815
|
-
manager.moveItem(p1.key, p2.key, i1.key, 0);
|
|
816
|
+
manager.moveItem(p1.key, p2.key, i1.key, { index: 0 });
|
|
816
817
|
const readI1 = manager.findItem(i1.key)!;
|
|
817
818
|
assert.ok(readI1, 'the manager has the moved item');
|
|
818
819
|
assert.isFalse(p1.hasItem(i1.key), 'item was removed from the from parent');
|
|
@@ -830,7 +831,7 @@ describe('layout', () => {
|
|
|
830
831
|
label: '',
|
|
831
832
|
});
|
|
832
833
|
assert.throws(() => {
|
|
833
|
-
manager.moveItem('unknown', p1.key, i1.key, 0);
|
|
834
|
+
manager.moveItem('unknown', p1.key, i1.key, { index: 0 });
|
|
834
835
|
}, 'Source layout panel not found.');
|
|
835
836
|
});
|
|
836
837
|
|
|
@@ -842,7 +843,7 @@ describe('layout', () => {
|
|
|
842
843
|
label: '',
|
|
843
844
|
});
|
|
844
845
|
assert.throws(() => {
|
|
845
|
-
manager.moveItem(p1.key, 'unknown', i1.key, 0);
|
|
846
|
+
manager.moveItem(p1.key, 'unknown', i1.key, { index: 0 });
|
|
846
847
|
}, 'Target layout panel not found.');
|
|
847
848
|
});
|
|
848
849
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { assert } from '@open-wc/testing';
|
|
2
2
|
import sinon from 'sinon';
|
|
3
3
|
import { SplitItem } from '../../../src/elements/layout/SplitItem';
|
|
4
|
-
import { SplitLayout } from "../../../src/elements/layout/SplitLayout.js";
|
|
4
|
+
import { ITabCloseDetail, SplitLayout } from "../../../src/elements/layout/SplitLayout.js";
|
|
5
5
|
import { SplitPanel } from '../../../src/elements/layout/SplitPanel.js';
|
|
6
6
|
import { IPanelObject, LayoutType, PanelState, SplitCloseDirection, SplitDirection, SplitRegion } from '../../../src/elements/layout/type.js';
|
|
7
7
|
|
|
@@ -822,8 +822,9 @@ describe('layout', () => {
|
|
|
822
822
|
manager.addEventListener('closetab', spy);
|
|
823
823
|
panel.removeItem(i1.key);
|
|
824
824
|
assert.isTrue(spy.calledOnce, 'removes the item');
|
|
825
|
-
const event = spy.args[0][0] as CustomEvent<
|
|
826
|
-
assert.equal(event.detail, i1.key, 'has the tab key');
|
|
825
|
+
const event = spy.args[0][0] as CustomEvent<ITabCloseDetail>;
|
|
826
|
+
assert.equal(event.detail.tab, i1.key, 'has the tab key');
|
|
827
|
+
assert.equal(event.detail.panel, panel.key, 'has the panel key');
|
|
827
828
|
});
|
|
828
829
|
|
|
829
830
|
it('notifies tab removed when the panel has more items', () => {
|
|
@@ -842,8 +843,9 @@ describe('layout', () => {
|
|
|
842
843
|
manager.addEventListener('closetab', spy);
|
|
843
844
|
p1.removeItem(i1.key);
|
|
844
845
|
assert.isTrue(spy.calledOnce, 'removes the item');
|
|
845
|
-
const event = spy.args[0][0] as CustomEvent<
|
|
846
|
-
assert.equal(event.detail, i1.key, 'has the tab key');
|
|
846
|
+
const event = spy.args[0][0] as CustomEvent<ITabCloseDetail>;
|
|
847
|
+
assert.equal(event.detail.tab, i1.key, 'has the tab key');
|
|
848
|
+
assert.equal(event.detail.panel, p1.key, 'has the panel key');
|
|
847
849
|
});
|
|
848
850
|
|
|
849
851
|
it('notifies tab removed when removing the panel', () => {
|
|
@@ -857,8 +859,9 @@ describe('layout', () => {
|
|
|
857
859
|
manager.addEventListener('closetab', spy);
|
|
858
860
|
p1.removeItem(i1.key);
|
|
859
861
|
assert.isTrue(spy.calledOnce, 'removes the item');
|
|
860
|
-
const event = spy.args[0][0] as CustomEvent<
|
|
861
|
-
assert.equal(event.detail, i1.key, 'has the tab key');
|
|
862
|
+
const event = spy.args[0][0] as CustomEvent<ITabCloseDetail>;
|
|
863
|
+
assert.equal(event.detail.tab, i1.key, 'has the tab key');
|
|
864
|
+
assert.equal(event.detail.panel, p1.key, 'has the panel key');
|
|
862
865
|
});
|
|
863
866
|
|
|
864
867
|
it('moves the selection to the next item', () => {
|