Claude güncellemesi FormTab güncellemeri optimizasyon
This commit is contained in:
parent
0d27742f8c
commit
56b74b85a5
28 changed files with 393 additions and 939 deletions
|
|
@ -20,7 +20,7 @@ import Tr from '@/components/ui/Table/Tr'
|
||||||
import { SelectBoxOption } from '@/types/shared'
|
import { SelectBoxOption } from '@/types/shared'
|
||||||
import { Field, FieldProps, Form, Formik } from 'formik'
|
import { Field, FieldProps, Form, Formik } from 'formik'
|
||||||
import { FaEdit, FaFileMedical, FaTrash } from 'react-icons/fa'
|
import { FaEdit, FaFileMedical, FaTrash } from 'react-icons/fa'
|
||||||
import { object, string } from 'yup'
|
import { object } from 'yup'
|
||||||
import { FormEditProps } from './FormEdit'
|
import { FormEditProps } from './FormEdit'
|
||||||
import { useStoreState } from '@/store/store'
|
import { useStoreState } from '@/store/store'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
|
|
@ -35,9 +35,12 @@ import { JsonRowDialogData } from './json-row-operations/types'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import JsonRowOpDialogAnnotation from './json-row-operations/JsonRowOpDialogAnnotation'
|
import JsonRowOpDialogAnnotation from './json-row-operations/JsonRowOpDialogAnnotation'
|
||||||
|
|
||||||
const schema = object().shape({
|
// Bu sekme ListForm nesnesinin tamamını düzenler; `name` / `title` / `height`
|
||||||
name: string().required(),
|
// 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) {
|
function ChartTabAnnotations(props: FormEditProps) {
|
||||||
const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false)
|
const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false)
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ import { FormEditProps } from '../../listForm/edit/FormEdit'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import { useStoreState } from '@/store/store'
|
import { useStoreState } from '@/store/store'
|
||||||
import { ListFormEditTabs } from '@/proxy/admin/list-form/options'
|
import { ListFormEditTabs } from '@/proxy/admin/list-form/options'
|
||||||
import { object, string } from 'yup'
|
import { object } from 'yup'
|
||||||
import {
|
import {
|
||||||
chartArgumentAxisHoverModeListOptions,
|
chartArgumentAxisHoverModeListOptions,
|
||||||
chartArgumentAxisTypeListOptions,
|
chartArgumentAxisTypeListOptions,
|
||||||
|
|
@ -37,10 +37,12 @@ import { useState } from 'react'
|
||||||
import { JsonRowDialogData } from './json-row-operations/types'
|
import { JsonRowDialogData } from './json-row-operations/types'
|
||||||
import JsonRowOpDialogAxis from './json-row-operations/JsonRowOpDialogAxis'
|
import JsonRowOpDialogAxis from './json-row-operations/JsonRowOpDialogAxis'
|
||||||
|
|
||||||
const schema = object().shape({
|
// Bu sekme ListForm nesnesinin tamamını düzenler; `name` / `title` / `height`
|
||||||
name: string().required(),
|
// gibi alanların girdisi burada yok. Şema bu alanları zorunlu tutuyordu ve
|
||||||
title: string().required(),
|
// 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) {
|
function ChartTabAxis(props: FormEditProps) {
|
||||||
const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false)
|
const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false)
|
||||||
|
|
|
||||||
|
|
@ -10,16 +10,17 @@ import { FormEditProps } from '../../listForm/edit/FormEdit'
|
||||||
import { useStoreState } from '@/store/store'
|
import { useStoreState } from '@/store/store'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import { ListFormEditTabs } from '@/proxy/admin/list-form/options'
|
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 { JsonRowDialogData } from './json-row-operations/types'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import JsonRowOpDialogPane from './json-row-operations/JsonRowOpDialogPane'
|
import JsonRowOpDialogPane from './json-row-operations/JsonRowOpDialogPane'
|
||||||
|
|
||||||
const schema = object().shape({
|
// Bu sekme ListForm nesnesinin tamamını düzenler; `name` / `title` / `height`
|
||||||
height: string().required(),
|
// gibi alanların girdisi burada yok. Şema bu alanları zorunlu tutuyordu ve
|
||||||
name: string().required(),
|
// ListForm'da boş olduklarında Kaydet hiçbir mesaj vermeden çalışmıyordu.
|
||||||
backgroundColor: string().notRequired(),
|
// (Zorunluluk, aynı adları gerçekten alan olarak barındıran JsonRowOpDialog*
|
||||||
})
|
// dosyalarından kopyalanmış.)
|
||||||
|
const schema = object()
|
||||||
|
|
||||||
function ChartTabPanes(props: FormEditProps) {
|
function ChartTabPanes(props: FormEditProps) {
|
||||||
const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false)
|
const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false)
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ import { FormEditProps } from '../../listForm/edit/FormEdit'
|
||||||
import { ListFormEditTabs } from '@/proxy/admin/list-form/options'
|
import { ListFormEditTabs } from '@/proxy/admin/list-form/options'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import { useStoreState } from '@/store/store'
|
import { useStoreState } from '@/store/store'
|
||||||
import { object, string } from 'yup'
|
import { object } from 'yup'
|
||||||
import {
|
import {
|
||||||
chartSeriesTypeOptions,
|
chartSeriesTypeOptions,
|
||||||
chartSeriesSelectionModeOptions,
|
chartSeriesSelectionModeOptions,
|
||||||
|
|
@ -41,9 +41,12 @@ import CreatableSelect from 'react-select/creatable'
|
||||||
import { getListFormFields } from '@/services/admin/list-form-field.service'
|
import { getListFormFields } from '@/services/admin/list-form-field.service'
|
||||||
import groupBy from 'lodash/groupBy'
|
import groupBy from 'lodash/groupBy'
|
||||||
|
|
||||||
const schema = object().shape({
|
// Bu sekme ListForm nesnesinin tamamını düzenler; `name` / `title` / `height`
|
||||||
name: string().required(),
|
// 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 }) {
|
function ChartTabSeries(props: FormEditProps & { listFormCode: string }) {
|
||||||
const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false)
|
const [isJsonRowOpDialogOpen, setIsJsonRowOpDialogOpen] = useState(false)
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,7 @@ function FormTabDatabaseDataSource(props: FormEditProps) {
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Formik
|
<Formik
|
||||||
|
enableReinitialize
|
||||||
initialValues={initialValues}
|
initialValues={initialValues}
|
||||||
validationSchema={schema}
|
validationSchema={schema}
|
||||||
onSubmit={async (values, formikHelpers) => {
|
onSubmit={async (values, formikHelpers) => {
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ function FormTabDatabaseDelete({
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Formik
|
<Formik
|
||||||
|
enableReinitialize
|
||||||
initialValues={initialValues}
|
initialValues={initialValues}
|
||||||
validationSchema={schema}
|
validationSchema={schema}
|
||||||
onSubmit={async (values, formikHelpers) => {
|
onSubmit={async (values, formikHelpers) => {
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ function FormTabDatabaseInsert({
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Formik
|
<Formik
|
||||||
|
enableReinitialize
|
||||||
initialValues={initialValues}
|
initialValues={initialValues}
|
||||||
validationSchema={schema}
|
validationSchema={schema}
|
||||||
onSubmit={async (values, formikHelpers) => {
|
onSubmit={async (values, formikHelpers) => {
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ function FormTabDatabaseSelect({
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Formik
|
<Formik
|
||||||
|
enableReinitialize
|
||||||
initialValues={initialValues}
|
initialValues={initialValues}
|
||||||
validationSchema={schema}
|
validationSchema={schema}
|
||||||
onSubmit={async (values, formikHelpers) => {
|
onSubmit={async (values, formikHelpers) => {
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ function FormTabDatabaseUpdate({
|
||||||
return (
|
return (
|
||||||
<Container>
|
<Container>
|
||||||
<Formik
|
<Formik
|
||||||
|
enableReinitialize
|
||||||
initialValues={initialValues}
|
initialValues={initialValues}
|
||||||
validationSchema={schema}
|
validationSchema={schema}
|
||||||
onSubmit={async (values, formikHelpers) => {
|
onSubmit={async (values, formikHelpers) => {
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,18 @@ import { FormEditProps } from './FormEdit'
|
||||||
import { PermissionDefinitionRecord } from '@/proxy/admin/models'
|
import { PermissionDefinitionRecord } from '@/proxy/admin/models'
|
||||||
import { getPermissionsList } from '@/services/identity.service'
|
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({
|
const schema = object().shape({
|
||||||
c: string(),
|
permissionDto: object().shape({
|
||||||
r: string(),
|
c: string().nullable(),
|
||||||
u: string(),
|
r: string().nullable(),
|
||||||
d: string(),
|
u: string().nullable(),
|
||||||
e: string(),
|
d: string().nullable(),
|
||||||
i: string(),
|
e: string().nullable(),
|
||||||
n: string(),
|
i: string().nullable(),
|
||||||
|
n: string().nullable(),
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
function FormTabPermissions(props: FormEditProps) {
|
function FormTabPermissions(props: FormEditProps) {
|
||||||
|
|
|
||||||
|
|
@ -329,6 +329,7 @@ export function FormTabWorkflow(
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Formik
|
<Formik
|
||||||
|
enableReinitialize
|
||||||
initialValues={initialValues}
|
initialValues={initialValues}
|
||||||
validationSchema={schema}
|
validationSchema={schema}
|
||||||
onSubmit={async (values, formikHelpers) => {
|
onSubmit={async (values, formikHelpers) => {
|
||||||
|
|
|
||||||
|
|
@ -2,21 +2,20 @@ import { Tabs } from '@/components/ui'
|
||||||
import TabContent from '@/components/ui/Tabs/TabContent'
|
import TabContent from '@/components/ui/Tabs/TabContent'
|
||||||
import TabList from '@/components/ui/Tabs/TabList'
|
import TabList from '@/components/ui/Tabs/TabList'
|
||||||
import TabNav from '@/components/ui/Tabs/TabNav'
|
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 { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import FormFieldTabConditionalFormatting from './FormFieldTabConditionalFormatting'
|
import FormFieldTabConditionalFormatting from './FormFieldTabConditionalFormatting'
|
||||||
import FormFieldTabCssOptions from './FormFieldTabCssOptions'
|
import FormFieldTabCssOptions from './FormFieldTabCssOptions'
|
||||||
import FormFieldTabCustomization from './FormFieldTabCustomization'
|
import FormFieldTabCustomization from './FormFieldTabCustomization'
|
||||||
import FormFieldTabDetails from './FormFieldTabDetails'
|
import FormFieldTabDetails from './FormFieldTabDetails'
|
||||||
import FormFieldTabFiltering from './FormFieldTabFiltering'
|
import FormFieldTabFiltering from './FormFieldTabFiltering'
|
||||||
import FormFieldTabGroupSummary from './FormFieldTabGroupSummary'
|
|
||||||
import FormFieldTabGrouping from './FormFieldTabGrouping'
|
import FormFieldTabGrouping from './FormFieldTabGrouping'
|
||||||
import FormFieldTabHeadering from './FormFieldTabHeadering'
|
import FormFieldTabHeadering from './FormFieldTabHeadering'
|
||||||
import FormFieldTabJoinOptions from './FormFieldTabJoinOptions'
|
import FormFieldTabJoinOptions from './FormFieldTabJoinOptions'
|
||||||
import FormFieldTabLookup from './FormFieldTabLookup'
|
import FormFieldTabLookup from './FormFieldTabLookup'
|
||||||
import FormFieldTabOptions from './FormFieldTabOptions'
|
import FormFieldTabOptions from './FormFieldTabOptions'
|
||||||
import FormFieldTabPermissions from './FormFieldTabPermissions'
|
import FormFieldTabPermissions from './FormFieldTabPermissions'
|
||||||
import FormFieldTabTotalSummary from './FormFieldTabTotalSummary'
|
import FormFieldTabSummary from './FormFieldTabSummary'
|
||||||
import FormFieldTabValidationRules from './FormFieldTabValidationRules'
|
import FormFieldTabValidationRules from './FormFieldTabValidationRules'
|
||||||
import { FormFieldEditProps } from './FormFields'
|
import { FormFieldEditProps } from './FormFields'
|
||||||
import FormFieldTabPivotSetting from './FormFieldTabPivotSetting'
|
import FormFieldTabPivotSetting from './FormFieldTabPivotSetting'
|
||||||
|
|
@ -104,10 +103,22 @@ function FormFieldEdit({
|
||||||
<FormFieldTabGrouping initialValues={item} onSubmit={onSubmit} />
|
<FormFieldTabGrouping initialValues={item} onSubmit={onSubmit} />
|
||||||
</TabContent>
|
</TabContent>
|
||||||
<TabContent value="groupSummary">
|
<TabContent value="groupSummary">
|
||||||
<FormFieldTabGroupSummary initialValues={item} fields={fields} onSubmit={onSubmit} />
|
<FormFieldTabSummary
|
||||||
|
dtoKey="columnGroupSummaryDto"
|
||||||
|
editTab={ListFormFieldEditTabs.GroupSummaryForm}
|
||||||
|
initialValues={item}
|
||||||
|
fields={fields}
|
||||||
|
onSubmit={onSubmit}
|
||||||
|
/>
|
||||||
</TabContent>
|
</TabContent>
|
||||||
<TabContent value="totalSummary">
|
<TabContent value="totalSummary">
|
||||||
<FormFieldTabTotalSummary initialValues={item} fields={fields} onSubmit={onSubmit} />
|
<FormFieldTabSummary
|
||||||
|
dtoKey="columnTotalSummaryDto"
|
||||||
|
editTab={ListFormFieldEditTabs.TotalSummaryForm}
|
||||||
|
initialValues={item}
|
||||||
|
fields={fields}
|
||||||
|
onSubmit={onSubmit}
|
||||||
|
/>
|
||||||
</TabContent>
|
</TabContent>
|
||||||
<TabContent value="joinOptions">
|
<TabContent value="joinOptions">
|
||||||
<FormFieldTabJoinOptions initialValues={item} onSubmit={onSubmit} />
|
<FormFieldTabJoinOptions initialValues={item} onSubmit={onSubmit} />
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import {
|
||||||
FormItem,
|
FormItem,
|
||||||
Input,
|
Input,
|
||||||
Notification,
|
Notification,
|
||||||
Select,
|
|
||||||
Table,
|
Table,
|
||||||
toast,
|
toast,
|
||||||
} from '@/components/ui'
|
} from '@/components/ui'
|
||||||
|
|
@ -20,7 +19,7 @@ import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-f
|
||||||
|
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import setNull from '@/utils/setNull'
|
import setNull from '@/utils/setNull'
|
||||||
import { Field, FieldProps, Form, Formik } from 'formik'
|
import { Field, Form, Formik } from 'formik'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import { FaEdit, FaPlusSquare, FaCheck, FaTrashAlt } from 'react-icons/fa'
|
import { FaEdit, FaPlusSquare, FaCheck, FaTrashAlt } from 'react-icons/fa'
|
||||||
import { object, string } from 'yup'
|
import { object, string } from 'yup'
|
||||||
|
|
@ -32,6 +31,7 @@ import {
|
||||||
ColumnStylingDto,
|
ColumnStylingDto,
|
||||||
ColumnValidationComparisonTypeEnum,
|
ColumnValidationComparisonTypeEnum,
|
||||||
} from '@/proxy/form/models'
|
} from '@/proxy/form/models'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
const NewItem: ColumnStylingDto = {
|
const NewItem: ColumnStylingDto = {
|
||||||
rowType: ColumnRowTypeListOptions.Data,
|
rowType: ColumnRowTypeListOptions.Data,
|
||||||
|
|
@ -225,19 +225,11 @@ function FormFieldTabConditionalFormatting({
|
||||||
invalid={errors.rowType && touched.rowType}
|
invalid={errors.rowType && touched.rowType}
|
||||||
errorMessage={errors.rowType}
|
errorMessage={errors.rowType}
|
||||||
>
|
>
|
||||||
<Field type="text" autoComplete="off" name="rowType" placeholder="Row Type">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<ColumnRowTypeListOptions>) => (
|
name="rowType"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
options={columnRowTypeListOptions}
|
options={columnRowTypeListOptions}
|
||||||
value={columnRowTypeListOptions.filter(
|
isClearable={false}
|
||||||
(option: any) => option.value === values.rowType,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -255,19 +247,11 @@ function FormFieldTabConditionalFormatting({
|
||||||
invalid={errors.condition && touched.condition}
|
invalid={errors.condition && touched.condition}
|
||||||
errorMessage={errors.condition}
|
errorMessage={errors.condition}
|
||||||
>
|
>
|
||||||
<Field type="text" autoComplete="off" name="condition" placeholder="Condition">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<ColumnValidationComparisonTypeEnum>) => (
|
name="condition"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
options={columnValidationComparisonTypeListOptions}
|
options={columnValidationComparisonTypeListOptions}
|
||||||
value={columnValidationComparisonTypeListOptions.filter(
|
isClearable={false}
|
||||||
(option: any) => option.value === values.condition,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
import { Container } from '@/components/shared'
|
import { Container } from '@/components/shared'
|
||||||
import { Button, Checkbox, FormContainer, FormItem, Select } from '@/components/ui'
|
import { Button, Checkbox, FormContainer, FormItem } from '@/components/ui'
|
||||||
import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models'
|
import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models'
|
||||||
import { SelectBoxOption } from '@/types/shared'
|
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import { Field, FieldProps, Form, Formik } from 'formik'
|
import { Field, Form, Formik } from 'formik'
|
||||||
import { bool, object, string } from 'yup'
|
import { bool, object, string } from 'yup'
|
||||||
import { fixedPositionOptions } from '../options'
|
import { fixedPositionOptions } from '../options'
|
||||||
import { FormFieldEditProps } from './FormFields'
|
import { FormFieldEditProps } from './FormFields'
|
||||||
import { FixedPositionEnum } from '@/proxy/form/models'
|
import { FixedPositionEnum } from '@/proxy/form/models'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
const schema = object().shape({
|
const schema = object().shape({
|
||||||
columnCustomizationDto: object()
|
columnCustomizationDto: object()
|
||||||
|
|
@ -51,21 +51,10 @@ function FormFieldTabCustomization({
|
||||||
<FormItem
|
<FormItem
|
||||||
label={translate('::ListForms.ListFormFieldEdit.CustomizationFixedPosition')}
|
label={translate('::ListForms.ListFormFieldEdit.CustomizationFixedPosition')}
|
||||||
>
|
>
|
||||||
<Field type="text" name="columnCustomizationDto.fixedPosition">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
name="columnCustomizationDto.fixedPosition"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={fixedPositionOptions}
|
options={fixedPositionOptions}
|
||||||
value={fixedPositionOptions.filter(
|
|
||||||
(option: any) =>
|
|
||||||
option.value === values?.columnCustomizationDto?.fixedPosition,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<Button block size="sm" className="mt-1" variant="solid" loading={isSubmitting} type="submit">
|
<Button block size="sm" className="mt-1" variant="solid" loading={isSubmitting} type="submit">
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
import { Button, Card, Checkbox, FormItem, Input, Select } from '@/components/ui'
|
import { Button, Card, Checkbox, FormItem, Input } from '@/components/ui'
|
||||||
import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models'
|
import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models'
|
||||||
import { SelectBoxOption } from '@/types/shared'
|
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import { Field, FieldProps, Form, Formik } from 'formik'
|
import { Field, Form, Formik } from 'formik'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import { FaSlidersH } from 'react-icons/fa'
|
import { FaSlidersH } from 'react-icons/fa'
|
||||||
import { bool, number, object, string } from 'yup'
|
import { bool, number, object, string } from 'yup'
|
||||||
|
|
@ -11,6 +10,7 @@ import EditorOptionsBuilderDialog from '../json-row-operations/EditorOptionsBuil
|
||||||
import { isValidJsonText } from '../json-row-operations/editor-options/jsonUtils'
|
import { isValidJsonText } from '../json-row-operations/editor-options/jsonUtils'
|
||||||
import { FormFieldEditProps } from './FormFields'
|
import { FormFieldEditProps } from './FormFields'
|
||||||
import { tooltipFormatListOptions } from '@/proxy/admin/list-form/options'
|
import { tooltipFormatListOptions } from '@/proxy/admin/list-form/options'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
const schema = object().shape({
|
const schema = object().shape({
|
||||||
fieldName: string().required().max(100),
|
fieldName: string().required().max(100),
|
||||||
|
|
@ -119,52 +119,23 @@ function FormFieldTabDetails({
|
||||||
errorMessage={errors.sourceDbType as string}
|
errorMessage={errors.sourceDbType as string}
|
||||||
>
|
>
|
||||||
{/* Temizlenirse zorunlu alan doğrulaması formu sessizce bloke ediyordu. */}
|
{/* Temizlenirse zorunlu alan doğrulaması formu sessizce bloke ediyordu. */}
|
||||||
<Field type="text" name="sourceDbType">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
name="sourceDbType"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={false}
|
|
||||||
options={dbSourceTypeOptions}
|
options={dbSourceTypeOptions}
|
||||||
value={dbSourceTypeOptions.filter(
|
isClearable={false}
|
||||||
(option: any) => option.value === values.sourceDbType,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label={translate('::ListForms.ListFormFieldEdit.DetailsAlignment')}>
|
<FormItem label={translate('::ListForms.ListFormFieldEdit.DetailsAlignment')}>
|
||||||
<Field type="text" name="alignment">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
name="alignment"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={listFormAlignmentOptions}
|
options={listFormAlignmentOptions}
|
||||||
value={listFormAlignmentOptions.filter(
|
|
||||||
(option) => option.value === values.alignment,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem label={translate('::ListForms.ListFormFieldEdit.DetailsFormat')}>
|
<FormItem label={translate('::ListForms.ListFormFieldEdit.DetailsFormat')}>
|
||||||
<Field type="text" name="format">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
name="format"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={tooltipFormatListOptions}
|
options={tooltipFormatListOptions}
|
||||||
value={tooltipFormatListOptions.filter(
|
|
||||||
(option) => option.value === values.format,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem
|
<FormItem
|
||||||
label={translate('::ListForms.ListFormFieldEdit.DetailsEditorOptions')}
|
label={translate('::ListForms.ListFormFieldEdit.DetailsEditorOptions')}
|
||||||
|
|
|
||||||
|
|
@ -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({
|
|
||||||
columnGroupingDto: object()
|
|
||||||
.shape({
|
|
||||||
summaryType: string(),
|
|
||||||
valueFormat: string(),
|
|
||||||
showInGroupFooter: bool(),
|
|
||||||
alignByColumn: bool(),
|
|
||||||
displayFormat: string(),
|
|
||||||
showInColumn: string(),
|
|
||||||
})
|
|
||||||
.required(),
|
|
||||||
})
|
|
||||||
|
|
||||||
function FormFieldTabGroupSummary({
|
|
||||||
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 (
|
|
||||||
<Container className="grid xl:grid-cols-2">
|
|
||||||
<Formik
|
|
||||||
enableReinitialize
|
|
||||||
initialValues={initialValues}
|
|
||||||
validationSchema={schema}
|
|
||||||
onSubmit={async (values, formikHelpers) => {
|
|
||||||
await onSubmit(ListFormFieldEditTabs.GroupSummaryForm, values, formikHelpers)
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{({ touched, errors, isSubmitting, values }) => (
|
|
||||||
<Form>
|
|
||||||
<FormContainer size="sm">
|
|
||||||
<FormItem label={translate('::ListForms.ListFormFieldEdit.SummaryType')}>
|
|
||||||
<Field
|
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="columnGroupSummaryDto.summaryType"
|
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.SummaryType')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<any>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={columnSummaryTypeListOptions}
|
|
||||||
value={columnSummaryTypeListOptions.filter(
|
|
||||||
(option) => option.value === values.columnGroupSummaryDto.summaryType,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryValueFormat')}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="columnGroupSummaryDto.valueFormat"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryValueFormat',
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<any>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={tooltipFormatListOptions}
|
|
||||||
value={tooltipFormatListOptions.filter(
|
|
||||||
(option) => option.value === values.columnGroupSummaryDto.valueFormat,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryDisplayFormat')}
|
|
||||||
invalid={
|
|
||||||
errors.columnGroupSummaryDto?.displayFormat &&
|
|
||||||
touched.columnGroupSummaryDto?.displayFormat
|
|
||||||
}
|
|
||||||
errorMessage={errors.columnGroupSummaryDto?.displayFormat}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="columnGroupSummaryDto.displayFormat"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryDisplayFormat',
|
|
||||||
)}
|
|
||||||
component={Input}
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryShowInColumn')}
|
|
||||||
invalid={
|
|
||||||
errors.columnGroupSummaryDto?.showInColumn &&
|
|
||||||
touched.columnGroupSummaryDto?.showInColumn
|
|
||||||
}
|
|
||||||
errorMessage={errors.columnGroupSummaryDto?.showInColumn}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
type="text"
|
|
||||||
autoFocus={true}
|
|
||||||
name="columnGroupSummaryDto.showInColumn"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryShowInColumn',
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={fieldList}
|
|
||||||
value={fieldList.filter(
|
|
||||||
(option) => option.value === values.columnGroupSummaryDto?.showInColumn,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryShowInGroupFooter')}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
name="columnGroupSummaryDto.showInGroupFooter"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryShowInGroupFooter',
|
|
||||||
)}
|
|
||||||
component={Checkbox}
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryAlignByColumn')}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
name="columnGroupSummaryDto.alignByColumn"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryAlignByColumn',
|
|
||||||
)}
|
|
||||||
component={Checkbox}
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<Button block size="sm" variant="solid" loading={isSubmitting} type="submit">
|
|
||||||
{isSubmitting ? translate('::Saving') : translate('::Save')}
|
|
||||||
</Button>
|
|
||||||
</FormContainer>
|
|
||||||
</Form>
|
|
||||||
)}
|
|
||||||
</Formik>
|
|
||||||
</Container>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default FormFieldTabGroupSummary
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Button, Card, FormItem, Input, Select } from '@/components/ui'
|
import { Button, Card, FormItem, Input } from '@/components/ui'
|
||||||
import {
|
import {
|
||||||
ColumnFormatEditDto,
|
ColumnFormatEditDto,
|
||||||
GridColumnJoinConditionEnum,
|
GridColumnJoinConditionEnum,
|
||||||
|
|
@ -6,10 +6,11 @@ import {
|
||||||
ListFormFieldEditTabs,
|
ListFormFieldEditTabs,
|
||||||
} from '@/proxy/admin/list-form-field/models'
|
} from '@/proxy/admin/list-form-field/models'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import { Field, FieldProps, Form, Formik } from 'formik'
|
import { Field, Form, Formik } from 'formik'
|
||||||
import { object, string } from 'yup'
|
import { object, string } from 'yup'
|
||||||
import { gridColumnJoinConditionOptions, gridColumnJoinTypeListOptions } from '../options'
|
import { gridColumnJoinConditionOptions, gridColumnJoinTypeListOptions } from '../options'
|
||||||
import { FormFieldEditProps } from './FormFields'
|
import { FormFieldEditProps } from './FormFields'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
const schema = object().shape({
|
const schema = object().shape({
|
||||||
columnJoinTableDto: object()
|
columnJoinTableDto: object()
|
||||||
|
|
@ -53,25 +54,10 @@ function FormFieldTabJoinOptions({
|
||||||
labelWidth="40%"
|
labelWidth="40%"
|
||||||
label={translate('::ListForms.ListFormFieldEdit.JoinOptionsJoinType')}
|
label={translate('::ListForms.ListFormFieldEdit.JoinOptionsJoinType')}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="columnJoinTableDto.joinType"
|
name="columnJoinTableDto.joinType"
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.JoinOptionsJoinType')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<GridColumnJoinTypeListEnum>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={gridColumnJoinTypeListOptions}
|
options={gridColumnJoinTypeListOptions}
|
||||||
value={gridColumnJoinTypeListOptions.filter(
|
|
||||||
(option) => option.value === values.columnJoinTableDto.joinType,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -171,25 +157,10 @@ function FormFieldTabJoinOptions({
|
||||||
}
|
}
|
||||||
errorMessage={errors.columnJoinTableDto?.joinCondition2}
|
errorMessage={errors.columnJoinTableDto?.joinCondition2}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="columnJoinTableDto.joinCondition2"
|
name="columnJoinTableDto.joinCondition2"
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.JoinOptionsJoinCondition2')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<GridColumnJoinConditionEnum>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={gridColumnJoinConditionOptions}
|
options={gridColumnJoinConditionOptions}
|
||||||
value={gridColumnJoinConditionOptions.filter(
|
|
||||||
(option) => option.value === values.columnJoinTableDto.joinCondition2,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
import { Button, Card, FormItem, Input, Select } from '@/components/ui'
|
import { Button, Card, FormItem, Input } from '@/components/ui'
|
||||||
import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models'
|
import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models'
|
||||||
import type { DatabaseColumnDto, SqlObjectExplorerDto } from '@/proxy/sql-query-manager/models'
|
import type { DatabaseColumnDto, SqlObjectExplorerDto } from '@/proxy/sql-query-manager/models'
|
||||||
import { sqlObjectManagerService } from '@/services/sql-query-manager.service'
|
import { sqlObjectManagerService } from '@/services/sql-query-manager.service'
|
||||||
import { SelectBoxOption } from '@/types/shared'
|
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import { useStoreState } from '@/store/store'
|
import { useStoreState } from '@/store/store'
|
||||||
import { Field, FieldProps, Form, Formik } from 'formik'
|
import { Field, FieldProps, Form, Formik } from 'formik'
|
||||||
|
|
@ -13,6 +12,7 @@ import { cascadeFilterOperator, columnLookupDataSourceTypeListOptions } from '..
|
||||||
import { FormFieldEditProps } from './FormFields'
|
import { FormFieldEditProps } from './FormFields'
|
||||||
import { ColumnCascadeFilterOperatorEnum, UiLookupDataSourceTypeEnum } from '@/proxy/form/models'
|
import { ColumnCascadeFilterOperatorEnum, UiLookupDataSourceTypeEnum } from '@/proxy/form/models'
|
||||||
import { buildLookupQuery } from '../../lookupQuery'
|
import { buildLookupQuery } from '../../lookupQuery'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
const schema = object().shape({
|
const schema = object().shape({
|
||||||
lookupDto: object()
|
lookupDto: object()
|
||||||
|
|
@ -288,25 +288,10 @@ function FormFieldTabLookup({
|
||||||
invalid={errors.lookupDto?.dataSourceType && touched.lookupDto?.dataSourceType}
|
invalid={errors.lookupDto?.dataSourceType && touched.lookupDto?.dataSourceType}
|
||||||
errorMessage={errors.lookupDto?.dataSourceType}
|
errorMessage={errors.lookupDto?.dataSourceType}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="lookupDto.dataSourceType"
|
name="lookupDto.dataSourceType"
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.LookupDataSourceType')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<UiLookupDataSourceTypeEnum>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={columnLookupDataSourceTypeListOptions}
|
options={columnLookupDataSourceTypeListOptions}
|
||||||
value={columnLookupDataSourceTypeListOptions.filter(
|
|
||||||
(option: any) => option.value === values.lookupDto?.dataSourceType,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -406,27 +391,10 @@ function FormFieldTabLookup({
|
||||||
}
|
}
|
||||||
errorMessage={errors.lookupDto?.cascadeFilterOperator}
|
errorMessage={errors.lookupDto?.cascadeFilterOperator}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="lookupDto.cascadeFilterOperator"
|
name="lookupDto.cascadeFilterOperator"
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.LookupCascadeFilterOperator',
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={cascadeFilterOperator}
|
options={cascadeFilterOperator}
|
||||||
value={cascadeFilterOperator.filter(
|
|
||||||
(option: any) => option.value === values.lookupDto?.cascadeFilterOperator,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import { EditingFormDto, SortDirectionEnum } from '@/proxy/form/models'
|
||||||
import { FaCode } from 'react-icons/fa'
|
import { FaCode } from 'react-icons/fa'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import EditorScriptBuilderDialog from '../json-row-operations/EditorScriptBuilderDialog'
|
import EditorScriptBuilderDialog from '../json-row-operations/EditorScriptBuilderDialog'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
const schema = object().shape({
|
const schema = object().shape({
|
||||||
listOrderNo: number(),
|
listOrderNo: number(),
|
||||||
|
|
@ -81,20 +82,10 @@ function FormFieldTabOptions({
|
||||||
invalid={errors.sortDirection && touched.sortDirection}
|
invalid={errors.sortDirection && touched.sortDirection}
|
||||||
errorMessage={errors.sortDirection}
|
errorMessage={errors.sortDirection}
|
||||||
>
|
>
|
||||||
<Field type="text" name="sortDirection">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
name="sortDirection"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={sortDirectionOptions}
|
options={sortDirectionOptions}
|
||||||
value={sortDirectionOptions.filter(
|
|
||||||
(option: any) => option.value === values.sortDirection,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem
|
<FormItem
|
||||||
label={translate('::ListForms.ListFormFieldEdit.OptionsSortIndex')}
|
label={translate('::ListForms.ListFormFieldEdit.OptionsSortIndex')}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import { useEffect, useState } from 'react'
|
||||||
import { bool, object, string } from 'yup'
|
import { bool, object, string } from 'yup'
|
||||||
import { FormFieldEditProps } from './FormFields'
|
import { FormFieldEditProps } from './FormFields'
|
||||||
import { getPermissions } from '@/services/identity.service'
|
import { getPermissions } from '@/services/identity.service'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
const schema = object().shape({
|
const schema = object().shape({
|
||||||
permissionDto: object().shape({
|
permissionDto: object().shape({
|
||||||
|
|
@ -72,25 +73,10 @@ function FormFieldTabPermissions({
|
||||||
invalid={errors.permissionDto?.r && touched.permissionDto?.r}
|
invalid={errors.permissionDto?.r && touched.permissionDto?.r}
|
||||||
errorMessage={errors.permissionDto?.r}
|
errorMessage={errors.permissionDto?.r}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="permissionDto.r"
|
name="permissionDto.r"
|
||||||
placeholder={translate('::Read')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={permissionOptions}
|
options={permissionOptions}
|
||||||
value={permissionOptions.filter(
|
|
||||||
(option) => option.value === values.permissionDto?.r,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem
|
<FormItem
|
||||||
label={translate('::Create')}
|
label={translate('::Create')}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
import { Button, Card, Checkbox, FormItem, Select } from '@/components/ui'
|
import { Button, Card, Checkbox, FormItem } from '@/components/ui'
|
||||||
import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models'
|
import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-form-field/models'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import { Field, FieldProps, Form, Formik } from 'formik'
|
import { Field, Form, Formik } from 'formik'
|
||||||
import { boolean, object, string } from 'yup'
|
import { boolean, object, string } from 'yup'
|
||||||
import { FormFieldEditProps } from './FormFields'
|
import { FormFieldEditProps } from './FormFields'
|
||||||
import { SelectBoxOption } from '@/types/shared'
|
|
||||||
import {
|
import {
|
||||||
columnSummaryTypeListOptions,
|
columnSummaryTypeListOptions,
|
||||||
pivotSettingsAreaOptions,
|
pivotSettingsAreaOptions,
|
||||||
|
|
@ -12,16 +11,19 @@ import {
|
||||||
pivotSortDirectionOptions,
|
pivotSortDirectionOptions,
|
||||||
} from '../options'
|
} from '../options'
|
||||||
import { tooltipFormatListOptions } from '@/proxy/admin/list-form/options'
|
import { tooltipFormatListOptions } from '@/proxy/admin/list-form/options'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
const schema = object().shape({
|
const schema = object().shape({
|
||||||
pivotSettingsDto: object().shape({
|
pivotSettingsDto: object().shape({
|
||||||
isPivot: boolean(),
|
isPivot: boolean(),
|
||||||
expanded: boolean(),
|
expanded: boolean(),
|
||||||
sortOrder: string(),
|
// Bu alanlar temizlenebilir Select'e bağlı; format listesindeki "None"
|
||||||
|
// seçeneği null döndürüyor ve nullable olmadan Kaydet sessizce iptal oluyor.
|
||||||
|
sortOrder: string().nullable(),
|
||||||
area: string().required(),
|
area: string().required(),
|
||||||
format: string(),
|
format: string().nullable(),
|
||||||
summaryType: string(),
|
summaryType: string().nullable(),
|
||||||
groupInterval: string(),
|
groupInterval: string().nullable(),
|
||||||
wordWrapEnabled: boolean(),
|
wordWrapEnabled: boolean(),
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
@ -60,25 +62,10 @@ function FormFieldTabPivotSetting({
|
||||||
invalid={errors.pivotSettingsDto?.area && touched.pivotSettingsDto?.area}
|
invalid={errors.pivotSettingsDto?.area && touched.pivotSettingsDto?.area}
|
||||||
errorMessage={errors.pivotSettingsDto?.area}
|
errorMessage={errors.pivotSettingsDto?.area}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="pivotSettingsDto.area"
|
name="pivotSettingsDto.area"
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.PivotSettingArea')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={pivotSettingsAreaOptions}
|
options={pivotSettingsAreaOptions}
|
||||||
value={pivotSettingsAreaOptions.filter(
|
|
||||||
(option: any) => option.value === values.pivotSettingsDto?.area,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -86,25 +73,10 @@ function FormFieldTabPivotSetting({
|
||||||
invalid={errors.pivotSettingsDto?.format && touched.pivotSettingsDto?.format}
|
invalid={errors.pivotSettingsDto?.format && touched.pivotSettingsDto?.format}
|
||||||
errorMessage={errors.pivotSettingsDto?.format}
|
errorMessage={errors.pivotSettingsDto?.format}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="pivotSettingsDto.format"
|
name="pivotSettingsDto.format"
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.DetailsFormat')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={tooltipFormatListOptions}
|
options={tooltipFormatListOptions}
|
||||||
value={tooltipFormatListOptions.filter(
|
|
||||||
(option) => option.value === values.pivotSettingsDto?.format,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -114,25 +86,10 @@ function FormFieldTabPivotSetting({
|
||||||
}
|
}
|
||||||
errorMessage={errors.pivotSettingsDto?.summaryType}
|
errorMessage={errors.pivotSettingsDto?.summaryType}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="pivotSettingsDto.summaryType"
|
name="pivotSettingsDto.summaryType"
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.SummaryType')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={columnSummaryTypeListOptions}
|
options={columnSummaryTypeListOptions}
|
||||||
value={columnSummaryTypeListOptions.filter(
|
|
||||||
(option: any) => option.value === values.pivotSettingsDto?.summaryType,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
|
|
@ -144,25 +101,10 @@ function FormFieldTabPivotSetting({
|
||||||
}
|
}
|
||||||
errorMessage={errors.pivotSettingsDto?.groupInterval}
|
errorMessage={errors.pivotSettingsDto?.groupInterval}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="pivotSettingsDto.groupInterval"
|
name="pivotSettingsDto.groupInterval"
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.PivotSettingGroupInterval')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={pivotSettingsGroupIntervalOptions}
|
options={pivotSettingsGroupIntervalOptions}
|
||||||
value={pivotSettingsGroupIntervalOptions.filter(
|
|
||||||
(option: any) => option.value === values.pivotSettingsDto?.groupInterval,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -170,25 +112,10 @@ function FormFieldTabPivotSetting({
|
||||||
invalid={errors.pivotSettingsDto?.sortOrder && touched.pivotSettingsDto?.sortOrder}
|
invalid={errors.pivotSettingsDto?.sortOrder && touched.pivotSettingsDto?.sortOrder}
|
||||||
errorMessage={errors.pivotSettingsDto?.sortOrder}
|
errorMessage={errors.pivotSettingsDto?.sortOrder}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="pivotSettingsDto.sortOrder"
|
name="pivotSettingsDto.sortOrder"
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.PivotSettingSortOrder')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={pivotSortDirectionOptions}
|
options={pivotSortDirectionOptions}
|
||||||
value={pivotSortDirectionOptions.filter(
|
|
||||||
(option: any) => option.value === values.pivotSettingsDto?.sortOrder,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
import { Container } from '@/components/shared'
|
||||||
|
import { Button, Checkbox, FormContainer, FormItem, Input } from '@/components/ui'
|
||||||
|
import { ColumnFormatEditDto } from '@/proxy/admin/list-form-field/models'
|
||||||
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
|
import { Field, 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'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Grup özeti ve genel toplam sekmelerinin ortak gövdesi.
|
||||||
|
*
|
||||||
|
* İki sekme yalnızca hangi DTO'yu düzenlediği ve hangi editType ile kaydettiği
|
||||||
|
* konusunda ayrışıyordu; dosyalar bunun dışında birebir aynıydı.
|
||||||
|
*/
|
||||||
|
type SummaryDtoKey = 'columnGroupSummaryDto' | 'columnTotalSummaryDto'
|
||||||
|
|
||||||
|
// Temizlenebilir Select'ler null yazabildiği için tüm metin alanları nullable.
|
||||||
|
const buildSchema = (dtoKey: SummaryDtoKey) =>
|
||||||
|
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 (
|
||||||
|
<Container className="grid xl:grid-cols-2">
|
||||||
|
<Formik
|
||||||
|
enableReinitialize
|
||||||
|
initialValues={initialValues}
|
||||||
|
validationSchema={schema}
|
||||||
|
onSubmit={async (values, formikHelpers) => {
|
||||||
|
await onSubmit(editTab, values, formikHelpers)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{({ isSubmitting }) => (
|
||||||
|
<Form>
|
||||||
|
<FormContainer size="sm">
|
||||||
|
<FormItem label={label('SummaryType')}>
|
||||||
|
<SelectField
|
||||||
|
name={`${dtoKey}.summaryType`}
|
||||||
|
options={columnSummaryTypeListOptions}
|
||||||
|
/>
|
||||||
|
</FormItem>
|
||||||
|
|
||||||
|
<FormItem label={label('GroupingSummaryValueFormat')}>
|
||||||
|
<SelectField
|
||||||
|
name={`${dtoKey}.valueFormat`}
|
||||||
|
options={tooltipFormatListOptions}
|
||||||
|
/>
|
||||||
|
</FormItem>
|
||||||
|
|
||||||
|
<FormItem label={label('GroupingSummaryDisplayFormat')}>
|
||||||
|
<Field
|
||||||
|
type="text"
|
||||||
|
autoComplete="off"
|
||||||
|
name={`${dtoKey}.displayFormat`}
|
||||||
|
placeholder={label('GroupingSummaryDisplayFormat')}
|
||||||
|
component={Input}
|
||||||
|
/>
|
||||||
|
</FormItem>
|
||||||
|
|
||||||
|
<FormItem label={label('GroupingSummaryShowInColumn')}>
|
||||||
|
<SelectField
|
||||||
|
name={`${dtoKey}.showInColumn`}
|
||||||
|
options={fieldList}
|
||||||
|
/>
|
||||||
|
</FormItem>
|
||||||
|
|
||||||
|
<FormItem label={label('GroupingSummaryShowInGroupFooter')}>
|
||||||
|
<Field name={`${dtoKey}.showInGroupFooter`} component={Checkbox} />
|
||||||
|
</FormItem>
|
||||||
|
|
||||||
|
<FormItem label={label('GroupingSummaryAlignByColumn')}>
|
||||||
|
<Field name={`${dtoKey}.alignByColumn`} component={Checkbox} />
|
||||||
|
</FormItem>
|
||||||
|
|
||||||
|
<Button block size="sm" variant="solid" loading={isSubmitting} type="submit">
|
||||||
|
{isSubmitting ? translate('::Saving') : translate('::Save')}
|
||||||
|
</Button>
|
||||||
|
</FormContainer>
|
||||||
|
</Form>
|
||||||
|
)}
|
||||||
|
</Formik>
|
||||||
|
</Container>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default FormFieldTabSummary
|
||||||
|
|
@ -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 (
|
|
||||||
<Container className="grid xl:grid-cols-2">
|
|
||||||
<Formik
|
|
||||||
enableReinitialize
|
|
||||||
initialValues={initialValues}
|
|
||||||
validationSchema={schema}
|
|
||||||
onSubmit={async (values, formikHelpers) => {
|
|
||||||
await onSubmit(ListFormFieldEditTabs.TotalSummaryForm, values, formikHelpers)
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{({ touched, errors, isSubmitting, values }) => (
|
|
||||||
<Form>
|
|
||||||
<FormContainer size="sm">
|
|
||||||
<FormItem label={translate('::ListForms.ListFormFieldEdit.SummaryType')}>
|
|
||||||
<Field
|
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="columnTotalSummaryDto.summaryType"
|
|
||||||
placeholder={translate('::ListForms.ListFormFieldEdit.SummaryType')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<any>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={columnSummaryTypeListOptions}
|
|
||||||
value={columnSummaryTypeListOptions.filter(
|
|
||||||
(option) => option.value === values.columnTotalSummaryDto.summaryType,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryValueFormat')}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="columnTotalSummaryDto.valueFormat"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryValueFormat',
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<any>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={tooltipFormatListOptions}
|
|
||||||
value={tooltipFormatListOptions.filter(
|
|
||||||
(option) => option.value === values.columnTotalSummaryDto.valueFormat,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryDisplayFormat')}
|
|
||||||
invalid={
|
|
||||||
errors.columnTotalSummaryDto?.displayFormat &&
|
|
||||||
touched.columnTotalSummaryDto?.displayFormat
|
|
||||||
}
|
|
||||||
errorMessage={errors.columnTotalSummaryDto?.displayFormat}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="columnTotalSummaryDto.displayFormat"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryDisplayFormat',
|
|
||||||
)}
|
|
||||||
component={Input}
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryShowInColumn')}
|
|
||||||
invalid={
|
|
||||||
errors.columnTotalSummaryDto?.showInColumn &&
|
|
||||||
touched.columnTotalSummaryDto?.showInColumn
|
|
||||||
}
|
|
||||||
errorMessage={errors.columnTotalSummaryDto?.showInColumn}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
type="text"
|
|
||||||
autoFocus={true}
|
|
||||||
name="columnTotalSummaryDto.showInColumn"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryShowInColumn',
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={fieldList}
|
|
||||||
value={fieldList.filter(
|
|
||||||
(option) => option.value === values.columnTotalSummaryDto?.showInColumn,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryShowInGroupFooter')}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
name="columnTotalSummaryDto.showInGroupFooter"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryShowInGroupFooter',
|
|
||||||
)}
|
|
||||||
component={Checkbox}
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<FormItem
|
|
||||||
label={translate('::ListForms.ListFormFieldEdit.GroupingSummaryAlignByColumn')}
|
|
||||||
>
|
|
||||||
<Field
|
|
||||||
name="columnTotalSummaryDto.alignByColumn"
|
|
||||||
placeholder={translate(
|
|
||||||
'::ListForms.ListFormFieldEdit.GroupingSummaryAlignByColumn',
|
|
||||||
)}
|
|
||||||
component={Checkbox}
|
|
||||||
/>
|
|
||||||
</FormItem>
|
|
||||||
|
|
||||||
<Button block size="sm" className="mt-1" variant="solid" loading={isSubmitting} type="submit">
|
|
||||||
{isSubmitting ? translate('::Saving') : translate('::Save')}
|
|
||||||
</Button>
|
|
||||||
</FormContainer>
|
|
||||||
</Form>
|
|
||||||
)}
|
|
||||||
</Formik>
|
|
||||||
</Container>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default FormFieldTabTotalSummary
|
|
||||||
|
|
@ -7,7 +7,6 @@ import {
|
||||||
FormItem,
|
FormItem,
|
||||||
Input,
|
Input,
|
||||||
Notification,
|
Notification,
|
||||||
Select,
|
|
||||||
Table,
|
Table,
|
||||||
toast,
|
toast,
|
||||||
} from '@/components/ui'
|
} from '@/components/ui'
|
||||||
|
|
@ -21,7 +20,7 @@ import { ColumnFormatEditDto, ListFormFieldEditTabs } from '@/proxy/admin/list-f
|
||||||
|
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import setNull from '@/utils/setNull'
|
import setNull from '@/utils/setNull'
|
||||||
import { Field, FieldProps, Form, Formik } from 'formik'
|
import { Field, Form, Formik } from 'formik'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import { FaEdit, FaPlusSquare, FaCheck, FaTrashAlt } from 'react-icons/fa'
|
import { FaEdit, FaPlusSquare, FaCheck, FaTrashAlt } from 'react-icons/fa'
|
||||||
import { bool, object, string } from 'yup'
|
import { bool, object, string } from 'yup'
|
||||||
|
|
@ -35,6 +34,7 @@ import {
|
||||||
ColumnValidationTypeListEnum,
|
ColumnValidationTypeListEnum,
|
||||||
ValidationRuleDto,
|
ValidationRuleDto,
|
||||||
} from '@/proxy/form/models'
|
} from '@/proxy/form/models'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
const NewItem: ValidationRuleDto = {
|
const NewItem: ValidationRuleDto = {
|
||||||
type: ColumnValidationTypeListEnum.None,
|
type: ColumnValidationTypeListEnum.None,
|
||||||
|
|
@ -235,20 +235,10 @@ function FormFieldTabValidationRules({
|
||||||
invalid={errors.type && touched.type}
|
invalid={errors.type && touched.type}
|
||||||
errorMessage={errors.type}
|
errorMessage={errors.type}
|
||||||
>
|
>
|
||||||
<Field type="text" autoComplete="off" name="type" placeholder="Type">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<ColumnValidationTypeListEnum>) => (
|
name="type"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={columnValidationTypeListOptions}
|
options={columnValidationTypeListOptions}
|
||||||
value={columnValidationTypeListOptions.filter(
|
|
||||||
(option: any) => option.value === values.type,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -290,25 +280,10 @@ function FormFieldTabValidationRules({
|
||||||
invalid={errors.comparisonType && touched.comparisonType}
|
invalid={errors.comparisonType && touched.comparisonType}
|
||||||
errorMessage={errors.comparisonType}
|
errorMessage={errors.comparisonType}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="comparisonType"
|
name="comparisonType"
|
||||||
placeholder="Comparison Type"
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<ColumnValidationComparisonTypeEnum>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={columnValidationComparisonTypeListOptions}
|
options={columnValidationComparisonTypeListOptions}
|
||||||
value={columnValidationComparisonTypeListOptions.filter(
|
|
||||||
(option: any) => option.value === values.comparisonType,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import {
|
||||||
FormItem,
|
FormItem,
|
||||||
Input,
|
Input,
|
||||||
Notification,
|
Notification,
|
||||||
Select,
|
|
||||||
Table,
|
Table,
|
||||||
toast,
|
toast,
|
||||||
} from '@/components/ui'
|
} from '@/components/ui'
|
||||||
|
|
@ -34,7 +33,7 @@ import { useStoreState } from '@/store'
|
||||||
import { useLocalization } from '@/utils/hooks/useLocalization'
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
||||||
import setNull from '@/utils/setNull'
|
import setNull from '@/utils/setNull'
|
||||||
import classNames from 'classnames'
|
import classNames from 'classnames'
|
||||||
import { Field, FieldProps, Form, Formik, FormikHelpers } from 'formik'
|
import { Field, Form, Formik, FormikHelpers } from 'formik'
|
||||||
import { useCallback, useEffect, useState } from 'react'
|
import { useCallback, useEffect, useState } from 'react'
|
||||||
import { FaFileMedical, FaCopy, FaEyeSlash, FaMinus, FaTimes, FaTable } from 'react-icons/fa'
|
import { FaFileMedical, FaCopy, FaEyeSlash, FaMinus, FaTimes, FaTable } from 'react-icons/fa'
|
||||||
import { number, object, string } from 'yup'
|
import { number, object, string } from 'yup'
|
||||||
|
|
@ -44,6 +43,7 @@ import { IdentityRoleDto, IdentityUserDto } from '@/proxy/admin/models'
|
||||||
import { sqlObjectManagerService } from '@/services/sql-query-manager.service'
|
import { sqlObjectManagerService } from '@/services/sql-query-manager.service'
|
||||||
import type { DatabaseColumnDto } from '@/proxy/sql-query-manager/models'
|
import type { DatabaseColumnDto } from '@/proxy/sql-query-manager/models'
|
||||||
import type { EditingFormDto } from '@/proxy/form/models'
|
import type { EditingFormDto } from '@/proxy/form/models'
|
||||||
|
import SelectField from '../shared/SelectField'
|
||||||
|
|
||||||
export interface FormFieldEditProps {
|
export interface FormFieldEditProps {
|
||||||
onSubmit: (
|
onSubmit: (
|
||||||
|
|
@ -351,49 +351,25 @@ function FormFields({
|
||||||
invalid={errors.cultureName && touched.cultureName}
|
invalid={errors.cultureName && touched.cultureName}
|
||||||
errorMessage={errors.cultureName}
|
errorMessage={errors.cultureName}
|
||||||
>
|
>
|
||||||
<Field type="text" name="cultureName">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<LanguageInfo>) => (
|
name="cultureName"
|
||||||
<Select
|
|
||||||
placeholder={translate('::App.Listform.ListformField.CultureName')}
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
options={langOptions}
|
options={langOptions}
|
||||||
isClearable={true}
|
placeholder={translate('::App.Listform.ListformField.CultureName')}
|
||||||
value={langOptions.filter((option) => option.value === values?.cultureName)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem invalid={errors.roleId && touched.roleId} errorMessage={errors.roleId}>
|
<FormItem invalid={errors.roleId && touched.roleId} errorMessage={errors.roleId}>
|
||||||
<Field type="text" name="roleId">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<IdentityRoleDto>) => (
|
name="roleId"
|
||||||
<Select
|
|
||||||
placeholder={translate('::ListForms.ListFormField.Role')}
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
options={roleList}
|
options={roleList}
|
||||||
isClearable={true}
|
placeholder={translate('::ListForms.ListFormField.Role')}
|
||||||
value={roleList.filter((option) => option.value === values.roleId)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem invalid={errors.userId && touched.userId} errorMessage={errors.userId}>
|
<FormItem invalid={errors.userId && touched.userId} errorMessage={errors.userId}>
|
||||||
<Field type="text" name="userId">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<IdentityUserDto>) => (
|
name="userId"
|
||||||
<Select
|
|
||||||
placeholder={translate('::ListForms.ListFormField.User')}
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
options={userList}
|
options={userList}
|
||||||
isClearable={true}
|
placeholder={translate('::ListForms.ListFormField.User')}
|
||||||
value={userList.filter((option) => option.value === values.userId)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<Button block size="sm" variant="solid" loading={isSubmitting} type="submit">
|
<Button block size="sm" variant="solid" loading={isSubmitting} type="submit">
|
||||||
|
|
@ -590,43 +566,26 @@ function FormFields({
|
||||||
errorMessage={errors.fieldName}
|
errorMessage={errors.fieldName}
|
||||||
asterisk={true}
|
asterisk={true}
|
||||||
>
|
>
|
||||||
<Field type="text" name="fieldName">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
name="fieldName"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
options={columnOptions}
|
options={columnOptions}
|
||||||
isClearable={true}
|
// Sütun seçilince veri tipi kaynaktan otomatik doldurulur.
|
||||||
value={columnOptions.filter((option) => option.value === values.fieldName)}
|
onValueChange={(value, form) =>
|
||||||
onChange={(option) => {
|
|
||||||
form.setFieldValue(field.name, option?.value)
|
|
||||||
form.setFieldValue(
|
form.setFieldValue(
|
||||||
'sourceDbType',
|
'sourceDbType',
|
||||||
sqlDataTypeToDbType(
|
sqlDataTypeToDbType(
|
||||||
columns.find((c) => c.columnName === option?.value)?.dataType || '',
|
columns.find((column) => column.columnName === value)?.dataType || '',
|
||||||
) as any,
|
) as any,
|
||||||
)
|
)
|
||||||
}}
|
}
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem label={translate('::ListForms.ListFormEdit.CustomValueType')}>
|
<FormItem label={translate('::ListForms.ListFormEdit.CustomValueType')}>
|
||||||
<Field type="text" name="sourceDbType">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
name="sourceDbType"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={dbSourceTypeOptions}
|
options={dbSourceTypeOptions}
|
||||||
value={dbSourceTypeOptions.filter(
|
|
||||||
(option: any) => option.value === values.sourceDbType,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -635,23 +594,10 @@ function FormFields({
|
||||||
errorMessage={errors.cultureName}
|
errorMessage={errors.cultureName}
|
||||||
asterisk={true}
|
asterisk={true}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="cultureName"
|
name="cultureName"
|
||||||
placeholder={translate('::App.Listform.ListformField.CultureName')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<LanguageInfo>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={langOptions}
|
options={langOptions}
|
||||||
value={langOptions.filter((option) => option.value === values.cultureName)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -659,23 +605,10 @@ function FormFields({
|
||||||
invalid={errors.roleId && touched.roleId}
|
invalid={errors.roleId && touched.roleId}
|
||||||
errorMessage={errors.roleId}
|
errorMessage={errors.roleId}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="roleId"
|
name="roleId"
|
||||||
placeholder={translate('::ListForms.ListFormField.Role')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<IdentityRoleDto>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
options={roleList}
|
options={roleList}
|
||||||
isClearable={true}
|
|
||||||
value={roleList.filter((option) => option.value === values.roleId)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -683,23 +616,10 @@ function FormFields({
|
||||||
invalid={errors.userId && touched.userId}
|
invalid={errors.userId && touched.userId}
|
||||||
errorMessage={errors.userId}
|
errorMessage={errors.userId}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="userId"
|
name="userId"
|
||||||
placeholder={translate('::ListForms.ListFormField.User')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<IdentityUserDto>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
options={userList}
|
options={userList}
|
||||||
isClearable={true}
|
|
||||||
value={userList.filter((option) => option.value === values.userId)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<Button block size="sm" variant="solid" loading={isSubmitting} type="submit">
|
<Button block size="sm" variant="solid" loading={isSubmitting} type="submit">
|
||||||
|
|
@ -819,25 +739,10 @@ function FormFields({
|
||||||
invalid={errors.sourceFieldName && touched.sourceFieldName}
|
invalid={errors.sourceFieldName && touched.sourceFieldName}
|
||||||
errorMessage={errors.sourceFieldName}
|
errorMessage={errors.sourceFieldName}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoFocus={true}
|
|
||||||
name="sourceFieldName"
|
name="sourceFieldName"
|
||||||
placeholder={translate('::ListForms.ListFormField.CopySourceFieldName')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={fieldList}
|
options={fieldList}
|
||||||
value={fieldList.filter(
|
|
||||||
(option) => option.value === values.sourceFieldName,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -859,20 +764,10 @@ function FormFields({
|
||||||
invalid={errors.sourceCultureName && touched.sourceCultureName}
|
invalid={errors.sourceCultureName && touched.sourceCultureName}
|
||||||
errorMessage={errors.sourceCultureName}
|
errorMessage={errors.sourceCultureName}
|
||||||
>
|
>
|
||||||
<Field type="text" name="sourceCultureName" placeholder="Source Culture Name">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<LanguageInfo>) => (
|
name="sourceCultureName"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={langOptions}
|
options={langOptions}
|
||||||
value={langOptions.filter(
|
|
||||||
(option) => option.value === values.sourceCultureName,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -880,20 +775,10 @@ function FormFields({
|
||||||
invalid={errors.targetCultureName && touched.targetCultureName}
|
invalid={errors.targetCultureName && touched.targetCultureName}
|
||||||
errorMessage={errors.targetCultureName}
|
errorMessage={errors.targetCultureName}
|
||||||
>
|
>
|
||||||
<Field type="text" name="targetCultureName" placeholder="Target Culture Name">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<LanguageInfo>) => (
|
name="targetCultureName"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={langOptions}
|
options={langOptions}
|
||||||
value={langOptions.filter(
|
|
||||||
(option) => option.value === values.targetCultureName,
|
|
||||||
)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -901,18 +786,10 @@ function FormFields({
|
||||||
invalid={errors.roleId && touched.roleId}
|
invalid={errors.roleId && touched.roleId}
|
||||||
errorMessage={errors.roleId}
|
errorMessage={errors.roleId}
|
||||||
>
|
>
|
||||||
<Field type="text" autoComplete="off" name="roleId" placeholder="Role">
|
<SelectField
|
||||||
{({ field, form }: FieldProps<IdentityRoleDto>) => (
|
name="roleId"
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={roleList}
|
options={roleList}
|
||||||
value={roleList.filter((option) => option.value === values.roleId)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
@ -920,23 +797,10 @@ function FormFields({
|
||||||
invalid={errors.userId && touched.userId}
|
invalid={errors.userId && touched.userId}
|
||||||
errorMessage={errors.userId}
|
errorMessage={errors.userId}
|
||||||
>
|
>
|
||||||
<Field
|
<SelectField
|
||||||
type="text"
|
|
||||||
autoComplete="off"
|
|
||||||
name="userId"
|
name="userId"
|
||||||
placeholder={translate('::ListForms.ListFormField.User')}
|
|
||||||
>
|
|
||||||
{({ field, form }: FieldProps<IdentityUserDto>) => (
|
|
||||||
<Select
|
|
||||||
field={field}
|
|
||||||
form={form}
|
|
||||||
isClearable={true}
|
|
||||||
options={userList}
|
options={userList}
|
||||||
value={userList.filter((option) => option.value === values.userId)}
|
|
||||||
onChange={(option) => form.setFieldValue(field.name, option?.value)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
|
||||||
</Field>
|
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<div className="grid grid-cols-4 gap-4">
|
<div className="grid grid-cols-4 gap-4">
|
||||||
<FormItem label={translate('::App.Reports.Search')} labelClass="justify-center">
|
<FormItem label={translate('::App.Reports.Search')} labelClass="justify-center">
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,9 @@ import { BreakDto } from '@/proxy/admin/charts/models'
|
||||||
|
|
||||||
const schema = Yup.object().shape({
|
const schema = Yup.object().shape({
|
||||||
visible: Yup.boolean().notRequired(),
|
visible: Yup.boolean().notRequired(),
|
||||||
valueType: Yup.string().notRequired(),
|
// Eksen tipi listesindeki "None" seçeneği null döndürüyor.
|
||||||
type: Yup.string().notRequired(),
|
valueType: Yup.string().nullable().notRequired(),
|
||||||
|
type: Yup.string().nullable().notRequired(),
|
||||||
position: Yup.string().notRequired(),
|
position: Yup.string().notRequired(),
|
||||||
name: Yup.string().required(),
|
name: Yup.string().required(),
|
||||||
title: Yup.string().notRequired(),
|
title: Yup.string().notRequired(),
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ const schema = object().shape({
|
||||||
visible: boolean().notRequired(),
|
visible: boolean().notRequired(),
|
||||||
backgroundColor: string().notRequired(),
|
backgroundColor: string().notRequired(),
|
||||||
customizeText: string().notRequired(),
|
customizeText: string().notRequired(),
|
||||||
format: string().notRequired(),
|
format: string().nullable().notRequired(),
|
||||||
font: object().shape({
|
font: object().shape({
|
||||||
color: string().notRequired(),
|
color: string().notRequired(),
|
||||||
family: string().notRequired(),
|
family: string().notRequired(),
|
||||||
|
|
|
||||||
54
ui/src/views/admin/listForm/edit/shared/SelectField.tsx
Normal file
54
ui/src/views/admin/listForm/edit/shared/SelectField.tsx
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
import { Select } from '@/components/ui'
|
||||||
|
import { SelectBoxOption } from '@/types/shared'
|
||||||
|
import { Field, FieldProps } from 'formik'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ListForm düzenleme ekranlarındaki standart "Formik + Select" alanı.
|
||||||
|
*
|
||||||
|
* Bu kalıp klasör genelinde 100'den fazla yerde satır satır kopyalanmıştı ve
|
||||||
|
* her kopyada seçili değer `values.<alan>` üzerinden ayrıca yazıldığı için
|
||||||
|
* alan adı ile okunan değerin uyuşmadığı kopyala-yapıştır hataları oluşuyordu.
|
||||||
|
* Burada değer doğrudan Formik alanından okunur; uyuşmazlık mümkün değildir.
|
||||||
|
*/
|
||||||
|
type SelectFieldProps = {
|
||||||
|
name: string
|
||||||
|
options: readonly any[]
|
||||||
|
placeholder?: string
|
||||||
|
/** Varsayılan true; zorunlu alanlarda false verilmeli. */
|
||||||
|
isClearable?: boolean
|
||||||
|
isDisabled?: boolean
|
||||||
|
/**
|
||||||
|
* Seçim sonrası ek iş yapmak için (bağlı alanları temizlemek gibi).
|
||||||
|
* Alanın kendi değeri zaten yazılmış olarak çağrılır.
|
||||||
|
*/
|
||||||
|
onValueChange?: (value: any, form: FieldProps['form']) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
const SelectField = ({
|
||||||
|
name,
|
||||||
|
options,
|
||||||
|
placeholder,
|
||||||
|
isClearable = true,
|
||||||
|
isDisabled,
|
||||||
|
onValueChange,
|
||||||
|
}: SelectFieldProps) => (
|
||||||
|
<Field name={name}>
|
||||||
|
{({ field, form }: FieldProps<SelectBoxOption>) => (
|
||||||
|
<Select
|
||||||
|
field={field}
|
||||||
|
form={form}
|
||||||
|
isClearable={isClearable}
|
||||||
|
isDisabled={isDisabled}
|
||||||
|
options={options as any}
|
||||||
|
placeholder={placeholder}
|
||||||
|
value={options.find((option) => option?.value === field.value) ?? null}
|
||||||
|
onChange={(option: any) => {
|
||||||
|
form.setFieldValue(name, option?.value)
|
||||||
|
onValueChange?.(option?.value, form)
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</Field>
|
||||||
|
)
|
||||||
|
|
||||||
|
export default SelectField
|
||||||
Loading…
Reference in a new issue