@burdenoff/microfe-bigconsole 2026.716.2 → 2026.716.3

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.
@@ -1,8 +1,9 @@
1
1
  import { ArchiveTemplateDocument as e, CreateTemplateDocument as t, DeleteTemplateDocument as n, DeprecateTemplateDocument as r, GetTemplateDocument as i, InstantiateTemplateDocument as a, ListFeaturedTemplatesDocument as o, ListTemplatesDocument as s, PublishTemplateDocument as c, RateTemplateDocument as l, SearchTemplatesDocument as u, UpdateTemplateDocument as d } from "../../generated/wspace-operations.js";
2
- import { useCallback as f, useState as p } from "react";
3
- import { useApolloClient as m } from "@apollo/client/react";
2
+ import { createBigConsoleQuotaError as f, isBigConsoleQuotaError as p } from "../utils/quota.js";
3
+ import { useCallback as m, useState as h } from "react";
4
+ import { useApolloClient as g } from "@apollo/client/react";
4
5
  //#region src/bigconsole/hooks/useDashboardTemplates.ts
5
- function h(e) {
6
+ function _(e) {
6
7
  return {
7
8
  id: e.id,
8
9
  workspaceId: e.workspaceId,
@@ -32,7 +33,7 @@ function h(e) {
32
33
  updatedAt: e.updatedAt || (/* @__PURE__ */ new Date()).toISOString()
33
34
  };
34
35
  }
35
- function g(e) {
36
+ function v(e) {
36
37
  return {
37
38
  id: e.id,
38
39
  workspaceId: e.workspaceId,
@@ -53,8 +54,8 @@ function g(e) {
53
54
  createdAt: e.createdAt || (/* @__PURE__ */ new Date()).toISOString()
54
55
  };
55
56
  }
56
- function _() {
57
- let [_, v] = p([]), [y, b] = p([]), [x, S] = p(!1), [C, w] = p(null), T = m(), E = [
57
+ function y() {
58
+ let [y, b] = h([]), [x, S] = h([]), [C, w] = h(!1), [T, E] = h(null), D = g(), O = [
58
59
  "ANALYTICS",
59
60
  "OPERATIONS",
60
61
  "SALES",
@@ -62,53 +63,53 @@ function _() {
62
63
  "FINANCE",
63
64
  "HR",
64
65
  "CUSTOM"
65
- ], D = f(async (e) => {
66
+ ], k = m(async (e) => {
66
67
  try {
67
- S(!0), w(null);
68
- let t = ((await T.query({
68
+ w(!0), E(null);
69
+ let t = ((await D.query({
69
70
  query: s,
70
71
  variables: {
71
72
  ...e,
72
73
  first: 100
73
74
  },
74
75
  fetchPolicy: "network-only"
75
- })).data?.listTemplates?.edges || []).map((e) => g(e.node));
76
- return v(t), t;
76
+ })).data?.listTemplates?.edges || []).map((e) => v(e.node));
77
+ return b(t), t;
77
78
  } catch (e) {
78
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to fetch templates")), [];
79
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to fetch templates")), [];
79
80
  } finally {
80
- S(!1);
81
+ w(!1);
81
82
  }
82
- }, [T]);
83
+ }, [D]);
83
84
  return {
84
- templates: _,
85
- featuredTemplates: y,
86
- categories: E,
87
- loading: x,
88
- error: C,
89
- fetchTemplates: D,
90
- fetchFeaturedTemplates: f(async (e) => {
85
+ templates: y,
86
+ featuredTemplates: x,
87
+ categories: O,
88
+ loading: C,
89
+ error: T,
90
+ fetchTemplates: k,
91
+ fetchFeaturedTemplates: m(async (e) => {
91
92
  try {
92
- S(!0), w(null);
93
- let t = ((await T.query({
93
+ w(!0), E(null);
94
+ let t = ((await D.query({
94
95
  query: o,
95
96
  variables: {
96
97
  category: e,
97
98
  first: 50
98
99
  },
99
100
  fetchPolicy: "network-only"
100
- })).data?.listFeaturedTemplates?.edges || []).map((e) => g(e.node));
101
- return b(t), t;
101
+ })).data?.listFeaturedTemplates?.edges || []).map((e) => v(e.node));
102
+ return S(t), t;
102
103
  } catch (e) {
103
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to fetch featured templates")), [];
104
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to fetch featured templates")), [];
104
105
  } finally {
105
- S(!1);
106
+ w(!1);
106
107
  }
107
- }, [T]),
108
- searchTemplates: f(async (e, t, n) => {
108
+ }, [D]),
109
+ searchTemplates: m(async (e, t, n) => {
109
110
  try {
110
- S(!0), w(null);
111
- let r = ((await T.query({
111
+ w(!0), E(null);
112
+ let r = ((await D.query({
112
113
  query: u,
113
114
  variables: {
114
115
  query: e,
@@ -117,104 +118,106 @@ function _() {
117
118
  first: 50
118
119
  },
119
120
  fetchPolicy: "network-only"
120
- })).data?.searchTemplates?.edges || []).map((e) => g(e.node));
121
- return v(r), r;
121
+ })).data?.searchTemplates?.edges || []).map((e) => v(e.node));
122
+ return b(r), r;
122
123
  } catch (e) {
123
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to search templates")), [];
124
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to search templates")), [];
124
125
  } finally {
125
- S(!1);
126
+ w(!1);
126
127
  }
127
- }, [T]),
128
- getTemplate: f(async (e) => {
128
+ }, [D]),
129
+ getTemplate: m(async (e) => {
129
130
  try {
130
- S(!0), w(null);
131
- let t = await T.query({
131
+ w(!0), E(null);
132
+ let t = await D.query({
132
133
  query: i,
133
134
  variables: { id: e },
134
135
  fetchPolicy: "network-only"
135
136
  });
136
- return t.data?.getTemplate ? h(t.data.getTemplate) : null;
137
+ return t.data?.getTemplate ? _(t.data.getTemplate) : null;
137
138
  } catch (e) {
138
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to get template")), null;
139
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to get template")), null;
139
140
  } finally {
140
- S(!1);
141
+ w(!1);
141
142
  }
142
- }, [T]),
143
- createTemplate: f(async (e) => {
143
+ }, [D]),
144
+ createTemplate: m(async (e) => {
144
145
  try {
145
- S(!0), w(null);
146
- let n = await T.mutate({
146
+ w(!0), E(null);
147
+ let n = await D.mutate({
147
148
  mutation: t,
148
149
  variables: { input: e }
149
150
  });
150
151
  if (n.data?.createTemplate) {
151
- let e = h(n.data.createTemplate);
152
- return await D(), e;
152
+ let e = _(n.data.createTemplate);
153
+ return await k(), e;
153
154
  }
154
155
  return null;
155
156
  } catch (e) {
156
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to create template")), null;
157
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to create template")), null;
157
158
  } finally {
158
- S(!1);
159
+ w(!1);
159
160
  }
160
- }, [T, D]),
161
- updateTemplate: f(async (e) => {
161
+ }, [D, k]),
162
+ updateTemplate: m(async (e) => {
162
163
  try {
163
- S(!0), w(null);
164
- let t = await T.mutate({
164
+ w(!0), E(null);
165
+ let t = await D.mutate({
165
166
  mutation: d,
166
167
  variables: { input: e }
167
168
  });
168
169
  if (t.data?.updateTemplate) {
169
- let e = t.data.updateTemplate, n = h(e);
170
- return v((t) => t.map((t) => t.id === n.id ? g(e) : t)), n;
170
+ let e = t.data.updateTemplate, n = _(e);
171
+ return b((t) => t.map((t) => t.id === n.id ? v(e) : t)), n;
171
172
  }
172
173
  return null;
173
174
  } catch (e) {
174
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to update template")), null;
175
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to update template")), null;
175
176
  } finally {
176
- S(!1);
177
+ w(!1);
177
178
  }
178
- }, [T]),
179
- deleteTemplate: f(async (e) => {
179
+ }, [D]),
180
+ deleteTemplate: m(async (e) => {
180
181
  try {
181
- return S(!0), w(null), (await T.mutate({
182
+ return w(!0), E(null), (await D.mutate({
182
183
  mutation: n,
183
184
  variables: { id: e }
184
- })).data?.deleteTemplate ? (v((t) => t.filter((t) => t.id !== e)), b((t) => t.filter((t) => t.id !== e)), !0) : !1;
185
+ })).data?.deleteTemplate ? (b((t) => t.filter((t) => t.id !== e)), S((t) => t.filter((t) => t.id !== e)), !0) : !1;
185
186
  } catch (e) {
186
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to delete template")), !1;
187
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to delete template")), !1;
187
188
  } finally {
188
- S(!1);
189
+ w(!1);
189
190
  }
190
- }, [T]),
191
- instantiateTemplate: f(async (e) => {
191
+ }, [D]),
192
+ instantiateTemplate: m(async (e) => {
192
193
  try {
193
- S(!0), w(null);
194
- let t = await T.mutate({
194
+ w(!0), E(null);
195
+ let t = await D.mutate({
195
196
  mutation: a,
196
197
  variables: { input: e }
197
198
  });
198
- return t.data?.instantiateTemplate ? (v((t) => t.map((t) => t.id === e.templateId ? {
199
+ if (p(t)) throw f(t);
200
+ return t.data?.instantiateTemplate ? (b((t) => t.map((t) => t.id === e.templateId ? {
199
201
  ...t,
200
202
  usageCount: t.usageCount + 1
201
203
  } : t)), t.data.instantiateTemplate) : null;
202
204
  } catch (e) {
203
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to instantiate template")), null;
205
+ if (p(e)) throw e;
206
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to instantiate template")), null;
204
207
  } finally {
205
- S(!1);
208
+ w(!1);
206
209
  }
207
- }, [T]),
208
- rateTemplate: f(async (e) => {
210
+ }, [D]),
211
+ rateTemplate: m(async (e) => {
209
212
  try {
210
- S(!0), w(null);
211
- let t = await T.mutate({
213
+ w(!0), E(null);
214
+ let t = await D.mutate({
212
215
  mutation: l,
213
216
  variables: { input: e }
214
217
  });
215
218
  if (t.data?.rateTemplate) {
216
- let e = h(t.data.rateTemplate);
217
- return v((t) => t.map((t) => t.id === e.id ? {
219
+ let e = _(t.data.rateTemplate);
220
+ return b((t) => t.map((t) => t.id === e.id ? {
218
221
  ...t,
219
222
  rating: e.rating,
220
223
  ratingCount: e.ratingCount
@@ -222,77 +225,77 @@ function _() {
222
225
  }
223
226
  return null;
224
227
  } catch (e) {
225
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to rate template")), null;
228
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to rate template")), null;
226
229
  } finally {
227
- S(!1);
230
+ w(!1);
228
231
  }
229
- }, [T]),
230
- publishTemplate: f(async (e) => {
232
+ }, [D]),
233
+ publishTemplate: m(async (e) => {
231
234
  try {
232
- S(!0), w(null);
233
- let t = await T.mutate({
235
+ w(!0), E(null);
236
+ let t = await D.mutate({
234
237
  mutation: c,
235
238
  variables: { id: e }
236
239
  });
237
240
  if (t.data?.publishTemplate) {
238
- let n = h(t.data.publishTemplate);
239
- return v((t) => t.map((t) => t.id === e ? {
241
+ let n = _(t.data.publishTemplate);
242
+ return b((t) => t.map((t) => t.id === e ? {
240
243
  ...t,
241
244
  status: "ACTIVE"
242
245
  } : t)), n;
243
246
  }
244
247
  return null;
245
248
  } catch (e) {
246
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to publish template")), null;
249
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to publish template")), null;
247
250
  } finally {
248
- S(!1);
251
+ w(!1);
249
252
  }
250
- }, [T]),
251
- deprecateTemplate: f(async (e) => {
253
+ }, [D]),
254
+ deprecateTemplate: m(async (e) => {
252
255
  try {
253
- S(!0), w(null);
254
- let t = await T.mutate({
256
+ w(!0), E(null);
257
+ let t = await D.mutate({
255
258
  mutation: r,
256
259
  variables: { id: e }
257
260
  });
258
261
  if (t.data?.deprecateTemplate) {
259
- let n = h(t.data.deprecateTemplate);
260
- return v((t) => t.map((t) => t.id === e ? {
262
+ let n = _(t.data.deprecateTemplate);
263
+ return b((t) => t.map((t) => t.id === e ? {
261
264
  ...t,
262
265
  status: "DEPRECATED"
263
266
  } : t)), n;
264
267
  }
265
268
  return null;
266
269
  } catch (e) {
267
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to deprecate template")), null;
270
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to deprecate template")), null;
268
271
  } finally {
269
- S(!1);
272
+ w(!1);
270
273
  }
271
- }, [T]),
272
- archiveTemplate: f(async (t) => {
274
+ }, [D]),
275
+ archiveTemplate: m(async (t) => {
273
276
  try {
274
- S(!0), w(null);
275
- let n = await T.mutate({
277
+ w(!0), E(null);
278
+ let n = await D.mutate({
276
279
  mutation: e,
277
280
  variables: { id: t }
278
281
  });
279
282
  if (n.data?.archiveTemplate) {
280
- let e = h(n.data.archiveTemplate);
281
- return v((e) => e.map((e) => e.id === t ? {
283
+ let e = _(n.data.archiveTemplate);
284
+ return b((e) => e.map((e) => e.id === t ? {
282
285
  ...e,
283
286
  status: "ARCHIVED"
284
287
  } : e)), e;
285
288
  }
286
289
  return null;
287
290
  } catch (e) {
288
- return w(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to archive template")), null;
291
+ return E(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to archive template")), null;
289
292
  } finally {
290
- S(!1);
293
+ w(!1);
291
294
  }
292
- }, [T])
295
+ }, [D])
293
296
  };
294
297
  }
295
298
  //#endregion
296
- export { _ as default };
299
+ export { y as default };
297
300
 
298
301
  //# sourceMappingURL=useDashboardTemplates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboardTemplates.js","names":[],"sources":["../../../src/bigconsole/hooks/useDashboardTemplates.ts"],"sourcesContent":["/**\n * useDashboardTemplates Hook\n *\n * Provides operations for managing dashboard templates.\n */\n\nimport { useCallback, useState } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport {\n GetTemplateDocument,\n ListTemplatesDocument,\n ListFeaturedTemplatesDocument,\n SearchTemplatesDocument,\n CreateTemplateDocument,\n UpdateTemplateDocument,\n DeleteTemplateDocument,\n InstantiateTemplateDocument,\n RateTemplateDocument,\n PublishTemplateDocument,\n DeprecateTemplateDocument,\n ArchiveTemplateDocument,\n} from '../../generated/wspace-operations';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type DashboardCategory = 'ANALYTICS' | 'OPERATIONS' | 'SALES' | 'MARKETING' | 'FINANCE' | 'HR' | 'CUSTOM';\nexport type TemplateComplexity = 'BEGINNER' | 'INTERMEDIATE' | 'ADVANCED';\n/**\n * Template author type as per spec (03-graphql-contract.md)\n * Spec values: system, workspace, community\n */\nexport type TemplateAuthorType = 'SYSTEM' | 'WORKSPACE' | 'COMMUNITY';\nexport type TemplateStatus = 'DRAFT' | 'ACTIVE' | 'DEPRECATED' | 'ARCHIVED';\n\nexport interface DashboardTemplate {\n id: string;\n workspaceId?: string;\n tenantId?: string;\n name: string;\n description?: string;\n category: DashboardCategory;\n tags: string[];\n definition: Record<string, unknown>;\n definitionVersion: string;\n placeholders: Record<string, unknown>;\n thumbnailFileId?: string;\n previewUrl?: string;\n authorType: TemplateAuthorType;\n isPublic: boolean;\n isActive: boolean;\n isFeatured: boolean;\n complexity: TemplateComplexity;\n usageCount: number;\n rating?: number;\n ratingCount: number;\n status: TemplateStatus;\n version: number;\n metadata?: Record<string, unknown>;\n createdAt: string;\n createdBy?: string;\n updatedAt: string;\n}\n\nexport interface DashboardTemplateListItem {\n id: string;\n workspaceId?: string;\n name: string;\n description?: string;\n category: DashboardCategory;\n tags: string[];\n thumbnailFileId?: string;\n previewUrl?: string;\n authorType: TemplateAuthorType;\n isPublic: boolean;\n isFeatured: boolean;\n complexity: TemplateComplexity;\n usageCount: number;\n rating?: number;\n ratingCount: number;\n status: TemplateStatus;\n createdAt: string;\n}\n\nexport interface CreateTemplateInput {\n workspaceId?: string;\n name: string;\n description?: string;\n category: DashboardCategory;\n tags?: string[];\n definition: Record<string, unknown>;\n placeholders: Record<string, unknown>;\n thumbnailFileId?: string;\n previewUrl?: string;\n authorType?: TemplateAuthorType;\n isPublic?: boolean;\n isFeatured?: boolean;\n complexity?: TemplateComplexity;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UpdateTemplateInput {\n id: string;\n name?: string;\n description?: string;\n category?: DashboardCategory;\n tags?: string[];\n definition?: Record<string, unknown>;\n placeholders?: Record<string, unknown>;\n thumbnailFileId?: string;\n previewUrl?: string;\n isPublic?: boolean;\n isActive?: boolean;\n isFeatured?: boolean;\n complexity?: TemplateComplexity;\n status?: TemplateStatus;\n metadata?: Record<string, unknown>;\n}\n\nexport interface InstantiateTemplateInput {\n templateId: string;\n name: string;\n description?: string;\n placeholderValues: Record<string, unknown>;\n visibility?: 'PRIVATE' | 'WORKSPACE' | 'PUBLIC';\n metadata?: Record<string, unknown>;\n}\n\nexport interface RateTemplateInput {\n templateId: string;\n rating: number; // 1-5\n}\n\nexport interface ListTemplatesFilters {\n category?: DashboardCategory;\n complexity?: TemplateComplexity;\n authorType?: TemplateAuthorType;\n isFeatured?: boolean;\n status?: TemplateStatus;\n search?: string;\n}\n\nexport interface UseDashboardTemplatesResult {\n templates: DashboardTemplateListItem[];\n featuredTemplates: DashboardTemplateListItem[];\n categories: DashboardCategory[];\n loading: boolean;\n error: Error | null;\n\n // Operations\n fetchTemplates: (filters?: ListTemplatesFilters) => Promise<DashboardTemplateListItem[]>;\n fetchFeaturedTemplates: (category?: DashboardCategory) => Promise<DashboardTemplateListItem[]>;\n searchTemplates: (\n query: string,\n category?: DashboardCategory,\n complexity?: TemplateComplexity\n ) => Promise<DashboardTemplateListItem[]>;\n getTemplate: (id: string) => Promise<DashboardTemplate | null>;\n createTemplate: (input: CreateTemplateInput) => Promise<DashboardTemplate | null>;\n updateTemplate: (input: UpdateTemplateInput) => Promise<DashboardTemplate | null>;\n deleteTemplate: (id: string) => Promise<boolean>;\n instantiateTemplate: (input: InstantiateTemplateInput) => Promise<unknown>;\n rateTemplate: (input: RateTemplateInput) => Promise<DashboardTemplate | null>;\n publishTemplate: (id: string) => Promise<DashboardTemplate | null>;\n deprecateTemplate: (id: string) => Promise<DashboardTemplate | null>;\n archiveTemplate: (id: string) => Promise<DashboardTemplate | null>;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\ninterface RawTemplateData {\n id: string;\n workspaceId?: string;\n tenantId?: string;\n name: string;\n description?: string;\n category: DashboardCategory;\n tags?: string[];\n definition?: Record<string, unknown>;\n definitionVersion?: string;\n placeholders?: Record<string, unknown>;\n thumbnailFileId?: string;\n previewUrl?: string;\n authorType?: TemplateAuthorType;\n isPublic?: boolean;\n isActive?: boolean;\n isFeatured?: boolean;\n complexity?: TemplateComplexity;\n usageCount?: number;\n rating?: number;\n ratingCount?: number;\n status?: TemplateStatus;\n version?: number;\n metadata?: Record<string, unknown>;\n createdAt?: string;\n createdBy?: string;\n updatedAt?: string;\n}\n\nfunction normalizeTemplate(data: RawTemplateData): DashboardTemplate {\n return {\n id: data.id,\n workspaceId: data.workspaceId,\n tenantId: data.tenantId,\n name: data.name,\n description: data.description,\n category: data.category,\n tags: data.tags || [],\n definition: data.definition || {},\n definitionVersion: data.definitionVersion || '1.0',\n placeholders: data.placeholders || {},\n thumbnailFileId: data.thumbnailFileId,\n previewUrl: data.previewUrl,\n authorType: data.authorType || 'WORKSPACE',\n isPublic: data.isPublic ?? false,\n isActive: data.isActive ?? true,\n isFeatured: data.isFeatured ?? false,\n complexity: data.complexity || 'BEGINNER',\n usageCount: data.usageCount || 0,\n rating: data.rating,\n ratingCount: data.ratingCount || 0,\n status: data.status || 'DRAFT',\n version: data.version || 1,\n metadata: data.metadata,\n createdAt: data.createdAt || new Date().toISOString(),\n createdBy: data.createdBy,\n updatedAt: data.updatedAt || new Date().toISOString(),\n };\n}\n\nfunction normalizeTemplateListItem(data: RawTemplateData): DashboardTemplateListItem {\n return {\n id: data.id,\n workspaceId: data.workspaceId,\n name: data.name,\n description: data.description,\n category: data.category,\n tags: data.tags || [],\n thumbnailFileId: data.thumbnailFileId,\n previewUrl: data.previewUrl,\n authorType: data.authorType || 'WORKSPACE',\n isPublic: data.isPublic ?? false,\n isFeatured: data.isFeatured ?? false,\n complexity: data.complexity || 'BEGINNER',\n usageCount: data.usageCount || 0,\n rating: data.rating,\n ratingCount: data.ratingCount || 0,\n status: data.status || 'DRAFT',\n createdAt: data.createdAt || new Date().toISOString(),\n };\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\nexport function useDashboardTemplates(): UseDashboardTemplatesResult {\n const [templates, setTemplates] = useState<DashboardTemplateListItem[]>([]);\n const [featuredTemplates, setFeaturedTemplates] = useState<DashboardTemplateListItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const apolloClient = useApolloClient();\n\n const categories: DashboardCategory[] = ['ANALYTICS', 'OPERATIONS', 'SALES', 'MARKETING', 'FINANCE', 'HR', 'CUSTOM'];\n\n // Fetch templates with filters\n const fetchTemplates = useCallback(\n async (filters?: ListTemplatesFilters): Promise<DashboardTemplateListItem[]> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.query<{ listTemplates?: { edges?: Array<{ node: RawTemplateData }> } }>({\n query: ListTemplatesDocument,\n variables: {\n ...filters,\n first: 100,\n },\n fetchPolicy: 'network-only',\n });\n\n const edges = result.data?.listTemplates?.edges || [];\n const normalizedTemplates = edges.map((edge) => normalizeTemplateListItem(edge.node));\n setTemplates(normalizedTemplates);\n return normalizedTemplates;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch templates');\n setError(error);\n return [];\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Fetch featured templates\n const fetchFeaturedTemplates = useCallback(\n async (category?: DashboardCategory): Promise<DashboardTemplateListItem[]> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.query<{\n listFeaturedTemplates?: { edges?: Array<{ node: RawTemplateData }> };\n }>({\n query: ListFeaturedTemplatesDocument,\n variables: { category, first: 50 },\n fetchPolicy: 'network-only',\n });\n\n const edges = result.data?.listFeaturedTemplates?.edges || [];\n const normalizedTemplates = edges.map((edge) => normalizeTemplateListItem(edge.node));\n setFeaturedTemplates(normalizedTemplates);\n return normalizedTemplates;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch featured templates');\n setError(error);\n return [];\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Search templates\n const searchTemplates = useCallback(\n async (\n query: string,\n category?: DashboardCategory,\n complexity?: TemplateComplexity\n ): Promise<DashboardTemplateListItem[]> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.query<{ searchTemplates?: { edges?: Array<{ node: RawTemplateData }> } }>({\n query: SearchTemplatesDocument,\n variables: { query, category, complexity, first: 50 },\n fetchPolicy: 'network-only',\n });\n\n const edges = result.data?.searchTemplates?.edges || [];\n const normalizedTemplates = edges.map((edge) => normalizeTemplateListItem(edge.node));\n setTemplates(normalizedTemplates);\n return normalizedTemplates;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to search templates');\n setError(error);\n return [];\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Get a specific template\n const getTemplate = useCallback(\n async (id: string): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.query<{ getTemplate?: RawTemplateData }>({\n query: GetTemplateDocument,\n variables: { id },\n fetchPolicy: 'network-only',\n });\n\n if (result.data?.getTemplate) {\n return normalizeTemplate(result.data.getTemplate);\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Create a template\n const createTemplate = useCallback(\n async (input: CreateTemplateInput): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ createTemplate?: RawTemplateData }>({\n mutation: CreateTemplateDocument,\n variables: { input },\n });\n\n if (result.data?.createTemplate) {\n const newTemplate = normalizeTemplate(result.data.createTemplate);\n // Refresh templates list\n await fetchTemplates();\n return newTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to create template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, fetchTemplates]\n );\n\n // Update a template\n const updateTemplate = useCallback(\n async (input: UpdateTemplateInput): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ updateTemplate?: RawTemplateData }>({\n mutation: UpdateTemplateDocument,\n variables: { input },\n });\n\n if (result.data?.updateTemplate) {\n const rawData = result.data.updateTemplate;\n const updatedTemplate = normalizeTemplate(rawData);\n setTemplates((prev) =>\n prev.map((t) => (t.id === updatedTemplate.id ? normalizeTemplateListItem(rawData) : t))\n );\n return updatedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to update template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Delete a template\n const deleteTemplate = useCallback(\n async (id: string): Promise<boolean> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ deleteTemplate?: boolean }>({\n mutation: DeleteTemplateDocument,\n variables: { id },\n });\n\n if (result.data?.deleteTemplate) {\n setTemplates((prev) => prev.filter((t) => t.id !== id));\n setFeaturedTemplates((prev) => prev.filter((t) => t.id !== id));\n return true;\n }\n\n return false;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to delete template');\n setError(error);\n return false;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Instantiate a template to create a dashboard\n const instantiateTemplate = useCallback(\n async (input: InstantiateTemplateInput): Promise<unknown> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ instantiateTemplate?: unknown }>({\n mutation: InstantiateTemplateDocument,\n variables: { input },\n });\n\n if (result.data?.instantiateTemplate) {\n // Update usage count locally\n setTemplates((prev) =>\n prev.map((t) => (t.id === input.templateId ? { ...t, usageCount: t.usageCount + 1 } : t))\n );\n return result.data.instantiateTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to instantiate template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Rate a template\n const rateTemplate = useCallback(\n async (input: RateTemplateInput): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ rateTemplate?: RawTemplateData }>({\n mutation: RateTemplateDocument,\n variables: { input },\n });\n\n if (result.data?.rateTemplate) {\n const ratedTemplate = normalizeTemplate(result.data.rateTemplate);\n setTemplates((prev) =>\n prev.map((t) =>\n t.id === ratedTemplate.id\n ? { ...t, rating: ratedTemplate.rating, ratingCount: ratedTemplate.ratingCount }\n : t\n )\n );\n return ratedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to rate template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Publish a template\n const publishTemplate = useCallback(\n async (id: string): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ publishTemplate?: RawTemplateData }>({\n mutation: PublishTemplateDocument,\n variables: { id },\n });\n\n if (result.data?.publishTemplate) {\n const publishedTemplate = normalizeTemplate(result.data.publishTemplate);\n setTemplates((prev) => prev.map((t) => (t.id === id ? { ...t, status: 'ACTIVE' as TemplateStatus } : t)));\n return publishedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to publish template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Deprecate a template\n const deprecateTemplate = useCallback(\n async (id: string): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ deprecateTemplate?: RawTemplateData }>({\n mutation: DeprecateTemplateDocument,\n variables: { id },\n });\n\n if (result.data?.deprecateTemplate) {\n const deprecatedTemplate = normalizeTemplate(result.data.deprecateTemplate);\n setTemplates((prev) => prev.map((t) => (t.id === id ? { ...t, status: 'DEPRECATED' as TemplateStatus } : t)));\n return deprecatedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to deprecate template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Archive a template\n const archiveTemplate = useCallback(\n async (id: string): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ archiveTemplate?: RawTemplateData }>({\n mutation: ArchiveTemplateDocument,\n variables: { id },\n });\n\n if (result.data?.archiveTemplate) {\n const archivedTemplate = normalizeTemplate(result.data.archiveTemplate);\n setTemplates((prev) => prev.map((t) => (t.id === id ? { ...t, status: 'ARCHIVED' as TemplateStatus } : t)));\n return archivedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to archive template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n return {\n templates,\n featuredTemplates,\n categories,\n loading,\n error,\n fetchTemplates,\n fetchFeaturedTemplates,\n searchTemplates,\n getTemplate,\n createTemplate,\n updateTemplate,\n deleteTemplate,\n instantiateTemplate,\n rateTemplate,\n publishTemplate,\n deprecateTemplate,\n archiveTemplate,\n };\n}\n\nexport default useDashboardTemplates;\n"],"mappings":"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"}
1
+ {"version":3,"file":"useDashboardTemplates.js","names":[],"sources":["../../../src/bigconsole/hooks/useDashboardTemplates.ts"],"sourcesContent":["/**\n * useDashboardTemplates Hook\n *\n * Provides operations for managing dashboard templates.\n */\n\nimport { useCallback, useState } from 'react';\nimport { useApolloClient } from '@apollo/client/react';\nimport { createBigConsoleQuotaError, isBigConsoleQuotaError } from '../utils/quota';\nimport {\n GetTemplateDocument,\n ListTemplatesDocument,\n ListFeaturedTemplatesDocument,\n SearchTemplatesDocument,\n CreateTemplateDocument,\n UpdateTemplateDocument,\n DeleteTemplateDocument,\n InstantiateTemplateDocument,\n RateTemplateDocument,\n PublishTemplateDocument,\n DeprecateTemplateDocument,\n ArchiveTemplateDocument,\n} from '../../generated/wspace-operations';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type DashboardCategory = 'ANALYTICS' | 'OPERATIONS' | 'SALES' | 'MARKETING' | 'FINANCE' | 'HR' | 'CUSTOM';\nexport type TemplateComplexity = 'BEGINNER' | 'INTERMEDIATE' | 'ADVANCED';\n/**\n * Template author type as per spec (03-graphql-contract.md)\n * Spec values: system, workspace, community\n */\nexport type TemplateAuthorType = 'SYSTEM' | 'WORKSPACE' | 'COMMUNITY';\nexport type TemplateStatus = 'DRAFT' | 'ACTIVE' | 'DEPRECATED' | 'ARCHIVED';\n\nexport interface DashboardTemplate {\n id: string;\n workspaceId?: string;\n tenantId?: string;\n name: string;\n description?: string;\n category: DashboardCategory;\n tags: string[];\n definition: Record<string, unknown>;\n definitionVersion: string;\n placeholders: Record<string, unknown>;\n thumbnailFileId?: string;\n previewUrl?: string;\n authorType: TemplateAuthorType;\n isPublic: boolean;\n isActive: boolean;\n isFeatured: boolean;\n complexity: TemplateComplexity;\n usageCount: number;\n rating?: number;\n ratingCount: number;\n status: TemplateStatus;\n version: number;\n metadata?: Record<string, unknown>;\n createdAt: string;\n createdBy?: string;\n updatedAt: string;\n}\n\nexport interface DashboardTemplateListItem {\n id: string;\n workspaceId?: string;\n name: string;\n description?: string;\n category: DashboardCategory;\n tags: string[];\n thumbnailFileId?: string;\n previewUrl?: string;\n authorType: TemplateAuthorType;\n isPublic: boolean;\n isFeatured: boolean;\n complexity: TemplateComplexity;\n usageCount: number;\n rating?: number;\n ratingCount: number;\n status: TemplateStatus;\n createdAt: string;\n}\n\nexport interface CreateTemplateInput {\n workspaceId?: string;\n name: string;\n description?: string;\n category: DashboardCategory;\n tags?: string[];\n definition: Record<string, unknown>;\n placeholders: Record<string, unknown>;\n thumbnailFileId?: string;\n previewUrl?: string;\n authorType?: TemplateAuthorType;\n isPublic?: boolean;\n isFeatured?: boolean;\n complexity?: TemplateComplexity;\n metadata?: Record<string, unknown>;\n}\n\nexport interface UpdateTemplateInput {\n id: string;\n name?: string;\n description?: string;\n category?: DashboardCategory;\n tags?: string[];\n definition?: Record<string, unknown>;\n placeholders?: Record<string, unknown>;\n thumbnailFileId?: string;\n previewUrl?: string;\n isPublic?: boolean;\n isActive?: boolean;\n isFeatured?: boolean;\n complexity?: TemplateComplexity;\n status?: TemplateStatus;\n metadata?: Record<string, unknown>;\n}\n\nexport interface InstantiateTemplateInput {\n templateId: string;\n name: string;\n description?: string;\n placeholderValues: Record<string, unknown>;\n visibility?: 'PRIVATE' | 'WORKSPACE' | 'PUBLIC';\n metadata?: Record<string, unknown>;\n}\n\nexport interface RateTemplateInput {\n templateId: string;\n rating: number; // 1-5\n}\n\nexport interface ListTemplatesFilters {\n category?: DashboardCategory;\n complexity?: TemplateComplexity;\n authorType?: TemplateAuthorType;\n isFeatured?: boolean;\n status?: TemplateStatus;\n search?: string;\n}\n\nexport interface UseDashboardTemplatesResult {\n templates: DashboardTemplateListItem[];\n featuredTemplates: DashboardTemplateListItem[];\n categories: DashboardCategory[];\n loading: boolean;\n error: Error | null;\n\n // Operations\n fetchTemplates: (filters?: ListTemplatesFilters) => Promise<DashboardTemplateListItem[]>;\n fetchFeaturedTemplates: (category?: DashboardCategory) => Promise<DashboardTemplateListItem[]>;\n searchTemplates: (\n query: string,\n category?: DashboardCategory,\n complexity?: TemplateComplexity\n ) => Promise<DashboardTemplateListItem[]>;\n getTemplate: (id: string) => Promise<DashboardTemplate | null>;\n createTemplate: (input: CreateTemplateInput) => Promise<DashboardTemplate | null>;\n updateTemplate: (input: UpdateTemplateInput) => Promise<DashboardTemplate | null>;\n deleteTemplate: (id: string) => Promise<boolean>;\n instantiateTemplate: (input: InstantiateTemplateInput) => Promise<unknown>;\n rateTemplate: (input: RateTemplateInput) => Promise<DashboardTemplate | null>;\n publishTemplate: (id: string) => Promise<DashboardTemplate | null>;\n deprecateTemplate: (id: string) => Promise<DashboardTemplate | null>;\n archiveTemplate: (id: string) => Promise<DashboardTemplate | null>;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\ninterface RawTemplateData {\n id: string;\n workspaceId?: string;\n tenantId?: string;\n name: string;\n description?: string;\n category: DashboardCategory;\n tags?: string[];\n definition?: Record<string, unknown>;\n definitionVersion?: string;\n placeholders?: Record<string, unknown>;\n thumbnailFileId?: string;\n previewUrl?: string;\n authorType?: TemplateAuthorType;\n isPublic?: boolean;\n isActive?: boolean;\n isFeatured?: boolean;\n complexity?: TemplateComplexity;\n usageCount?: number;\n rating?: number;\n ratingCount?: number;\n status?: TemplateStatus;\n version?: number;\n metadata?: Record<string, unknown>;\n createdAt?: string;\n createdBy?: string;\n updatedAt?: string;\n}\n\nfunction normalizeTemplate(data: RawTemplateData): DashboardTemplate {\n return {\n id: data.id,\n workspaceId: data.workspaceId,\n tenantId: data.tenantId,\n name: data.name,\n description: data.description,\n category: data.category,\n tags: data.tags || [],\n definition: data.definition || {},\n definitionVersion: data.definitionVersion || '1.0',\n placeholders: data.placeholders || {},\n thumbnailFileId: data.thumbnailFileId,\n previewUrl: data.previewUrl,\n authorType: data.authorType || 'WORKSPACE',\n isPublic: data.isPublic ?? false,\n isActive: data.isActive ?? true,\n isFeatured: data.isFeatured ?? false,\n complexity: data.complexity || 'BEGINNER',\n usageCount: data.usageCount || 0,\n rating: data.rating,\n ratingCount: data.ratingCount || 0,\n status: data.status || 'DRAFT',\n version: data.version || 1,\n metadata: data.metadata,\n createdAt: data.createdAt || new Date().toISOString(),\n createdBy: data.createdBy,\n updatedAt: data.updatedAt || new Date().toISOString(),\n };\n}\n\nfunction normalizeTemplateListItem(data: RawTemplateData): DashboardTemplateListItem {\n return {\n id: data.id,\n workspaceId: data.workspaceId,\n name: data.name,\n description: data.description,\n category: data.category,\n tags: data.tags || [],\n thumbnailFileId: data.thumbnailFileId,\n previewUrl: data.previewUrl,\n authorType: data.authorType || 'WORKSPACE',\n isPublic: data.isPublic ?? false,\n isFeatured: data.isFeatured ?? false,\n complexity: data.complexity || 'BEGINNER',\n usageCount: data.usageCount || 0,\n rating: data.rating,\n ratingCount: data.ratingCount || 0,\n status: data.status || 'DRAFT',\n createdAt: data.createdAt || new Date().toISOString(),\n };\n}\n\n// ============================================================================\n// Hook\n// ============================================================================\n\nexport function useDashboardTemplates(): UseDashboardTemplatesResult {\n const [templates, setTemplates] = useState<DashboardTemplateListItem[]>([]);\n const [featuredTemplates, setFeaturedTemplates] = useState<DashboardTemplateListItem[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const apolloClient = useApolloClient();\n\n const categories: DashboardCategory[] = ['ANALYTICS', 'OPERATIONS', 'SALES', 'MARKETING', 'FINANCE', 'HR', 'CUSTOM'];\n\n // Fetch templates with filters\n const fetchTemplates = useCallback(\n async (filters?: ListTemplatesFilters): Promise<DashboardTemplateListItem[]> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.query<{ listTemplates?: { edges?: Array<{ node: RawTemplateData }> } }>({\n query: ListTemplatesDocument,\n variables: {\n ...filters,\n first: 100,\n },\n fetchPolicy: 'network-only',\n });\n\n const edges = result.data?.listTemplates?.edges || [];\n const normalizedTemplates = edges.map((edge) => normalizeTemplateListItem(edge.node));\n setTemplates(normalizedTemplates);\n return normalizedTemplates;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch templates');\n setError(error);\n return [];\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Fetch featured templates\n const fetchFeaturedTemplates = useCallback(\n async (category?: DashboardCategory): Promise<DashboardTemplateListItem[]> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.query<{\n listFeaturedTemplates?: { edges?: Array<{ node: RawTemplateData }> };\n }>({\n query: ListFeaturedTemplatesDocument,\n variables: { category, first: 50 },\n fetchPolicy: 'network-only',\n });\n\n const edges = result.data?.listFeaturedTemplates?.edges || [];\n const normalizedTemplates = edges.map((edge) => normalizeTemplateListItem(edge.node));\n setFeaturedTemplates(normalizedTemplates);\n return normalizedTemplates;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to fetch featured templates');\n setError(error);\n return [];\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Search templates\n const searchTemplates = useCallback(\n async (\n query: string,\n category?: DashboardCategory,\n complexity?: TemplateComplexity\n ): Promise<DashboardTemplateListItem[]> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.query<{ searchTemplates?: { edges?: Array<{ node: RawTemplateData }> } }>({\n query: SearchTemplatesDocument,\n variables: { query, category, complexity, first: 50 },\n fetchPolicy: 'network-only',\n });\n\n const edges = result.data?.searchTemplates?.edges || [];\n const normalizedTemplates = edges.map((edge) => normalizeTemplateListItem(edge.node));\n setTemplates(normalizedTemplates);\n return normalizedTemplates;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to search templates');\n setError(error);\n return [];\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Get a specific template\n const getTemplate = useCallback(\n async (id: string): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.query<{ getTemplate?: RawTemplateData }>({\n query: GetTemplateDocument,\n variables: { id },\n fetchPolicy: 'network-only',\n });\n\n if (result.data?.getTemplate) {\n return normalizeTemplate(result.data.getTemplate);\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to get template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Create a template\n const createTemplate = useCallback(\n async (input: CreateTemplateInput): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ createTemplate?: RawTemplateData }>({\n mutation: CreateTemplateDocument,\n variables: { input },\n });\n\n if (result.data?.createTemplate) {\n const newTemplate = normalizeTemplate(result.data.createTemplate);\n // Refresh templates list\n await fetchTemplates();\n return newTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to create template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient, fetchTemplates]\n );\n\n // Update a template\n const updateTemplate = useCallback(\n async (input: UpdateTemplateInput): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ updateTemplate?: RawTemplateData }>({\n mutation: UpdateTemplateDocument,\n variables: { input },\n });\n\n if (result.data?.updateTemplate) {\n const rawData = result.data.updateTemplate;\n const updatedTemplate = normalizeTemplate(rawData);\n setTemplates((prev) =>\n prev.map((t) => (t.id === updatedTemplate.id ? normalizeTemplateListItem(rawData) : t))\n );\n return updatedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to update template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Delete a template\n const deleteTemplate = useCallback(\n async (id: string): Promise<boolean> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ deleteTemplate?: boolean }>({\n mutation: DeleteTemplateDocument,\n variables: { id },\n });\n\n if (result.data?.deleteTemplate) {\n setTemplates((prev) => prev.filter((t) => t.id !== id));\n setFeaturedTemplates((prev) => prev.filter((t) => t.id !== id));\n return true;\n }\n\n return false;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to delete template');\n setError(error);\n return false;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Instantiate a template to create a dashboard\n const instantiateTemplate = useCallback(\n async (input: InstantiateTemplateInput): Promise<unknown> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ instantiateTemplate?: unknown }>({\n mutation: InstantiateTemplateDocument,\n variables: { input },\n });\n\n if (isBigConsoleQuotaError(result)) {\n throw createBigConsoleQuotaError(result);\n }\n\n if (result.data?.instantiateTemplate) {\n // Update usage count locally\n setTemplates((prev) =>\n prev.map((t) => (t.id === input.templateId ? { ...t, usageCount: t.usageCount + 1 } : t))\n );\n return result.data.instantiateTemplate;\n }\n\n return null;\n } catch (err) {\n if (isBigConsoleQuotaError(err)) {\n throw err;\n }\n const error = err instanceof Error ? err : new Error('Failed to instantiate template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Rate a template\n const rateTemplate = useCallback(\n async (input: RateTemplateInput): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ rateTemplate?: RawTemplateData }>({\n mutation: RateTemplateDocument,\n variables: { input },\n });\n\n if (result.data?.rateTemplate) {\n const ratedTemplate = normalizeTemplate(result.data.rateTemplate);\n setTemplates((prev) =>\n prev.map((t) =>\n t.id === ratedTemplate.id\n ? { ...t, rating: ratedTemplate.rating, ratingCount: ratedTemplate.ratingCount }\n : t\n )\n );\n return ratedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to rate template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Publish a template\n const publishTemplate = useCallback(\n async (id: string): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ publishTemplate?: RawTemplateData }>({\n mutation: PublishTemplateDocument,\n variables: { id },\n });\n\n if (result.data?.publishTemplate) {\n const publishedTemplate = normalizeTemplate(result.data.publishTemplate);\n setTemplates((prev) => prev.map((t) => (t.id === id ? { ...t, status: 'ACTIVE' as TemplateStatus } : t)));\n return publishedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to publish template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Deprecate a template\n const deprecateTemplate = useCallback(\n async (id: string): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ deprecateTemplate?: RawTemplateData }>({\n mutation: DeprecateTemplateDocument,\n variables: { id },\n });\n\n if (result.data?.deprecateTemplate) {\n const deprecatedTemplate = normalizeTemplate(result.data.deprecateTemplate);\n setTemplates((prev) => prev.map((t) => (t.id === id ? { ...t, status: 'DEPRECATED' as TemplateStatus } : t)));\n return deprecatedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to deprecate template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n // Archive a template\n const archiveTemplate = useCallback(\n async (id: string): Promise<DashboardTemplate | null> => {\n try {\n setLoading(true);\n setError(null);\n\n const result = await apolloClient.mutate<{ archiveTemplate?: RawTemplateData }>({\n mutation: ArchiveTemplateDocument,\n variables: { id },\n });\n\n if (result.data?.archiveTemplate) {\n const archivedTemplate = normalizeTemplate(result.data.archiveTemplate);\n setTemplates((prev) => prev.map((t) => (t.id === id ? { ...t, status: 'ARCHIVED' as TemplateStatus } : t)));\n return archivedTemplate;\n }\n\n return null;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to archive template');\n setError(error);\n return null;\n } finally {\n setLoading(false);\n }\n },\n [apolloClient]\n );\n\n return {\n templates,\n featuredTemplates,\n categories,\n loading,\n error,\n fetchTemplates,\n fetchFeaturedTemplates,\n searchTemplates,\n getTemplate,\n createTemplate,\n updateTemplate,\n deleteTemplate,\n instantiateTemplate,\n rateTemplate,\n publishTemplate,\n deprecateTemplate,\n archiveTemplate,\n };\n}\n\nexport default useDashboardTemplates;\n"],"mappings":"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"}