aboutsummaryrefslogtreecommitdiff
path: root/src/api/MessageAccessories.ts
blob: 3a468284af6f8ee21c393427a1ad16ee803807f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
export type AccessoryCallback = (props: Record<string, any>) => JSX.Element;
export type Accessory = {
    callback: AccessoryCallback;
    position?: number;
};

export const accessories = new Map<String, Accessory>();

export function addAccessory(
    identifier: string,
    callback: AccessoryCallback,
    position?: number
) {
    accessories.set(identifier, {
        callback,
        position,
    });
}

export function removeAccessory(identifier: string) {
    accessories.delete(identifier);
}

export function _modifyAccessories(
    elements: JSX.Element[],
    props: Record<string, any>
) {
    for (const accessory of accessories.values()) {
        elements.splice(
            accessory.position != null
                ? accessory.position < 0
                    ? elements.length + accessory.position
                    : accessory.position
                : elements.length,
            0,
            accessory.callback(props)
        );
    }

    return elements;
}