remove auth

dev
gman 6 months ago
parent 8a8ca88de3
commit 5fd5eaa0de

@ -1,4 +1,4 @@
VITE_API_URL=https://postnet.dev.selftech.ru
VITE_API_URL=https://postamates.spatialsystems.ru
VITE_KEYCLOAK_CLIENT_ID=postnet
VITE_KEYCLOAK_CLIENT_SECRET=K2yHweEUispkVeWn03VMk843sW2Moic5
VITE_KEYCLOAK_URL=https://kk.dev.selftech.ru/

5075
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -1,18 +1,16 @@
import "./App.css";
import { BrowserRouter, Route, Routes } from "react-router-dom";
import { LoginPage } from "./pages/Login";
import { VerifyRegistrationPage } from "./pages/VerifyRegistration";
import { MapPage } from "./pages/Map";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { enableMapSet } from "immer";
import { BrowserRouter, Route, Routes } from "react-router-dom";
import { mountStoreDevtool } from "simple-zustand-devtools";
import { usePointSelection } from "./stores/usePointSelection";
import { usePendingPointsFilters } from "./stores/usePendingPointsFilters";
import "./App.css";
import useLocalStorage from "./hooks/useLocalStorage.js";
import { MapPage } from "./pages/Map";
import { useOnApprovalPointsFilters } from "./stores/useOnApprovalPointsFilters";
import { usePendingPointsFilters } from "./stores/usePendingPointsFilters";
import { usePointSelection } from "./stores/usePointSelection";
import { useWorkingPointsFilters } from "./stores/useWorkingPointsFilters";
import useLocalStorage from "./hooks/useLocalStorage.js";
import { ReactKeycloakProvider } from "@react-keycloak/web";
import { keycloak } from "./keycloak.js";
// import { ReactKeycloakProvider } from "@react-keycloak/web";
// import { keycloak } from "./keycloak.js";
const queryClient = new QueryClient();
enableMapSet();
@ -36,18 +34,18 @@ function App() {
}
return (
<ReactKeycloakProvider authClient={keycloak}>
// <ReactKeycloakProvider authClient={keycloak}>
<QueryClientProvider client={queryClient}>
<BrowserRouter basename={import.meta.env.BASE_URL}>
<Routes>
<Route path="/" element={<MapPage />} />
<Route path="/signin" element={<LoginPage />} />
<Route path="/verify-user" element={<VerifyRegistrationPage />} />
{/* <Route path="/signin" element={<LoginPage />} /> */}
{/* <Route path="/verify-user" element={<VerifyRegistrationPage />} /> */}
{/*<Route path="/register" element={<RegisterPage />} />*/}
</Routes>
</BrowserRouter>
</QueryClientProvider>
</ReactKeycloakProvider>
// </ReactKeycloakProvider>
);
}

@ -1,35 +1,35 @@
import debounce from "lodash.debounce";
import maplibregl from "maplibre-gl";
import Map, { MapProvider } from "react-map-gl";
import { useEffect, useMemo, useRef, useState } from "react";
import Map, { MapProvider } from "react-map-gl";
import { twMerge } from "tailwind-merge";
import { useOtherGroups, usePostamatesAndPvzGroups } from "../api.js";
import { MODE_TO_LAYER_VISIBILITY_MAPPER } from "../config";
import { icons } from "../icons/icons-config";
import { Sidebar } from "../modules/Sidebar/Sidebar";
import { Layers } from "./Layers/Layers";
import { MapPopup } from "./Popup/Popup";
import { Basemap } from "./Basemap";
import { TableWrapper } from "../modules/Table/TableWrapper";
import { SignOut } from "../SignOut";
import debounce from "lodash.debounce";
import { usePopup } from "../stores/usePopup";
import { useClickedPointConfig } from "../stores/useClickedPointConfig";
import { Legend } from "./Legend";
import { TableWrapper } from "../modules/Table/TableWrapper";
import { useMode } from "../stores/useMode";
import { MODE_TO_LAYER_VISIBILITY_MAPPER } from "../config";
import { SidebarControl } from "./SidebarControl";
import { LayersControl } from "./LayersControl/LayersControl";
import { useTable } from "../stores/useTable";
import { twMerge } from "tailwind-merge";
import { useLayersVisibility } from "../stores/useLayersVisibility";
import { LAYER_IDS } from "./Layers/constants";
import { Header } from "./Header";
import { icons } from "../icons/icons-config";
import { LastMLRun } from "./LastMLRun";
import { useOtherGroups, usePostamatesAndPvzGroups } from "../api.js";
import { getFilteredGroups, transliterate } from "../utils.js";
import { useMode } from "../stores/useMode";
import {
CATEGORIES_MAP,
RANGE_FILTERS_KEYS,
RANGE_FILTERS_MAP
} from "../stores/usePendingPointsFilters.js";
import { usePopup } from "../stores/usePopup";
import { useTable } from "../stores/useTable";
import { useUpdateLayerCounter } from "../stores/useUpdateLayerCounter.js";
import { getFilteredGroups, transliterate } from "../utils.js";
import { Basemap } from "./Basemap";
import { Header } from "./Header";
import { LastMLRun } from "./LastMLRun";
import { LAYER_IDS } from "./Layers/constants";
import { Layers } from "./Layers/Layers";
import { LayersControl } from "./LayersControl/LayersControl";
import { Legend } from "./Legend";
import { MapPopup } from "./Popup/Popup";
import { SidebarControl } from "./SidebarControl";
export const MapComponent = () => {
const mapRef = useRef(null);

@ -1,14 +1,14 @@
import { useClickedPointConfig } from "../../../stores/useClickedPointConfig";
import { useEffect, useState } from "react";
import { FeatureProperties } from "./FeatureProperties";
import { Title } from "../../../components/Title";
import { useQueryClient } from "@tanstack/react-query";
import { useUpdateStatus } from "../../../hooks/useUpdateStatus";
import { StatusSelect } from "../../../components/StatusSelect";
import { useCanEdit, useUpdatePostamatId } from "../../../api";
import { Button, InputNumber } from "antd";
import { useEffect, useState } from "react";
import { useUpdatePostamatId } from "../../../api";
import { StatusSelect } from "../../../components/StatusSelect";
import { Title } from "../../../components/Title";
import { STATUSES } from "../../../config";
import { useUpdateStatus } from "../../../hooks/useUpdateStatus";
import { useClickedPointConfig } from "../../../stores/useClickedPointConfig";
import { isNil } from "../../../utils.js";
import { FeatureProperties } from "./FeatureProperties";
export const OnApprovalPointPopup = ({ feature, point }) => {
const featureId = feature.properties.id;
@ -86,7 +86,7 @@ export const OnApprovalPointPopup = ({ feature, point }) => {
}
};
const canEdit = useCanEdit();
const canEdit = true;
return (
<>

@ -1,11 +1,10 @@
import { usePointSelection } from "../../../stores/usePointSelection";
import { useClickedPointConfig } from "../../../stores/useClickedPointConfig";
import { useEffect } from "react";
import { FeatureProperties } from "./FeatureProperties";
import { Button } from "antd";
import { useCanEdit } from "../../../api";
import { useEffect } from "react";
import { useClickedPointConfig } from "../../../stores/useClickedPointConfig";
import { usePendingPointsFilters } from "../../../stores/usePendingPointsFilters";
import { usePointSelection } from "../../../stores/usePointSelection";
import { doesMatchFilter } from "../../../utils.js";
import { FeatureProperties } from "./FeatureProperties";
export const PendingPointPopup = ({ feature, point }) => {
const { include, selection, exclude } = usePointSelection();
@ -31,7 +30,7 @@ export const PendingPointPopup = ({ feature, point }) => {
}
};
const canEdit = useCanEdit();
const canEdit = true
return (
<>

@ -1,23 +1,19 @@
import { Button, Popover, Tooltip } from "antd";
import { ArrowRightOutlined, LogoutOutlined } from "@ant-design/icons";
import { api } from "./api";
import { useQuery } from "@tanstack/react-query";
import { Title } from "./components/Title";
import { keycloak } from "./keycloak.js";
import { Button, Popover, Tooltip } from "antd";
export function SignOut() {
const { data } = useQuery(["profile"], async () => {
const { data } = await api.get("/api/me/");
return data;
});
// const { data } = useQuery(["profile"], async () => {
// const { data } = await api.get("/api/me/");
// return data;
// });
return (
<div className="absolute top-[20px] right-[20px]">
<Popover
content={
<>
<Title text={data?.username} classNameText={"lowercase"} />
<Button type="primary" block onClick={keycloak.logout}>
{/* <Title text={data?.username} classNameText={"lowercase"} /> */}
<Button type="primary" block>
<span className="mr-1">Выйти</span>
<ArrowRightOutlined />
</Button>

@ -1,14 +1,11 @@
import axios from "axios";
import { useMutation, useQuery } from "@tanstack/react-query";
import axios from "axios";
import { STATUSES } from "./config";
import { usePointSelection } from "./stores/usePointSelection";
import { RANGE_FILTERS_KEYS, usePendingPointsFilters } from "./stores/usePendingPointsFilters";
import { appendFiltersInUse } from "./utils.js";
import { useMode } from "./stores/useMode.js";
import { useMemo } from "react";
import { RANGE_FILTERS_KEYS, usePendingPointsFilters } from "./stores/usePendingPointsFilters";
import { usePointSelection } from "./stores/usePointSelection";
import { useUpdateLayerCounter } from "./stores/useUpdateLayerCounter.js";
import { keycloak } from "./keycloak.js";
import { useKeycloak } from "@react-keycloak/web";
import { appendFiltersInUse } from "./utils.js";
export const BASE_URL = import.meta.env.VITE_API_URL;
@ -19,23 +16,14 @@ export const api = axios.create({
: BASE_URL,
});
api.interceptors.request.use(async function (config) {
const token = keycloak.token;
if (token) {
config.headers.Authorization = `Bearer ${ token }`;
}
return config;
});
export const useDbTableName = () => {
const {isImportMode} = useMode();
const { isImportMode } = useMode();
if (isImportMode) return "pre_placement_points";
return "placement_points";
}
export const useSourceLayerName = () => {
const {isImportMode} = useMode();
const { isImportMode } = useMode();
if (isImportMode) return "public.prepoints_with_dist";
return "public.points_with_dist";
}
@ -60,7 +48,7 @@ export const getPoints = async (params, region, dbTable = "placement_points", si
const resultParams = enrichParamsWithRegionFilter(params, region);
const { data } = await api.get(
`/api/${dbTable}/?${resultParams.toString()}`, {signal}
`/api/${dbTable}/?${resultParams.toString()}`, { signal }
);
return data;
@ -122,7 +110,7 @@ export const useGetTotalInitialPointsCount = () => {
const { updateCounter } = useUpdateLayerCounter();
return useQuery(
["all-initial-count", dbTable, updateCounter],
async ({signal}) => {
async ({ signal }) => {
const params = new URLSearchParams({
page: 1,
page_size: 1,
@ -174,7 +162,7 @@ export const useGetFilteredPendingPointsCount = (isMerge) => {
return useQuery(
["filtered-points", filters, dbTable, includedIds, updateCounter],
async ({signal}) => {
async ({ signal }) => {
const params = isMerge ? getMergeParams() : getParams();
return await getPoints(params, region, dbTable, signal);
@ -218,32 +206,23 @@ export const useMergePointsToDb = () => {
};
export const useGetPermissions = () => {
const {setImportMode} = useMode();
return useQuery(["permissions"], async () => {
const { data } = await api.get("/api/me/");
if (data?.groups?.includes("postnet_editor")) {
return "editor";
}
setImportMode(false);
return "viewer";
});
return "editor"
// const { setImportMode } = useMode();
// return useQuery(["permissions"], async () => {
// const { data } = await api.get("/api/me/");
// if (data?.groups?.includes("postnet_editor")) {
// return "editor";
// }
// setImportMode(false);
// return "viewer";
// });
};
const TASK_STATUSES = {
finished: "Перерасчет ML завершен"
}
export const useCanEdit = () => {
const { keycloak } = useKeycloak();
const { data: statusData } = useLastMLRun();
const hasFinishedUpdate = useMemo(() => {
return statusData?.task_status === TASK_STATUSES.finished
}, [statusData]);
return keycloak.hasResourceRole("postnet_editor", "postnet") && hasFinishedUpdate;
};
export const useUpdatePostamatId = () => {
return useMutation({
@ -327,13 +306,13 @@ export const useGetPendingPointsRange = (dbTable) => {
const { data, isInitialLoading, isFetching } = await api.get(
`/api/${dbTable}/filters/${statusFilter}`
);
return {data, isLoading: isInitialLoading || isFetching};
return { data, isLoading: isInitialLoading || isFetching };
},
{
select: ({data, isLoading}) => {
select: ({ data, isLoading }) => {
const distToGroupsArr = data.dist_to_groups.map((groupRange) => {
return {
[`d${groupRange.group_id}`]: [Math.floor(groupRange.dist[0]), Math.min(Math.ceil(groupRange.dist[1]), 4000)],
[`d${groupRange.group_id}`]: [Math.floor(groupRange.dist[0]), Math.min(Math.ceil(groupRange.dist[1]), 4000)],
}
});
const distToGroups = Object.assign({}, ...distToGroupsArr);
@ -347,8 +326,8 @@ export const useGetPendingPointsRange = (dbTable) => {
return {
fullRange: {
prediction: data.prediction_current,
...ranges,
...distToGroups
...ranges,
...distToGroups
},
isLoading: isLoading
};

@ -1,11 +1,10 @@
import { useMode } from "../../stores/useMode.js";
import { Button } from "antd";
import { ImportOutlined } from "@ant-design/icons";
import { PointsFileUploadModal } from "./PointsFileUploadModal.jsx";
import { Button } from "antd";
import { useState } from "react";
import { MergePointsModal } from "./MergePointsModal.jsx";
import { MODES } from "../../config.js";
import { useCanEdit } from "../../api.js";
import { useMode } from "../../stores/useMode.js";
import { MergePointsModal } from "./MergePointsModal.jsx";
import { PointsFileUploadModal } from "./PointsFileUploadModal.jsx";
export const ImportModeSidebarButtons = () => {
const { mode, isImportMode, setImportMode } = useMode();
@ -21,7 +20,7 @@ export const ImportModeSidebarButtons = () => {
setUploadModalOpen(true);
};
const canEdit = useCanEdit();
const canEdit = true
if (isImportMode) {
return (

@ -1,21 +1,21 @@
import { DISABLED_FILTER_TEXT } from "../../../config";
import {Button, Spin, Tooltip} from "antd";
import { SelectedLocations } from "./SelectedLocations";
import { TakeToWorkButton } from "./TakeToWorkButton";
import { RegionSelect } from "../../../components/RegionSelect";
import { CategoriesSelect } from "./CategoriesSelect";
import { PredictionSlider } from "./PredictionSlider";
import { Button, Spin, Tooltip } from "antd";
import { useEffect, useState } from "react";
import { useDbTableName, useGetPendingPointsRange } from "../../../api";
import { ClearFiltersButton } from "../../../components/ClearFiltersButton";
import { RegionSelect } from "../../../components/RegionSelect";
import { DISABLED_FILTER_TEXT } from "../../../config";
import { RANGE_FILTERS_KEYS, usePendingPointsFilters } from "../../../stores/usePendingPointsFilters";
import {
useHasManualEdits,
usePointSelection,
} from "../../../stores/usePointSelection";
import {RANGE_FILTERS_KEYS, usePendingPointsFilters} from "../../../stores/usePendingPointsFilters";
import { ClearFiltersButton } from "../../../components/ClearFiltersButton";
import { predictionHasChanged } from "../../../utils.js";
import { getDynamicActiveFilters } from "../utils";
import { useDbTableName, useCanEdit, useGetPendingPointsRange } from "../../../api";
import { AdvancedFiltersWrapper } from "./AdvancedFilters/AdvancedFiltersWrapper.jsx";
import { predictionHasChanged } from "../../../utils.js";
import { CategoriesSelect } from "./CategoriesSelect";
import { PredictionSlider } from "./PredictionSlider";
import { SelectedLocations } from "./SelectedLocations";
import { TakeToWorkButton } from "./TakeToWorkButton";
export const PendingPointsFilters = () => {
const hasManualEdits = useHasManualEdits();
@ -85,7 +85,7 @@ export const PendingPointsFilters = () => {
activeDynamicFilters.prediction ||
filters.categories.length !== 0;
const canEdit = useCanEdit();
const canEdit = true
return (
<div className="flex flex-col flex-1 justify-between">

@ -1,16 +1,16 @@
import { Table } from "../Table";
import { useQuery } from "@tanstack/react-query";
import { getPoints, useCanEdit, useDbTableName } from "../../../api";
import { useCallback, useState } from "react";
import { PAGE_SIZE } from "../constants";
import { getPoints, useDbTableName } from "../../../api";
import { STATUSES } from "../../../config";
import { LAYER_IDS } from "../../../Map/Layers/constants.js";
import { useLayersVisibility } from "../../../stores/useLayersVisibility.js";
import { useOnApprovalPointsFilters } from "../../../stores/useOnApprovalPointsFilters";
import { PAGE_SIZE } from "../constants";
import { Table } from "../Table";
import { useColumns } from "../useColumns.jsx";
import { useMergeTableData } from "../useMergeTableData";
import { Header } from "./Header";
import { useOnApprovalPointsFilters } from "../../../stores/useOnApprovalPointsFilters";
import { MakeWorkingModal } from "./MakeWorkingTable/MakeWorkingModal";
import { useColumns } from "../useColumns.jsx";
import { useLayersVisibility } from "../../../stores/useLayersVisibility.js";
import { LAYER_IDS } from "../../../Map/Layers/constants.js";
const extraCols = [
{
@ -94,7 +94,7 @@ export const OnApprovalTable = ({ fullWidth }) => {
hideSelectAll: true,
};
const canEdit = useCanEdit();
const canEdit = true
return (
<>

@ -1,16 +1,15 @@
import React, {useCallback, useState} from "react";
import { Table } from "../Table";
import { usePointSelection } from "../../../stores/usePointSelection";
import { useCallback, useState } from "react";
import { STATUSES } from "../../../config.js";
import { useClickedPointConfig } from "../../../stores/useClickedPointConfig";
import { usePendingTableData } from "./usePendingTableData";
import { usePointSelection } from "../../../stores/usePointSelection";
import { usePopup } from "../../../stores/usePopup.js";
import { PAGE_SIZE } from "../constants.js";
import { HeaderWrapper } from "../HeaderWrapper";
import { useExportPendingData } from "./useExportPendingData";
import { useCanEdit } from "../../../api";
import { Table } from "../Table";
import { useColumns } from "../useColumns.jsx";
import { PAGE_SIZE } from "../constants.js";
import { usePopup } from "../../../stores/usePopup.js";
import { useExportPendingData } from "./useExportPendingData";
import { usePendingTableData } from "./usePendingTableData";
import { usePendingTableFields } from "./usePendingTableFields.jsx";
import { STATUSES } from "../../../config.js";
const tableKey = 'pendingTable';
export const PendingTable = ({ fullWidth }) => {
@ -84,7 +83,7 @@ export const PendingTable = ({ fullWidth }) => {
setPage(page);
}, []);
const canEdit = useCanEdit();
const canEdit = true
return (
<Table

@ -1,10 +1,9 @@
import { WithAuth } from "../WithAuth";
import { MapComponent } from "../Map/MapComponent";
export function MapPage() {
return (
<WithAuth>
// <WithAuth>
<MapComponent />
</WithAuth>
// </WithAuth>
);
}

@ -1,17 +1,19 @@
import { defineConfig, loadEnv } from "vite";
import react from "@vitejs/plugin-react";
import { defineConfig, loadEnv } from "vite";
import svgr from "vite-plugin-svgr";
export default defineConfig(({ mode }) => {
// @ts-ignore
const env = loadEnv(mode, process.cwd());
console.log(env);
return {
base: "/",
plugins: [svgr(), react()],
server: {
proxy: {
"/api": env.VITE_API_URL,
"/api": {target: "https://postamates.spatialsystems.ru/api", changeOrigin: true},
"/realms": "https://kk.dev.selftech.ru/",
},
},

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save