Media.tsx 1.29 KiB
Newer Older
Andrei Eres's avatar
Andrei Eres committed
import { useStore } from '@nanostores/react'
Andrei Eres's avatar
Andrei Eres committed
import React from 'react'
import styled from 'styled-components'
Andrei Eres's avatar
Andrei Eres committed
import { cameraAllowedStore, requestCameraAllowed } from '../../stores/media'
Andrei Eres's avatar
Andrei Eres committed
import { BaseProps } from '../types'
Andrei Eres's avatar
Andrei Eres committed
import { isPopup } from '../../utils/isPopup'
import { windowOpen } from '../../messaging/uiActions'
Andrei Eres's avatar
Andrei Eres committed
import { Button } from './Button'

const Media: React.FC<BaseProps> = ({ className }) => {
  const cameraAllowed = useStore(cameraAllowedStore)
  const canGrant = !isPopup()

  const open = () => {
    window.close() // Firefox doen't close it itself
    windowOpen('/')
  }
Andrei Eres's avatar
Andrei Eres committed

  if (cameraAllowed) return null

  return (
    <div className={className}>
      <div className='message'>
        The extension needs access to your camera to scan qr codes from a Parity
        Signer. Open it in new page and give camera access.
      </div>
      {!canGrant && <Button onClick={open}>Open</Button>}
      {canGrant && <Button onClick={requestCameraAllowed}>Grant access</Button>}
    </div>
  )
}

export default styled(Media)`
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin: 0.5rem 0.5rem 0;
  padding: 0.5rem;
  background: var(--color-card-bg);
Andrei Eres's avatar
Andrei Eres committed
  border-radius: 0.2rem;

  .message {
    font-size: var(--font-small-size);
Andrei Eres's avatar
Andrei Eres committed
    padding-right: 1rem;
  }
`