diff --git a/server/AyaNova/Controllers/DataListColumnViewController.cs b/server/AyaNova/Controllers/DataListColumnViewController.cs
index f6c08e7a..5424dc10 100644
--- a/server/AyaNova/Controllers/DataListColumnViewController.cs
+++ b/server/AyaNova/Controllers/DataListColumnViewController.cs
@@ -103,6 +103,32 @@ namespace AyaNova.Api.Controllers
return Ok(ApiOkResponse.Response(o));
}
+
+
+
+ ///
+ /// Update sort order for user's CoulumnView for DataList key specified
+ ///
+ /// e.g.{"listKey":"CustomerDataList","sortBy":["CustomerPhone1","CustomerEmail"],"sortDesc":[false,false]}
+ /// From route path
+ ///
+ [HttpPost("sort")]
+ public async Task SetSort([FromBody] DataListSortRequest sortRequest, ApiVersion apiVersion)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ DataListColumnViewBiz biz = DataListColumnViewBiz.GetBiz(ct, HttpContext);
+
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ if(!await biz.SetSort(sortRequest))
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ else
+ return Ok();
+ }
+ public record SortRequest(string ListKey, string[] sortBy, bool[] sortDesc);
+ //{"listKey":"CustomerDataList","sortBy":["CustomerPhone1","CustomerEmail"],"sortDesc":[false,false]}
+
//------------
diff --git a/server/AyaNova/DataList/DataListProcessingBase.cs b/server/AyaNova/DataList/DataListProcessingBase.cs
index 2d9d8c93..55accd29 100644
--- a/server/AyaNova/DataList/DataListProcessingBase.cs
+++ b/server/AyaNova/DataList/DataListProcessingBase.cs
@@ -149,6 +149,12 @@ namespace AyaNova.DataList
if (!string.IsNullOrEmpty(o.EnumType))
sb.Append($",\"et\":\"{AyaNova.Util.StringUtil.TrimTypeName(o.EnumType)}\"");
+
+ //field key needed for sorting etc
+ sb.Append($",\"fk\":\"{o.FieldKey}\"");
+
+
+
sb.Append("}");
FirstColumnAdded = true;
diff --git a/server/AyaNova/biz/DataListColumnViewBiz.cs b/server/AyaNova/biz/DataListColumnViewBiz.cs
index f50de41a..e4d8ca9a 100644
--- a/server/AyaNova/biz/DataListColumnViewBiz.cs
+++ b/server/AyaNova/biz/DataListColumnViewBiz.cs
@@ -67,6 +67,26 @@ namespace AyaNova.Biz
}
}
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //SET SORT
+ //
+
+ internal async Task SetSort(AyaNova.Models.DataListSortRequest newObject)
+ {
+ //Get the current column view (in an updateable manner) and update it's sort property and save
+ var dbObject = await ct.DataListColumnView.SingleOrDefaultAsync(z => z.UserId == UserId && z.ListKey == newObject.ListKey);
+ if (dbObject == null)
+ dbObject = await CreateDefaultColumnView(newObject.ListKey);
+ //convert arrays to proper format for saving
+ Dictionary newSort = new Dictionary();
+ for (int x = 0; x < newObject.sortBy.Length; x++)
+ newSort.Add(newObject.sortBy[x], (newObject.sortDesc[x] ? "-" : "+"));
+ dbObject.Sort = JsonConvert.SerializeObject(newSort);
+ //columnview is always replace
+ await ct.SaveChangesAsync();
+ return true;
+ }
+
@@ -79,21 +99,28 @@ namespace AyaNova.Biz
var ret = await ct.DataListColumnView.AsNoTracking().SingleOrDefaultAsync(z => z.UserId == userId && z.ListKey == listKey);
if (ret == null && createDefaultIfNecessary)
{
- if (!DataListFactory.ListKeyIsValid(listKey))
- {
- throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey");
- }
- ret = new DataListColumnView();
- ret.UserId = UserId;
- ret.ListKey = listKey;
- var dataList = DataListFactory.GetAyaDataList(listKey);
- ret.Columns = JsonConvert.SerializeObject(dataList.DefaultColumns);
- ret.Sort = JsonConvert.SerializeObject(dataList.DefaultSortBy);
- return await CreateAsync(ret);
+ return await CreateDefaultColumnView(listKey);
}
return ret;
}
+ internal async Task CreateDefaultColumnView(string listKey)
+ {
+ if (!DataListFactory.ListKeyIsValid(listKey))
+ {
+ throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey");
+ }
+ var ret = new DataListColumnView();
+ ret.UserId = UserId;
+ ret.ListKey = listKey;
+ var dataList = DataListFactory.GetAyaDataList(listKey);
+ ret.Columns = JsonConvert.SerializeObject(dataList.DefaultColumns);
+ ret.Sort = JsonConvert.SerializeObject(dataList.DefaultSortBy);
+ return await CreateAsync(ret);
+ }
+
+
+
////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/server/AyaNova/models/DataListSortRequest.cs b/server/AyaNova/models/DataListSortRequest.cs
new file mode 100644
index 00000000..6d3bed89
--- /dev/null
+++ b/server/AyaNova/models/DataListSortRequest.cs
@@ -0,0 +1,4 @@
+namespace AyaNova.Models
+{
+ public record DataListSortRequest(string ListKey, string[] sortBy, bool[] sortDesc);
+}
\ No newline at end of file