{"version":3,"file":"8003.49ab92de2ccc83801352.entry.js","mappings":"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","sources":["webpack://superset/../superset_text.yml","webpack://superset/./src/components/Alert/index.tsx","webpack://superset/./src/components/AsyncAceEditor/Tooltip.tsx","webpack://superset/./src/components/AsyncAceEditor/index.tsx","webpack://superset/./src/components/AsyncEsmComponent/index.tsx","webpack://superset/./src/components/Collapse/index.tsx","webpack://superset/./src/components/Form/FormItem.tsx","webpack://superset/./src/components/Form/FormLabel.tsx","webpack://superset/./src/assets/images/icons/error.svg?767b","webpack://superset/./src/components/Form/LabeledErrorBoundInput.tsx","webpack://superset/./src/components/Form/Form.tsx","webpack://superset/./src/components/GenericLink/GenericLink.tsx","webpack://superset/./src/components/InfoTooltip/index.tsx","webpack://superset/./src/components/Input/index.tsx","webpack://superset/./src/components/Label/index.tsx","webpack://superset/./src/components/Menu/index.tsx","webpack://superset/./src/components/Radio/index.tsx","webpack://superset/./src/components/Switch/index.tsx","webpack://superset/./src/components/Tabs/Tabs.tsx","webpack://superset/./src/features/databases/state.ts","webpack://superset/./src/features/home/types.ts","webpack://superset/./src/utils/textUtils.ts","webpack://superset/./src/views/CRUD/hooks.ts","webpack://superset/./src/views/CRUD/types.ts","webpack://superset/./src/views/CRUD/utils.tsx"],"sourcesContent":["const doc = [null];\nmodule.exports = doc.length <= 1 ? doc[0] : doc;","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { PropsWithChildren } from 'react';\nimport AntdAlert, { AlertProps as AntdAlertProps } from 'antd/lib/alert';\nimport { useTheme } from '@superset-ui/core';\nimport Icons from 'src/components/Icons';\n\nexport type AlertProps = PropsWithChildren<\n AntdAlertProps & { roomBelow?: boolean }\n>;\n\nexport default function Alert(props: AlertProps) {\n const {\n type = 'info',\n description,\n showIcon = true,\n closable = true,\n roomBelow = false,\n children,\n } = props;\n\n const theme = useTheme();\n const { colors, typography, gridUnit } = theme;\n const { alert, error, info, success } = colors;\n\n let baseColor = info;\n let AlertIcon = Icons.InfoSolid;\n if (type === 'error') {\n baseColor = error;\n AlertIcon = Icons.ErrorSolid;\n } else if (type === 'warning') {\n baseColor = alert;\n AlertIcon = Icons.AlertSolid;\n } else if (type === 'success') {\n baseColor = success;\n AlertIcon = Icons.CircleCheckSolid;\n }\n\n return (\n }\n closeText={closable && }\n css={{\n marginBottom: roomBelow ? gridUnit * 4 : 0,\n padding: `${gridUnit * 2}px ${gridUnit * 3}px`,\n alignItems: 'flex-start',\n border: 0,\n backgroundColor: baseColor.light2,\n '& .ant-alert-icon': {\n marginRight: gridUnit * 2,\n },\n '& .ant-alert-message': {\n color: baseColor.dark2,\n fontSize: typography.sizes.m,\n fontWeight: description\n ? typography.weights.bold\n : typography.weights.normal,\n },\n '& .ant-alert-description': {\n color: baseColor.dark2,\n fontSize: typography.sizes.m,\n },\n }}\n {...props}\n >\n {children}\n \n );\n}\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { Tag } from 'src/components';\n\ntype Props = {\n title: string;\n icon?: React.ReactNode;\n body?: React.ReactNode;\n meta?: string;\n footer?: React.ReactNode;\n};\n\nexport const Tooltip: React.FC = ({\n title,\n icon,\n body,\n meta,\n footer,\n}) => (\n
\n
\n
\n {icon}\n {title}\n
\n {meta && (\n \n {meta}\n \n )}\n
\n {body &&
{body ?? title}
}\n {footer &&
{footer}
}\n
\n);\n\nexport const getTooltipHTML = (props: Props) =>\n `${renderToStaticMarkup()}`;\n\nexport default Tooltip;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { forwardRef, useEffect, ComponentType } from 'react';\n\nimport {\n Editor as OrigEditor,\n IEditSession,\n Position,\n TextMode as OrigTextMode,\n} from 'brace';\nimport AceEditor, { IAceEditorProps } from 'react-ace';\nimport { config } from 'ace-builds';\nimport { acequire } from 'ace-builds/src-noconflict/ace';\nimport AsyncEsmComponent, {\n PlaceholderProps,\n} from 'src/components/AsyncEsmComponent';\nimport useEffectEvent from 'src/hooks/useEffectEvent';\nimport cssWorkerUrl from 'ace-builds/src-noconflict/worker-css';\nimport { useTheme, css } from '@superset-ui/core';\nimport { Global } from '@emotion/react';\n\nexport { getTooltipHTML } from './Tooltip';\n\nconfig.setModuleUrl('ace/mode/css_worker', cssWorkerUrl);\n\nexport interface AceCompleterKeywordData {\n name: string;\n value: string;\n score: number;\n meta: string;\n docText?: string;\n docHTML?: string;\n}\n\nexport type TextMode = OrigTextMode & { $id: string };\n\nexport interface AceCompleter {\n insertMatch: (\n data?: Editor | { value: string } | string,\n options?: AceCompleterKeywordData,\n ) => void;\n}\n\nexport type Editor = OrigEditor & {\n completer: AceCompleter;\n completers: AceCompleter[];\n};\n\nexport interface AceCompleterKeyword extends AceCompleterKeywordData {\n completer?: AceCompleter;\n}\n\n/**\n * Async loaders to import brace modules. Must manually create call `import(...)`\n * promises because webpack can only analyze async imports statically.\n */\nconst aceModuleLoaders = {\n 'mode/sql': () => import('brace/mode/sql'),\n 'mode/markdown': () => import('brace/mode/markdown'),\n 'mode/css': () => import('brace/mode/css'),\n 'mode/json': () => import('brace/mode/json'),\n 'mode/yaml': () => import('brace/mode/yaml'),\n 'mode/html': () => import('brace/mode/html'),\n 'mode/javascript': () => import('brace/mode/javascript'),\n 'theme/textmate': () => import('brace/theme/textmate'),\n 'theme/github': () => import('brace/theme/github'),\n 'ext/language_tools': () => import('brace/ext/language_tools'),\n 'ext/searchbox': () => import('brace/ext/searchbox'),\n};\n\nexport type AceModule = keyof typeof aceModuleLoaders;\n\nexport type AsyncAceEditorProps = IAceEditorProps & {\n keywords?: AceCompleterKeyword[];\n};\n\nexport type AceEditorMode = 'sql';\nexport type AceEditorTheme = 'textmate' | 'github';\nexport type AsyncAceEditorOptions = {\n defaultMode?: AceEditorMode;\n defaultTheme?: AceEditorTheme;\n defaultTabSize?: number;\n fontFamily?: string;\n placeholder?: ComponentType<\n PlaceholderProps & Partial\n > | null;\n};\n\n/**\n * Get an async AceEditor with automatical loading of specified ace modules.\n */\nexport default function AsyncAceEditor(\n aceModules: AceModule[],\n {\n defaultMode,\n defaultTheme,\n defaultTabSize = 2,\n fontFamily = 'Menlo, Consolas, Courier New, Ubuntu Mono, source-code-pro, Lucida Console, monospace',\n placeholder,\n }: AsyncAceEditorOptions = {},\n) {\n return AsyncEsmComponent(async () => {\n const { default: ReactAceEditor } = await import('react-ace');\n\n await Promise.all(aceModules.map(x => aceModuleLoaders[x]()));\n\n const inferredMode =\n defaultMode ||\n aceModules.find(x => x.startsWith('mode/'))?.replace('mode/', '');\n const inferredTheme =\n defaultTheme ||\n aceModules.find(x => x.startsWith('theme/'))?.replace('theme/', '');\n\n return forwardRef(\n function ExtendedAceEditor(\n {\n keywords,\n mode = inferredMode,\n theme = inferredTheme,\n tabSize = defaultTabSize,\n defaultValue = '',\n ...props\n },\n ref,\n ) {\n const supersetTheme = useTheme();\n const langTools = acequire('ace/ext/language_tools');\n const setCompleters = useEffectEvent(\n (keywords: AceCompleterKeyword[]) => {\n const completer = {\n getCompletions: (\n editor: AceEditor,\n session: IEditSession,\n pos: Position,\n prefix: string,\n callback: (error: null, wordList: object[]) => void,\n ) => {\n // If the prefix starts with a number, don't try to autocomplete\n if (!Number.isNaN(parseInt(prefix, 10))) {\n return;\n }\n if (\n (session.getMode() as TextMode).$id === `ace/mode/${mode}`\n ) {\n callback(null, keywords);\n }\n },\n };\n langTools.setCompleters([completer]);\n },\n );\n useEffect(() => {\n if (keywords) {\n setCompleters(keywords);\n }\n }, [keywords, setCompleters]);\n\n return (\n <>\n .ant-tag {\n margin-right: 0px;\n }\n }\n }\n `}\n />\n \n >\n );\n },\n );\n }, placeholder);\n}\n\nexport const SQLEditor = AsyncAceEditor([\n 'mode/sql',\n 'theme/github',\n 'ext/language_tools',\n 'ext/searchbox',\n]);\n\nexport const FullSQLEditor = AsyncAceEditor(\n ['mode/sql', 'theme/github', 'ext/language_tools', 'ext/searchbox'],\n {\n // a custom placeholder in SQL lab for less jumpy re-renders\n placeholder: () => {\n const gutterBackground = '#e8e8e8'; // from ace-github theme\n return (\n
\n \n {/* make it possible to resize the placeholder */}\n \n
\n );\n },\n },\n);\n\nexport const MarkdownEditor = AsyncAceEditor([\n 'mode/markdown',\n 'theme/textmate',\n]);\n\nexport const TextAreaEditor = AsyncAceEditor([\n 'mode/markdown',\n 'mode/sql',\n 'mode/json',\n 'mode/html',\n 'mode/javascript',\n 'theme/textmate',\n]);\n\nexport const CssEditor = AsyncAceEditor(['mode/css', 'theme/github']);\n\nexport const JsonEditor = AsyncAceEditor(['mode/json', 'theme/github']);\n\n/**\n * JSON or Yaml config editor.\n */\nexport const ConfigEditor = AsyncAceEditor([\n 'mode/json',\n 'mode/yaml',\n 'theme/github',\n]);\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport {\n CSSProperties,\n useEffect,\n useState,\n RefObject,\n forwardRef,\n ComponentType,\n ForwardRefExoticComponent,\n PropsWithoutRef,\n RefAttributes,\n} from 'react';\n\nimport Loading from '../Loading';\n\nexport type PlaceholderProps = {\n showLoadingForImport?: boolean;\n width?: string | number;\n height?: string | number;\n placeholderStyle?: CSSProperties;\n} & {\n [key: string]: any;\n};\n\nfunction DefaultPlaceholder({\n width,\n height,\n showLoadingForImport = false,\n placeholderStyle: style,\n}: PlaceholderProps) {\n return (\n // since `width` defaults to 100%, we can display the placeholder once\n // height is specified.\n (height && (\n
\n {showLoadingForImport && }\n
\n )) ||\n // `|| null` is for in case of height=0.\n null\n );\n}\n\n/**\n * Asynchronously import an ES module as a React component, render a placeholder\n * first (if provided) and re-render once import is complete.\n */\nexport default function AsyncEsmComponent<\n P = PlaceholderProps,\n M = ComponentType
| { default: ComponentType
},\n>(\n /**\n * A promise generator that returns the React component to render.\n */\n loadComponent: Promise | (() => Promise),\n /**\n * Placeholder while still importing.\n */\n placeholder: ComponentType<\n PlaceholderProps & Partial
\n > | null = DefaultPlaceholder,\n) {\n // component props + placeholder props\n type FullProps = P & PlaceholderProps;\n let promise: Promise | undefined;\n let component: ComponentType;\n\n /**\n * Safely wait for promise, make sure the loader function only execute once.\n */\n function waitForPromise() {\n if (!promise) {\n // load component on initialization\n promise =\n loadComponent instanceof Promise ? loadComponent : loadComponent();\n }\n if (!component) {\n promise.then(result => {\n component = ((result as { default?: ComponentType
}).default ||\n result) as ComponentType;\n });\n }\n return promise;\n }\n\n type AsyncComponent = ForwardRefExoticComponent<\n PropsWithoutRef & RefAttributes>\n > & {\n preload?: typeof waitForPromise;\n };\n\n const AsyncComponent: AsyncComponent = forwardRef(function AsyncComponent(\n props: FullProps,\n ref: RefObject>,\n ) {\n const [loaded, setLoaded] = useState(component !== undefined);\n useEffect(() => {\n let isMounted = true;\n if (!loaded) {\n // update state to trigger a re-render\n waitForPromise().then(() => {\n if (isMounted) {\n setLoaded(true);\n }\n });\n }\n return () => {\n isMounted = false;\n };\n });\n const Component = component || placeholder;\n return Component ? (\n // placeholder does not get the ref\n \n ) : null;\n });\n // preload the async component before rendering\n AsyncComponent.preload = waitForPromise;\n\n return AsyncComponent as AsyncComponent & {\n preload: typeof waitForPromise;\n };\n}\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { styled } from '@superset-ui/core';\nimport { Collapse as AntdCollapse } from 'antd';\nimport { CollapseProps as AntdCollapseProps } from 'antd/lib/collapse';\n\nexport interface CollapseProps extends AntdCollapseProps {\n light?: boolean;\n bigger?: boolean;\n bold?: boolean;\n animateArrows?: boolean;\n}\n\nconst Collapse = Object.assign(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n styled(({ light, bigger, bold, animateArrows, ...props }: CollapseProps) => (\n \n ))`\n .ant-collapse-item {\n .ant-collapse-header {\n font-weight: ${({ bold, theme }) =>\n bold\n ? theme.typography.weights.bold\n : theme.typography.weights.normal};\n font-size: ${({ bigger, theme }) =>\n bigger ? `${theme.gridUnit * 4}px` : 'inherit'};\n\n .ant-collapse-arrow svg {\n transition: ${({ animateArrows }) =>\n animateArrows ? 'transform 0.24s' : 'none'};\n }\n\n ${({ expandIconPosition }) =>\n expandIconPosition &&\n expandIconPosition === 'right' &&\n `\n .anticon.anticon-right.ant-collapse-arrow > svg {\n transform: rotate(90deg) !important;\n }\n `}\n\n ${({ light, theme }) =>\n light &&\n `\n color: ${theme.colors.grayscale.light4};\n .ant-collapse-arrow svg {\n color: ${theme.colors.grayscale.light4};\n }\n `}\n\n ${({ ghost, bordered, theme }) =>\n ghost &&\n bordered &&\n `\n border-bottom: 1px solid ${theme.colors.grayscale.light3};\n `}\n }\n .ant-collapse-content {\n .ant-collapse-content-box {\n .loading.inline {\n margin: ${({ theme }) => theme.gridUnit * 12}px auto;\n display: block;\n }\n }\n }\n }\n .ant-collapse-item-active {\n .ant-collapse-header {\n ${({ expandIconPosition }) =>\n expandIconPosition &&\n expandIconPosition === 'right' &&\n `\n .anticon.anticon-right.ant-collapse-arrow > svg {\n transform: rotate(-90deg) !important;\n }\n `}\n }\n }\n `,\n {\n Panel: AntdCollapse.Panel,\n },\n);\n\nexport default Collapse;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport Form from 'antd/lib/form';\nimport { styled } from '@superset-ui/core';\n\nconst StyledItem = styled(Form.Item)`\n ${({ theme }) => `\n .ant-form-item-label {\n padding-bottom: ${theme.gridUnit}px;\n & > label {\n text-transform: uppercase;\n font-size: ${theme.typography.sizes.s}px;\n color: ${theme.colors.grayscale.base};\n\n &.ant-form-item-required:not(.ant-form-item-required-mark-optional) {\n &::before {\n display: none;\n }\n &::after {\n display: inline-block;\n color: ${theme.colors.error.base};\n font-size: ${theme.typography.sizes.s}px;\n content: '*';\n }\n }\n }\n }\n `}\n`;\n\nexport default StyledItem;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { ReactNode } from 'react';\nimport { styled } from '@superset-ui/core';\n\nexport type FormLabelProps = {\n children: ReactNode;\n htmlFor?: string;\n required?: boolean;\n className?: string;\n};\n\nconst Label = styled.label`\n text-transform: uppercase;\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n color: ${({ theme }) => theme.colors.grayscale.base};\n margin-bottom: ${({ theme }) => theme.gridUnit}px;\n`;\n\nconst RequiredLabel = styled.label`\n text-transform: uppercase;\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n color: ${({ theme }) => theme.colors.grayscale.base};\n margin-bottom: ${({ theme }) => theme.gridUnit}px;\n &::after {\n display: inline-block;\n margin-left: ${({ theme }) => theme.gridUnit}px;\n color: ${({ theme }) => theme.colors.error.base};\n font-size: ${({ theme }) => theme.typography.sizes.m}px;\n content: '*';\n }\n`;\n\nexport default function FormLabel({\n children,\n htmlFor,\n required = false,\n className,\n}: FormLabelProps) {\n const StyledLabel = required ? RequiredLabel : Label;\n return (\n \n {children}\n \n );\n}\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nimport { forwardRef } from \"react\";\nconst SvgError = ({\n title,\n titleId,\n ...props\n}, ref) => /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n fill: \"none\",\n ref: ref,\n \"aria-labelledby\": titleId\n}, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n}, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n fillRule: \"evenodd\",\n d: \"M12 7a1 1 0 0 0-1 1v4a1 1 0 1 0 2 0V8a1 1 0 0 0-1-1m0 8a1 1 0 1 0 0 2 1 1 0 0 0 0-2m9.71-7.44-5.27-5.27a1.05 1.05 0 0 0-.71-.29H8.27a1.05 1.05 0 0 0-.71.29L2.29 7.56a1.05 1.05 0 0 0-.29.71v7.46c.004.265.107.518.29.71l5.27 5.27c.192.183.445.286.71.29h7.46a1.05 1.05 0 0 0 .71-.29l5.27-5.27a1.05 1.05 0 0 0 .29-.71V8.27a1.05 1.05 0 0 0-.29-.71M20 15.31 15.31 20H8.69L4 15.31V8.69L8.69 4h6.62L20 8.69z\",\n clipRule: \"evenodd\"\n})));\nconst ForwardRef = /*#__PURE__*/forwardRef(SvgError);\nexport default ForwardRef;","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { Input, Tooltip } from 'antd';\nimport { styled, css, SupersetTheme, t } from '@superset-ui/core';\nimport InfoTooltip from 'src/components/InfoTooltip';\nimport Icons from 'src/components/Icons';\nimport Button from 'src/components/Button';\nimport errorIcon from 'src/assets/images/icons/error.svg';\nimport FormItem from './FormItem';\nimport FormLabel from './FormLabel';\n\nexport interface LabeledErrorBoundInputProps {\n label?: string;\n validationMethods:\n | { onBlur: (value: any) => void }\n | { onChange: (value: any) => void };\n errorMessage?: string | null;\n helpText?: string;\n required?: boolean;\n hasTooltip?: boolean;\n tooltipText?: string | null;\n id?: string;\n classname?: string;\n visibilityToggle?: boolean;\n [x: string]: any;\n}\n\nconst StyledInput = styled(Input)`\n margin: ${({ theme }) => `${theme.gridUnit}px 0 ${theme.gridUnit * 2}px`};\n`;\n\nconst StyledInputPassword = styled(Input.Password)`\n margin: ${({ theme }) => `${theme.gridUnit}px 0 ${theme.gridUnit * 2}px`};\n`;\n\nconst alertIconStyles = (theme: SupersetTheme, hasError: boolean) => css`\n .ant-form-item-children-icon {\n display: none;\n }\n ${hasError &&\n `.ant-form-item-control-input-content {\n position: relative;\n &:after {\n content: ' ';\n display: inline-block;\n background: ${theme.colors.error.base};\n mask: url(${errorIcon});\n mask-size: cover;\n width: ${theme.gridUnit * 4}px;\n height: ${theme.gridUnit * 4}px;\n position: absolute;\n right: ${theme.gridUnit * 1.25}px;\n top: ${theme.gridUnit * 2.75}px;\n }\n }`}\n`;\n\nconst StyledFormGroup = styled('div')`\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n margin-bottom: ${({ theme }) => theme.gridUnit * 3}px;\n .ant-form-item {\n margin-bottom: 0;\n }\n`;\n\nconst StyledAlignment = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst StyledFormLabel = styled(FormLabel)`\n margin-bottom: 0;\n`;\n\nconst iconReset = css`\n &.anticon > * {\n line-height: 0;\n }\n`;\n\nconst LabeledErrorBoundInput = ({\n label,\n validationMethods,\n errorMessage,\n helpText,\n required = false,\n hasTooltip = false,\n tooltipText,\n id,\n className,\n visibilityToggle,\n get_url,\n description,\n ...props\n}: LabeledErrorBoundInputProps) => (\n \n \n \n {label}\n \n {hasTooltip && }\n \n alertIconStyles(theme, !!errorMessage)}\n validateTrigger={Object.keys(validationMethods)}\n validateStatus={errorMessage ? 'error' : 'success'}\n help={errorMessage || helpText}\n hasFeedback={!!errorMessage}\n >\n {visibilityToggle || props.name === 'password' ? (\n \n visible ? (\n \n \n \n ) : (\n \n \n \n )\n }\n role=\"textbox\"\n />\n ) : (\n \n )}\n {get_url && description ? (\n \n ) : (\n \n )}\n \n \n);\n\nexport default LabeledErrorBoundInput;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport AntdForm, { FormProps } from 'antd/lib/form';\nimport { styled } from '@superset-ui/core';\n\nconst StyledForm = styled(AntdForm)`\n &.ant-form label {\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n }\n .ant-form-item {\n margin-bottom: ${({ theme }) => theme.gridUnit * 4}px;\n }\n`;\n\nexport default function Form(props: FormProps) {\n return ;\n}\n\nexport type { FormProps };\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { PropsWithoutRef, RefAttributes } from 'react';\nimport { Link, LinkProps } from 'react-router-dom';\nimport { isUrlExternal, parseUrl } from 'src/utils/urlUtils';\n\nexport const GenericLink = ({\n to,\n component,\n replace,\n innerRef,\n children,\n ...rest\n}: PropsWithoutRef> & RefAttributes) => {\n if (typeof to === 'string' && isUrlExternal(to)) {\n return (\n \n {children}\n \n );\n }\n return (\n \n {children}\n \n );\n};\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { styled, useTheme } from '@superset-ui/core';\nimport { Tooltip } from 'src/components/Tooltip';\nimport Icons from 'src/components/Icons';\n\nexport interface InfoTooltipProps {\n iconStyle?: React.CSSProperties;\n tooltip: string;\n placement?:\n | 'bottom'\n | 'left'\n | 'right'\n | 'top'\n | 'topLeft'\n | 'topRight'\n | 'bottomLeft'\n | 'bottomRight'\n | 'leftTop'\n | 'leftBottom'\n | 'rightTop'\n | 'rightBottom'\n | undefined;\n trigger?: string | Array;\n overlayStyle?: any;\n bgColor?: string;\n viewBox?: string;\n}\n\nconst StyledTooltip = styled(Tooltip)`\n cursor: pointer;\n`;\n\nconst StyledTooltipTitle = styled.span`\n display: -webkit-box;\n -webkit-line-clamp: 20;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst defaultOverlayStyle = {\n fontSize: '12px',\n lineHeight: '16px',\n};\n\nconst defaultColor = 'rgba(0,0,0,0.9)';\n\nexport default function InfoTooltip({\n tooltip,\n iconStyle = {},\n placement = 'right',\n trigger = 'hover',\n overlayStyle = defaultOverlayStyle,\n bgColor = defaultColor,\n viewBox = '0 -1 24 24',\n}: InfoTooltipProps) {\n const theme = useTheme();\n const alteredIconStyle = {\n ...iconStyle,\n color: iconStyle.color || theme.colors.grayscale.base,\n };\n return (\n {tooltip}}\n placement={placement}\n trigger={trigger}\n overlayStyle={overlayStyle}\n color={bgColor}\n >\n \n \n );\n}\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { styled } from '@superset-ui/core';\nimport { Input as AntdInput, InputNumber as AntdInputNumber } from 'antd';\n\nexport const Input = styled(AntdInput)`\n border: 1px solid ${({ theme }) => theme.colors.secondary.light3};\n border-radius: ${({ theme }) => theme.borderRadius}px;\n`;\n\nexport const InputNumber = styled(AntdInputNumber)`\n border: 1px solid ${({ theme }) => theme.colors.secondary.light3};\n border-radius: ${({ theme }) => theme.borderRadius}px;\n`;\n\nexport const TextArea = styled(AntdInput.TextArea)`\n border: 1px solid ${({ theme }) => theme.colors.secondary.light3};\n border-radius: ${({ theme }) => theme.borderRadius}px;\n`;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport {\n CSSProperties,\n HTMLAttributes,\n MouseEventHandler,\n ReactNode,\n} from 'react';\n\nimport { Tag } from 'src/components';\nimport { useTheme } from '@superset-ui/core';\n\nexport type OnClickHandler = MouseEventHandler;\n\nexport type Type =\n | 'alert'\n | 'success'\n | 'warning'\n | 'danger'\n | 'info'\n | 'default'\n | 'primary'\n | 'secondary';\n\nexport interface LabelProps extends HTMLAttributes {\n key?: string;\n className?: string;\n onClick?: OnClickHandler;\n type?: Type;\n style?: CSSProperties;\n children?: ReactNode;\n role?: string;\n}\n\nexport default function Label(props: LabelProps) {\n const theme = useTheme();\n const { colors, transitionTiming } = theme;\n const { type = 'default', onClick, children, ...rest } = props;\n const {\n alert,\n primary,\n secondary,\n grayscale,\n success,\n warning,\n error,\n info,\n } = colors;\n\n let backgroundColor = grayscale.light3;\n let backgroundColorHover = onClick ? primary.light2 : grayscale.light3;\n let borderColor = onClick ? grayscale.light2 : 'transparent';\n let borderColorHover = onClick ? primary.light1 : 'transparent';\n let color = grayscale.dark1;\n\n if (type !== 'default') {\n color = grayscale.light4;\n\n let baseColor;\n if (type === 'alert') {\n color = grayscale.dark1;\n baseColor = alert;\n } else if (type === 'success') {\n baseColor = success;\n } else if (type === 'warning') {\n baseColor = warning;\n } else if (type === 'danger') {\n baseColor = error;\n } else if (type === 'info') {\n baseColor = info;\n } else if (type === 'secondary') {\n baseColor = secondary;\n } else {\n baseColor = primary;\n }\n\n backgroundColor = baseColor.base;\n backgroundColorHover = onClick ? baseColor.dark1 : baseColor.base;\n borderColor = onClick ? baseColor.dark1 : 'transparent';\n borderColorHover = onClick ? baseColor.dark2 : 'transparent';\n }\n\n return (\n \n {children}\n \n );\n}\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { styled } from '@superset-ui/core';\nimport { ReactElement } from 'react';\nimport { Menu as AntdMenu } from 'antd';\nimport { MenuProps as AntdMenuProps } from 'antd/lib/menu';\n\nexport type MenuProps = AntdMenuProps;\n\nexport enum MenuItemKeyEnum {\n MenuItem = 'menu-item',\n SubMenu = 'submenu',\n SubMenuItem = 'submenu-item',\n}\n\nexport type AntdMenuTypeRef = { current: { props: { parentMenu: AntdMenu } } };\n\nexport type AntdMenuItemType = ReactElement & {\n ref: AntdMenuTypeRef;\n type: { displayName: string; isSubMenu: number };\n};\n\nexport type MenuItemChildType = AntdMenuItemType;\n\nexport const isAntdMenuItemRef = (\n ref: AntdMenuTypeRef,\n): ref is AntdMenuTypeRef =>\n (ref as AntdMenuTypeRef)?.current?.props?.parentMenu !== undefined;\n\nexport const isAntdMenuItem = (child: MenuItemChildType) =>\n child?.type?.displayName === 'Styled(MenuItem)';\n\nexport const isAntdMenuSubmenu = (child: MenuItemChildType) =>\n child?.type?.isSubMenu === 1;\n\nexport const isSubMenuOrItemType = (type: string) =>\n type === MenuItemKeyEnum.SubMenu || type === MenuItemKeyEnum.SubMenuItem;\n\nconst MenuItem = styled(AntdMenu.Item)`\n > a {\n text-decoration: none;\n }\n\n &.ant-menu-item {\n height: ${({ theme }) => theme.gridUnit * 8}px;\n line-height: ${({ theme }) => theme.gridUnit * 8}px;\n a {\n border-bottom: none;\n transition: background-color ${({ theme }) => theme.transitionTiming}s;\n &:after {\n content: '';\n position: absolute;\n bottom: -3px;\n left: 50%;\n width: 0;\n height: 3px;\n opacity: 0;\n transform: translateX(-50%);\n transition: all ${({ theme }) => theme.transitionTiming}s;\n background-color: ${({ theme }) => theme.colors.primary.base};\n }\n &:focus {\n border-bottom: none;\n background-color: transparent;\n @media (max-width: 767px) {\n background-color: ${({ theme }) => theme.colors.primary.light5};\n }\n }\n }\n }\n\n &.ant-menu-item,\n &.ant-dropdown-menu-item {\n span[role='button'] {\n display: inline-block;\n width: 100%;\n }\n transition-duration: 0s;\n }\n`;\n\nconst StyledNav = styled(AntdMenu)`\n line-height: 51px;\n border: none;\n\n & > .ant-menu-item,\n & > .ant-menu-submenu {\n vertical-align: inherit;\n &:hover {\n color: ${({ theme }) => theme.colors.grayscale.dark1};\n }\n }\n\n &:not(.ant-menu-dark) > .ant-menu-submenu,\n &:not(.ant-menu-dark) > .ant-menu-item {\n &:hover {\n border-bottom: none;\n }\n }\n\n &:not(.ant-menu-dark) > .ant-menu-submenu,\n &:not(.ant-menu-dark) > .ant-menu-item {\n margin: 0px;\n }\n\n & > .ant-menu-item > a {\n padding: ${({ theme }) => theme.gridUnit * 4}px;\n }\n`;\n\nconst StyledSubMenu = styled(AntdMenu.SubMenu)`\n color: ${({ theme }) => theme.colors.grayscale.dark1};\n border-bottom: none;\n .ant-menu-submenu-open,\n .ant-menu-submenu-active {\n background-color: ${({ theme }) => theme.colors.primary.light5};\n .ant-menu-submenu-title {\n color: ${({ theme }) => theme.colors.grayscale.dark1};\n background-color: ${({ theme }) => theme.colors.primary.light5};\n border-bottom: none;\n margin: 0;\n &:after {\n opacity: 1;\n width: calc(100% - 1);\n }\n }\n }\n .ant-menu-submenu-title {\n position: relative;\n top: ${({ theme }) => -theme.gridUnit - 3}px;\n &:after {\n content: '';\n position: absolute;\n bottom: -3px;\n left: 50%;\n width: 0;\n height: 3px;\n opacity: 0;\n transform: translateX(-50%);\n transition: all ${({ theme }) => theme.transitionTiming}s;\n background-color: ${({ theme }) => theme.colors.primary.base};\n }\n }\n .ant-menu-submenu-arrow {\n top: 67%;\n }\n & > .ant-menu-submenu-title {\n padding: 0 ${({ theme }) => theme.gridUnit * 6}px 0\n ${({ theme }) => theme.gridUnit * 3}px !important;\n span[role='img'] {\n position: absolute;\n right: ${({ theme }) => -theme.gridUnit + -2}px;\n top: ${({ theme }) => theme.gridUnit * 5.25}px;\n svg {\n font-size: ${({ theme }) => theme.gridUnit * 6}px;\n color: ${({ theme }) => theme.colors.grayscale.base};\n }\n }\n & > span {\n position: relative;\n top: 7px;\n }\n &:hover {\n color: ${({ theme }) => theme.colors.primary.base};\n }\n }\n`;\n\nexport declare type MenuMode =\n | 'vertical'\n | 'vertical-left'\n | 'vertical-right'\n | 'horizontal'\n | 'inline';\n\nexport const Menu = Object.assign(AntdMenu, {\n Item: MenuItem,\n});\n\nexport const MainNav = Object.assign(StyledNav, {\n Item: MenuItem,\n SubMenu: StyledSubMenu,\n Divider: AntdMenu.Divider,\n ItemGroup: AntdMenu.ItemGroup,\n});\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { styled } from '@superset-ui/core';\nimport { Radio as AntdRadio } from 'antd';\n\nconst StyledRadio = styled(AntdRadio)`\n .ant-radio-inner {\n top: -1px;\n left: 2px;\n width: ${({ theme }) => theme.gridUnit * 4}px;\n height: ${({ theme }) => theme.gridUnit * 4}px;\n border-width: 2px;\n border-color: ${({ theme }) => theme.colors.grayscale.light2};\n }\n\n .ant-radio.ant-radio-checked {\n .ant-radio-inner {\n border-width: ${({ theme }) => theme.gridUnit + 1}px;\n border-color: ${({ theme }) => theme.colors.primary.base};\n }\n\n .ant-radio-inner::after {\n background-color: ${({ theme }) => theme.colors.grayscale.light5};\n top: 0;\n left: 0;\n width: ${({ theme }) => theme.gridUnit + 2}px;\n height: ${({ theme }) => theme.gridUnit + 2}px;\n }\n }\n\n .ant-radio:hover,\n .ant-radio:focus {\n .ant-radio-inner {\n border-color: ${({ theme }) => theme.colors.primary.dark1};\n }\n }\n`;\nconst StyledGroup = styled(AntdRadio.Group)`\n font-size: inherit;\n`;\n\nexport const Radio = Object.assign(StyledRadio, {\n Group: StyledGroup,\n Button: AntdRadio.Button,\n});\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { styled } from '@superset-ui/core';\nimport BaseSwitch, { SwitchProps } from 'antd/lib/switch';\n\nconst StyledSwitch = styled(BaseSwitch)`\n .ant-switch-checked {\n background-color: ${({ theme }) => theme.colors.primary.base};\n }\n`;\n\nexport const Switch = (props: SwitchProps) => ;\nexport type { SwitchProps };\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { css, styled } from '@superset-ui/core';\nimport AntdTabs, { TabsProps as AntdTabsProps } from 'antd/lib/tabs';\nimport Icons from 'src/components/Icons';\n\nexport interface TabsProps extends AntdTabsProps {\n fullWidth?: boolean;\n allowOverflow?: boolean;\n}\n\nconst StyledTabs = ({\n animated = false,\n fullWidth = true,\n allowOverflow = true,\n ...props\n}: TabsProps) => (\n css`\n overflow: ${allowOverflow ? 'visible' : 'hidden'};\n\n .ant-tabs-content-holder {\n overflow: ${allowOverflow ? 'visible' : 'auto'};\n }\n .ant-tabs-tab {\n flex: 1 1 auto;\n &.ant-tabs-tab-active .ant-tabs-tab-btn {\n color: inherit;\n }\n &:hover {\n .anchor-link-container {\n cursor: pointer;\n .fa.fa-link {\n visibility: visible;\n }\n }\n }\n .short-link-trigger.btn {\n padding: 0 ${theme.gridUnit}px;\n & > .fa.fa-link {\n top: 0;\n }\n }\n }\n ${fullWidth &&\n css`\n .ant-tabs-nav-list {\n width: 100%;\n }\n `};\n\n .ant-tabs-tab-btn {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n justify-content: center;\n font-size: ${theme.typography.sizes.s}px;\n text-align: center;\n text-transform: uppercase;\n user-select: none;\n .required {\n margin-left: ${theme.gridUnit / 2}px;\n color: ${theme.colors.error.base};\n }\n }\n .ant-tabs-ink-bar {\n background: ${theme.colors.secondary.base};\n }\n `}\n />\n);\n\nconst StyledTabPane = styled(AntdTabs.TabPane)``;\n\nconst Tabs = Object.assign(StyledTabs, {\n TabPane: StyledTabPane,\n});\n\nconst StyledEditableTabs = styled(StyledTabs)`\n ${({ theme, fullWidth }) => `\n .ant-tabs-content-holder {\n background: ${theme.colors.grayscale.light5};\n }\n\n & > .ant-tabs-nav {\n margin-bottom: 0;\n }\n\n .ant-tabs-tab-remove {\n padding-top: 0;\n padding-bottom: 0;\n height: ${theme.gridUnit * 6}px;\n }\n\n ${\n fullWidth\n ? css`\n .ant-tabs-nav-list {\n width: 100%;\n }\n `\n : ''\n }\n `}\n`;\n\nconst StyledCancelXIcon = styled(Icons.CancelX)`\n color: ${({ theme }) => theme.colors.grayscale.base};\n`;\nexport const EditableTabs = Object.assign(StyledEditableTabs, {\n TabPane: StyledTabPane,\n});\n\nEditableTabs.defaultProps = {\n type: 'editable-card',\n fullWidth: false,\n animated: { inkBar: true, tabPane: false },\n};\n\nEditableTabs.TabPane.defaultProps = {\n closeIcon: ,\n};\n\nexport const StyledLineEditableTabs = styled(EditableTabs)`\n &.ant-tabs-card > .ant-tabs-nav .ant-tabs-tab {\n margin: 0 ${({ theme }) => theme.gridUnit * 4}px;\n padding: ${({ theme }) => `${theme.gridUnit * 3}px ${theme.gridUnit}px`};\n background: transparent;\n border: none;\n }\n\n &.ant-tabs-card > .ant-tabs-nav .ant-tabs-ink-bar {\n visibility: visible;\n }\n\n .ant-tabs-tab-btn {\n font-size: ${({ theme }) => theme.typography.sizes.m}px;\n }\n\n .ant-tabs-tab-remove {\n margin-left: 0;\n padding-right: 0;\n }\n\n .ant-tabs-nav-add {\n min-width: unset !important;\n background: transparent !important;\n border: none !important;\n }\n`;\n\nexport const LineEditableTabs = Object.assign(StyledLineEditableTabs, {\n TabPane: StyledTabPane,\n});\n\nexport default Tabs;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { useSelector } from 'react-redux';\nimport { ViewState } from 'src/views/types';\n\nexport function useCommonConf() {\n return useSelector((state: ViewState) => state?.common?.conf);\n}\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport { Filter } from 'src/views/CRUD/types';\nimport { NavBarProps, MenuObjectProps } from 'src/types/bootstrapTypes';\n\nexport enum WelcomeTable {\n Charts = 'CHARTS',\n Dashboards = 'DASHBOARDS',\n Recents = 'RECENTS',\n SavedQueries = 'SAVED_QUERIES',\n}\n\nexport type WelcomePageLastTab = 'examples' | 'all' | [string, Filter[]];\n\nexport interface ExtensionConfigs {\n ALLOWED_EXTENSIONS: Array;\n CSV_EXTENSIONS: Array;\n COLUMNAR_EXTENSIONS: Array;\n EXCEL_EXTENSIONS: Array;\n HAS_GSHEETS_INSTALLED: boolean;\n}\nexport interface RightMenuProps {\n align: 'flex-start' | 'flex-end';\n settings: MenuObjectProps[];\n navbarRight: NavBarProps;\n isFrontendRoute: (path?: string) => boolean;\n environmentTag: {\n text: string;\n color: string;\n };\n}\n\nexport enum GlobalMenuDataOptions {\n GoogleSheets = 'gsheets',\n DbConnection = 'dbconnection',\n DatasetCreation = 'datasetCreation',\n CSVUpload = 'csvUpload',\n ExcelUpload = 'excelUpload',\n ColumnarUpload = 'columnarUpload',\n}\n","/* Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nconst loadModule = () => {\n try {\n // eslint-disable-next-line global-require, import/no-unresolved\n return require('../../../superset_text') || {};\n } catch (e) {\n return {};\n }\n};\n\nconst supersetText = loadModule();\n\nexport default supersetText;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport rison from 'rison';\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n makeApi,\n SupersetClient,\n t,\n JsonObject,\n getClientErrorObject,\n} from '@superset-ui/core';\n\nimport {\n createErrorHandler,\n getAlreadyExists,\n getPasswordsNeeded,\n hasTerminalValidation,\n getSSHPasswordsNeeded,\n getSSHPrivateKeysNeeded,\n getSSHPrivateKeyPasswordsNeeded,\n} from 'src/views/CRUD/utils';\nimport { FetchDataConfig } from 'src/components/ListView';\nimport { FilterValue } from 'src/components/ListView/types';\nimport Chart, { Slice } from 'src/types/Chart';\nimport copyTextToClipboard from 'src/utils/copy';\nimport SupersetText from 'src/utils/textUtils';\nimport { DatabaseObject } from 'src/features/databases/types';\nimport { FavoriteStatus, ImportResourceName } from './types';\n\ninterface ListViewResourceState {\n loading: boolean;\n collection: D[];\n count: number;\n permissions: string[];\n lastFetchDataConfig: FetchDataConfig | null;\n bulkSelectEnabled: boolean;\n lastFetched?: string;\n}\n\nconst parsedErrorMessage = (\n errorMessage: Record | string,\n) => {\n if (typeof errorMessage === 'string') {\n return errorMessage;\n }\n return Object.entries(errorMessage)\n .map(([key, value]) => {\n if (Array.isArray(value)) {\n return `(${key}) ${value.join(', ')}`;\n }\n return `(${key}) ${value}`;\n })\n .join('\\n');\n};\n\nexport function useListViewResource(\n resource: string,\n resourceLabel: string, // resourceLabel for translations\n handleErrorMsg: (errorMsg: string) => void,\n infoEnable = true,\n defaultCollectionValue: D[] = [],\n baseFilters?: FilterValue[], // must be memoized\n initialLoadingState = true,\n selectColumns?: string[],\n) {\n const [state, setState] = useState>({\n count: 0,\n collection: defaultCollectionValue,\n loading: initialLoadingState,\n lastFetchDataConfig: null,\n permissions: [],\n bulkSelectEnabled: false,\n });\n\n function updateState(update: Partial>) {\n setState(currentState => ({ ...currentState, ...update }));\n }\n\n function toggleBulkSelect() {\n updateState({ bulkSelectEnabled: !state.bulkSelectEnabled });\n }\n\n useEffect(() => {\n if (!infoEnable) return;\n SupersetClient.get({\n endpoint: `/api/v1/${resource}/_info?q=${rison.encode({\n keys: ['permissions'],\n })}`,\n }).then(\n ({ json: infoJson = {} }) => {\n updateState({\n permissions: infoJson.permissions,\n });\n },\n createErrorHandler(errMsg =>\n handleErrorMsg(\n t(\n 'An error occurred while fetching %s info: %s',\n resourceLabel,\n errMsg,\n ),\n ),\n ),\n );\n }, []);\n\n function hasPerm(perm: string) {\n if (!state.permissions.length) {\n return false;\n }\n\n return Boolean(state.permissions.find(p => p === perm));\n }\n\n const fetchData = useCallback(\n ({\n pageIndex,\n pageSize,\n sortBy,\n filters: filterValues,\n }: FetchDataConfig) => {\n // set loading state, cache the last config for refreshing data.\n updateState({\n lastFetchDataConfig: {\n filters: filterValues,\n pageIndex,\n pageSize,\n sortBy,\n },\n loading: true,\n });\n\n const filterExps = (baseFilters || [])\n .concat(filterValues)\n .map(({ id, operator: opr, value }) => ({\n col: id,\n opr,\n value:\n value && typeof value === 'object' && 'value' in value\n ? value.value\n : value,\n }));\n\n const queryParams = rison.encode_uri({\n order_column: sortBy[0].id,\n order_direction: sortBy[0].desc ? 'desc' : 'asc',\n page: pageIndex,\n page_size: pageSize,\n ...(filterExps.length ? { filters: filterExps } : {}),\n ...(selectColumns?.length ? { select_columns: selectColumns } : {}),\n });\n\n return SupersetClient.get({\n endpoint: `/api/v1/${resource}/?q=${queryParams}`,\n })\n .then(\n ({ json = {} }) => {\n updateState({\n collection: json.result,\n count: json.count,\n lastFetched: new Date().toISOString(),\n });\n },\n createErrorHandler(errMsg =>\n handleErrorMsg(\n t(\n 'An error occurred while fetching %ss: %s',\n resourceLabel,\n errMsg,\n ),\n ),\n ),\n )\n .finally(() => {\n updateState({ loading: false });\n });\n },\n [baseFilters],\n );\n\n return {\n state: {\n loading: state.loading,\n resourceCount: state.count,\n resourceCollection: state.collection,\n bulkSelectEnabled: state.bulkSelectEnabled,\n lastFetched: state.lastFetched,\n },\n setResourceCollection: (update: D[]) =>\n updateState({\n collection: update,\n }),\n hasPerm,\n fetchData,\n toggleBulkSelect,\n refreshData: (provideConfig?: FetchDataConfig) => {\n if (state.lastFetchDataConfig) {\n return fetchData(state.lastFetchDataConfig);\n }\n if (provideConfig) {\n return fetchData(provideConfig);\n }\n return null;\n },\n };\n}\n\n// In the same vein as above, a hook for viewing a single instance of a resource (given id)\ninterface SingleViewResourceState {\n loading: boolean;\n resource: D | null;\n error: any | null;\n}\n\nexport function useSingleViewResource(\n resourceName: string,\n resourceLabel: string, // resourceLabel for translations\n handleErrorMsg: (errorMsg: string) => void,\n path_suffix = '',\n) {\n const [state, setState] = useState>({\n loading: false,\n resource: null,\n error: null,\n });\n\n function updateState(update: Partial>) {\n setState(currentState => ({ ...currentState, ...update }));\n }\n\n const fetchResource = useCallback(\n (resourceID: number) => {\n // Set loading state\n updateState({\n loading: true,\n });\n\n const baseEndpoint = `/api/v1/${resourceName}/${resourceID}`;\n const endpoint =\n path_suffix !== '' ? `${baseEndpoint}/${path_suffix}` : baseEndpoint;\n return SupersetClient.get({\n endpoint,\n })\n .then(\n ({ json = {} }) => {\n updateState({\n resource: json.result,\n error: null,\n });\n return json.result;\n },\n createErrorHandler((errMsg: Record) => {\n handleErrorMsg(\n t(\n 'An error occurred while fetching %ss: %s',\n resourceLabel,\n parsedErrorMessage(errMsg),\n ),\n );\n\n updateState({\n error: errMsg,\n });\n }),\n )\n .finally(() => {\n updateState({ loading: false });\n });\n },\n [handleErrorMsg, resourceName, resourceLabel],\n );\n\n const createResource = useCallback(\n (resource: D, hideToast = false) => {\n // Set loading state\n updateState({\n loading: true,\n });\n\n return SupersetClient.post({\n endpoint: `/api/v1/${resourceName}/`,\n body: JSON.stringify(resource),\n headers: { 'Content-Type': 'application/json' },\n })\n .then(\n ({ json = {} }) => {\n updateState({\n resource: { id: json.id, ...json.result },\n error: null,\n });\n return json.id;\n },\n createErrorHandler((errMsg: Record) => {\n // we did not want toasts for db-connection-ui but did not want to disable it everywhere\n if (!hideToast) {\n handleErrorMsg(\n t(\n 'An error occurred while creating %ss: %s',\n resourceLabel,\n parsedErrorMessage(errMsg),\n ),\n );\n }\n\n updateState({\n error: errMsg,\n });\n }),\n )\n .finally(() => {\n updateState({ loading: false });\n });\n },\n [handleErrorMsg, resourceName, resourceLabel],\n );\n\n const updateResource = useCallback(\n (resourceID: number, resource: D, hideToast = false, setLoading = true) => {\n // Set loading state\n if (setLoading) {\n updateState({\n loading: true,\n });\n }\n\n return SupersetClient.put({\n endpoint: `/api/v1/${resourceName}/${resourceID}`,\n body: JSON.stringify(resource),\n headers: { 'Content-Type': 'application/json' },\n })\n .then(\n ({ json = {} }) => {\n updateState({\n resource: { ...json.result, id: json.id },\n error: null,\n });\n return json.result;\n },\n createErrorHandler(errMsg => {\n if (!hideToast) {\n handleErrorMsg(\n t(\n 'An error occurred while fetching %ss: %s',\n resourceLabel,\n JSON.stringify(errMsg),\n ),\n );\n }\n\n updateState({\n error: errMsg,\n });\n\n return errMsg;\n }),\n )\n .finally(() => {\n if (setLoading) {\n updateState({ loading: false });\n }\n });\n },\n [handleErrorMsg, resourceName, resourceLabel],\n );\n\n const clearError = () =>\n updateState({\n error: null,\n });\n\n return {\n state,\n setResource: (update: D) =>\n updateState({\n resource: update,\n }),\n fetchResource,\n createResource,\n updateResource,\n clearError,\n };\n}\n\ninterface ImportResourceState {\n loading: boolean;\n passwordsNeeded: string[];\n alreadyExists: string[];\n sshPasswordNeeded: string[];\n sshPrivateKeyNeeded: string[];\n sshPrivateKeyPasswordNeeded: string[];\n failed: boolean;\n}\n\nexport function useImportResource(\n resourceName: ImportResourceName,\n resourceLabel: string, // resourceLabel for translations\n handleErrorMsg: (errorMsg: string) => void,\n) {\n const [state, setState] = useState({\n loading: false,\n passwordsNeeded: [],\n alreadyExists: [],\n sshPasswordNeeded: [],\n sshPrivateKeyNeeded: [],\n sshPrivateKeyPasswordNeeded: [],\n failed: false,\n });\n\n function updateState(update: Partial) {\n setState(currentState => ({ ...currentState, ...update }));\n }\n\n const importResource = useCallback(\n (\n bundle: File,\n databasePasswords: Record = {},\n sshTunnelPasswords: Record = {},\n sshTunnelPrivateKey: Record = {},\n sshTunnelPrivateKeyPasswords: Record = {},\n overwrite = false,\n ) => {\n // Set loading state\n updateState({\n loading: true,\n failed: false,\n });\n\n const formData = new FormData();\n formData.append('formData', bundle);\n\n const RE_EXPORT_TEXT = t(\n 'Please re-export your file and try importing again',\n );\n\n /* The import bundle never contains database passwords; if required\n * they should be provided by the user during import.\n */\n if (databasePasswords) {\n formData.append('passwords', JSON.stringify(databasePasswords));\n }\n /* If the imported model already exists the user needs to confirm\n * that they want to overwrite it.\n */\n if (overwrite) {\n formData.append('overwrite', 'true');\n }\n /* The import bundle may contain ssh tunnel passwords; if required\n * they should be provided by the user during import.\n */\n if (sshTunnelPasswords) {\n formData.append(\n 'ssh_tunnel_passwords',\n JSON.stringify(sshTunnelPasswords),\n );\n }\n /* The import bundle may contain ssh tunnel private_key; if required\n * they should be provided by the user during import.\n */\n if (sshTunnelPrivateKey) {\n formData.append(\n 'ssh_tunnel_private_keys',\n JSON.stringify(sshTunnelPrivateKey),\n );\n }\n /* The import bundle may contain ssh tunnel private_key_password; if required\n * they should be provided by the user during import.\n */\n if (sshTunnelPrivateKeyPasswords) {\n formData.append(\n 'ssh_tunnel_private_key_passwords',\n JSON.stringify(sshTunnelPrivateKeyPasswords),\n );\n }\n\n return SupersetClient.post({\n endpoint: `/api/v1/${resourceName}/import/`,\n body: formData,\n headers: { Accept: 'application/json' },\n })\n .then(() => {\n updateState({\n passwordsNeeded: [],\n alreadyExists: [],\n sshPasswordNeeded: [],\n sshPrivateKeyNeeded: [],\n sshPrivateKeyPasswordNeeded: [],\n failed: false,\n });\n return true;\n })\n .catch(response =>\n getClientErrorObject(response).then(error => {\n updateState({\n failed: true,\n });\n if (!error.errors) {\n handleErrorMsg(\n t(\n 'An error occurred while importing %s: %s',\n resourceLabel,\n error.message || error.error,\n ),\n );\n return false;\n }\n if (hasTerminalValidation(error.errors)) {\n handleErrorMsg(\n t(\n 'An error occurred while importing %s: %s',\n resourceLabel,\n [\n ...error.errors.map(payload => payload.message),\n RE_EXPORT_TEXT,\n ].join('.\\n'),\n ),\n );\n } else {\n updateState({\n passwordsNeeded: getPasswordsNeeded(error.errors),\n sshPasswordNeeded: getSSHPasswordsNeeded(error.errors),\n sshPrivateKeyNeeded: getSSHPrivateKeysNeeded(error.errors),\n sshPrivateKeyPasswordNeeded: getSSHPrivateKeyPasswordsNeeded(\n error.errors,\n ),\n alreadyExists: getAlreadyExists(error.errors),\n });\n }\n return false;\n }),\n )\n .finally(() => {\n updateState({ loading: false });\n });\n },\n [],\n );\n\n return { state, importResource };\n}\n\ntype FavoriteStatusResponse = {\n result: Array<{\n id: string;\n value: boolean;\n }>;\n};\n\nconst favoriteApis = {\n chart: makeApi, FavoriteStatusResponse>({\n requestType: 'rison',\n method: 'GET',\n endpoint: '/api/v1/chart/favorite_status/',\n }),\n dashboard: makeApi, FavoriteStatusResponse>({\n requestType: 'rison',\n method: 'GET',\n endpoint: '/api/v1/dashboard/favorite_status/',\n }),\n tag: makeApi, FavoriteStatusResponse>({\n requestType: 'rison',\n method: 'GET',\n endpoint: '/api/v1/tag/favorite_status/',\n }),\n};\n\nexport function useFavoriteStatus(\n type: 'chart' | 'dashboard' | 'tag',\n ids: Array,\n handleErrorMsg: (message: string) => void,\n) {\n const [favoriteStatus, setFavoriteStatus] = useState({});\n\n const updateFavoriteStatus = (update: FavoriteStatus) =>\n setFavoriteStatus(currentState => ({ ...currentState, ...update }));\n\n useEffect(() => {\n if (!ids.length) {\n return;\n }\n favoriteApis[type](ids).then(\n ({ result }) => {\n const update = result.reduce((acc, element) => {\n acc[element.id] = element.value;\n return acc;\n }, {});\n updateFavoriteStatus(update);\n },\n createErrorHandler(errMsg =>\n handleErrorMsg(\n t('There was an error fetching the favorite status: %s', errMsg),\n ),\n ),\n );\n }, [ids, type, handleErrorMsg]);\n\n const saveFaveStar = useCallback(\n (id: number, isStarred: boolean) => {\n const endpoint = `/api/v1/${type}/${id}/favorites/`;\n const apiCall = isStarred\n ? SupersetClient.delete({\n endpoint,\n })\n : SupersetClient.post({ endpoint });\n\n apiCall.then(\n () => {\n updateFavoriteStatus({\n [id]: !isStarred,\n });\n },\n createErrorHandler(errMsg =>\n handleErrorMsg(\n t('There was an error saving the favorite status: %s', errMsg),\n ),\n ),\n );\n },\n [type],\n );\n\n return [saveFaveStar, favoriteStatus] as const;\n}\n\nexport const useChartEditModal = (\n setCharts: (charts: Array) => void,\n charts: Array,\n) => {\n const [sliceCurrentlyEditing, setSliceCurrentlyEditing] =\n useState(null);\n\n function openChartEditModal(chart: Chart) {\n setSliceCurrentlyEditing({\n slice_id: chart.id,\n slice_name: chart.slice_name,\n description: chart.description,\n cache_timeout: chart.cache_timeout,\n certified_by: chart.certified_by,\n certification_details: chart.certification_details,\n is_managed_externally: chart.is_managed_externally,\n });\n }\n\n function closeChartEditModal() {\n setSliceCurrentlyEditing(null);\n }\n\n function handleChartUpdated(edits: Chart) {\n // update the chart in our state with the edited info\n const newCharts = charts.map((chart: Chart) =>\n chart.id === edits.id ? { ...chart, ...edits } : chart,\n );\n setCharts(newCharts);\n }\n\n return {\n sliceCurrentlyEditing,\n handleChartUpdated,\n openChartEditModal,\n closeChartEditModal,\n };\n};\n\nexport const copyQueryLink = (\n id: number,\n addDangerToast: (arg0: string) => void,\n addSuccessToast: (arg0: string) => void,\n) => {\n copyTextToClipboard(() =>\n Promise.resolve(`${window.location.origin}/sqllab?savedQueryId=${id}`),\n )\n .then(() => {\n addSuccessToast(t('Link Copied!'));\n })\n .catch(() => {\n addDangerToast(t('Sorry, your browser does not support copying.'));\n });\n};\n\nexport const getDatabaseImages = () => SupersetText.DB_IMAGES;\n\nexport const getConnectionAlert = () => SupersetText.DB_CONNECTION_ALERTS;\nexport const getDatabaseDocumentationLinks = () =>\n SupersetText.DB_CONNECTION_DOC_LINKS;\n\nexport const testDatabaseConnection = (\n connection: Partial,\n handleErrorMsg: (errorMsg: string) => void,\n addSuccessToast: (arg0: string) => void,\n) => {\n SupersetClient.post({\n endpoint: 'api/v1/database/test_connection/',\n body: JSON.stringify(connection),\n headers: { 'Content-Type': 'application/json' },\n }).then(\n () => {\n addSuccessToast(t('Connection looks good!'));\n },\n createErrorHandler((errMsg: Record | string) => {\n handleErrorMsg(t('ERROR: %s', parsedErrorMessage(errMsg)));\n }),\n );\n};\n\nexport function useAvailableDatabases() {\n const [availableDbs, setAvailableDbs] = useState(null);\n\n const getAvailable = useCallback(() => {\n SupersetClient.get({\n endpoint: `/api/v1/database/available/`,\n }).then(({ json }) => {\n setAvailableDbs(json);\n });\n }, [setAvailableDbs]);\n\n return [availableDbs, getAvailable] as const;\n}\n\nconst transformDB = (db: Partial | null) => {\n if (db && Array.isArray(db?.catalog)) {\n return {\n ...db,\n catalog: Object.assign(\n {},\n ...db.catalog.map((x: { name: string; value: string }) => ({\n [x.name]: x.value,\n })),\n ),\n };\n }\n return db;\n};\n\nexport function useDatabaseValidation() {\n const [validationErrors, setValidationErrors] = useState(\n null,\n );\n const getValidation = useCallback(\n (database: Partial | null, onCreate = false) => {\n if (database?.parameters?.ssh) {\n // TODO: /validate_parameters/ and related utils should support ssh tunnel\n setValidationErrors(null);\n return [];\n }\n\n return (\n SupersetClient.post({\n endpoint: '/api/v1/database/validate_parameters/',\n body: JSON.stringify(transformDB(database)),\n headers: { 'Content-Type': 'application/json' },\n })\n .then(() => {\n setValidationErrors(null);\n })\n // eslint-disable-next-line consistent-return\n .catch(e => {\n if (typeof e.json === 'function') {\n return e.json().then(({ errors = [] }: JsonObject) => {\n const parsedErrors = errors\n .filter((error: { error_type: string }) => {\n const skipValidationError = ![\n 'CONNECTION_MISSING_PARAMETERS_ERROR',\n 'CONNECTION_ACCESS_DENIED_ERROR',\n ].includes(error.error_type);\n return skipValidationError || onCreate;\n })\n .reduce(\n (\n obj: {},\n {\n error_type,\n extra,\n message,\n }: {\n error_type: string;\n extra: {\n invalid?: string[];\n missing?: string[];\n name: string;\n catalog: {\n name: string;\n url: string;\n idx: number;\n };\n issue_codes?: {\n code?: number;\n message?: string;\n }[];\n };\n message: string;\n },\n ) => {\n if (extra.catalog) {\n if (extra.catalog.name) {\n return {\n ...obj,\n error_type,\n [extra.catalog.idx]: {\n name: message,\n },\n };\n }\n if (extra.catalog.url) {\n return {\n ...obj,\n error_type,\n [extra.catalog.idx]: {\n url: message,\n },\n };\n }\n\n return {\n ...obj,\n error_type,\n [extra.catalog.idx]: {\n name: message,\n url: message,\n },\n };\n }\n // if extra.invalid doesn't exist then the\n // error can't be mapped to a parameter\n // so leave it alone\n if (extra.invalid) {\n return {\n ...obj,\n [extra.invalid[0]]: message,\n error_type,\n };\n }\n if (extra.missing) {\n return {\n ...obj,\n error_type,\n ...Object.assign(\n {},\n ...extra.missing.map(field => ({\n [field]: 'This is a required field',\n })),\n ),\n };\n }\n if (extra.issue_codes?.length) {\n return {\n ...obj,\n error_type,\n description: message || extra.issue_codes[0]?.message,\n };\n }\n\n return obj;\n },\n {},\n );\n setValidationErrors(parsedErrors);\n return parsedErrors;\n });\n }\n // eslint-disable-next-line no-console\n console.error(e);\n })\n );\n },\n [setValidationErrors],\n );\n\n return [validationErrors, getValidation, setValidationErrors] as const;\n}\n\nexport const reportSelector = (\n state: Record,\n resourceType: string,\n resourceId?: number,\n) => {\n if (resourceId) {\n return state.reports[resourceType]?.[resourceId];\n }\n return null;\n};\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nimport { QueryState } from '@superset-ui/core';\nimport { User } from 'src/types/bootstrapTypes';\nimport Database from 'src/types/Database';\nimport Owner from 'src/types/Owner';\n\nexport type FavoriteStatus = {\n [id: number]: boolean;\n};\n\nexport enum TableTab {\n Favorite = 'Favorite',\n Mine = 'Mine',\n Other = 'Other',\n Viewed = 'Viewed',\n Created = 'Created',\n Edited = 'Edited',\n}\n\nexport type Filter = {\n col: string;\n opr: string;\n value: string | number;\n};\n\nexport interface DashboardTableProps {\n addDangerToast: (message: string) => void;\n addSuccessToast: (message: string) => void;\n user?: User;\n mine: Array;\n showThumbnails?: boolean;\n otherTabData: Array;\n otherTabFilters: Filter[];\n otherTabTitle: string;\n}\n\nexport interface Dashboard {\n certified_by?: string;\n certification_details?: string;\n changed_by_name: string;\n changed_on_delta_humanized?: string;\n changed_on_utc?: string;\n changed_by: string;\n dashboard_title: string;\n slice_name?: string;\n id: number;\n published: boolean;\n url: string;\n thumbnail_url: string;\n owners: Owner[];\n loading?: boolean;\n}\n\nexport type SavedQueryObject = {\n id: number;\n changed_on: string;\n changed_on_delta_humanized: string;\n database: {\n database_name: string;\n id: number;\n };\n db_id: number;\n description?: string;\n label: string;\n schema: string;\n sql: string | null;\n sql_tables?: { catalog?: string; schema: string; table: string }[];\n};\n\nexport interface QueryObject {\n id: number;\n changed_on: string;\n database: {\n database_name: string;\n };\n schema: string;\n sql: string;\n executed_sql: string | null;\n sql_tables?: { catalog?: string; schema: string; table: string }[];\n status: QueryState;\n tab_name: string;\n user: {\n first_name: string;\n id: number;\n last_name: string;\n username: string;\n };\n start_time: number;\n end_time: number;\n rows: number;\n tmp_table_name: string;\n tracking_url: string;\n}\n\nexport enum QueryObjectColumns {\n Id = 'id',\n ChangedOn = 'changed_on',\n ChangedBy = 'changed_by',\n Database = 'database',\n DatabaseName = 'database.database_name',\n Schema = 'schema',\n Sql = 'sql',\n ExecutedSql = 'executed_sql',\n SqlTables = 'sql_tables',\n Status = 'status',\n TabName = 'tab_name',\n User = 'user',\n UserFirstName = 'user.first_name',\n StartTime = 'start_time',\n EndTime = 'end_time',\n Rows = 'rows',\n TmpTableName = 'tmp_table_name',\n TrackingUrl = 'tracking_url',\n}\n\nexport type ImportResourceName =\n | 'chart'\n | 'dashboard'\n | 'database'\n | 'dataset'\n | 'saved_query';\n\nexport interface Tag {\n changed_on_delta_humanized: string;\n changed_by: Owner;\n created_on_delta_humanized: string;\n name: string;\n id: number;\n created_by: Owner;\n description: string;\n type: string;\n}\n\nexport type DatabaseObject = Partial &\n Pick;\n","/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport {\n css,\n logging,\n styled,\n SupersetClient,\n SupersetClientResponse,\n SupersetTheme,\n getClientErrorObject,\n t,\n} from '@superset-ui/core';\nimport Chart from 'src/types/Chart';\nimport { intersection } from 'lodash';\nimport rison from 'rison';\nimport { FetchDataConfig, FilterValue } from 'src/components/ListView';\nimport SupersetText from 'src/utils/textUtils';\nimport { findPermission } from 'src/utils/findPermission';\nimport { User } from 'src/types/bootstrapTypes';\nimport { WelcomeTable } from 'src/features/home/types';\nimport { Dashboard, Filter, TableTab } from './types';\n\n// Modifies the rison encoding slightly to match the backend's rison encoding/decoding. Applies globally.\n// Code pulled from rison.js (https://github.com/Nanonid/rison), rison is licensed under the MIT license.\n(() => {\n const risonRef: {\n not_idchar: string;\n not_idstart: string;\n id_ok: RegExp;\n next_id: RegExp;\n } = rison as any;\n\n const l = [];\n for (let hi = 0; hi < 16; hi += 1) {\n for (let lo = 0; lo < 16; lo += 1) {\n if (hi + lo === 0) continue;\n const c = String.fromCharCode(hi * 16 + lo);\n if (!/\\w|[-_./~]/.test(c))\n l.push(`\\\\u00${hi.toString(16)}${lo.toString(16)}`);\n }\n }\n\n risonRef.not_idchar = l.join('');\n risonRef.not_idstart = '-0123456789';\n\n const idrx = `[^${risonRef.not_idstart}${risonRef.not_idchar}][^${risonRef.not_idchar}]*`;\n\n risonRef.id_ok = new RegExp(`^${idrx}$`);\n risonRef.next_id = new RegExp(idrx, 'g');\n})();\n\nexport const Actions = styled.div`\n color: ${({ theme }) => theme.colors.grayscale.base};\n`;\n\nconst createFetchResourceMethod =\n (method: string) =>\n (\n resource: string,\n relation: string,\n handleError: (error: Response) => void,\n user?: { userId: string | number; firstName: string; lastName: string },\n ) =>\n async (filterValue = '', page: number, pageSize: number) => {\n const resourceEndpoint = `/api/v1/${resource}/${method}/${relation}`;\n const queryParams = rison.encode_uri({\n filter: filterValue,\n page,\n page_size: pageSize,\n });\n const { json = {} } = await SupersetClient.get({\n endpoint: `${resourceEndpoint}?q=${queryParams}`,\n });\n\n let fetchedLoggedUser = false;\n const loggedUser = user\n ? {\n label: `${user.firstName} ${user.lastName}`,\n value: user.userId,\n }\n : undefined;\n\n const data: { label: string; value: string | number }[] = [];\n json?.result\n ?.filter(({ text }: { text: string }) => text.trim().length > 0)\n .forEach(({ text, value }: { text: string; value: string | number }) => {\n if (\n loggedUser &&\n value === loggedUser.value &&\n text === loggedUser.label\n ) {\n fetchedLoggedUser = true;\n } else {\n data.push({\n label: text,\n value,\n });\n }\n });\n\n if (loggedUser && (!filterValue || fetchedLoggedUser)) {\n data.unshift(loggedUser);\n }\n\n return {\n data,\n totalCount: json?.count,\n };\n };\n\nexport const PAGE_SIZE = 5;\nconst getParams = (filters?: Filter[], selectColumns?: string[]) => {\n const params = {\n order_column: 'changed_on_delta_humanized',\n order_direction: 'desc',\n page: 0,\n page_size: PAGE_SIZE,\n filters,\n select_columns: selectColumns,\n };\n if (!filters) delete params.filters;\n if (!selectColumns) delete params.select_columns;\n return rison.encode(params);\n};\n\nexport const getEditedObjects = (userId: string | number) => {\n const filters = {\n edited: [\n {\n col: 'changed_by',\n opr: 'rel_o_m',\n value: `${userId}`,\n },\n ],\n };\n const batch = [\n SupersetClient.get({\n endpoint: `/api/v1/dashboard/?q=${getParams(filters.edited)}`,\n }),\n SupersetClient.get({\n endpoint: `/api/v1/chart/?q=${getParams(filters.edited)}`,\n }),\n ];\n return Promise.all(batch)\n .then(([editedCharts, editedDashboards]) => {\n const res = {\n editedDash: editedDashboards.json?.result.slice(0, 3),\n editedChart: editedCharts.json?.result.slice(0, 3),\n };\n return res;\n })\n .catch(err => err);\n};\n\nexport const getUserOwnedObjects = (\n userId: string | number,\n resource: string,\n filters: Filter[] = [\n {\n col: 'owners',\n opr: 'rel_m_m',\n value: `${userId}`,\n },\n ],\n selectColumns?: string[],\n) =>\n SupersetClient.get({\n endpoint: `/api/v1/${resource}/?q=${getParams(filters, selectColumns)}`,\n }).then(res => res.json?.result);\n\nexport const getFilteredChartsandDashboards = (\n addDangerToast: (arg1: string, arg2: any) => any,\n filters: Filter[],\n dashboardSelectColumns?: string[],\n chartSelectColumns?: string[],\n) => {\n const newBatch = [\n SupersetClient.get({\n endpoint: `/api/v1/chart/?q=${getParams(filters, chartSelectColumns)}`,\n }),\n SupersetClient.get({\n endpoint: `/api/v1/dashboard/?q=${getParams(\n filters,\n dashboardSelectColumns,\n )}`,\n }),\n ];\n return Promise.all(newBatch)\n .then(([chartRes, dashboardRes]) => ({\n other: [...chartRes.json.result, ...dashboardRes.json.result],\n }))\n .catch(errMsg => {\n addDangerToast(\n t('There was an error fetching the filtered charts and dashboards:'),\n errMsg,\n );\n return { other: [] };\n });\n};\n\nexport const getRecentActivityObjs = (\n userId: string | number,\n recent: string,\n addDangerToast: (arg1: string, arg2: any) => any,\n filters: Filter[],\n) =>\n SupersetClient.get({ endpoint: recent }).then(recentsRes => {\n const res: any = {};\n return getFilteredChartsandDashboards(addDangerToast, filters).then(\n ({ other }) => {\n res.other = other;\n res.viewed = recentsRes.json.result;\n return res;\n },\n );\n });\n\nexport const createFetchRelated = createFetchResourceMethod('related');\nexport const createFetchDistinct = createFetchResourceMethod('distinct');\n\nexport function createErrorHandler(\n handleErrorFunc: (\n errMsg?: string | Record,\n ) => void,\n) {\n return async (e: SupersetClientResponse | string) => {\n const parsedError = await getClientErrorObject(e);\n // Taking the first error returned from the API\n // @ts-ignore\n const errorsArray = parsedError?.errors;\n const config = await SupersetText;\n if (\n errorsArray?.length &&\n config?.ERRORS &&\n errorsArray[0].error_type in config.ERRORS\n ) {\n parsedError.message = config.ERRORS[errorsArray[0].error_type];\n }\n logging.error(e);\n handleErrorFunc(parsedError.message || parsedError.error);\n };\n}\n\nexport function handleChartDelete(\n { id, slice_name: sliceName }: Chart,\n addSuccessToast: (arg0: string) => void,\n addDangerToast: (arg0: string) => void,\n refreshData: (arg0?: FetchDataConfig | null) => void,\n chartFilter?: string,\n userId?: string | number,\n) {\n const filters = {\n pageIndex: 0,\n pageSize: PAGE_SIZE,\n sortBy: [\n {\n id: 'changed_on_delta_humanized',\n desc: true,\n },\n ],\n filters: [\n {\n id: 'created_by',\n operator: 'rel_o_m',\n value: `${userId}`,\n },\n ],\n };\n SupersetClient.delete({\n endpoint: `/api/v1/chart/${id}`,\n }).then(\n () => {\n if (chartFilter === 'Mine') refreshData(filters);\n else refreshData();\n addSuccessToast(t('Deleted: %s', sliceName));\n },\n () => {\n addDangerToast(t('There was an issue deleting: %s', sliceName));\n },\n );\n}\n\nexport function handleDashboardDelete(\n { id, dashboard_title: dashboardTitle }: Dashboard,\n refreshData: (config?: FetchDataConfig | null) => void,\n addSuccessToast: (arg0: string) => void,\n addDangerToast: (arg0: string) => void,\n dashboardFilter?: string,\n userId?: string | number,\n) {\n return SupersetClient.delete({\n endpoint: `/api/v1/dashboard/${id}`,\n }).then(\n () => {\n const filters = {\n pageIndex: 0,\n pageSize: PAGE_SIZE,\n sortBy: [\n {\n id: 'changed_on_delta_humanized',\n desc: true,\n },\n ],\n filters: [\n {\n id: 'owners',\n operator: 'rel_m_m',\n value: `${userId}`,\n },\n ],\n };\n if (dashboardFilter === 'Mine') refreshData(filters);\n else refreshData();\n addSuccessToast(t('Deleted: %s', dashboardTitle));\n },\n createErrorHandler(errMsg =>\n addDangerToast(\n t('There was an issue deleting %s: %s', dashboardTitle, errMsg),\n ),\n ),\n );\n}\n\nexport function shortenSQL(sql: string, maxLines: number) {\n let lines: string[] = sql.split('\\n');\n if (lines.length >= maxLines) {\n lines = lines.slice(0, maxLines);\n lines.push('...');\n }\n return lines.join('\\n');\n}\n\n// loading card count for homepage\nexport const loadingCardCount = 5;\n\nconst breakpoints = [576, 768, 992, 1200];\nexport const mq = breakpoints.map(bp => `@media (max-width: ${bp}px)`);\n\nexport const CardContainer = styled.div<{\n showThumbnails?: boolean | undefined;\n}>`\n ${({ showThumbnails, theme }) => `\n overflow: hidden;\n display: grid;\n grid-gap: ${theme.gridUnit * 12}px ${theme.gridUnit * 4}px;\n grid-template-columns: repeat(auto-fit, 300px);\n max-height: ${showThumbnails ? '314' : '148'}px;\n margin-top: ${theme.gridUnit * -6}px;\n padding: ${\n showThumbnails\n ? `${theme.gridUnit * 8 + 3}px ${theme.gridUnit * 9}px`\n : `${theme.gridUnit * 8 + 1}px ${theme.gridUnit * 9}px`\n };\n `}\n`;\n\nexport const CardStyles = styled.div`\n cursor: pointer;\n a {\n text-decoration: none;\n }\n .ant-card-cover > div {\n /* Height is calculated based on 300px width, to keep the same aspect ratio as the 800*450 thumbnails */\n height: 168px;\n }\n`;\n\nexport const StyledIcon = (theme: SupersetTheme) => css`\n margin: auto ${theme.gridUnit * 2}px auto 0;\n color: ${theme.colors.grayscale.base};\n`;\n\nexport /* eslint-disable no-underscore-dangle */\nconst isNeedsPassword = (payload: any) =>\n typeof payload === 'object' &&\n Array.isArray(payload._schema) &&\n !!payload._schema?.find(\n (e: string) => e === 'Must provide a password for the database',\n );\n\nexport /* eslint-disable no-underscore-dangle */\nconst isNeedsSSHPassword = (payload: any) =>\n typeof payload === 'object' &&\n Array.isArray(payload._schema) &&\n !!payload._schema?.find(\n (e: string) => e === 'Must provide a password for the ssh tunnel',\n );\n\nexport /* eslint-disable no-underscore-dangle */\nconst isNeedsSSHPrivateKey = (payload: any) =>\n typeof payload === 'object' &&\n Array.isArray(payload._schema) &&\n !!payload._schema?.find(\n (e: string) => e === 'Must provide a private key for the ssh tunnel',\n );\n\nexport /* eslint-disable no-underscore-dangle */\nconst isNeedsSSHPrivateKeyPassword = (payload: any) =>\n typeof payload === 'object' &&\n Array.isArray(payload._schema) &&\n !!payload._schema?.find(\n (e: string) =>\n e === 'Must provide a private key password for the ssh tunnel',\n );\n\nexport const isAlreadyExists = (payload: any) =>\n typeof payload === 'string' &&\n payload.includes('already exists and `overwrite=true` was not passed');\n\nexport const getPasswordsNeeded = (errors: Record[]) =>\n errors\n .map(error =>\n Object.entries(error.extra)\n .filter(([, payload]) => isNeedsPassword(payload))\n .map(([fileName]) => fileName),\n )\n .flat();\n\nexport const getSSHPasswordsNeeded = (errors: Record[]) =>\n errors\n .map(error =>\n Object.entries(error.extra)\n .filter(([, payload]) => isNeedsSSHPassword(payload))\n .map(([fileName]) => fileName),\n )\n .flat();\n\nexport const getSSHPrivateKeysNeeded = (errors: Record[]) =>\n errors\n .map(error =>\n Object.entries(error.extra)\n .filter(([, payload]) => isNeedsSSHPrivateKey(payload))\n .map(([fileName]) => fileName),\n )\n .flat();\n\nexport const getSSHPrivateKeyPasswordsNeeded = (\n errors: Record[],\n) =>\n errors\n .map(error =>\n Object.entries(error.extra)\n .filter(([, payload]) => isNeedsSSHPrivateKeyPassword(payload))\n .map(([fileName]) => fileName),\n )\n .flat();\n\nexport const getAlreadyExists = (errors: Record[]) =>\n errors\n .map(error =>\n Object.entries(error.extra)\n .filter(([, payload]) => isAlreadyExists(payload))\n .map(([fileName]) => fileName),\n )\n .flat();\n\nexport const hasTerminalValidation = (errors: Record[]) =>\n errors.some(error => {\n const noIssuesCodes = Object.entries(error.extra).filter(\n ([key]) => key !== 'issue_codes',\n );\n\n if (noIssuesCodes.length === 0) return true;\n\n return !noIssuesCodes.every(\n ([, payload]) =>\n isNeedsPassword(payload) ||\n isAlreadyExists(payload) ||\n isNeedsSSHPassword(payload) ||\n isNeedsSSHPrivateKey(payload) ||\n isNeedsSSHPrivateKeyPassword(payload),\n );\n });\n\nexport const checkUploadExtensions = (\n perm: Array,\n cons: Array,\n) => {\n if (perm !== undefined) {\n return intersection(perm, cons).length > 0;\n }\n return false;\n};\n\nexport const uploadUserPerms = (\n roles: Record,\n csvExt: Array,\n colExt: Array,\n excelExt: Array,\n allowedExt: Array,\n) => {\n const canUploadCSV =\n findPermission('can_csv_upload', 'Database', roles) &&\n checkUploadExtensions(csvExt, allowedExt);\n const canUploadColumnar =\n checkUploadExtensions(colExt, allowedExt) &&\n findPermission('can_columnar_upload', 'Database', roles);\n const canUploadExcel =\n checkUploadExtensions(excelExt, allowedExt) &&\n findPermission('can_excel_upload', 'Database', roles);\n return {\n canUploadCSV,\n canUploadColumnar,\n canUploadExcel,\n canUploadData: canUploadCSV || canUploadColumnar || canUploadExcel,\n };\n};\n\nexport function getFilterValues(\n tab: TableTab,\n welcomeTable: WelcomeTable,\n user?: User,\n otherTabFilters?: Filter[],\n): FilterValue[] {\n if (\n tab === TableTab.Created ||\n (welcomeTable === WelcomeTable.SavedQueries && tab === TableTab.Mine)\n ) {\n return [\n {\n id: 'created_by',\n operator: 'rel_o_m',\n value: `${user?.userId}`,\n },\n ];\n }\n if (welcomeTable === WelcomeTable.SavedQueries && tab === TableTab.Favorite) {\n return [\n {\n id: 'id',\n operator: 'saved_query_is_fav',\n value: true,\n },\n ];\n }\n if (tab === TableTab.Mine && user) {\n return [\n {\n id: 'owners',\n operator: 'rel_m_m',\n value: `${user.userId}`,\n },\n ];\n }\n if (\n tab === TableTab.Favorite &&\n [WelcomeTable.Dashboards, WelcomeTable.Charts].includes(welcomeTable)\n ) {\n return [\n {\n id: 'id',\n operator:\n welcomeTable === WelcomeTable.Dashboards\n ? 'dashboard_is_favorite'\n : 'chart_is_favorite',\n value: true,\n },\n ];\n }\n if (tab === TableTab.Other) {\n return (otherTabFilters || []).map(flt => ({\n id: flt.col,\n operator: flt.opr,\n value: flt.value,\n }));\n }\n return [];\n}\n"],"names":["doc","module","exports","length","Alert","props","type","description","showIcon","closable","roomBelow","children","theme","useTheme","colors","typography","gridUnit","alert","error","info","success","baseColor","AlertIcon","Icons","InfoSolid","ErrorSolid","AlertSolid","CircleCheckSolid","_jsx","AntdAlert","role","icon","closeText","XSmall","css","_css","marginBottom","padding","alignItems","border","backgroundColor","light2","marginRight","color","dark2","fontSize","sizes","m","fontWeight","weights","bold","normal","Tooltip","title","body","meta","footer","_jsxs","className","Tag","getTooltipHTML","renderToStaticMarkup","config","setModuleUrl","cssWorkerUrl","aceModuleLoaders","mode/sql","mode/markdown","mode/css","mode/json","mode/yaml","mode/html","mode/javascript","theme/textmate","theme/github","ext/language_tools","ext/searchbox","AsyncAceEditor","aceModules","defaultMode","defaultTheme","defaultTabSize","fontFamily","placeholder","AsyncEsmComponent","async","_aceModules$find","_aceModules$find2","default","ReactAceEditor","Promise","all","map","x","inferredMode","find","startsWith","replace","inferredTheme","forwardRef","keywords","mode","tabSize","defaultValue","ref","supersetTheme","langTools","acequire","setCompleters","useEffectEvent","completer","getCompletions","editor","session","pos","prefix","callback","Number","isNaN","parseInt","getMode","$id","useEffect","_Fragment","Global","styles","grayscale","light1","light5","light4","dark1","xs","setOptions","SQLEditor","FullSQLEditor","style","height","width","background","MarkdownEditor","TextAreaEditor","CssEditor","JsonEditor","ConfigEditor","DefaultPlaceholder","showLoadingForImport","placeholderStyle","Loading","position","loadComponent","promise","component","waitForPromise","then","result","AsyncComponent","loaded","setLoaded","useState","undefined","isMounted","Component","preload","Object","assign","styled","light","bigger","animateArrows","AntdCollapse","expandIconPosition","ghost","bordered","light3","Panel","Form","Item","s","base","Label","label","RequiredLabel","FormLabel","htmlFor","required","StyledLabel","_path","_extends","bind","n","e","arguments","t","r","hasOwnProperty","call","apply","SvgError","titleId","xmlns","fill","id","fillRule","d","clipRule","StyledInput","Input","StyledInputPassword","Password","StyledFormGroup","StyledAlignment","div","StyledFormLabel","iconReset","LabeledErrorBoundInput","validationMethods","errorMessage","helpText","hasTooltip","tooltipText","visibilityToggle","get_url","InfoTooltip","tooltip","FormItem","alertIconStyles","hasError","errorIcon","validateTrigger","keys","validateStatus","help","hasFeedback","name","iconRender","visible","EyeInvisibleOutlined","iconSize","EyeOutlined","Button","htmlType","buttonStyle","onClick","window","open","StyledForm","AntdForm","GenericLink","to","innerRef","rest","isUrlExternal","href","parseUrl","Link","StyledTooltip","StyledTooltipTitle","span","defaultOverlayStyle","lineHeight","defaultColor","iconStyle","placement","trigger","overlayStyle","bgColor","viewBox","alteredIconStyle","InfoSolidSmall","AntdInput","secondary","borderRadius","InputNumber","AntdInputNumber","TextArea","transitionTiming","primary","warning","backgroundColorHover","borderColor","borderColorHover","transition","whiteSpace","cursor","overflow","textOverflow","maxWidth","opacity","MenuItemKeyEnum","isAntdMenuItemRef","_ref$current","_ref$current$props","current","parentMenu","isAntdMenuItem","child","_child$type","displayName","isAntdMenuSubmenu","_child$type2","isSubMenu","isSubMenuOrItemType","SubMenu","SubMenuItem","MenuItem","AntdMenu","StyledNav","StyledSubMenu","Menu","MainNav","Divider","ItemGroup","StyledRadio","AntdRadio","StyledGroup","Radio","Group","StyledSwitch","BaseSwitch","Switch","StyledTabs","animated","fullWidth","allowOverflow","AntdTabs","StyledTabPane","TabPane","Tabs","StyledEditableTabs","StyledCancelXIcon","CancelX","EditableTabs","defaultProps","inkBar","tabPane","closeIcon","tabIndex","StyledLineEditableTabs","LineEditableTabs","useCommonConf","useSelector","state","_state$common","common","conf","WelcomeTable","GlobalMenuDataOptions","loadModule","require","parsedErrorMessage","entries","key","value","Array","isArray","join","useListViewResource","resource","resourceLabel","handleErrorMsg","infoEnable","defaultCollectionValue","baseFilters","initialLoadingState","selectColumns","setState","count","collection","loading","lastFetchDataConfig","permissions","bulkSelectEnabled","updateState","update","currentState","SupersetClient","get","endpoint","rison","json","infoJson","createErrorHandler","errMsg","fetchData","useCallback","pageIndex","pageSize","sortBy","filters","filterValues","filterExps","concat","operator","opr","col","queryParams","order_column","order_direction","desc","page","page_size","select_columns","lastFetched","Date","toISOString","finally","resourceCount","resourceCollection","setResourceCollection","hasPerm","perm","Boolean","p","toggleBulkSelect","refreshData","provideConfig","useSingleViewResource","resourceName","path_suffix","setResource","fetchResource","resourceID","baseEndpoint","createResource","hideToast","post","JSON","stringify","headers","updateResource","setLoading","put","clearError","useImportResource","passwordsNeeded","alreadyExists","sshPasswordNeeded","sshPrivateKeyNeeded","sshPrivateKeyPasswordNeeded","failed","importResource","bundle","databasePasswords","sshTunnelPasswords","sshTunnelPrivateKey","sshTunnelPrivateKeyPasswords","overwrite","formData","FormData","append","RE_EXPORT_TEXT","Accept","catch","response","getClientErrorObject","errors","hasTerminalValidation","payload","message","getPasswordsNeeded","getSSHPasswordsNeeded","getSSHPrivateKeysNeeded","getSSHPrivateKeyPasswordsNeeded","getAlreadyExists","favoriteApis","chart","makeApi","requestType","method","dashboard","tag","useFavoriteStatus","ids","favoriteStatus","setFavoriteStatus","updateFavoriteStatus","reduce","acc","element","isStarred","delete","useChartEditModal","setCharts","charts","sliceCurrentlyEditing","setSliceCurrentlyEditing","handleChartUpdated","edits","newCharts","openChartEditModal","slice_id","slice_name","cache_timeout","certified_by","certification_details","is_managed_externally","closeChartEditModal","copyQueryLink","addDangerToast","addSuccessToast","copyTextToClipboard","resolve","location","origin","getDatabaseImages","SupersetText","DB_IMAGES","getConnectionAlert","DB_CONNECTION_ALERTS","getDatabaseDocumentationLinks","DB_CONNECTION_DOC_LINKS","testDatabaseConnection","connection","useAvailableDatabases","availableDbs","setAvailableDbs","transformDB","db","catalog","useDatabaseValidation","validationErrors","setValidationErrors","database","onCreate","_database$parameters","parameters","ssh","parsedErrors","filter","includes","error_type","obj","extra","_extra$issue_codes","_extra$issue_codes$","idx","url","invalid","missing","field","issue_codes","console","reportSelector","resourceType","resourceId","_state$reports$resour","reports","TableTab","QueryObjectColumns","risonRef","l","hi","lo","c","String","fromCharCode","test","push","toString","not_idchar","not_idstart","idrx","id_ok","RegExp","next_id","Actions","createFetchResourceMethod","relation","handleError","user","filterValue","_json$result","resourceEndpoint","fetchedLoggedUser","loggedUser","firstName","lastName","userId","data","text","trim","forEach","unshift","totalCount","PAGE_SIZE","getParams","params","getEditedObjects","edited","batch","editedCharts","editedDashboards","_editedDashboards$jso","_editedCharts$json","editedDash","slice","editedChart","err","getUserOwnedObjects","res","_res$json","getRecentActivityObjs","recent","recentsRes","getFilteredChartsandDashboards","dashboardSelectColumns","chartSelectColumns","newBatch","chartRes","dashboardRes","other","viewed","createFetchRelated","createFetchDistinct","handleErrorFunc","parsedError","errorsArray","ERRORS","logging","handleChartDelete","sliceName","chartFilter","handleDashboardDelete","dashboard_title","dashboardTitle","dashboardFilter","shortenSQL","sql","maxLines","lines","split","loadingCardCount","mq","bp","CardContainer","showThumbnails","CardStyles","StyledIcon","isNeedsPassword","_payload$_schema","_schema","isNeedsSSHPassword","_payload$_schema2","isNeedsSSHPrivateKey","_payload$_schema3","isNeedsSSHPrivateKeyPassword","_payload$_schema4","isAlreadyExists","fileName","flat","some","noIssuesCodes","every","checkUploadExtensions","cons","_intersection","uploadUserPerms","roles","csvExt","colExt","excelExt","allowedExt","canUploadCSV","findPermission","canUploadColumnar","canUploadExcel","canUploadData","getFilterValues","tab","welcomeTable","otherTabFilters","Created","SavedQueries","Mine","Favorite","Dashboards","Charts","Other","flt"],"sourceRoot":""}