import React, { useEffect } from 'react'
import { AddressList as AddressListController, useLanguage, useOrder } from 'ordering-components/native'
import { AddressItem, Container } from './styles'
import { Platform, RefreshControl, StyleSheet, View } from 'react-native'
import { OButton, OText, OAlert, OIcon } from '../shared'
import { AddressListParams } from '../../types'
import { NotFoundSource } from '../NotFoundSource'
import NavBar from '../NavBar'
import { Fade, Placeholder, PlaceholderLine } from 'rn-placeholder'
import { TouchableRipple } from 'react-native-paper'
import { useState } from 'react'
import { useTheme } from 'styled-components/native';
const AddressListUI = (props: AddressListParams) => {
const {
navigation,
route,
addressList,
isFromProfile,
handleSetDefault,
handleDelete,
setAddressList,
isGoBack,
isFromBusinesses,
isFromProductsList,
afterSignup,
loadAddresses
} = props
const theme = useTheme();
const [orderState] = useOrder()
const [, t] = useLanguage()
const [refreshing] = useState(false);
const [isProfile, setIsProfile] = useState(isFromProfile || route?.params?.isFromProfile);
const goToBack = () => navigation?.canGoBack() && navigation.goBack()
const onNavigationRedirect = (route: string, params?: any) => navigation.navigate(route, params)
const onNavigatorRedirect = () => {
if (route && (isFromBusinesses || isGoBack)) {
isGoBack ? goToBack() : onNavigationRedirect('BottomTab')
return
}
if (route && route?.params?.isFromCheckout) {
onNavigationRedirect('CheckoutPage')
return
}
if (route && !route?.params?.isFromCheckout) {
onNavigationRedirect('BottomTab')
}
}
const uniqueAddressesList = (addressList.addresses && addressList.addresses.filter(
(address: any, i: number, self: any) => address.address &&
i === self.findIndex((obj: any) => (
address.address === obj.address &&
address.address_notes === obj.address_notes &&
address.zipcode === obj.zipcode &&
address.internal_number === obj.internal_number
)))) || []
const checkAddress = (address: any) => {
if (!orderState?.options?.address) return true
const props = ['address', 'address_notes', 'zipcode', 'location', 'internal_number']
const values: any = []
props.forEach(prop => {
if (address[prop]) {
if (prop === 'location') {
values.push(address[prop].lat === orderState?.options?.address[prop]?.lat &&
address[prop].lng === orderState?.options?.address[prop]?.lng)
} else {
values.push(address[prop] === orderState?.options?.address[prop])
}
} else {
values.push(orderState?.options?.address[prop] === null || orderState?.options?.address[prop] === '')
}
})
return values.every((value: any) => value)
}
const addressIcon = (tag: string) => {
switch (tag) {
case 'other':
return theme.images.general.tag_plus
case 'office':
return theme.images.general.tag_building
case 'home':
return theme.images.general.tag_home
case 'favorite':
return theme.images.general.tag_heart
default:
return theme.images.general.tag_plus
}
}
const handleSetAddress = (address: any) => {
if (address.id === orderState?.options?.address_id) return
handleSetDefault(address)
onNavigatorRedirect()
}
const handleSaveAddress = (address: any) => {
let found = false
const addresses = addressList.addresses.map((_address: any) => {
if (_address?.id === address?.id) {
Object.assign(_address, address)
found = true
} else if (address.default) {
_address.default = false
}
return _address
})
if (!found) {
addresses.push(address)
}
setAddressList({
...addressList,
addresses
})
}
const handleOnRefresh = () => {
if (!addressList.loading) {
loadAddresses();
}
}
useEffect(() => {
console.log('From profile : ' + isProfile)
}, [])
return (
handleOnRefresh()}
/>
}
>
{(!addressList.loading || (isFromProductsList || isFromBusinesses || isFromProfile || isProfile)) && (
<>
{isProfile && (
)}
{
route &&
(
route?.params?.isFromBusinesses ||
route?.params?.isFromCheckout ||
route?.params?.isFromProductsList
) &&
!isFromProfile &&
(
goToBack()}
showCall={false}
btnStyle={{ paddingLeft: 0 }}
paddingTop={10}
style={{ marginTop: 0 }}
titleWrapStyle={{ paddingHorizontal: 0 }}
titleStyle={{ marginLeft: 0, marginRight: 0 }}
/>
)}
{addressList.loading && addressList?.addresses?.length === 0 && (
<>
{[...Array(5)].map((item, i) => (
))}
>
)}
{
!addressList.error &&
addressList?.addresses?.length > 0 && (
<>
{uniqueAddressesList.map((address: any, index: any) => (
handleSetAddress(address)}
style={{
borderColor: checkAddress(address) ? theme.colors.primary : theme.colors.border,
borderBottomWidth: index === uniqueAddressesList.length - 1 ? 0 : 1
}}
>
{address.address}
!afterSignup ? onNavigationRedirect(
'AddressForm',
{
address: address,
isEditing: true,
addressesList: addressList,
onSaveAddress: handleSaveAddress,
isSelectedAfterAdd: true,
isFromProductsList: isFromProductsList,
hasAddressDefault: !!orderState.options?.address?.location,
isFromCheckout: route?.params?.isFromCheckout
}
) : onNavigationRedirect(
'AddressFormInitial',
{
address: address,
isEditing: true,
addressesList: addressList,
onSaveAddress: handleSaveAddress,
isSelectedAfterAdd: true,
isFromProductsList: isFromProductsList,
hasAddressDefault: !!orderState.options?.address?.location,
isFromCheckout: route?.params?.isFromCheckout
})}
>
{!checkAddress(address) && (
handleDelete(address)}
disabled={checkAddress(address)}
>
)}
))}
>
)}
{!addressList.loading && addressList.error && (
addressList.error.length > 0 && (
)
)}
{!addressList.loading && !addressList.error && (
<>
{addressList?.addresses?.length === 0 && (
{t('ADDRESS_LIST', 'Address List')}
)}
!afterSignup ? onNavigationRedirect(
'AddressForm',
{
address: null,
onSaveAddress: handleSaveAddress,
addressesList: addressList?.addresses,
nopadding: true,
isSelectedAfterAdd: true,
hasAddressDefault: !!orderState.options?.address?.location,
isFromCheckout: route?.params?.isFromCheckout
}) : onNavigationRedirect(
'AddressFormInitial',
{
address: null,
onSaveAddress: handleSaveAddress,
addressesList: addressList?.addresses,
nopadding: true,
isSelectedAfterAdd: true,
hasAddressDefault: !!orderState.options?.address?.location,
isFormCheckout: route?.params?.isFromCheckout
})}
/>
>
)}
>
)}
)
}
const styles = StyleSheet.create({
address: {
flex: 1,
marginHorizontal: 5
},
icon: {
flex: 0.2
},
buttonIcon: {
width: 20,
height: 20,
resizeMode: 'contain',
left: 20,
position: 'absolute',
},
button: {
marginTop: 30,
marginBottom: 30,
borderRadius: 7.6,
borderWidth: 1,
shadowOpacity: 0,
height: 44,
}
})
export const AddressList = (props: AddressListParams) => {
const addressListProps = {
...props,
UIComponent: AddressListUI
}
return
}