Variable DirectThreadDataSchemaConst
DirectThreadDataSchema: Struct<
{
media: $Array<
Union<
readonly [
Struct<
{
height: Number;
media_type: Literal<1>;
pk: String;
url: String;
width: Number;
},
>,
Struct<
{
height: Number;
media_type: Literal<2>;
pk: String;
url: String;
width: Number;
},
>,
Struct<
{
media_type: Literal<8>;
pk: String;
slides: $Array<
Struct<{ media_type: Union<(...)>; pk: String; url: String }>,
>;
},
>,
],
>,
>;
messages: $Array<
Struct<
{
item_id: String;
item_type: String;
media: optionalKey<
Union<
readonly [
Struct<
{
height: Number;
media_type: Literal<(...)>;
pk: String;
url: String;
width: Number;
},
>,
Struct<
{
height: Number;
media_type: Literal<(...)>;
pk: String;
url: String;
width: Number;
},
>,
Struct<
{
media_type: Literal<(...)>;
pk: String;
slides: $Array<(...)>;
},
>,
],
>,
>;
send_attribution: optionalKey<String>;
text: optionalKey<String>;
thread_id: String;
timestamp: String;
user_id: String;
},
>,
>;
thread: Union<
readonly [
Struct<
{
is_group: Boolean;
kind: Literal<"thread">;
muted: Boolean;
thread_id: String;
thread_title: String;
thread_v2_id: String;
},
>,
Struct<
{
kind: Literal<"compose">;
recipient_user_id: String;
thread_title: String;
},
>,
],
>;
users: $Array<
Struct<
{
full_name: String;
pk: String;
thread_v2_id: String;
username: String;
},
>,
>;
},
> = ...
What a thread shows: its participants, its messages and the media elements among them, and its identity — a sum nested under
thread, because a handle's data keys are the union's common keys (a top-level union would drop every variant field from the handle), and because a field exists only where it means something:thread: an existing conversation — its v2 id, its name, whether it is a group, and whether its notifications are muted;compose: a picked recipient whose first message has not created the conversation yet — no thread id exists, the person is not a group and has no thread notification setting, so none of those three is carried, and the screen shows the recipient's name and an empty conversation.