Modal

Modals are used to display content in a layer above the app.
Overview API

Usage

Open Modal

Modal labels and headings should be set in sentence case. Keep all labels and headings concise and to the point. Modal labels are optional. Save the record

Do you like Ice cream?



  <wc-button id="open-modal-button">
    Open Modal
  </wc-button>

  <pc-modal id="sample-modal" size="xs" heading="Create User" subheading="User management">

    <pc-modal-content type="text">
      <p class="text-body">
        Modal labels and headings should be set in sentence case. Keep all labels and headings concise and to the point.
        Modal labels are optional.
        <wc-icon size="sm" tooltip-target="save-tooltip-scroll" color="secondary" variant="ghost" name="warning"></wc-icon>
        <pc-tooltip id="save-tooltip-scroll" placements="bottom,top">Save the record</pc-tooltip>
      </p>
    </pc-modal-content>

    <pc-modal-content>
      <pc-input type="text" class="form-field" layer="01" label="Name" id="name" required="true"></pc-input>

      <goat-select label="Gender" id="gender" class="form-field" layer="01" placeholder="Select" clearable="true"></goat-select>

      <goat-checkbox layer="01">Do you like Ice cream?</goat-checkbox>

    </pc-modal-content>

    <div slot="footer">
      <div class="modal-footer">
        <wc-button class="footer-button cancel-button" variant="tonal" color="secondary" size="lg">Cancel
        </wc-button>
        <wc-button id="save-button" class="footer-button" size="lg">Save
        </wc-button>
      </div>
    </div>


  </pc-modal>

  <style>
    .modal-footer {
      display: flex;
    }

    .footer-button {
      --filled-button-container-shape: var(--shape-corner-none);
      --tonal-button-container-shape: var(--shape-corner-none);
      flex: 1;
    }
  </style>

  <script>
    const modalButton = document.querySelector('#open-modal-button');
    const modal = document.querySelector('#sample-modal');
    const saveButton = document.querySelector('#save-button');
    const cancelButtons = document.querySelectorAll('.cancel-button');
    const nameElm = document.querySelector('#name');
    const genderElm = document.querySelector('#gender');

    genderElm.items = [
      { label: 'Male', value: 'Male' },
      { label: 'Female', value: 'Female' },
      { label: 'Other', value: 'Other' },
    ];

    function resetForm() {
      modal.showLoader = false;
      saveButton.showLoader = false;
      saveButton.disable = false;
      saveButton.color = 'primary';
      cancelButtons.forEach((cancelButton) => {
        cancelButton.disabled = false;
      });
      nameElm.value = '';
      genderElm.value = '';
    }


    modalButton.addEventListener('click', () => {
      modal.open = true;
      setTimeout(() => {
        nameElm.setFocus();
      }, 80);
    });

    saveButton.addEventListener('click', () => {
      modal.showLoader = true;
      saveButton.showLoader = true;
      saveButton.color = 'secondary';
      cancelButtons.forEach((cancelButton) => {
        cancelButton.disabled = true;
      });
      // Mock save
      setTimeout(() => {
        modal.open = false;
        resetForm();
      }, 1000);
    });

    modal.addEventListener('pc-modal--close', () => {
      modal.open = false;
      resetForm();
    });

    cancelButtons.forEach((cancelButton) => {
      cancelButton.addEventListener('click', () => {
        modal.open = false;
      });
    });

  </script>

On this page

Usage

Properties

Events

Methods

CSS Custom Properties

Previous Next Previous