rustploy-gui 0.1.53

Rustploy — desktop client (glacier-ui) for the Rustploy PaaS daemon
// Git: contas conectadas + formulário de conexão
component {
  resources {
    component(name = SemContasGit) {
      text("{t('settings_git.no_git_account_connected_yet')}", class = u-muted)
    }
  }

  scrollable(direction = vertical, class = u-fill-all) {
    column(class = form-panel) {
      text(
        "{t('settings_git.connected_accounts', gitea_count=gitea_count)}",
        class = u-label-cap,
      )

      column(class = kv-list) {
        template(
          :for_each = gitea_providers,
          var = p,
          foreach_fallback = SemContasGit,
        ) {
          row(class = kv-list__row) {
            column(class = page-head__titles) {
              text("@p.name", class = env__key)

              text(
                "@p.kind · @p.base_url · @p.auth_mode · @p.account",
                class = u-muted,
              )
            }

            button(
              class = "btn btn--danger",
              on_click = git_provider_delete:@p.id,
              disabled = @busy_git_provider_delete,
              text = "{t('common.remove')}",
            )
          }
        }
      }

      hr
      text("{t('settings_git.connect_git_account')}", class = u-label-cap)

      // Tipo de provedor: Gitea ou GitHub. Troca a redirect URI (path por
      // provedor) e os textos de ajuda abaixo.
      scroll(class = tabs__scroll, direction = horizontal) {
        row(class = tabs__main) {
          TabButton(
            label = "{t('settings_git.gitea')}",
            current = @git_provider_kind,
            target = gitea,
            action = git_provider_kind:gitea,
          )

          TabButton(
            label = "{t('settings_git.github')}",
            current = @git_provider_kind,
            target = github,
            action = git_provider_kind:github,
          )
        }
      }

      text(
        "@git_provider_message",
        if = @git_provider_message,
        not_equals = "",
        class = u-muted,
      )

      button(
        if = @git_provider_oauth_url,
        not_equals = "",
        class = "btn btn--primary",
        on_click = open:git_provider_oauth_url,
        text = "{t('settings_git.open_authorization_in_the_browser')}",
      )

      form(
        name = git_provider,
        on_submit = git_provider_connect,
        class = "form form--gap-10",
      ) {
        row(class = healthcheck__grid) {
          column(class = healthcheck__field) {
            text("{t('common.name')}", class = u-label-cap)

            input(
              placeholder = "{t('settings_git.my_gitea')}",
              class = field__input,
              form_control = git_provider_name,
              :value = git_provider_name,
              on_change = field:git_provider_name,
            )

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

          column(class = healthcheck__field) {
            text("{t('settings_git.base_url')}", class = u-label-cap)

            input(
              placeholder = "{t('settings_git.https_gitea_example_com')}",
              class = field__input,
              form_control = git_provider_base_url,
              :value = git_provider_base_url,
              on_change = field:git_provider_base_url,
            )

            text(
              "{t('settings_git.leave_empty_for_github_com_only')}",
              if = @git_provider_kind,
              equals = github,
              class = u-muted,
            )
          }
        }

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

        scroll(class = tabs__scroll, direction = horizontal) {
          tabbar(
            :value = git_provider_mode,
            active = @git_provider_mode,
            :items = git_provider_modes,
            tab_class = tabs__tab,
            tab_active_class = "tabs__tab tabs__tab--active",
            padding = "9 16",
            size = 14,
            active_bold = false,
          )
        }

        // OAuth2
        if @git_provider_mode != "pat" {
          text("{t('settings_git.client_id')}", class = u-label-cap)

          input(
            placeholder = "",
            class = field__input,
            form_control = git_provider_client_id,
            :value = git_provider_client_id,
            on_change = field:git_provider_client_id,
          )

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

          input(
            placeholder = "",
            secure = true,
            class = field__input,
            form_control = git_provider_client_secret,
            :value = git_provider_client_secret,
            on_change = field:git_provider_client_secret,
          )

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

          row(class = kv-list__row) {
            text("@git_provider_redirect", class = "kv-list__val kv-list__val--compact")

            button(
              class = "btn btn--ghost btn--xs",
              on_click = copy_ctx:git_provider_redirect,
              text = "{t('common.copy')}",
            )
          }

          text(
            "{t('settings_git.on_gitea_settings_applications_create_an')}",
            if = @git_provider_kind,
            not_equals = github,
            class = u-muted,
          )

          text(
            "{t('settings_git.on_github_settings_developer_settings_oauth')}",
            if = @git_provider_kind,
            equals = github,
            class = u-muted,
          )
        }

        // PAT
        if @git_provider_mode == "pat" {
          text("{t('settings_git.personal_access_token')}", class = u-label-cap)

          input(
            placeholder = "",
            secure = true,
            class = field__input,
            form_control = git_provider_personal_access_token,
            :value = git_provider_personal_access_token,
            on_change = field:git_provider_personal_access_token,
          )

          text(
            "{t('settings_git.on_gitea_settings_applications_generate_new')}",
            if = @git_provider_kind,
            not_equals = github,
            class = u-muted,
          )

          text(
            "{t('settings_git.on_github_settings_developer_settings_personal')}",
            if = @git_provider_kind,
            equals = github,
            class = u-muted,
          )

          text(
            "{t('settings_git.github_pat_repository_access')}",
            if = @git_provider_kind,
            equals = github,
            class = u-muted,
          )

          text(
            "{t('settings_git.github_pat_required_permissions')}",
            if = @git_provider_kind,
            equals = github,
            class = u-muted,
          )

          text(
            "{t('settings_git.github_pat_future_permissions')}",
            if = @git_provider_kind,
            equals = github,
            class = u-muted,
          )

          text(
            "{t('settings_git.github_pat_avoid_permissions')}",
            if = @git_provider_kind,
            equals = github,
            class = u-muted,
          )

          text(
            "{t('settings_git.github_pat_classic_alternative')}",
            if = @git_provider_kind,
            equals = github,
            class = u-muted,
          )
        }

        row(class = env__add) {
          button(
            class = "btn btn--primary",
            on_click = git_provider_connect,
            disabled = @busy_git_provider_connect,
            text = "{t('settings_git.connect_account')}",
          )

          button(
            class = tabs__tab,
            on_click = git_provider_refresh,
            disabled = @busy_git_provider_refresh,
            text = "{t('settings_git.refresh_list')}",
          )
        }
      }
    }
  }
}