Files
operationSystem-front/src/components/common/Table/TableHeader.js
bcjang fa290b64ec api 공통 모듈생성
search, api 공통 모듈 생성
공통모듈 화면 별 반영
2025-05-01 07:04:14 +09:00

87 lines
2.0 KiB
JavaScript

import { useRecoilValue } from 'recoil';
import { useTranslation } from 'react-i18next';
import { authList } from '../../../store/authList';
import { authType } from '../../../assets/data';
import { Button, ExcelDownButton, ViewTableInfo } from '../index';
const TableHeader = ({
config,
tableRef,
total,
total_all,
handleOrderBy,
handlePageSize,
selectedRows = [],
onAction,
navigate,
pagination,
goToNextPage,
goToPrevPage
}) => {
const userInfo = useRecoilValue(authList);
const { t } = useTranslation();
const handleButtonClick = (button, e) => {
e?.preventDefault();
if (button.action === 'navigate' && button.navigateTo && navigate) {
navigate(button.navigateTo);
return;
}
if (onAction) {
onAction(button.action, button.id);
}
};
const renderButton = (button, index) => {
const hasAuth = button.requiredAuth ?
userInfo.auth_list?.some(auth => auth.id === authType[button.requiredAuth]) :
true;
if (!hasAuth) return null;
if (button.component === 'ExcelDownButton') {
return (
<ExcelDownButton
key={index}
tableRef={tableRef}
fileName={button.props?.fileName ? t(button.props.fileName) : ''}
/>
);
}
const buttonTheme = (button.disableWhen === 'noSelection' && selectedRows.length === 0) || button.disableWhen === 'disable'
? 'disable'
: button.theme;
return (
<Button
key={index}
theme={buttonTheme}
text={button.text}
handleClick={(e) => handleButtonClick(button, e)}
disabled={button.disableWhen === 'disable'}
/>
);
};
return (
<ViewTableInfo
total={total}
total_all={total_all}
handleOrderBy={handleOrderBy}
handlePageSize={handlePageSize}
orderType={config.orderType}
pageType={config.pageType}
countType={config.countType}
pagination={pagination}
goToNextPage={goToNextPage}
goToPrevPage={goToPrevPage}
>
{config.buttons.map(renderButton)}
</ViewTableInfo>
);
};
export default TableHeader;