@rovela-ai/sdk 0.18.1 → 0.18.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.
- package/dist/admin/components/AdminSaveBar.d.ts +25 -0
- package/dist/admin/components/AdminSaveBar.d.ts.map +1 -0
- package/dist/admin/components/AdminSaveBar.js +156 -0
- package/dist/admin/components/AdminSaveBar.js.map +1 -0
- package/dist/admin/components/CategoryForm.d.ts.map +1 -1
- package/dist/admin/components/CategoryForm.js +20 -11
- package/dist/admin/components/CategoryForm.js.map +1 -1
- package/dist/admin/components/PaymentSettings.d.ts.map +1 -1
- package/dist/admin/components/PaymentSettings.js +12 -13
- package/dist/admin/components/PaymentSettings.js.map +1 -1
- package/dist/admin/components/ProductForm.d.ts.map +1 -1
- package/dist/admin/components/ProductForm.js +58 -15
- package/dist/admin/components/ProductForm.js.map +1 -1
- package/dist/admin/components/ShippingSettings.d.ts.map +1 -1
- package/dist/admin/components/ShippingSettings.js +20 -9
- package/dist/admin/components/ShippingSettings.js.map +1 -1
- package/dist/admin/components/StoreSettings.d.ts.map +1 -1
- package/dist/admin/components/StoreSettings.js +48 -13
- package/dist/admin/components/StoreSettings.js.map +1 -1
- package/dist/admin/components/index.d.ts +2 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +1 -0
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/hooks/index.d.ts +2 -0
- package/dist/admin/hooks/index.d.ts.map +1 -1
- package/dist/admin/hooks/index.js +1 -0
- package/dist/admin/hooks/index.js.map +1 -1
- package/dist/admin/hooks/useDirtyState.d.ts +10 -0
- package/dist/admin/hooks/useDirtyState.d.ts.map +1 -0
- package/dist/admin/hooks/useDirtyState.js +53 -0
- package/dist/admin/hooks/useDirtyState.js.map +1 -0
- package/dist/admin/index.d.ts +3 -3
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +3 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/styles/admin-theme.css +138 -0
- package/dist/core/db/queries.d.ts +3 -3
- package/dist/core/db/queries.d.ts.map +1 -1
- package/dist/core/db/queries.js +10 -3
- package/dist/core/db/queries.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface AdminSaveBarProps {
|
|
2
|
+
/** The document has unsaved changes. Drives visibility + guards. */
|
|
3
|
+
isDirty: boolean;
|
|
4
|
+
/** Keep the bar visible even when clean — create-mode forms. */
|
|
5
|
+
forceVisible?: boolean;
|
|
6
|
+
/** Short labels of what changed, shown muted next to the label. */
|
|
7
|
+
changedFields?: string[];
|
|
8
|
+
/** Primary button label (default "Save"; create forms pass "Create …"). */
|
|
9
|
+
saveLabel?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Perform the save. Return `{ success: true }` to trigger the saved
|
|
12
|
+
* morph (rebaseline your dirty state inside), or `{ success: false,
|
|
13
|
+
* error }` to surface the error state in the bar.
|
|
14
|
+
*/
|
|
15
|
+
onSave: () => Promise<{
|
|
16
|
+
success: boolean;
|
|
17
|
+
error?: string;
|
|
18
|
+
}>;
|
|
19
|
+
/** Discard edits (restore your baseline / cancel the create flow). */
|
|
20
|
+
onDiscard: () => void;
|
|
21
|
+
/** Custom className */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function AdminSaveBar({ isDirty, forceVisible, changedFields, saveLabel, onSave, onDiscard, className, }: AdminSaveBarProps): import("react/jsx-runtime").JSX.Element | null;
|
|
25
|
+
//# sourceMappingURL=AdminSaveBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminSaveBar.d.ts","sourceRoot":"","sources":["../../../src/admin/components/AdminSaveBar.tsx"],"names":[],"mappings":"AAyCA,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,OAAO,EAAE,OAAO,CAAA;IAChB,gEAAgE;IAChE,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,MAAM,EAAE,MAAM,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3D,sEAAsE;IACtE,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAUD,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,YAAoB,EACpB,aAAa,EACb,SAAkB,EAClB,MAAM,EACN,SAAS,EACT,SAAc,GACf,EAAE,iBAAiB,kDA6JnB"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* @rovela-ai/sdk/admin/components/AdminSaveBar
|
|
5
|
+
*
|
|
6
|
+
* THE save affordance for admin DOCUMENT pages — the attention band. The
|
|
7
|
+
* top bar is the identity band (emerald wash); a dirty document raises its
|
|
8
|
+
* bottom bookend: a full-width bar docked to the bottom edge in the sidebar
|
|
9
|
+
* tone with an amber wash and a top hairline. Never a floating pill, never
|
|
10
|
+
* a per-card Save.
|
|
11
|
+
*
|
|
12
|
+
* Two shapes only, everywhere in the admin (LEDGER rule):
|
|
13
|
+
* · document pages (Settings, Shipping, Payments, a product, a category)
|
|
14
|
+
* → this bar, raised on dirty state
|
|
15
|
+
* · transactional editors (create a discount, add a location, password
|
|
16
|
+
* forms) → inline form buttons, unchanged
|
|
17
|
+
*
|
|
18
|
+
* The component owns the save phase machine: dirty → saving (controls
|
|
19
|
+
* disabled) → saved morph (green wash, 1.4s, auto-dismiss) or error (red
|
|
20
|
+
* wash, message in the bar, Save becomes "Try again"). THE BAR IS THE
|
|
21
|
+
* FEEDBACK — converted pages must not fire a success toast alongside it.
|
|
22
|
+
*
|
|
23
|
+
* Built-in guards while dirty:
|
|
24
|
+
* · beforeunload — browser-native leave warning
|
|
25
|
+
* · ⌘S / Ctrl+S — saves
|
|
26
|
+
* · clicking a sidebar/top-bar link — prevented + the bar SHAKES instead
|
|
27
|
+
* of silently losing work (chrome links only; programmatic navigation
|
|
28
|
+
* after a successful save is deliberately not intercepted)
|
|
29
|
+
*
|
|
30
|
+
* Pair with `useDirtyState` for snapshot-based dirty tracking, and pass a
|
|
31
|
+
* CrudResult-shaped promise as `onSave`. In create-mode forms set
|
|
32
|
+
* `forceVisible` so a brand-new resource always shows its primary action
|
|
33
|
+
* (a new document IS an unsaved change), with `saveLabel="Create product"`.
|
|
34
|
+
*/
|
|
35
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
36
|
+
const SAVED_MORPH_MS = 1400;
|
|
37
|
+
// =============================================================================
|
|
38
|
+
// Component
|
|
39
|
+
// =============================================================================
|
|
40
|
+
export function AdminSaveBar({ isDirty, forceVisible = false, changedFields, saveLabel = 'Save', onSave, onDiscard, className = '', }) {
|
|
41
|
+
const [phase, setPhase] = useState('idle');
|
|
42
|
+
const [errorMessage, setErrorMessage] = useState(null);
|
|
43
|
+
const [isShaking, setIsShaking] = useState(false);
|
|
44
|
+
const savedTimer = useRef(null);
|
|
45
|
+
const shakeTimer = useRef(null);
|
|
46
|
+
const visible = isDirty || forceVisible || phase === 'saving' || phase === 'saved';
|
|
47
|
+
const handleSave = useCallback(async () => {
|
|
48
|
+
if (phase === 'saving')
|
|
49
|
+
return;
|
|
50
|
+
setPhase('saving');
|
|
51
|
+
setErrorMessage(null);
|
|
52
|
+
try {
|
|
53
|
+
const result = await onSave();
|
|
54
|
+
if (result?.success) {
|
|
55
|
+
setPhase('saved');
|
|
56
|
+
savedTimer.current = window.setTimeout(() => setPhase('idle'), SAVED_MORPH_MS);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
setErrorMessage(result?.error || 'Something went wrong. Try again.');
|
|
60
|
+
setPhase('error');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
setErrorMessage('Something went wrong. Try again.');
|
|
65
|
+
setPhase('error');
|
|
66
|
+
}
|
|
67
|
+
}, [onSave, phase]);
|
|
68
|
+
const handleDiscard = useCallback(() => {
|
|
69
|
+
setPhase('idle');
|
|
70
|
+
setErrorMessage(null);
|
|
71
|
+
onDiscard();
|
|
72
|
+
}, [onDiscard]);
|
|
73
|
+
// Timer cleanup on unmount
|
|
74
|
+
useEffect(() => () => {
|
|
75
|
+
if (savedTimer.current)
|
|
76
|
+
window.clearTimeout(savedTimer.current);
|
|
77
|
+
if (shakeTimer.current)
|
|
78
|
+
window.clearTimeout(shakeTimer.current);
|
|
79
|
+
}, []);
|
|
80
|
+
// Guard: browser-native leave warning while dirty
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (!isDirty)
|
|
83
|
+
return;
|
|
84
|
+
const handler = (e) => {
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
e.returnValue = '';
|
|
87
|
+
};
|
|
88
|
+
window.addEventListener('beforeunload', handler);
|
|
89
|
+
return () => window.removeEventListener('beforeunload', handler);
|
|
90
|
+
}, [isDirty]);
|
|
91
|
+
// ⌘S / Ctrl+S saves while the bar is actionable
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
if (!visible)
|
|
94
|
+
return;
|
|
95
|
+
const handler = (e) => {
|
|
96
|
+
if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 's') {
|
|
97
|
+
e.preventDefault();
|
|
98
|
+
if (phase !== 'saving' && phase !== 'saved')
|
|
99
|
+
void handleSave();
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
window.addEventListener('keydown', handler);
|
|
103
|
+
return () => window.removeEventListener('keydown', handler);
|
|
104
|
+
}, [visible, phase, handleSave]);
|
|
105
|
+
// Nav-guard: sidebar / top-bar links shake the bar instead of navigating
|
|
106
|
+
// away over unsaved work. Capture phase so next/link never sees the click.
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
if (!isDirty)
|
|
109
|
+
return;
|
|
110
|
+
const handler = (e) => {
|
|
111
|
+
const target = e.target;
|
|
112
|
+
const anchor = target?.closest?.('a[href]');
|
|
113
|
+
if (!anchor)
|
|
114
|
+
return;
|
|
115
|
+
if (!anchor.closest('.admin-sidebar') && !anchor.closest('.admin-topbar'))
|
|
116
|
+
return;
|
|
117
|
+
const href = anchor.getAttribute('href') || '';
|
|
118
|
+
// External links open new tabs (View store, Edit store) — let them be.
|
|
119
|
+
if (!href.startsWith('/'))
|
|
120
|
+
return;
|
|
121
|
+
if (anchor.target === '_blank')
|
|
122
|
+
return;
|
|
123
|
+
e.preventDefault();
|
|
124
|
+
e.stopPropagation();
|
|
125
|
+
setIsShaking(true);
|
|
126
|
+
shakeTimer.current = window.setTimeout(() => setIsShaking(false), 400);
|
|
127
|
+
};
|
|
128
|
+
document.addEventListener('click', handler, true);
|
|
129
|
+
return () => document.removeEventListener('click', handler, true);
|
|
130
|
+
}, [isDirty]);
|
|
131
|
+
if (!visible)
|
|
132
|
+
return null;
|
|
133
|
+
const phaseClass = phase === 'saving'
|
|
134
|
+
? 'admin-savebar-saving'
|
|
135
|
+
: phase === 'saved'
|
|
136
|
+
? 'admin-savebar-saved'
|
|
137
|
+
: phase === 'error'
|
|
138
|
+
? 'admin-savebar-error'
|
|
139
|
+
: '';
|
|
140
|
+
const label = phase === 'saving'
|
|
141
|
+
? 'Saving…'
|
|
142
|
+
: phase === 'saved'
|
|
143
|
+
? 'Saved'
|
|
144
|
+
: phase === 'error'
|
|
145
|
+
? "Couldn't save"
|
|
146
|
+
: 'Unsaved changes';
|
|
147
|
+
const meta = phase === 'saved'
|
|
148
|
+
? 'All changes are live in your store'
|
|
149
|
+
: phase === 'error'
|
|
150
|
+
? errorMessage
|
|
151
|
+
: changedFields && changedFields.length > 0
|
|
152
|
+
? changedFields.slice(0, 3).join(' · ') + (changedFields.length > 3 ? ' · …' : '')
|
|
153
|
+
: null;
|
|
154
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "admin-savebar-spacer", "aria-hidden": "true" }), _jsxs("div", { className: `admin-savebar ${phaseClass} ${isShaking ? 'admin-savebar-shake' : ''} ${className}`.trim(), role: "status", "aria-live": "polite", children: [_jsx("span", { className: "admin-savebar-dot", "aria-hidden": "true" }), _jsx("span", { className: "admin-savebar-label", children: label }), meta && _jsx("span", { className: "admin-savebar-meta", children: meta }), _jsx("span", { className: "admin-savebar-spring" }), phase !== 'saved' && (_jsxs(_Fragment, { children: [_jsx("span", { className: "admin-savebar-kbd", "aria-hidden": "true", children: "\u2318S" }), _jsx("button", { type: "button", onClick: handleDiscard, disabled: phase === 'saving', className: "admin-btn admin-btn-ghost admin-btn-sm disabled:opacity-50", children: "Discard" }), _jsx("button", { type: "button", onClick: handleSave, disabled: phase === 'saving', className: "admin-btn admin-btn-primary admin-btn-sm disabled:opacity-70", children: phase === 'saving' ? 'Saving…' : phase === 'error' ? 'Try again' : saveLabel })] }))] })] }));
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=AdminSaveBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminSaveBar.js","sourceRoot":"","sources":["../../../src/admin/components/AdminSaveBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoryForm.d.ts","sourceRoot":"","sources":["../../../src/admin/components/CategoryForm.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"CategoryForm.d.ts","sourceRoot":"","sources":["../../../src/admin/components/CategoryForm.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,UAAU,CAAA;AAWvE,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACvC,kCAAkC;IAClC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAc,GACf,EAAE,iBAAiB,2CA+SnB"}
|
|
@@ -8,6 +8,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
8
8
|
import { useState, useCallback, useEffect, useMemo } from 'react';
|
|
9
9
|
import { ImageUpload } from '../../media';
|
|
10
10
|
import { fetchAdminApi } from '../hooks/fetchAdminApi';
|
|
11
|
+
import { AdminSaveBar } from './AdminSaveBar';
|
|
12
|
+
import { useDirtyState } from '../hooks/useDirtyState';
|
|
11
13
|
import { CatalogTranslationsEditor } from './CatalogTranslationsEditor';
|
|
12
14
|
// =============================================================================
|
|
13
15
|
// Component
|
|
@@ -42,9 +44,11 @@ export function CategoryForm({ categoryId, initialData, onSuccess, onCancel, cla
|
|
|
42
44
|
// Categories for parent selector
|
|
43
45
|
const [categories, setCategories] = useState([]);
|
|
44
46
|
// UI state
|
|
45
|
-
const [isLoading, setIsLoading] = useState(false);
|
|
46
47
|
const [isFetching, setIsFetching] = useState(false);
|
|
47
48
|
const [error, setError] = useState(null);
|
|
49
|
+
// Document dirty tracking (AdminSaveBar contract). Create mode baselines
|
|
50
|
+
// the pristine empty form immediately; edit mode after the fetch resolves.
|
|
51
|
+
const { isDirty, baselineValue, rebaseline } = useDirtyState(formData, !isFetching);
|
|
48
52
|
// Auto-generate slug from name
|
|
49
53
|
const autoSlug = useMemo(() => {
|
|
50
54
|
return formData.name
|
|
@@ -111,10 +115,7 @@ export function CategoryForm({ categoryId, initialData, onSuccess, onCancel, cla
|
|
|
111
115
|
}));
|
|
112
116
|
}, []);
|
|
113
117
|
// Handle submit
|
|
114
|
-
const
|
|
115
|
-
e.preventDefault();
|
|
116
|
-
setError(null);
|
|
117
|
-
setIsLoading(true);
|
|
118
|
+
const doSave = useCallback(async () => {
|
|
118
119
|
const data = {
|
|
119
120
|
name: formData.name,
|
|
120
121
|
slug: formData.slug || autoSlug,
|
|
@@ -132,24 +133,32 @@ export function CategoryForm({ categoryId, initialData, onSuccess, onCancel, cla
|
|
|
132
133
|
headers: { 'Content-Type': 'application/json' },
|
|
133
134
|
body: JSON.stringify(data),
|
|
134
135
|
});
|
|
135
|
-
setIsLoading(false);
|
|
136
136
|
if (!res.ok) {
|
|
137
|
-
|
|
138
|
-
return;
|
|
137
|
+
return { success: false, error: res.error };
|
|
139
138
|
}
|
|
139
|
+
// Rebaseline BEFORE onSuccess — the callback may navigate away.
|
|
140
|
+
rebaseline();
|
|
140
141
|
onSuccess?.(res.data.data.id);
|
|
141
|
-
|
|
142
|
+
return { success: true };
|
|
143
|
+
}, [isEditMode, categoryId, formData, autoSlug, onSuccess, rebaseline]);
|
|
142
144
|
// Loading state
|
|
143
145
|
if (isFetching) {
|
|
144
146
|
return (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx("div", { className: "admin-spinner h-8 w-8" }) }));
|
|
145
147
|
}
|
|
146
|
-
return (_jsxs("form", { onSubmit:
|
|
148
|
+
return (_jsxs("form", { onSubmit: (e) => e.preventDefault(), className: `space-y-6 ${className}`, children: [error && (_jsx("div", { className: "admin-alert admin-alert-error", children: _jsx("div", { className: "admin-alert-description", children: error }) })), _jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsx("h3", { className: "admin-card-title mb-4", children: "Basic Information" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "name", className: "admin-label admin-label-required", children: "Category Name" }), _jsx("input", { id: "name", name: "name", type: "text", value: formData.name, onChange: handleChange, required: true, placeholder: "e.g., Electronics, Clothing", className: "admin-input mt-1 w-full" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "slug", className: "admin-label", children: "URL Handle" }), _jsxs("div", { className: "admin-input-group mt-1 flex rounded-md", children: [_jsx("span", { className: "admin-input-prefix inline-flex items-center rounded-l-md px-3 text-sm", children: "/categories/" }), _jsx("input", { id: "slug", name: "slug", type: "text", value: formData.slug, onChange: handleChange, placeholder: autoSlug || 'auto-generated', className: "admin-input-inline flex-1 rounded-r-md border-0 px-3 py-2 text-sm outline-none" })] }), _jsx("p", { className: "admin-helper-text mt-1", children: "Leave blank to auto-generate from category name" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "description", className: "admin-label", children: "Description" }), _jsx("textarea", { id: "description", name: "description", value: formData.description, onChange: handleChange, rows: 3, placeholder: "Brief description of this category...", className: "admin-input admin-textarea mt-1 w-full" })] }), _jsx(CatalogTranslationsEditor, { value: formData.translations, onChange: (next) => setFormData((prev) => ({ ...prev, translations: next })), baseName: formData.name, className: "mt-2" })] })] }), _jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsx("h3", { className: "admin-card-title mb-4", children: "Image" }), _jsx(ImageUpload, { value: formData.image || null, onChange: (url) => setFormData((prev) => ({ ...prev, image: url || '' })), onSave: categoryId ? async (url) => {
|
|
147
149
|
// Auto-persist image to database in edit mode
|
|
148
150
|
await fetchAdminApi(`/api/admin/categories/${categoryId}`, {
|
|
149
151
|
method: 'PUT',
|
|
150
152
|
headers: { 'Content-Type': 'application/json' },
|
|
151
153
|
body: JSON.stringify({ image: url || null }),
|
|
152
154
|
});
|
|
153
|
-
} : undefined, folder: "categories", entityId: categoryId, placeholder: "Upload category image" })] }), _jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsx("h3", { className: "admin-card-title mb-4", children: "Organization" }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "parentId", className: "admin-label", children: "Parent Category" }), _jsxs("select", { id: "parentId", name: "parentId", value: formData.parentId, onChange: handleChange, className: "admin-input admin-select mt-1 w-full", children: [_jsx("option", { value: "", children: "None (Top Level)" }), parentOptions.map((cat) => (_jsx("option", { value: cat.id, children: cat.name }, cat.id)))] }), _jsx("p", { className: "admin-helper-text mt-1", children: "Make this a subcategory of another category" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "order", className: "admin-label", children: "Display Order" }), _jsx("input", { id: "order", name: "order", type: "number", min: "0", value: formData.order, onChange: handleChange, className: "admin-input mt-1 w-full" }), _jsx("p", { className: "admin-helper-text mt-1", children: "Lower numbers appear first" })] })] })] }),
|
|
155
|
+
} : undefined, folder: "categories", entityId: categoryId, placeholder: "Upload category image" })] }), _jsxs("div", { className: "admin-card rounded-lg p-6", children: [_jsx("h3", { className: "admin-card-title mb-4", children: "Organization" }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "parentId", className: "admin-label", children: "Parent Category" }), _jsxs("select", { id: "parentId", name: "parentId", value: formData.parentId, onChange: handleChange, className: "admin-input admin-select mt-1 w-full", children: [_jsx("option", { value: "", children: "None (Top Level)" }), parentOptions.map((cat) => (_jsx("option", { value: cat.id, children: cat.name }, cat.id)))] }), _jsx("p", { className: "admin-helper-text mt-1", children: "Make this a subcategory of another category" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "order", className: "admin-label", children: "Display Order" }), _jsx("input", { id: "order", name: "order", type: "number", min: "0", value: formData.order, onChange: handleChange, className: "admin-input mt-1 w-full" }), _jsx("p", { className: "admin-helper-text mt-1", children: "Lower numbers appear first" })] })] })] }), _jsx(AdminSaveBar, { isDirty: isDirty, forceVisible: !isEditMode, saveLabel: isEditMode ? 'Save' : 'Create category', onSave: doSave, onDiscard: () => {
|
|
156
|
+
if (!isEditMode && onCancel) {
|
|
157
|
+
onCancel();
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (baselineValue)
|
|
161
|
+
setFormData(baselineValue);
|
|
162
|
+
} })] }));
|
|
154
163
|
}
|
|
155
164
|
//# sourceMappingURL=CategoryForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CategoryForm.js","sourceRoot":"","sources":["../../../src/admin/components/CategoryForm.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEjE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAmBvE,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,GAAG,EAAE,GACI;IAClB,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAA;IAE/B,aAAa;IACb,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAmB;QACzD,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE;QAC7B,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE;QAC7B,WAAW,EAAE,WAAW,EAAE,WAAW,IAAI,EAAE;QAC3C,YAAY,EAAG,WAA0F,EAAE,YAAY,IAAI,EAAE;QAC7H,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE;QAC/B,QAAQ,EAAE,WAAW,EAAE,QAAQ,IAAI,EAAE;QACrC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;KAC/B,CAAC,CAAA;IAEF,iCAAiC;IACjC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAA0B,EAAE,CAAC,CAAA;IAEzE,WAAW;IACX,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"CategoryForm.js","sourceRoot":"","sources":["../../../src/admin/components/CategoryForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentSettings.d.ts","sourceRoot":"","sources":["../../../src/admin/components/PaymentSettings.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PaymentSettings.d.ts","sourceRoot":"","sources":["../../../src/admin/components/PaymentSettings.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAuC,MAAM,UAAU,CAAA;AAsCzF;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAkNlE"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useEffect, useCallback } from 'react';
|
|
4
4
|
import { AdminSelect } from './AdminSelect';
|
|
5
5
|
import { AdminPageHeader } from './AdminPageHeader';
|
|
6
|
+
import { AdminSaveBar } from './AdminSaveBar';
|
|
7
|
+
import { useDirtyState } from '../hooks/useDirtyState';
|
|
6
8
|
import { PaymentMethodsManager } from './PaymentMethodsManager';
|
|
7
9
|
import { fetchAdminApi } from '../hooks/fetchAdminApi';
|
|
8
10
|
import { ExternalLink, CheckCircle, AlertCircle, Loader2, } from 'lucide-react';
|
|
@@ -49,11 +51,12 @@ export function PaymentSettings({ className }) {
|
|
|
49
51
|
// UI state
|
|
50
52
|
const [isLoadingSettings, setIsLoadingSettings] = useState(true);
|
|
51
53
|
const [isLoadingStripe, setIsLoadingStripe] = useState(true);
|
|
52
|
-
const [isSaving, setIsSaving] = useState(false);
|
|
53
54
|
const [error, setError] = useState(null);
|
|
54
|
-
const [successMessage, setSuccessMessage] = useState(null);
|
|
55
55
|
// Form state
|
|
56
56
|
const [currency, setCurrency] = useState('USD');
|
|
57
|
+
// Document dirty tracking (AdminSaveBar contract) — baseline captures once
|
|
58
|
+
// the settings fetch resolves.
|
|
59
|
+
const { isDirty, baselineValue, rebaseline } = useDirtyState({ currency }, !isLoadingSettings);
|
|
57
60
|
// =============================================================================
|
|
58
61
|
// Data Fetching
|
|
59
62
|
// =============================================================================
|
|
@@ -86,9 +89,6 @@ export function PaymentSettings({ className }) {
|
|
|
86
89
|
// Save Handler
|
|
87
90
|
// =============================================================================
|
|
88
91
|
const handleSave = async () => {
|
|
89
|
-
setIsSaving(true);
|
|
90
|
-
setError(null);
|
|
91
|
-
setSuccessMessage(null);
|
|
92
92
|
const res = await fetchAdminApi('/api/admin/settings', {
|
|
93
93
|
method: 'PUT',
|
|
94
94
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -96,13 +96,12 @@ export function PaymentSettings({ className }) {
|
|
|
96
96
|
storeCurrency: currency,
|
|
97
97
|
}),
|
|
98
98
|
});
|
|
99
|
-
setIsSaving(false);
|
|
100
99
|
if (!res.ok) {
|
|
101
|
-
|
|
102
|
-
return;
|
|
100
|
+
return { success: false, error: res.error };
|
|
103
101
|
}
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
// The AdminSaveBar's saved morph IS the feedback — no toast, no alert.
|
|
103
|
+
rebaseline();
|
|
104
|
+
return { success: true };
|
|
106
105
|
};
|
|
107
106
|
// =============================================================================
|
|
108
107
|
// Render Helpers
|
|
@@ -111,9 +110,9 @@ export function PaymentSettings({ className }) {
|
|
|
111
110
|
if (isLoading) {
|
|
112
111
|
return (_jsx("div", { className: `space-y-6 ${className || ''}`, children: _jsx("div", { className: "admin-card", children: _jsxs("div", { className: "admin-card-body flex items-center justify-center py-12", children: [_jsx(Loader2, { className: "h-6 w-6 animate-spin text-[hsl(var(--admin-primary))]" }), _jsx("span", { className: "ml-2 text-[hsl(var(--admin-foreground-muted))]", children: "Loading payment settings..." })] }) }) }));
|
|
113
112
|
}
|
|
114
|
-
return (_jsxs("div", { className: `space-y-6 ${className || ''}`, children: [_jsx(AdminPageHeader, { title: "Payments", subtitle: "How your store gets paid: card payments through Stripe, plus any manual methods you offer." }), error && (_jsxs("div", { className: "admin-alert admin-alert-error", children: [_jsx(AlertCircle, { className: "h-4 w-4" }), _jsx("span", { children: error })] })),
|
|
113
|
+
return (_jsxs("div", { className: `space-y-6 ${className || ''}`, children: [_jsx(AdminPageHeader, { title: "Payments", subtitle: "How your store gets paid: card payments through Stripe, plus any manual methods you offer." }), error && (_jsxs("div", { className: "admin-alert admin-alert-error", children: [_jsx(AlertCircle, { className: "h-4 w-4" }), _jsx("span", { children: error })] })), _jsxs("div", { className: "admin-card", children: [_jsx("div", { className: "admin-card-header", children: _jsx("h2", { className: "admin-card-title", children: "Stripe connection" }) }), _jsx("div", { className: "admin-card-body", children: stripeStatus?.connected ? (_jsx("div", { className: "space-y-4", children: _jsxs("div", { className: "flex items-center gap-3 p-4 rounded-lg bg-[hsl(var(--admin-success))]/10 border border-[hsl(var(--admin-success))]/20", children: [_jsx(CheckCircle, { className: "h-5 w-5 text-[hsl(var(--admin-success))]" }), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "font-medium text-[hsl(var(--admin-foreground))]", children: "Connected" }), _jsxs("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: ["Account ID: ", stripeStatus.accountId] })] }), stripeStatus.dashboardUrl && (_jsxs("a", { href: stripeStatus.dashboardUrl, target: "_blank", rel: "noopener noreferrer", className: "admin-btn admin-btn-secondary admin-btn-sm", children: [_jsx("span", { children: "Open Stripe Dashboard" }), _jsx(ExternalLink, { className: "h-4 w-4 ml-1" })] }))] }) })) : (_jsxs("div", { className: "flex items-center gap-3 p-4 rounded-lg bg-[hsl(var(--admin-warning))]/10 border border-[hsl(var(--admin-warning))]/20", children: [_jsx(AlertCircle, { className: "h-5 w-5 text-[hsl(var(--admin-warning))]" }), _jsxs("div", { children: [_jsx("p", { className: "font-medium text-[hsl(var(--admin-foreground))]", children: "Not Connected" }), _jsx("p", { className: "text-sm text-[hsl(var(--admin-foreground-muted))]", children: "Contact the platform administrator to set up payment processing." })] })] })) })] }), _jsx(PaymentMethodsManager, {}), _jsxs("div", { className: "admin-card", children: [_jsx("div", { className: "admin-card-header", children: _jsx("h2", { className: "admin-card-title", children: "Currency" }) }), _jsx("div", { className: "admin-card-body", children: _jsx("div", { className: "space-y-4", children: _jsxs("div", { children: [_jsx("label", { htmlFor: "currency", className: "admin-label", children: "Store Currency" }), _jsx(AdminSelect, { id: "currency", value: currency, onChange: setCurrency, options: CURRENCIES.map((c) => ({
|
|
115
114
|
value: c.code,
|
|
116
115
|
label: `${c.code} - ${c.name} (${c.symbol})`,
|
|
117
|
-
})), className: "w-full max-w-xs" }), _jsx("p", { className: "mt-1 text-sm text-[hsl(var(--admin-foreground-muted))]", children: "Prices are numbers with a currency label: changing the currency re-labels them without converting. Existing orders keep the currency they were placed in." })] }) }) })] }), _jsx(
|
|
116
|
+
})), className: "w-full max-w-xs" }), _jsx("p", { className: "mt-1 text-sm text-[hsl(var(--admin-foreground-muted))]", children: "Prices are numbers with a currency label: changing the currency re-labels them without converting. Existing orders keep the currency they were placed in." })] }) }) })] }), _jsx(AdminSaveBar, { isDirty: isDirty, changedFields: ['Currency'], onSave: handleSave, onDiscard: () => setCurrency(baselineValue?.currency ?? 'USD') })] }));
|
|
118
117
|
}
|
|
119
118
|
//# sourceMappingURL=PaymentSettings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentSettings.js","sourceRoot":"","sources":["../../../src/admin/components/PaymentSettings.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PaymentSettings.js","sourceRoot":"","sources":["../../../src/admin/components/PaymentSettings.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductForm.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProductForm.d.ts","sourceRoot":"","sources":["../../../src/admin/components/ProductForm.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,UAAU,CAAA;AAWlF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAc,GACf,EAAE,gBAAgB,2CAk/BlB"}
|