@igstack/app-catalog-frontend-core 0.2.0 → 0.3.1-alpha-20260305175850

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/dist/esm/api/infra/trpc.d.ts +0 -1491
  2. package/dist/esm/modules/appCatalog/ui/filters/FilterBar.js +23 -11
  3. package/dist/esm/modules/appCatalog/ui/filters/FilterBar.js.map +1 -1
  4. package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.d.ts +5 -1
  5. package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js +146 -56
  6. package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js.map +1 -1
  7. package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js +20 -1
  8. package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js.map +1 -1
  9. package/dist/esm/modules/auth/AuthContext.js +1 -1
  10. package/dist/esm/modules/auth/AuthModalContext.js +1 -1
  11. package/dist/esm/modules/auth/authClient.d.ts +2 -2
  12. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js +4 -37
  13. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js.map +1 -1
  14. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js +2 -10
  15. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js.map +1 -1
  16. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/checks.js +1 -1
  17. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js +0 -44
  18. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js.map +1 -1
  19. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js +0 -4
  20. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js.map +1 -1
  21. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js +0 -2
  22. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js.map +1 -1
  23. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js +4 -49
  24. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js.map +1 -1
  25. package/dist/esm/routeTree.gen.d.ts +3 -164
  26. package/dist/esm/routeTree.gen.js +8 -80
  27. package/dist/esm/routeTree.gen.js.map +1 -1
  28. package/dist/esm/ui/button.d.ts +1 -1
  29. package/dist/esm/ui/card.js +1 -48
  30. package/dist/esm/ui/card.js.map +1 -1
  31. package/dist/esm/ui/command.js +1 -15
  32. package/dist/esm/ui/command.js.map +1 -1
  33. package/dist/esm/ui/components/header/Header.js +2 -11
  34. package/dist/esm/ui/components/header/Header.js.map +1 -1
  35. package/dist/esm/ui/input-group.js +125 -0
  36. package/dist/esm/ui/input-group.js.map +1 -0
  37. package/package.json +3 -3
  38. package/src/modules/appCatalog/ui/components/AppDetailModal.tsx +2 -21
  39. package/src/routeTree.gen.ts +2 -220
  40. package/src/ui/components/header/Header.tsx +2 -12
  41. package/dist/esm/components/IconPickerDialog.d.ts +0 -8
  42. package/dist/esm/components/IconPickerDialog.js +0 -98
  43. package/dist/esm/components/IconPickerDialog.js.map +0 -1
  44. package/dist/esm/components/IconPickerField.d.ts +0 -9
  45. package/dist/esm/components/IconPickerField.js +0 -76
  46. package/dist/esm/components/IconPickerField.js.map +0 -1
  47. package/dist/esm/modules/admin-base/components/AdminChat.d.ts +0 -1
  48. package/dist/esm/modules/admin-base/components/AdminChat.js +0 -82
  49. package/dist/esm/modules/admin-base/components/AdminChat.js.map +0 -1
  50. package/dist/esm/modules/admin-base/components/AdminLayout.d.ts +0 -5
  51. package/dist/esm/modules/admin-base/components/AdminLayout.js +0 -83
  52. package/dist/esm/modules/admin-base/components/AdminLayout.js.map +0 -1
  53. package/dist/esm/modules/admin-base/components/AdminWelcome.d.ts +0 -1
  54. package/dist/esm/modules/admin-base/components/AdminWelcome.js +0 -37
  55. package/dist/esm/modules/admin-base/components/AdminWelcome.js.map +0 -1
  56. package/dist/esm/modules/admin-base/context/AdminConfigContext.d.ts +0 -8
  57. package/dist/esm/modules/admin-base/context/AdminConfigContext.js +0 -27
  58. package/dist/esm/modules/admin-base/context/AdminConfigContext.js.map +0 -1
  59. package/dist/esm/modules/admin-base/index.d.ts +0 -5
  60. package/dist/esm/modules/admin-base/types/adminTypes.d.ts +0 -10
  61. package/dist/esm/modules/appCatalog/AppCatalogAdminPage.d.ts +0 -1
  62. package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js +0 -196
  63. package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js.map +0 -1
  64. package/dist/esm/modules/appCatalog/ScreenshotItem.js +0 -57
  65. package/dist/esm/modules/appCatalog/ScreenshotItem.js.map +0 -1
  66. package/dist/esm/modules/appCatalog/ScreenshotManager.js +0 -155
  67. package/dist/esm/modules/appCatalog/ScreenshotManager.js.map +0 -1
  68. package/dist/esm/modules/approvalMethod/AccessRequestFormFields.d.ts +0 -7
  69. package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js +0 -323
  70. package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js.map +0 -1
  71. package/dist/esm/modules/approvalMethod/ApprovalMethodForm.d.ts +0 -14
  72. package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js +0 -227
  73. package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js.map +0 -1
  74. package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.d.ts +0 -7
  75. package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js +0 -124
  76. package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js.map +0 -1
  77. package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.d.ts +0 -381
  78. package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js +0 -26
  79. package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js.map +0 -1
  80. package/dist/esm/modules/auth/authUtils.js +0 -25
  81. package/dist/esm/modules/auth/authUtils.js.map +0 -1
  82. package/dist/esm/modules/icons/IconManagementPage.d.ts +0 -1
  83. package/dist/esm/modules/icons/IconManagementPage.js +0 -177
  84. package/dist/esm/modules/icons/IconManagementPage.js.map +0 -1
  85. package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.2/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -60
  86. package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.2/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
  87. package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2/node_modules/@dnd-kit/core/dist/core.esm.js +0 -3055
  88. package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
  89. package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2__react@19.1.2/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -593
  90. package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2__react@19.1.2/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
  91. package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.2/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -302
  92. package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.2/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
  93. package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/dist/resolvers.js +0 -34
  94. package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/dist/resolvers.js.map +0 -1
  95. package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/zod/dist/zod.js +0 -94
  96. package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/zod/dist/zod.js.map +0 -1
  97. package/dist/esm/node_modules/.pnpm/react-hook-form@7.71.1_react@19.1.2/node_modules/react-hook-form/dist/index.esm.js +0 -1894
  98. package/dist/esm/node_modules/.pnpm/react-hook-form@7.71.1_react@19.1.2/node_modules/react-hook-form/dist/index.esm.js.map +0 -1
  99. package/dist/esm/routes/admin/app-for-catalog/$id.d.ts +0 -5
  100. package/dist/esm/routes/admin/app-for-catalog/_id.js +0 -67
  101. package/dist/esm/routes/admin/app-for-catalog/_id.js.map +0 -1
  102. package/dist/esm/routes/admin/app-for-catalog/_id2.js +0 -321
  103. package/dist/esm/routes/admin/app-for-catalog/_id2.js.map +0 -1
  104. package/dist/esm/routes/admin/app-for-catalog/index.d.ts +0 -1
  105. package/dist/esm/routes/admin/app-for-catalog/index.js +0 -9
  106. package/dist/esm/routes/admin/app-for-catalog/index.js.map +0 -1
  107. package/dist/esm/routes/admin/app-for-catalog/index2.js +0 -12
  108. package/dist/esm/routes/admin/app-for-catalog/index2.js.map +0 -1
  109. package/dist/esm/routes/admin/app-for-catalog.d.ts +0 -1
  110. package/dist/esm/routes/admin/app-for-catalog.js +0 -14
  111. package/dist/esm/routes/admin/app-for-catalog.js.map +0 -1
  112. package/dist/esm/routes/admin/app-for-catalog2.js +0 -9
  113. package/dist/esm/routes/admin/app-for-catalog2.js.map +0 -1
  114. package/dist/esm/routes/admin/approval-methods/index.d.ts +0 -32
  115. package/dist/esm/routes/admin/approval-methods/index.js +0 -24
  116. package/dist/esm/routes/admin/approval-methods/index.js.map +0 -1
  117. package/dist/esm/routes/admin/approval-methods/index2.js +0 -100
  118. package/dist/esm/routes/admin/approval-methods/index2.js.map +0 -1
  119. package/dist/esm/routes/admin/approval-methods.d.ts +0 -1
  120. package/dist/esm/routes/admin/approval-methods.js +0 -14
  121. package/dist/esm/routes/admin/approval-methods.js.map +0 -1
  122. package/dist/esm/routes/admin/approval-methods2.js +0 -7
  123. package/dist/esm/routes/admin/approval-methods2.js.map +0 -1
  124. package/dist/esm/routes/admin/chat.d.ts +0 -1
  125. package/dist/esm/routes/admin/chat.js +0 -14
  126. package/dist/esm/routes/admin/chat.js.map +0 -1
  127. package/dist/esm/routes/admin/chat2.js +0 -9
  128. package/dist/esm/routes/admin/chat2.js.map +0 -1
  129. package/dist/esm/routes/admin/icons.d.ts +0 -1
  130. package/dist/esm/routes/admin/icons.js +0 -14
  131. package/dist/esm/routes/admin/icons.js.map +0 -1
  132. package/dist/esm/routes/admin/icons2.js +0 -12
  133. package/dist/esm/routes/admin/icons2.js.map +0 -1
  134. package/dist/esm/routes/admin/index.d.ts +0 -1
  135. package/dist/esm/routes/admin/index.js +0 -9
  136. package/dist/esm/routes/admin/index.js.map +0 -1
  137. package/dist/esm/routes/admin/index2.js +0 -9
  138. package/dist/esm/routes/admin/index2.js.map +0 -1
  139. package/dist/esm/routes/admin.d.ts +0 -1
  140. package/dist/esm/routes/admin.js +0 -37
  141. package/dist/esm/routes/admin.js.map +0 -1
  142. package/dist/esm/routes/admin2.js +0 -18
  143. package/dist/esm/routes/admin2.js.map +0 -1
  144. package/dist/esm/ui/alert-dialog.js +0 -141
  145. package/dist/esm/ui/alert-dialog.js.map +0 -1
  146. package/dist/esm/ui/breadcrumb.js +0 -84
  147. package/dist/esm/ui/breadcrumb.js.map +0 -1
  148. package/dist/esm/ui/components/Breadcrumbs.js +0 -36
  149. package/dist/esm/ui/components/Breadcrumbs.js.map +0 -1
  150. package/dist/esm/ui/crud-list/CrudList.js +0 -189
  151. package/dist/esm/ui/crud-list/CrudList.js.map +0 -1
  152. package/dist/esm/ui/editable-list/EditableListField.js +0 -130
  153. package/dist/esm/ui/editable-list/EditableListField.js.map +0 -1
  154. package/dist/esm/ui/form.js +0 -134
  155. package/dist/esm/ui/form.js.map +0 -1
  156. package/dist/esm/ui/linkExternal.js +0 -26
  157. package/dist/esm/ui/linkExternal.js.map +0 -1
  158. package/dist/esm/ui/markdown-editor/MarkdownEditor.js +0 -116
  159. package/dist/esm/ui/markdown-editor/MarkdownEditor.js.map +0 -1
  160. package/dist/esm/ui/markdown-editor/MarkdownToolbar.js +0 -99
  161. package/dist/esm/ui/markdown-editor/MarkdownToolbar.js.map +0 -1
  162. package/dist/esm/ui/scroll-area.js +0 -62
  163. package/dist/esm/ui/scroll-area.js.map +0 -1
  164. package/dist/esm/ui/select.js +0 -138
  165. package/dist/esm/ui/select.js.map +0 -1
  166. package/dist/esm/ui/textarea.js +0 -19
  167. package/dist/esm/ui/textarea.js.map +0 -1
  168. package/src/components/IconPickerDialog.tsx +0 -136
  169. package/src/components/IconPickerField.tsx +0 -88
  170. package/src/modules/admin-base/components/AdminChat.tsx +0 -122
  171. package/src/modules/admin-base/components/AdminLayout.tsx +0 -111
  172. package/src/modules/admin-base/components/AdminWelcome.tsx +0 -52
  173. package/src/modules/admin-base/context/AdminConfigContext.tsx +0 -36
  174. package/src/modules/admin-base/index.ts +0 -16
  175. package/src/modules/admin-base/types/adminTypes.ts +0 -11
  176. package/src/modules/appCatalog/AppCatalogAdminPage.tsx +0 -274
  177. package/src/modules/approvalMethod/AccessRequestFormFields.tsx +0 -393
  178. package/src/modules/approvalMethod/ApprovalMethodForm.tsx +0 -323
  179. package/src/modules/approvalMethod/ApprovalMethodSelector.tsx +0 -150
  180. package/src/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.ts +0 -34
  181. package/src/modules/icons/IconManagementPage.tsx +0 -245
  182. package/src/routes/admin/app-for-catalog/$id.tsx +0 -571
  183. package/src/routes/admin/app-for-catalog/index.tsx +0 -19
  184. package/src/routes/admin/app-for-catalog.tsx +0 -12
  185. package/src/routes/admin/approval-methods/index.tsx +0 -161
  186. package/src/routes/admin/approval-methods.tsx +0 -10
  187. package/src/routes/admin/chat.tsx +0 -13
  188. package/src/routes/admin/icons.tsx +0 -22
  189. package/src/routes/admin/index.tsx +0 -9
  190. package/src/routes/admin.tsx +0 -60
@@ -1,161 +0,0 @@
1
- import type { ApprovalMethodType, TRPCRouter } from '@igstack/app-catalog-backend-core'
2
- import type { ColumnDef } from '@tanstack/react-table'
3
- import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
4
- import { createFileRoute } from '@tanstack/react-router'
5
- import type { TRPCClient } from '@trpc/client'
6
- import { useTRPC } from '~/api/infra/trpc'
7
- import { ApprovalMethodForm } from '~/modules/approvalMethod/ApprovalMethodForm'
8
- import { Badge } from '~/ui/badge'
9
- import { CrudList } from '~/ui/crud-list'
10
-
11
- /**
12
- * ApprovalMethod type as returned by tRPC (dates serialized to strings)
13
- */
14
- type SerializedApprovalMethod = Awaited<
15
- ReturnType<TRPCClient<TRPCRouter>['approvalMethod']['list']['query']>
16
- >[number]
17
-
18
- export const Route = createFileRoute('/admin/approval-methods/')({
19
- component: RouteComponent,
20
- async loader({ context }) {
21
- const { trpcClient } = context
22
- return {
23
- approvalMethods: await trpcClient.approvalMethod.list.query(),
24
- }
25
- },
26
- staticData: {
27
- breadcrumb: {
28
- title: 'List',
29
- },
30
- },
31
- })
32
-
33
- const TYPE_LABELS: Record<ApprovalMethodType, string> = {
34
- service: 'Service',
35
- personTeam: 'Person/Team',
36
- custom: 'Custom',
37
- }
38
-
39
- const TYPE_COLORS: Record<
40
- ApprovalMethodType,
41
- 'default' | 'outline' | 'secondary'
42
- > = {
43
- service: 'default',
44
- personTeam: 'secondary',
45
- custom: 'outline',
46
- }
47
-
48
- const columns: Array<ColumnDef<SerializedApprovalMethod>> = [
49
- {
50
- accessorKey: 'displayName',
51
- header: 'Name',
52
- },
53
- {
54
- accessorKey: 'type',
55
- header: 'Type',
56
- cell: ({ row }) => (
57
- <Badge variant={TYPE_COLORS[row.original.type]}>
58
- {TYPE_LABELS[row.original.type]}
59
- </Badge>
60
- ),
61
- },
62
- {
63
- accessorKey: 'config',
64
- header: 'Configuration',
65
- cell: ({ row }) => {
66
- const config = row.original.config as Record<string, unknown> | null
67
- if (!config) return <span className="text-muted-foreground">-</span>
68
-
69
- // Show relevant config preview based on type
70
- if (row.original.type === 'service' && config.url) {
71
- return (
72
- <span className="text-sm text-muted-foreground truncate max-w-[200px]">
73
- {config.url as string}
74
- </span>
75
- )
76
- }
77
- if (
78
- row.original.type === 'personTeam' &&
79
- Array.isArray(config.reachOutContacts)
80
- ) {
81
- return (
82
- <span className="text-sm text-muted-foreground">
83
- {config.reachOutContacts.length} contact(s)
84
- </span>
85
- )
86
- }
87
- return <span className="text-muted-foreground">-</span>
88
- },
89
- },
90
- ]
91
-
92
- function RouteComponent() {
93
- const trpc = useTRPC()
94
- const queryClient = useQueryClient()
95
- const loaderData = Route.useLoaderData()
96
-
97
- // Use query with loader data as initial data
98
- const { data: approvalMethods = [] } = useQuery({
99
- ...trpc.approvalMethod.list.queryOptions(),
100
- initialData:
101
- 'approvalMethods' in loaderData ? loaderData.approvalMethods : [],
102
- })
103
-
104
- const createMutation = useMutation({
105
- ...trpc.approvalMethod.create.mutationOptions(),
106
- onSuccess: () => {
107
- queryClient.invalidateQueries({
108
- queryKey: trpc.approvalMethod.list.queryKey(),
109
- })
110
- },
111
- })
112
-
113
- const updateMutation = useMutation({
114
- ...trpc.approvalMethod.update.mutationOptions(),
115
- onSuccess: () => {
116
- queryClient.invalidateQueries({
117
- queryKey: trpc.approvalMethod.list.queryKey(),
118
- })
119
- },
120
- })
121
-
122
- const deleteMutation = useMutation({
123
- ...trpc.approvalMethod.delete.mutationOptions(),
124
- onSuccess: () => {
125
- queryClient.invalidateQueries({
126
- queryKey: trpc.approvalMethod.list.queryKey(),
127
- })
128
- },
129
- })
130
-
131
- return (
132
- <div className="p-6">
133
- <CrudList
134
- data={approvalMethods}
135
- columns={columns as any}
136
- getRowId={(item) => item.slug}
137
- title="Approval Methods"
138
- createButtonLabel="Add Method"
139
- emptyMessage="No approval methods configured"
140
- renderForm={({ mode, item, onSubmit, onCancel, isPending }) => (
141
- <ApprovalMethodForm
142
- mode={mode}
143
- initialData={item as any}
144
- onSubmit={onSubmit}
145
- onCancel={onCancel}
146
- isPending={isPending}
147
- />
148
- )}
149
- onCreate={async (data: any) => {
150
- await createMutation.mutateAsync(data)
151
- }}
152
- onUpdate={async (data: any) => {
153
- await updateMutation.mutateAsync(data)
154
- }}
155
- onDelete={async (item) => {
156
- await deleteMutation.mutateAsync({ slug: item.slug })
157
- }}
158
- />
159
- </div>
160
- )
161
- }
@@ -1,10 +0,0 @@
1
- import { Outlet, createFileRoute } from '@tanstack/react-router'
2
-
3
- export const Route = createFileRoute('/admin/approval-methods')({
4
- component: () => <Outlet />,
5
- staticData: {
6
- breadcrumb: {
7
- title: 'Approval Methods',
8
- },
9
- },
10
- })
@@ -1,13 +0,0 @@
1
- import { createFileRoute } from '@tanstack/react-router'
2
- import { AdminChat } from '~/modules/admin-base'
3
-
4
- export const Route = createFileRoute('/admin/chat')({
5
- component: RouteComponent,
6
- staticData: {
7
- breadcrumb: { title: 'Chat' },
8
- },
9
- })
10
-
11
- function RouteComponent() {
12
- return <AdminChat />
13
- }
@@ -1,22 +0,0 @@
1
- import { createFileRoute } from '@tanstack/react-router'
2
- import { IconManagementPage } from '~/modules/icons/IconManagementPage'
3
-
4
- export const Route = createFileRoute('/admin/icons')({
5
- component: IconsAdminPage,
6
- staticData: {
7
- breadcrumb: { title: 'Icons' },
8
- },
9
- })
10
-
11
- function IconsAdminPage() {
12
- return (
13
- <div className="flex-1 flex flex-col">
14
- <div className="border-b px-6 py-4">
15
- <h2 className="text-xl font-semibold">Icons</h2>
16
- </div>
17
- <div className="flex-1 overflow-auto p-6">
18
- <IconManagementPage />
19
- </div>
20
- </div>
21
- )
22
- }
@@ -1,9 +0,0 @@
1
- import { Navigate, createFileRoute } from '@tanstack/react-router'
2
-
3
- export const Route = createFileRoute('/admin/')({
4
- component: AdminIndexPage,
5
- })
6
-
7
- function AdminIndexPage() {
8
- return <Navigate to="/admin/chat" replace />
9
- }
@@ -1,60 +0,0 @@
1
- import { Outlet, createFileRoute } from '@tanstack/react-router'
2
- import { ThemeProvider } from '~/components/theme-provider'
3
- import { AdminConfigProvider, AdminLayout } from '~/modules/admin-base'
4
- import { TopLevelProviders } from '~/ui/layout/TopLevelProviders'
5
- import { AuthorizationError } from '~/errors/AuthorizationError'
6
- import { isAdmin } from '~/modules/auth/authUtils'
7
-
8
- export const Route = createFileRoute('/admin')({
9
- beforeLoad: async ({ context }) => {
10
- // Fetch current user session with groups from tRPC (not better-auth's /api/auth/session)
11
- const session = await context.trpcClient.auth.getSession.query()
12
- const user = session.user
13
-
14
- // Check if user is authenticated
15
- if (!user) {
16
- throw new AuthorizationError({
17
- message: 'You must be logged in to access the admin panel',
18
- resource: 'Admin Panel',
19
- })
20
- }
21
-
22
- // Fetch auth config from backend to get adminGroups
23
- const authConfig = await context.trpcClient.authConfig.query()
24
- const adminGroups = authConfig.adminGroups
25
-
26
- // Check if user has admin role
27
- if (!isAdmin(user, adminGroups)) {
28
- throw new AuthorizationError({
29
- message: 'You need administrator privileges to access this area',
30
- requiredRoles: adminGroups,
31
- resource: 'Admin Panel',
32
- })
33
- }
34
- },
35
- component: AdminLayoutRoute,
36
- staticData: {
37
- breadcrumb: { title: 'Admin' },
38
- },
39
- })
40
-
41
- function AdminLayoutRoute() {
42
- const { queryClient, trpcClient } = Route.useRouteContext()
43
-
44
- return (
45
- <TopLevelProviders queryClient={queryClient} trpcClient={trpcClient}>
46
- <ThemeProvider
47
- attribute="class"
48
- defaultTheme="system"
49
- enableSystem
50
- disableTransitionOnChange
51
- >
52
- <AdminConfigProvider>
53
- <AdminLayout>
54
- <Outlet />
55
- </AdminLayout>
56
- </AdminConfigProvider>
57
- </ThemeProvider>
58
- </TopLevelProviders>
59
- )
60
- }