diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index f0e2d9407..618a64ecd 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -312,7 +312,7 @@ const BrewRenderer = (props)=>{ }; const renderedStyle = useMemo(()=>renderStyle(), [props.style, props.themeBundle]); - renderedPages = useMemo(()=>renderPages(), [props.text, displayOptions]); + renderedPages = useMemo(()=>renderPages(), [props.text, centerPage, displayOptions]); return ( <> diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 7a14234a7..99ef3e35c 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -12,6 +12,8 @@ const { both: RecentNavItem } = RecentNavItems; import Account from '@navbar/account.navitem.jsx'; import BrewRenderer from '../../brewRenderer/brewRenderer.jsx'; +import request from '../../utils/request-middleware.js'; + import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js'; import { printCurrentBrew, fetchThemeBundle } from '@shared/helpers.js'; @@ -36,19 +38,30 @@ const SharePage = (props)=>{ } }; + const fetchUpdatedBrew = async ()=>{ + const response = await request + .get(`/api/fetch/${currentBrew.shareId}`) + .catch((error)=>{ + console.log('error at fetching updated brew: ', error); + }); + if(response.ok && !!response.body.brew) { + setCurrentBrew(response.body.brew); + } + }; + useEffect(()=>{ document.addEventListener('keydown', handleControlKeys); fetchThemeBundle(undefined, setThemeBundle, currentBrew.renderer, currentBrew.theme); - // listen for changes in the brew version + // listen for changes in the brew version const eventSource = new EventSource('/stream'); eventSource.addEventListener('message', (evt)=>{ const messageData = JSON.parse(evt.data); if(messageData.eventType == 'brewUpdated'){ if(messageData.shareId == currentBrew.shareId && messageData.version != currentBrew.version) { - console.log(`brew has been updated, viewing ${currentBrew.version}, new version is ${messageData.version}`); console.log('should fetch brew'); + fetchUpdatedBrew(); } } }); diff --git a/server/app.js b/server/app.js index 714c4beba..49767c09d 100644 --- a/server/app.js +++ b/server/app.js @@ -14,6 +14,7 @@ import express from 'express'; import config from './config.js'; import path from 'path'; import fs from 'fs-extra'; +import { splitTextStyleAndMetadata } from '../shared/helpers.js'; import api from './homebrew.api.js'; const { homebrewApi, getBrew, getCSS } = api; @@ -135,6 +136,15 @@ export default async function createApp(vite) { app.get('/robots.txt', (req, res)=>{ return res.sendFile(`robots.txt`, { root: process.cwd() }); }); + //serve brew for sharepage rerender + app.get('/api/fetch/:id', asyncHandler(getBrew('share')), asyncHandler(async (req, res) => { + const { brew } = req; + brew.authors.includes(req.account?.username) + ? sanitizeBrew(brew, 'shareAuthor') + : sanitizeBrew(brew, 'share'); + splitTextStyleAndMetadata(brew); + res.json({ brew }); + })); //Serve brew metadata app.get('/metadata/:id', asyncHandler(getBrew('share')), (req, res)=>{ diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 210b7f71a..09b8b2677 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -577,9 +577,9 @@ const api = { router.use(dbCheck); router.post('/api', checkClientVersion, asyncHandler(api.newBrew)); -router.put('/api/:id', checkClientVersion, asyncHandler(api.getBrew('edit', false)), asyncHandler(api.updateBrew)); +router.put('/api/:id', checkClientVersion, asyncHandler(api.getBrew('edit', false)), asyncHandler(api.updateBrew)); //alt endpoint, unused router.put('/api/update/:id', checkClientVersion, asyncHandler(api.getBrew('edit', false)), asyncHandler(api.updateBrew)); -router.delete('/api/:id', checkClientVersion, asyncHandler(api.deleteBrew)); +router.delete('/api/:id', checkClientVersion, asyncHandler(api.deleteBrew)); //alt endpoint, unused router.get('/api/remove/:id', checkClientVersion, asyncHandler(api.deleteBrew)); router.get('/api/theme/:renderer/:id', asyncHandler(api.getThemeBundle));