this repo has no description
1import {
2 MessageBadge,
3 MessageBadgeIndicies,
4 Messages,
5 MessageUsername,
6 MessageUsernameBadge,
7 MessageUsernameBadgeIndicies,
8 MessageUsernameIndicies
9} from "@moonlight-mod/types/coreExtensions/componentEditor";
10import React from "@moonlight-mod/wp/react";
11
12const username: Record<string, MessageUsername> = {};
13const usernameBadges: Record<string, MessageUsernameBadge> = {};
14const badges: Record<string, MessageBadge> = {};
15
16function addEntries(
17 elements: React.ReactNode[],
18 entries: Record<string, MessageUsername | MessageUsernameBadge | MessageBadge>,
19 indicies: Partial<
20 Record<
21 | keyof typeof MessageUsernameIndicies
22 | keyof typeof MessageUsernameBadgeIndicies
23 | keyof typeof MessageBadgeIndicies,
24 number
25 >
26 >,
27 props: any
28) {
29 const originalElements = [...elements];
30 for (const [id, entry] of Object.entries(entries)) {
31 const component = <entry.component {...props} key={id} />;
32
33 if (entry.anchor === undefined) {
34 if (entry.before) {
35 elements.splice(0, 0, component);
36 } else {
37 elements.push(component);
38 }
39 } else {
40 const index = elements.indexOf(originalElements[indicies[entry.anchor]!]);
41 elements.splice(index! + (entry.before ? 0 : 1), 0, component);
42 }
43 }
44}
45
46export const messages: Messages = {
47 addToUsername(id, component, anchor, before = false) {
48 username[id] = {
49 component,
50 anchor,
51 before
52 };
53 },
54 addUsernameBadge(id, component, anchor, before = false) {
55 usernameBadges[id] = {
56 component,
57 anchor,
58 before
59 };
60 },
61 addBadge(id, component, anchor, before = false) {
62 badges[id] = {
63 component,
64 anchor,
65 before
66 };
67 },
68 _patchUsername(elements, props) {
69 addEntries(elements, username, MessageUsernameIndicies, props);
70 return elements;
71 },
72 _patchUsernameBadges(elements, props) {
73 addEntries(elements, usernameBadges, MessageUsernameBadgeIndicies, props);
74 return elements;
75 },
76 _patchBadges(elements, props) {
77 addEntries(elements, badges, MessageBadgeIndicies, props);
78 return elements;
79 }
80};
81
82export default messages;