private function updatePropertyValueBag(
        Action $action,
        ModelInterface $model,
        PropertyValueBagInterface $sourcePropertyValueBag,
        PropertyValueBagInterface $updatePropertyValueBag,
        EnvironmentInterface $environment
    ) {
        $dataProvider      = $environment->getDataProvider();
        $sessionProperties = $this->getPropertiesFromSession($action, $environment);

        foreach (\array_keys($sessionProperties) as $sessionPropertyName) {
            if (!$sourcePropertyValueBag->hasPropertyValue($sessionPropertyName)) {
                continue;
            }

            if (!$updatePropertyValueBag->isPropertyValueInvalid($sessionPropertyName)) {
                $editModel = $dataProvider->fetch($dataProvider->getEmptyConfig()->setId($model->getId()));
                $updatePropertyValueBag->setPropertyValue(
                    $sessionPropertyName,
                    $editModel->getProperty($sessionPropertyName)
                );
            }

            if ($updatePropertyValueBag->isPropertyValueInvalid($sessionPropertyName)) {
                continue;
            }

            $updatePropertyValueBag->markPropertyValueAsInvalid(
                $sessionPropertyName,
                $sourcePropertyValueBag->getPropertyValueErrors(
                    $sessionPropertyName
                )
            );
        }
    }