material - 物料 API

模块简介

负责物料相关的 API,包括资产包、设计器辅助层、物料元数据和物料元数据管道函数。

变量(variables)

componentsMap

获取组件 map 结构

方法签名(functions)

资产包

setAssets

设置「资产包」结构

类型定义

  1. function setAssets(assets: AssetsJson): void;

示例

直接在项目中引用 npm 包

  1. import { material } from '@alilc/lowcode-engine';
  2. import assets from '@alilc/mc-assets-<siteId>/assets.json';
  3. material.setAssets(assets);

通过物料中心接口动态引入资产包

  1. import { ILowCodePluginContext, material, plugins } from '@alilc/lowcode-engine'
  2. // 动态加载 assets
  3. plugins.register((ctx: ILowCodePluginContext) => {
  4. return {
  5. name: 'ext-assets',
  6. async init() {
  7. try {
  8. // 将下述链接替换为您的物料即可。无论是通过 utils 从物料中心引入,还是通过其他途径如直接引入物料描述
  9. const res = await window.fetch('https://fusion.alicdn.com/assets/default@0.1.95/assets.json')
  10. const assets = await res.text()
  11. material.setAssets(assets)
  12. } catch (err) {
  13. console.error(err)
  14. }
  15. },
  16. }
  17. }).catch(err => console.error(err))

getAssets

获取「资产包」结构

类型定义

  1. function getAssets(): AssetsJson;

示例

  1. import { material } from '@alilc/lowcode-engine';
  2. material.getAssets();

loadIncrementalAssets

加载增量的「资产包」结构,该增量包会与原有的合并

类型定义

  1. function loadIncrementalAssets(incrementalAssets: AssetsJson): void;

说明:该增量包会与原有的合并

示例

  1. import { material } from '@alilc/lowcode-engine';
  2. import assets1 from '@alilc/mc-assets-<siteId>/assets.json';
  3. import assets2 from '@alilc/mc-assets-<siteId>/assets.json';
  4. material.setAssets(assets1);
  5. material.loadIncrementalAssets(assets2);

设计器辅助层

addBuiltinComponentAction

在设计器辅助层增加一个扩展 action

类型定义

  1. function addBuiltinComponentAction(action: ComponentAction): void;
  2. export interface ComponentAction {
  3. /**
  4. * behaviorName
  5. */
  6. name: string;
  7. /**
  8. * 菜单名称
  9. */
  10. content: string | ReactNode | ActionContentObject;
  11. /**
  12. * 子集
  13. */
  14. items?: ComponentAction[];
  15. /**
  16. * 显示与否
  17. * always: 无法禁用
  18. */
  19. condition?: boolean | ((currentNode: any) => boolean) | 'always';
  20. /**
  21. * 显示在工具条上
  22. */
  23. important?: boolean;
  24. }
  25. export interface ActionContentObject {
  26. /**
  27. * 图标
  28. */
  29. icon?: IconType;
  30. /**
  31. * 描述
  32. */
  33. title?: TipContent;
  34. /**
  35. * 执行动作
  36. */
  37. action?: (currentNode: any) => void;
  38. }
  39. export type IconType = string | ReactElement | ComponentType<any> | IconConfig;

示例

新增设计扩展位,并绑定事件

  1. import { material } from '@alilc/lowcode-engine';
  2. material.addBuiltinComponentAction({
  3. name: 'myIconName',
  4. content: {
  5. icon: () => 'x',
  6. title: 'hover title',
  7. action(node) {
  8. console.log('myIconName 扩展位被点击');
  9. }
  10. },
  11. important: true,
  12. condition: true,
  13. });

material - 物料 API - 图1

removeBuiltinComponentAction

移除设计器辅助层的指定 action

类型定义

  1. function removeBuiltinComponentAction(name: string): void;

示例

  1. import { material } from '@alilc/lowcode-engine';
  2. material.removeBuiltinComponentAction('myIconName');

modifyBuiltinComponentAction

修改已有的设计器辅助层的指定 action

类型定义

  1. function modifyBuiltinComponentAction(
  2. actionName: string,
  3. handle: (action: ComponentAction) => void
  4. ): void;

内置设计器辅助 name

  • remove:删除
  • hide:隐藏
  • copy:复制
  • lock:锁定,不可编辑
  • unlock:解锁,可编辑

示例

给原始的 remove 扩展时间添加执行前后的日志

  1. import { material } from '@alilc/lowcode-engine';
  2. material.modifyBuiltinComponentAction('remove', (action) => {
  3. const originAction = action.content.action;
  4. action.content.action = () => {
  5. console.log('before reomve!');
  6. originAction();
  7. console.log('after remove!');
  8. }
  9. });

物料元数据

getComponentMeta

获取指定名称的物料元数据

类型定义

  1. function getComponentMeta(componentName: string): ComponentMeta;

示例

  1. import { material } from '@alilc/lowcode-engine';
  2. material.getComponentMeta('Input');

getComponentMetasMap

获取所有已注册的物料元数据

类型定义

  1. function getComponentMetasMap(): new Map<string, ComponentMeta>;

示例

  1. import { material } from '@alilc/lowcode-engine';
  2. material.getComponentMetasMap();

物料元数据管道函数

registerMetadataTransducer

注册物料元数据管道函数,在物料信息初始化时执行。

类型定义

  1. function registerMetadataTransducer(
  2. transducer: MetadataTransducer, // 管道函数
  3. level?: number, // 优先级
  4. id?: string | undefined, // id
  5. ): void;

示例

给每一个组件的配置添加高级配置面板,其中有一个是否渲染配置项

  1. import { material } from '@alilc/lowcode-engine'
  2. function addonCombine(metadata: TransformedComponentMetadata) {
  3. const { componentName, configure = {} } = metadata;
  4. const advanceGroup = [];
  5. const combined: FieldConfig[] = [];
  6. advanceGroup.push({
  7. name: getConvertedExtraKey('condition'),
  8. title: { type: 'i18n', 'zh-CN': '是否渲染', 'en-US': 'Condition' },
  9. defaultValue: true,
  10. setter: [
  11. {
  12. componentName: 'BoolSetter',
  13. },
  14. {
  15. componentName: 'VariableSetter',
  16. },
  17. ],
  18. extraProps: {
  19. display: 'block',
  20. },
  21. });
  22. combined.push({
  23. name: '#advanced',
  24. title: { type: 'i18n', 'zh-CN': '高级', 'en-US': 'Advanced' },
  25. items: advanceGroup,
  26. });
  27. return {
  28. ...metadata,
  29. configure: {
  30. ...configure,
  31. combined,
  32. },
  33. };
  34. }
  35. material.registerMetadataTransducer(addonCombine, 1, 'parse-func');

getRegisteredMetadataTransducers

获取所有物料元数据管道函数

类型定义

  1. function getRegisteredMetadataTransducers(): MetadataTransducer[];

示例

  1. import { material } from '@alilc/lowcode-engine'
  2. material.getRegisteredMetadataTransducers('parse-func');

事件(Event)

onChangeAssets

监听 assets 变化的事件

类型定义

  1. function onChangeAssets(fn: () => void): void;

示例

  1. import { material } from '@alilc/lowcode-engine';
  2. material.onChangeAssets(() => {
  3. console.log('asset changed');
  4. });