playbook_ui 6.0.0 → 6.0.1.pre.alpha2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +1 -0
- data/app/pb_kits/playbook/data/menu.yml +1 -0
- data/app/pb_kits/playbook/index.js +2 -0
- data/app/pb_kits/playbook/packs/examples.js +2 -0
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +36 -0
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +98 -0
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +59 -0
- data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +38 -0
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +91 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb +1 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx +12 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb +24 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx +30 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb +43 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx +48 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +4 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx +13 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb +19 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx +25 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb +4 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx +13 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +14 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx +22 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb +4 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx +13 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +23 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/index.js +8 -0
- data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +1 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +3 -1
- data/app/pb_kits/playbook/pb_form/form_builder.rb +1 -0
- data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +15 -0
- data/app/pb_kits/playbook/vendor.js +6 -0
- data/lib/playbook/version.rb +1 -1
- metadata +30 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c8fe3b4eef7ad0d508540d6fe72d079e72631adeb5a52031c77a756e9bf10146
|
|
4
|
+
data.tar.gz: 5c528735df89a89d65c89b85076588ded161e9dff15facb52bc68996dc3645cb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 237b65d3cad5fcb2c54f4f340579222879a2f0aca3b224429f65149ca2a5afe8e4018e394f8f3e49c9f51654ac0093fd24510854efccd34628c6a9bda4dca496
|
|
7
|
+
data.tar.gz: f3d0e0cb422701742900eda75a4c870476b840a1196af4abb56197be0ad6fd0a4ac79e02edc462ccd4cb00a365601f8c7199aa4355526426f66fbab70efc0925
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
@import 'pb_currency/currency';
|
|
15
15
|
@import 'pb_dashboard_value/dashboard_value';
|
|
16
16
|
@import 'pb_date/date';
|
|
17
|
+
@import 'pb_date_picker/date_picker';
|
|
17
18
|
@import 'pb_date_range_inline/date_range_inline';
|
|
18
19
|
@import 'pb_date_range_stacked/date_range_stacked';
|
|
19
20
|
@import 'pb_date_stacked/date_stacked';
|
|
@@ -13,6 +13,7 @@ export Contact from './pb_contact/_contact.jsx'
|
|
|
13
13
|
export Currency from './pb_currency/_currency.jsx'
|
|
14
14
|
export DashboardValue from './pb_dashboard_value/_dashboard_value.jsx'
|
|
15
15
|
export Date from './pb_date/_date.jsx'
|
|
16
|
+
export DatePicker from './pb_date_picker/_date_picker.jsx'
|
|
16
17
|
export DateRangeInline from './pb_date_range_inline/_date_range_inline.jsx'
|
|
17
18
|
export DateRangeStacked from './pb_date_range_stacked/_date_range_stacked.jsx'
|
|
18
19
|
export DateStacked from './pb_date_stacked/_date_stacked.jsx'
|
|
@@ -89,6 +90,7 @@ export dashboardValueSettings from './pb_dashboard_value/dashboardValueSettings'
|
|
|
89
90
|
|
|
90
91
|
// Other JS/Plugins
|
|
91
92
|
export pbChart from './plugins/pb_chart.js'
|
|
93
|
+
export datePickerHelper from './pb_date_picker/date_picker_helper.js'
|
|
92
94
|
export PbTypeahead from './pb_typeahead'
|
|
93
95
|
export PbPopover from './pb_popover'
|
|
94
96
|
export PbTable from './pb_table'
|
|
@@ -27,6 +27,7 @@ import * as Contact from 'pb_contact/docs'
|
|
|
27
27
|
import * as Currency from 'pb_currency/docs'
|
|
28
28
|
import * as DashboardValue from 'pb_dashboard_value/docs'
|
|
29
29
|
import * as Date from 'pb_date/docs'
|
|
30
|
+
import * as DatePicker from 'pb_date_picker/docs'
|
|
30
31
|
import * as DateRangeInline from 'pb_date_range_inline/docs'
|
|
31
32
|
import * as DateRangeStacked from 'pb_date_range_stacked/docs'
|
|
32
33
|
import * as DateStacked from 'pb_date_stacked/docs'
|
|
@@ -105,6 +106,7 @@ WebpackerReact.setup({
|
|
|
105
106
|
...Currency,
|
|
106
107
|
...DashboardValue,
|
|
107
108
|
...Date,
|
|
109
|
+
...DatePicker,
|
|
108
110
|
...DateRangeInline,
|
|
109
111
|
...DateRangeStacked,
|
|
110
112
|
...DateStacked,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<%= content_tag(:div,
|
|
2
|
+
aria: object.aria,
|
|
3
|
+
class: object.classname + " " + object.error_class,
|
|
4
|
+
data: object.data,
|
|
5
|
+
id: object.id) do %>
|
|
6
|
+
<%= pb_rails("caption", props: { text: object.label }) %>
|
|
7
|
+
<div class="input_wrapper">
|
|
8
|
+
<input
|
|
9
|
+
autocomplete="off"
|
|
10
|
+
id="<%= object.picker_id %>"
|
|
11
|
+
/>
|
|
12
|
+
<% if object.error %>
|
|
13
|
+
<%= pb_rails("body", props: {
|
|
14
|
+
status: "negative",
|
|
15
|
+
text: object.error
|
|
16
|
+
}) %>
|
|
17
|
+
<% end %>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<%= javascript_tag do %>
|
|
21
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
22
|
+
datePickerHelper({
|
|
23
|
+
defaultDate: "<%= object.default_date %>",
|
|
24
|
+
disableDate: <%=raw object.disable_date %>,
|
|
25
|
+
disableRange: <%=raw object.disable_range.to_json %>,
|
|
26
|
+
disableWeekdays: <%=raw object.disable_weekdays %>,
|
|
27
|
+
format: "<%= object.format %>",
|
|
28
|
+
maxDate: "<%= object.max_date %>",
|
|
29
|
+
minDate: "<%= object.min_date %>",
|
|
30
|
+
mode: "<%= object.mode %>",
|
|
31
|
+
pickerId: "<%= object.picker_id %>",
|
|
32
|
+
propModel: "rails"
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
<% end %>
|
|
36
|
+
<% end %>
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/* @flow */
|
|
2
|
+
|
|
3
|
+
import React, { useEffect } from 'react'
|
|
4
|
+
import classnames from 'classnames'
|
|
5
|
+
import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
|
|
6
|
+
import { spacing } from '../utilities/spacing.js'
|
|
7
|
+
import flatpickr from 'flatpickr'
|
|
8
|
+
import { Body, Caption } from '../'
|
|
9
|
+
import datePickerHelper from './date_picker_helper.js'
|
|
10
|
+
|
|
11
|
+
type DatePickerProps = {
|
|
12
|
+
aria?: object,
|
|
13
|
+
className?: String,
|
|
14
|
+
data?: object,
|
|
15
|
+
defaultDate?: String,
|
|
16
|
+
disableDate?: Array,
|
|
17
|
+
disableRange?: Array,
|
|
18
|
+
disableWeekdays?: Array,
|
|
19
|
+
error?: String,
|
|
20
|
+
format?: String,
|
|
21
|
+
id?: String,
|
|
22
|
+
label?: String,
|
|
23
|
+
maxDate: String,
|
|
24
|
+
minDate: String,
|
|
25
|
+
mode?: String,
|
|
26
|
+
pickerId?: String,
|
|
27
|
+
}
|
|
28
|
+
const DatePicker = (props: DatePickerProps) => {
|
|
29
|
+
const {
|
|
30
|
+
aria = {},
|
|
31
|
+
className,
|
|
32
|
+
data = {},
|
|
33
|
+
defaultDate = '',
|
|
34
|
+
disableDate = null,
|
|
35
|
+
disableRange = null,
|
|
36
|
+
disableWeekdays = null,
|
|
37
|
+
error,
|
|
38
|
+
format = 'm/d/Y',
|
|
39
|
+
id,
|
|
40
|
+
label = 'Date Picker',
|
|
41
|
+
maxDate,
|
|
42
|
+
minDate,
|
|
43
|
+
mode = 'single',
|
|
44
|
+
pickerId,
|
|
45
|
+
} = props
|
|
46
|
+
|
|
47
|
+
const ariaProps = buildAriaProps(aria)
|
|
48
|
+
const dataProps = buildDataProps(data)
|
|
49
|
+
const classes = classnames(
|
|
50
|
+
buildCss('pb_date_picker'),
|
|
51
|
+
className,
|
|
52
|
+
spacing(props),
|
|
53
|
+
error ? 'error' : null,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
datePickerHelper({
|
|
58
|
+
defaultDate: defaultDate,
|
|
59
|
+
disableDate: disableDate,
|
|
60
|
+
disableRange: disableRange,
|
|
61
|
+
disableWeekdays: disableWeekdays,
|
|
62
|
+
format: format,
|
|
63
|
+
maxDate: maxDate,
|
|
64
|
+
minDate: minDate,
|
|
65
|
+
mode: mode,
|
|
66
|
+
pickerId: pickerId,
|
|
67
|
+
propModel: 'React',
|
|
68
|
+
})
|
|
69
|
+
}, [])
|
|
70
|
+
|
|
71
|
+
return (
|
|
72
|
+
<div
|
|
73
|
+
{...ariaProps}
|
|
74
|
+
{...dataProps}
|
|
75
|
+
className={classes}
|
|
76
|
+
id={id}
|
|
77
|
+
>
|
|
78
|
+
{className}
|
|
79
|
+
<Caption
|
|
80
|
+
text={label}
|
|
81
|
+
/>
|
|
82
|
+
<div className="input_wrapper">
|
|
83
|
+
<input
|
|
84
|
+
autoComplete="off"
|
|
85
|
+
id={pickerId}
|
|
86
|
+
/>
|
|
87
|
+
<If condition={error}>
|
|
88
|
+
<Body
|
|
89
|
+
status="negative"
|
|
90
|
+
text={error}
|
|
91
|
+
/>
|
|
92
|
+
</If>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export default DatePicker
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
@import "~flatpickr/dist/flatpickr.css";
|
|
2
|
+
@import "../pb_textarea/textarea_mixin";
|
|
3
|
+
@import "../pb_title/title_mixin";
|
|
4
|
+
@import "../tokens/colors";
|
|
5
|
+
@import "../pb_caption/caption_mixin";
|
|
6
|
+
|
|
7
|
+
[class^=pb_date_picker] {
|
|
8
|
+
// input styles
|
|
9
|
+
[class^=pb_caption_kit] {
|
|
10
|
+
margin-bottom: $space_xs;
|
|
11
|
+
display: block;
|
|
12
|
+
}
|
|
13
|
+
.input_wrapper {
|
|
14
|
+
margin-bottom: $space_sm;
|
|
15
|
+
|
|
16
|
+
.flatpickr-wrapper {
|
|
17
|
+
display: block;
|
|
18
|
+
input::placeholder {
|
|
19
|
+
@include pb_body_light;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
> input:first-child {
|
|
23
|
+
@include pb_textarea_light;
|
|
24
|
+
@include pb_title_4;
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
input:focus, input:-webkit-autofill:focus {
|
|
29
|
+
@include pb_textarea_focus;
|
|
30
|
+
-webkit-box-shadow: 0 0 0px 1000px $focus_input_light inset;
|
|
31
|
+
transition: background-color 5000s ease-in-out 0s;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
&.error {
|
|
37
|
+
[class^=pb_body_kit] {
|
|
38
|
+
margin-top: $space_xs / 2;
|
|
39
|
+
}
|
|
40
|
+
.flatpickr-wrapper {
|
|
41
|
+
> input:first-child {
|
|
42
|
+
border-color: $error;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// date-picker styles
|
|
49
|
+
|
|
50
|
+
div.flatpickr-weekdays {
|
|
51
|
+
margin-top: 5px;
|
|
52
|
+
}
|
|
53
|
+
span.flatpickr-weekday {
|
|
54
|
+
@include caption;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.pb_popover_body {
|
|
58
|
+
overflow: visible !important;
|
|
59
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Playbook
|
|
4
|
+
module PbDatePicker
|
|
5
|
+
class DatePicker
|
|
6
|
+
include Playbook::Props
|
|
7
|
+
|
|
8
|
+
partial "pb_date_picker/date_picker"
|
|
9
|
+
|
|
10
|
+
prop :default_date, type: Playbook::Props::String,
|
|
11
|
+
default: ""
|
|
12
|
+
prop :disable_date, type: Playbook::Props::Array,
|
|
13
|
+
default: []
|
|
14
|
+
prop :disable_range, type: Playbook::Props::Array,
|
|
15
|
+
default: []
|
|
16
|
+
prop :disable_weekdays, type: Playbook::Props::Array,
|
|
17
|
+
default: []
|
|
18
|
+
prop :error, type: Playbook::Props::String
|
|
19
|
+
prop :format, type: Playbook::Props::String,
|
|
20
|
+
default: "m/d/Y"
|
|
21
|
+
prop :label, type: Playbook::Props::String,
|
|
22
|
+
default: "Date Picker"
|
|
23
|
+
prop :max_date, type: Playbook::Props::String
|
|
24
|
+
prop :min_date, type: Playbook::Props::String
|
|
25
|
+
prop :mode, type: Playbook::Props::String,
|
|
26
|
+
default: "single"
|
|
27
|
+
prop :picker_id, type: Playbook::Props::String
|
|
28
|
+
|
|
29
|
+
def classname
|
|
30
|
+
generate_classname("pb_date_picker")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def error_class
|
|
34
|
+
error ? "error" : ""
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import flatpickr from 'flatpickr'
|
|
2
|
+
|
|
3
|
+
const datePickerHelper = (config) => {
|
|
4
|
+
const {
|
|
5
|
+
defaultDate,
|
|
6
|
+
disableDate,
|
|
7
|
+
disableRange,
|
|
8
|
+
disableWeekdays,
|
|
9
|
+
format,
|
|
10
|
+
maxDate,
|
|
11
|
+
minDate,
|
|
12
|
+
mode,
|
|
13
|
+
pickerId,
|
|
14
|
+
propModel,
|
|
15
|
+
} = config
|
|
16
|
+
|
|
17
|
+
const defaultDateGetter = () => {
|
|
18
|
+
if (defaultDate !== '') {
|
|
19
|
+
if (propModel === 'rails' && defaultDate.includes('[') == true) {
|
|
20
|
+
return JSON.parse(defaultDate.replace(/"/g, '"'))
|
|
21
|
+
} else if (defaultDate === 'blank') {
|
|
22
|
+
return ''
|
|
23
|
+
} else {
|
|
24
|
+
return defaultDate
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (mode === 'single' && defaultDate === '') {
|
|
28
|
+
return new Date()
|
|
29
|
+
} else if (mode === 'range' && defaultDate === '') {
|
|
30
|
+
const today = new Date()
|
|
31
|
+
const tomorrow = new Date(today)
|
|
32
|
+
tomorrow.setDate(tomorrow.getDate() + 1)
|
|
33
|
+
return [today, tomorrow]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const disabledParser = () => {
|
|
37
|
+
if (disableDate && disableDate.length > 0) {
|
|
38
|
+
return disableDate
|
|
39
|
+
} else if (disableRange && disableRange.length > 0) {
|
|
40
|
+
return disableRange
|
|
41
|
+
} else {
|
|
42
|
+
return []
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
flatpickr(`#${pickerId}`, {
|
|
47
|
+
allowInput: true,
|
|
48
|
+
dateFormat: format,
|
|
49
|
+
defaultDate: defaultDateGetter(),
|
|
50
|
+
disable: disableWeekdays && disableWeekdays.length > 0 ? [
|
|
51
|
+
(date) => {
|
|
52
|
+
const weekdayObj = {
|
|
53
|
+
Sunday: 0,
|
|
54
|
+
Monday: 1,
|
|
55
|
+
Tuesday: 2,
|
|
56
|
+
Wednesday: 3,
|
|
57
|
+
Thursday: 4,
|
|
58
|
+
Friday: 5,
|
|
59
|
+
Saturday: 6,
|
|
60
|
+
}
|
|
61
|
+
return (
|
|
62
|
+
// try to refactor with for loop
|
|
63
|
+
date.getDay() === weekdayObj[disableWeekdays[0]] ||
|
|
64
|
+
date.getDay() === weekdayObj[disableWeekdays[1]] ||
|
|
65
|
+
date.getDay() === weekdayObj[disableWeekdays[2]] ||
|
|
66
|
+
date.getDay() === weekdayObj[disableWeekdays[3]] ||
|
|
67
|
+
date.getDay() === weekdayObj[disableWeekdays[4]] ||
|
|
68
|
+
date.getDay() === weekdayObj[disableWeekdays[5]] ||
|
|
69
|
+
date.getDay() === weekdayObj[disableWeekdays[6]]
|
|
70
|
+
)
|
|
71
|
+
},
|
|
72
|
+
] : disabledParser(),
|
|
73
|
+
maxDate: maxDate,
|
|
74
|
+
minDate: minDate,
|
|
75
|
+
mode: mode,
|
|
76
|
+
static: true,
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
document.querySelector(`#${pickerId}`).addEventListener('input', (e) => {
|
|
80
|
+
const picker = document.querySelector(`#${pickerId}`)._flatpickr
|
|
81
|
+
picker.input.setAttribute('value', e.target.value)
|
|
82
|
+
const variant = picker.config.mode
|
|
83
|
+
if (variant === 'single' && e.target.value.split('').length === 10) {
|
|
84
|
+
picker.setDate(e.target.value)
|
|
85
|
+
} else if (variant === 'range' && e.target.value.split('').length === 24) {
|
|
86
|
+
picker.setDate(e.target.value)
|
|
87
|
+
}
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export default datePickerHelper
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= pb_rails("date_picker", props: { picker_id: "date-picker-default" }) %>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<%= pb_rails("date_picker", props: {
|
|
2
|
+
default_date: "07/31/2020",
|
|
3
|
+
label: "Default Date String",
|
|
4
|
+
picker_id: "date-picker-default-date1"
|
|
5
|
+
}) %>
|
|
6
|
+
|
|
7
|
+
<%= pb_rails("date_picker", props: {
|
|
8
|
+
default_date: (Date.today + 2).httpdate,
|
|
9
|
+
label: "Default Date Dynamic",
|
|
10
|
+
picker_id: "date-picker-default-date2"
|
|
11
|
+
}) %>
|
|
12
|
+
|
|
13
|
+
<%= pb_rails("date_picker", props: {
|
|
14
|
+
default_date: [(Date.today).httpdate, (Date.today + 7).httpdate],
|
|
15
|
+
label: "Default Date Range",
|
|
16
|
+
mode: "range",
|
|
17
|
+
picker_id: "date-picker-default-date3"
|
|
18
|
+
}) %>
|
|
19
|
+
|
|
20
|
+
<%= pb_rails("date_picker", props: {
|
|
21
|
+
default_date: "blank",
|
|
22
|
+
label: "Blank",
|
|
23
|
+
picker_id: "date-picker-default-date4"
|
|
24
|
+
}) %>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { DatePicker } from '../../'
|
|
3
|
+
|
|
4
|
+
const DatePickerDefaultDate = () => (
|
|
5
|
+
<div>
|
|
6
|
+
<DatePicker
|
|
7
|
+
defaultDate="07/31/2020"
|
|
8
|
+
label="Default Date String"
|
|
9
|
+
pickerId="date-picker-default-date1"
|
|
10
|
+
/>
|
|
11
|
+
<DatePicker
|
|
12
|
+
defaultDate={new Date().fp_incr(1)}
|
|
13
|
+
label="Default Date Dynamic"
|
|
14
|
+
pickerId="date-picker-default-date2"
|
|
15
|
+
/>
|
|
16
|
+
<DatePicker
|
|
17
|
+
defaultDate={[new Date().fp_incr(1), new Date().fp_incr(3)]}
|
|
18
|
+
label="Default Date Range"
|
|
19
|
+
mode="range"
|
|
20
|
+
pickerId="date-picker-default-date3"
|
|
21
|
+
/>
|
|
22
|
+
<DatePicker
|
|
23
|
+
defaultDate="blank"
|
|
24
|
+
label="Blank"
|
|
25
|
+
pickerId="date-picker-default-date4"
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
export default DatePickerDefaultDate
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<%= pb_rails("date_picker", props: {
|
|
2
|
+
disable_date: [(Date.today + 1).httpdate],
|
|
3
|
+
label: "Disable Single Date",
|
|
4
|
+
picker_id: "single-disabled-date"
|
|
5
|
+
}) %>
|
|
6
|
+
|
|
7
|
+
<%= pb_rails("date_picker", props: {
|
|
8
|
+
disable_date: [(Date.today + 1).httpdate, (Date.today + 3).httpdate],
|
|
9
|
+
label: "Disable Multiple Dates",
|
|
10
|
+
picker_id: "multiple-disabled-dates"
|
|
11
|
+
}) %>
|
|
12
|
+
|
|
13
|
+
<%= pb_rails("date_picker", props: {
|
|
14
|
+
disable_range: [
|
|
15
|
+
{
|
|
16
|
+
from: (Date.today + 1).httpdate,
|
|
17
|
+
to: (Date.today + 7).httpdate,
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
label: "Disable Single Range",
|
|
21
|
+
picker_id: "single-date-range"
|
|
22
|
+
}) %>
|
|
23
|
+
|
|
24
|
+
<%= pb_rails("date_picker", props: {
|
|
25
|
+
disable_range: [
|
|
26
|
+
{
|
|
27
|
+
from: (Date.today + 1).httpdate,
|
|
28
|
+
to: (Date.today + 3).httpdate,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
from: (Date.today + 7).httpdate,
|
|
32
|
+
to: (Date.today + 14).httpdate,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
label: "Disable Multiple Ranges",
|
|
36
|
+
picker_id: "multiple-date-ranges"
|
|
37
|
+
}) %>
|
|
38
|
+
|
|
39
|
+
<%= pb_rails("date_picker", props: {
|
|
40
|
+
disable_weekdays: ['Sunday', 'Saturday'],
|
|
41
|
+
label: "Disable Weekdays",
|
|
42
|
+
picker_id: "disabled-weekdays"
|
|
43
|
+
}) %>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { DatePicker } from '../../'
|
|
3
|
+
|
|
4
|
+
const DatePickerDisabled = () => (
|
|
5
|
+
<div>
|
|
6
|
+
<DatePicker
|
|
7
|
+
disableDate={[new Date().fp_incr(1)]}
|
|
8
|
+
label="Disable Single Date"
|
|
9
|
+
pickerId="single-disabled-date"
|
|
10
|
+
/>
|
|
11
|
+
<DatePicker
|
|
12
|
+
disableDate={[new Date().fp_incr(1), new Date().fp_incr(3)]}
|
|
13
|
+
label="Disable Multiple Dates"
|
|
14
|
+
pickerId="multiple-disabled-dates"
|
|
15
|
+
/>
|
|
16
|
+
<DatePicker
|
|
17
|
+
disableRange={[
|
|
18
|
+
{
|
|
19
|
+
from: new Date().fp_incr(1),
|
|
20
|
+
to: new Date().fp_incr(7),
|
|
21
|
+
},
|
|
22
|
+
]}
|
|
23
|
+
label="Disable Single Range"
|
|
24
|
+
pickerId="single-date-range"
|
|
25
|
+
/>
|
|
26
|
+
<DatePicker
|
|
27
|
+
disableRange={[
|
|
28
|
+
{
|
|
29
|
+
from: new Date().fp_incr(1),
|
|
30
|
+
to: new Date().fp_incr(3),
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
from: new Date().fp_incr(7),
|
|
34
|
+
to: new Date().fp_incr(14),
|
|
35
|
+
},
|
|
36
|
+
]}
|
|
37
|
+
label="Disable Multiple Ranges"
|
|
38
|
+
pickerId="multiple-date-ranges"
|
|
39
|
+
/>
|
|
40
|
+
<DatePicker
|
|
41
|
+
disableWeekdays={['Sunday', 'Saturday']}
|
|
42
|
+
label="Disable Weekdays"
|
|
43
|
+
pickerId="disabled-weekdays"
|
|
44
|
+
/>
|
|
45
|
+
</div>
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
export default DatePickerDisabled
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { DatePicker } from '../../'
|
|
3
|
+
|
|
4
|
+
const DatePickerError = () => (
|
|
5
|
+
<div>
|
|
6
|
+
<DatePicker
|
|
7
|
+
error="Invalid date. Please pick a valid date."
|
|
8
|
+
pickerId="date-picker-error"
|
|
9
|
+
/>
|
|
10
|
+
</div>
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
export default DatePickerError
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<%= pb_rails("date_picker", props: {
|
|
2
|
+
format: "m-d-Y",
|
|
3
|
+
picker_id: "date-picker-format1"
|
|
4
|
+
}) %>
|
|
5
|
+
|
|
6
|
+
<%= pb_rails("date_picker", props: {
|
|
7
|
+
format: "m/d/y",
|
|
8
|
+
picker_id: "date-picker-format2"
|
|
9
|
+
}) %>
|
|
10
|
+
|
|
11
|
+
<%= pb_rails("date_picker", props: {
|
|
12
|
+
format: "n-j-y",
|
|
13
|
+
picker_id: "date-picker-format3"
|
|
14
|
+
}) %>
|
|
15
|
+
|
|
16
|
+
<%= pb_rails("date_picker", props: {
|
|
17
|
+
format: "Y-d-m",
|
|
18
|
+
picker_id: "date-picker-format4"
|
|
19
|
+
}) %>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { DatePicker } from '../../'
|
|
3
|
+
|
|
4
|
+
const DatePickerFormat = () => (
|
|
5
|
+
<div>
|
|
6
|
+
<DatePicker
|
|
7
|
+
format="m-d-Y"
|
|
8
|
+
pickerId="date-picker-format1"
|
|
9
|
+
/>
|
|
10
|
+
<DatePicker
|
|
11
|
+
format="m/d/y"
|
|
12
|
+
pickerId="date-picker-format2"
|
|
13
|
+
/>
|
|
14
|
+
<DatePicker
|
|
15
|
+
format="n-j-y"
|
|
16
|
+
pickerId="date-picker-format3"
|
|
17
|
+
/>
|
|
18
|
+
<DatePicker
|
|
19
|
+
format="Y-d-m"
|
|
20
|
+
pickerId="date-picker-format4"
|
|
21
|
+
/>
|
|
22
|
+
</div>
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
export default DatePickerFormat
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<%= pb_rails("date_picker", props: {
|
|
2
|
+
label: "Dynamic dates.",
|
|
3
|
+
max_date: (Date.today + 3).httpdate,
|
|
4
|
+
min_date: (Date.today - 3).httpdate,
|
|
5
|
+
picker_id: "date-picker-min-max1"
|
|
6
|
+
}) %>
|
|
7
|
+
|
|
8
|
+
<%= pb_rails("date_picker", props: {
|
|
9
|
+
format: "m/d/Y",
|
|
10
|
+
label: "Absolute formatted dates.",
|
|
11
|
+
max_date: "10/20/2020",
|
|
12
|
+
min_date: "10/10/2020",
|
|
13
|
+
picker_id: "date-picker-min-max2"
|
|
14
|
+
}) %>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { DatePicker } from '../../'
|
|
3
|
+
|
|
4
|
+
const DatePickerMinMax = () => (
|
|
5
|
+
<div>
|
|
6
|
+
<DatePicker
|
|
7
|
+
label="Dynamic dates using flatpickr increment function."
|
|
8
|
+
maxDate={new Date().fp_incr(3)}
|
|
9
|
+
minDate={new Date().fp_incr(-3)}
|
|
10
|
+
pickerId="date-picker-min-max1"
|
|
11
|
+
/>
|
|
12
|
+
<DatePicker
|
|
13
|
+
format="m/d/Y"
|
|
14
|
+
label="Absolute formatted dates."
|
|
15
|
+
maxDate="10/20/2020"
|
|
16
|
+
minDate="10/10/2020"
|
|
17
|
+
pickerId="date-picker-min-max2"
|
|
18
|
+
/>
|
|
19
|
+
</div>
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
export default DatePickerMinMax
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
examples:
|
|
2
|
+
|
|
3
|
+
rails:
|
|
4
|
+
- date_picker_default: Default
|
|
5
|
+
- date_picker_default_date: Default Date
|
|
6
|
+
- date_picker_label: Label
|
|
7
|
+
- date_picker_range: Range
|
|
8
|
+
- date_picker_format: Format
|
|
9
|
+
- date_picker_disabled: Disabled Dates
|
|
10
|
+
- date_picker_min_max: Min Max
|
|
11
|
+
- date_picker_error: Error
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
react:
|
|
15
|
+
- date_picker_default: Default
|
|
16
|
+
- date_picker_default_date: Default Date
|
|
17
|
+
- date_picker_label: Label
|
|
18
|
+
- date_picker_range: Range
|
|
19
|
+
- date_picker_format: Format
|
|
20
|
+
- date_picker_disabled: Disabled Dates
|
|
21
|
+
- date_picker_min_max: Min Max
|
|
22
|
+
- date_picker_error: Error
|
|
23
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { default as DatePickerDefault } from './_date_picker_default.jsx'
|
|
2
|
+
export { default as DatePickerDefaultDate } from './_date_picker_default_date.jsx'
|
|
3
|
+
export { default as DatePickerLabel } from './_date_picker_label.jsx'
|
|
4
|
+
export { default as DatePickerRange } from './_date_picker_range.jsx'
|
|
5
|
+
export { default as DatePickerFormat } from './_date_picker_format.jsx'
|
|
6
|
+
export { default as DatePickerDisabled } from './_date_picker_disabled.jsx'
|
|
7
|
+
export { default as DatePickerMinMax } from './_date_picker_min_max.jsx'
|
|
8
|
+
export { default as DatePickerError } from './_date_picker_error.jsx'
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
<%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
|
|
31
31
|
<%= form.text_field :example_text_field, props: { label: true } %>
|
|
32
32
|
<%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
|
|
33
|
+
<%= form.date_picker :example_date_picker %>
|
|
33
34
|
|
|
34
35
|
<%= form.actions do |action| %>
|
|
35
36
|
<%= action.submit props: { text: "Apply", data: { disable_with: "<i class='far fa-spinner fa-spin mr-3'></i>Searching...".html_safe },}%>
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
<%= form.text_area :example_text_area, props: { label: true } %>
|
|
25
25
|
<%= form.select :example_select, [ ["Yes", 1], ["No", 2] ], props: { label: true } %>
|
|
26
26
|
<%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
|
|
27
|
+
<%= form.date_picker :example_date_picker, props: { picker_id: 'date-picker', default_date: 'blank' } %>
|
|
27
28
|
|
|
28
29
|
<%= form.actions do |action| %>
|
|
29
30
|
<%= action.submit %>
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
:example_url_field,
|
|
14
14
|
:example_text_area,
|
|
15
15
|
:example_select_field,
|
|
16
|
-
:example_collection_select_field
|
|
16
|
+
:example_collection_select_field,
|
|
17
|
+
:example_date_picker
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
def self.model_name
|
|
@@ -49,6 +50,7 @@
|
|
|
49
50
|
<%= form.input :example_text_area, as: :text %>
|
|
50
51
|
<%= form.select :example_select_field, [["Yes", 1], ["No", 2]], props: { label: true } %>
|
|
51
52
|
<%= form.collection_select :example_collection_select_field, example_collection, :value, :name, props: { label: true } %>
|
|
53
|
+
<%= form.date_picker :example_date_picker, props: { picker_id: 'date-picker', default_date: 'blank' } %>
|
|
52
54
|
|
|
53
55
|
<%= form.actions do |action| %>
|
|
54
56
|
<%= action.submit %>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Playbook
|
|
4
|
+
module PbForm
|
|
5
|
+
module FormBuilder
|
|
6
|
+
module DatePickerField
|
|
7
|
+
def date_picker(name, props: {})
|
|
8
|
+
props[:name] = name
|
|
9
|
+
|
|
10
|
+
@template.pb_rails("date_picker", props: props)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -5,6 +5,10 @@ window.pbChart = pbChart
|
|
|
5
5
|
// Forms
|
|
6
6
|
import './pb_form/pb_form_validation'
|
|
7
7
|
|
|
8
|
+
// Date Picker
|
|
9
|
+
import datePickerHelper from './pb_date_picker/date_picker_helper.js'
|
|
10
|
+
window.datePickerHelper = datePickerHelper
|
|
11
|
+
|
|
8
12
|
// Lazy image loading
|
|
9
13
|
import 'lazysizes'
|
|
10
14
|
|
|
@@ -19,3 +23,5 @@ PbTypeahead.start()
|
|
|
19
23
|
|
|
20
24
|
import PbTable from './pb_table'
|
|
21
25
|
PbTable.start()
|
|
26
|
+
|
|
27
|
+
import 'flatpickr'
|
data/lib/playbook/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: playbook_ui
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 6.0.
|
|
4
|
+
version: 6.0.1.pre.alpha2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Power UX
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2020-07-
|
|
12
|
+
date: 2020-07-31 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: actionpack
|
|
@@ -665,6 +665,29 @@ files:
|
|
|
665
665
|
- app/pb_kits/playbook/pb_date/docs/_description.md
|
|
666
666
|
- app/pb_kits/playbook/pb_date/docs/example.yml
|
|
667
667
|
- app/pb_kits/playbook/pb_date/docs/index.js
|
|
668
|
+
- app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb
|
|
669
|
+
- app/pb_kits/playbook/pb_date_picker/_date_picker.jsx
|
|
670
|
+
- app/pb_kits/playbook/pb_date_picker/_date_picker.scss
|
|
671
|
+
- app/pb_kits/playbook/pb_date_picker/date_picker.rb
|
|
672
|
+
- app/pb_kits/playbook/pb_date_picker/date_picker_helper.js
|
|
673
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb
|
|
674
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx
|
|
675
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb
|
|
676
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx
|
|
677
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb
|
|
678
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx
|
|
679
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb
|
|
680
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx
|
|
681
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb
|
|
682
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx
|
|
683
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb
|
|
684
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx
|
|
685
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb
|
|
686
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx
|
|
687
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb
|
|
688
|
+
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx
|
|
689
|
+
- app/pb_kits/playbook/pb_date_picker/docs/example.yml
|
|
690
|
+
- app/pb_kits/playbook/pb_date_picker/docs/index.js
|
|
668
691
|
- app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.html.erb
|
|
669
692
|
- app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.jsx
|
|
670
693
|
- app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss
|
|
@@ -830,6 +853,7 @@ files:
|
|
|
830
853
|
- app/pb_kits/playbook/pb_form/form_builder.rb
|
|
831
854
|
- app/pb_kits/playbook/pb_form/form_builder/action_area.rb
|
|
832
855
|
- app/pb_kits/playbook/pb_form/form_builder/collection_select_field.rb
|
|
856
|
+
- app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb
|
|
833
857
|
- app/pb_kits/playbook/pb_form/form_builder/form_field_builder.rb
|
|
834
858
|
- app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb
|
|
835
859
|
- app/pb_kits/playbook/pb_form/form_builder/select_field.rb
|
|
@@ -1812,11 +1836,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
1812
1836
|
version: '0'
|
|
1813
1837
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1814
1838
|
requirements:
|
|
1815
|
-
- - "
|
|
1839
|
+
- - ">"
|
|
1816
1840
|
- !ruby/object:Gem::Version
|
|
1817
|
-
version:
|
|
1841
|
+
version: 1.3.1
|
|
1818
1842
|
requirements: []
|
|
1819
|
-
|
|
1843
|
+
rubyforge_project:
|
|
1844
|
+
rubygems_version: 2.7.3
|
|
1820
1845
|
signing_key:
|
|
1821
1846
|
specification_version: 4
|
|
1822
1847
|
summary: Playbook Design System
|