Skip to content

Commit 4230496

Browse files
committed
refactor: optimize data handling and memoization in ObjectCalendar component
1 parent b94fe25 commit 4230496

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

apps/console/src/__tests__/PluginsIntegration.test.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ describe('Plugins Integration Test', () => {
7171
};
7272

7373
const mockData = [
74-
{ id: '1', name: 'Task 1', status: 'new', due_date: '2026-02-15' },
75-
{ id: '2', name: 'Task 2', status: 'working', due_date: '2026-02-16' },
76-
{ id: '3', name: 'Task 3', status: 'done', due_date: '2026-02-17' }
74+
{ id: '1', name: 'Task 1', status: 'new', due_date: '2026-02-15T12:00:00' },
75+
{ id: '2', name: 'Task 2', status: 'working', due_date: '2026-02-16T12:00:00' },
76+
{ id: '3', name: 'Task 3', status: 'done', due_date: '2026-02-17T12:00:00' }
7777
];
7878

7979
const mockDataSource = {
@@ -124,7 +124,7 @@ describe('Plugins Integration Test', () => {
124124

125125
// Wait for schema fetch and rendering
126126
await waitFor(() => {
127-
expect(mockDataSource.getObjectSchema).toHaveBeenCalledWith('todo_task');
127+
expect(mockDataSource.getObject).toHaveBeenCalledWith('todo_task');
128128
});
129129

130130
// Expect columns to be generated from schema options

packages/plugin-calendar/src/ObjectCalendar.tsx

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,16 +121,15 @@ export const ObjectCalendar: React.FC<ObjectCalendarProps> = ({
121121
onEventClick,
122122
onDateClick,
123123
}) => {
124-
console.log('ObjectCalendar Schema:', JSON.stringify(schema));
125124
const [data, setData] = useState<any[]>([]);
126125
const [loading, setLoading] = useState(true);
127126
const [error, setError] = useState<Error | null>(null);
128127
const [objectSchema, setObjectSchema] = useState<any>(null);
129128
const [currentDate, setCurrentDate] = useState(new Date());
130129
const [view, setView] = useState<'month' | 'week' | 'day'>('month');
131130

132-
const dataConfig = getDataConfig(schema);
133-
const calendarConfig = getCalendarConfig(schema);
131+
const dataConfig = useMemo(() => getDataConfig(schema), [schema]);
132+
const calendarConfig = useMemo(() => getCalendarConfig(schema), [schema]);
134133
const hasInlineData = dataConfig?.provider === 'value';
135134

136135
// Fetch data based on provider
@@ -155,7 +154,20 @@ export const ObjectCalendar: React.FC<ObjectCalendarProps> = ({
155154
$filter: schema.filter,
156155
$orderby: convertSortToQueryParams(schema.sort),
157156
});
158-
setData(result?.data || []);
157+
158+
let items: any[] = [];
159+
160+
if (Array.isArray(result)) {
161+
items = result;
162+
} else if (result && typeof result === 'object') {
163+
if (Array.isArray((result as any).data)) {
164+
items = (result as any).data;
165+
} else if (Array.isArray((result as any).value)) {
166+
items = (result as any).value;
167+
}
168+
}
169+
170+
setData(items);
159171
} else if (dataConfig?.provider === 'api') {
160172
console.warn('API provider not yet implemented for ObjectCalendar');
161173
setData([]);
@@ -248,7 +260,14 @@ export const ObjectCalendar: React.FC<ObjectCalendarProps> = ({
248260
return events.filter(event => {
249261
const eventStart = new Date(event.start);
250262
eventStart.setHours(0, 0, 0, 0);
251-
const eventEnd = event.end ? new Date(event.end) : eventStart;
263+
264+
let eventEnd: Date;
265+
if (event.end) {
266+
eventEnd = new Date(event.end);
267+
} else {
268+
eventEnd = new Date(eventStart);
269+
}
270+
252271
eventEnd.setHours(23, 59, 59, 999);
253272

254273
const checkDay = new Date(day);

0 commit comments

Comments
 (0)