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> = {};
15const accessories: Record<string, React.FC<any>> = {};
16
17function addEntries(
18 elements: React.ReactNode[],
19 entries: Record<string, MessageUsername | MessageUsernameBadge | MessageBadge>,
20 indicies: Partial<
21 Record<
22 | keyof typeof MessageUsernameIndicies
23 | keyof typeof MessageUsernameBadgeIndicies
24 | keyof typeof MessageBadgeIndicies,
25 number
26 >
27 >,
28 props: any
29) {
30 const originalElements = [...elements];
31 for (const [id, entry] of Object.entries(entries)) {
32 const component = <entry.component {...props} key={id} />;
33
34 if (entry.anchor === undefined) {
35 if (entry.before) {
36 elements.splice(0, 0, component);
37 } else {
38 elements.push(component);
39 }
40 } else {
41 const index = elements.indexOf(originalElements[indicies[entry.anchor]!]);
42 elements.splice(index! + (entry.before ? 0 : 1), 0, component);
43 }
44 }
45}
46
47function addComponents(elements: React.ReactNode[], components: Record<string, React.FC<any>>, props: any) {
48 for (const [id, Component] of Object.entries(components)) {
49 const component = <Component {...props} key={id} />;
50 elements.push(component);
51 }
52}
53
54export const messages: Messages = {
55 addToUsername(id, component, anchor, before = false) {
56 username[id] = {
57 component,
58 anchor,
59 before
60 };
61 },
62 addUsernameBadge(id, component, anchor, before = false) {
63 usernameBadges[id] = {
64 component,
65 anchor,
66 before
67 };
68 },
69 addBadge(id, component, anchor, before = false) {
70 badges[id] = {
71 component,
72 anchor,
73 before
74 };
75 },
76 addAccessory(id, component) {
77 accessories[id] = component;
78 },
79 _patchUsername(elements, props) {
80 addEntries(elements, username, MessageUsernameIndicies, props);
81 return elements;
82 },
83 _patchUsernameBadges(elements, props) {
84 addEntries(elements, usernameBadges, MessageUsernameBadgeIndicies, props);
85 return elements;
86 },
87 _patchBadges(elements, props) {
88 addEntries(elements, badges, MessageBadgeIndicies, props);
89 return elements;
90 },
91 _patchAccessories(elements, props) {
92 addComponents(elements, accessories, props);
93 return elements;
94 }
95};
96
97export default messages;