@actuate-media/cms-admin 0.1.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.
- package/dist/AdminRoot.d.ts +21 -0
- package/dist/AdminRoot.d.ts.map +1 -0
- package/dist/AdminRoot.js +136 -0
- package/dist/AdminRoot.js.map +1 -0
- package/dist/components/Breadcrumbs.d.ts +6 -0
- package/dist/components/Breadcrumbs.d.ts.map +1 -0
- package/dist/components/Breadcrumbs.js +52 -0
- package/dist/components/Breadcrumbs.js.map +1 -0
- package/dist/components/CommandPalette.d.ts +7 -0
- package/dist/components/CommandPalette.d.ts.map +1 -0
- package/dist/components/CommandPalette.js +152 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +17 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +24 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/FocalPointPicker.d.ts +9 -0
- package/dist/components/FocalPointPicker.d.ts.map +1 -0
- package/dist/components/FocalPointPicker.js +19 -0
- package/dist/components/FocalPointPicker.js.map +1 -0
- package/dist/components/FolderTree.d.ts +28 -0
- package/dist/components/FolderTree.d.ts.map +1 -0
- package/dist/components/FolderTree.js +198 -0
- package/dist/components/FolderTree.js.map +1 -0
- package/dist/components/LivePreview.d.ts +10 -0
- package/dist/components/LivePreview.d.ts.map +1 -0
- package/dist/components/LivePreview.js +62 -0
- package/dist/components/LivePreview.js.map +1 -0
- package/dist/components/LocaleProvider.d.ts +28 -0
- package/dist/components/LocaleProvider.d.ts.map +1 -0
- package/dist/components/LocaleProvider.js +29 -0
- package/dist/components/LocaleProvider.js.map +1 -0
- package/dist/components/LocaleSwitcher.d.ts +2 -0
- package/dist/components/LocaleSwitcher.d.ts.map +1 -0
- package/dist/components/LocaleSwitcher.js +13 -0
- package/dist/components/LocaleSwitcher.js.map +1 -0
- package/dist/components/MediaPickerModal.d.ts +8 -0
- package/dist/components/MediaPickerModal.d.ts.map +1 -0
- package/dist/components/MediaPickerModal.js +53 -0
- package/dist/components/MediaPickerModal.js.map +1 -0
- package/dist/components/PresenceIndicator.d.ts +7 -0
- package/dist/components/PresenceIndicator.d.ts.map +1 -0
- package/dist/components/PresenceIndicator.js +37 -0
- package/dist/components/PresenceIndicator.js.map +1 -0
- package/dist/components/SEOPanel.d.ts +26 -0
- package/dist/components/SEOPanel.d.ts.map +1 -0
- package/dist/components/SEOPanel.js +249 -0
- package/dist/components/SEOPanel.js.map +1 -0
- package/dist/components/ThemeProvider.d.ts +13 -0
- package/dist/components/ThemeProvider.d.ts.map +1 -0
- package/dist/components/ThemeProvider.js +62 -0
- package/dist/components/ThemeProvider.js.map +1 -0
- package/dist/components/TipTapEditor.d.ts +9 -0
- package/dist/components/TipTapEditor.d.ts.map +1 -0
- package/dist/components/TipTapEditor.js +167 -0
- package/dist/components/TipTapEditor.js.map +1 -0
- package/dist/components/VersionHistory.d.ts +9 -0
- package/dist/components/VersionHistory.d.ts.map +1 -0
- package/dist/components/VersionHistory.js +70 -0
- package/dist/components/VersionHistory.js.map +1 -0
- package/dist/components/ui/Avatar.d.ts +9 -0
- package/dist/components/ui/Avatar.d.ts.map +1 -0
- package/dist/components/ui/Avatar.js +21 -0
- package/dist/components/ui/Avatar.js.map +1 -0
- package/dist/components/ui/Badge.d.ts +5 -0
- package/dist/components/ui/Badge.d.ts.map +1 -0
- package/dist/components/ui/Badge.js +17 -0
- package/dist/components/ui/Badge.js.map +1 -0
- package/dist/components/ui/Button.d.ts +12 -0
- package/dist/components/ui/Button.d.ts.map +1 -0
- package/dist/components/ui/Button.js +17 -0
- package/dist/components/ui/Button.js.map +1 -0
- package/dist/components/ui/CommandPalette.d.ts +14 -0
- package/dist/components/ui/CommandPalette.d.ts.map +1 -0
- package/dist/components/ui/CommandPalette.js +52 -0
- package/dist/components/ui/CommandPalette.js.map +1 -0
- package/dist/components/ui/ConfirmDialog.d.ts +12 -0
- package/dist/components/ui/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/ui/ConfirmDialog.js +11 -0
- package/dist/components/ui/ConfirmDialog.js.map +1 -0
- package/dist/components/ui/DataTable.d.ts +30 -0
- package/dist/components/ui/DataTable.d.ts.map +1 -0
- package/dist/components/ui/DataTable.js +40 -0
- package/dist/components/ui/DataTable.js.map +1 -0
- package/dist/components/ui/EmptyState.d.ts +10 -0
- package/dist/components/ui/EmptyState.d.ts.map +1 -0
- package/dist/components/ui/EmptyState.js +6 -0
- package/dist/components/ui/EmptyState.js.map +1 -0
- package/dist/components/ui/Modal.d.ts +10 -0
- package/dist/components/ui/Modal.d.ts.map +1 -0
- package/dist/components/ui/Modal.js +19 -0
- package/dist/components/ui/Modal.js.map +1 -0
- package/dist/components/ui/Pagination.d.ts +9 -0
- package/dist/components/ui/Pagination.d.ts.map +1 -0
- package/dist/components/ui/Pagination.js +21 -0
- package/dist/components/ui/Pagination.js.map +1 -0
- package/dist/components/ui/SearchInput.d.ts +7 -0
- package/dist/components/ui/SearchInput.d.ts.map +1 -0
- package/dist/components/ui/SearchInput.js +6 -0
- package/dist/components/ui/SearchInput.js.map +1 -0
- package/dist/components/ui/Skeleton.d.ts +9 -0
- package/dist/components/ui/Skeleton.d.ts.map +1 -0
- package/dist/components/ui/Skeleton.js +11 -0
- package/dist/components/ui/Skeleton.js.map +1 -0
- package/dist/components/ui/Toast.d.ts +18 -0
- package/dist/components/ui/Toast.d.ts.map +1 -0
- package/dist/components/ui/Toast.js +29 -0
- package/dist/components/ui/Toast.js.map +1 -0
- package/dist/components/ui/index.d.ts +25 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +13 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/fields/ArrayField.d.ts +9 -0
- package/dist/fields/ArrayField.d.ts.map +1 -0
- package/dist/fields/ArrayField.js +21 -0
- package/dist/fields/ArrayField.js.map +1 -0
- package/dist/fields/BlockBuilderField.d.ts +16 -0
- package/dist/fields/BlockBuilderField.d.ts.map +1 -0
- package/dist/fields/BlockBuilderField.js +110 -0
- package/dist/fields/BlockBuilderField.js.map +1 -0
- package/dist/fields/DateField.d.ts +9 -0
- package/dist/fields/DateField.d.ts.map +1 -0
- package/dist/fields/DateField.js +6 -0
- package/dist/fields/DateField.js.map +1 -0
- package/dist/fields/FieldRenderer.d.ts +22 -0
- package/dist/fields/FieldRenderer.d.ts.map +1 -0
- package/dist/fields/FieldRenderer.js +38 -0
- package/dist/fields/FieldRenderer.js.map +1 -0
- package/dist/fields/GroupField.d.ts +8 -0
- package/dist/fields/GroupField.d.ts.map +1 -0
- package/dist/fields/GroupField.js +8 -0
- package/dist/fields/GroupField.js.map +1 -0
- package/dist/fields/MediaField.d.ts +13 -0
- package/dist/fields/MediaField.d.ts.map +1 -0
- package/dist/fields/MediaField.js +6 -0
- package/dist/fields/MediaField.js.map +1 -0
- package/dist/fields/NavBuilderField.d.ts +15 -0
- package/dist/fields/NavBuilderField.d.ts.map +1 -0
- package/dist/fields/NavBuilderField.js +19 -0
- package/dist/fields/NavBuilderField.js.map +1 -0
- package/dist/fields/NumberField.d.ts +12 -0
- package/dist/fields/NumberField.d.ts.map +1 -0
- package/dist/fields/NumberField.js +6 -0
- package/dist/fields/NumberField.js.map +1 -0
- package/dist/fields/RelationshipField.d.ts +13 -0
- package/dist/fields/RelationshipField.d.ts.map +1 -0
- package/dist/fields/RelationshipField.js +119 -0
- package/dist/fields/RelationshipField.js.map +1 -0
- package/dist/fields/RichTextField.d.ts +9 -0
- package/dist/fields/RichTextField.d.ts.map +1 -0
- package/dist/fields/RichTextField.js +7 -0
- package/dist/fields/RichTextField.js.map +1 -0
- package/dist/fields/SelectField.d.ts +11 -0
- package/dist/fields/SelectField.d.ts.map +1 -0
- package/dist/fields/SelectField.js +31 -0
- package/dist/fields/SelectField.js.map +1 -0
- package/dist/fields/SlugField.d.ts +10 -0
- package/dist/fields/SlugField.d.ts.map +1 -0
- package/dist/fields/SlugField.js +15 -0
- package/dist/fields/SlugField.js.map +1 -0
- package/dist/fields/TextField.d.ts +11 -0
- package/dist/fields/TextField.d.ts.map +1 -0
- package/dist/fields/TextField.js +8 -0
- package/dist/fields/TextField.js.map +1 -0
- package/dist/fields/ToggleField.d.ts +8 -0
- package/dist/fields/ToggleField.d.ts.map +1 -0
- package/dist/fields/ToggleField.js +6 -0
- package/dist/fields/ToggleField.js.map +1 -0
- package/dist/fields/block-types.d.ts +18 -0
- package/dist/fields/block-types.d.ts.map +1 -0
- package/dist/fields/block-types.js +88 -0
- package/dist/fields/block-types.js.map +1 -0
- package/dist/fields/index.d.ts +18 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.js +16 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/hooks/useContentLock.d.ts +12 -0
- package/dist/hooks/useContentLock.d.ts.map +1 -0
- package/dist/hooks/useContentLock.js +38 -0
- package/dist/hooks/useContentLock.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +2 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDebounce.js +11 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts +6 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +26 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/Header.d.ts +7 -0
- package/dist/layout/Header.d.ts.map +1 -0
- package/dist/layout/Header.js +18 -0
- package/dist/layout/Header.js.map +1 -0
- package/dist/layout/Layout.d.ts +10 -0
- package/dist/layout/Layout.d.ts.map +1 -0
- package/dist/layout/Layout.js +25 -0
- package/dist/layout/Layout.js.map +1 -0
- package/dist/layout/Sidebar.d.ts +9 -0
- package/dist/layout/Sidebar.d.ts.map +1 -0
- package/dist/layout/Sidebar.js +63 -0
- package/dist/layout/Sidebar.js.map +1 -0
- package/dist/lib/api.d.ts +8 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +59 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/search.d.ts +11 -0
- package/dist/lib/search.d.ts.map +1 -0
- package/dist/lib/search.js +46 -0
- package/dist/lib/search.js.map +1 -0
- package/dist/lib/useApiData.d.ts +8 -0
- package/dist/lib/useApiData.d.ts.map +1 -0
- package/dist/lib/useApiData.js +36 -0
- package/dist/lib/useApiData.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/router/index.d.ts +10 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +61 -0
- package/dist/router/index.js.map +1 -0
- package/dist/views/CollectionList.d.ts +7 -0
- package/dist/views/CollectionList.d.ts.map +1 -0
- package/dist/views/CollectionList.js +107 -0
- package/dist/views/CollectionList.js.map +1 -0
- package/dist/views/Dashboard.d.ts +5 -0
- package/dist/views/Dashboard.d.ts.map +1 -0
- package/dist/views/Dashboard.js +17 -0
- package/dist/views/Dashboard.js.map +1 -0
- package/dist/views/DocumentEdit.d.ts +8 -0
- package/dist/views/DocumentEdit.d.ts.map +1 -0
- package/dist/views/DocumentEdit.js +210 -0
- package/dist/views/DocumentEdit.js.map +1 -0
- package/dist/views/FormEditor.d.ts +6 -0
- package/dist/views/FormEditor.d.ts.map +1 -0
- package/dist/views/FormEditor.js +126 -0
- package/dist/views/FormEditor.js.map +1 -0
- package/dist/views/FormSubmissions.d.ts +6 -0
- package/dist/views/FormSubmissions.d.ts.map +1 -0
- package/dist/views/FormSubmissions.js +88 -0
- package/dist/views/FormSubmissions.js.map +1 -0
- package/dist/views/Forms.d.ts +5 -0
- package/dist/views/Forms.d.ts.map +1 -0
- package/dist/views/Forms.js +24 -0
- package/dist/views/Forms.js.map +1 -0
- package/dist/views/Login.d.ts +10 -0
- package/dist/views/Login.d.ts.map +1 -0
- package/dist/views/Login.js +83 -0
- package/dist/views/Login.js.map +1 -0
- package/dist/views/MediaBrowser.d.ts +5 -0
- package/dist/views/MediaBrowser.d.ts.map +1 -0
- package/dist/views/MediaBrowser.js +245 -0
- package/dist/views/MediaBrowser.js.map +1 -0
- package/dist/views/PageEditor.d.ts +6 -0
- package/dist/views/PageEditor.d.ts.map +1 -0
- package/dist/views/PageEditor.js +74 -0
- package/dist/views/PageEditor.js.map +1 -0
- package/dist/views/Pages.d.ts +5 -0
- package/dist/views/Pages.d.ts.map +1 -0
- package/dist/views/Pages.js +127 -0
- package/dist/views/Pages.js.map +1 -0
- package/dist/views/PostEditor.d.ts +6 -0
- package/dist/views/PostEditor.d.ts.map +1 -0
- package/dist/views/PostEditor.js +79 -0
- package/dist/views/PostEditor.js.map +1 -0
- package/dist/views/Posts.d.ts +5 -0
- package/dist/views/Posts.d.ts.map +1 -0
- package/dist/views/Posts.js +67 -0
- package/dist/views/Posts.js.map +1 -0
- package/dist/views/Redirects.d.ts +5 -0
- package/dist/views/Redirects.d.ts.map +1 -0
- package/dist/views/Redirects.js +79 -0
- package/dist/views/Redirects.js.map +1 -0
- package/dist/views/SEO.d.ts +6 -0
- package/dist/views/SEO.d.ts.map +1 -0
- package/dist/views/SEO.js +120 -0
- package/dist/views/SEO.js.map +1 -0
- package/dist/views/Settings.d.ts +5 -0
- package/dist/views/Settings.d.ts.map +1 -0
- package/dist/views/Settings.js +95 -0
- package/dist/views/Settings.js.map +1 -0
- package/dist/views/SetupWizard.d.ts +13 -0
- package/dist/views/SetupWizard.d.ts.map +1 -0
- package/dist/views/SetupWizard.js +68 -0
- package/dist/views/SetupWizard.js.map +1 -0
- package/dist/views/Users.d.ts +5 -0
- package/dist/views/Users.d.ts.map +1 -0
- package/dist/views/Users.js +69 -0
- package/dist/views/Users.js.map +1 -0
- package/package.json +71 -0
- package/src/styles/tailwind.css +2 -0
- package/src/styles/theme.css +175 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
3
|
+
function stripBase(pathname, basePath) {
|
|
4
|
+
if (pathname.startsWith(basePath)) {
|
|
5
|
+
const rest = pathname.slice(basePath.length);
|
|
6
|
+
return rest === '' || rest === '/' ? '/' : rest.startsWith('/') ? rest : `/${rest}`;
|
|
7
|
+
}
|
|
8
|
+
return '/';
|
|
9
|
+
}
|
|
10
|
+
export function useAdminRouter(basePath = '/admin', serverPath = '/') {
|
|
11
|
+
const [currentPath, setCurrentPath] = useState(serverPath);
|
|
12
|
+
const baseRef = useRef(basePath);
|
|
13
|
+
baseRef.current = basePath;
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (typeof window !== 'undefined') {
|
|
16
|
+
const browserPath = stripBase(window.location.pathname, basePath);
|
|
17
|
+
if (browserPath !== currentPath) {
|
|
18
|
+
setCurrentPath(browserPath);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
function onPopState() {
|
|
24
|
+
setCurrentPath(stripBase(window.location.pathname, baseRef.current));
|
|
25
|
+
}
|
|
26
|
+
window.addEventListener('popstate', onPopState);
|
|
27
|
+
return () => window.removeEventListener('popstate', onPopState);
|
|
28
|
+
}, []);
|
|
29
|
+
const navigate = useCallback((path) => {
|
|
30
|
+
const normalizedPath = path.startsWith('/') ? path : `/${path}`;
|
|
31
|
+
setCurrentPath(normalizedPath);
|
|
32
|
+
const fullUrl = normalizedPath === '/'
|
|
33
|
+
? baseRef.current
|
|
34
|
+
: `${baseRef.current}${normalizedPath}`;
|
|
35
|
+
window.history.pushState({ adminPath: normalizedPath }, '', fullUrl);
|
|
36
|
+
}, []);
|
|
37
|
+
const matchRoute = useCallback((pattern) => {
|
|
38
|
+
const patternParts = pattern.split('/').filter(Boolean);
|
|
39
|
+
const pathParts = currentPath.split('/').filter(Boolean);
|
|
40
|
+
if (pattern === '/' && pathParts.length === 0) {
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
if (patternParts.length !== pathParts.length) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const params = {};
|
|
47
|
+
for (let i = 0; i < patternParts.length; i++) {
|
|
48
|
+
const patternPart = patternParts[i];
|
|
49
|
+
const pathPart = pathParts[i];
|
|
50
|
+
if (patternPart.startsWith(':')) {
|
|
51
|
+
params[patternPart.slice(1)] = pathPart;
|
|
52
|
+
}
|
|
53
|
+
else if (patternPart !== pathPart) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return params;
|
|
58
|
+
}, [currentPath]);
|
|
59
|
+
return { currentPath, navigate, matchRoute };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface CollectionListProps {
|
|
2
|
+
collectionSlug: string;
|
|
3
|
+
config: any;
|
|
4
|
+
onNavigate: (path: string) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function CollectionList({ collectionSlug, config, onNavigate }: CollectionListProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=CollectionList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionList.d.ts","sourceRoot":"","sources":["../../src/views/CollectionList.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAwCD,wBAAgB,cAAc,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,mBAAmB,2CAyNzF"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Search, Plus, Trash2, ChevronLeft, ChevronRight, Loader2, FileText, MoreHorizontal } from 'lucide-react';
|
|
4
|
+
import { useState, useMemo, useCallback, useEffect, useRef } from 'react';
|
|
5
|
+
import { toast } from 'sonner';
|
|
6
|
+
import { cmsApi } from '../lib/api.js';
|
|
7
|
+
import { useApiData } from '../lib/useApiData.js';
|
|
8
|
+
function resolveLabel(config, slug) {
|
|
9
|
+
const fallback = { singular: slug, plural: slug };
|
|
10
|
+
if (!config?.collections)
|
|
11
|
+
return fallback;
|
|
12
|
+
const list = Array.isArray(config.collections)
|
|
13
|
+
? config.collections
|
|
14
|
+
: Object.values(config.collections);
|
|
15
|
+
const match = list.find((c) => c.slug === slug);
|
|
16
|
+
return match?.labels ?? fallback;
|
|
17
|
+
}
|
|
18
|
+
function statusColor(status) {
|
|
19
|
+
switch (status?.toUpperCase()) {
|
|
20
|
+
case 'PUBLISHED': return 'var(--actuate-success-bg, #dcfce7)';
|
|
21
|
+
case 'DRAFT': return 'var(--actuate-muted-bg, #f3f4f6)';
|
|
22
|
+
case 'ARCHIVED': return 'var(--actuate-warning-bg, #fef9c3)';
|
|
23
|
+
case 'SCHEDULED': return 'var(--actuate-info-bg, #dbeafe)';
|
|
24
|
+
default: return 'var(--actuate-muted-bg, #f3f4f6)';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function statusText(status) {
|
|
28
|
+
switch (status?.toUpperCase()) {
|
|
29
|
+
case 'PUBLISHED': return 'var(--actuate-success-text, #166534)';
|
|
30
|
+
case 'DRAFT': return 'var(--actuate-muted-text, #374151)';
|
|
31
|
+
case 'ARCHIVED': return 'var(--actuate-warning-text, #854d0e)';
|
|
32
|
+
case 'SCHEDULED': return 'var(--actuate-info-text, #1e40af)';
|
|
33
|
+
default: return 'var(--actuate-muted-text, #374151)';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function formatDate(d) {
|
|
37
|
+
if (!d)
|
|
38
|
+
return '—';
|
|
39
|
+
return new Date(d).toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });
|
|
40
|
+
}
|
|
41
|
+
export function CollectionList({ collectionSlug, config, onNavigate }) {
|
|
42
|
+
const labels = useMemo(() => resolveLabel(config, collectionSlug), [config, collectionSlug]);
|
|
43
|
+
const [page, setPage] = useState(1);
|
|
44
|
+
const [search, setSearch] = useState('');
|
|
45
|
+
const [debouncedSearch, setDebouncedSearch] = useState('');
|
|
46
|
+
const [sort, setSort] = useState(null);
|
|
47
|
+
const [order, setOrder] = useState('asc');
|
|
48
|
+
const [selected, setSelected] = useState(new Set());
|
|
49
|
+
const searchTimer = useRef(undefined);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
clearTimeout(searchTimer.current);
|
|
52
|
+
searchTimer.current = setTimeout(() => {
|
|
53
|
+
setDebouncedSearch(search);
|
|
54
|
+
setPage(1);
|
|
55
|
+
}, 300);
|
|
56
|
+
return () => clearTimeout(searchTimer.current);
|
|
57
|
+
}, [search]);
|
|
58
|
+
const endpoint = useMemo(() => {
|
|
59
|
+
let url = `/collections/${collectionSlug}?page=${page}&pageSize=25`;
|
|
60
|
+
if (debouncedSearch)
|
|
61
|
+
url += `&search=${encodeURIComponent(debouncedSearch)}`;
|
|
62
|
+
if (sort)
|
|
63
|
+
url += `&sort=${sort}&order=${order}`;
|
|
64
|
+
return url;
|
|
65
|
+
}, [collectionSlug, page, debouncedSearch, sort, order]);
|
|
66
|
+
const { data, loading, error, refetch } = useApiData(endpoint);
|
|
67
|
+
const docs = data?.docs ?? [];
|
|
68
|
+
const total = data?.total ?? 0;
|
|
69
|
+
const totalPages = Math.max(1, Math.ceil(total / 25));
|
|
70
|
+
useEffect(() => { setPage(1); setSelected(new Set()); setSearch(''); }, [collectionSlug]);
|
|
71
|
+
const toggleSort = useCallback((field) => {
|
|
72
|
+
setSort(prev => {
|
|
73
|
+
if (prev === field) {
|
|
74
|
+
setOrder(o => o === 'asc' ? 'desc' : 'asc');
|
|
75
|
+
return field;
|
|
76
|
+
}
|
|
77
|
+
setOrder('asc');
|
|
78
|
+
return field;
|
|
79
|
+
});
|
|
80
|
+
}, []);
|
|
81
|
+
const toggleSelect = (id) => setSelected(prev => { const s = new Set(prev); s.has(id) ? s.delete(id) : s.add(id); return s; });
|
|
82
|
+
const toggleAll = (checked) => setSelected(checked ? new Set(docs.map((d) => String(d.id))) : new Set());
|
|
83
|
+
const bulkAction = async (action) => {
|
|
84
|
+
const ids = [...selected];
|
|
85
|
+
for (const id of ids) {
|
|
86
|
+
if (action === 'delete') {
|
|
87
|
+
await cmsApi(`/collections/${collectionSlug}/${id}`, { method: 'DELETE' });
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
await cmsApi(`/collections/${collectionSlug}/${id}`, {
|
|
91
|
+
method: 'PUT',
|
|
92
|
+
body: JSON.stringify({ status: action === 'publish' ? 'PUBLISHED' : 'DRAFT' }),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const verb = action === 'delete' ? 'deleted' : action === 'publish' ? 'published' : 'unpublished';
|
|
97
|
+
toast.success(`${ids.length} ${ids.length === 1 ? labels.singular : labels.plural} ${verb}`);
|
|
98
|
+
setSelected(new Set());
|
|
99
|
+
refetch();
|
|
100
|
+
};
|
|
101
|
+
const SortCol = ({ field, children }) => (_jsxs("button", { type: "button", onClick: () => toggleSort(field), className: "flex items-center gap-1 text-xs font-medium hover:opacity-80 transition-opacity", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: [children, sort === field && _jsx("span", { children: order === 'asc' ? '↑' : '↓' })] }));
|
|
102
|
+
if (loading && docs.length === 0) {
|
|
103
|
+
return (_jsx("div", { className: "p-4 flex items-center justify-center h-64", children: _jsx(Loader2, { className: "w-6 h-6 animate-spin", style: { color: 'var(--actuate-primary, #2563eb)' } }) }));
|
|
104
|
+
}
|
|
105
|
+
return (_jsxs("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8 h-full flex flex-col", children: [_jsxs("div", { className: "flex items-center justify-between mb-4 gap-3 flex-wrap", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-xl sm:text-2xl font-semibold", style: { color: 'var(--actuate-text, #111827)' }, children: labels.plural }), _jsxs("p", { className: "text-sm", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: [total, " total"] })] }), _jsxs("button", { onClick: () => onNavigate(`/${collectionSlug}/new`), className: "flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors", style: { background: 'var(--actuate-primary, #2563eb)' }, children: [_jsx(Plus, { className: "w-4 h-4" }), " New ", labels.singular] })] }), _jsxs("div", { className: "relative mb-4", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4", style: { color: 'var(--actuate-text-muted, #9ca3af)' } }), _jsx("input", { type: "text", placeholder: `Search ${labels.plural.toLowerCase()}...`, value: search, onChange: e => setSearch(e.target.value), className: "w-full pl-9 pr-3 py-2 text-sm rounded-lg border focus:outline-none focus:ring-2", style: { borderColor: 'var(--actuate-border, #d1d5db)', color: 'var(--actuate-text, #111827)' } })] }), selected.size > 0 && (_jsxs("div", { className: "rounded-lg p-3 mb-4 flex flex-wrap items-center justify-between gap-2", style: { background: 'var(--actuate-info-bg, #eff6ff)', borderColor: 'var(--actuate-info-border, #bfdbfe)', borderWidth: 1, borderStyle: 'solid' }, children: [_jsxs("span", { className: "text-sm", style: { color: 'var(--actuate-info-text, #1e40af)' }, children: [selected.size, " selected"] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { onClick: () => bulkAction('publish'), className: "px-3 py-1.5 text-sm text-white rounded-lg", style: { background: 'var(--actuate-success, #16a34a)' }, children: "Publish" }), _jsx("button", { onClick: () => bulkAction('unpublish'), className: "px-3 py-1.5 text-sm text-white rounded-lg", style: { background: 'var(--actuate-warning, #ca8a04)' }, children: "Unpublish" }), _jsxs("button", { onClick: () => bulkAction('delete'), className: "px-3 py-1.5 text-sm text-white rounded-lg", style: { background: 'var(--actuate-danger, #dc2626)' }, children: [_jsx(Trash2, { className: "w-3.5 h-3.5 inline -mt-0.5 mr-1" }), "Delete"] })] })] })), error && (_jsxs("div", { className: "rounded-lg p-3 mb-4 text-sm", style: { background: 'var(--actuate-danger-bg, #fef2f2)', color: 'var(--actuate-danger-text, #991b1b)' }, children: [error, " \u2014 ", _jsx("button", { onClick: refetch, className: "underline", children: "retry" })] })), docs.length === 0 && !loading ? (_jsxs("div", { className: "flex-1 flex flex-col items-center justify-center rounded-lg border p-8", style: { borderColor: 'var(--actuate-border, #d1d5db)', color: 'var(--actuate-text-secondary, #6b7280)' }, children: [_jsx(FileText, { className: "w-10 h-10 mb-3 opacity-40" }), _jsxs("p", { className: "text-sm mb-3", children: ["No ", labels.plural.toLowerCase(), " found"] }), _jsxs("button", { onClick: () => onNavigate(`/${collectionSlug}/new`), className: "px-4 py-2 text-sm text-white rounded-lg", style: { background: 'var(--actuate-primary, #2563eb)' }, children: ["Create ", labels.singular] })] })) : (_jsx("div", { className: "flex-1 rounded-lg border overflow-auto", style: { borderColor: 'var(--actuate-border, #d1d5db)' }, children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { className: "sticky top-0", style: { background: 'var(--actuate-surface-alt, #f9fafb)', borderBottom: '1px solid var(--actuate-border, #d1d5db)' }, children: _jsxs("tr", { children: [_jsx("th", { className: "w-10 px-3 py-2 text-left", children: _jsx("input", { type: "checkbox", checked: selected.size === docs.length && docs.length > 0, onChange: e => toggleAll(e.target.checked), className: "rounded" }) }), _jsx("th", { className: "px-3 py-2 text-left", children: _jsx(SortCol, { field: "title", children: "Title" }) }), _jsx("th", { className: "px-3 py-2 text-left", children: _jsx(SortCol, { field: "status", children: "Status" }) }), _jsx("th", { className: "px-3 py-2 text-left", children: _jsx(SortCol, { field: "updatedAt", children: "Updated" }) }), _jsx("th", { className: "px-3 py-2 text-left text-xs font-medium", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: "Actions" })] }) }), _jsx("tbody", { children: docs.map((doc) => (_jsxs("tr", { className: "transition-colors hover:opacity-95", style: { borderBottom: '1px solid var(--actuate-border, #e5e7eb)' }, children: [_jsx("td", { className: "px-3 py-2", children: _jsx("input", { type: "checkbox", checked: selected.has(String(doc.id)), onChange: () => toggleSelect(String(doc.id)), className: "rounded" }) }), _jsx("td", { className: "px-3 py-2", children: _jsx("button", { type: "button", onClick: () => onNavigate(`/${collectionSlug}/${doc.id}`), className: "font-medium text-left hover:underline", style: { color: 'var(--actuate-text, #111827)' }, children: doc.title || doc.name || `#${doc.id}` }) }), _jsx("td", { className: "px-3 py-2", children: _jsx("span", { className: "inline-block px-2 py-0.5 rounded-full text-xs font-medium", style: { background: statusColor(doc.status), color: statusText(doc.status) }, children: doc.status ?? 'DRAFT' }) }), _jsx("td", { className: "px-3 py-2", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: formatDate(doc.updatedAt) }), _jsx("td", { className: "px-3 py-2", children: _jsx("button", { type: "button", onClick: () => onNavigate(`/${collectionSlug}/${doc.id}`), className: "p-1.5 rounded hover:opacity-75 transition-opacity", title: "Edit", children: _jsx(MoreHorizontal, { className: "w-4 h-4", style: { color: 'var(--actuate-text-secondary, #6b7280)' } }) }) })] }, doc.id))) })] }) })), totalPages > 1 && (_jsxs("div", { className: "flex items-center justify-between mt-4 text-sm", style: { color: 'var(--actuate-text-secondary, #6b7280)' }, children: [_jsxs("span", { children: ["Page ", page, " of ", totalPages] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs("button", { disabled: page <= 1, onClick: () => setPage(p => p - 1), className: "flex items-center gap-1 px-3 py-1.5 rounded-lg border disabled:opacity-40 transition-opacity", style: { borderColor: 'var(--actuate-border, #d1d5db)' }, children: [_jsx(ChevronLeft, { className: "w-4 h-4" }), " Previous"] }), _jsxs("button", { disabled: page >= totalPages, onClick: () => setPage(p => p + 1), className: "flex items-center gap-1 px-3 py-1.5 rounded-lg border disabled:opacity-40 transition-opacity", style: { borderColor: 'var(--actuate-border, #d1d5db)' }, children: ["Next ", _jsx(ChevronRight, { className: "w-4 h-4" })] })] })] }))] }));
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=CollectionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollectionList.js","sourceRoot":"","sources":["../../src/views/CollectionList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/views/Dashboard.tsx"],"names":[],"mappings":"AAYA,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,cAAc,2CAoKvD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { FileText, Layout, Image, Users, User, Calendar, Loader2, AlertTriangle } from 'lucide-react';
|
|
4
|
+
import { useApiData } from '../lib/useApiData';
|
|
5
|
+
export function Dashboard({ onNavigate }) {
|
|
6
|
+
const nav = (path) => onNavigate?.(path);
|
|
7
|
+
const { data, loading, error, refetch } = useApiData('/stats');
|
|
8
|
+
const totalPosts = data?.totalDocuments ?? 0;
|
|
9
|
+
const totalMedia = data?.totalMedia ?? 0;
|
|
10
|
+
const totalUsers = data?.totalUsers ?? 0;
|
|
11
|
+
const recentPosts = data?.recentDocuments ?? [];
|
|
12
|
+
if (loading) {
|
|
13
|
+
return (_jsx("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8 flex items-center justify-center h-64", children: _jsx(Loader2, { className: "w-6 h-6 animate-spin text-blue-600" }) }));
|
|
14
|
+
}
|
|
15
|
+
return (_jsxs("div", { className: "p-3 pr-6 sm:p-4 sm:pr-8", children: [error && (_jsxs("div", { className: "mb-4 flex items-center gap-3 rounded-lg border border-red-200 bg-red-50 p-3", children: [_jsx(AlertTriangle, { className: "w-5 h-5 text-red-600 shrink-0" }), _jsx("span", { className: "text-sm text-red-800 flex-1", children: error }), _jsx("button", { onClick: refetch, className: "px-3 py-1 text-sm text-red-700 border border-red-300 rounded-lg hover:bg-red-100 transition-colors", children: "Retry" })] })), _jsxs("div", { className: "mb-4 sm:mb-6", children: [_jsx("h1", { className: "text-xl sm:text-2xl font-semibold text-gray-900 mb-1", children: "Dashboard" }), _jsx("p", { className: "text-sm text-gray-600", children: "Welcome back! Here's what's happening." })] }), _jsxs("div", { className: "grid grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4 mb-4 sm:mb-6", children: [_jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-3 sm:p-4", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs text-gray-600 mb-1", children: "Total Posts" }), _jsx("p", { className: "text-xl sm:text-2xl font-semibold text-gray-900", children: totalPosts }), _jsx("p", { className: "text-xs text-gray-400 mt-1", children: "\u2014" })] }), _jsx("div", { className: "w-8 h-8 sm:w-10 sm:h-10 bg-blue-100 rounded-lg flex items-center justify-center", children: _jsx(FileText, { className: "w-4 h-4 sm:w-5 sm:h-5 text-blue-600" }) })] }) }), _jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-3 sm:p-4", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs text-gray-600 mb-1", children: "Total Pages" }), _jsx("p", { className: "text-xl sm:text-2xl font-semibold text-gray-900", children: "0" }), _jsx("p", { className: "text-xs text-gray-400 mt-1", children: "\u2014" })] }), _jsx("div", { className: "w-8 h-8 sm:w-10 sm:h-10 bg-purple-100 rounded-lg flex items-center justify-center", children: _jsx(Layout, { className: "w-4 h-4 sm:w-5 sm:h-5 text-purple-600" }) })] }) }), _jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-3 sm:p-4", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs text-gray-600 mb-1", children: "Media Files" }), _jsx("p", { className: "text-xl sm:text-2xl font-semibold text-gray-900", children: totalMedia.toLocaleString() }), _jsx("p", { className: "text-xs text-gray-400 mt-1", children: "\u2014" })] }), _jsx("div", { className: "w-8 h-8 sm:w-10 sm:h-10 bg-green-100 rounded-lg flex items-center justify-center", children: _jsx(Image, { className: "w-4 h-4 sm:w-5 sm:h-5 text-green-600" }) })] }) }), _jsx("div", { className: "bg-white rounded-lg border border-gray-200 p-3 sm:p-4", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs text-gray-600 mb-1", children: "Total Users" }), _jsx("p", { className: "text-xl sm:text-2xl font-semibold text-gray-900", children: totalUsers }), _jsx("p", { className: "text-xs text-gray-400 mt-1", children: "\u2014" })] }), _jsx("div", { className: "w-8 h-8 sm:w-10 sm:h-10 bg-amber-100 rounded-lg flex items-center justify-center", children: _jsx(Users, { className: "w-4 h-4 sm:w-5 sm:h-5 text-amber-600" }) })] }) })] }), _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-12 gap-3 sm:gap-4", children: [_jsxs("div", { className: "lg:col-span-8 bg-white rounded-lg border border-gray-200", children: [_jsx("div", { className: "p-3 sm:p-4 border-b border-gray-200", children: _jsx("h2", { className: "text-sm sm:text-base font-semibold text-gray-900", children: "Recent Posts" }) }), _jsx("div", { className: "divide-y divide-gray-200", children: recentPosts.length === 0 ? (_jsxs("div", { className: "p-8 text-center", children: [_jsx("p", { className: "text-sm text-gray-500 mb-2", children: "No posts yet" }), _jsx("button", { onClick: () => nav('/posts/new'), className: "px-4 py-2 text-sm bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors", children: "Create your first post" })] })) : recentPosts.map((post) => (_jsx("div", { className: "p-3 sm:p-4 hover:bg-gray-50 transition-colors", children: _jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("h3", { className: "text-sm font-medium text-gray-900 mb-1 truncate", children: post.title }), _jsxs("div", { className: "flex flex-wrap items-center gap-2 sm:gap-3 text-xs text-gray-600", children: [_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(User, { className: "w-3 h-3" }), _jsx("span", { className: "hidden sm:inline", children: post.author })] }), _jsxs("span", { className: "flex items-center gap-1", children: [_jsx(Calendar, { className: "w-3 h-3" }), post.date] }), _jsx("span", { className: `px-2 py-0.5 rounded-full text-xs font-medium ${post.status === 'Published' ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-800'}`, children: post.status })] })] }), _jsx("button", { onClick: () => nav(`/posts/${post.id}`), className: "text-xs sm:text-sm text-blue-600 hover:text-blue-700 whitespace-nowrap", children: "Edit" })] }) }, post.id))) })] }), _jsxs("div", { className: "lg:col-span-4 bg-white rounded-lg border border-gray-200", children: [_jsx("div", { className: "p-3 sm:p-4 border-b border-gray-200", children: _jsx("h2", { className: "text-sm sm:text-base font-semibold text-gray-900", children: "Quick Actions" }) }), _jsxs("div", { className: "p-3 sm:p-4 space-y-2", children: [_jsxs("button", { onClick: () => nav('/posts/new'), className: "flex items-center gap-3 p-2.5 sm:p-3 rounded-lg hover:bg-gray-50 transition-colors group w-full text-left", children: [_jsx("div", { className: "w-8 h-8 bg-blue-100 rounded-lg flex items-center justify-center group-hover:bg-blue-200 transition-colors", children: _jsx(FileText, { className: "w-4 h-4 text-blue-600" }) }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: "New Post" })] }), _jsxs("button", { onClick: () => nav('/pages/new'), className: "flex items-center gap-3 p-2.5 sm:p-3 rounded-lg hover:bg-gray-50 transition-colors group w-full text-left", children: [_jsx("div", { className: "w-8 h-8 bg-purple-100 rounded-lg flex items-center justify-center group-hover:bg-purple-200 transition-colors", children: _jsx(Layout, { className: "w-4 h-4 text-purple-600" }) }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: "New Page" })] }), _jsxs("button", { onClick: () => nav('/media'), className: "flex items-center gap-3 p-2.5 sm:p-3 rounded-lg hover:bg-gray-50 transition-colors group w-full text-left", children: [_jsx("div", { className: "w-8 h-8 bg-green-100 rounded-lg flex items-center justify-center group-hover:bg-green-200 transition-colors", children: _jsx(Image, { className: "w-4 h-4 text-green-600" }) }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: "Upload Media" })] }), _jsxs("button", { onClick: () => nav('/users'), className: "flex items-center gap-3 p-2.5 sm:p-3 rounded-lg hover:bg-gray-50 transition-colors group w-full text-left", children: [_jsx("div", { className: "w-8 h-8 bg-amber-100 rounded-lg flex items-center justify-center group-hover:bg-amber-200 transition-colors", children: _jsx(Users, { className: "w-4 h-4 text-amber-600" }) }), _jsx("span", { className: "text-sm font-medium text-gray-900", children: "Manage Users" })] })] })] })] })] }));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=Dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/views/Dashboard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface DocumentEditProps {
|
|
2
|
+
collectionSlug: string;
|
|
3
|
+
documentId?: string;
|
|
4
|
+
config: any;
|
|
5
|
+
onNavigate?: (path: string) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function DocumentEdit({ collectionSlug, documentId, config, onNavigate }: DocumentEditProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=DocumentEdit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentEdit.d.ts","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,YAAY,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,iBAAiB,2CAkWjG"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useEffect, useRef } from 'react';
|
|
4
|
+
import { AlertTriangle, Eye, EyeOff, Save, Copy, Loader2, Clock } from 'lucide-react';
|
|
5
|
+
import { toast } from 'sonner';
|
|
6
|
+
import { FieldRenderer } from '../fields/FieldRenderer';
|
|
7
|
+
import { Button } from '../components/ui/Button';
|
|
8
|
+
import { LivePreview } from '../components/LivePreview';
|
|
9
|
+
import { VersionHistory } from '../components/VersionHistory';
|
|
10
|
+
import { PresenceIndicator } from '../components/PresenceIndicator';
|
|
11
|
+
import { SEOPanel } from '../components/SEOPanel';
|
|
12
|
+
import { cmsApi } from '../lib/api';
|
|
13
|
+
export function DocumentEdit({ collectionSlug, documentId, config, onNavigate }) {
|
|
14
|
+
const isNew = !documentId;
|
|
15
|
+
const [values, setValues] = useState({});
|
|
16
|
+
const [initialValues, setInitialValues] = useState({});
|
|
17
|
+
const [seoData, setSeoData] = useState({});
|
|
18
|
+
const [initialSeoData, setInitialSeoData] = useState({});
|
|
19
|
+
const [saving, setSaving] = useState(false);
|
|
20
|
+
const [loading, setLoading] = useState(!isNew);
|
|
21
|
+
const [showPreview, setShowPreview] = useState(false);
|
|
22
|
+
const [showVersions, setShowVersions] = useState(false);
|
|
23
|
+
const [docStatus, setDocStatus] = useState('DRAFT');
|
|
24
|
+
const hasLoadedRef = useRef(false);
|
|
25
|
+
const collections = config?.collections;
|
|
26
|
+
const collection = Array.isArray(collections)
|
|
27
|
+
? collections.find((c) => c.slug === collectionSlug)
|
|
28
|
+
: collections?.[collectionSlug];
|
|
29
|
+
const previewUrl = collection?.admin?.preview ? collection.admin.preview({}) : undefined;
|
|
30
|
+
const fields = collection?.fields
|
|
31
|
+
? (Array.isArray(collection.fields)
|
|
32
|
+
? collection.fields
|
|
33
|
+
: Object.entries(collection.fields).map(([name, def]) => ({ name, ...def })))
|
|
34
|
+
: [];
|
|
35
|
+
const useAsTitleField = collection?.admin?.useAsTitle ?? 'title';
|
|
36
|
+
const displayTitle = isNew
|
|
37
|
+
? `New ${collection?.labels?.singular ?? collectionSlug}`
|
|
38
|
+
: `Edit ${values[useAsTitleField] ?? 'Document'}`;
|
|
39
|
+
const isDirty = JSON.stringify(values) !== JSON.stringify(initialValues)
|
|
40
|
+
|| JSON.stringify(seoData) !== JSON.stringify(initialSeoData);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (!isNew && documentId && !hasLoadedRef.current) {
|
|
43
|
+
hasLoadedRef.current = true;
|
|
44
|
+
loadDocument();
|
|
45
|
+
}
|
|
46
|
+
}, [documentId, isNew]);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!isDirty)
|
|
49
|
+
return;
|
|
50
|
+
const handler = (e) => {
|
|
51
|
+
e.preventDefault();
|
|
52
|
+
};
|
|
53
|
+
window.addEventListener('beforeunload', handler);
|
|
54
|
+
return () => window.removeEventListener('beforeunload', handler);
|
|
55
|
+
}, [isDirty]);
|
|
56
|
+
const SEO_FIELDS = [
|
|
57
|
+
'metaTitle', 'metaDescription', 'focusKeyphrase', 'canonical',
|
|
58
|
+
'noIndex', 'noFollow', 'ogTitle', 'ogDescription', 'ogImage',
|
|
59
|
+
'twitterTitle', 'twitterDescription', 'twitterImage',
|
|
60
|
+
'isCornerstone', 'schemaType',
|
|
61
|
+
];
|
|
62
|
+
async function loadDocument() {
|
|
63
|
+
setLoading(true);
|
|
64
|
+
const res = await cmsApi(`/collections/${collectionSlug}/${documentId}`);
|
|
65
|
+
if (res.data) {
|
|
66
|
+
const doc = res.data;
|
|
67
|
+
const docData = (doc.data && typeof doc.data === 'object') ? doc.data : {};
|
|
68
|
+
const merged = { ...docData, title: doc.title ?? docData.title, slug: doc.slug ?? docData.slug };
|
|
69
|
+
setValues(merged);
|
|
70
|
+
setInitialValues(merged);
|
|
71
|
+
setDocStatus(doc.status ?? 'DRAFT');
|
|
72
|
+
const loadedSeo = {};
|
|
73
|
+
for (const key of SEO_FIELDS) {
|
|
74
|
+
if (docData[key] !== undefined) {
|
|
75
|
+
loadedSeo[key] = docData[key];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
setSeoData(loadedSeo);
|
|
79
|
+
setInitialSeoData(loadedSeo);
|
|
80
|
+
}
|
|
81
|
+
else if (res.error) {
|
|
82
|
+
toast.error(`Failed to load document: ${res.error}`);
|
|
83
|
+
}
|
|
84
|
+
setLoading(false);
|
|
85
|
+
}
|
|
86
|
+
function handleFieldChange(name, value) {
|
|
87
|
+
setValues((prev) => ({ ...prev, [name]: value }));
|
|
88
|
+
}
|
|
89
|
+
async function handleSave() {
|
|
90
|
+
setSaving(true);
|
|
91
|
+
const payload = { ...values, ...seoData };
|
|
92
|
+
try {
|
|
93
|
+
if (isNew) {
|
|
94
|
+
const res = await cmsApi(`/collections/${collectionSlug}`, {
|
|
95
|
+
method: 'POST',
|
|
96
|
+
body: JSON.stringify(payload),
|
|
97
|
+
});
|
|
98
|
+
if (res.error) {
|
|
99
|
+
toast.error(res.error);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
toast.success('Document created');
|
|
103
|
+
const newId = res.data?.id;
|
|
104
|
+
setInitialValues(values);
|
|
105
|
+
setInitialSeoData(seoData);
|
|
106
|
+
if (newId && onNavigate) {
|
|
107
|
+
onNavigate(`/${collectionSlug}/${newId}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const res = await cmsApi(`/collections/${collectionSlug}/${documentId}`, {
|
|
113
|
+
method: 'PUT',
|
|
114
|
+
body: JSON.stringify(payload),
|
|
115
|
+
});
|
|
116
|
+
if (res.error) {
|
|
117
|
+
toast.error(res.error);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
toast.success('Changes saved');
|
|
121
|
+
setInitialValues(values);
|
|
122
|
+
setInitialSeoData(seoData);
|
|
123
|
+
if (res.data?.status)
|
|
124
|
+
setDocStatus(res.data.status);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
toast.error('An unexpected error occurred');
|
|
130
|
+
}
|
|
131
|
+
setSaving(false);
|
|
132
|
+
}
|
|
133
|
+
async function handlePublish() {
|
|
134
|
+
if (isNew)
|
|
135
|
+
return;
|
|
136
|
+
setSaving(true);
|
|
137
|
+
const res = await cmsApi(`/collections/${collectionSlug}/${documentId}`, {
|
|
138
|
+
method: 'PUT',
|
|
139
|
+
body: JSON.stringify({ ...values, ...seoData, status: 'PUBLISHED' }),
|
|
140
|
+
});
|
|
141
|
+
if (res.error) {
|
|
142
|
+
toast.error(res.error);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
toast.success('Document published');
|
|
146
|
+
setDocStatus('PUBLISHED');
|
|
147
|
+
setInitialValues(values);
|
|
148
|
+
setInitialSeoData(seoData);
|
|
149
|
+
}
|
|
150
|
+
setSaving(false);
|
|
151
|
+
}
|
|
152
|
+
async function handleUnpublish() {
|
|
153
|
+
if (isNew)
|
|
154
|
+
return;
|
|
155
|
+
setSaving(true);
|
|
156
|
+
const res = await cmsApi(`/collections/${collectionSlug}/${documentId}`, {
|
|
157
|
+
method: 'PUT',
|
|
158
|
+
body: JSON.stringify({ ...values, ...seoData, status: 'DRAFT' }),
|
|
159
|
+
});
|
|
160
|
+
if (res.error) {
|
|
161
|
+
toast.error(res.error);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
toast.success('Document unpublished');
|
|
165
|
+
setDocStatus('DRAFT');
|
|
166
|
+
setInitialValues(values);
|
|
167
|
+
setInitialSeoData(seoData);
|
|
168
|
+
}
|
|
169
|
+
setSaving(false);
|
|
170
|
+
}
|
|
171
|
+
async function handleDuplicate() {
|
|
172
|
+
if (isNew || !documentId)
|
|
173
|
+
return;
|
|
174
|
+
const res = await cmsApi(`/collections/${collectionSlug}`, {
|
|
175
|
+
method: 'POST',
|
|
176
|
+
body: JSON.stringify({
|
|
177
|
+
...values,
|
|
178
|
+
title: values.title ? `${values.title} (Copy)` : undefined,
|
|
179
|
+
slug: values.slug ? `${values.slug}-copy` : undefined,
|
|
180
|
+
}),
|
|
181
|
+
});
|
|
182
|
+
if (res.error) {
|
|
183
|
+
toast.error(res.error);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
toast.success('Document duplicated');
|
|
187
|
+
const newId = res.data?.id;
|
|
188
|
+
if (newId && onNavigate) {
|
|
189
|
+
onNavigate(`/${collectionSlug}/${newId}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const mainFields = fields.filter((f) => !['status', 'publishedAt', 'featured', 'featuredImage'].includes(f.name));
|
|
194
|
+
const sidebarFields = fields.filter((f) => ['publishedAt', 'featured', 'featuredImage'].includes(f.name));
|
|
195
|
+
const contentField = fields.find((f) => f.type === 'richText' || f.name === 'content' || f.name === 'body');
|
|
196
|
+
const htmlContent = contentField ? (values[contentField.name] ?? '') : '';
|
|
197
|
+
const docSlug = values.slug ?? '';
|
|
198
|
+
const statusColor = docStatus === 'PUBLISHED' ? 'bg-green-100 text-green-800'
|
|
199
|
+
: docStatus === 'SCHEDULED' ? 'bg-blue-100 text-blue-800'
|
|
200
|
+
: 'bg-yellow-100 text-yellow-800';
|
|
201
|
+
if (loading) {
|
|
202
|
+
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" }) }));
|
|
203
|
+
}
|
|
204
|
+
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 })] })] })), _jsxs("div", { className: "sticky bottom-0 flex items-center justify-end gap-3 border-t border-[var(--border)] bg-[var(--background)] px-4 py-3", children: [_jsx(Button, { variant: "secondary", onClick: () => onNavigate?.(`/${collectionSlug}`), children: "Cancel" }), _jsxs(Button, { variant: "primary", loading: saving, onClick: handleSave, "data-shortcut": "save", children: [_jsx(Save, { className: "h-4 w-4 mr-1.5" }), isNew ? 'Create' : 'Save Changes'] })] })] }), showPreview && (_jsx(LivePreview, { collection: collectionSlug, documentId: documentId, previewUrl: previewUrl, values: values, onClose: () => setShowPreview(false) }))] }), !isNew && documentId && (_jsx(VersionHistory, { collectionSlug: collectionSlug, documentId: documentId, open: showVersions, onClose: () => setShowVersions(false), onRestore: (data) => {
|
|
205
|
+
const restoredData = data;
|
|
206
|
+
setValues(restoredData);
|
|
207
|
+
setInitialValues(restoredData);
|
|
208
|
+
} }))] }));
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=DocumentEdit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentEdit.js","sourceRoot":"","sources":["../../src/views/DocumentEdit.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormEditor.d.ts","sourceRoot":"","sources":["../../src/views/FormEditor.tsx"],"names":[],"mappings":"AAoDA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,eAAe,2CA2djE"}
|