mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
339 lines
10 KiB
339 lines
10 KiB
export default class extends HTMLElement {
|
|
async connectedCallback () {
|
|
this.tourType = this.dataset.type
|
|
this.nextPagePath = this.dataset.nextPagePath
|
|
this.I18n = JSON.parse(this.dataset.i18n || '{}')
|
|
|
|
if (this.dataset.showTour === 'true') this.start()
|
|
}
|
|
|
|
async start () {
|
|
if (window.innerWidth < 768) return
|
|
|
|
const [{ driver }] = await Promise.all([
|
|
import('driver.js'),
|
|
import('driver.js/dist/driver.css')
|
|
])
|
|
|
|
this.driverObj = driver({
|
|
showProgress: true,
|
|
nextBtnText: this.I18n.next,
|
|
prevBtnText: this.I18n.previous,
|
|
doneBtnText: this.I18n.done,
|
|
onDestroyStarted: () => {
|
|
this.disableAppGuide().finally(() => { this.destroy() })
|
|
},
|
|
onHighlightStarted: (element) => {
|
|
if (element) {
|
|
const clickHandler = () => {
|
|
this.disableAppGuide().finally(() => { this.destroy() })
|
|
element.removeEventListener('click', clickHandler)
|
|
}
|
|
|
|
element.addEventListener('click', clickHandler)
|
|
}
|
|
}
|
|
})
|
|
|
|
if (this.tourType === 'dashboard') {
|
|
this.showDashboardTour()
|
|
} else if (this.tourType === 'builder') {
|
|
this.showTemplateBuilderTour()
|
|
} else if (this.tourType === 'account') {
|
|
this.showAccountTour()
|
|
} else if (this.tourType === 'template') {
|
|
this.showTemplateTour()
|
|
}
|
|
}
|
|
|
|
disconnectedCallback () {
|
|
if (this.driverObj) this.destroy()
|
|
}
|
|
|
|
destroy () {
|
|
if (this.builderTemplate) this.builderTemplate.fields.shift()
|
|
if (this.driverObj) this.driverObj.destroy()
|
|
}
|
|
|
|
showTemplateTour () {
|
|
const steps = [
|
|
{
|
|
element: '#share_link_clipboard',
|
|
popover: {
|
|
title: this.I18n.copy_and_share_link,
|
|
description: this.I18n.copy_and_share_link_description,
|
|
side: 'bottom',
|
|
align: 'end'
|
|
}
|
|
},
|
|
{
|
|
element: '#sign_yourself_button',
|
|
popover: {
|
|
title: this.I18n.sign_the_document,
|
|
description: this.I18n.sign_the_document_description,
|
|
side: 'top',
|
|
align: 'center'
|
|
}
|
|
},
|
|
{
|
|
element: '#send_to_recipients_button',
|
|
popover: {
|
|
title: this.I18n.send_for_signing,
|
|
description: this.I18n.add_recipients_description,
|
|
side: 'top',
|
|
align: 'center'
|
|
}
|
|
},
|
|
{
|
|
element: '#add_recipients_button',
|
|
popover: {
|
|
title: this.I18n.add_recipients,
|
|
description: this.I18n.add_recipients_description,
|
|
side: 'bottom',
|
|
align: 'end'
|
|
}
|
|
},
|
|
{
|
|
element: '#account_settings_button',
|
|
popover: {
|
|
title: this.I18n.settings,
|
|
description: this.I18n.settings_template_description,
|
|
side: 'right',
|
|
align: 'start',
|
|
showButtons: this.nextPagePath ? ['next', 'previous', 'close'] : ['previous', 'close'],
|
|
onNextClick: () => {
|
|
if (this.nextPagePath) {
|
|
window.Turbo.visit(this.nextPagePath)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
].filter((step) => document.querySelector(step.element))
|
|
|
|
this.driverObj.setSteps(steps)
|
|
this.driverObj.drive()
|
|
}
|
|
|
|
showDashboardTour () {
|
|
this.driverObj.setSteps([
|
|
{
|
|
element: '#templates_submissions_toggle',
|
|
popover: {
|
|
title: this.I18n.template_and_submissions,
|
|
description: this.I18n.template_and_submissions_description,
|
|
side: 'right',
|
|
align: 'start'
|
|
}
|
|
},
|
|
{
|
|
element: '#templates_upload_button',
|
|
popover: {
|
|
title: this.I18n.upload_a_pdf_file,
|
|
description: this.I18n.upload_a_pdf_file_description,
|
|
side: 'left',
|
|
align: 'start',
|
|
showButtons: this.nextPagePath ? ['next', 'previous', 'close'] : ['previous', 'close'],
|
|
onNextClick: () => {
|
|
if (this.nextPagePath) {
|
|
window.Turbo.visit(this.nextPagePath)
|
|
}
|
|
}
|
|
},
|
|
onHighlightStarted: () => {}
|
|
}
|
|
])
|
|
|
|
this.driverObj.drive()
|
|
}
|
|
|
|
showAccountTour () {
|
|
this.driverObj.setSteps([
|
|
{
|
|
element: '#account_settings_menu',
|
|
popover: {
|
|
title: this.I18n.settings,
|
|
description: this.I18n.settings_account_description,
|
|
side: 'right',
|
|
align: 'start'
|
|
}
|
|
},
|
|
{
|
|
element: '#support_channels',
|
|
popover: {
|
|
title: this.I18n.support,
|
|
description: this.I18n.support_description,
|
|
side: 'left',
|
|
align: 'start'
|
|
}
|
|
}
|
|
].filter((step) => document.querySelector(step.element)))
|
|
|
|
this.driverObj.drive()
|
|
}
|
|
|
|
showTemplateBuilderTour () {
|
|
const builderComponent = document.querySelector('template-builder')?.component
|
|
|
|
this.builderTemplate = builderComponent?.template
|
|
|
|
if (this.builderTemplate) {
|
|
this.builderTemplate.fields.unshift({
|
|
uuid: 'b387399b-88dc-4345-9d37-743e97a9b2b3',
|
|
submitter_uuid: this.builderTemplate.submitters[0].uuid,
|
|
name: 'First Name',
|
|
type: 'text'
|
|
})
|
|
|
|
builderComponent.$nextTick(() => {
|
|
this.driverObj.setSteps([
|
|
{
|
|
element: '.roles-dropdown',
|
|
popover: {
|
|
title: this.I18n.select_a_signer_party,
|
|
description: this.I18n.select_a_signer_party_description,
|
|
side: 'left',
|
|
align: 'start',
|
|
onPopoverRender: () => {
|
|
const rolesDropdown = document.querySelector('.roles-dropdown')
|
|
|
|
rolesDropdown.dispatchEvent(new Event('mouseenter', { bubbles: true, cancelable: true }))
|
|
rolesDropdown.classList.add('dropdown-open')
|
|
}
|
|
}
|
|
},
|
|
{
|
|
element: '.roles-dropdown .dropdown-content',
|
|
popover: {
|
|
title: this.I18n.available_parties,
|
|
description: this.I18n.available_parties_description,
|
|
side: 'left',
|
|
align: 'start',
|
|
onPopoverRender: () => {
|
|
document.querySelector('.roles-dropdown .dropdown-content').classList.remove('driver-active-element')
|
|
},
|
|
onNextClick: () => {
|
|
document.querySelector('.roles-dropdown').classList.remove('dropdown-open')
|
|
this.driverObj.moveNext()
|
|
}
|
|
}
|
|
},
|
|
{
|
|
element: '#field-types-grid',
|
|
popover: {
|
|
title: this.I18n.available_field_types,
|
|
description: this.I18n.available_field_types_description,
|
|
side: 'right',
|
|
align: 'start',
|
|
onPrevClick: () => {
|
|
document.querySelector('.roles-dropdown').classList.add('dropdown-open')
|
|
this.driverObj.movePrevious()
|
|
}
|
|
}
|
|
},
|
|
{
|
|
element: '#text_type_field_button',
|
|
popover: {
|
|
title: this.I18n.text_input_field,
|
|
description: this.I18n.text_input_field_description,
|
|
side: 'left',
|
|
align: 'start'
|
|
}
|
|
},
|
|
{
|
|
element: '#signature_type_field_button',
|
|
popover: {
|
|
title: this.I18n.signature_field,
|
|
description: this.I18n.signature_field_description,
|
|
side: 'left',
|
|
align: 'start'
|
|
}
|
|
},
|
|
{
|
|
element: '.fields',
|
|
popover: {
|
|
title: this.I18n.added_fields,
|
|
description: this.I18n.added_fields_description,
|
|
side: 'right',
|
|
align: 'start'
|
|
}
|
|
},
|
|
{
|
|
element: '.list-field label:has(svg.tabler-icon-settings)',
|
|
popover: {
|
|
title: this.I18n.open_field_settings,
|
|
description: this.I18n.open_field_settings_description,
|
|
side: 'bottom',
|
|
align: 'end',
|
|
onPopoverRender: () => {
|
|
const settingsDropdown = document.querySelector('.list-field div:first-child span:has(svg.tabler-icon-settings)')
|
|
|
|
document.querySelectorAll('.list-field div:first-child .text-transparent').forEach((e) => e.classList.remove('text-transparent'))
|
|
settingsDropdown.dispatchEvent(new Event('mouseenter', { bubbles: true, cancelable: true }))
|
|
settingsDropdown.classList.add('dropdown-open')
|
|
}
|
|
}
|
|
},
|
|
{
|
|
element: '.list-field div:first-child span:has(svg.tabler-icon-settings) .dropdown-content',
|
|
popover: {
|
|
title: this.I18n.field_settings,
|
|
description: this.I18n.field_settings_description,
|
|
side: 'left',
|
|
align: 'start',
|
|
onPopoverRender: () => {
|
|
document.querySelector('.list-field div:first-child span:has(svg.tabler-icon-settings) .dropdown-content').classList.remove('driver-active-element')
|
|
},
|
|
onNextClick: () => {
|
|
document.querySelector('.list-field div:first-child span:has(svg.tabler-icon-settings)').classList.remove('dropdown-open')
|
|
this.driverObj.moveNext()
|
|
}
|
|
}
|
|
},
|
|
{
|
|
element: '#send_button',
|
|
popover: {
|
|
title: this.I18n.send_document,
|
|
description: this.I18n.send_document_description,
|
|
side: 'bottom',
|
|
align: 'end',
|
|
onPrevClick: () => {
|
|
document.querySelector('.list-field div:first-child span:has(svg.tabler-icon-settings)').classList.add('dropdown-open')
|
|
this.driverObj.movePrevious()
|
|
}
|
|
}
|
|
},
|
|
{
|
|
element: '#sign_yourself_button',
|
|
popover: {
|
|
title: this.I18n.sign_yourself,
|
|
description: this.I18n.sign_yourself_description,
|
|
side: 'bottom',
|
|
align: 'end',
|
|
onNextClick: () => {
|
|
if (this.nextPagePath) {
|
|
window.Turbo.visit(this.nextPagePath)
|
|
} else {
|
|
this.destroy()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
])
|
|
|
|
this.driverObj.drive()
|
|
})
|
|
}
|
|
}
|
|
|
|
async disableAppGuide () {
|
|
return fetch('/user_configs', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content
|
|
},
|
|
body: JSON.stringify({ key: 'show_app_tour', value: false })
|
|
})
|
|
}
|
|
}
|