packages feed

amazonka-quicksight-2.0: gen/Amazonka/QuickSight/Types/ParameterControl.hs

{-# 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.ParameterControl
-- 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.ParameterControl 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.ParameterDateTimePickerControl
import Amazonka.QuickSight.Types.ParameterDropDownControl
import Amazonka.QuickSight.Types.ParameterListControl
import Amazonka.QuickSight.Types.ParameterSliderControl
import Amazonka.QuickSight.Types.ParameterTextAreaControl
import Amazonka.QuickSight.Types.ParameterTextFieldControl

-- | The control of a parameter that users can interact with in a dashboard
-- or an analysis.
--
-- This is a union type structure. For this structure to be valid, only one
-- of the attributes can be defined.
--
-- /See:/ 'newParameterControl' smart constructor.
data ParameterControl = ParameterControl'
  { -- | A control from a date parameter that specifies date and time.
    dateTimePicker :: Prelude.Maybe ParameterDateTimePickerControl,
    -- | A control to display a dropdown list with buttons that are used to
    -- select a single value.
    dropdown :: Prelude.Maybe ParameterDropDownControl,
    -- | A control to display a list with buttons or boxes that are used to
    -- select either a single value or multiple values.
    list :: Prelude.Maybe ParameterListControl,
    -- | A control to display a horizontal toggle bar. This is used to change a
    -- value by sliding the toggle.
    slider :: Prelude.Maybe ParameterSliderControl,
    -- | A control to display a text box that is used to enter multiple entries.
    textArea :: Prelude.Maybe ParameterTextAreaControl,
    -- | A control to display a text box that is used to enter a single entry.
    textField :: Prelude.Maybe ParameterTextFieldControl
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ParameterControl' 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:
--
-- 'dateTimePicker', 'parameterControl_dateTimePicker' - A control from a date parameter that specifies date and time.
--
-- 'dropdown', 'parameterControl_dropdown' - A control to display a dropdown list with buttons that are used to
-- select a single value.
--
-- 'list', 'parameterControl_list' - A control to display a list with buttons or boxes that are used to
-- select either a single value or multiple values.
--
-- 'slider', 'parameterControl_slider' - A control to display a horizontal toggle bar. This is used to change a
-- value by sliding the toggle.
--
-- 'textArea', 'parameterControl_textArea' - A control to display a text box that is used to enter multiple entries.
--
-- 'textField', 'parameterControl_textField' - A control to display a text box that is used to enter a single entry.
newParameterControl ::
  ParameterControl
newParameterControl =
  ParameterControl'
    { dateTimePicker = Prelude.Nothing,
      dropdown = Prelude.Nothing,
      list = Prelude.Nothing,
      slider = Prelude.Nothing,
      textArea = Prelude.Nothing,
      textField = Prelude.Nothing
    }

-- | A control from a date parameter that specifies date and time.
parameterControl_dateTimePicker :: Lens.Lens' ParameterControl (Prelude.Maybe ParameterDateTimePickerControl)
parameterControl_dateTimePicker = Lens.lens (\ParameterControl' {dateTimePicker} -> dateTimePicker) (\s@ParameterControl' {} a -> s {dateTimePicker = a} :: ParameterControl)

-- | A control to display a dropdown list with buttons that are used to
-- select a single value.
parameterControl_dropdown :: Lens.Lens' ParameterControl (Prelude.Maybe ParameterDropDownControl)
parameterControl_dropdown = Lens.lens (\ParameterControl' {dropdown} -> dropdown) (\s@ParameterControl' {} a -> s {dropdown = a} :: ParameterControl)

-- | A control to display a list with buttons or boxes that are used to
-- select either a single value or multiple values.
parameterControl_list :: Lens.Lens' ParameterControl (Prelude.Maybe ParameterListControl)
parameterControl_list = Lens.lens (\ParameterControl' {list} -> list) (\s@ParameterControl' {} a -> s {list = a} :: ParameterControl)

-- | A control to display a horizontal toggle bar. This is used to change a
-- value by sliding the toggle.
parameterControl_slider :: Lens.Lens' ParameterControl (Prelude.Maybe ParameterSliderControl)
parameterControl_slider = Lens.lens (\ParameterControl' {slider} -> slider) (\s@ParameterControl' {} a -> s {slider = a} :: ParameterControl)

-- | A control to display a text box that is used to enter multiple entries.
parameterControl_textArea :: Lens.Lens' ParameterControl (Prelude.Maybe ParameterTextAreaControl)
parameterControl_textArea = Lens.lens (\ParameterControl' {textArea} -> textArea) (\s@ParameterControl' {} a -> s {textArea = a} :: ParameterControl)

-- | A control to display a text box that is used to enter a single entry.
parameterControl_textField :: Lens.Lens' ParameterControl (Prelude.Maybe ParameterTextFieldControl)
parameterControl_textField = Lens.lens (\ParameterControl' {textField} -> textField) (\s@ParameterControl' {} a -> s {textField = a} :: ParameterControl)

instance Data.FromJSON ParameterControl where
  parseJSON =
    Data.withObject
      "ParameterControl"
      ( \x ->
          ParameterControl'
            Prelude.<$> (x Data..:? "DateTimePicker")
            Prelude.<*> (x Data..:? "Dropdown")
            Prelude.<*> (x Data..:? "List")
            Prelude.<*> (x Data..:? "Slider")
            Prelude.<*> (x Data..:? "TextArea")
            Prelude.<*> (x Data..:? "TextField")
      )

instance Prelude.Hashable ParameterControl where
  hashWithSalt _salt ParameterControl' {..} =
    _salt
      `Prelude.hashWithSalt` dateTimePicker
      `Prelude.hashWithSalt` dropdown
      `Prelude.hashWithSalt` list
      `Prelude.hashWithSalt` slider
      `Prelude.hashWithSalt` textArea
      `Prelude.hashWithSalt` textField

instance Prelude.NFData ParameterControl where
  rnf ParameterControl' {..} =
    Prelude.rnf dateTimePicker
      `Prelude.seq` Prelude.rnf dropdown
      `Prelude.seq` Prelude.rnf list
      `Prelude.seq` Prelude.rnf slider
      `Prelude.seq` Prelude.rnf textArea
      `Prelude.seq` Prelude.rnf textField

instance Data.ToJSON ParameterControl where
  toJSON ParameterControl' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("DateTimePicker" Data..=)
              Prelude.<$> dateTimePicker,
            ("Dropdown" Data..=) Prelude.<$> dropdown,
            ("List" Data..=) Prelude.<$> list,
            ("Slider" Data..=) Prelude.<$> slider,
            ("TextArea" Data..=) Prelude.<$> textArea,
            ("TextField" Data..=) Prelude.<$> textField
          ]
      )