forked from Acode-Foundation/Acode
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathitem.js
More file actions
124 lines (122 loc) · 3.58 KB
/
item.js
File metadata and controls
124 lines (122 loc) · 3.58 KB
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import helpers from "utils/helpers";
import pluginIcon from './plugin-icon.png';
/**
* Creates a plugin list item
* @param {object} param0
* @param {string} [param0.id]
* @param {string} [param0.name]
* @param {string} [param0.icon]
* @param {string} [param0.version]
* @param {number} [param0.downloads]
* @param {boolean} [param0.installed]
* @param {boolean} [param0.enabled]
* @param {function} [param0.onToggleEnabled]
* @returns
*/
export default function Item({
id,
name,
icon,
version,
license,
author,
price,
author_verified,
downloads,
installed,
enabled,
onToggleEnabled,
updates,
}) {
const authorName = (() => {
const displayName =
typeof author === "object" ? author.name : author || "Unknown";
// Check if it's likely an email or too long
if (displayName.includes("@") || displayName.length > 20) {
return displayName.substring(0, 20) + "...";
}
return displayName;
})();
return (
<div
data-id={id}
data-plugin-enabled={enabled !== false}
className="list-item"
data-action="open"
data-installed={(!!installed).toString()}
style={enabled === false ? { opacity: 0.6 } : {}}
>
<div className="plugin-header">
<div className="plugin-icon">
<img src={icon || pluginIcon} alt={name + " icon"} />
</div>
<div className="plugin-info">
<div className="plugin-main">
<div className="plugin-title">
<span className="plugin-name" title={name}>
{name}
</span>
<span className="plugin-version">v{version}</span>
</div>
<div className="plugin-meta">
<div
className="plugin-stats plugin-author"
title={
typeof author === "object" ? author.name : author || "Unknown"
}
>
<span className="icon person"></span>
{authorName}
{author_verified ? (
<i
className="icon verified"
style={{ color: "#3b82f6" }}
></i>
) : (
""
)}
</div>
<span className="plugin-meta-dot"></span>
<div className="plugin-stats">
<span
className="icon scale"
style={{ fontSize: "12px" }}
></span>
{license || "Unknown"}
</div>
{downloads && (
<>
<span className="plugin-meta-dot"></span>
<div className="plugin-stats">
<span className="icon save_alt"></span>
{helpers.formatDownloadCount(downloads)}
</div>
</>
)}
</div>
</div>
{price !== null && price !== undefined && price !== 0 ? (
<span className="plugin-price">₹{price}</span>
) : null}
{installed && !updates ? (
<span
className="plugin-toggle-switch"
data-enabled={enabled}
onclick={e => {
e.stopPropagation();
onToggleEnabled?.(id, enabled);
}}
>
<span
className="plugin-toggle-track"
data-enabled={enabled}
>
<span className="plugin-toggle-thumb" />
</span>
</span>
) : null}
</div>
</div>
</div>
);
}