@orbe-agro/client-core 5.3.9 → 5.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@ecme/assets/styles/app.css +1 -1
- package/dist/@ecme/assets/styles/components/_input.css +1 -1
- package/dist/@ecme/assets/styles/components/_select.css +1 -1
- package/dist/@ecme/assets/styles/components/_tabs.css +1 -1
- package/dist/@ecme/assets/styles/components/index.css +1 -1
- package/dist/@ecme/assets/styles/tailwind/index.css +1 -1
- package/dist/@ecme/auth/AuthContext.js.map +1 -1
- package/dist/@ecme/auth/AuthProvider.js.map +1 -1
- package/dist/@ecme/components/docs/DemoCard/CardFooter.js.map +1 -1
- package/dist/@ecme/components/docs/DemoCard/DemoCard.js.map +1 -1
- package/dist/@ecme/components/docs/DocumentationNav.js.map +1 -1
- package/dist/@ecme/components/layouts/AuthLayout/AuthLayout.js.map +1 -1
- package/dist/@ecme/components/layouts/PostLoginLayout/PostLoginLayout.js.map +1 -1
- package/dist/@ecme/components/route/AppRoute.js.map +1 -1
- package/dist/@ecme/components/shared/AbbreviateNumber.js.map +1 -1
- package/dist/@ecme/components/shared/Affix.js.map +1 -1
- package/dist/@ecme/components/shared/AutoComplete.js.map +1 -1
- package/dist/@ecme/components/shared/CalendarView.js.map +1 -1
- package/dist/@ecme/components/shared/Chart.js.map +1 -1
- package/dist/@ecme/components/shared/ConfirmDialog.js.map +1 -1
- package/dist/@ecme/components/shared/DataTable.js.map +1 -1
- package/dist/@ecme/components/shared/DebounceInput.js.map +1 -1
- package/dist/@ecme/components/shared/GanttChart/TaskListTable.js.map +1 -1
- package/dist/@ecme/components/shared/GanttChart/getStartEndDateForProject.js.map +1 -1
- package/dist/@ecme/components/shared/GanttChart/tasksPreProcess.js.map +1 -1
- package/dist/@ecme/components/shared/Masonry/breakpoints.js.map +1 -1
- package/dist/@ecme/components/shared/Masonry/useCoulmnsCount.js.map +1 -1
- package/dist/@ecme/components/shared/Masonry/useMasonry.js.map +1 -1
- package/dist/@ecme/components/shared/Masonry/useWindowWidth.js.map +1 -1
- package/dist/@ecme/components/shared/OtpInput.js.map +1 -1
- package/dist/@ecme/components/shared/PasswordInput.js.map +1 -1
- package/dist/@ecme/components/shared/RegionMap.js.map +1 -1
- package/dist/@ecme/components/shared/RichTextEditor/RichTextEditor.js.map +1 -1
- package/dist/@ecme/components/shared/StickyFooter.js.map +1 -1
- package/dist/@ecme/components/shared/StrictModeDroppable.js.map +1 -1
- package/dist/@ecme/components/shared/ToggleDrawer.js.map +1 -1
- package/dist/@ecme/components/shared/UsersAvatarGroup.js.map +1 -1
- package/dist/@ecme/components/template/HorizontalMenuContent/HorizontalMenuDropdown.js.map +1 -1
- package/dist/@ecme/components/template/HorizontalMenuContent/HorizontalMenuDropdownContent.js.map +1 -1
- package/dist/@ecme/components/template/HorizontalMenuContent/HorizontalMenuDropdownTrigger.js.map +1 -1
- package/dist/@ecme/components/template/LanguageSelector.js.map +1 -1
- package/dist/@ecme/components/template/MobileNav.js.map +1 -1
- package/dist/@ecme/components/template/Notification/Notification.js.map +1 -1
- package/dist/@ecme/components/template/Search.js.map +1 -1
- package/dist/@ecme/components/template/SideNavToggle.js.map +1 -1
- package/dist/@ecme/components/template/SidePanel/SidePanel.js.map +1 -1
- package/dist/@ecme/components/template/StackedSideNav/StackedSideNav.js.map +1 -1
- package/dist/@ecme/components/template/StackedSideNav/StackedSideNavMini.js.map +1 -1
- package/dist/@ecme/components/template/StackedSideNav/StackedSideNavSecondary.js.map +1 -1
- package/dist/@ecme/components/template/ThemeConfigurator/CopyButton.js.map +1 -1
- package/dist/@ecme/components/template/ThemeConfigurator/DirectionSwitcher.js.map +1 -1
- package/dist/@ecme/components/template/ThemeConfigurator/LayoutSwitcher.js.map +1 -1
- package/dist/@ecme/components/template/ThemeConfigurator/ModeSwitcher.js.map +1 -1
- package/dist/@ecme/components/template/UserProfileDropdown.js.map +1 -1
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js.map +1 -1
- package/dist/@ecme/components/ui/Alert/Alert.js.map +1 -1
- package/dist/@ecme/components/ui/Avatar/Avatar.js.map +1 -1
- package/dist/@ecme/components/ui/Avatar/AvatarGroup.js.map +1 -1
- package/dist/@ecme/components/ui/Button/Button.js.map +1 -1
- package/dist/@ecme/components/ui/Card/Card.js.map +1 -1
- package/dist/@ecme/components/ui/Checkbox/Checkbox.js.map +1 -1
- package/dist/@ecme/components/ui/Checkbox/Group.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/BasePicker.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/Calendar.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/CalendarBase.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/DatePicker.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/DatePickerRange.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/DateTimepicker.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/RangeCalendar.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/tables/DateTable.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/tables/MonthTable.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/tables/YearTable.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/tables/components/Month.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/utils/getDecadeRange.js.map +1 -1
- package/dist/@ecme/components/ui/DatePicker/utils/getMonthDays.js.map +1 -1
- package/dist/@ecme/components/ui/Dialog/Dialog.js.map +1 -1
- package/dist/@ecme/components/ui/Drawer/Drawer.js.map +1 -1
- package/dist/@ecme/components/ui/Dropdown/DropdownItem.js.map +1 -1
- package/dist/@ecme/components/ui/Dropdown/DropdownMenu.js.map +1 -1
- package/dist/@ecme/components/ui/Dropdown/context/menuContext.js.map +1 -1
- package/dist/@ecme/components/ui/Form/FormItem.js.map +1 -1
- package/dist/@ecme/components/ui/Input/Input.js.map +1 -1
- package/dist/@ecme/components/ui/Menu/MenuCollapse.js.map +1 -1
- package/dist/@ecme/components/ui/MenuItem/index.js.map +1 -1
- package/dist/@ecme/components/ui/Notification/Notification.js.map +1 -1
- package/dist/@ecme/components/ui/Pagination/Next.js.map +1 -1
- package/dist/@ecme/components/ui/Pagination/Pagers.js.map +1 -1
- package/dist/@ecme/components/ui/Pagination/Pagination.js.map +1 -1
- package/dist/@ecme/components/ui/Pagination/Prev.js.map +1 -1
- package/dist/@ecme/components/ui/Progress/Circle.js.map +1 -1
- package/dist/@ecme/components/ui/Progress/Progress.js.map +1 -1
- package/dist/@ecme/components/ui/Radio/Group.js.map +1 -1
- package/dist/@ecme/components/ui/Radio/Radio.js.map +1 -1
- package/dist/@ecme/components/ui/Segment/Segment.js.map +1 -1
- package/dist/@ecme/components/ui/Segment/SegmentItem.js.map +1 -1
- package/dist/@ecme/components/ui/Select/Select.js.map +1 -1
- package/dist/@ecme/components/ui/Steps/StepItem.js.map +1 -1
- package/dist/@ecme/components/ui/Steps/Steps.js.map +1 -1
- package/dist/@ecme/components/ui/Switcher/Switcher.js.map +1 -1
- package/dist/@ecme/components/ui/Tabs/TabNav.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/AmPmInput.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/TimeInput.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/TimeInputField.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/TimeInputRange.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/utils/createAmPmHandler.js.map +1 -1
- package/dist/@ecme/components/ui/TimeInput/utils/createTimeHandler.js.map +1 -1
- package/dist/@ecme/components/ui/Tooltip/Arrow.js.map +1 -1
- package/dist/@ecme/components/ui/Tooltip/Tooltip.js.map +1 -1
- package/dist/@ecme/components/ui/Upload/Upload.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useCallbackRef.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useControllableState.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useDidUpdate.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useMergeRef.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useRootClose.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useTimeout.js.map +1 -1
- package/dist/@ecme/components/ui/hooks/useWindowSize.js.map +1 -1
- package/dist/@ecme/components/ui/toast/ToastWrapper.js.map +1 -1
- package/dist/@ecme/components/ui/toast/toast.js.map +1 -1
- package/dist/@ecme/components/ui/utils/chainedFunction.js.map +1 -1
- package/dist/@ecme/components/ui/utils/mapCloneElement.js.map +1 -1
- package/dist/@ecme/components/view/Activity/ActivityAvatar.js.map +1 -1
- package/dist/@ecme/components/view/Activity/ActivityEvent.js.map +1 -1
- package/dist/@ecme/components/view/ChatBox/components/Attachment.js.map +1 -1
- package/dist/@ecme/components/view/ChatBox/components/ChatInput.js.map +1 -1
- package/dist/@ecme/components/view/CreditCardDialog/CreditCardDialog.js.map +1 -1
- package/dist/@ecme/configs/chart.config.js.map +1 -1
- package/dist/@ecme/constants/theme.constant.js +23 -23
- package/dist/@ecme/constants/theme.constant.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/accountsFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/aiFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/authFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/commonFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/customersFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/fileFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/helpCenterFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/ordersFakeApi.js.map +1 -1
- package/dist/@ecme/mock/fakeApi/productsFakeApi.js.map +1 -1
- package/dist/@ecme/services/ApiService.js.map +1 -1
- package/dist/@ecme/services/axios/AxiosRequestIntrceptorConfigCallback.js.map +1 -1
- package/dist/@ecme/store/authStore.js.map +1 -1
- package/dist/@ecme/store/localeStore.js.map +1 -1
- package/dist/@ecme/utils/cookiesStorage.js.map +1 -1
- package/dist/@ecme/utils/hoc/withHeaderItem.js.map +1 -1
- package/dist/@ecme/utils/hooks/useDarkMode.js.map +1 -1
- package/dist/@ecme/utils/hooks/useDirection.js.map +1 -1
- package/dist/@ecme/utils/hooks/useInfiniteScroll.js.map +1 -1
- package/dist/@ecme/utils/hooks/useInterval .js.map +1 -1
- package/dist/@ecme/utils/hooks/useLayoutGap.js.map +1 -1
- package/dist/@ecme/utils/hooks/useLocale.js.map +1 -1
- package/dist/@ecme/utils/hooks/useMenuActive.js.map +1 -1
- package/dist/@ecme/utils/hooks/useRandomBgColor.js.map +1 -1
- package/dist/@ecme/utils/hooks/useResponsive.js.map +1 -1
- package/dist/@ecme/utils/hooks/useScrollTop.js.map +1 -1
- package/dist/@ecme/utils/hooks/useThemeSchema.js.map +1 -1
- package/dist/@ecme/utils/hooks/useTimeOutMessage.js.map +1 -1
- package/dist/@ecme/utils/reorderDragable.js.map +1 -1
- package/dist/@ecme/utils/sortBy.js.map +1 -1
- package/dist/@ecme/utils/wildCardSearch.js.map +1 -1
- package/dist/@ecme/views/auth/ForgotPassword/ForgotPassword.js.map +1 -1
- package/dist/@ecme/views/auth/ForgotPassword/components/ForgotPasswordForm.js.map +1 -1
- package/dist/@ecme/views/auth/OtpVerification/OtpVerification.js.map +1 -1
- package/dist/@ecme/views/auth/OtpVerification/components/OtpVerificationForm.js.map +1 -1
- package/dist/@ecme/views/auth/ResetPassword/ResetPassword.js.map +1 -1
- package/dist/@ecme/views/auth/ResetPassword/components/ResetPasswordForm.js.map +1 -1
- package/dist/@ecme/views/auth/SignIn/components/OauthSignIn.js.map +1 -1
- package/dist/@ecme/views/auth/SignIn/components/SignInForm.js.map +1 -1
- package/dist/@ecme/views/auth/SignUp/components/SignUpForm.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/ActivityLog/ActivityLog.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Pricing/components/PaymentDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Pricing/components/Plans.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsAccessDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsGroups.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsUserAction.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsUserSelected.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/components/RolesPermissionsUserTable.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/RolesPermissions/store/rolePermissionsStore.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/BillingHistory.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingIntegration.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingMobileMenu.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsBilling.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsMenu.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsNotification.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsProfile.js.map +1 -1
- package/dist/@ecme/views/concepts/accounts/Settings/components/SettingsSecurity.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatCustomAction.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatCustomContent.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistory.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistoryItem.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistoryRenameDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatSideNav.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/components/ChatView.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/hooks/useChatSend.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Chat/store/generativeChatStore.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Image/components/Gallery.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Image/components/GeneratorPrompt.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Image/components/ImageDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/ai/Image/store/imageGeneratorStore.js.map +1 -1
- package/dist/@ecme/views/concepts/calendar/Calendar/Calendar.js.map +1 -1
- package/dist/@ecme/views/concepts/calendar/Calendar/components/EventDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/ChatAction.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/ChatBody.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/ChatList.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/ContactInfoDrawer.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/components/NewChat.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/hooks/useChat.js.map +1 -1
- package/dist/@ecme/views/concepts/chat/Chat/store/chatStore.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerCreate/CustomerCreate.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerDetails/ActivitySection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerDetails/BillingSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerDetails/ProfileSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerEdit/CustomerEdit.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerForm/AccountSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerForm/CustomerForm.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerForm/OverviewSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerForm/ProfileImageSection.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/components/CustomerListSelected.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/components/CustomerListTable.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/components/CustomerListTableFilter.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/components/CustomersListTableTools.js.map +1 -1
- package/dist/@ecme/views/concepts/customers/CustomerList/store/customerListStore.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/FileManager.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileDetails.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileItemDropdown.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileManagerDeleteDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileManagerHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileManagerInviteDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/FileManagerRenameDialog.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/components/UploadFile.js.map +1 -1
- package/dist/@ecme/views/concepts/files/FileManager/store/useFileManagerStore.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/Article/components/ArticleAction.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/EditArticle/components/EditArticleFooter.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/EditArticle/components/EditArticleHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/components/ArticleListSearch.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/components/ArticleListSelected.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/components/ArticleListTable.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/components/ArticleTableFilter.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/ManageArticle/store/manageArticleStore.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/SupportHub/components/Article.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/SupportHub/components/ArticleList.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/SupportHub/components/Categories.js.map +1 -1
- package/dist/@ecme/views/concepts/help-center/SupportHub/components/TopSection.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailBody.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailBodyTop.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailDetailAction.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailDetailTitle.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailEditor.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailList.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/components/MailSidebar.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/hooks/useMail.js.map +1 -1
- package/dist/@ecme/views/concepts/mail/Mail/hooks/useMailAction.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderCreate/OrderCreate.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderDetails/components/OrderDetailHeaderExtra.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderEdit/OrderEdit.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderForm/OrderForm.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderForm/components/CustomerDetailSection.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderForm/components/PaymentMethodSection.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderForm/components/ProductSelectSection.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderList/components/OrderListTable.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderList/components/OrderListTableFilter.js.map +1 -1
- package/dist/@ecme/views/concepts/orders/OrderList/components/OrderListTableTools.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductCreate/ProductCreate.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductEdit/ProducEdit.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductForm/ProductForm.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductForm/components/GeneralSection.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductForm/components/ImageSection.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductForm/components/PricingSection.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProducListTableTools.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProductListSearch.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProductListSelected.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProductListTable.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/components/ProductTableFilter.js.map +1 -1
- package/dist/@ecme/views/concepts/products/ProductList/store/productListStore.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Issue/Issue.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Issue/components/IssueBody.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Issue/components/IssueFooter.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Issue/components/IssueHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/ProjectDetails.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsActivity.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsNavigation.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsSetting.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectDetails/components/ProjectDetailsTask.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/components/NewProjectForm.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/components/NewTaskField.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/components/ProjectListContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/components/ProjectListHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/hooks/useProjectList.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ProjectList/store/projectListStore.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/AddNewColumnContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/AddNewMemberContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/AddNewTicketContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/Board.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/BoardCard.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/BoardTitle.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/ScrumBoardHeader.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/ScrumBoard/components/TicketContent.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Tasks/Tasks.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Tasks/components/AddTask.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Tasks/components/TaskList.js.map +1 -1
- package/dist/@ecme/views/concepts/projects/Tasks/components/TasksHeader.js.map +1 -1
- package/dist/@ecme/views/dashboards/AnalyticDashboard/components/AnalyticChart.js.map +1 -1
- package/dist/@ecme/views/dashboards/AnalyticDashboard/components/AnalyticHeader.js.map +1 -1
- package/dist/@ecme/views/dashboards/AnalyticDashboard/components/DeviceSession.js.map +1 -1
- package/dist/@ecme/views/dashboards/AnalyticDashboard/components/Traffic.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/Overview.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/RecentOrder.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/RevenueByChannel.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/SalesTarget.js.map +1 -1
- package/dist/@ecme/views/dashboards/EcommerceDashboard/components/TopProduct.js.map +1 -1
- package/dist/@ecme/views/dashboards/MarketingDashboard/components/AdsPerformance.js.map +1 -1
- package/dist/@ecme/views/dashboards/MarketingDashboard/components/CreateCampaign.js.map +1 -1
- package/dist/@ecme/views/dashboards/MarketingDashboard/components/LeadPerformance.js.map +1 -1
- package/dist/@ecme/views/dashboards/MarketingDashboard/components/RecentCampaign.js.map +1 -1
- package/dist/@ecme/views/dashboards/ProjectDashboard/components/CreateEventDialog.js.map +1 -1
- package/dist/@ecme/views/dashboards/ProjectDashboard/components/CurrentTasks.js.map +1 -1
- package/dist/@ecme/views/dashboards/ProjectDashboard/components/Schedule.js.map +1 -1
- package/dist/@ecme/views/dashboards/ProjectDashboard/components/UpcomingSchedule.js.map +1 -1
- package/dist/@ecme/views/guide/Documentations/components/Layouts.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/CalendarViewDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/ConfirmDialogDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/CustomFormatInputDoc/Simple.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/CustomFormatInputDoc/WithForm.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/DataTableDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/DataTableDoc/Checkable.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/DataTableDoc/Query.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/DebounceInputDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/GanttChartDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/MasonryDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/MasonryDoc/Responsive.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/NumericInputDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/NumericInputDoc/WithForm.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/OtpInputDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/OtpInputDoc/Length.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/PasswordInputDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/PatternInputDoc/Basic.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/PatternInputDoc/WithForm.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/PresetSegmentItemOptionDoc/Example.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/RichTextEditorDoc/CustomConfig.js.map +1 -1
- package/dist/@ecme/views/guide/SharedComponentsDoc/components/RichTextEditorDoc/WithForm.js.map +1 -1
- package/dist/@ecme/views/ui-components/common/Button/ButtonWithIcon.js.map +1 -1
- package/dist/@ecme/views/ui-components/common/Button/Loading.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Calendar/CustomRender.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/DragAndDrop.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Editable.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Expanding.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Filtering.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Group.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/PaginationTable.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Resizable.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/RowSelection.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/Sorting.js.map +1 -1
- package/dist/@ecme/views/ui-components/data-display/Table/SubComponent.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Alert/Closable.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/Closable.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/CloseWithEscBackdrop.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/CustomStyle.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/InternalScroll.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/Size.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Dialog/StaticBackdrop.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/Closable.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/CustomStyle.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/Footer.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/Placement.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Drawer/WidthHeight.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Progress/Dynamic.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/AlertToast.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/Closable.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/CustomClose.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/CustomIcon.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/Duration.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/Notification.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/NotificationType.js.map +1 -1
- package/dist/@ecme/views/ui-components/feedback/Toast/Placement.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Checkbox/Default.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Checkbox/Group.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/DatePicker/Controlled.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/DatePicker/CustomRender.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/DatePicker/DisabledCertainDate.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/AsyncValidation.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/DependentValidation.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/DynamicForm.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/FieldValidation.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/Layout.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/MixedFormControl.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/SchemaValidation.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/FormControl/Sizes.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Input/PasswordVisible.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Radio/Group.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Radio/Vertical.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Segment/Controlled.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Segment/Size.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Select/AsyncOnSearch.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Select/Creatable.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Select/LoadOptionOnExpand.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Switcher/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Switcher/Controlled.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Switcher/Loading.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Upload/AvatarImage.js.map +1 -1
- package/dist/@ecme/views/ui-components/forms/Upload/BeforeUpload.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Charts/DashedLine.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Maps/ChoroplethQuantile.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Maps/ChoroplethQuantize.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Maps/MapChartWithTooltip.js.map +1 -1
- package/dist/@ecme/views/ui-components/graph/Maps/UsaStatesMapWithLabels.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Dropdown/Default.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Menu/CollapsableMenuItem.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Menu/Simple.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Pagination/Basic.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Pagination/Controlled.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Pagination/PageSize.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Steps/Clickable.js.map +1 -1
- package/dist/@ecme/views/ui-components/navigation/Steps/Controlled.js.map +1 -1
- package/dist/@types/@ecme/configs/chart.config.d.ts +2 -0
- package/dist/@types/@ecme/configs/chart.config.d.ts.map +1 -1
- package/dist/@types/base/configs/endpoints.config/centralNfe/centralNfe.d.ts +18 -0
- package/dist/@types/base/configs/endpoints.config/centralNfe/centralNfe.d.ts.map +1 -1
- package/dist/@types/base/configs/endpoints.config/centralNfe/config/vinculoUnidadeMedida.d.ts +20 -0
- package/dist/@types/base/configs/endpoints.config/centralNfe/config/vinculoUnidadeMedida.d.ts.map +1 -0
- package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts +18 -0
- package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts.map +1 -1
- package/dist/@types/base/configs/navigation.config/modules.submenu/centralNfe/submenu.centralNfe.d.ts.map +1 -1
- package/dist/@types/base/services/modules/centralNfe/index.d.ts +2 -0
- package/dist/@types/base/services/modules/centralNfe/index.d.ts.map +1 -1
- package/dist/@types/base/services/modules/centralNfe/vinculoUnidadeMedida/VinculoUnidadeMedidaService.d.ts +5 -0
- package/dist/@types/base/services/modules/centralNfe/vinculoUnidadeMedida/VinculoUnidadeMedidaService.d.ts.map +1 -0
- package/dist/base/assets/styles/init.css +1 -1
- package/dist/base/components/forms/GenericForms/GenericUploadFormSection.js.map +1 -1
- package/dist/base/components/forms/NumberFormVariant/GenericNumberFormSectionPercentage.js.map +1 -1
- package/dist/base/components/shared/AceitarProcessoDialog.js.map +1 -1
- package/dist/base/components/shared/AdicionarHistoricoDialog.js.map +1 -1
- package/dist/base/components/shared/CancelarProcessoDialog.js.map +1 -1
- package/dist/base/components/shared/ConcluirProcessoDialog.js.map +1 -1
- package/dist/base/components/shared/ReabrirProcessoDialog.js.map +1 -1
- package/dist/base/components/shared/RetornarFluxAtendimentoDialog.js.map +1 -1
- package/dist/base/components/shared/TransferirParaAtendenteDialog.js.map +1 -1
- package/dist/base/components/shared/TransferirParaSolicitanteDialog.js.map +1 -1
- package/dist/base/components/shared/TransferirProcessoDialog.js.map +1 -1
- package/dist/base/components/table/ListColumn.js.map +1 -1
- package/dist/base/components/tools/NavFilter.js.map +1 -1
- package/dist/base/configs/endpoints.config/centralNfe/centralNfe.js +5 -3
- package/dist/base/configs/endpoints.config/centralNfe/centralNfe.js.map +1 -1
- package/dist/base/configs/endpoints.config/centralNfe/config/vinculoUnidadeMedida.js +10 -0
- package/dist/base/configs/endpoints.config/centralNfe/config/vinculoUnidadeMedida.js.map +1 -0
- package/dist/base/configs/navigation.config/modules.submenu/centralNfe/submenu.centralNfe.js +10 -0
- package/dist/base/configs/navigation.config/modules.submenu/centralNfe/submenu.centralNfe.js.map +1 -1
- package/dist/base/hooks/flux/useAceitarProcesso.js.map +1 -1
- package/dist/base/hooks/flux/useAdicionarHistorico.js.map +1 -1
- package/dist/base/hooks/flux/useCancelarProcesso.js.map +1 -1
- package/dist/base/hooks/flux/useConcluirProcesso.js.map +1 -1
- package/dist/base/hooks/flux/useReabrirProcesso.js.map +1 -1
- package/dist/base/hooks/flux/useRetornarFluxoAtendimento.js.map +1 -1
- package/dist/base/hooks/flux/useTransferirParaAtendente.js.map +1 -1
- package/dist/base/hooks/flux/useTransferirParaSolicitante.js.map +1 -1
- package/dist/base/hooks/flux/useTransferirProcesso.js.map +1 -1
- package/dist/base/services/modules/centralNfe/index.js +13 -3
- package/dist/base/services/modules/centralNfe/index.js.map +1 -1
- package/dist/base/services/modules/centralNfe/vinculoUnidadeMedida/VinculoUnidadeMedidaService.js +37 -0
- package/dist/base/services/modules/centralNfe/vinculoUnidadeMedida/VinculoUnidadeMedidaService.js.map +1 -0
- package/dist/base/services/query.js.map +1 -1
- package/dist/base/utils/functions/formUtils.js.map +1 -1
- package/dist/base/utils/functions/handleInputChangeUtils.js.map +1 -1
- package/dist/base/utils/functions/stringUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NewChat.js","sources":["../../../../../../../lib/@ecme/views/concepts/chat/Chat/components/NewChat.tsx"],"sourcesContent":["import { useEffect, useState, useMemo } from 'react'\nimport Avatar from '@/components/ui/Avatar'\nimport Button from '@/components/ui/Button'\nimport Dialog from '@/components/ui/Dialog'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport DebounceInput from '@/components/shared/DebounceInput'\nimport classNames from '@/utils/classNames'\nimport { apiGetContacts } from '@/services/ChatService'\nimport { TbSearch, TbCheck } from 'react-icons/tb'\nimport useSWRMutation from 'swr/mutation'\nimport type { GetContactsResponse, UserDetails } from '../types'\n\nasync function getContacts() {\n const data = await apiGetContacts<GetContactsResponse>()\n return data\n}\n\nconst NewChat = () => {\n const [contactListDialog, setContactListDialog] = useState(false)\n const [selectedContact, setSelectedContact] = useState<UserDetails[]>([])\n const [query, setQuery] = useState('')\n\n const { data, trigger: fetchContacts } = useSWRMutation(\n `/api/contacts/`,\n getContacts,\n )\n\n useEffect(() => {\n if (contactListDialog) {\n fetchContacts()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [contactListDialog])\n\n const contacts = useMemo(() => {\n if (data) {\n return data.filter((contact) => {\n if (!query) {\n return true\n }\n\n if (contact.name.toLocaleLowerCase().includes(query)) {\n return true\n }\n\n return false\n })\n }\n }, [data, query])\n\n const handleDialogClose = () => {\n setContactListDialog(false)\n setSelectedContact([])\n }\n\n const handleStartNewChat = () => {\n handleDialogClose()\n }\n\n const handleInputChange = (value: string) => {\n setQuery(value)\n }\n\n const handleSetSelectedContact = (contact: UserDetails) => {\n setSelectedContact((prevSelectedContacts) => {\n const contactExists = prevSelectedContacts.some(\n (c) => c.id === contact.id,\n )\n\n if (contactExists) {\n return prevSelectedContacts.filter((c) => c.id !== contact.id)\n } else {\n return [...prevSelectedContacts, contact]\n }\n })\n }\n\n return (\n <>\n <Button\n block\n variant=\"solid\"\n onClick={() => setContactListDialog(true)}\n >\n New chat\n </Button>\n <Dialog\n isOpen={contactListDialog}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n {contacts && (\n <div>\n <div className=\"text-center mb-6\">\n <h4 className=\"mb-1\">Contact List</h4>\n <p>\n Browse and select contacts to start a\n conversation\n </p>\n </div>\n <DebounceInput\n placeholder=\"Search...\"\n type=\"text\"\n size=\"sm\"\n prefix={<TbSearch className=\"text-lg\" />}\n onChange={(e) => handleInputChange(e.target.value)}\n />\n <div className=\"mt-4\">\n <p className=\"font-semibold uppercase text-xs mb-4\">\n {contacts.length} person available\n </p>\n <div className=\"mb-6\">\n <ScrollBar\n className={classNames(\n 'overflow-y-auto h-80',\n )}\n >\n <div className=\"h-full pr-3 flex flex-col gap-2\">\n {contacts.map((contact) => (\n <div\n key={contact.id}\n className={classNames(\n 'py-3 px-3 rounded-lg flex items-center justify-between cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700',\n selectedContact.some(\n (item) =>\n item.id ===\n contact.id,\n ) &&\n 'bg-gray-100 dark:bg-gray-700',\n )}\n role=\"button\"\n onClick={() =>\n handleSetSelectedContact(\n contact,\n )\n }\n >\n <div className=\"flex items-center gap-2\">\n <Avatar\n shape=\"circle\"\n src={contact.img}\n />\n <div>\n <p className=\"heading-text font-bold\">\n {contact.name}\n </p>\n <p>{contact.email}</p>\n </div>\n </div>\n {selectedContact.some(\n (item) =>\n item.id === contact.id,\n ) && (\n <TbCheck className=\"text-2xl text-primary\" />\n )}\n </div>\n ))}\n </div>\n </ScrollBar>\n </div>\n <Button\n block\n variant=\"solid\"\n onClick={handleStartNewChat}\n >\n {selectedContact.length > 1\n ? 'Group Message'\n : 'Message'}\n </Button>\n </div>\n </div>\n )}\n </Dialog>\n </>\n )\n}\n\nexport default NewChat\n"],"names":["getContacts","apiGetContacts","NewChat","contactListDialog","setContactListDialog","useState","selectedContact","setSelectedContact","query","setQuery","data","fetchContacts","useSWRMutation","useEffect","contacts","useMemo","contact","handleDialogClose","handleStartNewChat","handleInputChange","value","handleSetSelectedContact","prevSelectedContacts","c","jsxs","Fragment","jsx","Button","Dialog","DebounceInput","TbSearch","ScrollBar","classNames","item","Avatar","TbCheck"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NewChat.js","sources":["../../../../../../../lib/@ecme/views/concepts/chat/Chat/components/NewChat.tsx"],"sourcesContent":["import { useEffect, useState, useMemo } from 'react'\nimport Avatar from '@/components/ui/Avatar'\nimport Button from '@/components/ui/Button'\nimport Dialog from '@/components/ui/Dialog'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport DebounceInput from '@/components/shared/DebounceInput'\nimport classNames from '@/utils/classNames'\nimport { apiGetContacts } from '@/services/ChatService'\nimport { TbSearch, TbCheck } from 'react-icons/tb'\nimport useSWRMutation from 'swr/mutation'\nimport type { GetContactsResponse, UserDetails } from '../types'\n\nasync function getContacts() {\n const data = await apiGetContacts<GetContactsResponse>()\n return data\n}\n\nconst NewChat = () => {\n const [contactListDialog, setContactListDialog] = useState(false)\n const [selectedContact, setSelectedContact] = useState<UserDetails[]>([])\n const [query, setQuery] = useState('')\n\n const { data, trigger: fetchContacts } = useSWRMutation(\n `/api/contacts/`,\n getContacts,\n )\n\n useEffect(() => {\n if (contactListDialog) {\n fetchContacts()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [contactListDialog])\n\n const contacts = useMemo(() => {\n if (data) {\n return data.filter((contact) => {\n if (!query) {\n return true\n }\n\n if (contact.name.toLocaleLowerCase().includes(query)) {\n return true\n }\n\n return false\n })\n }\n }, [data, query])\n\n const handleDialogClose = () => {\n setContactListDialog(false)\n setSelectedContact([])\n }\n\n const handleStartNewChat = () => {\n handleDialogClose()\n }\n\n const handleInputChange = (value: string) => {\n setQuery(value)\n }\n\n const handleSetSelectedContact = (contact: UserDetails) => {\n setSelectedContact((prevSelectedContacts) => {\n const contactExists = prevSelectedContacts.some(\n (c) => c.id === contact.id,\n )\n\n if (contactExists) {\n return prevSelectedContacts.filter((c) => c.id !== contact.id)\n } else {\n return [...prevSelectedContacts, contact]\n }\n })\n }\n\n return (\n <>\n <Button\n block\n variant=\"solid\"\n onClick={() => setContactListDialog(true)}\n >\n New chat\n </Button>\n <Dialog\n isOpen={contactListDialog}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n {contacts && (\n <div>\n <div className=\"text-center mb-6\">\n <h4 className=\"mb-1\">Contact List</h4>\n <p>\n Browse and select contacts to start a\n conversation\n </p>\n </div>\n <DebounceInput\n placeholder=\"Search...\"\n type=\"text\"\n size=\"sm\"\n prefix={<TbSearch className=\"text-lg\" />}\n onChange={(e) => handleInputChange(e.target.value)}\n />\n <div className=\"mt-4\">\n <p className=\"font-semibold uppercase text-xs mb-4\">\n {contacts.length} person available\n </p>\n <div className=\"mb-6\">\n <ScrollBar\n className={classNames(\n 'overflow-y-auto h-80',\n )}\n >\n <div className=\"h-full pr-3 flex flex-col gap-2\">\n {contacts.map((contact) => (\n <div\n key={contact.id}\n className={classNames(\n 'py-3 px-3 rounded-lg flex items-center justify-between cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700',\n selectedContact.some(\n (item) =>\n item.id ===\n contact.id,\n ) &&\n 'bg-gray-100 dark:bg-gray-700',\n )}\n role=\"button\"\n onClick={() =>\n handleSetSelectedContact(\n contact,\n )\n }\n >\n <div className=\"flex items-center gap-2\">\n <Avatar\n shape=\"circle\"\n src={contact.img}\n />\n <div>\n <p className=\"heading-text font-bold\">\n {contact.name}\n </p>\n <p>{contact.email}</p>\n </div>\n </div>\n {selectedContact.some(\n (item) =>\n item.id === contact.id,\n ) && (\n <TbCheck className=\"text-2xl text-primary\" />\n )}\n </div>\n ))}\n </div>\n </ScrollBar>\n </div>\n <Button\n block\n variant=\"solid\"\n onClick={handleStartNewChat}\n >\n {selectedContact.length > 1\n ? 'Group Message'\n : 'Message'}\n </Button>\n </div>\n </div>\n )}\n </Dialog>\n </>\n )\n}\n\nexport default NewChat\n"],"names":["getContacts","apiGetContacts","NewChat","contactListDialog","setContactListDialog","useState","selectedContact","setSelectedContact","query","setQuery","data","fetchContacts","useSWRMutation","useEffect","contacts","useMemo","contact","handleDialogClose","handleStartNewChat","handleInputChange","value","handleSetSelectedContact","prevSelectedContacts","c","jsxs","Fragment","jsx","Button","Dialog","DebounceInput","TbSearch","ScrollBar","classNames","item","Avatar","TbCheck"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChat.js","sources":["../../../../../../../lib/@ecme/views/concepts/chat/Chat/hooks/useChat.ts"],"sourcesContent":["import { useChatStore } from '../store/chatStore'\nimport { apiGetChats } from '@/services/ChatService'\nimport useSWRMutation from 'swr/mutation'\nimport type { GetChatsResponse } from '../types'\n\nasync function getChats() {\n const data = await apiGetChats<GetChatsResponse>()\n return data\n}\n\nconst useChat = () => {\n const setChats = useChatStore((state) => state.setChats)\n const setChatsFetched = useChatStore((state) => state.setChatsFetched)\n\n const { trigger: fetchChats, isMutating: isChatsFetching } = useSWRMutation(\n `/api/chats/`,\n getChats,\n {\n onSuccess: (list) => {\n setChats(list)\n setChatsFetched(true)\n },\n },\n )\n\n return {\n fetchChats,\n isChatsFetching,\n }\n}\n\nexport default useChat\n"],"names":["getChats","apiGetChats","useChat","setChats","useChatStore","state","setChatsFetched","fetchChats","isChatsFetching","useSWRMutation","list"],"mappings":";;;AAKA,eAAeA,IAAW;AAEtB,SADa,MAAMC,EAAA;AAEvB;AAEA,MAAMC,IAAU,MAAM;AAClB,QAAMC,IAAWC,EAAa,CAACC,MAAUA,EAAM,QAAQ,GACjDC,IAAkBF,EAAa,CAACC,MAAUA,EAAM,eAAe,GAE/D,EAAE,SAASE,GAAY,YAAYC,MAAoBC;AAAA,IACzD;AAAA,IACAT;AAAA,IACA;AAAA,MACI,WAAW,CAACU,MAAS;AACjB,QAAAP,EAASO,CAAI,GACbJ,EAAgB,EAAI;AAAA,
|
|
1
|
+
{"version":3,"file":"useChat.js","sources":["../../../../../../../lib/@ecme/views/concepts/chat/Chat/hooks/useChat.ts"],"sourcesContent":["import { useChatStore } from '../store/chatStore'\nimport { apiGetChats } from '@/services/ChatService'\nimport useSWRMutation from 'swr/mutation'\nimport type { GetChatsResponse } from '../types'\n\nasync function getChats() {\n const data = await apiGetChats<GetChatsResponse>()\n return data\n}\n\nconst useChat = () => {\n const setChats = useChatStore((state) => state.setChats)\n const setChatsFetched = useChatStore((state) => state.setChatsFetched)\n\n const { trigger: fetchChats, isMutating: isChatsFetching } = useSWRMutation(\n `/api/chats/`,\n getChats,\n {\n onSuccess: (list) => {\n setChats(list)\n setChatsFetched(true)\n },\n },\n )\n\n return {\n fetchChats,\n isChatsFetching,\n }\n}\n\nexport default useChat\n"],"names":["getChats","apiGetChats","useChat","setChats","useChatStore","state","setChatsFetched","fetchChats","isChatsFetching","useSWRMutation","list"],"mappings":";;;AAKA,eAAeA,IAAW;AAEtB,SADa,MAAMC,EAAA;AAEvB;AAEA,MAAMC,IAAU,MAAM;AAClB,QAAMC,IAAWC,EAAa,CAACC,MAAUA,EAAM,QAAQ,GACjDC,IAAkBF,EAAa,CAACC,MAAUA,EAAM,eAAe,GAE/D,EAAE,SAASE,GAAY,YAAYC,MAAoBC;AAAA,IACzD;AAAA,IACAT;AAAA,IACA;AAAA,MACI,WAAW,CAACU,MAAS;AACjB,QAAAP,EAASO,CAAI,GACbJ,EAAgB,EAAI;AAAA,MACxB;AAAA,IAAA;AAAA,EACJ;AAGJ,SAAO;AAAA,IACH,YAAAC;AAAA,IACA,iBAAAC;AAAA,EAAA;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatStore.js","sources":["../../../../../../../lib/@ecme/views/concepts/chat/Chat/store/chatStore.ts"],"sourcesContent":["import { create } from 'zustand'\nimport type {\n Chats,\n ChatType,\n Conversation,\n Conversations,\n Message,\n SelectedChat,\n} from '../types'\n\ntype ContactInfoDrawer = {\n userId: string\n chatId: string\n chatType: ChatType | ''\n open: boolean\n}\n\nexport type ChatState = {\n conversationRecord: Conversations\n selectedChat: SelectedChat\n selectedChatType: ChatType | ''\n mobileSideBarExpand: boolean\n chats: Chats\n chatsFetched: boolean\n contactListDialog: boolean\n contactInfoDrawer: ContactInfoDrawer\n}\n\ntype ChatAction = {\n setChats: (payload: Chats) => void\n setChatsFetched: (payload: boolean) => void\n setSelectedChat: (payload: SelectedChat) => void\n setContactInfoDrawer: (payload: ContactInfoDrawer) => void\n setChatMute: (payload: { id: string; muted: boolean }) => void\n setSelectedChatType: (payload: ChatType | '') => void\n setChatRead: (payload: string) => void\n setContactListDialog: (payload: boolean) => void\n setMobileSidebar: (payload: boolean) => void\n pushConversationRecord: (payload: Conversation) => void\n pushConversationMessage: (id: string, conversation: Message) => void\n deleteConversationRecord: (payload: string) => void\n}\n\nconst initialState: ChatState = {\n conversationRecord: [],\n selectedChat: {},\n mobileSideBarExpand: false,\n chats: [],\n selectedChatType: 'personal',\n chatsFetched: false,\n contactListDialog: false,\n contactInfoDrawer: {\n userId: '',\n chatId: '',\n chatType: '',\n open: false,\n },\n}\n\nexport const useChatStore = create<ChatState & ChatAction>((set, get) => ({\n ...initialState,\n setChats: (payload) => set(() => ({ chats: payload })),\n setChatsFetched: (payload) => set(() => ({ chatsFetched: payload })),\n setSelectedChat: (payload) => set(() => ({ selectedChat: payload })),\n setContactInfoDrawer: (payload) =>\n set(() => ({ contactInfoDrawer: payload })),\n setChatMute: ({ id, muted }) =>\n set(() => {\n const chats = get().chats.map((chat) => {\n if (chat.id === id) {\n chat.muted = muted\n }\n return chat\n })\n return { chats }\n }),\n setSelectedChatType: (payload) =>\n set(() => ({ selectedChatType: payload })),\n setChatRead: (id) =>\n set(() => {\n const chats = get().chats.map((chat) => {\n if (chat.id === id) {\n chat.unread = 0\n }\n return chat\n })\n return { chats }\n }),\n setContactListDialog: (payload) =>\n set(() => ({ contactListDialog: payload })),\n setMobileSidebar: (payload) =>\n set(() => ({ mobileSideBarExpand: payload })),\n pushConversationRecord: (payload) =>\n set(() => {\n const previousConversationRecord = get().conversationRecord\n return {\n conversationRecord: [\n ...previousConversationRecord,\n ...[payload],\n ],\n }\n }),\n pushConversationMessage: (id, message) =>\n set(() => {\n const previousConversationRecord = get().conversationRecord\n const conversationRecord = structuredClone(\n previousConversationRecord,\n ).map((record) => {\n if (id === record.id) {\n record.conversation.push(message)\n }\n return record\n })\n return {\n conversationRecord,\n }\n }),\n deleteConversationRecord: (payload) =>\n set(() => {\n const previousConversationRecord = get().conversationRecord\n const previousChats = get().chats\n return {\n conversationRecord: previousConversationRecord.filter(\n (record) => record.id !== payload,\n ),\n chats: previousChats.filter((chat) => chat.id !== payload),\n }\n }),\n}))\n"],"names":["initialState","useChatStore","create","set","get","payload","id","muted","chat","message","previousConversationRecord","record","previousChats"],"mappings":";AA2CA,MAAMA,IAA0B;AAAA,EAC5B,oBAAoB,CAAA;AAAA,EACpB,cAAc,CAAA;AAAA,EACd,qBAAqB;AAAA,EACrB,OAAO,CAAA;AAAA,EACP,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAEd,GAEaC,IAAeC,EAA+B,CAACC,GAAKC,OAAS;AAAA,EACtE,GAAGJ;AAAA,EACH,UAAU,CAACK,MAAYF,EAAI,OAAO,EAAE,OAAOE,IAAU;AAAA,EACrD,iBAAiB,CAACA,MAAYF,EAAI,OAAO,EAAE,cAAcE,IAAU;AAAA,EACnE,iBAAiB,CAACA,MAAYF,EAAI,OAAO,EAAE,cAAcE,IAAU;AAAA,EACnE,sBAAsB,CAACA,MACnBF,EAAI,OAAO,EAAE,mBAAmBE,IAAU;AAAA,EAC9C,aAAa,CAAC,EAAE,IAAAC,GAAI,OAAAC,EAAA,MAChBJ,EAAI,OAOO,EAAE,OANKC,EAAA,EAAM,MAAM,IAAI,CAACI,OACvBA,EAAK,OAAOF,MACZE,EAAK,QAAQD,IAEVC,EACV,EACQ,EACZ;AAAA,EACL,qBAAqB,CAACH,MAClBF,EAAI,OAAO,EAAE,kBAAkBE,IAAU;AAAA,EAC7C,aAAa,CAACC,MACVH,EAAI,OAOO,EAAE,OANKC,EAAA,EAAM,MAAM,IAAI,CAACI,OACvBA,EAAK,OAAOF,MACZE,EAAK,SAAS,IAEXA,EACV,EACQ,EACZ;AAAA,EACL,sBAAsB,CAACH,MACnBF,EAAI,OAAO,EAAE,mBAAmBE,IAAU;AAAA,EAC9C,kBAAkB,CAACA,MACfF,EAAI,OAAO,EAAE,qBAAqBE,IAAU;AAAA,EAChD,wBAAwB,CAACA,MACrBF,EAAI,OAEO;AAAA,IACH,oBAAoB;AAAA,MAChB,GAH2BC,IAAM;AAAA,MAI7BC;AAAA,IAAO;AAAA,EACf,EAEP;AAAA,EACL,yBAAyB,CAACC,GAAIG,MAC1BN,EAAI,MAAM;AACN,UAAMO,IAA6BN,IAAM;AASzC,WAAO;AAAA,MACH,oBATuB;AAAA,QACvBM;AAAA,MAAA,EACF,IAAI,CAACC,OACCL,MAAOK,EAAO,MACdA,EAAO,aAAa,KAAKF,CAAO,GAE7BE,EACV;AAAA,IAEG;AAAA,
|
|
1
|
+
{"version":3,"file":"chatStore.js","sources":["../../../../../../../lib/@ecme/views/concepts/chat/Chat/store/chatStore.ts"],"sourcesContent":["import { create } from 'zustand'\nimport type {\n Chats,\n ChatType,\n Conversation,\n Conversations,\n Message,\n SelectedChat,\n} from '../types'\n\ntype ContactInfoDrawer = {\n userId: string\n chatId: string\n chatType: ChatType | ''\n open: boolean\n}\n\nexport type ChatState = {\n conversationRecord: Conversations\n selectedChat: SelectedChat\n selectedChatType: ChatType | ''\n mobileSideBarExpand: boolean\n chats: Chats\n chatsFetched: boolean\n contactListDialog: boolean\n contactInfoDrawer: ContactInfoDrawer\n}\n\ntype ChatAction = {\n setChats: (payload: Chats) => void\n setChatsFetched: (payload: boolean) => void\n setSelectedChat: (payload: SelectedChat) => void\n setContactInfoDrawer: (payload: ContactInfoDrawer) => void\n setChatMute: (payload: { id: string; muted: boolean }) => void\n setSelectedChatType: (payload: ChatType | '') => void\n setChatRead: (payload: string) => void\n setContactListDialog: (payload: boolean) => void\n setMobileSidebar: (payload: boolean) => void\n pushConversationRecord: (payload: Conversation) => void\n pushConversationMessage: (id: string, conversation: Message) => void\n deleteConversationRecord: (payload: string) => void\n}\n\nconst initialState: ChatState = {\n conversationRecord: [],\n selectedChat: {},\n mobileSideBarExpand: false,\n chats: [],\n selectedChatType: 'personal',\n chatsFetched: false,\n contactListDialog: false,\n contactInfoDrawer: {\n userId: '',\n chatId: '',\n chatType: '',\n open: false,\n },\n}\n\nexport const useChatStore = create<ChatState & ChatAction>((set, get) => ({\n ...initialState,\n setChats: (payload) => set(() => ({ chats: payload })),\n setChatsFetched: (payload) => set(() => ({ chatsFetched: payload })),\n setSelectedChat: (payload) => set(() => ({ selectedChat: payload })),\n setContactInfoDrawer: (payload) =>\n set(() => ({ contactInfoDrawer: payload })),\n setChatMute: ({ id, muted }) =>\n set(() => {\n const chats = get().chats.map((chat) => {\n if (chat.id === id) {\n chat.muted = muted\n }\n return chat\n })\n return { chats }\n }),\n setSelectedChatType: (payload) =>\n set(() => ({ selectedChatType: payload })),\n setChatRead: (id) =>\n set(() => {\n const chats = get().chats.map((chat) => {\n if (chat.id === id) {\n chat.unread = 0\n }\n return chat\n })\n return { chats }\n }),\n setContactListDialog: (payload) =>\n set(() => ({ contactListDialog: payload })),\n setMobileSidebar: (payload) =>\n set(() => ({ mobileSideBarExpand: payload })),\n pushConversationRecord: (payload) =>\n set(() => {\n const previousConversationRecord = get().conversationRecord\n return {\n conversationRecord: [\n ...previousConversationRecord,\n ...[payload],\n ],\n }\n }),\n pushConversationMessage: (id, message) =>\n set(() => {\n const previousConversationRecord = get().conversationRecord\n const conversationRecord = structuredClone(\n previousConversationRecord,\n ).map((record) => {\n if (id === record.id) {\n record.conversation.push(message)\n }\n return record\n })\n return {\n conversationRecord,\n }\n }),\n deleteConversationRecord: (payload) =>\n set(() => {\n const previousConversationRecord = get().conversationRecord\n const previousChats = get().chats\n return {\n conversationRecord: previousConversationRecord.filter(\n (record) => record.id !== payload,\n ),\n chats: previousChats.filter((chat) => chat.id !== payload),\n }\n }),\n}))\n"],"names":["initialState","useChatStore","create","set","get","payload","id","muted","chat","message","previousConversationRecord","record","previousChats"],"mappings":";AA2CA,MAAMA,IAA0B;AAAA,EAC5B,oBAAoB,CAAA;AAAA,EACpB,cAAc,CAAA;AAAA,EACd,qBAAqB;AAAA,EACrB,OAAO,CAAA;AAAA,EACP,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAEd,GAEaC,IAAeC,EAA+B,CAACC,GAAKC,OAAS;AAAA,EACtE,GAAGJ;AAAA,EACH,UAAU,CAACK,MAAYF,EAAI,OAAO,EAAE,OAAOE,IAAU;AAAA,EACrD,iBAAiB,CAACA,MAAYF,EAAI,OAAO,EAAE,cAAcE,IAAU;AAAA,EACnE,iBAAiB,CAACA,MAAYF,EAAI,OAAO,EAAE,cAAcE,IAAU;AAAA,EACnE,sBAAsB,CAACA,MACnBF,EAAI,OAAO,EAAE,mBAAmBE,IAAU;AAAA,EAC9C,aAAa,CAAC,EAAE,IAAAC,GAAI,OAAAC,EAAA,MAChBJ,EAAI,OAOO,EAAE,OANKC,EAAA,EAAM,MAAM,IAAI,CAACI,OACvBA,EAAK,OAAOF,MACZE,EAAK,QAAQD,IAEVC,EACV,EACQ,EACZ;AAAA,EACL,qBAAqB,CAACH,MAClBF,EAAI,OAAO,EAAE,kBAAkBE,IAAU;AAAA,EAC7C,aAAa,CAACC,MACVH,EAAI,OAOO,EAAE,OANKC,EAAA,EAAM,MAAM,IAAI,CAACI,OACvBA,EAAK,OAAOF,MACZE,EAAK,SAAS,IAEXA,EACV,EACQ,EACZ;AAAA,EACL,sBAAsB,CAACH,MACnBF,EAAI,OAAO,EAAE,mBAAmBE,IAAU;AAAA,EAC9C,kBAAkB,CAACA,MACfF,EAAI,OAAO,EAAE,qBAAqBE,IAAU;AAAA,EAChD,wBAAwB,CAACA,MACrBF,EAAI,OAEO;AAAA,IACH,oBAAoB;AAAA,MAChB,GAH2BC,IAAM;AAAA,MAI7BC;AAAA,IAAO;AAAA,EACf,EAEP;AAAA,EACL,yBAAyB,CAACC,GAAIG,MAC1BN,EAAI,MAAM;AACN,UAAMO,IAA6BN,IAAM;AASzC,WAAO;AAAA,MACH,oBATuB;AAAA,QACvBM;AAAA,MAAA,EACF,IAAI,CAACC,OACCL,MAAOK,EAAO,MACdA,EAAO,aAAa,KAAKF,CAAO,GAE7BE,EACV;AAAA,IAEG;AAAA,EAER,CAAC;AAAA,EACL,0BAA0B,CAACN,MACvBF,EAAI,MAAM;AACN,UAAMO,IAA6BN,IAAM,oBACnCQ,IAAgBR,IAAM;AAC5B,WAAO;AAAA,MACH,oBAAoBM,EAA2B;AAAA,QAC3C,CAACC,MAAWA,EAAO,OAAON;AAAA,MAAA;AAAA,MAE9B,OAAOO,EAAc,OAAO,CAACJ,MAASA,EAAK,OAAOH,CAAO;AAAA,IAAA;AAAA,EAEjE,CAAC;AACT,EAAE;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerCreate.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerCreate/CustomerCreate.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Container from '@/components/shared/Container'\nimport Button from '@/components/ui/Button'\nimport Notification from '@/components/ui/Notification'\nimport toast from '@/components/ui/toast'\nimport CustomerForm from '../CustomerForm'\nimport ConfirmDialog from '@/components/shared/ConfirmDialog'\nimport sleep from '@/utils/sleep'\nimport { TbTrash } from 'react-icons/tb'\nimport { useNavigate } from 'react-router-dom'\nimport type { CustomerFormSchema } from '../CustomerForm'\n\nconst CustomerEdit = () => {\n const navigate = useNavigate()\n\n const [discardConfirmationOpen, setDiscardConfirmationOpen] =\n useState(false)\n const [isSubmiting, setIsSubmiting] = useState(false)\n\n const handleFormSubmit = async (values: CustomerFormSchema) => {\n console.log('Submitted values', values)\n setIsSubmiting(true)\n await sleep(800)\n setIsSubmiting(false)\n toast.push(\n <Notification type=\"success\">Customer created!</Notification>,\n { placement: 'top-center' },\n )\n navigate('/concepts/customers/customer-list')\n }\n\n const handleConfirmDiscard = () => {\n setDiscardConfirmationOpen(true)\n toast.push(\n <Notification type=\"success\">Customer discardd!</Notification>,\n { placement: 'top-center' },\n )\n navigate('/concepts/customers/customer-list')\n }\n\n const handleDiscard = () => {\n setDiscardConfirmationOpen(true)\n }\n\n const handleCancel = () => {\n setDiscardConfirmationOpen(false)\n }\n\n return (\n <>\n <CustomerForm\n newCustomer\n defaultValues={{\n firstName: '',\n lastName: '',\n email: '',\n img: '',\n phoneNumber: '',\n dialCode: '',\n country: '',\n address: '',\n city: '',\n postcode: '',\n tags: [],\n }}\n onFormSubmit={handleFormSubmit}\n >\n <Container>\n <div className=\"flex items-center justify-between px-8\">\n <span></span>\n <div className=\"flex items-center\">\n <Button\n className=\"ltr:mr-3 rtl:ml-3\"\n type=\"button\"\n customColorClass={() =>\n 'border-error ring-1 ring-error text-error hover:border-error hover:ring-error hover:text-error bg-transparent'\n }\n icon={<TbTrash />}\n onClick={handleDiscard}\n >\n Discard\n </Button>\n <Button\n variant=\"solid\"\n type=\"submit\"\n loading={isSubmiting}\n >\n Create\n </Button>\n </div>\n </div>\n </Container>\n </CustomerForm>\n <ConfirmDialog\n isOpen={discardConfirmationOpen}\n type=\"danger\"\n title=\"Discard changes\"\n onClose={handleCancel}\n onRequestClose={handleCancel}\n onCancel={handleCancel}\n onConfirm={handleConfirmDiscard}\n >\n <p>\n Are you sure you want discard this? This action can't\n be undo.{' '}\n </p>\n </ConfirmDialog>\n </>\n )\n}\n\nexport default CustomerEdit\n"],"names":["CustomerEdit","navigate","useNavigate","discardConfirmationOpen","setDiscardConfirmationOpen","useState","isSubmiting","setIsSubmiting","handleFormSubmit","values","sleep","toast","jsx","Notification","handleConfirmDiscard","handleDiscard","handleCancel","jsxs","Fragment","CustomerForm","Container","Button","TbTrash","ConfirmDialog"],"mappings":";;;;;;;;;;;;;;;AAYA,MAAMA,IAAe,MAAM;AACvB,QAAMC,IAAWC,EAAA,GAEX,CAACC,GAAyBC,CAA0B,IACtDC,EAAS,EAAK,GACZ,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAK,GAE9CG,IAAmB,OAAOC,MAA+B;AAC3D,YAAQ,IAAI,oBAAoBA,CAAM,GACtCF,EAAe,EAAI,GACnB,MAAMG,EAAM,GAAG,GACfH,EAAe,EAAK,GACpBI,EAAM;AAAA,MACF,gBAAAC,EAACC,GAAA,EAAa,MAAK,WAAU,UAAA,qBAAiB;AAAA,MAC9C,EAAE,WAAW,aAAA;AAAA,IAAa,GAE9BZ,EAAS,mCAAmC;AAAA,
|
|
1
|
+
{"version":3,"file":"CustomerCreate.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerCreate/CustomerCreate.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Container from '@/components/shared/Container'\nimport Button from '@/components/ui/Button'\nimport Notification from '@/components/ui/Notification'\nimport toast from '@/components/ui/toast'\nimport CustomerForm from '../CustomerForm'\nimport ConfirmDialog from '@/components/shared/ConfirmDialog'\nimport sleep from '@/utils/sleep'\nimport { TbTrash } from 'react-icons/tb'\nimport { useNavigate } from 'react-router-dom'\nimport type { CustomerFormSchema } from '../CustomerForm'\n\nconst CustomerEdit = () => {\n const navigate = useNavigate()\n\n const [discardConfirmationOpen, setDiscardConfirmationOpen] =\n useState(false)\n const [isSubmiting, setIsSubmiting] = useState(false)\n\n const handleFormSubmit = async (values: CustomerFormSchema) => {\n console.log('Submitted values', values)\n setIsSubmiting(true)\n await sleep(800)\n setIsSubmiting(false)\n toast.push(\n <Notification type=\"success\">Customer created!</Notification>,\n { placement: 'top-center' },\n )\n navigate('/concepts/customers/customer-list')\n }\n\n const handleConfirmDiscard = () => {\n setDiscardConfirmationOpen(true)\n toast.push(\n <Notification type=\"success\">Customer discardd!</Notification>,\n { placement: 'top-center' },\n )\n navigate('/concepts/customers/customer-list')\n }\n\n const handleDiscard = () => {\n setDiscardConfirmationOpen(true)\n }\n\n const handleCancel = () => {\n setDiscardConfirmationOpen(false)\n }\n\n return (\n <>\n <CustomerForm\n newCustomer\n defaultValues={{\n firstName: '',\n lastName: '',\n email: '',\n img: '',\n phoneNumber: '',\n dialCode: '',\n country: '',\n address: '',\n city: '',\n postcode: '',\n tags: [],\n }}\n onFormSubmit={handleFormSubmit}\n >\n <Container>\n <div className=\"flex items-center justify-between px-8\">\n <span></span>\n <div className=\"flex items-center\">\n <Button\n className=\"ltr:mr-3 rtl:ml-3\"\n type=\"button\"\n customColorClass={() =>\n 'border-error ring-1 ring-error text-error hover:border-error hover:ring-error hover:text-error bg-transparent'\n }\n icon={<TbTrash />}\n onClick={handleDiscard}\n >\n Discard\n </Button>\n <Button\n variant=\"solid\"\n type=\"submit\"\n loading={isSubmiting}\n >\n Create\n </Button>\n </div>\n </div>\n </Container>\n </CustomerForm>\n <ConfirmDialog\n isOpen={discardConfirmationOpen}\n type=\"danger\"\n title=\"Discard changes\"\n onClose={handleCancel}\n onRequestClose={handleCancel}\n onCancel={handleCancel}\n onConfirm={handleConfirmDiscard}\n >\n <p>\n Are you sure you want discard this? This action can't\n be undo.{' '}\n </p>\n </ConfirmDialog>\n </>\n )\n}\n\nexport default CustomerEdit\n"],"names":["CustomerEdit","navigate","useNavigate","discardConfirmationOpen","setDiscardConfirmationOpen","useState","isSubmiting","setIsSubmiting","handleFormSubmit","values","sleep","toast","jsx","Notification","handleConfirmDiscard","handleDiscard","handleCancel","jsxs","Fragment","CustomerForm","Container","Button","TbTrash","ConfirmDialog"],"mappings":";;;;;;;;;;;;;;;AAYA,MAAMA,IAAe,MAAM;AACvB,QAAMC,IAAWC,EAAA,GAEX,CAACC,GAAyBC,CAA0B,IACtDC,EAAS,EAAK,GACZ,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAK,GAE9CG,IAAmB,OAAOC,MAA+B;AAC3D,YAAQ,IAAI,oBAAoBA,CAAM,GACtCF,EAAe,EAAI,GACnB,MAAMG,EAAM,GAAG,GACfH,EAAe,EAAK,GACpBI,EAAM;AAAA,MACF,gBAAAC,EAACC,GAAA,EAAa,MAAK,WAAU,UAAA,qBAAiB;AAAA,MAC9C,EAAE,WAAW,aAAA;AAAA,IAAa,GAE9BZ,EAAS,mCAAmC;AAAA,EAChD,GAEMa,IAAuB,MAAM;AAC/B,IAAAV,EAA2B,EAAI,GAC/BO,EAAM;AAAA,MACF,gBAAAC,EAACC,GAAA,EAAa,MAAK,WAAU,UAAA,sBAAkB;AAAA,MAC/C,EAAE,WAAW,aAAA;AAAA,IAAa,GAE9BZ,EAAS,mCAAmC;AAAA,EAChD,GAEMc,IAAgB,MAAM;AACxB,IAAAX,EAA2B,EAAI;AAAA,EACnC,GAEMY,IAAe,MAAM;AACvB,IAAAZ,EAA2B,EAAK;AAAA,EACpC;AAEA,SACI,gBAAAa,EAAAC,GAAA,EACI,UAAA;AAAA,IAAA,gBAAAN;AAAA,MAACO;AAAA,MAAA;AAAA,QACG,aAAW;AAAA,QACX,eAAe;AAAA,UACX,WAAW;AAAA,UACX,UAAU;AAAA,UACV,OAAO;AAAA,UACP,KAAK;AAAA,UACL,aAAa;AAAA,UACb,UAAU;AAAA,UACV,SAAS;AAAA,UACT,SAAS;AAAA,UACT,MAAM;AAAA,UACN,UAAU;AAAA,UACV,MAAM,CAAA;AAAA,QAAC;AAAA,QAEX,cAAcX;AAAA,QAEd,UAAA,gBAAAI,EAACQ,GAAA,EACG,UAAA,gBAAAH,EAAC,OAAA,EAAI,WAAU,0CACX,UAAA;AAAA,UAAA,gBAAAL,EAAC,QAAA,EAAK;AAAA,UACN,gBAAAK,EAAC,OAAA,EAAI,WAAU,qBACX,UAAA;AAAA,YAAA,gBAAAL;AAAA,cAACS;AAAA,cAAA;AAAA,gBACG,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,kBAAkB,MACd;AAAA,gBAEJ,wBAAOC,GAAA,EAAQ;AAAA,gBACf,SAASP;AAAA,gBACZ,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAAH;AAAA,cAACS;AAAA,cAAA;AAAA,gBACG,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAASf;AAAA,gBACZ,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEJ,gBAAAM;AAAA,MAACW;AAAA,MAAA;AAAA,QACG,QAAQpB;AAAA,QACR,MAAK;AAAA,QACL,OAAM;AAAA,QACN,SAASa;AAAA,QACT,gBAAgBA;AAAA,QAChB,UAAUA;AAAA,QACV,WAAWF;AAAA,QAEX,4BAAC,KAAA,EAAE,UAAA;AAAA,UAAA;AAAA,UAEU;AAAA,QAAA,EAAA,CACb;AAAA,MAAA;AAAA,IAAA;AAAA,EACJ,GACJ;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivitySection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerDetails/ActivitySection.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport Button from '@/components/ui/Button'\nimport Loading from '@/components/shared/Loading'\nimport { apiGetCustomerLog } from '@/services/CustomersService'\nimport sleep from '@/utils/sleep'\nimport dayjs from 'dayjs'\nimport isEmpty from 'lodash/isEmpty'\nimport {\n PiEyeDuotone,\n PiCloudCheckDuotone,\n PiCreditCardDuotone,\n PiTicketDuotone,\n PiPhoneOutgoingDuotone,\n} from 'react-icons/pi'\nimport useSWR from 'swr'\n\ntype Activities = {\n id: string\n date: number\n events: {\n type: string\n dateTime: number\n description: string\n }[]\n}[]\n\nconst TimeLineMedia = (props: { type: string }) => {\n const { type } = props\n\n switch (type) {\n case 'PRODUCT-VIEW':\n return <PiEyeDuotone />\n case 'PRODUCT-UPDATE':\n return <PiCloudCheckDuotone />\n case 'PAYMENT':\n return <PiCreditCardDuotone />\n case 'SUPPORT-TICKET':\n return <PiTicketDuotone />\n case 'TICKET-IN-PROGRESS':\n return <PiPhoneOutgoingDuotone />\n default:\n return <></>\n }\n}\n\nconst TimeLineContent = (props: {\n type: string\n description: string\n name: string\n}) => {\n const { type, description, name } = props\n\n switch (type) {\n case 'PRODUCT-VIEW':\n return (\n <div>\n <h6 className=\"font-bold\">View Plan</h6>\n <p className=\"font-semibold\">\n {name} {description}\n </p>\n </div>\n )\n case 'PRODUCT-UPDATE':\n return (\n <div>\n <h6 className=\"font-bold\">Change Plan</h6>\n <p className=\"font-semibold\">\n {name} {description}\n </p>\n </div>\n )\n case 'PAYMENT':\n return (\n <div>\n <h6 className=\"font-bold\">Payment</h6>\n <p className=\"font-semibold\">\n {name} {description}\n </p>\n </div>\n )\n case 'SUPPORT-TICKET':\n return (\n <div>\n <h6 className=\"font-bold\">Support Ticket</h6>\n <p className=\"font-semibold\">\n {name} {description}\n </p>\n </div>\n )\n case 'TICKET-IN-PROGRESS':\n return (\n <div>\n <h6 className=\"font-bold\">Support Ticket Update</h6>\n <p className=\"font-semibold\">{description}</p>\n </div>\n )\n default:\n return <></>\n }\n}\n\nconst ActivitySection = ({\n customerName,\n id,\n}: {\n customerName: string\n id: string\n}) => {\n const { data, isLoading } = useSWR(\n ['/api/customers/log', { id: id as string }],\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ([_, params]) => apiGetCustomerLog<Activities, { id: string }>(params),\n {\n revalidateOnFocus: false,\n revalidateIfStale: false,\n evalidateOnFocus: false,\n },\n )\n\n const [fetchData, setfetchData] = useState(false)\n const [showNoMoreData, setShowNoMoreData] = useState(false)\n\n const handleLoadMore = async () => {\n setfetchData(true)\n await sleep(500)\n setShowNoMoreData(true)\n setfetchData(false)\n }\n\n return (\n <Loading loading={isLoading}>\n {data &&\n data.map((log) => (\n <div key={log.id} className=\"mb-4\">\n <div className=\"mb-4 font-bold uppercase flex items-center gap-4\">\n <span className=\"w-[70px] heading-text\">\n {dayjs.unix(log.date).format('DD MMMM')}\n </span>\n <div className=\"border-b border-2 border-gray-200 dark:border-gray-600 border-dashed w-full\"></div>\n </div>\n <div className=\"flex flex-col gap-4\">\n {isEmpty(log.events) ? (\n <div>No Activities</div>\n ) : (\n log.events.map((event, index) => (\n <div\n key={event.type + index}\n className=\"flex items-center\"\n >\n <span className=\"font-semibold w-[100px]\">\n {dayjs\n .unix(event.dateTime)\n .format('h:mm A')}\n </span>\n <Card\n className=\"max-w-[600px] w-full\"\n bodyClass=\"py-3\"\n >\n <div className=\"flex items-center gap-4\">\n <div className=\"text-primary text-3xl\">\n <TimeLineMedia\n type={event.type}\n />\n </div>\n <TimeLineContent\n name={customerName}\n type={event.type}\n description={\n event?.description\n }\n />\n </div>\n </Card>\n </div>\n ))\n )}\n </div>\n </div>\n ))}\n <div className=\"text-center\">\n {showNoMoreData ? (\n <span className=\"font-semibold h-[40px] flex items-center justify-center\">\n No more activities\n </span>\n ) : (\n <Button loading={fetchData} onClick={handleLoadMore}>\n Load More\n </Button>\n )}\n </div>\n </Loading>\n )\n}\n\nexport default ActivitySection\n"],"names":["TimeLineMedia","props","type","PiEyeDuotone","PiCloudCheckDuotone","PiCreditCardDuotone","PiTicketDuotone","PiPhoneOutgoingDuotone","jsx","Fragment","TimeLineContent","description","name","jsxs","ActivitySection","customerName","id","data","isLoading","useSWR","_","params","apiGetCustomerLog","fetchData","setfetchData","useState","showNoMoreData","setShowNoMoreData","handleLoadMore","sleep","Loading","log","dayjs","isEmpty","event","index","Card","Button"],"mappings":";;;;;;;;;;;;;AA2BA,MAAMA,IAAgB,CAACC,MAA4B;AAC/C,QAAM,EAAE,MAAAC,MAASD;AAEjB,UAAQC,GAAA;AAAA,IACJ,KAAK;AACD,+BAAQC,GAAA,EAAa;AAAA,IACzB,KAAK;AACD,+BAAQC,GAAA,EAAoB;AAAA,IAChC,KAAK;AACD,+BAAQC,GAAA,EAAoB;AAAA,IAChC,KAAK;AACD,+BAAQC,GAAA,EAAgB;AAAA,IAC5B,KAAK;AACD,+BAAQC,GAAA,EAAuB;AAAA,IACnC;AACI,aAAO,gBAAAC,EAAAC,GAAA,EAAE;AAAA,EAAA;AAErB,GAEMC,IAAkB,CAACT,MAInB;AACF,QAAM,EAAE,MAAAC,GAAM,aAAAS,GAAa,MAAAC,EAAA,IAASX;AAEpC,UAAQC,GAAA;AAAA,IACJ,KAAK;AACD,+BACK,OAAA,EACG,UAAA;AAAA,QAAA,gBAAAM,EAAC,MAAA,EAAG,WAAU,aAAY,UAAA,aAAS;AAAA,QACnC,gBAAAK,EAAC,KAAA,EAAE,WAAU,iBACR,UAAA;AAAA,UAAAD;AAAA,UAAK;AAAA,UAAED;AAAA,QAAA,EAAA,CACZ;AAAA,MAAA,GACJ;AAAA,IAER,KAAK;AACD,+BACK,OAAA,EACG,UAAA;AAAA,QAAA,gBAAAH,EAAC,MAAA,EAAG,WAAU,aAAY,UAAA,eAAW;AAAA,QACrC,gBAAAK,EAAC,KAAA,EAAE,WAAU,iBACR,UAAA;AAAA,UAAAD;AAAA,UAAK;AAAA,UAAED;AAAA,QAAA,EAAA,CACZ;AAAA,MAAA,GACJ;AAAA,IAER,KAAK;AACD,+BACK,OAAA,EACG,UAAA;AAAA,QAAA,gBAAAH,EAAC,MAAA,EAAG,WAAU,aAAY,UAAA,WAAO;AAAA,QACjC,gBAAAK,EAAC,KAAA,EAAE,WAAU,iBACR,UAAA;AAAA,UAAAD;AAAA,UAAK;AAAA,UAAED;AAAA,QAAA,EAAA,CACZ;AAAA,MAAA,GACJ;AAAA,IAER,KAAK;AACD,+BACK,OAAA,EACG,UAAA;AAAA,QAAA,gBAAAH,EAAC,MAAA,EAAG,WAAU,aAAY,UAAA,kBAAc;AAAA,QACxC,gBAAAK,EAAC,KAAA,EAAE,WAAU,iBACR,UAAA;AAAA,UAAAD;AAAA,UAAK;AAAA,UAAED;AAAA,QAAA,EAAA,CACZ;AAAA,MAAA,GACJ;AAAA,IAER,KAAK;AACD,+BACK,OAAA,EACG,UAAA;AAAA,QAAA,gBAAAH,EAAC,MAAA,EAAG,WAAU,aAAY,UAAA,yBAAqB;AAAA,QAC/C,gBAAAA,EAAC,KAAA,EAAE,WAAU,iBAAiB,UAAAG,EAAA,CAAY;AAAA,MAAA,GAC9C;AAAA,IAER;AACI,aAAO,gBAAAH,EAAAC,GAAA,EAAE;AAAA,EAAA;AAErB,GAEMK,IAAkB,CAAC;AAAA,EACrB,cAAAC;AAAA,EACA,IAAAC;AACJ,MAGM;AACF,QAAM,EAAE,MAAAC,GAAM,WAAAC,EAAA,IAAcC;AAAA,IACxB,CAAC,sBAAsB,EAAE,IAAAH,GAAkB;AAAA;AAAA,IAE3C,CAAC,CAACI,GAAGC,CAAM,MAAMC,EAA8CD,CAAM;AAAA,IACrE;AAAA,MACI,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,IAAA;AAAA,EACtB,GAGE,CAACE,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1C,CAACC,GAAgBC,CAAiB,IAAIF,EAAS,EAAK,GAEpDG,IAAiB,YAAY;AAC/B,IAAAJ,EAAa,EAAI,GACjB,MAAMK,EAAM,GAAG,GACfF,EAAkB,EAAI,GACtBH,EAAa,EAAK;AAAA,EAAA;AAGtB,SACI,gBAAAX,EAACiB,GAAA,EAAQ,SAASZ,GACb,UAAA;AAAA,IAAAD,KACGA,EAAK,IAAI,CAACc,MACN,gBAAAlB,EAAC,OAAA,EAAiB,WAAU,QACxB,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,oDACX,UAAA;AAAA,QAAA,gBAAAL,EAAC,QAAA,EAAK,WAAU,yBACX,UAAAwB,EAAM,KAAKD,EAAI,IAAI,EAAE,OAAO,SAAS,EAAA,CAC1C;AAAA,QACA,gBAAAvB,EAAC,OAAA,EAAI,WAAU,8EAAA,CAA8E;AAAA,MAAA,GACjG;AAAA,wBACC,OAAA,EAAI,WAAU,uBACV,UAAAyB,EAAQF,EAAI,MAAM,IACf,gBAAAvB,EAAC,OAAA,EAAI,2BAAa,IAElBuB,EAAI,OAAO,IAAI,CAACG,GAAOC,MACnB,gBAAAtB;AAAA,QAAC;AAAA,QAAA;AAAA,UAEG,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAL,EAAC,QAAA,EAAK,WAAU,2BACX,UAAAwB,EACI,KAAKE,EAAM,QAAQ,EACnB,OAAO,QAAQ,EAAA,CACxB;AAAA,YACA,gBAAA1B;AAAA,cAAC4B;AAAA,cAAA;AAAA,gBACG,WAAU;AAAA,gBACV,WAAU;AAAA,gBAEV,UAAA,gBAAAvB,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,kBAAA,gBAAAL,EAAC,OAAA,EAAI,WAAU,yBACX,UAAA,gBAAAA;AAAA,oBAACR;AAAA,oBAAA;AAAA,sBACG,MAAMkC,EAAM;AAAA,oBAAA;AAAA,kBAAA,GAEpB;AAAA,kBACA,gBAAA1B;AAAA,oBAACE;AAAA,oBAAA;AAAA,sBACG,MAAMK;AAAA,sBACN,MAAMmB,EAAM;AAAA,sBACZ,aACIA,KAAA,gBAAAA,EAAO;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAEf,EAAA,CACJ;AAAA,cAAA;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,QA1BKA,EAAM,OAAOC;AAAA,MAAA,CA4BzB,EAAA,CAET;AAAA,IAAA,KA3CMJ,EAAI,EA4Cd,CACH;AAAA,sBACJ,OAAA,EAAI,WAAU,eACV,UAAAL,IACG,gBAAAlB,EAAC,UAAK,WAAU,2DAA0D,UAAA,qBAAA,CAE1E,sBAEC6B,GAAA,EAAO,SAASd,GAAW,SAASK,GAAgB,uBAErD,EAAA,CAER;AAAA,EAAA,GACJ;AAER;"}
|
|
1
|
+
{"version":3,"file":"ActivitySection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerDetails/ActivitySection.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport Button from '@/components/ui/Button'\nimport Loading from '@/components/shared/Loading'\nimport { apiGetCustomerLog } from '@/services/CustomersService'\nimport sleep from '@/utils/sleep'\nimport dayjs from 'dayjs'\nimport isEmpty from 'lodash/isEmpty'\nimport {\n PiEyeDuotone,\n PiCloudCheckDuotone,\n PiCreditCardDuotone,\n PiTicketDuotone,\n PiPhoneOutgoingDuotone,\n} from 'react-icons/pi'\nimport useSWR from 'swr'\n\ntype Activities = {\n id: string\n date: number\n events: {\n type: string\n dateTime: number\n description: string\n }[]\n}[]\n\nconst TimeLineMedia = (props: { type: string }) => {\n const { type } = props\n\n switch (type) {\n case 'PRODUCT-VIEW':\n return <PiEyeDuotone />\n case 'PRODUCT-UPDATE':\n return <PiCloudCheckDuotone />\n case 'PAYMENT':\n return <PiCreditCardDuotone />\n case 'SUPPORT-TICKET':\n return <PiTicketDuotone />\n case 'TICKET-IN-PROGRESS':\n return <PiPhoneOutgoingDuotone />\n default:\n return <></>\n }\n}\n\nconst TimeLineContent = (props: {\n type: string\n description: string\n name: string\n}) => {\n const { type, description, name } = props\n\n switch (type) {\n case 'PRODUCT-VIEW':\n return (\n <div>\n <h6 className=\"font-bold\">View Plan</h6>\n <p className=\"font-semibold\">\n {name} {description}\n </p>\n </div>\n )\n case 'PRODUCT-UPDATE':\n return (\n <div>\n <h6 className=\"font-bold\">Change Plan</h6>\n <p className=\"font-semibold\">\n {name} {description}\n </p>\n </div>\n )\n case 'PAYMENT':\n return (\n <div>\n <h6 className=\"font-bold\">Payment</h6>\n <p className=\"font-semibold\">\n {name} {description}\n </p>\n </div>\n )\n case 'SUPPORT-TICKET':\n return (\n <div>\n <h6 className=\"font-bold\">Support Ticket</h6>\n <p className=\"font-semibold\">\n {name} {description}\n </p>\n </div>\n )\n case 'TICKET-IN-PROGRESS':\n return (\n <div>\n <h6 className=\"font-bold\">Support Ticket Update</h6>\n <p className=\"font-semibold\">{description}</p>\n </div>\n )\n default:\n return <></>\n }\n}\n\nconst ActivitySection = ({\n customerName,\n id,\n}: {\n customerName: string\n id: string\n}) => {\n const { data, isLoading } = useSWR(\n ['/api/customers/log', { id: id as string }],\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ([_, params]) => apiGetCustomerLog<Activities, { id: string }>(params),\n {\n revalidateOnFocus: false,\n revalidateIfStale: false,\n evalidateOnFocus: false,\n },\n )\n\n const [fetchData, setfetchData] = useState(false)\n const [showNoMoreData, setShowNoMoreData] = useState(false)\n\n const handleLoadMore = async () => {\n setfetchData(true)\n await sleep(500)\n setShowNoMoreData(true)\n setfetchData(false)\n }\n\n return (\n <Loading loading={isLoading}>\n {data &&\n data.map((log) => (\n <div key={log.id} className=\"mb-4\">\n <div className=\"mb-4 font-bold uppercase flex items-center gap-4\">\n <span className=\"w-[70px] heading-text\">\n {dayjs.unix(log.date).format('DD MMMM')}\n </span>\n <div className=\"border-b border-2 border-gray-200 dark:border-gray-600 border-dashed w-full\"></div>\n </div>\n <div className=\"flex flex-col gap-4\">\n {isEmpty(log.events) ? (\n <div>No Activities</div>\n ) : (\n log.events.map((event, index) => (\n <div\n key={event.type + index}\n className=\"flex items-center\"\n >\n <span className=\"font-semibold w-[100px]\">\n {dayjs\n .unix(event.dateTime)\n .format('h:mm A')}\n </span>\n <Card\n className=\"max-w-[600px] w-full\"\n bodyClass=\"py-3\"\n >\n <div className=\"flex items-center gap-4\">\n <div className=\"text-primary text-3xl\">\n <TimeLineMedia\n type={event.type}\n />\n </div>\n <TimeLineContent\n name={customerName}\n type={event.type}\n description={\n event?.description\n }\n />\n </div>\n </Card>\n </div>\n ))\n )}\n </div>\n </div>\n ))}\n <div className=\"text-center\">\n {showNoMoreData ? (\n <span className=\"font-semibold h-[40px] flex items-center justify-center\">\n No more activities\n </span>\n ) : (\n <Button loading={fetchData} onClick={handleLoadMore}>\n Load More\n </Button>\n )}\n </div>\n </Loading>\n )\n}\n\nexport default ActivitySection\n"],"names":["TimeLineMedia","props","type","PiEyeDuotone","PiCloudCheckDuotone","PiCreditCardDuotone","PiTicketDuotone","PiPhoneOutgoingDuotone","jsx","Fragment","TimeLineContent","description","name","jsxs","ActivitySection","customerName","id","data","isLoading","useSWR","_","params","apiGetCustomerLog","fetchData","setfetchData","useState","showNoMoreData","setShowNoMoreData","handleLoadMore","sleep","Loading","log","dayjs","isEmpty","event","index","Card","Button"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BillingSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerDetails/BillingSection.tsx"],"sourcesContent":["import { useState, useMemo } from 'react'\nimport Card from '@/components/ui/Card'\nimport Table from '@/components/ui/Table'\nimport Badge from '@/components/ui/Badge'\nimport Tag from '@/components/ui/Tag'\nimport toast from '@/components/ui/toast'\nimport Button from '@/components/ui/Button'\nimport Notification from '@/components/ui/Notification'\nimport classNames from '@/utils/classNames'\nimport isLastChild from '@/utils/isLastChild'\nimport CreditCardDialog from '@/components/view/CreditCardDialog'\nimport {\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n createColumnHelper,\n} from '@tanstack/react-table'\nimport { NumericFormat } from 'react-number-format'\nimport { countryList } from '@/constants/countries.constant'\nimport dayjs from 'dayjs'\n\ntype OrderHistory = {\n id: string\n item: string\n status: string\n amount: number\n date: number\n}\n\ntype PaymentMethod = {\n cardHolderName: string\n cardType: string\n expMonth: string\n expYear: string\n last4Number: string\n primary: boolean\n}\n\ntype BillingSectionProps = {\n data: Partial<{\n orderHistory: OrderHistory[]\n personalInfo: {\n address: string\n postcode: string\n city: string\n country: string\n }\n paymentMethod: PaymentMethod[]\n }>\n}\n\nconst { Tr, Td, TBody } = Table\n\nconst months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n]\n\nconst statusColor: Record<string, string> = {\n paid: 'bg-emerald-500',\n pending: 'bg-amber-400',\n}\n\nconst columnHelper = createColumnHelper<OrderHistory>()\n\nconst columns = [\n columnHelper.accessor('item', {\n header: 'Product',\n cell: (props) => {\n const row = props.row.original\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold\">{row.item}</span>\n </div>\n )\n },\n }),\n columnHelper.accessor('status', {\n header: 'Status',\n cell: (props) => {\n const row = props.row.original\n return (\n <div className=\"flex items-center gap-2\">\n <Badge className={statusColor[row.status]} />\n <span className=\"heading-text font-bold capitalize\">\n {row.status}\n </span>\n </div>\n )\n },\n }),\n columnHelper.accessor('date', {\n header: 'Date',\n cell: (props) => {\n const row = props.row.original\n return (\n <div className=\"flex items-center\">\n {dayjs.unix(row.date).format('MM/DD/YYYY')}\n </div>\n )\n },\n }),\n columnHelper.accessor('amount', {\n header: 'Amount',\n cell: (props) => {\n const row = props.row.original\n return (\n <div className=\"flex items-center\">\n <NumericFormat\n displayType=\"text\"\n value={(Math.round(row.amount * 100) / 100).toFixed(2)}\n prefix={'$'}\n thousandSeparator={true}\n />\n </div>\n )\n },\n }),\n]\n\nconst initialSelectedCard = {\n cardHolderName: '',\n ccNumber: '',\n cardExpiry: '',\n code: '',\n}\n\nconst BillingSection = ({ data }: BillingSectionProps) => {\n const [selectedCard, setSelectedCard] = useState<{\n cardHolderName: string\n ccNumber: string\n cardExpiry: string\n code: string\n }>(initialSelectedCard)\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const table = useReactTable({\n data: data.orderHistory || [],\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n })\n\n const countryName = useMemo(() => {\n return countryList.find(\n (country) => country.value === data.personalInfo?.country,\n )?.label\n }, [data.personalInfo?.country])\n\n const handleEdit = (cardHolderName: string, cardExpiry: string) => {\n setSelectedCard({\n ...initialSelectedCard,\n cardHolderName,\n cardExpiry,\n })\n setDialogOpen(true)\n }\n\n const handleEditClose = () => {\n setSelectedCard(initialSelectedCard)\n setDialogOpen(false)\n }\n\n const handleSubmit = () => {\n handleEditClose()\n toast.push(\n <Notification title={'Successfully updated!'} type=\"success\" />,\n {\n placement: 'top-center',\n },\n )\n }\n\n return (\n <>\n <h6 className=\"mb-4\">Purchase history</h6>\n <Table>\n <TBody>\n {table\n .getRowModel()\n .rows.slice(0, 10)\n .map((row) => {\n return (\n <Tr key={row.id}>\n {row.getVisibleCells().map((cell) => {\n return (\n <Td key={cell.id}>\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </Td>\n )\n })}\n </Tr>\n )\n })}\n </TBody>\n </Table>\n <h6 className=\"mt-8\">Addresses</h6>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4 mt-4\">\n <Card>\n <div className=\"font-bold heading-text\">\n Billing Address\n </div>\n <div className=\"mt-4 flex flex-col gap-1 font-semibold\">\n <span>{data.personalInfo?.address}</span>\n <span>{data.personalInfo?.city}</span>\n <span>{data.personalInfo?.postcode}</span>\n <span>{countryName}</span>\n </div>\n </Card>\n <Card>\n <div className=\"font-bold heading-text\">\n Delivery Address\n </div>\n <div className=\"mt-4 flex flex-col gap-1 font-semibold\">\n <span>{data.personalInfo?.address}</span>\n <span>{data.personalInfo?.city}</span>\n <span>{data.personalInfo?.postcode}</span>\n <span>{countryName}</span>\n </div>\n </Card>\n </div>\n <h6 className=\"mt-8\">Payment Methods</h6>\n <Card className=\"mt-4\" bodyClass=\"py-0\">\n {data.paymentMethod?.map((card, index) => (\n <div\n key={card.last4Number}\n className={classNames(\n 'flex flex-col lg:flex-row lg:items-center justify-between gap-3 p-4',\n !isLastChild(data.paymentMethod || [], index) &&\n 'border-b border-gray-200 dark:border-gray-600',\n )}\n >\n <div className=\"flex items-center gap-3\">\n {card.cardType === 'VISA' && (\n <img src=\"/img/others/img-8.png\" alt=\"visa\" />\n )}\n {card.cardType === 'MASTER' && (\n <img src=\"/img/others/img-9.png\" alt=\"master\" />\n )}\n <div>\n <div className=\"flex items-center\">\n <div className=\"text-gray-900 dark:text-gray-100 font-semibold\">\n {card.cardHolderName} ••••{' '}\n {card.last4Number}\n </div>\n {card.primary && (\n <Tag className=\"bg-sky-100 text-primary dark:bg-primary/20 dark:text-primary rounded-md border-0 mx-2\">\n <span className=\"capitalize\">\n {' '}\n Primary{' '}\n </span>\n </Tag>\n )}\n </div>\n <span>\n Expired{' '}\n {months[parseInt(card.expMonth) - 1]} 20\n {card.expYear}\n </span>\n </div>\n </div>\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n onClick={() =>\n handleEdit(\n card.cardHolderName,\n `${card.expMonth}${card.expYear}`,\n )\n }\n >\n Edit\n </Button>\n </div>\n </div>\n ))}\n <CreditCardDialog\n title=\"Edit credit card\"\n defaultValues={selectedCard}\n dialogOpen={dialogOpen}\n onDialogClose={handleEditClose}\n onSubmit={handleSubmit}\n />\n </Card>\n </>\n )\n}\n\nexport default BillingSection\n"],"names":["Tr","Td","TBody","Table","months","statusColor","columnHelper","createColumnHelper","columns","props","row","jsx","jsxs","Badge","dayjs","NumericFormat","initialSelectedCard","BillingSection","data","selectedCard","setSelectedCard","useState","dialogOpen","setDialogOpen","table","useReactTable","getCoreRowModel","getSortedRowModel","countryName","useMemo","_a","countryList","country","handleEdit","cardHolderName","cardExpiry","handleEditClose","handleSubmit","toast","Notification","Fragment","cell","flexRender","Card","_b","_c","_d","_e","_f","_g","_h","card","index","classNames","isLastChild","Tag","Button","CreditCardDialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BillingSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerDetails/BillingSection.tsx"],"sourcesContent":["import { useState, useMemo } from 'react'\nimport Card from '@/components/ui/Card'\nimport Table from '@/components/ui/Table'\nimport Badge from '@/components/ui/Badge'\nimport Tag from '@/components/ui/Tag'\nimport toast from '@/components/ui/toast'\nimport Button from '@/components/ui/Button'\nimport Notification from '@/components/ui/Notification'\nimport classNames from '@/utils/classNames'\nimport isLastChild from '@/utils/isLastChild'\nimport CreditCardDialog from '@/components/view/CreditCardDialog'\nimport {\n flexRender,\n getCoreRowModel,\n getSortedRowModel,\n useReactTable,\n createColumnHelper,\n} from '@tanstack/react-table'\nimport { NumericFormat } from 'react-number-format'\nimport { countryList } from '@/constants/countries.constant'\nimport dayjs from 'dayjs'\n\ntype OrderHistory = {\n id: string\n item: string\n status: string\n amount: number\n date: number\n}\n\ntype PaymentMethod = {\n cardHolderName: string\n cardType: string\n expMonth: string\n expYear: string\n last4Number: string\n primary: boolean\n}\n\ntype BillingSectionProps = {\n data: Partial<{\n orderHistory: OrderHistory[]\n personalInfo: {\n address: string\n postcode: string\n city: string\n country: string\n }\n paymentMethod: PaymentMethod[]\n }>\n}\n\nconst { Tr, Td, TBody } = Table\n\nconst months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n]\n\nconst statusColor: Record<string, string> = {\n paid: 'bg-emerald-500',\n pending: 'bg-amber-400',\n}\n\nconst columnHelper = createColumnHelper<OrderHistory>()\n\nconst columns = [\n columnHelper.accessor('item', {\n header: 'Product',\n cell: (props) => {\n const row = props.row.original\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"font-semibold\">{row.item}</span>\n </div>\n )\n },\n }),\n columnHelper.accessor('status', {\n header: 'Status',\n cell: (props) => {\n const row = props.row.original\n return (\n <div className=\"flex items-center gap-2\">\n <Badge className={statusColor[row.status]} />\n <span className=\"heading-text font-bold capitalize\">\n {row.status}\n </span>\n </div>\n )\n },\n }),\n columnHelper.accessor('date', {\n header: 'Date',\n cell: (props) => {\n const row = props.row.original\n return (\n <div className=\"flex items-center\">\n {dayjs.unix(row.date).format('MM/DD/YYYY')}\n </div>\n )\n },\n }),\n columnHelper.accessor('amount', {\n header: 'Amount',\n cell: (props) => {\n const row = props.row.original\n return (\n <div className=\"flex items-center\">\n <NumericFormat\n displayType=\"text\"\n value={(Math.round(row.amount * 100) / 100).toFixed(2)}\n prefix={'$'}\n thousandSeparator={true}\n />\n </div>\n )\n },\n }),\n]\n\nconst initialSelectedCard = {\n cardHolderName: '',\n ccNumber: '',\n cardExpiry: '',\n code: '',\n}\n\nconst BillingSection = ({ data }: BillingSectionProps) => {\n const [selectedCard, setSelectedCard] = useState<{\n cardHolderName: string\n ccNumber: string\n cardExpiry: string\n code: string\n }>(initialSelectedCard)\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const table = useReactTable({\n data: data.orderHistory || [],\n columns,\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n })\n\n const countryName = useMemo(() => {\n return countryList.find(\n (country) => country.value === data.personalInfo?.country,\n )?.label\n }, [data.personalInfo?.country])\n\n const handleEdit = (cardHolderName: string, cardExpiry: string) => {\n setSelectedCard({\n ...initialSelectedCard,\n cardHolderName,\n cardExpiry,\n })\n setDialogOpen(true)\n }\n\n const handleEditClose = () => {\n setSelectedCard(initialSelectedCard)\n setDialogOpen(false)\n }\n\n const handleSubmit = () => {\n handleEditClose()\n toast.push(\n <Notification title={'Successfully updated!'} type=\"success\" />,\n {\n placement: 'top-center',\n },\n )\n }\n\n return (\n <>\n <h6 className=\"mb-4\">Purchase history</h6>\n <Table>\n <TBody>\n {table\n .getRowModel()\n .rows.slice(0, 10)\n .map((row) => {\n return (\n <Tr key={row.id}>\n {row.getVisibleCells().map((cell) => {\n return (\n <Td key={cell.id}>\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext(),\n )}\n </Td>\n )\n })}\n </Tr>\n )\n })}\n </TBody>\n </Table>\n <h6 className=\"mt-8\">Addresses</h6>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4 mt-4\">\n <Card>\n <div className=\"font-bold heading-text\">\n Billing Address\n </div>\n <div className=\"mt-4 flex flex-col gap-1 font-semibold\">\n <span>{data.personalInfo?.address}</span>\n <span>{data.personalInfo?.city}</span>\n <span>{data.personalInfo?.postcode}</span>\n <span>{countryName}</span>\n </div>\n </Card>\n <Card>\n <div className=\"font-bold heading-text\">\n Delivery Address\n </div>\n <div className=\"mt-4 flex flex-col gap-1 font-semibold\">\n <span>{data.personalInfo?.address}</span>\n <span>{data.personalInfo?.city}</span>\n <span>{data.personalInfo?.postcode}</span>\n <span>{countryName}</span>\n </div>\n </Card>\n </div>\n <h6 className=\"mt-8\">Payment Methods</h6>\n <Card className=\"mt-4\" bodyClass=\"py-0\">\n {data.paymentMethod?.map((card, index) => (\n <div\n key={card.last4Number}\n className={classNames(\n 'flex flex-col lg:flex-row lg:items-center justify-between gap-3 p-4',\n !isLastChild(data.paymentMethod || [], index) &&\n 'border-b border-gray-200 dark:border-gray-600',\n )}\n >\n <div className=\"flex items-center gap-3\">\n {card.cardType === 'VISA' && (\n <img src=\"/img/others/img-8.png\" alt=\"visa\" />\n )}\n {card.cardType === 'MASTER' && (\n <img src=\"/img/others/img-9.png\" alt=\"master\" />\n )}\n <div>\n <div className=\"flex items-center\">\n <div className=\"text-gray-900 dark:text-gray-100 font-semibold\">\n {card.cardHolderName} ••••{' '}\n {card.last4Number}\n </div>\n {card.primary && (\n <Tag className=\"bg-sky-100 text-primary dark:bg-primary/20 dark:text-primary rounded-md border-0 mx-2\">\n <span className=\"capitalize\">\n {' '}\n Primary{' '}\n </span>\n </Tag>\n )}\n </div>\n <span>\n Expired{' '}\n {months[parseInt(card.expMonth) - 1]} 20\n {card.expYear}\n </span>\n </div>\n </div>\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n onClick={() =>\n handleEdit(\n card.cardHolderName,\n `${card.expMonth}${card.expYear}`,\n )\n }\n >\n Edit\n </Button>\n </div>\n </div>\n ))}\n <CreditCardDialog\n title=\"Edit credit card\"\n defaultValues={selectedCard}\n dialogOpen={dialogOpen}\n onDialogClose={handleEditClose}\n onSubmit={handleSubmit}\n />\n </Card>\n </>\n )\n}\n\nexport default BillingSection\n"],"names":["Tr","Td","TBody","Table","months","statusColor","columnHelper","createColumnHelper","columns","props","row","jsx","jsxs","Badge","dayjs","NumericFormat","initialSelectedCard","BillingSection","data","selectedCard","setSelectedCard","useState","dialogOpen","setDialogOpen","table","useReactTable","getCoreRowModel","getSortedRowModel","countryName","useMemo","_a","countryList","country","handleEdit","cardHolderName","cardExpiry","handleEditClose","handleSubmit","toast","Notification","Fragment","cell","flexRender","Card","_b","_c","_d","_e","_f","_g","_h","card","index","classNames","isLastChild","Tag","Button","CreditCardDialog"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerDetails/ProfileSection.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport Button from '@/components/ui/Button'\nimport Avatar from '@/components/ui/Avatar/Avatar'\nimport Notification from '@/components/ui/Notification'\nimport Tooltip from '@/components/ui/Tooltip'\nimport toast from '@/components/ui/toast'\nimport ConfirmDialog from '@/components/shared/ConfirmDialog'\nimport dayjs from 'dayjs'\nimport { HiPencil, HiOutlineTrash } from 'react-icons/hi'\nimport {\n FaXTwitter,\n FaFacebookF,\n FaLinkedinIn,\n FaPinterestP,\n} from 'react-icons/fa6'\nimport { useNavigate } from 'react-router-dom'\n\ntype CustomerInfoFieldProps = {\n title?: string\n value?: string\n}\n\ntype ProfileSectionProps = {\n data: Partial<{\n id: string\n img: string\n name: string\n email: string\n lastOnline: number\n personalInfo: {\n location: string\n title: string\n birthday: string\n phoneNumber: string\n facebook: string\n twitter: string\n pinterest: string\n linkedIn: string\n }\n }>\n}\n\nconst CustomerInfoField = ({ title, value }: CustomerInfoFieldProps) => {\n return (\n <div>\n <span className=\"font-semibold\">{title}</span>\n <p className=\"heading-text font-bold\">{value}</p>\n </div>\n )\n}\n\nconst ProfileSection = ({ data = {} }: ProfileSectionProps) => {\n const navigate = useNavigate()\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const handleSocialNavigate = (link: string = '') => {\n window.open(`https://${link}`, '_blank', 'rel=noopener noreferrer')\n }\n\n const handleDialogClose = () => {\n setDialogOpen(false)\n }\n\n const handleDialogOpen = () => {\n setDialogOpen(true)\n }\n\n const handleDelete = () => {\n setDialogOpen(false)\n navigate('/concepts/customers/customer-list')\n toast.push(\n <Notification title={'Successfully Deleted'} type=\"success\">\n Customer successfuly deleted\n </Notification>,\n )\n }\n\n const handleSendMessage = () => {\n navigate('/concepts/chat')\n }\n\n const handleEdit = () => {\n navigate(`/concepts/customers/customer-edit/${data.id}`)\n }\n\n return (\n <Card className=\"w-full\">\n <div className=\"flex justify-end\">\n <Tooltip title=\"Edit customer\">\n <button\n className=\"close-button button-press-feedback\"\n type=\"button\"\n onClick={handleEdit}\n >\n <HiPencil />\n </button>\n </Tooltip>\n </div>\n <div className=\"flex flex-col xl:justify-between h-full 2xl:min-w-[360px] mx-auto\">\n <div className=\"flex xl:flex-col items-center gap-4 mt-6\">\n <Avatar size={90} shape=\"circle\" src={data.img} />\n <h4 className=\"font-bold\">{data.name}</h4>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-1 gap-y-7 gap-x-4 mt-10\">\n <CustomerInfoField title=\"Email\" value={data.email} />\n <CustomerInfoField\n title=\"Phone\"\n value={data.personalInfo?.phoneNumber}\n />\n <CustomerInfoField\n title=\"Date of birth\"\n value={data.personalInfo?.birthday}\n />\n <CustomerInfoField\n title=\"Last Online\"\n value={dayjs\n .unix(data.lastOnline as number)\n .format('DD MMM YYYY hh:mm A')}\n />\n <div className=\"mb-7\">\n <span>Social</span>\n <div className=\"flex mt-4 gap-2\">\n <Button\n size=\"sm\"\n icon={\n <FaFacebookF className=\"text-[#2259f2]\" />\n }\n onClick={() =>\n handleSocialNavigate(\n data.personalInfo?.facebook,\n )\n }\n />\n <Button\n size=\"sm\"\n icon={\n <FaXTwitter className=\"text-black dark:text-white\" />\n }\n onClick={() =>\n handleSocialNavigate(\n data.personalInfo?.twitter,\n )\n }\n />\n <Button\n size=\"sm\"\n icon={\n <FaLinkedinIn className=\"text-[#155fb8]\" />\n }\n onClick={() =>\n handleSocialNavigate(\n data.personalInfo?.linkedIn,\n )\n }\n />\n <Button\n size=\"sm\"\n icon={\n <FaPinterestP className=\"text-[#df0018]\" />\n }\n onClick={() =>\n handleSocialNavigate(\n data.personalInfo?.pinterest,\n )\n }\n />\n </div>\n </div>\n </div>\n <div className=\"flex flex-col gap-4\">\n <Button block variant=\"solid\" onClick={handleSendMessage}>\n Send Messsage\n </Button>\n <Button\n block\n customColorClass={() =>\n 'text-error hover:border-error hover:ring-1 ring-error hover:text-error'\n }\n icon={<HiOutlineTrash />}\n onClick={handleDialogOpen}\n >\n Delete\n </Button>\n </div>\n <ConfirmDialog\n isOpen={dialogOpen}\n type=\"danger\"\n title=\"Delete customer\"\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n onCancel={handleDialogClose}\n onConfirm={handleDelete}\n >\n <p>\n Are you sure you want to delete this customer? All\n record related to this customer will be deleted as well.\n This action cannot be undone.\n </p>\n </ConfirmDialog>\n </div>\n </Card>\n )\n}\n\nexport default ProfileSection\n"],"names":["CustomerInfoField","title","value","jsx","ProfileSection","data","navigate","useNavigate","dialogOpen","setDialogOpen","useState","handleSocialNavigate","link","handleDialogClose","handleDialogOpen","handleDelete","toast","Notification","handleSendMessage","jsxs","Card","Tooltip","HiPencil","Avatar","_a","_b","dayjs","Button","FaFacebookF","FaXTwitter","FaLinkedinIn","FaPinterestP","HiOutlineTrash","ConfirmDialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProfileSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerDetails/ProfileSection.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport Button from '@/components/ui/Button'\nimport Avatar from '@/components/ui/Avatar/Avatar'\nimport Notification from '@/components/ui/Notification'\nimport Tooltip from '@/components/ui/Tooltip'\nimport toast from '@/components/ui/toast'\nimport ConfirmDialog from '@/components/shared/ConfirmDialog'\nimport dayjs from 'dayjs'\nimport { HiPencil, HiOutlineTrash } from 'react-icons/hi'\nimport {\n FaXTwitter,\n FaFacebookF,\n FaLinkedinIn,\n FaPinterestP,\n} from 'react-icons/fa6'\nimport { useNavigate } from 'react-router-dom'\n\ntype CustomerInfoFieldProps = {\n title?: string\n value?: string\n}\n\ntype ProfileSectionProps = {\n data: Partial<{\n id: string\n img: string\n name: string\n email: string\n lastOnline: number\n personalInfo: {\n location: string\n title: string\n birthday: string\n phoneNumber: string\n facebook: string\n twitter: string\n pinterest: string\n linkedIn: string\n }\n }>\n}\n\nconst CustomerInfoField = ({ title, value }: CustomerInfoFieldProps) => {\n return (\n <div>\n <span className=\"font-semibold\">{title}</span>\n <p className=\"heading-text font-bold\">{value}</p>\n </div>\n )\n}\n\nconst ProfileSection = ({ data = {} }: ProfileSectionProps) => {\n const navigate = useNavigate()\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const handleSocialNavigate = (link: string = '') => {\n window.open(`https://${link}`, '_blank', 'rel=noopener noreferrer')\n }\n\n const handleDialogClose = () => {\n setDialogOpen(false)\n }\n\n const handleDialogOpen = () => {\n setDialogOpen(true)\n }\n\n const handleDelete = () => {\n setDialogOpen(false)\n navigate('/concepts/customers/customer-list')\n toast.push(\n <Notification title={'Successfully Deleted'} type=\"success\">\n Customer successfuly deleted\n </Notification>,\n )\n }\n\n const handleSendMessage = () => {\n navigate('/concepts/chat')\n }\n\n const handleEdit = () => {\n navigate(`/concepts/customers/customer-edit/${data.id}`)\n }\n\n return (\n <Card className=\"w-full\">\n <div className=\"flex justify-end\">\n <Tooltip title=\"Edit customer\">\n <button\n className=\"close-button button-press-feedback\"\n type=\"button\"\n onClick={handleEdit}\n >\n <HiPencil />\n </button>\n </Tooltip>\n </div>\n <div className=\"flex flex-col xl:justify-between h-full 2xl:min-w-[360px] mx-auto\">\n <div className=\"flex xl:flex-col items-center gap-4 mt-6\">\n <Avatar size={90} shape=\"circle\" src={data.img} />\n <h4 className=\"font-bold\">{data.name}</h4>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-1 gap-y-7 gap-x-4 mt-10\">\n <CustomerInfoField title=\"Email\" value={data.email} />\n <CustomerInfoField\n title=\"Phone\"\n value={data.personalInfo?.phoneNumber}\n />\n <CustomerInfoField\n title=\"Date of birth\"\n value={data.personalInfo?.birthday}\n />\n <CustomerInfoField\n title=\"Last Online\"\n value={dayjs\n .unix(data.lastOnline as number)\n .format('DD MMM YYYY hh:mm A')}\n />\n <div className=\"mb-7\">\n <span>Social</span>\n <div className=\"flex mt-4 gap-2\">\n <Button\n size=\"sm\"\n icon={\n <FaFacebookF className=\"text-[#2259f2]\" />\n }\n onClick={() =>\n handleSocialNavigate(\n data.personalInfo?.facebook,\n )\n }\n />\n <Button\n size=\"sm\"\n icon={\n <FaXTwitter className=\"text-black dark:text-white\" />\n }\n onClick={() =>\n handleSocialNavigate(\n data.personalInfo?.twitter,\n )\n }\n />\n <Button\n size=\"sm\"\n icon={\n <FaLinkedinIn className=\"text-[#155fb8]\" />\n }\n onClick={() =>\n handleSocialNavigate(\n data.personalInfo?.linkedIn,\n )\n }\n />\n <Button\n size=\"sm\"\n icon={\n <FaPinterestP className=\"text-[#df0018]\" />\n }\n onClick={() =>\n handleSocialNavigate(\n data.personalInfo?.pinterest,\n )\n }\n />\n </div>\n </div>\n </div>\n <div className=\"flex flex-col gap-4\">\n <Button block variant=\"solid\" onClick={handleSendMessage}>\n Send Messsage\n </Button>\n <Button\n block\n customColorClass={() =>\n 'text-error hover:border-error hover:ring-1 ring-error hover:text-error'\n }\n icon={<HiOutlineTrash />}\n onClick={handleDialogOpen}\n >\n Delete\n </Button>\n </div>\n <ConfirmDialog\n isOpen={dialogOpen}\n type=\"danger\"\n title=\"Delete customer\"\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n onCancel={handleDialogClose}\n onConfirm={handleDelete}\n >\n <p>\n Are you sure you want to delete this customer? All\n record related to this customer will be deleted as well.\n This action cannot be undone.\n </p>\n </ConfirmDialog>\n </div>\n </Card>\n )\n}\n\nexport default ProfileSection\n"],"names":["CustomerInfoField","title","value","jsx","ProfileSection","data","navigate","useNavigate","dialogOpen","setDialogOpen","useState","handleSocialNavigate","link","handleDialogClose","handleDialogOpen","handleDelete","toast","Notification","handleSendMessage","jsxs","Card","Tooltip","HiPencil","Avatar","_a","_b","dayjs","Button","FaFacebookF","FaXTwitter","FaLinkedinIn","FaPinterestP","HiOutlineTrash","ConfirmDialog"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerEdit.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerEdit/CustomerEdit.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Container from '@/components/shared/Container'\nimport Button from '@/components/ui/Button'\nimport Notification from '@/components/ui/Notification'\nimport toast from '@/components/ui/toast'\nimport ConfirmDialog from '@/components/shared/ConfirmDialog'\nimport { apiGetCustomer } from '@/services/CustomersService'\nimport CustomerForm from '../CustomerForm'\nimport sleep from '@/utils/sleep'\nimport NoUserFound from '@/assets/svg/NoUserFound'\nimport { TbTrash, TbArrowNarrowLeft } from 'react-icons/tb'\nimport { useParams, useNavigate } from 'react-router-dom'\nimport useSWR from 'swr'\nimport type { CustomerFormSchema } from '../CustomerForm'\nimport type { Customer } from '../CustomerList/types'\n\nconst CustomerEdit = () => {\n const { id } = useParams()\n\n const navigate = useNavigate()\n\n const { data, isLoading } = useSWR(\n [`/api/customers${id}`, { id: id as string }],\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ([_, params]) => apiGetCustomer<Customer, { id: string }>(params),\n {\n revalidateOnFocus: false,\n revalidateIfStale: false,\n },\n )\n\n const [deleteConfirmationOpen, setDeleteConfirmationOpen] = useState(false)\n const [isSubmiting, setIsSubmiting] = useState(false)\n\n const handleFormSubmit = async (values: CustomerFormSchema) => {\n console.log('Submitted values', values)\n setIsSubmiting(true)\n await sleep(800)\n setIsSubmiting(false)\n toast.push(<Notification type=\"success\">Changes Saved!</Notification>, {\n placement: 'top-center',\n })\n navigate('/concepts/customers/customer-list')\n }\n\n const getDefaultValues = () => {\n if (data) {\n const { firstName, lastName, email, personalInfo, img } = data\n\n return {\n firstName,\n lastName,\n email,\n img,\n phoneNumber: personalInfo.phoneNumber,\n dialCode: personalInfo.dialCode,\n country: personalInfo.country,\n address: personalInfo.address,\n city: personalInfo.city,\n postcode: personalInfo.postcode,\n tags: [],\n }\n }\n\n return {}\n }\n\n const handleConfirmDelete = () => {\n setDeleteConfirmationOpen(true)\n toast.push(\n <Notification type=\"success\">Customer deleted!</Notification>,\n { placement: 'top-center' },\n )\n navigate('/concepts/customers/customer-list')\n }\n\n const handleDelete = () => {\n setDeleteConfirmationOpen(true)\n }\n\n const handleCancel = () => {\n setDeleteConfirmationOpen(false)\n }\n\n const handleBack = () => {\n history.back()\n }\n\n return (\n <>\n {!isLoading && !data && (\n <div className=\"h-full flex flex-col items-center justify-center\">\n <NoUserFound height={280} width={280} />\n <h3 className=\"mt-8\">No user found!</h3>\n </div>\n )}\n {!isLoading && data && (\n <>\n <CustomerForm\n defaultValues={getDefaultValues() as CustomerFormSchema}\n newCustomer={false}\n onFormSubmit={handleFormSubmit}\n >\n <Container>\n <div className=\"flex items-center justify-between px-8\">\n <Button\n className=\"ltr:mr-3 rtl:ml-3\"\n type=\"button\"\n variant=\"plain\"\n icon={<TbArrowNarrowLeft />}\n onClick={handleBack}\n >\n Back\n </Button>\n <div className=\"flex items-center\">\n <Button\n className=\"ltr:mr-3 rtl:ml-3\"\n type=\"button\"\n customColorClass={() =>\n 'border-error ring-1 ring-error text-error hover:border-error hover:ring-error hover:text-error bg-transparent'\n }\n icon={<TbTrash />}\n onClick={handleDelete}\n >\n Delete\n </Button>\n <Button\n variant=\"solid\"\n type=\"submit\"\n loading={isSubmiting}\n >\n Save\n </Button>\n </div>\n </div>\n </Container>\n </CustomerForm>\n <ConfirmDialog\n isOpen={deleteConfirmationOpen}\n type=\"danger\"\n title=\"Remove customers\"\n onClose={handleCancel}\n onRequestClose={handleCancel}\n onCancel={handleCancel}\n onConfirm={handleConfirmDelete}\n >\n <p>\n Are you sure you want to remove this customer? This\n action can't be undo.{' '}\n </p>\n </ConfirmDialog>\n </>\n )}\n </>\n )\n}\n\nexport default CustomerEdit\n"],"names":["CustomerEdit","id","useParams","navigate","useNavigate","data","isLoading","useSWR","_","params","apiGetCustomer","deleteConfirmationOpen","setDeleteConfirmationOpen","useState","isSubmiting","setIsSubmiting","handleFormSubmit","values","sleep","toast","jsx","Notification","getDefaultValues","firstName","lastName","email","personalInfo","img","handleConfirmDelete","handleDelete","handleCancel","handleBack","jsxs","Fragment","NoUserFound","CustomerForm","Container","Button","TbArrowNarrowLeft","TbTrash","ConfirmDialog"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,MAAMA,KAAe,MAAM;AACvB,QAAM,EAAE,IAAAC,EAAA,IAAOC,EAAA,GAETC,IAAWC,EAAA,GAEX,EAAE,MAAAC,GAAM,WAAAC,EAAA,IAAcC;AAAA,IACxB,CAAC,iBAAiBN,CAAE,IAAI,EAAE,IAAAA,GAAkB;AAAA;AAAA,IAE5C,CAAC,CAACO,GAAGC,CAAM,MAAMC,EAAyCD,CAAM;AAAA,IAChE;AAAA,MACI,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,IAAA;AAAA,EACvB,GAGE,CAACE,GAAwBC,CAAyB,IAAIC,EAAS,EAAK,GACpE,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAK,GAE9CG,IAAmB,OAAOC,MAA+B;AAC3D,YAAQ,IAAI,oBAAoBA,CAAM,GACtCF,EAAe,EAAI,GACnB,MAAMG,EAAM,GAAG,GACfH,EAAe,EAAK,GACpBI,EAAM,KAAK,gBAAAC,EAACC,GAAA,EAAa,MAAK,WAAU,4BAAc,GAAiB;AAAA,MACnE,WAAW;AAAA,IAAA,CACd,GACDlB,EAAS,mCAAmC;AAAA,
|
|
1
|
+
{"version":3,"file":"CustomerEdit.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerEdit/CustomerEdit.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Container from '@/components/shared/Container'\nimport Button from '@/components/ui/Button'\nimport Notification from '@/components/ui/Notification'\nimport toast from '@/components/ui/toast'\nimport ConfirmDialog from '@/components/shared/ConfirmDialog'\nimport { apiGetCustomer } from '@/services/CustomersService'\nimport CustomerForm from '../CustomerForm'\nimport sleep from '@/utils/sleep'\nimport NoUserFound from '@/assets/svg/NoUserFound'\nimport { TbTrash, TbArrowNarrowLeft } from 'react-icons/tb'\nimport { useParams, useNavigate } from 'react-router-dom'\nimport useSWR from 'swr'\nimport type { CustomerFormSchema } from '../CustomerForm'\nimport type { Customer } from '../CustomerList/types'\n\nconst CustomerEdit = () => {\n const { id } = useParams()\n\n const navigate = useNavigate()\n\n const { data, isLoading } = useSWR(\n [`/api/customers${id}`, { id: id as string }],\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ([_, params]) => apiGetCustomer<Customer, { id: string }>(params),\n {\n revalidateOnFocus: false,\n revalidateIfStale: false,\n },\n )\n\n const [deleteConfirmationOpen, setDeleteConfirmationOpen] = useState(false)\n const [isSubmiting, setIsSubmiting] = useState(false)\n\n const handleFormSubmit = async (values: CustomerFormSchema) => {\n console.log('Submitted values', values)\n setIsSubmiting(true)\n await sleep(800)\n setIsSubmiting(false)\n toast.push(<Notification type=\"success\">Changes Saved!</Notification>, {\n placement: 'top-center',\n })\n navigate('/concepts/customers/customer-list')\n }\n\n const getDefaultValues = () => {\n if (data) {\n const { firstName, lastName, email, personalInfo, img } = data\n\n return {\n firstName,\n lastName,\n email,\n img,\n phoneNumber: personalInfo.phoneNumber,\n dialCode: personalInfo.dialCode,\n country: personalInfo.country,\n address: personalInfo.address,\n city: personalInfo.city,\n postcode: personalInfo.postcode,\n tags: [],\n }\n }\n\n return {}\n }\n\n const handleConfirmDelete = () => {\n setDeleteConfirmationOpen(true)\n toast.push(\n <Notification type=\"success\">Customer deleted!</Notification>,\n { placement: 'top-center' },\n )\n navigate('/concepts/customers/customer-list')\n }\n\n const handleDelete = () => {\n setDeleteConfirmationOpen(true)\n }\n\n const handleCancel = () => {\n setDeleteConfirmationOpen(false)\n }\n\n const handleBack = () => {\n history.back()\n }\n\n return (\n <>\n {!isLoading && !data && (\n <div className=\"h-full flex flex-col items-center justify-center\">\n <NoUserFound height={280} width={280} />\n <h3 className=\"mt-8\">No user found!</h3>\n </div>\n )}\n {!isLoading && data && (\n <>\n <CustomerForm\n defaultValues={getDefaultValues() as CustomerFormSchema}\n newCustomer={false}\n onFormSubmit={handleFormSubmit}\n >\n <Container>\n <div className=\"flex items-center justify-between px-8\">\n <Button\n className=\"ltr:mr-3 rtl:ml-3\"\n type=\"button\"\n variant=\"plain\"\n icon={<TbArrowNarrowLeft />}\n onClick={handleBack}\n >\n Back\n </Button>\n <div className=\"flex items-center\">\n <Button\n className=\"ltr:mr-3 rtl:ml-3\"\n type=\"button\"\n customColorClass={() =>\n 'border-error ring-1 ring-error text-error hover:border-error hover:ring-error hover:text-error bg-transparent'\n }\n icon={<TbTrash />}\n onClick={handleDelete}\n >\n Delete\n </Button>\n <Button\n variant=\"solid\"\n type=\"submit\"\n loading={isSubmiting}\n >\n Save\n </Button>\n </div>\n </div>\n </Container>\n </CustomerForm>\n <ConfirmDialog\n isOpen={deleteConfirmationOpen}\n type=\"danger\"\n title=\"Remove customers\"\n onClose={handleCancel}\n onRequestClose={handleCancel}\n onCancel={handleCancel}\n onConfirm={handleConfirmDelete}\n >\n <p>\n Are you sure you want to remove this customer? This\n action can't be undo.{' '}\n </p>\n </ConfirmDialog>\n </>\n )}\n </>\n )\n}\n\nexport default CustomerEdit\n"],"names":["CustomerEdit","id","useParams","navigate","useNavigate","data","isLoading","useSWR","_","params","apiGetCustomer","deleteConfirmationOpen","setDeleteConfirmationOpen","useState","isSubmiting","setIsSubmiting","handleFormSubmit","values","sleep","toast","jsx","Notification","getDefaultValues","firstName","lastName","email","personalInfo","img","handleConfirmDelete","handleDelete","handleCancel","handleBack","jsxs","Fragment","NoUserFound","CustomerForm","Container","Button","TbArrowNarrowLeft","TbTrash","ConfirmDialog"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerForm/AccountSection.tsx"],"sourcesContent":["import Card from '@/components/ui/Card'\nimport Switcher from '@/components/ui/Switcher'\nimport { FormItem } from '@/components/ui/Form'\nimport { Controller } from 'react-hook-form'\nimport type { FormSectionBaseProps } from './types'\n\ntype AccountSectionProps = FormSectionBaseProps\n\nconst AccountSection = ({ control }: AccountSectionProps) => {\n return (\n <Card>\n <h4>Account</h4>\n <div className=\"mt-6\">\n <FormItem>\n <Controller\n name=\"banAccount\"\n control={control}\n render={({ field }) => (\n <div className=\"flex items-center justify-between gap-8\">\n <div>\n <h6>Banned</h6>\n <p>Disable this account</p>\n </div>\n <Switcher\n checked={field.value}\n onChange={(checked) => {\n field.onChange(checked)\n }}\n />\n </div>\n )}\n />\n </FormItem>\n <FormItem className=\"mb-0\">\n <Controller\n name=\"accountVerified\"\n control={control}\n render={({ field }) => (\n <div className=\"flex items-center justify-between gap-8\">\n <div>\n <h6>Account Verified</h6>\n <p>\n Disabling sends a verification request\n to the customer.\n </p>\n </div>\n <Switcher\n checked={field.value}\n onChange={(checked) => {\n field.onChange(checked)\n }}\n />\n </div>\n )}\n />\n </FormItem>\n </div>\n </Card>\n )\n}\n\nexport default AccountSection\n"],"names":["AccountSection","control","Card","jsx","jsxs","FormItem","Controller","field","Switcher","checked"],"mappings":";;;;;;;;AAQA,MAAMA,IAAiB,CAAC,EAAE,SAAAC,0BAEjBC,GAAA,EACG,UAAA;AAAA,EAAA,gBAAAC,EAAC,QAAG,UAAA,UAAA,CAAO;AAAA,EACX,gBAAAC,EAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,IAAA,gBAAAD,EAACE,GAAA,EACG,UAAA,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QACG,MAAK;AAAA,QACL,SAAAL;AAAA,QACA,QAAQ,CAAC,EAAE,OAAAM,QACP,gBAAAH,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EACG,UAAA;AAAA,YAAA,gBAAAD,EAAC,QAAG,UAAA,SAAA,CAAM;AAAA,YACV,gBAAAA,EAAC,OAAE,UAAA,uBAAA,CAAoB;AAAA,UAAA,GAC3B;AAAA,UACA,gBAAAA;AAAA,YAACK;AAAA,YAAA;AAAA,cACG,SAASD,EAAM;AAAA,cACf,UAAU,CAACE,MAAY;AACnB,gBAAAF,EAAM,SAASE,CAAO;AAAA,
|
|
1
|
+
{"version":3,"file":"AccountSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerForm/AccountSection.tsx"],"sourcesContent":["import Card from '@/components/ui/Card'\nimport Switcher from '@/components/ui/Switcher'\nimport { FormItem } from '@/components/ui/Form'\nimport { Controller } from 'react-hook-form'\nimport type { FormSectionBaseProps } from './types'\n\ntype AccountSectionProps = FormSectionBaseProps\n\nconst AccountSection = ({ control }: AccountSectionProps) => {\n return (\n <Card>\n <h4>Account</h4>\n <div className=\"mt-6\">\n <FormItem>\n <Controller\n name=\"banAccount\"\n control={control}\n render={({ field }) => (\n <div className=\"flex items-center justify-between gap-8\">\n <div>\n <h6>Banned</h6>\n <p>Disable this account</p>\n </div>\n <Switcher\n checked={field.value}\n onChange={(checked) => {\n field.onChange(checked)\n }}\n />\n </div>\n )}\n />\n </FormItem>\n <FormItem className=\"mb-0\">\n <Controller\n name=\"accountVerified\"\n control={control}\n render={({ field }) => (\n <div className=\"flex items-center justify-between gap-8\">\n <div>\n <h6>Account Verified</h6>\n <p>\n Disabling sends a verification request\n to the customer.\n </p>\n </div>\n <Switcher\n checked={field.value}\n onChange={(checked) => {\n field.onChange(checked)\n }}\n />\n </div>\n )}\n />\n </FormItem>\n </div>\n </Card>\n )\n}\n\nexport default AccountSection\n"],"names":["AccountSection","control","Card","jsx","jsxs","FormItem","Controller","field","Switcher","checked"],"mappings":";;;;;;;;AAQA,MAAMA,IAAiB,CAAC,EAAE,SAAAC,0BAEjBC,GAAA,EACG,UAAA;AAAA,EAAA,gBAAAC,EAAC,QAAG,UAAA,UAAA,CAAO;AAAA,EACX,gBAAAC,EAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,IAAA,gBAAAD,EAACE,GAAA,EACG,UAAA,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QACG,MAAK;AAAA,QACL,SAAAL;AAAA,QACA,QAAQ,CAAC,EAAE,OAAAM,QACP,gBAAAH,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EACG,UAAA;AAAA,YAAA,gBAAAD,EAAC,QAAG,UAAA,SAAA,CAAM;AAAA,YACV,gBAAAA,EAAC,OAAE,UAAA,uBAAA,CAAoB;AAAA,UAAA,GAC3B;AAAA,UACA,gBAAAA;AAAA,YAACK;AAAA,YAAA;AAAA,cACG,SAASD,EAAM;AAAA,cACf,UAAU,CAACE,MAAY;AACnB,gBAAAF,EAAM,SAASE,CAAO;AAAA,cAC1B;AAAA,YAAA;AAAA,UAAA;AAAA,QACJ,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA,GAGZ;AAAA,IACA,gBAAAN,EAACE,GAAA,EAAS,WAAU,QAChB,UAAA,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QACG,MAAK;AAAA,QACL,SAAAL;AAAA,QACA,QAAQ,CAAC,EAAE,OAAAM,QACP,gBAAAH,EAAC,OAAA,EAAI,WAAU,2CACX,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EACG,UAAA;AAAA,YAAA,gBAAAD,EAAC,QAAG,UAAA,mBAAA,CAAgB;AAAA,YACpB,gBAAAA,EAAC,OAAE,UAAA,0DAAA,CAGH;AAAA,UAAA,GACJ;AAAA,UACA,gBAAAA;AAAA,YAACK;AAAA,YAAA;AAAA,cACG,SAASD,EAAM;AAAA,cACf,UAAU,CAACE,MAAY;AACnB,gBAAAF,EAAM,SAASE,CAAO;AAAA,cAC1B;AAAA,YAAA;AAAA,UAAA;AAAA,QACJ,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA,EAER,CACJ;AAAA,EAAA,EAAA,CACJ;AAAA,GACJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerForm.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerForm/CustomerForm.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { Form } from '@/components/ui/Form'\nimport Container from '@/components/shared/Container'\nimport BottomStickyBar from '@/components/template/BottomStickyBar'\nimport OverviewSection from './OverviewSection'\nimport AddressSection from './AddressSection'\nimport TagsSection from './TagsSection'\nimport ProfileImageSection from './ProfileImageSection'\nimport AccountSection from './AccountSection'\nimport isEmpty from 'lodash/isEmpty'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { z } from 'zod'\nimport type { ZodType } from 'zod'\nimport type { CommonProps } from '@/@types/common'\nimport type { CustomerFormSchema } from './types'\n\ntype CustomerFormProps = {\n onFormSubmit: (values: CustomerFormSchema) => void\n defaultValues?: CustomerFormSchema\n newCustomer?: boolean\n} & CommonProps\n\nconst validationSchema: ZodType<CustomerFormSchema> = z.object({\n firstName: z.string().min(1, { message: 'First name required' }),\n lastName: z.string().min(1, { message: 'Last name required' }),\n email: z\n .string()\n .min(1, { message: 'Email required' })\n .email({ message: 'Invalid email' }),\n dialCode: z.string().min(1, { message: 'Please select your country code' }),\n phoneNumber: z\n .string()\n .min(1, { message: 'Please input your mobile number' }),\n country: z.string().min(1, { message: 'Please select a country' }),\n address: z.string().min(1, { message: 'Addrress required' }),\n postcode: z.string().min(1, { message: 'Postcode required' }),\n city: z.string().min(1, { message: 'City required' }),\n img: z.string(),\n tags: z.array(z.object({ value: z.string(), label: z.string() })),\n})\n\nconst CustomerForm = (props: CustomerFormProps) => {\n const {\n onFormSubmit,\n defaultValues = {},\n newCustomer = false,\n children,\n } = props\n\n const {\n handleSubmit,\n reset,\n formState: { errors },\n control,\n } = useForm<CustomerFormSchema>({\n defaultValues: {\n ...{\n banAccount: false,\n accountVerified: true,\n },\n ...defaultValues,\n },\n resolver: zodResolver(validationSchema),\n })\n\n useEffect(() => {\n if (!isEmpty(defaultValues)) {\n reset(defaultValues)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(defaultValues)])\n\n const onSubmit = (values: CustomerFormSchema) => {\n onFormSubmit?.(values)\n }\n\n return (\n <Form\n className=\"flex w-full h-full\"\n containerClassName=\"flex flex-col w-full justify-between\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <Container>\n <div className=\"flex flex-col md:flex-row gap-4\">\n <div className=\"gap-4 flex flex-col flex-auto\">\n <OverviewSection control={control} errors={errors} />\n <AddressSection control={control} errors={errors} />\n </div>\n <div className=\"md:w-[370px] gap-4 flex flex-col\">\n <ProfileImageSection\n control={control}\n errors={errors}\n />\n <TagsSection control={control} errors={errors} />\n {!newCustomer && (\n <AccountSection control={control} errors={errors} />\n )}\n </div>\n </div>\n </Container>\n <BottomStickyBar>{children}</BottomStickyBar>\n </Form>\n )\n}\n\nexport default CustomerForm\n"],"names":["validationSchema","z","CustomerForm","props","onFormSubmit","defaultValues","newCustomer","children","handleSubmit","reset","errors","control","useForm","zodResolver","useEffect","isEmpty","jsxs","Form","values","jsx","Container","OverviewSection","AddressSection","ProfileImageSection","TagsSection","AccountSection","BottomStickyBar"],"mappings":";;;;;;;;;;;;;;;AAuBA,MAAMA,IAAgDC,EAAE,OAAO;AAAA,EAC3D,WAAWA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,uBAAuB;AAAA,EAC/D,UAAUA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,sBAAsB;AAAA,EAC7D,OAAOA,EACF,SACA,IAAI,GAAG,EAAE,SAAS,iBAAA,CAAkB,EACpC,MAAM,EAAE,SAAS,iBAAiB;AAAA,EACvC,UAAUA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,mCAAmC;AAAA,EAC1E,aAAaA,EACR,SACA,IAAI,GAAG,EAAE,SAAS,mCAAmC;AAAA,EAC1D,SAASA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,2BAA2B;AAAA,EACjE,SAASA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,qBAAqB;AAAA,EAC3D,UAAUA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,qBAAqB;AAAA,EAC5D,MAAMA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,iBAAiB;AAAA,EACpD,KAAKA,EAAE,OAAA;AAAA,EACP,MAAMA,EAAE,MAAMA,EAAE,OAAO,EAAE,OAAOA,EAAE,OAAA,GAAU,OAAOA,EAAE,OAAA,EAAO,CAAG,CAAC;AACpE,CAAC,GAEKC,IAAe,CAACC,MAA6B;AAC/C,QAAM;AAAA,IACF,cAAAC;AAAA,IACA,eAAAC,IAAgB,CAAA;AAAA,IAChB,aAAAC,IAAc;AAAA,IACd,UAAAC;AAAA,EAAA,IACAJ,GAEE;AAAA,IACF,cAAAK;AAAA,IACA,OAAAC;AAAA,IACA,WAAW,EAAE,QAAAC,EAAA;AAAA,IACb,SAAAC;AAAA,EAAA,IACAC,EAA4B;AAAA,IAC5B,eAAe;AAAA,MAEP,YAAY;AAAA,MACZ,iBAAiB;AAAA,MAErB,GAAGP;AAAA,IAAA;AAAA,IAEP,UAAUQ,EAAYb,CAAgB;AAAA,EAAA,CACzC;AAED,SAAAc,EAAU,MAAM;AACZ,IAAKC,EAAQV,CAAa,KACtBI,EAAMJ,CAAa;AAAA,
|
|
1
|
+
{"version":3,"file":"CustomerForm.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerForm/CustomerForm.tsx"],"sourcesContent":["import { useEffect } from 'react'\nimport { Form } from '@/components/ui/Form'\nimport Container from '@/components/shared/Container'\nimport BottomStickyBar from '@/components/template/BottomStickyBar'\nimport OverviewSection from './OverviewSection'\nimport AddressSection from './AddressSection'\nimport TagsSection from './TagsSection'\nimport ProfileImageSection from './ProfileImageSection'\nimport AccountSection from './AccountSection'\nimport isEmpty from 'lodash/isEmpty'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { useForm } from 'react-hook-form'\nimport { z } from 'zod'\nimport type { ZodType } from 'zod'\nimport type { CommonProps } from '@/@types/common'\nimport type { CustomerFormSchema } from './types'\n\ntype CustomerFormProps = {\n onFormSubmit: (values: CustomerFormSchema) => void\n defaultValues?: CustomerFormSchema\n newCustomer?: boolean\n} & CommonProps\n\nconst validationSchema: ZodType<CustomerFormSchema> = z.object({\n firstName: z.string().min(1, { message: 'First name required' }),\n lastName: z.string().min(1, { message: 'Last name required' }),\n email: z\n .string()\n .min(1, { message: 'Email required' })\n .email({ message: 'Invalid email' }),\n dialCode: z.string().min(1, { message: 'Please select your country code' }),\n phoneNumber: z\n .string()\n .min(1, { message: 'Please input your mobile number' }),\n country: z.string().min(1, { message: 'Please select a country' }),\n address: z.string().min(1, { message: 'Addrress required' }),\n postcode: z.string().min(1, { message: 'Postcode required' }),\n city: z.string().min(1, { message: 'City required' }),\n img: z.string(),\n tags: z.array(z.object({ value: z.string(), label: z.string() })),\n})\n\nconst CustomerForm = (props: CustomerFormProps) => {\n const {\n onFormSubmit,\n defaultValues = {},\n newCustomer = false,\n children,\n } = props\n\n const {\n handleSubmit,\n reset,\n formState: { errors },\n control,\n } = useForm<CustomerFormSchema>({\n defaultValues: {\n ...{\n banAccount: false,\n accountVerified: true,\n },\n ...defaultValues,\n },\n resolver: zodResolver(validationSchema),\n })\n\n useEffect(() => {\n if (!isEmpty(defaultValues)) {\n reset(defaultValues)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(defaultValues)])\n\n const onSubmit = (values: CustomerFormSchema) => {\n onFormSubmit?.(values)\n }\n\n return (\n <Form\n className=\"flex w-full h-full\"\n containerClassName=\"flex flex-col w-full justify-between\"\n onSubmit={handleSubmit(onSubmit)}\n >\n <Container>\n <div className=\"flex flex-col md:flex-row gap-4\">\n <div className=\"gap-4 flex flex-col flex-auto\">\n <OverviewSection control={control} errors={errors} />\n <AddressSection control={control} errors={errors} />\n </div>\n <div className=\"md:w-[370px] gap-4 flex flex-col\">\n <ProfileImageSection\n control={control}\n errors={errors}\n />\n <TagsSection control={control} errors={errors} />\n {!newCustomer && (\n <AccountSection control={control} errors={errors} />\n )}\n </div>\n </div>\n </Container>\n <BottomStickyBar>{children}</BottomStickyBar>\n </Form>\n )\n}\n\nexport default CustomerForm\n"],"names":["validationSchema","z","CustomerForm","props","onFormSubmit","defaultValues","newCustomer","children","handleSubmit","reset","errors","control","useForm","zodResolver","useEffect","isEmpty","jsxs","Form","values","jsx","Container","OverviewSection","AddressSection","ProfileImageSection","TagsSection","AccountSection","BottomStickyBar"],"mappings":";;;;;;;;;;;;;;;AAuBA,MAAMA,IAAgDC,EAAE,OAAO;AAAA,EAC3D,WAAWA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,uBAAuB;AAAA,EAC/D,UAAUA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,sBAAsB;AAAA,EAC7D,OAAOA,EACF,SACA,IAAI,GAAG,EAAE,SAAS,iBAAA,CAAkB,EACpC,MAAM,EAAE,SAAS,iBAAiB;AAAA,EACvC,UAAUA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,mCAAmC;AAAA,EAC1E,aAAaA,EACR,SACA,IAAI,GAAG,EAAE,SAAS,mCAAmC;AAAA,EAC1D,SAASA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,2BAA2B;AAAA,EACjE,SAASA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,qBAAqB;AAAA,EAC3D,UAAUA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,qBAAqB;AAAA,EAC5D,MAAMA,EAAE,SAAS,IAAI,GAAG,EAAE,SAAS,iBAAiB;AAAA,EACpD,KAAKA,EAAE,OAAA;AAAA,EACP,MAAMA,EAAE,MAAMA,EAAE,OAAO,EAAE,OAAOA,EAAE,OAAA,GAAU,OAAOA,EAAE,OAAA,EAAO,CAAG,CAAC;AACpE,CAAC,GAEKC,IAAe,CAACC,MAA6B;AAC/C,QAAM;AAAA,IACF,cAAAC;AAAA,IACA,eAAAC,IAAgB,CAAA;AAAA,IAChB,aAAAC,IAAc;AAAA,IACd,UAAAC;AAAA,EAAA,IACAJ,GAEE;AAAA,IACF,cAAAK;AAAA,IACA,OAAAC;AAAA,IACA,WAAW,EAAE,QAAAC,EAAA;AAAA,IACb,SAAAC;AAAA,EAAA,IACAC,EAA4B;AAAA,IAC5B,eAAe;AAAA,MAEP,YAAY;AAAA,MACZ,iBAAiB;AAAA,MAErB,GAAGP;AAAA,IAAA;AAAA,IAEP,UAAUQ,EAAYb,CAAgB;AAAA,EAAA,CACzC;AAED,SAAAc,EAAU,MAAM;AACZ,IAAKC,EAAQV,CAAa,KACtBI,EAAMJ,CAAa;AAAA,EAG3B,GAAG,CAAC,KAAK,UAAUA,CAAa,CAAC,CAAC,GAO9B,gBAAAW;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,oBAAmB;AAAA,MACnB,UAAUT,EARD,CAACU,MAA+B;AAC7C,QAAAd,KAAA,QAAAA,EAAec;AAAA,MACnB,CAMuC;AAAA,MAE/B,UAAA;AAAA,QAAA,gBAAAC,EAACC,GAAA,EACG,UAAA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,mCACX,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iCACX,UAAA;AAAA,YAAA,gBAAAG,EAACE,GAAA,EAAgB,SAAAV,GAAkB,QAAAD,EAAA,CAAgB;AAAA,YACnD,gBAAAS,EAACG,GAAA,EAAe,SAAAX,GAAkB,QAAAD,EAAA,CAAgB;AAAA,UAAA,GACtD;AAAA,UACA,gBAAAM,EAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,YAAA,gBAAAG;AAAA,cAACI;AAAAA,cAAA;AAAA,gBACG,SAAAZ;AAAA,gBACA,QAAAD;AAAA,cAAA;AAAA,YAAA;AAAA,YAEJ,gBAAAS,EAACK,GAAA,EAAY,SAAAb,GAAkB,QAAAD,EAAA,CAAgB;AAAA,YAC9C,CAACJ,KACE,gBAAAa,EAACM,GAAA,EAAe,SAAAd,GAAkB,QAAAD,EAAA,CAAgB;AAAA,UAAA,EAAA,CAE1D;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,QACA,gBAAAS,EAACO,KAAiB,UAAAnB,EAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGvC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverviewSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerForm/OverviewSection.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport Card from '@/components/ui/Card'\nimport Input from '@/components/ui/Input'\nimport Select, { Option as DefaultOption } from '@/components/ui/Select'\nimport Avatar from '@/components/ui/Avatar'\nimport { FormItem } from '@/components/ui/Form'\nimport NumericInput from '@/components/shared/NumericInput'\nimport { countryList } from '@/constants/countries.constant'\nimport { Controller } from 'react-hook-form'\nimport { components } from 'react-select'\nimport type { FormSectionBaseProps } from './types'\nimport type { ControlProps, OptionProps } from 'react-select'\n\ntype OverviewSectionProps = FormSectionBaseProps\n\ntype CountryOption = {\n label: string\n dialCode: string\n value: string\n}\n\nconst { Control } = components\n\nconst CustomSelectOption = (props: OptionProps<CountryOption>) => {\n return (\n <DefaultOption<CountryOption>\n {...props}\n customLabel={(data) => (\n <span className=\"flex items-center gap-2\">\n <Avatar\n shape=\"circle\"\n size={20}\n src={`/img/countries/${data.value}.png`}\n />\n <span>{data.dialCode}</span>\n </span>\n )}\n />\n )\n}\n\nconst CustomControl = ({ children, ...props }: ControlProps<CountryOption>) => {\n const selected = props.getValue()[0]\n return (\n <Control {...props}>\n {selected && (\n <Avatar\n className=\"ltr:ml-4 rtl:mr-4\"\n shape=\"circle\"\n size={20}\n src={`/img/countries/${selected.value}.png`}\n />\n )}\n {children}\n </Control>\n )\n}\n\nconst OverviewSection = ({ control, errors }: OverviewSectionProps) => {\n const dialCodeList = useMemo(() => {\n const newCountryList: Array<CountryOption> = JSON.parse(\n JSON.stringify(countryList),\n )\n\n return newCountryList.map((country) => {\n country.label = country.dialCode\n return country\n })\n }, [])\n\n return (\n <Card>\n <h4 className=\"mb-6\">Overview</h4>\n <div className=\"grid md:grid-cols-2 gap-4\">\n <FormItem\n label=\"First Name\"\n invalid={Boolean(errors.firstName)}\n errorMessage={errors.firstName?.message}\n >\n <Controller\n name=\"firstName\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"First Name\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"User Name\"\n invalid={Boolean(errors.lastName)}\n errorMessage={errors.lastName?.message}\n >\n <Controller\n name=\"lastName\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Last Name\"\n {...field}\n />\n )}\n />\n </FormItem>\n </div>\n <FormItem\n label=\"Email\"\n invalid={Boolean(errors.email)}\n errorMessage={errors.email?.message}\n >\n <Controller\n name=\"email\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"email\"\n autoComplete=\"off\"\n placeholder=\"Email\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex items-end gap-4 w-full\">\n <FormItem\n invalid={\n Boolean(errors.phoneNumber) || Boolean(errors.dialCode)\n }\n >\n <label className=\"form-label mb-2\">Phone number</label>\n <Controller\n name=\"dialCode\"\n control={control}\n render={({ field }) => (\n <Select<CountryOption>\n options={dialCodeList}\n {...field}\n className=\"w-[150px]\"\n components={{\n Option: CustomSelectOption,\n Control: CustomControl,\n }}\n placeholder=\"\"\n value={dialCodeList.filter(\n (option) => option.dialCode === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.dialCode)\n }\n />\n )}\n />\n </FormItem>\n <FormItem\n className=\"w-full\"\n invalid={\n Boolean(errors.phoneNumber) || Boolean(errors.dialCode)\n }\n errorMessage={errors.phoneNumber?.message}\n >\n <Controller\n name=\"phoneNumber\"\n control={control}\n render={({ field }) => (\n <NumericInput\n autoComplete=\"off\"\n placeholder=\"Phone Number\"\n value={field.value}\n onChange={field.onChange}\n onBlur={field.onBlur}\n />\n )}\n />\n </FormItem>\n </div>\n </Card>\n )\n}\n\nexport default OverviewSection\n"],"names":["Control","components","CustomSelectOption","props","jsx","DefaultOption","data","jsxs","Avatar","CustomControl","children","selected","OverviewSection","control","errors","dialCodeList","useMemo","countryList","country","Card","FormItem","_a","Controller","field","Input","_b","_c","Select","option","_d","NumericInput"],"mappings":";;;;;;;;;;;;;;;;AAqBA,MAAM,EAAE,SAAAA,MAAYC,GAEdC,IAAqB,CAACC,MAEpB,gBAAAC;AAAA,EAACC;AAAAA,EAAA;AAAA,IACI,GAAGF;AAAA,IACJ,aAAa,CAACG,MACV,gBAAAC,EAAC,QAAA,EAAK,WAAU,2BACZ,UAAA;AAAA,MAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACG,OAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAK,kBAAkBF,EAAK,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAErC,gBAAAF,EAAC,QAAA,EAAM,UAAAE,EAAK,SAAA,CAAS;AAAA,IAAA,EAAA,CACzB;AAAA,EAAA;AAAA,GAMVG,IAAgB,CAAC,EAAE,UAAAC,GAAU,GAAGP,QAAyC;AAC3E,QAAMQ,IAAWR,EAAM,SAAA,EAAW,CAAC;AACnC,SACI,gBAAAI,EAACP,GAAA,EAAS,GAAGG,GACR,UAAA;AAAA,IAAAQ,KACG,gBAAAP;AAAA,MAACI;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,OAAM;AAAA,QACN,MAAM;AAAA,QACN,KAAK,kBAAkBG,EAAS,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAG5CD;AAAA,EAAA,GACL;AAER,GAEME,IAAkB,CAAC,EAAE,SAAAC,GAAS,QAAAC,QAAmC;;AACnE,QAAMC,IAAeC,EAAQ,MACoB,KAAK;AAAA,IAC9C,KAAK,UAAUC,CAAW;AAAA,EAAA,EAGR,IAAI,CAACC,OACvBA,EAAQ,QAAQA,EAAQ,UACjBA,EACV,GACF,EAAE;AAEL,2BACKC,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAf,EAAC,MAAA,EAAG,WAAU,QAAO,UAAA,YAAQ;AAAA,IAC7B,gBAAAG,EAAC,OAAA,EAAI,WAAU,6BACX,UAAA;AAAA,MAAA,gBAAAH;AAAA,QAACgB;AAAA,QAAA;AAAA,UACG,OAAM;AAAA,UACN,SAAS,EAAQN,EAAO;AAAA,UACxB,eAAcO,IAAAP,EAAO,cAAP,gBAAAO,EAAkB;AAAA,UAEhC,UAAA,gBAAAjB;AAAA,YAACkB;AAAA,YAAA;AAAA,cACG,MAAK;AAAA,cACL,SAAAT;AAAA,cACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,gBAACoB;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,cAAa;AAAA,kBACb,aAAY;AAAA,kBACX,GAAGD;AAAA,gBAAA;AAAA,cAAA;AAAA,YACR;AAAA,UAAA;AAAA,QAER;AAAA,MAAA;AAAA,MAEJ,gBAAAnB;AAAA,QAACgB;AAAA,QAAA;AAAA,UACG,OAAM;AAAA,UACN,SAAS,EAAQN,EAAO;AAAA,UACxB,eAAcW,IAAAX,EAAO,aAAP,gBAAAW,EAAiB;AAAA,UAE/B,UAAA,gBAAArB;AAAA,YAACkB;AAAA,YAAA;AAAA,cACG,MAAK;AAAA,cACL,SAAAT;AAAA,cACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,gBAACoB;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,cAAa;AAAA,kBACb,aAAY;AAAA,kBACX,GAAGD;AAAA,gBAAA;AAAA,cAAA;AAAA,YACR;AAAA,UAAA;AAAA,QAER;AAAA,MAAA;AAAA,IACJ,GACJ;AAAA,IACA,gBAAAnB;AAAA,MAACgB;AAAA,MAAA;AAAA,QACG,OAAM;AAAA,QACN,SAAS,EAAQN,EAAO;AAAA,QACxB,eAAcY,IAAAZ,EAAO,UAAP,gBAAAY,EAAc;AAAA,QAE5B,UAAA,gBAAAtB;AAAA,UAACkB;AAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,SAAAT;AAAA,YACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,cAACoB;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,cAAa;AAAA,gBACb,aAAY;AAAA,gBACX,GAAGD;AAAA,cAAA;AAAA,YAAA;AAAA,UACR;AAAA,QAAA;AAAA,MAER;AAAA,IAAA;AAAA,IAEJ,gBAAAhB,EAAC,OAAA,EAAI,WAAU,+BACX,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAACa;AAAA,QAAA;AAAA,UACG,SACI,EAAQN,EAAO,eAAgB,EAAQA,EAAO;AAAA,UAGlD,UAAA;AAAA,YAAA,gBAAAV,EAAC,SAAA,EAAM,WAAU,mBAAkB,UAAA,gBAAY;AAAA,YAC/C,gBAAAA;AAAA,cAACkB;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,SAAAT;AAAA,gBACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,kBAACuB;AAAA,kBAAA;AAAA,oBACG,SAASZ;AAAA,oBACR,GAAGQ;AAAA,oBACJ,WAAU;AAAA,oBACV,YAAY;AAAA,sBACR,QAAQrB;AAAA,sBACR,SAASO;AAAA,oBAAA;AAAA,oBAEb,aAAY;AAAA,oBACZ,OAAOM,EAAa;AAAA,sBAChB,CAACa,MAAWA,EAAO,aAAaL,EAAM;AAAA,oBAAA;AAAA,oBAE1C,UAAU,CAACK,MACPL,EAAM,SAASK,KAAA,gBAAAA,EAAQ,QAAQ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAEvC;AAAA,YAAA;AAAA,UAER;AAAA,QAAA;AAAA,MAAA;AAAA,MAEJ,gBAAAxB;AAAA,QAACgB;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,SACI,EAAQN,EAAO,eAAgB,EAAQA,EAAO;AAAA,UAElD,eAAce,IAAAf,EAAO,gBAAP,gBAAAe,EAAoB;AAAA,UAElC,UAAA,gBAAAzB;AAAA,YAACkB;AAAA,YAAA;AAAA,cACG,MAAK;AAAA,cACL,SAAAT;AAAA,cACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,gBAAC0B;AAAA,gBAAA;AAAA,kBACG,cAAa;AAAA,kBACb,aAAY;AAAA,kBACZ,OAAOP,EAAM;AAAA,kBACb,UAAUA,EAAM;AAAA,kBAChB,QAAQA,EAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YAClB;AAAA,UAAA;AAAA,QAER;AAAA,MAAA;AAAA,IACJ,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;"}
|
|
1
|
+
{"version":3,"file":"OverviewSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerForm/OverviewSection.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport Card from '@/components/ui/Card'\nimport Input from '@/components/ui/Input'\nimport Select, { Option as DefaultOption } from '@/components/ui/Select'\nimport Avatar from '@/components/ui/Avatar'\nimport { FormItem } from '@/components/ui/Form'\nimport NumericInput from '@/components/shared/NumericInput'\nimport { countryList } from '@/constants/countries.constant'\nimport { Controller } from 'react-hook-form'\nimport { components } from 'react-select'\nimport type { FormSectionBaseProps } from './types'\nimport type { ControlProps, OptionProps } from 'react-select'\n\ntype OverviewSectionProps = FormSectionBaseProps\n\ntype CountryOption = {\n label: string\n dialCode: string\n value: string\n}\n\nconst { Control } = components\n\nconst CustomSelectOption = (props: OptionProps<CountryOption>) => {\n return (\n <DefaultOption<CountryOption>\n {...props}\n customLabel={(data) => (\n <span className=\"flex items-center gap-2\">\n <Avatar\n shape=\"circle\"\n size={20}\n src={`/img/countries/${data.value}.png`}\n />\n <span>{data.dialCode}</span>\n </span>\n )}\n />\n )\n}\n\nconst CustomControl = ({ children, ...props }: ControlProps<CountryOption>) => {\n const selected = props.getValue()[0]\n return (\n <Control {...props}>\n {selected && (\n <Avatar\n className=\"ltr:ml-4 rtl:mr-4\"\n shape=\"circle\"\n size={20}\n src={`/img/countries/${selected.value}.png`}\n />\n )}\n {children}\n </Control>\n )\n}\n\nconst OverviewSection = ({ control, errors }: OverviewSectionProps) => {\n const dialCodeList = useMemo(() => {\n const newCountryList: Array<CountryOption> = JSON.parse(\n JSON.stringify(countryList),\n )\n\n return newCountryList.map((country) => {\n country.label = country.dialCode\n return country\n })\n }, [])\n\n return (\n <Card>\n <h4 className=\"mb-6\">Overview</h4>\n <div className=\"grid md:grid-cols-2 gap-4\">\n <FormItem\n label=\"First Name\"\n invalid={Boolean(errors.firstName)}\n errorMessage={errors.firstName?.message}\n >\n <Controller\n name=\"firstName\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"First Name\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"User Name\"\n invalid={Boolean(errors.lastName)}\n errorMessage={errors.lastName?.message}\n >\n <Controller\n name=\"lastName\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Last Name\"\n {...field}\n />\n )}\n />\n </FormItem>\n </div>\n <FormItem\n label=\"Email\"\n invalid={Boolean(errors.email)}\n errorMessage={errors.email?.message}\n >\n <Controller\n name=\"email\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"email\"\n autoComplete=\"off\"\n placeholder=\"Email\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex items-end gap-4 w-full\">\n <FormItem\n invalid={\n Boolean(errors.phoneNumber) || Boolean(errors.dialCode)\n }\n >\n <label className=\"form-label mb-2\">Phone number</label>\n <Controller\n name=\"dialCode\"\n control={control}\n render={({ field }) => (\n <Select<CountryOption>\n options={dialCodeList}\n {...field}\n className=\"w-[150px]\"\n components={{\n Option: CustomSelectOption,\n Control: CustomControl,\n }}\n placeholder=\"\"\n value={dialCodeList.filter(\n (option) => option.dialCode === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.dialCode)\n }\n />\n )}\n />\n </FormItem>\n <FormItem\n className=\"w-full\"\n invalid={\n Boolean(errors.phoneNumber) || Boolean(errors.dialCode)\n }\n errorMessage={errors.phoneNumber?.message}\n >\n <Controller\n name=\"phoneNumber\"\n control={control}\n render={({ field }) => (\n <NumericInput\n autoComplete=\"off\"\n placeholder=\"Phone Number\"\n value={field.value}\n onChange={field.onChange}\n onBlur={field.onBlur}\n />\n )}\n />\n </FormItem>\n </div>\n </Card>\n )\n}\n\nexport default OverviewSection\n"],"names":["Control","components","CustomSelectOption","props","jsx","DefaultOption","data","jsxs","Avatar","CustomControl","children","selected","OverviewSection","control","errors","dialCodeList","useMemo","countryList","country","Card","FormItem","_a","Controller","field","Input","_b","_c","Select","option","_d","NumericInput"],"mappings":";;;;;;;;;;;;;;;;AAqBA,MAAM,EAAE,SAAAA,MAAYC,GAEdC,IAAqB,CAACC,MAEpB,gBAAAC;AAAA,EAACC;AAAAA,EAAA;AAAA,IACI,GAAGF;AAAA,IACJ,aAAa,CAACG,MACV,gBAAAC,EAAC,QAAA,EAAK,WAAU,2BACZ,UAAA;AAAA,MAAA,gBAAAH;AAAA,QAACI;AAAA,QAAA;AAAA,UACG,OAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAK,kBAAkBF,EAAK,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAErC,gBAAAF,EAAC,QAAA,EAAM,UAAAE,EAAK,SAAA,CAAS;AAAA,IAAA,EAAA,CACzB;AAAA,EAAA;AAAA,GAMVG,IAAgB,CAAC,EAAE,UAAAC,GAAU,GAAGP,QAAyC;AAC3E,QAAMQ,IAAWR,EAAM,SAAA,EAAW,CAAC;AACnC,SACI,gBAAAI,EAACP,GAAA,EAAS,GAAGG,GACR,UAAA;AAAA,IAAAQ,KACG,gBAAAP;AAAA,MAACI;AAAA,MAAA;AAAA,QACG,WAAU;AAAA,QACV,OAAM;AAAA,QACN,MAAM;AAAA,QACN,KAAK,kBAAkBG,EAAS,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAG5CD;AAAA,EAAA,GACL;AAER,GAEME,IAAkB,CAAC,EAAE,SAAAC,GAAS,QAAAC,QAAmC;;AACnE,QAAMC,IAAeC,EAAQ,MACoB,KAAK;AAAA,IAC9C,KAAK,UAAUC,CAAW;AAAA,EAAA,EAGR,IAAI,CAACC,OACvBA,EAAQ,QAAQA,EAAQ,UACjBA,EACV,GACF,CAAA,CAAE;AAEL,2BACKC,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAf,EAAC,MAAA,EAAG,WAAU,QAAO,UAAA,YAAQ;AAAA,IAC7B,gBAAAG,EAAC,OAAA,EAAI,WAAU,6BACX,UAAA;AAAA,MAAA,gBAAAH;AAAA,QAACgB;AAAA,QAAA;AAAA,UACG,OAAM;AAAA,UACN,SAAS,EAAQN,EAAO;AAAA,UACxB,eAAcO,IAAAP,EAAO,cAAP,gBAAAO,EAAkB;AAAA,UAEhC,UAAA,gBAAAjB;AAAA,YAACkB;AAAA,YAAA;AAAA,cACG,MAAK;AAAA,cACL,SAAAT;AAAA,cACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,gBAACoB;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,cAAa;AAAA,kBACb,aAAY;AAAA,kBACX,GAAGD;AAAA,gBAAA;AAAA,cAAA;AAAA,YACR;AAAA,UAAA;AAAA,QAER;AAAA,MAAA;AAAA,MAEJ,gBAAAnB;AAAA,QAACgB;AAAA,QAAA;AAAA,UACG,OAAM;AAAA,UACN,SAAS,EAAQN,EAAO;AAAA,UACxB,eAAcW,IAAAX,EAAO,aAAP,gBAAAW,EAAiB;AAAA,UAE/B,UAAA,gBAAArB;AAAA,YAACkB;AAAA,YAAA;AAAA,cACG,MAAK;AAAA,cACL,SAAAT;AAAA,cACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,gBAACoB;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,cAAa;AAAA,kBACb,aAAY;AAAA,kBACX,GAAGD;AAAA,gBAAA;AAAA,cAAA;AAAA,YACR;AAAA,UAAA;AAAA,QAER;AAAA,MAAA;AAAA,IACJ,GACJ;AAAA,IACA,gBAAAnB;AAAA,MAACgB;AAAA,MAAA;AAAA,QACG,OAAM;AAAA,QACN,SAAS,EAAQN,EAAO;AAAA,QACxB,eAAcY,IAAAZ,EAAO,UAAP,gBAAAY,EAAc;AAAA,QAE5B,UAAA,gBAAAtB;AAAA,UAACkB;AAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,SAAAT;AAAA,YACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,cAACoB;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,cAAa;AAAA,gBACb,aAAY;AAAA,gBACX,GAAGD;AAAA,cAAA;AAAA,YAAA;AAAA,UACR;AAAA,QAAA;AAAA,MAER;AAAA,IAAA;AAAA,IAEJ,gBAAAhB,EAAC,OAAA,EAAI,WAAU,+BACX,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAACa;AAAA,QAAA;AAAA,UACG,SACI,EAAQN,EAAO,eAAgB,EAAQA,EAAO;AAAA,UAGlD,UAAA;AAAA,YAAA,gBAAAV,EAAC,SAAA,EAAM,WAAU,mBAAkB,UAAA,gBAAY;AAAA,YAC/C,gBAAAA;AAAA,cAACkB;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,SAAAT;AAAA,gBACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,kBAACuB;AAAA,kBAAA;AAAA,oBACG,SAASZ;AAAA,oBACR,GAAGQ;AAAA,oBACJ,WAAU;AAAA,oBACV,YAAY;AAAA,sBACR,QAAQrB;AAAA,sBACR,SAASO;AAAA,oBAAA;AAAA,oBAEb,aAAY;AAAA,oBACZ,OAAOM,EAAa;AAAA,sBAChB,CAACa,MAAWA,EAAO,aAAaL,EAAM;AAAA,oBAAA;AAAA,oBAE1C,UAAU,CAACK,MACPL,EAAM,SAASK,KAAA,gBAAAA,EAAQ,QAAQ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAEvC;AAAA,YAAA;AAAA,UAER;AAAA,QAAA;AAAA,MAAA;AAAA,MAEJ,gBAAAxB;AAAA,QAACgB;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,SACI,EAAQN,EAAO,eAAgB,EAAQA,EAAO;AAAA,UAElD,eAAce,IAAAf,EAAO,gBAAP,gBAAAe,EAAoB;AAAA,UAElC,UAAA,gBAAAzB;AAAA,YAACkB;AAAA,YAAA;AAAA,cACG,MAAK;AAAA,cACL,SAAAT;AAAA,cACA,QAAQ,CAAC,EAAE,OAAAU,EAAA,MACP,gBAAAnB;AAAA,gBAAC0B;AAAA,gBAAA;AAAA,kBACG,cAAa;AAAA,kBACb,aAAY;AAAA,kBACZ,OAAOP,EAAM;AAAA,kBACb,UAAUA,EAAM;AAAA,kBAChB,QAAQA,EAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YAClB;AAAA,UAAA;AAAA,QAER;AAAA,MAAA;AAAA,IACJ,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileImageSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerForm/ProfileImageSection.tsx"],"sourcesContent":["import Card from '@/components/ui/Card'\nimport Avatar from '@/components/ui/Avatar'\nimport Upload from '@/components/ui/Upload'\nimport { Button } from '@/components/ui'\nimport DoubleSidedImage from '@/components/shared/DoubleSidedImage'\nimport { Controller } from 'react-hook-form'\nimport { HiOutlineUser } from 'react-icons/hi'\nimport type { FormSectionBaseProps } from './types'\n\ntype ProfileImageSectionProps = FormSectionBaseProps\n\nconst ProfileImage = ({ control }: ProfileImageSectionProps) => {\n const beforeUpload = (files: FileList | null) => {\n let valid: string | boolean = true\n\n const allowedFileType = ['image/jpeg', 'image/png']\n if (files) {\n for (const file of files) {\n if (!allowedFileType.includes(file.type)) {\n valid = 'Please upload a .jpeg or .png file!'\n }\n }\n }\n\n return valid\n }\n\n return (\n <Card>\n <h4 className=\"mb-6\">Image</h4>\n <div className=\"bg-gray-100 dark:bg-gray-700 rounded-lg text-center p-4\">\n <div className=\"text-center\">\n <Controller\n name=\"img\"\n control={control}\n render={({ field }) => (\n <>\n <div className=\"flex items-center justify-center\">\n {field.value ? (\n <Avatar\n size={100}\n className=\"border-4 border-white bg-gray-100 text-gray-300 shadow-lg\"\n icon={<HiOutlineUser />}\n src={field.value}\n />\n ) : (\n <DoubleSidedImage\n src=\"/img/others/upload.png\"\n darkModeSrc=\"/img/others/upload-dark.png\"\n alt=\"Upload image\"\n />\n )}\n </div>\n <Upload\n showList={false}\n uploadLimit={1}\n beforeUpload={beforeUpload}\n onChange={(files) => {\n if (files.length > 0) {\n field.onChange(\n URL.createObjectURL(files[0]),\n )\n }\n }}\n >\n <Button\n variant=\"solid\"\n className=\"mt-4\"\n type=\"button\"\n >\n Upload Image\n </Button>\n </Upload>\n </>\n )}\n />\n </div>\n </div>\n </Card>\n )\n}\n\nexport default ProfileImage\n"],"names":["ProfileImage","control","beforeUpload","files","valid","allowedFileType","file","Card","jsx","Controller","field","jsxs","Fragment","Avatar","HiOutlineUser","DoubleSidedImage","Upload","Button"],"mappings":";;;;;;;;;;;AAWA,MAAMA,IAAe,CAAC,EAAE,SAAAC,QAAwC;AAC5D,QAAMC,IAAe,CAACC,MAA2B;AAC7C,QAAIC,IAA0B;AAE9B,UAAMC,IAAkB,CAAC,cAAc,WAAW;AAClD,QAAIF;AACA,iBAAWG,KAAQH;AACf,QAAKE,EAAgB,SAASC,EAAK,IAAI,MACnCF,IAAQ;AAKpB,WAAOA;AAAA,
|
|
1
|
+
{"version":3,"file":"ProfileImageSection.js","sources":["../../../../../../lib/@ecme/views/concepts/customers/CustomerForm/ProfileImageSection.tsx"],"sourcesContent":["import Card from '@/components/ui/Card'\nimport Avatar from '@/components/ui/Avatar'\nimport Upload from '@/components/ui/Upload'\nimport { Button } from '@/components/ui'\nimport DoubleSidedImage from '@/components/shared/DoubleSidedImage'\nimport { Controller } from 'react-hook-form'\nimport { HiOutlineUser } from 'react-icons/hi'\nimport type { FormSectionBaseProps } from './types'\n\ntype ProfileImageSectionProps = FormSectionBaseProps\n\nconst ProfileImage = ({ control }: ProfileImageSectionProps) => {\n const beforeUpload = (files: FileList | null) => {\n let valid: string | boolean = true\n\n const allowedFileType = ['image/jpeg', 'image/png']\n if (files) {\n for (const file of files) {\n if (!allowedFileType.includes(file.type)) {\n valid = 'Please upload a .jpeg or .png file!'\n }\n }\n }\n\n return valid\n }\n\n return (\n <Card>\n <h4 className=\"mb-6\">Image</h4>\n <div className=\"bg-gray-100 dark:bg-gray-700 rounded-lg text-center p-4\">\n <div className=\"text-center\">\n <Controller\n name=\"img\"\n control={control}\n render={({ field }) => (\n <>\n <div className=\"flex items-center justify-center\">\n {field.value ? (\n <Avatar\n size={100}\n className=\"border-4 border-white bg-gray-100 text-gray-300 shadow-lg\"\n icon={<HiOutlineUser />}\n src={field.value}\n />\n ) : (\n <DoubleSidedImage\n src=\"/img/others/upload.png\"\n darkModeSrc=\"/img/others/upload-dark.png\"\n alt=\"Upload image\"\n />\n )}\n </div>\n <Upload\n showList={false}\n uploadLimit={1}\n beforeUpload={beforeUpload}\n onChange={(files) => {\n if (files.length > 0) {\n field.onChange(\n URL.createObjectURL(files[0]),\n )\n }\n }}\n >\n <Button\n variant=\"solid\"\n className=\"mt-4\"\n type=\"button\"\n >\n Upload Image\n </Button>\n </Upload>\n </>\n )}\n />\n </div>\n </div>\n </Card>\n )\n}\n\nexport default ProfileImage\n"],"names":["ProfileImage","control","beforeUpload","files","valid","allowedFileType","file","Card","jsx","Controller","field","jsxs","Fragment","Avatar","HiOutlineUser","DoubleSidedImage","Upload","Button"],"mappings":";;;;;;;;;;;AAWA,MAAMA,IAAe,CAAC,EAAE,SAAAC,QAAwC;AAC5D,QAAMC,IAAe,CAACC,MAA2B;AAC7C,QAAIC,IAA0B;AAE9B,UAAMC,IAAkB,CAAC,cAAc,WAAW;AAClD,QAAIF;AACA,iBAAWG,KAAQH;AACf,QAAKE,EAAgB,SAASC,EAAK,IAAI,MACnCF,IAAQ;AAKpB,WAAOA;AAAA,EACX;AAEA,2BACKG,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAC,EAAC,MAAA,EAAG,WAAU,QAAO,UAAA,SAAK;AAAA,sBACzB,OAAA,EAAI,WAAU,2DACX,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,eACX,UAAA,gBAAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,MAAK;AAAA,QACL,SAAAR;AAAA,QACA,QAAQ,CAAC,EAAE,OAAAS,EAAA,MACP,gBAAAC,EAAAC,GAAA,EACI,UAAA;AAAA,UAAA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,oCACV,UAAAE,EAAM,QACH,gBAAAF;AAAA,YAACK;AAAA,YAAA;AAAA,cACG,MAAM;AAAA,cACN,WAAU;AAAA,cACV,wBAAOC,GAAA,EAAc;AAAA,cACrB,KAAKJ,EAAM;AAAA,YAAA;AAAA,UAAA,IAGf,gBAAAF;AAAA,YAACO;AAAA,YAAA;AAAA,cACG,KAAI;AAAA,cACJ,aAAY;AAAA,cACZ,KAAI;AAAA,YAAA;AAAA,UAAA,GAGhB;AAAA,UACA,gBAAAP;AAAA,YAACQ;AAAA,YAAA;AAAA,cACG,UAAU;AAAA,cACV,aAAa;AAAA,cACb,cAAAd;AAAA,cACA,UAAU,CAACC,MAAU;AACjB,gBAAIA,EAAM,SAAS,KACfO,EAAM;AAAA,kBACF,IAAI,gBAAgBP,EAAM,CAAC,CAAC;AAAA,gBAAA;AAAA,cAGxC;AAAA,cAEA,UAAA,gBAAAK;AAAA,gBAACS;AAAA,gBAAA;AAAA,kBACG,SAAQ;AAAA,kBACR,WAAU;AAAA,kBACV,MAAK;AAAA,kBACR,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA;AAAA,QACJ,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA,GAGZ,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;"}
|