Skip to content

Commit

Permalink
Merge pull request #10 from Hoang-Nguyen-Huy/feat/fetch-api
Browse files Browse the repository at this point in the history
Feat/fetch api
  • Loading branch information
Hoang-Nguyen-Huy authored Oct 22, 2024
2 parents f4ec4c9 + 6857837 commit df8fb41
Show file tree
Hide file tree
Showing 8 changed files with 132 additions and 86 deletions.
9 changes: 9 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,15 @@ jobs:

- name: Build project
run: npm run build
env:
VITE_FIREBASE_API_KEY: ${{ secrets.FIREBASE_API_KEY }}
VITE_FIREBASE_AUTH_DOMAIN: ${{ secrets.FIREBASE_AUTH_DOMAIN }}
VITE_FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }}
VITE_FIREBASE_STORAGE_BUCKET: ${{ secrets.FIREBASE_STORAGE_BUCKET }}
VITE_FIREBASE_MESSAGING_SENDER_ID: ${{ secrets.FIREBASE_MESSAGING_SENDER_ID }}
VITE_FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }}
VITE_FIREBASE_MEASUREMENT_ID: ${{ secrets.FIREBASE_MEASUREMENT_ID }}
VITE_API_BASE_URL: ${{ secrets.API_BASE_URL }}

- name: Upload production-ready build files
uses: actions/upload-artifact@v4
Expand Down
31 changes: 31 additions & 0 deletions public/404.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Single Page Apps for GitHub Pages</title>
<script type="text/javascript">
var segmentCount = 1;
var l = window.location;
l.replace(
l.protocol +
"//" +
l.hostname +
(l.port ? ":" + l.port : "") +
l.pathname
.split("/")
.slice(0, 1 + segmentCount)
.join("/") +
"/?p=/" +
l.pathname
.slice(1)
.split("/")
.slice(segmentCount)
.join("/")
.replace(/&/g, "~and~") +
(l.search ? "&q=" + l.search.slice(1).replace(/&/g, "~and~") : "") +
l.hash
);
</script>
</head>
<body></body>
</html>
108 changes: 25 additions & 83 deletions public/index.html
Original file line number Diff line number Diff line change
@@ -1,89 +1,31 @@
<!DOCTYPE html>
<html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Welcome to Firebase Hosting</title>

<!-- update the version number as needed -->
<script defer src="/__/firebase/11.0.0/firebase-app-compat.js"></script>
<!-- include only the Firebase features as you need -->
<script defer src="/__/firebase/11.0.0/firebase-auth-compat.js"></script>
<script defer src="/__/firebase/11.0.0/firebase-database-compat.js"></script>
<script defer src="/__/firebase/11.0.0/firebase-firestore-compat.js"></script>
<script defer src="/__/firebase/11.0.0/firebase-functions-compat.js"></script>
<script defer src="/__/firebase/11.0.0/firebase-messaging-compat.js"></script>
<script defer src="/__/firebase/11.0.0/firebase-storage-compat.js"></script>
<script defer src="/__/firebase/11.0.0/firebase-analytics-compat.js"></script>
<script defer src="/__/firebase/11.0.0/firebase-remote-config-compat.js"></script>
<script defer src="/__/firebase/11.0.0/firebase-performance-compat.js"></script>
<!--
initialize the SDK after all desired features are loaded, set useEmulator to false
to avoid connecting the SDK to running emulators.
-->
<script defer src="/__/firebase/init.js?useEmulator=true"></script>

<style media="screen">
body { background: #ECEFF1; color: rgba(0,0,0,0.87); font-family: Roboto, Helvetica, Arial, sans-serif; margin: 0; padding: 0; }
#message { background: white; max-width: 360px; margin: 100px auto 16px; padding: 32px 24px; border-radius: 3px; }
#message h2 { color: #ffa100; font-weight: bold; font-size: 16px; margin: 0 0 8px; }
#message h1 { font-size: 22px; font-weight: 300; color: rgba(0,0,0,0.6); margin: 0 0 16px;}
#message p { line-height: 140%; margin: 16px 0 24px; font-size: 14px; }
#message a { display: block; text-align: center; background: #039be5; text-transform: uppercase; text-decoration: none; color: white; padding: 16px; border-radius: 4px; }
#message, #message a { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); }
#load { color: rgba(0,0,0,0.4); text-align: center; font-size: 13px; }
@media (max-width: 600px) {
body, #message { margin-top: 0; background: white; box-shadow: none; }
body { border-top: 16px solid #ffa100; }
}
</style>
</head>
<body>
<div id="message">
<h2>Welcome</h2>
<h1>Firebase Hosting Setup Complete</h1>
<p>You're seeing this because you've successfully setup Firebase Hosting. Now it's time to go build something extraordinary!</p>
<a target="_blank" href="https://firebase.google.com/docs/hosting/">Open Hosting Documentation</a>
</div>
<p id="load">Firebase SDK Loading&hellip;</p>

<script>
document.addEventListener('DOMContentLoaded', function() {
const loadEl = document.querySelector('#load');
// // 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
// // The Firebase SDK is initialized and available here!
//
// firebase.auth().onAuthStateChanged(user => { });
// firebase.database().ref('/path/to/ref').on('value', snapshot => { });
// firebase.firestore().doc('/foo/bar').get().then(() => { });
// firebase.functions().httpsCallable('yourFunction')().then(() => { });
// firebase.messaging().requestPermission().then(() => { });
// firebase.storage().ref('/path/to/ref').getDownloadURL().then(() => { });
// firebase.analytics(); // call to activate
// firebase.analytics().logEvent('tutorial_completed');
// firebase.performance(); // call to activate
//
// // 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥

try {
let app = firebase.app();
let features = [
'auth',
'database',
'firestore',
'functions',
'messaging',
'storage',
'analytics',
'remoteConfig',
'performance',
].filter(feature => typeof app[feature] === 'function');
loadEl.textContent = `Firebase SDK loaded with ${features.join(', ')}`;
} catch (e) {
console.error(e);
loadEl.textContent = 'Error loading the Firebase SDK, check the console.';
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Orchids Heaven</title>
<script type="text/javascript">
(function (l) {
if (l.search[1] === "/") {
var decoded = l.search
.slice(1)
.split("&")
.map(function (s) {
return s.replace(/~and~/g, "&");
})
.join("?");
window.history.replaceState(
null,
null,
l.pathname.slice(0, -1) + decoded + l.hash
);
}
});
})(window.location);
</script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>
41 changes: 41 additions & 0 deletions src/apis/OrchidsApi.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
const baseUrl = import.meta.env.VITE_API_BASE_URL;

export const getAllOrchids = async () => {
try {
const response = await fetch(`${baseUrl}`);
if (!response.ok) {
throw new Error("Network response was not ok");
}
return await response.json();
} catch (error) {
console.error("Error fetching orchids:", error);
throw error;
}
};

export const getSpecialOrchids = async () => {
try {
const response = await fetch(`${baseUrl}?isSpecial=true`);
if (!response.ok) {
throw new Error("Network response was not ok");
}
return await response.json();
} catch (error) {
console.error("Error fetching orchids:", error);
throw error;
}
};

export const getOrchidById = async (id) => {
try {
const response = await fetch(`${baseUrl}?Id=${id}`);
if (!response.ok) {
throw new Error("Network response was not ok");
}
const data = await response.json();
return data[0];
} catch (error) {
console.error("Error fetching orchids:", error);
throw error;
}
};
2 changes: 1 addition & 1 deletion src/components/MainContent/Content.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import OrchidCard from "./OrchidCard";
import { useContext, useEffect, useState } from "react";
import { ThemeContext } from "../../themes/ThemeContext";
import { Box } from "@mui/material";
import { getAllOrchids } from "../../apis/OrchidApi";
import { getAllOrchids } from "../../apis/OrchidsApi";

export default function Content() {
const { theme } = useContext(ThemeContext);
Expand Down
2 changes: 1 addition & 1 deletion src/components/OrchidDetail.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import { ThemeContext } from "../themes/ThemeContext";
import { AspectRatio } from "@mui/joy";
import { motion } from "framer-motion";
import { RelatedOrchidsSlider } from "./RelatedOrchidSlider";
import { getOrchidById } from "../apis/OrchidApi";
import { getOrchidById } from "../apis/OrchidsApi";

const MotionBox = motion(Box);

Expand Down
2 changes: 1 addition & 1 deletion src/components/SpecialOrchid.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import OrchidCard from "./MainContent/OrchidCard";
import { useContext, useEffect, useState } from "react";
import { ThemeContext } from "../themes/ThemeContext";
import { Box } from "@mui/material";
import { getSpecialOrchids } from "../apis/OrchidApi";
import { getSpecialOrchids } from "../apis/OrchidsApi";

export default function SpecialOrchid() {
const { theme } = useContext(ThemeContext);
Expand Down
23 changes: 23 additions & 0 deletions src/firebase.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
import { getAuth } from "firebase/auth";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries

// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN,
projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID,
storageBucket: import.meta.env.VITE_FIREBASE_STORAGE_BUCKET,
messagingSenderId: import.meta.env.VITE_FIREBASE_MESSAGING_SENDER_ID,
appId: import.meta.env.VITE_FIREBASE_APP_ID,
measurementId: import.meta.env.VITE_FIREBASE_MEASUREMENT_ID,
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);
export const analytics = getAnalytics(app);
export const auth = getAuth();

0 comments on commit df8fb41

Please sign in to comment.