phlexi-table 0.0.1 → 0.0.3
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/lib/phlexi/table/base.rb +356 -74
- data/lib/phlexi/table/components/actions_column.rb +43 -0
- data/lib/phlexi/table/components/base.rb +22 -18
- data/lib/phlexi/table/components/column.rb +14 -0
- data/lib/phlexi/table/components/column_group.rb +23 -0
- data/lib/phlexi/table/components/concerns/displays_data.rb +27 -0
- data/lib/phlexi/table/components/concerns/displays_header.rb +30 -0
- data/lib/phlexi/table/components/concerns/groups_columns.rb +36 -0
- data/lib/phlexi/table/components/data_column.rb +33 -0
- data/lib/phlexi/table/components/header_cell.rb +19 -0
- data/lib/phlexi/table/components/options/alignment.rb +31 -0
- data/lib/phlexi/table/components/options/labels.rb +30 -0
- data/lib/phlexi/table/components/selection_cell.rb +17 -0
- data/lib/phlexi/table/components/selection_column.rb +21 -0
- data/lib/phlexi/table/components/sortable_header_cell.rb +74 -0
- data/lib/phlexi/table/display_theme.rb +6 -0
- data/lib/phlexi/table/html.rb +15 -0
- data/lib/phlexi/table/options/captions.rb +22 -0
- data/lib/phlexi/table/{field_options/description.rb → options/descriptions.rb} +5 -5
- data/lib/phlexi/table/theme.rb +25 -0
- data/lib/phlexi/table/version.rb +1 -1
- data/lib/phlexi/table/wrapped_object.rb +27 -0
- data/lib/phlexi/table.rb +5 -6
- metadata +49 -25
- data/lib/phlexi/table/components/concerns/displays_value.rb +0 -54
- data/lib/phlexi/table/components/date_time.rb +0 -49
- data/lib/phlexi/table/components/description.rb +0 -21
- data/lib/phlexi/table/components/hint.rb +0 -21
- data/lib/phlexi/table/components/label.rb +0 -15
- data/lib/phlexi/table/components/number.rb +0 -37
- data/lib/phlexi/table/components/placeholder.rb +0 -15
- data/lib/phlexi/table/components/string.rb +0 -17
- data/lib/phlexi/table/components/wrapper.rb +0 -17
- data/lib/phlexi/table/field_options/associations.rb +0 -21
- data/lib/phlexi/table/field_options/attachments.rb +0 -21
- data/lib/phlexi/table/field_options/hints.rb +0 -22
- data/lib/phlexi/table/field_options/inferred_types.rb +0 -129
- data/lib/phlexi/table/field_options/labels.rb +0 -28
- data/lib/phlexi/table/field_options/placeholders.rb +0 -18
- data/lib/phlexi/table/field_options/themes.rb +0 -132
- data/lib/phlexi/table/structure/dom.rb +0 -42
- data/lib/phlexi/table/structure/field_builder.rb +0 -158
- data/lib/phlexi/table/structure/field_collection.rb +0 -39
- data/lib/phlexi/table/structure/namespace.rb +0 -123
- data/lib/phlexi/table/structure/namespace_collection.rb +0 -40
- data/lib/phlexi/table/structure/node.rb +0 -24
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlexi
|
4
|
+
module Table
|
5
|
+
module Components
|
6
|
+
module Concerns
|
7
|
+
module GroupsColumns
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
included do
|
11
|
+
attr_reader :columns
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(*, **, &)
|
15
|
+
super(*, **)
|
16
|
+
|
17
|
+
@columns = {}
|
18
|
+
yield self if block_given?
|
19
|
+
end
|
20
|
+
|
21
|
+
def column(key, **, &)
|
22
|
+
add_column(parent.column_class.new(key, self, **, &))
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def add_column(column)
|
28
|
+
raise ArgumentError, "Column '#{column.key}' already exists" if @columns.key?(column.key) || parent.columns.key?(column.key)
|
29
|
+
|
30
|
+
@columns[column.key] = column
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlexi
|
4
|
+
module Table
|
5
|
+
module Components
|
6
|
+
class DataColumn < Column
|
7
|
+
def initialize(*, **, &block)
|
8
|
+
super(*, **)
|
9
|
+
@block = block
|
10
|
+
end
|
11
|
+
|
12
|
+
def header_cell
|
13
|
+
SortableHeaderCell.new(label, sort_params:)
|
14
|
+
end
|
15
|
+
|
16
|
+
def data_cell(wrapped_object)
|
17
|
+
if @block
|
18
|
+
@block.call(wrapped_object, key)
|
19
|
+
else
|
20
|
+
field = wrapped_object.field(key)
|
21
|
+
field.send(:"#{field.inferred_field_component}_tag")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def sort_params
|
28
|
+
options[:sort_params]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlexi
|
4
|
+
module Table
|
5
|
+
module Components
|
6
|
+
class HeaderCell < Phlexi::Table::HTML
|
7
|
+
def initialize(value)
|
8
|
+
@value = value
|
9
|
+
end
|
10
|
+
|
11
|
+
def view_template
|
12
|
+
div(class: themed(:header_cell_content_wrapper)) do
|
13
|
+
plain @value.to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlexi
|
4
|
+
module Table
|
5
|
+
module Components
|
6
|
+
module Options
|
7
|
+
module Alignment
|
8
|
+
def alignment(alignment = nil)
|
9
|
+
if alignment.nil?
|
10
|
+
options[:align] = options.fetch(:align) { calculate_alignment }
|
11
|
+
else
|
12
|
+
options[:align] = alignment
|
13
|
+
self
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def calculate_alignment
|
20
|
+
case type
|
21
|
+
when :integer, :float, :decimal
|
22
|
+
:end
|
23
|
+
else
|
24
|
+
:start
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlexi
|
4
|
+
module Table
|
5
|
+
module Components
|
6
|
+
module Options
|
7
|
+
module Labels
|
8
|
+
def label(label = nil)
|
9
|
+
if label.nil?
|
10
|
+
options[:label] = options.fetch(:label) { calculate_label }
|
11
|
+
else
|
12
|
+
options[:label] = label
|
13
|
+
self
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def calculate_label
|
20
|
+
if sample.class.respond_to?(:human_attribute_name)
|
21
|
+
sample.class.human_attribute_name(key.to_s, {base: sample})
|
22
|
+
else
|
23
|
+
key.to_s.humanize
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlexi
|
4
|
+
module Table
|
5
|
+
module Components
|
6
|
+
class SelectionCell < Phlexi::Table::HTML
|
7
|
+
def initialize(value)
|
8
|
+
@value = value
|
9
|
+
end
|
10
|
+
|
11
|
+
def view_template
|
12
|
+
input(type: :checkbox, value: @value, class: themed(:selection_checkbox))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlexi
|
4
|
+
module Table
|
5
|
+
module Components
|
6
|
+
class SelectionColumn < Column
|
7
|
+
def header_cell
|
8
|
+
SelectionCell.new("all")
|
9
|
+
end
|
10
|
+
|
11
|
+
def data_cell(wrapped_object)
|
12
|
+
SelectionCell.new(wrapped_object.field(key).dom.value)
|
13
|
+
end
|
14
|
+
|
15
|
+
def data_cell_attributes(wrapped_object)
|
16
|
+
{scope: :row}.merge(super)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlexi
|
4
|
+
module Table
|
5
|
+
module Components
|
6
|
+
class SortableHeaderCell < HeaderCell
|
7
|
+
def initialize(value, sort_params:)
|
8
|
+
@value = value
|
9
|
+
@sort_params = sort_params
|
10
|
+
end
|
11
|
+
|
12
|
+
def view_template
|
13
|
+
div(class: themed(:header_cell_content_wrapper)) do
|
14
|
+
if !@sort_params
|
15
|
+
plain @value.to_s
|
16
|
+
next
|
17
|
+
end
|
18
|
+
|
19
|
+
a(class: themed(:header_cell_sort_wrapper), href: @sort_params[:url]) do
|
20
|
+
plain @value.to_s
|
21
|
+
|
22
|
+
sort_icon = themed(:sort_icon)
|
23
|
+
sort_icon_active = themed(:sort_icon_active)
|
24
|
+
|
25
|
+
span(class: themed(:header_cell_sort_indicator)) {
|
26
|
+
svg(
|
27
|
+
class: tokens(sort_icon, -> { @sort_params[:direction] != "DESC" } => sort_icon_active),
|
28
|
+
aria_hidden: "true",
|
29
|
+
xmlns: "http://www.w3.org/2000/svg",
|
30
|
+
fill: "none",
|
31
|
+
viewbox: "0 0 10 6"
|
32
|
+
) do |s|
|
33
|
+
s.path(
|
34
|
+
stroke: "currentColor",
|
35
|
+
stroke_linecap: "round",
|
36
|
+
stroke_linejoin: "round",
|
37
|
+
stroke_width: "2",
|
38
|
+
d: "M9 5 5 1 1 5"
|
39
|
+
)
|
40
|
+
end
|
41
|
+
svg(
|
42
|
+
class: tokens(sort_icon, -> { @sort_params[:direction] != "ASC" } => sort_icon_active),
|
43
|
+
aria_hidden: "true",
|
44
|
+
xmlns: "http://www.w3.org/2000/svg",
|
45
|
+
fill: "none",
|
46
|
+
viewbox: "0 0 10 6"
|
47
|
+
) do |s|
|
48
|
+
s.path(
|
49
|
+
stroke: "currentColor",
|
50
|
+
stroke_linecap: "round",
|
51
|
+
stroke_linejoin: "round",
|
52
|
+
stroke_width: "2",
|
53
|
+
d: "M1 1 5 5 9 1"
|
54
|
+
)
|
55
|
+
end
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
next if @sort_params[:position].nil?
|
60
|
+
|
61
|
+
sort_index_clear_link = themed(:sort_index_clear_link)
|
62
|
+
sort_index_clear_link_text = themed(:sort_index_clear_link_text)
|
63
|
+
sort_index_clear_link_icon = themed(:sort_index_clear_link_icon)
|
64
|
+
|
65
|
+
a(href: @sort_params[:reset_url], title: "Clear sort", class: sort_index_clear_link) {
|
66
|
+
span(class: sort_index_clear_link_text) { (@sort_params[:position] + 1).to_s }
|
67
|
+
span(class: sort_index_clear_link_icon) { "✕" }
|
68
|
+
}
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Phlexi
|
2
|
+
module Table
|
3
|
+
class HTML < (defined?(::ApplicationComponent) ? ::ApplicationComponent : Phlex::HTML)
|
4
|
+
module Behaviour
|
5
|
+
protected
|
6
|
+
|
7
|
+
def themed(component)
|
8
|
+
Phlexi::Table::Theme.instance.resolve_theme(component)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
include Behaviour
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlexi
|
4
|
+
module Table
|
5
|
+
module Options
|
6
|
+
module Captions
|
7
|
+
def table_caption(caption = nil)
|
8
|
+
if caption.nil?
|
9
|
+
options[:caption]
|
10
|
+
else
|
11
|
+
options[:caption] = caption
|
12
|
+
self
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def has_table_caption?
|
17
|
+
table_caption.present?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
|
3
3
|
module Phlexi
|
4
4
|
module Table
|
5
|
-
module
|
6
|
-
module
|
7
|
-
def
|
5
|
+
module Options
|
6
|
+
module Descriptions
|
7
|
+
def table_description(description = nil)
|
8
8
|
if description.nil?
|
9
9
|
options[:description]
|
10
10
|
else
|
@@ -13,8 +13,8 @@ module Phlexi
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
17
|
-
|
16
|
+
def has_table_description?
|
17
|
+
table_description.present?
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Phlexi
|
2
|
+
module Table
|
3
|
+
class Theme < Phlexi::Field::Theme
|
4
|
+
def self.theme
|
5
|
+
{
|
6
|
+
wrapper: nil,
|
7
|
+
base: nil,
|
8
|
+
caption: nil,
|
9
|
+
description: nil,
|
10
|
+
header: nil,
|
11
|
+
header_grouping_row: :header_row,
|
12
|
+
header_grouping_cell: :header_row_cell,
|
13
|
+
header_row: nil,
|
14
|
+
header_cell: nil,
|
15
|
+
body_row: nil,
|
16
|
+
body_cell: nil,
|
17
|
+
name_column: nil,
|
18
|
+
align_start: nil,
|
19
|
+
align_end: nil,
|
20
|
+
selection_checkbox: nil
|
21
|
+
}.freeze
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/phlexi/table/version.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Phlexi
|
2
|
+
module Table
|
3
|
+
class WrappedObject
|
4
|
+
attr_reader :unwrapped, :index
|
5
|
+
|
6
|
+
delegate :field, to: :as_display
|
7
|
+
|
8
|
+
def initialize(object, index:, display_class:)
|
9
|
+
@unwrapped = object
|
10
|
+
@index = index
|
11
|
+
@display_class = display_class
|
12
|
+
end
|
13
|
+
|
14
|
+
def identifier
|
15
|
+
@identifier ||= Phlexi::Field.object_primary_key(unwrapped) || (index + 1)
|
16
|
+
end
|
17
|
+
|
18
|
+
def value_of(key)
|
19
|
+
@unwrapped.try(key)
|
20
|
+
end
|
21
|
+
|
22
|
+
def as_display
|
23
|
+
@as_display ||= @display_class.new(unwrapped)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/phlexi/table.rb
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require "zeitwerk"
|
4
4
|
require "phlex"
|
5
|
+
require "phlexi-field"
|
6
|
+
require "phlexi-display"
|
5
7
|
require "active_support/core_ext/object/blank"
|
6
8
|
|
7
9
|
module Phlexi
|
@@ -9,18 +11,15 @@ module Phlexi
|
|
9
11
|
Loader = Zeitwerk::Loader.new.tap do |loader|
|
10
12
|
loader.tag = File.basename(__FILE__, ".rb")
|
11
13
|
loader.inflector.inflect(
|
12
|
-
"phlexi-
|
14
|
+
"phlexi-table" => "Phlexi",
|
13
15
|
"phlexi" => "Phlexi",
|
14
|
-
"
|
16
|
+
"html" => "HTML"
|
15
17
|
)
|
18
|
+
loader.ignore("#{__dir__}/table/field_options copy")
|
16
19
|
loader.push_dir(File.expand_path("..", __dir__))
|
17
20
|
loader.setup
|
18
21
|
end
|
19
22
|
|
20
|
-
COMPONENT_BASE = (defined?(::ApplicationComponent) ? ::ApplicationComponent : Phlex::HTML)
|
21
|
-
|
22
|
-
NIL_VALUE = :__i_phlexi_display_nil_value_i__
|
23
|
-
|
24
23
|
class Error < StandardError; end
|
25
24
|
end
|
26
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phlexi-table
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Froelich
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: phlex
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: phlexi-field
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: phlexi-display
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: rake
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -185,31 +213,27 @@ files:
|
|
185
213
|
- lib/phlexi-table.rb
|
186
214
|
- lib/phlexi/table.rb
|
187
215
|
- lib/phlexi/table/base.rb
|
216
|
+
- lib/phlexi/table/components/actions_column.rb
|
188
217
|
- lib/phlexi/table/components/base.rb
|
189
|
-
- lib/phlexi/table/components/
|
190
|
-
- lib/phlexi/table/components/
|
191
|
-
- lib/phlexi/table/components/
|
192
|
-
- lib/phlexi/table/components/
|
193
|
-
- lib/phlexi/table/components/
|
194
|
-
- lib/phlexi/table/components/
|
195
|
-
- lib/phlexi/table/components/
|
196
|
-
- lib/phlexi/table/components/
|
197
|
-
- lib/phlexi/table/components/
|
198
|
-
- lib/phlexi/table/
|
199
|
-
- lib/phlexi/table/
|
200
|
-
- lib/phlexi/table/
|
201
|
-
- lib/phlexi/table/
|
202
|
-
- lib/phlexi/table/
|
203
|
-
- lib/phlexi/table/
|
204
|
-
- lib/phlexi/table/
|
205
|
-
- lib/phlexi/table/
|
206
|
-
- lib/phlexi/table/structure/dom.rb
|
207
|
-
- lib/phlexi/table/structure/field_builder.rb
|
208
|
-
- lib/phlexi/table/structure/field_collection.rb
|
209
|
-
- lib/phlexi/table/structure/namespace.rb
|
210
|
-
- lib/phlexi/table/structure/namespace_collection.rb
|
211
|
-
- lib/phlexi/table/structure/node.rb
|
218
|
+
- lib/phlexi/table/components/column.rb
|
219
|
+
- lib/phlexi/table/components/column_group.rb
|
220
|
+
- lib/phlexi/table/components/concerns/displays_data.rb
|
221
|
+
- lib/phlexi/table/components/concerns/displays_header.rb
|
222
|
+
- lib/phlexi/table/components/concerns/groups_columns.rb
|
223
|
+
- lib/phlexi/table/components/data_column.rb
|
224
|
+
- lib/phlexi/table/components/header_cell.rb
|
225
|
+
- lib/phlexi/table/components/options/alignment.rb
|
226
|
+
- lib/phlexi/table/components/options/labels.rb
|
227
|
+
- lib/phlexi/table/components/selection_cell.rb
|
228
|
+
- lib/phlexi/table/components/selection_column.rb
|
229
|
+
- lib/phlexi/table/components/sortable_header_cell.rb
|
230
|
+
- lib/phlexi/table/display_theme.rb
|
231
|
+
- lib/phlexi/table/html.rb
|
232
|
+
- lib/phlexi/table/options/captions.rb
|
233
|
+
- lib/phlexi/table/options/descriptions.rb
|
234
|
+
- lib/phlexi/table/theme.rb
|
212
235
|
- lib/phlexi/table/version.rb
|
236
|
+
- lib/phlexi/table/wrapped_object.rb
|
213
237
|
- sig/phlexi/table.rbs
|
214
238
|
homepage: https://github.com/radioactive-labs/phlexi-table
|
215
239
|
licenses:
|
@@ -1,54 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Phlexi
|
4
|
-
module Table
|
5
|
-
module Components
|
6
|
-
module Concerns
|
7
|
-
module TablesValue
|
8
|
-
def view_template
|
9
|
-
value = normalize_value(field.value)
|
10
|
-
if value.blank?
|
11
|
-
render field.placeholder_tag(**@placeholder_attributes)
|
12
|
-
else
|
13
|
-
render_value(value)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
# Renders the field value for display.
|
18
|
-
#
|
19
|
-
# @return [String] the formatted field value for display.
|
20
|
-
def render_value(value)
|
21
|
-
raise NotImplementedError, "#{self.class}#render_value"
|
22
|
-
# format_value()
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
|
27
|
-
def build_attributes
|
28
|
-
super
|
29
|
-
|
30
|
-
@placeholder_attributes = attributes.delete(:placeholder_attributes) || {}
|
31
|
-
attributes[:id] = field.dom.id if attributes[:id] == "#{field.dom.id}_#{component_name}"
|
32
|
-
end
|
33
|
-
|
34
|
-
# def format_value(value)
|
35
|
-
# case value
|
36
|
-
# when Array
|
37
|
-
# format_array_value(value)
|
38
|
-
# else
|
39
|
-
# format_single_value(value)
|
40
|
-
# end
|
41
|
-
# end
|
42
|
-
|
43
|
-
# def format_array_value(array)
|
44
|
-
# array.map { |item| format_single_value(item) }.join(", ")
|
45
|
-
# end
|
46
|
-
|
47
|
-
def normalize_value(value)
|
48
|
-
value.to_s
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Phlexi
|
4
|
-
module Table
|
5
|
-
module Components
|
6
|
-
class DateTime < Base
|
7
|
-
include Concerns::TablesValue
|
8
|
-
|
9
|
-
# Renders the date time value
|
10
|
-
#
|
11
|
-
# @param value [String, Date, Time, DateTime] The value to be rendered
|
12
|
-
# @return [void]
|
13
|
-
def render_value(value)
|
14
|
-
formatted_value = format_date_time(value)
|
15
|
-
p(**attributes) { formatted_value }
|
16
|
-
end
|
17
|
-
|
18
|
-
protected
|
19
|
-
|
20
|
-
def build_attributes
|
21
|
-
super
|
22
|
-
|
23
|
-
@options = {
|
24
|
-
format: default_format
|
25
|
-
}.merge(attributes.delete(:options) || {}).compact
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def format_date_time(value)
|
31
|
-
I18n.l(value, **@options)
|
32
|
-
end
|
33
|
-
|
34
|
-
def default_format
|
35
|
-
:long
|
36
|
-
end
|
37
|
-
|
38
|
-
def normalize_value(value)
|
39
|
-
case value
|
40
|
-
when Date, DateTime, Time, nil
|
41
|
-
value
|
42
|
-
else
|
43
|
-
raise ArgumentError, "Value must be a Date, DateTime or Time object. #{value.inspect} given."
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Phlexi
|
4
|
-
module Table
|
5
|
-
module Components
|
6
|
-
class Description < Base
|
7
|
-
def view_template
|
8
|
-
p(**attributes) {
|
9
|
-
field.description
|
10
|
-
}
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def render?
|
16
|
-
field.has_description?
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Phlexi
|
4
|
-
module Table
|
5
|
-
module Components
|
6
|
-
class Hint < Base
|
7
|
-
def view_template
|
8
|
-
p(**attributes) do
|
9
|
-
field.hint
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def render?
|
16
|
-
field.has_hint?
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|