{-# 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.TableConfiguration
-- 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.TableConfiguration 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.TableFieldOptions
import Amazonka.QuickSight.Types.TableFieldWells
import Amazonka.QuickSight.Types.TableOptions
import Amazonka.QuickSight.Types.TablePaginatedReportOptions
import Amazonka.QuickSight.Types.TableSortConfiguration
import Amazonka.QuickSight.Types.TotalOptions

-- | The configuration for a @TableVisual@.
--
-- /See:/ 'newTableConfiguration' smart constructor.
data TableConfiguration = TableConfiguration'
  { -- | The field options for a table visual.
    TableConfiguration -> Maybe TableFieldOptions
fieldOptions :: Prelude.Maybe TableFieldOptions,
    -- | The field wells of the visual.
    TableConfiguration -> Maybe TableFieldWells
fieldWells :: Prelude.Maybe TableFieldWells,
    -- | The paginated report options for a table visual.
    TableConfiguration -> Maybe TablePaginatedReportOptions
paginatedReportOptions :: Prelude.Maybe TablePaginatedReportOptions,
    -- | The sort configuration for a @TableVisual@.
    TableConfiguration -> Maybe TableSortConfiguration
sortConfiguration :: Prelude.Maybe TableSortConfiguration,
    -- | The table options for a table visual.
    TableConfiguration -> Maybe TableOptions
tableOptions :: Prelude.Maybe TableOptions,
    -- | The total options for a table visual.
    TableConfiguration -> Maybe TotalOptions
totalOptions :: Prelude.Maybe TotalOptions
  }
  deriving (TableConfiguration -> TableConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TableConfiguration -> TableConfiguration -> Bool
$c/= :: TableConfiguration -> TableConfiguration -> Bool
== :: TableConfiguration -> TableConfiguration -> Bool
$c== :: TableConfiguration -> TableConfiguration -> Bool
Prelude.Eq, Int -> TableConfiguration -> ShowS
[TableConfiguration] -> ShowS
TableConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TableConfiguration] -> ShowS
$cshowList :: [TableConfiguration] -> ShowS
show :: TableConfiguration -> String
$cshow :: TableConfiguration -> String
showsPrec :: Int -> TableConfiguration -> ShowS
$cshowsPrec :: Int -> TableConfiguration -> ShowS
Prelude.Show, forall x. Rep TableConfiguration x -> TableConfiguration
forall x. TableConfiguration -> Rep TableConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TableConfiguration x -> TableConfiguration
$cfrom :: forall x. TableConfiguration -> Rep TableConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'TableConfiguration' 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', 'tableConfiguration_fieldOptions' - The field options for a table visual.
--
-- 'fieldWells', 'tableConfiguration_fieldWells' - The field wells of the visual.
--
-- 'paginatedReportOptions', 'tableConfiguration_paginatedReportOptions' - The paginated report options for a table visual.
--
-- 'sortConfiguration', 'tableConfiguration_sortConfiguration' - The sort configuration for a @TableVisual@.
--
-- 'tableOptions', 'tableConfiguration_tableOptions' - The table options for a table visual.
--
-- 'totalOptions', 'tableConfiguration_totalOptions' - The total options for a table visual.
newTableConfiguration ::
  TableConfiguration
newTableConfiguration :: TableConfiguration
newTableConfiguration =
  TableConfiguration'
    { $sel:fieldOptions:TableConfiguration' :: Maybe TableFieldOptions
fieldOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:fieldWells:TableConfiguration' :: Maybe TableFieldWells
fieldWells = forall a. Maybe a
Prelude.Nothing,
      $sel:paginatedReportOptions:TableConfiguration' :: Maybe TablePaginatedReportOptions
paginatedReportOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:sortConfiguration:TableConfiguration' :: Maybe TableSortConfiguration
sortConfiguration = forall a. Maybe a
Prelude.Nothing,
      $sel:tableOptions:TableConfiguration' :: Maybe TableOptions
tableOptions = forall a. Maybe a
Prelude.Nothing,
      $sel:totalOptions:TableConfiguration' :: Maybe TotalOptions
totalOptions = forall a. Maybe a
Prelude.Nothing
    }

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

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

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

-- | The sort configuration for a @TableVisual@.
tableConfiguration_sortConfiguration :: Lens.Lens' TableConfiguration (Prelude.Maybe TableSortConfiguration)
tableConfiguration_sortConfiguration :: Lens' TableConfiguration (Maybe TableSortConfiguration)
tableConfiguration_sortConfiguration = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TableConfiguration' {Maybe TableSortConfiguration
sortConfiguration :: Maybe TableSortConfiguration
$sel:sortConfiguration:TableConfiguration' :: TableConfiguration -> Maybe TableSortConfiguration
sortConfiguration} -> Maybe TableSortConfiguration
sortConfiguration) (\s :: TableConfiguration
s@TableConfiguration' {} Maybe TableSortConfiguration
a -> TableConfiguration
s {$sel:sortConfiguration:TableConfiguration' :: Maybe TableSortConfiguration
sortConfiguration = Maybe TableSortConfiguration
a} :: TableConfiguration)

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

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

instance Data.FromJSON TableConfiguration where
  parseJSON :: Value -> Parser TableConfiguration
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"TableConfiguration"
      ( \Object
x ->
          Maybe TableFieldOptions
-> Maybe TableFieldWells
-> Maybe TablePaginatedReportOptions
-> Maybe TableSortConfiguration
-> Maybe TableOptions
-> Maybe TotalOptions
-> TableConfiguration
TableConfiguration'
            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 TableConfiguration where
  hashWithSalt :: Int -> TableConfiguration -> Int
hashWithSalt Int
_salt TableConfiguration' {Maybe TableSortConfiguration
Maybe TableFieldWells
Maybe TablePaginatedReportOptions
Maybe TableFieldOptions
Maybe TotalOptions
Maybe TableOptions
totalOptions :: Maybe TotalOptions
tableOptions :: Maybe TableOptions
sortConfiguration :: Maybe TableSortConfiguration
paginatedReportOptions :: Maybe TablePaginatedReportOptions
fieldWells :: Maybe TableFieldWells
fieldOptions :: Maybe TableFieldOptions
$sel:totalOptions:TableConfiguration' :: TableConfiguration -> Maybe TotalOptions
$sel:tableOptions:TableConfiguration' :: TableConfiguration -> Maybe TableOptions
$sel:sortConfiguration:TableConfiguration' :: TableConfiguration -> Maybe TableSortConfiguration
$sel:paginatedReportOptions:TableConfiguration' :: TableConfiguration -> Maybe TablePaginatedReportOptions
$sel:fieldWells:TableConfiguration' :: TableConfiguration -> Maybe TableFieldWells
$sel:fieldOptions:TableConfiguration' :: TableConfiguration -> Maybe TableFieldOptions
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TableFieldOptions
fieldOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TableFieldWells
fieldWells
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TablePaginatedReportOptions
paginatedReportOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TableSortConfiguration
sortConfiguration
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TableOptions
tableOptions
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe TotalOptions
totalOptions

instance Prelude.NFData TableConfiguration where
  rnf :: TableConfiguration -> ()
rnf TableConfiguration' {Maybe TableSortConfiguration
Maybe TableFieldWells
Maybe TablePaginatedReportOptions
Maybe TableFieldOptions
Maybe TotalOptions
Maybe TableOptions
totalOptions :: Maybe TotalOptions
tableOptions :: Maybe TableOptions
sortConfiguration :: Maybe TableSortConfiguration
paginatedReportOptions :: Maybe TablePaginatedReportOptions
fieldWells :: Maybe TableFieldWells
fieldOptions :: Maybe TableFieldOptions
$sel:totalOptions:TableConfiguration' :: TableConfiguration -> Maybe TotalOptions
$sel:tableOptions:TableConfiguration' :: TableConfiguration -> Maybe TableOptions
$sel:sortConfiguration:TableConfiguration' :: TableConfiguration -> Maybe TableSortConfiguration
$sel:paginatedReportOptions:TableConfiguration' :: TableConfiguration -> Maybe TablePaginatedReportOptions
$sel:fieldWells:TableConfiguration' :: TableConfiguration -> Maybe TableFieldWells
$sel:fieldOptions:TableConfiguration' :: TableConfiguration -> Maybe TableFieldOptions
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe TableFieldOptions
fieldOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TableFieldWells
fieldWells
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TablePaginatedReportOptions
paginatedReportOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TableSortConfiguration
sortConfiguration
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TableOptions
tableOptions
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe TotalOptions
totalOptions

instance Data.ToJSON TableConfiguration where
  toJSON :: TableConfiguration -> Value
toJSON TableConfiguration' {Maybe TableSortConfiguration
Maybe TableFieldWells
Maybe TablePaginatedReportOptions
Maybe TableFieldOptions
Maybe TotalOptions
Maybe TableOptions
totalOptions :: Maybe TotalOptions
tableOptions :: Maybe TableOptions
sortConfiguration :: Maybe TableSortConfiguration
paginatedReportOptions :: Maybe TablePaginatedReportOptions
fieldWells :: Maybe TableFieldWells
fieldOptions :: Maybe TableFieldOptions
$sel:totalOptions:TableConfiguration' :: TableConfiguration -> Maybe TotalOptions
$sel:tableOptions:TableConfiguration' :: TableConfiguration -> Maybe TableOptions
$sel:sortConfiguration:TableConfiguration' :: TableConfiguration -> Maybe TableSortConfiguration
$sel:paginatedReportOptions:TableConfiguration' :: TableConfiguration -> Maybe TablePaginatedReportOptions
$sel:fieldWells:TableConfiguration' :: TableConfiguration -> Maybe TableFieldWells
$sel:fieldOptions:TableConfiguration' :: TableConfiguration -> Maybe TableFieldOptions
..} =
    [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 TableFieldOptions
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 TableFieldWells
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 TablePaginatedReportOptions
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 TableSortConfiguration
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 TableOptions
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 TotalOptions
totalOptions
          ]
      )