ApiTokenSettings.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import React, { useCallback } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import {
  4. apiv3Put,
  5. } from '~/client/util/apiv3-client';
  6. import { toastSuccess, toastError } from '~/client/util/toastr';
  7. import { usePersonalSettings, useSWRxPersonalSettings } from '~/stores/personal-settings';
  8. export const ApiTokenSettings = React.memo((): JSX.Element => {
  9. const { t } = useTranslation();
  10. const { mutate: mutateDatabaseData } = useSWRxPersonalSettings();
  11. const { data: personalSettingsData } = usePersonalSettings();
  12. const submitHandler = useCallback(async() => {
  13. try {
  14. await apiv3Put('/personal-setting/api-token');
  15. mutateDatabaseData();
  16. toastSuccess(t('toaster.update_successed', { target: t('page_me_apitoken.api_token'), ns: 'commons' }));
  17. }
  18. catch (err) {
  19. toastError(err);
  20. }
  21. }, [mutateDatabaseData, t]);
  22. return (
  23. <>
  24. <div className="row mb-3">
  25. <label htmlFor="apiToken" className="col-md-3 text-md-end col-form-label">{t('Current API Token')}</label>
  26. <div className="col-md-6">
  27. {personalSettingsData?.apiToken != null
  28. ? (
  29. <input
  30. data-testid="grw-api-settings-input"
  31. data-vrt-blackout
  32. className="form-control"
  33. type="text"
  34. name="apiToken"
  35. value={personalSettingsData.apiToken}
  36. readOnly
  37. />
  38. )
  39. : (
  40. <p>
  41. { t('page_me_apitoken.notice.apitoken_issued') }
  42. </p>
  43. )}
  44. </div>
  45. </div>
  46. <div className="row">
  47. <div className="offset-lg-2 col-lg-7">
  48. <p className="alert alert-warning">
  49. { t('page_me_apitoken.notice.update_token1') }<br />
  50. { t('page_me_apitoken.notice.update_token2') }
  51. </p>
  52. </div>
  53. </div>
  54. <div className="row my-3">
  55. <div className="offset-4 col-5">
  56. <button
  57. data-testid="grw-api-settings-update-button"
  58. type="button"
  59. className="btn btn-primary text-nowrap"
  60. onClick={submitHandler}
  61. >
  62. {t('Update API Token')}
  63. </button>
  64. </div>
  65. </div>
  66. </>
  67. );
  68. });