Gantt ve Scheduler için AllowAdding vs...

This commit is contained in:
Sedat Öztürk 2025-12-02 23:54:56 +03:00
parent aa3a3c7684
commit 0420f1a3e5
8 changed files with 556 additions and 376 deletions

View file

@ -63,7 +63,22 @@ public class GanttOptionDto
/// İlerleme ifadesi (örn: "%50") /// İlerleme ifadesi (örn: "%50")
/// </summary> /// </summary>
public string ProgressExpr { get; set; } public string ProgressExpr { get; set; }
/// <summary>
/// Düzenlemeye izin verilsin mi
/// </summary>
public bool AllowEditing { get; set; } = false;
/// <summary>
/// Task eklemeye izin verilsin mi
/// </summary>
public bool AllowTaskAdding { get; set; } = false;
/// <summary>
/// Task güncellemeye izin verilsin mi
/// </summary>
public bool AllowTaskUpdating { get; set; } = false;
/// <summary>
/// Task silmeye izin verilsin mi
/// </summary>
public bool AllowTaskDeleting { get; set; } = false;
/// <summary> /// <summary>
/// Bağlantılar için kullanılan field adı (örn: "predecessors") /// Bağlantılar için kullanılan field adı (örn: "predecessors")
/// </summary> /// </summary>

View file

@ -45,7 +45,7 @@ public class SchedulerOptionDto
/// Tüm gün panelini gösterme durumu /// Tüm gün panelini gösterme durumu
/// </summary> /// </summary>
public bool ShowAllDayPanel { get; set; } = true; public bool ShowAllDayPanel { get; set; } = true;
/// <summary> /// <summary>
/// Hücre süresi (dakika cinsinden, örn: 30) /// Hücre süresi (dakika cinsinden, örn: 30)
/// </summary> /// </summary>
public int CellDuration { get; set; } = 30; public int CellDuration { get; set; } = 30;
@ -65,4 +65,16 @@ public class SchedulerOptionDto
/// Etkinliklerin sürüklenip bırakılmasına izin verilip verilmediğini belirtir /// Etkinliklerin sürüklenip bırakılmasına izin verilip verilmediğini belirtir
/// </summary> /// </summary>
public bool AllowDragging { get; set; } = false; public bool AllowDragging { get; set; } = false;
/// <summary>
/// Etkinlik eklemeye izin verilip verilmediğini belirtir
/// </summary>
public bool AllowDeleting { get; set; } = false;
/// <summary>
/// Etkinlik güncellemeye izin verilip verilmediğini belirtir
/// </summary>
public bool AllowUpdating { get; set; } = false;
/// <summary>
/// Etkinlik eklemeye izin verilip verilmediğini belirtir
/// </summary>
public bool AllowAdding { get; set; } = false;
} }

View file

@ -4651,6 +4651,30 @@
"en": "Auto Expand All", "en": "Auto Expand All",
"tr": "Otomatik Tümünü Genişlet" "tr": "Otomatik Tümünü Genişlet"
}, },
{
"resourceName": "Platform",
"key": "ListForms.ListFormEdit.AllowEditing",
"en": "Allow Editing",
"tr": "Düzenlemeye İzin Ver"
},
{
"resourceName": "Platform",
"key": "ListForms.ListFormEdit.AllowTaskAdding",
"en": "Allow Task Adding",
"tr": "Görev Ekleme İzni"
},
{
"resourceName": "Platform",
"key": "ListForms.ListFormEdit.AllowTaskDeleting",
"en": "Allow Task Deleting",
"tr": "Görev Silme İzni"
},
{
"resourceName": "Platform",
"key": "ListForms.ListFormEdit.AllowTaskUpdating",
"en": "Allow Task Updating",
"tr": "Görev Güncelleme İzni"
},
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "ListForms.ListFormEdit.AllowDependencyAdding", "key": "ListForms.ListFormEdit.AllowDependencyAdding",
@ -10165,6 +10189,24 @@
"tr": "Sürüklemeye İzin Ver", "tr": "Sürüklemeye İzin Ver",
"en": "Allow Dragging" "en": "Allow Dragging"
}, },
{
"resourceName": "Platform",
"key": "ListForms.SchedulerOptions.AllowAdding",
"tr": "Ekleme İzin Ver",
"en": "Allow Adding"
},
{
"resourceName": "Platform",
"key": "ListForms.SchedulerOptions.AllowUpdating",
"tr": "Güncellemeye İzin Ver",
"en": "Allow Updating"
},
{
"resourceName": "Platform",
"key": "ListForms.SchedulerOptions.AllowDeleting",
"tr": "Silmeye İzin Ver",
"en": "Allow Deleting"
},
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "ListForms.SchedulerOptions.Day", "key": "ListForms.SchedulerOptions.Day",

View file

@ -402,6 +402,10 @@ export interface GanttOptionDto {
endExpr?: string endExpr?: string
progressExpr?: string progressExpr?: string
scaleType: GanttScaleType scaleType: GanttScaleType
allowEditing?: boolean
allowTaskAdding?: boolean
allowTaskUpdating?: boolean
allowTaskDeleting?: boolean
allowDependencyAdding?: boolean allowDependencyAdding?: boolean
allowDependencyDeleting?: boolean allowDependencyDeleting?: boolean
allowResourceAdding?: boolean allowResourceAdding?: boolean
@ -424,6 +428,9 @@ export interface SchedulerOptionDto {
firstDayOfWeek?: number firstDayOfWeek?: number
allowResizing?: boolean allowResizing?: boolean
allowDragging?: boolean allowDragging?: boolean
allowDeleting?: boolean
allowUpdating?: boolean
allowAdding?: boolean
resources?: SchedulerResourceDto[] resources?: SchedulerResourceDto[]
} }

View file

@ -83,293 +83,376 @@ function FormTabGantt(props: FormEditProps) {
{({ touched, errors, isSubmitting, values }) => ( {({ touched, errors, isSubmitting, values }) => (
<Form> <Form>
<FormContainer size="sm"> <FormContainer size="sm">
<FormItem <div className="grid grid-cols-1 md:grid-cols-2 gap-3">
label={translate('::ListForms.ListFormEdit.DatabaseDataSourceKeyFieldName')} <Card className="mt-4">
invalid={errors.ganttOptionDto?.keyExpr && touched.ganttOptionDto?.keyExpr} <h5 className="mb-4">{translate('::ListForms.SchedulerOptions.BasicSettings')}</h5>
errorMessage={errors.ganttOptionDto?.keyExpr} <FormItem
> label={translate('::ListForms.ListFormEdit.DatabaseDataSourceKeyFieldName')}
<Field invalid={errors.ganttOptionDto?.keyExpr && touched.ganttOptionDto?.keyExpr}
type="text" errorMessage={errors.ganttOptionDto?.keyExpr}
name="ganttOptionDto.keyExpr" >
placeholder={translate('::ListForms.ListFormEdit.DatabaseDataSourceKeyFieldName')} <Field
> type="text"
{({ field, form }: FieldProps<SelectBoxOption>) => ( name="ganttOptionDto.keyExpr"
<Select placeholder={translate(
field={field} '::ListForms.ListFormEdit.DatabaseDataSourceKeyFieldName',
form={form}
isClearable={true}
options={fieldList}
value={fieldList?.filter(
(option) => option.value === values.ganttOptionDto.keyExpr,
)} )}
onChange={(option) => form.setFieldValue(field.name, option?.value)} >
/> {({ field, form }: FieldProps<SelectBoxOption>) => (
)} <Select
</Field> field={field}
</FormItem> form={form}
isClearable={true}
<FormItem options={fieldList}
label={translate('::ListForms.ListFormEdit.ParentIdExpr')} value={fieldList?.filter(
invalid={errors.ganttOptionDto?.parentIdExpr && touched.ganttOptionDto?.parentIdExpr} (option) => option.value === values.ganttOptionDto.keyExpr,
errorMessage={errors.ganttOptionDto?.parentIdExpr} )}
> onChange={(option) => form.setFieldValue(field.name, option?.value)}
<Field />
type="text"
name="ganttOptionDto.parentIdExpr"
placeholder={translate('::ListForms.ListFormEdit.ParentIdExpr')}
>
{({ field, form }: FieldProps<SelectBoxOption>) => (
<Select
field={field}
form={form}
isClearable={true}
options={fieldList}
value={fieldList?.filter(
(option) => option.value === values.ganttOptionDto.parentIdExpr,
)} )}
onChange={(option) => form.setFieldValue(field.name, option?.value)} </Field>
/> </FormItem>
)}
</Field>
</FormItem>
<FormItem <FormItem
label={translate('::ListForms.ListFormEdit.HasItemsExpr')} label={translate('::ListForms.ListFormEdit.ParentIdExpr')}
invalid={errors.ganttOptionDto?.hasItemsExpr && touched.ganttOptionDto?.hasItemsExpr} invalid={
errorMessage={errors.ganttOptionDto?.hasItemsExpr} errors.ganttOptionDto?.parentIdExpr && touched.ganttOptionDto?.parentIdExpr
> }
<Field errorMessage={errors.ganttOptionDto?.parentIdExpr}
type="text" >
autoComplete="off" <Field
name="ganttOptionDto.hasItemsExpr" type="text"
placeholder={translate('::ListForms.ListFormEdit.HasItemsExpr')} name="ganttOptionDto.parentIdExpr"
component={Input} placeholder={translate('::ListForms.ListFormEdit.ParentIdExpr')}
/> >
</FormItem> {({ field, form }: FieldProps<SelectBoxOption>) => (
<Select
<FormItem field={field}
label={translate('::ListForms.ListFormEdit.RootValue')} form={form}
invalid={!!(errors.ganttOptionDto?.rootValue && touched.ganttOptionDto?.rootValue)} isClearable={true}
errorMessage={errors.ganttOptionDto?.rootValue as string} options={fieldList}
> value={fieldList?.filter(
<Field (option) => option.value === values.ganttOptionDto.parentIdExpr,
type="text" )}
autoComplete="off" onChange={(option) => form.setFieldValue(field.name, option?.value)}
name="ganttOptionDto.rootValue" />
placeholder={translate('::ListForms.ListFormEdit.RootValue')}
component={Input}
/>
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.AutoExpandAll')}
invalid={
errors.ganttOptionDto?.autoExpandAll && touched.ganttOptionDto?.autoExpandAll
}
errorMessage={errors.ganttOptionDto?.autoExpandAll}
>
<Field
name="ganttOptionDto.autoExpandAll"
placeholder={translate('::ListForms.ListFormEdit.AutoExpandAll')}
component={Checkbox}
/>
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.RecursiveSelection')}
invalid={
errors.ganttOptionDto?.recursiveSelection &&
touched.ganttOptionDto?.recursiveSelection
}
errorMessage={errors.ganttOptionDto?.recursiveSelection}
>
<Field
name="ganttOptionDto.recursiveSelection"
placeholder={translate('::ListForms.ListFormEdit.RecursiveSelection')}
component={Checkbox}
/>
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.ScaleType')}
invalid={errors.ganttOptionDto?.scaleType && touched.ganttOptionDto?.scaleType}
errorMessage={errors.ganttOptionDto?.scaleType}
>
<Field
type="text"
name="ganttOptionDto.scaleType"
placeholder={translate('::ListForms.ListFormEdit.ScaleType')}
>
{({ field, form }: FieldProps<GanttScaleType>) => (
<Select
field={field}
form={form}
isClearable={true}
options={gantScaleOptions}
value={gantScaleOptions?.filter(
(option) => option.value === values.ganttOptionDto.scaleType,
)} )}
onChange={(option) => form.setFieldValue(field.name, option?.value)} </Field>
/> </FormItem>
)}
</Field>
</FormItem>
<FormItem <FormItem
label={translate('::ListForms.ListFormEdit.TitleExpr')} label={translate('::ListForms.ListFormEdit.HasItemsExpr')}
invalid={errors.ganttOptionDto?.titleExpr && touched.ganttOptionDto?.titleExpr} invalid={
errorMessage={errors.ganttOptionDto?.titleExpr} errors.ganttOptionDto?.hasItemsExpr && touched.ganttOptionDto?.hasItemsExpr
> }
<Field errorMessage={errors.ganttOptionDto?.hasItemsExpr}
type="text" >
name="ganttOptionDto.titleExpr" <Field
placeholder={translate('::ListForms.ListFormEdit.TitleExpr')} type="text"
> autoComplete="off"
{({ field, form }: FieldProps<SelectBoxOption>) => ( name="ganttOptionDto.hasItemsExpr"
<Select placeholder={translate('::ListForms.ListFormEdit.HasItemsExpr')}
field={field} component={Input}
form={form} />
isClearable={true} </FormItem>
options={fieldList}
value={fieldList?.filter( <FormItem
(option) => option.value === values.ganttOptionDto.titleExpr, label={translate('::ListForms.ListFormEdit.RootValue')}
invalid={
!!(errors.ganttOptionDto?.rootValue && touched.ganttOptionDto?.rootValue)
}
errorMessage={errors.ganttOptionDto?.rootValue as string}
>
<Field
type="text"
autoComplete="off"
name="ganttOptionDto.rootValue"
placeholder={translate('::ListForms.ListFormEdit.RootValue')}
component={Input}
/>
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.AutoExpandAll')}
invalid={
errors.ganttOptionDto?.autoExpandAll && touched.ganttOptionDto?.autoExpandAll
}
errorMessage={errors.ganttOptionDto?.autoExpandAll}
>
<Field
name="ganttOptionDto.autoExpandAll"
placeholder={translate('::ListForms.ListFormEdit.AutoExpandAll')}
component={Checkbox}
/>
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.RecursiveSelection')}
invalid={
errors.ganttOptionDto?.recursiveSelection &&
touched.ganttOptionDto?.recursiveSelection
}
errorMessage={errors.ganttOptionDto?.recursiveSelection}
>
<Field
name="ganttOptionDto.recursiveSelection"
placeholder={translate('::ListForms.ListFormEdit.RecursiveSelection')}
component={Checkbox}
/>
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.ScaleType')}
invalid={errors.ganttOptionDto?.scaleType && touched.ganttOptionDto?.scaleType}
errorMessage={errors.ganttOptionDto?.scaleType}
>
<Field
type="text"
name="ganttOptionDto.scaleType"
placeholder={translate('::ListForms.ListFormEdit.ScaleType')}
>
{({ field, form }: FieldProps<GanttScaleType>) => (
<Select
field={field}
form={form}
isClearable={true}
options={gantScaleOptions}
value={gantScaleOptions?.filter(
(option) => option.value === values.ganttOptionDto.scaleType,
)}
onChange={(option) => form.setFieldValue(field.name, option?.value)}
/>
)} )}
onChange={(option) => form.setFieldValue(field.name, option?.value)} </Field>
/> </FormItem>
)}
</Field>
</FormItem>
<FormItem <FormItem
label={translate('::ListForms.ListFormEdit.StartExpr')} label={translate('::ListForms.ListFormEdit.TitleExpr')}
invalid={errors.ganttOptionDto?.startExpr && touched.ganttOptionDto?.startExpr} invalid={errors.ganttOptionDto?.titleExpr && touched.ganttOptionDto?.titleExpr}
errorMessage={errors.ganttOptionDto?.startExpr} errorMessage={errors.ganttOptionDto?.titleExpr}
> >
<Field <Field
type="text" type="text"
name="ganttOptionDto.startExpr" name="ganttOptionDto.titleExpr"
placeholder={translate('::ListForms.ListFormEdit.StartExpr')} placeholder={translate('::ListForms.ListFormEdit.TitleExpr')}
> >
{({ field, form }: FieldProps<SelectBoxOption>) => ( {({ field, form }: FieldProps<SelectBoxOption>) => (
<Select <Select
field={field} field={field}
form={form} form={form}
isClearable={true} isClearable={true}
options={fieldList} options={fieldList}
value={fieldList?.filter( value={fieldList?.filter(
(option) => option.value === values.ganttOptionDto.startExpr, (option) => option.value === values.ganttOptionDto.titleExpr,
)}
onChange={(option) => form.setFieldValue(field.name, option?.value)}
/>
)} )}
onChange={(option) => form.setFieldValue(field.name, option?.value)} </Field>
/> </FormItem>
)}
</Field>
</FormItem>
<FormItem <FormItem
label={translate('::ListForms.ListFormEdit.EndExpr')} label={translate('::ListForms.ListFormEdit.StartExpr')}
invalid={errors.ganttOptionDto?.endExpr && touched.ganttOptionDto?.endExpr} invalid={errors.ganttOptionDto?.startExpr && touched.ganttOptionDto?.startExpr}
errorMessage={errors.ganttOptionDto?.endExpr} errorMessage={errors.ganttOptionDto?.startExpr}
> >
<Field <Field
type="text" type="text"
name="ganttOptionDto.endExpr" name="ganttOptionDto.startExpr"
placeholder={translate('::ListForms.ListFormEdit.EndExpr')} placeholder={translate('::ListForms.ListFormEdit.StartExpr')}
> >
{({ field, form }: FieldProps<SelectBoxOption>) => ( {({ field, form }: FieldProps<SelectBoxOption>) => (
<Select <Select
field={field} field={field}
form={form} form={form}
isClearable={true} isClearable={true}
options={fieldList} options={fieldList}
value={fieldList?.filter( value={fieldList?.filter(
(option) => option.value === values.ganttOptionDto.endExpr, (option) => option.value === values.ganttOptionDto.startExpr,
)}
onChange={(option) => form.setFieldValue(field.name, option?.value)}
/>
)} )}
onChange={(option) => form.setFieldValue(field.name, option?.value)} </Field>
/> </FormItem>
)}
</Field>
</FormItem>
<FormItem <FormItem
label={translate('::ListForms.ListFormEdit.ProgressExpr')} label={translate('::ListForms.ListFormEdit.EndExpr')}
invalid={errors.ganttOptionDto?.progressExpr && touched.ganttOptionDto?.progressExpr} invalid={errors.ganttOptionDto?.endExpr && touched.ganttOptionDto?.endExpr}
errorMessage={errors.ganttOptionDto?.progressExpr} errorMessage={errors.ganttOptionDto?.endExpr}
> >
<Field <Field
type="text" type="text"
name="ganttOptionDto.progressExpr" name="ganttOptionDto.endExpr"
placeholder={translate('::ListForms.ListFormEdit.ProgressExpr')} placeholder={translate('::ListForms.ListFormEdit.EndExpr')}
> >
{({ field, form }: FieldProps<SelectBoxOption>) => ( {({ field, form }: FieldProps<SelectBoxOption>) => (
<Select <Select
field={field} field={field}
form={form} form={form}
isClearable={true} isClearable={true}
options={fieldList} options={fieldList}
value={fieldList?.filter( value={fieldList?.filter(
(option) => option.value === values.ganttOptionDto.progressExpr, (option) => option.value === values.ganttOptionDto.endExpr,
)}
onChange={(option) => form.setFieldValue(field.name, option?.value)}
/>
)} )}
onChange={(option) => form.setFieldValue(field.name, option?.value)} </Field>
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.ProgressExpr')}
invalid={
errors.ganttOptionDto?.progressExpr && touched.ganttOptionDto?.progressExpr
}
errorMessage={errors.ganttOptionDto?.progressExpr}
>
<Field
type="text"
name="ganttOptionDto.progressExpr"
placeholder={translate('::ListForms.ListFormEdit.ProgressExpr')}
>
{({ field, form }: FieldProps<SelectBoxOption>) => (
<Select
field={field}
form={form}
isClearable={true}
options={fieldList}
value={fieldList?.filter(
(option) => option.value === values.ganttOptionDto.progressExpr,
)}
onChange={(option) => form.setFieldValue(field.name, option?.value)}
/>
)}
</Field>
</FormItem>
</Card>
<Card className="mt-4">
<h5 className="mb-4">
{translate('::ListForms.SchedulerOptions.InteractionSettings')}
</h5>
<FormItem
label={translate('::ListForms.ListFormEdit.AllowEditing')}
invalid={
errors.ganttOptionDto?.allowEditing && touched.ganttOptionDto?.allowEditing
}
errorMessage={errors.ganttOptionDto?.allowEditing}
>
<Field
name="ganttOptionDto.allowEditing"
placeholder={translate('::ListForms.ListFormEdit.AllowEditing')}
component={Checkbox}
/> />
)} </FormItem>
</Field>
</FormItem>
<FormItem <FormItem
label={translate('::ListForms.ListFormEdit.AllowDependencyAdding')} label={translate('::ListForms.ListFormEdit.AllowTaskAdding')}
invalid={ invalid={
errors.ganttOptionDto?.allowDependencyAdding && touched.ganttOptionDto?.allowDependencyAdding errors.ganttOptionDto?.allowTaskAdding &&
} touched.ganttOptionDto?.allowTaskAdding
errorMessage={errors.ganttOptionDto?.allowDependencyAdding} }
> errorMessage={errors.ganttOptionDto?.allowTaskAdding}
<Field >
name="ganttOptionDto.allowDependencyAdding" <Field
placeholder={translate('::ListForms.ListFormEdit.AllowDependencyAdding')} name="ganttOptionDto.allowTaskAdding"
component={Checkbox} placeholder={translate('::ListForms.ListFormEdit.AllowTaskAdding')}
/> component={Checkbox}
</FormItem> />
</FormItem>
<FormItem <FormItem
label={translate('::ListForms.ListFormEdit.AllowDependencyDeleting')} label={translate('::ListForms.ListFormEdit.AllowTaskUpdating')}
invalid={ invalid={
errors.ganttOptionDto?.allowDependencyDeleting && touched.ganttOptionDto?.allowDependencyDeleting errors.ganttOptionDto?.allowTaskUpdating &&
} touched.ganttOptionDto?.allowTaskUpdating
errorMessage={errors.ganttOptionDto?.allowDependencyDeleting} }
> errorMessage={errors.ganttOptionDto?.allowTaskUpdating}
<Field >
name="ganttOptionDto.allowDependencyDeleting" <Field
placeholder={translate('::ListForms.ListFormEdit.AllowDependencyDeleting')} name="ganttOptionDto.allowTaskUpdating"
component={Checkbox} placeholder={translate('::ListForms.ListFormEdit.AllowTaskUpdating')}
/> component={Checkbox}
</FormItem> />
</FormItem>
<FormItem <FormItem
label={translate('::ListForms.ListFormEdit.AllowResourceAdding')} label={translate('::ListForms.ListFormEdit.AllowTaskDeleting')}
invalid={ invalid={
errors.ganttOptionDto?.allowResourceAdding && touched.ganttOptionDto?.allowResourceAdding errors.ganttOptionDto?.allowTaskDeleting &&
} touched.ganttOptionDto?.allowTaskDeleting
errorMessage={errors.ganttOptionDto?.allowResourceAdding} }
> errorMessage={errors.ganttOptionDto?.allowTaskDeleting}
<Field >
name="ganttOptionDto.allowResourceAdding" <Field
placeholder={translate('::ListForms.ListFormEdit.AllowResourceAdding')} name="ganttOptionDto.allowTaskDeleting"
component={Checkbox} placeholder={translate('::ListForms.ListFormEdit.AllowTaskDeleting')}
/> component={Checkbox}
</FormItem> />
</FormItem>
<FormItem <FormItem
label={translate('::ListForms.ListFormEdit.AllowResourceDeleting')} label={translate('::ListForms.ListFormEdit.AllowDependencyAdding')}
invalid={ invalid={
errors.ganttOptionDto?.allowResourceDeleting && touched.ganttOptionDto?.allowResourceDeleting errors.ganttOptionDto?.allowDependencyAdding &&
} touched.ganttOptionDto?.allowDependencyAdding
errorMessage={errors.ganttOptionDto?.allowResourceDeleting} }
> errorMessage={errors.ganttOptionDto?.allowDependencyAdding}
<Field >
name="ganttOptionDto.allowResourceDeleting" <Field
placeholder={translate('::ListForms.ListFormEdit.AllowResourceDeleting')} name="ganttOptionDto.allowDependencyAdding"
component={Checkbox} placeholder={translate('::ListForms.ListFormEdit.AllowDependencyAdding')}
/> component={Checkbox}
</FormItem> />
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.AllowDependencyDeleting')}
invalid={
errors.ganttOptionDto?.allowDependencyDeleting &&
touched.ganttOptionDto?.allowDependencyDeleting
}
errorMessage={errors.ganttOptionDto?.allowDependencyDeleting}
>
<Field
name="ganttOptionDto.allowDependencyDeleting"
placeholder={translate('::ListForms.ListFormEdit.AllowDependencyDeleting')}
component={Checkbox}
/>
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.AllowResourceAdding')}
invalid={
errors.ganttOptionDto?.allowResourceAdding &&
touched.ganttOptionDto?.allowResourceAdding
}
errorMessage={errors.ganttOptionDto?.allowResourceAdding}
>
<Field
name="ganttOptionDto.allowResourceAdding"
placeholder={translate('::ListForms.ListFormEdit.AllowResourceAdding')}
component={Checkbox}
/>
</FormItem>
<FormItem
label={translate('::ListForms.ListFormEdit.AllowResourceDeleting')}
invalid={
errors.ganttOptionDto?.allowResourceDeleting &&
touched.ganttOptionDto?.allowResourceDeleting
}
errorMessage={errors.ganttOptionDto?.allowResourceDeleting}
>
<Field
name="ganttOptionDto.allowResourceDeleting"
placeholder={translate('::ListForms.ListFormEdit.AllowResourceDeleting')}
component={Checkbox}
/>
</FormItem>
</Card>
</div>
<Button block variant="solid" loading={isSubmitting} type="submit" className="my-2"> <Button block variant="solid" loading={isSubmitting} type="submit" className="my-2">
{isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')} {isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}

View file

@ -83,7 +83,7 @@ function FormTabScheduler(props: FormEditProps) {
<Form> <Form>
<FormContainer size="sm"> <FormContainer size="sm">
<div className="grid grid-cols-1 md:grid-cols-2 gap-3"> <div className="grid grid-cols-1 md:grid-cols-2 gap-3">
<Card> <Card className="mt-4">
<h5 className="mb-4">{translate('::ListForms.SchedulerOptions.BasicSettings')}</h5> <h5 className="mb-4">{translate('::ListForms.SchedulerOptions.BasicSettings')}</h5>
<FormItem <FormItem
@ -181,6 +181,98 @@ function FormTabScheduler(props: FormEditProps) {
</FormItem> </FormItem>
</Card> </Card>
<Card className="mt-4">
<h5 className="mb-4">{translate('::ListForms.SchedulerOptions.ViewSettings')}</h5>
<FormItem label={translate('::ListForms.SchedulerOptions.DefaultView')}>
<Field name="schedulerOptionDto.defaultView">
{({ field, form }: FieldProps) => (
<Select
field={field}
form={form}
options={schedulerViewOptions}
value={schedulerViewOptions.find(
(option) => option.value === values.schedulerOptionDto?.defaultView,
)}
onChange={(option) => form.setFieldValue(field.name, option?.value)}
/>
)}
</Field>
</FormItem>
<FormItem label={translate('::ListForms.SchedulerOptions.FirstDayOfWeek')}>
<Field name="schedulerOptionDto.firstDayOfWeek">
{({ field, form }: FieldProps) => (
<Select
field={field}
form={form}
options={firstDayOfWeekOptions}
value={firstDayOfWeekOptions.find(
(option) => option.value === values.schedulerOptionDto?.firstDayOfWeek,
)}
onChange={(option) => form.setFieldValue(field.name, option?.value)}
/>
)}
</Field>
</FormItem>
<FormItem
label={translate('::ListForms.SchedulerOptions.StartDayHour')}
invalid={
errors.schedulerOptionDto?.startDayHour &&
touched.schedulerOptionDto?.startDayHour
}
errorMessage={errors.schedulerOptionDto?.startDayHour}
>
<Field
type="number"
autoComplete="off"
name="schedulerOptionDto.startDayHour"
placeholder="8"
component={Input}
min={0}
max={23}
/>
</FormItem>
<FormItem
label={translate('::ListForms.SchedulerOptions.EndDayHour')}
invalid={
errors.schedulerOptionDto?.endDayHour && touched.schedulerOptionDto?.endDayHour
}
errorMessage={errors.schedulerOptionDto?.endDayHour}
>
<Field
type="number"
autoComplete="off"
name="schedulerOptionDto.endDayHour"
placeholder="18"
component={Input}
min={0}
max={24}
/>
</FormItem>
<FormItem
label={translate('::ListForms.SchedulerOptions.CellDuration')}
invalid={
errors.schedulerOptionDto?.cellDuration &&
touched.schedulerOptionDto?.cellDuration
}
errorMessage={errors.schedulerOptionDto?.cellDuration}
>
<Field
type="number"
autoComplete="off"
name="schedulerOptionDto.cellDuration"
component={Input}
placeholder="30"
min={5}
step={5}
/>
</FormItem>
</Card>
<Card className="mt-4"> <Card className="mt-4">
<h5 className="mb-4"> <h5 className="mb-4">
{translate('::ListForms.SchedulerOptions.RecurrenceSettings')} {translate('::ListForms.SchedulerOptions.RecurrenceSettings')}
@ -237,96 +329,11 @@ function FormTabScheduler(props: FormEditProps) {
</FormItem> </FormItem>
</Card> </Card>
<Card className="mt-4">
<h5 className="mb-4">{translate('::ListForms.SchedulerOptions.ViewSettings')}</h5>
<FormItem label={translate('::ListForms.SchedulerOptions.DefaultView')}>
<Field name="schedulerOptionDto.defaultView">
{({ field, form }: FieldProps) => (
<Select
field={field}
form={form}
options={schedulerViewOptions}
value={schedulerViewOptions.find(
(option) => option.value === values.schedulerOptionDto?.defaultView,
)}
onChange={(option) => form.setFieldValue(field.name, option?.value)}
/>
)}
</Field>
</FormItem>
<FormItem label={translate('::ListForms.SchedulerOptions.FirstDayOfWeek')}>
<Field name="schedulerOptionDto.firstDayOfWeek">
{({ field, form }: FieldProps) => (
<Select
field={field}
form={form}
options={firstDayOfWeekOptions}
value={firstDayOfWeekOptions.find(
(option) => option.value === values.schedulerOptionDto?.firstDayOfWeek,
)}
onChange={(option) => form.setFieldValue(field.name, option?.value)}
/>
)}
</Field>
</FormItem>
<FormItem
label={translate('::ListForms.SchedulerOptions.StartDayHour')}
invalid={errors.schedulerOptionDto?.startDayHour && touched.schedulerOptionDto?.startDayHour}
errorMessage={errors.schedulerOptionDto?.startDayHour}
>
<Field
type="number"
autoComplete="off"
name="schedulerOptionDto.startDayHour"
placeholder="8"
component={Input}
min={0}
max={23}
/>
</FormItem>
<FormItem
label={translate('::ListForms.SchedulerOptions.EndDayHour')}
invalid={errors.schedulerOptionDto?.endDayHour && touched.schedulerOptionDto?.endDayHour}
errorMessage={errors.schedulerOptionDto?.endDayHour}
>
<Field
type="number"
autoComplete="off"
name="schedulerOptionDto.endDayHour"
placeholder="18"
component={Input}
min={0}
max={24}
/>
</FormItem>
<FormItem
label={translate('::ListForms.SchedulerOptions.CellDuration')}
invalid={errors.schedulerOptionDto?.cellDuration && touched.schedulerOptionDto?.cellDuration}
errorMessage={errors.schedulerOptionDto?.cellDuration}
>
<Field
type="number"
autoComplete="off"
name="schedulerOptionDto.cellDuration"
component={Input}
placeholder="30"
min={5}
step={5}
/>
</FormItem>
</Card>
<Card className="mt-4"> <Card className="mt-4">
<h5 className="mb-4"> <h5 className="mb-4">
{translate('::ListForms.SchedulerOptions.InteractionSettings')} {translate('::ListForms.SchedulerOptions.InteractionSettings')}
</h5> </h5>
<FormItem label={translate('::ListForms.SchedulerOptions.ShowAllDayPanel')}> <FormItem label={translate('::ListForms.SchedulerOptions.ShowAllDayPanel')}>
<Field name="schedulerOptionDto.showAllDayPanel" component={Checkbox} /> <Field name="schedulerOptionDto.showAllDayPanel" component={Checkbox} />
</FormItem> </FormItem>
@ -342,13 +349,24 @@ function FormTabScheduler(props: FormEditProps) {
<FormItem label={translate('::ListForms.SchedulerOptions.AllowDragging')}> <FormItem label={translate('::ListForms.SchedulerOptions.AllowDragging')}>
<Field name="schedulerOptionDto.allowDragging" component={Checkbox} /> <Field name="schedulerOptionDto.allowDragging" component={Checkbox} />
</FormItem> </FormItem>
<FormItem label={translate('::ListForms.SchedulerOptions.AllowAdding')}>
<Field name="schedulerOptionDto.allowAdding" component={Checkbox} />
</FormItem>
<FormItem label={translate('::ListForms.SchedulerOptions.AllowUpdating')}>
<Field name="schedulerOptionDto.allowUpdating" component={Checkbox} />
</FormItem>
<FormItem label={translate('::ListForms.SchedulerOptions.AllowDeleting')}>
<Field name="schedulerOptionDto.allowDeleting" component={Checkbox} />
</FormItem>
</Card> </Card>
</div> </div>
<FormItem className="mt-4">
<Button variant="solid" type="submit" loading={isSubmitting}> <Button block variant="solid" loading={isSubmitting} type="submit" className="my-2">
{translate('::Submit')} {isSubmitting ? translate('::SavingWithThreeDot') : translate('::Save')}
</Button> </Button>{' '}
</FormItem>
</FormContainer> </FormContainer>
</Form> </Form>
)} )}

View file

@ -249,8 +249,8 @@ const GanttView = (props: GanttViewProps) => {
<Item name="separator" /> <Item name="separator" />
<Item name="collapseAll" /> <Item name="collapseAll" />
<Item name="expandAll" /> <Item name="expandAll" />
{gridDto.gridOptions.editingOptionDto?.allowAdding && <Item name="addTask" />} {gridDto.gridOptions.ganttOptionDto?.allowTaskAdding && <Item name="addTask" />}
{gridDto.gridOptions.editingOptionDto?.allowDeleting && ( {gridDto.gridOptions.ganttOptionDto?.allowTaskDeleting && (
<Item name="deleteTask" /> <Item name="deleteTask" />
)} )}
<Item name="separator" /> <Item name="separator" />
@ -285,14 +285,17 @@ const GanttView = (props: GanttViewProps) => {
</Toolbar> </Toolbar>
<Editing <Editing
enabled={gridDto.gridOptions.editingOptionDto?.allowUpdating} enabled={gridDto.gridOptions.ganttOptionDto?.allowEditing}
allowTaskAdding={gridDto.gridOptions.editingOptionDto?.allowAdding} allowTaskAdding={gridDto.gridOptions.ganttOptionDto?.allowTaskAdding}
allowTaskUpdating={gridDto.gridOptions.editingOptionDto?.allowUpdating} allowTaskUpdating={gridDto.gridOptions.ganttOptionDto?.allowTaskUpdating}
allowTaskDeleting={gridDto.gridOptions.editingOptionDto?.allowDeleting} allowTaskDeleting={gridDto.gridOptions.ganttOptionDto?.allowTaskDeleting}
allowDependencyAdding={false}
allowDependencyDeleting={false} allowDependencyAdding={gridDto.gridOptions.ganttOptionDto?.allowDependencyAdding}
allowResourceAdding={false} allowDependencyDeleting={
allowResourceDeleting={false} gridDto.gridOptions.ganttOptionDto?.allowDependencyDeleting
}
allowResourceAdding={gridDto.gridOptions.ganttOptionDto?.allowResourceAdding}
allowResourceDeleting={gridDto.gridOptions.ganttOptionDto?.allowResourceDeleting}
/> />
<FilterRow visible={gridDto.gridOptions.filterRowDto?.visible}></FilterRow> <FilterRow visible={gridDto.gridOptions.filterRowDto?.visible}></FilterRow>

View file

@ -257,9 +257,9 @@ const SchedulerView = (props: SchedulerViewProps) => {
</Toolbar> </Toolbar>
<Editing <Editing
allowAdding={gridDto.gridOptions.editingOptionDto?.allowAdding ?? false} allowAdding={gridDto.gridOptions.schedulerOptionDto?.allowAdding ?? false}
allowUpdating={gridDto.gridOptions.editingOptionDto?.allowUpdating ?? false} allowUpdating={gridDto.gridOptions.schedulerOptionDto?.allowUpdating ?? false}
allowDeleting={gridDto.gridOptions.editingOptionDto?.allowDeleting ?? false} allowDeleting={gridDto.gridOptions.schedulerOptionDto?.allowDeleting ?? false}
allowResizing={gridDto.gridOptions.schedulerOptionDto?.allowResizing ?? false} allowResizing={gridDto.gridOptions.schedulerOptionDto?.allowResizing ?? false}
allowDragging={gridDto.gridOptions.schedulerOptionDto?.allowDragging ?? false} allowDragging={gridDto.gridOptions.schedulerOptionDto?.allowDragging ?? false}
/> />