import { MultiLanguageString, Timestamp, } from './common'; import { UserId } from './user'; import { FamilyId } from './family'; import {AcademicYearId} from './school'; import {Image, ImageV2} from './fileManager'; import {FileId} from './fileManager'; import { ClassId } from './class'; export type CalendarId = string; export type EventId = CalendarId; export type CalendarType = "closedDay" | "event" | "regularHoliday" | "nationalHoliday" | "lesson"; interface CalendarBase { id: CalendarId; yid: AcademicYearId; type: CalendarType; title?: MultiLanguageString | string; color?: string; rDate: Timestamp; show: boolean; } /** * dbRef: schoolCalendar/{sid}/list/{calendarId} */ export type Calendar = CalendarBase; /** * dbRef: schoolCalendar/{sid}/record/{calendarId} */ export type CalendarRecord = Omit & {content?: MultiLanguageString | string}; /** * dbRef: schoolCalendar/{sid}/event/{calendarId} */ export interface EventRecord extends CalendarRecord { title: MultiLanguageString | string; rDate?: Timestamp; cover?: FileId; images?: Image[]; sDate: Timestamp; eDate: Timestamp; location?: string; address?: string; allDay?: boolean; } /** * dbRef: schoolCalendar/{sid}/metadata/{calendarId} */ interface MetadataBase { id: CalendarId; yid: AcademicYearId; createdBy: UserId; createdAt: Timestamp; updatedBy?: UserId; updatedAt?: Timestamp; } export type CalendarMetadata = MetadataBase; export interface EventMetadata extends MetadataBase { feedId?: string; sentToFamily?: { [fid: FamilyId]: boolean; }; sentToUser?: { [uid: UserId]: boolean; }; sentToClass?: { [id: ClassId]: boolean; }; fileIds?: { [id: FileId]: boolean; } } /** * dbRef: schoolCalendar/{sid}/all * @deprecated */ export interface CalendarRecordV2 { academicYearId: AcademicYearId; createdAt: Timestamp; createdBy: UserId; dateEnd: Timestamp; dateStart: Timestamp; eventType: CalendarType; multipleDays: boolean; notes: string; showInCalendar: boolean; title: MultiLanguageString | string; totalDays: number; updatedAt: Timestamp; updatedBy: UserId; address?: string; eventColor?: string; feedId: string; id: string; location: string; titleFurigana: string; titleRomaji: string; } /** * dbRef: schoolCalendar/{sid}/event * @deprecated */ export interface EventRecordV2 extends CalendarRecordV2 { yid: AcademicYearId; type: CalendarType; show: boolean; color?: string; content?: MultiLanguageString | string; metadata?: { feedId?: string; createdBy: string; createdAt: number; updatedBy?: string; updatedAt?: number; }; image?: Image; allDay?: boolean; eventImage?: ImageV2; } /** * dbRef: schoolCalendar/{sid}/events/{eventId} */ export interface EventRecordV3 { id: EventId; yid: AcademicYearId; type: CalendarType; show: boolean; color?: string; title?: MultiLanguageString | string; content?: MultiLanguageString | string; images?: Image[]; metadata?: { feedId?: string; createdBy: UserId; createdAt: Timestamp; updatedBy?: UserId; updatedAt?: Timestamp; }; dateStart: Timestamp; dateEnd: Timestamp; image?: Image; location?: string; address?: string; allDay?: boolean; } /** * dbRef: schoolCalendar/{sid}/metadata/{eventId} */ export interface EventMetadataV3 { id: EventId; feedId?: string; createdBy: UserId; createdAt: Timestamp; sentToFamilies: { [fid: FamilyId]: boolean; }; fileIds: { [id: FileId]: boolean; } } /** * dbRef: feed? * @deprecated */ export interface FeedEventItemV2 { id: EventId; createdBy: UserId; createdAt: Timestamp; type: string; pinToTop: boolean; titleJa: string; titleEn: string; textJa: string; textEn: string; feedId: string; dateEnd: Timestamp; dateStart: Timestamp; multipleDays: boolean; showInCalendar: boolean; color: string; totalDays: number; images: ImageV2[]; postTo: string; }