Skip to content

Commit f9cb77d

Browse files
authored
Return event variables for window api (#26)
* WIP * WIP * update readme * Update event type to CalenderEvent * 1.4.0
1 parent f26adc3 commit f9cb77d

File tree

6 files changed

+75
-30
lines changed

6 files changed

+75
-30
lines changed

README.md

+35-3
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,45 @@ The function accepts a single object parameter with the following optional prope
7070

7171
**Returns**
7272

73-
A Promise that resolves to an array of `InputTextNode[]`. Each InputTextNode represents an event fetched from Google Calendar, formatted according to the user's settings. The structure of an InputTextNode is as follows:
73+
A Promise that resolves to an array of `ExtendedInputTextNode[]`. Each ExtendedInputTextNode represents an event fetched from Google Calendar, formatted according to the user's settings.
7474

7575
```typescript
76-
interface InputTextNode {
76+
type ExtendedInputTextNode = {
7777
text: string;
7878
children?: InputTextNode[];
79-
}
79+
event?: CalenderEvent;
80+
};
81+
82+
type InputTextNode = {
83+
text: string;
84+
children?: InputTextNode[];
85+
uid?: string;
86+
heading?: number;
87+
textAlign?: TextAlignment;
88+
viewType?: ViewType;
89+
open?: boolean;
90+
props?: Record<string, unknown>;
91+
};
92+
93+
type CalenderEvent = {
94+
id: string;
95+
transparency: "transparent" | "opaque";
96+
summary: string;
97+
description?: string;
98+
htmlLink: string;
99+
hangoutLink: string;
100+
location: string;
101+
attendees?: {
102+
displayName?: string;
103+
email: string;
104+
self: boolean;
105+
responseStatus: "declined" | "accepted";
106+
}[];
107+
start: { dateTime: string };
108+
end: { dateTime: string };
109+
visibility?: "private" | "public";
110+
calendar: string;
111+
};
80112
```
81113

82114
**Example**

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": "google",
3-
"version": "1.3.0",
3+
"version": "1.4.0",
44
"description": "Connect to various Google services to your Roam graph!",
55
"main": "./build/main.js",
66
"scripts": {

src/components/CreateEventDialog.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import updateBlock from "roamjs-components/writes/updateBlock";
2525
import addYears from "date-fns/addYears";
2626
import apiPut from "roamjs-components/util/apiPut";
2727
import apiPost from "roamjs-components/util/apiPost";
28-
import type { Event } from "../utils/event";
28+
import type { CalenderEvent } from "../utils/event";
2929

3030
type Props = {
3131
calendar?: {
@@ -180,7 +180,10 @@ const CreateEventDialog = ({
180180
calendarId
181181
)}/events${edit ? `/${edit}` : ""}`,
182182
};
183-
(edit ? apiPut<Event>(args) : apiPost<Event>(args))
183+
(edit
184+
? apiPut<CalenderEvent>(args)
185+
: apiPost<CalenderEvent>(args)
186+
)
184187
.then((r) => {
185188
if (!edit) {
186189
if (blockUid)

src/services/calendar.ts

+28-18
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import addMinutes from "date-fns/addMinutes";
2929
import getAccessToken from "../utils/getAccessToken";
3030
import CreateEventDialog from "../components/CreateEventDialog";
3131
import renderOverlay from "roamjs-components/util/renderOverlay";
32-
import { blockFormatEvent, Event } from "../utils/event";
32+
import { blockFormatEvent, CalenderEvent } from "../utils/event";
3333
import getPageUidByPageTitle from "roamjs-components/queries/getPageUidByPageTitle";
3434
import getUidsFromButton from "roamjs-components/dom/getUidsFromButton";
3535
import parseNlpDate from "roamjs-components/date/parseNlpDate";
@@ -38,6 +38,10 @@ import getSubTree from "roamjs-components/util/getSubTree";
3838
import createPage from "roamjs-components/writes/createPage";
3939
import extractRef from "roamjs-components/util/extractRef";
4040

41+
type ExtendedInputTextNode = InputTextNode & {
42+
event?: CalenderEvent;
43+
};
44+
4145
const GOOGLE_COMMAND = "Import Google Calendar";
4246
export const DEFAULT_FORMAT = `{summary} ({start:hh:mm a} - {end:hh:mm a}){confLink}`;
4347

@@ -185,7 +189,7 @@ const loadGoogleCalendar = (args: OnloadArgs) => {
185189
.then((Authorization) =>
186190
Authorization
187191
? apiGet<{
188-
items: Event[];
192+
items: CalenderEvent[];
189193
}>({
190194
authorization: `Bearer ${Authorization}`,
191195
domain: "https://www.googleapis.com",
@@ -198,15 +202,15 @@ const loadGoogleCalendar = (args: OnloadArgs) => {
198202
error: "",
199203
}))
200204
: Promise.resolve({
201-
items: [] as Event[],
205+
items: [] as CalenderEvent[],
202206
calendar,
203207
error: `${UNAUTHORIZED_MESSAGE}${
204208
account ? ` for account ${account}` : ""
205209
}`,
206210
})
207211
)
208212
.catch((e) => ({
209-
items: [] as Event[],
213+
items: [] as CalenderEvent[],
210214
calendar,
211215
error: `Error for calendar ${calendar}: ${
212216
e?.error?.code === "404"
@@ -249,18 +253,24 @@ const loadGoogleCalendar = (args: OnloadArgs) => {
249253
if (events.length === 0 && errors.length === 0) {
250254
return [{ text: EMPTY_MESSAGE }];
251255
}
252-
return [
253-
...events
254-
.filter((e) => !skipFree || e.transparency !== "transparent")
255-
.filter(
256-
(e) =>
257-
!(e.attendees || []).some(
258-
(a) => a.self && a.responseStatus === "declined"
259-
)
260-
)
261-
.map((e) => blockFormatEvent(e, format)),
262-
...errors.map((e) => ({ text: e })),
263-
];
256+
const filteredEvents = events
257+
.filter((e) => !skipFree || e.transparency !== "transparent")
258+
.filter(
259+
(e) =>
260+
!(e.attendees || []).some(
261+
(a) => a.self && a.responseStatus === "declined"
262+
)
263+
);
264+
const eventInputTextNodes: ExtendedInputTextNode[] =
265+
filteredEvents.map((e) => {
266+
const inputTextNode = blockFormatEvent(e, format);
267+
return {
268+
...inputTextNode,
269+
event: e,
270+
};
271+
});
272+
const errorNodes = errors.map((e) => ({ text: e }));
273+
return [...eventInputTextNodes, ...errorNodes];
264274
});
265275
};
266276

@@ -393,7 +403,7 @@ const loadGoogleCalendar = (args: OnloadArgs) => {
393403
const text = getTextByBlockUid(blockUid);
394404
const eventId = GCAL_EVENT_REGEX.exec(text)?.[1] || "";
395405
const edit = window.atob(eventId).split(" ")[0];
396-
return apiGet<{ data: Event }>({
406+
return apiGet<{ data: CalenderEvent }>({
397407
domain: `https://www.googleapis.com`,
398408
path: `calendar/v3/calendars/${encodeURIComponent(
399409
c.calendar
@@ -454,7 +464,7 @@ const loadGoogleCalendar = (args: OnloadArgs) => {
454464
const text = getTextByBlockUid(blockUid);
455465
const eventId = GCAL_EVENT_REGEX.exec(text)?.[1] || "";
456466
const edit = window.atob(eventId).split(" ")[0];
457-
return apiGet<{ data: Event }>({
467+
return apiGet<{ data: CalenderEvent }>({
458468
domain: `https://www.googleapis.com`,
459469
path: `calendar/v3/calendars/${encodeURIComponent(
460470
c.calendar

src/utils/event.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { InputTextNode } from "roamjs-components/types/native";
44

55
const DEFAULT_DATE_FORMAT = "hh:mm a";
66

7-
export type Event = {
7+
export type CalenderEvent = {
88
id: string;
99
transparency: "transparent" | "opaque";
1010
summary: string;
@@ -32,19 +32,19 @@ const resolveDate = (d: { dateTime?: string; format?: string }) => {
3232
return format(date, d?.format || DEFAULT_DATE_FORMAT);
3333
};
3434

35-
const resolveAttendees = (e: Event, s: string) => {
35+
const resolveAttendees = (e: CalenderEvent, s: string) => {
3636
return (e.attendees || [])
3737
.map((attn) =>
3838
(s || "NAME").replace(/NAME/g, attn["displayName"] || attn["email"])
3939
)
4040
.join(", ");
4141
};
4242

43-
const resolveSummary = (e: Event) =>
43+
const resolveSummary = (e: CalenderEvent) =>
4444
e.visibility === "private" ? "busy" : e.summary || "No Summary";
4545

4646
export const blockFormatEvent = (
47-
e: Event,
47+
e: CalenderEvent,
4848
format: InputTextNode
4949
): InputTextNode => {
5050
const summary = resolveSummary(e);

0 commit comments

Comments
 (0)