@flamingo-stack/openframe-frontend-core 0.0.853 → 0.0.855
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/{case-study-card-WP5Z234Q.cjs → case-study-card-6VAMNHLU.cjs} +8 -8
- package/dist/{chunk-2W22LY3W.cjs → chunk-2JCA7BRK.cjs} +19 -19
- package/dist/{chunk-53QPG7SJ.cjs → chunk-2MCPK6AX.cjs} +28 -28
- package/dist/{chunk-QOW2GP3V.cjs → chunk-2P72KAG5.cjs} +23 -23
- package/dist/{chunk-NMWLXHFH.cjs → chunk-3GJ75OUL.cjs} +183 -183
- package/dist/{chunk-P63CRPWI.cjs → chunk-4H3J57AN.cjs} +25 -25
- package/dist/{chunk-6GWRPW6B.cjs → chunk-5NK3FUHY.cjs} +4 -4
- package/dist/{chunk-DLTPSP5F.cjs → chunk-5TYG5JNB.cjs} +2 -2
- package/dist/{chunk-EIACEY2L.cjs → chunk-65NMKAPQ.cjs} +12 -12
- package/dist/{chunk-IGVAPIEW.cjs → chunk-6C4OR4MZ.cjs} +2 -2
- package/dist/{chunk-GG466XFQ.cjs → chunk-6DMH4GXN.cjs} +30 -5
- package/dist/{chunk-EF2FZ7GT.cjs → chunk-6VVQJU76.cjs} +54 -54
- package/dist/{chunk-G7GF4PWA.cjs → chunk-77GX573I.cjs} +9 -9
- package/dist/{chunk-7RZHSBNX.cjs → chunk-AOOHJLXS.cjs} +90 -90
- package/dist/{chunk-O3EKOXFZ.cjs → chunk-AYMY2VNB.cjs} +37 -43
- package/dist/{chunk-67CZ2Q5K.cjs → chunk-BSPIGZCC.cjs} +36 -36
- package/dist/{chunk-FW7RKWPY.cjs → chunk-D6GEMVHD.cjs} +3 -3
- package/dist/{chunk-KEV6F3QN.cjs → chunk-DPNFI5XM.cjs} +100 -100
- package/dist/{chunk-6V2M2X3M.cjs → chunk-DTZ6KASI.cjs} +6 -6
- package/dist/{chunk-SSKMGH5O.cjs → chunk-DXVGGWLG.cjs} +10 -10
- package/dist/{chunk-IO6NN3SL.cjs → chunk-EOUEUYCQ.cjs} +54 -54
- package/dist/{chunk-5RMBLOJ5.cjs → chunk-ESGE7CUX.cjs} +14 -14
- package/dist/{chunk-ETZFBB7O.cjs → chunk-EXQSIX2I.cjs} +4 -4
- package/dist/{chunk-IC4IJJB2.cjs → chunk-F33EAPD2.cjs} +124 -124
- package/dist/{chunk-COWMXUHN.cjs → chunk-GK577ZLJ.cjs} +6 -14
- package/dist/{chunk-E4MFQKPC.cjs → chunk-GZYRDLJW.cjs} +103 -103
- package/dist/{chunk-LFEURIZN.cjs → chunk-HML3JUXF.cjs} +324 -322
- package/dist/{chunk-BNHTBLAG.cjs → chunk-J3CFRGZ2.cjs} +17 -17
- package/dist/{chunk-USPUZO53.cjs → chunk-KZAQPRTA.cjs} +9 -11
- package/dist/{chunk-HTYJUMFB.cjs → chunk-LSLRJJFP.cjs} +2 -2
- package/dist/{chunk-TBGQMHCG.cjs → chunk-MINFN3IG.cjs} +8 -8
- package/dist/{chunk-KHOB3TES.cjs → chunk-MX52LZ6M.cjs} +6 -6
- package/dist/{chunk-OH5TXFRR.cjs → chunk-O4CPT3RK.cjs} +7 -7
- package/dist/{chunk-HF3V6WBJ.cjs → chunk-OTHQ2KQW.cjs} +3 -3
- package/dist/{chunk-IUDBG3HJ.cjs → chunk-PCQ2HKU3.cjs} +5 -5
- package/dist/{chunk-BNG6JOGZ.cjs → chunk-QPHXYE5P.cjs} +27 -27
- package/dist/{chunk-UO2EJGRJ.cjs → chunk-QZXCUY36.cjs} +53 -53
- package/dist/{chunk-COJG2ATY.cjs → chunk-RIJU4HZ2.cjs} +51 -55
- package/dist/{chunk-KKFDRCQF.cjs → chunk-RY7INTYU.cjs} +14 -1
- package/dist/{chunk-GI3MMBP3.cjs → chunk-SQ7YHWEP.cjs} +228 -15
- package/dist/{chunk-U767P4JU.cjs → chunk-STV6VJ3U.cjs} +21 -21
- package/dist/chunk-T54I5ZZY.cjs +62 -0
- package/dist/{chunk-UV45EPXN.cjs → chunk-TW5Y4D5I.cjs} +7 -7
- package/dist/{chunk-FX35L4Y6.cjs → chunk-XCQ5I27Z.cjs} +3 -3
- package/dist/{chunk-AZEO7HBB.cjs → chunk-Y44EF4JW.cjs} +2 -2
- package/dist/{chunk-W7OFAROY.cjs → chunk-YSXVRTGT.cjs} +9 -12
- package/dist/{chunk-GI6ECCWB.cjs → chunk-ZUGJLCYP.cjs} +1272 -856
- package/dist/{chunk-KNN2GCMW.cjs → chunk-ZYAVIRQV.cjs} +25 -25
- package/dist/{cloud-tenants-QUL2XPAS.cjs → cloud-tenants-2XFIDDGU.cjs} +28 -29
- package/dist/components/case-studies/index.cjs +44 -45
- package/dist/components/chat/chat-message-row.d.ts +1 -1
- package/dist/components/chat/chat-message-row.d.ts.map +1 -1
- package/dist/components/chat/chat-message-row.js +4 -4
- package/dist/components/chat/entity-cards/use-cover-image-fallback.d.ts +7 -13
- package/dist/components/chat/entity-cards/use-cover-image-fallback.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/use-cover-image-fallback.js +2 -8
- package/dist/components/chat/hooks/use-chat-attachment-image-gallery.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-chat-attachment-image-gallery.js +8 -4
- package/dist/components/chat/index.cjs +22 -23
- package/dist/components/contact/index.cjs +29 -30
- package/dist/components/docs/index.cjs +32 -33
- package/dist/components/embeds/index.cjs +29 -30
- package/dist/components/faq/index.cjs +30 -31
- 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 +42 -29
- package/dist/components/help-center-pages/index.cjs +134 -135
- package/dist/components/index.cjs +126 -113
- package/dist/components/meeting-scheduler/index.cjs +102 -103
- package/dist/components/navigation/app-layout.js +2 -2
- package/dist/components/navigation/index.cjs +31 -32
- package/dist/components/onboarding-guides/index.cjs +31 -32
- package/dist/components/product-demo/index.cjs +39 -40
- package/dist/components/related-content/index.cjs +16 -17
- package/dist/components/tickets/index.cjs +35 -36
- 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/entity-image.d.ts +1 -2
- package/dist/components/ui/entity-image.d.ts.map +1 -1
- package/dist/components/ui/entity-image.js +4 -8
- package/dist/components/ui/index.cjs +28 -29
- package/dist/components/ui/markdown/base-components.d.ts +0 -13
- package/dist/components/ui/markdown/base-components.d.ts.map +1 -1
- package/dist/components/ui/markdown/base-components.js +7 -7
- package/dist/components/ui/square-avatar.d.ts.map +1 -1
- package/dist/components/ui/square-avatar.js +3 -8
- package/dist/{devices-LNB4CYPP.cjs → devices-O3DYGIZB.cjs} +29 -30
- package/dist/embed-shims/index.cjs +3 -2
- package/dist/embed-shims/next-image.cjs +3 -2
- package/dist/embed-shims/next-image.d.ts +2 -0
- package/dist/embed-shims/next-image.d.ts.map +1 -1
- package/dist/embed-shims/next-image.js +14 -4
- package/dist/{embeddable-chat-SJEEJI4N.cjs → embeddable-chat-QD7NFD2H.cjs} +100 -101
- package/dist/hooks/index.cjs +27 -16
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- 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/hooks/use-authed-asset-src.d.ts +77 -2
- package/dist/hooks/use-authed-asset-src.d.ts.map +1 -1
- package/dist/hooks/use-authed-asset-src.js +185 -73
- package/dist/hooks/use-authed-image-src.d.ts +11 -4
- package/dist/hooks/use-authed-image-src.d.ts.map +1 -1
- package/dist/hooks/use-authed-image-src.js +6 -2
- package/dist/hooks/use-image-fallback.d.ts +16 -0
- package/dist/hooks/use-image-fallback.d.ts.map +1 -0
- package/dist/hooks/use-image-fallback.js +14 -0
- package/dist/index.cjs +58 -36
- package/dist/{knowledge-UTWKB6XG.cjs → knowledge-K7AFNZNO.cjs} +29 -30
- package/dist/{logs-PMXIWMBQ.cjs → logs-MZ3BR2FR.cjs} +35 -36
- package/dist/{policies-6DCMFDL7.cjs → policies-XVKQ2W7S.cjs} +32 -33
- package/dist/{remote-session-SG44CNOK.cjs → remote-session-VOZJXDM4.cjs} +13 -14
- package/dist/{scripts-2G7LXW7Z.cjs → scripts-IBPMBS6G.cjs} +35 -36
- package/dist/{software-update-MYLKHDHC.cjs → software-update-PXTANMAO.cjs} +32 -33
- package/dist/{tickets-board-SQY2Y6QV.cjs → tickets-board-POYZS7BW.cjs} +16 -17
- package/dist/utils/app-origins.d.ts +3 -6
- package/dist/utils/app-origins.d.ts.map +1 -1
- package/dist/utils/app-origins.js +8 -1
- package/dist/utils/embed-authed-fetch.d.ts +46 -26
- package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
- package/dist/utils/embed-authed-fetch.js +24 -8
- package/dist/utils/index.cjs +4 -1
- 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/dist/{video-file-player-XMOB234V.cjs → video-file-player-RIOT24NT.cjs} +3 -4
- package/package.json +1 -1
- package/src/components/chat/chat-message-row.tsx +8 -7
- package/src/components/chat/entity-cards/use-cover-image-fallback.ts +8 -28
- package/src/components/chat/hooks/use-chat-attachment-image-gallery.tsx +19 -8
- 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/components/ui/entity-image.tsx +4 -12
- package/src/components/ui/markdown/base-components.tsx +15 -20
- package/src/components/ui/square-avatar.tsx +5 -8
- package/src/embed-shims/next-image.tsx +34 -3
- package/src/hooks/index.ts +1 -0
- package/src/hooks/ui/use-content-breakpoint.ts +21 -2
- package/src/hooks/ui/use-media-query.ts +1 -0
- package/src/hooks/use-authed-asset-src.ts +323 -107
- package/src/hooks/use-authed-image-src.ts +15 -5
- package/src/hooks/use-image-fallback.ts +31 -0
- package/src/utils/app-origins.ts +12 -7
- package/src/utils/embed-authed-fetch.ts +71 -32
- package/src/utils/presentation-for.ts +10 -0
- package/dist/chunk-UAI4VMEF.cjs +0 -46
- package/dist/chunk-YSDB6HGQ.cjs +0 -102
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export interface
|
|
1
|
+
/** A customer a tenant's directory serves. */
|
|
2
|
+
export interface TenantCustomer {
|
|
3
|
+
name: string;
|
|
4
|
+
/** A URL the browser can load as is. */
|
|
5
|
+
imageUrl?: string | null;
|
|
6
|
+
}
|
|
7
|
+
/** A directory's seats over its paid SKUs. */
|
|
8
|
+
export interface TenantLicenseSummary {
|
|
9
|
+
assigned: number;
|
|
10
|
+
/** Absent when the provider does not report purchased seats (Google Workspace). */
|
|
11
|
+
purchased?: number | null;
|
|
12
|
+
/** Purchased minus assigned; negative when the provider counts suspended seats as assigned. */
|
|
13
|
+
unused?: number | null;
|
|
14
|
+
}
|
|
15
|
+
interface TenantRowBase {
|
|
3
16
|
id: string;
|
|
4
17
|
/** The tenant's own name in its directory. */
|
|
5
18
|
name: string;
|
|
6
19
|
/** The directory provider (`MICROSOFT_365`, `GOOGLE_WORKSPACE`); an unknown value keeps its raw name. */
|
|
7
20
|
provider: string;
|
|
8
21
|
domain?: string | null;
|
|
9
|
-
/** The customer the tenant belongs to. */
|
|
10
|
-
customer: {
|
|
11
|
-
name: string;
|
|
12
|
-
/** A URL the browser can load as is. */
|
|
13
|
-
imageUrl?: string | null;
|
|
14
|
-
};
|
|
15
22
|
/** Users read from the directory; absent before the first read. */
|
|
16
23
|
userCount?: number | null;
|
|
17
24
|
/** What the last access probe found (`WRITE_ENABLED`, `DISCONNECTED`, ...). */
|
|
@@ -19,4 +26,24 @@ export interface TenantRow {
|
|
|
19
26
|
/** When the directory was last read; absent when it never was. */
|
|
20
27
|
lastReadAt?: string | null;
|
|
21
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* A tenant of the single-customer list, `TenantsTableView`'s default variant, which accepts no other row: a
|
|
31
|
+
* multi-customer host that forgets `variant` does not compile. Deleted with that variant.
|
|
32
|
+
*/
|
|
33
|
+
export interface TenantRow extends TenantRowBase {
|
|
34
|
+
/** The customer the tenant belongs to. */
|
|
35
|
+
customer: TenantCustomer;
|
|
36
|
+
}
|
|
37
|
+
/** A tenant of the multi-customer list (`variant="multi-customer"`): a directory serving any number of customers. */
|
|
38
|
+
export interface MultiCustomerTenantRow extends TenantRowBase {
|
|
39
|
+
/** The customers the directory serves, in the order the host shows them; empty while it serves none. */
|
|
40
|
+
customers: readonly TenantCustomer[];
|
|
41
|
+
/** Of the users read, the users no customer's rule claims; absent before the first read. */
|
|
42
|
+
unattributedUserCount?: number | null;
|
|
43
|
+
/** A person paused the sync: the row says so instead of when it was last read. */
|
|
44
|
+
syncPaused?: boolean;
|
|
45
|
+
/** Absent until the licence numbers have been read. */
|
|
46
|
+
licenses?: TenantLicenseSummary | null;
|
|
47
|
+
}
|
|
48
|
+
export {};
|
|
22
49
|
//# sourceMappingURL=tenant-row.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-row.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenant-row.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"tenant-row.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenant-row.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,yGAAyG;IACzG,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,0CAA0C;IAC1C,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,qHAAqH;AACrH,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,wGAAwG;IACxG,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,4FAA4F;IAC5F,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,kFAAkF;IAClF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACxC"}
|
|
@@ -8,8 +8,9 @@ export interface TenantsTableColumn {
|
|
|
8
8
|
align?: 'right';
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Column layout of the tenants list (Figma
|
|
12
|
-
*
|
|
11
|
+
* Column layout of the tenants list (Figma 3025-3536: Tenant, Customers, Licences, Access, open). A tablet drops the
|
|
12
|
+
* licence cells and keeps the funnel (3032-4579); a phone keeps the tenant, the access tag and open (3033-9343).
|
|
13
|
+
* Data-only on purpose: the live table and the route skeleton
|
|
13
14
|
* read the SAME widths, so nothing shifts when the rows arrive, and a skeleton
|
|
14
15
|
* never imports the table's cell renderers.
|
|
15
16
|
*/
|
|
@@ -25,6 +26,12 @@ export declare const TENANT_COLUMNS: {
|
|
|
25
26
|
width: string;
|
|
26
27
|
hideAt: "md";
|
|
27
28
|
};
|
|
29
|
+
licenses: {
|
|
30
|
+
id: string;
|
|
31
|
+
header: string;
|
|
32
|
+
width: string;
|
|
33
|
+
hideAt: "lg";
|
|
34
|
+
};
|
|
28
35
|
access: {
|
|
29
36
|
id: string;
|
|
30
37
|
header: string;
|
|
@@ -33,7 +40,6 @@ export declare const TENANT_COLUMNS: {
|
|
|
33
40
|
open: {
|
|
34
41
|
id: string;
|
|
35
42
|
width: string;
|
|
36
|
-
hideAt: "md";
|
|
37
43
|
align: "right";
|
|
38
44
|
};
|
|
39
45
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenants-table-columns.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenants-table-columns.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED
|
|
1
|
+
{"version":3,"file":"tenants-table-columns.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenants-table-columns.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMmB,CAAC;AAE/C,2CAA2C;AAC3C,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAM9D,CAAC"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
const TENANT_COLUMNS = {
|
|
3
3
|
tenant: { id: "tenant", header: "Tenant", width: "flex-1 min-w-0" },
|
|
4
|
-
customer: { id: "customer", header: "Customers", width: "w-[220px] content-lg:w-[
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
customer: { id: "customer", header: "Customers", width: "w-[220px] content-lg:w-[280px]", hideAt: "md" },
|
|
5
|
+
licenses: { id: "licenses", header: "Licences", width: "w-[150px]", hideAt: "lg" },
|
|
6
|
+
access: { id: "access", header: "Access", width: "flex-none content-md:w-[200px] content-lg:w-[216px]" },
|
|
7
|
+
open: { id: "open", width: "w-12 shrink-0 flex-none", align: "right" }
|
|
7
8
|
};
|
|
8
9
|
const TENANTS_TABLE_COLUMNS = [
|
|
9
10
|
TENANT_COLUMNS.tenant,
|
|
10
11
|
TENANT_COLUMNS.customer,
|
|
12
|
+
TENANT_COLUMNS.licenses,
|
|
11
13
|
TENANT_COLUMNS.access,
|
|
12
14
|
TENANT_COLUMNS.open
|
|
13
15
|
];
|
|
@@ -1,14 +1,32 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type DataTableFilterOption } from '../../ui/data-table';
|
|
2
|
+
import { type SingleCustomerTenantsTableViewProps } from './single-customer-tenants-table-view';
|
|
3
|
+
import type { MultiCustomerTenantRow } from './tenant-row';
|
|
4
|
+
/** The columns whose header carries a funnel (Figma 3036-4860). */
|
|
5
|
+
export declare const TENANTS_TABLE_FILTER_COLUMNS: readonly ["tenant", "customer", "licenses", "access"];
|
|
6
|
+
export type TenantsTableFilterColumn = (typeof TENANTS_TABLE_FILTER_COLUMNS)[number];
|
|
7
|
+
/** Each column's funnel: what it offers, what is ticked. The host narrows the rows; the view only draws. */
|
|
8
|
+
export interface TenantsTableFilters {
|
|
9
|
+
/** A column the host leaves out has no funnel; one with no options draws its bare label. */
|
|
10
|
+
options: Partial<Record<TenantsTableFilterColumn, DataTableFilterOption[]>>;
|
|
11
|
+
selections: Readonly<Record<TenantsTableFilterColumn, readonly string[]>>;
|
|
12
|
+
onChange: (next: Record<TenantsTableFilterColumn, string[]>) => void;
|
|
13
|
+
/** The options are in flight: the funnels draw, inert. */
|
|
14
|
+
pending?: boolean;
|
|
15
|
+
}
|
|
2
16
|
/**
|
|
3
17
|
* Click handler that opens `href` in a new tab. The row is itself the details
|
|
4
18
|
* link and an `<a>` cannot be nested in an `<a>`, so the button opens it by script.
|
|
5
19
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
20
|
+
interface MultiCustomerTenantsTableViewProps {
|
|
21
|
+
/** A directory per row that serves any number of customers, with its licences and the column funnels. */
|
|
22
|
+
variant: 'multi-customer';
|
|
23
|
+
rows: MultiCustomerTenantRow[];
|
|
8
24
|
/** Where a row leads: the row is a link to it, and its last cell opens it in a new tab. */
|
|
9
|
-
getHref: (row:
|
|
25
|
+
getHref: (row: MultiCustomerTenantRow) => string;
|
|
10
26
|
/** The search the rows answer; named by the "no match" message. */
|
|
11
27
|
search?: string;
|
|
28
|
+
/** The funnels of the column headers. Absent: none, as on the product page. */
|
|
29
|
+
filters?: TenantsTableFilters;
|
|
12
30
|
/** The rows on screen are the previous result of a search still loading: they dim. */
|
|
13
31
|
isPending?: boolean;
|
|
14
32
|
/** All matching tenants, loaded or not. Default: the rows given. */
|
|
@@ -21,6 +39,9 @@ export interface TenantsTableViewProps {
|
|
|
21
39
|
/** The clock "Last read" is relative to. Default: the moment of the render. */
|
|
22
40
|
now?: Date;
|
|
23
41
|
}
|
|
24
|
-
/** The
|
|
25
|
-
export
|
|
42
|
+
/** The single-customer list unless `variant` is 'multi-customer', the one that takes funnels and needs its own rows. */
|
|
43
|
+
export type TenantsTableViewProps = SingleCustomerTenantsTableViewProps | MultiCustomerTenantsTableViewProps;
|
|
44
|
+
/** The tenants list, in the layout its `variant` names. */
|
|
45
|
+
export declare function TenantsTableView(props: TenantsTableViewProps): import("react").JSX.Element;
|
|
46
|
+
export {};
|
|
26
47
|
//# sourceMappingURL=tenants-table-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenants-table-view.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenants-table-view.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tenants-table-view.d.ts","sourceRoot":"","sources":["../../../../src/components/features/cloud-tenants/tenants-table-view.tsx"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,qBAAqB,EAI3B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEL,KAAK,mCAAmC,EACzC,MAAM,sCAAsC,CAAC;AAK9C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAmC3D,mEAAmE;AACnE,eAAO,MAAM,4BAA4B,uDAAwD,CAAC;AAElG,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAErF,4GAA4G;AAC5G,MAAM,WAAW,mBAAmB;IAClC,4FAA4F;IAC5F,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;IAC5E,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,wBAAwB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,wBAAwB,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IACrE,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,UAAU,kCAAkC;IAC1C,yGAAyG;IACzG,OAAO,EAAE,gBAAgB,CAAC;IAC1B,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,2FAA2F;IAC3F,OAAO,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,MAAM,CAAC;IACjD,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,sFAAsF;IACtF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,wHAAwH;AACxH,MAAM,MAAM,qBAAqB,GAAG,mCAAmC,GAAG,kCAAkC,CAAC;AAE7G,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,+BAM5D"}
|
|
@@ -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":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,kBAAkB,EAEvB,KAAK,UAAU,EACf,KAAK,gBAAgB,EAGtB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAwB,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAIhG,OAAO,EAAoB,KAAK,kBAAkB,EAA0B,MAAM,yBAAyB,CAAC;AAC5G,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAExD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC;AAO/C,+FAA+F;AAC/F,eAAO,MAAM,oBAAoB,EAAE,yBAclC,CAAC;AAEF,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS;IACpE,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB,QAAQ,EAAE,eAAe,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACnD,qDAAqD;IACrD,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE7B,oFAAoF;IACpF,OAAO,EAAE,CAAC,EAAE,CAAC;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mGAAmG;IACnG,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,mFAAmF;IACnF,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,gHAAgH;IAChH,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACrC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,kCAAkC;IAClC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,qBAAqB,CAAC,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACvD,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAElE,4DAA4D;IAC5D,aAAa,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7B,2FAA2F;IAC3F,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,sGAAsG;IACtG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACnD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,EAChE,KAAiB,EACjB,UAAU,EACV,SAAc,EACd,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,OAAO,EACP,OAAO,EAAE,YAAoB,EAC7B,aAAoB,EACpB,WAAmB,EACnB,UAAU,EACV,aAAoB,EACpB,aAAa,EACb,OAA8B,EAC9B,aAAa,EACb,qBAAqB,EACrB,WAAwB,EACxB,mBAA0B,EAC1B,aAAa,EACb,WAAW,EACX,WAAW,EACX,gBAAwB,EACxB,YAAwE,EACxE,UAAU,EACV,eAAuB,EACvB,WAAmB,EACnB,kBAA0B,EAC1B,UAAiB,EACjB,eAAe,EACf,QAAQ,GACT,EAAE,qBAAqB,CAAC,CAAC,CAAC,+BA8H1B"}
|
|
@@ -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":"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"}
|