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({