module Ecoportal module API class V2 class Page class Component class ChartField < Page::Component passthrough :mode passboolean :relative, :bounded passthrough :relstart, :relbound passthrough :ubound, :lbound passthrough :filter_date_input passthrough :user_id, :user_lookup passboolean :lock_chart_user embeds_one :series_config, klass: "Ecoportal::API::V2::Page::Component::ChartField::SeriesConfig" embeds_one :frequency_config, klass: "Ecoportal::API::V2::Page::Component::ChartField::Frequency" embeds_one :heatmap_config, klass: "Ecoportal::API::V2::Page::Component::ChartField::Heatmap" embeds_one :sankey_config, klass: "Ecoportal::API::V2::Page::Component::ChartField::Sankey" embeds_one :indicator_config, klass: "Ecoportal::API::V2::Page::Component::ChartField::Indicator" embeds_one :faceted_series_config, klass: "Ecoportal::API::V2::Page::Component::ChartField::Multiseries" embeds_one :benchmark_config, klass: "Ecoportal::API::V2::Page::Component::ChartField::Benchmark" embeds_many :series, klass: "Ecoportal::API::V2::Page::Component::ChartField::Serie" MODES = ["frequency", "series", "heatmap", "sankey", "indicator", "faceted_series", "benchmark"] def mode=(value) raise "Unsuported mode #{value}. Should be one of #{MODES}" unless MODES.include?(value) config_doc(nil) doc["mode"] = value config_doc(config.class.new_doc) self.mode end def config case self.mode when "frequency" frequency_config when "series" series_config when "heatmap" heatmap_config when "sankey" sankey_config when "indicator" indicator_config when "faceted_series" faceted_series_config when "benchmark" benchmark_config end end private def config_doc(value) case self.mode when "frequency" doc["frequency_config"] = value when "series" doc["series_config"] = value when "heatmap" doc["heatmap_config"] = value when "sankey" doc["sankey_config"] = value when "indicator" doc["indicator_config"] = value when "faceted_series" doc["faceted_series_config"] = value when "benchmark" doc["benchmark_config"] = value end end end end end end end end require 'ecoportal/api/v2/page/component/chart_field/config' require 'ecoportal/api/v2/page/component/chart_field/frequency' require 'ecoportal/api/v2/page/component/chart_field/series_config' require 'ecoportal/api/v2/page/component/chart_field/serie' require 'ecoportal/api/v2/page/component/chart_field/heatmap' require 'ecoportal/api/v2/page/component/chart_field/sankey' require 'ecoportal/api/v2/page/component/chart_field/indicator' require 'ecoportal/api/v2/page/component/chart_field/multiseries' require 'ecoportal/api/v2/page/component/chart_field/benchmark'