拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Metabase Embedding SDK 的 InteractiveQuestion.ResetButton 属性详解:重置问题修改的按钮组件

Metabase Embedding SDK 的 InteractiveQuestion.ResetButton 属性详解重置问题修改的按钮组件【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase本篇文章聚焦 Metabase Embedded Analytics SDK 中InteractiveQuestion.ResetButton组件的完整技术参考。它是在自定义交互式图表布局里用于重置问题未保存修改的按钮组件文章将逐一解释其三个核心属性animate、highlightOnHover、type的取值与语义并结合仓库源码说明该组件的显示条件、点击行为与底层实现。读完你可以直接在自定义InteractiveQuestion布局中正确使用并定制该按钮。本文对应的 API 参考片段位于仓库 InteractiveQuestionResetButtonProps.md完整的组件行为说明可参见 InteractiveQuestionComponents.md。组件定位什么时候需要 ResetButtonInteractiveQuestion.ResetButton是InteractiveQuestion命名空间下提供的一组可组合子组件之一用于重置当前问题Question的修改恢复到原始状态。它只在存在未保存更改时才渲染一旦问题没有任何改动该组件会返回null界面上不显示任何内容。在 Metabase 的嵌入式分析 SDK 中InteractiveQuestion默认自带一套完整布局包含标题、可视化、筛选、汇总等你也可以完全自定义布局像搭积木一样把命名空间子组件摆放进自己的容器里。官方提供的自定义示例customize-interactive-question.tsx中ResetButton与Title并排放在页面顶部的网格中import { InteractiveQuestion, type MetabaseAuthConfig, MetabaseProvider, type MetabaseTheme, } from metabase/embedding-sdk-react; const authConfig {} as MetabaseAuthConfig; const theme {} as MetabaseTheme; const ExampleCustomizedInteractiveQuestion () ( div classNameApp style{{ width: 100%, maxWidth: 1600px, height: 800px, margin: 0 auto }} MetabaseProvider authConfig{authConfig} theme{theme} InteractiveQuestion questionId{95} div style{{ display: flex, flexDirection: column, alignItems: center, justifyContent: center, width: 100%, }} div style{{ display: grid, placeItems: center, width: 100% }} InteractiveQuestion.Title / InteractiveQuestion.ResetButton / /div div style{{ display: flex, alignItems: center, justifyContent: flex-start, overflow: hidden, width: 100%, }} div style{{ width: 100% }} InteractiveQuestion.QuestionVisualization / /div div style{{ display: flex, flex: 1, overflow: scroll }} InteractiveQuestion.Summarize / /div /div div style{{ display: flex, flexDirection: column, width: 100% }} InteractiveQuestion.Filter / /div /div /InteractiveQuestion /MetabaseProvider /div );完整可用的命名空间子组件清单AlertsButton、Breakout、ChartTypeDropdown、Filter、Summarize、SaveButton等见 question-reference.md。属性Properties一览ResetButton的函数签名定义在 InteractiveQuestionComponents.md 的ResetButton()小节ResetButton: (props?: ButtonProps) Element | null;props的类型是ButtonProps即文档标题中的InteractiveQuestionResetButtonProps。其类型声明完整形式如下见 ButtonProps.mdtype ButtonProps ButtonProps_2 { animate?: boolean; highlightOnHover?: boolean; type?: button | submit; } HTMLAttributesHTMLButtonElement;属性表PropertyType说明animate?boolean可选。是否启用按钮动画效果。highlightOnHover?boolean可选。鼠标悬停时是否高亮显示按钮。type?button|submit可选。按钮的原生type属性取值默认语义为button可显式指定为submit以用于表单提交场景。三个属性均为可选Optional不传时组件使用内置默认样式与行为。此外ButtonProps还通过交叉类型继承了ButtonProps_2Metabase UI 层基于 Mantine 封装的按钮属性全集variant、radius、size、leftSection、color 等HTMLAttributesHTMLButtonElementReact 原生的按钮 DOM 属性onClick、className、style、disabled等。这意味着你可以直接把className、style、onClick等通用属性传给ResetButton做外观与交互定制。源码级实现显示条件与点击行为在仓库中该组件的实际实现位于 ResetButton.tsxQuestionResetButton它通过useSdkQuestionContext()从InteractiveQuestion的上下文读取当前问题、原始问题与重置回调export const QuestionResetButton ({ onClick, ...buttonProps }: ResetButtonProps {}) { const { question, originalQuestion, onReset } useSdkQuestionContext(); const handleReset (e: MouseEventHTMLButtonElement) { onReset(); onClick?.(e); }; const isQuestionChanged originalQuestion ? isSavedQuestionChanged(question, originalQuestion) : true; const canSave question Lib.canSave(question.query(), question.type()); if (!canSave || !isQuestionChanged) { return null; } return ResetButton onClick{handleReset} {...buttonProps} /; };从源码可以提炼出几个关键行为仅在可保存且有未保存修改时渲染Lib.canSave(...)来自metabase-lib判断当前查询是否可保存isSavedQuestionChanged(question, originalQuestion)来自metabase/querying/common/utils/question判断当前问题与原始问题相比是否有差异。两者任一不满足组件直接渲染null——这与文档中Only appears when there are unsaved changes to the question的描述完全一致。点击时先重置再触发自定义回调handleReset首先调用上下文提供的onReset()完成状态重置随后才调用你传入的onClick。因此你可以在不破坏重置逻辑的前提下追加自己的埋点或副作用处理。剩余属性全部透传除onClick被单独取出包装外animate、highlightOnHover、type等其余属性都通过展开运算符{...buttonProps}原样传给底层按钮。底层按钮的视觉呈现真正负责渲染的是 private/ResetButton.tsx它基于 Mantine 的Button做了封装export const ResetButton (buttonProps: ButtonProps): React.JSX.Element ( Tooltip label{tReset view} Button variantoutline radiusxl sizexs leftSection{Icon namerevert /} style{sizeOverrideStyles} {...buttonProps} / /Tooltip );默认形态为外轮廓样式variantoutline、全圆角radiusxl、小尺寸sizexs左侧带一个revert图标按钮本体 32×32 像素并包裹在Tooltip提示文案为 Reset view中。你在属性表里看到的animate与highlightOnHover正是 Metabase 对 Mantine 按钮的扩展能力最终类型定义见 frontend/src/metabase/ui/components/buttons/Button/index.tsexport type ButtonProps MantineButtonProps { animate?: boolean; highlightOnHover?: boolean; type?: button | submit; } HTMLAttributesHTMLButtonElement;使用建议与注意事项放在自定义布局中的合适位置ResetButton通常与InteractiveQuestion.Title、InteractiveQuestion.SaveButton等顶部操作区组件组合使用便于用户在调整筛选、汇总、图表类型后一键回退。type属性场景如果你把ResetButton放进某个form容器中需要显式设置typebutton防止触发表单提交反之若想让按钮承担提交职责则设置为submit。依赖上下文该组件必须渲染在InteractiveQuestion组件树内部并由MetabaseProvider包裹否则无法从useSdkQuestionContext()取得问题上下文。与SaveButton的搭配SaveButton仅在存在未保存修改时可用ResetButton则在该状态下可见二者天然配对形成修改 → 保存/重置的完整交互闭环。延伸阅读InteractiveQuestion 组件 API组件的整体签名与参数说明InteractiveQuestionProps.mdInteractiveQuestion的完整 props 定义ButtonProps.mdResetButton属性类型ButtonProps的完整声明question-reference.md交互式问题组件参考与自定义布局指引自定义交互式问题示例包含ResetButton在内的完整自定义布局代码【免费下载链接】metabaseThe easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:项目地址: https://gitcode.com/GitHub_Trending/me/metabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门