module Carto
module Api
class MobileAppPresenter
def initialize(mobile_app, current_user, fetch_mobile_platforms, fetch_app_types)
@mobile_app = mobile_app
@current_user = current_user
@fetch_mobile_platforms = fetch_mobile_platforms
@fetch_app_types = fetch_app_types
end
def data
return {} if @mobile_app.nil?
data = {
id: @mobile_app.id,
name: @mobile_app.name,
description: @mobile_app.description,
icon_url: @mobile_app.icon_url,
platform: @mobile_app.platform,
app_type: @mobile_app.app_type,
app_id: @mobile_app.app_id,
license_key: @mobile_app.license_key,
monthly_users: @mobile_app.monthly_users
}
if @fetch_mobile_platforms == true
data[:mobile_platforms] = {
"android": {
text: "Android",
available: platform_available?('android', true),
selected: platform_selected?('android'),
legend: "Use package from AndroidManifest.xml. E.g: com.example.mycartoapp."
},
"ios": {
text: "iOS",
available: platform_available?('ios', true),
selected: platform_selected?('ios'),
legend: "Use Bundle identifier. You can find it in the project properties. E.g: com.example.mycartoapp."
},
"xamarin-android": {
text: "Xamarin Android",
available: platform_available?('xamarin-android', @current_user.mobile_xamarin),
selected: platform_selected?('xamarin-android'),
legend: "Use package from AndroidManifest.xml. E.g: com.example.mycartoapp."
},
"xamarin-ios": {
text: "Xamarin iOS",
available: platform_available?('xamarin-ios', @current_user.mobile_xamarin),
selected: platform_selected?('xamarin-ios'),
legend: "Use Bundle identifier. You can find it in the project properties. E.g: com.example.mycartoapp."
},
"windows-phone": {
text: "Windows Phone",
available: platform_available?('windows-phone', @current_user.mobile_xamarin),
selected: platform_selected?('windows-phone'),
legend: "Use the Package name from Package.appmanifest. E.g: c882d38a-5c09-4994-87f0-89875cdee539."
}
}
end
if @fetch_app_types == true
data[:app_types] = {
"open": {
text: "Limits based on your CARTO plan. Learn more.",
available: app_type_available?('open', @current_user.open_apps_enabled?),
selected: app_type_selected?('open')
},
"private": {
text: "Only for enterprise. Learn more.",
available: app_type_available?('private', @current_user.private_apps_enabled?),
selected: app_type_selected?('private')
}
}
end
data
end
private
def platform_available?(platform, current_platform_enabled)
(!@mobile_app.persisted? && current_platform_enabled) || platform_selected?(platform)
end
def platform_selected?(platform)
@mobile_app.platform == platform
end
def app_type_available?(app_type, current_apps_enabled)
(!@mobile_app.persisted? && current_apps_enabled) || app_type_selected?(app_type) || (@mobile_app.persisted? && current_apps_enabled)
end
def app_type_selected?(app_type)
@mobile_app.app_type == app_type
end
end
end
end