@rokmohar/medusa-plugin-meilisearch
Version:
Meilisearch plugin for Medusa 2
62 lines (61 loc) • 1.78 kB
JavaScript
"use strict";
const jsxRuntime = require("react/jsx-runtime");
const ui = require("@medusajs/ui");
const reactQuery = require("@tanstack/react-query");
const adminSdk = require("@medusajs/admin-sdk");
const SyncPage = () => {
const { mutate, isPending } = reactQuery.useMutation({
mutationFn: () => fetch("/admin/meilisearch/sync", {
method: "POST"
}),
onSuccess: () => {
ui.toast.success("Successfully triggered data sync to Meilisearch");
},
onError: (err) => {
console.error(err);
ui.toast.error("Failed to sync data to Meilisearch");
}
});
const handleSync = () => {
mutate();
};
return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-4", children: [
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", children: "Meilisearch Sync" }),
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-gray-500", children: "Manually trigger synchronization with Meilisearch." }),
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: handleSync, isLoading: isPending, variant: "primary", children: "Sync Now" })
] }) });
};
const config = adminSdk.defineRouteConfig({
label: "Meilisearch"
});
const widgetModule = { widgets: [] };
const routeModule = {
routes: [
{
Component: SyncPage,
path: "/settings/meilisearch"
}
]
};
const menuItemModule = {
menuItems: [
{
label: config.label,
icon: void 0,
path: "/settings/meilisearch",
nested: void 0
}
]
};
const formModule = { customFields: {} };
const displayModule = {
displays: {}
};
const plugin = {
widgetModule,
routeModule,
menuItemModule,
formModule,
displayModule
};
module.exports = plugin;