From 39a7ca811cf1ea39e5053ab7b074ca9a7f5c31e0 Mon Sep 17 00:00:00 2001 From: RekHoto Date: Thu, 21 Sep 2023 19:10:50 +0400 Subject: [PATCH] END-712 - import report styling END-714 - import error rename END-716 - update map after import END-717 - updated favicon END-718 - enlarge legend icons END-719 - legend points border END-720 - points count loader --- dist/favicon.ico | Bin 15406 -> 4286 bytes dist/index.html | 1 - index.html | 1 - public/favicon.ico | Bin 15406 -> 4286 bytes src/Map/Layers/layers-config.js | 9 ++++++++- src/Map/Legend.jsx | 5 +++-- src/api.js | 11 ++++++++++- .../ImportMode/PointsFileUploadModal.jsx | 3 +++ src/modules/ImportMode/ReportStage.jsx | 10 +++++----- .../SelectedLocations.jsx | 4 ++-- .../PendingPointsFilters/TakeToWorkButton.jsx | 14 ++------------ .../PendingTable/usePendingTableFields.jsx | 2 +- 12 files changed, 34 insertions(+), 26 deletions(-) diff --git a/dist/favicon.ico b/dist/favicon.ico index adce3f389c22a224611d13cdeefea91e3fb70b15..75198a1a6e3bb4e4bb7c75dab6a58144b215e645 100644 GIT binary patch literal 4286 zcmeI0%TE(g6vj{62_@P>V~0u%!3Ir~g>fmwM}dL#0kqS))SWAJA%?%el`f1MH<-B5 z4Ty=+jmpM^Xwak#2Ej%YL9n&3F(E|c)n32T2ed;gx-l+hnqQ}#x#xV}{qF57N@T*z z?IwPw0SA$bh>ikWq87l{GY9S&hmnAhfRTWa!2gjzyL0RcxLOXSW|Z&s`u9xv0pT;# z0M3CP!1XF{1?*FFfrR9<#Z*PsdULhqdiQkfdwU*rq8#WU&_nobF%gvJ1_N3B0LDK9 zOS!r<&Pi|&G#_{OQ+LJeBX8A&Xp={UQoes0`m?znJ3JI>tCoa_(Bj?J{cldU%i7d$ zYMy%zygD4Ah5nFbUU;kF0sgsHi5k`~*^9@w)kKBg9uulL4()|?Rf<1sb4Bl$=(F8h z)>5dw9yTS1B9s)ncwqfWeZQi4Lpx00Kyt0yIx~y4SkR9z`p)x|waJh)Ka;D2hp)ox zD49b!{bip$wy2sD>)b=7M8-pxbvmuoM6uQ-v&>|W$ypxz8LarS8riDl9N+gFQ&V2QGJ7r}^1;1Y83XU>&T0m*66(8zRBEJqE152{wvJY#`6gkYz6Av%Mcj zjT4yin))+p*+T{3dF7wKcGNV2CU62A0@lFZk93y4n=!5toCM9FshC6)^qZN^%1_7i pdd7Dn0V4q;fq#{N_=|&T@dtvVvZOT$S8bpkcreV<=b%4n{R@qUA3p#9 literal 15406 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 JHBgKO{tu_)P diff --git a/dist/index.html b/dist/index.html index c1a816c..6193ba1 100644 --- a/dist/index.html +++ b/dist/index.html @@ -2,7 +2,6 @@ - PostNet by Spatial diff --git a/index.html b/index.html index 1f3988b..f4f4a73 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,6 @@ - PostNet by Spatial diff --git a/public/favicon.ico b/public/favicon.ico index adce3f389c22a224611d13cdeefea91e3fb70b15..75198a1a6e3bb4e4bb7c75dab6a58144b215e645 100644 GIT binary patch literal 4286 zcmeI0%TE(g6vj{62_@P>V~0u%!3Ir~g>fmwM}dL#0kqS))SWAJA%?%el`f1MH<-B5 z4Ty=+jmpM^Xwak#2Ej%YL9n&3F(E|c)n32T2ed;gx-l+hnqQ}#x#xV}{qF57N@T*z z?IwPw0SA$bh>ikWq87l{GY9S&hmnAhfRTWa!2gjzyL0RcxLOXSW|Z&s`u9xv0pT;# z0M3CP!1XF{1?*FFfrR9<#Z*PsdULhqdiQkfdwU*rq8#WU&_nobF%gvJ1_N3B0LDK9 zOS!r<&Pi|&G#_{OQ+LJeBX8A&Xp={UQoes0`m?znJ3JI>tCoa_(Bj?J{cldU%i7d$ zYMy%zygD4Ah5nFbUU;kF0sgsHi5k`~*^9@w)kKBg9uulL4()|?Rf<1sb4Bl$=(F8h z)>5dw9yTS1B9s)ncwqfWeZQi4Lpx00Kyt0yIx~y4SkR9z`p)x|waJh)Ka;D2hp)ox zD49b!{bip$wy2sD>)b=7M8-pxbvmuoM6uQ-v&>|W$ypxz8LarS8riDl9N+gFQ&V2QGJ7r}^1;1Y83XU>&T0m*66(8zRBEJqE152{wvJY#`6gkYz6Av%Mcj zjT4yin))+p*+T{3dF7wKcGNV2CU62A0@lFZk93y4n=!5toCM9FshC6)^qZN^%1_7i pdd7Dn0V4q;fq#{N_=|&T@dtvVvZOT$S8bpkcreV<=b%4n{R@qUA3p#9 literal 15406 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 JHBgKO{tu_)P diff --git a/src/Map/Layers/layers-config.js b/src/Map/Layers/layers-config.js index e87863a..2b2e1d9 100644 --- a/src/Map/Layers/layers-config.js +++ b/src/Map/Layers/layers-config.js @@ -79,7 +79,14 @@ export const unmatchInitialPointLayer = getPointConfig( UNMATCHED_COLOR, UNMATCH_POINT_SIZE ); -export const approvePointLayer = getPointConfig(APPROVE_COLOR); +export const approvePointLayer = { + ...getPointConfig(APPROVE_COLOR), + paint: { + ...getPointConfig(APPROVE_COLOR).paint, + "circle-stroke-width": 1, + "circle-stroke-color": "#252525", + }, +}; export const workingPointSymbolLayer = { type: "symbol", diff --git a/src/Map/Legend.jsx b/src/Map/Legend.jsx index 2cd4d06..c85c879 100644 --- a/src/Map/Legend.jsx +++ b/src/Map/Legend.jsx @@ -13,7 +13,7 @@ import React from "react"; const LegendPointItem = ({color, imageSrc, name, hideImage, border}) => { return (
- {imageSrc && } + {imageSrc && } {color && !imageSrc && ( { /> )} {!imageSrc && !color && !hideImage && ( - + )} {name} @@ -109,6 +109,7 @@ export function Legend({ postGroups, otherGroups }) { { }); }; +const TASK_STATUSES = { + finished: "Завершено" +} export const useCanEdit = () => { const { data } = useGetPermissions(); + const { data: statusData } = useLastMLRun(); + + const hasFinishedUpdate = useMemo(() => { + return statusData?.task_status === TASK_STATUSES.finished + }, [statusData]) - return data === "editor"; + return data === "editor" && hasFinishedUpdate; }; export const useUpdatePostamatId = () => { diff --git a/src/modules/ImportMode/PointsFileUploadModal.jsx b/src/modules/ImportMode/PointsFileUploadModal.jsx index 465a7f5..6637d44 100644 --- a/src/modules/ImportMode/PointsFileUploadModal.jsx +++ b/src/modules/ImportMode/PointsFileUploadModal.jsx @@ -8,6 +8,7 @@ import { CloseCircleOutlined, LoadingOutlined } from "@ant-design/icons"; +import { useUpdateLayerCounter } from "../../stores/useUpdateLayerCounter.js"; export const PointsFileUploadModal = ({onClose, isOpened}) => { const [fileId, setFileId] = useState(); @@ -15,12 +16,14 @@ export const PointsFileUploadModal = ({onClose, isOpened}) => { const [isImporting, setIsImporting] = useState(false); const [isReportStage, setIsReportStage] = useState(false); const [isError, setIsError] = useState(false); + const { toggleUpdateCounter } = useUpdateLayerCounter(); const onImportPoints = async () => { setIsImporting(true); try { const { message } = await importPoints(fileId); setReport(message); + toggleUpdateCounter(); } catch (e) { setIsError(true); } finally { diff --git a/src/modules/ImportMode/ReportStage.jsx b/src/modules/ImportMode/ReportStage.jsx index 4a26383..16f19c1 100644 --- a/src/modules/ImportMode/ReportStage.jsx +++ b/src/modules/ImportMode/ReportStage.jsx @@ -5,28 +5,28 @@ export const ReportStage = ({ report }) => { return ( <> - + Всего точек: - {report.total} + {report.total} Совпадений: - {report.matched} + {report.matched} Проблемные: - {report.error} + {report.error} Новые: - {report.unmatched} + {report.unmatched} diff --git a/src/modules/Sidebar/PendingPointsFilters/SelectedLocations.jsx b/src/modules/Sidebar/PendingPointsFilters/SelectedLocations.jsx index 0e67cfb..c1e6921 100644 --- a/src/modules/Sidebar/PendingPointsFilters/SelectedLocations.jsx +++ b/src/modules/Sidebar/PendingPointsFilters/SelectedLocations.jsx @@ -9,7 +9,7 @@ import { useEffect } from "react"; export const SelectedLocations = ({ onSelectedChange }) => { const { data: totalCount, isInitialLoading: isTotalLoading } = useGetTotalInitialPointsCount(); - const { data: filteredCount, isInitialLoading: isFilteredLoading } = + const { data: filteredCount, isInitialLoading: isFilteredLoading, isFetching: isFilteredFetching } = useGetFilteredPendingPointsCount(); const { @@ -21,7 +21,7 @@ export const SelectedLocations = ({ onSelectedChange }) => { [filteredCount, excluded] ); - const showSpinner = isTotalLoading || isFilteredLoading; + const showSpinner = isTotalLoading || isFilteredLoading || isFilteredFetching; return (
diff --git a/src/modules/Sidebar/PendingPointsFilters/TakeToWorkButton.jsx b/src/modules/Sidebar/PendingPointsFilters/TakeToWorkButton.jsx index 3c61b58..64bf172 100644 --- a/src/modules/Sidebar/PendingPointsFilters/TakeToWorkButton.jsx +++ b/src/modules/Sidebar/PendingPointsFilters/TakeToWorkButton.jsx @@ -2,16 +2,11 @@ import { Alert, Button, Modal, Spin } from "antd"; import { useQueryClient } from "@tanstack/react-query"; import { usePointSelection } from "../../../stores/usePointSelection"; import { STATUSES } from "../../../config"; -import { useMemo, useState } from "react"; +import { useState } from "react"; import { useUpdateStatus } from "../../../hooks/useUpdateStatus"; import { ArrowRightOutlined } from "@ant-design/icons"; import { Title } from "../../../components/Title"; import { usePendingPointsFilters } from "../../../stores/usePendingPointsFilters"; -import { useLastMLRun } from "../../../api.js"; - -const TASK_STATUSES = { - finished: "Завершено" -} export const TakeToWorkButton = ({ disabled }) => { const { filters } = usePendingPointsFilters(); @@ -19,11 +14,6 @@ export const TakeToWorkButton = ({ disabled }) => { const { selection } = usePointSelection(); const queryClient = useQueryClient(); const [isModalOpened, setIsModalOpened] = useState(false); - const { data: statusData } = useLastMLRun(); - - const disableButton = useMemo(() => { - return statusData?.task_status !== TASK_STATUSES.finished - }, [statusData]) const { mutate: updateStatus, @@ -89,7 +79,7 @@ export const TakeToWorkButton = ({ disabled }) => { block className={"mt-2"} onClick={() => setIsModalOpened(true)} - disabled={disabled || disableButton} + disabled={disabled} > Взять в работу diff --git a/src/modules/Table/PendingTable/usePendingTableFields.jsx b/src/modules/Table/PendingTable/usePendingTableFields.jsx index 5a14e7c..3e31073 100644 --- a/src/modules/Table/PendingTable/usePendingTableFields.jsx +++ b/src/modules/Table/PendingTable/usePendingTableFields.jsx @@ -11,7 +11,7 @@ const MATCHING_STATUS = { color: 'import_status_new' }, Error: { - name: 'Ошибка', + name: 'Ошибка геокодирования', color: 'import_status_error' }, Matched: {