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

META-INF.resources.components.account_selector.views.AccountCreationModalBody.js Maven / Gradle / Ivy

/**
 * 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 {useResource} from '@clayui/data-provider';
import ClayForm, {ClayInput, ClaySelect} from '@clayui/form';
import ClayIcon from '@clayui/icon';
import ClayModal from '@clayui/modal';
import ClayMultiSelect from '@clayui/multi-select';
import {fetch} from 'frontend-js-web';
import React, {useMemo, useState} from 'react';

const ORGANIZATIONS_ROOT_ENDPOINT = '/o/headless-admin-user/v1.0/organizations';

const orgUrl = new URL(
	`${themeDisplay.getPathContext()}${ORGANIZATIONS_ROOT_ENDPOINT}`,
	themeDisplay.getPortalURL()
);

export default function AccountCreationModalBody({
	accountData,
	accountTypes,
	setAccountData,
}) {
	const [organizationQuery, setOrganizationQuery] = useState('');
	const [organizationError, setOrganizationError] = useState(false);

	const [networkStatus, setNetworkStatus] = useState(4);
	const {resource = []} = useResource({
		fetch: async (link, options) => {
			const result = await fetch(link, options);
			const json = await result.json();

			return json.items.map((item) => ({
				label: item.name,
				value: item.id,
			}));
		},
		fetchPolicy: 'cache-first',
		link: orgUrl.toString(),
		onNetworkStatusChange: setNetworkStatus,
	});

	const availableOrganizations = useMemo(() => {
		if (!resource) {
			return [];
		}

		const accountValues = accountData.organizations.map(
			(item) => item.value
		);

		return resource.filter((org) => !accountValues.includes(org.value));
	}, [accountData.organizations, resource]);

	return (
		
			
				

				
						setAccountData({
							...accountData,
							name: event.target.value,
						})
					}
					required
					type="text"
					value={accountData.name}
				/>
			

			
				

				 {
						setOrganizationError(false);

						const validItems = [];

						newItems.map((item) => {
							if (
								resource.find(
									(organization) =>
										organization.label.toLowerCase() ===
										item.label.toLowerCase()
								)
							) {
								validItems.push(item);
							}
							else {
								setOrganizationError(true);
							}
						});

						setAccountData({
							...accountData,
							organizations: validItems,
						});
					}}
					sourceItems={availableOrganizations}
					value={organizationQuery}
				/>

				{organizationError && (
					
						
							

							{Liferay.Language.get('select-from-list')}
						
					
				)}
			

			
				

				
					{accountTypes.map((type) => (
						
								setAccountData({
									...accountData,
									type: event.target.value,
								})
							}
							value={accountData.type}
						/>
					))}
				
			

			
				

				
						setAccountData({
							...accountData,
							taxId: event.target.value,
						})
					}
					type="text"
					value={accountData.taxId}
				/>
			

			
				

				
						setAccountData({
							...accountData,
							externalReferenceCode: event.target.value,
						})
					}
					type="text"
					value={accountData.externalReferenceCode}
				/>
			

			
				

				
						setAccountData({
							...accountData,
							description: event.target.value,
						})
					}
					type="text"
					value={accountData.description}
				/>
			
		
	);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy