--[[
	Higher order component that lets the wrapped component consume the ConfigurationContext.
]]

local function withConfiguration(component)
	return function(props)
		if props.configuration then
			warn("Child component has a prop named `configuration` and will be overriden by ConfigurationContext.")
		end

		return Roact.createElement(context.Consumer, {
			render = function(configuration)
				local mergedProps = Cryo.Dictionary.join({ configuration = configuration }, props)

				return Roact.createElement(component, mergedProps)
			end,
		})
	end
end

return {
	ConfigurationProvider = ConfigurationProvider,
	withConfiguration = withConfiguration,
}
