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

META-INF.resources.js.components.ObjectAction.fetchUtil.ts 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 {API} from '@liferay/object-js-components-web';

export type ObjectsOptionsList = {
	items: ObjectOptionsListItem[];
	label: string;
}[];

export type ObjectOptionsListItem = {
	isSystemObjectDefinition: boolean;
	label?: string;
	objectDefinitionExternalReferenceCode: string;
	objectDefinitionId: number;
};

function fillSelect(
	items: ObjectOptionsListItem[],
	label: string,
	objectsOptionsList: ObjectsOptionsList
) {
	if (items.length) {
		objectsOptionsList.push({items, label});
	}
}

interface FetchObjectDefinitionsProps {
	objectDefinitionsRelationshipsURL: string;
	setAddObjectEntryDefinitions: (values: AddObjectEntryDefinitions[]) => void;
	setObjectOptions: (values: ObjectsOptionsList) => void;
}

export async function fetchObjectDefinitions({
	objectDefinitionsRelationshipsURL,
	setAddObjectEntryDefinitions,
	setObjectOptions,
}: FetchObjectDefinitionsProps) {
	const addObjectEntryDefinitions = await API.fetchJSON<
		AddObjectEntryDefinitions[]
	>(objectDefinitionsRelationshipsURL);

	const relatedObjects: ObjectOptionsListItem[] = [];
	const unrelatedObjects: ObjectOptionsListItem[] = [];

	addObjectEntryDefinitions?.forEach((object) => {
		const {externalReferenceCode, id, label, system} = object;

		const target = object.related ? relatedObjects : unrelatedObjects;

		target.push({
			isSystemObjectDefinition: system as boolean,
			label,
			objectDefinitionExternalReferenceCode: externalReferenceCode,
			objectDefinitionId: id,
		});
	});

	const objectsOptionsList: ObjectsOptionsList = [];

	fillSelect(
		relatedObjects,
		Liferay.Language.get('related-objects'),
		objectsOptionsList
	);

	fillSelect(
		unrelatedObjects,
		Liferay.Language.get('unrelated-objects'),
		objectsOptionsList
	);

	setObjectOptions(objectsOptionsList);
	setAddObjectEntryDefinitions(addObjectEntryDefinitions);
}

export async function fetchObjectDefinitionFields(
	objectDefinitionId: number,
	objectDefinitionExternalReferenceCode: string,
	systemObject: boolean,
	values: Partial,
	isValidField: (
		{businessType, name, objectFieldSettings, system}: ObjectField,
		isObjectActionSystem?: boolean
	) => boolean,
	setCurrentObjectDefinitionFields: (values: ObjectField[]) => void,
	setValues: (values: Partial) => void
) {
	let definitionId = objectDefinitionId;
	let externalReferenceCode = objectDefinitionExternalReferenceCode;
	let isSystemObject = systemObject;
	const validFields: ObjectField[] = [];

	if (values.objectActionExecutorKey === 'add-object-entry') {
		definitionId = values?.parameters?.objectDefinitionId as number;
		externalReferenceCode = values.parameters
			?.objectDefinitionExternalReferenceCode as string;
		isSystemObject = !!values?.parameters?.system;
	}

	if (externalReferenceCode) {
		const items =
			await API.getObjectDefinitionByExternalReferenceCodeObjectFields(
				externalReferenceCode
			);

		items.forEach((field) => {
			if (isValidField(field, isSystemObject)) {
				validFields.push(field);
			}
		});
	}

	setCurrentObjectDefinitionFields(validFields);

	const {predefinedValues = []} = values.parameters as ObjectActionParameters;

	const predefinedValuesMap = new Map();

	predefinedValues.forEach((field) => {
		predefinedValuesMap.set(field.name, field);
	});

	const newPredefinedValues: PredefinedValue[] = [];

	validFields.forEach(({businessType, label, name, required}) => {
		if (predefinedValuesMap.has(name)) {
			const field = predefinedValuesMap.get(name);

			newPredefinedValues.push(field as PredefinedValue);
		}
		else if (
			required &&
			values.objectActionExecutorKey === 'add-object-entry'
		) {
			const inputAsValue = businessType === 'DateTime' ? true : false;

			newPredefinedValues.push({
				businessType,
				inputAsValue,
				label,
				name,
				value: '',
			});
		}
	});
	setValues({
		parameters: {
			...values.parameters,
			objectDefinitionExternalReferenceCode: externalReferenceCode,
			objectDefinitionId: definitionId,
			predefinedValues: newPredefinedValues,
		},
	});
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy