{-# 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.PivotTableConfiguration
-- 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.PivotTableConfiguration 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.PivotTableFieldOptions
import Amazonka.QuickSight.Types.PivotTableFieldWells
import Amazonka.QuickSight.Types.PivotTableOptions
import Amazonka.QuickSight.Types.PivotTablePaginatedReportOptions
import Amazonka.QuickSight.Types.PivotTableSortConfiguration
import Amazonka.QuickSight.Types.PivotTableTotalOptions

-- | The configuration for a @PivotTableVisual@.
--
-- /See:/ 'newPivotTableConfiguration' smart constructor.
data PivotTableConfiguration = PivotTableConfiguration'
  { -- | The field options for a pivot table visual.
    PivotTableConfiguration -> Maybe PivotTableFieldOptions
fieldOptions :: Prelude.Maybe PivotTableFieldOptions,
    -- | The field wells of the visual.
    PivotTableConfiguration -> Maybe PivotTableFieldWells
fieldWells :: Prelude.Maybe PivotTableFieldWells,
    -- | The paginated report options for a pivot table visual.
    PivotTableConfiguration -> Maybe PivotTablePaginatedReportOptions
paginatedReportOptions :: Prelude.Maybe PivotTablePaginatedReportOptions,
    -- | The sort configuration for a @PivotTableVisual@.
    PivotTableConfiguration -> Maybe PivotTableSortConfiguration
sortConfiguration :: Prelude.Maybe PivotTableSortConfiguration,
    -- | The table options for a pivot table visual.
    PivotTableConfiguration -> Maybe PivotTableOptions
tableOptions :: Prelude.Maybe PivotTableOptions,
    -- | The total options for a pivot table visual.
    PivotTableConfiguration -> Maybe PivotTableTotalOptions
totalOptions :: Prelude.Maybe PivotTableTotalOptions
  }
  deriving (PivotTableConfiguration -> PivotTableConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PivotTableConfiguration -> PivotTableConfiguration -> Bool
$c/= :: PivotTableConfiguration -> PivotTableConfiguration -> Bool
== :: PivotTableConfiguration -> PivotTableConfiguration -> Bool
$c== :: PivotTableConfiguration -> PivotTableConfiguration -> Bool
Prelude.Eq, Int -> PivotTableConfiguration -> ShowS
[PivotTableConfiguration] -> ShowS
PivotTableConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PivotTableConfiguration] -> ShowS
$cshowList :: [PivotTableConfiguration] -> ShowS
show :: PivotTableConfiguration -> String
$cshow :: PivotTableConfiguration -> String
showsPrec :: Int -> PivotTableConfiguration -> ShowS
$cshowsPrec :: Int -> PivotTableConfiguration -> ShowS
Prelude.Show, forall x. Rep PivotTableConfiguration x -> PivotTableConfiguration
forall x. PivotTableConfiguration -> Rep PivotTableConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep PivotTableConfiguration x -> PivotTableConfiguration
$cfrom :: forall x. PivotTableConfiguration -> Rep PivotTableConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'PivotTableConfiguration' 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:
--
-- 'fieldOptions', 'pivotTableConfiguration_fieldOptions' - The field options for a pivot table visual.
--
-- 'fieldWells', 'pivotTableConfiguration_fieldWells' - The field wells of the visual.
--
-- 'paginatedReportOptions', 'pivotTableConfiguration_paginatedReportOptions' - The paginated report options for a pivot table visual.
--
-- 'sortConfiguration', 'pivotTableConfiguration_sortConfiguration' - The sort configuration for a @PivotTableVisual@.
--
-- 'tableOptions', 'pivotTableConfiguration_tableOptions' - The table options for a pivot table visual.
--
-- 'totalOptions', 'pivotTableConfiguration_totalOptions' - The total options for a pivot table visual.
newPivotTableConfiguration ::
  PivotTableConfiguration
newPivotTableConfiguration :: PivotTableConfiguration
newPivotTableConfiguration =
  PivotTableConfiguration'
    { $sel:fieldOptions:PivotTableConfiguration' :: Maybe PivotTableFieldOptions
fieldOptions =
        forall a. Maybe a
Prelude.Nothing,
      $sel:fieldWells:PivotTableConfiguration' :: Maybe PivotTableFieldWells
fieldWells = forall a. Maybe a
Prelude.Nothing,
      $sel:paginatedReportOptions:PivotTableConfiguration' :: Maybe PivotTablePaginatedReportOptions
paginatedReportOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:sortConfiguration:PivotTableConfiguration' :: Maybe PivotTableSortConfiguration
sortConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:tableOptions:PivotTableConfiguration' :: Maybe PivotTableOptions
tableOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:totalOptions:PivotTableConfiguration' :: Maybe PivotTableTotalOptions
totalOptions = forall a. Maybe a
Prelude.Nothing
    }

-- | The field options for a pivot table visual.
pivotTableConfiguration_fieldOptions :: Lens.Lens' PivotTableConfiguration (Prelude.Maybe PivotTableFieldOptions)
pivotTableConfiguration_fieldOptions :: Lens' PivotTableConfiguration (Maybe PivotTableFieldOptions)
pivotTableConfiguration_fieldOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PivotTableConfiguration' {Maybe PivotTableFieldOptions
fieldOptions :: Maybe PivotTableFieldOptions
$sel:fieldOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableFieldOptions
fieldOptions} -> Maybe PivotTableFieldOptions
fieldOptions) (\s :: PivotTableConfiguration
s@PivotTableConfiguration' {} Maybe PivotTableFieldOptions
a -> PivotTableConfiguration
s {$sel:fieldOptions:PivotTableConfiguration' :: Maybe PivotTableFieldOptions
fieldOptions = Maybe PivotTableFieldOptions
a} :: PivotTableConfiguration)

-- | The field wells of the visual.
pivotTableConfiguration_fieldWells :: Lens.Lens' PivotTableConfiguration (Prelude.Maybe PivotTableFieldWells)
pivotTableConfiguration_fieldWells :: Lens' PivotTableConfiguration (Maybe PivotTableFieldWells)
pivotTableConfiguration_fieldWells = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PivotTableConfiguration' {Maybe PivotTableFieldWells
fieldWells :: Maybe PivotTableFieldWells
$sel:fieldWells:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableFieldWells
fieldWells} -> Maybe PivotTableFieldWells
fieldWells) (\s :: PivotTableConfiguration
s@PivotTableConfiguration' {} Maybe PivotTableFieldWells
a -> PivotTableConfiguration
s {$sel:fieldWells:PivotTableConfiguration' :: Maybe PivotTableFieldWells
fieldWells = Maybe PivotTableFieldWells
a} :: PivotTableConfiguration)

-- | The paginated report options for a pivot table visual.
pivotTableConfiguration_paginatedReportOptions :: Lens.Lens' PivotTableConfiguration (Prelude.Maybe PivotTablePaginatedReportOptions)
pivotTableConfiguration_paginatedReportOptions :: Lens'
  PivotTableConfiguration (Maybe PivotTablePaginatedReportOptions)
pivotTableConfiguration_paginatedReportOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PivotTableConfiguration' {Maybe PivotTablePaginatedReportOptions
paginatedReportOptions :: Maybe PivotTablePaginatedReportOptions
$sel:paginatedReportOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTablePaginatedReportOptions
paginatedReportOptions} -> Maybe PivotTablePaginatedReportOptions
paginatedReportOptions) (\s :: PivotTableConfiguration
s@PivotTableConfiguration' {} Maybe PivotTablePaginatedReportOptions
a -> PivotTableConfiguration
s {$sel:paginatedReportOptions:PivotTableConfiguration' :: Maybe PivotTablePaginatedReportOptions
paginatedReportOptions = Maybe PivotTablePaginatedReportOptions
a} :: PivotTableConfiguration)

-- | The sort configuration for a @PivotTableVisual@.
pivotTableConfiguration_sortConfiguration :: Lens.Lens' PivotTableConfiguration (Prelude.Maybe PivotTableSortConfiguration)
pivotTableConfiguration_sortConfiguration :: Lens' PivotTableConfiguration (Maybe PivotTableSortConfiguration)
pivotTableConfiguration_sortConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PivotTableConfiguration' {Maybe PivotTableSortConfiguration
sortConfiguration :: Maybe PivotTableSortConfiguration
$sel:sortConfiguration:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableSortConfiguration
sortConfiguration} -> Maybe PivotTableSortConfiguration
sortConfiguration) (\s :: PivotTableConfiguration
s@PivotTableConfiguration' {} Maybe PivotTableSortConfiguration
a -> PivotTableConfiguration
s {$sel:sortConfiguration:PivotTableConfiguration' :: Maybe PivotTableSortConfiguration
sortConfiguration = Maybe PivotTableSortConfiguration
a} :: PivotTableConfiguration)

-- | The table options for a pivot table visual.
pivotTableConfiguration_tableOptions :: Lens.Lens' PivotTableConfiguration (Prelude.Maybe PivotTableOptions)
pivotTableConfiguration_tableOptions :: Lens' PivotTableConfiguration (Maybe PivotTableOptions)
pivotTableConfiguration_tableOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PivotTableConfiguration' {Maybe PivotTableOptions
tableOptions :: Maybe PivotTableOptions
$sel:tableOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableOptions
tableOptions} -> Maybe PivotTableOptions
tableOptions) (\s :: PivotTableConfiguration
s@PivotTableConfiguration' {} Maybe PivotTableOptions
a -> PivotTableConfiguration
s {$sel:tableOptions:PivotTableConfiguration' :: Maybe PivotTableOptions
tableOptions = Maybe PivotTableOptions
a} :: PivotTableConfiguration)

-- | The total options for a pivot table visual.
pivotTableConfiguration_totalOptions :: Lens.Lens' PivotTableConfiguration (Prelude.Maybe PivotTableTotalOptions)
pivotTableConfiguration_totalOptions :: Lens' PivotTableConfiguration (Maybe PivotTableTotalOptions)
pivotTableConfiguration_totalOptions = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\PivotTableConfiguration' {Maybe PivotTableTotalOptions
totalOptions :: Maybe PivotTableTotalOptions
$sel:totalOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableTotalOptions
totalOptions} -> Maybe PivotTableTotalOptions
totalOptions) (\s :: PivotTableConfiguration
s@PivotTableConfiguration' {} Maybe PivotTableTotalOptions
a -> PivotTableConfiguration
s {$sel:totalOptions:PivotTableConfiguration' :: Maybe PivotTableTotalOptions
totalOptions = Maybe PivotTableTotalOptions
a} :: PivotTableConfiguration)

instance Data.FromJSON PivotTableConfiguration where
  parseJSON :: Value -> Parser PivotTableConfiguration
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"PivotTableConfiguration"
      ( \Object
x ->
          Maybe PivotTableFieldOptions
-> Maybe PivotTableFieldWells
-> Maybe PivotTablePaginatedReportOptions
-> Maybe PivotTableSortConfiguration
-> Maybe PivotTableOptions
-> Maybe PivotTableTotalOptions
-> PivotTableConfiguration
PivotTableConfiguration'
            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
"FieldOptions")
            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
"FieldWells")
            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
"PaginatedReportOptions")
            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
"SortConfiguration")
            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
"TableOptions")
            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
"TotalOptions")
      )

instance Prelude.Hashable PivotTableConfiguration where
  hashWithSalt :: Int -> PivotTableConfiguration -> Int
hashWithSalt Int
_salt PivotTableConfiguration' {Maybe PivotTableSortConfiguration
Maybe PivotTableFieldWells
Maybe PivotTableTotalOptions
Maybe PivotTablePaginatedReportOptions
Maybe PivotTableFieldOptions
Maybe PivotTableOptions
totalOptions :: Maybe PivotTableTotalOptions
tableOptions :: Maybe PivotTableOptions
sortConfiguration :: Maybe PivotTableSortConfiguration
paginatedReportOptions :: Maybe PivotTablePaginatedReportOptions
fieldWells :: Maybe PivotTableFieldWells
fieldOptions :: Maybe PivotTableFieldOptions
$sel:totalOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableTotalOptions
$sel:tableOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableOptions
$sel:sortConfiguration:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableSortConfiguration
$sel:paginatedReportOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTablePaginatedReportOptions
$sel:fieldWells:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableFieldWells
$sel:fieldOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableFieldOptions
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PivotTableFieldOptions
fieldOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PivotTableFieldWells
fieldWells
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PivotTablePaginatedReportOptions
paginatedReportOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PivotTableSortConfiguration
sortConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PivotTableOptions
tableOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe PivotTableTotalOptions
totalOptions

instance Prelude.NFData PivotTableConfiguration where
  rnf :: PivotTableConfiguration -> ()
rnf PivotTableConfiguration' {Maybe PivotTableSortConfiguration
Maybe PivotTableFieldWells
Maybe PivotTableTotalOptions
Maybe PivotTablePaginatedReportOptions
Maybe PivotTableFieldOptions
Maybe PivotTableOptions
totalOptions :: Maybe PivotTableTotalOptions
tableOptions :: Maybe PivotTableOptions
sortConfiguration :: Maybe PivotTableSortConfiguration
paginatedReportOptions :: Maybe PivotTablePaginatedReportOptions
fieldWells :: Maybe PivotTableFieldWells
fieldOptions :: Maybe PivotTableFieldOptions
$sel:totalOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableTotalOptions
$sel:tableOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableOptions
$sel:sortConfiguration:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableSortConfiguration
$sel:paginatedReportOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTablePaginatedReportOptions
$sel:fieldWells:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableFieldWells
$sel:fieldOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableFieldOptions
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe PivotTableFieldOptions
fieldOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PivotTableFieldWells
fieldWells
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PivotTablePaginatedReportOptions
paginatedReportOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PivotTableSortConfiguration
sortConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PivotTableOptions
tableOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe PivotTableTotalOptions
totalOptions

instance Data.ToJSON PivotTableConfiguration where
  toJSON :: PivotTableConfiguration -> Value
toJSON PivotTableConfiguration' {Maybe PivotTableSortConfiguration
Maybe PivotTableFieldWells
Maybe PivotTableTotalOptions
Maybe PivotTablePaginatedReportOptions
Maybe PivotTableFieldOptions
Maybe PivotTableOptions
totalOptions :: Maybe PivotTableTotalOptions
tableOptions :: Maybe PivotTableOptions
sortConfiguration :: Maybe PivotTableSortConfiguration
paginatedReportOptions :: Maybe PivotTablePaginatedReportOptions
fieldWells :: Maybe PivotTableFieldWells
fieldOptions :: Maybe PivotTableFieldOptions
$sel:totalOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableTotalOptions
$sel:tableOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableOptions
$sel:sortConfiguration:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableSortConfiguration
$sel:paginatedReportOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTablePaginatedReportOptions
$sel:fieldWells:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableFieldWells
$sel:fieldOptions:PivotTableConfiguration' :: PivotTableConfiguration -> Maybe PivotTableFieldOptions
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ (Key
"FieldOptions" 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 PivotTableFieldOptions
fieldOptions,
            (Key
"FieldWells" 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 PivotTableFieldWells
fieldWells,
            (Key
"PaginatedReportOptions" 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 PivotTablePaginatedReportOptions
paginatedReportOptions,
            (Key
"SortConfiguration" 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 PivotTableSortConfiguration
sortConfiguration,
            (Key
"TableOptions" 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 PivotTableOptions
tableOptions,
            (Key
"TotalOptions" 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 PivotTableTotalOptions
totalOptions
          ]
      )