import React, { useContext } from 'react'; import { Size } from '@pdfme-tables/common'; import { MinusOutlined, PlusOutlined, LeftOutlined, RightOutlined, EllipsisOutlined, } from '@ant-design/icons'; import type { MenuProps } from 'antd'; import { theme, Typography, Button, Dropdown } from 'antd'; import { I18nContext } from '../contexts'; const { Text } = Typography; type TextStyle = { color: string; fontSize: number; margin: number }; type ZoomProps = { zoomLevel: number; setZoomLevel: (zoom: number) => void; style: { textStyle: TextStyle }; }; const Zoom = ({ zoomLevel, setZoomLevel, style }: ZoomProps) => { const zoomStep = 0.25; const maxZoom = 2; const minZoom = 0.25; const nextZoomOut = zoomLevel - zoomStep; const nextZoomIn = zoomLevel + zoomStep; return (
); }; type PagerProps = { pageCursor: number; pageNum: number; setPageCursor: (page: number) => void; style: { textStyle: TextStyle }; }; const Pager = ({ pageCursor, pageNum, setPageCursor, style }: PagerProps) => { return (
{pageCursor + 1}/{pageNum}
); }; type ContextMenuProps = { items: MenuProps['items']; style: { textStyle: TextStyle }; }; const ContextMenu = ({ items, style }: ContextMenuProps) => ( ); type CtlBarProps = { size: Size; pageCursor: number; pageNum: number; setPageCursor: (page: number) => void; zoomLevel: number; setZoomLevel: (zoom: number) => void; addPageAfter?: () => void; removePage?: () => void; }; const CtlBar = (props: CtlBarProps) => { const { token } = theme.useToken(); const i18n = useContext(I18nContext); const { size, pageCursor, pageNum, setPageCursor, zoomLevel, setZoomLevel, addPageAfter, removePage, } = props; const contextMenuItems: MenuProps['items'] = []; if (addPageAfter) { contextMenuItems.push({ key: '1', label:
{i18n('addPageAfter')}
, }); } if (removePage && pageNum > 1 && pageCursor !== 0) { contextMenuItems.push({ key: '2', label:
{i18n('removePage')}
, }); } const barWidth = 300; const contextMenuWidth = contextMenuItems.length > 0 ? 50 : 0; const width = (pageNum > 1 ? barWidth : barWidth / 2) + contextMenuWidth; const textStyle = { color: token.colorWhite, fontSize: token.fontSize, margin: token.marginXS, }; return (
{pageNum > 1 && ( )} {contextMenuItems.length > 0 && ( )}
); }; export default CtlBar;