| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  | import FlexContainer from "./flex_container.js"; | 
					
						
							| 
									
										
										
										
											2022-12-01 13:07:23 +01:00
										 |  |  | import appContext from "../../components/app_context.js"; | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-03 22:23:11 +02:00
										 |  |  | export default class SplitNoteContainer extends FlexContainer { | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  |     constructor(widgetFactory) { | 
					
						
							|  |  |  |         super('row'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         this.widgetFactory = widgetFactory; | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |         this.widgets = {}; | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-13 22:55:31 +02:00
										 |  |  |         this.class('split-note-container-widget'); | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  |         this.css('flex-grow', '1'); | 
					
						
							| 
									
										
										
										
											2021-06-13 22:55:31 +02:00
										 |  |  |         this.collapsible(); | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 12:35:41 +02:00
										 |  |  |     async newNoteContextCreatedEvent({noteContext}) { | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |         const widget = this.widgetFactory(); | 
					
						
							| 
									
										
										
										
											2021-05-19 23:00:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |         const $renderedWidget = widget.render(); | 
					
						
							| 
									
										
										
										
											2021-05-19 23:00:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 21:05:44 +02:00
										 |  |  |         $renderedWidget.attr("data-ntx-id", noteContext.ntxId); | 
					
						
							| 
									
										
										
										
											2021-05-22 12:35:41 +02:00
										 |  |  |         $renderedWidget.on('click', () => appContext.tabManager.activateNoteContext(noteContext.ntxId)); | 
					
						
							| 
									
										
										
										
											2021-05-19 23:00:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-21 22:34:40 +02:00
										 |  |  |         this.$widget.append($renderedWidget); | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 22:55:24 +02:00
										 |  |  |         widget.handleEvent('initialRenderComplete'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |         widget.toggleExt(false); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 12:26:45 +02:00
										 |  |  |         this.widgets[noteContext.ntxId] = widget; | 
					
						
							| 
									
										
										
										
											2021-05-19 23:00:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 12:26:45 +02:00
										 |  |  |         await widget.handleEvent('setNoteContext', { noteContext }); | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |         this.child(widget); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-18 22:05:06 +01:00
										 |  |  |     async openNewNoteSplitEvent({ntxId, notePath, hoistedNoteId}) { | 
					
						
							| 
									
										
										
										
											2022-12-08 23:29:08 +01:00
										 |  |  |         const mainNtxId = appContext.tabManager.getActiveMainContext().ntxId; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-27 21:32:03 +02:00
										 |  |  |         if (!ntxId) { | 
					
						
							|  |  |  |             logError("empty ntxId!"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-08 23:29:08 +01:00
										 |  |  |             ntxId = mainNtxId; | 
					
						
							| 
									
										
										
										
											2021-10-27 21:32:03 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-18 22:05:06 +01:00
										 |  |  |         hoistedNoteId = hoistedNoteId || appContext.tabManager.getActiveContext().hoistedNoteId; | 
					
						
							| 
									
										
										
										
											2022-12-08 23:29:08 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         const noteContext = await appContext.tabManager.openEmptyTab(null, hoistedNoteId, mainNtxId); | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 21:43:24 +02:00
										 |  |  |         // remove the original position of newly created note context
 | 
					
						
							| 
									
										
										
										
											2021-05-24 21:05:44 +02:00
										 |  |  |         const ntxIds = appContext.tabManager.children.map(c => c.ntxId) | 
					
						
							|  |  |  |             .filter(id => id !== noteContext.ntxId); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 21:43:24 +02:00
										 |  |  |         // insert the note context after the originating note context
 | 
					
						
							| 
									
										
										
										
											2021-05-24 21:05:44 +02:00
										 |  |  |         ntxIds.splice(ntxIds.indexOf(ntxId) + 1, 0, noteContext.ntxId); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-27 21:32:03 +02:00
										 |  |  |         this.triggerCommand("noteContextReorder", {ntxIdsInOrder: ntxIds}); | 
					
						
							| 
									
										
										
										
											2021-05-24 21:05:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 21:43:24 +02:00
										 |  |  |         // move the note context rendered widget after the originating widget
 | 
					
						
							| 
									
										
										
										
											2021-05-24 21:05:44 +02:00
										 |  |  |         this.$widget.find(`[data-ntx-id="${noteContext.ntxId}"]`) | 
					
						
							| 
									
										
										
										
											2021-05-24 21:43:24 +02:00
										 |  |  |             .insertAfter(this.$widget.find(`[data-ntx-id="${ntxId}"]`)); | 
					
						
							| 
									
										
										
										
											2021-05-24 21:05:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 12:35:41 +02:00
										 |  |  |         await appContext.tabManager.activateNoteContext(noteContext.ntxId); | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-03 12:25:33 +02:00
										 |  |  |         if (notePath) { | 
					
						
							|  |  |  |             await noteContext.setNote(notePath); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         else { | 
					
						
							|  |  |  |             await noteContext.setEmpty(); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-03 22:23:11 +02:00
										 |  |  |     closeThisNoteSplitCommand({ntxId}) { | 
					
						
							| 
									
										
										
										
											2021-05-24 22:29:49 +02:00
										 |  |  |         appContext.tabManager.removeNoteContext(ntxId); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |     activeContextChangedEvent() { | 
					
						
							|  |  |  |         this.refresh(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     noteSwitchedAndActivatedEvent() { | 
					
						
							|  |  |  |         this.refresh(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-24 22:29:49 +02:00
										 |  |  |     noteContextRemovedEvent({ntxIds}) { | 
					
						
							|  |  |  |         this.children = this.children.filter(c => !ntxIds.includes(c.ntxId)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for (const ntxId of ntxIds) { | 
					
						
							|  |  |  |             this.$widget.find(`[data-ntx-id="${ntxId}"]`).remove(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             delete this.widgets[ntxId]; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-21 22:34:40 +02:00
										 |  |  |     async refresh() { | 
					
						
							|  |  |  |         this.toggleExt(true); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     toggleInt(show) {} // not needed
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     toggleExt(show) { | 
					
						
							| 
									
										
										
										
											2021-05-22 13:04:08 +02:00
										 |  |  |         const activeMainContext = appContext.tabManager.getActiveMainContext(); | 
					
						
							|  |  |  |         const activeNtxId = activeMainContext ? activeMainContext.ntxId : null; | 
					
						
							| 
									
										
										
										
											2021-05-21 22:34:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 12:26:45 +02:00
										 |  |  |         for (const ntxId in this.widgets) { | 
					
						
							|  |  |  |             const noteContext = appContext.tabManager.getNoteContextById(ntxId); | 
					
						
							| 
									
										
										
										
											2021-05-24 21:43:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 12:26:45 +02:00
										 |  |  |             const widget = this.widgets[ntxId]; | 
					
						
							| 
									
										
										
										
											2021-05-22 13:04:08 +02:00
										 |  |  |             widget.toggleExt(show && activeNtxId && [noteContext.ntxId, noteContext.mainNtxId].includes(activeNtxId)); | 
					
						
							| 
									
										
										
										
											2021-05-21 22:34:40 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * widget.hasBeenAlreadyShown is intended for lazy loading of cached tabs - initial note switches of new tabs | 
					
						
							| 
									
										
										
										
											2023-01-15 21:04:17 +01:00
										 |  |  |      * are not executed, we're waiting for the first tab activation, and then we update the tab. After this initial | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |      * activation further note switches are always propagated to the tabs. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     handleEventInChildren(name, data) { | 
					
						
							| 
									
										
										
										
											2021-05-22 12:35:41 +02:00
										 |  |  |         if (['noteSwitched', 'noteSwitchedAndActivated'].includes(name)) { | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |             // this event is propagated only to the widgets of a particular tab
 | 
					
						
							| 
									
										
										
										
											2021-05-22 12:26:45 +02:00
										 |  |  |             const widget = this.widgets[data.noteContext.ntxId]; | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-21 22:34:40 +02:00
										 |  |  |             if (!widget) { | 
					
						
							|  |  |  |                 return Promise.resolve(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |             if (widget.hasBeenAlreadyShown | 
					
						
							|  |  |  |                 || name === 'noteSwitchedAndActivated' | 
					
						
							|  |  |  |                 || appContext.tabManager.getActiveMainContext() === data.noteContext.getMainContext() | 
					
						
							|  |  |  |             ) { | 
					
						
							|  |  |  |                 widget.hasBeenAlreadyShown = true; | 
					
						
							| 
									
										
										
										
											2021-05-21 22:34:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |                 return [ | 
					
						
							|  |  |  |                     widget.handleEvent('noteSwitched', data), | 
					
						
							|  |  |  |                     this.refreshNotShown(data) | 
					
						
							|  |  |  |                 ]; | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |             else { | 
					
						
							|  |  |  |                 return Promise.resolve(); | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |         if (name === 'activeContextChanged') { | 
					
						
							|  |  |  |             return this.refreshNotShown(data); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return super.handleEventInChildren(name, data); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |     refreshNotShown(data) { | 
					
						
							|  |  |  |         const promises = []; | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |         for (const subContext of data.noteContext.getMainContext().getSubContexts()) { | 
					
						
							|  |  |  |             const widget = this.widgets[subContext.ntxId]; | 
					
						
							| 
									
										
										
										
											2021-05-21 22:34:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |             if (!widget.hasBeenAlreadyShown) { | 
					
						
							|  |  |  |                 widget.hasBeenAlreadyShown = true; | 
					
						
							| 
									
										
										
										
											2021-05-21 22:34:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |                 promises.push(widget.handleEvent('activeContextChanged', {noteContext: subContext})); | 
					
						
							| 
									
										
										
										
											2021-05-20 23:13:34 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 22:55:24 +02:00
										 |  |  |         this.refresh(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-22 17:58:46 +02:00
										 |  |  |         return Promise.all(promises); | 
					
						
							| 
									
										
										
										
											2021-05-19 22:45:34 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | } |