From 24e127f41106c9e2494e128d00cdd9cfbdc3d309 Mon Sep 17 00:00:00 2001 From: theqi106 Date: Wed, 27 Aug 2025 18:44:11 +0700 Subject: [PATCH] feat: add download example file --- public/Example.xlsx | Bin 0 -> 9362 bytes .../_components/AddEmployeeModal.tsx | 44 +++++++++++------- 2 files changed, 27 insertions(+), 17 deletions(-) create mode 100644 public/Example.xlsx diff --git a/public/Example.xlsx b/public/Example.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f82ceeea0c755441feaa322a76d10845dc9aeb9e GIT binary patch literal 9362 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 OcmN{=`so(null); const [notification, setNotification] = useState<{ isVisible: boolean; employeeName: string }>({ isVisible: false, - employeeName: '' + employeeName: '', }); const { signInAnonymouslyIfNeeded } = useFirebaseAuth(); @@ -88,18 +88,14 @@ const AddEmployeeModal = ({ isOpen, onClose, onRefresh }: AddEmployeeModalProps) // Sau đó thêm employee mới vào group chat console.log('Adding new employee to group chat...'); - await addEmployeeToBusinessGroupChat( - businessId, - newEmployeeId, - newEmployeeName - ); + await addEmployeeToBusinessGroupChat(businessId, newEmployeeId, newEmployeeName); console.log('Business group chat updated successfully'); // Hiển thị thông báo thành công setNotification({ isVisible: true, - employeeName: newEmployeeName + employeeName: newEmployeeName, }); // Tự động ẩn notification sau 5 giây @@ -117,7 +113,8 @@ const AddEmployeeModal = ({ isOpen, onClose, onRefresh }: AddEmployeeModalProps) // Hiển thị cảnh báo nhưng không block việc thêm employee toast({ title: 'Warning', - description: 'Employee added but group chat update failed. You can manually add them later.', + description: + 'Employee added but group chat update failed. You can manually add them later.', variant: 'destructive', }); } @@ -241,19 +238,21 @@ const AddEmployeeModal = ({ isOpen, onClose, onRefresh }: AddEmployeeModalProps)
@@ -285,7 +284,18 @@ const AddEmployeeModal = ({ isOpen, onClose, onRefresh }: AddEmployeeModalProps) {activeTab === 'file' && (
- +
+ + + 📥 Download Example.xlsx + +