Skip to content

Commit cead45d

Browse files
committed
feature: support multiple ReadingTime property types per content type
1 parent cdc3435 commit cead45d

14 files changed

+166
-67
lines changed

src/jcdcdev.Umbraco.ReadingTime/Core/IReadingTimeService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public interface IReadingTimeService
77
{
88
Task ScanTree(int homeId);
99
Task Process(IContent item);
10-
Task<ContentReadingTimeModel?> GetAsync(Guid key);
1110
Task<int> DeleteAsync(Guid key);
11+
Task<ReadingTimeDto?> GetAsync(Guid key, Guid dataTypeKey);
12+
Task<ReadingTimeDto?> GetAsync(Guid key, int dataTypeId);
1213
}

src/jcdcdev.Umbraco.ReadingTime/Core/Models/ContentReadingTimeModel.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using Umbraco.Extensions;
2+
3+
namespace jcdcdev.Umbraco.ReadingTime.Core.Models;
4+
5+
public class ReadingTimeDto
6+
{
7+
public List<ReadingTimeVariantDto?> Data { get; init; } = new();
8+
public int Id { get; init; }
9+
public Guid Key { get; init; }
10+
public int DataTypeId { get; init; }
11+
public Guid DataTypeKey { get; set; }
12+
13+
public ReadingTimeVariantDto? Value(string? culture = null) => Data.FirstOrDefault(x => x?.Culture.InvariantEquals(culture) ?? false);
14+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System.Runtime.Serialization;
2+
3+
namespace jcdcdev.Umbraco.ReadingTime.Core.Models;
4+
5+
public class ReadingTimeVariantDto
6+
{
7+
[DataMember(Name = "culture")]
8+
public string? Culture { get; set; }
9+
[DataMember(Name = "readingTime")]
10+
public TimeSpan? ReadingTime { get; set; }
11+
}

src/jcdcdev.Umbraco.ReadingTime/Core/Models/ReadingTimeVariantModel.cs

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/jcdcdev.Umbraco.ReadingTime/Core/PropertyEditors/ReadingTimePropertyValueConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public ReadingTimePropertyValueConverter(
3333
return null;
3434
}
3535

36-
var model = _readingTimeService.GetAsync(key).GetAwaiter().GetResult();
36+
var model = _readingTimeService.GetAsync(key, propertyType.DataType.Id).GetAwaiter().GetResult();
3737
var culture = _variationContextAccessor.VariationContext?.Culture;
3838
var config = propertyType.DataType.ConfigurationAs<ReadingTimeConfiguration>();
3939
if (config is null)

src/jcdcdev.Umbraco.ReadingTime/Core/ReadingTimeNotificationHandler.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using jcdcdev.Umbraco.ReadingTime.Core.Extensions;
33
using jcdcdev.Umbraco.ReadingTime.Core.PropertyEditors;
44
using Umbraco.Cms.Core.Events;
5+
using Umbraco.Cms.Core.Models;
56
using Umbraco.Cms.Core.Models.ContentEditing;
67
using Umbraco.Cms.Core.Notifications;
78
using Umbraco.Cms.Core.Services;
@@ -46,6 +47,12 @@ public async Task HandleAsync(SendingContentNotification notification, Cancellat
4647
return;
4748
}
4849

50+
var contentType = notification.Content.DocumentType;
51+
if (contentType == null)
52+
{
53+
return;
54+
}
55+
4956
var properties = new List<ContentPropertyDisplay>();
5057
foreach (var variant in notification.Content.Variants)
5158
{
@@ -79,10 +86,11 @@ public async Task HandleAsync(SendingContentNotification notification, Cancellat
7986
return;
8087
}
8188

82-
var model = await _readingTimeService.GetAsync(notification.Content.Key.Value);
8389

8490
foreach (var property in properties)
8591
{
92+
93+
var model = await _readingTimeService.GetAsync(notification.Content.Key.Value, property.DataTypeKey);
8694
if (model == null)
8795
{
8896
property.Value = _localizedTextService.Localize(Constants.LocalisationKeys.Area, Constants.LocalisationKeys.SaveAndPublishToGenerateReadingTime);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using jcdcdev.Umbraco.ReadingTime.Core;
2+
using Umbraco.Cms.Infrastructure.Migrations;
3+
4+
namespace jcdcdev.Umbraco.ReadingTime.Infrastructure.Migrations;
5+
6+
public class MultiplePropertyEditorSupport : MigrationBase
7+
{
8+
public MultiplePropertyEditorSupport(IMigrationContext context) : base(context)
9+
{
10+
}
11+
12+
protected override void Migrate()
13+
{
14+
if (!ColumnExists(Constants.TableName, "dataTypeId"))
15+
{
16+
Alter.Table(Constants.TableName)
17+
.AddColumn("dataTypeId")
18+
.AsInt32()
19+
.ForeignKey(global::Umbraco.Cms.Core.Constants.DatabaseSchema.Tables.Node, "id")
20+
.NotNullable()
21+
.Do();
22+
}
23+
24+
if (!ColumnExists(Constants.TableName, "dataTypeKey"))
25+
{
26+
Alter.Table(Constants.TableName)
27+
.AddColumn("dataTypeKey")
28+
.AsInt32()
29+
.ForeignKey(global::Umbraco.Cms.Core.Constants.DatabaseSchema.Tables.Node, "uniqueId")
30+
.NotNullable()
31+
.Do();
32+
}
33+
}
34+
}

src/jcdcdev.Umbraco.ReadingTime/Infrastructure/Migrations/InitialMigration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ protected override void Migrate()
1717
Delete.Table(Constants.TableName).Do();
1818
}
1919

20-
Create.Table<ContentReadingTimePoco>().Do();
20+
Create.Table<ReadingTimePoco>().Do();
2121
}
2222
}

src/jcdcdev.Umbraco.ReadingTime/Infrastructure/Migrations/MigrationPlan.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ protected override void DefinePlan()
1313
{
1414
From(string.Empty);
1515
To<InitialMigration>(nameof(InitialMigration));
16+
To<MultiplePropertyEditorSupport>(nameof(MultiplePropertyEditorSupport));
1617
}
1718
}

0 commit comments

Comments
 (0)