ListForm Manage ve AppServis güncellemeleri
This commit is contained in:
parent
293abf86ba
commit
c0aec43620
9 changed files with 141 additions and 64 deletions
|
|
@ -8,10 +8,11 @@ using Kurs.Platform.ListForms.Customization;
|
|||
using Microsoft.AspNetCore.Authorization;
|
||||
using Volo.Abp.Application.Services;
|
||||
using Volo.Abp.Domain.Repositories;
|
||||
using static Kurs.Platform.PlatformConsts;
|
||||
|
||||
namespace Kurs.Platform.ListForms.Administration;
|
||||
|
||||
[Authorize(PlatformConsts.AppCodes.Listforms.Listform)]
|
||||
[Authorize(AppCodes.Listforms.Listform)]
|
||||
public class ListFormCustomizationAppService : CrudAppService<ListFormCustomization,
|
||||
ListFormCustomizationDto,
|
||||
Guid,
|
||||
|
|
@ -21,6 +22,9 @@ public class ListFormCustomizationAppService : CrudAppService<ListFormCustomizat
|
|||
IRepository<ListFormCustomization, Guid> _repository
|
||||
) : base(_repository)
|
||||
{
|
||||
CreatePolicyName = $"{AppCodes.Listforms.Listform}.Create";
|
||||
UpdatePolicyName = $"{AppCodes.Listforms.Listform}.Update";
|
||||
DeletePolicyName = $"{AppCodes.Listforms.Listform}.Delete";
|
||||
}
|
||||
|
||||
protected override async Task<IQueryable<ListFormCustomization>> CreateFilteredQueryAsync(ListFormCustomizationRequestDto input)
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Authorization;
|
|||
using Microsoft.EntityFrameworkCore;
|
||||
using Volo.Abp.Application.Services;
|
||||
using Volo.Abp.Domain.Repositories;
|
||||
using static Kurs.Platform.PlatformConsts;
|
||||
|
||||
namespace Kurs.Platform.ListForms.Administration;
|
||||
|
||||
|
|
@ -26,6 +27,10 @@ public class ListFormFieldsAppService : CrudAppService<
|
|||
) : base(_repository)
|
||||
{
|
||||
RepoListForm = _repoListForm;
|
||||
|
||||
CreatePolicyName = $"{AppCodes.Listforms.Listform}.Create";
|
||||
UpdatePolicyName = $"{AppCodes.Listforms.Listform}.Update";
|
||||
DeletePolicyName = $"{AppCodes.Listforms.Listform}.Delete";
|
||||
}
|
||||
|
||||
protected override async Task<IQueryable<ListFormField>> CreateFilteredQueryAsync(ListFormFieldRequestDto input)
|
||||
|
|
@ -99,9 +104,9 @@ public class ListFormFieldsAppService : CrudAppService<
|
|||
|
||||
input.PermissionJson = JsonSerializer.Serialize(new ListFormFieldPermissionDto
|
||||
{
|
||||
R = listFormPermissions.R,
|
||||
C = listFormPermissions.C,
|
||||
U = listFormPermissions.U,
|
||||
R = listFormPermissions?.R,
|
||||
C = listFormPermissions?.C,
|
||||
U = listFormPermissions?.U,
|
||||
E = true
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public class ListFormsAppService : CrudAppService<
|
|||
|
||||
public async Task<GridOptionsEditDto> GetByListFormCodeAsync(string listFormCode)
|
||||
{
|
||||
bool canAccess = await authManager.CanAccess(listFormCode, AuthorizationTypeEnum.Read);
|
||||
bool canAccess = await authManager.CanAccess(listFormCode, AuthorizationTypeEnum.Update);
|
||||
if (!canAccess)
|
||||
{
|
||||
throw new UserFriendlyException(L[AppErrorCodes.NoAuth]);
|
||||
|
|
|
|||
|
|
@ -157,7 +157,6 @@ public class MenuAppService : CrudAppService<
|
|||
return result;
|
||||
}
|
||||
|
||||
|
||||
public override async Task DeleteAsync(Guid id)
|
||||
{
|
||||
await CheckDeletePolicyAsync();
|
||||
|
|
|
|||
|
|
@ -17702,7 +17702,7 @@
|
|||
"MultiTenancySide": 2
|
||||
},
|
||||
{
|
||||
"GroupName": "App.Saas",
|
||||
"GroupName": "App.Administration",
|
||||
"Name": "App.Definitions.Sector",
|
||||
"ParentName": null,
|
||||
"DisplayName": "App.Definitions.Sector",
|
||||
|
|
@ -17710,7 +17710,7 @@
|
|||
"MultiTenancySide": 3
|
||||
},
|
||||
{
|
||||
"GroupName": "App.Saas",
|
||||
"GroupName": "App.Administration",
|
||||
"Name": "App.Definitions.Sector.Create",
|
||||
"ParentName": "App.Definitions.Sector",
|
||||
"DisplayName": "Create",
|
||||
|
|
@ -17718,7 +17718,7 @@
|
|||
"MultiTenancySide": 3
|
||||
},
|
||||
{
|
||||
"GroupName": "App.Saas",
|
||||
"GroupName": "App.Administration",
|
||||
"Name": "App.Definitions.Sector.Update",
|
||||
"ParentName": "App.Definitions.Sector",
|
||||
"DisplayName": "Update",
|
||||
|
|
@ -17726,7 +17726,7 @@
|
|||
"MultiTenancySide": 3
|
||||
},
|
||||
{
|
||||
"GroupName": "App.Saas",
|
||||
"GroupName": "App.Administration",
|
||||
"Name": "App.Definitions.Sector.Delete",
|
||||
"ParentName": "App.Definitions.Sector",
|
||||
"DisplayName": "Delete",
|
||||
|
|
@ -17734,7 +17734,7 @@
|
|||
"MultiTenancySide": 3
|
||||
},
|
||||
{
|
||||
"GroupName": "App.Saas",
|
||||
"GroupName": "App.Administration",
|
||||
"Name": "App.Definitions.Sector.Export",
|
||||
"ParentName": "App.Definitions.Sector",
|
||||
"DisplayName": "Export",
|
||||
|
|
@ -17742,7 +17742,7 @@
|
|||
"MultiTenancySide": 3
|
||||
},
|
||||
{
|
||||
"GroupName": "App.Saas",
|
||||
"GroupName": "App.Administration",
|
||||
"Name": "App.Definitions.Sector.Import",
|
||||
"ParentName": "App.Definitions.Sector",
|
||||
"DisplayName": "Import",
|
||||
|
|
|
|||
|
|
@ -55,6 +55,8 @@ public class ListFormAuthorizationManager : PlatformDomainService, IListFormAuth
|
|||
AuthorizationTypeEnum.Update => permissions.U,
|
||||
AuthorizationTypeEnum.Create => permissions.C,
|
||||
AuthorizationTypeEnum.Delete => permissions.D,
|
||||
AuthorizationTypeEnum.Import => permissions.I,
|
||||
AuthorizationTypeEnum.Export => permissions.E,
|
||||
_ => permissions.R,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,8 @@ public class PermissionCrudValueObject : ValueObject
|
|||
public string R { get; set; }
|
||||
public string U { get; set; }
|
||||
public string D { get; set; }
|
||||
public string I { get; set; }
|
||||
public string E { get; set; }
|
||||
|
||||
protected override IEnumerable<object> GetAtomicValues()
|
||||
{
|
||||
|
|
@ -16,5 +18,7 @@ public class PermissionCrudValueObject : ValueObject
|
|||
yield return R;
|
||||
yield return U;
|
||||
yield return D;
|
||||
yield return I;
|
||||
yield return E;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,9 +9,10 @@ import { useLocalization } from '@/utils/hooks/useLocalization'
|
|||
import DataGrid from 'devextreme-react/data-grid'
|
||||
import PivotGrid from 'devextreme-react/pivot-grid'
|
||||
import { ToolbarItem } from 'devextreme/ui/data_grid_types'
|
||||
import dxDataGrid from 'devextreme/ui/data_grid'
|
||||
import dxPivotGrid from 'devextreme/ui/pivot_grid'
|
||||
import { Dispatch, MutableRefObject, SetStateAction, useEffect, useState } from 'react'
|
||||
import { setGridPanelColor } from './Utils'
|
||||
import { useNavigate } from 'react-router-dom'
|
||||
import { usePermission } from '@/utils/hooks/usePermission'
|
||||
import { usePWA } from '@/utils/hooks/usePWA'
|
||||
import { ROUTES_ENUM } from '@/routes/route.constant'
|
||||
|
|
@ -21,6 +22,75 @@ export interface ISelectBoxData {
|
|||
label?: string
|
||||
}
|
||||
|
||||
// Grid tipini kontrol eden yardımcı fonksiyonlar
|
||||
const isDataGrid = (grid: dxDataGrid | dxPivotGrid): grid is dxDataGrid => {
|
||||
return 'clearFilter' in grid
|
||||
}
|
||||
|
||||
const getToolbarItems = (grid: dxDataGrid | dxPivotGrid): any[] => {
|
||||
if (isDataGrid(grid)) {
|
||||
const toolbarOptions = grid.option('toolbar')
|
||||
return toolbarOptions?.items || []
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
||||
const setToolbarItemValue = (grid: dxDataGrid | dxPivotGrid, itemName: string, value: any) => {
|
||||
if (isDataGrid(grid)) {
|
||||
const toolbarOptions = grid.option('toolbar')
|
||||
if (toolbarOptions?.items) {
|
||||
const index = toolbarOptions.items.findIndex((item: any) => item.name === itemName)
|
||||
if (index > -1 && toolbarOptions.items[index]) {
|
||||
const item = toolbarOptions.items[index] as any
|
||||
if (item.options) {
|
||||
item.options.value = value
|
||||
grid.option('toolbar', toolbarOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const setToolbarItemItems = (grid: dxDataGrid | dxPivotGrid, itemName: string, items: any[]) => {
|
||||
if (isDataGrid(grid)) {
|
||||
const toolbarOptions = grid.option('toolbar')
|
||||
if (toolbarOptions?.items) {
|
||||
const index = toolbarOptions.items.findIndex((item: any) => item.name === itemName)
|
||||
if (index > -1 && toolbarOptions.items[index]) {
|
||||
const item = toolbarOptions.items[index] as any
|
||||
if (item.options) {
|
||||
item.options.items = items
|
||||
grid.option('toolbar', toolbarOptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const clearGridFilter = (grid: dxDataGrid | dxPivotGrid) => {
|
||||
if (isDataGrid(grid)) {
|
||||
grid.clearFilter()
|
||||
}
|
||||
}
|
||||
|
||||
const setFilterPanelVisible = (grid: dxDataGrid | dxPivotGrid, visible: boolean) => {
|
||||
if (isDataGrid(grid)) {
|
||||
grid.option('filterPanel', { visible })
|
||||
}
|
||||
}
|
||||
|
||||
const setFilterValue = (grid: dxDataGrid | dxPivotGrid, value: any) => {
|
||||
if (isDataGrid(grid)) {
|
||||
grid.option('filterValue', value)
|
||||
}
|
||||
}
|
||||
|
||||
const resetGridState = (grid: dxDataGrid | dxPivotGrid) => {
|
||||
if (isDataGrid(grid)) {
|
||||
grid.state(null)
|
||||
}
|
||||
}
|
||||
|
||||
const useFilters = ({
|
||||
gridDto,
|
||||
gridRef,
|
||||
|
|
@ -58,7 +128,6 @@ const useFilters = ({
|
|||
const filteredGridPanelColor = 'rgba(10, 200, 10, 0.5)' // kullanici tanimli filtre ile filtrelenmis gridin paneline ait renk
|
||||
|
||||
const grdOpt = gridDto?.gridOptions
|
||||
const navigate = useNavigate()
|
||||
|
||||
const getFilters = async () => {
|
||||
const response = await getListFormCustomization(
|
||||
|
|
@ -75,12 +144,8 @@ const useFilters = ({
|
|||
|
||||
const grid = gridRef?.current?.instance
|
||||
if (grid) {
|
||||
const toolbarItems = grid.option('toolbar.items') as ToolbarItem[]
|
||||
const index = toolbarItems?.findIndex((a) => a.name === 'selectCustomFilters')
|
||||
if (index > -1) {
|
||||
grid.option(`toolbar.items.${index}.options.value`, '')
|
||||
grid.option(`toolbar.items.${index}.options.items`, mappedFilters)
|
||||
}
|
||||
setToolbarItemValue(grid, 'selectCustomFilters', '')
|
||||
setToolbarItemItems(grid, 'selectCustomFilters', mappedFilters)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -141,7 +206,7 @@ const useFilters = ({
|
|||
})
|
||||
}
|
||||
|
||||
if (checkPermission(gridDto?.gridOptions.permissionDto.u)) {
|
||||
if (checkPermission("App.ListForms.ListForm.Update")) {
|
||||
menus.push({
|
||||
text: translate('::ListForms.ListForm.Manage'),
|
||||
id: 'openManage',
|
||||
|
|
@ -192,32 +257,24 @@ const useFilters = ({
|
|||
return
|
||||
}
|
||||
|
||||
grid.clearFilter()
|
||||
grid.option('filterPanel.visible', false)
|
||||
clearGridFilter(grid)
|
||||
setFilterPanelVisible(grid, false)
|
||||
setGridPanelColor('transparent')
|
||||
|
||||
const toolbarItems = grid.option('toolbar.items') as ToolbarItem[]
|
||||
const index = toolbarItems?.findIndex((a) => a.name === 'selectCustomFilters')
|
||||
if (index > -1) {
|
||||
grid.option(`toolbar.items.${index}.options.value`, '')
|
||||
}
|
||||
setToolbarItemValue(grid, 'selectCustomFilters', '')
|
||||
} else if (itemData.id === 'resetGridState') {
|
||||
// state ye kaydedilen grid ayarlarini siler ve gridi resetler
|
||||
const grid = gridRef.current?.instance
|
||||
if (!grid) {
|
||||
return
|
||||
}
|
||||
grid.state(null)
|
||||
resetGridState(grid)
|
||||
|
||||
grid.clearFilter()
|
||||
grid.option('filterPanel.visible', false)
|
||||
clearGridFilter(grid)
|
||||
setFilterPanelVisible(grid, false)
|
||||
setGridPanelColor('transparent')
|
||||
|
||||
const toolbarItems = grid.option('toolbar.items') as ToolbarItem[]
|
||||
const index = toolbarItems?.findIndex((a) => a.name === 'selectCustomFilters')
|
||||
if (index > -1) {
|
||||
grid.option(`toolbar.items.${index}.options.value`, '')
|
||||
}
|
||||
setToolbarItemValue(grid, 'selectCustomFilters', '')
|
||||
} else if (itemData.id === 'importManager') {
|
||||
// import modal aç
|
||||
setIsImportModalOpen(true)
|
||||
|
|
@ -259,12 +316,12 @@ const useFilters = ({
|
|||
try {
|
||||
const filter = filters.find((a) => a.id === e.value)
|
||||
if (filter) {
|
||||
grid.option('filterValue', JSON.parse(filter.customizationData))
|
||||
grid.option('filterPanel.visible', true)
|
||||
setFilterValue(grid, JSON.parse(filter.customizationData))
|
||||
setFilterPanelVisible(grid, true)
|
||||
setGridPanelColor(filteredGridPanelColor)
|
||||
} else {
|
||||
grid.clearFilter()
|
||||
grid.option('filterPanel.visible', false)
|
||||
clearGridFilter(grid)
|
||||
setFilterPanelVisible(grid, false)
|
||||
setGridPanelColor('transparent')
|
||||
}
|
||||
|
||||
|
|
@ -282,11 +339,7 @@ const useFilters = ({
|
|||
},
|
||||
)
|
||||
} finally {
|
||||
const toolbarItems = grid.option('toolbar.items') as ToolbarItem[]
|
||||
const index = toolbarItems?.findIndex((a) => a.name === 'selectCustomFilters')
|
||||
if (index > -1) {
|
||||
grid.option(`toolbar.items.${index}.options.value`, value)
|
||||
}
|
||||
setToolbarItemValue(grid, 'selectCustomFilters', value)
|
||||
}
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -53,6 +53,25 @@ const useToolbar = ({
|
|||
return
|
||||
}
|
||||
|
||||
// Add searchPanel
|
||||
if (grdOpt.searchPanelDto?.visible) {
|
||||
items.push({
|
||||
locateInMenu: 'auto',
|
||||
showText: 'inMenu',
|
||||
name: 'searchPanel',
|
||||
})
|
||||
}
|
||||
|
||||
items.push({
|
||||
widget: 'dxButton',
|
||||
name: 'refreshButton',
|
||||
options: {
|
||||
icon: 'refresh',
|
||||
onClick: refreshData,
|
||||
},
|
||||
location: 'after',
|
||||
})
|
||||
|
||||
// field chooser panel
|
||||
if (grdOpt.columnOptionDto?.columnChooserEnabled) {
|
||||
items.push({
|
||||
|
|
@ -62,6 +81,16 @@ const useToolbar = ({
|
|||
})
|
||||
}
|
||||
|
||||
// Add InsertNewRecord button
|
||||
if (grdOpt.editingOptionDto?.allowAdding && checkPermission(grdOpt.permissionDto?.c)) {
|
||||
items.push({
|
||||
locateInMenu: 'auto',
|
||||
showText: 'inMenu',
|
||||
name: 'addRowButton',
|
||||
location: 'after',
|
||||
})
|
||||
}
|
||||
|
||||
// Add group panel
|
||||
if (grdOpt.groupPanelDto?.visible) {
|
||||
items.push({
|
||||
|
|
@ -171,16 +200,6 @@ const useToolbar = ({
|
|||
}
|
||||
}
|
||||
|
||||
// Add InsertNewRecord button
|
||||
if (grdOpt.editingOptionDto?.allowAdding && checkPermission(grdOpt.permissionDto?.c)) {
|
||||
items.push({
|
||||
locateInMenu: 'auto',
|
||||
showText: 'inMenu',
|
||||
name: 'addRowButton',
|
||||
location: 'after',
|
||||
})
|
||||
}
|
||||
|
||||
// #region Toolbar icin kullanici tanimli dinamik butonlari ekler
|
||||
for (let i = 0; i < grdOpt.commandColumnDto.length; i++) {
|
||||
const action = grdOpt.commandColumnDto[i]
|
||||
|
|
@ -248,15 +267,6 @@ const useToolbar = ({
|
|||
}
|
||||
// #endregion
|
||||
|
||||
// Add searchPanel
|
||||
if (grdOpt.searchPanelDto?.visible) {
|
||||
items.push({
|
||||
locateInMenu: 'auto',
|
||||
showText: 'inMenu',
|
||||
name: 'searchPanel',
|
||||
})
|
||||
}
|
||||
|
||||
// batch editing icin kaydet ve geri al butonu
|
||||
if (
|
||||
grdOpt.editingOptionDto?.allowUpdating &&
|
||||
|
|
|
|||
Loading…
Reference in a new issue