Merge branch 'develop' of github.com:makeplane/plane into stage/merge-fixes

This commit is contained in:
sriramveeraghanta 2023-08-16 13:17:21 +05:30
commit fde978861c
7 changed files with 51 additions and 6 deletions

View File

@ -88,6 +88,7 @@ class ProjectLiteSerializer(BaseSerializer):
"cover_image", "cover_image",
"icon_prop", "icon_prop",
"emoji", "emoji",
"description",
] ]
read_only_fields = fields read_only_fields = fields

View File

@ -53,7 +53,9 @@ export const NotificationCard: React.FC<NotificationCardProps> = (props) => {
onClick={() => { onClick={() => {
markNotificationReadStatus(notification.id); markNotificationReadStatus(notification.id);
router.push( router.push(
`/${workspaceSlug}/projects/${notification.project}/issues/${notification.data.issue.id}` `/${workspaceSlug}/projects/${notification.project}/${
notification.data.issue_activity.field === "archived_at" ? "archived-issues" : "issues"
}/${notification.data.issue.id}`
); );
}} }}
className={`group w-full flex items-center gap-4 p-3 pl-6 relative cursor-pointer ${ className={`group w-full flex items-center gap-4 p-3 pl-6 relative cursor-pointer ${

View File

@ -1,11 +1,34 @@
"use client";
// next imports // next imports
import Link from "next/link"; import Link from "next/link";
import Image from "next/image"; import Image from "next/image";
import { Metadata, ResolvingMetadata } from "next";
// components // components
import IssueNavbar from "components/issues/navbar"; import IssueNavbar from "components/issues/navbar";
import IssueFilter from "components/issues/filters-render"; import IssueFilter from "components/issues/filters-render";
// service
import ProjectService from "services/project.service";
type LayoutProps = {
params: { workspace_slug: string; project_slug: string };
};
export async function generateMetadata({ params }: LayoutProps): Promise<Metadata> {
// read route params
const { workspace_slug, project_slug } = params;
const projectServiceInstance = new ProjectService();
const project = await projectServiceInstance?.getProjectSettingsAsync(workspace_slug, project_slug);
return {
title: `${project?.project_details?.name} | ${workspace_slug}`,
description: `${project?.project_details?.description || `${project?.project_details?.name} | ${workspace_slug}`}`,
icons: `data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>${
typeof project?.project_details?.emoji != "object"
? String.fromCodePoint(parseInt(project?.project_details?.emoji))
: "✈️"
}</text></svg>`,
};
}
const RootLayout = ({ children }: { children: React.ReactNode }) => ( const RootLayout = ({ children }: { children: React.ReactNode }) => (
<div className="relative w-screen min-h-[500px] h-screen overflow-hidden flex flex-col"> <div className="relative w-screen min-h-[500px] h-screen overflow-hidden flex flex-col">

View File

@ -3,7 +3,7 @@
import React from "react"; import React from "react";
const HomePage = () => ( const HomePage = () => (
<div className="relative w-screen h-screen flex justify-center items-center text-5xl">Plane Space</div> <div className="relative w-screen h-screen flex justify-center items-center text-5xl">Plane Deploy</div>
); );
export default HomePage; export default HomePage;

View File

@ -1,5 +1,7 @@
"use client"; "use client";
// next imports
import Image from "next/image";
// components // components
import { NavbarSearch } from "./search"; import { NavbarSearch } from "./search";
import { NavbarIssueBoardView } from "./issue-board-view"; import { NavbarIssueBoardView } from "./issue-board-view";
@ -12,6 +14,18 @@ import { observer } from "mobx-react-lite";
import { useMobxStore } from "lib/mobx/store-provider"; import { useMobxStore } from "lib/mobx/store-provider";
import { RootStore } from "store/root"; import { RootStore } from "store/root";
const renderEmoji = (emoji: string | { name: string; color: string }) => {
if (!emoji) return;
if (typeof emoji === "object")
return (
<span style={{ color: emoji.color }} className="material-symbols-rounded text-lg">
{emoji.name}
</span>
);
else return isNaN(parseInt(emoji)) ? emoji : String.fromCodePoint(parseInt(emoji));
};
const IssueNavbar = observer(() => { const IssueNavbar = observer(() => {
const store: RootStore = useMobxStore(); const store: RootStore = useMobxStore();
@ -20,7 +34,11 @@ const IssueNavbar = observer(() => {
{/* project detail */} {/* project detail */}
<div className="flex-shrink-0 flex items-center gap-2"> <div className="flex-shrink-0 flex items-center gap-2">
<div className="w-[32px] h-[32px] rounded-sm flex justify-center items-center bg-gray-100 text-[24px]"> <div className="w-[32px] h-[32px] rounded-sm flex justify-center items-center bg-gray-100 text-[24px]">
{store?.project?.project && store?.project?.project?.icon ? store?.project?.project?.icon : "😊"} {store?.project?.project && store?.project?.project?.emoji ? (
renderEmoji(store?.project?.project?.emoji)
) : (
<Image src="/plane-logo.webp" alt="plane logo" className="w-[24px] h-[24px]" height="24" width="24" />
)}
</div> </div>
<div className="font-medium text-lg max-w-[300px] line-clamp-1 overflow-hidden"> <div className="font-medium text-lg max-w-[300px] line-clamp-1 overflow-hidden">
{store?.project?.project?.name || `...`} {store?.project?.project?.name || `...`}

View File

@ -1,5 +1,5 @@
{ {
"name": "plane-space", "name": "plane-deploy",
"version": "0.0.1", "version": "0.0.1",
"private": true, "private": true,
"scripts": { "scripts": {

View File

@ -8,6 +8,7 @@ export interface IProject {
id: string; id: string;
identifier: string; identifier: string;
name: string; name: string;
description: string;
icon: string; icon: string;
cover_image: string | null; cover_image: string | null;
icon_prop: string | null; icon_prop: string | null;