refactor: reorganize project structure by migrating engine and geometry utilities into a structured map directory

This commit is contained in:
taDuc
2026-05-12 04:43:50 +07:00
parent 6076f098fa
commit 16fce9da7a
42 changed files with 65 additions and 65 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ import { API_ENDPOINTS } from "@/uhm/api/config";
import { requestJson } from "@/uhm/api/http";
import type { GeometriesBBoxQuery } from "@/uhm/types/api";
import type { Feature, FeatureCollection, FeatureProperties, Geometry } from "@/uhm/types/geo";
import { geoTypeCodeToTypeKey } from "@/uhm/lib/geoTypeMap";
import { geoTypeCodeToTypeKey } from "@/uhm/lib/map/geo/geoTypeMap";
export type { GeometriesBBoxQuery } from "@/uhm/types/api";
+1 -1
View File
@@ -1,7 +1,7 @@
"use client";
import { useState } from "react";
import type { UndoAction } from "@/uhm/lib/useEditorState";
import type { UndoAction } from "@/uhm/lib/editor/state/useEditorState";
import type { EditorMode } from "@/uhm/lib/editor/session/sessionTypes";
import { ProjectPanel } from "./editor/ProjectPanel";
+2 -2
View File
@@ -3,8 +3,8 @@
import { type CSSProperties, useEffect, useRef } from "react";
import "maplibre-gl/dist/maplibre-gl.css";
import { Feature, FeatureCollection, Geometry } from "@/uhm/lib/useEditorState";
import { BackgroundLayerVisibility } from "@/uhm/lib/backgroundLayers";
import { Feature, FeatureCollection, Geometry } from "@/uhm/lib/editor/state/useEditorState";
import { BackgroundLayerVisibility } from "@/uhm/lib/map/styles/backgroundLayers";
import type { EditorMode } from "@/uhm/lib/editor/session/sessionTypes";
import { useMapInstance } from "./map/useMapInstance";
@@ -5,8 +5,8 @@ import {
BACKGROUND_LAYER_OPTIONS,
BackgroundLayerId,
BackgroundLayerVisibility,
} from "@/uhm/lib/backgroundLayers";
import { GEO_TYPE_KEYS } from "@/uhm/lib/geoTypeMap";
} from "@/uhm/lib/map/styles/backgroundLayers";
import { GEO_TYPE_KEYS } from "@/uhm/lib/map/geo/geoTypeMap";
type Props = {
visibility: BackgroundLayerVisibility;
@@ -2,14 +2,14 @@
import { type CSSProperties, useMemo, useState } from "react";
import { Entity } from "@/uhm/api/entities";
import { Feature } from "@/uhm/lib/useEditorState";
import { Feature } from "@/uhm/lib/editor/state/useEditorState";
import {
EntityGeometryPreset,
EntityTypeGroupId,
EntityTypeOption,
findEntityTypeOption,
groupEntityTypeOptions,
} from "@/uhm/lib/entityTypeOptions";
} from "@/uhm/lib/utils/entityTypeOptions";
import type { GeometryMetaFormState } from "@/uhm/lib/editor/session/sessionTypes";
type Props = {
+1 -1
View File
@@ -1,4 +1,4 @@
import type { UndoAction } from "@/uhm/lib/useEditorState";
import type { UndoAction } from "@/uhm/lib/editor/state/useEditorState";
import { Panel } from "./Panel";
type UndoListPanelProps = {
+4 -4
View File
@@ -1,6 +1,6 @@
import maplibregl from "maplibre-gl";
import { BACKGROUND_LAYER_OPTIONS, BackgroundLayerVisibility } from "@/uhm/lib/backgroundLayers";
import { Feature, FeatureCollection, Geometry } from "@/uhm/lib/useEditorState";
import { BACKGROUND_LAYER_OPTIONS, BackgroundLayerVisibility } from "@/uhm/lib/map/styles/backgroundLayers";
import { Feature, FeatureCollection, Geometry } from "@/uhm/lib/editor/state/useEditorState";
import {
DEFAULT_POINT_ICON_ID,
FEATURE_STATE_SOURCE_IDS,
@@ -10,9 +10,9 @@ import {
RASTER_BASE_LAYER_ID,
RASTER_BASE_SOURCE_ID,
} from "@/uhm/lib/map/constants";
import { PATH_RENDER_BY_TYPE } from "@/uhm/lib/map/style";
import { PATH_RENDER_BY_TYPE } from "@/uhm/lib/map/styles/style";
import { getRasterTileTemplateUrl } from "@/uhm/api/tiles";
import { newId } from "@/uhm/lib/id";
import { newId } from "@/uhm/lib/utils/id";
export function applyBackgroundLayerVisibility(
map: maplibregl.Map,
+8 -8
View File
@@ -1,13 +1,13 @@
import { useEffect, useRef } from "react";
import maplibregl from "maplibre-gl";
import { initDrawing } from "@/uhm/lib/engine/drawingEngine";
import { initSelect } from "@/uhm/lib/engine/selectingEngine";
import { initPoint } from "@/uhm/lib/engine/pointEngine";
import { initLine } from "@/uhm/lib/engine/lineEngine";
import { initPath } from "@/uhm/lib/engine/pathEngine";
import { initCircle } from "@/uhm/lib/engine/circleEngine";
import { createEditingEngine } from "@/uhm/lib/engine/editingEngine";
import { Feature, FeatureCollection, Geometry } from "@/uhm/lib/useEditorState";
import { initDrawing } from "@/uhm/lib/map/engines/drawingEngine";
import { initSelect } from "@/uhm/lib/map/engines/selectingEngine";
import { initPoint } from "@/uhm/lib/map/engines/pointEngine";
import { initLine } from "@/uhm/lib/map/engines/lineEngine";
import { initPath } from "@/uhm/lib/map/engines/pathEngine";
import { initCircle } from "@/uhm/lib/map/engines/circleEngine";
import { createEditingEngine } from "@/uhm/lib/map/engines/editingEngine";
import { Feature, FeatureCollection, Geometry } from "@/uhm/lib/editor/state/useEditorState";
import { EditorMode } from "@/uhm/lib/editor/session/sessionTypes";
import { buildClientFeatureId, getSelectableLayers } from "./mapUtils";
import { MapHoverPayload } from "../Map";
+4 -4
View File
@@ -8,8 +8,8 @@ import {
POLYGON_FILL_BY_TYPE,
POLYGON_OPACITY_BY_TYPE,
POLYGON_STROKE_BY_TYPE,
} from "@/uhm/lib/map/style";
import { EMPTY_FEATURE_COLLECTION } from "@/uhm/lib/geo/constants";
} from "@/uhm/lib/map/styles/style";
import { EMPTY_FEATURE_COLLECTION } from "@/uhm/lib/map/geo/constants";
import { PATH_ARROW_ICON_ID, PATH_ARROW_SOURCE_ID } from "@/uhm/lib/map/constants";
import {
addPointSymbolLayer,
@@ -17,8 +17,8 @@ import {
buildTypeMatchExpression,
ensurePathArrowIcon,
} from "./mapUtils";
import { BackgroundLayerVisibility } from "@/uhm/lib/backgroundLayers";
import { FeatureCollection } from "@/uhm/lib/useEditorState";
import { BackgroundLayerVisibility } from "@/uhm/lib/map/styles/backgroundLayers";
import { FeatureCollection } from "@/uhm/lib/editor/state/useEditorState";
export function getBaseMapStyle(): maplibregl.StyleSpecification {
return {
+3 -3
View File
@@ -1,8 +1,8 @@
import { useCallback, useEffect, useRef } from "react";
import maplibregl from "maplibre-gl";
import { FeatureCollection } from "@/uhm/lib/useEditorState";
import { BackgroundLayerVisibility } from "@/uhm/lib/backgroundLayers";
import { EMPTY_FEATURE_COLLECTION } from "@/uhm/lib/geo/constants";
import { FeatureCollection } from "@/uhm/lib/editor/state/useEditorState";
import { BackgroundLayerVisibility } from "@/uhm/lib/map/styles/backgroundLayers";
import { EMPTY_FEATURE_COLLECTION } from "@/uhm/lib/map/geo/constants";
import { FEATURE_STATE_SOURCE_IDS, PATH_ARROW_SOURCE_ID } from "@/uhm/lib/map/constants";
import {
applyBackgroundLayerVisibility,
+1 -1
View File
@@ -1,6 +1,6 @@
"use client";
import { FIXED_TIMELINE_END_YEAR, FIXED_TIMELINE_START_YEAR, clampYearValue } from "@/uhm/lib/timeline";
import { FIXED_TIMELINE_END_YEAR, FIXED_TIMELINE_START_YEAR, clampYearValue } from "@/uhm/lib/utils/timeline";
type Props = {
year: number;
+1 -1
View File
@@ -9,7 +9,7 @@ import Button from "@/components/ui/button/Button";
import Label from "@/components/form/Label";
import type { WikiSnapshot } from "@/uhm/types/wiki";
import { newId } from "@/uhm/lib/id";
import { newId } from "@/uhm/lib/utils/id";
import type ReactQuill from "react-quill-new";
import { checkWikiSlugExists, fetchWikiBySlug, searchWikisByTitle, type Wiki } from "@/uhm/api/wikis";
@@ -2,7 +2,7 @@ import {
BACKGROUND_LAYER_OPTIONS,
BackgroundLayerVisibility,
DEFAULT_BACKGROUND_LAYER_VISIBILITY,
} from "@/uhm/lib/backgroundLayers";
} from "@/uhm/lib/map/styles/backgroundLayers";
const BACKGROUND_LAYER_VISIBILITY_STORAGE_KEY = "uhm.backgroundLayerVisibility.v1";
+1 -1
View File
@@ -1,7 +1,7 @@
import type { Entity } from "@/uhm/types/entities";
import type { Feature, FeatureProperties } from "@/uhm/types/geo";
import { normalizeFeatureEntityIds } from "@/uhm/lib/editor/snapshot/editorSnapshot";
import { newId } from "@/uhm/lib/id";
import { newId } from "@/uhm/lib/utils/id";
export function mergeEntitySearchResults(
remoteRows: Entity[],
+1 -1
View File
@@ -1,4 +1,4 @@
import type { EntityGeometryPreset } from "@/uhm/lib/entityTypeOptions";
import type { EntityGeometryPreset } from "@/uhm/lib/utils/entityTypeOptions";
export type EditorMode =
| "idle"
@@ -2,7 +2,7 @@ import { useState } from "react";
import {
BackgroundLayerVisibility,
HIDDEN_BACKGROUND_LAYER_VISIBILITY,
} from "@/uhm/lib/backgroundLayers";
} from "@/uhm/lib/map/styles/backgroundLayers";
export function useBackgroundSessionState() {
// Trạng thái bật/tắt layer nền (khởi tạo default hidden; sẽ load từ storage ở page).
@@ -1,6 +1,6 @@
import { useState } from "react";
import type { TimelineRange } from "@/uhm/lib/editor/session/sessionTypes";
import { clampYearValue } from "@/uhm/lib/timeline";
import { clampYearValue } from "@/uhm/lib/utils/timeline";
type Options = {
currentYear: number;
@@ -1,5 +1,5 @@
import { DEFAULT_ENTITY_TYPE_ID } from "@/uhm/lib/entityTypeOptions";
import { geoTypeCodeToTypeKey, typeKeyToGeoTypeCode } from "@/uhm/lib/geoTypeMap";
import { DEFAULT_ENTITY_TYPE_ID } from "@/uhm/lib/utils/entityTypeOptions";
import { geoTypeCodeToTypeKey, typeKeyToGeoTypeCode } from "@/uhm/lib/map/geo/geoTypeMap";
import type { Change } from "@/uhm/lib/editor/draft/editorTypes";
import type { EntitySnapshot } from "@/uhm/types/entities";
import type { EntitySnapshotOperation } from "@/uhm/types/entities";
@@ -1,6 +1,6 @@
import maplibregl from "maplibre-gl";
import { Geometry } from "@/uhm/lib/useEditorState";
import type { ModeGetter } from "@/uhm/lib/engine/engineTypes";
import { Geometry } from "@/uhm/lib/editor/state/useEditorState";
import type { ModeGetter } from "@/uhm/lib/map/engines/engineTypes";
const EARTH_RADIUS_METERS = 6371008.8;
const CIRCLE_SEGMENTS = 72;
@@ -1,7 +1,7 @@
import maplibregl from "maplibre-gl";
import { Geometry } from "@/uhm/lib/useEditorState";
import type { ModeGetter } from "@/uhm/lib/engine/engineTypes";
import { snapToNearestGeometry } from "@/uhm/lib/engine/snapUtils";
import { Geometry } from "@/uhm/lib/editor/state/useEditorState";
import type { ModeGetter } from "@/uhm/lib/map/engines/engineTypes";
import { snapToNearestGeometry } from "@/uhm/lib/map/engines/snapUtils";
// Khởi tạo engine vẽ polygon tự do theo chuỗi click.
export function initDrawing(
@@ -1,5 +1,5 @@
import maplibregl from "maplibre-gl";
import { Geometry } from "@/uhm/lib/useEditorState";
import { Geometry } from "@/uhm/lib/editor/state/useEditorState";
export type EditingHandle = {
id: string | number;
@@ -1,6 +1,6 @@
import maplibregl from "maplibre-gl";
import { Geometry } from "@/uhm/lib/useEditorState";
import type { ModeGetter } from "@/uhm/lib/engine/engineTypes";
import { Geometry } from "@/uhm/lib/editor/state/useEditorState";
import type { ModeGetter } from "@/uhm/lib/map/engines/engineTypes";
const EMPTY_PREVIEW: GeoJSON.FeatureCollection = {
type: "FeatureCollection",
@@ -1,6 +1,6 @@
import maplibregl from "maplibre-gl";
import { Geometry } from "@/uhm/lib/useEditorState";
import type { ModeGetter } from "@/uhm/lib/engine/engineTypes";
import { Geometry } from "@/uhm/lib/editor/state/useEditorState";
import type { ModeGetter } from "@/uhm/lib/map/engines/engineTypes";
const EMPTY_PREVIEW: GeoJSON.FeatureCollection = {
type: "FeatureCollection",
@@ -1,6 +1,6 @@
import maplibregl from "maplibre-gl";
import { Geometry } from "@/uhm/lib/useEditorState";
import type { ModeGetter } from "@/uhm/lib/engine/engineTypes";
import { Geometry } from "@/uhm/lib/editor/state/useEditorState";
import type { ModeGetter } from "@/uhm/lib/map/engines/engineTypes";
// Khởi tạo engine thêm point bằng click đơn.
export function initPoint(
@@ -1,5 +1,5 @@
import maplibregl from "maplibre-gl";
import type { ModeGetter } from "@/uhm/lib/engine/engineTypes";
import type { ModeGetter } from "@/uhm/lib/map/engines/engineTypes";
// Khởi tạo engine chọn feature và context menu edit/delete.
export function initSelect(
@@ -1,4 +1,4 @@
import rows from "@/uhm/lib/geoTypeMap.json";
import rows from "@/uhm/lib/map/geo/geoTypeMap.json";
export type GeoTypeMapRow = {
type_key: string;
+1 -1
View File
@@ -1,4 +1,4 @@
import type { EntityGeometryPreset } from "@/uhm/lib/entityTypeOptions";
import type { EntityGeometryPreset } from "@/uhm/lib/utils/entityTypeOptions";
export type Geometry =
| { type: "Point"; coordinates: [number, number] }