2121
2222import { debounce } from 'lodash-es' ;
2323import { ROUTE_PUSH } from '../route/action-types' ;
24+ import {
25+ CROSS_REGION_ALLOWED_CROSS_ORIGIN ,
26+ CROSS_REGION_CLUSTER_ORIGIN_LIST ,
27+ } from '../cross-region/getter-types' ;
2428import {
2529 DOMAIN_AUTOCOMPLETE_FETCH_DOMAIN_LIST ,
2630 DOMAIN_AUTOCOMPLETE_ON_CHANGE ,
@@ -33,33 +37,75 @@ import {
3337 DOMAIN_AUTOCOMPLETE_SET_VISITED_DOMAIN_LIST ,
3438} from './mutation-types' ;
3539import {
36- DOMAIN_AUTOCOMPLETE_VISITED_DOMAIN_LIST ,
3740 DOMAIN_AUTOCOMPLETE_SEARCH_URL ,
41+ DOMAIN_AUTOCOMPLETE_VISITED_DOMAIN_LIST ,
3842} from './getter-types' ;
3943import { DEBOUNCE_WAIT } from './constants' ;
40- import { updateVisitedDomainList } from './helpers' ;
44+ import {
45+ updateVisitedDomainList ,
46+ filterDuplicatesFromDomainList ,
47+ } from './helpers' ;
4148import { httpService } from '~services' ;
4249
4350const actions = {
4451 [ DOMAIN_AUTOCOMPLETE_FETCH_DOMAIN_LIST ] : debounce (
4552 async ( { commit, getters } ) => {
4653 const searchUrl = getters [ DOMAIN_AUTOCOMPLETE_SEARCH_URL ] ;
54+ const allowedCrossOrigin = getters [ CROSS_REGION_ALLOWED_CROSS_ORIGIN ] ;
55+ const clusterOriginList = getters [ CROSS_REGION_CLUSTER_ORIGIN_LIST ] ;
56+
57+ const fetchDomainForOrigin = async ( { clusterName = '' , origin } ) => {
58+ try {
59+ const result = await httpService . get (
60+ `${ origin } ${ searchUrl } ` ,
61+ origin && {
62+ credentials : 'include' ,
63+ mode : 'cors' ,
64+ }
65+ ) ;
4766
48- const domainList = await httpService . get ( searchUrl ) ;
67+ return result ;
68+ } catch ( error ) {
69+ console . warn (
70+ `Failed to fetch result from cluster "${ clusterName } " with origin "${ origin } " with error:` ,
71+ error
72+ ) ;
73+ }
74+ } ;
4975
50- commit ( DOMAIN_AUTOCOMPLETE_SET_IS_LOADING , false ) ;
76+ if ( allowedCrossOrigin && clusterOriginList ) {
77+ const domainListSet = await Promise . all (
78+ clusterOriginList . map ( fetchDomainForOrigin )
79+ ) ;
5180
52- commit ( DOMAIN_AUTOCOMPLETE_SET_DOMAIN_LIST , domainList ) ;
81+ const domainList = filterDuplicatesFromDomainList (
82+ domainListSet . filter ( result => ! ! result ) . flat ( )
83+ ) ;
84+
85+ commit ( DOMAIN_AUTOCOMPLETE_SET_IS_LOADING , false ) ;
86+ commit ( DOMAIN_AUTOCOMPLETE_SET_DOMAIN_LIST , domainList ) ;
87+ } else {
88+ const domainList = await fetchDomainForOrigin ( { origin : '' } ) ;
89+
90+ commit ( DOMAIN_AUTOCOMPLETE_SET_IS_LOADING , false ) ;
91+ commit ( DOMAIN_AUTOCOMPLETE_SET_DOMAIN_LIST , domainList ) ;
92+ }
5393 } ,
5494 DEBOUNCE_WAIT
5595 ) ,
56- [ DOMAIN_AUTOCOMPLETE_ON_CHANGE ] : ( { commit, dispatch, getters } , payload ) => {
96+ [ DOMAIN_AUTOCOMPLETE_ON_CHANGE ] : async (
97+ { commit, dispatch, getters } ,
98+ payload
99+ ) => {
57100 if ( ! payload ) {
58101 return ;
59102 }
60103
61104 const { value } = payload ;
62105 const visitedDomainList = getters [ DOMAIN_AUTOCOMPLETE_VISITED_DOMAIN_LIST ] ;
106+ const allowedCrossOrigin = getters [ CROSS_REGION_ALLOWED_CROSS_ORIGIN ] ;
107+ const dispatchToGlobalRoute = ( ) =>
108+ dispatch ( ROUTE_PUSH , `/domains/${ value . domainInfo . name } ` ) ;
63109
64110 const updatedVisitedDomainList = updateVisitedDomainList ( {
65111 value,
@@ -71,7 +117,18 @@ const actions = {
71117 updatedVisitedDomainList
72118 ) ;
73119
74- dispatch ( ROUTE_PUSH , `/domains/${ value . domainInfo . name } ` ) ;
120+ if (
121+ value . isGlobalDomain ||
122+ ! allowedCrossOrigin ||
123+ ! value . replicationConfiguration
124+ ) {
125+ return dispatchToGlobalRoute ( ) ;
126+ }
127+
128+ dispatch (
129+ ROUTE_PUSH ,
130+ `/domains/${ value . domainInfo . name } /${ value . replicationConfiguration . activeClusterName } `
131+ ) ;
75132 } ,
76133 [ DOMAIN_AUTOCOMPLETE_ON_SEARCH ] : async ( { commit, dispatch } , payload ) => {
77134 commit ( DOMAIN_AUTOCOMPLETE_SET_SEARCH , payload ) ;
0 commit comments