User Details ve Genel düzenlemeler

This commit is contained in:
Sedat Öztürk 2026-05-25 12:14:42 +03:00
parent e50a02bddc
commit 0b5eb3d978
6 changed files with 577 additions and 527 deletions

View file

@ -3108,6 +3108,12 @@
"en": "Lockout Settings", "en": "Lockout Settings",
"tr": "Kilit Ayarları" "tr": "Kilit Ayarları"
}, },
{
"resourceName": "Platform",
"key": "Abp.Identity.User.LockoutManagement.ConnectionsTimes",
"en": "Connections Times",
"tr": "Bağlantı Süreleri"
},
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "Abp.Identity.User.UserInformation.Name", "key": "Abp.Identity.User.UserInformation.Name",

View file

@ -4168,7 +4168,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>() EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>()
{ {
new() { new() {
Order = 1, ColCount = 2, ColSpan = 1, ItemType = "group", Items = Order = 1, ColCount = 4, ColSpan = 1, ItemType = "group", Items =
[ [
new EditingFormItemDto { Order = 1, DataField = "CategoryId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 1, DataField = "CategoryId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
new EditingFormItemDto { Order = 2, DataField = "TypeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 2, DataField = "TypeId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
@ -4176,9 +4176,9 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
new EditingFormItemDto { Order = 4, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 4, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 5, DataField = "Place", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 5, DataField = "Place", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxTextBox },
new EditingFormItemDto { Order = 6, DataField = "UserId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 6, DataField = "UserId", ColSpan = 1, IsRequired = true, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
new EditingFormItemDto { Order = 7, DataField = "Description", ColSpan = 2, EditorType2 = EditorTypes.dxTextArea }, new EditingFormItemDto { Order = 7, DataField = "Status", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
new EditingFormItemDto { Order = 8, DataField = "Status", ColSpan = 1, EditorType2 = EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 8, DataField = "ParticipantsCount", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox },
new EditingFormItemDto { Order = 9, DataField = "ParticipantsCount", ColSpan = 1, EditorType2 = EditorTypes.dxNumberBox }, new EditingFormItemDto { Order = 9, DataField = "Description", ColSpan = 2, EditorType2 = EditorTypes.dxTextArea },
new EditingFormItemDto { Order = 10, DataField = "Photos", ColSpan = 1, EditorType2 = EditorTypes.dxImageUpload, EditorOptions = EditorOptionValues.ImageUploadOptions }, new EditingFormItemDto { Order = 10, DataField = "Photos", ColSpan = 1, EditorType2 = EditorTypes.dxImageUpload, EditorOptions = EditorOptionValues.ImageUploadOptions },
]} ]}
}), }),
@ -4474,7 +4474,7 @@ public class ListFormSeeder_Administration : IDataSeedContributor, ITransientDep
EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 250, true, true, true, true, false), EditingOptionJson = DefaultEditingOptionJson(listFormName, 500, 250, true, true, true, true, false),
EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>() { EditingFormJson = JsonSerializer.Serialize(new List<EditingFormDto>() {
new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items=[ new() { Order=1, ColCount=1, ColSpan=1, ItemType="group", Items=[
new EditingFormItemDto { Order = 1, DataField = "Name", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 1, DataField = "UserId", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxSelectBox },
]} ]}
}), }),
InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(), InsertFieldsDefaultValueJson = DefaultInsertFieldsDefaultValueJson(),

View file

@ -76,7 +76,7 @@ public static class PlatformConsts
public static class Branches public static class Branches
{ {
public const string BranchCode = "DEMO"; public const string BranchCode = "DEMO";
public const string BranchName = "Demo Şube"; public const string BranchName = "Demo";
public const long BranchVknTckn = 52849619172; public const long BranchVknTckn = 52849619172;
public const string BranchTaxOffice = "Sarıgazi"; public const string BranchTaxOffice = "Sarıgazi";
public const string BranchMobileNumber = "5449476346"; public const string BranchMobileNumber = "5449476346";

View file

@ -59,13 +59,11 @@ import {
FaMinusCircle, FaMinusCircle,
FaPlusCircle, FaPlusCircle,
FaTrash, FaTrash,
FaSitemap,
FaCogs,
FaTrashAlt, FaTrashAlt,
FaEdit, FaEdit,
FaUsers, FaUsers,
FaUserPlus, FaUserPlus,
FaUserShield, FaUserFriends,
} from 'react-icons/fa' } from 'react-icons/fa'
import { object, string } from 'yup' import { object, string } from 'yup'
import { ROUTES_ENUM } from '@/routes/route.constant' import { ROUTES_ENUM } from '@/routes/route.constant'
@ -389,8 +387,8 @@ const OrganizationUnits = () => {
return ( return (
<div <div
className={classNames( className={classNames(
'h-6 text-md flex gap-2 items-center', 'h-8 text-md flex gap-2 items-center',
node.isSelected ? 'bg-indigo-200' : '', node.isSelected ? 'bg-indigo-200 text-black dark:text-black' : '',
)} )}
style={style} style={style}
ref={dragHandle} ref={dragHandle}
@ -403,7 +401,7 @@ const OrganizationUnits = () => {
{node.isInternal && (node.isOpen ? <FaMinusCircle /> : <FaPlusCircle />)} {node.isInternal && (node.isOpen ? <FaMinusCircle /> : <FaPlusCircle />)}
</div> </div>
<FaFolder className="ml-2 w-3" color="#337ab7" /> <FaFolder className="w-3" color="#337ab7" />
<span className="node-text m-1"> <span className="node-text m-1">
{node.isEditing ? ( {node.isEditing ? (
@ -431,17 +429,23 @@ const OrganizationUnits = () => {
<div className="file-actions"> <div className="file-actions">
<div className="flex gap-1 folderFileActions"> <div className="flex gap-1 folderFileActions">
<Button <Button
icon={<FaUserPlus size="20" color="#2d6da3" />} size='xs'
variant='plain'
icon={<FaUserPlus color="#2d6da3" />}
onClick={() => setIsMoveAllUsersOpen(true)} onClick={() => setIsMoveAllUsersOpen(true)}
title={translate('::Abp.Identity.OrganizationUnit.MoveAllUsers')} title={translate('::Abp.Identity.OrganizationUnit.MoveAllUsers')}
></Button> ></Button>
<Button <Button
icon={<FaEdit size="20" className="text-teal-900" />} size='xs'
variant='plain'
icon={<FaEdit className="text-teal-900" />}
onClick={() => node.edit()} onClick={() => node.edit()}
title={translate('::Abp.Identity.OrganizationUnit.Rename')} title={translate('::Abp.Identity.OrganizationUnit.Rename')}
></Button> ></Button>
<Button <Button
icon={<FaTrashAlt size="20" color="#d9534f" />} size='xs'
variant='plain'
icon={<FaTrashAlt color="#d9534f" />}
onClick={() => setDeleteRow({ id: node.data.id, name: 'Organization Unit' })} onClick={() => setDeleteRow({ id: node.data.id, name: 'Organization Unit' })}
title={translate('::Delete')} title={translate('::Delete')}
></Button> ></Button>
@ -469,7 +473,7 @@ const OrganizationUnits = () => {
<Button <Button
variant="solid" variant="solid"
size="sm" size="sm"
icon={activeOu ? <FaSitemap /> : <FaCogs />} icon={activeOu ? <FaUserFriends /> : <FaUserPlus />}
title={translate('::Abp.Identity.OrganizationUnit.AddUnit')} title={translate('::Abp.Identity.OrganizationUnit.AddUnit')}
onClick={(e) => { onClick={(e) => {
e.preventDefault() e.preventDefault()

View file

@ -167,11 +167,16 @@ function UserDetails() {
{({ isSubmitting, values }) => { {({ isSubmitting, values }) => {
return ( return (
<Form> <Form>
<div className="w-1/2"> <div>
<FormContainer size="md"> <FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-2 w-full"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2 w-full">
{/* Personal Information */} {/* Personal Information */}
<div> <div>
<h6 className="mb-4">
{translate(
'::Abp.Identity.User.UserInformation.ContactInformation',
)}
</h6>
<FormItem <FormItem
label={translate('::Abp.Identity.User.UserInformation.Name')} label={translate('::Abp.Identity.User.UserInformation.Name')}
> >
@ -182,9 +187,7 @@ function UserDetails() {
component={Input} component={Input}
/> />
</FormItem> </FormItem>
</div>
<div>
<FormItem <FormItem
label={translate('::Abp.Identity.User.UserInformation.Surname')} label={translate('::Abp.Identity.User.UserInformation.Surname')}
> >
@ -195,14 +198,7 @@ function UserDetails() {
component={Input} component={Input}
/> />
</FormItem> </FormItem>
</div>
<div>
<h6 className="mb-4">
{translate(
'::Abp.Identity.User.UserInformation.ContactInformation',
)}
</h6>
<FormItem label={translate('::Abp.Account.EmailAddress')}> <FormItem label={translate('::Abp.Account.EmailAddress')}>
<Field <Field
type="text" type="text"
@ -224,6 +220,10 @@ function UserDetails() {
component={Input} component={Input}
/> />
</FormItem> </FormItem>
</div>
<div>
<h6 className="mb-4">&nbsp;</h6>
<FormItem label={translate('::Abp.Account.HomeAddress')}> <FormItem label={translate('::Abp.Account.HomeAddress')}>
<Field <Field
type="text" type="text"
@ -438,11 +438,9 @@ function UserDetails() {
</FormContainer> </FormContainer>
</div> </div>
<div className="w-1/2">
<Button variant="solid" block loading={isSubmitting} type="submit"> <Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')} {isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button> </Button>
</div>
</Form> </Form>
) )
}} }}
@ -479,7 +477,7 @@ function UserDetails() {
return ( return (
<Form> <Form>
<div className="w-1/2"> <div>
<FormContainer size="md"> <FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4 w-full"> <div className="grid grid-cols-1 lg:grid-cols-2 gap-4 w-full">
{/* Şube Management */} {/* Şube Management */}
@ -549,7 +547,7 @@ function UserDetails() {
</FormContainer> </FormContainer>
</div> </div>
<div className="w-1/2 mt-4"> <div className="mt-4">
<Button variant="solid" block loading={isSubmitting} type="submit"> <Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')} {isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button> </Button>
@ -601,9 +599,9 @@ function UserDetails() {
return ( return (
<Form> <Form>
<div className="w-1/2"> <div>
<FormContainer size="md"> <FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-2 w-full"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2 w-full">
<div> <div>
<FormItem <FormItem
label={translate( label={translate(
@ -664,7 +662,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="sskNo" name="sskNo"
placeholder={translate('::Abp.Identity.User.UserInformation.SskNo')} placeholder={translate(
'::Abp.Identity.User.UserInformation.SskNo',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -680,7 +680,9 @@ function UserDetails() {
field={field} field={field}
form={form} form={form}
value={field.value ? dayjs(field.value).toDate() : null} value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.HireDate')} placeholder={translate(
'::Abp.Identity.User.UserInformation.HireDate',
)}
onChange={(date) => { onChange={(date) => {
form.setFieldValue( form.setFieldValue(
field.name, field.name,
@ -695,7 +697,9 @@ function UserDetails() {
<div> <div>
<FormItem <FormItem
label={translate('::Abp.Identity.User.UserInformation.TerminationDate')} label={translate(
'::Abp.Identity.User.UserInformation.TerminationDate',
)}
> >
<Field name="terminationDate"> <Field name="terminationDate">
{({ field, form }: FieldProps) => ( {({ field, form }: FieldProps) => (
@ -703,7 +707,9 @@ function UserDetails() {
field={field} field={field}
form={form} form={form}
value={field.value ? dayjs(field.value).toDate() : null} value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.TerminationDate')} placeholder={translate(
'::Abp.Identity.User.UserInformation.TerminationDate',
)}
onChange={(date) => { onChange={(date) => {
form.setFieldValue( form.setFieldValue(
field.name, field.name,
@ -719,11 +725,9 @@ function UserDetails() {
</FormContainer> </FormContainer>
</div> </div>
<div className="w-1/2">
<Button variant="solid" block loading={isSubmitting} type="submit"> <Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')} {isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button> </Button>
</div>
</Form> </Form>
) )
}} }}
@ -774,17 +778,20 @@ function UserDetails() {
return ( return (
<Form> <Form>
<div className="w-1/2">
<FormContainer size="md"> <FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-2 w-full"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2 w-full">
<div> <div>
<FormItem <FormItem
label={translate('::Abp.Identity.User.UserInformation.IdentityNumber')} label={translate(
'::Abp.Identity.User.UserInformation.IdentityNumber',
)}
> >
<Field <Field
type="text" type="text"
name="identityNumber" name="identityNumber"
placeholder={translate('::Abp.Identity.User.UserInformation.IdentityNumber')} placeholder={translate(
'::Abp.Identity.User.UserInformation.IdentityNumber',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -797,7 +804,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="serialNo" name="serialNo"
placeholder={translate('::Abp.Identity.User.UserInformation.SerialNo')} placeholder={translate(
'::Abp.Identity.User.UserInformation.SerialNo',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -810,7 +819,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="province" name="province"
placeholder={translate('::Abp.Identity.User.UserInformation.Province')} placeholder={translate(
'::Abp.Identity.User.UserInformation.Province',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -823,7 +834,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="district" name="district"
placeholder={translate('::Abp.Identity.User.UserInformation.District')} placeholder={translate(
'::Abp.Identity.User.UserInformation.District',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -836,7 +849,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="village" name="village"
placeholder={translate('::Abp.Identity.User.UserInformation.Village')} placeholder={translate(
'::Abp.Identity.User.UserInformation.Village',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -849,7 +864,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="volumeNo" name="volumeNo"
placeholder={translate('::Abp.Identity.User.UserInformation.VolumeNo')} placeholder={translate(
'::Abp.Identity.User.UserInformation.VolumeNo',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -857,12 +874,16 @@ function UserDetails() {
<div> <div>
<FormItem <FormItem
label={translate('::Abp.Identity.User.UserInformation.FamilySequenceNo')} label={translate(
'::Abp.Identity.User.UserInformation.FamilySequenceNo',
)}
> >
<Field <Field
type="text" type="text"
name="familySequenceNo" name="familySequenceNo"
placeholder={translate('::Abp.Identity.User.UserInformation.FamilySequenceNo')} placeholder={translate(
'::Abp.Identity.User.UserInformation.FamilySequenceNo',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -875,7 +896,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="sequenceNo" name="sequenceNo"
placeholder={translate('::Abp.Identity.User.UserInformation.SequenceNo')} placeholder={translate(
'::Abp.Identity.User.UserInformation.SequenceNo',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -888,7 +911,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="issuedPlace" name="issuedPlace"
placeholder={translate('::Abp.Identity.User.UserInformation.IssuedPlace')} placeholder={translate(
'::Abp.Identity.User.UserInformation.IssuedPlace',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -904,7 +929,9 @@ function UserDetails() {
field={field} field={field}
form={form} form={form}
value={field.value ? dayjs(field.value).toDate() : null} value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.IssuedDate')} placeholder={translate(
'::Abp.Identity.User.UserInformation.IssuedDate',
)}
onChange={(date) => { onChange={(date) => {
form.setFieldValue( form.setFieldValue(
field.name, field.name,
@ -924,7 +951,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="birthPlace" name="birthPlace"
placeholder={translate('::Abp.Identity.User.UserInformation.BirthPlace')} placeholder={translate(
'::Abp.Identity.User.UserInformation.BirthPlace',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -940,7 +969,9 @@ function UserDetails() {
field={field} field={field}
form={form} form={form}
value={field.value ? dayjs(field.value).toDate() : null} value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.BirthDate')} placeholder={translate(
'::Abp.Identity.User.UserInformation.BirthDate',
)}
onChange={(date) => { onChange={(date) => {
form.setFieldValue( form.setFieldValue(
field.name, field.name,
@ -960,7 +991,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="fatherName" name="fatherName"
placeholder={translate('::Abp.Identity.User.UserInformation.FatherName')} placeholder={translate(
'::Abp.Identity.User.UserInformation.FatherName',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -973,7 +1006,9 @@ function UserDetails() {
<Field <Field
type="text" type="text"
name="motherName" name="motherName"
placeholder={translate('::Abp.Identity.User.UserInformation.MotherName')} placeholder={translate(
'::Abp.Identity.User.UserInformation.MotherName',
)}
component={Input} component={Input}
/> />
</FormItem> </FormItem>
@ -1012,7 +1047,9 @@ function UserDetails() {
field={field} field={field}
form={form} form={form}
value={field.value ? dayjs(field.value).toDate() : null} value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate('::Abp.Identity.User.UserInformation.MarriageDate')} placeholder={translate(
'::Abp.Identity.User.UserInformation.MarriageDate',
)}
onChange={(date) => { onChange={(date) => {
form.setFieldValue( form.setFieldValue(
field.name, field.name,
@ -1026,13 +1063,10 @@ function UserDetails() {
</div> </div>
</div> </div>
</FormContainer> </FormContainer>
</div>
<div className="w-1/2">
<Button variant="solid" block loading={isSubmitting} type="submit"> <Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')} {isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button> </Button>
</div>
</Form> </Form>
) )
}} }}
@ -1073,9 +1107,8 @@ function UserDetails() {
return ( return (
<Form> <Form>
<div className="w-1/2">
<FormContainer size="md"> <FormContainer size="md">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-2 w-full"> <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-2 w-full">
{/* Account Status */} {/* Account Status */}
<div> <div>
<h6 className="mb-4"> <h6 className="mb-4">
@ -1172,6 +1205,106 @@ function UserDetails() {
'::Abp.Identity.User.LockoutManagement.LoginAndLockoutSettings', '::Abp.Identity.User.LockoutManagement.LoginAndLockoutSettings',
)} )}
</h6> </h6>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled',
)}
>
<Field
name="lockoutEnabled"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountLocked',
)}
>
<Field
name="lockUser"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountLocked',
)}
component={Checkbox}
disabled={values.lockoutEnabled === false}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountEndDate',
)}
>
<Field name="lockoutEnd">
{({ field, form }: FieldProps) => (
<DatePicker
field={field}
form={form}
value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountEndDate',
)}
onChange={(date) => {
form.setFieldValue(
field.name,
date ? dayjs(date).format('YYYY-MM-DDTHH:mm:ss') : null,
)
}}
disabled={values.lockoutEnabled === false}
/>
)}
</Field>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin',
)}
>
<Field
name="shouldChangePasswordOnNextLogin"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccessFailedCount',
)}
>
<Field type="number" name="accessFailedCount" component={Input} />
</FormItem>
</div>
{/* Login & Lockout Settings */}
<div>
<h6 className="mb-4">
{translate('::Abp.Identity.User.LockoutManagement.ConnectionsTimes')}
</h6>
<FormItem <FormItem
layout="horizontal" layout="horizontal"
labelClass="!justify-start" labelClass="!justify-start"
@ -1223,106 +1356,13 @@ function UserDetails() {
)} )}
</Field> </Field>
</FormItem> </FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled',
)}
>
<Field
name="lockoutEnabled"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountLockoutEnabled',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountLocked',
)}
>
<Field
name="lockUser"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountLocked',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccountEndDate',
)}
>
<Field name="lockoutEnd">
{({ field, form }: FieldProps) => (
<DatePicker
field={field}
form={form}
value={field.value ? dayjs(field.value).toDate() : null}
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.AccountEndDate',
)}
onChange={(date) => {
form.setFieldValue(
field.name,
date ? dayjs(date).format('YYYY-MM-DDTHH:mm:ss') : null,
)
}}
/>
)}
</Field>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin',
)}
>
<Field
name="shouldChangePasswordOnNextLogin"
placeholder={translate(
'::Abp.Identity.User.LockoutManagement.ShouldChangePwOnNextLogin',
)}
component={Checkbox}
/>
</FormItem>
<FormItem
layout="horizontal"
labelClass="!justify-start"
labelWidth="50%"
label={translate(
'::Abp.Identity.User.LockoutManagement.AccessFailedCount',
)}
>
<Field type="number" name="accessFailedCount" component={Input} />
</FormItem>
</div> </div>
</div> </div>
</FormContainer> </FormContainer>
</div>
<div className="w-1/2">
<Button variant="solid" block loading={isSubmitting} type="submit"> <Button variant="solid" block loading={isSubmitting} type="submit">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')} {isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button> </Button>
</div>
</Form> </Form>
) )
}} }}
@ -1331,7 +1371,7 @@ function UserDetails() {
</TabContent> </TabContent>
<TabContent value="claimTypes"> <TabContent value="claimTypes">
<div className="mt-5 w-1/2"> <div className="mt-5">
<Table compact> <Table compact>
<THead> <THead>
<Tr> <Tr>