Skip to content

Commit

Permalink
[Vue] add utility function for pattern that issues a single AJAX requ…
Browse files Browse the repository at this point in the history
…est at a time (#19239)

* add utility function for pattern that issues a single AJAX request at a time (aborting the previous if in progress)

* make sure to pass abortController as option
  • Loading branch information
diosmosis committed May 19, 2022
1 parent f17af4c commit 742071e
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 3 deletions.
22 changes: 21 additions & 1 deletion plugins/CoreHome/vue/dist/CoreHome.umd.js
Expand Up @@ -2149,9 +2149,29 @@ var AjaxHelper_AjaxHelper = /*#__PURE__*/function () {
value: function post(params) {
var postParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
return this.fetch(params, Object.assign(Object.assign({}, options), {}, {
return AjaxHelper.fetch(params, Object.assign(Object.assign({}, options), {}, {
postParams: postParams
}));
} // eslint-disable-next-line @typescript-eslint/no-explicit-any

}, {
key: "oneAtATime",
value: function oneAtATime(method, options) {
var abortController = null;
return function (params, postParams) {
if (abortController) {
abortController.abort();
}

abortController = new AbortController();
return AjaxHelper.post(Object.assign(Object.assign({}, params), {}, {
method: method
}), postParams, Object.assign(Object.assign({}, options), {}, {
abortController: abortController
})).finally(function () {
abortController = null;
});
};
}
}]);

Expand Down
2 changes: 1 addition & 1 deletion plugins/CoreHome/vue/dist/CoreHome.umd.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 30 additions & 1 deletion plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts
Expand Up @@ -266,7 +266,36 @@ export default class AjaxHelper<T = any> { // eslint-disable-line
postParams: any = {},
options: AjaxOptions = {},
): Promise<R> {
return this.fetch<R>(params, { ...options, postParams });
return AjaxHelper.fetch<R>(params, { ...options, postParams });
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
static oneAtATime<R = any>(
method: string,
options?: AjaxOptions,
): (params: QueryParameters, postParams?: QueryParameters) => Promise<R> {
let abortController: AbortController|null = null;

return (params: QueryParameters, postParams?: QueryParameters) => {
if (abortController) {
abortController.abort();
}

abortController = new AbortController();
return AjaxHelper.post<R>(
{
...params,
method,
},
postParams,
{
...options,
abortController,
},
).finally(() => {
abortController = null;
});
};
}

constructor() {
Expand Down

0 comments on commit 742071e

Please sign in to comment.