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 (
setPageCursor(pageCursor - 1)}>
{pageCursor + 1}/{pageNum}
= pageNum}
onClick={() => setPageCursor(pageCursor + 1)}
>
);
};
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;