|
3 | 3 | import { Container } from '$lib/layout'; |
4 | 4 | import DualTimeView from '$lib/components/dualTimeView.svelte'; |
5 | 5 | import type { Models } from '@appwrite.io/console'; |
6 | | - import { Layout, Table, Card, Empty } from '@appwrite.io/pink-svelte'; |
| 6 | + import { Layout, Table, Card, Empty, InteractiveText } from '@appwrite.io/pink-svelte'; |
7 | 7 | import Button from '$lib/elements/forms/button.svelte'; |
8 | 8 | import type { PinkColumn } from '$lib/helpers/types'; |
9 | 9 |
|
|
14 | 14 | export let databasesScreen = false; |
15 | 15 | export let useCreateLinkForPagination = true; |
16 | 16 |
|
| 17 | + function getColumnWidth(columnId: string): Pick<PinkColumn, 'width'> { |
| 18 | + const widthConfig: Record< |
| 19 | + string, |
| 20 | + { insideSheet: number | { min: number }; default: number | { min: number } } |
| 21 | + > = { |
| 22 | + user: { insideSheet: 140, default: { min: 100 } }, |
| 23 | + event: { insideSheet: 125, default: { min: 160 } }, |
| 24 | + location: { insideSheet: 100, default: { min: 120 } }, |
| 25 | + ip: { insideSheet: { min: 150 }, default: { min: 250 } }, |
| 26 | + date: { insideSheet: { min: 200 }, default: { min: 180 } } |
| 27 | + }; |
| 28 | +
|
| 29 | + const config = widthConfig[columnId]; |
| 30 | + if (!config) { |
| 31 | + return {}; |
| 32 | + } |
| 33 | +
|
| 34 | + return { width: insideSideSheet ? config.insideSheet : config.default }; |
| 35 | + } |
| 36 | +
|
17 | 37 | const columns: PinkColumn[] = [ |
18 | | - { id: 'user', ...(insideSideSheet ? { width: 140 } : {}) }, |
19 | | - { id: 'event', ...(insideSideSheet ? { width: 125 } : {}) }, |
20 | | - { id: 'location', ...(insideSideSheet ? { width: 100 } : {}) }, |
21 | | - { id: 'ip', ...(insideSideSheet ? { width: { min: 150 } } : {}) }, |
22 | | - { id: 'date', ...(insideSideSheet ? { width: { min: 200 } } : {}) } |
| 38 | + { id: 'user', ...getColumnWidth('user') }, |
| 39 | + { id: 'event', ...getColumnWidth('event') }, |
| 40 | + { id: 'location', ...getColumnWidth('location') }, |
| 41 | + { id: 'ip', ...getColumnWidth('ip') }, |
| 42 | + { id: 'date', ...getColumnWidth('date') } |
23 | 43 | ]; |
24 | 44 | </script> |
25 | 45 |
|
|
29 | 49 | expanded={databasesScreen && !insideSideSheet} |
30 | 50 | slotSpacing={databasesScreen && !insideSideSheet}> |
31 | 51 | {#if logs.total} |
32 | | - <div> |
33 | | - <Table.Root {columns} let:root> |
34 | | - <svelte:fragment slot="header" let:root> |
35 | | - <Table.Header.Cell column="user" {root}>User</Table.Header.Cell> |
36 | | - <Table.Header.Cell column="event" {root}>Event</Table.Header.Cell> |
37 | | - <Table.Header.Cell column="location" {root}>Location</Table.Header.Cell> |
38 | | - <Table.Header.Cell column="ip" {root}>IP</Table.Header.Cell> |
39 | | - <Table.Header.Cell column="date" {root}>Date</Table.Header.Cell> |
40 | | - </svelte:fragment> |
41 | | - {#each logs.logs as log} |
42 | | - <Table.Row.Base {root}> |
43 | | - <Table.Cell column="user" {root}> |
44 | | - <Layout.Stack direction="row" alignItems="center"> |
45 | | - {#if log.userEmail} |
46 | | - {#if log.userName} |
47 | | - <AvatarInitials size="xs" name={log.userName} /> |
48 | | - <Trim>{log.userName}</Trim> |
49 | | - {:else} |
50 | | - <AvatarInitials size="xs" name={log.userEmail} /> |
51 | | - <Trim>{log.userEmail}</Trim> |
52 | | - {/if} |
| 52 | + <Table.Root {columns} let:root> |
| 53 | + <svelte:fragment slot="header" let:root> |
| 54 | + <Table.Header.Cell column="user" {root}>User</Table.Header.Cell> |
| 55 | + <Table.Header.Cell column="event" {root}>Event</Table.Header.Cell> |
| 56 | + <Table.Header.Cell column="location" {root}>Location</Table.Header.Cell> |
| 57 | + <Table.Header.Cell column="ip" {root}>IP</Table.Header.Cell> |
| 58 | + <Table.Header.Cell column="date" {root}>Date</Table.Header.Cell> |
| 59 | + </svelte:fragment> |
| 60 | + {#each logs.logs as log} |
| 61 | + <Table.Row.Base {root}> |
| 62 | + <Table.Cell column="user" {root}> |
| 63 | + <Layout.Stack direction="row" alignItems="center"> |
| 64 | + {#if log.userEmail} |
| 65 | + {#if log.userName} |
| 66 | + <AvatarInitials size="xs" name={log.userName} /> |
| 67 | + <Trim>{log.userName}</Trim> |
53 | 68 | {:else} |
54 | | - <div class="avatar is-size-small"> |
55 | | - <span class="icon-anonymous" aria-hidden="true"></span> |
56 | | - </div> |
57 | | - <span class="text u-trim">{log.userName ?? 'Anonymous'}</span> |
| 69 | + <AvatarInitials size="xs" name={log.userEmail} /> |
| 70 | + <Trim>{log.userEmail}</Trim> |
58 | 71 | {/if} |
59 | | - </Layout.Stack> |
60 | | - </Table.Cell> |
61 | | - <Table.Cell column="event" {root}> |
62 | | - {log.event} |
63 | | - </Table.Cell> |
64 | | - <Table.Cell column="location" {root}> |
65 | | - {#if log.countryCode !== '--'} |
66 | | - {log.countryName} |
67 | 72 | {:else} |
68 | | - Unknown |
| 73 | + <div class="avatar is-size-small"> |
| 74 | + <span class="icon-anonymous" aria-hidden="true"></span> |
| 75 | + </div> |
| 76 | + <span class="text u-trim">{log.userName ?? 'Anonymous'}</span> |
69 | 77 | {/if} |
70 | | - </Table.Cell> |
71 | | - <Table.Cell column="ip" {root}> |
72 | | - {log.ip} |
73 | | - </Table.Cell> |
74 | | - <Table.Cell column="date" {root}> |
75 | | - <DualTimeView time={log.time} showDatetime /> |
76 | | - </Table.Cell> |
77 | | - </Table.Row.Base> |
78 | | - {/each} |
79 | | - </Table.Root> |
80 | | - </div> |
| 78 | + </Layout.Stack> |
| 79 | + </Table.Cell> |
| 80 | + |
| 81 | + <Table.Cell column="event" {root}> |
| 82 | + {log.event} |
| 83 | + </Table.Cell> |
| 84 | + |
| 85 | + <Table.Cell column="location" {root}> |
| 86 | + {#if log.countryCode !== '--'} |
| 87 | + {log.countryName} |
| 88 | + {:else} |
| 89 | + Unknown |
| 90 | + {/if} |
| 91 | + </Table.Cell> |
| 92 | + |
| 93 | + <Table.Cell column="ip" {root}> |
| 94 | + <InteractiveText variant="copy" text={log.ip} isVisible /> |
| 95 | + </Table.Cell> |
| 96 | + |
| 97 | + <Table.Cell column="date" {root}> |
| 98 | + <DualTimeView time={log.time} showDatetime /> |
| 99 | + </Table.Cell> |
| 100 | + </Table.Row.Base> |
| 101 | + {/each} |
| 102 | + </Table.Root> |
81 | 103 |
|
82 | 104 | <PaginationWithLimit |
83 | 105 | {limit} |
|
0 commit comments