卡片分为简单卡片和包含各种数据的卡片。
简单卡片例如 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
或 get
x-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 中情况:
collection
collection
+ action: get
+ params
collection
+ action: list
+ params
record
作为数据:collection
+ record
对于 获取单条数据 和 获取列表数据 params
非必须。
association
+ sourceId
association
+ sourceId
+ action: get
+ params
+ parentRecord
association
+ sourceId
+ action: list
+ params
+ parentRecord
record
作为数据: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
为例。