import { PortalProvider } from '@gorhom/portal'
import React, { useState } from 'react'
import { Alert, Platform, StyleSheet, Text, View } from 'react-native'
import { BlurView } from 'expo-blur'
import { Fonts, Palette, gutters } from '../styles'
import GradientButton from './GradientButton'
import { LinearGradient } from './LinearGradient/LinearGradient'
import Overlay from './Overlay'
const WebAlertModal = ({ title, description, options, onDismiss }) => {
const [visible, setVisible] = useState(true)
const confirmOption = options?.find(({ style }) => style !== 'cancel')
const cancelOption = options?.find(({ style }) => style === 'cancel')
const hasSecondaryAction = Boolean(cancelOption)
const buttonContainerStyle = hasSecondaryAction ? styles.actionButton : styles.singleActionButton
const dismiss = (callback) => {
setVisible(false)
setTimeout(onDismiss, 500)
callback?.()
}
const onConfirm = () => {
dismiss(confirmOption?.onPress)
}
const onCancel = () => {
dismiss(cancelOption?.onPress)
}
const renderDescription = () => {
if (typeof description === 'string' || typeof description === 'number') {
return {description}
}
if (!description) {
return null
}
return {description}
}
return (
{title}
{renderDescription()}
{cancelOption && (
)}
)
}
const alertPolyfill = (title, description, options, extra) => {
const rootDiv = document.createElement('div')
document.body.appendChild(rootDiv)
const { createRoot } = require('react-dom/client')
const root = createRoot(rootDiv)
const closeModal = () => {
root.unmount()
rootDiv.remove()
}
const WebAlertComponent = () => (
)
root.render()
}
const customAlert = (title, description, options, extra) => {
// Utilisation de la propriété userInterfaceStyle pour le mettre en mode sombre
Alert.alert(title, description, options, {
...extra,
userInterfaceStyle: 'dark',
})
}
const alert = Platform.OS === 'web' ? alertPolyfill : customAlert
export const showPremiumRequiredAlert = () =>
alert(
'Accès premium requis',
'Vous devez payer pour créer une nouvelle musique.'
// [{ text: "OK", style: "cancel" }]
)
export default alert
const styles = StyleSheet.create({
overlayContent: {
justifyContent: 'center',
alignItems: 'center',
},
modalWrapper: {
width: '90%',
maxWidth: 460,
paddingHorizontal: 12,
},
modalBorder: {
borderRadius: 24,
padding: 1,
},
modalContainer: {
borderRadius: 23,
paddingHorizontal: gutters * 1.8,
paddingVertical: gutters,
backgroundColor: 'rgba(15, 12, 20, 0.9)',
overflow: 'hidden',
gap: gutters * 0.75,
},
title: Fonts({
type: 'mainTitle',
fontSize: 3,
style: { textAlign: 'center' },
}),
description: Fonts({
type: 'default',
color: Palette.gray,
fontSize: 2,
style: { lineHeight: 22, textAlign: 'center' },
}),
divider: {
height: 1,
backgroundColor: 'rgba(255,255,255,0.08)',
marginVertical: 0,
},
customDescription: {
width: '100%',
},
actionsRow: {
flexDirection: 'row',
gap: gutters,
width: '100%',
},
actions: {
width: '100%',
gap: gutters,
},
actionButton: {
flex: 1,
},
singleActionButton: {
width: '100%',
},
secondaryButtonGradient: {
borderWidth: 1,
borderColor: 'rgba(255,255,255,0.2)',
},
secondaryButtonText: {
color: Palette.gray,
},
})