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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/data/menu.yml +1 -0
  4. data/app/pb_kits/playbook/index.js +2 -0
  5. data/app/pb_kits/playbook/packs/examples.js +2 -0
  6. data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +36 -0
  7. data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +98 -0
  8. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +59 -0
  9. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +38 -0
  10. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +91 -0
  11. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb +1 -0
  12. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx +12 -0
  13. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb +24 -0
  14. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx +30 -0
  15. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb +43 -0
  16. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx +48 -0
  17. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +4 -0
  18. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx +13 -0
  19. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb +19 -0
  20. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx +25 -0
  21. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb +4 -0
  22. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx +13 -0
  23. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +14 -0
  24. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx +22 -0
  25. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb +4 -0
  26. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx +13 -0
  27. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +23 -0
  28. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +8 -0
  29. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +1 -0
  30. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  31. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +3 -1
  32. data/app/pb_kits/playbook/pb_form/form_builder.rb +1 -0
  33. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +15 -0
  34. data/app/pb_kits/playbook/vendor.js +6 -0
  35. data/lib/playbook/version.rb +1 -1
  36. metadata +30 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9700bd77dc615c8c117f7244a03bc5ebed4afe8d0d548de5f3e1ec419128feb1
4
- data.tar.gz: c062567218f3b82cc8f073b4ff33a125ca6c9e1d9c42e7dc5dd6561e4264eb04
3
+ metadata.gz: c8fe3b4eef7ad0d508540d6fe72d079e72631adeb5a52031c77a756e9bf10146
4
+ data.tar.gz: 5c528735df89a89d65c89b85076588ded161e9dff15facb52bc68996dc3645cb
5
5
  SHA512:
6
- metadata.gz: efea33e1f3ff87bad12881c940db6cfb32e36fb8892155449e993b816445df494f25f5af712b9710389301390ca42363ee76ecffe8602ac9ba23d0ab8bf72164
7
- data.tar.gz: 386a4567b8677960ee19e95b18d7b968520336ac035a60865aba7ff88beb645390c63143fd7181a81b69a4a27519ae6c59cdfaec0159e8c97e2a6fa511658bd9
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';
@@ -24,6 +24,7 @@ kits:
24
24
  - fixed_confirmation_toast
25
25
  - flex
26
26
  - forms:
27
+ - date_picker
27
28
  - file_upload
28
29
  - form
29
30
  - form_pill
@@ -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(/&quot;/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,12 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerDefault = () => (
5
+ <div>
6
+ <DatePicker
7
+ pickerId="date-picker-default"
8
+ />
9
+ </div>
10
+ )
11
+
12
+ export default DatePickerDefault
@@ -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,4 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ error: "Invalid date. Please pick a valid date.",
3
+ picker_id: "date-picker-error"
4
+ }) %>
@@ -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,4 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ label: "Your Label Here",
3
+ picker_id: "date-picker-label"
4
+ }) %>
@@ -0,0 +1,13 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerLabel = () => (
5
+ <div>
6
+ <DatePicker
7
+ label="Your Label Here"
8
+ pickerId="date-picker-label"
9
+ />
10
+ </div>
11
+ )
12
+
13
+ export default DatePickerLabel
@@ -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,4 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ mode: "range",
3
+ picker_id: "date-picker-range"
4
+ }) %>
@@ -0,0 +1,13 @@
1
+ import React from 'react'
2
+ import { DatePicker } from '../../'
3
+
4
+ const DatePickerRange = () => (
5
+ <div>
6
+ <DatePicker
7
+ mode="range"
8
+ pickerId="date-picker-range"
9
+ />
10
+ </div>
11
+ )
12
+
13
+ export default DatePickerRange
@@ -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 %>
@@ -17,6 +17,7 @@ module Playbook
17
17
  prepend(TypeaheadField)
18
18
  prepend(SelectField)
19
19
  prepend(CollectionSelectField)
20
+ prepend(DatePickerField)
20
21
 
21
22
  def actions(&block)
22
23
  ActionArea.new(self).wrapper(&block)
@@ -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'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Playbook
4
- VERSION = "6.0.0"
4
+ VERSION = "6.0.1.pre.alpha2"
5
5
  end
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.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-30 00:00:00.000000000 Z
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: '0'
1841
+ version: 1.3.1
1818
1842
  requirements: []
1819
- rubygems_version: 3.1.4
1843
+ rubyforge_project:
1844
+ rubygems_version: 2.7.3
1820
1845
  signing_key:
1821
1846
  specification_version: 4
1822
1847
  summary: Playbook Design System