Path: blob/develop/resources/scripts/components/dashboard/activity/ActivityLogContainer.tsx
7454 views
import { useEffect, useState } from 'react';1import { ActivityLogFilters, useActivityLogs } from '@/api/account/activity';2import { useFlashKey } from '@/plugins/useFlash';3import PageContentBlock from '@/components/elements/PageContentBlock';4import FlashMessageRender from '@/components/FlashMessageRender';5import { Link } from 'react-router-dom';6import PaginationFooter from '@/components/elements/table/PaginationFooter';7import { DesktopComputerIcon, XCircleIcon } from '@heroicons/react/solid';8import Spinner from '@/components/elements/Spinner';9import { styles as btnStyles } from '@/components/elements/button/index';10import classNames from 'classnames';11import ActivityLogEntry from '@/components/elements/activity/ActivityLogEntry';12import Tooltip from '@/components/elements/tooltip/Tooltip';13import useLocationHash from '@/plugins/useLocationHash';1415export default () => {16const { hash } = useLocationHash();17const { clearAndAddHttpError } = useFlashKey('account');18const [filters, setFilters] = useState<ActivityLogFilters>({ page: 1, sorts: { timestamp: -1 } });19const { data, isValidating, error } = useActivityLogs(filters, {20revalidateOnMount: true,21revalidateOnFocus: false,22});2324useEffect(() => {25setFilters(value => ({ ...value, filters: { ip: hash.ip, event: hash.event } }));26}, [hash]);2728useEffect(() => {29clearAndAddHttpError(error);30}, [error]);3132return (33<PageContentBlock title={'Account Activity Log'}>34<FlashMessageRender byKey={'account'} />35{(filters.filters?.event || filters.filters?.ip) && (36<div className={'mb-2 flex justify-end'}>37<Link38to={'#'}39className={classNames(btnStyles.button, btnStyles.text, 'w-full sm:w-auto')}40onClick={() => setFilters(value => ({ ...value, filters: {} }))}41>42Clear Filters <XCircleIcon className={'ml-2 h-4 w-4'} />43</Link>44</div>45)}46{!data && isValidating ? (47<Spinner centered />48) : (49<div className={'bg-slate-700'}>50{data?.items.map(activity => (51<ActivityLogEntry key={activity.id} activity={activity}>52{typeof activity.properties.useragent === 'string' && (53<Tooltip content={activity.properties.useragent} placement={'top'}>54<span>55<DesktopComputerIcon />56</span>57</Tooltip>58)}59</ActivityLogEntry>60))}61</div>62)}63{data && (64<PaginationFooter65pagination={data.pagination}66onPageSelect={page => setFilters(value => ({ ...value, page }))}67/>68)}69</PageContentBlock>70);71};727374