mirror of
https://github.com/eliasstepanik/core.git
synced 2026-01-11 09:28:40 +00:00
* Feat: clustering fact statements * Feat: cluster drift * Feat: add recall count and model to search * Feat: Github integration * Fix: clustering UI * Improve graph * Bump: new version --------- Co-authored-by: Manoj K <saimanoj58@gmail.com>
72 lines
2.3 KiB
TypeScript
72 lines
2.3 KiB
TypeScript
import React, { useMemo } from "react";
|
|
import { json } from "@remix-run/node";
|
|
import { useLoaderData } from "@remix-run/react";
|
|
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
|
|
import { requireUserId, requireWorkpace } from "~/services/session.server";
|
|
import { getIntegrationDefinitions } from "~/services/integrationDefinition.server";
|
|
import { getIntegrationAccounts } from "~/services/integrationAccount.server";
|
|
import { IntegrationGrid } from "~/components/integrations/integration-grid";
|
|
import { PageHeader } from "~/components/common/page-header";
|
|
import { Plus } from "lucide-react";
|
|
import { FIXED_INTEGRATIONS } from "~/components/integrations/utils";
|
|
|
|
export async function loader({ request }: LoaderFunctionArgs) {
|
|
const userId = await requireUserId(request);
|
|
const workspace = await requireWorkpace(request);
|
|
|
|
const [integrationDefinitions, integrationAccounts] = await Promise.all([
|
|
getIntegrationDefinitions(workspace.id),
|
|
getIntegrationAccounts(userId),
|
|
]);
|
|
|
|
// Combine fixed integrations with dynamic ones
|
|
const allIntegrations = [...FIXED_INTEGRATIONS, ...integrationDefinitions];
|
|
|
|
return json({
|
|
integrationDefinitions: allIntegrations,
|
|
integrationAccounts,
|
|
userId,
|
|
});
|
|
}
|
|
|
|
export default function Integrations() {
|
|
const { integrationDefinitions, integrationAccounts } =
|
|
useLoaderData<typeof loader>();
|
|
|
|
const activeAccountIds = useMemo(
|
|
() =>
|
|
new Set(
|
|
integrationAccounts
|
|
.filter((acc) => acc.isActive)
|
|
.map((acc) => acc.integrationDefinitionId),
|
|
),
|
|
[integrationAccounts],
|
|
);
|
|
|
|
return (
|
|
<div className="flex h-full flex-col">
|
|
<PageHeader
|
|
title="Integrations"
|
|
actions={[
|
|
{
|
|
label: "Request New Integration",
|
|
icon: <Plus size={14} />,
|
|
onClick: () =>
|
|
window.open(
|
|
"https://github.com/redplanethq/core/issues/new",
|
|
"_blank",
|
|
),
|
|
variant: "secondary",
|
|
},
|
|
]}
|
|
/>
|
|
<div className="home flex h-[calc(100vh_-_56px)] flex-col overflow-y-auto p-4 px-5">
|
|
<IntegrationGrid
|
|
integrations={integrationDefinitions}
|
|
activeAccountIds={activeAccountIds}
|
|
/>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|