);
},
- icon:
,
+ icon:
,
},
archived_at: {
message: (activity) => {
if (activity.new_value === "restore") return "restored the issue.";
else return "archived the issue.";
},
- icon:
,
+ icon:
,
},
attachment: {
message: (activity, showIssue) => {
@@ -136,7 +136,7 @@ const activityDetails: {
>
);
},
- icon:
,
+ icon:
,
},
blocking: {
message: (activity) => {
@@ -224,7 +224,7 @@ const activityDetails: {
>
);
},
- icon:
,
+ icon:
,
},
description: {
message: (activity, showIssue) => (
@@ -239,7 +239,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
estimate_point: {
message: (activity, showIssue) => {
@@ -271,14 +271,14 @@ const activityDetails: {
>
);
},
- icon:
,
+ icon:
,
},
issue: {
message: (activity) => {
if (activity.verb === "created") return "created the issue.";
else return "deleted an issue.";
},
- icon:
,
+ icon:
,
},
labels: {
message: (activity, showIssue) => {
@@ -327,7 +327,7 @@ const activityDetails: {
>
);
},
- icon:
,
+ icon:
,
},
link: {
message: (activity, showIssue) => {
@@ -398,7 +398,7 @@ const activityDetails: {
>
);
},
- icon:
,
+ icon:
,
},
modules: {
message: (activity, showIssue, workspaceSlug) => {
@@ -448,7 +448,7 @@ const activityDetails: {
>
);
},
- icon:
,
+ icon:
,
},
name: {
message: (activity, showIssue) => (
@@ -463,7 +463,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
parent: {
message: (activity, showIssue) => {
@@ -496,7 +496,7 @@ const activityDetails: {
>
);
},
- icon:
,
+ icon:
,
},
priority: {
message: (activity, showIssue) => (
@@ -514,7 +514,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
start_date: {
message: (activity, showIssue) => {
@@ -548,7 +548,7 @@ const activityDetails: {
>
);
},
- icon:
,
+ icon:
,
},
state: {
message: (activity, showIssue) => (
@@ -564,7 +564,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
target_date: {
message: (activity, showIssue) => {
@@ -598,7 +598,7 @@ const activityDetails: {
>
);
},
- icon:
,
+ icon:
,
},
};
diff --git a/web/components/core/modals/image-upload-modal.tsx b/web/components/core/modals/image-upload-modal.tsx
index 14e4844de..df4f21e12 100644
--- a/web/components/core/modals/image-upload-modal.tsx
+++ b/web/components/core/modals/image-upload-modal.tsx
@@ -1,6 +1,5 @@
import React, { useCallback, useState } from "react";
-import NextImage from "next/image";
import { useRouter } from "next/router";
// react-dropzone
@@ -12,7 +11,7 @@ import fileServices from "services/file.service";
// hooks
import useWorkspaceDetails from "hooks/use-workspace-details";
// ui
-import { PrimaryButton, SecondaryButton } from "components/ui";
+import { DangerButton, PrimaryButton, SecondaryButton } from "components/ui";
// icons
import { UserCircleIcon } from "components/icons";
@@ -21,6 +20,8 @@ type Props = {
onClose: () => void;
isOpen: boolean;
onSuccess: (url: string) => void;
+ isRemoving: boolean;
+ handleDelete: () => void;
userImage?: boolean;
};
@@ -29,6 +30,8 @@ export const ImageUploadModal: React.FC
= ({
onSuccess,
isOpen,
onClose,
+ isRemoving,
+ handleDelete,
userImage,
}) => {
const [image, setImage] = useState(null);
@@ -148,12 +151,10 @@ export const ImageUploadModal: React.FC = ({
>
Edit
-
>
) : (
@@ -182,15 +183,22 @@ export const ImageUploadModal: React.FC = ({
File formats supported- .jpeg, .jpg, .png, .webp, .svg
-
-
Cancel
-
- {isImageUploading ? "Uploading..." : "Upload & Save"}
-
+
+
+
+ {isRemoving ? "Removing..." : "Remove"}
+
+
+
+
Cancel
+
+ {isImageUploading ? "Uploading..." : "Upload & Save"}
+
+
diff --git a/web/components/exporter/guide.tsx b/web/components/exporter/guide.tsx
index 67b7c6d4d..45fc50270 100644
--- a/web/components/exporter/guide.tsx
+++ b/web/components/exporter/guide.tsx
@@ -46,32 +46,38 @@ const IntegrationGuide = () => {
return (
<>
-
+
<>
-
+
{EXPORTERS_LIST.map((service) => (
-
-
-
-
-
-
{service.title}
-
{service.description}
+
+
+
+
+
+
+
+ {service.title}
+
+
+ {service.description}
+
+
))}
-
-
-
-
Previous Exports
+
+
+
+
Previous Exports
+
-
- {exporterServices && exporterServices?.results ? (
- exporterServices?.results?.length > 0 ? (
-
-
- {exporterServices?.results.map((service) => (
-
- ))}
+
+
+ {exporterServices && exporterServices?.results ? (
+ exporterServices?.results?.length > 0 ? (
+
+
+ {exporterServices?.results.map((service) => (
+
+ ))}
+
-
+ ) : (
+
No previous export available.
+ )
) : (
-
No previous export available.
- )
- ) : (
-
-
-
-
-
-
- )}
+
+
+
+
+
+
+ )}
+
>
{provider && (
diff --git a/web/components/exporter/single-export.tsx b/web/components/exporter/single-export.tsx
index c8ef2dc1a..772119f25 100644
--- a/web/components/exporter/single-export.tsx
+++ b/web/components/exporter/single-export.tsx
@@ -23,7 +23,7 @@ export const SingleExport: React.FC
= ({ service, refreshing }) => {
};
return (
-
+
diff --git a/web/components/integration/guide.tsx b/web/components/integration/guide.tsx
index 7c1dd20fe..a819566bf 100644
--- a/web/components/integration/guide.tsx
+++ b/web/components/integration/guide.tsx
@@ -21,7 +21,6 @@ import {
import { Loader, PrimaryButton } from "components/ui";
// icons
import { ArrowPathIcon } from "@heroicons/react/24/outline";
-import { ArrowRightIcon } from "components/icons";
// types
import { IImporterService } from "types";
// fetch-keys
@@ -57,10 +56,10 @@ const IntegrationGuide = () => {
data={importToDelete}
user={user}
/>
-
+
{(!provider || provider === "csv") && (
<>
-
+ {/*
Relocation Guide
@@ -78,85 +77,87 @@ const IntegrationGuide = () => {
-
-
- {IMPORTERS_EXPORTERS_LIST.map((service) => (
-
-
-
-
-
-
-
{service.title}
-
{service.description}
-
-
+
*/}
+ {IMPORTERS_EXPORTERS_LIST.map((service) => (
+
+
+
+
+
+
+
{service.title}
+
+ {service.description}
+
- ))}
-
-
-
- Previous Imports
-
-
- {importerServices ? (
- importerServices.length > 0 ? (
-
-
- {importerServices.map((service) => (
-
handleDeleteImport(service)}
- />
- ))}
+
+
+ ))}
+
+
+
+ Previous Imports
+
+
+
+
+ {importerServices ? (
+ importerServices.length > 0 ? (
+
+
+ {importerServices.map((service) => (
+ handleDeleteImport(service)}
+ />
+ ))}
+
-
+ ) : (
+
+ No previous imports available.
+
+ )
) : (
-
- No previous imports available.
-
- )
- ) : (
-
-
-
-
-
-
- )}
+
+
+
+
+
+
+ )}
+
>
)}
diff --git a/web/components/integration/single-import.tsx b/web/components/integration/single-import.tsx
index b74628a83..9ebe1ad22 100644
--- a/web/components/integration/single-import.tsx
+++ b/web/components/integration/single-import.tsx
@@ -16,7 +16,7 @@ type Props = {
};
export const SingleImport: React.FC
= ({ service, refreshing, handleDelete }) => (
-
+
diff --git a/web/components/integration/single-integration-card.tsx b/web/components/integration/single-integration-card.tsx
index 0a59de8b7..fab37b0c8 100644
--- a/web/components/integration/single-integration-card.tsx
+++ b/web/components/integration/single-integration-card.tsx
@@ -15,6 +15,7 @@ import { DangerButton, Loader, PrimaryButton } from "components/ui";
// icons
import GithubLogo from "public/services/github.png";
import SlackLogo from "public/services/slack.png";
+import { CheckCircle2 } from "lucide-react";
// types
import { IAppIntegration, IWorkspaceIntegration } from "types";
// fetch-keys
@@ -27,13 +28,12 @@ type Props = {
const integrationDetails: { [key: string]: any } = {
github: {
logo: GithubLogo,
- installed:
- "Activate GitHub integrations on individual projects to sync with specific repositories.",
+ installed: "Activate GitHub on individual projects to sync with specific repositories.",
notInstalled: "Connect with GitHub with your Plane workspace to sync project issues.",
},
slack: {
logo: SlackLogo,
- installed: "Activate Slack integrations on individual projects to sync with specific channels.",
+ installed: "Activate Slack on individual projects to sync with specific channels.",
notInstalled: "Connect with Slack with your Plane workspace to sync project issues.",
},
};
@@ -99,31 +99,22 @@ export const SingleIntegrationCard: React.FC = ({ integration }) => {
);
return (
-
+
-
+
-
+
{integration.title}
- {workspaceIntegrations ? (
- isInstalled ? (
-
- Installed
-
- ) : (
-
- {" "}
- Not Installed
-
- )
- ) : null}
+ {workspaceIntegrations
+ ? isInstalled &&
+ : null}
-
+
{workspaceIntegrations
? isInstalled
? integrationDetails[integration.provider].installed
@@ -135,12 +126,12 @@ export const SingleIntegrationCard: React.FC = ({ integration }) => {
{workspaceIntegrations ? (
isInstalled ? (
-
- {deletingIntegration ? "Removing..." : "Remove installation"}
+
+ {deletingIntegration ? "Uninstalling..." : "Uninstall"}
) : (
- {isInstalling ? "Installing..." : "Add installation"}
+ {isInstalling ? "Installing..." : "Install"}
)
) : (
diff --git a/web/components/labels/create-update-label-inline.tsx b/web/components/labels/create-update-label-inline.tsx
index 61064e777..264fb7901 100644
--- a/web/components/labels/create-update-label-inline.tsx
+++ b/web/components/labels/create-update-label-inline.tsx
@@ -16,8 +16,6 @@ import { Popover, Transition } from "@headlessui/react";
import issuesService from "services/issues.service";
// ui
import { Input, PrimaryButton, SecondaryButton } from "components/ui";
-// icons
-import { Component } from "lucide-react";
// types
import { IIssueLabels } from "types";
// fetch-keys
@@ -146,10 +144,10 @@ export const CreateUpdateLabelInline = forwardRef(
open ? "text-custom-text-100" : "text-custom-text-200"
}`}
>
-
diff --git a/web/components/labels/single-label.tsx b/web/components/labels/single-label.tsx
index 464b33152..be981e510 100644
--- a/web/components/labels/single-label.tsx
+++ b/web/components/labels/single-label.tsx
@@ -43,7 +43,7 @@ export const SingleLabel: React.FC = ({
>
addLabelToGroup(label)}>
-
+
Convert to group
diff --git a/web/components/project/confirm-project-member-remove.tsx b/web/components/project/confirm-project-member-remove.tsx
index bfce430a7..4edc27821 100644
--- a/web/components/project/confirm-project-member-remove.tsx
+++ b/web/components/project/confirm-project-member-remove.tsx
@@ -79,7 +79,7 @@ const ConfirmProjectMemberRemove: React.FC = ({ isOpen, onClose, data, ha
-
+
Cancel
{isDeleteLoading ? "Removing..." : "Remove"}
diff --git a/web/components/project/member-select.tsx b/web/components/project/member-select.tsx
index e6eee911d..5a1ec5cb1 100644
--- a/web/components/project/member-select.tsx
+++ b/web/components/project/member-select.tsx
@@ -49,7 +49,7 @@ export const MemberSelect: React.FC = ({ value, onChange }) => {
{selectedOption ? (
selectedOption?.display_name
) : (
- Select
+ Select
)}
}
diff --git a/web/components/project/send-project-invitation-modal.tsx b/web/components/project/send-project-invitation-modal.tsx
index b8f383f05..07b90840c 100644
--- a/web/components/project/send-project-invitation-modal.tsx
+++ b/web/components/project/send-project-invitation-modal.tsx
@@ -219,7 +219,9 @@ const SendProjectInvitationModal: React.FC
= (props) => {
}
) : (
-
Select co-worker
+
+ Select co-worker
+
)}
@@ -249,10 +251,13 @@ const SendProjectInvitationModal: React.FC
= (props) => {
render={({ field }) => (
- {field.value ? ROLE[field.value] : "Select role"}
-
+ customButton={
+
}
input
width="w-full"
diff --git a/web/components/project/settings-sidebar.tsx b/web/components/project/settings-sidebar.tsx
index 9da5c1058..a147c8a3a 100644
--- a/web/components/project/settings-sidebar.tsx
+++ b/web/components/project/settings-sidebar.tsx
@@ -2,7 +2,11 @@ import React from "react";
import { useRouter } from "next/router";
import Link from "next/link";
-export const SettingsSidebar = () => {
+type Props = {
+ profilePage?: boolean;
+};
+
+export const SettingsSidebar: React.FC = ({ profilePage = false }) => {
const router = useRouter();
const { workspaceSlug, projectId } = router.query;
@@ -43,30 +47,107 @@ export const SettingsSidebar = () => {
href: `/${workspaceSlug}/projects/${projectId}/settings/automations`,
},
];
+
+ const workspaceLinks: Array<{
+ label: string;
+ href: string;
+ }> = [
+ {
+ label: "General",
+ href: `/${workspaceSlug}/settings`,
+ },
+ {
+ label: "Members",
+ href: `/${workspaceSlug}/settings/members`,
+ },
+ {
+ label: "Billing & Plans",
+ href: `/${workspaceSlug}/settings/billing`,
+ },
+ {
+ label: "Integrations",
+ href: `/${workspaceSlug}/settings/integrations`,
+ },
+ {
+ label: "Imports",
+ href: `/${workspaceSlug}/settings/imports`,
+ },
+ {
+ label: "Exports",
+ href: `/${workspaceSlug}/settings/exports`,
+ },
+ ];
+
+ const profileLinks: Array<{
+ label: string;
+ href: string;
+ }> = [
+ {
+ label: "Profile",
+ href: `/${workspaceSlug}/me/profile`,
+ },
+ {
+ label: "Activity",
+ href: `/${workspaceSlug}/me/profile/activity`,
+ },
+ {
+ label: "Preferences",
+ href: `/${workspaceSlug}/me/profile/preferences`,
+ },
+ ];
+
return (
-
-
SETTINGS
-
- {projectLinks.map((link) => (
-
-
-
- {link.label}
-
-
-
- ))}
+
+
+ {!projectId && (
+
+ )}
);
};
diff --git a/web/components/states/single-state.tsx b/web/components/states/single-state.tsx
index 6ec19ff06..eb2d9b610 100644
--- a/web/components/states/single-state.tsx
+++ b/web/components/states/single-state.tsx
@@ -184,19 +184,20 @@ export const SingleState: React.FC
= ({
)}
- {state.default ? (
- Default
- ) : (
-
- )}
+
+ {state.default ? (
+ Default
+ ) : (
+
+ )}
diff --git a/web/components/ui/integration-and-import-export-banner.tsx b/web/components/ui/integration-and-import-export-banner.tsx
index 541c49efc..aa79abaf3 100644
--- a/web/components/ui/integration-and-import-export-banner.tsx
+++ b/web/components/ui/integration-and-import-export-banner.tsx
@@ -6,7 +6,7 @@ type Props = {
};
export const IntegrationAndImportExportBanner: React.FC = ({ bannerName, description }) => (
-
+
{bannerName}
{description && (
diff --git a/web/components/web-view/activity-message.tsx b/web/components/web-view/activity-message.tsx
index 956dfb904..7100cadc4 100644
--- a/web/components/web-view/activity-message.tsx
+++ b/web/components/web-view/activity-message.tsx
@@ -73,7 +73,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
archived_at: {
@@ -81,7 +81,7 @@ const activityDetails: {
if (activity.new_value === "restore") return "restored the issue.";
else return "archived the issue.";
},
- icon:
,
+ icon:
,
},
attachment: {
@@ -99,7 +99,7 @@ const activityDetails: {
{showIssue &&
}
>
),
- icon:
,
+ icon:
,
},
blocking: {
@@ -156,7 +156,7 @@ const activityDetails: {
>
),
- icon:
,
+ icon:
,
},
description: {
@@ -172,7 +172,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
estimate_point: {
@@ -190,7 +190,7 @@ const activityDetails: {
)}
>
),
- icon:
,
+ icon:
,
},
issue: {
@@ -198,7 +198,7 @@ const activityDetails: {
if (activity.verb === "created") return "created the issue.";
else return "deleted an issue.";
},
- icon:
,
+ icon:
,
},
labels: {
@@ -225,7 +225,7 @@ const activityDetails: {
)}
>
),
- icon:
,
+ icon:
,
},
link: {
@@ -255,7 +255,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
modules: {
@@ -279,7 +279,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
name: {
@@ -295,7 +295,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
parent: {
@@ -314,7 +314,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
priority: {
@@ -333,7 +333,7 @@ const activityDetails: {
.
>
),
- icon:
,
+ icon:
,
},
start_date: {
@@ -351,7 +351,7 @@ const activityDetails: {
)}
>
),
- icon:
,
+ icon:
,
},
state: {
@@ -389,7 +389,7 @@ const activityDetails: {
)}
>
),
- icon:
,
+ icon:
,
},
};
diff --git a/web/components/workspace/confirm-workspace-member-remove.tsx b/web/components/workspace/confirm-workspace-member-remove.tsx
index 9a480c500..9ca80c3dc 100644
--- a/web/components/workspace/confirm-workspace-member-remove.tsx
+++ b/web/components/workspace/confirm-workspace-member-remove.tsx
@@ -79,7 +79,7 @@ const ConfirmWorkspaceMemberRemove: React.FC
= ({ isOpen, onClose, data,
-
+
Cancel
{isDeleteLoading ? "Removing..." : "Remove"}
diff --git a/web/components/workspace/index.ts b/web/components/workspace/index.ts
index 8e354a718..bb0f28a93 100644
--- a/web/components/workspace/index.ts
+++ b/web/components/workspace/index.ts
@@ -6,7 +6,6 @@ export * from "./help-section";
export * from "./issues-list";
export * from "./issues-pie-chart";
export * from "./issues-stats";
-export * from "./settings-header";
export * from "./sidebar-dropdown";
export * from "./sidebar-menu";
export * from "./sidebar-quick-action";
diff --git a/web/components/workspace/settings-header.tsx b/web/components/workspace/settings-header.tsx
deleted file mode 100644
index 2f11b8a98..000000000
--- a/web/components/workspace/settings-header.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import SettingsNavbar from "layouts/settings-navbar";
-
-export const SettingsHeader = () => (
-
-
-
Workspace Settings
-
- This information will be displayed to every member of the workspace.
-
-
-
-
-);
diff --git a/web/layouts/settings-navbar.tsx b/web/layouts/settings-navbar.tsx
deleted file mode 100644
index 462a4b6a0..000000000
--- a/web/layouts/settings-navbar.tsx
+++ /dev/null
@@ -1,127 +0,0 @@
-import Link from "next/link";
-import { useRouter } from "next/router";
-
-type Props = {
- profilePage?: boolean;
-};
-
-const SettingsNavbar: React.FC = ({ profilePage = false }) => {
- const router = useRouter();
- const { workspaceSlug, projectId } = router.query;
-
- const workspaceLinks: Array<{
- label: string;
- href: string;
- }> = [
- {
- label: "General",
- href: `/${workspaceSlug}/settings`,
- },
- {
- label: "Members",
- href: `/${workspaceSlug}/settings/members`,
- },
- {
- label: "Billing & Plans",
- href: `/${workspaceSlug}/settings/billing`,
- },
- {
- label: "Integrations",
- href: `/${workspaceSlug}/settings/integrations`,
- },
- {
- label: "Imports",
- href: `/${workspaceSlug}/settings/imports`,
- },
- {
- label: "Exports",
- href: `/${workspaceSlug}/settings/exports`,
- },
- ];
-
- const projectLinks: Array<{
- label: string;
- href: string;
- }> = [
- {
- label: "General",
- href: `/${workspaceSlug}/projects/${projectId}/settings`,
- },
- {
- label: "Control",
- href: `/${workspaceSlug}/projects/${projectId}/settings/control`,
- },
- {
- label: "Members",
- href: `/${workspaceSlug}/projects/${projectId}/settings/members`,
- },
- {
- label: "Features",
- href: `/${workspaceSlug}/projects/${projectId}/settings/features`,
- },
- {
- label: "States",
- href: `/${workspaceSlug}/projects/${projectId}/settings/states`,
- },
- {
- label: "Labels",
- href: `/${workspaceSlug}/projects/${projectId}/settings/labels`,
- },
- {
- label: "Integrations",
- href: `/${workspaceSlug}/projects/${projectId}/settings/integrations`,
- },
- {
- label: "Estimates",
- href: `/${workspaceSlug}/projects/${projectId}/settings/estimates`,
- },
- {
- label: "Automations",
- href: `/${workspaceSlug}/projects/${projectId}/settings/automations`,
- },
- ];
-
- const profileLinks: Array<{
- label: string;
- href: string;
- }> = [
- {
- label: "General",
- href: `/${workspaceSlug}/me/profile`,
- },
- {
- label: "Activity",
- href: `/${workspaceSlug}/me/profile/activity`,
- },
- {
- label: "Preferences",
- href: `/${workspaceSlug}/me/profile/preferences`,
- },
- ];
-
- return (
-
- {(profilePage ? profileLinks : projectId ? projectLinks : workspaceLinks).map((link) => (
-
-
-
- {link.label}
-
-
-
- ))}
-
- );
-};
-
-export default SettingsNavbar;
diff --git a/web/pages/[workspaceSlug]/me/profile/activity.tsx b/web/pages/[workspaceSlug]/me/profile/activity.tsx
index 20f278427..6313e9507 100644
--- a/web/pages/[workspaceSlug]/me/profile/activity.tsx
+++ b/web/pages/[workspaceSlug]/me/profile/activity.tsx
@@ -7,7 +7,6 @@ import Link from "next/link";
import userService from "services/user.service";
// layouts
import { WorkspaceAuthorizationLayout } from "layouts/auth-layout";
-import SettingsNavbar from "layouts/settings-navbar";
// components
import { ActivityIcon, ActivityMessage } from "components/core";
import { TipTapEditor } from "components/tiptap";
@@ -20,6 +19,7 @@ import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
import { USER_ACTIVITY } from "constants/fetch-keys";
// helper
import { timeAgo } from "helpers/date-time.helper";
+import { SettingsSidebar } from "components/project";
const ProfileActivity = () => {
const router = useRouter();
@@ -38,186 +38,179 @@ const ProfileActivity = () => {
}
>
-
-
-
-
Profile Settings
-
- This information will be visible to only you.
-
-
-
+
+
+
- {userActivity ? (
-
-
- {userActivity.results.map((activityItem: any, activityIdx: number) => {
- if (activityItem.field === "comment") {
- return (
-
-
-
- {activityItem.field ? (
- activityItem.new_value === "restore" && (
-
- )
- ) : activityItem.actor_detail.avatar &&
- activityItem.actor_detail.avatar !== "" ? (
-
- ) : (
-
- {activityItem.actor_detail.display_name?.charAt(0)}
-
- )}
-
-
-
-
-
-
-
- {activityItem.actor_detail.is_bot
- ? activityItem.actor_detail.first_name + " Bot"
- : activityItem.actor_detail.display_name}
-
-
- Commented {timeAgo(activityItem.created_at)}
-
+ {userActivity ? (
+
+
+
Acitivity
+
+
+
+ {userActivity.results.map((activityItem: any, activityIdx: number) => {
+ if (activityItem.field === "comment") {
+ return (
+
+
+
+ {activityItem.field ? (
+ activityItem.new_value === "restore" && (
+
+ )
+ ) : activityItem.actor_detail.avatar &&
+ activityItem.actor_detail.avatar !== "" ? (
+
+ ) : (
+
+ {activityItem.actor_detail.display_name?.charAt(0)}
+
+ )}
+
+
+
+
-
-
+
+
+
+ {activityItem.actor_detail.is_bot
+ ? activityItem.actor_detail.first_name + " Bot"
+ : activityItem.actor_detail.display_name}
+
+
+ Commented {timeAgo(activityItem.created_at)}
+
+
+
+
+
-
- );
- }
+ );
+ }
- const message =
- activityItem.verb === "created" &&
- activityItem.field !== "cycles" &&
- activityItem.field !== "modules" &&
- activityItem.field !== "attachment" &&
- activityItem.field !== "link" &&
- activityItem.field !== "estimate" ? (
-
- created{" "}
-
-
- this issue.
-
-
-
- ) : activityItem.field ? (
-
- ) : (
- "created the issue."
- );
+ const message =
+ activityItem.verb === "created" &&
+ activityItem.field !== "cycles" &&
+ activityItem.field !== "modules" &&
+ activityItem.field !== "attachment" &&
+ activityItem.field !== "link" &&
+ activityItem.field !== "estimate" ? (
+
+ created{" "}
+
+
+ this issue.
+
+
+
+ ) : activityItem.field ? (
+
+ ) : (
+ "created the issue."
+ );
- if ("field" in activityItem && activityItem.field !== "updated_by") {
- return (
- -
-
- {userActivity.results.length > 1 &&
- activityIdx !== userActivity.results.length - 1 ? (
-
- ) : null}
-
- <>
-
-
-
-
- {activityItem.field ? (
- activityItem.new_value === "restore" ? (
-
+
+
+ <>
+
+
+
+
+ {activityItem.field ? (
+ activityItem.new_value === "restore" ? (
+
+ ) : (
+
+ )
+ ) : activityItem.actor_detail.avatar &&
+ activityItem.actor_detail.avatar !== "" ? (
+
) : (
-
- )
- ) : activityItem.actor_detail.avatar &&
- activityItem.actor_detail.avatar !== "" ? (
-
- ) : (
-
- {activityItem.actor_detail.display_name?.charAt(0)}
-
- )}
+
+ {activityItem.actor_detail.display_name?.charAt(0)}
+
+ )}
+
-
-
-
- {activityItem.field === "archived_at" &&
- activityItem.new_value !== "restore" ? (
-
Plane
- ) : activityItem.actor_detail.is_bot ? (
-
- {activityItem.actor_detail.first_name} Bot
+
-
- >
+ >
+
-
-
- );
- }
- })}
-
-
+
+ );
+ }
+ })}
+
+
+
) : (
diff --git a/web/pages/[workspaceSlug]/me/profile/index.tsx b/web/pages/[workspaceSlug]/me/profile/index.tsx
index 6c0af1bc2..6b083143e 100644
--- a/web/pages/[workspaceSlug]/me/profile/index.tsx
+++ b/web/pages/[workspaceSlug]/me/profile/index.tsx
@@ -1,4 +1,6 @@
import React, { useEffect, useState } from "react";
+import { useRouter } from "next/router";
+import Link from "next/link";
// react-hook-form
import { Controller, useForm } from "react-hook-form";
@@ -10,21 +12,15 @@ import useUserAuth from "hooks/use-user-auth";
import useToast from "hooks/use-toast";
// layouts
import { WorkspaceAuthorizationLayout } from "layouts/auth-layout";
-import SettingsNavbar from "layouts/settings-navbar";
// components
import { ImagePickerPopover, ImageUploadModal } from "components/core";
+import { SettingsSidebar } from "components/project";
// ui
-import {
- CustomSearchSelect,
- CustomSelect,
- DangerButton,
- Input,
- SecondaryButton,
- Spinner,
-} from "components/ui";
+import { CustomSearchSelect, CustomSelect, Input, PrimaryButton, Spinner } from "components/ui";
import { BreadcrumbItem, Breadcrumbs } from "components/breadcrumbs";
// icons
import { UserIcon } from "@heroicons/react/24/outline";
+import { UserCircle } from "lucide-react";
// types
import type { NextPage } from "next";
import type { IUser } from "types";
@@ -46,6 +42,9 @@ const Profile: NextPage = () => {
const [isRemoving, setIsRemoving] = useState(false);
const [isImageUploadModalOpen, setIsImageUploadModalOpen] = useState(false);
+ const router = useRouter();
+ const { workspaceSlug } = router.query;
+
const {
register,
handleSubmit,
@@ -126,6 +125,7 @@ const Profile: NextPage = () => {
if (!prevData) return prevData;
return { ...prevData, avatar: "" };
}, false);
+ setIsRemoving(false);
})
.catch(() => {
setToastAlert({
@@ -155,6 +155,8 @@ const Profile: NextPage = () => {
setIsImageUploadModalOpen(false)}
+ isRemoving={isRemoving}
+ handleDelete={() => handleDelete(myProfile?.avatar, true)}
onSuccess={(url) => {
setValue("avatar", url);
handleSubmit(onSubmit)();
@@ -164,81 +166,49 @@ const Profile: NextPage = () => {
userImage
/>
{myProfile ? (
-
-
-
-
Profile Settings
-
- This information will be visible to only you.
-
+