@pimcore/studio-ui-bundle 2026.1.0 → 2026.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build/types/src/core/app/api/pimcore/tags.d.ts +2 -0
- package/dist/build/types/src/core/app/i18n/iframe-i18n.d.ts +0 -3
- package/dist/build/types/src/core/components/element-tree/element-tree-slice.d.ts +10 -2
- package/dist/build/types/src/core/components/grid/grid-cell/grid-row.d.ts +2 -1
- package/dist/build/types/src/core/components/import-modal/components/selected-file-view/selected-file-view.d.ts +2 -1
- package/dist/build/types/src/core/components/import-modal/hooks/use-file-upload.d.ts +14 -2
- package/dist/build/types/src/core/components/import-modal/import-modal.d.ts +2 -22
- package/dist/build/types/src/core/components/import-modal/index.d.ts +2 -1
- package/dist/build/types/src/core/components/import-modal/types.d.ts +48 -0
- package/dist/build/types/src/core/components/many-to-many-relation/grid.d.ts +1 -0
- package/dist/build/types/src/core/components/many-to-many-relation/grid.styles.d.ts +15 -0
- package/dist/build/types/src/core/components/many-to-many-relation/many-to-many-relation.d.ts +1 -0
- package/dist/build/types/src/core/components/operational-grid/csv-import-button/csv-import-button.d.ts +11 -0
- package/dist/build/types/src/core/components/operational-grid/csv-import-modal/csv-import-modal.d.ts +19 -0
- package/dist/build/types/src/core/components/pql-query-input/pql-query-input.d.ts +2 -2
- package/dist/build/types/src/core/components/pql-query-input/pql-query-input.stories.d.ts +12 -0
- package/dist/build/types/src/core/components/pql-query-input/pql-query-input.styles.d.ts +1 -0
- package/dist/build/types/src/core/components/tabs/tab-context-menu.d.ts +16 -0
- package/dist/build/types/src/core/modules/app/error-handler/constants/errorTypes.d.ts +2 -1
- package/dist/build/types/src/core/modules/app/error-handler/types.d.ts +2 -0
- package/dist/build/types/src/core/modules/asset/asset-api-slice.gen.d.ts +3 -3
- package/dist/build/types/src/core/modules/class-definition/class-definition-slice.gen.d.ts +2 -2
- package/dist/build/types/src/core/modules/data-object/data-object-api-slice.gen.d.ts +3 -3
- package/dist/build/types/src/core/modules/document/editor/shared-tab-manager/tabs/edit/components/editables-dialog/types.d.ts +6 -1
- package/dist/build/types/src/core/modules/element/actions/index.d.ts +2 -1
- package/dist/build/types/src/core/modules/element/dynamic-types/definitions/document/editable/utils/select-options.d.ts +14 -1
- package/dist/build/types/src/core/modules/element/dynamic-types/definitions/objects/data-related/types/dynamic-type-object-data-image.d.ts +2 -1
- package/dist/build/types/src/core/modules/element/editor/shared-tab-manager/tabs/tags/components/assigned-tags/assigned-tags.d.ts +1 -1
- package/dist/build/types/src/core/modules/element/editor/shared-tab-manager/tabs/tags/hooks/use-optimistic-update.d.ts +4 -0
- package/dist/build/types/src/core/modules/element/export-api-slice.gen.d.ts +10 -6
- package/dist/build/types/src/core/modules/element/listing/decorators/general-filters/view-layer/components/sidebar/tabs/filters/filter-container.d.ts +1 -6
- package/dist/build/types/src/core/modules/execution-engine/jobs/batch-edit/abstract-batch-edit-job.d.ts +2 -0
- package/dist/build/types/src/core/modules/execution-engine/jobs/batch-edit/abstract-folder-batch-edit-job.d.ts +15 -0
- package/dist/build/types/src/core/modules/execution-engine/jobs/batch-edit/asset-folder-batch-edit-job.d.ts +3 -2
- package/dist/build/types/src/core/modules/execution-engine/jobs/batch-edit/data-object-folder-batch-edit-job.d.ts +3 -2
- package/dist/build/types/src/core/modules/execution-engine/jobs/download/download-job.d.ts +6 -0
- package/dist/build/types/src/core/modules/execution-engine/message-handlers/message-bus-job/message-bus-job-handler-types.d.ts +41 -0
- package/dist/build/types/src/core/modules/execution-engine/message-handlers/message-bus-job/message-bus-job-handler.d.ts +6 -38
- package/dist/build/types/src/core/modules/execution-engine/message-handlers/message-bus-job/message-bus-job-notification.d.ts +1 -0
- package/dist/build/types/src/core/modules/execution-engine/message-handlers/message-bus-job/progress-calculator/progress-calculator.interface.d.ts +46 -0
- package/dist/build/types/src/core/modules/execution-engine/message-handlers/message-bus-job/progress-calculator/progress-field-calculator.d.ts +30 -0
- package/dist/build/types/src/core/modules/execution-engine/message-handlers/message-bus-job/progress-calculator/step-completion-calculator.d.ts +29 -0
- package/dist/build/types/src/core/modules/execution-engine/message-handlers/message-bus-job/step-tracker/child-job-step-tracker.d.ts +40 -0
- package/dist/build/types/src/core/modules/execution-engine/message-handlers/message-bus-job/step-tracker/default-step-tracker.d.ts +43 -0
- package/dist/build/types/src/core/modules/execution-engine/message-handlers/message-bus-job/step-tracker/step-tracker.interface.d.ts +35 -0
- package/dist/build/types/src/core/modules/execution-engine/notification/job/job-view.d.ts +2 -0
- package/dist/build/types/src/core/modules/notifications/actions/share-via-notification/use-share-via-notification.d.ts +17 -0
- package/dist/build/types/src/core/modules/notifications/send-notification/send-notification-modal.d.ts +3 -1
- package/dist/build/types/src/core/modules/quantity-value/table/table.d.ts +4 -1
- package/dist/build/types/src/core/modules/select-option/components/tree/tree-container.d.ts +1 -1
- package/dist/build/types/src/core/modules/website-settings/table/table.d.ts +4 -1
- package/dist/build/types/src/core/modules/widget-editor/hooks/use-widget-editor.d.ts +1 -1
- package/dist/build/types/src/sdk/components/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -161,6 +161,7 @@ export declare const providingTags: {
|
|
|
161
161
|
id: number;
|
|
162
162
|
}[];
|
|
163
163
|
ELEMENT_VERSIONS: (elementType: ElementType, id: number) => Tag[];
|
|
164
|
+
NOTES_AND_EVENTS: () => string[];
|
|
164
165
|
NOTES_AND_EVENTS_DETAIL: (id: number) => {
|
|
165
166
|
type: string;
|
|
166
167
|
id: number;
|
|
@@ -337,6 +338,7 @@ export declare const invalidatingTags: {
|
|
|
337
338
|
id: number;
|
|
338
339
|
}[];
|
|
339
340
|
ELEMENT_VERSIONS: (elementType: ElementType, id: number) => Tag[];
|
|
341
|
+
NOTES_AND_EVENTS: () => string[];
|
|
340
342
|
NOTES_AND_EVENTS_DETAIL: (id: number) => {
|
|
341
343
|
type: string;
|
|
342
344
|
id: number;
|
|
@@ -101,7 +101,11 @@ export declare const setNodeLoading: import("@reduxjs/toolkit").ActionCreatorWit
|
|
|
101
101
|
treeId: string;
|
|
102
102
|
nodeId: string;
|
|
103
103
|
isFetching: boolean;
|
|
104
|
-
}, "trees/setNodeFetching">,
|
|
104
|
+
}, "trees/setNodeFetching">, setNodeFetchingInAllTrees: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
105
|
+
nodeId: string;
|
|
106
|
+
elementType: string;
|
|
107
|
+
isFetching: boolean;
|
|
108
|
+
}, "trees/setNodeFetchingInAllTrees">, markNodeDeletingForTree: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
105
109
|
treeId: string;
|
|
106
110
|
nodeId: string;
|
|
107
111
|
isDeleting: boolean;
|
|
@@ -122,7 +126,11 @@ export declare const setNodeLoading: import("@reduxjs/toolkit").ActionCreatorWit
|
|
|
122
126
|
nodeId: string;
|
|
123
127
|
elementType: string;
|
|
124
128
|
newLabel: string;
|
|
125
|
-
}, "trees/renameNode">,
|
|
129
|
+
}, "trees/renameNode">, updateNodeData: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
130
|
+
nodeId: string;
|
|
131
|
+
elementType: string;
|
|
132
|
+
data: Partial<TreeNode>;
|
|
133
|
+
}, "trees/updateNodeData">, updateNodeType: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
126
134
|
nodeId: string;
|
|
127
135
|
elementType: string;
|
|
128
136
|
newType: string;
|
|
@@ -23,6 +23,7 @@ export interface GridRowProps {
|
|
|
23
23
|
onFocusCell?: (cell: GridCellReference) => void;
|
|
24
24
|
contextMenu?: ListGridContextMenuComponents;
|
|
25
25
|
onRowDoubleClick?: GridProps['onRowDoubleClick'];
|
|
26
|
+
enableRowVirtualizer: boolean;
|
|
26
27
|
enableColumnVirtualizer: boolean;
|
|
27
28
|
size?: GridProps['size'];
|
|
28
29
|
rowStyle?: CSSProperties;
|
|
@@ -32,5 +33,5 @@ export interface GridRowProps {
|
|
|
32
33
|
virtualPaddingLeft?: number;
|
|
33
34
|
virtualPaddingRight?: number;
|
|
34
35
|
}
|
|
35
|
-
declare const CachedGridRow: React.MemoExoticComponent<({ row, isSelected, modifiedCells, rowStyle, virtualColumns, virtualPaddingLeft, virtualPaddingRight, enableColumnVirtualizer, ...props }: GridRowProps) => React.JSX.Element>;
|
|
36
|
+
declare const CachedGridRow: React.MemoExoticComponent<({ row, isSelected, modifiedCells, rowStyle, virtualColumns, virtualPaddingLeft, virtualPaddingRight, enableColumnVirtualizer, enableRowVirtualizer, ...props }: GridRowProps) => React.JSX.Element>;
|
|
36
37
|
export { CachedGridRow as GridRow };
|
|
@@ -8,11 +8,12 @@
|
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
|
+
import { type FileUploadStatus } from '../../hooks/use-file-upload';
|
|
11
12
|
interface SelectedFileViewProps {
|
|
12
13
|
file: File;
|
|
13
14
|
loading: boolean;
|
|
14
15
|
isUploading: boolean;
|
|
15
|
-
uploadStatus:
|
|
16
|
+
uploadStatus: FileUploadStatus;
|
|
16
17
|
uploadProgress: number;
|
|
17
18
|
onRemove: () => void;
|
|
18
19
|
}
|
|
@@ -11,16 +11,28 @@ interface UseFileUploadProps {
|
|
|
11
11
|
action: string;
|
|
12
12
|
headers?: Record<string, string>;
|
|
13
13
|
data?: Record<string, any>;
|
|
14
|
+
fileKey?: string;
|
|
15
|
+
filesKey?: string;
|
|
14
16
|
onUploadSuccess?: (response: any, file: File) => void;
|
|
15
17
|
onUploadError?: (error: Error, file: File) => void;
|
|
16
18
|
}
|
|
19
|
+
export type FileUploadStatus = 'normal' | 'active' | 'success' | 'exception';
|
|
20
|
+
export interface FileUploadState {
|
|
21
|
+
progress: number;
|
|
22
|
+
status: FileUploadStatus;
|
|
23
|
+
}
|
|
17
24
|
interface UseFileUploadReturn {
|
|
18
25
|
uploadProgress: number;
|
|
19
|
-
uploadStatus:
|
|
26
|
+
uploadStatus: FileUploadStatus;
|
|
20
27
|
loading: boolean;
|
|
21
28
|
isUploading: boolean;
|
|
22
29
|
upload: (file: File) => Promise<void>;
|
|
30
|
+
uploadMultiple: (entries: Array<{
|
|
31
|
+
id: string;
|
|
32
|
+
file: File;
|
|
33
|
+
}>) => Promise<void>;
|
|
34
|
+
fileUploadStates: Record<string, FileUploadState>;
|
|
23
35
|
resetUploadState: () => void;
|
|
24
36
|
}
|
|
25
|
-
export declare const useFileUpload: ({ action, headers, data, onUploadSuccess, onUploadError }: UseFileUploadProps) => UseFileUploadReturn;
|
|
37
|
+
export declare const useFileUpload: ({ action, headers, data, fileKey, filesKey, onUploadSuccess, onUploadError }: UseFileUploadProps) => UseFileUploadReturn;
|
|
26
38
|
export {};
|
|
@@ -8,25 +8,5 @@
|
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
open?: boolean;
|
|
14
|
-
onOpenChange?: (open: boolean) => void;
|
|
15
|
-
title?: string;
|
|
16
|
-
uploadButtonLabel?: string;
|
|
17
|
-
browseButtonLabel?: string;
|
|
18
|
-
dragDropLabel?: string;
|
|
19
|
-
accept?: string;
|
|
20
|
-
acceptMimeTypes?: string[];
|
|
21
|
-
validateFile?: (file: File) => boolean;
|
|
22
|
-
onValidationError?: (file: File) => void;
|
|
23
|
-
maxFileSize?: number;
|
|
24
|
-
headers?: Record<string, string>;
|
|
25
|
-
data?: Record<string, any>;
|
|
26
|
-
onUploadSuccess?: (response: any, file: File) => void;
|
|
27
|
-
onUploadError?: (error: Error, file: File) => void;
|
|
28
|
-
showSuccessMessage?: boolean;
|
|
29
|
-
successMessage?: React.ReactNode;
|
|
30
|
-
children?: React.ReactNode;
|
|
31
|
-
}
|
|
32
|
-
export declare const ImportModal: ({ action, open: controlledOpen, onOpenChange, title, uploadButtonLabel, browseButtonLabel, dragDropLabel, accept, acceptMimeTypes, validateFile, onValidationError, maxFileSize, headers, data, onUploadSuccess, onUploadError, showSuccessMessage, successMessage, children }: ImportModalProps) => React.JSX.Element;
|
|
11
|
+
import { type ImportModalProps } from './types';
|
|
12
|
+
export declare const ImportModal: ({ action, open: controlledOpen, onOpenChange, title, uploadButtonLabel, browseButtonLabel, dragDropLabel, accept, acceptMimeTypes, validateFile, onValidationError, maxFileSize, headers, data, fileKey, filesKey, onUploadSuccess, onUploadError, showSuccessMessage, successMessage, multiple, children }: ImportModalProps) => React.JSX.Element;
|
|
@@ -7,4 +7,5 @@
|
|
|
7
7
|
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
|
-
export { ImportModal
|
|
10
|
+
export { ImportModal } from './import-modal';
|
|
11
|
+
export { type ImportModalProps } from './types';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import type React from 'react';
|
|
11
|
+
export interface FileEntry {
|
|
12
|
+
id: string;
|
|
13
|
+
file: File;
|
|
14
|
+
}
|
|
15
|
+
export interface ImportModalProps {
|
|
16
|
+
action: string;
|
|
17
|
+
open?: boolean;
|
|
18
|
+
onOpenChange?: (open: boolean) => void;
|
|
19
|
+
title?: string;
|
|
20
|
+
uploadButtonLabel?: string;
|
|
21
|
+
browseButtonLabel?: string;
|
|
22
|
+
dragDropLabel?: string;
|
|
23
|
+
accept?: string;
|
|
24
|
+
acceptMimeTypes?: string[];
|
|
25
|
+
validateFile?: (file: File) => boolean;
|
|
26
|
+
onValidationError?: (file: File) => void;
|
|
27
|
+
maxFileSize?: number;
|
|
28
|
+
headers?: Record<string, string>;
|
|
29
|
+
data?: Record<string, any>;
|
|
30
|
+
/**
|
|
31
|
+
* fileKey is used when uploading a single file.
|
|
32
|
+
* The payload will be: `{ [fileKey]: File }`.
|
|
33
|
+
* Defaults to 'file'.
|
|
34
|
+
*/
|
|
35
|
+
fileKey?: string;
|
|
36
|
+
/**
|
|
37
|
+
* filesKey is used when uploading multiple files.
|
|
38
|
+
* The payload will be: `{ [filesKey]: File, [filesKey]: File, ... }`.
|
|
39
|
+
* Defaults to 'files[]'.
|
|
40
|
+
*/
|
|
41
|
+
filesKey?: string;
|
|
42
|
+
onUploadSuccess?: (response: any, file: File) => void;
|
|
43
|
+
onUploadError?: (error: Error, file: File) => void;
|
|
44
|
+
showSuccessMessage?: boolean;
|
|
45
|
+
successMessage?: React.ReactNode;
|
|
46
|
+
multiple?: boolean;
|
|
47
|
+
children?: React.ReactNode;
|
|
48
|
+
}
|
|
@@ -30,5 +30,6 @@ export interface ManyToManyRelationGridProps {
|
|
|
30
30
|
name: string | undefined;
|
|
31
31
|
class: string | undefined;
|
|
32
32
|
};
|
|
33
|
+
enableRowVirtualizer: boolean;
|
|
33
34
|
}
|
|
34
35
|
export declare const ManyToManyRelationGrid: React.ForwardRefExoticComponent<ManyToManyRelationGridProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
export interface UseStylesProps {
|
|
11
|
+
height: string | null;
|
|
12
|
+
}
|
|
13
|
+
export declare const useStyles: (props?: UseStylesProps | undefined) => import("antd-style").ReturnStyles<{
|
|
14
|
+
grid: import("antd-style").SerializedStyles;
|
|
15
|
+
}>;
|
package/dist/build/types/src/core/components/many-to-many-relation/many-to-many-relation.d.ts
CHANGED
|
@@ -37,5 +37,6 @@ export interface ManyToManyRelationProps extends IRelationAllowedTypesDataCompon
|
|
|
37
37
|
className?: string;
|
|
38
38
|
disableInlineUpload?: boolean;
|
|
39
39
|
enableRowDrag?: boolean;
|
|
40
|
+
noteditable?: boolean | null;
|
|
40
41
|
}
|
|
41
42
|
export declare const ManyToManyRelation: ({ enableRowDrag, ...props }: ManyToManyRelationProps) => React.JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
export declare const CsvImportButton: () => React.JSX.Element;
|
package/dist/build/types/src/core/components/operational-grid/csv-import-modal/csv-import-modal.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
import { type ColumnDef } from '@tanstack/react-table';
|
|
12
|
+
export interface CsvImportModalProps {
|
|
13
|
+
open: boolean;
|
|
14
|
+
columns: Array<ColumnDef<any>>;
|
|
15
|
+
value: any[];
|
|
16
|
+
onConfirm: (newRows: any[]) => void;
|
|
17
|
+
onCancel: () => void;
|
|
18
|
+
}
|
|
19
|
+
export declare const CsvImportModal: (props: CsvImportModalProps) => React.JSX.Element;
|
|
@@ -11,8 +11,8 @@ import React from 'react';
|
|
|
11
11
|
import type { FetchBaseQueryError } from '@reduxjs/toolkit/query';
|
|
12
12
|
interface IPQLQueryInputProps {
|
|
13
13
|
value: string;
|
|
14
|
-
handleChange: (
|
|
15
|
-
handleBlur
|
|
14
|
+
handleChange: (value: string) => void;
|
|
15
|
+
handleBlur?: () => void;
|
|
16
16
|
errorData?: FetchBaseQueryError;
|
|
17
17
|
isShowError: boolean;
|
|
18
18
|
}
|
|
@@ -12,17 +12,29 @@ declare const config: Meta;
|
|
|
12
12
|
export declare const _default: {
|
|
13
13
|
args: {
|
|
14
14
|
value: string;
|
|
15
|
+
isShowError: boolean;
|
|
15
16
|
};
|
|
16
17
|
};
|
|
17
18
|
export declare const WithValue: {
|
|
18
19
|
args: {
|
|
19
20
|
value: string;
|
|
21
|
+
isShowError: boolean;
|
|
20
22
|
};
|
|
21
23
|
};
|
|
22
24
|
export declare const WithErrorMessage: {
|
|
23
25
|
args: {
|
|
24
26
|
value: string;
|
|
25
27
|
isShowError: boolean;
|
|
28
|
+
errorData: {
|
|
29
|
+
status: number;
|
|
30
|
+
data: {
|
|
31
|
+
errorKey: string;
|
|
32
|
+
message: string;
|
|
33
|
+
position: number;
|
|
34
|
+
token: string;
|
|
35
|
+
query: string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
26
38
|
};
|
|
27
39
|
};
|
|
28
40
|
export default config;
|
|
@@ -12,4 +12,5 @@ export declare const useStyles: (props?: unknown) => import("antd-style").Return
|
|
|
12
12
|
infoIcon: import("antd-style").SerializedStyles;
|
|
13
13
|
text: import("antd-style").SerializedStyles;
|
|
14
14
|
link: import("antd-style").SerializedStyles;
|
|
15
|
+
editorError: import("antd-style").SerializedStyles;
|
|
15
16
|
}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
export interface TabContextMenuProps {
|
|
12
|
+
tabKey: string;
|
|
13
|
+
allKeys: string[];
|
|
14
|
+
onClose: (key: string) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare const TabContextMenu: ({ tabKey, allKeys, onClose }: TabContextMenuProps) => React.JSX.Element;
|
|
@@ -19,5 +19,6 @@ export declare enum ErrorKeyTypes {
|
|
|
19
19
|
WIDGET_NAME_MISSING = "error_widget_name_missing",
|
|
20
20
|
WIDGET_NAME_INVALID = "error_widget_name_invalid",
|
|
21
21
|
VALIDATION_FAILED = "error_validation_failed",
|
|
22
|
-
ELEMENT_VALIDATION_FAILED = "error_element_validation_failed"
|
|
22
|
+
ELEMENT_VALIDATION_FAILED = "error_element_validation_failed",
|
|
23
|
+
GDI_PARSING_EXCEPTION = "error_gdi_parsing_exception"
|
|
23
24
|
}
|
|
@@ -453,15 +453,15 @@ export type AssetPatchFolderByIdApiResponse =
|
|
|
453
453
|
jobRunId: number;
|
|
454
454
|
};
|
|
455
455
|
export type AssetPatchFolderByIdApiArg = {
|
|
456
|
+
/** Id of the folder */
|
|
457
|
+
id: number;
|
|
456
458
|
body: {
|
|
457
459
|
data: {
|
|
458
|
-
/** Folder ID */
|
|
459
|
-
folderId: number;
|
|
460
460
|
parentId?: number | null;
|
|
461
461
|
key?: string | null;
|
|
462
462
|
locked?: string | null;
|
|
463
463
|
metadata?: PatchCustomMetadata[] | null;
|
|
464
|
-
}
|
|
464
|
+
};
|
|
465
465
|
filters?: ExportAllFilter;
|
|
466
466
|
};
|
|
467
467
|
};
|
|
@@ -685,7 +685,7 @@ export type CustomLayouts = {
|
|
|
685
685
|
/** Modification date timestamp */
|
|
686
686
|
modificationDate: number;
|
|
687
687
|
/** User id of owner */
|
|
688
|
-
userOwner: number;
|
|
688
|
+
userOwner: number | null;
|
|
689
689
|
/** Class id */
|
|
690
690
|
classId: string;
|
|
691
691
|
/** Whether it is the default layout */
|
|
@@ -751,7 +751,7 @@ export type ClassDefinition = {
|
|
|
751
751
|
/** Modification date timestamp */
|
|
752
752
|
modificationDate: number | null;
|
|
753
753
|
/** User id of owner */
|
|
754
|
-
userOwner: number;
|
|
754
|
+
userOwner: number | null;
|
|
755
755
|
/** Namespace of parent class */
|
|
756
756
|
parentClass: string;
|
|
757
757
|
/** Interface implementations */
|
|
@@ -246,10 +246,10 @@ export type DataObjectPatchFolderByIdApiResponse =
|
|
|
246
246
|
jobRunId: number;
|
|
247
247
|
};
|
|
248
248
|
export type DataObjectPatchFolderByIdApiArg = {
|
|
249
|
+
/** Id of the folder */
|
|
250
|
+
id: number;
|
|
249
251
|
body: {
|
|
250
252
|
data: {
|
|
251
|
-
/** Folder ID */
|
|
252
|
-
folderId: number;
|
|
253
253
|
parentId?: number | null;
|
|
254
254
|
index?: number | null;
|
|
255
255
|
key?: string | null;
|
|
@@ -258,7 +258,7 @@ export type DataObjectPatchFolderByIdApiArg = {
|
|
|
258
258
|
childrenSortOrder?: string | null;
|
|
259
259
|
published?: boolean | null;
|
|
260
260
|
editableData?: object | null;
|
|
261
|
-
}
|
|
261
|
+
};
|
|
262
262
|
filters?: ExportAllFilter;
|
|
263
263
|
classId: string;
|
|
264
264
|
};
|
|
@@ -11,9 +11,14 @@ export interface DialogConfig {
|
|
|
11
11
|
id: string;
|
|
12
12
|
width?: number;
|
|
13
13
|
height?: number;
|
|
14
|
-
items:
|
|
14
|
+
items: DialogConfigItems;
|
|
15
15
|
reloadOnClose?: boolean;
|
|
16
16
|
}
|
|
17
|
+
export type DialogConfigItems = DialogConfigItem | SerializedDialogConfigItems;
|
|
18
|
+
export interface SerializedDialogConfigItems {
|
|
19
|
+
items?: unknown;
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
}
|
|
17
22
|
export interface DialogConfigItem {
|
|
18
23
|
type: string;
|
|
19
24
|
title?: string;
|
|
@@ -49,5 +49,6 @@ export declare enum ContextMenuActionName {
|
|
|
49
49
|
download = "download",
|
|
50
50
|
clearImageThumbnails = "clearImageThumbnails",
|
|
51
51
|
clearVideoThumbnails = "clearVideoThumbnails",
|
|
52
|
-
clearPdfThumbnails = "clearPdfThumbnails"
|
|
52
|
+
clearPdfThumbnails = "clearPdfThumbnails",
|
|
53
|
+
shareViaNotification = "shareViaNotification"
|
|
53
54
|
}
|
|
@@ -7,9 +7,22 @@
|
|
|
7
7
|
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
|
+
import React from 'react';
|
|
10
11
|
import { type SelectOptionType } from '../../../../../../../../sdk/modules/element';
|
|
11
12
|
export type DocumentEditableStoreEntry = [string | number | null, string] | string | number;
|
|
12
13
|
/**
|
|
13
|
-
* Transforms document editable store entries into SelectOptionType array
|
|
14
|
+
* Transforms document editable store entries into SelectOptionType array.
|
|
15
|
+
*
|
|
16
|
+
* The `label` is returned as a plain string so that antd's built-in search
|
|
17
|
+
* (driven by `optionFilterProp="label"`) can match against it. HTML sanitization
|
|
18
|
+
* happens at render time via `renderSanitizedLabel`, used by the consuming
|
|
19
|
+
* components in their `optionRender` / `labelRender` props.
|
|
14
20
|
*/
|
|
15
21
|
export declare const transformDocumentEditableStoreToOptions: (store?: DocumentEditableStoreEntry[]) => SelectOptionType[];
|
|
22
|
+
/**
|
|
23
|
+
* Renders a label with HTML sanitization. Intended for use in antd's
|
|
24
|
+
* `labelRender` / `optionRender` props, so that sanitization happens at the
|
|
25
|
+
* moment the label becomes DOM — while `label` itself stays a plain string
|
|
26
|
+
* so antd's built-in filter keeps working.
|
|
27
|
+
*/
|
|
28
|
+
export declare const renderSanitizedLabel: (label: React.ReactNode) => React.JSX.Element;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
|
-
import { type AbstractObjectDataDefinition, DynamicTypeObjectDataAbstract, type EditMode, type GetGridCellDefinitionProps } from '../../../../../../../modules/element/dynamic-types/definitions/objects/data-related/dynamic-type-object-data-abstract';
|
|
11
|
+
import { type AbstractObjectDataDefinition, DynamicTypeObjectDataAbstract, type EditMode, type EditModalSettings, type GetGridCellDefinitionProps } from '../../../../../../../modules/element/dynamic-types/definitions/objects/data-related/dynamic-type-object-data-abstract';
|
|
12
12
|
import { type ImageProps } from '../../../../../../../modules/element/dynamic-types/definitions/objects/data-related/components/image/image';
|
|
13
13
|
import type { InheritanceOverlayType } from '../../../../../../../components/inheritance-overlay/inheritance-overlay';
|
|
14
14
|
export type ImageObjectDataDefinition = AbstractObjectDataDefinition & ImageProps;
|
|
@@ -16,6 +16,7 @@ export declare class DynamicTypeObjectDataImage extends DynamicTypeObjectDataAbs
|
|
|
16
16
|
id: string;
|
|
17
17
|
inheritedMaskOverlay: InheritanceOverlayType;
|
|
18
18
|
gridCellEditMode: EditMode;
|
|
19
|
+
gridCellEditModalSettings: EditModalSettings;
|
|
19
20
|
getObjectDataComponent(props: ImageObjectDataDefinition): React.ReactElement<AbstractObjectDataDefinition>;
|
|
20
21
|
getGridCellPreviewComponent(props: GetGridCellDefinitionProps): React.ReactElement;
|
|
21
22
|
getDefaultGridColumnWidth(): number | undefined;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
|
-
import { type Tag } from '../../../../../../../../modules/element/editor/shared-tab-manager/tabs/tags/tags-api-slice
|
|
11
|
+
import { type Tag } from '../../../../../../../../modules/element/editor/shared-tab-manager/tabs/tags/tags-api-slice-enhanced';
|
|
12
12
|
export declare const AssignedTagsTable: ({ tags, isLoading }: {
|
|
13
13
|
tags: Tag[];
|
|
14
14
|
isLoading: boolean;
|
|
@@ -14,8 +14,12 @@ interface UpdateTagsForElementByTypeAndIdProps extends TagGetCollectionForElemen
|
|
|
14
14
|
flatTags: Tag[];
|
|
15
15
|
checkedTags: Key[];
|
|
16
16
|
}
|
|
17
|
+
interface RemoveTagFromElementProps extends TagGetCollectionForElementByTypeAndIdApiArg {
|
|
18
|
+
tagId: number;
|
|
19
|
+
}
|
|
17
20
|
interface UseOptimisticUpdateReturn {
|
|
18
21
|
updateTagsForElementByTypeAndId: (props: UpdateTagsForElementByTypeAndIdProps) => PatchCollection;
|
|
22
|
+
removeTagFromElement: (props: RemoveTagFromElementProps) => PatchCollection;
|
|
19
23
|
}
|
|
20
24
|
export declare const useOptimisticUpdate: () => UseOptimisticUpdateReturn;
|
|
21
25
|
export {};
|
|
@@ -29,10 +29,11 @@ export type ExportCsvApiArg = {
|
|
|
29
29
|
elements?: number[];
|
|
30
30
|
columns?: GridColumnRequest[];
|
|
31
31
|
config?: {
|
|
32
|
-
header?: "id" | "custom_report_config" | "custom_report_to_export" | "element_class_id" | "
|
|
32
|
+
header?: "id" | "custom_report_config" | "custom_report_to_export" | "element_class_id" | "elements_to_export" | "element_type" | "export_format" | "folder_to_export" | "grid_export_data" | "grid_export_data_info" | "config" | "columns" | "filters" | "delimiter" | "header" | "no_header" | "title" | "name" | "\r\n" | "array" | "int" | "string" | "bool";
|
|
33
33
|
delimiter?: string;
|
|
34
34
|
};
|
|
35
35
|
elementType?: "data-object" | "object" | "asset" | "document";
|
|
36
|
+
classId?: string | null;
|
|
36
37
|
};
|
|
37
38
|
};
|
|
38
39
|
export type ExportCsvFolderApiResponse = {
|
|
@@ -40,12 +41,13 @@ export type ExportCsvFolderApiResponse = {
|
|
|
40
41
|
jobRunId: number;
|
|
41
42
|
};
|
|
42
43
|
export type ExportCsvFolderApiArg = {
|
|
44
|
+
/** Id of the folder */
|
|
45
|
+
id: number;
|
|
43
46
|
body: {
|
|
44
|
-
folders?: number[];
|
|
45
47
|
columns?: GridColumnRequest[];
|
|
46
48
|
filters?: ExportAllFilter;
|
|
47
49
|
config?: {
|
|
48
|
-
header?: "id" | "custom_report_config" | "custom_report_to_export" | "element_class_id" | "
|
|
50
|
+
header?: "id" | "custom_report_config" | "custom_report_to_export" | "element_class_id" | "elements_to_export" | "element_type" | "export_format" | "folder_to_export" | "grid_export_data" | "grid_export_data_info" | "config" | "columns" | "filters" | "delimiter" | "header" | "no_header" | "title" | "name" | "\r\n" | "array" | "int" | "string" | "bool";
|
|
49
51
|
delimiter?: string;
|
|
50
52
|
};
|
|
51
53
|
elementType?: "data-object" | "object" | "asset" | "document";
|
|
@@ -71,9 +73,10 @@ export type ExportXlsxApiArg = {
|
|
|
71
73
|
elements?: number[];
|
|
72
74
|
columns?: GridColumnRequest[];
|
|
73
75
|
config?: {
|
|
74
|
-
header?: "id" | "custom_report_config" | "custom_report_to_export" | "element_class_id" | "
|
|
76
|
+
header?: "id" | "custom_report_config" | "custom_report_to_export" | "element_class_id" | "elements_to_export" | "element_type" | "export_format" | "folder_to_export" | "grid_export_data" | "grid_export_data_info" | "config" | "columns" | "filters" | "delimiter" | "header" | "no_header" | "title" | "name" | "\r\n" | "array" | "int" | "string" | "bool";
|
|
75
77
|
};
|
|
76
78
|
elementType?: "data-object" | "object" | "asset" | "document";
|
|
79
|
+
classId?: string | null;
|
|
77
80
|
};
|
|
78
81
|
};
|
|
79
82
|
export type ExportXlsxFolderApiResponse =
|
|
@@ -82,12 +85,13 @@ export type ExportXlsxFolderApiResponse =
|
|
|
82
85
|
jobRunId: number;
|
|
83
86
|
};
|
|
84
87
|
export type ExportXlsxFolderApiArg = {
|
|
88
|
+
/** Id of the folder */
|
|
89
|
+
id: number;
|
|
85
90
|
body: {
|
|
86
|
-
folders?: number[];
|
|
87
91
|
columns?: GridColumnRequest[];
|
|
88
92
|
filters?: ExportAllFilter;
|
|
89
93
|
config?: {
|
|
90
|
-
header?: "id" | "custom_report_config" | "custom_report_to_export" | "element_class_id" | "
|
|
94
|
+
header?: "id" | "custom_report_config" | "custom_report_to_export" | "element_class_id" | "elements_to_export" | "element_type" | "export_format" | "folder_to_export" | "grid_export_data" | "grid_export_data_info" | "config" | "columns" | "filters" | "delimiter" | "header" | "no_header" | "title" | "name" | "\r\n" | "array" | "int" | "string" | "bool";
|
|
91
95
|
};
|
|
92
96
|
elementType?: "data-object" | "object" | "asset" | "document";
|
|
93
97
|
classId?: string | null;
|
|
@@ -8,9 +8,4 @@
|
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
|
-
|
|
12
|
-
interface IFilterContainerProps {
|
|
13
|
-
errorData?: FetchBaseQueryError;
|
|
14
|
-
}
|
|
15
|
-
export declare const FilterContainer: ({ errorData }: IFilterContainerProps) => React.JSX.Element;
|
|
16
|
-
export {};
|
|
11
|
+
export declare const FilterContainer: () => React.JSX.Element;
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
10
|
import { type JobInterface, type JobRunOptions } from '../job-interface';
|
|
11
|
+
import { MessageBusJobHandler, type MessageBusJobHandlerOptions } from '../../message-handlers/message-bus-job/message-bus-job-handler';
|
|
11
12
|
export interface AbstractBatchEditJobOptions {
|
|
12
13
|
title: string;
|
|
13
14
|
assetContextId: number;
|
|
@@ -21,6 +22,7 @@ export declare abstract class AbstractBatchEditJob implements JobInterface {
|
|
|
21
22
|
protected readonly refreshGrid: () => Promise<void>;
|
|
22
23
|
constructor(options: AbstractBatchEditJobOptions);
|
|
23
24
|
run(options: JobRunOptions): Promise<void>;
|
|
25
|
+
protected createHandler(options: MessageBusJobHandlerOptions): MessageBusJobHandler;
|
|
24
26
|
protected abstract executeEditRequest(): Promise<number | null>;
|
|
25
27
|
protected handleCompletion(): Promise<void>;
|
|
26
28
|
protected handleJobFailure(error: any): Promise<void>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import { AbstractBatchEditJob, type AbstractBatchEditJobOptions } from './abstract-batch-edit-job';
|
|
11
|
+
import { MessageBusJobHandler, type MessageBusJobHandlerOptions } from '../../message-handlers/message-bus-job/message-bus-job-handler';
|
|
12
|
+
export type AbstractFolderBatchEditJobOptions = AbstractBatchEditJobOptions;
|
|
13
|
+
export declare abstract class AbstractFolderBatchEditJob extends AbstractBatchEditJob {
|
|
14
|
+
protected createHandler(options: MessageBusJobHandlerOptions): MessageBusJobHandler;
|
|
15
|
+
}
|
|
@@ -7,14 +7,15 @@
|
|
|
7
7
|
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
10
|
+
import { AbstractFolderBatchEditJob } from './abstract-folder-batch-edit-job';
|
|
11
|
+
import { type AbstractBatchEditJobOptions } from './abstract-batch-edit-job';
|
|
11
12
|
export interface AssetFolderBatchEditJobOptions extends AbstractBatchEditJobOptions {
|
|
12
13
|
patchAssetsInFolder: (args: any) => Promise<any>;
|
|
13
14
|
folderId: number;
|
|
14
15
|
patches: any[];
|
|
15
16
|
filters: any;
|
|
16
17
|
}
|
|
17
|
-
export declare class AssetFolderBatchEditJob extends
|
|
18
|
+
export declare class AssetFolderBatchEditJob extends AbstractFolderBatchEditJob {
|
|
18
19
|
private readonly patchAssetsInFolder;
|
|
19
20
|
private readonly folderId;
|
|
20
21
|
private readonly patches;
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
10
|
+
import { AbstractFolderBatchEditJob } from './abstract-folder-batch-edit-job';
|
|
11
|
+
import { type AbstractBatchEditJobOptions } from './abstract-batch-edit-job';
|
|
11
12
|
export interface DataObjectFolderBatchEditJobOptions extends AbstractBatchEditJobOptions {
|
|
12
13
|
patchObjectsInFolder: (args: any) => Promise<any>;
|
|
13
14
|
folderId: number;
|
|
@@ -15,7 +16,7 @@ export interface DataObjectFolderBatchEditJobOptions extends AbstractBatchEditJo
|
|
|
15
16
|
filters: any;
|
|
16
17
|
classId: string;
|
|
17
18
|
}
|
|
18
|
-
export declare class DataObjectFolderBatchEditJob extends
|
|
19
|
+
export declare class DataObjectFolderBatchEditJob extends AbstractFolderBatchEditJob {
|
|
19
20
|
private readonly patchObjectsInFolder;
|
|
20
21
|
private readonly folderId;
|
|
21
22
|
private readonly values;
|
|
@@ -12,6 +12,12 @@ export interface DownloadJobOptions {
|
|
|
12
12
|
title: string;
|
|
13
13
|
action: () => Promise<number>;
|
|
14
14
|
downloadUrl: string;
|
|
15
|
+
/**
|
|
16
|
+
* Set to true for folder exports that spawn a child job (collect → create file).
|
|
17
|
+
* Shows "Step 1/2" / "Step 2/2" in the UI.
|
|
18
|
+
* Leave unset for selected-row exports (single job run, no child).
|
|
19
|
+
*/
|
|
20
|
+
hasChildJob?: boolean;
|
|
15
21
|
}
|
|
16
22
|
export declare class DownloadJob implements JobInterface {
|
|
17
23
|
private readonly options;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import { type JobStatus, type AbstractJob } from '../../../../modules/execution-engine/jobs/abstact-job';
|
|
11
|
+
import { type JobButtonCustomizationContext } from './message-bus-job-notification';
|
|
12
|
+
import { type ProgressCalculator } from './progress-calculator/progress-calculator.interface';
|
|
13
|
+
import { type StepTracker } from './step-tracker/step-tracker.interface';
|
|
14
|
+
export interface MessageBusJob extends AbstractJob {
|
|
15
|
+
progress?: number;
|
|
16
|
+
indeterminate?: boolean;
|
|
17
|
+
currentStep?: number;
|
|
18
|
+
totalSteps?: number;
|
|
19
|
+
stepDescriptionKey?: string;
|
|
20
|
+
onRetry?: () => void | Promise<void>;
|
|
21
|
+
onCustomizeButtons?: (context: JobButtonCustomizationContext) => void;
|
|
22
|
+
messages?: string[];
|
|
23
|
+
jobRunId: number;
|
|
24
|
+
}
|
|
25
|
+
export interface JobCompletionData {
|
|
26
|
+
isSuccessful: boolean;
|
|
27
|
+
isFinished: boolean;
|
|
28
|
+
isFailed: boolean;
|
|
29
|
+
status: JobStatus;
|
|
30
|
+
payload: any;
|
|
31
|
+
}
|
|
32
|
+
export interface MessageBusJobHandlerOptions {
|
|
33
|
+
jobRunId: number;
|
|
34
|
+
title: string | ((job: MessageBusJob) => string);
|
|
35
|
+
stepDescriptions?: Record<number, string>;
|
|
36
|
+
stepTracker?: StepTracker;
|
|
37
|
+
progressCalculator?: ProgressCalculator;
|
|
38
|
+
onJobCompletion?: (data: JobCompletionData) => void | Promise<void>;
|
|
39
|
+
onRetry?: () => void | Promise<void>;
|
|
40
|
+
onCustomizeButtons?: (context: JobButtonCustomizationContext) => void;
|
|
41
|
+
}
|
|
@@ -9,23 +9,20 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { AbstractMessageHandler } from '../../../../modules/global-message-bus/message-handlers/abstract-message-handler';
|
|
11
11
|
import { type AbstractMercureMessage } from '../../../../modules/background-processor/process/abstract-mercure-process';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Default job handler that provides common functionality for job management, Redux integration, status mapping, and progress handling
|
|
16
|
-
* Can be used directly or extended by specific job handlers
|
|
17
|
-
*/
|
|
12
|
+
import { type MessageBusJobHandlerOptions } from './message-bus-job-handler-types';
|
|
13
|
+
export type { MessageBusJob, JobCompletionData, MessageBusJobHandlerOptions } from './message-bus-job-handler-types';
|
|
18
14
|
export declare class MessageBusJobHandler extends AbstractMessageHandler {
|
|
19
15
|
private jobRunId;
|
|
20
16
|
private job;
|
|
21
17
|
private readonly onJobCompletion?;
|
|
22
18
|
private readonly onRetry?;
|
|
23
19
|
private readonly onCustomizeButtons?;
|
|
24
|
-
private
|
|
25
|
-
private readonly
|
|
20
|
+
private readonly stepTracker;
|
|
21
|
+
private readonly stepDescriptions?;
|
|
22
|
+
private readonly progressCalculator;
|
|
26
23
|
private lastProgressValue;
|
|
27
24
|
private readonly title;
|
|
28
|
-
private
|
|
25
|
+
private polling;
|
|
29
26
|
private readonly throttledProgressUpdate;
|
|
30
27
|
constructor(options: MessageBusJobHandlerOptions);
|
|
31
28
|
shouldHandle(message: AbstractMercureMessage): boolean;
|
|
@@ -34,11 +31,6 @@ export declare class MessageBusJobHandler extends AbstractMessageHandler {
|
|
|
34
31
|
handleMessage(message: AbstractMercureMessage): Promise<void>;
|
|
35
32
|
onUnregister(): void;
|
|
36
33
|
private getTitle;
|
|
37
|
-
/**
|
|
38
|
-
* Calculate progress percent from message data
|
|
39
|
-
* Handles both step-based progress (if totalSteps > 1) and direct progress values (0-100)
|
|
40
|
-
*/
|
|
41
|
-
private calculateProgress;
|
|
42
34
|
private handleJobCompletion;
|
|
43
35
|
private getJob;
|
|
44
36
|
private createJob;
|
|
@@ -50,27 +42,3 @@ export declare class MessageBusJobHandler extends AbstractMessageHandler {
|
|
|
50
42
|
private handlePolledStatusUpdate;
|
|
51
43
|
private processUpdate;
|
|
52
44
|
}
|
|
53
|
-
export interface MessageBusJob extends AbstractJob {
|
|
54
|
-
progress?: number;
|
|
55
|
-
currentStep?: number;
|
|
56
|
-
totalSteps?: number;
|
|
57
|
-
onRetry?: () => void | Promise<void>;
|
|
58
|
-
onCustomizeButtons?: (context: JobButtonCustomizationContext) => void;
|
|
59
|
-
messages?: string[];
|
|
60
|
-
jobRunId: number;
|
|
61
|
-
}
|
|
62
|
-
export interface JobCompletionData {
|
|
63
|
-
isSuccessful: boolean;
|
|
64
|
-
isFinished: boolean;
|
|
65
|
-
isFailed: boolean;
|
|
66
|
-
status: JobStatus;
|
|
67
|
-
payload: any;
|
|
68
|
-
}
|
|
69
|
-
export interface MessageBusJobHandlerOptions {
|
|
70
|
-
jobRunId: number;
|
|
71
|
-
title: string | ((job: MessageBusJob) => string);
|
|
72
|
-
totalSteps?: number;
|
|
73
|
-
onJobCompletion?: (data: JobCompletionData) => void | Promise<void>;
|
|
74
|
-
onRetry?: () => void | Promise<void>;
|
|
75
|
-
onCustomizeButtons?: (context: JobButtonCustomizationContext) => void;
|
|
76
|
-
}
|
|
@@ -11,6 +11,7 @@ import React from 'react';
|
|
|
11
11
|
import { type ButtonAction } from '../../../../modules/execution-engine/notification/job/job-view';
|
|
12
12
|
import { type MessageBusJob } from './message-bus-job-handler';
|
|
13
13
|
export interface JobButtonCustomizationContext {
|
|
14
|
+
jobRunId: number;
|
|
14
15
|
addSuccessButton: (action: ButtonAction, position?: 'start' | 'end') => void;
|
|
15
16
|
addFinishedWithErrorsButton: (action: ButtonAction, position?: 'start' | 'end') => void;
|
|
16
17
|
addFailureButton: (action: ButtonAction, position?: 'start' | 'end') => void;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Sentinel value returned by a ProgressCalculator to signal that the progress
|
|
12
|
+
* bar should not be updated at all (e.g. no relevant data in the message).
|
|
13
|
+
*
|
|
14
|
+
* Distinct from `null` which signals an indeterminate (spinner) state.
|
|
15
|
+
*/
|
|
16
|
+
export declare const PROGRESS_NO_UPDATE: unique symbol;
|
|
17
|
+
/**
|
|
18
|
+
* The result of a progress calculation:
|
|
19
|
+
*
|
|
20
|
+
* - `number` – determinate progress value (0–100)
|
|
21
|
+
* - `null` – indeterminate state (show spinner)
|
|
22
|
+
* - `PROGRESS_NO_UPDATE` – skip update entirely, leave bar as-is
|
|
23
|
+
*/
|
|
24
|
+
export type ProgressResult = number | null | typeof PROGRESS_NO_UPDATE;
|
|
25
|
+
export interface ProgressCalculatorContext {
|
|
26
|
+
/** Current step as tracked by the step tracker */
|
|
27
|
+
currentStep: number;
|
|
28
|
+
/** Total steps if known */
|
|
29
|
+
totalSteps?: number;
|
|
30
|
+
/** Last progress value successfully applied (-1 if none yet) */
|
|
31
|
+
lastProgressValue: number;
|
|
32
|
+
}
|
|
33
|
+
export interface ProgressCalculator {
|
|
34
|
+
/**
|
|
35
|
+
* Calculate the progress result from a raw SSE message payload.
|
|
36
|
+
*
|
|
37
|
+
* @param data Raw message payload from the backend
|
|
38
|
+
* @param context Current handler state
|
|
39
|
+
*/
|
|
40
|
+
calculateProgress: (data: any, context: ProgressCalculatorContext) => ProgressResult;
|
|
41
|
+
/**
|
|
42
|
+
* Called when the step advances (same-job step change or child job transition).
|
|
43
|
+
* Calculators that maintain internal state should reset it here.
|
|
44
|
+
*/
|
|
45
|
+
onStepChange?: () => void;
|
|
46
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import { type ProgressCalculator, type ProgressCalculatorContext, type ProgressResult } from './progress-calculator.interface';
|
|
11
|
+
/**
|
|
12
|
+
* Reads the backend `progress` field (0–100) directly.
|
|
13
|
+
*
|
|
14
|
+
* Distinguishes between gradual steps and instant steps:
|
|
15
|
+
* - Gradual step: backend sends progress 0 → 100 over multiple messages → smooth bar
|
|
16
|
+
* - Instant step: backend sends only progress 100 in one message → spinner (null)
|
|
17
|
+
*
|
|
18
|
+
* When the step tracker has a known totalSteps and the backend reports finer-grained
|
|
19
|
+
* sub-steps within a child job (different totalSteps value), the two are combined:
|
|
20
|
+
* combined = ((subStep - 1) / subTotal) * 100 + progress / subTotal
|
|
21
|
+
*
|
|
22
|
+
* Internal gradual-progress state resets on every step change via onStepChange().
|
|
23
|
+
*
|
|
24
|
+
* Used for: batch-edit folder, zip-upload, CSV/XLSX export (all variants).
|
|
25
|
+
*/
|
|
26
|
+
export declare class ProgressFieldCalculator implements ProgressCalculator {
|
|
27
|
+
private hadGradualProgress;
|
|
28
|
+
calculateProgress(data: any, context: ProgressCalculatorContext): ProgressResult;
|
|
29
|
+
onStepChange(): void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import { type ProgressCalculator, type ProgressCalculatorContext, type ProgressResult } from './progress-calculator.interface';
|
|
11
|
+
/**
|
|
12
|
+
* Calculates progress from completed steps: step N done = N / totalSteps * 100%.
|
|
13
|
+
*
|
|
14
|
+
* Each step is considered complete when the backend sends progress: 100.
|
|
15
|
+
* While a step is still running (progress < 100), the bar holds at the
|
|
16
|
+
* previous step boundary.
|
|
17
|
+
*
|
|
18
|
+
* step 1/7 completes → 14%
|
|
19
|
+
* step 2/7 completes → 29%
|
|
20
|
+
* step 7/7 completes → 100%
|
|
21
|
+
*
|
|
22
|
+
* Falls back to the raw progress field for single-step jobs (totalSteps === 1
|
|
23
|
+
* or totalSteps unknown).
|
|
24
|
+
*
|
|
25
|
+
* Used for: delete, batch-delete — one step per element, instant completion.
|
|
26
|
+
*/
|
|
27
|
+
export declare class StepCompletionCalculator implements ProgressCalculator {
|
|
28
|
+
calculateProgress(data: any, context: ProgressCalculatorContext): ProgressResult;
|
|
29
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import { type StepTracker, type StepTrackerState } from './step-tracker.interface';
|
|
11
|
+
export interface ChildJobStepTrackerOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Total number of steps if known upfront (e.g. 2 for jobs that always
|
|
14
|
+
* spawn exactly one child job). When omitted the total is unknown and
|
|
15
|
+
* the UI will show "Step 1", "Step 2" etc. without a fraction.
|
|
16
|
+
*/
|
|
17
|
+
totalSteps?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Step tracker for jobs that spawn child job runs via transitionToChildJob.
|
|
21
|
+
*
|
|
22
|
+
* Each child job transition advances the step counter by one. Backend step
|
|
23
|
+
* messages from the child job (which reset to step 1) are intentionally
|
|
24
|
+
* ignored — this tracker owns the step counter exclusively.
|
|
25
|
+
*
|
|
26
|
+
* Always shows the step label in the UI.
|
|
27
|
+
*
|
|
28
|
+
* Used for:
|
|
29
|
+
* - zip-upload: parent extracts (step 1) → child creates assets (step 2)
|
|
30
|
+
* - CSV/XLSX folder export: parent collects (step 1) → child creates file (step 2)
|
|
31
|
+
* - clone: may or may not spawn a child (totalSteps omitted when unknown)
|
|
32
|
+
*/
|
|
33
|
+
export declare class ChildJobStepTracker implements StepTracker {
|
|
34
|
+
readonly showStepLabel = true;
|
|
35
|
+
private _state;
|
|
36
|
+
constructor(options?: ChildJobStepTrackerOptions);
|
|
37
|
+
get state(): StepTrackerState;
|
|
38
|
+
onBackendStep(_backendStep: number): StepTrackerState | null;
|
|
39
|
+
onChildJobTransition(): StepTrackerState;
|
|
40
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import { type StepTracker, type StepTrackerState } from './step-tracker.interface';
|
|
11
|
+
export interface DefaultStepTrackerOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Whether to show the step label (Step X/Y) in the UI.
|
|
14
|
+
* Default: false.
|
|
15
|
+
*
|
|
16
|
+
* Set to true for jobs where the backend step structure is meaningful
|
|
17
|
+
* to the user (e.g. batch-edit: preparing → applying).
|
|
18
|
+
* Leave false for jobs where backend steps are an internal implementation
|
|
19
|
+
* detail (e.g. delete: one step per element).
|
|
20
|
+
*/
|
|
21
|
+
showStepLabel?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default step tracker. Follows the backend's currentStep value, accepting
|
|
25
|
+
* only forward movement (ignores any step that would go backwards).
|
|
26
|
+
*
|
|
27
|
+
* totalSteps is derived from the first backend message that carries it —
|
|
28
|
+
* no hardcoding required in the job definition.
|
|
29
|
+
*
|
|
30
|
+
* Used for:
|
|
31
|
+
* - Jobs with no child job transitions (single job run)
|
|
32
|
+
* - delete/batch-delete: showStepLabel=false (internal steps, no UI label)
|
|
33
|
+
* - batch-edit folder: showStepLabel=true (preparing → applying, shown in UI)
|
|
34
|
+
*/
|
|
35
|
+
export declare class DefaultStepTracker implements StepTracker {
|
|
36
|
+
readonly showStepLabel: boolean;
|
|
37
|
+
private _state;
|
|
38
|
+
constructor(options?: DefaultStepTrackerOptions);
|
|
39
|
+
get state(): StepTrackerState;
|
|
40
|
+
onBackendStep(backendStep: number): StepTrackerState | null;
|
|
41
|
+
onChildJobTransition(): StepTrackerState;
|
|
42
|
+
onBackendTotalSteps(totalSteps: number): void;
|
|
43
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
export interface StepTrackerState {
|
|
11
|
+
/** Current step (1-based) */
|
|
12
|
+
currentStep: number;
|
|
13
|
+
/** Total steps, if known */
|
|
14
|
+
totalSteps?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface StepTracker {
|
|
17
|
+
/**
|
|
18
|
+
* Called on every incoming backend message that carries a currentStep value.
|
|
19
|
+
* Returns the new StepTrackerState if it changed, or null if nothing changed.
|
|
20
|
+
*/
|
|
21
|
+
onBackendStep: (backendStep: number) => StepTrackerState | null;
|
|
22
|
+
/**
|
|
23
|
+
* Called when the handler transitions to a child job run.
|
|
24
|
+
* Returns the new StepTrackerState.
|
|
25
|
+
*/
|
|
26
|
+
onChildJobTransition: () => StepTrackerState;
|
|
27
|
+
/**
|
|
28
|
+
* Whether to show the step label (Step X/Y) in the UI.
|
|
29
|
+
*/
|
|
30
|
+
readonly showStepLabel: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Current tracked state.
|
|
33
|
+
*/
|
|
34
|
+
readonly state: StepTrackerState;
|
|
35
|
+
}
|
|
@@ -19,7 +19,9 @@ export interface JobViewProps extends JobProps {
|
|
|
19
19
|
finishedWithErrorsButtonActions?: ButtonAction[];
|
|
20
20
|
onAbort?: () => void | Promise<void>;
|
|
21
21
|
progress: number;
|
|
22
|
+
indeterminate?: boolean;
|
|
22
23
|
currentStep?: number;
|
|
23
24
|
totalSteps?: number;
|
|
25
|
+
stepDescriptionKey?: string;
|
|
24
26
|
}
|
|
25
27
|
export declare const JobView: (props: JobViewProps) => React.JSX.Element;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This source file is available under the terms of the
|
|
3
|
+
* Pimcore Open Core License (POCL)
|
|
4
|
+
* Full copyright and license information is available in
|
|
5
|
+
* LICENSE.md which is distributed with this source code.
|
|
6
|
+
*
|
|
7
|
+
* @copyright Copyright (c) Pimcore GmbH (https://www.pimcore.com)
|
|
8
|
+
* @license Pimcore Open Core License (POCL)
|
|
9
|
+
*/
|
|
10
|
+
import { type ItemType } from '../../../../components/dropdown/dropdown';
|
|
11
|
+
import { type ManyToOneRelationValue } from '../../../../components/many-to-one-relation/many-to-one-relation';
|
|
12
|
+
import React from 'react';
|
|
13
|
+
export interface UseShareViaNotificationReturn {
|
|
14
|
+
shareViaNotificationContextMenuItem: ItemType;
|
|
15
|
+
shareViaNotificationModal: React.JSX.Element;
|
|
16
|
+
}
|
|
17
|
+
export declare const useShareViaNotification: (attachment: ManyToOneRelationValue | undefined) => UseShareViaNotificationReturn;
|
|
@@ -8,9 +8,11 @@
|
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
|
+
import { type ManyToOneRelationValue } from '../../../components/many-to-one-relation/many-to-one-relation';
|
|
11
12
|
interface SendNotificationModalProps {
|
|
12
13
|
open: boolean;
|
|
13
14
|
onClose: () => void;
|
|
15
|
+
initialAttachment?: ManyToOneRelationValue;
|
|
14
16
|
}
|
|
15
|
-
export declare const SendNotificationModal: ({ open, ...props }: SendNotificationModalProps) => React.JSX.Element;
|
|
17
|
+
export declare const SendNotificationModal: ({ open, initialAttachment, ...props }: SendNotificationModalProps) => React.JSX.Element;
|
|
16
18
|
export {};
|
|
@@ -8,10 +8,13 @@
|
|
|
8
8
|
* @license Pimcore Open Core License (POCL)
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
|
+
import { type SortingState } from '@tanstack/react-table';
|
|
11
12
|
import { type QuantityValueUnitRow } from '../hooks/use-quantity-value-unit';
|
|
12
13
|
interface TableProps {
|
|
13
14
|
quantityValueUnitRows: QuantityValueUnitRow[];
|
|
14
15
|
setQuantityValueUnitRows: React.Dispatch<React.SetStateAction<QuantityValueUnitRow[]>>;
|
|
16
|
+
sorting?: SortingState;
|
|
17
|
+
onSortingChange?: (sorting: SortingState) => void;
|
|
15
18
|
}
|
|
16
|
-
export declare const Table: ({ quantityValueUnitRows, setQuantityValueUnitRows }: TableProps) => React.JSX.Element;
|
|
19
|
+
export declare const Table: ({ quantityValueUnitRows, setQuantityValueUnitRows, sorting, onSortingChange }: TableProps) => React.JSX.Element;
|
|
17
20
|
export {};
|
|
@@ -13,7 +13,7 @@ interface ITreeContainerProps {
|
|
|
13
13
|
treeData: TreeDataItem[];
|
|
14
14
|
expandedKeys: React.Key[];
|
|
15
15
|
isFetching: boolean;
|
|
16
|
-
onReloadTree: () =>
|
|
16
|
+
onReloadTree: () => void;
|
|
17
17
|
onSetExpandedKeys: (keys: React.Key[]) => void;
|
|
18
18
|
}
|
|
19
19
|
declare const TreeContainer: ({ expandedKeys, treeData, isFetching, onReloadTree, onSetExpandedKeys }: ITreeContainerProps) => React.JSX.Element;
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
11
|
import { type SelectOption, type WebsiteSettingRow } from '../website-settings-container';
|
|
12
|
+
import { type SortingState } from '@tanstack/react-table';
|
|
12
13
|
type WebsiteSettingEnrichedRow = WebsiteSettingRow & {
|
|
13
14
|
siteDomain: string;
|
|
14
15
|
};
|
|
@@ -19,6 +20,8 @@ interface TableProps {
|
|
|
19
20
|
websiteSettingRows: WebsiteSettingRow[];
|
|
20
21
|
setWebsiteSettingRows: React.Dispatch<React.SetStateAction<WebsiteSettingRow[]>>;
|
|
21
22
|
typeSelectOptions: SelectOption[];
|
|
23
|
+
sorting?: SortingState;
|
|
24
|
+
onSortingChange?: (sorting: SortingState) => void;
|
|
22
25
|
}
|
|
23
|
-
export declare const Table: ({ websiteSettingRows, setWebsiteSettingRows, typeSelectOptions }: TableProps) => React.JSX.Element;
|
|
26
|
+
export declare const Table: ({ websiteSettingRows, setWebsiteSettingRows, typeSelectOptions, sorting, onSortingChange }: TableProps) => React.JSX.Element;
|
|
24
27
|
export {};
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { type WidgetConfig } from '../../../modules/perspectives/perspectives-slice.enhanced';
|
|
11
11
|
interface UseWidgetEditorReturn {
|
|
12
|
-
createWidget: (name: string, widgetType: string, onFinish?: (
|
|
12
|
+
createWidget: (name: string, widgetType: string, onFinish?: (id: string) => void) => Promise<void>;
|
|
13
13
|
getWidgetById: (widgetId: string, widgetType: string) => Promise<WidgetConfig | undefined>;
|
|
14
14
|
updateWidget: (widgetId: string, widgetType: string, config: any, onFinish?: (updated: any) => void) => Promise<void>;
|
|
15
15
|
removeWithConfirmation: (widgetId: string, widgetType: string, onFinish?: () => void) => void;
|
|
@@ -190,6 +190,7 @@ export * from '../../core/components/vertical-timeline/vertical-timeline';
|
|
|
190
190
|
export * from '../../core/components/predefined-layouts/config/config-layout';
|
|
191
191
|
export * from '../../core/components/tabpanel/tabpanel';
|
|
192
192
|
export * from '../../core/components/operational-grid/operational-grid';
|
|
193
|
+
export * from '../../core/components/operational-grid/csv-import-button/csv-import-button';
|
|
193
194
|
export * from '../../core/components/operational-grid/hooks/use-operations';
|
|
194
195
|
export * from '../../core/components/url-link/url-link';
|
|
195
196
|
export * from '../../core/components/pimcore-audio/pimcore-audio';
|