import {
  OwnCapability,
  PermissionNotification,
  Restricted,
  useRequestPermission,
  useCallStateHooks,
} from "@stream-io/video-react-sdk";
import MyIcon from "../Icon";
export type ToggleAudioPublishingButtonProps = {
  // props ...
};
export const ToggleAudioPublishingButton = (
  props: ToggleAudioPublishingButtonProps,
) => {
  const { hasPermission, requestPermission, isAwaitingPermission } =
    useRequestPermission(OwnCapability.SEND_AUDIO);
  const { useMicrophoneState } = useCallStateHooks();
  const { microphone } = useMicrophoneState();
  return (
    <Restricted requiredGrants={[OwnCapability.SEND_AUDIO]}>
      <PermissionNotification
        permission={OwnCapability.SEND_AUDIO}
        isAwaitingApproval={isAwaitingPermission}
        messageApproved="You can now speak."
        messageAwaitingApproval="Awaiting for an approval to speak."
        messageRevoked="You can no longer speak."
      >
        <MyButton
          onClick={async () => {
            if (!hasPermission) {
              await requestPermission();
            } else {
              await microphone.toggle();
            }
          }}
        >
          <MyIcon />
        </MyButton>
      </PermissionNotification>
    </Restricted>
  );
};Permission notification
The default component used to display permission grant notifications is based on Notification component. It is just a popover displaying text. The text displayed is customisable.

General usage
The PermissionNotification component is used by some call controls buttons. Here we demonstrate, how it can be used in a button that toggles the audio:
Props
isAwaitingApproval
| Type | 
|---|
| boolean | 
Set this to true if there is ongoing request for the permission.
messageApproved
| Type | 
|---|
| string | 
The message to display in the notification once the requested permission is granted.
messageRevoked
| Type | 
|---|
| string | 
The message to display in the notification once a permission is revoked.
messageAwaitingApproval
| Type | 
|---|
| string | 
The message to display in the notification while the requested permission is awaiting approval.
permission
| Type | 
|---|
| OwnCapability | 
The permission for which the notification is displayed.
visibilityTimeout
| Type | Default | 
|---|---|
| number|undefined | 3500 | 
The time in milliseconds to display the notification. Defaults to 3500ms.
Customization
To learn more about creating custom permission requests listings, have a look at our permission requests customization guide.