plane/apps/app/components/integration/guide.tsx
guru_sainath 2f2caaaf6e
Feat: Github importer to sync issues, users, and labels with workspace projects. (#509)
* Dev: Github integration with issues and layout integration

* dev: Github Integration route and UI configuration
2023-03-23 23:27:11 +05:30

163 lines
6.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { FC } from "react";
// next imports
import Link from "next/link";
import Image from "next/image";
// icons
import { ArrowRightIcon } from "components/icons";
import GithubLogo from "public/logos/github-square.png";
import { ChevronDownIcon } from "@heroicons/react/24/outline";
// components
import { Loader } from "components/ui";
import { GithubIntegrationRoot } from "components/integration";
// types
import { IAppIntegrations } from "types";
type Props = {
workspaceSlug: string | undefined;
provider: string | undefined;
allIntegrations: IAppIntegrations[] | undefined;
allIntegrationsError: Error | undefined;
allWorkspaceIntegrations: any | undefined;
allWorkspaceIntegrationsError: Error | undefined;
allIntegrationImporters: any | undefined;
allIntegrationImportersError: Error | undefined;
};
const IntegrationGuide: FC<Props> = ({
workspaceSlug,
provider,
allIntegrations,
allIntegrationsError,
allWorkspaceIntegrations,
allWorkspaceIntegrationsError,
allIntegrationImporters,
allIntegrationImportersError,
}) => (
<div className="space-y-5">
{!provider && (
<>
<div className="text-2xl font-semibold">Import</div>
<div className="flex items-center gap-2">
<div className="h-full w-full space-y-1">
<div className="text-lg font-medium">Relocation Guide</div>
<div className="text-sm">
You can now transfer all the issues that youve created in other tracking services.
This tool will guide you to relocate the issue to Plane.
</div>
</div>
<div className="flex flex-shrink-0 cursor-pointer items-center gap-2 text-sm font-medium text-[#3F76FF] hover:text-opacity-80">
<div>Read More</div>
<div>
<ArrowRightIcon width={"18px"} color={"#3F76FF"} />
</div>
</div>
</div>
<div>
{allIntegrations && !allIntegrationsError ? (
<>
{allIntegrations && allIntegrations.length > 0 ? (
<>
{allIntegrations.map((_integration, _idx) => (
<div
key={_idx}
className="space-y-4 rounded border border-gray-200 bg-white p-4"
>
<div className="flex items-center gap-4 whitespace-nowrap">
<div className="h-[40px] w-[40px] flex-shrink-0">
{_integration?.provider === "github" && (
<Image src={GithubLogo} alt="GithubLogo" />
)}
</div>
<div className="w-full space-y-1">
<div className="flex items-center gap-2 font-medium">
<div>{_integration?.title}</div>
<div className="rounded-full border border-gray-200 bg-gray-200 px-3 text-[12px]">
0
</div>
</div>
<div className="text-sm text-gray-500">
Activate GitHub integrations on individual projects to sync with
specific repositories.
</div>
</div>
<div className="flex-shrink-0">
<Link href={`/${workspaceSlug}/settings/import-export?provider=github`}>
<button
type="button"
className="w-full rounded bg-[#3F76FF] py-1.5 px-4 text-center text-sm text-white hover:bg-opacity-90"
>
Integrate Now
</button>
</Link>
</div>
<div className="flex h-[24px] w-[24px] flex-shrink-0 cursor-pointer items-center justify-center rounded-sm bg-gray-100 hover:bg-gray-200">
<ChevronDownIcon className="h-4 w-4" />
</div>
</div>
<div>
{allIntegrationImporters && !allIntegrationImportersError ? (
<>
{allIntegrationImporters && allIntegrationImporters.length > 0 ? (
<></>
) : (
<div className="py-2 text-sm text-gray-800">
Previous Imports not available.
</div>
)}
</>
) : (
<div>
<Loader className="grid grid-cols-1 gap-3">
{["", ""].map((_integration, _idx) => (
<Loader.Item height="40px" width="100%" />
))}
</Loader>
</div>
)}
</div>
</div>
))}
</>
) : (
<div className="py-5 text-center text-sm text-gray-800">
Integrations not available.
</div>
)}
</>
) : (
<div>
<Loader className="grid grid-cols-1 gap-3">
{["", ""].map((_integration, _idx) => (
<Loader.Item height="34px" width="100%" />
))}
</Loader>
</div>
)}
</div>
</>
)}
{provider && (
<>
{provider === "github" && (
<GithubIntegrationRoot
workspaceSlug={workspaceSlug}
provider={provider}
allIntegrations={allIntegrations}
allIntegrationsError={allIntegrationsError}
allWorkspaceIntegrations={allWorkspaceIntegrations}
allWorkspaceIntegrationsError={allWorkspaceIntegrationsError}
allIntegrationImporters={allIntegrationImporters}
allIntegrationImportersError={allIntegrationImportersError}
/>
)}
</>
)}
</div>
);
export default IntegrationGuide;