Skip to content

Commit 3f4ca10

Browse files
author
Claude
committed
Update checkout to use store theming settings and also store default location for it's address
1 parent 1fde3fa commit 3f4ca10

13 files changed

+101
-121
lines changed

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<GlobalPackageReference Include="Umbraco.GitVersioning.Extensions" Version="0.2.0" />
1111
</ItemGroup>
1212
<ItemGroup>
13-
<PackageVersion Include="Umbraco.Commerce.Cms.Startup" Version="[16.0.0, 16.999.999)" />
13+
<PackageVersion Include="Umbraco.Commerce.Cms.Startup" Version="[16.1.0--preview.10, 16.999.999)" />
1414
<PackageVersion Include="Umbraco.Cms.Core" Version="[16.0.0, 16.999.999)" />
1515
<PackageVersion Include="Umbraco.Cms.Web.Website" Version="[16.0.0, 16.999.999)" />
1616
</ItemGroup>

src/Umbraco.Commerce.Checkout/Pipeline/Tasks/CreateUmbracoCommerceCheckoutDataTypesTask.cs

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Linq;
43
using System.Threading;
54
using System.Threading.Tasks;
65
using Microsoft.Extensions.Logging;
@@ -36,66 +35,6 @@ public CreateUmbracoCommerceCheckoutDataTypesTask(
3635

3736
public override async Task<PipelineResult<InstallPipelineContext>> ExecuteAsync(PipelineArgs<InstallPipelineContext> args, CancellationToken cancellationToken)
3837
{
39-
// Theme Color Picker
40-
if (_propertyEditors.TryGet(Constants.PropertyEditors.Aliases.ColorPicker, out IDataEditor? colorPickerDataEditor))
41-
{
42-
IDataType? currentColorPicker = await _dataTypeService.GetAsync(UmbracoCommerceCheckoutConstants.DataTypes.Guids.ThemeColorPickerGuid);
43-
if (currentColorPicker == null)
44-
{
45-
DataType dataType = CreateDataType(colorPickerDataEditor, x =>
46-
{
47-
x.Key = UmbracoCommerceCheckoutConstants.DataTypes.Guids.ThemeColorPickerGuid;
48-
x.Name = "[Umbraco Commerce Checkout] Theme Color Picker";
49-
x.EditorUiAlias = "Umb.PropertyEditorUi.ColorPicker";
50-
x.DatabaseType = ValueStorageType.Nvarchar;
51-
x.ConfigurationData = colorPickerDataEditor
52-
.GetConfigurationEditor()
53-
.FromConfigurationObject(
54-
new ColorPickerConfiguration
55-
{
56-
Items = UmbracoCommerceCheckoutConstants.ColorMap.Select((kvp, idx) => new ColorPickerConfiguration.ColorPickerItem
57-
{
58-
Label = kvp.Value,
59-
Value = kvp.Key,
60-
}).ToList(),
61-
UseLabel = false,
62-
},
63-
_configurationEditorJsonSerializer);
64-
});
65-
66-
Attempt<IDataType, DataTypeOperationStatus> createAttempt = await _dataTypeService.CreateAsync(dataType, Constants.Security.SuperUserKey);
67-
if (!createAttempt.Success)
68-
{
69-
_logger.LogError(createAttempt.Exception, "Create theme color picker attempt status {AttemptStatus}.", createAttempt.Status);
70-
return Fail(createAttempt.Exception);
71-
}
72-
}
73-
else
74-
{
75-
currentColorPicker.EditorUiAlias = "Umb.PropertyEditorUi.ColorPicker"; // this field is added in cms v14
76-
currentColorPicker.ConfigurationData = colorPickerDataEditor
77-
.GetConfigurationEditor()
78-
.FromConfigurationObject(
79-
new ColorPickerConfiguration
80-
{
81-
Items = UmbracoCommerceCheckoutConstants.ColorMap.Select((kvp, idx) => new ColorPickerConfiguration.ColorPickerItem
82-
{
83-
Label = kvp.Value,
84-
Value = kvp.Key,
85-
}).ToList(),
86-
UseLabel = false,
87-
},
88-
_configurationEditorJsonSerializer);
89-
90-
Attempt<IDataType, DataTypeOperationStatus> updateAttempt = await _dataTypeService.UpdateAsync(currentColorPicker, Constants.Security.SuperUserKey);
91-
if (!updateAttempt.Success)
92-
{
93-
_logger.LogError(updateAttempt.Exception, "Update theme color picker attempt status {AttemptStatus}.", updateAttempt.Status);
94-
return Fail(updateAttempt.Exception);
95-
}
96-
}
97-
}
98-
9938
// Step Picker
10039
List<string> stepPickerItems = [
10140
"Information",

src/Umbraco.Commerce.Checkout/Pipeline/Tasks/CreateUmbracoCommerceCheckoutDocumentTypesTask.cs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,8 @@ public override async Task<PipelineResult<InstallPipelineContext>> ExecuteAsync(
4040

4141
// Setup lazy data types
4242
var textstringDataType = new Lazy<Task<IDataType?>>(() => _dataTypeService.GetAsync(Constants.DataTypes.Guids.TextstringGuid));
43-
var textareaDataType = new Lazy<Task<IDataType?>>(() => _dataTypeService.GetAsync(Constants.DataTypes.Guids.TextareaGuid));
4443
var booleanDataType = new Lazy<Task<IDataType?>>(() => _dataTypeService.GetAsync(Constants.DataTypes.Guids.CheckboxGuid));
4544
var contentPickerDataType = new Lazy<Task<IDataType?>>(() => _dataTypeService.GetAsync(Constants.DataTypes.Guids.ContentPickerGuid));
46-
var imagePickerDataType = new Lazy<Task<IDataType?>>(() => _dataTypeService.GetAsync(Constants.DataTypes.Guids.MediaPicker3SingleImageGuid));
47-
var themeColorPickerDataType = new Lazy<Task<IDataType?>>(() => _dataTypeService.GetAsync(UmbracoCommerceCheckoutConstants.DataTypes.Guids.ThemeColorPickerGuid));
4845
var stepPickerDataType = new Lazy<Task<IDataType?>>(() => _dataTypeService.GetAsync(UmbracoCommerceCheckoutConstants.DataTypes.Guids.StepPickerGuid));
4946

5047
// Checkout content type folder
@@ -151,32 +148,11 @@ public override async Task<PipelineResult<InstallPipelineContext>> ExecuteAsync(
151148

152149
// Move to the dedicated folder
153150
_logger.LogInformation("Moving checkout step document types to the correct folder.");
154-
_contentTypeService.MoveAsync(checkoutStepPageContentType.Key, checkoutContentTypeFolder!.Key);
151+
await _contentTypeService.MoveAsync(checkoutStepPageContentType.Key, checkoutContentTypeFolder!.Key);
155152

156153
// Checkout Page
157154
PropertyType[] checkoutPageProps =
158155
[
159-
CreatePropertyType(await imagePickerDataType.Value, x =>
160-
{
161-
x.Alias = "uccStoreLogo";
162-
x.Name = "Store Logo";
163-
x.Description = "A logo image for the store to appear at the top of the checkout screens and order emails.";
164-
x.SortOrder = 10;
165-
}),
166-
CreatePropertyType(await textstringDataType.Value, x =>
167-
{
168-
x.Alias = "uccStoreAddress";
169-
x.Name = "Store Address";
170-
x.Description = "The address of the web store to appear in the footer of order emails.";
171-
x.SortOrder = 20;
172-
}),
173-
CreatePropertyType(await themeColorPickerDataType.Value, x =>
174-
{
175-
x.Alias = "uccThemeColor";
176-
x.Name = "Theme Color";
177-
x.Description = "The theme color to use for colored elements of the checkout pages.";
178-
x.SortOrder = 30;
179-
}),
180156
CreatePropertyType(await booleanDataType.Value, x =>
181157
{
182158
x.Alias = "uccCollectShippingInfo";

src/Umbraco.Commerce.Checkout/UmbracoCommerceCheckoutConstants.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ public static class DataTypes
3939
{
4040
public static class Guids
4141
{
42+
[Obsolete("No longer used. Will be removed in v18.")]
4243
public const string ThemeColorPicker = "46322397-3b7b-4d53-a5db-a1b17553d397";
44+
[Obsolete("No longer used. Will be removed in v18.")]
4345
public static readonly Guid ThemeColorPickerGuid = new Guid(ThemeColorPicker);
4446

4547
public const string StepPicker = "654a2147-2559-4b3f-93ee-a6925f45c173";

src/Umbraco.Commerce.Checkout/Views/UmbracoCommerceCheckout/Partials/UmbracoCommerceCheckoutPrevNext.cshtml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@
33
var backPage = Model.GetCheckoutBackPage();
44
var prevStep = Model.GetPreviousStepPage();
55
var nextStep = Model.GetNextStepPage();
6-
7-
string themeColor = Model.GetThemeColor();
86
}
97
<div class="flex flex-col-reverse items-center justify-between mt-8 md:flex-row">
108
@if (prevStep != null)
119
{
12-
<div><a href="@(prevStep.Url())" class="inline-flex text-@(themeColor) hover:text-gray-900 hover:underline"><svg viewBox="0 0 20 20" class="inline-block w-5 h-5 fill-current"><use href="#ico-chevron-left" /></svg> @string.Format(Umbraco.GetDictionaryValueOrDefault("UmbracoCommerceCheckout.Navigation.ReturnTo", "Return to {0}"), prevStep.Name)</a></div>
10+
<div><a href="@(prevStep.Url())" class="ucc-text-color inline-flex hover:text-gray-900 hover:underline"><svg viewBox="0 0 20 20" class="inline-block w-5 h-5 fill-current"><use href="#ico-chevron-left" /></svg> @string.Format(Umbraco.GetDictionaryValueOrDefault("UmbracoCommerceCheckout.Navigation.ReturnTo", "Return to {0}"), prevStep.Name)</a></div>
1311
}
1412
else if (backPage != null)
1513
{
16-
<div><a href="@(backPage.Url())" class="inline-flex text-@(themeColor) hover:text-gray-900 hover:underline"><svg viewBox="0 0 20 20" class="inline-block w-5 h-5 fill-current"><use href="#ico-chevron-left" /></svg> @string.Format(Umbraco.GetDictionaryValueOrDefault("UmbracoCommerceCheckout.Navigation.ReturnTo", "Return to {0}"), backPage.Name)</a></div>
14+
<div><a href="@(backPage.Url())" class="ucc-text-color inline-flex hover:text-gray-900 hover:underline"><svg viewBox="0 0 20 20" class="inline-block w-5 h-5 fill-current"><use href="#ico-chevron-left" /></svg> @string.Format(Umbraco.GetDictionaryValueOrDefault("UmbracoCommerceCheckout.Navigation.ReturnTo", "Return to {0}"), backPage.Name)</a></div>
1715
}
1816
else
1917
{
@@ -23,7 +21,7 @@
2321
{
2422
<div class="mb-4 w-full md:mb-0 md:w-auto">
2523
<button id="continue"
26-
class="bg-@(themeColor) text-white px-4 py-4 w-full rounded hover:bg-gray-900 disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-300 disabled:hover:bg-gray-100 disabled:hover:text-gray-300"
24+
class="ucc-bg-color text-white px-4 py-4 w-full rounded hover:bg-gray-900 disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-300 disabled:hover:bg-gray-100 disabled:hover:text-gray-300"
2725
type="submit"
2826
disabled>
2927
@string.Format(Umbraco.GetDictionaryValueOrDefault("UmbracoCommerceCheckout.Navigation.ContinueTo", "Continue to {0}"), nextStep.Name)

src/Umbraco.Commerce.Checkout/Views/UmbracoCommerceCheckout/Templates/Email/UmbracoCommerceCheckoutGiftCardEmail.cshtml

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,35 @@
1414
}
1515

1616
var uccStoreLogoUrl = checkoutPage.Value<IPublishedContent>("uccStoreLogo")?.Url();
17+
if (string.IsNullOrWhiteSpace(uccStoreLogoUrl))
18+
{
19+
uccStoreLogoUrl = store.LogoImageUrl;
20+
}
21+
1722
var uccStoreTsAndCsUrl = checkoutPage.Value<IPublishedContent>("uccTermsAndConditionsPage")?.Url();
1823
var uccStorePrivacyPolicyUrl = checkoutPage.Value<IPublishedContent>("uccPrivacyPolicyPage")?.Url();
24+
1925
var uccStoreAddress = checkoutPage.Value<string>("uccStoreAddress");
20-
var uccThemeColor = checkoutPage.Value<string>("uccThemeColor", defaultValue: "000000");
26+
if (string.IsNullOrWhiteSpace(uccStoreAddress) && store.DefaultLocationId.HasValue)
27+
{
28+
// If the store address is not set, we can try to get it from the default location
29+
var location = await UmbracoCommerceApi.GetLocationAsync(store.DefaultLocationId.Value);
30+
if (location != null)
31+
{
32+
uccStoreAddress = $"{location.AddressLine1}, {location.City}, {location.ZipCode}";
33+
}
34+
}
35+
36+
var uccThemeColor = checkoutPage.Value<string>("uccThemeColor", defaultValue: store.ThemeColor ?? "#000000");
2137
}
22-
<style type="text/css">
38+
<style>
2339
#ucc, #ucc td, #ucc p {
2440
font-family: sans-serif;
2541
font-size: 14px;
2642
line-height: 18px;
2743
color: #5f6a70;
2844
}
29-
30-
#ucc td {
45+
#ucc td {
3146
vertical-align: top;
3247
}
3348
</style>
@@ -52,17 +67,17 @@
5267

5368
<hr style="border: 0; height: 1px; background: #ebebe9; margin: 20px 0;" />
5469

55-
<h2 style="margin: 0 0 20px; font-size: 20px; line-height: 28px; color: #@(uccThemeColor);">Here is your Gift Card for @(store.Name)</h2>
70+
<h2 style="margin: 0 0 20px; font-size: 20px; line-height: 28px; color: @(uccThemeColor);">Here is your Gift Card for @(store.Name)</h2>
5671

57-
<table style="background-color: #@(uccThemeColor); border-radius: 10px; width: 400px; margin: 0 auto 20px;">
72+
<table style="background-color: @(uccThemeColor); border-radius: 10px; width: 400px; margin: 0 auto 20px;">
5873
<tr>
5974
<td style="padding: 40px 20px;">
6075
<table style="width: 100%;">
6176
<tr>
6277
<td style="color:white; font-size: 60px; line-height: 60px; padding-bottom: 15px;text-align: center;">@(await Model.OriginalAmount.FormattedAsync())</td>
6378
</tr>
6479
<tr>
65-
<td style="background-color:white; font-size: 20px; line-height: 20px; color: #@(uccThemeColor); text-align: center; padding: 5px 10px;">@(Model.Code)</td>
80+
<td style="background-color:white; font-size: 20px; line-height: 20px; color: @(uccThemeColor); text-align: center; padding: 5px 10px;">@(Model.Code)</td>
6681
</tr>
6782
</table>
6883
</td>
@@ -77,7 +92,7 @@
7792

7893
<hr style="border: 0; height: 1px; background: #ebebe9; margin: 20px 0;" />
7994
<p style="text-align: center;">
80-
<a href="@(BaseUrl + uccStoreTsAndCsUrl)" target="_blank" style="color: #@(uccThemeColor);">Terms of Service</a> | <a href="@(BaseUrl + uccStorePrivacyPolicyUrl)" target="_blank" style="color: #@(uccThemeColor);">Privacy Policy</a>
95+
<a href="@(BaseUrl + uccStoreTsAndCsUrl)" target="_blank" style="color: @(uccThemeColor);">Terms of Service</a> | <a href="@(BaseUrl + uccStorePrivacyPolicyUrl)" target="_blank" style="color: @(uccThemeColor);">Privacy Policy</a>
8196
</p>
8297
<p style="text-align: center; margin-bottom: 0;">@(store.Name), @(uccStoreAddress)</p>
8398

src/Umbraco.Commerce.Checkout/Views/UmbracoCommerceCheckout/Templates/Email/UmbracoCommerceCheckoutOrderConfirmationEmail.cshtml

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,26 @@
3232
}
3333

3434
var uccStoreLogoUrl = checkoutPage.Value<IPublishedContent>("uccStoreLogo")?.Url();
35+
if (string.IsNullOrWhiteSpace(uccStoreLogoUrl))
36+
{
37+
uccStoreLogoUrl = store.LogoImageUrl;
38+
}
39+
3540
var uccStoreTsAndCsUrl = checkoutPage.Value<IPublishedContent>("uccTermsAndConditionsPage")?.Url();
3641
var uccStorePrivacyPolicyUrl = checkoutPage.Value<IPublishedContent>("uccPrivacyPolicyPage")?.Url();
42+
3743
var uccStoreAddress = checkoutPage.Value<string>("uccStoreAddress");
38-
var uccThemeColor = checkoutPage.Value<string>("uccThemeColor", defaultValue: "000000");
44+
if (string.IsNullOrWhiteSpace(uccStoreAddress) && store.DefaultLocationId.HasValue)
45+
{
46+
// If the store address is not set, we can try to get it from the default location
47+
var location = await UmbracoCommerceApi.GetLocationAsync(store.DefaultLocationId.Value);
48+
if (location != null)
49+
{
50+
uccStoreAddress = $"{location.AddressLine1}, {location.City}, {location.ZipCode}";
51+
}
52+
}
53+
54+
var uccThemeColor = checkoutPage.Value<string>("uccThemeColor", defaultValue: store.ThemeColor ?? "#000000");
3955
}
4056
<style type="text/css">
4157
#ucc, #ucc td, #ucc p {
@@ -69,9 +85,9 @@
6985
}
7086

7187
<hr style="border: 0; height: 1px; background: #ebebe9; margin: 20px 0;" />
72-
<h2 style="margin: 0 0 20px; font-size: 20px; line-height: 28px; color: #@(uccThemeColor);">Order Confirmation - #@(Model.OrderNumber)</h2>
88+
<h2 style="margin: 0 0 20px; font-size: 20px; line-height: 28px; color: @(uccThemeColor);">Order Confirmation - #@(Model.OrderNumber)</h2>
7389
<p>
74-
Thank you for your order with <a href="@(BaseUrl)" target="_blank" style="color: #@(uccThemeColor);">@(store.Name)</a>, your order details can be found below.
90+
Thank you for your order with <a href="@(BaseUrl)" target="_blank" style="color: @(uccThemeColor);">@(store.Name)</a>, your order details can be found below.
7591
</p>
7692
</div>
7793

@@ -324,10 +340,10 @@
324340
}
325341
<tr>
326342
<td style="vertical-align: top; padding-top: 20px;">
327-
<strong style="color: #@(uccThemeColor);">Order Total</strong>
343+
<strong style="color: @(uccThemeColor);">Order Total</strong>
328344
</td>
329345
<td style="vertical-align: top; padding-top: 20px; text-align: right; white-space: nowrap;">
330-
<strong style="color: #@(uccThemeColor);">
346+
<strong style="color: @(uccThemeColor);">
331347
@await Model.TotalPrice.Value.FormattedAsync()
332348
</strong>
333349
</td>
@@ -337,7 +353,7 @@
337353
<p style="text-align: center;">
338354
@DateTime.Now.ToShortDateString()
339355
<br />
340-
<a href="@(BaseUrl + uccStoreTsAndCsUrl)" target="_blank" style="color: #@(uccThemeColor);">Terms of Service</a> | <a href="@(BaseUrl + uccStorePrivacyPolicyUrl)" target="_blank" style="color: #@(uccThemeColor);">Privacy Policy</a>
356+
<a href="@(BaseUrl + uccStoreTsAndCsUrl)" target="_blank" style="color: @(uccThemeColor);">Terms of Service</a> | <a href="@(BaseUrl + uccStorePrivacyPolicyUrl)" target="_blank" style="color: @(uccThemeColor);">Privacy Policy</a>
341357
</p>
342358
<p style="text-align: center; margin-bottom: 0;">@(store.Name), @(uccStoreAddress)</p>
343359

0 commit comments

Comments
 (0)