bigbluebutton-Github/bigbluebutton-html5/imports/ui/services/notification/index.js

71 lines
1.7 KiB
JavaScript
Raw Normal View History

/* eslint react/jsx-filename-extension: 0 */
2017-10-13 02:53:33 +08:00
import React from 'react';
import { toast } from 'react-toastify';
2023-02-23 21:27:16 +08:00
import { isEqual } from 'radash';
import Styled from './styles';
2022-02-16 01:57:50 +08:00
import Toast from '/imports/ui/components/common/toast/component';
2017-10-13 02:53:33 +08:00
let lastToast = {
id: null,
message: null,
type: null,
icon: null,
};
export function notify(message, type = 'default', icon, options, content, small) {
2017-10-13 02:53:33 +08:00
const settings = {
type,
...options,
};
const { id: lastToastId, ...lastToastProps } = lastToast;
const toastProps = {
message,
type,
icon,
content,
small,
};
2023-02-23 21:27:16 +08:00
if (!toast.isActive(lastToast.id) || !isEqual(lastToastProps, toastProps)) {
if (options?.helpLink != null && options?.helpLabel != null) {
const id = toast(
<div role="alert">
<Toast {...toastProps} />
<Styled.HelpLinkButton
label={options.helpLabel}
color="default"
size="sm"
onClick={() => { window.open(options.helpLink); }}
data-test="helpLinkToastButton"
/>
</div>, settings,
);
lastToast = { id, ...toastProps };
return id;
}
2021-05-28 02:12:49 +08:00
if (toast.isActive(lastToast.id)
2023-02-23 21:27:16 +08:00
&& isEqual(lastToastProps.key, toastProps.key) && options?.autoClose > 0) {
2021-05-28 02:12:49 +08:00
toast.update(
lastToast.id,
{
render: <div role="alert"><Toast {...toastProps} /></div>,
2021-05-28 02:12:49 +08:00
autoClose: options.autoClose,
...toastProps,
},
);
} else {
const id = toast(<div role="alert"><Toast {...toastProps} /></div>, settings);
2021-05-28 01:46:27 +08:00
lastToast = { id, ...toastProps };
2019-06-13 02:03:23 +08:00
2021-05-28 01:46:27 +08:00
return id;
}
2017-10-13 02:53:33 +08:00
}
2019-06-13 02:03:23 +08:00
return null;
2017-10-21 03:27:00 +08:00
}
2017-10-13 02:53:33 +08:00
2017-10-21 03:27:00 +08:00
export default { notify };