Skip to content

Commit 6a057f1

Browse files
committed
Merge branch 'dev' into feat/api-delete-sensor-data
2 parents a50bc7c + a6ac484 commit 6a057f1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+23665
-21816
lines changed

.github/workflows/deploy.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
runs-on: ubuntu-latest
2222
steps:
2323
- name: ⬇️ Checkout repo
24-
uses: actions/checkout@v5
24+
uses: actions/checkout@v6
2525

2626
- name: ⎔ Setup node
2727
uses: actions/setup-node@v6
@@ -41,7 +41,7 @@ jobs:
4141
runs-on: ubuntu-latest
4242
steps:
4343
- name: ⬇️ Checkout repo
44-
uses: actions/checkout@v5
44+
uses: actions/checkout@v6
4545

4646
- name: ⎔ Setup node
4747
uses: actions/setup-node@v6
@@ -61,7 +61,7 @@ jobs:
6161
runs-on: ubuntu-latest
6262
steps:
6363
- name: ⬇️ Checkout repo
64-
uses: actions/checkout@v5
64+
uses: actions/checkout@v6
6565

6666
- name: 🏄 Copy test env vars
6767
run: cp .env.example .env
@@ -109,7 +109,7 @@ jobs:
109109
runs-on: ubuntu-latest
110110
steps:
111111
- name: ⬇️ Checkout repo
112-
uses: actions/checkout@v5
112+
uses: actions/checkout@v6
113113

114114
- name: 🐳 Set up Docker Buildx
115115
uses: docker/setup-buildx-action@v3
@@ -118,7 +118,7 @@ jobs:
118118

119119
# Setup cache
120120
- name: ⚡️ Cache Docker layers
121-
uses: actions/cache@v4
121+
uses: actions/cache@v5
122122
with:
123123
path: /tmp/.buildx-cache
124124
key: ${{ runner.os }}-buildx-${{ github.sha }}

app/components/header/index.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import LanguageSelector from "../landing/header/language-selector";
12
import Download from "./download";
23
import Home from "./home";
34
import Menu from "./menu";
@@ -17,6 +18,9 @@ export default function Header(props: HeaderProps) {
1718
<Home />
1819
<NavBar devices={props.devices} />
1920
<div className="flex gap-2">
21+
<div className="flex pointer-events-auto items-center h-10 w-16 rounded-full bg-white justify-center shadow-md">
22+
<LanguageSelector/>
23+
</div>
2024
<Download devices={props.devices} />
2125
{/* {data?.user?.email ? <Notification /> : null} */}
2226
<Menu />
Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,40 @@
1-
import i18next from "i18next";
2-
import { useState } from "react";
3-
import { useFetcher, useLoaderData } from "react-router";
4-
import { Button } from "~/components/ui/button";
5-
import { type loader } from "~/root";
1+
import i18next from 'i18next'
2+
import { Globe } from 'lucide-react'
3+
import { useEffect, useState } from 'react'
4+
import { useFetcher, useLoaderData } from 'react-router'
5+
import { Button } from '~/components/ui/button'
66

77
export default function LanguageSelector() {
8-
const data = useLoaderData<typeof loader>();
9-
const fetcher = useFetcher();
10-
const [locale, setLocale] = useState(data.locale || "en");
8+
const data = useLoaderData()
9+
const fetcher = useFetcher()
10+
const [locale, setLocale] = useState(data.locale || 'en')
11+
// When loader locale changes (e.g. after login), sync state
12+
useEffect(() => {
13+
if (!data?.locale) return
14+
setLocale(data.locale)
15+
void (async () => {
16+
await i18next.changeLanguage(data.locale)
17+
})()
18+
}, [data.locale])
19+
const toggleLanguage = () => {
20+
const newLocale = locale === 'en' ? 'de' : 'en' // Toggle between "en" and "de"
21+
setLocale(newLocale)
22+
void i18next.changeLanguage(newLocale) // Change the language in the app
23+
void fetcher.submit(
24+
{ language: newLocale },
25+
{ method: 'post', action: '/action/set-language' }, // Persist the new language
26+
)
27+
}
1128

12-
const toggleLanguage = () => {
13-
const newLocale = locale === "en" ? "de" : "en"; // Toggle between "en" and "de"
14-
setLocale(newLocale);
15-
void i18next.changeLanguage(newLocale); // Change the language in the app
16-
void fetcher.submit(
17-
{ language: newLocale },
18-
{ method: "post", action: "/action/set-language" }, // Persist the new language
19-
);
20-
};
21-
22-
return (
23-
<Button
24-
variant="ghost"
25-
size="icon"
26-
onClick={toggleLanguage}
27-
className="hover:bg-transparent dark:hover:text-white hover:text-black"
28-
>
29-
{locale === "de" ? <p>DE</p> : <p>EN</p>}
30-
</Button>
31-
);
29+
return (
30+
<Button
31+
variant="ghost"
32+
size="icon"
33+
onClick={toggleLanguage}
34+
className="hover:bg-transparent hover:text-black dark:hover:text-white"
35+
>
36+
<Globe />
37+
{locale === 'de' ? <p>DE</p> : <p>EN</p>}
38+
</Button>
39+
)
3240
}

app/components/map/layers/cluster/box-marker.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useState } from 'react'
44
import { type MarkerProps, Marker, useMap } from 'react-map-gl'
55
import { useMatches, useNavigate, useSearchParams } from 'react-router'
66
import { useGlobalCompareMode } from '~/components/device-detail/useGlobalCompareMode'
7+
import { validLngLat } from '~/lib/location'
78
import { cn } from '~/lib/utils'
89
import { type Device } from '~/schema'
910

@@ -51,6 +52,8 @@ export default function BoxMarker({ device, ...props }: BoxMarkerProps) {
5152
return 0
5253
}
5354

55+
if (!validLngLat(props.longitude, props.latitude)) return null
56+
5457
return (
5558
<Marker
5659
{...props}

0 commit comments

Comments
 (0)