Skip to content

Commit 92e4434

Browse files
committed
Assets: re-init autosubmit
1 parent 094bfc4 commit 92e4434

File tree

3 files changed

+38
-10
lines changed

3 files changed

+38
-10
lines changed

assets/ajax/naja.ts

+8
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ export class NajaAjax<C extends Naja = Naja, G extends Datagrid = Datagrid> exte
100100
});
101101
})
102102

103+
this.client.addEventListener('complete', (e) => {
104+
return this.dispatch('complete', {
105+
...e.detail,
106+
params: e.detail.request,
107+
response: e.detail.response,
108+
});
109+
})
110+
103111
return this;
104112
}
105113

assets/plugins/features/autosubmit.ts

+23-10
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,38 @@ export const AutosubmitChangeAttribute = "data-autosubmit-change";
1010

1111
export class AutosubmitPlugin implements DatagridPlugin {
1212
onDatagridInit(datagrid: Datagrid): boolean {
13-
// Auto-submit perPage
14-
datagrid.el
15-
.querySelectorAll<HTMLSelectElement>(`select[${AutosubmitPerPageAttribute}]`)
13+
datagrid.ajax.addEventListener('complete', (event) => {
14+
this.initPerPage(datagrid);
15+
this.initChange(datagrid);
16+
});
17+
18+
this.initPerPage(datagrid);
19+
this.initChange(datagrid);
20+
21+
return true;
22+
};
23+
24+
// Auto-submit perPage
25+
initPerPage(datagrid: Datagrid) {
26+
datagrid.el.querySelectorAll<HTMLSelectElement>(`select[${AutosubmitPerPageAttribute}]`)
1627
.forEach(pageSelectEl => {
1728
pageSelectEl.addEventListener("change", () => {
1829
let inputEl = pageSelectEl.parentElement?.querySelector("input[type=submit]");
1930
if (!inputEl) {
2031
inputEl = pageSelectEl.parentElement?.querySelector("button[type=submit]");
2132
}
22-
33+
console.log({ inputEl });
2334
if (!(inputEl instanceof HTMLElement)) return;
24-
2535
const form = inputEl.closest('form');
36+
console.log({ form });
2637
form && datagrid.ajax.submitForm(form);
2738
});
2839
});
40+
}
2941

30-
datagrid.el
31-
.querySelectorAll<HTMLSelectElement | HTMLInputElement>(`[${AutosubmitAttribute}]`)
42+
// Auto-submit change
43+
initChange(datagrid: Datagrid) {
44+
datagrid.el.querySelectorAll<HTMLSelectElement | HTMLInputElement>(`[${AutosubmitAttribute}]`)
3245
.forEach(submitEl => {
3346
const form = submitEl.closest("form");
3447
if (!form) return;
@@ -63,7 +76,7 @@ export class AutosubmitPlugin implements DatagridPlugin {
6376
);
6477
}
6578
});
66-
67-
return true;
68-
};
79+
}
6980
}
81+
82+

assets/types/ajax.d.ts

+7
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ export interface SuccessEventDetail<P = DatagridPayload, R extends Response = Re
6060
response: Response;
6161
}
6262

63+
export interface CompleteEventDetail<P = DatagridPayload, R extends Response = Response> {
64+
params: BaseRequestParams;
65+
payload: Payload<P>;
66+
response: Response;
67+
}
68+
6369
export interface ErrorEventDetail<E extends Error = Error, R extends Response = Response> {
6470
params: BaseRequestParams;
6571
response?: Response;
@@ -71,6 +77,7 @@ export interface AjaxEventMap extends EventMap {
7177
interact: CustomEvent<InteractEventDetail>;
7278
snippetUpdate: CustomEvent<InteractEventDetail>;
7379
success: CustomEvent<SuccessEventDetail>;
80+
complete: CustomEvent<CompleteEventDetail>;
7481
error: CustomEvent<ErrorEventDetail>;
7582
}
7683

0 commit comments

Comments
 (0)