// src/gcodefiles.js import { useState, useRef } from 'react' import { useNavigate } from 'react-router-dom' import { Button, Flex, Space, Modal, Dropdown, message, Tag, Checkbox, Popover, Input } from 'antd' import { DownloadOutlined } from '@ant-design/icons' import IdDisplay from '../common/IdDisplay' import TimeDisplay from '../common/TimeDisplay' import ObjectTable from '../common/ObjectTable' import NewProduct from './Products/NewProduct' import ProductIcon from '../../Icons/ProductIcon' import InfoCircleIcon from '../../Icons/InfoCircleIcon' import PlusIcon from '../../Icons/PlusIcon' import ReloadIcon from '../../Icons/ReloadIcon' import XMarkIcon from '../../Icons/XMarkIcon' import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' import GridIcon from '../../Icons/GridIcon' import ListIcon from '../../Icons/ListIcon' import useViewMode from '../hooks/useViewMode' const Products = () => { const [messageApi, contextHolder] = message.useMessage() const navigate = useNavigate() const [newProductOpen, setNewProductOpen] = useState(false) const tableRef = useRef() const [viewMode, setViewMode] = useViewMode('Products') const getProductActionItems = (id) => { return { items: [ { label: 'Info', key: 'info', icon: }, { label: 'Download', key: 'download', icon: } ], onClick: ({ key }) => { if (key === 'info') { navigate(`/dashboard/management/products/info?productId=${id}`) } } } } // Column definitions const columns = [ { title: , key: 'icon', width: 40, fixed: 'left', render: () => }, { title: 'Name', dataIndex: 'name', key: 'name', width: 200, fixed: 'left', filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => getFilterDropdown({ setSelectedKeys, selectedKeys, confirm, clearFilters, propertyName: 'name' }), onFilter: (value, record) => record.name.toLowerCase().includes(value.toLowerCase()), sorter: true }, { title: 'ID', dataIndex: '_id', key: 'id', fixed: 'left', width: 180, render: (text) => , filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => getFilterDropdown({ setSelectedKeys, selectedKeys, confirm, clearFilters, propertyName: 'ID' }), onFilter: (value, record) => record?._id.toLowerCase().includes(value.toLowerCase()), sorter: true }, { title: 'Tags', dataIndex: 'tags', key: 'tags', width: 170, render: (tags) => { if (!tags || !Array.isArray(tags)) return 'n/a' if (tags.length == 0) return 'n/a' return ( {tags.map((tag, index) => ( {tag} ))} ) }, filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => getFilterDropdown({ setSelectedKeys, selectedKeys, confirm, clearFilters, propertyName: 'tags' }), onFilter: (value, record) => record.tags?.some((tag) => tag.toLowerCase().includes(value.toLowerCase()) ), sorter: true }, { title: 'Version', dataIndex: 'version', key: 'version', width: 120, render: (text) => (text ? {text} : 'n/a'), filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => getFilterDropdown({ setSelectedKeys, selectedKeys, confirm, clearFilters, propertyName: 'version' }), onFilter: (value, record) => record.version?.toLowerCase().includes(value.toLowerCase()), sorter: true }, { title: 'Created At', dataIndex: 'createdAt', key: 'createdAt', width: 180, render: (createdAt) => { if (createdAt) { return } else { return 'n/a' } }, sorter: true, defaultSortOrder: 'descend' }, { title: 'Updated At', dataIndex: 'updatedAt', key: 'updatedAt', width: 180, render: (updatedAt) => { if (updatedAt) { return } else { return 'n/a' } }, sorter: true, defaultSortOrder: 'descend' }, { title: 'Actions', key: 'actions', fixed: 'right', width: 150, render: (record) => { return ( ) } } ] const [columnVisibility, updateColumnVisibility] = useColumnVisibility( 'Products', columns ) const actionItems = { items: [ { label: 'New Product', key: 'newProduct', icon: }, { type: 'divider' }, { label: 'Reload List', key: 'reloadList', icon: } ], onClick: ({ key }) => { if (key === 'reloadList') { tableRef.current?.reload() } else if (key === 'newProduct') { setNewProductOpen(true) } } } const getFilterDropdown = ({ setSelectedKeys, selectedKeys, confirm, clearFilters, propertyName }) => { return (
setSelectedKeys(e.target.value ? [e.target.value] : []) } onPressEnter={() => confirm()} style={{ width: 200, display: 'block' }} />
) } const getViewDropdownItems = () => { const columnItems = columns .filter((col) => col.key && col.title !== '') .map((col) => ( { updateColumnVisibility(col.key, e.target.checked) }} > {col.title} )) return ( {columnItems} ) } return ( <> {contextHolder}