Skip to content

Commit

Permalink
Assets: re-init autosubmit
Browse files Browse the repository at this point in the history
  • Loading branch information
f3l1x committed May 3, 2024
1 parent 094bfc4 commit 92e4434
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 10 deletions.
8 changes: 8 additions & 0 deletions assets/ajax/naja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ export class NajaAjax<C extends Naja = Naja, G extends Datagrid = Datagrid> exte
});
})

this.client.addEventListener('complete', (e) => {
return this.dispatch('complete', {
...e.detail,
params: e.detail.request,
response: e.detail.response,
});
})

return this;
}

Expand Down
33 changes: 23 additions & 10 deletions assets/plugins/features/autosubmit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,38 @@ export const AutosubmitChangeAttribute = "data-autosubmit-change";

export class AutosubmitPlugin implements DatagridPlugin {
onDatagridInit(datagrid: Datagrid): boolean {
// Auto-submit perPage
datagrid.el
.querySelectorAll<HTMLSelectElement>(`select[${AutosubmitPerPageAttribute}]`)
datagrid.ajax.addEventListener('complete', (event) => {
this.initPerPage(datagrid);
this.initChange(datagrid);
});

this.initPerPage(datagrid);
this.initChange(datagrid);

return true;
};

// Auto-submit perPage
initPerPage(datagrid: Datagrid) {
datagrid.el.querySelectorAll<HTMLSelectElement>(`select[${AutosubmitPerPageAttribute}]`)
.forEach(pageSelectEl => {
pageSelectEl.addEventListener("change", () => {
let inputEl = pageSelectEl.parentElement?.querySelector("input[type=submit]");
if (!inputEl) {
inputEl = pageSelectEl.parentElement?.querySelector("button[type=submit]");
}

console.log({ inputEl });
if (!(inputEl instanceof HTMLElement)) return;

const form = inputEl.closest('form');
console.log({ form });
form && datagrid.ajax.submitForm(form);
});
});
}

datagrid.el
.querySelectorAll<HTMLSelectElement | HTMLInputElement>(`[${AutosubmitAttribute}]`)
// Auto-submit change
initChange(datagrid: Datagrid) {
datagrid.el.querySelectorAll<HTMLSelectElement | HTMLInputElement>(`[${AutosubmitAttribute}]`)
.forEach(submitEl => {
const form = submitEl.closest("form");
if (!form) return;
Expand Down Expand Up @@ -63,7 +76,7 @@ export class AutosubmitPlugin implements DatagridPlugin {
);
}
});

return true;
};
}
}


7 changes: 7 additions & 0 deletions assets/types/ajax.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@ export interface SuccessEventDetail<P = DatagridPayload, R extends Response = Re
response: Response;
}

export interface CompleteEventDetail<P = DatagridPayload, R extends Response = Response> {
params: BaseRequestParams;
payload: Payload<P>;
response: Response;
}

export interface ErrorEventDetail<E extends Error = Error, R extends Response = Response> {
params: BaseRequestParams;
response?: Response;
Expand All @@ -71,6 +77,7 @@ export interface AjaxEventMap extends EventMap {
interact: CustomEvent<InteractEventDetail>;
snippetUpdate: CustomEvent<InteractEventDetail>;
success: CustomEvent<SuccessEventDetail>;
complete: CustomEvent<CompleteEventDetail>;
error: CustomEvent<ErrorEventDetail>;
}

Expand Down

0 comments on commit 92e4434

Please sign in to comment.