The requested changes are too big and content was truncated. Show full diff
| @@ -0,0 +1,25 | |||||
|  | 1 | import * as _WidgetBase from "dijit/_WidgetBase"; | |||
|  | 2 | import * as Stateful from "dojo/Stateful"; | |||
|  | 3 | ||||
|  | 4 | export interface IRemovable { | |||
|  | 5 | remove(): void; | |||
|  | 6 | } | |||
|  | 7 | ||||
|  | 8 | type StatefulAttrs<T> = T extends Stateful<infer A> ? A : never; | |||
|  | 9 | ||||
|  | 10 | interface WatchFn { | |||
|  | 11 | <T extends Stateful, K extends keyof StatefulAttrs<T>>( | |||
|  | 12 | target: T, | |||
|  | 13 | prop: K, | |||
|  | 14 | render: (model: StatefulAttrs<T>[K]) => any, | |||
|  | 15 | own?: (obj: IRemovable) => void | |||
|  | 16 | ); | |||
|  | 17 | <W extends _WidgetBase, K extends keyof W>( | |||
|  | 18 | target: W, | |||
|  | 19 | prop: K, | |||
|  | 20 | render: (model: W[K]) => any, | |||
|  | 21 | own?: (obj: IRemovable) => void | |||
|  | 22 | ); | |||
|  | 23 | } | |||
|  | 24 | ||||
|  | 25 | export declare const watch: WatchFn; | |||
| 1 | NO CONTENT: modified file |  | NO CONTENT: modified file | ||
| The requested commit or file is too big and content was truncated. Show full diff | |||||
| @@ -7,12 +7,12 declare module 'dijit/_Widget' { | |||||
| 7 | } |  | 7 | } | |
| 8 |  | 8 | |||
| 9 | declare module 'dijit/_WidgetBase' { |  | 9 | declare module 'dijit/_WidgetBase' { | |
| 10 | type _WidgetBase<A = any> = dijit._WidgetBase<A>; |  | 10 | type _WidgetBase<E extends { [k in keyof E]: Event } = {}> = dijit._WidgetBase<E & GlobalEventHandlersEventMap>; | |
| 11 |  | 11 | |||
| 12 | // individual _WidgetBase constructor to keep type parameters |  | 12 | // individual _WidgetBase constructor to keep type parameters | |
| 13 | interface _WidgetBaseConstructor { |  | 13 | interface _WidgetBaseConstructor { | |
| 14 | new <A = |  | 14 | new <A = {}, E extends { [k in keyof E]: Event } = {}>(params?: Partial<_WidgetBase<E> & A>, srcNodeRef?: dojo.NodeOrString): _WidgetBase<E> & dojo._base.DeclareCreatedObject; | |
| 15 | prototype: _WidgetBase; |  | 15 | prototype: _WidgetBase<any>; | |
| 16 | } |  | 16 | } | |
| 17 | const _WidgetBase: _WidgetBaseConstructor; |  | 17 | const _WidgetBase: _WidgetBaseConstructor; | |
| 18 | export = _WidgetBase; |  | 18 | export = _WidgetBase; | |
| @@ -1961,7 +1961,7 declare namespace dojo { | |||||
| 1961 | /** |  | 1961 | /** | |
| 1962 | * Watches a property for changes |  | 1962 | * Watches a property for changes | |
| 1963 | */ |  | 1963 | */ | |
| 1964 | watch(callback: |  | 1964 | watch(callback:(prop: keyof any, oldValue: any, newValue: any) => void): WatchHandle; | |
| 1965 | watch<K extends keyof T>(name: K, callback: (prop: K, oldValue: T[K], newValue: T[K]) => void): WatchHandle; |  | 1965 | watch<K extends keyof T>(name: K, callback: (prop: K, oldValue: T[K], newValue: T[K]) => void): WatchHandle; | |
| 1966 | } |  | 1966 | } | |
| 1967 |  | 1967 | |||
| @@ -724,7 +724,7 declare module 'dojo/sniff' { | |||||
| 724 | } |  | 724 | } | |
| 725 |  | 725 | |||
| 726 | declare module 'dojo/Stateful' { |  | 726 | declare module 'dojo/Stateful' { | |
| 727 | type Stateful<T = any> = dojo.Stateful< |  | 727 | type Stateful<T = any> = dojo.Stateful<T>; | |
| 728 | const Stateful: dojo.StatefulConstructor; |  | 728 | const Stateful: dojo.StatefulConstructor; | |
| 729 | export = Stateful; |  | 729 | export = Stateful; | |
| 730 | } |  | 730 | } | |
| @@ -1,4 +1,5 | |||||
| 1 | import Stateful |  | 1 | import * as Stateful from "dojo/Stateful"; | |
|  | 2 | import { StatefulAttrs, watch } from "./traits"; | |||
| 2 |  | 3 | |||
| 3 | interface ScheduleAttrs { |  | 4 | interface ScheduleAttrs { | |
| 4 | title: string; |  | 5 | title: string; | |
| @@ -18,4 +19,8 const model = new Schedule({duration: 10 | |||||
| 18 | model.get("title"); |  | 19 | model.get("title"); | |
| 19 | model.get("duration"); |  | 20 | model.get("duration"); | |
| 20 |  | 21 | |||
| 21 | model.set("duration", 12); No newline at end of file |  | 22 | model.set("duration", 12); | |
|  | 23 | ||||
|  | 24 | watch(model, "duration", v => v); | |||
|  | 25 | ||||
|  | 26 | declare const o : StatefulAttrs<Schedule>; No newline at end of file | |||
| @@ -1,5 +1,5 | |||||
| 1 | import Memory |  | 1 | import * as Memory from "dojo/store/Memory"; | |
| 2 | import Observable |  | 2 | import * as Observable from "dojo/store/Observable"; | |
| 3 |  | 3 | |||
| 4 | interface Schedule { |  | 4 | interface Schedule { | |
| 5 |  | 5 | |||
| @@ -16,13 +16,11 const observable = new Observable(store) | |||||
| 16 |  | 16 | |||
| 17 | const mem = new Memory<Schedule>(); |  | 17 | const mem = new Memory<Schedule>(); | |
| 18 |  | 18 | |||
| 19 | (async () => { |  | 19 | observable.query().observe(() => { }); | |
| 20 |  |  | 20 | store.query().forEach(() => { }); | |
| 21 | store.query().forEach(() => {}); |  | 21 | const total = await store.query().total; | |
| 22 |  |  | 22 | const result = await store.query(); | |
| 23 | const result = await store.query(); |  | |||
| 24 |  | 23 | |||
| 25 |  |  | 24 | mem.query(); | |
| 26 |  | 25 | |||
| 27 |  |  | 26 | mem.add({ duration: 10, title: "Test event" }); | |
| 28 | })(); No newline at end of file |  | |||
| @@ -1,17 +1,41 | |||||
| 1 | import _WidgetBase |  | 1 | import * as _WidgetBase from "dijit/_WidgetBase"; | |
|  | 2 | import { watch } from "./traits"; | |||
| 2 |  | 3 | |||
| 3 | interface ScheduleWidgetAttrs { |  | 4 | interface ScheduleWidgetAttrs { | |
| 4 | data: string[]; |  | 5 | data: string[]; | |
| 5 | } |  | 6 | } | |
| 6 |  | 7 | |||
| 7 | declare const w0: _WidgetBase<ScheduleWidgetAttrs>; |  | 8 | interface ScheduleWidgetEvents { | |
|  | 9 | "scheduled": Event & { | |||
|  | 10 | detail: { | |||
|  | 11 | startDate: Date, | |||
|  | 12 | endDate: Date | |||
|  | 13 | } | |||
|  | 14 | }; | |||
|  | 15 | } | |||
| 8 |  | 16 | |||
| 9 | w0.get("data"); |  | 17 | declare class ScheduleWidget extends _WidgetBase<ScheduleWidgetAttrs, ScheduleWidgetEvents> { | |
| 10 |  | ||||
| 11 | declare class ScheduleWidget extends _WidgetBase { |  | |||
| 12 | data: string[]; |  | 18 | data: string[]; | |
| 13 | } |  | 19 | } | |
| 14 |  | 20 | |||
| 15 | const w = new ScheduleWidget({title: "Year schedule", data: ["a", "b"] }); |  | 21 | const w = new ScheduleWidget({title: "Year schedule", data: ["a", "b"] }); | |
| 16 |  | 22 | |||
| 17 | w.get("data"); No newline at end of file |  | 23 | w.get("data"); | |
|  | 24 | ||||
|  | 25 | w.watch((p, o, n) => [p,o,n]); | |||
|  | 26 | ||||
|  | 27 | w.watch("data", (p, o, n) => [p,o,n]); | |||
|  | 28 | ||||
|  | 29 | watch(w, "title", v => String(v) ); | |||
|  | 30 | watch(w, "data", v => String(v) ); | |||
|  | 31 | ||||
|  | 32 | w.emit("scheduled", { detail: { startDate: new Date(), endDate: new Date()} }); | |||
|  | 33 | ||||
|  | 34 | w.emit("click", {} ); | |||
|  | 35 | ||||
|  | 36 | w.emit("click", {} ); | |||
|  | 37 | ||||
|  | 38 | w.emit("some-extra-event", {}); | |||
|  | 39 | ||||
|  | 40 | w.on("click", e => e); | |||
|  | 41 | w.on("some-extra-event", e => e); | |||
| @@ -5,6 +5,7 | |||||
| 5 | "rootDir": "ts", |  | 5 | "rootDir": "ts", | |
| 6 | "rootDirs": [ |  | 6 | "rootDirs": [ | |
| 7 | "ts", |  | 7 | "ts", | |
|  | 8 | "typings", | |||
| 8 | "../main/ts" |  | 9 | "../main/ts" | |
| 9 | ], |  | 10 | ], | |
| 10 | "types": [ |  | 11 | "types": [ | |
| @@ -12,7 +13,8 | |||||
| 12 | "../main/typings/dojo/modules", |  | 13 | "../main/typings/dojo/modules", | |
| 13 | "../main/typings/dijit/modules" |  | 14 | "../main/typings/dijit/modules" | |
| 14 | ], |  | 15 | ], | |
| 15 | "module": " |  | 16 | "module": "ESNext", | |
|  | 17 | "target": "ESNext" | |||
| 16 | }, |  | 18 | }, | |
| 17 | "include": [ |  | 19 | "include": [ | |
| 18 | "typings/**/*.ts", |  | 20 | "typings/**/*.ts", | |
        
        General Comments 0
    
    
  
  
                      You need to be logged in to leave comments.
                      Login now
                    
                