@actuate-media/cms-admin 0.8.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/LICENSE +21 -21
  2. package/dist/AdminRoot.d.ts.map +1 -1
  3. package/dist/AdminRoot.js +4 -0
  4. package/dist/AdminRoot.js.map +1 -1
  5. package/dist/actuate-admin.css +1 -1
  6. package/dist/components/SchedulePublishDialog.d.ts +18 -0
  7. package/dist/components/SchedulePublishDialog.d.ts.map +1 -0
  8. package/dist/components/SchedulePublishDialog.js +106 -0
  9. package/dist/components/SchedulePublishDialog.js.map +1 -0
  10. package/dist/components/SharePreviewLinkDialog.d.ts +17 -0
  11. package/dist/components/SharePreviewLinkDialog.d.ts.map +1 -0
  12. package/dist/components/SharePreviewLinkDialog.js +83 -0
  13. package/dist/components/SharePreviewLinkDialog.js.map +1 -0
  14. package/dist/index.d.ts +5 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +3 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/layout/Sidebar.d.ts.map +1 -1
  19. package/dist/layout/Sidebar.js +3 -2
  20. package/dist/layout/Sidebar.js.map +1 -1
  21. package/dist/views/ApiKeys.d.ts +5 -0
  22. package/dist/views/ApiKeys.d.ts.map +1 -0
  23. package/dist/views/ApiKeys.js +154 -0
  24. package/dist/views/ApiKeys.js.map +1 -0
  25. package/dist/views/DocumentEdit.d.ts.map +1 -1
  26. package/dist/views/DocumentEdit.js +15 -3
  27. package/dist/views/DocumentEdit.js.map +1 -1
  28. package/package.json +2 -2
  29. package/src/AdminRoot.tsx +5 -0
  30. package/src/components/SchedulePublishDialog.tsx +241 -0
  31. package/src/components/SharePreviewLinkDialog.tsx +227 -0
  32. package/src/index.ts +5 -0
  33. package/src/layout/Sidebar.tsx +3 -0
  34. package/src/views/ApiKeys.tsx +512 -0
  35. package/src/views/DocumentEdit.tsx +81 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentEdit.d.ts","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,GAAG,CAAA;IACX,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED,wBAAgB,YAAY,CAAC,EAC3B,cAAc,EACd,UAAU,EACV,MAAM,EACN,UAAU,GACX,EAAE,iBAAiB,2CAudnB"}
1
+ {"version":3,"file":"DocumentEdit.d.ts","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"AA6BA,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,GAAG,CAAA;IACX,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED,wBAAgB,YAAY,CAAC,EAC3B,cAAc,EACd,UAAU,EACV,MAAM,EACN,UAAU,GACX,EAAE,iBAAiB,2CA0hBnB"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useState, useEffect, useRef } from 'react';
4
- import { AlertTriangle, Eye, EyeOff, Save, Copy, Loader2, Clock } from 'lucide-react';
4
+ import { AlertTriangle, Calendar, Eye, EyeOff, Save, Copy, Loader2, Clock, Share2, XCircle, } from 'lucide-react';
5
5
  import { toast } from 'sonner';
6
6
  import { FieldRenderer } from '../fields/FieldRenderer.js';
7
7
  import { RelationshipField } from '../fields/RelationshipField.js';
@@ -10,6 +10,8 @@ import { LivePreview } from '../components/LivePreview.js';
10
10
  import { VersionHistory } from '../components/VersionHistory.js';
11
11
  import { PresenceIndicator } from '../components/PresenceIndicator.js';
12
12
  import { SEOPanel } from '../components/SEOPanel.js';
13
+ import { SchedulePublishDialog } from '../components/SchedulePublishDialog.js';
14
+ import { SharePreviewLinkDialog } from '../components/SharePreviewLinkDialog.js';
13
15
  import { cmsApi } from '../lib/api.js';
14
16
  export function DocumentEdit({ collectionSlug, documentId, config, onNavigate, }) {
15
17
  const isNew = !documentId;
@@ -23,7 +25,11 @@ export function DocumentEdit({ collectionSlug, documentId, config, onNavigate, }
23
25
  const [loading, setLoading] = useState(!isNew);
24
26
  const [showPreview, setShowPreview] = useState(false);
25
27
  const [showVersions, setShowVersions] = useState(false);
28
+ const [showSchedule, setShowSchedule] = useState(false);
29
+ const [showShareLink, setShowShareLink] = useState(false);
26
30
  const [docStatus, setDocStatus] = useState('DRAFT');
31
+ const [scheduledAt, setScheduledAt] = useState(null);
32
+ const [scheduledUnpublishAt, setScheduledUnpublishAt] = useState(null);
27
33
  const hasLoadedRef = useRef(false);
28
34
  const collections = config?.collections;
29
35
  const collection = Array.isArray(collections)
@@ -97,6 +103,8 @@ export function DocumentEdit({ collectionSlug, documentId, config, onNavigate, }
97
103
  setValues(merged);
98
104
  setInitialValues(merged);
99
105
  setDocStatus(doc.status ?? 'DRAFT');
106
+ setScheduledAt(doc.scheduledAt ?? null);
107
+ setScheduledUnpublishAt(doc.scheduledUnpublishAt ?? null);
100
108
  const loadedSeo = {};
101
109
  for (const key of SEO_FIELDS) {
102
110
  if (docData[key] !== undefined) {
@@ -244,7 +252,7 @@ export function DocumentEdit({ collectionSlug, documentId, config, onNavigate, }
244
252
  if (loading) {
245
253
  return (_jsx("div", { className: "flex items-center justify-center min-h-[300px]", children: _jsx(Loader2, { className: "w-8 h-8 animate-spin text-gray-400" }) }));
246
254
  }
247
- return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("h1", { className: "text-2xl font-bold", children: displayTitle }), _jsx("span", { className: `inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${statusColor}`, children: docStatus }), documentId && _jsx(PresenceIndicator, { documentId: documentId }), isDirty && _jsx("span", { className: "text-xs text-amber-600 font-medium", children: "Unsaved changes" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("button", { onClick: () => setShowPreview((v) => !v), className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: showPreview ? 'Hide preview' : 'Show preview', children: [showPreview ? _jsx(EyeOff, { className: "h-4 w-4" }) : _jsx(Eye, { className: "h-4 w-4" }), "Preview"] }), !isNew && (_jsxs(_Fragment, { children: [_jsxs("button", { onClick: () => setShowVersions(true), className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: "Version history", children: [_jsx(Clock, { className: "h-4 w-4" }), "History"] }), _jsxs("button", { onClick: handleDuplicate, className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: "Duplicate this document", children: [_jsx(Copy, { className: "h-4 w-4" }), "Duplicate"] })] }))] })] }), _jsxs("div", { className: showPreview ? 'grid grid-cols-2 gap-6' : '', children: [_jsxs("div", { className: "space-y-6", children: [fields.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center py-16 text-center rounded-lg border border-[var(--border)]", children: [_jsx("div", { className: "w-12 h-12 rounded-full bg-gray-100 flex items-center justify-center mb-4", children: _jsx(AlertTriangle, { className: "w-6 h-6 text-gray-400" }) }), _jsx("h3", { className: "text-sm font-medium text-gray-900 mb-1", children: "Collection schema not found" }), _jsx("p", { className: "text-sm text-gray-500", children: "No fields are defined for this collection." })] })) : (_jsxs("div", { className: "grid grid-cols-1 gap-6 lg:grid-cols-3", children: [_jsx("div", { className: "space-y-6 lg:col-span-2", children: mainFields.map((field) => (_jsx(FieldRenderer, { field: field, value: values[field.name], onChange: (val) => handleFieldChange(field.name, val) }, field.name))) }), _jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "rounded-lg border border-[var(--border)] bg-[var(--card)] p-4", children: [_jsx("h3", { className: "mb-4 font-semibold", children: "Status" }), _jsxs("div", { className: "space-y-3", children: [!isNew && docStatus === 'DRAFT' && (_jsx(Button, { variant: "primary", className: "w-full", onClick: handlePublish, loading: saving, children: "Publish" })), !isNew && docStatus === 'PUBLISHED' && (_jsx(Button, { variant: "secondary", className: "w-full", onClick: handleUnpublish, loading: saving, children: "Unpublish" }))] })] }), sidebarFields.length > 0 && (_jsxs("div", { className: "rounded-lg border border-[var(--border)] bg-[var(--card)] p-4", children: [_jsx("h3", { className: "mb-4 font-semibold", children: "Metadata" }), sidebarFields.map((field) => (_jsx("div", { className: "mb-4", children: _jsx(FieldRenderer, { field: field, value: values[field.name], onChange: (val) => handleFieldChange(field.name, val) }) }, field.name)))] })), _jsx(SEOPanel, { title: values[useAsTitleField] ?? values.title ?? '', slug: docSlug, content: htmlContent, seoData: seoData, onChange: setSeoData, siteUrl: config?.siteUrl }), hasLayout && (_jsxs("div", { className: "rounded-lg border border-[var(--border)] bg-[var(--card)] p-4", children: [_jsx("h3", { className: "mb-1 font-semibold", children: "Layout" }), _jsx("p", { className: "mb-4 text-xs text-[var(--muted-foreground)]", children: "Assign header/footer variants. Child pages inherit from ancestors." }), _jsx("div", { className: "space-y-4", children: layoutRegions.map((region) => (_jsxs("div", { children: [_jsx(RelationshipField, { label: region.label, value: layoutAssignments[region.name] ?? '', onChange: (val) => {
255
+ return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("h1", { className: "text-2xl font-bold", children: displayTitle }), _jsx("span", { className: `inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${statusColor}`, children: docStatus }), documentId && _jsx(PresenceIndicator, { documentId: documentId }), isDirty && _jsx("span", { className: "text-xs text-amber-600 font-medium", children: "Unsaved changes" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("button", { onClick: () => setShowPreview((v) => !v), className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: showPreview ? 'Hide preview' : 'Show preview', children: [showPreview ? _jsx(EyeOff, { className: "h-4 w-4" }) : _jsx(Eye, { className: "h-4 w-4" }), "Preview"] }), !isNew && (_jsxs(_Fragment, { children: [_jsxs("button", { onClick: () => setShowShareLink(true), className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: "Share a signed preview link for the current draft", children: [_jsx(Share2, { className: "h-4 w-4" }), "Share preview"] }), _jsxs("button", { onClick: () => setShowVersions(true), className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: "Version history", children: [_jsx(Clock, { className: "h-4 w-4" }), "History"] }), _jsxs("button", { onClick: handleDuplicate, className: "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm text-[var(--muted-foreground)] hover:bg-[var(--muted)] hover:text-[var(--foreground)]", title: "Duplicate this document", children: [_jsx(Copy, { className: "h-4 w-4" }), "Duplicate"] })] }))] })] }), _jsxs("div", { className: showPreview ? 'grid grid-cols-2 gap-6' : '', children: [_jsxs("div", { className: "space-y-6", children: [fields.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center py-16 text-center rounded-lg border border-[var(--border)]", children: [_jsx("div", { className: "w-12 h-12 rounded-full bg-gray-100 flex items-center justify-center mb-4", children: _jsx(AlertTriangle, { className: "w-6 h-6 text-gray-400" }) }), _jsx("h3", { className: "text-sm font-medium text-gray-900 mb-1", children: "Collection schema not found" }), _jsx("p", { className: "text-sm text-gray-500", children: "No fields are defined for this collection." })] })) : (_jsxs("div", { className: "grid grid-cols-1 gap-6 lg:grid-cols-3", children: [_jsx("div", { className: "space-y-6 lg:col-span-2", children: mainFields.map((field) => (_jsx(FieldRenderer, { field: field, value: values[field.name], onChange: (val) => handleFieldChange(field.name, val) }, field.name))) }), _jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "rounded-lg border border-[var(--border)] bg-[var(--card)] p-4", children: [_jsx("h3", { className: "mb-4 font-semibold", children: "Status" }), _jsxs("div", { className: "space-y-3", children: [!isNew && docStatus === 'DRAFT' && (_jsx(Button, { variant: "primary", className: "w-full", onClick: handlePublish, loading: saving, children: "Publish" })), !isNew && docStatus === 'PUBLISHED' && (_jsx(Button, { variant: "secondary", className: "w-full", onClick: handleUnpublish, loading: saving, children: "Unpublish" })), !isNew && (_jsxs("button", { onClick: () => setShowSchedule(true), className: "inline-flex w-full items-center justify-center gap-1.5 rounded-md border border-[var(--border)] bg-white px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-50", children: [_jsx(Calendar, { className: "h-4 w-4" }), scheduledAt || scheduledUnpublishAt ? 'Reschedule' : 'Schedule'] })), !isNew && (scheduledAt || scheduledUnpublishAt) && (_jsxs("div", { className: "space-y-1 rounded-md border border-blue-100 bg-blue-50 px-3 py-2 text-xs text-blue-900", children: [scheduledAt && (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Calendar, { className: "h-3.5 w-3.5" }), "Publishes ", new Date(scheduledAt).toLocaleString()] })), scheduledUnpublishAt && (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(XCircle, { className: "h-3.5 w-3.5" }), "Unpublishes ", new Date(scheduledUnpublishAt).toLocaleString()] }))] }))] })] }), sidebarFields.length > 0 && (_jsxs("div", { className: "rounded-lg border border-[var(--border)] bg-[var(--card)] p-4", children: [_jsx("h3", { className: "mb-4 font-semibold", children: "Metadata" }), sidebarFields.map((field) => (_jsx("div", { className: "mb-4", children: _jsx(FieldRenderer, { field: field, value: values[field.name], onChange: (val) => handleFieldChange(field.name, val) }) }, field.name)))] })), _jsx(SEOPanel, { title: values[useAsTitleField] ?? values.title ?? '', slug: docSlug, content: htmlContent, seoData: seoData, onChange: setSeoData, siteUrl: config?.siteUrl }), hasLayout && (_jsxs("div", { className: "rounded-lg border border-[var(--border)] bg-[var(--card)] p-4", children: [_jsx("h3", { className: "mb-1 font-semibold", children: "Layout" }), _jsx("p", { className: "mb-4 text-xs text-[var(--muted-foreground)]", children: "Assign header/footer variants. Child pages inherit from ancestors." }), _jsx("div", { className: "space-y-4", children: layoutRegions.map((region) => (_jsxs("div", { children: [_jsx(RelationshipField, { label: region.label, value: layoutAssignments[region.name] ?? '', onChange: (val) => {
248
256
  setLayoutAssignments((prev) => {
249
257
  const next = { ...prev };
250
258
  if (val && typeof val === 'string') {
@@ -267,6 +275,10 @@ export function DocumentEdit({ collectionSlug, documentId, config, onNavigate, }
267
275
  const restoredData = data;
268
276
  setValues(restoredData);
269
277
  setInitialValues(restoredData);
270
- } }))] }));
278
+ } })), !isNew && documentId && (_jsx(SchedulePublishDialog, { collectionSlug: collectionSlug, documentId: documentId, scheduledAt: scheduledAt, scheduledUnpublishAt: scheduledUnpublishAt, open: showSchedule, onClose: () => setShowSchedule(false), onScheduled: (next) => {
279
+ setDocStatus(next.status);
280
+ setScheduledAt(next.scheduledAt);
281
+ setScheduledUnpublishAt(next.scheduledUnpublishAt);
282
+ } })), !isNew && documentId && (_jsx(SharePreviewLinkDialog, { collectionSlug: collectionSlug, documentId: documentId, documentSlug: docSlug, siteUrl: config?.siteUrl, urlPrefix: collection?.urlPrefix ?? collectionSlug, open: showShareLink, onClose: () => setShowShareLink(false) }))] }));
271
283
  }
272
284
  //# sourceMappingURL=DocumentEdit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentEdit.js","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DocumentEdit.js","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/cms-admin",
3
- "version": "0.8.2",
3
+ "version": "0.10.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/actuate-media/actuatecms.git",
@@ -71,7 +71,7 @@
71
71
  "tailwindcss": "^4.0.0",
72
72
  "typescript": "^5.7.0",
73
73
  "vitest": "^3.0.0",
74
- "@actuate-media/cms-core": "0.11.2"
74
+ "@actuate-media/cms-core": "0.19.0"
75
75
  },
76
76
  "scripts": {
77
77
  "build": "tsc --project tsconfig.json && npx @tailwindcss/cli -i src/styles/build-input.css -o dist/actuate-admin.css --minify",
package/src/AdminRoot.tsx CHANGED
@@ -13,6 +13,7 @@ import { Forms } from './views/Forms.js'
13
13
  import { FormEditor } from './views/FormEditor.js'
14
14
  import { FormSubmissions } from './views/FormSubmissions.js'
15
15
  import { Users } from './views/Users.js'
16
+ import { ApiKeys } from './views/ApiKeys.js'
16
17
  import { SEO } from './views/SEO.js'
17
18
  import { ScriptTags } from './views/ScriptTags.js'
18
19
  import { ScriptTagEditor } from './views/ScriptTagEditor.js'
@@ -218,6 +219,10 @@ function AdminShell({
218
219
  return <Users onNavigate={navigate} />
219
220
  }
220
221
 
222
+ if (matchRoute('/api-keys')) {
223
+ return <ApiKeys onNavigate={navigate} />
224
+ }
225
+
221
226
  if (matchRoute('/settings')) {
222
227
  return <Settings onNavigate={navigate} config={config} />
223
228
  }
@@ -0,0 +1,241 @@
1
+ 'use client'
2
+
3
+ import { useEffect, useState } from 'react'
4
+ import { Calendar, Clock, Loader2, X } from 'lucide-react'
5
+ import { toast } from 'sonner'
6
+ import { cmsApi } from '../lib/api.js'
7
+
8
+ export interface SchedulePublishDialogProps {
9
+ collectionSlug: string
10
+ documentId: string
11
+ /** Existing scheduled publish time, if any. */
12
+ scheduledAt?: string | null
13
+ /** Existing scheduled unpublish time, if any. */
14
+ scheduledUnpublishAt?: string | null
15
+ open: boolean
16
+ onClose: () => void
17
+ /** Called with the updated schedule fields after a successful save. */
18
+ onScheduled?: (next: {
19
+ status: string
20
+ scheduledAt: string | null
21
+ scheduledUnpublishAt: string | null
22
+ }) => void
23
+ }
24
+
25
+ /**
26
+ * Convert a Date or ISO string to the `YYYY-MM-DDTHH:mm` shape that the
27
+ * `<input type="datetime-local">` element expects, in the user's local
28
+ * timezone (the input is timezone-naive but we present + parse it as local).
29
+ */
30
+ function toLocalDateTimeInput(value: string | Date | null | undefined): string {
31
+ if (!value) return ''
32
+ const d = typeof value === 'string' ? new Date(value) : value
33
+ if (Number.isNaN(d.getTime())) return ''
34
+ const pad = (n: number) => String(n).padStart(2, '0')
35
+ return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`
36
+ }
37
+
38
+ /** Round "now + 1 hour" to the next quarter-hour for a friendly default. */
39
+ function defaultScheduleTime(): string {
40
+ const d = new Date(Date.now() + 60 * 60 * 1000)
41
+ d.setMinutes(Math.ceil(d.getMinutes() / 15) * 15, 0, 0)
42
+ return toLocalDateTimeInput(d)
43
+ }
44
+
45
+ export function SchedulePublishDialog({
46
+ collectionSlug,
47
+ documentId,
48
+ scheduledAt,
49
+ scheduledUnpublishAt,
50
+ open,
51
+ onClose,
52
+ onScheduled,
53
+ }: SchedulePublishDialogProps) {
54
+ const [publishAt, setPublishAt] = useState('')
55
+ const [unpublishAt, setUnpublishAt] = useState('')
56
+ const [includeUnpublish, setIncludeUnpublish] = useState(false)
57
+ const [saving, setSaving] = useState(false)
58
+ const [cancelling, setCancelling] = useState(false)
59
+
60
+ const hasExistingSchedule = Boolean(scheduledAt || scheduledUnpublishAt)
61
+
62
+ useEffect(() => {
63
+ if (!open) return
64
+ setPublishAt(scheduledAt ? toLocalDateTimeInput(scheduledAt) : defaultScheduleTime())
65
+ setUnpublishAt(scheduledUnpublishAt ? toLocalDateTimeInput(scheduledUnpublishAt) : '')
66
+ setIncludeUnpublish(Boolean(scheduledUnpublishAt))
67
+ }, [open, scheduledAt, scheduledUnpublishAt])
68
+
69
+ async function handleSave() {
70
+ if (!publishAt && !(includeUnpublish && unpublishAt)) {
71
+ toast.error('Pick a publish or unpublish time')
72
+ return
73
+ }
74
+
75
+ // datetime-local is parsed by the browser as local time; new Date() on
76
+ // that string respects the user's timezone and serialises to a UTC
77
+ // ISO string the server can compare against `Date.now()` cleanly.
78
+ const publishDate = publishAt ? new Date(publishAt) : null
79
+ const unpublishDate = includeUnpublish && unpublishAt ? new Date(unpublishAt) : null
80
+
81
+ if (publishDate && publishDate.getTime() <= Date.now()) {
82
+ toast.error('Publish time must be in the future')
83
+ return
84
+ }
85
+ if (unpublishDate && unpublishDate.getTime() <= Date.now()) {
86
+ toast.error('Unpublish time must be in the future')
87
+ return
88
+ }
89
+ if (publishDate && unpublishDate && unpublishDate <= publishDate) {
90
+ toast.error('Unpublish time must be after publish time')
91
+ return
92
+ }
93
+
94
+ setSaving(true)
95
+ const res = await cmsApi<any>(`/collections/${collectionSlug}/${documentId}/schedule`, {
96
+ method: 'POST',
97
+ body: JSON.stringify({
98
+ scheduledAt: publishDate ? publishDate.toISOString() : null,
99
+ scheduledUnpublishAt: unpublishDate ? unpublishDate.toISOString() : null,
100
+ }),
101
+ })
102
+ setSaving(false)
103
+ if (res.error) {
104
+ toast.error(res.error)
105
+ return
106
+ }
107
+ toast.success(publishDate ? 'Publish scheduled' : 'Unpublish scheduled')
108
+ onScheduled?.({
109
+ status: res.data?.status ?? 'SCHEDULED',
110
+ scheduledAt: res.data?.scheduledAt ?? (publishDate ? publishDate.toISOString() : null),
111
+ scheduledUnpublishAt:
112
+ res.data?.scheduledUnpublishAt ?? (unpublishDate ? unpublishDate.toISOString() : null),
113
+ })
114
+ onClose()
115
+ }
116
+
117
+ async function handleCancelSchedule() {
118
+ setCancelling(true)
119
+ const res = await cmsApi<any>(`/collections/${collectionSlug}/${documentId}/schedule`, {
120
+ method: 'DELETE',
121
+ })
122
+ setCancelling(false)
123
+ if (res.error) {
124
+ toast.error(res.error)
125
+ return
126
+ }
127
+ toast.success('Schedule cancelled')
128
+ onScheduled?.({
129
+ status: res.data?.status ?? 'DRAFT',
130
+ scheduledAt: null,
131
+ scheduledUnpublishAt: null,
132
+ })
133
+ onClose()
134
+ }
135
+
136
+ if (!open) return null
137
+
138
+ return (
139
+ <div className="fixed inset-0 z-50 flex items-center justify-center p-4">
140
+ <div className="fixed inset-0 bg-black/40" onClick={onClose} />
141
+ <div className="relative w-full max-w-md rounded-lg bg-white shadow-xl">
142
+ <div className="flex items-center justify-between border-b border-gray-200 px-4 py-3">
143
+ <div className="flex items-center gap-2">
144
+ <Calendar className="h-5 w-5 text-gray-600" />
145
+ <h2 className="text-lg font-semibold text-gray-900">Schedule publishing</h2>
146
+ </div>
147
+ <button
148
+ onClick={onClose}
149
+ className="rounded-lg p-1.5 transition-colors hover:bg-gray-100"
150
+ >
151
+ <X className="h-5 w-5 text-gray-500" />
152
+ </button>
153
+ </div>
154
+
155
+ <div className="space-y-4 px-4 py-4">
156
+ <div className="space-y-1.5">
157
+ <label className="text-sm font-medium text-gray-700">Publish at</label>
158
+ <div className="relative">
159
+ <Clock className="pointer-events-none absolute left-2.5 top-2.5 h-4 w-4 text-gray-400" />
160
+ <input
161
+ type="datetime-local"
162
+ value={publishAt}
163
+ onChange={(e) => setPublishAt(e.target.value)}
164
+ min={toLocalDateTimeInput(new Date(Date.now() + 60 * 1000))}
165
+ className="w-full rounded-md border border-gray-300 bg-white py-2 pl-9 pr-3 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500"
166
+ />
167
+ </div>
168
+ <p className="text-xs text-gray-500">
169
+ The document will move from DRAFT to PUBLISHED at this time (your local timezone).
170
+ </p>
171
+ </div>
172
+
173
+ <label className="flex items-center gap-2 text-sm text-gray-700">
174
+ <input
175
+ type="checkbox"
176
+ checked={includeUnpublish}
177
+ onChange={(e) => setIncludeUnpublish(e.target.checked)}
178
+ className="h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500"
179
+ />
180
+ Also schedule an unpublish
181
+ </label>
182
+
183
+ {includeUnpublish && (
184
+ <div className="space-y-1.5">
185
+ <label className="text-sm font-medium text-gray-700">Unpublish at</label>
186
+ <div className="relative">
187
+ <Clock className="pointer-events-none absolute left-2.5 top-2.5 h-4 w-4 text-gray-400" />
188
+ <input
189
+ type="datetime-local"
190
+ value={unpublishAt}
191
+ onChange={(e) => setUnpublishAt(e.target.value)}
192
+ min={publishAt || toLocalDateTimeInput(new Date(Date.now() + 60 * 1000))}
193
+ className="w-full rounded-md border border-gray-300 bg-white py-2 pl-9 pr-3 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500"
194
+ />
195
+ </div>
196
+ </div>
197
+ )}
198
+ </div>
199
+
200
+ <div className="flex items-center justify-between gap-2 border-t border-gray-200 px-4 py-3">
201
+ {hasExistingSchedule ? (
202
+ <button
203
+ onClick={handleCancelSchedule}
204
+ disabled={cancelling || saving}
205
+ className="inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium text-red-700 hover:bg-red-50 disabled:opacity-50"
206
+ >
207
+ {cancelling ? (
208
+ <Loader2 className="h-4 w-4 animate-spin" />
209
+ ) : (
210
+ <X className="h-4 w-4" />
211
+ )}
212
+ Cancel schedule
213
+ </button>
214
+ ) : (
215
+ <span />
216
+ )}
217
+ <div className="flex items-center gap-2">
218
+ <button
219
+ onClick={onClose}
220
+ className="rounded-md px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100"
221
+ >
222
+ Close
223
+ </button>
224
+ <button
225
+ onClick={handleSave}
226
+ disabled={saving || cancelling}
227
+ className="inline-flex items-center gap-1.5 rounded-md bg-blue-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-blue-700 disabled:opacity-50"
228
+ >
229
+ {saving ? (
230
+ <Loader2 className="h-4 w-4 animate-spin" />
231
+ ) : (
232
+ <Calendar className="h-4 w-4" />
233
+ )}
234
+ {hasExistingSchedule ? 'Reschedule' : 'Schedule'}
235
+ </button>
236
+ </div>
237
+ </div>
238
+ </div>
239
+ </div>
240
+ )
241
+ }