From 5c2f8432e3891d3fc4fd1d3b66d31d18da978a71 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 18 Mar 2020 20:59:32 +0300 Subject: [PATCH 1/4] feat(tenant-management): add admin password and email fields to new tenant form --- .../components/tenants/tenants.component.html | 20 ++++++++++++++++ .../components/tenants/tenants.component.ts | 15 +++++++++++- .../src/lib/models/tenant-management.ts | 5 +++- .../lib/services/tenant-management.service.ts | 24 ++++++++++--------- 4 files changed, 51 insertions(+), 13 deletions(-) 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); } From 2db56d592f319e27640e275a88c95dd79b316f65 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 18 Mar 2020 21:27:34 +0300 Subject: [PATCH 2/4] feat(rn): add admin email and password fields to create tenant form --- templates/app/react-native/package.json | 2 +- .../CreateUpdateTenantForm.js | 64 ++++++++++++++++++- templates/app/react-native/yarn.lock | 51 +++++++-------- 3 files changed, 86 insertions(+), 31 deletions(-) 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..0a1c05771b 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 || !editingTenant.id ? ( + <> + + + adminPasswordRef.current._root.focus()} + returnKeyType="next" + onChangeText={handleChange('adminEmailAddress')} + onBlur={handleBlur('adminEmailAddress')} + value={values.adminEmailAddress} + /> + + {errors.adminEmailAddress} + + + + + setShowAdminPassword(!showAdminPassword)} + /> + + + {errors.adminPassword} + + ) : null} Date: Wed, 18 Mar 2020 22:02:26 +0300 Subject: [PATCH 3/4] refactor: remove unnecessary condition --- .../src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js index 0a1c05771b..45710eb594 100644 --- a/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js +++ b/templates/app/react-native/src/screens/CreateUpdateTenant/CreateUpdateTenantForm.js @@ -73,7 +73,7 @@ function CreateUpdateTenantForm({ editingTenant = {}, submit, remove }) { /> {errors.name} - {!editingTenant || !editingTenant.id ? ( + {!editingTenant.id ? ( <>