Back to Driver Js

Popover Buttons

docs/src/content/guides/buttons.mdx

1.4.07.3 KB
Original Source

import { CodeSample } from "../../components/CodeSample.tsx";

You can use the showButtons option to choose which buttons to show in the popover. The default value is ['next', 'previous', 'close'].

<div id="driver-note" className="mb-5"> > **Note:** When using the `highlight` method to highlight a single element, the only button shown is the `close` button. However, you can use the `showButtons` option to show other buttons as well. But the buttons won't do anything. You will have to use the `onNextClick` and `onPrevClick` callbacks to implement the functionality. </div> <div className='flex flex-col gap-1'> <CodeSample buttonText={"Show All Buttons"} config={{ showButtons: [ 'next', 'previous', 'close' ], }} tour={[ { element: '#driver-note', popover: { title: 'Popover Title', description: 'Popover Description' } }, { element: '#driver-note p code:nth-child(4)', popover: { title: 'Popover Title', description: 'Popover Description' } } ]} id={"code-sample"} client:load> ```js import { driver } from "driver.js"; import "driver.js/dist/driver.css";
const driverObj = driver({
  showButtons: [
    'next',
    'previous',
    'close'
  ],
  steps: [
    {
      element: '#first-element',
      popover: {
        title: 'Popover Title',
        description: 'Popover Description'
      }
    },
    {
      element: '#second-element',
      popover: {
        title: 'Popover Title',
        description: 'Popover Description'
      }
    }
  ]
});

driverObj.drive();
```
</CodeSample> <CodeSample buttonText="No Close Button" config={{ showButtons: [ 'next', 'previous', ], }} tour={[ { element: '#driver-note', popover: { title: 'Popover Title', description: 'Popover Description' } }, { element: '#driver-note code:nth-child(2)', popover: { title: 'Popover Title', description: 'Popover Description' } } ]} id={"code-sample"} client:load /> <CodeSample buttonText="No Buttons (Use Arrows)" config={{ showButtons: [undefined], }} tour={[ { element: '#driver-note', popover: { title: 'Popover Title', description: 'Popover Description' } }, { element: '#driver-note code:nth-child(2)', popover: { title: 'Popover Title', description: 'Popover Description', side: 'bottom', align: 'start' } } ]} id={"code-sample"} client:load /> </div>

Change Button Text

You can also change the text of buttons using nextBtnText, prevBtnText and doneBtnText options.

<div className='flex flex-col gap-1'> <CodeSample heading="Change Button Text" buttonText={"Change Button Text"} config={{ showProgress: true, nextBtnText: '—>', prevBtnText: '<--', doneBtnText: 'X', }} tour={[ { element: '#code-sample-3', popover: { title: 'Popover Title', description: 'Popover Description' } }, { element: '#code-sample-3 code', popover: { title: 'Popover Title', description: 'Popover Description' } } ]} id={"code-sample-3"} client:load> ```js import { driver } from "driver.js"; import "driver.js/dist/driver.css";
const driverObj = driver({
  nextBtnText: '—›',
  prevBtnText: '‹—',
  doneBtnText: '✕',
  showProgress: true,
  steps: [
    // ...
  ]
});

driverObj.drive();
```
</CodeSample> </div>

Event Handlers

You can use the onNextClick, onPreviousClick and onCloseClick callbacks to implement custom functionality when the user clicks on the next and previous buttons.

Please note that when you configure these callbacks, the default functionality of the buttons will be disabled. You will have to implement the functionality yourself.

<CodeSample buttonText={"Show Example"} config={{}} tour={[ { element: '#logger-events', popover: { title: 'Events Logged', description: 'Look at your console for the events logged' } }, { element: '#code-sample-4 code', popover: { title: 'Popover Title', description: 'Popover Description' } } ]} id={"logger-events"} client:load>

js
import { driver } from "driver.js";
import "driver.js/dist/driver.css";

const driverObj = driver({
  onNextClick:() => {
    console.log('Next Button Clicked');
    // Implement your own functionality here
    driverObj.moveNext();
  },
  onPrevClick:() => {
    console.log('Previous Button Clicked');
    // Implement your own functionality here
    driverObj.movePrevious();
  },
  onCloseClick:() => {
    console.log('Close Button Clicked');
    // Implement your own functionality here
    driverObj.destroy();
  },
  steps: [
    // ...
  ]
});

driverObj.drive();
</CodeSample>

Custom Buttons

You can add custom buttons using onPopoverRender callback. This callback is called before the popover is rendered. In the following example, we are adding a custom button that takes the user to the first step.

<CodeSample buttonText={"Run Example"} config={{ prevBtnText: '← Previous', nextBtnText: 'Next →', doneBtnText: 'Done', showButtons: ['next', 'previous'], }} tour={[ { element: '#demo-hook-theme', popover: { align: 'start', side: 'left', title: 'More Control with Hooks', description: 'You can use onPopoverRender hook to modify the popover DOM. Here we are adding a custom button to the popover which takes the user to the first step.' } }, { element: 'h1', popover: { align: 'start', side: 'bottom', title: 'Style However You Want', description: 'You can use the default class names and override the styles or you can pass a custom class name to the popoverClass option either globally or per step.' } }, { element: 'p a', popover: { align: 'start', side: 'left', title: 'Style However You Want', description: 'You can use the default class names and override the styles or you can pass a custom class name to the popoverClass option either globally or per step.' } } ]} id={"demo-hook-theme"} client:load

js
import { driver } from "driver.js";
import "driver.js/dist/driver.css";

const driverObj = driver({
  // Get full control over the popover rendering.
  // Here we are adding a custom button that takes
  // user to the first step.
  onPopoverRender: (popover, { config, state }) => {
    const firstButton = document.createElement("button");
    firstButton.innerText = "Go to First";
    popover.footerButtons.appendChild(firstButton);

    firstButton.addEventListener("click", () => {
      driverObj.drive(0);
    });
  },
  steps: [
    // ..
  ]
});

driverObj.drive();
</CodeSample>