@alauda-fe/common
Version:
Alauda frontend team common codes.
64 lines • 11.6 kB
JavaScript
import { DialogService } from '@alauda/ui';
import { Injectable } from '@angular/core';
import { merge } from 'lodash-es';
import { from, throwError, catchError, switchMap } from 'rxjs';
import { TranslateService } from '../translate/public-api';
import { K8sApiService } from './k8s-api.service';
import * as i0 from "@angular/core";
import * as i1 from "./k8s-api.service";
import * as i2 from "@alauda/ui";
import * as i3 from "../translate/public-api";
export class ResourceUpdateService {
constructor(k8sApi, dialog, translate) {
this.k8sApi = k8sApi;
this.dialog = dialog;
this.translate = translate;
}
/**
* ! 只应在完整更新资源时使用,部分更新时应该使用 patch
*/
retryPutResource(params) {
const put = (res) => this.k8sApi.putResource({ ...params, resource: res });
const get = () => this.k8sApi.getResource({
type: 'type' in params && params.type,
definition: 'definition' in params && params.definition,
cluster: params.cluster,
namespace: params.resource.metadata.namespace,
name: params.resource.metadata.name,
});
return this.retryUpdate(put, get, params.resource);
}
/**
* ! 只应在完整更新资源时使用,部分更新时应该使用 patch
*/
retryPutGlobalResource(params) {
const put = (res) => this.k8sApi.putGlobalResource({ ...params, resource: res });
const get = () => this.k8sApi.getGlobalResource({
type: 'type' in params && params.type,
definition: 'definition' in params && params.definition,
namespaced: params.namespaced,
namespace: params.resource.metadata.namespace,
name: params.resource.metadata.name,
});
return this.retryUpdate(put, get, params.resource);
}
retryUpdate(put, get, resource) {
const waitUserConfirmRetry = (err) => from(this.dialog.confirm({
title: this.translate.get('resource_version_conflict'),
confirmText: this.translate.get('retry'),
cancelText: this.translate.get('cancel'),
})).pipe(switchMap(() => get().pipe(switchMap(newResource => put(merge(resource, {
metadata: {
resourceVersion: newResource.metadata.resourceVersion,
},
}))), catchError(() => this.retryUpdate(put, get, resource)))), catchError(() => throwError(() => err)));
return put(resource).pipe(catchError((err) => err.code === 409 ? waitUserConfirmRetry(err) : throwError(() => err)));
}
static { this.ɵfac = function ResourceUpdateService_Factory(t) { return new (t || ResourceUpdateService)(i0.ɵɵinject(i1.K8sApiService), i0.ɵɵinject(i2.DialogService), i0.ɵɵinject(i3.TranslateService)); }; }
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ResourceUpdateService, factory: ResourceUpdateService.ɵfac, providedIn: 'root' }); }
}
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ResourceUpdateService, [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], () => [{ type: i1.K8sApiService }, { type: i2.DialogService }, { type: i3.TranslateService }], null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtdXBkYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvYXBpL3Jlc291cmNlLXVwZGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBYyxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztBQUlsRCxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQ21CLE1BQXFCLEVBQ3JCLE1BQXFCLEVBQ3JCLFNBQTJCO1FBRjNCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUMzQyxDQUFDO0lBRUo7O09BRUc7SUFDSCxnQkFBZ0IsQ0FDZCxNQUdvRDtRQUVwRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQU0sRUFBRSxFQUFFLENBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUk7WUFDekIsSUFBSSxFQUFFLE1BQU0sSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUk7WUFDckMsVUFBVSxFQUFFLFlBQVksSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVU7WUFDdkQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1lBQzdDLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1NBQ3BDLENBQUMsQ0FBQztRQUVMLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxzQkFBc0IsQ0FDcEIsTUFHb0Q7UUFFcEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFNLEVBQUUsRUFBRSxDQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDOUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBSTtZQUMvQixJQUFJLEVBQUUsTUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSTtZQUNyQyxVQUFVLEVBQUUsWUFBWSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVTtZQUN2RCxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVM7WUFDN0MsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUk7U0FDcEMsQ0FBQyxDQUFDO1FBRUwsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxXQUFXLENBQ2pCLEdBQW1DLEVBQ25DLEdBQXdCLEVBQ3hCLFFBQVc7UUFFWCxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDM0MsSUFBSSxDQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztZQUN0RCxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ3hDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDekMsQ0FBQyxDQUNILENBQUMsSUFBSSxDQUNKLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDYixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQ1IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQ3RCLEdBQUcsQ0FDRCxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2QsUUFBUSxFQUFFO2dCQUNSLGVBQWUsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLGVBQWU7YUFDdEQ7U0FDRixDQUFDLENBQ0gsQ0FDRixFQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FDdkQsQ0FDRixFQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDeEMsQ0FBQztRQUVKLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDdkIsVUFBVSxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDekIsR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQ3JFLENBQ0YsQ0FBQztJQUNKLENBQUM7c0ZBeEZVLHFCQUFxQjt1RUFBckIscUJBQXFCLFdBQXJCLHFCQUFxQixtQkFEUixNQUFNOztpRkFDbkIscUJBQXFCO2NBRGpDLFVBQVU7ZUFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCB0aHJvd0Vycm9yLCBjYXRjaEVycm9yLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgS3ViZXJuZXRlc1Jlc291cmNlLCBTdGF0dXMgfSBmcm9tICcuLi9jb3JlL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHsgSzhzQXBpU2VydmljZSB9IGZyb20gJy4vazhzLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEFwaURlZmluaXRpb25CYXNlUGFyYW1zLCBBcGlUeXBlQmFzZVBhcmFtcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJlc291cmNlVXBkYXRlU2VydmljZTxSIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgazhzQXBpOiBLOHNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICApIHt9XG5cbiAgLyoqXG4gICAqICEg5Y+q5bqU5Zyo5a6M5pW05pu05paw6LWE5rqQ5pe25L2/55So77yM6YOo5YiG5pu05paw5pe25bqU6K+l5L2/55SoIHBhdGNoXG4gICAqL1xuICByZXRyeVB1dFJlc291cmNlPFQgZXh0ZW5kcyBLdWJlcm5ldGVzUmVzb3VyY2U+KFxuICAgIHBhcmFtczoge1xuICAgICAgY2x1c3Rlcjogc3RyaW5nO1xuICAgICAgcmVzb3VyY2U6IFQ7XG4gICAgfSAmIChBcGlEZWZpbml0aW9uQmFzZVBhcmFtcyB8IEFwaVR5cGVCYXNlUGFyYW1zPFI+KSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgcHV0ID0gKHJlczogVCkgPT5cbiAgICAgIHRoaXMuazhzQXBpLnB1dFJlc291cmNlKHsgLi4ucGFyYW1zLCByZXNvdXJjZTogcmVzIH0pO1xuICAgIGNvbnN0IGdldCA9ICgpID0+XG4gICAgICB0aGlzLms4c0FwaS5nZXRSZXNvdXJjZTxUPih7XG4gICAgICAgIHR5cGU6ICd0eXBlJyBpbiBwYXJhbXMgJiYgcGFyYW1zLnR5cGUsXG4gICAgICAgIGRlZmluaXRpb246ICdkZWZpbml0aW9uJyBpbiBwYXJhbXMgJiYgcGFyYW1zLmRlZmluaXRpb24sXG4gICAgICAgIGNsdXN0ZXI6IHBhcmFtcy5jbHVzdGVyLFxuICAgICAgICBuYW1lc3BhY2U6IHBhcmFtcy5yZXNvdXJjZS5tZXRhZGF0YS5uYW1lc3BhY2UsXG4gICAgICAgIG5hbWU6IHBhcmFtcy5yZXNvdXJjZS5tZXRhZGF0YS5uYW1lLFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5yZXRyeVVwZGF0ZShwdXQsIGdldCwgcGFyYW1zLnJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAhIOWPquW6lOWcqOWujOaVtOabtOaWsOi1hOa6kOaXtuS9v+eUqO+8jOmDqOWIhuabtOaWsOaXtuW6lOivpeS9v+eUqCBwYXRjaFxuICAgKi9cbiAgcmV0cnlQdXRHbG9iYWxSZXNvdXJjZTxUIGV4dGVuZHMgS3ViZXJuZXRlc1Jlc291cmNlPihcbiAgICBwYXJhbXM6IHtcbiAgICAgIHJlc291cmNlOiBUO1xuICAgICAgbmFtZXNwYWNlZD86IGJvb2xlYW47XG4gICAgfSAmIChBcGlEZWZpbml0aW9uQmFzZVBhcmFtcyB8IEFwaVR5cGVCYXNlUGFyYW1zPFI+KSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgcHV0ID0gKHJlczogVCkgPT5cbiAgICAgIHRoaXMuazhzQXBpLnB1dEdsb2JhbFJlc291cmNlKHsgLi4ucGFyYW1zLCByZXNvdXJjZTogcmVzIH0pO1xuICAgIGNvbnN0IGdldCA9ICgpID0+XG4gICAgICB0aGlzLms4c0FwaS5nZXRHbG9iYWxSZXNvdXJjZTxUPih7XG4gICAgICAgIHR5cGU6ICd0eXBlJyBpbiBwYXJhbXMgJiYgcGFyYW1zLnR5cGUsXG4gICAgICAgIGRlZmluaXRpb246ICdkZWZpbml0aW9uJyBpbiBwYXJhbXMgJiYgcGFyYW1zLmRlZmluaXRpb24sXG4gICAgICAgIG5hbWVzcGFjZWQ6IHBhcmFtcy5uYW1lc3BhY2VkLFxuICAgICAgICBuYW1lc3BhY2U6IHBhcmFtcy5yZXNvdXJjZS5tZXRhZGF0YS5uYW1lc3BhY2UsXG4gICAgICAgIG5hbWU6IHBhcmFtcy5yZXNvdXJjZS5tZXRhZGF0YS5uYW1lLFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5yZXRyeVVwZGF0ZShwdXQsIGdldCwgcGFyYW1zLnJlc291cmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV0cnlVcGRhdGU8VCBleHRlbmRzIEt1YmVybmV0ZXNSZXNvdXJjZT4oXG4gICAgcHV0OiAocmVzb3VyY2U6IFQpID0+IE9ic2VydmFibGU8VD4sXG4gICAgZ2V0OiAoKSA9PiBPYnNlcnZhYmxlPFQ+LFxuICAgIHJlc291cmNlOiBULFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCB3YWl0VXNlckNvbmZpcm1SZXRyeSA9IChlcnI6IFN0YXR1cykgPT5cbiAgICAgIGZyb20oXG4gICAgICAgIHRoaXMuZGlhbG9nLmNvbmZpcm0oe1xuICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5nZXQoJ3Jlc291cmNlX3ZlcnNpb25fY29uZmxpY3QnKSxcbiAgICAgICAgICBjb25maXJtVGV4dDogdGhpcy50cmFuc2xhdGUuZ2V0KCdyZXRyeScpLFxuICAgICAgICAgIGNhbmNlbFRleHQ6IHRoaXMudHJhbnNsYXRlLmdldCgnY2FuY2VsJyksXG4gICAgICAgIH0pLFxuICAgICAgKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICBnZXQoKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKG5ld1Jlc291cmNlID0+XG4gICAgICAgICAgICAgIHB1dChcbiAgICAgICAgICAgICAgICBtZXJnZShyZXNvdXJjZSwge1xuICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VWZXJzaW9uOiBuZXdSZXNvdXJjZS5tZXRhZGF0YS5yZXNvdXJjZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gdGhpcy5yZXRyeVVwZGF0ZShwdXQsIGdldCwgcmVzb3VyY2UpKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHRocm93RXJyb3IoKCkgPT4gZXJyKSksXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHB1dChyZXNvdXJjZSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogU3RhdHVzKSA9PlxuICAgICAgICBlcnIuY29kZSA9PT0gNDA5ID8gd2FpdFVzZXJDb25maXJtUmV0cnkoZXJyKSA6IHRocm93RXJyb3IoKCkgPT4gZXJyKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufVxuIl19