Note: I am a newbie in React Native. Here is my frist package which I publish to npm. If it make you waste your time, please dont blame me. I hope to disscuss about any the problem with you. Thank you !!!
You can clone this repo to test package.
https://github.com/tiennguyen12g/react-native-chart-tnbt.git
npx react-native start
In the App.tsx, I have some data for test, you can use it if need.
npm i react-native-chart-tnbt
import {PieChart} from "react-native-chart-tnbt"
if typescript gives the error, you can try to create file name react-native-chart-tnbt.d.ts
// file react-native-chart-tnbt.d.ts
declare module "react-native-chart-tnbt"
interface PieChartProps {
typeNo?: number; // default: 1 or option 2
data: DataInput[];
duration?: number; // default: 2000ms
mainPie?: {
size?: number; // default: 280
strokeWidth?: number; // default: 15
};
decorPie?: {
sizeDecorCircular: number;
strokeWidthDecorCircular: number;
seperateSlice: boolean;
opacityDecorCircular: number; // Value 0-1
annotation?: boolean;
logoData?: CryptoLogoPNG;
logoSize?: number;
colorCustomList?: string[]
};
animations?: {
clockwiseDirection: string; // option "clockwise" or 'counter_clockwise'
};
}
Name | Type | Default | Description |
---|---|---|---|
typyNo | number | 1 | Type of pie chart |
data | DataInput[] | no | Data to pass to the pie chart |
duration | number | 2000 | Time for animation to run |
mainPie | Parameter to create the main circle chart | ||
size | number | 280 | The size of the view box |
strokeWidth | number | 15 | The size of the stroke for the circle |
decorPie | Parameter to create a second circle for decorating the main circle | ||
sizeDecorCircular | number | 150 | The size of the second circle |
strokeWidthDecorCircular | number | 25 | The size of the stroke for the second circle |
separateSlice | boolean | true | Creates clear lines to cut graph pieces |
opacityDecorCircular | number | 0.5 | Adds opacity for the circle decor |
annotation | boolean | false | Adds a note for each fund |
logoSize | number | 35 | The size for inserting a logo in annotations or each slice |
colorCustomList | string[] | see below | The size for inserting a logo in annotations or each slice |
clockwiseDirection | string | clockwise or counter_clockwise | Direction of rotation of the circle |
interface DataInput {
title: string;
value: number;
}
Example:
const dataInput = [
{
title: 'Gold',
value: 23900.52,
},
{
title: 'USD',
value: 11100,
}]
<YourComponent>
<PieChart
typeNo={1}
data={dataInput}
duration={2000}
mainPie={
{
size: 280,
strokeWidth: 15
}
}
animations={{
clockwiseDirection: 'clockwise', // counter_clockwise or clockwise
}}
decorPie={{
sizeDecorCircular: 150,
strokeWidthDecorCircular: 25,
seperateSlice: true,
opacityDecorCircular: 0.5,
annotation: true,
}}
/>
</YourComponent>
interface CryptoLogos {
[key: string]: {uri: string};
}
const BTC = require('./PNG/btc.png');
const ETH = require('./PNG/eth.png');
const Crypto_Logo_PNG: CryptoLogos = {
"BTC": BTC,
"ETH": ETH,
};
export default Crypto_Logo_PNG;
** Note: The key for the logo must to the same with the title.
Example:
const dataInput = [{
title: 'BTC',
value: 23900.52,
}];
const Crypto_Logo_PNG: CryptoLogos = {
"BTC": BTC,
};
The title "BTC" have to equal the key of object logo "BTC" in this case.
// default color
const colorCustomList = [
'rgb(244,62,61)',
'rgb(254,165,61)',
'rgb(128,22,80)',
'rgb(131,242,58)',
'rgb(59,95,255)',
'rgb(252,60,222)',
'rgb(72,220,236)',
];
If you not pass this data or your data is large, the code will auto create random color.
You've successfully run and modified this package. 🥳