// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. namespace Microsoft.Teams.Apps.Schema.Entities; /// /// Citation entity extension methods. /// public static class CitationEntityExtensions { /// /// Gets the first citation entity from the activity. /// public static CitationEntity? GetCitation(this TeamsActivity activity) { ArgumentNullException.ThrowIfNull(activity); if (activity.Entities == null) { return null; } return activity.Entities.FirstOrDefault(e => e is CitationEntity) as CitationEntity; } /// /// Internal helper to add a citation claim to an activity. /// internal static CitationEntity AddToActivity(TeamsActivity activity, int position, CitationAppearance appearance) { ArgumentNullException.ThrowIfNull(activity); ArgumentNullException.ThrowIfNull(appearance); activity.Entities ??= []; // Get or create the root message entity OMessageEntity existingMessageEntity = OMessageEntityExtensions.GetOrCreateRootMessageEntity(activity); // Remove existing message entity to replace with citation entity activity.Entities.Remove(existingMessageEntity); // Create citation entity from message entity CitationEntity citationEntity = new(existingMessageEntity); citationEntity.Citation ??= []; citationEntity.Citation.Add(new CitationClaim() { Position = position, Appearance = appearance.ToDocument() }); activity.Entities.Add(citationEntity); return citationEntity; } }