You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

BitbucketProjectCreateRenderer.tsx 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2024 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. import { LightPrimary, PageContentFontWrapper, Spinner, Title } from 'design-system';
  21. import * as React from 'react';
  22. import { translate } from '../../../../helpers/l10n';
  23. import {
  24. BitbucketProject,
  25. BitbucketProjectRepositories,
  26. BitbucketRepository,
  27. } from '../../../../types/alm-integration';
  28. import { AlmKeys, AlmSettingsInstance } from '../../../../types/alm-settings';
  29. import AlmSettingsInstanceDropdown from '../components/AlmSettingsInstanceDropdown';
  30. import WrongBindingCountAlert from '../components/WrongBindingCountAlert';
  31. import BitbucketImportRepositoryForm from './BitbucketImportRepositoryForm';
  32. import BitbucketServerPersonalAccessTokenForm from './BitbucketServerPersonalAccessTokenForm';
  33. export interface BitbucketProjectCreateRendererProps {
  34. selectedAlmInstance?: AlmSettingsInstance;
  35. almInstances: AlmSettingsInstance[];
  36. loading: boolean;
  37. onImportRepository: (repository: BitbucketRepository) => void;
  38. onSearch: (query: string) => void;
  39. onPersonalAccessTokenCreated: () => void;
  40. onSelectedAlmInstanceChange: (instance: AlmSettingsInstance) => void;
  41. projects?: BitbucketProject[];
  42. projectRepositories?: BitbucketProjectRepositories;
  43. resetPat: boolean;
  44. searching: boolean;
  45. searchResults?: BitbucketRepository[];
  46. showPersonalAccessTokenForm?: boolean;
  47. }
  48. export default function BitbucketProjectCreateRenderer(props: BitbucketProjectCreateRendererProps) {
  49. const {
  50. almInstances,
  51. selectedAlmInstance,
  52. loading,
  53. projects,
  54. projectRepositories,
  55. searching,
  56. searchResults,
  57. showPersonalAccessTokenForm,
  58. resetPat,
  59. } = props;
  60. return (
  61. <PageContentFontWrapper>
  62. <header className="sw-mb-10">
  63. <Title className="sw-mb-4">{translate('onboarding.create_project.bitbucket.title')}</Title>
  64. <LightPrimary className="sw-body-sm">
  65. {translate('onboarding.create_project.bitbucket.subtitle')}
  66. </LightPrimary>
  67. </header>
  68. <AlmSettingsInstanceDropdown
  69. almKey={AlmKeys.BitbucketServer}
  70. almInstances={almInstances}
  71. selectedAlmInstance={selectedAlmInstance}
  72. onChangeConfig={props.onSelectedAlmInstanceChange}
  73. />
  74. <Spinner loading={loading}>
  75. {!loading && !selectedAlmInstance && (
  76. <WrongBindingCountAlert alm={AlmKeys.BitbucketServer} />
  77. )}
  78. {!loading &&
  79. selectedAlmInstance &&
  80. (showPersonalAccessTokenForm ? (
  81. <BitbucketServerPersonalAccessTokenForm
  82. almSetting={selectedAlmInstance}
  83. onPersonalAccessTokenCreated={props.onPersonalAccessTokenCreated}
  84. resetPat={resetPat}
  85. />
  86. ) : (
  87. <BitbucketImportRepositoryForm
  88. onSearch={props.onSearch}
  89. projectRepositories={projectRepositories}
  90. projects={projects}
  91. searchResults={searchResults}
  92. searching={searching}
  93. onImportRepository={props.onImportRepository}
  94. />
  95. ))}
  96. </Spinner>
  97. </PageContentFontWrapper>
  98. );
  99. }