Skip to content

Commit d656219

Browse files
updated the DynamicGroupDropdown
1 parent 3bb0e08 commit d656219

File tree

714 files changed

+249
-22789
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

714 files changed

+249
-22789
lines changed

assets/js/src/core/components/pipeline/item/dynamic-group/dynamic-group-dropdown.tsx

Lines changed: 58 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,27 @@
88
* @license Pimcore Open Core License (POCL)
99
*/
1010

11+
import React from 'react'
12+
import { isNil, isNull } from 'lodash'
13+
import { type MenuProps } from 'antd'
14+
import { useTranslation } from 'react-i18next'
1115
import { useInjection } from '@Pimcore/app/depency-injection'
12-
import { Dropdown, type DropdownProps } from '@Pimcore/components/dropdown/dropdown'
16+
import { Dropdown } from '@Pimcore/components/dropdown/dropdown'
1317
import { useNumberedList } from '@Pimcore/components/form/controls/numbered-list/provider/numbered-list/use-numbered-list'
1418
import { type DynamicTypePipelineRegistry } from '@Pimcore/modules/element/dynamic-types/definitions/pipelines/dynamic-type-pipeline-registry'
15-
import React from 'react'
1619
import { usePipelineConfig } from '../../provider/pipeline-config/use-pipeline-config'
1720
import { type DynamicTypePipelineAbstract } from '@Pimcore/modules/element/dynamic-types/definitions/pipelines/dynamic-type-pipeline-abstract'
18-
import { useTranslation } from 'react-i18next'
19-
import { useTransformersMenuItems } from '@Pimcore/modules/data-object/listing/decorator/column-configuration/view-layer/components/grid/hooks/use-grid-options/tabs/grid-config/forms/advanced-column-form/hooks/use-transformers-menu-items'
20-
import { serviceIds } from '@Pimcore/app/config/services/service-ids'
2121

2222
export interface DynamicGroupDropdownProps {
2323
children: React.ReactNode
2424
dynamicTypeRegistryId: string
2525
}
2626

27+
interface IGroupedTree {
28+
dynamicTypes?: DynamicTypePipelineAbstract[]
29+
[groupKey: string]: any
30+
}
31+
2732
export const DynamicGroupDropdown = ({ children, dynamicTypeRegistryId }: DynamicGroupDropdownProps): React.JSX.Element => {
2833
const registry = useInjection<DynamicTypePipelineRegistry>(dynamicTypeRegistryId)
2934
const { operations } = useNumberedList()
@@ -34,28 +39,59 @@ export const DynamicGroupDropdown = ({ children, dynamicTypeRegistryId }: Dynami
3439
return dynamicType.isAvailableForSelection(config)
3540
})
3641

37-
const { transformersMenuItems } = useTransformersMenuItems(availableDynamicTypes)
42+
const groupedTree: IGroupedTree = {}
3843

39-
const isTransformersRegistry = dynamicTypeRegistryId === serviceIds['DynamicTypes/Grid/TransformersRegistry']
44+
availableDynamicTypes.forEach(dynamicType => {
45+
const groupedIds = !isNull(dynamicType.group)
46+
? Array.isArray(dynamicType.group) ? dynamicType.group : [dynamicType.group]
47+
: []
4048

41-
const items: DropdownProps['menu']['items'] = isTransformersRegistry
42-
? transformersMenuItems
43-
: availableDynamicTypes.map((dynamicType) => ({
44-
key: dynamicType.id,
45-
label: t(`grid.advanced-column.advancedColumns.${dynamicType.id}`),
46-
onClick: () => {
47-
operations.add({
48-
key: dynamicType.id
49-
})
49+
let currentLevel = groupedTree
50+
51+
groupedIds.forEach(groupKey => {
52+
if (isNil(currentLevel[groupKey])) {
53+
currentLevel[groupKey] = {}
5054
}
51-
}))
55+
56+
currentLevel = currentLevel[groupKey]
57+
})
58+
59+
if (isNil(currentLevel.dynamicTypes)) {
60+
currentLevel.dynamicTypes = []
61+
}
62+
63+
currentLevel.dynamicTypes.push(dynamicType)
64+
})
65+
66+
const buildMenuItemsFromTree = (group: IGroupedTree): NonNullable<MenuProps['items']> => {
67+
const items: NonNullable<MenuProps['items']> = []
68+
69+
if (!isNil(group.dynamicTypes)) {
70+
group.dynamicTypes.forEach(dynamicType => {
71+
items.push({
72+
key: dynamicType.id,
73+
label: t(`grid.advanced-column.advancedColumns.${dynamicType.id}`),
74+
onClick: () => { operations.add({ key: dynamicType.id }) }
75+
})
76+
})
77+
}
78+
79+
Object.entries(group).forEach(([groupKey, childNode]) => {
80+
if (groupKey === 'dynamicTypes') return
81+
items.push({
82+
key: `${groupKey}-group`,
83+
label: t(`grid.advanced-column.advancedColumns.group.${groupKey}`),
84+
children: buildMenuItemsFromTree(childNode as IGroupedTree)
85+
})
86+
})
87+
88+
return items
89+
}
90+
91+
const items = buildMenuItemsFromTree(groupedTree)
5292

5393
return (
54-
<Dropdown
55-
menu={ {
56-
items
57-
} }
58-
>
94+
<Dropdown menu={ { items } }>
5995
{children}
6096
</Dropdown>
6197
)

assets/js/src/core/modules/data-object/listing/decorator/column-configuration/view-layer/components/grid/hooks/use-grid-options/tabs/grid-config/forms/advanced-column-form/hooks/use-transformers-menu-items.tsx

Lines changed: 0 additions & 60 deletions
This file was deleted.

assets/js/src/core/modules/element/dynamic-types/definitions/pipelines/dynamic-type-pipeline-abstract.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { type ReactElement } from 'react'
1515
@injectable()
1616
export abstract class DynamicTypePipelineAbstract implements DynamicTypeAbstract {
1717
abstract readonly id: string
18+
readonly group: string | string[] | null = null
1819

1920
abstract getComponent (): ReactElement
2021

assets/js/src/core/modules/element/dynamic-types/definitions/pipelines/grid/transformers/types/anonymizer/anonymizer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { DynamicTypePipelineGridTransformersAnonymizerComponent } from '@Pimcore
1616
@injectable()
1717
export class DynamicTypePipelineGridTransformersAnonymizer extends DynamicTypePipelineAbstract {
1818
readonly id = 'anonymizer'
19-
readonly group = ['string']
19+
readonly group = ['string', 'new']
2020

2121
getComponent (): ReactElement {
2222
return (

assets/js/src/core/modules/element/dynamic-types/definitions/pipelines/grid/transformers/types/blur/blur.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { DynamicTypePipelineGridTransformersBlurComponent } from '@Pimcore/modul
1616
@injectable()
1717
export class DynamicTypePipelineGridTransformersBlur extends DynamicTypePipelineAbstract {
1818
readonly id = 'blur'
19-
readonly group = ['string']
19+
readonly group = 'string'
2020

2121
getComponent (): ReactElement {
2222
return (

assets/js/src/core/modules/element/dynamic-types/definitions/pipelines/grid/transformers/types/boolean-formatter/boolean-formatter.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { DynamicTypePipelineGridTransformersBooleanFormatterComponent } from '@P
1616
@injectable()
1717
export class DynamicTypePipelineGridTransformersBooleanFormatter extends DynamicTypePipelineAbstract {
1818
readonly id = 'booleanFormatter'
19-
readonly group = ['boolean']
19+
readonly group = 'boolean'
2020

2121
getComponent (): ReactElement {
2222
return (

assets/js/src/core/modules/element/dynamic-types/definitions/pipelines/grid/transformers/types/change-case/change-case.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { injectable } from 'inversify'
1616
@injectable()
1717
export class DynamicTypePipelineGridTransformersChangeCase extends DynamicTypePipelineAbstract {
1818
readonly id = 'caseChange'
19-
readonly group = ['string']
19+
readonly group = 'string'
2020

2121
getComponent (): ReactElement {
2222
return (

assets/js/src/core/modules/element/dynamic-types/definitions/pipelines/grid/transformers/types/combine/combine.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { DynamicTypePipelineGridTransformersCombineComponent } from '../../compo
1616
@injectable()
1717
export class DynamicTypePipelineGridTransformersCombine extends DynamicTypePipelineAbstract {
1818
readonly id = 'combine'
19-
readonly group = ['string']
19+
readonly group = 'string'
2020

2121
getComponent (): ReactElement {
2222
return (

assets/js/src/core/modules/element/dynamic-types/definitions/pipelines/grid/transformers/types/date-formatter/date-formatter.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { DynamicTypePipelineGridTransformersDateFormatterComponent } from '@Pimc
1616
@injectable()
1717
export class DynamicTypePipelineGridTransformersDateFormatter extends DynamicTypePipelineAbstract {
1818
readonly id = 'dateFormatter'
19-
readonly group = ['date']
19+
readonly group = 'date'
2020

2121
getComponent (): ReactElement {
2222
return (

assets/js/src/core/modules/element/dynamic-types/definitions/pipelines/grid/transformers/types/element-counter/element-counter.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { DynamicTypePipelineAbstract } from '../../../../dynamic-type-pipeline-a
1515
@injectable()
1616
export class DynamicTypePipelineGridTransformersElementCounter extends DynamicTypePipelineAbstract {
1717
readonly id = 'elementCounter'
18-
readonly group = ['other']
18+
readonly group = 'other'
1919

2020
getComponent (): ReactElement {
2121
return <></>

0 commit comments

Comments
 (0)