import { DateTime, Duration } from "luxon"; export default class Event { public summary: string; public description: string; public start: DateTime; public duration: Duration; public constructor(json_data: Record) { this.summary = json_data["summary"]; this.description = json_data["description"]; this.start = DateTime.fromISO(json_data["dtstart"]); const end = DateTime.fromISO(json_data["dtend"]); this.duration = end.diff(this.start); } public get hash(): string { const str = JSON.stringify(this); // from https://gist.github.com/jlevy/c246006675becc446360a798e2b2d781 let hash = 0; for (let i = 0; i < str.length; i++) { const char = str.charCodeAt(i); hash = (hash << 5) - hash + char; hash &= hash; // Convert to 32bit integer } return new Uint32Array([hash])[0].toString(36); } }