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

META-INF.resources.js.legacy.calendar_container.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
 */

AUI.add(
	'liferay-calendar-container',
	(A) => {
		const Lang = A.Lang;

		const isObject = Lang.isObject;

		const toInt = Lang.toInt;

		const STR_DASH = '-';

		const STR_SPACE = ' ';

		const CalendarContainer = A.Component.create({
			ATTRS: {
				availableCalendars: {
					validator: isObject,
					value: {},
				},

				defaultCalendar: {
					validator: isObject,
					value: null,
				},

				groupCalendarResourceId: {
					setter: toInt,
					value: 0,
				},

				userCalendarResourceId: {
					setter: toInt,
					value: 0,
				},

				visibleCalendars: {
					validator: isObject,
					value: {},
				},
			},

			AUGMENTS: [Liferay.PortletBase],

			EXTENDS: A.Base,

			NAME: 'calendar-container',

			prototype: {
				createCalendarsAutoComplete(resourceURL, input, afterSelectFn) {
					const instance = this;

					input.plug(A.Plugin.AutoComplete, {
						activateFirstItem: true,
						after: {
							select: afterSelectFn,
						},
						maxResults: 20,
						requestTemplate:
							'&' +
							instance.get('namespace') +
							'keywords={query}',
						resultFilters(_query, results) {
							return results.filter((item) => {
								return !instance.getCalendar(
									item.raw.calendarId
								);
							});
						},
						resultFormatter(query, results) {
							return results.map((result) => {
								const calendar = result.raw;
								const calendarResourceName =
									calendar.calendarResourceName;
								let name = calendar.name;

								if (name !== calendarResourceName) {
									name = [
										calendarResourceName,
										STR_DASH,
										name,
									].join(STR_SPACE);
								}

								return A.Highlight.words(name, query);
							});
						},
						resultHighlighter: 'wordMatch',
						resultTextLocator: 'calendarResourceName',
						source: resourceURL,
						width: 'auto',
					});

					input.ac
						.get('boundingBox')
						.setStyle('min-width', input.outerWidth());
				},

				getCalendar(calendarId) {
					const instance = this;

					const availableCalendars =
						instance.get('availableCalendars');

					return availableCalendars[calendarId];
				},

				getCalendarsMenu(config) {
					const instance = this;

					const availableCalendars =
						instance.get('availableCalendars');

					const toggler = new A.Toggler({
						after: {
							expandedChange(event) {
								if (event.newVal) {
									const activeView =
										config.scheduler.get('activeView');

									activeView._fillHeight();
								}
							},
						},
						animated: true,
						content: config.content,
						expanded: false,
						header: config.header,
					});

					const items = [
						{
							caption: Liferay.Language.get('check-availability'),
							fn() {
								const instance = this;

								A.each(availableCalendars, (item) => {
									item.set('visible', false);
								});

								const calendarList = instance.get('host');

								calendarList.activeItem.set('visible', true);

								toggler.expand();
								instance.hide();

								return false;
							},
							id: 'check-availability',
						},
					];

					const calendarsMenu = {
						items,
					};

					if (config.invitable) {
						items.push({
							caption: Liferay.Language.get('remove'),
							fn() {
								const instance = this;

								const calendarList = instance.get('host');

								calendarList.remove(calendarList.activeItem);

								instance.hide();
							},
							id: 'remove',
						});

						calendarsMenu.on = {
							visibleChange(event) {
								const instance = this;

								if (event.newVal) {
									const calendarList = instance.get('host');

									const calendar = calendarList.activeItem;

									const hiddenItems = [];

									if (
										calendar.get('calendarId') ===
										config.defaultCalendarId
									) {
										hiddenItems.push('remove');
									}

									instance.set('hiddenItems', hiddenItems);
								}
							},
						};
					}

					return calendarsMenu;
				},

				syncCalendarsMap(calendarLists) {
					const instance = this;

					let defaultCalendar = instance.get('defaultCalendar');

					const availableCalendars = {};

					const visibleCalendars = {};

					calendarLists.forEach((calendarList) => {
						const calendars = calendarList.get('calendars');

						A.each(calendars, (item) => {
							const calendarId = item.get('calendarId');

							availableCalendars[calendarId] = item;

							if (item.get('visible')) {
								visibleCalendars[calendarId] = item;
							}

							const calendarResourceId =
								item.get('calendarResourceId');

							if (item.get('defaultCalendar')) {
								if (
									calendarResourceId ===
										instance.get(
											'groupCalendarResourceId'
										) &&
									item.get('permissions').MANAGE_BOOKINGS
								) {
									defaultCalendar = item;
								}

								if (
									calendarResourceId ===
									instance.get('userCalendarResourceId')
								) {
									defaultCalendar = item;
								}

								if (
									calendarResourceId ===
										instance.get(
											'groupCalendarResourceId'
										) &&
									item.get('permissions').VIEW_BOOKING_DETAILS
								) {
									defaultCalendar = item;
								}
							}

							if (
								(defaultCalendar === null ||
									defaultCalendar === undefined) &&
								calendarResourceId ===
									instance.get('groupCalendarResourceId') &&
								item.get('permissions').VIEW_BOOKING_DETAILS
							) {
								defaultCalendar = item;
							}
						});
					});

					instance.set('availableCalendars', availableCalendars);
					instance.set('visibleCalendars', visibleCalendars);
					instance.set('defaultCalendar', defaultCalendar);

					return availableCalendars;
				},
			},
		});

		Liferay.CalendarContainer = CalendarContainer;
	},
	'',
	{
		requires: ['aui-base', 'aui-component', 'liferay-portlet-base'],
	}
);




© 2015 - 2025 Weber Informatics LLC | Privacy Policy