@component-hook/picker
v0.2.1
Published
Picker component with vue3 and react
Downloads
354
Maintainers
Readme
@component-hook/picker
Picker component with vue3 and react (DEMO)
Features
- Picker List
- Supports single-column and concatenated data
- Scroll wheel 3D effect
- Custom title, confirm and cancel text, class and color
- Custom wheel swipe Time
- Built-in date and time data
- Supports typescript
Installation
$ npm install @component-hook/picker
# or use yarn
$ yarn add @component-hook/picker
# or use pnpm
$ pnpm install @component-hook/picker
Usage with Vue
<script setup>
import { ref, reactive } from 'vue';
import Picker from '@component-hook/picker/vue';
const currentSelect = ref({});
const anchor = ref([0, 1, 2]);
const currentSingle = ref({});
const anchorSingle = ref(1);
const currentDate = ref([2022, 7, 7]);
const currentTime = ref([]);
const isShowPicker = ref(false);
const isShowDate = ref(false);
const isShowTime = ref(false);
const singleData = [
{ langType: 2, code: 'vi', original: 'Tiếng Việt' },
{ langType: 0, code: 'en', original: 'English' },
{ langType: 1, code: 'cn', original: '中文' },
];
const dataList = ref([singleData, singleData, singleData]);
const options = reactive({
confirmColor: '#000',
cancelClass: 'test',
titleText: 'Title',
});
function onConfirm(value) {
currentSelect.value = value;
}
function onCancel() {
console.log('cancel');
}
</script>
<template>
<picker
v-model:is-show-picker="isShowPicker"
v-model:anchor="anchor"
:data="dataList"
:show-key="['original', 'original', 'original']"
:options="options"
:swipe-time="500"
@confirm="onConfirm"
@cancel="onCancel"
/>
<picker
v-model:is-show-picker="isShowSingle"
v-model:anchor="anchorSingle"
:data="singleData"
show-key="original"
:options="options"
/>
<picker
v-model:is-show-picker="isShowDate"
v-model:anchor="currentDate"
type="date"
:options="{ titleText: 'date selector' }"
/>
<picker
v-model:is-show-picker="isShowTime"
v-model:anchor="currentTime"
type="time"
:options="{ titleText: 'time selector' }"
/>
</template>
Usage with React
import { useState } from 'react';
import Picker from '@component-hook/picker/react';
const singleData = [
{ langType: 2, code: 'vi', original: 'Tiếng Việt' },
{ langType: 0, code: 'en', original: 'English' },
{ langType: 1, code: 'cn', original: '中文' },
];
const cascadeData = [singleData, singleData, singleData];
const options = {
confirmColor: '#000',
cancelClass: 'test',
titleText: 'Title',
};
function PickerExample() {
const [currentSelect, setCurrentSelect] = useState({});
const [anchor, setAnchor] = useState([0, 1, 2]);
const [anchorSingle, setAnchorSingle] = useState(0);
const [currentDate, setCurrentDate] = useState([2022, 7, 7]);
const [currentTime, setCurrentTime] = useState([]);
const [showPicker, setShowPicker] = useState(false);
const [showSingle, setShowSingle] = useState(false);
const [showDate, setShowDate] = useState(false);
const [showTime, setShowTime] = useState(false);
function onConfirm(value) {
setCurrentSelect(value);
}
return (
<>
<Picker
isShowPicker={showPicker}
data={cascadeData}
showKey={['original', 'original', 'original']}
options={{ titleText: 'cascade selector' }}
anchor={anchor}
onChangeAnchor={setAnchor}
onClose={() => setShowPicker(false)}
onConfirm={onConfirm}
onCancel={onCancel}
/>
<Picker
data={singleData}
isShowPicker={showSingle}
anchor={anchorSingle}
showKey="original"
options={{ titleText: 'single selector' }}
onChangeAnchor={setAnchorSingle}
onClose={() => setShowSingle(false)}
/>
<Picker
isShowPicker={showDate}
onClose={() => setShowDate(false)}
anchor={currentDate}
type="date"
options={{ titleText: 'date selector' }}
onChangeAnchor={setCurrentDate}
/>
<Picker
isShowPicker={showTime}
onClose={() => setShowTime(false)}
anchor={currentTime}
type="time"
options={{ titleText: 'time selector' }}
onChangeAnchor={setCurrentTime}
/>
</>
);
}
function onCancel() {
console.log('cancel');
}
Attributes (Common)
| Name | Required | Type | Description | Default |
| ------------ | -------- | --------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------- |
| isShowPicker | true | boolean
| Control picker show (vue
use v-model
) | — |
| anchor | true | number
/ number[]
| Picker current select index (single column for number
、 multiple columns for number[]
, vue
use v-model
) | — |
| data | false | array
| Picker list [1, 2, 3]
or [[1, 2, 3], [1, 2, 3]]
| — |
| type | false | string
| Built-in picker type, no need to pass in data (date, time) | — |
| showKey | false | string
/ string[]
| Wheel options name (object key) | — |
| swipeTime | false | number
| Wheel swipe Time | 500 |
| options | false | object
| Custom text, color and class | See below for details |
Attributes (React)
| Name | Required | Type | Description | Default |
| -------------- | -------- | ------------------------------------------------ | -------------------------------------------------- | ------- |
| onClose | true | Function () => void
| close picker show (need to update state) | — |
| onChangeAnchor | true | Function (anchor: number
/ number[]) => void
| update picker anchor (need to update anchor state) | — |
Options Attribute
{
"cancelClass": "",
"confirmClass": "",
"titleClass": "",
"cancelColor": "#999",
"confirmColor": "#42b983",
"titleColor": "",
"cancelText": "Cancel",
"confirmText": "Confirm",
"titleText": ""
}
Events
| Event | Description | Type |
| :--------------------------------- | :------------------------------------------- | :---------------------------------------- |
| confirm(vue
), onConfirm(react
) | Triggered when the confirm button is clicked | Function (value: selected item) => void
|
| cancel(vue
), onCancel(react
) | Triggered when the cancel button is clicked | Function () => void
|