Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
877 changes: 422 additions & 455 deletions FRONTEND/package-lock.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions FRONTEND/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"react-router-dom": "^7.5.1",
"react-window": "^2.2.7",
"recharts": "^3.8.1",
"workbox-window": "^7.4.1",
"socket.io-client": "^4.8.3",
"zustand": "^5.0.4"
},
Expand Down
12 changes: 12 additions & 0 deletions FRONTEND/public/offline.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Offline</title>
</head>
<body>
<h1>You are offline</h1>
<p>Please check your internet connection and try again.</p>
</body>
</html>
2 changes: 1 addition & 1 deletion FRONTEND/src/components/ui/Navbar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -672,4 +672,4 @@ const Navbar = () => {
);
};

export default Navbar;
export default Navbar;
5 changes: 2 additions & 3 deletions FRONTEND/src/components/ui/QuickAddModal.jsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import React, { useEffect, useState } from "react";
import { useCart } from "../../store/cart";
import {
import { useCartStore } from "../../store/cart";import {
showSuccessToast,
showWarningToast,
} from "../../utils/toastHelpers";
Expand All @@ -25,7 +24,7 @@ import {
const QuickAddModal = ({ product, isOpen, onClose }) => {
const [quantity, setQuantity] = useState(1);

const { addToCart } = useCart();
const { addToCart } = useCartStore();
const toast = useToast();

const isOutOfStock =
Expand Down
1 change: 1 addition & 0 deletions FRONTEND/src/main.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import PWAReloadPrompt from './components/PWAReloadPrompt';

import { useCurrencyStore } from './store/currency';
useCurrencyStore.getState().fetchRates();
registerSW();

const root = createRoot(document.getElementById('root'));

Expand Down
14 changes: 14 additions & 0 deletions FRONTEND/src/utils/registerSW.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
export function registerSW() {
if (
typeof window !== "undefined" &&
"serviceWorker" in navigator
) {
window.addEventListener("load", async () => {
try {
await navigator.serviceWorker.register("/sw.js");
} catch (error) {
console.error("Service worker registration failed:", error);
}
});
}
}
32 changes: 32 additions & 0 deletions FRONTEND/src/utils/registerSW.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { describe, it, expect, vi } from "vitest";
import { registerSW } from "./registerSW";

describe("registerSW", () => {
it("registers load listener when service workers are supported", () => {
const addEventListenerSpy = vi.spyOn(window, "addEventListener");

Object.defineProperty(global.navigator, "serviceWorker", {
value: {
register: vi.fn(),
},
configurable: true,
});

registerSW();

expect(addEventListenerSpy).toHaveBeenCalledWith(
"load",
expect.any(Function)
);
});

it("does nothing when service workers are unsupported", () => {
const addEventListenerSpy = vi.spyOn(window, "addEventListener");

delete navigator.serviceWorker;

registerSW();

expect(addEventListenerSpy).not.toHaveBeenCalled();
});
});
1 change: 1 addition & 0 deletions FRONTEND/vite.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import path from 'path';
import { fileURLToPath } from 'url';
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { VitePWA } from 'vite-plugin-pwa';

import { VitePWA } from 'vite-plugin-pwa';

Expand Down
Loading