diff --git a/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs b/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs index 08ac87ae..3e46ac80 100644 --- a/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs +++ b/api/src/Erp.Platform.Application.Contracts/LookUpQueryValues.cs @@ -286,4 +286,17 @@ public static class LookupQueryValues $"(\"MovementTypeName\" = N'{movementTypeName}') " + $"AND \"IsDeleted\" = 'false' " + $"ORDER BY \"Name\";"; + + public static string RouteKeyValues = + $@"SELECT + ""Path"" AS ""Key"", + ""Path"" AS ""Name"" + FROM ""{FullNameTable(TableNameEnum.Route)}"" + GROUP BY ""Path"" + UNION + SELECT + '/admin/list/' + ""ListFormCode"" AS ""Key"", + '/admin/list/' + ""ListFormCode"" AS ""Name"" + FROM ""{FullNameTable(TableNameEnum.ListForm)}"" + GROUP BY ""ListFormCode"";"; } diff --git a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs index b432fc17..f9367fdd 100644 --- a/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs +++ b/api/src/Erp.Platform.DbMigrator/Seeds/ListFormSeeder_Saas.cs @@ -2268,7 +2268,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency ExportJson = DefaultExportJson, IsSubForm = false, ShowNote = true, - LayoutJson = DefaultLayoutJson(), + LayoutJson = DefaultLayoutJson("tree"), CultureName = LanguageCodes.En, ListFormCode = listFormName, Name = listFormName, @@ -2302,7 +2302,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency new EditingFormItemDto { Order = 1, DataField = "Code", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 2, DataField = "DisplayName", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxAutocomplete, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 3, DataField = "Order", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxNumberBox }, - new EditingFormItemDto { Order = 4, DataField = "Url", ColSpan = 1, EditorType2=EditorTypes.dxTextBox }, + new EditingFormItemDto { Order = 4, DataField = "Url", ColSpan = 1, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 5, DataField = "Icon", ColSpan = 1, IsRequired = true, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 6, DataField = "ParentCode", ColSpan = 1, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton }, new EditingFormItemDto { Order = 7, DataField = "CssClass", ColSpan = 1, EditorType2=EditorTypes.dxTextBox }, @@ -2412,6 +2412,12 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency IsActive = true, IsDeleted = false, AllowSearch = true, + LookupJson = JsonSerializer.Serialize(new LookupDto { + DataSourceType = UiLookupDataSourceTypeEnum.Query, + DisplayExpr = "Name", + ValueExpr = "Key", + LookupQuery = LookupQueryValues.RouteKeyValues + }), ColumnCustomizationJson = DefaultColumnCustomizationJson, PermissionJson = DefaultFieldPermissionJson(listForm.Name), PivotSettingsJson = DefaultPivotSettingsJson diff --git a/ui/src/views/list/Grid.tsx b/ui/src/views/list/Grid.tsx index dc4d8954..826d51a0 100644 --- a/ui/src/views/list/Grid.tsx +++ b/ui/src/views/list/Grid.tsx @@ -95,6 +95,8 @@ const Grid = (props: GridProps) => { const gridRef = useRef() const refListFormCode = useRef('') const widgetGroupRef = useRef(null) + // Edit popup state kaydetmeyi engellemek için flag + const isEditingRef = useRef(false) const [gridDataSource, setGridDataSource] = useState>() const [columnData, setColumnData] = useState() @@ -358,6 +360,7 @@ const Grid = (props: GridProps) => { } function onEditingStart(e: DataGridTypes.EditingStartEvent) { + isEditingRef.current = true setMode('edit') setIsPopupFullScreen(gridDto?.gridOptions.editingOptionDto?.popup?.fullScreen ?? false) const columns = e.component.option('columns') as GridColumnData[] @@ -516,6 +519,9 @@ const Grid = (props: GridProps) => { const customSaveState = useCallback( (state: any) => { + if (isEditingRef.current) { + return Promise.resolve() + } return postListFormCustomization({ listFormCode: listFormCode, customizationType: ListFormCustomizationTypeEnum.GridState, @@ -926,10 +932,12 @@ const Grid = (props: GridProps) => { onDataErrorOccurred={onDataErrorOccurred} onExporting={onExporting} onEditCanceled={() => { + isEditingRef.current = false setMode('view') setIsPopupFullScreen(false) }} onSaved={() => { + isEditingRef.current = false setMode('view') setIsPopupFullScreen(false) }} diff --git a/ui/src/views/list/Tree.tsx b/ui/src/views/list/Tree.tsx index 6a3bdcb9..152b7631 100644 --- a/ui/src/views/list/Tree.tsx +++ b/ui/src/views/list/Tree.tsx @@ -84,6 +84,8 @@ const Tree = (props: TreeProps) => { const gridRef = useRef() const refListFormCode = useRef('') const widgetGroupRef = useRef(null) + // Edit popup state kaydetmeyi engellemek için flag + const isEditingRef = useRef(false) const [treeListDataSource, setTreeListDataSource] = useState>() const [columnData, setColumnData] = useState() @@ -378,6 +380,7 @@ const Tree = (props: TreeProps) => { } function onEditingStart(e: TreeListTypes.EditingStartEvent) { + isEditingRef.current = true setMode('edit') setIsPopupFullScreen(gridDto?.gridOptions.editingOptionDto?.popup?.fullScreen ?? false) const columns = e.component.option('columns') as GridColumnData[] @@ -534,15 +537,19 @@ const Tree = (props: TreeProps) => { } const customSaveState = useCallback( - (state: any) => - postListFormCustomization({ + (state: any) => { + if (isEditingRef.current) { + return Promise.resolve() + } + return postListFormCustomization({ listFormCode: listFormCode, customizationType: ListFormCustomizationTypeEnum.GridState, filterName: `tree-${gridRef.current?.instance().option('stateStoring')?.storageKey ?? ''}`, customizationData: JSON.stringify(state), }).then(() => { setGridPanelColor(statedGridPanelColor) - }), + }) + }, [listFormCode], ) @@ -801,10 +808,12 @@ const Tree = (props: TreeProps) => { onEditingStart={onEditingStart} onDataErrorOccurred={onDataErrorOccurred} onEditCanceled={() => { + isEditingRef.current = false setMode('view') setIsPopupFullScreen(false) }} onSaved={() => { + isEditingRef.current = false setMode('view') setIsPopupFullScreen(false) }} @@ -840,6 +849,7 @@ const Tree = (props: TreeProps) => { selectTextOnEditStart={gridDto.gridOptions.editingOptionDto?.selectTextOnEditStart} startEditAction={gridDto.gridOptions.editingOptionDto?.startEditAction} popup={{ + animation: {}, title: (mode === 'new' ? '✚ ' : '🖊️ ') + translate('::' + gridDto.gridOptions.editingOptionDto?.popup?.title), @@ -1154,9 +1164,7 @@ const Tree = (props: TreeProps) => { enabled={gridDto.gridOptions.columnOptionDto?.columnFixingEnabled} > { defaultTitle="Erp Platform" > -
+
{/* Sol kısım: Başlık */}