| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- /*
- * 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 {
- SuperChart,
- ChartDataProvider,
- SupersetClient,
- } from '@superset-ui/core';
- import Expandable from './Expandable';
- import VerifyCORS, { renderError } from './VerifyCORS';
- export default function createQueryStory({
- choices,
- }: {
- choices: {
- [key: string]: {
- chartType: string;
- formData: {
- [key: string]: any;
- };
- };
- };
- }) {
- const keys = Object.keys(choices);
- const story = (
- host: string,
- mode: string | number,
- width: number,
- height: number,
- formData: any,
- ) => {
- const { chartType } = choices[mode];
- return (
- <div style={{ margin: 16 }}>
- <VerifyCORS host={host}>
- {() => (
- <ChartDataProvider
- client={SupersetClient}
- formData={JSON.parse(formData.replace(/"/g, '"'))}
- >
- {({ loading, payload, error }) => {
- if (loading) return <div>Loading!</div>;
- if (error) return renderError(error);
- if (payload)
- return (
- <>
- <SuperChart
- chartType={chartType}
- width={width}
- height={height}
- formData={payload.formData}
- // @TODO fix typing
- // all vis's now expect objects but api/v1/ returns an array
- queriesData={payload.queriesData}
- />
- <br />
- <Expandable expandableWhat="payload">
- <pre style={{ fontSize: 11 }}>
- {JSON.stringify(payload, null, 2)}
- </pre>
- </Expandable>
- </>
- );
- return null;
- }}
- </ChartDataProvider>
- )}
- </VerifyCORS>
- </div>
- );
- };
- story.args = {
- host: 'localhost:8088',
- mode: keys[0],
- width: '400',
- height: '400',
- formData: JSON.stringify(choices[keys[0]].formData, null, 2),
- };
- story.argTypes = {
- host: {
- control: 'text',
- description: 'Superset App host for CORS request',
- },
- mode: { control: 'select', options: keys, description: 'Choose mode' },
- width: { control: 'text', description: 'Vis width' },
- height: { control: 'text', description: 'Vis height' },
- formData: { control: 'text', description: 'Override formData' },
- };
- return story;
- }
|