diff --git a/packages/context/src/context.ts b/packages/context/src/context.ts index 7af86a4..e8cb8f2 100644 --- a/packages/context/src/context.ts +++ b/packages/context/src/context.ts @@ -35,8 +35,14 @@ export const useWorkspaceData = () => { const modelVariables: IVariableTreeNode[] = []; // 绑定变量列表 const storeActionVariables: IVariableTreeNode[] = []; // 模型中的所有 actions const storeVariables: IVariableTreeNode[] = []; // 模型中的所有变量 + const pageStoreVariables: IVariableTreeNode[] = []; // 页面中的组件实例变量 const serviceVariables: IVariableTreeNode[] = []; // 服务中的所有变量 + pageStoreVariables.push({ + title: 'pageStore', + key: 'pageStore', + }); + Object.values(workspace.storeModules).forEach((file) => { const prefix = `stores.${file.name}`; const states: IVariableTreeNode[] = file.states.map((item) => ({ @@ -109,6 +115,7 @@ export const useWorkspaceData = () => { } let expressionVariables: IVariableTreeNode[] = [ + buildVariableOptions('当前页面组件实例', '$pageStore', pageStoreVariables), buildVariableOptions('数据模型', '$stores', storeVariables), buildVariableOptions('服务函数', '$services', serviceVariables), ]; diff --git a/packages/designer/src/sidebar/outline-panel/index.tsx b/packages/designer/src/sidebar/outline-panel/index.tsx index dcb24d0..ebbd9ad 100644 --- a/packages/designer/src/sidebar/outline-panel/index.tsx +++ b/packages/designer/src/sidebar/outline-panel/index.tsx @@ -23,11 +23,7 @@ export function OutlinePanel({ showStateView = true, ...treeProps }: OutlineView > - {showStateView && ( - - - - )} + {showStateView && } ); } diff --git a/packages/designer/src/sidebar/outline-panel/state-tree.tsx b/packages/designer/src/sidebar/outline-panel/state-tree.tsx index 408512d..f684205 100644 --- a/packages/designer/src/sidebar/outline-panel/state-tree.tsx +++ b/packages/designer/src/sidebar/outline-panel/state-tree.tsx @@ -1,7 +1,8 @@ import React, { useEffect, useReducer } from 'react'; import { observer } from '@music163/tango-context'; import { isFunction, isObject, pick } from '@music163/tango-helpers'; -import { JsonView } from '@music163/tango-ui'; +import { CollapsePanel, IconButton, JsonView } from '@music163/tango-ui'; +import { ReloadOutlined } from '@ant-design/icons'; import { useSandboxQuery } from '../../context'; function processTango(obj: any = {}, index = 0) { @@ -26,7 +27,7 @@ export const StateTree = observer(() => { const [, forceUpdate] = useReducer((x) => x + 1, 0); const tangoContext = pick(sandboxQuery.window['tango'] || {}, [ 'stores', - 'page', + 'pageStore', 'services', 'config', ]); @@ -34,6 +35,7 @@ export const StateTree = observer(() => { forceUpdate(); }; useEffect(() => { + // FIXME: 优化这段代码,应该监听 tangoContext 的变化,来刷新 const settingForm = document.querySelector('.SettingPanel'); const ob = new MutationObserver(callback); if (settingForm) { @@ -48,13 +50,31 @@ export const StateTree = observer(() => { }; }, []); return ( - + } + onClick={(e) => { + e.stopPropagation(); + forceUpdate(); + }} + /> + } + > + + ); }); diff --git a/packages/helpers/src/helpers/assert.ts b/packages/helpers/src/helpers/assert.ts index 297a062..cecc538 100644 --- a/packages/helpers/src/helpers/assert.ts +++ b/packages/helpers/src/helpers/assert.ts @@ -50,7 +50,7 @@ export function isNil(val: any) { * @returns */ export function isStoreVariablePath(key: string) { - return /^stores\.[a-zA-Z0-9]+\.\w+$/.test(key); + return key === 'pageStore' || /^stores\.[a-zA-Z0-9]+\.\w+$/.test(key); } /** diff --git a/packages/ui/src/action.tsx b/packages/ui/src/action.tsx index c25d827..a54ff64 100644 --- a/packages/ui/src/action.tsx +++ b/packages/ui/src/action.tsx @@ -68,6 +68,7 @@ export interface ActionProps extends HTMLCoralProps { */ className?: string; children?: React.ReactNode; + onClick?: React.MouseEventHandler; } export function Action({