From 3f37e04ffc646e8ebd9515279ed4685758aac081 Mon Sep 17 00:00:00 2001 From: tseba 's Date: Wed, 23 Jul 2025 17:32:12 +0800 Subject: [PATCH 1/2] new tourism ui --- .../src/assets/images/tourism-empty-state.jpg | Bin 0 -> 130241 bytes frontend/plugins/tourism_ui/src/config.ts | 4 +- .../pmsFormFields/appearance/appearance.tsx | 4 +- .../pmsFormFields/general/Discount.tsx | 6 +- .../pmsFormFields/payments/payments.tsx | 6 +- .../tourism_ui/src/modules/tms/Main.tsx | 7 + .../tourism_ui/src/modules/tms/Settings.tsx | 2 +- .../src/modules/tms/components/ActionMenu.tsx | 75 ++++ .../tms/components/AddPaymentDialog.tsx | 74 ++++ .../src/modules/tms/components/BranchCard.tsx | 87 ++++ .../src/modules/tms/components/BranchList.tsx | 290 +++++++------ .../tms/components/ConfirmationDialog.tsx | 83 ++++ .../modules/tms/components/CreateTmsForm.tsx | 220 ++++++++-- .../modules/tms/components/CreateTmsSheet.tsx | 2 +- .../src/modules/tms/components/EmptyList.tsx | 14 +- .../modules/tms/components/PaymentIcon.tsx | 63 +++ .../src/modules/tms/components/Preview.tsx | 217 ---------- .../modules/tms/components/TmsFormFields.tsx | 391 ++++++++---------- .../tms/components/TmsInformationFields.tsx | 185 +++++---- .../src/modules/tms/constants/formSchema.ts | 12 +- .../src/modules/tms/graphql/mutation.ts | 69 ++-- .../src/modules/tms/graphql/queries.ts | 84 +++- .../src/modules/tms/hooks/BranchDetail.ts | 26 ++ .../src/modules/tms/hooks/BranchDuplicate.ts | 67 +++ .../src/modules/tms/hooks/BranchEdit.ts | 63 ++- .../src/modules/tms/hooks/BranchList.ts | 32 +- .../src/modules/tms/hooks/BranchRemove.ts | 15 +- .../src/modules/tms/hooks/CreateBranch.ts | 41 +- .../tms/states/tmsInformationFieldsAtoms.ts | 4 + .../src/modules/tms/types/branch.ts | 2 + .../tourism_ui/src/pages/pms/IndexPage.tsx | 2 +- .../tourism_ui/src/pages/tms/IndexPage.tsx | 2 +- .../tourism_ui/src/pages/tms/PreviewPage.tsx | 105 +++++ 33 files changed, 1455 insertions(+), 799 deletions(-) create mode 100644 frontend/plugins/tourism_ui/src/assets/images/tourism-empty-state.jpg create mode 100644 frontend/plugins/tourism_ui/src/modules/tms/components/ActionMenu.tsx create mode 100644 frontend/plugins/tourism_ui/src/modules/tms/components/AddPaymentDialog.tsx create mode 100644 frontend/plugins/tourism_ui/src/modules/tms/components/BranchCard.tsx create mode 100644 frontend/plugins/tourism_ui/src/modules/tms/components/ConfirmationDialog.tsx create mode 100644 frontend/plugins/tourism_ui/src/modules/tms/components/PaymentIcon.tsx delete mode 100644 frontend/plugins/tourism_ui/src/modules/tms/components/Preview.tsx create mode 100644 frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchDetail.ts create mode 100644 frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchDuplicate.ts create mode 100644 frontend/plugins/tourism_ui/src/modules/tms/states/tmsInformationFieldsAtoms.ts create mode 100644 frontend/plugins/tourism_ui/src/pages/tms/PreviewPage.tsx diff --git a/frontend/plugins/tourism_ui/src/assets/images/tourism-empty-state.jpg b/frontend/plugins/tourism_ui/src/assets/images/tourism-empty-state.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd1193aad7e391c217e2916ab99f02379b57004a GIT binary patch literal 130241 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 }) => { return ( Logo and favicon -
+
}) => { size="sm" variant="secondary" type="button" - className="flex flex-col gap-3 items-center justify-center w-full h-52 border border-dashed text-muted-foreground" + className="flex flex-col items-center justify-center w-full gap-3 border border-dashed h-52 text-muted-foreground" > diff --git a/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/general/Discount.tsx b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/general/Discount.tsx index 9b13f7f693..5a24fdd809 100644 --- a/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/general/Discount.tsx +++ b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/general/Discount.tsx @@ -17,8 +17,8 @@ const Discount = ({ control }: { control: Control }) => { {fields.map((field, index) => ( -
-
+
+
}) => { {fields.map((field, index) => ( -
-
+
+
}) => { + + +
+ +

Edit

+
+ +
!duplicateLoading && onDuplicate()} + > + +

+ {duplicateLoading ? 'Duplicating...' : 'Duplicate'} +

+
+ +
+ +

+ Visit website +

+
+ +
+ +

+ Delete +

+
+
+ + ); +}; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/AddPaymentDialog.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/AddPaymentDialog.tsx new file mode 100644 index 0000000000..131b049b12 --- /dev/null +++ b/frontend/plugins/tourism_ui/src/modules/tms/components/AddPaymentDialog.tsx @@ -0,0 +1,74 @@ +import { useState } from 'react'; +import { Button, Dialog, Input, Label } from 'erxes-ui'; +import { IconPlus, IconX } from '@tabler/icons-react'; + +export const AddPaymentDialog = () => { + const [open, setOpen] = useState(false); + + return ( + // TODO: Add functionalities + + + + + + + + Add New Payment Method + + Add a new payment method to your available options. + + + + + + +
+
+
+ + +
+ +
+ + +
+
+ + + + + +
+
+
+ ); +}; + +export default AddPaymentDialog; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/BranchCard.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/BranchCard.tsx new file mode 100644 index 0000000000..946a2a5983 --- /dev/null +++ b/frontend/plugins/tourism_ui/src/modules/tms/components/BranchCard.tsx @@ -0,0 +1,87 @@ +import { IconCalendarPlus } from '@tabler/icons-react'; +import { IBranch } from '@/tms/types/branch'; +import { format } from 'date-fns'; +import { Avatar } from 'erxes-ui'; +import { readImage } from 'erxes-ui/utils/core'; +import { ActionMenu } from './ActionMenu'; + +interface BranchCardProps { + branch: IBranch; + onEdit: (branchId: string) => void; + onDuplicate: (branchId: string) => void; + onDelete: (branchId: string) => void; + duplicateLoading: boolean; +} + +export const BranchCard = ({ + branch, + onEdit, + onDuplicate, + onDelete, + duplicateLoading, +}: BranchCardProps) => { + return ( +
+
+ +
+
+
+

+ {branch.name || 'Unnamed Branch'} +

+
+ + onEdit(branch._id)} + onDuplicate={() => onDuplicate(branch._id)} + onDelete={() => onDelete(branch._id)} + duplicateLoading={duplicateLoading} + /> +
+ +
+
+ {branch.name +
+
+ +
+
+ + + Created:{' '} + {branch.createdAt + ? format(new Date(branch.createdAt), 'dd MMM yyyy') + : 'N/A'} + +
+ + + {branch.user?.details?.avatar ? ( + + ) : null} + + {branch.user?.details?.fullName + ?.split(' ')[0] + ?.charAt(0) + ?.toUpperCase() || 'A'} + + +
+
+
+
+ ) +} diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/BranchList.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/BranchList.tsx index c3906e86b8..5c153c1aa7 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/components/BranchList.tsx +++ b/frontend/plugins/tourism_ui/src/modules/tms/components/BranchList.tsx @@ -1,161 +1,179 @@ -import { - IconCalendarPlus, - IconEdit, - IconCopy, - IconWorld, - IconTrash, - IconChevronDown, -} from '@tabler/icons-react'; -import { useState, useRef, useEffect } from 'react'; +import { useState } from 'react'; import { useBranchList } from '@/tms/hooks/BranchList'; import { useBranchRemove } from '@/tms/hooks/BranchRemove'; +import { useBranchDuplicate } from '@/tms/hooks/BranchDuplicate'; import { IBranch } from '@/tms/types/branch'; -import { format } from 'date-fns'; import { EmptyList } from './EmptyList'; -import { toast } from 'erxes-ui'; +import { BranchCard } from './BranchCard'; +import { ConfirmationDialog } from './ConfirmationDialog'; +import { toast, Sheet, Spinner } from 'erxes-ui'; +import CreateTmsForm from './CreateTmsForm'; export const BranchList = () => { - const { list, loading, error } = useBranchList(); + const { list, loading, error, refetch } = useBranchList(); + const { removeBranchById, loading: removeLoading } = useBranchRemove(); + const { duplicateBranch, loading: duplicateLoading } = useBranchDuplicate(); - const [isMenuOpen, setIsMenuOpen] = useState(null); - const menuRef = useRef(null); + const [editingBranch, setEditingBranch] = useState(null); + const [deleteDialogOpen, setDeleteDialogOpen] = useState(null); + const [duplicateDialogOpen, setDuplicateDialogOpen] = useState( + null, + ); - const toggleMenu = (index: number) => { - setIsMenuOpen(isMenuOpen === index ? null : index); + const handleEditBranch = (branchId: string) => { + setEditingBranch(branchId); + }; + + const handleDuplicateBranch = async (branch: IBranch) => { + setDuplicateDialogOpen(null); + + try { + await duplicateBranch({ + variables: { + name: `${branch.name} (Copy)`, + description: branch.description, + generalManagerIds: branch.generalManagerIds || [], + managerIds: branch.managerIds || [], + paymentIds: branch.paymentIds || [], + paymentTypes: (branch.paymentTypes || []).map((name) => ({ + id: name, + name: name, + })), + erxesAppToken: branch.erxesAppToken, + permissionConfig: branch.permissionConfig || [], + uiOptions: branch.uiOptions || {}, + }, + onCompleted: async () => { + toast({ + title: 'Branch duplicated successfully', + }); + await refetch(); + }, + onError: (error) => { + toast({ + title: 'Failed to duplicate branch', + description: error.message, + variant: 'destructive', + }); + }, + }); + } catch (error) { + toast({ + title: 'Failed to duplicate branch', + description: error?.message || 'Unknown error occurred', + variant: 'destructive', + }); + } }; const handleDeleteBranch = async (branchId: string) => { - if (window.confirm('Are you sure you want to delete this branch?')) { - setIsMenuOpen(null); - - try { - const success = await removeBranchById(branchId); - - if (success) { - toast.success('Branch deleted successfully'); - } else { - toast.error('Failed to delete branch'); - } - } catch (error) { - toast.error('Failed to delete branch'); + setDeleteDialogOpen(null); + + try { + const success = await removeBranchById(branchId); + + if (success) { + toast({ + title: 'Branch deleted successfully', + }); + await refetch(); + } else { + toast({ + title: 'Failed to delete branch', + }); } + } catch (error) { + toast({ + title: 'Failed to delete branch', + description: `${error.message}`, + }); } }; - useEffect(() => { - const handleClickOutside = (event: MouseEvent) => { - if (menuRef.current && !menuRef.current.contains(event.target as Node)) { - setIsMenuOpen(null); - } - }; + if (loading) return ; - document.addEventListener('mousedown', handleClickOutside); - return () => { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, [menuRef]); + if (error) + return ( +
+ Error loading branches: {error.message} +
+ ); - if (loading) return
Loading...
; - if (error) return
Error loading branches
; if (!list || list.length === 0) return ; return ( -
-
- {list.map((branch: IBranch, index: number) => ( -
-
-
-
-
-

- {branch.name || 'Unnamed Branch'} -

-
- -
- - - {isMenuOpen === index && ( -
-
- -

- Manage -

-
-
- -

- Duplicate -

-
-
- -

- Visit website -

-
-
handleDeleteBranch(branch._id)} - > - -

- Delete -

-
-
- )} -
-
- -
- {/* Placeholder image since we don't have an image property in the data */} -
- - {branch.name?.charAt(0) || 'B'} - -
-
- -
-
- - - Created:{' '} - {branch.createdAt - ? format(new Date(branch.createdAt), 'dd MMM yyyy') - : 'N/A'} - -
- - {branch.user?.details?.avatar && ( - {branch.user.details.fullName - )} -
-
-
+ <> +
+
+
+ {list.map((branch: IBranch) => ( + + ))}
- ))} +
-
+ + { + if (!open) { + setEditingBranch(null); + } + }} + > + { + e.preventDefault(); + }} + > + {editingBranch && ( + { + if (!open) { + setEditingBranch(null); + } + }} + onSuccess={() => { + setEditingBranch(null); + }} + refetch={refetch} + /> + )} + + + + !open && setDuplicateDialogOpen(null)} + type="duplicate" + branchName={list?.find((b) => b._id === duplicateDialogOpen)?.name || ''} + loading={duplicateLoading} + onConfirm={() => { + const branch = list?.find((b) => b._id === duplicateDialogOpen); + if (branch) handleDuplicateBranch(branch); + }} + /> + + !open && setDeleteDialogOpen(null)} + type="delete" + branchName={list?.find((b) => b._id === deleteDialogOpen)?.name || ''} + loading={removeLoading} + onConfirm={() => { + if (deleteDialogOpen) handleDeleteBranch(deleteDialogOpen); + }} + /> + ); }; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/ConfirmationDialog.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/ConfirmationDialog.tsx new file mode 100644 index 0000000000..6bc35d5d95 --- /dev/null +++ b/frontend/plugins/tourism_ui/src/modules/tms/components/ConfirmationDialog.tsx @@ -0,0 +1,83 @@ +import { IconCopy, IconTrash } from '@tabler/icons-react'; +import { Dialog, Button } from 'erxes-ui'; + +interface ConfirmationDialogProps { + open: boolean; + onOpenChange: (open: boolean) => void; + type: 'duplicate' | 'delete'; + branchName: string; + loading: boolean; + onConfirm: () => void; +} + +export const ConfirmationDialog = ({ + open, + onOpenChange, + type, + branchName, + loading, + onConfirm, +}: ConfirmationDialogProps) => { + const isDuplicate = type === 'duplicate'; + const isDelete = type === 'delete'; + + return ( + + + +
+
+ {isDuplicate ? ( + + ) : ( + + )} +
+ + {isDuplicate ? 'Duplicate Branch' : 'Delete Branch'} + +
+
+
+
+

+ {isDuplicate + ? 'This will create a new branch with copied settings' + : 'Warning: This action cannot be undone'} +

+
+

+ Are you sure you want to{' '} + {isDuplicate ? 'create a duplicate of' : 'permanently delete'}{' '} + "{branchName}"?{' '} + {isDuplicate + ? 'A new branch will be created with all the same configurations.' + : 'All associated data will be lost forever.'} +

+
+ + + + +
+
+ ); +}; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/CreateTmsForm.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/CreateTmsForm.tsx index 0ff432c76c..8007303c00 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/components/CreateTmsForm.tsx +++ b/frontend/plugins/tourism_ui/src/modules/tms/components/CreateTmsForm.tsx @@ -1,22 +1,42 @@ import { TmsCreateSheetHeader } from '@/tms/components/CreateTmsSheet'; -import { Sheet, Form, useToast } from 'erxes-ui'; +import { Sheet, Form, useToast, Preview, Separator } from 'erxes-ui'; import { useForm } from 'react-hook-form'; import { TmsFormSchema, TmsFormType } from '@/tms/constants/formSchema'; import { zodResolver } from '@hookform/resolvers/zod'; import { ApolloError } from '@apollo/client'; import { TmsInformationFields } from '@/tms/components/TmsInformationFields'; -import Preview from '@/tms/components/Preview'; import { useCreateBranch } from '../hooks/CreateBranch'; +import { useBranchEdit } from '../hooks/BranchEdit'; +import { useBranchDetail } from '../hooks/BranchDetail'; +import { useEffect, useState } from 'react'; + +interface PermissionConfig { + type: string; + title: string; + icon: string; + config?: string; +} const CreateTmsForm = ({ + branchId, onOpenChange, onSuccess, + refetch, }: { + branchId?: string; onOpenChange?: (open: boolean) => void; onSuccess?: () => void; + refetch?: () => Promise; }) => { const { createBranch } = useCreateBranch(); + const { editBranch } = useBranchEdit(); + const { branchDetail, loading: detailLoading } = useBranchDetail({ + id: branchId || '', + }); + + const isEditMode = !!branchId; + const form = useForm({ resolver: zodResolver(TmsFormSchema), defaultValues: { @@ -24,67 +44,179 @@ const CreateTmsForm = ({ color: '#4F46E5', logo: '', favIcon: '', - generalManeger: '', - manegers: [], + generalManager: [], + managers: [], payment: '', token: '', otherPayments: [], }, }); - const watchedValues = form.watch(); + useEffect(() => { + if (branchDetail) { + form.reset({ + name: branchDetail.name || '', + color: branchDetail.uiOptions?.colors?.primary || '#4F46E5', + logo: branchDetail.uiOptions?.logo || '', + favIcon: branchDetail.uiOptions?.favIcon || '', + generalManager: branchDetail.generalManagerIds || [], + managers: branchDetail.managerIds || [], + payment: Array.isArray(branchDetail.paymentIds) + ? branchDetail.paymentIds[0] || '' + : '', + token: branchDetail.erxesAppToken || '', + otherPayments: Array.isArray(branchDetail.permissionConfig) + ? branchDetail.permissionConfig.map((config: PermissionConfig) => ({ + type: config.type || '', + title: config.title || '', + icon: config.icon || '', + config: config.config || '', + })) + : [], + }); + } + }, [branchDetail, form]); + const { toast } = useToast(); + const formData = form.watch(); + const [debouncedUrl, setDebouncedUrl] = useState('/tms/PreviewPage'); + + useEffect(() => { + const timer = setTimeout(() => { + const params = new URLSearchParams(); + if (formData.name) params.set('name', formData.name); + if (formData.color) params.set('color', formData.color); + if (formData.logo) params.set('logo', formData.logo); + setDebouncedUrl(`/tms/PreviewPage?${params.toString()}`); + }, 500); + + return () => clearTimeout(timer); + }, [formData.name, formData.color, formData.logo]); + const onSubmit = (data: TmsFormType) => { - createBranch({ - variables: { - name: data.name, - user1Ids: data.generalManeger ? [data.generalManeger] : undefined, - user2Ids: data.manegers || undefined, - paymentIds: data.payment ? [data.payment] : undefined, - token: data.token, - erxesAppToken: '', - uiOptions: { - logo: data.logo, - favIcon: data.favIcon, - colors: { - primary: data.color, - }, + const permissionConfig = + data.otherPayments?.map((payment: PermissionConfig) => ({ + type: payment.type, + title: payment.title, + icon: payment.icon, + config: payment.config, + })) || []; + + const variables = { + name: data.name, + generalManagerIds: data.generalManager || [], + managerIds: data.managers || [], + paymentIds: data.payment ? [data.payment] : [], + permissionConfig, + erxesAppToken: data.token, + uiOptions: { + logo: data.logo || '', + favIcon: data.favIcon || '', + colors: { + primary: data.color, }, }, - onError: (e: ApolloError) => { - toast({ - title: 'Error', - description: e.message, - variant: 'destructive', - }); - }, - onCompleted: () => { - toast({ - title: 'Success', - description: 'Branch created successfully', - }); - form.reset(); - onOpenChange?.(false); - onSuccess?.(); - }, - }); + }; + + if (isEditMode) { + editBranch({ + variables: { + id: branchId, + ...variables, + }, + onError: (e: ApolloError) => { + toast({ + title: 'Error', + description: e.message, + variant: 'destructive', + }); + }, + onCompleted: () => { + toast({ + title: 'Success', + description: 'Branch updated successfully', + }); + onOpenChange?.(false); + onSuccess?.(); + }, + }); + } else { + createBranch({ + variables, + onError: (e: ApolloError) => { + toast({ + title: 'Error', + description: e.message, + variant: 'destructive', + }); + }, + onCompleted: async () => { + toast({ + title: 'Success', + description: 'Branch created successfully', + }); + form.reset(); + onOpenChange?.(false); + onSuccess?.(); + if (refetch) { + try { + await refetch(); + } catch (error) { + toast({ + title: 'Warning', + description: + error instanceof Error ? error.message : String(error), + variant: 'destructive', + }); + } + } + }, + }); + } }; + if (isEditMode && detailLoading) { + return ( +
+
+ Loading branch details... +
+
+ ); + } + return (
- - - - + {isEditMode ? ( + + Edit Tour Management System + + + ) : ( + + )} + +
+ +
+
+ +
+ +
+ + +
+
diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/CreateTmsSheet.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/CreateTmsSheet.tsx index 2b618a4d42..31de3b374f 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/components/CreateTmsSheet.tsx +++ b/frontend/plugins/tourism_ui/src/modules/tms/components/CreateTmsSheet.tsx @@ -36,7 +36,7 @@ export const TmsCreateSheet = () => { export const TmsCreateSheetHeader = () => { return ( - + Create Tour Management System diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/EmptyList.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/EmptyList.tsx index 22cf1607c0..c72c8af524 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/components/EmptyList.tsx +++ b/frontend/plugins/tourism_ui/src/modules/tms/components/EmptyList.tsx @@ -1,23 +1,23 @@ -import { TmsCreateSheet } from '@/tms/components/CreateTmsSheet'; +import { TmsCreateSheet } from '~/modules/tms/components/CreateTmsSheet'; export const EmptyList = () => { return ( -
-
-
+
+
+
tourism
-

+

Tour management system

-

+

A tour management system is software designed to organize and manage tourism-related activities. It helps streamline trip planning, booking, payment management, customer information, and travel diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/PaymentIcon.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/PaymentIcon.tsx new file mode 100644 index 0000000000..af0c8428b0 --- /dev/null +++ b/frontend/plugins/tourism_ui/src/modules/tms/components/PaymentIcon.tsx @@ -0,0 +1,63 @@ +import React from 'react'; +import { + IconCreditCard, + IconCashBanknote, + IconBuilding, + IconPhone, + IconBrandVisa, + IconBrandMastercard, + IconFile, +} from '@tabler/icons-react'; + +export const paymentIconOptions = [ + { value: 'visa', label: 'Visa' }, + { value: 'mastercard', label: 'Mastercard' }, + { value: 'cash', label: 'QPay' }, + { value: 'bank', label: 'SocialPay' }, + { value: 'credit-card', label: 'Credit Card' }, + { value: 'mobile', label: 'Mobile Payment' }, +]; + +interface PaymentIconProps { + iconType: string; + size?: number; + className?: string; +} + +const PaymentIcon: React.FC = ({ + iconType, + size = 16, + className = '', +}) => { + const getIcon = () => { + switch (iconType) { + case 'credit-card': + return ; + case 'cash': + return ; + case 'bank': + return ; + case 'mobile': + return ; + case 'visa': + return ( + + ); + case 'mastercard': + return ( + + ); + case 'sign-alt': + return ; + default: + return ; + } + }; + + return getIcon(); +}; + +export default PaymentIcon; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/Preview.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/Preview.tsx deleted file mode 100644 index 53d4896ef9..0000000000 --- a/frontend/plugins/tourism_ui/src/modules/tms/components/Preview.tsx +++ /dev/null @@ -1,217 +0,0 @@ -import { - IconDeviceDesktop, - IconDeviceMobile, - IconDeviceTablet, - IconWifi, - IconAntennaBars5, - IconBattery, -} from '@tabler/icons-react'; -import { Button, Input } from 'erxes-ui'; -import { useState } from 'react'; -import { TmsFormType } from '@/tms/constants/formSchema'; - -type DeviceType = 'desktop' | 'mobile' | 'tablet'; - -interface PreviewProps { - formData?: Partial; -} - -export default function Preview({ formData }: PreviewProps) { - const [activeDevice, setActiveDevice] = useState('desktop'); - - const tourName = formData?.name || 'Таны тур оператор'; - const themeColor = formData?.color || '#4F46E5'; - const logoUrl = - formData?.logo || - 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTbvwVAC3F5xurW6mtfMrEoeWvuQpisg17tNg&s'; - - const renderLoginForm = () => { - return ( -

-
- Company Logo -
- -
-

- Sign in to your account -

-

- Enter your email and password below to access your account. -

-
- -
- -
- -
- - -
- -
-
- - Forgot password? -
- -
- - -
- ); - }; - - const renderDeviceFrame = () => { - switch (activeDevice) { - case 'desktop': - return ( -
-
-
-
-
-
-
-
-
-
-
- {renderLoginForm()} -
-
-
- ); - - case 'mobile': - return ( -
- {/* Status bar */} -
-
9:41
-
- - - -
-
- {/* Notch */} -
-
-
- {/* Content */} -
-
-
- {renderLoginForm()} -
-
-
- {/* Home indicator */} -
-
-
-
- ); - - case 'tablet': - return ( -
- {/* Status bar */} -
-
9:41
-
- - - -
-
- {/* Content */} -
-
-
{renderLoginForm()}
-
-
- {/* Home button */} -
-
-
-
- ); - } - }; - - return ( -
-
- {(['desktop', 'mobile', 'tablet'] as DeviceType[]).map((device) => ( -
setActiveDevice(device)} - > - {device === 'desktop' && ( - - )} - {device === 'mobile' && ( - - )} - {device === 'tablet' && ( - - )} -

- {device.charAt(0).toUpperCase() + device.slice(1)} -

-
- ))} -
- -
- {renderDeviceFrame()} -
-
- ); -} diff --git a/frontend/plugins/tourism_ui/src/modules/tms/components/TmsFormFields.tsx b/frontend/plugins/tourism_ui/src/modules/tms/components/TmsFormFields.tsx index 2f01801ef1..bede2b8555 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/components/TmsFormFields.tsx +++ b/frontend/plugins/tourism_ui/src/modules/tms/components/TmsFormFields.tsx @@ -1,7 +1,10 @@ import { Control, useFieldArray } from 'react-hook-form'; -import { Button, Form, Input, Select, Upload } from 'erxes-ui'; +import { Button, Form, Input, Select, Upload, ColorPicker } from 'erxes-ui'; import { TmsFormType } from '@/tms/constants/formSchema'; -import { IconUpload, IconPlus, IconTrash } from '@tabler/icons-react'; +import { IconUpload, IconPlus, IconTrash, IconX } from '@tabler/icons-react'; +import PaymentIcon, { paymentIconOptions } from './PaymentIcon'; +import AddPaymentDialog from './AddPaymentDialog'; +import { SelectMember } from 'ui-modules'; export const TourName = ({ control }: { control: Control }) => { return ( @@ -11,7 +14,7 @@ export const TourName = ({ control }: { control: Control }) => { render={({ field }) => ( - Tour Name * + Name * @@ -31,20 +34,17 @@ export const SelectColor = ({ control }: { control: Control }) => { render={({ field }) => ( - Main color * + Main color * -
- -
+ { + field.onChange(value); + }} + className="w-24" + />
@@ -74,28 +74,47 @@ export const LogoField = ({ control }: { control: Control }) => { } }} > -
- - - - - -

- Max size: 15MB, File type: PNG -

-
- - {field.value && ( - - )} -
+
+ ) : ( + <> + + + + +

+ Max size: 15MB, File type: PNG +

+
+ + )} @@ -130,29 +149,42 @@ export const FavIconField = ({ } }} > - -
- - - - - -

- Max size: 15MB, File type: PNG -

-
- - {field.value && ( - - )} -
+
+ ) : ( + <> + + + + +

+ Max size: 15MB, File type: PNG +

+
+ + )} @@ -161,14 +193,7 @@ export const FavIconField = ({ ); }; -const TestGeneralManager = [ - { label: 'Bold Bold', value: '1' }, - { label: 'Bat Bat', value: '2' }, - { label: 'Toroo Toroo', value: '3' }, - { label: 'Temuulen Temuulen', value: '4' }, -]; - -export const GeneralManeger = ({ +export const GeneralManager = ({ control, }: { control: Control; @@ -176,54 +201,22 @@ export const GeneralManeger = ({ return ( ( - General maneger + General Managers - General maneger can be shown on the top of the post also in the list + General manager can be shown on the top of the post also in the list view - + +
+ +
+
)} @@ -231,64 +224,25 @@ export const GeneralManeger = ({ ); }; -const TestManegers = [ - { label: 'Bold Bold', value: '1' }, - { label: 'Bat Bat', value: '2' }, - { label: 'Toroo Toroo', value: '3' }, - { label: 'Temuulen Temuulen', value: '4' }, -]; - -export const Maneger = ({ control }: { control: Control }) => { +export const Manager = ({ control }: { control: Control }) => { return ( ( - Manegers + Managers - Maneger can be shown on the top of the post also in the list view + Manager can be shown on the top of the post also in the list view - + +
+ +
+
)} @@ -313,53 +267,30 @@ export const Payments = ({ control }: { control: Control }) => { Select payments that you want to use - -
- - - {TestPayments.map((status) => ( - - {status.label} + + + + + {TestPayments.map((payment) => ( + + {payment.label} ))} - - - + + + - +
@@ -374,7 +305,7 @@ export const Token = ({ control }: { control: Control }) => { control={control} name="token" render={({ field }) => ( - + Erxes app token What is erxes app token ? @@ -392,14 +323,6 @@ export const OtherPayments = ({ }: { control: Control; }) => { - // Define Icon options - const Icon = [ - { value: 'visa', label: 'Visa' }, - { value: 'mastercard', label: 'Mastercard' }, - { value: 'qpay', label: 'QPay' }, - { value: 'socialpay', label: 'SocialPay' }, - ]; - const { fields, append, remove } = useFieldArray({ control, name: 'otherPayments', @@ -410,8 +333,8 @@ export const OtherPayments = ({ }; return ( -
-
+
+

Other Payments

@@ -425,10 +348,10 @@ export const OtherPayments = ({

-
+
+
+
- - - - ); - case 3: - return ( - <> + {/* Step 2 */} +
+
+ + +
+
+ + {/* Step 3 */} +
+
- - ); - default: - return null; - } +
+
+
+ ); }; const handleNext = async () => { if (currentStep === 1) { - const result = await form.trigger(['name', 'color', 'logo']); - if (result) setCurrentStep(2); + const result = await form.trigger(['name', 'color']); + if (result) { + setCurrentStep(2); + } } else if (currentStep === 2) { setCurrentStep(3); } @@ -83,7 +101,7 @@ export const TmsInformationFields = ({ } function handleSave() { - form.trigger(['payment', 'token']).then((isValid) => { + form.trigger(['payment', 'token', 'otherPayments']).then((isValid) => { if (isValid && onSubmit) { onSubmit(form.getValues()); } @@ -91,64 +109,81 @@ export const TmsInformationFields = ({ } return ( -
-
-
-
-
-

- STEP {currentStep} -

-
-

- {currentStep === 1 - ? 'General information' - : currentStep === 2 - ? 'Permission' - : 'Payments'} +

+
+
+
+

+ STEP {currentStep}

-
- {[1, 2, 3].map((step) => ( -
- ))} -
-

+

{currentStep === 1 - ? 'Set up your TMS information' + ? 'General information' : currentStep === 2 - ? 'Setup your permission' - : 'Setup your payments'} + ? 'Permission' + : 'Payments'}

-
+
+ {[1, 2, 3].map((step) => ( +
+ ))} +
+

+ {currentStep === 1 + ? 'Set up your TMS information' + : currentStep === 2 + ? 'Setup your permission' + : 'Setup your payments'} +

+
+
+
{renderStepContent()}
-
+
{currentStep === 1 ? ( - ) : ( - )} {currentStep < 3 ? ( - + ) : ( - + )}
diff --git a/frontend/plugins/tourism_ui/src/modules/tms/constants/formSchema.ts b/frontend/plugins/tourism_ui/src/modules/tms/constants/formSchema.ts index 610bcba467..bb73fa704f 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/constants/formSchema.ts +++ b/frontend/plugins/tourism_ui/src/modules/tms/constants/formSchema.ts @@ -1,20 +1,20 @@ import { z } from 'zod'; export const TmsFormSchema = z.object({ - name: z.string().min(1, 'Tour name is required'), + name: z.string().min(1, 'Name is required'), color: z.string().min(1, 'Color is required'), logo: z.string().optional(), favIcon: z.string().optional(), - generalManeger: z.string().optional(), - manegers: z.array(z.string()).optional(), + generalManager: z.array(z.string()).optional(), + managers: z.array(z.string()).optional(), payment: z.string().optional(), token: z.string().optional(), otherPayments: z .array( z.object({ - type: z.string().optional(), - title: z.string().optional(), - icon: z.string().optional(), + type: z.string().min(1, 'Type is required'), + title: z.string().min(1, 'Title is required'), + icon: z.string().min(1, 'Icon is required'), config: z.string().optional(), }), ) diff --git a/frontend/plugins/tourism_ui/src/modules/tms/graphql/mutation.ts b/frontend/plugins/tourism_ui/src/modules/tms/graphql/mutation.ts index c6c5ffb8b7..91efacb913 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/graphql/mutation.ts +++ b/frontend/plugins/tourism_ui/src/modules/tms/graphql/mutation.ts @@ -1,61 +1,67 @@ import { gql } from '@apollo/client'; -export const CREATE_BRANCH_BRANCH = gql` - mutation bmsBranchAdd( +export const CREATE_BRANCH = gql` + mutation BmsBranchAdd( $name: String $description: String - $erxesAppToken: String - $user1Ids: [String] - $user2Ids: [String] + $generalManagerIds: [String] + $managerIds: [String] $paymentIds: [String] $paymentTypes: [JSON] - $uiOptions: JSON + $departmentId: String + $token: String + $erxesAppToken: String $permissionConfig: JSON + $uiOptions: JSON ) { bmsBranchAdd( name: $name description: $description - erxesAppToken: $erxesAppToken - user1Ids: $user1Ids - user2Ids: $user2Ids + generalManagerIds: $generalManagerIds + managerIds: $managerIds paymentIds: $paymentIds paymentTypes: $paymentTypes - uiOptions: $uiOptions + departmentId: $departmentId + token: $token + erxesAppToken: $erxesAppToken permissionConfig: $permissionConfig + uiOptions: $uiOptions ) { _id - name - description createdAt - token - erxesAppToken - user1Ids - user2Ids - paymentIds - paymentTypes + userId user { _id + username + email details { avatar fullName - __typename + shortName } - __typename } - uiOptions + name + description + generalManagerIds + managerIds + paymentIds + paymentTypes + departmentId + token + erxesAppToken permissionConfig - __typename + uiOptions } } `; -export const EDIT_BRANCH_LIST = gql` +export const EDIT_BRANCH = gql` mutation BmsBranchEdit( $id: String $name: String $description: String - $user1Ids: [String] - $user2Ids: [String] + $generalManagerIds: [String] + $managerIds: [String] $paymentIds: [String] $paymentTypes: [JSON] $departmentId: String @@ -68,8 +74,8 @@ export const EDIT_BRANCH_LIST = gql` _id: $id name: $name description: $description - user1Ids: $user1Ids - user2Ids: $user2Ids + generalManagerIds: $generalManagerIds + managerIds: $managerIds paymentIds: $paymentIds paymentTypes: $paymentTypes departmentId: $departmentId @@ -83,17 +89,18 @@ export const EDIT_BRANCH_LIST = gql` userId user { _id + username + email details { avatar fullName - __typename + shortName } - __typename } name description - user1Ids - user2Ids + generalManagerIds + managerIds paymentIds paymentTypes departmentId diff --git a/frontend/plugins/tourism_ui/src/modules/tms/graphql/queries.ts b/frontend/plugins/tourism_ui/src/modules/tms/graphql/queries.ts index 345e93a400..7dcd1ea165 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/graphql/queries.ts +++ b/frontend/plugins/tourism_ui/src/modules/tms/graphql/queries.ts @@ -1,32 +1,84 @@ import { gql } from '@apollo/client'; export const GET_BRANCH_LIST = gql` - query bmsBranchList($sortField: String, $sortDirection: Int) { - bmsBranchList(sortField: $sortField, sortDirection: $sortDirection) { + query BmsBranchList( + $limit: Int + $cursor: String + $cursorMode: CURSOR_MODE + $direction: CURSOR_DIRECTION + $orderBy: JSON + ) { + bmsBranchList( + limit: $limit + cursor: $cursor + cursorMode: $cursorMode + direction: $direction + orderBy: $orderBy + ) { + list { + _id + createdAt + userId + user { + _id + username + email + details { + avatar + fullName + shortName + } + } + name + description + generalManagerIds + managerIds + paymentIds + paymentTypes + departmentId + token + erxesAppToken + permissionConfig + uiOptions + } + totalCount + pageInfo { + hasNextPage + hasPreviousPage + startCursor + endCursor + } + } + } +`; + +export const BRANCH_LIST_DETAIL = gql` + query BmsBranchDetail($id: String!) { + bmsBranchDetail(_id: $id) { _id - name - description createdAt - token - erxesAppToken - user1Ids - user2Ids - paymentIds - paymentTypes + userId user { _id + username + email details { avatar fullName - __typename + shortName } - __typename } - uiOptions + name + description + generalManagerIds + managerIds + paymentIds + paymentTypes + departmentId + token + erxesAppToken permissionConfig - __typename + uiOptions } } `; - - diff --git a/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchDetail.ts b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchDetail.ts new file mode 100644 index 0000000000..3d0571c746 --- /dev/null +++ b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchDetail.ts @@ -0,0 +1,26 @@ +import { useQuery } from '@apollo/client'; +import { BRANCH_LIST_DETAIL } from '../graphql/queries'; +import { IBranch } from '../types/branch'; + +interface BranchDetailResponse { + bmsBranchDetail: IBranch; +} + +interface BranchDetailVariables { + id: string; +} + +export const useBranchDetail = (variables: BranchDetailVariables) => { + const { data, loading, error } = useQuery< + BranchDetailResponse, + BranchDetailVariables + >(BRANCH_LIST_DETAIL, { + variables, + skip: !variables.id, + fetchPolicy: 'cache-and-network', + }); + + const branchDetail = data?.bmsBranchDetail; + + return { branchDetail, loading, error }; +}; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchDuplicate.ts b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchDuplicate.ts new file mode 100644 index 0000000000..47993a2ced --- /dev/null +++ b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchDuplicate.ts @@ -0,0 +1,67 @@ +import { useMutation } from '@apollo/client'; +import { CREATE_BRANCH } from '../graphql/mutation'; +import { GET_BRANCH_LIST } from '../graphql/queries'; +import { IBranch } from '../types/branch'; + +interface DuplicateBranchResponse { + bmsBranchAdd: IBranch; +} + +interface IPaymentType { + id: string; + name: string; +} + +interface IPermissionConfig { + permission: string; + enabled: boolean; +} + +export interface IDuplicateBranchVariables { + name: string; + description?: string; + generalManagerIds?: string[]; + managerIds?: string[]; + paymentIds?: string[]; + paymentTypes?: IPaymentType[]; + departmentId?: string; + token?: string; + erxesAppToken?: string; + permissionConfig?: IPermissionConfig[]; + uiOptions?: { + logo?: string; + favIcon?: string; + colors?: { + primary?: string; + }; + }; +} + +export const useBranchDuplicate = () => { + const [duplicateBranchMutation, { loading, error }] = useMutation< + DuplicateBranchResponse, + IDuplicateBranchVariables + >(CREATE_BRANCH, { + refetchQueries: [ + { + query: GET_BRANCH_LIST, + variables: { + limit: 10, + }, + }, + ], + onError: (error) => { + console.error('Error duplicating branch:', error); + }, + }); + + const duplicateBranch = (options: { + variables: IDuplicateBranchVariables; + onCompleted?: (data: DuplicateBranchResponse) => void; + onError?: (error: any) => void; + }) => { + return duplicateBranchMutation(options); + }; + + return { duplicateBranch, loading, error }; +}; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchEdit.ts b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchEdit.ts index 26a4e82332..7b7318fcb7 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchEdit.ts +++ b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchEdit.ts @@ -1,16 +1,63 @@ -import { useQuery } from '@apollo/client'; -import { EDIT_BRANCH_LIST } from '../graphql/mutation'; +import { useMutation } from '@apollo/client'; +import { EDIT_BRANCH } from '../graphql/mutation'; +import { GET_BRANCH_LIST } from '../graphql/queries'; import { IBranch } from '../types/branch'; -interface BranchListResponse { - bmsBranchList: IBranch[]; +interface EditBranchResponse { + bmsBranchEdit: IBranch; +} + +export interface IEditBranchVariables { + id: string; + name?: string; + description?: string; + generalManagerIds?: string[]; + managerIds?: string[]; + paymentIds?: string[]; + paymentTypes?: any[]; + departmentId?: string; + token?: string; + erxesAppToken?: string; + permissionConfig?: any[]; + uiOptions?: { + logo?: string; + favIcon?: string; + colors?: { + primary?: string; + }; + }; } export const useBranchEdit = () => { - const { data, loading, error } = - useQuery(EDIT_BRANCH_LIST); + const [editBranchMutation, { loading, error }] = useMutation< + EditBranchResponse, + IEditBranchVariables + >(EDIT_BRANCH, { + refetchQueries: [ + { + query: GET_BRANCH_LIST, + variables: { + limit: 10, + }, + }, + ], + onError: (error) => { + // Replace with proper error logging service + console.error('Branch edit failed:', error); + }, + }); - const list = data?.bmsBranchList || []; + const editBranch = (options: { + variables: IEditBranchVariables; + onCompleted?: (data: EditBranchResponse) => void; + onError?: (error: any) => void; + }) => { + return editBranchMutation(options); + }; - return { list, loading, error }; + return { + editBranch, + loading, + error, + }; }; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchList.ts b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchList.ts index fc48398103..f431d37b28 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchList.ts +++ b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchList.ts @@ -2,15 +2,35 @@ import { useQuery } from '@apollo/client'; import { GET_BRANCH_LIST } from '../graphql/queries'; import { IBranch } from '../types/branch'; +interface PageInfo { + hasNextPage: boolean; + hasPreviousPage: boolean; + startCursor: string; + endCursor: string; +} + interface BranchListResponse { - bmsBranchList: IBranch[]; + bmsBranchList: { + list: IBranch[]; + totalCount: number; + pageInfo: PageInfo; + }; } -export const useBranchList = () => { - const { data, loading, error } = - useQuery(GET_BRANCH_LIST); +export const useBranchList = (limit = 10) => { + const { data, loading, error, refetch } = useQuery( + GET_BRANCH_LIST, + { + variables: { + limit, + }, + fetchPolicy: 'network-only', + }, + ); - const list = data?.bmsBranchList || []; + const list = data?.bmsBranchList?.list || []; + const totalCount = data?.bmsBranchList?.totalCount || 0; + const pageInfo = data?.bmsBranchList?.pageInfo; - return { list, loading, error }; + return { list, totalCount, pageInfo, loading, error, refetch }; }; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchRemove.ts b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchRemove.ts index ec4fd4f8af..a19b6ccbb2 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchRemove.ts +++ b/frontend/plugins/tourism_ui/src/modules/tms/hooks/BranchRemove.ts @@ -4,11 +4,18 @@ import { GET_BRANCH_LIST } from '../graphql/queries'; import { IBranchRemoveResponse, IBranchRemoveVariables } from '../types/branch'; export const useBranchRemove = () => { - const [removeBranch, { loading, error }] = useMutation< + const [removeBranch, { loading }] = useMutation< IBranchRemoveResponse, IBranchRemoveVariables >(REMOVE_BRANCH, { - refetchQueries: [{ query: GET_BRANCH_LIST }], + refetchQueries: [ + { + query: GET_BRANCH_LIST, + variables: { + limit: 10, + }, + }, + ], onError: (error) => { console.error('Error removing branch:', error); }, @@ -21,10 +28,10 @@ export const useBranchRemove = () => { }); return response.data?.bmsBranchRemove || false; - } catch (error) { + } catch { return false; } }; - return { removeBranchById, loading, error }; + return { removeBranchById, loading }; }; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/hooks/CreateBranch.ts b/frontend/plugins/tourism_ui/src/modules/tms/hooks/CreateBranch.ts index 90ab79863f..461663a539 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/hooks/CreateBranch.ts +++ b/frontend/plugins/tourism_ui/src/modules/tms/hooks/CreateBranch.ts @@ -1,5 +1,6 @@ import { useMutation } from '@apollo/client'; -import { CREATE_BRANCH_BRANCH } from '../graphql/mutation'; +import { CREATE_BRANCH } from '../graphql/mutation'; +import { GET_BRANCH_LIST } from '../graphql/queries'; import { IBranch } from '../types/branch'; interface CreateBranchResponse { @@ -9,22 +10,42 @@ interface CreateBranchResponse { export interface ICreateBranchVariables { name: string; description?: string; - user1Ids?: string[]; - user2Ids?: string[]; + generalManagerIds?: string[]; + managerIds?: string[]; paymentIds?: string[]; - paymentTypes?: any[]; departmentId?: string; token?: string; erxesAppToken?: string; - permissionConfig?: any; - uiOptions?: any; + permissionConfig?: { + _id?: string; + type: string; + title: string; + icon: string; + config?: string; + }[]; + uiOptions?: { + logo?: string; + favIcon?: string; + colors?: { + primary?: string; + }; + }; } export const useCreateBranch = () => { const [createBranchMutation, { loading, error }] = useMutation< CreateBranchResponse, ICreateBranchVariables - >(CREATE_BRANCH_BRANCH); + >(CREATE_BRANCH, { + refetchQueries: [ + { + query: GET_BRANCH_LIST, + variables: { + limit: 10, + }, + }, + ], + }); const createBranch = (options: { variables: ICreateBranchVariables; @@ -34,5 +55,9 @@ export const useCreateBranch = () => { return createBranchMutation(options); }; - return { createBranch, loading, error }; + return { + createBranch, + loading, + error, + }; }; diff --git a/frontend/plugins/tourism_ui/src/modules/tms/states/tmsInformationFieldsAtoms.ts b/frontend/plugins/tourism_ui/src/modules/tms/states/tmsInformationFieldsAtoms.ts new file mode 100644 index 0000000000..d236ab84c2 --- /dev/null +++ b/frontend/plugins/tourism_ui/src/modules/tms/states/tmsInformationFieldsAtoms.ts @@ -0,0 +1,4 @@ +import { atom } from 'jotai'; + +export const currentStepAtom = atom(1); + diff --git a/frontend/plugins/tourism_ui/src/modules/tms/types/branch.ts b/frontend/plugins/tourism_ui/src/modules/tms/types/branch.ts index fa7478ffb6..0e69e32d44 100644 --- a/frontend/plugins/tourism_ui/src/modules/tms/types/branch.ts +++ b/frontend/plugins/tourism_ui/src/modules/tms/types/branch.ts @@ -17,6 +17,8 @@ export interface IBranch { erxesAppToken: string; user1Ids: string[]; user2Ids: string[]; + generalManagerIds: string[]; + managerIds: string[]; paymentIds: string[]; paymentTypes: string[]; user: IBranchUser; diff --git a/frontend/plugins/tourism_ui/src/pages/pms/IndexPage.tsx b/frontend/plugins/tourism_ui/src/pages/pms/IndexPage.tsx index 7458494e81..3a87a99f88 100644 --- a/frontend/plugins/tourism_ui/src/pages/pms/IndexPage.tsx +++ b/frontend/plugins/tourism_ui/src/pages/pms/IndexPage.tsx @@ -2,7 +2,7 @@ import { IconBox, IconSettings } from '@tabler/icons-react'; import { Breadcrumb, Button, Separator } from 'erxes-ui'; import { PageHeader } from 'ui-modules'; import { Link } from 'react-router-dom'; -import { PmsCreateSheet } from '@/pms/components/CreatePmsSheet'; +import { PmsCreateSheet } from '~/modules/pms/components/CreatePmsSheet'; export const IndexPage = () => { return ( diff --git a/frontend/plugins/tourism_ui/src/pages/tms/IndexPage.tsx b/frontend/plugins/tourism_ui/src/pages/tms/IndexPage.tsx index 963c4d6c7a..92588b9592 100644 --- a/frontend/plugins/tourism_ui/src/pages/tms/IndexPage.tsx +++ b/frontend/plugins/tourism_ui/src/pages/tms/IndexPage.tsx @@ -2,7 +2,7 @@ import { IconBox, IconSettings } from '@tabler/icons-react'; import { Breadcrumb, Button, Separator } from 'erxes-ui'; import { PageHeader } from 'ui-modules'; import { Link } from 'react-router-dom'; -import { TmsCreateSheet } from '@/tms/components/CreateTmsSheet'; +import { TmsCreateSheet } from '~/modules/tms/components/CreateTmsSheet'; import { BranchList } from '@/tms/components/BranchList'; export const IndexPage = () => { diff --git a/frontend/plugins/tourism_ui/src/pages/tms/PreviewPage.tsx b/frontend/plugins/tourism_ui/src/pages/tms/PreviewPage.tsx new file mode 100644 index 0000000000..6cd3a2158b --- /dev/null +++ b/frontend/plugins/tourism_ui/src/pages/tms/PreviewPage.tsx @@ -0,0 +1,105 @@ +import { readImage } from 'erxes-ui/utils/core'; +import { useEffect, useState } from 'react'; +import { + Input, + Select, +} from 'erxes-ui'; + +const PreviewPage = () => { + const [urlParams, setUrlParams] = useState(null); + + useEffect(() => { + if (typeof window !== 'undefined') { + setUrlParams(new URLSearchParams(window.location.search)); + } + }, []); + + const tourName = urlParams?.get('name') || 'Таны тур оператор'; + const themeColor = urlParams?.get('color') || '#4F46E5'; + const logoParam = urlParams?.get('logo'); + const logoUrl = logoParam ? readImage(logoParam) : 'https://placehold.co/150x150'; + + return ( +
+
+
+
+ Company Logo + (e.currentTarget.src = 'https://placehold.co/150x150') + } + /> +
+

+ Sign in to your account +

+

+ Enter your email and password below to access your account. +

+
+ + + +
+ + +
+
+
+ +

+ Forgot password? +

+
+ +
+ +
+
+
+
+ ); +}; + +export default PreviewPage; From b05a318e736c5d396633ae09487c28487e15ab3e Mon Sep 17 00:00:00 2001 From: honilee Date: Tue, 29 Jul 2025 18:41:00 +0800 Subject: [PATCH 2/2] pms branch update --- .../modules/bms/graphql/schemas/bmsbranch.ts | 1 - .../modules/pms/components/pmsBranchList.tsx | 10 +++ .../pmsFormFields/admins/admins.tsx | 68 ++++++---------- .../pmsFormFields/appearance/appearance.tsx | 71 +++++++++++------ .../pipelineConfig/pipelineConfig.tsx | 34 ++------ .../{ => pmsSheet}/CreatePmsForm.tsx | 4 +- .../{ => pmsSheet}/CreatePmsFormContent.tsx | 14 ++-- .../{ => pmsSheet}/CreatePmsSheet.tsx | 14 +++- .../modules/pms/components/ui/branchCard.tsx | 79 +++++++++++++++++++ .../src/modules/tms/components/ActionMenu.tsx | 71 ++++++++--------- .../src/modules/tms/components/BranchCard.tsx | 5 +- .../src/modules/tms/components/BranchList.tsx | 4 +- .../modules/tms/components/CreateTmsSheet.tsx | 14 ++-- .../modules/tms/components/TmsFormFields.tsx | 14 +--- .../tourism_ui/src/pages/pms/IndexPage.tsx | 5 +- .../tourism_ui/src/pages/tms/PreviewPage.tsx | 10 +-- 16 files changed, 242 insertions(+), 176 deletions(-) create mode 100644 frontend/plugins/tourism_ui/src/modules/pms/components/pmsBranchList.tsx rename frontend/plugins/tourism_ui/src/modules/pms/components/{ => pmsSheet}/CreatePmsForm.tsx (97%) rename frontend/plugins/tourism_ui/src/modules/pms/components/{ => pmsSheet}/CreatePmsFormContent.tsx (64%) rename frontend/plugins/tourism_ui/src/modules/pms/components/{ => pmsSheet}/CreatePmsSheet.tsx (89%) create mode 100644 frontend/plugins/tourism_ui/src/modules/pms/components/ui/branchCard.tsx diff --git a/backend/plugins/tourism_api/src/modules/bms/graphql/schemas/bmsbranch.ts b/backend/plugins/tourism_api/src/modules/bms/graphql/schemas/bmsbranch.ts index ecacebc0bd..82799ff719 100644 --- a/backend/plugins/tourism_api/src/modules/bms/graphql/schemas/bmsbranch.ts +++ b/backend/plugins/tourism_api/src/modules/bms/graphql/schemas/bmsbranch.ts @@ -15,7 +15,6 @@ const commonFields = ` `; export const types = ` - extend type Customer @key(fields: "_id") { _id: String! @external } diff --git a/frontend/plugins/tourism_ui/src/modules/pms/components/pmsBranchList.tsx b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsBranchList.tsx new file mode 100644 index 0000000000..8f66f2b944 --- /dev/null +++ b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsBranchList.tsx @@ -0,0 +1,10 @@ +import BranchCard from '~/modules/pms/components/ui/branchCard'; + +const PmsBranchList = () => { + return ( +
+ +
+ ); +}; +export default PmsBranchList; diff --git a/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/admins/admins.tsx b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/admins/admins.tsx index 552dcdeb75..d855df1727 100644 --- a/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/admins/admins.tsx +++ b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/admins/admins.tsx @@ -4,21 +4,9 @@ import PmsFormFieldsLayout from '../PmsFormFieldsLayout'; import Heading from '../../ui/heading'; import { IconPlus, IconTrash } from '@tabler/icons-react'; import { PmsBranchFormType } from '@/pms/constants/formSchema'; +import { SelectMember } from 'ui-modules'; const Admins = ({ control }: { control: Control }) => { - const options: MultiSelectOption[] = [ - { value: 'apple', label: 'Apple' }, - { value: 'banana', label: 'Banana' }, - { value: 'orange', label: 'Orange' }, - { value: 'grape', label: 'Grape' }, - { value: 'strawberry', label: 'Strawberry' }, - { value: 'watermelon', label: 'Watermelon' }, - { value: 'kiwi', label: 'Kiwi' }, - { value: 'mango', label: 'Mango' }, - { value: 'pineapple', label: 'Pineapple' }, - { value: 'peach', label: 'Peach' }, - ]; - return ( Admins @@ -29,12 +17,10 @@ const Admins = ({ control }: { control: Control }) => { General Managers - console.log(values)} - className="placeholder:text-accent-foreground/70" + @@ -48,12 +34,10 @@ const Admins = ({ control }: { control: Control }) => { Managers - console.log(values)} - className="placeholder:text-accent-foreground/70" + @@ -67,12 +51,10 @@ const Admins = ({ control }: { control: Control }) => { Reservation Managers - console.log(values)} - className="placeholder:text-accent-foreground/70" + @@ -86,12 +68,10 @@ const Admins = ({ control }: { control: Control }) => { Reception - console.log(values)} - className="placeholder:text-accent-foreground/70" + @@ -105,21 +85,19 @@ const Admins = ({ control }: { control: Control }) => { Housekeeper - console.log(values)} - className="placeholder:text-accent-foreground/70" + )} /> - + */} ); }; diff --git a/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/appearance/appearance.tsx b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/appearance/appearance.tsx index 522df33509..b7636a1f90 100644 --- a/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/appearance/appearance.tsx +++ b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/appearance/appearance.tsx @@ -1,8 +1,8 @@ import { Control } from 'react-hook-form'; -import { Button, Form, Input, Upload } from 'erxes-ui'; +import { Button, ColorPicker, Form, Input, Upload } from 'erxes-ui'; import PmsFormFieldsLayout from '../PmsFormFieldsLayout'; import Heading from '../../ui/heading'; -import { IconPlus, IconTrash, IconUpload } from '@tabler/icons-react'; +import { IconTrash, IconUpload, IconX } from '@tabler/icons-react'; import { PmsBranchFormType } from '@/pms/constants/formSchema'; const Appearance = ({ control }: { control: Control }) => { @@ -20,20 +20,44 @@ const Appearance = ({ control }: { control: Control }) => { Image can be shown on the top of the post also{' '} - - - - - - - Max size: 15MB, File type: PNG - - + + {field.value ? ( +
+
+ +
+ +
+ ) : ( + <> + + + + + + Max size: 15MB, File type: PNG + + + + )}
@@ -51,16 +75,11 @@ const Appearance = ({ control }: { control: Control }) => { Color -
- -
+
diff --git a/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/pipelineConfig/pipelineConfig.tsx b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/pipelineConfig/pipelineConfig.tsx index 0b1aab4aed..0e1494a14c 100644 --- a/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/pipelineConfig/pipelineConfig.tsx +++ b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsFormFields/pipelineConfig/pipelineConfig.tsx @@ -10,6 +10,7 @@ import PmsFormFieldsLayout from '../PmsFormFieldsLayout'; import { IconPlus } from '@tabler/icons-react'; import { PmsBranchFormType } from '@/pms/constants/formSchema'; import Heading from '../../ui/heading'; +import { SelectCategory, SelectProduct } from 'ui-modules'; const PipelineConfig = ({ control, @@ -118,28 +119,15 @@ const PipelineConfig = ({ render={({ field }) => ( - + )} /> - Extra product categories ( - console.log(values)} - className="placeholder:text-accent-foreground/70" + )} /> - ); }; diff --git a/frontend/plugins/tourism_ui/src/modules/pms/components/CreatePmsForm.tsx b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsSheet/CreatePmsForm.tsx similarity index 97% rename from frontend/plugins/tourism_ui/src/modules/pms/components/CreatePmsForm.tsx rename to frontend/plugins/tourism_ui/src/modules/pms/components/pmsSheet/CreatePmsForm.tsx index 09ad460b85..131bf40b8a 100644 --- a/frontend/plugins/tourism_ui/src/modules/pms/components/CreatePmsForm.tsx +++ b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsSheet/CreatePmsForm.tsx @@ -2,11 +2,11 @@ import { Form, useToast } from 'erxes-ui'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { ApolloError } from '@apollo/client'; -import { usePmsCreateBranch } from '../hooks/usePmsCreateBranch'; +import { usePmsCreateBranch } from '../../hooks/usePmsCreateBranch'; import { PmsBranchFormSchema, PmsBranchFormType, -} from '../constants/formSchema'; +} from '../../constants/formSchema'; import { CreatePmsSheetContentLayout, PmsCreateSheetFooter, diff --git a/frontend/plugins/tourism_ui/src/modules/pms/components/CreatePmsFormContent.tsx b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsSheet/CreatePmsFormContent.tsx similarity index 64% rename from frontend/plugins/tourism_ui/src/modules/pms/components/CreatePmsFormContent.tsx rename to frontend/plugins/tourism_ui/src/modules/pms/components/pmsSheet/CreatePmsFormContent.tsx index be8426c2fb..9e444719fd 100644 --- a/frontend/plugins/tourism_ui/src/modules/pms/components/CreatePmsFormContent.tsx +++ b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsSheet/CreatePmsFormContent.tsx @@ -1,12 +1,12 @@ import { UseFormReturn } from 'react-hook-form'; -import { PmsBranchFormType } from '../constants/formSchema'; +import { PmsBranchFormType } from '../../constants/formSchema'; import { useAtomValue } from 'jotai'; -import { stepState } from '../states/stepStates'; -import General from './pmsFormFields/general/General'; -import Payments from './pmsFormFields/payments/payments'; -import Admins from './pmsFormFields/admins/admins'; -import Appearance from './pmsFormFields/appearance/appearance'; -import PipelineConfig from './pmsFormFields/pipelineConfig/pipelineConfig'; +import { stepState } from '../../states/stepStates'; +import General from '../pmsFormFields/general/General'; +import Payments from '../pmsFormFields/payments/payments'; +import Admins from '../pmsFormFields/admins/admins'; +import Appearance from '../pmsFormFields/appearance/appearance'; +import PipelineConfig from '../pmsFormFields/pipelineConfig/pipelineConfig'; export const CreatePmsFormContent = ({ form, diff --git a/frontend/plugins/tourism_ui/src/modules/pms/components/CreatePmsSheet.tsx b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsSheet/CreatePmsSheet.tsx similarity index 89% rename from frontend/plugins/tourism_ui/src/modules/pms/components/CreatePmsSheet.tsx rename to frontend/plugins/tourism_ui/src/modules/pms/components/pmsSheet/CreatePmsSheet.tsx index ca2fb02726..a4ad65ab59 100644 --- a/frontend/plugins/tourism_ui/src/modules/pms/components/CreatePmsSheet.tsx +++ b/frontend/plugins/tourism_ui/src/modules/pms/components/pmsSheet/CreatePmsSheet.tsx @@ -2,16 +2,22 @@ import { IconPlus } from '@tabler/icons-react'; import { Button, Sheet, Stepper } from 'erxes-ui'; import { PropsWithChildren, useState } from 'react'; import CreatePmsForm from './CreatePmsForm'; -import { steps } from '../constants/steps.constants'; +import { steps } from '../../constants/steps.constants'; import { useAtom, useSetAtom } from 'jotai'; -import { stepState } from '../states/stepStates'; -import { sheetOpenState } from '../states/sheetStates'; +import { stepState } from '../../states/stepStates'; +import { sheetOpenState } from '../../states/sheetStates'; export const PmsCreateSheet = () => { const [open, setOpen] = useAtom(sheetOpenState); + const setCurrentStep = useSetAtom(stepState); + + const handleOpenChange = (openState: boolean) => { + setOpen(openState); + setCurrentStep(1); + }; return ( - +
) : ( diff --git a/frontend/plugins/tourism_ui/src/pages/pms/IndexPage.tsx b/frontend/plugins/tourism_ui/src/pages/pms/IndexPage.tsx index 3a87a99f88..e2f2857cfb 100644 --- a/frontend/plugins/tourism_ui/src/pages/pms/IndexPage.tsx +++ b/frontend/plugins/tourism_ui/src/pages/pms/IndexPage.tsx @@ -2,7 +2,8 @@ import { IconBox, IconSettings } from '@tabler/icons-react'; import { Breadcrumb, Button, Separator } from 'erxes-ui'; import { PageHeader } from 'ui-modules'; import { Link } from 'react-router-dom'; -import { PmsCreateSheet } from '~/modules/pms/components/CreatePmsSheet'; +import { PmsCreateSheet } from '~/modules/pms/components/pmsSheet/CreatePmsSheet'; +import PmsBranchList from '~/modules/pms/components/pmsBranchList'; export const IndexPage = () => { return ( @@ -34,6 +35,8 @@ export const IndexPage = () => { + +
); }; diff --git a/frontend/plugins/tourism_ui/src/pages/tms/PreviewPage.tsx b/frontend/plugins/tourism_ui/src/pages/tms/PreviewPage.tsx index 6cd3a2158b..468c76866a 100644 --- a/frontend/plugins/tourism_ui/src/pages/tms/PreviewPage.tsx +++ b/frontend/plugins/tourism_ui/src/pages/tms/PreviewPage.tsx @@ -1,9 +1,6 @@ import { readImage } from 'erxes-ui/utils/core'; import { useEffect, useState } from 'react'; -import { - Input, - Select, -} from 'erxes-ui'; +import { Input, Select } from 'erxes-ui'; const PreviewPage = () => { const [urlParams, setUrlParams] = useState(null); @@ -17,7 +14,9 @@ const PreviewPage = () => { const tourName = urlParams?.get('name') || 'Таны тур оператор'; const themeColor = urlParams?.get('color') || '#4F46E5'; const logoParam = urlParams?.get('logo'); - const logoUrl = logoParam ? readImage(logoParam) : 'https://placehold.co/150x150'; + const logoUrl = logoParam + ? readImage(logoParam) + : 'https://placehold.co/150x150'; return (
@@ -40,7 +39,6 @@ const PreviewPage = () => { Enter your email and password below to access your account.

-