卡片分为简单卡片和包含各种数据的卡片。
简单卡片例如 Markdown 卡片。
它只有文本内容,没有其他更多复杂数据,且文本内容是存储在 schema 中的,没有存储在数据库中。
数据卡片是指卡片的数据存储在服务端的数据表中,例如 Table 组件。
Table 中的字段信息及列表数据,都是存储在数据库中的。
为了方便对数据卡片的数据进行管理,我们提供了 DataBlockProvider 组件,其内部封装了:
DataBlockProvider:封装了下面的所有组件,并提供了卡片属性
DataBlockProvider 提供的上下文信息,查询对应数据表数据及关系字段信息并传递DataBlockProvider 提供的上下文信息,构建卡片 Resource API,用于卡片数据的增删改查DataBlockProvider 提供的上下文信息,自动调用 BlockResourceProvider 提供的 resource.get() 或 resource.list() 发起请求,得到卡片数据,并传递
resource.get() 场景,会自动嵌套 CollectionRecordProvider 并将 resource.get() 请求结果传递下去,resource.list() 场景则需要自行使用 CollectionRecordProvider 提供数据记录上述组件封装到 DataBlockProvider 的内部,只需要使用 DataBlockProvider 即可自行得到上述数据。
其主要使用在卡片的 schema 的 x-decorator 中,例如:
x-decorator-props 称为静态属性,它是一个普通对象,记录卡片的配置信息x-use-decorator-props 中的属性称为动态属性,它是一个 React hook,可用于获取例如 URL 上的 ID,或者父级的 context 数据当两者都存在时,会进行深度合并,作为 DataBlockProvider 的属性。
x-decorator-props):卡片的 collection 表名,用于获取卡片的字段信息和卡片数据x-decorator-props):卡片的关系字段名,用于获取卡片的关系字段信息和关系字段数据x-decorator-props): 数据源x-decorator-props):卡片的请求类型,list 或 getx-decorator-props 和 x-use-decorator-props):卡片的请求参数,同时存在于x-use-decorator-props):相当于 params.filterByTk,可理解为 id,用于获取单条数据x-use-decorator-props):卡片的 sourceId,配合 association 使用,用于获取卡片的关系字段数据x-use-decorator-props):当提供 record 时,会使用 record 作为卡片的数据,不发起请求x-use-decorator-props):当提供 parentRecord 时,会使用 parentRecord 作为关系字段的表数据,不发起请求这些属性根据不同的场景,共有 8 中情况:
collectioncollection + action: get + paramscollection + action: list + paramsrecord 作为数据:collection + record对于 获取单条数据 和 获取列表数据 params 非必须。
association + sourceIdassociation + sourceId + action: get + params + parentRecordassociation + sourceId + action: list + params + parentRecordrecord 作为数据:association + sourceId + record + parentRecord对于 获取单条数据 和 获取列表数据 params 和 parentRecord 非必须,当没有 parentRecord 会根据 association 查询到对应的 collection,然后再根据 collection 查询到对应的 parentRecord。
可用于获取和修改 DataBlockProvider 的属性。
props 就对应着上面的 AllDataBlockProps。
dn 是 Designable 对象,可用于修改 DataBlockProvider 的 UI schema,详细见 Designable。
相当于 useDataBlock().props。
association 与 collection 类似,只是需要提供 sourceId,我们以 Table list 为例。
如果不提供 sourceId,则需要提供 parentRecord,我们以 Table list 为例。