mirror of
https://github.com/apache/superset.git
synced 2026-07-20 05:36:00 +00:00
Ships the full extensions/chat reference implementation that exercises the chatbot extension platform end-to-end: activation lifecycle and master disposable (teardown contract), React error boundary (fault isolation), mock streaming with AbortController cancellation, commands registration, and the pageContext helper that composes host namespaces. Local branch only — not intended for upstream merge. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
/**
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
import React, { useEffect, useState } from 'react';
|
|
import { commands } from '@apache-superset/core';
|
|
import { Bubble } from './components/Bubble';
|
|
import { Panel } from './components/Panel';
|
|
import { ExtensionErrorBoundary } from './components/ErrorBoundary';
|
|
import { isOpen, subscribe } from './state';
|
|
|
|
/**
|
|
* Root extension component. Mirrors module-state into React via `subscribe`
|
|
* so the bubble↔panel transition is driven by the same command handlers
|
|
* that external callers use (`core.chatbot__open`, `__close`, `__toggle`).
|
|
*/
|
|
export const ReferenceChatbot: React.FC = () => {
|
|
const [open, setOpenState] = useState<boolean>(isOpen());
|
|
|
|
useEffect(() => subscribe(setOpenState), []);
|
|
|
|
return (
|
|
<ExtensionErrorBoundary>
|
|
{open ? (
|
|
<Panel onClose={() => commands.executeCommand('core.chatbot__close')} />
|
|
) : (
|
|
<Bubble onClick={() => commands.executeCommand('core.chatbot__open')} />
|
|
)}
|
|
</ExtensionErrorBoundary>
|
|
);
|
|
};
|