TokensActions.jsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import React from 'react';
  2. import { Button, Modal, Space } from '@douyinfe/semi-ui';
  3. import { showError } from '../../../helpers';
  4. const TokensActions = ({
  5. selectedKeys,
  6. setEditingToken,
  7. setShowEdit,
  8. batchCopyTokens,
  9. batchDeleteTokens,
  10. copyText,
  11. t,
  12. }) => {
  13. // Handle copy selected tokens with options
  14. const handleCopySelectedTokens = () => {
  15. if (selectedKeys.length === 0) {
  16. showError(t('请至少选择一个令牌!'));
  17. return;
  18. }
  19. Modal.info({
  20. title: t('复制令牌'),
  21. icon: null,
  22. content: t('请选择你的复制方式'),
  23. footer: (
  24. <Space>
  25. <Button
  26. type='tertiary'
  27. onClick={async () => {
  28. let content = '';
  29. for (let i = 0; i < selectedKeys.length; i++) {
  30. content +=
  31. selectedKeys[i].name + ' sk-' + selectedKeys[i].key + '\n';
  32. }
  33. await copyText(content);
  34. Modal.destroyAll();
  35. }}
  36. >
  37. {t('名称+密钥')}
  38. </Button>
  39. <Button
  40. onClick={async () => {
  41. let content = '';
  42. for (let i = 0; i < selectedKeys.length; i++) {
  43. content += 'sk-' + selectedKeys[i].key + '\n';
  44. }
  45. await copyText(content);
  46. Modal.destroyAll();
  47. }}
  48. >
  49. {t('仅密钥')}
  50. </Button>
  51. </Space>
  52. ),
  53. });
  54. };
  55. // Handle delete selected tokens with confirmation
  56. const handleDeleteSelectedTokens = () => {
  57. if (selectedKeys.length === 0) {
  58. showError(t('请至少选择一个令牌!'));
  59. return;
  60. }
  61. Modal.confirm({
  62. title: t('批量删除令牌'),
  63. content: (
  64. <div>
  65. {t('确定要删除所选的 {{count}} 个令牌吗?', { count: selectedKeys.length })}
  66. </div>
  67. ),
  68. onOk: () => batchDeleteTokens(),
  69. });
  70. };
  71. return (
  72. <div className="flex flex-wrap gap-2 w-full md:w-auto order-2 md:order-1">
  73. <Button
  74. type="primary"
  75. className="flex-1 md:flex-initial"
  76. onClick={() => {
  77. setEditingToken({
  78. id: undefined,
  79. });
  80. setShowEdit(true);
  81. }}
  82. size="small"
  83. >
  84. {t('添加令牌')}
  85. </Button>
  86. <Button
  87. type='tertiary'
  88. className="flex-1 md:flex-initial"
  89. onClick={handleCopySelectedTokens}
  90. size="small"
  91. >
  92. {t('复制所选令牌')}
  93. </Button>
  94. <Button
  95. type='danger'
  96. className="w-full md:w-auto"
  97. onClick={handleDeleteSelectedTokens}
  98. size="small"
  99. >
  100. {t('删除所选令牌')}
  101. </Button>
  102. </div>
  103. );
  104. };
  105. export default TokensActions;