Skip to content

Commit ec96e24

Browse files
committed
Add signature overload for on and off methods of component
1 parent 9c5a2f3 commit ec96e24

File tree

6 files changed

+70
-10
lines changed

6 files changed

+70
-10
lines changed

src/Autocomplete/assets/dist/controller.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,19 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
1515
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1616
PERFORMANCE OF THIS SOFTWARE.
1717
***************************************************************************** */
18+
/* global Reflect, Promise, SuppressedError, Symbol */
19+
1820

1921
function __classPrivateFieldGet(receiver, state, kind, f) {
2022
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
2123
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
2224
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
23-
}
25+
}
26+
27+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
28+
var e = new Error(message);
29+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
30+
};
2431

2532
var _default_1_instances, _default_1_getCommonConfig, _default_1_createAutocomplete, _default_1_createAutocompleteWithHtmlContents, _default_1_createAutocompleteWithRemoteData, _default_1_stripTags, _default_1_mergeObjects, _default_1_createTomSelect;
2633
class default_1 extends Controller {

src/LiveComponent/assets/dist/Component/index.d.ts

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { BackendInterface } from '../Backend/Backend';
22
import ValueStore from './ValueStore';
3+
import BackendRequest from '../Backend/BackendRequest';
34
import { ElementDriver } from './ElementDriver';
45
import { PluginInterface } from './plugins/PluginInterface';
56
import BackendResponse from '../Backend/BackendResponse';
7+
export type ComponentHookName = 'connect' | 'disconnect' | 'request:started' | 'render:started' | 'render:finished' | 'response:error' | 'loading.state:started' | 'loading.state:finished' | 'model:set';
8+
type MaybePromise<T = void> = T | Promise<T>;
69
export default class Component {
710
readonly element: HTMLElement;
811
readonly name: string;
@@ -30,8 +33,34 @@ export default class Component {
3033
addPlugin(plugin: PluginInterface): void;
3134
connect(): void;
3235
disconnect(): void;
33-
on(hookName: string, callback: (...args: any[]) => void): void;
34-
off(hookName: string, callback: (...args: any[]) => void): void;
36+
on(hookName: 'connect', callback: (component: Component) => MaybePromise): void;
37+
on(hookName: 'disconnect', callback: (component: Component) => MaybePromise): void;
38+
on(hookName: 'request:started', callback: (requestConfig: any) => MaybePromise): void;
39+
on(hookName: 'render:started', callback: (html: string, response: BackendResponse, controls: {
40+
shouldRender: boolean;
41+
}) => MaybePromise): void;
42+
on(hookName: 'render:finished', callback: (component: Component) => MaybePromise): void;
43+
on(hookName: 'response:error', callback: (backendResponse: BackendResponse, controls: {
44+
displayError: boolean;
45+
}) => MaybePromise): void;
46+
on(hookName: 'loading.state:started', callback: (element: HTMLElement, request: BackendRequest) => MaybePromise): void;
47+
on(hookName: 'loading.state:finished', callback: (element: HTMLElement) => MaybePromise): void;
48+
on(hookName: 'model:set', callback: (model: string, value: any, component: Component) => MaybePromise): void;
49+
on(hookName: string, callback: (...args: any[]) => MaybePromise): void;
50+
off(hookName: 'connect', callback: (component: Component) => MaybePromise): void;
51+
off(hookName: 'disconnect', callback: (component: Component) => MaybePromise): void;
52+
off(hookName: 'request:started', callback: (requestConfig: any) => MaybePromise): void;
53+
off(hookName: 'render:started', callback: (html: string, response: BackendResponse, controls: {
54+
shouldRender: boolean;
55+
}) => MaybePromise): void;
56+
off(hookName: 'render:finished', callback: (component: Component) => MaybePromise): void;
57+
off(hookName: 'response:error', callback: (backendResponse: BackendResponse, controls: {
58+
displayError: boolean;
59+
}) => MaybePromise): void;
60+
off(hookName: 'loading.state:started', callback: (element: HTMLElement, request: BackendRequest) => MaybePromise): void;
61+
off(hookName: 'loading.state:finished', callback: (element: HTMLElement) => MaybePromise): void;
62+
off(hookName: 'model:set', callback: (model: string, value: any, component: Component) => MaybePromise): void;
63+
off(hookName: string, callback: (...args: any[]) => MaybePromise): void;
3564
set(model: string, value: any, reRender?: boolean, debounce?: number | boolean): Promise<BackendResponse>;
3665
getData(model: string): any;
3766
action(name: string, args?: any, debounce?: number | boolean): Promise<BackendResponse>;
@@ -55,3 +84,4 @@ export default class Component {
5584
_updateFromParentProps(props: any): void;
5685
}
5786
export declare function proxifyComponent(component: Component): Component;
87+
export {};

src/LiveComponent/assets/dist/PollingDirector.d.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/// <reference types="node" />
21
import Component from './Component';
32
export default class {
43
component: Component;
@@ -7,7 +6,7 @@ export default class {
76
actionName: string;
87
duration: number;
98
}>;
10-
pollingIntervals: NodeJS.Timer[];
9+
pollingIntervals: number[];
1110
constructor(component: Component);
1211
addPoll(actionName: string, duration: number): void;
1312
startAllPolling(): void;

src/LiveComponent/assets/dist/live_controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2625,7 +2625,7 @@ class PollingDirector {
26252625
this.component.action(actionName, {}, 0);
26262626
};
26272627
}
2628-
const timer = setInterval(() => {
2628+
const timer = window.setInterval(() => {
26292629
callback();
26302630
}, duration);
26312631
this.pollingIntervals.push(timer);

src/LiveComponent/assets/src/Component/index.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ import { findComponents, registerComponent, unregisterComponent } from '../Compo
1414

1515
declare const Turbo: any;
1616

17+
export type ComponentHookName = 'connect' | 'disconnect' | 'request:started' | 'render:started' | 'render:finished' | 'response:error' | 'loading.state:started' | 'loading.state:finished' | 'model:set';
18+
19+
type MaybePromise<T = void> = T | Promise<T>;
20+
1721
export default class Component {
1822
readonly element: HTMLElement;
1923
readonly name: string;
@@ -122,11 +126,31 @@ export default class Component {
122126
* * loading.state:finished (element: HTMLElement) => {}
123127
* * model:set (model: string, value: any, component: Component) => {}
124128
*/
125-
on(hookName: string, callback: (...args: any[]) => void): void {
129+
on(hookName: 'connect', callback: (component: Component) => MaybePromise): void;
130+
on(hookName: 'disconnect', callback: (component: Component) => MaybePromise): void;
131+
on(hookName: 'request:started', callback: (requestConfig: any) => MaybePromise): void;
132+
on(hookName: 'render:started', callback: (html: string, response: BackendResponse, controls: { shouldRender: boolean }) => MaybePromise): void;
133+
on(hookName: 'render:finished', callback: (component: Component) => MaybePromise): void;
134+
on(hookName: 'response:error', callback: (backendResponse: BackendResponse, controls: { displayError: boolean }) => MaybePromise): void;
135+
on(hookName: 'loading.state:started', callback: (element: HTMLElement, request: BackendRequest) => MaybePromise): void;
136+
on(hookName: 'loading.state:finished', callback: (element: HTMLElement) => MaybePromise): void;
137+
on(hookName: 'model:set', callback: (model: string, value: any, component: Component) => MaybePromise): void;
138+
on(hookName: string, callback: (...args: any[]) => MaybePromise): void;
139+
on(hookName: ComponentHookName, callback: (...args: any[]) => MaybePromise): void {
126140
this.hooks.register(hookName, callback);
127141
}
128142

129-
off(hookName: string, callback: (...args: any[]) => void): void {
143+
off(hookName: 'connect', callback: (component: Component) => MaybePromise): void;
144+
off(hookName: 'disconnect', callback: (component: Component) => MaybePromise): void;
145+
off(hookName: 'request:started', callback: (requestConfig: any) => MaybePromise): void;
146+
off(hookName: 'render:started', callback: (html: string, response: BackendResponse, controls: { shouldRender: boolean }) => MaybePromise): void;
147+
off(hookName: 'render:finished', callback: (component: Component) => MaybePromise): void;
148+
off(hookName: 'response:error', callback: (backendResponse: BackendResponse, controls: { displayError: boolean }) => MaybePromise): void;
149+
off(hookName: 'loading.state:started', callback: (element: HTMLElement, request: BackendRequest) => MaybePromise): void;
150+
off(hookName: 'loading.state:finished', callback: (element: HTMLElement) => MaybePromise): void;
151+
off(hookName: 'model:set', callback: (model: string, value: any, component: Component) => MaybePromise): void;
152+
off(hookName: string, callback: (...args: any[]) => MaybePromise): void;
153+
off(hookName: ComponentHookName, callback: (...args: any[]) => MaybePromise): void {
130154
this.hooks.unregister(hookName, callback);
131155
}
132156

src/LiveComponent/assets/src/PollingDirector.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export default class {
44
component: Component;
55
isPollingActive = true;
66
polls: Array<{ actionName: string; duration: number }>;
7-
pollingIntervals: NodeJS.Timer[] = [];
7+
pollingIntervals: number[] = [];
88

99
constructor(component: Component) {
1010
this.component = component;
@@ -55,7 +55,7 @@ export default class {
5555
};
5656
}
5757

58-
const timer = setInterval(() => {
58+
const timer = window.setInterval(() => {
5959
callback();
6060
}, duration);
6161
this.pollingIntervals.push(timer);

0 commit comments

Comments
 (0)