@alepha/ui 0.17.1 → 0.17.2
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/admin/{AdminParameters-iQE8o7a7.js → AdminParameters-DCGbpt2c.js} +1 -1
- package/dist/admin/{AdminParameters-iQE8o7a7.js.map → AdminParameters-DCGbpt2c.js.map} +1 -1
- package/dist/admin/{AdminSessions-oKJCbd7w.js → AdminSessions-DyhW6RZv.js} +1 -1
- package/dist/admin/{AdminSessions-oKJCbd7w.js.map → AdminSessions-DyhW6RZv.js.map} +1 -1
- package/dist/admin/{AdminUserAudits-BNCEle_E.js → AdminUserAudits-D1GcREEE.js} +1 -1
- package/dist/admin/{AdminUserAudits-BNCEle_E.js.map → AdminUserAudits-D1GcREEE.js.map} +1 -1
- package/dist/admin/{AdminUserCreate-CgqeFwCt.js → AdminUserCreate-DR8LA0tv.js} +1 -1
- package/dist/admin/{AdminUserCreate-CgqeFwCt.js.map → AdminUserCreate-DR8LA0tv.js.map} +1 -1
- package/dist/admin/{AdminUserDetails-DDe1A1GP.js → AdminUserDetails-CDkZNHQD.js} +1 -1
- package/dist/admin/{AdminUserDetails-DDe1A1GP.js.map → AdminUserDetails-CDkZNHQD.js.map} +1 -1
- package/dist/admin/{AdminUserLayout-HAlobhWf.js → AdminUserLayout-CrBj4UuI.js} +1 -1
- package/dist/admin/{AdminUserLayout-HAlobhWf.js.map → AdminUserLayout-CrBj4UuI.js.map} +1 -1
- package/dist/admin/{AdminUserSessions-Bq1LnVLf.js → AdminUserSessions-srgFHrqy.js} +1 -1
- package/dist/admin/{AdminUserSessions-Bq1LnVLf.js.map → AdminUserSessions-srgFHrqy.js.map} +1 -1
- package/dist/admin/{AdminUserSettings-BRsBZoxV.js → AdminUserSettings-BFuxl-xT.js} +1 -1
- package/dist/admin/{AdminUserSettings-BRsBZoxV.js.map → AdminUserSettings-BFuxl-xT.js.map} +1 -1
- package/dist/admin/{AdminUsers-D71kIOSn.js → AdminUsers-D1pDpiwK.js} +1 -1
- package/dist/admin/{AdminUsers-D71kIOSn.js.map → AdminUsers-D1pDpiwK.js.map} +1 -1
- package/dist/admin/index.d.ts +1 -4
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +11 -26
- package/dist/admin/index.js.map +1 -1
- package/package.json +3 -3
- package/src/admin/AdminRouter.ts +2 -22
- package/src/admin/index.ts +1 -1
- package/dist/admin/AdminNotifications-DeHJFf6W.js +0 -153
- package/dist/admin/AdminNotifications-DeHJFf6W.js.map +0 -1
- package/src/admin/components/notifications/AdminNotifications.tsx +0 -204
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { DataTable, Flex, Text } from "@alepha/ui";
|
|
2
|
-
import { t } from "alepha";
|
|
3
|
-
import { IconAlertCircle, IconCheck, IconClock, IconMail, IconMessage } from "@tabler/icons-react";
|
|
4
|
-
import { Badge, Tooltip } from "@mantine/core";
|
|
5
|
-
import { jsx } from "react/jsx-runtime";
|
|
6
|
-
import { useClient } from "alepha/react";
|
|
7
|
-
import { useI18n } from "alepha/react/i18n";
|
|
8
|
-
|
|
9
|
-
//#region ../../src/admin/components/notifications/AdminNotifications.tsx
|
|
10
|
-
const AdminNotifications = () => {
|
|
11
|
-
const client = useClient();
|
|
12
|
-
const { l } = useI18n();
|
|
13
|
-
const filters = t.object({
|
|
14
|
-
type: t.optional(t.enum(["email", "sms"], { title: "Type" })),
|
|
15
|
-
status: t.optional(t.enum([
|
|
16
|
-
"pending",
|
|
17
|
-
"sent",
|
|
18
|
-
"failed"
|
|
19
|
-
], { title: "Status" })),
|
|
20
|
-
template: t.optional(t.string({ title: "Template" })),
|
|
21
|
-
contact: t.optional(t.string({ title: "Contact" }))
|
|
22
|
-
});
|
|
23
|
-
const getStatus = (item) => {
|
|
24
|
-
if (item.error) return "failed";
|
|
25
|
-
if (item.sentAt) return "sent";
|
|
26
|
-
return "pending";
|
|
27
|
-
};
|
|
28
|
-
const getStatusBadge = (item) => {
|
|
29
|
-
switch (getStatus(item)) {
|
|
30
|
-
case "sent": return /* @__PURE__ */ jsx(Badge, {
|
|
31
|
-
size: "sm",
|
|
32
|
-
variant: "light",
|
|
33
|
-
color: "green",
|
|
34
|
-
leftSection: /* @__PURE__ */ jsx(IconCheck, { size: 12 }),
|
|
35
|
-
children: "Sent"
|
|
36
|
-
});
|
|
37
|
-
case "failed": return /* @__PURE__ */ jsx(Tooltip, {
|
|
38
|
-
label: item.error?.message,
|
|
39
|
-
multiline: true,
|
|
40
|
-
maw: 300,
|
|
41
|
-
children: /* @__PURE__ */ jsx(Badge, {
|
|
42
|
-
size: "sm",
|
|
43
|
-
variant: "light",
|
|
44
|
-
color: "red",
|
|
45
|
-
leftSection: /* @__PURE__ */ jsx(IconAlertCircle, { size: 12 }),
|
|
46
|
-
children: "Failed"
|
|
47
|
-
})
|
|
48
|
-
});
|
|
49
|
-
default: return /* @__PURE__ */ jsx(Badge, {
|
|
50
|
-
size: "sm",
|
|
51
|
-
variant: "light",
|
|
52
|
-
color: "yellow",
|
|
53
|
-
leftSection: /* @__PURE__ */ jsx(IconClock, { size: 12 }),
|
|
54
|
-
children: "Pending"
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
return /* @__PURE__ */ jsx(Flex, {
|
|
59
|
-
flex: 1,
|
|
60
|
-
direction: "column",
|
|
61
|
-
children: /* @__PURE__ */ jsx(DataTable, {
|
|
62
|
-
submitOnInit: true,
|
|
63
|
-
defaultSize: 10,
|
|
64
|
-
typeFormProps: {
|
|
65
|
-
skipSubmitButton: true,
|
|
66
|
-
columns: 4
|
|
67
|
-
},
|
|
68
|
-
tableProps: {
|
|
69
|
-
horizontalSpacing: "xs",
|
|
70
|
-
verticalSpacing: "xs"
|
|
71
|
-
},
|
|
72
|
-
onFilterChange: (_key, _value, form) => {
|
|
73
|
-
return form.submit();
|
|
74
|
-
},
|
|
75
|
-
filters,
|
|
76
|
-
tableTrProps: (item) => {
|
|
77
|
-
if (getStatus(item) === "failed") return { bg: "var(--mantine-color-red-light)" };
|
|
78
|
-
return {};
|
|
79
|
-
},
|
|
80
|
-
items: async (filters) => {
|
|
81
|
-
return await client.findNotifications({ query: filters });
|
|
82
|
-
},
|
|
83
|
-
columns: {
|
|
84
|
-
type: {
|
|
85
|
-
label: "Type",
|
|
86
|
-
fit: true,
|
|
87
|
-
value: (item) => /* @__PURE__ */ jsx(Badge, {
|
|
88
|
-
size: "sm",
|
|
89
|
-
variant: "outline",
|
|
90
|
-
leftSection: item.type === "email" ? /* @__PURE__ */ jsx(IconMail, { size: 12 }) : /* @__PURE__ */ jsx(IconMessage, { size: 12 }),
|
|
91
|
-
children: item.type.toUpperCase()
|
|
92
|
-
})
|
|
93
|
-
},
|
|
94
|
-
template: {
|
|
95
|
-
label: "Template",
|
|
96
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
97
|
-
size: "sm",
|
|
98
|
-
fw: 500,
|
|
99
|
-
children: item.template
|
|
100
|
-
})
|
|
101
|
-
},
|
|
102
|
-
contact: {
|
|
103
|
-
label: "Contact",
|
|
104
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
105
|
-
size: "sm",
|
|
106
|
-
ff: "monospace",
|
|
107
|
-
children: item.contact
|
|
108
|
-
})
|
|
109
|
-
},
|
|
110
|
-
category: {
|
|
111
|
-
label: "Category",
|
|
112
|
-
fit: true,
|
|
113
|
-
value: (item) => item.category ? /* @__PURE__ */ jsx(Badge, {
|
|
114
|
-
size: "xs",
|
|
115
|
-
variant: "light",
|
|
116
|
-
children: item.category
|
|
117
|
-
}) : /* @__PURE__ */ jsx(Text, {
|
|
118
|
-
size: "xs",
|
|
119
|
-
c: "dimmed",
|
|
120
|
-
children: "-"
|
|
121
|
-
})
|
|
122
|
-
},
|
|
123
|
-
status: {
|
|
124
|
-
label: "Status",
|
|
125
|
-
fit: true,
|
|
126
|
-
value: (item) => getStatusBadge(item)
|
|
127
|
-
},
|
|
128
|
-
sentAt: {
|
|
129
|
-
label: "Sent",
|
|
130
|
-
fit: true,
|
|
131
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
132
|
-
size: "xs",
|
|
133
|
-
c: "dimmed",
|
|
134
|
-
children: item.sentAt ? l(item.sentAt, { date: "fromNow" }) : "-"
|
|
135
|
-
})
|
|
136
|
-
},
|
|
137
|
-
createdAt: {
|
|
138
|
-
label: "Created",
|
|
139
|
-
fit: true,
|
|
140
|
-
value: (item) => /* @__PURE__ */ jsx(Text, {
|
|
141
|
-
size: "xs",
|
|
142
|
-
c: "dimmed",
|
|
143
|
-
children: l(item.createdAt, { date: "fromNow" })
|
|
144
|
-
})
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
})
|
|
148
|
-
});
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
//#endregion
|
|
152
|
-
export { AdminNotifications as default };
|
|
153
|
-
//# sourceMappingURL=AdminNotifications-DeHJFf6W.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AdminNotifications-DeHJFf6W.js","names":[],"sources":["../../src/admin/components/notifications/AdminNotifications.tsx"],"sourcesContent":["import { DataTable, Flex, Text } from \"@alepha/ui\";\nimport { Badge, Tooltip } from \"@mantine/core\";\nimport {\n IconAlertCircle,\n IconCheck,\n IconClock,\n IconMail,\n IconMessage,\n} from \"@tabler/icons-react\";\nimport { type Page, t } from \"alepha\";\nimport type {\n AdminNotificationController,\n NotificationEntity,\n} from \"alepha/api/notifications\";\nimport { useClient } from \"alepha/react\";\nimport { useI18n } from \"alepha/react/i18n\";\n\nconst AdminNotifications = () => {\n const client = useClient<AdminNotificationController>();\n const { l } = useI18n();\n\n const filters = t.object({\n type: t.optional(\n t.enum([\"email\", \"sms\"], {\n title: \"Type\",\n }),\n ),\n status: t.optional(\n t.enum([\"pending\", \"sent\", \"failed\"], {\n title: \"Status\",\n }),\n ),\n template: t.optional(\n t.string({\n title: \"Template\",\n }),\n ),\n contact: t.optional(\n t.string({\n title: \"Contact\",\n }),\n ),\n });\n\n const getStatus = (item: NotificationEntity) => {\n if (item.error) return \"failed\";\n if (item.sentAt) return \"sent\";\n return \"pending\";\n };\n\n const getStatusBadge = (item: NotificationEntity) => {\n const status = getStatus(item);\n switch (status) {\n case \"sent\":\n return (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color=\"green\"\n leftSection={<IconCheck size={12} />}\n >\n Sent\n </Badge>\n );\n case \"failed\":\n return (\n <Tooltip label={item.error?.message} multiline maw={300}>\n <Badge\n size=\"sm\"\n variant=\"light\"\n color=\"red\"\n leftSection={<IconAlertCircle size={12} />}\n >\n Failed\n </Badge>\n </Tooltip>\n );\n default:\n return (\n <Badge\n size=\"sm\"\n variant=\"light\"\n color=\"yellow\"\n leftSection={<IconClock size={12} />}\n >\n Pending\n </Badge>\n );\n }\n };\n\n return (\n <Flex flex={1} direction=\"column\">\n <DataTable<NotificationEntity, typeof filters>\n submitOnInit\n defaultSize={10}\n typeFormProps={{\n skipSubmitButton: true,\n columns: 4,\n }}\n tableProps={{\n horizontalSpacing: \"xs\",\n verticalSpacing: \"xs\",\n }}\n onFilterChange={(_key, _value, form) => {\n return form.submit();\n }}\n filters={filters}\n tableTrProps={(item) => {\n const status = getStatus(item);\n if (status === \"failed\") {\n return {\n bg: \"var(--mantine-color-red-light)\",\n };\n }\n return {};\n }}\n items={async (filters) => {\n const response = await client.findNotifications({\n query: filters,\n });\n\n return response as Page<NotificationEntity>;\n }}\n columns={{\n type: {\n label: \"Type\",\n fit: true,\n value: (item) => (\n <Badge\n size=\"sm\"\n variant=\"outline\"\n leftSection={\n item.type === \"email\" ? (\n <IconMail size={12} />\n ) : (\n <IconMessage size={12} />\n )\n }\n >\n {item.type.toUpperCase()}\n </Badge>\n ),\n },\n template: {\n label: \"Template\",\n value: (item) => (\n <Text size=\"sm\" fw={500}>\n {item.template}\n </Text>\n ),\n },\n contact: {\n label: \"Contact\",\n value: (item) => (\n <Text size=\"sm\" ff=\"monospace\">\n {item.contact}\n </Text>\n ),\n },\n category: {\n label: \"Category\",\n fit: true,\n value: (item) =>\n item.category ? (\n <Badge size=\"xs\" variant=\"light\">\n {item.category}\n </Badge>\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n -\n </Text>\n ),\n },\n status: {\n label: \"Status\",\n fit: true,\n value: (item) => getStatusBadge(item),\n },\n sentAt: {\n label: \"Sent\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {item.sentAt ? l(item.sentAt, { date: \"fromNow\" }) : \"-\"}\n </Text>\n ),\n },\n createdAt: {\n label: \"Created\",\n fit: true,\n value: (item) => (\n <Text size=\"xs\" c=\"dimmed\">\n {l(item.createdAt, { date: \"fromNow\" })}\n </Text>\n ),\n },\n }}\n />\n </Flex>\n );\n};\n\nexport default AdminNotifications;\n"],"mappings":"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"}
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { DataTable, Flex, Text } from "@alepha/ui";
|
|
2
|
-
import { Badge, Tooltip } from "@mantine/core";
|
|
3
|
-
import {
|
|
4
|
-
IconAlertCircle,
|
|
5
|
-
IconCheck,
|
|
6
|
-
IconClock,
|
|
7
|
-
IconMail,
|
|
8
|
-
IconMessage,
|
|
9
|
-
} from "@tabler/icons-react";
|
|
10
|
-
import { type Page, t } from "alepha";
|
|
11
|
-
import type {
|
|
12
|
-
AdminNotificationController,
|
|
13
|
-
NotificationEntity,
|
|
14
|
-
} from "alepha/api/notifications";
|
|
15
|
-
import { useClient } from "alepha/react";
|
|
16
|
-
import { useI18n } from "alepha/react/i18n";
|
|
17
|
-
|
|
18
|
-
const AdminNotifications = () => {
|
|
19
|
-
const client = useClient<AdminNotificationController>();
|
|
20
|
-
const { l } = useI18n();
|
|
21
|
-
|
|
22
|
-
const filters = t.object({
|
|
23
|
-
type: t.optional(
|
|
24
|
-
t.enum(["email", "sms"], {
|
|
25
|
-
title: "Type",
|
|
26
|
-
}),
|
|
27
|
-
),
|
|
28
|
-
status: t.optional(
|
|
29
|
-
t.enum(["pending", "sent", "failed"], {
|
|
30
|
-
title: "Status",
|
|
31
|
-
}),
|
|
32
|
-
),
|
|
33
|
-
template: t.optional(
|
|
34
|
-
t.string({
|
|
35
|
-
title: "Template",
|
|
36
|
-
}),
|
|
37
|
-
),
|
|
38
|
-
contact: t.optional(
|
|
39
|
-
t.string({
|
|
40
|
-
title: "Contact",
|
|
41
|
-
}),
|
|
42
|
-
),
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
const getStatus = (item: NotificationEntity) => {
|
|
46
|
-
if (item.error) return "failed";
|
|
47
|
-
if (item.sentAt) return "sent";
|
|
48
|
-
return "pending";
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
const getStatusBadge = (item: NotificationEntity) => {
|
|
52
|
-
const status = getStatus(item);
|
|
53
|
-
switch (status) {
|
|
54
|
-
case "sent":
|
|
55
|
-
return (
|
|
56
|
-
<Badge
|
|
57
|
-
size="sm"
|
|
58
|
-
variant="light"
|
|
59
|
-
color="green"
|
|
60
|
-
leftSection={<IconCheck size={12} />}
|
|
61
|
-
>
|
|
62
|
-
Sent
|
|
63
|
-
</Badge>
|
|
64
|
-
);
|
|
65
|
-
case "failed":
|
|
66
|
-
return (
|
|
67
|
-
<Tooltip label={item.error?.message} multiline maw={300}>
|
|
68
|
-
<Badge
|
|
69
|
-
size="sm"
|
|
70
|
-
variant="light"
|
|
71
|
-
color="red"
|
|
72
|
-
leftSection={<IconAlertCircle size={12} />}
|
|
73
|
-
>
|
|
74
|
-
Failed
|
|
75
|
-
</Badge>
|
|
76
|
-
</Tooltip>
|
|
77
|
-
);
|
|
78
|
-
default:
|
|
79
|
-
return (
|
|
80
|
-
<Badge
|
|
81
|
-
size="sm"
|
|
82
|
-
variant="light"
|
|
83
|
-
color="yellow"
|
|
84
|
-
leftSection={<IconClock size={12} />}
|
|
85
|
-
>
|
|
86
|
-
Pending
|
|
87
|
-
</Badge>
|
|
88
|
-
);
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
return (
|
|
93
|
-
<Flex flex={1} direction="column">
|
|
94
|
-
<DataTable<NotificationEntity, typeof filters>
|
|
95
|
-
submitOnInit
|
|
96
|
-
defaultSize={10}
|
|
97
|
-
typeFormProps={{
|
|
98
|
-
skipSubmitButton: true,
|
|
99
|
-
columns: 4,
|
|
100
|
-
}}
|
|
101
|
-
tableProps={{
|
|
102
|
-
horizontalSpacing: "xs",
|
|
103
|
-
verticalSpacing: "xs",
|
|
104
|
-
}}
|
|
105
|
-
onFilterChange={(_key, _value, form) => {
|
|
106
|
-
return form.submit();
|
|
107
|
-
}}
|
|
108
|
-
filters={filters}
|
|
109
|
-
tableTrProps={(item) => {
|
|
110
|
-
const status = getStatus(item);
|
|
111
|
-
if (status === "failed") {
|
|
112
|
-
return {
|
|
113
|
-
bg: "var(--mantine-color-red-light)",
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
return {};
|
|
117
|
-
}}
|
|
118
|
-
items={async (filters) => {
|
|
119
|
-
const response = await client.findNotifications({
|
|
120
|
-
query: filters,
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
return response as Page<NotificationEntity>;
|
|
124
|
-
}}
|
|
125
|
-
columns={{
|
|
126
|
-
type: {
|
|
127
|
-
label: "Type",
|
|
128
|
-
fit: true,
|
|
129
|
-
value: (item) => (
|
|
130
|
-
<Badge
|
|
131
|
-
size="sm"
|
|
132
|
-
variant="outline"
|
|
133
|
-
leftSection={
|
|
134
|
-
item.type === "email" ? (
|
|
135
|
-
<IconMail size={12} />
|
|
136
|
-
) : (
|
|
137
|
-
<IconMessage size={12} />
|
|
138
|
-
)
|
|
139
|
-
}
|
|
140
|
-
>
|
|
141
|
-
{item.type.toUpperCase()}
|
|
142
|
-
</Badge>
|
|
143
|
-
),
|
|
144
|
-
},
|
|
145
|
-
template: {
|
|
146
|
-
label: "Template",
|
|
147
|
-
value: (item) => (
|
|
148
|
-
<Text size="sm" fw={500}>
|
|
149
|
-
{item.template}
|
|
150
|
-
</Text>
|
|
151
|
-
),
|
|
152
|
-
},
|
|
153
|
-
contact: {
|
|
154
|
-
label: "Contact",
|
|
155
|
-
value: (item) => (
|
|
156
|
-
<Text size="sm" ff="monospace">
|
|
157
|
-
{item.contact}
|
|
158
|
-
</Text>
|
|
159
|
-
),
|
|
160
|
-
},
|
|
161
|
-
category: {
|
|
162
|
-
label: "Category",
|
|
163
|
-
fit: true,
|
|
164
|
-
value: (item) =>
|
|
165
|
-
item.category ? (
|
|
166
|
-
<Badge size="xs" variant="light">
|
|
167
|
-
{item.category}
|
|
168
|
-
</Badge>
|
|
169
|
-
) : (
|
|
170
|
-
<Text size="xs" c="dimmed">
|
|
171
|
-
-
|
|
172
|
-
</Text>
|
|
173
|
-
),
|
|
174
|
-
},
|
|
175
|
-
status: {
|
|
176
|
-
label: "Status",
|
|
177
|
-
fit: true,
|
|
178
|
-
value: (item) => getStatusBadge(item),
|
|
179
|
-
},
|
|
180
|
-
sentAt: {
|
|
181
|
-
label: "Sent",
|
|
182
|
-
fit: true,
|
|
183
|
-
value: (item) => (
|
|
184
|
-
<Text size="xs" c="dimmed">
|
|
185
|
-
{item.sentAt ? l(item.sentAt, { date: "fromNow" }) : "-"}
|
|
186
|
-
</Text>
|
|
187
|
-
),
|
|
188
|
-
},
|
|
189
|
-
createdAt: {
|
|
190
|
-
label: "Created",
|
|
191
|
-
fit: true,
|
|
192
|
-
value: (item) => (
|
|
193
|
-
<Text size="xs" c="dimmed">
|
|
194
|
-
{l(item.createdAt, { date: "fromNow" })}
|
|
195
|
-
</Text>
|
|
196
|
-
),
|
|
197
|
-
},
|
|
198
|
-
}}
|
|
199
|
-
/>
|
|
200
|
-
</Flex>
|
|
201
|
-
);
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
export default AdminNotifications;
|