From 705d170b6e1fa922e1d820370e326e336e60520a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Fri, 9 Feb 2024 10:22:55 +0100 Subject: [PATCH] alert if wrong file, redirect if good --- client/homebrew/navbar/newbrew.navitem.jsx | 171 ++++++++++----------- 1 file changed, 84 insertions(+), 87 deletions(-) diff --git a/client/homebrew/navbar/newbrew.navitem.jsx b/client/homebrew/navbar/newbrew.navitem.jsx index 94aa9fb85..6e63e7a8f 100644 --- a/client/homebrew/navbar/newbrew.navitem.jsx +++ b/client/homebrew/navbar/newbrew.navitem.jsx @@ -1,98 +1,95 @@ const React = require('react'); +const { useState, useRef } = React; const _ = require('lodash'); const Nav = require('naturalcrit/nav/nav.jsx'); const yaml = require('js-yaml'); -const { useRef } = React; const BREWKEY = 'homebrewery-new'; const STYLEKEY = 'homebrewery-new-style'; const METAKEY = 'homebrewery-new-meta'; -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 NewBrew = () => { + const inputRef = useRef(null); + + const [brew, setBrew] = useState({ + text: '', + style: '' + }); + + 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 handleFileChange = (e) => { + const file = e.target.files[0]; + if (file) { + const reader = new FileReader(); + reader.onload = (e) => { + const fileContent = e.target.result; + const newBrew = { + text: fileContent, + style: '' + }; + if(fileContent.startsWith('```metadata')) { + const updatedBrew = splitTextStyleAndMetadata(newBrew); + console.log(updatedBrew); + setBrew(updatedBrew); + 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 { + alert('This file is invalid, please, enter a valid file'); + } + }; + reader.readAsText(file); + } + }; + + return ( + + + new + + + new + + + { inputRef.current.click(); }}> + + New From Local File + + + ); }; - -const handleFileChange = (e) => { - const file = e.target.files[0]; - if (file) { - const reader = new FileReader(); - reader.onload = (e) => { - const fileContent = e.target.result; - - const brew = { - text :fileContent, - style : '' - } - splitTextStyleAndMetadata(brew); - console.log(brew); - localStorage.setItem(BREWKEY, brew.text); - localStorage.setItem(STYLEKEY, brew.style); - localStorage.setItem(METAKEY, JSON.stringify({ - 'title': brew.title, - 'description': brew.description, - 'tags': brew.tags, - 'systems': brew.systems, - 'renderer': brew.renderer, - 'theme': brew.theme, - 'lang': brew.lang - })); - - //window.location.href = '/new'; - }; - reader.readAsText(file); - } -}; - - -module.exports = function(props){ - const inputRef = useRef(null); - - return - - new - - - new - - - { inputRef.current.click(); }}> - - New From Local File - - - ; - -}; - -/* - - new cloned - -*/ \ No newline at end of file +module.exports = NewBrew;