Shun Miyazawa 3 سال پیش
والد
کامیت
9e9e19d924
2فایلهای تغییر یافته به همراه14 افزوده شده و 24 حذف شده
  1. 5 6
      packages/app/src/server/routes/apiv3/users.js
  2. 9 18
      packages/app/src/stores/user.tsx

+ 5 - 6
packages/app/src/server/routes/apiv3/users.js

@@ -124,9 +124,7 @@ module.exports = (crowi) => {
   validator.usernames = [
     query('q').isString().withMessage('q is required'),
     query('limit').optional().isInt({ max: 20 }).withMessage('You should set less than 20 or not to set limit.'),
-    query('isIncludeActiveUsernames').optional().isBoolean(),
-    query('isIncludeInactiveUsernames').optional().isBoolean(),
-    query('isIncludeActivitySnapshotUsernames').optional().isBoolean(),
+    query('options').optional().isString().withMessage('options must be string'),
   ];
 
   const sendEmailByUserList = async(userList) => {
@@ -946,23 +944,24 @@ module.exports = (crowi) => {
     const limit = +req.query.limit || 10;
 
     try {
+      const options = JSON.parse(req.query.options);
       const data = {};
 
-      if (req.query.isIncludeActiveUsernames === 'true') {
+      if (options.isIncludeActiveUsernames) {
         const additionalQuery = { status: User.STATUS_ACTIVE };
         const activeUsers = await User.findUserByUsernameRegex(q, limit, additionalQuery);
         const activeUsernames = activeUsers.map(user => user.username);
         Object.assign(data, { activeUsernames });
       }
 
-      if (req.query.isIncludeInactiveUsernames === 'true') {
+      if (options.isIncludeInactiveUsernames) {
         const additionalQuery = { status: { $nin: [User.STATUS_ACTIVE, User.STATUS_DELETED] } };
         const inactiveUsers = await User.findUserByUsernameRegex(q, limit, additionalQuery);
         const inactiveUsernames = inactiveUsers.map(user => user.username);
         Object.assign(data, { inactiveUsernames });
       }
 
-      if (req.query.isIncludeActivitySnapshotUsernames === 'true' && req.user.admin) {
+      if (options.isIncludeActivitySnapshotUsernames && req.user.admin) {
         const activitySnapshotUsernames = await Activity.getSnapshotUsernames(q, limit);
         Object.assign(data, { activitySnapshotUsernames });
       }

+ 9 - 18
packages/app/src/stores/user.tsx

@@ -16,6 +16,12 @@ export const useSWRxUsersList = (userIds: string[]): SWRResponse<IUserHasId[], E
   );
 };
 
+type usernameOptions = {
+  isIncludeActiveUsernames?: boolean,
+  isIncludeInactiveUsernames?: boolean,
+  isIncludeActivitySnapshotUsernames?: boolean,
+}
+
 type usernameResponse = {
   data: {
     activeUsernames?: string[]
@@ -24,24 +30,9 @@ type usernameResponse = {
   }
 }
 
-export const useSWRxUsernames = (
-    q: string,
-    limit?: number,
-    isIncludeActiveUsernames?: boolean,
-    isIncludeInactiveUsernames?: boolean,
-    isIncludeActivitySnapshotUsernames?: boolean,
-): SWRResponse<usernameResponse, Error> => {
+export const useSWRxUsernames = (q: string, limit?: number, options?: usernameOptions): SWRResponse<usernameResponse, Error> => {
   return useSWRImmutable(
-    q != null ? ['/users/usernames', q, limit, isIncludeActiveUsernames, isIncludeInactiveUsernames, isIncludeActivitySnapshotUsernames] : null,
-    (
-        endpoint,
-        q,
-        limit,
-        isIncludeActiveUsernames,
-        isIncludeInactiveUsernames,
-        isIncludeActivitySnapshotUsernames,
-    ) => apiv3Get(endpoint, {
-      q, limit, isIncludeActiveUsernames, isIncludeInactiveUsernames, isIncludeActivitySnapshotUsernames,
-    }).then(result => result.data),
+    q != null ? ['/users/usernames', q, limit, options] : null,
+    (endpoint, q, limit, options) => apiv3Get(endpoint, { q, limit, options: JSON.stringify(options) }).then(result => result.data),
   );
 };