diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index d393501cb..7e5c63101 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -1,39 +1,13 @@ const React = require('react'); -const { useState, useRef } = React; const _ = require('lodash'); const Nav = require('naturalcrit/nav/nav.jsx'); -const yaml = require('js-yaml'); +const { splitTextStyleAndMetadata } = require('../../../shared/helpers.js'); // Importing the function from helpers.js const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; const METAKEY = 'homebrewery-new-meta'; -const NewBrew = () => { - - - - const splitTextStyleAndMetadata = (brewContent) => { - let updatedBrew = { ...brewContent }; - updatedBrew.text = updatedBrew.text.replaceAll('\r\n', '\n'); - if (updatedBrew.text.startsWith('```metadata')) { - const index = updatedBrew.text.indexOf('```\n\n'); - const metadataSection = updatedBrew.text.slice(12, index - 1); - const metadata = yaml.load(metadataSection); - updatedBrew = { - ...updatedBrew, - ..._.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']) - }; - updatedBrew.text = updatedBrew.text.slice(index + 5); - } - if (updatedBrew.text.startsWith('```css')) { - const index = updatedBrew.text.indexOf('```\n\n'); - updatedBrew.style = updatedBrew.text.slice(7, index - 1); - updatedBrew.text = updatedBrew.text.slice(index + 5); - } - return updatedBrew; - }; - - +const NewBrew = () => { const handleFileChange = (e) => { const file = e.target.files[0]; if (file) { @@ -44,14 +18,13 @@ const NewBrew = () => { text: fileContent, style: '' }; - if(fileContent.startsWith('```metadata')) { - const updatedBrew = splitTextStyleAndMetadata(newBrew); - localStorage.setItem(BREWKEY, updatedBrew.text); - localStorage.setItem(STYLEKEY, updatedBrew.style); - localStorage.setItem(METAKEY, JSON.stringify(_.pick(updatedBrew, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']))); - - window.location.href = '/new'; - } else { + if(fileContent.startsWith('```metadata')) { + splitTextStyleAndMetadata(newBrew); // Modify newBrew directly + localStorage.setItem(BREWKEY, newBrew.text); + localStorage.setItem(STYLEKEY, newBrew.style); + localStorage.setItem(METAKEY, JSON.stringify(_.pick(newBrew, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang']))); + window.location.href = '/new'; + } else { alert('This file is invalid, please, enter a valid file'); } }; diff --git a/server/app.js b/server/app.js index fc5d4a035..4c72b4924 100644 --- a/server/app.js +++ b/server/app.js @@ -17,21 +17,8 @@ const asyncHandler = require('express-async-handler'); const { DEFAULT_BREW } = require('./brewDefaults.js'); -const splitTextStyleAndMetadata = (brew)=>{ - brew.text = brew.text.replaceAll('\r\n', '\n'); - if(brew.text.startsWith('```metadata')) { - const index = brew.text.indexOf('```\n\n'); - const metadataSection = brew.text.slice(12, index - 1); - const metadata = yaml.load(metadataSection); - Object.assign(brew, _.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang'])); - brew.text = brew.text.slice(index + 5); - } - if(brew.text.startsWith('```css')) { - const index = brew.text.indexOf('```\n\n'); - brew.style = brew.text.slice(7, index - 1); - brew.text = brew.text.slice(index + 5); - } -}; +const { splitTextStyleAndMetadata } = require('../shared/helpers.js'); + const sanitizeBrew = (brew, accessType)=>{ brew._id = undefined; diff --git a/shared/helpers.js b/shared/helpers.js new file mode 100644 index 000000000..5abb93fea --- /dev/null +++ b/shared/helpers.js @@ -0,0 +1,22 @@ +const _ = require('lodash'); +const yaml = require('js-yaml'); + +const splitTextStyleAndMetadata = (brew) => { + brew.text = brew.text.replaceAll('\r\n', '\n'); + if (brew.text.startsWith('```metadata')) { + const index = brew.text.indexOf('```\n\n'); + const metadataSection = brew.text.slice(12, index - 1); + const metadata = yaml.load(metadataSection); + Object.assign(brew, _.pick(metadata, ['title', 'description', 'tags', 'systems', 'renderer', 'theme', 'lang'])); + brew.text = brew.text.slice(index + 5); + } + if (brew.text.startsWith('```css')) { + const index = brew.text.indexOf('```\n\n'); + brew.style = brew.text.slice(7, index - 1); + brew.text = brew.text.slice(index + 5); + } +}; + +module.exports = { + splitTextStyleAndMetadata +};