I would render a component as a Label content instead of a string.
Actually I'm getting this error:
The shorthand prop for "Box" component was passed a JSX element but this slot only supports string|number|object|array|ReactElements.
import AudioItem from '../containers/Media'
const AudioLabel = (props) => {
let url = "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3"
const [audio] = useState(new Audio(url));
const [isPaused, setIsPaused] = useState(audio.paused)
return (<Label content={({ ...props }) => (<><span>{props.content}</span> <AudioItem isPaused={isPaused} setIsPaused={setIsPaused} audio={audio} /></>)}
circular
image={{
src: 'public/images/avatar/small/matt.jpg',
avatar: true,
}}
icon={
<CloseIcon
/>}
/>)
}
export default AudioLabel
Called component as prop.
import { Button, Header, List, RadioGroup, ItemLayout } from '@fluentui/react-northstar'
import { PlayIcon, PauseThickIcon } from '@fluentui/react-icons-northstar'
const AudioItem = (props) => {
return (
<ItemLayout
headerMedia={<Button icon={props.isPaused ? (<PlayIcon />) : (<PauseThickIcon />)} onClick={() => { props.isPaused ? props.audio.play() : props.audio.pause(); props.setIsPaused(props.audio.paused) }} text content={props.isPaused ? "Play" : "Pause"} />}
/>
)
}
How can I pass a component (with props) as content?
Issue reproduction
I've checked the
documentationoffluent. What you are trying to achieve is calledrender props in react. Butfluent librarynamed this as Shorthand PropsAccording to their doc you need to follow a specific pattern to achieve this. Here i've added the code for the
Label Componentand it removes the error. sandbox_link