diff --git a/datadog/resource_datadog_dashboard.go b/datadog/resource_datadog_dashboard.go
index dddc9335d..1f8ef5af7 100644
--- a/datadog/resource_datadog_dashboard.go
+++ b/datadog/resource_datadog_dashboard.go
@@ -8260,8 +8260,59 @@ func getToplistRequestSchema() map[string]*schema.Schema {
Schema: getWidgetRequestStyle(),
},
},
+ "sort": getToplistRequestSortSchema(),
}
}
+
+func getToplistRequestSortSchema() *schema.Schema {
+ return &schema.Schema{
+ Description: "The controls for sorting the widget.",
+ Type: schema.TypeList,
+ Optional: true,
+ MaxItems: 1,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "count": {
+ Description: "The number of items to limit the widget to.",
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "order_by": {
+ Description: "The array of items to sort the widget by in order.",
+ Type: schema.TypeList,
+ Optional: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "index": {
+ Description: "The index of the formula to sort by.",
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "order": {
+ Description: "Widget sorting methods. Allowed enum values: `asc`, `desc`",
+ Type: schema.TypeString,
+ Required: true,
+ ValidateDiagFunc: validators.ValidateEnumValue(datadogV1.NewWidgetSortFromValue),
+ },
+ "type": {
+ Description: "Set the sort type to formula. Allowed enum values: `formula`",
+ Type: schema.TypeString,
+ Required: true,
+ ValidateDiagFunc: validators.ValidateStringEnumValue(datadogV1.FORMULATYPE_FORMULA, datadogV1.GROUPTYPE_GROUP),
+ },
+ "name": {
+ Description: "The name of the group.",
+ Type: schema.TypeString,
+ Optional: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+}
+
func buildDatadogToplistRequests(terraformRequests *[]interface{}) *[]datadogV1.ToplistWidgetRequest {
datadogRequests := make([]datadogV1.ToplistWidgetRequest, len(*terraformRequests))
for i, r := range *terraformRequests {
@@ -8329,10 +8380,49 @@ func buildDatadogToplistRequests(terraformRequests *[]interface{}) *[]datadogV1.
datadogToplistRequest.Style = buildDatadogWidgetRequestStyle(v)
}
}
+
+ if v, ok := terraformRequest["sort"].([]interface{}); ok && len(v) > 0 {
+ sort := v[0].(map[string]interface{})
+ datadogToplistRequest.Sort = buildDatadogToplistSortBy(sort)
+ }
datadogRequests[i] = *datadogToplistRequest
}
return &datadogRequests
}
+
+func buildDatadogToplistSortBy(terraformSort map[string]interface{}) *datadogV1.WidgetSortBy {
+ datadogSortBy := datadogV1.NewWidgetSortBy()
+
+ if count, ok := terraformSort["count"].(int); ok {
+ datadogSortBy.SetCount(int64(count))
+ }
+
+ if orderByList, ok := terraformSort["order_by"].([]interface{}); ok && len(orderByList) > 0 {
+ orderBy := make([]datadogV1.WidgetSortOrderBy, len(orderByList))
+
+ for i, item := range orderByList {
+ itemMap := item.(map[string]interface{})
+ order := itemMap["order"].(string)
+ widgetSortOrder := datadogV1.WidgetSort(order)
+ sortType := itemMap["type"].(string)
+
+ if sortType == string(datadogV1.FORMULATYPE_FORMULA) {
+ index := int64(itemMap["index"].(int))
+ formula := datadogV1.NewWidgetFormulaSort(index, widgetSortOrder, datadogV1.FORMULATYPE_FORMULA)
+ orderBy[i] = datadogV1.WidgetFormulaSortAsWidgetSortOrderBy(formula)
+ } else if sortType == string(datadogV1.GROUPTYPE_GROUP) {
+ name := itemMap["name"].(string)
+ group := datadogV1.NewWidgetGroupSort(name, widgetSortOrder, datadogV1.GROUPTYPE_GROUP)
+ orderBy[i] = datadogV1.WidgetGroupSortAsWidgetSortOrderBy(group)
+ }
+ }
+
+ datadogSortBy.SetOrderBy(orderBy)
+ }
+
+ return datadogSortBy
+}
+
func buildTerraformToplistRequests(datadogToplistRequests *[]datadogV1.ToplistWidgetRequest) *[]map[string]interface{} {
terraformRequests := make([]map[string]interface{}, len(*datadogToplistRequests))
for i, datadogRequest := range *datadogToplistRequests {
@@ -8373,11 +8463,51 @@ func buildTerraformToplistRequests(datadogToplistRequests *[]datadogV1.ToplistWi
style := buildTerraformWidgetRequestStyle(*v)
terraformRequest["style"] = []map[string]interface{}{style}
}
+ if v, ok := datadogRequest.GetSortOk(); ok {
+ sort := buildTerraformToplistWidgetSort(*v)
+ terraformRequest["sort"] = []map[string]interface{}{sort}
+ }
terraformRequests[i] = terraformRequest
}
return &terraformRequests
}
+func buildTerraformToplistWidgetSort(datadogSort datadogV1.WidgetSortBy) map[string]interface{} {
+ terraformSort := make(map[string]interface{})
+
+ if count, ok := datadogSort.GetCountOk(); ok {
+ terraformSort["count"] = int(*count)
+ }
+
+ if orderByList, ok := datadogSort.GetOrderByOk(); ok && len(*orderByList) > 0 {
+ terraformOrderBy := make([]map[string]interface{}, len(*orderByList))
+
+ for i, item := range *orderByList {
+ orderByItem := make(map[string]interface{})
+
+ if formula := item.WidgetFormulaSort; formula != nil {
+ orderByItem["type"] = string(formula.GetType())
+ orderByItem["order"] = string(formula.GetOrder())
+ if index, ok := formula.GetIndexOk(); ok {
+ orderByItem["index"] = int(*index)
+ }
+ } else if group := item.WidgetGroupSort; group != nil {
+ orderByItem["type"] = string(group.GetType())
+ orderByItem["order"] = string(group.GetOrder())
+ if name, ok := group.GetNameOk(); ok {
+ orderByItem["name"] = *name
+ }
+ }
+
+ terraformOrderBy[i] = orderByItem
+ }
+
+ terraformSort["order_by"] = terraformOrderBy
+ }
+
+ return terraformSort
+}
+
func buildTerraformToplistWidgetStyle(datadogToplistStyle *datadogV1.ToplistWidgetStyle) *[]map[string]interface{} {
terraformStyles := make([]map[string]interface{}, 1)
terraformStyle := map[string]interface{}{}
diff --git a/docs/resources/dashboard.md b/docs/resources/dashboard.md
index b7c1f58ef..c39784d58 100644
--- a/docs/resources/dashboard.md
+++ b/docs/resources/dashboard.md
@@ -12854,6 +12854,7 @@ Optional:
- `query` (Block List) (see [below for nested schema](#nestedblock--widget--group_definition--widget--split_graph_definition--source_widget_definition--toplist_definition--request--query))
- `rum_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--group_definition--widget--split_graph_definition--source_widget_definition--toplist_definition--request--rum_query))
- `security_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--group_definition--widget--split_graph_definition--source_widget_definition--toplist_definition--request--security_query))
+- `sort` (Block List, Max: 1) The controls for sorting the widget. (see [below for nested schema](#nestedblock--widget--group_definition--widget--split_graph_definition--source_widget_definition--toplist_definition--request--sort))
- `style` (Block List, Max: 1) Define request for the widget's style. (see [below for nested schema](#nestedblock--widget--group_definition--widget--split_graph_definition--source_widget_definition--toplist_definition--request--style))
@@ -13501,6 +13502,29 @@ Optional:
+
+### Nested Schema for `widget.group_definition.widget.split_graph_definition.source_widget_definition.toplist_definition.request.sort`
+
+Optional:
+
+- `count` (Number) The number of items to limit the widget to.
+- `order_by` (Block List) The array of items to sort the widget by in order. (see [below for nested schema](#nestedblock--widget--group_definition--widget--split_graph_definition--source_widget_definition--toplist_definition--request--sort--order_by))
+
+
+### Nested Schema for `widget.group_definition.widget.split_graph_definition.source_widget_definition.toplist_definition.request.sort.order_by`
+
+Required:
+
+- `order` (String) Widget sorting methods. Allowed enum values: `asc`, `desc` Valid values are `asc`, `desc`.
+- `type` (String) Set the sort type to formula. Allowed enum values: `formula` Valid values are `formula`, `group`.
+
+Optional:
+
+- `index` (Number) The index of the formula to sort by.
+- `name` (String) The name of the group.
+
+
+
### Nested Schema for `widget.group_definition.widget.split_graph_definition.source_widget_definition.toplist_definition.request.style`
@@ -15533,6 +15557,7 @@ Optional:
- `query` (Block List) (see [below for nested schema](#nestedblock--widget--group_definition--widget--toplist_definition--request--query))
- `rum_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--group_definition--widget--toplist_definition--request--rum_query))
- `security_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--group_definition--widget--toplist_definition--request--security_query))
+- `sort` (Block List, Max: 1) The controls for sorting the widget. (see [below for nested schema](#nestedblock--widget--group_definition--widget--toplist_definition--request--sort))
- `style` (Block List, Max: 1) Define request for the widget's style. (see [below for nested schema](#nestedblock--widget--group_definition--widget--toplist_definition--request--style))
@@ -16180,6 +16205,29 @@ Optional:
+
+### Nested Schema for `widget.group_definition.widget.toplist_definition.request.sort`
+
+Optional:
+
+- `count` (Number) The number of items to limit the widget to.
+- `order_by` (Block List) The array of items to sort the widget by in order. (see [below for nested schema](#nestedblock--widget--group_definition--widget--toplist_definition--request--sort--order_by))
+
+
+### Nested Schema for `widget.group_definition.widget.toplist_definition.request.sort.order_by`
+
+Required:
+
+- `order` (String) Widget sorting methods. Allowed enum values: `asc`, `desc` Valid values are `asc`, `desc`.
+- `type` (String) Set the sort type to formula. Allowed enum values: `formula` Valid values are `formula`, `group`.
+
+Optional:
+
+- `index` (Number) The index of the formula to sort by.
+- `name` (String) The name of the group.
+
+
+
### Nested Schema for `widget.group_definition.widget.toplist_definition.request.style`
@@ -25482,6 +25530,7 @@ Optional:
- `query` (Block List) (see [below for nested schema](#nestedblock--widget--split_graph_definition--source_widget_definition--toplist_definition--request--query))
- `rum_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--split_graph_definition--source_widget_definition--toplist_definition--request--rum_query))
- `security_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--split_graph_definition--source_widget_definition--toplist_definition--request--security_query))
+- `sort` (Block List, Max: 1) The controls for sorting the widget. (see [below for nested schema](#nestedblock--widget--split_graph_definition--source_widget_definition--toplist_definition--request--sort))
- `style` (Block List, Max: 1) Define request for the widget's style. (see [below for nested schema](#nestedblock--widget--split_graph_definition--source_widget_definition--toplist_definition--request--style))
@@ -26129,6 +26178,29 @@ Optional:
+
+### Nested Schema for `widget.split_graph_definition.source_widget_definition.toplist_definition.request.sort`
+
+Optional:
+
+- `count` (Number) The number of items to limit the widget to.
+- `order_by` (Block List) The array of items to sort the widget by in order. (see [below for nested schema](#nestedblock--widget--split_graph_definition--source_widget_definition--toplist_definition--request--sort--order_by))
+
+
+### Nested Schema for `widget.split_graph_definition.source_widget_definition.toplist_definition.request.sort.order_by`
+
+Required:
+
+- `order` (String) Widget sorting methods. Allowed enum values: `asc`, `desc` Valid values are `asc`, `desc`.
+- `type` (String) Set the sort type to formula. Allowed enum values: `formula` Valid values are `formula`, `group`.
+
+Optional:
+
+- `index` (Number) The index of the formula to sort by.
+- `name` (String) The name of the group.
+
+
+
### Nested Schema for `widget.split_graph_definition.source_widget_definition.toplist_definition.request.style`
@@ -28161,6 +28233,7 @@ Optional:
- `query` (Block List) (see [below for nested schema](#nestedblock--widget--toplist_definition--request--query))
- `rum_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--rum_query))
- `security_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--security_query))
+- `sort` (Block List, Max: 1) The controls for sorting the widget. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--sort))
- `style` (Block List, Max: 1) Define request for the widget's style. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--style))
@@ -28808,6 +28881,29 @@ Optional:
+
+### Nested Schema for `widget.toplist_definition.request.sort`
+
+Optional:
+
+- `count` (Number) The number of items to limit the widget to.
+- `order_by` (Block List) The array of items to sort the widget by in order. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--sort--order_by))
+
+
+### Nested Schema for `widget.toplist_definition.request.sort.order_by`
+
+Required:
+
+- `order` (String) Widget sorting methods. Allowed enum values: `asc`, `desc` Valid values are `asc`, `desc`.
+- `type` (String) Set the sort type to formula. Allowed enum values: `formula` Valid values are `formula`, `group`.
+
+Optional:
+
+- `index` (Number) The index of the formula to sort by.
+- `name` (String) The name of the group.
+
+
+
### Nested Schema for `widget.toplist_definition.request.style`
diff --git a/docs/resources/powerpack.md b/docs/resources/powerpack.md
index 0bc96b0e4..e478e5cf3 100644
--- a/docs/resources/powerpack.md
+++ b/docs/resources/powerpack.md
@@ -7102,6 +7102,7 @@ Optional:
- `query` (Block List) (see [below for nested schema](#nestedblock--widget--toplist_definition--request--query))
- `rum_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--rum_query))
- `security_query` (Block List, Max: 1) The query to use for this widget. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--security_query))
+- `sort` (Block List, Max: 1) The controls for sorting the widget. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--sort))
- `style` (Block List, Max: 1) Define request for the widget's style. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--style))
@@ -7749,6 +7750,29 @@ Optional:
+
+### Nested Schema for `widget.toplist_definition.request.sort`
+
+Optional:
+
+- `count` (Number) The number of items to limit the widget to.
+- `order_by` (Block List) The array of items to sort the widget by in order. (see [below for nested schema](#nestedblock--widget--toplist_definition--request--sort--order_by))
+
+
+### Nested Schema for `widget.toplist_definition.request.sort.order_by`
+
+Required:
+
+- `order` (String) Widget sorting methods. Allowed enum values: `asc`, `desc` Valid values are `asc`, `desc`.
+- `type` (String) Set the sort type to formula. Allowed enum values: `formula` Valid values are `formula`, `group`.
+
+Optional:
+
+- `index` (Number) The index of the formula to sort by.
+- `name` (String) The name of the group.
+
+
+
### Nested Schema for `widget.toplist_definition.request.style`