@burdenoff/microfe-tours 2026.514.1 → 2026.518.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/global-operations.d.ts +49 -0
- package/dist/generated/global-operations.d.ts.map +1 -1
- package/dist/generated/global-operations.js +84 -62
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +1 -1
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/dist/tours/hooks/useTourBuilder.d.ts.map +1 -1
- package/dist/tours/hooks/useTourBuilder.js +22 -20
- package/dist/tours/hooks/useTourBuilder.js.map +1 -1
- package/dist/tours/hooks/useTourLifecycle.d.ts.map +1 -1
- package/dist/tours/hooks/useTourLifecycle.js +31 -18
- package/dist/tours/hooks/useTourLifecycle.js.map +1 -1
- package/dist/tours/pages/TourBuilderPage.d.ts.map +1 -1
- package/dist/tours/pages/TourBuilderPage.js +556 -182
- package/dist/tours/pages/TourBuilderPage.js.map +1 -1
- package/dist/tours/pages/TourPreviewPage.js +3 -3
- package/dist/tours/pages/ToursListPage.d.ts.map +1 -1
- package/dist/tours/pages/ToursListPage.js +156 -155
- package/dist/tours/pages/ToursListPage.js.map +1 -1
- package/dist/tours/store/toursStore.d.ts +2 -0
- package/dist/tours/store/toursStore.d.ts.map +1 -1
- package/dist/tours/store/toursStore.js +2 -0
- package/dist/tours/store/toursStore.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTourBuilder.d.ts","sourceRoot":"","sources":["../../../src/tours/hooks/useTourBuilder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAmB,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAqBnG;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useTourBuilder.d.ts","sourceRoot":"","sources":["../../../src/tours/hooks/useTourBuilder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAmB,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAqBnG;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM;;;;;;;;;mBA0B/B,MAAM;wBAkCH,OAAO,CAAC,IAAI,CAAC;;;;;;;;;qBAkEhB,MAAM,SAAS,OAAO,CAAC,IAAI,CAAC;;;;;;;;qBAoD5B,MAAM;6BA+BG,MAAM,SAAS,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;EAiGhD"}
|
|
@@ -6,7 +6,7 @@ import { useNavigate as l } from "react-router-dom";
|
|
|
6
6
|
import { useGatewayClient as u } from "@burdenoff/fe-libs/shared/graphql";
|
|
7
7
|
//#region src/tours/hooks/useTourBuilder.ts
|
|
8
8
|
function d(d) {
|
|
9
|
-
let p = u("global"), m = l(), { basePath: h = "/" } = e(), [g, _] = c(null), [v, y] = c(!1), [b, x] = c(!1), [S, C] = c(!1), { selectedTour: w, stepSequence: T, isDirty: E, validationErrors: D, setSelectedTour: O, updateStepSequence: k, validateTour: A, setDirty: j } = o(),
|
|
9
|
+
let p = u("global"), m = l(), { basePath: h = "/" } = e(), [g, _] = c(null), [v, y] = c(!1), [b, x] = c(!1), [S, C] = c(!1), { selectedTour: w, stepSequence: T, isDirty: E, validationErrors: D, setSelectedTour: O, updateStepSequence: k, validateTour: A, setDirty: j, notifyToursListChanged: M } = o(), N = s(async (e) => {
|
|
10
10
|
y(!0), _(null);
|
|
11
11
|
try {
|
|
12
12
|
let t = await p.query({
|
|
@@ -26,7 +26,7 @@ function d(d) {
|
|
|
26
26
|
p,
|
|
27
27
|
O,
|
|
28
28
|
k
|
|
29
|
-
]),
|
|
29
|
+
]), P = s(async (e) => {
|
|
30
30
|
x(!0), _(null);
|
|
31
31
|
try {
|
|
32
32
|
let n = e.slug || (e.name || "tour").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""), r = {
|
|
@@ -51,7 +51,7 @@ function d(d) {
|
|
|
51
51
|
mutation: t,
|
|
52
52
|
variables: { input: r }
|
|
53
53
|
})).data;
|
|
54
|
-
return i?.createTour ? (O(i.createTour), m(`${h}/${i.createTour.id}/steps`), i.createTour) : null;
|
|
54
|
+
return i?.createTour ? (O(i.createTour), M(), m(`${h}/${i.createTour.id}/steps`), i.createTour) : null;
|
|
55
55
|
} catch (e) {
|
|
56
56
|
throw _(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to create tour")), e;
|
|
57
57
|
} finally {
|
|
@@ -61,8 +61,9 @@ function d(d) {
|
|
|
61
61
|
p,
|
|
62
62
|
h,
|
|
63
63
|
m,
|
|
64
|
+
M,
|
|
64
65
|
O
|
|
65
|
-
]),
|
|
66
|
+
]), F = s(async (e, t) => {
|
|
66
67
|
x(!0), _(null);
|
|
67
68
|
try {
|
|
68
69
|
let n = {
|
|
@@ -90,25 +91,26 @@ function d(d) {
|
|
|
90
91
|
input: n
|
|
91
92
|
}
|
|
92
93
|
})).data;
|
|
93
|
-
return r?.updateTour ? r.updateTour : null;
|
|
94
|
+
return r?.updateTour ? (M(), r.updateTour) : null;
|
|
94
95
|
} catch (e) {
|
|
95
96
|
throw _(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to update tour")), e;
|
|
96
97
|
} finally {
|
|
97
98
|
x(!1);
|
|
98
99
|
}
|
|
99
|
-
}, [p]),
|
|
100
|
+
}, [p, M]), I = s(async (e) => {
|
|
100
101
|
C(!0), _(null);
|
|
101
102
|
try {
|
|
102
|
-
|
|
103
|
+
let t = (await p.mutate({
|
|
103
104
|
mutation: n,
|
|
104
105
|
variables: { id: e }
|
|
105
|
-
})).data
|
|
106
|
+
})).data;
|
|
107
|
+
return t?.deleteTour && M(), t?.deleteTour ?? !1;
|
|
106
108
|
} catch (e) {
|
|
107
109
|
throw _(e instanceof Error ? e : /* @__PURE__ */ Error("Failed to delete tour")), e;
|
|
108
110
|
} finally {
|
|
109
111
|
C(!1);
|
|
110
112
|
}
|
|
111
|
-
}, [p]),
|
|
113
|
+
}, [p, M]), L = s(async (e, t) => {
|
|
112
114
|
x(!0), _(null);
|
|
113
115
|
try {
|
|
114
116
|
let n = t.map((e, t) => ({
|
|
@@ -155,29 +157,29 @@ function d(d) {
|
|
|
155
157
|
loading: v,
|
|
156
158
|
deleting: S,
|
|
157
159
|
error: g,
|
|
158
|
-
loadTour:
|
|
159
|
-
createTour:
|
|
160
|
-
updateTour:
|
|
161
|
-
deleteTour:
|
|
162
|
-
syncSteps:
|
|
160
|
+
loadTour: N,
|
|
161
|
+
createTour: P,
|
|
162
|
+
updateTour: F,
|
|
163
|
+
deleteTour: I,
|
|
164
|
+
syncSteps: L,
|
|
163
165
|
saveTour: s(async () => {
|
|
164
166
|
if (A().length > 0) throw Error("Validation failed");
|
|
165
167
|
if (!w) throw Error("No tour selected");
|
|
166
|
-
if (w.id && !w.id.startsWith("temp_")) await
|
|
168
|
+
if (w.id && !w.id.startsWith("temp_")) await F(w.id, w);
|
|
167
169
|
else {
|
|
168
|
-
let e = await
|
|
169
|
-
e && E && T.length > 0 && await
|
|
170
|
+
let e = await P(w);
|
|
171
|
+
e && E && T.length > 0 && await L(e.id, T);
|
|
170
172
|
return;
|
|
171
173
|
}
|
|
172
|
-
E && w.id && await
|
|
174
|
+
E && w.id && await L(w.id, T);
|
|
173
175
|
}, [
|
|
174
176
|
w,
|
|
175
177
|
T,
|
|
176
178
|
E,
|
|
177
179
|
A,
|
|
178
|
-
N,
|
|
179
180
|
P,
|
|
180
|
-
|
|
181
|
+
F,
|
|
182
|
+
L
|
|
181
183
|
])
|
|
182
184
|
};
|
|
183
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTourBuilder.js","names":[],"sources":["../../../src/tours/hooks/useTourBuilder.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { useGatewayClient } from '@burdenoff/fe-libs/shared/graphql';\nimport { useNavigate } from 'react-router-dom';\nimport { useToursStore } from '../store/toursStore';\nimport { useToursContext } from '../providers/ToursProvider';\nimport type { Tour, TourStep } from '../types';\nimport type { TourStatus, TourTriggerType, TourStepPlacement } from '../../generated/global-types';\nimport {\n CreateTourDocument,\n UpdateTourDocument,\n DeleteTourDocument,\n GetTourDocument,\n SyncTourStepsDocument,\n} from '../../generated/global-operations';\nimport type {\n GetTourQuery,\n GetTourQueryVariables,\n CreateTourMutation,\n CreateTourMutationVariables,\n UpdateTourMutation,\n UpdateTourMutationVariables,\n DeleteTourMutation,\n DeleteTourMutationVariables,\n SyncTourStepsMutation,\n SyncTourStepsMutationVariables,\n} from '../../generated/global-operations';\n\n/**\n * Hook for tour builder functionality\n * Manages tour creation, editing, and step synchronization\n * Uses the gateway client from fe-libs\n */\nexport function useTourBuilder(tourId?: string) {\n const globalClient = useGatewayClient('global');\n const navigate = useNavigate();\n const { basePath = '/' } = useToursContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n const [deleting, setDeleting] = useState(false);\n\n const {\n selectedTour,\n stepSequence,\n isDirty,\n validationErrors,\n setSelectedTour,\n updateStepSequence,\n validateTour,\n setDirty,\n } = useToursStore();\n\n /**\n * Load tour data\n */\n const loadTour = useCallback(\n async (id: string) => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await globalClient.query<GetTourQuery, GetTourQueryVariables>({\n query: GetTourDocument,\n variables: { id },\n fetchPolicy: 'network-only',\n });\n\n if (result.error) {\n throw result.error;\n }\n\n const { data } = result;\n\n if (data?.tour) {\n setSelectedTour(data.tour as Tour);\n updateStepSequence((data.tour.steps || []) as TourStep[]);\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load tour'));\n } finally {\n setLoading(false);\n }\n },\n [globalClient, setSelectedTour, updateStepSequence]\n );\n\n /**\n * Create new tour\n */\n const createTour = useCallback(\n async (input: Partial<Tour>) => {\n setSaving(true);\n setError(null);\n\n try {\n // Generate slug from name if not provided\n const slug =\n input.slug ||\n (input.name || 'tour')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n\n const createInput = {\n name: input.name || '',\n slug,\n productId: input.productId || 'workspaces',\n description: normalizeOptionalString(input.description),\n moduleId: normalizeOptionalString(input.moduleId),\n pageId: normalizeOptionalString(input.pageId),\n status: (input.status || 'DRAFT') as TourStatus,\n isActive: input.isActive ?? true,\n triggerType: (input.triggerType || 'MANUAL') as TourTriggerType,\n triggerConfig: input.triggerConfig,\n priority: input.priority ?? 50,\n displayOrder: input.displayOrder ?? 1,\n startDate: normalizeOptionalString(input.startDate),\n endDate: normalizeOptionalString(input.endDate),\n mobileConfig: input.mobileConfig,\n tabletConfig: input.tabletConfig,\n desktopConfig: input.desktopConfig,\n };\n\n const result = await globalClient.mutate<CreateTourMutation, CreateTourMutationVariables>({\n mutation: CreateTourDocument,\n variables: { input: createInput },\n });\n\n const data = result.data;\n\n if (data?.createTour) {\n setSelectedTour(data.createTour as Tour);\n\n // Navigate to step editor\n const editPath = `${basePath}/${data.createTour.id}/steps`;\n navigate(editPath);\n\n return data.createTour;\n }\n\n return null;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to create tour'));\n throw err;\n } finally {\n setSaving(false);\n }\n },\n [globalClient, basePath, navigate, setSelectedTour]\n );\n\n /**\n * Update existing tour\n */\n const updateTour = useCallback(\n async (id: string, input: Partial<Tour>) => {\n setSaving(true);\n setError(null);\n\n try {\n const updateInput = {\n name: input.name,\n slug: input.slug,\n description: normalizeOptionalString(input.description),\n productId: normalizeOptionalString(input.productId),\n moduleId: normalizeOptionalString(input.moduleId),\n pageId: normalizeOptionalString(input.pageId),\n status: input.status as TourStatus | undefined,\n isActive: input.isActive,\n triggerType: input.triggerType as TourTriggerType | undefined,\n triggerConfig: input.triggerConfig,\n priority: input.priority,\n displayOrder: input.displayOrder,\n startDate: normalizeOptionalString(input.startDate),\n endDate: normalizeOptionalString(input.endDate),\n mobileConfig: input.mobileConfig,\n tabletConfig: input.tabletConfig,\n desktopConfig: input.desktopConfig,\n };\n\n const result = await globalClient.mutate<UpdateTourMutation, UpdateTourMutationVariables>({\n mutation: UpdateTourDocument,\n variables: { id, input: updateInput },\n });\n\n const data = result.data;\n\n if (data?.updateTour) {\n return data.updateTour;\n }\n\n return null;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to update tour'));\n throw err;\n } finally {\n setSaving(false);\n }\n },\n [globalClient]\n );\n\n /**\n * Delete tour\n */\n const deleteTour = useCallback(\n async (id: string) => {\n setDeleting(true);\n setError(null);\n\n try {\n const result = await globalClient.mutate<DeleteTourMutation, DeleteTourMutationVariables>({\n mutation: DeleteTourDocument,\n variables: { id },\n });\n\n const data = result.data;\n\n return data?.deleteTour ?? false;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to delete tour'));\n throw err;\n } finally {\n setDeleting(false);\n }\n },\n [globalClient]\n );\n\n /**\n * Sync tour steps\n */\n const syncSteps = useCallback(\n async (tourIdParam: string, steps: TourStep[]) => {\n setSaving(true);\n setError(null);\n\n try {\n const stepsInput = steps.map((s, index) => ({\n id: s.id?.startsWith('temp_') ? undefined : s.id,\n title: s.title,\n content: s.content,\n stepOrder: s.stepOrder ?? index + 1,\n targetSelector: s.targetSelector || '',\n placement: (s.placement || 'BOTTOM') as TourStepPlacement,\n targetSelectorMobile: s.targetSelectorMobile,\n targetSelectorTablet: s.targetSelectorTablet,\n targetSelectorDesktop: s.targetSelectorDesktop,\n customData: s.customData,\n actions: s.actions,\n requireInteraction: s.requireInteraction,\n waitForSelector: s.waitForSelector,\n waitForEvent: s.waitForEvent,\n waitForTimeout: s.waitForTimeout,\n skipConditions: s.skipConditions,\n }));\n\n const result = await globalClient.mutate<\n SyncTourStepsMutation,\n SyncTourStepsMutationVariables\n >({\n mutation: SyncTourStepsDocument,\n variables: { tourId: tourIdParam, steps: stepsInput },\n });\n\n const data = result.data;\n\n if (data?.syncTourSteps) {\n updateStepSequence(data.syncTourSteps as TourStep[]);\n setDirty(false);\n return data.syncTourSteps;\n }\n\n return null;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to sync steps'));\n throw err;\n } finally {\n setSaving(false);\n }\n },\n [globalClient, updateStepSequence, setDirty]\n );\n\n /**\n * Save tour with validation\n */\n const saveTour = useCallback(async () => {\n const errors = validateTour();\n if (errors.length > 0) {\n throw new Error('Validation failed');\n }\n\n if (!selectedTour) {\n throw new Error('No tour selected');\n }\n\n // Update tour metadata\n if (selectedTour.id && !selectedTour.id.startsWith('temp_')) {\n await updateTour(selectedTour.id, selectedTour);\n } else {\n const created = await createTour(selectedTour);\n if (created && isDirty && stepSequence.length > 0) {\n await syncSteps(created.id, stepSequence);\n }\n return;\n }\n\n // Sync steps\n if (isDirty && selectedTour.id) {\n await syncSteps(selectedTour.id, stepSequence);\n }\n }, [selectedTour, stepSequence, isDirty, validateTour, createTour, updateTour, syncSteps]);\n\n return {\n tour: selectedTour,\n steps: stepSequence,\n isDirty,\n validationErrors,\n saving,\n loading,\n deleting,\n error,\n loadTour,\n createTour,\n updateTour,\n deleteTour,\n syncSteps,\n saveTour,\n };\n}\n\nfunction normalizeOptionalString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return value as string | undefined;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTourBuilder.js","names":[],"sources":["../../../src/tours/hooks/useTourBuilder.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { useGatewayClient } from '@burdenoff/fe-libs/shared/graphql';\nimport { useNavigate } from 'react-router-dom';\nimport { useToursStore } from '../store/toursStore';\nimport { useToursContext } from '../providers/ToursProvider';\nimport type { Tour, TourStep } from '../types';\nimport type { TourStatus, TourTriggerType, TourStepPlacement } from '../../generated/global-types';\nimport {\n CreateTourDocument,\n UpdateTourDocument,\n DeleteTourDocument,\n GetTourDocument,\n SyncTourStepsDocument,\n} from '../../generated/global-operations';\nimport type {\n GetTourQuery,\n GetTourQueryVariables,\n CreateTourMutation,\n CreateTourMutationVariables,\n UpdateTourMutation,\n UpdateTourMutationVariables,\n DeleteTourMutation,\n DeleteTourMutationVariables,\n SyncTourStepsMutation,\n SyncTourStepsMutationVariables,\n} from '../../generated/global-operations';\n\n/**\n * Hook for tour builder functionality\n * Manages tour creation, editing, and step synchronization\n * Uses the gateway client from fe-libs\n */\nexport function useTourBuilder(tourId?: string) {\n const globalClient = useGatewayClient('global');\n const navigate = useNavigate();\n const { basePath = '/' } = useToursContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n const [deleting, setDeleting] = useState(false);\n\n const {\n selectedTour,\n stepSequence,\n isDirty,\n validationErrors,\n setSelectedTour,\n updateStepSequence,\n validateTour,\n setDirty,\n notifyToursListChanged,\n } = useToursStore();\n\n /**\n * Load tour data\n */\n const loadTour = useCallback(\n async (id: string) => {\n setLoading(true);\n setError(null);\n\n try {\n const result = await globalClient.query<GetTourQuery, GetTourQueryVariables>({\n query: GetTourDocument,\n variables: { id },\n fetchPolicy: 'network-only',\n });\n\n if (result.error) {\n throw result.error;\n }\n\n const { data } = result;\n\n if (data?.tour) {\n setSelectedTour(data.tour as Tour);\n updateStepSequence((data.tour.steps || []) as TourStep[]);\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load tour'));\n } finally {\n setLoading(false);\n }\n },\n [globalClient, setSelectedTour, updateStepSequence]\n );\n\n /**\n * Create new tour\n */\n const createTour = useCallback(\n async (input: Partial<Tour>) => {\n setSaving(true);\n setError(null);\n\n try {\n // Generate slug from name if not provided\n const slug =\n input.slug ||\n (input.name || 'tour')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n\n const createInput = {\n name: input.name || '',\n slug,\n productId: input.productId || 'workspaces',\n description: normalizeOptionalString(input.description),\n moduleId: normalizeOptionalString(input.moduleId),\n pageId: normalizeOptionalString(input.pageId),\n status: (input.status || 'DRAFT') as TourStatus,\n isActive: input.isActive ?? true,\n triggerType: (input.triggerType || 'MANUAL') as TourTriggerType,\n triggerConfig: input.triggerConfig,\n priority: input.priority ?? 50,\n displayOrder: input.displayOrder ?? 1,\n startDate: normalizeOptionalString(input.startDate),\n endDate: normalizeOptionalString(input.endDate),\n mobileConfig: input.mobileConfig,\n tabletConfig: input.tabletConfig,\n desktopConfig: input.desktopConfig,\n };\n\n const result = await globalClient.mutate<CreateTourMutation, CreateTourMutationVariables>({\n mutation: CreateTourDocument,\n variables: { input: createInput },\n });\n\n const data = result.data;\n\n if (data?.createTour) {\n setSelectedTour(data.createTour as Tour);\n notifyToursListChanged();\n\n // Navigate to step editor\n const editPath = `${basePath}/${data.createTour.id}/steps`;\n navigate(editPath);\n\n return data.createTour;\n }\n\n return null;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to create tour'));\n throw err;\n } finally {\n setSaving(false);\n }\n },\n [globalClient, basePath, navigate, notifyToursListChanged, setSelectedTour]\n );\n\n /**\n * Update existing tour\n */\n const updateTour = useCallback(\n async (id: string, input: Partial<Tour>) => {\n setSaving(true);\n setError(null);\n\n try {\n const updateInput = {\n name: input.name,\n slug: input.slug,\n description: normalizeOptionalString(input.description),\n productId: normalizeOptionalString(input.productId),\n moduleId: normalizeOptionalString(input.moduleId),\n pageId: normalizeOptionalString(input.pageId),\n status: input.status as TourStatus | undefined,\n isActive: input.isActive,\n triggerType: input.triggerType as TourTriggerType | undefined,\n triggerConfig: input.triggerConfig,\n priority: input.priority,\n displayOrder: input.displayOrder,\n startDate: normalizeOptionalString(input.startDate),\n endDate: normalizeOptionalString(input.endDate),\n mobileConfig: input.mobileConfig,\n tabletConfig: input.tabletConfig,\n desktopConfig: input.desktopConfig,\n };\n\n const result = await globalClient.mutate<UpdateTourMutation, UpdateTourMutationVariables>({\n mutation: UpdateTourDocument,\n variables: { id, input: updateInput },\n });\n\n const data = result.data;\n\n if (data?.updateTour) {\n notifyToursListChanged();\n return data.updateTour;\n }\n\n return null;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to update tour'));\n throw err;\n } finally {\n setSaving(false);\n }\n },\n [globalClient, notifyToursListChanged]\n );\n\n /**\n * Delete tour\n */\n const deleteTour = useCallback(\n async (id: string) => {\n setDeleting(true);\n setError(null);\n\n try {\n const result = await globalClient.mutate<DeleteTourMutation, DeleteTourMutationVariables>({\n mutation: DeleteTourDocument,\n variables: { id },\n });\n\n const data = result.data;\n\n if (data?.deleteTour) {\n notifyToursListChanged();\n }\n\n return data?.deleteTour ?? false;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to delete tour'));\n throw err;\n } finally {\n setDeleting(false);\n }\n },\n [globalClient, notifyToursListChanged]\n );\n\n /**\n * Sync tour steps\n */\n const syncSteps = useCallback(\n async (tourIdParam: string, steps: TourStep[]) => {\n setSaving(true);\n setError(null);\n\n try {\n const stepsInput = steps.map((s, index) => ({\n id: s.id?.startsWith('temp_') ? undefined : s.id,\n title: s.title,\n content: s.content,\n stepOrder: s.stepOrder ?? index + 1,\n targetSelector: s.targetSelector || '',\n placement: (s.placement || 'BOTTOM') as TourStepPlacement,\n targetSelectorMobile: s.targetSelectorMobile,\n targetSelectorTablet: s.targetSelectorTablet,\n targetSelectorDesktop: s.targetSelectorDesktop,\n customData: s.customData,\n actions: s.actions,\n requireInteraction: s.requireInteraction,\n waitForSelector: s.waitForSelector,\n waitForEvent: s.waitForEvent,\n waitForTimeout: s.waitForTimeout,\n skipConditions: s.skipConditions,\n }));\n\n const result = await globalClient.mutate<\n SyncTourStepsMutation,\n SyncTourStepsMutationVariables\n >({\n mutation: SyncTourStepsDocument,\n variables: { tourId: tourIdParam, steps: stepsInput },\n });\n\n const data = result.data;\n\n if (data?.syncTourSteps) {\n updateStepSequence(data.syncTourSteps as TourStep[]);\n setDirty(false);\n return data.syncTourSteps;\n }\n\n return null;\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to sync steps'));\n throw err;\n } finally {\n setSaving(false);\n }\n },\n [globalClient, updateStepSequence, setDirty]\n );\n\n /**\n * Save tour with validation\n */\n const saveTour = useCallback(async () => {\n const errors = validateTour();\n if (errors.length > 0) {\n throw new Error('Validation failed');\n }\n\n if (!selectedTour) {\n throw new Error('No tour selected');\n }\n\n // Update tour metadata\n if (selectedTour.id && !selectedTour.id.startsWith('temp_')) {\n await updateTour(selectedTour.id, selectedTour);\n } else {\n const created = await createTour(selectedTour);\n if (created && isDirty && stepSequence.length > 0) {\n await syncSteps(created.id, stepSequence);\n }\n return;\n }\n\n // Sync steps\n if (isDirty && selectedTour.id) {\n await syncSteps(selectedTour.id, stepSequence);\n }\n }, [selectedTour, stepSequence, isDirty, validateTour, createTour, updateTour, syncSteps]);\n\n return {\n tour: selectedTour,\n steps: stepSequence,\n isDirty,\n validationErrors,\n saving,\n loading,\n deleting,\n error,\n loadTour,\n createTour,\n updateTour,\n deleteTour,\n syncSteps,\n saveTour,\n };\n}\n\nfunction normalizeOptionalString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return value as string | undefined;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTourLifecycle.d.ts","sourceRoot":"","sources":["../../../src/tours/hooks/useTourLifecycle.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTourLifecycle.d.ts","sourceRoot":"","sources":["../../../src/tours/hooks/useTourLifecycle.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,wBAAgB,gBAAgB;sBASjB,MAAM;wBAWN,MAAM;sBAWN,MAAM;wBAWN,MAAM,YAAY,MAAM;6BAYzB,MAAM,SACP;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;EAoBzF"}
|
|
@@ -1,28 +1,41 @@
|
|
|
1
1
|
import { useArchiveTourMutation as e, useDuplicateTourMutation as t, usePublishTourMutation as n, useSaveTourAsTemplateMutation as r, useUnpublishTourMutation as i } from "../../generated/global-operations.js";
|
|
2
|
-
import {
|
|
2
|
+
import { useToursStore as a } from "../store/toursStore.js";
|
|
3
|
+
import { useCallback as o } from "react";
|
|
3
4
|
//#region src/tours/hooks/useTourLifecycle.ts
|
|
4
|
-
function
|
|
5
|
-
let [
|
|
5
|
+
function s() {
|
|
6
|
+
let s = a((e) => e.notifyToursListChanged), [c, { loading: l }] = n(), [u, { loading: d }] = i(), [f, { loading: p }] = e(), [m, { loading: h }] = t(), [g, { loading: _ }] = r();
|
|
6
7
|
return {
|
|
7
|
-
publishTour:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
publishTour: o(async (e) => {
|
|
9
|
+
let t = await c({ variables: { id: e } });
|
|
10
|
+
return t.data?.publishTour && s(), t.data?.publishTour ?? null;
|
|
11
|
+
}, [s, c]),
|
|
12
|
+
unpublishTour: o(async (e) => {
|
|
13
|
+
let t = await u({ variables: { id: e } });
|
|
14
|
+
return t.data?.unpublishTour && s(), t.data?.unpublishTour ?? null;
|
|
15
|
+
}, [s, u]),
|
|
16
|
+
archiveTour: o(async (e) => {
|
|
17
|
+
let t = await f({ variables: { id: e } });
|
|
18
|
+
return t.data?.archiveTour && s(), t.data?.archiveTour ?? null;
|
|
19
|
+
}, [f, s]),
|
|
20
|
+
duplicateTour: o(async (e, t) => {
|
|
21
|
+
let n = await m({ variables: {
|
|
22
|
+
id: e,
|
|
23
|
+
newName: t
|
|
24
|
+
} });
|
|
25
|
+
return n.data?.duplicateTour && s(), n.data?.duplicateTour ?? null;
|
|
26
|
+
}, [m, s]),
|
|
27
|
+
saveAsTemplate: o(async (e, t) => (await g({ variables: {
|
|
15
28
|
tourId: e,
|
|
16
29
|
input: t
|
|
17
|
-
} })).data?.saveTourAsTemplate ?? null, [
|
|
18
|
-
publishing:
|
|
19
|
-
unpublishing:
|
|
20
|
-
archiving:
|
|
21
|
-
duplicating:
|
|
22
|
-
savingTemplate:
|
|
30
|
+
} })).data?.saveTourAsTemplate ?? null, [g]),
|
|
31
|
+
publishing: l,
|
|
32
|
+
unpublishing: d,
|
|
33
|
+
archiving: p,
|
|
34
|
+
duplicating: h,
|
|
35
|
+
savingTemplate: _
|
|
23
36
|
};
|
|
24
37
|
}
|
|
25
38
|
//#endregion
|
|
26
|
-
export {
|
|
39
|
+
export { s as useTourLifecycle };
|
|
27
40
|
|
|
28
41
|
//# sourceMappingURL=useTourLifecycle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTourLifecycle.js","names":[],"sources":["../../../src/tours/hooks/useTourLifecycle.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n usePublishTourMutation,\n useUnpublishTourMutation,\n useArchiveTourMutation,\n useDuplicateTourMutation,\n useSaveTourAsTemplateMutation,\n} from '../../generated/global-operations';\n\n/**\n * Hook wrapping admin lifecycle mutations for tours.\n * Provides publish, unpublish, archive, duplicate, and save-as-template actions.\n */\nexport function useTourLifecycle() {\n const [publishTourMutation, { loading: publishing }] = usePublishTourMutation();\n const [unpublishTourMutation, { loading: unpublishing }] = useUnpublishTourMutation();\n const [archiveTourMutation, { loading: archiving }] = useArchiveTourMutation();\n const [duplicateTourMutation, { loading: duplicating }] = useDuplicateTourMutation();\n const [saveTourAsTemplateMutation, { loading: savingTemplate }] = useSaveTourAsTemplateMutation();\n\n const publishTour = useCallback(\n async (id: string) => {\n const result = await publishTourMutation({ variables: { id } });\n return result.data?.publishTour ?? null;\n },\n [publishTourMutation]\n );\n\n const unpublishTour = useCallback(\n async (id: string) => {\n const result = await unpublishTourMutation({ variables: { id } });\n return result.data?.unpublishTour ?? null;\n },\n [unpublishTourMutation]\n );\n\n const archiveTour = useCallback(\n async (id: string) => {\n const result = await archiveTourMutation({ variables: { id } });\n return result.data?.archiveTour ?? null;\n },\n [archiveTourMutation]\n );\n\n const duplicateTour = useCallback(\n async (id: string, newName?: string) => {\n const result = await duplicateTourMutation({ variables: { id, newName } });\n return result.data?.duplicateTour ?? null;\n },\n [duplicateTourMutation]\n );\n\n const saveAsTemplate = useCallback(\n async (\n tourId: string,\n input: { name: string; description?: string; category?: string; isPublic?: boolean }\n ) => {\n const result = await saveTourAsTemplateMutation({ variables: { tourId, input } });\n return result.data?.saveTourAsTemplate ?? null;\n },\n [saveTourAsTemplateMutation]\n );\n\n return {\n publishTour,\n unpublishTour,\n archiveTour,\n duplicateTour,\n saveAsTemplate,\n publishing,\n unpublishing,\n archiving,\n duplicating,\n savingTemplate,\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useTourLifecycle.js","names":[],"sources":["../../../src/tours/hooks/useTourLifecycle.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n usePublishTourMutation,\n useUnpublishTourMutation,\n useArchiveTourMutation,\n useDuplicateTourMutation,\n useSaveTourAsTemplateMutation,\n} from '../../generated/global-operations';\nimport { useToursStore } from '../store/toursStore';\n\n/**\n * Hook wrapping admin lifecycle mutations for tours.\n * Provides publish, unpublish, archive, duplicate, and save-as-template actions.\n */\nexport function useTourLifecycle() {\n const notifyToursListChanged = useToursStore((state) => state.notifyToursListChanged);\n const [publishTourMutation, { loading: publishing }] = usePublishTourMutation();\n const [unpublishTourMutation, { loading: unpublishing }] = useUnpublishTourMutation();\n const [archiveTourMutation, { loading: archiving }] = useArchiveTourMutation();\n const [duplicateTourMutation, { loading: duplicating }] = useDuplicateTourMutation();\n const [saveTourAsTemplateMutation, { loading: savingTemplate }] = useSaveTourAsTemplateMutation();\n\n const publishTour = useCallback(\n async (id: string) => {\n const result = await publishTourMutation({ variables: { id } });\n if (result.data?.publishTour) {\n notifyToursListChanged();\n }\n return result.data?.publishTour ?? null;\n },\n [notifyToursListChanged, publishTourMutation]\n );\n\n const unpublishTour = useCallback(\n async (id: string) => {\n const result = await unpublishTourMutation({ variables: { id } });\n if (result.data?.unpublishTour) {\n notifyToursListChanged();\n }\n return result.data?.unpublishTour ?? null;\n },\n [notifyToursListChanged, unpublishTourMutation]\n );\n\n const archiveTour = useCallback(\n async (id: string) => {\n const result = await archiveTourMutation({ variables: { id } });\n if (result.data?.archiveTour) {\n notifyToursListChanged();\n }\n return result.data?.archiveTour ?? null;\n },\n [archiveTourMutation, notifyToursListChanged]\n );\n\n const duplicateTour = useCallback(\n async (id: string, newName?: string) => {\n const result = await duplicateTourMutation({ variables: { id, newName } });\n if (result.data?.duplicateTour) {\n notifyToursListChanged();\n }\n return result.data?.duplicateTour ?? null;\n },\n [duplicateTourMutation, notifyToursListChanged]\n );\n\n const saveAsTemplate = useCallback(\n async (\n tourId: string,\n input: { name: string; description?: string; category?: string; isPublic?: boolean }\n ) => {\n const result = await saveTourAsTemplateMutation({ variables: { tourId, input } });\n return result.data?.saveTourAsTemplate ?? null;\n },\n [saveTourAsTemplateMutation]\n );\n\n return {\n publishTour,\n unpublishTour,\n archiveTour,\n duplicateTour,\n saveAsTemplate,\n publishing,\n unpublishing,\n archiving,\n duplicating,\n savingTemplate,\n };\n}\n"],"mappings":";;;;AAcA,SAAgB,IAAmB;CACjC,IAAM,IAAyB,GAAe,MAAU,EAAM,uBAAuB,EAC/E,CAAC,GAAqB,EAAE,SAAS,OAAgB,GAAwB,EACzE,CAAC,GAAuB,EAAE,SAAS,OAAkB,GAA0B,EAC/E,CAAC,GAAqB,EAAE,SAAS,OAAe,GAAwB,EACxE,CAAC,GAAuB,EAAE,SAAS,OAAiB,GAA0B,EAC9E,CAAC,GAA4B,EAAE,SAAS,OAAoB,GAA+B;AAyDjG,QAAO;EACL,aAxDkB,EAClB,OAAO,MAAe;GACpB,IAAM,IAAS,MAAM,EAAoB,EAAE,WAAW,EAAE,OAAI,EAAE,CAAC;AAI/D,UAHI,EAAO,MAAM,eACf,GAAwB,EAEnB,EAAO,MAAM,eAAe;KAErC,CAAC,GAAwB,EAAoB,CAC9C;EAgDC,eA9CoB,EACpB,OAAO,MAAe;GACpB,IAAM,IAAS,MAAM,EAAsB,EAAE,WAAW,EAAE,OAAI,EAAE,CAAC;AAIjE,UAHI,EAAO,MAAM,iBACf,GAAwB,EAEnB,EAAO,MAAM,iBAAiB;KAEvC,CAAC,GAAwB,EAAsB,CAChD;EAsCC,aApCkB,EAClB,OAAO,MAAe;GACpB,IAAM,IAAS,MAAM,EAAoB,EAAE,WAAW,EAAE,OAAI,EAAE,CAAC;AAI/D,UAHI,EAAO,MAAM,eACf,GAAwB,EAEnB,EAAO,MAAM,eAAe;KAErC,CAAC,GAAqB,EAAuB,CAC9C;EA4BC,eA1BoB,EACpB,OAAO,GAAY,MAAqB;GACtC,IAAM,IAAS,MAAM,EAAsB,EAAE,WAAW;IAAE;IAAI;IAAS,EAAE,CAAC;AAI1E,UAHI,EAAO,MAAM,iBACf,GAAwB,EAEnB,EAAO,MAAM,iBAAiB;KAEvC,CAAC,GAAuB,EAAuB,CAChD;EAkBC,gBAhBqB,EACrB,OACE,GACA,OAEe,MAAM,EAA2B,EAAE,WAAW;GAAE;GAAQ;GAAO,EAAE,CAAC,EACnE,MAAM,sBAAsB,MAE5C,CAAC,EAA2B,CAC7B;EAQC;EACA;EACA;EACA;EACA;EACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TourBuilderPage.d.ts","sourceRoot":"","sources":["../../../src/tours/pages/TourBuilderPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TourBuilderPage.d.ts","sourceRoot":"","sources":["../../../src/tours/pages/TourBuilderPage.tsx"],"names":[],"mappings":"AAyPA;;;GAGG;AACH,wBAAgB,eAAe,4CAmlB9B"}
|