diff --git a/npm/ng-packs/packages/core/src/lib/models/index.ts b/npm/ng-packs/packages/core/src/lib/models/index.ts
index 4d4ed321c4..c38a38bfaf 100644
--- a/npm/ng-packs/packages/core/src/lib/models/index.ts
+++ b/npm/ng-packs/packages/core/src/lib/models/index.ts
@@ -3,6 +3,6 @@ export * from './common';
export * from './config';
export * from './dtos';
export * from './profile';
-export * from './replaceable-components';
+export * from './replaceable-components';
export * from './rest';
export * from './session';
diff --git a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html
index a0fccaf9d3..2b0276ede8 100644
--- a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html
+++ b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html
@@ -140,6 +140,26 @@
+
+
+
+
+
+
+
+
diff --git a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts
index fa400d06f9..788953096f 100644
--- a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts
+++ b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.ts
@@ -60,6 +60,10 @@ export class TenantsComponent implements OnInit {
sortKey = '';
+ get hasSelectedTenant(): boolean {
+ return Boolean(this.selected.id);
+ }
+
get useSharedDatabase(): boolean {
return this.defaultConnectionStringForm.get('useSharedDatabase').value;
}
@@ -115,9 +119,18 @@ export class TenantsComponent implements OnInit {
}
private createTenantForm() {
- this.tenantForm = this.fb.group({
+ const tenantForm = this.fb.group({
name: [this.selected.name || '', [Validators.required, Validators.maxLength(256)]],
+ adminEmailAddress: [null, [Validators.required, Validators.maxLength(256), Validators.email]],
+ adminPassword: [null, [Validators.required]],
});
+
+ if (this.hasSelectedTenant) {
+ tenantForm.removeControl('adminEmailAddress');
+ tenantForm.removeControl('adminPassword');
+ }
+
+ this.tenantForm = tenantForm;
}
private createDefaultConnectionStringForm() {
diff --git a/npm/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts b/npm/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts
index 40a9c06d11..b7659e2a95 100644
--- a/npm/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts
+++ b/npm/ng-packs/packages/tenant-management/src/lib/models/tenant-management.ts
@@ -14,11 +14,14 @@ export namespace TenantManagement {
}
export interface AddRequest {
+ adminEmailAddress: string;
+ adminPassword: string;
name: string;
}
- export interface UpdateRequest extends AddRequest {
+ export interface UpdateRequest {
id: string;
+ name: string;
}
export interface DefaultConnectionStringRequest {
diff --git a/npm/ng-packs/packages/tenant-management/src/lib/services/tenant-management.service.ts b/npm/ng-packs/packages/tenant-management/src/lib/services/tenant-management.service.ts
index bb043377e6..27ee26b7ed 100644
--- a/npm/ng-packs/packages/tenant-management/src/lib/services/tenant-management.service.ts
+++ b/npm/ng-packs/packages/tenant-management/src/lib/services/tenant-management.service.ts
@@ -4,7 +4,7 @@ import { RestService, Rest, ABP } from '@abp/ng.core';
import { TenantManagement } from '../models/tenant-management';
@Injectable({
- providedIn: 'root'
+ providedIn: 'root',
})
export class TenantManagementService {
constructor(private rest: RestService) {}
@@ -13,7 +13,7 @@ export class TenantManagementService {
const request: Rest.Request = {
method: 'GET',
url: '/api/multi-tenancy/tenants',
- params
+ params,
};
return this.rest.request(request);
@@ -22,7 +22,7 @@ export class TenantManagementService {
getTenantById(id: string): Observable {
const request: Rest.Request = {
method: 'GET',
- url: `/api/multi-tenancy/tenants/${id}`
+ url: `/api/multi-tenancy/tenants/${id}`,
};
return this.rest.request(request);
@@ -31,7 +31,7 @@ export class TenantManagementService {
deleteTenant(id: string): Observable {
const request: Rest.Request = {
method: 'DELETE',
- url: `/api/multi-tenancy/tenants/${id}`
+ url: `/api/multi-tenancy/tenants/${id}`,
};
return this.rest.request(request);
@@ -41,7 +41,7 @@ export class TenantManagementService {
const request: Rest.Request = {
method: 'POST',
url: '/api/multi-tenancy/tenants',
- body
+ body,
};
return this.rest.request(request);
@@ -54,10 +54,10 @@ export class TenantManagementService {
const request: Rest.Request = {
method: 'PUT',
url,
- body
+ body,
};
- return this.rest.request(request);
+ return this.rest.request(request);
}
getDefaultConnectionString(id: string): Observable {
@@ -66,18 +66,20 @@ export class TenantManagementService {
const request: Rest.Request = {
method: 'GET',
responseType: Rest.ResponseType.Text,
- url
+ url,
};
return this.rest.request(request);
}
- updateDefaultConnectionString(payload: TenantManagement.DefaultConnectionStringRequest): Observable {
+ updateDefaultConnectionString(
+ payload: TenantManagement.DefaultConnectionStringRequest,
+ ): Observable {
const url = `/api/multi-tenancy/tenants/${payload.id}/default-connection-string`;
const request: Rest.Request = {
method: 'PUT',
url,
- params: { defaultConnectionString: payload.defaultConnectionString }
+ params: { defaultConnectionString: payload.defaultConnectionString },
};
return this.rest.request(request);
}
@@ -87,7 +89,7 @@ export class TenantManagementService {
const request: Rest.Request = {
method: 'DELETE',
- url
+ url,
};
return this.rest.request(request);
}
diff --git a/templates/app/react-native/package.json b/templates/app/react-native/package.json
index 09f9159570..14e799b900 100644
--- a/templates/app/react-native/package.json
+++ b/templates/app/react-native/package.json
@@ -24,7 +24,7 @@
"formik": "^2.1.2",
"i18n-js": "^3.5.1",
"lodash": "^4.17.15",
- "native-base": "^2.13.8",
+ "native-base": "2.13.8",
"prop-types": "^15.7.2",
"react": "~16.9.0",
"react-dom": "~16.9.0",
diff --git a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js
index ff5801f914..45710eb594 100644
--- a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js
+++ b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js
@@ -1,8 +1,8 @@
import { Formik } from 'formik';
import i18n from 'i18n-js';
-import { Container, Content, Input, InputGroup, Label } from 'native-base';
+import { Container, Content, Input, InputGroup, Label, Item, Icon } from 'native-base';
import PropTypes from 'prop-types';
-import React, { useRef } from 'react';
+import React, { useRef, useState } from 'react';
import { StyleSheet } from 'react-native';
import * as Yup from 'yup';
import FormButtons from '../../components/FormButtons/FormButtons';
@@ -15,7 +15,10 @@ const validations = {
function CreateUpdateTenantForm({ editingTenant = {}, submit, remove }) {
const tenantNameRef = useRef();
+ const adminEmailRef = useRef();
+ const adminPasswordRef = useRef();
+ const [showAdminPassword, setShowAdminPassword] = useState(false);
const hasRemovePermission = usePermission('AbpTenantManagement.Tenants.Delete');
const onSubmit = values => {
@@ -25,11 +28,25 @@ function CreateUpdateTenantForm({ editingTenant = {}, submit, remove }) {
});
};
+ const adminEmailAddressValidation = Yup.lazy(() =>
+ Yup.string()
+ .required('AbpAccount::ThisFieldIsRequired.')
+ .email('AbpAccount::ThisFieldIsNotAValidEmailAddress.'),
+ );
+
+ const adminPasswordValidation = Yup.lazy(() =>
+ Yup.string().required('AbpAccount::ThisFieldIsRequired.'),
+ );
+
return (
+ !editingTenant.id ? adminEmailRef.current._root.focus() : null
+ }
+ returnKeyType={!editingTenant.id ? 'next' : 'done'}
onChangeText={handleChange('name')}
onBlur={handleBlur('name')}
value={values.name}
/>
{errors.name}
+ {!editingTenant.id ? (
+ <>
+
+
+ adminPasswordRef.current._root.focus()}
+ returnKeyType="next"
+ onChangeText={handleChange('adminEmailAddress')}
+ onBlur={handleBlur('adminEmailAddress')}
+ value={values.adminEmailAddress}
+ />
+
+ {errors.adminEmailAddress}
+
+
+ -
+
+ setShowAdminPassword(!showAdminPassword)}
+ />
+
+
+ {errors.adminPassword}
+ >
+ ) : null}