This is an automated email from the ASF dual-hosted git repository. beto pushed a commit to branch semantic-layer-ui-semantic-layer in repository https://gitbox.apache.org/repos/asf/superset.git
commit 3d8acd5b719ff646524469aba389995ffb616b33 Author: Beto Dealmeida <[email protected]> AuthorDate: Fri Feb 13 16:46:36 2026 -0500 Dynamic --- .../features/semanticLayers/SemanticLayerModal.tsx | 219 ++++++++++++++++++--- superset/static/service-worker.js | 206 +++++++++---------- 2 files changed, 291 insertions(+), 134 deletions(-) diff --git a/superset-frontend/src/features/semanticLayers/SemanticLayerModal.tsx b/superset-frontend/src/features/semanticLayers/SemanticLayerModal.tsx index 0e176fa081b..045b102aa38 100644 --- a/superset-frontend/src/features/semanticLayers/SemanticLayerModal.tsx +++ b/superset-frontend/src/features/semanticLayers/SemanticLayerModal.tsx @@ -22,11 +22,23 @@ import { styled } from '@apache-superset/core/ui'; import { SupersetClient } from '@superset-ui/core'; import { Select } from '@superset-ui/core/components'; import { Icons } from '@superset-ui/core/components/Icons'; -import { JsonForms } from '@jsonforms/react'; -import type { JsonSchema, UISchemaElement } from '@jsonforms/core'; +import { JsonForms, withJsonFormsControlProps } from '@jsonforms/react'; +import type { + JsonSchema, + UISchemaElement, + ControlProps, +} from '@jsonforms/core'; +import { + rankWith, + and, + isStringControl, + formatIs, + schemaMatches, +} from '@jsonforms/core'; import { rendererRegistryEntries, cellRegistryEntries, + TextControl, } from '@great-expectations/jsonforms-antd-renderers'; import type { ErrorObject } from 'ajv'; import { @@ -36,9 +48,50 @@ import { MODAL_MEDIUM_WIDTH, } from 'src/components/Modal'; +/** + * Custom renderer that renders `Input.Password` for fields with + * `format: "password"` in the JSON Schema (e.g. Pydantic `SecretStr`). + */ +function PasswordControl(props: ControlProps) { + const uischema = { + ...props.uischema, + options: { ...props.uischema.options, type: 'password' }, + }; + return TextControl({ ...props, uischema }); +} +const PasswordRenderer = withJsonFormsControlProps(PasswordControl); +const passwordEntry = { + tester: rankWith(3, and(isStringControl, formatIs('password'))), + renderer: PasswordRenderer, +}; + +/** + * Renderer for `const` properties (e.g. Pydantic discriminator fields). + * Renders nothing visually but ensures the const value is set in form data, + * so discriminated unions resolve correctly on the backend. + */ +function ConstControl({ data, handleChange, path, schema }: ControlProps) { + const constValue = (schema as Record<string, unknown>).const; + useEffect(() => { + if (constValue !== undefined && data !== constValue) { + handleChange(path, constValue); + } + }, [constValue, data, handleChange, path]); + return null; +} +const ConstRenderer = withJsonFormsControlProps(ConstControl); +const constEntry = { + tester: rankWith(10, schemaMatches(s => s !== undefined && 'const' in s)), + renderer: ConstRenderer, +}; + +const renderers = [...rendererRegistryEntries, passwordEntry, constEntry]; + type Step = 'type' | 'config'; type ValidationMode = 'ValidateAndHide' | 'ValidateAndShow'; +const SCHEMA_REFRESH_DEBOUNCE_MS = 500; + /** * Removes empty `enum` arrays from schema properties. The JSON Schema spec * requires `enum` to have at least one item, and AJV rejects empty arrays. @@ -108,6 +161,69 @@ function buildUiSchema( return { type: 'VerticalLayout', elements } as UISchemaElement; } +/** + * Extracts dynamic field dependency mappings from the schema. + * Returns a map of field name → list of dependency field names. + */ +function getDynamicDependencies( + schema: JsonSchema, +): Record<string, string[]> { + const deps: Record<string, string[]> = {}; + if (!schema.properties) return deps; + for (const [key, prop] of Object.entries(schema.properties)) { + if ( + typeof prop === 'object' && + prop !== null && + 'x-dynamic' in prop && + 'x-dependsOn' in prop && + Array.isArray((prop as Record<string, unknown>)['x-dependsOn']) + ) { + deps[key] = (prop as Record<string, unknown>)[ + 'x-dependsOn' + ] as string[]; + } + } + return deps; +} + +/** + * Checks whether all dependency values are filled (non-empty). + * Handles nested objects (like auth) by checking they have at least one key. + */ +function areDependenciesSatisfied( + dependencies: string[], + data: Record<string, unknown>, +): boolean { + return dependencies.every(dep => { + const value = data[dep]; + if (value === null || value === undefined || value === '') return false; + if (typeof value === 'object' && Object.keys(value).length === 0) + return false; + return true; + }); +} + +/** + * Serializes the dependency values for a set of fields into a stable string + * for comparison, so we only re-fetch when dependency values actually change. + */ +function serializeDependencyValues( + dynamicDeps: Record<string, string[]>, + data: Record<string, unknown>, +): string { + const allDepKeys = new Set<string>(); + for (const deps of Object.values(dynamicDeps)) { + for (const dep of deps) { + allDepKeys.add(dep); + } + } + const snapshot: Record<string, unknown> = {}; + for (const key of [...allDepKeys].sort()) { + snapshot[key] = data[key]; + } + return JSON.stringify(snapshot); +} + const ModalContent = styled.div` padding: ${({ theme }) => theme.sizeUnit * 4}px; `; @@ -161,6 +277,9 @@ export default function SemanticLayerModal({ const [validationMode, setValidationMode] = useState<ValidationMode>('ValidateAndHide'); const errorsRef = useRef<ErrorObject[]>([]); + const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null); + const lastDepSnapshotRef = useRef<string>(''); + const dynamicDepsRef = useRef<Record<string, string[]>>({}); const fetchTypes = useCallback(async () => { setLoading(true); @@ -178,27 +297,35 @@ export default function SemanticLayerModal({ } }, [addDangerToast]); + const applySchema = useCallback((rawSchema: JsonSchema) => { + const schema = sanitizeSchema(rawSchema); + setConfigSchema(schema); + setUiSchema(buildUiSchema(schema)); + dynamicDepsRef.current = getDynamicDependencies(rawSchema); + }, []); + const fetchConfigSchema = useCallback( - async (type: string) => { - setLoading(true); + async (type: string, configuration?: Record<string, unknown>) => { + const isInitialFetch = !configuration; + if (isInitialFetch) setLoading(true); try { const { json } = await SupersetClient.post({ endpoint: '/api/v1/semantic_layer/schema/configuration', - jsonPayload: { type }, + jsonPayload: { type, configuration }, }); - const schema: JsonSchema = sanitizeSchema(json.result); - setConfigSchema(schema); - setUiSchema(buildUiSchema(schema)); - setStep('config'); + applySchema(json.result); + if (isInitialFetch) setStep('config'); } catch { - addDangerToast( - t('An error occurred while fetching the configuration schema'), - ); + if (isInitialFetch) { + addDangerToast( + t('An error occurred while fetching the configuration schema'), + ); + } } finally { - setLoading(false); + if (isInitialFetch) setLoading(false); } }, - [addDangerToast], + [addDangerToast, applySchema], ); useEffect(() => { @@ -213,6 +340,9 @@ export default function SemanticLayerModal({ setFormData({}); setValidationMode('ValidateAndHide'); errorsRef.current = []; + lastDepSnapshotRef.current = ''; + dynamicDepsRef.current = {}; + if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current); } }, [show, fetchTypes]); @@ -229,6 +359,9 @@ export default function SemanticLayerModal({ setFormData({}); setValidationMode('ValidateAndHide'); errorsRef.current = []; + lastDepSnapshotRef.current = ''; + dynamicDepsRef.current = {}; + if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current); }; const handleCreate = async () => { @@ -258,22 +391,46 @@ export default function SemanticLayerModal({ } }; - const handleFormChange = ({ - data, - errors, - }: { - data: Record<string, unknown>; - errors?: ErrorObject[]; - }) => { - setFormData(data); - errorsRef.current = errors ?? []; - if ( - validationMode === 'ValidateAndShow' && - errorsRef.current.length === 0 - ) { - handleCreate(); - } - }; + const maybeRefreshSchema = useCallback( + (data: Record<string, unknown>) => { + if (!selectedType) return; + + const dynamicDeps = dynamicDepsRef.current; + if (Object.keys(dynamicDeps).length === 0) return; + + // Check if any dynamic field has all dependencies satisfied + const hasSatisfiedDeps = Object.values(dynamicDeps).some(deps => + areDependenciesSatisfied(deps, data), + ); + if (!hasSatisfiedDeps) return; + + // Only re-fetch if dependency values actually changed + const snapshot = serializeDependencyValues(dynamicDeps, data); + if (snapshot === lastDepSnapshotRef.current) return; + lastDepSnapshotRef.current = snapshot; + + if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current); + debounceTimerRef.current = setTimeout(() => { + fetchConfigSchema(selectedType, data); + }, SCHEMA_REFRESH_DEBOUNCE_MS); + }, + [selectedType, fetchConfigSchema], + ); + + const handleFormChange = useCallback( + ({ data, errors }: { data: Record<string, unknown>; errors?: ErrorObject[] }) => { + setFormData(data); + errorsRef.current = errors ?? []; + if ( + validationMode === 'ValidateAndShow' && + errorsRef.current.length === 0 + ) { + handleCreate(); + } + maybeRefreshSchema(data); + }, + [validationMode, handleCreate, maybeRefreshSchema], + ); const selectedTypeName = types.find(type => type.id === selectedType)?.name ?? ''; @@ -328,7 +485,7 @@ export default function SemanticLayerModal({ schema={configSchema} uischema={uiSchema} data={formData} - renderers={rendererRegistryEntries} + renderers={renderers} cells={cellRegistryEntries} validationMode={validationMode} onChange={handleFormChange} diff --git a/superset/static/service-worker.js b/superset/static/service-worker.js index 1b47c746120..d0398cca888 100644 --- a/superset/static/service-worker.js +++ b/superset/static/service-worker.js @@ -24,7 +24,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; -/******/ +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache @@ -44,29 +44,29 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ loaded: false, /******/ exports: {} /******/ }; -/******/ +/******/ /******/ // Execute the module function /******/ var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ }; /******/ __webpack_require__.i.forEach(function(handler) { handler(execOptions); }); /******/ module = execOptions.module; /******/ execOptions.factory.call(module.exports, module, module.exports, execOptions.require); -/******/ +/******/ /******/ // Flag the module as loaded /******/ module.loaded = true; -/******/ +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } -/******/ +/******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = __webpack_modules__; -/******/ +/******/ /******/ // expose the module cache /******/ __webpack_require__.c = __webpack_module_cache__; -/******/ +/******/ /******/ // expose the module execution interceptor /******/ __webpack_require__.i = []; -/******/ +/******/ /************************************************************************/ /******/ /* webpack/runtime/chunk loaded */ /******/ (() => { @@ -99,7 +99,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return result; /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules @@ -111,7 +111,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return getter; /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/create fake namespace object */ /******/ (() => { /******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); @@ -141,7 +141,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return ns; /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports @@ -153,7 +153,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/get javascript update chunk filename */ /******/ (() => { /******/ // This function allow to reference all chunks @@ -162,17 +162,17 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return "" + chunkId + "." + __webpack_require__.h() + ".hot-update.js"; /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/get update manifest filename */ /******/ (() => { /******/ __webpack_require__.hmrF = () => ("service-worker." + __webpack_require__.h() + ".hot-update.json"); /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/getFullHash */ /******/ (() => { -/******/ __webpack_require__.h = () => ("00be46f47da6fd073e72") +/******/ __webpack_require__.h = () => ("f2a1d44b322dddcb4e87") /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/harmony module decorator */ /******/ (() => { /******/ __webpack_require__.hmd = (module) => { @@ -187,12 +187,12 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return module; /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/load script */ /******/ (() => { /******/ var inProgress = {}; @@ -211,13 +211,13 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ if(!script) { /******/ needAttach = true; /******/ script = document.createElement('script'); -/******/ +/******/ /******/ script.charset = 'utf-8'; /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } /******/ script.setAttribute("data-webpack", dataWebpackPrefix + key); -/******/ +/******/ /******/ script.src = url; /******/ } /******/ inProgress[url] = [done]; @@ -237,7 +237,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ needAttach && document.head.appendChild(script); /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports @@ -248,7 +248,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/node module decorator */ /******/ (() => { /******/ __webpack_require__.nmd = (module) => { @@ -257,7 +257,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return module; /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/sharing */ /******/ (() => { /******/ __webpack_require__.S = {}; @@ -309,30 +309,30 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return initPromises[name] = Promise.all(promises).then(() => (initPromises[name] = 1)); /******/ }; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/hot module replacement */ /******/ (() => { /******/ var currentModuleData = {}; /******/ var installedModules = __webpack_require__.c; -/******/ +/******/ /******/ // module and require creation /******/ var currentChildModule; /******/ var currentParents = []; -/******/ +/******/ /******/ // status /******/ var registeredStatusHandlers = []; /******/ var currentStatus = "idle"; -/******/ +/******/ /******/ // while downloading /******/ var blockingPromises = 0; /******/ var blockingPromisesWaiting = []; -/******/ +/******/ /******/ // The update info /******/ var currentUpdateApplyHandlers; /******/ var queuedInvalidatedModules; -/******/ +/******/ /******/ __webpack_require__.hmrD = currentModuleData; -/******/ +/******/ /******/ __webpack_require__.i.push(function (options) { /******/ var module = options.module; /******/ var require = createRequire(options.require, options.id); @@ -342,10 +342,10 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ currentParents = []; /******/ options.require = require; /******/ }); -/******/ +/******/ /******/ __webpack_require__.hmrC = {}; /******/ __webpack_require__.hmrI = {}; -/******/ +/******/ /******/ function createRequire(require, moduleId) { /******/ var me = installedModules[moduleId]; /******/ if (!me) return require; @@ -396,7 +396,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }; /******/ return fn; /******/ } -/******/ +/******/ /******/ function createModuleHotObject(moduleId, me) { /******/ var _main = currentChildModule !== moduleId; /******/ var hot = { @@ -414,7 +414,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ currentChildModule = _main ? undefined : moduleId; /******/ __webpack_require__(moduleId); /******/ }, -/******/ +/******/ /******/ // Module API /******/ active: true, /******/ accept: function (dep, callback, errorHandler) { @@ -481,7 +481,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ break; /******/ } /******/ }, -/******/ +/******/ /******/ // Management API /******/ check: hotCheck, /******/ apply: hotApply, @@ -496,24 +496,24 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ var idx = registeredStatusHandlers.indexOf(l); /******/ if (idx >= 0) registeredStatusHandlers.splice(idx, 1); /******/ }, -/******/ +/******/ /******/ // inherit from previous dispose call /******/ data: currentModuleData[moduleId] /******/ }; /******/ currentChildModule = undefined; /******/ return hot; /******/ } -/******/ +/******/ /******/ function setStatus(newStatus) { /******/ currentStatus = newStatus; /******/ var results = []; -/******/ +/******/ /******/ for (var i = 0; i < registeredStatusHandlers.length; i++) /******/ results[i] = registeredStatusHandlers[i].call(null, newStatus); -/******/ +/******/ /******/ return Promise.all(results).then(function () {}); /******/ } -/******/ +/******/ /******/ function unblock() { /******/ if (--blockingPromises === 0) { /******/ setStatus("ready").then(function () { @@ -527,7 +527,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }); /******/ } /******/ } -/******/ +/******/ /******/ function trackBlockingPromise(promise) { /******/ switch (currentStatus) { /******/ case "ready": @@ -541,7 +541,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return promise; /******/ } /******/ } -/******/ +/******/ /******/ function waitForBlockingPromises(fn) { /******/ if (blockingPromises === 0) return fn(); /******/ return new Promise(function (resolve) { @@ -550,7 +550,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }); /******/ }); /******/ } -/******/ +/******/ /******/ function hotCheck(applyOnUpdate) { /******/ if (currentStatus !== "idle") { /******/ throw new Error("check() is only allowed in idle status"); @@ -565,11 +565,11 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ ); /******/ } -/******/ +/******/ /******/ return setStatus("prepare").then(function () { /******/ var updatedModules = []; /******/ currentUpdateApplyHandlers = []; -/******/ +/******/ /******/ return Promise.all( /******/ Object.keys(__webpack_require__.hmrC).reduce(function ( /******/ promises, @@ -599,7 +599,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }); /******/ }); /******/ } -/******/ +/******/ /******/ function hotApply(options) { /******/ if (currentStatus !== "ready") { /******/ return Promise.resolve().then(function () { @@ -612,46 +612,46 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ return internalApply(options); /******/ } -/******/ +/******/ /******/ function internalApply(options) { /******/ options = options || {}; -/******/ +/******/ /******/ applyInvalidatedModules(); -/******/ +/******/ /******/ var results = currentUpdateApplyHandlers.map(function (handler) { /******/ return handler(options); /******/ }); /******/ currentUpdateApplyHandlers = undefined; -/******/ +/******/ /******/ var errors = results /******/ .map(function (r) { /******/ return r.error; /******/ }) /******/ .filter(Boolean); -/******/ +/******/ /******/ if (errors.length > 0) { /******/ return setStatus("abort").then(function () { /******/ throw errors[0]; /******/ }); /******/ } -/******/ +/******/ /******/ // Now in "dispose" phase /******/ var disposePromise = setStatus("dispose"); -/******/ +/******/ /******/ results.forEach(function (result) { /******/ if (result.dispose) result.dispose(); /******/ }); -/******/ +/******/ /******/ // Now in "apply" phase /******/ var applyPromise = setStatus("apply"); -/******/ +/******/ /******/ var error; /******/ var reportError = function (err) { /******/ if (!error) error = err; /******/ }; -/******/ +/******/ /******/ var outdatedModules = []; -/******/ +/******/ /******/ var onAccepted = function () { /******/ return Promise.all([disposePromise, applyPromise]).then(function () { /******/ // handle errors in accept handlers and self accepted module load @@ -660,7 +660,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ throw error; /******/ }); /******/ } -/******/ +/******/ /******/ if (queuedInvalidatedModules) { /******/ return internalApply(options).then(function (list) { /******/ outdatedModules.forEach(function (moduleId) { @@ -669,13 +669,13 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return list; /******/ }); /******/ } -/******/ +/******/ /******/ return setStatus("idle").then(function () { /******/ return outdatedModules; /******/ }); /******/ }); /******/ }; -/******/ +/******/ /******/ return Promise.all( /******/ results /******/ .filter(function (result) { @@ -696,7 +696,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }) /******/ .then(onAccepted); /******/ } -/******/ +/******/ /******/ function applyInvalidatedModules() { /******/ if (queuedInvalidatedModules) { /******/ if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = []; @@ -713,12 +713,12 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ } /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/publicPath */ /******/ (() => { /******/ __webpack_require__.p = "/static/assets/"; /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/react refresh */ /******/ (() => { /******/ const setup = (moduleId) => { @@ -736,7 +736,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }; /******/ return refresh; /******/ }; -/******/ +/******/ /******/ __webpack_require__.i.push((options) => { /******/ const originalFactory = options.factory; /******/ options.factory = function(moduleObject, moduleExports, webpackRequire) { @@ -762,7 +762,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }; /******/ }); /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/consumes */ /******/ (() => { /******/ var parseVersion = (str) => { @@ -843,7 +843,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ return fn(scopeName, __webpack_require__.S[scopeName], key, eager, c, d); /******/ }); -/******/ +/******/ /******/ var useFallback = (scopeName, key, fallback) => { /******/ return fallback ? fallback() : failAsNotExist(scopeName, key); /******/ } @@ -904,11 +904,11 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }); /******/ // no chunk loading of consumes /******/ })(); -/******/ +/******/ /******/ /* webpack/runtime/jsonp chunk loading */ /******/ (() => { /******/ // no baseURI -/******/ +/******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded @@ -916,13 +916,13 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ "service-worker": 0, /******/ "webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef": 0 /******/ }; -/******/ +/******/ /******/ // no chunk on demand loading -/******/ +/******/ /******/ // no prefetching -/******/ +/******/ /******/ // no preloaded -/******/ +/******/ /******/ var currentUpdatedModulesList; /******/ var waitingUpdateResolves = {}; /******/ function loadUpdateChunk(chunkId, updatedModulesList) { @@ -948,7 +948,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ __webpack_require__.l(url, loadingEnded); /******/ }); /******/ } -/******/ +/******/ /******/ globalThis["webpackHotUpdatesuperset"] = (chunkId, moreModules, runtime) => { /******/ for(var moduleId in moreModules) { /******/ if(__webpack_require__.o(moreModules, moduleId)) { @@ -962,7 +962,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ waitingUpdateResolves[chunkId] = undefined; /******/ } /******/ }; -/******/ +/******/ /******/ var currentUpdateChunks; /******/ var currentUpdate; /******/ var currentUpdateRemovedChunks; @@ -973,7 +973,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ function getAffectedModuleEffects(updateModuleId) { /******/ var outdatedModules = [updateModuleId]; /******/ var outdatedDependencies = {}; -/******/ +/******/ /******/ var queue = outdatedModules.map(function (id) { /******/ return { /******/ chain: [id], @@ -1031,7 +1031,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }); /******/ } /******/ } -/******/ +/******/ /******/ return { /******/ type: "accepted", /******/ moduleId: updateModuleId, @@ -1039,26 +1039,26 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ outdatedDependencies: outdatedDependencies /******/ }; /******/ } -/******/ +/******/ /******/ function addAllToSet(a, b) { /******/ for (var i = 0; i < b.length; i++) { /******/ var item = b[i]; /******/ if (a.indexOf(item) === -1) a.push(item); /******/ } /******/ } -/******/ +/******/ /******/ // at begin all updates modules are outdated /******/ // the "outdated" status can propagate to parents if they don't accept the children /******/ var outdatedDependencies = {}; /******/ var outdatedModules = []; /******/ var appliedUpdate = {}; -/******/ +/******/ /******/ var warnUnexpectedRequire = function warnUnexpectedRequire(module) { /******/ console.warn( /******/ "[HMR] unexpected require(" + module.id + ") to disposed module" /******/ ); /******/ }; -/******/ +/******/ /******/ for (var moduleId in currentUpdate) { /******/ if (__webpack_require__.o(currentUpdate, moduleId)) { /******/ var newModuleFactory = currentUpdate[moduleId]; @@ -1141,7 +1141,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ } /******/ currentUpdate = undefined; -/******/ +/******/ /******/ // Store self accepted outdated modules to require them later by the module system /******/ var outdatedSelfAcceptedModules = []; /******/ for (var j = 0; j < outdatedModules.length; j++) { @@ -1162,41 +1162,41 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }); /******/ } /******/ } -/******/ +/******/ /******/ var moduleOutdatedDependencies; -/******/ +/******/ /******/ return { /******/ dispose: function () { /******/ currentUpdateRemovedChunks.forEach(function (chunkId) { /******/ delete installedChunks[chunkId]; /******/ }); /******/ currentUpdateRemovedChunks = undefined; -/******/ +/******/ /******/ var idx; /******/ var queue = outdatedModules.slice(); /******/ while (queue.length > 0) { /******/ var moduleId = queue.pop(); /******/ var module = __webpack_require__.c[moduleId]; /******/ if (!module) continue; -/******/ +/******/ /******/ var data = {}; -/******/ +/******/ /******/ // Call dispose handlers /******/ var disposeHandlers = module.hot._disposeHandlers; /******/ for (j = 0; j < disposeHandlers.length; j++) { /******/ disposeHandlers[j].call(null, data); /******/ } /******/ __webpack_require__.hmrD[moduleId] = data; -/******/ +/******/ /******/ // disable module (this disables requires from this module) /******/ module.hot.active = false; -/******/ +/******/ /******/ // remove module from cache /******/ delete __webpack_require__.c[moduleId]; -/******/ +/******/ /******/ // when disposing there is no need to call dispose handler /******/ delete outdatedDependencies[moduleId]; -/******/ +/******/ /******/ // remove "parents" references from all children /******/ for (j = 0; j < module.children.length; j++) { /******/ var child = __webpack_require__.c[module.children[j]]; @@ -1207,7 +1207,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ } /******/ } -/******/ +/******/ /******/ // remove outdated dependency from module children /******/ var dependency; /******/ for (var outdatedModuleId in outdatedDependencies) { @@ -1233,12 +1233,12 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; /******/ } /******/ } -/******/ +/******/ /******/ // run new runtime modules /******/ for (var i = 0; i < currentUpdateRuntime.length; i++) { /******/ currentUpdateRuntime[i](__webpack_require__); /******/ } -/******/ +/******/ /******/ // call accept handlers /******/ for (var outdatedModuleId in outdatedDependencies) { /******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { @@ -1309,7 +1309,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ } /******/ } -/******/ +/******/ /******/ var onAccepted = function () { /******/ // Load self accepted modules /******/ for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { @@ -1353,7 +1353,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ } /******/ }; -/******/ +/******/ /******/ return Promise.all(acceptPromises) /******/ .then(onAccepted) /******/ .then(function () { @@ -1413,7 +1413,7 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ }; /******/ } /******/ }; -/******/ +/******/ /******/ __webpack_require__.hmrM = () => { /******/ if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API"); /******/ return fetch(__webpack_require__.p + __webpack_require__.hmrF()).then((response) => { @@ -1422,9 +1422,9 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ return response.json(); /******/ }); /******/ }; -/******/ +/******/ /******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); -/******/ +/******/ /******/ // install a JSONP callback for chunk loading /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { /******/ var [chunkIds, moreModules, runtime] = data; @@ -1449,14 +1449,14 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ } /******/ return __webpack_require__.O(result); /******/ } -/******/ +/******/ /******/ var chunkLoadingGlobal = globalThis["webpackChunksuperset"] = globalThis["webpackChunksuperset"] || []; /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); /******/ })(); -/******/ +/******/ /************************************************************************/ -/******/ +/******/ /******/ // module cache are used so entry inlining is disabled /******/ // startup /******/ // Load entry module and return exports @@ -1466,6 +1466,6 @@ eval("{/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or /******/ __webpack_require__.O(undefined, ["vendors","vendors-node_modules_rc-component_color-picker_es_index_js-node_modules_rc-component_mutate-o-484854","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./node_modules/@pmmmwh/react-refresh-webpack-plugin/client/ErrorOverlayEntry.js"))) /******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["vendors","vendors-node_modules_rc-component_color-picker_es_index_js-node_modules_rc-component_mutate-o-484854","webpack_sharing_consume_default_react-dom_react-dom-webpack_sharing_consume_default_react_rea-153fef"], () => (__webpack_require__("./src/service-worker.ts"))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); -/******/ +/******/ /******/ })() -; \ No newline at end of file +;
