@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":"SalesTarget.js","sources":["../../../../../../lib/@ecme/views/dashboards/EcommerceDashboard/components/SalesTarget.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport Progress from '@/components/ui/Progress'\nimport Select from '@/components/ui/Select'\nimport AbbreviateNumber from '@/components/shared/AbbreviateNumber'\nimport { options } from '../constants'\nimport type { SalesTargetData, Period } from '../types'\n\ntype SalesTargetProps = {\n data: SalesTargetData\n}\n\nconst periodLabel: Record<Period, string> = {\n thisMonth: 'month',\n thisWeek: 'week',\n thisYear: 'year',\n}\n\nconst SalesTarget = ({ data }: SalesTargetProps) => {\n const [selectedPeriod, setSelectedPeriod] = useState<Period>('thisMonth')\n\n return (\n <Card>\n <div className=\"flex items-center justify-between mb-4\">\n <h4>Sales target</h4>\n <Select\n className=\"w-[120px]\"\n size=\"sm\"\n placeholder=\"Select period\"\n value={options.filter(\n (option) => option.value === selectedPeriod,\n )}\n options={options}\n isSearchable={false}\n onChange={(option) => {\n if (option?.value) {\n setSelectedPeriod(option?.value)\n }\n }}\n />\n </div>\n <div className=\"flex items-center justify-between mt-8\">\n <div className=\"flex flex-col\">\n <h2>\n <AbbreviateNumber\n value={data[selectedPeriod].achieved}\n />\n <span className=\"opacity-60 text-base font-bold\">\n {' / '}\n <AbbreviateNumber\n value={data[selectedPeriod].target}\n />{' '}\n Units\n </span>\n </h2>\n <div className=\"mt-1\">\n Made this {periodLabel[selectedPeriod]} year\n </div>\n </div>\n <div>\n <Progress\n percent={data[selectedPeriod].percentage}\n width={80}\n variant=\"circle\"\n strokeWidth={8}\n />\n </div>\n </div>\n </Card>\n )\n}\n\nexport default SalesTarget\n"],"names":["periodLabel","SalesTarget","data","selectedPeriod","setSelectedPeriod","useState","Card","jsxs","jsx","Select","options","option","AbbreviateNumber","Progress"],"mappings":";;;;;;;;;;AAYA,MAAMA,IAAsC;AAAA,EACxC,WAAW;AAAA,EACX,UAAU;AAAA,EACV,UAAU;AACd,GAEMC,IAAc,CAAC,EAAE,MAAAC,QAA6B;AAChD,QAAM,CAACC,GAAgBC,CAAiB,IAAIC,EAAiB,WAAW;AAExE,2BACKC,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,0CACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAG,UAAA,eAAA,CAAY;AAAA,MAChB,gBAAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,MAAK;AAAA,UACL,aAAY;AAAA,UACZ,OAAOC,EAAQ;AAAA,YACX,CAACC,MAAWA,EAAO,UAAUR;AAAA,UAAA;AAAA,UAEjC,SAAAO;AAAA,UACA,cAAc;AAAA,UACd,UAAU,CAACC,MAAW;AAClB,YAAIA,KAAA,QAAAA,EAAQ,SACRP,EAAkBO,KAAA,gBAAAA,EAAQ,KAAK;AAAA,
|
|
1
|
+
{"version":3,"file":"SalesTarget.js","sources":["../../../../../../lib/@ecme/views/dashboards/EcommerceDashboard/components/SalesTarget.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport Progress from '@/components/ui/Progress'\nimport Select from '@/components/ui/Select'\nimport AbbreviateNumber from '@/components/shared/AbbreviateNumber'\nimport { options } from '../constants'\nimport type { SalesTargetData, Period } from '../types'\n\ntype SalesTargetProps = {\n data: SalesTargetData\n}\n\nconst periodLabel: Record<Period, string> = {\n thisMonth: 'month',\n thisWeek: 'week',\n thisYear: 'year',\n}\n\nconst SalesTarget = ({ data }: SalesTargetProps) => {\n const [selectedPeriod, setSelectedPeriod] = useState<Period>('thisMonth')\n\n return (\n <Card>\n <div className=\"flex items-center justify-between mb-4\">\n <h4>Sales target</h4>\n <Select\n className=\"w-[120px]\"\n size=\"sm\"\n placeholder=\"Select period\"\n value={options.filter(\n (option) => option.value === selectedPeriod,\n )}\n options={options}\n isSearchable={false}\n onChange={(option) => {\n if (option?.value) {\n setSelectedPeriod(option?.value)\n }\n }}\n />\n </div>\n <div className=\"flex items-center justify-between mt-8\">\n <div className=\"flex flex-col\">\n <h2>\n <AbbreviateNumber\n value={data[selectedPeriod].achieved}\n />\n <span className=\"opacity-60 text-base font-bold\">\n {' / '}\n <AbbreviateNumber\n value={data[selectedPeriod].target}\n />{' '}\n Units\n </span>\n </h2>\n <div className=\"mt-1\">\n Made this {periodLabel[selectedPeriod]} year\n </div>\n </div>\n <div>\n <Progress\n percent={data[selectedPeriod].percentage}\n width={80}\n variant=\"circle\"\n strokeWidth={8}\n />\n </div>\n </div>\n </Card>\n )\n}\n\nexport default SalesTarget\n"],"names":["periodLabel","SalesTarget","data","selectedPeriod","setSelectedPeriod","useState","Card","jsxs","jsx","Select","options","option","AbbreviateNumber","Progress"],"mappings":";;;;;;;;;;AAYA,MAAMA,IAAsC;AAAA,EACxC,WAAW;AAAA,EACX,UAAU;AAAA,EACV,UAAU;AACd,GAEMC,IAAc,CAAC,EAAE,MAAAC,QAA6B;AAChD,QAAM,CAACC,GAAgBC,CAAiB,IAAIC,EAAiB,WAAW;AAExE,2BACKC,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,0CACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAG,UAAA,eAAA,CAAY;AAAA,MAChB,gBAAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UACG,WAAU;AAAA,UACV,MAAK;AAAA,UACL,aAAY;AAAA,UACZ,OAAOC,EAAQ;AAAA,YACX,CAACC,MAAWA,EAAO,UAAUR;AAAA,UAAA;AAAA,UAEjC,SAAAO;AAAA,UACA,cAAc;AAAA,UACd,UAAU,CAACC,MAAW;AAClB,YAAIA,KAAA,QAAAA,EAAQ,SACRP,EAAkBO,KAAA,gBAAAA,EAAQ,KAAK;AAAA,UAEvC;AAAA,QAAA;AAAA,MAAA;AAAA,IACJ,GACJ;AAAA,IACA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,0CACX,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iBACX,UAAA;AAAA,QAAA,gBAAAA,EAAC,MAAA,EACG,UAAA;AAAA,UAAA,gBAAAC;AAAA,YAACI;AAAA,YAAA;AAAA,cACG,OAAOV,EAAKC,CAAc,EAAE;AAAA,YAAA;AAAA,UAAA;AAAA,UAEhC,gBAAAI,EAAC,QAAA,EAAK,WAAU,kCACX,UAAA;AAAA,YAAA;AAAA,YACD,gBAAAC;AAAA,cAACI;AAAA,cAAA;AAAA,gBACG,OAAOV,EAAKC,CAAc,EAAE;AAAA,cAAA;AAAA,YAAA;AAAA,YAC7B;AAAA,YAAI;AAAA,UAAA,EAAA,CAEX;AAAA,QAAA,GACJ;AAAA,QACA,gBAAAI,EAAC,OAAA,EAAI,WAAU,QAAO,UAAA;AAAA,UAAA;AAAA,UACPP,EAAYG,CAAc;AAAA,UAAE;AAAA,QAAA,EAAA,CAC3C;AAAA,MAAA,GACJ;AAAA,wBACC,OAAA,EACG,UAAA,gBAAAK;AAAA,QAACK;AAAA,QAAA;AAAA,UACG,SAASX,EAAKC,CAAc,EAAE;AAAA,UAC9B,OAAO;AAAA,UACP,SAAQ;AAAA,UACR,aAAa;AAAA,QAAA;AAAA,MAAA,EACjB,CACJ;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GACJ;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopProduct.js","sources":["../../../../../../lib/@ecme/views/dashboards/EcommerceDashboard/components/TopProduct.tsx"],"sourcesContent":["import Avatar from '@/components/ui/Avatar'\nimport Button from '@/components/ui/Button'\nimport Card from '@/components/ui/Card'\nimport GrowShrinkValue from '@/components/shared/GrowShrinkValue'\nimport classNames from '@/utils/classNames'\nimport isLastChild from '@/utils/isLastChild'\nimport { useNavigate } from 'react-router-dom'\nimport type { Product } from '../types'\n\ntype TopProductProps = {\n data: Product[]\n}\n\nconst TopProduct = ({ data }: TopProductProps) => {\n const navigate = useNavigate()\n\n const handleViewAll = () => {\n navigate('/concepts/products/product-list')\n }\n\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Top product</h4>\n <Button size=\"sm\" onClick={handleViewAll}>\n View all\n </Button>\n </div>\n <div className=\"mt-5\">\n {data.map((product, index) => (\n <div\n key={product.id}\n className={classNames(\n 'flex items-center justify-between py-2 dark:border-gray-600',\n !isLastChild(data, index) && 'mb-2',\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Avatar\n className=\"bg-white\"\n size={50}\n src={product.img}\n shape=\"round\"\n />\n <div>\n <div className=\"heading-text font-bold\">\n {product.name}\n </div>\n <div>Sold: {product.sales}</div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <GrowShrinkValue\n className=\"rounded-lg py-0.5 px-2 font-bold\"\n value={product.growShrink}\n positiveClass=\"bg-success-subtle\"\n negativeClass=\"bg-error-subtle\"\n suffix=\"%\"\n positiveIcon=\"+\"\n negativeIcon=\"\"\n />\n </div>\n </div>\n ))}\n </div>\n </Card>\n )\n}\n\nexport default TopProduct\n"],"names":["TopProduct","data","navigate","useNavigate","Card","jsxs","jsx","Button","product","index","classNames","isLastChild","Avatar","GrowShrinkValue"],"mappings":";;;;;;;;;;AAaA,MAAMA,IAAa,CAAC,EAAE,MAAAC,QAA4B;AAC9C,QAAMC,IAAWC,EAAA;AAMjB,2BACKC,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAG,UAAA,cAAA,CAAW;AAAA,wBACdC,GAAA,EAAO,MAAK,MAAK,SARR,MAAM;AACxB,QAAAL,EAAS,iCAAiC;AAAA,
|
|
1
|
+
{"version":3,"file":"TopProduct.js","sources":["../../../../../../lib/@ecme/views/dashboards/EcommerceDashboard/components/TopProduct.tsx"],"sourcesContent":["import Avatar from '@/components/ui/Avatar'\nimport Button from '@/components/ui/Button'\nimport Card from '@/components/ui/Card'\nimport GrowShrinkValue from '@/components/shared/GrowShrinkValue'\nimport classNames from '@/utils/classNames'\nimport isLastChild from '@/utils/isLastChild'\nimport { useNavigate } from 'react-router-dom'\nimport type { Product } from '../types'\n\ntype TopProductProps = {\n data: Product[]\n}\n\nconst TopProduct = ({ data }: TopProductProps) => {\n const navigate = useNavigate()\n\n const handleViewAll = () => {\n navigate('/concepts/products/product-list')\n }\n\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Top product</h4>\n <Button size=\"sm\" onClick={handleViewAll}>\n View all\n </Button>\n </div>\n <div className=\"mt-5\">\n {data.map((product, index) => (\n <div\n key={product.id}\n className={classNames(\n 'flex items-center justify-between py-2 dark:border-gray-600',\n !isLastChild(data, index) && 'mb-2',\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Avatar\n className=\"bg-white\"\n size={50}\n src={product.img}\n shape=\"round\"\n />\n <div>\n <div className=\"heading-text font-bold\">\n {product.name}\n </div>\n <div>Sold: {product.sales}</div>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <GrowShrinkValue\n className=\"rounded-lg py-0.5 px-2 font-bold\"\n value={product.growShrink}\n positiveClass=\"bg-success-subtle\"\n negativeClass=\"bg-error-subtle\"\n suffix=\"%\"\n positiveIcon=\"+\"\n negativeIcon=\"\"\n />\n </div>\n </div>\n ))}\n </div>\n </Card>\n )\n}\n\nexport default TopProduct\n"],"names":["TopProduct","data","navigate","useNavigate","Card","jsxs","jsx","Button","product","index","classNames","isLastChild","Avatar","GrowShrinkValue"],"mappings":";;;;;;;;;;AAaA,MAAMA,IAAa,CAAC,EAAE,MAAAC,QAA4B;AAC9C,QAAMC,IAAWC,EAAA;AAMjB,2BACKC,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAG,UAAA,cAAA,CAAW;AAAA,wBACdC,GAAA,EAAO,MAAK,MAAK,SARR,MAAM;AACxB,QAAAL,EAAS,iCAAiC;AAAA,MAC9C,GAMsD,UAAA,WAAA,CAE1C;AAAA,IAAA,GACJ;AAAA,IACA,gBAAAI,EAAC,SAAI,WAAU,QACV,YAAK,IAAI,CAACE,GAASC,MAChB,gBAAAJ;AAAA,MAAC;AAAA,MAAA;AAAA,QAEG,WAAWK;AAAA,UACP;AAAA,UACA,CAACC,EAAYV,GAAMQ,CAAK,KAAK;AAAA,QAAA;AAAA,QAGjC,UAAA;AAAA,UAAA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAACM;AAAA,cAAA;AAAA,gBACG,WAAU;AAAA,gBACV,MAAM;AAAA,gBACN,KAAKJ,EAAQ;AAAA,gBACb,OAAM;AAAA,cAAA;AAAA,YAAA;AAAA,8BAET,OAAA,EACG,UAAA;AAAA,cAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,0BACV,UAAAE,EAAQ,MACb;AAAA,gCACC,OAAA,EAAI,UAAA;AAAA,gBAAA;AAAA,gBAAOA,EAAQ;AAAA,cAAA,EAAA,CAAM;AAAA,YAAA,EAAA,CAC9B;AAAA,UAAA,GACJ;AAAA,UACA,gBAAAF,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA,gBAAAA;AAAA,YAACO;AAAA,YAAA;AAAA,cACG,WAAU;AAAA,cACV,OAAOL,EAAQ;AAAA,cACf,eAAc;AAAA,cACd,eAAc;AAAA,cACd,QAAO;AAAA,cACP,cAAa;AAAA,cACb,cAAa;AAAA,YAAA;AAAA,UAAA,EACjB,CACJ;AAAA,QAAA;AAAA,MAAA;AAAA,MA9BKA,EAAQ;AAAA,IAAA,CAgCpB,EAAA,CACL;AAAA,EAAA,GACJ;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdsPerformance.js","sources":["../../../../../../lib/@ecme/views/dashboards/MarketingDashboard/components/AdsPerformance.tsx"],"sourcesContent":["import { useState, useMemo } from 'react'\nimport Card from '@/components/ui/Card'\nimport Segment from '@/components/ui/Segment'\nimport ApexChart from 'react-apexcharts'\nimport { COLORS } from '@/constants/chart.constant'\nimport type { AdsPerformanceData } from '../types'\n\ntype AdsPerformance = {\n data: AdsPerformanceData\n}\n\nconst AdsPerformance = ({ data }: AdsPerformance) => {\n const [category, setCategory] = useState('all')\n\n const series = useMemo(() => {\n const campaignSeries = {\n name: 'Campaign (ROI)',\n type: 'column',\n data: data.campagin,\n color: function ({\n dataPointIndex,\n value,\n }: {\n dataPointIndex: number\n value: number\n }) {\n if (\n dataPointIndex > 0 &&\n value < data.campagin[dataPointIndex - 1]\n ) {\n return COLORS[7]\n }\n return COLORS[9]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any,\n }\n\n const emailSeries = {\n name: 'Email (ROI)',\n type: 'line',\n data: data.email,\n color: COLORS[0],\n }\n\n if (category === 'all') {\n return [campaignSeries, emailSeries]\n }\n\n if (category === 'campagin') {\n return [campaignSeries]\n }\n\n if (category === 'email') {\n return [emailSeries]\n }\n\n return []\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [category])\n\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Ads performance</h4>\n <div>\n <Segment\n className=\"gap-1\"\n value={category}\n size=\"sm\"\n onChange={(val) => setCategory(val as string)}\n >\n <Segment.Item value=\"all\">All</Segment.Item>\n <Segment.Item value=\"campagin\">Campagin</Segment.Item>\n <Segment.Item value=\"email\">Email</Segment.Item>\n </Segment>\n </div>\n </div>\n <div className=\"mt-6\">\n <ApexChart\n options={{\n chart: {\n type: 'line',\n zoom: {\n enabled: false,\n },\n toolbar: {\n show: false,\n },\n },\n legend: {\n show: false,\n },\n stroke: {\n width: category === 'email' ? 2.5 : [0, 2.5],\n curve: 'smooth',\n lineCap: 'round',\n },\n states: {\n hover: {\n filter: {\n type: 'none',\n },\n },\n },\n tooltip: {\n custom: function ({ series, dataPointIndex }) {\n const renderCampaignData = () => `\n <div class=\"flex items-center gap-2\">\n <div class=\"h-[10px] w-[10px] rounded-full\" style=\"background-color: ${COLORS[9]}\"></div>\n <div class=\"flex gap-2\">Campaign: <span class=\"font-bold\">${series[0][dataPointIndex]}</span></div>\n </div>\n `\n const renderEmailData = () => `\n <div class=\"flex items-center gap-2\">\n <div class=\"h-[10px] w-[10px] rounded-full\" style=\"background-color: ${\n COLORS[0]\n }\"></div>\n <div class=\"flex gap-2\">Email: <span class=\"font-bold\">${\n series[\n category === 'all' ? 1 : 0\n ][dataPointIndex]\n }</span></div>\n </div>\n `\n const render = () => {\n switch (category) {\n case 'all':\n return `${renderCampaignData()}${renderEmailData()}`\n case 'campagin':\n return renderCampaignData()\n case 'email':\n return renderEmailData()\n default:\n return ''\n }\n }\n return `\n <div class=\"py-2 px-4 rounded-xl\">\n <div class=\"flex flex-col gap-2\">\n <div>${\n data.label[dataPointIndex]\n }</div>\n ${render()}\n </div>\n </div>\n `\n },\n },\n labels: data.label,\n yaxis:\n category === 'all'\n ? [\n {},\n {\n opposite: true,\n },\n ]\n : [],\n plotOptions: {\n bar: {\n horizontal: false,\n columnWidth: '35px',\n borderRadius: 4,\n borderRadiusApplication: 'end',\n },\n },\n }}\n series={series}\n height={450}\n />\n </div>\n </Card>\n )\n}\n\nexport default AdsPerformance\n"],"names":["AdsPerformance","data","category","setCategory","useState","series","useMemo","campaignSeries","dataPointIndex","value","COLORS","emailSeries","Card","jsxs","jsx","Segment","val","ApexChart","renderCampaignData","renderEmailData","render"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdsPerformance.js","sources":["../../../../../../lib/@ecme/views/dashboards/MarketingDashboard/components/AdsPerformance.tsx"],"sourcesContent":["import { useState, useMemo } from 'react'\nimport Card from '@/components/ui/Card'\nimport Segment from '@/components/ui/Segment'\nimport ApexChart from 'react-apexcharts'\nimport { COLORS } from '@/constants/chart.constant'\nimport type { AdsPerformanceData } from '../types'\n\ntype AdsPerformance = {\n data: AdsPerformanceData\n}\n\nconst AdsPerformance = ({ data }: AdsPerformance) => {\n const [category, setCategory] = useState('all')\n\n const series = useMemo(() => {\n const campaignSeries = {\n name: 'Campaign (ROI)',\n type: 'column',\n data: data.campagin,\n color: function ({\n dataPointIndex,\n value,\n }: {\n dataPointIndex: number\n value: number\n }) {\n if (\n dataPointIndex > 0 &&\n value < data.campagin[dataPointIndex - 1]\n ) {\n return COLORS[7]\n }\n return COLORS[9]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any,\n }\n\n const emailSeries = {\n name: 'Email (ROI)',\n type: 'line',\n data: data.email,\n color: COLORS[0],\n }\n\n if (category === 'all') {\n return [campaignSeries, emailSeries]\n }\n\n if (category === 'campagin') {\n return [campaignSeries]\n }\n\n if (category === 'email') {\n return [emailSeries]\n }\n\n return []\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [category])\n\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Ads performance</h4>\n <div>\n <Segment\n className=\"gap-1\"\n value={category}\n size=\"sm\"\n onChange={(val) => setCategory(val as string)}\n >\n <Segment.Item value=\"all\">All</Segment.Item>\n <Segment.Item value=\"campagin\">Campagin</Segment.Item>\n <Segment.Item value=\"email\">Email</Segment.Item>\n </Segment>\n </div>\n </div>\n <div className=\"mt-6\">\n <ApexChart\n options={{\n chart: {\n type: 'line',\n zoom: {\n enabled: false,\n },\n toolbar: {\n show: false,\n },\n },\n legend: {\n show: false,\n },\n stroke: {\n width: category === 'email' ? 2.5 : [0, 2.5],\n curve: 'smooth',\n lineCap: 'round',\n },\n states: {\n hover: {\n filter: {\n type: 'none',\n },\n },\n },\n tooltip: {\n custom: function ({ series, dataPointIndex }) {\n const renderCampaignData = () => `\n <div class=\"flex items-center gap-2\">\n <div class=\"h-[10px] w-[10px] rounded-full\" style=\"background-color: ${COLORS[9]}\"></div>\n <div class=\"flex gap-2\">Campaign: <span class=\"font-bold\">${series[0][dataPointIndex]}</span></div>\n </div>\n `\n const renderEmailData = () => `\n <div class=\"flex items-center gap-2\">\n <div class=\"h-[10px] w-[10px] rounded-full\" style=\"background-color: ${\n COLORS[0]\n }\"></div>\n <div class=\"flex gap-2\">Email: <span class=\"font-bold\">${\n series[\n category === 'all' ? 1 : 0\n ][dataPointIndex]\n }</span></div>\n </div>\n `\n const render = () => {\n switch (category) {\n case 'all':\n return `${renderCampaignData()}${renderEmailData()}`\n case 'campagin':\n return renderCampaignData()\n case 'email':\n return renderEmailData()\n default:\n return ''\n }\n }\n return `\n <div class=\"py-2 px-4 rounded-xl\">\n <div class=\"flex flex-col gap-2\">\n <div>${\n data.label[dataPointIndex]\n }</div>\n ${render()}\n </div>\n </div>\n `\n },\n },\n labels: data.label,\n yaxis:\n category === 'all'\n ? [\n {},\n {\n opposite: true,\n },\n ]\n : [],\n plotOptions: {\n bar: {\n horizontal: false,\n columnWidth: '35px',\n borderRadius: 4,\n borderRadiusApplication: 'end',\n },\n },\n }}\n series={series}\n height={450}\n />\n </div>\n </Card>\n )\n}\n\nexport default AdsPerformance\n"],"names":["AdsPerformance","data","category","setCategory","useState","series","useMemo","campaignSeries","dataPointIndex","value","COLORS","emailSeries","Card","jsxs","jsx","Segment","val","ApexChart","renderCampaignData","renderEmailData","render"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateCampaign.js","sources":["../../../../../../lib/@ecme/views/dashboards/MarketingDashboard/components/CreateCampaign.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Button from '@/components/ui/Button'\nimport DatePicker from '@/components/ui/DatePicker'\nimport Dialog from '@/components/ui/Dialog'\nimport Input from '@/components/ui/Input'\nimport Select from '@/components/ui/Select'\nimport Segment from '@/components/ui/Segment'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport { campaignTypeOption } from '../utils'\nimport NumericInput from '@/components/shared/NumericInput'\nimport classNames from '@/utils/classNames'\nimport sleep from '@/utils/sleep'\nimport dayjs from 'dayjs'\nimport CreatableSelect from 'react-select/creatable'\nimport { useForm, Controller } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport uniqueId from 'lodash/uniqueId'\nimport type { ZodType } from 'zod'\nimport type { Campagin } from '../types'\n\ntype AudienceGroupOption = {\n label: string\n value: string\n}\n\nexport type FormSchema = {\n name: string\n startDate: number\n endDate: number\n budget: number\n campaignType: string\n audienceGroup: AudienceGroupOption[]\n}\n\ntype CreateCampaignProps = {\n onCreate: (value: Campagin) => void\n}\n\nconst audienceGroupOption = [\n { label: 'Existing customers', value: 'existingCustomer' },\n { label: 'Tech enthusiasts', value: 'techEnthusiasts' },\n { label: 'Students and parents', value: 'studentsParents' },\n { label: 'General public', value: 'generalPublic' },\n { label: 'Gift shoppers', value: 'giftShoppers' },\n]\n\nconst validationSchema: ZodType<FormSchema> = z.object({\n name: z.string({ required_error: 'Please enter campaign name' }),\n startDate: z.number({ required_error: 'Please select a start date' }),\n endDate: z.number({ required_error: 'Please select a end date' }),\n budget: z.number({ required_error: 'Please enter budget' }),\n campaignType: z.string({ required_error: 'Please select campaign type' }),\n audienceGroup: z\n .array(z.object({ value: z.string(), label: z.string() }))\n .nonempty('At least one is selected!'),\n})\n\nconst CreateCampaign = ({ onCreate }: CreateCampaignProps) => {\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const {\n handleSubmit,\n formState: { errors, isSubmitting },\n reset,\n resetField,\n control,\n watch,\n } = useForm<FormSchema>({\n resolver: zodResolver(validationSchema),\n })\n\n const handleDialogClose = () => {\n setDialogOpen(false)\n }\n\n const handleDialogCancel = () => {\n reset()\n handleDialogClose()\n }\n\n const onSubmit = async (formValue: FormSchema) => {\n await sleep(500)\n onCreate({\n id: uniqueId('campaign-'),\n name: formValue.name || 'Untitle campaign',\n startDate: formValue.startDate * 1000,\n endDate: formValue.endDate * 1000,\n budget: formValue.budget,\n leadsGenerated: 0,\n conversions: 0,\n conversionRate: 0,\n status: 'disabled',\n type: formValue.campaignType,\n audienceGroup: formValue.audienceGroup.map((group) => group.value),\n })\n reset()\n handleDialogClose()\n }\n\n return (\n <>\n <Button size=\"sm\" onClick={() => setDialogOpen(true)}>\n Create campaign\n </Button>\n <Dialog\n isOpen={dialogOpen}\n width={600}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n <h4>New campaign</h4>\n <Form className=\"mt-6\" onSubmit={handleSubmit(onSubmit)}>\n <FormItem\n label=\"Type\"\n invalid={Boolean(errors.campaignType)}\n errorMessage={errors.campaignType?.message}\n >\n <Controller\n name=\"campaignType\"\n control={control}\n render={({ field }) => (\n <Segment\n value={field.value}\n className=\"grid grid-cols-3 gap-4 bg-transparent\"\n onChange={(value) => field.onChange(value)}\n >\n {Object.entries(campaignTypeOption).map(\n ([key, props]) => (\n <Segment.Item key={key} value={key}>\n {({\n active,\n onSegmentItemClick,\n }) => {\n return (\n <div\n className={classNames(\n 'flex justify-between border rounded-xl border-gray-300 py-5 px-4 select-none ring-1',\n active\n ? 'ring-primary border-primary '\n : 'ring-transparent bg-gray-100',\n )}\n role=\"button\"\n onClick={\n onSegmentItemClick\n }\n >\n <div className=\"flex flex-col items-center justify-center flex-1 gap-2 heading-text font-bold\">\n <div className=\"text-3xl\">\n {props.icon}\n </div>\n <div className=\"font-bold\">\n {\n props.label\n }\n </div>\n </div>\n </div>\n )\n }}\n </Segment.Item>\n ),\n )}\n </Segment>\n )}\n />\n </FormItem>\n <FormItem\n label=\"Campaign name\"\n invalid={Boolean(errors.name)}\n errorMessage={errors.name?.message}\n >\n <Controller\n name=\"name\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Campaign name\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex gap-4\">\n <FormItem\n className=\"flex-1\"\n label=\"Start date\"\n invalid={Boolean(errors.startDate)}\n errorMessage={errors.startDate?.message}\n >\n <Controller\n name=\"startDate\"\n control={control}\n render={({ field }) => (\n <DatePicker\n {...field}\n value={\n field.value\n ? dayjs\n .unix(\n field.value as number,\n )\n .toDate()\n : null\n }\n placeholder=\"Select date\"\n minDate={dayjs()\n .startOf('day')\n .toDate()}\n onChange={(date) => {\n if (watch('endDate')) {\n resetField('endDate')\n }\n field.onChange(dayjs(date).unix())\n }}\n />\n )}\n />\n </FormItem>\n <FormItem\n className=\"flex-1\"\n label=\"End date\"\n invalid={Boolean(errors.endDate)}\n errorMessage={errors.endDate?.message}\n >\n <Controller\n name=\"endDate\"\n control={control}\n render={({ field }) => (\n <DatePicker\n {...field}\n value={\n field.value\n ? dayjs\n .unix(\n field.value as number,\n )\n .toDate()\n : null\n }\n placeholder=\"Select date\"\n minDate={dayjs(\n dayjs.unix(watch('startDate')),\n )\n .endOf('day')\n .toDate()}\n onChange={(date) =>\n field.onChange(dayjs(date).unix())\n }\n />\n )}\n />\n </FormItem>\n </div>\n <FormItem\n label=\"Budget\"\n invalid={Boolean(errors.budget)}\n errorMessage={errors.budget?.message}\n >\n <Controller\n name=\"budget\"\n control={control}\n render={({ field }) => (\n <NumericInput\n allowLeadingZeros\n thousandSeparator=\",\"\n value={field.value}\n inputPrefix={'$'}\n placeholder=\"0.00\"\n onValueChange={(e) => {\n field.onChange(e.floatValue)\n }}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Multiple Select\"\n invalid={Boolean(errors.audienceGroup)}\n errorMessage={errors.audienceGroup?.message}\n >\n <Controller\n name=\"audienceGroup\"\n control={control}\n render={({ field }) => (\n <Select<AudienceGroupOption, true>\n isMulti\n componentAs={CreatableSelect}\n options={audienceGroupOption}\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" onClick={handleDialogCancel}>\n Cancel\n </Button>\n <Button\n loading={isSubmitting}\n variant=\"solid\"\n type=\"submit\"\n >\n Submit\n </Button>\n </div>\n </Form>\n </Dialog>\n </>\n )\n}\n\nexport default CreateCampaign\n"],"names":["audienceGroupOption","validationSchema","z","CreateCampaign","onCreate","dialogOpen","setDialogOpen","useState","handleSubmit","errors","isSubmitting","reset","resetField","control","watch","useForm","zodResolver","handleDialogClose","handleDialogCancel","jsxs","Fragment","jsx","Button","Dialog","Form","formValue","sleep","uniqueId","group","FormItem","_a","Controller","field","Segment","value","campaignTypeOption","key","props","active","onSegmentItemClick","classNames","_b","Input","_c","DatePicker","dayjs","date","_d","_e","NumericInput","e","_f","Select","CreatableSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreateCampaign.js","sources":["../../../../../../lib/@ecme/views/dashboards/MarketingDashboard/components/CreateCampaign.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Button from '@/components/ui/Button'\nimport DatePicker from '@/components/ui/DatePicker'\nimport Dialog from '@/components/ui/Dialog'\nimport Input from '@/components/ui/Input'\nimport Select from '@/components/ui/Select'\nimport Segment from '@/components/ui/Segment'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport { campaignTypeOption } from '../utils'\nimport NumericInput from '@/components/shared/NumericInput'\nimport classNames from '@/utils/classNames'\nimport sleep from '@/utils/sleep'\nimport dayjs from 'dayjs'\nimport CreatableSelect from 'react-select/creatable'\nimport { useForm, Controller } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport uniqueId from 'lodash/uniqueId'\nimport type { ZodType } from 'zod'\nimport type { Campagin } from '../types'\n\ntype AudienceGroupOption = {\n label: string\n value: string\n}\n\nexport type FormSchema = {\n name: string\n startDate: number\n endDate: number\n budget: number\n campaignType: string\n audienceGroup: AudienceGroupOption[]\n}\n\ntype CreateCampaignProps = {\n onCreate: (value: Campagin) => void\n}\n\nconst audienceGroupOption = [\n { label: 'Existing customers', value: 'existingCustomer' },\n { label: 'Tech enthusiasts', value: 'techEnthusiasts' },\n { label: 'Students and parents', value: 'studentsParents' },\n { label: 'General public', value: 'generalPublic' },\n { label: 'Gift shoppers', value: 'giftShoppers' },\n]\n\nconst validationSchema: ZodType<FormSchema> = z.object({\n name: z.string({ required_error: 'Please enter campaign name' }),\n startDate: z.number({ required_error: 'Please select a start date' }),\n endDate: z.number({ required_error: 'Please select a end date' }),\n budget: z.number({ required_error: 'Please enter budget' }),\n campaignType: z.string({ required_error: 'Please select campaign type' }),\n audienceGroup: z\n .array(z.object({ value: z.string(), label: z.string() }))\n .nonempty('At least one is selected!'),\n})\n\nconst CreateCampaign = ({ onCreate }: CreateCampaignProps) => {\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const {\n handleSubmit,\n formState: { errors, isSubmitting },\n reset,\n resetField,\n control,\n watch,\n } = useForm<FormSchema>({\n resolver: zodResolver(validationSchema),\n })\n\n const handleDialogClose = () => {\n setDialogOpen(false)\n }\n\n const handleDialogCancel = () => {\n reset()\n handleDialogClose()\n }\n\n const onSubmit = async (formValue: FormSchema) => {\n await sleep(500)\n onCreate({\n id: uniqueId('campaign-'),\n name: formValue.name || 'Untitle campaign',\n startDate: formValue.startDate * 1000,\n endDate: formValue.endDate * 1000,\n budget: formValue.budget,\n leadsGenerated: 0,\n conversions: 0,\n conversionRate: 0,\n status: 'disabled',\n type: formValue.campaignType,\n audienceGroup: formValue.audienceGroup.map((group) => group.value),\n })\n reset()\n handleDialogClose()\n }\n\n return (\n <>\n <Button size=\"sm\" onClick={() => setDialogOpen(true)}>\n Create campaign\n </Button>\n <Dialog\n isOpen={dialogOpen}\n width={600}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n <h4>New campaign</h4>\n <Form className=\"mt-6\" onSubmit={handleSubmit(onSubmit)}>\n <FormItem\n label=\"Type\"\n invalid={Boolean(errors.campaignType)}\n errorMessage={errors.campaignType?.message}\n >\n <Controller\n name=\"campaignType\"\n control={control}\n render={({ field }) => (\n <Segment\n value={field.value}\n className=\"grid grid-cols-3 gap-4 bg-transparent\"\n onChange={(value) => field.onChange(value)}\n >\n {Object.entries(campaignTypeOption).map(\n ([key, props]) => (\n <Segment.Item key={key} value={key}>\n {({\n active,\n onSegmentItemClick,\n }) => {\n return (\n <div\n className={classNames(\n 'flex justify-between border rounded-xl border-gray-300 py-5 px-4 select-none ring-1',\n active\n ? 'ring-primary border-primary '\n : 'ring-transparent bg-gray-100',\n )}\n role=\"button\"\n onClick={\n onSegmentItemClick\n }\n >\n <div className=\"flex flex-col items-center justify-center flex-1 gap-2 heading-text font-bold\">\n <div className=\"text-3xl\">\n {props.icon}\n </div>\n <div className=\"font-bold\">\n {\n props.label\n }\n </div>\n </div>\n </div>\n )\n }}\n </Segment.Item>\n ),\n )}\n </Segment>\n )}\n />\n </FormItem>\n <FormItem\n label=\"Campaign name\"\n invalid={Boolean(errors.name)}\n errorMessage={errors.name?.message}\n >\n <Controller\n name=\"name\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Campaign name\"\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex gap-4\">\n <FormItem\n className=\"flex-1\"\n label=\"Start date\"\n invalid={Boolean(errors.startDate)}\n errorMessage={errors.startDate?.message}\n >\n <Controller\n name=\"startDate\"\n control={control}\n render={({ field }) => (\n <DatePicker\n {...field}\n value={\n field.value\n ? dayjs\n .unix(\n field.value as number,\n )\n .toDate()\n : null\n }\n placeholder=\"Select date\"\n minDate={dayjs()\n .startOf('day')\n .toDate()}\n onChange={(date) => {\n if (watch('endDate')) {\n resetField('endDate')\n }\n field.onChange(dayjs(date).unix())\n }}\n />\n )}\n />\n </FormItem>\n <FormItem\n className=\"flex-1\"\n label=\"End date\"\n invalid={Boolean(errors.endDate)}\n errorMessage={errors.endDate?.message}\n >\n <Controller\n name=\"endDate\"\n control={control}\n render={({ field }) => (\n <DatePicker\n {...field}\n value={\n field.value\n ? dayjs\n .unix(\n field.value as number,\n )\n .toDate()\n : null\n }\n placeholder=\"Select date\"\n minDate={dayjs(\n dayjs.unix(watch('startDate')),\n )\n .endOf('day')\n .toDate()}\n onChange={(date) =>\n field.onChange(dayjs(date).unix())\n }\n />\n )}\n />\n </FormItem>\n </div>\n <FormItem\n label=\"Budget\"\n invalid={Boolean(errors.budget)}\n errorMessage={errors.budget?.message}\n >\n <Controller\n name=\"budget\"\n control={control}\n render={({ field }) => (\n <NumericInput\n allowLeadingZeros\n thousandSeparator=\",\"\n value={field.value}\n inputPrefix={'$'}\n placeholder=\"0.00\"\n onValueChange={(e) => {\n field.onChange(e.floatValue)\n }}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Multiple Select\"\n invalid={Boolean(errors.audienceGroup)}\n errorMessage={errors.audienceGroup?.message}\n >\n <Controller\n name=\"audienceGroup\"\n control={control}\n render={({ field }) => (\n <Select<AudienceGroupOption, true>\n isMulti\n componentAs={CreatableSelect}\n options={audienceGroupOption}\n {...field}\n />\n )}\n />\n </FormItem>\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" onClick={handleDialogCancel}>\n Cancel\n </Button>\n <Button\n loading={isSubmitting}\n variant=\"solid\"\n type=\"submit\"\n >\n Submit\n </Button>\n </div>\n </Form>\n </Dialog>\n </>\n )\n}\n\nexport default CreateCampaign\n"],"names":["audienceGroupOption","validationSchema","z","CreateCampaign","onCreate","dialogOpen","setDialogOpen","useState","handleSubmit","errors","isSubmitting","reset","resetField","control","watch","useForm","zodResolver","handleDialogClose","handleDialogCancel","jsxs","Fragment","jsx","Button","Dialog","Form","formValue","sleep","uniqueId","group","FormItem","_a","Controller","field","Segment","value","campaignTypeOption","key","props","active","onSegmentItemClick","classNames","_b","Input","_c","DatePicker","dayjs","date","_d","_e","NumericInput","e","_f","Select","CreatableSelect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeadPerformance.js","sources":["../../../../../../lib/@ecme/views/dashboards/MarketingDashboard/components/LeadPerformance.tsx"],"sourcesContent":["import Card from '@/components/ui/Card'\nimport Chart from '@/components/shared/Chart'\nimport classNames from '@/utils/classNames'\nimport { COLORS } from '@/constants/chart.constant'\nimport type { LeadPerformanceData } from '../types'\n\ntype LeadPerformanceProps = {\n data: LeadPerformanceData\n}\n\nconst LeadPerformance = ({ data }: LeadPerformanceProps) => {\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Lead performance score</h4>\n </div>\n <div className=\"mt-6\">\n <Chart\n type=\"radar\"\n customOptions={{\n xaxis: {\n categories: data.categories,\n labels: {\n formatter: (val) => {\n return `${data.categories.indexOf(val) + 1}`\n },\n },\n },\n yaxis: {\n show: false,\n },\n tooltip: {\n custom: function ({ dataPointIndex }) {\n return `\n <div class=\"py-2 px-4 rounded-xl\">\n <div class=\"flex items-center gap-2\">\n <div class=\"h-[10px] w-[10px] rounded-full\" style=\"background-color: ${COLORS[0]}\"></div>\n <div class=\"flex gap-2\">${data.categories[dataPointIndex]}: <span class=\"font-bold\">${data.series[dataPointIndex]}</span></div>\n </div>\n </div>\n `\n },\n },\n }}\n series={[\n {\n name: 'Lead performance score',\n data: data.series,\n },\n ]}\n height={250}\n />\n <div className=\"flex flex-col gap-4\">\n {data.categories.map((lead, index) => (\n <div\n key={lead + index}\n className=\"flex items-center gap-4\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"rounded-full h-8 w-8 border-2 border-gray-200 dark:border-gray-600 font-bold heading-text flex items-center justify-center\">\n {index + 1}\n </div>\n <div className=\"heading-text\">{lead}</div>\n </div>\n <div className=\"border-dashed border-[1.5px] border-gray-300 dark:border-gray-500 flex-1\" />\n <div>\n <span\n className={classNames(\n 'rounded-full px-2 py-1 text-white',\n data.series[index] > 75 && 'bg-success',\n data.series[index] <= 30 && 'bg-error',\n data.series[index] > 30 &&\n data.series[index] < 75 &&\n 'bg-warning',\n )}\n >\n {data.series[index]}%\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n </Card>\n )\n}\n\nexport default LeadPerformance\n"],"names":["LeadPerformance","data","Card","jsx","jsxs","Chart","val","dataPointIndex","COLORS","lead","index","classNames"],"mappings":";;;;;;AAUA,MAAMA,IAAkB,CAAC,EAAE,MAAAC,0BAElBC,GAAA,EACG,UAAA;AAAA,EAAA,gBAAAC,EAAC,SAAI,WAAU,qCACX,UAAA,gBAAAA,EAAC,MAAA,EAAG,oCAAsB,EAAA,CAC9B;AAAA,EACA,gBAAAC,EAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACG,MAAK;AAAA,QACL,eAAe;AAAA,UACX,OAAO;AAAA,YACH,YAAYJ,EAAK;AAAA,YACjB,QAAQ;AAAA,cACJ,WAAW,CAACK,MACD,GAAGL,EAAK,WAAW,QAAQK,CAAG,IAAI,CAAC;AAAA,YAC9C;AAAA,UACJ;AAAA,UAEJ,OAAO;AAAA,YACH,MAAM;AAAA,UAAA;AAAA,UAEV,SAAS;AAAA,YACL,QAAQ,SAAU,EAAE,gBAAAC,KAAkB;AAClC,qBAAO;AAAA;AAAA;AAAA,mHAG4EC,EAAO,CAAC,CAAC;AAAA,sEACtDP,EAAK,WAAWM,CAAc,CAAC,6BAA6BN,EAAK,OAAOM,CAAc,CAAC;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"LeadPerformance.js","sources":["../../../../../../lib/@ecme/views/dashboards/MarketingDashboard/components/LeadPerformance.tsx"],"sourcesContent":["import Card from '@/components/ui/Card'\nimport Chart from '@/components/shared/Chart'\nimport classNames from '@/utils/classNames'\nimport { COLORS } from '@/constants/chart.constant'\nimport type { LeadPerformanceData } from '../types'\n\ntype LeadPerformanceProps = {\n data: LeadPerformanceData\n}\n\nconst LeadPerformance = ({ data }: LeadPerformanceProps) => {\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Lead performance score</h4>\n </div>\n <div className=\"mt-6\">\n <Chart\n type=\"radar\"\n customOptions={{\n xaxis: {\n categories: data.categories,\n labels: {\n formatter: (val) => {\n return `${data.categories.indexOf(val) + 1}`\n },\n },\n },\n yaxis: {\n show: false,\n },\n tooltip: {\n custom: function ({ dataPointIndex }) {\n return `\n <div class=\"py-2 px-4 rounded-xl\">\n <div class=\"flex items-center gap-2\">\n <div class=\"h-[10px] w-[10px] rounded-full\" style=\"background-color: ${COLORS[0]}\"></div>\n <div class=\"flex gap-2\">${data.categories[dataPointIndex]}: <span class=\"font-bold\">${data.series[dataPointIndex]}</span></div>\n </div>\n </div>\n `\n },\n },\n }}\n series={[\n {\n name: 'Lead performance score',\n data: data.series,\n },\n ]}\n height={250}\n />\n <div className=\"flex flex-col gap-4\">\n {data.categories.map((lead, index) => (\n <div\n key={lead + index}\n className=\"flex items-center gap-4\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"rounded-full h-8 w-8 border-2 border-gray-200 dark:border-gray-600 font-bold heading-text flex items-center justify-center\">\n {index + 1}\n </div>\n <div className=\"heading-text\">{lead}</div>\n </div>\n <div className=\"border-dashed border-[1.5px] border-gray-300 dark:border-gray-500 flex-1\" />\n <div>\n <span\n className={classNames(\n 'rounded-full px-2 py-1 text-white',\n data.series[index] > 75 && 'bg-success',\n data.series[index] <= 30 && 'bg-error',\n data.series[index] > 30 &&\n data.series[index] < 75 &&\n 'bg-warning',\n )}\n >\n {data.series[index]}%\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n </Card>\n )\n}\n\nexport default LeadPerformance\n"],"names":["LeadPerformance","data","Card","jsx","jsxs","Chart","val","dataPointIndex","COLORS","lead","index","classNames"],"mappings":";;;;;;AAUA,MAAMA,IAAkB,CAAC,EAAE,MAAAC,0BAElBC,GAAA,EACG,UAAA;AAAA,EAAA,gBAAAC,EAAC,SAAI,WAAU,qCACX,UAAA,gBAAAA,EAAC,MAAA,EAAG,oCAAsB,EAAA,CAC9B;AAAA,EACA,gBAAAC,EAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACG,MAAK;AAAA,QACL,eAAe;AAAA,UACX,OAAO;AAAA,YACH,YAAYJ,EAAK;AAAA,YACjB,QAAQ;AAAA,cACJ,WAAW,CAACK,MACD,GAAGL,EAAK,WAAW,QAAQK,CAAG,IAAI,CAAC;AAAA,YAC9C;AAAA,UACJ;AAAA,UAEJ,OAAO;AAAA,YACH,MAAM;AAAA,UAAA;AAAA,UAEV,SAAS;AAAA,YACL,QAAQ,SAAU,EAAE,gBAAAC,KAAkB;AAClC,qBAAO;AAAA;AAAA;AAAA,mHAG4EC,EAAO,CAAC,CAAC;AAAA,sEACtDP,EAAK,WAAWM,CAAc,CAAC,6BAA6BN,EAAK,OAAOM,CAAc,CAAC;AAAA;AAAA;AAAA;AAAA,YAIjI;AAAA,UAAA;AAAA,QACJ;AAAA,QAEJ,QAAQ;AAAA,UACJ;AAAA,YACI,MAAM;AAAA,YACN,MAAMN,EAAK;AAAA,UAAA;AAAA,QACf;AAAA,QAEJ,QAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEZ,gBAAAE,EAAC,SAAI,WAAU,uBACV,YAAK,WAAW,IAAI,CAACM,GAAMC,MACxB,gBAAAN;AAAA,MAAC;AAAA,MAAA;AAAA,QAEG,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8HACV,UAAAO,IAAQ,GACb;AAAA,YACA,gBAAAP,EAAC,OAAA,EAAI,WAAU,gBAAgB,UAAAM,EAAA,CAAK;AAAA,UAAA,GACxC;AAAA,UACA,gBAAAN,EAAC,OAAA,EAAI,WAAU,2EAAA,CAA2E;AAAA,4BACzF,OAAA,EACG,UAAA,gBAAAC;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,WAAWO;AAAA,gBACP;AAAA,gBACAV,EAAK,OAAOS,CAAK,IAAI,MAAM;AAAA,gBAC3BT,EAAK,OAAOS,CAAK,KAAK,MAAM;AAAA,gBAC5BT,EAAK,OAAOS,CAAK,IAAI,MACjBT,EAAK,OAAOS,CAAK,IAAI,MACrB;AAAA,cAAA;AAAA,cAGP,UAAA;AAAA,gBAAAT,EAAK,OAAOS,CAAK;AAAA,gBAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,EACxB,CACJ;AAAA,QAAA;AAAA,MAAA;AAAA,MAvBKD,IAAOC;AAAA,IAAA,CAyBnB,EAAA,CACL;AAAA,EAAA,EAAA,CACJ;AAAA,GACJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecentCampaign.js","sources":["../../../../../../lib/@ecme/views/dashboards/MarketingDashboard/components/RecentCampaign.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport Avatar from '@/components/ui/Avatar'\nimport Card from '@/components/ui/Card'\nimport Table from '@/components/ui/Table'\nimport Switcher from '@/components/ui/Switcher'\nimport Tag from '@/components/ui/Tag'\nimport CreateCampaign from './CreateCampaign'\nimport classNames from '@/utils/classNames'\nimport { campaignTypeOption } from '../utils'\nimport { NumericFormat } from 'react-number-format'\nimport dayjs from 'dayjs'\nimport type { Campagin } from '../types'\n\ntype RecentCampaignProps = {\n data: Campagin[]\n}\n\nconst campaignStatus: Record<string, { label: string; className: string }> = {\n active: { label: 'Active', className: 'bg-sky-200' },\n completed: { label: 'Completed', className: 'bg-emerald-200' },\n scheduled: { label: 'Scheduled', className: 'bg-orange-200' },\n disabled: { label: 'Disabled', className: '' },\n}\n\nconst { Tr, Td, TBody, THead, Th } = Table\n\nconst RecentCampaign = ({ data }: RecentCampaignProps) => {\n const [campaignList, setCampaignList] = useState<Campagin[]>(data)\n\n useEffect(() => {\n if (data.length > 0) {\n setCampaignList(data)\n }\n }, [data])\n\n const handleCreate = (value: Campagin) => {\n setCampaignList((prevList) => {\n return [...[value], ...prevList]\n })\n }\n\n const handleSwitcherChange = (\n value: boolean,\n id: string,\n status: string,\n ) => {\n setCampaignList((prevList) => {\n const list = prevList.map((campaign) => {\n if (campaign.id === id) {\n if (status === 'scheduled' && value) {\n campaign.startDate = new Date().setDate(\n new Date().getDate(),\n )\n campaign.status = 'active'\n }\n\n if (status === 'disabled' && value) {\n campaign.status = 'active'\n }\n\n if (status === 'active' && !value) {\n campaign.status = 'disabled'\n }\n }\n return campaign\n })\n return list\n })\n }\n\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Campaigns</h4>\n <div>\n <CreateCampaign onCreate={handleCreate} />\n </div>\n </div>\n <div className=\"mt-6\">\n <Table hoverable={false}>\n <THead>\n <Tr>\n <Th></Th>\n <Th>Campaign</Th>\n <Th>Status</Th>\n <Th>Budget</Th>\n <Th>Conversions</Th>\n <Th>Start</Th>\n <Th>End</Th>\n </Tr>\n </THead>\n <TBody>\n {campaignList.map((campagin) => (\n <Tr key={campagin.id}>\n <Td>\n <Switcher\n checked={campagin.status === 'active'}\n disabled={\n campagin.status === 'completed'\n }\n onChange={(val) =>\n handleSwitcherChange(\n val,\n campagin.id,\n campagin.status,\n )\n }\n />\n </Td>\n <Td>\n <div className=\"flex items-center gap-2\">\n <Avatar\n className=\"bg-transparent dark:bg-transparent p-2 border-2 border-gray-200 dark:border-gray-600\"\n size={50}\n shape=\"round\"\n icon={\n <div\n className={classNames(\n 'text-2xl heading-text',\n )}\n >\n {\n campaignTypeOption[\n campagin.type\n ].icon\n }\n </div>\n }\n />\n <div className=\"whitespace-nowrap\">\n <div className=\"heading-text font-bold\">\n {campagin.name}\n </div>\n {\n campaignTypeOption[\n campagin.type\n ].label\n }\n </div>\n </div>\n </Td>\n <Td>\n <Tag\n className={classNames(\n campaignStatus[campagin.status]\n .className,\n )}\n >\n {campaignStatus[campagin.status].label}\n </Tag>\n </Td>\n <Td>\n <NumericFormat\n displayType=\"text\"\n value={campagin.budget}\n prefix={'$'}\n thousandSeparator={true}\n />\n </Td>\n <Td>\n <div>{campagin.conversions}%</div>\n </Td>\n <Td>\n <div className=\"whitespace-nowrap\">\n {dayjs(campagin.startDate).format(\n 'DD MMM YYYY',\n )}\n </div>\n </Td>\n <Td>\n <div className=\"whitespace-nowrap\">\n {dayjs(campagin.endDate).format(\n 'DD MMM YYYY',\n )}\n </div>\n </Td>\n </Tr>\n ))}\n </TBody>\n </Table>\n </div>\n </Card>\n )\n}\n\nexport default RecentCampaign\n"],"names":["campaignStatus","Tr","Td","TBody","THead","Th","Table","RecentCampaign","data","campaignList","setCampaignList","useState","useEffect","handleCreate","value","prevList","handleSwitcherChange","id","status","campaign","Card","jsxs","jsx","CreateCampaign","campagin","Switcher","val","Avatar","classNames","campaignTypeOption","Tag","NumericFormat","dayjs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RecentCampaign.js","sources":["../../../../../../lib/@ecme/views/dashboards/MarketingDashboard/components/RecentCampaign.tsx"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport Avatar from '@/components/ui/Avatar'\nimport Card from '@/components/ui/Card'\nimport Table from '@/components/ui/Table'\nimport Switcher from '@/components/ui/Switcher'\nimport Tag from '@/components/ui/Tag'\nimport CreateCampaign from './CreateCampaign'\nimport classNames from '@/utils/classNames'\nimport { campaignTypeOption } from '../utils'\nimport { NumericFormat } from 'react-number-format'\nimport dayjs from 'dayjs'\nimport type { Campagin } from '../types'\n\ntype RecentCampaignProps = {\n data: Campagin[]\n}\n\nconst campaignStatus: Record<string, { label: string; className: string }> = {\n active: { label: 'Active', className: 'bg-sky-200' },\n completed: { label: 'Completed', className: 'bg-emerald-200' },\n scheduled: { label: 'Scheduled', className: 'bg-orange-200' },\n disabled: { label: 'Disabled', className: '' },\n}\n\nconst { Tr, Td, TBody, THead, Th } = Table\n\nconst RecentCampaign = ({ data }: RecentCampaignProps) => {\n const [campaignList, setCampaignList] = useState<Campagin[]>(data)\n\n useEffect(() => {\n if (data.length > 0) {\n setCampaignList(data)\n }\n }, [data])\n\n const handleCreate = (value: Campagin) => {\n setCampaignList((prevList) => {\n return [...[value], ...prevList]\n })\n }\n\n const handleSwitcherChange = (\n value: boolean,\n id: string,\n status: string,\n ) => {\n setCampaignList((prevList) => {\n const list = prevList.map((campaign) => {\n if (campaign.id === id) {\n if (status === 'scheduled' && value) {\n campaign.startDate = new Date().setDate(\n new Date().getDate(),\n )\n campaign.status = 'active'\n }\n\n if (status === 'disabled' && value) {\n campaign.status = 'active'\n }\n\n if (status === 'active' && !value) {\n campaign.status = 'disabled'\n }\n }\n return campaign\n })\n return list\n })\n }\n\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Campaigns</h4>\n <div>\n <CreateCampaign onCreate={handleCreate} />\n </div>\n </div>\n <div className=\"mt-6\">\n <Table hoverable={false}>\n <THead>\n <Tr>\n <Th></Th>\n <Th>Campaign</Th>\n <Th>Status</Th>\n <Th>Budget</Th>\n <Th>Conversions</Th>\n <Th>Start</Th>\n <Th>End</Th>\n </Tr>\n </THead>\n <TBody>\n {campaignList.map((campagin) => (\n <Tr key={campagin.id}>\n <Td>\n <Switcher\n checked={campagin.status === 'active'}\n disabled={\n campagin.status === 'completed'\n }\n onChange={(val) =>\n handleSwitcherChange(\n val,\n campagin.id,\n campagin.status,\n )\n }\n />\n </Td>\n <Td>\n <div className=\"flex items-center gap-2\">\n <Avatar\n className=\"bg-transparent dark:bg-transparent p-2 border-2 border-gray-200 dark:border-gray-600\"\n size={50}\n shape=\"round\"\n icon={\n <div\n className={classNames(\n 'text-2xl heading-text',\n )}\n >\n {\n campaignTypeOption[\n campagin.type\n ].icon\n }\n </div>\n }\n />\n <div className=\"whitespace-nowrap\">\n <div className=\"heading-text font-bold\">\n {campagin.name}\n </div>\n {\n campaignTypeOption[\n campagin.type\n ].label\n }\n </div>\n </div>\n </Td>\n <Td>\n <Tag\n className={classNames(\n campaignStatus[campagin.status]\n .className,\n )}\n >\n {campaignStatus[campagin.status].label}\n </Tag>\n </Td>\n <Td>\n <NumericFormat\n displayType=\"text\"\n value={campagin.budget}\n prefix={'$'}\n thousandSeparator={true}\n />\n </Td>\n <Td>\n <div>{campagin.conversions}%</div>\n </Td>\n <Td>\n <div className=\"whitespace-nowrap\">\n {dayjs(campagin.startDate).format(\n 'DD MMM YYYY',\n )}\n </div>\n </Td>\n <Td>\n <div className=\"whitespace-nowrap\">\n {dayjs(campagin.endDate).format(\n 'DD MMM YYYY',\n )}\n </div>\n </Td>\n </Tr>\n ))}\n </TBody>\n </Table>\n </div>\n </Card>\n )\n}\n\nexport default RecentCampaign\n"],"names":["campaignStatus","Tr","Td","TBody","THead","Th","Table","RecentCampaign","data","campaignList","setCampaignList","useState","useEffect","handleCreate","value","prevList","handleSwitcherChange","id","status","campaign","Card","jsxs","jsx","CreateCampaign","campagin","Switcher","val","Avatar","classNames","campaignTypeOption","Tag","NumericFormat","dayjs"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateEventDialog.js","sources":["../../../../../../lib/@ecme/views/dashboards/ProjectDashboard/components/CreateEventDialog.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Button from '@/components/ui/Button'\nimport Dialog from '@/components/ui/Dialog'\nimport Input from '@/components/ui/Input'\nimport Select, { Option as DefaultOption } from '@/components/ui/Select'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport {\n TbVideo,\n TbCheckbox,\n TbCoffee,\n TbCalendarStar,\n TbPresentation,\n TbBell,\n} from 'react-icons/tb'\nimport { LuTreePalm } from 'react-icons/lu'\nimport { useForm, Controller } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport uniqueId from 'lodash/uniqueId'\nimport { components } from 'react-select'\nimport type { Event } from '../types'\nimport type { ZodType } from 'zod'\nimport type { ReactNode } from 'react'\nimport type { ControlProps, OptionProps } from 'react-select'\n\nexport type FormSchema = {\n type: Event\n label: string\n time: number\n}\n\ntype EventOption = { label: string; value: Event; color: string }\n\nconst { Control } = components\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const eventTypes: Record<\n Event,\n { label: string; icon: ReactNode; color: string }\n> = {\n task: {\n label: 'Task',\n icon: <TbCheckbox />,\n color: 'bg-purple-200 dark:bg-purple-200',\n },\n meeting: {\n label: 'Meeting',\n icon: <TbVideo />,\n color: 'bg-sky-200 dark:bg-sky-200',\n },\n holiday: {\n label: 'Enjoy your holiday',\n icon: <LuTreePalm />,\n color: 'bg-amber-200 dark:bg-amber-200',\n },\n breaks: {\n label: 'Break',\n icon: <TbCoffee />,\n color: 'bg-orange-200 dark:bg-orange-200',\n },\n event: {\n label: 'Event',\n icon: <TbCalendarStar />,\n color: 'bg-emerald-200 dark:bg-emerald-200',\n },\n workshops: {\n label: 'Workshop',\n icon: <TbPresentation />,\n color: 'bg-rose-200 dark:bg-rose-200',\n },\n reminders: {\n label: 'Reminder',\n icon: <TbBell />,\n color: 'bg-teal-200 dark:bg-teal-200',\n },\n}\n\nconst eventOptions: EventOption[] = [\n { label: 'Task', value: 'task', color: 'bg-purple-200' },\n { label: 'Meeting', value: 'meeting', color: 'bg-sky-200' },\n { label: 'Breaks', value: 'breaks', color: 'bg-orange-200' },\n { label: 'Event', value: 'event', color: 'bg-emerald-200' },\n { label: 'Workshops', value: 'workshops', color: 'bg-rose-200' },\n { label: 'Reminders', value: 'reminders', color: 'bg-teal-200' },\n]\n\nconst timeOption = [\n { value: 0, label: '12:00 AM' },\n { value: 1, label: '1:00 AM' },\n { value: 2, label: '2:00 AM' },\n { value: 3, label: '3:00 AM' },\n { value: 4, label: '4:00 AM' },\n { value: 5, label: '5:00 AM' },\n { value: 6, label: '6:00 AM' },\n { value: 7, label: '7:00 AM' },\n { value: 8, label: '8:00 AM' },\n { value: 9, label: '9:00 AM' },\n { value: 10, label: '10:00 AM' },\n { value: 11, label: '11:00 AM' },\n { value: 12, label: '12:00 PM' },\n { value: 13, label: '1:00 PM' },\n { value: 14, label: '2:00 PM' },\n { value: 15, label: '3:00 PM' },\n { value: 16, label: '4:00 PM' },\n { value: 17, label: '5:00 PM' },\n { value: 18, label: '6:00 PM' },\n { value: 19, label: '7:00 PM' },\n { value: 20, label: '8:00 PM' },\n { value: 21, label: '9:00 PM' },\n { value: 22, label: '10:00 PM' },\n { value: 23, label: '11:00 PM' },\n]\n\nconst CustomSelectOption = (props: OptionProps<EventOption>) => {\n return (\n <DefaultOption<EventOption>\n {...props}\n customLabel={(_, label) => (\n <span className=\"flex items-center gap-2\">\n <span>{label}</span>\n </span>\n )}\n />\n )\n}\n\nconst CustomControl = ({ children, ...props }: ControlProps<EventOption>) => {\n const selected = props.getValue()[0]\n return (\n <Control {...props}>\n {selected && <></>}\n {children}\n </Control>\n )\n}\n\nconst validationSchema: ZodType<FormSchema> = z.object({\n type: z.union([\n z.literal('meeting'),\n z.literal('task'),\n z.literal('holiday'),\n z.literal('breaks'),\n z.literal('event'),\n z.literal('workshops'),\n z.literal('reminders'),\n ]),\n label: z.string({ required_error: 'Please enter event name' }),\n time: z.number({ required_error: 'Please select a time' }),\n})\n\nconst CreateEventDialog = ({\n onCreateEvent,\n}: {\n onCreateEvent: (value: FormSchema & { id: string }) => void\n}) => {\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const {\n handleSubmit,\n formState: { errors, isSubmitting },\n reset,\n control,\n } = useForm<FormSchema>({\n resolver: zodResolver(validationSchema),\n })\n\n const handleDialogClose = () => {\n reset()\n setDialogOpen(false)\n }\n\n const onSubmit = (value: FormSchema) => {\n onCreateEvent({\n id: uniqueId('schedule-event-'),\n ...value,\n })\n handleDialogClose()\n }\n\n return (\n <>\n <Button block onClick={() => setDialogOpen(true)}>\n Add event\n </Button>\n <Dialog\n isOpen={dialogOpen}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n <h4>New event</h4>\n <Form className=\"mt-6\" onSubmit={handleSubmit(onSubmit)}>\n <FormItem\n label=\"Event name\"\n invalid={Boolean(errors.label)}\n errorMessage={errors.label?.message}\n >\n <Controller\n name=\"label\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Event name\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Event type\"\n invalid={Boolean(errors.type)}\n errorMessage={\n errors.type?.message && 'Please select a type'\n }\n >\n <Controller\n name=\"type\"\n control={control}\n render={({ field }) => (\n <Select<EventOption>\n options={eventOptions}\n {...field}\n components={{\n Option: CustomSelectOption,\n Control: CustomControl,\n }}\n placeholder=\"Event type\"\n value={eventOptions.filter(\n (option) =>\n option.value === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.value)\n }\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Time\"\n invalid={Boolean(errors.time)}\n errorMessage={errors.time?.message}\n >\n <Controller\n name=\"time\"\n control={control}\n render={({ field }) => (\n <Select\n options={timeOption}\n {...field}\n placeholder=\"Select a time...\"\n value={timeOption.filter(\n (option) =>\n option.value === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.value)\n }\n />\n )}\n />\n </FormItem>\n <Button\n block\n variant=\"solid\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Create\n </Button>\n </Form>\n </Dialog>\n </>\n )\n}\n\nexport default CreateEventDialog\n"],"names":["Control","components","eventTypes","TbCheckbox","TbVideo","LuTreePalm","TbCoffee","TbCalendarStar","TbPresentation","TbBell","eventOptions","timeOption","CustomSelectOption","props","jsx","DefaultOption","_","label","CustomControl","children","selected","jsxs","Fragment","validationSchema","z","CreateEventDialog","onCreateEvent","dialogOpen","setDialogOpen","useState","handleSubmit","errors","isSubmitting","reset","control","useForm","zodResolver","handleDialogClose","Button","Dialog","Form","value","uniqueId","FormItem","_a","Controller","field","Input","_b","Select","option","_c"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreateEventDialog.js","sources":["../../../../../../lib/@ecme/views/dashboards/ProjectDashboard/components/CreateEventDialog.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Button from '@/components/ui/Button'\nimport Dialog from '@/components/ui/Dialog'\nimport Input from '@/components/ui/Input'\nimport Select, { Option as DefaultOption } from '@/components/ui/Select'\nimport { Form, FormItem } from '@/components/ui/Form'\nimport {\n TbVideo,\n TbCheckbox,\n TbCoffee,\n TbCalendarStar,\n TbPresentation,\n TbBell,\n} from 'react-icons/tb'\nimport { LuTreePalm } from 'react-icons/lu'\nimport { useForm, Controller } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport { z } from 'zod'\nimport uniqueId from 'lodash/uniqueId'\nimport { components } from 'react-select'\nimport type { Event } from '../types'\nimport type { ZodType } from 'zod'\nimport type { ReactNode } from 'react'\nimport type { ControlProps, OptionProps } from 'react-select'\n\nexport type FormSchema = {\n type: Event\n label: string\n time: number\n}\n\ntype EventOption = { label: string; value: Event; color: string }\n\nconst { Control } = components\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const eventTypes: Record<\n Event,\n { label: string; icon: ReactNode; color: string }\n> = {\n task: {\n label: 'Task',\n icon: <TbCheckbox />,\n color: 'bg-purple-200 dark:bg-purple-200',\n },\n meeting: {\n label: 'Meeting',\n icon: <TbVideo />,\n color: 'bg-sky-200 dark:bg-sky-200',\n },\n holiday: {\n label: 'Enjoy your holiday',\n icon: <LuTreePalm />,\n color: 'bg-amber-200 dark:bg-amber-200',\n },\n breaks: {\n label: 'Break',\n icon: <TbCoffee />,\n color: 'bg-orange-200 dark:bg-orange-200',\n },\n event: {\n label: 'Event',\n icon: <TbCalendarStar />,\n color: 'bg-emerald-200 dark:bg-emerald-200',\n },\n workshops: {\n label: 'Workshop',\n icon: <TbPresentation />,\n color: 'bg-rose-200 dark:bg-rose-200',\n },\n reminders: {\n label: 'Reminder',\n icon: <TbBell />,\n color: 'bg-teal-200 dark:bg-teal-200',\n },\n}\n\nconst eventOptions: EventOption[] = [\n { label: 'Task', value: 'task', color: 'bg-purple-200' },\n { label: 'Meeting', value: 'meeting', color: 'bg-sky-200' },\n { label: 'Breaks', value: 'breaks', color: 'bg-orange-200' },\n { label: 'Event', value: 'event', color: 'bg-emerald-200' },\n { label: 'Workshops', value: 'workshops', color: 'bg-rose-200' },\n { label: 'Reminders', value: 'reminders', color: 'bg-teal-200' },\n]\n\nconst timeOption = [\n { value: 0, label: '12:00 AM' },\n { value: 1, label: '1:00 AM' },\n { value: 2, label: '2:00 AM' },\n { value: 3, label: '3:00 AM' },\n { value: 4, label: '4:00 AM' },\n { value: 5, label: '5:00 AM' },\n { value: 6, label: '6:00 AM' },\n { value: 7, label: '7:00 AM' },\n { value: 8, label: '8:00 AM' },\n { value: 9, label: '9:00 AM' },\n { value: 10, label: '10:00 AM' },\n { value: 11, label: '11:00 AM' },\n { value: 12, label: '12:00 PM' },\n { value: 13, label: '1:00 PM' },\n { value: 14, label: '2:00 PM' },\n { value: 15, label: '3:00 PM' },\n { value: 16, label: '4:00 PM' },\n { value: 17, label: '5:00 PM' },\n { value: 18, label: '6:00 PM' },\n { value: 19, label: '7:00 PM' },\n { value: 20, label: '8:00 PM' },\n { value: 21, label: '9:00 PM' },\n { value: 22, label: '10:00 PM' },\n { value: 23, label: '11:00 PM' },\n]\n\nconst CustomSelectOption = (props: OptionProps<EventOption>) => {\n return (\n <DefaultOption<EventOption>\n {...props}\n customLabel={(_, label) => (\n <span className=\"flex items-center gap-2\">\n <span>{label}</span>\n </span>\n )}\n />\n )\n}\n\nconst CustomControl = ({ children, ...props }: ControlProps<EventOption>) => {\n const selected = props.getValue()[0]\n return (\n <Control {...props}>\n {selected && <></>}\n {children}\n </Control>\n )\n}\n\nconst validationSchema: ZodType<FormSchema> = z.object({\n type: z.union([\n z.literal('meeting'),\n z.literal('task'),\n z.literal('holiday'),\n z.literal('breaks'),\n z.literal('event'),\n z.literal('workshops'),\n z.literal('reminders'),\n ]),\n label: z.string({ required_error: 'Please enter event name' }),\n time: z.number({ required_error: 'Please select a time' }),\n})\n\nconst CreateEventDialog = ({\n onCreateEvent,\n}: {\n onCreateEvent: (value: FormSchema & { id: string }) => void\n}) => {\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const {\n handleSubmit,\n formState: { errors, isSubmitting },\n reset,\n control,\n } = useForm<FormSchema>({\n resolver: zodResolver(validationSchema),\n })\n\n const handleDialogClose = () => {\n reset()\n setDialogOpen(false)\n }\n\n const onSubmit = (value: FormSchema) => {\n onCreateEvent({\n id: uniqueId('schedule-event-'),\n ...value,\n })\n handleDialogClose()\n }\n\n return (\n <>\n <Button block onClick={() => setDialogOpen(true)}>\n Add event\n </Button>\n <Dialog\n isOpen={dialogOpen}\n onClose={handleDialogClose}\n onRequestClose={handleDialogClose}\n >\n <h4>New event</h4>\n <Form className=\"mt-6\" onSubmit={handleSubmit(onSubmit)}>\n <FormItem\n label=\"Event name\"\n invalid={Boolean(errors.label)}\n errorMessage={errors.label?.message}\n >\n <Controller\n name=\"label\"\n control={control}\n render={({ field }) => (\n <Input\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Event name\"\n {...field}\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Event type\"\n invalid={Boolean(errors.type)}\n errorMessage={\n errors.type?.message && 'Please select a type'\n }\n >\n <Controller\n name=\"type\"\n control={control}\n render={({ field }) => (\n <Select<EventOption>\n options={eventOptions}\n {...field}\n components={{\n Option: CustomSelectOption,\n Control: CustomControl,\n }}\n placeholder=\"Event type\"\n value={eventOptions.filter(\n (option) =>\n option.value === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.value)\n }\n />\n )}\n />\n </FormItem>\n <FormItem\n label=\"Time\"\n invalid={Boolean(errors.time)}\n errorMessage={errors.time?.message}\n >\n <Controller\n name=\"time\"\n control={control}\n render={({ field }) => (\n <Select\n options={timeOption}\n {...field}\n placeholder=\"Select a time...\"\n value={timeOption.filter(\n (option) =>\n option.value === field.value,\n )}\n onChange={(option) =>\n field.onChange(option?.value)\n }\n />\n )}\n />\n </FormItem>\n <Button\n block\n variant=\"solid\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Create\n </Button>\n </Form>\n </Dialog>\n </>\n )\n}\n\nexport default CreateEventDialog\n"],"names":["Control","components","eventTypes","TbCheckbox","TbVideo","LuTreePalm","TbCoffee","TbCalendarStar","TbPresentation","TbBell","eventOptions","timeOption","CustomSelectOption","props","jsx","DefaultOption","_","label","CustomControl","children","selected","jsxs","Fragment","validationSchema","z","CreateEventDialog","onCreateEvent","dialogOpen","setDialogOpen","useState","handleSubmit","errors","isSubmitting","reset","control","useForm","zodResolver","handleDialogClose","Button","Dialog","Form","value","uniqueId","FormItem","_a","Controller","field","Input","_b","Select","option","_c"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CurrentTasks.js","sources":["../../../../../../lib/@ecme/views/dashboards/ProjectDashboard/components/CurrentTasks.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport { useState, useEffect } from 'react'\nimport Card from '@/components/ui/Card'\nimport Button from '@/components/ui/Button'\nimport Tag from '@/components/ui/Tag'\nimport classNames from '@/utils/classNames'\nimport isLastChild from '@/utils/isLastChild'\nimport { TbCircleCheck, TbCircleCheckFilled, TbCalendar } from 'react-icons/tb'\nimport dayjs from 'dayjs'\nimport { Link } from 'react-router-dom'\nimport type { Task } from '../types'\n\ntype CurrentTasksProps = {\n data: Task[]\n}\n\nexport const labelClass: Record<string, string> = {\n 'In Progress': 'bg-sky-200 dark:bg-sky-200 dark:text-gray-900',\n Completed: 'bg-emerald-200 dark:bg-emerald-200 dark:text-gray-900',\n Pending: 'bg-amber-200 dark:bg-amber-200 dark:text-gray-900',\n High: 'bg-red-200 dark:bg-red-200 dark:text-gray-900',\n Medium: 'bg-orange-200 dark:bg-orange-200 dark:text-gray-900',\n Low: 'bg-purple-200 dark:bg-purple-200 dark:text-gray-900',\n}\n\nconst CurrentTasks = ({ data }: CurrentTasksProps) => {\n const [tasks, setTasks] = useState<Task[]>([])\n\n useEffect(() => {\n if (tasks.length === 0) {\n setTasks(data)\n }\n }, [data, tasks.length])\n\n const handleChange = (taskId: string) => {\n const newTasks = structuredClone(tasks).map((task) => {\n if (task.id === taskId) {\n task.checked = !task.checked\n }\n return task\n })\n setTasks(newTasks)\n }\n\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Current tasks</h4>\n <Link to=\"/concepts/projects/tasks\">\n <Button asElement=\"div\" size=\"sm\">\n All tasks\n </Button>\n </Link>\n </div>\n <div className=\"mt-4\">\n {tasks.map((task, index) => (\n <div\n key={task.id}\n className={classNames(\n 'flex items-center justify-between py-4 border-gray-200 dark:border-gray-600',\n !isLastChild(tasks, index) && 'border-b',\n )}\n >\n <div className=\"flex items-center gap-4\">\n <button\n className=\" text-[26px] cursor-pointer\"\n role=\"button\"\n onClick={() => handleChange(task.id)}\n >\n {task.checked ? (\n <TbCircleCheckFilled className=\"text-primary\" />\n ) : (\n <TbCircleCheck className=\"hover:text-primary\" />\n )}\n </button>\n <div>\n <div\n className={classNames(\n 'heading-text font-bold mb-1',\n task.checked &&\n 'line-through opacity-50',\n )}\n >\n {task.name}\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <TbCalendar className=\"text-lg\" />\n {task.dueDate\n ? dayjs(task.dueDate).format(\n 'MMMM DD',\n )\n : '-'}\n </div>\n </div>\n </div>\n </div>\n <div>\n <Tag\n className={`mr-2 rtl:ml-2 mb-2 ${\n task.priority\n ? labelClass[task.priority]\n : ''\n }`}\n >\n {task.priority}\n </Tag>\n </div>\n </div>\n ))}\n </div>\n </Card>\n )\n}\n\nexport default CurrentTasks\n"],"names":["labelClass","CurrentTasks","data","tasks","setTasks","useState","useEffect","handleChange","taskId","newTasks","task","Card","jsxs","jsx","Link","Button","index","classNames","isLastChild","TbCircleCheckFilled","TbCircleCheck","TbCalendar","dayjs","Tag"],"mappings":";;;;;;;;;;;;;AAgBO,MAAMA,IAAqC;AAAA,EAC9C,eAAe;AAAA,EACf,WAAW;AAAA,EACX,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,KAAK;AACT,GAEMC,IAAe,CAAC,EAAE,MAAAC,QAA8B;AAClD,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAiB,CAAA,CAAE;AAE7C,EAAAC,EAAU,MAAM;AACZ,IAAIH,EAAM,WAAW,KACjBC,EAASF,CAAI;AAAA,
|
|
1
|
+
{"version":3,"file":"CurrentTasks.js","sources":["../../../../../../lib/@ecme/views/dashboards/ProjectDashboard/components/CurrentTasks.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport { useState, useEffect } from 'react'\nimport Card from '@/components/ui/Card'\nimport Button from '@/components/ui/Button'\nimport Tag from '@/components/ui/Tag'\nimport classNames from '@/utils/classNames'\nimport isLastChild from '@/utils/isLastChild'\nimport { TbCircleCheck, TbCircleCheckFilled, TbCalendar } from 'react-icons/tb'\nimport dayjs from 'dayjs'\nimport { Link } from 'react-router-dom'\nimport type { Task } from '../types'\n\ntype CurrentTasksProps = {\n data: Task[]\n}\n\nexport const labelClass: Record<string, string> = {\n 'In Progress': 'bg-sky-200 dark:bg-sky-200 dark:text-gray-900',\n Completed: 'bg-emerald-200 dark:bg-emerald-200 dark:text-gray-900',\n Pending: 'bg-amber-200 dark:bg-amber-200 dark:text-gray-900',\n High: 'bg-red-200 dark:bg-red-200 dark:text-gray-900',\n Medium: 'bg-orange-200 dark:bg-orange-200 dark:text-gray-900',\n Low: 'bg-purple-200 dark:bg-purple-200 dark:text-gray-900',\n}\n\nconst CurrentTasks = ({ data }: CurrentTasksProps) => {\n const [tasks, setTasks] = useState<Task[]>([])\n\n useEffect(() => {\n if (tasks.length === 0) {\n setTasks(data)\n }\n }, [data, tasks.length])\n\n const handleChange = (taskId: string) => {\n const newTasks = structuredClone(tasks).map((task) => {\n if (task.id === taskId) {\n task.checked = !task.checked\n }\n return task\n })\n setTasks(newTasks)\n }\n\n return (\n <Card>\n <div className=\"flex items-center justify-between\">\n <h4>Current tasks</h4>\n <Link to=\"/concepts/projects/tasks\">\n <Button asElement=\"div\" size=\"sm\">\n All tasks\n </Button>\n </Link>\n </div>\n <div className=\"mt-4\">\n {tasks.map((task, index) => (\n <div\n key={task.id}\n className={classNames(\n 'flex items-center justify-between py-4 border-gray-200 dark:border-gray-600',\n !isLastChild(tasks, index) && 'border-b',\n )}\n >\n <div className=\"flex items-center gap-4\">\n <button\n className=\" text-[26px] cursor-pointer\"\n role=\"button\"\n onClick={() => handleChange(task.id)}\n >\n {task.checked ? (\n <TbCircleCheckFilled className=\"text-primary\" />\n ) : (\n <TbCircleCheck className=\"hover:text-primary\" />\n )}\n </button>\n <div>\n <div\n className={classNames(\n 'heading-text font-bold mb-1',\n task.checked &&\n 'line-through opacity-50',\n )}\n >\n {task.name}\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex items-center gap-1\">\n <TbCalendar className=\"text-lg\" />\n {task.dueDate\n ? dayjs(task.dueDate).format(\n 'MMMM DD',\n )\n : '-'}\n </div>\n </div>\n </div>\n </div>\n <div>\n <Tag\n className={`mr-2 rtl:ml-2 mb-2 ${\n task.priority\n ? labelClass[task.priority]\n : ''\n }`}\n >\n {task.priority}\n </Tag>\n </div>\n </div>\n ))}\n </div>\n </Card>\n )\n}\n\nexport default CurrentTasks\n"],"names":["labelClass","CurrentTasks","data","tasks","setTasks","useState","useEffect","handleChange","taskId","newTasks","task","Card","jsxs","jsx","Link","Button","index","classNames","isLastChild","TbCircleCheckFilled","TbCircleCheck","TbCalendar","dayjs","Tag"],"mappings":";;;;;;;;;;;;;AAgBO,MAAMA,IAAqC;AAAA,EAC9C,eAAe;AAAA,EACf,WAAW;AAAA,EACX,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,KAAK;AACT,GAEMC,IAAe,CAAC,EAAE,MAAAC,QAA8B;AAClD,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAiB,CAAA,CAAE;AAE7C,EAAAC,EAAU,MAAM;AACZ,IAAIH,EAAM,WAAW,KACjBC,EAASF,CAAI;AAAA,EAErB,GAAG,CAACA,GAAMC,EAAM,MAAM,CAAC;AAEvB,QAAMI,IAAe,CAACC,MAAmB;AACrC,UAAMC,IAAW,gBAAgBN,CAAK,EAAE,IAAI,CAACO,OACrCA,EAAK,OAAOF,MACZE,EAAK,UAAU,CAACA,EAAK,UAElBA,EACV;AACD,IAAAN,EAASK,CAAQ;AAAA,EACrB;AAEA,2BACKE,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,QAAG,UAAA,gBAAA,CAAa;AAAA,MACjB,gBAAAA,EAACC,GAAA,EAAK,IAAG,4BACL,UAAA,gBAAAD,EAACE,GAAA,EAAO,WAAU,OAAM,MAAK,MAAK,UAAA,YAAA,CAElC,EAAA,CACJ;AAAA,IAAA,GACJ;AAAA,IACA,gBAAAF,EAAC,SAAI,WAAU,QACV,YAAM,IAAI,CAACH,GAAMM,MACd,gBAAAJ;AAAA,MAAC;AAAA,MAAA;AAAA,QAEG,WAAWK;AAAA,UACP;AAAA,UACA,CAACC,EAAYf,GAAOa,CAAK,KAAK;AAAA,QAAA;AAAA,QAGlC,UAAA;AAAA,UAAA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAA,gBAAAC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,SAAS,MAAMN,EAAaG,EAAK,EAAE;AAAA,gBAElC,UAAAA,EAAK,UACF,gBAAAG,EAACM,GAAA,EAAoB,WAAU,gBAAe,IAE9C,gBAAAN,EAACO,GAAA,EAAc,WAAU,qBAAA,CAAqB;AAAA,cAAA;AAAA,YAAA;AAAA,8BAGrD,OAAA,EACG,UAAA;AAAA,cAAA,gBAAAP;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,WAAWI;AAAA,oBACP;AAAA,oBACAP,EAAK,WACD;AAAA,kBAAA;AAAA,kBAGP,UAAAA,EAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,gCAET,OAAA,EAAI,WAAU,2BACX,UAAA,gBAAAE,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,gBAAA,gBAAAC,EAACQ,GAAA,EAAW,WAAU,UAAA,CAAU;AAAA,gBAC/BX,EAAK,UACAY,EAAMZ,EAAK,OAAO,EAAE;AAAA,kBAChB;AAAA,gBAAA,IAEJ;AAAA,cAAA,EAAA,CACV,EAAA,CACJ;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GACJ;AAAA,4BACC,OAAA,EACG,UAAA,gBAAAG;AAAA,YAACU;AAAA,YAAA;AAAA,cACG,WAAW,sBACPb,EAAK,WACCV,EAAWU,EAAK,QAAQ,IACxB,EACV;AAAA,cAEC,UAAAA,EAAK;AAAA,YAAA;AAAA,UAAA,EACV,CACJ;AAAA,QAAA;AAAA,MAAA;AAAA,MAlDKA,EAAK;AAAA,IAAA,CAoDjB,EAAA,CACL;AAAA,EAAA,GACJ;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schedule.js","sources":["../../../../../../lib/@ecme/views/dashboards/ProjectDashboard/components/Schedule.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport GanttChart from '@/components/shared/GanttChart'\nimport getStartEndDateForProject from '@/components/shared/GanttChart/getStartEndDateForProject'\nimport type { ExtendedTask } from '@/components/shared/GanttChart'\n\ntype ScheduleProps = {\n data: ExtendedTask[]\n}\n\nconst colorsMap = {\n overallDesign: '#fbbf24',\n design: '#fdba74',\n overallDevelopment: '#6ee7b7',\n development: '#7dd3fc',\n}\n\nconst Schedule = ({ data = [] }: ScheduleProps) => {\n const [tasks, setTasks] = useState<ExtendedTask[]>(data)\n\n const handleTaskChange = (task: ExtendedTask) => {\n let newTasks = tasks.map((t) => (t.id === task.id ? task : t))\n if (task.project) {\n const [start, end] = getStartEndDateForProject(\n newTasks,\n task.project,\n )\n const project =\n newTasks[newTasks.findIndex((t) => t.id === task.project)]\n if (\n project.start.getTime() !== start.getTime() ||\n project.end.getTime() !== end.getTime()\n ) {\n const changedProject = { ...project, start, end }\n newTasks = newTasks.map((t) =>\n t.id === task.project ? changedProject : t,\n )\n }\n }\n setTasks(newTasks)\n }\n\n const handleProgressChange = async (task: ExtendedTask) => {\n setTasks(tasks.map((t) => (t.id === task.id ? task : t)))\n }\n\n const handleExpanderClick = (task: ExtendedTask) => {\n setTasks(tasks.map((t) => (t.id === task.id ? task : t)))\n }\n\n return (\n <Card>\n <div>\n <h4>Schedule</h4>\n </div>\n <div className=\"mt-4\">\n <GanttChart\n tasks={tasks}\n colorsMap={colorsMap}\n onDateChange={handleTaskChange}\n onProgressChange={handleProgressChange}\n onExpanderClick={handleExpanderClick}\n />\n </div>\n </Card>\n )\n}\n\nexport default Schedule\n"],"names":["colorsMap","Schedule","data","tasks","setTasks","useState","Card","jsx","GanttChart","task","newTasks","t","start","end","getStartEndDateForProject","project","changedProject"],"mappings":";;;;;;;AAUA,MAAMA,IAAY;AAAA,EACd,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,oBAAoB;AAAA,EACpB,aAAa;AACjB,GAEMC,IAAW,CAAC,EAAE,MAAAC,IAAO,CAAA,QAAwB;AAC/C,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAyBH,CAAI;AAgCvD,2BACKI,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EACG,UAAA,gBAAAA,EAAC,MAAA,EAAG,UAAA,WAAA,CAAQ,GAChB;AAAA,IACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,QACX,UAAA,gBAAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,OAAAL;AAAA,QACA,WAAAH;AAAA,QACA,cAvCS,CAACS,MAAuB;AAC7C,cAAIC,IAAWP,EAAM,IAAI,CAACQ,MAAOA,EAAE,OAAOF,EAAK,KAAKA,IAAOE,CAAE;AAC7D,cAAIF,EAAK,SAAS;AACd,kBAAM,CAACG,GAAOC,CAAG,IAAIC;AAAA,cACjBJ;AAAA,cACAD,EAAK;AAAA,YAAA,GAEHM,IACFL,EAASA,EAAS,UAAU,CAACC,MAAMA,EAAE,OAAOF,EAAK,OAAO,CAAC;AAC7D,gBACIM,EAAQ,MAAM,QAAA,MAAcH,EAAM,QAAA,KAClCG,EAAQ,IAAI,QAAA,MAAcF,EAAI,WAChC;AACE,oBAAMG,IAAiB,EAAE,GAAGD,GAAS,OAAAH,GAAO,KAAAC,EAAA;AAC5C,cAAAH,IAAWA,EAAS;AAAA,gBAAI,CAACC,MACrBA,EAAE,OAAOF,EAAK,UAAUO,IAAiBL;AAAA,cAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"Schedule.js","sources":["../../../../../../lib/@ecme/views/dashboards/ProjectDashboard/components/Schedule.tsx"],"sourcesContent":["import { useState } from 'react'\nimport Card from '@/components/ui/Card'\nimport GanttChart from '@/components/shared/GanttChart'\nimport getStartEndDateForProject from '@/components/shared/GanttChart/getStartEndDateForProject'\nimport type { ExtendedTask } from '@/components/shared/GanttChart'\n\ntype ScheduleProps = {\n data: ExtendedTask[]\n}\n\nconst colorsMap = {\n overallDesign: '#fbbf24',\n design: '#fdba74',\n overallDevelopment: '#6ee7b7',\n development: '#7dd3fc',\n}\n\nconst Schedule = ({ data = [] }: ScheduleProps) => {\n const [tasks, setTasks] = useState<ExtendedTask[]>(data)\n\n const handleTaskChange = (task: ExtendedTask) => {\n let newTasks = tasks.map((t) => (t.id === task.id ? task : t))\n if (task.project) {\n const [start, end] = getStartEndDateForProject(\n newTasks,\n task.project,\n )\n const project =\n newTasks[newTasks.findIndex((t) => t.id === task.project)]\n if (\n project.start.getTime() !== start.getTime() ||\n project.end.getTime() !== end.getTime()\n ) {\n const changedProject = { ...project, start, end }\n newTasks = newTasks.map((t) =>\n t.id === task.project ? changedProject : t,\n )\n }\n }\n setTasks(newTasks)\n }\n\n const handleProgressChange = async (task: ExtendedTask) => {\n setTasks(tasks.map((t) => (t.id === task.id ? task : t)))\n }\n\n const handleExpanderClick = (task: ExtendedTask) => {\n setTasks(tasks.map((t) => (t.id === task.id ? task : t)))\n }\n\n return (\n <Card>\n <div>\n <h4>Schedule</h4>\n </div>\n <div className=\"mt-4\">\n <GanttChart\n tasks={tasks}\n colorsMap={colorsMap}\n onDateChange={handleTaskChange}\n onProgressChange={handleProgressChange}\n onExpanderClick={handleExpanderClick}\n />\n </div>\n </Card>\n )\n}\n\nexport default Schedule\n"],"names":["colorsMap","Schedule","data","tasks","setTasks","useState","Card","jsx","GanttChart","task","newTasks","t","start","end","getStartEndDateForProject","project","changedProject"],"mappings":";;;;;;;AAUA,MAAMA,IAAY;AAAA,EACd,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,oBAAoB;AAAA,EACpB,aAAa;AACjB,GAEMC,IAAW,CAAC,EAAE,MAAAC,IAAO,CAAA,QAAwB;AAC/C,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAyBH,CAAI;AAgCvD,2BACKI,GAAA,EACG,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EACG,UAAA,gBAAAA,EAAC,MAAA,EAAG,UAAA,WAAA,CAAQ,GAChB;AAAA,IACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,QACX,UAAA,gBAAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,OAAAL;AAAA,QACA,WAAAH;AAAA,QACA,cAvCS,CAACS,MAAuB;AAC7C,cAAIC,IAAWP,EAAM,IAAI,CAACQ,MAAOA,EAAE,OAAOF,EAAK,KAAKA,IAAOE,CAAE;AAC7D,cAAIF,EAAK,SAAS;AACd,kBAAM,CAACG,GAAOC,CAAG,IAAIC;AAAA,cACjBJ;AAAA,cACAD,EAAK;AAAA,YAAA,GAEHM,IACFL,EAASA,EAAS,UAAU,CAACC,MAAMA,EAAE,OAAOF,EAAK,OAAO,CAAC;AAC7D,gBACIM,EAAQ,MAAM,QAAA,MAAcH,EAAM,QAAA,KAClCG,EAAQ,IAAI,QAAA,MAAcF,EAAI,WAChC;AACE,oBAAMG,IAAiB,EAAE,GAAGD,GAAS,OAAAH,GAAO,KAAAC,EAAA;AAC5C,cAAAH,IAAWA,EAAS;AAAA,gBAAI,CAACC,MACrBA,EAAE,OAAOF,EAAK,UAAUO,IAAiBL;AAAA,cAAA;AAAA,YAEjD;AAAA,UACJ;AACA,UAAAP,EAASM,CAAQ;AAAA,QACrB;AAAA,QAoBgB,kBAlBa,OAAOD,MAAuB;AACvD,UAAAL,EAASD,EAAM,IAAI,CAACQ,MAAOA,EAAE,OAAOF,EAAK,KAAKA,IAAOE,CAAE,CAAC;AAAA,QAC5D;AAAA,QAiBgB,iBAfY,CAACF,MAAuB;AAChD,UAAAL,EAASD,EAAM,IAAI,CAACQ,MAAOA,EAAE,OAAOF,EAAK,KAAKA,IAAOE,CAAE,CAAC;AAAA,QAC5D;AAAA,MAaiC;AAAA,IAAA,EACrB,CACJ;AAAA,EAAA,GACJ;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpcomingSchedule.js","sources":["../../../../../../lib/@ecme/views/dashboards/ProjectDashboard/components/UpcomingSchedule.tsx"],"sourcesContent":["import { useState, useMemo } from 'react'\nimport Avatar from '@/components/ui/Avatar'\nimport Card from '@/components/ui/Card'\nimport Calendar from '@/components/ui/Calendar'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport CreateEventDialog, { eventTypes } from './CreateEventDialog'\nimport { eventGenerator, isToday } from '../utils'\nimport classNames from '@/utils/classNames'\n\nimport dayjs from 'dayjs'\nimport type { FormSchema as CreateEventPayload } from './CreateEventDialog'\nimport type { Event } from '../types'\n\ntype ScheduledEvent = {\n id: string\n type: Event\n label: string\n time?: Date\n}\n\ntype ScheduledEventProps = ScheduledEvent\n\nconst ScheduledEvent = (props: ScheduledEventProps) => {\n const { type, label, time } = props\n\n const event = eventTypes[type]\n\n return (\n <div className=\"flex items-center justify-between gap-4 py-1\">\n <div className=\"flex items-center gap-3\">\n <div>\n <Avatar\n className={classNames('text-gray-900', event?.color)}\n icon={event?.icon}\n shape=\"round\"\n />\n </div>\n <div>\n <div className=\"font-bold heading-text\">{label}</div>\n <div className=\"font-normal\">{event?.label}</div>\n </div>\n </div>\n <div>\n <span className=\"font-semibold heading-text\">\n {time && dayjs(time).format('hh:mm')}{' '}\n </span>\n <small>{time && dayjs(time).format('A')}</small>\n </div>\n </div>\n )\n}\n\nconst UpcomingSchedule = () => {\n const [selectedDate, setSelectedDate] = useState<Date | null>(\n dayjs().toDate(),\n )\n const [createdEventCache, setCreatedEventCache] = useState<\n Record<string, ScheduledEvent[]>\n >({})\n\n const eventList = useMemo(() => {\n const date = selectedDate\n const previousCreatedEvent =\n createdEventCache[dayjs(date).toISOString()] || []\n const eventList = [\n ...eventGenerator(date as Date),\n ...previousCreatedEvent,\n ]\n\n return eventList.sort((a, b) => {\n if (!a.time && !b.time) {\n return 0\n }\n if (!a.time) {\n return 1\n }\n if (!b.time) {\n return -1\n }\n return a.time.getTime() - b.time.getTime()\n })\n }, [selectedDate, createdEventCache])\n\n const handleCreateEvent = (value: CreateEventPayload & { id: string }) => {\n const payload = {\n id: value.id,\n label: value.label,\n type: value.type,\n time: dayjs(selectedDate)\n .set('hour', value.time)\n .set('minute', 0)\n .toDate(),\n }\n setCreatedEventCache((prevRecord) => {\n if (prevRecord[dayjs(selectedDate).toISOString()]) {\n prevRecord[dayjs(selectedDate).toISOString()].push(payload)\n } else {\n prevRecord[dayjs(selectedDate).toISOString()] = [payload]\n }\n\n return structuredClone(prevRecord)\n })\n }\n\n return (\n <Card>\n <div className=\"flex flex-col md:flex-row xl:flex-col md:gap-10 xl:gap-0\">\n <div className=\"flex items-center mx-auto w-[280px]\">\n <Calendar\n value={selectedDate}\n onChange={(val) => {\n setSelectedDate(val)\n }}\n />\n </div>\n <div className=\"w-full\">\n <div className=\"my-6\">\n <h5>\n Scehdule{' '}\n {isToday(selectedDate as Date)\n ? 'today'\n : dayjs(selectedDate).format('DD MMM')}\n </h5>\n </div>\n <div className=\"w-full\">\n <ScrollBar className=\"overflow-y-auto h-[280px] xl:max-w-[280px]\">\n <div className=\"flex flex-col gap-4\">\n {eventList.map((event) => (\n <ScheduledEvent key={event.id} {...event} />\n ))}\n </div>\n </ScrollBar>\n </div>\n </div>\n </div>\n <div className=\"mt-4\">\n <CreateEventDialog onCreateEvent={handleCreateEvent} />\n </div>\n </Card>\n )\n}\n\nexport default UpcomingSchedule\n"],"names":["ScheduledEvent","props","type","label","time","event","eventTypes","jsxs","jsx","Avatar","classNames","dayjs","UpcomingSchedule","selectedDate","setSelectedDate","useState","createdEventCache","setCreatedEventCache","eventList","useMemo","date","previousCreatedEvent","eventGenerator","a","b","handleCreateEvent","value","payload","prevRecord","Card","Calendar","val","isToday","ScrollBar","CreateEventDialog"],"mappings":";;;;;;;;;;;;;AAsBA,MAAMA,IAAiB,CAACC,MAA+B;AACnD,QAAM,EAAE,MAAAC,GAAM,OAAAC,GAAO,MAAAC,EAAA,IAASH,GAExBI,IAAQC,EAAWJ,CAAI;AAE7B,SACI,gBAAAK,EAAC,OAAA,EAAI,WAAU,gDACX,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,MAAA,gBAAAC,EAAC,OAAA,EACG,UAAA,gBAAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UACG,WAAWC,EAAW,iBAAiBL,KAAA,gBAAAA,EAAO,KAAK;AAAA,UACnD,MAAMA,KAAA,gBAAAA,EAAO;AAAA,UACb,OAAM;AAAA,QAAA;AAAA,MAAA,GAEd;AAAA,wBACC,OAAA,EACG,UAAA;AAAA,QAAA,gBAAAG,EAAC,OAAA,EAAI,WAAU,0BAA0B,UAAAL,GAAM;AAAA,QAC/C,gBAAAK,EAAC,OAAA,EAAI,WAAU,eAAe,iCAAO,MAAA,CAAM;AAAA,MAAA,EAAA,CAC/C;AAAA,IAAA,GACJ;AAAA,sBACC,OAAA,EACG,UAAA;AAAA,MAAA,gBAAAD,EAAC,QAAA,EAAK,WAAU,8BACX,UAAA;AAAA,QAAAH,KAAQO,EAAMP,CAAI,EAAE,OAAO,OAAO;AAAA,QAAG;AAAA,MAAA,GAC1C;AAAA,MACA,gBAAAI,EAAC,WAAO,UAAAJ,KAAQO,EAAMP,CAAI,EAAE,OAAO,GAAG,EAAA,CAAE;AAAA,IAAA,EAAA,CAC5C;AAAA,EAAA,GACJ;AAER,GAEMQ,IAAmB,MAAM;AAC3B,QAAM,CAACC,GAAcC,CAAe,IAAIC;AAAA,IACpCJ,EAAA,EAAQ,OAAA;AAAA,EAAO,GAEb,CAACK,GAAmBC,CAAoB,IAAIF,EAEhD,CAAA,CAAE,GAEEG,IAAYC,EAAQ,MAAM;AAC5B,UAAMC,IAAOP,GACPQ,IACFL,EAAkBL,EAAMS,CAAI,EAAE,YAAA,CAAa,KAAK,CAAA;AAMpD,WALkB;AAAA,MACd,GAAGE,EAAeF,CAAY;AAAA,MAC9B,GAAGC;AAAA,IAAA,EAGU,KAAK,CAACE,GAAGC,MAClB,CAACD,EAAE,QAAQ,CAACC,EAAE,OACP,IAEND,EAAE,OAGFC,EAAE,OAGAD,EAAE,KAAK,QAAA,IAAYC,EAAE,KAAK,QAAA,IAFtB,KAHA,CAMd;AAAA,
|
|
1
|
+
{"version":3,"file":"UpcomingSchedule.js","sources":["../../../../../../lib/@ecme/views/dashboards/ProjectDashboard/components/UpcomingSchedule.tsx"],"sourcesContent":["import { useState, useMemo } from 'react'\nimport Avatar from '@/components/ui/Avatar'\nimport Card from '@/components/ui/Card'\nimport Calendar from '@/components/ui/Calendar'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport CreateEventDialog, { eventTypes } from './CreateEventDialog'\nimport { eventGenerator, isToday } from '../utils'\nimport classNames from '@/utils/classNames'\n\nimport dayjs from 'dayjs'\nimport type { FormSchema as CreateEventPayload } from './CreateEventDialog'\nimport type { Event } from '../types'\n\ntype ScheduledEvent = {\n id: string\n type: Event\n label: string\n time?: Date\n}\n\ntype ScheduledEventProps = ScheduledEvent\n\nconst ScheduledEvent = (props: ScheduledEventProps) => {\n const { type, label, time } = props\n\n const event = eventTypes[type]\n\n return (\n <div className=\"flex items-center justify-between gap-4 py-1\">\n <div className=\"flex items-center gap-3\">\n <div>\n <Avatar\n className={classNames('text-gray-900', event?.color)}\n icon={event?.icon}\n shape=\"round\"\n />\n </div>\n <div>\n <div className=\"font-bold heading-text\">{label}</div>\n <div className=\"font-normal\">{event?.label}</div>\n </div>\n </div>\n <div>\n <span className=\"font-semibold heading-text\">\n {time && dayjs(time).format('hh:mm')}{' '}\n </span>\n <small>{time && dayjs(time).format('A')}</small>\n </div>\n </div>\n )\n}\n\nconst UpcomingSchedule = () => {\n const [selectedDate, setSelectedDate] = useState<Date | null>(\n dayjs().toDate(),\n )\n const [createdEventCache, setCreatedEventCache] = useState<\n Record<string, ScheduledEvent[]>\n >({})\n\n const eventList = useMemo(() => {\n const date = selectedDate\n const previousCreatedEvent =\n createdEventCache[dayjs(date).toISOString()] || []\n const eventList = [\n ...eventGenerator(date as Date),\n ...previousCreatedEvent,\n ]\n\n return eventList.sort((a, b) => {\n if (!a.time && !b.time) {\n return 0\n }\n if (!a.time) {\n return 1\n }\n if (!b.time) {\n return -1\n }\n return a.time.getTime() - b.time.getTime()\n })\n }, [selectedDate, createdEventCache])\n\n const handleCreateEvent = (value: CreateEventPayload & { id: string }) => {\n const payload = {\n id: value.id,\n label: value.label,\n type: value.type,\n time: dayjs(selectedDate)\n .set('hour', value.time)\n .set('minute', 0)\n .toDate(),\n }\n setCreatedEventCache((prevRecord) => {\n if (prevRecord[dayjs(selectedDate).toISOString()]) {\n prevRecord[dayjs(selectedDate).toISOString()].push(payload)\n } else {\n prevRecord[dayjs(selectedDate).toISOString()] = [payload]\n }\n\n return structuredClone(prevRecord)\n })\n }\n\n return (\n <Card>\n <div className=\"flex flex-col md:flex-row xl:flex-col md:gap-10 xl:gap-0\">\n <div className=\"flex items-center mx-auto w-[280px]\">\n <Calendar\n value={selectedDate}\n onChange={(val) => {\n setSelectedDate(val)\n }}\n />\n </div>\n <div className=\"w-full\">\n <div className=\"my-6\">\n <h5>\n Scehdule{' '}\n {isToday(selectedDate as Date)\n ? 'today'\n : dayjs(selectedDate).format('DD MMM')}\n </h5>\n </div>\n <div className=\"w-full\">\n <ScrollBar className=\"overflow-y-auto h-[280px] xl:max-w-[280px]\">\n <div className=\"flex flex-col gap-4\">\n {eventList.map((event) => (\n <ScheduledEvent key={event.id} {...event} />\n ))}\n </div>\n </ScrollBar>\n </div>\n </div>\n </div>\n <div className=\"mt-4\">\n <CreateEventDialog onCreateEvent={handleCreateEvent} />\n </div>\n </Card>\n )\n}\n\nexport default UpcomingSchedule\n"],"names":["ScheduledEvent","props","type","label","time","event","eventTypes","jsxs","jsx","Avatar","classNames","dayjs","UpcomingSchedule","selectedDate","setSelectedDate","useState","createdEventCache","setCreatedEventCache","eventList","useMemo","date","previousCreatedEvent","eventGenerator","a","b","handleCreateEvent","value","payload","prevRecord","Card","Calendar","val","isToday","ScrollBar","CreateEventDialog"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layouts.js","sources":["../../../../../../lib/@ecme/views/guide/Documentations/components/Layouts.tsx"],"sourcesContent":["import SyntaxHighlighter from '@/components/shared/SyntaxHighlighter'\nimport DemoComponentApi from '@/components/docs/DemoComponentApi'\nimport type { CSSProperties } from 'react'\n\nconst Layouts = () => {\n return (\n <>\n <p>\n Ecme provide 6 types of post login layouts & 3 types of auth\n layouts, all layouts component can be found under directory{' '}\n <code>src/components/layouts/PostLoginLayout/components*</code>\n and all the components used within layouts can be found under{' '}\n <code>src/components/template/*</code>\n </p>\n <p>The following was the post login layouts that we had:</p>\n <ul>\n <li>\n Collapsible side - <code>'collapsibleSide'</code>\n </li>\n <li>\n Stacked side - <code>'stackedSide'</code>\n </li>\n <li>\n Top bar classic - <code>'topBarClassic'</code>\n </li>\n <li>\n Frameless side - <code>'framelessSide'</code>\n </li>\n <li>\n Content overlay - <code>'contentOverlay'</code>\n </li>\n <li>\n Blank - <code>'blank'</code>\n </li>\n </ul>\n <div className=\"mt-10\" id=\"configuringLayout\">\n <div className=\"mt-10\" id=\"classic\">\n <h5>Configuring Layout</h5>\n <p className=\"mt-1\">\n You can config the initial layout in{' '}\n <code>src/configs/theme.config.ts</code> with the string\n value above\n </p>\n <SyntaxHighlighter language=\"js\">{`export const themeConfig = {\n ...\n layout: {\n type: 'framelessSide',\n ...\n },\n}`}</SyntaxHighlighter>\n <p>\n Here's available values & key for configuring the{' '}\n <code>layout</code> field\n </p>\n <DemoComponentApi\n hideApiTitle\n keyText=\"properties\"\n api={[\n {\n api: [\n {\n propName: 'type',\n type: `<code>'blank'</code> | <code>'collapsibleSide'</code> | <code>'stackedSide'</code> | <code>'topBarClassic'</code> | <code>'framelessSide'</code> | <code>'contentOverlay'</code>`,\n default: `<code>'modern'</code>`,\n desc: 'Type of the application layout',\n },\n {\n propName: 'sideNavCollapse',\n type: `<code>boolean</code>`,\n default: `<code>false</code>`,\n desc: `Whether to collapse the side navigation (only only applicable when <code>type</code> is <code>'classic'</code> or <code>'modern'</code>)`,\n },\n ],\n },\n ]}\n />\n </div>\n </div>\n <div className=\"mt-10\" id=\"overridingLayouts\">\n <h5>Overriding layouts</h5>\n <p className=\"mt-1\">\n In general, all route views will follow the settings of the\n layout in <code>theme.config.ts</code>. However, if there\n are some cases where you want to show a different layout in\n a certiain route view, you can the layout value you wish\n under the route <code>meta</code> to overide the current\n layout as we mentioned in <strong>Routing</strong> guide.\n </p>\n <SyntaxHighlighter language=\"js\">{`export const protectedRoutes = [\n {\n key: 'a-unique-id-for-this-view'\n path: 'path',\n component: React.lazy(() => import('views/Component')),\n authority: [],\n meta: {\n ...,\n layout: 'blank'\n }\n },\t\t\t\n]`}</SyntaxHighlighter>\n </div>\n <div className=\"mt-10\" id=\"authLayouts\">\n <h5>Auth layouts</h5>\n <p>\n Configuring auth layout is slightly different from the\n above, just need to visit{' '}\n <code>src/components/layouts/AuthLayout/AuthLayout.ts</code>{' '}\n and replace the wrapper component. For example, switching{' '}\n <code>side</code> to <code>simple</code>\n </p>\n <SyntaxHighlighter\n language=\"js\"\n wrapLines={true}\n showLineNumbers={true}\n lineProps={(lineNumber) => {\n const style: CSSProperties = { display: 'block' }\n if ([9].includes(lineNumber)) {\n style.backgroundColor = '#00ff002e'\n } else if ([10].includes(lineNumber)) {\n style.backgroundColor = '#ff00001f'\n }\n return { style }\n }}\n >{`import { useMemo, lazy } from 'react'\nimport type { CommonProps } from '@/@types/common'\nimport type { LazyExoticComponent } from 'react'\n\ntype LayoutType = 'simple' | 'split' | 'side'\n\ntype Layouts = Record<LayoutType, LazyExoticComponent<<T extends CommonProps>(props: T) => JSX.Element>>\n\nconst currentLayoutType: LayoutType = 'side'\nconst currentLayoutType: LayoutType = 'simple'\n\nconst layouts: Layouts = {\n simple: lazy(() => import('./Simple')),\n split: lazy(() => import('./Split')),\n side: lazy(() => import('./Side')),\n}\n\nconst AuthLayout = ({ children }: CommonProps) => {\n\n const Layout = useMemo(() => {\n return layouts[currentLayoutType]\n }, [])\n\n return (\n <Layout>{children}</Layout>\n )\n}\n\nexport default AuthLayout`}</SyntaxHighlighter>\n </div>\n </>\n )\n}\n\nexport default Layouts\n"],"names":["Layouts","jsxs","Fragment","jsx","SyntaxHighlighter","DemoComponentApi","lineNumber","style"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Layouts.js","sources":["../../../../../../lib/@ecme/views/guide/Documentations/components/Layouts.tsx"],"sourcesContent":["import SyntaxHighlighter from '@/components/shared/SyntaxHighlighter'\nimport DemoComponentApi from '@/components/docs/DemoComponentApi'\nimport type { CSSProperties } from 'react'\n\nconst Layouts = () => {\n return (\n <>\n <p>\n Ecme provide 6 types of post login layouts & 3 types of auth\n layouts, all layouts component can be found under directory{' '}\n <code>src/components/layouts/PostLoginLayout/components*</code>\n and all the components used within layouts can be found under{' '}\n <code>src/components/template/*</code>\n </p>\n <p>The following was the post login layouts that we had:</p>\n <ul>\n <li>\n Collapsible side - <code>'collapsibleSide'</code>\n </li>\n <li>\n Stacked side - <code>'stackedSide'</code>\n </li>\n <li>\n Top bar classic - <code>'topBarClassic'</code>\n </li>\n <li>\n Frameless side - <code>'framelessSide'</code>\n </li>\n <li>\n Content overlay - <code>'contentOverlay'</code>\n </li>\n <li>\n Blank - <code>'blank'</code>\n </li>\n </ul>\n <div className=\"mt-10\" id=\"configuringLayout\">\n <div className=\"mt-10\" id=\"classic\">\n <h5>Configuring Layout</h5>\n <p className=\"mt-1\">\n You can config the initial layout in{' '}\n <code>src/configs/theme.config.ts</code> with the string\n value above\n </p>\n <SyntaxHighlighter language=\"js\">{`export const themeConfig = {\n ...\n layout: {\n type: 'framelessSide',\n ...\n },\n}`}</SyntaxHighlighter>\n <p>\n Here's available values & key for configuring the{' '}\n <code>layout</code> field\n </p>\n <DemoComponentApi\n hideApiTitle\n keyText=\"properties\"\n api={[\n {\n api: [\n {\n propName: 'type',\n type: `<code>'blank'</code> | <code>'collapsibleSide'</code> | <code>'stackedSide'</code> | <code>'topBarClassic'</code> | <code>'framelessSide'</code> | <code>'contentOverlay'</code>`,\n default: `<code>'modern'</code>`,\n desc: 'Type of the application layout',\n },\n {\n propName: 'sideNavCollapse',\n type: `<code>boolean</code>`,\n default: `<code>false</code>`,\n desc: `Whether to collapse the side navigation (only only applicable when <code>type</code> is <code>'classic'</code> or <code>'modern'</code>)`,\n },\n ],\n },\n ]}\n />\n </div>\n </div>\n <div className=\"mt-10\" id=\"overridingLayouts\">\n <h5>Overriding layouts</h5>\n <p className=\"mt-1\">\n In general, all route views will follow the settings of the\n layout in <code>theme.config.ts</code>. However, if there\n are some cases where you want to show a different layout in\n a certiain route view, you can the layout value you wish\n under the route <code>meta</code> to overide the current\n layout as we mentioned in <strong>Routing</strong> guide.\n </p>\n <SyntaxHighlighter language=\"js\">{`export const protectedRoutes = [\n {\n key: 'a-unique-id-for-this-view'\n path: 'path',\n component: React.lazy(() => import('views/Component')),\n authority: [],\n meta: {\n ...,\n layout: 'blank'\n }\n },\t\t\t\n]`}</SyntaxHighlighter>\n </div>\n <div className=\"mt-10\" id=\"authLayouts\">\n <h5>Auth layouts</h5>\n <p>\n Configuring auth layout is slightly different from the\n above, just need to visit{' '}\n <code>src/components/layouts/AuthLayout/AuthLayout.ts</code>{' '}\n and replace the wrapper component. For example, switching{' '}\n <code>side</code> to <code>simple</code>\n </p>\n <SyntaxHighlighter\n language=\"js\"\n wrapLines={true}\n showLineNumbers={true}\n lineProps={(lineNumber) => {\n const style: CSSProperties = { display: 'block' }\n if ([9].includes(lineNumber)) {\n style.backgroundColor = '#00ff002e'\n } else if ([10].includes(lineNumber)) {\n style.backgroundColor = '#ff00001f'\n }\n return { style }\n }}\n >{`import { useMemo, lazy } from 'react'\nimport type { CommonProps } from '@/@types/common'\nimport type { LazyExoticComponent } from 'react'\n\ntype LayoutType = 'simple' | 'split' | 'side'\n\ntype Layouts = Record<LayoutType, LazyExoticComponent<<T extends CommonProps>(props: T) => JSX.Element>>\n\nconst currentLayoutType: LayoutType = 'side'\nconst currentLayoutType: LayoutType = 'simple'\n\nconst layouts: Layouts = {\n simple: lazy(() => import('./Simple')),\n split: lazy(() => import('./Split')),\n side: lazy(() => import('./Side')),\n}\n\nconst AuthLayout = ({ children }: CommonProps) => {\n\n const Layout = useMemo(() => {\n return layouts[currentLayoutType]\n }, [])\n\n return (\n <Layout>{children}</Layout>\n )\n}\n\nexport default AuthLayout`}</SyntaxHighlighter>\n </div>\n </>\n )\n}\n\nexport default Layouts\n"],"names":["Layouts","jsxs","Fragment","jsx","SyntaxHighlighter","DemoComponentApi","lineNumber","style"],"mappings":"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"}
|