@flamingo-stack/openframe-frontend-core 0.0.853 → 0.0.854
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/dist/build/export-map.json +1 -1
- package/dist/{chunk-G7GF4PWA.cjs → chunk-2IJMHBOK.cjs} +3 -3
- package/dist/{chunk-IC4IJJB2.cjs → chunk-3WXHPD6N.cjs} +55 -55
- package/dist/{chunk-UV45EPXN.cjs → chunk-4LTLEUY5.cjs} +5 -5
- package/dist/{chunk-BNHTBLAG.cjs → chunk-4O5N5CGK.cjs} +17 -17
- package/dist/{chunk-COWMXUHN.cjs → chunk-4SSJ3T3N.cjs} +3 -1
- package/dist/{chunk-IUDBG3HJ.cjs → chunk-5HMENXSR.cjs} +3 -3
- package/dist/{chunk-COJG2ATY.cjs → chunk-5OENPMRU.cjs} +43 -43
- package/dist/{chunk-IO6NN3SL.cjs → chunk-5TXE7BXT.cjs} +46 -46
- package/dist/{chunk-EIACEY2L.cjs → chunk-63ZV3UGG.cjs} +10 -10
- package/dist/{chunk-HTYJUMFB.cjs → chunk-6DCUGIGU.cjs} +2 -2
- package/dist/{chunk-BNG6JOGZ.cjs → chunk-6XU3RCK3.cjs} +18 -18
- package/dist/{chunk-KEV6F3QN.cjs → chunk-7J5NSWJG.cjs} +87 -87
- package/dist/{chunk-53QPG7SJ.cjs → chunk-7MOBD44H.cjs} +28 -28
- package/dist/{chunk-U767P4JU.cjs → chunk-ACPOJE32.cjs} +9 -9
- package/dist/{chunk-E4MFQKPC.cjs → chunk-BAA3YCLT.cjs} +72 -72
- package/dist/{chunk-7RZHSBNX.cjs → chunk-D2XGRWPW.cjs} +73 -73
- package/dist/{chunk-5RMBLOJ5.cjs → chunk-EIHMPQRQ.cjs} +9 -9
- package/dist/{chunk-TBGQMHCG.cjs → chunk-ETQNMR2K.cjs} +5 -5
- package/dist/{chunk-2W22LY3W.cjs → chunk-FBANHIAG.cjs} +9 -9
- package/dist/{chunk-P63CRPWI.cjs → chunk-FJXSKMQJ.cjs} +20 -20
- package/dist/{chunk-QOW2GP3V.cjs → chunk-GVHCQRUE.cjs} +21 -21
- package/dist/{chunk-KNN2GCMW.cjs → chunk-H3GBPYPS.cjs} +18 -18
- package/dist/{chunk-FW7RKWPY.cjs → chunk-JKBNK5U6.cjs} +3 -3
- package/dist/{chunk-W7OFAROY.cjs → chunk-KA3L6D5N.cjs} +3 -3
- package/dist/{chunk-USPUZO53.cjs → chunk-LQDAB5V5.cjs} +4 -4
- package/dist/{chunk-KHOB3TES.cjs → chunk-ONYANAMA.cjs} +4 -4
- package/dist/{chunk-GI6ECCWB.cjs → chunk-PRJZMZ3X.cjs} +1155 -739
- package/dist/chunk-QD727QFI.cjs +62 -0
- package/dist/{chunk-67CZ2Q5K.cjs → chunk-RMI6O3AE.cjs} +32 -32
- package/dist/{chunk-EF2FZ7GT.cjs → chunk-S5P6CF5R.cjs} +47 -47
- package/dist/{chunk-6V2M2X3M.cjs → chunk-TMPLHUUU.cjs} +6 -6
- package/dist/{chunk-UO2EJGRJ.cjs → chunk-UPQ4MAR7.cjs} +14 -14
- package/dist/{chunk-LFEURIZN.cjs → chunk-VMAOZA2V.cjs} +215 -215
- package/dist/{chunk-NMWLXHFH.cjs → chunk-YY3WP2YQ.cjs} +30 -30
- package/dist/{chunk-HF3V6WBJ.cjs → chunk-ZDPPNHA2.cjs} +3 -3
- package/dist/{cloud-tenants-QUL2XPAS.cjs → cloud-tenants-5RNK4ZAT.cjs} +19 -19
- package/dist/components/case-studies/index.cjs +33 -33
- package/dist/components/chat/index.cjs +13 -13
- package/dist/components/contact/index.cjs +20 -20
- package/dist/components/docs/index.cjs +23 -23
- package/dist/components/embeds/index.cjs +20 -20
- package/dist/components/faq/index.cjs +21 -21
- package/dist/components/features/cloud-tenants/index.d.ts +7 -5
- package/dist/components/features/cloud-tenants/index.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/index.js +8 -1
- package/dist/components/features/cloud-tenants/single-customer-tenants-table-view.d.ts +26 -0
- package/dist/components/features/cloud-tenants/single-customer-tenants-table-view.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/single-customer-tenants-table-view.js +176 -0
- package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts +4 -2
- package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenant-access-cell.js +3 -2
- package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts +12 -5
- package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenant-customer-cell.js +38 -7
- package/dist/components/features/cloud-tenants/tenant-licenses-cell.d.ts +7 -0
- package/dist/components/features/cloud-tenants/tenant-licenses-cell.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-licenses-cell.js +17 -0
- package/dist/components/features/cloud-tenants/tenant-presentation.d.ts +19 -0
- package/dist/components/features/cloud-tenants/tenant-presentation.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenant-presentation.js +24 -3
- package/dist/components/features/cloud-tenants/tenant-row.d.ts +35 -8
- package/dist/components/features/cloud-tenants/tenant-row.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts +9 -3
- package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenants-table-columns.js +5 -3
- package/dist/components/features/cloud-tenants/tenants-table-view.d.ts +27 -6
- package/dist/components/features/cloud-tenants/tenants-table-view.d.ts.map +1 -1
- package/dist/components/features/cloud-tenants/tenants-table-view.js +75 -17
- package/dist/components/features/devices/device-directory.d.ts +18 -0
- package/dist/components/features/devices/device-directory.d.ts.map +1 -0
- package/dist/components/features/devices/device-directory.js +35 -0
- package/dist/components/features/devices/devices-filter-toolbar.d.ts +3 -1
- package/dist/components/features/devices/devices-filter-toolbar.d.ts.map +1 -1
- package/dist/components/features/devices/devices-filter-toolbar.js +2 -1
- package/dist/components/features/devices/devices-panel-view.d.ts +3 -1
- package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -1
- package/dist/components/features/devices/devices-panel-view.js +11 -2
- package/dist/components/features/devices/devices-table-columns.d.ts +17 -3
- package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -1
- package/dist/components/features/devices/devices-table-columns.js +80 -10
- package/dist/components/features/devices/index.d.ts +1 -0
- package/dist/components/features/devices/index.d.ts.map +1 -1
- package/dist/components/features/devices/index.js +8 -0
- package/dist/components/features/devices/types.d.ts +14 -0
- package/dist/components/features/devices/types.d.ts.map +1 -1
- package/dist/components/features/devices/use-tag-filter-modal.d.ts +1 -0
- package/dist/components/features/devices/use-tag-filter-modal.d.ts.map +1 -1
- package/dist/components/features/devices/use-tag-filter-modal.js +13 -8
- package/dist/components/features/index.cjs +33 -19
- package/dist/components/help-center-pages/index.cjs +120 -120
- package/dist/components/index.cjs +90 -76
- package/dist/components/meeting-scheduler/index.cjs +82 -82
- package/dist/components/navigation/app-layout.js +2 -2
- package/dist/components/navigation/index.cjs +22 -22
- package/dist/components/onboarding-guides/index.cjs +22 -22
- package/dist/components/product-demo/index.cjs +30 -30
- package/dist/components/related-content/index.cjs +8 -8
- package/dist/components/tickets/index.cjs +24 -24
- package/dist/components/ui/date-picker.d.ts +2 -0
- package/dist/components/ui/date-picker.d.ts.map +1 -1
- package/dist/components/ui/date-picker.js +19 -6
- package/dist/components/ui/index.cjs +19 -19
- package/dist/{devices-LNB4CYPP.cjs → devices-44O5PZOW.cjs} +20 -20
- package/dist/{embeddable-chat-SJEEJI4N.cjs → embeddable-chat-W3CLMGC3.cjs} +90 -90
- package/dist/hooks/index.cjs +11 -7
- package/dist/hooks/ui/use-content-breakpoint.d.ts +8 -0
- package/dist/hooks/ui/use-content-breakpoint.d.ts.map +1 -1
- package/dist/hooks/ui/use-content-breakpoint.js +17 -3
- package/dist/hooks/ui/use-media-query.d.ts +1 -0
- package/dist/hooks/ui/use-media-query.d.ts.map +1 -1
- package/dist/hooks/ui/use-media-query.js +3 -1
- package/dist/index.cjs +42 -24
- package/dist/{knowledge-UTWKB6XG.cjs → knowledge-UUU3WVO3.cjs} +20 -20
- package/dist/{logs-PMXIWMBQ.cjs → logs-DFHNSODA.cjs} +26 -26
- package/dist/{policies-6DCMFDL7.cjs → policies-RGFUGDBP.cjs} +23 -23
- package/dist/{remote-session-SG44CNOK.cjs → remote-session-U3H77HKR.cjs} +10 -10
- package/dist/{scripts-2G7LXW7Z.cjs → scripts-KOVO5DHW.cjs} +26 -26
- package/dist/{software-update-MYLKHDHC.cjs → software-update-4EKHVV5W.cjs} +23 -23
- package/dist/{tickets-board-SQY2Y6QV.cjs → tickets-board-YIFOVMDX.cjs} +10 -10
- package/dist/utils/presentation-for.d.ts +6 -0
- package/dist/utils/presentation-for.d.ts.map +1 -0
- package/dist/utils/presentation-for.js +7 -0
- package/package.json +1 -1
- package/src/components/features/cloud-tenants/index.ts +8 -3
- package/src/components/features/cloud-tenants/single-customer-tenants-table-view.tsx +234 -0
- package/src/components/features/cloud-tenants/tenant-access-cell.tsx +12 -5
- package/src/components/features/cloud-tenants/tenant-customer-cell.tsx +48 -12
- package/src/components/features/cloud-tenants/tenant-licenses-cell.tsx +28 -0
- package/src/components/features/cloud-tenants/tenant-presentation.ts +46 -4
- package/src/components/features/cloud-tenants/tenant-row.ts +38 -8
- package/src/components/features/cloud-tenants/tenants-table-columns.ts +8 -5
- package/src/components/features/cloud-tenants/tenants-table-view.tsx +123 -28
- package/src/components/features/devices/device-directory.ts +55 -0
- package/src/components/features/devices/devices-filter-toolbar.tsx +4 -1
- package/src/components/features/devices/devices-panel-view.tsx +12 -2
- package/src/components/features/devices/devices-table-columns.tsx +123 -8
- package/src/components/features/devices/index.ts +7 -0
- package/src/components/features/devices/types.ts +14 -0
- package/src/components/features/devices/use-tag-filter-modal.ts +32 -14
- package/src/components/navigation/app-layout.tsx +4 -4
- package/src/components/ui/date-picker.tsx +21 -3
- package/src/hooks/ui/use-content-breakpoint.ts +21 -2
- package/src/hooks/ui/use-media-query.ts +1 -0
- package/src/utils/presentation-for.ts +10 -0
- package/dist/chunk-UAI4VMEF.cjs +0 -46
|
@@ -5,11 +5,19 @@ import { cn } from "../../../utils/cn.js";
|
|
|
5
5
|
import { openInNewTab } from "../../../utils/open-in-new-tab.js";
|
|
6
6
|
import { ArrowRightUpIcon } from "../../icons-v2-generated/arrows/arrow-right-up-icon.js";
|
|
7
7
|
import { Button } from "../../ui/button/index.js";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
DataTable,
|
|
10
|
+
dataTableLoadingRows,
|
|
11
|
+
useDataTable
|
|
12
|
+
} from "../../ui/data-table/index.js";
|
|
9
13
|
import { useLoadingScope } from "../../ui/loading-scope.js";
|
|
14
|
+
import {
|
|
15
|
+
SingleCustomerTenantsTableView
|
|
16
|
+
} from "./single-customer-tenants-table-view.js";
|
|
10
17
|
import { TenantAccessCell } from "./tenant-access-cell.js";
|
|
11
18
|
import { TenantCell } from "./tenant-cell.js";
|
|
12
19
|
import { TenantCustomerCell } from "./tenant-customer-cell.js";
|
|
20
|
+
import { TenantLicensesCell } from "./tenant-licenses-cell.js";
|
|
13
21
|
import { TENANT_COLUMNS } from "./tenants-table-columns.js";
|
|
14
22
|
const getRowId = (row) => row.id;
|
|
15
23
|
const columnMeta = ({ width, hideAt, align }) => ({ width, hideAt, align });
|
|
@@ -17,7 +25,7 @@ const loadingTenant = (id) => ({
|
|
|
17
25
|
id,
|
|
18
26
|
name: "",
|
|
19
27
|
provider: "",
|
|
20
|
-
|
|
28
|
+
customers: [{ name: "" }],
|
|
21
29
|
accessState: ""
|
|
22
30
|
});
|
|
23
31
|
function OpenTenantButton({ href, name }) {
|
|
@@ -38,11 +46,16 @@ function OpenTenantButton({ href, name }) {
|
|
|
38
46
|
) })
|
|
39
47
|
);
|
|
40
48
|
}
|
|
49
|
+
const TENANTS_TABLE_FILTER_COLUMNS = ["tenant", "customer", "licenses", "access"];
|
|
50
|
+
function TenantsTableView(props) {
|
|
51
|
+
return props.variant === "multi-customer" ? /* @__PURE__ */ jsx(MultiCustomerTenantsTableView, { ...props }) : /* @__PURE__ */ jsx(SingleCustomerTenantsTableView, { ...props });
|
|
52
|
+
}
|
|
41
53
|
const TENANTS_TABLE_SKELETON_ROWS = 20;
|
|
42
|
-
function
|
|
54
|
+
function MultiCustomerTenantsTableView({
|
|
43
55
|
rows,
|
|
44
56
|
getHref,
|
|
45
57
|
search = "",
|
|
58
|
+
filters,
|
|
46
59
|
isPending = false,
|
|
47
60
|
totalCount,
|
|
48
61
|
stickyHeaderOffset,
|
|
@@ -52,14 +65,20 @@ function TenantsTableView({
|
|
|
52
65
|
onLoadMore,
|
|
53
66
|
now
|
|
54
67
|
}) {
|
|
55
|
-
const
|
|
56
|
-
|
|
68
|
+
const filterOptions = filters?.options;
|
|
69
|
+
const filtersPending = filters?.pending ?? false;
|
|
70
|
+
const columns = useMemo(() => {
|
|
71
|
+
const funnel = (id) => {
|
|
72
|
+
const options = filterOptions?.[id];
|
|
73
|
+
return options ? { filter: { options, pending: filtersPending } } : {};
|
|
74
|
+
};
|
|
75
|
+
return [
|
|
57
76
|
{
|
|
58
77
|
id: TENANT_COLUMNS.tenant.id,
|
|
59
78
|
header: TENANT_COLUMNS.tenant.header,
|
|
60
79
|
cell: ({ row }) => /* @__PURE__ */ jsx(TenantCell, { provider: row.original.provider, name: row.original.name, domain: row.original.domain }),
|
|
61
80
|
enableSorting: false,
|
|
62
|
-
meta: columnMeta(TENANT_COLUMNS.tenant)
|
|
81
|
+
meta: { ...columnMeta(TENANT_COLUMNS.tenant), ...funnel("tenant") }
|
|
63
82
|
},
|
|
64
83
|
{
|
|
65
84
|
id: TENANT_COLUMNS.customer.id,
|
|
@@ -67,20 +86,36 @@ function TenantsTableView({
|
|
|
67
86
|
cell: ({ row }) => /* @__PURE__ */ jsx(
|
|
68
87
|
TenantCustomerCell,
|
|
69
88
|
{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
89
|
+
customers: row.original.customers,
|
|
90
|
+
userCount: row.original.userCount,
|
|
91
|
+
unattributedUserCount: row.original.unattributedUserCount,
|
|
92
|
+
neverRead: row.original.lastReadAt == null && row.original.userCount == null
|
|
73
93
|
}
|
|
74
94
|
),
|
|
75
95
|
enableSorting: false,
|
|
76
|
-
meta: columnMeta(TENANT_COLUMNS.customer)
|
|
96
|
+
meta: { ...columnMeta(TENANT_COLUMNS.customer), ...funnel("customer") }
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: TENANT_COLUMNS.licenses.id,
|
|
100
|
+
header: TENANT_COLUMNS.licenses.header,
|
|
101
|
+
cell: ({ row }) => /* @__PURE__ */ jsx(TenantLicensesCell, { licenses: row.original.licenses }),
|
|
102
|
+
enableSorting: false,
|
|
103
|
+
meta: { ...columnMeta(TENANT_COLUMNS.licenses), ...funnel("licenses") }
|
|
77
104
|
},
|
|
78
105
|
{
|
|
79
106
|
id: TENANT_COLUMNS.access.id,
|
|
80
107
|
header: TENANT_COLUMNS.access.header,
|
|
81
|
-
cell: ({ row }) => /* @__PURE__ */ jsx(
|
|
108
|
+
cell: ({ row }) => /* @__PURE__ */ jsx(
|
|
109
|
+
TenantAccessCell,
|
|
110
|
+
{
|
|
111
|
+
accessState: row.original.accessState,
|
|
112
|
+
lastReadAt: row.original.lastReadAt,
|
|
113
|
+
syncPaused: row.original.syncPaused,
|
|
114
|
+
now
|
|
115
|
+
}
|
|
116
|
+
),
|
|
82
117
|
enableSorting: false,
|
|
83
|
-
meta: columnMeta(TENANT_COLUMNS.access)
|
|
118
|
+
meta: { ...columnMeta(TENANT_COLUMNS.access), ...funnel("access") }
|
|
84
119
|
},
|
|
85
120
|
{
|
|
86
121
|
id: TENANT_COLUMNS.open.id,
|
|
@@ -88,15 +123,37 @@ function TenantsTableView({
|
|
|
88
123
|
enableSorting: false,
|
|
89
124
|
meta: columnMeta(TENANT_COLUMNS.open)
|
|
90
125
|
}
|
|
91
|
-
]
|
|
92
|
-
|
|
93
|
-
);
|
|
126
|
+
];
|
|
127
|
+
}, [getHref, now, filterOptions, filtersPending]);
|
|
94
128
|
const loading = useLoadingScope();
|
|
95
129
|
const loadingRows = useMemo(
|
|
96
130
|
() => loading ? dataTableLoadingRows(skeletonRows, loadingTenant) : null,
|
|
97
131
|
[loading, skeletonRows]
|
|
98
132
|
);
|
|
99
|
-
const
|
|
133
|
+
const selections = filters?.selections;
|
|
134
|
+
const onFiltersChange = filters?.onChange;
|
|
135
|
+
const columnFilters = useMemo(
|
|
136
|
+
() => TENANTS_TABLE_FILTER_COLUMNS.flatMap(
|
|
137
|
+
(id) => selections && selections[id].length > 0 ? [{ id, value: selections[id] }] : []
|
|
138
|
+
),
|
|
139
|
+
[selections]
|
|
140
|
+
);
|
|
141
|
+
const table = useDataTable({
|
|
142
|
+
data: loadingRows ?? rows,
|
|
143
|
+
columns,
|
|
144
|
+
getRowId,
|
|
145
|
+
enableSorting: false,
|
|
146
|
+
state: { columnFilters },
|
|
147
|
+
onColumnFiltersChange: (updater) => {
|
|
148
|
+
const next = typeof updater === "function" ? updater(columnFilters) : updater;
|
|
149
|
+
const picked = (id) => {
|
|
150
|
+
const value = next.find((filter) => filter.id === id)?.value;
|
|
151
|
+
return Array.isArray(value) ? value : [];
|
|
152
|
+
};
|
|
153
|
+
const selected = Object.fromEntries(TENANTS_TABLE_FILTER_COLUMNS.map((id) => [id, picked(id)]));
|
|
154
|
+
onFiltersChange?.(selected);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
100
157
|
return (
|
|
101
158
|
// Dim, don't unmount, the stale rows while a deferred search refetches.
|
|
102
159
|
/* @__PURE__ */ jsx("div", { className: cn("transition-opacity duration-200", isPending && "opacity-60"), children: /* @__PURE__ */ jsxs(DataTable, { table, children: [
|
|
@@ -115,7 +172,7 @@ function TenantsTableView({
|
|
|
115
172
|
skeletonRows,
|
|
116
173
|
emptyState: {
|
|
117
174
|
title: "No tenants match",
|
|
118
|
-
description: `Nothing matches "${search}". Try a different name, domain or customer.`
|
|
175
|
+
description: search ? `Nothing matches "${search}". Try a different name, domain or customer.` : "Nothing matches the selected filters. Try adjusting them."
|
|
119
176
|
},
|
|
120
177
|
rowClassName: "mb-[var(--spacing-system-xxs)]",
|
|
121
178
|
rowHref: getHref
|
|
@@ -133,5 +190,6 @@ function TenantsTableView({
|
|
|
133
190
|
);
|
|
134
191
|
}
|
|
135
192
|
export {
|
|
193
|
+
TENANTS_TABLE_FILTER_COLUMNS,
|
|
136
194
|
TenantsTableView
|
|
137
195
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DeviceRow } from './types';
|
|
2
|
+
/** The schema's `DirectoryUserLink`: who a device is tied to in a directory. */
|
|
3
|
+
export type DeviceDirectoryUserLink = 'PRIMARY' | 'SHARED' | 'NONE';
|
|
4
|
+
/** The schema's `DirectorySource`: a directory that knows a device. */
|
|
5
|
+
export type DeviceDirectorySource = 'MICROSOFT_365' | 'GOOGLE_WORKSPACE';
|
|
6
|
+
/** The USER funnel's option (Figma 1136:64807). A value this build does not know keeps its own name. */
|
|
7
|
+
export declare function directoryUserLinkLabel(link: string): string;
|
|
8
|
+
/** The SOURCES tag: which directory knows the device. */
|
|
9
|
+
export declare function directorySourceLabel(source: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* The USER cell's two lines (Figma 865:55733): the primary user over "Primary user", "Shared" over how many, or the
|
|
12
|
+
* empty mark when nobody is tied to the device.
|
|
13
|
+
*/
|
|
14
|
+
export declare function directoryUserLines(device: Pick<DeviceRow, 'directoryUserLink' | 'directoryUserName' | 'directoryUserCount'>): {
|
|
15
|
+
name: string;
|
|
16
|
+
detail: string | null;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=device-directory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-directory.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/device-directory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,gFAAgF;AAChF,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpE,uEAAuE;AACvE,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAazE,wGAAwG;AACxG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3D;AAQD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,mBAAmB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC,GACxF;IACD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CASA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { presentationFor } from "../../../utils/presentation-for.js";
|
|
3
|
+
const USER_LINK_LABELS = {
|
|
4
|
+
PRIMARY: "Primary user",
|
|
5
|
+
SHARED: "Shared",
|
|
6
|
+
NONE: "No user"
|
|
7
|
+
};
|
|
8
|
+
const SOURCE_LABELS = {
|
|
9
|
+
MICROSOFT_365: "M365",
|
|
10
|
+
GOOGLE_WORKSPACE: "GOOGLE"
|
|
11
|
+
};
|
|
12
|
+
function directoryUserLinkLabel(link) {
|
|
13
|
+
return presentationFor(USER_LINK_LABELS, link) ?? link;
|
|
14
|
+
}
|
|
15
|
+
function directorySourceLabel(source) {
|
|
16
|
+
return presentationFor(SOURCE_LABELS, source) ?? source;
|
|
17
|
+
}
|
|
18
|
+
const EMPTY_USER = "\u2014";
|
|
19
|
+
const PRIMARY_LINK = "PRIMARY";
|
|
20
|
+
const SHARED_LINK = "SHARED";
|
|
21
|
+
function directoryUserLines(device) {
|
|
22
|
+
if (device.directoryUserLink === PRIMARY_LINK) {
|
|
23
|
+
return { name: device.directoryUserName ?? EMPTY_USER, detail: USER_LINK_LABELS.PRIMARY };
|
|
24
|
+
}
|
|
25
|
+
if (device.directoryUserLink === SHARED_LINK) {
|
|
26
|
+
const count = device.directoryUserCount ?? 0;
|
|
27
|
+
return { name: USER_LINK_LABELS.SHARED, detail: `${count} recent ${count === 1 ? "user" : "users"}` };
|
|
28
|
+
}
|
|
29
|
+
return { name: EMPTY_USER, detail: null };
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
directorySourceLabel,
|
|
33
|
+
directoryUserLines,
|
|
34
|
+
directoryUserLinkLabel
|
|
35
|
+
};
|
|
@@ -21,6 +21,8 @@ export interface DevicesFilterToolbarProps {
|
|
|
21
21
|
selectedTags: FilterModalProps['selectedTags'];
|
|
22
22
|
onTagsChange: FilterModalProps['onTagsChange'];
|
|
23
23
|
isLoading?: boolean;
|
|
24
|
+
/** The search field's prompt. Default "Search for Devices". */
|
|
25
|
+
searchPlaceholder?: string;
|
|
24
26
|
/**
|
|
25
27
|
* When true (default), pins the toolbar at the top with the same negative-margin
|
|
26
28
|
* bleed used by `DevicesPanel` (so the search row's background covers the
|
|
@@ -40,6 +42,6 @@ export interface DevicesFilterToolbarProps {
|
|
|
40
42
|
* all state (search value, modal open/close, filter options) is owned by
|
|
41
43
|
* the parent. Reused by `DevicesPanel` and (eventually) `DeviceSelector`.
|
|
42
44
|
*/
|
|
43
|
-
export declare function DevicesFilterToolbar({ searchValue, onSearchChange, tags, onTagRemove, onClearAll, onOpenFilterModal, isFilterModalOpen, onCloseFilterModal, filterGroups, onFilterChange, currentFilters, tagFilterKeys, selectedTags, onTagsChange, isLoading, sticky, toolbarRef, }: DevicesFilterToolbarProps): import("react").JSX.Element;
|
|
45
|
+
export declare function DevicesFilterToolbar({ searchValue, onSearchChange, tags, onTagRemove, onClearAll, onOpenFilterModal, isFilterModalOpen, onCloseFilterModal, filterGroups, onFilterChange, currentFilters, tagFilterKeys, selectedTags, onTagsChange, isLoading, searchPlaceholder, sticky, toolbarRef, }: DevicesFilterToolbarProps): import("react").JSX.Element;
|
|
44
46
|
export {};
|
|
45
47
|
//# sourceMappingURL=devices-filter-toolbar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devices-filter-toolbar.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-filter-toolbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAkB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAG7E,KAAK,gBAAgB,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AAE3D,MAAM,WAAW,yBAAyB;IACxC,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mEAAmE;IACnE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,kCAAkC;IAClC,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAE9B,mDAAmD;IACnD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACpD,aAAa,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACjD,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"devices-filter-toolbar.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-filter-toolbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAkB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAG7E,KAAK,gBAAgB,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AAE3D,MAAM,WAAW,yBAAyB;IACxC,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mEAAmE;IACnE,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,kCAAkC;IAClC,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAE9B,mDAAmD;IACnD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACpD,aAAa,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACjD,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,cAAc,EACd,IAAI,EACJ,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,iBAAwC,EACxC,MAAa,EACb,UAAU,GACX,EAAE,yBAAyB,+BAuC3B"}
|
|
@@ -19,6 +19,7 @@ function DevicesFilterToolbar({
|
|
|
19
19
|
selectedTags,
|
|
20
20
|
onTagsChange,
|
|
21
21
|
isLoading,
|
|
22
|
+
searchPlaceholder = "Search for Devices",
|
|
22
23
|
sticky = true,
|
|
23
24
|
toolbarRef
|
|
24
25
|
}) {
|
|
@@ -40,7 +41,7 @@ function DevicesFilterToolbar({
|
|
|
40
41
|
onSearchChange,
|
|
41
42
|
onTagRemove,
|
|
42
43
|
onClearAll,
|
|
43
|
-
placeholder:
|
|
44
|
+
placeholder: searchPlaceholder,
|
|
44
45
|
addMorePlaceholder: "Add More..."
|
|
45
46
|
}
|
|
46
47
|
) }),
|
|
@@ -59,6 +59,8 @@ export interface DevicesPanelViewProps<T extends DeviceRow = DeviceRow> {
|
|
|
59
59
|
hideColumns?: string[];
|
|
60
60
|
/** Filter keys to drop from the funnels and the grid row; the column itself stays. */
|
|
61
61
|
hideFilters?: string[];
|
|
62
|
+
/** Adds the USER and SOURCES columns and funnels, for a tenant with directories. Default: neither. */
|
|
63
|
+
directoryColumns?: boolean;
|
|
62
64
|
/** Message shown when the list is empty. */
|
|
63
65
|
emptyMessage?: string;
|
|
64
66
|
/** Drawn instead of the toolbar and the list: the pristine, genuinely empty panel. */
|
|
@@ -86,5 +88,5 @@ export interface DevicesPanelViewProps<T extends DeviceRow = DeviceRow> {
|
|
|
86
88
|
* state is the same component with `loading`: the chrome is the real one,
|
|
87
89
|
* locked, so the page does not move when the rows land.
|
|
88
90
|
*/
|
|
89
|
-
export declare function DevicesPanelView<T extends DeviceRow = DeviceRow>({ title, backButton, className, headerSlot, viewMode, onViewModeChange, actions, devices, loading: loadingGiven, loadingRegion, isNarrowing, totalCount, deviceFilters, filterColumns, toolbar, columnFilters, onColumnFiltersChange, gridFilters, onGridFiltersChange, actionsColumn, hideColumns, hideFilters, emptyMessage, emptyState, noOrganizations, hasNextPage, isFetchingNextPage, onLoadMore, gridSentinelRef, pageSize, }: DevicesPanelViewProps<T>): import("react").JSX.Element;
|
|
91
|
+
export declare function DevicesPanelView<T extends DeviceRow = DeviceRow>({ title, backButton, className, headerSlot, viewMode, onViewModeChange, actions, devices, loading: loadingGiven, loadingRegion, isNarrowing, totalCount, deviceFilters, filterColumns, toolbar, columnFilters, onColumnFiltersChange, gridFilters, onGridFiltersChange, actionsColumn, hideColumns, hideFilters, directoryColumns, emptyMessage, emptyState, noOrganizations, hasNextPage, isFetchingNextPage, onLoadMore, gridSentinelRef, pageSize, }: DevicesPanelViewProps<T>): import("react").JSX.Element;
|
|
90
92
|
//# sourceMappingURL=devices-panel-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devices-panel-view.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-panel-view.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"devices-panel-view.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-panel-view.tsx"],"names":[],"mappings":"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"}
|
|
@@ -57,6 +57,7 @@ function DevicesPanelView({
|
|
|
57
57
|
actionsColumn,
|
|
58
58
|
hideColumns,
|
|
59
59
|
hideFilters,
|
|
60
|
+
directoryColumns = false,
|
|
60
61
|
emptyMessage = "No devices found. Try adjusting your search or filters.",
|
|
61
62
|
emptyState,
|
|
62
63
|
noOrganizations = false,
|
|
@@ -68,9 +69,16 @@ function DevicesPanelView({
|
|
|
68
69
|
}) {
|
|
69
70
|
const scoped = useLoadingScope();
|
|
70
71
|
const loading = scoped || loadingGiven;
|
|
71
|
-
const gridColumns = filterColumns ?? getDeviceFilterColumns(deviceFilters).filter((column) => !hideFilters?.includes(column.key));
|
|
72
|
+
const gridColumns = filterColumns ?? getDeviceFilterColumns(deviceFilters, { directoryColumns }).filter((column) => !hideFilters?.includes(column.key));
|
|
72
73
|
const list = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
73
|
-
/* @__PURE__ */ jsx(
|
|
74
|
+
/* @__PURE__ */ jsx(
|
|
75
|
+
DevicesFilterToolbar,
|
|
76
|
+
{
|
|
77
|
+
...toolbar,
|
|
78
|
+
searchPlaceholder: directoryColumns ? "Search for Devices and Users" : void 0,
|
|
79
|
+
isLoading: loading
|
|
80
|
+
}
|
|
81
|
+
),
|
|
74
82
|
viewMode === "table" ? /* @__PURE__ */ jsx(
|
|
75
83
|
DevicesTableBody,
|
|
76
84
|
{
|
|
@@ -86,6 +94,7 @@ function DevicesPanelView({
|
|
|
86
94
|
onColumnFiltersChange,
|
|
87
95
|
actionsColumn,
|
|
88
96
|
hideColumns,
|
|
97
|
+
directoryColumns,
|
|
89
98
|
disableColumnFilters: hideFilters,
|
|
90
99
|
totalCount: loading ? void 0 : totalCount,
|
|
91
100
|
footerSlot: loading ? void 0 : /* @__PURE__ */ jsx(
|
|
@@ -35,6 +35,8 @@ export interface DevicesTableBodyProps<T extends DeviceRow = DeviceRow> {
|
|
|
35
35
|
actionsColumn?: ColumnDef<T>;
|
|
36
36
|
/** Column ids to drop from the base table columns (e.g. ['organization'] when scoped to a single org). */
|
|
37
37
|
hideColumns?: string[];
|
|
38
|
+
/** Adds the USER and SOURCES columns, for a host whose tenant has directories. Default: neither. */
|
|
39
|
+
directoryColumns?: boolean;
|
|
38
40
|
/** Column ids whose header filter is dropped while the column stays visible (e.g. ['status'] on the archive page). */
|
|
39
41
|
disableColumnFilters?: string[];
|
|
40
42
|
/** The facet query is still in flight, see `getDeviceTableColumns`. */
|
|
@@ -53,12 +55,14 @@ export interface DevicesTableBodyProps<T extends DeviceRow = DeviceRow> {
|
|
|
53
55
|
*/
|
|
54
56
|
showHeader?: boolean;
|
|
55
57
|
}
|
|
56
|
-
export declare function DevicesTableBody<T extends DeviceRow = DeviceRow>({ devices, isLoading, loadingRegion, emptyState, emptyMessage, skeletonRows, stickyHeaderOffset, footerSlot, deviceFilters, columnFilters, onColumnFiltersChange, actionsColumn, hideColumns, disableColumnFilters, filtersPending, totalCount, showHeader, }: DevicesTableBodyProps<T>): React.JSX.Element;
|
|
58
|
+
export declare function DevicesTableBody<T extends DeviceRow = DeviceRow>({ devices, isLoading, loadingRegion, emptyState, emptyMessage, skeletonRows, stickyHeaderOffset, footerSlot, deviceFilters, columnFilters, onColumnFiltersChange, actionsColumn, hideColumns, directoryColumns, disableColumnFilters, filtersPending, totalCount, showHeader, }: DevicesTableBodyProps<T>): React.JSX.Element;
|
|
57
59
|
export interface DeviceFilterColumn {
|
|
58
60
|
key: string;
|
|
59
61
|
label: string;
|
|
60
62
|
filterable?: boolean;
|
|
61
63
|
filterOptions?: DeviceFilterOption[];
|
|
64
|
+
/** Filters in the filter window from `lg` until `xl` too: its column's header has no funnel there. */
|
|
65
|
+
inWindowLgToXl?: boolean;
|
|
62
66
|
}
|
|
63
67
|
/** A device filter dropdown entry: `meta.filter.options` plus the facet count. */
|
|
64
68
|
export interface DeviceFilterOption {
|
|
@@ -67,12 +71,22 @@ export interface DeviceFilterOption {
|
|
|
67
71
|
value: string;
|
|
68
72
|
count?: number;
|
|
69
73
|
}
|
|
70
|
-
|
|
74
|
+
/** The directory columns of a device list: the table and its filter window take the same ones. */
|
|
75
|
+
interface DeviceDirectoryColumnOptions {
|
|
76
|
+
directoryColumns?: boolean;
|
|
77
|
+
roomyDirectory?: boolean;
|
|
78
|
+
}
|
|
79
|
+
export declare function getDeviceFilterColumns(deviceFilters?: DeviceFilters | null, { directoryColumns, roomyDirectory }?: DeviceDirectoryColumnOptions): DeviceFilterColumn[];
|
|
71
80
|
/**
|
|
72
81
|
* @param filtersPending The `deviceFilters` query is in flight, keeps the
|
|
73
82
|
* funnels drawn (inert) rather than growing them when it answers. Absent means
|
|
74
83
|
* these are the final options: an empty one then hides its funnel, which is what
|
|
75
84
|
* a list with no facet source of its own wants.
|
|
85
|
+
* @param options.directoryColumns Adds USER and SOURCES after DEVICE. Off by default: a picker or a tenant with no
|
|
86
|
+
* directories has neither.
|
|
87
|
+
* @param options.roomyDirectory No customer column beside them (one customer's list), so SOURCES shows from `lg`
|
|
88
|
+
* rather than `xl`.
|
|
76
89
|
*/
|
|
77
|
-
export declare function getDeviceTableColumns<T extends DeviceRow = DeviceRow>(deviceFilters?: DeviceFilters | null, filtersPending?: boolean): ColumnDef<T>[];
|
|
90
|
+
export declare function getDeviceTableColumns<T extends DeviceRow = DeviceRow>(deviceFilters?: DeviceFilters | null, filtersPending?: boolean, { directoryColumns, roomyDirectory }?: DeviceDirectoryColumnOptions): ColumnDef<T>[];
|
|
91
|
+
export {};
|
|
78
92
|
//# sourceMappingURL=devices-table-columns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devices-table-columns.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-table-columns.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAmB,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAMjE,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,kBAAkB,EAGvB,KAAK,WAAW,EAChB,KAAK,UAAU,EAMhB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"devices-table-columns.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/devices-table-columns.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAmB,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAMjE,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,kBAAkB,EAGvB,KAAK,WAAW,EAChB,KAAK,UAAU,EAMhB,MAAM,UAAU,CAAC;AAUlB,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAiBxD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACpE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,GAChD,SAAS,CAAC,CAAC,CAAC,CAad;AA4BD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAOnF;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IACpE,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qHAAqH;IACrH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,qBAAqB,CAAC,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACvD,iHAAiH;IACjH,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7B,0GAA0G;IAC1G,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,oGAAoG;IACpG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sHAAsH;IACtH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uEAAuE;IACvE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAQD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,EAChE,OAAO,EACP,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAkC,EAClC,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,WAAW,EACX,gBAAwB,EACxB,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,UAAiB,GAClB,EAAE,qBAAqB,CAAC,CAAC,CAAC,qBAuD1B;AAgED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACrC,sGAAsG;IACtG,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2CD,kGAAkG;AAClG,UAAU,4BAA4B;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAOD,wBAAgB,sBAAsB,CACpC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,EACpC,EAAE,gBAAwB,EAAE,cAAsB,EAAE,GAAE,4BAAiC,GACtF,kBAAkB,EAAE,CAuBtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACnE,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,EACpC,cAAc,CAAC,EAAE,OAAO,EACxB,EAAE,gBAAwB,EAAE,cAAsB,EAAE,GAAE,4BAAiC,GACtF,SAAS,CAAC,CAAC,CAAC,EAAE,CA6GhB"}
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
} from "../../ui/index.js";
|
|
18
18
|
import { DATA_TABLE_SKELETON_ROWS } from "../../ui/data-table/utils.js";
|
|
19
19
|
import { OSTypeBadge } from "../os-type-badge.js";
|
|
20
|
+
import { directorySourceLabel, directoryUserLines, directoryUserLinkLabel } from "./device-directory.js";
|
|
20
21
|
import { getDeviceName } from "./device-name.js";
|
|
21
22
|
import { getDeviceStatusConfig } from "./device-status.js";
|
|
22
23
|
import { DEFAULT_VISIBLE_STATUSES } from "./device-statuses.js";
|
|
@@ -89,6 +90,7 @@ function DevicesTableBody({
|
|
|
89
90
|
onColumnFiltersChange,
|
|
90
91
|
actionsColumn,
|
|
91
92
|
hideColumns,
|
|
93
|
+
directoryColumns = false,
|
|
92
94
|
disableColumnFilters,
|
|
93
95
|
filtersPending,
|
|
94
96
|
totalCount,
|
|
@@ -98,10 +100,14 @@ function DevicesTableBody({
|
|
|
98
100
|
const columns = useMemo(() => {
|
|
99
101
|
const hidden = new Set(hideColumns ?? []);
|
|
100
102
|
const unfiltered = new Set(disableColumnFilters ?? []);
|
|
101
|
-
const base = getDeviceTableColumns(deviceFilters ?? null, filtersPending
|
|
103
|
+
const base = getDeviceTableColumns(deviceFilters ?? null, filtersPending, {
|
|
104
|
+
directoryColumns,
|
|
105
|
+
// Without the customer column there is room for the sources from where the customer's column would have started.
|
|
106
|
+
roomyDirectory: hidden.has("organization")
|
|
107
|
+
}).filter((c) => !c.id || !hidden.has(c.id)).map((c) => c.id && unfiltered.has(c.id) ? { ...c, meta: { ...c.meta, filter: void 0 } } : c);
|
|
102
108
|
const open = getDeviceOpenColumn();
|
|
103
109
|
return actionsColumn ? [...base, actionsColumn, open] : [...base, open];
|
|
104
|
-
}, [deviceFilters, filtersPending, actionsColumn, hideColumns, disableColumnFilters]);
|
|
110
|
+
}, [deviceFilters, filtersPending, actionsColumn, hideColumns, directoryColumns, disableColumnFilters]);
|
|
105
111
|
const loadingRows = useMemo(
|
|
106
112
|
() => isLoading ? deviceLoadingRows(skeletonRows ?? DATA_TABLE_SKELETON_ROWS) : null,
|
|
107
113
|
[isLoading, skeletonRows]
|
|
@@ -155,6 +161,20 @@ function DeviceLastSeen({ lastSeen }) {
|
|
|
155
161
|
if (useLoadingScope() && !lastSeen) return /* @__PURE__ */ jsx(TextLineSkeleton, { type: "h6", className: "hidden w-24 content-md:block" });
|
|
156
162
|
return /* @__PURE__ */ jsx("span", { className: "hidden text-ods-text-secondary text-h6 content-md:flex", children: lastSeen ? formatDateTime(lastSeen) : "Never" });
|
|
157
163
|
}
|
|
164
|
+
function DirectoryUserCell({ device }) {
|
|
165
|
+
const loading = useLoadingScope();
|
|
166
|
+
if (loading && !device.directoryUserLink) {
|
|
167
|
+
return /* @__PURE__ */ jsx(TextLineSkeleton, { type: "h4", className: "w-3/4" });
|
|
168
|
+
}
|
|
169
|
+
const { name, detail } = directoryUserLines(device);
|
|
170
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col justify-center", children: [
|
|
171
|
+
/* @__PURE__ */ jsx(TruncateText, { children: name }),
|
|
172
|
+
detail && /* @__PURE__ */ jsx(TruncateText, { variant: "h6", tone: "secondary", children: detail })
|
|
173
|
+
] });
|
|
174
|
+
}
|
|
175
|
+
function DirectorySourcesCell({ sources }) {
|
|
176
|
+
return /* @__PURE__ */ jsx("div", { "data-loading-optional": true, className: "flex min-w-0 flex-wrap gap-[var(--spacing-system-xxs)]", children: (sources ?? []).map((source) => /* @__PURE__ */ jsx(Tag, { label: directorySourceLabel(source), variant: "grey" }, source)) });
|
|
177
|
+
}
|
|
158
178
|
function buildDeviceFilterOptions(deviceFilters) {
|
|
159
179
|
const status = (deviceFilters?.statuses ?? []).filter((s) => DEFAULT_VISIBLE_STATUSES.includes(s.value)).map((s) => ({ id: s.value, label: getDeviceStatusConfig(s.value).label, value: s.value, count: s.count }));
|
|
160
180
|
const os = (deviceFilters?.osTypes ?? []).map((o) => ({ id: o.value, label: o.value, value: o.value, count: o.count }));
|
|
@@ -166,26 +186,74 @@ function buildDeviceFilterOptions(deviceFilters) {
|
|
|
166
186
|
count: org.count
|
|
167
187
|
}))
|
|
168
188
|
);
|
|
169
|
-
|
|
189
|
+
const user = (deviceFilters?.userLinks ?? []).map((link) => ({
|
|
190
|
+
id: link.value,
|
|
191
|
+
label: directoryUserLinkLabel(link.value),
|
|
192
|
+
value: link.value,
|
|
193
|
+
count: link.count
|
|
194
|
+
}));
|
|
195
|
+
const sources = (deviceFilters?.directorySources ?? []).map((source) => ({
|
|
196
|
+
id: source.value,
|
|
197
|
+
label: directorySourceLabel(source.value),
|
|
198
|
+
value: source.value,
|
|
199
|
+
count: source.count
|
|
200
|
+
}));
|
|
201
|
+
return { status, os, organization, user, sources };
|
|
170
202
|
}
|
|
171
|
-
function getDeviceFilterColumns(deviceFilters) {
|
|
203
|
+
function getDeviceFilterColumns(deviceFilters, { directoryColumns = false, roomyDirectory = false } = {}) {
|
|
172
204
|
const options = buildDeviceFilterOptions(deviceFilters);
|
|
173
205
|
return [
|
|
174
206
|
{
|
|
175
207
|
key: "device",
|
|
176
208
|
label: "DEVICE"
|
|
177
209
|
},
|
|
210
|
+
...directoryColumns ? [
|
|
211
|
+
{ key: "user", label: "USER", filterable: true, filterOptions: options.user },
|
|
212
|
+
{
|
|
213
|
+
key: "sources",
|
|
214
|
+
label: "SOURCES",
|
|
215
|
+
filterable: true,
|
|
216
|
+
filterOptions: options.sources,
|
|
217
|
+
inWindowLgToXl: !roomyDirectory
|
|
218
|
+
}
|
|
219
|
+
] : [],
|
|
178
220
|
{ key: "status", label: "STATUS", filterable: true, filterOptions: options.status },
|
|
179
221
|
{ key: "os", label: "OS", filterable: true, filterOptions: options.os },
|
|
180
222
|
{ key: "organization", label: "CUSTOMER", filterable: true, filterOptions: options.organization }
|
|
181
223
|
];
|
|
182
224
|
}
|
|
183
|
-
function getDeviceTableColumns(deviceFilters, filtersPending) {
|
|
225
|
+
function getDeviceTableColumns(deviceFilters, filtersPending, { directoryColumns = false, roomyDirectory = false } = {}) {
|
|
184
226
|
const {
|
|
185
227
|
status: statusFilterOptions,
|
|
186
228
|
os: osFilterOptions,
|
|
187
|
-
organization: orgFilterOptions
|
|
229
|
+
organization: orgFilterOptions,
|
|
230
|
+
user: userFilterOptions,
|
|
231
|
+
sources: sourcesFilterOptions
|
|
188
232
|
} = buildDeviceFilterOptions(deviceFilters);
|
|
233
|
+
const directory = directoryColumns ? [
|
|
234
|
+
{
|
|
235
|
+
id: "user",
|
|
236
|
+
header: "USER",
|
|
237
|
+
cell: ({ row }) => /* @__PURE__ */ jsx(DirectoryUserCell, { device: row.original }),
|
|
238
|
+
enableSorting: false,
|
|
239
|
+
meta: {
|
|
240
|
+
width: "min-w-0 content-lg:w-[15%]",
|
|
241
|
+
hideAt: "lg",
|
|
242
|
+
filter: { options: userFilterOptions, pending: filtersPending }
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
id: "sources",
|
|
247
|
+
header: "SOURCES",
|
|
248
|
+
cell: ({ row }) => /* @__PURE__ */ jsx(DirectorySourcesCell, { sources: row.original.directorySources }),
|
|
249
|
+
enableSorting: false,
|
|
250
|
+
meta: {
|
|
251
|
+
width: "min-w-0 content-lg:w-[11%]",
|
|
252
|
+
hideAt: roomyDirectory ? "lg" : "xl",
|
|
253
|
+
filter: { options: sourcesFilterOptions, pending: filtersPending }
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
] : [];
|
|
189
257
|
return [
|
|
190
258
|
{
|
|
191
259
|
accessorKey: "device",
|
|
@@ -199,8 +267,10 @@ function getDeviceTableColumns(deviceFilters, filtersPending) {
|
|
|
199
267
|
/* @__PURE__ */ jsx(DeviceUnreadIndicator, { device })
|
|
200
268
|
] });
|
|
201
269
|
},
|
|
202
|
-
|
|
270
|
+
// The name takes what the other columns leave: with two more of them, their shares below shrink to leave some.
|
|
271
|
+
meta: { width: directoryColumns ? "flex-1 min-w-0" : "flex-1 content-md:w-1/4" }
|
|
203
272
|
},
|
|
273
|
+
...directory,
|
|
204
274
|
{
|
|
205
275
|
accessorKey: "status",
|
|
206
276
|
id: "status",
|
|
@@ -214,7 +284,7 @@ function getDeviceTableColumns(deviceFilters, filtersPending) {
|
|
|
214
284
|
] });
|
|
215
285
|
},
|
|
216
286
|
meta: {
|
|
217
|
-
width: "w-auto shrink-0 content-md:w-1/5",
|
|
287
|
+
width: directoryColumns ? "w-auto shrink-0 content-md:w-[14%]" : "w-auto shrink-0 content-md:w-1/5",
|
|
218
288
|
// Declared unconditionally, empty options and all. `meta.filter` is what
|
|
219
289
|
// keeps a header cell visible below `lg`, so dropping it until the
|
|
220
290
|
// options query resolves made every header on a tablet disappear on
|
|
@@ -229,7 +299,7 @@ function getDeviceTableColumns(deviceFilters, filtersPending) {
|
|
|
229
299
|
header: "OS",
|
|
230
300
|
cell: ({ row }) => /* @__PURE__ */ jsx(OSTypeBadge, { osType: row.original.osType, iconSize: "w-4 h-4 content-md:w-6 content-md:h-6" }),
|
|
231
301
|
meta: {
|
|
232
|
-
width: "w-[200px] content-md:w-1/6",
|
|
302
|
+
width: directoryColumns ? "w-[200px] content-md:w-[10%]" : "w-[200px] content-md:w-1/6",
|
|
233
303
|
hideAt: "md",
|
|
234
304
|
filter: { options: osFilterOptions, pending: filtersPending }
|
|
235
305
|
}
|
|
@@ -240,7 +310,7 @@ function getDeviceTableColumns(deviceFilters, filtersPending) {
|
|
|
240
310
|
header: "CUSTOMER",
|
|
241
311
|
cell: ({ row }) => /* @__PURE__ */ jsx(OrganizationCell, { device: row.original }),
|
|
242
312
|
meta: {
|
|
243
|
-
width: "w-1/6",
|
|
313
|
+
width: directoryColumns ? "w-[14%]" : "w-1/6",
|
|
244
314
|
hideAt: "lg",
|
|
245
315
|
filter: { options: orgFilterOptions, placement: "bottom-end", pending: filtersPending }
|
|
246
316
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { type DeviceDirectorySource, type DeviceDirectoryUserLink, directorySourceLabel, directoryUserLines, directoryUserLinkLabel, } from './device-directory';
|
|
1
2
|
export { formatLastOnline } from './device-last-online';
|
|
2
3
|
export { type DeviceNameSource, getDeviceName, matchesDeviceName } from './device-name';
|
|
3
4
|
export { DeviceSelectionModeRadio, type DeviceSelectionModeRadioProps, } from './device-selector/device-selection-mode-radio';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,GACP,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,EACxB,KAAK,oBAAoB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,KAAK,YAAY,EACjB,sBAAsB,EACtB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,uBAAuB,EACvB,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/devices/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EACL,wBAAwB,EACxB,KAAK,6BAA6B,GACnC,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,YAAY,EACV,mBAAmB,EACnB,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,MAAM,GACP,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,wBAAwB,EACxB,KAAK,oBAAoB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,KAAK,YAAY,EACjB,sBAAsB,EACtB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,uBAAuB,EACvB,UAAU,GACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import {
|
|
2
|
+
directorySourceLabel,
|
|
3
|
+
directoryUserLines,
|
|
4
|
+
directoryUserLinkLabel
|
|
5
|
+
} from "./device-directory.js";
|
|
1
6
|
import { formatLastOnline } from "./device-last-online.js";
|
|
2
7
|
import { getDeviceName, matchesDeviceName } from "./device-name.js";
|
|
3
8
|
import {
|
|
@@ -77,6 +82,9 @@ export {
|
|
|
77
82
|
HIDDEN_DEVICE_STATUSES,
|
|
78
83
|
IDLE_DEVICES_TOOLBAR,
|
|
79
84
|
buildDevicePanelActions,
|
|
85
|
+
directorySourceLabel,
|
|
86
|
+
directoryUserLines,
|
|
87
|
+
directoryUserLinkLabel,
|
|
80
88
|
formatLastOnline,
|
|
81
89
|
getDeviceActionsColumn,
|
|
82
90
|
getDeviceFilterColumns,
|