@actuate-media/cms-admin 0.15.0 → 0.16.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.map +1 -1
- package/dist/AdminRoot.js +148 -2
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/components/posts-badges.test.d.ts +2 -0
- package/dist/__tests__/components/posts-badges.test.d.ts.map +1 -0
- package/dist/__tests__/components/posts-badges.test.js +68 -0
- package/dist/__tests__/components/posts-badges.test.js.map +1 -0
- package/dist/__tests__/layout/sidebar-posts.test.d.ts +2 -0
- package/dist/__tests__/layout/sidebar-posts.test.d.ts.map +1 -0
- package/dist/__tests__/layout/sidebar-posts.test.js +162 -0
- package/dist/__tests__/layout/sidebar-posts.test.js.map +1 -0
- package/dist/__tests__/lib/page-editor-service.test.d.ts +2 -0
- package/dist/__tests__/lib/page-editor-service.test.d.ts.map +1 -0
- package/dist/__tests__/lib/page-editor-service.test.js +137 -0
- package/dist/__tests__/lib/page-editor-service.test.js.map +1 -0
- package/dist/__tests__/lib/pages-service.test.d.ts +2 -0
- package/dist/__tests__/lib/pages-service.test.d.ts.map +1 -0
- package/dist/__tests__/lib/pages-service.test.js +140 -0
- package/dist/__tests__/lib/pages-service.test.js.map +1 -0
- package/dist/__tests__/lib/post-editor-service.test.d.ts +2 -0
- package/dist/__tests__/lib/post-editor-service.test.d.ts.map +1 -0
- package/dist/__tests__/lib/post-editor-service.test.js +185 -0
- package/dist/__tests__/lib/post-editor-service.test.js.map +1 -0
- package/dist/__tests__/lib/posts-service.test.d.ts +2 -0
- package/dist/__tests__/lib/posts-service.test.d.ts.map +1 -0
- package/dist/__tests__/lib/posts-service.test.js +244 -0
- package/dist/__tests__/lib/posts-service.test.js.map +1 -0
- package/dist/__tests__/views/posts-list-view.test.d.ts +2 -0
- package/dist/__tests__/views/posts-list-view.test.d.ts.map +1 -0
- package/dist/__tests__/views/posts-list-view.test.js +98 -0
- package/dist/__tests__/views/posts-list-view.test.js.map +1 -0
- package/dist/actuate-admin.css +1 -1
- package/dist/components/pages/tag-badges.d.ts +21 -0
- package/dist/components/pages/tag-badges.d.ts.map +1 -0
- package/dist/components/pages/tag-badges.js +56 -0
- package/dist/components/pages/tag-badges.js.map +1 -0
- package/dist/components/posts/badges.d.ts +25 -0
- package/dist/components/posts/badges.d.ts.map +1 -0
- package/dist/components/posts/badges.js +123 -0
- package/dist/components/posts/badges.js.map +1 -0
- package/dist/components/posts/icons.d.ts +12 -0
- package/dist/components/posts/icons.d.ts.map +1 -0
- package/dist/components/posts/icons.js +26 -0
- package/dist/components/posts/icons.js.map +1 -0
- package/dist/layout/Layout.js +36 -8
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/Sidebar.d.ts +9 -0
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/Sidebar.js +100 -48
- package/dist/layout/Sidebar.js.map +1 -1
- package/dist/lib/page-editor-service.d.ts +45 -0
- package/dist/lib/page-editor-service.d.ts.map +1 -0
- package/dist/lib/page-editor-service.js +153 -0
- package/dist/lib/page-editor-service.js.map +1 -0
- package/dist/lib/pages-service.d.ts +143 -0
- package/dist/lib/pages-service.d.ts.map +1 -0
- package/dist/lib/pages-service.js +444 -0
- package/dist/lib/pages-service.js.map +1 -0
- package/dist/lib/post-editor-service.d.ts +57 -0
- package/dist/lib/post-editor-service.d.ts.map +1 -0
- package/dist/lib/post-editor-service.js +234 -0
- package/dist/lib/post-editor-service.js.map +1 -0
- package/dist/lib/posts-service.d.ts +73 -0
- package/dist/lib/posts-service.d.ts.map +1 -0
- package/dist/lib/posts-service.js +245 -0
- package/dist/lib/posts-service.js.map +1 -0
- package/dist/lib/preview-link.d.ts +32 -0
- package/dist/lib/preview-link.d.ts.map +1 -0
- package/dist/lib/preview-link.js +40 -0
- package/dist/lib/preview-link.js.map +1 -0
- package/dist/router/index.d.ts +1 -0
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +9 -1
- package/dist/router/index.js.map +1 -1
- package/dist/views/Dashboard.d.ts.map +1 -1
- package/dist/views/Dashboard.js +14 -3
- package/dist/views/Dashboard.js.map +1 -1
- package/dist/views/Pages/PageTagManager.d.ts +14 -0
- package/dist/views/Pages/PageTagManager.d.ts.map +1 -0
- package/dist/views/Pages/PageTagManager.js +145 -0
- package/dist/views/Pages/PageTagManager.js.map +1 -0
- package/dist/views/Pages/PagesListView.d.ts +18 -0
- package/dist/views/Pages/PagesListView.d.ts.map +1 -0
- package/dist/views/Pages/PagesListView.js +287 -0
- package/dist/views/Pages/PagesListView.js.map +1 -0
- package/dist/views/Posts/NewPostPicker.d.ts +16 -0
- package/dist/views/Posts/NewPostPicker.d.ts.map +1 -0
- package/dist/views/Posts/NewPostPicker.js +59 -0
- package/dist/views/Posts/NewPostPicker.js.map +1 -0
- package/dist/views/Posts/NewPostTypeInstructions.d.ts +18 -0
- package/dist/views/Posts/NewPostTypeInstructions.d.ts.map +1 -0
- package/dist/views/Posts/NewPostTypeInstructions.js +147 -0
- package/dist/views/Posts/NewPostTypeInstructions.js.map +1 -0
- package/dist/views/Posts/PostTypesView.d.ts +26 -0
- package/dist/views/Posts/PostTypesView.d.ts.map +1 -0
- package/dist/views/Posts/PostTypesView.js +52 -0
- package/dist/views/Posts/PostTypesView.js.map +1 -0
- package/dist/views/Posts/PostsListView.d.ts +25 -0
- package/dist/views/Posts/PostsListView.d.ts.map +1 -0
- package/dist/views/Posts/PostsListView.js +239 -0
- package/dist/views/Posts/PostsListView.js.map +1 -0
- package/dist/views/Posts/post-type-presets.d.ts +32 -0
- package/dist/views/Posts/post-type-presets.d.ts.map +1 -0
- package/dist/views/Posts/post-type-presets.js +72 -0
- package/dist/views/Posts/post-type-presets.js.map +1 -0
- package/dist/views/page-builder/Widgets.d.ts +13 -0
- package/dist/views/page-builder/Widgets.d.ts.map +1 -0
- package/dist/views/page-builder/Widgets.js +15 -0
- package/dist/views/page-builder/Widgets.js.map +1 -0
- package/dist/views/page-editor/AddSectionModal.d.ts +20 -0
- package/dist/views/page-editor/AddSectionModal.d.ts.map +1 -0
- package/dist/views/page-editor/AddSectionModal.js +22 -0
- package/dist/views/page-editor/AddSectionModal.js.map +1 -0
- package/dist/views/page-editor/EditorCanvas.d.ts +18 -0
- package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -0
- package/dist/views/page-editor/EditorCanvas.js +64 -0
- package/dist/views/page-editor/EditorCanvas.js.map +1 -0
- package/dist/views/page-editor/EditorTopBar.d.ts +30 -0
- package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -0
- package/dist/views/page-editor/EditorTopBar.js +42 -0
- package/dist/views/page-editor/EditorTopBar.js.map +1 -0
- package/dist/views/page-editor/PagePreview.d.ts +13 -0
- package/dist/views/page-editor/PagePreview.d.ts.map +1 -0
- package/dist/views/page-editor/PagePreview.js +37 -0
- package/dist/views/page-editor/PagePreview.js.map +1 -0
- package/dist/views/page-editor/PageSectionEditor.d.ts +16 -0
- package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -0
- package/dist/views/page-editor/PageSectionEditor.js +272 -0
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -0
- package/dist/views/page-editor/PageSettingsModal.d.ts +12 -0
- package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -0
- package/dist/views/page-editor/PageSettingsModal.js +52 -0
- package/dist/views/page-editor/PageSettingsModal.js.map +1 -0
- package/dist/views/page-editor/SectionInspector.d.ts +17 -0
- package/dist/views/page-editor/SectionInspector.d.ts.map +1 -0
- package/dist/views/page-editor/SectionInspector.js +98 -0
- package/dist/views/page-editor/SectionInspector.js.map +1 -0
- package/dist/views/page-editor/SectionsPanel.d.ts +15 -0
- package/dist/views/page-editor/SectionsPanel.d.ts.map +1 -0
- package/dist/views/page-editor/SectionsPanel.js +43 -0
- package/dist/views/page-editor/SectionsPanel.js.map +1 -0
- package/dist/views/page-editor/ValidationSummary.d.ts +9 -0
- package/dist/views/page-editor/ValidationSummary.d.ts.map +1 -0
- package/dist/views/page-editor/ValidationSummary.js +10 -0
- package/dist/views/page-editor/ValidationSummary.js.map +1 -0
- package/dist/views/page-editor/section-icons.d.ts +4 -0
- package/dist/views/page-editor/section-icons.d.ts.map +1 -0
- package/dist/views/page-editor/section-icons.js +20 -0
- package/dist/views/page-editor/section-icons.js.map +1 -0
- package/dist/views/page-editor/section-types.d.ts +11 -0
- package/dist/views/page-editor/section-types.d.ts.map +1 -0
- package/dist/views/page-editor/section-types.js +10 -0
- package/dist/views/page-editor/section-types.js.map +1 -0
- package/dist/views/page-editor/sections/ArticleBodySection.d.ts +13 -0
- package/dist/views/page-editor/sections/ArticleBodySection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/ArticleBodySection.js +23 -0
- package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -0
- package/dist/views/page-editor/sections/AuthorBioSection.d.ts +8 -0
- package/dist/views/page-editor/sections/AuthorBioSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/AuthorBioSection.js +21 -0
- package/dist/views/page-editor/sections/AuthorBioSection.js.map +1 -0
- package/dist/views/page-editor/sections/ByTheNumbersSection.d.ts +5 -0
- package/dist/views/page-editor/sections/ByTheNumbersSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/ByTheNumbersSection.js +10 -0
- package/dist/views/page-editor/sections/ByTheNumbersSection.js.map +1 -0
- package/dist/views/page-editor/sections/CtaBannerSection.d.ts +5 -0
- package/dist/views/page-editor/sections/CtaBannerSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/CtaBannerSection.js +10 -0
- package/dist/views/page-editor/sections/CtaBannerSection.js.map +1 -0
- package/dist/views/page-editor/sections/FeatureHighlightSection.d.ts +5 -0
- package/dist/views/page-editor/sections/FeatureHighlightSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/FeatureHighlightSection.js +18 -0
- package/dist/views/page-editor/sections/FeatureHighlightSection.js.map +1 -0
- package/dist/views/page-editor/sections/GallerySection.d.ts +6 -0
- package/dist/views/page-editor/sections/GallerySection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/GallerySection.js +17 -0
- package/dist/views/page-editor/sections/GallerySection.js.map +1 -0
- package/dist/views/page-editor/sections/HeroBannerSection.d.ts +5 -0
- package/dist/views/page-editor/sections/HeroBannerSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/HeroBannerSection.js +11 -0
- package/dist/views/page-editor/sections/HeroBannerSection.js.map +1 -0
- package/dist/views/page-editor/sections/MissionSection.d.ts +6 -0
- package/dist/views/page-editor/sections/MissionSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/MissionSection.js +12 -0
- package/dist/views/page-editor/sections/MissionSection.js.map +1 -0
- package/dist/views/page-editor/sections/PullQuoteSection.d.ts +6 -0
- package/dist/views/page-editor/sections/PullQuoteSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/PullQuoteSection.js +13 -0
- package/dist/views/page-editor/sections/PullQuoteSection.js.map +1 -0
- package/dist/views/page-editor/sections/RelatedPostsSection.d.ts +12 -0
- package/dist/views/page-editor/sections/RelatedPostsSection.d.ts.map +1 -0
- package/dist/views/page-editor/sections/RelatedPostsSection.js +23 -0
- package/dist/views/page-editor/sections/RelatedPostsSection.js.map +1 -0
- package/dist/views/page-editor/sections/SectionRenderer.d.ts +22 -0
- package/dist/views/page-editor/sections/SectionRenderer.d.ts.map +1 -0
- package/dist/views/page-editor/sections/SectionRenderer.js +52 -0
- package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -0
- package/dist/views/page-editor/sections/index.d.ts +14 -0
- package/dist/views/page-editor/sections/index.d.ts.map +1 -0
- package/dist/views/page-editor/sections/index.js +12 -0
- package/dist/views/page-editor/sections/index.js.map +1 -0
- package/dist/views/page-editor/sections/parts.d.ts +55 -0
- package/dist/views/page-editor/sections/parts.d.ts.map +1 -0
- package/dist/views/page-editor/sections/parts.js +60 -0
- package/dist/views/page-editor/sections/parts.js.map +1 -0
- package/dist/views/page-editor/viewports.d.ts +14 -0
- package/dist/views/page-editor/viewports.d.ts.map +1 -0
- package/dist/views/page-editor/viewports.js +12 -0
- package/dist/views/page-editor/viewports.js.map +1 -0
- package/dist/views/post-editor/PostEditorCanvas.d.ts +21 -0
- package/dist/views/post-editor/PostEditorCanvas.d.ts.map +1 -0
- package/dist/views/post-editor/PostEditorCanvas.js +58 -0
- package/dist/views/post-editor/PostEditorCanvas.js.map +1 -0
- package/dist/views/post-editor/PostFieldsModal.d.ts +12 -0
- package/dist/views/post-editor/PostFieldsModal.d.ts.map +1 -0
- package/dist/views/post-editor/PostFieldsModal.js +53 -0
- package/dist/views/post-editor/PostFieldsModal.js.map +1 -0
- package/dist/views/post-editor/PostHeader.d.ts +15 -0
- package/dist/views/post-editor/PostHeader.d.ts.map +1 -0
- package/dist/views/post-editor/PostHeader.js +27 -0
- package/dist/views/post-editor/PostHeader.js.map +1 -0
- package/dist/views/post-editor/PostHeaderPanel.d.ts +11 -0
- package/dist/views/post-editor/PostHeaderPanel.d.ts.map +1 -0
- package/dist/views/post-editor/PostHeaderPanel.js +21 -0
- package/dist/views/post-editor/PostHeaderPanel.js.map +1 -0
- package/dist/views/post-editor/PostPreview.d.ts +14 -0
- package/dist/views/post-editor/PostPreview.d.ts.map +1 -0
- package/dist/views/post-editor/PostPreview.js +53 -0
- package/dist/views/post-editor/PostPreview.js.map +1 -0
- package/dist/views/post-editor/PostSectionEditor.d.ts +17 -0
- package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -0
- package/dist/views/post-editor/PostSectionEditor.js +290 -0
- package/dist/views/post-editor/PostSectionEditor.js.map +1 -0
- package/dist/views/post-editor/PostTemplateEditor.d.ts +9 -0
- package/dist/views/post-editor/PostTemplateEditor.d.ts.map +1 -0
- package/dist/views/post-editor/PostTemplateEditor.js +144 -0
- package/dist/views/post-editor/PostTemplateEditor.js.map +1 -0
- package/package.json +2 -2
- package/src/AdminRoot.tsx +213 -2
- package/src/__tests__/components/posts-badges.test.tsx +77 -0
- package/src/__tests__/layout/sidebar-posts.test.ts +179 -0
- package/src/__tests__/lib/page-editor-service.test.ts +173 -0
- package/src/__tests__/lib/pages-service.test.ts +157 -0
- package/src/__tests__/lib/post-editor-service.test.ts +215 -0
- package/src/__tests__/lib/posts-service.test.ts +279 -0
- package/src/__tests__/views/posts-list-view.test.ts +110 -0
- package/src/components/pages/tag-badges.tsx +104 -0
- package/src/components/posts/badges.tsx +170 -0
- package/src/components/posts/icons.ts +40 -0
- package/src/layout/Layout.tsx +66 -10
- package/src/layout/Sidebar.tsx +116 -50
- package/src/lib/page-editor-service.ts +233 -0
- package/src/lib/pages-service.ts +599 -0
- package/src/lib/post-editor-service.ts +342 -0
- package/src/lib/posts-service.ts +366 -0
- package/src/lib/preview-link.ts +63 -0
- package/src/router/index.ts +10 -1
- package/src/views/Dashboard.tsx +15 -3
- package/src/views/Pages/PageTagManager.tsx +436 -0
- package/src/views/Pages/PagesListView.tsx +944 -0
- package/src/views/Posts/NewPostPicker.tsx +147 -0
- package/src/views/Posts/NewPostTypeInstructions.tsx +344 -0
- package/src/views/Posts/PostTypesView.tsx +194 -0
- package/src/views/Posts/PostsListView.tsx +869 -0
- package/src/views/Posts/post-type-presets.ts +105 -0
- package/src/views/page-builder/Widgets.tsx +44 -0
- package/src/views/page-editor/AddSectionModal.tsx +56 -0
- package/src/views/page-editor/EditorCanvas.tsx +127 -0
- package/src/views/page-editor/EditorTopBar.tsx +233 -0
- package/src/views/page-editor/PagePreview.tsx +96 -0
- package/src/views/page-editor/PageSectionEditor.tsx +476 -0
- package/src/views/page-editor/PageSettingsModal.tsx +154 -0
- package/src/views/page-editor/SectionInspector.tsx +599 -0
- package/src/views/page-editor/SectionsPanel.tsx +270 -0
- package/src/views/page-editor/ValidationSummary.tsx +53 -0
- package/src/views/page-editor/section-icons.ts +33 -0
- package/src/views/page-editor/section-types.ts +27 -0
- package/src/views/page-editor/sections/ArticleBodySection.tsx +57 -0
- package/src/views/page-editor/sections/AuthorBioSection.tsx +61 -0
- package/src/views/page-editor/sections/ByTheNumbersSection.tsx +41 -0
- package/src/views/page-editor/sections/CtaBannerSection.tsx +29 -0
- package/src/views/page-editor/sections/FeatureHighlightSection.tsx +63 -0
- package/src/views/page-editor/sections/GallerySection.tsx +54 -0
- package/src/views/page-editor/sections/HeroBannerSection.tsx +44 -0
- package/src/views/page-editor/sections/MissionSection.tsx +22 -0
- package/src/views/page-editor/sections/PullQuoteSection.tsx +27 -0
- package/src/views/page-editor/sections/RelatedPostsSection.tsx +55 -0
- package/src/views/page-editor/sections/SectionRenderer.tsx +102 -0
- package/src/views/page-editor/sections/index.ts +13 -0
- package/src/views/page-editor/sections/parts.tsx +113 -0
- package/src/views/page-editor/viewports.ts +25 -0
- package/src/views/post-editor/PostEditorCanvas.tsx +123 -0
- package/src/views/post-editor/PostFieldsModal.tsx +196 -0
- package/src/views/post-editor/PostHeader.tsx +87 -0
- package/src/views/post-editor/PostHeaderPanel.tsx +107 -0
- package/src/views/post-editor/PostPreview.tsx +114 -0
- package/src/views/post-editor/PostSectionEditor.tsx +506 -0
- package/src/views/post-editor/PostTemplateEditor.tsx +347 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Plus, Search, Tag as TagIcon, Trash2, X, } from 'lucide-react';
|
|
5
|
+
import { toast } from 'sonner';
|
|
6
|
+
import { bulkChangePageTags, bulkDeletePages, bulkUpdatePages, fetchPages, groupPages, } from '../../lib/pages-service.js';
|
|
7
|
+
import { PostStatusBadge, SeoScoreIndicator } from '../../components/posts/badges.js';
|
|
8
|
+
import { PageTagChip, PageTagsCell } from '../../components/pages/tag-badges.js';
|
|
9
|
+
import { ConfirmDialog } from '../../components/ui/ConfirmDialog.js';
|
|
10
|
+
const PAGE_SIZE = 25;
|
|
11
|
+
export function PagesListView({ onNavigate }) {
|
|
12
|
+
const [search, setSearch] = useState('');
|
|
13
|
+
const [debouncedSearch, setDebouncedSearch] = useState('');
|
|
14
|
+
const [status, setStatus] = useState('all');
|
|
15
|
+
const [groupBy, setGroupBy] = useState('none');
|
|
16
|
+
const [selectedTags, setSelectedTags] = useState(new Set());
|
|
17
|
+
const [sortBy, setSortBy] = useState('title');
|
|
18
|
+
const [dir, setDir] = useState('asc');
|
|
19
|
+
const [page, setPage] = useState(1);
|
|
20
|
+
const [selected, setSelected] = useState(new Set());
|
|
21
|
+
const [data, setData] = useState(null);
|
|
22
|
+
const [loading, setLoading] = useState(true);
|
|
23
|
+
const [error, setError] = useState(null);
|
|
24
|
+
const [refreshToken, setRefreshToken] = useState(0);
|
|
25
|
+
const [pendingDelete, setPendingDelete] = useState(false);
|
|
26
|
+
const debounceTimer = useRef(null);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (debounceTimer.current)
|
|
29
|
+
clearTimeout(debounceTimer.current);
|
|
30
|
+
debounceTimer.current = setTimeout(() => {
|
|
31
|
+
setDebouncedSearch(search.trim());
|
|
32
|
+
setPage(1);
|
|
33
|
+
}, 250);
|
|
34
|
+
return () => {
|
|
35
|
+
if (debounceTimer.current)
|
|
36
|
+
clearTimeout(debounceTimer.current);
|
|
37
|
+
};
|
|
38
|
+
}, [search]);
|
|
39
|
+
const tagIds = useMemo(() => [...selectedTags], [selectedTags]);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
let cancelled = false;
|
|
42
|
+
setLoading(true);
|
|
43
|
+
setError(null);
|
|
44
|
+
fetchPages({
|
|
45
|
+
status,
|
|
46
|
+
tagIds,
|
|
47
|
+
search: debouncedSearch,
|
|
48
|
+
groupBy,
|
|
49
|
+
sortBy,
|
|
50
|
+
sortDirection: dir,
|
|
51
|
+
page,
|
|
52
|
+
pageSize: PAGE_SIZE,
|
|
53
|
+
})
|
|
54
|
+
.then((res) => {
|
|
55
|
+
if (cancelled)
|
|
56
|
+
return;
|
|
57
|
+
setData(res);
|
|
58
|
+
setLoading(false);
|
|
59
|
+
})
|
|
60
|
+
.catch((err) => {
|
|
61
|
+
if (cancelled)
|
|
62
|
+
return;
|
|
63
|
+
setError(err instanceof Error ? err.message : 'Failed to load pages');
|
|
64
|
+
setLoading(false);
|
|
65
|
+
});
|
|
66
|
+
return () => {
|
|
67
|
+
cancelled = true;
|
|
68
|
+
};
|
|
69
|
+
}, [status, tagIds, debouncedSearch, groupBy, sortBy, dir, page, refreshToken]);
|
|
70
|
+
// Reset paging/selection when the result set changes shape.
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
setPage(1);
|
|
73
|
+
setSelected(new Set());
|
|
74
|
+
}, [debouncedSearch, status, tagIds, groupBy]);
|
|
75
|
+
const pages = data?.pages ?? [];
|
|
76
|
+
const tags = data?.tags ?? [];
|
|
77
|
+
const total = data?.total ?? 0;
|
|
78
|
+
const totalAll = useMemo(() => tags.reduce((sum, t) => sum + t.pageCount, 0), [tags]);
|
|
79
|
+
const totalPages = Math.max(1, Math.ceil(total / PAGE_SIZE));
|
|
80
|
+
const grouped = groupBy !== 'none';
|
|
81
|
+
const tagBySlug = useMemo(() => {
|
|
82
|
+
const m = new Map();
|
|
83
|
+
for (const t of tags)
|
|
84
|
+
m.set(t.slug, t);
|
|
85
|
+
return m;
|
|
86
|
+
}, [tags]);
|
|
87
|
+
const displayGroups = useMemo(() => groupPages(pages, groupBy, tags), [pages, groupBy, tags]);
|
|
88
|
+
const handleSort = useCallback((field) => {
|
|
89
|
+
if (sortBy === field) {
|
|
90
|
+
setDir((d) => (d === 'asc' ? 'desc' : 'asc'));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
setSortBy(field);
|
|
94
|
+
setDir(field === 'modified' || field === 'seo' ? 'desc' : 'asc');
|
|
95
|
+
}
|
|
96
|
+
}, [sortBy]);
|
|
97
|
+
const filtersAreActive = debouncedSearch !== '' || status !== 'all' || selectedTags.size > 0;
|
|
98
|
+
const clearFilters = () => {
|
|
99
|
+
setSearch('');
|
|
100
|
+
setStatus('all');
|
|
101
|
+
setSelectedTags(new Set());
|
|
102
|
+
setPage(1);
|
|
103
|
+
};
|
|
104
|
+
const toggleTag = (slug) => setSelectedTags((s) => {
|
|
105
|
+
const next = new Set(s);
|
|
106
|
+
if (next.has(slug))
|
|
107
|
+
next.delete(slug);
|
|
108
|
+
else
|
|
109
|
+
next.add(slug);
|
|
110
|
+
return next;
|
|
111
|
+
});
|
|
112
|
+
// ─── Selection ─────────────────────────────────────────────────────
|
|
113
|
+
const toggleOne = (id) => setSelected((s) => {
|
|
114
|
+
const next = new Set(s);
|
|
115
|
+
if (next.has(id))
|
|
116
|
+
next.delete(id);
|
|
117
|
+
else
|
|
118
|
+
next.add(id);
|
|
119
|
+
return next;
|
|
120
|
+
});
|
|
121
|
+
const allOnPageSelected = pages.length > 0 && pages.every((p) => selected.has(p.id));
|
|
122
|
+
const toggleAllOnPage = (checked) => setSelected((s) => {
|
|
123
|
+
const next = new Set(s);
|
|
124
|
+
if (checked)
|
|
125
|
+
for (const p of pages)
|
|
126
|
+
next.add(p.id);
|
|
127
|
+
else
|
|
128
|
+
for (const p of pages)
|
|
129
|
+
next.delete(p.id);
|
|
130
|
+
return next;
|
|
131
|
+
});
|
|
132
|
+
const selectedPages = useMemo(() => pages.filter((p) => selected.has(p.id)), [pages, selected]);
|
|
133
|
+
const deletablePages = useMemo(() => selectedPages.filter((p) => !p.isHomepage), [selectedPages]);
|
|
134
|
+
const blockedHomepage = selectedPages.length !== deletablePages.length;
|
|
135
|
+
// ─── Bulk actions ──────────────────────────────────────────────────
|
|
136
|
+
const afterBulk = () => {
|
|
137
|
+
setSelected(new Set());
|
|
138
|
+
setRefreshToken((t) => t + 1);
|
|
139
|
+
};
|
|
140
|
+
const runBulkStatus = async (target) => {
|
|
141
|
+
const ids = selectedPages.map((p) => p.id);
|
|
142
|
+
if (ids.length === 0)
|
|
143
|
+
return;
|
|
144
|
+
const verb = target === 'PUBLISHED' ? 'Publishing' : 'Updating';
|
|
145
|
+
const promise = bulkUpdatePages(ids, { status: target });
|
|
146
|
+
toast.promise(promise, {
|
|
147
|
+
loading: `${verb} ${ids.length} page${ids.length === 1 ? '' : 's'}…`,
|
|
148
|
+
success: (r) => `${r.ok} updated${r.failed ? `, ${r.failed} failed` : ''}`,
|
|
149
|
+
error: 'Bulk update failed',
|
|
150
|
+
});
|
|
151
|
+
await promise;
|
|
152
|
+
afterBulk();
|
|
153
|
+
};
|
|
154
|
+
const runBulkTag = async (slug, mode) => {
|
|
155
|
+
if (selectedPages.length === 0)
|
|
156
|
+
return;
|
|
157
|
+
const promise = bulkChangePageTags(selectedPages.map((p) => ({ id: p.id, tags: p.tags, primaryTagId: p.primaryTagId })), mode === 'add' ? { add: [slug] } : { remove: [slug] });
|
|
158
|
+
const tagName = tagBySlug.get(slug)?.name ?? slug;
|
|
159
|
+
toast.promise(promise, {
|
|
160
|
+
loading: `${mode === 'add' ? 'Adding' : 'Removing'} "${tagName}"…`,
|
|
161
|
+
success: (r) => `${r.ok} page${r.ok === 1 ? '' : 's'} updated${r.failed ? `, ${r.failed} failed` : ''}`,
|
|
162
|
+
error: 'Bulk tag change failed',
|
|
163
|
+
});
|
|
164
|
+
await promise;
|
|
165
|
+
afterBulk();
|
|
166
|
+
};
|
|
167
|
+
const runBulkDelete = async () => {
|
|
168
|
+
const ids = deletablePages.map((p) => p.id);
|
|
169
|
+
if (ids.length === 0)
|
|
170
|
+
return;
|
|
171
|
+
const promise = bulkDeletePages(ids);
|
|
172
|
+
toast.promise(promise, {
|
|
173
|
+
loading: `Deleting ${ids.length} page${ids.length === 1 ? '' : 's'}…`,
|
|
174
|
+
success: (r) => `${r.ok} deleted${r.failed ? `, ${r.failed} failed` : ''}`,
|
|
175
|
+
error: 'Bulk delete failed',
|
|
176
|
+
});
|
|
177
|
+
await promise;
|
|
178
|
+
afterBulk();
|
|
179
|
+
};
|
|
180
|
+
// ─── Render ────────────────────────────────────────────────────────
|
|
181
|
+
return (_jsxs("div", { className: "flex h-full flex-col gap-4 p-4 sm:p-6", children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("h1", { className: "text-foreground text-xl font-medium tracking-tight sm:text-2xl", children: "Pages" }), _jsxs("p", { className: "text-muted-foreground text-sm", children: [totalAll, " page", totalAll === 1 ? '' : 's', " \u00B7 organized by tags"] })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs("div", { className: "relative max-w-sm flex-1", children: [_jsx(Search, { className: "text-muted-foreground absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2", "aria-hidden": true }), _jsx("input", { type: "search", value: search, onChange: (e) => setSearch(e.target.value), "aria-label": "Search pages", placeholder: "Search pages\u2026", className: "border-border bg-card text-foreground placeholder:text-muted-foreground focus:border-primary focus:ring-primary/30 w-full rounded-lg border py-2 pr-3 pl-9 text-sm shadow-sm focus:ring-2 focus:outline-none" })] }), _jsx(FilterSelect, { label: "Group by", value: groupBy, onChange: (v) => setGroupBy(v), options: [
|
|
182
|
+
{ value: 'none', label: 'None' },
|
|
183
|
+
{ value: 'tag', label: 'Tag' },
|
|
184
|
+
{ value: 'status', label: 'Status' },
|
|
185
|
+
{ value: 'author', label: 'Author' },
|
|
186
|
+
] }), _jsx(FilterSelect, { label: "Status", value: status, onChange: (v) => {
|
|
187
|
+
setStatus(v);
|
|
188
|
+
setPage(1);
|
|
189
|
+
}, options: [
|
|
190
|
+
{ value: 'all', label: 'All statuses' },
|
|
191
|
+
{ value: 'PUBLISHED', label: 'Published' },
|
|
192
|
+
{ value: 'DRAFT', label: 'Draft' },
|
|
193
|
+
{ value: 'SCHEDULED', label: 'Scheduled' },
|
|
194
|
+
] }), _jsxs("span", { className: "text-muted-foreground ml-auto text-sm tabular-nums", children: [total, " of ", totalAll] })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "text-muted-foreground text-[10px] font-semibold tracking-wider uppercase", children: "Tags" }), tags.map((t) => (_jsx(PageTagChip, { name: t.name, color: t.color, count: t.pageCount, selected: selectedTags.has(t.slug), onToggle: () => toggleTag(t.slug) }, t.slug))), selectedTags.size > 0 && (_jsxs("button", { type: "button", onClick: () => setSelectedTags(new Set()), className: "text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-xs", children: [_jsx(X, { className: "h-3 w-3", "aria-hidden": true }), "Clear tags"] })), _jsxs("button", { type: "button", onClick: () => onNavigate('/pages/tags'), className: "text-primary ml-auto inline-flex items-center gap-1 text-xs font-medium hover:underline", children: [_jsx(TagIcon, { className: "h-3 w-3", "aria-hidden": true }), "Manage tags"] })] }), selected.size > 0 && (_jsx(BulkActionBar, { count: selected.size, tags: tags, blockedHomepage: blockedHomepage, onClear: () => setSelected(new Set()), onPublish: () => runBulkStatus('PUBLISHED'), onDraft: () => runBulkStatus('DRAFT'), onAddTag: (slug) => runBulkTag(slug, 'add'), onRemoveTag: (slug) => runBulkTag(slug, 'remove'), onDelete: () => setPendingDelete(true), deletableCount: deletablePages.length })), _jsxs("div", { className: "bg-card border-border overflow-hidden rounded-xl border shadow-sm", children: [_jsxs("table", { className: "w-full table-fixed", role: "table", "aria-label": "Pages", children: [_jsxs("colgroup", { children: [_jsx("col", { style: { width: '40px' } }), _jsx("col", {}), _jsx("col", { style: { width: '200px' } }), _jsx("col", { style: { width: '170px' } }), _jsx("col", { style: { width: '120px' } }), _jsx("col", { style: { width: '130px' } }), _jsx("col", { style: { width: '80px' } })] }), _jsx("thead", { className: "border-border bg-muted/40 border-b", children: _jsxs("tr", { className: "text-muted-foreground text-xs", children: [_jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx("input", { type: "checkbox", "aria-label": "Select all pages on this page", checked: allOnPageSelected, onChange: (e) => toggleAllOnPage(e.target.checked), className: "border-border accent-primary rounded" }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "Title", field: "title", current: sortBy, dir: dir, onSort: handleSort }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx("span", { className: "text-xs font-medium tracking-wider uppercase", children: "Tags" }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "Author", field: "author", current: sortBy, dir: dir, onSort: handleSort }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "Status", field: "status", current: sortBy, dir: dir, onSort: handleSort }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "Last Modified", field: "modified", current: sortBy, dir: dir, onSort: handleSort }) }), _jsx("th", { scope: "col", className: "px-3 py-2.5 text-left", children: _jsx(SortHeader, { label: "SEO", field: "seo", current: sortBy, dir: dir, onSort: handleSort }) })] }) }), _jsxs("tbody", { children: [loading && pages.length === 0 && _jsx(LoadingRows, {}), !loading && error && (_jsx("tr", { children: _jsxs("td", { colSpan: 7, className: "px-3 py-12 text-center", children: [_jsx("div", { className: "text-foreground mb-2 text-sm font-medium", children: error }), _jsx("button", { onClick: () => setRefreshToken((t) => t + 1), className: "text-primary text-sm hover:underline", children: "Try again" })] }) })), !loading && !error && pages.length === 0 && (_jsx(EmptyRow, { filtersActive: filtersAreActive, onClear: clearFilters, onNewPage: () => onNavigate('/pages/new') })), !loading &&
|
|
195
|
+
!error &&
|
|
196
|
+
displayGroups.map((group) => (_jsx(GroupBlock, { showHeader: grouped, label: group.label, color: group.color, count: group.pages.length, children: group.pages.map((p) => (_jsx(PageRow, { page: p, selected: selected.has(p.id), resolveTag: (slug) => tagBySlug.get(slug), onSelect: () => toggleOne(p.id), onOpen: () => onNavigate(`/pages/${p.id}/edit`) }, p.id))) }, group.key)))] })] }), !grouped && (_jsx(PaginationFooter, { page: page, totalPages: totalPages, total: total, pageSize: PAGE_SIZE, onPage: setPage }))] }), _jsx(ConfirmDialog, { open: pendingDelete, title: `Delete ${deletablePages.length} page${deletablePages.length === 1 ? '' : 's'}?`, description: blockedHomepage
|
|
197
|
+
? 'The homepage cannot be deleted and will be skipped. The remaining pages move to trash and can be restored for 30 days.'
|
|
198
|
+
: 'The selected pages move to trash and can be restored for 30 days.', confirmLabel: "Delete", destructive: true, onClose: () => setPendingDelete(false), onConfirm: () => {
|
|
199
|
+
void runBulkDelete();
|
|
200
|
+
} })] }));
|
|
201
|
+
}
|
|
202
|
+
// ─── Sub-components ──────────────────────────────────────────────────
|
|
203
|
+
function SortHeader({ label, field, current, dir, onSort, }) {
|
|
204
|
+
const active = current === field;
|
|
205
|
+
const ariaSort = active ? (dir === 'asc' ? 'ascending' : 'descending') : 'none';
|
|
206
|
+
return (_jsxs("button", { type: "button", onClick: () => onSort(field), "aria-sort": ariaSort, className: `hover:text-foreground inline-flex items-center gap-1 text-xs font-medium tracking-wider uppercase transition-colors ${active ? 'text-foreground' : 'text-muted-foreground'}`, children: [_jsx("span", { children: label }), active &&
|
|
207
|
+
(dir === 'asc' ? (_jsx(ChevronUp, { className: "h-3 w-3", "aria-hidden": true })) : (_jsx(ChevronDown, { className: "h-3 w-3", "aria-hidden": true })))] }));
|
|
208
|
+
}
|
|
209
|
+
function FilterSelect({ label, value, onChange, options, }) {
|
|
210
|
+
return (_jsxs("label", { className: "text-foreground inline-flex items-center gap-1.5 text-sm", children: [_jsxs("span", { className: "text-muted-foreground", children: [label, ":"] }), _jsx("select", { value: value, onChange: (e) => onChange(e.target.value), className: "border-border bg-card text-foreground focus:border-primary focus:ring-primary/30 rounded-lg border px-2.5 py-1.5 text-sm shadow-sm focus:ring-2 focus:outline-none", children: options.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))) })] }));
|
|
211
|
+
}
|
|
212
|
+
function GroupBlock({ showHeader, label, color, count, children, }) {
|
|
213
|
+
return (_jsxs(_Fragment, { children: [showHeader && (_jsx("tr", { className: "bg-muted/30 border-border border-b", children: _jsx("td", { colSpan: 7, className: "px-3 py-2", children: _jsxs("span", { className: "text-foreground inline-flex items-center gap-2 text-xs font-semibold tracking-wider uppercase", children: [color && _jsx("span", { "aria-hidden": true, className: `h-2 w-2 rounded-full ${dotFor(color)}` }), label, _jsx("span", { className: "text-muted-foreground tabular-nums", children: count })] }) }) })), children] }));
|
|
214
|
+
}
|
|
215
|
+
function dotFor(color) {
|
|
216
|
+
const map = {
|
|
217
|
+
purple: 'bg-violet-500',
|
|
218
|
+
green: 'bg-emerald-500',
|
|
219
|
+
orange: 'bg-amber-500',
|
|
220
|
+
red: 'bg-red-500',
|
|
221
|
+
blue: 'bg-blue-500',
|
|
222
|
+
pink: 'bg-pink-500',
|
|
223
|
+
};
|
|
224
|
+
return map[color] ?? 'bg-muted-foreground';
|
|
225
|
+
}
|
|
226
|
+
function BulkActionBar({ count, tags, blockedHomepage, deletableCount, onClear, onPublish, onDraft, onAddTag, onRemoveTag, onDelete, }) {
|
|
227
|
+
return (_jsxs("div", { className: "border-primary/30 bg-primary/5 flex flex-wrap items-center gap-2 rounded-lg border px-4 py-2", children: [_jsxs("span", { className: "text-foreground text-sm font-medium", children: [count, " selected"] }), _jsx("div", { className: "bg-border h-4 w-px", "aria-hidden": true }), _jsx("button", { type: "button", onClick: onPublish, className: "text-foreground hover:bg-accent rounded-md px-2 py-1 text-sm transition-colors", children: "Publish" }), _jsx("button", { type: "button", onClick: onDraft, className: "text-foreground hover:bg-accent rounded-md px-2 py-1 text-sm transition-colors", children: "Move to draft" }), _jsx(TagMenu, { label: "Add tag", tags: tags, onPick: onAddTag }), _jsx(TagMenu, { label: "Remove tag", tags: tags, onPick: onRemoveTag }), _jsxs("button", { type: "button", onClick: onDelete, disabled: deletableCount === 0, title: blockedHomepage ? 'The homepage is excluded from deletion' : undefined, className: "text-destructive hover:bg-destructive/10 inline-flex items-center gap-1 rounded-md px-2 py-1 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-40", children: [_jsx(Trash2, { className: "h-3.5 w-3.5", "aria-hidden": true }), "Delete"] }), _jsxs("button", { type: "button", onClick: onClear, className: "text-muted-foreground hover:text-foreground ml-auto inline-flex items-center gap-1 rounded-md px-2 py-1 text-sm transition-colors", children: [_jsx(X, { className: "h-3.5 w-3.5", "aria-hidden": true }), "Clear"] })] }));
|
|
228
|
+
}
|
|
229
|
+
function TagMenu({ label, tags, onPick, }) {
|
|
230
|
+
const [open, setOpen] = useState(false);
|
|
231
|
+
const ref = useRef(null);
|
|
232
|
+
useEffect(() => {
|
|
233
|
+
if (!open)
|
|
234
|
+
return;
|
|
235
|
+
const onDoc = (e) => {
|
|
236
|
+
if (ref.current && !ref.current.contains(e.target))
|
|
237
|
+
setOpen(false);
|
|
238
|
+
};
|
|
239
|
+
document.addEventListener('mousedown', onDoc);
|
|
240
|
+
return () => document.removeEventListener('mousedown', onDoc);
|
|
241
|
+
}, [open]);
|
|
242
|
+
return (_jsxs("div", { className: "relative", ref: ref, children: [_jsxs("button", { type: "button", onClick: () => setOpen((o) => !o), "aria-haspopup": "menu", "aria-expanded": open, className: "text-foreground hover:bg-accent inline-flex items-center gap-1 rounded-md px-2 py-1 text-sm transition-colors", children: [label, _jsx(ChevronDown, { className: "h-3 w-3", "aria-hidden": true })] }), open && (_jsxs("div", { role: "menu", className: "border-border bg-popover absolute z-20 mt-1 max-h-64 w-44 overflow-auto rounded-lg border p-1 shadow-lg", children: [tags.length === 0 && (_jsx("div", { className: "text-muted-foreground px-2 py-1.5 text-xs", children: "No tags yet" })), tags.map((t) => (_jsxs("button", { type: "button", role: "menuitem", onClick: () => {
|
|
243
|
+
onPick(t.slug);
|
|
244
|
+
setOpen(false);
|
|
245
|
+
}, className: "text-foreground hover:bg-accent flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm", children: [_jsx("span", { "aria-hidden": true, className: `h-2 w-2 rounded-full ${dotFor(t.color ?? 'gray')}` }), t.name] }, t.slug)))] }))] }));
|
|
246
|
+
}
|
|
247
|
+
function PageRow({ page, selected, resolveTag, onSelect, onOpen, }) {
|
|
248
|
+
return (_jsxs("tr", { className: `border-border hover:bg-muted/30 group border-b transition-colors last:border-b-0 ${selected ? 'bg-primary/5' : ''}`, children: [_jsx("td", { className: "px-3 py-3", onClick: (e) => e.stopPropagation(), children: _jsx("input", { type: "checkbox", "aria-label": `Select "${page.title}"`, checked: selected, onChange: onSelect, className: "border-border accent-primary rounded" }) }), _jsx("td", { className: "px-3 py-3", children: _jsxs("button", { type: "button", onClick: onOpen, className: "flex w-full items-center gap-3 text-left", children: [_jsx("span", { "aria-hidden": true, className: "bg-muted block h-9 w-9 shrink-0 rounded-md" }), _jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "text-foreground group-hover:text-primary block truncate text-sm font-medium", children: page.title }), _jsx("span", { className: "text-muted-foreground block truncate text-xs", children: page.path })] })] }) }), _jsx("td", { className: "px-3 py-3", children: _jsx(PageTagsCell, { tagSlugs: page.tags, primaryTagId: page.primaryTagId, resolve: resolveTag }) }), _jsx("td", { className: "px-3 py-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { "aria-hidden": true, className: "bg-muted text-muted-foreground inline-flex h-7 w-7 items-center justify-center rounded-full text-[11px] font-semibold", children: page.authorInitials }), _jsx("span", { className: "text-foreground truncate text-sm", children: page.authorName })] }) }), _jsx("td", { className: "px-3 py-3", children: _jsx(PostStatusBadge, { status: page.status }) }), _jsx("td", { className: "text-muted-foreground px-3 py-3 text-sm tabular-nums", children: formatDateShort(page.lastModified) }), _jsx("td", { className: "px-3 py-3", children: _jsx(SeoScoreIndicator, { score: page.seoScore }) })] }));
|
|
249
|
+
}
|
|
250
|
+
function LoadingRows() {
|
|
251
|
+
return (_jsx(_Fragment, { children: Array.from({ length: 8 }).map((_, i) => (_jsx("tr", { className: "border-border border-b last:border-b-0", children: Array.from({ length: 7 }).map((__, j) => (_jsx("td", { className: "px-3 py-3", children: _jsx("div", { className: "bg-muted h-4 w-full animate-pulse rounded" }) }, j))) }, i))) }));
|
|
252
|
+
}
|
|
253
|
+
function EmptyRow({ filtersActive, onClear, onNewPage, }) {
|
|
254
|
+
return (_jsx("tr", { children: _jsxs("td", { colSpan: 7, className: "px-3 py-16 text-center", children: [_jsx("div", { className: "text-foreground mb-2 text-sm font-medium", children: filtersActive ? 'No pages match your filters' : 'No pages yet' }), _jsx("div", { className: "text-muted-foreground mb-4 text-sm", children: filtersActive
|
|
255
|
+
? 'Try clearing the search, tags, or status filter above.'
|
|
256
|
+
: 'Create your first page to get started.' }), filtersActive ? (_jsx("button", { type: "button", onClick: onClear, className: "text-primary text-sm hover:underline", children: "Clear filters" })) : (_jsxs("button", { type: "button", onClick: onNewPage, className: "bg-primary text-primary-foreground hover:bg-primary/90 inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium shadow-sm transition-colors", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "New page"] }))] }) }));
|
|
257
|
+
}
|
|
258
|
+
function PaginationFooter({ page, totalPages, total, pageSize, onPage, }) {
|
|
259
|
+
const start = total === 0 ? 0 : (page - 1) * pageSize + 1;
|
|
260
|
+
const end = Math.min(total, page * pageSize);
|
|
261
|
+
return (_jsxs("div", { className: "border-border flex items-center justify-between border-t px-4 py-3 text-sm", children: [_jsxs("span", { className: "text-muted-foreground tabular-nums", children: [start, "\u2013", end, " of ", total, " page", total === 1 ? '' : 's'] }), _jsxs("nav", { className: "flex items-center gap-1", "aria-label": "Pages pagination", children: [_jsx("button", { type: "button", onClick: () => onPage(Math.max(1, page - 1)), disabled: page === 1, "aria-label": "Previous page", className: "border-border bg-background text-foreground hover:bg-accent inline-flex h-8 w-8 items-center justify-center rounded-md border transition-colors disabled:cursor-not-allowed disabled:opacity-40", children: _jsx(ChevronLeft, { className: "h-4 w-4", "aria-hidden": true }) }), pageNumbers(page, totalPages).map((p, idx) => p === '…' ? (_jsx("span", { "aria-hidden": true, className: "text-muted-foreground inline-flex h-8 w-8 items-center justify-center text-sm", children: "\u2026" }, `gap-${idx}`)) : (_jsx("button", { type: "button", onClick: () => onPage(p), "aria-current": p === page ? 'page' : undefined, className: `inline-flex h-8 w-8 items-center justify-center rounded-md text-sm tabular-nums transition-colors ${p === page
|
|
262
|
+
? 'bg-primary text-primary-foreground'
|
|
263
|
+
: 'border-border bg-background text-foreground hover:bg-accent border'}`, children: p }, p))), _jsx("button", { type: "button", onClick: () => onPage(Math.min(totalPages, page + 1)), disabled: page === totalPages, "aria-label": "Next page", className: "border-border bg-background text-foreground hover:bg-accent inline-flex h-8 w-8 items-center justify-center rounded-md border transition-colors disabled:cursor-not-allowed disabled:opacity-40", children: _jsx(ChevronRight, { className: "h-4 w-4", "aria-hidden": true }) })] })] }));
|
|
264
|
+
}
|
|
265
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
266
|
+
function formatDateShort(input) {
|
|
267
|
+
const d = new Date(input);
|
|
268
|
+
if (Number.isNaN(d.getTime()))
|
|
269
|
+
return '—';
|
|
270
|
+
return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' });
|
|
271
|
+
}
|
|
272
|
+
export function pageNumbers(current, total) {
|
|
273
|
+
if (total <= 7)
|
|
274
|
+
return Array.from({ length: total }, (_, i) => i + 1);
|
|
275
|
+
const out = [1];
|
|
276
|
+
const start = Math.max(2, current - 1);
|
|
277
|
+
const end = Math.min(total - 1, current + 1);
|
|
278
|
+
if (start > 2)
|
|
279
|
+
out.push('…');
|
|
280
|
+
for (let i = start; i <= end; i++)
|
|
281
|
+
out.push(i);
|
|
282
|
+
if (end < total - 1)
|
|
283
|
+
out.push('…');
|
|
284
|
+
out.push(total);
|
|
285
|
+
return out;
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=PagesListView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PagesListView.js","sourceRoot":"","sources":["../../../src/views/Pages/PagesListView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-picker landing page for "+ New Post".
|
|
3
|
+
*
|
|
4
|
+
* When zero or one post type is configured we'd ordinarily auto-route
|
|
5
|
+
* to the per-collection editor, but the spec calls out always showing
|
|
6
|
+
* a chooser when "+ New Post" is clicked. We keep that behavior so
|
|
7
|
+
* the experience is consistent regardless of how many types exist.
|
|
8
|
+
*
|
|
9
|
+
* Picking a card navigates to the section-based Post editor's new-post
|
|
10
|
+
* route (`/posts/<slug>/new`), which seeds the post from that type's
|
|
11
|
+
* template so the author starts from the type's default layout.
|
|
12
|
+
*/
|
|
13
|
+
export declare function NewPostPicker({ onNavigate }: {
|
|
14
|
+
onNavigate: (path: string) => void;
|
|
15
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=NewPostPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NewPostPicker.d.ts","sourceRoot":"","sources":["../../../src/views/Posts/NewPostPicker.tsx"],"names":[],"mappings":"AAQA;;;;;;;;;;;GAWG;AAEH,wBAAgB,aAAa,CAAC,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,2CA0GnF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { ArrowRight, ArrowLeft } from 'lucide-react';
|
|
5
|
+
import { fetchPostTypes } from '../../lib/posts-service.js';
|
|
6
|
+
import { paletteFor } from '../../components/posts/badges.js';
|
|
7
|
+
import { resolvePostTypeIcon } from '../../components/posts/icons.js';
|
|
8
|
+
/**
|
|
9
|
+
* Type-picker landing page for "+ New Post".
|
|
10
|
+
*
|
|
11
|
+
* When zero or one post type is configured we'd ordinarily auto-route
|
|
12
|
+
* to the per-collection editor, but the spec calls out always showing
|
|
13
|
+
* a chooser when "+ New Post" is clicked. We keep that behavior so
|
|
14
|
+
* the experience is consistent regardless of how many types exist.
|
|
15
|
+
*
|
|
16
|
+
* Picking a card navigates to the section-based Post editor's new-post
|
|
17
|
+
* route (`/posts/<slug>/new`), which seeds the post from that type's
|
|
18
|
+
* template so the author starts from the type's default layout.
|
|
19
|
+
*/
|
|
20
|
+
export function NewPostPicker({ onNavigate }) {
|
|
21
|
+
const [types, setTypes] = useState([]);
|
|
22
|
+
const [loading, setLoading] = useState(true);
|
|
23
|
+
const [error, setError] = useState(null);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
let cancelled = false;
|
|
26
|
+
fetchPostTypes()
|
|
27
|
+
.then((res) => {
|
|
28
|
+
if (cancelled)
|
|
29
|
+
return;
|
|
30
|
+
// With a single Post Type there's nothing to choose — forward
|
|
31
|
+
// straight to its editor so the picker doesn't flash a
|
|
32
|
+
// one-card screen.
|
|
33
|
+
if (res.length === 1) {
|
|
34
|
+
onNavigate(`/posts/${res[0].slug}/new`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
setTypes(res);
|
|
38
|
+
setLoading(false);
|
|
39
|
+
})
|
|
40
|
+
.catch((err) => {
|
|
41
|
+
if (cancelled)
|
|
42
|
+
return;
|
|
43
|
+
setError(err instanceof Error ? err.message : 'Failed to load Post Types');
|
|
44
|
+
setLoading(false);
|
|
45
|
+
});
|
|
46
|
+
return () => {
|
|
47
|
+
cancelled = true;
|
|
48
|
+
};
|
|
49
|
+
}, [onNavigate]);
|
|
50
|
+
return (_jsxs("div", { className: "mx-auto flex h-full max-w-3xl flex-col gap-6 p-4 sm:p-6", children: [_jsxs("button", { type: "button", onClick: () => onNavigate('/posts'), className: "text-muted-foreground hover:text-foreground inline-flex w-fit items-center gap-1.5 text-sm transition-colors", children: [_jsx(ArrowLeft, { className: "h-3.5 w-3.5", "aria-hidden": true }), "Back to Posts"] }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("h1", { className: "text-foreground text-xl font-medium tracking-tight sm:text-2xl", children: "Choose a Post Type" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Pick which content model you want to use for this post. Each type has its own fields, URL base, and SEO defaults." })] }), loading && _jsx(Skeleton, {}), !loading && error && (_jsx("div", { className: "border-border bg-card rounded-xl border p-8 text-center", children: _jsx("div", { className: "text-foreground mb-2 text-sm font-medium", children: error }) })), !loading && !error && types.length === 0 && (_jsxs("div", { className: "border-border bg-card rounded-xl border p-8 text-center", children: [_jsx("div", { className: "text-foreground mb-2 text-sm font-medium", children: "No Post Types configured." }), _jsxs("p", { className: "text-muted-foreground mb-4 text-sm", children: ["Add a collection with ", _jsx("code", { className: "font-mono", children: "type: 'post'" }), " to your CMS config to start creating posts."] }), _jsx("button", { type: "button", onClick: () => onNavigate('/posts/types/new'), className: "text-primary text-sm hover:underline", children: "View setup instructions \u2192" })] })), !loading && !error && types.length > 0 && (_jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: types.map((t) => {
|
|
51
|
+
const palette = paletteFor(t.accentColor);
|
|
52
|
+
const Icon = resolvePostTypeIcon(t.icon);
|
|
53
|
+
return (_jsxs("button", { type: "button", onClick: () => onNavigate(`/posts/${t.slug}/new`), className: "border-border bg-card focus-visible:ring-ring flex items-center gap-3 rounded-xl border p-4 text-left shadow-sm transition-shadow hover:shadow-md focus:outline-none focus-visible:ring-2", children: [_jsx("span", { className: `inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-lg ${palette.bg} ${palette.text}`, children: _jsx(Icon, { className: "h-5 w-5", "aria-hidden": true }) }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "text-foreground block text-sm font-medium", children: t.singularName }), _jsx("span", { className: "text-muted-foreground block truncate text-xs", children: t.description ?? `New entry in ${t.name}` })] }), _jsx(ArrowRight, { className: "text-muted-foreground h-4 w-4 shrink-0", "aria-hidden": true })] }, t.slug));
|
|
54
|
+
}) }))] }));
|
|
55
|
+
}
|
|
56
|
+
function Skeleton() {
|
|
57
|
+
return (_jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: Array.from({ length: 4 }).map((_, i) => (_jsxs("div", { className: "border-border bg-card flex items-center gap-3 rounded-xl border p-4", children: [_jsx("div", { className: "bg-muted h-10 w-10 animate-pulse rounded-lg" }), _jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "bg-muted mb-2 h-3 w-1/3 animate-pulse rounded" }), _jsx("div", { className: "bg-muted h-2.5 w-2/3 animate-pulse rounded" })] })] }, i))) }));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=NewPostPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NewPostPicker.js","sourceRoot":"","sources":["../../../src/views/Posts/NewPostPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type PostTypeIconName } from '../../components/posts/icons.js';
|
|
2
|
+
import { type PresetColor } from './post-type-presets.js';
|
|
3
|
+
interface DraftType {
|
|
4
|
+
slug: string;
|
|
5
|
+
singular: string;
|
|
6
|
+
plural: string;
|
|
7
|
+
color: PresetColor;
|
|
8
|
+
icon: PostTypeIconName;
|
|
9
|
+
description: string;
|
|
10
|
+
/** Extra field lines beyond the shared base, seeded by a preset. */
|
|
11
|
+
extraFields: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function NewPostTypeInstructions({ onNavigate }: {
|
|
14
|
+
onNavigate: (p: string) => void;
|
|
15
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function renderSnippet(draft: DraftType): string;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=NewPostTypeInstructions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NewPostTypeInstructions.d.ts","sourceRoot":"","sources":["../../../src/views/Posts/NewPostTypeInstructions.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAE5F,OAAO,EAAqB,KAAK,WAAW,EAAoB,MAAM,wBAAwB,CAAA;AAqC9F,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,WAAW,CAAA;IAClB,IAAI,EAAE,gBAAgB,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AAYD,wBAAgB,uBAAuB,CAAC,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,2CA0M1F;AAwBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAgDtD"}
|