async createOrUpdateWebview()

in src/desktop/ci/pending_job_webview_controller.ts [146:181]


  async createOrUpdateWebview(
    jobItemModel: JobItemModel,
    existingPanel?: PendingJobWebviewPanel,
  ): Promise<PendingJobWebviewPanel> {
    assert(this.#context);
    const { job } = jobItemModel;
    const existingPanelStatus = existingPanel?.jobItemModel.job.status;
    const panel = existingPanel ?? (await this.#createEmptyPanel());

    panel.title = `Job ${job.id}`;
    panel.jobItemModel = jobItemModel;

    if (job.status !== existingPanelStatus) {
      const status = getJobMetadata(job);

      const imgTag = status.illustration?.image
        ? `<img src="${panel.webview.asWebviewUri(
            vscode.Uri.file(path.join(this.#context.extensionPath, status.illustration?.image)),
          )}" />`
        : '';

      const buttonTag = status.contextAction
        ? `<button id="button" onclick="onButtonPress()">${
            buttonTexts[status.contextAction]
          }</button>`
        : '';

      panel.webview.html = this.#htmlContent
        .replace('{{title}}', status.illustration?.title ?? status.name)
        .replace('{{description}}', status.illustration?.description ?? '')
        .replace('{{image}}', imgTag)
        .replace('{{button}}', buttonTag);
    }

    return panel;
  }