@xh/hoist 68.0.0-SNAPSHOT.1726061888650 → 68.0.0-SNAPSHOT.1726067879775

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## 68.0.0-SNAPSHOT - unreleased
4
4
 
5
+ ### ⚙️ Technical
6
+
7
+ * Updated Admin Console's Cluster tab to refresh more frequently.
8
+
5
9
  ## 67.0.0 - 2024-09-03
6
10
 
7
11
  ### 💥 Breaking Changes (upgrade difficulty: 🟢 LOW - Hoist Core update only)
@@ -22,6 +22,8 @@ import {TabContainerModel} from '@xh/hoist/cmp/tab';
22
22
  import {HoistModel, LoadSpec, managed, PlainObject, XH} from '@xh/hoist/core';
23
23
  import {RecordActionSpec} from '@xh/hoist/data';
24
24
  import {Icon} from '@xh/hoist/icon';
25
+ import {Timer} from '@xh/hoist/utils/async';
26
+ import {SECONDS} from '@xh/hoist/utils/datetime';
25
27
  import {ReactNode} from 'react';
26
28
 
27
29
  export class ClusterTabModel extends HoistModel {
@@ -36,8 +38,9 @@ export class ClusterTabModel extends HoistModel {
36
38
  recordsRequired: 1
37
39
  };
38
40
 
39
- @managed gridModel: GridModel = this.createGridModel();
40
- @managed tabModel: TabContainerModel = this.createTabModel();
41
+ @managed readonly gridModel: GridModel = this.createGridModel();
42
+ @managed readonly tabModel: TabContainerModel = this.createTabModel();
43
+ @managed readonly timer: Timer;
41
44
 
42
45
  get instance(): PlainObject {
43
46
  return this.gridModel.selectedRecord?.data;
@@ -57,6 +60,7 @@ export class ClusterTabModel extends HoistModel {
57
60
  let data = await XH.fetchJson({url: 'clusterAdmin/allInstances', loadSpec});
58
61
  data = data.map(row => ({
59
62
  ...row,
63
+ isLocal: row.name == XH.environmentService.serverInstance,
60
64
  usedHeapMb: row.memory?.usedHeapMb,
61
65
  usedPctMax: row.memory?.usedPctMax
62
66
  }));
@@ -64,6 +68,7 @@ export class ClusterTabModel extends HoistModel {
64
68
  gridModel.loadData(data);
65
69
  await gridModel.preSelectFirstAsync();
66
70
  } catch (e) {
71
+ gridModel.clear();
67
72
  XH.handleException(e);
68
73
  }
69
74
  }
@@ -71,6 +76,12 @@ export class ClusterTabModel extends HoistModel {
71
76
  constructor() {
72
77
  super();
73
78
 
79
+ this.timer = Timer.create({
80
+ runFn: this.autoRefreshAsync,
81
+ interval: 5 * SECONDS,
82
+ delay: true
83
+ });
84
+
74
85
  this.addReaction(
75
86
  {
76
87
  track: () => this.instanceName,
@@ -80,7 +91,7 @@ export class ClusterTabModel extends HoistModel {
80
91
  },
81
92
  {
82
93
  track: () => XH.environmentService.serverInstance,
83
- run: () => this.gridModel.agApi.refreshCells({force: true})
94
+ run: this.refreshAsync
84
95
  }
85
96
  );
86
97
  }
@@ -91,6 +102,7 @@ export class ClusterTabModel extends HoistModel {
91
102
  idSpec: 'name',
92
103
  fields: [
93
104
  {name: 'name', type: 'string'},
105
+ {name: 'isLocal', type: 'bool'},
94
106
  {name: 'isPrimary', type: 'bool'},
95
107
  {name: 'isReady', type: 'bool'},
96
108
  {name: 'wsConnections', type: 'int'},
@@ -178,7 +190,7 @@ export class ClusterTabModel extends HoistModel {
178
190
  formatInstance(instance: PlainObject): ReactNode {
179
191
  const content = [instance.name];
180
192
  if (instance.isPrimary) content.push(badge({item: 'primary', intent: 'primary'}));
181
- if (instance.name === XH.environmentService.serverInstance) content.push(badge('local'));
193
+ if (instance.isLocal) content.push(badge('local'));
182
194
  return hbox(content);
183
195
  }
184
196
 
@@ -191,17 +191,16 @@ export class AlertBannerModel extends HoistModel {
191
191
  async saveBannerSpecAsync(spec: AlertBannerSpec) {
192
192
  const {active, message, intent, iconName, enableClose, clientApps} = spec;
193
193
  try {
194
- await XH.fetchService
195
- .postJson({
196
- url: 'alertBannerAdmin/setAlertSpec',
197
- body: spec
198
- })
199
- .track({
194
+ await XH.fetchService.postJson({
195
+ url: 'alertBannerAdmin/setAlertSpec',
196
+ body: spec,
197
+ track: {
200
198
  category: 'Audit',
201
199
  message: 'Updated Alert Banner',
202
200
  data: {active, message, intent, iconName, enableClose, clientApps},
203
201
  logData: ['active']
204
- });
202
+ }
203
+ });
205
204
  } catch (e) {
206
205
  XH.handleException(e);
207
206
  }
@@ -18,7 +18,8 @@ export class MonitorTabModel extends HoistModel {
18
18
 
19
19
  @observable.ref results: MonitorResults[] = [];
20
20
  @observable lastRun: number = null;
21
- @managed timer: Timer = null;
21
+
22
+ @managed readonly timer: Timer;
22
23
 
23
24
  @bindable @persist showInactive = false;
24
25
  @bindable showEditorDialog = false;
@@ -60,14 +61,14 @@ export class MonitorTabModel extends HoistModel {
60
61
  makeObservable(this);
61
62
 
62
63
  this.timer = Timer.create({
63
- runFn: () => this.autoRefreshAsync(),
64
+ runFn: this.autoRefreshAsync,
64
65
  interval: 5 * SECONDS,
65
66
  delay: true
66
67
  });
67
68
 
68
69
  this.addReaction({
69
70
  track: () => this.showInactive,
70
- run: () => this.refreshAsync()
71
+ run: this.refreshAsync
71
72
  });
72
73
  }
73
74
 
@@ -2,14 +2,16 @@ import { GridModel } from '@xh/hoist/cmp/grid';
2
2
  import { TabContainerModel } from '@xh/hoist/cmp/tab';
3
3
  import { HoistModel, LoadSpec, PlainObject } from '@xh/hoist/core';
4
4
  import { RecordActionSpec } from '@xh/hoist/data';
5
+ import { Timer } from '@xh/hoist/utils/async';
5
6
  import { ReactNode } from 'react';
6
7
  export declare class ClusterTabModel extends HoistModel {
7
8
  persistWith: {
8
9
  localStorageKey: string;
9
10
  };
10
11
  shutdownAction: RecordActionSpec;
11
- gridModel: GridModel;
12
- tabModel: TabContainerModel;
12
+ readonly gridModel: GridModel;
13
+ readonly tabModel: TabContainerModel;
14
+ readonly timer: Timer;
13
15
  get instance(): PlainObject;
14
16
  get instanceName(): string;
15
17
  get isMultiInstance(): boolean;
@@ -7,7 +7,7 @@ export declare class MonitorTabModel extends HoistModel {
7
7
  };
8
8
  results: MonitorResults[];
9
9
  lastRun: number;
10
- timer: Timer;
10
+ readonly timer: Timer;
11
11
  showInactive: boolean;
12
12
  showEditorDialog: boolean;
13
13
  get passed(): number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xh/hoist",
3
- "version": "68.0.0-SNAPSHOT.1726061888650",
3
+ "version": "68.0.0-SNAPSHOT.1726067879775",
4
4
  "description": "Hoist add-on for building and deploying React Applications.",
5
5
  "repository": "github:xh/hoist-react",
6
6
  "homepage": "https://xh.io",
@@ -180,10 +180,11 @@ export class PrefService extends HoistService {
180
180
  params: {
181
181
  clientUsername: XH.getUsername(),
182
182
  updates: JSON.stringify(updates)
183
+ },
184
+ track: {
185
+ message: `Migrated ${updateCount} preferences`,
186
+ data: updates
183
187
  }
184
- }).track({
185
- message: `Migrated ${updateCount} preferences`,
186
- data: updates
187
188
  });
188
189
  XH.localStorageService.remove(key);
189
190
  }