playbook_ui 15.6.0 → 15.7.0.pre.alpha.PLAY2675dropdownquickpickcustomquickpickdates13330
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 -1
- data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +3 -2
- data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +4 -0
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +95 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_colors_rails.html.erb +43 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_colors_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.html.erb +11 -5
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.md +7 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background.jsx +54 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background.md +9 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_multi.jsx +80 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_background_multi.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +4 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +57 -0
- data/app/pb_kits/playbook/pb_bar_graph/_bar_graph.tsx +6 -0
- data/app/pb_kits/playbook/pb_card/docs/_card_header.md +1 -1
- data/app/pb_kits/playbook/pb_card/docs/_card_highlight.md +1 -1
- data/app/pb_kits/playbook/pb_circle_chart/_circle_chart.tsx +6 -0
- data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +2 -2
- data/app/pb_kits/playbook/pb_collapsible/child_kits/CollapsibleIcon.tsx +10 -8
- data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_icons.jsx +0 -1
- data/app/pb_kits/playbook/pb_collapsible/docs/_collapsible_state.jsx +0 -3
- data/app/pb_kits/playbook/pb_contact/_contact.tsx +51 -24
- data/app/pb_kits/playbook/pb_contact/contact.html.erb +53 -19
- data/app/pb_kits/playbook/pb_contact/contact.rb +11 -1
- data/app/pb_kits/playbook/pb_contact/contact.test.js +76 -0
- data/app/pb_kits/playbook/pb_contact/docs/_contact_unstyled.html.erb +33 -0
- data/app/pb_kits/playbook/pb_contact/docs/_contact_unstyled.jsx +46 -0
- data/app/pb_kits/playbook/pb_contact/docs/_contact_unstyled_rails.md +2 -0
- data/app/pb_kits/playbook/pb_contact/docs/_contact_unstyled_react.md +2 -0
- data/app/pb_kits/playbook/pb_contact/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_contact/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_date_picker/date_picker.test.js +24 -0
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +197 -7
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern_rails.html.erb +23 -14
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern_rails.md +1 -1
- data/app/pb_kits/playbook/pb_dialog/_dialog.tsx +2 -1
- data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +1 -1
- data/app/pb_kits/playbook/pb_dialog/dialog.rb +1 -0
- data/app/pb_kits/playbook/pb_dialog/dialog.test.jsx +14 -0
- data/app/pb_kits/playbook/pb_dialog/dialog_header.html.erb +5 -4
- data/app/pb_kits/playbook/pb_dialog/dialog_header.rb +2 -0
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_closeable.html.erb +24 -0
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_closeable.jsx +60 -0
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_closeable.md +3 -0
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_overflow_visible.html.erb +71 -0
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_overflow_visible.jsx +57 -0
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_overflow_visible_rails.md +1 -0
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_overflow_visible_react.md +1 -0
- data/app/pb_kits/playbook/pb_dialog/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_dialog/docs/index.js +3 -1
- data/app/pb_kits/playbook/pb_distribution_bar/docs/_distribution_bar_custom_colors.md +1 -1
- data/app/pb_kits/playbook/pb_draggable/context/index.tsx +316 -15
- data/app/pb_kits/playbook/pb_draggable/context/types.ts +1 -1
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +13 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_default_rails.html.erb +7 -5
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_custom.jsx +56 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_custom.md +10 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_custom_rails.html.erb +64 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_custom_rails.md +10 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_default_dates.html.erb +19 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_rails.html.erb +12 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_rails.md +26 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_range_end_rails.html.erb +19 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_range_end_rails.md +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_default_rails.html.erb +30 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_default_rails.md +3 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_rails.html.erb +29 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_rails.md +13 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_display_rails.html.erb +3 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +7 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +4 -0
- data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +44 -5
- data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +121 -0
- data/app/pb_kits/playbook/pb_dropdown/index.js +171 -3
- data/app/pb_kits/playbook/pb_dropdown/quickpick/index.ts +85 -9
- data/app/pb_kits/playbook/pb_dropdown/quickpick_helper.rb +156 -0
- data/app/pb_kits/playbook/pb_filter/Filter/FilterBackground.tsx +3 -3
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +2 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +14 -0
- data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.md +3 -0
- data/app/pb_kits/playbook/pb_form/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_gauge/_gauge.tsx +6 -0
- data/app/pb_kits/playbook/pb_line_graph/_line_graph.tsx +6 -0
- data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.html.erb +2 -2
- data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.jsx +3 -2
- data/app/pb_kits/playbook/pb_radio/docs/_radio_error.md +1 -1
- data/app/pb_kits/playbook/pb_select/_select.tsx +8 -3
- data/app/pb_kits/playbook/pb_select/docs/_select_error.md +1 -1
- data/app/pb_kits/playbook/pb_select/docs/_select_input_options.html.erb +16 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_input_options.jsx +30 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_input_options.md +1 -0
- data/app/pb_kits/playbook/pb_select/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_select/select.html.erb +2 -2
- data/app/pb_kits/playbook/pb_select/select.rb +3 -1
- data/app/pb_kits/playbook/pb_select/select.test.js +23 -0
- data/app/pb_kits/playbook/pb_table/_table.tsx +187 -33
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.jsx +134 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant.md +34 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.html.erb +101 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_rails.md +33 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.jsx +180 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination.md +3 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.html.erb +122 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_filter_variant_with_pagination_rails.md +3 -0
- data/app/pb_kits/playbook/pb_table/docs/example.yml +4 -0
- data/app/pb_kits/playbook/pb_table/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_table/table.html.erb +68 -12
- data/app/pb_kits/playbook/pb_table/table.rb +22 -3
- data/app/pb_kits/playbook/pb_table/table.test.js +143 -0
- data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +15 -3
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_error.md +1 -1
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.html.erb +6 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.jsx +25 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_required_indicator.md +3 -0
- data/app/pb_kits/playbook/pb_text_input/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_text_input/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +6 -0
- data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -0
- data/app/pb_kits/playbook/pb_text_input/text_input.test.js +16 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_error.md +1 -1
- data/app/pb_kits/playbook/pb_time_picker/_time_picker.scss +296 -0
- data/app/pb_kits/playbook/pb_time_picker/_time_picker.tsx +822 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.html.erb +2 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.jsx +16 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_24_hour.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.html.erb +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.jsx +13 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.html.erb +4 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.jsx +29 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_default_time.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_disabled.html.erb +13 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_disabled.jsx +23 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_error.html.erb +5 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_error.jsx +15 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_input_options.html.erb +14 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_label.html.erb +2 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_label.jsx +15 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.html.erb +42 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.jsx +52 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_min_max_time.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.jsx +45 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_on_handler.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.html.erb +3 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.jsx +21 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/_time_picker_timezone.md +1 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/example.yml +24 -0
- data/app/pb_kits/playbook/pb_time_picker/docs/index.js +9 -0
- data/app/pb_kits/playbook/pb_time_picker/index.ts +40 -0
- data/app/pb_kits/playbook/pb_time_picker/time_picker.html.erb +1 -0
- data/app/pb_kits/playbook/pb_time_picker/time_picker.rb +80 -0
- data/app/pb_kits/playbook/pb_time_picker/time_picker.test.jsx +114 -0
- data/app/pb_kits/playbook/pb_time_picker/time_picker_helper.ts +662 -0
- data/app/pb_kits/playbook/pb_timeline/_item.tsx +3 -0
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_show_current_year.html.erb +60 -0
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_show_current_year.jsx +118 -0
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_show_current_year.md +1 -0
- data/app/pb_kits/playbook/pb_timeline/docs/_timeline_with_date.md +1 -1
- data/app/pb_kits/playbook/pb_timeline/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_timeline/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_timeline/item.html.erb +1 -1
- data/app/pb_kits/playbook/pb_timeline/item.rb +2 -0
- data/app/pb_kits/playbook/pb_timeline/label.html.erb +2 -1
- data/app/pb_kits/playbook/pb_timeline/label.rb +2 -0
- data/app/pb_kits/playbook/pb_timeline/subcomponents/Label.tsx +3 -0
- data/app/pb_kits/playbook/pb_timeline/timeline.test.js +51 -0
- data/app/pb_kits/playbook/tokens/_colors.scss +2 -1
- data/app/pb_kits/playbook/utilities/deprecated.ts +73 -0
- data/app/pb_kits/playbook/utilities/globalProps.ts +1 -0
- data/dist/chunks/_typeahead-Ckz1ce-2.js +6 -0
- data/dist/chunks/lib-DxDBrGZX.js +29 -0
- data/dist/chunks/vendor.js +3 -3
- data/dist/menu.yml +16 -9
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/forms/builder/collection_select_field.rb +9 -1
- data/lib/playbook/forms/builder/form_field_builder.rb +13 -2
- data/lib/playbook/forms/builder/select_field.rb +9 -1
- data/lib/playbook/forms/builder/time_picker_field.rb +24 -0
- data/lib/playbook/forms/builder/time_zone_select_field.rb +9 -1
- data/lib/playbook/forms/builder.rb +1 -0
- data/lib/playbook/pb_doc_helper.rb +3 -0
- data/lib/playbook/pb_kit_helper.rb +35 -0
- data/lib/playbook/version.rb +2 -2
- metadata +89 -4
- data/dist/chunks/_typeahead-DecTL7bt.js +0 -6
- data/dist/chunks/lib-Dk4GKPut.js +0 -29
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
The `quickpick` variant provides predefined date based options when `variant:"quickpick"` is used.
|
|
2
|
+
|
|
3
|
+
Open the Dropdown above to see the default options.
|
|
4
|
+
|
|
5
|
+
The quickpick variant automatically generates hidden inputs for `start_date` and `end_date` which are populated when a date range is selected. These inputs are ready for form submission.
|
|
6
|
+
|
|
7
|
+
You can customize the input names and IDs using the following props:
|
|
8
|
+
- `start_date_name` - The name attribute for the start date input (default: `"start_date_name"`)
|
|
9
|
+
- `start_date_id` - The ID attribute for the start date input (default: `"start_date_id"`)
|
|
10
|
+
- `end_date_name` - The name attribute for the end date input (default: `"end_date_name"`)
|
|
11
|
+
- `end_date_id` - The ID attribute for the end date input (default: `"end_date_id"`)
|
|
12
|
+
|
|
13
|
+
Example with custom names:
|
|
14
|
+
```ruby
|
|
15
|
+
pb_rails("dropdown", props: {
|
|
16
|
+
variant: "quickpick",
|
|
17
|
+
start_date_name: "filter[start_date]",
|
|
18
|
+
start_date_id: "filter_start_date",
|
|
19
|
+
end_date_name: "filter[end_date]",
|
|
20
|
+
end_date_id: "filter_end_date"
|
|
21
|
+
})
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The Dropdown kit also comes with a custom event called "pb:dropdown:selected" which updates dynamically with the selection as it changes. See code snippet to see this in action.
|
|
25
|
+
|
|
26
|
+
In addition, a data attribute called data-option-selected with the selection is also rendered on the parent dropdown div.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
<%= pb_rails("dropdown", props: {
|
|
3
|
+
id: "date-range-quickpick-end-today",
|
|
4
|
+
label: "Date Range",
|
|
5
|
+
variant: "quickpick",
|
|
6
|
+
range_ends_today: true
|
|
7
|
+
}) %>
|
|
8
|
+
|
|
9
|
+
<script>
|
|
10
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
11
|
+
const dropdown = document.getElementById("date-range-quickpick-end-today");
|
|
12
|
+
if (dropdown) {
|
|
13
|
+
dropdown.addEventListener("pb:dropdown:selected", (e) => {
|
|
14
|
+
const option = e.detail;
|
|
15
|
+
console.log("Selected option:", option);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
</script>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
The optional `range_ends_today` prop can be used with the `quickpick` variant to set end date on all ranges that start with 'this' to today's date. For instance, by default 'This Year' will set end day to 12/31/(current year), but if `range_ends_today` prop is used, end date on that range will be today's date.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<%= pb_rails("dropdown", props: {
|
|
2
|
+
id: "dropdown-quickpick-with-date-pickers-default",
|
|
3
|
+
label: "Date Range",
|
|
4
|
+
name: "date_range",
|
|
5
|
+
margin_bottom: "sm",
|
|
6
|
+
variant: "quickpick",
|
|
7
|
+
default_value: "This Month",
|
|
8
|
+
controls_start_id: "start-date-picker-default",
|
|
9
|
+
controls_end_id: "end-date-picker-default",
|
|
10
|
+
start_date_id: "quickpick_start_date_default",
|
|
11
|
+
start_date_name: "start_date",
|
|
12
|
+
end_date_id: "quickpick_end_date_default",
|
|
13
|
+
end_date_name: "end_date"
|
|
14
|
+
}) %>
|
|
15
|
+
|
|
16
|
+
<%= pb_rails("date_picker", props: {
|
|
17
|
+
picker_id: "start-date-picker-default",
|
|
18
|
+
label: "Start Date",
|
|
19
|
+
name: "start_date_picker",
|
|
20
|
+
placeholder: "Select Start Date",
|
|
21
|
+
sync_start_with: "dropdown-quickpick-with-date-pickers-default"
|
|
22
|
+
}) %>
|
|
23
|
+
|
|
24
|
+
<%= pb_rails("date_picker", props: {
|
|
25
|
+
picker_id: "end-date-picker-default",
|
|
26
|
+
label: "End Date",
|
|
27
|
+
name: "end_date_picker",
|
|
28
|
+
placeholder: "Select End Date",
|
|
29
|
+
sync_end_with: "dropdown-quickpick-with-date-pickers-default"
|
|
30
|
+
}) %>
|
data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_default_rails.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
This example demonstrates the 3-input pattern with a default value. The dropdown is initialized with "This Month" selected, and both DatePickers are automatically populated with the corresponding start and end dates.
|
|
2
|
+
|
|
3
|
+
The default value can be set using the `default_value` prop with any of the quickpick option labels.
|
data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers_rails.html.erb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<%= pb_rails("dropdown", props: {
|
|
2
|
+
id: "dropdown-quickpick-with-date-pickers",
|
|
3
|
+
label: "Date Range",
|
|
4
|
+
name: "date_range",
|
|
5
|
+
margin_bottom: "sm",
|
|
6
|
+
variant: "quickpick",
|
|
7
|
+
controls_start_id: "start-date-picker",
|
|
8
|
+
controls_end_id: "end-date-picker",
|
|
9
|
+
start_date_id: "quickpick_start_date",
|
|
10
|
+
start_date_name: "start_date",
|
|
11
|
+
end_date_id: "quickpick_end_date",
|
|
12
|
+
end_date_name: "end_date"
|
|
13
|
+
}) %>
|
|
14
|
+
|
|
15
|
+
<%= pb_rails("date_picker", props: {
|
|
16
|
+
picker_id: "start-date-picker",
|
|
17
|
+
label: "Start Date",
|
|
18
|
+
name: "start_date_picker",
|
|
19
|
+
placeholder: "Select Start Date",
|
|
20
|
+
sync_start_with: "dropdown-quickpick-with-date-pickers"
|
|
21
|
+
}) %>
|
|
22
|
+
|
|
23
|
+
<%= pb_rails("date_picker", props: {
|
|
24
|
+
picker_id: "end-date-picker",
|
|
25
|
+
label: "End Date",
|
|
26
|
+
name: "end_date_picker",
|
|
27
|
+
placeholder: "Select End Date",
|
|
28
|
+
sync_end_with: "dropdown-quickpick-with-date-pickers"
|
|
29
|
+
}) %>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
The quickpick variant can be synced with two DatePickers for a 3-input pattern. When a quickpick option is selected from the dropdown, both DatePickers are automatically populated. When either DatePicker is manually changed, the dropdown is cleared.
|
|
2
|
+
|
|
3
|
+
#### Props for 3-Input Pattern:
|
|
4
|
+
|
|
5
|
+
- `controls_start_id` - ID of the start DatePicker to sync with
|
|
6
|
+
- `controls_end_id` - ID of the end DatePicker to sync with
|
|
7
|
+
|
|
8
|
+
#### DatePicker Props:
|
|
9
|
+
|
|
10
|
+
- `sync_start_with` - ID of the dropdown to clear when start date changes
|
|
11
|
+
- `sync_end_with` - ID of the dropdown to clear when end date changes
|
|
12
|
+
|
|
13
|
+
This pattern allows users to quickly select common date ranges or manually pick specific dates.
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
%>
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
<%= pb_rails("dropdown", props: {options: options}) do %>
|
|
50
|
+
<%= pb_rails("dropdown", props: {id: "user-dropdown", options: options}) do %>
|
|
51
51
|
<%= pb_rails("dropdown/dropdown_trigger", props: {placeholder: "Select a User", custom_display: custom_display}) %>
|
|
52
52
|
<%= pb_rails("dropdown/dropdown_container") do %>
|
|
53
53
|
<% options.each do |option| %>
|
|
@@ -71,6 +71,8 @@
|
|
|
71
71
|
|
|
72
72
|
<script>
|
|
73
73
|
document.addEventListener("pb:dropdown:selected", (e) => {
|
|
74
|
+
if (e.target.id !== "user-dropdown") return;
|
|
75
|
+
|
|
74
76
|
const option = e.detail;
|
|
75
77
|
const dropdown = e.target;
|
|
76
78
|
|
|
@@ -22,6 +22,12 @@ examples:
|
|
|
22
22
|
- dropdown_multi_select_with_default: Multi Select Default Value
|
|
23
23
|
- dropdown_blank_selection: Blank Selection
|
|
24
24
|
- dropdown_separators_hidden: Separators Hidden
|
|
25
|
+
- dropdown_quickpick_rails: Quick Pick Variant
|
|
26
|
+
- dropdown_quickpick_range_end_rails: Quick Pick Variant (Range Ends Today)
|
|
27
|
+
- dropdown_quickpick_default_dates: Quick Pick Variant (Default Dates)
|
|
28
|
+
- dropdown_quickpick_custom_rails: Quick Pick Variant (Custom Quick Pick Dates)
|
|
29
|
+
- dropdown_quickpick_with_date_pickers_rails: Quick Pick with Date Pickers
|
|
30
|
+
- dropdown_quickpick_with_date_pickers_default_rails: Quick Pick with Date Pickers (Default Value)
|
|
25
31
|
|
|
26
32
|
react:
|
|
27
33
|
- dropdown_default: Default
|
|
@@ -52,6 +58,7 @@ examples:
|
|
|
52
58
|
- dropdown_quickpick: Quick Pick Variant
|
|
53
59
|
- dropdown_quickpick_range_end: Quick Pick Variant (Range Ends Today)
|
|
54
60
|
- dropdown_quickpick_default_dates: Quick Pick Variant (Default Dates)
|
|
61
|
+
- dropdown_quickpick_custom: Quick Pick Variant (Custom Quick Pick Dates)
|
|
55
62
|
- dropdown_quickpick_with_date_pickers: Quick Pick Variant with Date Pickers
|
|
56
63
|
|
|
57
64
|
|
|
@@ -26,4 +26,5 @@ export {default as DropdownWithCustomActiveStyleOptions} from './_dropdown_with_
|
|
|
26
26
|
export { default as DropdownQuickpick } from './_dropdown_quickpick.jsx'
|
|
27
27
|
export { default as DropdownQuickpickRangeEnd } from './_dropdown_quickpick_range_end.jsx'
|
|
28
28
|
export { default as DropdownQuickpickDefaultDates } from './_dropdown_quickpick_default_dates.jsx'
|
|
29
|
-
export { default as DropdownQuickpickWithDatePickers } from './_dropdown_quickpick_with_date_pickers.jsx'
|
|
29
|
+
export { default as DropdownQuickpickWithDatePickers } from './_dropdown_quickpick_with_date_pickers.jsx'
|
|
30
|
+
export { default as DropdownQuickpickCustom } from './_dropdown_quickpick_custom.jsx'
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
style="display: none"
|
|
11
11
|
<%= object.required ? "required" : ""%>
|
|
12
12
|
/>
|
|
13
|
+
<% if object.variant == "quickpick" %>
|
|
14
|
+
<input id="<%= object.start_date_id %>" name="<%= object.start_date_name %>" style="display: none">
|
|
15
|
+
<input id="<%= object.end_date_id %>" name="<%= object.end_date_name %>" style="display: none">
|
|
16
|
+
<% end %>
|
|
13
17
|
<% if content.present? %>
|
|
14
18
|
<%= content.presence %>
|
|
15
19
|
<%= pb_rails("body", props: { status: "negative", text: object.error }) %>
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative "quickpick_helper"
|
|
4
|
+
|
|
3
5
|
module Playbook
|
|
4
6
|
module PbDropdown
|
|
5
7
|
class Dropdown < Playbook::KitBase
|
|
@@ -13,8 +15,10 @@ module Playbook
|
|
|
13
15
|
prop :default_value
|
|
14
16
|
prop :blank_selection, type: Playbook::Props::String,
|
|
15
17
|
default: ""
|
|
18
|
+
prop :custom_quick_pick_dates, type: Playbook::Props::HashProp,
|
|
19
|
+
default: {}
|
|
16
20
|
prop :variant, type: Playbook::Props::Enum,
|
|
17
|
-
values: %w[default subtle],
|
|
21
|
+
values: %w[default subtle quickpick],
|
|
18
22
|
default: "default"
|
|
19
23
|
prop :separators, type: Playbook::Props::Boolean,
|
|
20
24
|
default: true
|
|
@@ -26,13 +30,32 @@ module Playbook
|
|
|
26
30
|
default: false
|
|
27
31
|
prop :form_pill_props, type: Playbook::Props::HashProp,
|
|
28
32
|
default: {}
|
|
33
|
+
prop :range_ends_today, type: Playbook::Props::Boolean,
|
|
34
|
+
default: false
|
|
35
|
+
prop :controls_end_id, type: Playbook::Props::String,
|
|
36
|
+
default: ""
|
|
37
|
+
prop :controls_start_id, type: Playbook::Props::String,
|
|
38
|
+
default: ""
|
|
39
|
+
prop :start_date_id, type: Playbook::Props::String,
|
|
40
|
+
default: "start_date_id"
|
|
41
|
+
prop :start_date_name, type: Playbook::Props::String,
|
|
42
|
+
default: "start_date_name"
|
|
43
|
+
prop :end_date_id, type: Playbook::Props::String,
|
|
44
|
+
default: "end_date_id"
|
|
45
|
+
prop :end_date_name, type: Playbook::Props::String,
|
|
46
|
+
default: "end_date_name"
|
|
29
47
|
|
|
30
48
|
def data
|
|
31
49
|
Hash(prop(:data)).merge(
|
|
32
50
|
pb_dropdown: true,
|
|
33
51
|
pb_dropdown_multi_select: multi_select,
|
|
34
|
-
|
|
35
|
-
|
|
52
|
+
pb_dropdown_variant: variant,
|
|
53
|
+
form_pill_props: form_pill_props.to_json,
|
|
54
|
+
start_date_id: variant == "quickpick" ? start_date_id : nil,
|
|
55
|
+
end_date_id: variant == "quickpick" ? end_date_id : nil,
|
|
56
|
+
controls_start_id: variant == "quickpick" && controls_start_id.present? ? controls_start_id : nil,
|
|
57
|
+
controls_end_id: variant == "quickpick" && controls_end_id.present? ? controls_end_id : nil
|
|
58
|
+
).compact
|
|
36
59
|
end
|
|
37
60
|
|
|
38
61
|
def classname
|
|
@@ -48,7 +71,15 @@ module Playbook
|
|
|
48
71
|
def input_default_value
|
|
49
72
|
return "" unless default_value.present?
|
|
50
73
|
|
|
51
|
-
if
|
|
74
|
+
if variant == "quickpick"
|
|
75
|
+
d = default_value.to_s.downcase
|
|
76
|
+
matched_option = quickpick_options.find do |opt|
|
|
77
|
+
opt[:label].downcase == d
|
|
78
|
+
end
|
|
79
|
+
return matched_option[:id] if matched_option
|
|
80
|
+
|
|
81
|
+
""
|
|
82
|
+
elsif multi_select
|
|
52
83
|
default_value.map { |v| v.transform_keys(&:to_s)["id"] }.join(",")
|
|
53
84
|
else
|
|
54
85
|
default_value.transform_keys(&:to_s)["id"]
|
|
@@ -60,7 +91,15 @@ module Playbook
|
|
|
60
91
|
end
|
|
61
92
|
|
|
62
93
|
def options_with_blank
|
|
63
|
-
|
|
94
|
+
dropdown_options = variant == "quickpick" ? quickpick_options : options
|
|
95
|
+
blank_selection.present? ? [{ id: "", value: "", label: blank_selection }] + dropdown_options : dropdown_options
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def quickpick_options
|
|
99
|
+
QuickpickHelper.get_quickpick_options(
|
|
100
|
+
range_ends_today: range_ends_today,
|
|
101
|
+
custom_quick_pick_dates: custom_quick_pick_dates
|
|
102
|
+
)
|
|
64
103
|
end
|
|
65
104
|
end
|
|
66
105
|
end
|
|
@@ -539,4 +539,125 @@ test("quickpick option values are Date objects", () => {
|
|
|
539
539
|
expect(endDate.getTime()).not.toBeNaN()
|
|
540
540
|
|
|
541
541
|
expect(endDate.getTime()).toBeGreaterThanOrEqual(startDate.getTime())
|
|
542
|
+
})
|
|
543
|
+
|
|
544
|
+
test("customQuickPickDates overrides default options when override is true or undefined", () => {
|
|
545
|
+
render(
|
|
546
|
+
<Dropdown
|
|
547
|
+
customQuickPickDates={{
|
|
548
|
+
dates: [
|
|
549
|
+
{
|
|
550
|
+
label: "Last 15 months",
|
|
551
|
+
value: { timePeriod: "months", amount: 15 }
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
label: "Custom Range",
|
|
555
|
+
value: ["06/01/2022", "06/07/2022"]
|
|
556
|
+
}
|
|
557
|
+
]
|
|
558
|
+
}}
|
|
559
|
+
data={{ testid: testId }}
|
|
560
|
+
variant="quickpick"
|
|
561
|
+
/>
|
|
562
|
+
)
|
|
563
|
+
|
|
564
|
+
const kit = screen.getByTestId(testId)
|
|
565
|
+
const options = kit.querySelectorAll('.pb_dropdown_option_list')
|
|
566
|
+
|
|
567
|
+
expect(options.length).toBe(2)
|
|
568
|
+
expect(options[0]).toHaveTextContent("Last 15 months")
|
|
569
|
+
expect(options[1]).toHaveTextContent("Custom Range")
|
|
570
|
+
})
|
|
571
|
+
|
|
572
|
+
test("customQuickPickDates appends to defaults when override is false", () => {
|
|
573
|
+
render(
|
|
574
|
+
<Dropdown
|
|
575
|
+
customQuickPickDates={{
|
|
576
|
+
override: false,
|
|
577
|
+
dates: [
|
|
578
|
+
{
|
|
579
|
+
label: "Custom Option",
|
|
580
|
+
value: { timePeriod: "days", amount: 30 }
|
|
581
|
+
}
|
|
582
|
+
]
|
|
583
|
+
}}
|
|
584
|
+
data={{ testid: testId }}
|
|
585
|
+
variant="quickpick"
|
|
586
|
+
/>
|
|
587
|
+
)
|
|
588
|
+
|
|
589
|
+
const kit = screen.getByTestId(testId)
|
|
590
|
+
const options = kit.querySelectorAll('.pb_dropdown_option_list')
|
|
591
|
+
|
|
592
|
+
expect(options.length).toBe(11)
|
|
593
|
+
expect(options[0]).toHaveTextContent("Today")
|
|
594
|
+
expect(options[10]).toHaveTextContent("Custom Option")
|
|
595
|
+
})
|
|
596
|
+
|
|
597
|
+
test("customQuickPickDates with explicit date array returns correct values", () => {
|
|
598
|
+
const onSelectMock = jest.fn()
|
|
599
|
+
|
|
600
|
+
render(
|
|
601
|
+
<Dropdown
|
|
602
|
+
customQuickPickDates={{
|
|
603
|
+
dates: [
|
|
604
|
+
{
|
|
605
|
+
label: "First Week of June 2022",
|
|
606
|
+
value: ["06/01/2022", "06/07/2022"]
|
|
607
|
+
}
|
|
608
|
+
]
|
|
609
|
+
}}
|
|
610
|
+
data={{ testid: testId }}
|
|
611
|
+
onSelect={onSelectMock}
|
|
612
|
+
variant="quickpick"
|
|
613
|
+
/>
|
|
614
|
+
)
|
|
615
|
+
|
|
616
|
+
const kit = screen.getByTestId(testId)
|
|
617
|
+
const option = kit.querySelector('.pb_dropdown_option_list')
|
|
618
|
+
|
|
619
|
+
fireEvent.click(option)
|
|
620
|
+
|
|
621
|
+
const selectedItem = onSelectMock.mock.calls[0][0]
|
|
622
|
+
|
|
623
|
+
expect(selectedItem.label).toBe("First Week of June 2022")
|
|
624
|
+
expect(Array.isArray(selectedItem.value)).toBe(true)
|
|
625
|
+
expect(selectedItem.value.length).toBe(2)
|
|
626
|
+
})
|
|
627
|
+
|
|
628
|
+
test("customQuickPickDates with timePeriod calculates dates correctly", () => {
|
|
629
|
+
const onSelectMock = jest.fn()
|
|
630
|
+
|
|
631
|
+
render(
|
|
632
|
+
<Dropdown
|
|
633
|
+
customQuickPickDates={{
|
|
634
|
+
dates: [
|
|
635
|
+
{
|
|
636
|
+
label: "Last 7 days",
|
|
637
|
+
value: { timePeriod: "days", amount: 7 }
|
|
638
|
+
}
|
|
639
|
+
]
|
|
640
|
+
}}
|
|
641
|
+
data={{ testid: testId }}
|
|
642
|
+
onSelect={onSelectMock}
|
|
643
|
+
variant="quickpick"
|
|
644
|
+
/>
|
|
645
|
+
)
|
|
646
|
+
|
|
647
|
+
const kit = screen.getByTestId(testId)
|
|
648
|
+
const option = kit.querySelector('.pb_dropdown_option_list')
|
|
649
|
+
|
|
650
|
+
fireEvent.click(option)
|
|
651
|
+
|
|
652
|
+
const selectedItem = onSelectMock.mock.calls[0][0]
|
|
653
|
+
|
|
654
|
+
expect(selectedItem.label).toBe("Last 7 days")
|
|
655
|
+
expect(Array.isArray(selectedItem.value)).toBe(true)
|
|
656
|
+
|
|
657
|
+
const [startDate, endDate] = selectedItem.value
|
|
658
|
+
expect(startDate instanceof Date).toBe(true)
|
|
659
|
+
expect(endDate instanceof Date).toBe(true)
|
|
660
|
+
|
|
661
|
+
const today = new Date()
|
|
662
|
+
expect(endDate.toDateString()).toBe(today.toDateString())
|
|
542
663
|
})
|
|
@@ -28,6 +28,9 @@ export default class PbDropdown extends PbEnhancedElement {
|
|
|
28
28
|
clearBtn = null;
|
|
29
29
|
|
|
30
30
|
connect() {
|
|
31
|
+
// Store instance on element for DatePicker sync
|
|
32
|
+
this.element._pbDropdownInstance = this;
|
|
33
|
+
|
|
31
34
|
this.keyboardHandler = new PbDropdownKeyboard(this);
|
|
32
35
|
this.isMultiSelect = this.element.dataset.pbDropdownMultiSelect === "true";
|
|
33
36
|
this.formPillProps = this.element.dataset.formPillProps
|
|
@@ -252,6 +255,67 @@ export default class PbDropdown extends PbEnhancedElement {
|
|
|
252
255
|
const selectedLabel = JSON.parse(value).label;
|
|
253
256
|
triggerElement.textContent = selectedLabel;
|
|
254
257
|
this.emitSelectionChange();
|
|
258
|
+
|
|
259
|
+
// Handle quickpick variant: populate start/end date hidden inputs
|
|
260
|
+
const optionData = JSON.parse(value);
|
|
261
|
+
const startDateId = this.element.dataset.startDateId;
|
|
262
|
+
const endDateId = this.element.dataset.endDateId;
|
|
263
|
+
const controlsStartId = this.element.dataset.controlsStartId;
|
|
264
|
+
const controlsEndId = this.element.dataset.controlsEndId;
|
|
265
|
+
|
|
266
|
+
if (optionData.formatted_start_date && optionData.formatted_end_date) {
|
|
267
|
+
// Populate date inputs when option has date fields
|
|
268
|
+
if (startDateId) {
|
|
269
|
+
const startDateInput = document.getElementById(startDateId);
|
|
270
|
+
if (startDateInput) startDateInput.value = optionData.formatted_start_date;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (endDateId) {
|
|
274
|
+
const endDateInput = document.getElementById(endDateId);
|
|
275
|
+
if (endDateInput) endDateInput.value = optionData.formatted_end_date;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Sync with DatePickers if controlsStartId/controlsEndId are present
|
|
279
|
+
if (controlsStartId) {
|
|
280
|
+
const startPicker = document.querySelector(`#${controlsStartId}`)?._flatpickr;
|
|
281
|
+
if (startPicker) {
|
|
282
|
+
startPicker.setDate(optionData.formatted_start_date, true, "m/d/Y");
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
if (controlsEndId) {
|
|
287
|
+
const endPicker = document.querySelector(`#${controlsEndId}`)?._flatpickr;
|
|
288
|
+
if (endPicker) {
|
|
289
|
+
endPicker.setDate(optionData.formatted_end_date, true, "m/d/Y");
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
} else if (startDateId || endDateId) {
|
|
293
|
+
// Clear date inputs when option doesn't have date fields (e.g., blank selection)
|
|
294
|
+
if (startDateId) {
|
|
295
|
+
const startDateInput = document.getElementById(startDateId);
|
|
296
|
+
if (startDateInput) startDateInput.value = "";
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
if (endDateId) {
|
|
300
|
+
const endDateInput = document.getElementById(endDateId);
|
|
301
|
+
if (endDateInput) endDateInput.value = "";
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Clear DatePickers as well
|
|
305
|
+
if (controlsStartId) {
|
|
306
|
+
const startPicker = document.querySelector(`#${controlsStartId}`)?._flatpickr;
|
|
307
|
+
if (startPicker) {
|
|
308
|
+
startPicker.clear();
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (controlsEndId) {
|
|
313
|
+
const endPicker = document.querySelector(`#${controlsEndId}`)?._flatpickr;
|
|
314
|
+
if (endPicker) {
|
|
315
|
+
endPicker.clear();
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
255
319
|
}
|
|
256
320
|
if (customDisplayElement) {
|
|
257
321
|
triggerElement.textContent = "";
|
|
@@ -432,9 +496,50 @@ export default class PbDropdown extends PbEnhancedElement {
|
|
|
432
496
|
if (!selectedOption) return;
|
|
433
497
|
|
|
434
498
|
selectedOption.classList.add("pb_dropdown_option_selected");
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
499
|
+
const optionData = JSON.parse(selectedOption.dataset.dropdownOptionLabel);
|
|
500
|
+
this.setTriggerElementText(optionData.label);
|
|
501
|
+
|
|
502
|
+
// Handle quickpick variant: populate start/end date hidden inputs and sync DatePickers
|
|
503
|
+
if (optionData.formatted_start_date && optionData.formatted_end_date) {
|
|
504
|
+
const startDateId = this.element.dataset.startDateId;
|
|
505
|
+
const endDateId = this.element.dataset.endDateId;
|
|
506
|
+
const controlsStartId = this.element.dataset.controlsStartId;
|
|
507
|
+
const controlsEndId = this.element.dataset.controlsEndId;
|
|
508
|
+
|
|
509
|
+
if (startDateId) {
|
|
510
|
+
const startDateInput = document.getElementById(startDateId);
|
|
511
|
+
if (startDateInput) startDateInput.value = optionData.formatted_start_date;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
if (endDateId) {
|
|
515
|
+
const endDateInput = document.getElementById(endDateId);
|
|
516
|
+
if (endDateInput) endDateInput.value = optionData.formatted_end_date;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
// Sync with DatePickers - retry with delays to ensure DatePickers are initialized
|
|
520
|
+
const syncDatePickers = () => {
|
|
521
|
+
if (controlsStartId) {
|
|
522
|
+
const startPicker = document.querySelector(`#${controlsStartId}`)?._flatpickr;
|
|
523
|
+
if (startPicker) {
|
|
524
|
+
startPicker.setDate(optionData.formatted_start_date, true, "m/d/Y");
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
if (controlsEndId) {
|
|
529
|
+
const endPicker = document.querySelector(`#${controlsEndId}`)?._flatpickr;
|
|
530
|
+
if (endPicker) {
|
|
531
|
+
endPicker.setDate(optionData.formatted_end_date, true, "m/d/Y");
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
};
|
|
535
|
+
|
|
536
|
+
// Try immediately
|
|
537
|
+
syncDatePickers();
|
|
538
|
+
|
|
539
|
+
// Retry after short delay in case DatePickers aren't ready yet
|
|
540
|
+
setTimeout(syncDatePickers, 100);
|
|
541
|
+
setTimeout(syncDatePickers, 300);
|
|
542
|
+
}
|
|
438
543
|
}
|
|
439
544
|
}
|
|
440
545
|
|
|
@@ -571,6 +676,37 @@ export default class PbDropdown extends PbEnhancedElement {
|
|
|
571
676
|
if (customDisplay) {
|
|
572
677
|
customDisplay.style.display = "none";
|
|
573
678
|
}
|
|
679
|
+
|
|
680
|
+
// Clear quickpick hidden inputs
|
|
681
|
+
const startDateId = this.element.dataset.startDateId;
|
|
682
|
+
const endDateId = this.element.dataset.endDateId;
|
|
683
|
+
const controlsStartId = this.element.dataset.controlsStartId;
|
|
684
|
+
const controlsEndId = this.element.dataset.controlsEndId;
|
|
685
|
+
|
|
686
|
+
if (startDateId) {
|
|
687
|
+
const startDateInput = document.getElementById(startDateId);
|
|
688
|
+
if (startDateInput) startDateInput.value = "";
|
|
689
|
+
}
|
|
690
|
+
if (endDateId) {
|
|
691
|
+
const endDateInput = document.getElementById(endDateId);
|
|
692
|
+
if (endDateInput) endDateInput.value = "";
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
// Clear linked DatePickers if controlsStartId/controlsEndId are present
|
|
696
|
+
if (controlsStartId) {
|
|
697
|
+
const startPicker = document.querySelector(`#${controlsStartId}`)?._flatpickr;
|
|
698
|
+
if (startPicker) {
|
|
699
|
+
startPicker.clear();
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
if (controlsEndId) {
|
|
704
|
+
const endPicker = document.querySelector(`#${controlsEndId}`)?._flatpickr;
|
|
705
|
+
if (endPicker) {
|
|
706
|
+
endPicker.clear();
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
|
|
574
710
|
this.resetDropdownValue();
|
|
575
711
|
this.updatePills();
|
|
576
712
|
this.updateClearButton();
|
|
@@ -578,6 +714,38 @@ export default class PbDropdown extends PbEnhancedElement {
|
|
|
578
714
|
this.emitSelectionChange();
|
|
579
715
|
}
|
|
580
716
|
|
|
717
|
+
// Method for DatePicker sync - only clears the dropdown, not the DatePickers
|
|
718
|
+
clearSelected() {
|
|
719
|
+
// Only clear if this is a single-select quickpick variant
|
|
720
|
+
if (this.element.dataset.pbDropdownVariant !== "quickpick" || this.isMultiSelect) {
|
|
721
|
+
return;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
const customDisplay = this.element.querySelector(
|
|
725
|
+
"#dropdown_trigger_custom_display"
|
|
726
|
+
);
|
|
727
|
+
if (customDisplay) {
|
|
728
|
+
customDisplay.style.display = "none";
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// Clear quickpick hidden inputs only (not the DatePickers)
|
|
732
|
+
const startDateId = this.element.dataset.startDateId;
|
|
733
|
+
const endDateId = this.element.dataset.endDateId;
|
|
734
|
+
|
|
735
|
+
if (startDateId) {
|
|
736
|
+
const startDateInput = document.getElementById(startDateId);
|
|
737
|
+
if (startDateInput) startDateInput.value = "";
|
|
738
|
+
}
|
|
739
|
+
if (endDateId) {
|
|
740
|
+
const endDateInput = document.getElementById(endDateId);
|
|
741
|
+
if (endDateInput) endDateInput.value = "";
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
this.resetDropdownValue();
|
|
745
|
+
this.updateClearButton();
|
|
746
|
+
this.emitSelectionChange();
|
|
747
|
+
}
|
|
748
|
+
|
|
581
749
|
syncHiddenInputs() {
|
|
582
750
|
if (!this.isMultiSelect) return;
|
|
583
751
|
this.element
|