@devicechain/ dashboards (英语)
设备 Chain 仪表板运行时间: 电磁板,该多轴活 用户线上的遥测、警报、命令和位置以及输入 仪表板定义 合同描述一个董事会.
没有反应,没有渲染。 这是部件集下的图层—— DeviceChain
控制台和独立的 /dash 观众都坐在上面,你们也一样.
@devicechain/widgets 实值
在这个软件包上构建的反相部件集.
npm install @devicechain/dashboards @devicechain/client graphql
@devicechain/client 财务报告和审定财务报表 graphql 是同伴的依赖关系。 同行而不是
普通依赖目的: 中枢将流错误分类为
instanceof 与 SDK 错误类型相对应,以及 instanceof 横跨两个
复制同一软件包的复制件 —— 复制件会变成“ 您可能不会看到 ”
设备"的读取 像一个停电.
枢纽
一个枢纽为整个董事会服务。 部件订阅;它进行分解.
import { DashboardHub, resolveWidgetDatasource } from '@devicechain/dashboards';
const hub = new DashboardHub({
resolver, // how a selector becomes device tokens
authorities: user.scopes, // what this viewer may do; drives hub.can(...)
});
// The hub holds no slot bindings: resolve a widget's `slot` selector through them
// first. A slot with no binding resolves to an explicit `unbound` selector, which the
// hub answers with no data; a raw `slot` selector is an error.
// It is undefined only for a widget that declares no datasource at all.
const datasource = resolveWidgetDatasource(widget.datasource, bindings);
const stop = datasource && hub.subscribeWidget(datasource, {
next: (sample) => setLatest(sample),
});
// later
stop?.();
hub.disposeAll();
十个部件指向同一个设备打开 一个 上游订阅,不 十个。 每个部件都声明它所关心的测量名称(无一表示全部), 和枢机的粉丝 单流出到用户 谁要求每个名字.
每个信道都有自己的方法,每个订阅器返回其处置器:
| 方法 | 它携带着什么 |
|---|---|
subscribeWidget | 数据源选择器的测量样本 |
subscribeMembers | 一个舰队部件的成员, 然后每个成员的样本 标记在它的装置 |
bucketMeasurements | 时间桶(计算、最小、最大、总和) |
subscribeAlarms | 实时警报行,加 acknowledgeAlarm 编号 : clearAlarm |
subscribeCommands | 命令行及其执行状态,加 sendCommand |
subscribeLocations | 地图部件的位置序列 |
部件层取决于 WidgetDataSource 接口, 不在中枢上
班级,所以一个主机可以喂它 从枢纽,从 SyntheticDataSource 或从
记录运行( e)RecordedDataSource) (中文(简体) ). subscribeMembers, (中文(简体) ), bucketMeasurements 财务报告和审定财务报表
readMemberSeeds 在该界面上是可选的:没有它们的源会离开
需要他们这么说的部件,而不是显示一个数字.
disposeAll() 泪下每一个开放的频道——一个主机在板子上叫它
关闭,这就是保持 民意测验和插座 超过页面.
定义合同
一个仪表板是JSON。 服务器不透明地存储它; 这个软件包就是它得到的 一个形状.
import { parseDashboardDefinition, serializeDefinition } from '@devicechain/dashboards';
const board = parseDashboardDefinition(json); // throws DashboardDefinitionError
较此软件包的新版本保存的棋盘被拒绝而非读取为
当前格式: DashboardDefinitionError 携带 code: 'schemaTooNew'
及其发现的版本 found测试 code没有 instanceof,所以检查
当一个应用程序最后有两份软件包时,仍然保留.
解析是验证: 错误的棋盘在您的代码中失败, 而不是
半还后. 旧格式存储的棋盘按原样转换
分析,结果包含 convertedFrom 标记直到它再次被保存
(单位:千美元)withoutConversionMark 丢掉它. isDirty 将工作副本与其
保存原创.
版式
一块板子铺在方格细胞上 每个部件都有一个 WidgetLayout(单位:千美元)
Placement 每个断点 base 所需经费。 安置要么是一个网格
脚印( e)GridPlacement或相对于另一个单元格的位置
部件( r)RelativePlacement) (中文(简体) ). 列数跟随容器,所以相同
板子在电话和墙上显示.
| 需求 | 出口 |
|---|---|
| 显示宽度的部件 | activeBreakpoint, (中文(简体) ), resolvePlacement |
| 制造器画的容器宽度 | effectiveLayout, (中文(简体) ), layoutShape, (中文(简体) ), liveColumns |
| 每个部件的像素框 | layoutRects, (中文(简体) ), gridRect, (中文(简体) ), relativeRect, (中文(简体) ), cellSizeAt |
| 网格长度和部件框架 | gridLengthPx, (中文(简体) ), gutterPx, (中文(简体) ), paddingPx, (中文(简体) ), resolveFrame |
| 按每个部件可以显示的内容放置 | lintLayout, (中文(简体) ), blockingLayoutFindings |
这个 editor-model 变换是纯函数 一个作者的 UI 可以被电线拖动
并调整大小 : addWidget, (中文(简体) ), moveWidget, (中文(简体) ), resizeWidget, (中文(简体) ), setWidgetPlacement, (中文(简体) ),
placeOnGrid, (中文(简体) ), placeRelative, (中文(简体) ), deleteWidget, (中文(简体) ), setTitle, (中文(简体) ), setCanvasGrid, (中文(简体) ),
setCanvasDensity 财务报告和审定财务报表 updateWidget,与 gridPlacementToPx 财务报告和审定财务报表
pxToGridPlacement 在单元格和像素之间转换。 移动或调整大小 a
网格部件将它现在覆盖的所有东西推出它的方式。 网格部件永远不会
重叠, 因此没有要管理的堆叠顺序 .
时间范围和密度
董事会有时间范围: TIME_RANGE_PRESETS (15分钟至7天),
initialTimeRange, (中文(简体) ), pauseRange 编号 : resumeRange 财务报告和审定财务报表 rangeWindow 管理它,和
timeRangeLinkFromSearch 读取 range, (中文(简体) ), paused 财务报告和审定财务报表 from 编号 : to URL 参数
(单位:千美元)timeRangeFromSearch 只读 range 财务报告和审定财务报表 paused,对于一个不知道固定窗口的主机。 一个固定
从窗口到窗口是同一种状态的添加剂变体: absoluteRange 盖起它
TimeRangeState.absolute 标记它,同时 paused, (中文(简体) ), pausedAt 财务报告和审定财务报表 spanSeconds 仍在描述
窗口作为被冻结的滚动范围,所以只有知道滚动范围的代码继续工作。 密度
(单位:千美元)CANVAS_DENSITIES数字 : compact, (中文(简体) ), comfortable, (中文(简体) ), wall缩放每个文本和
间距大小 DENSITY_SCALE; 主机可能会在
视图时间.
槽数
一个董事会可以写一次,指向许多实体. 一个部件的数据源
名称 插槽 而不是一个设备, 并且主机提供一个绑定
查看时间的插槽 - effectiveBindings, (中文(简体) ), resolveContextBindings, (中文(简体) ),
applySelection 财务报告和审定财务报表 resolveSlotCandidates 机器就是这个.
中枢没有束缚 在它之前,一个槽会解决给一个混凝土选择者
已订阅.. resolveWidgetDatasource(datasource, bindings),该
DashboardRenderer 内 @devicechain/widgets 呼叫每个部件, 所以一个
中枢一生为一板服务,重新指定一个档次只能重新订阅
与它相连的部件。 无约束性决定的空格 { kind: 'unbound' }, (中文(简体) ),
每个信道都视同零设备;它永远不会变成一个缺席
数据源,警报频道读作全租户. 一个生的 slot 选择器
直接交给枢纽是一个错误.
合成数据
SyntheticDataSource 执行与枢纽相同的接口并生成
合理的测量,这样可以预览、截图或
毫无证据的展示.
命令状态
isTerminalCommandStatus 财务报告和审定财务报表 isCancellableCommandStatus 是两个问题
值得问一个命令,它们是不同的问题——a SENT 命令
仍然在飞行中,但已经无法联系。 基础是
故意不导出: 每个表面都询问上游, 所以有新的状态
一些呼叫网站无法学习,其他网站则无法学习.
从0.21升级
0.22取代了布局模式,因此以0.21为单位所写的代码需要更改:
| 0.21 (简体中文) | 0.22 (简体中文) |
|---|---|
WidgetBox | Placement (单位:千美元)GridPlacement 或者说 RelativePlacement(中文(简体) ) |
resolveWidgetBox | resolvePlacement |
baseBox | basePlacement |
setWidgetBox | setWidgetPlacement,或 moveWidget 编号 : resizeWidget |
gridBoxToPx 编号 : pxToGridBox | gridPlacementToPx 编号 : pxToGridPlacement |
bringToFront | 删除: 网格部件无法重叠, 因此没有堆叠顺序 |
这些保留它们的名字,但更改类型 :
WidgetLayout将断点映射为 aPlacement,以及Breakpoints地图a 名称为 aBreakpointSpec。 。 。 .CanvasGrid替换gap财务报告和审定财务报表rowHeight与minCellSize, (中文(简体) ),gutter财务报告和审定财务报表padding· ;GridGeometry将其列和行大小替换为cell财务报告和审定财务报表gutter。 。 。 .SYNTHETIC_GENERATORS是生成器 id 的列表 ('sine', (中文(简体) ),'ramp', (中文(简体) ),'random-walk'改为{ value, label }双人 提供自己的标签; 存储的id没有变化.parseDashboardDefinition拒绝一个网格部件重叠的定义。 A 类 在检查前转换旧格式的定义.
一些工会获得了会员,这打破了详尽无遗的 switch 在他们面前
WidgetChannel 已经 'aggregate' (统计卡), OptionSpec 已经
ListOptionSpec,以及 WidgetType, (中文(简体) ), WidgetId 财务报告和审定财务报表 BuiltinWidgetId 拥有新的
内建部件.
该版的升级指南涵盖了存储板和存储板的变动 其他软件包 : 如果您在 npm 包上构建。 。 。 .
兼容性
无害环境管理,仅供捆绑者溶液使用(网络、网络包装、滚动、建设)。 这个
所公布的申报使用无延展说明,在
类型脚本 bundler 模块分辨率和 没有 下级 node16编号 :nodenext。 。 。 .
许可证
阿帕奇2.0 (英语). 见 自由主义。 。 。 .