@backstage/plugin-scaffolder 1.30.0-next.1 → 1.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +104 -0
- package/dist/alpha/components/TemplateEditorPage/CustomFieldExplorer.esm.js +98 -84
- package/dist/alpha/components/TemplateEditorPage/CustomFieldExplorer.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.esm.js +119 -102
- package/dist/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/CustomFieldsPage.esm.js +13 -10
- package/dist/alpha/components/TemplateEditorPage/CustomFieldsPage.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/DirectoryEditorContext.esm.js +4 -3
- package/dist/alpha/components/TemplateEditorPage/DirectoryEditorContext.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/DryRunContext.esm.js +3 -2
- package/dist/alpha/components/TemplateEditorPage/DryRunContext.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.esm.js +22 -15
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.esm.js +49 -44
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.esm.js +7 -2
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.esm.js +79 -57
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/IconLink.esm.js +5 -2
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/IconLink.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/TaskPageLinks.esm.js +6 -6
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/TaskPageLinks.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.esm.js +40 -36
- package/dist/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditor.esm.js +24 -17
- package/dist/alpha/components/TemplateEditorPage/TemplateEditor.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorBrowser.esm.js +50 -42
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorBrowser.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorForm.esm.js +5 -4
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorForm.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorIntro.esm.js +87 -70
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorIntro.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorLayout.esm.js +7 -7
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorLayout.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorPage.esm.js +20 -17
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorPage.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorTextArea.esm.js +52 -45
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorTextArea.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbar.esm.js +76 -60
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbar.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbarFileMenu.esm.js +42 -36
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbarFileMenu.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbarTemplatesMenu.esm.js +42 -38
- package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbarTemplatesMenu.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateFormPage.esm.js +23 -19
- package/dist/alpha/components/TemplateEditorPage/TemplateFormPage.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateFormPreviewer.esm.js +39 -31
- package/dist/alpha/components/TemplateEditorPage/TemplateFormPreviewer.esm.js.map +1 -1
- package/dist/alpha/components/TemplateEditorPage/TemplateIntroPage.esm.js +14 -10
- package/dist/alpha/components/TemplateEditorPage/TemplateIntroPage.esm.js.map +1 -1
- package/dist/alpha/components/TemplateListPage/RegisterExistingButton.esm.js +6 -6
- package/dist/alpha/components/TemplateListPage/RegisterExistingButton.esm.js.map +1 -1
- package/dist/alpha/components/TemplateListPage/TemplateListPage.esm.js +54 -34
- package/dist/alpha/components/TemplateListPage/TemplateListPage.esm.js.map +1 -1
- package/dist/alpha/components/TemplateWizardPage/TemplateWizardPage.esm.js +29 -24
- package/dist/alpha/components/TemplateWizardPage/TemplateWizardPage.esm.js.map +1 -1
- package/dist/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.esm.js +40 -33
- package/dist/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.esm.js.map +1 -1
- package/dist/alpha/extensions.esm.js +2 -2
- package/dist/alpha/extensions.esm.js.map +1 -1
- package/dist/alpha/fields/RepoUrlPicker.esm.js +1 -1
- package/dist/alpha.d.ts +13 -13
- package/dist/components/ActionsPage/ActionsPage.esm.js +120 -167
- package/dist/components/ActionsPage/ActionsPage.esm.js.map +1 -1
- package/dist/components/FileBrowser/FileBrowser.esm.js +10 -9
- package/dist/components/FileBrowser/FileBrowser.esm.js.map +1 -1
- package/dist/components/ListTasksPage/ListTasksPage.esm.js +80 -70
- package/dist/components/ListTasksPage/ListTasksPage.esm.js.map +1 -1
- package/dist/components/ListTasksPage/OwnerListPicker.esm.js +29 -23
- package/dist/components/ListTasksPage/OwnerListPicker.esm.js.map +1 -1
- package/dist/components/ListTasksPage/columns/CreatedAtColumn.esm.js +2 -2
- package/dist/components/ListTasksPage/columns/CreatedAtColumn.esm.js.map +1 -1
- package/dist/components/ListTasksPage/columns/OwnerEntityColumn.esm.js +3 -3
- package/dist/components/ListTasksPage/columns/OwnerEntityColumn.esm.js.map +1 -1
- package/dist/components/ListTasksPage/columns/TaskStatusColumn.esm.js +4 -4
- package/dist/components/ListTasksPage/columns/TaskStatusColumn.esm.js.map +1 -1
- package/dist/components/ListTasksPage/columns/TemplateTitleColumn.esm.js +2 -2
- package/dist/components/ListTasksPage/columns/TemplateTitleColumn.esm.js.map +1 -1
- package/dist/components/OngoingTask/ContextMenu.esm.js +80 -58
- package/dist/components/OngoingTask/ContextMenu.esm.js.map +1 -1
- package/dist/components/OngoingTask/OngoingTask.esm.js +95 -76
- package/dist/components/OngoingTask/OngoingTask.esm.js.map +1 -1
- package/dist/components/RenderSchema/RenderSchema.esm.js +379 -0
- package/dist/components/RenderSchema/RenderSchema.esm.js.map +1 -0
- package/dist/components/Router/Router.esm.js +105 -94
- package/dist/components/Router/Router.esm.js.map +1 -1
- package/dist/components/ScaffolderUsageExamplesTable/ScaffolderUsageExamplesTable.esm.js +28 -0
- package/dist/components/ScaffolderUsageExamplesTable/ScaffolderUsageExamplesTable.esm.js.map +1 -0
- package/dist/components/TemplateTypePicker/TemplateTypePicker.esm.js +42 -39
- package/dist/components/TemplateTypePicker/TemplateTypePicker.esm.js.map +1 -1
- package/dist/components/fields/EntityNamePicker/EntityNamePicker.esm.js +2 -2
- package/dist/components/fields/EntityNamePicker/EntityNamePicker.esm.js.map +1 -1
- package/dist/components/fields/EntityPicker/EntityPicker.esm.js +41 -40
- package/dist/components/fields/EntityPicker/EntityPicker.esm.js.map +1 -1
- package/dist/components/fields/EntityTagsPicker/EntityTagsPicker.esm.js +5 -4
- package/dist/components/fields/EntityTagsPicker/EntityTagsPicker.esm.js.map +1 -1
- package/dist/components/fields/MultiEntityPicker/MultiEntityPicker.esm.js +45 -44
- package/dist/components/fields/MultiEntityPicker/MultiEntityPicker.esm.js.map +1 -1
- package/dist/components/fields/MyGroupsPicker/MyGroupsPicker.esm.js +36 -35
- package/dist/components/fields/MyGroupsPicker/MyGroupsPicker.esm.js.map +1 -1
- package/dist/components/fields/OwnedEntityPicker/OwnedEntityPicker.esm.js +4 -4
- package/dist/components/fields/OwnedEntityPicker/OwnedEntityPicker.esm.js.map +1 -1
- package/dist/components/fields/OwnerPicker/OwnerPicker.esm.js +2 -2
- package/dist/components/fields/OwnerPicker/OwnerPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoBranchPicker/BitbucketRepoBranchPicker.esm.js +26 -23
- package/dist/components/fields/RepoBranchPicker/BitbucketRepoBranchPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoBranchPicker/DefaultRepoBranchPicker.esm.js +17 -15
- package/dist/components/fields/RepoBranchPicker/DefaultRepoBranchPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoBranchPicker/GitHubRepoBranchPicker.esm.js +26 -23
- package/dist/components/fields/RepoBranchPicker/GitHubRepoBranchPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoBranchPicker/RepoBranchPicker.esm.js +13 -5
- package/dist/components/fields/RepoBranchPicker/RepoBranchPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/AzureRepoPicker.esm.js +62 -53
- package/dist/components/fields/RepoUrlPicker/AzureRepoPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/BitbucketRepoPicker.esm.js +85 -77
- package/dist/components/fields/RepoUrlPicker/BitbucketRepoPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/GerritRepoPicker.esm.js +28 -25
- package/dist/components/fields/RepoUrlPicker/GerritRepoPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/GiteaRepoPicker.esm.js +33 -30
- package/dist/components/fields/RepoUrlPicker/GiteaRepoPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/GithubRepoPicker.esm.js +37 -34
- package/dist/components/fields/RepoUrlPicker/GithubRepoPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/GitlabRepoPicker.esm.js +41 -37
- package/dist/components/fields/RepoUrlPicker/GitlabRepoPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/RepoUrlPicker.esm.js +98 -83
- package/dist/components/fields/RepoUrlPicker/RepoUrlPicker.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/RepoUrlPickerHost.esm.js +22 -19
- package/dist/components/fields/RepoUrlPicker/RepoUrlPickerHost.esm.js.map +1 -1
- package/dist/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.esm.js +42 -39
- package/dist/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.esm.js.map +1 -1
- package/dist/components/fields/SecretInput/SecretInput.esm.js +5 -5
- package/dist/components/fields/SecretInput/SecretInput.esm.js.map +1 -1
- package/dist/components/fields/VirtualizedListbox.esm.js +29 -26
- package/dist/components/fields/VirtualizedListbox.esm.js.map +1 -1
- package/dist/index.d.ts +17 -16
- package/dist/translation.esm.js +12 -10
- package/dist/translation.esm.js.map +1 -1
- package/package.json +25 -25
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
1
2
|
import { useApi } from '@backstage/core-plugin-api';
|
|
2
3
|
import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';
|
|
3
4
|
import FormControl from '@material-ui/core/FormControl';
|
|
4
5
|
import FormHelperText from '@material-ui/core/FormHelperText';
|
|
5
6
|
import TextField from '@material-ui/core/TextField';
|
|
6
7
|
import Autocomplete from '@material-ui/lab/Autocomplete';
|
|
7
|
-
import
|
|
8
|
+
import { useState, useCallback } from 'react';
|
|
8
9
|
import useDebounce from 'react-use/esm/useDebounce';
|
|
9
10
|
|
|
10
11
|
const GitHubRepoBranchPicker = ({
|
|
@@ -35,36 +36,38 @@ const GitHubRepoBranchPicker = ({
|
|
|
35
36
|
});
|
|
36
37
|
}, [host, owner, repository, accessToken, scaffolderApi]);
|
|
37
38
|
useDebounce(updateAvailableBranches, 500, [updateAvailableBranches]);
|
|
38
|
-
return /* @__PURE__ */
|
|
39
|
+
return /* @__PURE__ */ jsxs(
|
|
39
40
|
FormControl,
|
|
40
41
|
{
|
|
41
42
|
margin: "normal",
|
|
42
43
|
required,
|
|
43
|
-
error: rawErrors?.length > 0 && !branch
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
{
|
|
48
|
-
value: branch,
|
|
49
|
-
onChange: (_, newValue) => {
|
|
50
|
-
onChange({ branch: newValue || "" });
|
|
51
|
-
},
|
|
52
|
-
disabled: isDisabled,
|
|
53
|
-
options: availableBranches,
|
|
54
|
-
renderInput: (params) => /* @__PURE__ */ React.createElement(
|
|
55
|
-
TextField,
|
|
44
|
+
error: rawErrors?.length > 0 && !branch,
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ jsx(
|
|
47
|
+
Autocomplete,
|
|
56
48
|
{
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
value: branch,
|
|
50
|
+
onChange: (_, newValue) => {
|
|
51
|
+
onChange({ branch: newValue || "" });
|
|
52
|
+
},
|
|
59
53
|
disabled: isDisabled,
|
|
60
|
-
|
|
54
|
+
options: availableBranches,
|
|
55
|
+
renderInput: (params) => /* @__PURE__ */ jsx(
|
|
56
|
+
TextField,
|
|
57
|
+
{
|
|
58
|
+
...params,
|
|
59
|
+
label: "Branch",
|
|
60
|
+
disabled: isDisabled,
|
|
61
|
+
required
|
|
62
|
+
}
|
|
63
|
+
),
|
|
64
|
+
freeSolo: true,
|
|
65
|
+
autoSelect: true
|
|
61
66
|
}
|
|
62
67
|
),
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
),
|
|
67
|
-
/* @__PURE__ */ React.createElement(FormHelperText, null, "The branch of the repository")
|
|
68
|
+
/* @__PURE__ */ jsx(FormHelperText, { children: "The branch of the repository" })
|
|
69
|
+
]
|
|
70
|
+
}
|
|
68
71
|
);
|
|
69
72
|
};
|
|
70
73
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitHubRepoBranchPicker.esm.js","sources":["../../../../src/components/fields/RepoBranchPicker/GitHubRepoBranchPicker.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport
|
|
1
|
+
{"version":3,"file":"GitHubRepoBranchPicker.esm.js","sources":["../../../../src/components/fields/RepoBranchPicker/GitHubRepoBranchPicker.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { useCallback, useState } from 'react';\nimport useDebounce from 'react-use/esm/useDebounce';\nimport { BaseRepoBranchPickerProps } from './types';\n\n/**\n * The underlying component that is rendered in the form for the `GitHubRepoBranchPicker`\n * field extension.\n *\n * @public\n *\n */\nexport const GitHubRepoBranchPicker = ({\n onChange,\n state,\n rawErrors,\n accessToken,\n isDisabled,\n required,\n}: BaseRepoBranchPickerProps<{\n accessToken?: string;\n}>) => {\n const { host, owner, repository, branch } = state;\n\n const [availableBranches, setAvailableBranches] = useState<string[]>([]);\n\n const scaffolderApi = useApi(scaffolderApiRef);\n\n const updateAvailableBranches = useCallback(() => {\n if (\n !scaffolderApi.autocomplete ||\n !owner ||\n !repository ||\n !accessToken ||\n !host\n ) {\n setAvailableBranches([]);\n return;\n }\n\n scaffolderApi\n .autocomplete({\n token: accessToken,\n resource: 'branches',\n context: { host, owner, repository },\n provider: 'github',\n })\n .then(({ results }) => {\n setAvailableBranches(results.map(r => r.id));\n })\n .catch(() => {\n setAvailableBranches([]);\n });\n }, [host, owner, repository, accessToken, scaffolderApi]);\n\n useDebounce(updateAvailableBranches, 500, [updateAvailableBranches]);\n\n return (\n <FormControl\n margin=\"normal\"\n required={required}\n error={rawErrors?.length > 0 && !branch}\n >\n <Autocomplete\n value={branch}\n onChange={(_, newValue) => {\n onChange({ branch: newValue || '' });\n }}\n disabled={isDisabled}\n options={availableBranches}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Branch\"\n disabled={isDisabled}\n required={required}\n />\n )}\n freeSolo\n autoSelect\n />\n <FormHelperText>The branch of the repository</FormHelperText>\n </FormControl>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAiCO,MAAM,yBAAyB,CAAC;AAAA,EACrC,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAEO,KAAA;AACL,EAAA,MAAM,EAAE,IAAA,EAAM,KAAO,EAAA,UAAA,EAAY,QAAW,GAAA,KAAA;AAE5C,EAAA,MAAM,CAAC,iBAAmB,EAAA,oBAAoB,CAAI,GAAA,QAAA,CAAmB,EAAE,CAAA;AAEvE,EAAM,MAAA,aAAA,GAAgB,OAAO,gBAAgB,CAAA;AAE7C,EAAM,MAAA,uBAAA,GAA0B,YAAY,MAAM;AAChD,IACE,IAAA,CAAC,aAAc,CAAA,YAAA,IACf,CAAC,KAAA,IACD,CAAC,UACD,IAAA,CAAC,WACD,IAAA,CAAC,IACD,EAAA;AACA,MAAA,oBAAA,CAAqB,EAAE,CAAA;AACvB,MAAA;AAAA;AAGF,IAAA,aAAA,CACG,YAAa,CAAA;AAAA,MACZ,KAAO,EAAA,WAAA;AAAA,MACP,QAAU,EAAA,UAAA;AAAA,MACV,OAAS,EAAA,EAAE,IAAM,EAAA,KAAA,EAAO,UAAW,EAAA;AAAA,MACnC,QAAU,EAAA;AAAA,KACX,CACA,CAAA,IAAA,CAAK,CAAC,EAAE,SAAc,KAAA;AACrB,MAAA,oBAAA,CAAqB,OAAQ,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,KAC5C,CACA,CAAA,KAAA,CAAM,MAAM;AACX,MAAA,oBAAA,CAAqB,EAAE,CAAA;AAAA,KACxB,CAAA;AAAA,KACF,CAAC,IAAA,EAAM,OAAO,UAAY,EAAA,WAAA,EAAa,aAAa,CAAC,CAAA;AAExD,EAAA,WAAA,CAAY,uBAAyB,EAAA,GAAA,EAAK,CAAC,uBAAuB,CAAC,CAAA;AAEnE,EACE,uBAAA,IAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,QAAA;AAAA,MACP,QAAA;AAAA,MACA,KAAO,EAAA,SAAA,EAAW,MAAS,GAAA,CAAA,IAAK,CAAC,MAAA;AAAA,MAEjC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,KAAO,EAAA,MAAA;AAAA,YACP,QAAA,EAAU,CAAC,CAAA,EAAG,QAAa,KAAA;AACzB,cAAA,QAAA,CAAS,EAAE,MAAA,EAAQ,QAAY,IAAA,EAAA,EAAI,CAAA;AAAA,aACrC;AAAA,YACA,QAAU,EAAA,UAAA;AAAA,YACV,OAAS,EAAA,iBAAA;AAAA,YACT,aAAa,CACX,MAAA,qBAAA,GAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACE,GAAG,MAAA;AAAA,gBACJ,KAAM,EAAA,QAAA;AAAA,gBACN,QAAU,EAAA,UAAA;AAAA,gBACV;AAAA;AAAA,aACF;AAAA,YAEF,QAAQ,EAAA,IAAA;AAAA,YACR,UAAU,EAAA;AAAA;AAAA,SACZ;AAAA,wBACA,GAAA,CAAC,kBAAe,QAA4B,EAAA,8BAAA,EAAA;AAAA;AAAA;AAAA,GAC9C;AAEJ;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
1
2
|
import { useApi } from '@backstage/core-plugin-api';
|
|
2
3
|
import { scmIntegrationsApiRef, scmAuthApiRef } from '@backstage/integration-react';
|
|
3
|
-
import
|
|
4
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
4
5
|
import useDebounce from 'react-use/esm/useDebounce';
|
|
5
6
|
import { useTemplateSecrets } from '@backstage/plugin-scaffolder-react';
|
|
6
7
|
import Box from '@material-ui/core/Box';
|
|
@@ -76,7 +77,7 @@ const RepoBranchPicker = (props) => {
|
|
|
76
77
|
const renderRepoBranchPicker = () => {
|
|
77
78
|
switch (hostType) {
|
|
78
79
|
case "bitbucket":
|
|
79
|
-
return /* @__PURE__ */
|
|
80
|
+
return /* @__PURE__ */ jsx(
|
|
80
81
|
BitbucketRepoBranchPicker,
|
|
81
82
|
{
|
|
82
83
|
onChange: updateLocalState,
|
|
@@ -88,7 +89,7 @@ const RepoBranchPicker = (props) => {
|
|
|
88
89
|
}
|
|
89
90
|
);
|
|
90
91
|
case "github":
|
|
91
|
-
return /* @__PURE__ */
|
|
92
|
+
return /* @__PURE__ */ jsx(
|
|
92
93
|
GitHubRepoBranchPicker,
|
|
93
94
|
{
|
|
94
95
|
onChange: updateLocalState,
|
|
@@ -100,7 +101,7 @@ const RepoBranchPicker = (props) => {
|
|
|
100
101
|
}
|
|
101
102
|
);
|
|
102
103
|
default:
|
|
103
|
-
return /* @__PURE__ */
|
|
104
|
+
return /* @__PURE__ */ jsx(
|
|
104
105
|
DefaultRepoBranchPicker,
|
|
105
106
|
{
|
|
106
107
|
onChange: updateLocalState,
|
|
@@ -112,7 +113,14 @@ const RepoBranchPicker = (props) => {
|
|
|
112
113
|
);
|
|
113
114
|
}
|
|
114
115
|
};
|
|
115
|
-
return /* @__PURE__ */
|
|
116
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
117
|
+
schema.title && /* @__PURE__ */ jsxs(Box, { my: 1, children: [
|
|
118
|
+
/* @__PURE__ */ jsx(Typography, { variant: "h5", children: schema.title }),
|
|
119
|
+
/* @__PURE__ */ jsx(Divider, {})
|
|
120
|
+
] }),
|
|
121
|
+
schema.description && /* @__PURE__ */ jsx(Typography, { variant: "body1", children: schema.description }),
|
|
122
|
+
renderRepoBranchPicker()
|
|
123
|
+
] });
|
|
116
124
|
};
|
|
117
125
|
|
|
118
126
|
export { RepoBranchPicker };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RepoBranchPicker.esm.js","sources":["../../../../src/components/fields/RepoBranchPicker/RepoBranchPicker.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport {\n scmIntegrationsApiRef,\n scmAuthApiRef,\n} from '@backstage/integration-react';\nimport
|
|
1
|
+
{"version":3,"file":"RepoBranchPicker.esm.js","sources":["../../../../src/components/fields/RepoBranchPicker/RepoBranchPicker.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport {\n scmIntegrationsApiRef,\n scmAuthApiRef,\n} from '@backstage/integration-react';\nimport { useEffect, useState, useCallback } from 'react';\nimport useDebounce from 'react-use/esm/useDebounce';\nimport { useTemplateSecrets } from '@backstage/plugin-scaffolder-react';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport Typography from '@material-ui/core/Typography';\n\nimport { RepoBranchPickerProps } from './schema';\nimport { RepoBranchPickerState } from './types';\nimport { BitbucketRepoBranchPicker } from './BitbucketRepoBranchPicker';\nimport { DefaultRepoBranchPicker } from './DefaultRepoBranchPicker';\nimport { GitHubRepoBranchPicker } from './GitHubRepoBranchPicker';\n\n/**\n * The underlying component that is rendered in the form for the `RepoBranchPicker`\n * field extension.\n *\n * @public\n */\nexport const RepoBranchPicker = (props: RepoBranchPickerProps) => {\n const {\n uiSchema,\n onChange,\n rawErrors,\n formData,\n schema,\n formContext,\n required,\n } = props;\n const {\n formData: { repoUrl },\n } = formContext;\n\n const [state, setState] = useState<RepoBranchPickerState>({\n branch: formData || '',\n });\n const { host, branch } = state;\n\n const integrationApi = useApi(scmIntegrationsApiRef);\n const scmAuthApi = useApi(scmAuthApiRef);\n\n const { secrets, setSecrets } = useTemplateSecrets();\n\n useDebounce(\n async () => {\n const { requestUserCredentials } = uiSchema?.['ui:options'] ?? {};\n\n if (!requestUserCredentials || !host) {\n return;\n }\n\n // don't show login prompt if secret value is already in state\n if (secrets[requestUserCredentials.secretsKey]) {\n return;\n }\n\n // user has requested that we use the users credentials\n // so lets grab them using the scmAuthApi and pass through\n // any additional scopes from the ui:options\n const { token } = await scmAuthApi.getCredentials({\n url: `https://${host}`,\n additionalScope: {\n repoWrite: true,\n customScopes: requestUserCredentials.additionalScopes,\n },\n });\n\n // set the secret using the key provided in the ui:options for use\n // in the templating the manifest with ${{ secrets[secretsKey] }}\n setSecrets({ [requestUserCredentials.secretsKey]: token });\n },\n 500,\n [host, uiSchema],\n );\n\n useEffect(() => {\n if (repoUrl) {\n const url = new URL(`https://${repoUrl}`);\n\n setState(prevState => ({\n ...prevState,\n host: url.host,\n workspace: url.searchParams.get('workspace') || '',\n repository: url.searchParams.get('repo') || '',\n owner: url.searchParams.get('owner') || '',\n }));\n }\n }, [repoUrl]);\n\n useEffect(() => {\n onChange(branch);\n }, [branch, onChange]);\n\n const updateLocalState = useCallback(\n (newState: RepoBranchPickerState) => {\n setState(prevState => ({ ...prevState, ...newState }));\n },\n [setState],\n );\n\n const hostType = (host && integrationApi.byHost(host)?.type) ?? null;\n\n const renderRepoBranchPicker = () => {\n switch (hostType) {\n case 'bitbucket':\n return (\n <BitbucketRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n accessToken={\n uiSchema?.['ui:options']?.requestUserCredentials?.secretsKey &&\n secrets[uiSchema['ui:options'].requestUserCredentials.secretsKey]\n }\n isDisabled={uiSchema?.['ui:disabled'] ?? false}\n required={required}\n />\n );\n case 'github':\n return (\n <GitHubRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n accessToken={\n uiSchema?.['ui:options']?.requestUserCredentials?.secretsKey &&\n secrets[uiSchema['ui:options'].requestUserCredentials.secretsKey]\n }\n isDisabled={uiSchema?.['ui:disabled'] ?? false}\n required={required}\n />\n );\n default:\n return (\n <DefaultRepoBranchPicker\n onChange={updateLocalState}\n state={state}\n rawErrors={rawErrors}\n isDisabled={uiSchema?.['ui:disabled'] ?? false}\n required={required}\n />\n );\n }\n };\n\n return (\n <>\n {schema.title && (\n <Box my={1}>\n <Typography variant=\"h5\">{schema.title}</Typography>\n <Divider />\n </Box>\n )}\n {schema.description && (\n <Typography variant=\"body1\">{schema.description}</Typography>\n )}\n {renderRepoBranchPicker()}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import FormControl from '@material-ui/core/FormControl';
|
|
3
3
|
import FormHelperText from '@material-ui/core/FormHelperText';
|
|
4
4
|
import TextField from '@material-ui/core/TextField';
|
|
@@ -19,63 +19,72 @@ const AzureRepoPicker = (props) => {
|
|
|
19
19
|
const organizationItems = allowedOrganizations ? allowedOrganizations.map((i) => ({ label: i, value: i })) : [{ label: "Loading...", value: "loading" }];
|
|
20
20
|
const projectItems = allowedProject ? allowedProject.map((i) => ({ label: i, value: i })) : [{ label: "Loading...", value: "loading" }];
|
|
21
21
|
const { organization, project } = state;
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
margin: "normal",
|
|
26
|
-
required: true,
|
|
27
|
-
error: rawErrors?.length > 0 && !organization
|
|
28
|
-
},
|
|
29
|
-
allowedOrganizations?.length ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
30
|
-
Select,
|
|
22
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
23
|
+
/* @__PURE__ */ jsx(
|
|
24
|
+
FormControl,
|
|
31
25
|
{
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
margin: "normal",
|
|
27
|
+
required: true,
|
|
28
|
+
error: rawErrors?.length > 0 && !organization,
|
|
29
|
+
children: allowedOrganizations?.length ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
30
|
+
/* @__PURE__ */ jsx(
|
|
31
|
+
Select,
|
|
32
|
+
{
|
|
33
|
+
native: true,
|
|
34
|
+
label: t("fields.azureRepoPicker.organization.title"),
|
|
35
|
+
onChange: (s) => onChange({ organization: String(Array.isArray(s) ? s[0] : s) }),
|
|
36
|
+
disabled: isDisabled || allowedOrganizations.length === 1,
|
|
37
|
+
selected: organization,
|
|
38
|
+
items: organizationItems
|
|
39
|
+
}
|
|
40
|
+
),
|
|
41
|
+
/* @__PURE__ */ jsx(FormHelperText, { children: t("fields.azureRepoPicker.organization.description") })
|
|
42
|
+
] }) : /* @__PURE__ */ jsx(
|
|
43
|
+
TextField,
|
|
44
|
+
{
|
|
45
|
+
id: "orgInput",
|
|
46
|
+
label: t("fields.azureRepoPicker.organization.title"),
|
|
47
|
+
onChange: (e) => onChange({ organization: e.target.value }),
|
|
48
|
+
helperText: t("fields.azureRepoPicker.organization.description"),
|
|
49
|
+
disabled: isDisabled,
|
|
50
|
+
value: organization
|
|
51
|
+
}
|
|
52
|
+
)
|
|
38
53
|
}
|
|
39
|
-
),
|
|
40
|
-
|
|
54
|
+
),
|
|
55
|
+
/* @__PURE__ */ jsx(
|
|
56
|
+
FormControl,
|
|
41
57
|
{
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
58
|
+
margin: "normal",
|
|
59
|
+
required: true,
|
|
60
|
+
error: rawErrors?.length > 0 && !project,
|
|
61
|
+
children: allowedProject?.length ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
Select,
|
|
64
|
+
{
|
|
65
|
+
native: true,
|
|
66
|
+
label: t("fields.azureRepoPicker.project.title"),
|
|
67
|
+
onChange: (s) => onChange({ project: String(Array.isArray(s) ? s[0] : s) }),
|
|
68
|
+
disabled: isDisabled || allowedProject.length === 1,
|
|
69
|
+
selected: project,
|
|
70
|
+
items: projectItems
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
/* @__PURE__ */ jsx(FormHelperText, { children: t("fields.azureRepoPicker.project.description") })
|
|
74
|
+
] }) : /* @__PURE__ */ jsx(
|
|
75
|
+
TextField,
|
|
76
|
+
{
|
|
77
|
+
id: "projectInput",
|
|
78
|
+
label: t("fields.azureRepoPicker.project.title"),
|
|
79
|
+
onChange: (e) => onChange({ project: e.target.value }),
|
|
80
|
+
value: project,
|
|
81
|
+
disabled: isDisabled,
|
|
82
|
+
helperText: t("fields.azureRepoPicker.project.description")
|
|
83
|
+
}
|
|
84
|
+
)
|
|
48
85
|
}
|
|
49
86
|
)
|
|
50
|
-
)
|
|
51
|
-
FormControl,
|
|
52
|
-
{
|
|
53
|
-
margin: "normal",
|
|
54
|
-
required: true,
|
|
55
|
-
error: rawErrors?.length > 0 && !project
|
|
56
|
-
},
|
|
57
|
-
allowedProject?.length ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
58
|
-
Select,
|
|
59
|
-
{
|
|
60
|
-
native: true,
|
|
61
|
-
label: t("fields.azureRepoPicker.project.title"),
|
|
62
|
-
onChange: (s) => onChange({ project: String(Array.isArray(s) ? s[0] : s) }),
|
|
63
|
-
disabled: isDisabled || allowedProject.length === 1,
|
|
64
|
-
selected: project,
|
|
65
|
-
items: projectItems
|
|
66
|
-
}
|
|
67
|
-
), /* @__PURE__ */ React.createElement(FormHelperText, null, t("fields.azureRepoPicker.project.description"))) : /* @__PURE__ */ React.createElement(
|
|
68
|
-
TextField,
|
|
69
|
-
{
|
|
70
|
-
id: "projectInput",
|
|
71
|
-
label: t("fields.azureRepoPicker.project.title"),
|
|
72
|
-
onChange: (e) => onChange({ project: e.target.value }),
|
|
73
|
-
value: project,
|
|
74
|
-
disabled: isDisabled,
|
|
75
|
-
helperText: t("fields.azureRepoPicker.project.description")
|
|
76
|
-
}
|
|
77
|
-
)
|
|
78
|
-
));
|
|
87
|
+
] });
|
|
79
88
|
};
|
|
80
89
|
|
|
81
90
|
export { AzureRepoPicker };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AzureRepoPicker.esm.js","sources":["../../../../src/components/fields/RepoUrlPicker/AzureRepoPicker.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport
|
|
1
|
+
{"version":3,"file":"AzureRepoPicker.esm.js","sources":["../../../../src/components/fields/RepoUrlPicker/AzureRepoPicker.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport TextField from '@material-ui/core/TextField';\nimport { BaseRepoUrlPickerProps } from './types';\nimport { Select, SelectItem } from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../../translation';\n\nexport const AzureRepoPicker = (\n props: BaseRepoUrlPickerProps<{\n allowedOrganizations?: string[];\n allowedProject?: string[];\n }>,\n) => {\n const {\n allowedOrganizations = [],\n allowedProject = [],\n rawErrors,\n state,\n onChange,\n isDisabled,\n } = props;\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const organizationItems: SelectItem[] = allowedOrganizations\n ? allowedOrganizations.map(i => ({ label: i, value: i }))\n : [{ label: 'Loading...', value: 'loading' }];\n\n const projectItems: SelectItem[] = allowedProject\n ? allowedProject.map(i => ({ label: i, value: i }))\n : [{ label: 'Loading...', value: 'loading' }];\n\n const { organization, project } = state;\n\n return (\n <>\n <FormControl\n margin=\"normal\"\n required\n error={rawErrors?.length > 0 && !organization}\n >\n {allowedOrganizations?.length ? (\n <>\n <Select\n native\n label={t('fields.azureRepoPicker.organization.title')}\n onChange={s =>\n onChange({ organization: String(Array.isArray(s) ? s[0] : s) })\n }\n disabled={isDisabled || allowedOrganizations.length === 1}\n selected={organization}\n items={organizationItems}\n />\n <FormHelperText>\n {t('fields.azureRepoPicker.organization.description')}\n </FormHelperText>\n </>\n ) : (\n <TextField\n id=\"orgInput\"\n label={t('fields.azureRepoPicker.organization.title')}\n onChange={e => onChange({ organization: e.target.value })}\n helperText={t('fields.azureRepoPicker.organization.description')}\n disabled={isDisabled}\n value={organization}\n />\n )}\n </FormControl>\n <FormControl\n margin=\"normal\"\n required\n error={rawErrors?.length > 0 && !project}\n >\n {allowedProject?.length ? (\n <>\n <Select\n native\n label={t('fields.azureRepoPicker.project.title')}\n onChange={s =>\n onChange({ project: String(Array.isArray(s) ? s[0] : s) })\n }\n disabled={isDisabled || allowedProject.length === 1}\n selected={project}\n items={projectItems}\n />\n <FormHelperText>\n {t('fields.azureRepoPicker.project.description')}\n </FormHelperText>\n </>\n ) : (\n <TextField\n id=\"projectInput\"\n label={t('fields.azureRepoPicker.project.title')}\n onChange={e => onChange({ project: e.target.value })}\n value={project}\n disabled={isDisabled}\n helperText={t('fields.azureRepoPicker.project.description')}\n />\n )}\n </FormControl>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
1
2
|
import { Select } from '@backstage/core-components';
|
|
2
3
|
import { useApi } from '@backstage/core-plugin-api';
|
|
3
4
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
@@ -6,7 +7,7 @@ import FormControl from '@material-ui/core/FormControl';
|
|
|
6
7
|
import FormHelperText from '@material-ui/core/FormHelperText';
|
|
7
8
|
import TextField from '@material-ui/core/TextField';
|
|
8
9
|
import Autocomplete from '@material-ui/lab/Autocomplete';
|
|
9
|
-
import
|
|
10
|
+
import { useEffect, useState, useCallback } from 'react';
|
|
10
11
|
import useDebounce from 'react-use/esm/useDebounce';
|
|
11
12
|
import { scaffolderTranslationRef } from '../../../translation.esm.js';
|
|
12
13
|
|
|
@@ -86,87 +87,94 @@ const BitbucketRepoPicker = (props) => {
|
|
|
86
87
|
});
|
|
87
88
|
}, [scaffolderApi, accessToken, host, workspace, project, onChange]);
|
|
88
89
|
useDebounce(updateAvailableRepositories, 500, [updateAvailableRepositories]);
|
|
89
|
-
return /* @__PURE__ */
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
margin: "normal",
|
|
93
|
-
required: true,
|
|
94
|
-
error: rawErrors?.length > 0 && !workspace
|
|
95
|
-
},
|
|
96
|
-
allowedOwners?.length ? /* @__PURE__ */ React.createElement(
|
|
97
|
-
Select,
|
|
90
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
91
|
+
host === "bitbucket.org" && /* @__PURE__ */ jsxs(
|
|
92
|
+
FormControl,
|
|
98
93
|
{
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
94
|
+
margin: "normal",
|
|
95
|
+
required: true,
|
|
96
|
+
error: rawErrors?.length > 0 && !workspace,
|
|
97
|
+
children: [
|
|
98
|
+
allowedOwners?.length ? /* @__PURE__ */ jsx(
|
|
99
|
+
Select,
|
|
100
|
+
{
|
|
101
|
+
native: true,
|
|
102
|
+
label: t("fields.bitbucketRepoPicker.workspaces.title"),
|
|
103
|
+
onChange: (s) => onChange({ workspace: String(Array.isArray(s) ? s[0] : s) }),
|
|
104
|
+
disabled: isDisabled || allowedOwners.length === 1,
|
|
105
|
+
selected: workspace,
|
|
106
|
+
items: ownerItems
|
|
107
|
+
}
|
|
108
|
+
) : /* @__PURE__ */ jsx(
|
|
109
|
+
Autocomplete,
|
|
110
|
+
{
|
|
111
|
+
value: workspace,
|
|
112
|
+
onChange: (_, newValue) => {
|
|
113
|
+
onChange({ workspace: newValue || "" });
|
|
114
|
+
},
|
|
115
|
+
options: availableWorkspaces,
|
|
116
|
+
renderInput: (params) => /* @__PURE__ */ jsx(
|
|
117
|
+
TextField,
|
|
118
|
+
{
|
|
119
|
+
...params,
|
|
120
|
+
label: t("fields.bitbucketRepoPicker.workspaces.inputTitle"),
|
|
121
|
+
disabled: isDisabled,
|
|
122
|
+
required: true
|
|
123
|
+
}
|
|
124
|
+
),
|
|
125
|
+
disabled: isDisabled,
|
|
126
|
+
freeSolo: true,
|
|
127
|
+
autoSelect: true
|
|
128
|
+
}
|
|
129
|
+
),
|
|
130
|
+
/* @__PURE__ */ jsx(FormHelperText, { children: t("fields.bitbucketRepoPicker.workspaces.description") })
|
|
131
|
+
]
|
|
126
132
|
}
|
|
127
133
|
),
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
-
|
|
130
|
-
FormControl,
|
|
131
|
-
{
|
|
132
|
-
margin: "normal",
|
|
133
|
-
required: true,
|
|
134
|
-
error: rawErrors?.length > 0 && !project
|
|
135
|
-
},
|
|
136
|
-
allowedProjects?.length ? /* @__PURE__ */ React.createElement(
|
|
137
|
-
Select,
|
|
134
|
+
/* @__PURE__ */ jsxs(
|
|
135
|
+
FormControl,
|
|
138
136
|
{
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
137
|
+
margin: "normal",
|
|
138
|
+
required: true,
|
|
139
|
+
error: rawErrors?.length > 0 && !project,
|
|
140
|
+
children: [
|
|
141
|
+
allowedProjects?.length ? /* @__PURE__ */ jsx(
|
|
142
|
+
Select,
|
|
143
|
+
{
|
|
144
|
+
native: true,
|
|
145
|
+
label: t("fields.bitbucketRepoPicker.project.title"),
|
|
146
|
+
onChange: (s) => onChange({ project: String(Array.isArray(s) ? s[0] : s) }),
|
|
147
|
+
disabled: isDisabled || allowedProjects.length === 1,
|
|
148
|
+
selected: project,
|
|
149
|
+
items: projectItems
|
|
150
|
+
}
|
|
151
|
+
) : /* @__PURE__ */ jsx(
|
|
152
|
+
Autocomplete,
|
|
153
|
+
{
|
|
154
|
+
value: project,
|
|
155
|
+
onChange: (_, newValue) => {
|
|
156
|
+
onChange({ project: newValue || "" });
|
|
157
|
+
},
|
|
158
|
+
options: availableProjects,
|
|
159
|
+
disabled: isDisabled,
|
|
160
|
+
renderInput: (params) => /* @__PURE__ */ jsx(
|
|
161
|
+
TextField,
|
|
162
|
+
{
|
|
163
|
+
...params,
|
|
164
|
+
label: t("fields.bitbucketRepoPicker.project.inputTitle"),
|
|
165
|
+
disabled: isDisabled,
|
|
166
|
+
required: true
|
|
167
|
+
}
|
|
168
|
+
),
|
|
169
|
+
freeSolo: true,
|
|
170
|
+
autoSelect: true
|
|
171
|
+
}
|
|
172
|
+
),
|
|
173
|
+
/* @__PURE__ */ jsx(FormHelperText, { children: t("fields.bitbucketRepoPicker.project.description") })
|
|
174
|
+
]
|
|
145
175
|
}
|
|
146
|
-
)
|
|
147
|
-
|
|
148
|
-
{
|
|
149
|
-
value: project,
|
|
150
|
-
onChange: (_, newValue) => {
|
|
151
|
-
onChange({ project: newValue || "" });
|
|
152
|
-
},
|
|
153
|
-
options: availableProjects,
|
|
154
|
-
disabled: isDisabled,
|
|
155
|
-
renderInput: (params) => /* @__PURE__ */ React.createElement(
|
|
156
|
-
TextField,
|
|
157
|
-
{
|
|
158
|
-
...params,
|
|
159
|
-
label: t("fields.bitbucketRepoPicker.project.inputTitle"),
|
|
160
|
-
disabled: isDisabled,
|
|
161
|
-
required: true
|
|
162
|
-
}
|
|
163
|
-
),
|
|
164
|
-
freeSolo: true,
|
|
165
|
-
autoSelect: true
|
|
166
|
-
}
|
|
167
|
-
),
|
|
168
|
-
/* @__PURE__ */ React.createElement(FormHelperText, null, t("fields.bitbucketRepoPicker.project.description"))
|
|
169
|
-
));
|
|
176
|
+
)
|
|
177
|
+
] });
|
|
170
178
|
};
|
|
171
179
|
|
|
172
180
|
export { BitbucketRepoPicker };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitbucketRepoPicker.esm.js","sources":["../../../../src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Select, SelectItem } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport useDebounce from 'react-use/esm/useDebounce';\nimport { scaffolderTranslationRef } from '../../../translation';\nimport { BaseRepoUrlPickerProps } from './types';\n\n/**\n * The underlying component that is rendered in the form for the `BitbucketRepoPicker`\n * field extension.\n *\n * @public\n * @param allowedOwners - Allowed workspaces for the Bitbucket cloud repository\n * @param allowedProjects - Allowed projects for the Bitbucket cloud repository\n *\n */\nexport const BitbucketRepoPicker = (\n props: BaseRepoUrlPickerProps<{\n allowedOwners?: string[];\n allowedProjects?: string[];\n accessToken?: string;\n }>,\n) => {\n const {\n allowedOwners = [],\n allowedProjects = [],\n onChange,\n rawErrors,\n state,\n accessToken,\n isDisabled,\n } = props;\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const { host, workspace, project } = state;\n const ownerItems: SelectItem[] = allowedOwners\n ? allowedOwners?.map(i => ({ label: i, value: i }))\n : [];\n const projectItems: SelectItem[] = allowedProjects\n ? allowedProjects?.map(i => ({ label: i, value: i }))\n : [];\n\n useEffect(() => {\n if (host === 'bitbucket.org' && allowedOwners.length) {\n onChange({ workspace: allowedOwners[0] });\n }\n }, [allowedOwners, host, onChange]);\n\n const scaffolderApi = useApi(scaffolderApiRef);\n\n const [availableWorkspaces, setAvailableWorkspaces] = useState<string[]>([]);\n const [availableProjects, setAvailableProjects] = useState<string[]>([]);\n\n // Update available workspaces when client is available\n const updateAvailableWorkspaces = useCallback(() => {\n if (\n !scaffolderApi.autocomplete ||\n !accessToken ||\n host !== 'bitbucket.org'\n ) {\n setAvailableWorkspaces([]);\n return;\n }\n\n scaffolderApi\n .autocomplete({\n token: accessToken,\n resource: 'workspaces',\n provider: 'bitbucket-cloud',\n })\n .then(({ results }) => {\n setAvailableWorkspaces(results.map(r => r.id));\n })\n .catch(() => {\n setAvailableWorkspaces([]);\n });\n }, [scaffolderApi, accessToken, host]);\n\n useDebounce(updateAvailableWorkspaces, 500, [updateAvailableWorkspaces]);\n\n // Update available projects when client is available and workspace changes\n const updateAvailableProjects = useCallback(() => {\n if (\n !scaffolderApi.autocomplete ||\n !accessToken ||\n host !== 'bitbucket.org' ||\n !workspace\n ) {\n setAvailableProjects([]);\n return;\n }\n\n scaffolderApi\n .autocomplete({\n token: accessToken,\n resource: 'projects',\n context: { workspace },\n provider: 'bitbucket-cloud',\n })\n .then(({ results }) => {\n setAvailableProjects(results.map(r => r.id));\n })\n .catch(() => {\n setAvailableProjects([]);\n });\n }, [scaffolderApi, accessToken, host, workspace]);\n\n useDebounce(updateAvailableProjects, 500, [updateAvailableProjects]);\n\n // Update available repositories when client is available and workspace or project changes\n const updateAvailableRepositories = useCallback(() => {\n if (\n !scaffolderApi.autocomplete ||\n !accessToken ||\n host !== 'bitbucket.org' ||\n !workspace ||\n !project\n ) {\n onChange({ availableRepos: [] });\n return;\n }\n\n scaffolderApi\n .autocomplete({\n token: accessToken,\n resource: 'repositories',\n context: { workspace, project },\n provider: 'bitbucket-cloud',\n })\n .then(({ results }) => {\n onChange({\n availableRepos: results.map(r => {\n return { name: r.id };\n }),\n });\n })\n .catch(() => {\n onChange({ availableRepos: [] });\n });\n }, [scaffolderApi, accessToken, host, workspace, project, onChange]);\n\n useDebounce(updateAvailableRepositories, 500, [updateAvailableRepositories]);\n\n return (\n <>\n {host === 'bitbucket.org' && (\n <FormControl\n margin=\"normal\"\n required\n error={rawErrors?.length > 0 && !workspace}\n >\n {allowedOwners?.length ? (\n <Select\n native\n label={t('fields.bitbucketRepoPicker.workspaces.title')}\n onChange={s =>\n onChange({ workspace: String(Array.isArray(s) ? s[0] : s) })\n }\n disabled={isDisabled || allowedOwners.length === 1}\n selected={workspace}\n items={ownerItems}\n />\n ) : (\n <Autocomplete\n value={workspace}\n onChange={(_, newValue) => {\n onChange({ workspace: newValue || '' });\n }}\n options={availableWorkspaces}\n renderInput={params => (\n <TextField\n {...params}\n label={t('fields.bitbucketRepoPicker.workspaces.inputTitle')}\n disabled={isDisabled}\n required\n />\n )}\n disabled={isDisabled}\n freeSolo\n autoSelect\n />\n )}\n <FormHelperText>\n {t('fields.bitbucketRepoPicker.workspaces.description')}\n </FormHelperText>\n </FormControl>\n )}\n <FormControl\n margin=\"normal\"\n required\n error={rawErrors?.length > 0 && !project}\n >\n {allowedProjects?.length ? (\n <Select\n native\n label={t('fields.bitbucketRepoPicker.project.title')}\n onChange={s =>\n onChange({ project: String(Array.isArray(s) ? s[0] : s) })\n }\n disabled={isDisabled || allowedProjects.length === 1}\n selected={project}\n items={projectItems}\n />\n ) : (\n <Autocomplete\n value={project}\n onChange={(_, newValue) => {\n onChange({ project: newValue || '' });\n }}\n options={availableProjects}\n disabled={isDisabled}\n renderInput={params => (\n <TextField\n {...params}\n label={t('fields.bitbucketRepoPicker.project.inputTitle')}\n disabled={isDisabled}\n required\n />\n )}\n freeSolo\n autoSelect\n />\n )}\n <FormHelperText>\n {t('fields.bitbucketRepoPicker.project.description')}\n </FormHelperText>\n </FormControl>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BitbucketRepoPicker.esm.js","sources":["../../../../src/components/fields/RepoUrlPicker/BitbucketRepoPicker.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Select, SelectItem } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { useCallback, useEffect, useState } from 'react';\nimport useDebounce from 'react-use/esm/useDebounce';\nimport { scaffolderTranslationRef } from '../../../translation';\nimport { BaseRepoUrlPickerProps } from './types';\n\n/**\n * The underlying component that is rendered in the form for the `BitbucketRepoPicker`\n * field extension.\n *\n * @public\n * @param allowedOwners - Allowed workspaces for the Bitbucket cloud repository\n * @param allowedProjects - Allowed projects for the Bitbucket cloud repository\n *\n */\nexport const BitbucketRepoPicker = (\n props: BaseRepoUrlPickerProps<{\n allowedOwners?: string[];\n allowedProjects?: string[];\n accessToken?: string;\n }>,\n) => {\n const {\n allowedOwners = [],\n allowedProjects = [],\n onChange,\n rawErrors,\n state,\n accessToken,\n isDisabled,\n } = props;\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const { host, workspace, project } = state;\n const ownerItems: SelectItem[] = allowedOwners\n ? allowedOwners?.map(i => ({ label: i, value: i }))\n : [];\n const projectItems: SelectItem[] = allowedProjects\n ? allowedProjects?.map(i => ({ label: i, value: i }))\n : [];\n\n useEffect(() => {\n if (host === 'bitbucket.org' && allowedOwners.length) {\n onChange({ workspace: allowedOwners[0] });\n }\n }, [allowedOwners, host, onChange]);\n\n const scaffolderApi = useApi(scaffolderApiRef);\n\n const [availableWorkspaces, setAvailableWorkspaces] = useState<string[]>([]);\n const [availableProjects, setAvailableProjects] = useState<string[]>([]);\n\n // Update available workspaces when client is available\n const updateAvailableWorkspaces = useCallback(() => {\n if (\n !scaffolderApi.autocomplete ||\n !accessToken ||\n host !== 'bitbucket.org'\n ) {\n setAvailableWorkspaces([]);\n return;\n }\n\n scaffolderApi\n .autocomplete({\n token: accessToken,\n resource: 'workspaces',\n provider: 'bitbucket-cloud',\n })\n .then(({ results }) => {\n setAvailableWorkspaces(results.map(r => r.id));\n })\n .catch(() => {\n setAvailableWorkspaces([]);\n });\n }, [scaffolderApi, accessToken, host]);\n\n useDebounce(updateAvailableWorkspaces, 500, [updateAvailableWorkspaces]);\n\n // Update available projects when client is available and workspace changes\n const updateAvailableProjects = useCallback(() => {\n if (\n !scaffolderApi.autocomplete ||\n !accessToken ||\n host !== 'bitbucket.org' ||\n !workspace\n ) {\n setAvailableProjects([]);\n return;\n }\n\n scaffolderApi\n .autocomplete({\n token: accessToken,\n resource: 'projects',\n context: { workspace },\n provider: 'bitbucket-cloud',\n })\n .then(({ results }) => {\n setAvailableProjects(results.map(r => r.id));\n })\n .catch(() => {\n setAvailableProjects([]);\n });\n }, [scaffolderApi, accessToken, host, workspace]);\n\n useDebounce(updateAvailableProjects, 500, [updateAvailableProjects]);\n\n // Update available repositories when client is available and workspace or project changes\n const updateAvailableRepositories = useCallback(() => {\n if (\n !scaffolderApi.autocomplete ||\n !accessToken ||\n host !== 'bitbucket.org' ||\n !workspace ||\n !project\n ) {\n onChange({ availableRepos: [] });\n return;\n }\n\n scaffolderApi\n .autocomplete({\n token: accessToken,\n resource: 'repositories',\n context: { workspace, project },\n provider: 'bitbucket-cloud',\n })\n .then(({ results }) => {\n onChange({\n availableRepos: results.map(r => {\n return { name: r.id };\n }),\n });\n })\n .catch(() => {\n onChange({ availableRepos: [] });\n });\n }, [scaffolderApi, accessToken, host, workspace, project, onChange]);\n\n useDebounce(updateAvailableRepositories, 500, [updateAvailableRepositories]);\n\n return (\n <>\n {host === 'bitbucket.org' && (\n <FormControl\n margin=\"normal\"\n required\n error={rawErrors?.length > 0 && !workspace}\n >\n {allowedOwners?.length ? (\n <Select\n native\n label={t('fields.bitbucketRepoPicker.workspaces.title')}\n onChange={s =>\n onChange({ workspace: String(Array.isArray(s) ? s[0] : s) })\n }\n disabled={isDisabled || allowedOwners.length === 1}\n selected={workspace}\n items={ownerItems}\n />\n ) : (\n <Autocomplete\n value={workspace}\n onChange={(_, newValue) => {\n onChange({ workspace: newValue || '' });\n }}\n options={availableWorkspaces}\n renderInput={params => (\n <TextField\n {...params}\n label={t('fields.bitbucketRepoPicker.workspaces.inputTitle')}\n disabled={isDisabled}\n required\n />\n )}\n disabled={isDisabled}\n freeSolo\n autoSelect\n />\n )}\n <FormHelperText>\n {t('fields.bitbucketRepoPicker.workspaces.description')}\n </FormHelperText>\n </FormControl>\n )}\n <FormControl\n margin=\"normal\"\n required\n error={rawErrors?.length > 0 && !project}\n >\n {allowedProjects?.length ? (\n <Select\n native\n label={t('fields.bitbucketRepoPicker.project.title')}\n onChange={s =>\n onChange({ project: String(Array.isArray(s) ? s[0] : s) })\n }\n disabled={isDisabled || allowedProjects.length === 1}\n selected={project}\n items={projectItems}\n />\n ) : (\n <Autocomplete\n value={project}\n onChange={(_, newValue) => {\n onChange({ project: newValue || '' });\n }}\n options={availableProjects}\n disabled={isDisabled}\n renderInput={params => (\n <TextField\n {...params}\n label={t('fields.bitbucketRepoPicker.project.inputTitle')}\n disabled={isDisabled}\n required\n />\n )}\n freeSolo\n autoSelect\n />\n )}\n <FormHelperText>\n {t('fields.bitbucketRepoPicker.project.description')}\n </FormHelperText>\n </FormControl>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|