Просмотр исходного кода

a range of dates can be selected

Shun Miyazawa 3 лет назад
Родитель
Сommit
07b89a837b

+ 11 - 1
packages/app/src/components/Admin/AuditLogManagement.tsx

@@ -1,5 +1,6 @@
 import React, { FC, useState, useCallback } from 'react';
 
+import { format } from 'date-fns';
 import { useTranslation } from 'react-i18next';
 
 import {
@@ -13,6 +14,14 @@ import { ActivityTable } from './AuditLog/ActivityTable';
 import { DateRangePicker } from './AuditLog/DateRangePicker';
 import { SelectActionDropdown } from './AuditLog/SelectActionDropdown';
 
+
+const formatDate = (date: Date | null) => {
+  if (date == null) {
+    return '';
+  }
+  return format(new Date(date), 'yyyy/MM/dd');
+};
+
 const PAGING_LIMIT = 10;
 
 export const AuditLogManagement: FC = () => {
@@ -32,8 +41,9 @@ export const AuditLogManagement: FC = () => {
   /*
    * Fetch
    */
+  const selectedDate = { startDate: formatDate(startDate), endDate: formatDate(endDate) };
   const selectedActionList = Array.from(actionMap.entries()).filter(v => v[1]).map(v => v[0]);
-  const searchFilter = { action: selectedActionList };
+  const searchFilter = { action: selectedActionList, date: selectedDate };
 
   const { data: activityListData, error } = useSWRxActivityList(PAGING_LIMIT, offset, searchFilter);
   const activityList = activityListData?.docs != null ? activityListData.docs : [];

+ 12 - 0
packages/app/src/server/routes/apiv3/activity.ts

@@ -1,3 +1,4 @@
+import { parse, isValid } from 'date-fns';
 import express, { Request, Router } from 'express';
 import rateLimit from 'express-rate-limit';
 import { query } from 'express-validator';
@@ -53,6 +54,17 @@ module.exports = (crowi: Crowi): Router => {
         Object.assign(query, { action: parsedSearchFilter.action });
       }
 
+      const startDate = parse(parsedSearchFilter.date.startDate, 'yyyy/MM/dd', new Date());
+      const endDate = parse(parsedSearchFilter.date.endDate, 'yyyy/MM/dd', new Date());
+      if (isValid(startDate) && isValid(endDate)) {
+        Object.assign(query, {
+          createdAt: {
+            $gte: startDate,
+            $lte: endDate,
+          },
+        });
+      }
+
       const paginationResult = await Activity.getPaginatedActivity(limit, offset, query);
 
       const User = crowi.model('User');

+ 1 - 0
packages/app/src/stores/activity.ts

@@ -7,6 +7,7 @@ import { PaginateResult } from '../interfaces/mongoose-utils';
 
 
 type ISearchFilter = {
+  date: {startDate: string | null, endDate: string | null}
   action?: SupportedActionType[]
 }