
META-INF.resources.js.components.ObjectField.AttachmentFormBase.tsx Maven / Gradle / Ivy
The newest version!
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
import ClayForm from '@clayui/form';
import {SingleSelect, Toggle} from '@liferay/object-js-components-web';
import React from 'react';
import {normalizeFieldSettings} from '../../utils/fieldSettings';
import './ObjectFieldFormBase.scss';
interface IAttachmentFormBaseProps {
disabled?: boolean;
error?: string;
objectDefinitionName: string;
objectFieldSettings: ObjectFieldSetting[];
onSubmit?: (values?: Partial) => void;
setValues: (values: Partial) => void;
values: Partial;
}
const attachmentSources = [
{
description: Liferay.Language.get(
'files-can-be-stored-in-an-object-entry-or-in-a-specific-folder-in-documents-and-media'
),
label: Liferay.Language.get('upload-directly-from-users-computer'),
value: 'userComputer',
},
{
description: Liferay.Language.get(
'users-can-upload-or-select-existing-files-from-documents-and-media'
),
label: Liferay.Language.get(
'upload-or-select-from-documents-and-media-item-selector'
),
value: 'documentsAndMedia',
},
];
export function AttachmentFormBase({
disabled,
error,
objectDefinitionName,
objectFieldSettings,
onSubmit,
setValues,
values,
}: IAttachmentFormBaseProps) {
const settings = normalizeFieldSettings(objectFieldSettings);
const attachmentSource = attachmentSources.find(
({value}) => value === settings.fileSource
);
const handleAttachmentSourceChange = (value: string) => {
const fileSource: ObjectFieldSetting = {name: 'fileSource', value};
const updatedSettings = objectFieldSettings.filter(
(setting) =>
setting.name !== 'fileSource' &&
setting.name !== 'showFilesInDocumentsAndMedia' &&
setting.name !== 'storageDLFolderPath'
);
updatedSettings.push(fileSource);
if (value === 'userComputer') {
updatedSettings.push({
name: 'showFilesInDocumentsAndMedia',
value: false,
});
}
setValues({objectFieldSettings: updatedSettings});
if (onSubmit) {
onSubmit({
...values,
objectFieldSettings: updatedSettings,
});
}
};
const toggleShowFiles = (value: boolean) => {
const updatedSettings = objectFieldSettings.filter(
(setting) =>
setting.name !== 'showFilesInDocumentsAndMedia' &&
setting.name !== 'storageDLFolderPath'
);
updatedSettings.push({
name: 'showFilesInDocumentsAndMedia',
value,
});
if (value) {
updatedSettings.push({
name: 'storageDLFolderPath',
value: `/${objectDefinitionName}`,
});
}
setValues({objectFieldSettings: updatedSettings});
};
return (
<>
handleAttachmentSourceChange(value as string)
}
required
selectedKey={attachmentSource?.value}
/>
{settings.fileSource === 'userComputer' && (
{
event.stopPropagation();
if (onSubmit) {
onSubmit();
}
}}
onToggle={toggleShowFiles}
toggled={!!settings.showFilesInDocumentsAndMedia}
tooltip={Liferay.Language.get(
'when-activated-users-can-define-a-folder-within-documents-and-media-to-display-the-files-leave-it-unchecked-for-files-to-be-stored-individually-per-entry'
)}
tooltipAlign="top"
/>
)}
>
);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy