| 1 |
912788f |
Mardin |
2y ago |
|
| 2 |
912788f |
Mardin |
2y ago |
import { |
| 3 |
63b702d |
Mardin |
2y ago |
Accordion, |
| 4 |
912788f |
Mardin |
2y ago |
Box, |
| 5 |
912788f |
Mardin |
2y ago |
HStack, |
| 6 |
912788f |
Mardin |
2y ago |
Table, |
| 7 |
912788f |
Mardin |
2y ago |
TableProps, |
| 8 |
912788f |
Mardin |
2y ago |
Tbody, |
| 9 |
912788f |
Mardin |
2y ago |
Td, |
| 10 |
912788f |
Mardin |
2y ago |
Th, |
| 11 |
912788f |
Mardin |
2y ago |
Thead, |
| 12 |
912788f |
Mardin |
2y ago |
Tr, |
| 13 |
912788f |
Mardin |
2y ago |
useBreakpointValue, |
| 14 |
912788f |
Mardin |
2y ago |
} from '@chakra-ui/react'; |
| 15 |
912788f |
Mardin |
2y ago |
|
| 16 |
912788f |
Mardin |
2y ago |
import classNames from 'classnames'; |
| 17 |
63b702d |
Mardin |
2y ago |
import { FC, useState, } from 'react'; |
| 18 |
912788f |
Mardin |
2y ago |
import { useTranslation } from 'react-i18next'; |
| 19 |
89f8f93 |
Mardin |
2y ago |
import { |
| 20 |
89f8f93 |
Mardin |
2y ago |
EmptySection, |
| 21 |
63b702d |
Mardin |
2y ago |
handleSort, |
| 22 |
89f8f93 |
Mardin |
2y ago |
Pagination, |
| 23 |
89f8f93 |
Mardin |
2y ago |
Sort |
| 24 |
89f8f93 |
Mardin |
2y ago |
} from 'components/table'; |
| 25 |
a61ba53 |
Mrdn |
2y ago |
import { fetchServices, useServices } from 'stores'; |
| 26 |
6aab6f0 |
Mrdn |
2y ago |
import { pageSizeManagers } from 'utils/userPreferenceStorage'; |
| 27 |
a61ba53 |
Mrdn |
2y ago |
import { useQuery } from 'react-query'; |
| 28 |
a61ba53 |
Mrdn |
2y ago |
import { queryIds } from 'constants/query-ids'; |
| 29 |
912788f |
Mardin |
2y ago |
|
| 30 |
63b702d |
Mardin |
2y ago |
type ExpandedIndex = number | number[]; |
| 31 |
912788f |
Mardin |
2y ago |
type ServicesTableProps = {} & TableProps; |
| 32 |
912788f |
Mardin |
2y ago |
|
| 33 |
912788f |
Mardin |
2y ago |
export const ServicesTable: FC<ServicesTableProps> = (props) => { |
| 34 |
912788f |
Mardin |
2y ago |
const { |
| 35 |
912788f |
Mardin |
2y ago |
servicesFilters: filters, |
| 36 |
912788f |
Mardin |
2y ago |
onEditingService, |
| 37 |
4205669 |
Mardin |
2y ago |
onCreateService, |
| 38 |
912788f |
Mardin |
2y ago |
onFilterChange, |
| 39 |
4205669 |
Mardin |
2y ago |
} = useServices(); |
| 40 |
a61ba53 |
Mrdn |
2y ago |
const { data: services } = useQuery(queryIds.services, () => { return fetchServices(filters) }); |
| 41 |
63b702d |
Mardin |
2y ago |
const useTable = useBreakpointValue({ base: false, md: true }); |
| 42 |
912788f |
Mardin |
2y ago |
const { t } = useTranslation(); |
| 43 |
63b702d |
Mardin |
2y ago |
const [selectedRow,] = useState<ExpandedIndex | undefined>( |
| 44 |
63b702d |
Mardin |
2y ago |
undefined |
| 45 |
63b702d |
Mardin |
2y ago |
); |
| 46 |
912788f |
Mardin |
2y ago |
|
| 47 |
912788f |
Mardin |
2y ago |
return ( |
| 48 |
5825ea4 |
Mardin |
2y ago |
<Box id="services-table" h="45vh" overflowX={{ base: 'unset', md: 'unset' }} > |
| 49 |
63b702d |
Mardin |
2y ago |
<Accordion |
| 50 |
63b702d |
Mardin |
2y ago |
allowMultiple |
| 51 |
63b702d |
Mardin |
2y ago |
display={{ base: 'block', md: 'none' }} |
| 52 |
63b702d |
Mardin |
2y ago |
index={selectedRow} |
| 53 |
63b702d |
Mardin |
2y ago |
> |
| 54 |
63b702d |
Mardin |
2y ago |
<Table orientation="vertical" zIndex="docked" {...props}> |
| 55 |
63b702d |
Mardin |
2y ago |
<Thead zIndex="docked" position="relative"> |
| 56 |
63b702d |
Mardin |
2y ago |
<Tr> |
| 57 |
63b702d |
Mardin |
2y ago |
<Tr> |
| 58 |
63b702d |
Mardin |
2y ago |
<Th |
| 59 |
63b702d |
Mardin |
2y ago |
position="sticky" |
| 60 |
63b702d |
Mardin |
2y ago |
minW="200px" |
| 61 |
63b702d |
Mardin |
2y ago |
pl={4} |
| 62 |
63b702d |
Mardin |
2y ago |
pr={4} |
| 63 |
63b702d |
Mardin |
2y ago |
cursor={'pointer'} |
| 64 |
63b702d |
Mardin |
2y ago |
onClick={handleSort.bind(null, filters, 'name', onFilterChange)} |
| 65 |
63b702d |
Mardin |
2y ago |
> |
| 66 |
63b702d |
Mardin |
2y ago |
<HStack> |
| 67 |
63b702d |
Mardin |
2y ago |
<span>{t('services')}</span> |
| 68 |
63b702d |
Mardin |
2y ago |
<Sort sort={filters.sort} column="name" /> |
| 69 |
63b702d |
Mardin |
2y ago |
</HStack> |
| 70 |
63b702d |
Mardin |
2y ago |
</Th> |
| 71 |
63b702d |
Mardin |
2y ago |
<Th |
| 72 |
63b702d |
Mardin |
2y ago |
position="sticky" |
| 73 |
63b702d |
Mardin |
2y ago |
minW="50px" |
| 74 |
63b702d |
Mardin |
2y ago |
cursor={'pointer'} |
| 75 |
63b702d |
Mardin |
2y ago |
pr={0} |
| 76 |
63b702d |
Mardin |
2y ago |
onClick={handleSort.bind(null, filters, 'users_number', onFilterChange)} |
| 77 |
63b702d |
Mardin |
2y ago |
> |
| 78 |
63b702d |
Mardin |
2y ago |
<HStack> |
| 79 |
63b702d |
Mardin |
2y ago |
<span>{t('servicesTable.usersNumber')}</span> |
| 80 |
63b702d |
Mardin |
2y ago |
<Sort sort={filters.sort} column="users_number" /> |
| 81 |
63b702d |
Mardin |
2y ago |
</HStack> |
| 82 |
63b702d |
Mardin |
2y ago |
</Th> |
| 83 |
63b702d |
Mardin |
2y ago |
<Th |
| 84 |
63b702d |
Mardin |
2y ago |
position="sticky" |
| 85 |
63b702d |
Mardin |
2y ago |
minW="50px" |
| 86 |
63b702d |
Mardin |
2y ago |
cursor={'pointer'} |
| 87 |
63b702d |
Mardin |
2y ago |
pr={0} |
| 88 |
63b702d |
Mardin |
2y ago |
onClick={handleSort.bind(null, filters, 'inbounds_number', onFilterChange)} |
| 89 |
63b702d |
Mardin |
2y ago |
> |
| 90 |
63b702d |
Mardin |
2y ago |
<HStack> |
| 91 |
63b702d |
Mardin |
2y ago |
<span>{t('servicesTable.inboundsNumber')}</span> |
| 92 |
63b702d |
Mardin |
2y ago |
<Sort sort={filters.sort} column="inbounds_number" /> |
| 93 |
63b702d |
Mardin |
2y ago |
</HStack> |
| 94 |
63b702d |
Mardin |
2y ago |
</Th> |
| 95 |
63b702d |
Mardin |
2y ago |
</Tr> |
| 96 |
63b702d |
Mardin |
2y ago |
</Tr> |
| 97 |
63b702d |
Mardin |
2y ago |
</Thead> |
| 98 |
63b702d |
Mardin |
2y ago |
<Tbody> |
| 99 |
63b702d |
Mardin |
2y ago |
{!useTable && |
| 100 |
63b702d |
Mardin |
2y ago |
services?.map((service, i) => { |
| 101 |
63b702d |
Mardin |
2y ago |
return ( |
| 102 |
63b702d |
Mardin |
2y ago |
<Tr |
| 103 |
63b702d |
Mardin |
2y ago |
cursor="pointer" |
| 104 |
63b702d |
Mardin |
2y ago |
key={service.id} |
| 105 |
63b702d |
Mardin |
2y ago |
className={classNames('interactive', { |
| 106 |
63b702d |
Mardin |
2y ago |
'last-row': i === (services.length - 1), |
| 107 |
63b702d |
Mardin |
2y ago |
})} |
| 108 |
63b702d |
Mardin |
2y ago |
onClick={(e) => { |
| 109 |
63b702d |
Mardin |
2y ago |
e.stopPropagation(); |
| 110 |
63b702d |
Mardin |
2y ago |
onEditingService(service); |
| 111 |
63b702d |
Mardin |
2y ago |
}} |
| 112 |
63b702d |
Mardin |
2y ago |
> |
| 113 |
63b702d |
Mardin |
2y ago |
<Td borderBottom={0} minW="100px" pl={4} pr={4}> |
| 114 |
63b702d |
Mardin |
2y ago |
{service.name} |
| 115 |
63b702d |
Mardin |
2y ago |
</Td> |
| 116 |
63b702d |
Mardin |
2y ago |
<Td borderBottom={0} minW="50px" pl={6} pr={6}> |
| 117 |
63b702d |
Mardin |
2y ago |
{service.users.length} |
| 118 |
63b702d |
Mardin |
2y ago |
</Td> |
| 119 |
63b702d |
Mardin |
2y ago |
<Td borderBottom={0} minW="50px" pr={0}> |
| 120 |
63b702d |
Mardin |
2y ago |
{service.inbounds.length} |
| 121 |
63b702d |
Mardin |
2y ago |
</Td> |
| 122 |
63b702d |
Mardin |
2y ago |
</Tr> |
| 123 |
63b702d |
Mardin |
2y ago |
); |
| 124 |
63b702d |
Mardin |
2y ago |
})} |
| 125 |
63b702d |
Mardin |
2y ago |
</Tbody> |
| 126 |
63b702d |
Mardin |
2y ago |
</Table> |
| 127 |
63b702d |
Mardin |
2y ago |
</Accordion> |
| 128 |
912788f |
Mardin |
2y ago |
<Table orientation="vertical" zIndex="docked" {...props}> |
| 129 |
912788f |
Mardin |
2y ago |
<Thead zIndex="docked" position="relative"> |
| 130 |
912788f |
Mardin |
2y ago |
<Tr> |
| 131 |
912788f |
Mardin |
2y ago |
<Th |
| 132 |
912788f |
Mardin |
2y ago |
position="sticky" |
| 133 |
63b702d |
Mardin |
2y ago |
minW="200px" |
| 134 |
912788f |
Mardin |
2y ago |
pl={4} |
| 135 |
912788f |
Mardin |
2y ago |
pr={4} |
| 136 |
912788f |
Mardin |
2y ago |
cursor={'pointer'} |
| 137 |
63b702d |
Mardin |
2y ago |
onClick={handleSort.bind(null, filters, 'name', onFilterChange)} |
| 138 |
912788f |
Mardin |
2y ago |
> |
| 139 |
912788f |
Mardin |
2y ago |
<HStack> |
| 140 |
912788f |
Mardin |
2y ago |
<span>{t('services')}</span> |
| 141 |
912788f |
Mardin |
2y ago |
<Sort sort={filters.sort} column="name" /> |
| 142 |
912788f |
Mardin |
2y ago |
</HStack> |
| 143 |
912788f |
Mardin |
2y ago |
</Th> |
| 144 |
912788f |
Mardin |
2y ago |
<Th |
| 145 |
912788f |
Mardin |
2y ago |
position="sticky" |
| 146 |
912788f |
Mardin |
2y ago |
minW="50px" |
| 147 |
912788f |
Mardin |
2y ago |
cursor={'pointer'} |
| 148 |
912788f |
Mardin |
2y ago |
pr={0} |
| 149 |
63b702d |
Mardin |
2y ago |
onClick={handleSort.bind(null, filters, 'users_number', onFilterChange)} |
| 150 |
912788f |
Mardin |
2y ago |
> |
| 151 |
912788f |
Mardin |
2y ago |
<HStack> |
| 152 |
912788f |
Mardin |
2y ago |
<span>{t('servicesTable.usersNumber')}</span> |
| 153 |
912788f |
Mardin |
2y ago |
<Sort sort={filters.sort} column="users_number" /> |
| 154 |
912788f |
Mardin |
2y ago |
</HStack> |
| 155 |
912788f |
Mardin |
2y ago |
</Th> |
| 156 |
912788f |
Mardin |
2y ago |
<Th |
| 157 |
912788f |
Mardin |
2y ago |
position="sticky" |
| 158 |
912788f |
Mardin |
2y ago |
minW="50px" |
| 159 |
912788f |
Mardin |
2y ago |
cursor={'pointer'} |
| 160 |
912788f |
Mardin |
2y ago |
pr={0} |
| 161 |
63b702d |
Mardin |
2y ago |
onClick={handleSort.bind(null, filters, 'inbounds_number', onFilterChange)} |
| 162 |
912788f |
Mardin |
2y ago |
> |
| 163 |
912788f |
Mardin |
2y ago |
<HStack> |
| 164 |
912788f |
Mardin |
2y ago |
<span>{t('servicesTable.inboundsNumber')}</span> |
| 165 |
912788f |
Mardin |
2y ago |
<Sort sort={filters.sort} column="inbounds_number" /> |
| 166 |
912788f |
Mardin |
2y ago |
</HStack> |
| 167 |
912788f |
Mardin |
2y ago |
</Th> |
| 168 |
912788f |
Mardin |
2y ago |
</Tr> |
| 169 |
912788f |
Mardin |
2y ago |
</Thead> |
| 170 |
912788f |
Mardin |
2y ago |
<Tbody> |
| 171 |
63b702d |
Mardin |
2y ago |
{useTable && |
| 172 |
63b702d |
Mardin |
2y ago |
services?.map((service, i) => { |
| 173 |
63b702d |
Mardin |
2y ago |
return ( |
| 174 |
912788f |
Mardin |
2y ago |
<Tr |
| 175 |
912788f |
Mardin |
2y ago |
cursor="pointer" |
| 176 |
912788f |
Mardin |
2y ago |
key={service.id} |
| 177 |
912788f |
Mardin |
2y ago |
className={classNames('interactive', { |
| 178 |
912788f |
Mardin |
2y ago |
'last-row': i === (services.length - 1), |
| 179 |
912788f |
Mardin |
2y ago |
})} |
| 180 |
912788f |
Mardin |
2y ago |
onClick={(e) => { |
| 181 |
912788f |
Mardin |
2y ago |
e.stopPropagation(); |
| 182 |
912788f |
Mardin |
2y ago |
onEditingService(service); |
| 183 |
912788f |
Mardin |
2y ago |
}} |
| 184 |
912788f |
Mardin |
2y ago |
> |
| 185 |
912788f |
Mardin |
2y ago |
<Td borderBottom={0} minW="100px" pl={4} pr={4}> |
| 186 |
912788f |
Mardin |
2y ago |
{service.name} |
| 187 |
912788f |
Mardin |
2y ago |
</Td> |
| 188 |
912788f |
Mardin |
2y ago |
<Td borderBottom={0} minW="50px" pl={6} pr={6}> |
| 189 |
912788f |
Mardin |
2y ago |
{service.users.length} |
| 190 |
912788f |
Mardin |
2y ago |
</Td> |
| 191 |
912788f |
Mardin |
2y ago |
<Td borderBottom={0} minW="50px" pr={0}> |
| 192 |
912788f |
Mardin |
2y ago |
{service.inbounds.length} |
| 193 |
912788f |
Mardin |
2y ago |
</Td> |
| 194 |
912788f |
Mardin |
2y ago |
</Tr> |
| 195 |
63b702d |
Mardin |
2y ago |
); |
| 196 |
63b702d |
Mardin |
2y ago |
})} |
| 197 |
a61ba53 |
Mrdn |
2y ago |
{services?.length == 0 && ( |
| 198 |
912788f |
Mardin |
2y ago |
<Tr> |
| 199 |
912788f |
Mardin |
2y ago |
<Td colSpan={3}> |
| 200 |
4205669 |
Mardin |
2y ago |
<EmptySection |
| 201 |
4205669 |
Mardin |
2y ago |
isFiltered={false} |
| 202 |
4205669 |
Mardin |
2y ago |
createObjectT='createService' |
| 203 |
4205669 |
Mardin |
2y ago |
onCreateObject={onCreateService} |
| 204 |
4205669 |
Mardin |
2y ago |
noObjectT="servicesTable.noService" |
| 205 |
4205669 |
Mardin |
2y ago |
noObjectMatchedT='servicesTable.noServiceMatched' |
| 206 |
4205669 |
Mardin |
2y ago |
/> |
| 207 |
912788f |
Mardin |
2y ago |
</Td> |
| 208 |
912788f |
Mardin |
2y ago |
</Tr> |
| 209 |
63b702d |
Mardin |
2y ago |
)} |
| 210 |
912788f |
Mardin |
2y ago |
</Tbody> |
| 211 |
912788f |
Mardin |
2y ago |
</Table> |
| 212 |
a61ba53 |
Mrdn |
2y ago |
<Pagination |
| 213 |
a61ba53 |
Mrdn |
2y ago |
total={services?.length || 0} |
| 214 |
6aab6f0 |
Mrdn |
2y ago |
onFilterChange={onFilterChange} |
| 215 |
6aab6f0 |
Mrdn |
2y ago |
filters={filters} |
| 216 |
6aab6f0 |
Mrdn |
2y ago |
pageSizeManager={pageSizeManagers.services} |
| 217 |
6aab6f0 |
Mrdn |
2y ago |
/> |
| 218 |
912788f |
Mardin |
2y ago |
</Box> |
| 219 |
912788f |
Mardin |
2y ago |
); |
| 220 |
912788f |
Mardin |
2y ago |
}; |