From 2514eab7d6f9399bf06bcdce474de66620aa998e Mon Sep 17 00:00:00 2001 From: nklhrstv Date: Fri, 28 Oct 2022 15:48:22 +0300 Subject: [PATCH] filter CoreEvent toasts in /player --- src/App/ServicesToaster.js | 5 ++- src/common/Toast/ToastProvider.js | 66 +++++++++++++++++++------------ src/routes/Player/Player.js | 3 ++ 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/src/App/ServicesToaster.js b/src/App/ServicesToaster.js index 395c1fed2..43b076c9a 100644 --- a/src/App/ServicesToaster.js +++ b/src/App/ServicesToaster.js @@ -23,7 +23,10 @@ const ServicesToaster = () => { type: 'error', title: args.source.event, message: args.error.message, - timeout: 4000 + timeout: 4000, + dataset: { + type: 'CoreEvent' + } }); break; } diff --git a/src/common/Toast/ToastProvider.js b/src/common/Toast/ToastProvider.js index 571f79c14..b022c1665 100644 --- a/src/common/Toast/ToastProvider.js +++ b/src/common/Toast/ToastProvider.js @@ -28,32 +28,48 @@ const ToastProvider = ({ className, children }) => { clearTimeout(event.dataset.id); dispatch({ type: 'remove', id: event.dataset.id }); }, []); - const toast = React.useMemo(() => ({ - show: (item) => { - const timeout = typeof item.timeout === 'number' && !isNaN(item.timeout) ? - item.timeout - : - DEFAULT_TIMEOUT; - const id = setTimeout(() => { - dispatch({ type: 'remove', id }); - }, timeout); - dispatch({ - type: 'add', - item: { - ...item, - id, - dataset: { - ...item.dataset, - id - }, - onClose: itemOnClose + const toast = React.useMemo(() => { + const filters = []; + return { + addFilter: (filter) => { + filters.push(filter); + }, + removeFilter: (filter) => { + const index = filters.indexOf(filter); + if (index > -1) { + filters.splice(index, 1); } - }); - }, - clear: () => { - dispatch({ type: 'clear' }); - } - }), []); + }, + show: (item) => { + if (filters.some((filter) => filter(item))) { + return; + } + + const timeout = typeof item.timeout === 'number' && !isNaN(item.timeout) ? + item.timeout + : + DEFAULT_TIMEOUT; + const id = setTimeout(() => { + dispatch({ type: 'remove', id }); + }, timeout); + dispatch({ + type: 'add', + item: { + ...item, + id, + dataset: { + ...item.dataset, + id + }, + onClose: itemOnClose + } + }); + }, + clear: () => { + dispatch({ type: 'clear' }); + } + }; + }, []); return ( {container instanceof HTMLElement ? children : null} diff --git a/src/routes/Player/Player.js b/src/routes/Player/Player.js index b16334c49..91e89c310 100644 --- a/src/routes/Player/Player.js +++ b/src/routes/Player/Player.js @@ -329,6 +329,8 @@ const Player = ({ urlParams, queryParams }) => { }; }, []); React.useEffect(() => { + const toastFilter = (item) => item?.dataset?.type === 'CoreEvent'; + toast.addFilter(toastFilter); const onCastStateChange = () => { setCasting(chromecast.active && chromecast.transport.getCastState() === cast.framework.CastState.CONNECTED); }; @@ -344,6 +346,7 @@ const Player = ({ urlParams, queryParams }) => { chromecast.on('stateChanged', onChromecastServiceStateChange); onChromecastServiceStateChange(); return () => { + toast.removeFilter(toastFilter); chromecast.off('stateChanged', onChromecastServiceStateChange); if (chromecast.active) { chromecast.transport.off(