@steedos/service-plugin-amis 2.3.0-beta.8 → 2.3.0

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.
@@ -5,17 +5,23 @@
5
5
  */
6
6
 
7
7
  ; (function () {
8
-
8
+
9
+ const loadCss = (href)=>{
9
10
  try {
10
- // 加载Amis css
11
+ // 加载Amis css
11
12
  let amisStyle = document.createElement("link");
12
13
  amisStyle.setAttribute("rel", "stylesheet");
13
14
  amisStyle.setAttribute("type", "text/css");
14
- amisStyle.setAttribute("href", Steedos.absoluteUrl("/amis/amis.css"));
15
+ amisStyle.setAttribute("href", href);
15
16
  document.getElementsByTagName("head")[0].appendChild(amisStyle);
16
17
  } catch (error) {
17
18
  console.error(error)
18
19
  };
20
+ }
21
+ // loadCss(Steedos.absoluteUrl("/unpkg.com/amis/sdk/sdk.css"))
22
+ loadCss(Steedos.absoluteUrl("/unpkg.com/amis/sdk/helper.css"))
23
+ loadCss(Steedos.absoluteUrl("/unpkg.com/amis/sdk/iconfont.css"))
24
+ loadCss(Steedos.absoluteUrl("/amis/amis.css"))
19
25
 
20
26
  try {
21
27
  window['attrAccept'] = function (file, acceptedFiles) {
@@ -41,16 +47,16 @@
41
47
  return true;
42
48
  }
43
49
 
44
- // 加载Amis SDK: 如果直接放到body中会导致meteor 编译后的 cordova.js 加载报错
50
+ // 加载Amis SDK: 如果直接放到body中会导致 meteor 编译后的 cordova.js 加载报错
45
51
  let amisSDKScript = document.createElement("script");
46
- amisSDKScript.setAttribute("src", Steedos.absoluteUrl('/unpkg.com/@steedos-ui/amis@2.2.26/dist/amis-sdk.umd.min.js'));
52
+ amisSDKScript.setAttribute("src", Steedos.absoluteUrl('/unpkg.com/amis/sdk/sdk.js'));
47
53
  document.getElementsByTagName("head")[0].appendChild(amisSDKScript);
48
54
  } catch (error) {
49
55
  console.error(error)
50
56
  };
51
57
 
52
58
  const getAmisLng = ()=>{
53
- locale = Creator.USER_CONTEXT.user.language
59
+ locale = Creator.USER_CONTEXT?.user?.language
54
60
  if(locale){
55
61
  locale = locale.replace('_', '-');
56
62
  locale = locale === 'en' ? 'en-US' : locale;
@@ -63,12 +69,12 @@
63
69
 
64
70
  // 此处不能使用import, client js 编译时会将import 转为require, 导致加载失败
65
71
  // import('/unpkg.com/@steedos-ui/amis/dist/amis-sdk.umd.min.js').then(() => {
66
-
67
72
  Promise.all([
68
73
  waitForThing(window, 'assetsLoaded'),
69
- waitForThing(window, 'AmisSDK'),
74
+ waitForThing(window, 'amis'),
70
75
  ]).then(()=>{
71
-
76
+ window.React = window.__React;
77
+ window.ReactDOM = window.__ReactDOM;
72
78
  const AmisRenderers = [];
73
79
 
74
80
  const amisComps = lodash.filter(Builder.registry['meta-components'], function(item){ return item.componentName && item.amis?.render});
@@ -77,14 +83,33 @@
77
83
  const Component = Builder.components.find(item => item.name === comp.componentName);
78
84
  if (Component && !AmisRenderers.includes(comp.amis?.render.type)){
79
85
  try {
86
+ let AmisWrapper = Component.class
80
87
  AmisRenderers.push(comp.amis?.render.type);
81
- AmisSDK.amis.Renderer(
88
+ if(comp.componentType === 'amisSchema'){
89
+ let amisReact = amisRequire('react');
90
+ AmisWrapper = function(props){
91
+ const { body, render } = props
92
+ const [schema, setSchema] = amisReact.useState(null);
93
+ amisReact.useEffect(()=>{
94
+ const result = Component.class(props);
95
+ if(result.then && typeof result.then === 'function'){
96
+ result.then((data)=>{
97
+ setSchema(data);
98
+ })
99
+ }else{
100
+ setSchema(result)
101
+ }
102
+ }, [])
103
+ return amisReact.createElement(amisReact.Fragment, null, amisReact.createElement(amisReact.Fragment, null, schema && render ? render('body', schema) : ''), amisReact.createElement(amisReact.Fragment, null, render ? render('body', body) : ''));
104
+ }
105
+ }
106
+ amisRequire("amis").Renderer(
82
107
  {
83
108
  type: comp.amis?.render.type,
84
109
  weight: comp.amis?.render.weight,
85
110
  autoVar: true,
86
111
  }
87
- )(Component.class);
112
+ )(AmisWrapper);
88
113
  } catch(e){console.error(e)}
89
114
  }
90
115
  });
@@ -178,7 +203,29 @@
178
203
  }
179
204
  }, env);
180
205
  }
181
- return (React.createElement("div", { className: "amis-scope" }, AmisSDK.AmisRender(schema, {data, name, locale: getAmisLng()}, Object.assign({}, AmisEnv, env))));
206
+ schema.scopeRef = (ref) => {
207
+ try {
208
+ if(!window.amisScopes){
209
+ window.amisScopes = {};
210
+ }
211
+ if(name){
212
+ window.amisScopes[name] = ref;
213
+ }
214
+ } catch (error) {
215
+ console.error('error', error)
216
+ }
217
+
218
+ return scoped = ref
219
+ }
220
+
221
+ React.useEffect(()=>{
222
+ amisRequire('amis/embed').embed(`.steedos-amis-render-scope-${name}`,schema, {data, name, locale: getAmisLng()}, Object.assign({}, AmisEnv, env))
223
+ }, [])
224
+ return React.createElement("div", {
225
+ className: "amis-scope"
226
+ }, React.createElement("div", {
227
+ className: `steedos-amis-render-scope-${name}`
228
+ }));
182
229
  };
183
230
 
184
231
  const initMonaco = ()=>{
@@ -199,14 +246,13 @@
199
246
  return Builder.initMonaco()
200
247
  }
201
248
  }
202
-
203
249
  //Amis SDK 中已清理了monaco, 所以这里需要提前注册,否则会导致amis code类型报错
204
250
  initMonaco().catch((err)=>{
205
251
  console.error(`Builder.initMonaco error: ${err}`);
206
252
  }).finally(()=>{
207
253
  const language = getAmisLng()
208
254
  axios.get(`/translations/amis/${language}.json`).then((res)=>{
209
- AmisSDK.amis.registerLocale(`${language}`, res.data)
255
+ amisRequire("amis").registerLocale(`${language}`, res.data)
210
256
  Builder.registerComponent(AmisRender, {
211
257
  name: 'Amis',
212
258
  inputs: [
@@ -2,14 +2,14 @@
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-05-20 17:42:20
4
4
  * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2022-07-26 16:52:16
5
+ * @LastEditTime: 2022-10-28 11:01:51
6
6
  * @Description: 提供辅助函数
7
7
  */
8
8
  (function(){
9
9
  const filtersAmisSchema = {
10
10
  "type": "page",
11
11
  "title": t("creator_filters"),
12
- "name": "steedos-filters",
12
+ "name": "steedosFiltersPage",
13
13
  "body": [
14
14
  {
15
15
  "type": "form",
@@ -30,6 +30,7 @@
30
30
  }
31
31
  ],
32
32
  "id": "filtersForm",
33
+ "name": "filtersForm",
33
34
  "wrapWithPanel": false
34
35
  }
35
36
  ],
@@ -90,16 +91,16 @@
90
91
  mask: false,
91
92
  width: 550,
92
93
  style: null,
93
- extra: React.createElement(
94
+ extra: React17.createElement(
94
95
  SteedosUI.components.Space,
95
96
  {},
96
97
  [
97
- React.createElement(SteedosUI.components.Button, {
98
+ React17.createElement(SteedosUI.components.Button, {
98
99
  onClick: function(){
99
100
  SteedosUI.getRef(pageName)?.close();
100
101
  }
101
102
  } , t('cancel')),
102
- React.createElement(SteedosUI.components.Button, {
103
+ React17.createElement(SteedosUI.components.Button, {
103
104
  onClick: canSave ? function(){
104
105
 
105
106
  const formValues = window.amisScopes[pageName].getComponentById("filtersForm").getValues()
@@ -137,7 +138,7 @@
137
138
  });
138
139
  }
139
140
  } : function(){
140
- const formValues = window.amisScopes[pageName].getComponentById("filtersForm").getValues()
141
+ const formValues = window.amisScopes[pageName].getComponentByName("filtersForm").getValues();
141
142
  const filters = window.amisConvert.conditionsToFilters(formValues.filters);
142
143
  Session.set("filter_items", filters);
143
144
  SteedosUI.getRef(pageName)?.close();
@@ -0,0 +1,19 @@
1
+ // 解决多个react 问题. 注册组件时, 使用 amis 自带的 react , 运行 steedos 相关组件时, 使用 全局 react
2
+ window.addEventListener('message', function (event) {
3
+ const { data } = event;
4
+ if (data.type === 'Builder.loaded') {
5
+ if(Meteor.settings.public.page && Meteor.settings.public.page.assetUrls){
6
+ const defaultAssetsUrls = Meteor.settings.public.page.assetUrls.split(',')
7
+ Promise.all([
8
+ waitForThing(window, 'amis'),
9
+ ]).then(()=>{
10
+ window.__React = window.React;
11
+ window.__ReactDOM = window.ReactDOM;
12
+ window.React = amisRequire('react');
13
+ window.ReactDOM = amisRequire('react-dom');
14
+ window.ReactDom = window.ReactDOM;
15
+ Builder.registerRemoteAssets(defaultAssetsUrls);
16
+ })
17
+ }
18
+ }
19
+ })