diff --git a/templates/repo/create.tmpl b/templates/repo/create.tmpl index 8509092894..ea6c5b8489 100644 --- a/templates/repo/create.tmpl +++ b/templates/repo/create.tmpl @@ -42,6 +42,16 @@ {{ctx.Locale.Tr "repo.repo_name_profile_public_hint"}} {{ctx.Locale.Tr "repo.repo_name_profile_private_hint"}} +
+ + +
diff --git a/web_src/js/features/repo-new.ts b/web_src/js/features/repo-new.ts index b690ace0f7..e90da08eed 100644 --- a/web_src/js/features/repo-new.ts +++ b/web_src/js/features/repo-new.ts @@ -58,6 +58,36 @@ function initRepoNewTemplateSearch(form: HTMLFormElement) { onChangeOwner(); } +function initRepoGroupSelector(form: HTMLFormElement) { + const inputRepoOwnerUid = form.querySelector('#uid'); + const elGroupDropdown = form.querySelector('#group_selector'); + const $dropdown = fomanticQuery(elGroupDropdown); + const onChangeRepoOwner = function () { + $dropdown.dropdown('setting', { + apiSettings: { + url: `${appSubUrl}/group/search?uid=${inputRepoOwnerUid.value}&recurse=true`, + onResponse(response) { + const results = []; + results.push({name: '', value: ''}); // empty item means not using template + const forEachFn = function({group, subgroups}, depth: number) { + results.push({name: group.name, value: String(group.id)}); + for (const sg of subgroups) { + forEachFn(sg, depth + 1); + } + }; + for (const g of response.data.subgroups) { + forEachFn(g, 0); + } + return {results}; + }, + cache: false, + }, + }); + }; + inputRepoOwnerUid.addEventListener('change', onChangeRepoOwner); + onChangeRepoOwner(); +} + export function initRepoNew() { const pageContent = document.querySelector('.page-content.repository.new-repo'); if (!pageContent) return; @@ -96,4 +126,5 @@ export function initRepoNew() { updateUiRepoName(); initRepoNewTemplateSearch(form); + initRepoGroupSelector(form); }