+
+ {open && (
+
+ {acked.map((ack) => (
+
+ {ack.DisplayName || ack.UserId}
+ {ack.AcknowledgedOn ? formatAckTime(ack.AcknowledgedOn) : ''}
+
+ ))}
+ {pending.map((ack) => (
+
+ {ack.DisplayName || ack.UserId}
+ pending
+
+ ))}
+
+ )}
+
+ );
+}
diff --git a/Web/Resgrid.Web/Areas/User/Apps/src/components/chat/atoms/Composer.tsx b/Web/Resgrid.Web/Areas/User/Apps/src/components/chat/atoms/Composer.tsx
index 1d075897..796a5809 100644
--- a/Web/Resgrid.Web/Areas/User/Apps/src/components/chat/atoms/Composer.tsx
+++ b/Web/Resgrid.Web/Areas/User/Apps/src/components/chat/atoms/Composer.tsx
@@ -19,6 +19,7 @@ interface ComposerProps {
allowGifs?: boolean;
allowImages?: boolean;
allowUrgent?: boolean;
+ allowEmoji?: boolean;
placeholder?: string;
disabled?: boolean;
}
@@ -36,6 +37,7 @@ export default function Composer({
allowGifs = true,
allowImages = true,
allowUrgent = true,
+ allowEmoji = true,
placeholder = 'Write a message…',
disabled = false,
}: ComposerProps) {
@@ -241,15 +243,17 @@ export default function Composer({
-
+ {allowEmoji && (
+
+ )}
{allowGifs && (
)}
+ {isUrgent && !isDeleted && !isFailed && props.showAckStatus &&
}
+
{!isDeleted && !isFailed && (
props.onReact(message, emoji, mine)}
+ onToggle={(emoji, mine) => props.onReact?.(message, emoji, mine)}
/>
)}
@@ -239,34 +244,36 @@ function MessageBubble(props: MessageBubbleProps) {
{!isDeleted && !editing && !isFailed && (
-
-
- {showReactions && (
-
- {QUICK_REACTIONS.map((emoji) => (
-
- ))}
-
- )}
-
+ {props.onReact && (
+
+
+ {showReactions && (
+
+ {QUICK_REACTIONS.map((emoji) => (
+
+ ))}
+
+ )}
+
+ )}
{props.onOpenThread && (