This commit is contained in:
Timo Knuth
2026-02-27 15:19:24 +01:00
parent b7f8221095
commit 253c3c1c6d
134 changed files with 11188 additions and 1871 deletions

View File

@@ -1,6 +1,7 @@
import { TouchableOpacity, Text, View, StyleSheet, Platform } from 'react-native'
import { TouchableOpacity, Text, View, StyleSheet } from 'react-native'
import { Ionicons } from '@expo/vector-icons'
import * as WebBrowser from 'expo-web-browser'
import { getApiBaseUrl } from '@/lib/api-url'
interface Attachment {
id: string
@@ -10,7 +11,7 @@ interface Attachment {
mimeType?: string | null
}
const API_URL = process.env.EXPO_PUBLIC_API_URL ?? 'http://localhost:3000'
const API_URL = getApiBaseUrl()
function getFileIcon(mimeType?: string | null): keyof typeof Ionicons.glyphMap {
if (!mimeType) return 'document-outline'

View File

@@ -5,25 +5,29 @@ interface AnmeldeButtonProps {
isAngemeldet: boolean
onToggle: () => void
isLoading: boolean
maxTeilnehmer?: number | null
teilnehmerAnzahl?: number
}
export function AnmeldeButton({ isAngemeldet, onToggle, isLoading }: AnmeldeButtonProps) {
export function AnmeldeButton({ isAngemeldet, onToggle, isLoading, maxTeilnehmer, teilnehmerAnzahl = 0 }: AnmeldeButtonProps) {
const isFull = !isAngemeldet && !!maxTeilnehmer && teilnehmerAnzahl >= maxTeilnehmer
return (
<TouchableOpacity
onPress={onToggle}
disabled={isLoading}
disabled={isLoading || isFull}
style={[
styles.btn,
isAngemeldet ? styles.btnRegistered : styles.btnRegister,
isLoading && styles.disabled,
isAngemeldet ? styles.btnRegistered : isFull ? styles.btnFull : styles.btnRegister,
(isLoading || isFull) && styles.disabled,
]}
activeOpacity={0.82}
>
{isLoading ? (
<ActivityIndicator color={isAngemeldet ? '#52525B' : '#FFFFFF'} />
) : (
<Text style={[styles.label, isAngemeldet && styles.labelRegistered]}>
{isAngemeldet ? '✓ Angemeldet Abmelden' : 'Jetzt anmelden'}
<Text style={[styles.label, (isAngemeldet || isFull) && styles.labelRegistered]}>
{isAngemeldet ? '✓ Angemeldet Abmelden' : isFull ? 'Ausgebucht' : 'Jetzt anmelden'}
</Text>
)}
</TouchableOpacity>
@@ -51,6 +55,11 @@ const styles = StyleSheet.create({
borderWidth: 1,
borderColor: '#E2E8F0',
},
btnFull: {
backgroundColor: '#F4F4F5',
borderWidth: 1,
borderColor: '#E2E8F0',
},
disabled: {
opacity: 0.5,
},