Skip to content

Commit 95b80d7

Browse files
committed
DateTimeRangePicker - added the option to disable it and to disable the weekends
1 parent 542f1b7 commit 95b80d7

File tree

4 files changed

+166
-70
lines changed

4 files changed

+166
-70
lines changed

library/src/components/DateTimeRange.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ export interface DateTimeRangeProps {
1313
endDate?: string
1414
locale: string
1515
weekStartDate: WeekDay
16+
disableWeekend?: boolean
17+
18+
disabled?: boolean
19+
1620
onChange: (start: string, end: string) => void
1721
onCollision: (dateString: string) => void
1822
}
@@ -51,6 +55,15 @@ function checkCollisions(to: Dayjs, disabledDates: Dayjs[]) {
5155
return intersection
5256
}
5357

58+
function weekendFilter(date: string) {
59+
const dayOfWeek = dayjs(date).day()
60+
return dayOfWeek === 0 || dayOfWeek === 6
61+
}
62+
63+
function allDisabledFilter(date: string) {
64+
return true
65+
}
66+
5467
export const DateTimeRange: FC<DateTimeRangeProps> = ({ ...props }) => {
5568
const [startDate, setStartDate] = useState(
5669
props.startDate ? dayjs(props.startDate) : undefined,
@@ -97,6 +110,13 @@ export const DateTimeRange: FC<DateTimeRangeProps> = ({ ...props }) => {
97110
disabled={props.disabledDates}
98111
previouslySelected={[]}
99112
selected={selectedDates}
113+
disabledDateFilter={
114+
props.disabled
115+
? allDisabledFilter
116+
: props.disableWeekend
117+
? weekendFilter
118+
: undefined
119+
}
100120
onSelect={(event) => {
101121
const selectedDate = event.iso
102122
onDateSelect(selectedDate)

package-lock.json

Lines changed: 34 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

showcase/public/showcase-sources.txt

Lines changed: 73 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -424,32 +424,76 @@ function DateTimePickerShowcase ( props: ShowcaseProps ) {
424424
}
425425

426426
export default DateTimePickerShowcase;
427-
import React from "react";
428-
import ShowcaseWrapperItem, { ShowcaseProps } from "../../ShowCaseWrapperItem/ShowcaseWrapperItem";
427+
import React, { useState } from "react"
428+
import ShowcaseWrapperItem, {
429+
ShowcaseProps,
430+
} from "../../ShowCaseWrapperItem/ShowcaseWrapperItem"
429431
import { DateTimeRange } from "@linked-planet/ui-kit-ts"
430-
import dayjs from "dayjs";
431-
432-
function DateTimeRangePickerShowcase ( props: ShowcaseProps ) {
432+
import dayjs from "dayjs"
433433

434+
function DateTimeRangePickerShowcase(props: ShowcaseProps) {
434435
// region: datetime-range-picker
435-
const today = dayjs().format( "yyyy-MM-DD" )
436-
const todayPlus2 = dayjs().add( 2, "day" ).format( "yyyy-MM-DD" )
437-
const todayPlus10 = dayjs().add( 10, "day" ).format( "yyyy-MM-DD" )
436+
const today = dayjs().format("YYYY-MM-DD")
437+
const todayPlus2 = dayjs().add(2, "day").format("YYYY-MM-DD")
438+
const todayPlus10 = dayjs().add(10, "day").format("YYYY-MM-DD")
439+
440+
const [startDate, setStartDate] = useState<string>()
441+
const [endDate, setEndDate] = useState<string>()
442+
const [weekendDisabled, setWeekendDisabled] = useState(false)
443+
const [disabled, setDisabled] = useState(false)
444+
438445
const example = (
439-
<div style={ { minWidth: 300 } }>
446+
<div style={{ minWidth: 300 }}>
447+
<div
448+
style={{
449+
display: "grid",
450+
gridTemplateColumns: "1fr 1fr",
451+
}}
452+
>
453+
<div>Start Date: {startDate}</div>
454+
<div>End Date: {endDate}</div>
455+
<label htmlFor="disableWeekends">
456+
Disable Weekends
457+
<input
458+
id="disableWeekends"
459+
type="checkbox"
460+
onChange={(e) => {
461+
if (e.target.checked) {
462+
setWeekendDisabled(true)
463+
} else {
464+
setWeekendDisabled(false)
465+
}
466+
}}
467+
/>
468+
</label>
469+
<label htmlFor="disableAll">
470+
Disabled
471+
<input
472+
id="disableAll"
473+
type="checkbox"
474+
onChange={(e) => {
475+
if (e.target.checked) {
476+
setDisabled(true)
477+
} else {
478+
setDisabled(false)
479+
}
480+
}}
481+
/>
482+
</label>
483+
</div>
440484
<DateTimeRange
441-
minDate={ today }
442-
maxDate={ todayPlus10 }
443-
disabledDates={ [ todayPlus2 ] }
444-
locale="de-de"
445-
onCollision={ () =>
446-
console.info( "Collision detected" )
447-
}
448-
onChange={ ( start: string, end: string ) => {
449-
console.info( "Selected Range: ", start, end )
450-
}
451-
}
452-
weekStartDate={ 0 }
485+
minDate={today}
486+
maxDate={todayPlus10}
487+
disabledDates={[todayPlus2]}
488+
locale="de-DE"
489+
onCollision={() => console.info("Collision detected")}
490+
onChange={(start: string, end: string) => {
491+
setStartDate(start)
492+
setEndDate(end)
493+
}}
494+
startDate={startDate}
495+
endDate={endDate}
496+
weekStartDate={0}
453497
/>
454498
</div>
455499
)
@@ -459,25 +503,20 @@ function DateTimeRangePickerShowcase ( props: ShowcaseProps ) {
459503
<ShowcaseWrapperItem
460504
name="Date time Range picker"
461505
sourceCodeExampleId="datetime-range-picker"
462-
overallSourceCode={ props.overallSourceCode }
463-
packages={ [
506+
overallSourceCode={props.overallSourceCode}
507+
packages={[
464508
{
465509
name: "@atlaskit/datetime-picker",
466-
url: "https://atlassian.design/components/datetime-picker/examples"
467-
}
468-
] }
469-
470-
examples={
471-
[
472-
( example ),
473-
]
474-
}
510+
url: "https://atlassian.design/components/datetime-picker/examples",
511+
},
512+
]}
513+
examples={[example]}
475514
/>
476515
)
477-
478516
}
479517

480-
export default DateTimeRangePickerShowcase;
518+
export default DateTimeRangePickerShowcase
519+
481520
import React from "react";
482521
import ShowcaseWrapperItem, { ShowcaseProps } from "../../ShowCaseWrapperItem/ShowcaseWrapperItem";
483522
import DropdownMenu, { DropdownItemCheckbox, DropdownItemGroup, DropdownItem } from "@atlaskit/dropdown-menu"

showcase/src/components/showcase/wrapper/DateTimeRangePickerShowcase.tsx

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,47 @@ function DateTimeRangePickerShowcase(props: ShowcaseProps) {
1313

1414
const [startDate, setStartDate] = useState<string>()
1515
const [endDate, setEndDate] = useState<string>()
16+
const [weekendDisabled, setWeekendDisabled] = useState(false)
17+
const [disabled, setDisabled] = useState(false)
1618

1719
const example = (
1820
<div style={{ minWidth: 300 }}>
19-
<div>
21+
<div
22+
style={{
23+
display: "grid",
24+
gridTemplateColumns: "1fr 1fr",
25+
}}
26+
>
2027
<div>Start Date: {startDate}</div>
2128
<div>End Date: {endDate}</div>
29+
<label htmlFor="disableWeekends">
30+
Disable Weekends
31+
<input
32+
id="disableWeekends"
33+
type="checkbox"
34+
onChange={(e) => {
35+
if (e.target.checked) {
36+
setWeekendDisabled(true)
37+
} else {
38+
setWeekendDisabled(false)
39+
}
40+
}}
41+
/>
42+
</label>
43+
<label htmlFor="disableAll">
44+
Disabled
45+
<input
46+
id="disableAll"
47+
type="checkbox"
48+
onChange={(e) => {
49+
if (e.target.checked) {
50+
setDisabled(true)
51+
} else {
52+
setDisabled(false)
53+
}
54+
}}
55+
/>
56+
</label>
2257
</div>
2358
<DateTimeRange
2459
minDate={today}
@@ -32,7 +67,9 @@ function DateTimeRangePickerShowcase(props: ShowcaseProps) {
3267
}}
3368
startDate={startDate}
3469
endDate={endDate}
35-
weekStartDate={0}
70+
weekStartDate={1}
71+
disableWeekend={weekendDisabled}
72+
disabled={disabled}
3673
/>
3774
</div>
3875
)

0 commit comments

Comments
 (0)