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

Merge pull request #2402 from weseek/support/call-api-for-delete-share-link

Support/call api for delete share link
itizawa 5 лет назад
Родитель
Сommit
40f6411436

+ 4 - 3
resource/locales/en-US/translation.json

@@ -339,11 +339,12 @@
   "toaster": {
     "update_successed": "Succeeded to update {{target}}",
     "give_user_admin": "Succeeded to give {{username}} admin",
-    "remove_user_admin": "Succeeded to remove {{username}} admin ",
+    "remove_user_admin": "Succeeded to remove {{username}} admin",
     "activate_user_success": "Succeeded to activating {{username}}",
     "deactivate_user_success": "Succeeded to deactivate {{username}}",
-    "remove_user_success": "Succeeded to removing {{username}} ",
-    "remove_external_user_success": "Succeeded to remove {{accountId}} ",
+    "remove_user_success": "Succeeded to removing {{username}}",
+    "remove_external_user_success": "Succeeded to remove {{accountId}}",
+    "remove_share_link_success": "Succeeded to remove {{shareLinkId}}",
     "issue_share_link": "Succeeded to issue new share link"
   },
   "template": {

+ 1 - 0
resource/locales/ja/translation.json

@@ -345,6 +345,7 @@
     "deactivate_user_success": "{{username}}を無効化しました",
     "remove_user_success": "{{username}}を削除しました",
     "remove_external_user_success": "{{accountId}}を削除しました",
+    "remove_share_link_success": "{{shareLinkId}}を削除しました",
     "issue_share_link": "共有リンクを作成しました"
   },
   "template": {

+ 15 - 6
src/client/js/components/ShareLinkList.jsx

@@ -1,21 +1,25 @@
 import React from 'react';
-import * as toastr from 'toastr';
+import PropTypes from 'prop-types';
+
 
 import { withTranslation } from 'react-i18next';
+import { toastSuccess, toastError } from '../util/apiNotification';
 
 import { withUnstatedContainers } from './UnstatedUtils';
 
 import AppContainer from '../services/AppContainer';
 
 const ShareLinkList = (props) => {
+  const { t, appContainer } = props;
 
-  function deleteLinkHandler(shareLink) {
+  async function deleteLinkHandler(shareLinkId) {
     try {
-      // call api
-      toastr.success(`Successfully deleted ${shareLink._id}`);
+      const res = await appContainer.apiv3Delete(`/share-links/${shareLinkId}`);
+      const { deletedShareLink } = res.data;
+      toastSuccess(t('remove_share_link_success', { shareLinkId: deletedShareLink._id }));
     }
     catch (err) {
-      toastr.error(new Error(`Failed to delete ${shareLink._id}`));
+      toastError(err);
     }
   }
 
@@ -48,7 +52,7 @@ const ShareLinkList = (props) => {
             <td>{shareLink.expiration}</td>
             <td>{shareLink.description}</td>
             <td>
-              <button className="btn btn-outline-warning" type="button" onClick={() => deleteLinkHandler(shareLink)}>
+              <button className="btn btn-outline-warning" type="button" onClick={() => deleteLinkHandler(shareLink._id)}>
                 <i className="icon-trash"></i>Delete
               </button>
             </td>
@@ -79,4 +83,9 @@ const ShareLinkList = (props) => {
 
 const ShareLinkListWrapper = withUnstatedContainers(ShareLinkList, [AppContainer]);
 
+ShareLinkList.propTypes = {
+  t: PropTypes.func.isRequired, //  i18next
+  appContainer: PropTypes.instanceOf(AppContainer).isRequired,
+};
+
 export default withTranslation()(ShareLinkListWrapper);

+ 1 - 1
src/server/routes/apiv3/share-links.js

@@ -174,7 +174,7 @@ module.exports = (crowi) => {
 
     try {
       const deletedShareLink = await ShareLink.findOneAndRemove({ _id: id });
-      return res.apiv3(deletedShareLink);
+      return res.apiv3({ deletedShareLink });
     }
     catch (err) {
       const msg = 'Error occurred in delete share link';