diff --git a/changelogs/unreleased/88363.json b/changelogs/unreleased/88363.json new file mode 100644 index 0000000000..6fd2eeccf4 --- /dev/null +++ b/changelogs/unreleased/88363.json @@ -0,0 +1,5 @@ +{ + "title": "Attached files: remove attached files feature from core package", + "type": "feat", + "packages": "core" +} diff --git a/docs/doc/en/Outil/Gestion_des_headers.md b/docs/doc/en/Outil/Gestion_des_headers.md index f2c7d87acb..7f19faef8f 100644 --- a/docs/doc/en/Outil/Gestion_des_headers.md +++ b/docs/doc/en/Outil/Gestion_des_headers.md @@ -42,26 +42,30 @@ export interface HeaderActions { export interface HeaderOptions { model?: string; modelId?: number; + options?: any; + disablePrint?: boolean; disableMailMessages?: boolean; disableJsonFields?: boolean; - attachedFileScreenTitle?: string; barcodeFieldname?: string; headerTitle?: string; actions?: ActionType[]; } ``` -By default, the core package provides two actions for the header: follow-up messages on each object and attached files. These can be configured via the following props: +By default, the core package provides a few actions for the header: follow-up messages on each object, barcode display, custom fields or even report printing. These can be configured via the following props: - _model_: full name of the ERP model. - _modelId_: object identifier. +- _options_: object containing options for the generic actions. +- _disablePrint_: condition for displaying or not report printing on the object. - _disableMailMessages_: condition for displaying or not displaying follow-up messages on the object. - _disableJsonFields_: condition for displaying studio fields. -- _attachedFileScreenTitle_: screen name for attached files. - _barcodeFieldname_: name of attribute containing barcode file on ERP (default `barCode`). - _headerTitle_: screen name for dynamic titles. -Attached files are displayed only if the current object has them, with an indicator of their number. Follow-up messages are only displayed when `model` and `modelId` are set and not disabled by the `disableMailMessages` attribute. +:::caution +Since version 8.3, the attached files feature is managed as a generic action from the DMS package. It will be added to every screen with a registered model and modelId. +::: Additional actions can then be added using the `actions` attribute. Each action then has the following structure: diff --git a/docs/doc/fr/Outil/Gestion_des_headers.md b/docs/doc/fr/Outil/Gestion_des_headers.md index c900444b03..9bc6c1302f 100644 --- a/docs/doc/fr/Outil/Gestion_des_headers.md +++ b/docs/doc/fr/Outil/Gestion_des_headers.md @@ -42,26 +42,30 @@ export interface HeaderActions { export interface HeaderOptions { model?: string; modelId?: number; + options?: any; + disablePrint?: boolean; disableMailMessages?: boolean; disableJsonFields?: boolean; - attachedFileScreenTitle?: string; barcodeFieldname?: string; headerTitle?: string; actions?: ActionType[]; } ``` -Le package core fournit par défaut deux actions pour le header qui sont les messages de suivi sur chaque objet ainsi que les fichiers joints. Elles sont paramétrables via les props suivantes : +Le package core fournit par défaut plusieurs actions pour le header: les messages de suivi sur chaque objet, l'affichage du code-barre, les champs studio or encore l'impression de rapport. Elles sont paramétrables via les props suivantes : - _model_ : nom complet du modèle sur l’ERP. - _modelId_ : identifiant de l’objet. +- _options_: objet contenant des options pour les actions génériques. +- _disablePrint_: ccondition pour l'affichage ou non de l'impression de rapport. - _disableMailMessages_ : condition pour l'affichage ou non des messages de suivi sur l'objet. - _disableJsonFields_ : condition pour l’affichage ou non des champs studio. -- _attachedFileScreenTitle_ : nom de l'écran pour les fichiers joints. - _barcodeFieldname_ : nom de l’attribut contenant le fichier code-barre sur l’ERP (par défaut `barCode`). - _headerTitle_ : nom de l'écran pour permettre les titres dynamiques. -Les fichiers joints s’affichent uniquement si l’objet actuel en possède avec un indicateur sur leur nombre. Les messages de suivi eux n’affichent lorsque `model` et `modelId` sont renseignés et qu’il ne sont pas désactivés par l’attribut `disableMailMessages`. +:::caution +Depuis la version 8.3, la fonctionnalité des fichiers joints est gérée comme une action générique du module DMS. Elle sera ajoutée à tous les écrans avec un model et un modelId enregistrés. +::: Il est ensuite possible d’ajouter des actions supplémentaires avec l’attribut `actions`. Chaque action possède alors la structure suivante : diff --git a/packages/core/README.md b/packages/core/README.md index b74a7f153f..18e03b71fa 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -19,7 +19,7 @@ It contains: - Auth module with login and user screens - Translations management system - Various helper tools : clipboard, file viewer, external app management -- Management of MailMessages and attaches files on objects +- Management of MailMessages - AOS linked components or using external libraries : Camera, Scanner, PlanningView, Stopwatch, ... - Menu management - Storage management @@ -306,13 +306,13 @@ const Colors = useThemeColor(); )} ``` -### Add MailMessages and attached files +### Add MailMessages -- Management of MailMessages and attaches files on objects +- Management of MailMessages on objects -This package provides a component to add MailMessages and file attachments functionality to the header. This component also allows to display its children if there are any as a dropdown menu. +This package provides a component to add MailMessages functionality to the header. This component also allows to display its children if there are any as a dropdown menu. -For the first two functionalities of this component, it is necessary to provide in props the name of the object model ("com.axelor.apps.stock.db.StockCorrection" for the stock corrections for example), the id of the current object, and the navigation attribute to go on the dedicated screens: +For the first functionality of this component, it is necessary to provide in props the name of the object model ("com.axelor.apps.stock.db.StockCorrection" for the stock corrections for example), the id of the current object, and the navigation attribute to go on the dedicated screens: ```typescript import {HeaderOptionsMenu} from '@axelor/aos-mobile-core'; @@ -326,8 +326,7 @@ React.useLayoutEffect(() => { + navigation={navigation}> ). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import {axiosApiProvider} from '../apiProviders'; -import {fetchFileDetails} from './metafile-api'; - -export async function fetchAttachedFiles({ - model, - modelId, -}: { - model: string; - modelId: number; -}) { - return axiosApiProvider - .get({url: `/ws/dms/attachments/${model}/${modelId}`}) - .then(response => { - if (response?.data?.data == null) { - return response; - } else { - return fetchFileDetails({ - listFiles: response?.data?.data, - isMetaFile: false, - }); - } - }); -} - -export async function countAttachments({ - model, - modelId, -}: { - model: string; - modelId: number; -}) { - return axiosApiProvider.post({ - url: '/ws/rest/com.axelor.dms.db.DMSFile/search', - data: { - data: { - _domain: - 'self.relatedModel = :name AND self.relatedId = :id ' + - 'AND COALESCE(self.isDirectory, FALSE) = FALSE', - _domainContext: { - name: model, - id: modelId, - }, - }, - fields: ['id'], - }, - }); -} diff --git a/packages/core/src/api/metafile-api.ts b/packages/core/src/api/metafile-api.ts index d63ebbfe3d..fe35bc032b 100644 --- a/packages/core/src/api/metafile-api.ts +++ b/packages/core/src/api/metafile-api.ts @@ -46,13 +46,9 @@ const createCriteria = (listFiles): Criteria[] => { return []; }; -export async function fetchFileDetails({listFiles, isMetaFile}) { - const model = isMetaFile - ? 'com.axelor.meta.db.MetaFile' - : 'com.axelor.dms.db.DMSFile'; - +export async function fetchFileDetails({listFiles}) { return createStandardSearch({ - model: model, + model: 'com.axelor.meta.db.MetaFile', criteria: createCriteria(listFiles), fieldKey: 'core_metaFile', numberElementsByPage: null, diff --git a/packages/core/src/components/organisms/HeaderOptionsMenu/HeaderOptionsMenu.js b/packages/core/src/components/organisms/HeaderOptionsMenu/HeaderOptionsMenu.js index adbdc4461c..3503621ba5 100644 --- a/packages/core/src/components/organisms/HeaderOptionsMenu/HeaderOptionsMenu.js +++ b/packages/core/src/components/organisms/HeaderOptionsMenu/HeaderOptionsMenu.js @@ -34,12 +34,10 @@ const HeaderOptionsMenu = ({ disableMailMessages, disableJsonFields, disablePrint, - attachedFileScreenTitle, barcodeFieldname, }) => { const { mailMessagesAction, - attachedFilesAction, barcodeAction, printAction, jsonFieldsAction, @@ -52,7 +50,6 @@ const HeaderOptionsMenu = ({ disablePrint, barcodeFieldname, disableJsonFields, - attachedFileScreenTitle, }); const collapseMenuItems = useMemo( @@ -88,7 +85,6 @@ const HeaderOptionsMenu = ({ const allActions = useMemo( () => [ - attachedFilesAction, mailMessagesAction, printAction, barcodeAction, @@ -100,7 +96,6 @@ const HeaderOptionsMenu = ({ .sort((a, b) => a.order - b.order), [ actions, - attachedFilesAction, barcodeAction, jsonFieldsAction, mailMessagesAction, diff --git a/packages/core/src/components/organisms/MailMessageCommentCard/MailMessageCommentCard.tsx b/packages/core/src/components/organisms/MailMessageCommentCard/MailMessageCommentCard.tsx index 8fa258cfb1..f42311b720 100644 --- a/packages/core/src/components/organisms/MailMessageCommentCard/MailMessageCommentCard.tsx +++ b/packages/core/src/components/organisms/MailMessageCommentCard/MailMessageCommentCard.tsx @@ -77,7 +77,7 @@ const MailMessageCommentCard = ({ ); const handleCommentAttachedFilesPress = useCallback(() => { - navigation.navigate('AttachedFilesScreen', { + navigation.navigate('MailMessageAttachedFilesScreen', { files: files, }); }, [navigation, files]); diff --git a/packages/core/src/components/templates/index.js b/packages/core/src/components/templates/index.js index d32b971a97..3b361212af 100644 --- a/packages/core/src/components/templates/index.js +++ b/packages/core/src/components/templates/index.js @@ -16,7 +16,6 @@ * along with this program. If not, see . */ -export {default as AttachedFilesView} from './AttachedFilesView/AttachedFilesView'; export {default as GlobalToolBox} from './GlobalToolBox/GlobalToolBox'; export {default as MailMessageView} from './MailMessageView/MailMessageView'; export {default as PeriodInput} from './PeriodInput/PeriodInput'; diff --git a/packages/core/src/features/attachedFilesSlice.js b/packages/core/src/features/attachedFilesSlice.js index 5c0d118ea7..f8652cb735 100644 --- a/packages/core/src/features/attachedFilesSlice.js +++ b/packages/core/src/features/attachedFilesSlice.js @@ -18,22 +18,8 @@ import {createAsyncThunk, createSlice} from '@reduxjs/toolkit'; import {handlerApiCall} from '../apiProviders/utils'; -import {countAttachments, fetchAttachedFiles} from '../api/attached-files-api'; import {fetchFileDetails} from '../api/metafile-api'; -export const getAttachedFiles = createAsyncThunk( - 'attachedFiles/getAttachedFiles', - async function (data, {getState}) { - return handlerApiCall({ - fetchFunction: fetchAttachedFiles, - data: data, - action: 'Base_SliceAction_FetchAttachedFiles', - getState: getState, - responseOptions: {isArrayResponse: true}, - }); - }, -); - export const getAttachedFilesDetails = createAsyncThunk( 'attachedFiles/getAttachedFilesDetails', async function (data, {getState}) { @@ -47,36 +33,15 @@ export const getAttachedFilesDetails = createAsyncThunk( }, ); -export const countAttachmentFiles = createAsyncThunk( - 'attachedFiles/countAttachmentFiles', - async function (data, {getState}) { - return handlerApiCall({ - fetchFunction: countAttachments, - data: data, - action: 'Base_SliceAction_CountAttachedFiles', - getState: getState, - responseOptions: {isArrayResponse: true, returnTotal: true}, - }); - }, -); - const initialState = { loading: false, attachedFilesList: [], - attachments: 0, }; const attachedFilesSlice = createSlice({ name: 'attachedFiles', initialState, extraReducers: builder => { - builder.addCase(getAttachedFiles.pending, state => { - state.loading = true; - }); - builder.addCase(getAttachedFiles.fulfilled, (state, action) => { - state.loading = false; - state.attachedFilesList = action.payload; - }); builder.addCase(getAttachedFilesDetails.pending, state => { state.loading = true; }); @@ -84,13 +49,6 @@ const attachedFilesSlice = createSlice({ state.loading = false; state.attachedFilesList = action.payload; }); - builder.addCase(countAttachmentFiles.pending, state => { - state.loading = true; - }); - builder.addCase(countAttachmentFiles.fulfilled, (state, action) => { - state.loading = false; - state.attachments = action.payload; - }); }, }); diff --git a/packages/core/src/header/hooks.js b/packages/core/src/header/hooks.js index ba82a58cf1..a7d2c784c0 100644 --- a/packages/core/src/header/hooks.js +++ b/packages/core/src/header/hooks.js @@ -19,7 +19,6 @@ import {useNavigation} from '@react-navigation/native'; import {useCallback, useEffect, useMemo, useRef, useState} from 'react'; import {useDispatch, useSelector} from 'react-redux'; -import {countAttachmentFiles} from '../features/attachedFilesSlice'; import {countUnreadMailMessages} from '../features/mailMessageSlice'; import {useTranslator} from '../i18n'; import {checkNullString} from '../utils'; @@ -36,7 +35,6 @@ export const useBasicActions = ({ disableMailMessages, disablePrint, disableJsonFields = false, - attachedFileScreenTitle, barcodeFieldname = 'barCode', }) => { const navigation = useNavigation(); @@ -46,10 +44,8 @@ export const useBasicActions = ({ const isFocused = useIsFocused(); const dispatch = useDispatch(); - const {attachments} = useSelector(state => state.attachedFiles); const {unreadMessages} = useSelector(state => state.mailMessages); - const [disableAttachementFiles, setDisableAttachementFiles] = useState(true); const [disableBarcode, setDisableBarcode] = useState(true); const [disableCustomView, setDisableCustomView] = useState(true); const [disablePrinting, setDisablePrinting] = useState(true); @@ -72,24 +68,10 @@ export const useBasicActions = ({ } }, [dispatch, model, modelConfigured, modelId]); - const countAttachmentsAPI = useCallback(() => { - if (modelConfigured) { - dispatch(countAttachmentFiles({model, modelId})); - } - }, [dispatch, model, modelConfigured, modelId]); - useEffect(() => { countUnreadMessagesAPI(); }, [countUnreadMessagesAPI]); - useEffect(() => { - countAttachmentsAPI(); - }, [countAttachmentsAPI]); - - useEffect(() => { - setDisableAttachementFiles(attachments === 0); - }, [attachments]); - useEffect(() => { fetchModel({model, modelId}) .catch(() => { @@ -149,32 +131,6 @@ export const useBasicActions = ({ }; }, [I18n, disableMailMessages, model, modelId, navigation, unreadMessages]); - const attachedFilesAction = useMemo(() => { - return { - key: 'attachedFiles', - order: 10, - title: I18n.t('Base_AttachedFiles'), - iconName: 'paperclip', - indicator: attachments, - hideIf: disableAttachementFiles, - onPress: () => - navigation.navigate('AttachedFilesScreen', { - model, - modelId, - screenTitle: attachedFileScreenTitle, - }), - showInHeader: true, - }; - }, [ - I18n, - attachedFileScreenTitle, - attachments, - disableAttachementFiles, - model, - modelId, - navigation, - ]); - const barcodeAction = useMemo(() => { return { key: 'barcode', @@ -243,14 +199,12 @@ export const useBasicActions = ({ ...(modelConfigured ? { mailMessagesAction, - attachedFilesAction, printAction, barcodeAction, jsonFieldsAction, } : { mailMessagesAction: {key: 'mailMessages', hideIf: true}, - attachedFilesAction: {key: 'attachedFiles', hideIf: true}, printAction: {key: 'printTemplate', hideIf: true}, barcodeAction: {key: 'barcode', hideIf: true}, jsonFieldsAction: {key: 'metaJsonFields', hideIf: true}, @@ -259,7 +213,6 @@ export const useBasicActions = ({ }, [ modelConfigured, mailMessagesAction, - attachedFilesAction, printAction, barcodeAction, jsonFieldsAction, diff --git a/packages/core/src/header/types.ts b/packages/core/src/header/types.ts index 2a1722cf35..ce0fa19e9f 100644 --- a/packages/core/src/header/types.ts +++ b/packages/core/src/header/types.ts @@ -30,7 +30,6 @@ export interface HeaderOptions { disablePrint?: boolean; disableMailMessages?: boolean; disableJsonFields?: boolean; - attachedFileScreenTitle?: string; barcodeFieldname?: string; headerTitle?: string; actions?: ActionType[]; diff --git a/packages/core/src/i18n/translations/en.json b/packages/core/src/i18n/translations/en.json index 26d2d7b15b..0077ca6366 100644 --- a/packages/core/src/i18n/translations/en.json +++ b/packages/core/src/i18n/translations/en.json @@ -208,10 +208,8 @@ "Base_Print": "Print", "Base_PrintTemplate": "Print template", "Base_NoRecordsFound": "No records found", - "Base_SliceAction_FetchAttachedFiles": "fetch attached files", "Base_SliceAction_FetchFilesDetails": "fetch file details", "Base_SliceAction_FetchMetaModule": "fetch meta modules", - "Base_SliceAction_CountAttachedFiles": "count attachment files", "Base_SliceAction_FetchMailMessages": "fetch mail messages", "Base_SliceAction_PostMailMessageComment": "post mail message comment", "Base_SliceAction_FetchModelSubscribers": "fetch model subscribers", diff --git a/packages/core/src/i18n/translations/fr.json b/packages/core/src/i18n/translations/fr.json index 3697c644ce..cd7eecf1bf 100644 --- a/packages/core/src/i18n/translations/fr.json +++ b/packages/core/src/i18n/translations/fr.json @@ -208,10 +208,8 @@ "Base_Print": "Imprimer", "Base_PrintTemplate": "Modèle d'impression", "Base_NoRecordsFound": "Aucun enregistrement trouvé", - "Base_SliceAction_FetchAttachedFiles": "récupération des fichiers joints", "Base_SliceAction_FetchFilesDetails": "récupération des détails du fichier", "Base_SliceAction_FetchMetaModule": "récupération des modules", - "Base_SliceAction_CountAttachedFiles": "comptage des fichiers joints", "Base_SliceAction_FetchMailMessages": "récupération des mail messages", "Base_SliceAction_PostMailMessageComment": "ajout d'un mail message", "Base_SliceAction_FetchModelSubscribers": "récupération des abonnés du modèle", diff --git a/packages/core/src/navigator/drawer/Header.js b/packages/core/src/navigator/drawer/Header.js index 29c620402d..2a59cbf3cf 100644 --- a/packages/core/src/navigator/drawer/Header.js +++ b/packages/core/src/navigator/drawer/Header.js @@ -110,7 +110,6 @@ const Header = ({mainScreen, title, actionID = null, shadedHeader = true}) => { actions={options.actions} genericActions={genericHeaders} options={options.options} - attachedFileScreenTitle={options.attachedFileScreenTitle} disableMailMessages={options.disableMailMessages} disablePrint={options.disablePrint} barcodeFieldname={options.barcodeFieldname} diff --git a/packages/core/src/screens/AttachedFilesScreen.tsx b/packages/core/src/screens/AttachedFilesScreen.tsx deleted file mode 100644 index bd91d45294..0000000000 --- a/packages/core/src/screens/AttachedFilesScreen.tsx +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Axelor Business Solutions - * - * Copyright (C) 2024 Axelor (). - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -import React from 'react'; -import {AttachedFilesView} from '../components'; - -const AttachedFilesScreen = ({route}) => { - const {files, model, modelId, screenTitle} = route.params; - const isStatic = files && files.length > 0; - - return ( - - ); -}; - -export default AttachedFilesScreen; diff --git a/packages/core/src/components/templates/AttachedFilesView/AttachedFilesView.js b/packages/core/src/screens/MailMessageAttachedFilesScreen.tsx similarity index 72% rename from packages/core/src/components/templates/AttachedFilesView/AttachedFilesView.js rename to packages/core/src/screens/MailMessageAttachedFilesScreen.tsx index 7e6fef619e..1605f07aa3 100644 --- a/packages/core/src/components/templates/AttachedFilesView/AttachedFilesView.js +++ b/packages/core/src/screens/MailMessageAttachedFilesScreen.tsx @@ -16,8 +16,7 @@ * along with this program. If not, see . */ -import React, {useCallback, useState, useMemo, useEffect} from 'react'; -import {useSelector, useDispatch} from 'react-redux'; +import React, {useCallback, useEffect, useMemo, useState} from 'react'; import { AttachmentCard, ChipSelect, @@ -27,24 +26,13 @@ import { ScrollList, useThemeColor, } from '@axelor/aos-mobile-ui'; -import useTranslator from '../../../i18n/hooks/use-translator'; -import { - getAttachedFiles, - getAttachedFilesDetails, -} from '../../../features/attachedFilesSlice'; -import {openFileInExternalApp} from '../../../tools/FileViewer'; -import {headerActionsProvider} from '../../../header'; +import {useTranslator} from '../i18n'; +import {useDispatch, useSelector} from '../redux/hooks'; +import {openFileInExternalApp} from '../tools'; +import {getAttachedFilesDetails} from '../features/attachedFilesSlice'; -function AttachedFilesView({ - files, - model, - modelId, - isStaticList = false, - isMetaFile = false, - screenTitle, - actionList = [], - verticalActions = true, -}) { +const MailMessageAttachedFilesScreen = ({route}) => { + const {files} = route.params; const Colors = useThemeColor(); const I18n = useTranslator(); const dispatch = useDispatch(); @@ -59,7 +47,7 @@ function AttachedFilesView({ const handleShowFile = async item => { await openFileInExternalApp( - {fileName: item.fileName, id: item.id, isMetaFile: isMetaFile}, + {fileName: item.fileName, id: item.id, isMetaFile: true}, {baseUrl: baseUrl, token: token, jsessionId: jsessionId}, I18n, ); @@ -67,17 +55,11 @@ function AttachedFilesView({ const fetchFilesAPI = useCallback(() => { dispatch( - isStaticList - ? getAttachedFilesDetails({ - listFiles: files, - isMetaFile: true, - }) - : getAttachedFiles({ - model, - modelId, - }), + (getAttachedFilesDetails as any)({ + listFiles: files, + }), ); - }, [dispatch, isStaticList, files, model, modelId]); + }, [dispatch, files]); const filterOnSelectExtension = useCallback( list => { @@ -101,14 +83,6 @@ function AttachedFilesView({ [filterOnSelectExtension, attachedFilesList], ); - useEffect(() => { - if (screenTitle) { - headerActionsProvider.registerModel('core_attachedFiles_details', { - headerTitle: screenTitle, - }); - } - }, [screenTitle]); - useEffect(() => { setExtensionList( Array.from( @@ -153,11 +127,9 @@ function AttachedFilesView({ moreLoading={false} isListEnd={true} translator={I18n.t} - actionList={actionList} - verticalActions={verticalActions} /> ); -} +}; -export default AttachedFilesView; +export default MailMessageAttachedFilesScreen; diff --git a/packages/core/src/screens/index.js b/packages/core/src/screens/index.js index 2348c744fa..c1227d2cdb 100644 --- a/packages/core/src/screens/index.js +++ b/packages/core/src/screens/index.js @@ -16,17 +16,16 @@ * along with this program. If not, see . */ -import AttachedFilesScreen from './AttachedFilesScreen'; import BarcodeDisplayScreen from './BarcodeDisplayScreen'; import JsonFieldScreen from './JsonFieldScreen'; +import MailMessageAttachedFilesScreen from './MailMessageAttachedFilesScreen'; import MailMessageScreen from './MailMessageScreen'; import ProcessListScreen from './ProcessListScreen'; export default { - AttachedFilesScreen: { + MailMessageAttachedFilesScreen: { title: 'Base_AttachedFiles', - component: AttachedFilesScreen, - actionID: 'core_attachedFiles_details', + component: MailMessageAttachedFilesScreen, options: { shadedHeader: false, },