@igstack/app-catalog-frontend-core 0.2.0 → 0.3.0

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 (192) hide show
  1. package/dist/esm/api/infra/trpc.d.ts +0 -1491
  2. package/dist/esm/modules/appCatalog/context/AppCatalogContext.js +1 -0
  3. package/dist/esm/modules/appCatalog/context/AppCatalogContext.js.map +1 -1
  4. package/dist/esm/modules/appCatalog/ui/filters/FilterBar.js +23 -11
  5. package/dist/esm/modules/appCatalog/ui/filters/FilterBar.js.map +1 -1
  6. package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.d.ts +5 -1
  7. package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js +146 -56
  8. package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js.map +1 -1
  9. package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js +20 -1
  10. package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js.map +1 -1
  11. package/dist/esm/modules/auth/AuthContext.js +1 -1
  12. package/dist/esm/modules/auth/AuthModalContext.js +1 -1
  13. package/dist/esm/modules/auth/authClient.d.ts +2 -2
  14. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js +4 -37
  15. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js.map +1 -1
  16. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js +2 -10
  17. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js.map +1 -1
  18. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/checks.js +1 -1
  19. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js +0 -44
  20. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js.map +1 -1
  21. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js +0 -4
  22. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js.map +1 -1
  23. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js +0 -2
  24. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js.map +1 -1
  25. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js +4 -49
  26. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js.map +1 -1
  27. package/dist/esm/routeTree.gen.d.ts +3 -164
  28. package/dist/esm/routeTree.gen.js +8 -80
  29. package/dist/esm/routeTree.gen.js.map +1 -1
  30. package/dist/esm/ui/button.d.ts +1 -1
  31. package/dist/esm/ui/card.js +1 -48
  32. package/dist/esm/ui/card.js.map +1 -1
  33. package/dist/esm/ui/command.js +1 -15
  34. package/dist/esm/ui/command.js.map +1 -1
  35. package/dist/esm/ui/components/header/Header.js +2 -11
  36. package/dist/esm/ui/components/header/Header.js.map +1 -1
  37. package/dist/esm/ui/input-group.js +125 -0
  38. package/dist/esm/ui/input-group.js.map +1 -0
  39. package/package.json +3 -3
  40. package/src/modules/appCatalog/ui/components/AppDetailModal.tsx +2 -21
  41. package/src/routeTree.gen.ts +2 -220
  42. package/src/ui/components/header/Header.tsx +2 -12
  43. package/dist/esm/components/IconPickerDialog.d.ts +0 -8
  44. package/dist/esm/components/IconPickerDialog.js +0 -98
  45. package/dist/esm/components/IconPickerDialog.js.map +0 -1
  46. package/dist/esm/components/IconPickerField.d.ts +0 -9
  47. package/dist/esm/components/IconPickerField.js +0 -76
  48. package/dist/esm/components/IconPickerField.js.map +0 -1
  49. package/dist/esm/modules/admin-base/components/AdminChat.d.ts +0 -1
  50. package/dist/esm/modules/admin-base/components/AdminChat.js +0 -82
  51. package/dist/esm/modules/admin-base/components/AdminChat.js.map +0 -1
  52. package/dist/esm/modules/admin-base/components/AdminLayout.d.ts +0 -5
  53. package/dist/esm/modules/admin-base/components/AdminLayout.js +0 -83
  54. package/dist/esm/modules/admin-base/components/AdminLayout.js.map +0 -1
  55. package/dist/esm/modules/admin-base/components/AdminWelcome.d.ts +0 -1
  56. package/dist/esm/modules/admin-base/components/AdminWelcome.js +0 -37
  57. package/dist/esm/modules/admin-base/components/AdminWelcome.js.map +0 -1
  58. package/dist/esm/modules/admin-base/context/AdminConfigContext.d.ts +0 -8
  59. package/dist/esm/modules/admin-base/context/AdminConfigContext.js +0 -27
  60. package/dist/esm/modules/admin-base/context/AdminConfigContext.js.map +0 -1
  61. package/dist/esm/modules/admin-base/index.d.ts +0 -5
  62. package/dist/esm/modules/admin-base/types/adminTypes.d.ts +0 -10
  63. package/dist/esm/modules/appCatalog/AppCatalogAdminPage.d.ts +0 -1
  64. package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js +0 -196
  65. package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js.map +0 -1
  66. package/dist/esm/modules/appCatalog/ScreenshotItem.js +0 -57
  67. package/dist/esm/modules/appCatalog/ScreenshotItem.js.map +0 -1
  68. package/dist/esm/modules/appCatalog/ScreenshotManager.js +0 -155
  69. package/dist/esm/modules/appCatalog/ScreenshotManager.js.map +0 -1
  70. package/dist/esm/modules/approvalMethod/AccessRequestFormFields.d.ts +0 -7
  71. package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js +0 -323
  72. package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js.map +0 -1
  73. package/dist/esm/modules/approvalMethod/ApprovalMethodForm.d.ts +0 -14
  74. package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js +0 -227
  75. package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js.map +0 -1
  76. package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.d.ts +0 -7
  77. package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js +0 -124
  78. package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js.map +0 -1
  79. package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.d.ts +0 -381
  80. package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js +0 -26
  81. package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js.map +0 -1
  82. package/dist/esm/modules/auth/authUtils.js +0 -25
  83. package/dist/esm/modules/auth/authUtils.js.map +0 -1
  84. package/dist/esm/modules/icons/IconManagementPage.d.ts +0 -1
  85. package/dist/esm/modules/icons/IconManagementPage.js +0 -177
  86. package/dist/esm/modules/icons/IconManagementPage.js.map +0 -1
  87. 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
  88. 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
  89. 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
  90. 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
  91. 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
  92. 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
  93. 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
  94. 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
  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/dist/resolvers.js +0 -34
  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/dist/resolvers.js.map +0 -1
  97. 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
  98. 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
  99. 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
  100. 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
  101. package/dist/esm/routes/admin/app-for-catalog/$id.d.ts +0 -5
  102. package/dist/esm/routes/admin/app-for-catalog/_id.js +0 -67
  103. package/dist/esm/routes/admin/app-for-catalog/_id.js.map +0 -1
  104. package/dist/esm/routes/admin/app-for-catalog/_id2.js +0 -321
  105. package/dist/esm/routes/admin/app-for-catalog/_id2.js.map +0 -1
  106. package/dist/esm/routes/admin/app-for-catalog/index.d.ts +0 -1
  107. package/dist/esm/routes/admin/app-for-catalog/index.js +0 -9
  108. package/dist/esm/routes/admin/app-for-catalog/index.js.map +0 -1
  109. package/dist/esm/routes/admin/app-for-catalog/index2.js +0 -12
  110. package/dist/esm/routes/admin/app-for-catalog/index2.js.map +0 -1
  111. package/dist/esm/routes/admin/app-for-catalog.d.ts +0 -1
  112. package/dist/esm/routes/admin/app-for-catalog.js +0 -14
  113. package/dist/esm/routes/admin/app-for-catalog.js.map +0 -1
  114. package/dist/esm/routes/admin/app-for-catalog2.js +0 -9
  115. package/dist/esm/routes/admin/app-for-catalog2.js.map +0 -1
  116. package/dist/esm/routes/admin/approval-methods/index.d.ts +0 -32
  117. package/dist/esm/routes/admin/approval-methods/index.js +0 -24
  118. package/dist/esm/routes/admin/approval-methods/index.js.map +0 -1
  119. package/dist/esm/routes/admin/approval-methods/index2.js +0 -100
  120. package/dist/esm/routes/admin/approval-methods/index2.js.map +0 -1
  121. package/dist/esm/routes/admin/approval-methods.d.ts +0 -1
  122. package/dist/esm/routes/admin/approval-methods.js +0 -14
  123. package/dist/esm/routes/admin/approval-methods.js.map +0 -1
  124. package/dist/esm/routes/admin/approval-methods2.js +0 -7
  125. package/dist/esm/routes/admin/approval-methods2.js.map +0 -1
  126. package/dist/esm/routes/admin/chat.d.ts +0 -1
  127. package/dist/esm/routes/admin/chat.js +0 -14
  128. package/dist/esm/routes/admin/chat.js.map +0 -1
  129. package/dist/esm/routes/admin/chat2.js +0 -9
  130. package/dist/esm/routes/admin/chat2.js.map +0 -1
  131. package/dist/esm/routes/admin/icons.d.ts +0 -1
  132. package/dist/esm/routes/admin/icons.js +0 -14
  133. package/dist/esm/routes/admin/icons.js.map +0 -1
  134. package/dist/esm/routes/admin/icons2.js +0 -12
  135. package/dist/esm/routes/admin/icons2.js.map +0 -1
  136. package/dist/esm/routes/admin/index.d.ts +0 -1
  137. package/dist/esm/routes/admin/index.js +0 -9
  138. package/dist/esm/routes/admin/index.js.map +0 -1
  139. package/dist/esm/routes/admin/index2.js +0 -9
  140. package/dist/esm/routes/admin/index2.js.map +0 -1
  141. package/dist/esm/routes/admin.d.ts +0 -1
  142. package/dist/esm/routes/admin.js +0 -37
  143. package/dist/esm/routes/admin.js.map +0 -1
  144. package/dist/esm/routes/admin2.js +0 -18
  145. package/dist/esm/routes/admin2.js.map +0 -1
  146. package/dist/esm/ui/alert-dialog.js +0 -141
  147. package/dist/esm/ui/alert-dialog.js.map +0 -1
  148. package/dist/esm/ui/breadcrumb.js +0 -84
  149. package/dist/esm/ui/breadcrumb.js.map +0 -1
  150. package/dist/esm/ui/components/Breadcrumbs.js +0 -36
  151. package/dist/esm/ui/components/Breadcrumbs.js.map +0 -1
  152. package/dist/esm/ui/crud-list/CrudList.js +0 -189
  153. package/dist/esm/ui/crud-list/CrudList.js.map +0 -1
  154. package/dist/esm/ui/editable-list/EditableListField.js +0 -130
  155. package/dist/esm/ui/editable-list/EditableListField.js.map +0 -1
  156. package/dist/esm/ui/form.js +0 -134
  157. package/dist/esm/ui/form.js.map +0 -1
  158. package/dist/esm/ui/linkExternal.js +0 -26
  159. package/dist/esm/ui/linkExternal.js.map +0 -1
  160. package/dist/esm/ui/markdown-editor/MarkdownEditor.js +0 -116
  161. package/dist/esm/ui/markdown-editor/MarkdownEditor.js.map +0 -1
  162. package/dist/esm/ui/markdown-editor/MarkdownToolbar.js +0 -99
  163. package/dist/esm/ui/markdown-editor/MarkdownToolbar.js.map +0 -1
  164. package/dist/esm/ui/scroll-area.js +0 -62
  165. package/dist/esm/ui/scroll-area.js.map +0 -1
  166. package/dist/esm/ui/select.js +0 -138
  167. package/dist/esm/ui/select.js.map +0 -1
  168. package/dist/esm/ui/textarea.js +0 -19
  169. package/dist/esm/ui/textarea.js.map +0 -1
  170. package/src/components/IconPickerDialog.tsx +0 -136
  171. package/src/components/IconPickerField.tsx +0 -88
  172. package/src/modules/admin-base/components/AdminChat.tsx +0 -122
  173. package/src/modules/admin-base/components/AdminLayout.tsx +0 -111
  174. package/src/modules/admin-base/components/AdminWelcome.tsx +0 -52
  175. package/src/modules/admin-base/context/AdminConfigContext.tsx +0 -36
  176. package/src/modules/admin-base/index.ts +0 -16
  177. package/src/modules/admin-base/types/adminTypes.ts +0 -11
  178. package/src/modules/appCatalog/AppCatalogAdminPage.tsx +0 -274
  179. package/src/modules/approvalMethod/AccessRequestFormFields.tsx +0 -393
  180. package/src/modules/approvalMethod/ApprovalMethodForm.tsx +0 -323
  181. package/src/modules/approvalMethod/ApprovalMethodSelector.tsx +0 -150
  182. package/src/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.ts +0 -34
  183. package/src/modules/icons/IconManagementPage.tsx +0 -245
  184. package/src/routes/admin/app-for-catalog/$id.tsx +0 -571
  185. package/src/routes/admin/app-for-catalog/index.tsx +0 -19
  186. package/src/routes/admin/app-for-catalog.tsx +0 -12
  187. package/src/routes/admin/approval-methods/index.tsx +0 -161
  188. package/src/routes/admin/approval-methods.tsx +0 -10
  189. package/src/routes/admin/chat.tsx +0 -13
  190. package/src/routes/admin/icons.tsx +0 -22
  191. package/src/routes/admin/index.tsx +0 -9
  192. 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
- }