rustploy-gui 0.1.41

Rustploy — desktop client (glacier-ui) for the Rustploy PaaS daemon
// Aba Secrets do projeto; a condição de carregamento vai na chamada.
component {
  resources {
    // Estados vazios das abas Secrets e Jobs do projeto (`fallback` do <foreach>).
    component(name = SemSecretsNoProjeto) {
      text("{t('project_secrets.no_secret_in_this_project')}", class = u-muted)
    }
  }

  scrollable(
    direction = vertical,
    class = u-fill-all,
    if = @project_loading,
    not_equals = true,
  ) {
  column(class = env--flow) {
    column(class = webhook) {
      text(
        "{t('project_secrets.sensitive_values_tokens_passwords_api_keys')}",
        class = "u-muted u-fill",
      )

      text(
        "{t('project_secrets.to_use_it_in_a_service')}",
        class = "u-muted u-fill",
      )

      text(
        "{t('project_secrets.the_real_value_is_only_decrypted')}",
        class = "u-muted u-fill",
      )
    }

    row(class = env__add) {
      text("{t('project_env.move_to_service')}", class = u-muted)

      select(
        class = form-select,
        :options = project_service_options,
        :value = move_target_service_id,
        on_change = move_target_pick,
        placeholder = "{t('project_env.choose_service')}",
        label_field = display,
        value_field = id,
      )
    }

    form(
      name = secret_add,
      on_submit = secret_add,
      on_validation_error = secret_add_show_validation_errors,
      class = "form form--gap-8",
    ) {
      row(class = env__add) {
        input(
          class = env__input,
          form_control = project_secret_new_name,
          rules = required,
          msg = "{t('common.enter_a_name')}",
          placeholder = "{t('common.name')}",
        )
      }

      text(
        "@error_project_secret_new_name",
        class = u-error,
        if = @error_project_secret_new_name,
        not_empty,
      )

      row(class = env__add) {
        input(
          class = env__input,
          form_control = project_secret_new_value,
          rules = required,
          msg = "{t('project_secrets.enter_a_value')}",
          placeholder = "{t('project_secrets.value_encrypted_on_save')}",
        )
      }

      text(
        "@error_project_secret_new_value",
        class = u-error,
        if = @error_project_secret_new_value,
        not_empty,
      )

      row {
        button(
          type = submit,
          disabled = @busy_secret_add,
          class = "btn btn--primary",
          text = "{t('project_secrets.save_secret')}",
        )
      }
    }

    if @rename_open == "project_secret" {
      row(class = env__add) {
        text("{t('rename.label', rename_from=rename_from)}", class = u-muted)

        input(
          class = env__input,
          form_control = rename_to,
          :value = rename_to,
          on_change = field:rename_to,
          placeholder = "{t('rename.new_name')}",
        )

        button(
          class = "btn btn--primary",
          on_click = project_rename_apply,
          disabled = @busy_project_rename_apply,
          text = "{t('rename.apply')}",
        )

        button(
          class = "btn btn--ghost",
          on_click = rename_cancel,
          text = "{t('common.cancel')}",
        )
      }
    }

    hr

    column(class = kv-list) {
        each @project_secrets as s (fallback = SemSecretsNoProjeto) {
          row(class = kv-list__row) {
            button(
              class = env__del,
              on_click = secret_delete:@s.name,
              disabled = @busy_secret_delete,
              text = "✕",
            )

            button(
              class = "btn btn--ghost btn--sm",
              on_click = project_secret_rename_pick:@s.name,
              text = "✏️",
              tooltip = "{t('environment.rename')}",
            )

            button(
              class = "btn btn--ghost btn--sm",
              on_click = project_secret_to_env:@s.name,
              disabled = @busy_project_secret_to_env,
              text = "🔓",
              tooltip = "{t('environment.secret_to_env')}",
            )

            button(
              class = "btn btn--ghost btn--sm",
              on_click = project_secret_to_service:@s.name,
              disabled = @busy_project_secret_to_service,
              text = "↓",
              tooltip = "{t('project_env.secret_to_service')}",
            )

            button(
              class = "btn btn--ghost btn--sm",
              on_click = secret_reveal:@s.name,
              disabled = @busy_secret_reveal,
              if = @s.revealed,
              equals = false,
              text = "👁",
              tooltip = "{t('environment.secret_reveal')}",
            )

            button(
              class = "btn btn--ghost btn--sm",
              on_click = secret_hide:@s.name,
              if = @s.revealed,
              equals = true,
              text = "🙈",
              tooltip = "{t('environment.secret_hide')}",
            )

            button(
              class = "btn btn--ghost btn--sm",
              on_click = secret_copy:@s.ref,
              if = @s.revealed,
              equals = true,
              text = "📋",
              tooltip = "{t('environment.secret_copy')}",
            )

            text(class = env__sep)
            text("@s.name_display", class = env__key)
            text("{t('project_secrets.encrypted')}", class = "kv-list__val kv-list__val--compact", if = @s.revealed, equals = false)
            text("@s.value", class = "kv-list__val kv-list__val--compact", if = @s.revealed, equals = true)
          }
        }
      }
    }
  }
}