Skip to content

Commit 21f552f

Browse files
madking2010thiennn
authored andcommitted
SpaceBar V1.1.0 (#400)
1 parent 5202ff0 commit 21f552f

File tree

5 files changed

+84
-14
lines changed

5 files changed

+84
-14
lines changed

src/Modules/SimplCommerce.Module.Cms/Controllers/SpaceBarWidgetApiContorller.cs

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
using Microsoft.AspNetCore.Authorization;
22
using Microsoft.AspNetCore.Http;
33
using Microsoft.AspNetCore.Mvc;
4+
using Microsoft.Net.Http.Headers;
45
using Newtonsoft.Json;
56
using SimplCommerce.Infrastructure.Data;
67
using SimplCommerce.Module.Cms.ViewModels;
78
using SimplCommerce.Module.Core.Models;
9+
using SimplCommerce.Module.Core.Services;
810
using System;
911
using System.Collections.Generic;
12+
using System.IO;
1013
using System.Linq;
1114
using System.Threading.Tasks;
1215

@@ -18,11 +21,13 @@ public class SpaceBarWidgetApiContorller : Controller
1821
{
1922
private readonly IRepository<WidgetInstance> _widgetInstanceRepository;
2023
private readonly IRepository<Widget> _widgetRespository;
24+
private readonly IMediaService _mediaService;
2125

22-
public SpaceBarWidgetApiContorller(IRepository<WidgetInstance> widgetInstanceRepository, IRepository<Widget> widgetRepository)
26+
public SpaceBarWidgetApiContorller(IRepository<WidgetInstance> widgetInstanceRepository, IRepository<Widget> widgetRepository, IMediaService mediaService)
2327
{
2428
_widgetInstanceRepository = widgetInstanceRepository;
2529
_widgetRespository = widgetRepository;
30+
_mediaService = mediaService;
2631
}
2732

2833
[HttpGet("{id}")]
@@ -39,16 +44,24 @@ public IActionResult Get(long id)
3944
DisplayOrder = widgetInstance.DisplayOrder,
4045
Items = JsonConvert.DeserializeObject<IList<SpaceBarWidgetSetting>>(widgetInstance.Data)
4146
};
42-
47+
foreach (var item in model.Items)
48+
{
49+
item.ImageUrl = _mediaService.GetMediaUrl(item.Image);
50+
}
4351
return Json(model);
4452
}
4553

4654
[HttpPost]
47-
public IActionResult Post(IFormCollection formCollection)
55+
public async Task<IActionResult> Post(IFormCollection formCollection)
4856
{
4957
var model = ToSpaceBarWidgetFormModel(formCollection);
5058
if (ModelState.IsValid)
5159
{
60+
foreach (var item in model.Items)
61+
{
62+
item.Image = await SaveFile(item.UploadImage);
63+
}
64+
5265
var widgetInstance = new WidgetInstance
5366
{
5467
Name = model.Name,
@@ -66,9 +79,21 @@ public IActionResult Post(IFormCollection formCollection)
6679
return new BadRequestObjectResult(ModelState);
6780
}
6881
[HttpPut("{id}")]
69-
public IActionResult Put(long id, IFormCollection formCollection)
82+
public async Task<IActionResult> Put(long id, IFormCollection formCollection)
7083
{
7184
var model = ToSpaceBarWidgetFormModel(formCollection);
85+
86+
foreach (var item in model.Items)
87+
{
88+
if (item.UploadImage != null)
89+
{
90+
if (!string.IsNullOrWhiteSpace(item.Image))
91+
{
92+
await _mediaService.DeleteMediaAsync(item.Image);
93+
}
94+
item.Image = await SaveFile(item.UploadImage);
95+
}
96+
}
7297
if (ModelState.IsValid)
7398
{
7499
var widgetInstance = _widgetInstanceRepository.Query().FirstOrDefault(x => x.Id == id);
@@ -106,9 +131,18 @@ private SpaceBarWidgetForm ToSpaceBarWidgetFormModel(IFormCollection formCollect
106131
item.Title = formCollection[$"items[{i}][title]"];
107132
item.Description = formCollection[$"items[{i}][description]"];
108133
item.IconHtml = formCollection[$"items[{i}][iconHtml]"];
134+
item.Image = formCollection[$"items[{i}][image]"];
135+
item.UploadImage = formCollection.Files[$"items[{i}][uploadImage]"];
109136
model.Items.Add(item);
110137
}
111138
return model;
112139
}
140+
private async Task<string> SaveFile(IFormFile file)
141+
{
142+
var originalFileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Value.Trim('"');
143+
var fileName = $"{Guid.NewGuid()}{Path.GetExtension(originalFileName)}";
144+
await _mediaService.SaveMediaAsync(file.OpenReadStream(), fileName, file.ContentType);
145+
return fileName;
146+
}
113147
}
114148
}

src/Modules/SimplCommerce.Module.Cms/ViewModels/SpaceBarWidgetSetting.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System;
1+
using Microsoft.AspNetCore.Http;
2+
using Newtonsoft.Json;
3+
using System;
24
using System.Collections.Generic;
35
using System.Linq;
46
using System.Threading.Tasks;
@@ -10,5 +12,11 @@ public class SpaceBarWidgetSetting
1012
public string IconHtml { get; set; }
1113
public string Title { get; set; }
1214
public string Description { get; set; }
15+
public string Image { get; set; }
16+
17+
public string ImageUrl { get; set; }
18+
19+
[JsonIgnore]
20+
public IFormFile UploadImage { get; set; }
1321
}
1422
}

src/Modules/SimplCommerce.Module.Cms/Views/Components/SpaceBarWidget.cshtml

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,30 @@
22
<div align="center" class="row">
33
@foreach (var item in Model.Items)
44
{
5-
<div class="col-md-4 col-sm-6 col-xs-12">
6-
<i class='@item.IconHtml space-bar-widget-icon' aria-hidden='true'></i>
7-
<div class="portfolio-overlay">
8-
<h4>@item.Title</h4>
9-
<p>
10-
@item.Description
11-
</p>
5+
@if (!(string.IsNullOrEmpty(item.IconHtml)))
6+
{
7+
<div class="col-md-4 col-sm-6 col-xs-12">
8+
<i class='@item.IconHtml space-bar-widget-icon' aria-hidden='true'></i>
9+
<div class="portfolio-overlay">
10+
<h4>@item.Title</h4>
11+
<p>
12+
@item.Description
13+
</p>
14+
</div>
1215
</div>
13-
</div>
16+
}
17+
else
18+
{
19+
<div class="col-md-4 col-sm-6 col-xs-12">
20+
<i aria-hidden='true'><img src="/user-content/@item.Image" alt="" style="width: 150px; height: 150px;" class="img-responsive" /></i>
21+
<div class="portfolio-overlay">
22+
<h4>@item.Title</h4>
23+
<p>
24+
@item.Description
25+
</p>
26+
</div>
27+
</div>
28+
}
1429
}
1530
</div>
31+

src/Modules/SimplCommerce.Module.Cms/wwwroot/admin/spacebar-widget/spacebar-widget-form.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ <h2 ng-if="vm.isEditMode">{{::vm.translate.get('Edit SpaceBar Widget')}}</h2>
5555
<div class="form-group">
5656
<label class="col-sm-2 control-label">{{::vm.translate.get('Items')}}</label>
5757
<div class="col-sm-10">
58-
<div class="form-group row" ng-repeat="item in vm.widgetInstance.items">
58+
<div class="form-group row tabbable-panel-line" ng-repeat="item in vm.widgetInstance.items">
5959
<div class="col-md-11">
6060
<div class="form-group">
6161
<label class="col-sm-2 control-label">{{::vm.translate.get('Icon:')}}</label>
@@ -75,6 +75,14 @@ <h2 ng-if="vm.isEditMode">{{::vm.translate.get('Edit SpaceBar Widget')}}</h2>
7575
<input ng-model="item.description" class="form-control" />
7676
</div>
7777
</div>
78+
<div class="form-group">
79+
<label class="col-sm-2 control-label">{{::vm.translate.get('Image')}}</label>
80+
<div class="col-sm-10">
81+
<input class="form-control" type="file" ngf-select ng-model="item.uploadImage" name="images" ngf-accept="'image/*'">
82+
<img ngf-src="item.uploadImage" ngf-resize="{width: 100, height: 100, quality: 0.9}">
83+
<img ng-show="!item.uploadImage && item.imageUrl" ng-src="{{item.imageUrl}}" style="width: 320px; height: 100px" />
84+
</div>
85+
</div>
7886
</div>
7987
<div class="col-md-1 text-right">
8088
<button ng-click="vm.removeItem(item)" type="button" class="btn btn-default btn-xs">

src/SimplCommerce.WebHost/wwwroot/themes/SampleTheme/site.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,7 @@
99
.main-nav .dropdown-menu .active > a, .main-nav .dropdown-menu li > a:hover, .main-nav .dropdown-menu li.dropdown-submenu:hover > a {
1010
background-color:coral;
1111
}
12+
.tabbable-panel-line {
13+
border: 1px solid #eee;
14+
padding: 10px;
15+
}

0 commit comments

Comments
 (0)