diff --git a/src/app/OlMap/Controls/LayerControl.tsx b/src/app/OlMap/Controls/LayerControl.tsx
index 8b539a5..1e49724 100644
--- a/src/app/OlMap/Controls/LayerControl.tsx
+++ b/src/app/OlMap/Controls/LayerControl.tsx
@@ -16,9 +16,16 @@ interface LayerItem {
}
const LayerControl: React.FC = () => {
- const map = useMap();
const data = useData();
- if (!data) return;
+ if (!data) return null;
+
+ return ;
+};
+
+const LayerControlContent: React.FC<{
+ data: NonNullable>;
+}> = ({ data }) => {
+ const map = useMap();
const {
deckLayer,
isContourLayerAvailable,
diff --git a/src/app/OlMap/Controls/StyleEditorPanel.tsx b/src/app/OlMap/Controls/StyleEditorPanel.tsx
index 25dfec7..a79539e 100644
--- a/src/app/OlMap/Controls/StyleEditorPanel.tsx
+++ b/src/app/OlMap/Controls/StyleEditorPanel.tsx
@@ -174,15 +174,19 @@ const hexToRgba = (hex: string) => {
: "rgba(0, 0, 0, 1)";
};
-const StyleEditorPanel: React.FC = ({
- layerStyleStates,
- setLayerStyleStates,
-}) => {
- const map = useMap();
+const StyleEditorPanel: React.FC = (props) => {
const data = useData();
if (!data) {
return Loading...
; // 或其他占位符
}
+
+ return ;
+};
+
+const StyleEditorPanelContent: React.FC<
+ StyleEditorPanelProps & { data: NonNullable> }
+> = ({ layerStyleStates, setLayerStyleStates, data }) => {
+ const map = useMap();
const {
currentJunctionCalData,
currentPipeCalData,
diff --git a/src/app/OlMap/Controls/Timeline.tsx b/src/app/OlMap/Controls/Timeline.tsx
index 0688edb..422ac3a 100644
--- a/src/app/OlMap/Controls/Timeline.tsx
+++ b/src/app/OlMap/Controls/Timeline.tsx
@@ -38,17 +38,37 @@ interface TimelineProps {
schemeType?: string;
}
-const Timeline: React.FC = ({
+const Timeline: React.FC = (props) => {
+ const data = useData();
+ if (
+ !data ||
+ data.setCurrentTime === undefined ||
+ data.currentTime === undefined ||
+ data.selectedDate === undefined ||
+ data.setSelectedDate === undefined
+ ) {
+ return Loading...
;
+ }
+
+ return ;
+};
+
+const TimelineContent: React.FC<
+ TimelineProps & { data: NonNullable> }
+> = ({
schemeDate,
timeRange,
disableDateSelection = false,
schemeName = "",
schemeType = "burst_Analysis",
+ data,
}) => {
- const data = useData();
- if (!data) {
- return Loading...
; // 或其他占位符
- }
+ const readyData = data as typeof data & {
+ currentTime: NonNullable;
+ setCurrentTime: NonNullable;
+ selectedDate: NonNullable;
+ setSelectedDate: NonNullable;
+ };
const {
currentTime,
setCurrentTime,
@@ -58,15 +78,7 @@ const Timeline: React.FC = ({
setCurrentPipeCalData,
junctionText,
pipeText,
- } = data;
- if (
- setCurrentTime === undefined ||
- currentTime === undefined ||
- selectedDate === undefined ||
- setSelectedDate === undefined
- ) {
- return Loading...
; // 或其他占位符
- }
+ } = readyData;
const { open } = useNotification();
const [isPlaying, setIsPlaying] = useState(false);
diff --git a/src/app/OlMap/Controls/Toolbar.tsx b/src/app/OlMap/Controls/Toolbar.tsx
index 73b2c2c..06cb5b1 100644
--- a/src/app/OlMap/Controls/Toolbar.tsx
+++ b/src/app/OlMap/Controls/Toolbar.tsx
@@ -27,15 +27,23 @@ interface ToolbarProps {
queryType?: string; // 可选的查询类型参数
HistoryPanel?: React.FC; // 可选的自定义历史数据面板
}
-const Toolbar: React.FC = ({
+const Toolbar: React.FC = (props) => {
+ const data = useData();
+ if (!data) return null;
+
+ return ;
+};
+
+const ToolbarContent: React.FC<
+ ToolbarProps & { data: NonNullable> }
+> = ({
hiddenButtons,
queryType,
HistoryPanel,
+ data,
}) => {
const map = useMap();
- const data = useData();
const { open } = useNotification();
- if (!data) return null;
const { currentTime, selectedDate, schemeName } = data;
const [activeTools, setActiveTools] = useState([]);
const [highlightFeatures, setHighlightFeatures] = useState([]);
diff --git a/src/components/olmap/HealthRiskAnalysis/Timeline.tsx b/src/components/olmap/HealthRiskAnalysis/Timeline.tsx
index 382a4c3..5c12d81 100644
--- a/src/components/olmap/HealthRiskAnalysis/Timeline.tsx
+++ b/src/components/olmap/HealthRiskAnalysis/Timeline.tsx
@@ -59,13 +59,21 @@ interface TimelineProps {
schemeName?: string;
}
-const Timeline: React.FC = ({
- disableDateSelection = false,
-}) => {
+const Timeline: React.FC = (props) => {
const data = useData();
if (!data) {
- return Loading...
; // 或其他占位符
+ return Loading...
;
}
+
+ return ;
+};
+
+const TimelineContent: React.FC<
+ TimelineProps & { data: NonNullable> }
+> = ({
+ disableDateSelection = false,
+ data,
+}) => {
const { open } = useNotification();
const {
predictionResults,