##// END OF EJS Templates
Added events map support to _WidgetBase, corrected attributes map support in _WidgetBase
cin -
r2:1e22cac2aaf4 v1.0.0-rc1 default
parent child
Show More

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 = any>(params?: Partial<_WidgetBase<A> & A>, srcNodeRef?: dojo.NodeOrString): _WidgetBase<A> & dojo._base.DeclareCreatedObject;
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: <K extends keyof T>(prop: K, oldValue: T[K], newValue: T[K]) => void): WatchHandle;
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<any>;
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 = require("dojo/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 = require("dojo/store/Memory");
1 import * as Memory from "dojo/store/Memory";
2 import Observable = require("dojo/store/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 observable.query().observe(() => {});
20 store.query().forEach(() => { });
21 store.query().forEach(() => {});
21 const total = await store.query().total;
22 const total = await store.query().total;
22 const result = await store.query();
23 const result = await store.query();
24
23
25 mem.query();
24 mem.query();
26
25
27 mem.add({duration: 10, title: "Test event"});
26 mem.add({ duration: 10, title: "Test event" });
28 })(); No newline at end of file
@@ -1,17 +1,41
1 import _WidgetBase = require("dijit/_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": "amd"
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