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 documentation
of fluent
. What you are trying to achieve is called render props in react
. But fluent library
named this as Shorthand Props
According to their doc you need to follow a specific pattern to achieve this. Here i've added the code for the Label Component
and it removes the error. sandbox_link
<Label
content={{
chidren: ({ ...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 />}
/>