feat: add annotation for action buttons and double click for user list page
This commit is contained in:
@@ -123,6 +123,8 @@ const LeftWidget = observer(
|
||||
? routeSightsEn.find((sight) => sight.id === selectedSightId)
|
||||
: routeSightsZh.find((sight) => sight.id === selectedSightId);
|
||||
|
||||
if (!sight) return;
|
||||
|
||||
const leftArticle = sight.left_article;
|
||||
|
||||
const leftArticleData =
|
||||
@@ -132,6 +134,8 @@ const LeftWidget = observer(
|
||||
? sightArticlesEn.get(leftArticle + "_" + selectedLanguage)
|
||||
: sightArticlesZh.get(leftArticle + "_" + selectedLanguage);
|
||||
|
||||
if (!leftArticleData?.media?.length) return;
|
||||
|
||||
const media = await ContentAPI.getMediaPreview(
|
||||
leftArticleData.media[0].id,
|
||||
selectedLanguage,
|
||||
|
||||
@@ -55,11 +55,12 @@ export const ArticleListPage = observer(() => {
|
||||
sortable: false,
|
||||
renderCell: (params: GridRenderCellParams) => (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
<button onClick={() => navigate(`/article/${params.row.id}`)}>
|
||||
<button title="Просмотр" onClick={() => navigate(`/article/${params.row.id}`)}>
|
||||
<Eye size={20} className="text-green-500" />
|
||||
</button>
|
||||
{canWriteArticles && (
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
|
||||
@@ -98,10 +98,11 @@ export const CarrierListPage = observer(() => {
|
||||
sortable: false,
|
||||
renderCell: (params: GridRenderCellParams) => (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
<button onClick={() => navigate(`/carrier/${params.row.id}/edit`)}>
|
||||
<button title="Редактировать" onClick={() => navigate(`/carrier/${params.row.id}/edit`)}>
|
||||
<Pencil size={20} className="text-blue-500" />
|
||||
</button>
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
|
||||
@@ -119,10 +119,11 @@ export const CityListPage = observer(() => {
|
||||
sortable: false,
|
||||
renderCell: (params: GridRenderCellParams) => (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
<button onClick={() => navigate(`/city/${params.row.id}/edit`)}>
|
||||
<button title="Редактировать" onClick={() => navigate(`/city/${params.row.id}/edit`)}>
|
||||
<Pencil size={20} className="text-blue-500" />
|
||||
</button>
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
setIsDeleteModalOpen(true);
|
||||
|
||||
@@ -78,11 +78,12 @@ export const MediaListPage = observer(() => {
|
||||
sortable: false,
|
||||
renderCell: (params: GridRenderCellParams) => (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
<button onClick={() => navigate(`/media/${params.row.id}`)}>
|
||||
<button title="Просмотр" onClick={() => navigate(`/media/${params.row.id}`)}>
|
||||
<Eye size={20} className="text-green-500" />
|
||||
</button>
|
||||
{canWriteMedia && (
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
|
||||
@@ -178,22 +178,23 @@ export const RouteListPage = observer(() => {
|
||||
return (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
{canWriteRoutes && (
|
||||
<button onClick={() => navigate(`/route/${params.row.id}/edit`)}>
|
||||
<button title="Редактировать" onClick={() => navigate(`/route/${params.row.id}/edit`)}>
|
||||
<Pencil size={20} className="text-blue-500" />
|
||||
</button>
|
||||
)}
|
||||
{canShowRoutePreview && (
|
||||
<button onClick={() => navigate(`/route-preview/${params.row.id}`)}>
|
||||
<button title="Предпросмотр на карте" onClick={() => navigate(`/route-preview/${params.row.id}`)}>
|
||||
<Map size={20} className="text-purple-500" />
|
||||
</button>
|
||||
)}
|
||||
{canShowRoutePreview && (
|
||||
<button onClick={() => window.open(`/demo/${params.row.id}`, "_blank")}>
|
||||
<button title="Демо" onClick={() => window.open(`/demo/${params.row.id}`, "_blank")}>
|
||||
<Monitor size={20} className="text-green-500" />
|
||||
</button>
|
||||
)}
|
||||
{canWriteRoutes && (
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
|
||||
@@ -105,10 +105,11 @@ export const SightListPage = observer(() => {
|
||||
sortable: false,
|
||||
renderCell: (params: GridRenderCellParams) => (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
<button onClick={() => navigate(`/sight/${params.row.id}/edit`)}>
|
||||
<button title="Редактировать" onClick={() => navigate(`/sight/${params.row.id}/edit`)}>
|
||||
<Pencil size={20} className="text-blue-500" />
|
||||
</button>
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
|
||||
@@ -137,6 +137,7 @@ export const SnapshotListPage = observer(() => {
|
||||
renderCell: (params: GridRenderCellParams) => (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
<button
|
||||
title="Восстановить"
|
||||
onClick={() => {
|
||||
setIsRestoreModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
@@ -145,6 +146,7 @@ export const SnapshotListPage = observer(() => {
|
||||
<DatabaseBackup size={20} className="text-blue-500" />
|
||||
</button>
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
|
||||
@@ -141,7 +141,7 @@ export const StationListPage = observer(() => {
|
||||
return (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
{canWriteStations && (
|
||||
<button onClick={() => navigate(`/station/${params.row.id}/edit`)}>
|
||||
<button title="Редактировать" onClick={() => navigate(`/station/${params.row.id}/edit`)}>
|
||||
<Pencil size={20} className="text-blue-500" />
|
||||
</button>
|
||||
)}
|
||||
@@ -151,13 +151,14 @@ export const StationListPage = observer(() => {
|
||||
setSelectedStationId(params.row.id);
|
||||
setIsTransfersModalOpen(true);
|
||||
}}
|
||||
title="Редактировать пересадки"
|
||||
title="Управление пересадками"
|
||||
>
|
||||
<Route size={20} className="text-purple-500" />
|
||||
</button>
|
||||
)}
|
||||
{canWriteStations && (
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
|
||||
@@ -92,10 +92,11 @@ export const UserListPage = observer(() => {
|
||||
sortable: false,
|
||||
renderCell: (params: GridRenderCellParams) => (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
<button onClick={() => navigate(`/user/${params.row.id}/edit`)}>
|
||||
<button title="Редактировать" onClick={() => navigate(`/user/${params.row.id}/edit`)}>
|
||||
<Pencil size={20} className="text-blue-500" />
|
||||
</button>
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
@@ -154,6 +155,11 @@ export const UserListPage = observer(() => {
|
||||
checkboxSelection={canWriteUsers}
|
||||
disableRowSelectionExcludeModel
|
||||
disableRowSelectionOnClick
|
||||
onRowDoubleClick={(params) => {
|
||||
if (canWriteUsers) {
|
||||
navigate(`/user/${params.row.id}/edit`);
|
||||
}
|
||||
}}
|
||||
loading={isLoading}
|
||||
paginationModel={paginationModel}
|
||||
onPaginationModelChange={setPaginationModel}
|
||||
|
||||
@@ -115,15 +115,16 @@ export const VehicleListPage = observer(() => {
|
||||
return (
|
||||
<div className="flex h-full gap-7 justify-center items-center">
|
||||
{canWrite && (
|
||||
<button onClick={() => navigate(`/vehicle/${params.row.id}/edit`)}>
|
||||
<button title="Редактировать" onClick={() => navigate(`/vehicle/${params.row.id}/edit`)}>
|
||||
<Pencil size={20} className="text-blue-500" />
|
||||
</button>
|
||||
)}
|
||||
<button onClick={() => navigate(`/vehicle/${params.row.id}`)}>
|
||||
<button title="Просмотр" onClick={() => navigate(`/vehicle/${params.row.id}`)}>
|
||||
<Eye size={20} className="text-green-500" />
|
||||
</button>
|
||||
{canWrite && (
|
||||
<button
|
||||
title="Удалить"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
setRowId(params.row.id);
|
||||
|
||||
@@ -618,7 +618,7 @@ export const DevicesTable = observer(() => {
|
||||
e.stopPropagation();
|
||||
navigate(`/vehicle/${row.vehicle_id}/edit`);
|
||||
}}
|
||||
title="Редактировать транспорт"
|
||||
title="Редактировать"
|
||||
>
|
||||
<Pencil size={16} />
|
||||
</button>
|
||||
@@ -628,7 +628,7 @@ export const DevicesTable = observer(() => {
|
||||
e.stopPropagation();
|
||||
handleReloadStatus();
|
||||
}}
|
||||
title="Перезапросить статус"
|
||||
title="Обновить статус"
|
||||
disabled={
|
||||
!row.device_uuid || !devices.includes(row.device_uuid)
|
||||
}
|
||||
@@ -655,7 +655,7 @@ export const DevicesTable = observer(() => {
|
||||
setLogsModalOpen(true);
|
||||
}
|
||||
}}
|
||||
title="Логи устройства"
|
||||
title="Логи"
|
||||
>
|
||||
<ScrollText size={16} />
|
||||
</button>
|
||||
@@ -668,7 +668,7 @@ export const DevicesTable = observer(() => {
|
||||
setSessionsModalVehicleTailNumber(row.tail_number);
|
||||
setSessionsModalOpen(true);
|
||||
}}
|
||||
title="Сессии ТО"
|
||||
title="Сессии обслуживания"
|
||||
>
|
||||
<Wrench size={16} />
|
||||
</button>
|
||||
|
||||
@@ -87,12 +87,14 @@ export const SightsTable = observer(() => {
|
||||
<TableCell align="center" className="py-3">
|
||||
<div className="flex justify-center items-center gap-3">
|
||||
<button
|
||||
title="Редактировать"
|
||||
className="rounded-md px-3 py-1.5 transition-transform transform hover:scale-105"
|
||||
onClick={() => navigate(`/sight/${row?.id}`)}
|
||||
>
|
||||
<Pencil size={18} className="text-blue-500" />
|
||||
</button>
|
||||
<button
|
||||
title="Удалить"
|
||||
className="rounded-md px-3 py-1.5 transition-transform transform hover:scale-105"
|
||||
onClick={() => {
|
||||
setIsDeleteModalOpen(true);
|
||||
|
||||
Reference in New Issue
Block a user