import { PencilIcon, TrashIcon } from '@heroicons/react/solid'; import classNames from 'classnames'; import React, { Fragment, useLayoutEffect, useState } from 'react'; import AddYourFirstCustomEvent from 'ui/src/components/AddYourFirstCustomEvent'; import { EventsTableHeader } from 'ui/src/components/EventsTableHeader'; import { recommendedEvents } from 'ui/src/components/recommendedEvents'; import CustomEventForm from '../../../../apps/basic/src/components/CustomEventForm'; import DeleteModal from './DeleteModal'; import PropsTag from './PropsTag'; import EventsTableContext from '../../../../apps/basic/src/context/EventsTableContext'; import RecommendedEventsListContext from '../../../../apps/basic/src/context/RecommendedEventsList'; import ClickTrackingHelpSection from './ClickTrackingHelpSection'; import { useHelpSliderContext } from '../context/HelpSliderContext'; import VisibilityTrackingHelpSection from './VisibilityTrackingHelpSection'; interface CustomEvent { eventName: string; selector: string; props: Record; id: string; isRecommended?: boolean; [key: string]: any; } interface EventsTableProps { type: string; customEvents: CustomEvent[]; deleteEvent: (eventId: string) => void; updateFunction: () => void; } export default function EventsTable({ type, customEvents, deleteEvent, updateFunction, }: EventsTableProps) { const [checked, setChecked] = useState(false); const [indeterminate, setIndeterminate] = useState(false); const [selectedCustomEvents, setSelectedCustomEvents] = useState< CustomEvent[] >([]); const [addCustomEventForm, setAddCustomEventForm] = useState(false); // const [openHelpSection, setOpenHelpSection] = useState(false); const [addRecommendedEventForm, setAddRecommendedEventForm] = useState(false); const [delModal, setDelModal] = useState(false); const [currentCustomEvent, setCurrentCustomEvent] = useState< CustomEvent | false >(); const [currentRecommendedEvent, setCurrentRecommendedEvent] = useState< CustomEvent | undefined >(); const { setOpenHelpSlider, setTitleHelpSlider, setComponent } = useHelpSliderContext(); const handleHelpButtonClick = () => { const title = `Tracking your first ${type} event`; let component; switch (type) { case 'click': component = ClickTrackingHelpSection; break; case 'visibility': component = VisibilityTrackingHelpSection; break; default: console.error(`Unknown tracking type: ${type}`); return; } setTitleHelpSlider(title); setComponent(component); setOpenHelpSlider(true); }; useLayoutEffect(() => { const isIndeterminate = selectedCustomEvents.length > 0 && selectedCustomEvents.length < customEvents.length; }, [selectedCustomEvents]); function toggleAddCustomEventForm() { setAddCustomEventForm(!addCustomEventForm); } function toggleAll() { setSelectedCustomEvents(checked || indeterminate ? [] : customEvents); setChecked(!checked && !indeterminate); setIndeterminate(false); } function toggleDeleteModal() { setDelModal(!delModal); } function toggleEditForm( e: React.MouseEvent, customEvent: CustomEvent, ) { e.preventDefault(); let current = { ...customEvent }; current['edit'] = true; if (current.isRecommended) { setCurrentRecommendedEvent({ ...current }); setAddRecommendedEventForm(true); } else { setCurrentCustomEvent({ ...current }); setAddCustomEventForm(true); } } function hideEditForm() { setCurrentCustomEvent(undefined); } function showDeleteModal( e: React.MouseEvent, customEvent: CustomEvent, ) { e.preventDefault(); setCurrentCustomEvent(customEvent); setDelModal(true); } return (
{customEvents.length == 0 && !addCustomEventForm && ( )} {customEvents.map((customEvent, index) => ( { {/* */} } ))}
Custom Event Name Edit
Event Name {customEvent.eventName}
Selector {customEvent.selector}
Event Properties
{customEvent.props && Object.entries(customEvent.props) .filter(([key, value]) => key !== 'items') .map( ( [key, value], // ignore items prop as it is a complex object ) => value ? ( ) : ( '' ), )}
{customEvent.selector}
{delModal && currentCustomEvent && ( )}
); }