import { Banner, Icon } from '@rocket.chat/fuselage';
import { useStableCallback } from '@rocket.chat/fuselage-hooks';
import { UiKitContext, bannerParser, UiKitBanner as UiKitBannerSurfaceRender, UiKitComponent } from '@rocket.chat/fuselage-ui-kit';
import { useToastMessageDispatch } from '@rocket.chat/ui-contexts';
import type * as UiKit from '@rocket.chat/ui-kit';
import { useMemo } from 'react';
import MarkdownText from '../../components/MarkdownText';
import { useBannerContextValue } from '../../uikit/hooks/useBannerContextValue';
import { useUiKitActionManager } from '../../uikit/hooks/useUiKitActionManager';
import { useUiKitView } from '../../uikit/hooks/useUiKitView';
// TODO: move this to fuselage-ui-kit itself
bannerParser.mrkdwn = ({ text }) => ;
export type UiKitBannerProps = {
key: UiKit.BannerView['viewId']; // force re-mount when viewId changes
initialView: UiKit.BannerView;
};
const UiKitBanner = ({ initialView }: UiKitBannerProps) => {
const { view, values, state } = useUiKitView(initialView);
const actionManager = useUiKitActionManager();
const contextValue = useBannerContextValue({ view, values });
const icon = useMemo(() => {
if (view.icon) {
return ;
}
return null;
}, [view.icon]);
const dispatchToastMessage = useToastMessageDispatch();
const handleClose = useStableCallback(() => {
void actionManager
.emitInteraction(view.appId, {
type: 'viewClosed',
payload: {
viewId: view.viewId,
view: {
...view,
id: view.viewId,
state,
},
isCleared: true,
},
})
.catch((error) => {
dispatchToastMessage({ type: 'error', message: error });
});
});
// TODO: check why we are not considering TextObject as title
if (view.title && typeof view.title !== 'string') {
return null;
}
return (
);
};
export default UiKitBanner;