rustploy-gui 0.1.9

Rustploy — desktop client (glacier-ui) for the Rustploy PaaS daemon
// 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 = clipboard: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")
      }
    }
  }
}