// Databases (servidor de banco compartilhado entre projetos)
component {
scrollable(
direction = vertical,
class = u-fill-all,
) {
column(width = fill, spacing = 8, class = form-panel) {
text(class = u-label-cap, content = "DATABASES (@service_shared_databases_count)")
text(
class = u-muted,
content = """
Cada database tem usuário próprio, sem acesso aos demais. O
projeto consumidor recebe a connection string numa env var.
""",
)
scrollable(direction = vertical, class = u-fill-all) {
column(class = kv-list) {
row(class = kv-list__row, :for-each = service_shared_databases, var = d) {
button(
class = env__del,
on_click = shared_database_delete:@d.id,
disabled = @busy_shared_database_delete,
text = "✕",
)
text(class = env__sep)
button(class = tabs__tab, on_click = shared_database_show:@d.id, disabled = @busy_shared_database_show, text = @d.name)
text(class = "kv-list__val kv-list__val--compact", content = "→ @d.project")
text(class = u-muted, content = "@d.env_var")
}
}
}
row(class = kv-list__row, if = @shared_database_url, not_equals = "") {
text(class = kv-list__key, content = "URL")
text(class = "kv-list__val kv-list__val--compact", content = "@shared_database_url_short")
button(
class = "btn btn--ghost btn--xs",
on_click = copy_ctx:shared_database_url,
text = Copiar,
)
}
text(class = u-label-cap, content = "NOVO DATABASE")
input(
class = field__input,
form_control = service_form_shared_database_name,
:value = service_form_shared_database_name,
on_change = field:service_form_shared_database_name,
placeholder = "nome (a-z, 0-9, _)",
)
select(
class = form-select,
:options = service_shared_database_projects,
:value = service_form_shared_database_project,
on_change = field:service_form_shared_database_project,
placeholder = "projeto consumidor...",
labelField = name,
valueField = id,
)
input(
class = field__input,
form_control = service_form_shared_database_env,
:value = service_form_shared_database_env,
on_change = field:service_form_shared_database_env,
placeholder = "env var (padrão DATABASE_URL / MONGODB_URI)",
)
input(
class = field__input,
form_control = service_form_shared_database_limit,
:value = service_form_shared_database_limit,
on_change = field:service_form_shared_database_limit,
placeholder = "limite de conexões (opcional; não vale no Mongo)",
)
input(
class = field__input,
form_control = service_form_shared_database_timeout,
:value = service_form_shared_database_timeout,
on_change = field:service_form_shared_database_timeout,
placeholder = "timeout de query em ms (opcional; só Postgres)",
)
toggle(
:checked = service_form_shared_database_overwrite,
on_toggle = field:service_form_shared_database_overwrite,
label = " Sobrescrever a env var se o projeto já a tiver",
)
toggle(
:checked = service_form_shared_database_skip_env,
on_toggle = field:service_form_shared_database_skip_env,
label = " Não mexer em env var (vou migrar os dados antes)",
)
row(class = env__add) {
button(
class = "btn btn--primary",
on_click = shared_database_create,
disabled = @busy_shared_database_create,
text = "Criar database",
)
text(class = u-muted, content = "@service_action_message")
}
}
}
}