playbook_ui 6.1.0.pre.alpha3 → 6.1.0.pre.alpha4

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 (42) 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_checkbox/_checkbox.html.erb +1 -1
  7. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +0 -5
  8. data/app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb +40 -0
  9. data/app/pb_kits/playbook/pb_date_picker/_date_picker.jsx +105 -0
  10. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +59 -0
  11. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +43 -0
  12. data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.js +91 -0
  13. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb +1 -0
  14. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx +12 -0
  15. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb +24 -0
  16. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx +30 -0
  17. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb +43 -0
  18. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx +48 -0
  19. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb +4 -0
  20. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx +13 -0
  21. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb +19 -0
  22. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx +25 -0
  23. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb +9 -0
  24. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx +17 -0
  25. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb +14 -0
  26. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx +22 -0
  27. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb +4 -0
  28. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx +13 -0
  29. data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +23 -0
  30. data/app/pb_kits/playbook/pb_date_picker/docs/index.js +8 -0
  31. data/app/pb_kits/playbook/pb_filter/docs/_filter_default.html.erb +4 -7
  32. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +2 -2
  33. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +2 -2
  34. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form.html.erb +2 -2
  35. data/app/pb_kits/playbook/pb_form/docs/_form_simple_form_validate.html.erb +2 -2
  36. data/app/pb_kits/playbook/pb_form/form_builder.rb +1 -2
  37. data/app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb +41 -0
  38. data/app/pb_kits/playbook/pb_form/form_builder/form_field_builder.rb +0 -1
  39. data/app/pb_kits/playbook/vendor.js +6 -0
  40. data/lib/playbook/version.rb +1 -1
  41. metadata +25 -2
  42. data/app/pb_kits/playbook/pb_form/form_builder/checkbox_field.rb +0 -30
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b5f0ebf353807848145db1debca6c328dc6c22d75a3a9895f36fa6d0dd5a718
4
- data.tar.gz: ec48bd6d3874cb9324adb62458aa523c50c3e66a6231e4d7bc3822c76eb2e281
3
+ metadata.gz: 935fd3d3a764d02be6807cbc6f3271f6771865a0d1c4e33bfc4dd078e3dc93af
4
+ data.tar.gz: 6cb1089a51ef34a15ea142fb23b8e9c705c647a811bb1f945acfbc47e139228a
5
5
  SHA512:
6
- metadata.gz: 46fbf75023b2a972d37fa053ae549733887defe7f78475418d58c891839ef1997517091c5b1bebcb413667f986588759612ca8febd50fd3d1197d7ffa7ed3b81
7
- data.tar.gz: 90c0f1dda08fdd629c1c36412dff45028934b2d4ac608d5d94836bb6595d541c30c450837087493888c501de987fa14e51469c24ffc427e977bba67a1146b744
6
+ metadata.gz: 721dab5867c8db09f78c40ea8b7bc3ed070437e9a3241299b9a1a46195a443546eb4526a12807a290b67df2e19bf703dd2b617f11b5be5796ad452f929bc09e6
7
+ data.tar.gz: 27d738f1736e7f516cb7a4f23d95189d6448628c68cee6ba29f230b656b7058ded78f603fd7d64ee4563bd733163e4165e4197206d72c7b85c4485e4de77e57d
@@ -15,6 +15,7 @@
15
15
  @import 'pb_currency/currency';
16
16
  @import 'pb_dashboard_value/dashboard_value';
17
17
  @import 'pb_date/date';
18
+ @import 'pb_date_picker/date_picker';
18
19
  @import 'pb_date_range_inline/date_range_inline';
19
20
  @import 'pb_date_range_stacked/date_range_stacked';
20
21
  @import 'pb_date_stacked/date_stacked';
@@ -26,6 +26,7 @@ kits:
26
26
  - fixed_confirmation_toast
27
27
  - flex
28
28
  - forms:
29
+ - date_picker
29
30
  - file_upload
30
31
  - form
31
32
  - form_pill
@@ -14,6 +14,7 @@ export Contact from './pb_contact/_contact.jsx'
14
14
  export Currency from './pb_currency/_currency.jsx'
15
15
  export DashboardValue from './pb_dashboard_value/_dashboard_value.jsx'
16
16
  export Date from './pb_date/_date.jsx'
17
+ export DatePicker from './pb_date_picker/_date_picker.jsx'
17
18
  export DateRangeInline from './pb_date_range_inline/_date_range_inline.jsx'
18
19
  export DateRangeStacked from './pb_date_range_stacked/_date_range_stacked.jsx'
19
20
  export DateStacked from './pb_date_stacked/_date_stacked.jsx'
@@ -91,6 +92,7 @@ export dashboardValueSettings from './pb_dashboard_value/dashboardValueSettings'
91
92
 
92
93
  // Other JS/Plugins
93
94
  export pbChart from './plugins/pb_chart.js'
95
+ export datePickerHelper from './pb_date_picker/date_picker_helper.js'
94
96
  export PbTypeahead from './pb_typeahead'
95
97
  export PbPopover from './pb_popover'
96
98
  export PbTable from './pb_table'
@@ -28,6 +28,7 @@ import * as Contact from 'pb_contact/docs'
28
28
  import * as Currency from 'pb_currency/docs'
29
29
  import * as DashboardValue from 'pb_dashboard_value/docs'
30
30
  import * as Date from 'pb_date/docs'
31
+ import * as DatePicker from 'pb_date_picker/docs'
31
32
  import * as DateRangeInline from 'pb_date_range_inline/docs'
32
33
  import * as DateRangeStacked from 'pb_date_range_stacked/docs'
33
34
  import * as DateStacked from 'pb_date_stacked/docs'
@@ -108,6 +109,7 @@ WebpackerReact.setup({
108
109
  ...Currency,
109
110
  ...DashboardValue,
110
111
  ...Date,
112
+ ...DatePicker,
111
113
  ...DateRangeInline,
112
114
  ...DateRangeStacked,
113
115
  ...DateStacked,
@@ -11,6 +11,6 @@
11
11
  <%= pb_rails("icon", props: { icon: "check", id: "check_icon", classname: "check_icon", fixed_width: true}) %>
12
12
  </span>
13
13
  <span class="pb_checkbox_label">
14
- <%= pb_rails("body", props: { status: object.checkbox_label_status, text: object.text, dark: object.dark, margin_right: object.form_spacing ? "xs" : "" }) %>
14
+ <%= pb_rails("body", props: { status: object.checkbox_label_status, text: object.text, dark: object.dark }) %>
15
15
  </span>
16
16
  <% end %>
@@ -15,11 +15,6 @@ module Playbook
15
15
  prop :value
16
16
  prop :name
17
17
 
18
- prop :required, type: Playbook::Props::Boolean,
19
- default: false
20
- prop :form_spacing, type: Playbook::Props::Boolean,
21
- default: false
22
-
23
18
  def checked_html
24
19
  checked ? "checked='true'" : nil
25
20
  end
@@ -0,0 +1,40 @@
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
+ <% if !object.hide_label %>
7
+ <%= pb_rails("caption", props: { text: object.label }) %>
8
+ <% end %>
9
+ <div class="input_wrapper">
10
+ <input
11
+ autocomplete="off"
12
+ id="<%= object.picker_id %>"
13
+ name="<%= object.name %>"
14
+ <%= object.required ? required="required" : ''%>
15
+ />
16
+ <% if object.error %>
17
+ <%= pb_rails("body", props: {
18
+ status: "negative",
19
+ text: object.error
20
+ }) %>
21
+ <% end %>
22
+ </div>
23
+
24
+ <%= javascript_tag do %>
25
+ document.addEventListener("DOMContentLoaded", () => {
26
+ datePickerHelper({
27
+ defaultDate: "<%= object.default_date %>",
28
+ disableDate: <%=raw object.disable_date %>,
29
+ disableRange: <%=raw object.disable_range.to_json %>,
30
+ disableWeekdays: <%=raw object.disable_weekdays %>,
31
+ format: "<%= object.format %>",
32
+ maxDate: "<%= object.max_date %>",
33
+ minDate: "<%= object.min_date %>",
34
+ mode: "<%= object.mode %>",
35
+ pickerId: "<%= object.picker_id %>",
36
+ propModel: "rails"
37
+ })
38
+ })
39
+ <% end %>
40
+ <% end %>
@@ -0,0 +1,105 @@
1
+ /* @flow */
2
+
3
+ import React, { useEffect } from 'react'
4
+ import classnames from 'classnames'
5
+ import { buildAriaProps, buildCss, buildDataProps } from '../utilities/props'
6
+ import { globalProps } from '../utilities/globalProps.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
+ hideLabel?: Boolean,
22
+ id?: String,
23
+ label?: String,
24
+ maxDate: String,
25
+ minDate: String,
26
+ mode?: String,
27
+ name: String,
28
+ pickerId?: String,
29
+ }
30
+ const DatePicker = (props: DatePickerProps) => {
31
+ const {
32
+ aria = {},
33
+ className,
34
+ data = {},
35
+ defaultDate = '',
36
+ disableDate = null,
37
+ disableRange = null,
38
+ disableWeekdays = null,
39
+ error,
40
+ format = 'm/d/Y',
41
+ hideLabel = false,
42
+ id,
43
+ label = 'Date Picker',
44
+ maxDate,
45
+ minDate,
46
+ mode = 'single',
47
+ name,
48
+ pickerId,
49
+ } = props
50
+
51
+ const ariaProps = buildAriaProps(aria)
52
+ const dataProps = buildDataProps(data)
53
+ const classes = classnames(
54
+ buildCss('pb_date_picker_kit'),
55
+ className,
56
+ globalProps(props),
57
+ error ? 'error' : null,
58
+ )
59
+
60
+ useEffect(() => {
61
+ datePickerHelper({
62
+ defaultDate: defaultDate,
63
+ disableDate: disableDate,
64
+ disableRange: disableRange,
65
+ disableWeekdays: disableWeekdays,
66
+ format: format,
67
+ maxDate: maxDate,
68
+ minDate: minDate,
69
+ mode: mode,
70
+ pickerId: pickerId,
71
+ propModel: 'React',
72
+ })
73
+ }, [])
74
+
75
+ return (
76
+ <div
77
+ {...ariaProps}
78
+ {...dataProps}
79
+ className={classes}
80
+ id={id}
81
+ >
82
+ {className}
83
+ <If condition={!hideLabel}>
84
+ <Caption
85
+ text={label}
86
+ />
87
+ </If>
88
+ <div className="input_wrapper">
89
+ <input
90
+ autoComplete="off"
91
+ id={pickerId}
92
+ name={name}
93
+ />
94
+ <If condition={error}>
95
+ <Body
96
+ status="negative"
97
+ text={error}
98
+ />
99
+ </If>
100
+ </div>
101
+ </div>
102
+ )
103
+ }
104
+
105
+ 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_kit] {
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,43 @@
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 :hide_label, type: Playbook::Props::Boolean,
22
+ default: false
23
+ prop :label, type: Playbook::Props::String,
24
+ default: "Date Picker"
25
+ prop :max_date, type: Playbook::Props::String
26
+ prop :min_date, type: Playbook::Props::String
27
+ prop :name, type: Playbook::Props::String
28
+ prop :mode, type: Playbook::Props::String,
29
+ default: "single"
30
+ prop :picker_id, type: Playbook::Props::String
31
+ prop :required, type: Playbook::Props::Boolean,
32
+ default: false
33
+
34
+ def classname
35
+ generate_classname("pb_date_picker_kit")
36
+ end
37
+
38
+ def error_class
39
+ error ? "error" : ""
40
+ end
41
+ end
42
+ end
43
+ 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,9 @@
1
+ <%= pb_rails("date_picker", props: {
2
+ label: "Your Label Here",
3
+ picker_id: "date-picker-label"
4
+ }) %>
5
+
6
+ <%= pb_rails("date_picker", props: {
7
+ hide_label: true,
8
+ picker_id: "date-picker-hide-label"
9
+ }) %>
@@ -0,0 +1,17 @@
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
+ <DatePicker
11
+ hideLabel
12
+ pickerId="date-picker-hide-label"
13
+ />
14
+ </div>
15
+ )
16
+
17
+ 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'
@@ -27,13 +27,10 @@
27
27
  OpenStruct.new(name: "Georgia", value: 10),
28
28
  ]
29
29
  %>
30
- <%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
31
- <%# <%= form.text_field :example_text_field, props: { label: true } %>
32
- <%# <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
33
- <%= pb_rails("caption", props: { text: "Status", margin_bottom: "sm" }) %>
34
- <%= form.check_box :example_checkbox, props: { text: "Delivered", margin_right: "md" } %>
35
- <%= form.check_box :example_checkbox, props: { text: "Unsubscribed", margin_right: "md" } %>
36
- <%= form.check_box :example_checkbox, props: { text: "Failed", margin_right: "md" } %>
30
+ <%= pb_rails("form", props: { form_system_options: { scope: :blahblah, method: :get } }) do |form| %>
31
+ <%= form.text_field :example_text_field, props: { label: true } %>
32
+ <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true } %>
33
+ <%= form.date_picker :example_date_picker %>
37
34
 
38
35
  <%= form.actions do |action| %>
39
36
  <%= action.submit props: { text: "Apply", data: { disable_with: "<i class='far fa-spinner fa-spin mr-3'></i>Searching...".html_safe },}%>
@@ -13,7 +13,7 @@
13
13
  ]
14
14
  %>
15
15
 
16
- <%= pb_rails("form", props: { form_system_options: { scope: :example, method: :get } }) do |form| %>
16
+ <%= pb_rails("form", props: { form_system_options: { scope: :scope, method: :get } }) do |form| %>
17
17
  <%= form.text_field :example_text_field, props: { label: true } %>
18
18
  <%= form.telephone_field :example_phone_field, props: { label: true } %>
19
19
  <%= form.email_field :example_email_field, props: { label: true } %>
@@ -24,7 +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.check_box :example_checkbox, data: { field1: "value1", field2: "value2" }, props: { text: "Example Checkbox", label: true, value: "test-val" } %>
27
+ <%= form.date_picker :example_date_picker1, props: { default_date: 'blank' } %>
28
28
 
29
29
  <%= form.actions do |action| %>
30
30
  <%= action.submit %>
@@ -14,7 +14,7 @@
14
14
  %>
15
15
 
16
16
  <%= pb_rails("form", props: {
17
- form_system_options: { scope: :example, method: :get },
17
+ form_system_options: { scope: :scope, method: :get },
18
18
  validate: true
19
19
  }) do |form| %>
20
20
  <%= form.text_field :example_text_field, props: { label: true, required: true } %>
@@ -27,7 +27,7 @@
27
27
  <%= form.text_area :example_text_area, props: { label: true, required: true } %>
28
28
  <%= form.select :example_select, [ ["Yes", 1], ["No", 2] ], props: { label: true, blank_selection: "Select One...", required: true } %>
29
29
  <%= form.collection_select :example_collection_select, example_collection, :value, :name, props: { label: true, blank_selection: "Select One...", required: true } %>
30
- <%= form.check_box :example_checkbox, props: { text: "Example Checkbox", label: true, required: true } %>
30
+ <%= form.date_picker :example_date_picker2, props: { default_date: 'blank' } %>
31
31
 
32
32
  <%= form.actions do |action| %>
33
33
  <%= action.submit %>
@@ -14,7 +14,7 @@
14
14
  :example_text_area,
15
15
  :example_select_field,
16
16
  :example_collection_select_field,
17
- :example_checkbox_field
17
+ :example_date_picker_field
18
18
 
19
19
 
20
20
  def self.model_name
@@ -50,7 +50,7 @@
50
50
  <%= form.input :example_text_area, as: :text %>
51
51
  <%= form.select :example_select_field, [["Yes", 1], ["No", 2]], props: { label: true } %>
52
52
  <%= form.collection_select :example_collection_select_field, example_collection, :value, :name, props: { label: true } %>
53
- <%= form.check_box :example_checkbox_field, props: { text: "Example Checkbox", label: true } %>
53
+ <%= form.date_picker :example_date_picker_field, props: { default_date: 'blank', } %>
54
54
 
55
55
  <%= form.actions do |action| %>
56
56
  <%= action.submit %>
@@ -14,7 +14,7 @@
14
14
  :example_text_area,
15
15
  :example_select_field,
16
16
  :example_collection_select_field,
17
- :example_checkbox_field
17
+ :example_date_picker_field
18
18
 
19
19
 
20
20
  def self.model_name
@@ -50,7 +50,7 @@
50
50
  <%= form.input :example_text_area, {as: :text, input_html: {props: {required: true}}} %>
51
51
  <%= form.select :example_select_field, [["Yes", 1], ["No", 2]], props: { required: true, blank_selection: "Select One...", label: true } %>
52
52
  <%= form.collection_select :example_collection_select_field, example_collection, :value, :name, props: { required: true, blank_selection: "Select One...", label: true } %>
53
- <%= form.check_box :example_checkbox_field, props: { text: "Example Checkbox", label: true, required: true } %>
53
+ <%= form.date_picker :example_date_picker_field, props: { default_date: 'blank', required: true } %>
54
54
 
55
55
  <%= form.actions do |action| %>
56
56
  <%= action.submit %>
@@ -14,11 +14,10 @@ module Playbook
14
14
  prepend(FormFieldBuilder.new(:password_field, kit_name: "text_input"))
15
15
  prepend(FormFieldBuilder.new(:url_field, kit_name: "text_input"))
16
16
  prepend(FormFieldBuilder.new(:text_area, kit_name: "textarea"))
17
- # prepend(FormFieldBuilder.new(:check_box, kit_name: "checkbox"))
18
17
  prepend(TypeaheadField)
19
18
  prepend(SelectField)
20
19
  prepend(CollectionSelectField)
21
- prepend(CheckboxField)
20
+ prepend(DatePickerField)
22
21
 
23
22
  def actions(&block)
24
23
  ActionArea.new(self).wrapper(&block)
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbForm
5
+ module FormBuilder
6
+ module DatePickerField
7
+ # def date_field(name, props: {})
8
+ # # props[:name] = name
9
+
10
+ # input = super(name)
11
+ # puts name
12
+ # puts input
13
+
14
+ # @template.pb_rails("date_picker", props: props) do
15
+ # input
16
+ # end
17
+ # end
18
+ # def date_picker(name, props: {})
19
+ # predicate = name.to_s.split("_")[0]
20
+ # html_name = "#{predicate}[#{name}]"
21
+ # id = predicate + "_" + name.to_s
22
+
23
+ # props[:name] = html_name
24
+ # props[:picker_id] = id
25
+
26
+ # @template.pb_rails("date_picker", props: props)
27
+ # end
28
+ def date_picker(name, props: {})
29
+ prefix = @object_name
30
+ html_attribute_name = "#{prefix}[#{name}]"
31
+ html_id = "#{prefix}_#{name}"
32
+
33
+ props[:name] = html_attribute_name
34
+ props[:picker_id] = html_id
35
+
36
+ @template.pb_rails("date_picker", props: props)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -12,7 +12,6 @@ module Playbook
12
12
  options[:skip_default_ids] = false unless options.key?(:skip_default_ids)
13
13
  options[:required] = true if props[:required]
14
14
  options[:placeholder] = props[:placeholder] || ""
15
- options[:value] = props[:value]
16
15
 
17
16
  if props.key?(:validation)
18
17
  validation = props[:validation]
@@ -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.1.0.pre.alpha3"
4
+ VERSION = "6.1.0.pre.alpha4"
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.1.0.pre.alpha3
4
+ version: 6.1.0.pre.alpha4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Power UX
@@ -680,6 +680,29 @@ files:
680
680
  - app/pb_kits/playbook/pb_date/docs/_description.md
681
681
  - app/pb_kits/playbook/pb_date/docs/example.yml
682
682
  - app/pb_kits/playbook/pb_date/docs/index.js
683
+ - app/pb_kits/playbook/pb_date_picker/_date_picker.html.erb
684
+ - app/pb_kits/playbook/pb_date_picker/_date_picker.jsx
685
+ - app/pb_kits/playbook/pb_date_picker/_date_picker.scss
686
+ - app/pb_kits/playbook/pb_date_picker/date_picker.rb
687
+ - app/pb_kits/playbook/pb_date_picker/date_picker_helper.js
688
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.html.erb
689
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default.jsx
690
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.html.erb
691
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_default_date.jsx
692
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.html.erb
693
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_disabled.jsx
694
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.html.erb
695
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_error.jsx
696
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.html.erb
697
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_format.jsx
698
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.html.erb
699
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_label.jsx
700
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.html.erb
701
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_min_max.jsx
702
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.html.erb
703
+ - app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range.jsx
704
+ - app/pb_kits/playbook/pb_date_picker/docs/example.yml
705
+ - app/pb_kits/playbook/pb_date_picker/docs/index.js
683
706
  - app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.html.erb
684
707
  - app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.jsx
685
708
  - app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss
@@ -844,8 +867,8 @@ files:
844
867
  - app/pb_kits/playbook/pb_form/form/simple_form_form.rb
845
868
  - app/pb_kits/playbook/pb_form/form_builder.rb
846
869
  - app/pb_kits/playbook/pb_form/form_builder/action_area.rb
847
- - app/pb_kits/playbook/pb_form/form_builder/checkbox_field.rb
848
870
  - app/pb_kits/playbook/pb_form/form_builder/collection_select_field.rb
871
+ - app/pb_kits/playbook/pb_form/form_builder/date_picker_field.rb
849
872
  - app/pb_kits/playbook/pb_form/form_builder/form_field_builder.rb
850
873
  - app/pb_kits/playbook/pb_form/form_builder/form_with_form_builder.rb
851
874
  - app/pb_kits/playbook/pb_form/form_builder/select_field.rb
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Playbook
4
- module PbForm
5
- module FormBuilder
6
- module CheckboxField
7
- def check_box(name, data: {}, props: {})
8
- value = props[:value] ||= 1
9
- input = super(name, { required: props[:required], data: data }, value)
10
- label_text = name.to_s.gsub("_", " ")
11
-
12
- props[:margin_bottom] = "sm"
13
- props[:form_spacing] = true
14
-
15
- # Refactor and dry up, solve adding nil error
16
- if props[:label]
17
- @template.pb_rails("caption", props: { text: label_text, margin_bottom: "xs" }) +
18
- @template.pb_rails("checkbox", props: props) do
19
- input
20
- end
21
- else
22
- @template.pb_rails("checkbox", props: props) do
23
- input
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end