{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.QuickSight.Types.WaterfallVisual
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.QuickSight.Types.WaterfallVisual where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.QuickSight.Types.ColumnHierarchy
import Amazonka.QuickSight.Types.VisualCustomAction
import Amazonka.QuickSight.Types.VisualSubtitleLabelOptions
import Amazonka.QuickSight.Types.VisualTitleLabelOptions
import Amazonka.QuickSight.Types.WaterfallChartConfiguration

-- | A waterfall chart.
--
-- For more information, see
-- <https://docs.aws.amazon.com/quicksight/latest/user/waterfall-chart.html Using waterfall charts>
-- in the /Amazon QuickSight User Guide/.
--
-- /See:/ 'newWaterfallVisual' smart constructor.
data WaterfallVisual = WaterfallVisual'
  { -- | The list of custom actions that are configured for a visual.
    WaterfallVisual -> Maybe [VisualCustomAction]
actions :: Prelude.Maybe [VisualCustomAction],
    -- | The configuration for a waterfall visual.
    WaterfallVisual -> Maybe WaterfallChartConfiguration
chartConfiguration :: Prelude.Maybe WaterfallChartConfiguration,
    -- | The column hierarchy that is used during drill-downs and drill-ups.
    WaterfallVisual -> Maybe [ColumnHierarchy]
columnHierarchies :: Prelude.Maybe [ColumnHierarchy],
    -- | The subtitle that is displayed on the visual.
    WaterfallVisual -> Maybe VisualSubtitleLabelOptions
subtitle :: Prelude.Maybe VisualSubtitleLabelOptions,
    -- | The title that is displayed on the visual.
    WaterfallVisual -> Maybe VisualTitleLabelOptions
title :: Prelude.Maybe VisualTitleLabelOptions,
    -- | The unique identifier of a visual. This identifier must be unique within
    -- the context of a dashboard, template, or analysis. Two dashboards,
    -- analyses, or templates can have visuals with the same identifiers.
    WaterfallVisual -> Text
visualId :: Prelude.Text
  }
  deriving (WaterfallVisual -> WaterfallVisual -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: WaterfallVisual -> WaterfallVisual -> Bool
$c/= :: WaterfallVisual -> WaterfallVisual -> Bool
== :: WaterfallVisual -> WaterfallVisual -> Bool
$c== :: WaterfallVisual -> WaterfallVisual -> Bool
Prelude.Eq, Int -> WaterfallVisual -> ShowS
[WaterfallVisual] -> ShowS
WaterfallVisual -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [WaterfallVisual] -> ShowS
$cshowList :: [WaterfallVisual] -> ShowS
show :: WaterfallVisual -> String
$cshow :: WaterfallVisual -> String
showsPrec :: Int -> WaterfallVisual -> ShowS
$cshowsPrec :: Int -> WaterfallVisual -> ShowS
Prelude.Show, forall x. Rep WaterfallVisual x -> WaterfallVisual
forall x. WaterfallVisual -> Rep WaterfallVisual x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep WaterfallVisual x -> WaterfallVisual
$cfrom :: forall x. WaterfallVisual -> Rep WaterfallVisual x
Prelude.Generic)

-- |
-- Create a value of 'WaterfallVisual' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'actions', 'waterfallVisual_actions' - The list of custom actions that are configured for a visual.
--
-- 'chartConfiguration', 'waterfallVisual_chartConfiguration' - The configuration for a waterfall visual.
--
-- 'columnHierarchies', 'waterfallVisual_columnHierarchies' - The column hierarchy that is used during drill-downs and drill-ups.
--
-- 'subtitle', 'waterfallVisual_subtitle' - The subtitle that is displayed on the visual.
--
-- 'title', 'waterfallVisual_title' - The title that is displayed on the visual.
--
-- 'visualId', 'waterfallVisual_visualId' - The unique identifier of a visual. This identifier must be unique within
-- the context of a dashboard, template, or analysis. Two dashboards,
-- analyses, or templates can have visuals with the same identifiers.
newWaterfallVisual ::
  -- | 'visualId'
  Prelude.Text ->
  WaterfallVisual
newWaterfallVisual :: Text -> WaterfallVisual
newWaterfallVisual Text
pVisualId_ =
  WaterfallVisual'
    { $sel:actions:WaterfallVisual' :: Maybe [VisualCustomAction]
actions = forall a. Maybe a
Prelude.Nothing,
      $sel:chartConfiguration:WaterfallVisual' :: Maybe WaterfallChartConfiguration
chartConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:columnHierarchies:WaterfallVisual' :: Maybe [ColumnHierarchy]
columnHierarchies = forall a. Maybe a
Prelude.Nothing,
      $sel:subtitle:WaterfallVisual' :: Maybe VisualSubtitleLabelOptions
subtitle = forall a. Maybe a
Prelude.Nothing,
      $sel:title:WaterfallVisual' :: Maybe VisualTitleLabelOptions
title = forall a. Maybe a
Prelude.Nothing,
      $sel:visualId:WaterfallVisual' :: Text
visualId = Text
pVisualId_
    }

-- | The list of custom actions that are configured for a visual.
waterfallVisual_actions :: Lens.Lens' WaterfallVisual (Prelude.Maybe [VisualCustomAction])
waterfallVisual_actions :: Lens' WaterfallVisual (Maybe [VisualCustomAction])
waterfallVisual_actions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\WaterfallVisual' {Maybe [VisualCustomAction]
actions :: Maybe [VisualCustomAction]
$sel:actions:WaterfallVisual' :: WaterfallVisual -> Maybe [VisualCustomAction]
actions} -> Maybe [VisualCustomAction]
actions) (\s :: WaterfallVisual
s@WaterfallVisual' {} Maybe [VisualCustomAction]
a -> WaterfallVisual
s {$sel:actions:WaterfallVisual' :: Maybe [VisualCustomAction]
actions = Maybe [VisualCustomAction]
a} :: WaterfallVisual) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The configuration for a waterfall visual.
waterfallVisual_chartConfiguration :: Lens.Lens' WaterfallVisual (Prelude.Maybe WaterfallChartConfiguration)
waterfallVisual_chartConfiguration :: Lens' WaterfallVisual (Maybe WaterfallChartConfiguration)
waterfallVisual_chartConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\WaterfallVisual' {Maybe WaterfallChartConfiguration
chartConfiguration :: Maybe WaterfallChartConfiguration
$sel:chartConfiguration:WaterfallVisual' :: WaterfallVisual -> Maybe WaterfallChartConfiguration
chartConfiguration} -> Maybe WaterfallChartConfiguration
chartConfiguration) (\s :: WaterfallVisual
s@WaterfallVisual' {} Maybe WaterfallChartConfiguration
a -> WaterfallVisual
s {$sel:chartConfiguration:WaterfallVisual' :: Maybe WaterfallChartConfiguration
chartConfiguration = Maybe WaterfallChartConfiguration
a} :: WaterfallVisual)

-- | The column hierarchy that is used during drill-downs and drill-ups.
waterfallVisual_columnHierarchies :: Lens.Lens' WaterfallVisual (Prelude.Maybe [ColumnHierarchy])
waterfallVisual_columnHierarchies :: Lens' WaterfallVisual (Maybe [ColumnHierarchy])
waterfallVisual_columnHierarchies = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\WaterfallVisual' {Maybe [ColumnHierarchy]
columnHierarchies :: Maybe [ColumnHierarchy]
$sel:columnHierarchies:WaterfallVisual' :: WaterfallVisual -> Maybe [ColumnHierarchy]
columnHierarchies} -> Maybe [ColumnHierarchy]
columnHierarchies) (\s :: WaterfallVisual
s@WaterfallVisual' {} Maybe [ColumnHierarchy]
a -> WaterfallVisual
s {$sel:columnHierarchies:WaterfallVisual' :: Maybe [ColumnHierarchy]
columnHierarchies = Maybe [ColumnHierarchy]
a} :: WaterfallVisual) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The subtitle that is displayed on the visual.
waterfallVisual_subtitle :: Lens.Lens' WaterfallVisual (Prelude.Maybe VisualSubtitleLabelOptions)
waterfallVisual_subtitle :: Lens' WaterfallVisual (Maybe VisualSubtitleLabelOptions)
waterfallVisual_subtitle = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\WaterfallVisual' {Maybe VisualSubtitleLabelOptions
subtitle :: Maybe VisualSubtitleLabelOptions
$sel:subtitle:WaterfallVisual' :: WaterfallVisual -> Maybe VisualSubtitleLabelOptions
subtitle} -> Maybe VisualSubtitleLabelOptions
subtitle) (\s :: WaterfallVisual
s@WaterfallVisual' {} Maybe VisualSubtitleLabelOptions
a -> WaterfallVisual
s {$sel:subtitle:WaterfallVisual' :: Maybe VisualSubtitleLabelOptions
subtitle = Maybe VisualSubtitleLabelOptions
a} :: WaterfallVisual)

-- | The title that is displayed on the visual.
waterfallVisual_title :: Lens.Lens' WaterfallVisual (Prelude.Maybe VisualTitleLabelOptions)
waterfallVisual_title :: Lens' WaterfallVisual (Maybe VisualTitleLabelOptions)
waterfallVisual_title = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\WaterfallVisual' {Maybe VisualTitleLabelOptions
title :: Maybe VisualTitleLabelOptions
$sel:title:WaterfallVisual' :: WaterfallVisual -> Maybe VisualTitleLabelOptions
title} -> Maybe VisualTitleLabelOptions
title) (\s :: WaterfallVisual
s@WaterfallVisual' {} Maybe VisualTitleLabelOptions
a -> WaterfallVisual
s {$sel:title:WaterfallVisual' :: Maybe VisualTitleLabelOptions
title = Maybe VisualTitleLabelOptions
a} :: WaterfallVisual)

-- | The unique identifier of a visual. This identifier must be unique within
-- the context of a dashboard, template, or analysis. Two dashboards,
-- analyses, or templates can have visuals with the same identifiers.
waterfallVisual_visualId :: Lens.Lens' WaterfallVisual Prelude.Text
waterfallVisual_visualId :: Lens' WaterfallVisual Text
waterfallVisual_visualId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\WaterfallVisual' {Text
visualId :: Text
$sel:visualId:WaterfallVisual' :: WaterfallVisual -> Text
visualId} -> Text
visualId) (\s :: WaterfallVisual
s@WaterfallVisual' {} Text
a -> WaterfallVisual
s {$sel:visualId:WaterfallVisual' :: Text
visualId = Text
a} :: WaterfallVisual)

instance Data.FromJSON WaterfallVisual where
  parseJSON :: Value -> Parser WaterfallVisual
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"WaterfallVisual"
      ( \Object
x ->
          Maybe [VisualCustomAction]
-> Maybe WaterfallChartConfiguration
-> Maybe [ColumnHierarchy]
-> Maybe VisualSubtitleLabelOptions
-> Maybe VisualTitleLabelOptions
-> Text
-> WaterfallVisual
WaterfallVisual'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Actions" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ChartConfiguration")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"ColumnHierarchies"
                            forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Subtitle")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"Title")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser a
Data..: Key
"VisualId")
      )

instance Prelude.Hashable WaterfallVisual where
  hashWithSalt :: Int -> WaterfallVisual -> Int
hashWithSalt Int
_salt WaterfallVisual' {Maybe [ColumnHierarchy]
Maybe [VisualCustomAction]
Maybe VisualSubtitleLabelOptions
Maybe VisualTitleLabelOptions
Maybe WaterfallChartConfiguration
Text
visualId :: Text
title :: Maybe VisualTitleLabelOptions
subtitle :: Maybe VisualSubtitleLabelOptions
columnHierarchies :: Maybe [ColumnHierarchy]
chartConfiguration :: Maybe WaterfallChartConfiguration
actions :: Maybe [VisualCustomAction]
$sel:visualId:WaterfallVisual' :: WaterfallVisual -> Text
$sel:title:WaterfallVisual' :: WaterfallVisual -> Maybe VisualTitleLabelOptions
$sel:subtitle:WaterfallVisual' :: WaterfallVisual -> Maybe VisualSubtitleLabelOptions
$sel:columnHierarchies:WaterfallVisual' :: WaterfallVisual -> Maybe [ColumnHierarchy]
$sel:chartConfiguration:WaterfallVisual' :: WaterfallVisual -> Maybe WaterfallChartConfiguration
$sel:actions:WaterfallVisual' :: WaterfallVisual -> Maybe [VisualCustomAction]
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [VisualCustomAction]
actions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe WaterfallChartConfiguration
chartConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [ColumnHierarchy]
columnHierarchies
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VisualSubtitleLabelOptions
subtitle
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe VisualTitleLabelOptions
title
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
visualId

instance Prelude.NFData WaterfallVisual where
  rnf :: WaterfallVisual -> ()
rnf WaterfallVisual' {Maybe [ColumnHierarchy]
Maybe [VisualCustomAction]
Maybe VisualSubtitleLabelOptions
Maybe VisualTitleLabelOptions
Maybe WaterfallChartConfiguration
Text
visualId :: Text
title :: Maybe VisualTitleLabelOptions
subtitle :: Maybe VisualSubtitleLabelOptions
columnHierarchies :: Maybe [ColumnHierarchy]
chartConfiguration :: Maybe WaterfallChartConfiguration
actions :: Maybe [VisualCustomAction]
$sel:visualId:WaterfallVisual' :: WaterfallVisual -> Text
$sel:title:WaterfallVisual' :: WaterfallVisual -> Maybe VisualTitleLabelOptions
$sel:subtitle:WaterfallVisual' :: WaterfallVisual -> Maybe VisualSubtitleLabelOptions
$sel:columnHierarchies:WaterfallVisual' :: WaterfallVisual -> Maybe [ColumnHierarchy]
$sel:chartConfiguration:WaterfallVisual' :: WaterfallVisual -> Maybe WaterfallChartConfiguration
$sel:actions:WaterfallVisual' :: WaterfallVisual -> Maybe [VisualCustomAction]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [VisualCustomAction]
actions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe WaterfallChartConfiguration
chartConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [ColumnHierarchy]
columnHierarchies
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VisualSubtitleLabelOptions
subtitle
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe VisualTitleLabelOptions
title
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
visualId

instance Data.ToJSON WaterfallVisual where
  toJSON :: WaterfallVisual -> Value
toJSON WaterfallVisual' {Maybe [ColumnHierarchy]
Maybe [VisualCustomAction]
Maybe VisualSubtitleLabelOptions
Maybe VisualTitleLabelOptions
Maybe WaterfallChartConfiguration
Text
visualId :: Text
title :: Maybe VisualTitleLabelOptions
subtitle :: Maybe VisualSubtitleLabelOptions
columnHierarchies :: Maybe [ColumnHierarchy]
chartConfiguration :: Maybe WaterfallChartConfiguration
actions :: Maybe [VisualCustomAction]
$sel:visualId:WaterfallVisual' :: WaterfallVisual -> Text
$sel:title:WaterfallVisual' :: WaterfallVisual -> Maybe VisualTitleLabelOptions
$sel:subtitle:WaterfallVisual' :: WaterfallVisual -> Maybe VisualSubtitleLabelOptions
$sel:columnHierarchies:WaterfallVisual' :: WaterfallVisual -> Maybe [ColumnHierarchy]
$sel:chartConfiguration:WaterfallVisual' :: WaterfallVisual -> Maybe WaterfallChartConfiguration
$sel:actions:WaterfallVisual' :: WaterfallVisual -> Maybe [VisualCustomAction]
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Actions" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [VisualCustomAction]
actions,
            (Key
"ChartConfiguration" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe WaterfallChartConfiguration
chartConfiguration,
            (Key
"ColumnHierarchies" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=)
              forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe [ColumnHierarchy]
columnHierarchies,
            (Key
"Subtitle" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VisualSubtitleLabelOptions
subtitle,
            (Key
"Title" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..=) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> Maybe VisualTitleLabelOptions
title,
            forall a. a -> Maybe a
Prelude.Just (Key
"VisualId" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
visualId)
          ]
      )