From 84b374c3f3921872956c5c846a7ed930f6474974 Mon Sep 17 00:00:00 2001 From: yassinedorbozgithub Date: Thu, 6 Feb 2025 00:31:45 +0100 Subject: [PATCH] refactor(frontend): implement GenericFormDialog component --- .../dialogs/GenericFormDialog.tsx | 43 +++++++++++++++++++ frontend/src/app-components/dialogs/index.ts | 1 + 2 files changed, 44 insertions(+) create mode 100644 frontend/src/app-components/dialogs/GenericFormDialog.tsx diff --git a/frontend/src/app-components/dialogs/GenericFormDialog.tsx b/frontend/src/app-components/dialogs/GenericFormDialog.tsx new file mode 100644 index 00000000..3f4772e0 --- /dev/null +++ b/frontend/src/app-components/dialogs/GenericFormDialog.tsx @@ -0,0 +1,43 @@ +/* + * Copyright © 2025 Hexastack. All rights reserved. + * + * Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms: + * 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission. + * 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file). + */ + +import React from "react"; + +import { FormDialog } from "@/app-components/dialogs"; +import { useTranslate } from "@/hooks/useTranslate"; +import { TTranslationKeys } from "@/i18n/i18n.types"; +import { ComponentFormDialogProps } from "@/types/common/dialogs.types"; + +type GenericFormDialogProps = ComponentFormDialogProps & { + Form: React.ElementType; + addText?: TTranslationKeys; + editText?: TTranslationKeys; +}; + +export const GenericFormDialog = ({ + Form, + payload, + ...rest +}: GenericFormDialogProps) => { + const { t } = useTranslate(); + const translationKey = payload ? rest.editText : rest.addText; + + return ( +
{ + rest.onClose(true); + }} + WrapperProps={{ + title: translationKey && t(translationKey), + ...rest, + }} + /> + ); +}; diff --git a/frontend/src/app-components/dialogs/index.ts b/frontend/src/app-components/dialogs/index.ts index f56c6c22..b9b7d5ac 100644 --- a/frontend/src/app-components/dialogs/index.ts +++ b/frontend/src/app-components/dialogs/index.ts @@ -11,5 +11,6 @@ export * from "./confirm/ConfirmDialogBody"; export * from "./DeleteDialog"; export * from "./DialogTitle"; export * from "./FormDialog"; +export * from "./GenericFormDialog"; export * from "./layouts/ContentContainer"; export * from "./layouts/ContentItem";