##// END OF EJS Templates
corrected tear down logic handling in observables. Added support for observable query results
corrected tear down logic handling in observables. Added support for observable query results

File last commit:

r110:1a190b3a757d v1.4.0 default
r110:1a190b3a757d v1.4.0 default
Show More
MainContext.ts
71 lines | 2.2 KiB | video/mp2t | TypeScriptLexer
cin
Working on WatchForRendition
r107 import Memory = require("dojo/store/Memory");
import Observable = require("dojo/store/Observable");
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 import { Appointment, AppointmentRole, Member } from "./Appointment";
cin
Working on WatchForRendition
r107 import { Contact } from "./Contact";
import { Uuid } from "@implab/core-amd/Uuid";
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 import { query } from "@implab/djx/observable";
import { IDestroyable } from "@implab/core-amd/interfaces";
import { delay } from "@implab/core-amd/safe";
cin
Working on WatchForRendition
r107
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 type AppointmentRecord = Omit<Appointment, "getMembers"> & { id: string };
cin
Working on WatchForRendition
r107
type ContactRecord = Contact;
type MemberRecord = Member & { appointmentId: string; };
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 const item = <T, T2>(map: (x: T) => T2) => <U extends { item: T }>({ item, ...props }: U) => ({ item: map(item), ...props });
cin
Working on WatchForRendition
r107
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 export class MainContext implements IDestroyable {
cin
linting
r109 private readonly _appointments = new Observable(new Memory<AppointmentRecord>());
cin
Working on WatchForRendition
r107
cin
linting
r109 private readonly _contacts = new Observable(new Memory<ContactRecord>());
cin
Working on WatchForRendition
r107
cin
linting
r109 private readonly _members = new Observable(new Memory<MemberRecord>());
cin
Working on WatchForRendition
r107
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 async createAppointment(title: string, startAt: Date, duration: number, members: Member[]) {
await delay(1000);
cin
Working on WatchForRendition
r107 const id = Uuid();
this._appointments.add({
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 id,
cin
Working on WatchForRendition
r107 startAt,
duration,
title
});
members.forEach(member =>
this._members.add({
appointmentId: id,
...member
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 }, { id: Uuid() }) as void
cin
Working on WatchForRendition
r107 );
}
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 queryAppointments({ dateFrom, dateTo }: { dateFrom?: Date; dateTo?: Date; } = {}) {
return query(this._appointments)(({ startAt }) =>
(!dateFrom || dateFrom <= startAt) &&
(!dateTo || startAt <= dateTo)
).map(item(this._mapAppointment));
cin
Working on WatchForRendition
r107 }
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 async addMember(appointmentId: string, member: Member) {
await delay(1000);
this._members.add({
appointmentId,
...member
});
}
cin
Working on WatchForRendition
r107
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 private readonly _mapAppointment = ({ startAt, title, duration, id }: AppointmentRecord) => ({
id,
title,
startAt,
duration,
getMembers: (role?: AppointmentRole) => this._members.query(role ? { appointmentId: id, role } : { appointmentId: id })
cin
linting
r109 });
cin
Working on WatchForRendition
r107
cin
corrected tear down logic handling in observables. Added support for observable query results
r110 destroy() {
}
cin
Working on WatchForRendition
r107 }