superset tables 源码

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

superset tables 代码

文件路径:/superset-frontend/src/hooks/apiResources/tables.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 { useRef } from 'react';
import { useQuery, UseQueryOptions } from 'react-query';
import { SupersetClient } from '@superset-ui/core';

export type FetchTablesQueryParams = {
  dbId?: string | number;
  schema?: string;
  forceRefresh?: boolean;
};
export interface Table {
  label: string;
  value: string;
  type: string;
  extra?: {
    certification?: {
      certified_by: string;
      details: string;
    };
    warning_markdown?: string;
  };
}

type QueryData = {
  json: { options: Table[]; tableLength: number };
  response: Response;
};

export type Data = QueryData['json'] & {
  hasMore: boolean;
};

export function fetchTables({
  dbId,
  schema,
  forceRefresh,
}: FetchTablesQueryParams) {
  const encodedSchema = schema ? encodeURIComponent(schema) : '';
  // TODO: Would be nice to add pagination in a follow-up. Needs endpoint changes.
  const endpoint = `/superset/tables/${
    dbId ?? 'undefined'
  }/${encodedSchema}/${forceRefresh}/`;
  return SupersetClient.get({ endpoint }) as Promise<QueryData>;
}

type Params = FetchTablesQueryParams &
  Pick<UseQueryOptions, 'onSuccess' | 'onError'>;

export function useTables(options: Params) {
  const { dbId, schema, onSuccess, onError } = options || {};
  const forceRefreshRef = useRef(false);
  const params = { dbId, schema };
  const result = useQuery<QueryData, Error, Data>(
    ['tables', { dbId, schema }],
    () => fetchTables({ ...params, forceRefresh: forceRefreshRef.current }),
    {
      select: ({ json }) => ({
        ...json,
        hasMore: json.tableLength > json.options.length,
      }),
      enabled: Boolean(dbId && schema),
      onSuccess,
      onError,
      onSettled: () => {
        forceRefreshRef.current = false;
      },
    },
  );

  return {
    ...result,
    refetch: () => {
      forceRefreshRef.current = true;
      return result.refetch();
    },
  };
}

相关信息

superset 源码目录

相关文章

superset apiResources 源码

superset charts 源码

superset dashboards 源码

superset index 源码

0  赞