Skip to content

Commit 70d64df

Browse files
Merge pull request #8 from PinsaraPerera/dev
restrict to the mobile devices
2 parents 44fa397 + d732192 commit 70d64df

File tree

5 files changed

+117
-13
lines changed

5 files changed

+117
-13
lines changed

package-lock.json

Lines changed: 40 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"node-mailjet": "^6.0.8",
2020
"postcss": "^8.5.3",
2121
"react": "^19.0.0",
22+
"react-device-detect": "^2.2.3",
2223
"react-dom": "^19.0.0",
2324
"react-redux": "^9.2.0",
2425
"redux": "^5.0.1",

src/app/layout.js

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
// src/app/layout.jsx
2-
'use client';
3-
import { Provider } from 'react-redux';
4-
import { PersistGate } from 'redux-persist/integration/react';
5-
import { store, persistor } from '@/redux/store';
6-
import { ToastProvider } from '@/components/ToastContext';
7-
import './globals.css';
2+
import Providers from "@/components/Providers";
3+
import DesktopOnly from "@/components/DesktopOnly";
4+
import "./globals.css";
85

96
export default function RootLayout({ children }) {
107
return (
118
<html lang="en">
129
<body>
13-
<Provider store={store}>
14-
<PersistGate loading={null} persistor={persistor}>
15-
<ToastProvider>
16-
{children}
17-
</ToastProvider>
18-
</PersistGate>
19-
</Provider>
10+
<DesktopOnly>
11+
<Providers>{children}</Providers>
12+
</DesktopOnly>
2013
</body>
2114
</html>
2215
);

src/components/DesktopOnly.jsx

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// src/components/DesktopOnly.jsx
2+
"use client";
3+
import { useState, useEffect } from 'react';
4+
import { isMobile } from 'react-device-detect';
5+
6+
export default function DesktopOnly({ children }) {
7+
const [isMobileView, setIsMobileView] = useState(false);
8+
9+
useEffect(() => {
10+
setIsMobileView(isMobile);
11+
12+
// Add resize listener to handle window resizing
13+
const handleResize = () => {
14+
setIsMobileView(window.innerWidth < 768);
15+
};
16+
17+
window.addEventListener('resize', handleResize);
18+
return () => window.removeEventListener('resize', handleResize);
19+
}, []);
20+
21+
if (isMobileView) {
22+
return (
23+
<div className="min-h-screen flex items-center justify-center bg-gradient-to-br from-indigo-600 to-blue-500 p-4">
24+
<div className="text-center bg-white rounded-xl shadow-lg p-8 max-w-md">
25+
<svg
26+
className="mx-auto h-16 w-16 text-indigo-600 mb-4"
27+
xmlns="http://www.w3.org/2000/svg"
28+
fill="none"
29+
viewBox="0 0 24 24"
30+
stroke="currentColor"
31+
>
32+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
33+
</svg>
34+
<h1 className="text-2xl font-bold text-gray-800 mb-3">
35+
Desktop View Required
36+
</h1>
37+
<p className="text-gray-600 mb-4">
38+
This event management system requires a larger screen for the best experience.
39+
</p>
40+
<div className="bg-indigo-50 p-4 rounded-lg border border-indigo-100 mb-4">
41+
<p className="text-indigo-800 text-sm">
42+
Please access this application from a desktop or laptop computer to use all features properly.
43+
</p>
44+
</div>
45+
<p className="text-xs text-gray-500">
46+
Minimum recommended screen width: 768px
47+
</p>
48+
</div>
49+
</div>
50+
);
51+
}
52+
53+
return children;
54+
}

src/components/Providers.jsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// src/components/Providers.jsx
2+
"use client";
3+
import { Provider } from "react-redux";
4+
import { PersistGate } from "redux-persist/integration/react";
5+
import { store, persistor } from "@/redux/store";
6+
import { ToastProvider } from "@/components/ToastContext";
7+
8+
export default function Providers({ children }) {
9+
return (
10+
<Provider store={store}>
11+
<PersistGate loading={null} persistor={persistor}>
12+
<ToastProvider>{children}</ToastProvider>
13+
</PersistGate>
14+
</Provider>
15+
);
16+
}

0 commit comments

Comments
 (0)