Files
ubicloud/views/components/config_card.erb
2025-07-24 15:03:27 +05:30

98 lines
4.1 KiB
Plaintext

<%# locals: (title:, config:, extra_class:, name:, errors:) %>
<div class="bg-white rounded-lg shadow overflow-hidden mb-6 <%= extra_class %>">
<div class="px-6 py-4 border-b border-gray-200">
<h3 class="text-lg font-medium text-gray-900"><%= title %></h3>
</div>
<div class="divide-y divide-gray-200 w-full max-h-64 overflow-y-auto">
<% config.each_with_index do |(key, value), index| %>
<% error = errors[name + "." + key] %>
<% next if key.empty? && value.empty? %>
<div class="px-6 py-2 hover:bg-gray-50 config-group group font-mono" data-config-id="<%= index %>">
<div class="flex items-center justify-between">
<div class="flex flex-wrap items-center config-entry">
<input
type="text"
class="border rounded py-1 focus:ring-blue-500 focus:border-blue-500 mr-2 <%= (error && !error.is_a?(Array)) ? "border-red-500" : "" %>"
value="<%= key %>"
name="<%= name %>_keys[]"
required
/>
<input
type="text"
value="<%= value %>"
class="border rounded py-1 focus:ring-blue-500 focus:border-blue-500 <%= error ? "border-red-500" : "" %>"
name="<%= name %>_values[]"
/>
<% if error %>
<span class="error inline-block h-8 w-54 py-2 px-2 max-w-54 text-xs text-red-600 bg-red-100 rounded" aria-live="polite">
<% if error.is_a?(Array) %>
<% error.each do |error| %>
<%= error %><br/>
<% end %>
<% else %>
<%= error %>
<% end %>
</span>
<% end %>
</div>
<div class="min-w-16 flex items-center ml-2">
<%== part("components/button", type: "danger", text: "", icon: "hero-trash", extra_class: "delete-config-btn") if @edit_perm %>
</div>
</div>
</div>
<% end %>
<!-- Hidden row for generating new entries -->
<div class="px-6 py-2 hover:bg-gray-50 group config-placeholder-group font-mono hidden" data-config-id="">
<div class="flex items-center justify-between">
<div class="flex flex-wrap items-center config-entry">
<input
type="text"
class="border rounded py-1 focus:ring-blue-500 focus:border-blue-500 mr-2"
value=""
name="<%= name %>_keys[]"
disabled
/>
<input
type="text"
value=""
class="border rounded py-1 focus:ring-blue-500 focus:border-blue-500"
name="<%= name %>_values[]"
disabled
/>
<span class="error inline-block h-8 w-54 py-2 px-2 max-w-54 text-xs text-red-600 hidden bg-red-100 rounded" aria-live="polite"></span>
</div>
<div class="min-w-16 flex items-center ml-2">
<%== part("components/button", type: "danger", text: "", icon: "hero-trash", extra_class: "delete-config-btn") %>
</div>
</div>
</div>
<!-- Empty row for new configuration -->
<% if @edit_perm %>
<div class="px-6 py-2 hover:bg-gray-50 group new-config font-mono">
<div class="flex items-center justify-between">
<div class="flex flex-wrap items-center">
<input
type="text"
class="border rounded py-1 focus:ring-blue-500 focus:border-blue-500 mr-2"
placeholder="New Key"
name="<%= name %>_keys[]"
/>
<input
type="text"
placeholder="New Value"
class="border rounded py-1 focus:ring-blue-500 focus:border-blue-500"
name="<%= name %>_values[]"
/>
<span class="error inline-block h-8 w-54 py-2 px-2 max-w-54 text-xs text-red-600 hidden bg-red-100 rounded" aria-live="polite"></span>
</div>
<div class="min-w-16 flex items-center ml-2">
<%== part("components/button", text: "", type: "safe", icon: "hero-plus", extra_class: "add-config-btn") %>
</div>
</div>
</div>
<% end %>
</div>
</div>