UNPKG

@cometchat/chat-uikit-react-native

Version:

Ready-to-use Chat UI Components for React Native

151 lines (137 loc) 3.54 kB
import { ButtonElement } from "../InteractiveElements/index"; //@ts-ignore import { CometChat } from "@cometchat/chat-sdk-react-native"; import { MessageTypeConstants } from "../../../constants/UIKitConstants"; interface TimeRange { from: string; to: string; } interface Availability { [key: string]: TimeRange[]; } interface InteractiveData { title?: string; avatarUrl?: string; goalCompletionText?: string; timezoneCode: string; bufferTime?: number; duration?: number; availability: Availability; dateRangeStart?: number; dateRangeEnd?: number; icsFileUrl?: string; scheduleElement: ButtonElement; } export class SchedulerMessage extends CometChat.InteractiveMessage { private title?: string; private avatarUrl?: string; private goalCompletionText?: string; private timezoneCode!: string; private bufferTime?: number; private duration?: number; private availability!: Availability; private dateRangeStart?: number; private dateRangeEnd?: number; private icsFileUrl?: string; private scheduleElement!: ButtonElement; constructor( receiverId: string, receiverType: string, interactiveData: InteractiveData ) { super( receiverId, receiverType, MessageTypeConstants.scheduler, interactiveData ); Object.assign(this, interactiveData); } // Setters setInteractiveData(interactiveData: InteractiveData) { super.setInteractiveData(interactiveData); } setTitle(title: string) { this.title = title; } setAvatarUrl(avatarUrl: string) { this.avatarUrl = avatarUrl; } setGoalCompletionText(goalCompletionText: string) { this.goalCompletionText = goalCompletionText; } setTimezoneCode(timezoneCode: string) { this.timezoneCode = timezoneCode; } setDuration(duration: number) { this.duration = duration; } setBufferTime(bufferTime: number) { this.bufferTime = bufferTime; } setAvailability(availability: Availability) { this.availability = availability; } setDateRangeStart(dateRangeStart: number) { this.dateRangeStart = dateRangeStart; } setDateRangeEnd(dateRangeEnd: number) { this.dateRangeEnd = dateRangeEnd; } setIcsFileUrl(icsFileUrl: string) { this.icsFileUrl = icsFileUrl; } setScheduleElement(scheduleElement: ButtonElement) { this.scheduleElement = ButtonElement.fromJSON(scheduleElement); } // ... more setters as needed // Getters getInteractiveData() { return super.getInteractiveData(); } getTitle() { return this.title; } getAvatarUrl() { return this.avatarUrl; } getGoalCompletionText() { return this.goalCompletionText; } getTimezoneCode() { return this.timezoneCode; } getDuration() { return this.duration; } getBufferTime() { return this.bufferTime; } getAvailability() { return this.availability; } getDateRangeStart() { return this.dateRangeStart; } getDateRangeEnd() { return this.dateRangeEnd; } getIcsFileUrl() { return this.icsFileUrl; } getScheduleElement() { return this.scheduleElement; } // ... more getters as needed // Method to refresh the data in the parent class static fromJSON(json: any): SchedulerMessage { let interactiveData = json.data.interactiveData; const schedulerMessage = new SchedulerMessage( json.receiverId, json.receiverType, interactiveData ); Object.assign(schedulerMessage, { ...json, ...interactiveData }); return schedulerMessage; } }