@chamn/engine 0.0.8 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/package.json +7 -7
- package/public/render.umd.js +12 -12
- package/public/render.umd.js.map +1 -1
- package/src/_dev_/page/Preview/index.tsx +38 -6
|
@@ -1,24 +1,56 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { useEffect, useState } from 'react';
|
|
2
|
-
import { ReactAdapter, Render, useRender } from '@chamn/render';
|
|
3
|
-
import
|
|
3
|
+
import { ReactAdapter, Render, useRender, AssetLoader, collectVariable, flatObject } from '@chamn/render';
|
|
4
|
+
import { AssetPackage, CPageDataType } from '@chamn/model';
|
|
5
|
+
|
|
6
|
+
const loadAssets = async (assets: AssetPackage[]) => {
|
|
7
|
+
// 注入组件物料资源
|
|
8
|
+
const assetLoader = new AssetLoader(assets);
|
|
9
|
+
try {
|
|
10
|
+
await assetLoader.load();
|
|
11
|
+
// 从子窗口获取物料对象
|
|
12
|
+
const componentCollection = collectVariable(assets, window);
|
|
13
|
+
const components = flatObject(componentCollection);
|
|
14
|
+
return components;
|
|
15
|
+
} catch (e) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
4
19
|
|
|
5
20
|
export const Preview = () => {
|
|
6
|
-
const [page, setPage] = useState();
|
|
21
|
+
const [page, setPage] = useState<CPageDataType>();
|
|
7
22
|
const renderHandle = useRender();
|
|
8
23
|
const [loading, setLoading] = useState(true);
|
|
24
|
+
const [pageComponents, setPageComponents] = useState({});
|
|
25
|
+
const loadPageAssets = async (assets: AssetPackage[]) => {
|
|
26
|
+
const components = await loadAssets(assets);
|
|
27
|
+
if (components) {
|
|
28
|
+
setPageComponents(components);
|
|
29
|
+
setLoading(false);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
9
32
|
useEffect(() => {
|
|
10
33
|
const localPage = localStorage.getItem('pageSchema');
|
|
11
34
|
if (localPage) {
|
|
12
|
-
|
|
13
|
-
|
|
35
|
+
const page: CPageDataType = JSON.parse(localPage);
|
|
36
|
+
setPage(page);
|
|
37
|
+
loadPageAssets(page.assets || []);
|
|
14
38
|
}
|
|
15
39
|
}, []);
|
|
40
|
+
|
|
16
41
|
if (loading) {
|
|
17
42
|
return <>Not find page info on local, please ensure you save it on editor</>;
|
|
18
43
|
}
|
|
19
44
|
return (
|
|
20
45
|
<div className="App" style={{ overflow: 'auto', height: '100%' }}>
|
|
21
|
-
<Render
|
|
46
|
+
<Render
|
|
47
|
+
page={page}
|
|
48
|
+
components={{
|
|
49
|
+
...pageComponents,
|
|
50
|
+
}}
|
|
51
|
+
render={renderHandle}
|
|
52
|
+
adapter={ReactAdapter}
|
|
53
|
+
/>
|
|
22
54
|
</div>
|
|
23
55
|
);
|
|
24
56
|
};
|