<!--
    Copyright 2020 The Go Authors. All rights reserved.
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.
-->
{{define "content"}}
  <section class="Workflows">
    <div class="Workflows-header">
      <h2>Workflows</h2>
      <a href="{{baseLink "/workflows/new"}}" class="Button">New</a>
    </div>
    <ul class="WorkflowList">
      {{range $workflow := .Workflows}}
        <li class="WorkflowList-item">
          <h3 class="WorkflowList-title">
            {{$workflow.Name.String}}
            <span class="WorkflowList-titleTime">
              {{$workflow.CreatedAt.UTC.Format "2006/01/02 15:04 MST"}}
            </span>
          </h3>
          <table class="WorkflowList-params">
            <tbody>
              <tr>
                <td>State:</td>
                <td class="WorkflowList-paramData">
                  {{if $workflow.Error}}
                    Error
                    <div class="WorkflowList-workflowStateIcon Workflowlist-workflowStateIcon--error"></div>
                  {{else if $workflow.Finished}}
                    Success
                    <div class="WorkflowList-workflowStateIcon Workflowlist-workflowStateIcon--success"></div>
                  {{else}}
                    Pending
                    <div class="WorkflowList-workflowStateIcon Workflowlist-workflowStateIcon--pending"></div>
                  {{end}}
                </td>
              </tr>
              <tr>
                <td>Output:</td>
                <td class="WorkflowList-paramData">{{$workflow.Output}}</td>
              </tr>
              <tr>
                <td>Error:</td>
                <td class="WorkflowList-paramData">{{$workflow.Error}}</td>
              </tr>
              {{range $name, $value := $.WorkflowParams $workflow}}
                <tr>
                  <td>{{$name}}:</td>
                  <td class="WorkflowList-paramData">{{$value}}</td>
                </tr>
              {{end}}
            </tbody>
          </table>
          <h4 class="WorkflowList-sectionTitle">Tasks</h4>
          <table class="TaskList">
            <thead>
              <tr class="TaskList-item TaskList-itemHeader">
                <th class="TaskList-itemHeaderCol TaskList-itemExpand"></th>
                <th class="TaskList-itemHeaderCol TaskList-itemState">State</th>
                <th class="TaskList-itemHeaderCol TaskList-itemName">Name</th>
                <th class="TaskList-itemHeaderCol TaskList-itemStarted">Started</th>
                <th class="TaskList-itemHeaderCol TaskList-itemUpdated">Updated</th>
                <th class="TaskList-itemHeaderCol TaskList-itemResult">Result</th>
                <th class="TaskList-itemHeaderCol TaskList-itemActions">Actions</th>
              </tr>
            </thead>
            {{$tasks := index $.WorkflowTasks $workflow.ID}}
            {{range $task := $tasks}}
              <tbody>
                <tr class="TaskList-item TaskList-itemSummary TaskList-expandableItem">
                  <td class="TaskList-itemCol TaskList-itemExpand">
                    <span class="TaskList-itemExpandClosed">
                      <img class="TaskList-itemExpandControl" alt="unfold more" src="{{baseLink "/static/images/chevron_right_black_24dp.svg"}}" />
                    </span>
                    <span class="TaskList-ItemExpandOpened">
                      <img class="TaskList-itemExpandControl" alt="unfold less" src="{{baseLink "/static/images/expand_more_black_24dp.svg"}}" />
                    </span>
                  </td>
                  <td class="TaskList-itemCol TaskList-itemState">
                    {{if $task.Error.Valid}}
                      <img class="TaskList-itemStateIcon" alt="error" src="{{baseLink "/static/images/error_red_24dp.svg"}}" />
                    {{else if $task.Finished}}
                      <img class="TaskList-itemStateIcon" alt="finished" src="{{baseLink "/static/images/check_circle_green_24dp.svg"}}" />
                    {{else}}
                      <img class="TaskList-itemStateIcon" alt="pending" src="{{baseLink "/static/images/pending_yellow_24dp.svg"}}" />
                    {{end}}
                  </td>
                  <td class="TaskList-itemCol TaskList-itemName">
                    {{$task.Name}}
                  </td>
                  <td class="TaskList-itemCol TaskList-itemStarted">
                    {{$task.CreatedAt.UTC.Format "Mon Jan _2 2006 15:04:05"}}
                  </td>
                  <td class="TaskList-itemCol TaskList-itemUpdated">
                    {{$task.UpdatedAt.UTC.Format "Mon Jan _2 2006 15:04:05"}}
                  </td>
                  <td class="TaskList-itemCol TaskList-itemResult">
                    {{$task.Result.String}}
                  </td>
                  <td class="TaskList-itemCol TaskList-itemAction">
                    {{if $task.Error.Valid}}
                    <div class="TaskList-retryTask">
                      <form action="{{baseLink (printf "/workflows/%s/tasks/%s/retry" $workflow.ID $task.Name) }}" method="post">
                        <input type="hidden" id="workflow.id" name="workflow.id" value="{{$workflow.ID}}" />
                        <input name="task.reset" type="submit" value="Retry" onclick="return this.form.reportValidity() && confirm('This will retry the task and clear workflow errors.\n\nReady to proceed?')" />
                      </form>
                    </div>
                    {{end}}
                    {{if and (not $task.Finished) (hasPrefix $task.Name "APPROVE-")}}
                    <div class="TaskList-approveTask">
                      <form action="{{baseLink (printf "/workflows/%s/tasks/%s/approve" $workflow.ID $task.Name) }}" method="post">
                        <input type="hidden" id="workflow.id" name="workflow.id" value="{{$workflow.ID}}" />
                        <input name="task.approve" type="submit" value="Approve" onclick="return this.form.reportValidity() && confirm('This will mark the task approved and resume the workflow.\n\nReady to proceed?')" />
                      </form>
                    </div>
                    {{end}}
                  </td>
                </tr>
                <tr class="TaskList-itemLogsRow">
                  <td class="TaskList-itemLogs" colspan="7">
                    {{if $task.Error.Valid}}
                      <div class="TaskList-itemLogLine TaskList-itemLogLineError">
                        {{- $task.Error.Value -}}
                      </div>
                    {{end}}
                    {{range $log := $.Logs $workflow.ID  $task.Name}}
                      <div class="TaskList-itemLogLine">
                        {{- $log.CreatedAt.UTC.Format "2006/01/02 15:04:05"}} {{$log.Body -}}
                      </div>
                    {{end}}
                  </td>
                </tr>
              </tbody>
            {{end}}
          </table>
        </li>
      {{end}}
    </ul>
  </section>
{{end}}
