{-# 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.ColumnTooltipItem
-- 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.ColumnTooltipItem 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.AggregationFunction
import Amazonka.QuickSight.Types.ColumnIdentifier
import Amazonka.QuickSight.Types.Visibility

-- | The tooltip item for the columns that are not part of a field well.
--
-- /See:/ 'newColumnTooltipItem' smart constructor.
data ColumnTooltipItem = ColumnTooltipItem'
  { -- | The aggregation function of the column tooltip item.
    ColumnTooltipItem -> Maybe AggregationFunction
aggregation :: Prelude.Maybe AggregationFunction,
    -- | The label of the tooltip item.
    ColumnTooltipItem -> Maybe Text
label :: Prelude.Maybe Prelude.Text,
    -- | The visibility of the tooltip item.
    ColumnTooltipItem -> Maybe Visibility
visibility :: Prelude.Maybe Visibility,
    -- | The target column of the tooltip item.
    ColumnTooltipItem -> ColumnIdentifier
column :: ColumnIdentifier
  }
  deriving (ColumnTooltipItem -> ColumnTooltipItem -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ColumnTooltipItem -> ColumnTooltipItem -> Bool
$c/= :: ColumnTooltipItem -> ColumnTooltipItem -> Bool
== :: ColumnTooltipItem -> ColumnTooltipItem -> Bool
$c== :: ColumnTooltipItem -> ColumnTooltipItem -> Bool
Prelude.Eq, ReadPrec [ColumnTooltipItem]
ReadPrec ColumnTooltipItem
Int -> ReadS ColumnTooltipItem
ReadS [ColumnTooltipItem]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ColumnTooltipItem]
$creadListPrec :: ReadPrec [ColumnTooltipItem]
readPrec :: ReadPrec ColumnTooltipItem
$creadPrec :: ReadPrec ColumnTooltipItem
readList :: ReadS [ColumnTooltipItem]
$creadList :: ReadS [ColumnTooltipItem]
readsPrec :: Int -> ReadS ColumnTooltipItem
$creadsPrec :: Int -> ReadS ColumnTooltipItem
Prelude.Read, Int -> ColumnTooltipItem -> ShowS
[ColumnTooltipItem] -> ShowS
ColumnTooltipItem -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ColumnTooltipItem] -> ShowS
$cshowList :: [ColumnTooltipItem] -> ShowS
show :: ColumnTooltipItem -> String
$cshow :: ColumnTooltipItem -> String
showsPrec :: Int -> ColumnTooltipItem -> ShowS
$cshowsPrec :: Int -> ColumnTooltipItem -> ShowS
Prelude.Show, forall x. Rep ColumnTooltipItem x -> ColumnTooltipItem
forall x. ColumnTooltipItem -> Rep ColumnTooltipItem x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ColumnTooltipItem x -> ColumnTooltipItem
$cfrom :: forall x. ColumnTooltipItem -> Rep ColumnTooltipItem x
Prelude.Generic)

-- |
-- Create a value of 'ColumnTooltipItem' 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:
--
-- 'aggregation', 'columnTooltipItem_aggregation' - The aggregation function of the column tooltip item.
--
-- 'label', 'columnTooltipItem_label' - The label of the tooltip item.
--
-- 'visibility', 'columnTooltipItem_visibility' - The visibility of the tooltip item.
--
-- 'column', 'columnTooltipItem_column' - The target column of the tooltip item.
newColumnTooltipItem ::
  -- | 'column'
  ColumnIdentifier ->
  ColumnTooltipItem
newColumnTooltipItem :: ColumnIdentifier -> ColumnTooltipItem
newColumnTooltipItem ColumnIdentifier
pColumn_ =
  ColumnTooltipItem'
    { $sel:aggregation:ColumnTooltipItem' :: Maybe AggregationFunction
aggregation = forall a. Maybe a
Prelude.Nothing,
      $sel:label:ColumnTooltipItem' :: Maybe Text
label = forall a. Maybe a
Prelude.Nothing,
      $sel:visibility:ColumnTooltipItem' :: Maybe Visibility
visibility = forall a. Maybe a
Prelude.Nothing,
      $sel:column:ColumnTooltipItem' :: ColumnIdentifier
column = ColumnIdentifier
pColumn_
    }

-- | The aggregation function of the column tooltip item.
columnTooltipItem_aggregation :: Lens.Lens' ColumnTooltipItem (Prelude.Maybe AggregationFunction)
columnTooltipItem_aggregation :: Lens' ColumnTooltipItem (Maybe AggregationFunction)
columnTooltipItem_aggregation = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ColumnTooltipItem' {Maybe AggregationFunction
aggregation :: Maybe AggregationFunction
$sel:aggregation:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe AggregationFunction
aggregation} -> Maybe AggregationFunction
aggregation) (\s :: ColumnTooltipItem
s@ColumnTooltipItem' {} Maybe AggregationFunction
a -> ColumnTooltipItem
s {$sel:aggregation:ColumnTooltipItem' :: Maybe AggregationFunction
aggregation = Maybe AggregationFunction
a} :: ColumnTooltipItem)

-- | The label of the tooltip item.
columnTooltipItem_label :: Lens.Lens' ColumnTooltipItem (Prelude.Maybe Prelude.Text)
columnTooltipItem_label :: Lens' ColumnTooltipItem (Maybe Text)
columnTooltipItem_label = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ColumnTooltipItem' {Maybe Text
label :: Maybe Text
$sel:label:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe Text
label} -> Maybe Text
label) (\s :: ColumnTooltipItem
s@ColumnTooltipItem' {} Maybe Text
a -> ColumnTooltipItem
s {$sel:label:ColumnTooltipItem' :: Maybe Text
label = Maybe Text
a} :: ColumnTooltipItem)

-- | The visibility of the tooltip item.
columnTooltipItem_visibility :: Lens.Lens' ColumnTooltipItem (Prelude.Maybe Visibility)
columnTooltipItem_visibility :: Lens' ColumnTooltipItem (Maybe Visibility)
columnTooltipItem_visibility = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ColumnTooltipItem' {Maybe Visibility
visibility :: Maybe Visibility
$sel:visibility:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe Visibility
visibility} -> Maybe Visibility
visibility) (\s :: ColumnTooltipItem
s@ColumnTooltipItem' {} Maybe Visibility
a -> ColumnTooltipItem
s {$sel:visibility:ColumnTooltipItem' :: Maybe Visibility
visibility = Maybe Visibility
a} :: ColumnTooltipItem)

-- | The target column of the tooltip item.
columnTooltipItem_column :: Lens.Lens' ColumnTooltipItem ColumnIdentifier
columnTooltipItem_column :: Lens' ColumnTooltipItem ColumnIdentifier
columnTooltipItem_column = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ColumnTooltipItem' {ColumnIdentifier
column :: ColumnIdentifier
$sel:column:ColumnTooltipItem' :: ColumnTooltipItem -> ColumnIdentifier
column} -> ColumnIdentifier
column) (\s :: ColumnTooltipItem
s@ColumnTooltipItem' {} ColumnIdentifier
a -> ColumnTooltipItem
s {$sel:column:ColumnTooltipItem' :: ColumnIdentifier
column = ColumnIdentifier
a} :: ColumnTooltipItem)

instance Data.FromJSON ColumnTooltipItem where
  parseJSON :: Value -> Parser ColumnTooltipItem
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ColumnTooltipItem"
      ( \Object
x ->
          Maybe AggregationFunction
-> Maybe Text
-> Maybe Visibility
-> ColumnIdentifier
-> ColumnTooltipItem
ColumnTooltipItem'
            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
"Aggregation")
            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
"Label")
            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
"Visibility")
            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
"Column")
      )

instance Prelude.Hashable ColumnTooltipItem where
  hashWithSalt :: Int -> ColumnTooltipItem -> Int
hashWithSalt Int
_salt ColumnTooltipItem' {Maybe Text
Maybe AggregationFunction
Maybe Visibility
ColumnIdentifier
column :: ColumnIdentifier
visibility :: Maybe Visibility
label :: Maybe Text
aggregation :: Maybe AggregationFunction
$sel:column:ColumnTooltipItem' :: ColumnTooltipItem -> ColumnIdentifier
$sel:visibility:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe Visibility
$sel:label:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe Text
$sel:aggregation:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe AggregationFunction
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AggregationFunction
aggregation
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
label
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Visibility
visibility
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ColumnIdentifier
column

instance Prelude.NFData ColumnTooltipItem where
  rnf :: ColumnTooltipItem -> ()
rnf ColumnTooltipItem' {Maybe Text
Maybe AggregationFunction
Maybe Visibility
ColumnIdentifier
column :: ColumnIdentifier
visibility :: Maybe Visibility
label :: Maybe Text
aggregation :: Maybe AggregationFunction
$sel:column:ColumnTooltipItem' :: ColumnTooltipItem -> ColumnIdentifier
$sel:visibility:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe Visibility
$sel:label:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe Text
$sel:aggregation:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe AggregationFunction
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AggregationFunction
aggregation
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
label
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Visibility
visibility
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ColumnIdentifier
column

instance Data.ToJSON ColumnTooltipItem where
  toJSON :: ColumnTooltipItem -> Value
toJSON ColumnTooltipItem' {Maybe Text
Maybe AggregationFunction
Maybe Visibility
ColumnIdentifier
column :: ColumnIdentifier
visibility :: Maybe Visibility
label :: Maybe Text
aggregation :: Maybe AggregationFunction
$sel:column:ColumnTooltipItem' :: ColumnTooltipItem -> ColumnIdentifier
$sel:visibility:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe Visibility
$sel:label:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe Text
$sel:aggregation:ColumnTooltipItem' :: ColumnTooltipItem -> Maybe AggregationFunction
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"Aggregation" 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 AggregationFunction
aggregation,
            (Key
"Label" 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 Text
label,
            (Key
"Visibility" 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 Visibility
visibility,
            forall a. a -> Maybe a
Prelude.Just (Key
"Column" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= ColumnIdentifier
column)
          ]
      )