Skip to content

Commit 4b60676

Browse files
committed
Add an offline example
1 parent a818941 commit 4b60676

31 files changed

Lines changed: 2900 additions & 132 deletions

examples/ra-offline/.gitignore

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
pnpm-debug.log*
8+
lerna-debug.log*
9+
10+
node_modules
11+
dist
12+
dist-ssr
13+
*.local
14+
15+
# Editor directories and files
16+
.vscode/*
17+
!.vscode/extensions.json
18+
.idea
19+
.DS_Store
20+
*.suo
21+
*.ntvs*
22+
*.njsproj
23+
*.sln
24+
*.sw?

examples/ra-offline/README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# ra-offline
2+
3+
## Installation
4+
5+
Install the application dependencies by running:
6+
7+
```sh
8+
npm install
9+
```
10+
11+
## Development
12+
13+
Start the application in development mode by running:
14+
15+
```sh
16+
npm run dev
17+
```
18+
19+
## Production
20+
21+
Build the application in production mode by running:
22+
23+
```sh
24+
npm run build
25+
```
26+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
if ("serviceWorker" in navigator)
2+
navigator.serviceWorker.register("/dev-sw.js?dev-sw", {
3+
scope: "/",
4+
type: "module",
5+
});
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import js from "@eslint/js";
2+
import { defineConfig, globalIgnores } from "eslint/config";
3+
import tseslint from "typescript-eslint";
4+
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
5+
import react from "eslint-plugin-react";
6+
import reactHooks from "eslint-plugin-react-hooks";
7+
import globals from "globals";
8+
9+
export default defineConfig([
10+
globalIgnores(["**/node_modules", "**/dist"]),
11+
{
12+
name: "eslint-js-recommended-rules",
13+
plugins: {
14+
js,
15+
},
16+
extends: ["js/recommended"],
17+
},
18+
tseslint.configs.recommended.map((conf) => ({
19+
...conf,
20+
files: ["**/*.ts", "**/*.tsx"],
21+
})),
22+
eslintPluginPrettierRecommended,
23+
{
24+
name: "react",
25+
...react.configs.flat.recommended,
26+
},
27+
reactHooks.configs["recommended-latest"],
28+
{
29+
languageOptions: {
30+
globals: {
31+
...globals.browser,
32+
...globals.node,
33+
},
34+
},
35+
rules: {
36+
"react/react-in-jsx-scope": "off",
37+
},
38+
settings: {
39+
react: {
40+
version: "detect",
41+
},
42+
},
43+
},
44+
]);

examples/ra-offline/index.html

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width,initial-scale=1" />
6+
<title>My Awesome App</title>
7+
<meta name="description" content="My Awesome App description" />
8+
<link rel="icon" href="/favicon.ico" />
9+
<link rel="apple-touch-icon" href="/apple-touch-icon-180x180.png" sizes="180x180" />
10+
<link rel="mask-icon" href="/maskable-icon-512x512.png" color="#FFFFFF" />
11+
<meta name="theme-color" content="#ffffff" />
12+
<title>ra-offline</title>
13+
<style>
14+
.loader-container {
15+
display: flex;
16+
align-items: center;
17+
justify-content: center;
18+
flex-direction: column;
19+
position: absolute;
20+
top: 0;
21+
bottom: 0;
22+
left: 0;
23+
right: 0;
24+
background-color: #fafafa;
25+
}
26+
27+
/* CSS Spinner from https://projects.lukehaas.me/css-loaders/ */
28+
29+
.loader,
30+
.loader:before,
31+
.loader:after {
32+
border-radius: 50%;
33+
}
34+
35+
.loader {
36+
color: #283593;
37+
font-size: 11px;
38+
text-indent: -99999em;
39+
margin: 55px auto;
40+
position: relative;
41+
width: 10em;
42+
height: 10em;
43+
box-shadow: inset 0 0 0 1em;
44+
-webkit-transform: translateZ(0);
45+
-ms-transform: translateZ(0);
46+
transform: translateZ(0);
47+
}
48+
49+
.loader:before,
50+
.loader:after {
51+
position: absolute;
52+
content: "";
53+
}
54+
55+
.loader:before {
56+
width: 5.2em;
57+
height: 10.2em;
58+
background: #fafafa;
59+
border-radius: 10.2em 0 0 10.2em;
60+
top: -0.1em;
61+
left: -0.1em;
62+
-webkit-transform-origin: 5.2em 5.1em;
63+
transform-origin: 5.2em 5.1em;
64+
-webkit-animation: load2 2s infinite ease 1.5s;
65+
animation: load2 2s infinite ease 1.5s;
66+
}
67+
68+
.loader:after {
69+
width: 5.2em;
70+
height: 10.2em;
71+
background: #fafafa;
72+
border-radius: 0 10.2em 10.2em 0;
73+
top: -0.1em;
74+
left: 5.1em;
75+
-webkit-transform-origin: 0px 5.1em;
76+
transform-origin: 0px 5.1em;
77+
-webkit-animation: load2 2s infinite ease;
78+
animation: load2 2s infinite ease;
79+
}
80+
81+
@-webkit-keyframes load2 {
82+
0% {
83+
-webkit-transform: rotate(0deg);
84+
transform: rotate(0deg);
85+
}
86+
100% {
87+
-webkit-transform: rotate(360deg);
88+
transform: rotate(360deg);
89+
}
90+
}
91+
92+
@keyframes load2 {
93+
0% {
94+
-webkit-transform: rotate(0deg);
95+
transform: rotate(0deg);
96+
}
97+
100% {
98+
-webkit-transform: rotate(360deg);
99+
transform: rotate(360deg);
100+
}
101+
}
102+
</style>
103+
<link rel="preconnect" href="https://fonts.gstatic.com" />
104+
<link
105+
href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap"
106+
rel="stylesheet"
107+
/>
108+
</head>
109+
110+
<body>
111+
<noscript> You need to enable JavaScript to run this app. </noscript>
112+
<div id="root">
113+
<div class="loader-container">
114+
<div class="loader">Loading...</div>
115+
</div>
116+
</div>
117+
</body>
118+
<script type="module" src="/src/index.tsx"></script>
119+
</html>

examples/ra-offline/package.json

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{
2+
"private": true,
3+
"type": "module",
4+
"scripts": {
5+
"dev": "vite",
6+
"build": "vite build",
7+
"preview": "vite preview",
8+
"serve": "REINSTALL=true PORT=4433 serve dist",
9+
"type-check": "tsc --noEmit",
10+
"lint": "eslint --fix --ext .js,.jsx,.ts,.tsx ./src",
11+
"format": "prettier --write ./src"
12+
},
13+
"dependencies": {
14+
"@emotion/react": "^11.14.0",
15+
"@emotion/styled": "^11.14.0",
16+
"@mui/icons-material": "^7.0.1",
17+
"@mui/material": "^7.0.1",
18+
"@tanstack/query-async-storage-persister": "^5.90.22",
19+
"@tanstack/react-query": "^5.90.21",
20+
"@tanstack/react-query-persist-client": "^5.90.22",
21+
"ra-core": "5.14.1",
22+
"ra-data-json-server": "5.14.1",
23+
"ra-ui-materialui": "5.14.1",
24+
"react": "^19.0.0",
25+
"react-admin": "5.14.1",
26+
"react-dom": "^19.0.0",
27+
"react-router": "^7.1.3",
28+
"react-router-dom": "^7.1.3"
29+
},
30+
"devDependencies": {
31+
"@eslint/js": "^9.23.0",
32+
"@types/node": "^20.10.7",
33+
"@types/react": "^18.3.3",
34+
"@types/react-dom": "^18.3.0",
35+
"@vitejs/plugin-react": "^4.3.4",
36+
"eslint": "^9.23.0",
37+
"eslint-config-prettier": "^10.1.1",
38+
"eslint-plugin-prettier": "^5.2.5",
39+
"eslint-plugin-react": "^7.37.4",
40+
"eslint-plugin-react-hooks": "^5.2.0",
41+
"globals": "^16.0.0",
42+
"https-localhost": "^4.7.1",
43+
"prettier": "^3.3.3",
44+
"typescript": "^5.1.6",
45+
"typescript-eslint": "^8.28.0",
46+
"vite": "^6.2.6",
47+
"vite-plugin-pwa": "^1.2.0"
48+
},
49+
"name": "ra-offline"
50+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default {};
2.11 KB
Loading
1.29 KB
Binary file not shown.
5.19 KB
Loading

0 commit comments

Comments
 (0)