ApiSettings.tsx 2.4 KB

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