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> {
 | 
			
		||||
    return this.http.post<Domain>(`/api/domain?oauth2ClientIds=${oauth2ClientIds.join(',')}`,
 | 
			
		||||
      domain, defaultHttpOptionsFromConfig(config));
 | 
			
		||||
  public saveDomain(domain: Domain, oauth2ClientIds?: Array<string>, config?: RequestConfig): Observable<Domain> {
 | 
			
		||||
    let url = '/api/domain';
 | 
			
		||||
    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> {
 | 
			
		||||
 | 
			
		||||
@ -32,7 +32,8 @@ import { DomainComponent } from '@home/pages/admin/oauth2/domains/domain.compone
 | 
			
		||||
import { isEqual } from '@core/utils';
 | 
			
		||||
import { DomainTableHeaderComponent } from '@home/pages/admin/oauth2/domains/domain-table-header.component';
 | 
			
		||||
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()
 | 
			
		||||
export class DomainTableConfigResolver  {
 | 
			
		||||
@ -84,16 +85,15 @@ export class DomainTableConfigResolver  {
 | 
			
		||||
    this.config.loadEntity = id => this.domainService.getDomainInfoById(id.id);
 | 
			
		||||
    this.config.saveEntity = (domain, originalDomain) => {
 | 
			
		||||
      const clientsIds = domain.oauth2ClientInfos as Array<string> || [];
 | 
			
		||||
      let clientsTask: Observable<void>;
 | 
			
		||||
      if (domain.id && !isEqual(domain.oauth2ClientInfos?.sort(),
 | 
			
		||||
        originalDomain.oauth2ClientInfos?.map(info => info.id ? info.id.id : info).sort())) {
 | 
			
		||||
        clientsTask = this.domainService.updateOauth2Clients(domain.id.id, clientsIds);
 | 
			
		||||
      } else {
 | 
			
		||||
        clientsTask = of(null);
 | 
			
		||||
      }
 | 
			
		||||
      const shouldUpdateClients = domain.id && !isEqual(domain.oauth2ClientInfos?.sort(),
 | 
			
		||||
        originalDomain.oauth2ClientInfos?.map(info => info.id ? info.id.id : info).sort());
 | 
			
		||||
      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 => {
 | 
			
		||||
          (savedDomain as DomainInfo).oauth2ClientInfos = clientsIds;
 | 
			
		||||
          return savedDomain;
 | 
			
		||||
@ -112,12 +112,9 @@ export class DomainTableConfigResolver  {
 | 
			
		||||
      $event.stopPropagation();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const modifiedDomain: DomainInfo = {
 | 
			
		||||
      ...domain,
 | 
			
		||||
      oauth2Enabled: !domain.oauth2Enabled
 | 
			
		||||
    };
 | 
			
		||||
    const { oauth2ClientInfos, oauth2Enabled, ...updatedDomain } = domain;
 | 
			
		||||
 | 
			
		||||
    this.domainService.saveDomain(modifiedDomain, domain.oauth2ClientInfos.map(clientInfo => clientInfo.id.id),
 | 
			
		||||
    this.domainService.saveDomain({ ...updatedDomain, oauth2Enabled: !oauth2Enabled }, null,
 | 
			
		||||
      {ignoreLoading: true})
 | 
			
		||||
      .subscribe((result) => {
 | 
			
		||||
        domain.oauth2Enabled = result.oauth2Enabled;
 | 
			
		||||
@ -130,12 +127,9 @@ export class DomainTableConfigResolver  {
 | 
			
		||||
      $event.stopPropagation();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const modifiedDomain: DomainInfo = {
 | 
			
		||||
      ...domain,
 | 
			
		||||
      propagateToEdge: !domain.propagateToEdge
 | 
			
		||||
    };
 | 
			
		||||
    const { oauth2ClientInfos, propagateToEdge, ...updatedDomain } = domain;
 | 
			
		||||
 | 
			
		||||
    this.domainService.saveDomain(modifiedDomain, domain.oauth2ClientInfos.map(clientInfo => clientInfo.id.id),
 | 
			
		||||
    this.domainService.saveDomain({ ...updatedDomain, propagateToEdge: !propagateToEdge }, null,
 | 
			
		||||
      {ignoreLoading: true})
 | 
			
		||||
      .subscribe((result) => {
 | 
			
		||||
        domain.propagateToEdge = result.propagateToEdge;
 | 
			
		||||
 | 
			
		||||
@ -80,11 +80,7 @@ export interface Domain extends BaseData<DomainId>, HasTenantId {
 | 
			
		||||
  propagateToEdge: boolean;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface HasOauth2Clients {
 | 
			
		||||
  oauth2ClientInfos?: Array<OAuth2ClientInfo> | Array<string>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface DomainInfo extends Domain, HasOauth2Clients {
 | 
			
		||||
export interface DomainInfo extends Domain {
 | 
			
		||||
  oauth2ClientInfos?: Array<OAuth2ClientInfo> | Array<string>;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user