diff --git a/api/src/Kurs.Platform.Application.Contracts/Charts/Dto/ChartDto.cs b/api/src/Kurs.Platform.Application.Contracts/Charts/Dto/ChartDto.cs index 47d02202..ff96da40 100644 --- a/api/src/Kurs.Platform.Application.Contracts/Charts/Dto/ChartDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/Charts/Dto/ChartDto.cs @@ -9,6 +9,8 @@ namespace Kurs.Platform.Charts.Dto { public class ChartEditDto : ChartDto { + public string EditType { get; set; } + /// Chart'a ait sorguların tutulduğu Json veri yapısı /// [JsonIgnore] diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridColumnOptionDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridColumnOptionDto.cs index 28a530a1..e70a6922 100644 --- a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridColumnOptionDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridColumnOptionDto.cs @@ -32,20 +32,4 @@ public class GridColumnOptionDto public bool ColumnHidingEnabled { get; set; } = false; public bool FocusedRowEnabled { get; set; } = false; public bool ShowColumnHeaders { get; set; } = true; - - /// pivot grid için eklenmiş sütunlardır. - /// - public bool AllowFieldDragging { get; set; } = true; - public bool ShowFieldPanel { get; set; } = true; - public bool ShowDataFields { get; set; } = true; - public bool ShowColumnFields { get; set; } = true; - public bool ShowRowFields { get; set; } = true; - public bool ShowFilterFields { get; set; } = true; - - /// pivot grid üzerinde küçük Chart özellikleri - /// - public bool ShowChart { get; set; } = false; - public int ChartHeight { get; set; } = 320; - public string ChartCommonSeriesType { get; set; } = "bar"; - } diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsDto.cs index d9f36506..f1d81338 100644 --- a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsDto.cs @@ -122,6 +122,19 @@ public class GridOptionsDto : AuditedEntityDto set { ColumnOptionJson = JsonSerializer.Serialize(value); } } + [JsonIgnore] + public string PivotOptionJson { get; set; } + public GridPivotOptionDto PivotOptionDto + { + get + { + if (!string.IsNullOrEmpty(PivotOptionJson)) + return JsonSerializer.Deserialize(PivotOptionJson); + return new GridPivotOptionDto(); + } + set { PivotOptionJson = JsonSerializer.Serialize(value); } + } + [JsonIgnore] public string PagerOptionJson { get; set; } public GridPagerOptionDto PagerOptionDto diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridPivotOptionDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridPivotOptionDto.cs new file mode 100644 index 00000000..ca316fa6 --- /dev/null +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridPivotOptionDto.cs @@ -0,0 +1,20 @@ +namespace Kurs.Platform.ListForms; + +public class GridPivotOptionDto +{ + /// pivot grid için eklenmiş sütunlardır. + /// + public bool AllowFieldDragging { get; set; } = true; + public bool ShowFieldPanel { get; set; } = true; + public bool ShowDataFields { get; set; } = true; + public bool ShowColumnFields { get; set; } = true; + public bool ShowRowFields { get; set; } = true; + public bool ShowFilterFields { get; set; } = true; + + /// pivot grid üzerinde küçük Chart özellikleri + /// + public bool ShowChart { get; set; } = false; + public int ChartHeight { get; set; } = 320; + public string ChartCommonSeriesType { get; set; } = "bar"; + +} diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/ListFormEditTabs.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/ListFormEditTabs.cs index e0f5d957..111de440 100644 --- a/api/src/Kurs.Platform.Application.Contracts/ListForms/ListFormEditTabs.cs +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/ListFormEditTabs.cs @@ -43,6 +43,7 @@ public class ListFormEditTabs public const string GroupForm = "group"; public const string SelectForm = "select"; public const string ColumnForm = "column"; + public const string PivotForm = "pivot"; public const string PagerForm = "pager"; public const string StateForm = "state"; public const string SubFormJsonRow = "subForm"; diff --git a/api/src/Kurs.Platform.Application/ListForms/Administration/ListFormsAppService.cs b/api/src/Kurs.Platform.Application/ListForms/Administration/ListFormsAppService.cs index 1af3b62e..48be1d89 100644 --- a/api/src/Kurs.Platform.Application/ListForms/Administration/ListFormsAppService.cs +++ b/api/src/Kurs.Platform.Application/ListForms/Administration/ListFormsAppService.cs @@ -130,10 +130,13 @@ public class ListFormsAppService : CrudAppService< { item.ColumnOptionJson = JsonSerializer.Serialize(input.ColumnOptionDto); } + else if (input.EditType == ListFormEditTabs.PivotForm) + { + item.PivotOptionJson = JsonSerializer.Serialize(input.PivotOptionDto); + } else if (input.EditType == ListFormEditTabs.PagerForm) { item.PagerOptionJson = JsonSerializer.Serialize(input.PagerOptionDto); - //item.PageSize = input.PageSize; } else if (input.EditType == ListFormEditTabs.StateForm) { diff --git a/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs b/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs index 1fb6c1f4..e7ff1348 100644 --- a/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs +++ b/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs @@ -1,7 +1,6 @@ using AutoMapper; using Kurs.Platform.Entities; using Kurs.Platform.ListForms.Customization; -using Kurs.Platform.ListForms.ImportManager; using Kurs.Platform.ListForms.Select; using Kurs.Platform.Queries; diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json index 4048100a..5489ea1f 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json @@ -12408,12 +12408,6 @@ "en": "Selection", "tr": "Seçme" }, - { - "resourceName": "Platform", - "key": "ListForms.ListFormEdit.TabColumnsPivots", - "en": "Columns & Pivots", - "tr": "Sütunlar & Pivotlar" - }, { "resourceName": "Platform", "key": "ListForms.ListFormEdit.TabColumns", diff --git a/api/src/Kurs.Platform.Domain/Entities/ListForm.cs b/api/src/Kurs.Platform.Domain/Entities/ListForm.cs index 81016dfe..aacd9a54 100644 --- a/api/src/Kurs.Platform.Domain/Entities/ListForm.cs +++ b/api/src/Kurs.Platform.Domain/Entities/ListForm.cs @@ -31,6 +31,7 @@ public class ListForm : FullAuditedEntity public string DefaultFilter { get; set; } // Her sorgunun sonuna eklenecek default WHERE condition public string ColumnOptionJson { get; set; } + public string PivotOptionJson { get; set; } public string FilterRowJson { get; set; } // Filtre ayarlari, Json olarak tutulur, donus sinifi FilterRowDto public string HeaderFilterJson { get; set; } // Header filtreleme ayarlari, Json olarak tutulur public string FilterPanelJson { get; set; } // Filtre paneli Json verileri diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250922114945_Initial.Designer.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250925111605_Initial.Designer.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250922114945_Initial.Designer.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250925111605_Initial.Designer.cs index a6ed97b4..23f39a59 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250922114945_Initial.Designer.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250925111605_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Kurs.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20250922114945_Initial")] + [Migration("20250925111605_Initial")] partial class Initial { /// @@ -2893,6 +2893,9 @@ namespace Kurs.Platform.Migrations b.Property("PermissionJson") .HasColumnType("nvarchar(max)"); + b.Property("PivotOptionJson") + .HasColumnType("nvarchar(max)"); + b.Property("SearchPanelJson") .HasColumnType("nvarchar(max)"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250922114945_Initial.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250925111605_Initial.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250922114945_Initial.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250925111605_Initial.cs index 8d6001bd..55a50b8f 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250922114945_Initial.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250925111605_Initial.cs @@ -1209,6 +1209,7 @@ namespace Kurs.Platform.Migrations Height = table.Column(type: "int", nullable: true), DefaultFilter = table.Column(type: "nvarchar(max)", nullable: true), ColumnOptionJson = table.Column(type: "nvarchar(max)", nullable: true), + PivotOptionJson = table.Column(type: "nvarchar(max)", nullable: true), FilterRowJson = table.Column(type: "nvarchar(max)", nullable: true), HeaderFilterJson = table.Column(type: "nvarchar(max)", nullable: true), FilterPanelJson = table.Column(type: "nvarchar(max)", nullable: true), diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 691d55ea..9662f861 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -2890,6 +2890,9 @@ namespace Kurs.Platform.Migrations b.Property("PermissionJson") .HasColumnType("nvarchar(max)"); + b.Property("PivotOptionJson") + .HasColumnType("nvarchar(max)"); + b.Property("SearchPanelJson") .HasColumnType("nvarchar(max)"); diff --git a/api/src/Kurs.Platform.HttpApi.Host/Extensions/CaptchaMiddleware.cs b/api/src/Kurs.Platform.HttpApi.Host/Extensions/CaptchaMiddleware.cs index d5379e0d..cabb1e4c 100644 --- a/api/src/Kurs.Platform.HttpApi.Host/Extensions/CaptchaMiddleware.cs +++ b/api/src/Kurs.Platform.HttpApi.Host/Extensions/CaptchaMiddleware.cs @@ -29,30 +29,86 @@ public class CaptchaMiddleware : IMiddleware, ITransientDependency public async Task InvokeAsync(HttpContext context, RequestDelegate next) { var attribute = context.GetEndpoint()?.Metadata?.Any(a => a is CaptchaAttribute); - //var endpoint = context.Features.Get()?.Endpoint; - //var attribute = endpoint?.Metadata.GetMetadata(); if (attribute == true) { context.Request.EnableBuffering(); - var requestBody = await new StreamReader(context.Request.Body).ReadToEndAsync(); - var jsonDocument = JsonDocument.Parse(requestBody); - if (jsonDocument.RootElement.TryGetProperty("captchaResponse", out var response)) + string requestBody; + + using (var reader = new StreamReader(context.Request.Body, leaveOpen: true)) { - var result = await captchaManager.VerifyCaptchaAsync(response.GetString()); - if (result == false) + requestBody = await reader.ReadToEndAsync(); + context.Request.Body.Position = 0; // Body tekrar okunabilsin + } + + if (string.IsNullOrWhiteSpace(requestBody)) + { + await WriteBadRequestAsync(context); + return; + } + + try + { + using var jsonDocument = JsonDocument.Parse(requestBody); + + if (!jsonDocument.RootElement.TryGetProperty("captchaResponse", out var response)) { - context.Response.Clear(); - context.Response.ContentType = "text/plain"; - context.Response.StatusCode = (int)HttpStatusCode.BadRequest; - await context.Response.WriteAsync(localizer[PlatformConsts.AbpIdentity.User.CaptchaWrongCode]); + await WriteBadRequestAsync(context); + return; + } + + var result = await captchaManager.VerifyCaptchaAsync(response.GetString()); + if (!result) + { + await WriteBadRequestAsync(context); return; } } - context.Request.Body.Position = 0; + catch (JsonException) + { + await WriteBadRequestAsync(context); + return; + } } await next(context); } + private async Task WriteBadRequestAsync(HttpContext context) + { + context.Response.Clear(); + context.Response.ContentType = "text/plain"; + context.Response.StatusCode = (int)HttpStatusCode.BadRequest; + await context.Response.WriteAsync(localizer[PlatformConsts.AbpIdentity.User.CaptchaWrongCode]); + } + + + // public async Task InvokeAsync(HttpContext context, RequestDelegate next) + // { + // var attribute = context.GetEndpoint()?.Metadata?.Any(a => a is CaptchaAttribute); + // //var endpoint = context.Features.Get()?.Endpoint; + // //var attribute = endpoint?.Metadata.GetMetadata(); + // if (attribute == true) + // { + // context.Request.EnableBuffering(); + // var requestBody = await new StreamReader(context.Request.Body).ReadToEndAsync(); + // var jsonDocument = JsonDocument.Parse(requestBody); + // if (jsonDocument.RootElement.TryGetProperty("captchaResponse", out var response)) + // { + // var result = await captchaManager.VerifyCaptchaAsync(response.GetString()); + // if (result == false) + // { + // context.Response.Clear(); + // context.Response.ContentType = "text/plain"; + // context.Response.StatusCode = (int)HttpStatusCode.BadRequest; + // await context.Response.WriteAsync(localizer[PlatformConsts.AbpIdentity.User.CaptchaWrongCode]); + // return; + // } + // } + // context.Request.Body.Position = 0; + // } + + // await next(context); + // } + } diff --git a/ui/src/proxy/admin/list-form/models.ts b/ui/src/proxy/admin/list-form/models.ts index 732f7144..ec996804 100644 --- a/ui/src/proxy/admin/list-form/models.ts +++ b/ui/src/proxy/admin/list-form/models.ts @@ -74,6 +74,7 @@ export const ListFormEditTabs = { GroupForm: 'group', SelectForm: 'select', ColumnForm: 'column', + PivotForm: 'pivot', PagerForm: 'pager', StateForm: 'state', SubForm: 'subForm', diff --git a/ui/src/proxy/charts/models.ts b/ui/src/proxy/charts/models.ts index aebeb953..72cdcc2e 100644 --- a/ui/src/proxy/charts/models.ts +++ b/ui/src/proxy/charts/models.ts @@ -234,6 +234,7 @@ export interface ChartDto extends AuditedEntityDto { } export interface ChartEditDto extends ChartDto { + editType: string dataSourceJson?: string dataSourceDto: ChartDataSourceDto dataSourceCode?: string diff --git a/ui/src/proxy/form/models.ts b/ui/src/proxy/form/models.ts index 0e2f8ef4..65573046 100644 --- a/ui/src/proxy/form/models.ts +++ b/ui/src/proxy/form/models.ts @@ -331,6 +331,9 @@ export interface GridColumnOptionDto { columnHidingEnabled: boolean focusedRowEnabled: boolean showColumnHeaders: boolean +} + +export interface GridPivotOptionDto { allowFieldDragging: boolean showFieldPanel: boolean showDataFields: boolean @@ -455,6 +458,8 @@ export interface GridOptionsDto extends AuditedEntityDto { selectionDto: SelectionDto columnOptionJson?: string columnOptionDto: GridColumnOptionDto + pivotOptionJson?: string + pivotOptionDto: GridPivotOptionDto pagerOptionJson?: string pagerOptionDto: GridPagerOptionDto editingOptionJson?: string diff --git a/ui/src/views/admin/chart/ChartEdit.tsx b/ui/src/views/admin/chart/ChartEdit.tsx index 28d25715..3ed3e27b 100644 --- a/ui/src/views/admin/chart/ChartEdit.tsx +++ b/ui/src/views/admin/chart/ChartEdit.tsx @@ -1,4 +1,4 @@ -import { +import { Alert, Button, Card, @@ -9,15 +9,9 @@ import { Input, Notification, Select, - Table, Tabs, toast, } from '@/components/ui' -import TBody from '@/components/ui/Table/TBody' -import THead from '@/components/ui/Table/THead' -import Td from '@/components/ui/Table/Td' -import Th from '@/components/ui/Table/Th' -import Tr from '@/components/ui/Table/Tr' import TabContent from '@/components/ui/Tabs/TabContent' import TabList from '@/components/ui/Tabs/TabList' import TabNav from '@/components/ui/Tabs/TabNav' @@ -28,9 +22,6 @@ import { putChartJsonItem, putCharts, } from '@/services/chart.service' -import { LanguageInfo } from '@/proxy/config/models' -import { getDataSources } from '@/proxy/data-source' -import { themeOptions, tooltipFormatListOptions } from '@/shared/options' import { SelectBoxOption } from '@/shared/types' import { useStoreState } from '@/store' import { useLocalization } from '@/utils/hooks/useLocalization' @@ -38,39 +29,20 @@ import setNull from '@/utils/setNull' import { Field, FieldArray, FieldProps, Form, Formik, FormikProps, getIn } from 'formik' import { useEffect, useState } from 'react' import { Helmet } from 'react-helmet' -import { FaEdit, FaMinus, FaFileMedical, FaPlus, FaTrash } from 'react-icons/fa' import { Link, useParams } from 'react-router-dom' import { object, string } from 'yup' import { chartAnnotationTypeListOptions, - chartArgumentAxisHoverModeListOptions, - chartArgumentAxisIntervalListOptions, - chartArgumentAxisLabelDisplayModeListOptions, - chartArgumentAxisLabelOverlappingBehaviorListOptions, chartArgumentAxisPositionListOptions, chartArgumentAxisTypeListOptions, chartBreakStyleLineListOptions, - chartEasingListOptions, - chartLegendOrientationListOptions, - chartLegendPositionListOptions, - chartPaletteExtensionModeOptions, - chartPaletteOptions, chartSeriesDashStyleOptions, chartSeriesSelectionModeOptions, chartSeriesTypeOptions, - chartTitleHorizantalAlignmentListOptions, - chartTitleTextOverFlowListOptions, - chartTitleVerticalAlignmentListOptions, chartTitleWordWrapListOptions, - chartTooltipLocationListOptions, - chartWordWrapListOptions, - chartZoomAndPanAxisOptions, - chartZoomAndPanKeyOptions, } from './options' import { ChartDialogType, ChartOperation } from './types' import { IdentityRoleDto, IdentityUserDto } from '@/proxy/admin/models' -import { MenuDto } from '@/proxy/menus/models' -import { DataSourceTypeEnum } from '@/proxy/form/models' import { BreakDto, ChartAnnotationDto, @@ -80,6 +52,23 @@ import { ChartValueAxisDto, } from '@/proxy/charts/models' import { Container } from '@/components/shared' +import ChartEditDetailsTab from './edit/ChartTabDetails' +import ChartEditDatabaseTab from './edit/ChartTabDatabase' +import ChartEditCommonSettingsTab from './edit/ChartTabCommonSettings' +import ChartEditPermissionsTab from './edit/ChartTabPermissions' +import ChartEditSeriesTab from './edit/ChartTabSeries' +import ChartEditAxisTab from './edit/ChartTabAxis' +import ChartEditPanesTab from './edit/ChartTabPanes' +import ChartEditCrosshairTab from './edit/ChartTabCrosshair' +import ChartTabAnimation from './edit/ChartTabAnimation' +import ChartEditExportTab from './edit/ChartTabExport' +import ChartTabLegend from './edit/ChartTabLegend' +import ChartTabAnnotations from './edit/ChartTabAnnotations' +import ChartEditZoomAndPanTab from './edit/ChartTabZoomAndPan' +import { getDataSources } from '@/proxy/data-source' +import { tooltipFormatListOptions } from '@/shared/options' +import { FaMinus } from 'react-icons/fa' +import { ROUTES_ENUM } from '@/routes/route.constant' const chartPanesValidationSchema = object().shape({ name: string().required(), @@ -112,7 +101,7 @@ const chartValidationSchema = object().shape({ chartCode: string().required(), }) -interface DatabaseOperation { +export interface DatabaseOperation { isOpen: ChartDialogType id: string operation: ChartOperation @@ -130,7 +119,7 @@ const defaultDatabaseOperation: DatabaseOperation = { index: -1, } -interface ConfirmDelete { +export interface ConfirmDelete { isOpen: boolean id: string index: number @@ -148,10 +137,7 @@ function ChartEdit() { const { chartCode } = useParams() const { translate } = useLocalization() const [dataSourceList, setDataSourceList] = useState([]) - - const languages: LanguageInfo[] | undefined = useStoreState( - (state) => state.abpConfig.config?.localization.languages, - ) + const languages = useStoreState((state) => state.abpConfig.config?.localization.languages) const permissions: Record | undefined = useStoreState( (state) => state.abpConfig.config?.auth.grantedPolicies, ) @@ -164,6 +150,26 @@ function ChartEdit() { const [databaseOperationsModalData, setDatabaseOperationsModalData] = useState(defaultDatabaseOperation) + const onSubmit = async (editType: string, values: Partial): Promise => { + try { + await putCharts({ + ...chartValues, + ...values, // sadece güncellenen tab'ın değerleri override edilir + } as ChartEditDto) // chartValues null olamaz çünkü form ancak chartValues yüklendikten sonra render ediliyor + + toast.push( + + {`${editType} kaydedildi.`} + , + { placement: 'top-end' }, + ) + + await getChartValues() + } catch (error) { + toast.push(Hata: {String(error)}) + } + } + const valueAxisList = () => { return chartValues?.valueAxisDto.map((key: ChartValueAxisDto) => ({ value: key.name, @@ -292,7 +298,11 @@ function ChartEdit() {

- 🔙 {chartCode} + + 🔙 {chartCode} +

{chartValues.isTenant && ( @@ -307,8 +317,8 @@ function ChartEdit() { Details Database - Common Permissions + Common Series Axis Panes @@ -320,2989 +330,103 @@ function ChartEdit() { Annotations - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.roleId)} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.dataSourceCode, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - + - - - General - - Adaptive Layout Settings - - Title Settings - Tooltip Settings - Margin Settings - Size Settings - ScrollBar Settings - - - - - - - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.commonDto.palette, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.titleDto.verticalAlignment, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.titleDto.textOverflow, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.tooltipDto.format, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.tooltipDto.border.dashStyle, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.permissionDto.c, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - {({ field, form }: FieldProps) => ( - option.value === values.permissionDto.u, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - {({ field, form }: FieldProps) => ( - option.value === values.commonSeriesSettingsDto.type, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.commonSeriesSettingsDto.axis, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - - option.value === values.commonSeriesSettingsDto.dashStyle, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - + - - - Value Axis - Argument Axis Options - Common Axis Settings - - - - - - - - - - - - - - - - - {chartValues.valueAxisDto.map((row, index) => ( - - - - - - - - - - ))} - -
- Value TypePositionTypeNameTitleVisible
-
-
-
{row.valueType}{row.position}{row.type}{row.name}{row.title}{row.visible}
-
-
- - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.argumentAxisDto.argumentType, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - - option.value === values.argumentAxisDto.aggregationInterval, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - - option.value === - values.argumentAxisDto.label.overlappingBehavior, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
- - - - - - - - - - - - - - - - - {chartValues.panesDto.map((row, index) => ( - - - - - - - ))} - -
- NameBackground ColorHeight
-
-
-
{row.name}{row.backgroundColor}{row.height}
-
+
- - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.crosshairDto.dashStyle, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - - option.value === values.crosshairDto.horizontalLine.dashStyle, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.legendDto.orientation, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.legendDto.border.dashStyle, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.zoomAndPanDto.valueAxis, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - - option.value === values.commonAnnotationSettingsDto.type, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - {({ field, form }: FieldProps) => ( - - option.value === values.commonAnnotationSettingsDto.wordWrap, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.animationDto.easing, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + ) +} + +export default ChartTabAnimation diff --git a/ui/src/views/admin/chart/edit/ChartTabAnnotations.tsx b/ui/src/views/admin/chart/edit/ChartTabAnnotations.tsx new file mode 100644 index 00000000..ab23becb --- /dev/null +++ b/ui/src/views/admin/chart/edit/ChartTabAnnotations.tsx @@ -0,0 +1,558 @@ +import { Button, Card, Checkbox, FormItem, Input, Select, Table, 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 TBody from '@/components/ui/Table/TBody' +import THead from '@/components/ui/Table/THead' +import Td from '@/components/ui/Table/Td' +import Th from '@/components/ui/Table/Th' +import Tr from '@/components/ui/Table/Tr' +import { ChartEditDto } from '@/proxy/charts/models' +import { SelectBoxOption } from '@/shared/types' +import { Field, FieldProps, FormikErrors, FormikTouched } from 'formik' +import { FaEdit, FaFileMedical, FaTrash } from 'react-icons/fa' +import { + chartAnnotationTypeListOptions, + chartSeriesDashStyleOptions, + chartWordWrapListOptions, +} from './../options' +import { ChartDialogType } from './../types' +import { ConfirmDelete, DatabaseOperation } from '../ChartEdit' + +interface ChartTabAnnotationsProps { + values: ChartEditDto + errors: FormikErrors + touched: FormikTouched + chartValues: ChartEditDto + setDatabaseOperationsModalData: (data: DatabaseOperation) => void + setConfirmDelete: (data: ConfirmDelete) => void + SeriesList: () => SelectBoxOption[] | undefined +} + +const ChartTabAnnotations = ({ + values, + errors, + touched, + chartValues, + setDatabaseOperationsModalData, + setConfirmDelete, + SeriesList, +}: ChartTabAnnotationsProps) => { + return ( + + + General + Common Pane + + + + + + + + + + + + + + + + + {chartValues.annotationsDto.map((row, index) => ( + + + + + + + + + + ))} + +
+ TypeNameTextSeriesValueWidth
+
+
+
{row.type}{row.name}{row.text}{row.series}{row.value}{row.width}
+
+
+ + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.commonAnnotationSettingsDto.series, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + + option.value === values.commonAnnotationSettingsDto.border.dashStyle, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ) +} + +export default ChartTabAnnotations diff --git a/ui/src/views/admin/chart/edit/ChartTabAxis.tsx b/ui/src/views/admin/chart/edit/ChartTabAxis.tsx new file mode 100644 index 00000000..40b042d0 --- /dev/null +++ b/ui/src/views/admin/chart/edit/ChartTabAxis.tsx @@ -0,0 +1,440 @@ +import { Button, Card, Checkbox, FormItem, Input, Select, Table, Tabs } from '@/components/ui' +import TBody from '@/components/ui/Table/TBody' +import THead from '@/components/ui/Table/THead' +import Td from '@/components/ui/Table/Td' +import Th from '@/components/ui/Table/Th' +import Tr from '@/components/ui/Table/Tr' +import TabContent from '@/components/ui/Tabs/TabContent' +import TabList from '@/components/ui/Tabs/TabList' +import TabNav from '@/components/ui/Tabs/TabNav' +import { ChartEditDto, ChartValueAxisDto } from '@/proxy/charts/models' +import { SelectBoxOption } from '@/shared/types' +import { Field, FieldProps, FormikErrors, FormikTouched } from 'formik' +import { FaEdit, FaPlus, FaTrash } from 'react-icons/fa' +import { + chartArgumentAxisHoverModeListOptions, + chartArgumentAxisIntervalListOptions, + chartArgumentAxisLabelDisplayModeListOptions, + chartArgumentAxisLabelOverlappingBehaviorListOptions, + chartArgumentAxisPositionListOptions, + chartArgumentAxisTypeListOptions, +} from './../options' +import { ChartDialogType } from './../types' +import { ConfirmDelete, DatabaseOperation } from '../ChartEdit' + +interface ChartTabAxisProps { + values: ChartEditDto + errors: FormikErrors + touched: FormikTouched + chartValues: ChartEditDto + setDatabaseOperationsModalData: (data: DatabaseOperation) => void + setConfirmDelete: (data: ConfirmDelete) => void +} + +const ChartTabAxis = ({ + values, + errors, + touched, + chartValues, + setDatabaseOperationsModalData, + setConfirmDelete, +}: ChartTabAxisProps) => { + return ( + + + Value Axis + Argument Axis Options + Common Axis Settings + + + + + + + + + + + + + + + + + {chartValues.valueAxisDto.map((row, index) => ( + + + + + + + + + + ))} + +
+ Value TypePositionTypeNameTitleVisible
+
+
+
{row.valueType}{row.position}{row.type}{row.name}{row.title}{row.visible}
+
+
+ + + + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.argumentAxisDto.argumentType, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.argumentAxisDto.aggregationInterval, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.argumentAxisDto.label.overlappingBehavior, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ) +} + +export default ChartTabAxis diff --git a/ui/src/views/admin/chart/edit/ChartTabCommonSettings.tsx b/ui/src/views/admin/chart/edit/ChartTabCommonSettings.tsx new file mode 100644 index 00000000..6d9037d5 --- /dev/null +++ b/ui/src/views/admin/chart/edit/ChartTabCommonSettings.tsx @@ -0,0 +1,586 @@ +import { Card, Checkbox, FormItem, Input, Select, 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 { ChartEditDto } from '@/proxy/charts/models' +import { IdentityRoleDto } from '@/proxy/admin/models' +import { + chartArgumentAxisPositionListOptions, + chartPaletteExtensionModeOptions, + chartPaletteOptions, + chartSeriesDashStyleOptions, + chartTitleHorizantalAlignmentListOptions, + chartTitleTextOverFlowListOptions, + chartTitleVerticalAlignmentListOptions, + chartTitleWordWrapListOptions, + chartTooltipLocationListOptions, +} from './../options' +import { SelectBoxOption } from '@/shared/types' +import { Field, FieldProps, FormikErrors, FormikTouched } from 'formik' +import { themeOptions, tooltipFormatListOptions } from '@/shared/options' + +interface ChartTabCommonSettingsProps { + values: ChartEditDto + errors: FormikErrors + touched: FormikTouched +} + +const ChartTabCommonSettings = ({ values, errors, touched }: ChartTabCommonSettingsProps) => { + return ( + + + General + Adaptive Layout Settings + Title Settings + Tooltip Settings + Margin Settings + Size Settings + ScrollBar Settings + + + + + + + + + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.commonDto.palette, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.titleDto.verticalAlignment, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.titleDto.textOverflow, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.tooltipDto.format, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.tooltipDto.border.dashStyle, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.crosshairDto.dashStyle, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.crosshairDto.horizontalLine.dashStyle, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.dataSourceCode)} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + ) +} + +export default ChartTabDatabase diff --git a/ui/src/views/admin/chart/edit/ChartTabDetails.tsx b/ui/src/views/admin/chart/edit/ChartTabDetails.tsx new file mode 100644 index 00000000..b4bba7fc --- /dev/null +++ b/ui/src/views/admin/chart/edit/ChartTabDetails.tsx @@ -0,0 +1,87 @@ +import { FormItem, Input, Select } from '@/components/ui' +import { IdentityRoleDto, IdentityUserDto } from '@/proxy/admin/models' +import { ChartEditDto } from '@/proxy/charts/models' +import { LanguageInfo } from '@/proxy/config/models' +import { SelectBoxOption } from '@/shared/types' +import { Field, FieldProps, FormikErrors, FormikTouched } from 'formik' + +interface ChartTabDetailsProps { + values: ChartEditDto + errors: FormikErrors + touched: FormikTouched + langOptions: SelectBoxOption[] + roleList: SelectBoxOption[] + userList: SelectBoxOption[] +} + +const ChartTabDetails = ({ + values, + errors, + touched, + langOptions, + roleList, + userList, +}: ChartTabDetailsProps) => { + return ( + <> + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.roleId)} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.legendDto.orientation, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.legendDto.border.dashStyle, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + ) +} + +export default ChartTabLegend diff --git a/ui/src/views/admin/chart/edit/ChartTabPanes.tsx b/ui/src/views/admin/chart/edit/ChartTabPanes.tsx new file mode 100644 index 00000000..87534cff --- /dev/null +++ b/ui/src/views/admin/chart/edit/ChartTabPanes.tsx @@ -0,0 +1,127 @@ +import { Button, Card, FormItem, Input, Table } from '@/components/ui' +import TBody from '@/components/ui/Table/TBody' +import THead from '@/components/ui/Table/THead' +import Td from '@/components/ui/Table/Td' +import Th from '@/components/ui/Table/Th' +import Tr from '@/components/ui/Table/Tr' +import { ChartEditDto } from '@/proxy/charts/models' +import { Field, FormikErrors, FormikTouched } from 'formik' +import { FaEdit, FaFileMedical, FaTrash } from 'react-icons/fa' +import { ConfirmDelete, DatabaseOperation } from '../ChartEdit' + +interface ChartTabPanesProps { + values: ChartEditDto + errors: FormikErrors + touched: FormikTouched + chartValues: ChartEditDto + setDatabaseOperationsModalData: (data: DatabaseOperation) => void + setConfirmDelete: (data: ConfirmDelete) => void +} + +const ChartTabPanes = ({ + values, + errors, + touched, + chartValues, + setDatabaseOperationsModalData, + setConfirmDelete, +}: ChartTabPanesProps) => { + return ( + <> + + + + + + + + + + + + + + + + + {chartValues.panesDto.map((row, index) => ( + + + + + + + ))} + +
+ NameBackground ColorHeight
+
+
+
{row.name}{row.backgroundColor}{row.height}
+
+ + ) +} + +export default ChartTabPanes diff --git a/ui/src/views/admin/chart/edit/ChartTabPermissions.tsx b/ui/src/views/admin/chart/edit/ChartTabPermissions.tsx new file mode 100644 index 00000000..d45a6d9b --- /dev/null +++ b/ui/src/views/admin/chart/edit/ChartTabPermissions.tsx @@ -0,0 +1,98 @@ +import { FormItem, Select } from '@/components/ui' +import { MenuDto } from '@/proxy/menus/models' +import { ChartEditDto } from '@/proxy/charts/models' +import { SelectBoxOption } from '@/shared/types' +import { Field, FieldProps, FormikErrors, FormikTouched } from 'formik' + +interface ChartTabPermissionsProps { + values: ChartEditDto + errors: FormikErrors + touched: FormikTouched + permissionOptions: SelectBoxOption[] +} + +const ChartTabPermissions = ({ + values, + errors, + touched, + permissionOptions, +}: ChartTabPermissionsProps) => { + return ( + <> + + + {({ field, form }: FieldProps) => ( + option.value === values.permissionDto.r)} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + {({ field, form }: FieldProps) => ( + option.value === values.permissionDto.d)} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + ) +} + +export default ChartTabPermissions diff --git a/ui/src/views/admin/chart/edit/ChartTabSeries.tsx b/ui/src/views/admin/chart/edit/ChartTabSeries.tsx new file mode 100644 index 00000000..464edc53 --- /dev/null +++ b/ui/src/views/admin/chart/edit/ChartTabSeries.tsx @@ -0,0 +1,366 @@ +import { Button, Card, Checkbox, FormItem, Input, Select, Table, Tabs } from '@/components/ui' +import TBody from '@/components/ui/Table/TBody' +import THead from '@/components/ui/Table/THead' +import Td from '@/components/ui/Table/Td' +import Th from '@/components/ui/Table/Th' +import Tr from '@/components/ui/Table/Tr' +import TabContent from '@/components/ui/Tabs/TabContent' +import TabList from '@/components/ui/Tabs/TabList' +import TabNav from '@/components/ui/Tabs/TabNav' +import { + ChartAnnotationDto, + ChartEditDto, + ChartPanesDto, + ChartSeriesDto, + ChartValueAxisDto, +} from '@/proxy/charts/models' +import { SelectBoxOption } from '@/shared/types' +import { Field, FieldProps, FormikErrors, FormikTouched } from 'formik' +import { FaEdit, FaPlus, FaTrash } from 'react-icons/fa' +import { + chartSeriesDashStyleOptions, + chartSeriesSelectionModeOptions, + chartSeriesTypeOptions, +} from './../options' +import { ChartDialogType, ChartOperation } from './../types' +import { ConfirmDelete, DatabaseOperation } from '../ChartEdit' + +interface ChartTabSeriesProps { + values: ChartEditDto + errors: FormikErrors + touched: FormikTouched + chartValues: ChartEditDto + setDatabaseOperationsModalData: (data: DatabaseOperation) => void + setConfirmDelete: (data: ConfirmDelete) => void + valueAxisList: () => SelectBoxOption[] | undefined + valuePaneList: () => SelectBoxOption[] | undefined +} + +const ChartTabSeries = ({ + values, + errors, + touched, + chartValues, + setDatabaseOperationsModalData, + setConfirmDelete, + valueAxisList, + valuePaneList, +}: ChartTabSeriesProps) => { + return ( + + + General + Common Series Settings + + + + + + + + + + + + + + + + + {chartValues.seriesDto.map((row, index) => ( + + + + + + + + + + ))} + +
+ TypeNameArgument FieldValue FieldPaneAxis
+
+
+
{row.type}{row.name}{row.argumentField}{row.valueField}{row.pane}{row.axis}
+
+
+ + + + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.commonSeriesSettingsDto.selectionMode, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.commonSeriesSettingsDto.pane, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.zoomAndPanDto.argumentAxis, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.zoomAndPanDto.panKey, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + + + + + + + + + + + ) +} + +export default ChartTabZoomAndPan diff --git a/ui/src/views/admin/listForm/edit/FormEdit.tsx b/ui/src/views/admin/listForm/edit/FormEdit.tsx index 4de79178..5a9c59bc 100644 --- a/ui/src/views/admin/listForm/edit/FormEdit.tsx +++ b/ui/src/views/admin/listForm/edit/FormEdit.tsx @@ -34,6 +34,8 @@ import { Container } from '@/components/shared' import { ROUTES_ENUM } from '@/routes/route.constant' import FormTabWidgets from './FormTabWidgets' import FormTabExtraFilters from './FormTabExtraFilters' +import FormTabEditForm from './FormTabEditForm' +import FormTabPivots from './FormTabPivots' export interface FormEditProps { onSubmit: ( @@ -185,16 +187,18 @@ const FormEdit = () => { {translate('::ListForms.ListFormEdit.TabSearch')} {translate('::ListForms.ListFormEdit.TabGrouping')} {translate('::ListForms.ListFormEdit.TabSelection')} - {translate('::ListForms.ListFormEdit.TabColumnsPivots')} + {translate('::ListForms.ListFormEdit.TabColumns')} + {translate('::ListForms.ListFormEdit.TabPivots')} {translate('::ListForms.ListFormEdit.TabPaging')} {translate('::ListForms.ListFormEdit.TabState')} + {translate('::ListForms.ListFormEdit.ExtraFilters')} {translate('::ListForms.ListFormEdit.TabFields')} {translate('::ListForms.ListFormEdit.TabCustomization')} + {translate('::ListForms.ListFormEdit.EditingForm')} {translate('::ListForms.ListFormEdit.TabSubForms')} {translate('::ListForms.ListFormEdit.TabWidgets')} - {translate('::ListForms.ListFormEdit.ExtraFilters')} @@ -211,6 +215,9 @@ const FormEdit = () => { + + + @@ -226,6 +233,9 @@ const FormEdit = () => { + + + diff --git a/ui/src/views/admin/listForm/edit/FormTabColumns.tsx b/ui/src/views/admin/listForm/edit/FormTabColumns.tsx index 19c721bb..f9c63d2b 100644 --- a/ui/src/views/admin/listForm/edit/FormTabColumns.tsx +++ b/ui/src/views/admin/listForm/edit/FormTabColumns.tsx @@ -17,11 +17,6 @@ import { Field, FieldProps, Form, Formik } from 'formik' import * as Yup from 'yup' import { FormEditProps } from './FormEdit' import { columnChooserModeOptions, columnResizingModeOptions } from './options' -import { SelectBoxOption } from '@/shared/types' -import { chartSeriesTypeOptions } from '../../chart/options' -import TabList from '@/components/ui/Tabs/TabList' -import TabNav from '@/components/ui/Tabs/TabNav' -import TabContent from '@/components/ui/Tabs/TabContent' const validationSchema = Yup.object().shape({}) @@ -45,419 +40,253 @@ function FormTabColumns(props: FormEditProps) { {({ touched, errors, isSubmitting, values }) => (
- - - - {translate('::ListForms.ListFormEdit.TabColumns')} - - - {translate('::ListForms.ListFormEdit.TabPivots')} - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {({ field, form }: FieldProps) => ( + option.value === values.columnOptionDto.columnResizingMode, )} - component={Checkbox} + onChange={(option) => form.setFieldValue(field.name, option?.value)} /> - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.columnOptionDto.columnResizingMode, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {({ field, form }: FieldProps) => ( - option.value === values.listFormType, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + {values.listFormType === 'List' && ( + <> + + + {({ field, form }: FieldProps) => ( + option.value === values.listFormType, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - - - - - - - - - - - - - - - + - {({ field, form }: FieldProps) => ( - option.value === values.editingOptionDto.mode, )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + {({ field, form }: FieldProps) => ( + option.value === values.editingOptionDto.newRowPosition, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + {({ field, form }: FieldProps) => ( + option.value === values.editingOptionDto.mode, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - {({ field, form }: FieldProps) => ( - option.value === values.editingOptionDto.newRowPosition, - )} - onChange={(option) => form.setFieldValue(field.name, option?.value)} - /> - )} - - - - - {({ field, form }: FieldProps) => ( - option.value === values.pivotOptionDto.chartCommonSeriesType, + )} + onChange={(option) => form.setFieldValue(field.name, option?.value)} + /> + )} + + + + + +
+ )} + + + ) +} + +export default FormTabColumns diff --git a/ui/src/views/admin/listForm/edit/options.ts b/ui/src/views/admin/listForm/edit/options.ts index 6beb2c70..1b8683bf 100644 --- a/ui/src/views/admin/listForm/edit/options.ts +++ b/ui/src/views/admin/listForm/edit/options.ts @@ -26,7 +26,6 @@ import { } from '../../../../proxy/admin/list-form-field/models' import { enumToList } from '../../../../utils/enumUtils' import { colSpan, iconList, WidgetColorEnum } from '@/components/ui/Widget/iconList' -import { SelectBoxOption } from '@/shared/types' export const sortModeOptions = [ { value: 'none', label: 'None' }, diff --git a/ui/src/views/list/Pivot.tsx b/ui/src/views/list/Pivot.tsx index fd5791d2..e8f7d773 100644 --- a/ui/src/views/list/Pivot.tsx +++ b/ui/src/views/list/Pivot.tsx @@ -33,6 +33,7 @@ import { setGridPanelColor, } from './Utils' import { useFilters } from './useFilters' +import WidgetGroup from '@/components/common/WidgetGroup' interface GridProps { listFormCode: string @@ -236,66 +237,70 @@ const Pivot = (props: GridProps) => { }, [columnData]) return ( - - {!isSubForm && ( - - )} - {gridDto && columnData && ( - <> - {gridDto.gridOptions.columnOptionDto.showChart && ( - - - - - - )} + <> + - - + {!isSubForm && ( + + )} + {gridDto && columnData && ( + <> + {gridDto.gridOptions.pivotOptionDto.showChart && ( + + + + + + )} + + - - - - - - - - )} - + + + + + + + + + )} + + ) }