Menu, Permission ve Language düzenlemesi

Grid Performans
This commit is contained in:
Sedat ÖZTÜRK 2026-02-25 14:57:25 +03:00
parent 7a4628b899
commit 4099ef9079
10 changed files with 114 additions and 224 deletions

View file

@ -2888,7 +2888,7 @@
}, },
{ {
"resourceName": "Platform", "resourceName": "Platform",
"key": "Abp.Identity.Ai", "key": "App.AiBot.Asistant",
"en": "AI Assistant", "en": "AI Assistant",
"tr": "Yapay Zeka Asistanı" "tr": "Yapay Zeka Asistanı"
}, },

View file

@ -180,7 +180,7 @@
"path": "/admin/ai", "path": "/admin/ai",
"componentPath": "@/views/ai/Assistant", "componentPath": "@/views/ai/Assistant",
"routeType": "protected", "routeType": "protected",
"authority": ["Abp.Identity.Ai"] "authority": ["App.AiBot.Asistant"]
}, },
{ {
"key": "admin.profile.general", "key": "admin.profile.general",
@ -371,76 +371,6 @@
"routeType": "protected", "routeType": "protected",
"authority": ["App.Files"] "authority": ["App.Files"]
}, },
{
"key": "admin.coordinator.classroom.dashboard",
"path": "/admin/coordinator/classroom/dashboard",
"componentPath": "@/views/coordinator/Classroom/Dashboard",
"routeType": "protected",
"authority": ["App.Coordinator.Classroom.Dashboard"]
},
{
"key": "admin.coordinator.classroom.classes",
"path": "/admin/coordinator/classroom/classes",
"componentPath": "@/views/coordinator/Classroom/ClassList",
"routeType": "protected",
"authority": ["App.Coordinator.Classroom.List"]
},
{
"key": "admin.coordinator.classroom.classroom",
"path": "/admin/coordinator/classroom/room/:id",
"componentPath": "@/views/coordinator/Classroom/RoomDetail",
"routeType": "protected",
"authority": ["App.Coordinator.Classroom.RoomDetail"]
},
{
"key": "admin.coordinator.classroom.planning",
"path": "/admin/coordinator/classroom/planning/:id",
"componentPath": "@/views/coordinator/Classroom/PlanningPage",
"routeType": "protected",
"authority": ["App.Coordinator.Classroom.Planning"]
},
{
"key": "admin.coordinator.exams",
"path": "/admin/coordinator/exams",
"componentPath": "@/views/coordinator/Exams",
"routeType": "protected",
"authority": ["App.Coordinator.Exams"]
},
{
"key": "admin.coordinator.examDetail",
"path": "/admin/coordinator/exam/:id",
"componentPath": "@/views/coordinator/ExamInterface/ExamInterface",
"routeType": "protected",
"authority": ["App.Coordinator.Exams"]
},
{
"key": "admin.coordinator.assignments",
"path": "/admin/coordinator/assignments",
"componentPath": "@/views/coordinator/Assignments",
"routeType": "protected",
"authority": ["App.Coordinator.Assignments"]
},
{
"key": "admin.coordinator.assignmentDetail",
"path": "/admin/coordinator/assignment/:id",
"componentPath": "@/views/coordinator/ExamInterface/ExamInterface",
"routeType": "protected",
"authority": ["App.Coordinator.Assignments"]
},
{
"key": "admin.coordinator.tests",
"path": "/admin/coordinator/tests",
"componentPath": "@/views/coordinator/Tests",
"routeType": "protected",
"authority": ["App.Coordinator.Tests"]
},
{
"key": "admin.coordinator.testDetail",
"path": "/admin/coordinator/test/:id",
"componentPath": "@/views/coordinator/ExamInterface/PDFTestInterface",
"routeType": "protected",
"authority": ["App.Coordinator.Tests"]
},
{ {
"key": "admin.devexpressReportView", "key": "admin.devexpressReportView",
"path": "/admin/reports/:id/view", "path": "/admin/reports/:id/view",
@ -457,17 +387,6 @@
} }
], ],
"Menus": [ "Menus": [
{
"ParentCode": null,
"Code": "App.Platform",
"DisplayName": "App.Platform",
"Order": 10000,
"Url": null,
"Icon": "FcTabletAndroid",
"RequiredPermissionName": null,
"IsDisabled": false,
"ShortName": "Plat"
},
{ {
"ParentCode": null, "ParentCode": null,
"Code": "App.Saas", "Code": "App.Saas",
@ -479,31 +398,11 @@
"IsDisabled": false, "IsDisabled": false,
"ShortName": "Sas" "ShortName": "Sas"
}, },
{
"ParentCode": "App.Saas",
"Code": "AbpTenantManagement.Tenants",
"DisplayName": "AbpTenantManagement.Tenants",
"Order": 1,
"Url": "/admin/list/AbpTenantManagement.Tenants",
"Icon": "FcDepartment",
"RequiredPermissionName": "AbpTenantManagement.Tenants",
"IsDisabled": false
},
{
"ParentCode": "App.Saas",
"Code": "App.Branches",
"DisplayName": "App.Branches",
"Order": 2,
"Url": "/admin/list/App.Branches",
"Icon": "FcTreeStructure",
"RequiredPermissionName": "App.Branches",
"IsDisabled": false
},
{ {
"ParentCode": "App.Saas", "ParentCode": "App.Saas",
"Code": "App.AiBot", "Code": "App.AiBot",
"DisplayName": "App.AiBot", "DisplayName": "App.AiBot",
"Order": 3, "Order": 1,
"Url": "/admin/list/App.AiBot", "Url": "/admin/list/App.AiBot",
"Icon": "FcMindMap", "Icon": "FcMindMap",
"RequiredPermissionName": "App.AiBot", "RequiredPermissionName": "App.AiBot",
@ -511,26 +410,6 @@
}, },
{ {
"ParentCode": "App.Saas", "ParentCode": "App.Saas",
"Code": "App.Settings",
"DisplayName": "App.Settings",
"Order": 4,
"Url": null,
"Icon": "FcCircuit",
"RequiredPermissionName": null,
"IsDisabled": false
},
{
"ParentCode": "App.Settings",
"Code": "App.Settings.SettingDefinitions",
"DisplayName": "App.Settings.SettingDefinitions",
"Order": 1,
"Url": "/admin/list/App.Settings.SettingDefinitions",
"Icon": "FcSupport",
"RequiredPermissionName": "App.Settings.SettingDefinitions",
"IsDisabled": false
},
{
"ParentCode": "App.Settings",
"Code": "App.Settings.GlobalSearch", "Code": "App.Settings.GlobalSearch",
"DisplayName": "App.Settings.GlobalSearch", "DisplayName": "App.Settings.GlobalSearch",
"Order": 2, "Order": 2,
@ -539,11 +418,41 @@
"RequiredPermissionName": "App.Settings.GlobalSearch", "RequiredPermissionName": "App.Settings.GlobalSearch",
"IsDisabled": false "IsDisabled": false
}, },
{
"ParentCode": "App.Saas",
"Code": "AbpTenantManagement.Tenants",
"DisplayName": "AbpTenantManagement.Tenants",
"Order": 3,
"Url": "/admin/list/AbpTenantManagement.Tenants",
"Icon": "FcDepartment",
"RequiredPermissionName": "AbpTenantManagement.Tenants",
"IsDisabled": false
},
{
"ParentCode": "App.Saas",
"Code": "App.Branches",
"DisplayName": "App.Branches",
"Order": 4,
"Url": "/admin/list/App.Branches",
"Icon": "FcTreeStructure",
"RequiredPermissionName": "App.Branches",
"IsDisabled": false
},
{
"ParentCode": "App.Saas",
"Code": "App.Settings.SettingDefinitions",
"DisplayName": "App.Settings.SettingDefinitions",
"Order": 5,
"Url": "/admin/list/App.Settings.SettingDefinitions",
"Icon": "FcSupport",
"RequiredPermissionName": "App.Settings.SettingDefinitions",
"IsDisabled": false
},
{ {
"ParentCode": "App.Saas", "ParentCode": "App.Saas",
"Code": "App.Languages", "Code": "App.Languages",
"DisplayName": "App.Languages", "DisplayName": "App.Languages",
"Order": 5, "Order": 6,
"Url": null, "Url": null,
"Icon": "FcGlobe", "Icon": "FcGlobe",
"RequiredPermissionName": null, "RequiredPermissionName": null,
@ -571,39 +480,19 @@
}, },
{ {
"ParentCode": "App.Saas", "ParentCode": "App.Saas",
"Code": "App.Listforms",
"DisplayName": "App.Listforms",
"Order": 8,
"Url": null,
"Icon": "FcList",
"RequiredPermissionName": null,
"IsDisabled": false
},
{
"ParentCode": "App.Listforms",
"Code": "App.Listforms.DataSource", "Code": "App.Listforms.DataSource",
"DisplayName": "App.Listforms.DataSource", "DisplayName": "App.Listforms.DataSource",
"Order": 1, "Order": 7,
"Url": "/admin/list/App.Listforms.DataSource", "Url": "/admin/list/App.Listforms.DataSource",
"Icon": "FcAcceptDatabase", "Icon": "FcAcceptDatabase",
"RequiredPermissionName": "App.Listforms.DataSource", "RequiredPermissionName": "App.Listforms.DataSource",
"IsDisabled": false "IsDisabled": false
}, },
{ {
"ParentCode": "App.Listforms", "ParentCode": "App.Saas",
"Code": "App.Listforms.Wizard",
"DisplayName": "App.Listforms.Wizard",
"Order": 2,
"Url": "/admin/listform/wizard",
"Icon": "FcFlashAuto",
"RequiredPermissionName": "App.Listforms.Wizard",
"IsDisabled": false
},
{
"ParentCode": "App.Listforms",
"Code": "App.Listforms.Listform", "Code": "App.Listforms.Listform",
"DisplayName": "App.Listforms.Listform", "DisplayName": "App.Listforms.Listform",
"Order": 3, "Order": 9,
"Url": "/admin/list/App.Listforms.Listform", "Url": "/admin/list/App.Listforms.Listform",
"Icon": "FcDataSheet", "Icon": "FcDataSheet",
"RequiredPermissionName": "App.Listforms.Listform", "RequiredPermissionName": "App.Listforms.Listform",
@ -613,7 +502,7 @@
"ParentCode": "App.Saas", "ParentCode": "App.Saas",
"Code": "App.Notifications", "Code": "App.Notifications",
"DisplayName": "App.Notifications", "DisplayName": "App.Notifications",
"Order": 9, "Order": 10,
"Url": null, "Url": null,
"Icon": "FcWorkflow", "Icon": "FcWorkflow",
"RequiredPermissionName": null, "RequiredPermissionName": null,
@ -643,7 +532,7 @@
"ParentCode": "App.Saas", "ParentCode": "App.Saas",
"Code": "App.BackgroundWorkers", "Code": "App.BackgroundWorkers",
"DisplayName": "App.BackgroundWorkers", "DisplayName": "App.BackgroundWorkers",
"Order": 10, "Order": 11,
"Url": "/admin/list/App.BackgroundWorkers", "Url": "/admin/list/App.BackgroundWorkers",
"Icon": "FcScatterPlot", "Icon": "FcScatterPlot",
"RequiredPermissionName": "App.BackgroundWorkers", "RequiredPermissionName": "App.BackgroundWorkers",
@ -653,7 +542,7 @@
"ParentCode": "App.Saas", "ParentCode": "App.Saas",
"Code": "App.ForumManagement", "Code": "App.ForumManagement",
"DisplayName": "App.ForumManagement", "DisplayName": "App.ForumManagement",
"Order": 11, "Order": 12,
"Url": "/admin/forumManagement", "Url": "/admin/forumManagement",
"Icon": "FcReading", "Icon": "FcReading",
"RequiredPermissionName": "App.ForumManagement", "RequiredPermissionName": "App.ForumManagement",
@ -880,21 +769,11 @@
"RequiredPermissionName": "App.AuditLogs", "RequiredPermissionName": "App.AuditLogs",
"IsDisabled": false "IsDisabled": false
}, },
{
"ParentCode": "App.Administration",
"Code": "App.Forum",
"DisplayName": "App.Forum",
"Order": 4,
"Url": "/admin/forum",
"Icon": "FcLink",
"RequiredPermissionName": "App.ForumManagement.Publish",
"IsDisabled": false
},
{ {
"ParentCode": "App.Administration", "ParentCode": "App.Administration",
"Code": "App.Public", "Code": "App.Public",
"DisplayName": "App.Public", "DisplayName": "App.Public",
"Order": 6, "Order": 4,
"Url": null, "Url": null,
"Icon": "FcGenealogy", "Icon": "FcGenealogy",
"RequiredPermissionName": null, "RequiredPermissionName": null,
@ -1000,11 +879,21 @@
"RequiredPermissionName": "App.Contact", "RequiredPermissionName": "App.Contact",
"IsDisabled": false "IsDisabled": false
}, },
{
"ParentCode": "App.Administration",
"Code": "App.Listforms.Wizard",
"DisplayName": "App.Listforms.Wizard",
"Order": 5,
"Url": "/admin/listform/wizard",
"Icon": "FcFlashAuto",
"RequiredPermissionName": "App.Listforms.Wizard",
"IsDisabled": false
},
{ {
"ParentCode": "App.Administration", "ParentCode": "App.Administration",
"Code": "App.Routes", "Code": "App.Routes",
"DisplayName": "App.Routes", "DisplayName": "App.Routes",
"Order": 7, "Order": 6,
"Url": "/admin/list/App.Routes", "Url": "/admin/list/App.Routes",
"Icon": "FaSynagogue", "Icon": "FaSynagogue",
"RequiredPermissionName": "App.Routes", "RequiredPermissionName": "App.Routes",
@ -1014,7 +903,7 @@
"ParentCode": "App.Administration", "ParentCode": "App.Administration",
"Code": "App.Menus", "Code": "App.Menus",
"DisplayName": "App.Menus", "DisplayName": "App.Menus",
"Order": 8, "Order": 7,
"Url": null, "Url": null,
"Icon": "FaSchlix", "Icon": "FaSchlix",
"RequiredPermissionName": null, "RequiredPermissionName": null,
@ -1044,7 +933,7 @@
"ParentCode": "App.Administration", "ParentCode": "App.Administration",
"Code": "App.Files", "Code": "App.Files",
"DisplayName": "App.Files", "DisplayName": "App.Files",
"Order": 9, "Order": 8,
"Url": "/admin/files", "Url": "/admin/files",
"Icon": "FcFolder", "Icon": "FcFolder",
"RequiredPermissionName": "App.Files", "RequiredPermissionName": "App.Files",
@ -1054,7 +943,7 @@
"ParentCode": "App.Administration", "ParentCode": "App.Administration",
"Code": "App.Reports.Management", "Code": "App.Reports.Management",
"DisplayName": "App.Reports.Management", "DisplayName": "App.Reports.Management",
"Order": 10, "Order": 9,
"Url": null, "Url": null,
"Icon": "FcDocument", "Icon": "FcDocument",
"RequiredPermissionName": null, "RequiredPermissionName": null,
@ -1084,7 +973,7 @@
"ParentCode": "App.Administration", "ParentCode": "App.Administration",
"Code": "App.DeveloperKit", "Code": "App.DeveloperKit",
"DisplayName": "App.DeveloperKit", "DisplayName": "App.DeveloperKit",
"Order": 11, "Order": 10,
"Url": null, "Url": null,
"Icon": "FcAndroidOs", "Icon": "FcAndroidOs",
"RequiredPermissionName": null, "RequiredPermissionName": null,
@ -1161,14 +1050,24 @@
"IsDisabled": false "IsDisabled": false
}, },
{ {
"ParentCode": "App.Administration", "ParentCode": "App.DeveloperKit",
"Code": "App.SqlQueryManager", "Code": "App.SqlQueryManager",
"DisplayName": "App.SqlQueryManager", "DisplayName": "App.SqlQueryManager",
"Order": 13, "Order": 8,
"Url": "/admin/sqlQueryManager", "Url": "/admin/sqlQueryManager",
"Icon": "FaDatabase", "Icon": "FaDatabase",
"RequiredPermissionName": "App.SqlQueryManager", "RequiredPermissionName": "App.SqlQueryManager",
"IsDisabled": false "IsDisabled": false
},
{
"ParentCode": "App.Administration",
"Code": "App.Forum",
"DisplayName": "App.Forum",
"Order": 11,
"Url": "/admin/forum",
"Icon": "FcLink",
"RequiredPermissionName": "App.ForumManagement.Publish",
"IsDisabled": false
} }
] ]
} }

View file

@ -7,22 +7,9 @@
{ {
"Name": "App.Administration", "Name": "App.Administration",
"DisplayName": "App.Administration" "DisplayName": "App.Administration"
},
{
"Name": "App.Platform",
"DisplayName": "App.Platform"
} }
], ],
"PermissionDefinitionRecords": [ "PermissionDefinitionRecords": [
{
"GroupName": "App.Platform",
"Name": "Abp.Identity.Ai",
"ParentName": null,
"DisplayName": "Abp.Identity.Ai",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp|Kurs"
},
{ {
"GroupName": "App.Saas", "GroupName": "App.Saas",
"Name": "AbpTenantManagement.Tenants", "Name": "AbpTenantManagement.Tenants",
@ -221,6 +208,15 @@
"MultiTenancySide": 2, "MultiTenancySide": 2,
"MenuGroup": "Erp|Kurs" "MenuGroup": "Erp|Kurs"
}, },
{
"GroupName": "App.Saas",
"Name": "App.AiBot.Asistant",
"ParentName": "App.AiBot",
"DisplayName": "App.AiBot.Asistant",
"IsEnabled": true,
"MultiTenancySide": 3,
"MenuGroup": "Erp|Kurs"
},
{ {
"GroupName": "App.Saas", "GroupName": "App.Saas",
"Name": "App.AiBot.Update", "Name": "App.AiBot.Update",

View file

@ -10,4 +10,3 @@ public class DataSource : FullAuditedEntity<Guid>
public DataSourceTypeEnum DataSourceType { get; set; } public DataSourceTypeEnum DataSourceType { get; set; }
public string ConnectionString { get; set; } public string ConnectionString { get; set; }
} }

View file

@ -1,7 +1,7 @@
{ {
"name": "sozsoft-platform-ui", "name": "sozsoft-platform-ui",
"private": true, "private": true,
"version": "1.0.2", "version": "1.0.4",
"elstarVersion": "2.1.6", "elstarVersion": "2.1.6",
"type": "module", "type": "module",
"scripts": { "scripts": {

View file

@ -1,5 +1,5 @@
.menu-item { .menu-item {
@apply cursor-pointer font-medium rounded-md flex items-center w-full whitespace-nowrap px-1.3; @apply cursor-pointer font-semibold px-1 rounded-md flex items-center w-full whitespace-nowrap gap-x-1.5;
&.menu-item-light { &.menu-item-light {
@apply text-gray-600; @apply text-gray-600;

View file

@ -10,14 +10,14 @@ const AiAssistant = () => {
const navigate = useNavigate() const navigate = useNavigate()
const { checkPermissions } = usePermission() const { checkPermissions } = usePermission()
const canViewAi = checkPermissions(['Abp.Identity.Ai']) const canViewAi = checkPermissions(['App.AiBot.Asistant'])
if (!canViewAi) { if (!canViewAi) {
return null return null
} }
return ( return (
<Tooltip title={translate('::Abp.Identity.Ai')}> <Tooltip title={translate('::App.AiBot.Asistant')}>
<div <div
onClick={() => navigate(ROUTES_ENUM.protected.admin.ai)} onClick={() => navigate(ROUTES_ENUM.protected.admin.ai)}
className="flex items-center justify-center text-2xl m-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer transition-colors duration-200" className="flex items-center justify-center text-2xl m-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer transition-colors duration-200"

View file

@ -10,12 +10,11 @@ import {
} from '@/constants/navigation.constant' } from '@/constants/navigation.constant'
import useMenuActive from '@/utils/hooks/useMenuActive' import useMenuActive from '@/utils/hooks/useMenuActive'
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { Link, useLocation } from 'react-router-dom' import { useLocation } from 'react-router-dom'
import VerticalCollapsedMenuItem from './VerticalCollapsedMenuItem' import VerticalCollapsedMenuItem from './VerticalCollapsedMenuItem'
import VerticalSingleMenuItem from './VerticalSingleMenuItem' import VerticalSingleMenuItem from './VerticalSingleMenuItem'
import MenuCollapse from '@/components/ui/Menu/MenuCollapse' import MenuCollapse from '@/components/ui/Menu/MenuCollapse'
import VerticalMenuIcon from './VerticalMenuIcon' import VerticalMenuIcon from './VerticalMenuIcon'
import { MenuItem } from '@/components/ui'
export interface VerticalMenuContentProps { export interface VerticalMenuContentProps {
navMode: NavMode navMode: NavMode

View file

@ -272,7 +272,7 @@ const Assistant = () => {
<Container> <Container>
<Helmet <Helmet
titleTemplate={`%s | ${APP_NAME}`} titleTemplate={`%s | ${APP_NAME}`}
title={translate('::' + 'Abp.Identity.Ai')} title={translate('::' + 'App.AiBot.Asistant')}
defaultTitle={APP_NAME} defaultTitle={APP_NAME}
></Helmet> ></Helmet>

View file

@ -620,6 +620,10 @@ const Grid = (props: GridProps) => {
}, [listFormCode, storageKey]) }, [listFormCode, storageKey])
useEffect(() => { useEffect(() => {
// React state'i sıfırla - eski değerlerin customLoadState'i erken tetiklemesini önle
setGridDataSource(undefined)
setColumnData(undefined)
if (gridRef?.current) { if (gridRef?.current) {
const instance = gridRef?.current?.instance() const instance = gridRef?.current?.instance()
if (instance) { if (instance) {
@ -773,9 +777,7 @@ const Grid = (props: GridProps) => {
}, [gridDto, config]) }, [gridDto, config])
useEffect(() => { useEffect(() => {
if (memoizedColumns) {
setColumnData(memoizedColumns) setColumnData(memoizedColumns)
}
}, [memoizedColumns]) }, [memoizedColumns])
// DataSource oluştur - sadece gridDto değiştiğinde // DataSource oluştur - sadece gridDto değiştiğinde
@ -792,9 +794,7 @@ const Grid = (props: GridProps) => {
}, [gridDto, listFormCode, createSelectDataSource]) }, [gridDto, listFormCode, createSelectDataSource])
useEffect(() => { useEffect(() => {
if (memoizedDataSource) {
setGridDataSource(memoizedDataSource) setGridDataSource(memoizedDataSource)
}
}, [memoizedDataSource]) }, [memoizedDataSource])
// Grid columns'ı set et - sadece columnData değiştiğinde // Grid columns'ı set et - sadece columnData değiştiğinde
@ -807,44 +807,41 @@ const Grid = (props: GridProps) => {
} }
}, [columnData]) }, [columnData])
// Grid dataSource'u set et - sadece gridDataSource değiştiğinde
useEffect(() => {
if (!gridDataSource || !gridRef?.current) return
const instance = gridRef?.current?.instance()
if (instance) {
instance.option('remoteOperations', {
paging: true,
filtering: true,
sorting: true,
grouping: false,
summary: false,
})
instance.option('dataSource', gridDataSource)
}
}, [gridDataSource])
// listFormCode'u ref'e kaydet // listFormCode'u ref'e kaydet
useEffect(() => { useEffect(() => {
refListFormCode.current = listFormCode refListFormCode.current = listFormCode
}, [listFormCode]) }, [listFormCode])
// Component mount olduğunda state'i bir kez yükle // State yükle + DataSource'u tek seferde set et → tek bir veri çekimi
// customLoadState önce çalışır, state grid'e uygulandıktan SONRA dataSource set edilir
useEffect(() => { useEffect(() => {
if (!gridDto || !gridRef?.current || !gridDataSource || !columnData) return if (!gridDto || !gridRef?.current || !gridDataSource || !columnData) return
const instance = gridRef?.current?.instance() const instance = gridRef?.current?.instance()
if (instance) { if (!instance) return
const remoteOps = {
paging: true,
filtering: true,
sorting: true,
grouping: false,
summary: false,
}
customLoadState() customLoadState()
.then((state) => { .then((state) => {
instance.option('remoteOperations', remoteOps)
// State varsa dataSource set edilmeden ÖNCE uygula → tek veri çekimi
if (state) { if (state) {
instance.state(state) instance.state(state)
} }
instance.option('dataSource', gridDataSource)
}) })
.catch((err) => { .catch((err) => {
console.error('State load error:', err) console.error('State load error:', err)
instance.option('remoteOperations', remoteOps)
instance.option('dataSource', gridDataSource)
}) })
}
}, [gridDto, gridDataSource, columnData]) }, [gridDto, gridDataSource, columnData])
// StateStoring'i devre dışı bırak - manuel kaydetme kullanılacak // StateStoring'i devre dışı bırak - manuel kaydetme kullanılacak