playbook_ui 14.7.0.pre.alpha.PBNTR637quickpickdefaultdate4492 → 14.7.0.pre.alpha.PBNTR667railstypeaheadformintegration4454
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_card/docs/_card_light.md +1 -1
- data/app/pb_kits/playbook/pb_date/_date.scss +0 -3
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +1 -1
- data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_date_picker/plugins/quickPick.tsx +1 -17
- data/app/pb_kits/playbook/pb_draggable/docs/example.yml +0 -6
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +2 -2
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_loading.html.erb +1 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +63 -12
- data/app/pb_kits/playbook/pb_typeahead/index.ts +36 -2
- data/app/pb_kits/playbook/pb_typeahead/typeahead.html.erb +5 -2
- data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +4 -0
- data/dist/chunks/{_typeahead-DZmYDBaL.js → _typeahead-B-juiSkw.js} +1 -1
- data/dist/chunks/{_weekday_stacked-CgPamJiY.js → _weekday_stacked-DPqQHJ1l.js} +1 -1
- data/dist/chunks/{lib-BC6ESsxG.js → lib-DpxYMiKe.js} +1 -1
- data/dist/chunks/{pb_form_validation-B_Z9rEbg.js → pb_form_validation-LqRlnmi6.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +1 -1
- data/dist/playbook-doc.js +1 -1
- 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/typeahead_field.rb +13 -0
- data/lib/playbook/version.rb +1 -1
- metadata +6 -21
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_default_date.html.erb +0 -42
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_default_date.jsx +0 -44
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_default_date.md +0 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default_rails.html.erb +0 -26
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_default_rails.md +0 -7
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_rails.html.erb +0 -38
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_rails.md +0 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list_rails.html.erb +0 -19
- data/app/pb_kits/playbook/pb_draggable/draggable.html.erb +0 -3
- data/app/pb_kits/playbook/pb_draggable/draggable.rb +0 -18
- data/app/pb_kits/playbook/pb_draggable/draggable_container.html.erb +0 -3
- data/app/pb_kits/playbook/pb_draggable/draggable_container.rb +0 -15
- data/app/pb_kits/playbook/pb_draggable/draggable_item.html.erb +0 -7
- data/app/pb_kits/playbook/pb_draggable/draggable_item.rb +0 -18
- data/app/pb_kits/playbook/pb_draggable/index.js +0 -125
@@ -5,6 +5,19 @@ module Playbook
|
|
5
5
|
class Builder
|
6
6
|
def typeahead(name, _options = {}, _html_options = {}, props: {})
|
7
7
|
props[:name] = name
|
8
|
+
|
9
|
+
input_id = "#{name}_input"
|
10
|
+
props[:input_options] ||= {}
|
11
|
+
props[:input_options][:id] ||= input_id
|
12
|
+
|
13
|
+
props[:label] = @template.label(@object_name, name, for: props[:input_options][:id]) if props[:label] == true
|
14
|
+
|
15
|
+
if props[:validation]
|
16
|
+
validation_message = props[:validation][:message]
|
17
|
+
props[:input_options][:data] ||= {}
|
18
|
+
props[:input_options][:data][:validation_message] = validation_message
|
19
|
+
end
|
20
|
+
|
8
21
|
@template.pb_rails("typeahead", props: props)
|
9
22
|
end
|
10
23
|
end
|
data/lib/playbook/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: playbook_ui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 14.7.0.pre.alpha.
|
4
|
+
version: 14.7.0.pre.alpha.PBNTR667railstypeaheadformintegration4454
|
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: 2024-11-
|
12
|
+
date: 2024-11-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -881,9 +881,6 @@ files:
|
|
881
881
|
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_custom_override.html.erb
|
882
882
|
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_custom_override.jsx
|
883
883
|
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_custom_override.md
|
884
|
-
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_default_date.html.erb
|
885
|
-
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_default_date.jsx
|
886
|
-
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_default_date.md
|
887
884
|
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_rails.html.erb
|
888
885
|
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_rails.md
|
889
886
|
- app/pb_kits/playbook/pb_date_picker/docs/_date_picker_quick_pick_range_limit.html.erb
|
@@ -1101,29 +1098,17 @@ files:
|
|
1101
1098
|
- app/pb_kits/playbook/pb_draggable/context/types.ts
|
1102
1099
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_default.jsx
|
1103
1100
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_default.md
|
1104
|
-
- app/pb_kits/playbook/pb_draggable/docs/_draggable_default_rails.html.erb
|
1105
|
-
- app/pb_kits/playbook/pb_draggable/docs/_draggable_default_rails.md
|
1106
1101
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers.jsx
|
1107
1102
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_multiple_containers.md
|
1108
1103
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards.jsx
|
1109
1104
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards.md
|
1110
|
-
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_rails.html.erb
|
1111
|
-
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_rails.md
|
1112
1105
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list.jsx
|
1113
1106
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list.md
|
1114
|
-
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_list_rails.html.erb
|
1115
1107
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list.jsx
|
1116
1108
|
- app/pb_kits/playbook/pb_draggable/docs/_draggable_with_selectable_list.md
|
1117
1109
|
- app/pb_kits/playbook/pb_draggable/docs/example.yml
|
1118
1110
|
- app/pb_kits/playbook/pb_draggable/docs/index.js
|
1119
|
-
- app/pb_kits/playbook/pb_draggable/draggable.html.erb
|
1120
|
-
- app/pb_kits/playbook/pb_draggable/draggable.rb
|
1121
1111
|
- app/pb_kits/playbook/pb_draggable/draggable.test.jsx
|
1122
|
-
- app/pb_kits/playbook/pb_draggable/draggable_container.html.erb
|
1123
|
-
- app/pb_kits/playbook/pb_draggable/draggable_container.rb
|
1124
|
-
- app/pb_kits/playbook/pb_draggable/draggable_item.html.erb
|
1125
|
-
- app/pb_kits/playbook/pb_draggable/draggable_item.rb
|
1126
|
-
- app/pb_kits/playbook/pb_draggable/index.js
|
1127
1112
|
- app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx
|
1128
1113
|
- app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx
|
1129
1114
|
- app/pb_kits/playbook/pb_drawer/_close_icon.tsx
|
@@ -3166,11 +3151,11 @@ files:
|
|
3166
3151
|
- app/pb_kits/playbook/utilities/test/globalProps/truncate.test.js
|
3167
3152
|
- app/pb_kits/playbook/utilities/text.ts
|
3168
3153
|
- app/pb_kits/playbook/utilities/validEmojiChecker.ts
|
3169
|
-
- dist/chunks/_typeahead-
|
3170
|
-
- dist/chunks/_weekday_stacked-
|
3154
|
+
- dist/chunks/_typeahead-B-juiSkw.js
|
3155
|
+
- dist/chunks/_weekday_stacked-DPqQHJ1l.js
|
3171
3156
|
- dist/chunks/lazysizes-B7xYodB-.js
|
3172
|
-
- dist/chunks/lib-
|
3173
|
-
- dist/chunks/pb_form_validation-
|
3157
|
+
- dist/chunks/lib-DpxYMiKe.js
|
3158
|
+
- dist/chunks/pb_form_validation-LqRlnmi6.js
|
3174
3159
|
- dist/chunks/vendor.js
|
3175
3160
|
- dist/menu.yml
|
3176
3161
|
- dist/playbook-doc.js
|
@@ -1,42 +0,0 @@
|
|
1
|
-
<%= pb_rails("date_picker", props: {
|
2
|
-
allow_input: true,
|
3
|
-
default_date: "This month",
|
4
|
-
end_date_id: "quick-pick-end-date",
|
5
|
-
end_date_name: "quick-pick-end-date",
|
6
|
-
mode: "range",
|
7
|
-
picker_id: "quick-pick-default-date",
|
8
|
-
placeholder: "mm/dd/yyyy to mm/dd/yyyy",
|
9
|
-
selection_type: "quickpick",
|
10
|
-
start_date_id: "quick-pick-start-date",
|
11
|
-
start_date_name: "quick-pick-start-date"
|
12
|
-
}) %>
|
13
|
-
|
14
|
-
<%= pb_rails("date_picker", props: {
|
15
|
-
allow_input: true,
|
16
|
-
custom_quick_pick_dates: {
|
17
|
-
dates: [
|
18
|
-
{
|
19
|
-
label: "Last 15 months",
|
20
|
-
value: {
|
21
|
-
timePeriod: "months",
|
22
|
-
amount: 15,
|
23
|
-
},
|
24
|
-
},
|
25
|
-
{
|
26
|
-
label: "First Week of June 2022",
|
27
|
-
value: ["06/01/2022", "06/07/2022"],
|
28
|
-
},
|
29
|
-
],
|
30
|
-
},
|
31
|
-
default_date: "First Week of June 2022",
|
32
|
-
end_date_id: "quick-pick-end-date",
|
33
|
-
end_date_name: "quick-pick-end-date",
|
34
|
-
label: "Custom Date Picker",
|
35
|
-
mode: "range",
|
36
|
-
picker_id: "custom-quick-pick-default-date",
|
37
|
-
placeholder: "mm/dd/yyyy to mm/dd/yyyy",
|
38
|
-
selection_type: "quickpick",
|
39
|
-
start_date_id: "quick-pick-start-date",
|
40
|
-
start_date_name: "quick-pick-start-date"
|
41
|
-
}) %>
|
42
|
-
|
@@ -1,44 +0,0 @@
|
|
1
|
-
import React from "react"
|
2
|
-
import DatePicker from "../_date_picker"
|
3
|
-
|
4
|
-
const DatePickerQuickPickDefaultDate = (props) => (
|
5
|
-
<>
|
6
|
-
<DatePicker
|
7
|
-
allowInput
|
8
|
-
defaultDate="This month"
|
9
|
-
mode="range"
|
10
|
-
pickerId="quick-pick-default-date"
|
11
|
-
placeholder="mm/dd/yyyy to mm/dd/yyyy"
|
12
|
-
selectionType="quickpick"
|
13
|
-
{...props}
|
14
|
-
/>
|
15
|
-
|
16
|
-
<DatePicker
|
17
|
-
allowInput
|
18
|
-
customQuickPickDates={{
|
19
|
-
dates: [
|
20
|
-
{
|
21
|
-
label: "Last 15 months",
|
22
|
-
value: {
|
23
|
-
timePeriod: "months",
|
24
|
-
amount: 15,
|
25
|
-
},
|
26
|
-
},
|
27
|
-
{
|
28
|
-
label: "First Week of June 2022",
|
29
|
-
value: ["06/01/2022", "06/07/2022"],
|
30
|
-
},
|
31
|
-
],
|
32
|
-
}}
|
33
|
-
defaultDate="First Week of June 2022"
|
34
|
-
label="Custom Date Picker"
|
35
|
-
mode="range"
|
36
|
-
pickerId="custom-quick-pick-default-date"
|
37
|
-
placeholder="mm/dd/yyyy to mm/dd/yyyy"
|
38
|
-
selectionType="quickpick"
|
39
|
-
{...props}
|
40
|
-
/>
|
41
|
-
</>
|
42
|
-
)
|
43
|
-
|
44
|
-
export default DatePickerQuickPickDefaultDate
|
@@ -1 +0,0 @@
|
|
1
|
-
To set a default value using Quick Pick, use the `defaultDate` or `default_date` prop. This prop should match one of the labels displayed in the UI of the dropdown menu.
|
@@ -1,26 +0,0 @@
|
|
1
|
-
<% initial_items = [
|
2
|
-
{
|
3
|
-
id: "1",
|
4
|
-
url: "https://unsplash.it/500/400/?image=633",
|
5
|
-
},
|
6
|
-
{
|
7
|
-
id: "2",
|
8
|
-
url: "https://unsplash.it/500/400/?image=634",
|
9
|
-
},
|
10
|
-
{
|
11
|
-
id: "3",
|
12
|
-
url: "https://unsplash.it/500/400/?image=637",
|
13
|
-
},
|
14
|
-
] %>
|
15
|
-
|
16
|
-
<%= pb_rails("draggable", props: {initial_items: initial_items}) do %>
|
17
|
-
<%= pb_rails("draggable/draggable_container") do %>
|
18
|
-
<%= pb_rails("flex") do %>
|
19
|
-
<% initial_items.each do |item| %>
|
20
|
-
<%= pb_rails("draggable/draggable_item", props:{drag_id: item[:id]}) do %>
|
21
|
-
<%= pb_rails("image", props: { alt: item[:id], size: "md", url: item[:url], margin: "xs" }) %>
|
22
|
-
<% end %>
|
23
|
-
<% end %>
|
24
|
-
<% end %>
|
25
|
-
<% end %>
|
26
|
-
<% end %>
|
@@ -1,7 +0,0 @@
|
|
1
|
-
The `draggable` kit gives you a full subcomponent structure that allows it to be used with almost any kit.
|
2
|
-
|
3
|
-
`initial_items` is a REQUIRED prop, which is the array of objects that contains data for the the draggable items.
|
4
|
-
|
5
|
-
`draggable/draggable_container` = This specifies the container within which items can be dropped.
|
6
|
-
|
7
|
-
`draggable/draggable_item` = This specifies the items that can be dragged and dropped. `drag_id` is a REQUIRED prop for draggable_item and must match the id on the items within `initial_items`.
|
@@ -1,38 +0,0 @@
|
|
1
|
-
<% initial_items = [
|
2
|
-
{ id: "21", name: "Joe Black" },
|
3
|
-
{ id: "22", name: "Nancy White" },
|
4
|
-
{ id: "23", name: "Bill Green" },
|
5
|
-
] %>
|
6
|
-
|
7
|
-
<%= pb_rails("draggable", props: {initial_items: initial_items}) do %>
|
8
|
-
<%= pb_rails("draggable/draggable_container") do %>
|
9
|
-
<% initial_items.each do |item| %>
|
10
|
-
<%= pb_rails("draggable/draggable_item", props:{drag_id: item[:id]}) do %>
|
11
|
-
<%= pb_rails("card", props: {highlight: {position: "side", color:"primary"}, margin_bottom: "xs", padding: "xs"}) do %>
|
12
|
-
<%= pb_rails("flex", props:{align_items: "stretch", flex_direction:"column"}) do %>
|
13
|
-
<%= pb_rails("flex", props:{gap: "xs"}) do %>
|
14
|
-
<%= pb_rails("title", props: { text: item[:name], tag: "h4", size: 4 }) %>
|
15
|
-
<%= pb_rails("badge", props: {text:"35-12345" ,variant: "primary"}) %>
|
16
|
-
<% end %>
|
17
|
-
<%= pb_rails("caption", props: { size: "xs", text: "8:00A • Township Name • 90210" }) %>
|
18
|
-
<%= pb_rails("flex", props:{gap: "xxs", spacing:"between"}) do %>
|
19
|
-
<%= pb_rails("flex", props:{gap: "xxs"}) do %>
|
20
|
-
<%= pb_rails("caption", props: { size: "xs" , color: "error" }) do %>
|
21
|
-
<%= pb_rails("icon", props: { icon: "house-circle-exclamation", fixed_width: true }) %>
|
22
|
-
<% end %>
|
23
|
-
<%= pb_rails("caption", props: { size: "xs" , color: "success" }) do %>
|
24
|
-
<%= pb_rails("icon", props: { icon: "file-circle-check", fixed_width: true }) %>
|
25
|
-
<% end %>
|
26
|
-
<% end %>
|
27
|
-
<%= pb_rails("flex") do %>
|
28
|
-
<%= pb_rails("badge", props: {text:"Schedule QA" ,variant: "warning", rounded: true}) %>
|
29
|
-
<%= pb_rails("badge", props: {text:"Flex" ,variant: "primary", rounded: true}) %>
|
30
|
-
<%= pb_rails("badge", props: {text:"R99" ,variant: "primary", rounded: true}) %>
|
31
|
-
<% end %>
|
32
|
-
<% end %>
|
33
|
-
<% end %>
|
34
|
-
<% end %>
|
35
|
-
<% end %>
|
36
|
-
<% end %>
|
37
|
-
<% end %>
|
38
|
-
<% end %>
|
File without changes
|
@@ -1,19 +0,0 @@
|
|
1
|
-
<% initial_items = [
|
2
|
-
{ id: "31", name: "Philadelphia" },
|
3
|
-
{ id: "32", name: "New Jersey" },
|
4
|
-
{ id: "33", name: "Maryland" },
|
5
|
-
{ id: "34", name: "Connecticut" },
|
6
|
-
|
7
|
-
] %>
|
8
|
-
|
9
|
-
<%= pb_rails("draggable", props: {initial_items: initial_items}) do %>
|
10
|
-
<%= pb_rails("draggable/draggable_container") do %>
|
11
|
-
<%= pb_rails("list", props: {ordered: false}) do %>
|
12
|
-
<% initial_items.each do |item| %>
|
13
|
-
<%= pb_rails("draggable/draggable_item", props:{drag_id: item[:id]}) do %>
|
14
|
-
<%= pb_rails("list/item") do %><%= item[:name] %><% end %>
|
15
|
-
<% end %>
|
16
|
-
<% end %>
|
17
|
-
<% end %>
|
18
|
-
<% end %>
|
19
|
-
<% end %>
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Playbook
|
4
|
-
module PbDraggable
|
5
|
-
class Draggable < ::Playbook::KitBase
|
6
|
-
prop :initial_items, type: Playbook::Props::Array,
|
7
|
-
default: []
|
8
|
-
|
9
|
-
def data
|
10
|
-
Hash(prop(:data)).merge(pb_draggable: true)
|
11
|
-
end
|
12
|
-
|
13
|
-
def classname
|
14
|
-
generate_classname("pb_draggable")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Playbook
|
4
|
-
module PbDraggable
|
5
|
-
class DraggableContainer < ::Playbook::KitBase
|
6
|
-
def data
|
7
|
-
Hash(prop(:data)).merge(pb_draggable_container: true)
|
8
|
-
end
|
9
|
-
|
10
|
-
def classname
|
11
|
-
generate_classname("pb_draggable_container")
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Playbook
|
4
|
-
module PbDraggable
|
5
|
-
class DraggableItem < ::Playbook::KitBase
|
6
|
-
prop :drag_id, type: Playbook::Props::String,
|
7
|
-
default: ""
|
8
|
-
|
9
|
-
def data
|
10
|
-
Hash(prop(:data)).merge(pb_draggable_item: true)
|
11
|
-
end
|
12
|
-
|
13
|
-
def classname
|
14
|
-
generate_classname("pb_draggable_item")
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
import PbEnhancedElement from "../pb_enhanced_element";
|
2
|
-
|
3
|
-
const DRAGGABLE_SELECTOR = "[data-pb-draggable]";
|
4
|
-
const DRAGGABLE_CONTAINER = ".pb_draggable_container";
|
5
|
-
|
6
|
-
export default class PbDraggable extends PbEnhancedElement {
|
7
|
-
static get selector() {
|
8
|
-
return DRAGGABLE_SELECTOR;
|
9
|
-
}
|
10
|
-
|
11
|
-
connect() {
|
12
|
-
this.draggedItem = null;
|
13
|
-
this.draggedItemId = null;
|
14
|
-
document.addEventListener("DOMContentLoaded", () => this.bindEventListeners());
|
15
|
-
}
|
16
|
-
|
17
|
-
bindEventListeners() {
|
18
|
-
// Needed to prevent images within draggable items from being independently draggable
|
19
|
-
// Needed if using Image kit in draggable items
|
20
|
-
this.element.querySelectorAll(".pb_draggable_item img").forEach(img => {
|
21
|
-
img.setAttribute("draggable", "false");
|
22
|
-
});
|
23
|
-
|
24
|
-
this.element.querySelectorAll(".pb_draggable_item").forEach(item => {
|
25
|
-
item.addEventListener("dragstart", this.handleDragStart.bind(this));
|
26
|
-
item.addEventListener("dragend", this.handleDragEnd.bind(this));
|
27
|
-
item.addEventListener("dragenter", this.handleDragEnter.bind(this));
|
28
|
-
});
|
29
|
-
|
30
|
-
const container = this.element.querySelector(DRAGGABLE_CONTAINER);
|
31
|
-
if (container) {
|
32
|
-
container.addEventListener("dragover", this.handleDragOver.bind(this));
|
33
|
-
container.addEventListener("drop", this.handleDrop.bind(this));
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
handleDragStart(event) {
|
38
|
-
// Needed to prevent images within draggable items from being independently draggable
|
39
|
-
// Needed if using Image kit in draggable items
|
40
|
-
if (event.target.tagName.toLowerCase() === 'img') {
|
41
|
-
event.preventDefault();
|
42
|
-
return;
|
43
|
-
}
|
44
|
-
|
45
|
-
this.draggedItem = event.target;
|
46
|
-
this.draggedItemId = event.target.id;
|
47
|
-
event.target.classList.add("is_dragging");
|
48
|
-
|
49
|
-
if (event.dataTransfer) {
|
50
|
-
event.dataTransfer.effectAllowed = 'move';
|
51
|
-
event.dataTransfer.setData('text/plain', this.draggedItemId);
|
52
|
-
}
|
53
|
-
|
54
|
-
setTimeout(() => {
|
55
|
-
event.target.style.opacity = '0.5';
|
56
|
-
}, 0);
|
57
|
-
}
|
58
|
-
|
59
|
-
handleDragEnter(event) {
|
60
|
-
if (!this.draggedItem || event.target === this.draggedItem) return;
|
61
|
-
|
62
|
-
const targetItem = event.target.closest('.pb_draggable_item');
|
63
|
-
if (!targetItem) return;
|
64
|
-
|
65
|
-
const container = targetItem.parentNode;
|
66
|
-
const items = Array.from(container.children);
|
67
|
-
const draggedIndex = items.indexOf(this.draggedItem);
|
68
|
-
const targetIndex = items.indexOf(targetItem);
|
69
|
-
|
70
|
-
if (draggedIndex > targetIndex) {
|
71
|
-
container.insertBefore(this.draggedItem, targetItem);
|
72
|
-
} else {
|
73
|
-
container.insertBefore(this.draggedItem, targetItem.nextSibling);
|
74
|
-
}
|
75
|
-
}
|
76
|
-
|
77
|
-
handleDragOver(event) {
|
78
|
-
event.preventDefault();
|
79
|
-
const container = event.target.closest(DRAGGABLE_CONTAINER);
|
80
|
-
|
81
|
-
if (container) {
|
82
|
-
container.classList.add("active_container");
|
83
|
-
}
|
84
|
-
}
|
85
|
-
|
86
|
-
handleDrop(event) {
|
87
|
-
event.preventDefault();
|
88
|
-
const container = event.target.closest(DRAGGABLE_CONTAINER);
|
89
|
-
if (!container || !this.draggedItem) return;
|
90
|
-
|
91
|
-
container.classList.remove("active_container");
|
92
|
-
this.draggedItem.style.opacity = '1';
|
93
|
-
|
94
|
-
// Updated order of items as an array of item IDs
|
95
|
-
const reorderedItems = Array.from(container.children)
|
96
|
-
.filter(item => item.classList.contains("pb_draggable_item"))
|
97
|
-
.map(item => item.id.replace("item_", ""));
|
98
|
-
|
99
|
-
// Store reordered items in a data attribute on the container
|
100
|
-
container.setAttribute("data-reordered-items", JSON.stringify(reorderedItems));
|
101
|
-
|
102
|
-
const customEvent = new CustomEvent('pb-draggable-reorder', {
|
103
|
-
detail: {
|
104
|
-
reorderedItems,
|
105
|
-
containerId: container.id,
|
106
|
-
}
|
107
|
-
});
|
108
|
-
this.element.dispatchEvent(customEvent);
|
109
|
-
|
110
|
-
this.draggedItem = null;
|
111
|
-
this.draggedItemId = null;
|
112
|
-
}
|
113
|
-
|
114
|
-
|
115
|
-
handleDragEnd(event) {
|
116
|
-
event.target.classList.remove("is_dragging");
|
117
|
-
event.target.style.opacity = '1';
|
118
|
-
this.draggedItem = null;
|
119
|
-
this.draggedItemId = null;
|
120
|
-
|
121
|
-
this.element.querySelectorAll(DRAGGABLE_CONTAINER).forEach(container => {
|
122
|
-
container.classList.remove("active_container");
|
123
|
-
});
|
124
|
-
}
|
125
|
-
}
|