rustploy-gui 0.1.57

Rustploy — desktop client (glacier-ui) for the Rustploy PaaS daemon
// Domains (editável): lista de rotas HTTP (domínio → porta de container,
// TLS por rota), mais o form de adição e a porta TCP crua do host.
component {
  resources {
    component(name = SemDominios) {
      text("{t('domains.no_domain_configured')}", class = u-muted)
    }
  }

  column(class = form-panel) {
    text("{t('domains.domains', service_domains_count=service_domains_count)}", class = u-label-cap)

    text(
      "{t('domains.each_domain_can_point_to_a')}",
      class = u-muted,
    )

    scrollable(direction = vertical, class = u-fill-all) {
      column(class = kv-list) {
        each @service_domains as d (fallback = SemDominios) {
          row(class = kv-list__row) {
            button(
              class = env__del,
              on_click = domain_delete:@d.domain,
              disabled = @busy_domain_delete,
              text = "✕",
            )

            text(class = env__sep)
            text("@d.domain", class = env__key)
            text("→ @d.port", class = "kv-list__val kv-list__val--compact")
            text("@d.tls_label", class = u-muted)
          }
        }
      }
    }

    text("{t('domains.add_domain')}", class = u-label-cap)

    input(
      class = field__input,
      form_control = service_form_domain,
      :value = service_form_domain,
      on_change = field:service_form_domain,
      placeholder = "{t('domains.app_example_com')}",
    )

    text(
      "@error_service_form_domain",
      if = @error_service_form_domain,
      not_equals = "",
      class = u-error,
    )

    text("{t('domains.container_port_optional')}", class = u-label-cap)

    input(
      class = field__input,
      form_control = service_form_port,
      :value = service_form_port,
      on_change = field:service_form_port,
      placeholder = "{t('domains.service_default')}",
    )

    text(
      "@error_service_form_port",
      if = @error_service_form_port,
      not_equals = "",
      class = u-error,
    )

    toggle(
      :checked = service_form_tls,
      on_toggle = field:service_form_tls,
      label = "{t('domains.https_tls')}",
    )

    row(class = env__add) {
      button(
        class = "btn btn--primary",
        on_click = domain_add,
        disabled = @busy_domain_add,
        text = "{t('domains.add_domain_2')}",
      )

      text("@service_action_message", class = u-muted)
    }

    text(
      "{t('domains.host_tcp_port_passthrough_optional')}",
      class = u-label-cap,
    )

    input(
      class = field__input,
      form_control = service_form_host_port,
      :value = service_form_host_port,
      on_change = field:service_form_host_port,
      placeholder = "{t('domains.service_default')}",
    )

    text(
      "@error_service_form_host_port",
      if = @error_service_form_host_port,
      not_equals = "",
      class = u-error,
    )

    row(class = env__add) {
      button(
        class = "btn btn--ghost",
        on_click = domain_hostport_save,
        disabled = @busy_domain_hostport_save,
        text = "{t('common.save_port')}",
      )

      button(
        class = "btn btn--ghost",
        on_click = domain_hostport_auto,
        disabled = @busy_domain_hostport_auto,
        text = "{t('domains.automatic')}",
      )
    }

    text(
      "{t('domains.automatic_allocates_a_free_port_and')}",
      class = u-muted,
    )
  }
}