From 1cc5a2be9e7c3408b8b59aabd6d6e9afeb574c84 Mon Sep 17 00:00:00 2001 From: Pinapelz Date: Tue, 27 Aug 2024 01:12:32 -0700 Subject: move ffxiv post components to submodule - declutter blog code --- .gitmodules | 3 + src/components/FFXIV-MDX-React-Components | 1 + src/components/FFXIVItemPrice.tsx | 119 ------------------------------ src/components/FFXIVWorldSelector.tsx | 62 ---------------- src/content/blog/ffxiv-gil-making.mdx | 6 +- src/styles/ffxiv-gil-making.css | 18 ----- src/styles/ffxiv-selector.css | 72 ------------------ 7 files changed, 7 insertions(+), 274 deletions(-) create mode 100644 .gitmodules create mode 160000 src/components/FFXIV-MDX-React-Components delete mode 100644 src/components/FFXIVItemPrice.tsx delete mode 100644 src/components/FFXIVWorldSelector.tsx delete mode 100644 src/styles/ffxiv-gil-making.css delete mode 100644 src/styles/ffxiv-selector.css diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..284fc45 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/components/FFXIV-MDX-React-Components"] + path = src/components/FFXIV-MDX-React-Components + url = https://github.com/pinapelz/FFXIV-MDX-React-Components diff --git a/src/components/FFXIV-MDX-React-Components b/src/components/FFXIV-MDX-React-Components new file mode 160000 index 0000000..53c7ce9 --- /dev/null +++ b/src/components/FFXIV-MDX-React-Components @@ -0,0 +1 @@ +Subproject commit 53c7ce959b5c72002c5444b7d6e5b458331a4275 diff --git a/src/components/FFXIVItemPrice.tsx b/src/components/FFXIVItemPrice.tsx deleted file mode 100644 index d65b3ca..0000000 --- a/src/components/FFXIVItemPrice.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import React, { useState, useEffect } from 'react'; - -interface FFXIVItemPriceProps { - itemId: number; - itemName: string; - itemImageUrl: string; -} - -const FFXIVItemPrice: React.FC = ({ itemId = 5530, itemName="Coke", itemImageUrl="https://xivapi.com/i/021000/021462_hr1.png"}) => { - const [selectedWorld, setSelectedWorld] = useState(null); - const [dailySaleVelocity, setDailySaleVelocity] = useState(null); - const [averageSalePrice, setAverageSalePrice] = useState(null); - const [inputQuantity, setInputQuantity] = useState(0); - const [potentialGil, setPotentialGil] = useState(0); - const [dataSource, setDataSource] = useState('world'); - - const fetchData = (attempt: number = 1) => { - fetch(`https://universalis.app/api/v2/aggregated/${selectedWorld}/${itemId}`) - .then(response => response.json()) - .then(data => { - let result = data.results[0]; - try { - setDailySaleVelocity(Math.round(result.nq.dailySaleVelocity.world.quantity)); - setAverageSalePrice(Math.round(result.nq.averageSalePrice.world.price)); - setDataSource('world'); - } catch (error) { - try { - setDailySaleVelocity(Math.round(result.nq.dailySaleVelocity.dc.quantity)); - setAverageSalePrice(Math.round(result.nq.averageSalePrice.dc.price)); - setDataSource('dc'); - } catch (error) { - try { - setDailySaleVelocity(Math.round(result.nq.dailySaleVelocity.region.quantity)); - setAverageSalePrice(Math.round(result.nq.averageSalePrice.region.price)); - setDataSource('region'); - } catch (error) { - console.error('Error fetching data:', error); - if (attempt < 3) { - setTimeout(() => fetchData(attempt + 1), 5000); - } - } - } - } - }) - .catch(error => { - console.error(`Error fetching data (attempt ${attempt}):`, error); - if (attempt < 3) { - setTimeout(() => fetchData(attempt + 1), 5000); - } - }); - }; - - useEffect(() => { - const savedWorld = localStorage.getItem('selectedWorld'); - if (savedWorld) { - setSelectedWorld(savedWorld); - } else { - setSelectedWorld('Midgardsormr'); - } - - fetchData(); - }, [itemId, selectedWorld]); - - const handleInputChange = (e: React.ChangeEvent) => { - const quantity = parseInt(e.target.value, 10); - setInputQuantity(quantity); - setPotentialGil(quantity * (averageSalePrice || 0)); - }; - - const formatNumber = (number: number | null) => { - return number !== null ? new Intl.NumberFormat().format(number) : 'N/A'; - }; - - return ( -
- - - - - - - - - - - - - - - - - - - - -
Average Price/Item:{formatNumber(averageSalePrice)} gil
Daily Sale Velocity:{formatNumber(dailySaleVelocity)} items
Enter Quantity: - -
Potential Gil Earnings:{formatNumber(potentialGil)} gil
- -
- ); -}; - -export default FFXIVItemPrice; \ No newline at end of file diff --git a/src/components/FFXIVWorldSelector.tsx b/src/components/FFXIVWorldSelector.tsx deleted file mode 100644 index 63eff07..0000000 --- a/src/components/FFXIVWorldSelector.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import '../styles/ffxiv-selector.css'; -interface World { - id: number; - name: string; -} - -interface FFXIVWorldSelectorProps { - message: string; -} - -const FFXIVWorldSelector: React.FC = ({ message = "Select a World" }) => { - const [worlds, setWorlds] = useState([]); - const [selectedWorld, setSelectedWorld] = useState(null); - - useEffect(() => { - const fetchWorlds = async () => { - try { - const response = await fetch('https://universalis.app/api/v2/worlds'); - const data = await response.json(); - setWorlds(data); - } catch (error) { - console.error('Error fetching worlds:', error); - } - }; - - fetchWorlds(); - - // Load selected world from localStorage - const savedWorld = localStorage.getItem('selectedWorld'); - if (savedWorld) { - setSelectedWorld(savedWorld); - } - }, []); - - const handleWorldChange = (event: React.ChangeEvent) => { - const selectedWorld = event.target.value; - setSelectedWorld(selectedWorld); - localStorage.setItem('selectedWorld', selectedWorld); // Save to localStorage - }; - - const handleApplyClick = () => { - window.location.reload(); // Refresh the page - }; - - return ( -
- - - -
- ); -}; - -export default FFXIVWorldSelector; \ No newline at end of file diff --git a/src/content/blog/ffxiv-gil-making.mdx b/src/content/blog/ffxiv-gil-making.mdx index 39dbe68..fcbdec3 100644 --- a/src/content/blog/ffxiv-gil-making.mdx +++ b/src/content/blog/ffxiv-gil-making.mdx @@ -3,9 +3,9 @@ title: "FFXIV - Actually Making Gil Without Crafting" description: "An actually OK guide at how to become a gillionaire without crafting (not just running roulettes and maps)" pubDate: "2024-08-23" --- -import '../../styles/ffxiv-gil-making.css' -import FFXIVWorldSelector from '../../components/FFXIVWorldSelector'; -import FFXIVItemPrice from '../../components/FFXIVItemPrice'; +import '../../components/FFXIV-MDX-React-Components/style.css' +import FFXIVWorldSelector from '../../components/FFXIV-MDX-React-Components/src/components/FFXIVWorldSelector'; +import FFXIVItemPrice from '../../components/FFXIV-MDX-React-Components/src/components/FFXIVItemPrice'; diff --git a/src/styles/ffxiv-gil-making.css b/src/styles/ffxiv-gil-making.css deleted file mode 100644 index 711b873..0000000 --- a/src/styles/ffxiv-gil-making.css +++ /dev/null @@ -1,18 +0,0 @@ -.eorzeadb_link { - color: goldenrod; - text-decoration: none; - position: relative; -} - -.eorzeadb_link:hover { - color: darkgoldenrod; -} - -.no-underline { - color: inherit; - text-decoration: none; -} - -.no-underline:hover { - text-decoration: underline; -} \ No newline at end of file diff --git a/src/styles/ffxiv-selector.css b/src/styles/ffxiv-selector.css deleted file mode 100644 index efad540..0000000 --- a/src/styles/ffxiv-selector.css +++ /dev/null @@ -1,72 +0,0 @@ -.ffxiv-container { - background-color: #1a1a1a; - color: #e2c08d; - padding: 10px; - border: 2px solid #e2c08d; - border-radius: 10px; - font-family: 'Arial', serif; - max-width: 500px; - margin: auto; -} - -.ffxiv-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 10px; -} - -.ffxiv-item-icon { - width: 50px; - height: 50px; -} - -.ffxiv-h1 { - font-size: 1.5em; - color: #e2c08d; - margin: 0; -} - -.ffxiv-table { - width: 100%; - border-collapse: collapse; -} - -.ffxiv-button { - background-color: #333; - color: #e2c08d; - border: 1px solid #e2c08d; - padding: 5px; - padding-left: 10px; - padding-right: 10px; - margin-left: 10px; - border-radius: 5px; - cursor: pointer; -} - -.ffxiv-table td { - padding: 5px; - border: 1px solid #e2c08d; -} - -.ffxiv-label { - font-size: 1em; -} - -.ffxiv-value { - font-size: 1em; -} - -.ffxiv-input { - background-color: #333; - color: #e2c08d; - border: 1px solid #e2c08d; - padding: 5px; - border-radius: 5px; - width: 100%; - box-sizing: border-box; -} - -.ffxiv-input::placeholder { - color: #e2c08d; -} \ No newline at end of file -- cgit v1.2.3