@@ -20,10 +20,9 @@ import { deletePublishedPost } from './lib/deletePublishedPost'
2020import { PublishValidationError } from './lib/publishTemplates'
2121import { postHref , postRepoPath } from './lib/blogPaths'
2222import {
23- buildOptimisticPublishedFile ,
2423 filterVisiblePublishedPosts ,
24+ mergeRepoPublishedWithLocal ,
2525 pruneRecentlyDeletedSlugs ,
26- upsertPublishedPost ,
2726 withoutDeletedPost ,
2827} from './lib/publishedPosts'
2928import { PostTemplatePanel } from './components/PostTemplatePanel'
@@ -138,7 +137,7 @@ export default function App() {
138137 branch : githubSettings . branch ?. trim ( ) || 'main' ,
139138 } )
140139 const sorted = [ ...files ] . sort ( ( a , b ) => a . name . localeCompare ( b . name ) )
141- setPublishedFiles ( sorted )
140+ setPublishedFiles ( ( current ) => mergeRepoPublishedWithLocal ( current , sorted ) )
142141 setRecentlyDeletedSlugs ( ( prev ) => pruneRecentlyDeletedSlugs ( prev , sorted ) )
143142 return sorted
144143 } catch ( err ) {
@@ -414,29 +413,41 @@ export default function App() {
414413 const publishedDraftId = draftId
415414 const s = slug . trim ( ) || slugify ( title ) || 'post'
416415 const path = postRepoPath ( s )
416+ const currentSlug = s
417417 const result = await publishPostAndIndex ( {
418418 form,
419419 path,
420- slug : s ,
420+ slug : currentSlug ,
421421 title,
422422 content,
423423 excerpt,
424424 category,
425425 categoryClass : 'nb-bg-pink' ,
426426 } )
427+ console . log ( 'Publish result:' , result )
427428 setIndexHomeBanner ( result . indexHomeBanner )
428429
429- const publishedItem = buildOptimisticPublishedFile ( {
430- slug : result . slug ,
431- title : result . title ,
432- excerpt : result . excerpt ,
433- category : result . category ,
434- path : result . postPath ,
435- url : result . url ,
436- publishedAt : result . publishedAt ,
430+ const publishedPost = {
431+ slug : result . slug || currentSlug ,
432+ title : result . title || title ,
433+ excerpt : result . excerpt ?? excerpt ,
434+ category : result . category ?? category ,
435+ path : result . postPath || result . path || postRepoPath ( currentSlug ) ,
436+ url : result . url || postHref ( currentSlug ) ,
437+ publishedAt : result . publishedAt || new Date ( ) . toISOString ( ) ,
438+ name : `${ result . slug || currentSlug } .html` ,
439+ sha : null ,
440+ }
441+ console . log ( 'Optimistic published post:' , publishedPost )
442+ console . log ( 'Updating publishedPosts after publish' )
443+
444+ setPublishedFiles ( ( posts ) => {
445+ const withoutExisting = posts . filter (
446+ ( post ) => post . slug !== publishedPost . slug && post . path !== publishedPost . path ,
447+ )
448+ return [ publishedPost , ...withoutExisting ]
437449 } )
438- setPublishedFiles ( ( posts ) => upsertPublishedPost ( posts , publishedItem ) )
439- setRecentlyDeletedSlugs ( ( prev ) => prev . filter ( ( deleted ) => deleted !== result . slug ) )
450+ setRecentlyDeletedSlugs ( ( prev ) => prev . filter ( ( deleted ) => deleted !== publishedPost . slug ) )
440451 setListTab ( 'published' )
441452
442453 if ( result . workflowWarning ) pushToast ( result . workflowWarning )
0 commit comments