Rename and purple instant

This commit is contained in:
Andras Schmelczer 2026-07-12 15:31:05 +01:00
parent f948efc06c
commit 6df2812a4e
8 changed files with 28 additions and 10 deletions

View file

@ -14,8 +14,10 @@ function currentUserId(): string | null {
* *
* Reads the user from the shared PocketBase authStore so it stays self-contained, with no need to * Reads the user from the shared PocketBase authStore so it stays self-contained, with no need to
* thread a user id down through the map layer tree. Returns a Set for O(1) membership checks in * thread a user id down through the map layer tree. Returns a Set for O(1) membership checks in
* the map's colour accessor; a fresh Set instance is produced on every change so it can double * the map's colour accessor; a fresh Set instance is produced on every change so React re-renders.
* as a deck.gl `updateTrigger` (identity-compared). * Note: a Set can NOT be used directly as a deck.gl `updateTrigger` deck diffs triggers with
* `compareProps`, which finds no enumerable keys on a Set and reports "no change". Callers must
* pass `Array.from(clickedUrls)` (or a version counter) as the trigger instead.
* *
* Writes are optimistic: `markClicked` updates local state synchronously so the pin recolours * Writes are optimistic: `markClicked` updates local state synchronously so the pin recolours
* the instant it is clicked, independent of the PocketBase round-trip or the next listings fetch. * the instant it is clicked, independent of the PocketBase round-trip or the next listings fetch.

View file

@ -385,7 +385,9 @@ export function useListingLayers({ listings, zoom, isDark }: UseListingLayersPro
highlightColor: [29, 228, 195, 220], highlightColor: [29, 228, 195, 220],
onHover: stableHover, onHover: stableHover,
onClick: stableClick, onClick: stableClick,
updateTriggers: { getFillColor: clickedUrls }, // deck.gl can't diff a Set (no enumerable keys), so a click never
// re-runs getFillColor until data changes. Feed it a diffable array.
updateTriggers: { getFillColor: Array.from(clickedUrls) },
}), }),
[visibleListings, clickedUrls, stableHover, stableClick] [visibleListings, clickedUrls, stableHover, stableClick]
); );
@ -483,7 +485,9 @@ export function useListingLayers({ listings, zoom, isDark }: UseListingLayersPro
highlightColor: [29, 228, 195, 220], highlightColor: [29, 228, 195, 220],
onHover: stableExpandedHover, onHover: stableExpandedHover,
onClick: stableExpandedClick, onClick: stableExpandedClick,
updateTriggers: { getFillColor: clickedUrls }, // deck.gl can't diff a Set (no enumerable keys), so a click never
// re-runs getFillColor until data changes. Feed it a diffable array.
updateTriggers: { getFillColor: Array.from(clickedUrls) },
}), }),
[expandedListings, clickedUrls, stableExpandedHover, stableExpandedClick] [expandedListings, clickedUrls, stableExpandedHover, stableExpandedClick]
); );

View file

@ -42,7 +42,7 @@ const de: Translations = {
minute: 'Min.', minute: 'Min.',
or: 'oder', or: 'oder',
area: 'Gebiet', area: 'Gebiet',
properties: 'Immobilien', properties: 'Verkaufte Immobilien',
postcode: 'Postcode', postcode: 'Postcode',
noAreaSelected: 'Kein Gebiet ausgewählt', noAreaSelected: 'Kein Gebiet ausgewählt',
noAreaSelectedDesc: noAreaSelectedDesc:
@ -631,6 +631,8 @@ const de: Translations = {
email: 'E-Mail', email: 'E-Mail',
emailPlaceholder: 'name@beispiel.de', emailPlaceholder: 'name@beispiel.de',
password: 'Passwort', password: 'Passwort',
showPassword: 'Passwort anzeigen',
hidePassword: 'Passwort verbergen',
passwordPlaceholderRegister: 'Mind. 8 Zeichen', passwordPlaceholderRegister: 'Mind. 8 Zeichen',
passwordPlaceholderLogin: 'Dein Passwort', passwordPlaceholderLogin: 'Dein Passwort',
forgotPassword: 'Passwort vergessen?', forgotPassword: 'Passwort vergessen?',

View file

@ -38,7 +38,7 @@ const en = {
minute: 'min', minute: 'min',
or: 'or', or: 'or',
area: 'Area', area: 'Area',
properties: 'Properties', properties: 'Sold properties',
postcode: 'Postcode', postcode: 'Postcode',
noAreaSelected: 'No area selected', noAreaSelected: 'No area selected',
noAreaSelectedDesc: noAreaSelectedDesc:
@ -618,6 +618,8 @@ const en = {
email: 'Email', email: 'Email',
emailPlaceholder: 'you@example.com', emailPlaceholder: 'you@example.com',
password: 'Password', password: 'Password',
showPassword: 'Show password',
hidePassword: 'Hide password',
passwordPlaceholderRegister: 'Min 8 characters', passwordPlaceholderRegister: 'Min 8 characters',
passwordPlaceholderLogin: 'Your password', passwordPlaceholderLogin: 'Your password',
forgotPassword: 'Forgot password?', forgotPassword: 'Forgot password?',

View file

@ -40,7 +40,7 @@ const fr: Translations = {
minute: 'min', minute: 'min',
or: 'ou', or: 'ou',
area: 'Secteur', area: 'Secteur',
properties: 'Biens', properties: 'Biens vendus',
postcode: 'Code postal', postcode: 'Code postal',
noAreaSelected: 'Aucun secteur sélectionné', noAreaSelected: 'Aucun secteur sélectionné',
noAreaSelectedDesc: noAreaSelectedDesc:
@ -642,6 +642,8 @@ const fr: Translations = {
email: 'E-mail', email: 'E-mail',
emailPlaceholder: 'vous@exemple.com', emailPlaceholder: 'vous@exemple.com',
password: 'Mot de passe', password: 'Mot de passe',
showPassword: 'Afficher le mot de passe',
hidePassword: 'Masquer le mot de passe',
passwordPlaceholderRegister: '8 caractères minimum', passwordPlaceholderRegister: '8 caractères minimum',
passwordPlaceholderLogin: 'Votre mot de passe', passwordPlaceholderLogin: 'Votre mot de passe',
forgotPassword: 'Mot de passe oublié ?', forgotPassword: 'Mot de passe oublié ?',

View file

@ -39,7 +39,7 @@ const hi: Translations = {
minute: 'मिनट', minute: 'मिनट',
or: 'या', or: 'या',
area: 'क्षेत्र', area: 'क्षेत्र',
properties: 'प्रॉपर्टीज़', properties: 'बिकी हुई प्रॉपर्टीज़',
postcode: 'पोस्टकोड', postcode: 'पोस्टकोड',
noAreaSelected: 'कोई क्षेत्र चुना नहीं गया', noAreaSelected: 'कोई क्षेत्र चुना नहीं गया',
noAreaSelectedDesc: noAreaSelectedDesc:
@ -615,6 +615,8 @@ const hi: Translations = {
email: 'ईमेल', email: 'ईमेल',
emailPlaceholder: 'you@example.com', emailPlaceholder: 'you@example.com',
password: 'पासवर्ड', password: 'पासवर्ड',
showPassword: 'पासवर्ड दिखाएं',
hidePassword: 'पासवर्ड छिपाएं',
passwordPlaceholderRegister: 'कम से कम 8 अक्षर', passwordPlaceholderRegister: 'कम से कम 8 अक्षर',
passwordPlaceholderLogin: 'आपका पासवर्ड', passwordPlaceholderLogin: 'आपका पासवर्ड',
forgotPassword: 'पासवर्ड भूल गए?', forgotPassword: 'पासवर्ड भूल गए?',

View file

@ -40,7 +40,7 @@ const hu: Translations = {
minute: 'perc', minute: 'perc',
or: 'vagy', or: 'vagy',
area: 'Terület', area: 'Terület',
properties: 'Ingatlanok', properties: 'Eladott ingatlanok',
postcode: 'Irányítószám', postcode: 'Irányítószám',
noAreaSelected: 'Nincs kiválasztott terület', noAreaSelected: 'Nincs kiválasztott terület',
noAreaSelectedDesc: noAreaSelectedDesc:
@ -633,6 +633,8 @@ const hu: Translations = {
email: 'E-mail', email: 'E-mail',
emailPlaceholder: 'te@pelda.hu', emailPlaceholder: 'te@pelda.hu',
password: 'Jelszó', password: 'Jelszó',
showPassword: 'Jelszó megjelenítése',
hidePassword: 'Jelszó elrejtése',
passwordPlaceholderRegister: 'Minimum 8 karakter', passwordPlaceholderRegister: 'Minimum 8 karakter',
passwordPlaceholderLogin: 'Jelszavad', passwordPlaceholderLogin: 'Jelszavad',
forgotPassword: 'Elfelejtetted a jelszavad?', forgotPassword: 'Elfelejtetted a jelszavad?',

View file

@ -40,7 +40,7 @@ const zh: Translations = {
minute: '分钟', minute: '分钟',
or: '或', or: '或',
area: '区域', area: '区域',
properties: '房产', properties: '已售房产',
postcode: '邮编', postcode: '邮编',
noAreaSelected: '未选择区域', noAreaSelected: '未选择区域',
noAreaSelectedDesc: '点击地图上的任意彩色区域,查看治安、学校、房价等信息', noAreaSelectedDesc: '点击地图上的任意彩色区域,查看治安、学校、房价等信息',
@ -579,6 +579,8 @@ const zh: Translations = {
email: '邮箱', email: '邮箱',
emailPlaceholder: 'you@example.com', emailPlaceholder: 'you@example.com',
password: '密码', password: '密码',
showPassword: '显示密码',
hidePassword: '隐藏密码',
passwordPlaceholderRegister: '至少 8 个字符', passwordPlaceholderRegister: '至少 8 个字符',
passwordPlaceholderLogin: '您的密码', passwordPlaceholderLogin: '您的密码',
forgotPassword: '忘记密码?', forgotPassword: '忘记密码?',