Skip to content

Commit 2eaaf23

Browse files
committed
refactor: enhance data fetching logic and memoization in ObjectCalendar component
1 parent 9d9f7f9 commit 2eaaf23

File tree

1 file changed

+30
-9
lines changed

1 file changed

+30
-9
lines changed

packages/plugin-calendar/src/ObjectCalendar.tsx

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -139,19 +139,34 @@ export const ObjectCalendar: React.FC<ObjectCalendarProps> = ({
139139
const [currentDate, setCurrentDate] = useState(new Date());
140140
const [view, setView] = useState<'month' | 'week' | 'day'>('month');
141141

142-
const dataConfig = useMemo(() => getDataConfig(schema), [schema]);
143-
const calendarConfig = useMemo(() => getCalendarConfig(schema), [schema]);
142+
const dataConfig = useMemo(() => getDataConfig(schema), [
143+
(schema as any).data,
144+
(schema as any).staticData,
145+
schema.objectName,
146+
]);
147+
const calendarConfig = useMemo(() => getCalendarConfig(schema), [
148+
schema.filter,
149+
(schema as any).calendar,
150+
(schema as any).dateField,
151+
(schema as any).endField,
152+
(schema as any).titleField,
153+
(schema as any).colorField
154+
]);
144155
const hasInlineData = dataConfig?.provider === 'value';
145156

146157
// Fetch data based on provider
147158
useEffect(() => {
159+
let isMounted = true;
148160
const fetchData = async () => {
149161
try {
162+
if (!isMounted) return;
150163
setLoading(true);
151164

152165
if (hasInlineData && dataConfig?.provider === 'value') {
153-
setData(dataConfig.items as any[]);
154-
setLoading(false);
166+
if (isMounted) {
167+
setData(dataConfig.items as any[]);
168+
setLoading(false);
169+
}
155170
return;
156171
}
157172

@@ -178,20 +193,26 @@ export const ObjectCalendar: React.FC<ObjectCalendarProps> = ({
178193
}
179194
}
180195

181-
setData(items);
196+
if (isMounted) {
197+
setData(items);
198+
}
182199
} else if (dataConfig?.provider === 'api') {
183200
console.warn('API provider not yet implemented for ObjectCalendar');
184-
setData([]);
201+
if (isMounted) setData([]);
185202
}
186203

187-
setLoading(false);
204+
if (isMounted) setLoading(false);
188205
} catch (err) {
189-
setError(err as Error);
190-
setLoading(false);
206+
console.error('[ObjectCalendar] Error fetching data:', err);
207+
if (isMounted) {
208+
setError(err as Error);
209+
setLoading(false);
210+
}
191211
}
192212
};
193213

194214
fetchData();
215+
return () => { isMounted = false; };
195216
}, [dataConfig, dataSource, hasInlineData, schema.filter, schema.sort]);
196217

197218
// Fetch object schema for field metadata

0 commit comments

Comments
 (0)