wavelength_app/constants/Types.ts

151 lines
2.9 KiB
TypeScript

/* Types */
// User Table in DB
export type User = {
id: number;
appleId: string | null;
email: string;
fullName: string;
pfpUrl: string | null;
pushToken: string;
createdAt: Date;
metadata?: Record<string, string>;
};
// Relationship Table in DB
export type Relationship = {
id: number;
title: string;
requestorId: number;
isAccepted: boolean;
relationshipStartDate: Date;
};
export type UserRelationship = {
id: number;
userId: number;
relationshipId: number;
};
// Mutated Data from Relationship
// & UserRelationship Tables in DB
export type RelationshipData = {
relationship: Relationship;
Partner: User;
};
// Countdown Table in DB
export type Countdown = {
id: number;
relationshipId: number;
title: string;
date: Date;
createdAt: Date;
};
// Mutated Data for Login
// API Response
export type InitialData = {
user: User;
relationshipData: RelationshipData;
countdown: Countdown;
};
// Message Table in DB
export type Message = {
id: number;
senderId: number;
receiverId: number;
text: string;
createdAt: Date;
isRead: boolean;
hasLocation: boolean;
hasMedia: boolean;
hasQuickReply: boolean;
};
// MessageMedia Table in DB
export type MessageMedia = {
id: number;
messageId: number;
mediaType:
'image' | 'video' | 'audio' | 'file';
url: string;
size?: number;
metadata?: string;
order: number;
};
// MessageLocation Table in DB
export type MessageLocation = {
id: number;
messageId: number;
latitude: number;
longitude: number;
};
// Quick Reply Table in DB
export type QuickReply = {
id: number;
messageId: number;
type: 'radio' | 'checkbox';
keepIt: boolean;
};
// Quick Reply Option Table in DB
export type QuickReplyOption = {
id: number;
quickReplyId: number;
title: string;
value: string;
};
export type GCUser = {
_id: number;
name: string;
avatar?: string;
};
export type GCQuickReplies = {
type: 'radio' | 'checkbox';
values: GCQuickReplyOptions[];
keepIt?: boolean;
};
export type GCQuickReplyOptions = {
title: string;
value: string;
};
export type GCLocation = {
latitude: number;
longitude: number;
};
export type GCMessage = {
_id: number;
text: string;
createdAt: Date;
user: GCUser;
image?: string;
video?: string;
audio?: string;
location?: GCLocation;
system?: boolean;
sent?: boolean;
received?: boolean;
pending?: boolean;
quickReplies?: GCQuickReplies;
};
export type GCState = {
messages: any[];
step: number;
loadEarlier?: boolean;
isLoadingEarlier?: boolean;
isTyping: boolean;
};
export enum ActionKind {
SEND_MESSAGE = 'SEND_MESSAGE',
LOAD_EARLIER_MESSAGES = 'LOAD_EARLIER_MESSAGES',
LOAD_EARLIER_START = 'LOAD_EARLIER_START',
SET_IS_TYPING = 'SET_IS_TYPING',
// LOAD_EARLIER_END = 'LOAD_EARLIER_END',
};
export type GCStateAction = {
type: ActionKind;
payload?: any;
};
export type NotificationMessage = {
sound?: string;
title: string;
body: string;
data?: any;
};