Skip to content

Commit d3fe40c

Browse files
committed
removed flatpickr component, provide integration docs instead2
1 parent 54208ae commit d3fe40c

File tree

9 files changed

+155
-158
lines changed

9 files changed

+155
-158
lines changed

app/concepts/matestack/ui/bootstrap/form/flatpickr.js

Lines changed: 0 additions & 51 deletions
This file was deleted.

app/concepts/matestack/ui/bootstrap/form/flatpickr.rb

Lines changed: 0 additions & 101 deletions
This file was deleted.

app/concepts/matestack/ui/bootstrap/registry.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,12 @@ module Matestack::Ui::Bootstrap::Registry
3636
bs_form_checkbox: Matestack::Ui::Bootstrap::Form::Checkbox,
3737
bs_form_radio: Matestack::Ui::Bootstrap::Form::Radio,
3838
bs_form_switch: Matestack::Ui::Bootstrap::Form::Switch,
39-
bs_form_submit: Matestack::Ui::Bootstrap::Form::Submit,
40-
bs_form_flatpickr: Matestack::Ui::Bootstrap::Form::Flatpickr,
39+
bs_form_submit: Matestack::Ui::Bootstrap::Form::Submit
4140
}
4241

4342
CONTENT = {
4443
bs_figure: Matestack::Ui::Bootstrap::Content::Figure,
45-
bs_smart_collection: Matestack::Ui::Bootstrap::Content::Collection::Collection,
44+
bs_smart_collection: Matestack::Ui::Bootstrap::Content::SmartCollection::Collection,
4645
}
4746

4847
LAYOUTS = {

app/javascript/matestack-ui-bootstrap/index.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@ import '../../concepts/matestack/ui/bootstrap/components/modal'
1313
import '../../concepts/matestack/ui/bootstrap/components/toast'
1414
import '../../concepts/matestack/ui/bootstrap/components/popover'
1515
import '../../concepts/matestack/ui/bootstrap/components/tooltip'
16-
import '../../concepts/matestack/ui/bootstrap/form/flatpickr'
1716
import '../../concepts/matestack/ui/bootstrap/layout/sidebar'
1817
import '../../concepts/matestack/ui/bootstrap/layout/sidebar.scss'
19-
import '../../concepts/matestack/ui/bootstrap/content/collection/collection.scss'
18+
import '../../concepts/matestack/ui/bootstrap/content/smart_collection/collection.scss'
2019

2120
const MatestackUiBootstrap = {}
2221

docs/integrations/flatpickr.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# Flatpickr Integration
2+
3+
[Flatpickr](https://flatpickr.js.org) Datepicker integration, compatible with Bootstrap's design schema. In order to limit the scope of the `matestack-ui-bootstrap` gem, Flatpickr is not part of this gem.
4+
5+
The below shown example should enable you to easily integrate Flatpickr (or any other Datepicker library) according to your needs!
6+
7+
## Ruby component
8+
9+
`app/matestack/components/form/flatpickr.rb`
10+
11+
```ruby
12+
class Components::Form::Flatpickr < Matestack::Ui::Bootstrap::Form::Input
13+
14+
optional :enable_time
15+
16+
vue_js_component_name "form-flatpickr-component"
17+
18+
def setup
19+
@component_config[:init_value] = init_value
20+
@component_config[:enable_time] = enable_time
21+
end
22+
23+
def response
24+
# exactly one root element is required since this is a Vue.js component template
25+
div class: "form-flatpickr-component" do
26+
label for: attr_key, class: "form-label", text: input_label if input_label
27+
input input_attributes.merge(bootstrap_flatpickr_input_attributes)
28+
render_errors
29+
render_form_text
30+
end
31+
end
32+
33+
def bootstrap_flatpickr_input_attributes
34+
bootstrap_input_attributes.merge({
35+
type: :text,
36+
class: (options[:class] || "") << (" form-control flatpickr"),
37+
disabled: disabled
38+
})
39+
end
40+
41+
end
42+
```
43+
44+
`app/matestack/components/registry.rb`
45+
46+
## Registry
47+
48+
```ruby
49+
module Components::Registry
50+
51+
Matestack::Ui::Core::Component::Registry.register_components(
52+
#...
53+
form_flatpickr: Components::Form::Flatpickr
54+
#...
55+
)
56+
57+
end
58+
59+
```
60+
61+
`app/matestack/components/chart_js.js`
62+
63+
## Vue.js component
64+
65+
**Do not forget to require flatpickr in your package.json**
66+
**Do not forget to import the following file into you application pack**
67+
68+
```javascript
69+
import flatpickr from "flatpickr";
70+
71+
MatestackUiCore.Vue.component('form-flatpickr-component', {
72+
mixins: [MatestackUiCore.componentMixin, MatestackUiCore.formInputMixin],
73+
data() {
74+
return {};
75+
},
76+
mounted: function(){
77+
flatpickr(this.$el.querySelector('.flatpickr'), {
78+
defaultDate: this.componentConfig["init_value"],
79+
enableTime: (this.componentConfig["enable_time"] == true)
80+
});
81+
//all kind of configuration possible for flatpickr may be implemented here according to your needs
82+
}
83+
});
84+
85+
```
86+
87+
## Usage
88+
89+
### Example 1: Usage in form (e.g. mapped to an Active Record model) with enabled time picker
90+
91+
```ruby
92+
form some_form_config do
93+
94+
div class: "mb-3" do
95+
form_flatpickr key: :shipped_at, label: "Shipped at", enable_time: true, type: :text
96+
end
97+
98+
div class: "mb-3" do
99+
bs_form_submit button_variant: :primary, spinner_variant: :light, text: "Submit"
100+
end
101+
102+
end
103+
```

spec/dummy/app/javascript/packs/application.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import MatestackUiCore from 'matestack-ui-core';
1313
import MatestackUiBootstrap from 'matestack-ui-bootstrap';
1414

1515
import '../../matestack/dummy/components/chart_js.js'
16+
import '../../matestack/dummy/components/form/flatpickr.js'
1617

1718
import './stylesheets/rouge.scss.erb'
1819
import '../../matestack/dummy/components/md.scss'
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import flatpickr from "flatpickr";
2+
3+
MatestackUiCore.Vue.component('form-flatpickr-component', {
4+
mixins: [MatestackUiCore.componentMixin, MatestackUiCore.formInputMixin],
5+
data() {
6+
return {};
7+
},
8+
mounted: function(){
9+
flatpickr(this.$el.querySelector('.flatpickr'), {
10+
defaultDate: this.componentConfig["init_value"],
11+
enableTime: (this.componentConfig["enable_time"] == true)
12+
});
13+
}
14+
});
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Dummy::Components::Form::Flatpickr < Matestack::Ui::Bootstrap::Form::Input
2+
3+
optional :form_text
4+
optional :disabled
5+
optional :enable_time
6+
optional :type
7+
8+
vue_js_component_name "form-flatpickr-component"
9+
10+
def setup
11+
@component_config[:init_value] = init_value
12+
@component_config[:enable_time] = enable_time
13+
end
14+
15+
def response
16+
# exactly one root element is required since this is a Vue.js component template
17+
div class: "form-flatpickr-component" do
18+
label for: attr_key, class: "form-label", text: input_label if input_label
19+
input input_attributes.merge(bootstrap_flatpickr_input_attributes)
20+
render_errors
21+
render_form_text
22+
end
23+
end
24+
25+
def bootstrap_flatpickr_input_attributes
26+
bootstrap_input_attributes.merge({
27+
type: :text,
28+
class: (options[:class] || "") << (" form-control flatpickr"),
29+
disabled: disabled
30+
})
31+
end
32+
33+
end

spec/dummy/app/matestack/dummy/pages/orders/form.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ def order_form_partial form_config
44
form form_config do
55

66
div class: "mb-3" do
7-
bs_form_flatpickr key: :shipped_at, label: "Shipped at", enable_time: true, type: :text
7+
form_flatpickr key: :shipped_at, label: "Shipped at", enable_time: true, type: :text
88
end
99

1010
div class: "mb-3" do

0 commit comments

Comments
 (0)