/**
* @format
*/
import * as React from 'react'
import {Box, Heading, HStack, Text} from '@chakra-ui/react'
import {
Line,
CartesianGrid,
XAxis,
YAxis,
Tooltip,
Area,
ComposedChart,
ResponsiveContainer,
Pie,
PieChart,
Cell,
Legend
} from 'recharts'
import {nFormatter} from '../common/utils'
import {KeyValue} from '../types/types'
const transactionPrice = [
{
TRANSACTION_YEAR: '2018',
MEDIAN_TRANSACTION_PRICE: '496000',
MIN_TRANSACTION_PRICE: '120000',
MAX_TRANSACTION_PRICE: '1300000'
},
{
TRANSACTION_YEAR: '2019',
MEDIAN_TRANSACTION_PRICE: '550000',
MIN_TRANSACTION_PRICE: '230000',
MAX_TRANSACTION_PRICE: '1220000'
},
{
TRANSACTION_YEAR: '2020',
MEDIAN_TRANSACTION_PRICE: '580000',
MIN_TRANSACTION_PRICE: '100000',
MAX_TRANSACTION_PRICE: '3800000'
},
{
TRANSACTION_YEAR: '2021',
MEDIAN_TRANSACTION_PRICE: '501500',
MIN_TRANSACTION_PRICE: '270000',
MAX_TRANSACTION_PRICE: '1575000'
},
{
TRANSACTION_YEAR: '2022',
MEDIAN_TRANSACTION_PRICE: '757500',
MIN_TRANSACTION_PRICE: '272000',
MAX_TRANSACTION_PRICE: '1170000'
}
]
const PSFMedianData = [
{
TRANSACTION_YEAR: '2018',
MEDIAN_TRANSACTION_PRICE: '496000',
MAX_TRANSACTION_PRICE: '586000',
MIN_TRANSACTION_PRICE: '386000'
},
{
TRANSACTION_YEAR: '2019',
MEDIAN_TRANSACTION_PRICE: '550000',
MAX_TRANSACTION_PRICE: '660000',
MIN_TRANSACTION_PRICE: '440000'
},
{
TRANSACTION_YEAR: '2020',
MEDIAN_TRANSACTION_PRICE: '580000',
MAX_TRANSACTION_PRICE: '690000',
MIN_TRANSACTION_PRICE: '470000'
},
{
TRANSACTION_YEAR: '2021',
MEDIAN_TRANSACTION_PRICE: '501500',
MAX_TRANSACTION_PRICE: '621500',
MIN_TRANSACTION_PRICE: '400500'
},
{
TRANSACTION_YEAR: '2022',
MEDIAN_TRANSACTION_PRICE: '757500',
MAX_TRANSACTION_PRICE: '867500',
MIN_TRANSACTION_PRICE: '647500'
}
]
const PieData = [
{name: 'Only Residential For Sale in Mont Kiara, Kuala Lumpur', value: 408},
{name: 'Also Have Other Demand', value: 502}
]
// Processing data into a range
transactionPrice.forEach((obj: any) => {
obj.price = [obj.MAX_TRANSACTION_PRICE, obj.MIN_TRANSACTION_PRICE]
})
PSFMedianData.forEach((obj: any) => {
obj.price = [obj.MAX_TRANSACTION_PRICE, obj.MIN_TRANSACTION_PRICE]
})
const customizedYAxisTick = (props: any) => {
const {x, y, payload} = props
return (
{nFormatter(payload.value, 3)}
)
}
const customizedToolTip = (props: any) => {
const {payload} = props
return (
<>
{payload && payload.length && (
{payload[0].payload.TRANSACTION_YEAR}
Min:
{payload[0].payload.MIN_TRANSACTION_PRICE}
Median:
{payload[0].payload.MEDIAN_TRANSACTION_PRICE}
Max:
{payload[0].payload.MAX_TRANSACTION_PRICE}
)}
>
)
}
const xAxisProperties = {
tickLine: false,
height: 50,
axisLine: false,
tickMargin: 25,
padding: {left: 10, right: 10},
tick: {fontFamily: 'Roboto-Medium', fontSize: '14px'}
}
const YAxisProperties = {
axisLine: false,
tickLine: false,
tick: customizedYAxisTick
}
const AreaProperties = {
type: 'monotone',
stroke: '#E1EFFE',
fill: '#E1EFFE'
}
const MedianLineProperties = {
type: 'monotone',
strokeWidth: 3,
stroke: '#233876'
}
interface medianDataUnit {
TRANSACTION_YEAR: string
MEDIAN_TRANSACTION_PRICE: string
MAX_TRANSACTION_PRICE: string
MIN_TRANSACTION_PRICE: string
}
interface MedianTypes {
data: Array
width?: number
height?: number
showXAxis?: boolean
showYAxis?: boolean
showArea?: boolean
showGrid?: boolean
showToolTip?: boolean
}
export const MedianChart = ({
data,
width = 500,
height = 500,
showXAxis = true,
showYAxis = true,
showArea = true,
showGrid = true,
showToolTip = true
}: MedianTypes) => (
{showGrid && }
{showArea && }
{showXAxis && }
{showYAxis && }
{showToolTip && }
)
export const MedianChartTransactionPrice = () => (
)
interface ChartDataInterface {
/**
* Width of the pie chart
*/
width?: number
/**
* height of the pie chart
*/
height?: number
data?: Array
colors?: Array
}
export const VantagePieChart = ({
width = 300,
height = 300,
colors
}: ChartDataInterface) => {
const COLORS = colors || [
'#2AB8E1',
'#062472',
'#00C49F',
'#FFBB28',
'#FF8042'
]
const RADIAN = Math.PI / 180
const renderCustomizedLabel = ({
cx,
cy,
midAngle,
innerRadius,
outerRadius,
percent,
index
}: {
cx: number
cy: number
midAngle: number
innerRadius: number
outerRadius: number
percent: number
index: number
}) => {
const radius = innerRadius + (outerRadius - innerRadius) * 0.5
const x = cx + radius * Math.cos(-midAngle * RADIAN)
const y = cy + radius * Math.sin(-midAngle * RADIAN)
return (
cx ? 'start' : 'end'}
dominantBaseline="central"
>
{`${(percent * 100).toFixed(0)}%`}
)
}
const renderLegend = (props: any) => {
const {payload} = props
return (
{payload.map((entry: any, index: number) => (
-
{entry.value}
))}
)
}
return (
{PieData.map((entry, index) => (
|
))}
)
}
export const MedianChartPSF = () =>