protected function ensurePropertyVisibleInModel(
        Action $action,
        $propertyName,
        ModelInterface $model,
        EnvironmentInterface $environment
    ) {
        $palettesDefinition = $environment->getDataDefinition()->getPalettesDefinition();
        $propertyValues     = $this->getPropertyValueBagFromModel($action, $model, $environment);
        $palette            = $palettesDefinition->findPalette($model, $propertyValues);

        $invisible = false;
        foreach ($palette->getLegends() as $legend) {
            if ($invisible) {
                break;
            }

            foreach ($legend->getProperties($model, $propertyValues) as $property) {
                if ($invisible) {
                    break;
                }

                if ($property->getName() !== $propertyName) {
                    continue;
                }

                $invisible = $property->getVisibleCondition()->match($model, $propertyValues, $property, $legend);
            }
        }

        $findProperty =
            $environment->getDataDefinition()->getPropertiesDefinition()->getProperty($propertyName);

        return $this->matchVisibilityOfPropertyInAnyPalette($action, $findProperty, $invisible, $environment);
    }