diff --git a/packages/ui/src/ui-component/table/FlowListTable.jsx b/packages/ui/src/ui-component/table/FlowListTable.jsx index 48e2da12e3e..dea00791cb2 100644 --- a/packages/ui/src/ui-component/table/FlowListTable.jsx +++ b/packages/ui/src/ui-component/table/FlowListTable.jsx @@ -1,3 +1,4 @@ +import { useState } from 'react' import PropTypes from 'prop-types' import { useSelector } from 'react-redux' import moment from 'moment' @@ -14,6 +15,7 @@ import { TableContainer, TableHead, TableRow, + TableSortLabel, Tooltip, Typography, useTheme @@ -41,10 +43,42 @@ const StyledTableRow = styled(TableRow)(() => ({ } })) +const getLocalStorageKeyName = (name, isAgentCanvas) => { + return (isAgentCanvas ? 'agentcanvas' : 'chatflowcanvas') + '_' + name +} + export const FlowListTable = ({ data, images, isLoading, filterFunction, updateFlowsApi, setError, isAgentCanvas }) => { const theme = useTheme() const customization = useSelector((state) => state.customization) + const localStorageKeyOrder = getLocalStorageKeyName('order', isAgentCanvas) + const localStorageKeyOrderBy = getLocalStorageKeyName('orderBy', isAgentCanvas) + + const [order, setOrder] = useState(localStorage.getItem(localStorageKeyOrder) || 'desc') + const [orderBy, setOrderBy] = useState(localStorage.getItem(localStorageKeyOrderBy) || 'updatedDate') + + const handleRequestSort = (property) => { + const isAsc = orderBy === property && order === 'asc' + const newOrder = isAsc ? 'desc' : 'asc' + setOrder(newOrder) + setOrderBy(property) + localStorage.setItem(localStorageKeyOrder, newOrder) + localStorage.setItem(localStorageKeyOrderBy, property) + } + + const sortedData = data + ? [...data].sort((a, b) => { + if (orderBy === 'name') { + return order === 'asc' ? (a.name || '').localeCompare(b.name || '') : (b.name || '').localeCompare(a.name || '') + } else if (orderBy === 'updatedDate') { + return order === 'asc' + ? new Date(a.updatedDate) - new Date(b.updatedDate) + : new Date(b.updatedDate) - new Date(a.updatedDate) + } + return 0 + }) + : [] + return ( <> @@ -57,7 +91,9 @@ export const FlowListTable = ({ data, images, isLoading, filterFunction, updateF > - Name + handleRequestSort('name')}> + Name + Category @@ -66,7 +102,13 @@ export const FlowListTable = ({ data, images, isLoading, filterFunction, updateF Nodes - Last Modified Date + handleRequestSort('updatedDate')} + > + Last Modified Date + Actions @@ -113,7 +155,7 @@ export const FlowListTable = ({ data, images, isLoading, filterFunction, updateF ) : ( <> - {data?.filter(filterFunction).map((row, index) => ( + {sortedData.filter(filterFunction).map((row, index) => (