Skip to content

Commit

Permalink
Merge pull request #120 from Conflux-Chain/feature-datepicker
Browse files Browse the repository at this point in the history
feat: update Datepicker, useClickAway and Skeleton
  • Loading branch information
0x74616e67 authored Dec 1, 2020
2 parents 7708282 + c0ab71a commit 33f8589
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 23 deletions.
3 changes: 3 additions & 0 deletions components/date-picker/generate-picker/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import PickerTag from '../picker-tag'
import generateSinglePicker from './generate-single-picker'
import generateRangePicker from './generate-range-picker'
import { InputColors, InputVariantTypes, NormalSizes } from '../../utils/prop-types'
import useDatePickerHandle from './../use-date-picker-handle'

export const Components = { button: PickerButton, rangeItem: PickerTag }

Expand Down Expand Up @@ -143,6 +144,7 @@ function generatePicker<DateType>(generateConfig: GenerateConfig<DateType>) {
RangePicker: React.FC<RangePickerProps<DateType>>
TimePicker: typeof TimePicker
QuarterPicker: typeof QuarterPicker
useDatePickerHandle: typeof useDatePickerHandle
}

const MergedDatePicker = DatePicker as MergedDatePicker
Expand All @@ -152,6 +154,7 @@ function generatePicker<DateType>(generateConfig: GenerateConfig<DateType>) {
MergedDatePicker.RangePicker = RangePicker as React.FC<RangePickerProps<DateType>>
MergedDatePicker.TimePicker = TimePicker
MergedDatePicker.QuarterPicker = QuarterPicker
MergedDatePicker.useDatePickerHandle = useDatePickerHandle

return MergedDatePicker
}
Expand Down
5 changes: 4 additions & 1 deletion components/date-picker/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ export type RangePickerProps = BaseRangePickerProps<Dayjs>
// It's acceptable now, but the experience is not excellent.
// Think about `<input type="date/time" />`

export const DatePicker = generatePicker<Dayjs>(generateConfig)
const DatePicker = generatePicker<Dayjs>(generateConfig)
DatePicker.useDatePickerHandle = useDatePickerHandle

export { DatePicker }

export default DatePicker

Expand Down
21 changes: 21 additions & 0 deletions components/skeleton/__tests__/__snapshots__/index.test.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ exports[`Skeleton should render all variant correctly 1`] = `
height: 1.5714rem;
transform-style: preserve-3d;
}
.skeleton::after {
border-left: 1px solid #EFF2FA;
}
.skeleton.text {
margin-top: 0;
margin-bottom: 0;
Expand Down Expand Up @@ -102,6 +105,9 @@ exports[`Skeleton should render all variant correctly 2`] = `
height: 1.5714rem;
transform-style: preserve-3d;
}
.skeleton::after {
border-left: 1px solid #EFF2FA;
}
.skeleton.text {
margin-top: 0;
margin-bottom: 0;
Expand Down Expand Up @@ -174,6 +180,9 @@ exports[`Skeleton should render correctly 1`] = `
height: 1.5714rem;
transform-style: preserve-3d;
}
.skeleton::after {
border-left: 1px solid #EFF2FA;
}
.skeleton.text {
margin-top: 0;
margin-bottom: 0;
Expand Down Expand Up @@ -246,6 +255,9 @@ exports[`Skeleton should render correctly width custom with and height 1`] = `
height: 1.5714rem;
transform-style: preserve-3d;
}
.skeleton::after {
border-left: 1px solid #EFF2FA;
}
.skeleton.text {
margin-top: 0;
margin-bottom: 0;
Expand Down Expand Up @@ -318,6 +330,9 @@ exports[`Skeleton should render correctly width custom with and height 2`] = `
height: 1.5714rem;
transform-style: preserve-3d;
}
.skeleton::after {
border-left: 1px solid #EFF2FA;
}
.skeleton.text {
margin-top: 0;
margin-bottom: 0;
Expand Down Expand Up @@ -390,6 +405,9 @@ exports[`Skeleton should render correctly width custom with and height 3`] = `
height: 1.5714rem;
transform-style: preserve-3d;
}
.skeleton::after {
border-left: 1px solid #EFF2FA;
}
.skeleton.text {
margin-top: 0;
margin-bottom: 0;
Expand Down Expand Up @@ -548,6 +566,9 @@ exports[`Skeleton should render correctly with children 1`] = `
height: 1.5714rem;
transform-style: preserve-3d;
}
.skeleton::after {
border-left: 1px solid #EFF2FA;
}
.skeleton.text {
margin-top: 0;
margin-bottom: 0;
Expand Down
3 changes: 3 additions & 0 deletions components/skeleton/skeleton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ export const Skeleton: React.FC<SkeletonProps> = ({
height: 1.5714rem;
transform-style: preserve-3d;
}
.skeleton::after {
border-left: 1px solid #EFF2FA;
}
.skeleton.text {
margin-top: 0;
margin-bottom: 0;
Expand Down
25 changes: 17 additions & 8 deletions components/use-click-away/use-click-away.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
import { MutableRefObject, useEffect } from 'react'

const useClickAway = (
ref: MutableRefObject<HTMLElement | null>,
handler: (event: Event) => void,
) => {
type RefObject = MutableRefObject<HTMLElement | null>

const useClickAway = (refs: RefObject | Array<RefObject>, handler: (event: Event) => void) => {
useEffect(() => {
const callback = (event: Event) => {
const el = ref.current
if (!event || !el || el.contains((event as any).target)) return
handler(event)
let refsArray = Array.isArray(refs) ? refs : [refs]
let isAway = true
while (refsArray.length) {
const el = refsArray[0].current
if (!event || !el || el.contains((event as any).target)) {
isAway = false
refsArray = []
}
refsArray.shift()
}
if (isAway) {
handler(event)
}
}

document.addEventListener('click', callback)
return () => document.removeEventListener('click', callback)
}, [ref, handler])
}, [refs, handler])
}

export default useClickAway
7 changes: 3 additions & 4 deletions pages/en-us/components/date-picker.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import dayjs from 'dayjs'
import { useState } from 'react'
import { Layout, Playground, Attributes } from 'lib/components'
import { Link, Text, Code, Spacer, DatePicker, Divider, Button } from 'components'
import { useDatePickerHandle } from 'components/date-picker'
import NextLink from 'next/link'

export const meta = {
Expand Down Expand Up @@ -685,12 +684,12 @@ Select or input a date or time.
<Playground
title="With `UseDatePickerHandle`"
desc="Use `hooks` to capture changes."
scope={{ DatePicker, Spacer, Button, dayjs, Divider, useDatePickerHandle }}
scope={{ DatePicker, Spacer, Button, dayjs, Divider }}
code={`
() => {
const { RangePicker } = DatePicker
const { ref, setValue, getValue, focus, blur } = useDatePickerHandle()
const { ref: ref2, setValue: setValue2, getValue: getValue2, focus: focus2, blur: blur2 } = useDatePickerHandle()
const { ref, setValue, getValue, focus, blur } = DatePicker.useDatePickerHandle()
const { ref: ref2, setValue: setValue2, getValue: getValue2, focus: focus2, blur: blur2 } = DatePicker.useDatePickerHandle()
const setChange = () => {
console.log(ref)
setValue(dayjs())
Expand Down
19 changes: 9 additions & 10 deletions pages/zh-cn/components/date-picker.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import dayjs from 'dayjs'
import { useState } from 'react'
import { Layout, Playground, Attributes } from 'lib/components'
import { Link, Text, Code, Spacer, DatePicker, Divider, Button } from 'components'
import { useDatePickerHandle } from 'components/date-picker'
import NextLink from 'next/link'

export const meta = {
Expand Down Expand Up @@ -703,12 +702,12 @@ export const meta = {
<Playground
title="使用 `UseDatePickerHandle`"
desc="使用 `hooks` 捕获日期选择框的变化。"
scope={{ DatePicker, Spacer, Button, dayjs, Divider, useDatePickerHandle }}
scope={{ DatePicker, Spacer, Button, dayjs, Divider }}
code={`
() => {
const { RangePicker } = DatePicker
const { ref, setValue, getValue, focus, blur } = useDatePickerHandle()
const { ref: ref2, setValue: setValue2, getValue: getValue2, focus: focus2, blur: blur2 } = useDatePickerHandle()
const { ref, setValue, getValue, focus, blur } = DatePicker.useDatePickerHandle()
const { ref: ref2, setValue: setValue2, getValue: getValue2, focus: focus2, blur: blur2 } = DatePicker.useDatePickerHandle()
const setChange = () => {
console.log(ref)
setValue(dayjs())
Expand Down Expand Up @@ -892,12 +891,12 @@ export const meta = {

<Attributes.Title>共同的方法</Attributes.Title>

| 名称 | 描述 | 参数 | 返回值 |
| -------------- | -------- | -------------------- | -------------------- |
| **blur()** | 移除焦点 | - | - |
| **focus()** | 获取焦点 | - | - |
| **setValue()** | 设置值 | `dayjs` \| `dayjs[]` \| `null` | - |
| **getValue()** | 获取值 | - | `dayjs` \| `dayjs[]` \| `null` |
| 名称 | 描述 | 参数 | 返回值 |
| -------------- | -------- | ------------------------------ | ------------------------------ |
| **blur()** | 移除焦点 | - | - |
| **focus()** | 获取焦点 | - | - |
| **setValue()** | 设置值 | `dayjs` \| `dayjs[]` \| `null` | - |
| **getValue()** | 获取值 | - | `dayjs` \| `dayjs[]` \| `null` |

<Attributes.Title>useDatePickerHandle</Attributes.Title>

Expand Down

0 comments on commit 33f8589

Please sign in to comment.