49 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2023 Signal Messenger, LLC
							 | 
						||
| 
								 | 
							
								// SPDX-License-Identifier: AGPL-3.0-only
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import type { ReactNode } from 'react';
							 | 
						||
| 
								 | 
							
								import React, { useCallback } from 'react';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const BASE_CLASS_NAME = 'LeftPaneBanner';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export type PropsType = Readonly<{
							 | 
						||
| 
								 | 
							
								  children?: ReactNode;
							 | 
						||
| 
								 | 
							
								  actionText: string;
							 | 
						||
| 
								 | 
							
								  onClick: () => void;
							 | 
						||
| 
								 | 
							
								}>;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export function LeftPaneBanner({
							 | 
						||
| 
								 | 
							
								  children,
							 | 
						||
| 
								 | 
							
								  actionText,
							 | 
						||
| 
								 | 
							
								  onClick,
							 | 
						||
| 
								 | 
							
								}: PropsType): JSX.Element {
							 | 
						||
| 
								 | 
							
								  const onClickWrap = useCallback(
							 | 
						||
| 
								 | 
							
								    (e: React.MouseEvent) => {
							 | 
						||
| 
								 | 
							
								      e.preventDefault();
							 | 
						||
| 
								 | 
							
								      e.stopPropagation();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      onClick?.();
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    [onClick]
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return (
							 | 
						||
| 
								 | 
							
								    <div className={BASE_CLASS_NAME}>
							 | 
						||
| 
								 | 
							
								      <div className={`${BASE_CLASS_NAME}__content`}>{children}</div>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      <div className={`${BASE_CLASS_NAME}__footer`}>
							 | 
						||
| 
								 | 
							
								        <button
							 | 
						||
| 
								 | 
							
								          title={actionText}
							 | 
						||
| 
								 | 
							
								          aria-label={actionText}
							 | 
						||
| 
								 | 
							
								          className={`${BASE_CLASS_NAME}__footer__action-button`}
							 | 
						||
| 
								 | 
							
								          onClick={onClickWrap}
							 | 
						||
| 
								 | 
							
								          tabIndex={0}
							 | 
						||
| 
								 | 
							
								          type="button"
							 | 
						||
| 
								 | 
							
								        >
							 | 
						||
| 
								 | 
							
								          {actionText}
							 | 
						||
| 
								 | 
							
								        </button>
							 | 
						||
| 
								 | 
							
								      </div>
							 | 
						||
| 
								 | 
							
								    </div>
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								}
							 |