import React from 'react';
import classNames from 'classnames';
import { useHistory } from 'react-router-dom';
import { DataTable } from 'components';
import ItemsEmptyStatus from './ItemsEmptyStatus';
import TableSkeletonRows from 'components/Datatable/TableSkeletonRows';
import TableSkeletonHeader from 'components/Datatable/TableHeaderSkeleton';
import { CLASSES } from 'common/classes';
import withItems from 'containers/Items/withItems';
import withItemsActions from 'containers/Items/withItemsActions';
import withAlertsActions from 'containers/Alert/withAlertActions';
import withDialogActions from 'containers/Dialog/withDialogActions';
import { useItemsListContext } from './ItemsListProvider';
import { useItemsTableColumns, ItemsActionMenuList } from './components';
import { compose } from 'utils';
/**
* Items datatable.
*/
function ItemsDataTable({
// #withItemsActions
setItemsTableState,
// #withDialogAction
openDialog,
// #withAlertsActions
openAlert,
// #withItems
itemsTableState,
// #ownProps
tableProps,
}) {
// Items list context.
const {
items,
pagination,
isItemsLoading,
isEmptyStatus,
isItemsFetching,
} = useItemsListContext();
// Datatable columns.
const columns = useItemsTableColumns();
// History context.
const history = useHistory();
// Table row class names.
const rowClassNames = (row) => ({
inactive: !row.original.active,
});
// Handle fetch data once the page index, size or sort by of the table change.
const handleFetchData = React.useCallback(
({ pageSize, pageIndex, sortBy }) => {
setItemsTableState({
pageIndex,
pageSize,
sortBy,
});
},
[setItemsTableState],
);
// Handle delete action Item.
const handleDeleteItem = ({ id }) => {
openAlert('item-delete', { itemId: id });
};
// Handle cancel/confirm item inactive.
const handleInactiveItem = ({ id }) => {
openAlert('item-inactivate', { itemId: id });
};
// Handle cancel/confirm item activate.
const handleActivateItem = ({ id }) => {
openAlert('item-activate', { itemId: id });
};
// Handle Edit item.
const handleEditItem = ({ id }) => {
history.push(`/items/${id}/edit`);
};
// Handle item make adjustment.
const handleMakeAdjustment = ({ id }) => {
openDialog('inventory-adjustment', { itemId: id });
};
const handleDuplicate = ({ id }) => {
history.push(`/items/${id}/duplicate`, { action: 'duplicate' });
};
// Cannot continue in case the items has empty status.
if (isEmptyStatus) {
return