[WEB-1730] chore: project intake (#5140)
* chore: intake icon added * chore: project inbox updated to intake in app sidebar and feature settings * chore: intake icon added * chore: project intake * chore: project intake empty state asset updated
|
|
@ -22,3 +22,4 @@ export * from "./side-panel-icon";
|
|||
export * from "./transfer-icon";
|
||||
export * from "./info-icon";
|
||||
export * from "./dropdown-icon";
|
||||
export * from "./intake";
|
||||
|
|
|
|||
22
packages/ui/src/icons/intake.tsx
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import * as React from "react";
|
||||
|
||||
import { ISvgIcons } from "./type";
|
||||
|
||||
export const Intake: React.FC<ISvgIcons> = ({ className = "text-current", ...rest }) => (
|
||||
<svg
|
||||
viewBox="0 0 16 16"
|
||||
className={`${className}`}
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
strokeWidth="1.25"
|
||||
strokeLinecap="round"
|
||||
strokeLinejoin="round"
|
||||
{...rest}
|
||||
>
|
||||
<path d="M12.1599 3.59961V9.60688L8.04358 12.0796V6.04325L12.1599 3.59961Z" />
|
||||
<path d="M5.98547 10.8657V4.82938L10.1018 2.38574" />
|
||||
<path d="M3.89087 9.60695V3.57059L8.00723 1.12695" />
|
||||
<path d="M1.06909 8.77051V13.3887C1.06909 14.1814 1.71636 14.8287 2.50909 14.8287H13.4909C14.2836 14.8287 14.9309 14.1814 14.9309 13.3887V8.77051" />
|
||||
</svg>
|
||||
);
|
||||
|
|
@ -5,7 +5,7 @@ import { observer } from "mobx-react";
|
|||
import { useParams } from "next/navigation";
|
||||
import { RefreshCcw } from "lucide-react";
|
||||
// ui
|
||||
import { Breadcrumbs, Button, LayersIcon } from "@plane/ui";
|
||||
import { Breadcrumbs, Button, Intake } from "@plane/ui";
|
||||
// components
|
||||
import { BreadcrumbLink, Logo } from "@/components/common";
|
||||
import { InboxIssueCreateEditModalRoot } from "@/components/inbox";
|
||||
|
|
@ -45,7 +45,7 @@ export const ProjectInboxHeader: FC = observer(() => {
|
|||
|
||||
<Breadcrumbs.BreadcrumbItem
|
||||
type="text"
|
||||
link={<BreadcrumbLink label="Inbox" icon={<LayersIcon className="h-4 w-4 text-custom-text-300" />} />}
|
||||
link={<BreadcrumbLink label="Intake" icon={<Intake className="h-4 w-4 text-custom-text-300" />} />}
|
||||
/>
|
||||
</Breadcrumbs>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { ReactNode } from "react";
|
||||
import { FileText, Inbox, Timer } from "lucide-react";
|
||||
import { ContrastIcon, DiceIcon, PhotoFilterIcon } from "@plane/ui";
|
||||
import { FileText, Timer } from "lucide-react";
|
||||
import { ContrastIcon, DiceIcon, PhotoFilterIcon, Intake } from "@plane/ui";
|
||||
|
||||
export type TFeatureList = {
|
||||
[key: string]: {
|
||||
|
|
@ -58,9 +58,9 @@ export const PROJECT_FEATURES_LIST: TProjectFeatures = {
|
|||
},
|
||||
inbox: {
|
||||
property: "inbox_view",
|
||||
title: "Inbox",
|
||||
title: "Intake",
|
||||
description: "Capture external inputs, move valid issues to workflow.",
|
||||
icon: <Inbox className="h-5 w-5 flex-shrink-0 text-custom-text-300" />,
|
||||
icon: <Intake className="h-5 w-5 flex-shrink-0 text-custom-text-300" />,
|
||||
isPro: false,
|
||||
isEnabled: true,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -19,10 +19,9 @@ import {
|
|||
SignalMediumIcon,
|
||||
MessageSquareIcon,
|
||||
UsersIcon,
|
||||
Inbox,
|
||||
} from "lucide-react";
|
||||
import { IIssueActivity } from "@plane/types";
|
||||
import { Tooltip, BlockedIcon, BlockerIcon, RelatedIcon, LayersIcon, DiceIcon } from "@plane/ui";
|
||||
import { Tooltip, BlockedIcon, BlockerIcon, RelatedIcon, LayersIcon, DiceIcon, Intake } from "@plane/ui";
|
||||
// helpers
|
||||
import { renderFormattedDate } from "@/helpers/date-time.helper";
|
||||
import { capitalizeFirstLetter } from "@/helpers/string.helper";
|
||||
|
|
@ -710,10 +709,10 @@ const activityDetails: {
|
|||
<IssueLink activity={activity} />
|
||||
</>
|
||||
)}
|
||||
{activity.verb === "2" && ` from inbox by marking a duplicate issue.`}
|
||||
{activity.verb === "2" && ` from intake by marking a duplicate issue.`}
|
||||
</>
|
||||
),
|
||||
icon: <Inbox size={12} color="#6b7280" aria-hidden="true" />,
|
||||
icon: <Intake className="size-3" color="#6b7280" aria-hidden="true" />,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { FC, useEffect, useState } from "react";
|
||||
import { observer } from "mobx-react";
|
||||
import { Inbox, PanelLeft } from "lucide-react";
|
||||
import { PanelLeft } from "lucide-react";
|
||||
import { Intake } from "@plane/ui";
|
||||
// components
|
||||
import { EmptyState } from "@/components/empty-state";
|
||||
import { InboxSidebar, InboxContentRoot } from "@/components/inbox";
|
||||
|
|
@ -50,7 +51,7 @@ export const InboxIssueRoot: FC<TInboxIssueRoot> = observer((props) => {
|
|||
if (error && error?.status === "init-error")
|
||||
return (
|
||||
<div className="relative w-full h-full flex flex-col gap-3 justify-center items-center">
|
||||
<Inbox size={60} strokeWidth={1.5} />
|
||||
<Intake className="size-[60px]" strokeWidth={1.5} />
|
||||
<div className="text-custom-text-200">{error?.message}</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { FC } from "react";
|
||||
import { observer } from "mobx-react";
|
||||
// hooks
|
||||
import { Inbox } from "lucide-react";
|
||||
import { Intake } from "@plane/ui";
|
||||
import { useIssueDetail } from "@/hooks/store";
|
||||
// components
|
||||
import { IssueActivityBlockComponent } from "./";
|
||||
|
|
@ -35,7 +35,11 @@ export const IssueInboxActivity: FC<TIssueInboxActivity> = observer((props) => {
|
|||
|
||||
if (!activity) return <></>;
|
||||
return (
|
||||
<IssueActivityBlockComponent icon={<Inbox className="h-4 w-4 flex-shrink-0" />} activityId={activityId} ends={ends}>
|
||||
<IssueActivityBlockComponent
|
||||
icon={<Intake className="h-4 w-4 flex-shrink-0" />}
|
||||
activityId={activityId}
|
||||
ends={ends}
|
||||
>
|
||||
<>{getInboxActivityMessage()}</>
|
||||
</IssueActivityBlockComponent>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ import {
|
|||
Share2,
|
||||
LogOut,
|
||||
MoreHorizontal,
|
||||
Inbox,
|
||||
ChevronRight,
|
||||
} from "lucide-react";
|
||||
import { Disclosure, Transition } from "@headlessui/react";
|
||||
|
|
@ -35,6 +34,7 @@ import {
|
|||
setPromiseToast,
|
||||
DropIndicator,
|
||||
DragHandle,
|
||||
Intake,
|
||||
} from "@plane/ui";
|
||||
// components
|
||||
import { Logo } from "@/components/common";
|
||||
|
|
@ -91,9 +91,9 @@ const navigation = (workspaceSlug: string, projectId: string) => [
|
|||
Icon: FileText,
|
||||
},
|
||||
{
|
||||
name: "Inbox",
|
||||
name: "Intake",
|
||||
href: `/${workspaceSlug}/projects/${projectId}/inbox`,
|
||||
Icon: Inbox,
|
||||
Icon: Intake,
|
||||
},
|
||||
{
|
||||
name: "Settings",
|
||||
|
|
@ -497,7 +497,9 @@ export const SidebarProjectsListItem: React.FC<Props> = observer((props) => {
|
|||
}
|
||||
)}
|
||||
>
|
||||
<item.Icon className="flex-shrink-0 size-4 stroke-[1.5]" />
|
||||
<item.Icon
|
||||
className={`flex-shrink-0 size-4 ${item.name === "Intake" ? "stroke-1" : "stroke-[1.5]"}`}
|
||||
/>
|
||||
{!isSidebarCollapsed && <span className="text-xs font-medium">{item.name}</span>}
|
||||
</div>
|
||||
</Tooltip>
|
||||
|
|
|
|||
|
|
@ -599,7 +599,7 @@ const emptyStateDetails = {
|
|||
[EmptyStateType.NOTIFICATION_DETAIL_EMPTY_STATE]: {
|
||||
key: EmptyStateType.INBOX_DETAIL_EMPTY_STATE,
|
||||
title: "Select to view details.",
|
||||
path: "/empty-state/inbox/issue-detail",
|
||||
path: "/empty-state/intake/issue-detail",
|
||||
},
|
||||
[EmptyStateType.NOTIFICATION_ALL_EMPTY_STATE]: {
|
||||
key: EmptyStateType.NOTIFICATION_ALL_EMPTY_STATE,
|
||||
|
|
@ -677,12 +677,12 @@ const emptyStateDetails = {
|
|||
},
|
||||
[EmptyStateType.DISABLED_PROJECT_INBOX]: {
|
||||
key: EmptyStateType.DISABLED_PROJECT_INBOX,
|
||||
title: "Inbox is not enabled for the project.",
|
||||
title: "Intake is not enabled for the project.",
|
||||
description:
|
||||
"Inbox helps you manage incoming requests to your project and add them as issues in your workflow. Enable inbox \n from project settings to manage requests.",
|
||||
"Intake helps you manage incoming requests to your project and add them as issues in your workflow. Enable intake \n from project settings to manage requests.",
|
||||
accessType: "project",
|
||||
access: EUserProjectRoles.ADMIN,
|
||||
path: "/empty-state/disabled-feature/inbox",
|
||||
path: "/empty-state/disabled-feature/intake",
|
||||
primaryButton: {
|
||||
text: "Manage features",
|
||||
},
|
||||
|
|
@ -739,24 +739,24 @@ const emptyStateDetails = {
|
|||
key: EmptyStateType.INBOX_SIDEBAR_OPEN_TAB,
|
||||
title: "No open issues",
|
||||
description: "Find open issues here. Create new issue.",
|
||||
path: "/empty-state/inbox/inbox-issue",
|
||||
path: "/empty-state/intake/intake-issue",
|
||||
},
|
||||
[EmptyStateType.INBOX_SIDEBAR_CLOSED_TAB]: {
|
||||
key: EmptyStateType.INBOX_SIDEBAR_CLOSED_TAB,
|
||||
title: "No closed issues",
|
||||
description: "All the issues whether accepted or \n declined can be found here.",
|
||||
path: "/empty-state/inbox/inbox-issue",
|
||||
path: "/empty-state/intake/intake-issue",
|
||||
},
|
||||
[EmptyStateType.INBOX_SIDEBAR_FILTER_EMPTY_STATE]: {
|
||||
key: EmptyStateType.INBOX_SIDEBAR_FILTER_EMPTY_STATE,
|
||||
title: "No matching issues",
|
||||
description: "No issue matches filter applied in inbox. \n Create a new issue.",
|
||||
path: "/empty-state/inbox/filter-issue",
|
||||
description: "No issue matches filter applied in intake. \n Create a new issue.",
|
||||
path: "/empty-state/intake/filter-issue",
|
||||
},
|
||||
[EmptyStateType.INBOX_DETAIL_EMPTY_STATE]: {
|
||||
key: EmptyStateType.INBOX_DETAIL_EMPTY_STATE,
|
||||
title: "Select an issue to view its details.",
|
||||
path: "/empty-state/inbox/issue-detail",
|
||||
path: "/empty-state/intake/issue-detail",
|
||||
},
|
||||
} as const;
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 62 KiB |
BIN
web/public/empty-state/disabled-feature/intake-dark.webp
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
web/public/empty-state/disabled-feature/intake-light.webp
Normal file
|
After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 84 KiB |
BIN
web/public/empty-state/intake/filter-issue-dark.webp
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
web/public/empty-state/intake/filter-issue-light.webp
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
web/public/empty-state/intake/intake-dark-resp.webp
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
web/public/empty-state/intake/intake-dark.webp
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
web/public/empty-state/intake/intake-issue-dark.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
web/public/empty-state/intake/intake-issue-light.webp
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
web/public/empty-state/intake/intake-light-resp.webp
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
web/public/empty-state/intake/intake-light.webp
Normal file
|
After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |