kit

Message entry

Built revision v17.10.0

React
Topics

Human support

Bring a missing role, layout, or state, or a rendering against the standard, to the session working on kit. Name the package and the entry.

On Record

Message entry

Aisha Khan Away
Before you arrive

Ask @Aisha Khan to confirm the address for B-1042 Garden room before .
Read the hire terms first, then use 4721 at the gate.

  • Bring your own chairs.

  • Leave the hall by ten.

  1. Ring the bell by the side gate.

  2. Wait for the caretaker.

  • Done

    Deposit paid

  • Not done

    Key returned

The side door sticks in the cold.

Gate: 4721
Alarm: 0990

Floor plan: garden-room-plan.pdf

Delivered to bookings@oakmerevillagehall.org

You

The Garden room is free that week. I have moved the rehearsal and kept the fee as it stands.

Sending to aisha@oakmereprimary.org

Priya Shah, St Anne’s Scout Group committee

Thank you. We will bring our own chairs on the night.

Delivered to bookings@oakmerevillagehall.org

Priya Shah, St Anne’s Scout Group committee

Could we also borrow the long tables for the evening?

Delivered to bookings@oakmerevillagehall.org

With one action unavailable among the others.

Priya Shah, St Anne’s Scout Group committee

Could we also borrow the long tables for the evening?

Delivered to bookings@oakmerevillagehall.org

Reopen this booking before replying.

While a model’s turn saves, How this was made waits.

Booking assistant

Summary

Written by the booking assistant from the messages in this conversation.

It can be wrong. Check it against the messages.

Wait for the summary to save to see how it was made.

The choir asks to move its rehearsals to the Garden room while the hall floor is sealed. The Garden room is free those evenings.

Source
let lines = (texts): KitReact.AuthoredText.shown => {
  value: texts->Array.map((line): KitReact.AuthoredText.block => Paragraph([Text(line, [])])),
  reader: Specimen_Reader.reader,
  mentionLink: (_, _) => None,
  fileLink: _ => None,
}

let note: KitReact.AuthoredText.shown = {
  value: [
    Heading([Text("Before you arrive", [])]),
    Paragraph([
      Text("Ask ", []),
      Mention({kind: Person, id: "aisha-khan", label: "Aisha Khan"}),
      Text(" to confirm ", []),
      Text("the address", [Bold]),
      Text(" for ", []),
      Mention({kind: Subject, id: "b-1042", label: "B-1042 Garden room"}),
      Text(" before ", []),
      Date({year: 2025, month: 3, day: 14}),
      Text(".", []),
      HardBreak,
      Text("Read the ", []),
      Text("hire terms", [Link("https://example.com/hire-terms")]),
      Text(" first, ", []),
      Text("then", [Italic]),
      Text(" use ", []),
      Text("4721", [Code]),
      Text(" at the gate.", []),
    ]),
    BulletList([[[Text("Bring your own chairs.", [])]], [[Text("Leave the hall by ten.", [])]]]),
    OrderedList([[[Text("Ring the bell by the side gate.", [])]], [[Text("Wait for the caretaker.", [])]]]),
    TaskList([{checked: true, content: [[Text("Deposit paid", [])]]}, {checked: false, content: [[Text("Key returned", [])]]}]),
    Blockquote([[Text("The side door sticks in the cold.", [])]]),
    CodeBlock("Gate: 4721\nAlarm: 0990"),
    Paragraph([Text("Floor plan: ", []), File({id: "floor-plan", name: "garden-room-plan.pdf"})]),
  ],
  reader: Specimen_Reader.reader,
  mentionLink: (kind, _) =>
    switch kind {
    | Person => Some("#role-message-entry")
    | Subject => None
    },
  fileLink: _ => Some("#role-message-entry"),
}

@react.component
let make = () =>
  <>
    <KitReact.Roles.MessageEntry
      author={React.string("Aisha Khan")}
      turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Aisha Khan", initials: "AK", picture: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgdmlld0JveD0iMCAwIDk2IDk2Ij48cmVjdCB3aWR0aD0iOTYiIGhlaWdodD0iOTYiIGZpbGw9IiM4ZmE1YjYiLz48Y2lyY2xlIGN4PSI0OCIgY3k9IjM4IiByPSIxOCIgZmlsbD0iI2U4YzlhOCIvPjxwYXRoIGQ9Ik00OCA2MGMtMTcgMC0yOSAxMS0zMSAyNnYxMGg2MlY4NmMtMi0xNS0xNC0yNi0zMS0yNnoiIGZpbGw9IiMzZjVkNTIiLz48cGF0aCBkPSJNMzAgMzRjMC0xMiA4LTIwIDE4LTIwczE4IDggMTggMjBjMC02LTYtOC0xOC04cy0xOCAyLTE4IDh6IiBmaWxsPSIjNGEzYTJmIi8+PC9zdmc+", availability: [KitReact.Words.Text("Away")]}))}
      time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-03T09:12:00Z"))}
      body=note
      files=[
        {
          key: "schedule",
          content: React.string("rehearsal-schedule.pdf"), href: "#role-message-entry",
          props: {},
        },
        {
          key: "sealing",
          content: React.string("floor-sealing-dates.pdf"), href: "#role-message-entry",
          props: {},
        },
      ]
      delivery={{state: Settled, children: React.string("Delivered")}}
      destination={React.string("to bookings@oakmerevillagehall.org")}
    />
    <KitReact.Roles.MessageEntry
      author={React.string("Oakmere Village Hall")}
      turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Oakmere Village Hall", initials: "OH"}))}
      own=true
      time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-03T11:40:00Z"))}
      body={lines(["The Garden room is free that week. I have moved the rehearsal and kept the fee as it stands."])}
      delivery={{state: Neutral, children: React.string("Sending")}}
      destination={React.string("to aisha@oakmereprimary.org")}
    />
    <KitReact.Roles.MessageEntry
      author={React.string("Priya Shah, St Anne’s Scout Group committee")}
      turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Priya Shah", initials: "PS"}))}
      time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-04T18:05:00Z"))}
      body={lines(["Thank you. We will bring our own chairs on the night."])}
      delivery={{state: Settled, children: React.string("Delivered")}}
      destination={React.string("to bookings@oakmerevillagehall.org")}
    />
    <KitReact.Roles.MessageEntry
      author={React.string("Priya Shah, St Anne’s Scout Group committee")}
      turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Priya Shah", initials: "PS"}))}
      time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-04T18:20:00Z"))}
      body={lines(["Could we also borrow the long tables for the evening?"])}
      delivery={{state: Settled, children: React.string("Delivered")}}
      destination={React.string("to bookings@oakmerevillagehall.org")}
      actions=[KitReact.Roles.MessageEntry.SubtleAction({children: React.string("Reply")}), KitReact.Roles.MessageEntry.SubtleAction({children: React.string("Forward")}), KitReact.Roles.MessageEntry.SubtleAction({children: React.string("Mark as unread")}), KitReact.Roles.MessageEntry.ActionMenu(KitReact.Roles.ActionMenu.role({id: "role-message-entry-fold", label: "More actions for this message", groups: []}))]
    />
    <p className="specimen-case-line">{React.string("With one action unavailable among the others.")}</p>
    <KitReact.Roles.MessageEntry
      author={React.string("Priya Shah, St Anne’s Scout Group committee")}
      turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Priya Shah", initials: "PS"}))}
      time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-04T18:20:00Z"))}
      body={lines(["Could we also borrow the long tables for the evening?"])}
      delivery={{state: Settled, children: React.string("Delivered")}}
      destination={React.string("to bookings@oakmerevillagehall.org")}
      actions=[
        KitReact.Roles.MessageEntry.SubtleAction({children: React.string("Reply"), state: KitReact.ActionState.Inert({id: "role-message-entry-reply", words: [KitReact.Words.Text("Reopen this booking before replying.")]})}),
        KitReact.Roles.MessageEntry.SubtleAction({children: React.string("Forward")}), KitReact.Roles.MessageEntry.SubtleAction({children: React.string("Mark as unread")}),
      ]
    />
    <p className="specimen-case-line">{React.string("While a model’s turn saves, How this was made waits.")}</p>
    <KitReact.Roles.MessageEntry
      author={React.string("Booking assistant")}
      turn={Model({
        mark: {
          id: "role-message-entry-turn",
          word: "Summary",
          madeBy: [Text("Written by the booking assistant from the messages in this conversation.")],
          madeAt: KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-03T11:42:00Z")),
          sources: [],
          caution: [Text("It can be wrong. Check it against the messages.")],
          state: Inert({id: "role-message-entry-turn-how", words: [Text("Wait for the summary to save to see how it was made.")]}),
        },
        state: Whole({retry: {}}),
      })}
      time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-03T11:42:00Z"))}
      body={lines(["The choir asks to move its rehearsals to the Garden room while the hall floor is sealed. The Garden room is free those evenings."])}
    />
  </>

Message entry, failed

You

The side door sticks in the cold. Send deliveries to the main entrance.

This note was not added: the connection dropped before it saved.

With Try again unavailable.

You

The side door sticks in the cold. Send deliveries to the main entrance.

This note was not added: the connection dropped before it saved.

Try again once you are back online.

Source
let lines = (texts): KitReact.AuthoredText.shown => {
  value: texts->Array.map((line): KitReact.AuthoredText.block => Paragraph([Text(line, [])])),
  reader: Specimen_Reader.reader,
  mentionLink: (_, _) => None,
  fileLink: _ => None,
}

@react.component
let make = () => <>
  <KitReact.Roles.MessageEntry
    author={React.string("Priya Shah")}
    turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Priya Shah", initials: "PS"}))}
    own=true
    time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-05T10:20:00Z"))}
    body={lines(["The side door sticks in the cold. Send deliveries to the main entrance."])}
    standing={Failed({words: [KitReact.Words.Text("This note was not added: the connection dropped before it saved.")], tryAgain: {}})}
  />
  <p className="specimen-case-line">{React.string("With Try again unavailable.")}</p>
  <KitReact.Roles.MessageEntry
    author={React.string("Priya Shah")}
    turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Priya Shah", initials: "PS"}))}
    own=true
    time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-05T10:20:00Z"))}
    body={lines(["The side door sticks in the cold. Send deliveries to the main entrance."])}
    standing={Failed({words: [KitReact.Words.Text("This note was not added: the connection dropped before it saved.")], tryAgain: {}, tryAgainState: Inert({id: "role-message-entry-failed-try-again", words: [KitReact.Words.Text("Try again once you are back online.")]})})}
  />
</>

Message entry, conflict

You

The side door sticks in the cold. Send deliveries to the main entrance.

Maya Patel closed this booking while you were adding this note.

With the action unavailable.

You

The side door sticks in the cold. Send deliveries to the main entrance.

Maya Patel closed this booking while you were adding this note.

Reopen this booking before adding to it.

Source
let lines = (texts): KitReact.AuthoredText.shown => {
  value: texts->Array.map((line): KitReact.AuthoredText.block => Paragraph([Text(line, [])])),
  reader: Specimen_Reader.reader,
  mentionLink: (_, _) => None,
  fileLink: _ => None,
}

@react.component
let make = () => <>
  <KitReact.Roles.MessageEntry
    author={React.string("Priya Shah")}
    turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Priya Shah", initials: "PS"}))}
    own=true
    time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-05T10:20:00Z"))}
    body={lines(["The side door sticks in the cold. Send deliveries to the main entrance."])}
    standing={Conflict({words: [KitReact.Words.Text("Maya Patel closed this booking while you were adding this note.")], label: "Add it to the closed booking", action: {}})}
  />
  <p className="specimen-case-line">{React.string("With the action unavailable.")}</p>
  <KitReact.Roles.MessageEntry
    author={React.string("Priya Shah")}
    turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Priya Shah", initials: "PS"}))}
    own=true
    time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-05T10:20:00Z"))}
    body={lines(["The side door sticks in the cold. Send deliveries to the main entrance."])}
    standing={Conflict({words: [KitReact.Words.Text("Maya Patel closed this booking while you were adding this note.")], label: "Add it to the closed booking", action: {}, actionState: Inert({id: "role-message-entry-conflict-action", words: [KitReact.Words.Text("Reopen this booking before adding to it.")]})})}
  />
</>

Message entry, processing

You

The side door sticks in the cold. Send deliveries to the main entrance.

Adding this note…

Source
let lines = (texts): KitReact.AuthoredText.shown => {
  value: texts->Array.map((line): KitReact.AuthoredText.block => Paragraph([Text(line, [])])),
  reader: Specimen_Reader.reader,
  mentionLink: (_, _) => None,
  fileLink: _ => None,
}

@react.component
let make = () =>
  <KitReact.Roles.MessageEntry
    author={React.string("Priya Shah")}
    turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Priya Shah", initials: "PS"}))}
    own=true
    time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-05T10:20:00Z"))}
    body={lines(["The side door sticks in the cold. Send deliveries to the main entrance."])}
    standing={Processing([KitReact.Words.Text("Adding this note…")])}
  />

Message entry, unsaved

You

The side door sticks in the cold. Send deliveries to the main entrance.

This note will be added when you are back online.

Source
let lines = (texts): KitReact.AuthoredText.shown => {
  value: texts->Array.map((line): KitReact.AuthoredText.block => Paragraph([Text(line, [])])),
  reader: Specimen_Reader.reader,
  mentionLink: (_, _) => None,
  fileLink: _ => None,
}

@react.component
let make = () =>
  <KitReact.Roles.MessageEntry
    author={React.string("Priya Shah")}
    turn={KitReact.Roles.MessageEntry.Person(KitReact.Roles.Avatar.Person({name: "Priya Shah", initials: "PS"}))}
    own=true
    time={KitReact.Time.moment(Specimen_Reader.reader, Date.fromString("2025-02-05T10:20:00Z"))}
    body={lines(["The side door sticks in the cold. Send deliveries to the main entrance."])}
    standing={Unsaved([KitReact.Words.Text("This note will be added when you are back online.")])}
  />