@ -1,4 +1,7 @@
import React , { useState , useContext , useEffect } from 'react' ;
import React , { useState , useContext , useEffect } from 'react' ;
import { Button , Input , Tooltip } from 'antd' ;
import { CopyOutlined , RedoOutlined } from '@ant-design/icons' ;
import TextField , { TEXTFIELD_TYPE_NUMBER , TEXTFIELD_TYPE_PASSWORD } from './form-textfield' ;
import TextField , { TEXTFIELD_TYPE_NUMBER , TEXTFIELD_TYPE_PASSWORD } from './form-textfield' ;
import { ServerStatusContext } from '../../../utils/server-status-context' ;
import { ServerStatusContext } from '../../../utils/server-status-context' ;
@ -14,6 +17,10 @@ export default function EditInstanceDetails() {
const { streamKey , ffmpegPath , rtmpServerPort , webServerPort } = serverConfig ;
const { streamKey , ffmpegPath , rtmpServerPort , webServerPort } = serverConfig ;
const [ copyIsVisible , setCopyVisible ] = useState ( false ) ;
const COPY_TOOLTIP_TIMEOUT = 3000 ;
useEffect ( ( ) = > {
useEffect ( ( ) = > {
setFormDataValues ( {
setFormDataValues ( {
streamKey , ffmpegPath , rtmpServerPort , webServerPort
streamKey , ffmpegPath , rtmpServerPort , webServerPort
@ -31,6 +38,23 @@ export default function EditInstanceDetails() {
} ) ;
} ) ;
}
}
function generateStreamKey ( ) {
let key = '' ;
for ( let i = 0 ; i < 3 ; i += 1 ) {
key += Math . random ( ) . toString ( 36 ) . substring ( 2 ) ;
}
handleFieldChange ( { fieldName : 'streamKey' , value : key } ) ;
}
function copyStreamKey ( ) {
navigator . clipboard . writeText ( formDataValues . streamKey )
. then ( ( ) = > {
setCopyVisible ( true ) ;
setTimeout ( ( ) = > setCopyVisible ( false ) , COPY_TOOLTIP_TIMEOUT ) ;
} ) ;
}
return (
return (
< div className = { configStyles . publicDetailsContainer } >
< div className = { configStyles . publicDetailsContainer } >
< div className = { configStyles . textFieldsSection } >
< div className = { configStyles . textFieldsSection } >
@ -42,6 +66,27 @@ export default function EditInstanceDetails() {
type = { TEXTFIELD_TYPE_PASSWORD }
type = { TEXTFIELD_TYPE_PASSWORD }
onChange = { handleFieldChange }
onChange = { handleFieldChange }
/ >
/ >
< div >
< span style = { { fontSize : '0.75em' , color : '#ff7777' , marginRight : '0.5em' } } >
Save this key somewhere safe ,
you will need it to stream or login to the admin dashboard !
< / span >
< Tooltip className = "copy-tooltip"
title = "Copied!"
trigger = ""
visible = { copyIsVisible } >
< Button type = "primary"
icon = { < CopyOutlined / > }
size = "small"
onClick = { copyStreamKey }
/ >
< / Tooltip >
< Button type = "primary"
icon = { < RedoOutlined / > }
size = "small"
onClick = { generateStreamKey }
/ >
< / div >
< TextField
< TextField
fieldName = "ffmpegPath"
fieldName = "ffmpegPath"
{ . . . TEXTFIELD_PROPS_FFMPEG }
{ . . . TEXTFIELD_PROPS_FFMPEG }