packages feed

amazonka-amplifyuibuilder-2.0: gen/Amazonka/AmplifyUiBuilder/Types/ComponentProperty.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.AmplifyUiBuilder.Types.ComponentProperty
-- 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.AmplifyUiBuilder.Types.ComponentProperty where

import {-# SOURCE #-} Amazonka.AmplifyUiBuilder.Types.ComponentConditionProperty
import Amazonka.AmplifyUiBuilder.Types.ComponentPropertyBindingProperties
import Amazonka.AmplifyUiBuilder.Types.FormBindingElement
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

-- | Describes the configuration for all of a component\'s properties. Use
-- @ComponentProperty@ to specify the values to render or bind by default.
--
-- /See:/ 'newComponentProperty' smart constructor.
data ComponentProperty = ComponentProperty'
  { -- | The information to bind the component property to data at runtime.
    bindingProperties :: Prelude.Maybe ComponentPropertyBindingProperties,
    -- | The information to bind the component property to form data.
    bindings :: Prelude.Maybe (Prelude.HashMap Prelude.Text FormBindingElement),
    -- | The information to bind the component property to data at runtime. Use
    -- this for collection components.
    collectionBindingProperties :: Prelude.Maybe ComponentPropertyBindingProperties,
    -- | The name of the component that is affected by an event.
    componentName :: Prelude.Maybe Prelude.Text,
    -- | A list of component properties to concatenate to create the value to
    -- assign to this component property.
    concat :: Prelude.Maybe [ComponentProperty],
    -- | The conditional expression to use to assign a value to the component
    -- property.
    condition :: Prelude.Maybe ComponentConditionProperty,
    -- | Specifies whether the user configured the property in Amplify Studio
    -- after importing it.
    configured :: Prelude.Maybe Prelude.Bool,
    -- | The default value to assign to the component property.
    defaultValue :: Prelude.Maybe Prelude.Text,
    -- | An event that occurs in your app. Use this for workflow data binding.
    event :: Prelude.Maybe Prelude.Text,
    -- | The default value assigned to the property when the component is
    -- imported into an app.
    importedValue :: Prelude.Maybe Prelude.Text,
    -- | The data model to use to assign a value to the component property.
    model :: Prelude.Maybe Prelude.Text,
    -- | The name of the component\'s property that is affected by an event.
    property :: Prelude.Maybe Prelude.Text,
    -- | The component type.
    type' :: Prelude.Maybe Prelude.Text,
    -- | An authenticated user attribute to use to assign a value to the
    -- component property.
    userAttribute :: Prelude.Maybe Prelude.Text,
    -- | The value to assign to the component property.
    value :: Prelude.Maybe Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ComponentProperty' 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:
--
-- 'bindingProperties', 'componentProperty_bindingProperties' - The information to bind the component property to data at runtime.
--
-- 'bindings', 'componentProperty_bindings' - The information to bind the component property to form data.
--
-- 'collectionBindingProperties', 'componentProperty_collectionBindingProperties' - The information to bind the component property to data at runtime. Use
-- this for collection components.
--
-- 'componentName', 'componentProperty_componentName' - The name of the component that is affected by an event.
--
-- 'concat', 'componentProperty_concat' - A list of component properties to concatenate to create the value to
-- assign to this component property.
--
-- 'condition', 'componentProperty_condition' - The conditional expression to use to assign a value to the component
-- property.
--
-- 'configured', 'componentProperty_configured' - Specifies whether the user configured the property in Amplify Studio
-- after importing it.
--
-- 'defaultValue', 'componentProperty_defaultValue' - The default value to assign to the component property.
--
-- 'event', 'componentProperty_event' - An event that occurs in your app. Use this for workflow data binding.
--
-- 'importedValue', 'componentProperty_importedValue' - The default value assigned to the property when the component is
-- imported into an app.
--
-- 'model', 'componentProperty_model' - The data model to use to assign a value to the component property.
--
-- 'property', 'componentProperty_property' - The name of the component\'s property that is affected by an event.
--
-- 'type'', 'componentProperty_type' - The component type.
--
-- 'userAttribute', 'componentProperty_userAttribute' - An authenticated user attribute to use to assign a value to the
-- component property.
--
-- 'value', 'componentProperty_value' - The value to assign to the component property.
newComponentProperty ::
  ComponentProperty
newComponentProperty =
  ComponentProperty'
    { bindingProperties =
        Prelude.Nothing,
      bindings = Prelude.Nothing,
      collectionBindingProperties = Prelude.Nothing,
      componentName = Prelude.Nothing,
      concat = Prelude.Nothing,
      condition = Prelude.Nothing,
      configured = Prelude.Nothing,
      defaultValue = Prelude.Nothing,
      event = Prelude.Nothing,
      importedValue = Prelude.Nothing,
      model = Prelude.Nothing,
      property = Prelude.Nothing,
      type' = Prelude.Nothing,
      userAttribute = Prelude.Nothing,
      value = Prelude.Nothing
    }

-- | The information to bind the component property to data at runtime.
componentProperty_bindingProperties :: Lens.Lens' ComponentProperty (Prelude.Maybe ComponentPropertyBindingProperties)
componentProperty_bindingProperties = Lens.lens (\ComponentProperty' {bindingProperties} -> bindingProperties) (\s@ComponentProperty' {} a -> s {bindingProperties = a} :: ComponentProperty)

-- | The information to bind the component property to form data.
componentProperty_bindings :: Lens.Lens' ComponentProperty (Prelude.Maybe (Prelude.HashMap Prelude.Text FormBindingElement))
componentProperty_bindings = Lens.lens (\ComponentProperty' {bindings} -> bindings) (\s@ComponentProperty' {} a -> s {bindings = a} :: ComponentProperty) Prelude.. Lens.mapping Lens.coerced

-- | The information to bind the component property to data at runtime. Use
-- this for collection components.
componentProperty_collectionBindingProperties :: Lens.Lens' ComponentProperty (Prelude.Maybe ComponentPropertyBindingProperties)
componentProperty_collectionBindingProperties = Lens.lens (\ComponentProperty' {collectionBindingProperties} -> collectionBindingProperties) (\s@ComponentProperty' {} a -> s {collectionBindingProperties = a} :: ComponentProperty)

-- | The name of the component that is affected by an event.
componentProperty_componentName :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
componentProperty_componentName = Lens.lens (\ComponentProperty' {componentName} -> componentName) (\s@ComponentProperty' {} a -> s {componentName = a} :: ComponentProperty)

-- | A list of component properties to concatenate to create the value to
-- assign to this component property.
componentProperty_concat :: Lens.Lens' ComponentProperty (Prelude.Maybe [ComponentProperty])
componentProperty_concat = Lens.lens (\ComponentProperty' {concat} -> concat) (\s@ComponentProperty' {} a -> s {concat = a} :: ComponentProperty) Prelude.. Lens.mapping Lens.coerced

-- | The conditional expression to use to assign a value to the component
-- property.
componentProperty_condition :: Lens.Lens' ComponentProperty (Prelude.Maybe ComponentConditionProperty)
componentProperty_condition = Lens.lens (\ComponentProperty' {condition} -> condition) (\s@ComponentProperty' {} a -> s {condition = a} :: ComponentProperty)

-- | Specifies whether the user configured the property in Amplify Studio
-- after importing it.
componentProperty_configured :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Bool)
componentProperty_configured = Lens.lens (\ComponentProperty' {configured} -> configured) (\s@ComponentProperty' {} a -> s {configured = a} :: ComponentProperty)

-- | The default value to assign to the component property.
componentProperty_defaultValue :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
componentProperty_defaultValue = Lens.lens (\ComponentProperty' {defaultValue} -> defaultValue) (\s@ComponentProperty' {} a -> s {defaultValue = a} :: ComponentProperty)

-- | An event that occurs in your app. Use this for workflow data binding.
componentProperty_event :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
componentProperty_event = Lens.lens (\ComponentProperty' {event} -> event) (\s@ComponentProperty' {} a -> s {event = a} :: ComponentProperty)

-- | The default value assigned to the property when the component is
-- imported into an app.
componentProperty_importedValue :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
componentProperty_importedValue = Lens.lens (\ComponentProperty' {importedValue} -> importedValue) (\s@ComponentProperty' {} a -> s {importedValue = a} :: ComponentProperty)

-- | The data model to use to assign a value to the component property.
componentProperty_model :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
componentProperty_model = Lens.lens (\ComponentProperty' {model} -> model) (\s@ComponentProperty' {} a -> s {model = a} :: ComponentProperty)

-- | The name of the component\'s property that is affected by an event.
componentProperty_property :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
componentProperty_property = Lens.lens (\ComponentProperty' {property} -> property) (\s@ComponentProperty' {} a -> s {property = a} :: ComponentProperty)

-- | The component type.
componentProperty_type :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
componentProperty_type = Lens.lens (\ComponentProperty' {type'} -> type') (\s@ComponentProperty' {} a -> s {type' = a} :: ComponentProperty)

-- | An authenticated user attribute to use to assign a value to the
-- component property.
componentProperty_userAttribute :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
componentProperty_userAttribute = Lens.lens (\ComponentProperty' {userAttribute} -> userAttribute) (\s@ComponentProperty' {} a -> s {userAttribute = a} :: ComponentProperty)

-- | The value to assign to the component property.
componentProperty_value :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
componentProperty_value = Lens.lens (\ComponentProperty' {value} -> value) (\s@ComponentProperty' {} a -> s {value = a} :: ComponentProperty)

instance Data.FromJSON ComponentProperty where
  parseJSON =
    Data.withObject
      "ComponentProperty"
      ( \x ->
          ComponentProperty'
            Prelude.<$> (x Data..:? "bindingProperties")
            Prelude.<*> (x Data..:? "bindings" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "collectionBindingProperties")
            Prelude.<*> (x Data..:? "componentName")
            Prelude.<*> (x Data..:? "concat" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "condition")
            Prelude.<*> (x Data..:? "configured")
            Prelude.<*> (x Data..:? "defaultValue")
            Prelude.<*> (x Data..:? "event")
            Prelude.<*> (x Data..:? "importedValue")
            Prelude.<*> (x Data..:? "model")
            Prelude.<*> (x Data..:? "property")
            Prelude.<*> (x Data..:? "type")
            Prelude.<*> (x Data..:? "userAttribute")
            Prelude.<*> (x Data..:? "value")
      )

instance Prelude.Hashable ComponentProperty where
  hashWithSalt _salt ComponentProperty' {..} =
    _salt
      `Prelude.hashWithSalt` bindingProperties
      `Prelude.hashWithSalt` bindings
      `Prelude.hashWithSalt` collectionBindingProperties
      `Prelude.hashWithSalt` componentName
      `Prelude.hashWithSalt` concat
      `Prelude.hashWithSalt` condition
      `Prelude.hashWithSalt` configured
      `Prelude.hashWithSalt` defaultValue
      `Prelude.hashWithSalt` event
      `Prelude.hashWithSalt` importedValue
      `Prelude.hashWithSalt` model
      `Prelude.hashWithSalt` property
      `Prelude.hashWithSalt` type'
      `Prelude.hashWithSalt` userAttribute
      `Prelude.hashWithSalt` value

instance Prelude.NFData ComponentProperty where
  rnf ComponentProperty' {..} =
    Prelude.rnf bindingProperties
      `Prelude.seq` Prelude.rnf bindings
      `Prelude.seq` Prelude.rnf collectionBindingProperties
      `Prelude.seq` Prelude.rnf componentName
      `Prelude.seq` Prelude.rnf concat
      `Prelude.seq` Prelude.rnf condition
      `Prelude.seq` Prelude.rnf configured
      `Prelude.seq` Prelude.rnf defaultValue
      `Prelude.seq` Prelude.rnf event
      `Prelude.seq` Prelude.rnf importedValue
      `Prelude.seq` Prelude.rnf model
      `Prelude.seq` Prelude.rnf property
      `Prelude.seq` Prelude.rnf type'
      `Prelude.seq` Prelude.rnf userAttribute
      `Prelude.seq` Prelude.rnf value

instance Data.ToJSON ComponentProperty where
  toJSON ComponentProperty' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("bindingProperties" Data..=)
              Prelude.<$> bindingProperties,
            ("bindings" Data..=) Prelude.<$> bindings,
            ("collectionBindingProperties" Data..=)
              Prelude.<$> collectionBindingProperties,
            ("componentName" Data..=) Prelude.<$> componentName,
            ("concat" Data..=) Prelude.<$> concat,
            ("condition" Data..=) Prelude.<$> condition,
            ("configured" Data..=) Prelude.<$> configured,
            ("defaultValue" Data..=) Prelude.<$> defaultValue,
            ("event" Data..=) Prelude.<$> event,
            ("importedValue" Data..=) Prelude.<$> importedValue,
            ("model" Data..=) Prelude.<$> model,
            ("property" Data..=) Prelude.<$> property,
            ("type" Data..=) Prelude.<$> type',
            ("userAttribute" Data..=) Prelude.<$> userAttribute,
            ("value" Data..=) Prelude.<$> value
          ]
      )