diff --git a/src/components/Auth/AuthContext.js b/src/components/Auth/AuthContext.js index 1de623f..08a1dff 100644 --- a/src/components/Auth/AuthContext.js +++ b/src/components/Auth/AuthContext.js @@ -5,6 +5,7 @@ import { message, Modal, notification, Progress, Button, Space } from 'antd' import PropTypes from 'prop-types' import { ExclamationCircleOutlined } from '@ant-design/icons' import InfoCircleIcon from '../Icons/InfoCircleIcon' +import config from '../../config' const AuthContext = createContext() @@ -25,14 +26,14 @@ const AuthProvider = ({ children }) => { setToken(null) setExpiresAt(null) setUserProfile(null) - window.location.href = `http://localhost:8080/auth/logout?redirect_uri=${encodeURIComponent(redirectUri)}` + window.location.href = `${config.backendUrl}/auth/logout?redirect_uri=${encodeURIComponent(redirectUri)}` }, []) // Login using query parameters const loginWithSSO = useCallback( (redirectUri = window.location.pathname + window.location.search) => { messageApi.info('Logging in with tombutcher.work') - window.location.href = `http://localhost:8080/auth/login?redirect_uri=${encodeURIComponent(redirectUri)}` + window.location.href = `${config.backendUrl}/auth/login?redirect_uri=${encodeURIComponent(redirectUri)}` }, [messageApi] ) @@ -41,7 +42,7 @@ const AuthProvider = ({ children }) => { setLoading(true) try { // Make a call to your backend to check auth status - const response = await axios.get('http://localhost:8080/auth/user', { + const response = await axios.get(`${config.backendUrl}/auth/user`, { withCredentials: true // Important for including cookies }) @@ -67,7 +68,7 @@ const AuthProvider = ({ children }) => { const refreshToken = useCallback(async () => { try { - const response = await axios.get('http://localhost:8080/auth/refresh', { + const response = await axios.get(`${config.backendUrl}/auth/refresh`, { withCredentials: true }) if (response.status === 200 && response.data) { diff --git a/src/components/Dashboard/Inventory/FilamentStocks.jsx b/src/components/Dashboard/Inventory/FilamentStocks.jsx index b464a19..459f2ae 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks.jsx @@ -28,6 +28,8 @@ import ReloadIcon from '../../Icons/ReloadIcon' import FilamentStockState from '../common/FilamentStockState' import TimeDisplay from '../common/TimeDisplay' +import config from '../../../config' + const { Text } = Typography const useStyle = createStyles(({ css, token }) => { @@ -65,7 +67,7 @@ const FilamentStocks = () => { const fetchFilamentStocksData = useCallback(async () => { try { - const response = await axios.get('http://localhost:8080/filamentstocks', { + const response = await axios.get(`${config.backendUrl}/filamentstocks`, { headers: { Accept: 'application/json' }, diff --git a/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx b/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx index ff040f1..869e2c1 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx @@ -22,6 +22,8 @@ import TimeDisplay from '../../common/TimeDisplay' import FilamentIcon from '../../../Icons/FilamentIcon' import ReloadIcon from '../../../Icons/ReloadIcon' +import config from '../../../../config' + const { Title } = Typography const FilamentStockInfo = () => { @@ -87,7 +89,7 @@ const FilamentStockInfo = () => { try { setFetchLoading(true) const response = await axios.get( - `http://localhost:8080/filamentStocks/${filamentStockId}`, + `${config.backendUrl}/filamentStocks/${filamentStockId}`, { headers: { Accept: 'application/json' diff --git a/src/components/Dashboard/Inventory/FilamentStocks/NewFilamentStock.jsx b/src/components/Dashboard/Inventory/FilamentStocks/NewFilamentStock.jsx index f61db24..324c44c 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks/NewFilamentStock.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks/NewFilamentStock.jsx @@ -15,6 +15,8 @@ import { } from 'antd' import FilamentSelect from '../../common/FilamentSelect' +import config from '../../../../config' + const { Title } = Typography const initialNewFilamentStockForm = { @@ -89,7 +91,7 @@ const NewFilamentStock = ({ onOk, reset }) => { setNewFilamentStockLoading(true) try { await axios.post( - `http://localhost:8080/filamentstocks`, + `${config.backendUrl}/filamentstocks`, newFilamentStockFormValues, { withCredentials: true // Important for including cookies diff --git a/src/components/Dashboard/Inventory/StockAudits.jsx b/src/components/Dashboard/Inventory/StockAudits.jsx index 04f8d3b..3157aee 100644 --- a/src/components/Dashboard/Inventory/StockAudits.jsx +++ b/src/components/Dashboard/Inventory/StockAudits.jsx @@ -16,6 +16,8 @@ import PlusIcon from '../../Icons/PlusIcon' import ReloadIcon from '../../Icons/ReloadIcon' import TimeDisplay from '../common/TimeDisplay' +import config from '../../../config' + const { Text } = Typography const useStyle = createStyles(({ css, token }) => { @@ -50,7 +52,7 @@ const StockAudits = () => { const fetchStockAuditsData = useCallback(async () => { try { - const response = await axios.get('http://localhost:8080/stockaudits', { + const response = await axios.get(`${config.backendUrl}/stockaudits`, { headers: { Accept: 'application/json' }, diff --git a/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx b/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx index b671e6f..c214c77 100644 --- a/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx +++ b/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx @@ -23,6 +23,8 @@ import { AuthContext } from '../../../Auth/AuthContext' import IdText from '../../common/IdText' import TimeDisplay from '../../common/TimeDisplay' +import config from '../../../../config' + const { Text, Title } = Typography const StockAuditInfo = () => { @@ -46,7 +48,7 @@ const StockAuditInfo = () => { try { const response = await axios.get( - `http://localhost:8080/stockaudits/${stockAuditId}`, + `${config.backendUrl}/stockaudits/${stockAuditId}`, { headers: { Accept: 'application/json' diff --git a/src/components/Dashboard/Management/Filaments.jsx b/src/components/Dashboard/Management/Filaments.jsx index 9efe5d6..ada2ba9 100644 --- a/src/components/Dashboard/Management/Filaments.jsx +++ b/src/components/Dashboard/Management/Filaments.jsx @@ -33,6 +33,8 @@ import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' import TimeDisplay from '../common/TimeDisplay' +import config from '../../../config' + const { Text } = Typography const useStyle = createStyles(({ css, token }) => { @@ -73,7 +75,7 @@ const Filaments = () => { const fetchFilamentsData = useCallback( async (pageNum = 1, append = false) => { try { - const response = await axios.get('http://localhost:8080/filaments', { + const response = await axios.get(`${config.backendUrl}/filaments`, { params: { page: pageNum, limit: 25, diff --git a/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx b/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx index 08953cf..7910c72 100644 --- a/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx +++ b/src/components/Dashboard/Management/Filaments/FilamentInfo.jsx @@ -32,6 +32,8 @@ import TimeDisplay from '../../common/TimeDisplay.jsx' import VendorSelect from '../../common/VendorSelect' import useCollapseState from '../../hooks/useCollapseState' +import config from '../../../../config.js' + const { Title, Link } = Typography const FilamentInfo = () => { @@ -81,7 +83,7 @@ const FilamentInfo = () => { try { setFetchLoading(true) const response = await axios.get( - `http://localhost:8080/filaments/${filamentId}`, + `${config.backendUrl}/filaments/${filamentId}`, { headers: { Accept: 'application/json' @@ -129,7 +131,7 @@ const FilamentInfo = () => { setLoading(true) await axios.put( - `http://localhost:8080/filaments/${filamentId}`, + `${config.backendUrl}/filaments/${filamentId}`, { name: values.name, vendor: values.vendor, @@ -170,7 +172,7 @@ const FilamentInfo = () => { const handleDelete = async () => { try { setLoading(true) - await axios.delete(`http://localhost:8080/filaments/${filamentId}`, { + await axios.delete(`${config.backendUrl}/filaments/${filamentId}`, { withCredentials: true }) messageApi.success('Filament deleted successfully') diff --git a/src/components/Dashboard/Management/Filaments/NewFilament.jsx b/src/components/Dashboard/Management/Filaments/NewFilament.jsx index 63f3e3b..f9fcad7 100644 --- a/src/components/Dashboard/Management/Filaments/NewFilament.jsx +++ b/src/components/Dashboard/Management/Filaments/NewFilament.jsx @@ -20,6 +20,8 @@ import { import { UploadOutlined, LinkOutlined } from '@ant-design/icons' import VendorSelect from '../../common/VendorSelect' +import config from '../../../../config' + const { Title } = Typography const initialNewFilamentForm = { @@ -129,7 +131,7 @@ const NewFilament = ({ onOk, reset }) => { setNewFilamentLoading(true) try { await axios.post( - `http://localhost:8080/filaments`, + `${config.backendUrl}/filaments`, newFilamentFormValues, { withCredentials: true // Important for including cookies diff --git a/src/components/Dashboard/Management/Materials.jsx b/src/components/Dashboard/Management/Materials.jsx index 14d5f0b..b46ab4d 100644 --- a/src/components/Dashboard/Management/Materials.jsx +++ b/src/components/Dashboard/Management/Materials.jsx @@ -26,6 +26,8 @@ import PlusIcon from '../../Icons/PlusIcon' import ReloadIcon from '../../Icons/ReloadIcon' import TimeDisplay from '../common/TimeDisplay' +import config from '../../../config' + const useStyle = createStyles(({ css, token }) => { const { antCls } = token return { @@ -61,7 +63,7 @@ const Materials = () => { const fetchMaterialsData = useCallback( async (pageNum = 1, append = false) => { try { - const response = await axios.get('http://localhost:8080/materials', { + const response = await axios.get(`${config.backendUrl}/materials`, { params: { page: pageNum, limit: 25 diff --git a/src/components/Dashboard/Management/Materials/NewMaterial.jsx b/src/components/Dashboard/Management/Materials/NewMaterial.jsx index 1d9c773..8762255 100644 --- a/src/components/Dashboard/Management/Materials/NewMaterial.jsx +++ b/src/components/Dashboard/Management/Materials/NewMaterial.jsx @@ -16,6 +16,8 @@ import { import { UploadOutlined } from '@ant-design/icons' import VendorSelect from '../../common/VendorSelect' +import config from '../../../../config' + const initialNewMaterialForm = { name: '', vendor: { id: null, name: '' }, @@ -93,7 +95,7 @@ const NewMaterial = ({ onSuccess }) => { setNewMaterialLoading(true) try { await axios.post( - `http://localhost:8080/materials`, + `${config.backendUrl}/materials`, newMaterialFormValues, { withCredentials: true diff --git a/src/components/Dashboard/Management/Parts.jsx b/src/components/Dashboard/Management/Parts.jsx index db46e65..71fe49d 100644 --- a/src/components/Dashboard/Management/Parts.jsx +++ b/src/components/Dashboard/Management/Parts.jsx @@ -33,6 +33,8 @@ import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' import TimeDisplay from '../common/TimeDisplay' +import config from '../../../config' + const { Text } = Typography const useStyle = createStyles(({ css, token }) => { @@ -206,7 +208,7 @@ const Parts = () => { const fetchPartsData = useCallback( async (pageNum = 1, append = false) => { try { - const response = await axios.get('http://localhost:8080/parts', { + const response = await axios.get(`${config.backendUrl}/parts`, { params: { page: pageNum, limit: 25, diff --git a/src/components/Dashboard/Management/Parts/PartInfo.jsx b/src/components/Dashboard/Management/Parts/PartInfo.jsx index 165d1dc..d8ac86a 100644 --- a/src/components/Dashboard/Management/Parts/PartInfo.jsx +++ b/src/components/Dashboard/Management/Parts/PartInfo.jsx @@ -28,6 +28,8 @@ import CheckIcon from '../../../Icons/CheckIcon.jsx' import useCollapseState from '../../hooks/useCollapseState' import TimeDisplay from '../../common/TimeDisplay.jsx' +import config from '../../../../config.js' + const { Title } = Typography const PartInfo = () => { @@ -93,15 +95,12 @@ const PartInfo = () => { const fetchPartDetails = async () => { try { setFetchLoading(true) - const response = await axios.get( - `http://localhost:8080/parts/${partId}`, - { - headers: { - Accept: 'application/json' - }, - withCredentials: true - } - ) + const response = await axios.get(`${config.backendUrl}/parts/${partId}`, { + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) setPartData(response.data) setError(null) } catch (err) { @@ -125,7 +124,7 @@ const PartInfo = () => { objectUrlRef.current = null } const response = await axios.get( - `http://localhost:8080/parts/${partId}/content`, + `${config.backendUrl}/parts/${partId}/content`, { withCredentials: true, responseType: 'blob' @@ -190,7 +189,7 @@ const PartInfo = () => { const values = await partForm.validateFields() setLoading(true) - await axios.put(`http://localhost:8080/parts/${partId}`, values, { + await axios.put(`${config.backendUrl}/parts/${partId}`, values, { headers: { 'Content-Type': 'application/json' }, diff --git a/src/components/Dashboard/Management/Products.jsx b/src/components/Dashboard/Management/Products.jsx index 52f586f..f73d2bb 100644 --- a/src/components/Dashboard/Management/Products.jsx +++ b/src/components/Dashboard/Management/Products.jsx @@ -34,6 +34,8 @@ import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' +import config from '../../../config' + const useStyle = createStyles(({ css, token }) => { const { antCls } = token return { @@ -73,7 +75,7 @@ const Products = () => { const fetchProductsData = useCallback( async (pageNum = 1, append = false) => { try { - const response = await axios.get('http://localhost:8080/products', { + const response = await axios.get(`${config.backendUrl}/products`, { params: { page: pageNum, limit: 25, diff --git a/src/components/Dashboard/Management/Products/NewProduct.jsx b/src/components/Dashboard/Management/Products/NewProduct.jsx index 079460f..71d7019 100644 --- a/src/components/Dashboard/Management/Products/NewProduct.jsx +++ b/src/components/Dashboard/Management/Products/NewProduct.jsx @@ -23,6 +23,8 @@ import PartIcon from '../../../Icons/PartIcon' import { StlViewer } from 'react-stl-viewer' import VendorSelect from '../../common/VendorSelect' +import config from '../../../../config' + const { Dragger } = Upload const { Title, Text } = Typography @@ -166,7 +168,7 @@ const NewProduct = ({ onOk, reset }) => { setNewProductLoading(true) try { const result = await axios.post( - `http://localhost:8080/products`, + `${config.backendUrl}/products`, newProductFormValues, { withCredentials: true // Important for including cookies @@ -192,7 +194,7 @@ const NewProduct = ({ onOk, reset }) => { formData.append('partFile', parts[i].file) await axios.post( - `http://localhost:8080/parts/${partIds[i]}/content`, + `${config.backendUrl}/parts/${partIds[i]}/content`, formData, { headers: { diff --git a/src/components/Dashboard/Management/Products/ProductInfo.jsx b/src/components/Dashboard/Management/Products/ProductInfo.jsx index 2433805..e85e832 100644 --- a/src/components/Dashboard/Management/Products/ProductInfo.jsx +++ b/src/components/Dashboard/Management/Products/ProductInfo.jsx @@ -28,6 +28,8 @@ import XMarkIcon from '../../../Icons/XMarkIcon.jsx' import CheckIcon from '../../../Icons/CheckIcon.jsx' import TimeDisplay from '../../common/TimeDisplay.jsx' +import config from '../../../../config.js' + const { Title } = Typography const ProductInfo = () => { @@ -97,7 +99,7 @@ const ProductInfo = () => { try { setFetchLoading(true) const response = await axios.get( - `http://localhost:8080/products/${productId}`, + `${config.backendUrl}/products/${productId}`, { headers: { Accept: 'application/json' @@ -142,7 +144,7 @@ const ProductInfo = () => { const values = await productForm.validateFields() setLoading(true) - await axios.put(`http://localhost:8080/products/${productId}`, values, { + await axios.put(`${config.backendUrl}/products/${productId}`, values, { headers: { 'Content-Type': 'application/json' }, diff --git a/src/components/Dashboard/Management/Vendors.jsx b/src/components/Dashboard/Management/Vendors.jsx index f8461bd..9663cb3 100644 --- a/src/components/Dashboard/Management/Vendors.jsx +++ b/src/components/Dashboard/Management/Vendors.jsx @@ -30,6 +30,8 @@ import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' import InfoCircleIcon from '../../Icons/InfoCircleIcon' +import config from '../../../config' + const { Link } = Typography const useStyle = createStyles(({ css, token }) => { @@ -68,7 +70,7 @@ const Vendors = () => { const fetchVendorsData = useCallback( async (pageNum = 1, append = false) => { try { - const response = await axios.get('http://localhost:8080/vendors', { + const response = await axios.get(`${config.backendUrl}/vendors`, { params: { page: pageNum, limit: 25, diff --git a/src/components/Dashboard/Management/Vendors/NewVendor.jsx b/src/components/Dashboard/Management/Vendors/NewVendor.jsx index 8512c3b..9cecadc 100644 --- a/src/components/Dashboard/Management/Vendors/NewVendor.jsx +++ b/src/components/Dashboard/Management/Vendors/NewVendor.jsx @@ -16,6 +16,8 @@ import { import CountrySelect from '../../common/CountrySelect' import CountryDisplay from '../../common/CountryDisplay' +import config from '../../../../config' + const { Title } = Typography const initialNewVendorForm = { @@ -93,7 +95,7 @@ const NewVendor = ({ onOk, reset }) => { const handleNewVendor = async () => { setNewVendorLoading(true) try { - await axios.post('http://localhost:8080/vendors', newVendorFormValues, { + await axios.post(`${config.backendUrl}/vendors`, newVendorFormValues, { withCredentials: true }) onOk() diff --git a/src/components/Dashboard/Management/Vendors/VendorInfo.jsx b/src/components/Dashboard/Management/Vendors/VendorInfo.jsx index f053073..483d780 100644 --- a/src/components/Dashboard/Management/Vendors/VendorInfo.jsx +++ b/src/components/Dashboard/Management/Vendors/VendorInfo.jsx @@ -28,6 +28,8 @@ import XMarkIcon from '../../../Icons/XMarkIcon.jsx' import CheckIcon from '../../../Icons/CheckIcon.jsx' import useCollapseState from '../../hooks/useCollapseState' +import config from '../../../../config.js' + const { Title, Link } = Typography const VendorInfo = () => { @@ -67,7 +69,7 @@ const VendorInfo = () => { try { setFetchLoading(true) const response = await axios.get( - `http://localhost:8080/vendors/${vendorId}`, + `${config.backendUrl}/vendors/${vendorId}`, { headers: { Accept: 'application/json' @@ -107,7 +109,7 @@ const VendorInfo = () => { const values = await form.validateFields() setLoading(true) - await axios.put(`http://localhost:8080/vendors/${vendorId}`, values, { + await axios.put(`${config.backendUrl}/vendors/${vendorId}`, values, { headers: { 'Content-Type': 'application/json' }, diff --git a/src/components/Dashboard/Production/GCodeFiles.jsx b/src/components/Dashboard/Production/GCodeFiles.jsx index 8c39cea..c48b190 100644 --- a/src/components/Dashboard/Production/GCodeFiles.jsx +++ b/src/components/Dashboard/Production/GCodeFiles.jsx @@ -34,6 +34,8 @@ import XMarkIcon from '../../Icons/XMarkIcon' import CheckIcon from '../../Icons/CheckIcon' import TimeDisplay from '../common/TimeDisplay' +import config from '../../../config' + const { Text } = Typography const useStyle = createStyles(({ css, token }) => { @@ -259,7 +261,7 @@ const GCodeFiles = () => { order: sorter.order } - const response = await axios.get('http://localhost:8080/gcodefiles', { + const response = await axios.get(`${config.backendUrl}/gcodefiles`, { params, headers: { Accept: 'application/json' @@ -369,7 +371,7 @@ const GCodeFiles = () => { } try { const response = await axios.get( - `http://localhost:8080/gcodefiles/${id}/content`, + `${config.backendUrl}/gcodefiles/${id}/content`, { headers: { Accept: 'application/json' diff --git a/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx b/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx index ca4a718..55de1ca 100644 --- a/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx +++ b/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx @@ -27,6 +27,8 @@ import EditIcon from '../../../Icons/EditIcon.jsx' import XMarkIcon from '../../../Icons/XMarkIcon.jsx' import CheckIcon from '../../../Icons/CheckIcon.jsx' +import config from '../../../../config.js' + const { Title } = Typography const GCodeFileInfo = () => { @@ -66,7 +68,7 @@ const GCodeFileInfo = () => { try { setFetchLoading(true) const response = await axios.get( - `http://localhost:8080/gcodefiles/${gcodeFileId}`, + `${config.backendUrl}/gcodefiles/${gcodeFileId}`, { headers: { Accept: 'application/json' @@ -103,7 +105,7 @@ const GCodeFileInfo = () => { setLoading(true) await axios.put( - `http://localhost:8080/gcodefiles/${gcodeFileId}`, + `${config.backendUrl}/gcodefiles/${gcodeFileId}`, values, { headers: { diff --git a/src/components/Dashboard/Production/GCodeFiles/NewGCodeFile.jsx b/src/components/Dashboard/Production/GCodeFiles/NewGCodeFile.jsx index 59ee28c..2f07c8e 100644 --- a/src/components/Dashboard/Production/GCodeFiles/NewGCodeFile.jsx +++ b/src/components/Dashboard/Production/GCodeFiles/NewGCodeFile.jsx @@ -29,6 +29,8 @@ import GCodeFileIcon from '../../../Icons/GCodeFileIcon' import FilamentSelect from '../../common/FilamentSelect' +import config from '../../../../config.js' + const { Dragger } = Upload const { Title } = Typography @@ -79,7 +81,7 @@ const NewGCodeFile = ({ onOk, reset }) => { try { setNextLoading(true) const response = await axios.get( - `http://localhost:8080/filaments/${newGCodeFileFormValues.filament}`, + `${config.backendUrl}/filaments/${newGCodeFileFormValues.filament}`, { headers: { Accept: 'application/json' @@ -230,7 +232,7 @@ const NewGCodeFile = ({ onOk, reset }) => { formData.append('gcodeFile', gcodeFile) try { await axios.post( - `http://localhost:8080/gcodefiles/${id}/content`, + `${config.backendUrl}/gcodefiles/${id}/content`, formData, { headers: { @@ -253,7 +255,7 @@ const NewGCodeFile = ({ onOk, reset }) => { setNewGCodeFileLoading(true) try { const request = await axios.post( - `http://localhost:8080/gcodefiles`, + `${config.backendUrl}/gcodefiles`, newGCodeFileFormValues, { headers: { @@ -279,7 +281,7 @@ const NewGCodeFile = ({ onOk, reset }) => { // Call the API to extract and parse the config block const request = await axios.post( - `http://localhost:8080/gcodefiles/content`, + `${config.backendUrl}/gcodefiles/content`, formData, { withCredentials: true // Important for including cookies diff --git a/src/components/Dashboard/Production/PrintJobs.jsx b/src/components/Dashboard/Production/PrintJobs.jsx index 52ac37e..8ed204b 100644 --- a/src/components/Dashboard/Production/PrintJobs.jsx +++ b/src/components/Dashboard/Production/PrintJobs.jsx @@ -44,6 +44,8 @@ import EditIcon from '../../Icons/EditIcon.jsx' import XMarkIcon from '../../Icons/XMarkIcon.jsx' import CheckIcon from '../../Icons/CheckIcon.jsx' +import config from '../../../config.js' + const { Text } = Typography const useStyle = createStyles(({ css, token }) => { @@ -331,7 +333,7 @@ const PrintJobs = () => { order: sorter.order } - const response = await axios.get('http://localhost:8080/printjobs', { + const response = await axios.get(`${config.backendUrl}/printjobs`, { params, headers: { Accept: 'application/json' diff --git a/src/components/Dashboard/Production/PrintJobs/NewPrintJob.jsx b/src/components/Dashboard/Production/PrintJobs/NewPrintJob.jsx index 4dc29f0..406a213 100644 --- a/src/components/Dashboard/Production/PrintJobs/NewPrintJob.jsx +++ b/src/components/Dashboard/Production/PrintJobs/NewPrintJob.jsx @@ -16,6 +16,8 @@ import PropTypes from 'prop-types' import GCodeFileSelect from '../../common/GCodeFileSelect' import PrinterSelect from '../../common/PrinterSelect' +import config from '../../../../config' + const { Title } = Typography const initialNewPrintJobForm = { @@ -67,7 +69,7 @@ const NewPrintJob = ({ onOk, reset }) => { setNewPrintJobLoading(true) try { await axios.post( - `http://localhost:8080/printjobs`, + `${config.backendUrl}/printjobs`, newPrintJobFormValues, { headers: { diff --git a/src/components/Dashboard/Production/PrintJobs/PrintJobInfo.jsx b/src/components/Dashboard/Production/PrintJobs/PrintJobInfo.jsx index ac098b2..8505474 100644 --- a/src/components/Dashboard/Production/PrintJobs/PrintJobInfo.jsx +++ b/src/components/Dashboard/Production/PrintJobs/PrintJobInfo.jsx @@ -20,6 +20,7 @@ import { SocketContext } from '../../context/SocketContext' import GCodeFileIcon from '../../../Icons/GCodeFileIcon' import ReloadIcon from '../../../Icons/ReloadIcon' import useCollapseState from '../../hooks/useCollapseState' +import config from '../../../../config' const { Title } = Typography @@ -72,7 +73,7 @@ const PrintJobInfo = () => { try { setLoading(true) const response = await axios.get( - `http://localhost:8080/printjobs/${printJobId}`, + `${config.backendUrl}/printjobs/${printJobId}`, { headers: { Accept: 'application/json' diff --git a/src/components/Dashboard/Production/Printers.jsx b/src/components/Dashboard/Production/Printers.jsx index fe2a6c3..70edfd5 100644 --- a/src/components/Dashboard/Production/Printers.jsx +++ b/src/components/Dashboard/Production/Printers.jsx @@ -32,6 +32,8 @@ import ReloadIcon from '../../Icons/ReloadIcon' import XMarkIcon from '../../Icons/XMarkIcon' import CheckIcon from '../../Icons/CheckIcon' +import config from '../../../config' + const useStyle = createStyles(({ css, token }) => { const { antCls } = token return { @@ -236,7 +238,7 @@ const Printers = () => { order: sorter.order } - const response = await axios.get('http://localhost:8080/printers', { + const response = await axios.get(`${config.backendUrl}/printers`, { params, headers: { Accept: 'application/json' diff --git a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx index 9cd2713..f1f1e46 100644 --- a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx +++ b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx @@ -45,6 +45,8 @@ import LoadFilamentStock from '../../Inventory/FilamentStocks/LoadFilamentStock' import UnloadFilamentStock from '../../Inventory/FilamentStocks/UnloadFilamentStock' import FilamentStockState from '../../common/FilamentStockState' +import config from '../../../../config' + const { Text } = Typography // Helper function to parse query parameters @@ -96,7 +98,7 @@ const ControlPrinter = () => { if (printerId) { try { const response = await axios.get( - `http://localhost:8080/printers/${printerId}`, + `${config.backendUrl}/printers/${printerId}`, { headers: { Accept: 'application/json' @@ -610,25 +612,6 @@ const ControlPrinter = () => { )} - - {(() => { - if ( - printerData.currentJob?.gcodeFile?.gcodeFileInfo - .estimatedPrintingTimeNormalMode - ) { - return ( - - { - printerData.currentJob.gcodeFile.gcodeFileInfo - .estimatedPrintingTimeNormalMode - } - - ) - } - return 'n/a' - })()} - - {(() => { if ( @@ -648,6 +631,25 @@ const ControlPrinter = () => { } })()} + + + {(() => { + if ( + printerData.currentJob?.gcodeFile?.gcodeFileInfo + .estimatedPrintingTimeNormalMode + ) { + return ( + + { + printerData.currentJob.gcodeFile.gcodeFileInfo + .estimatedPrintingTimeNormalMode + } + + ) + } + return 'n/a' + })()} + {componentVisibility.subjobs && ( diff --git a/src/components/Dashboard/Production/Printers/NewPrinter.jsx b/src/components/Dashboard/Production/Printers/NewPrinter.jsx index 3e6e6dc..e777570 100644 --- a/src/components/Dashboard/Production/Printers/NewPrinter.jsx +++ b/src/components/Dashboard/Production/Printers/NewPrinter.jsx @@ -24,6 +24,8 @@ import PropTypes from 'prop-types' import { SocketContext } from '../../context/SocketContext' import EditIcon from '../../../Icons/EditIcon.jsx' +import config from '../../../../config.js' + const { Title } = Typography const initialNewPrinterForm = { @@ -154,7 +156,7 @@ const NewPrinter = ({ onOk, reset }) => { setNewPrinterLoading(true) try { await axios.post( - 'http://localhost:8080/printers', + `${config.backendUrl}/printers`, { ...newPrinterFormValues }, diff --git a/src/components/Dashboard/Production/Printers/PrinterInfo.jsx b/src/components/Dashboard/Production/Printers/PrinterInfo.jsx index 6e06ba2..89b0f2c 100644 --- a/src/components/Dashboard/Production/Printers/PrinterInfo.jsx +++ b/src/components/Dashboard/Production/Printers/PrinterInfo.jsx @@ -30,6 +30,8 @@ import XMarkIcon from '../../../Icons/XMarkIcon.jsx' import CheckIcon from '../../../Icons/CheckIcon.jsx' import useCollapseState from '../../hooks/useCollapseState' +import config from '../../../../config.js' + const { Title } = Typography const PrinterInfo = () => { @@ -73,7 +75,7 @@ const PrinterInfo = () => { try { setFetchLoading(true) const response = await axios.get( - `http://localhost:8080/printers/${printerId}`, + `${config.backendUrl}/printers/${printerId}`, { headers: { Accept: 'application/json' @@ -120,7 +122,7 @@ const PrinterInfo = () => { setLoading(true) await axios.put( - `http://localhost:8080/printers/${printerId}`, + `${config.backendUrl}/printers/${printerId}`, { name: values.name, vendor: values.vendor, diff --git a/src/components/Dashboard/Production/ProductionOverview.jsx b/src/components/Dashboard/Production/ProductionOverview.jsx index 5b1ab9a..486eb26 100644 --- a/src/components/Dashboard/Production/ProductionOverview.jsx +++ b/src/components/Dashboard/Production/ProductionOverview.jsx @@ -21,6 +21,8 @@ import XMarkIcon from '../../Icons/XMarkIcon' import useCollapseState from '../hooks/useCollapseState' import CheckIcon from '../../Icons/CheckIcon' +import config from '../../../config' + const { Title, Text } = Typography const ProductionOverview = () => { @@ -64,7 +66,7 @@ const ProductionOverview = () => { const fetchPrinterStats = async () => { try { setFetchPrinterStatsLoading(true) - const response = await axios.get(`http://localhost:8080/printers/stats`, { + const response = await axios.get(`${config.backendUrl}/printers/stats`, { headers: { Accept: 'application/json' }, @@ -85,15 +87,12 @@ const ProductionOverview = () => { const fetchPrintJobStats = async () => { try { setFetchPrinterStatsLoading(true) - const response = await axios.get( - `http://localhost:8080/printjobs/stats`, - { - headers: { - Accept: 'application/json' - }, - withCredentials: true - } - ) + const response = await axios.get(`${config.backendUrl}/printjobs/stats`, { + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) const printJobStats = response.data setStats((prev) => ({ ...prev, printJobs: printJobStats })) setError(null) diff --git a/src/components/Dashboard/common/FilamentSelect.jsx b/src/components/Dashboard/common/FilamentSelect.jsx index ac962f4..581b59a 100644 --- a/src/components/Dashboard/common/FilamentSelect.jsx +++ b/src/components/Dashboard/common/FilamentSelect.jsx @@ -4,6 +4,8 @@ import React, { useEffect, useState, useCallback } from 'react' import PropTypes from 'prop-types' import axios from 'axios' +import config from '../../../config' + const propertyOrder = ['diameter', 'type', 'vendor.name'] const FilamentSelect = ({ onChange, filter, useFilter, value }) => { @@ -15,7 +17,7 @@ const FilamentSelect = ({ onChange, filter, useFilter, value }) => { const fetchFilamentsData = async (property, filter) => { setLoading(true) try { - const response = await axios.get('http://localhost:8080/filaments', { + const response = await axios.get(`${config.backendUrl}/filaments`, { params: { ...filter, property diff --git a/src/components/Dashboard/common/FilamentStockSelect.jsx b/src/components/Dashboard/common/FilamentStockSelect.jsx index deacaa5..8790055 100644 --- a/src/components/Dashboard/common/FilamentStockSelect.jsx +++ b/src/components/Dashboard/common/FilamentStockSelect.jsx @@ -2,6 +2,7 @@ import { TreeSelect } from 'antd' import React, { useEffect, useState, useCallback } from 'react' import PropTypes from 'prop-types' import axios from 'axios' +import config from '../../../config' import FilamentStockDisplay from './FilamentStockDisplay' @@ -20,7 +21,7 @@ const FilamentStockSelect = ({ onChange, filter, useFilter, value }) => { const fetchFilamentStocksData = async (property, filter) => { setLoading(true) try { - const response = await axios.get('http://localhost:8080/filamentstocks', { + const response = await axios.get(`${config.backendUrl}/filamentstocks`, { params: { ...filter, property diff --git a/src/components/Dashboard/common/GCodeFileSelect.jsx b/src/components/Dashboard/common/GCodeFileSelect.jsx index d1ffa1e..b9aeeff 100644 --- a/src/components/Dashboard/common/GCodeFileSelect.jsx +++ b/src/components/Dashboard/common/GCodeFileSelect.jsx @@ -6,6 +6,8 @@ import axios from 'axios' import GCodeFileIcon from '../../Icons/GCodeFileIcon' import { AuthContext } from '../../Auth/AuthContext' +import config from '../../../config' + const propertyOrder = [ 'filament.diameter', 'filament.type', @@ -28,7 +30,7 @@ const GCodeFileSelect = ({ onChange, filter, useFilter }) => { } setLoading(true) try { - const response = await axios.get('http://localhost:8080/gcodefiles', { + const response = await axios.get(`${config.backendUrl}/gcodefiles`, { params: { ...filter, search, diff --git a/src/components/Dashboard/common/PartSelect.jsx b/src/components/Dashboard/common/PartSelect.jsx index 69d6d7a..077b4e3 100644 --- a/src/components/Dashboard/common/PartSelect.jsx +++ b/src/components/Dashboard/common/PartSelect.jsx @@ -16,7 +16,7 @@ const PartSelect = ({ onChange, filter, useFilter }) => { const fetchPartsData = async (property, filter) => { setLoading(true) try { - const response = await axios.get('http://localhost:8080/parts', { + const response = await axios.get(`${config.backendUrl}/parts', { params: { ...filter, property diff --git a/src/components/Dashboard/common/PartTransfer.jsx b/src/components/Dashboard/common/PartTransfer.jsx index b83c6f5..0d3f531 100644 --- a/src/components/Dashboard/common/PartTransfer.jsx +++ b/src/components/Dashboard/common/PartTransfer.jsx @@ -21,7 +21,7 @@ const PartTransfer = ({ const fetchPartsData = async (property, filter) => { setLoading(true) try { - const response = await axios.get('http://localhost:8080/parts', { + const response = await axios.get(`${config.backendUrl}/parts', { params: { ...filter, property diff --git a/src/components/Dashboard/common/PrinterJobsTree.jsx b/src/components/Dashboard/common/PrinterJobsTree.jsx index bb3ae73..48605e4 100644 --- a/src/components/Dashboard/common/PrinterJobsTree.jsx +++ b/src/components/Dashboard/common/PrinterJobsTree.jsx @@ -11,6 +11,8 @@ import JobIcon from '../../Icons/JobIcon' import SubJobIcon from '../../Icons/SubJobIcon' import ReloadIcon from '../../Icons/ReloadIcon' +import config from '../../../config' + const PrinterJobsTree = ({ subJobs: initialSubJobs }) => { const [subJobs, setSubJobs] = useState(initialSubJobs || []) const [loading, setLoading] = useState(false) @@ -93,7 +95,7 @@ const PrinterJobsTree = ({ subJobs: initialSubJobs }) => { if (!initialSubJobs) { try { setLoading(true) - const response = await axios.get('http://localhost:8080/printjobs', { + const response = await axios.get(`${config.backendUrl}/printjobs`, { headers: { Accept: 'application/json' }, withCredentials: true }) diff --git a/src/components/Dashboard/common/PrinterSelect.jsx b/src/components/Dashboard/common/PrinterSelect.jsx index 75790ce..8a7cfc3 100644 --- a/src/components/Dashboard/common/PrinterSelect.jsx +++ b/src/components/Dashboard/common/PrinterSelect.jsx @@ -5,6 +5,7 @@ import React, { useEffect, useState, useContext } from 'react' import axios from 'axios' import PrinterState from './PrinterState' import { AuthContext } from '../../Auth/AuthContext' +import config from '../../../config' const PrinterSelect = ({ onChange, disabled, checkable, value = [] }) => { const [printersTreeData, setPrintersTreeData] = useState([]) @@ -22,7 +23,7 @@ const PrinterSelect = ({ onChange, disabled, checkable, value = [] }) => { setLoading(true) try { - const response = await axios.get('http://localhost:8080/printers', { + const response = await axios.get(`${config.backendUrl}/printers`, { headers: { Accept: 'application/json' }, diff --git a/src/components/Dashboard/common/SubJobsTree.jsx b/src/components/Dashboard/common/SubJobsTree.jsx index d827f72..e20427f 100644 --- a/src/components/Dashboard/common/SubJobsTree.jsx +++ b/src/components/Dashboard/common/SubJobsTree.jsx @@ -12,6 +12,8 @@ import SubJobState from './SubJobState' import SubJobIcon from '../../Icons/SubJobIcon' import ReloadIcon from '../../Icons/ReloadIcon' +import config from '../../../config' + const SubJobsTree = ({ printJobData }) => { const [treeData, setTreeData] = useState([]) const [loading, setLoading] = useState(false) @@ -89,7 +91,7 @@ const SubJobsTree = ({ printJobData }) => { if (!printJobData) { try { setLoading(true) - const response = await axios.get('http://localhost:8080/printjobs', { + const response = await axios.get(`${config.backendUrl}/printjobs`, { headers: { Accept: 'application/json' }, withCredentials: true }) diff --git a/src/components/Dashboard/common/VendorSelect.jsx b/src/components/Dashboard/common/VendorSelect.jsx index 8183a45..a1b8f12 100644 --- a/src/components/Dashboard/common/VendorSelect.jsx +++ b/src/components/Dashboard/common/VendorSelect.jsx @@ -4,6 +4,7 @@ import PropTypes from 'prop-types' import axios from 'axios' import CountryDisplay from './CountryDisplay' import VendorIcon from '../../Icons/VendorIcon' +import config from '../../../config' const propertyOrder = ['country'] @@ -15,7 +16,7 @@ const VendorSelect = ({ onChange, filter = {}, useFilter = false, value }) => { const fetchVendorsData = async (property, filter) => { setLoading(true) try { - const response = await axios.get('http://localhost:8080/vendors', { + const response = await axios.get(`${config.backendUrl}/vendors`, { params: { ...filter, property diff --git a/src/components/Dashboard/context/SocketContext.js b/src/components/Dashboard/context/SocketContext.js index e89a7b4..db74b98 100644 --- a/src/components/Dashboard/context/SocketContext.js +++ b/src/components/Dashboard/context/SocketContext.js @@ -10,6 +10,7 @@ import io from 'socket.io-client' import { message, notification } from 'antd' import PropTypes from 'prop-types' import { AuthContext } from '../../Auth/AuthContext' +import config from '../../../config' const SocketContext = createContext() @@ -25,7 +26,7 @@ const SocketProvider = ({ children }) => { if (token) { console.log('Token is available, connecting to web socket server...') - const newSocket = io('http://localhost:8081', { + const newSocket = io(config.wsUrl, { reconnectionAttempts: 3, timeout: 3000, auth: { token: token } diff --git a/src/components/Dashboard/context/SpotlightContext.js b/src/components/Dashboard/context/SpotlightContext.js index d97b367..26a3827 100644 --- a/src/components/Dashboard/context/SpotlightContext.js +++ b/src/components/Dashboard/context/SpotlightContext.js @@ -11,6 +11,8 @@ import PrinterState from '../common/PrinterState' import JobState from '../common/JobState' import IdText from '../common/IdText' +import config from '../../../config' + const SpotlightContext = createContext() const SpotlightProvider = ({ children }) => { @@ -56,7 +58,7 @@ const SpotlightProvider = ({ children }) => { setLoading(true) setListData([]) const response = await axios.get( - `http://localhost:8080/spotlight/${encodeURIComponent(searchQuery.trim())}`, + `${config.backendUrl}/spotlight/${encodeURIComponent(searchQuery.trim())}`, { headers: { Accept: 'application/json' diff --git a/src/config.js b/src/config.js new file mode 100644 index 0000000..7a4eac3 --- /dev/null +++ b/src/config.js @@ -0,0 +1,16 @@ +const config = { + development: { + backendUrl: 'http://localhost:8080', + wsUrl: 'ws://localhost:8081' + }, + production: { + backendUrl: 'https://api.farmcontrol.com', // Replace with your production backend URL + wsUrl: 'wss://api.farmcontrol.com' // Replace with your production WebSocket URL + } +} + +// Get the current environment, defaulting to development +const env = process.env.NODE_ENV || 'development' + +// Export the configuration for the current environment +export default config[env]