All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.js.admin.MoveKBObject.js 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 {openSelectionModal, openToast} from 'frontend-js-components-web';
import {addParams, fetch, objectToFormData, sub} from 'frontend-js-web';

import showSuccessMessage from './utils/showSuccessMessage';

const ITEM_TYPES = {
	KBArticle: 'KBArticle',
	KBFolder: 'KBFolder',
};

class MoveKBObject {
	openModal({
		kbObjectClassNameId,
		kbObjectId,
		kbObjectTitle,
		kbObjectType,
		moveKBObjectActionURL,
		moveKBObjectModalURL,
		portletNamespace,
	}) {
		openSelectionModal({
			buttonAddLabel: Liferay.Language.get('save'),
			height: '50vh',
			iframeBodyCssClass: '',
			multiple: true,
			onSelect: ({destinationItem, index}) => {
				if (
					kbObjectType === ITEM_TYPES.KBFolder &&
					destinationItem.type === ITEM_TYPES.KBArticle
				) {
					openToast({
						message: Liferay.Language.get(
							'folders-cannot-be-moved-into-articles'
						),
						type: 'danger',
					});

					return false;
				}

				fetch(moveKBObjectActionURL, {
					body: objectToFormData({
						[`${portletNamespace}dragAndDrop`]: true,
						[`${portletNamespace}position`]: index?.next ?? -1,
						[`${portletNamespace}resourceClassNameId`]:
							kbObjectClassNameId,
						[`${portletNamespace}resourcePrimKey`]: kbObjectId,
						[`${portletNamespace}parentResourceClassNameId`]:
							destinationItem.classNameId,
						[`${portletNamespace}parentResourcePrimKey`]:
							destinationItem.id,
					}),
					method: 'POST',
				})
					.then((response) => {
						if (!response.ok) {
							throw new Error();
						}

						return response.json();
					})
					.then((response) => {
						if (response.lockException) {
							Liferay.componentReady(
								`${portletNamespace}LockedKBArticleModal`
							).then((component) => {
								component.open(
									response.actionLabel,
									response.actionURL,
									response.userName
								);
							});

							return;
						}

						if (!response.success) {
							throw new Error(response.errorMessage);
						}

						showSuccessMessage(portletNamespace);
					})
					.catch(
						({
							message = Liferay.Language.get(
								'an-unexpected-error-occurred'
							),
						}) => {
							openToast({
								message,
								type: 'danger',
							});
						}
					);

				return true;
			},
			selectEventName: `selectKBMoveFolder`,
			size: 'md',
			title: sub(Liferay.Language.get('move-x-to'), `"${kbObjectTitle}"`),
			url: addParams(
				`${portletNamespace}moveKBObjectId=${kbObjectId}&${portletNamespace}moveKBObjectClassName=${kbObjectType}`,
				moveKBObjectModalURL
			),
		});
	}
}

export default MoveKBObject;




© 2015 - 2025 Weber Informatics LLC | Privacy Policy