fix: Fix for correct usage
This commit is contained in:
parent
b837aae711
commit
a6a5288262
@ -2,7 +2,7 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="/favicon.ico" />
|
<link rel="icon" href="/favicon-ship.png" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="theme-color" content="#000000" />
|
<meta name="theme-color" content="#000000" />
|
||||||
<meta
|
<meta
|
||||||
@ -19,9 +19,7 @@
|
|||||||
name="twitter:image"
|
name="twitter:image"
|
||||||
content="https://refine.dev/img/refine_social.png"
|
content="https://refine.dev/img/refine_social.png"
|
||||||
/>
|
/>
|
||||||
<title>
|
<title>Белые ночи</title>
|
||||||
Белые ночи
|
|
||||||
</title>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
|
BIN
public/favicon-ship.png
Normal file
BIN
public/favicon-ship.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.8 KiB |
@ -70,6 +70,7 @@ type LinkedItemsProps<T> = {
|
|||||||
disableCreation?: boolean;
|
disableCreation?: boolean;
|
||||||
updatedLinkedItems?: T[];
|
updatedLinkedItems?: T[];
|
||||||
refresh?: number;
|
refresh?: number;
|
||||||
|
cityId?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
const reorder = (list: any[], startIndex: number, endIndex: number) => {
|
const reorder = (list: any[], startIndex: number, endIndex: number) => {
|
||||||
@ -131,6 +132,7 @@ export const LinkedItemsContents = <
|
|||||||
disableCreation = false,
|
disableCreation = false,
|
||||||
updatedLinkedItems,
|
updatedLinkedItems,
|
||||||
refresh,
|
refresh,
|
||||||
|
cityId,
|
||||||
}: LinkedItemsProps<T>) => {
|
}: LinkedItemsProps<T>) => {
|
||||||
const { language } = languageStore;
|
const { language } = languageStore;
|
||||||
const { setArticleModalOpenAction, setArticleIdAction } = articleStore;
|
const { setArticleModalOpenAction, setArticleIdAction } = articleStore;
|
||||||
@ -216,7 +218,7 @@ export const LinkedItemsContents = <
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (type === "edit") {
|
if (type === "edit") {
|
||||||
axiosInstance
|
axiosInstance
|
||||||
.get(`${import.meta.env.VITE_KRBL_API}/${childResource}/`)
|
.get(`${import.meta.env.VITE_KRBL_API}/${childResource}/`, {})
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
setItems(response?.data || []);
|
setItems(response?.data || []);
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
@ -445,7 +447,7 @@ export const LinkedItemsContents = <
|
|||||||
availableItems?.find((item) => item.id === selectedItemId) || null
|
availableItems?.find((item) => item.id === selectedItemId) || null
|
||||||
}
|
}
|
||||||
onChange={(_, newValue) => setSelectedItemId(newValue?.id || null)}
|
onChange={(_, newValue) => setSelectedItemId(newValue?.id || null)}
|
||||||
options={availableItems}
|
options={availableItems.filter((item) => item.city_id == cityId)}
|
||||||
getOptionLabel={(item) => String(item[fields[0].data])}
|
getOptionLabel={(item) => String(item[fields[0].data])}
|
||||||
renderInput={(params) => (
|
renderInput={(params) => (
|
||||||
<TextField {...params} label={`Выберите ${title}`} fullWidth />
|
<TextField {...params} label={`Выберите ${title}`} fullWidth />
|
||||||
@ -456,6 +458,7 @@ export const LinkedItemsContents = <
|
|||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
.split(" ")
|
.split(" ")
|
||||||
.filter((word) => word.length > 0);
|
.filter((word) => word.length > 0);
|
||||||
|
|
||||||
return options.filter((option) => {
|
return options.filter((option) => {
|
||||||
const optionWords = String(option[fields[0].data])
|
const optionWords = String(option[fields[0].data])
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
|
@ -143,8 +143,17 @@ export const Header: React.FC<RefineThemedLayoutV2HeaderProps> = observer(
|
|||||||
justifyContent="flex-end"
|
justifyContent="flex-end"
|
||||||
alignItems="center"
|
alignItems="center"
|
||||||
spacing={2}
|
spacing={2}
|
||||||
|
color="white"
|
||||||
|
sx={{
|
||||||
|
"& .MuiSelect-select": {
|
||||||
|
color: "white",
|
||||||
|
},
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<FormControl variant="standard" sx={{ width: "min-content" }}>
|
<FormControl
|
||||||
|
variant="standard"
|
||||||
|
sx={{ width: "min-content", color: "white" }}
|
||||||
|
>
|
||||||
{city_id && cities && (
|
{city_id && cities && (
|
||||||
<Select
|
<Select
|
||||||
defaultValue={city_id}
|
defaultValue={city_id}
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
import {ProjectIcon} from './Icons'
|
import { Ship } from "lucide-react";
|
||||||
|
import { ProjectIcon } from "./Icons";
|
||||||
|
|
||||||
export default function SidebarTitle({collapsed}: {collapsed: boolean}) {
|
export default function SidebarTitle({ collapsed }: { collapsed: boolean }) {
|
||||||
return (
|
return (
|
||||||
<div style={{display: 'flex', alignItems: 'center', whiteSpace: 'nowrap'}}>
|
<div
|
||||||
<ProjectIcon style={{color: '#7f6b58'}} />
|
style={{ display: "flex", alignItems: "center", whiteSpace: "nowrap" }}
|
||||||
|
>
|
||||||
|
<Ship size={40} style={{ color: "#7f6b58" }} />
|
||||||
|
|
||||||
{!collapsed && <span style={{marginLeft: 8, fontWeight: 'bold'}}>Белые ночи</span>}
|
{!collapsed && (
|
||||||
|
<span style={{ marginLeft: 8, fontWeight: "bold" }}>Белые ночи</span>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ import { useTransform } from "./TransformContext";
|
|||||||
import { useMapData } from "./MapDataContext";
|
import { useMapData } from "./MapDataContext";
|
||||||
import { SCALE_FACTOR } from "./Constants";
|
import { SCALE_FACTOR } from "./Constants";
|
||||||
import { useApplication } from "@pixi/react";
|
import { useApplication } from "@pixi/react";
|
||||||
import { languageStore } from "@/store/LanguageStore";
|
|
||||||
|
|
||||||
class ErrorBoundary extends Component<
|
class ErrorBoundary extends Component<
|
||||||
{ children: ReactNode },
|
{ children: ReactNode },
|
||||||
|
@ -25,7 +25,7 @@ const MapDataContext = createContext<{
|
|||||||
originalStationData?: StationData[];
|
originalStationData?: StationData[];
|
||||||
originalSightData?: SightData[];
|
originalSightData?: SightData[];
|
||||||
routeData?: RouteData;
|
routeData?: RouteData;
|
||||||
stationData?: StationData[];
|
stationData?: StationDataWithLanguage;
|
||||||
sightData?: SightData[];
|
sightData?: SightData[];
|
||||||
|
|
||||||
isRouteLoading: boolean;
|
isRouteLoading: boolean;
|
||||||
@ -60,6 +60,9 @@ const MapDataContext = createContext<{
|
|||||||
saveChanges: () => {},
|
saveChanges: () => {},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
type StationDataWithLanguage = {
|
||||||
|
[key: string]: StationData[];
|
||||||
|
};
|
||||||
export const MapDataProvider = observer(
|
export const MapDataProvider = observer(
|
||||||
({ children }: Readonly<{ children: ReactNode }>) => {
|
({ children }: Readonly<{ children: ReactNode }>) => {
|
||||||
const { id: routeId } = useParams<{ id: string }>();
|
const { id: routeId } = useParams<{ id: string }>();
|
||||||
@ -71,7 +74,11 @@ export const MapDataProvider = observer(
|
|||||||
const [originalSightData, setOriginalSightData] = useState<SightData[]>();
|
const [originalSightData, setOriginalSightData] = useState<SightData[]>();
|
||||||
|
|
||||||
const [routeData, setRouteData] = useState<RouteData>();
|
const [routeData, setRouteData] = useState<RouteData>();
|
||||||
const [stationData, setStationData] = useState<StationData[]>();
|
const [stationData, setStationData] = useState<StationDataWithLanguage>({
|
||||||
|
RU: [],
|
||||||
|
EN: [],
|
||||||
|
ZH: [],
|
||||||
|
});
|
||||||
const [sightData, setSightData] = useState<SightData[]>();
|
const [sightData, setSightData] = useState<SightData[]>();
|
||||||
|
|
||||||
const [routeChanges, setRouteChanges] = useState<Partial<RouteData>>({});
|
const [routeChanges, setRouteChanges] = useState<Partial<RouteData>>({});
|
||||||
@ -92,15 +99,27 @@ export const MapDataProvider = observer(
|
|||||||
setIsStationLoading(true);
|
setIsStationLoading(true);
|
||||||
setIsSightLoading(true);
|
setIsSightLoading(true);
|
||||||
|
|
||||||
const [routeResponse, stationResponse, sightResponse] =
|
const [
|
||||||
await Promise.all([
|
routeResponse,
|
||||||
axiosInstanceForGet.get(`/route/${routeId}`),
|
ruStationResponse,
|
||||||
axiosInstanceForGet.get(`/route/${routeId}/station`),
|
enStationResponse,
|
||||||
axiosInstanceForGet.get(`/route/${routeId}/sight`),
|
zhStationResponse,
|
||||||
]);
|
sightResponse,
|
||||||
|
] = await Promise.all([
|
||||||
|
axiosInstanceForGet(language).get(`/route/${routeId}`),
|
||||||
|
axiosInstanceForGet("ru").get(`/route/${routeId}/station`),
|
||||||
|
axiosInstanceForGet("en").get(`/route/${routeId}/station`),
|
||||||
|
axiosInstanceForGet("zh").get(`/route/${routeId}/station`),
|
||||||
|
axiosInstanceForGet(language).get(`/route/${routeId}/sight`),
|
||||||
|
]);
|
||||||
|
|
||||||
setOriginalRouteData(routeResponse.data as RouteData);
|
setOriginalRouteData(routeResponse.data as RouteData);
|
||||||
setOriginalStationData(stationResponse.data as StationData[]);
|
setOriginalStationData(ruStationResponse.data as StationData[]);
|
||||||
|
setStationData({
|
||||||
|
ru: ruStationResponse.data as StationData[],
|
||||||
|
en: enStationResponse.data as StationData[],
|
||||||
|
zh: zhStationResponse.data as StationData[],
|
||||||
|
});
|
||||||
setOriginalSightData(sightResponse.data as SightData[]);
|
setOriginalSightData(sightResponse.data as SightData[]);
|
||||||
|
|
||||||
setIsRouteLoading(false);
|
setIsRouteLoading(false);
|
||||||
@ -115,17 +134,15 @@ export const MapDataProvider = observer(
|
|||||||
};
|
};
|
||||||
|
|
||||||
fetchData();
|
fetchData();
|
||||||
}, [routeId, language]);
|
}, [routeId]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// combine changes with original data
|
// combine changes with original data
|
||||||
if (originalRouteData)
|
if (originalRouteData)
|
||||||
setRouteData({ ...originalRouteData, ...routeChanges });
|
setRouteData({ ...originalRouteData, ...routeChanges });
|
||||||
if (originalStationData) setStationData(originalStationData);
|
|
||||||
if (originalSightData) setSightData(originalSightData);
|
if (originalSightData) setSightData(originalSightData);
|
||||||
}, [
|
}, [
|
||||||
originalRouteData,
|
originalRouteData,
|
||||||
originalStationData,
|
|
||||||
originalSightData,
|
originalSightData,
|
||||||
routeChanges,
|
routeChanges,
|
||||||
stationChanges,
|
stationChanges,
|
||||||
@ -189,7 +206,7 @@ export const MapDataProvider = observer(
|
|||||||
return station;
|
return station;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const foundStation = stationData?.find(
|
const foundStation = stationData.ru?.find(
|
||||||
(station) => station.id === stationId
|
(station) => station.id === stationId
|
||||||
);
|
);
|
||||||
if (foundStation) {
|
if (foundStation) {
|
||||||
@ -248,12 +265,12 @@ export const MapDataProvider = observer(
|
|||||||
|
|
||||||
const value = useMemo(
|
const value = useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
originalRouteData: originalRouteData,
|
originalRouteData,
|
||||||
originalStationData: originalStationData,
|
originalStationData,
|
||||||
originalSightData: originalSightData,
|
originalSightData,
|
||||||
routeData: routeData,
|
routeData,
|
||||||
stationData: stationData,
|
stationData,
|
||||||
sightData: sightData,
|
sightData,
|
||||||
isRouteLoading,
|
isRouteLoading,
|
||||||
isStationLoading,
|
isStationLoading,
|
||||||
isSightLoading,
|
isSightLoading,
|
||||||
|
@ -1,109 +1,148 @@
|
|||||||
import { FederatedMouseEvent, Graphics } from "pixi.js";
|
import { FederatedMouseEvent, Graphics } from "pixi.js";
|
||||||
import { BACKGROUND_COLOR, PATH_COLOR, STATION_RADIUS, STATION_OUTLINE_WIDTH, UP_SCALE } from "./Constants";
|
import {
|
||||||
|
BACKGROUND_COLOR,
|
||||||
|
PATH_COLOR,
|
||||||
|
STATION_RADIUS,
|
||||||
|
STATION_OUTLINE_WIDTH,
|
||||||
|
UP_SCALE,
|
||||||
|
} from "./Constants";
|
||||||
import { useTransform } from "./TransformContext";
|
import { useTransform } from "./TransformContext";
|
||||||
import { useCallback, useEffect, useRef, useState } from "react";
|
import { useCallback, useEffect, useRef, useState } from "react";
|
||||||
import { StationData } from "./types";
|
import { StationData } from "./types";
|
||||||
import { useMapData } from "./MapDataContext";
|
import { useMapData } from "./MapDataContext";
|
||||||
import { coordinatesToLocal } from "./utils";
|
import { coordinatesToLocal } from "./utils";
|
||||||
|
import { observer } from "mobx-react-lite";
|
||||||
|
import { languageStore } from "@stores";
|
||||||
|
|
||||||
interface StationProps {
|
interface StationProps {
|
||||||
station: StationData;
|
station: StationData;
|
||||||
|
ruLabel: string | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Station({
|
export const Station = observer(
|
||||||
station
|
({ station, ruLabel }: Readonly<StationProps>) => {
|
||||||
}: Readonly<StationProps>) {
|
const draw = useCallback((g: Graphics) => {
|
||||||
const draw = useCallback((g: Graphics) => {
|
g.clear();
|
||||||
g.clear();
|
const coordinates = coordinatesToLocal(
|
||||||
const coordinates = coordinatesToLocal(station.latitude, station.longitude);
|
station.latitude,
|
||||||
g.circle(coordinates.x * UP_SCALE, coordinates.y * UP_SCALE, STATION_RADIUS);
|
station.longitude
|
||||||
g.fill({color: PATH_COLOR});
|
);
|
||||||
g.stroke({color: BACKGROUND_COLOR, width: STATION_OUTLINE_WIDTH});
|
g.circle(
|
||||||
}, []);
|
coordinates.x * UP_SCALE,
|
||||||
|
coordinates.y * UP_SCALE,
|
||||||
|
STATION_RADIUS
|
||||||
|
);
|
||||||
|
g.fill({ color: PATH_COLOR });
|
||||||
|
g.stroke({ color: BACKGROUND_COLOR, width: STATION_OUTLINE_WIDTH });
|
||||||
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<pixiContainer>
|
<pixiContainer>
|
||||||
<pixiGraphics draw={draw}/>
|
<pixiGraphics draw={draw} />
|
||||||
<StationLabel station={station}/>
|
<StationLabel station={station} ruLabel={ruLabel} />
|
||||||
</pixiContainer>
|
</pixiContainer>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
);
|
||||||
|
|
||||||
export function StationLabel({
|
export const StationLabel = observer(
|
||||||
station
|
({ station, ruLabel }: Readonly<StationProps>) => {
|
||||||
}: Readonly<StationProps>) {
|
const { language } = languageStore;
|
||||||
const { rotation, scale } = useTransform();
|
const { rotation, scale } = useTransform();
|
||||||
const { setStationOffset } = useMapData();
|
const { setStationOffset } = useMapData();
|
||||||
|
|
||||||
const [position, setPosition] = useState({ x: station.offset_x, y: station.offset_y });
|
const [position, setPosition] = useState({
|
||||||
const [isDragging, setIsDragging] = useState(false);
|
x: station.offset_x,
|
||||||
|
y: station.offset_y,
|
||||||
|
});
|
||||||
|
const [isDragging, setIsDragging] = useState(false);
|
||||||
const [startPosition, setStartPosition] = useState({ x: 0, y: 0 });
|
const [startPosition, setStartPosition] = useState({ x: 0, y: 0 });
|
||||||
const [startMousePosition, setStartMousePosition] = useState({ x: 0, y: 0 });
|
const [startMousePosition, setStartMousePosition] = useState({
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
});
|
||||||
|
|
||||||
if(!station) {
|
if (!station) {
|
||||||
console.error("station is null");
|
console.error("station is null");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const handlePointerDown = (e: FederatedMouseEvent) => {
|
const handlePointerDown = (e: FederatedMouseEvent) => {
|
||||||
setIsDragging(true);
|
setIsDragging(true);
|
||||||
setStartPosition({
|
setStartPosition({
|
||||||
x: position.x,
|
x: position.x,
|
||||||
y: position.y
|
y: position.y,
|
||||||
});
|
});
|
||||||
setStartMousePosition({
|
setStartMousePosition({
|
||||||
x: e.globalX,
|
x: e.globalX,
|
||||||
y: e.globalY
|
y: e.globalY,
|
||||||
});
|
});
|
||||||
|
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
};
|
};
|
||||||
const handlePointerMove = (e: FederatedMouseEvent) => {
|
const handlePointerMove = (e: FederatedMouseEvent) => {
|
||||||
if (!isDragging) return;
|
if (!isDragging) return;
|
||||||
const dx = (e.globalX - startMousePosition.x);
|
const dx = e.globalX - startMousePosition.x;
|
||||||
const dy = (e.globalY - startMousePosition.y);
|
const dy = e.globalY - startMousePosition.y;
|
||||||
const newPosition = {
|
const newPosition = {
|
||||||
x: startPosition.x + dx,
|
x: startPosition.x + dx,
|
||||||
y: startPosition.y + dy
|
y: startPosition.y + dy,
|
||||||
};
|
};
|
||||||
setPosition(newPosition);
|
setPosition(newPosition);
|
||||||
setStationOffset(station.id, newPosition.x, newPosition.y);
|
setStationOffset(station.id, newPosition.x, newPosition.y);
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
};
|
};
|
||||||
|
|
||||||
const handlePointerUp = (e: FederatedMouseEvent) => {
|
const handlePointerUp = (e: FederatedMouseEvent) => {
|
||||||
setIsDragging(false);
|
setIsDragging(false);
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
};
|
};
|
||||||
const coordinates = coordinatesToLocal(station.latitude, station.longitude);
|
const coordinates = coordinatesToLocal(station.latitude, station.longitude);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<pixiContainer
|
<pixiContainer
|
||||||
eventMode='static'
|
eventMode="static"
|
||||||
interactive
|
interactive
|
||||||
onPointerDown={handlePointerDown}
|
onPointerDown={handlePointerDown}
|
||||||
onGlobalPointerMove={handlePointerMove}
|
onGlobalPointerMove={handlePointerMove}
|
||||||
onPointerUp={handlePointerUp}
|
onPointerUp={handlePointerUp}
|
||||||
onPointerUpOutside={handlePointerUp}
|
onPointerUpOutside={handlePointerUp}
|
||||||
width={48}
|
width={48}
|
||||||
height={48}
|
height={48}
|
||||||
x={coordinates.x * UP_SCALE}
|
x={coordinates.x * UP_SCALE}
|
||||||
y={coordinates.y * UP_SCALE}
|
y={coordinates.y * UP_SCALE}
|
||||||
rotation={-rotation}
|
rotation={-rotation}
|
||||||
>
|
>
|
||||||
<pixiText
|
<pixiText
|
||||||
anchor={{x: 0.5, y: 0.5}}
|
anchor={{ x: 0.5, y: 0.5 }}
|
||||||
text={station.name}
|
text={station.name}
|
||||||
position={{
|
position={{
|
||||||
x: position.x/scale,
|
x: position.x / scale,
|
||||||
y: position.y/scale
|
y: position.y / scale,
|
||||||
}}
|
}}
|
||||||
style={{
|
style={{
|
||||||
fontSize: 48,
|
fontSize: 26,
|
||||||
fontWeight: 'bold',
|
fontWeight: "bold",
|
||||||
fill: "#ffffff"
|
fill: "#ffffff",
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</pixiContainer>
|
|
||||||
);
|
{ruLabel && (
|
||||||
}
|
<pixiText
|
||||||
|
anchor={{ x: 0.5, y: -1 }}
|
||||||
|
text={ruLabel}
|
||||||
|
position={{
|
||||||
|
x: position.x / scale,
|
||||||
|
y: position.y / scale,
|
||||||
|
}}
|
||||||
|
style={{
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: "bold",
|
||||||
|
fill: "#CCCCCC",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</pixiContainer>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
@ -22,6 +22,8 @@ import { RightSidebar } from "./RightSidebar";
|
|||||||
import { Widgets } from "./Widgets";
|
import { Widgets } from "./Widgets";
|
||||||
import { coordinatesToLocal } from "./utils";
|
import { coordinatesToLocal } from "./utils";
|
||||||
import { LanguageSwitch } from "@/components/LanguageSwitch";
|
import { LanguageSwitch } from "@/components/LanguageSwitch";
|
||||||
|
import { languageStore } from "@stores";
|
||||||
|
import { observer } from "mobx-react-lite";
|
||||||
|
|
||||||
extend({
|
extend({
|
||||||
Container,
|
Container,
|
||||||
@ -60,10 +62,12 @@ export const RoutePreview = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export function RouteMap() {
|
export const RouteMap = observer(() => {
|
||||||
|
const { language } = languageStore;
|
||||||
const { setPosition, screenToLocal, setTransform, screenCenter } =
|
const { setPosition, screenToLocal, setTransform, screenCenter } =
|
||||||
useTransform();
|
useTransform();
|
||||||
const { routeData, stationData, sightData, originalRouteData } = useMapData();
|
const { routeData, stationData, sightData, originalRouteData } = useMapData();
|
||||||
|
console.log(stationData);
|
||||||
const [points, setPoints] = useState<{ x: number; y: number }[]>([]);
|
const [points, setPoints] = useState<{ x: number; y: number }[]>([]);
|
||||||
const [isSetup, setIsSetup] = useState(false);
|
const [isSetup, setIsSetup] = useState(false);
|
||||||
|
|
||||||
@ -145,11 +149,12 @@ export function RouteMap() {
|
|||||||
<Application resizeTo={parentRef} background="#fff">
|
<Application resizeTo={parentRef} background="#fff">
|
||||||
<InfiniteCanvas>
|
<InfiniteCanvas>
|
||||||
<TravelPath points={points} />
|
<TravelPath points={points} />
|
||||||
{stationData?.map((obj) => (
|
{stationData[language].map((obj, index) => (
|
||||||
<Station station={obj} key={obj.id} />
|
<Station
|
||||||
))}
|
station={obj}
|
||||||
{sightData?.map((obj, index) => (
|
key={obj.id}
|
||||||
<Sight sight={obj} id={index} key={obj.id} />
|
ruLabel={language === "ru" ? null : stationData.ru[index].name}
|
||||||
|
/>
|
||||||
))}
|
))}
|
||||||
|
|
||||||
<pixiGraphics
|
<pixiGraphics
|
||||||
@ -164,4 +169,4 @@ export function RouteMap() {
|
|||||||
</Application>
|
</Application>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
});
|
||||||
|
@ -9,7 +9,7 @@ import {
|
|||||||
} from "@mui/material";
|
} from "@mui/material";
|
||||||
import { Edit, useAutocomplete } from "@refinedev/mui";
|
import { Edit, useAutocomplete } from "@refinedev/mui";
|
||||||
import { useForm } from "@refinedev/react-hook-form";
|
import { useForm } from "@refinedev/react-hook-form";
|
||||||
import { Controller } from "react-hook-form";
|
import { Controller, useWatch } from "react-hook-form";
|
||||||
import { useNavigate, useParams } from "react-router";
|
import { useNavigate, useParams } from "react-router";
|
||||||
import { LinkedItems } from "../../components/LinkedItems";
|
import { LinkedItems } from "../../components/LinkedItems";
|
||||||
import {
|
import {
|
||||||
@ -76,6 +76,11 @@ export const RouteEdit = observer(() => {
|
|||||||
...META_LANGUAGE(language),
|
...META_LANGUAGE(language),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const carrierId = useWatch({ control, name: "carrier_id" });
|
||||||
|
const cityId = carrierAutocompleteProps.options.find(
|
||||||
|
(option) => option.id === carrierId
|
||||||
|
)?.city_id;
|
||||||
|
|
||||||
const { autocompleteProps: governorAppealAutocompleteProps } =
|
const { autocompleteProps: governorAppealAutocompleteProps } =
|
||||||
useAutocomplete({
|
useAutocomplete({
|
||||||
resource: "article",
|
resource: "article",
|
||||||
@ -395,6 +400,7 @@ export const RouteEdit = observer(() => {
|
|||||||
fields={stationFields}
|
fields={stationFields}
|
||||||
title="остановки"
|
title="остановки"
|
||||||
dragAllowed={true}
|
dragAllowed={true}
|
||||||
|
cityId={cityId}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* <LinkedItems<VehicleItem>
|
{/* <LinkedItems<VehicleItem>
|
||||||
|
@ -433,7 +433,7 @@ export const SightCreate = observer(() => {
|
|||||||
renderInput={(params) => (
|
renderInput={(params) => (
|
||||||
<TextField
|
<TextField
|
||||||
{...params}
|
{...params}
|
||||||
label="Выберите водный знак (Левый верх)"
|
label="Выберите водяной знак (Левый верх)"
|
||||||
margin="normal"
|
margin="normal"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
error={!!errors.watermark_lu}
|
error={!!errors.watermark_lu}
|
||||||
@ -475,7 +475,7 @@ export const SightCreate = observer(() => {
|
|||||||
renderInput={(params) => (
|
renderInput={(params) => (
|
||||||
<TextField
|
<TextField
|
||||||
{...params}
|
{...params}
|
||||||
label="Выберите водный знак (Правый верх)"
|
label="Выберите водяной знак (Правый верх)"
|
||||||
margin="normal"
|
margin="normal"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
error={!!errors.watermark_rd}
|
error={!!errors.watermark_rd}
|
||||||
|
@ -606,7 +606,7 @@ export const SightEdit = observer(() => {
|
|||||||
renderInput={(params) => (
|
renderInput={(params) => (
|
||||||
<TextField
|
<TextField
|
||||||
{...params}
|
{...params}
|
||||||
label="Выберите водный знак (Левый верх)"
|
label="Выберите водяной знак (Левый верх)"
|
||||||
margin="normal"
|
margin="normal"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
error={!!errors.arms}
|
error={!!errors.arms}
|
||||||
@ -650,7 +650,7 @@ export const SightEdit = observer(() => {
|
|||||||
renderInput={(params) => (
|
renderInput={(params) => (
|
||||||
<TextField
|
<TextField
|
||||||
{...params}
|
{...params}
|
||||||
label="Выберите водный знак (Правый вверх)"
|
label="Выберите водяной знак (Правый вверх)"
|
||||||
margin="normal"
|
margin="normal"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
error={!!errors.arms}
|
error={!!errors.arms}
|
||||||
@ -1479,7 +1479,7 @@ export const SightEdit = observer(() => {
|
|||||||
renderInput={(params) => (
|
renderInput={(params) => (
|
||||||
<TextField
|
<TextField
|
||||||
{...params}
|
{...params}
|
||||||
label="Выберите водный знак (Левый верх)"
|
label="Выберите водяной знак (Левый верх)"
|
||||||
margin="normal"
|
margin="normal"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
error={!!errors.arms}
|
error={!!errors.arms}
|
||||||
@ -1523,7 +1523,7 @@ export const SightEdit = observer(() => {
|
|||||||
renderInput={(params) => (
|
renderInput={(params) => (
|
||||||
<TextField
|
<TextField
|
||||||
{...params}
|
{...params}
|
||||||
label="Выберите водный знак (Правый вверх)"
|
label="Выберите водяной знак (Правый вверх)"
|
||||||
margin="normal"
|
margin="normal"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
error={!!errors.arms}
|
error={!!errors.arms}
|
||||||
|
@ -192,6 +192,8 @@ export const StationEdit = observer(() => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const cityId = watch("city_id");
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Edit saveButtonProps={saveButtonProps}>
|
<Edit saveButtonProps={saveButtonProps}>
|
||||||
<Box
|
<Box
|
||||||
@ -353,6 +355,7 @@ export const StationEdit = observer(() => {
|
|||||||
fields={sightFields}
|
fields={sightFields}
|
||||||
title="достопримечательности"
|
title="достопримечательности"
|
||||||
dragAllowed={false}
|
dragAllowed={false}
|
||||||
|
cityId={cityId}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</Edit>
|
</Edit>
|
||||||
|
@ -3,7 +3,6 @@ import dataProvider from "@refinedev/simple-rest";
|
|||||||
import { TOKEN_KEY } from "@providers";
|
import { TOKEN_KEY } from "@providers";
|
||||||
|
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import { languageStore } from "@stores";
|
|
||||||
|
|
||||||
export const axiosInstance = axios.create({
|
export const axiosInstance = axios.create({
|
||||||
baseURL: import.meta.env.VITE_KRBL_API,
|
baseURL: import.meta.env.VITE_KRBL_API,
|
||||||
@ -23,19 +22,22 @@ axiosInstance.interceptors.request.use((config) => {
|
|||||||
return config;
|
return config;
|
||||||
});
|
});
|
||||||
|
|
||||||
export const axiosInstanceForGet = axios.create({
|
export const axiosInstanceForGet = (language: string) => {
|
||||||
baseURL: import.meta.env.VITE_KRBL_API,
|
const axiosInstance = axios.create({
|
||||||
});
|
baseURL: import.meta.env.VITE_KRBL_API,
|
||||||
|
});
|
||||||
|
axiosInstance.interceptors.request.use((config) => {
|
||||||
|
const token = localStorage.getItem(TOKEN_KEY);
|
||||||
|
if (token) {
|
||||||
|
config.headers.Authorization = `Bearer ${token}`;
|
||||||
|
}
|
||||||
|
|
||||||
axiosInstanceForGet.interceptors.request.use((config) => {
|
config.headers["X-Language"] = language;
|
||||||
const token = localStorage.getItem(TOKEN_KEY);
|
return config;
|
||||||
if (token) {
|
});
|
||||||
config.headers.Authorization = `Bearer ${token}`;
|
return axiosInstance;
|
||||||
}
|
};
|
||||||
|
|
||||||
config.headers["X-Language"] = languageStore.language;
|
|
||||||
return config;
|
|
||||||
});
|
|
||||||
const apiUrl = import.meta.env.VITE_KRBL_API;
|
const apiUrl = import.meta.env.VITE_KRBL_API;
|
||||||
|
|
||||||
export const customDataProvider = dataProvider(apiUrl, axiosInstance);
|
export const customDataProvider = dataProvider(apiUrl, axiosInstance);
|
||||||
|
Loading…
Reference in New Issue
Block a user