diff --git a/src/grid/Scrollbar.mjs b/src/grid/Scrollbar.mjs index 161e6ec8e..7f7bbd98b 100644 --- a/src/grid/Scrollbar.mjs +++ b/src/grid/Scrollbar.mjs @@ -39,6 +39,39 @@ class GridScrollbar extends Component { ]} } + /** + * @param {Boolean} mounted + * @protected + */ + async addScrollSync(mounted) { + let me = this, + ScrollSync = Neo.main?.addon?.ScrollSync, + {windowId} = me, + params = {id: me.id, windowId}; + + if (!ScrollSync) { + await Neo.Main.importAddon({name: 'ScrollSync', windowId}); + ScrollSync = Neo.main.addon.ScrollSync + } + + if (mounted) { + ScrollSync.register(params) + } else { + ScrollSync.unregister(params) + } + } + + /** + * Triggered after the mounted config got changed + * @param {Boolean} value + * @param {Boolean} oldValue + * @protected + */ + afterSetMounted(value, oldValue) { + super.afterSetMounted(value, oldValue); + oldValue !== undefined && this.addScrollSync(value) + } + /** * Triggered after the rowHeight config got changed * @param {Number} value diff --git a/src/main/addon/ScrollSync.mjs b/src/main/addon/ScrollSync.mjs new file mode 100644 index 000000000..ffd1ebb5b --- /dev/null +++ b/src/main/addon/ScrollSync.mjs @@ -0,0 +1,43 @@ +import Base from './Base.mjs'; + +/** + * Syncs the scroll state of 2 DOM nodes + * @class Neo.main.addon.ScrollSync + * @extends Neo.main.addon.Base + */ +class ScrollSync extends Base { + static config = { + /** + * @member {String} className='Neo.main.addon.ScrollSync' + * @protected + */ + className: 'Neo.main.addon.ScrollSync', + /** + * Remote method access for other workers + * @member {Object} remote + * @protected + */ + remote: { + app: [ + 'register', + 'unregister' + ] + } + } + + /** + * @param {Object} data + */ + register(data) { + console.log('register', data) + } + + /** + * @param {Object} data + */ + unregister(data) { + console.log('unregister', data) + } +} + +export default Neo.setupClass(ScrollSync);