@xh/hoist 73.0.0-SNAPSHOT.1746476925456 → 73.0.0-SNAPSHOT.1746482507483

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +15 -3
  2. package/admin/columns/Rest.ts +0 -1
  3. package/admin/columns/Tracking.ts +6 -9
  4. package/admin/tabs/activity/tracking/ActivityTrackingModel.ts +14 -47
  5. package/admin/tabs/activity/tracking/ActivityTrackingPanel.ts +1 -1
  6. package/admin/tabs/activity/tracking/detail/ActivityDetailModel.ts +35 -51
  7. package/admin/tabs/activity/tracking/detail/ActivityDetailView.ts +5 -7
  8. package/admin/tabs/client/clients/ClientsModel.ts +2 -7
  9. package/admin/tabs/client/clients/ClientsPanel.ts +2 -3
  10. package/build/types/admin/tabs/activity/tracking/ActivityTrackingModel.d.ts +2 -7
  11. package/build/types/admin/tabs/activity/tracking/detail/ActivityDetailModel.d.ts +6 -18
  12. package/build/types/cmp/grid/Types.d.ts +4 -1
  13. package/build/types/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.d.ts +2 -0
  14. package/build/types/desktop/cmp/input/DateInput.d.ts +3 -2
  15. package/build/types/desktop/cmp/input/NumberInput.d.ts +3 -2
  16. package/build/types/desktop/cmp/input/TextInput.d.ts +3 -2
  17. package/build/types/mobile/cmp/input/DateInput.d.ts +3 -2
  18. package/build/types/mobile/cmp/input/NumberInput.d.ts +3 -2
  19. package/build/types/mobile/cmp/input/SearchInput.d.ts +3 -2
  20. package/build/types/mobile/cmp/input/TextInput.d.ts +3 -2
  21. package/cmp/grid/Types.ts +4 -1
  22. package/cmp/grid/filter/GridFilterModel.ts +1 -1
  23. package/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.scss +13 -0
  24. package/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTab.ts +29 -2
  25. package/desktop/cmp/grid/impl/filter/headerfilter/values/ValuesTabModel.ts +37 -15
  26. package/desktop/cmp/input/DateInput.ts +3 -2
  27. package/desktop/cmp/input/NumberInput.ts +3 -2
  28. package/desktop/cmp/input/TextInput.ts +3 -2
  29. package/mobile/cmp/input/DateInput.ts +3 -2
  30. package/mobile/cmp/input/NumberInput.ts +3 -2
  31. package/mobile/cmp/input/SearchInput.ts +3 -2
  32. package/mobile/cmp/input/TextInput.ts +3 -2
  33. package/package.json +1 -1
  34. package/tsconfig.tsbuildinfo +1 -1
  35. package/admin/tabs/client/clients/activity/ClientDetail.scss +0 -24
  36. package/admin/tabs/client/clients/activity/ClientDetailModel.ts +0 -83
  37. package/admin/tabs/client/clients/activity/ClientDetailPanel.ts +0 -63
  38. package/build/types/admin/tabs/client/clients/activity/ClientDetailModel.d.ts +0 -21
  39. package/build/types/admin/tabs/client/clients/activity/ClientDetailPanel.d.ts +0 -3
@@ -1,24 +0,0 @@
1
- .xh-admin-client-detail {
2
- &__header {
3
- align-items: center;
4
- background-color: var(--xh-grid-bg-odd);
5
- border-bottom: var(--xh-border-solid);
6
- padding: var(--xh-pad-px);
7
-
8
- h2 {
9
- flex: 1;
10
- font-weight: normal;
11
- margin: 0;
12
-
13
- .xh-icon {
14
- font-size: 0.8em;
15
- margin-right: 0.3em;
16
- }
17
- }
18
-
19
- &__meta {
20
- flex: none;
21
- align-items: flex-end;
22
- }
23
- }
24
- }
@@ -1,83 +0,0 @@
1
- import {ClientsModel} from '@xh/hoist/admin/tabs/client/clients/ClientsModel';
2
- import {ColumnSpec} from '@xh/hoist/cmp/grid';
3
- import {HoistModel, LoadSpec, lookup, PlainObject, XH} from '@xh/hoist/core';
4
- import {StoreRecord} from '@xh/hoist/data';
5
- import {bindable, computed, makeObservable} from '@xh/hoist/mobx';
6
- import {ReactNode} from 'react';
7
- import {ActivityDetailProvider} from '../../../activity/tracking/detail/ActivityDetailModel';
8
-
9
- export class ClientDetailModel extends HoistModel implements ActivityDetailProvider {
10
- @lookup(ClientsModel) clientsModel: ClientsModel;
11
-
12
- readonly isActivityDetailProvider = true;
13
-
14
- /** Client tabID for which to load and show activity. */
15
- @bindable tabId: string;
16
- @bindable.ref trackLogs: PlainObject[] = [];
17
-
18
- get selectedRec(): StoreRecord {
19
- return this.clientsModel?.gridModel.selectedRecord;
20
- }
21
-
22
- @computed
23
- get hasSelection(): boolean {
24
- return !!this.selectedRec;
25
- }
26
-
27
- get title(): ReactNode {
28
- return this.selectedRec?.data.user ?? 'Client Activity';
29
- }
30
-
31
- /** For child {@link ActivityDetailModel}. */
32
- readonly colDefaults: Record<string, Partial<ColumnSpec>> = {
33
- username: {hidden: true},
34
- impersonatingFlag: {hidden: true},
35
- tabId: {hidden: true},
36
- loadId: {hidden: false},
37
- device: {hidden: true}
38
- };
39
-
40
- constructor() {
41
- super();
42
- makeObservable(this);
43
- }
44
-
45
- override onLinked() {
46
- super.onLinked();
47
-
48
- this.addReaction(
49
- {
50
- track: () => this.clientsModel.gridModel.selectedRecord,
51
- run: rec => (this.tabId = rec?.get('tabId'))
52
- },
53
- {
54
- track: () => this.tabId,
55
- run: () => this.loadAsync(),
56
- debounce: 300
57
- }
58
- );
59
- }
60
-
61
- override async doLoadAsync(loadSpec: LoadSpec) {
62
- const {tabId} = this;
63
-
64
- if (!tabId) {
65
- this.trackLogs = [];
66
- return;
67
- }
68
-
69
- try {
70
- this.trackLogs = await XH.postJson({
71
- url: 'trackLogAdmin',
72
- body: {
73
- filters: {field: 'tabId', op: '=', value: tabId}
74
- }
75
- });
76
- } catch (e) {
77
- if (loadSpec.isStale || !loadSpec.isAutoRefresh) return;
78
-
79
- XH.handleException(e, {alertType: 'toast'});
80
- this.trackLogs = [];
81
- }
82
- }
83
- }
@@ -1,63 +0,0 @@
1
- import {isOpen} from '@xh/hoist/admin/columns';
2
- import {activityDetailView} from '@xh/hoist/admin/tabs/activity/tracking/detail/ActivityDetailView';
3
- import {ClientDetailModel} from '@xh/hoist/admin/tabs/client/clients/activity/ClientDetailModel';
4
- import {h2, hbox, placeholder, vbox} from '@xh/hoist/cmp/layout';
5
- import {mask} from '@xh/hoist/cmp/mask';
6
- import {relativeTimestamp} from '@xh/hoist/cmp/relativetimestamp';
7
- import {creates, hoistCmp} from '@xh/hoist/core';
8
- import {panel} from '@xh/hoist/desktop/cmp/panel';
9
- import {Icon} from '@xh/hoist/icon';
10
- import './ClientDetail.scss';
11
-
12
- export const clientDetailPanel = hoistCmp.factory({
13
- displayName: 'ClientDetailPanel',
14
- model: creates(ClientDetailModel),
15
-
16
- render({model}) {
17
- return panel({
18
- className: 'xh-admin-client-detail',
19
- collapsedTitle: model.title,
20
- collapsedIcon: Icon.analytics(),
21
- compactHeader: true,
22
- modelConfig: {side: 'right', defaultSize: '40%'},
23
- item: model.hasSelection
24
- ? clientDetail()
25
- : placeholder(Icon.analytics(), 'Select a client to view activity...')
26
- });
27
- }
28
- });
29
-
30
- const clientDetail = hoistCmp.factory<ClientDetailModel>(({model}) => {
31
- const {data} = model.selectedRec;
32
- return panel({
33
- items: [
34
- hbox({
35
- className: 'xh-admin-client-detail__header',
36
- items: [
37
- h2(isOpen.renderer(data.isOpen, null), data.user),
38
- vbox({
39
- className: 'xh-admin-client-detail__header__meta',
40
- items: [
41
- relativeTimestamp({
42
- timestamp: data.createdTime,
43
- options: {prefix: 'Session established'}
44
- }),
45
- relativeTimestamp({
46
- timestamp: data.lastReceivedTime,
47
- options: {prefix: 'Last heartbeat', emptyResult: 'No heartbeat yet'}
48
- })
49
- ]
50
- })
51
- ]
52
- }),
53
- panel({
54
- item: activityDetailView(),
55
- mask: mask({
56
- bind: model.loadModel,
57
- spinner: true,
58
- message: 'Loading activity...'
59
- })
60
- })
61
- ]
62
- });
63
- });
@@ -1,21 +0,0 @@
1
- import { ClientsModel } from '@xh/hoist/admin/tabs/client/clients/ClientsModel';
2
- import { ColumnSpec } from '@xh/hoist/cmp/grid';
3
- import { HoistModel, LoadSpec, PlainObject } from '@xh/hoist/core';
4
- import { StoreRecord } from '@xh/hoist/data';
5
- import { ReactNode } from 'react';
6
- import { ActivityDetailProvider } from '../../../activity/tracking/detail/ActivityDetailModel';
7
- export declare class ClientDetailModel extends HoistModel implements ActivityDetailProvider {
8
- clientsModel: ClientsModel;
9
- readonly isActivityDetailProvider = true;
10
- /** Client tabID for which to load and show activity. */
11
- tabId: string;
12
- trackLogs: PlainObject[];
13
- get selectedRec(): StoreRecord;
14
- get hasSelection(): boolean;
15
- get title(): ReactNode;
16
- /** For child {@link ActivityDetailModel}. */
17
- readonly colDefaults: Record<string, Partial<ColumnSpec>>;
18
- constructor();
19
- onLinked(): void;
20
- doLoadAsync(loadSpec: LoadSpec): Promise<void>;
21
- }
@@ -1,3 +0,0 @@
1
- import { ClientDetailModel } from '@xh/hoist/admin/tabs/client/clients/activity/ClientDetailModel';
2
- import './ClientDetail.scss';
3
- export declare const clientDetailPanel: import("@xh/hoist/core").ElementFactory<import("@xh/hoist/core").DefaultHoistProps<ClientDetailModel>>;