From be47c18fe9e173b0de32f3bb73139b45805f7823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Rolda=CC=83o?= Date: Sun, 1 Oct 2017 11:46:35 +0100 Subject: [PATCH] Added events to manager, to play well with routers --- src/Manager.js | 14 ++++++++++++++ src/index.js | 1 + 2 files changed, 15 insertions(+) diff --git a/src/Manager.js b/src/Manager.js index 6d74f72..72ad053 100644 --- a/src/Manager.js +++ b/src/Manager.js @@ -14,9 +14,21 @@ class Manager { this.anchors = {} this.forcedHash = false this.config = defaultConfig + this.hashChangeListeners = [] this.scrollHandler = debounce(this.handleScroll, 100) this.forceHashUpdate = debounce(this.handleHashChange, 1) + this.triggerHashChangeEvent = (hash, affectHistory) => { + this.hashChangeListeners.forEach(fn => fn(hash, affectHistory)) + } + } + + onHashChange = (fn) => { + this.hashChangeListeners.push(fn); + + return () => { + this.hashChangeListeners.splice(this.hashChangeListeners.indexOf(fn), 1); + } } addListeners = () => { @@ -66,8 +78,10 @@ class Manager { if (bestAnchorId && getHash() !== bestAnchorId) { this.forcedHash = true updateHash(bestAnchorId, false) + this.triggerHashChangeEvent(bestAnchorId, false) } else if (!bestAnchorId && !keepLastAnchorHash) { removeHash() + this.triggerHashChangeEvent('', false) } } diff --git a/src/index.js b/src/index.js index 1e20c08..27f17e6 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,7 @@ import Manager from './Manager' export const goToTop = Manager.goToTop export const configureAnchors = Manager.configure +export const onHashChange = Manager.onHashChange export { updateHash as goToAnchor, removeHash } from './utils/hash' export { default } from './ScrollableAnchor'