| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import React, { FC, useState, useCallback } from 'react';
- import { useTranslation } from 'react-i18next';
- import {
- SupportedActionType, AllSupportedPageAction, AllSupportedCommentAction, AllSupportedActionType,
- } from '~/interfaces/activity';
- import { useSWRxActivityList } from '~/stores/activity';
- import PaginationWrapper from '../PaginationWrapper';
- import { ActivityTable } from './AuditLog/ActivityTable';
- import { SelectActionDropdown } from './AuditLog/SelectActionDropdown';
- const PAGING_LIMIT = 10;
- export const AuditLogManagement: FC = () => {
- const { t } = useTranslation();
- /*
- * State
- */
- const [activePage, setActivePage] = useState<number>(1);
- const offset = (activePage - 1) * PAGING_LIMIT;
- const [actionMap, setActionMap] = useState(
- new Map<SupportedActionType, boolean>(AllSupportedActionType.map(action => [action, true])),
- );
- /*
- * Fetch
- */
- const selectedActionList = Array.from(actionMap.entries()).filter(v => v[1]).map(v => v[0]);
- const searchFilter = { action: selectedActionList };
- const { data: activityListData, error } = useSWRxActivityList(PAGING_LIMIT, offset, searchFilter);
- const activityList = activityListData?.docs != null ? activityListData.docs : [];
- const totalActivityNum = activityListData?.totalDocs != null ? activityListData.totalDocs : 0;
- const isLoading = activityListData === undefined && error == null;
- /*
- * Functions
- */
- const setActivePageHandler = useCallback((selectedPageNum: number) => {
- setActivePage(selectedPageNum);
- }, []);
- const selectActionCheckboxChangedHandler = useCallback((action: SupportedActionType) => {
- actionMap.set(action, !actionMap.get(action));
- setActionMap(new Map(actionMap.entries()));
- }, [actionMap, setActionMap]);
- const selectAllActionCheckboxChangedHandler = useCallback((actions: SupportedActionType[], isChecked) => {
- actions.forEach(action => actionMap.set(action, isChecked));
- setActionMap(new Map(actionMap.entries()));
- }, [actionMap, setActionMap]);
- return (
- <div data-testid="admin-auditlog">
- <h2>{t('AuditLog')}</h2>
- <SelectActionDropdown
- dropdownItems={[
- { actionCategory: 'Page', actionNames: AllSupportedPageAction },
- { actionCategory: 'Comment', actionNames: AllSupportedCommentAction },
- ]}
- actionMap={actionMap}
- onSelectAction={selectActionCheckboxChangedHandler}
- onSelectAllACtion={selectAllActionCheckboxChangedHandler}
- />
- { isLoading
- ? (
- <div className="text-muted text-center mb-5">
- <i className="fa fa-2x fa-spinner fa-pulse mr-1"></i>
- </div>
- )
- : (
- <>
- <ActivityTable activityList={activityList} />
- <PaginationWrapper
- activePage={activePage}
- changePage={setActivePageHandler}
- totalItemsCount={totalActivityNum}
- pagingLimit={PAGING_LIMIT}
- align="center"
- size="sm"
- />
- </>
- )
- }
- </div>
- );
- };
|