filter CoreEvent toasts in /player

This commit is contained in:
nklhrstv 2022-10-28 15:48:22 +03:00
parent 92fa3d53a5
commit 2514eab7d6
3 changed files with 48 additions and 26 deletions

View file

@ -23,7 +23,10 @@ const ServicesToaster = () => {
type: 'error',
title: args.source.event,
message: args.error.message,
timeout: 4000
timeout: 4000,
dataset: {
type: 'CoreEvent'
}
});
break;
}

View file

@ -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 (
<ToastContext.Provider value={toast}>
{container instanceof HTMLElement ? children : null}

View file

@ -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(