Grid ve Tree için Popup açılırken state çalışmamalı

This commit is contained in:
Sedat Öztürk 2026-01-30 00:04:44 +03:00
parent 566da635c6
commit bd56bbde9b
5 changed files with 44 additions and 9 deletions

View file

@ -286,4 +286,17 @@ public static class LookupQueryValues
$"(\"MovementTypeName\" = N'{movementTypeName}') " + $"(\"MovementTypeName\" = N'{movementTypeName}') " +
$"AND \"IsDeleted\" = 'false' " + $"AND \"IsDeleted\" = 'false' " +
$"ORDER BY \"Name\";"; $"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"";";
} }

View file

@ -2268,7 +2268,7 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
ExportJson = DefaultExportJson, ExportJson = DefaultExportJson,
IsSubForm = false, IsSubForm = false,
ShowNote = true, ShowNote = true,
LayoutJson = DefaultLayoutJson(), LayoutJson = DefaultLayoutJson("tree"),
CultureName = LanguageCodes.En, CultureName = LanguageCodes.En,
ListFormCode = listFormName, ListFormCode = listFormName,
Name = 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 = 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 = 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 = 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 = 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 = 6, DataField = "ParentCode", ColSpan = 1, EditorType2=EditorTypes.dxSelectBox, EditorOptions=EditorOptionValues.ShowClearButton },
new EditingFormItemDto { Order = 7, DataField = "CssClass", ColSpan = 1, EditorType2=EditorTypes.dxTextBox }, new EditingFormItemDto { Order = 7, DataField = "CssClass", ColSpan = 1, EditorType2=EditorTypes.dxTextBox },
@ -2412,6 +2412,12 @@ public class ListFormSeeder_Saas : IDataSeedContributor, ITransientDependency
IsActive = true, IsActive = true,
IsDeleted = false, IsDeleted = false,
AllowSearch = true, AllowSearch = true,
LookupJson = JsonSerializer.Serialize(new LookupDto {
DataSourceType = UiLookupDataSourceTypeEnum.Query,
DisplayExpr = "Name",
ValueExpr = "Key",
LookupQuery = LookupQueryValues.RouteKeyValues
}),
ColumnCustomizationJson = DefaultColumnCustomizationJson, ColumnCustomizationJson = DefaultColumnCustomizationJson,
PermissionJson = DefaultFieldPermissionJson(listForm.Name), PermissionJson = DefaultFieldPermissionJson(listForm.Name),
PivotSettingsJson = DefaultPivotSettingsJson PivotSettingsJson = DefaultPivotSettingsJson

View file

@ -95,6 +95,8 @@ const Grid = (props: GridProps) => {
const gridRef = useRef<DataGridRef>() const gridRef = useRef<DataGridRef>()
const refListFormCode = useRef('') const refListFormCode = useRef('')
const widgetGroupRef = useRef<HTMLDivElement>(null) const widgetGroupRef = useRef<HTMLDivElement>(null)
// Edit popup state kaydetmeyi engellemek için flag
const isEditingRef = useRef(false)
const [gridDataSource, setGridDataSource] = useState<CustomStore<any, any>>() const [gridDataSource, setGridDataSource] = useState<CustomStore<any, any>>()
const [columnData, setColumnData] = useState<GridColumnData[]>() const [columnData, setColumnData] = useState<GridColumnData[]>()
@ -358,6 +360,7 @@ const Grid = (props: GridProps) => {
} }
function onEditingStart(e: DataGridTypes.EditingStartEvent<any, any>) { function onEditingStart(e: DataGridTypes.EditingStartEvent<any, any>) {
isEditingRef.current = true
setMode('edit') setMode('edit')
setIsPopupFullScreen(gridDto?.gridOptions.editingOptionDto?.popup?.fullScreen ?? false) setIsPopupFullScreen(gridDto?.gridOptions.editingOptionDto?.popup?.fullScreen ?? false)
const columns = e.component.option('columns') as GridColumnData[] const columns = e.component.option('columns') as GridColumnData[]
@ -516,6 +519,9 @@ const Grid = (props: GridProps) => {
const customSaveState = useCallback( const customSaveState = useCallback(
(state: any) => { (state: any) => {
if (isEditingRef.current) {
return Promise.resolve()
}
return postListFormCustomization({ return postListFormCustomization({
listFormCode: listFormCode, listFormCode: listFormCode,
customizationType: ListFormCustomizationTypeEnum.GridState, customizationType: ListFormCustomizationTypeEnum.GridState,
@ -926,10 +932,12 @@ const Grid = (props: GridProps) => {
onDataErrorOccurred={onDataErrorOccurred} onDataErrorOccurred={onDataErrorOccurred}
onExporting={onExporting} onExporting={onExporting}
onEditCanceled={() => { onEditCanceled={() => {
isEditingRef.current = false
setMode('view') setMode('view')
setIsPopupFullScreen(false) setIsPopupFullScreen(false)
}} }}
onSaved={() => { onSaved={() => {
isEditingRef.current = false
setMode('view') setMode('view')
setIsPopupFullScreen(false) setIsPopupFullScreen(false)
}} }}

View file

@ -84,6 +84,8 @@ const Tree = (props: TreeProps) => {
const gridRef = useRef<TreeListRef>() const gridRef = useRef<TreeListRef>()
const refListFormCode = useRef('') const refListFormCode = useRef('')
const widgetGroupRef = useRef<HTMLDivElement>(null) const widgetGroupRef = useRef<HTMLDivElement>(null)
// Edit popup state kaydetmeyi engellemek için flag
const isEditingRef = useRef(false)
const [treeListDataSource, setTreeListDataSource] = useState<CustomStore<any, any>>() const [treeListDataSource, setTreeListDataSource] = useState<CustomStore<any, any>>()
const [columnData, setColumnData] = useState<GridColumnData[]>() const [columnData, setColumnData] = useState<GridColumnData[]>()
@ -378,6 +380,7 @@ const Tree = (props: TreeProps) => {
} }
function onEditingStart(e: TreeListTypes.EditingStartEvent) { function onEditingStart(e: TreeListTypes.EditingStartEvent) {
isEditingRef.current = true
setMode('edit') setMode('edit')
setIsPopupFullScreen(gridDto?.gridOptions.editingOptionDto?.popup?.fullScreen ?? false) setIsPopupFullScreen(gridDto?.gridOptions.editingOptionDto?.popup?.fullScreen ?? false)
const columns = e.component.option('columns') as GridColumnData[] const columns = e.component.option('columns') as GridColumnData[]
@ -534,15 +537,19 @@ const Tree = (props: TreeProps) => {
} }
const customSaveState = useCallback( const customSaveState = useCallback(
(state: any) => (state: any) => {
postListFormCustomization({ if (isEditingRef.current) {
return Promise.resolve()
}
return postListFormCustomization({
listFormCode: listFormCode, listFormCode: listFormCode,
customizationType: ListFormCustomizationTypeEnum.GridState, customizationType: ListFormCustomizationTypeEnum.GridState,
filterName: `tree-${gridRef.current?.instance().option('stateStoring')?.storageKey ?? ''}`, filterName: `tree-${gridRef.current?.instance().option('stateStoring')?.storageKey ?? ''}`,
customizationData: JSON.stringify(state), customizationData: JSON.stringify(state),
}).then(() => { }).then(() => {
setGridPanelColor(statedGridPanelColor) setGridPanelColor(statedGridPanelColor)
}), })
},
[listFormCode], [listFormCode],
) )
@ -801,10 +808,12 @@ const Tree = (props: TreeProps) => {
onEditingStart={onEditingStart} onEditingStart={onEditingStart}
onDataErrorOccurred={onDataErrorOccurred} onDataErrorOccurred={onDataErrorOccurred}
onEditCanceled={() => { onEditCanceled={() => {
isEditingRef.current = false
setMode('view') setMode('view')
setIsPopupFullScreen(false) setIsPopupFullScreen(false)
}} }}
onSaved={() => { onSaved={() => {
isEditingRef.current = false
setMode('view') setMode('view')
setIsPopupFullScreen(false) setIsPopupFullScreen(false)
}} }}
@ -840,6 +849,7 @@ const Tree = (props: TreeProps) => {
selectTextOnEditStart={gridDto.gridOptions.editingOptionDto?.selectTextOnEditStart} selectTextOnEditStart={gridDto.gridOptions.editingOptionDto?.selectTextOnEditStart}
startEditAction={gridDto.gridOptions.editingOptionDto?.startEditAction} startEditAction={gridDto.gridOptions.editingOptionDto?.startEditAction}
popup={{ popup={{
animation: {},
title: title:
(mode === 'new' ? '✚ ' : '🖊️ ') + (mode === 'new' ? '✚ ' : '🖊️ ') +
translate('::' + gridDto.gridOptions.editingOptionDto?.popup?.title), translate('::' + gridDto.gridOptions.editingOptionDto?.popup?.title),
@ -1154,9 +1164,7 @@ const Tree = (props: TreeProps) => {
enabled={gridDto.gridOptions.columnOptionDto?.columnFixingEnabled} enabled={gridDto.gridOptions.columnOptionDto?.columnFixingEnabled}
></ColumnFixing> ></ColumnFixing>
<Scrolling <Scrolling
mode="virtual" mode={gridDto.gridOptions.pagerOptionDto?.scrollingMode}
rowRenderingMode="virtual"
showScrollbar="always"
></Scrolling> ></Scrolling>
<LoadPanel <LoadPanel
enabled={gridDto.gridOptions.pagerOptionDto?.loadPanelEnabled} enabled={gridDto.gridOptions.pagerOptionDto?.loadPanelEnabled}

View file

@ -93,7 +93,7 @@ export const MenuManager = () => {
defaultTitle="Erp Platform" defaultTitle="Erp Platform"
></Helmet> ></Helmet>
<div className="bg-white rounded px-4 sm:px-4 lg:px-6 py-6"> <div className="bg-white rounded px-2 sm:px-2 lg:px-3 py-3">
<div className="flex items-center justify-between mb-6 flex-wrap gap-4"> <div className="flex items-center justify-between mb-6 flex-wrap gap-4">
{/* Sol kısım: Başlık */} {/* Sol kısım: Başlık */}
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">