/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */ export type JsonPrimitive = string | number | boolean | null ; export type JsonValue = JsonPrimitive | JsonObject | JsonArray ; export type JsonArray = JsonValue [ ] ; export type JsonObject = { [ member ] : any ; } ; export interface Slice { slice_id : number ; form_data : { viz_type : string ; } ; } export interface Dashboard { slices : Slice [ ] ; } const V1_PLUGINS = [ 'box_plot' , 'echarts_timeseries' , 'word_cloud' , 'pie' , 'table' , 'big_number' , 'big_number_total' , ] ; export const DASHBOARD_CHART_ALIAS_PREFIX = 'getChartData_' ; export function isLegacyChart ( vizType ) { return ! V1_PLUGINS . includes ( vizType ) ; } export function isLegacyResponse ( response ) { return ! response . result ; } export function getSliceIdFromRequestUrl ( url ) { const address = new URL ( url ) ; const query = address . searchParams . get ( 'form_data' ) ; return query ?. match ( /\d+/ ) ?. [ 0 ] ; } export function getChartDataRouteForSlice ( slice ) { const vizType = slice . form_data . viz_type ; const isLegacy = isLegacyChart ( vizType ) ; const formData = encodeURIComponent ( `{"slice_id":${ slice . slice_id }}` ) ; if ( isLegacy ) { return `/superset/explore_json/?*${ formData }*` ; } return `/api/v1/chart/data?*${ formData }*` ; } export function getChartAlias ( slice ) { const alias = `${ DASHBOARD_CHART_ALIAS_PREFIX }${ slice . slice_id }_${ slice . form_data . viz_type }` ; const route = getChartDataRouteForSlice ( slice ) ; cy . intercept ( 'POST' , route ) . as ( alias ) ; return `@${ alias }` ; } export function getChartAliases ( slices ) { return Array . from ( slices ) . map ( getChartAlias ) ; } export function interceptChart ( { sliceId , legacy = false , method = 'POST' , } ) { const urlBase = legacy ? '**/superset/explore_json/' : '**/api/v1/chart/data' ; let url ; if ( sliceId ) { const encodedFormData = encodeURIComponent ( JSON . stringify ( { slice_id : sliceId } ) ) ; url = `${ urlBase }?form_data=${ encodedFormData }*` ; } else { url = `${ urlBase }**` ; } return cy . intercept ( method , url ) ; }