UNPKG

@superset-ui/core

Version:
89 lines 4.2 kB
/* * 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. */ /* eslint-disable camelcase */ import { isQueryFormMetric, } from './types'; import processFilters from './processFilters'; import extractExtras from './extractExtras'; import extractQueryFields from './extractQueryFields'; import { overrideExtraFormData } from './processExtraFormData'; import { isDefined } from '../utils'; /** * Build the common segments of all query objects (e.g. the granularity field derived from * SQLAlchemy). The segments specific to each viz type is constructed in the * buildQuery method for each viz type (see `wordcloud/buildQuery.ts` for an example). * Note the type of the formData argument passed in here is the type of the formData for a * specific viz, which is a subtype of the generic formData shared among all viz types. */ export default function buildQueryObject(formData, queryFields) { const { annotation_layers = [], extra_form_data, time_range, since, until, row_limit, row_offset, order_desc, limit, timeseries_limit_metric, granularity, url_params = {}, custom_params = {}, series_columns, series_limit, series_limit_metric, ...residualFormData } = formData; const { adhoc_filters: appendAdhocFilters = [], filters: appendFilters = [], custom_form_data = {}, ...overrides } = extra_form_data || {}; const numericRowLimit = Number(row_limit); const numericRowOffset = Number(row_offset); const { metrics, columns, orderby } = extractQueryFields(residualFormData, queryFields); // collect all filters for conversion to simple filters/freeform clauses const extras = extractExtras(formData); const { filters: extraFilters } = extras; const filterFormData = { filters: [...extraFilters, ...appendFilters], adhoc_filters: [...(formData.adhoc_filters || []), ...appendAdhocFilters], }; const extrasAndfilters = processFilters({ ...formData, ...extras, ...filterFormData, }); const normalizeSeriesLimitMetric = (metric) => { if (isQueryFormMetric(metric)) { return metric; } return undefined; }; let queryObject = { // fallback `null` to `undefined` so they won't be sent to the backend // (JSON.stringify will ignore `undefined`.) time_range: time_range || undefined, since: since || undefined, until: until || undefined, granularity: granularity || undefined, ...extras, ...extrasAndfilters, columns, metrics, orderby, annotation_layers, row_limit: row_limit == null || Number.isNaN(numericRowLimit) ? undefined : numericRowLimit, row_offset: row_offset == null || Number.isNaN(numericRowOffset) ? undefined : numericRowOffset, series_columns, series_limit: series_limit ?? (isDefined(limit) ? Number(limit) : 0), series_limit_metric: normalizeSeriesLimitMetric(series_limit_metric) ?? timeseries_limit_metric ?? undefined, order_desc: typeof order_desc === 'undefined' ? true : order_desc, url_params: url_params || undefined, custom_params, }; // override extra form data used by native and cross filters queryObject = overrideExtraFormData(queryObject, overrides); return { ...queryObject, custom_form_data }; } //# sourceMappingURL=buildQueryObject.js.map