Browse Source

Moved UserDropdown to comps/common/, updated imports, some styling on Header

pull/2032/head
t1enne 3 years ago
parent
commit
93d69a26eb
  1. 7
      web/components/common/UserDropdown/UserDropdown.module.scss
  2. 29
      web/components/common/UserDropdown/UserDropdown.tsx
  3. 1
      web/components/common/UserDropdown/index.ts
  4. 1
      web/components/common/index.ts
  5. 17
      web/components/ui/Header/Header.module.scss
  6. 15
      web/components/ui/Header/Header.tsx
  7. 10
      web/stories/UserDropdownMenu.stories.tsx

7
web/components/common/UserDropdown/UserDropdown.module.scss

@ -0,0 +1,7 @@
.root {
button {
border: none;
font-size: 1rem;
font-weight: 600;
}
}

29
web/components/UserDropdownMenu.tsx → web/components/common/UserDropdown/UserDropdown.tsx

@ -1,17 +1,16 @@
import { Menu, Dropdown } from 'antd'; import { Menu, Dropdown, Button, Space } from 'antd';
import { DownOutlined } from '@ant-design/icons'; import { DownOutlined } from '@ant-design/icons';
import { useRecoilState } from 'recoil'; import { useRecoilState } from 'recoil';
import { ChatVisibilityState, ChatState } from '../interfaces/application-state'; import { chatVisibilityAtom } from '../../stores/ClientConfigStore';
import { chatVisibilityAtom } from './stores/ClientConfigStore'; import { ChatState, ChatVisibilityState } from '../../../interfaces/application-state';
import s from './UserDropdown.module.scss';
interface Props { interface Props {
username: string; username?: string;
chatState: ChatState; chatState?: ChatState;
} }
export default function UserDropdown(props: Props) { export default function UserDropdown({ username = 'test-user', chatState }: Props) {
const { username, chatState } = props;
const chatEnabled = chatState !== ChatState.NotAvailable; const chatEnabled = chatState !== ChatState.NotAvailable;
const [chatVisibility, setChatVisibility] = const [chatVisibility, setChatVisibility] =
useRecoilState<ChatVisibilityState>(chatVisibilityAtom); useRecoilState<ChatVisibilityState>(chatVisibilityAtom);
@ -37,10 +36,20 @@ export default function UserDropdown(props: Props) {
); );
return ( return (
<Dropdown overlay={menu} trigger={['click']}> <div className={`${s.root}`}>
<Dropdown overlay={menu} trigger={['click']}>
<Button>
<Space>
{username}
<DownOutlined />
</Space>
</Button>
{/*
<button type="button" className="ant-dropdown-link" onClick={e => e.preventDefault()}> <button type="button" className="ant-dropdown-link" onClick={e => e.preventDefault()}>
{username} <DownOutlined /> {username} <DownOutlined />
</button> </button>
</Dropdown> */}
</Dropdown>
</div>
); );
} }

1
web/components/common/UserDropdown/index.ts

@ -0,0 +1 @@
export { default } from './UserDropdown'

1
web/components/common/index.ts

@ -0,0 +1 @@
export { default as UserDropdown } from './UserDropdown'

17
web/components/ui/Header/Header.module.scss

@ -1,4 +1,19 @@
.header { .header {
@apply fixed w-full bg-red; display: flex;
align-items: center;
justify-content: space-between;
z-index: 1; z-index: 1;
padding: .5rem 1rem;
.logo {
display: flex;
align-items: center;
svg {
height: 60px;
}
span {
margin-left: 1rem;
font-size: 1.7rem;
font-weight: 600;
}
}
} }

15
web/components/ui/Header/Header.tsx

@ -1,16 +1,21 @@
import { Layout } from 'antd'; import { Layout } from 'antd';
import UserDropdown from '../../UserDropdownMenu'; import { UserDropdown } from '../../common';
import Logo from '../../logo';
import s from './Header.module.scss'; import s from './Header.module.scss';
const { Header } = Layout; const { Header } = Layout;
export default function HeaderComponent(props) { interface Props {
const { name } = props; name: string;
}
export default function HeaderComponent({ name = 'Your stream title' }: Props) {
return ( return (
<Header className={`${s.header}`}> <Header className={`${s.header}`}>
Logo goes here <div className={`${s.logo}`}>
{name} <Logo />
<span>{name}</span>
</div>
<UserDropdown /> <UserDropdown />
</Header> </Header>
); );

10
web/stories/UserDropdownMenu.stories.tsx

@ -1,23 +1,23 @@
import React from 'react'; import React from 'react';
import { ComponentStory, ComponentMeta } from '@storybook/react'; import { ComponentStory, ComponentMeta } from '@storybook/react';
import { RecoilRoot } from 'recoil'; import { RecoilRoot } from 'recoil';
import UserDropdownMenu from '../components/UserDropdownMenu'; import { UserDropdown } from '../components/common';
import { ChatState } from '../interfaces/application-state'; import { ChatState } from '../interfaces/application-state';
export default { export default {
title: 'owncast/User settings menu', title: 'owncast/User settings menu',
component: UserDropdownMenu, component: UserDropdown,
parameters: {}, parameters: {},
} as ComponentMeta<typeof UserDropdownMenu>; } as ComponentMeta<typeof UserDropdown>;
// This component uses Recoil internally so wrap it in a RecoilRoot. // This component uses Recoil internally so wrap it in a RecoilRoot.
const Example = args => ( const Example = args => (
<RecoilRoot> <RecoilRoot>
<UserDropdownMenu {...args} /> <UserDropdown {...args} />
</RecoilRoot> </RecoilRoot>
); );
const Template: ComponentStory<typeof UserDropdownMenu> = args => <Example {...args} />; const Template: ComponentStory<typeof UserDropdown> = args => <Example {...args} />;
export const ChatEnabled = Template.bind({}); export const ChatEnabled = Template.bind({});
ChatEnabled.args = { ChatEnabled.args = {

Loading…
Cancel
Save