mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
092e65b43d
* [WEB-1424] chore: page and view logo implementation, and emoji/icon picker improvement (#4583) * chore: added logo_props * chore: logo props in cycles, views and modules * chore: emoji icon picker types updated * chore: info icon added to plane ui package * chore: icon color adjust helper function added * style: icon picker ui improvement and default color options updated * chore: update page logo action added in store * chore: emoji code to unicode helper function added * chore: common logo renderer component added * chore: app header project logo updated * chore: project logo updated across platform * chore: page logo picker added * chore: control link component improvement * chore: list item improvement * chore: emoji picker component updated * chore: space app and package logo prop type updated * chore: migration * chore: logo added to project view * chore: page logo picker added in create modal and breadcrumbs * chore: view logo picker added in create modal and updated breadcrumbs * fix: build error * chore: AIO docker images for preview deployments (#4605) * fix: adding single docker base file * action added * fix action * dockerfile.base modified * action fix * dockerfile * fix: base aio dockerfile * fix: dockerfile.base * fix: dockerfile base * fix: modified folder structure * fix: action * fix: dockerfile * fix: dockerfile.base * fix: supervisor file name changed * fix: base dockerfile updated * fix dockerfile base * fix: base dockerfile * fix: docker files * fix: base dockerfile * update base image * modified docker aio base * aio base modified to debian-12-slim * fixes * finalize the dockerfiles with volume exposure * modified the aio build and dockerfile * fix: codacy suggestions implemented * fix: codacy fix * update aio build action --------- Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com> * fix: merge conflict * chore: lucide react added to planu ui package * chore: new emoji picker component added with lucid icon and code refactor * chore: logo component updated * chore: emoji picker updated for pages and views --------- Co-authored-by: NarayanBavisetti <narayan3119@gmail.com> Co-authored-by: Manish Gupta <59428681+mguptahub@users.noreply.github.com> Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com> * fix: build error --------- Co-authored-by: Anmol Singh Bhatia <121005188+anmolsinghbhatia@users.noreply.github.com> Co-authored-by: NarayanBavisetti <narayan3119@gmail.com> Co-authored-by: Manish Gupta <59428681+mguptahub@users.noreply.github.com> Co-authored-by: Anmol Singh Bhatia <anmolsinghbhatia@plane.so>
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import { FC, useState } from "react";
|
|
import { useRouter } from "next/router";
|
|
// types
|
|
import { TPage } from "@plane/types";
|
|
// components
|
|
import { EModalPosition, EModalWidth, ModalCore } from "@/components/core";
|
|
import { PageForm } from "@/components/pages";
|
|
// constants
|
|
import { PAGE_CREATED } from "@/constants/event-tracker";
|
|
import { EPageAccess } from "@/constants/page";
|
|
// hooks
|
|
import { useProjectPages, useEventTracker } from "@/hooks/store";
|
|
|
|
type Props = {
|
|
workspaceSlug: string;
|
|
projectId: string;
|
|
isModalOpen: boolean;
|
|
handleModalClose: () => void;
|
|
redirectionEnabled?: boolean;
|
|
};
|
|
|
|
export const CreatePageModal: FC<Props> = (props) => {
|
|
const { workspaceSlug, projectId, isModalOpen, handleModalClose, redirectionEnabled = false } = props;
|
|
// states
|
|
const [pageFormData, setPageFormData] = useState<Partial<TPage>>({
|
|
id: undefined,
|
|
name: "",
|
|
access: EPageAccess.PUBLIC,
|
|
logo_props: undefined,
|
|
});
|
|
// router
|
|
const router = useRouter();
|
|
// store hooks
|
|
const { createPage } = useProjectPages(projectId);
|
|
const { capturePageEvent } = useEventTracker();
|
|
const handlePageFormData = <T extends keyof TPage>(key: T, value: TPage[T]) =>
|
|
setPageFormData((prev) => ({ ...prev, [key]: value }));
|
|
|
|
const handleStateClear = () => {
|
|
setPageFormData({ id: undefined, name: "", access: EPageAccess.PUBLIC });
|
|
handleModalClose();
|
|
};
|
|
|
|
const handleFormSubmit = async () => {
|
|
if (!workspaceSlug || !projectId) return;
|
|
|
|
try {
|
|
const pageData = await createPage(pageFormData);
|
|
if (pageData) {
|
|
capturePageEvent({
|
|
eventName: PAGE_CREATED,
|
|
payload: {
|
|
...pageData,
|
|
state: "SUCCESS",
|
|
},
|
|
});
|
|
handleStateClear();
|
|
if (redirectionEnabled) router.push(`/${workspaceSlug}/projects/${projectId}/pages/${pageData.id}`);
|
|
}
|
|
} catch {
|
|
capturePageEvent({
|
|
eventName: PAGE_CREATED,
|
|
payload: {
|
|
state: "FAILED",
|
|
},
|
|
});
|
|
}
|
|
};
|
|
|
|
return (
|
|
<ModalCore
|
|
isOpen={isModalOpen}
|
|
handleClose={handleModalClose}
|
|
position={EModalPosition.TOP}
|
|
width={EModalWidth.XXL}
|
|
>
|
|
<PageForm
|
|
formData={pageFormData}
|
|
handleFormData={handlePageFormData}
|
|
handleModalClose={handleStateClear}
|
|
handleFormSubmit={handleFormSubmit}
|
|
/>
|
|
</ModalCore>
|
|
);
|
|
};
|