Merge pull request #12446 from maxunbearable/fix/5356-domain-updage-request-chain
Added domain update request chaining
This commit is contained in:
commit
ac83961c2b
@ -32,9 +32,12 @@ export class DomainService {
|
|||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public saveDomain(domain: Domain, oauth2ClientIds: Array<string>, config?: RequestConfig): Observable<Domain> {
|
public saveDomain(domain: Domain, oauth2ClientIds?: Array<string>, config?: RequestConfig): Observable<Domain> {
|
||||||
return this.http.post<Domain>(`/api/domain?oauth2ClientIds=${oauth2ClientIds.join(',')}`,
|
let url = '/api/domain';
|
||||||
domain, defaultHttpOptionsFromConfig(config));
|
if (oauth2ClientIds?.length) {
|
||||||
|
url += `?oauth2ClientIds=${oauth2ClientIds.join(',')}`;
|
||||||
|
}
|
||||||
|
return this.http.post<Domain>(url, domain, defaultHttpOptionsFromConfig(config));
|
||||||
}
|
}
|
||||||
|
|
||||||
public updateOauth2Clients(id: string, oauth2ClientIds: Array<string>, config?: RequestConfig): Observable<void> {
|
public updateOauth2Clients(id: string, oauth2ClientIds: Array<string>, config?: RequestConfig): Observable<void> {
|
||||||
|
|||||||
@ -32,7 +32,8 @@ import { DomainComponent } from '@home/pages/admin/oauth2/domains/domain.compone
|
|||||||
import { isEqual } from '@core/utils';
|
import { isEqual } from '@core/utils';
|
||||||
import { DomainTableHeaderComponent } from '@home/pages/admin/oauth2/domains/domain-table-header.component';
|
import { DomainTableHeaderComponent } from '@home/pages/admin/oauth2/domains/domain-table-header.component';
|
||||||
import { Direction } from '@app/shared/models/page/sort-order';
|
import { Direction } from '@app/shared/models/page/sort-order';
|
||||||
import { map, mergeMap, Observable, of } from 'rxjs';
|
import { map, of } from 'rxjs';
|
||||||
|
import { switchMap } from 'rxjs/operators';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class DomainTableConfigResolver {
|
export class DomainTableConfigResolver {
|
||||||
@ -84,16 +85,15 @@ export class DomainTableConfigResolver {
|
|||||||
this.config.loadEntity = id => this.domainService.getDomainInfoById(id.id);
|
this.config.loadEntity = id => this.domainService.getDomainInfoById(id.id);
|
||||||
this.config.saveEntity = (domain, originalDomain) => {
|
this.config.saveEntity = (domain, originalDomain) => {
|
||||||
const clientsIds = domain.oauth2ClientInfos as Array<string> || [];
|
const clientsIds = domain.oauth2ClientInfos as Array<string> || [];
|
||||||
let clientsTask: Observable<void>;
|
const shouldUpdateClients = domain.id && !isEqual(domain.oauth2ClientInfos?.sort(),
|
||||||
if (domain.id && !isEqual(domain.oauth2ClientInfos?.sort(),
|
originalDomain.oauth2ClientInfos?.map(info => info.id ? info.id.id : info).sort());
|
||||||
originalDomain.oauth2ClientInfos?.map(info => info.id ? info.id.id : info).sort())) {
|
|
||||||
clientsTask = this.domainService.updateOauth2Clients(domain.id.id, clientsIds);
|
|
||||||
} else {
|
|
||||||
clientsTask = of(null);
|
|
||||||
}
|
|
||||||
delete domain.oauth2ClientInfos;
|
delete domain.oauth2ClientInfos;
|
||||||
return clientsTask.pipe(
|
|
||||||
mergeMap(() => this.domainService.saveDomain(domain, domain.id ? [] : clientsIds)),
|
return this.domainService.saveDomain(domain, domain.id ? null : clientsIds).pipe(
|
||||||
|
switchMap(savedDomain => shouldUpdateClients
|
||||||
|
? this.domainService.updateOauth2Clients(domain.id.id, clientsIds).pipe(map(() => savedDomain))
|
||||||
|
: of(savedDomain)
|
||||||
|
),
|
||||||
map(savedDomain => {
|
map(savedDomain => {
|
||||||
(savedDomain as DomainInfo).oauth2ClientInfos = clientsIds;
|
(savedDomain as DomainInfo).oauth2ClientInfos = clientsIds;
|
||||||
return savedDomain;
|
return savedDomain;
|
||||||
@ -112,12 +112,9 @@ export class DomainTableConfigResolver {
|
|||||||
$event.stopPropagation();
|
$event.stopPropagation();
|
||||||
}
|
}
|
||||||
|
|
||||||
const modifiedDomain: DomainInfo = {
|
const { oauth2ClientInfos, oauth2Enabled, ...updatedDomain } = domain;
|
||||||
...domain,
|
|
||||||
oauth2Enabled: !domain.oauth2Enabled
|
|
||||||
};
|
|
||||||
|
|
||||||
this.domainService.saveDomain(modifiedDomain, domain.oauth2ClientInfos.map(clientInfo => clientInfo.id.id),
|
this.domainService.saveDomain({ ...updatedDomain, oauth2Enabled: !oauth2Enabled }, null,
|
||||||
{ignoreLoading: true})
|
{ignoreLoading: true})
|
||||||
.subscribe((result) => {
|
.subscribe((result) => {
|
||||||
domain.oauth2Enabled = result.oauth2Enabled;
|
domain.oauth2Enabled = result.oauth2Enabled;
|
||||||
@ -130,12 +127,9 @@ export class DomainTableConfigResolver {
|
|||||||
$event.stopPropagation();
|
$event.stopPropagation();
|
||||||
}
|
}
|
||||||
|
|
||||||
const modifiedDomain: DomainInfo = {
|
const { oauth2ClientInfos, propagateToEdge, ...updatedDomain } = domain;
|
||||||
...domain,
|
|
||||||
propagateToEdge: !domain.propagateToEdge
|
|
||||||
};
|
|
||||||
|
|
||||||
this.domainService.saveDomain(modifiedDomain, domain.oauth2ClientInfos.map(clientInfo => clientInfo.id.id),
|
this.domainService.saveDomain({ ...updatedDomain, propagateToEdge: !propagateToEdge }, null,
|
||||||
{ignoreLoading: true})
|
{ignoreLoading: true})
|
||||||
.subscribe((result) => {
|
.subscribe((result) => {
|
||||||
domain.propagateToEdge = result.propagateToEdge;
|
domain.propagateToEdge = result.propagateToEdge;
|
||||||
|
|||||||
@ -80,11 +80,7 @@ export interface Domain extends BaseData<DomainId>, HasTenantId {
|
|||||||
propagateToEdge: boolean;
|
propagateToEdge: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface HasOauth2Clients {
|
export interface DomainInfo extends Domain {
|
||||||
oauth2ClientInfos?: Array<OAuth2ClientInfo> | Array<string>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface DomainInfo extends Domain, HasOauth2Clients {
|
|
||||||
oauth2ClientInfos?: Array<OAuth2ClientInfo> | Array<string>;
|
oauth2ClientInfos?: Array<OAuth2ClientInfo> | Array<string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user