{"version":3,"file":"9041.e6ac21a5154d792b3e1d.entry.js","mappings":"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","sources":["webpack://superset/./src/components/ImportModal/ErrorAlert.tsx","webpack://superset/./src/components/ImportModal/styles.ts","webpack://superset/./src/components/IndeterminateCheckbox/index.tsx","webpack://superset/./src/components/Tags/TagsList.tsx","webpack://superset/./node_modules/react-lines-ellipsis/lib/index.modern.mjs","webpack://superset/./src/components/IconButton/index.tsx","webpack://superset/./src/features/databases/types.ts","webpack://superset/./src/features/databases/DatabaseModal/styles.ts","webpack://superset/./src/features/databases/DatabaseModal/ExtraOptions.tsx","webpack://superset/./src/features/databases/DatabaseModal/SqlAlchemyForm.tsx","webpack://superset/./src/features/databases/DatabaseModal/DatabaseConnectionForm/CommonParameters.tsx","webpack://superset/./src/features/databases/DatabaseModal/DatabaseConnectionForm/ValidatedInputField.tsx","webpack://superset/./src/features/databases/DatabaseModal/DatabaseConnectionForm/EncryptedField.tsx","webpack://superset/./src/features/databases/DatabaseModal/SSHTunnelSwitch.tsx","webpack://superset/./src/features/databases/DatabaseModal/DatabaseConnectionForm/index.tsx","webpack://superset/./src/features/databases/DatabaseModal/DatabaseConnectionForm/TableCatalog.tsx","webpack://superset/./src/features/databases/DatabaseModal/ModalHeader.tsx","webpack://superset/./src/features/databases/DatabaseModal/SSHTunnelForm.tsx","webpack://superset/./src/features/databases/DatabaseModal/index.tsx","webpack://superset/./src/features/databases/UploadDataModel/styles.ts","webpack://superset/./src/features/databases/UploadDataModel/ColumnsPreview.tsx","webpack://superset/./src/features/databases/UploadDataModel/StyledFormItemWithTip.tsx","webpack://superset/./src/features/databases/UploadDataModel/index.tsx","webpack://superset/./src/components/TelemetryPixel/index.tsx","webpack://superset/./src/features/home/LanguagePicker.tsx","webpack://superset/./src/features/home/RightMenu.tsx","webpack://superset/./src/features/home/Menu.tsx","webpack://superset/./src/utils/localStorageHelpers.ts"],"sourcesContent":["/**\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 { FunctionComponent } from 'react';\nimport { t, SupersetTheme } from '@superset-ui/core';\n\nimport { getDatabaseDocumentationLinks } from 'src/views/CRUD/hooks';\nimport Alert from 'src/components/Alert';\nimport { antdWarningAlertStyles } from './styles';\n\nconst supersetTextDocs = getDatabaseDocumentationLinks();\nexport const DOCUMENTATION_LINK = supersetTextDocs\n ? supersetTextDocs.support\n : 'https://superset.apache.org/docs/databases/installing-database-drivers';\n\nexport interface IProps {\n errorMessage: string;\n showDbInstallInstructions: boolean;\n}\n\nconst ErrorAlert: FunctionComponent = ({\n errorMessage,\n showDbInstallInstructions,\n}) => (\n antdWarningAlertStyles(theme)}\n type=\"error\"\n showIcon\n message={errorMessage}\n description={\n showDbInstallInstructions ? (\n <>\n
\n {t(\n 'Database driver for importing maybe not installed. Visit the Superset documentation page for installation instructions: ',\n )}\n \n {t('here')}\n \n .\n \n ) : (\n ''\n )\n }\n />\n);\n\nexport default ErrorAlert;\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 { css, SupersetTheme } from '@superset-ui/core';\n\nexport const antdWarningAlertStyles = (theme: SupersetTheme) => css`\n border: 1px solid ${theme.colors.warning.light1};\n padding: ${theme.gridUnit * 4}px;\n margin: ${theme.gridUnit * 4}px 0;\n color: ${theme.colors.warning.dark2};\n\n .ant-alert-message {\n margin: 0;\n }\n\n .ant-alert-description {\n font-size: ${theme.typography.sizes.s + 1}px;\n line-height: ${theme.gridUnit * 4}px;\n\n .ant-alert-icon {\n margin-right: ${theme.gridUnit * 2.5}px;\n font-size: ${theme.typography.sizes.l + 1}px;\n position: relative;\n top: ${theme.gridUnit / 4}px;\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 {\n EventHandler,\n SyntheticEvent,\n MutableRefObject,\n forwardRef,\n useRef,\n useEffect,\n} from 'react';\n\nimport { styled } from '@superset-ui/core';\nimport Icons from 'src/components/Icons';\n\nexport interface IndeterminateCheckboxProps {\n indeterminate: boolean;\n id: string;\n checked: boolean;\n onChange: EventHandler>;\n title?: string;\n labelText?: string;\n}\n\nconst CheckboxLabel = styled.label`\n cursor: pointer;\n display: inline-block;\n margin-bottom: 0;\n`;\n\nconst CheckboxHalf = styled(Icons.CheckboxHalf)`\n color: ${({ theme }) => theme.colors.primary.base};\n cursor: pointer;\n`;\n\nconst CheckboxOff = styled(Icons.CheckboxOff)`\n color: ${({ theme }) => theme.colors.grayscale.base};\n cursor: pointer;\n`;\n\nconst CheckboxOn = styled(Icons.CheckboxOn)`\n color: ${({ theme }) => theme.colors.primary.base};\n cursor: pointer;\n`;\n\nconst HiddenInput = styled.input`\n &[type='checkbox'] {\n cursor: pointer;\n opacity: 0;\n position: absolute;\n left: 3px;\n margin: 0;\n top: 4px;\n }\n`;\n\nconst InputContainer = styled.div`\n cursor: pointer;\n display: inline-block;\n position: relative;\n`;\n\nconst IndeterminateCheckbox = forwardRef(\n (\n {\n indeterminate,\n id,\n checked,\n onChange,\n title = '',\n labelText = '',\n }: IndeterminateCheckboxProps,\n ref: MutableRefObject,\n ) => {\n const defaultRef = useRef();\n const resolvedRef = ref || defaultRef;\n\n useEffect(() => {\n resolvedRef.current.indeterminate = indeterminate;\n }, [resolvedRef, indeterminate]);\n\n return (\n <>\n \n {indeterminate && }\n {!indeterminate && checked && }\n {!indeterminate && !checked && }\n \n \n \n {labelText}\n \n \n );\n },\n);\n\nexport default IndeterminateCheckbox;\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 { useMemo, useState } from 'react';\nimport { styled } from '@superset-ui/core';\nimport TagType from 'src/types/TagType';\nimport Tag from './Tag';\n\nexport type TagsListProps = {\n tags: TagType[];\n editable?: boolean;\n /**\n * OnDelete:\n * Only applies when editable is true\n * Callback for when a tag is deleted\n */\n onDelete?: ((index: number) => void) | undefined;\n maxTags?: number | undefined;\n};\n\nconst TagsDiv = styled.div`\n max-width: 100%;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n`;\n\nconst TagsList = ({\n tags,\n editable = false,\n onDelete,\n maxTags,\n}: TagsListProps) => {\n const [tempMaxTags, setTempMaxTags] = useState(maxTags);\n\n const handleDelete = (index: number) => {\n onDelete?.(index);\n };\n\n const expand = () => setTempMaxTags(undefined);\n\n const collapse = () => setTempMaxTags(maxTags);\n\n const tagsIsLong: boolean | null = useMemo(\n () => (tempMaxTags ? tags.length > tempMaxTags : null),\n [tags.length, tempMaxTags],\n );\n\n const extraTags: number | null = useMemo(\n () =>\n typeof tempMaxTags === 'number' ? tags.length - tempMaxTags + 1 : null,\n [tagsIsLong, tags.length, tempMaxTags],\n );\n\n return (\n \n {tagsIsLong && typeof tempMaxTags === 'number' ? (\n <>\n {tags.slice(0, tempMaxTags - 1).map((tag: TagType, index) => (\n \n ))}\n {tags.length > tempMaxTags ? (\n t.name).join(', ')}\n />\n ) : null}\n \n ) : (\n <>\n {tags.map((tag: TagType, index) => (\n \n ))}\n {maxTags ? (\n tags.length > maxTags ? (\n \n ) : null\n ) : null}\n \n )}\n \n );\n};\n\nexport default TagsList;\n","import React from 'react';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nconst canvasStyle = {\n position: 'absolute',\n bottom: 0,\n left: 0,\n height: 0,\n overflow: 'hidden',\n 'padding-top': 0,\n 'padding-bottom': 0,\n border: 'none'\n};\nconst mirrorProps = ['box-sizing', 'width', 'font-size', 'font-weight', 'font-family', 'font-style', 'letter-spacing', 'text-indent', 'white-space', 'word-break', 'overflow-wrap', 'padding-left', 'padding-right'];\n\nfunction omit(obj, omittedKeys) {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n const ret = {};\n Object.keys(obj).forEach(key => {\n if (omittedKeys.indexOf(key) > -1) {\n return;\n }\n\n ret[key] = obj[key];\n });\n return ret;\n}\n\nconst _excluded = [\"component\", \"ellipsis\", \"trimRight\", \"className\"];\n\nfunction prevSibling(node, count) {\n while (node && count--) {\n node = node.previousElementSibling;\n }\n\n return node;\n}\n\nconst defaultProps = {\n basedOn: undefined,\n className: '',\n component: 'div',\n ellipsis: '…',\n // …\n maxLine: 1,\n\n onReflow() {},\n\n text: '',\n trimRight: true,\n winWidth: undefined // for the HOC\n\n};\nconst usedProps = Object.keys(defaultProps);\n/**\n * props.text {String} the text you want to clamp\n * props.maxLine {Number|String} max lines allowed\n * props.ellipsis {String} the ellipsis indicator\n * props.trimRight {Boolean} should we trimRight the clamped text?\n * props.basedOn {String} letters|words\n * props.className {String}\n */\n\nclass LinesEllipsis extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n text: props.text,\n clamped: false\n };\n this.units = [];\n this.maxLine = 0;\n this.canvas = null;\n }\n\n componentDidMount() {\n this.initCanvas();\n this.reflow(this.props);\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.winWidth !== this.props.winWidth) {\n this.copyStyleToCanvas();\n }\n\n if (this.props !== prevProps) {\n this.reflow(this.props);\n }\n }\n\n componentWillUnmount() {\n if (this.canvas) {\n this.canvas.parentNode.removeChild(this.canvas);\n this.canvas = null;\n }\n }\n\n setState(state, callback) {\n if (typeof state.clamped !== 'undefined') {\n this.clamped = state.clamped;\n }\n\n return super.setState(state, callback);\n }\n\n initCanvas() {\n if (this.canvas) return;\n const canvas = this.canvas = document.createElement('div');\n canvas.className = `LinesEllipsis-canvas ${this.props.className}`;\n canvas.setAttribute('aria-hidden', 'true');\n this.copyStyleToCanvas();\n Object.keys(canvasStyle).forEach(key => {\n canvas.style[key] = canvasStyle[key];\n });\n document.body.appendChild(canvas);\n }\n\n copyStyleToCanvas() {\n const targetStyle = window.getComputedStyle(this.target);\n mirrorProps.forEach(key => {\n this.canvas.style[key] = targetStyle[key];\n });\n }\n\n reflow(props) {\n /* eslint-disable no-control-regex */\n const basedOn = props.basedOn || (/^[\\x00-\\x7F]+$/.test(props.text) ? 'words' : 'letters');\n\n switch (basedOn) {\n case 'words':\n this.units = props.text.split(/\\b|(?=\\W)/);\n break;\n\n case 'letters':\n this.units = Array.from(props.text);\n break;\n\n default:\n throw new Error(`Unsupported options basedOn: ${basedOn}`);\n }\n\n this.maxLine = +props.maxLine || 1;\n this.canvas.innerHTML = this.units.map(c => {\n return `${c}`;\n }).join('');\n const ellipsisIndex = this.putEllipsis(this.calcIndexes());\n const clamped = ellipsisIndex > -1;\n const newState = {\n clamped,\n text: clamped ? this.units.slice(0, ellipsisIndex).join('') : props.text\n };\n this.setState(newState, props.onReflow.bind(this, newState));\n }\n\n calcIndexes() {\n const indexes = [0];\n let elt = this.canvas.firstElementChild;\n if (!elt) return indexes;\n let index = 0;\n let line = 1;\n let offsetTop = elt.offsetTop;\n\n while (elt = elt.nextElementSibling) {\n if (elt.offsetTop > offsetTop) {\n line++;\n indexes.push(index);\n offsetTop = elt.offsetTop;\n }\n\n index++;\n\n if (line > this.maxLine) {\n break;\n }\n }\n\n return indexes;\n }\n\n putEllipsis(indexes) {\n if (indexes.length <= this.maxLine) return -1;\n const lastIndex = indexes[this.maxLine];\n const units = this.units.slice(0, lastIndex);\n const maxOffsetTop = this.canvas.children[lastIndex].offsetTop;\n this.canvas.innerHTML = units.map((c, i) => {\n return `${c}`;\n }).join('') + `${this.props.ellipsis}`;\n const ndEllipsis = this.canvas.lastElementChild;\n let ndPrevUnit = prevSibling(ndEllipsis, 2);\n\n while (ndPrevUnit && (ndEllipsis.offsetTop > maxOffsetTop || // IE & Edge: doesn't support \n ndEllipsis.offsetHeight > ndPrevUnit.offsetHeight || ndEllipsis.offsetTop > ndPrevUnit.offsetTop)) {\n this.canvas.removeChild(ndPrevUnit);\n ndPrevUnit = prevSibling(ndEllipsis, 2);\n units.pop();\n }\n\n return units.length;\n } // expose\n\n\n isClamped() {\n return this.clamped; // do not use state.clamped. #27\n }\n\n render() {\n const {\n text,\n clamped\n } = this.state;\n\n const _this$props = this.props,\n {\n component: Component,\n ellipsis,\n trimRight,\n className\n } = _this$props,\n rest = _objectWithoutPropertiesLoose(_this$props, _excluded);\n\n return /*#__PURE__*/React.createElement(Component, _extends({\n className: `LinesEllipsis ${clamped ? 'LinesEllipsis--clamped' : ''} ${className}`,\n ref: node => this.target = node\n }, omit(rest, usedProps)), clamped && trimRight ? text.replace(/[\\s\\uFEFF\\xA0]+$/, '') : text, /*#__PURE__*/React.createElement(\"wbr\", null), clamped && /*#__PURE__*/React.createElement(\"span\", {\n className: \"LinesEllipsis-ellipsis\"\n }, ellipsis));\n }\n\n}\n\nLinesEllipsis.defaultProps = defaultProps;\n\nexport { LinesEllipsis as default };\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 Button from 'src/components/Button';\nimport { ButtonProps as AntdButtonProps } from 'antd/lib/button';\nimport Icons from 'src/components/Icons';\nimport LinesEllipsis from 'react-lines-ellipsis';\n\nexport interface IconButtonProps extends AntdButtonProps {\n buttonText: string;\n icon: string;\n altText?: string;\n}\n\nconst StyledButton = styled(Button)`\n height: auto;\n display: flex;\n flex-direction: column;\n padding: 0;\n`;\n\nconst StyledImage = styled.div`\n padding: ${({ theme }) => theme.gridUnit * 4}px;\n height: ${({ theme }) => theme.gridUnit * 18}px;\n margin: ${({ theme }) => theme.gridUnit * 3}px 0;\n\n .default-db-icon {\n font-size: 36px;\n color: ${({ theme }) => theme.colors.grayscale.base};\n margin-right: 0;\n span:first-of-type {\n margin-right: 0;\n }\n }\n\n &:first-of-type {\n margin-right: 0;\n }\n\n img {\n width: ${({ theme }) => theme.gridUnit * 10}px;\n height: ${({ theme }) => theme.gridUnit * 10}px;\n margin: 0;\n &:first-of-type {\n margin-right: 0;\n }\n }\n svg {\n &:first-of-type {\n margin-right: 0;\n }\n }\n`;\n\nconst StyledInner = styled.div`\n max-height: calc(1.5em * 2);\n white-space: break-spaces;\n\n &:first-of-type {\n margin-right: 0;\n }\n\n .LinesEllipsis {\n &:first-of-type {\n margin-right: 0;\n }\n }\n`;\n\nconst StyledBottom = styled.div`\n padding: ${({ theme }) => theme.gridUnit * 4}px 0;\n border-radius: 0 0 ${({ theme }) => theme.borderRadius}px\n ${({ theme }) => theme.borderRadius}px;\n background-color: ${({ theme }) => theme.colors.grayscale.light4};\n width: 100%;\n line-height: 1.5em;\n overflow: hidden;\n white-space: no-wrap;\n text-overflow: ellipsis;\n\n &:first-of-type {\n margin-right: 0;\n }\n`;\n\nconst IconButton = styled(\n ({ icon, altText, buttonText, ...props }: IconButtonProps) => (\n \n \n {icon && {altText}}\n {!icon && (\n \n )}\n \n\n \n \n \n \n \n \n ),\n)`\n text-transform: none;\n background-color: ${({ theme }) => theme.colors.grayscale.light5};\n font-weight: ${({ theme }) => theme.typography.weights.normal};\n color: ${({ theme }) => theme.colors.grayscale.dark2};\n border: 1px solid ${({ theme }) => theme.colors.grayscale.light2};\n margin: 0;\n width: 100%;\n\n &:hover,\n &:focus {\n background-color: ${({ theme }) => theme.colors.grayscale.light5};\n color: ${({ theme }) => theme.colors.grayscale.dark2};\n border: 1px solid ${({ theme }) => theme.colors.grayscale.light2};\n box-shadow: 4px 4px 20px ${({ theme }) => theme.colors.grayscale.light2};\n }\n`;\n\nexport default IconButton;\n","import { JsonObject } from '@superset-ui/core';\nimport { InputProps } from 'antd/lib/input';\nimport { ChangeEvent, EventHandler, FormEvent } from 'react';\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 */\ntype DatabaseUser = {\n first_name: string;\n last_name: string;\n};\n\nexport type CatalogObject = {\n name: string;\n value: string;\n};\n\nexport type SSHTunnelObject = {\n id?: number;\n server_address?: string;\n server_port?: number;\n username?: string;\n password?: string;\n private_key?: string;\n private_key_password?: string;\n};\n\nexport type DatabaseObject = {\n // Connection + general\n backend?: string;\n changed_on?: string;\n changed_on_delta_humanized?: string;\n configuration_method: ConfigurationMethod;\n created_by?: null | DatabaseUser;\n database_name: string;\n driver: string;\n engine?: string;\n extra?: string;\n id: number;\n uuid?: null | string;\n name: string; // synonym to database_name\n paramProperties?: Record;\n sqlalchemy_uri?: string;\n sqlalchemy_uri_placeholder?: string;\n parameters?: {\n access_token?: string;\n database_name?: string;\n host?: string;\n port?: number;\n database?: string;\n default_catalog?: string;\n default_schema?: string;\n http_path_field?: string;\n username?: string;\n password?: string;\n encryption?: boolean;\n credentials_info?: string;\n service_account_info?: string;\n query?: Record;\n catalog?: Record;\n properties?: Record;\n warehouse?: string;\n role?: string;\n account?: string;\n ssh?: boolean;\n };\n\n // Performance\n cache_timeout?: string;\n allow_run_async?: boolean;\n\n // SQL Lab\n allows_cost_estimate?: boolean;\n allow_ctas?: boolean;\n allow_cvas?: boolean;\n allow_dml?: boolean;\n allows_virtual_table_explore?: boolean;\n expose_in_sqllab?: boolean;\n force_ctas_schema?: string;\n extra_json?: ExtraJson;\n\n // Security\n allow_file_upload?: boolean;\n impersonate_user?: boolean;\n masked_encrypted_extra?: string;\n parameters_schema?: Record;\n server_cert?: string;\n\n // External management\n is_managed_externally: boolean;\n\n // Temporary storage\n catalog?: Array;\n query_input?: string;\n\n // DB Engine Spec information\n engine_information?: {\n supports_file_upload?: boolean;\n disable_ssh_tunneling?: boolean;\n supports_dynamic_catalog?: boolean;\n };\n\n // SSH Tunnel information\n ssh_tunnel?: SSHTunnelObject | null;\n};\n\nexport type DatabaseForm = {\n default_driver: string;\n engine: string;\n name: string;\n parameters: {\n properties: {\n database: {\n description: string;\n type: string;\n };\n default_catalog: {\n description: string;\n type: string;\n };\n default_schema: {\n description: string;\n type: string;\n };\n http_path_field: {\n description: string;\n type: string;\n };\n host: {\n description: string;\n type: string;\n };\n password: {\n description: string;\n nullable: boolean;\n type: string;\n };\n port: {\n description: string;\n format: string;\n type: string;\n };\n query: {\n additionalProperties: {};\n description: string;\n type: string;\n };\n username: {\n description: string;\n nullable: boolean;\n type: string;\n };\n credentials_info: {\n description: string;\n nullable: boolean;\n type: string;\n };\n service_account_info: {\n description: string;\n nullable: boolean;\n type: string;\n };\n };\n required: string[];\n type: string;\n };\n ssh_tunnel: {\n properties: {\n ssh_address: {\n description: string;\n type: string;\n };\n ssh_port: {\n description: string;\n format: string;\n type: string;\n };\n username: {\n description: string;\n type: string;\n };\n password: {\n description: string;\n nullable: boolean;\n type: string;\n };\n private_key: {\n description: string;\n nullable: boolean;\n type: string;\n };\n private_key_password: {\n description: string;\n nullable: boolean;\n type: string;\n };\n };\n required: string[];\n type: string;\n };\n preferred: boolean;\n sqlalchemy_uri_placeholder: string;\n engine_information: {\n supports_file_upload: boolean;\n disable_ssh_tunneling: boolean;\n supports_dynamic_catalog: boolean;\n };\n};\n\n// the values should align with the database\n// model enum in superset/superset/models/core.py\nexport enum ConfigurationMethod {\n SqlalchemyUri = 'sqlalchemy_form',\n DynamicForm = 'dynamic_form',\n}\n\nexport enum Engines {\n GSheet = 'gsheets',\n Snowflake = 'snowflake',\n}\n\nexport interface ExtraJson {\n allows_virtual_table_explore?: boolean; // in SQL Lab\n cancel_query_on_windows_unload?: boolean; // in Performance\n cost_estimate_enabled?: boolean; // in SQL Lab\n disable_data_preview?: boolean; // in SQL Lab\n disable_drill_to_detail?: boolean;\n allow_multi_catalog?: boolean;\n engine_params?: {\n catalog?: Record;\n connect_args?: {\n http_path?: string;\n };\n };\n metadata_params?: {};\n metadata_cache_timeout?: {\n schema_cache_timeout?: number; // in Performance\n table_cache_timeout?: number; // in Performance\n }; // No field, holds schema and table timeout\n schemas_allowed_for_file_upload?: string[]; // in Security\n schema_options?: {\n expand_rows?: boolean;\n };\n version?: string;\n}\n\nexport type CustomTextType = {\n value?: string | boolean | number;\n type?: string | null;\n name?: string;\n checked?: boolean;\n};\n\ntype CustomHTMLInputElement = Omit, 'value' | 'type'> &\n CustomTextType;\n\ntype CustomHTMLTextAreaElement = Omit<\n Partial,\n 'value' | 'type'\n> &\n CustomTextType;\n\nexport type CustomParametersChangeType =\n | FormEvent\n | { target: T };\n\nexport type CustomEventHandlerType = EventHandler<\n ChangeEvent\n>;\n\nexport interface FieldPropTypes {\n required: boolean;\n hasTooltip?: boolean;\n tooltipText?: (value: any) => string;\n placeholder?: string;\n onParametersChange: (event: CustomParametersChangeType) => void;\n onParametersUploadFileChange: (value: any) => string;\n changeMethods: {\n onParametersChange: (event: CustomParametersChangeType) => void;\n } & {\n onChange: (value: any) => string;\n } & {\n onQueryChange: (value: any) => string;\n } & { onParametersUploadFileChange: (value: any) => string } & {\n onAddTableCatalog: () => void;\n onRemoveTableCatalog: (idx: number) => void;\n } & {\n onExtraInputChange: (value: any) => void;\n onSSHTunnelParametersChange: CustomEventHandlerType;\n };\n validationErrors: JsonObject | null;\n getValidation: () => void;\n clearValidationErrors: () => void;\n db?: DatabaseObject;\n dbModel?: DatabaseForm;\n field: string;\n default_value?: any;\n description?: string;\n isEditMode?: boolean;\n sslForced?: boolean;\n defaultDBName?: string;\n editNewDb?: boolean;\n}\n\ntype ChangeMethodsType = FieldPropTypes['changeMethods'];\n\n// changeMethods compatibility with dynamic forms\ntype SwitchPropsChangeMethodsType = {\n onParametersChange: ChangeMethodsType['onParametersChange'];\n};\n\nexport type SwitchProps = {\n dbModel: DatabaseForm;\n db: DatabaseObject;\n changeMethods: SwitchPropsChangeMethodsType;\n clearValidationErrors: () => void;\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 { css, styled, SupersetTheme } from '@superset-ui/core';\nimport { JsonEditor } from 'src/components/AsyncAceEditor';\nimport Button from 'src/components/Button';\n\nconst CTAS_CVAS_SCHEMA_FORM_HEIGHT = 108;\nconst EXPOSE_IN_SQLLAB_FORM_HEIGHT = CTAS_CVAS_SCHEMA_FORM_HEIGHT + 153;\nconst EXPOSE_ALL_FORM_HEIGHT = EXPOSE_IN_SQLLAB_FORM_HEIGHT + 102;\nconst MODAL_BODY_HEIGHT = 180.5;\n\nconst anticonHeight = 12;\n\nexport const no_margin_bottom = css`\n margin-bottom: 0;\n`;\n\nexport const labelMarginBottom = (theme: SupersetTheme) => css`\n margin-bottom: ${theme.gridUnit * 2}px;\n`;\n\nexport const marginBottom = (theme: SupersetTheme) => css`\n margin-bottom: ${theme.gridUnit * 4}px;\n`;\n\nexport const StyledFormHeader = styled.header`\n padding: ${({ theme }) => theme.gridUnit * 2}px\n ${({ theme }) => theme.gridUnit * 4}px;\n line-height: ${({ theme }) => theme.gridUnit * 6}px;\n\n .helper-top {\n padding-bottom: 0;\n color: ${({ theme }) => theme.colors.grayscale.base};\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n margin: 0;\n }\n\n .subheader-text {\n line-height: ${({ theme }) => theme.gridUnit * 4.25}px;\n }\n\n .helper-bottom {\n padding-top: 0;\n color: ${({ theme }) => theme.colors.grayscale.base};\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n margin: 0;\n }\n\n h4 {\n color: ${({ theme }) => theme.colors.grayscale.dark2};\n font-size: ${({ theme }) => theme.typography.sizes.l}px;\n margin: 0;\n padding: 0;\n line-height: ${({ theme }) => theme.gridUnit * 8}px;\n }\n\n .select-db {\n padding-bottom: ${({ theme }) => theme.gridUnit * 2}px;\n .helper {\n margin: 0;\n }\n\n h4 {\n margin: 0 0 ${({ theme }) => theme.gridUnit * 4}px;\n }\n }\n`;\n\nexport const antdCollapseStyles = (theme: SupersetTheme) => css`\n .ant-collapse-header {\n padding-top: ${theme.gridUnit * 3.5}px;\n padding-bottom: ${theme.gridUnit * 2.5}px;\n\n .anticon.ant-collapse-arrow {\n top: calc(50% - ${anticonHeight / 2}px);\n }\n .helper {\n color: ${theme.colors.grayscale.base};\n }\n }\n h4 {\n font-size: 16px;\n margin-top: 0;\n margin-bottom: ${theme.gridUnit}px;\n }\n p.helper {\n margin-bottom: 0;\n padding: 0;\n }\n`;\n\nexport const antDTabsStyles = css`\n .ant-tabs-top {\n margin-top: 0;\n }\n .ant-tabs-top > .ant-tabs-nav {\n margin-bottom: 0;\n }\n .ant-tabs-tab {\n margin-right: 0;\n }\n`;\n\nexport const antDModalNoPaddingStyles = css`\n .ant-modal-body {\n padding-left: 0;\n padding-right: 0;\n padding-top: 0;\n }\n`;\n\nexport const infoTooltip = (theme: SupersetTheme) => css`\n margin-bottom: ${theme.gridUnit * 5}px;\n svg {\n margin-bottom: ${theme.gridUnit * 0.25}px;\n }\n`;\n\nexport const toggleStyle = (theme: SupersetTheme) => css`\n padding-left: ${theme.gridUnit * 2}px;\n`;\n\nexport const formScrollableStyles = (theme: SupersetTheme) => css`\n padding: ${theme.gridUnit * 4}px ${theme.gridUnit * 4}px 0;\n`;\n\nexport const antDModalStyles = (theme: SupersetTheme) => css`\n .ant-select-dropdown {\n height: ${theme.gridUnit * 40}px;\n }\n\n .ant-modal-header {\n padding: ${theme.gridUnit * 4.5}px ${theme.gridUnit * 4}px\n ${theme.gridUnit * 4}px;\n }\n\n .ant-modal-close-x .close {\n color: ${theme.colors.grayscale.dark1};\n opacity: 1;\n }\n\n .ant-modal-body {\n height: ${theme.gridUnit * MODAL_BODY_HEIGHT}px;\n }\n\n .ant-modal-footer {\n height: ${theme.gridUnit * 16.25}px;\n }\n`;\n\nexport const antDAlertStyles = (theme: SupersetTheme) => css`\n border: 1px solid ${theme.colors.info.base};\n padding: ${theme.gridUnit * 4}px;\n margin: ${theme.gridUnit * 4}px 0;\n\n .ant-alert-message {\n color: ${theme.colors.info.dark2};\n font-size: ${theme.typography.sizes.m}px;\n font-weight: ${theme.typography.weights.bold};\n }\n\n .ant-alert-description {\n color: ${theme.colors.info.dark2};\n font-size: ${theme.typography.sizes.m}px;\n line-height: ${theme.gridUnit * 5}px;\n\n a {\n text-decoration: underline;\n }\n\n .ant-alert-icon {\n margin-right: ${theme.gridUnit * 2.5}px;\n font-size: ${theme.typography.sizes.l}px;\n position: relative;\n top: ${theme.gridUnit / 4}px;\n }\n }\n`;\n\nexport const StyledAlertMargin = styled.div`\n ${({ theme }) => css`\n margin: 0 ${theme.gridUnit * 4}px -${theme.gridUnit * 4}px;\n `}\n`;\n\nexport const antDErrorAlertStyles = (theme: SupersetTheme) => css`\n border: ${theme.colors.error.base} 1px solid;\n padding: ${theme.gridUnit * 4}px;\n margin: ${theme.gridUnit * 8}px ${theme.gridUnit * 4}px;\n color: ${theme.colors.error.dark2};\n .ant-alert-message {\n font-size: ${theme.typography.sizes.m}px;\n font-weight: ${theme.typography.weights.bold};\n }\n .ant-alert-description {\n font-size: ${theme.typography.sizes.m}px;\n line-height: ${theme.gridUnit * 5}px;\n .ant-alert-icon {\n margin-right: ${theme.gridUnit * 2.5}px;\n font-size: ${theme.typography.sizes.l}px;\n position: relative;\n top: ${theme.gridUnit / 4}px;\n }\n }\n`;\n\nexport const antdWarningAlertStyles = (theme: SupersetTheme) => css`\n border: 1px solid ${theme.colors.warning.light1};\n padding: ${theme.gridUnit * 4}px;\n margin: ${theme.gridUnit * 4}px 0;\n color: ${theme.colors.warning.dark2};\n\n .ant-alert-message {\n margin: 0;\n }\n\n .ant-alert-description {\n font-size: ${theme.typography.sizes.s + 1}px;\n line-height: ${theme.gridUnit * 4}px;\n\n .ant-alert-icon {\n margin-right: ${theme.gridUnit * 2.5}px;\n font-size: ${theme.typography.sizes.l + 1}px;\n position: relative;\n top: ${theme.gridUnit / 4}px;\n }\n }\n`;\n\nexport const formHelperStyles = (theme: SupersetTheme) => css`\n .required {\n margin-left: ${theme.gridUnit / 2}px;\n color: ${theme.colors.error.base};\n }\n\n .helper {\n display: block;\n padding: ${theme.gridUnit}px 0;\n color: ${theme.colors.grayscale.light1};\n font-size: ${theme.typography.sizes.s}px;\n text-align: left;\n }\n`;\n\nexport const wideButton = (theme: SupersetTheme) => css`\n width: 100%;\n border: 1px solid ${theme.colors.primary.dark2};\n color: ${theme.colors.primary.dark2};\n &:hover,\n &:focus {\n border: 1px solid ${theme.colors.primary.dark1};\n color: ${theme.colors.primary.dark1};\n }\n`;\n\nexport const formStyles = (theme: SupersetTheme) => css`\n .form-group {\n margin-bottom: ${theme.gridUnit * 4}px;\n &-w-50 {\n display: inline-block;\n width: ${`calc(50% - ${theme.gridUnit * 4}px)`};\n & + .form-group-w-50 {\n margin-left: ${theme.gridUnit * 8}px;\n }\n }\n }\n .control-label {\n color: ${theme.colors.grayscale.dark1};\n font-size: ${theme.typography.sizes.s}px;\n }\n .helper {\n color: ${theme.colors.grayscale.light1};\n font-size: ${theme.typography.sizes.s}px;\n margin-top: ${theme.gridUnit * 1.5}px;\n }\n .ant-tabs-content-holder {\n overflow: auto;\n max-height: 480px;\n }\n`;\n\nexport const validatedFormStyles = (theme: SupersetTheme) => css`\n label {\n color: ${theme.colors.grayscale.dark1};\n font-size: ${theme.typography.sizes.s}px;\n margin-bottom: 0;\n }\n`;\n\nexport const StyledInputContainer = styled.div`\n ${({ theme }) => css`\n margin-bottom: ${theme.gridUnit * 6}px;\n &.mb-0 {\n margin-bottom: 0;\n }\n &.mb-8 {\n margin-bottom: ${theme.gridUnit * 2}px;\n }\n\n .control-label {\n color: ${theme.colors.grayscale.dark1};\n font-size: ${theme.typography.sizes.s}px;\n margin-bottom: ${theme.gridUnit * 2}px;\n }\n\n &.extra-container {\n padding-top: ${theme.gridUnit * 2}px;\n }\n\n .input-container {\n display: flex;\n align-items: top;\n\n label {\n display: flex;\n margin-left: ${theme.gridUnit * 2}px;\n margin-top: ${theme.gridUnit * 0.75}px;\n font-family: ${theme.typography.families.sansSerif};\n font-size: ${theme.typography.sizes.m}px;\n }\n\n i {\n margin: 0 ${theme.gridUnit}px;\n }\n }\n\n input,\n textarea {\n flex: 1 1 auto;\n }\n\n textarea {\n height: 160px;\n resize: none;\n }\n\n input::placeholder,\n textarea::placeholder {\n color: ${theme.colors.grayscale.light1};\n }\n\n textarea,\n input[type='text'],\n input[type='number'] {\n padding: ${theme.gridUnit * 1.5}px ${theme.gridUnit * 2}px;\n border-style: none;\n border: 1px solid ${theme.colors.grayscale.light2};\n border-radius: ${theme.gridUnit}px;\n\n &[name='name'] {\n flex: 0 1 auto;\n width: 40%;\n }\n }\n &.expandable {\n height: 0;\n overflow: hidden;\n transition: height 0.25s;\n margin-left: ${theme.gridUnit * 8}px;\n margin-bottom: 0;\n padding: 0;\n .control-label {\n margin-bottom: 0;\n }\n &.open {\n height: ${CTAS_CVAS_SCHEMA_FORM_HEIGHT}px;\n padding-right: ${theme.gridUnit * 5}px;\n }\n }\n `}\n`;\n\nexport const StyledJsonEditor = styled(JsonEditor)`\n flex: 1 1 auto;\n border: 1px solid ${({ theme }) => theme.colors.grayscale.light2};\n border-radius: ${({ theme }) => theme.gridUnit}px;\n`;\n\nexport const StyledExpandableForm = styled.div`\n padding-top: ${({ theme }) => theme.gridUnit}px;\n .input-container {\n padding-top: ${({ theme }) => theme.gridUnit}px;\n padding-bottom: ${({ theme }) => theme.gridUnit}px;\n }\n &.expandable {\n height: 0;\n overflow: hidden;\n transition: height 0.25s;\n margin-left: ${({ theme }) => theme.gridUnit * 7}px;\n &.open {\n height: ${EXPOSE_IN_SQLLAB_FORM_HEIGHT}px;\n &.ctas-open {\n height: ${EXPOSE_ALL_FORM_HEIGHT}px;\n }\n }\n }\n`;\n\nexport const StyledAlignment = styled.div`\n padding: 0 ${({ theme }) => theme.gridUnit * 4}px;\n margin-top: ${({ theme }) => theme.gridUnit * 6}px;\n`;\n\nexport const buttonLinkStyles = (theme: SupersetTheme) => css`\n font-weight: ${theme.typography.weights.normal};\n text-transform: initial;\n padding-right: ${theme.gridUnit * 2}px;\n`;\n\nexport const importDbButtonLinkStyles = (theme: SupersetTheme) => css`\n font-size: ${theme.gridUnit * 3.5}px;\n font-weight: ${theme.typography.weights.normal};\n text-transform: initial;\n padding-right: ${theme.gridUnit * 2}px;\n`;\n\nexport const alchemyButtonLinkStyles = (theme: SupersetTheme) => css`\n font-weight: ${theme.typography.weights.normal};\n text-transform: initial;\n padding: ${theme.gridUnit * 8}px 0 0;\n margin-left: 0px;\n`;\n\nexport const TabHeader = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: 0px;\n\n .helper {\n color: ${({ theme }) => theme.colors.grayscale.base};\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n margin: 0px;\n }\n`;\n\nexport const CreateHeaderTitle = styled.div`\n color: ${({ theme }) => theme.colors.grayscale.dark2};\n font-weight: ${({ theme }) => theme.typography.weights.bold};\n font-size: ${({ theme }) => theme.typography.sizes.m}px;\n`;\n\nexport const CreateHeaderSubtitle = styled.div`\n color: ${({ theme }) => theme.colors.grayscale.dark1};\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n`;\n\nexport const EditHeaderTitle = styled.div`\n color: ${({ theme }) => theme.colors.grayscale.light1};\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n text-transform: uppercase;\n`;\n\nexport const EditHeaderSubtitle = styled.div`\n color: ${({ theme }) => theme.colors.grayscale.dark1};\n font-size: ${({ theme }) => theme.typography.sizes.l}px;\n font-weight: ${({ theme }) => theme.typography.weights.bold};\n`;\n\nexport const CredentialInfoForm = styled.div`\n .catalog-type-select {\n margin: 0 0 20px;\n }\n\n .label-select {\n text-transform: uppercase;\n color: ${({ theme }) => theme.colors.grayscale.dark1};\n font-size: 11px;\n margin: 0 5px ${({ theme }) => theme.gridUnit * 2}px;\n }\n\n .label-paste {\n color: ${({ theme }) => theme.colors.grayscale.light1};\n font-size: 11px;\n line-height: 16px;\n }\n\n .input-container {\n margin: ${({ theme }) => theme.gridUnit * 7}px 0;\n display: flex;\n flex-direction: column;\n}\n }\n .input-form {\n height: 100px;\n width: 100%;\n border: 1px solid ${({ theme }) => theme.colors.grayscale.light2};\n border-radius: ${({ theme }) => theme.gridUnit}px;\n resize: vertical;\n padding: ${({ theme }) => theme.gridUnit * 1.5}px\n ${({ theme }) => theme.gridUnit * 2}px;\n &::placeholder {\n color: ${({ theme }) => theme.colors.grayscale.light1};\n }\n }\n\n .input-container {\n .input-upload {\n display: none !important;\n }\n .input-upload-current {\n display: flex;\n justify-content: space-between;\n }\n .input-upload-btn {\n width: ${({ theme }) => theme.gridUnit * 32}px\n }\n }`;\n\nexport const SelectDatabaseStyles = styled.div`\n .preferred {\n .superset-button {\n margin-left: 0;\n }\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n margin: ${({ theme }) => theme.gridUnit * 4}px;\n }\n\n .preferred-item {\n width: 32%;\n margin-bottom: ${({ theme }) => theme.gridUnit * 2.5}px;\n }\n\n .available {\n margin: ${({ theme }) => theme.gridUnit * 4}px;\n .available-label {\n font-size: ${({ theme }) => theme.typography.sizes.l}px;\n font-weight: ${({ theme }) => theme.typography.weights.bold};\n margin: ${({ theme }) => theme.gridUnit * 6}px 0;\n }\n .available-select {\n width: 100%;\n }\n }\n\n .label-available-select {\n text-transform: uppercase;\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n }\n\n .control-label {\n color: ${({ theme }) => theme.colors.grayscale.dark1};\n font-size: ${({ theme }) => theme.typography.sizes.s}px;\n margin-bottom: ${({ theme }) => theme.gridUnit * 2}px;\n }\n`;\n\nexport const StyledFooterButton = styled(Button)`\n width: ${({ theme }) => theme.gridUnit * 40}px;\n`;\n\nexport const StyledStickyHeader = styled.div`\n position: sticky;\n top: 0;\n z-index: ${({ theme }) => theme.zIndex.max};\n background: ${({ theme }) => theme.colors.grayscale.light5};\n height: auto;\n`;\n\nexport const StyledCatalogTable = styled.div`\n margin-bottom: 16px;\n\n .catalog-type-select {\n margin: 0 0 20px;\n }\n\n .gsheet-title {\n font-size: ${({ theme }) => theme.typography.sizes.l}px;\n font-weight: ${({ theme }) => theme.typography.weights.bold};\n margin: ${({ theme }) => theme.gridUnit * 10}px 0 16px;\n }\n\n .catalog-label {\n margin: 0 0 7px;\n }\n\n .catalog-name {\n display: flex;\n .catalog-name-input {\n width: 95%;\n margin-bottom: 0px;\n }\n }\n\n .catalog-name-url {\n margin: 4px 0;\n width: 95%;\n }\n\n .catalog-add-btn {\n width: 95%;\n }\n`;\n\nexport const StyledUploadWrapper = styled.div`\n .ant-progress-inner {\n display: none;\n }\n\n .ant-upload-list-item-card-actions {\n display: none;\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 { ChangeEvent, EventHandler } from 'react';\nimport cx from 'classnames';\nimport {\n t,\n DatabaseConnectionExtension,\n isFeatureEnabled,\n SupersetTheme,\n useTheme,\n FeatureFlag,\n} from '@superset-ui/core';\nimport InfoTooltip from 'src/components/InfoTooltip';\nimport IndeterminateCheckbox from 'src/components/IndeterminateCheckbox';\nimport Collapse from 'src/components/Collapse';\nimport {\n StyledInputContainer,\n StyledJsonEditor,\n StyledExpandableForm,\n antdCollapseStyles,\n no_margin_bottom,\n} from './styles';\nimport { DatabaseObject, ExtraJson } from '../types';\n\nconst ExtraOptions = ({\n db,\n onInputChange,\n onTextChange,\n onEditorChange,\n onExtraInputChange,\n onExtraEditorChange,\n extraExtension,\n}: {\n db: DatabaseObject | null;\n onInputChange: EventHandler>;\n onTextChange: EventHandler>;\n onEditorChange: Function;\n onExtraInputChange: EventHandler>;\n onExtraEditorChange: Function;\n extraExtension: DatabaseConnectionExtension | undefined;\n}) => {\n const expandableModalIsOpen = !!db?.expose_in_sqllab;\n const createAsOpen = !!(db?.allow_ctas || db?.allow_cvas);\n const isFileUploadSupportedByEngine =\n db?.engine_information?.supports_file_upload;\n const supportsDynamicCatalog =\n db?.engine_information?.supports_dynamic_catalog;\n\n // JSON.parse will deep parse engine_params\n // if it's an object, and we want to keep it a string\n const extraJson: ExtraJson = JSON.parse(db?.extra || '{}', (key, value) => {\n if (key === 'engine_params' && typeof value === 'object') {\n // keep this as a string\n return JSON.stringify(value);\n }\n return value;\n });\n const theme = useTheme();\n const ExtraExtensionComponent = extraExtension?.component;\n const ExtraExtensionLogo = extraExtension?.logo;\n const ExtensionDescription = extraExtension?.description;\n const allowRunAsync = isFeatureEnabled(FeatureFlag.ForceSqlLabRunAsync)\n ? true\n : !!db?.allow_run_async;\n const isAllowRunAsyncDisabled = isFeatureEnabled(\n FeatureFlag.ForceSqlLabRunAsync,\n );\n\n return (\n antdCollapseStyles(theme)}\n >\n \n

{t('SQL Lab')}

\n

\n {t('Adjust how this database will interact with SQL Lab.')}\n

\n \n }\n key=\"1\"\n >\n \n
\n \n \n
\n \n \n
\n \n \n
\n
\n \n
\n \n \n
\n \n
{t('CTAS & CVAS SCHEMA')}
\n
\n \n
\n
\n {t(\n 'Force all tables and views to be created in this schema when clicking CTAS or CVAS in SQL Lab.',\n )}\n
\n
\n
\n \n
\n \n \n
\n
\n \n
\n \n \n
\n
\n \n
\n \n \n
\n
\n \n
\n \n \n
\n
\n \n
\n \n \n
\n
\n \n \n \n \n

{t('Performance')}

\n

\n {t('Adjust performance settings of this database.')}\n

\n \n }\n key=\"2\"\n >\n \n
{t('Chart cache timeout')}
\n
\n \n
\n
\n {t(\n 'Duration (in seconds) of the caching timeout for charts of this database.' +\n ' A timeout of 0 indicates that the cache never expires, and -1 bypasses the cache.' +\n ' Note this defaults to the global timeout if undefined.',\n )}\n
\n
\n \n
{t('Schema cache timeout')}
\n
\n \n
\n
\n {t(\n 'Duration (in seconds) of the metadata caching timeout for schemas of ' +\n 'this database. If left unset, the cache never expires.',\n )}\n
\n
\n \n
{t('Table cache timeout')}
\n
\n \n
\n
\n {t(\n 'Duration (in seconds) of the metadata caching timeout for tables of ' +\n 'this database. If left unset, the cache never expires. ',\n )}\n
\n
\n \n
\n \n \n {isAllowRunAsyncDisabled && (\n \n )}\n
\n
\n \n
\n \n \n
\n
\n \n \n

{t('Security')}

\n

{t('Add extra connection information.')}

\n \n }\n key=\"3\"\n >\n \n
{t('Secure extra')}
\n
\n \n onEditorChange({ json, name: 'masked_encrypted_extra' })\n }\n width=\"100%\"\n height=\"160px\"\n />\n
\n
\n
\n {t(\n 'JSON string containing additional connection configuration. ' +\n 'This is used to provide connection information for systems ' +\n 'like Hive, Presto and BigQuery which do not conform to the ' +\n 'username:password syntax normally used by SQLAlchemy.',\n )}\n
\n
\n
\n \n
{t('Root certificate')}
\n
\n \n
\n
\n {t(\n 'Optional CA_BUNDLE contents to validate HTTPS requests. Only ' +\n 'available on certain database engines.',\n )}\n
\n
\n \n
\n \n \n
\n \n {isFileUploadSupportedByEngine && (\n \n
\n \n
\n \n )}\n {isFileUploadSupportedByEngine && !!db?.allow_file_upload && (\n \n
\n {t('Schemas allowed for File upload')}\n
\n
\n \n
\n
\n {t(\n 'A comma-separated list of schemas that files are allowed to upload to.',\n )}\n
\n
\n )}\n \n {extraExtension && ExtraExtensionComponent && ExtensionDescription && (\n \n {ExtraExtensionLogo && }\n ({\n fontSize: theme.typography.sizes.l,\n fontWeight: theme.typography.weights.bold,\n })}\n >\n {extraExtension?.title}\n \n

\n \n

\n \n }\n key={extraExtension?.title}\n // @ts-ignore, 'icon' is valid in >=4.9.0 but missing from `CollapsibleType`\n collapsible={extraExtension.enabled?.() ? 'icon' : 'disabled'}\n >\n \n \n \n \n )}\n \n

{t('Other')}

\n

{t('Additional settings.')}

\n \n }\n key=\"4\"\n >\n \n
{t('Metadata Parameters')}
\n
\n \n onExtraEditorChange({ json, name: 'metadata_params' })\n }\n width=\"100%\"\n height=\"160px\"\n value={\n !Object.keys(extraJson?.metadata_params || {}).length\n ? ''\n : extraJson?.metadata_params\n }\n />\n
\n
\n
\n {t(\n 'The metadata_params object gets unpacked into the sqlalchemy.MetaData call.',\n )}\n
\n
\n
\n \n
{t('Engine Parameters')}
\n
\n \n onExtraEditorChange({ json, name: 'engine_params' })\n }\n width=\"100%\"\n height=\"160px\"\n value={\n !Object.keys(extraJson?.engine_params || {}).length\n ? ''\n : extraJson?.engine_params\n }\n />\n
\n
\n
\n {t(\n 'The engine_params object gets unpacked into the sqlalchemy.create_engine call.',\n )}\n
\n
\n
\n \n
\n {t('Version')}\n
\n
\n \n
\n
\n {t(\n 'Specify the database version. This is used with Presto for query cost ' +\n 'estimation, and Dremio for syntax changes, among others.',\n )}\n
\n
\n \n
\n \n \n
\n
\n {supportsDynamicCatalog && (\n \n
\n \n \n
\n
\n )}\n \n \n );\n};\n\nexport default ExtraOptions;\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 { EventHandler, ChangeEvent, MouseEvent, ReactNode } from 'react';\nimport { t, SupersetTheme } from '@superset-ui/core';\nimport SupersetText from 'src/utils/textUtils';\nimport Button from 'src/components/Button';\nimport { StyledInputContainer, wideButton } from './styles';\nimport { DatabaseObject } from '../types';\n\nconst SqlAlchemyTab = ({\n db,\n onInputChange,\n testConnection,\n conf,\n testInProgress = false,\n children,\n}: {\n db: DatabaseObject | null;\n onInputChange: EventHandler>;\n testConnection: EventHandler>;\n conf: { SQLALCHEMY_DOCS_URL: string; SQLALCHEMY_DISPLAY_TEXT: string };\n testInProgress?: boolean;\n children?: ReactNode;\n}) => {\n const fallbackDocsUrl =\n SupersetText?.DB_MODAL_SQLALCHEMY_FORM?.SQLALCHEMY_DOCS_URL ||\n 'https://docs.sqlalchemy.org/en/13/core/engines.html';\n const fallbackDisplayText =\n SupersetText?.DB_MODAL_SQLALCHEMY_FORM?.SQLALCHEMY_DISPLAY_TEXT ||\n 'SQLAlchemy docs';\n\n return (\n <>\n \n
\n {t('Display Name')}\n *\n
\n
\n \n
\n
\n {t('Pick a name to help you identify this database.')}\n
\n
\n \n
\n {t('SQLAlchemy URI')}\n *\n
\n
\n \n
\n
\n {t('Refer to the')}{' '}\n \n {fallbackDisplayText || conf?.SQLALCHEMY_DISPLAY_TEXT || ''}\n {' '}\n {t('for more information on how to structure your URI.')}\n
\n
\n {children}\n wideButton(theme)}\n >\n {t('Test connection')}\n \n \n );\n};\nexport default SqlAlchemyTab;\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 { SupersetTheme, t } from '@superset-ui/core';\nimport { AntdSwitch } from 'src/components';\nimport InfoTooltip from 'src/components/InfoTooltip';\nimport ValidatedInput from 'src/components/Form/LabeledErrorBoundInput';\nimport { FieldPropTypes } from '../../types';\nimport { toggleStyle, infoTooltip } from '../styles';\n\nexport const hostField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => (\n \n);\n\nexport const portField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => (\n <>\n \n \n);\nexport const httpPath = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => {\n const extraJson = JSON.parse(db?.extra || '{}');\n return (\n \n );\n};\nexport const databaseField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n placeholder,\n db,\n}: FieldPropTypes) => (\n \n);\nexport const defaultCatalogField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => (\n \n);\nexport const defaultSchemaField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => (\n \n);\nexport const httpPathField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => {\n console.error(db);\n return (\n \n );\n};\nexport const usernameField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => (\n \n);\nexport const passwordField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n isEditMode,\n}: FieldPropTypes) => (\n \n);\nexport const accessTokenField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n isEditMode,\n default_value,\n description,\n}: FieldPropTypes) => (\n \n);\nexport const displayField = ({\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => (\n <>\n \n \n);\n\nexport const queryField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => (\n \n);\n\nexport const forceSSLField = ({\n isEditMode,\n changeMethods,\n db,\n sslForced,\n}: FieldPropTypes) => (\n
infoTooltip(theme)}>\n {\n changeMethods.onParametersChange({\n target: {\n type: 'toggle',\n name: 'encryption',\n checked: true,\n value: changed,\n },\n });\n }}\n />\n SSL\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 { t } from '@superset-ui/core';\nimport ValidatedInput from 'src/components/Form/LabeledErrorBoundInput';\nimport { FieldPropTypes } from '../../types';\n\nconst FIELD_TEXT_MAP = {\n account: {\n helpText: t(\n 'Copy the identifier of the account you are trying to connect to.',\n ),\n placeholder: t('e.g. xy12345.us-east-2.aws'),\n },\n warehouse: {\n placeholder: t('e.g. compute_wh'),\n className: 'form-group-w-50',\n },\n role: {\n placeholder: t('e.g. AccountAdmin'),\n className: 'form-group-w-50',\n },\n};\n\nexport const validatedInputField = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n field,\n}: FieldPropTypes) => (\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 { useState } from 'react';\nimport { SupersetTheme, t } from '@superset-ui/core';\nimport { AntdButton, AntdSelect } from 'src/components';\nimport InfoTooltip from 'src/components/InfoTooltip';\nimport FormLabel from 'src/components/Form/FormLabel';\nimport Icons from 'src/components/Icons';\nimport { FieldPropTypes } from '../../types';\nimport { infoTooltip, labelMarginBottom, CredentialInfoForm } from '../styles';\n\nenum CredentialInfoOptions {\n JsonUpload,\n CopyPaste,\n}\n\n// These are the columns that are going to be added to encrypted extra, they differ in name based\n// on the engine, however we want to use the same component for each of them. Make sure to add the\n// the engine specific name here.\nexport const encryptedCredentialsMap = {\n gsheets: 'service_account_info',\n bigquery: 'credentials_info',\n};\n\nconst castStringToBoolean = (optionValue: string) => optionValue === 'true';\n\nexport const EncryptedField = ({\n changeMethods,\n isEditMode,\n db,\n editNewDb,\n}: FieldPropTypes) => {\n const [uploadOption, setUploadOption] = useState(\n CredentialInfoOptions.JsonUpload.valueOf(),\n );\n const [fileToUpload, setFileToUpload] = useState(\n null,\n );\n const [isPublic, setIsPublic] = useState(true);\n const showCredentialsInfo =\n db?.engine === 'gsheets' ? !isEditMode && !isPublic : !isEditMode;\n const isEncrypted = isEditMode && db?.masked_encrypted_extra !== '{}';\n const encryptedField = db?.engine && encryptedCredentialsMap[db.engine];\n const encryptedValue =\n typeof db?.parameters?.[encryptedField] === 'object'\n ? JSON.stringify(db?.parameters?.[encryptedField])\n : db?.parameters?.[encryptedField];\n return (\n \n {db?.engine === 'gsheets' && (\n
\n labelMarginBottom(theme)}\n required\n >\n {t('Type of Google Sheets allowed')}\n \n \n setIsPublic(castStringToBoolean(value))\n }\n >\n \n {t('Publicly shared sheets only')}\n \n \n {t('Public and privately shared sheets')}\n \n \n
\n )}\n {showCredentialsInfo && (\n <>\n \n {t('How do you want to enter service account credentials?')}\n \n setUploadOption(option)}\n >\n \n {t('Upload JSON file')}\n \n\n \n {t('Copy and Paste JSON credentials')}\n \n \n \n )}\n {uploadOption === CredentialInfoOptions.CopyPaste ||\n isEditMode ||\n editNewDb ? (\n
\n {t('Service Account')}\n \n \n {t('Copy and paste the entire service account .json file here')}\n \n
\n ) : (\n showCredentialsInfo && (\n infoTooltip(theme)}\n >\n
\n {t('Upload Credentials')}\n \n
\n\n {!fileToUpload && (\n \n document?.getElementById('selectedFile')?.click()\n }\n >\n {t('Choose File')}\n \n )}\n {fileToUpload && (\n
\n {fileToUpload}\n {\n setFileToUpload(null);\n changeMethods.onParametersChange({\n target: {\n name: encryptedField,\n value: '',\n },\n });\n }}\n />\n
\n )}\n\n {\n let file;\n if (event.target.files) {\n file = event.target.files[0];\n }\n setFileToUpload(file?.name);\n changeMethods.onParametersChange({\n target: {\n type: null,\n name: encryptedField,\n value: await file?.text(),\n checked: false,\n },\n });\n (\n document.getElementById('selectedFile') as HTMLInputElement\n ).value = null as any;\n }}\n />\n \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 { useEffect, useState } from 'react';\nimport {\n t,\n SupersetTheme,\n isFeatureEnabled,\n FeatureFlag,\n} from '@superset-ui/core';\nimport { AntdSwitch } from 'src/components';\nimport InfoTooltip from 'src/components/InfoTooltip';\nimport { isEmpty } from 'lodash';\nimport { infoTooltip, toggleStyle } from './styles';\nimport { SwitchProps } from '../types';\n\nconst SSHTunnelSwitch = ({\n clearValidationErrors,\n changeMethods,\n db,\n dbModel,\n}: SwitchProps) => {\n const [isChecked, setChecked] = useState(false);\n const sshTunnelEnabled = isFeatureEnabled(FeatureFlag.SshTunneling);\n const disableSSHTunnelingForEngine =\n dbModel?.engine_information?.disable_ssh_tunneling || false;\n const isSSHTunnelEnabled = sshTunnelEnabled && !disableSSHTunnelingForEngine;\n\n const handleOnChange = (changed: boolean) => {\n setChecked(changed);\n changeMethods.onParametersChange({\n target: {\n type: 'toggle',\n name: 'ssh',\n checked: true,\n value: changed,\n },\n });\n clearValidationErrors();\n };\n\n useEffect(() => {\n if (isSSHTunnelEnabled && db?.parameters?.ssh !== undefined) {\n setChecked(db.parameters.ssh);\n }\n }, [db?.parameters?.ssh, isSSHTunnelEnabled]);\n\n useEffect(() => {\n if (\n isSSHTunnelEnabled &&\n db?.parameters?.ssh === undefined &&\n !isEmpty(db?.ssh_tunnel)\n ) {\n // reflecting the state of the ssh tunnel on first load\n changeMethods.onParametersChange({\n target: {\n type: 'toggle',\n name: 'ssh',\n checked: true,\n value: true,\n },\n });\n }\n }, [changeMethods, db?.parameters?.ssh, db?.ssh_tunnel, isSSHTunnelEnabled]);\n\n return isSSHTunnelEnabled ? (\n
infoTooltip(theme)}>\n \n {t('SSH Tunnel')}\n \n
\n ) : null;\n};\n\nexport default SSHTunnelSwitch;\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 { FormEvent } from 'react';\nimport {\n SupersetTheme,\n JsonObject,\n getExtensionsRegistry,\n} from '@superset-ui/core';\nimport { InputProps } from 'antd/lib/input';\nimport { Form } from 'src/components/Form';\nimport {\n accessTokenField,\n databaseField,\n defaultCatalogField,\n defaultSchemaField,\n displayField,\n forceSSLField,\n hostField,\n httpPath,\n httpPathField,\n passwordField,\n portField,\n queryField,\n usernameField,\n} from './CommonParameters';\nimport { validatedInputField } from './ValidatedInputField';\nimport { EncryptedField } from './EncryptedField';\nimport { TableCatalog } from './TableCatalog';\nimport { formScrollableStyles, validatedFormStyles } from '../styles';\nimport { DatabaseForm, DatabaseObject } from '../../types';\nimport SSHTunnelSwitch from '../SSHTunnelSwitch';\n\nexport const FormFieldOrder = [\n 'host',\n 'port',\n 'database',\n 'default_catalog',\n 'default_schema',\n 'username',\n 'password',\n 'access_token',\n 'http_path',\n 'http_path_field',\n 'database_name',\n 'credentials_info',\n 'service_account_info',\n 'catalog',\n 'query',\n 'encryption',\n 'account',\n 'warehouse',\n 'role',\n 'ssh',\n];\n\nconst extensionsRegistry = getExtensionsRegistry();\n\nconst SSHTunnelSwitchComponent =\n extensionsRegistry.get('ssh_tunnel.form.switch') ?? SSHTunnelSwitch;\n\nconst FORM_FIELD_MAP = {\n host: hostField,\n http_path: httpPath,\n http_path_field: httpPathField,\n port: portField,\n database: databaseField,\n default_catalog: defaultCatalogField,\n default_schema: defaultSchemaField,\n username: usernameField,\n password: passwordField,\n access_token: accessTokenField,\n database_name: displayField,\n query: queryField,\n encryption: forceSSLField,\n credentials_info: EncryptedField,\n service_account_info: EncryptedField,\n catalog: TableCatalog,\n warehouse: validatedInputField,\n role: validatedInputField,\n account: validatedInputField,\n ssh: SSHTunnelSwitchComponent,\n};\n\ninterface DatabaseConnectionFormProps {\n isEditMode?: boolean;\n sslForced: boolean;\n editNewDb?: boolean;\n dbModel: DatabaseForm;\n db: Partial | null;\n onParametersChange: (\n event: FormEvent | { target: HTMLInputElement },\n ) => void;\n onChange: (\n event: FormEvent | { target: HTMLInputElement },\n ) => void;\n onQueryChange: (\n event: FormEvent | { target: HTMLInputElement },\n ) => void;\n onParametersUploadFileChange?: (\n event: FormEvent | { target: HTMLInputElement },\n ) => void;\n onExtraInputChange: (\n event: FormEvent | { target: HTMLInputElement },\n ) => void;\n onAddTableCatalog: () => void;\n onRemoveTableCatalog: (idx: number) => void;\n validationErrors: JsonObject | null;\n getValidation: () => void;\n clearValidationErrors: () => void;\n getPlaceholder?: (field: string) => string | undefined;\n}\n\nconst DatabaseConnectionForm = ({\n dbModel,\n db,\n editNewDb,\n getPlaceholder,\n getValidation,\n isEditMode = false,\n onAddTableCatalog,\n onChange,\n onExtraInputChange,\n onParametersChange,\n onParametersUploadFileChange,\n onQueryChange,\n onRemoveTableCatalog,\n sslForced,\n validationErrors,\n clearValidationErrors,\n}: DatabaseConnectionFormProps) => {\n const parameters = dbModel?.parameters;\n\n return (\n
\n [\n formScrollableStyles,\n validatedFormStyles(theme),\n ]}\n >\n {parameters &&\n FormFieldOrder.filter(\n (key: string) =>\n Object.keys(parameters.properties).includes(key) ||\n key === 'database_name',\n ).map(field =>\n FORM_FIELD_MAP[field]({\n required: parameters.required?.includes(field),\n changeMethods: {\n onParametersChange,\n onChange,\n onQueryChange,\n onParametersUploadFileChange,\n onAddTableCatalog,\n onRemoveTableCatalog,\n onExtraInputChange,\n },\n validationErrors,\n getValidation,\n clearValidationErrors,\n db,\n key: field,\n field,\n default_value: parameters.properties[field]?.default,\n description: parameters.properties[field]?.description,\n isEditMode,\n sslForced,\n editNewDb,\n placeholder: getPlaceholder ? getPlaceholder(field) : undefined,\n }),\n )}\n \n \n );\n};\nexport const FormFieldMap = FORM_FIELD_MAP;\n\nexport default DatabaseConnectionForm;\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, SupersetTheme, t } from '@superset-ui/core';\nimport ValidatedInput from 'src/components/Form/LabeledErrorBoundInput';\nimport FormLabel from 'src/components/Form/FormLabel';\nimport Icons from 'src/components/Icons';\nimport { StyledFooterButton, StyledCatalogTable } from '../styles';\nimport { CatalogObject, FieldPropTypes } from '../../types';\n\nexport const TableCatalog = ({\n required,\n changeMethods,\n getValidation,\n validationErrors,\n db,\n}: FieldPropTypes) => {\n const tableCatalog = db?.catalog || [];\n const catalogError = validationErrors || {};\n return (\n \n

\n {t('Connect Google Sheets as tables to this database')}\n

\n
\n {tableCatalog?.map((sheet: CatalogObject, idx: number) => (\n <>\n \n {t('Google Sheet Name and URL')}\n \n
\n {\n changeMethods.onParametersChange({\n target: {\n type: `catalog-${idx}`,\n name: 'name',\n value: e.target.value,\n },\n });\n }}\n value={sheet.name}\n />\n {tableCatalog?.length > 1 && (\n css`\n align-self: center;\n background: ${theme.colors.grayscale.light4};\n margin: 5px 5px 8px 5px;\n\n &.anticon > * {\n line-height: 0;\n }\n `}\n iconSize=\"m\"\n onClick={() => changeMethods.onRemoveTableCatalog(idx)}\n />\n )}\n
\n \n changeMethods.onParametersChange({\n target: {\n type: `catalog-${idx}`,\n name: 'value',\n value: e.target.value,\n },\n })\n }\n value={sheet.value}\n />\n \n ))}\n {\n changeMethods.onAddTableCatalog();\n }}\n >\n + {t('Add sheet')}\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 */\n\nimport { getDatabaseDocumentationLinks } from 'src/views/CRUD/hooks';\nimport { UploadFile } from 'antd/lib/upload/interface';\nimport { t } from '@superset-ui/core';\nimport {\n EditHeaderTitle,\n EditHeaderSubtitle,\n StyledFormHeader,\n StyledStickyHeader,\n} from './styles';\nimport { DatabaseForm, DatabaseObject } from '../types';\n\nconst supersetTextDocs = getDatabaseDocumentationLinks();\n\nexport const DOCUMENTATION_LINK = supersetTextDocs\n ? supersetTextDocs.support\n : 'https://superset.apache.org/docs/configuration/databases#installing-database-drivers';\n\nconst irregularDocumentationLinks = {\n postgresql: 'https://superset.apache.org',\n mssql: 'https://superset.apache.org/docs/databases/sql-server',\n gsheets: 'https://superset.apache.org/docs/databases/google-sheets',\n};\n\nconst documentationLink = (engine: string | undefined) => {\n if (!engine) return null;\n\n if (supersetTextDocs) {\n // override doc link for superset_txt yml\n return supersetTextDocs[engine] || supersetTextDocs.default;\n }\n\n if (!irregularDocumentationLinks[engine]) {\n return `https://superset.apache.org/docs/databases/${engine}`;\n }\n return irregularDocumentationLinks[engine];\n};\n\nconst ModalHeader = ({\n isLoading,\n isEditMode,\n useSqlAlchemyForm,\n hasConnectedDb,\n db,\n dbName,\n dbModel,\n editNewDb,\n fileList,\n}: {\n isLoading: boolean;\n isEditMode: boolean;\n useSqlAlchemyForm: boolean;\n hasConnectedDb: boolean;\n db: Partial | null;\n dbName: string;\n dbModel: DatabaseForm;\n editNewDb?: boolean;\n fileList?: UploadFile[];\n passwordFields?: string[];\n needsOverwriteConfirm?: boolean;\n}) => {\n const fileCheck = fileList && fileList?.length > 0;\n\n const isEditHeader = (\n \n {db?.backend}\n {dbName}\n \n );\n\n const useSqlAlchemyFormHeader = (\n \n

\n {t('STEP %(stepCurr)s OF %(stepLast)s', {\n stepCurr: 2,\n stepLast: 2,\n })}\n

\n

{t('Enter Primary Credentials')}

\n

\n {t('Need help? Learn how to connect your database')}{' '}\n \n {t('here')}\n \n .\n

\n
\n );\n\n const hasConnectedDbHeader = (\n \n \n

\n {t('STEP %(stepCurr)s OF %(stepLast)s', {\n stepCurr: 3,\n stepLast: 3,\n })}\n

\n

{t('Database connected')}

\n

\n {t(`Create a dataset to begin visualizing your data as a chart or go to\n SQL Lab to query your data.`)}\n

\n
\n
\n );\n\n const hasDbHeader = (\n \n \n

\n {t('STEP %(stepCurr)s OF %(stepLast)s', {\n stepCurr: 2,\n stepLast: 3,\n })}\n

\n

\n {t('Enter the required %(dbModelName)s credentials', {\n dbModelName: dbModel.name,\n })}\n

\n

\n {t('Need help? Learn more about')}{' '}\n \n {t('connecting to %(dbModelName)s', { dbModelName: dbModel.name })}.\n \n

\n
\n
\n );\n\n const noDbHeader = (\n \n
\n

\n {t('STEP %(stepCurr)s OF %(stepLast)s', {\n stepCurr: 1,\n stepLast: 3,\n })}\n

\n

{t('Select a database to connect')}

\n
\n
\n );\n\n const importDbHeader = (\n \n \n

\n {t('STEP %(stepCurr)s OF %(stepLast)s', {\n stepCurr: 2,\n stepLast: 2,\n })}\n

\n

\n {t('Enter the required %(dbModelName)s credentials', {\n dbModelName: dbModel.name,\n })}\n

\n

{fileCheck ? fileList[0].name : ''}

\n
\n
\n );\n\n if (fileCheck) return importDbHeader;\n if (isLoading) return <>;\n if (isEditMode) return isEditHeader;\n if (useSqlAlchemyForm) return useSqlAlchemyFormHeader;\n if (hasConnectedDb && !editNewDb) return hasConnectedDbHeader;\n if (db || editNewDb) return hasDbHeader;\n\n return noDbHeader;\n};\n\nexport default ModalHeader;\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 { useState } from 'react';\nimport { t, styled } from '@superset-ui/core';\nimport { AntdForm, Col, Row } from 'src/components';\nimport { Form, FormLabel } from 'src/components/Form';\nimport { Radio } from 'src/components/Radio';\nimport { Input, TextArea } from 'src/components/Input';\nimport { Input as AntdInput, Tooltip } from 'antd';\nimport { EyeInvisibleOutlined, EyeOutlined } from '@ant-design/icons';\nimport { DatabaseObject, FieldPropTypes } from '../types';\nimport { AuthType } from '.';\n\nconst StyledDiv = styled.div`\n padding-top: ${({ theme }) => theme.gridUnit * 2}px;\n label {\n color: ${({ theme }) => theme.colors.grayscale.base};\n text-transform: uppercase;\n margin-bottom: ${({ theme }) => theme.gridUnit * 2}px;\n }\n`;\n\nconst StyledRow = styled(Row)`\n padding-bottom: ${({ theme }) => theme.gridUnit * 2}px;\n`;\n\nconst StyledFormItem = styled(AntdForm.Item)`\n margin-bottom: 0 !important;\n`;\n\nconst StyledInputPassword = styled(AntdInput.Password)`\n margin: ${({ theme }) => `${theme.gridUnit}px 0 ${theme.gridUnit * 2}px`};\n`;\n\nconst SSHTunnelForm = ({\n db,\n onSSHTunnelParametersChange,\n setSSHTunnelLoginMethod,\n}: {\n db: DatabaseObject | null;\n onSSHTunnelParametersChange: FieldPropTypes['changeMethods']['onSSHTunnelParametersChange'];\n setSSHTunnelLoginMethod: (method: AuthType) => void;\n}) => {\n const [usePassword, setUsePassword] = useState(AuthType.Password);\n\n return (\n
\n \n \n \n \n {t('SSH Host')}\n \n \n \n \n \n \n \n {t('SSH Port')}\n \n \n \n \n \n \n \n \n \n {t('Username')}\n \n \n \n \n \n \n \n \n \n {t('Login with')}\n \n \n {\n setUsePassword(value);\n setSSHTunnelLoginMethod(value);\n }}\n >\n \n {t('Password')}\n \n \n {t('Private Key & Password')}\n \n \n \n \n \n \n {usePassword === AuthType.Password && (\n \n \n \n \n {t('SSH Password')}\n \n \n visible ? (\n \n \n \n ) : (\n \n \n \n )\n }\n role=\"textbox\"\n />\n \n \n \n )}\n {usePassword === AuthType.PrivateKey && (\n <>\n \n \n \n \n {t('Private Key')}\n \n \n \n \n \n \n \n \n \n {t('Private Key Password')}\n \n \n visible ? (\n \n \n \n ) : (\n \n \n \n )\n }\n role=\"textbox\"\n />\n \n \n \n \n )}\n
\n );\n};\nexport default SSHTunnelForm;\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 t,\n styled,\n SupersetTheme,\n getExtensionsRegistry,\n} from '@superset-ui/core';\n\nimport {\n FunctionComponent,\n useEffect,\n useRef,\n useState,\n useReducer,\n Reducer,\n useCallback,\n ChangeEvent,\n} from 'react';\n\nimport { useHistory } from 'react-router-dom';\nimport { setItem, LocalStorageKeys } from 'src/utils/localStorageHelpers';\nimport { UploadChangeParam, UploadFile } from 'antd/lib/upload/interface';\nimport Tabs from 'src/components/Tabs';\nimport { AntdSelect, Upload } from 'src/components';\nimport Alert from 'src/components/Alert';\nimport Modal from 'src/components/Modal';\nimport Button from 'src/components/Button';\nimport IconButton from 'src/components/IconButton';\nimport InfoTooltip from 'src/components/InfoTooltip';\nimport withToasts from 'src/components/MessageToasts/withToasts';\nimport ValidatedInput from 'src/components/Form/LabeledErrorBoundInput';\nimport ErrorMessageWithStackTrace from 'src/components/ErrorMessage/ErrorMessageWithStackTrace';\nimport ErrorAlert from 'src/components/ImportModal/ErrorAlert';\nimport {\n testDatabaseConnection,\n useSingleViewResource,\n useAvailableDatabases,\n useDatabaseValidation,\n getDatabaseImages,\n getConnectionAlert,\n useImportResource,\n} from 'src/views/CRUD/hooks';\nimport { useCommonConf } from 'src/features/databases/state';\nimport Loading from 'src/components/Loading';\nimport { isEmpty, pick } from 'lodash';\nimport {\n DatabaseObject,\n DatabaseForm,\n ConfigurationMethod,\n CatalogObject,\n Engines,\n ExtraJson,\n CustomTextType,\n} from '../types';\nimport ExtraOptions from './ExtraOptions';\nimport SqlAlchemyForm from './SqlAlchemyForm';\nimport DatabaseConnectionForm from './DatabaseConnectionForm';\nimport {\n antDAlertStyles,\n antdWarningAlertStyles,\n StyledAlertMargin,\n antDModalNoPaddingStyles,\n antDModalStyles,\n antDTabsStyles,\n buttonLinkStyles,\n importDbButtonLinkStyles,\n alchemyButtonLinkStyles,\n TabHeader,\n formHelperStyles,\n formStyles,\n StyledAlignment,\n SelectDatabaseStyles,\n infoTooltip,\n StyledFooterButton,\n StyledStickyHeader,\n formScrollableStyles,\n StyledUploadWrapper,\n} from './styles';\nimport ModalHeader, { DOCUMENTATION_LINK } from './ModalHeader';\nimport SSHTunnelForm from './SSHTunnelForm';\nimport SSHTunnelSwitch from './SSHTunnelSwitch';\n\nconst extensionsRegistry = getExtensionsRegistry();\n\nconst DEFAULT_EXTRA = JSON.stringify({ allows_virtual_table_explore: true });\n\nconst engineSpecificAlertMapping = {\n [Engines.GSheet]: {\n message: 'Why do I need to create a database?',\n description:\n 'To begin using your Google Sheets, you need to create a database first. ' +\n 'Databases are used as a way to identify ' +\n 'your data so that it can be queried and visualized. This ' +\n 'database will hold all of your individual Google Sheets ' +\n 'you choose to connect here.',\n },\n};\n\nconst TabsStyled = styled(Tabs)`\n .ant-tabs-content {\n display: flex;\n width: 100%;\n overflow: inherit;\n\n & > .ant-tabs-tabpane {\n position: relative;\n }\n }\n`;\n\nconst ErrorAlertContainer = styled.div`\n ${({ theme }) => `\n margin: ${theme.gridUnit * 8}px ${theme.gridUnit * 4}px;\n `};\n`;\n\nconst SSHTunnelContainer = styled.div`\n ${({ theme }) => `\n padding: 0px ${theme.gridUnit * 4}px;\n `};\n`;\n\ninterface DatabaseModalProps {\n addDangerToast: (msg: string) => void;\n addSuccessToast: (msg: string) => void;\n onDatabaseAdd?: (database?: DatabaseObject) => void;\n onHide: () => void;\n show: boolean;\n databaseId: number | undefined; // If included, will go into edit mode\n dbEngine: string | undefined; // if included goto step 2 with engine already set\n}\n\nexport enum ActionType {\n AddTableCatalogSheet,\n ConfigMethodChange,\n DbSelected,\n EditorChange,\n ExtraEditorChange,\n ExtraInputChange,\n Fetched,\n InputChange,\n ParametersChange,\n QueryChange,\n RemoveTableCatalogSheet,\n Reset,\n TextChange,\n ParametersSSHTunnelChange,\n SetSSHTunnelLoginMethod,\n RemoveSSHTunnelConfig,\n}\n\nexport enum AuthType {\n Password,\n PrivateKey,\n}\n\ninterface DBReducerPayloadType {\n target?: string;\n name: string;\n json?: string;\n type?: string;\n checked?: boolean;\n value?: string;\n}\n\nexport type DBReducerActionType =\n | {\n type:\n | ActionType.ExtraEditorChange\n | ActionType.ExtraInputChange\n | ActionType.TextChange\n | ActionType.QueryChange\n | ActionType.InputChange\n | ActionType.EditorChange\n | ActionType.ParametersChange\n | ActionType.ParametersSSHTunnelChange;\n payload: DBReducerPayloadType;\n }\n | {\n type: ActionType.Fetched;\n payload: Partial;\n }\n | {\n type: ActionType.DbSelected;\n payload: {\n database_name?: string;\n engine?: string;\n configuration_method: ConfigurationMethod;\n engine_information?: {};\n driver?: string;\n sqlalchemy_uri_placeholder?: string;\n };\n }\n | {\n type:\n | ActionType.Reset\n | ActionType.RemoveSSHTunnelConfig\n | ActionType.AddTableCatalogSheet;\n }\n | {\n type: ActionType.RemoveTableCatalogSheet;\n payload: {\n indexToDelete: number;\n };\n }\n | {\n type: ActionType.ConfigMethodChange;\n payload: {\n database_name?: string;\n engine?: string;\n configuration_method: ConfigurationMethod;\n };\n }\n | {\n type: ActionType.SetSSHTunnelLoginMethod;\n payload: {\n login_method: AuthType;\n };\n };\n\nconst StyledBtns = styled.div`\n margin-bottom: ${({ theme }) => theme.gridUnit * 3}px;\n margin-left: ${({ theme }) => theme.gridUnit * 3}px;\n`;\n\nexport function dbReducer(\n state: Partial | null,\n action: DBReducerActionType,\n): Partial | null {\n const trimmedState = {\n ...(state || {}),\n };\n let query = {};\n let query_input = '';\n let parametersCatalog;\n let actionPayloadJson;\n const extraJson: ExtraJson = JSON.parse(trimmedState.extra || '{}');\n\n switch (action.type) {\n case ActionType.ExtraEditorChange:\n // \"extra\" payload in state is a string\n try {\n // we don't want to stringify encoded strings twice\n actionPayloadJson = JSON.parse(action.payload.json || '{}');\n } catch (e) {\n actionPayloadJson = action.payload.json;\n }\n return {\n ...trimmedState,\n extra: JSON.stringify({\n ...extraJson,\n [action.payload.name]: actionPayloadJson,\n }),\n };\n case ActionType.ExtraInputChange:\n // \"extra\" payload in state is a string\n if (\n action.payload.name === 'schema_cache_timeout' ||\n action.payload.name === 'table_cache_timeout'\n ) {\n return {\n ...trimmedState,\n extra: JSON.stringify({\n ...extraJson,\n metadata_cache_timeout: {\n ...extraJson?.metadata_cache_timeout,\n [action.payload.name]: action.payload.value,\n },\n }),\n };\n }\n if (action.payload.name === 'schemas_allowed_for_file_upload') {\n return {\n ...trimmedState,\n extra: JSON.stringify({\n ...extraJson,\n schemas_allowed_for_file_upload: (action.payload.value || '')\n .split(',')\n .filter(schema => schema !== ''),\n }),\n };\n }\n if (action.payload.name === 'http_path') {\n return {\n ...trimmedState,\n extra: JSON.stringify({\n ...extraJson,\n engine_params: {\n connect_args: {\n [action.payload.name]: action.payload.value?.trim(),\n },\n },\n }),\n };\n }\n if (action.payload.name === 'expand_rows') {\n return {\n ...trimmedState,\n extra: JSON.stringify({\n ...extraJson,\n schema_options: {\n ...extraJson?.schema_options,\n [action.payload.name]: !!action.payload.value,\n },\n }),\n };\n }\n return {\n ...trimmedState,\n extra: JSON.stringify({\n ...extraJson,\n [action.payload.name]:\n action.payload.type === 'checkbox'\n ? action.payload.checked\n : action.payload.value,\n }),\n };\n case ActionType.InputChange:\n if (action.payload.type === 'checkbox') {\n return {\n ...trimmedState,\n [action.payload.name]: action.payload.checked,\n };\n }\n return {\n ...trimmedState,\n [action.payload.name]: action.payload.value,\n };\n case ActionType.ParametersChange:\n // catalog params will always have a catalog state for\n // dbs that use a catalog, i.e., gsheets, even if the\n // fields are empty strings\n if (\n action.payload.type?.startsWith('catalog') &&\n trimmedState.catalog !== undefined\n ) {\n // Formatting wrapping google sheets table catalog\n const catalogCopy: CatalogObject[] = [...trimmedState.catalog];\n const idx = action.payload.type?.split('-')[1];\n const catalogToUpdate: CatalogObject = catalogCopy[idx] || {};\n catalogToUpdate[action.payload.name] = action.payload.value;\n\n // insert updated catalog to existing state\n catalogCopy.splice(parseInt(idx, 10), 1, catalogToUpdate);\n\n // format catalog for state\n // eslint-disable-next-line array-callback-return\n parametersCatalog = catalogCopy.reduce((obj, item: any) => {\n const catalog = { ...obj };\n catalog[item.name] = item.value;\n return catalog;\n }, {});\n\n return {\n ...trimmedState,\n catalog: catalogCopy,\n parameters: {\n ...trimmedState.parameters,\n catalog: parametersCatalog,\n },\n };\n }\n return {\n ...trimmedState,\n parameters: {\n ...trimmedState.parameters,\n [action.payload.name]: action.payload.value,\n },\n };\n\n case ActionType.ParametersSSHTunnelChange:\n return {\n ...trimmedState,\n ssh_tunnel: {\n ...trimmedState.ssh_tunnel,\n [action.payload.name]: action.payload.value,\n },\n };\n case ActionType.SetSSHTunnelLoginMethod: {\n let ssh_tunnel = {};\n if (trimmedState?.ssh_tunnel) {\n // remove any attributes that are considered sensitive\n ssh_tunnel = pick(trimmedState.ssh_tunnel, [\n 'id',\n 'server_address',\n 'server_port',\n 'username',\n ]);\n }\n if (action.payload.login_method === AuthType.PrivateKey) {\n return {\n ...trimmedState,\n ssh_tunnel: {\n private_key: trimmedState?.ssh_tunnel?.private_key,\n private_key_password:\n trimmedState?.ssh_tunnel?.private_key_password,\n ...ssh_tunnel,\n },\n };\n }\n if (action.payload.login_method === AuthType.Password) {\n return {\n ...trimmedState,\n ssh_tunnel: {\n password: trimmedState?.ssh_tunnel?.password,\n ...ssh_tunnel,\n },\n };\n }\n return {\n ...trimmedState,\n };\n }\n case ActionType.RemoveSSHTunnelConfig:\n return {\n ...trimmedState,\n ssh_tunnel: undefined,\n };\n case ActionType.AddTableCatalogSheet:\n if (trimmedState.catalog !== undefined) {\n return {\n ...trimmedState,\n catalog: [...trimmedState.catalog, { name: '', value: '' }],\n };\n }\n return {\n ...trimmedState,\n catalog: [{ name: '', value: '' }],\n };\n case ActionType.RemoveTableCatalogSheet:\n trimmedState.catalog?.splice(action.payload.indexToDelete, 1);\n return {\n ...trimmedState,\n };\n case ActionType.EditorChange:\n return {\n ...trimmedState,\n [action.payload.name]: action.payload.json,\n };\n case ActionType.QueryChange:\n return {\n ...trimmedState,\n parameters: {\n ...trimmedState.parameters,\n query: Object.fromEntries(new URLSearchParams(action.payload.value)),\n },\n query_input: action.payload.value,\n };\n case ActionType.TextChange:\n return {\n ...trimmedState,\n [action.payload.name]: action.payload.value,\n };\n case ActionType.Fetched:\n // convert query to a string and store in query_input\n query = action.payload?.parameters?.query || {};\n query_input = Object.entries(query)\n .map(([key, value]) => `${key}=${value}`)\n .join('&');\n\n if (\n action.payload.masked_encrypted_extra &&\n action.payload.configuration_method === ConfigurationMethod.DynamicForm\n ) {\n // \"extra\" payload from the api is a string\n const extraJsonPayload: ExtraJson = {\n ...JSON.parse((action.payload.extra as string) || '{}'),\n };\n\n const payloadCatalog = extraJsonPayload.engine_params?.catalog;\n\n const engineRootCatalog = Object.entries(payloadCatalog || {}).map(\n ([name, value]: string[]) => ({ name, value }),\n );\n\n return {\n ...action.payload,\n engine: action.payload.backend || trimmedState.engine,\n configuration_method: action.payload.configuration_method,\n catalog: engineRootCatalog,\n parameters: {\n ...(action.payload.parameters || trimmedState.parameters),\n catalog: payloadCatalog,\n },\n query_input,\n };\n }\n return {\n ...action.payload,\n masked_encrypted_extra: action.payload.masked_encrypted_extra || '',\n engine: action.payload.backend || trimmedState.engine,\n configuration_method: action.payload.configuration_method,\n parameters: action.payload.parameters || trimmedState.parameters,\n ssh_tunnel: action.payload.ssh_tunnel || trimmedState.ssh_tunnel,\n query_input,\n };\n\n case ActionType.DbSelected:\n // set initial state for blank form\n return {\n ...action.payload,\n extra: DEFAULT_EXTRA,\n expose_in_sqllab: true,\n };\n case ActionType.ConfigMethodChange:\n return {\n ...action.payload,\n };\n\n case ActionType.Reset:\n default:\n return null;\n }\n}\n\nconst DEFAULT_TAB_KEY = '1';\n\nconst DatabaseModal: FunctionComponent = ({\n addDangerToast,\n addSuccessToast,\n onDatabaseAdd,\n onHide,\n show,\n databaseId,\n dbEngine,\n}) => {\n const [db, setDB] = useReducer<\n Reducer | null, DBReducerActionType>\n >(dbReducer, null);\n // Database fetch logic\n const {\n state: { loading: dbLoading, resource: dbFetched, error: dbErrors },\n fetchResource,\n createResource,\n updateResource,\n clearError,\n } = useSingleViewResource(\n 'database',\n t('database'),\n addDangerToast,\n 'connection',\n );\n\n const [tabKey, setTabKey] = useState(DEFAULT_TAB_KEY);\n const [availableDbs, getAvailableDbs] = useAvailableDatabases();\n const [validationErrors, getValidation, setValidationErrors] =\n useDatabaseValidation();\n const [hasConnectedDb, setHasConnectedDb] = useState(false);\n const [showCTAbtns, setShowCTAbtns] = useState(false);\n const [dbName, setDbName] = useState('');\n const [editNewDb, setEditNewDb] = useState(false);\n const [isLoading, setLoading] = useState(false);\n const [testInProgress, setTestInProgress] = useState(false);\n const [passwords, setPasswords] = useState>({});\n const [sshTunnelPasswords, setSSHTunnelPasswords] = useState<\n Record\n >({});\n const [sshTunnelPrivateKeys, setSSHTunnelPrivateKeys] = useState<\n Record\n >({});\n const [sshTunnelPrivateKeyPasswords, setSSHTunnelPrivateKeyPasswords] =\n useState>({});\n const [confirmedOverwrite, setConfirmedOverwrite] = useState(false);\n const [fileList, setFileList] = useState([]);\n const [importingModal, setImportingModal] = useState(false);\n const [importingErrorMessage, setImportingErrorMessage] = useState();\n const [passwordFields, setPasswordFields] = useState([]);\n const [sshTunnelPasswordFields, setSSHTunnelPasswordFields] = useState<\n string[]\n >([]);\n const [sshTunnelPrivateKeyFields, setSSHTunnelPrivateKeyFields] = useState<\n string[]\n >([]);\n const [\n sshTunnelPrivateKeyPasswordFields,\n setSSHTunnelPrivateKeyPasswordFields,\n ] = useState([]);\n const [extraExtensionComponentState, setExtraExtensionComponentState] =\n useState({});\n\n const SSHTunnelSwitchComponent =\n extensionsRegistry.get('ssh_tunnel.form.switch') ?? SSHTunnelSwitch;\n\n const [useSSHTunneling, setUseSSHTunneling] = useState(\n undefined,\n );\n\n let dbConfigExtraExtension = extensionsRegistry.get(\n 'databaseconnection.extraOption',\n );\n\n if (dbConfigExtraExtension) {\n // add method for db modal to store data\n dbConfigExtraExtension = {\n ...dbConfigExtraExtension,\n onEdit: componentState => {\n setExtraExtensionComponentState({\n ...extraExtensionComponentState,\n ...componentState,\n });\n },\n };\n }\n\n const conf = useCommonConf();\n const dbImages = getDatabaseImages();\n const connectionAlert = getConnectionAlert();\n const isEditMode = !!databaseId;\n const hasAlert =\n connectionAlert || !!(db?.engine && engineSpecificAlertMapping[db.engine]);\n const useSqlAlchemyForm =\n db?.configuration_method === ConfigurationMethod.SqlalchemyUri;\n const useTabLayout = isEditMode || useSqlAlchemyForm;\n const isDynamic = (engine: string | undefined) =>\n availableDbs?.databases?.find(\n (DB: DatabaseObject) => DB.backend === engine || DB.engine === engine,\n )?.parameters !== undefined;\n const showDBError = validationErrors || dbErrors;\n const history = useHistory();\n\n const dbModel: DatabaseForm =\n // TODO: we need a centralized engine in one place\n\n // first try to match both engine and driver\n availableDbs?.databases?.find(\n (available: {\n engine: string | undefined;\n default_driver: string | undefined;\n }) =>\n available.engine === (isEditMode ? db?.backend : db?.engine) &&\n available.default_driver === db?.driver,\n ) ||\n // alternatively try to match only engine\n availableDbs?.databases?.find(\n (available: { engine: string | undefined }) =>\n available.engine === (isEditMode ? db?.backend : db?.engine),\n ) ||\n {};\n\n // Test Connection logic\n const testConnection = () => {\n if (!db?.sqlalchemy_uri) {\n addDangerToast(t('Please enter a SQLAlchemy URI to test'));\n return;\n }\n\n const connection = {\n sqlalchemy_uri: db?.sqlalchemy_uri || '',\n database_name: db?.database_name?.trim() || undefined,\n impersonate_user: db?.impersonate_user || undefined,\n extra: db?.extra,\n masked_encrypted_extra: db?.masked_encrypted_extra || '',\n server_cert: db?.server_cert || undefined,\n ssh_tunnel:\n !isEmpty(db?.ssh_tunnel) && useSSHTunneling\n ? {\n ...db.ssh_tunnel,\n server_port: Number(db.ssh_tunnel!.server_port),\n }\n : undefined,\n };\n setTestInProgress(true);\n testDatabaseConnection(\n connection,\n (errorMsg: string) => {\n setTestInProgress(false);\n addDangerToast(errorMsg);\n },\n (errorMsg: string) => {\n setTestInProgress(false);\n addSuccessToast(errorMsg);\n },\n );\n };\n\n const getPlaceholder = (field: string) => {\n if (field === 'database') {\n return t('e.g. world_population');\n }\n return undefined;\n };\n\n const removeFile = (removedFile: UploadFile) => {\n setFileList(fileList.filter(file => file.uid !== removedFile.uid));\n return false;\n };\n\n const onChange = useCallback(\n (\n type: DBReducerActionType['type'],\n payload: CustomTextType | DBReducerPayloadType,\n ) => {\n setDB({ type, payload } as DBReducerActionType);\n },\n [],\n );\n\n const handleClearValidationErrors = useCallback(() => {\n setValidationErrors(null);\n }, [setValidationErrors]);\n\n const handleParametersChange = useCallback(\n ({ target }: { target: HTMLInputElement }) => {\n onChange(ActionType.ParametersChange, {\n type: target.type,\n name: target.name,\n checked: target.checked,\n value: target.value,\n });\n },\n [onChange],\n );\n\n const onClose = () => {\n setDB({ type: ActionType.Reset });\n setHasConnectedDb(false);\n handleClearValidationErrors(); // reset validation errors on close\n clearError();\n setEditNewDb(false);\n setFileList([]);\n setImportingModal(false);\n setImportingErrorMessage('');\n setPasswordFields([]);\n setSSHTunnelPasswordFields([]);\n setSSHTunnelPrivateKeyFields([]);\n setSSHTunnelPrivateKeyPasswordFields([]);\n setPasswords({});\n setSSHTunnelPasswords({});\n setSSHTunnelPrivateKeys({});\n setSSHTunnelPrivateKeyPasswords({});\n setConfirmedOverwrite(false);\n setUseSSHTunneling(undefined);\n onHide();\n };\n\n const redirectURL = (url: string) => {\n history.push(url);\n };\n\n // Database import logic\n const {\n state: {\n alreadyExists,\n passwordsNeeded,\n sshPasswordNeeded,\n sshPrivateKeyNeeded,\n sshPrivateKeyPasswordNeeded,\n loading: importLoading,\n failed: importErrored,\n },\n importResource,\n } = useImportResource('database', t('database'), msg => {\n setImportingErrorMessage(msg);\n });\n\n const onSave = async () => {\n let dbConfigExtraExtensionOnSaveError;\n\n setLoading(true);\n\n dbConfigExtraExtension\n ?.onSave(extraExtensionComponentState, db)\n .then(({ error }: { error: any }) => {\n if (error) {\n dbConfigExtraExtensionOnSaveError = error;\n addDangerToast(error);\n }\n });\n\n if (dbConfigExtraExtensionOnSaveError) {\n setLoading(false);\n return;\n }\n // Clone DB object\n const dbToUpdate = { ...(db || {}) };\n\n if (dbToUpdate.configuration_method === ConfigurationMethod.DynamicForm) {\n // Validate DB before saving\n if (dbToUpdate?.parameters?.catalog) {\n // need to stringify gsheets catalog to allow it to be serialized\n dbToUpdate.extra = JSON.stringify({\n ...JSON.parse(dbToUpdate.extra || '{}'),\n engine_params: {\n catalog: dbToUpdate.parameters.catalog,\n },\n });\n }\n\n const errors = await getValidation(dbToUpdate, true);\n if (!isEmpty(validationErrors) || errors?.length) {\n addDangerToast(\n t('Connection failed, please check your connection settings.'),\n );\n setLoading(false);\n return;\n }\n\n const parameters_schema = isEditMode\n ? dbToUpdate.parameters_schema?.properties\n : dbModel?.parameters.properties;\n const additionalEncryptedExtra = JSON.parse(\n dbToUpdate.masked_encrypted_extra || '{}',\n );\n const paramConfigArray = Object.keys(parameters_schema || {});\n\n paramConfigArray.forEach(paramConfig => {\n /*\n * Parameters that are annotated with the `x-encrypted-extra` properties should be\n * moved to `masked_encrypted_extra`, so that they are stored encrypted in the\n * backend when the database is created or edited.\n */\n if (\n parameters_schema[paramConfig]['x-encrypted-extra'] &&\n dbToUpdate.parameters?.[paramConfig]\n ) {\n if (typeof dbToUpdate.parameters?.[paramConfig] === 'object') {\n // add new encrypted extra to masked_encrypted_extra object\n additionalEncryptedExtra[paramConfig] =\n dbToUpdate.parameters?.[paramConfig];\n // The backend expects `masked_encrypted_extra` as a string for historical\n // reasons.\n dbToUpdate.parameters[paramConfig] = JSON.stringify(\n dbToUpdate.parameters[paramConfig],\n );\n } else {\n additionalEncryptedExtra[paramConfig] = JSON.parse(\n dbToUpdate.parameters?.[paramConfig] || '{}',\n );\n }\n }\n });\n // cast the new encrypted extra object into a string\n dbToUpdate.masked_encrypted_extra = JSON.stringify(\n additionalEncryptedExtra,\n );\n // this needs to be added by default to gsheets\n if (dbToUpdate.engine === Engines.GSheet) {\n dbToUpdate.impersonate_user = true;\n }\n }\n\n if (dbToUpdate?.parameters?.catalog) {\n // need to stringify gsheets catalog to allow it to be serialized\n dbToUpdate.extra = JSON.stringify({\n ...JSON.parse(dbToUpdate.extra || '{}'),\n engine_params: {\n catalog: dbToUpdate.parameters.catalog,\n },\n });\n }\n\n // strictly checking for false as an indication that the toggle got unchecked\n if (useSSHTunneling === false) {\n // remove ssh tunnel\n dbToUpdate.ssh_tunnel = null;\n }\n\n if (db?.id) {\n const result = await updateResource(\n db.id as number,\n dbToUpdate as DatabaseObject,\n dbToUpdate.configuration_method === ConfigurationMethod.DynamicForm, // onShow toast on SQLA Forms\n );\n if (result) {\n if (onDatabaseAdd) onDatabaseAdd();\n dbConfigExtraExtension\n ?.onSave(extraExtensionComponentState, db)\n .then(({ error }: { error: any }) => {\n if (error) {\n dbConfigExtraExtensionOnSaveError = error;\n addDangerToast(error);\n }\n });\n if (dbConfigExtraExtensionOnSaveError) {\n setLoading(false);\n return;\n }\n if (!editNewDb) {\n onClose();\n addSuccessToast(t('Database settings updated'));\n }\n }\n } else if (db) {\n // Create\n const dbId = await createResource(\n dbToUpdate as DatabaseObject,\n dbToUpdate.configuration_method === ConfigurationMethod.DynamicForm, // onShow toast on SQLA Forms\n );\n if (dbId) {\n setHasConnectedDb(true);\n if (onDatabaseAdd) onDatabaseAdd();\n dbConfigExtraExtension\n ?.onSave(extraExtensionComponentState, db)\n .then(({ error }: { error: any }) => {\n if (error) {\n dbConfigExtraExtensionOnSaveError = error;\n addDangerToast(error);\n }\n });\n if (dbConfigExtraExtensionOnSaveError) {\n setLoading(false);\n return;\n }\n\n if (useTabLayout) {\n // tab layout only has one step\n // so it should close immediately on save\n onClose();\n addSuccessToast(t('Database connected'));\n }\n }\n } else {\n // Import - doesn't use db state\n setImportingModal(true);\n\n if (!(fileList[0].originFileObj instanceof File)) {\n return;\n }\n\n const dbId = await importResource(\n fileList[0].originFileObj,\n passwords,\n sshTunnelPasswords,\n sshTunnelPrivateKeys,\n sshTunnelPrivateKeyPasswords,\n confirmedOverwrite,\n );\n if (dbId) {\n if (onDatabaseAdd) onDatabaseAdd();\n onClose();\n addSuccessToast(t('Database connected'));\n }\n }\n\n setShowCTAbtns(true);\n setEditNewDb(false);\n setLoading(false);\n };\n\n // Initialize\n const fetchDB = () => {\n if (isEditMode && databaseId) {\n if (!dbLoading) {\n fetchResource(databaseId).catch(e =>\n addDangerToast(\n t(\n 'Sorry there was an error fetching database information: %s',\n e.message,\n ),\n ),\n );\n }\n }\n };\n\n const setDatabaseModel = (database_name: string) => {\n if (database_name === 'Other') {\n // Allow users to connect to DB via legacy SQLA form\n setDB({\n type: ActionType.DbSelected,\n payload: {\n database_name,\n configuration_method: ConfigurationMethod.SqlalchemyUri,\n engine: undefined,\n engine_information: {\n supports_file_upload: true,\n },\n },\n });\n } else {\n const selectedDbModel = availableDbs?.databases.filter(\n (db: DatabaseObject) => db.name === database_name,\n )[0];\n const {\n engine,\n parameters,\n engine_information,\n default_driver,\n sqlalchemy_uri_placeholder,\n } = selectedDbModel;\n const isDynamic = parameters !== undefined;\n setDB({\n type: ActionType.DbSelected,\n payload: {\n database_name,\n engine,\n configuration_method: isDynamic\n ? ConfigurationMethod.DynamicForm\n : ConfigurationMethod.SqlalchemyUri,\n engine_information,\n driver: default_driver,\n sqlalchemy_uri_placeholder,\n },\n });\n\n if (engine === Engines.GSheet) {\n // only create a catalog if the DB is Google Sheets\n setDB({ type: ActionType.AddTableCatalogSheet });\n }\n }\n };\n\n const renderAvailableSelector = () => (\n
\n

\n {t('Or choose from a list of other databases we support:')}\n

\n
{t('Supported databases')}
\n \n {[...(availableDbs?.databases || [])]\n ?.sort((a: DatabaseForm, b: DatabaseForm) =>\n a.name.localeCompare(b.name),\n )\n .map((database: DatabaseForm, index: number) => (\n \n {database.name}\n \n ))}\n {/* Allow users to connect to DB via legacy SQLA form */}\n \n {t('Other')}\n \n \n antDAlertStyles(theme)}\n type=\"info\"\n message={\n connectionAlert?.ADD_DATABASE?.message ||\n t('Want to add a new database?')\n }\n description={\n connectionAlert?.ADD_DATABASE ? (\n <>\n {t(\n 'Any databases that allow connections via SQL Alchemy URIs can be added. ',\n )}\n \n {connectionAlert?.ADD_DATABASE.contact_description_link}\n {' '}\n {connectionAlert?.ADD_DATABASE.description}\n \n ) : (\n <>\n {t(\n 'Any databases that allow connections via SQL Alchemy URIs can be added. Learn about how to connect a database driver ',\n )}\n \n {t('here')}\n \n .\n \n )\n }\n />\n
\n );\n\n const renderPreferredSelector = () => (\n
\n {availableDbs?.databases\n ?.filter((db: DatabaseForm) => db.preferred)\n .map((database: DatabaseForm) => (\n setDatabaseModel(database.name)}\n buttonText={database.name}\n icon={dbImages?.[database.engine]}\n key={`${database.name}`}\n />\n ))}\n
\n );\n\n const handleBackButtonOnFinish = () => {\n if (dbFetched) {\n fetchResource(dbFetched.id as number);\n }\n setShowCTAbtns(false);\n setEditNewDb(true);\n };\n\n const handleBackButtonOnConnect = () => {\n if (editNewDb) setHasConnectedDb(false);\n if (importingModal) setImportingModal(false);\n if (importErrored) {\n setImportingModal(false);\n setImportingErrorMessage('');\n setPasswordFields([]);\n setSSHTunnelPasswordFields([]);\n setSSHTunnelPrivateKeyFields([]);\n setSSHTunnelPrivateKeyPasswordFields([]);\n setPasswords({});\n setSSHTunnelPasswords({});\n setSSHTunnelPrivateKeys({});\n setSSHTunnelPrivateKeyPasswords({});\n }\n setDB({ type: ActionType.Reset });\n setFileList([]);\n };\n\n const handleDisableOnImport = () => {\n if (\n importLoading ||\n (alreadyExists.length && !confirmedOverwrite) ||\n (passwordsNeeded.length && JSON.stringify(passwords) === '{}') ||\n (sshPasswordNeeded.length &&\n JSON.stringify(sshTunnelPasswords) === '{}') ||\n (sshPrivateKeyNeeded.length &&\n JSON.stringify(sshTunnelPrivateKeys) === '{}') ||\n (sshPrivateKeyPasswordNeeded.length &&\n JSON.stringify(sshTunnelPrivateKeyPasswords) === '{}')\n )\n return true;\n return false;\n };\n\n const renderModalFooter = () => {\n if (db) {\n // if db show back + connect\n if (!hasConnectedDb || editNewDb) {\n return (\n <>\n \n {t('Back')}\n \n \n {t('Connect')}\n \n \n );\n }\n\n return (\n <>\n \n {t('Back')}\n \n \n {t('Finish')}\n \n \n );\n }\n\n // Import doesn't use db state, so footer will not render in the if statement above\n if (importingModal) {\n return (\n <>\n \n {t('Back')}\n \n \n {t('Connect')}\n \n \n );\n }\n\n return <>;\n };\n\n const renderEditModalFooter = (db: Partial | null) => (\n <>\n \n {t('Close')}\n \n \n {t('Finish')}\n \n \n );\n\n const firstUpdate = useRef(true); // Captures first render\n // Only runs when importing files don't need user input\n useEffect(() => {\n // Will not run on first render\n if (firstUpdate.current) {\n firstUpdate.current = false;\n return;\n }\n\n if (\n !importLoading &&\n !alreadyExists.length &&\n !passwordsNeeded.length &&\n !sshPasswordNeeded.length &&\n !sshPrivateKeyNeeded.length &&\n !sshPrivateKeyPasswordNeeded.length &&\n !isLoading && // This prevents a double toast for non-related imports\n !importErrored // This prevents a success toast on error\n ) {\n onClose();\n addSuccessToast(t('Database connected'));\n }\n }, [\n alreadyExists,\n passwordsNeeded,\n importLoading,\n importErrored,\n sshPasswordNeeded,\n sshPrivateKeyNeeded,\n sshPrivateKeyPasswordNeeded,\n ]);\n\n useEffect(() => {\n if (show) {\n setTabKey(DEFAULT_TAB_KEY);\n setLoading(true);\n getAvailableDbs();\n }\n if (databaseId && show) {\n fetchDB();\n }\n }, [show, databaseId]);\n\n useEffect(() => {\n if (dbFetched) {\n setDB({\n type: ActionType.Fetched,\n payload: dbFetched,\n });\n // keep a copy of the name separate for display purposes\n // because it shouldn't change when the form is updated\n setDbName(dbFetched.database_name);\n }\n }, [dbFetched]);\n\n useEffect(() => {\n if (isLoading) {\n setLoading(false);\n }\n\n if (availableDbs && dbEngine) {\n // set model if passed into props\n setDatabaseModel(dbEngine);\n }\n }, [availableDbs]);\n\n // This forces the modal to scroll until the importing filename is in view\n useEffect(() => {\n if (importingModal) {\n document\n .getElementsByClassName('ant-upload-list-item-name')[0]\n .scrollIntoView();\n }\n }, [importingModal]);\n\n useEffect(() => {\n setPasswordFields([...passwordsNeeded]);\n }, [passwordsNeeded]);\n\n useEffect(() => {\n setSSHTunnelPasswordFields([...sshPasswordNeeded]);\n }, [sshPasswordNeeded]);\n\n useEffect(() => {\n setSSHTunnelPrivateKeyFields([...sshPrivateKeyNeeded]);\n }, [sshPrivateKeyNeeded]);\n\n useEffect(() => {\n setSSHTunnelPrivateKeyPasswordFields([...sshPrivateKeyPasswordNeeded]);\n }, [sshPrivateKeyPasswordNeeded]);\n\n useEffect(() => {\n if (db?.parameters?.ssh !== undefined) {\n setUseSSHTunneling(db.parameters.ssh);\n }\n }, [db?.parameters?.ssh]);\n\n const onDbImport = async (info: UploadChangeParam) => {\n setImportingErrorMessage('');\n setPasswordFields([]);\n setSSHTunnelPasswordFields([]);\n setSSHTunnelPrivateKeyFields([]);\n setSSHTunnelPrivateKeyPasswordFields([]);\n setPasswords({});\n setSSHTunnelPasswords({});\n setSSHTunnelPrivateKeys({});\n setSSHTunnelPrivateKeyPasswords({});\n setImportingModal(true);\n setFileList([\n {\n ...info.file,\n status: 'done',\n },\n ]);\n\n if (!(info.file.originFileObj instanceof File)) return;\n const dbId = await importResource(\n info.file.originFileObj,\n passwords,\n sshTunnelPasswords,\n sshTunnelPrivateKeys,\n sshTunnelPrivateKeyPasswords,\n confirmedOverwrite,\n );\n if (dbId) onDatabaseAdd?.();\n };\n\n const passwordNeededField = () => {\n if (\n !passwordFields.length &&\n !sshTunnelPasswordFields.length &&\n !sshTunnelPrivateKeyFields.length &&\n !sshTunnelPrivateKeyPasswordFields.length\n )\n return null;\n\n const files = [\n ...new Set([\n ...passwordFields,\n ...sshTunnelPasswordFields,\n ...sshTunnelPrivateKeyFields,\n ...sshTunnelPrivateKeyPasswordFields,\n ]),\n ];\n\n return files.map(database => (\n <>\n \n antDAlertStyles(theme)}\n type=\"info\"\n showIcon\n message=\"Database passwords\"\n description={t(\n `The passwords for the databases below are needed in order to import them. Please note that the \"Secure Extra\" and \"Certificate\" sections of the database configuration are not present in explore files and should be added manually after the import if they are needed.`,\n )}\n />\n \n {passwordFields?.indexOf(database) >= 0 && (\n ) =>\n setPasswords({ ...passwords, [database]: event.target.value })\n }\n validationMethods={{ onBlur: () => {} }}\n errorMessage={validationErrors?.password_needed}\n label={t('%s PASSWORD', database.slice(10))}\n css={formScrollableStyles}\n />\n )}\n {sshTunnelPasswordFields?.indexOf(database) >= 0 && (\n ) =>\n setSSHTunnelPasswords({\n ...sshTunnelPasswords,\n [database]: event.target.value,\n })\n }\n validationMethods={{ onBlur: () => {} }}\n errorMessage={validationErrors?.ssh_tunnel_password_needed}\n label={t('%s SSH TUNNEL PASSWORD', database.slice(10))}\n css={formScrollableStyles}\n />\n )}\n {sshTunnelPrivateKeyFields?.indexOf(database) >= 0 && (\n ) =>\n setSSHTunnelPrivateKeys({\n ...sshTunnelPrivateKeys,\n [database]: event.target.value,\n })\n }\n validationMethods={{ onBlur: () => {} }}\n errorMessage={validationErrors?.ssh_tunnel_private_key_needed}\n label={t('%s SSH TUNNEL PRIVATE KEY', database.slice(10))}\n css={formScrollableStyles}\n />\n )}\n {sshTunnelPrivateKeyPasswordFields?.indexOf(database) >= 0 && (\n ) =>\n setSSHTunnelPrivateKeyPasswords({\n ...sshTunnelPrivateKeyPasswords,\n [database]: event.target.value,\n })\n }\n validationMethods={{ onBlur: () => {} }}\n errorMessage={\n validationErrors?.ssh_tunnel_private_key_password_needed\n }\n label={t('%s SSH TUNNEL PRIVATE KEY PASSWORD', database.slice(10))}\n css={formScrollableStyles}\n />\n )}\n \n ));\n };\n\n const importingErrorAlert = () => {\n if (!importingErrorMessage) return null;\n\n return (\n \n 0}\n />\n \n );\n };\n\n const confirmOverwrite = (event: ChangeEvent) => {\n const targetValue = (event.currentTarget?.value as string) ?? '';\n setConfirmedOverwrite(targetValue.toUpperCase() === t('OVERWRITE'));\n };\n\n const confirmOverwriteField = () => {\n if (!alreadyExists.length) return null;\n\n return (\n <>\n \n antdWarningAlertStyles(theme)}\n type=\"warning\"\n showIcon\n message=\"\"\n description={t(\n 'You are importing one or more databases that already exist. Overwriting might cause you to lose some of your work. Are you sure you want to overwrite?',\n )}\n />\n \n {} }}\n errorMessage={validationErrors?.confirm_overwrite}\n label={t('Type \"%s\" to confirm', t('OVERWRITE'))}\n onChange={confirmOverwrite}\n css={formScrollableStyles}\n />\n \n );\n };\n\n const tabChange = (key: string) => setTabKey(key);\n\n const renderStepTwoAlert = () => {\n const { hostname } = window.location;\n let ipAlert = connectionAlert?.REGIONAL_IPS?.default || '';\n const regionalIPs = connectionAlert?.REGIONAL_IPS || {};\n Object.entries(regionalIPs).forEach(([ipRegion, ipRange]) => {\n const regex = new RegExp(ipRegion);\n if (hostname.match(regex)) ipAlert = ipRange;\n });\n return (\n db?.engine && (\n \n antDAlertStyles(theme)}\n type=\"info\"\n showIcon\n message={\n engineSpecificAlertMapping[db.engine]?.message ||\n connectionAlert?.DEFAULT?.message\n }\n description={\n engineSpecificAlertMapping[db.engine]?.description ||\n connectionAlert?.DEFAULT?.description + ipAlert\n }\n />\n \n )\n );\n };\n\n // eslint-disable-next-line consistent-return\n const errorAlert = () => {\n let alertErrors: string[] = [];\n if (!isEmpty(dbErrors)) {\n alertErrors =\n typeof dbErrors === 'object'\n ? Object.values(dbErrors)\n : typeof dbErrors === 'string'\n ? [dbErrors]\n : [];\n } else if (\n !isEmpty(validationErrors) &&\n validationErrors?.error_type === 'GENERIC_DB_ENGINE_ERROR'\n ) {\n alertErrors = [\n validationErrors?.description || validationErrors?.message,\n ];\n }\n if (alertErrors.length) {\n return (\n \n \n \n );\n }\n return <>;\n };\n\n const fetchAndSetDB = () => {\n setLoading(true);\n fetchResource(dbFetched?.id as number).then(r => {\n setItem(LocalStorageKeys.Database, r);\n });\n };\n\n const renderSSHTunnelForm = () => (\n {\n onChange(ActionType.ParametersSSHTunnelChange, {\n type: target.type,\n name: target.name,\n value: target.value,\n });\n handleClearValidationErrors();\n }}\n setSSHTunnelLoginMethod={(method: AuthType) =>\n setDB({\n type: ActionType.SetSSHTunnelLoginMethod,\n payload: { login_method: method },\n })\n }\n />\n );\n\n const renderCTABtns = () => (\n \n {\n setLoading(true);\n fetchAndSetDB();\n redirectURL('/dataset/add/');\n }}\n >\n {t('CREATE DATASET')}\n \n {\n setLoading(true);\n fetchAndSetDB();\n redirectURL(`/sqllab?db=true`);\n }}\n >\n {t('QUERY DATA IN SQL LAB')}\n \n \n );\n\n const renderDatabaseConnectionForm = () => (\n <>\n {\n setDB({ type: ActionType.AddTableCatalogSheet });\n }}\n onQueryChange={({ target }: { target: HTMLInputElement }) =>\n onChange(ActionType.QueryChange, {\n name: target.name,\n value: target.value,\n })\n }\n onExtraInputChange={({ target }: { target: HTMLInputElement }) =>\n onChange(ActionType.ExtraInputChange, {\n name: target.name,\n value: target.value,\n })\n }\n onRemoveTableCatalog={(idx: number) => {\n setDB({\n type: ActionType.RemoveTableCatalogSheet,\n payload: { indexToDelete: idx },\n });\n }}\n onParametersChange={handleParametersChange}\n onChange={({ target }: { target: HTMLInputElement }) =>\n onChange(ActionType.TextChange, {\n name: target.name,\n value: target.value,\n })\n }\n getValidation={() => getValidation(db)}\n validationErrors={validationErrors}\n getPlaceholder={getPlaceholder}\n clearValidationErrors={handleClearValidationErrors}\n />\n {useSSHTunneling && (\n {renderSSHTunnelForm()}\n )}\n \n );\n\n const renderFinishState = () => {\n if (!editNewDb) {\n return (\n \n onChange(ActionType.InputChange, {\n type: target.type,\n name: target.name,\n checked: target.checked,\n value: target.value,\n })\n }\n onTextChange={({ target }: { target: HTMLTextAreaElement }) =>\n onChange(ActionType.TextChange, {\n name: target.name,\n value: target.value,\n })\n }\n onEditorChange={(payload: { name: string; json: any }) =>\n onChange(ActionType.EditorChange, payload)\n }\n onExtraInputChange={({ target }: { target: HTMLInputElement }) => {\n onChange(ActionType.ExtraInputChange, {\n type: target.type,\n name: target.name,\n checked: target.checked,\n value: target.value,\n });\n }}\n onExtraEditorChange={(payload: { name: string; json: any }) =>\n onChange(ActionType.ExtraEditorChange, payload)\n }\n />\n );\n }\n return renderDatabaseConnectionForm();\n };\n\n if (\n fileList.length > 0 &&\n (alreadyExists.length ||\n passwordFields.length ||\n sshTunnelPasswordFields.length ||\n sshTunnelPrivateKeyFields.length ||\n sshTunnelPrivateKeyPasswordFields.length)\n ) {\n return (\n [\n antDModalNoPaddingStyles,\n antDModalStyles(theme),\n formHelperStyles(theme),\n formStyles(theme),\n ]}\n footer={renderModalFooter()}\n maskClosable={false}\n name=\"database\"\n onHide={onClose}\n onHandledPrimaryAction={onSave}\n primaryButtonName={t('Connect')}\n show={show}\n title={

{t('Connect a database')}

}\n width=\"500px\"\n >\n \n {confirmOverwriteField()}\n {importingErrorAlert()}\n {passwordNeededField()}\n \n );\n }\n const modalFooter = isEditMode\n ? renderEditModalFooter(db)\n : renderModalFooter();\n return useTabLayout ? (\n [\n antDTabsStyles,\n antDModalNoPaddingStyles,\n antDModalStyles(theme),\n formHelperStyles(theme),\n formStyles(theme),\n ]}\n name=\"database\"\n data-test=\"database-modal\"\n onHandledPrimaryAction={onSave}\n onHide={onClose}\n primaryButtonName={isEditMode ? t('Save') : t('Connect')}\n width=\"500px\"\n centered\n show={show}\n title={\n

{isEditMode ? t('Edit database') : t('Connect a database')}

\n }\n footer={modalFooter}\n maskClosable={false}\n >\n \n \n \n \n \n \n {t('Basic')}} key=\"1\">\n {useSqlAlchemyForm ? (\n \n \n onChange(ActionType.InputChange, {\n type: target.type,\n name: target.name,\n checked: target.checked,\n value: target.value,\n })\n }\n conf={conf}\n testConnection={testConnection}\n testInProgress={testInProgress}\n >\n \n {useSSHTunneling && renderSSHTunnelForm()}\n \n {isDynamic(db?.backend || db?.engine) && !isEditMode && (\n
infoTooltip(theme)}>\n \n setDB({\n type: ActionType.ConfigMethodChange,\n payload: {\n database_name: db?.database_name,\n configuration_method: ConfigurationMethod.DynamicForm,\n engine: db?.engine,\n },\n })\n }\n css={theme => alchemyButtonLinkStyles(theme)}\n >\n {t('Connect this database using the dynamic form instead')}\n \n \n
\n )}\n
\n ) : (\n renderDatabaseConnectionForm()\n )}\n {!isEditMode && (\n \n antDAlertStyles(theme)}\n message={t('Additional fields may be required')}\n showIcon\n description={\n <>\n {t(\n 'Select databases require additional fields to be completed in the Advanced tab to successfully connect the database. Learn what requirements your databases has ',\n )}\n \n {t('here')}\n \n .\n \n }\n type=\"info\"\n />\n \n )}\n {showDBError && errorAlert()}\n
\n {t('Advanced')}} key=\"2\">\n \n onChange(ActionType.InputChange, {\n type: target.type,\n name: target.name,\n checked: target.checked,\n value: target.value,\n })\n }\n onTextChange={({ target }: { target: HTMLTextAreaElement }) =>\n onChange(ActionType.TextChange, {\n name: target.name,\n value: target.value,\n })\n }\n onEditorChange={(payload: { name: string; json: any }) =>\n onChange(ActionType.EditorChange, payload)\n }\n onExtraInputChange={({ target }: { target: HTMLInputElement }) => {\n onChange(ActionType.ExtraInputChange, {\n type: target.type,\n name: target.name,\n checked: target.checked,\n value: target.value,\n });\n }}\n onExtraEditorChange={(payload: { name: string; json: any }) => {\n onChange(ActionType.ExtraEditorChange, payload);\n }}\n />\n \n \n \n ) : (\n [\n antDModalNoPaddingStyles,\n antDModalStyles(theme),\n formHelperStyles(theme),\n formStyles(theme),\n ]}\n name=\"database\"\n onHandledPrimaryAction={onSave}\n onHide={onClose}\n primaryButtonName={hasConnectedDb ? t('Finish') : t('Connect')}\n width=\"500px\"\n centered\n show={show}\n title={

{t('Connect a database')}

}\n footer={renderModalFooter()}\n maskClosable={false}\n >\n {!isLoading && hasConnectedDb ? (\n <>\n \n {showCTAbtns && renderCTABtns()}\n {renderFinishState()}\n \n ) : (\n <>\n {/* Dynamic Form Step 1 */}\n {!isLoading &&\n (!db ? (\n \n \n {renderPreferredSelector()}\n {renderAvailableSelector()}\n \n {}}\n onChange={onDbImport}\n onRemove={removeFile}\n >\n \n {t('Import database from file')}\n \n \n \n {importingErrorAlert()}\n \n ) : (\n <>\n \n {hasAlert && renderStepTwoAlert()}\n {renderDatabaseConnectionForm()}\n
infoTooltip(theme)}>\n {dbModel.engine !== Engines.GSheet && (\n <>\n \n setDB({\n type: ActionType.ConfigMethodChange,\n payload: {\n engine: db.engine,\n configuration_method:\n ConfigurationMethod.SqlalchemyUri,\n database_name: db.database_name,\n },\n })\n }\n css={buttonLinkStyles}\n >\n {t(\n 'Connect this database with a SQLAlchemy URI string instead',\n )}\n \n \n \n )}\n
\n {/* Step 2 */}\n {showDBError && errorAlert()}\n \n ))}\n \n )}\n {isLoading && }\n \n );\n};\n\nexport default withToasts(DatabaseModal);\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 { FormItem } from 'src/components/Form';\nimport { css, styled, SupersetTheme } from '@superset-ui/core';\n\nconst MODAL_BODY_HEIGHT = 180.5;\nconst antIconHeight = 12;\n\nexport const StyledFormItem = styled(FormItem)`\n ${({ theme }) => css`\n flex: 1;\n margin-top: 0;\n margin-bottom: ${theme.gridUnit * 2.5}px;\n }\n `}\n`;\n\nexport const StyledSwitchContainer = styled.div`\n display: flex;\n align-items: center;\n margin-top: 0;\n`;\n\nexport const antdCollapseStyles = (theme: SupersetTheme) => css`\n .ant-collapse-header {\n padding-top: ${theme.gridUnit * 3.5}px;\n padding-bottom: ${theme.gridUnit * 2.5}px;\n .anticon.ant-collapse-arrow {\n top: calc(50% - ${antIconHeight / 2}px);\n }\n .helper {\n color: ${theme.colors.grayscale.base};\n font-size: ${theme.typography.sizes.s}px;\n }\n }\n h4 {\n font-size: ${theme.typography.sizes.l}px;\n margin-top: 0;\n margin-bottom: ${theme.gridUnit}px;\n }\n p.helper {\n margin-bottom: 0;\n padding: 0;\n }\n`;\n\nexport const antDModalNoPaddingStyles = css`\n .ant-modal-body {\n padding-left: 0;\n padding-right: 0;\n padding-top: 0;\n }\n`;\n\nexport const formStyles = (theme: SupersetTheme) => css`\n .switch-label {\n color: ${theme.colors.grayscale.base};\n margin-left: ${theme.gridUnit * 4}px;\n }\n`;\n\nexport const antDModalStyles = (theme: SupersetTheme) => css`\n .ant-modal-header {\n padding: ${theme.gridUnit * 4.5}px ${theme.gridUnit * 4}px\n ${theme.gridUnit * 4}px;\n }\n\n .ant-modal-close-x .close {\n color: ${theme.colors.grayscale.dark1};\n opacity: 1;\n }\n\n .ant-modal-body {\n height: ${theme.gridUnit * MODAL_BODY_HEIGHT}px;\n }\n\n .ant-modal-footer {\n height: ${theme.gridUnit * 16.25}px;\n }\n\n .info-solid-small {\n vertical-align: bottom;\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 { FC } from 'react';\nimport { styled, t } from '@superset-ui/core';\n\nimport { Typography } from 'src/components';\nimport TagsList from 'src/components/Tags/TagsList';\nimport TagType from 'src/types/TagType';\n\ninterface ColumnsPreviewProps {\n columns: string[];\n maxColumnsToShow?: number;\n}\n\nexport const StyledDivContainer = styled.div`\n //margin-top: 10px;\n //margin-bottom: 10px;\n`;\n\nconst ColumnsPreview: FC = ({\n columns,\n maxColumnsToShow = 4,\n}) => {\n const tags: TagType[] = columns.map(column => ({ name: column }));\n\n return (\n \n Columns:\n {columns.length === 0 ? (\n

{t('Upload file to preview columns')}

\n ) : (\n \n )}\n
\n );\n};\n\nexport default ColumnsPreview;\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 { FC, ReactNode } from 'react';\nimport InfoTooltip from 'src/components/InfoTooltip';\nimport { StyledFormItem } from './styles';\n\ninterface StyledFormItemWithTipProps {\n label: string;\n tip: string;\n name: string;\n children: ReactNode;\n rules?: any[];\n}\n\nconst StyledFormItemWithTip: FC = ({\n label,\n tip,\n children,\n name,\n rules,\n}) => (\n \n {label}\n \n \n }\n name={name}\n rules={rules}\n >\n {children}\n \n);\n\nexport default StyledFormItemWithTip;\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 FunctionComponent,\n useEffect,\n useMemo,\n useState,\n ReactNode,\n FC,\n} from 'react';\n\nimport {\n getClientErrorObject,\n SupersetClient,\n SupersetTheme,\n t,\n} from '@superset-ui/core';\nimport Modal from 'src/components/Modal';\nimport Button from 'src/components/Button';\nimport { Switch, SwitchProps } from 'src/components/Switch';\nimport Collapse from 'src/components/Collapse';\nimport {\n AntdForm,\n AsyncSelect,\n Col,\n Row,\n Select,\n Upload,\n} from 'src/components';\nimport { UploadOutlined } from '@ant-design/icons';\nimport { Input, InputNumber } from 'src/components/Input';\nimport rison from 'rison';\nimport { UploadChangeParam, UploadFile } from 'antd/lib/upload/interface';\nimport withToasts from 'src/components/MessageToasts/withToasts';\nimport {\n antdCollapseStyles,\n antDModalNoPaddingStyles,\n antDModalStyles,\n formStyles,\n StyledFormItem,\n StyledSwitchContainer,\n} from './styles';\nimport ColumnsPreview from './ColumnsPreview';\nimport StyledFormItemWithTip from './StyledFormItemWithTip';\n\ntype UploadType = 'csv' | 'excel' | 'columnar';\n\ninterface UploadDataModalProps {\n addDangerToast: (msg: string) => void;\n addSuccessToast: (msg: string) => void;\n onHide: () => void;\n show: boolean;\n allowedExtensions: string[];\n type: UploadType;\n}\n\nconst CSVSpecificFields = [\n 'delimiter',\n 'skip_initial_space',\n 'skip_blank_lines',\n 'day_first',\n 'column_data_types',\n 'column_dates',\n 'decimal_character',\n 'null_values',\n 'index_column',\n 'header_row',\n 'rows_to_read',\n 'skip_rows',\n];\n\nconst ExcelSpecificFields = [\n 'sheet_name',\n 'column_dates',\n 'decimal_character',\n 'null_values',\n 'index_column',\n 'header_row',\n 'rows_to_read',\n 'skip_rows',\n];\n\nconst ColumnarSpecificFields: string[] = [];\n\nconst NonNullFields = ['rows_to_read', 'index_column'];\n\nconst AllSpecificFields = [\n ...CSVSpecificFields,\n ...ExcelSpecificFields,\n ...ColumnarSpecificFields,\n];\n\nconst UploadTypeToSpecificFields: Record = {\n csv: CSVSpecificFields,\n excel: ExcelSpecificFields,\n columnar: ColumnarSpecificFields,\n};\n\nconst isFieldATypeSpecificField = (field: string, type: UploadType) =>\n UploadTypeToSpecificFields[type].includes(field);\n\ninterface UploadInfo {\n table_name: string;\n schema: string;\n sheet_name?: string;\n delimiter: string;\n already_exists: string;\n skip_initial_space: boolean;\n skip_blank_lines: boolean;\n day_first: boolean;\n decimal_character: string;\n null_values: Array;\n header_row: string;\n rows_to_read: string | null;\n skip_rows: string;\n column_dates: Array;\n index_column: string | null;\n dataframe_index: boolean;\n index_label: string;\n columns_read: Array;\n column_data_types: string;\n}\n\ninterface SheetColumnNames {\n sheet_name: string;\n column_names: string[];\n}\n\nconst defaultUploadInfo: UploadInfo = {\n table_name: '',\n schema: '',\n sheet_name: undefined,\n delimiter: ',',\n already_exists: 'fail',\n skip_initial_space: false,\n skip_blank_lines: false,\n day_first: false,\n decimal_character: '.',\n null_values: [],\n header_row: '0',\n rows_to_read: null,\n skip_rows: '0',\n column_dates: [],\n index_column: null,\n dataframe_index: false,\n index_label: '',\n columns_read: [],\n column_data_types: '',\n};\n\n// Allowed extensions to accept for file upload, users can always override this\n// by selecting all file extensions on the OS file picker. Also \".txt\" will\n// allow all files to be selected.\nconst allowedExtensionsToAccept = {\n csv: '.csv, .tsv',\n excel: '.xls, .xlsx',\n columnar: '.parquet, .zip',\n};\n\nexport const validateUploadFileExtension = (\n file: UploadFile,\n allowedExtensions: string[],\n) => {\n const extensionMatch = file.name.match(/.+\\.([^.]+)$/);\n if (!extensionMatch) {\n return false;\n }\n\n const fileType = extensionMatch[1];\n return allowedExtensions.includes(fileType);\n};\n\ninterface StyledSwitchContainerProps extends SwitchProps {\n label: string;\n dataTest: string;\n children?: ReactNode;\n}\n\nconst SwitchContainer = ({\n label,\n dataTest,\n children,\n ...switchProps\n}: StyledSwitchContainerProps) => (\n \n \n
{label}
\n {children}\n
\n);\n\nconst UploadDataModal: FunctionComponent = ({\n addDangerToast,\n addSuccessToast,\n onHide,\n show,\n allowedExtensions,\n type = 'csv',\n}) => {\n const [form] = AntdForm.useForm();\n const [currentDatabaseId, setCurrentDatabaseId] = useState(0);\n const [fileList, setFileList] = useState([]);\n const [columns, setColumns] = useState([]);\n const [sheetNames, setSheetNames] = useState([]);\n const [sheetsColumnNames, setSheetsColumnNames] = useState<\n SheetColumnNames[]\n >([]);\n const [delimiter, setDelimiter] = useState(',');\n const [isLoading, setIsLoading] = useState(false);\n const [currentSchema, setCurrentSchema] = useState();\n const [currentDataframeIndex, setCurrentDataframeIndex] =\n useState(false);\n const [previewUploadedFile, setPreviewUploadedFile] = useState(true);\n const [fileLoading, setFileLoading] = useState(false);\n\n const createTypeToEndpointMap = (\n databaseId: number,\n ): { [key: string]: string } => ({\n csv: `/api/v1/database/${databaseId}/csv_upload/`,\n excel: `/api/v1/database/${databaseId}/excel_upload/`,\n columnar: `/api/v1/database/${databaseId}/columnar_upload/`,\n });\n\n const typeToFileMetadataEndpoint = {\n csv: '/api/v1/database/csv_metadata/',\n excel: '/api/v1/database/excel_metadata/',\n columnar: '/api/v1/database/columnar_metadata/',\n };\n\n const nullValuesOptions = [\n {\n value: '\"\"',\n label: 'Empty Strings \"\"',\n },\n {\n value: 'None',\n label: 'None',\n },\n {\n value: 'nan',\n label: 'nan',\n },\n {\n value: 'null',\n label: 'null',\n },\n {\n value: 'N/A',\n label: 'N/A',\n },\n ];\n\n const delimiterOptions = [\n {\n value: ',',\n label: 'Comma \",\"',\n },\n {\n value: ';',\n label: 'Semicolon \";\"',\n },\n {\n value: '\\t',\n label: 'Tab \"\\\\t\"',\n },\n {\n value: '|',\n label: 'Pipe',\n },\n ];\n\n const tableAlreadyExistsOptions = [\n {\n value: 'fail',\n label: 'Fail',\n },\n {\n value: 'replace',\n label: 'Replace',\n },\n {\n value: 'append',\n label: 'Append',\n },\n ];\n\n const onChangePreviewUploadedFile = (value: boolean) => {\n setPreviewUploadedFile(value);\n };\n\n const onChangeDatabase = (database: { value: number; label: string }) => {\n setCurrentDatabaseId(database?.value);\n setCurrentSchema(undefined);\n form.setFieldsValue({ schema: undefined });\n };\n\n const onChangeSchema = (schema: { value: string; label: string }) => {\n setCurrentSchema(schema?.value);\n };\n\n const onChangeDelimiter = (value: string) => {\n setDelimiter(value);\n };\n\n const clearModal = () => {\n setFileList([]);\n setColumns([]);\n setCurrentSchema('');\n setCurrentDatabaseId(0);\n setSheetNames([]);\n setIsLoading(false);\n setDelimiter(',');\n setPreviewUploadedFile(true);\n setFileLoading(false);\n setSheetsColumnNames([]);\n form.resetFields();\n };\n\n const loadDatabaseOptions = useMemo(\n () =>\n (input = '', page: number, pageSize: number) => {\n const query = rison.encode_uri({\n filters: [\n {\n col: 'allow_file_upload',\n opr: 'eq',\n value: true,\n },\n ],\n page,\n page_size: pageSize,\n });\n return SupersetClient.get({\n endpoint: `/api/v1/database/?q=${query}`,\n }).then(response => {\n const list = response.json.result.map(\n (item: { id: number; database_name: string }) => ({\n value: item.id,\n label: item.database_name,\n }),\n );\n return { data: list, totalCount: response.json.count };\n });\n },\n [],\n );\n\n const loadSchemaOptions = useMemo(\n () =>\n (input = '', page: number, pageSize: number) => {\n if (!currentDatabaseId) {\n return Promise.resolve({ data: [], totalCount: 0 });\n }\n return SupersetClient.get({\n endpoint: `/api/v1/database/${currentDatabaseId}/schemas/`,\n }).then(response => {\n const list = response.json.result.map((item: string) => ({\n value: item,\n label: item,\n }));\n return { data: list, totalCount: response.json.count };\n });\n },\n [currentDatabaseId],\n );\n\n const loadFileMetadata = (file: File) => {\n const fields = form.getFieldsValue();\n const mergedValues = { ...defaultUploadInfo, ...fields };\n const formData = new FormData();\n formData.append('file', file);\n if (type === 'csv') {\n formData.append('delimiter', mergedValues.delimiter);\n }\n setFileLoading(true);\n return SupersetClient.post({\n endpoint: typeToFileMetadataEndpoint[type],\n body: formData,\n headers: { Accept: 'application/json' },\n })\n .then(response => {\n const { items } = response.json.result;\n if (items && type !== 'excel') {\n setColumns(items[0].column_names);\n } else {\n const { allSheetNames, sheetColumnNamesMap } = items.reduce(\n (\n acc: {\n allSheetNames: any[];\n sheetColumnNamesMap: Record;\n },\n item: { sheet_name: any; column_names: any },\n ) => {\n acc.allSheetNames.push(item.sheet_name);\n acc.sheetColumnNamesMap[item.sheet_name] = item.column_names;\n return acc;\n },\n { allSheetNames: [], sheetColumnNamesMap: {} },\n );\n setColumns(items[0].column_names);\n setSheetNames(allSheetNames);\n form.setFieldsValue({ sheet_name: allSheetNames[0] });\n setSheetsColumnNames(sheetColumnNamesMap);\n }\n })\n .catch(response =>\n getClientErrorObject(response).then(error => {\n addDangerToast(error.error || 'Error');\n setColumns([]);\n form.setFieldsValue({ sheet_name: undefined });\n setSheetNames([]);\n }),\n )\n .finally(() => {\n setFileLoading(false);\n });\n };\n\n const getAllFieldsNotInType = (): string[] => {\n const specificFields = UploadTypeToSpecificFields[type] || [];\n return [...AllSpecificFields].filter(\n field => !specificFields.includes(field),\n );\n };\n\n const appendFormData = (formData: FormData, data: Record) => {\n const allFieldsNotInType = getAllFieldsNotInType();\n Object.entries(data).forEach(([key, value]) => {\n if (\n !(\n allFieldsNotInType.includes(key) ||\n (NonNullFields.includes(key) &&\n (value === undefined || value === null))\n )\n ) {\n formData.append(key, value);\n }\n });\n };\n\n const onClose = () => {\n clearModal();\n onHide();\n };\n\n const onFinish = () => {\n const fields = form.getFieldsValue();\n delete fields.database;\n fields.schema = currentSchema;\n const mergedValues = { ...defaultUploadInfo, ...fields };\n const formData = new FormData();\n const file = fileList[0]?.originFileObj;\n if (file) {\n formData.append('file', file);\n }\n appendFormData(formData, mergedValues);\n setIsLoading(true);\n const endpoint = createTypeToEndpointMap(currentDatabaseId)[type];\n return SupersetClient.post({\n endpoint,\n body: formData,\n headers: { Accept: 'application/json' },\n })\n .then(() => {\n addSuccessToast(t('Data Imported'));\n setIsLoading(false);\n onClose();\n })\n .catch(response =>\n getClientErrorObject(response).then(error => {\n addDangerToast(error.error || 'Error');\n }),\n )\n .finally(() => {\n setIsLoading(false);\n });\n };\n\n const onRemoveFile = (removedFile: UploadFile) => {\n setFileList(fileList.filter(file => file.uid !== removedFile.uid));\n setColumns([]);\n setSheetNames([]);\n form.setFieldsValue({ sheet_name: undefined });\n return false;\n };\n\n const onSheetNameChange = (value: string) => {\n setColumns(sheetsColumnNames[value] ?? []);\n };\n\n const columnsToOptions = () =>\n columns.map(column => ({\n value: column,\n label: column,\n }));\n\n const sheetNamesToOptions = () =>\n sheetNames.map(sheetName => ({\n value: sheetName,\n label: sheetName,\n }));\n\n const onChangeFile = async (info: UploadChangeParam) => {\n setFileList([\n {\n ...info.file,\n status: 'done',\n },\n ]);\n if (!previewUploadedFile) {\n return;\n }\n await loadFileMetadata(info.file.originFileObj);\n };\n\n useEffect(() => {\n if (\n columns.length > 0 &&\n fileList[0].originFileObj &&\n fileList[0].originFileObj instanceof File\n ) {\n if (!previewUploadedFile) {\n return;\n }\n loadFileMetadata(fileList[0].originFileObj).then(r => r);\n }\n }, [delimiter]);\n\n const validateUpload = (_: any, value: string) => {\n if (fileList.length === 0) {\n return Promise.reject(t('Uploading a file is required'));\n }\n if (!validateUploadFileExtension(fileList[0], allowedExtensions)) {\n return Promise.reject(\n t(\n 'Upload a file with a valid extension. Valid: [%s]',\n allowedExtensions.join(','),\n ),\n );\n }\n return Promise.resolve();\n };\n\n const validateDatabase = (_: any, value: string) => {\n if (!currentDatabaseId) {\n return Promise.reject(t('Selecting a database is required'));\n }\n return Promise.resolve();\n };\n\n const uploadTitles = {\n csv: t('CSV Upload'),\n excel: t('Excel Upload'),\n columnar: t('Columnar Upload'),\n };\n\n const UploadTitle: FC = () => {\n const title = uploadTitles[type] || t('Upload');\n return

{title}

;\n };\n\n return (\n [\n antDModalNoPaddingStyles,\n antDModalStyles(theme),\n formStyles(theme),\n ]}\n primaryButtonLoading={isLoading}\n name=\"database\"\n data-test=\"upload-modal\"\n onHandledPrimaryAction={form.submit}\n onHide={onClose}\n width=\"500px\"\n primaryButtonName=\"Upload\"\n centered\n show={show}\n title={}\n >\n \n antdCollapseStyles(theme)}\n >\n \n

{t('General information')}

\n

{t('Upload a file to a database.')}

\n \n }\n key=\"general\"\n >\n \n \n \n {}}\n >\n }\n loading={fileLoading}\n >\n {t('Select')}\n \n \n \n \n \n \n \n \n \n \n {previewUploadedFile && (\n \n \n \n \n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {isFieldATypeSpecificField('delimiter', type) && (\n \n \n \n \n \n \n \n )}\n {isFieldATypeSpecificField('sheet_name', type) && (\n \n \n \n \n \n \n \n )}\n \n \n

{t('File Settings')}

\n

\n {t(\n 'Adjust how spaces, blank lines, null values are handled and other file wide settings.',\n )}\n

\n \n }\n key=\"2\"\n >\n \n \n \n {}}\n />\n \n \n \n {isFieldATypeSpecificField('column_dates', type) && (\n \n \n \n \n \n \n \n )}\n {isFieldATypeSpecificField('decimal_character', type) && (\n \n \n \n \n \n \n \n )}\n {isFieldATypeSpecificField('null_values', type) && (\n \n \n \n \n \n \n \n )}\n {isFieldATypeSpecificField('skip_initial_space', type) && (\n \n \n \n \n \n \n \n )}\n {isFieldATypeSpecificField('skip_blank_lines', type) && (\n \n \n \n \n \n \n \n )}\n {isFieldATypeSpecificField('day_first', type) && (\n \n \n \n \n \n \n \n )}\n \n \n

{t('Columns')}

\n

\n {t(\n 'Adjust column settings such as specifying the columns to read, how duplicates are handled, column data types, and more.',\n )}\n

\n \n }\n key=\"3\"\n >\n \n \n \n \n \n \n \n {isFieldATypeSpecificField('column_data_types', type) && (\n \n \n \n \n \n \n \n )}\n \n \n \n \n \n \n \n {currentDataframeIndex &&\n isFieldATypeSpecificField('index_column', type) && (\n \n \n \n ({\n value: column,\n label: column,\n }))}\n allowClear\n allowNewOptions\n />\n \n \n \n )}\n {currentDataframeIndex && (\n \n \n \n \n \n \n \n )}\n \n {isFieldATypeSpecificField('header_row', type) &&\n isFieldATypeSpecificField('rows_to_read', type) &&\n isFieldATypeSpecificField('skip_rows', type) && (\n \n

{t('Rows')}

\n

\n {t(\n 'Set header rows and the number of rows to read or skip.',\n )}\n

\n \n }\n key=\"4\"\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n \n );\n};\n\nexport default withToasts(UploadDataModal);\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 { ReactElement } from 'react';\n\ninterface TelemetryPixelProps {\n version?: string;\n sha?: string;\n build?: string;\n}\n\n/**\n * Renders a telemetry pixel component to capture anonymous, aggregated telemetry via Scarf.\n * This can be disabled by setting the SCARF_ANALYTICS environment variable to false.\n *\n * @component\n * @param {TelemetryPixelProps} props - The props for the TelemetryPixel component.\n * @param {string} props.version - The version of Superset that's currently in use.\n * @param {string} props.sha - The SHA of Superset that's currently in use.\n * @param {string} props.build - The build of Superset that's currently in use.\n * @returns {JSX.Element | null} The rendered TelemetryPixel component.\n */\n\nconst PIXEL_ID = '0d3461e1-abb1-4691-a0aa-5ed50de66af0';\n\nconst TelemetryPixel = ({\n version = 'unknownVersion',\n sha = 'unknownSHA',\n build = 'unknownBuild',\n}: TelemetryPixelProps): ReactElement | null => {\n const pixelPath = `https://apachesuperset.gateway.scarf.sh/pixel/${PIXEL_ID}/${version}/${sha}/${build}`;\n return process.env.SCARF_ANALYTICS === 'false' ? null : (\n \n );\n};\nexport default TelemetryPixel;\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 { MainNav as Menu } from 'src/components/Menu';\nimport { styled } from '@superset-ui/core';\nimport Icons from 'src/components/Icons';\n\nconst { SubMenu } = Menu;\n\nexport interface Languages {\n [key: string]: {\n flag: string;\n url: string;\n name: string;\n };\n}\n\ninterface LanguagePickerProps {\n locale: string;\n languages: Languages;\n}\n\nconst StyledLabel = styled.div`\n display: flex;\n align-items: center;\n\n & i {\n margin-right: ${({ theme }) => theme.gridUnit * 2}px;\n }\n\n & a {\n display: block;\n width: 150px;\n word-wrap: break-word;\n text-decoration: none;\n }\n`;\n\nconst StyledFlag = styled.i`\n margin-top: 2px;\n`;\n\nexport default function LanguagePicker(props: LanguagePickerProps) {\n const { locale, languages, ...rest } = props;\n return (\n \n \n \n }\n icon={}\n {...rest}\n >\n {Object.keys(languages).map(langKey => (\n \n \n \n {languages[langKey].name}\n \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 { Fragment, useState, useEffect, FC, PureComponent } from 'react';\n\nimport rison from 'rison';\nimport { useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { useQueryParams, BooleanParam } from 'use-query-params';\nimport { isEmpty } from 'lodash';\n\nimport {\n t,\n styled,\n css,\n SupersetTheme,\n SupersetClient,\n getExtensionsRegistry,\n useTheme,\n} from '@superset-ui/core';\nimport { MainNav as Menu } from 'src/components/Menu';\nimport { Tooltip } from 'src/components/Tooltip';\nimport Icons from 'src/components/Icons';\nimport Label from 'src/components/Label';\nimport { findPermission } from 'src/utils/findPermission';\nimport { isUserAdmin } from 'src/dashboard/util/permissionUtils';\nimport {\n MenuObjectProps,\n UserWithPermissionsAndRoles,\n MenuObjectChildProps,\n} from 'src/types/bootstrapTypes';\nimport { RootState } from 'src/dashboard/types';\nimport DatabaseModal from 'src/features/databases/DatabaseModal';\nimport UploadDataModal from 'src/features/databases/UploadDataModel';\nimport { uploadUserPerms } from 'src/views/CRUD/utils';\nimport TelemetryPixel from 'src/components/TelemetryPixel';\nimport LanguagePicker from './LanguagePicker';\nimport {\n ExtensionConfigs,\n GlobalMenuDataOptions,\n RightMenuProps,\n} from './types';\n\nconst extensionsRegistry = getExtensionsRegistry();\n\nconst versionInfoStyles = (theme: SupersetTheme) => css`\n padding: ${theme.gridUnit * 1.5}px ${theme.gridUnit * 4}px\n ${theme.gridUnit * 4}px ${theme.gridUnit * 7}px;\n color: ${theme.colors.grayscale.base};\n font-size: ${theme.typography.sizes.xs}px;\n white-space: nowrap;\n`;\nconst StyledI = styled.div`\n color: ${({ theme }) => theme.colors.primary.dark1};\n`;\n\nconst styledDisabled = (theme: SupersetTheme) => css`\n color: ${theme.colors.grayscale.light1};\n .ant-menu-item-active {\n color: ${theme.colors.grayscale.light1};\n cursor: default;\n }\n`;\n\nconst StyledDiv = styled.div<{ align: string }>`\n display: flex;\n flex-direction: row;\n justify-content: ${({ align }) => align};\n align-items: center;\n margin-right: ${({ theme }) => theme.gridUnit}px;\n .ant-menu-submenu-title > svg {\n top: ${({ theme }) => theme.gridUnit * 5.25}px;\n }\n`;\n\nconst StyledMenuItemWithIcon = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n`;\n\nconst StyledAnchor = styled.a`\n padding-right: ${({ theme }) => theme.gridUnit}px;\n padding-left: ${({ theme }) => theme.gridUnit}px;\n`;\n\nconst tagStyles = (theme: SupersetTheme) => css`\n color: ${theme.colors.grayscale.light5};\n`;\n\nconst styledChildMenu = (theme: SupersetTheme) => css`\n &:hover {\n color: ${theme.colors.primary.base} !important;\n cursor: pointer !important;\n }\n`;\n\nconst { SubMenu } = Menu;\n\nconst RightMenu = ({\n align,\n settings,\n navbarRight,\n isFrontendRoute,\n environmentTag,\n setQuery,\n}: RightMenuProps & {\n setQuery: ({\n databaseAdded,\n datasetAdded,\n }: {\n databaseAdded?: boolean;\n datasetAdded?: boolean;\n }) => void;\n}) => {\n const user = useSelector(\n state => state.user,\n );\n const dashboardId = useSelector(\n state => state.dashboardInfo?.id,\n );\n const userValues = user || {};\n const { roles } = userValues;\n const {\n CSV_EXTENSIONS,\n COLUMNAR_EXTENSIONS,\n EXCEL_EXTENSIONS,\n ALLOWED_EXTENSIONS,\n HAS_GSHEETS_INSTALLED,\n } = useSelector(state => state.common.conf);\n const [showDatabaseModal, setShowDatabaseModal] = useState(false);\n const [showCSVUploadModal, setShowCSVUploadModal] = useState(false);\n const [showExcelUploadModal, setShowExcelUploadModal] =\n useState(false);\n const [showColumnarUploadModal, setShowColumnarUploadModal] =\n useState(false);\n const [engine, setEngine] = useState('');\n const canSql = findPermission('can_sqllab', 'Superset', roles);\n const canDashboard = findPermission('can_write', 'Dashboard', roles);\n const canChart = findPermission('can_write', 'Chart', roles);\n const canDatabase = findPermission('can_write', 'Database', roles);\n const canDataset = findPermission('can_write', 'Dataset', roles);\n\n const { canUploadData, canUploadCSV, canUploadColumnar, canUploadExcel } =\n uploadUserPerms(\n roles,\n CSV_EXTENSIONS,\n COLUMNAR_EXTENSIONS,\n EXCEL_EXTENSIONS,\n ALLOWED_EXTENSIONS,\n );\n\n const showActionDropdown = canSql || canChart || canDashboard;\n const [allowUploads, setAllowUploads] = useState(false);\n const [nonExamplesDBConnected, setNonExamplesDBConnected] =\n useState(false);\n const isAdmin = isUserAdmin(user);\n const showUploads = allowUploads || isAdmin;\n const dropdownItems: MenuObjectProps[] = [\n {\n label: t('Data'),\n icon: 'fa-database',\n childs: [\n {\n label: t('Connect database'),\n name: GlobalMenuDataOptions.DbConnection,\n perm: canDatabase && !nonExamplesDBConnected,\n },\n {\n label: t('Create dataset'),\n name: GlobalMenuDataOptions.DatasetCreation,\n url: '/dataset/add/',\n perm: canDataset && nonExamplesDBConnected,\n },\n {\n label: t('Connect Google Sheet'),\n name: GlobalMenuDataOptions.GoogleSheets,\n perm: canDatabase && HAS_GSHEETS_INSTALLED,\n },\n {\n label: t('Upload CSV to database'),\n name: GlobalMenuDataOptions.CSVUpload,\n perm: canUploadCSV && showUploads,\n disable: isAdmin && !allowUploads,\n },\n {\n label: t('Upload Excel to database'),\n name: GlobalMenuDataOptions.ExcelUpload,\n perm: canUploadExcel && showUploads,\n disable: isAdmin && !allowUploads,\n },\n {\n label: t('Upload Columnar file to database'),\n name: GlobalMenuDataOptions.ColumnarUpload,\n perm: canUploadColumnar && showUploads,\n disable: isAdmin && !allowUploads,\n },\n ],\n },\n {\n label: t('SQL query'),\n url: '/sqllab?new=true',\n icon: 'fa-fw fa-search',\n perm: 'can_sqllab',\n view: 'Superset',\n },\n {\n label: t('Chart'),\n url: Number.isInteger(dashboardId)\n ? `/chart/add?dashboard_id=${dashboardId}`\n : '/chart/add',\n icon: 'fa-fw fa-bar-chart',\n perm: 'can_write',\n view: 'Chart',\n },\n {\n label: t('Dashboard'),\n url: '/dashboard/new',\n icon: 'fa-fw fa-dashboard',\n perm: 'can_write',\n view: 'Dashboard',\n },\n ];\n\n const checkAllowUploads = () => {\n const payload = {\n filters: [\n { col: 'allow_file_upload', opr: 'upload_is_enabled', value: true },\n ],\n };\n SupersetClient.get({\n endpoint: `/api/v1/database/?q=${rison.encode(payload)}`,\n }).then(({ json }: Record) => {\n // There might be some existings Gsheets and Clickhouse DBs\n // with allow_file_upload set as True which is not possible from now on\n const allowedDatabasesWithFileUpload =\n json?.result?.filter(\n (database: any) => database?.engine_information?.supports_file_upload,\n ) || [];\n setAllowUploads(allowedDatabasesWithFileUpload?.length >= 1);\n });\n };\n\n const existsNonExamplesDatabases = () => {\n const payload = {\n filters: [{ col: 'database_name', opr: 'neq', value: 'examples' }],\n };\n SupersetClient.get({\n endpoint: `/api/v1/database/?q=${rison.encode(payload)}`,\n }).then(({ json }: Record) => {\n setNonExamplesDBConnected(json.count >= 1);\n });\n };\n\n useEffect(() => {\n if (canUploadData) {\n checkAllowUploads();\n }\n }, [canUploadData]);\n\n useEffect(() => {\n if (canDatabase || canDataset) {\n existsNonExamplesDatabases();\n }\n }, [canDatabase, canDataset]);\n\n const menuIconAndLabel = (menu: MenuObjectProps) => (\n <>\n \n {menu.label}\n \n );\n\n const handleMenuSelection = (itemChose: any) => {\n if (itemChose.key === GlobalMenuDataOptions.DbConnection) {\n setShowDatabaseModal(true);\n } else if (itemChose.key === GlobalMenuDataOptions.GoogleSheets) {\n setShowDatabaseModal(true);\n setEngine('Google Sheets');\n } else if (itemChose.key === GlobalMenuDataOptions.CSVUpload) {\n setShowCSVUploadModal(true);\n } else if (itemChose.key === GlobalMenuDataOptions.ExcelUpload) {\n setShowExcelUploadModal(true);\n } else if (itemChose.key === GlobalMenuDataOptions.ColumnarUpload) {\n setShowColumnarUploadModal(true);\n }\n };\n\n const handleOnHideModal = () => {\n setEngine('');\n setShowDatabaseModal(false);\n };\n\n const tooltipText = t(\n \"Enable 'Allow file uploads to database' in any database's settings\",\n );\n\n const buildMenuItem = (item: MenuObjectChildProps) =>\n item.disable ? (\n \n \n {item.label}\n \n \n ) : (\n \n {item.url ? {item.label} : item.label}\n \n );\n\n const onMenuOpen = (openKeys: string[]) => {\n // We should query the API only if opening Data submenus\n // because the rest don't need this information. Not using\n // \"Data\" directly since we might change the label later on?\n if (\n openKeys.length > 1 &&\n !isEmpty(\n openKeys?.filter((key: string) =>\n key.includes(`sub2_${dropdownItems?.[0]?.label}`),\n ),\n )\n ) {\n if (canUploadData) checkAllowUploads();\n if (canDatabase || canDataset) existsNonExamplesDatabases();\n }\n return null;\n };\n const RightMenuExtension = extensionsRegistry.get('navbar.right');\n const RightMenuItemIconExtension = extensionsRegistry.get(\n 'navbar.right-menu.item.icon',\n );\n\n const handleDatabaseAdd = () => setQuery({ databaseAdded: true });\n\n const handleLogout = () => {\n localStorage.removeItem('redux');\n };\n\n const theme = useTheme();\n\n return (\n \n {canDatabase && (\n \n )}\n {canUploadCSV && (\n setShowCSVUploadModal(false)}\n show={showCSVUploadModal}\n allowedExtensions={CSV_EXTENSIONS}\n type=\"csv\"\n />\n )}\n {canUploadExcel && (\n setShowExcelUploadModal(false)}\n show={showExcelUploadModal}\n allowedExtensions={EXCEL_EXTENSIONS}\n type=\"excel\"\n />\n )}\n {canUploadColumnar && (\n setShowColumnarUploadModal(false)}\n show={showColumnarUploadModal}\n allowedExtensions={COLUMNAR_EXTENSIONS}\n type=\"columnar\"\n />\n )}\n {environmentTag?.text && (\n o[i], theme.colors)\n }\n >\n {environmentTag.text}\n \n )}\n \n {RightMenuExtension && }\n {!navbarRight.user_is_anonymous && showActionDropdown && (\n \n }\n icon={}\n >\n {dropdownItems?.map?.(menu => {\n const canShowChild = menu.childs?.some(\n item => typeof item === 'object' && !!item.perm,\n );\n if (menu.childs) {\n if (canShowChild) {\n return (\n \n {menu?.childs?.map?.((item, idx) =>\n typeof item !== 'string' && item.name && item.perm ? (\n \n {idx === 3 && }\n {buildMenuItem(item)}\n \n ) : null,\n )}\n \n );\n }\n if (!menu.url) {\n return null;\n }\n }\n return (\n findPermission(\n menu.perm as string,\n menu.view as string,\n roles,\n ) && (\n \n {isFrontendRoute(menu.url) ? (\n \n {' '}\n {menu.label}\n \n ) : (\n \n {' '}\n {menu.label}\n \n )}\n \n )\n );\n })}\n \n )}\n }\n >\n {settings?.map?.((section, index) => [\n \n {section?.childs?.map?.(child => {\n if (typeof child !== 'string') {\n const menuItemDisplay = RightMenuItemIconExtension ? (\n \n {child.label}\n \n \n ) : (\n child.label\n );\n return (\n \n {isFrontendRoute(child.url) ? (\n {menuItemDisplay}\n ) : (\n {menuItemDisplay}\n )}\n \n );\n }\n return null;\n })}\n ,\n index < settings.length - 1 && (\n \n ),\n ])}\n\n {!navbarRight.user_is_anonymous && [\n ,\n \n {navbarRight.user_info_url && (\n \n {t('Info')}\n \n )}\n \n {t('Logout')}\n \n ,\n ]}\n {(navbarRight.version_string || navbarRight.version_sha) && [\n ,\n \n
\n {navbarRight.show_watermark && (\n
\n {t('Powered by Apache Superset')}\n
\n )}\n {navbarRight.version_string && (\n
\n {t('Version')}: {navbarRight.version_string}\n
\n )}\n {navbarRight.version_sha && (\n
\n {t('SHA')}: {navbarRight.version_sha}\n
\n )}\n {navbarRight.build_number && (\n
\n {t('Build')}: {navbarRight.build_number}\n
\n )}\n
\n
,\n ]}\n \n {navbarRight.show_language_picker && (\n \n )}\n \n {navbarRight.documentation_url && (\n <>\n \n {navbarRight.documentation_icon ? (\n \n ) : (\n \n )}\n \n  \n \n )}\n {navbarRight.bug_report_url && (\n <>\n \n {navbarRight.bug_report_icon ? (\n \n ) : (\n \n )}\n \n  \n \n )}\n {navbarRight.user_is_anonymous && (\n \n \n {t('Login')}\n \n )}\n \n
\n );\n};\n\nconst RightMenuWithQueryWrapper: FC = props => {\n const [, setQuery] = useQueryParams({\n databaseAdded: BooleanParam,\n datasetAdded: BooleanParam,\n });\n\n return ;\n};\n\n// Query param manipulation requires that, during the setup, the\n// QueryParamProvider is present and configured.\n// Superset still has multiple entry points, and not all of them have\n// the same setup, and critically, not all of them have the QueryParamProvider.\n// This wrapper ensures the RightMenu renders regardless of the provider being present.\nclass RightMenuErrorWrapper extends PureComponent {\n state = {\n hasError: false,\n };\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n noop = () => {};\n\n render() {\n if (this.state.hasError) {\n return ;\n }\n\n return this.props.children;\n }\n}\n\nconst RightMenuWrapper: FC = props => (\n \n \n \n);\n\nexport default RightMenuWrapper;\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 { useState, useEffect } from 'react';\nimport { styled, css, useTheme, SupersetTheme } from '@superset-ui/core';\nimport { debounce } from 'lodash';\nimport { Global } from '@emotion/react';\nimport { getUrlParam } from 'src/utils/urlUtils';\nimport { Row, Col, Grid } from 'src/components';\nimport { MainNav as DropdownMenu, MenuMode } from 'src/components/Menu';\nimport { Tooltip } from 'src/components/Tooltip';\nimport { NavLink, useLocation } from 'react-router-dom';\nimport { GenericLink } from 'src/components/GenericLink/GenericLink';\nimport Icons from 'src/components/Icons';\nimport { useUiConfig } from 'src/components/UiConfigContext';\nimport { URL_PARAMS } from 'src/constants';\nimport {\n MenuObjectChildProps,\n MenuObjectProps,\n MenuData,\n} from 'src/types/bootstrapTypes';\nimport RightMenu from './RightMenu';\n\ninterface MenuProps {\n data: MenuData;\n isFrontendRoute?: (path?: string) => boolean;\n}\n\nconst StyledHeader = styled.header`\n ${({ theme }) => `\n background-color: ${theme.colors.grayscale.light5};\n margin-bottom: 2px;\n z-index: 10;\n\n &:nth-last-of-type(2) nav {\n margin-bottom: 2px;\n }\n .caret {\n display: none;\n }\n .navbar-brand {\n display: flex;\n flex-direction: column;\n justify-content: center;\n /* must be exactly the height of the Antd navbar */\n min-height: 50px;\n padding: ${theme.gridUnit}px\n ${theme.gridUnit * 2}px\n ${theme.gridUnit}px\n ${theme.gridUnit * 4}px;\n max-width: ${theme.gridUnit * theme.brandIconMaxWidth}px;\n img {\n height: 100%;\n object-fit: contain;\n }\n &:focus {\n border-color: transparent;\n }\n &:focus-visible {\n border-color: ${theme.colors.primary.dark1};\n }\n }\n .navbar-brand-text {\n border-left: 1px solid ${theme.colors.grayscale.light2};\n border-right: 1px solid ${theme.colors.grayscale.light2};\n height: 100%;\n color: ${theme.colors.grayscale.dark1};\n padding-left: ${theme.gridUnit * 4}px;\n padding-right: ${theme.gridUnit * 4}px;\n margin-right: ${theme.gridUnit * 6}px;\n font-size: ${theme.gridUnit * 4}px;\n float: left;\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n span {\n max-width: ${theme.gridUnit * 58}px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n @media (max-width: 1127px) {\n display: none;\n }\n }\n .main-nav .ant-menu-submenu-title > svg {\n top: ${theme.gridUnit * 5.25}px;\n }\n @media (max-width: 767px) {\n .navbar-brand {\n float: none;\n }\n }\n .ant-menu-horizontal .ant-menu-item {\n height: 100%;\n line-height: inherit;\n }\n .ant-menu > .ant-menu-item > a {\n padding: ${theme.gridUnit * 4}px;\n }\n @media (max-width: 767px) {\n .ant-menu-item {\n padding: 0 ${theme.gridUnit * 6}px 0\n ${theme.gridUnit * 3}px !important;\n }\n .ant-menu > .ant-menu-item > a {\n padding: 0px;\n }\n .main-nav .ant-menu-submenu-title > svg:nth-of-type(1) {\n display: none;\n }\n .ant-menu-item-active > a {\n &:hover {\n color: ${theme.colors.primary.base} !important;\n background-color: transparent !important;\n }\n }\n }\n .ant-menu-item a {\n &:hover {\n color: ${theme.colors.grayscale.dark1};\n background-color: ${theme.colors.primary.light5};\n border-bottom: none;\n margin: 0;\n &:after {\n opacity: 1;\n width: 100%;\n }\n }\n }\n `}\n`;\nconst globalStyles = (theme: SupersetTheme) => css`\n .ant-menu-submenu.ant-menu-submenu-popup.ant-menu.ant-menu-light.ant-menu-submenu-placement-bottomLeft {\n border-radius: 0px;\n }\n .ant-menu-submenu.ant-menu-submenu-popup.ant-menu.ant-menu-light {\n border-radius: 0px;\n }\n .ant-menu-vertical > .ant-menu-submenu.data-menu > .ant-menu-submenu-title {\n height: 28px;\n i {\n padding-right: ${theme.gridUnit * 2}px;\n margin-left: ${theme.gridUnit * 1.75}px;\n }\n }\n .ant-menu-item-selected {\n background-color: transparent;\n &:not(.ant-menu-item-active) {\n color: inherit;\n border-bottom-color: transparent;\n & > a {\n color: inherit;\n }\n }\n }\n .ant-menu-horizontal > .ant-menu-item:has(> .is-active) {\n color: ${theme.colors.primary.base};\n border-bottom-color: ${theme.colors.primary.base};\n & > a {\n color: ${theme.colors.primary.base};\n }\n }\n .ant-menu-vertical > .ant-menu-item:has(> .is-active) {\n background-color: ${theme.colors.primary.light5};\n & > a {\n color: ${theme.colors.primary.base};\n }\n }\n`;\nconst { SubMenu } = DropdownMenu;\n\nconst { useBreakpoint } = Grid;\n\nexport function Menu({\n data: {\n menu,\n brand,\n navbar_right: navbarRight,\n settings,\n environment_tag: environmentTag,\n },\n isFrontendRoute = () => false,\n}: MenuProps) {\n const [showMenu, setMenu] = useState('horizontal');\n const screens = useBreakpoint();\n const uiConfig = useUiConfig();\n const theme = useTheme();\n\n useEffect(() => {\n function handleResize() {\n if (window.innerWidth <= 767) {\n setMenu('inline');\n } else setMenu('horizontal');\n }\n handleResize();\n const windowResize = debounce(() => handleResize(), 10);\n window.addEventListener('resize', windowResize);\n return () => window.removeEventListener('resize', windowResize);\n }, []);\n\n enum Paths {\n Explore = '/explore',\n Dashboard = '/dashboard',\n Chart = '/chart',\n Datasets = '/tablemodelview',\n }\n\n const defaultTabSelection: string[] = [];\n const [activeTabs, setActiveTabs] = useState(defaultTabSelection);\n const location = useLocation();\n useEffect(() => {\n const path = location.pathname;\n switch (true) {\n case path.startsWith(Paths.Dashboard):\n setActiveTabs(['Dashboards']);\n break;\n case path.startsWith(Paths.Chart) || path.startsWith(Paths.Explore):\n setActiveTabs(['Charts']);\n break;\n case path.startsWith(Paths.Datasets):\n setActiveTabs(['Datasets']);\n break;\n default:\n setActiveTabs(defaultTabSelection);\n }\n }, [location.pathname]);\n\n const standalone = getUrlParam(URL_PARAMS.standalone);\n if (standalone || uiConfig.hideNav) return <>;\n\n const renderSubMenu = ({\n label,\n childs,\n url,\n index,\n isFrontendRoute,\n }: MenuObjectProps) => {\n if (url && isFrontendRoute) {\n return (\n \n \n {label}\n \n \n );\n }\n if (url) {\n return (\n \n {label}\n \n );\n }\n return (\n : }\n >\n {childs?.map((child: MenuObjectChildProps | string, index1: number) => {\n if (typeof child === 'string' && child === '-' && label !== 'Data') {\n return ;\n }\n if (typeof child !== 'string') {\n return (\n \n {child.isFrontendRoute ? (\n \n {child.label}\n \n ) : (\n {child.label}\n )}\n \n );\n }\n return null;\n })}\n \n );\n };\n return (\n \n \n \n \n \n {isFrontendRoute(window.location.pathname) ? (\n \n {brand.alt}\n \n ) : (\n \n {brand.alt}\n \n )}\n \n {brand.text && (\n
\n {brand.text}\n
\n )}\n \n {menu.map((item, index) => {\n const props = {\n index,\n ...item,\n isFrontendRoute: isFrontendRoute(item.url),\n childs: item.childs?.map(c => {\n if (typeof c === 'string') {\n return c;\n }\n\n return {\n ...c,\n isFrontendRoute: isFrontendRoute(c.url),\n };\n }),\n };\n\n return renderSubMenu(props);\n })}\n \n \n \n \n \n
\n
\n );\n}\n\n// transform the menu data to reorganize components\nexport default function MenuWrapper({ data, ...rest }: MenuProps) {\n const newMenuData = {\n ...data,\n };\n // Menu items that should go into settings dropdown\n const settingsMenus = {\n Data: true,\n Security: true,\n Manage: true,\n };\n\n // Cycle through menu.menu to build out cleanedMenu and settings\n const cleanedMenu: MenuObjectProps[] = [];\n const settings: MenuObjectProps[] = [];\n newMenuData.menu.forEach((item: any) => {\n if (!item) {\n return;\n }\n\n const children: (MenuObjectProps | string)[] = [];\n const newItem = {\n ...item,\n };\n\n // Filter childs\n if (item.childs) {\n item.childs.forEach((child: MenuObjectChildProps | string) => {\n if (typeof child === 'string') {\n children.push(child);\n } else if ((child as MenuObjectChildProps).label) {\n children.push(child);\n }\n });\n\n newItem.childs = children;\n }\n\n if (!settingsMenus.hasOwnProperty(item.name)) {\n cleanedMenu.push(newItem);\n } else {\n settings.push(newItem);\n }\n });\n\n newMenuData.menu = cleanedMenu;\n newMenuData.settings = settings;\n\n return ;\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 { TableTab } from 'src/views/CRUD/types';\nimport { DashboardContextForExplore } from 'src/types/DashboardContextForExplore';\n\nexport enum LocalStorageKeys {\n /**\n * START LEGACY LOCAL STORAGE KEYS\n *\n * Do not follow the patterns here for key names. Keys should instead be namespaced to avoid\n * collisions.\n *\n * TODO: Update all local storage keys to follow the new pattern. This is a breaking change,\n * and therefore should be done in a major release.\n */\n Database = 'db',\n ChartSplitSizes = 'chart_split_sizes',\n ControlsWidth = 'controls_width',\n DatasourceWidth = 'datasource_width',\n IsDatapanelOpen = 'is_datapanel_open',\n HomepageChartFilter = 'homepage_chart_filter',\n HomepageDashboardFilter = 'homepage_dashboard_filter',\n HomepageCollapseState = 'homepage_collapse_state',\n HomepageActivityFilter = 'homepage_activity_filter',\n DatasetnameSetSuccessful = 'datasetname_set_successful',\n /** END LEGACY LOCAL STORAGE KEYS */\n\n /**\n * New local storage keys should be namespaced to avoid collisions. Keys should be named in the\n * form [namespace]__[key].\n *\n * Example:\n * sqllab__is_autocomplete_enabled\n */\n SqllabIsAutocompleteEnabled = 'sqllab__is_autocomplete_enabled',\n SqllabIsRenderHtmlEnabled = 'sqllab__is_render_html_enabled',\n ExploreDataTableOriginalFormattedTimeColumns = 'explore__data_table_original_formatted_time_columns',\n DashboardCustomFilterBarWidths = 'dashboard__custom_filter_bar_widths',\n DashboardExploreContext = 'dashboard__explore_context',\n DashboardEditorShowOnlyMyCharts = 'dashboard__editor_show_only_my_charts',\n CommonResizableSidebarWidths = 'common__resizable_sidebar_widths',\n}\n\nexport type LocalStorageValues = {\n db: object | null;\n chart_split_sizes: [number, number];\n controls_width: number;\n datasource_width: number;\n is_datapanel_open: boolean;\n homepage_chart_filter: TableTab;\n homepage_dashboard_filter: TableTab;\n homepage_collapse_state: string[];\n datasetname_set_successful: boolean;\n homepage_activity_filter: TableTab | null;\n sqllab__is_autocomplete_enabled: boolean;\n sqllab__is_render_html_enabled: boolean;\n explore__data_table_original_formatted_time_columns: Record;\n dashboard__custom_filter_bar_widths: Record;\n dashboard__explore_context: Record;\n dashboard__editor_show_only_my_charts: boolean;\n common__resizable_sidebar_widths: Record;\n};\n\n/*\n * This function should not be used directly, as it doesn't provide any type safety or any\n * guarantees that the globally namespaced localstorage key is correct.\n *\n * Instead, use getItem and setItem. Any legacy uses should be updated/migrated in future\n * Superset versions (as they may require breaking changes).\n * */\nexport function dangerouslyGetItemDoNotUse(\n key: string,\n defaultValue: any,\n): any {\n try {\n const value = localStorage.getItem(key);\n if (value === null) {\n return defaultValue;\n }\n return JSON.parse(value);\n } catch {\n return defaultValue;\n }\n}\n\n/*\n * This function should not be used directly, as it doesn't provide any type safety or any\n * guarantees that the globally namespaced localstorage key is correct.\n *\n * Instead, use getItem and setItem. Any legacy uses should be updated/migrated in future\n * Superset versions (as they may require breaking changes).\n * */\nexport function dangerouslySetItemDoNotUse(key: string, value: any): void {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // Catch in case localStorage is unavailable\n }\n}\n\nexport function getItem(\n key: K,\n defaultValue: LocalStorageValues[K],\n): LocalStorageValues[K] {\n return dangerouslyGetItemDoNotUse(key, defaultValue);\n}\n\nexport function setItem(\n key: K,\n value: LocalStorageValues[K],\n): void {\n dangerouslySetItemDoNotUse(key, value);\n}\n"],"names":["supersetTextDocs","getDatabaseDocumentationLinks","DOCUMENTATION_LINK","support","ErrorAlert","errorMessage","showDbInstallInstructions","_jsx","Alert","closable","css","theme","antdWarningAlertStyles","colors","warning","light1","gridUnit","dark2","typography","sizes","s","l","type","showIcon","message","description","_jsxs","_Fragment","children","t","href","target","rel","className","CheckboxLabel","styled","label","CheckboxHalf","Icons","primary","base","CheckboxOff","grayscale","CheckboxOn","HiddenInput","input","InputContainer","div","forwardRef","indeterminate","id","checked","onChange","title","labelText","ref","defaultRef","useRef","resolvedRef","useEffect","current","name","htmlFor","TagsDiv","TagsList","tags","editable","onDelete","maxTags","tempMaxTags","setTempMaxTags","useState","handleDelete","index","tagsIsLong","useMemo","length","extraTags","slice","map","tag","Tag","onClick","expand","undefined","toolTipTitle","join","collapse","_extends","Object","assign","bind","i","arguments","source","key","prototype","hasOwnProperty","call","apply","this","canvasStyle","position","bottom","left","height","overflow","border","mirrorProps","_excluded","prevSibling","node","count","previousElementSibling","defaultProps","basedOn","component","ellipsis","maxLine","onReflow","text","trimRight","winWidth","usedProps","keys","LinesEllipsis","constructor","props","super","state","clamped","units","canvas","componentDidMount","initCanvas","reflow","componentDidUpdate","prevProps","copyStyleToCanvas","componentWillUnmount","parentNode","removeChild","setState","callback","document","createElement","setAttribute","forEach","style","body","appendChild","targetStyle","window","getComputedStyle","test","split","Array","from","Error","innerHTML","c","ellipsisIndex","putEllipsis","calcIndexes","newState","indexes","elt","firstElementChild","line","offsetTop","nextElementSibling","push","lastIndex","maxOffsetTop","ndEllipsis","lastElementChild","ndPrevUnit","offsetHeight","pop","isClamped","render","_this$props","Component","rest","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","obj","omittedKeys","ret","omit","replace","StyledButton","Button","StyledImage","StyledInner","StyledBottom","borderRadius","light4","icon","altText","buttonText","src","alt","DatabaseOutlined","light5","weights","normal","light2","ConfigurationMethod","Engines","no_margin_bottom","StyledFormHeader","header","antDTabsStyles","antDModalNoPaddingStyles","infoTooltip","toggleStyle","formScrollableStyles","antDModalStyles","dark1","antDAlertStyles","info","m","bold","StyledAlertMargin","formHelperStyles","error","formStyles","validatedFormStyles","StyledInputContainer","families","sansSerif","StyledJsonEditor","JsonEditor","StyledExpandableForm","CTAS_CVAS_SCHEMA_FORM_HEIGHT","EXPOSE_IN_SQLLAB_FORM_HEIGHT","StyledAlignment","buttonLinkStyles","importDbButtonLinkStyles","TabHeader","EditHeaderTitle","EditHeaderSubtitle","CredentialInfoForm","SelectDatabaseStyles","StyledFooterButton","StyledStickyHeader","zIndex","max","StyledCatalogTable","StyledUploadWrapper","ExtraOptions","db","onInputChange","onTextChange","onEditorChange","onExtraInputChange","onExtraEditorChange","extraExtension","_db$engine_informatio","_db$engine_informatio2","_extraJson$schema_opt","_extraJson$metadata_c","_extraJson$metadata_c2","expandableModalIsOpen","expose_in_sqllab","createAsOpen","allow_ctas","allow_cvas","isFileUploadSupportedByEngine","engine_information","supports_file_upload","supportsDynamicCatalog","supports_dynamic_catalog","extraJson","JSON","parse","extra","value","stringify","useTheme","ExtraExtensionComponent","ExtraExtensionLogo","logo","ExtensionDescription","allowRunAsync","isFeatureEnabled","FeatureFlag","ForceSqlLabRunAsync","allow_run_async","isAllowRunAsyncDisabled","Collapse","expandIconPosition","accordion","antdCollapseStyles","anticonHeight","Panel","IndeterminateCheckbox","InfoTooltip","tooltip","cx","open","placeholder","force_ctas_schema","allow_dml","cost_estimate_enabled","allows_virtual_table_explore","disable_data_preview","schema_options","expand_rows","cache_timeout","metadata_cache_timeout","schema_cache_timeout","table_cache_timeout","_css","iconStyle","color","cancel_query_on_windows_unload","masked_encrypted_extra","json","width","server_cert","impersonate_user","allow_file_upload","schemas_allowed_for_file_upload","fontSize","fontWeight","collapsible","enabled","onEdit","metadata_params","engine_params","version","disable_drill_to_detail","allow_multi_catalog","SqlAlchemyTab","testConnection","conf","testInProgress","_SupersetText$DB_MODA","_SupersetText$DB_MODA2","fallbackDocsUrl","SupersetText","DB_MODAL_SQLALCHEMY_FORM","SQLALCHEMY_DOCS_URL","fallbackDisplayText","SQLALCHEMY_DISPLAY_TEXT","database_name","sqlalchemy_uri","autoComplete","sqlalchemy_uri_placeholder","loading","cta","buttonStyle","wideButton","FIELD_TEXT_MAP","account","helpText","warehouse","role","validatedInputField","required","changeMethods","getValidation","validationErrors","field","_db$parameters","ValidatedInput","parameters","validationMethods","onBlur","onParametersChange","CredentialInfoOptions","encryptedCredentialsMap","gsheets","bigquery","_ref","styles","EncryptedField","isEditMode","editNewDb","_db$parameters2","_db$parameters3","uploadOption","setUploadOption","JsonUpload","valueOf","fileToUpload","setFileToUpload","isPublic","setIsPublic","showCredentialsInfo","engine","isEncrypted","encryptedField","encryptedValue","FormLabel","labelMarginBottom","AntdSelect","defaultValue","Option","option","CopyPaste","viewBox","AntdButton","_document","_document$getElementB","getElementById","click","DeleteFilled","iconSize","accept","async","event","_file","_file2","file","files","SSHTunnelSwitch","clearValidationErrors","dbModel","_dbModel$engine_infor","_db$parameters4","isChecked","setChecked","sshTunnelEnabled","SshTunneling","disableSSHTunnelingForEngine","disable_ssh_tunneling","isSSHTunnelEnabled","ssh","_isEmpty","ssh_tunnel","AntdSwitch","changed","placement","FormFieldOrder","FORM_FIELD_MAP","host","hostField","hasTooltip","tooltipText","http_path","httpPath","_extraJson$engine_par","_extraJson$engine_par2","connect_args","http_path_field","httpPathField","_db$parameters6","console","port","portField","database","databaseField","default_catalog","defaultCatalogField","default_schema","defaultSchemaField","_db$parameters5","username","usernameField","_db$parameters7","password","passwordField","_db$parameters8","visibilityToggle","access_token","accessTokenField","default_value","_db$parameters9","get_url","includes","displayField","query","queryField","query_input","onQueryChange","encryption","forceSSLField","sslForced","_db$parameters10","disabled","credentials_info","service_account_info","catalog","TableCatalog","tableCatalog","catalogError","sheet","idx","_catalogError$idx","_catalogError$idx2","e","CloseOutlined","onRemoveTableCatalog","url","onAddTableCatalog","_extensionsRegistry$g","getExtensionsRegistry","get","DatabaseConnectionForm","getPlaceholder","onParametersUploadFileChange","Form","filter","properties","_parameters$required","_parameters$propertie","_parameters$propertie2","default","irregularDocumentationLinks","postgresql","mssql","ModalHeader","isLoading","useSqlAlchemyForm","hasConnectedDb","dbName","fileList","fileCheck","isEditHeader","backend","useSqlAlchemyFormHeader","stepCurr","stepLast","hasConnectedDbHeader","hasDbHeader","dbModelName","documentationLink","noDbHeader","importDbHeader","StyledDiv","StyledRow","Row","StyledFormItem","AntdForm","Item","StyledInputPassword","AntdInput","Password","SSHTunnelForm","onSSHTunnelParametersChange","setSSHTunnelLoginMethod","_db$ssh_tunnel","_db$ssh_tunnel2","_db$ssh_tunnel3","_db$ssh_tunnel4","_db$ssh_tunnel5","_db$ssh_tunnel6","usePassword","setUsePassword","AuthType","gutter","Col","xs","md","Input","server_address","server_port","initialValue","Radio","Group","PrivateKey","iconRender","visible","Tooltip","EyeInvisibleOutlined","EyeOutlined","TextArea","private_key","rows","private_key_password","extensionsRegistry","DEFAULT_EXTRA","engineSpecificAlertMapping","GSheet","TabsStyled","Tabs","ErrorAlertContainer","SSHTunnelContainer","ActionType","StyledBtns","dbReducer","action","_action$payload$type","_trimmedState$catalog","_action$payload","_action$payload$param","trimmedState","parametersCatalog","actionPayloadJson","ExtraEditorChange","payload","ExtraInputChange","schema","_action$payload$value","trim","InputChange","ParametersChange","startsWith","_action$payload$type2","catalogCopy","catalogToUpdate","splice","parseInt","reduce","item","ParametersSSHTunnelChange","SetSSHTunnelLoginMethod","_trimmedState$ssh_tun","_trimmedState$ssh_tun2","_trimmedState$ssh_tun3","_pick","login_method","RemoveSSHTunnelConfig","AddTableCatalogSheet","RemoveTableCatalogSheet","indexToDelete","EditorChange","QueryChange","fromEntries","URLSearchParams","TextChange","Fetched","entries","configuration_method","DynamicForm","_extraJsonPayload$eng","payloadCatalog","engineRootCatalog","DbSelected","ConfigMethodChange","Reset","withToasts","DatabaseModal","addDangerToast","addSuccessToast","onDatabaseAdd","onHide","show","databaseId","dbEngine","_availableDbs$databas3","_availableDbs$databas4","setDB","useReducer","dbLoading","resource","dbFetched","dbErrors","fetchResource","createResource","updateResource","clearError","useSingleViewResource","tabKey","setTabKey","availableDbs","getAvailableDbs","useAvailableDatabases","setValidationErrors","useDatabaseValidation","setHasConnectedDb","showCTAbtns","setShowCTAbtns","setDbName","setEditNewDb","setLoading","setTestInProgress","passwords","setPasswords","sshTunnelPasswords","setSSHTunnelPasswords","sshTunnelPrivateKeys","setSSHTunnelPrivateKeys","sshTunnelPrivateKeyPasswords","setSSHTunnelPrivateKeyPasswords","confirmedOverwrite","setConfirmedOverwrite","setFileList","importingModal","setImportingModal","importingErrorMessage","setImportingErrorMessage","passwordFields","setPasswordFields","sshTunnelPasswordFields","setSSHTunnelPasswordFields","sshTunnelPrivateKeyFields","setSSHTunnelPrivateKeyFields","sshTunnelPrivateKeyPasswordFields","setSSHTunnelPrivateKeyPasswordFields","extraExtensionComponentState","setExtraExtensionComponentState","SSHTunnelSwitchComponent","useSSHTunneling","setUseSSHTunneling","dbConfigExtraExtension","componentState","useCommonConf","dbImages","getDatabaseImages","connectionAlert","getConnectionAlert","hasAlert","SqlalchemyUri","useTabLayout","showDBError","history","useHistory","databases","find","available","default_driver","driver","useCallback","handleClearValidationErrors","handleParametersChange","onClose","redirectURL","alreadyExists","passwordsNeeded","sshPasswordNeeded","sshPrivateKeyNeeded","sshPrivateKeyPasswordNeeded","importLoading","failed","importErrored","importResource","useImportResource","msg","onSave","_dbConfigExtraExtensi","_dbToUpdate$parameter7","dbConfigExtraExtensionOnSaveError","then","dbToUpdate","_dbToUpdate$parameter","_dbToUpdate$parameter2","errors","parameters_schema","additionalEncryptedExtra","paramConfig","_dbToUpdate$parameter3","_dbToUpdate$parameter4","_dbToUpdate$parameter5","_dbToUpdate$parameter6","_dbConfigExtraExtensi2","_dbConfigExtraExtensi3","originFileObj","File","setDatabaseModel","selectedDbModel","isDynamic","handleBackButtonOnFinish","handleBackButtonOnConnect","renderModalFooter","firstUpdate","catch","getElementsByClassName","scrollIntoView","importingErrorAlert","confirmOverwrite","_event$currentTarget$","_event$currentTarget","targetValue","currentTarget","toUpperCase","errorAlert","alertErrors","_alertErrors","error_type","values","ErrorMessageWithStackTrace","subtitle","copyText","fetchAndSetDB","r","setItem","LocalStorageKeys","Database","renderSSHTunnelForm","method","renderDatabaseConnectionForm","Modal","centered","footer","maskClosable","onHandledPrimaryAction","primaryButtonName","confirm_overwrite","Set","password_needed","ssh_tunnel_password_needed","ssh_tunnel_private_key_needed","ssh_tunnel_private_key_password_needed","modalFooter","renderEditModalFooter","is_managed_externally","defaultActiveKey","activeKey","onTabClick","animated","inkBar","tabPane","TabPane","tab","SqlAlchemyForm","_db$database_name","connection","Number","testDatabaseConnection","errorMsg","_availableDbs$databas","_availableDbs$databas2","DB","alchemyButtonLinkStyles","renderStepTwoAlert","_connectionAlert$REGI","_engineSpecificAlertM","_connectionAlert$DEFA","_engineSpecificAlertM2","_connectionAlert$DEFA2","hostname","location","ipAlert","REGIONAL_IPS","regionalIPs","ipRegion","ipRange","regex","RegExp","match","DEFAULT","_availableDbs$databas5","preferred","IconButton","renderAvailableSelector","_connectionAlert$ADD_","showSearch","sort","a","b","localeCompare","ADD_DATABASE","contact_link","contact_description_link","Upload","customRequest","status","onRemove","removedFile","uid","Loading","renderPreferredSelector","FormItem","StyledSwitchContainer","StyledDivContainer","ColumnsPreview","columns","maxColumnsToShow","column","Typography","Text","StyledFormItemWithTip","tip","rules","CSVSpecificFields","ExcelSpecificFields","ColumnarSpecificFields","NonNullFields","AllSpecificFields","UploadTypeToSpecificFields","csv","excel","columnar","isFieldATypeSpecificField","defaultUploadInfo","table_name","sheet_name","delimiter","already_exists","skip_initial_space","skip_blank_lines","day_first","decimal_character","null_values","header_row","rows_to_read","skip_rows","column_dates","index_column","dataframe_index","index_label","columns_read","column_data_types","allowedExtensionsToAccept","SwitchContainer","dataTest","switchProps","Switch","UploadDataModal","allowedExtensions","form","useForm","currentDatabaseId","setCurrentDatabaseId","setColumns","sheetNames","setSheetNames","sheetsColumnNames","setSheetsColumnNames","setDelimiter","setIsLoading","currentSchema","setCurrentSchema","currentDataframeIndex","setCurrentDataframeIndex","previewUploadedFile","setPreviewUploadedFile","fileLoading","setFileLoading","typeToFileMetadataEndpoint","loadDatabaseOptions","page","pageSize","rison","filters","col","opr","page_size","SupersetClient","endpoint","response","data","result","totalCount","loadSchemaOptions","Promise","resolve","loadFileMetadata","fields","getFieldsValue","mergedValues","formData","FormData","append","post","headers","Accept","items","column_names","allSheetNames","sheetColumnNamesMap","acc","setFieldsValue","getClientErrorObject","finally","resetFields","columnsToOptions","uploadTitles","primaryButtonLoading","submit","UploadTitle","onFinish","_fileList$","appendFormData","allFieldsNotInType","getAllFieldsNotInType","specificFields","createTypeToEndpointMap","layout","initialValues","antIconHeight","span","validator","validateUpload","_","reject","validateUploadFileExtension","extensionMatch","fileType","UploadOutlined","validateDatabase","AsyncSelect","ariaLabel","options","allowClear","Select","allowNewOptions","sheetName","_sheetsColumnNames$va","mode","InputNumber","min","TelemetryPixel","sha","build","pixelPath","referrerPolicy","SubMenu","Menu","StyledLabel","StyledFlag","LanguagePicker","locale","languages","flag","TriangleDown","langKey","whiteSpace","versionInfoStyles","StyledI","styledDisabled","align","StyledMenuItemWithIcon","StyledAnchor","tagStyles","styledChildMenu","RightMenu","settings","navbarRight","isFrontendRoute","environmentTag","setQuery","user","useSelector","dashboardId","_state$dashboardInfo","dashboardInfo","userValues","roles","CSV_EXTENSIONS","COLUMNAR_EXTENSIONS","EXCEL_EXTENSIONS","ALLOWED_EXTENSIONS","HAS_GSHEETS_INSTALLED","common","showDatabaseModal","setShowDatabaseModal","showCSVUploadModal","setShowCSVUploadModal","showExcelUploadModal","setShowExcelUploadModal","showColumnarUploadModal","setShowColumnarUploadModal","setEngine","canSql","findPermission","canDashboard","canChart","canDatabase","canDataset","canUploadData","canUploadCSV","canUploadColumnar","canUploadExcel","uploadUserPerms","showActionDropdown","allowUploads","setAllowUploads","nonExamplesDBConnected","setNonExamplesDBConnected","isAdmin","isUserAdmin","showUploads","dropdownItems","childs","GlobalMenuDataOptions","DbConnection","perm","DatasetCreation","GoogleSheets","CSVUpload","disable","ExcelUpload","ColumnarUpload","view","isInteger","checkAllowUploads","_json$result","allowedDatabasesWithFileUpload","_database$engine_info","existsNonExamplesDatabases","menuIconAndLabel","menu","buildMenuItem","RightMenuExtension","RightMenuItemIconExtension","handleOnHideModal","handleDatabaseAdd","databaseAdded","Label","o","selectable","itemChose","onOpenChange","openKeys","_dropdownItems$","user_is_anonymous","_menu$childs","canShowChild","some","_menu$childs2","Fragment","Divider","Link","to","section","_section$childs","ItemGroup","child","menuItemDisplay","menuChild","user_info_url","handleLogout","localStorage","removeItem","user_logout_url","version_string","version_sha","show_watermark","build_number","show_language_picker","documentation_url","documentation_text","documentation_icon","bug_report_url","bug_report_text","bug_report_icon","user_login_url","RightMenuWithQueryWrapper","useQueryParams","BooleanParam","datasetAdded","RightMenuErrorWrapper","PureComponent","args","hasError","noop","getDerivedStateFromError","StyledHeader","brandIconMaxWidth","globalStyles","DropdownMenu","useBreakpoint","Grid","brand","navbar_right","environment_tag","showMenu","setMenu","screens","uiConfig","useUiConfig","Paths","handleResize","innerWidth","windowResize","_debounce","addEventListener","removeEventListener","defaultTabSelection","activeTabs","setActiveTabs","useLocation","path","pathname","Dashboard","Chart","Explore","Datasets","getUrlParam","URL_PARAMS","standalone","hideNav","Global","arrowPointAtCenter","GenericLink","tabIndex","selectedKeys","_item$childs","renderSubMenu","NavLink","activeClassName","index1","exact","MenuWrapper","newMenuData","settingsMenus","Data","Security","Manage","cleanedMenu","newItem","dangerouslyGetItemDoNotUse","getItem","dangerouslySetItemDoNotUse"],"sourceRoot":""}