@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,124 +0,0 @@
1
- import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
- import { useState } from "react";
3
- import { useQueryClient, useQuery, useMutation } from "@tanstack/react-query";
4
- import { ChevronsUpDown, Check, Plus } from "lucide-react";
5
- import { useTRPC } from "../../api/infra/trpc.js";
6
- import { cn } from "../../lib/utils.js";
7
- import { Button } from "../../ui/button.js";
8
- import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator } from "../../ui/command.js";
9
- import { Popover, PopoverTrigger, PopoverContent } from "../../ui/popover.js";
10
- import { Dialog, DialogContent, DialogHeader, DialogTitle } from "../../ui/dialog.js";
11
- import { Badge } from "../../ui/badge.js";
12
- import { ApprovalMethodForm } from "./ApprovalMethodForm.js";
13
- import { ApiQueryMagazineApprovalMethod } from "./api/ApiQueryMagazineApprovalMethod.js";
14
- function ApprovalMethodSelector({
15
- value,
16
- onChange,
17
- disabled = false
18
- }) {
19
- const [open, setOpen] = useState(false);
20
- const [showQuickAdd, setShowQuickAdd] = useState(false);
21
- const trpc = useTRPC();
22
- const queryClient = useQueryClient();
23
- const { data: methods = [] } = useQuery(ApiQueryMagazineApprovalMethod.list());
24
- const createMutation = useMutation({
25
- ...trpc.approvalMethod.create.mutationOptions(),
26
- onSuccess: (newMethod) => {
27
- queryClient.invalidateQueries({
28
- queryKey: ["approvalMethod"]
29
- });
30
- onChange(newMethod.slug);
31
- setShowQuickAdd(false);
32
- }
33
- });
34
- const selectedMethod = methods.find((m) => m.slug === value);
35
- const TYPE_LABELS = {
36
- service: "Service",
37
- personTeam: "Person/Team",
38
- custom: "Custom"
39
- };
40
- return /* @__PURE__ */ jsxs(Fragment, { children: [
41
- /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, children: [
42
- /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
43
- Button,
44
- {
45
- variant: "outline",
46
- role: "combobox",
47
- "aria-expanded": open,
48
- className: "w-full justify-between",
49
- disabled,
50
- children: [
51
- selectedMethod ? /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", children: [
52
- selectedMethod.displayName,
53
- /* @__PURE__ */ jsx(Badge, { variant: "secondary", className: "text-xs", children: TYPE_LABELS[selectedMethod.type] })
54
- ] }) : /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "Select approval method..." }),
55
- /* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })
56
- ]
57
- }
58
- ) }),
59
- /* @__PURE__ */ jsx(PopoverContent, { className: "w-[400px] p-0", children: /* @__PURE__ */ jsxs(Command, { children: [
60
- /* @__PURE__ */ jsx(CommandInput, { placeholder: "Search methods..." }),
61
- /* @__PURE__ */ jsxs(CommandList, { children: [
62
- /* @__PURE__ */ jsx(CommandEmpty, { children: "No methods found." }),
63
- /* @__PURE__ */ jsx(CommandGroup, { children: methods.map((method) => /* @__PURE__ */ jsxs(
64
- CommandItem,
65
- {
66
- value: method.displayName,
67
- onSelect: () => {
68
- onChange(method.slug);
69
- setOpen(false);
70
- },
71
- children: [
72
- /* @__PURE__ */ jsx(
73
- Check,
74
- {
75
- className: cn(
76
- "mr-2 h-4 w-4",
77
- value === method.slug ? "opacity-100" : "opacity-0"
78
- )
79
- }
80
- ),
81
- /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", children: [
82
- method.displayName,
83
- /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "text-xs", children: TYPE_LABELS[method.type] })
84
- ] })
85
- ]
86
- },
87
- method.slug
88
- )) }),
89
- /* @__PURE__ */ jsx(CommandSeparator, {}),
90
- /* @__PURE__ */ jsx(CommandGroup, { children: /* @__PURE__ */ jsxs(
91
- CommandItem,
92
- {
93
- onSelect: () => {
94
- setOpen(false);
95
- setShowQuickAdd(true);
96
- },
97
- children: [
98
- /* @__PURE__ */ jsx(Plus, { className: "mr-2 h-4 w-4" }),
99
- "Create new method..."
100
- ]
101
- }
102
- ) })
103
- ] })
104
- ] }) })
105
- ] }),
106
- /* @__PURE__ */ jsx(Dialog, { open: showQuickAdd, onOpenChange: setShowQuickAdd, children: /* @__PURE__ */ jsxs(DialogContent, { children: [
107
- /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: "Create Approval Method" }) }),
108
- /* @__PURE__ */ jsx(
109
- ApprovalMethodForm,
110
- {
111
- mode: "create",
112
- initialData: null,
113
- onSubmit: (data) => createMutation.mutate(data),
114
- onCancel: () => setShowQuickAdd(false),
115
- isPending: createMutation.isPending
116
- }
117
- )
118
- ] }) })
119
- ] });
120
- }
121
- export {
122
- ApprovalMethodSelector
123
- };
124
- //# sourceMappingURL=ApprovalMethodSelector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ApprovalMethodSelector.js","sources":["../../../../src/modules/approvalMethod/ApprovalMethodSelector.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { Check, ChevronsUpDown, Plus } from 'lucide-react'\nimport { useTRPC } from '~/api/infra/trpc'\nimport { cn } from '~/lib/utils'\nimport { Button } from '~/ui/button'\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n} from '~/ui/command'\nimport { Popover, PopoverContent, PopoverTrigger } from '~/ui/popover'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '~/ui/dialog'\nimport { Badge } from '~/ui/badge'\nimport { ApprovalMethodForm } from './ApprovalMethodForm'\nimport { ApiQueryMagazineApprovalMethod } from './api/ApiQueryMagazineApprovalMethod'\n\ninterface ApprovalMethodSelectorProps {\n value: string | undefined\n onChange: (value: string | undefined) => void\n disabled?: boolean\n}\n\nexport function ApprovalMethodSelector({\n value,\n onChange,\n disabled = false,\n}: ApprovalMethodSelectorProps) {\n const [open, setOpen] = useState(false)\n const [showQuickAdd, setShowQuickAdd] = useState(false)\n\n const trpc = useTRPC()\n const queryClient = useQueryClient()\n\n const { data: methods = [] } = useQuery(ApiQueryMagazineApprovalMethod.list())\n\n const createMutation = useMutation({\n ...trpc.approvalMethod.create.mutationOptions(),\n onSuccess: (newMethod) => {\n queryClient.invalidateQueries({\n queryKey: ['approvalMethod'],\n })\n onChange(newMethod.slug)\n setShowQuickAdd(false)\n },\n })\n\n const selectedMethod = methods.find((m) => m.slug === value)\n\n const TYPE_LABELS: Record<string, string> = {\n service: 'Service',\n personTeam: 'Person/Team',\n custom: 'Custom',\n }\n\n return (\n <>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n className=\"w-full justify-between\"\n disabled={disabled}\n >\n {selectedMethod ? (\n <span className=\"flex items-center gap-2\">\n {selectedMethod.displayName}\n <Badge variant=\"secondary\" className=\"text-xs\">\n {TYPE_LABELS[selectedMethod.type]}\n </Badge>\n </span>\n ) : (\n <span className=\"text-muted-foreground\">\n Select approval method...\n </span>\n )}\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[400px] p-0\">\n <Command>\n <CommandInput placeholder=\"Search methods...\" />\n <CommandList>\n <CommandEmpty>No methods found.</CommandEmpty>\n <CommandGroup>\n {methods.map((method) => (\n <CommandItem\n key={method.slug}\n value={method.displayName}\n onSelect={() => {\n onChange(method.slug)\n setOpen(false)\n }}\n >\n <Check\n className={cn(\n 'mr-2 h-4 w-4',\n value === method.slug ? 'opacity-100' : 'opacity-0',\n )}\n />\n <span className=\"flex items-center gap-2\">\n {method.displayName}\n <Badge variant=\"outline\" className=\"text-xs\">\n {TYPE_LABELS[method.type]}\n </Badge>\n </span>\n </CommandItem>\n ))}\n </CommandGroup>\n <CommandSeparator />\n <CommandGroup>\n <CommandItem\n onSelect={() => {\n setOpen(false)\n setShowQuickAdd(true)\n }}\n >\n <Plus className=\"mr-2 h-4 w-4\" />\n Create new method...\n </CommandItem>\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n\n {/* Quick Add Dialog */}\n <Dialog open={showQuickAdd} onOpenChange={setShowQuickAdd}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Create Approval Method</DialogTitle>\n </DialogHeader>\n <ApprovalMethodForm\n mode=\"create\"\n initialData={null}\n onSubmit={(data) => createMutation.mutate(data)}\n onCancel={() => setShowQuickAdd(false)}\n isPending={createMutation.isPending}\n />\n </DialogContent>\n </Dialog>\n </>\n )\n}\n"],"names":[],"mappings":"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"}
@@ -1,381 +0,0 @@
1
- /**
2
- * Query options for ApprovalMethod data.
3
- *
4
- * Note: We let tRPC infer the return types directly rather than using
5
- * the backend's ApprovalMethod type, because tRPC serializes Date → string
6
- * over JSON. This ensures end-to-end type safety without manual casting.
7
- */
8
- export declare class ApiQueryMagazineApprovalMethod {
9
- static list(): import('@tanstack/react-query').OmitKeyof<import('@tanstack/react-query').UseQueryOptions<({
10
- slug: string;
11
- displayName: string;
12
- type: "service";
13
- config: {
14
- icon?: string | undefined;
15
- url?: string | undefined;
16
- };
17
- createdAt?: string | undefined;
18
- updatedAt?: string | undefined;
19
- } | {
20
- slug: string;
21
- displayName: string;
22
- type: "personTeam";
23
- config: {
24
- reachOutContacts?: {
25
- displayName: string;
26
- contact: string;
27
- }[] | undefined;
28
- };
29
- createdAt?: string | undefined;
30
- updatedAt?: string | undefined;
31
- } | {
32
- slug: string;
33
- displayName: string;
34
- type: "custom";
35
- config: Record<never, never>;
36
- createdAt?: string | undefined;
37
- updatedAt?: string | undefined;
38
- })[], Error, ({
39
- slug: string;
40
- displayName: string;
41
- type: "service";
42
- config: {
43
- icon?: string | undefined;
44
- url?: string | undefined;
45
- };
46
- createdAt?: string | undefined;
47
- updatedAt?: string | undefined;
48
- } | {
49
- slug: string;
50
- displayName: string;
51
- type: "personTeam";
52
- config: {
53
- reachOutContacts?: {
54
- displayName: string;
55
- contact: string;
56
- }[] | undefined;
57
- };
58
- createdAt?: string | undefined;
59
- updatedAt?: string | undefined;
60
- } | {
61
- slug: string;
62
- displayName: string;
63
- type: "custom";
64
- config: Record<never, never>;
65
- createdAt?: string | undefined;
66
- updatedAt?: string | undefined;
67
- })[], readonly ["approvalMethod", "list"]>, "queryFn"> & {
68
- queryFn?: import('@tanstack/react-query').QueryFunction<({
69
- slug: string;
70
- displayName: string;
71
- type: "service";
72
- config: {
73
- icon?: string | undefined;
74
- url?: string | undefined;
75
- };
76
- createdAt?: string | undefined;
77
- updatedAt?: string | undefined;
78
- } | {
79
- slug: string;
80
- displayName: string;
81
- type: "personTeam";
82
- config: {
83
- reachOutContacts?: {
84
- displayName: string;
85
- contact: string;
86
- }[] | undefined;
87
- };
88
- createdAt?: string | undefined;
89
- updatedAt?: string | undefined;
90
- } | {
91
- slug: string;
92
- displayName: string;
93
- type: "custom";
94
- config: Record<never, never>;
95
- createdAt?: string | undefined;
96
- updatedAt?: string | undefined;
97
- })[], readonly ["approvalMethod", "list"], never> | undefined;
98
- } & {
99
- queryKey: readonly ["approvalMethod", "list"] & {
100
- [dataTagSymbol]: ({
101
- slug: string;
102
- displayName: string;
103
- type: "service";
104
- config: {
105
- icon?: string | undefined;
106
- url?: string | undefined;
107
- };
108
- createdAt?: string | undefined;
109
- updatedAt?: string | undefined;
110
- } | {
111
- slug: string;
112
- displayName: string;
113
- type: "personTeam";
114
- config: {
115
- reachOutContacts?: {
116
- displayName: string;
117
- contact: string;
118
- }[] | undefined;
119
- };
120
- createdAt?: string | undefined;
121
- updatedAt?: string | undefined;
122
- } | {
123
- slug: string;
124
- displayName: string;
125
- type: "custom";
126
- config: Record<never, never>;
127
- createdAt?: string | undefined;
128
- updatedAt?: string | undefined;
129
- })[];
130
- [dataTagErrorSymbol]: Error;
131
- };
132
- };
133
- static getById(slug: string): import('@tanstack/react-query').OmitKeyof<import('@tanstack/react-query').UseQueryOptions<{
134
- slug: string;
135
- displayName: string;
136
- type: "service";
137
- config: {
138
- icon?: string | undefined;
139
- url?: string | undefined;
140
- };
141
- createdAt?: string | undefined;
142
- updatedAt?: string | undefined;
143
- } | {
144
- slug: string;
145
- displayName: string;
146
- type: "personTeam";
147
- config: {
148
- reachOutContacts?: {
149
- displayName: string;
150
- contact: string;
151
- }[] | undefined;
152
- };
153
- createdAt?: string | undefined;
154
- updatedAt?: string | undefined;
155
- } | {
156
- slug: string;
157
- displayName: string;
158
- type: "custom";
159
- config: Record<never, never>;
160
- createdAt?: string | undefined;
161
- updatedAt?: string | undefined;
162
- } | null, Error, {
163
- slug: string;
164
- displayName: string;
165
- type: "service";
166
- config: {
167
- icon?: string | undefined;
168
- url?: string | undefined;
169
- };
170
- createdAt?: string | undefined;
171
- updatedAt?: string | undefined;
172
- } | {
173
- slug: string;
174
- displayName: string;
175
- type: "personTeam";
176
- config: {
177
- reachOutContacts?: {
178
- displayName: string;
179
- contact: string;
180
- }[] | undefined;
181
- };
182
- createdAt?: string | undefined;
183
- updatedAt?: string | undefined;
184
- } | {
185
- slug: string;
186
- displayName: string;
187
- type: "custom";
188
- config: Record<never, never>;
189
- createdAt?: string | undefined;
190
- updatedAt?: string | undefined;
191
- } | null, readonly ["approvalMethod", "getById", string]>, "queryFn"> & {
192
- queryFn?: import('@tanstack/react-query').QueryFunction<{
193
- slug: string;
194
- displayName: string;
195
- type: "service";
196
- config: {
197
- icon?: string | undefined;
198
- url?: string | undefined;
199
- };
200
- createdAt?: string | undefined;
201
- updatedAt?: string | undefined;
202
- } | {
203
- slug: string;
204
- displayName: string;
205
- type: "personTeam";
206
- config: {
207
- reachOutContacts?: {
208
- displayName: string;
209
- contact: string;
210
- }[] | undefined;
211
- };
212
- createdAt?: string | undefined;
213
- updatedAt?: string | undefined;
214
- } | {
215
- slug: string;
216
- displayName: string;
217
- type: "custom";
218
- config: Record<never, never>;
219
- createdAt?: string | undefined;
220
- updatedAt?: string | undefined;
221
- } | null, readonly ["approvalMethod", "getById", string], never> | undefined;
222
- } & {
223
- queryKey: readonly ["approvalMethod", "getById", string] & {
224
- [dataTagSymbol]: {
225
- slug: string;
226
- displayName: string;
227
- type: "service";
228
- config: {
229
- icon?: string | undefined;
230
- url?: string | undefined;
231
- };
232
- createdAt?: string | undefined;
233
- updatedAt?: string | undefined;
234
- } | {
235
- slug: string;
236
- displayName: string;
237
- type: "personTeam";
238
- config: {
239
- reachOutContacts?: {
240
- displayName: string;
241
- contact: string;
242
- }[] | undefined;
243
- };
244
- createdAt?: string | undefined;
245
- updatedAt?: string | undefined;
246
- } | {
247
- slug: string;
248
- displayName: string;
249
- type: "custom";
250
- config: Record<never, never>;
251
- createdAt?: string | undefined;
252
- updatedAt?: string | undefined;
253
- } | null;
254
- [dataTagErrorSymbol]: Error;
255
- };
256
- };
257
- static listByType(type: 'service' | 'personTeam' | 'custom'): import('@tanstack/react-query').OmitKeyof<import('@tanstack/react-query').UseQueryOptions<({
258
- slug: string;
259
- displayName: string;
260
- type: "service";
261
- config: {
262
- icon?: string | undefined;
263
- url?: string | undefined;
264
- };
265
- createdAt?: string | undefined;
266
- updatedAt?: string | undefined;
267
- } | {
268
- slug: string;
269
- displayName: string;
270
- type: "personTeam";
271
- config: {
272
- reachOutContacts?: {
273
- displayName: string;
274
- contact: string;
275
- }[] | undefined;
276
- };
277
- createdAt?: string | undefined;
278
- updatedAt?: string | undefined;
279
- } | {
280
- slug: string;
281
- displayName: string;
282
- type: "custom";
283
- config: Record<never, never>;
284
- createdAt?: string | undefined;
285
- updatedAt?: string | undefined;
286
- })[], Error, ({
287
- slug: string;
288
- displayName: string;
289
- type: "service";
290
- config: {
291
- icon?: string | undefined;
292
- url?: string | undefined;
293
- };
294
- createdAt?: string | undefined;
295
- updatedAt?: string | undefined;
296
- } | {
297
- slug: string;
298
- displayName: string;
299
- type: "personTeam";
300
- config: {
301
- reachOutContacts?: {
302
- displayName: string;
303
- contact: string;
304
- }[] | undefined;
305
- };
306
- createdAt?: string | undefined;
307
- updatedAt?: string | undefined;
308
- } | {
309
- slug: string;
310
- displayName: string;
311
- type: "custom";
312
- config: Record<never, never>;
313
- createdAt?: string | undefined;
314
- updatedAt?: string | undefined;
315
- })[], readonly ["approvalMethod", "listByType", "service" | "personTeam" | "custom"]>, "queryFn"> & {
316
- queryFn?: import('@tanstack/react-query').QueryFunction<({
317
- slug: string;
318
- displayName: string;
319
- type: "service";
320
- config: {
321
- icon?: string | undefined;
322
- url?: string | undefined;
323
- };
324
- createdAt?: string | undefined;
325
- updatedAt?: string | undefined;
326
- } | {
327
- slug: string;
328
- displayName: string;
329
- type: "personTeam";
330
- config: {
331
- reachOutContacts?: {
332
- displayName: string;
333
- contact: string;
334
- }[] | undefined;
335
- };
336
- createdAt?: string | undefined;
337
- updatedAt?: string | undefined;
338
- } | {
339
- slug: string;
340
- displayName: string;
341
- type: "custom";
342
- config: Record<never, never>;
343
- createdAt?: string | undefined;
344
- updatedAt?: string | undefined;
345
- })[], readonly ["approvalMethod", "listByType", "service" | "personTeam" | "custom"], never> | undefined;
346
- } & {
347
- queryKey: readonly ["approvalMethod", "listByType", "service" | "personTeam" | "custom"] & {
348
- [dataTagSymbol]: ({
349
- slug: string;
350
- displayName: string;
351
- type: "service";
352
- config: {
353
- icon?: string | undefined;
354
- url?: string | undefined;
355
- };
356
- createdAt?: string | undefined;
357
- updatedAt?: string | undefined;
358
- } | {
359
- slug: string;
360
- displayName: string;
361
- type: "personTeam";
362
- config: {
363
- reachOutContacts?: {
364
- displayName: string;
365
- contact: string;
366
- }[] | undefined;
367
- };
368
- createdAt?: string | undefined;
369
- updatedAt?: string | undefined;
370
- } | {
371
- slug: string;
372
- displayName: string;
373
- type: "custom";
374
- config: Record<never, never>;
375
- createdAt?: string | undefined;
376
- updatedAt?: string | undefined;
377
- })[];
378
- [dataTagErrorSymbol]: Error;
379
- };
380
- };
381
- }
@@ -1,26 +0,0 @@
1
- import { queryOptions } from "@tanstack/react-query";
2
- import { getTrpcFromMeta } from "../../../util/reactQueryUtils.js";
3
- class ApiQueryMagazineApprovalMethod {
4
- static list() {
5
- return queryOptions({
6
- queryKey: ["approvalMethod", "list"],
7
- queryFn: (ctx) => getTrpcFromMeta(ctx).approvalMethod.list.query()
8
- });
9
- }
10
- static getById(slug) {
11
- return queryOptions({
12
- queryKey: ["approvalMethod", "getById", slug],
13
- queryFn: (ctx) => getTrpcFromMeta(ctx).approvalMethod.getById.query({ slug })
14
- });
15
- }
16
- static listByType(type) {
17
- return queryOptions({
18
- queryKey: ["approvalMethod", "listByType", type],
19
- queryFn: (ctx) => getTrpcFromMeta(ctx).approvalMethod.listByType.query({ type })
20
- });
21
- }
22
- }
23
- export {
24
- ApiQueryMagazineApprovalMethod
25
- };
26
- //# sourceMappingURL=ApiQueryMagazineApprovalMethod.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ApiQueryMagazineApprovalMethod.js","sources":["../../../../../src/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.ts"],"sourcesContent":["import { queryOptions } from '@tanstack/react-query'\nimport { getTrpcFromMeta } from '~/util/reactQueryUtils'\n\n/**\n * Query options for ApprovalMethod data.\n *\n * Note: We let tRPC infer the return types directly rather than using\n * the backend's ApprovalMethod type, because tRPC serializes Date → string\n * over JSON. This ensures end-to-end type safety without manual casting.\n */\nexport class ApiQueryMagazineApprovalMethod {\n static list() {\n return queryOptions({\n queryKey: ['approvalMethod', 'list'] as const,\n queryFn: (ctx) => getTrpcFromMeta(ctx).approvalMethod.list.query(),\n })\n }\n\n static getById(slug: string) {\n return queryOptions({\n queryKey: ['approvalMethod', 'getById', slug] as const,\n queryFn: (ctx) =>\n getTrpcFromMeta(ctx).approvalMethod.getById.query({ slug }),\n })\n }\n\n static listByType(type: 'service' | 'personTeam' | 'custom') {\n return queryOptions({\n queryKey: ['approvalMethod', 'listByType', type] as const,\n queryFn: (ctx) =>\n getTrpcFromMeta(ctx).approvalMethod.listByType.query({ type }),\n })\n }\n}\n"],"names":[],"mappings":";;AAUO,MAAM,+BAA+B;AAAA,EAC1C,OAAO,OAAO;AACZ,WAAO,aAAa;AAAA,MAClB,UAAU,CAAC,kBAAkB,MAAM;AAAA,MACnC,SAAS,CAAC,QAAQ,gBAAgB,GAAG,EAAE,eAAe,KAAK,MAAA;AAAA,IAAM,CAClE;AAAA,EACH;AAAA,EAEA,OAAO,QAAQ,MAAc;AAC3B,WAAO,aAAa;AAAA,MAClB,UAAU,CAAC,kBAAkB,WAAW,IAAI;AAAA,MAC5C,SAAS,CAAC,QACR,gBAAgB,GAAG,EAAE,eAAe,QAAQ,MAAM,EAAE,KAAA,CAAM;AAAA,IAAA,CAC7D;AAAA,EACH;AAAA,EAEA,OAAO,WAAW,MAA2C;AAC3D,WAAO,aAAa;AAAA,MAClB,UAAU,CAAC,kBAAkB,cAAc,IAAI;AAAA,MAC/C,SAAS,CAAC,QACR,gBAAgB,GAAG,EAAE,eAAe,WAAW,MAAM,EAAE,KAAA,CAAM;AAAA,IAAA,CAChE;AAAA,EACH;AACF;"}
@@ -1,25 +0,0 @@
1
- function getUserGroups(user) {
2
- if (!user) {
3
- return [];
4
- }
5
- const groups = user.groups || // Standard "groups" claim
6
- user.env_hopper_groups || // Custom env_hopper_groups claim
7
- user.oktaGroups || // Okta-specific
8
- user.roles || // Some providers use "roles"
9
- [];
10
- return Array.isArray(groups) ? groups : [];
11
- }
12
- function isMemberOfAnyGroup(user, allowedGroups) {
13
- const userGroups = getUserGroups(user);
14
- return allowedGroups.some((group) => userGroups.includes(group));
15
- }
16
- function isAdmin(user, adminGroups = ["env_hopper_ui_super_admins"]) {
17
- if (!user) {
18
- return false;
19
- }
20
- return isMemberOfAnyGroup(user, adminGroups);
21
- }
22
- export {
23
- isAdmin
24
- };
25
- //# sourceMappingURL=authUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"authUtils.js","sources":["../../../../src/modules/auth/authUtils.ts"],"sourcesContent":["/**\n * Extract groups from user object\n */\nfunction getUserGroups(user: any): Array<string> {\n if (!user) {\n return []\n }\n\n // Check common locations for group information\n const groups =\n user.groups || // Standard \"groups\" claim\n user.env_hopper_groups || // Custom env_hopper_groups claim\n user.oktaGroups || // Okta-specific\n user.roles || // Some providers use \"roles\"\n []\n\n return Array.isArray(groups) ? groups : []\n}\n\n/**\n * Check if user is a member of any of the specified groups\n */\nfunction isMemberOfAnyGroup(user: any, allowedGroups: Array<string>): boolean {\n const userGroups = getUserGroups(user)\n return allowedGroups.some((group) => userGroups.includes(group))\n}\n\n/**\n * Check if user has admin permissions\n * @param user User object\n * @param adminGroups Admin group names (fetched from backend via authConfig endpoint)\n */\nexport function isAdmin(\n user: any,\n adminGroups: Array<string> = ['env_hopper_ui_super_admins'],\n): boolean {\n if (!user) {\n return false\n }\n return isMemberOfAnyGroup(user, adminGroups)\n}\n"],"names":[],"mappings":"AAGA,SAAS,cAAc,MAA0B;AAC/C,MAAI,CAAC,MAAM;AACT,WAAO,CAAA;AAAA,EACT;AAGA,QAAM,SACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,CAAA;AAEF,SAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAA;AAC1C;AAKA,SAAS,mBAAmB,MAAW,eAAuC;AAC5E,QAAM,aAAa,cAAc,IAAI;AACrC,SAAO,cAAc,KAAK,CAAC,UAAU,WAAW,SAAS,KAAK,CAAC;AACjE;AAOO,SAAS,QACd,MACA,cAA6B,CAAC,4BAA4B,GACjD;AACT,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,SAAO,mBAAmB,MAAM,WAAW;AAC7C;"}
@@ -1 +0,0 @@
1
- export declare function IconManagementPage(): import("react/jsx-runtime").JSX.Element;