diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsEditDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsEditDto.cs index 9f9b525e..4324821c 100644 --- a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsEditDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/GridOptionsEditDto.cs @@ -91,14 +91,17 @@ public class GridOptionsEditDto : GridOptionsDto set { FormFieldsDefaultValueJson = JsonSerializer.Serialize(value); } } - //public List CustomControlBackendDto - //{ - // get - // { - // if (!string.IsNullOrEmpty(base.CustomControlsJson)) - // return JsonSerializer.Deserialize>(base.CustomControlsJson); - // return new List(); - // } - // set { base.CustomControlsJson = JsonSerializer.Serialize(value); } - //} + [JsonIgnore] + public string WidgetsJson { get; set; } // Cagrilacak Widgetlar + public List WidgetsDto + { + get + { + if (!string.IsNullOrEmpty(WidgetsJson)) + return JsonSerializer.Deserialize>(WidgetsJson); + + return []; + } + set { WidgetsJson = JsonSerializer.Serialize(value); } + } } diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/WidgetEditDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/WidgetEditDto.cs new file mode 100644 index 00000000..201fe80e --- /dev/null +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/GridOptionsDto/WidgetEditDto.cs @@ -0,0 +1,16 @@ +namespace Kurs.Platform.ListForms; + +public class WidgetEditDto +{ + public int ColGap { get; set; } + public int ColSpan { get; set; } + public string SqlQuery { get; set; } + public string Title { get; set; } + public string Value { get; set; } + public string ValueClassName { get; set; } = "text-3xl"; + public string Color { get; set; } + public string Icon { get; set; } + public string Subtitle { get; set; } + public string OnClick { get; set; } + public string ClassName { get; set; } +} diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/ListFormEditTabs.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/ListFormEditTabs.cs index 35970aac..0fde6a84 100644 --- a/api/src/Kurs.Platform.Application.Contracts/ListForms/ListFormEditTabs.cs +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/ListFormEditTabs.cs @@ -46,6 +46,7 @@ public class ListFormEditTabs public const string PagerForm = "pager"; public const string StateForm = "state"; public const string SubFormJsonRow = "subForm"; + public const string WidgetForm = "widget"; public const string Fields = "fields"; public const string Customization = "customization"; } diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/CrudFieldsDefaultValueJsonItemDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/CrudFieldsDefaultValueJsonItemDto.cs index 2b5446f3..55f75c11 100644 --- a/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/CrudFieldsDefaultValueJsonItemDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/CrudFieldsDefaultValueJsonItemDto.cs @@ -10,4 +10,5 @@ public class CrudFieldsDefaultValueJsonItemDto public CommandColumnDto ItemCommandColumn { get; set; } public EditingFormDto ItemEditingForm { get; set; } public SubFormDto ItemSubForm { get; set; } + public WidgetEditDto ItemWidget { get; set; } } diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/SelectDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/SelectDto.cs index fd26ebdf..6d622b9a 100644 --- a/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/SelectDto.cs +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/SelectDto.cs @@ -6,7 +6,7 @@ public class SelectDto { public SelectDto() { - LookupDatas = new Dictionary(); + LookupDatas = []; } public int TotalCount { get; set; } @@ -22,4 +22,6 @@ public class SelectDto /// Sonuc ile ilgili bazi bilgileride gonderir. Ornegin: filtre uygulandı mı? Sunucu filtresi uygulandı mı? /// public QueryInfoDto QueryInfos { get; set; } + + public List Widgets { get; set; } } diff --git a/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/WidgetDto.cs b/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/WidgetDto.cs new file mode 100644 index 00000000..11b722e9 --- /dev/null +++ b/api/src/Kurs.Platform.Application.Contracts/ListForms/Select/WidgetDto.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; + +public class WidgetDto +{ + public int ColGap { get; set; } + public int ColSpan { get; set; } + public List Items { get; set; } +} + +public class WidgetItemDto +{ + public string Title { get; set; } + public string Value { get; set; } + public string ValueClassName { get; set; } = "text-3xl"; + public string Color { get; set; } + public string Icon { get; set; } + public string Subtitle { get; set; } + public string OnClick { get; set; } + public string ClassName { get; set; } +} \ No newline at end of file diff --git a/api/src/Kurs.Platform.Application/ListForms/Administration/ListFormJsonRowAppService.cs b/api/src/Kurs.Platform.Application/ListForms/Administration/ListFormJsonRowAppService.cs index f37b7e31..d5e86930 100644 --- a/api/src/Kurs.Platform.Application/ListForms/Administration/ListFormJsonRowAppService.cs +++ b/api/src/Kurs.Platform.Application/ListForms/Administration/ListFormJsonRowAppService.cs @@ -40,6 +40,7 @@ public class ListFormJsonRowAppService : PlatformAppService ListFormEditTabs.Edit.EditingFormFieldsJsonRow => listForm.EditingFormJson.IsNullOrWhiteSpace() ? [] : JsonSerializer.Deserialize>(listForm.EditingFormJson), ListFormEditTabs.CommandColumnsJsonRow => listForm.CommandColumnJson.IsNullOrWhiteSpace() ? [] : JsonSerializer.Deserialize>(listForm.CommandColumnJson), ListFormEditTabs.SubFormJsonRow => listForm.SubFormsJson.IsNullOrWhiteSpace() ? [] : JsonSerializer.Deserialize>(listForm.SubFormsJson), + ListFormEditTabs.WidgetForm => listForm.WidgetsJson.IsNullOrWhiteSpace() ? [] : JsonSerializer.Deserialize>(listForm.WidgetsJson), _ => throw new UserFriendlyException(L[AppErrorCodes.ParameterNotValid]), }; } @@ -73,6 +74,9 @@ public class ListFormJsonRowAppService : PlatformAppService case ListFormEditTabs.SubFormJsonRow: listForm.SubFormsJson = CreateRow(listForm.SubFormsJson, ObjectMapper.Map(model.ItemSubForm)); break; + case ListFormEditTabs.WidgetForm: + listForm.WidgetsJson = CreateRow(listForm.WidgetsJson, ObjectMapper.Map(model.ItemWidget)); + break; default: throw new UserFriendlyException(L[AppErrorCodes.ParameterNotValid]); } @@ -109,6 +113,9 @@ public class ListFormJsonRowAppService : PlatformAppService case ListFormEditTabs.SubFormJsonRow: listForm.SubFormsJson = UpdateRow(listForm.SubFormsJson, ObjectMapper.Map(model.ItemSubForm), model.Index); break; + case ListFormEditTabs.WidgetForm: + listForm.WidgetsJson = UpdateRow(listForm.WidgetsJson, ObjectMapper.Map(model.ItemWidget), model.Index); + break; default: throw new UserFriendlyException(L[AppErrorCodes.ParameterNotValid]); } @@ -145,6 +152,9 @@ public class ListFormJsonRowAppService : PlatformAppService case ListFormEditTabs.SubFormJsonRow: listForm.SubFormsJson = DeleteRow(listForm.SubFormsJson, index); break; + case ListFormEditTabs.WidgetForm: + listForm.WidgetsJson = DeleteRow(listForm.WidgetsJson, index); + break; default: throw new UserFriendlyException(L[AppErrorCodes.ParameterNotValid]); } diff --git a/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs b/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs index 947b9fe1..44c77394 100644 --- a/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs +++ b/api/src/Kurs.Platform.Application/ListForms/ListFormAutoMapperProfile.cs @@ -24,6 +24,7 @@ public class ListFormAutoMapperProfile : Profile CreateMap().ReverseMap(); CreateMap().ReverseMap(); CreateMap().ReverseMap(); + CreateMap().ReverseMap(); CreateMap(); CreateMap(); diff --git a/api/src/Kurs.Platform.Application/ListForms/ListFormSelectAppService.cs b/api/src/Kurs.Platform.Application/ListForms/ListFormSelectAppService.cs index 470b17b6..0654104e 100644 --- a/api/src/Kurs.Platform.Application/ListForms/ListFormSelectAppService.cs +++ b/api/src/Kurs.Platform.Application/ListForms/ListFormSelectAppService.cs @@ -214,6 +214,50 @@ public class ListFormSelectAppService : PlatformAppService, IListFormSelectAppSe IsAppliedServerFilter = selectQueryManager.IsAppliedServerFilter, }; + //Widgets verileri gösterilecek ise + result.Widgets = []; + + if (!listForm.WidgetsJson.IsNullOrWhiteSpace()) + { + var widgetList = JsonSerializer.Deserialize(listForm.WidgetsJson) ?? []; + foreach (var widget in widgetList) + { + if (!string.IsNullOrWhiteSpace(widget.SqlQuery)) + { + var w = new WidgetDto + { + ColGap = widget.ColGap, + ColSpan = widget.ColSpan, + Items = [] + }; + + var items = await dynamicDataRepository.QueryAsync(widget.SqlQuery, connectionString); + if (items != null) + { + foreach (var item in items) + { + if (item is IDictionary dynamicItem) + { + w.Items.Add(new WidgetItemDto + { + Title = dynamicItem.ContainsKey(widget.Title) ? dynamicItem[widget.Title]?.ToString() : string.Empty, + Value = dynamicItem.ContainsKey(widget.Value) ? dynamicItem[widget.Value]?.ToString() : string.Empty, + Color = dynamicItem.ContainsKey(widget.Color) ? dynamicItem[widget.Color]?.ToString() : string.Empty, + Icon = dynamicItem.ContainsKey(widget.Icon) ? dynamicItem[widget.Icon]?.ToString() : string.Empty, + Subtitle = dynamicItem.ContainsKey(widget.Subtitle) ? dynamicItem[widget.Subtitle]?.ToString() : string.Empty, + OnClick = dynamicItem.ContainsKey(widget.OnClick) ? dynamicItem[widget.OnClick]?.ToString() : string.Empty, + ClassName = dynamicItem.ContainsKey(widget.ClassName) ? dynamicItem[widget.ClassName]?.ToString() : string.Empty, + }); + } + } + + } + + result.Widgets.Add(w); + } + } + } + return result; } diff --git a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json index 94adabae..0dd01241 100644 --- a/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json +++ b/api/src/Kurs.Platform.DbMigrator/Seeds/SeederData.json @@ -7860,6 +7860,12 @@ "en": "Sub Forms", "tr": "Alt Formlar" }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.TabWidgets", + "en": "Widgets", + "tr": "Widget'lar" + }, { "resourceName": "Platform", "key": "ListForms.ListFormEdit.TabFields", @@ -8370,6 +8376,18 @@ "en": "Url", "tr": "Url" }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.Widgets", + "en": "Widgets", + "tr": "Widget'lar" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetsDescription", + "en": "Information to display in widgets", + "tr": "Widget'larda gösterilecek bilgiler" + }, { "resourceName": "Platform", "key": "ListForms.ListFormEdit.Editing", @@ -8544,6 +8562,72 @@ "en": "Child Field Name", "tr": "Child Field Name" }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetColGap", + "en": "Column Gap", + "tr": "Sütun Boşluğu" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetColSpan", + "en": "Column Span", + "tr": "Sütun Genişliği" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetTitle", + "en": "Title Field Name", + "tr": "Başlık Alanı Adı" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetValue", + "en": "Value Field Name", + "tr": "Değer Alanı Adı" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetValueClassName", + "en": "Value Class Name", + "tr": "Değer Sütun Sınıf Adı" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetColor", + "en": "Color Field Name", + "tr": "Renk Alanı Adı" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetIcon", + "en": "Icon Field Name", + "tr": "İkon Alanı Adı" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetSubtitle", + "en": "Subtitle Field Name", + "tr": "Alt Başlık Alanı Adı" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetOnClick", + "en": "On Click", + "tr": "Tıklandığında" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetClassName", + "en": "Class Name", + "tr": "Sınıf Adı" + }, + { + "resourceName": "Platform", + "key": "ListForms.ListFormEdit.WidgetSqlQuery", + "en": "Sql Query", + "tr": "T-SQL Sorgu" + }, { "resourceName": "Platform", "key": "ListForms.ListFormEdit.EditingFormOrder", diff --git a/api/src/Kurs.Platform.Domain/Entities/ListForm.cs b/api/src/Kurs.Platform.Domain/Entities/ListForm.cs index ec121eb7..2cc8f040 100644 --- a/api/src/Kurs.Platform.Domain/Entities/ListForm.cs +++ b/api/src/Kurs.Platform.Domain/Entities/ListForm.cs @@ -115,4 +115,7 @@ public class ListForm : FullAuditedEntity /// Bu listform'un sub listformlarının listesi ve ilişkileri public string SubFormsJson { get; set; } + + /// bu listform'un üstünde yer alan widgetların listesidir + public string WidgetsJson { get; set; } } diff --git a/api/src/Kurs.Platform.Domain/Queries/Widget.cs b/api/src/Kurs.Platform.Domain/Queries/Widget.cs new file mode 100644 index 00000000..42468558 --- /dev/null +++ b/api/src/Kurs.Platform.Domain/Queries/Widget.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using Volo.Abp.Domain.Values; + +namespace Kurs.Platform.Queries; + +public class Widget : ValueObject +{ + public int ColGap { get; set; } + public int ColSpan { get; set; } + public string SqlQuery { get; set; } + public string Title { get; set; } + public string Value { get; set; } + public string ValueClassName { get; set; } = "text-3xl"; + public string Color { get; set; } + public string Icon { get; set; } + public string Subtitle { get; set; } + public string OnClick { get; set; } + public string ClassName { get; set; } + + protected override IEnumerable GetAtomicValues() + { + yield return ColGap; + yield return ColSpan; + yield return SqlQuery; + yield return Title; + yield return Value; + yield return ValueClassName; + yield return Color; + yield return Icon; + yield return Subtitle; + yield return OnClick; + yield return ClassName; + } +} diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250831164324_Initial.Designer.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.Designer.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250831164324_Initial.Designer.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.Designer.cs index 60ce289d..4bd1020d 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250831164324_Initial.Designer.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.Designer.cs @@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Kurs.Platform.Migrations { [DbContext(typeof(PlatformDbContext))] - [Migration("20250831164324_Initial")] + [Migration("20250911192105_Initial")] partial class Initial { /// @@ -2926,6 +2926,9 @@ namespace Kurs.Platform.Migrations b.Property("UpdateServiceAddress") .HasColumnType("nvarchar(max)"); + b.Property("WidgetsJson") + .HasColumnType("nvarchar(max)"); + b.Property("Width") .HasColumnType("int"); diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250831164324_Initial.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.cs similarity index 99% rename from api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250831164324_Initial.cs rename to api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.cs index de540d8a..1709422f 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250831164324_Initial.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/20250911192105_Initial.cs @@ -1239,6 +1239,7 @@ namespace Kurs.Platform.Migrations ListFormType = table.Column(type: "nvarchar(max)", nullable: true), IsSubForm = table.Column(type: "bit", nullable: false), SubFormsJson = table.Column(type: "nvarchar(max)", nullable: true), + WidgetsJson = table.Column(type: "nvarchar(max)", nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), diff --git a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs index 0b5888eb..82c12e1e 100644 --- a/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs +++ b/api/src/Kurs.Platform.EntityFrameworkCore/Migrations/PlatformDbContextModelSnapshot.cs @@ -2923,6 +2923,9 @@ namespace Kurs.Platform.Migrations b.Property("UpdateServiceAddress") .HasColumnType("nvarchar(max)"); + b.Property("WidgetsJson") + .HasColumnType("nvarchar(max)"); + b.Property("Width") .HasColumnType("int"); diff --git a/ui/dev-dist/sw.js b/ui/dev-dist/sw.js index 280f7f15..09c4366b 100644 --- a/ui/dev-dist/sw.js +++ b/ui/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-54d0af47'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.1jncqb74048" + "revision": "0.buc1mitnpmo" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/ui/src/proxy/admin/list-form/models.ts b/ui/src/proxy/admin/list-form/models.ts index 23cb424b..9dfd45da 100644 --- a/ui/src/proxy/admin/list-form/models.ts +++ b/ui/src/proxy/admin/list-form/models.ts @@ -4,6 +4,7 @@ import { FieldsDefaultValueDto, SelectCommandTypeEnum, SubFormDto, + WidgetEditDto, } from '../../form/models' export interface ListFormWizardDto { @@ -35,6 +36,7 @@ export interface ListFormJsonRowDto { itemCommandColumn?: CommandColumnDto itemEditingForm?: EditingFormDto itemSubForm?: SubFormDto + itemWidget?: WidgetEditDto } export const ListFormEditTabs = { @@ -73,6 +75,7 @@ export const ListFormEditTabs = { PagerForm: 'pager', StateForm: 'state', SubForm: 'subForm', + Widget: 'widget', Fields: 'fields', Customization: 'customization', } as const diff --git a/ui/src/proxy/form/models.ts b/ui/src/proxy/form/models.ts index a54d054b..cdc705fb 100644 --- a/ui/src/proxy/form/models.ts +++ b/ui/src/proxy/form/models.ts @@ -501,6 +501,8 @@ export interface GridOptionsEditDto extends GridOptionsDto, Record updateFieldsDefaultValueDto: FieldsDefaultValueDto[] formFieldsDefaultValueJson?: string formFieldsDefaultValueDto: FieldsDefaultValueDto[] + widgetsJson?: string + widgetsDto: WidgetEditDto[] } export interface GridPagerOptionDto { @@ -699,3 +701,17 @@ export enum ColumnSortDirectionEnum { 'Asc' = 'asc', 'Desc' = 'desc', } + +export interface WidgetEditDto { + colGap: number + colSpan: number + sqlQuery?: string + title: string + value: string + valueClassName: string + color: string + icon: string + subTitle: string + onClick: string + className: string +} diff --git a/ui/src/views/admin/listForm/edit/FormEdit.tsx b/ui/src/views/admin/listForm/edit/FormEdit.tsx index e4e410a2..3dc39d02 100644 --- a/ui/src/views/admin/listForm/edit/FormEdit.tsx +++ b/ui/src/views/admin/listForm/edit/FormEdit.tsx @@ -32,6 +32,7 @@ import { IdentityRoleDto, IdentityUserDto } from '@/proxy/admin/models' import { getListFormCustomizations } from '@/services/admin/list-form-customization.service' import { Container } from '@/components/shared' import { ROUTES_ENUM } from '@/routes/route.constant' +import FormTabWidgets from './FormTabWidgets' export interface FormEditProps { onSubmit: ( @@ -187,6 +188,7 @@ const FormEdit = () => { {translate('::ListForms.ListFormEdit.TabPaging')} {translate('::ListForms.ListFormEdit.TabState')} {translate('::ListForms.ListFormEdit.TabSubForms')} + {translate('::ListForms.ListFormEdit.TabWidgets')} {translate('::ListForms.ListFormEdit.TabFields')} {translate('::ListForms.ListFormEdit.TabCustomization')} @@ -231,6 +233,9 @@ const FormEdit = () => { + + + () + const { translate } = useLocalization() + + const initialValues = useStoreState((s) => s.admin.listFormValues) + if (!initialValues) { + return null + } + + return ( + + + + + + + + + + + + + + + + + + + + + {initialValues.widgetsDto.map((row, index) => ( + + + + + + + + + + + + + + + ))} + +
+ {translate('::ListForms.ListFormEdit.WidgetColGap')}{translate('::ListForms.ListFormEdit.WidgetColSpan')}{translate('::ListForms.ListFormEdit.WidgetSqlQuery')}{translate('::ListForms.ListFormEdit.WidgetTitle')}{translate('::ListForms.ListFormEdit.WidgetValue')}{translate('::ListForms.ListFormEdit.WidgetValueClassName')}{translate('::ListForms.ListFormEdit.WidgetColor')}{translate('::ListForms.ListFormEdit.WidgetIcon')}{translate('::ListForms.ListFormEdit.WidgetSubtitle')}{translate('::ListForms.ListFormEdit.WidgetOnClick')}{translate('::ListForms.ListFormEdit.WidgetClassName')}
+
+
+
{row.colGap}{row.colSpan}{row.sqlQuery}{row.title}{row.value}{row.valueClassName}{row.color}{row.icon}{row.subTitle}{row.onClick}{row.className}
+
+ +
+ ) +} + +export default FormTabWidgets diff --git a/ui/src/views/admin/listForm/edit/json-row-operations/JsonRowOpDialogWidget.tsx b/ui/src/views/admin/listForm/edit/json-row-operations/JsonRowOpDialogWidget.tsx new file mode 100644 index 00000000..2d88fb1f --- /dev/null +++ b/ui/src/views/admin/listForm/edit/json-row-operations/JsonRowOpDialogWidget.tsx @@ -0,0 +1,373 @@ +import { + Button, + Dialog, + FormContainer, + FormItem, + Input, + Notification, + toast, +} from '@/components/ui' +import { ListFormJsonRowDto } from '@/proxy/admin/list-form/models' +import { SelectBoxOption } from '@/shared/types' +import { useStoreActions, useStoreState } from '@/store' +import { useLocalization } from '@/utils/hooks/useLocalization' +import { Field, Form, Formik } from 'formik' +import { Dispatch, SetStateAction, useEffect, useState } from 'react' +import { number, object, string } from 'yup' +import { JsonRowDialogData } from './types' +import { + deleteListFormJsonRow, + getListFormJsonRow, + postListFormJsonRow, + putListFormJsonRow, +} from '@/services/admin/list-form.service' + +const schema = object().shape({ + colGap: number().required('Column Gap Required'), + colSpan: number().required('Column Span Required'), + sqlQuery: string().required('SQL Query Required'), + title: string().required('Title Required'), + value: string().required('Value Required'), + valueClassName: string().notRequired(), + color: string().notRequired(), + icon: string().notRequired(), + subTitle: string().notRequired(), + onClick: string().notRequired(), + className: string().notRequired(), +}) + +function JsonRowOpDialogWidget({ + isOpen, + setIsOpen, + data, + setData, +}: { + isOpen: boolean + setIsOpen: Dispatch> + data: JsonRowDialogData | undefined + setData: Dispatch> +}) { + const [permissionOptions, setPermissionOptions] = useState([]) + const { translate } = useLocalization() + + const permissions: Record | undefined = useStoreState( + (state) => state.abpConfig.config?.auth.grantedPolicies, + ) + + useEffect(() => { + if (permissions) { + setPermissionOptions( + Object.keys(permissions).map((key) => { + return { + value: key, + label: key, + } + }), + ) + } + }, [permissions]) + + const { setJsonValue } = useStoreActions((a) => a.admin) + + const handleClose = async (e?: any) => { + if (e) { + e.preventDefault() + } + + if (data) { + const resp = await getListFormJsonRow(data.id, data.tabName) + setJsonValue({ field: 'widgetsDto', data: resp.data }) + } + + setData(undefined) + setIsOpen(false) + } + + if (!data) { + return null + } + + return ( + + {(data.operation === 'create' || data.operation === 'update') && ( + <> +
{data.index === -1 ? 'Add' : 'Update'}
+ { + setSubmitting(true) + try { + const input: ListFormJsonRowDto = { + index: data.index, + fieldName: data.tabName, + itemWidget: values, + } + if (data.index === -1) { + await postListFormJsonRow(data.id, input) + } else { + await putListFormJsonRow(data.id, input) + } + toast.push( + + {data.index === -1 ? 'Kayıt eklendi' : 'Kayıt güncellendi'} + , + { placement: 'top-end' }, + ) + handleClose() + } catch (error: any) { + toast.push( + + Hata + {error} + , + { placement: 'top-end' }, + ) + } finally { + setSubmitting(false) + } + }} + > + {({ touched, errors, values, isSubmitting }) => ( +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+
+ )} +
+ + )} + {data.operation === 'delete' && ( + <> +
Delete
+

Silmek istediğinize emin misiniz?

+ { + setSubmitting(true) + try { + await deleteListFormJsonRow(data.id, data.tabName, values.index) + toast.push(Kayıt silindi , { + placement: 'top-end', + }) + handleClose() + } catch (error: any) { + toast.push( + + Hata + {error} + , + { placement: 'top-end' }, + ) + } finally { + setSubmitting(false) + } + // getListFormJsonRow() + }} + > + {({ isSubmitting }) => ( +
+ +
+ + +
+
+
+ )} +
+ + )} +
+ ) +} + +export default JsonRowOpDialogWidget diff --git a/ui/src/views/admin/listForm/edit/json-row-operations/types.ts b/ui/src/views/admin/listForm/edit/json-row-operations/types.ts index c6da561a..27eb9e07 100644 --- a/ui/src/views/admin/listForm/edit/json-row-operations/types.ts +++ b/ui/src/views/admin/listForm/edit/json-row-operations/types.ts @@ -4,6 +4,7 @@ import { EditingFormDto, FieldsDefaultValueDto, SubFormDto, + WidgetEditDto, } from '@/proxy/form/models' import { ExtractNestedValues } from '@/utils/extractNestedValues' @@ -18,4 +19,5 @@ export interface JsonRowDialogData { editFormValues?: EditingFormDto commandValues?: CommandColumnDto subFormValues?: SubFormDto + widgetValues?: WidgetEditDto }