145 lines
		
	
	
	
		
			4.4 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
	
		
			4.4 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
// Copyright 2020 Signal Messenger, LLC
 | 
						|
// SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 | 
						|
import type { ReactNode } from 'react';
 | 
						|
import React from 'react';
 | 
						|
import classNames from 'classnames';
 | 
						|
import type { LocalizerType } from '../types/Util';
 | 
						|
import { Tooltip } from './Tooltip';
 | 
						|
import { Theme } from '../util/theme';
 | 
						|
 | 
						|
export type PropsType = {
 | 
						|
  i18n: LocalizerType;
 | 
						|
  isInSpeakerView?: boolean;
 | 
						|
  isGroupCall?: boolean;
 | 
						|
  message?: ReactNode;
 | 
						|
  onCancel?: () => void;
 | 
						|
  participantCount: number;
 | 
						|
  showParticipantsList: boolean;
 | 
						|
  title?: string;
 | 
						|
  toggleParticipants?: () => void;
 | 
						|
  togglePip?: () => void;
 | 
						|
  toggleSettings: () => void;
 | 
						|
  toggleSpeakerView?: () => void;
 | 
						|
};
 | 
						|
 | 
						|
export function CallingHeader({
 | 
						|
  i18n,
 | 
						|
  isInSpeakerView,
 | 
						|
  isGroupCall = false,
 | 
						|
  message,
 | 
						|
  onCancel,
 | 
						|
  participantCount,
 | 
						|
  showParticipantsList,
 | 
						|
  title,
 | 
						|
  toggleParticipants,
 | 
						|
  togglePip,
 | 
						|
  toggleSettings,
 | 
						|
  toggleSpeakerView,
 | 
						|
}: PropsType): JSX.Element {
 | 
						|
  return (
 | 
						|
    <div className="module-calling__header">
 | 
						|
      {title ? (
 | 
						|
        <div className="module-calling__header--header-name">{title}</div>
 | 
						|
      ) : null}
 | 
						|
      {message ? (
 | 
						|
        <div className="module-ongoing-call__header-message">{message}</div>
 | 
						|
      ) : null}
 | 
						|
      <div className="module-calling-tools">
 | 
						|
        {isGroupCall && participantCount ? (
 | 
						|
          <div className="module-calling-tools__button">
 | 
						|
            <Tooltip
 | 
						|
              content={i18n('calling__participants', {
 | 
						|
                people: String(participantCount),
 | 
						|
              })}
 | 
						|
              theme={Theme.Dark}
 | 
						|
            >
 | 
						|
              <button
 | 
						|
                aria-label={i18n('calling__participants', {
 | 
						|
                  people: String(participantCount),
 | 
						|
                })}
 | 
						|
                className={classNames(
 | 
						|
                  'CallingButton__participants--container',
 | 
						|
                  {
 | 
						|
                    'CallingButton__participants--shown': showParticipantsList,
 | 
						|
                  }
 | 
						|
                )}
 | 
						|
                onClick={toggleParticipants}
 | 
						|
                type="button"
 | 
						|
              >
 | 
						|
                <i className="CallingButton__participants" />
 | 
						|
                <span className="CallingButton__participants--count">
 | 
						|
                  {participantCount}
 | 
						|
                </span>
 | 
						|
              </button>
 | 
						|
            </Tooltip>
 | 
						|
          </div>
 | 
						|
        ) : null}
 | 
						|
        <div className="module-calling-tools__button">
 | 
						|
          <Tooltip
 | 
						|
            content={i18n('callingDeviceSelection__settings')}
 | 
						|
            theme={Theme.Dark}
 | 
						|
          >
 | 
						|
            <button
 | 
						|
              aria-label={i18n('callingDeviceSelection__settings')}
 | 
						|
              className="CallingButton__settings"
 | 
						|
              onClick={toggleSettings}
 | 
						|
              type="button"
 | 
						|
            />
 | 
						|
          </Tooltip>
 | 
						|
        </div>
 | 
						|
        {isGroupCall && participantCount > 2 && toggleSpeakerView && (
 | 
						|
          <div className="module-calling-tools__button">
 | 
						|
            <Tooltip
 | 
						|
              content={
 | 
						|
                isInSpeakerView
 | 
						|
                  ? i18n('calling__switch-view--to-grid')
 | 
						|
                  : i18n('calling__switch-view--to-speaker')
 | 
						|
              }
 | 
						|
              theme={Theme.Dark}
 | 
						|
            >
 | 
						|
              <button
 | 
						|
                aria-label={
 | 
						|
                  isInSpeakerView
 | 
						|
                    ? i18n('calling__switch-view--to-grid')
 | 
						|
                    : i18n('calling__switch-view--to-speaker')
 | 
						|
                }
 | 
						|
                className={
 | 
						|
                  isInSpeakerView
 | 
						|
                    ? 'CallingButton__grid-view'
 | 
						|
                    : 'CallingButton__speaker-view'
 | 
						|
                }
 | 
						|
                onClick={toggleSpeakerView}
 | 
						|
                type="button"
 | 
						|
              />
 | 
						|
            </Tooltip>
 | 
						|
          </div>
 | 
						|
        )}
 | 
						|
        {togglePip && (
 | 
						|
          <div className="module-calling-tools__button">
 | 
						|
            <Tooltip content={i18n('calling__pip--on')} theme={Theme.Dark}>
 | 
						|
              <button
 | 
						|
                aria-label={i18n('calling__pip--on')}
 | 
						|
                className="CallingButton__pip"
 | 
						|
                onClick={togglePip}
 | 
						|
                type="button"
 | 
						|
              />
 | 
						|
            </Tooltip>
 | 
						|
          </div>
 | 
						|
        )}
 | 
						|
        {onCancel && (
 | 
						|
          <div className="module-calling-tools__button">
 | 
						|
            <Tooltip content={i18n('cancel')} theme={Theme.Dark}>
 | 
						|
              <button
 | 
						|
                aria-label={i18n('cancel')}
 | 
						|
                className="CallingButton__cancel"
 | 
						|
                onClick={onCancel}
 | 
						|
                type="button"
 | 
						|
              />
 | 
						|
            </Tooltip>
 | 
						|
          </div>
 | 
						|
        )}
 | 
						|
      </div>
 | 
						|
    </div>
 | 
						|
  );
 | 
						|
}
 |