octalens-mentions 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{App-CPej22xb.js → App-B-QcAxW7.js} +2 -2
- package/dist/_chunks/{App-DA1KtZxY.js.map → App-B-QcAxW7.js.map} +1 -1
- package/dist/_chunks/{App-HpszAlq5.mjs → App-DjWYlFjn.mjs} +2 -2
- package/dist/_chunks/{App-HpszAlq5.mjs.map → App-DjWYlFjn.mjs.map} +1 -1
- package/dist/_chunks/{index-MjmrX_qB.js → index-QtHFaCQE.js} +16 -4
- package/dist/_chunks/index-QtHFaCQE.js.map +1 -0
- package/dist/_chunks/{index-3mNRnzIR.mjs → index-S3IY0oBe.mjs} +17 -5
- package/dist/_chunks/index-S3IY0oBe.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/src/types/index.d.ts +1 -0
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +2 -1
- package/dist/server/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/_chunks/App--ENzwlke.js +0 -30
- package/dist/_chunks/App--ENzwlke.js.map +0 -1
- package/dist/_chunks/App-75QgqKbt.mjs +0 -29
- package/dist/_chunks/App-75QgqKbt.mjs.map +0 -1
- package/dist/_chunks/App-BAfec0ux.mjs +0 -31
- package/dist/_chunks/App-BAfec0ux.mjs.map +0 -1
- package/dist/_chunks/App-BIffUtYI.js +0 -30
- package/dist/_chunks/App-BIffUtYI.js.map +0 -1
- package/dist/_chunks/App-B_sMYxju.mjs +0 -27
- package/dist/_chunks/App-B_sMYxju.mjs.map +0 -1
- package/dist/_chunks/App-BcWFGc-s.js +0 -31
- package/dist/_chunks/App-BcWFGc-s.js.map +0 -1
- package/dist/_chunks/App-Bdin-Qhb.js +0 -30
- package/dist/_chunks/App-Bdin-Qhb.js.map +0 -1
- package/dist/_chunks/App-BjIpZ5Gy.js +0 -29
- package/dist/_chunks/App-BjIpZ5Gy.js.map +0 -1
- package/dist/_chunks/App-Bz4Wu5GI.mjs +0 -30
- package/dist/_chunks/App-Bz4Wu5GI.mjs.map +0 -1
- package/dist/_chunks/App-C0IDjiqN.mjs +0 -30
- package/dist/_chunks/App-C0IDjiqN.mjs.map +0 -1
- package/dist/_chunks/App-C46-I109.mjs +0 -29
- package/dist/_chunks/App-C46-I109.mjs.map +0 -1
- package/dist/_chunks/App-CFbMml4i.js +0 -29
- package/dist/_chunks/App-CFbMml4i.js.map +0 -1
- package/dist/_chunks/App-CPej22xb.js.map +0 -1
- package/dist/_chunks/App-CTT2mCMu.js +0 -24
- package/dist/_chunks/App-CTT2mCMu.js.map +0 -1
- package/dist/_chunks/App-CZ5Z2mZv.js +0 -29
- package/dist/_chunks/App-CZ5Z2mZv.js.map +0 -1
- package/dist/_chunks/App-C_Lp3V5-.js +0 -27
- package/dist/_chunks/App-C_Lp3V5-.js.map +0 -1
- package/dist/_chunks/App-CcbyKFnF.js +0 -55
- package/dist/_chunks/App-CcbyKFnF.js.map +0 -1
- package/dist/_chunks/App-CjOu4m5M.mjs +0 -29
- package/dist/_chunks/App-CjOu4m5M.mjs.map +0 -1
- package/dist/_chunks/App-CkT0fH8s.mjs +0 -29
- package/dist/_chunks/App-CkT0fH8s.mjs.map +0 -1
- package/dist/_chunks/App-CmRg9S2z.mjs +0 -29
- package/dist/_chunks/App-CmRg9S2z.mjs.map +0 -1
- package/dist/_chunks/App-D0rBJ7iM.mjs +0 -30
- package/dist/_chunks/App-D0rBJ7iM.mjs.map +0 -1
- package/dist/_chunks/App-D92R87Zh.js +0 -29
- package/dist/_chunks/App-D92R87Zh.js.map +0 -1
- package/dist/_chunks/App-DA1KtZxY.js +0 -29
- package/dist/_chunks/App-DC64hBpD.js +0 -29
- package/dist/_chunks/App-DC64hBpD.js.map +0 -1
- package/dist/_chunks/App-DHKoqr97.mjs +0 -29
- package/dist/_chunks/App-DHKoqr97.mjs.map +0 -1
- package/dist/_chunks/App-D_uRLQKm.js +0 -30
- package/dist/_chunks/App-D_uRLQKm.js.map +0 -1
- package/dist/_chunks/App-Dwg3aLMa.mjs +0 -55
- package/dist/_chunks/App-Dwg3aLMa.mjs.map +0 -1
- package/dist/_chunks/App-DzHKWBmE.mjs +0 -30
- package/dist/_chunks/App-DzHKWBmE.mjs.map +0 -1
- package/dist/_chunks/App-OuT3TTVJ.mjs +0 -29
- package/dist/_chunks/App-OuT3TTVJ.mjs.map +0 -1
- package/dist/_chunks/App-PNVuelEp.mjs +0 -24
- package/dist/_chunks/App-PNVuelEp.mjs.map +0 -1
- package/dist/_chunks/App-Sr50o70g.js +0 -29
- package/dist/_chunks/App-Sr50o70g.js.map +0 -1
- package/dist/_chunks/App-ot837BOf.js +0 -29
- package/dist/_chunks/App-ot837BOf.js.map +0 -1
- package/dist/_chunks/App-sSrt9hXQ.mjs +0 -29
- package/dist/_chunks/App-sSrt9hXQ.mjs.map +0 -1
- package/dist/_chunks/index--annyiFm.mjs +0 -168
- package/dist/_chunks/index--annyiFm.mjs.map +0 -1
- package/dist/_chunks/index-3mNRnzIR.mjs.map +0 -1
- package/dist/_chunks/index-B26su1ae.js +0 -168
- package/dist/_chunks/index-B26su1ae.js.map +0 -1
- package/dist/_chunks/index-B2sNP6GB.mjs +0 -168
- package/dist/_chunks/index-B2sNP6GB.mjs.map +0 -1
- package/dist/_chunks/index-BBddlEA1.js +0 -148
- package/dist/_chunks/index-BBddlEA1.js.map +0 -1
- package/dist/_chunks/index-BK0eSFgX.js +0 -167
- package/dist/_chunks/index-BK0eSFgX.js.map +0 -1
- package/dist/_chunks/index-BMLg_Xy6.mjs +0 -168
- package/dist/_chunks/index-BMLg_Xy6.mjs.map +0 -1
- package/dist/_chunks/index-BQ3z94rf.js +0 -167
- package/dist/_chunks/index-BQ3z94rf.js.map +0 -1
- package/dist/_chunks/index-BTLbR3Fz.js +0 -146
- package/dist/_chunks/index-BTLbR3Fz.js.map +0 -1
- package/dist/_chunks/index-Brdl3E9B.js +0 -167
- package/dist/_chunks/index-Brdl3E9B.js.map +0 -1
- package/dist/_chunks/index-C1E0XTLK.js +0 -167
- package/dist/_chunks/index-C1E0XTLK.js.map +0 -1
- package/dist/_chunks/index-CEANqesM.mjs +0 -149
- package/dist/_chunks/index-CEANqesM.mjs.map +0 -1
- package/dist/_chunks/index-CWUnKgbJ.mjs +0 -168
- package/dist/_chunks/index-CWUnKgbJ.mjs.map +0 -1
- package/dist/_chunks/index-CaLjngAz.js +0 -167
- package/dist/_chunks/index-CaLjngAz.js.map +0 -1
- package/dist/_chunks/index-CiKBF0JD.js +0 -167
- package/dist/_chunks/index-CiKBF0JD.js.map +0 -1
- package/dist/_chunks/index-Csbvj5yS.mjs +0 -168
- package/dist/_chunks/index-Csbvj5yS.mjs.map +0 -1
- package/dist/_chunks/index-CtQiBuW6.js +0 -167
- package/dist/_chunks/index-CtQiBuW6.js.map +0 -1
- package/dist/_chunks/index-D14Rwvah.js +0 -167
- package/dist/_chunks/index-D14Rwvah.js.map +0 -1
- package/dist/_chunks/index-D4gZr0dD.js +0 -167
- package/dist/_chunks/index-D4gZr0dD.js.map +0 -1
- package/dist/_chunks/index-DCBzOUS9.mjs +0 -168
- package/dist/_chunks/index-DCBzOUS9.mjs.map +0 -1
- package/dist/_chunks/index-DNiMaXXq.mjs +0 -168
- package/dist/_chunks/index-DNiMaXXq.mjs.map +0 -1
- package/dist/_chunks/index-DOggc2pQ.js +0 -167
- package/dist/_chunks/index-DOggc2pQ.js.map +0 -1
- package/dist/_chunks/index-DPb3j3vn.mjs +0 -168
- package/dist/_chunks/index-DPb3j3vn.mjs.map +0 -1
- package/dist/_chunks/index-DdzkeneF.js +0 -167
- package/dist/_chunks/index-DdzkeneF.js.map +0 -1
- package/dist/_chunks/index-DjIZwNv3.js +0 -167
- package/dist/_chunks/index-DjIZwNv3.js.map +0 -1
- package/dist/_chunks/index-Dkdi7LFi.mjs +0 -168
- package/dist/_chunks/index-Dkdi7LFi.mjs.map +0 -1
- package/dist/_chunks/index-Dtd5kXzE.js +0 -167
- package/dist/_chunks/index-Dtd5kXzE.js.map +0 -1
- package/dist/_chunks/index-HmV1XMES.mjs +0 -168
- package/dist/_chunks/index-HmV1XMES.mjs.map +0 -1
- package/dist/_chunks/index-MjmrX_qB.js.map +0 -1
- package/dist/_chunks/index-U0EJ6dJB.mjs +0 -147
- package/dist/_chunks/index-U0EJ6dJB.mjs.map +0 -1
- package/dist/_chunks/index-i2nteAHO.mjs +0 -168
- package/dist/_chunks/index-i2nteAHO.mjs.map +0 -1
- package/dist/_chunks/index-jZYmZUW8.mjs +0 -169
- package/dist/_chunks/index-jZYmZUW8.mjs.map +0 -1
- package/dist/_chunks/index-rOWNxR0l.mjs +0 -168
- package/dist/_chunks/index-rOWNxR0l.mjs.map +0 -1
- package/dist/_chunks/index-zpJzJYtP.mjs +0 -168
- package/dist/_chunks/index-zpJzJYtP.mjs.map +0 -1
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { PuzzlePiece, Pencil, Trash, Globe } from "@strapi/icons";
|
|
2
|
-
import { useRef, useEffect, useState } from "react";
|
|
3
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
-
import { Table, Thead, Tr, Th, Checkbox, Typography, VisuallyHidden, Tbody, Td, Flex, IconButton, Box } from "@strapi/design-system";
|
|
5
|
-
import { useFetchClient } from "@strapi/strapi/admin";
|
|
6
|
-
const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
7
|
-
const v = glob[path];
|
|
8
|
-
if (v) {
|
|
9
|
-
return typeof v === "function" ? v() : Promise.resolve(v);
|
|
10
|
-
}
|
|
11
|
-
return new Promise((_, reject) => {
|
|
12
|
-
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
|
13
|
-
reject.bind(
|
|
14
|
-
null,
|
|
15
|
-
new Error(
|
|
16
|
-
"Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
|
|
17
|
-
)
|
|
18
|
-
)
|
|
19
|
-
);
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
const PLUGIN_ID = "octalens-mentions";
|
|
23
|
-
const Initializer = ({ setPlugin }) => {
|
|
24
|
-
const ref = useRef(setPlugin);
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
ref.current(PLUGIN_ID);
|
|
27
|
-
}, []);
|
|
28
|
-
return null;
|
|
29
|
-
};
|
|
30
|
-
const PluginIcon = () => /* @__PURE__ */ jsx(PuzzlePiece, {});
|
|
31
|
-
const BASE_PATH = "/octalens-mentions";
|
|
32
|
-
const CONSTANTS = {
|
|
33
|
-
routes: {
|
|
34
|
-
MENTIONS_URL: BASE_PATH + "/mentions"
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
function useMentions() {
|
|
38
|
-
const { get } = useFetchClient();
|
|
39
|
-
const [mentions, setMentions] = useState([]);
|
|
40
|
-
const [loading, setLoading] = useState(true);
|
|
41
|
-
const [error, setError] = useState(null);
|
|
42
|
-
useEffect(() => {
|
|
43
|
-
const fetchMentions = async () => {
|
|
44
|
-
try {
|
|
45
|
-
setLoading(true);
|
|
46
|
-
setError(null);
|
|
47
|
-
const { data } = await get(CONSTANTS.routes.MENTIONS_URL);
|
|
48
|
-
const mentions2 = data?.data;
|
|
49
|
-
setMentions(mentions2 || []);
|
|
50
|
-
} catch (error2) {
|
|
51
|
-
console.error("Error fetching mentions:", error2);
|
|
52
|
-
setError(error2 instanceof Error ? error2 : new Error("Failed to fetch mentions"));
|
|
53
|
-
} finally {
|
|
54
|
-
setLoading(false);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
fetchMentions();
|
|
58
|
-
}, [get]);
|
|
59
|
-
return { mentions, loading, error };
|
|
60
|
-
}
|
|
61
|
-
const COL_COUNT = 7;
|
|
62
|
-
function MentionsTable({ mentions }) {
|
|
63
|
-
return /* @__PURE__ */ jsxs(Table, { colCount: COL_COUNT, rowCount: mentions.length, children: [
|
|
64
|
-
/* @__PURE__ */ jsx(Thead, { children: /* @__PURE__ */ jsxs(Tr, { children: [
|
|
65
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Checkbox, { "aria-label": "Select all entries" }) }),
|
|
66
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Title" }) }),
|
|
67
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Source" }) }),
|
|
68
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Keyword" }) }),
|
|
69
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Relevance Score" }) }),
|
|
70
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Comment" }) }),
|
|
71
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(VisuallyHidden, { children: "Actions" }) })
|
|
72
|
-
] }) }),
|
|
73
|
-
/* @__PURE__ */ jsx(Tbody, { children: mentions.map((mention) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
74
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Checkbox, { "aria-label": `Select ${mention.title}` }) }),
|
|
75
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", fontWeight: "bold", children: mention.title || "Untitled" }) }),
|
|
76
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", children: mention.source }) }),
|
|
77
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", children: mention.keyword }) }),
|
|
78
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", children: mention.relevanceScore }) }),
|
|
79
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsxs(Typography, { textColor: "neutral600", ellipsis: true, children: [
|
|
80
|
-
mention.relevanceComment?.substring(0, 50),
|
|
81
|
-
mention.relevanceComment?.length > 50 ? "..." : ""
|
|
82
|
-
] }) }),
|
|
83
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsxs(Flex, { children: [
|
|
84
|
-
/* @__PURE__ */ jsx(
|
|
85
|
-
IconButton,
|
|
86
|
-
{
|
|
87
|
-
onClick: () => console.log("edit", mention.documentId),
|
|
88
|
-
label: "Edit",
|
|
89
|
-
borderWidth: 0,
|
|
90
|
-
children: /* @__PURE__ */ jsx(Pencil, {})
|
|
91
|
-
}
|
|
92
|
-
),
|
|
93
|
-
/* @__PURE__ */ jsx(Box, { paddingLeft: 1, children: /* @__PURE__ */ jsx(
|
|
94
|
-
IconButton,
|
|
95
|
-
{
|
|
96
|
-
onClick: () => console.log("delete", mention.documentId),
|
|
97
|
-
label: "Delete",
|
|
98
|
-
borderWidth: 0,
|
|
99
|
-
children: /* @__PURE__ */ jsx(Trash, {})
|
|
100
|
-
}
|
|
101
|
-
) })
|
|
102
|
-
] }) })
|
|
103
|
-
] }, mention.documentId)) })
|
|
104
|
-
] });
|
|
105
|
-
}
|
|
106
|
-
function MentionsWidget() {
|
|
107
|
-
const { mentions, loading, error } = useMentions();
|
|
108
|
-
if (loading) {
|
|
109
|
-
return /* @__PURE__ */ jsx(Box, { padding: 4, children: /* @__PURE__ */ jsx(Typography, { children: "Loading mentions..." }) });
|
|
110
|
-
}
|
|
111
|
-
if (error) {
|
|
112
|
-
return /* @__PURE__ */ jsx(Box, { padding: 4, children: /* @__PURE__ */ jsxs(Typography, { textColor: "danger600", children: [
|
|
113
|
-
"Error: ",
|
|
114
|
-
error.message
|
|
115
|
-
] }) });
|
|
116
|
-
}
|
|
117
|
-
return /* @__PURE__ */ jsx(Box, { padding: 4, children: /* @__PURE__ */ jsx(MentionsTable, { mentions }) });
|
|
118
|
-
}
|
|
119
|
-
const index = {
|
|
120
|
-
register(app) {
|
|
121
|
-
app.addMenuLink({
|
|
122
|
-
to: `plugins/${PLUGIN_ID}`,
|
|
123
|
-
icon: PluginIcon,
|
|
124
|
-
intlLabel: {
|
|
125
|
-
id: `${PLUGIN_ID}.plugin.name`,
|
|
126
|
-
defaultMessage: PLUGIN_ID
|
|
127
|
-
},
|
|
128
|
-
Component: async () => {
|
|
129
|
-
const { App } = await import("./App-B_sMYxju.mjs");
|
|
130
|
-
return App;
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
app.widgets.register({
|
|
134
|
-
icon: Globe,
|
|
135
|
-
title: {
|
|
136
|
-
id: `${PLUGIN_ID}.mentions-widget.title`,
|
|
137
|
-
defaultMessage: "Social Mentions"
|
|
138
|
-
},
|
|
139
|
-
component: () => Promise.resolve(MentionsWidget),
|
|
140
|
-
pluginId: PLUGIN_ID,
|
|
141
|
-
id: "mentions-widget"
|
|
142
|
-
});
|
|
143
|
-
app.registerPlugin({
|
|
144
|
-
id: PLUGIN_ID,
|
|
145
|
-
initializer: Initializer,
|
|
146
|
-
isReady: false,
|
|
147
|
-
name: PLUGIN_ID
|
|
148
|
-
});
|
|
149
|
-
},
|
|
150
|
-
async registerTrads({ locales }) {
|
|
151
|
-
return Promise.all(
|
|
152
|
-
locales.map(async (locale) => {
|
|
153
|
-
try {
|
|
154
|
-
const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-Byx4XI2L.mjs") }), `./translations/${locale}.json`, 3);
|
|
155
|
-
return { data, locale };
|
|
156
|
-
} catch {
|
|
157
|
-
return { data: {}, locale };
|
|
158
|
-
}
|
|
159
|
-
})
|
|
160
|
-
);
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
export {
|
|
164
|
-
MentionsTable as M,
|
|
165
|
-
index as i,
|
|
166
|
-
useMentions as u
|
|
167
|
-
};
|
|
168
|
-
//# sourceMappingURL=index--annyiFm.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index--annyiFm.mjs","sources":["../../admin/src/pluginId.ts","../../admin/src/components/Initializer.tsx","../../admin/src/components/PluginIcon.tsx","../../admin/src/constants.ts","../../admin/src/hooks/useMentions.ts","../../admin/src/components/MentionsTable/index.tsx","../../admin/src/components/MentionsWidget/index.tsx","../../admin/src/index.ts"],"sourcesContent":["export const PLUGIN_ID = 'octalens-mentions';\n","import { useEffect, useRef } from 'react';\n\nimport { PLUGIN_ID } from '../pluginId';\n\ntype InitializerProps = {\n setPlugin: (id: string) => void;\n};\n\nconst Initializer = ({ setPlugin }: InitializerProps) => {\n const ref = useRef(setPlugin);\n\n useEffect(() => {\n ref.current(PLUGIN_ID);\n }, []);\n\n return null;\n};\n\nexport { Initializer };\n","import { PuzzlePiece } from '@strapi/icons';\n\nconst PluginIcon = () => <PuzzlePiece />;\n\nexport { PluginIcon };\n","const BASE_PATH = '/octalens-mentions';\n\nexport const CONSTANTS = {\n routes: {\n MENTIONS_URL: BASE_PATH + '/mentions',\n },\n};\n","import { useEffect, useState } from 'react';\nimport { useFetchClient } from '@strapi/strapi/admin';\nimport type { IMention } from '../types';\nimport { CONSTANTS } from '../constants';\n\nexport function useMentions() {\n const { get } = useFetchClient();\n const [mentions, setMentions] = useState<IMention[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n const fetchMentions = async () => {\n try {\n setLoading(true);\n setError(null);\n const { data } = await get(CONSTANTS.routes.MENTIONS_URL);\n const mentions = data?.data;\n setMentions(mentions || []);\n } catch (error) {\n console.error('Error fetching mentions:', error);\n setError(error instanceof Error ? error : new Error('Failed to fetch mentions'));\n } finally {\n setLoading(false);\n }\n };\n\n fetchMentions();\n }, [get]);\n\n return { mentions, loading, error };\n}\n","import {\n Table,\n Thead,\n Tbody,\n Tr,\n Td,\n Th,\n Typography,\n Checkbox,\n VisuallyHidden,\n Flex,\n Box,\n IconButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport type { IMention } from '../../types';\n\nconst COL_COUNT = 7;\n\ninterface MentionsTableProps {\n readonly mentions: IMention[];\n}\n\nexport function MentionsTable({ mentions }: MentionsTableProps) {\n return (\n <Table colCount={COL_COUNT} rowCount={mentions.length}>\n <Thead>\n <Tr>\n <Th>\n <Checkbox aria-label=\"Select all entries\" />\n </Th>\n <Th>\n <Typography variant=\"sigma\">Title</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Source</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Keyword</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Relevance Score</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Comment</Typography>\n </Th>\n <Th>\n <VisuallyHidden>Actions</VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {mentions.map((mention) => (\n <Tr key={mention.documentId}>\n <Td>\n <Checkbox aria-label={`Select ${mention.title}`} />\n </Td>\n <Td>\n <Typography textColor=\"neutral800\" fontWeight=\"bold\">\n {mention.title || 'Untitled'}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.source}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.keyword}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.relevanceScore}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\" ellipsis>\n {mention.relevanceComment?.substring(0, 50)}\n {mention.relevanceComment?.length > 50 ? '...' : ''}\n </Typography>\n </Td>\n <Td>\n <Flex>\n <IconButton\n onClick={() => console.log('edit', mention.documentId)}\n label=\"Edit\"\n borderWidth={0}\n >\n <Pencil />\n </IconButton>\n <Box paddingLeft={1}>\n <IconButton\n onClick={() => console.log('delete', mention.documentId)}\n label=\"Delete\"\n borderWidth={0}\n >\n <Trash />\n </IconButton>\n </Box>\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n}\n","import { Box, Typography } from '@strapi/design-system';\nimport { useMentions } from '../../hooks/useMentions';\nimport { MentionsTable } from '../MentionsTable';\n\nexport function MentionsWidget() {\n const { mentions, loading, error } = useMentions();\n\n if (loading) {\n return (\n <Box padding={4}>\n <Typography>Loading mentions...</Typography>\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box padding={4}>\n <Typography textColor=\"danger600\">Error: {error.message}</Typography>\n </Box>\n );\n }\n\n return (\n <Box padding={4}>\n <MentionsTable mentions={mentions} />\n </Box>\n );\n}\n","import { Globe } from \"@strapi/icons\";\n\nimport { PLUGIN_ID } from './pluginId';\nimport { Initializer } from './components/Initializer';\nimport { PluginIcon } from './components/PluginIcon';\nimport { MentionsWidget } from \"./components/MentionsWidget\";\n\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${PLUGIN_ID}`,\n icon: PluginIcon,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: PLUGIN_ID,\n },\n Component: async () => {\n const { App } = await import('./pages/App');\n\n return App;\n },\n });\n\n app.widgets.register({\n icon: Globe,\n title: {\n id: `${PLUGIN_ID}.mentions-widget.title`,\n defaultMessage: \"Social Mentions\"\n },\n component: () => Promise.resolve(MentionsWidget),\n pluginId: PLUGIN_ID,\n id: \"mentions-widget\"\n })\n\n app.registerPlugin({\n id: PLUGIN_ID,\n initializer: Initializer,\n isReady: false,\n name: PLUGIN_ID,\n });\n\n },\n\n async registerTrads({ locales }: { locales: string[] }) {\n return Promise.all(\n locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n\n return { data, locale };\n } catch {\n return { data: {}, locale };\n }\n })\n );\n },\n};\n"],"names":["mentions","error"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-3mNRnzIR.mjs","sources":["../../admin/src/pluginId.ts","../../admin/src/components/Initializer.tsx","../../admin/src/components/PluginIcon.tsx","../../admin/src/constants.ts","../../admin/src/hooks/useMentions.ts","../../admin/src/components/MentionsTable/index.tsx","../../admin/src/components/MentionsWidget/index.tsx","../../admin/src/index.ts"],"sourcesContent":["export const PLUGIN_ID = 'octalens-mentions';\n","import { useEffect, useRef } from 'react';\n\nimport { PLUGIN_ID } from '../pluginId';\n\ntype InitializerProps = {\n setPlugin: (id: string) => void;\n};\n\nconst Initializer = ({ setPlugin }: InitializerProps) => {\n const ref = useRef(setPlugin);\n\n useEffect(() => {\n ref.current(PLUGIN_ID);\n }, []);\n\n return null;\n};\n\nexport { Initializer };\n","import { Globe } from '@strapi/icons';\n\nconst PluginIcon = () => <Globe />;\n\nexport { PluginIcon };\n","const BASE_PATH = '/octalens-mentions';\n\nexport const CONSTANTS = {\n routes: {\n MENTIONS_URL: BASE_PATH + '/mentions',\n },\n};\n","import { useEffect, useState } from 'react';\nimport { useFetchClient } from '@strapi/strapi/admin';\nimport type { IMention } from '../types';\nimport { CONSTANTS } from '../constants';\n\nexport function useMentions() {\n const { get } = useFetchClient();\n const [mentions, setMentions] = useState<IMention[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n const fetchMentions = async () => {\n try {\n setLoading(true);\n setError(null);\n const { data } = await get(CONSTANTS.routes.MENTIONS_URL);\n const mentions = data?.data;\n setMentions(mentions || []);\n } catch (error) {\n console.error('Error fetching mentions:', error);\n setError(error instanceof Error ? error : new Error('Failed to fetch mentions'));\n } finally {\n setLoading(false);\n }\n };\n\n fetchMentions();\n }, [get]);\n\n return { mentions, loading, error };\n}\n","import {\n Table,\n Thead,\n Tbody,\n Tr,\n Td,\n Th,\n Typography,\n Checkbox,\n VisuallyHidden,\n Flex,\n Box,\n IconButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport type { IMention } from '../../types';\n\nconst COL_COUNT = 7;\n\ninterface MentionsTableProps {\n readonly mentions: IMention[];\n}\n\nexport function MentionsTable({ mentions }: MentionsTableProps) {\n return (\n <Table colCount={COL_COUNT} rowCount={mentions.length}>\n <Thead>\n <Tr>\n <Th>\n <Checkbox aria-label=\"Select all entries\" />\n </Th>\n <Th>\n <Typography variant=\"sigma\">Title</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Source</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Keyword</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Relevance Score</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Comment</Typography>\n </Th>\n <Th>\n <VisuallyHidden>Actions</VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {mentions.map((mention) => (\n <Tr key={mention.documentId}>\n <Td>\n <Checkbox aria-label={`Select ${mention.title}`} />\n </Td>\n <Td>\n <Typography textColor=\"neutral800\" fontWeight=\"bold\">\n {mention.title || 'Untitled'}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.source}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.keyword}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.relevanceScore}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\" ellipsis>\n {mention.relevanceComment?.substring(0, 50)}\n {mention.relevanceComment?.length > 50 ? '...' : ''}\n </Typography>\n </Td>\n <Td>\n <Flex>\n <IconButton\n onClick={() => console.log('edit', mention.documentId)}\n label=\"Edit\"\n borderWidth={0}\n >\n <Pencil />\n </IconButton>\n <Box paddingLeft={1}>\n <IconButton\n onClick={() => console.log('delete', mention.documentId)}\n label=\"Delete\"\n borderWidth={0}\n >\n <Trash />\n </IconButton>\n </Box>\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n}\n","import { Box, Typography } from '@strapi/design-system';\nimport { useMentions } from '../../hooks/useMentions';\nimport { MentionsTable } from '../MentionsTable';\n\nexport function MentionsWidget() {\n const { mentions, loading, error } = useMentions();\n\n if (loading) {\n return (\n <Box padding={4}>\n <Typography>Loading mentions...</Typography>\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box padding={4}>\n <Typography textColor=\"danger600\">Error: {error.message}</Typography>\n </Box>\n );\n }\n\n return (\n <Box padding={4}>\n <MentionsTable mentions={mentions} />\n </Box>\n );\n}\n","import { Globe } from \"@strapi/icons\";\n\nimport { PLUGIN_ID } from './pluginId';\nimport { Initializer } from './components/Initializer';\nimport { PluginIcon } from './components/PluginIcon';\nimport { MentionsWidget } from \"./components/MentionsWidget\";\n\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${PLUGIN_ID}`,\n icon: PluginIcon,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: PLUGIN_ID,\n },\n Component: async () => {\n const { App } = await import('./pages/App');\n\n return App;\n },\n });\n\n app.widgets.register({\n icon: Globe,\n title: {\n id: `${PLUGIN_ID}.mentions-widget.title`,\n defaultMessage: \"Social Mentions\"\n },\n component: () => Promise.resolve(MentionsWidget),\n pluginId: PLUGIN_ID,\n id: \"mentions-widget\"\n })\n\n app.registerPlugin({\n id: PLUGIN_ID,\n initializer: Initializer,\n isReady: false,\n name: PLUGIN_ID,\n });\n\n },\n\n async registerTrads({ locales }: { locales: string[] }) {\n return Promise.all(\n locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n\n return { data, locale };\n } catch {\n return { data: {}, locale };\n }\n })\n );\n },\n};\n"],"names":["mentions","error"],"mappings":"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"}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const icons = require("@strapi/icons");
|
|
3
|
-
const react = require("react");
|
|
4
|
-
const jsxRuntime = require("react/jsx-runtime");
|
|
5
|
-
const designSystem = require("@strapi/design-system");
|
|
6
|
-
const admin = require("@strapi/strapi/admin");
|
|
7
|
-
const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
8
|
-
const v = glob[path];
|
|
9
|
-
if (v) {
|
|
10
|
-
return typeof v === "function" ? v() : Promise.resolve(v);
|
|
11
|
-
}
|
|
12
|
-
return new Promise((_, reject) => {
|
|
13
|
-
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
|
14
|
-
reject.bind(
|
|
15
|
-
null,
|
|
16
|
-
new Error(
|
|
17
|
-
"Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
|
|
18
|
-
)
|
|
19
|
-
)
|
|
20
|
-
);
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
|
-
const PLUGIN_ID = "octalens-mentions";
|
|
24
|
-
const Initializer = ({ setPlugin }) => {
|
|
25
|
-
const ref = react.useRef(setPlugin);
|
|
26
|
-
react.useEffect(() => {
|
|
27
|
-
ref.current(PLUGIN_ID);
|
|
28
|
-
}, []);
|
|
29
|
-
return null;
|
|
30
|
-
};
|
|
31
|
-
const PluginIcon = () => /* @__PURE__ */ jsxRuntime.jsx(icons.PuzzlePiece, {});
|
|
32
|
-
const BASE_PATH = "/octalens-mentions";
|
|
33
|
-
const CONSTANTS = {
|
|
34
|
-
routes: {
|
|
35
|
-
MENTIONS_URL: BASE_PATH + "/mentions"
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
function useMentions() {
|
|
39
|
-
const { get } = admin.useFetchClient();
|
|
40
|
-
const [mentions, setMentions] = react.useState([]);
|
|
41
|
-
const [loading, setLoading] = react.useState(true);
|
|
42
|
-
const [error, setError] = react.useState(null);
|
|
43
|
-
react.useEffect(() => {
|
|
44
|
-
const fetchMentions = async () => {
|
|
45
|
-
try {
|
|
46
|
-
setLoading(true);
|
|
47
|
-
setError(null);
|
|
48
|
-
const { data } = await get(CONSTANTS.routes.MENTIONS_URL);
|
|
49
|
-
const mentions2 = data?.data;
|
|
50
|
-
setMentions(mentions2 || []);
|
|
51
|
-
} catch (error2) {
|
|
52
|
-
console.error("Error fetching mentions:", error2);
|
|
53
|
-
setError(error2 instanceof Error ? error2 : new Error("Failed to fetch mentions"));
|
|
54
|
-
} finally {
|
|
55
|
-
setLoading(false);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
fetchMentions();
|
|
59
|
-
}, [get]);
|
|
60
|
-
return { mentions, loading, error };
|
|
61
|
-
}
|
|
62
|
-
const COL_COUNT = 7;
|
|
63
|
-
function MentionsTable({ mentions }) {
|
|
64
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Table, { colCount: COL_COUNT, rowCount: mentions.length, children: [
|
|
65
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Thead, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
|
66
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Checkbox, { "aria-label": "Select all entries" }) }),
|
|
67
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", children: "Title" }) }),
|
|
68
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", children: "Source" }) }),
|
|
69
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", children: "Keyword" }) }),
|
|
70
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", children: "Relevance Score" }) }),
|
|
71
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "sigma", children: "Comment" }) }),
|
|
72
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Th, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.VisuallyHidden, { children: "Actions" }) })
|
|
73
|
-
] }) }),
|
|
74
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Tbody, { children: mentions.map((mention) => /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Tr, { children: [
|
|
75
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Checkbox, { "aria-label": `Select ${mention.title}` }) }),
|
|
76
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", fontWeight: "bold", children: mention.title || "Untitled" }) }),
|
|
77
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: mention.source }) }),
|
|
78
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: mention.keyword }) }),
|
|
79
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { textColor: "neutral800", children: mention.relevanceScore }) }),
|
|
80
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { textColor: "neutral600", ellipsis: true, children: [
|
|
81
|
-
mention.relevanceComment?.substring(0, 50),
|
|
82
|
-
mention.relevanceComment?.length > 50 ? "..." : ""
|
|
83
|
-
] }) }),
|
|
84
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Td, { children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { children: [
|
|
85
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
86
|
-
designSystem.IconButton,
|
|
87
|
-
{
|
|
88
|
-
onClick: () => console.log("edit", mention.documentId),
|
|
89
|
-
label: "Edit",
|
|
90
|
-
borderWidth: 0,
|
|
91
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pencil, {})
|
|
92
|
-
}
|
|
93
|
-
),
|
|
94
|
-
/* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { paddingLeft: 1, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
95
|
-
designSystem.IconButton,
|
|
96
|
-
{
|
|
97
|
-
onClick: () => console.log("delete", mention.documentId),
|
|
98
|
-
label: "Delete",
|
|
99
|
-
borderWidth: 0,
|
|
100
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
|
|
101
|
-
}
|
|
102
|
-
) })
|
|
103
|
-
] }) })
|
|
104
|
-
] }, mention.documentId)) })
|
|
105
|
-
] });
|
|
106
|
-
}
|
|
107
|
-
function MentionsWidget() {
|
|
108
|
-
const { mentions, loading, error } = useMentions();
|
|
109
|
-
if (loading) {
|
|
110
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 4, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { children: "Loading mentions..." }) });
|
|
111
|
-
}
|
|
112
|
-
if (error) {
|
|
113
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { textColor: "danger600", children: [
|
|
114
|
-
"Error: ",
|
|
115
|
-
error.message
|
|
116
|
-
] }) });
|
|
117
|
-
}
|
|
118
|
-
return /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { padding: 4, children: /* @__PURE__ */ jsxRuntime.jsx(MentionsTable, { mentions }) });
|
|
119
|
-
}
|
|
120
|
-
const index = {
|
|
121
|
-
register(app) {
|
|
122
|
-
app.addMenuLink({
|
|
123
|
-
to: `plugins/${PLUGIN_ID}`,
|
|
124
|
-
icon: PluginIcon,
|
|
125
|
-
intlLabel: {
|
|
126
|
-
id: `${PLUGIN_ID}.plugin.name`,
|
|
127
|
-
defaultMessage: PLUGIN_ID
|
|
128
|
-
},
|
|
129
|
-
Component: async () => {
|
|
130
|
-
const { App } = await Promise.resolve().then(() => require("./App-Bdin-Qhb.js"));
|
|
131
|
-
return App;
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
app.widgets.register({
|
|
135
|
-
icon: icons.Globe,
|
|
136
|
-
title: {
|
|
137
|
-
id: `${PLUGIN_ID}.mentions-widget.title`,
|
|
138
|
-
defaultMessage: "Social Mentions"
|
|
139
|
-
},
|
|
140
|
-
component: () => Promise.resolve(MentionsWidget),
|
|
141
|
-
pluginId: PLUGIN_ID,
|
|
142
|
-
id: "mentions-widget"
|
|
143
|
-
});
|
|
144
|
-
app.registerPlugin({
|
|
145
|
-
id: PLUGIN_ID,
|
|
146
|
-
initializer: Initializer,
|
|
147
|
-
isReady: false,
|
|
148
|
-
name: PLUGIN_ID
|
|
149
|
-
});
|
|
150
|
-
},
|
|
151
|
-
async registerTrads({ locales }) {
|
|
152
|
-
return Promise.all(
|
|
153
|
-
locales.map(async (locale) => {
|
|
154
|
-
try {
|
|
155
|
-
const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => Promise.resolve().then(() => require("./en-B4KWt_jN.js")) }), `./translations/${locale}.json`, 3);
|
|
156
|
-
return { data, locale };
|
|
157
|
-
} catch {
|
|
158
|
-
return { data: {}, locale };
|
|
159
|
-
}
|
|
160
|
-
})
|
|
161
|
-
);
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
exports.MentionsTable = MentionsTable;
|
|
165
|
-
exports.PLUGIN_ID = PLUGIN_ID;
|
|
166
|
-
exports.index = index;
|
|
167
|
-
exports.useMentions = useMentions;
|
|
168
|
-
//# sourceMappingURL=index-B26su1ae.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-B26su1ae.js","sources":["../../admin/src/pluginId.ts","../../admin/src/components/Initializer.tsx","../../admin/src/components/PluginIcon.tsx","../../admin/src/constants.ts","../../admin/src/hooks/useMentions.ts","../../admin/src/components/MentionsTable/index.tsx","../../admin/src/components/MentionsWidget/index.tsx","../../admin/src/index.ts"],"sourcesContent":["export const PLUGIN_ID = 'octalens-mentions';\n","import { useEffect, useRef } from 'react';\n\nimport { PLUGIN_ID } from '../pluginId';\n\ntype InitializerProps = {\n setPlugin: (id: string) => void;\n};\n\nconst Initializer = ({ setPlugin }: InitializerProps) => {\n const ref = useRef(setPlugin);\n\n useEffect(() => {\n ref.current(PLUGIN_ID);\n }, []);\n\n return null;\n};\n\nexport { Initializer };\n","import { PuzzlePiece } from '@strapi/icons';\n\nconst PluginIcon = () => <PuzzlePiece />;\n\nexport { PluginIcon };\n","const BASE_PATH = '/octalens-mentions';\n\nexport const CONSTANTS = {\n routes: {\n MENTIONS_URL: BASE_PATH + '/mentions',\n },\n};\n","import { useEffect, useState } from 'react';\nimport { useFetchClient } from '@strapi/strapi/admin';\nimport type { IMention } from '../types';\nimport { CONSTANTS } from '../constants';\n\nexport function useMentions() {\n const { get } = useFetchClient();\n const [mentions, setMentions] = useState<IMention[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n const fetchMentions = async () => {\n try {\n setLoading(true);\n setError(null);\n const { data } = await get(CONSTANTS.routes.MENTIONS_URL);\n const mentions = data?.data;\n setMentions(mentions || []);\n } catch (error) {\n console.error('Error fetching mentions:', error);\n setError(error instanceof Error ? error : new Error('Failed to fetch mentions'));\n } finally {\n setLoading(false);\n }\n };\n\n fetchMentions();\n }, [get]);\n\n return { mentions, loading, error };\n}\n","import {\n Table,\n Thead,\n Tbody,\n Tr,\n Td,\n Th,\n Typography,\n Checkbox,\n VisuallyHidden,\n Flex,\n Box,\n IconButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport type { IMention } from '../../types';\n\nconst COL_COUNT = 7;\n\ninterface MentionsTableProps {\n readonly mentions: IMention[];\n}\n\nexport function MentionsTable({ mentions }: MentionsTableProps) {\n return (\n <Table colCount={COL_COUNT} rowCount={mentions.length}>\n <Thead>\n <Tr>\n <Th>\n <Checkbox aria-label=\"Select all entries\" />\n </Th>\n <Th>\n <Typography variant=\"sigma\">Title</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Source</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Keyword</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Relevance Score</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Comment</Typography>\n </Th>\n <Th>\n <VisuallyHidden>Actions</VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {mentions.map((mention) => (\n <Tr key={mention.documentId}>\n <Td>\n <Checkbox aria-label={`Select ${mention.title}`} />\n </Td>\n <Td>\n <Typography textColor=\"neutral800\" fontWeight=\"bold\">\n {mention.title || 'Untitled'}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.source}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.keyword}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.relevanceScore}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\" ellipsis>\n {mention.relevanceComment?.substring(0, 50)}\n {mention.relevanceComment?.length > 50 ? '...' : ''}\n </Typography>\n </Td>\n <Td>\n <Flex>\n <IconButton\n onClick={() => console.log('edit', mention.documentId)}\n label=\"Edit\"\n borderWidth={0}\n >\n <Pencil />\n </IconButton>\n <Box paddingLeft={1}>\n <IconButton\n onClick={() => console.log('delete', mention.documentId)}\n label=\"Delete\"\n borderWidth={0}\n >\n <Trash />\n </IconButton>\n </Box>\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n}\n","import { Box, Typography } from '@strapi/design-system';\nimport { useMentions } from '../../hooks/useMentions';\nimport { MentionsTable } from '../MentionsTable';\n\nexport function MentionsWidget() {\n const { mentions, loading, error } = useMentions();\n\n if (loading) {\n return (\n <Box padding={4}>\n <Typography>Loading mentions...</Typography>\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box padding={4}>\n <Typography textColor=\"danger600\">Error: {error.message}</Typography>\n </Box>\n );\n }\n\n return (\n <Box padding={4}>\n <MentionsTable mentions={mentions} />\n </Box>\n );\n}\n","import { Globe } from \"@strapi/icons\";\n\nimport { PLUGIN_ID } from './pluginId';\nimport { Initializer } from './components/Initializer';\nimport { PluginIcon } from './components/PluginIcon';\nimport { MentionsWidget } from \"./components/MentionsWidget\";\n\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${PLUGIN_ID}`,\n icon: PluginIcon,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: PLUGIN_ID,\n },\n Component: async () => {\n const { App } = await import('./pages/App');\n\n return App;\n },\n });\n\n app.widgets.register({\n icon: Globe,\n title: {\n id: `${PLUGIN_ID}.mentions-widget.title`,\n defaultMessage: \"Social Mentions\"\n },\n component: () => Promise.resolve(MentionsWidget),\n pluginId: PLUGIN_ID,\n id: \"mentions-widget\"\n })\n\n app.registerPlugin({\n id: PLUGIN_ID,\n initializer: Initializer,\n isReady: false,\n name: PLUGIN_ID,\n });\n\n },\n\n async registerTrads({ locales }: { locales: string[] }) {\n return Promise.all(\n locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n\n return { data, locale };\n } catch {\n return { data: {}, locale };\n }\n })\n );\n },\n};\n"],"names":["useRef","useEffect","jsx","PuzzlePiece","useFetchClient","useState","mentions","error","Table","Thead","Tr","Th","Checkbox","Typography","VisuallyHidden","Tbody","Td","jsxs","Flex","IconButton","Pencil","Box","Trash","Globe"],"mappings":"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"}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { PuzzlePiece, Pencil, Trash, Globe } from "@strapi/icons";
|
|
2
|
-
import { useRef, useEffect, useState } from "react";
|
|
3
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
-
import { Table, Thead, Tr, Th, Checkbox, Typography, VisuallyHidden, Tbody, Td, Flex, IconButton, Box } from "@strapi/design-system";
|
|
5
|
-
import { useFetchClient } from "@strapi/strapi/admin";
|
|
6
|
-
const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
|
|
7
|
-
const v = glob[path];
|
|
8
|
-
if (v) {
|
|
9
|
-
return typeof v === "function" ? v() : Promise.resolve(v);
|
|
10
|
-
}
|
|
11
|
-
return new Promise((_, reject) => {
|
|
12
|
-
(typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
|
|
13
|
-
reject.bind(
|
|
14
|
-
null,
|
|
15
|
-
new Error(
|
|
16
|
-
"Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
|
|
17
|
-
)
|
|
18
|
-
)
|
|
19
|
-
);
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
const PLUGIN_ID = "octalens-mentions";
|
|
23
|
-
const Initializer = ({ setPlugin }) => {
|
|
24
|
-
const ref = useRef(setPlugin);
|
|
25
|
-
useEffect(() => {
|
|
26
|
-
ref.current(PLUGIN_ID);
|
|
27
|
-
}, []);
|
|
28
|
-
return null;
|
|
29
|
-
};
|
|
30
|
-
const PluginIcon = () => /* @__PURE__ */ jsx(PuzzlePiece, {});
|
|
31
|
-
const BASE_PATH = "/octalens-mentions";
|
|
32
|
-
const CONSTANTS = {
|
|
33
|
-
routes: {
|
|
34
|
-
MENTIONS_URL: BASE_PATH + "/mentions"
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
function useMentions() {
|
|
38
|
-
const { get } = useFetchClient();
|
|
39
|
-
const [mentions, setMentions] = useState([]);
|
|
40
|
-
const [loading, setLoading] = useState(true);
|
|
41
|
-
const [error, setError] = useState(null);
|
|
42
|
-
useEffect(() => {
|
|
43
|
-
const fetchMentions = async () => {
|
|
44
|
-
try {
|
|
45
|
-
setLoading(true);
|
|
46
|
-
setError(null);
|
|
47
|
-
const { data } = await get(CONSTANTS.routes.MENTIONS_URL);
|
|
48
|
-
const mentions2 = data?.data;
|
|
49
|
-
setMentions(mentions2 || []);
|
|
50
|
-
} catch (error2) {
|
|
51
|
-
console.error("Error fetching mentions:", error2);
|
|
52
|
-
setError(error2 instanceof Error ? error2 : new Error("Failed to fetch mentions"));
|
|
53
|
-
} finally {
|
|
54
|
-
setLoading(false);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
fetchMentions();
|
|
58
|
-
}, [get]);
|
|
59
|
-
return { mentions, loading, error };
|
|
60
|
-
}
|
|
61
|
-
const COL_COUNT = 7;
|
|
62
|
-
function MentionsTable({ mentions }) {
|
|
63
|
-
return /* @__PURE__ */ jsxs(Table, { colCount: COL_COUNT, rowCount: mentions.length, children: [
|
|
64
|
-
/* @__PURE__ */ jsx(Thead, { children: /* @__PURE__ */ jsxs(Tr, { children: [
|
|
65
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Checkbox, { "aria-label": "Select all entries" }) }),
|
|
66
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Title" }) }),
|
|
67
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Source" }) }),
|
|
68
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Keyword" }) }),
|
|
69
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Relevance Score" }) }),
|
|
70
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", children: "Comment" }) }),
|
|
71
|
-
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(VisuallyHidden, { children: "Actions" }) })
|
|
72
|
-
] }) }),
|
|
73
|
-
/* @__PURE__ */ jsx(Tbody, { children: mentions.map((mention) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
74
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Checkbox, { "aria-label": `Select ${mention.title}` }) }),
|
|
75
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", fontWeight: "bold", children: mention.title || "Untitled" }) }),
|
|
76
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", children: mention.source }) }),
|
|
77
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", children: mention.keyword }) }),
|
|
78
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Typography, { textColor: "neutral800", children: mention.relevanceScore }) }),
|
|
79
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsxs(Typography, { textColor: "neutral600", ellipsis: true, children: [
|
|
80
|
-
mention.relevanceComment?.substring(0, 50),
|
|
81
|
-
mention.relevanceComment?.length > 50 ? "..." : ""
|
|
82
|
-
] }) }),
|
|
83
|
-
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsxs(Flex, { children: [
|
|
84
|
-
/* @__PURE__ */ jsx(
|
|
85
|
-
IconButton,
|
|
86
|
-
{
|
|
87
|
-
onClick: () => console.log("edit", mention.documentId),
|
|
88
|
-
label: "Edit",
|
|
89
|
-
borderWidth: 0,
|
|
90
|
-
children: /* @__PURE__ */ jsx(Pencil, {})
|
|
91
|
-
}
|
|
92
|
-
),
|
|
93
|
-
/* @__PURE__ */ jsx(Box, { paddingLeft: 1, children: /* @__PURE__ */ jsx(
|
|
94
|
-
IconButton,
|
|
95
|
-
{
|
|
96
|
-
onClick: () => console.log("delete", mention.documentId),
|
|
97
|
-
label: "Delete",
|
|
98
|
-
borderWidth: 0,
|
|
99
|
-
children: /* @__PURE__ */ jsx(Trash, {})
|
|
100
|
-
}
|
|
101
|
-
) })
|
|
102
|
-
] }) })
|
|
103
|
-
] }, mention.documentId)) })
|
|
104
|
-
] });
|
|
105
|
-
}
|
|
106
|
-
function MentionsWidget() {
|
|
107
|
-
const { mentions, loading, error } = useMentions();
|
|
108
|
-
if (loading) {
|
|
109
|
-
return /* @__PURE__ */ jsx(Box, { padding: 4, children: /* @__PURE__ */ jsx(Typography, { children: "Loading mentions..." }) });
|
|
110
|
-
}
|
|
111
|
-
if (error) {
|
|
112
|
-
return /* @__PURE__ */ jsx(Box, { padding: 4, children: /* @__PURE__ */ jsxs(Typography, { textColor: "danger600", children: [
|
|
113
|
-
"Error: ",
|
|
114
|
-
error.message
|
|
115
|
-
] }) });
|
|
116
|
-
}
|
|
117
|
-
return /* @__PURE__ */ jsx(Box, { padding: 4, children: /* @__PURE__ */ jsx(MentionsTable, { mentions }) });
|
|
118
|
-
}
|
|
119
|
-
const index = {
|
|
120
|
-
register(app) {
|
|
121
|
-
app.addMenuLink({
|
|
122
|
-
to: `plugins/${PLUGIN_ID}`,
|
|
123
|
-
icon: PluginIcon,
|
|
124
|
-
intlLabel: {
|
|
125
|
-
id: `${PLUGIN_ID}.plugin.name`,
|
|
126
|
-
defaultMessage: PLUGIN_ID
|
|
127
|
-
},
|
|
128
|
-
Component: async () => {
|
|
129
|
-
const { App } = await import("./App-BAfec0ux.mjs");
|
|
130
|
-
return App;
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
app.widgets.register({
|
|
134
|
-
icon: Globe,
|
|
135
|
-
title: {
|
|
136
|
-
id: `${PLUGIN_ID}.mentions-widget.title`,
|
|
137
|
-
defaultMessage: "Social Mentions"
|
|
138
|
-
},
|
|
139
|
-
component: () => Promise.resolve(MentionsWidget),
|
|
140
|
-
pluginId: PLUGIN_ID,
|
|
141
|
-
id: "mentions-widget"
|
|
142
|
-
});
|
|
143
|
-
app.registerPlugin({
|
|
144
|
-
id: PLUGIN_ID,
|
|
145
|
-
initializer: Initializer,
|
|
146
|
-
isReady: false,
|
|
147
|
-
name: PLUGIN_ID
|
|
148
|
-
});
|
|
149
|
-
},
|
|
150
|
-
async registerTrads({ locales }) {
|
|
151
|
-
return Promise.all(
|
|
152
|
-
locales.map(async (locale) => {
|
|
153
|
-
try {
|
|
154
|
-
const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/en.json": () => import("./en-Byx4XI2L.mjs") }), `./translations/${locale}.json`, 3);
|
|
155
|
-
return { data, locale };
|
|
156
|
-
} catch {
|
|
157
|
-
return { data: {}, locale };
|
|
158
|
-
}
|
|
159
|
-
})
|
|
160
|
-
);
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
export {
|
|
164
|
-
MentionsTable as M,
|
|
165
|
-
index as i,
|
|
166
|
-
useMentions as u
|
|
167
|
-
};
|
|
168
|
-
//# sourceMappingURL=index-B2sNP6GB.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-B2sNP6GB.mjs","sources":["../../admin/src/pluginId.ts","../../admin/src/components/Initializer.tsx","../../admin/src/components/PluginIcon.tsx","../../admin/src/constants.ts","../../admin/src/hooks/useMentions.ts","../../admin/src/components/MentionsTable/index.tsx","../../admin/src/components/MentionsWidget/index.tsx","../../admin/src/index.ts"],"sourcesContent":["export const PLUGIN_ID = 'octalens-mentions';\n","import { useEffect, useRef } from 'react';\n\nimport { PLUGIN_ID } from '../pluginId';\n\ntype InitializerProps = {\n setPlugin: (id: string) => void;\n};\n\nconst Initializer = ({ setPlugin }: InitializerProps) => {\n const ref = useRef(setPlugin);\n\n useEffect(() => {\n ref.current(PLUGIN_ID);\n }, []);\n\n return null;\n};\n\nexport { Initializer };\n","import { PuzzlePiece } from '@strapi/icons';\n\nconst PluginIcon = () => <PuzzlePiece />;\n\nexport { PluginIcon };\n","const BASE_PATH = '/octalens-mentions';\n\nexport const CONSTANTS = {\n routes: {\n MENTIONS_URL: BASE_PATH + '/mentions',\n },\n};\n","import { useEffect, useState } from 'react';\nimport { useFetchClient } from '@strapi/strapi/admin';\nimport type { IMention } from '../types';\nimport { CONSTANTS } from '../constants';\n\nexport function useMentions() {\n const { get } = useFetchClient();\n const [mentions, setMentions] = useState<IMention[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useEffect(() => {\n const fetchMentions = async () => {\n try {\n setLoading(true);\n setError(null);\n const { data } = await get(CONSTANTS.routes.MENTIONS_URL);\n const mentions = data?.data;\n setMentions(mentions || []);\n } catch (error) {\n console.error('Error fetching mentions:', error);\n setError(error instanceof Error ? error : new Error('Failed to fetch mentions'));\n } finally {\n setLoading(false);\n }\n };\n\n fetchMentions();\n }, [get]);\n\n return { mentions, loading, error };\n}\n","import {\n Table,\n Thead,\n Tbody,\n Tr,\n Td,\n Th,\n Typography,\n Checkbox,\n VisuallyHidden,\n Flex,\n Box,\n IconButton,\n} from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport type { IMention } from '../../types';\n\nconst COL_COUNT = 7;\n\ninterface MentionsTableProps {\n readonly mentions: IMention[];\n}\n\nexport function MentionsTable({ mentions }: MentionsTableProps) {\n return (\n <Table colCount={COL_COUNT} rowCount={mentions.length}>\n <Thead>\n <Tr>\n <Th>\n <Checkbox aria-label=\"Select all entries\" />\n </Th>\n <Th>\n <Typography variant=\"sigma\">Title</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Source</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Keyword</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Relevance Score</Typography>\n </Th>\n <Th>\n <Typography variant=\"sigma\">Comment</Typography>\n </Th>\n <Th>\n <VisuallyHidden>Actions</VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {mentions.map((mention) => (\n <Tr key={mention.documentId}>\n <Td>\n <Checkbox aria-label={`Select ${mention.title}`} />\n </Td>\n <Td>\n <Typography textColor=\"neutral800\" fontWeight=\"bold\">\n {mention.title || 'Untitled'}\n </Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.source}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.keyword}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral800\">{mention.relevanceScore}</Typography>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\" ellipsis>\n {mention.relevanceComment?.substring(0, 50)}\n {mention.relevanceComment?.length > 50 ? '...' : ''}\n </Typography>\n </Td>\n <Td>\n <Flex>\n <IconButton\n onClick={() => console.log('edit', mention.documentId)}\n label=\"Edit\"\n borderWidth={0}\n >\n <Pencil />\n </IconButton>\n <Box paddingLeft={1}>\n <IconButton\n onClick={() => console.log('delete', mention.documentId)}\n label=\"Delete\"\n borderWidth={0}\n >\n <Trash />\n </IconButton>\n </Box>\n </Flex>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n}\n","import { Box, Typography } from '@strapi/design-system';\nimport { useMentions } from '../../hooks/useMentions';\nimport { MentionsTable } from '../MentionsTable';\n\nexport function MentionsWidget() {\n const { mentions, loading, error } = useMentions();\n\n if (loading) {\n return (\n <Box padding={4}>\n <Typography>Loading mentions...</Typography>\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box padding={4}>\n <Typography textColor=\"danger600\">Error: {error.message}</Typography>\n </Box>\n );\n }\n\n return (\n <Box padding={4}>\n <MentionsTable mentions={mentions} />\n </Box>\n );\n}\n","import { Globe } from \"@strapi/icons\";\n\nimport { PLUGIN_ID } from './pluginId';\nimport { Initializer } from './components/Initializer';\nimport { PluginIcon } from './components/PluginIcon';\nimport { MentionsWidget } from \"./components/MentionsWidget\";\n\nexport default {\n register(app: any) {\n app.addMenuLink({\n to: `plugins/${PLUGIN_ID}`,\n icon: PluginIcon,\n intlLabel: {\n id: `${PLUGIN_ID}.plugin.name`,\n defaultMessage: PLUGIN_ID,\n },\n Component: async () => {\n const { App } = await import('./pages/App');\n\n return App;\n },\n });\n\n app.widgets.register({\n icon: Globe,\n title: {\n id: `${PLUGIN_ID}.mentions-widget.title`,\n defaultMessage: \"Social Mentions\"\n },\n component: () => Promise.resolve(MentionsWidget),\n pluginId: PLUGIN_ID,\n id: \"mentions-widget\"\n })\n\n app.registerPlugin({\n id: PLUGIN_ID,\n initializer: Initializer,\n isReady: false,\n name: PLUGIN_ID,\n });\n\n },\n\n async registerTrads({ locales }: { locales: string[] }) {\n return Promise.all(\n locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n\n return { data, locale };\n } catch {\n return { data: {}, locale };\n }\n })\n );\n },\n};\n"],"names":["mentions","error"],"mappings":"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"}
|