Skip to content

Commit 8a0ea6b

Browse files
feat: Add to Google Calendar (#5392)
Co-authored-by: Areeb Jamal <[email protected]>
1 parent 4d5dd30 commit 8a0ea6b

File tree

5 files changed

+59
-2
lines changed

5 files changed

+59
-2
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<div class="ui list basic segment m-0 pb-0">
2+
<div class="item">
3+
<i class="clock alternate outline icon pt-1"></i>
4+
<div class="content">
5+
{{#if this.isSingleDay}}
6+
{{general-date @event.startsAt @event.timezone "dddd, MMMM DD, YYYY"}}<br>{{general-date @event.startsAt @event.timezone "h:mm A"}} {{t 'to'}} {{general-date @event.endsAt @event.timezone "h:mm A"}}
7+
{{else}}
8+
{{general-date @event.startsAt @event.timezone "dddd, MMMM DD, YYYY h:mm A"}} {{t 'to'}} {{general-date @event.endsAt @event.timezone "dddd, MMMM DD, YYYY h:mm A"}}
9+
{{/if}}
10+
({{this.timezone}})
11+
<br>
12+
<a href={{this.calendarUrl}} target="_blank" rel="noreferrer nofollow">{{t 'Add to Google Calendar'}}</a>
13+
</div>
14+
</div>
15+
</div>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import Component from '@glimmer/component';
2+
import moment, { Moment } from 'moment';
3+
import Event from 'open-event-frontend/models/event';
4+
5+
interface Args {
6+
event: Event,
7+
location: string
8+
}
9+
10+
export default class AddToCalender extends Component<Args> {
11+
12+
get timezone(): string {
13+
return moment.tz(this.args.event.timezone).format('z');
14+
}
15+
16+
get startsAt(): Moment {
17+
const { event } = this.args;
18+
return moment(event.startsAt).tz(event.timezone);
19+
}
20+
21+
get endsAt(): Moment {
22+
const { event } = this.args;
23+
return moment(event.endsAt).tz(event.timezone);
24+
}
25+
26+
get isSingleDay(): boolean {
27+
return this.startsAt.isSame(this.endsAt, 'day');
28+
}
29+
30+
get calendarUrl(): string {
31+
const { event } = this.args;
32+
const startTime = this.startsAt.utc().format('YYYYMMDD[T]HHmmSS[Z]');
33+
const endTime = this.endsAt.utc().format('YYYYMMDD[T]HHmmSS[Z]');
34+
return `https://calendar.google.com/calendar/render?action=TEMPLATE&dates=${startTime}/${endTime}&text=${event.name}&location=${this.args.location}&ctz=${event.timezone}&details=${event.description}`;
35+
}
36+
37+
}

app/components/public/social-links.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Component from '@ember/component';
33
import { computed } from '@ember/object';
44

55
export default Component.extend({
6-
classNames: ['ui', 'basic', 'segment'],
6+
classNames: ['ui', 'basic', 'segment', 'm-0', 'pt-0'],
77

88
socialLinks: A(),
99

app/styles/partials/utils.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@
4949
padding: .25rem !important;
5050
}
5151

52+
.pt-1 {
53+
padding-top: .25rem !important;
54+
}
55+
5256
.p-4 {
5357
padding: 1rem !important;
5458
}

app/templates/public.hbs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@
7777
{{/each}}
7878
</div>
7979
{{/if}}
80-
<Public::SocialLinks @externalUrl={{this.model.externalEventUrl}} @socialLinks={{this.model.socialLinks}} />
80+
<Public::AddToCalender @event={{this.model}} @location={{this.headerLocation}}/>
81+
<Public::SocialLinks @externalUrl={{this.model.externalEventUrl}} @socialLinks={{this.model.socialLinks}}/>
8182
{{/if}}
8283
</div>
8384
</div>

0 commit comments

Comments
 (0)