chahinebrini 3c52d8869e feat(native): WIP checkpoint — Profile/Settings/Demographics + WheelPicker + Maestro
Rollback-Punkt vor Expo SDK 54 / RN 0.81 Upgrade.

UI/UX:
- Profile: ProfileHeader redesign (sign-in chip + member-since), StatsBar 3 pill cards,
  Demographics accordion completed (Geburtsjahr, Geschlecht, Familienstand, Beruf-split,
  Wohnort), Pro-Trial-Banner, Approved-Domains list, DigaMissionBanner
- Settings: section-based layout, neutral icons (matched Header dropdown style)
- Header dropdown: extended with logout + games-page link
- Notifications page: skeleton dummy data
- Locales: i18n keys for new screens

New components:
- WheelPickerModal: native iOS UIPickerView wheel for long lists (Geburtsjahr 91 items,
  Bundesland 16, Stadt 30+/Bundesland)
- OptionsBottomSheet: iOS-style options sheet (used briefly for Geschlecht, currently
  unused — kept for potential future use)
- germanCities.ts: Top-cities per Bundesland (DSGVO-clean static data)

New libs (NewArch-codegen verified):
- @react-native-menu/menu 2.0.0 (UIMenu wrapper, Apple HIG-konform)
- @lodev09/react-native-true-sheet 3.10.1 (UISheetPresentationController wrapper —
  ABER incompatible mit RN 0.79.6, Build-Error → Trigger für SDK-54-Upgrade)

Maestro E2E:
- Initial setup mit auth/community/profile/urge flows

Scripts:
- build-ios-clean.sh: Xcode DerivedData + ios/build cleanup vor expo run:ios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 19:32:27 +02:00

90 lines
4.3 KiB
TypeScript

/**
* Top-Städte pro Bundesland (anonymized DiGA-Demographics).
* Curated by population — covers ~85% of population.
* Bundesland-Code = ISO 3166-2:DE (BW, BY, BE, ...).
*
* Falls User-Stadt nicht in Liste: Fallback "Andere" → free-text TextInput
* (separate UX-Path, in Phase C wenn relevant).
*/
export const GERMAN_CITIES_BY_BUNDESLAND: Record<string, string[]> = {
BW: [
'Stuttgart', 'Mannheim', 'Karlsruhe', 'Freiburg', 'Heidelberg', 'Heilbronn',
'Ulm', 'Pforzheim', 'Reutlingen', 'Esslingen', 'Tübingen', 'Ludwigsburg',
'Konstanz', 'Aalen', 'Sindelfingen', 'Villingen-Schwenningen', 'Friedrichshafen',
'Offenburg', 'Schwäbisch Gmünd', 'Göppingen', 'Rastatt', 'Baden-Baden',
'Ravensburg', 'Tuttlingen', 'Lörrach', 'Bietigheim-Bissingen',
],
BY: [
'München', 'Nürnberg', 'Augsburg', 'Regensburg', 'Würzburg', 'Ingolstadt',
'Fürth', 'Erlangen', 'Bayreuth', 'Bamberg', 'Aschaffenburg', 'Landshut',
'Kempten', 'Rosenheim', 'Neu-Ulm', 'Schweinfurt', 'Passau', 'Freising',
'Straubing', 'Dachau', 'Memmingen', 'Hof', 'Coburg', 'Ansbach',
'Erding', 'Weiden', 'Kaufbeuren', 'Garmisch-Partenkirchen',
],
BE: ['Berlin'],
BB: [
'Potsdam', 'Cottbus', 'Brandenburg an der Havel', 'Frankfurt (Oder)',
'Oranienburg', 'Eberswalde', 'Falkensee', 'Bernau', 'Königs Wusterhausen',
'Hennigsdorf', 'Werder', 'Strausberg', 'Fürstenwalde', 'Schwedt', 'Senftenberg',
],
HB: ['Bremen', 'Bremerhaven'],
HH: ['Hamburg'],
HE: [
'Frankfurt am Main', 'Wiesbaden', 'Kassel', 'Darmstadt', 'Offenbach',
'Hanau', 'Gießen', 'Marburg', 'Fulda', 'Rüsselsheim', 'Wetzlar', 'Bad Homburg',
'Oberursel', 'Rodgau', 'Dreieich', 'Limburg', 'Bensheim', 'Neu-Isenburg',
'Maintal', 'Langen', 'Hofheim', 'Bad Vilbel',
],
MV: [
'Rostock', 'Schwerin', 'Neubrandenburg', 'Stralsund', 'Greifswald', 'Wismar',
'Güstrow', 'Waren', 'Anklam', 'Bergen auf Rügen', 'Parchim', 'Neustrelitz',
],
NI: [
'Hannover', 'Braunschweig', 'Oldenburg', 'Osnabrück', 'Wolfsburg', 'Göttingen',
'Hildesheim', 'Salzgitter', 'Delmenhorst', 'Lüneburg', 'Wilhelmshaven',
'Celle', 'Hameln', 'Lingen', 'Cuxhaven', 'Emden', 'Goslar', 'Stade',
'Nordhorn', 'Peine', 'Melle', 'Garbsen', 'Langenhagen',
],
NW: [
'Köln', 'Düsseldorf', 'Dortmund', 'Essen', 'Duisburg', 'Bochum', 'Wuppertal',
'Bielefeld', 'Bonn', 'Münster', 'Mönchengladbach', 'Gelsenkirchen', 'Aachen',
'Krefeld', 'Oberhausen', 'Hagen', 'Hamm', 'Mülheim', 'Leverkusen', 'Solingen',
'Herne', 'Neuss', 'Paderborn', 'Bottrop', 'Recklinghausen', 'Bergisch Gladbach',
'Remscheid', 'Moers', 'Siegen', 'Witten', 'Iserlohn', 'Gütersloh',
'Marl', 'Lünen', 'Velbert', 'Minden', 'Dorsten', 'Detmold', 'Castrop-Rauxel',
'Arnsberg', 'Lüdenscheid', 'Bocholt', 'Dinslaken', 'Lippstadt',
],
RP: [
'Mainz', 'Ludwigshafen', 'Koblenz', 'Trier', 'Kaiserslautern', 'Worms',
'Neuwied', 'Neustadt', 'Speyer', 'Frankenthal', 'Bad Kreuznach', 'Pirmasens',
'Idar-Oberstein', 'Zweibrücken', 'Andernach', 'Ingelheim', 'Mayen', 'Landau',
],
SL: ['Saarbrücken', 'Neunkirchen', 'Homburg', 'Völklingen', 'Sankt Ingbert', 'Saarlouis', 'Merzig', 'Dillingen'],
SN: [
'Leipzig', 'Dresden', 'Chemnitz', 'Zwickau', 'Plauen', 'Görlitz', 'Freiberg',
'Bautzen', 'Pirna', 'Riesa', 'Hoyerswerda', 'Meißen', 'Radebeul', 'Freital',
'Glauchau', 'Annaberg-Buchholz', 'Markkleeberg', 'Limbach-Oberfrohna',
],
ST: [
'Magdeburg', 'Halle', 'Dessau-Roßlau', 'Wittenberg', 'Stendal', 'Halberstadt',
'Bernburg', 'Naumburg', 'Weißenfels', 'Aschersleben', 'Merseburg', 'Schönebeck',
'Bitterfeld-Wolfen', 'Sangerhausen', 'Köthen', 'Zeitz',
],
SH: [
'Kiel', 'Lübeck', 'Flensburg', 'Neumünster', 'Norderstedt', 'Elmshorn',
'Pinneberg', 'Itzehoe', 'Wedel', 'Ahrensburg', 'Geesthacht', 'Bad Oldesloe',
'Rendsburg', 'Reinbek', 'Heide', 'Husum',
],
TH: [
'Erfurt', 'Jena', 'Gera', 'Weimar', 'Nordhausen', 'Eisenach', 'Gotha',
'Suhl', 'Mühlhausen', 'Altenburg', 'Sondershausen', 'Bad Salzungen',
'Sonneberg', 'Saalfeld', 'Greiz', 'Apolda', 'Arnstadt', 'Pößneck',
],
};
export function getCitiesForBundesland(bundeslandCode: string | null | undefined): string[] {
if (!bundeslandCode) return [];
return GERMAN_CITIES_BY_BUNDESLAND[bundeslandCode] ?? [];
}