alibaba / lowcode-engine

An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系
https://lowcode-engine.cn
MIT License
14.58k stars 2.53k forks source link

loadIncrementalAssets调用后,组件库中不展示 #2008

Open ddsomav8 opened 1 year ago

ddsomav8 commented 1 year ago

Describe the bug (required) / 详细描述 bug(必填)

loadIncrementalAssets的assets.json结构如下

packages: [
      {
        title: 'MCBreadcrumb',
        package: 'mc-breadcrumb',
        version: '1.0.0',
        urls: [
          'https://unpkg.com/mc-breadcrumb@1.0.0/dist/MCBreadcrumb.js',
          'https://unpkg.com/mc-breadcrumb@1.0.0/dist/MCBreadcrumb.css',
        ],
        library: 'MCBreadcrumb',
      },
    ],
    components: [
      {
        componentName: 'MCBreadcrumb',
        title: 'MCBreadcrumb',
        docUrl: '',
        screenshot: '',
        npm: {
          package: 'mc-breadcrumb',
          version: '1.0.0',
          exportName: 'MCBreadcrumb',
          main: 'lib/index.js',
          destructuring: false,
          subName: '',
        },
        props: [
          {
            name: 'prefix',
            propType: 'string',
            description: '样式类名的品牌前缀',
            defaultValue: 'next-',
          },
          {
            name: 'title',
            propType: 'string',
            description: '标题',
            defaultValue: 'next-',
          },
          {
            name: 'rtl',
            propType: 'bool',
          },
          {
            name: 'children',
            propType: {
              type: 'instanceOf',
              value: 'node',
            },
            description: '面包屑子节点,需传入 Breadcrumb.Item',
          },
          {
            name: 'maxNode',
            propType: {
              type: 'oneOfType',
              value: [
                'number',
                {
                  type: 'oneOf',
                  value: ['auto'],
                },
              ],
            },
            description:
              '面包屑最多显示个数,超出部分会被隐藏, 设置为 auto 会自动根据父元素的宽度适配。',
            defaultValue: 100,
          },
          {
            name: 'separator',
            propType: {
              type: 'instanceOf',
              value: 'node',
            },
            description: '分隔符,可以是文本或 Icon',
          },
          {
            name: 'component',
            propType: {
              type: 'oneOfType',
              value: ['string', 'func'],
            },
            description: '设置标签类型',
            defaultValue: 'nav',
          },
          {
            name: 'className',
            propType: 'any',
          },
          {
            name: 'style',
            propType: 'object',
          },
        ],
        configure: {
          component: {
            isContainer: true,
            isModel: true,
            rootSelector: 'div.MCBreadcrumb',
          },
        },
      },
    ],

    componentList: [
      {
        title: '常用',
        icon: '',
        children: [
          {
            componentName: 'MCBreadcrumb',
            title: 'MC面包屑',
            icon: '',
            package: 'mc-breadcrumb',
            library: 'MCBreadcrumb',
            snippets: [
              {
                title: 'MC面包屑',
                screenshot:
                  'https://alifd.oss-cn-hangzhou.aliyuncs.com/fusion-cool/icons/icon-light/ic_light_breadcrumb.png',
                schema: {
                  componentName: 'MCBreadcrumb',
                  props: {
                    title: '物料中心',
                    prefix: 'next-',
                    maxNode: 100,
                  },
                },
              },
            ],
          },
        ],
      },
    ],
  });

To Reproduce (required) / 如何复现 bug?(必填,非常重要)

Steps to reproduce the behavior: / 详细复现步骤:


English version example:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

中文版示例:

  1. 打开 demo
  2. 点击标题;
  3. 在右侧修改标题内容为「修改后的标题」;
  4. 渲染画布标题组件没有更新显示为「修改后的标题」;

Expected behavior (required) / 预期行为(必填,非常重要)

组件库中能正常添加loadIncrementalAssets的组件


Screenshots (optional) / bug 截图(可选)

Sceenshots for further information. (If applicable.) / 一些有用的截图将会帮助我们更好的明确以及定位问题

image

AliLowCodeEngine.material.getAssets() 查看组件已经加进去了 image

AliLowCodeEngine.material.componentsMap 也已经加进去了 image


Environments (please complete the following information) (required): / 请提供如下信息(必填)

官网demo-basic-antd demo本地运行结果

Additional context (optional) / 更多额外信息(可选)

Any other context of the problem here. / 可以追加更多的额外信息,帮助定位问题

ddsomav8 commented 1 year ago

@liujuping 大佬能帮忙看下这个问题吗

liujuping commented 1 year ago

有几种可能

1.没有配置 snippets,组件库面板不能展示这个组件

2.loadIncrementalAssets 调用之前,组件面板就获取了组件列表,并且之后没有更新。

有兴趣可以先自查一下。

ddsomav8 commented 1 year ago

有配置snippets的,loadIncrementalAssets现在是通过按钮触发加载的,需要如何更新

liujuping commented 1 year ago

看一下,组件库插件的代码里面的逻辑,看看是不是有问题。https://github.com/alibaba/lowcode-plugins

如果有需要可以使用这个 api。

https://lowcode-engine.cn/site/docs/api/material#onchangeassets

yzajoee commented 1 year ago

看一下,组件库插件的代码里面的逻辑,看看是不是有问题。https://github.com/alibaba/lowcode-plugins

如果有需要可以使用这个 api。

https://lowcode-engine.cn/site/docs/api/material#onchangeassets

官方的demo是否可以提供一个通过loadIncrementalAssets加载完成后把异步加载的组件更新到物料面板上,所有demo都只是加载了组件,而没有更新插件。这个流程还是比较复杂的,除了要完成物料插件面板的更新,还要更新editor的内容,官方提供的文档和demo都太少了,而自定义组件又是一个比较常见的操作

yzajoee commented 1 year ago

看一下,组件库插件的代码里面的逻辑,看看是不是有问题。https://github.com/alibaba/lowcode-plugins

如果有需要可以使用这个 api。

https://lowcode-engine.cn/site/docs/api/material#onchangeassets

我测试了,点击按钮加载异步assets后,并不会触发material.onChangeAssets,这是用官方demo测试的结果 image

avivadepp commented 1 year ago

遇到了同样的问题,请问你最后是怎么解决的呢? 我可以触发onChangeAssets,再次输出material.getAssets()可以成功输出塞进去的assets,但是物料面板没有更新,强制刷新组件面板后依旧没有显示。

avivadepp commented 1 year ago

我试了一下官方demo,“异步加载资源”这个按钮点击之后,官方demo的物料面板似乎也没有刷新。 @liujuping

yzajoee commented 1 year ago

遇到了同样的问题,请问你最后是怎么解决的呢? 我可以触发onChangeAssets,再次输出material.getAssets()可以成功输出塞进去的assets,但是物料面板没有更新,强制刷新组件面板后依旧没有显示。

自己对增量的物料进行解析,获取到新的物料表后自己赋值渲染,同时在editor那边监听个事件,手动触发更新编辑器进行重新加载物料

avivadepp commented 1 year ago

遇到了同样的问题,请问你最后是怎么解决的呢? 我可以触发onChangeAssets,再次输出material.getAssets()可以成功输出塞进去的assets,但是物料面板没有更新,强制刷新组件面板后依旧没有显示。

自己对增量的物料进行解析,获取到新的物料表后自己赋值渲染,同时在editor那边监听个事件,手动触发更新编辑器进行重新加载物料

已找到原因:plugin-components-pane中的packages/plugin-components-pane/src/utils/transform.ts函数,如果遇到sort属性,就会直接去读取components,其中会把没有snippets的组件过滤掉,而恰巧低代码引擎的示例中,components中是没有snippets的,snippets在componentList中,但componentList并不会被解析。