|
|
|
@ -24,6 +24,8 @@ import { parseSecondsToDurationString } from '../../utils/format' |
|
|
|
|
|
|
|
|
|
|
|
import OwncastLogo from './logo'; |
|
|
|
import OwncastLogo from './logo'; |
|
|
|
import { ServerStatusContext } from '../../utils/server-status-context'; |
|
|
|
import { ServerStatusContext } from '../../utils/server-status-context'; |
|
|
|
|
|
|
|
import TextFieldWithSubmit from './config/form-textfield-with-submit'; |
|
|
|
|
|
|
|
import { TEXTFIELD_PROPS_STREAM_TITLE } from './config/constants'; |
|
|
|
|
|
|
|
|
|
|
|
import adminStyles from '../../styles/styles.module.scss'; |
|
|
|
import adminStyles from '../../styles/styles.module.scss'; |
|
|
|
|
|
|
|
|
|
|
|
@ -33,7 +35,10 @@ export default function MainLayout(props) { |
|
|
|
const { children } = props; |
|
|
|
const { children } = props; |
|
|
|
|
|
|
|
|
|
|
|
const context = useContext(ServerStatusContext); |
|
|
|
const context = useContext(ServerStatusContext); |
|
|
|
const { online, broadcaster, versionNumber } = context || {}; |
|
|
|
const { serverConfig, online, broadcaster, versionNumber } = context || {}; |
|
|
|
|
|
|
|
const { instanceDetails } = serverConfig; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const [streamTitle, setStreamTitle] = useState(''); |
|
|
|
|
|
|
|
|
|
|
|
const router = useRouter(); |
|
|
|
const router = useRouter(); |
|
|
|
const { route } = router || {}; |
|
|
|
const { route } = router || {}; |
|
|
|
@ -82,6 +87,15 @@ export default function MainLayout(props) { |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
|
|
|
setStreamTitle(instanceDetails.streamTitle); |
|
|
|
|
|
|
|
}, [instanceDetails]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const handleStreamTitleChanged = ({ value }: UpdateArgs) => { |
|
|
|
|
|
|
|
setStreamTitle(value); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const appClass = classNames({ |
|
|
|
const appClass = classNames({ |
|
|
|
"owncast-layout": true, |
|
|
|
"owncast-layout": true, |
|
|
|
[adminStyles.online]: online, |
|
|
|
[adminStyles.online]: online, |
|
|
|
@ -94,7 +108,7 @@ export default function MainLayout(props) { |
|
|
|
<Layout className={appClass}> |
|
|
|
<Layout className={appClass}> |
|
|
|
<Head> |
|
|
|
<Head> |
|
|
|
<title>Owncast Admin</title> |
|
|
|
<title>Owncast Admin</title> |
|
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon/favicon-32x32.png"/> |
|
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/img/favicon/favicon-32x32.png" /> |
|
|
|
</Head> |
|
|
|
</Head> |
|
|
|
|
|
|
|
|
|
|
|
<Sider |
|
|
|
<Sider |
|
|
|
@ -201,6 +215,17 @@ export default function MainLayout(props) { |
|
|
|
|
|
|
|
|
|
|
|
<Layout className={adminStyles.layoutMain}> |
|
|
|
<Layout className={adminStyles.layoutMain}> |
|
|
|
<Header className={adminStyles.header}> |
|
|
|
<Header className={adminStyles.header}> |
|
|
|
|
|
|
|
<div className={adminStyles.globalStreamTitleContainer}> |
|
|
|
|
|
|
|
<TextFieldWithSubmit |
|
|
|
|
|
|
|
maxLength={100} |
|
|
|
|
|
|
|
className={adminStyles.globalStreamTitleInput} |
|
|
|
|
|
|
|
fieldName="streamTitle" |
|
|
|
|
|
|
|
placeholder="What you're streaming right now" |
|
|
|
|
|
|
|
value={streamTitle} |
|
|
|
|
|
|
|
initialValue={instanceDetails.streamTitle} |
|
|
|
|
|
|
|
onChange={handleStreamTitleChanged} |
|
|
|
|
|
|
|
/> |
|
|
|
|
|
|
|
</div> |
|
|
|
{statusIndicatorWithThumb} |
|
|
|
{statusIndicatorWithThumb} |
|
|
|
</Header> |
|
|
|
</Header> |
|
|
|
<Content className={adminStyles.contentMain}>{children}</Content> |
|
|
|
<Content className={adminStyles.contentMain}>{children}</Content> |
|
|
|
|