diff --git a/scm-ui-components/packages/ui-components/src/config/ConfigurationBinder.js b/scm-ui-components/packages/ui-components/src/config/ConfigurationBinder.js
index 477eee5238..21d889c8c4 100644
--- a/scm-ui-components/packages/ui-components/src/config/ConfigurationBinder.js
+++ b/scm-ui-components/packages/ui-components/src/config/ConfigurationBinder.js
@@ -9,6 +9,16 @@ class ConfigurationBinder {
i18nNamespace: string = "plugins";
+ navLink(to: string, labelI18nKey: string, t: any){
+ return ;
+ }
+
+ route(path: string, Component: any){
+ return Component}
+ exact/>;
+ }
+
bindGlobal(to: string, labelI18nKey: string, linkName: string, ConfigurationComponent: any) {
// create predicate based on the link name of the index resource
@@ -17,27 +27,51 @@ class ConfigurationBinder {
return props.links && props.links[linkName];
};
+ // create NavigationLink with translated label and bind link to extensionPoint
// create NavigationLink with translated label
const ConfigNavLink = translate(this.i18nNamespace)(({t}) => {
- return ;
+ return this.navLink("/config" + to, labelI18nKey, t);
});
// bind navigation link to extension point
binder.bind("config.navigation", ConfigNavLink, configPredicate);
-
// route for global configuration, passes the link from the index resource to component
const ConfigRoute = ({ url, links }) => {
const link = links[linkName].href;
- return }
- exact/>;
+ return this.route(url + to, );
};
// bind config route to extension point
binder.bind("config.route", ConfigRoute, configPredicate);
}
+ bindRepository(to: string, labelI18nKey: string, linkName: string, RepositoryComponent: any) {
+
+ // create predicate based on the link name of the current repository route
+ // if the linkname is not available, the navigation link and the route are not bound to the extension points
+ const repoPredicate = (props: Object) => {
+ return props.repository && props.repository._links && props.repository._links[linkName];
+ };
+
+ // create NavigationLink with translated label
+ const RepoNavLink = translate(this.i18nNamespace)(({t, url}) => {
+ return this.navLink(url + to, labelI18nKey, t);
+ });
+
+ // bind navigation link to extension point
+ binder.bind("repository.navigation", RepoNavLink, repoPredicate);
+
+
+ // route for global configuration, passes the current repository to component
+ const RepoRoute = ({ url, repository }) => {
+ return this.route(url + to, );
+ };
+
+ // bind config route to extension point
+ binder.bind("repository.route", RepoRoute, repoPredicate);
+ }
+
}
export default new ConfigurationBinder();