solid_litequeen 0.9.0 → 0.10.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 536ae72fe762f8bfcc75364afa5fa995199f02b6ca43d24f7b97bc118b344731
4
- data.tar.gz: 87bcc08b867f182fd988bac2fe9c2eb768b46f12869d6e7bfca2a12d4e68b091
3
+ metadata.gz: 2193fbf74ea85b0636eacfaf274db08f75fc6e3df3f20ff92092f332665cc5ae
4
+ data.tar.gz: 1916c89aa9c9091fd562535e1f415f8f3844e7b686241ecd5ca19800bf5a82c6
5
5
  SHA512:
6
- metadata.gz: b57761f2bce146ca25e0d99812cbc30ac182365141156796edfa2a72efab0f4d4644a0a6f37c328719fa4c1db9ce60c4310f74a6b6a9da8ae23b38d74e9f0e0f
7
- data.tar.gz: 71d073a29576d62ca4dab1ad01bcfdd9b4b8c0eabe0d3b2bf8b1e4efe1d46fe266eb1b2f0095c1fe887f96c0c320b8f68da4584e9df366fc0f4de03aa7f333fa
6
+ metadata.gz: ff33367977208e249b3d4eb19a1a0ab4aba4744868dd8c40a52375fe48535ba9eacb2f145c38f58fae57041fc5322ae0047c9cf9038a49568f277358d78b7579
7
+ data.tar.gz: 7da74f483615c35208adf2fa98673896e74d45ed31c64ba6f040aad43637832ec0c2c254d6d3542983892b0bdfd2674df22d01709b854996fa6269ff789af95a
@@ -49,8 +49,6 @@ module SolidLitequeen
49
49
  @sort_column = sort_prefs["sort_column"]
50
50
  @sort_direction = sort_prefs["sort_direction"]
51
51
 
52
- # debugger
53
-
54
52
  @database_location = Base64.urlsafe_decode64(@database_id)
55
53
 
56
54
  DynamicDatabase.establish_connection(
@@ -58,8 +56,22 @@ module SolidLitequeen
58
56
  database: @database_location
59
57
  )
60
58
 
59
+ table_columns = DynamicDatabase.connection.columns(@table_name)
60
+
61
+ @columns_info = table_columns.each_with_object({}) do |column, hash|
62
+ hash[column.name] = {
63
+ sql_type: column.sql_type_metadata.sql_type,
64
+ type: column.sql_type_metadata.type,
65
+ limit: column.sql_type_metadata.limit,
66
+ precision: column.sql_type_metadata.precision,
67
+ scale: column.sql_type_metadata.scale,
68
+ null: column.null,
69
+ default: column.default
70
+ }
71
+ end
72
+
61
73
  # Verify the sort column exists in the table to prevent SQL injection
62
- valid_columns = DynamicDatabase.connection.columns(@table_name).map(&:name)
74
+ valid_columns = table_columns.map(&:name)
63
75
 
64
76
  # Use the column order from session if it exists; otherwise, default to all columns
65
77
  ordered_columns = session["#{@database_id}_#{@table_name}_column_order"] || valid_columns
@@ -22,6 +22,8 @@ export default class extends Controller {
22
22
  "dragleave",
23
23
  this.handleThDragleave.bind(this),
24
24
  );
25
+
26
+ this.#load_datetime_local_title();
25
27
  }
26
28
 
27
29
  disconnect() {
@@ -158,4 +160,39 @@ export default class extends Controller {
158
160
 
159
161
  targetTh.removeAttribute("data-column-order-about-to-be-swapped");
160
162
  }
163
+
164
+ #load_datetime_local_title() {
165
+ setTimeout(() => {
166
+ const datetime_items = this.element.querySelectorAll(
167
+ 'td[data-data_type="datetime"]',
168
+ );
169
+
170
+ for (const item of datetime_items) {
171
+ const column_item_datetime = item.querySelector(
172
+ "span[data-column_item]",
173
+ )?.textContent;
174
+
175
+ if (column_item_datetime) {
176
+ try {
177
+ // Parse the UTC datetime string
178
+ const utcDate = new Date(`${column_item_datetime.trim()}Z`);
179
+
180
+ // Format to local datetime using Intl.DateTimeFormat
181
+ const localDatetime = new Intl.DateTimeFormat("default", {
182
+ year: "numeric",
183
+ month: "short",
184
+ day: "numeric",
185
+ hour: "numeric",
186
+ minute: "numeric",
187
+ second: "numeric",
188
+ }).format(utcDate);
189
+
190
+ item.setAttribute("title", `${localDatetime} local time.`);
191
+ } catch (error) {
192
+ console.error("Error converting datetime:", error);
193
+ }
194
+ }
195
+ }
196
+ }, 2000);
197
+ }
161
198
  }
@@ -15,6 +15,7 @@
15
15
  <p class="text-gray-600"><%= pluralize(@row_count, "row") %> found</p>
16
16
  </div>
17
17
 
18
+ <%= console %>
18
19
 
19
20
  <div class="bg-white rounded-lg shadow overflow-x-auto">
20
21
  <div class="min-w-full inline-block align-middle">
@@ -49,11 +50,16 @@
49
50
  <tr class="hover:bg-gray-50" >
50
51
  <% row.each_with_index do |item, index| %>
51
52
  <% truncated_item = item&.truncate(80) %>
52
- <td data-column="<%= @data.columns[index] %>" class="px-6 py-4 text-sm text-gray-800 whitespace-nowrap" >
53
+ <% column_name = @data.columns[index] %>
54
+ <td
55
+ data-column="<%= column_name %>"
56
+ data-data_type="<%= @columns_info.dig(column_name).dig(:type) %>"
57
+ class="px-6 py-4 text-sm text-gray-800 whitespace-nowrap"
58
+ >
53
59
 
54
60
  <div class="flex justify-between">
55
61
 
56
- <span><%= truncated_item %></span>
62
+ <span data-column_item><%= truncated_item %></span>
57
63
 
58
64
  <% if truncated_item&.to_s&.ends_with?("...") %>
59
65
  <span title="<%= item %>" class="cursor-pointer size-4">
@@ -1,3 +1,3 @@
1
1
  module SolidLitequeen
2
- VERSION = "0.9.0"
2
+ VERSION = "0.10.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_litequeen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vik Borges
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-10 00:00:00.000000000 Z
11
+ date: 2025-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -157,7 +157,6 @@ files:
157
157
  - app/controllers/solid_litequeen/databases_controller.rb
158
158
  - app/helpers/solid_litequeen/application_helper.rb
159
159
  - app/helpers/solid_litequeen/databases_helper.rb
160
- - app/javascript/controllers/table_controller.js
161
160
  - app/javascript/solid_litequeen/application.js
162
161
  - app/javascript/solid_litequeen/controllers/application.js
163
162
  - app/javascript/solid_litequeen/controllers/index.js
@@ -1,7 +0,0 @@
1
- import { Controller } from "@hotwired/stimulus"
2
-
3
- // Connects to data-controller="table"
4
- export default class extends Controller {
5
- connect() {
6
- }
7
- }