react-native-cn-month-year-picker
Version:
React Native Month Picker component for iOS & Android
165 lines (113 loc) • 4.37 kB
Markdown
# react-native-cn-month-year-picker
React Native month picker component for iOS and Android.
| UI Mode | Android | iOS |
| ----------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------ |
| <p align="center">**_Light_** | <img align="center" src="./screenshots/android_light.png" width="120"> | <img align="center" src="./screenshots/ios_light.png" width="120"> |
| <p align="center">**_Dark_** | <img align="center" src="./screenshots/android_dark.png" width="120"> | <img align="center" src="./screenshots/ios_dark.png" width="120"> |

## Getting started
`$ npm install react-native-month-year-picker --save`
or
`$ yarn add react-native-month-year-picker`
### For react-native@0.60.0 or above
As [react-native@0.60.0](https://reactnative.dev/blog/2019/07/03/version-60) or above supports autolinking, so there is no need to run linking process.
Read more about autolinking [here](https://github.com/react-native-community/cli/blob/master/docs/autolinking.md).
#### iOS
CocoaPods on iOS needs this extra step
```
npx pod-install
```
## Usage
```javascript
import React, { useState, useCallback } from "react";
import { View, SafeAreaView, Text } from "react-native";
import MonthPicker from "react-native-cn-month-year-picker";
const App = () => {
const [date, setDate] = useState(new Date());
const [show, setShow] = useState(false);
const showPicker = useCallback((value) => setShow(value), []);
const onValueChange = useCallback(
(event, newDate) => {
const selectedDate = newDate || date;
showPicker(false);
setDate(selectedDate);
},
[date, showPicker]
);
return (
<SafeAreaView>
<Text>Month Year Picker Example</Text>
<Text>{moment(date, "MM-YYYY")}</Text>
<TouchableOpacity onPress={() => showPicker(true)}>
<Text>OPEN</Text>
</TouchableOpacity>
{show && (
<MonthPicker
onChange={onValueChange}
value={date}
minimumDate={new Date()}
maximumDate={new Date(2025, 5)}
locale="ko"
/>
)}
</SafeAreaView>
);
};
export default App;
```
## Props
#### `value` (`required`)
Defines the date value used in the component.
```js
<RNMonthPicker value={new Date()} />
```
#### `locale` (`optional`)
Defines the month list locale. If not sent, it defaults to device's language.
```js
<RNMonthPicker locale="ru" />
```
#### `mode` (`optional`)
Defines the month list display mode. It could be either `full`, `short`, `number` or `shortNumber`. Default `full`.
| mode | display |
| --------------- | ----------- |
| **full** | _September_ |
| **short** | _Sep_ |
| **number** | _09_ |
| **shortNumber** | _9_ |
```js
<RNMonthPicker mode="number" />
```
#### `autoTheme` (`optional`)
Enables phone's UI Mode color recognition; for Android 10+ and iOS 13+. Lower OS versions will always be Light Mode. Default `true`.
```js
<RNMonthPicker autoTheme={false} />
```
#### `maximumDate` (`optional`)
Defines the maximum date that can be selected. Use year and month constructor.
```js
<RNMonthPicker maximumDate={new Date(2030, 10)} />
```
#### `minimumDate` (`optional`)
Defines the minimum date that can be selected. Use year and month constructor.
```js
<RNMonthPicker minimumDate={new Date(2020, 5)} />
```
#### `okButton` (`optional`)
Picker modal confirmation button text. Default `Done`.
```js
<RNMonthPicker okButton="Confirm" />
```
#### `cancelButton` (`optional`)
Picker modal cancelation button text. Default `Cancel`.
```js
<RNMonthPicker cancelButton="Abort" />
```
#### `neutralButton` (`optional`)
Picker modal neutral button text. If not sent, button won't appear. Default `null`.
```js
<RNMonthPicker neutralButton="Delete" />
```
## Running example
1. Install required pods by running `yarn pod:install`.
2. Run `yarn start` to start Metro Bundler.
3. Run `yarn start:ios` or `yarn start:android`.