Compare commits
2 Commits
main
...
vikas_16_d
Author | SHA1 | Date | |
---|---|---|---|
8fc9cc2d2d | |||
0ad38baa99 |
@ -21,5 +21,9 @@ RUN npm run build # This will run tsc -b and vite build
|
||||
# Expose the port the app will use
|
||||
EXPOSE 4173
|
||||
|
||||
# Copy the entrypoint script
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
# Start the app using the preview server
|
||||
CMD ["npm", "run", "preview"]
|
||||
|
7
entrypoint.sh
Normal file
7
entrypoint.sh
Normal file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Create a JavaScript file with environment variables
|
||||
echo "window._env_ = { VITE_API_URL: \"$VITE_API_URL\" };" > /app/dist/env.js
|
||||
|
||||
# Start the Vite preview server
|
||||
exec "$@"
|
22
index.html
22
index.html
@ -47,6 +47,8 @@
|
||||
<script src="/assets/vendor/js/helpers.js"></script>
|
||||
<script src="/assets/js/config.js"></script>
|
||||
|
||||
<script src="/env.js"></script>
|
||||
|
||||
<!-- Timer Picker -->
|
||||
<!-- Flatpickr CSS -->
|
||||
|
||||
@ -83,7 +85,7 @@
|
||||
<script src="/assets/vendor/libs/bootstrap-select/bootstrap-select.js"></script>
|
||||
<script src="/assets/vendor/libs/select2/select2.js"></script>
|
||||
<script src="/assets/vendor/libs/apex-charts/apexcharts.js"></script>
|
||||
<script src="/assets/vendor/libs/jquery-timepicker/jquery-timepicker.js" ></script>
|
||||
<script src="/assets/vendor/libs/jquery-timepicker/jquery-timepicker.js"></script>
|
||||
|
||||
<!-- Main JS -->
|
||||
<script src="/assets/js/main.js"></script>
|
||||
@ -95,24 +97,24 @@
|
||||
<!-- component -->
|
||||
<script src="./public/js/timppick.js"></script>
|
||||
|
||||
<script src="/assets/vendor/libs/sweetalert2/sweetalert2.js" ></script>
|
||||
<script src="/assets/vendor/libs/sweetalert2/sweetalert2.js"></script>
|
||||
|
||||
|
||||
<!-- <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.min.js"></script> -->
|
||||
|
||||
<!-- Flatpickr JS -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
|
||||
<!-- Flatpickr JS -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
|
||||
|
||||
<script>
|
||||
<script>
|
||||
// Initialize flatpickr for 12-hour time format with AM/PM
|
||||
flatpickr("#timePicker", {
|
||||
enableTime: true,
|
||||
noCalendar: true,
|
||||
time_24hr: false, // Disable 24-hour format
|
||||
dateFormat: "h:i K", // 12-hour format with AM/PM
|
||||
enableTime: true,
|
||||
noCalendar: true,
|
||||
time_24hr: false, // Disable 24-hour format
|
||||
dateFormat: "h:i K", // 12-hour format with AM/PM
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -25,8 +25,9 @@ const LoginPage = () => {
|
||||
}));
|
||||
};
|
||||
|
||||
const handleSubmit = async ( e ) =>
|
||||
{
|
||||
const handleSubmit = async (e) => {
|
||||
console.log(window._env_?.VITE_API_URL);
|
||||
console.log(import.meta.env.VITE_API_URL);
|
||||
|
||||
e.preventDefault();
|
||||
setLoading(true);
|
||||
@ -39,13 +40,12 @@ const LoginPage = () => {
|
||||
|
||||
const response = await AuthRepository.login(data);
|
||||
localStorage.setItem("jwtToken", response.data.token);
|
||||
localStorage.setItem( "refreshToken", response.data.refreshToken );
|
||||
localStorage.setItem("refreshToken", response.data.refreshToken);
|
||||
setLoading(false);
|
||||
navigate("/dashboard");
|
||||
} catch (err) {
|
||||
console.log("Unable to proceed. Please try again.");
|
||||
setLoading(false);
|
||||
|
||||
}
|
||||
};
|
||||
return (
|
||||
|
@ -2,9 +2,12 @@ import axios from "axios";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import axiosRetry from "axios-retry";
|
||||
import showToast from "../services/toastService";
|
||||
const base_Url = process.env.VITE_BASE_URL;
|
||||
|
||||
const API_URL = window._env_?.VITE_API_URL || import.meta.env.VITE_API_URL;
|
||||
|
||||
console.log("API_URL" + API_URL);
|
||||
export const axiosClient = axios.create({
|
||||
baseURL: base_Url, // Your Web API URL
|
||||
baseURL: API_URL, // Your Web API URL
|
||||
withCredentials: false, // Required if the API uses cookies
|
||||
headers: {
|
||||
"Content-Type": "application/json", // Specify the content type
|
||||
@ -16,6 +19,8 @@ axiosRetry(axiosClient, { retries: 3 });
|
||||
// Request interceptor to add Bearer token
|
||||
axiosClient.interceptors.request.use(
|
||||
async (config) => {
|
||||
console.log("Starting Request", JSON.stringify(config, null, 2));
|
||||
console.log("API_URL", API_URL);
|
||||
if (config.authRequired) {
|
||||
const token = localStorage.getItem("jwtToken");
|
||||
if (token) {
|
||||
@ -44,32 +49,44 @@ axiosClient.interceptors.response.use(
|
||||
originalRequest._toastShown = true;
|
||||
|
||||
if (error.code === "ERR_CONNECTION_REFUSED") {
|
||||
console.error("Connection refused. Please ensure the server is running.");
|
||||
showToast("Unable to connect to the server. Please try again later.", "error");
|
||||
console.error(
|
||||
"Connection refused. Please ensure the server is running."
|
||||
);
|
||||
showToast(
|
||||
"Unable to connect to the server. Please try again later.",
|
||||
"error"
|
||||
);
|
||||
} else if (error.code === "ERR_NETWORK") {
|
||||
console.error("Network error: Unable to reach the server.");
|
||||
showToast("Server is unreachable. Try again later!", "error");
|
||||
redirectToLogin();
|
||||
} else if (error.code === "ECONNABORTED") {
|
||||
console.error("Request timed out.");
|
||||
showToast("The request took too long. Please try again later.", "error");
|
||||
showToast(
|
||||
"The request took too long. Please try again later.",
|
||||
"error"
|
||||
);
|
||||
} else if (error.response) {
|
||||
console.error("Error response:", error.response.status, error.response.data);
|
||||
console.error(
|
||||
"Error response:",
|
||||
error.response.status,
|
||||
error.response.data
|
||||
);
|
||||
|
||||
if (error.response.status === 401 && !originalRequest._retry) {
|
||||
originalRequest._retry = true;
|
||||
|
||||
try {
|
||||
// debugger;
|
||||
// Get the refresh token from secure storage
|
||||
// debugger;
|
||||
// Get the refresh token from secure storage
|
||||
const refreshToken = localStorage.getItem("refreshToken");
|
||||
|
||||
if (!refreshToken) {
|
||||
// Redirect to login if refresh token is not available
|
||||
// Redirect to login if refresh token is not available
|
||||
redirectToLogin();
|
||||
return Promise.reject(error);
|
||||
}
|
||||
// Make a request to refresh the access token
|
||||
// Make a request to refresh the access token
|
||||
const response = await axiosClient.post("/api/Auth/refresh-token", {
|
||||
token: localStorage.getItem("jwtToken"),
|
||||
refreshToken,
|
||||
@ -82,15 +99,19 @@ axiosClient.interceptors.response.use(
|
||||
// Retry the original request with the new token
|
||||
originalRequest.headers["Authorization"] = `Bearer ${token}`;
|
||||
|
||||
// Retry the original request
|
||||
// Retry the original request
|
||||
return axiosClient(originalRequest);
|
||||
} catch (err) {
|
||||
// Redirect to login if token refresh fails
|
||||
// Redirect to login if token refresh fails
|
||||
redirectToLogin();
|
||||
return Promise.reject(err);
|
||||
}
|
||||
} else {
|
||||
showToast(error.response.data?.message || "An error occurred. Please try again.", "error");
|
||||
showToast(
|
||||
error.response.data?.message ||
|
||||
"An error occurred. Please try again.",
|
||||
"error"
|
||||
);
|
||||
}
|
||||
} else {
|
||||
console.error("An unknown error occurred:", error.message);
|
||||
|
Loading…
x
Reference in New Issue
Block a user