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

io.imunity.vaadin23.elements.LocaleTextFieldDetails Maven / Gradle / Ivy

/*
 * Copyright (c) 2018 Bixbit - Krzysztof Benedyczak. All rights reserved.
 * See LICENCE.txt file for licensing information.
 */

package io.imunity.vaadin23.elements;

import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;

import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.function.Function;

@CssImport("./styles/components/locale-text-field-details.css")
public class LocaleTextFieldDetails extends VerticalLayout
{
	public List fields = new LinkedList<>();

	public LocaleTextFieldDetails(Set enabledLocales, Locale currentLocale, String label, Function valueGenerator)
	{
		VerticalLayout content = new VerticalLayout();
		content.setVisible(false);
		content.setPadding(false);

		Icon angleDown = crateIcon(VaadinIcon.ANGLE_DOWN, label);
		angleDown.getStyle().set("margin-bottom", "0.7em");
		Icon angleUp = crateIcon(VaadinIcon.ANGLE_UP, label);
		angleUp.getStyle().set("margin-bottom", "0.7em");

		angleUp.setVisible(false);
		angleDown.addClickListener(event ->
		{
			angleDown.setVisible(false);
			angleUp.setVisible(true);
			content.setVisible(true);
		});
		angleUp.addClickListener(event ->
		{
			angleDown.setVisible(true);
			angleUp.setVisible(false);
			content.setVisible(false);
		});

		LocaleTextField defaultField = new LocaleTextField(currentLocale);
		defaultField.setValue(valueGenerator.apply(currentLocale));
		defaultField.setLabel(label);
		fields.add(defaultField);

		HorizontalLayout summary = new HorizontalLayout(defaultField, angleDown, angleUp);
		summary.setAlignItems(Alignment.END);
		summary.getStyle().set("gap", "0.3em");

		enabledLocales.stream()
				.filter(locale -> !currentLocale.equals(locale))
				.forEach(locale ->
				{
					LocaleTextField localeTextField = new LocaleTextField(locale);
					localeTextField.setValue(valueGenerator.apply(locale));
					content.add(localeTextField);
					fields.add(localeTextField);
				});

		add(summary, content);
		setPadding(false);
	}

	public void focus()
	{
		fields.iterator().next().focus();
	}

	private Icon crateIcon(VaadinIcon angleDown, String label)
	{
		Icon icon = angleDown.create();
		icon.setColor("unset");
		icon.getStyle().set("cursor", "pointer");
		if(!label.isBlank())
			icon.getStyle().set("margin-top", "2em");
		return icon;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy