---
id: dispute-management
title: Dispute Management
description: Operator console for reviewing and responding to card disputes.
sidebar_position: 34
---

import {
  CodeBlock,
  PropsMarkdownTable,
  PartsMarkdownTable,
  getPropsFromDocs,
  getComponentParts,
  getWebcomponentsVersion,
  ComponentBox,
  setUpMocks,
} from '../helpers';
import docsJson from '../docs.json';
import componentTreeJson from '../component-tree.json';
import '@justifi/webcomponents/dist/module/justifi-dispute-management';

{setUpMocks()}

## Overview

Component to render notification of disputed payments and allow platform to respond to dispute via form submission.

# Props, events and methods

---

<PropsMarkdownTable
  props={getPropsFromDocs('justifi-dispute-management', docsJson)}
/>

### Events

- `submit-event`: Fires when the dispute response is submitted or when a dispute is accepted.
- `complete-form-step-event`: Fires when a form step is completed; includes server response and completed form step.
- `click-event`: Fires when users click on actions; `event.detail.name` indicates the action (e.g., `nextStep`, `previousStep`, `cancelDispute`, `respondToDispute`, `submit`).
- `error-event`: Captures upload or API issues.

# Authorization

---

<p>
  Authorization is performed by passing a web component token as{' '}
  <code>auth-token</code>.
</p>
<ul>
  <li>
    <strong>Web Component Token</strong>: These tokens are generated by your
    backend services using the [Web Component Tokens
    API](https://docs.justifi.tech/api-spec#tag/Web-Component-Tokens/operation/CreateWebComponentToken).
    Each token can be scoped to perform a set number of actions and is active
    for 60 minutes. When creating a web component token for this specific
    component you'll need to use the role: `read:dispute:dispute_id` or
    `write:dispute:dispute_id`. Make sure the value for `dispute_id` matches the
    prop you also pass separately.
  </li>
</ul>

# Events usage

---

<CodeBlock>{`<justifi-dispute-management />

<script>
  (function() {
    const disputeManagement = document.querySelector("justifi-dispute-management");
    
    disputeManagement.addEventListener("submit-event", (event) => {
      /* this event is raised when the server response is received at the end of the dispute response or when a dispute is accepted */
      console.log("server response received", event.detail.response);
    });

    disputeManagement.addEventListener("complete-form-step-event", (event) => {
      /* this event is raised when a form step is completed */

      let serverResponse = event.detail.response;
      let completedFormStep = event.detail.formStep;

      console.log("data from server", serverResponse);
      console.log("completed form step", completedFormStep);
    });

    disputeManagement.addEventListener("click-event", (event) => {
      let name = event.detail.name;
      
      console.log("Clicked item", event.detail);
      console.log("Clicked item name", name);
      
      /* Possible values for name are: nextStep, previousStep, cancelDispute, respondToDispute, and submit */
    });

    disputeManagement.addEventListener("error-event", (event) => {
      // here is where you would handle the error
      console.log("error-event", event.detail);
    });
  })();
  </script>`}</CodeBlock>

# Example Usage

---

<ComponentBox>
  <justifi-dispute-management dispute-id="123" auth-token="123abc" />
</ComponentBox>

---

<CodeBlock>{`<!DOCTYPE html>
<html dir="ltr" lang="en">

<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=5.0" />
  <title>justifi-dispute-management</title>

  <script type="module" src="https://cdn.jsdelivr.net/npm/@justifi/webcomponents@${getWebcomponentsVersion()}/dist/webcomponents/webcomponents.esm.js"></script>

<script
  nomodule
  src="https://cdn.jsdelivr.net/npm/@justifi/webcomponents@${getWebcomponentsVersion()}/dist/webcomponents/webcomponents.js"
></script>

  <style>
      ::part(font-family) {
        font-family: georgia;   
      }
        
      ::part(color) {
        color: darkslategray;
      }

      ::part(background-color) {
        background-color: transparent;
      }

      ::part(button) {
        padding: 0.375rem 0.75rem;
        font-size: 16px;
        box-shadow: none;
        border-radius: 0px;
        line-height: 1.5;
        text-transform: none;
      }

      ::part(button-secondary) {
        color: #333;
        background-color: transparent;
        border-color: #333;
      }

      ::part(button-secondary):hover {
        background-color: rgba(0, 0, 0, .05);
        border-color: #333;
        color: #333;
      }

      ::part(button-disabled) {
        opacity: 0.5;
      }
    </style>

</head>

<body>
  <justifi-dispute-management dispute-id="dp_123" auth-token="authToken" />
</body>

<script></script>

</html>`}</CodeBlock>

## Theming & Layout

<PartsMarkdownTable
  parts={getComponentParts('justifi-dispute-management', componentTreeJson)}
/>
