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

META-INF.resources.js.components.ModalImport.handleImportUtil.ts Maven / Gradle / Ivy

The newest version!
/**
 * SPDX-FileCopyrightText: (c) 2024 Liferay, Inc. https://liferay.com
 * SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
 */

import {API} from '@liferay/object-js-components-web';
import {fetch} from 'frontend-js-web';
import {FormEvent} from 'react';

import {FormDataJSONFormat, jsonToFormData} from '../../utils/formData';
import {ModalImportKeys} from './ModalImport';

interface HandleImportProps {
	importURL: string;
	item: FormData;
	onAfterImport?: () => void;
	onClose: () => void;
	setError: (
		value: React.SetStateAction
	) => void;
	setFailedModalVisible?: (value: boolean) => void;
	setImportLoading: (value: boolean) => void;
	setWarningModalVisible: (value: boolean) => void;
}

interface HandleDefaultImportProps extends Omit {
	JSONInputId: string;
	apiURL: string;
	event: FormEvent;
	externalReferenceCode: string;
	importExtendedInfo: KeyValueObject;
	inputFile?: File | null;
	setImportFormData: (value: FormData) => void;
}

interface HandleImportMultiplesObjectDefinitionsProps
	extends Omit {
	importedObjectDefinitions: ObjectDefinition[];
	objectFolderExternalReferenceCode: string;
	setExistingObjectDefinitions: (value: ObjectDefinition[]) => void;
	setImportFormData: (value: FormData) => void;
	setModalImportKeyState: (value: ModalImportKeys) => void;
	setWarningModalVisible: (value: boolean) => void;
}

export async function handleDefaultImport({
	JSONInputId,
	apiURL,
	event,
	externalReferenceCode,
	importExtendedInfo,
	importURL,
	inputFile,
	onAfterImport,
	onClose,
	setError,
	setImportFormData,
	setImportLoading,
	setWarningModalVisible,
}: HandleDefaultImportProps) {
	const formData = new FormData(event.currentTarget);
	const formDataObject: FormDataJSONFormat = {};

	formData.forEach((value, key) => {
		if (key.includes(JSONInputId)) {
			formDataObject[key] = inputFile as File;

			return;
		}

		formDataObject[key] = value;

		return;
	});

	if (importExtendedInfo) {
		formDataObject[importExtendedInfo.key] = importExtendedInfo.value;
	}

	const newFormData = jsonToFormData(formDataObject);

	const response = await fetch(`${apiURL}${externalReferenceCode}`);

	if (response.status === 204 || response.status === 404) {
		handleImport({
			importURL,
			item: newFormData,
			onAfterImport,
			onClose,
			setError,
			setImportLoading,
			setWarningModalVisible,
		});
	}
	else {
		setImportFormData(newFormData);
		setWarningModalVisible(true);
	}
}

export async function handleImport({
	importURL,
	item,
	onAfterImport,
	onClose,
	setError,
	setFailedModalVisible,
	setImportLoading,
	setWarningModalVisible,
}: HandleImportProps) {
	try {
		setImportLoading(true);

		await API.save({
			item,
			method: 'POST',
			url: importURL,
		});

		if (onAfterImport) {
			onAfterImport();

			onClose();
		}
		else {
			window.location.reload();
		}

		setImportLoading(false);
	}
	catch (error) {
		if (
			Liferay.FeatureFlags['LPD-34594'] &&
			setFailedModalVisible &&
			(error as API.ErrorDetails).type ===
				'importMultipleObjectDefinitions'
		) {
			setFailedModalVisible(true);
			setWarningModalVisible(false);
		}

		setError(error as API.ErrorDetails);

		setImportLoading(false);
	}
}

export async function handleImportMultiplesObjectDefinitions({
	importURL,
	importedObjectDefinitions,
	objectFolderExternalReferenceCode,
	onAfterImport,
	onClose,
	setError,
	setExistingObjectDefinitions,
	setFailedModalVisible,
	setImportFormData,
	setImportLoading,
	setModalImportKeyState,
	setWarningModalVisible,
}: HandleImportMultiplesObjectDefinitionsProps) {
	const {items} = await API.getAllObjectDefinitions();

	const objectDefinitionsMap = new Map(
		items.map((objectDefinition) => [
			objectDefinition.name,
			objectDefinition,
		])
	);

	const existingObjectDefinitions: ObjectDefinition[] = [];

	importedObjectDefinitions.forEach((objectDefinition) => {
		if (objectDefinitionsMap.has(objectDefinition.name)) {
			existingObjectDefinitions.push(
				objectDefinitionsMap.get(
					objectDefinition.name
				) as ObjectDefinition
			);
		}
	});

	const importedObjectDefinitionsFormData = jsonToFormData({
		objectDefinitions: JSON.stringify(importedObjectDefinitions),
		objectFolderExternalReferenceCode,
	});

	setImportFormData(importedObjectDefinitionsFormData);

	if (existingObjectDefinitions.length) {
		setExistingObjectDefinitions(existingObjectDefinitions);

		setModalImportKeyState('objectDefinitions');

		setWarningModalVisible(true);

		return;
	}

	handleImport({
		importURL,
		item: importedObjectDefinitionsFormData,
		onAfterImport,
		onClose,
		setError,
		setFailedModalVisible,
		setImportLoading,
		setWarningModalVisible,
	});
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy