Skip to content

Commit 1a1275f

Browse files
authored
Merge pull request #70 from npapapietro/feature/upgrade-remoteEvents
[Feature] Structured remote events
2 parents ff60ff8 + 20c9c72 commit 1a1275f

File tree

8 files changed

+96
-47
lines changed

8 files changed

+96
-47
lines changed

README.md

+31-30
Large diffs are not rendered by default.

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@aldabil/react-scheduler",
3-
"version": "2.5.5",
3+
"version": "2.5.6",
44
"description": "React scheduler component based on Material-UI & date-fns",
55
"files": [
66
"*"

src/App.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ function App() {
88
return (
99
<Scheduler
1010
events={EVENTS}
11+
// getRemoteEvents={async () => {
12+
// return EVENTS;
13+
// }}
1114
// eventRenderer={(event) => <>{event.title}</>}
1215
// dialogMaxWidth="sm"
1316
// loading={loading}

src/lib/types.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ export interface FieldProps {
130130
}
131131
export type ProcessedEvent = CalendarEvent & Record<string, any>;
132132
export type EventActions = "create" | "edit";
133+
export type ViewEvent = {
134+
start: Date;
135+
end: Date;
136+
view: "day" | "week" | "month";
137+
};
133138
export type DefaultRecourse = {
134139
assignee?: string | number;
135140
text?: string;
@@ -171,8 +176,11 @@ export interface SchedulerProps {
171176
events: ProcessedEvent[];
172177
/** Custom event render method */
173178
eventRenderer?: (event: ProcessedEvent) => JSX.Element | null;
174-
/**Async function to load remote data */
179+
/**Async function to load remote data
180+
* @deprecated User `getRemoteEvents` */
175181
remoteEvents?(query: string): Promise<ProcessedEvent[] | void>;
182+
/**Async function to load remote data with current view data. */
183+
getRemoteEvents?(params: ViewEvent): Promise<ProcessedEvent[] | void>;
176184
/**Custom additional fields with it's settings */
177185
fields: FieldProps[];
178186
/**Table loading state */

src/lib/views/Day.tsx

+16-4
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const Day = () => {
4141
events,
4242
height,
4343
remoteEvents,
44+
getRemoteEvents,
4445
triggerLoading,
4546
handleState,
4647
resources,
@@ -71,8 +72,18 @@ const Day = () => {
7172
triggerLoading(true);
7273
const start = addDays(START_TIME, -1);
7374
const end = addDays(END_TIME, 1);
74-
const query = `?start=${start}&end=${end}`;
75-
const events = await remoteEvents!(query);
75+
const events = await (async () => {
76+
// Remove `remoteEvents` in future release
77+
if (remoteEvents) {
78+
return await remoteEvents(`?start=${start}&end=${end}`);
79+
} else {
80+
return await getRemoteEvents!({
81+
start,
82+
end,
83+
view: "day",
84+
});
85+
}
86+
})();
7687
if (events && events?.length) {
7788
handleState(events, "events");
7889
}
@@ -82,10 +93,11 @@ const Day = () => {
8293
triggerLoading(false);
8394
}
8495
// eslint-disable-next-line
85-
}, [selectedDate, remoteEvents]);
96+
}, [selectedDate, remoteEvents, getRemoteEvents]);
8697

8798
useEffect(() => {
88-
if (remoteEvents instanceof Function) {
99+
// Remove `remoteEvents` in future release
100+
if ((remoteEvents || getRemoteEvents) instanceof Function) {
89101
fetchEvents();
90102
}
91103
// eslint-disable-next-line

src/lib/views/Month.tsx

+16-4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const Month = () => {
3535
events,
3636
handleGotoDay,
3737
remoteEvents,
38+
getRemoteEvents,
3839
triggerLoading,
3940
handleState,
4041
resources,
@@ -64,8 +65,18 @@ const Month = () => {
6465
triggerLoading(true);
6566
const start = eachWeekStart[0];
6667
const end = addDays(eachWeekStart[eachWeekStart.length - 1], daysList.length);
67-
const query = `?start=${start}&end=${end}`;
68-
const events = await remoteEvents!(query);
68+
const events = await (async () => {
69+
// Remove `remoteEvents` in future release
70+
if (remoteEvents) {
71+
return await remoteEvents(`?start=${start}&end=${end}`);
72+
} else {
73+
return await getRemoteEvents!({
74+
start,
75+
end,
76+
view: "month",
77+
});
78+
}
79+
})();
6980
if (events && events?.length) {
7081
handleState(events, "events");
7182
}
@@ -75,10 +86,11 @@ const Month = () => {
7586
triggerLoading(false);
7687
}
7788
// eslint-disable-next-line
78-
}, [selectedDate, remoteEvents]);
89+
}, [selectedDate, remoteEvents, getRemoteEvents]);
7990

8091
useEffect(() => {
81-
if (remoteEvents instanceof Function) {
92+
// Remove `remoteEvents` in future release
93+
if ((remoteEvents || getRemoteEvents) instanceof Function) {
8294
fetchEvents();
8395
}
8496
// eslint-disable-next-line

src/lib/views/Week.tsx

+18-5
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const Week = () => {
4646
events,
4747
handleGotoDay,
4848
remoteEvents,
49+
getRemoteEvents,
4950
triggerLoading,
5051
handleState,
5152
resources,
@@ -78,8 +79,19 @@ const Week = () => {
7879
const fetchEvents = useCallback(async () => {
7980
try {
8081
triggerLoading(true);
81-
const query = `?start=${weekStart}&end=${weekEnd}`;
82-
const events = await remoteEvents!(query);
82+
83+
const events = await (async () => {
84+
// Remove `remoteEvents` in future release
85+
if (remoteEvents) {
86+
return await remoteEvents(`?start=${weekStart}&end=${weekEnd}`);
87+
} else {
88+
return await getRemoteEvents!({
89+
start: weekStart,
90+
end: weekEnd,
91+
view: "week",
92+
});
93+
}
94+
})();
8395
if (Array.isArray(events)) {
8496
handleState(events, "events");
8597
}
@@ -89,14 +101,15 @@ const Week = () => {
89101
triggerLoading(false);
90102
}
91103
// eslint-disable-next-line
92-
}, [selectedDate, remoteEvents]);
104+
}, [selectedDate, remoteEvents, getRemoteEvents]);
93105

94106
useEffect(() => {
95-
if (remoteEvents instanceof Function) {
107+
// Remove `remoteEvents` in future release
108+
if ((remoteEvents || getRemoteEvents) instanceof Function) {
96109
fetchEvents();
97110
}
98111
// eslint-disable-next-line
99-
}, [fetchEvents]);
112+
}, [selectedDate, remoteEvents, getRemoteEvents]);
100113

101114
const renderMultiDayEvents = (events: ProcessedEvent[], today: Date) => {
102115
const isFirstDayInWeek = isSameDay(weekStart, today);

0 commit comments

Comments
 (0)