From ee12e5ceec3cd8c7d65aace1cc683020583cfb08 Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Mon, 7 Sep 2020 13:12:10 +0200 Subject: [PATCH] add new extension point for repository initialization --- scm-ui/ui-types/src/Repositories.ts | 4 +++ scm-ui/ui-types/src/index.ts | 2 +- .../repos/components/form/RepositoryForm.tsx | 35 +++++++++++++++---- .../ui-webapp/src/repos/containers/Create.tsx | 7 ++-- scm-ui/ui-webapp/src/repos/modules/repos.ts | 4 +-- 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/scm-ui/ui-types/src/Repositories.ts b/scm-ui/ui-types/src/Repositories.ts index 777006496b..68b7d5113a 100644 --- a/scm-ui/ui-types/src/Repositories.ts +++ b/scm-ui/ui-types/src/Repositories.ts @@ -35,6 +35,10 @@ export type Repository = { _links: Links; }; +export type RepositoryCreation = Repository & { + creationContext: { [key: string]: any }; +}; + export type RepositoryCollection = PagedCollection & { _embedded: { repositories: Repository[] | string[]; diff --git a/scm-ui/ui-types/src/index.ts b/scm-ui/ui-types/src/index.ts index cdaa2fe416..f0263afe3b 100644 --- a/scm-ui/ui-types/src/index.ts +++ b/scm-ui/ui-types/src/index.ts @@ -29,7 +29,7 @@ export { Me } from "./Me"; export { DisplayedUser, User } from "./User"; export { Group, Member } from "./Group"; -export { Repository, RepositoryCollection, RepositoryGroup } from "./Repositories"; +export { Repository, RepositoryCollection, RepositoryGroup, RepositoryCreation } from "./Repositories"; export { RepositoryType, RepositoryTypeCollection } from "./RepositoryTypes"; export { Branch, BranchRequest } from "./Branches"; diff --git a/scm-ui/ui-webapp/src/repos/components/form/RepositoryForm.tsx b/scm-ui/ui-webapp/src/repos/components/form/RepositoryForm.tsx index e21ea133bc..b22fd01218 100644 --- a/scm-ui/ui-webapp/src/repos/components/form/RepositoryForm.tsx +++ b/scm-ui/ui-webapp/src/repos/components/form/RepositoryForm.tsx @@ -23,10 +23,10 @@ */ import React from "react"; import styled from "styled-components"; -import { WithTranslation, withTranslation } from "react-i18next"; -import { ExtensionPoint } from "@scm-manager/ui-extensions"; -import { Repository, RepositoryType } from "@scm-manager/ui-types"; -import { Checkbox, InputField, Level, Select, SubmitButton, Subtitle, Textarea } from "@scm-manager/ui-components"; +import {WithTranslation, withTranslation} from "react-i18next"; +import {ExtensionPoint} from "@scm-manager/ui-extensions"; +import {Repository, RepositoryCreation, RepositoryType} from "@scm-manager/ui-types"; +import {Checkbox, InputField, Level, Select, SubmitButton, Subtitle, Textarea} from "@scm-manager/ui-components"; import * as validator from "./repositoryValidation"; import { CUSTOM_NAMESPACE_STRATEGY } from "../../modules/repos"; @@ -45,7 +45,7 @@ const SpaceBetween = styled.div` `; type Props = WithTranslation & { - submitForm: (repo: Repository, shouldInit: boolean) => void; + submitForm: (repo: RepositoryCreation, shouldInit: boolean) => void; repository?: Repository; repositoryTypes?: RepositoryType[]; namespaceStrategy?: string; @@ -53,7 +53,7 @@ type Props = WithTranslation & { }; type State = { - repository: Repository; + repository: RepositoryCreation; initRepository: boolean; namespaceValidationError: boolean; nameValidationError: boolean; @@ -71,6 +71,7 @@ class RepositoryForm extends React.Component { type: "", contact: "", description: "", + creationContext: {}, _links: {} }, initRepository: false, @@ -85,7 +86,8 @@ class RepositoryForm extends React.Component { if (repository) { this.setState({ repository: { - ...repository + ...repository, + creationContext: {} } }); } @@ -128,6 +130,18 @@ class RepositoryForm extends React.Component { }); }; + setCreationContextEntry = (key: string, value: any) => { + this.setState({ + repository: { + ...this.state.repository, + creationContext: { + ...this.state.repository.creationContext, + [key]: value + } + } + }); + }; + render() { const { loading, t } = this.props; const repository = this.state.repository; @@ -209,6 +223,10 @@ class RepositoryForm extends React.Component { } const { repositoryTypes, t } = this.props; const repository = this.state.repository; + const extensionProps = { + repository, + setCreationContextEntry: this.setCreationContextEntry + }; return ( <> {this.renderNamespaceField()} @@ -239,6 +257,9 @@ class RepositoryForm extends React.Component { /> + {this.state.initRepository && ( + + )} ); } diff --git a/scm-ui/ui-webapp/src/repos/containers/Create.tsx b/scm-ui/ui-webapp/src/repos/containers/Create.tsx index 0ef6121afc..1796e7269f 100644 --- a/scm-ui/ui-webapp/src/repos/containers/Create.tsx +++ b/scm-ui/ui-webapp/src/repos/containers/Create.tsx @@ -25,7 +25,7 @@ import React from "react"; import { connect } from "react-redux"; import { WithTranslation, withTranslation } from "react-i18next"; import { History } from "history"; -import { NamespaceStrategies, Repository, RepositoryType } from "@scm-manager/ui-types"; +import { NamespaceStrategies, Repository, RepositoryCreation, RepositoryType } from "@scm-manager/ui-types"; import { Page } from "@scm-manager/ui-components"; import { fetchRepositoryTypesIfNeeded, @@ -56,9 +56,10 @@ type Props = WithTranslation & { fetchRepositoryTypesIfNeeded: () => void; createRepo: ( link: string, - repository: Repository, + repository: RepositoryCreation, initRepository: boolean, - callback: (repo: Repository) => void + callback: (repo: Repository) => void, + initRepositoryContext?: any ) => void; resetForm: () => void; diff --git a/scm-ui/ui-webapp/src/repos/modules/repos.ts b/scm-ui/ui-webapp/src/repos/modules/repos.ts index 2cc46f033d..fc20ddd6f0 100644 --- a/scm-ui/ui-webapp/src/repos/modules/repos.ts +++ b/scm-ui/ui-webapp/src/repos/modules/repos.ts @@ -24,7 +24,7 @@ import { apiClient } from "@scm-manager/ui-components"; import * as types from "../../modules/types"; -import { Action, Repository, RepositoryCollection } from "@scm-manager/ui-types"; +import { Action, Repository, RepositoryCollection, RepositoryCreation } from "@scm-manager/ui-types"; import { isPending } from "../../modules/pending"; import { getFailure } from "../../modules/failure"; @@ -183,7 +183,7 @@ export function fetchRepoFailure(namespace: string, name: string, error: Error): export function createRepo( link: string, - repository: Repository, + repository: RepositoryCreation, initRepository: boolean, callback?: (repo: Repository) => void ) {