{-# 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.FunnelChartVisual
-- 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.FunnelChartVisual 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.FunnelChartConfiguration
import Amazonka.QuickSight.Types.VisualCustomAction
import Amazonka.QuickSight.Types.VisualSubtitleLabelOptions
import Amazonka.QuickSight.Types.VisualTitleLabelOptions

-- | A funnel chart.
--
-- For more information, see
-- <https://docs.aws.amazon.com/quicksight/latest/user/funnel-visual-content.html Using funnel charts>
-- in the /Amazon QuickSight User Guide/.
--
-- /See:/ 'newFunnelChartVisual' smart constructor.
data FunnelChartVisual = FunnelChartVisual'
  { -- | The list of custom actions that are configured for a visual.
    FunnelChartVisual -> Maybe [VisualCustomAction]
actions :: Prelude.Maybe [VisualCustomAction],
    -- | The configuration of a @FunnelChartVisual@.
    FunnelChartVisual -> Maybe FunnelChartConfiguration
chartConfiguration :: Prelude.Maybe FunnelChartConfiguration,
    -- | The column hierarchy that is used during drill-downs and drill-ups.
    FunnelChartVisual -> Maybe [ColumnHierarchy]
columnHierarchies :: Prelude.Maybe [ColumnHierarchy],
    -- | The subtitle that is displayed on the visual.
    FunnelChartVisual -> Maybe VisualSubtitleLabelOptions
subtitle :: Prelude.Maybe VisualSubtitleLabelOptions,
    -- | The title that is displayed on the visual.
    FunnelChartVisual -> 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..
    FunnelChartVisual -> Text
visualId :: Prelude.Text
  }
  deriving (FunnelChartVisual -> FunnelChartVisual -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FunnelChartVisual -> FunnelChartVisual -> Bool
$c/= :: FunnelChartVisual -> FunnelChartVisual -> Bool
== :: FunnelChartVisual -> FunnelChartVisual -> Bool
$c== :: FunnelChartVisual -> FunnelChartVisual -> Bool
Prelude.Eq, Int -> FunnelChartVisual -> ShowS
[FunnelChartVisual] -> ShowS
FunnelChartVisual -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [FunnelChartVisual] -> ShowS
$cshowList :: [FunnelChartVisual] -> ShowS
show :: FunnelChartVisual -> String
$cshow :: FunnelChartVisual -> String
showsPrec :: Int -> FunnelChartVisual -> ShowS
$cshowsPrec :: Int -> FunnelChartVisual -> ShowS
Prelude.Show, forall x. Rep FunnelChartVisual x -> FunnelChartVisual
forall x. FunnelChartVisual -> Rep FunnelChartVisual x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep FunnelChartVisual x -> FunnelChartVisual
$cfrom :: forall x. FunnelChartVisual -> Rep FunnelChartVisual x
Prelude.Generic)

-- |
-- Create a value of 'FunnelChartVisual' 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', 'funnelChartVisual_actions' - The list of custom actions that are configured for a visual.
--
-- 'chartConfiguration', 'funnelChartVisual_chartConfiguration' - The configuration of a @FunnelChartVisual@.
--
-- 'columnHierarchies', 'funnelChartVisual_columnHierarchies' - The column hierarchy that is used during drill-downs and drill-ups.
--
-- 'subtitle', 'funnelChartVisual_subtitle' - The subtitle that is displayed on the visual.
--
-- 'title', 'funnelChartVisual_title' - The title that is displayed on the visual.
--
-- 'visualId', 'funnelChartVisual_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..
newFunnelChartVisual ::
  -- | 'visualId'
  Prelude.Text ->
  FunnelChartVisual
newFunnelChartVisual :: Text -> FunnelChartVisual
newFunnelChartVisual Text
pVisualId_ =
  FunnelChartVisual'
    { $sel:actions:FunnelChartVisual' :: Maybe [VisualCustomAction]
actions = forall a. Maybe a
Prelude.Nothing,
      $sel:chartConfiguration:FunnelChartVisual' :: Maybe FunnelChartConfiguration
chartConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:columnHierarchies:FunnelChartVisual' :: Maybe [ColumnHierarchy]
columnHierarchies = forall a. Maybe a
Prelude.Nothing,
      $sel:subtitle:FunnelChartVisual' :: Maybe VisualSubtitleLabelOptions
subtitle = forall a. Maybe a
Prelude.Nothing,
      $sel:title:FunnelChartVisual' :: Maybe VisualTitleLabelOptions
title = forall a. Maybe a
Prelude.Nothing,
      $sel:visualId:FunnelChartVisual' :: Text
visualId = Text
pVisualId_
    }

-- | The list of custom actions that are configured for a visual.
funnelChartVisual_actions :: Lens.Lens' FunnelChartVisual (Prelude.Maybe [VisualCustomAction])
funnelChartVisual_actions :: Lens' FunnelChartVisual (Maybe [VisualCustomAction])
funnelChartVisual_actions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FunnelChartVisual' {Maybe [VisualCustomAction]
actions :: Maybe [VisualCustomAction]
$sel:actions:FunnelChartVisual' :: FunnelChartVisual -> Maybe [VisualCustomAction]
actions} -> Maybe [VisualCustomAction]
actions) (\s :: FunnelChartVisual
s@FunnelChartVisual' {} Maybe [VisualCustomAction]
a -> FunnelChartVisual
s {$sel:actions:FunnelChartVisual' :: Maybe [VisualCustomAction]
actions = Maybe [VisualCustomAction]
a} :: FunnelChartVisual) 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 of a @FunnelChartVisual@.
funnelChartVisual_chartConfiguration :: Lens.Lens' FunnelChartVisual (Prelude.Maybe FunnelChartConfiguration)
funnelChartVisual_chartConfiguration :: Lens' FunnelChartVisual (Maybe FunnelChartConfiguration)
funnelChartVisual_chartConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FunnelChartVisual' {Maybe FunnelChartConfiguration
chartConfiguration :: Maybe FunnelChartConfiguration
$sel:chartConfiguration:FunnelChartVisual' :: FunnelChartVisual -> Maybe FunnelChartConfiguration
chartConfiguration} -> Maybe FunnelChartConfiguration
chartConfiguration) (\s :: FunnelChartVisual
s@FunnelChartVisual' {} Maybe FunnelChartConfiguration
a -> FunnelChartVisual
s {$sel:chartConfiguration:FunnelChartVisual' :: Maybe FunnelChartConfiguration
chartConfiguration = Maybe FunnelChartConfiguration
a} :: FunnelChartVisual)

-- | The column hierarchy that is used during drill-downs and drill-ups.
funnelChartVisual_columnHierarchies :: Lens.Lens' FunnelChartVisual (Prelude.Maybe [ColumnHierarchy])
funnelChartVisual_columnHierarchies :: Lens' FunnelChartVisual (Maybe [ColumnHierarchy])
funnelChartVisual_columnHierarchies = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FunnelChartVisual' {Maybe [ColumnHierarchy]
columnHierarchies :: Maybe [ColumnHierarchy]
$sel:columnHierarchies:FunnelChartVisual' :: FunnelChartVisual -> Maybe [ColumnHierarchy]
columnHierarchies} -> Maybe [ColumnHierarchy]
columnHierarchies) (\s :: FunnelChartVisual
s@FunnelChartVisual' {} Maybe [ColumnHierarchy]
a -> FunnelChartVisual
s {$sel:columnHierarchies:FunnelChartVisual' :: Maybe [ColumnHierarchy]
columnHierarchies = Maybe [ColumnHierarchy]
a} :: FunnelChartVisual) 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.
funnelChartVisual_subtitle :: Lens.Lens' FunnelChartVisual (Prelude.Maybe VisualSubtitleLabelOptions)
funnelChartVisual_subtitle :: Lens' FunnelChartVisual (Maybe VisualSubtitleLabelOptions)
funnelChartVisual_subtitle = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FunnelChartVisual' {Maybe VisualSubtitleLabelOptions
subtitle :: Maybe VisualSubtitleLabelOptions
$sel:subtitle:FunnelChartVisual' :: FunnelChartVisual -> Maybe VisualSubtitleLabelOptions
subtitle} -> Maybe VisualSubtitleLabelOptions
subtitle) (\s :: FunnelChartVisual
s@FunnelChartVisual' {} Maybe VisualSubtitleLabelOptions
a -> FunnelChartVisual
s {$sel:subtitle:FunnelChartVisual' :: Maybe VisualSubtitleLabelOptions
subtitle = Maybe VisualSubtitleLabelOptions
a} :: FunnelChartVisual)

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

-- | 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..
funnelChartVisual_visualId :: Lens.Lens' FunnelChartVisual Prelude.Text
funnelChartVisual_visualId :: Lens' FunnelChartVisual Text
funnelChartVisual_visualId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\FunnelChartVisual' {Text
visualId :: Text
$sel:visualId:FunnelChartVisual' :: FunnelChartVisual -> Text
visualId} -> Text
visualId) (\s :: FunnelChartVisual
s@FunnelChartVisual' {} Text
a -> FunnelChartVisual
s {$sel:visualId:FunnelChartVisual' :: Text
visualId = Text
a} :: FunnelChartVisual)

instance Data.FromJSON FunnelChartVisual where
  parseJSON :: Value -> Parser FunnelChartVisual
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"FunnelChartVisual"
      ( \Object
x ->
          Maybe [VisualCustomAction]
-> Maybe FunnelChartConfiguration
-> Maybe [ColumnHierarchy]
-> Maybe VisualSubtitleLabelOptions
-> Maybe VisualTitleLabelOptions
-> Text
-> FunnelChartVisual
FunnelChartVisual'
            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 FunnelChartVisual where
  hashWithSalt :: Int -> FunnelChartVisual -> Int
hashWithSalt Int
_salt FunnelChartVisual' {Maybe [ColumnHierarchy]
Maybe [VisualCustomAction]
Maybe FunnelChartConfiguration
Maybe VisualSubtitleLabelOptions
Maybe VisualTitleLabelOptions
Text
visualId :: Text
title :: Maybe VisualTitleLabelOptions
subtitle :: Maybe VisualSubtitleLabelOptions
columnHierarchies :: Maybe [ColumnHierarchy]
chartConfiguration :: Maybe FunnelChartConfiguration
actions :: Maybe [VisualCustomAction]
$sel:visualId:FunnelChartVisual' :: FunnelChartVisual -> Text
$sel:title:FunnelChartVisual' :: FunnelChartVisual -> Maybe VisualTitleLabelOptions
$sel:subtitle:FunnelChartVisual' :: FunnelChartVisual -> Maybe VisualSubtitleLabelOptions
$sel:columnHierarchies:FunnelChartVisual' :: FunnelChartVisual -> Maybe [ColumnHierarchy]
$sel:chartConfiguration:FunnelChartVisual' :: FunnelChartVisual -> Maybe FunnelChartConfiguration
$sel:actions:FunnelChartVisual' :: FunnelChartVisual -> 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 FunnelChartConfiguration
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 FunnelChartVisual where
  rnf :: FunnelChartVisual -> ()
rnf FunnelChartVisual' {Maybe [ColumnHierarchy]
Maybe [VisualCustomAction]
Maybe FunnelChartConfiguration
Maybe VisualSubtitleLabelOptions
Maybe VisualTitleLabelOptions
Text
visualId :: Text
title :: Maybe VisualTitleLabelOptions
subtitle :: Maybe VisualSubtitleLabelOptions
columnHierarchies :: Maybe [ColumnHierarchy]
chartConfiguration :: Maybe FunnelChartConfiguration
actions :: Maybe [VisualCustomAction]
$sel:visualId:FunnelChartVisual' :: FunnelChartVisual -> Text
$sel:title:FunnelChartVisual' :: FunnelChartVisual -> Maybe VisualTitleLabelOptions
$sel:subtitle:FunnelChartVisual' :: FunnelChartVisual -> Maybe VisualSubtitleLabelOptions
$sel:columnHierarchies:FunnelChartVisual' :: FunnelChartVisual -> Maybe [ColumnHierarchy]
$sel:chartConfiguration:FunnelChartVisual' :: FunnelChartVisual -> Maybe FunnelChartConfiguration
$sel:actions:FunnelChartVisual' :: FunnelChartVisual -> 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 FunnelChartConfiguration
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 FunnelChartVisual where
  toJSON :: FunnelChartVisual -> Value
toJSON FunnelChartVisual' {Maybe [ColumnHierarchy]
Maybe [VisualCustomAction]
Maybe FunnelChartConfiguration
Maybe VisualSubtitleLabelOptions
Maybe VisualTitleLabelOptions
Text
visualId :: Text
title :: Maybe VisualTitleLabelOptions
subtitle :: Maybe VisualSubtitleLabelOptions
columnHierarchies :: Maybe [ColumnHierarchy]
chartConfiguration :: Maybe FunnelChartConfiguration
actions :: Maybe [VisualCustomAction]
$sel:visualId:FunnelChartVisual' :: FunnelChartVisual -> Text
$sel:title:FunnelChartVisual' :: FunnelChartVisual -> Maybe VisualTitleLabelOptions
$sel:subtitle:FunnelChartVisual' :: FunnelChartVisual -> Maybe VisualSubtitleLabelOptions
$sel:columnHierarchies:FunnelChartVisual' :: FunnelChartVisual -> Maybe [ColumnHierarchy]
$sel:chartConfiguration:FunnelChartVisual' :: FunnelChartVisual -> Maybe FunnelChartConfiguration
$sel:actions:FunnelChartVisual' :: FunnelChartVisual -> 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 FunnelChartConfiguration
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)
          ]
      )