import React, { useState, useEffect, useCallback, useMemo } from 'react'; import { Button, Popover, Menu, MenuItem, MenuDivider, Position, Intent, Tag, } from '@blueprintjs/core'; import { FormattedMessage as T, useIntl } from 'react-intl'; import { Icon, DataTable, Money } from 'components'; import { useIsValuePassed } from 'hooks'; import LoadingIndicator from 'components/LoadingIndicator'; import withItems from 'containers/Items/withItems'; import withItemsActions from 'containers/Items/withItemsActions'; import { compose, saveInvoke } from 'utils'; function ItemsDataTable({ // #withItems itemsTableLoading, itemsCurrentPage, itemsTableQuery, // #withItemsActions addItemsTableQueries, // props onEditItem, onDeleteItem, onSelectedRowsChange, }) { const { formatMessage } = useIntl(); const isLoadedBefore = useIsValuePassed(itemsTableLoading, false); const handleFetchData = useCallback( ({ pageIndex, pageSize, sortBy }) => { addItemsTableQueries({ page_size: pageSize, page: pageIndex + 1, ...(sortBy.length > 0 ? { column_sort_by: sortBy[0].id, sort_order: sortBy[0].desc ? 'desc' : 'asc', } : {}), }); }, [addItemsTableQueries], ); const handleEditItem = useCallback( (item) => () => { onEditItem && onEditItem(item); }, [onEditItem], ); const handleDeleteItem = useCallback( (item) => () => { onDeleteItem(item); }, [onDeleteItem], ); const actionMenuList = useCallback( (item) => (
), [handleEditItem, handleDeleteItem, formatMessage], ); const handleRowContextMenu = useCallback( (cell) => { return actionMenuList(cell.row.original); }, [actionMenuList], ); const columns = useMemo( () => [ { Header: formatMessage({ id: 'item_name' }), accessor: 'name', className: 'name', width: 180, }, { Header: formatMessage({ id: 'item_code' }), accessor: 'sku', className: 'sku', width: 120, }, { Header: formatMessage({ id: 'item_type' }), accessor: (row) => row.type ? (