Remove user menu when chat is not available
This commit is contained in:
@@ -1,18 +1,22 @@
|
||||
import { Layout } from 'antd';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { ClientConfigStore, clientConfigStateAtom } from '../stores/ClientConfigStore';
|
||||
import {
|
||||
ClientConfigStore,
|
||||
isChatAvailableSelector,
|
||||
clientConfigStateAtom,
|
||||
} from '../stores/ClientConfigStore';
|
||||
import { Content, Header } from '../ui';
|
||||
import { ClientConfig } from '../../interfaces/client-config.model';
|
||||
|
||||
function Main() {
|
||||
const clientConfig = useRecoilValue<ClientConfig>(clientConfigStateAtom);
|
||||
const { name, title } = clientConfig;
|
||||
|
||||
const isChatAvailable = useRecoilValue<boolean>(isChatAvailableSelector);
|
||||
return (
|
||||
<>
|
||||
<ClientConfigStore />
|
||||
<Layout>
|
||||
<Header name={title || name} />
|
||||
<Header name={title || name} chatAvailable={isChatAvailable} />
|
||||
<Content />
|
||||
</Layout>
|
||||
</>
|
||||
|
||||
@@ -87,6 +87,15 @@ export const isChatVisibleSelector = selector({
|
||||
},
|
||||
});
|
||||
|
||||
export const isChatAvailableSelector = selector({
|
||||
key: 'isChatAvailableSelector',
|
||||
get: ({ get }) => {
|
||||
const state: AppStateOptions = get(appStateAtom);
|
||||
const accessToken: String = get(accessTokenAtom);
|
||||
return accessToken && state.chatAvailable;
|
||||
},
|
||||
});
|
||||
|
||||
// We display in an "online/live" state as long as video is actively playing.
|
||||
// Even during the time where technically the server has said it's no longer
|
||||
// live, however the last few seconds of video playback is still taking place.
|
||||
@@ -182,7 +191,6 @@ export function ClientConfigStore() {
|
||||
};
|
||||
|
||||
const resetAndReAuth = () => {
|
||||
console.log('!!!!! reauth!!');
|
||||
setLocalStorage(ACCESS_TOKEN_KEY, '');
|
||||
setAccessToken('');
|
||||
handleUserRegistration();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Layout } from 'antd';
|
||||
import { Layout, Tag, Tooltip } from 'antd';
|
||||
import { OwncastLogo, UserDropdown } from '../../common';
|
||||
import s from './Header.module.scss';
|
||||
|
||||
@@ -6,16 +6,22 @@ const { Header } = Layout;
|
||||
|
||||
interface Props {
|
||||
name: string;
|
||||
chatAvailable: boolean;
|
||||
}
|
||||
|
||||
export default function HeaderComponent({ name = 'Your stream title' }: Props) {
|
||||
export default function HeaderComponent({ name = 'Your stream title', chatAvailable }: Props) {
|
||||
return (
|
||||
<Header className={`${s.header}`}>
|
||||
<div className={`${s.logo}`}>
|
||||
<OwncastLogo variant="contrast" />
|
||||
<span>{name}</span>
|
||||
</div>
|
||||
<UserDropdown />
|
||||
{chatAvailable && <UserDropdown />}
|
||||
{!chatAvailable && (
|
||||
<Tooltip title="Chat is available when the stream is live." placement="left">
|
||||
<Tag color="processing">Chat offline</Tag>
|
||||
</Tooltip>
|
||||
)}
|
||||
</Header>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,14 @@ const Template: ComponentStory<typeof Header> = args => (
|
||||
</RecoilRoot>
|
||||
);
|
||||
|
||||
export const Example = Template.bind({});
|
||||
Example.args = {
|
||||
export const ChatAvailable = Template.bind({});
|
||||
ChatAvailable.args = {
|
||||
name: 'Example Stream Name',
|
||||
chatAvailable: true,
|
||||
};
|
||||
|
||||
export const ChatNotAvailable = Template.bind({});
|
||||
ChatNotAvailable.args = {
|
||||
name: 'Example Stream Name',
|
||||
chatAvailable: false,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user