@xh/hoist 79.0.0-SNAPSHOT.1767046009354 → 79.0.0-SNAPSHOT.1767390094508

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,53 +2,56 @@
2
2
 
3
3
  ## 79.0.0-SNAPSHOT - unreleased
4
4
 
5
- ### 🎁 New Features
6
-
7
- * Enhance `LocalDate` with `addWeekdays` and `subtractWeekdays` methods.
8
- * Added new `DynamicTabSwitcher` component, a more user-customizable version of `TabSwitcher` that
9
- allows for dynamic addition, removal, and drag-and-drop reordering of tabs with the ability to
10
- persist "favorited" tab state across sessions. Additionally, existing static `TabSwitcher` now
11
- supports context-menu items. See `TabContainerConfig.switcher`.
12
- * Changed the icon used for the Grid autosize buttons and menu option (to 🪄).
13
- * DashCanvas new features:
14
- * supports showing a grid background.
15
- * supports 2 compacting strategies: 'vertical' or 'horizontal'
16
-
17
-
18
5
  ### 💥 Breaking Changes
19
6
 
20
- * Blueprint has been upgraded from version 5 to version 6. Most apps will not need to change,
21
- but see https://github.com/palantir/blueprint/wiki/Blueprint-6.0 for more details. Also note that
22
- any custom css overrides to blueprint will need to be updated to refer to `bp6` instead of `bp5`.
7
+ Note that a server-side upgrade to `hoist-core >= 35` is recommended to support several changes in
8
+ this release, but is not strictly required.
9
+
10
+ * Upgraded Blueprint from version 5 to version 6. Most apps will not need to change, but
11
+ see https://github.com/palantir/blueprint/wiki/Blueprint-6.0 for more details.
12
+ * ⚠️ Note that any custom CSS overrides to BP classes will need to replace the `bp5` prefix with
13
+ `bp6` and should be reviewed for accuracy/neccessity.
23
14
  * Renamed `LoadSupport.loadModel` to `LoadSupport.loadObserver` for clarity. This property is a
24
- `TaskObserver` instance, not a `HoistModel`. The getter methods `HoistModel.loadModel` and
25
- `HoistService.loadModel` remain as aliases but are now deprecated and scheduled for removal in
26
- v82. Applications should update their code to use `loadObserver` instead of `loadModel`.
15
+ `TaskObserver` instance, not a `HoistModel`.
16
+ * The getter methods `HoistModel.loadModel` and `HoistService.loadModel` remain as aliases but
17
+ are deprecated and scheduled for removal in v82.
18
+ * Apps should update their code to use `loadObserver` instead of `loadModel`.
27
19
  * Renamed `GridModel.applyColumnStateChanges()` to `updateColumnState()` for clarity and better
28
- symmetry with `setColumnState()`. The prior method remains as an alias but is now deprecated and
29
- scheduled for removal in v82.
20
+ symmetry with `setColumnState()`.
21
+ * The prior method remains as an alias but is deprecated and scheduled for removal in v82.
30
22
  * Moved `TabSwitcherProps` to `cmp/tab/Types.ts` but maintained export from `cmp/tab/index.ts`.
31
23
  Some apps may need to update their imports.
32
- * `TabContainerConfig.switcher` has been repurposed to accept a `TabSwitcherConfig`. To pass
24
+ * Repurposed `TabContainerConfig.switcher` to accept a `TabSwitcherConfig`. To pass
33
25
  `TabSwitcherProps` via a parent `TabContainer`, use `TabContainerProps.switcher`.
34
26
  * Tightened the typing of `LocalDate` adjustment methods with new `LocalDateUnit` type. Some less
35
27
  common or ambiguous units (e.g. `date` or `d`) are no longer supported. Also typed the adjustment
36
28
  `value` args to `number` where applicable.
37
29
  * Your app must update `compilerOptions.moduleResolution` to "bundler" in `tsconfig.json`
38
- * If using the `DashCanvas` `rglOptions` prop, you might have to update it to reflect changes in
30
+ * If using the `DashCanvas.rglOptions` prop, you might have to update it to reflect changes in
39
31
  `react-grid-layout` v2+ (not common).
40
- * `DashCanvasModel.containerPadding` is now applied to the `react-grid-layout` div by RGL, not to the
41
- hoist-react provided containing div. This may affect printing layouts.
32
+ * Modified `DashCanvasModel.containerPadding` to apply to the `react-grid-layout` div created by the
33
+ library, instead of the Hoist-created containing div. This may affect printing layouts.
34
+
35
+ ### 🎁 New Features
42
36
 
37
+ * Added new `DynamicTabSwitcher` component, a more user-customizable version of `TabSwitcher` that
38
+ allows for dynamic addition, removal, and drag-and-drop reordering of tabs with the ability to
39
+ persist "favorited" tab state across sessions. Additionally, existing static `TabSwitcher` now
40
+ supports context-menu items. See `TabContainerConfig.switcher`.
41
+ * Enhanced `LocalDate` with `addWeekdays` and `subtractWeekdays` methods.
42
+ * Upgraded `DashCanvas` with support for a gridded background to match widget sizing/snapping
43
+ settings, plus two compacting strategies: 'vertical' and 'horizontal'.
44
+ * Changed the icon used for the Grid autosize buttons and menu option (to 🪄).
45
+ * Added `clientAppCode` to Activity Tracking logs. Requires `hoist-core >= 35`.
43
46
 
44
47
  ### 🐞 Bug Fixes
45
48
 
46
- * Fixed column chooser to display columns in the same order as they appear in the grid.
49
+ * Fixed the column chooser to display columns in the same order as they appear in the grid.
47
50
  * Defaulted Highcharts font to Hoist default `--xh-font-family`.
48
- * Restore previous behavior of Highcharts treemap labels with regard to visibility and positioning.
51
+ * Restored previous behavior of Highcharts treemap labels with regard to visibility and positioning.
49
52
  * Tweaked `GridFindField` to forward a provided `ref` to its underlying `TextInput`.
50
53
  * Fixed bug where `SelectEditor` with `queryFn` would not commit on enter keydown.
51
- * Supports deletion of large numbers of log files via POST (requires hoist-core v35.)
54
+ * Enabled deletion of larger numbers of log files via Admin Console. Requires `hoist-core >= 35`.
52
55
 
53
56
  ### ⚙️ Technical
54
57
 
@@ -56,50 +59,46 @@
56
59
  * `AppSpec.websocketsEnabled` - enabled by default, disable via `disableWebSockets`
57
60
  * `GroupingChooserProps.popoverTitle` - use `editorTitle`
58
61
  * `RelativeTimestampProps.options` - provide directly as top-level props
59
-
60
- * Improved the efficiency and logging of MsalClient.
61
- * Improved protections against running stale versions of client app code.
62
-
63
- * Grid performance optimizations introduced on an experimental basis. See
64
- `GridExperimentalFlags.deltaSort` and `GridExperimentalFlags.disableScrollOptimization`
65
-
62
+ * Improved the efficiency and logging of `MsalClient`.
63
+ * Improved protections against server/app version mismatches (i.e. a stale client app version cached
64
+ and restored by the browser).
65
+ * Introduced opt-in `Grid` performance optimizations on an experimental basis with
66
+ `GridExperimentalFlags.deltaSort` and `GridExperimentalFlags.disableScrollOptimization`
66
67
 
67
68
  ### 📚 Libraries
68
- * react-grid-layout `1.5.0 → 2.1.1`
69
- * hoist-core `35.0.0`
70
- * @blueprintjs/core: 5.10.5 -> 6.3.2 ,
71
- * @blueprintjs/datetime: 5.3.7 -> 6.0.6,
69
+
70
+ * @blueprintjs/core: `5.10 -> 6.3`
71
+ * @blueprintjs/datetime: `5.3 -> 6.0`
72
+ * react-grid-layout `1.5 2.1`
72
73
 
73
74
  ## 78.1.4 - 2025-12-05
74
75
 
75
76
  ### 🐞 Bug Fixes
76
77
 
77
- * Fix logging during MsalClient creation.
78
+ * Fixed logging during `MsalClient` creation.
78
79
 
79
80
  ## 78.1.3 - 2025-12-04
80
81
 
81
82
  ### 🐞 Bug Fixes
82
83
 
83
- * Fix to Highchart timezone handling regression from version 77. Applications should note that
84
- Highcharts has deprecated the `time.useUTC` option and its functioning seem suspect. Apps
85
- should set `time.timezone` instead. See https://api.highcharts.com/highcharts/time.useUTC.
84
+ * Fixed Highcharts timezone handling regression from version 77.
85
+ * Note that Highcharts has deprecated the `time.useUTC` option and its functioning seem
86
+ suspect - set `time.timezone` instead. See https://api.highcharts.com/highcharts/time.useUTC.
86
87
 
87
88
  ### ⚙️ Technical
88
89
 
89
- * Allow cross-tab persistence of client log levels
90
+ * Enabled cross-tab persistence of client logging-level customizations.
90
91
 
91
92
  ## 78.1.0 - 2025-12-02
92
93
 
93
94
  ### ⚙️ Technical
94
95
 
95
- * New property `MsalClientConfig.enableSsoSilent` to govern use of MSAL SSO api.
96
-
97
- * Existing property `MsalClientConfig.enableTelemetry` now defaults to `true`.
98
-
99
- * Improved use of MSAL client API, to maximize effectiveness of SSO. Improved documentation
100
- and logging. Iframe attempts will now time out by default after 3 seconds vs. 10 seconds.
101
- This can be further modified by apps via the option
102
- `MsalClientConfig.msalClientOptions.system.iFrameHashTimeout`
96
+ * Added new property `MsalClientConfig.enableSsoSilent` to govern use of MSAL SSO API.
97
+ * Changed default for `MsalClientConfig.enableTelemetry` to `true`.
98
+ * Improved use of MSAL client API to maximize effectiveness of SSO, along with updates to docs and
99
+ logging.
100
+ * Note that Iframe attempts will now time out by default after 3s (vs. 10s). Customize if needed
101
+ via `MsalClientConfig.msalClientOptions.system.iFrameHashTimeout`.
103
102
 
104
103
  ### 📚 Libraries
105
104
 
@@ -124,8 +123,7 @@
124
123
 
125
124
  ### 🐞 Bug Fixes
126
125
 
127
- * Fixed `GridModel` not appending children to the parents correctly when loaded data uses a
128
- numerical ID.
126
+ * Fixed `GridModel` not appending children to the parents correctly when recs have numeric IDs.
129
127
  * Fixed issue where newly added columns appearing in the Displayed Columns section of the column
130
128
  chooser after loading grid state that was persisted before the columns were added to the grid.
131
129
  * Removed a minor Cube `Query` annoyance - `dimensions` are now automatically added to the `fields`
@@ -141,22 +139,21 @@
141
139
 
142
140
  ### 💥 Breaking Changes (upgrade difficulty: 🟢 LOW)
143
141
 
144
- * Apps that use and provide the `highcharts` library should be sure to update the version to
145
- v12.4.0.
146
- Refer to `Bootstrap.js` in Toolbox for required import changes.
147
- * Visit https://www.highcharts.com/blog/changelog/ for specific changes.
142
+ * Upgraded Highcharts to v12.
143
+ * Refer to Toolbox's `Bootstrap.js` for required changes to imports and chart initialization.
144
+ * Visit https://www.highcharts.com/blog/changelog/ for additional details on the upgrade.
148
145
 
149
146
  ### 🎁 New Features
150
147
 
151
- * New method `StoreRecord.getModifiedValues()` to gather edited data from a store record.
148
+ * Added `StoreRecord.getModifiedValues()` to return an object with edited field values only.
152
149
 
153
150
  ### 🐞 Bug Fixes
154
151
 
155
- * StoreRecord will no longer report `isModified` as `true` if a field has been edited and
156
- then returned to its original value in a subsequent edit.
157
- * Restore support for `TabModel.content` being nullable to support dynamic tab content.
158
- * Remove stray context menu from appearing when clicking on column group headers and other grid
159
- empty space.
152
+ * Improved `StoreRecord.isModified` to no return `true` after a field has been edited but then
153
+ returned to its original value in a subsequent edit.
154
+ * Restored support for `TabModel.content` set to `null`, to support dynamic tab content.
155
+ * Fixed and issue where stray context menus could appear when clicking on column group headers and
156
+ other grid empty space.
160
157
 
161
158
  ## 77.0.1 - 2025-10-29
162
159
 
@@ -277,6 +277,16 @@ export const msg: ColumnSpec = {
277
277
  autosizeMaxWidth
278
278
  };
279
279
 
280
+ export const clientAppCode: ColumnSpec = {
281
+ field: {
282
+ name: 'clientAppCode',
283
+ type: 'string',
284
+ displayName: 'Client App'
285
+ },
286
+ chooserGroup: 'Core Data',
287
+ width: 100
288
+ };
289
+
280
290
  export const severity: ColumnSpec = {
281
291
  field: {
282
292
  name: 'severity',
@@ -293,6 +293,7 @@ export class ActivityTrackingModel extends HoistModel implements ActivityDetailP
293
293
  Col.appVersion.field,
294
294
  Col.browser.field,
295
295
  Col.category.field,
296
+ Col.clientAppCode.field,
296
297
  Col.correlationId.field,
297
298
  {name: 'count', type: 'int', aggregator: 'CHILD_COUNT'},
298
299
  Col.data.field,
@@ -344,6 +345,7 @@ export class ActivityTrackingModel extends HoistModel implements ActivityDetailP
344
345
  {field: 'msg', displayName: 'Message'},
345
346
  {field: 'severity', values: ['DEBUG', 'INFO', 'WARN', 'ERROR']},
346
347
  {field: 'tabId'},
348
+ {field: 'clientAppCode'},
347
349
  {field: 'userAgent'},
348
350
  {field: 'username', displayName: 'User'},
349
351
  {field: 'url', displayName: 'URL'}
@@ -424,6 +426,7 @@ export class ActivityTrackingModel extends HoistModel implements ActivityDetailP
424
426
  {field: 'count', chooserGroup: 'Core Data', hidden},
425
427
  {...Col.appEnvironment, hidden},
426
428
  {...Col.appVersion, hidden},
429
+ {...Col.clientAppCode, hidden},
427
430
  {...Col.loadId, hidden},
428
431
  {...Col.tabId, hidden},
429
432
  {...Col.url, hidden},
@@ -182,6 +182,7 @@ export class ActivityDetailModel extends HoistModel {
182
182
  {...Col.browser, hidden},
183
183
  {...Col.userAgent, hidden},
184
184
  {...Col.appVersion, hidden},
185
+ {...Col.clientAppCode, hidden},
185
186
  {...Col.loadId, hidden},
186
187
  {...Col.tabId},
187
188
  {...Col.correlationId, hidden},
@@ -94,6 +94,7 @@ const detailRecForm = hoistCmp.factory<ActivityDetailModel>(({model}) => {
94
94
  return span(username, impSpan);
95
95
  }
96
96
  }),
97
+ formField({field: 'clientAppCode'}),
97
98
  formField({field: 'category'}),
98
99
  formField({field: 'msg'}),
99
100
  formField({
@@ -197,7 +197,7 @@ export class ClientsModel extends BaseAdminTabModel {
197
197
  {
198
198
  headerName: 'Client App',
199
199
  headerAlign: 'center',
200
- children: [Col.appVersion, Col.appBuild]
200
+ children: [Col.clientAppCode, Col.appVersion, {...Col.appBuild, hidden}]
201
201
  },
202
202
  {
203
203
  headerName: 'Send/Receive',
@@ -21,6 +21,7 @@ export declare const errorName: ColumnSpec;
21
21
  export declare const instance: ColumnSpec;
22
22
  export declare const loadId: ColumnSpec;
23
23
  export declare const msg: ColumnSpec;
24
+ export declare const clientAppCode: ColumnSpec;
24
25
  export declare const severity: ColumnSpec;
25
26
  export declare const severityIcon: ColumnSpec;
26
27
  export declare const tabId: ColumnSpec;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xh/hoist",
3
- "version": "79.0.0-SNAPSHOT.1767046009354",
3
+ "version": "79.0.0-SNAPSHOT.1767390094508",
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",
@@ -119,6 +119,7 @@ export class TrackService extends HoistService {
119
119
  msg: stripTags(options.message),
120
120
  clientUsername: XH.getUsername(),
121
121
  appVersion: XH.getEnv('clientVersion'),
122
+ clientAppCode: XH.clientAppCode,
122
123
  loadId: XH.loadId,
123
124
  tabId: XH.tabId,
124
125
  url: window.location.href,
@@ -45,7 +45,13 @@ export class WebSocketService extends HoistService {
45
45
  readonly REG_SUCCESS_TOPIC = 'xhRegistrationSuccess';
46
46
  readonly FORCE_APP_SUSPEND_TOPIC = 'xhForceAppSuspend';
47
47
  readonly REQ_CLIENT_HEALTH_RPT_TOPIC = 'xhRequestClientHealthReport';
48
- readonly METADATA_FOR_HANDSHAKE = ['appVersion', 'appBuild', 'loadId', 'tabId'];
48
+ readonly METADATA_FOR_HANDSHAKE = [
49
+ 'appVersion',
50
+ 'appBuild',
51
+ 'loadId',
52
+ 'tabId',
53
+ 'clientAppCode'
54
+ ];
49
55
 
50
56
  /** True if WebSockets not explicitly disabled via {@link AppSpec.disableWebSockets}. */
51
57
  enabled: boolean = !XH.appSpec.disableWebSockets;