superset useAdvancedDataTypes 源码

  • 2022-10-20
  • 浏览 (267)

superset useAdvancedDataTypes 代码

文件路径:/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/useAdvancedDataTypes.ts

/**
 * 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.
 */
import { useCallback, useState } from 'react';
import { ensureIsArray, SupersetClient, t } from '@superset-ui/core';
import { debounce } from 'lodash';
import rison from 'rison';
import { AdvancedDataTypesState, Props } from './index';

const INITIAL_ADVANCED_DATA_TYPES_STATE: AdvancedDataTypesState = {
  parsedAdvancedDataType: '',
  advancedDataTypeOperatorList: [],
  errorMessage: '',
};

const useAdvancedDataTypes = (validHandler: (isValid: boolean) => void) => {
  const [advancedDataTypesState, setAdvancedDataTypesState] =
    useState<AdvancedDataTypesState>(INITIAL_ADVANCED_DATA_TYPES_STATE);
  const [subjectAdvancedDataType, setSubjectAdvancedDataType] = useState<
    string | undefined
  >();

  const fetchAdvancedDataTypeValueCallback = useCallback(
    (
      comp: string | string[],
      advancedDataTypesState: AdvancedDataTypesState,
      subjectAdvancedDataType?: string,
    ) => {
      const values = ensureIsArray(comp);
      if (!subjectAdvancedDataType) {
        setAdvancedDataTypesState(INITIAL_ADVANCED_DATA_TYPES_STATE);
        return;
      }
      debounce(() => {
        const queryParams = rison.encode({
          type: subjectAdvancedDataType,
          values,
        });
        const endpoint = `/api/v1/advanced_data_type/convert?q=${queryParams}`;
        SupersetClient.get({ endpoint })
          .then(({ json }) => {
            setAdvancedDataTypesState({
              parsedAdvancedDataType: json.result.display_value,
              advancedDataTypeOperatorList: json.result.valid_filter_operators,
              errorMessage: json.result.error_message,
            });
            // Changed due to removal of status field
            validHandler(!json.result.error_message);
          })
          .catch(() => {
            setAdvancedDataTypesState({
              parsedAdvancedDataType: '',
              advancedDataTypeOperatorList:
                advancedDataTypesState.advancedDataTypeOperatorList,
              errorMessage: t('Failed to retrieve advanced type'),
            });
            validHandler(false);
          });
      }, 600)();
    },
    [validHandler],
  );

  const fetchSubjectAdvancedDataType = (props: Props) => {
    const option = props.options.find(
      option =>
        ('column_name' in option &&
          option.column_name === props.adhocFilter.subject) ||
        ('optionName' in option &&
          option.optionName === props.adhocFilter.subject),
    );
    if (option && 'advanced_data_type' in option) {
      setSubjectAdvancedDataType(option.advanced_data_type);
    } else {
      props.validHandler(true);
    }
  };

  return {
    advancedDataTypesState,
    subjectAdvancedDataType,
    setAdvancedDataTypesState,
    fetchAdvancedDataTypeValueCallback,
    fetchSubjectAdvancedDataType,
  };
};

export default useAdvancedDataTypes;

相关信息

superset 源码目录

相关文章

superset caches 源码

superset changelog 源码

superset generate_email 源码

superset superset_config 源码

superset babel.config 源码

superset docusaurus.config 源码

superset sidebars 源码

superset data 源码

superset utils 源码

superset matomo 源码

0  赞