From 56b74b85a5f9d2004fb45bcdaf133658a2d9ffb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Sun, 9 Aug 2026 02:33:32 +0300 Subject: [PATCH] =?UTF-8?q?Claude=20g=C3=BCncellemesi=20FormTab=20g=C3=BCn?= =?UTF-8?q?cellemeri=20optimizasyon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listForm/edit/ChartTabAnnotations.tsx | 11 +- .../admin/listForm/edit/ChartTabAxis.tsx | 12 +- .../admin/listForm/edit/ChartTabPanes.tsx | 13 +- .../admin/listForm/edit/ChartTabSeries.tsx | 11 +- .../edit/FormTabDatabaseDataSource.tsx | 1 + .../listForm/edit/FormTabDatabaseDelete.tsx | 1 + .../listForm/edit/FormTabDatabaseInsert.tsx | 1 + .../listForm/edit/FormTabDatabaseSelect.tsx | 1 + .../listForm/edit/FormTabDatabaseUpdate.tsx | 1 + .../listForm/edit/FormTabPermissions.tsx | 18 +- .../admin/listForm/edit/FormTabWorkflow.tsx | 1 + .../edit/form-fields/FormFieldEdit.tsx | 21 +- .../FormFieldTabConditionalFormatting.tsx | 40 +-- .../form-fields/FormFieldTabCustomization.tsx | 25 +- .../edit/form-fields/FormFieldTabDetails.tsx | 61 ++--- .../form-fields/FormFieldTabGroupSummary.tsx | 188 ------------- .../form-fields/FormFieldTabJoinOptions.tsx | 47 +--- .../edit/form-fields/FormFieldTabLookup.tsx | 48 +--- .../edit/form-fields/FormFieldTabOptions.tsx | 19 +- .../form-fields/FormFieldTabPermissions.tsx | 22 +- .../form-fields/FormFieldTabPivotSetting.tsx | 121 ++------ .../edit/form-fields/FormFieldTabSummary.tsx | 119 ++++++++ .../form-fields/FormFieldTabTotalSummary.tsx | 188 ------------- .../FormFieldTabValidationRules.tsx | 43 +-- .../listForm/edit/form-fields/FormFields.tsx | 258 +++++------------- .../JsonRowOpDialogAxis.tsx | 5 +- .../JsonRowOpDialogSeries.tsx | 2 +- .../listForm/edit/shared/SelectField.tsx | 54 ++++ 28 files changed, 393 insertions(+), 939 deletions(-) delete mode 100644 ui/src/views/admin/listForm/edit/form-fields/FormFieldTabGroupSummary.tsx create mode 100644 ui/src/views/admin/listForm/edit/form-fields/FormFieldTabSummary.tsx delete mode 100644 ui/src/views/admin/listForm/edit/form-fields/FormFieldTabTotalSummary.tsx create mode 100644 ui/src/views/admin/listForm/edit/shared/SelectField.tsx diff --git a/ui/src/views/admin/listForm/edit/ChartTabAnnotations.tsx b/ui/src/views/admin/listForm/edit/ChartTabAnnotations.tsx index 6aac15b5..3097e96f 100644 --- a/ui/src/views/admin/listForm/edit/ChartTabAnnotations.tsx +++ b/ui/src/views/admin/listForm/edit/ChartTabAnnotations.tsx @@ -20,7 +20,7 @@ import Tr from '@/components/ui/Table/Tr' import { SelectBoxOption } from '@/types/shared' import { Field, FieldProps, Form, Formik } from 'formik' import { FaEdit, FaFileMedical, FaTrash } from 'react-icons/fa' -import { object, string } from 'yup' +import { object } from 'yup' import { FormEditProps } from './FormEdit' import { useStoreState } from '@/store/store' import { useLocalization } from '@/utils/hooks/useLocalization' @@ -35,9 +35,12 @@ import { JsonRowDialogData } from './json-row-operations/types' import { useState } from 'react' import JsonRowOpDialogAnnotation from './json-row-operations/JsonRowOpDialogAnnotation' -const schema = object().shape({ - name: string().required(), -}) +// Bu sekme ListForm nesnesinin tamamını düzenler; `name` / `title` / `height` +// gibi alanların girdisi burada yok. Şema bu alanları zorunlu tutuyordu ve +// ListForm'da boş olduklarında Kaydet hiçbir mesaj vermeden çalışmıyordu. +// (Zorunluluk, aynı adları gerçekten alan olarak barındıran JsonRowOpDialog* +// dosyalarından kopyalanmış.) +const schema = object() function ChartTabAnnotations(props: FormEditProps) { const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false) diff --git a/ui/src/views/admin/listForm/edit/ChartTabAxis.tsx b/ui/src/views/admin/listForm/edit/ChartTabAxis.tsx index 11e298a6..28588c78 100644 --- a/ui/src/views/admin/listForm/edit/ChartTabAxis.tsx +++ b/ui/src/views/admin/listForm/edit/ChartTabAxis.tsx @@ -24,7 +24,7 @@ import { FormEditProps } from '../../listForm/edit/FormEdit' import { useLocalization } from '@/utils/hooks/useLocalization' import { useStoreState } from '@/store/store' import { ListFormEditTabs } from '@/proxy/admin/list-form/options' -import { object, string } from 'yup' +import { object } from 'yup' import { chartArgumentAxisHoverModeListOptions, chartArgumentAxisTypeListOptions, @@ -37,10 +37,12 @@ import { useState } from 'react' import { JsonRowDialogData } from './json-row-operations/types' import JsonRowOpDialogAxis from './json-row-operations/JsonRowOpDialogAxis' -const schema = object().shape({ - name: string().required(), - title: string().required(), -}) +// Bu sekme ListForm nesnesinin tamamını düzenler; `name` / `title` / `height` +// gibi alanların girdisi burada yok. Şema bu alanları zorunlu tutuyordu ve +// ListForm'da boş olduklarında Kaydet hiçbir mesaj vermeden çalışmıyordu. +// (Zorunluluk, aynı adları gerçekten alan olarak barındıran JsonRowOpDialog* +// dosyalarından kopyalanmış.) +const schema = object() function ChartTabAxis(props: FormEditProps) { const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false) diff --git a/ui/src/views/admin/listForm/edit/ChartTabPanes.tsx b/ui/src/views/admin/listForm/edit/ChartTabPanes.tsx index b747ab95..d1d8f61e 100644 --- a/ui/src/views/admin/listForm/edit/ChartTabPanes.tsx +++ b/ui/src/views/admin/listForm/edit/ChartTabPanes.tsx @@ -10,16 +10,17 @@ import { FormEditProps } from '../../listForm/edit/FormEdit' import { useStoreState } from '@/store/store' import { useLocalization } from '@/utils/hooks/useLocalization' import { ListFormEditTabs } from '@/proxy/admin/list-form/options' -import { object, string } from 'yup' +import { object } from 'yup' import { JsonRowDialogData } from './json-row-operations/types' import { useState } from 'react' import JsonRowOpDialogPane from './json-row-operations/JsonRowOpDialogPane' -const schema = object().shape({ - height: string().required(), - name: string().required(), - backgroundColor: string().notRequired(), -}) +// Bu sekme ListForm nesnesinin tamamını düzenler; `name` / `title` / `height` +// gibi alanların girdisi burada yok. Şema bu alanları zorunlu tutuyordu ve +// ListForm'da boş olduklarında Kaydet hiçbir mesaj vermeden çalışmıyordu. +// (Zorunluluk, aynı adları gerçekten alan olarak barındıran JsonRowOpDialog* +// dosyalarından kopyalanmış.) +const schema = object() function ChartTabPanes(props: FormEditProps) { const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false) diff --git a/ui/src/views/admin/listForm/edit/ChartTabSeries.tsx b/ui/src/views/admin/listForm/edit/ChartTabSeries.tsx index bf0338d6..db9488e2 100644 --- a/ui/src/views/admin/listForm/edit/ChartTabSeries.tsx +++ b/ui/src/views/admin/listForm/edit/ChartTabSeries.tsx @@ -28,7 +28,7 @@ import { FormEditProps } from '../../listForm/edit/FormEdit' import { ListFormEditTabs } from '@/proxy/admin/list-form/options' import { useLocalization } from '@/utils/hooks/useLocalization' import { useStoreState } from '@/store/store' -import { object, string } from 'yup' +import { object } from 'yup' import { chartSeriesTypeOptions, chartSeriesSelectionModeOptions, @@ -41,9 +41,12 @@ import CreatableSelect from 'react-select/creatable' import { getListFormFields } from '@/services/admin/list-form-field.service' import groupBy from 'lodash/groupBy' -const schema = object().shape({ - name: string().required(), -}) +// Bu sekme ListForm nesnesinin tamamını düzenler; `name` / `title` / `height` +// gibi alanların girdisi burada yok. Şema bu alanları zorunlu tutuyordu ve +// ListForm'da boş olduklarında Kaydet hiçbir mesaj vermeden çalışmıyordu. +// (Zorunluluk, aynı adları gerçekten alan olarak barındıran JsonRowOpDialog* +// dosyalarından kopyalanmış.) +const schema = object() function ChartTabSeries(props: FormEditProps & { listFormCode: string }) { const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false) diff --git a/ui/src/views/admin/listForm/edit/FormTabDatabaseDataSource.tsx b/ui/src/views/admin/listForm/edit/FormTabDatabaseDataSource.tsx index 6538b858..78301cb5 100644 --- a/ui/src/views/admin/listForm/edit/FormTabDatabaseDataSource.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabDatabaseDataSource.tsx @@ -120,6 +120,7 @@ function FormTabDatabaseDataSource(props: FormEditProps) { return ( { diff --git a/ui/src/views/admin/listForm/edit/FormTabDatabaseDelete.tsx b/ui/src/views/admin/listForm/edit/FormTabDatabaseDelete.tsx index cb7bef53..d0f89aca 100644 --- a/ui/src/views/admin/listForm/edit/FormTabDatabaseDelete.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabDatabaseDelete.tsx @@ -42,6 +42,7 @@ function FormTabDatabaseDelete({ return ( { diff --git a/ui/src/views/admin/listForm/edit/FormTabDatabaseInsert.tsx b/ui/src/views/admin/listForm/edit/FormTabDatabaseInsert.tsx index 0392035a..4d855163 100644 --- a/ui/src/views/admin/listForm/edit/FormTabDatabaseInsert.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabDatabaseInsert.tsx @@ -42,6 +42,7 @@ function FormTabDatabaseInsert({ return ( { diff --git a/ui/src/views/admin/listForm/edit/FormTabDatabaseSelect.tsx b/ui/src/views/admin/listForm/edit/FormTabDatabaseSelect.tsx index 183b83be..167713d0 100644 --- a/ui/src/views/admin/listForm/edit/FormTabDatabaseSelect.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabDatabaseSelect.tsx @@ -42,6 +42,7 @@ function FormTabDatabaseSelect({ return ( { diff --git a/ui/src/views/admin/listForm/edit/FormTabDatabaseUpdate.tsx b/ui/src/views/admin/listForm/edit/FormTabDatabaseUpdate.tsx index 54ac19d1..1c747ce4 100644 --- a/ui/src/views/admin/listForm/edit/FormTabDatabaseUpdate.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabDatabaseUpdate.tsx @@ -42,6 +42,7 @@ function FormTabDatabaseUpdate({ return ( { diff --git a/ui/src/views/admin/listForm/edit/FormTabPermissions.tsx b/ui/src/views/admin/listForm/edit/FormTabPermissions.tsx index 3866cd0a..cff61904 100644 --- a/ui/src/views/admin/listForm/edit/FormTabPermissions.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabPermissions.tsx @@ -11,14 +11,18 @@ import { FormEditProps } from './FormEdit' import { PermissionDefinitionRecord } from '@/proxy/admin/models' import { getPermissionsList } from '@/services/identity.service' +// Alanlar `permissionDto.*` altında; şema düz kökten tanımlandığı için hiçbir +// şeyi doğrulamıyordu. const schema = object().shape({ - c: string(), - r: string(), - u: string(), - d: string(), - e: string(), - i: string(), - n: string(), + permissionDto: object().shape({ + c: string().nullable(), + r: string().nullable(), + u: string().nullable(), + d: string().nullable(), + e: string().nullable(), + i: string().nullable(), + n: string().nullable(), + }), }) function FormTabPermissions(props: FormEditProps) { diff --git a/ui/src/views/admin/listForm/edit/FormTabWorkflow.tsx b/ui/src/views/admin/listForm/edit/FormTabWorkflow.tsx index 82af6519..47dd98d2 100644 --- a/ui/src/views/admin/listForm/edit/FormTabWorkflow.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabWorkflow.tsx @@ -329,6 +329,7 @@ export function FormTabWorkflow( return (
{ diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldEdit.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldEdit.tsx index 91347bef..1201cdbe 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldEdit.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldEdit.tsx @@ -2,21 +2,20 @@ import { Tabs } from '@/components/ui' import TabContent from '@/components/ui/Tabs/TabContent' import TabList from '@/components/ui/Tabs/TabList' import TabNav from '@/components/ui/Tabs/TabNav' -import { ColumnFormatEditDto } from '@/proxy/admin/list-form-field/models' +import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models' import { useLocalization } from '@/utils/hooks/useLocalization' import FormFieldTabConditionalFormatting from './FormFieldTabConditionalFormatting' import FormFieldTabCssOptions from './FormFieldTabCssOptions' import FormFieldTabCustomization from './FormFieldTabCustomization' import FormFieldTabDetails from './FormFieldTabDetails' import FormFieldTabFiltering from './FormFieldTabFiltering' -import FormFieldTabGroupSummary from './FormFieldTabGroupSummary' import FormFieldTabGrouping from './FormFieldTabGrouping' import FormFieldTabHeadering from './FormFieldTabHeadering' import FormFieldTabJoinOptions from './FormFieldTabJoinOptions' import FormFieldTabLookup from './FormFieldTabLookup' import FormFieldTabOptions from './FormFieldTabOptions' import FormFieldTabPermissions from './FormFieldTabPermissions' -import FormFieldTabTotalSummary from './FormFieldTabTotalSummary' +import FormFieldTabSummary from './FormFieldTabSummary' import FormFieldTabValidationRules from './FormFieldTabValidationRules' import { FormFieldEditProps } from './FormFields' import FormFieldTabPivotSetting from './FormFieldTabPivotSetting' @@ -104,10 +103,22 @@ function FormFieldEdit({ - + - + diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabConditionalFormatting.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabConditionalFormatting.tsx index 59013bfa..7a993e1c 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabConditionalFormatting.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabConditionalFormatting.tsx @@ -7,7 +7,6 @@ import { FormItem, Input, Notification, - Select, Table, toast, } from '@/components/ui' @@ -20,7 +19,7 @@ import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-f import { useLocalization } from '@/utils/hooks/useLocalization' import setNull from '@/utils/setNull' -import { Field, FieldProps, Form, Formik } from 'formik' +import { Field, Form, Formik } from 'formik' import { useState } from 'react' import { FaEdit, FaPlusSquare, FaCheck, FaTrashAlt } from 'react-icons/fa' import { object, string } from 'yup' @@ -32,6 +31,7 @@ import { ColumnStylingDto, ColumnValidationComparisonTypeEnum, } from '@/proxy/form/models' +import SelectField from '../shared/SelectField' const NewItem: ColumnStylingDto = { rowType: ColumnRowTypeListOptions.Data, @@ -225,19 +225,11 @@ function FormFieldTabConditionalFormatting({ invalid={errors.rowType && touched.rowType} errorMessage={errors.rowType} > - - {({ field, form }: FieldProps) => ( - option.value === values.condition, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + - - {({ field, form }: FieldProps) => ( - option.value === values.sourceDbType, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + - - {({ field, form }: FieldProps) => ( - option.value === values.format, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + ({ - value: field.fieldName, - label: `${field.fieldName}`, - })) - : [] - - return ( - - { - await onSubmit(ListFormFieldEditTabs.GroupSummaryForm, values, formikHelpers) - }} - > - {({ touched, errors, isSubmitting, values }) => ( -
- - - - {({ field, form }: FieldProps) => ( - option.value === values.columnGroupSummaryDto.valueFormat, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.columnJoinTableDto.joinType, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + options={gridColumnJoinTypeListOptions} + /> - - {({ field, form }: FieldProps) => ( - option.value === values.lookupDto?.dataSourceType, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + options={columnLookupDataSourceTypeListOptions} + /> - - {({ field, form }: FieldProps) => ( - option.value === values.sortDirection, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + - - {({ field, form }: FieldProps) => ( - option.value === values.pivotSettingsDto?.area, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + options={pivotSettingsAreaOptions} + /> - - {({ field, form }: FieldProps) => ( - option.value === values.pivotSettingsDto?.summaryType, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + options={columnSummaryTypeListOptions} + /> @@ -144,25 +101,10 @@ function FormFieldTabPivotSetting({ } errorMessage={errors.pivotSettingsDto?.groupInterval} > - - {({ field, form }: FieldProps) => ( - option.value === values.pivotSettingsDto?.sortOrder, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + options={pivotSortDirectionOptions} + /> + object().shape({ + [dtoKey]: object().shape({ + summaryType: string().nullable(), + valueFormat: string().nullable(), + showInGroupFooter: bool(), + alignByColumn: bool(), + displayFormat: string().nullable(), + showInColumn: string().nullable(), + }), + }) + +function FormFieldTabSummary({ + initialValues, + onSubmit, + fields, + dtoKey, + editTab, +}: { + initialValues: ColumnFormatEditDto + fields: ColumnFormatEditDto[] + dtoKey: SummaryDtoKey + editTab: string +} & FormFieldEditProps) { + const { translate } = useLocalization() + + const fieldList: SelectBoxOption[] = fields.map((field) => ({ + value: field.fieldName, + label: `${field.fieldName}`, + })) + + const schema = buildSchema(dtoKey) + const label = (key: string) => translate(`::ListForms.ListFormFieldEdit.${key}`) + + return ( + + { + await onSubmit(editTab, values, formikHelpers) + }} + > + {({ isSubmitting }) => ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + )} + + + ) +} + +export default FormFieldTabSummary diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabTotalSummary.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabTotalSummary.tsx deleted file mode 100644 index 9f300dc6..00000000 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabTotalSummary.tsx +++ /dev/null @@ -1,188 +0,0 @@ -import { Container } from '@/components/shared' -import { Button, Checkbox, FormContainer, FormItem, Input, Select } from '@/components/ui' -import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models' -import { useLocalization } from '@/utils/hooks/useLocalization' -import { Field, FieldProps, Form, Formik } from 'formik' -import { bool, object, string } from 'yup' -import { columnSummaryTypeListOptions } from '../options' -import { FormFieldEditProps } from './FormFields' -import { tooltipFormatListOptions } from '@/proxy/admin/list-form/options' -import { SelectBoxOption } from '@/types/shared' - -const schema = object().shape({ - columnTotalSummaryDto: object() - .shape({ - summaryType: string(), - valueFormat: string(), - showInGroupFooter: bool(), - alignByColumn: bool(), - displayFormat: string(), - showInColumn: string(), - }) - .required(), -}) - -function FormFieldTabTotalSummary({ - initialValues, - onSubmit, - fields, -}: { - initialValues: ColumnFormatEditDto - fields: ColumnFormatEditDto[] -} & FormFieldEditProps) { - const { translate } = useLocalization() - - const fieldList: SelectBoxOption[] = fields.length - ? fields.map((field) => ({ - value: field.fieldName, - label: `${field.fieldName}`, - })) - : [] - - return ( - - { - await onSubmit(ListFormFieldEditTabs.TotalSummaryForm, values, formikHelpers) - }} - > - {({ touched, errors, isSubmitting, values }) => ( -
- - - - {({ field, form }: FieldProps) => ( - option.value === values.columnTotalSummaryDto.valueFormat, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.type, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + - - {({ field, form }: FieldProps) => ( - option.value === values?.cultureName)} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - + - - {({ field, form }: FieldProps) => ( - option.value === values.userId)} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - +