oversee 0.1.0 → 0.2.0

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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +53 -14
  3. data/app/components/oversee/{application_component.rb → base.rb} +1 -1
  4. data/app/components/oversee/card.rb +13 -0
  5. data/app/components/oversee/dashboard/filters.rb +54 -0
  6. data/app/components/oversee/dashboard/header.rb +41 -0
  7. data/app/components/oversee/dashboard/index.rb +24 -0
  8. data/app/components/oversee/dashboard/javascript.rb +9 -0
  9. data/app/components/oversee/dashboard/pagination.rb +23 -0
  10. data/app/components/oversee/dashboard/sidebar.rb +53 -0
  11. data/app/components/oversee/dashboard/tailwind.rb +33 -0
  12. data/app/components/oversee/field/display.rb +29 -0
  13. data/app/components/oversee/field/form.rb +49 -0
  14. data/app/components/oversee/field/input/boolean.rb +23 -0
  15. data/app/components/oversee/field/input/datetime.rb +20 -0
  16. data/app/components/oversee/field/input/integer.rb +20 -0
  17. data/app/components/oversee/field/input/string.rb +20 -0
  18. data/app/components/oversee/field/input.rb +26 -0
  19. data/app/components/oversee/field/label.rb +24 -0
  20. data/app/components/oversee/field/value/boolean.rb +50 -0
  21. data/app/components/oversee/field/value/datetime.rb +9 -0
  22. data/app/components/oversee/field/value/enum.rb +9 -0
  23. data/app/components/oversee/field/value/integer.rb +9 -0
  24. data/app/components/oversee/field/value/string.rb +20 -0
  25. data/app/components/oversee/field/value/text.rb +9 -0
  26. data/app/components/oversee/field/value.rb +34 -0
  27. data/app/components/oversee/resources/base.rb +4 -0
  28. data/app/components/oversee/resources/errors.rb +41 -0
  29. data/app/components/oversee/resources/form.rb +49 -0
  30. data/app/components/oversee/resources/index.rb +26 -0
  31. data/app/components/oversee/resources/new.rb +17 -0
  32. data/app/components/oversee/resources/show.rb +126 -0
  33. data/app/components/oversee/resources/table.rb +109 -0
  34. data/app/components/oversee/table/body.rb +13 -0
  35. data/app/components/oversee/table/data.rb +5 -0
  36. data/app/components/oversee/table/head.rb +9 -0
  37. data/app/components/oversee/table/row.rb +9 -0
  38. data/app/components/oversee/table.rb +21 -0
  39. data/app/controllers/oversee/dashboard_controller.rb +4 -0
  40. data/app/controllers/oversee/resources_controller.rb +79 -21
  41. data/app/models/oversee/resource.rb +36 -0
  42. data/app/oversee/filter.rb +39 -0
  43. data/app/oversee/resource.rb +10 -0
  44. data/app/oversee/search.rb +34 -0
  45. data/app/views/layouts/oversee/application.html.erb +6 -6
  46. data/config/locales/en.yml +4 -0
  47. data/config/locales/oversee.en.yml +4 -0
  48. data/config/routes.rb +12 -6
  49. data/lib/oversee/configuration.rb +3 -0
  50. data/lib/oversee/version.rb +1 -1
  51. data/lib/oversee.rb +19 -2
  52. metadata +73 -47
  53. data/app/assets/config/oversee_manifest.js +0 -1
  54. data/app/assets/stylesheets/oversee/application.css +0 -15
  55. data/app/components/oversee/card_component.rb +0 -15
  56. data/app/components/oversee/dashboard/sidebar_component.rb +0 -127
  57. data/app/components/oversee/field_component.rb +0 -36
  58. data/app/components/oversee/field_label_component.rb +0 -155
  59. data/app/components/oversee/fields/display_row_component.rb +0 -58
  60. data/app/components/oversee/fields/input/datetime_component.rb +0 -27
  61. data/app/components/oversee/fields/input/integer_component.rb +0 -26
  62. data/app/components/oversee/fields/input/string_component.rb +0 -26
  63. data/app/components/oversee/fields/value/boolean_component.rb +0 -44
  64. data/app/components/oversee/fields/value/datetime_component.rb +0 -16
  65. data/app/components/oversee/fields/value/enum_component.rb +0 -16
  66. data/app/components/oversee/fields/value/integer_component.rb +0 -16
  67. data/app/components/oversee/fields/value/string_component.rb +0 -23
  68. data/app/components/oversee/fields/value/text_component.rb +0 -16
  69. data/app/helpers/oversee/application_helper.rb +0 -5
  70. data/app/mailers/oversee/application_mailer.rb +0 -6
  71. data/app/views/oversee/application/_javascript.html.erb +0 -17
  72. data/app/views/oversee/dashboard/show.html.erb +0 -18
  73. data/app/views/oversee/resources/_form.html.erb +0 -10
  74. data/app/views/oversee/resources/_input_field.html.erb +0 -20
  75. data/app/views/oversee/resources/edit.html.erb +0 -31
  76. data/app/views/oversee/resources/index.html.erb +0 -59
  77. data/app/views/oversee/resources/input_field.html.erb +0 -1
  78. data/app/views/oversee/resources/input_field.turbo_stream.erb +0 -3
  79. data/app/views/oversee/resources/show.html.erb +0 -51
  80. data/app/views/oversee/resources/update.turbo_stream.erb +0 -3
  81. data/app/views/shared/_sidebar.html.erb +0 -32
@@ -1,155 +0,0 @@
1
- module Oversee
2
- class FieldLabelComponent < Phlex::HTML
3
- def initialize(datatype: :string, key: nil)
4
- @datatype = datatype
5
- @key = key
6
- end
7
-
8
- def view_template
9
- div(class:"inline-flex items-center space-x-2") do
10
- div(class: "h-5 w-5 bg-gray-100 inline-flex items-center justify-center rounded") do
11
- respond_to?("#{@datatype}_icon", true) ? send("#{@datatype}_icon") : data_icon
12
- end
13
- p(class: "uppercase text-xs text-gray-500 font-medium") { @key.to_s.humanize }
14
- end
15
- end
16
-
17
- private
18
-
19
- def string_icon
20
- svg(
21
- xmlns: "http://www.w3.org/2000/svg",
22
- class: "h-2.5 w-2.5",
23
- viewbox: "0 0 24 24",
24
- stroke_width: "2",
25
- stroke: "currentColor",
26
- fill: "none",
27
- stroke_linecap: "round",
28
- stroke_linejoin: "round"
29
- ) do |s|
30
- s.path(stroke: "none", d: "M0 0h24v24H0z", fill: "none")
31
- s.path(d: "M6 4l12 0")
32
- s.path(d: "M12 4l0 16")
33
- end
34
- end
35
-
36
- def integer_icon
37
- svg(
38
- xmlns: "http://www.w3.org/2000/svg",
39
- class: "h-2.5 w-2.5",
40
- viewbox: "0 0 24 24",
41
- stroke_width: "2",
42
- stroke: "currentColor",
43
- fill: "none",
44
- stroke_linecap: "round",
45
- stroke_linejoin: "round"
46
- ) do |s|
47
- s.path(stroke: "none", d: "M0 0h24v24H0z", fill: "none")
48
- s.path(d: "M4 17v-10l7 10v-10")
49
- s.path(d: "M15 17h5")
50
- s.path(d: "M17.5 10m-2.5 0a2.5 3 0 1 0 5 0a2.5 3 0 1 0 -5 0")
51
- end
52
- end
53
-
54
- def text_icon
55
- svg(
56
- xmlns: "http://www.w3.org/2000/svg",
57
- class: "h-2.5 w-2.5",
58
- viewbox: "0 0 24 24",
59
- stroke_width: "2",
60
- stroke: "currentColor",
61
- fill: "none",
62
- stroke_linecap: "round",
63
- stroke_linejoin: "round"
64
- ) do |s|
65
- s.path(stroke: "none", d: "M0 0h24v24H0z", fill: "none")
66
- s.path(d: "M6 4l12 0")
67
- s.path(d: "M12 4l0 16")
68
- end
69
- end
70
-
71
- def boolean_icon
72
- svg(
73
- xmlns: "http://www.w3.org/2000/svg",
74
- class: "h-2.5 w-2.5",
75
- viewbox: "0 0 24 24",
76
- stroke_width: "2",
77
- stroke: "currentColor",
78
- fill: "none",
79
- stroke_linecap: "round",
80
- stroke_linejoin: "round"
81
- ) do |s|
82
- s.path(stroke: "none", d: "M0 0h24v24H0z", fill: "none")
83
- s.path(d: "M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0")
84
- s.path(
85
- d:
86
- "M2 6m0 6a6 6 0 0 1 6 -6h8a6 6 0 0 1 6 6v0a6 6 0 0 1 -6 6h-8a6 6 0 0 1 -6 -6z"
87
- )
88
- end
89
- end
90
-
91
- def enum_icon
92
- svg(
93
- xmlns: "http://www.w3.org/2000/svg",
94
- class: "h-2.5 w-2.5",
95
- viewbox: "0 0 24 24",
96
- stroke_width: "2",
97
- stroke: "currentColor",
98
- fill: "none",
99
- stroke_linecap: "round",
100
- stroke_linejoin: "round"
101
- ) do |s|
102
- s.path(stroke: "none", d: "M0 0h24v24H0z", fill: "none")
103
- s.path(
104
- d:
105
- "M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z"
106
- )
107
- s.path(d: "M9 11l3 3l3 -3")
108
- end
109
- end
110
-
111
- def datetime_icon
112
- svg(
113
- xmlns: "http://www.w3.org/2000/svg",
114
- class: "h-2.5 w-2.5",
115
- viewbox: "0 0 24 24",
116
- stroke_width: "2",
117
- stroke: "currentColor",
118
- fill: "none",
119
- stroke_linecap: "round",
120
- stroke_linejoin: "round"
121
- ) do |s|
122
- s.path(stroke: "none", d: "M0 0h24v24H0z", fill: "none")
123
- s.path(
124
- d:
125
- "M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z"
126
- )
127
- s.path(d: "M16 3v4")
128
- s.path(d: "M8 3v4")
129
- s.path(d: "M4 11h16")
130
- s.path(d: "M11 15h1")
131
- s.path(d: "M12 15v3")
132
- end
133
- end
134
-
135
- def data_icon
136
- svg(
137
- xmlns: "http://www.w3.org/2000/svg",
138
- viewbox: "0 0 24 24",
139
- fill: "none",
140
- stroke: "currentColor",
141
- stroke_width: "2",
142
- stroke_linecap: "round",
143
- stroke_linejoin: "round",
144
- class: "h-2.5 w-2.5",
145
- ) do |s|
146
- s.path(stroke: "none", d: "M0 0h24v24H0z", fill: "none")
147
- s.path(d: "M15 12h.01")
148
- s.path(d: "M12 12h.01")
149
- s.path(d: "M9 12h.01")
150
- s.path(d: "M6 19a2 2 0 0 1 -2 -2v-4l-1 -1l1 -1v-4a2 2 0 0 1 2 -2")
151
- s.path(d: "M18 19a2 2 0 0 0 2 -2v-4l1 -1l-1 -1v-4a2 2 0 0 0 -2 -2")
152
- end
153
- end
154
- end
155
- end
@@ -1,58 +0,0 @@
1
- class Oversee::Fields::DisplayRowComponent < Phlex::HTML
2
- include Phlex::Rails::Helpers::DOMID
3
- include Phlex::Rails::Helpers::Routes
4
-
5
- def initialize(key:, resource:, datatype:, value:)
6
- @datatype = datatype
7
- @resource = resource
8
- @key = key
9
- @value = value
10
- end
11
-
12
- def view_template
13
- div(
14
- id: dom_id(@resource, @key),
15
- class:
16
- "py-4 px-8 hover:bg-gray-50 group flex items-center justify-between"
17
- ) do
18
- div do
19
- render Oversee::FieldLabelComponent.new(key: @key, datatype: @datatype)
20
- div(class: "mt-2 bg-gray-100 rounded px-4 py-2 min-w-64") do
21
- render Oversee::FieldComponent.new(kind: :value, datatype: @datatype, value: @resource.send(@key))
22
- end
23
- end
24
- div do
25
- a(
26
- href:
27
- (
28
- helpers.input_field_resource_path(
29
- @resource.id,
30
- resource: @resource.class,
31
- key: @key
32
- )
33
- ),
34
- data_turbo_stream: "true",
35
- class:
36
- "opacity-0 group-hover:opacity-100 transition h-8 w-8 rounded-md bg-white border inline-flex justify-center items-center text-gray-400 hover:text-gray-800"
37
- ) do
38
- svg(
39
- xmlns: "http://www.w3.org/2000/svg",
40
- viewbox: "0 0 16 16",
41
- fill: "currentColor",
42
- data_slot: "icon",
43
- class: "w-4 h-4"
44
- ) do |s|
45
- s.path(
46
- d:
47
- "M13.488 2.513a1.75 1.75 0 0 0-2.475 0L6.75 6.774a2.75 2.75 0 0 0-.596.892l-.848 2.047a.75.75 0 0 0 .98.98l2.047-.848a2.75 2.75 0 0 0 .892-.596l4.261-4.262a1.75 1.75 0 0 0 0-2.474Z"
48
- )
49
- s.path(
50
- d:
51
- "M4.75 3.5c-.69 0-1.25.56-1.25 1.25v6.5c0 .69.56 1.25 1.25 1.25h6.5c.69 0 1.25-.56 1.25-1.25V9A.75.75 0 0 1 14 9v2.25A2.75 2.75 0 0 1 11.25 14h-6.5A2.75 2.75 0 0 1 2 11.25v-6.5A2.75 2.75 0 0 1 4.75 2H7a.75.75 0 0 1 0 1.5H4.75Z"
52
- )
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,27 +0,0 @@
1
-
2
- module Oversee
3
- module Fields
4
- module Input
5
- class DatetimeComponent < Phlex::HTML
6
- def initialize(key:, value:)
7
- @key = key
8
- @value = value
9
- end
10
-
11
- def view_template
12
- input type: "datetime-local", id: field_id, name: field_name, value: @value.strftime("%Y-%m-%dT%T"), class: "border rounded-md px-4 py-2 text-sm"
13
- end
14
-
15
- private
16
-
17
- def field_id
18
- "resource_#{@key.to_s}"
19
- end
20
-
21
- def field_name
22
- "resource[#{@key.to_s}]"
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,26 +0,0 @@
1
- module Oversee
2
- module Fields
3
- module Input
4
- class IntegerComponent < Phlex::HTML
5
- def initialize(key:, value:)
6
- @key = key
7
- @value = value
8
- end
9
-
10
- def view_template
11
- input type: "number", id: field_id, name: field_name, value: @value, class: "border rounded-md px-4 py-2 text-sm"
12
- end
13
-
14
- private
15
-
16
- def field_id
17
- "resource_#{@key.to_s}"
18
- end
19
-
20
- def field_name
21
- "resource[#{@key.to_s}]"
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,26 +0,0 @@
1
- module Oversee
2
- module Fields
3
- module Input
4
- class StringComponent < Phlex::HTML
5
- def initialize(key:, value:)
6
- @key = key
7
- @value = value
8
- end
9
-
10
- def view_template
11
- input type: "text", id: field_id, name: field_name, value: @value, class: "border rounded-md px-4 py-2 text-sm"
12
- end
13
-
14
- private
15
-
16
- def field_id
17
- "resource_#{@key.to_s}"
18
- end
19
-
20
- def field_name
21
- "resource[#{@key.to_s}]"
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,44 +0,0 @@
1
- module Oversee
2
- module Fields
3
- module Value
4
- class BooleanComponent < Phlex::HTML
5
- def initialize(key: nil, value: nil, kind: :value)
6
- @value = value
7
- end
8
-
9
- def view_template
10
- return p(class: "text-gray-500 text-xs"){ "—" } if @value.blank?
11
- if @value
12
- svg(
13
- xmlns: "http://www.w3.org/2000/svg",
14
- viewbox: "0 0 16 16",
15
- fill: "currentColor",
16
- data_slot: "icon",
17
- class: "w-4 h-4 text-emerald-500"
18
- ) do |s|
19
- s.path(
20
- fill_rule: "evenodd",
21
- d:
22
- "M12.416 3.376a.75.75 0 0 1 .208 1.04l-5 7.5a.75.75 0 0 1-1.154.114l-3-3a.75.75 0 0 1 1.06-1.06l2.353 2.353 4.493-6.74a.75.75 0 0 1 1.04-.207Z",
23
- clip_rule: "evenodd"
24
- )
25
- end
26
- else
27
- svg(
28
- xmlns: "http://www.w3.org/2000/svg",
29
- viewbox: "0 0 16 16",
30
- fill: "currentColor",
31
- data_slot: "icon",
32
- class: "w-4 h-4 text-red-400"
33
- ) do |s|
34
- s.path(
35
- d:
36
- "M5.28 4.22a.75.75 0 0 0-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L8 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L9.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L8 6.94 5.28 4.22Z"
37
- )
38
- end
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,16 +0,0 @@
1
- module Oversee
2
- module Fields
3
- module Value
4
- class DatetimeComponent < Phlex::HTML
5
- def initialize(key: nil, value: nil, kind: :value)
6
- @value = value
7
- end
8
-
9
- def view_template
10
- return p(class: "text-gray-500 text-xs"){ "—" } if @value.blank?
11
- p { @value&.to_fs(:short) || "N/A" }
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,16 +0,0 @@
1
- module Oversee
2
- module Fields
3
- module Value
4
- class EnumComponent < Phlex::HTML
5
- def initialize(key: nil, value: nil, kind: :value)
6
- @value = value
7
- end
8
-
9
- def view_template
10
- return p(class: "text-gray-500 text-xs"){ "—" } if @value.blank?
11
- p { @value.to_s }
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,16 +0,0 @@
1
- module Oversee
2
- module Fields
3
- module Value
4
- class IntegerComponent < Phlex::HTML
5
- def initialize(key: nil, value: nil, kind: :value)
6
- @value = value
7
- end
8
-
9
- def view_template
10
- return p(class: "text-gray-500 text-xs"){ "—" } if @value.blank?
11
- p { @value }
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,23 +0,0 @@
1
- module Oversee
2
- module Fields
3
- module Value
4
- class StringComponent < Phlex::HTML
5
- def initialize(key: nil, value: nil, kind: :value)
6
- @key = key
7
- @value = value
8
- @kind = kind
9
- end
10
-
11
- def view_template
12
- return p(class: "text-gray-500 text-xs"){ "—" } if @value.blank?
13
-
14
- if @key&.downcase&.include?("password") || @key&.downcase&.include?("token")
15
- p { "[REDACTED]" }
16
- else
17
- p(class: "truncate") { @value }
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,16 +0,0 @@
1
- module Oversee
2
- module Fields
3
- module Value
4
- class TextComponent < Phlex::HTML
5
- def initialize(datatype: :string, key: nil, value: nil, kind: :value)
6
- @value = value
7
- end
8
-
9
- def view_template
10
- return p(class: "text-gray-500 text-xs"){ "—" } if @value.blank?
11
- p(class: "truncate") { @value }
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,5 +0,0 @@
1
- module Oversee
2
- module ApplicationHelper
3
- include Pagy::Frontend
4
- end
5
- end
@@ -1,6 +0,0 @@
1
- module Oversee
2
- class ApplicationMailer < ActionMailer::Base
3
- default from: "from@example.com"
4
- layout "mailer"
5
- end
6
- end
@@ -1,17 +0,0 @@
1
- <script src="https://cdn.tailwindcss.com"></script>
2
-
3
- <script type="importmap" data-turbo-track="reload">
4
- {
5
- "imports": {
6
- "@hotwired/stimulus": "https://unpkg.com/@hotwired/stimulus/dist/stimulus.js",
7
- "@hotwired/turbo": "https://unpkg.com/@hotwired/turbo",
8
- "@hotwired/turbo-rails": "https://unpkg.com/@hotwired/turbo-rails"
9
- }
10
- }
11
- </script>
12
-
13
- <script async src="https://unpkg.com/es-module-shims/dist/es-module-shims.js"></script>
14
-
15
- <script type="module">
16
- import * as Turbo from "@hotwired/turbo-rails"
17
- </script>
@@ -1,18 +0,0 @@
1
- <div class="p-8">
2
- <div class="flex items-center justify-between">
3
- <div>
4
- <p class="text-xs uppercase font-medium text-gray-400">Dashboard</p>
5
- <h1 class="text-xl">Welcome</h1>
6
- </div>
7
- </div>
8
- </div>
9
-
10
- <% if Oversee.card_class_names.present? %>
11
- <div class="p-8">
12
- <div class="grid grid-cols-4 gap-4">
13
- <% Oversee.card_class_names.each do |card_name| %>
14
- <%= render Oversee::CardComponent.new(card_name: card_name) %>
15
- <% end %>
16
- </div>
17
- </div>
18
- <% end %>
@@ -1,10 +0,0 @@
1
- <%= form_with model: @resource, scope: :resource, url: resource_path do |form| %>
2
- <% @resource_class.columns_hash.each do |key, metadata| %>
3
- <div class="mb-4">
4
- <%= form.label key, class: "uppercase text-xs" %>
5
- <%= form.text_field key, class: "block border" %>
6
- </div>
7
- <% end %>
8
- <%= hidden_field_tag :resource_class, @resource_class %>
9
- <%= form.submit %>
10
- <% end %>
@@ -1,20 +0,0 @@
1
- <div id="<%= dom_id(@resource, key) %>" class="py-4 px-8 hover:bg-gray-50 group flex items-center justify-between">
2
- <div class="hidden space-y-2 animate-pulse">
3
- <div class="h-4 w-10 bg-gray-100 rounded-md"></div>
4
- <div class="h-8 w-32 bg-gray-100 rounded-md"></div>
5
- </div>
6
- <div>
7
- <%= render Oversee::FieldLabelComponent.new(key: key, datatype: datatype) %>
8
- <div class="mt-2">
9
- <%= form_with url: resource_path(@resource.id, resource_class: @resource_class), scope: :resource, model: @resource do |f| %>
10
- <%= f.hidden_field :oversee_key, value: key %>
11
- <%= f.hidden_field :oversee_datatype, value: datatype %>
12
-
13
- <% input_datatype = [:string, :integer, :datetime].include?(datatype) ? datatype : :string %>
14
- <%= render Oversee::FieldComponent.new(kind: :input, datatype: input_datatype.to_sym, key: key, value: value)%>
15
-
16
- <%= f.submit "Save", class: "bg-blue-500 px-4 py-2 rounded-md text-white text-sm hover:bg-blue-600 hover:cursor-pointer" %>
17
- <% end %>
18
- </div>
19
- </div>
20
- </div>
@@ -1,31 +0,0 @@
1
- <div class="p-8">
2
- <div class="flex items-center justify-between">
3
- <div>
4
- <p class="text-xs uppercase font-medium text-gray-400">Resource</p>
5
- <h1 class="text-xl"><%= params[:resource] %></h1>
6
- </div>
7
-
8
- <%= link_to 'Edit', edit_resource_path(@resource, resource: params[:resource]), class: "inline-flex items-center justify-center py-2 px-6 rounded bg-blue-500 text-white text-sm font-medium" %>
9
- </div>
10
- </div>
11
- <div class="p-8">
12
- <%= render "form" %>
13
- </div>
14
- <div class="p-8">
15
- <div class="bg-white px-8 border shadow-sm rounded">
16
- <div class="divide-y divide-gray-100 -mx-8">
17
- <% @resource.attributes.each do |attribute, value| %>
18
- <div class="py-4 px-8">
19
- <p class="text-xs font-medium text-gray-500 uppercase"><%= attribute.humanize %></p>
20
- <p class="mt-1 text-lg"><%= render Oversee::FieldComponent.new(datatype: :string, value: value) %></p>
21
- </div>
22
- <% end %>
23
- </div>
24
- </div>
25
- </div>
26
-
27
- <div class="p-8">
28
- <pre>
29
- <%= debug @resource.attributes %>
30
- </pre>
31
- </div>
@@ -1,59 +0,0 @@
1
- <div class="p-8">
2
- <div class="flex items-center justify-between">
3
- <div>
4
- <p class="text-xs font-medium text-gray-500">Index</p>
5
- <h1 class="text-2xl"><%= params[:resource] %></h1>
6
- </div>
7
- <%= link_to 'Add new', "", class: "inline-flex items-center justify-center py-2 px-6 rounded bg-blue-500 text-white text-sm font-medium" %>
8
- </div>
9
- </div>
10
- <div class="">
11
- <div class="bg-white border-t overflow-x-hidden">
12
- <div class="-mx-4 overflow-x-auto sm:-mx-6 lg:-mx-8">
13
- <div class="inline-block min-w-full align-middle sm:px-6 lg:px-8">
14
- <table class="min-w-full divide-y divide-gray-300">
15
- <thead>
16
- <tr class="divide-x divide-gray-200">
17
- <th class="hidden"><input type="checkbox" name="" id="" class="mx-4"></th>
18
- <th scope="col" class="px-4 py-3.5 text-left text-xs font-semibold text-gray-900 uppercase"></th>
19
- <% @resource_class.columns_hash.each do |key, metadata| %>
20
- <th scope="col" class="px-4 py-3.5 text-left text-xs font-semibold text-gray-900 uppercase whitespace-nowrap hover:bg-gray-50 transition">
21
- <a href="<%= resources_path(resource: params[:resource], sort_attribute: key, sort_direction: params[:sort_direction] == "asc" ? :desc : :asc) %>" class="hover:underline">
22
- <%= render Oversee::FieldLabelComponent.new(key: key, datatype: metadata.sql_type_metadata.type) %>
23
- </a>
24
- </th>
25
- <% end %>
26
- </tr>
27
- </thead>
28
- <tbody class="divide-y divide-gray-100 bg-white">
29
- <% @resources.each do |resource| %>
30
- <tr class="divide-x divide-gray-100">
31
- <td class="hidden">
32
- <input type="checkbox" name="" id="" class="mx-4">
33
- </td>
34
- <td>
35
- <div class="flex space-x-2 mx-4">
36
- <a href="<%= resource_path(resource.id, resource: params[:resource]) %>" data-turbo-stream="true">
37
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" data-slot="icon" class="w-4 h-4 text-gray-500 hover:text-blue-500">
38
- <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z" />
39
- <path fill-rule="evenodd" d="M1.38 8.28a.87.87 0 0 1 0-.566 7.003 7.003 0 0 1 13.238.006.87.87 0 0 1 0 .566A7.003 7.003 0 0 1 1.379 8.28ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" clip-rule="evenodd" />
40
- </svg>
41
- </a>
42
- </div>
43
- </td>
44
- <% @resource_class.columns_hash.each do |key, metadata| %>
45
- <td class="whitespace-nowrap p-4 text-sm text-gray-500">
46
- <div class="max-w-96">
47
- <%= render Oversee::FieldComponent.new(datatype: metadata.sql_type_metadata.type, value: resource.send(key), key: key) %>
48
- </div>
49
- </td>
50
- <% end %>
51
- </tr>
52
- <% end %>
53
- </tbody>
54
- </table>
55
- </div>
56
- </div>
57
- </div>
58
- <%= raw(pagy_nav(@pagy)) if @pagy.pages > 1 %>
59
- </div>
@@ -1 +0,0 @@
1
- <%= render partial: "oversee/resources/input_field" %>
@@ -1,3 +0,0 @@
1
- <%= turbo_stream.replace dom_id(@resource, @key) do %>
2
- <%= render partial: "oversee/resources/input_field", locals: { datatype: @datatype, key: @key, value: @value } %>
3
- <% end %>