{"version":3,"file":"index-3bb1a10e.js","sources":["../../src/Locale/en/index.tsx","../../src/Locale/vi/index.tsx","../../src/Locale/index.tsx","../../src/Constants/Routers.constant.ts","../../src/Constants/APIs.constants.ts","../../src/Constants/ActionTypes.constants.ts","../../src/Constants/CookieKeys.constant.ts","../../src/Constants/Enums.contant.ts","../../src/Constants/Permissions.constant.ts","../../src/Constants/DefaultPagination.ts","../../src/Reducers/Authentication.reducer.ts","../../src/Reducers/Role.reducer.ts","../../src/Reducers/Dashboard.reducer.ts","../../src/Reducers/User.reducer.ts","../../src/Reducers/Project.reducer.ts","../../src/Reducers/Board.reducer.ts","../../src/Reducers/LogTime.reducer.ts","../../src/Reducers/DayOffRequest.reducer.ts","../../src/Reducers/LeaveDays.reducer.ts","../../src/Reducers/RequestUpdateTimeCard.reducer.ts","../../src/Utils/ResolveResponse.utils.ts","../../src/Utils/Cookie.utils.ts","../../src/Widgets/Toast/index.tsx","../../src/Configs/socket.config.ts","../../src/Utils/AppServices.utils.ts","../../src/Utils/index.tsx","../../src/Reducers/Timekeeping.reducer.ts","../../src/Reducers/Timesheet.reducer.ts","../../src/Reducers/Chat.reducer.ts","../../src/Reducers/InternalIp.reducer.ts","../../src/Reducers/Holiday.reducer.ts","../../src/Reducers/Performance.reducer.ts","../../src/Reducers/Notification.reducer.ts","../../src/Reducers/Socket.reducer.ts","../../src/Reducers/TaskNote.reducer.ts","../../src/Reducers/Client.reducer.ts","../../src/Reducers/Checkin.reducer.ts","../../src/Reducers/WorkingTime.reducer.ts","../../src/Reducers/ProjectExterior.reducer.ts","../../src/Reducers/Backup.reducer.ts","../../src/Reducers/TimeDeleteFilePrivateChat.reducer.ts","../../src/Reducers/MailReceive.reducer.ts","../../src/Reducers/Workspace.reducer.ts","../../src/Reducers/WorkingDay.reducer.ts","../../src/Reducers/News.reducer.ts","../../src/Reducers/index.ts","../../src/Store/index.tsx","../../src/Themes/CommonColors.tsx","../../src/Themes/index.tsx","../../src/Components/LayoutPart/SideBar/SideBar.menu.tsx","../../src/Components/Common/Button/index.tsx","../../src/Components/Common/Select/index.tsx","../../src/Components/Common/Table/usePagination.tsx","../../src/Components/Common/Table/Pagination.tsx","../../src/Components/Common/Table/index.tsx","../../src/Components/Common/Textarea/index.tsx","../../src/Components/Common/TextField/index.tsx","../../src/Components/Common/UploadAvatar/index.tsx","../../src/Components/Common/Button/IconButtonConfirm.tsx","../../src/Components/Common/SelectUser/index.tsx","../../src/Components/Common/DatePicker/index.tsx","../../src/Components/Common/EstimatedInput/index.tsx","../../src/Components/Common/UploadFile/index.tsx","../../src/Components/Common/CommentBox/defaultStyle.ts","../../src/Components/Common/CommentBox/defaultMentionStyle.ts","../../src/Components/Common/Giphy/index.tsx","../../src/Components/Common/CommentBox/index.tsx","../../src/Components/Common/UploadFileInput/index.tsx","../../src/Components/Common/HighlightedText/index.tsx","../../src/Components/Common/TimeRangePicker/index.tsx","../../src/Components/Common/Autocomplete/index.tsx","../../src/Components/Common/DateRangePicker/index.tsx","../../src/Components/Common/DateTimeRangePicker/index.tsx","../../src/Configs/api.config.ts","../../src/APIs/Authentication.api.ts","../../src/APIs/Role.api.ts","../../src/APIs/User.api.ts","../../src/APIs/Project.api.ts","../../src/APIs/Board.api.ts","../../src/APIs/LogTime.api.ts","../../src/APIs/DayOffRequest.api.ts","../../src/APIs/LeaveDays.api.ts","../../src/APIs/RequestUpdateTimecard.api.ts","../../src/APIs/Timekeeping.api.ts","../../src/APIs/Timesheet.api.ts","../../src/APIs/InternalIp.api.ts","../../src/APIs/Holiday.api.ts","../../src/APIs/Performance.api.ts","../../src/APIs/Notification.api.ts","../../src/APIs/Chat.api.ts","../../src/APIs/TaskNote.api.ts","../../src/APIs/Client.api.ts","../../src/APIs/WorkingTime.api.ts","../../src/APIs/ProjectExterior.api.ts","../../src/APIs/Backup.api.ts","../../src/APIs/TimeDeleteFilePrivateChat.api.ts","../../src/APIs/MailReceive.api.ts","../../src/APIs/Workspace.api.ts","../../src/APIs/WorkingDay.api.ts","../../src/APIs/News.api.ts","../../src/APIs/index.ts","../../src/Actions/Timekeeping.action.ts","../../src/Actions/WorkingTime.action.ts","../../src/Actions/Authentication.action.ts","../../src/Actions/Role.action.ts","../../src/Actions/User.action.ts","../../src/Actions/Board.action.ts","../../src/Actions/Project.action.ts","../../src/Actions/ProjectExterior.actions.ts","../../src/Actions/LogTime.action.ts","../../src/Actions/DayOffRequest.action.ts","../../src/Actions/LeaveDays.action.ts","../../src/Actions/RequestUpdateTimeCard.action.ts","../../src/Actions/Timesheet.action.ts","../../src/Actions/Chat.action.ts","../../src/Actions/InternalIp.action.ts","../../src/Actions/Holiday.action.ts","../../src/Actions/Performance.action.ts","../../src/Actions/Notification.action.ts","../../src/Actions/Socket.action.ts","../../src/Actions/TaskNote.action.ts","../../src/Actions/Client.actions.ts","../../src/Actions/Backup.action.ts","../../src/Actions/TimeDeleteFilePrivateChat.action.ts","../../src/Actions/MailReceive.action.ts","../../src/Actions/Workspace.action.ts","../../src/Actions/WorkingDay.action.ts","../../src/Actions/News.action.ts","../../src/Components/Common/AvatarGroupWithOverflow/index.tsx","../../src/Components/Common/MonthPicker/index.tsx","../../src/Components/Common/Text/index.tsx","../../src/Components/Common/FileItem/index.tsx","../../src/Components/Common/Container/index.tsx","../../src/Components/Common/Chart/BarChart.tsx","../../src/Components/Common/Chart/PieChart.tsx","../../src/Components/Common/Chart/LineChart.tsx","../../src/Components/Common/Chart/DoughnutChart.tsx","../../src/Components/Common/Chart/index.tsx","../../src/Components/Common/ProccessContent/index.tsx","../../src/Components/Common/NoDataFound/index.tsx","../../src/Components/Common/ContentWidthMaxLines/index.tsx","../../src/Components/Common/IconButton/index.tsx","../../src/Components/Popup/Confirm/index.tsx","../../src/Components/Popup/Board/CreateTask.tsx","../../src/Components/Popup/Board/EditTask.tsx","../../src/Components/Popup/Board/TaskDetail.tsx","../../src/Components/Popup/Board/CreateColumn.tsx","../../src/Components/Popup/Board/index.ts","../../src/Components/Popup/Project/ChangeProjectStatus.tsx","../../src/Components/Popup/Project/CreatePerformanceEvaluation.tsx","../../src/Components/Popup/Project/UpdatePerformanceEvaluation.tsx","../../src/Components/Popup/Project/index.ts","../../src/Components/Popup/Users/ChangePassWordAdminDialog.tsx","../../src/Components/Popup/Users/ChangePasswordDialog.tsx","../../src/Components/Popup/Users/ChangeStatusUserDialog.tsx","../../src/Components/Popup/Users/CreateUser.tsx","../../src/Components/Popup/Users/UserProfile.tsx","../../src/Components/Popup/Users/index.ts","../../src/Components/Common/TextEditor/index.tsx","../../src/Helpers/Utils.ts","../../src/Helpers/useWindowWidth.ts","../../src/Helpers/useCopyToClipboard.tsx","../../src/Helpers/WorkingDay.ts","../../src/Helpers/useCenteredPopup.tsx","../../src/Components/Popup/TimeLog/CreateTimelog.tsx","../../src/Components/Popup/TimeLog/UpdateTimelog.tsx","../../src/Components/Popup/TimeLog/CreateTaskNote.tsx","../../src/Components/Popup/TimeLog/UpdateTaskNote.tsx","../../src/Components/Popup/TimeLog/CreateWorkingTime.tsx","../../src/Components/Popup/TimeLog/index.tsx","../../src/Components/Popup/TimeoffRequest/DetailTimeOffRequest.tsx","../../src/Components/Popup/TimeoffRequest/SendTimeOffRequest.tsx","../../src/Components/Popup/TimeoffRequest/UpdateSendTimeOffRequest.tsx","../../src/Components/Popup/TimeoffRequest/index.tsx","../../src/Components/Popup/Overtime/AggregateList.tsx","../../src/Components/Popup/Overtime/DetailOvertime.tsx","../../src/Components/Popup/Overtime/SendOvertime.tsx","../../src/Components/Popup/Overtime/UpdateOvertime.tsx","../../src/Components/Popup/Overtime/index.ts","../../src/Components/Popup/RequestUpdateTimecard/DetailUpdateRequestTimeCard.tsx","../../src/Components/Popup/RequestUpdateTimecard/SendRequestUpdateTimeCard.tsx","../../src/Components/Popup/RequestUpdateTimecard/UpdateRequestTimeCard.tsx","../../src/Components/Popup/RequestUpdateTimecard/index.ts","../../src/Components/Popup/LeaveDays/CreateLeaveDays.tsx","../../src/Components/Popup/LeaveDays/UpdateLeaveDays.tsx","../../src/Components/Popup/LeaveDays/index.ts","../../src/Components/Popup/TimeKeepinng/CreateTimekeepingDialog.tsx","../../src/Components/Popup/TimeKeepinng/MessageTimekeepingDialog.tsx","../../src/Components/Popup/TimeKeepinng/UpdateTimekeepingDialog.tsx","../../src/Components/Popup/TimeKeepinng/index.ts","../../src/Components/Popup/Chat/CreateChat.tsx","../../src/Components/Popup/Chat/CreateGroup.tsx","../../src/Components/Popup/Chat/ChatDetail.tsx","../../src/Components/Popup/Chat/SelectNewAdmin.tsx","../../src/Components/Popup/Chat/Member.tsx","../../src/Components/Popup/Chat/UpdateClearFile.tsx","../../src/Components/Popup/Chat/AdminSettingClearFile.tsx","../../src/Components/Popup/Chat/UpdateTimeDeleteFilePrivateChat.tsx","../../src/Components/Popup/Chat/index.ts","../../src/Components/Popup/InternalIP/CreateInternalDialog.tsx","../../src/Components/Popup/InternalIP/UpdateInternalDialog.tsx","../../src/Components/Popup/InternalIP/index.tsx","../../src/Components/Popup/Holiday/CreateHoliday.tsx","../../src/Components/Popup/Holiday/UpdateHoliday.tsx","../../src/Components/Popup/Holiday/index.ts","../../src/Components/Popup/Performance/index.tsx","../../src/Components/Popup/WarningCheckIn/index.tsx","../../src/Components/Popup/MoreOptions/index.tsx","../../src/Components/Popup/WarningBackup/index.tsx","../../src/Components/Popup/UploadFileRestore/index.tsx","../../src/Components/Popup/MailReceive/index.tsx","../../src/Components/Popup/Workspace/CreateShortCutGroup.tsx","../../src/Components/Popup/Workspace/UpdateShortCutGroup.tsx","../../src/Components/Popup/News/CreateNewsDialog.tsx","../../src/Components/Popup/News/UpdateNewsDialog.tsx","../../src/Components/Popup/News/index.tsx","../../src/Components/LayoutPart/SideBar/NavigationMenu.tsx","../../src/Components/LayoutPart/SideBar/index.tsx","../../src/Components/LayoutPart/Appbar/Notification.tsx","../../src/Assets/no_data.png","../../src/Pages/MainPages/Chat/HighlightText.tsx","../../src/Pages/MainPages/Chat/PortentialChats.tsx","../../src/Components/LayoutPart/Appbar/Chat.tsx","../../src/Components/Popup/WarningCheckIn/WarningCheckInAfternoon.tsx","../../src/Components/LayoutPart/Appbar/LanguageSwitch.tsx","../../src/Components/LayoutPart/Appbar/index.tsx","../../src/Assets/cc-logo-white.svg","../../src/Configs/firebase.config.ts","../../src/Components/DefaultLayout/AdminLayout.tsx","../../src/Pages/MainPages/Dashboard/StatisticBox.tsx","../../src/Components/Common/DateRangeSlider/SingleRange.tsx","../../src/Components/LayoutPart/FullCalendar/CustomHeaderToolbar.tsx","../../src/Pages/MainPages/Dashboard/TimeSheet.tsx","../../src/Pages/MainPages/Dashboard/NewsList.tsx","../../src/Assets/process.svg","../../src/Assets/pending.svg","../../src/Assets/history.svg","../../src/Assets/final.svg","../../src/Components/LayoutPart/DataTable/DealineDashboardDataTable.tsx","../../src/Pages/MainPages/Dashboard/TimesheetsMyWork.tsx","../../src/Pages/MainPages/Dashboard/index.tsx","../../src/Components/LayoutPart/DataTable/UserDataTable.tsx","../../src/Components/LayoutPart/DataTable/ProjectDataTable.tsx","../../src/Components/LayoutPart/DataTable/PerformanceDataTable.tsx","../../src/Components/LayoutPart/DataTable/TimeOffRequestDataTable.tsx","../../src/Components/LayoutPart/DataTable/Overtime.tsx","../../src/Components/LayoutPart/DataTable/LeaveDaysDataTable.tsx","../../src/Components/LayoutPart/DataTable/RequestUpdateTimeCard.Table.tsx","../../src/Components/LayoutPart/DataTable/AggregareDataTableDayoff.tsx","../../src/Components/LayoutPart/DataTable/AggregateDataTableOvertime.tsx","../../src/Components/LayoutPart/DataTable/HolidayDataTable.tsx","../../src/Components/LayoutPart/DataTable/InternalIPDataTable.tsx","../../src/Components/LayoutPart/DataTable/ClientsDataTable.tsx","../../src/Components/LayoutPart/DataTable/WorkingTimeDataTable.tsx","../../src/Components/LayoutPart/DataTable/ProjectExteriorDataTable.tsx","../../src/Components/LayoutPart/DataTable/BackupDataTable.tsx","../../src/Components/LayoutPart/DataTable/TimeDeleteFilePrivateChat.tsx","../../src/Components/LayoutPart/DataTable/NewsDataTable.tsx","../../src/Components/LayoutPart/DataTable/index.tsx","../../src/Pages/MainPages/Project/ProjectListInterior.tsx","../../src/Pages/MainPages/Project/ProjectListExterior.tsx","../../src/Pages/MainPages/Project/ProjectList.tsx","../../src/Assets/right_long_arrow.svg","../../src/Pages/MainPages/Project/ProjectDetail/Information.tsx","../../src/Themes/CommonStyles.tsx","../../src/Pages/MainPages/Project/ProjectDetail/Members.tsx","../../src/Pages/MainPages/Project/ProjectDetail/Calendar.styles.ts","../../src/Pages/MainPages/Project/ProjectDetail/Calendar.tsx","../../src/Components/Common/FullScreenWarning/FullHDWarning.styles.ts","../../src/Components/Common/FullScreenWarning/index.tsx","../../src/Pages/MainPages/Project/ProjectDetail/Timeline.tsx","../../src/Pages/MainPages/Project/ProjectDetail/index.tsx","../../src/Pages/MainPages/Project/CreateProject.tsx","../../src/Pages/MainPages/Project/UpdateProject.tsx","../../src/Pages/MainPages/Project/ShareTimelineToClient/Calendar.styles.ts","../../src/Pages/MainPages/Project/ShareTimelineToClient/Calendar.tsx","../../src/Pages/MainPages/Project/ShareTimelineToClient/index.tsx","../../src/Pages/MainPages/Project/CreateExteriorProject.tsx","../../src/Pages/MainPages/Project/UpdateExteriorProject.tsx","../../src/Pages/MainPages/Project/TimelineExterior/Calendar.tsx","../../src/Pages/MainPages/Project/TimelineExterior/index.tsx","../../src/Pages/MainPages/Project/ProjectDetailExterior.tsx","../../src/Pages/MainPages/Project/index.tsx","../../src/Pages/MainPages/User/UpdateUser.tsx","../../src/Pages/MainPages/User/ListUser.tsx","../../src/Pages/MainPages/User/CreateUser.tsx","../../src/Pages/MainPages/User/index.tsx","../../src/Pages/MainPages/Chat/Bookmark.tsx","../../src/Pages/MainPages/Chat/MessageBox/index.tsx","../../src/Assets/bg-group.jpg","../../src/Pages/MainPages/Chat/UserChat.tsx","../../src/Pages/MainPages/Chat/ChatDesktop/index.tsx","../../src/Pages/MainPages/Chat/ChatMobile/index.tsx","../../src/Pages/MainPages/Chat/index.tsx","../../src/Pages/MainPages/TimeCard/DayOffRequest/DayOffOverview.tsx","../../src/Pages/MainPages/TimeCard/DayOffRequest/DayoffAggregate.tsx","../../src/Components/Export/ExportAttendance.tsx","../../src/Components/Export/ExportDayOffRequest.tsx","../../src/Components/Export/ExportExcelPerformance.tsx","../../src/Components/Export/ExportLeaveDays.tsx","../../src/Components/Export/ExportOvertime.tsx","../../src/Components/Export/ExportTimeSheets.tsx","../../src/Pages/MainPages/TimeCard/DayOffRequest/index.tsx","../../src/Pages/MainPages/TimeCard/Timesheet/TableComponent.tsx","../../src/Pages/MainPages/TimeCard/Timesheet/index.tsx","../../src/Pages/MainPages/TimeCard/LeaveDays.tsx","../../src/Pages/MainPages/TimeCard/TimeKeeping/TableComponent.tsx","../../src/Pages/MainPages/TimeCard/TimeKeeping/index.tsx","../../src/Pages/MainPages/TimeCard/RequestUpdateTimeCard.tsx","../../src/Pages/MainPages/TimeCard/OvertimeRequest/Overtime.tsx","../../src/Pages/MainPages/TimeCard/OvertimeRequest/AggregateOvertime.tsx","../../src/Pages/MainPages/TimeCard/OvertimeRequest/index.tsx","../../src/Pages/MainPages/TimeCard/index.tsx","../../src/Pages/MainPages/Board/BoardOverview/CardItem.tsx","../../src/Pages/MainPages/Board/BoardOverview/Card.tsx","../../src/Pages/MainPages/Board/BoardOverview/Column.tsx","../../src/Pages/MainPages/Board/BoardOverview/List.tsx","../../src/Pages/MainPages/Board/BoardOverview/Board.tsx","../../src/Pages/MainPages/Board/BoardOverview/index.tsx","../../src/Pages/MainPages/Board/BoardProject/CardItem.tsx","../../src/Pages/MainPages/Board/BoardProject/Card.tsx","../../src/Pages/MainPages/Board/BoardProject/Column.tsx","../../src/Pages/MainPages/Board/BoardProject/List.tsx","../../src/Pages/MainPages/Board/BoardProject/Board.tsx","../../src/Pages/MainPages/Board/BoardProject/index.tsx","../../src/Pages/MainPages/Board/index.tsx","../../src/Pages/MainPages/MyTime/MyTimeV3/Calendar.style.ts","../../src/Pages/MainPages/MyTime/MyTimeV3/index.tsx","../../src/Pages/MainPages/MyTime/index.tsx","../../src/Pages/MainPages/Performance/DataTable.tsx","../../src/Pages/MainPages/Performance/index.tsx","../../src/Pages/MainPages/Profile/index.tsx","../../src/Pages/MainPages/Notification/index.tsx","../../src/Pages/MainPages/Holiday/index.tsx","../../src/Pages/MainPages/Setting/Backup/index.tsx","../../src/Pages/MainPages/Setting/InternalIP/index.tsx","../../src/Pages/MainPages/Setting/FileSystem/Overview/index.tsx","../../src/Pages/MainPages/Setting/FileSystem/index.ts","../../src/Components/Popup/Workspace/CreateWorkspaceShortCut.tsx","../../src/Components/Popup/Workspace/UpdateWorkspaceShortCut.tsx","../../src/Pages/MainPages/Setting/Workspace/index.tsx","../../src/Pages/MainPages/Setting/Workspace/workSpaceIframe.tsx","../../src/Pages/MainPages/Setting/News/index.tsx","../../src/Pages/MainPages/Setting/index.ts","../../src/Components/Popup/Client/Create.tsx","../../src/Components/Popup/Client/Update.tsx","../../src/Pages/MainPages/Client/index.tsx","../../src/Components/Popup/WorkingTime/UpdateWorkingTime.tsx","../../src/Pages/MainPages/workingTime/index.tsx","../../src/Pages/MainPages/Setting/GetInternalIp/index.tsx","../../src/Pages/MainPages/WorkingDay/index.tsx","../../src/Pages/MainPages/index.ts","../../src/Pages/AuthenticationPages/AccountDeactivated.tsx","../../src/Pages/AuthenticationPages/ComingSoon.tsx","../../src/Pages/AuthenticationPages/Error404.tsx","../../src/Pages/AuthenticationPages/Error500.tsx","../../src/Assets/Login.jpg","../../src/Assets/forgot_bg.png","../../src/Pages/AuthenticationPages/ForgotPassword.tsx","../../src/Pages/AuthenticationPages/SignIn.tsx","../../src/Pages/AuthenticationPages/WelcomeMessage.tsx","../../src/Pages/AuthenticationPages/ResetPassword.tsx","../../src/Pages/AuthenticationPages/VerifyAccount.tsx","../../src/Pages/AuthenticationPages/VerifyFailure.tsx","../../src/Pages/AuthenticationPages/VeriFySuccess.tsx","../../src/Pages/AuthenticationPages/index.tsx","../../src/Assets/404.jpg","../../src/Pages/CommonPages/NotFound/index.tsx","../../src/Pages/CommonPages/index.tsx","../../src/Routers/ProtectedRouters.tsx","../../src/Routers/MainRouters.tsx","../../src/Routers/AuthenticationRouters.tsx","../../src/Routers/CommonRouters.tsx","../../src/Components/Common/Global/GlobalWindowState.tsx","../../src/Routers/index.tsx","../../src/serviceWorker.ts","../../src/main.tsx"],"sourcesContent":["import alert from \"./alert.json\";\nimport button from \"./button.json\";\nimport table from \"./table.json\";\nimport status from \"./status.json\";\nimport title from \"./title.json\";\nimport label from \"./lable.json\";\nimport tooltip from \"./tooltip.json\";\nimport message from \"./message.json\";\nimport menu from \"./menu.json\";\n\nexport default {\n alert,\n button,\n table,\n status,\n title,\n label,\n tooltip,\n message,\n menu,\n};\n","import alert from \"./alert.json\";\nimport button from \"./button.json\";\nimport table from \"./table.json\";\nimport status from \"./status.json\";\nimport title from \"./title.json\";\nimport label from \"./label.json\";\nimport tooltip from \"./tooltip.json\";\nimport message from \"./message.json\";\nimport menu from \"./menu.json\";\n\nexport default {\n alert,\n button,\n table,\n status,\n title,\n label,\n tooltip,\n message,\n menu,\n};\n","import { setDefaultLanguage, setTranslations } from \"react-multi-lang\";\n\nimport en from \"./en\";\nimport vi from \"./vi\";\n\nconst getSavedLanguage = () => {\n const lang = localStorage.getItem(\"language\");\n if (lang) return JSON.parse(lang);\n return \"en\";\n};\n\nconst initTranslations = () => {\n // const language = Utils.getSavedLanguage();\n // const localeStorage = Utils.getSavedLanguage();\n\n const language = getSavedLanguage();\n // const language = \"en\";\n // console.log(language);\n\n setTranslations({ en, vi });\n setDefaultLanguage(language);\n};\n\nexport default { initTranslations };\n","enum Routers {\n // HOME = \"/\",\n // AUTHENTICATION\n SIGN_IN = \"/\",\n ACCOUNT_DEACTIVATED = \"account-deactivated\",\n COMING_SOON = \"coming-soon\",\n ERROR_404 = \"error-404\",\n ERROR_500 = \"error-500\",\n FORGOT_PASSWORD = \"/forgot-password\",\n RESET_PASSWORD = \"/auth/forgot-password\",\n VERIFY_ACCOUNT = \"/verify-account\",\n VERIFY_ACCOUNT_SUCCESS = \"/verify-account-success\",\n VERIFY_ACCOUNT_FAIL = \"/verify-account-failure\",\n\n DASHBOARD = \"/dashboard\",\n USER = \"/users\",\n USER_UPDATE = \"/users/update\",\n USER_CREATE = \"/users/create\",\n PROJECT = \"/projects\",\n PROJECT_LIST = \"/projects/list\",\n PROJECT_DETAILS = \"/projects/detail\",\n CREATE_PROJECT = \"/projects/create\",\n UPDATE_PROJECT = \"/projects/update\",\n PERFORMANCE = \"/performance\",\n BOARD = \"/board\",\n BOARD_DETAIL = \"/board/detail\",\n BOARD_EMPLOYEE = \"/board/employee\",\n TIME_CARD = \"/time-card\",\n TIME_SHEET = \"/time-card/attendance-sheet\",\n DAY_OFF_REQUEST = \"/time-card/day-off-request\",\n OVER_TIME = \"/time-card/over-time\",\n LEAVE_DAY = \"/time-card/leave-day\",\n TIME_KEEPPING = \"/time-card/time-sheet\",\n REQUEST_UPDATE_TIME_CARD = \"/time-card/request-update\",\n CHAT = \"/chat\",\n MY_TIME = \"/my-time\",\n PROFILE = \"/profile\",\n NOTIFICATION = \"/notifications\",\n HOLIDAYS = \"/time-card/attendance-sheet/holidays\",\n SETTING = \"/setting\",\n INTERNAL_IP = \"/setting/internal-ip\",\n NEWS = \"/setting/news\",\n CLIEINT = \"/clients\",\n WORKING_TIME = \"/setting/working-time\",\n WORKING_DAY = \"/setting/working-day\",\n SHARE_TIMELINE = \"/share-timeline\",\n CREATE_PROJECT_EXTERIOR = \"/projects/create-exterior\",\n UPDATE_PROJECT_EXTERIOR = \"/projects/update-exterior\",\n DETAIL_PROJECT_EXTERIOR = \"/projects/detail-exterior\",\n GET_MY_INTERNAL_IP = \"/setting/my-internal-ip\",\n BACKUP_RESTORE = \"/backup\",\n FILE_SYSTEM = \"/setting/file-system\",\n WORKSPACE = \"/workspace\",\n WORKSPACE_GROUP = \"/shortcut\",\n}\n\nexport default Routers;\n","export default {\n EXAMPLE: {\n ROOT: \"/example\",\n },\n AUTHENTICATION: {\n LOGIN: \"auth/login\",\n REFRESH_TOKEN: \"auth/refresh\",\n FORGOT_PASSWORD: \"auth/forgot-password\",\n VERIFY_ACCOUNT: \"auth/verify-account\",\n RESET_PASSWORD: \"auth/reset-password\",\n },\n FCM_TOKEN: {\n BASIC: \"fcm-tokens\",\n GET_BY_ID: \"fcm-tokens/get-by-id\",\n CHANGE_LOCALE: \"fcm-tokens/change-locale\",\n },\n\n ROLE: {\n BASIC: \"roles\",\n },\n DASHBOARD: {\n BASIC: \"dashboard/statistical\",\n DATE_DELETION_SCHEDULE: \"date-deletion-schedules\",\n },\n USER: {\n BASIC: \"users\",\n CREATE: \"users/register-account\",\n GET_BY_ID: \"users/get-by-id\",\n GET_FOR_SELF: \"users/get-for-self\",\n UPDATE: \"users/update\",\n UPDATE_FOR_SELF: \"users/update-for-self\",\n UPDATE_PASSWORD_FOR_SELF: \"users/update-password-for-self\",\n ACTIVATE: \"users/activate\",\n DEACTIVATE: \"users/deactivate\",\n DELETE: \"users/terminated\",\n },\n PROJECT: {\n BASIC: \"projects\",\n GET_BY_ID: \"projects/get-by-id\",\n CHANGE_STATUS: \"projects/change-status\",\n DELETE: \"projects/delete\",\n DASHBOARD_OVERVIEW: \"projects/dashboard-overview\",\n },\n KANBAN_BOARD: {\n BASIC: \"kanban-board\",\n GET_BY_ID: \"kanban-board/get-by-id\",\n ACTIVATE: \"kanban-board/activate\",\n DEACTIVATE: \"kanban-board/deactivate\",\n DELETE: \"kanban-board/delete\",\n GET_TIMELINE: \"kanban-board/get-by-id-for-timeline\",\n },\n TASK: {\n BASIC: \"tasks\",\n GET_BY_ID: \"tasks/get-by-id\",\n COMMENT: \"tasks/comment\",\n DELETE_COMMENT: \"tasks/comment/delete\",\n DELETE_COLUMN: \"tasks/delete\",\n },\n LOG_TIME: {\n BASIC: \"log-times\",\n GET_BY_ID: \"log-times/get-by-id\",\n CHANGE_STATUS: \"log-times/change-status\",\n DELETE: \"log-times/delete\",\n AGGREGATE: \"log-times/aggregate-user\",\n FOR_DASHBOARD: \"log-times/for-dashboard\",\n DEADLINE_DASHBOARD: \"log-times/get-deadline-for-dashboard\",\n MY_WORK_DASHBOARD: \"log-times/for-dashboard-my-work\",\n },\n TASK_NOTE: {\n BASIC: \"task-notes\",\n GET_BY_ID: \"task-notes/get-by-id\",\n DELETE: \"task-notes/delete\",\n },\n DAY_OFF_REQUEST: {\n BASIC: \"day-off-requests\",\n GET_BY_ID: \"day-off-requests/get-by-id\",\n CHANGE_STATUS: \"day-off-requests/change-status\",\n DELETE: \"day-off-requests/delete\",\n AGGREGATE: \"day-off-requests/aggregate-user\",\n },\n LEAVE_DAYS: {\n BASIC: \"leave-days\",\n GET_BY_ID: \"leave-days/get-by-id\",\n },\n UPDATE_TIME_CARD: {\n BASIC: \"request-update-timecards\",\n GET_BY_ID: \"request-update-timecards/get-by-id\",\n CHANGE_STATUS: \"request-update-timecards/change-status\",\n DELETE: \"request-update-timecards/delete\",\n },\n TIMEKEEPING: {\n BASIC: \"timekeeping\",\n GET_BY_ID: \"timekeeping/get-by-id\",\n UPDATE: \"timekeeping/by-admin\",\n },\n TIME_SHEET: {\n BASIC: \"timesheet\",\n GET_BY_ID: \"timesheet/get-by-id\",\n DELETE: \"timesheet/delete\",\n },\n FILE: {},\n INTERNAL_IP: {\n BASIC: \"internal-ip-addresses\",\n GET_BY_ID: \"internal-ip-addresses/get-by-id\",\n CHANGE_STATUS: \"internal-ip-addresses/change-status\",\n INTERNAL_IP_REMOTE: \"internal-ip-addresses/allow-access-remote\",\n FETCH_INTERNAL_IP_REMOTE: \"internal-ip-addresses/work-remote\",\n },\n HOLIDAY: {\n BASIC: \"holidays\",\n GET_BY_ID: \"holidays/get-by-id\",\n CHANGE_STATUS: \"holidays/change-status\",\n },\n PERFORMANCE: {\n BASIC: \"performance-evaluation\",\n GET_BY_ID: \"performance-evaluation/get-by-id\",\n CHANGE_STATUS: \"performance-evaluation/change-status\",\n },\n NOTIFICATION: {\n BASIC: \"notifications\",\n GET_BY_ID: \"notifications/get-by-id\",\n FETCH_OUTSIDE: \"notifications/outside\",\n MARK_AS_READ: \"notifications/mark-as-read\",\n MARK_ALL_AS_READ: \"notifications/mark-all-as-read\",\n MARK_AS_READ_OUTSIDE: \"notifications/mark-as-read-outside\",\n },\n CHAT: {\n FETCH_MESSAGE_CHANNEL: \"conversations\",\n FETCH_MESSAGE_NOTIFICATION: \"conversations/notification\",\n FETCH_MESSAGE_BY_CHANEL_ID: \"conversations/message\",\n FETCH_USER_NOT_CONVERSATION: \"conversations/user-not-conversation\",\n FETCH_ALL_USERS: \"conversations/all-user\",\n FETCH_MEDIA_BY_CHANNEL_ID: \"conversations/media\",\n FETCH_MESSAGE_CHANNEL_DETAIL: \"conversations/get-by-id\",\n CREATE_PRIVATE_MESSAGE: \"conversations/private\",\n CREATE_GROUP: \"conversations/group\",\n CREATE_MESSAGE: \"conversations/message\",\n DELETE_PRIVATE_MESSAGE: \"conversations/delete-private\",\n RECALLED_MESSAGE: \"conversations/recalled-message\",\n ADD_MEMBER_GROUP: \"conversations/add-member-group\",\n REMOVE_MEMBER_GROUP: \"conversations/remove-member-group\",\n READ_CONVERSATION: \"conversations/read-conversation\",\n UPDATE_CONVERSATION: \"conversations/update\",\n LEAVE_GROUP: \"conversations/leave-group\",\n REMOVE_ALL_FILE: \"conversations/remove-file\",\n },\n CLIENT: {\n BASIC: \"clients\",\n GET_BY_ID: \"clients/get-by-id\",\n CHANGE_STATUS: \"clients/change-status\",\n },\n WORKING_TIME: {\n BASIC: \"working-time\",\n GET_BY_ID: \"working-time/get-by-id\",\n },\n WORKING_DAY: {\n BASIC: \"working-days\",\n GET_BY_ID: \"working-days/get-by-id\",\n },\n\n PROJECT_EXTERIOR: {\n BASIC: \"project-exterior\",\n GET_BY_ID: \"project-exterior/get-by-id\",\n CHANGE_STATUS: \"project-exterior/change-status\",\n DELETE: \"projects/delete\",\n FETCH_USER_CAN_ADD: \"project-exterior/get-user-can-add\",\n },\n BACKUP: {\n BASIC: \"maintenance-mode\",\n BACKUP_LIST: \"database-managements/list-backup-database\",\n BACKUP_DATABASE: \"database-managements/backup-database\",\n RESTORE: \"database-managements/restore-database\",\n DELETE: \"database-managements/delete\",\n },\n FILES: {\n BASIC: \"files\",\n ALL_MEMORY_CONVERSATION: \"files/all-memory-conversation\",\n },\n TIME_DELETE_PRIVATE_CHAT: {\n BASIC: \"time-delete-private-conversation\",\n GET_BY_ID: \"time-delete-private-conversation/get-by-id\",\n },\n EMAIL_RECEIVE: {\n BASIC: \"mail-receive\",\n GET_BY_ID: \"mail-receive/get-by-id\",\n },\n WORKSPACE: {\n BASIC: \"workspace-groups\",\n GET_BY_ID: \"workspace-groups/get-by-id\",\n DELETE: \"workspace-groups/delete\",\n },\n WORKSPACE_SHORT: {\n BASIC: \"workspace-shortcuts\",\n GET_BY_ID: \"workspace-shortcuts/get-by-id\",\n DELETE: \"workspace-shortcuts/delete\",\n },\n NEWS: {\n BASIC: \"news\",\n GET_BY_ID: \"news/get-by-id\",\n CHANGE_STATUS: \"news/change-status\",\n },\n};\n","interface ActionTypes {\n [key: string]: string;\n}\n\nconst generateSyncActions = (actionList: string[]) => {\n const map: { [key: string]: string } = {};\n actionList.map((action) => {\n const name = action.trim();\n if (name !== \"\") {\n map[`${name}_SUCCESS`] = `${name}_SUCCESS`;\n map[`${name}_FAILURE`] = `${name}_FAILURE`;\n }\n });\n return map;\n};\n\nconst generateLoadingActions = (actionList: string[]) => {\n const map: { [key: string]: string } = {};\n actionList.map((action) => {\n const name = action.trim();\n if (name !== \"\") {\n map[`SET_${name}_FETCH_LOADING`] = `SET_${name}_FETCH_LOADING`;\n map[`SET_${name}_GET_LOADING`] = `SET_${name}_GET_LOADING`;\n map[`SET_${name}_ACTION_LOADING`] = `SET_${name}_ACTION_LOADING`;\n }\n });\n return map;\n};\n\nconst _loadingActions: ActionTypes = generateLoadingActions([\n \"PROJECT\",\n \"BOARD\",\n \"USER\",\n \"ROLE\",\n \"LOG_TIME\",\n \"LOGTIME\",\n \"DAY_OFF_REQUEST\",\n \"LEAVE_DAYS\",\n \"REQUEST_UPDATE_TIME_CARD\",\n \"TIMEKEEPING\",\n \"CHAT\",\n \"TIMESHEET\",\n \"INTERNAL_IP\",\n \"HOLIDAY\",\n \"AGGREGATE\",\n \"PERFORMANCE\",\n \"NOTIFICATION\",\n \"TASK_NOTE\",\n \"CLIENT\",\n \"WORKING_TIME\",\n \"PROJECT_EXTERIOR\",\n \"BACKUP\",\n \"TIME_DELETE_FILE_PRIVATE_CHAT\",\n \"MAIL_RECEIVE\",\n \"WORKSPACE\",\n \"WORKING_DAY\",\n \"NEWS\",\n]);\n\nconst _asyncActions: ActionTypes = generateSyncActions([\n //Authentication\n \"LOGIN\",\n \"LOGOUT\",\n \"REQUEST_FORGOT_PASSWORD\",\n \"VERIFY_ACCOUNT\",\n \"RESET_PASSWORD\",\n \"CREATE_FCM_TOKEN\",\n \"REMOVE_FCM_TOKEN\",\n // Role\n \"FETCH_ROLES\",\n\n // Dashboard action\n \"GET_STATISTICAL\",\n \"GET_DATE_DELETION_SCHEDULE\",\n // USer\n \"CREATE_USER\",\n \"FETCH_USER\",\n \"GET_BY_ID_USER\",\n \"GET_FOR_SELF\",\n \"UPDATE_USER\",\n \"UPDATE_FOR_SELF\",\n \"UPDATE_PASSWORD_FOR_SELF\",\n \"ACTIVATE_USER\",\n \"DEACTIVATE_USER\",\n \"DELETE_USER\",\n \"FETCH_USER_DASH_BOARD\",\n\n // Project\n \"FETCH_PROJECTS\",\n \"FETCH_PROJECTS_FOR_DASHBOARD\",\n \"GET_STATISTICAL_PROJECTS\",\n \"CREATE_PROJECT\",\n \"UPDATE_PROJECT\",\n \"GET_PROJECT_BY_ID\",\n \"CHANGE_PROJECT_STATUS\",\n \"DELETE_PROJECT\",\n\n // Board\n \"CREATE_BOARD\",\n \"FETCH_BOARDS\",\n \"GET_BOARD_BY_ID\",\n \"CREATE_COLUMN_IN_BOARD\",\n \"GET_COLUMN_IN_BOARD\",\n \"UPDATE_COLUMN_IN_BOARD\",\n \"CREATE_COMMENT_IN_COLUMN\",\n \"DELETE_COMMENT_IN_COLUMN\",\n \"DELETE_COLUMN_IN_BOARD\",\n \"GET_TIMELINE_IN_BOARD\",\n\n //Logtime\n \"CREATE_LOG_TIME\",\n \"FETCH_LOG_TIME\",\n \"GET_BY_ID_LOG_TIME\",\n \"UPDATE_LOG_TIME\",\n \"CHANGE_STATUS_LOG_TIME\",\n \"DELETE_LOG_TIME\",\n \"FETCH_LOG_TIME_BY_BOARD_ID\",\n \"GET_MY_TIME\",\n \"FETCH_AGGREGATE\",\n \"FETCH_LOG_TIME_DASH_BOARD\",\n \"FETCH_DEADLINE_DASH_BOARD\",\n \"FETCH_MY_WORK_DASH_BOARD\",\n\n // Plan Time\n \"FETCH_TASK_NOTE\",\n \"CREATE_TASK_NOTE\",\n \"GET_TASK_NOTE_BY_ID\",\n \"UPDATE_TASK_NOTE\",\n \"DELETE_TASK_NOTE\",\n\n //day off request\n \"CREATE_DAY_OFF_REQUEST\",\n \"FETCH_DAY_OFF_REQUEST\",\n \"UPDATE_DAY_OFF_REQUEST\",\n \"CHANGE_STATUS_DAY_OFF_REQUEST\",\n \"GET_BY_ID_DAY_OFF_REQUEST\",\n \"DELETE_DAY_OFF_REQUEST\",\n \"FETCH_AGGREGATE_DAY_OFF\",\n\n // leave days\n \"CREATE_LEAVE_DAYS\",\n \"FETCH_LEAVE_DAYS\",\n \"UPDATE_LEAVE_DAYS\",\n \"GET_BY_ID_LEAVE_DAYS\",\n \"FETCH_LEAVE_DAYS_FILTER_CREATE\",\n\n // request update timecard\n \"CREATE_REQUEST_UPDATE_TIME_CARD\",\n \"FETCH_REQUEST_UPDATE_TIME_CARD\",\n \"UPDATE_REQUEST_UPDATE_TIME_CARD\",\n \"CHANGE_STATUS_REQUEST_UPDATE_TIME_CARD\",\n \"GET_BY_ID_REQUEST_UPDATE_TIME_CARD\",\n \"DELETE_REQUEST_UPDATE_TIME_CARD\",\n\n //Timekeeping\n \"CREATE_TIMEKEEPING\",\n \"FETCH_TIMEKEEPING\",\n \"UPDATE_TIMEKEEPING\",\n \"GET_BY_ID_TIMEKEEPING\",\n \"CREATE_CHECK_OUT\",\n \"UPDATE_CHECK_OUT\",\n \"FETCH_CHECK_IN\",\n \"CREATE_TIMEKEEPING_ADMIN\",\n\n //Time sheet\n \"FETCH_TIMESHEET\",\n \"GET_TIMESHEET_BY_ID\",\n \"CREATE_TIMESHEET\",\n \"UPDATE_TIMESHEET\",\n \"DELETE_TIMESHEET\",\n\n // Chat\n \"FETCH_CHAT\",\n \"CREATE_CHAT\",\n \"DELETE_CHAT\",\n\n //Internal Ip\n \"FETCH_INTERNAL_IP\",\n \"CREATE_INTERNAL_IP\",\n \"UPDATE_INTERNAL_IP\",\n \"CHANGE_STATUS_INTERNAL_IP\",\n \"GET_BY_ID_INTERNAL_IP\",\n \"FETCH_INTERNAL_REMOTE\",\n \"CHANGE_INTERNAL_IP_REMOTE\",\n\n //Holidays\n \"CREATE_HOLIDAY\",\n \"FETCH_HOLIDAY\",\n \"UPDATE_HOLIDAY\",\n \"GET_BY_ID_HOLIDAY\",\n \"CHANGE_STATUS_HOLIDAY\",\n\n // Performance\n \"FETCH_PERFORMANCES\",\n \"GET_PERFORMANCE_BY_ID\",\n \"CREATE_PERFORMANCE\",\n \"UPDATE_PERFORMANCE\",\n\n // Notification\n \"FETCH_NOTIFICATION\",\n \"FETCH_OUTSIDE_NOTIFICATION\",\n \"GET_NOTIFICATION_BY_ID\",\n \"MARK_AS_READ_NOTIFICATION\",\n \"MARK_ALL_AS_READ_NOTIFICATION\",\n \"MARK_ALL_AS_READ_OUTSIDE_NOTIFICATION\",\n\n // Chat\n \"FETCH_MESSAGE_CHANNEL\",\n \"FETCH_MESSAGE_NOTIFICATION\",\n \"FETCH_MESSAGE_BY_CHANNEL_ID\",\n \"FETCH_USER_NOT_CONVERSATION\",\n \"FETCH_ALL_USER_FOR_CHAT\",\n \"FETCH_MEDIA_BY_CHANNEL_ID\",\n \"CREATE_PRIVATE_CHAT\",\n \"CREATE_GROUP_CHAT\",\n \"CREATE_MESSAGE_CHAT\",\n \"RECALLED_MESSAGE\",\n \"DELETE_PRIVATE_MESSAGE\",\n \"ADD_MEMBER_TO_GROUP\",\n \"REMOVE_MEMBER_TO_GROUP\",\n \"LEAVE_GROUP_CHAT\",\n \"READ_CONVERSATION\",\n \"UPDATE_CONVERSATION\",\n \"FETCH_CONVERSATION_CHANNEL_DETAIL\",\n \"REMOVE_ALL_FILE_IN_CHAT\",\n\n //Client\n \"FETCH_CLIENT\",\n \"CREATE_CLIENT\",\n \"UPDATE_CLIENT\",\n \"CHANGE_STATUS_CLIENT\",\n \"GET_BY_ID_CLIENT\",\n //WorkingTime\n \"FETCH_WORKING_TIME\",\n \"UPDATE_WORKING_TIME\",\n\n // Project Exterior\n \"FETCH_PROJECT_EXTERIORS\",\n \"CREATE_PROJECT_EXTERIOR\",\n \"GET_PROJECT_EXTERIOR_BY_ID\",\n \"DELETE_PROJECT_EXTERIOR\",\n \"CHANGE_PROJECT_EXTERIOR_STATUS\",\n \"UPDATE_PROJECT_EXTERIOR\",\n \"FETCH_USER_CAN_ADD\",\n //backup\n \"FETCH_BACKUP\",\n \"CHANGE_STATUS_BACKUP\",\n \"FETCH_BACKUP_DATABASE\",\n \"GET_BACKUP_DATABASE\",\n \"RESTORE_DATABASE\",\n \"DELETE_BACKUP\",\n \"GET_ALL_MEMORY_CONVERSATION\",\n // time delete file private chat\n \"FETCH_TIME_DELETE_FILE_PRIVATE_CHAT\",\n \"UPDATE_TIME_DELETE_FILE_PRIVATE_CHAT\",\n \"CREATE_TIME_DELETE_FILE_PRIVATE_CHAT\",\n // Mail receive\n \"FETCH_MAIL_RECEIVE\",\n \"CREATE_MAIL_RECEIVE\",\n \"UPDATE_MAIL_RECEIVE\",\n // workspace\n \"FETCH_WORKSPACE\",\n \"UPDATE_WORKSPACE\",\n \"CREATE_WORKSPACE\",\n \"GET_BY_ID_WORKSPACE\",\n \"DELETE_WORKSPACE\",\n // workspace shortCut\n \"FETCH_WORKSPACE_SHORT_CUT\",\n \"UPDATE_WORKSPACE_SHORT_CUT\",\n \"CREATE_WORKSPACE_SHORT_CUT\",\n \"GET_BY_ID_WORKSPACE_SHORT_CUT\",\n \"DELETE_WORKSPACE_SHORT_CUT\",\n //locale\n \"CHANGE_LOCALE\",\n // Working Day\n \"FETCH_WORKING_DAY\",\n \"CREATE_WORKING_DAY\",\n \"UPDATE_WORKING_DAY\",\n \"GET_WORKING_DAY_BY_ID\",\n\n //News\n \"FETCH_NEWS\",\n \"CREATE_NEWS\",\n \"UPDATE_NEWS\",\n \"CHANGE_STATUS_NEWS\",\n \"GET_BY_ID_NEWS\",\n]);\n\nconst _singleActions: ActionTypes = {\n // Dashboard actions\n SET_DASHBOARD_LOADING: \"SET_DASHBOARD_LOADING\",\n\n // Authentication action\n LOGOUT: \"LOGOUT\",\n SET_AUTH_LOADING: \"SET_AUTH_LOADING\",\n CLEAR_AUTH_MESSAGE: \"CLEAR_AUTH_MESSAGE\",\n RESET_STEP_FORGOT_PASSWORD: \"RESET_STEP_FORGOT_PASSWORD\",\n RESET_AUTH_REDUCER: \"RESET_AUTH_REDUCER\",\n RESET_CHECK_LOGIN: \"RESET_CHECK_LOGIN\",\n\n // Role action\n RESET_ROLES_REDUCER: \"RESET_ROLES_REDUCER\",\n\n // User action\n USER_PERFORM_ACTION: \"USER_PERFORM_ACTION\",\n RESET_USER_PERFORM_ACTION: \"RESET_USER_PERFORM_ACTION\",\n SET_USER_LOADING: \"SET_USER_LOADING\",\n SET_EXPORT_USER_LOADING: \"SET_EXPORT_USER_LOADING\",\n RESET_USER_REDUCER: \"RESET_USER_REDUCER\",\n SET_META_USER: \"SET_META_USER\",\n SET_PAGINATION_USER: \"SET_PAGINATION_USER\",\n RESET_ACTION_USER_REDUCER: \"RESET_ACTION_USER_REDUCER\",\n RESET_USER_MESSAGE: \"RESET_USER_MESSAGE\",\n RESET_USER_DETAIL: \"RESET_USER_DETAIL\",\n\n // Project action\n SAVE_CURRENT_DATE_IN_SCROLLER: \"SAVE_CURRENT_DATE_IN_SCROLLER\",\n SET_PROJECT_META: \"SET_PROJECT_META\",\n SET_PROJECT_PAGINATION: \"SET_PROJECT_PAGINATION\",\n STATUS_PROJECT_STATUS: \"RESET_PROJECT_STATUS\",\n RESET_PROJECT_REDUCER: \"RESET_PROJECT_REDUCER\",\n\n // Board action\n SET_MY_TIME_WEEKDAYS: \"SET_MY_TIME_WEEKDAYS\",\n SET_DASHBOARD_WEEKDAYS: \"SET_DASHBOARD_WEEKDAYS\",\n BOARD_PERFORM_ACTION: \"BOARD_PERFORM_ACTION\",\n RESET_BOARD_PERFORM_ACTION: \"RESET_BOARD_PERFORM_ACTION\",\n RESET_BOARD_STATUS: \"RESET_BOARD_STATUS\",\n RESET_WEEKDAYS: \"RESET_WEEKDAYS\",\n RESET_BOARD_DETAIL: \"RESET_BOARD_DETAIL\",\n RESET_TIMELINE_IN_BOARD: \"RESET_TIMELINE_IN_BOARD\",\n SET_TIMELINE_ACTIVE_DATES: \"SET_TIMELINE_ACTIVE_DATES\",\n RESET_BOARD_REDUCER: \"RESET_BOARD_REDUCER\",\n\n //Logtime\n SET_LOG_TIME_META: \"SET_LOG_TIME_META\",\n SET_LOG_TIME_PAGINATION: \"SET_LOG_TIME_PAGINATION\",\n LOG_TIME_PERFORM_ACTION: \"LOGTIME_PERFORM_ACTION\",\n RESET_LOG_TIME_PERFORM_ACTION: \"RESET_LOGTIME_PERFORM_ACTION\",\n RESET_LOG_TIME_STATUS: \"RESET_LOG_TIME_STATUS\",\n RESET_LOG_TIME_DETAIL: \"RESET_LOG_TIME_DETAIL\",\n RESET_LOG_TIME_REDUCER: \"RESET_LOG_TIME_REDUCER\",\n SET_AGGREGATE_PAGINATION: \"SET_AGGREGATE_PAGINATION\",\n SET_AGGREGATE_META: \"SET_AGGREGATE_META\",\n SET_AGGREGATE_DAY_OFF_PAGINATION: \"SET_AGGREGATE_DAY_OFF_PAGINATION\",\n SET_MY_TIME_PAGINATION: \"SET_MY_TIME_PAGINATION\",\n\n // Plan time\n RESET_TASK_NOTE_DETAILS: \"RESET_TASK_NOTE_DETAILS\",\n RESET_TASK_NOTE_REDUCER: \"RESET_TASK_NOTE_REDUCER\",\n\n //Day off request\n RESET_REDUCER_DAY_OFF_REQUEST: \"RESET_REDUCER_DAY_OFF_REQUEST\",\n SET_META_DAY_OFF_REQUEST: \"SET_META_DAY_OFF_REQUEST\",\n SET_PAGINATION_DAY_OFF_REQUEST: \"SET_PAGINATION_DAY_OFF_REQUEST\",\n SET_AGGREGATE_DAY_OFF_META: \"SET_AGGREGATE_DAY_OFF_META\",\n RESET_DAY_OFF_REQUEST_DETAILS: \"RESET_DAY_OFF_REQUEST_DETAILS\",\n\n //Leave days\n RESET_LEAVE_DAYS: \"RESET_LEAVE_DAYS\",\n SET_META_LEAVE_DAYS: \"SET_META_LEAVE_DAYS\",\n SET_PAGINATION_LEAVE_DAYS: \"SET_PAGINATION_LEAVE_DAYS\",\n RESET_LEAVE_DAY_DETAILS: \"RESET_LEAVE_DAY_DETAILS\",\n\n // request update timecard\n RESET_REDUCER_REQUEST_UPDATE_TIME_CARD:\n \"RESET_REDUCER_REQUEST_UPDATE_TIME_CARD\",\n SET_META_REQUEST_UPDATE_TIME_CARD: \"SET_META_REQUEST_UPDATE_TIME_CARD\",\n SET_PAGINATION_REQUEST_UPDATE_TIME_CARD:\n \"SET_PAGINATION_REQUEST_UPDATE_TIME_CARD\",\n RESET_REQUEST_UPDATE_TIME_CARD_DETAILS:\n \"RESET_REQUEST_UPDATE_TIME_CARD_DETAILS\",\n\n //Timekeeping\n RESET_REDUCER_TIMEKEEPING: \"RESET_REDUCER_TIMEKEEPING\",\n SET_META_TIMEKEEPING: \"SET_META_TIMEKEEPING\",\n SET_PAGINATION_TIMEKEEPING: \"SET_PAGINATION_TIMEKEEPING\",\n RESET_MESSAGE_TIMEKEEPING: \"RESET_MESSAGE_TIMEKEEPING\",\n\n // Time sheet\n RESET_TIMESHEET_STATUS: \"RESET_TIMESHEET_STATUS\",\n RESET_TIMESHEET_REDUCER: \"RESET_TIMESHEET_REDUCER\",\n SET_TIMESHEET_META: \"SET_TIMESHEET_META\",\n SET_TIMESHEET_PAGINATION: \"SET_TIMESHEET_PAGINATION\",\n // Chat\n SET_CHAT_FETCH_CHANNEL_LOADING: \"SET_CHAT_FETCH_CHANNEL_LOADING\",\n CHAT_PERFORM_ACTION: \"CHAT_PERFORM_ACTION\",\n RESET_CHAT_PERFORM_ACTION: \"RESET_CHAT_PERFORM_ACTION\",\n CREATE_NEW_CHAT: \"CREATE_NEW_CHAT\",\n RESET_NEW_CHAT_DATA: \"RESET_NEW_CHAT_DATA\",\n SET_POTENTIAL_CHATS: \"SET_POTENTIAL_CHATS\",\n RESET_CHAT_REDUCER: \"RESET_CHAT_REDUCER\",\n SET_MESSAGE_CHANNEL_PAGINATION: \"SET_MESSAGE_CHANNEL_PAGINATION\",\n SET_MESSAGE_CHANNEL_META: \"SET_MESSAGE_CHANNEL_META\",\n SET_MESSAGE_DETAILS_PAGINATION: \"SET_MESSAGE_DETAILS_PAGINATION\",\n SET_MESSAGE_DETAILS_META: \"SET_MESSAGE_DETAILS_META\",\n RESET_MEDIA_IN_CHANNEL: \"RESET_MEDIA_IN_CHANNEL\",\n SET_LIST_MESSAGES: \"SET_LIST_MESSAGES\",\n RESET_CONVERSATION_CHANNEL_DETAIL: \"RESET_CONVERSATION_CHANNEL_DETAIL\",\n SET_NEW_PERFORM_ACTION: \"SET_NEW_PERFORM_ACTION\",\n SET_NOTIFICATION: \"SET_NOTIFICATION\",\n SET_TYPE_CHAT: \"SET_TYPE_CHAT\",\n\n // Internal Ip\n RESET_INTERNAL_IP: \"RESET_INTERNAL_IP\",\n RESET_STATUS_INTERNAL_IP: \"RESET_STATUS_INTERNAL_IP\",\n SET_META_INTERNAL_IP: \"SET_META_INTERNAL_IP\",\n SET_PAGINATION_INTERNAL_IP: \"SET_PAGINATION_INTERNAL_IP\",\n\n //Holiday\n RESET_HOLIDAY: \"RESET_HOLIDAY\",\n SET_META_HOLIDAY: \"SET_META_HOLIDAY\",\n SET_PAGINATION_HOLIDAY: \"SET_PAGINATION_HOLIDAY\",\n\n // Performance\n PERFORMANCE_PERFORM_ACTION: \"PERFORMANCE_PERFORM_ACTION\",\n SET_PERFORMANCE_PAGINATION: \"SET_PERFORMANCE_PAGINATION\",\n SET_PERFORMANCE_META: \"SET_PERFORMANCE_META\",\n RESET_PERFORMANCE_PERFORM_ACTION: \"RESET_PERFORMANCE_PERFORM_ACTION\",\n RESET_PERFORMANCE_REDUCER: \"RESET_PERFORMANCE_REDUCER\",\n\n // Notification\n SET_NOTIFICATION_FETCH_OUTSIDE_LOADING:\n \"SET_NOTIFICATION_FETCH_OUTSIDE_LOADING\",\n RESET_NOTIFICATION_REDUCER: \"RESET_NOTIFICATION_REDUCER\",\n SET_PAGINATION_NOTIFICATION: \"SET_PAGINATION_NOTIFICATION\",\n SET_META_NOTIFICATION: \"SET_META_NOTIFICATION\",\n\n SET_SIDEBAR_EXPANDED: \"SET_SIDEBAR_EXPANDED\",\n\n // Socket\n USER_CONNECT_SOCKET: \"USER_CONNECT_SOCKET\",\n RESET_SOCKET_REDUCER: \"RESET_SOCKET_REDUCER\",\n // Client\n RESET_CLIENT_REDUCER: \"RESET_CLIENT_REDUCER\",\n SET_META_CLIENT: \"SET_META_CLIENT\",\n SET_PAGINATION_CLIENT: \"SET_PAGINATION_CLIENT\",\n RESET_STATUS_CLIENT: \"RESET_STATUS_CLIENT\",\n //Working time\n RESET_WORKING_TIME: \"RESET_WORKING_TIME\",\n\n // Project exteriorr action\n SET_PROJECT_EXTERIOR_META: \"SET_PROJECT_EXTERIOR_META\",\n SET_PROJECT_EXTERIOR_PAGINATION: \"SET_PROJECT_EXTERIOR_PAGINATION\",\n RESET_PROJECT_EXTERIOR_STATUS: \"RESET_PROJECT_EXTERIOR_STATUS\",\n RESET_PROJECT_EXTERIOR_REDUCER: \"RESET_PROJECT_EXTERIOR_REDUCER\",\n // backup\n RESET_BACKUP: \"RESET_BACKUP\",\n SET_META_BACKUP: \"SET_META_BACKUP\",\n SET_PAGINATION_BACKUP: \"SET_PAGINATION_BACKUP\",\n\n // Time delete file private chat\n RESET_TIME_DELETE_FILE_PRIVATE_CHAT_REDUCER:\n \"RESET_TIME_DELETE_FILE_PRIVATE_CHAT_REDUCER\",\n\n // Mail receive\n RESET_MAIL_RECEIVE_REDUCER: \"RESET_MAIL_RECEIVE_REDUCER\",\n\n //WorkSpace\n RESET_WORKSPACE: \"RESET_WORKSPACE\",\n WORKSPACE_MODAL: \"WORKSPACE_MODAL\",\n WORKSPACE_BUTTON: \"WORKSPACE_BUTTON\",\n\n // Working Day\n RESET_WORKING_DAY_REDUCER: \"RESET_WORKING_DAY_REDUCER\",\n\n // News\n RESET_NEWS: \"RESET_NEWS\",\n RESET_STATUS_NEWS: \"RESET_STATUS_NEWS\",\n SET_META_NEWS: \"SET_META_NEWS\",\n SET_PAGINATION_NEWS: \"SET_PAGINATION_NEWS\",\n \n};\n\nconst ACTION_TYPES = {\n ..._asyncActions,\n ..._singleActions,\n ..._loadingActions,\n};\n\nexport default ACTION_TYPES;\n","export default {\n SAVED_FIREBASE_TOKEN: \"@CAV:firebase_token\",\n SAVED_SECURE_TOKEN: \"@CAV:secure_token\",\n SAVED_SECURE_REFRESH_TOKEN: \"@CAV:secure_refresh_token\",\n SAVED_USER_DATA: \"@CAV:udata\",\n ROLE_KEY: \"@CAV:role_key\",\n};\n","enum ROLES {\r\n ADMIN = \"admin\",\r\n LEADER = \"leader\",\r\n MANAGER = \"manager\",\r\n ARTIST = \"artist\",\r\n HUMAN_RESOURCES = \"human resources\",\r\n MARKETING = \"marketing\",\r\n}\r\n\r\nenum PROJECT_STATUS {\r\n WAITING_PROCESS = \"waiting process\",\r\n STARTING = \"starting\",\r\n IN_PROCESS = \"in process\",\r\n FINAL_DELIVER = \"final deliver\",\r\n HISTORY = \"history\",\r\n}\r\n\r\nenum PROJECT_TYPE {\r\n INTERIOR = \"interior\",\r\n EXTERIOR = \"exterior\",\r\n}\r\n\r\nenum USER_STATUS {\r\n ACTIVE = \"active\",\r\n INACTIVE = \"inactive\",\r\n}\r\n\r\nenum PROJECT_URGENCY {\r\n EARLY = \"early\",\r\n NORMALLY = \"normally\",\r\n NO_RUSH = \"no rush\",\r\n URGENT = \"urgent\",\r\n}\r\n\r\ntype TColor = {\r\n text: string;\r\n background: string;\r\n lighterColor?: string;\r\n rgba?: string;\r\n};\r\n\r\nconst URGENCY_COLOR: Record = {\r\n [PROJECT_URGENCY.EARLY]: { text: \"#ffffff\", background: \"#5c6e6c\" }, // Updated background color\r\n [PROJECT_URGENCY.NORMALLY]: { text: \"#ffffff\", background: \"#D2A96a\" },\r\n [PROJECT_URGENCY.NO_RUSH]: { text: \"#ffffff\", background: \"#a6b7aa\" },\r\n [PROJECT_URGENCY.URGENT]: { text: \"#ffffff\", background: \"#BB7154\" },\r\n};\r\n\r\nconst PROJECT_STATUS_COLOR: Record<\r\n PROJECT_STATUS,\r\n TColor & { lighterColor: string }\r\n> = {\r\n [PROJECT_STATUS.WAITING_PROCESS]: {\r\n text: \"#ffffff\",\r\n background: \"rgba(92, 110, 108, 1)\",\r\n lighterColor: \"rgba(92, 110, 108, 0.2)\",\r\n rgba: \"rgba(92, 110, 108, 0.6)\",\r\n },\r\n [PROJECT_STATUS.STARTING]: {\r\n text: \"#ffffff\",\r\n background: \"rgba(210, 169, 106,1)\",\r\n lighterColor: \"rgba(210, 169, 106,0.2)\",\r\n rgba: \"rgba(210, 169, 106,0.6)\",\r\n },\r\n [PROJECT_STATUS.IN_PROCESS]: {\r\n text: \"#ffffff\",\r\n background: \"rgba(211, 157, 135, 1)\",\r\n lighterColor: \"rgba(211, 157, 135, 0.2)\",\r\n rgba: \"rgba(211, 157, 135, 0.6)\",\r\n },\r\n [PROJECT_STATUS.FINAL_DELIVER]: {\r\n text: \"#ffffff\",\r\n background: \"rgba(187, 113, 84, 1)\",\r\n lighterColor: \"rgba(187, 113, 84, 0.2)\",\r\n rgba: \"rgba(187, 113, 84, 0.6)\",\r\n },\r\n [PROJECT_STATUS.HISTORY]: {\r\n text: \"#ffffff\",\r\n background: \"rgba(166, 183, 170, 1)\",\r\n lighterColor: \"rgba(166, 183, 170, 0.2)\",\r\n rgba: \"rgba(166, 183, 170, 0.6)\",\r\n },\r\n};\r\n\r\nenum PROJECT_POSITION {\r\n LEADER = \"leader\",\r\n ARTIST = \"artist\",\r\n MANAGER = \"manager\",\r\n}\r\n\r\nenum LOG_TIME_DAY_TYPE {\r\n WEEKDAY = \"weekday\",\r\n WEEKEND = \"weekend\",\r\n HOLIDAY = \"holiday\",\r\n}\r\n\r\nenum LOG_TIME_WORK_TYPE {\r\n WORK_TIME = \"work time\",\r\n OVER_TIME = \"over time\",\r\n}\r\n\r\nenum LOG_TIME_TYPE {\r\n INTERNAL = \"internal\",\r\n EXTERNAL = \"external\",\r\n}\r\n\r\nenum LOG_OVER_TIME_STATUS {\r\n PENDING = \"pending\",\r\n APPROVED = \"approved\",\r\n REJECTED = \"rejected\",\r\n}\r\n\r\nenum REQUEST_UPDATE_TIMECARD_STATUS {\r\n PENDING = \"pending\",\r\n APPROVED = \"approved\",\r\n REJECTED = \"rejected\",\r\n}\r\n\r\nenum DAY_OFF_REQUEST_STATUS {\r\n PENDING = \"pending\",\r\n APPROVED = \"approved\",\r\n REJECTED = \"rejected\",\r\n}\r\n\r\nenum HOLIDAY_STATUS {\r\n ACTIVE = \"active\",\r\n INACTIVE = \"inactive\",\r\n}\r\n\r\nenum PROJECT_EXTERIOR_STATUS {\r\n ACTIVE = \"active\",\r\n INACTIVE = \"inactive\",\r\n}\r\n\r\nenum PROJECT_URGENCY_STATUS {\r\n NORMALLY = \"normally\",\r\n EARLY = \"early\",\r\n}\r\n\r\nconst LOG_OVER_TIME_STATUS_COLOR: Record = {\r\n [LOG_OVER_TIME_STATUS.APPROVED]: {\r\n text: \"#ffffff\",\r\n background: \"#A6B7AA\",\r\n },\r\n [LOG_OVER_TIME_STATUS.PENDING]: { text: \"#ffffff\", background: \"#D2A96A\" },\r\n [LOG_OVER_TIME_STATUS.REJECTED]: {\r\n text: \"#ffffff\",\r\n background: \"#BB7154\",\r\n },\r\n};\r\nenum CLIENT_STATUS {\r\n ACTIVE = \"active\",\r\n INACTIVE = \"inactive\",\r\n}\r\nenum NEWS_STATUS {\r\n ACTIVE = \"active\",\r\n INACTIVE = \"inactive\",\r\n}\r\n\r\nconst TIMECARD_STATUS_COLOR: Record = {\r\n [DAY_OFF_REQUEST_STATUS.APPROVED]: {\r\n text: \"#ffffff\",\r\n background: \"#5C6E6C\",\r\n },\r\n [DAY_OFF_REQUEST_STATUS.PENDING]: { text: \"#ffffff\", background: \"#D2A96A\" },\r\n [DAY_OFF_REQUEST_STATUS.REJECTED]: {\r\n text: \"#ffffff\",\r\n background: \"#BB7154\",\r\n },\r\n};\r\n\r\nconst TIMECARD_STATUS_DETAIL_COLOR: Record = {\r\n [DAY_OFF_REQUEST_STATUS.APPROVED]: {\r\n text: \"#009E0F\",\r\n background: \"#FFFFFF\",\r\n },\r\n [DAY_OFF_REQUEST_STATUS.PENDING]: { text: \"#ffd700\", background: \"#FFFFFF\" },\r\n [DAY_OFF_REQUEST_STATUS.REJECTED]: {\r\n text: \"#FF0000\",\r\n background: \"#FFFFFF\",\r\n },\r\n};\r\n\r\nconst HOLIDAY_STATUS_COLOR: Record = {\r\n [HOLIDAY_STATUS.ACTIVE]: {\r\n text: \"#ffffff\",\r\n background: \"#009E0F\",\r\n },\r\n [HOLIDAY_STATUS.INACTIVE]: {\r\n text: \"#ffffff\",\r\n background: \"#FF0000\",\r\n },\r\n};\r\n\r\nenum NOTIFICATION_TYPE {\r\n USER = \"user\",\r\n DAY_OFF_REQUEST = \"day off request\",\r\n HOLIDAY = \"holiday\",\r\n INTERNAL_IP_ADDRESS = \"internal ip address\",\r\n NEWS = \"news\",\r\n KANBAN_BOARD = \"kanban board\",\r\n LEAVE_DAY = \"leave day\",\r\n LOG_TIME = \"log time\",\r\n OVERTIME = \"overtime\",\r\n PERFORMANCE_EVALUATION = \"performance evaluation\",\r\n PROJECT = \"project\",\r\n TASK = \"task\",\r\n TASK_COMMENT = \"task comment\",\r\n TIMEKEEPING = \"timekeeping\",\r\n TIMESHEET = \"timesheet\",\r\n REQUEST_UPDATE_TIMECARD = \"request update timecard\",\r\n CHAT = \"chat\",\r\n TASK_NOTE = \"task note\",\r\n}\r\n\r\nenum SOCKET_EVENT {\r\n MESSAGE_NOTIFICATION = \"messageNotification\",\r\n MESSAGE_CONVERSATION = \"messageConversation\",\r\n MESSAGE_CHANNEL = \"messageChannel\",\r\n MESSAGE_RECALLED = \"messageRecalled\",\r\n MESSAGE_CHANNEL_REMOVE_MEMBER = \"messageChannelRemoveMember\",\r\n MESSAGE_CHANNEL_ADD_MEMBER = \"messageChannelAddMember\",\r\n MESSAGE_CHANNEL_LEAVE_GROUP = \"messageChannelLeave\",\r\n MESSAGE_UPDATE_GROUP_AVATAR = \"messageGroupUpdateAvatar\",\r\n USER_CONNECT_SOCKET = \"userConnectSocket\",\r\n MESSAGE_GROUP_LEAVE_REMOVE = \"messageGroupLeaveRemove\",\r\n SAVE_TOKEN_FIREBASE = \"saveTokenFirebase\",\r\n}\r\n\r\nconst PROJECT_EXTERIOR_STATUS_COLOR: Record<\r\n PROJECT_EXTERIOR_STATUS,\r\n TColor & { lighterColor: string }\r\n> = {\r\n [PROJECT_EXTERIOR_STATUS.ACTIVE]: {\r\n text: \"#ffffff\",\r\n background: \"rgba(187, 113, 84, 1)\",\r\n lighterColor: \"rgba(187, 113, 84, 0.2)\",\r\n rgba: \"rgba(187, 113, 84, 0.6)\",\r\n },\r\n [PROJECT_EXTERIOR_STATUS.INACTIVE]: {\r\n text: \"#ffffff\",\r\n background: \"rgba(166, 183, 170,1)\",\r\n lighterColor: \"rgba(166, 183, 170,0.2)\",\r\n rgba: \"rgba(166, 183, 170,0.6)\",\r\n },\r\n};\r\n\r\nconst PROJECT_EXTERIOR_URGENRY_COLOR: Record<\r\n PROJECT_URGENCY_STATUS,\r\n TColor & { lighterColor: string }\r\n> = {\r\n [PROJECT_URGENCY_STATUS.NORMALLY]: {\r\n text: \"#ffffff\",\r\n background: \"rgba(210, 169, 106,1)\",\r\n lighterColor: \"rgba(210, 169, 106, 0.2)\",\r\n rgba: \"rgba(210, 169, 106, 0.6)\",\r\n },\r\n [PROJECT_URGENCY_STATUS.EARLY]: {\r\n text: \"#ffffff\",\r\n background: \"rgba(211, 157, 135,1)\",\r\n lighterColor: \"rgba(211, 157, 135,0.2)\",\r\n rgba: \"rgba(211, 157, 135,0.6)\",\r\n },\r\n};\r\n\r\nexport {\r\n ROLES,\r\n PROJECT_STATUS,\r\n PROJECT_URGENCY,\r\n PROJECT_POSITION,\r\n URGENCY_COLOR,\r\n PROJECT_STATUS_COLOR,\r\n USER_STATUS,\r\n LOG_TIME_DAY_TYPE,\r\n LOG_TIME_WORK_TYPE,\r\n LOG_TIME_TYPE,\r\n LOG_OVER_TIME_STATUS,\r\n REQUEST_UPDATE_TIMECARD_STATUS,\r\n DAY_OFF_REQUEST_STATUS,\r\n TIMECARD_STATUS_COLOR,\r\n TIMECARD_STATUS_DETAIL_COLOR,\r\n HOLIDAY_STATUS_COLOR,\r\n NOTIFICATION_TYPE,\r\n SOCKET_EVENT,\r\n LOG_OVER_TIME_STATUS_COLOR,\r\n CLIENT_STATUS,\r\n PROJECT_EXTERIOR_STATUS,\r\n PROJECT_EXTERIOR_STATUS_COLOR,\r\n PROJECT_EXTERIOR_URGENRY_COLOR,\r\n PROJECT_TYPE,\r\n NEWS_STATUS,\r\n};\r\n","import { ENUMS, Routers } from \".\";\r\n\r\nconst PERMISSIONS = {\r\n [Routers.DASHBOARD]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MARKETING,\r\n ],\r\n notAllowed: [],\r\n },\r\n [Routers.NOTIFICATION]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MARKETING,\r\n ],\r\n notAllowed: [],\r\n },\r\n [Routers.PROJECT]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MARKETING,\r\n ],\r\n notAllowed: [],\r\n },\r\n [Routers.CREATE_PROJECT]: {\r\n allowed: [ENUMS.ROLES.ADMIN, ENUMS.ROLES.MANAGER],\r\n notAllowed: [\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MARKETING,\r\n ],\r\n },\r\n [Routers.UPDATE_PROJECT]: {\r\n allowed: [ENUMS.ROLES.ADMIN, ENUMS.ROLES.MANAGER, ENUMS.ROLES.LEADER],\r\n notAllowed: [],\r\n },\r\n [Routers.CREATE_PROJECT_EXTERIOR]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n notAllowed: [ENUMS.ROLES.LEADER, ENUMS.ROLES.ARTIST, ENUMS.ROLES.MARKETING],\r\n },\r\n [Routers.UPDATE_PROJECT_EXTERIOR]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n notAllowed: [ENUMS.ROLES.ARTIST],\r\n },\r\n [Routers.USER]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n notAllowed: [ENUMS.ROLES.LEADER, ENUMS.ROLES.ARTIST, ENUMS.ROLES.MARKETING],\r\n },\r\n [Routers.USER_CREATE]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n notAllowed: [ENUMS.ROLES.LEADER, ENUMS.ROLES.ARTIST, ENUMS.ROLES.MARKETING],\r\n },\r\n [Routers.USER_UPDATE]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n notAllowed: [ENUMS.ROLES.LEADER, ENUMS.ROLES.ARTIST, ENUMS.ROLES.MARKETING],\r\n },\r\n [Routers.PERFORMANCE]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.LEADER,\r\n ],\r\n notAllowed: [ENUMS.ROLES.ARTIST, ENUMS.ROLES.MARKETING],\r\n },\r\n [Routers.INTERNAL_IP]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n notAllowed: [ENUMS.ROLES.LEADER, ENUMS.ROLES.ARTIST, ENUMS.ROLES.MARKETING],\r\n },\r\n [Routers.NEWS]: {\r\n allowed: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MARKETING,\r\n ],\r\n notAllowed: [],\r\n },\r\n};\r\n\r\nconst ACCESS_MODULES = {\r\n Project: {\r\n viewUser: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n createProject: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n editProject: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n deleteProject: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n changeStatus: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n editSomeField: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n deleteMember: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n createMember: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n fetchProject: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ],\r\n canViewScreenProjectExterior: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MARKETING,\r\n ],\r\n changeStatusExterior: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n createMemberExterior: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n deleteMemberExterior: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n },\r\n Board: {\r\n createProccess: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ],\r\n editProcess: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.MARKETING,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n deleteProcess: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n deleteComment: [ENUMS.ROLES.ADMIN, ENUMS.ROLES.MANAGER, ENUMS.ROLES.LEADER],\r\n },\r\n DayOffRequest: {\r\n approve: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n fetchAggregate: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n deleteDayOff: [ENUMS.ROLES.ADMIN],\r\n },\r\n UpdateTimecard: {\r\n approve: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n sendUpdateTimeCard: [\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.MARKETING,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.ADMIN,\r\n ],\r\n deleteUpdateTimecard: [ENUMS.ROLES.ADMIN],\r\n },\r\n Overtime: {\r\n sendOvertime: [ENUMS.ROLES.ADMIN, ENUMS.ROLES.MANAGER, ENUMS.ROLES.LEADER],\r\n changeStatus: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n deleteOvertime: [ENUMS.ROLES.ADMIN],\r\n checkTable: [ENUMS.ROLES.ARTIST],\r\n approved: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n totalOvertime: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n filterKeyword: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.LEADER,\r\n ],\r\n viewTable: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n },\r\n LogTime: {\r\n createInternalLog: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ],\r\n approve: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MARKETING,\r\n ],\r\n createExternalLog: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n updateLog: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n deleteLog: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n updateLogStatus: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n filterKeyword: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n totalOveview: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n createInternalLogArtist: [\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.LEADER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.MARKETING,\r\n ],\r\n },\r\n LeaveDays: {\r\n checkLeaveDays: [\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n },\r\n Users: {\r\n fetchUsers: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n check: [ENUMS.ROLES.HUMAN_RESOURCES, ENUMS.ROLES.ADMIN],\r\n checkRole: [ENUMS.ROLES.ADMIN],\r\n updateProfile: [\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n viewProfile: [\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n createUser: [ENUMS.ROLES.HUMAN_RESOURCES, ENUMS.ROLES.ADMIN],\r\n checkEditEmail: [ENUMS.ROLES.ADMIN],\r\n CheckPassWord: [\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n checkDeleteUser: [\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n checkCreateUser: [\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n fetchUserDashboard: [ENUMS.ROLES.ADMIN],\r\n },\r\n Timekeeping: {\r\n checkUpdate: [\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n tableTimekeeping: [\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n export: [\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ],\r\n },\r\n Timesheet: {\r\n updateTimesheet: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n filter: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n },\r\n setting: {\r\n setting: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n news: [ENUMS.ROLES.ADMIN, ENUMS.ROLES.MANAGER, ENUMS.ROLES.HUMAN_RESOURCES],\r\n internal: [ENUMS.ROLES.ADMIN, ENUMS.ROLES.HUMAN_RESOURCES],\r\n internalStaff: [\r\n ENUMS.ROLES.ARTIST,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.MARKETING,\r\n ENUMS.ROLES.LEADER,\r\n ],\r\n isCheckWarning: [ENUMS.ROLES.ADMIN],\r\n },\r\n Holiday: {\r\n create: [ENUMS.ROLES.ADMIN, ENUMS.ROLES.HUMAN_RESOURCES],\r\n },\r\n Performance: {\r\n editAmountOfWork: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n export: [\r\n ENUMS.ROLES.ADMIN,\r\n ENUMS.ROLES.MANAGER,\r\n ENUMS.ROLES.HUMAN_RESOURCES,\r\n ],\r\n },\r\n};\r\n\r\nexport { PERMISSIONS, ACCESS_MODULES };\r\n","interface StateVariables {\r\n [key: string]: boolean;\r\n}\r\n\r\nconst generateSuccessStateVariables = (\r\n variableNames: string[]\r\n): StateVariables => {\r\n const stateVariables: StateVariables = {};\r\n variableNames.forEach((name) => {\r\n stateVariables[`is${name}Success`] = false;\r\n });\r\n return stateVariables;\r\n};\r\n\r\nconst DEFAULT_LOADING_STATES = {\r\n isFetchLoading: false,\r\n isGetLoading: false,\r\n isActionLoading: false,\r\n};\r\n\r\nconst DEFAULT_META_STATES = {\r\n currentPage: 1,\r\n itemCount: 0,\r\n itemsPerPage: 10,\r\n totalItems: 0,\r\n totalPages: 1,\r\n};\r\n\r\nexport {\r\n DEFAULT_LOADING_STATES,\r\n DEFAULT_META_STATES,\r\n generateSuccessStateVariables,\r\n};\r\n","import { PURGE } from \"redux-persist\";\nimport { ActionTypes } from \"@/Constants\";\n\nconst initialState = {\n isLoading: false,\n isLogged: false,\n checkIsLogged: false,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n payload: {},\n authMessage: \"\",\n isRequestForgotPasswordSuccess: false,\n changeLocale: false,\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.SET_AUTH_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isRequestForgotPasswordSuccess: false,\n };\n case ActionTypes.RESET_AUTH_REDUCER:\n return initialState;\n\n case ActionTypes.LOGOUT:\n return initialState;\n\n case ActionTypes.RESET_STEP_FORGOT_PASSWORD: {\n return {\n ...state,\n isRequestForgotPasswordSuccess: false,\n requestIsLoading: false,\n };\n }\n\n case ActionTypes.LOGIN_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isLogged: true,\n checkIsLogged: true,\n payload: payload,\n };\n case ActionTypes.LOGIN_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isLogged: false,\n checkIsLogged: false,\n authMessage: payload,\n payload: {},\n };\n\n case ActionTypes.REFRESH_TOKEN_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isLogged: true,\n role: payload,\n };\n case ActionTypes.REFRESH_TOKEN_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isLogged: false,\n authMessage: payload,\n };\n\n case ActionTypes.REQUEST_FORGOT_PASSWORD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isRequestForgotPasswordSuccess: true,\n };\n case ActionTypes.REQUEST_FORGOT_PASSWORD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isRequestForgotPasswordSuccess: false,\n };\n\n case ActionTypes.VERIFY_ACCOUNT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n };\n case ActionTypes.VERIFY_ACCOUNT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n };\n\n case ActionTypes.RESET_PASSWORD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n };\n case ActionTypes.RESET_PASSWORD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n };\n case ActionTypes.CREATE_FCM_TOKEN_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n };\n case ActionTypes.CREATE_FCM_TOKEN_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n };\n case ActionTypes.REMOVE_FCM_TOKEN_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n };\n case ActionTypes.REMOVE_FCM_TOKEN_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n };\n\n case ActionTypes.RESET_CHECK_LOGIN:\n return {\n ...state,\n checkIsLogged: false,\n };\n\n case ActionTypes.CHANGE_LOCALE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n changeLocale: true,\n };\n case ActionTypes.CHANGE_LOCALE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n changeLocale: false,\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\r\nimport { ActionTypes, DEFAULT_LOADING_STATES } from \"@/Constants\";\r\n\r\nconst initialState = {\r\n DEFAULT_LOADING_STATES,\r\n payload: [],\r\n details: {},\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.SET_ROLE_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n };\r\n case ActionTypes.SET_ROLE_GET_LOADING:\r\n return {\r\n ...state,\r\n isGetLoading: true,\r\n };\r\n case ActionTypes.SET_ROLE_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isActionLoading: true,\r\n };\r\n case ActionTypes.RESET_ROLES_REDUCER:\r\n return initialState;\r\n\r\n case ActionTypes.FETCH_ROLES_SUCCESS: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n payload,\r\n };\r\n }\r\n case ActionTypes.FETCH_ROLES_FAILURE: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PURGE } from \"redux-persist\";\nimport { ActionTypes } from \"@/Constants\";\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n payload: [],\n date_deletion_schedule: [],\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_DASHBOARD_REDUCER:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n date_deletion_schedule: [],\n payload: [],\n };\n case ActionTypes.SET_DASHBOARD_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n };\n\n case ActionTypes.GET_STATISTICAL_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n payload: payload,\n };\n case ActionTypes.GET_STATISTICAL_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n payload: [],\n };\n\n case ActionTypes.GET_DATE_DELETION_SCHEDULE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n date_deletion_schedule: payload,\n };\n case ActionTypes.GET_DATE_DELETION_SCHEDULE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n date_deletion_schedule: [],\n };\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\nimport { ActionTypes } from \"@/Constants\";\n\nconst DEFAULT_META = {\n currentPage: 1,\n itemCount: 0,\n itemsPerPage: 10,\n totalItems: 0,\n totalPages: 1,\n};\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n keyword: \"\",\n status: \"\",\n role: \"\",\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isDeleteSuccess: false,\n isUpdataPasswordSuccess: false,\n isUpdateForSelfSuccess: false,\n\n meta: DEFAULT_META,\n pagination: DEFAULT_PAGINATION,\n userList: [],\n userDetail: {},\n forSelfData: {},\n isMessage: \"\",\n performAction: {},\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_USER_REDUCER:\n return {\n ...initialState,\n };\n case ActionTypes.SET_USER_ACTION_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: true,\n isUpdateForSelfSuccess: false,\n };\n case ActionTypes.SET_USER_FETCH_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: true,\n isActionLoading: false,\n isUpdateForSelfSuccess: false,\n };\n case ActionTypes.SET_USER_GET_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: false,\n isGetLoading: true,\n isActionLoading: false,\n };\n case ActionTypes.SET_META_USER:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_USER:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n pagination: payload,\n };\n case ActionTypes.USER_PERFORM_ACTION:\n return {\n ...state,\n performAction: payload,\n };\n case ActionTypes.RESET_USER_PERFORM_ACTION:\n return {\n ...state,\n performAction: {},\n };\n\n case ActionTypes.CREATE_USER_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n };\n case ActionTypes.CREATE_USER_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n };\n\n case ActionTypes.FETCH_USER_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isDeleteSuccess: false,\n isGetLoading: false,\n userList: payload,\n isActionLoading: false,\n };\n\n case ActionTypes.FETCH_USER_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isDeleteSuccess: false,\n isGetLoading: false,\n userList: [],\n isActionLoading: false,\n };\n\n case ActionTypes.GET_BY_ID_USER_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n userDetail: payload,\n };\n case ActionTypes.GET_BY_ID_USER_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n userDetail: {},\n };\n\n case ActionTypes.GET_FOR_SELF_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n forSelfData: payload,\n };\n case ActionTypes.GET_FOR_SELF_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n forSelfData: {},\n };\n\n case ActionTypes.UPDATE_USER_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isGetLoading: false,\n isUpdateForSelfSuccess: true,\n userDetail: payload,\n };\n case ActionTypes.UPDATE_USER_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isGetLoading: false,\n isUpdateForSelfSuccess: false,\n };\n\n case ActionTypes.UPDATE_FOR_SELF_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isGetLoading: false,\n isUpdateForSelfSuccess: true,\n };\n case ActionTypes.UPDATE_FOR_SELF_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isGetLoading: false,\n isUpdateForSelfSuccess: false,\n };\n\n case ActionTypes.ACTIVATE_USER_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isGetLoading: false,\n };\n case ActionTypes.ACTIVATE_USER_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isGetLoading: false,\n };\n\n case ActionTypes.DEACTIVATE_USER_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isGetLoading: false,\n };\n case ActionTypes.DEACTIVATE_USER_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isGetLoading: false,\n };\n\n case ActionTypes.UPDATE_PASSWORD_FOR_SELF_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isUpdataPasswordSuccess: true,\n isMessage: \"\",\n isGetLoading: false,\n isActionLoading: false,\n };\n case ActionTypes.UPDATE_PASSWORD_FOR_SELF_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isUpdataPasswordSuccess: false,\n isMessage: payload,\n isGetLoading: false,\n isActionLoading: false,\n };\n\n case ActionTypes.DELETE_USER_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isDeleteSuccess: true,\n isActionLoading: false,\n isGetLoading: false,\n };\n case ActionTypes.DELETE_USER_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isDeleteSuccess: false,\n isGetLoading: false,\n };\n\n case ActionTypes.RESET_ACTION_USER_REDUCER:\n return {\n ...state,\n isUpdataPasswordSuccess: false,\n };\n\n case ActionTypes.RESET_USER_MESSAGE:\n return {\n ...state,\n isMessage: \"\",\n };\n\n case ActionTypes.RESET_USER_DETAIL:\n return {\n ...state,\n userDetail: {},\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\nimport {\n ActionTypes,\n DEFAULT_META_STATES,\n DEFAULT_LOADING_STATES,\n generateSuccessStateVariables,\n} from \"@/Constants\";\n\nconst initialState = {\n DEFAULT_LOADING_STATES,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n meta: DEFAULT_META_STATES,\n ...generateSuccessStateVariables([\"Update\", \"ChangeStatus\"]),\n pagination: {},\n payload: [],\n getForDashboard: [],\n statistical: {},\n details: {},\n currentDateInScroller: \"\",\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.SET_PROJECT_FETCH_LOADING:\n return {\n ...state,\n isFetchLoading: true,\n isChangeStatusSuccess: false,\n isUpdateSuccess: false,\n };\n case ActionTypes.SET_PROJECT_GET_LOADING:\n return {\n ...state,\n isGetLoading: true,\n isChangeStatusSuccess: false,\n isUpdateSuccess: false,\n };\n case ActionTypes.SET_PROJECT_ACTION_LOADING:\n return {\n ...state,\n isActionLoading: true,\n isChangeStatusSuccess: false,\n isUpdateSuccess: false,\n };\n case ActionTypes.SET_PROJECT_META:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n meta: payload,\n };\n case ActionTypes.SET_PROJECT_PAGINATION:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n pagination: payload,\n };\n case ActionTypes.RESET_PROJECT_STATUS: {\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n };\n }\n\n case ActionTypes.RESET_PROJECT_REDUCER:\n return { ...initialState };\n\n case ActionTypes.FETCH_PROJECTS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n payload: payload,\n };\n case ActionTypes.FETCH_PROJECTS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n payload: [],\n };\n case ActionTypes.GET_STATISTICAL_PROJECTS_SUCCESS: {\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n statistical: payload,\n };\n }\n case ActionTypes.GET_STATISTICAL_PROJECTS_FAILURE: {\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n statistical: {},\n };\n }\n case ActionTypes.FETCH_PROJECTS_FOR_DASHBOARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n getForDashboard: payload,\n };\n case ActionTypes.FETCH_PROJECTS_FOR_DASHBOARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n getForDashboard: [],\n };\n case ActionTypes.GET_PROJECT_BY_ID_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n details: payload,\n };\n case ActionTypes.GET_PROJECT_BY_ID_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n };\n\n case ActionTypes.CREATE_PROJECT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n };\n case ActionTypes.CREATE_PROJECT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n };\n\n case ActionTypes.UPDATE_PROJECT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.UPDATE_PROJECT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n\n case ActionTypes.DELETE_PROJECT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n };\n case ActionTypes.DELETE_PROJECT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n };\n\n case ActionTypes.CHANGE_PROJECT_STATUS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: true,\n };\n case ActionTypes.CHANGE_PROJECT_STATUS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: false,\n };\n case ActionTypes.SAVE_CURRENT_DATE_IN_SCROLLER: {\n return {\n ...state,\n currentDateInScroller: payload,\n };\n }\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\r\n\r\nimport {\r\n ActionTypes,\r\n DEFAULT_LOADING_STATES,\r\n generateSuccessStateVariables,\r\n} from \"@/Constants\";\r\n\r\nconst initialState = {\r\n ...DEFAULT_LOADING_STATES,\r\n ...generateSuccessStateVariables([\r\n \"CreateColumn\",\r\n \"UpdateColumn\",\r\n \"CreateComment\",\r\n \"DeleteComment\",\r\n ]),\r\n payload: [],\r\n taskDetails: {},\r\n performAction: {},\r\n myTimeWeekDays: [],\r\n dashboardWeekDays: [],\r\n timelineInBoard: {},\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.SET_BOARD_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n };\r\n case ActionTypes.SET_BOARD_GET_LOADING:\r\n return {\r\n ...state,\r\n isGetLoading: true,\r\n };\r\n case ActionTypes.SET_BOARD_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isActionLoading: true,\r\n };\r\n case ActionTypes.SET_MY_TIME_WEEKDAYS:\r\n return {\r\n ...state,\r\n myTimeWeekDays: payload,\r\n };\r\n case ActionTypes.SET_DASHBOARD_WEEKDAYS:\r\n return {\r\n ...state,\r\n dashboardWeekDays: payload,\r\n };\r\n case ActionTypes.BOARD_PERFORM_ACTION:\r\n return {\r\n ...state,\r\n performAction: payload,\r\n };\r\n case ActionTypes.RESET_BOARD_PERFORM_ACTION:\r\n return {\r\n ...state,\r\n performAction: {},\r\n };\r\n case ActionTypes.RESET_WEEKDAYS:\r\n return {\r\n ...state,\r\n myTimeWeekDays: [],\r\n dashboardWeekDays: [],\r\n };\r\n case ActionTypes.RESET_BOARD_STATUS:\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n isFetchLoading: false,\r\n isActionLoading: false,\r\n isCreateColumnSuccess: false,\r\n isUpdateColumnSuccess: false,\r\n isCreateCommentSuccess: false,\r\n isDeleteCommentSuccess: false,\r\n };\r\n case ActionTypes.RESET_BOARD_DETAIL: {\r\n return {\r\n ...state,\r\n details: {},\r\n };\r\n }\r\n case ActionTypes.RESET_TIMELINE_IN_BOARD: {\r\n return {\r\n ...state,\r\n timelineInBoard: {},\r\n };\r\n }\r\n case ActionTypes.RESET_BOARD_REDUCER: {\r\n return initialState;\r\n }\r\n\r\n case ActionTypes.CREATE_BOARD_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n };\r\n\r\n case ActionTypes.CREATE_BOARD_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n };\r\n\r\n case ActionTypes.CREATE_COLUMN_IN_BOARD_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n isCreateColumnSuccess: true,\r\n };\r\n\r\n case ActionTypes.CREATE_COLUMN_IN_BOARD_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n isCreateColumnSuccess: false,\r\n };\r\n\r\n case ActionTypes.GET_COLUMN_IN_BOARD_SUCCESS:\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n taskDetails: payload,\r\n };\r\n\r\n case ActionTypes.GET_COLUMN_IN_BOARD_FAILURE:\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n };\r\n\r\n case ActionTypes.UPDATE_COLUMN_IN_BOARD_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n isUpdateColumnSuccess: true,\r\n };\r\n\r\n case ActionTypes.UPDATE_COLUMN_IN_BOARD_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n isUpdateColumnSuccess: false,\r\n };\r\n\r\n case ActionTypes.FETCH_BOARDS_SUCCESS:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n payload,\r\n };\r\n\r\n case ActionTypes.FETCH_BOARDS_FAILURE:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n };\r\n case ActionTypes.GET_BOARD_BY_ID_SUCCESS:\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n details: payload,\r\n };\r\n\r\n case ActionTypes.GET_BOARD_BY_ID_FAILURE:\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n };\r\n case ActionTypes.CREATE_COMMENT_IN_COLUMN_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n isCreateCommentSuccess: true,\r\n };\r\n case ActionTypes.CREATE_COMMENT_IN_COLUMN_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n isCreateCommentSuccess: false,\r\n };\r\n case ActionTypes.DELETE_COMMENT_IN_COLUMN_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n isDeleteCommentSuccess: true,\r\n };\r\n case ActionTypes.DELETE_COMMENT_IN_COLUMN_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n isDeleteCommentSuccess: false,\r\n };\r\n case ActionTypes.DELETE_COLUMN_IN_BOARD_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n };\r\n case ActionTypes.DELETE_COLUMN_IN_BOARD_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n };\r\n case ActionTypes.GET_TIMELINE_IN_BOARD_SUCCESS:\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n requestIsFailure: false,\r\n timelineInBoard: payload,\r\n };\r\n case ActionTypes.GET_TIMELINE_IN_BOARD_FAILURE:\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n requestIsFailure: true,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PURGE } from \"redux-persist\";\nimport {\n ActionTypes,\n DEFAULT_META_STATES,\n DEFAULT_LOADING_STATES,\n generateSuccessStateVariables,\n} from \"@/Constants\";\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n keyword: \"\",\n status: \"\",\n role: \"\",\n};\n\nconst DEFAULT_PAGINATION_AGGREGATE = {\n page: 0,\n limit: 0,\n keyword: \"\",\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n ...DEFAULT_LOADING_STATES,\n ...generateSuccessStateVariables([\"Create\", \"Update\", \"Delete\"]),\n isChangeStatus: false,\n isAggregateFetchLoading: false,\n meta: DEFAULT_META_STATES,\n metaAggregate: DEFAULT_META_STATES,\n pagination: DEFAULT_PAGINATION,\n paginationAgregate: DEFAULT_PAGINATION_AGGREGATE,\n logTimeList: [],\n LogTimeDetail: {},\n getForBoard: [],\n getForMe: [],\n aggregateList: [],\n logTimeListDashboard: [],\n logTimeDeadlineDashboard: [],\n myWorkDashboard: [],\n myTimePagination: {},\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_LOG_TIME_REDUCER:\n return {\n ...initialState,\n };\n case ActionTypes.SET_LOG_TIME_ACTION_LOADING:\n return {\n ...state,\n isActionLoading: true,\n };\n case ActionTypes.SET_LOG_TIME_FETCH_LOADING:\n return {\n ...state,\n isFetchLoading: true,\n };\n case ActionTypes.SET_AGGREGATE_FETCH_LOADING:\n return {\n ...state,\n isAggregateFetchLoading: true,\n };\n case ActionTypes.SET_LOG_TIME_GET_LOADING:\n return {\n ...state,\n isGetLoading: true,\n };\n case ActionTypes.SET_LOG_TIME_META:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n meta: payload,\n };\n\n case ActionTypes.SET_LOG_TIME_PAGINATION:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n pagination: payload,\n };\n case ActionTypes.SET_MY_TIME_PAGINATION:\n return {\n ...state,\n myTimePagination: payload,\n };\n case ActionTypes.LOG_TIME_PERFORM_ACTION:\n return {\n ...state,\n performAction: payload,\n };\n\n case ActionTypes.RESET_LOG_TIME_PERFORM_ACTION:\n return {\n ...state,\n performAction: {},\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isDeleteSuccess: false,\n };\n case ActionTypes.RESET_LOG_TIME_DETAIL: {\n return {\n ...state,\n logTimeDetail: {},\n };\n }\n case ActionTypes.RESET_LOG_TIME_STATUS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isDeleteSuccess: false,\n };\n\n case ActionTypes.CREATE_LOG_TIME_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isCreateSuccess: true,\n isActionLoading: false,\n };\n case ActionTypes.CREATE_LOG_TIME_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isCreateSuccess: false,\n isActionLoading: false,\n };\n\n case ActionTypes.FETCH_LOG_TIME_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isChangeStatus: false,\n isDeleteSuccess: false,\n logTimeList: payload,\n };\n\n case ActionTypes.FETCH_LOG_TIME_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isChangeStatus: false,\n isDeleteSuccess: false,\n logTimeList: [],\n };\n\n case ActionTypes.FETCH_LOG_TIME_BY_BOARD_ID_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n getForBoard: payload,\n };\n\n case ActionTypes.FETCH_LOG_TIME_BY_BOARD_ID_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n };\n\n case ActionTypes.GET_BY_ID_LOG_TIME_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n logtimeDetail: payload,\n };\n case ActionTypes.GET_BY_ID_LOG_TIME_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n logtimeDetail: {},\n };\n\n case ActionTypes.UPDATE_LOG_TIME_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.UPDATE_LOG_TIME_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n\n case ActionTypes.CHANGE_STATUS_LOG_TIME_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatus: true,\n };\n case ActionTypes.CHANGE_STATUS_LOG_TIME_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isChangeStatus: false,\n isActionLoading: false,\n };\n\n case ActionTypes.DELETE_LOG_TIME_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isDeleteSuccess: true,\n isActionLoading: false,\n };\n case ActionTypes.DELETE_LOG_TIME_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isDeleteSuccess: false,\n isActionLoading: false,\n };\n\n case ActionTypes.GET_MY_TIME_SUCCESS:\n return {\n ...state,\n isFetchLoading: false,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n getForMe: payload,\n };\n case ActionTypes.GET_MY_TIME_FAILURE:\n return {\n ...state,\n isFetchLoading: false,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n };\n\n case ActionTypes.FETCH_AGGREGATE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isChangeStatus: false,\n isDeleteSuccess: false,\n isAggregateFetchLoading: false,\n aggregateList: payload,\n };\n\n case ActionTypes.FETCH_AGGREGATE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isAggregateFetchLoading: false,\n aggregateList: [],\n };\n\n case ActionTypes.SET_AGGREGATE_META:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n metaAggregate: payload,\n };\n\n case ActionTypes.SET_AGGREGATE_PAGINATION:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n paginationAgregate: payload,\n };\n\n case ActionTypes.FETCH_LOG_TIME_DASH_BOARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isChangeStatus: false,\n isDeleteSuccess: false,\n logTimeListDashboard: payload,\n };\n\n case ActionTypes.FETCH_LOG_TIME_DASH_BOARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isChangeStatus: false,\n isDeleteSuccess: false,\n logTimeListDashboard: [],\n };\n\n case ActionTypes.FETCH_DEADLINE_DASH_BOARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isChangeStatus: false,\n isDeleteSuccess: false,\n logTimeDeadlineDashboard: payload,\n };\n\n case ActionTypes.FETCH_DEADLINE_DASH_BOARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isChangeStatus: false,\n isDeleteSuccess: false,\n logTimeDeadlineDashboard: [],\n };\n\n case ActionTypes.FETCH_MY_WORK_DASH_BOARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isChangeStatus: false,\n isDeleteSuccess: false,\n myWorkDashboard: payload,\n };\n\n case ActionTypes.FETCH_MY_WORK_DASH_BOARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n isChangeStatus: false,\n isDeleteSuccess: false,\n myWorkDashboard: [],\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\nimport {\n ActionTypes,\n DEFAULT_LOADING_STATES,\n DEFAULT_META_STATES,\n generateSuccessStateVariables,\n} from \"@/Constants\";\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n keyword: \"\",\n status: \"\",\n};\n\nconst DEFAULT_PAGINATION_AGGREGATE = {\n page: 0,\n limit: 0,\n keyword: \"\",\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n ...DEFAULT_LOADING_STATES,\n ...generateSuccessStateVariables([\n \"CreateDayOffRequest\",\n \"ChangeStatus\",\n \"UpdateDayOffRequest\",\n \"Delete\",\n ]),\n isFetchAggregateLoading: false,\n meta: DEFAULT_META_STATES,\n pagination: DEFAULT_PAGINATION,\n paginationAgregate: DEFAULT_PAGINATION_AGGREGATE,\n metaAggregate: DEFAULT_META_STATES,\n dayOffRequestList: [],\n aggregateList: [],\n details: {},\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_REDUCER_DAY_OFF_REQUEST:\n return { ...initialState };\n case ActionTypes.RESET_DAY_OFF_REQUEST_DETAILS:\n return {\n ...state,\n details: {},\n };\n case ActionTypes.SET_DAY_OFF_REQUEST_ACTION_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isActionLoading: true,\n };\n case ActionTypes.SET_DAY_OFF_REQUEST_FETCH_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: true,\n };\n case ActionTypes.SET_DAY_OFF_REQUEST_GET_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isGetLoading: true,\n };\n case ActionTypes.SET_META_DAY_OFF_REQUEST:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_DAY_OFF_REQUEST:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n pagination: payload,\n };\n\n case ActionTypes.CREATE_DAY_OFF_REQUEST_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateDayOffRequestSuccess: true,\n };\n case ActionTypes.CREATE_DAY_OFF_REQUEST_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateDayOffRequestSuccess: false,\n };\n\n case ActionTypes.FETCH_DAY_OFF_REQUEST_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isCreateDayOffRequestSuccess: false,\n isUpdateDayOffRequestSuccess: false,\n isDeleteSuccess: false,\n dayOffRequestList: payload,\n };\n case ActionTypes.FETCH_DAY_OFF_REQUEST_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isCreateDayOffRequestSuccess: false,\n isUpdateDayOffRequestSuccess: false,\n isDeleteSuccess: false,\n dayOffRequestList: [],\n };\n\n case ActionTypes.GET_BY_ID_DAY_OFF_REQUEST_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n details: payload,\n isFetchLoading: false,\n };\n case ActionTypes.GET_BY_ID_DAY_OFF_REQUEST_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n isFetchLoading: false,\n };\n\n case ActionTypes.UPDATE_DAY_OFF_REQUEST_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateDayOffRequestSuccess: true,\n };\n case ActionTypes.UPDATE_DAY_OFF_REQUEST_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateDayOffRequestSuccess: false,\n };\n\n case ActionTypes.CHANGE_STATUS_DAY_OFF_REQUEST_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: true,\n };\n case ActionTypes.CHANGE_STATUS_DAY_OFF_REQUEST_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: false,\n };\n\n case ActionTypes.DELETE_DAY_OFF_REQUEST_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isDeleteSuccess: true,\n };\n case ActionTypes.DELETE_DAY_OFF_REQUEST_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isDeleteSuccess: false,\n };\n\n case ActionTypes.FETCH_AGGREGATE_DAY_OFF_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n aggregateList: payload,\n };\n\n case ActionTypes.FETCH_AGGREGATE_DAY_OFF_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n aggregateList: [],\n };\n\n case ActionTypes.SET_AGGREGATE_DAY_OFF_META:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n metaAggregate: payload,\n };\n\n case ActionTypes.SET_AGGREGATE_DAY_OFF_PAGINATION:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n paginationAgregate: payload,\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\nimport { ActionTypes } from \"@/Constants\";\n\nconst DEFAULT_META = {\n currentPage: 1,\n itemCount: 0,\n itemsPerPage: 10,\n totalItems: 0,\n totalPages: 1,\n};\n\nconst DEFAULT_PAGINATION = {\n page: 0,\n limit: 0,\n year: new Date().getFullYear(),\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n meta: DEFAULT_META,\n pagination: DEFAULT_PAGINATION,\n LeaveDaysList: [],\n LeaveDaysFilterList: [],\n details: {},\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_LEAVE_DAYS:\n return {\n ...initialState,\n };\n case ActionTypes.RESET_LEAVE_DAY_DETAILS:\n return {\n ...state,\n details: {},\n };\n case ActionTypes.SET_LEAVE_DAYS_ACTION_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isActionLoading: true,\n };\n case ActionTypes.SET_LEAVE_DAYS_FETCH_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: true,\n };\n case ActionTypes.SET_LEAVE_DAYS_GET_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isGetLoading: true,\n };\n case ActionTypes.SET_META_LEAVE_DAYS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_LEAVE_DAYS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n pagination: payload,\n };\n\n case ActionTypes.CREATE_LEAVE_DAYS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: true,\n };\n case ActionTypes.CREATE_LEAVE_DAYS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: false,\n };\n\n case ActionTypes.FETCH_LEAVE_DAYS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n LeaveDaysList: payload,\n };\n case ActionTypes.FETCH_LEAVE_DAYS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n };\n\n case ActionTypes.GET_BY_ID_LEAVE_DAYS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n details: payload,\n };\n case ActionTypes.GET_BY_ID_LEAVE_DAYS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n details: {},\n };\n\n case ActionTypes.UPDATE_LEAVE_DAYS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.UPDATE_LEAVE_DAYS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n\n case ActionTypes.FETCH_LEAVE_DAYS_FILTER_CREATE_SUCCESS:\n return {\n ...state,\n LeaveDaysFilterList: payload,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\nimport { ActionTypes } from \"@/Constants\";\n\nconst DEFAULT_META = {\n currentPage: 1,\n itemCount: 0,\n itemsPerPage: 10,\n totalItems: 0,\n totalPages: 1,\n};\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n keyword: \"\",\n status: \"\",\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isCreateRequestUpdateTimeCardSuccess: false,\n isUpdateRequestUpdateTimeCardSuccess: false,\n isChangeStatusSuccess: false,\n isDeleteSuccess: false,\n meta: DEFAULT_META,\n pagination: DEFAULT_PAGINATION,\n payload: [],\n details: {},\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_REDUCER_REQUEST_UPDATE_TIME_CARD:\n return {\n ...initialState,\n };\n case ActionTypes.RESET_REQUEST_UPDATE_TIME_CARD_DETAILS:\n return {\n ...state,\n details: {},\n };\n case ActionTypes.SET_REQUEST_UPDATE_TIME_CARD_ACTION_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isActionLoading: true,\n };\n case ActionTypes.SET_REQUEST_UPDATE_TIME_CARD_FETCH_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: true,\n };\n case ActionTypes.SET_REQUEST_UPDATE_TIME_CARD_GET_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isGetLoading: true,\n };\n case ActionTypes.SET_META_REQUEST_UPDATE_TIME_CARD:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_REQUEST_UPDATE_TIME_CARD:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n pagination: payload,\n };\n\n case ActionTypes.CREATE_REQUEST_UPDATE_TIME_CARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateRequestUpdateTimeCardSuccess: true,\n };\n case ActionTypes.CREATE_REQUEST_UPDATE_TIME_CARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateRequestUpdateTimeCardSuccess: false,\n };\n\n case ActionTypes.FETCH_REQUEST_UPDATE_TIME_CARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isCreateRequestUpdateTimeCardSuccess: false,\n isUpdateRequestUpdateTimeCardSuccess: false,\n isDeleteSuccess: false,\n payload: payload,\n };\n case ActionTypes.FETCH_REQUEST_UPDATE_TIME_CARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isCreateRequestUpdateTimeCardSuccess: false,\n isUpdateRequestUpdateTimeCardSuccess: false,\n isDeleteSuccess: false,\n };\n\n case ActionTypes.GET_BY_ID_REQUEST_UPDATE_TIME_CARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n details: payload,\n };\n case ActionTypes.GET_BY_ID_REQUEST_UPDATE_TIME_CARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n details: {},\n };\n\n case ActionTypes.UPDATE_REQUEST_UPDATE_TIME_CARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateRequestUpdateTimeCardSuccess: true,\n };\n case ActionTypes.UPDATE_REQUEST_UPDATE_TIME_CARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateRequestUpdateTimeCardSuccess: false,\n };\n\n case ActionTypes.CHANGE_STATUS_REQUEST_UPDATE_TIME_CARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: true,\n };\n case ActionTypes.CHANGE_STATUS_REQUEST_UPDATE_TIME_CARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: false,\n };\n\n case ActionTypes.DELETE_REQUEST_UPDATE_TIME_CARD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isDeleteSuccess: true,\n };\n case ActionTypes.DELETE_REQUEST_UPDATE_TIME_CARD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isDeleteSuccess: false,\n };\n default:\n return state;\n }\n};\n","// import Alert from '../alert';\n// import Notification from '../Notification';\n\nexport type ResponseValidation = {\n data: {\n status: boolean;\n message: string;\n payload: any;\n };\n isHideAlert?: boolean;\n};\n\n// RESOLVE REQUEST RESPONSE\nconst resolveResponse = (response: ResponseValidation) => {\n return new Promise((resolve) => {\n const { status, payload } = response.data;\n if (status) {\n if (payload) resolve(payload);\n else resolve(true);\n } else {\n resolve(false);\n }\n });\n};\n\nexport { resolveResponse };\n","import Cookies from \"universal-cookie\";\nimport { cookie_keys } from \"@/Constants\";\nimport jwt_decode from \"jwt-decode\";\n\nconst cookies = new Cookies();\n\nconst saveToken = (token: string, isRemember?: boolean) => {\n // const expirationDate = new Date();\n // expirationDate.setDate(expirationDate.getDate() + 7); // 7 days from now\n cookies.set(cookie_keys.SAVED_SECURE_TOKEN, token, {\n path: \"/\",\n // expires: expirationDate,\n });\n const decodedToken: any = jwt_decode(token);\n const expires = new Date(decodedToken.exp * 1000);\n\n if (isRemember)\n cookies.set(cookie_keys.SAVED_SECURE_TOKEN, token, {\n path: \"/\",\n expires,\n });\n else\n cookies.set(cookie_keys.SAVED_SECURE_TOKEN, token, {\n path: \"/\",\n });\n};\n\nconst saveRefreshToken = (refreshToken: string) => {\n const decodedRefreshToken: any = jwt_decode(refreshToken);\n const expires = new Date(decodedRefreshToken.exp * 1000);\n cookies.set(cookie_keys.SAVED_SECURE_REFRESH_TOKEN, refreshToken, {\n path: \"/\",\n expires,\n });\n};\n\nconst getSavedToken = () => {\n const token = cookies.get(cookie_keys.SAVED_SECURE_TOKEN);\n return token;\n};\n\nconst getSavedRefreshToken = () => {\n const refreshToken = cookies.get(cookie_keys.SAVED_SECURE_REFRESH_TOKEN);\n return refreshToken;\n};\n\nconst saveUserData = (userData: any) => {\n localStorage.setItem(cookie_keys.SAVED_USER_DATA, JSON.stringify(userData));\n};\n\nconst getSavedUserData = () => {\n const userData = localStorage.getItem(cookie_keys.SAVED_USER_DATA);\n if (userData && userData !== \"undefined\") return JSON.parse(userData);\n return null;\n};\n\nconst getFileDataFromStorage = () => {\n const fileData = localStorage.getItem(\"FileDataOpenInEditor\");\n if (fileData) return JSON.parse(fileData);\n return fileData;\n};\n\nconst getFileFromURL = async (url: string, filename: string) => {\n const resolveUrl = url.replace(/\\\\/g, \"/\").replace(\"src/storage/file\", \"\");\n const blob = await fetch(resolveUrl, {}).then((r) => r.blob());\n const file = new File([blob], filename);\n return file;\n};\n\nconst saveFirebaseToken = (token: string) => {\n localStorage.setItem(cookie_keys.SAVED_FIREBASE_TOKEN, token);\n};\n\nconst getSavedFirebaseToken = () => {\n const token = localStorage.getItem(cookie_keys.SAVED_FIREBASE_TOKEN);\n if (token && token !== \"undefined\") return token;\n return null;\n};\n\nconst clearAllSavedData = async () => {\n cookies.remove(cookie_keys.SAVED_SECURE_TOKEN, { path: \"/\" });\n cookies.remove(cookie_keys.SAVED_SECURE_REFRESH_TOKEN, { path: \"/\" });\n // localStorage.removeItem(cookie_keys.SAVED_FIREBASE_TOKEN);\n localStorage.removeItem(\"isCheckedIn\");\n localStorage.removeItem(\"isCheckedInAfternoon\");\n localStorage.removeItem(cookie_keys.SAVED_USER_DATA);\n};\n\nexport {\n saveToken,\n getSavedToken,\n saveUserData,\n getSavedUserData,\n clearAllSavedData,\n saveRefreshToken,\n getSavedRefreshToken,\n getFileDataFromStorage,\n getFileFromURL,\n saveFirebaseToken,\n getSavedFirebaseToken,\n};\n","import { toast } from \"@/Routers\";\n\ninterface IProps {\n title: string;\n description?: string;\n status: \"error\" | \"warning\" | \"info\" | \"success\" | \"loading\";\n}\n\nconst Toast = async (payload: IProps) => {\n const { status = \"info\", title = \"\", description = \"\", ...props } = payload;\n\n const toastOptions = {\n title,\n description,\n isClosable: true,\n duration: 3000,\n status,\n variant: \"left-accent\",\n // icon,\n ...props,\n };\n\n const toastInstance = toast(toastOptions);\n\n setTimeout(() => {\n toast.close(toastInstance);\n }, toastOptions.duration);\n};\n\nexport default Toast;\n","import socketIOClient, { Socket } from \"socket.io-client\";\nimport Utils from \"@/Utils\";\n\nlet socket: Socket;\nconst BASE_URL = import.meta.env.VITE_BE_URL;\n\nexport const initSocket = (token: string) => {\n const options = {\n extraHeaders: {\n Authorization: `Bearer ${token}`,\n },\n };\n socket = socketIOClient(BASE_URL, options);\n};\n\nexport const getSocket = () => {\n const token = Utils.getSavedToken();\n if (!socket && token) initSocket(token);\n return socket;\n};\n\nexport const disconnectSocket = () => {\n if (socket) socket.disconnect();\n};\n\nexport const updateToken = (newToken: any) => {\n if (socket)\n socket.io.opts.extraHeaders = {\n Authorization: `Bearer ${newToken}`,\n };\n};\n","import _ from \"lodash\";\nimport jsSHA from \"jssha\";\nimport jwtDecode from \"jwt-decode\";\nimport { ApisauceInstance } from \"apisauce\";\nimport dayjs from \"dayjs\";\nimport relativeTime from \"dayjs/plugin/relativeTime\";\nimport { cookie_keys } from \"@/Constants\";\nimport Cookies from \"universal-cookie\";\nimport FingerprintJS from \"@fingerprintjs/fingerprintjs\";\n\nconst cookies = new Cookies();\nimport {\n S3,\n GetObjectCommand,\n GetObjectCommandOutput,\n} from \"@aws-sdk/client-s3\";\n\nimport { history } from \"@/Store\";\nimport { Toast } from \"@/Widgets\";\n\nimport { ENUMS, PERMISSIONS, Routers, ACCESS_MODULES, APIs } from \"@/Constants\";\n\nimport { IRoleStructure } from \"@/Interfaces/Role.interface\";\nimport { NOTIFICATION_TYPE } from \"@/Constants/Enums.contant\";\n\nimport {\n saveToken,\n saveRefreshToken,\n getSavedToken,\n getSavedUserData,\n getSavedRefreshToken,\n} from \"./Cookie.utils\";\nimport { updateToken } from \"@/Configs/socket.config\";\n\ndayjs.extend(relativeTime);\n\nconst s3Client = new S3({\n credentials: {\n accessKeyId: import.meta.env.VITE_AWS_ACCESS_KEY_ID,\n secretAccessKey: import.meta.env.VITE_AWS_SECRET_ACCESS_KEY,\n },\n region: import.meta.env.VITE_AWS_REGION,\n});\n\nconst isJsonString = (str: string) => {\n try {\n if (/^\\{.*\\}$/.test(str)) {\n JSON.parse(str);\n return true;\n }\n } catch (e) {\n return false;\n }\n return false;\n};\n\n// Redirect screen\nconst detectLocationBeforeRedirect = (location: string) => {\n // const userRole: ROLE.ADMIN | ROLE.EVENT_ADMIN | ROLE.USER = getUserRole();\n // if (userRole) {\n // const allowLocation = LOCATIONS[userRole];\n // if (!_.includes(allowLocation, location)) {\n // Alert({\n // type: 'ERROR',\n // message:\n // \"Your account doesn't have permission to view or manage this page\",\n // });\n // return { isValid: false, redirectLocation: REDIRECT[userRole] };\n // }\n // }\n return { isValid: true, redirectLocation: location };\n};\n\nconst redirect = (location: string, state?: any) => {\n return history.push(location, state);\n};\n\nconst getAccountRole = () => {\n const userData = getSavedUserData();\n if (userData) {\n const result = _.get(userData, \"role.name\");\n return result;\n }\n return false;\n};\n\nconst getAccountId = () => {\n const userData = getSavedUserData();\n if (userData) {\n const result = userData.id;\n return result;\n }\n return false;\n};\n\nconst checkRouterAccess = (\n router: string,\n userRoles: string[],\n isRedirect?: boolean\n) => {\n const permissions: any = PERMISSIONS[router as keyof typeof PERMISSIONS];\n\n if (\n !permissions ||\n !userRoles.some((role) => permissions.allowed.includes(role))\n ) {\n return isRedirect ? redirect(Routers.DASHBOARD) : false;\n }\n\n return true;\n};\n\nconst hasPermission = (\n roles: IRoleStructure[],\n module: any,\n action: string\n) => {\n const modulePermissions = _.get(ACCESS_MODULES, [module, action], []);\n if (!modulePermissions || !Array.isArray(roles)) {\n return false;\n }\n return (\n _.intersection(\n roles.map((role) => role.roleCode),\n modulePermissions\n ).length > 0\n );\n};\n\nconst getDayOfWeek = (date: Date | string, type?: \"long\" | \"short\") =>\n new Date(date).toLocaleString(\n getSavedLanguage() === \"en\" ? \"en-us\" : \"vi-Vi\",\n { weekday: type || \"long\" }\n );\n\nconst handleCheckCanDragAndModifyState = (\n userRoles: string[],\n currentState: string,\n nextState: string\n): boolean => {\n // Check the state and permissions of the user\n if (\n nextState === ENUMS.PROJECT_STATUS.WAITING_PROCESS ||\n nextState === ENUMS.PROJECT_STATUS.HISTORY ||\n currentState === ENUMS.PROJECT_STATUS.HISTORY ||\n currentState === ENUMS.PROJECT_STATUS.WAITING_PROCESS\n ) {\n // For WAITING_PROCESS and HISTORY, only admin and manager have the right to transition\n return (\n userRoles.includes(ENUMS.ROLES.ADMIN) ||\n userRoles.includes(ENUMS.ROLES.MANAGER) ||\n userRoles.includes(ENUMS.ROLES.HUMAN_RESOURCES)\n );\n }\n // For other states, allow all users\n return true;\n};\n\nconst removeEmptyFields = (obj: object) => {\n return _.pickBy(obj, (value) => {\n if (_.isArray(value)) return !_.isEmpty(value);\n return value !== \"\" && value !== null && value !== undefined;\n });\n};\n\n// Function to map file extensions to MIME types\nconst getFileTypeFromExtension = (extension: any) => {\n // Define a mapping of file extensions to MIME types\n const extensionMap = {\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n gif: \"image/gif\",\n bmp: \"image/bmp\",\n tiff: \"image/tiff\",\n svg: \"image/svg+xml\",\n webp: \"image/webp\",\n ico: \"image/x-icon\",\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n ogg: \"audio/ogg\",\n flac: \"audio/flac\",\n m4a: \"audio/mp4\",\n mp4: \"video/mp4\",\n avi: \"video/x-msvideo\",\n mov: \"video/quicktime\",\n mkv: \"video/x-matroska\",\n webm: \"video/webm\",\n wmv: \"video/x-ms-wmv\",\n pdf: \"application/pdf\",\n doc: \"application/msword\",\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n xls: \"application/vnd.ms-excel\",\n xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n ppt: \"application/vnd.ms-powerpoint\",\n pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n txt: \"text/plain\",\n rtf: \"application/rtf\",\n csv: \"text/csv\",\n html: \"text/html\",\n css: \"text/css\",\n js: \"application/javascript\",\n json: \"application/json\",\n xml: \"application/xml\",\n zip: \"application/zip\",\n rar: \"application/x-rar-compressed\",\n tar: \"application/x-tar\",\n gz: \"application/gzip\",\n exe: \"application/vnd.microsoft.portable-executable\",\n dll: \"application/vnd.microsoft.portable-executable\",\n // Add other file types as needed\n };\n\n // Convert the file extension to lowercase and check if it's in the map\n const lowercaseExtension = extension.toLowerCase();\n return (\n extensionMap[lowercaseExtension as keyof typeof extensionMap] ||\n \"application/octet-stream\"\n );\n};\n\nconst getFileExtension = (filename: string) => {\n return filename?.split(\".\").pop();\n};\n\nconst getMimeTypeFromFile = (filename: string) => {\n const fileExtension = getFileExtension(filename);\n if (fileExtension) {\n return getFileTypeFromExtension(fileExtension);\n }\n return \"application/octet-stream\"; // Default MIME type for unknown files\n};\n\nconst getFileFromURL = async (url: string, filename: string) => {\n const resolveUrl = url?.replace(/\\\\/g, \"/\")?.replace(\"src/storage/file\", \"\");\n const blob = await fetch(resolveUrl, {}).then((r) => r.blob());\n const file = new File([blob], filename, {\n type: getMimeTypeFromFile(filename),\n });\n return file;\n};\n\nconst asStream = (response: GetObjectCommandOutput) => {\n return response.Body as ReadableStream;\n};\n\nconst asBlob = async (response: GetObjectCommandOutput) => {\n return new Response(asStream(response)).blob();\n};\n\nconst getAWSFileAsBlob = (url: string, filename: string, type?: string) => {\n return new Promise(async (resolve) => {\n const key: string = _.last(url.split(\"/\")) || \"\";\n try {\n const command = new GetObjectCommand({\n Bucket: import.meta.env.VITE_AWS_PUBLIC_BUCKET_NAME,\n Key: key,\n ResponseContentType: \"application/json\",\n });\n\n const response = await s3Client.send(command);\n if (response.Body) {\n const blobFile = await asBlob(response);\n let file;\n if (type === \"pdf\")\n file = new File([blobFile], filename, {\n type: \"application/pdf\",\n });\n else file = new File([blobFile], filename);\n resolve(file);\n }\n resolve(null);\n } catch (err) {\n resolve(null);\n }\n });\n};\n\nconst calculateTimeAgo = (timestamp: string) => {\n const currentTime = dayjs();\n const targetTime = dayjs(timestamp);\n const language = getSavedLanguage();\n\n const diffInSeconds = currentTime.diff(targetTime, \"second\");\n const diffInMinutes = currentTime.diff(targetTime, \"minute\");\n const diffInHours = currentTime.diff(targetTime, \"hour\");\n const diffInDays = currentTime.diff(targetTime, \"day\");\n const diffInMonths = currentTime.diff(targetTime, \"month\");\n const diffInYears = currentTime.diff(targetTime, \"year\");\n\n let timeAgo;\n\n switch (true) {\n case diffInSeconds < 60:\n timeAgo = language === \"en\" ? \"just now\" : \"ngay bây giờ\";\n break;\n case diffInMinutes < 60:\n timeAgo = `${diffInMinutes} ${\n language === \"en\" ? \"minutes ago\" : \"phút trước\"\n } `;\n break;\n case diffInHours < 24:\n timeAgo = `${diffInHours} ${\n language === \"en\" ? \"hours ago\" : \"giờ trước\"\n } `;\n break;\n case diffInDays < 30:\n timeAgo = `${diffInDays} ${\n language === \"en\" ? \"days ago\" : \"ngày trước\"\n } `;\n break;\n case diffInMonths < 12:\n timeAgo = `${diffInMonths} ${\n language === \"en ago\" ? \"months\" : \"tháng trước\"\n } `;\n break;\n default:\n timeAgo = `${diffInYears} ${\n language === \"en\" ? \"years ago\" : \"năm trước\"\n } `;\n break;\n }\n\n return timeAgo;\n};\n\n// Sleep for delay\nconst sleep = (delay: number) => {\n return new Promise((resolve) => {\n setTimeout(resolve, delay);\n });\n};\n\nconst convertTimeInt = (time: any) => {\n const [hours, minutes, seconds] = time.split(\":\");\n return dayjs()\n .set(\"hour\", Number(hours))\n .set(\"minute\", Number(minutes))\n .set(\"second\", Number(seconds ?? 0))\n .unix();\n};\n\nconst calculateWorkingTime = (startTime: string, endTime: string) => {\n if (startTime && endTime) {\n let workingTimeTemp = null;\n const convertStartTime = convertTimeInt(startTime);\n const convertEndTime = convertTimeInt(endTime);\n\n if (convertEndTime < convertStartTime)\n workingTimeTemp = convertEndTime + 24 * 60 * 60 - convertStartTime;\n else workingTimeTemp = convertEndTime - convertStartTime;\n const workingTimeConvert = Math.round((workingTimeTemp / 3600) * 100) / 100;\n return workingTimeConvert;\n }\n return 0;\n};\n\nconst findAddedAndRemovedItems = (\n originalArray: string[],\n updatedArray: string[]\n) => {\n const removedItems = _.difference(originalArray, updatedArray);\n const addedItems = _.difference(updatedArray, originalArray);\n\n return {\n removedItems,\n addedItems,\n };\n};\n\nconst parseEstimated = (estimatedString: string) => {\n if (estimatedString) {\n const match = estimatedString.match(/(\\d+) days, (\\d+) hours/);\n\n if (match) {\n const days = parseInt(match[1], 10);\n const hours = parseInt(match[2], 10);\n return { days, hours };\n }\n }\n return { days: 0, hours: 0 };\n};\n\nconst formatHourMinute = (timeString: string | undefined) => {\n if (timeString) {\n const [hours, minutes] = timeString.split(\":\");\n if (hours && minutes && hours.length === 2 && minutes.length === 2) {\n return `${hours}:${minutes}`;\n }\n }\n return \"00:00\";\n};\n\nconst formatTime = (timeString: string | undefined) => {\n if (timeString) {\n const [hours, minutes] = timeString?.split(\":\");\n if (hours && minutes && hours.length === 2 && minutes.length === 2) {\n return { hours, minutes };\n }\n }\n return { hours: \"00\", minutes: \"00\" };\n};\n\nconst getHourAndMinute = (timeString: string) => {\n if (!timeString) {\n return { hour: 0, minute: 0 };\n }\n const [hour, minute] = timeString?.split(\":\")?.map(Number);\n return { hour, minute };\n};\n\nconst extractTimeValues = (startTime: string, endTime: string) => {\n const start = formatTime(startTime);\n const end = formatTime(endTime);\n\n return {\n startHours: start.hours,\n startMinutes: start.minutes,\n endHours: end.hours,\n endMinutes: end.minutes,\n };\n};\n\nconst getFileTypeMessage = (attachment: any) => {\n const imageTypes = [\"image\", \"jpg\", \"jpeg\", \"png\", \"gif\"];\n const videoTypes = [\"video\"];\n const wordTypes = [\"doc\", \"docx\"];\n const excelTypes = [\"xls\", \"xlsx\"];\n const powerpointTypes = [\"ppt\", \"pptx\"];\n const pdfTypes = [\"pdf\"];\n const otherFileTypes = [\"file\"];\n\n let result = { text: \"\", icon: \"\" };\n\n switch (true) {\n case _.includes(imageTypes, attachment.type):\n result = { text: \"Sent an image\", icon: \"image-icon\" };\n break;\n case _.includes(videoTypes, attachment.type):\n result = { text: \"Sent a video\", icon: \"video-icon\" };\n break;\n case _.includes(wordTypes, attachment.type):\n result = { text: \"Sent a Word document\", icon: \"word-icon\" };\n break;\n case _.includes(excelTypes, attachment.type):\n result = { text: \"Sent an Excel document\", icon: \"excel-icon\" };\n break;\n case _.includes(powerpointTypes, attachment.type):\n result = {\n text: \"Sent a PowerPoint presentation\",\n icon: \"powerpoint-icon\",\n };\n break;\n case _.includes(pdfTypes, attachment.type):\n result = { text: \"Sent a PDF document\", icon: \"pdf-icon\" };\n break;\n case _.includes(otherFileTypes, attachment.type):\n result = { text: \"Sent a file\", icon: \"file-icon\" };\n break;\n default:\n result = { text: \"Unknown attachment type\", icon: \"unknown-icon\" };\n break;\n }\n return result;\n};\n\nconst resolveTimeAgo = (data: string | Date) => {\n const date = dayjs(data);\n const now = dayjs();\n const diffInMinutes = now.diff(date, \"minute\");\n const diffInDays = now.diff(date, \"day\");\n const diffInMonths = now.diff(date, \"month\");\n const diffInYears = now.diff(date, \"year\");\n\n const minuteThreshold = 60;\n\n if (diffInYears > 0) {\n return `${diffInYears}y`;\n }\n if (diffInMonths > 0) {\n return `${diffInMonths}m`;\n }\n if (diffInDays > 0) {\n return `${diffInDays}d`;\n }\n if (diffInMinutes >= minuteThreshold) {\n const diffInHours = Math.floor(diffInMinutes / 60);\n return `${diffInHours}h`;\n }\n\n if (diffInMinutes > 0) {\n return `${diffInMinutes}m`; // Show minutes if it's less than an hour\n }\n\n return \"now\";\n};\n\nconst sortByProperty = (array: any[], property: string, descending = false) => {\n const sortOrder = descending ? 1 : -1;\n\n return [...array].sort((a, b) => {\n const valueA = new Date(a[property]).getTime();\n const valueB = new Date(b[property]).getTime();\n\n return sortOrder * (valueA - valueB);\n });\n};\n\nconst mapNotificationToPath = (type: string) => {\n switch (type) {\n case NOTIFICATION_TYPE.USER:\n return Routers.USER;\n case NOTIFICATION_TYPE.DAY_OFF_REQUEST:\n return Routers.DAY_OFF_REQUEST;\n case NOTIFICATION_TYPE.HOLIDAY:\n return Routers.HOLIDAYS;\n case NOTIFICATION_TYPE.INTERNAL_IP_ADDRESS:\n return Routers.INTERNAL_IP;\n case NOTIFICATION_TYPE.KANBAN_BOARD:\n return Routers.BOARD;\n case NOTIFICATION_TYPE.LEAVE_DAY:\n return Routers.LEAVE_DAY;\n case NOTIFICATION_TYPE.LOG_TIME:\n return Routers.BOARD_DETAIL;\n case NOTIFICATION_TYPE.OVERTIME:\n return Routers.OVER_TIME;\n case NOTIFICATION_TYPE.PERFORMANCE_EVALUATION:\n return Routers.PERFORMANCE;\n case NOTIFICATION_TYPE.PROJECT:\n return Routers.PROJECT_DETAILS;\n case NOTIFICATION_TYPE.TASK:\n return Routers.BOARD_DETAIL;\n case NOTIFICATION_TYPE.TASK_COMMENT:\n return Routers.BOARD_DETAIL;\n case NOTIFICATION_TYPE.TIMEKEEPING:\n return Routers.TIME_KEEPPING;\n case NOTIFICATION_TYPE.TIMESHEET:\n return Routers.TIME_SHEET;\n case NOTIFICATION_TYPE.REQUEST_UPDATE_TIMECARD:\n return Routers.REQUEST_UPDATE_TIME_CARD;\n case NOTIFICATION_TYPE.CHAT:\n return Routers.CHAT;\n case NOTIFICATION_TYPE.LOG_TIME:\n return Routers.MY_TIME;\n case NOTIFICATION_TYPE.NEWS:\n return Routers.NEWS;\n default:\n return Routers.ERROR_404;\n }\n};\n\nconst convertImageToBlob = async (imageUrl: string): Promise => {\n try {\n const response = await fetch(imageUrl);\n const blobData = await response.blob();\n return blobData;\n } catch (error) {\n await Toast({\n title: `Error copying image to blob:, ${error}`,\n status: \"error\",\n });\n return null;\n }\n};\n\nconst copyImageToClipboard = async (imageUrl: string) => {\n try {\n const blobData = await convertImageToBlob(imageUrl);\n\n if (blobData) {\n const arrayBuffer = await blobData.arrayBuffer();\n const convertBlob = new Blob([arrayBuffer], { type: \"image/png\" });\n const clipboardItemInput = new ClipboardItem({\n \"image/png\": convertBlob,\n });\n if (navigator.clipboard && navigator.clipboard.write) {\n await navigator.clipboard.write([clipboardItemInput]);\n }\n }\n } catch (e) {\n await Toast({\n title: `Error copying image to Clipboard:, ${e}`,\n status: \"error\",\n });\n }\n};\n\nconst resolveMessages = (payload: any) => {\n const userLogged = getSavedUserData();\n return _.map(payload, (message) => {\n return {\n id: message?.id,\n timestamp: message?.createdAt,\n isSender: message?.userCreated?.id === userLogged?.id,\n sender: !_.isEmpty(message?.userCreated)\n ? {\n id: message?.userCreated?.id,\n name: message?.userCreated?.userData?.fullName,\n avatar: message?.userCreated?.userData?.avatar?.path,\n }\n : null,\n content: message?.message,\n fileAttachments: message?.fileAttachment,\n recalled: message?.recalled,\n };\n });\n};\n\nconst getDaysOfWeek = (date: Date, dateFormat: string) => {\n const daysOfWeek = [];\n const firstDayOfWeek = new Date(date);\n firstDayOfWeek.setDate(\n date.getDate() - date.getDay() + (date.getDay() === 0 ? -6 : 1)\n );\n\n for (let i = 0; i < 7; i++) {\n const currentDate = new Date(firstDayOfWeek);\n currentDate.setDate(firstDayOfWeek.getDate() + i);\n daysOfWeek.push(dayjs(currentDate).format(dateFormat));\n }\n\n return daysOfWeek;\n};\n\nconst getNextOrPrevChat = (chats: any[], currentIndex: number) => {\n let nextChat;\n let prevChat;\n if (currentIndex === 0) {\n nextChat = chats[1];\n } else if (currentIndex === chats.length - 1) {\n prevChat = chats[currentIndex - 1];\n } else {\n nextChat = chats[currentIndex + 1];\n prevChat = chats[currentIndex - 1];\n }\n\n return {\n nextChat,\n prevChat,\n };\n};\n\nconst getRandomColor = () => {\n const colors = [\n \"#5C6E6C\", // balsamGreen\n \"#A6B7AA\", // aquatone\n \"#D2A96A\", // artermis\n \"#D39D87\", // dustyCoral\n \"#BB7154\", // warmCopper\n ];\n const randomIndex = Math.floor(Math.random() * colors.length);\n return colors[randomIndex];\n};\n\nconst getMaxHoursWorktime = (date: Date) => {\n const currentDate = dayjs(date);\n const currentDay = currentDate.day();\n let maxHours;\n\n switch (currentDay) {\n case 0: // Sunday\n maxHours = 0; // No work on Sunday\n break;\n case 1: // Monday\n maxHours = 48;\n break;\n case 2: // Tuesday\n maxHours = 40;\n break;\n case 3: // Wednesday\n maxHours = 32;\n break;\n case 4: // Thursday\n maxHours = 24;\n break;\n case 5: // Friday\n maxHours = 16;\n break;\n case 6: // Saturday\n maxHours = 16;\n break;\n default:\n maxHours = 0; // Default to no work\n }\n\n return maxHours;\n};\n\nconst isValidTimeRange = (\n start: string | Date,\n end: string | Date,\n workingTime: {\n morningStart: number;\n morningEnd: number;\n afternoonStart: number;\n afternoonEnd: number;\n }\n) => {\n const startTime = dayjs(start);\n const endTime = dayjs(end);\n const { morningStart, morningEnd, afternoonStart, afternoonEnd } =\n workingTime;\n\n const { hour: morningStartHour, minute: morningStartMinute } =\n splitHourMinute(morningStart);\n const { hour: morningEndHour, minute: morningEndMinute } =\n splitHourMinute(morningEnd);\n const { hour: afternoonStartHour, minute: afternoonStartMinute } =\n splitHourMinute(afternoonStart);\n const { hour: afternoonEndHour, minute: afternoonEndMinute } =\n splitHourMinute(afternoonEnd);\n\n const isWithinMorning = (time: dayjs.Dayjs) => {\n const hour = time?.hour();\n const minute = time?.minute();\n const timeInMinutes = hour * 60 + minute;\n const morningStartTimeInMinutes =\n morningStartHour * 60 + morningStartMinute;\n const morningEndTimeInMinutes = morningEndHour * 60 + morningEndMinute;\n return (\n timeInMinutes >= morningStartTimeInMinutes &&\n timeInMinutes <= morningEndTimeInMinutes\n );\n };\n\n const isWithinAfternoon = (time: dayjs.Dayjs) => {\n const hour = time?.hour();\n const minute = time?.minute();\n const timeInMinutes = hour * 60 + minute;\n const startAfternoonInMinutes =\n afternoonStartHour * 60 + afternoonStartMinute;\n const endAfternoonInMinutes = afternoonEndHour * 60 + afternoonEndMinute;\n return (\n timeInMinutes >= startAfternoonInMinutes &&\n timeInMinutes <= endAfternoonInMinutes\n );\n };\n\n return (\n (isWithinMorning(startTime) || isWithinAfternoon(startTime)) &&\n (isWithinMorning(endTime) || isWithinAfternoon(endTime))\n );\n};\n\nconst splitHourMinute = (decimalTime: number) => {\n const hour = Math.floor(decimalTime);\n const minute = Math.floor((decimalTime - hour) * 60);\n return { hour, minute };\n};\n\nconst calculateWorkingTimeForSameDay = (\n date: dayjs.Dayjs,\n endDate: dayjs.Dayjs\n) => {\n const getStartHour = date.hour();\n const getStartMinutes = Number((date.minute() / 60).toFixed(1));\n const getEndHour = endDate.hour();\n const getEndMinutes = Number((endDate.minute() / 60).toFixed(1));\n const startTime = getStartHour + getStartMinutes;\n const endTime = getEndHour + getEndMinutes;\n if ((startTime <= 12 && endTime <= 12) || (startTime > 12 && endTime > 12))\n return endTime - startTime;\n return endTime - startTime - 1.5;\n};\n\nconst calculateHourDifference = (\n startDate: string | Date,\n endDate: string | Date,\n workingTime: {\n morningStart: number;\n morningEnd: number;\n afternoonStart: number;\n afternoonEnd: number;\n },\n holidaysList?: any\n) => {\n const start = dayjs(_.toString(startDate));\n const end = dayjs(_.toString(endDate));\n\n const totalWortime =\n workingTime.morningEnd -\n workingTime.morningStart +\n workingTime.afternoonEnd -\n workingTime.afternoonStart;\n\n const startDateNew = new Date(dayjs(startDate).format(\"YYYY-MM-DD\"));\n const endDateNew = new Date(dayjs(endDate).format(\"YYYY-MM-DD\"));\n\n const isHoliday = (date: any) => {\n return (\n holidaysList &&\n holidaysList.some(\n (holiday: any) => new Date(holiday.day).getTime() === date.getTime()\n )\n );\n };\n\n const countHolidays = (startDate: any, endDate: any) => {\n let count = 0;\n let currentDate = new Date(startDate);\n\n while (currentDate <= endDate) {\n if (isHoliday(currentDate)) {\n count++;\n }\n currentDate.setDate(currentDate.getDate() + 1);\n }\n\n return count;\n };\n\n const numHolidays = countHolidays(startDateNew, endDateNew);\n\n const { morningStart, afternoonEnd } = workingTime;\n const { hour: morningStartHour, minute: morningStartMinute } =\n splitHourMinute(morningStart);\n const { hour: afternoonEndHour, minute: afternoonEndMinute } =\n splitHourMinute(afternoonEnd);\n\n let totalWorkingHours = 0;\n const getDiff = end.diff(start, \"day\") + 1;\n let sundays = 0;\n _.forEach(_.range(getDiff), (day) => {\n if (day && !start.add(day, \"day\").day()) sundays += 1;\n });\n // handle same day\n if (start.isSame(end, \"day\")) {\n const startHour = start.get(\"hour\");\n const startMinute = start.get(\"minute\");\n const lastWorkStart = _.clone(end)\n .set(\"hour\", startHour)\n .set(\"minute\", startMinute)\n .set(\"second\", 0);\n const lastWorkEnd = end.clone();\n lastWorkEnd.set(\"second\", 0);\n const totalHours = calculateWorkingTimeForSameDay(\n lastWorkStart,\n lastWorkEnd\n );\n totalWorkingHours += totalHours;\n } else {\n // const {hour,minute} = splitHourMinute(workingTime.afternoonEnd);\n const lastWorkFirstDate = _.clone(start)\n .set(\"hour\", afternoonEndHour)\n .set(\"minute\", afternoonEndMinute)\n .set(\"second\", 0);\n const startWorksecondDate = _.clone(end)\n .set(\"hour\", morningStartHour)\n .set(\"minute\", morningStartMinute)\n .set(\"second\", 0);\n const totalHoursInFirstDate = calculateWorkingTimeForSameDay(\n start,\n lastWorkFirstDate\n );\n const totalHoursInsecondDate = calculateWorkingTimeForSameDay(\n startWorksecondDate,\n end\n );\n totalWorkingHours =\n getDiff === 2\n ? totalHoursInFirstDate + totalHoursInsecondDate\n : totalWortime * (getDiff - 2) +\n totalHoursInFirstDate +\n totalHoursInsecondDate;\n\n if (sundays || holidaysList)\n totalWorkingHours =\n totalWorkingHours - totalWortime * sundays - numHolidays * totalWortime;\n }\n\n return totalWorkingHours;\n};\n\nconst subtractTime = (startTime: any, minutesToSubtract: any) => {\n const [startHours, startMinutes, startSeconds] =\n startTime && startTime?.split(\":\").map(Number);\n\n const totalStartMinutes = startHours * 60 + startMinutes;\n\n const newTotalMinutes = totalStartMinutes - minutesToSubtract;\n\n const newHours = Math.floor(newTotalMinutes / 60);\n const newMinutes = newTotalMinutes % 60;\n const newSeconds = startSeconds;\n\n const formattedHours = newHours.toString().padStart(2, \"0\");\n const formattedMinutes = newMinutes.toString().padStart(2, \"0\");\n const formattedSeconds = newSeconds.toString().padStart(2, \"0\");\n\n return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`;\n};\n\nconst convertToTime = (decimalTime: any) => {\n const hours = Math.floor(decimalTime);\n const decimalMinutes = (decimalTime - hours) * 60;\n const minutes = Math.round(decimalMinutes);\n\n const formattedHours = hours.toString().padStart(2, \"0\");\n const formattedMinutes = minutes.toString().padStart(2, \"0\");\n\n return `${formattedHours}:${formattedMinutes}:00`; // Format giờ và phút\n};\n\n//const convertToTime = (time: any) => {\n// const [hours, minutes] = time.split(\".\").map(Number);\n// const formattedHours = hours.toString().padStart(2, \"0\");\n// const formattedMinutes = (minutes * 60).toString().padStart(2, \"0\");\n// return `${formattedHours}:${formattedMinutes}:00`;\n//};\n\nconst handleCheckPermissions = (\n currentUserRoles: string[],\n targetUserRoles: string[]\n): boolean => {\n const isCurrentArtist = currentUserRoles.includes(ENUMS.ROLES.ARTIST);\n const currentUserLeader = currentUserRoles?.includes(ENUMS.ROLES.LEADER);\n\n const allowed = true;\n const isTargetUserArtist =\n targetUserRoles.includes(ENUMS.ROLES.ARTIST) &&\n (!targetUserRoles.includes(ENUMS.ROLES.MANAGER) ||\n !targetUserRoles.includes(ENUMS.ROLES.LEADER));\n if (isCurrentArtist || (currentUserLeader && !isTargetUserArtist))\n return false;\n return allowed;\n};\n\nconst handleCheckLogTimePermissions = (\n currentUserRoles: string[],\n targetUserRoles: string[],\n type?: ENUMS.PROJECT_TYPE\n): boolean => {\n const isCurrentAdmin = currentUserRoles.includes(ENUMS.ROLES.ADMIN);\n const isCurrentManager = currentUserRoles.includes(ENUMS.ROLES.MANAGER);\n const isCurrentHR = currentUserRoles.includes(ENUMS.ROLES.HUMAN_RESOURCES);\n const isCurrentLeader = currentUserRoles.includes(ENUMS.ROLES.LEADER);\n const isCurrentMkt = currentUserRoles.includes(ENUMS.ROLES.MARKETING);\n\n if (type === ENUMS.PROJECT_TYPE.EXTERIOR) {\n if (isCurrentAdmin) return true;\n if (isCurrentHR || isCurrentManager) {\n const targetIsMnOrHr = !_.some(targetUserRoles, (role) => {\n return _.includes(\n [ENUMS.ROLES.ADMIN, ENUMS.ROLES.MANAGER, ENUMS.ROLES.HUMAN_RESOURCES],\n role\n );\n });\n\n if (targetIsMnOrHr) {\n return true;\n }\n }\n\n if (isCurrentLeader || isCurrentMkt) {\n const isTargetArtist =\n _.includes(targetUserRoles, ENUMS.ROLES.ARTIST) &&\n !_.includes(targetUserRoles, ENUMS.ROLES.LEADER) &&\n !_.includes(targetUserRoles, ENUMS.ROLES.MANAGER) &&\n !_.includes(targetUserRoles, ENUMS.ROLES.HUMAN_RESOURCES);\n if (isTargetArtist) return true;\n }\n }\n if (type === ENUMS.PROJECT_TYPE.INTERIOR) {\n if (isCurrentAdmin) return true;\n if (isCurrentManager) {\n const targetIsMn = !_.some(targetUserRoles, (role) => {\n return _.includes([ENUMS.ROLES.ADMIN, ENUMS.ROLES.MANAGER], role);\n });\n if (targetIsMn) {\n return true;\n }\n }\n\n if (isCurrentLeader) {\n const isTargetArtist =\n _.includes(targetUserRoles, ENUMS.ROLES.ARTIST) &&\n !_.includes(targetUserRoles, ENUMS.ROLES.LEADER) &&\n !_.includes(targetUserRoles, ENUMS.ROLES.MANAGER);\n if (isTargetArtist) return true;\n }\n }\n return false;\n};\n\nconst generateDefaultTimeline = (numberOfDays: number) => {\n const currentDay = dayjs();\n const weekdays: string[] = [];\n\n for (let i = -numberOfDays; i < 0; i++) {\n const day = currentDay.add(i, \"day\");\n weekdays.push(day.format(\"YYYY-MM-DD\"));\n }\n\n weekdays.push(currentDay.format(\"YYYY-MM-DD\"));\n\n for (let i = 1; i <= numberOfDays; i++) {\n const day = currentDay.add(i, \"day\");\n weekdays.push(day.format(\"YYYY-MM-DD\"));\n }\n\n return weekdays;\n};\n\nconst generateDefaultWeekDay = () => {\n const currentWeekStart = dayjs().startOf(\"week\").add(1, \"day\");\n const weekdays: string[] = [];\n for (let i = 0; i < 7; i++) {\n const day = currentWeekStart.add(i, \"day\");\n weekdays.push(day.format(\"YYYY-MM-DD\"));\n }\n return weekdays;\n};\n\nconst generateDaysInCurrentMonth = () => {\n const currentMonthStart = dayjs().startOf(\"month\");\n const daysInMonth = currentMonthStart.daysInMonth();\n const daysArray = [];\n\n for (let i = 0; i < daysInMonth; i++) {\n const day = currentMonthStart.add(i, \"day\");\n daysArray.push(day.format(\"YYYY-MM-DD\"));\n }\n return daysArray;\n};\n\nconst getFirstTextContent = (htmlString: string) => {\n const tempElement = document.createElement(\"div\");\n tempElement.innerHTML = htmlString;\n const firstTextNode = tempElement.querySelector(\"*:not(br)\");\n return firstTextNode ? firstTextNode.textContent : \"\";\n};\n\nconst generateDeviceFingerprint = () => {\n let fingerprintComponents = [];\n fingerprintComponents.push(window.devicePixelRatio);\n fingerprintComponents.push(window.innerWidth);\n fingerprintComponents.push(navigator.userAgent);\n fingerprintComponents.push(navigator.language);\n\n fingerprintComponents.push(screen.width + \"x\" + screen.height);\n fingerprintComponents.push(screen.colorDepth);\n\n const timezoneOffset = new Date().getTimezoneOffset();\n fingerprintComponents.push(timezoneOffset);\n\n const plugins = Array.from(navigator.plugins).map((plugin) => [\n plugin.name,\n plugin.description,\n ]);\n fingerprintComponents.push(JSON.stringify(plugins));\n\n const fontList = Array.from(document.fonts).map((font) => font.family);\n fingerprintComponents.push(JSON.stringify(fontList));\n\n fingerprintComponents.push(navigator.doNotTrack);\n\n fingerprintComponents.push(navigator.platform);\n\n const fingerprint = fingerprintComponents.join(\"###\");\n\n const hashedFingerprint = sha1(fingerprint);\n\n return hashedFingerprint;\n};\n\nconst sha1 = (str: any) => {\n const sha1Hasher = new jsSHA(\"SHA-1\", \"TEXT\");\n sha1Hasher.update(str);\n return sha1Hasher.getHash(\"HEX\");\n};\n\nconst getDeviceType = () => {\n const ua = navigator.userAgent;\n if (/(table|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua))\n return \"tablet\";\n if (\n /Mobile|IP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(\n ua\n )\n )\n return \"mobile\";\n return \"desktop\";\n};\n\n// Check life of token\nconst checkTokenLifeTime = async (api: ApisauceInstance) => {\n const token = getSavedToken();\n const refreshToken = getSavedRefreshToken();\n if (!token && !refreshToken) {\n Toast({\n title: \"Please login to continue...!\",\n status: \"warning\",\n });\n return null;\n }\n if (token) {\n const decodedToken: any = jwtDecode(token);\n const dateNow = new Date();\n if (decodedToken.exp < Math.floor(dateNow.getTime() / 1000)) {\n if (refreshToken) {\n const res = await api.post(APIs.AUTHENTICATION.REFRESH_TOKEN, {\n refreshToken,\n });\n const newToken = _.get(res, \"data.payload.accessToken.token\");\n const newRefreshToken = _.get(\n res,\n \"data.payload.accessToken.refreshToken\"\n );\n if (newToken && newRefreshToken) {\n saveToken(newToken);\n saveRefreshToken(newRefreshToken);\n updateToken(newToken);\n return newToken;\n }\n Toast({\n title: \"Your session has expired! Please login to continue...\",\n status: \"error\",\n });\n return null;\n }\n Toast({\n title: \"Your session has expired! Please login to continue...\",\n status: \"error\",\n });\n cookies.remove(cookie_keys.SAVED_SECURE_TOKEN, { path: \"/\" });\n return false;\n }\n } else {\n return false;\n }\n return token;\n};\n\nconst formatBytes = (bytes: number, decimals = 2) => {\n if (!+bytes) return \"0 bytes\";\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n};\n\nconst generateDateRanges = (\n startDate: any,\n endDate: any,\n format = \"YYYY-MM-DD\"\n) => {\n const start = dayjs(startDate);\n const end = dayjs(endDate);\n const dateRanges = [];\n\n let currentDate = start;\n while (currentDate.isBefore(end) || currentDate.isSame(end, \"day\")) {\n dateRanges.push(currentDate.format(format));\n currentDate = currentDate.add(1, \"day\");\n }\n\n return dateRanges;\n};\n\nconst generateDateRangesByMonths = (\n numberOfMonths: number,\n format = \"YYYY-MM-DD\"\n) => {\n const currentMonth = dayjs().month() + 1;\n let startMonthIndex = 0, endMonthIndex = 0;\n let startYear = dayjs().year(), endYear = dayjs().year();\n\n const matchingNumberOfMonths = {\n 3: [-2, 1],\n 6: [-5, 1],\n 9: [-8, 1],\n 12: [-11, 1],\n };\n\n if (numberOfMonths === 1) {\n startMonthIndex = currentMonth;\n endMonthIndex = currentMonth;\n } else {\n const matchingValues = matchingNumberOfMonths[numberOfMonths as keyof typeof matchingNumberOfMonths];\n startMonthIndex = currentMonth + matchingValues[0];\n endMonthIndex = currentMonth + matchingValues[1];\n\n if (startMonthIndex < 1) {\n startMonthIndex += 12;\n startYear -= 1;\n }\n\n if (endMonthIndex > 12) {\n endMonthIndex -= 12;\n endYear += 1;\n }\n }\n\n const startDate = dayjs()\n .set(\"year\", startYear)\n .set(\"month\", startMonthIndex - 1)\n .startOf(\"month\");\n const endDate = dayjs()\n .set(\"year\", endYear)\n .set(\"month\", endMonthIndex - 1)\n .endOf(\"month\");\n\n return generateDateRanges(startDate, endDate, format);\n};\n\nconst calculateDisplayType = (numberOfDays: number, containerWidth: number) => {\n const labelWidthHidden = 10;\n const labelWidthShort = 15;\n const labelWidthFull = 30;\n const containerWidthPerShortLabel = containerWidth / labelWidthShort;\n const containerWidthPerFullLabel = containerWidth / labelWidthFull;\n const containerWidthPerHidden = containerWidth / labelWidthHidden;\n\n if (numberOfDays <= containerWidthPerHidden) {\n return \"firstDay\";\n } else if (numberOfDays <= containerWidthPerShortLabel) {\n return \"short\";\n } else if (numberOfDays <= containerWidthPerFullLabel) {\n return \"full\";\n }\n\n return \"hide\";\n};\n\nconst saveLanguage = (lang: string) => {\n localStorage.setItem(\"language\", JSON.stringify(lang));\n};\n\nconst getSavedLanguage = () => {\n const lang = localStorage.getItem(\"language\");\n if (lang) return JSON.parse(lang);\n return \"en\";\n};\n\nconst findDateRange = (data: any, dayToAdd = 7) => {\n const dateMap = {\n minStartDate: \"\",\n maxEndDate: \"\",\n };\n\n const updateMinStartDate = (date: any) => {\n if (date && dayjs(date).isValid()) {\n // Check valid date\n const formattedDate = dayjs(date).format(\"YYYY-MM-DD\");\n if (\n !dateMap.minStartDate ||\n dayjs(formattedDate).isBefore(dayjs(dateMap.minStartDate))\n ) {\n dateMap.minStartDate = formattedDate;\n }\n }\n };\n\n const updateMaxEndDate = (date: any) => {\n if (date && dayjs(date).isValid()) {\n // Check valid date\n const formattedDate = dayjs(date).format(\"YYYY-MM-DD\");\n if (\n !dateMap.maxEndDate ||\n dayjs(formattedDate).isAfter(dayjs(dateMap.maxEndDate))\n ) {\n dateMap.maxEndDate = formattedDate;\n }\n }\n };\n\n if (data?.project?.startDate) {\n updateMinStartDate(data?.project?.startDate);\n }\n\n if (data?.project?.endDate) {\n updateMaxEndDate(data?.project?.endDate);\n }\n\n _.forEach(data?.task, (task) => {\n if (task?.timeLineStart && dayjs(task?.timeLineStart).isValid()) {\n updateMinStartDate(task.timeLineStart);\n }\n\n if (task?.timeLineEnd && dayjs(task?.timeLineEnd).isValid()) {\n updateMaxEndDate(task.timeLineEnd);\n }\n\n _.forEach(task.logTime, (logTime) => {\n if (logTime?.timeType === ENUMS.LOG_TIME_WORK_TYPE.WORK_TIME) {\n if (logTime.workTimeStartDate && logTime.workTimeEndDate) {\n updateMinStartDate(logTime.workTimeStartDate);\n updateMaxEndDate(logTime.workTimeEndDate);\n }\n }\n });\n });\n\n return {\n minStartDate: dateMap.minStartDate,\n maxEndDate: dayjs(dateMap.maxEndDate)\n .add(dayToAdd, \"day\")\n .format(\"YYYY-MM-DD\"),\n };\n};\n\nconst calculateDaysAround = (\n dateRanges: string[],\n indexOfCurrentDay: number\n) => {\n let daysBeforeCurrentDay = 0;\n let daysAfterCurrentDay = 0;\n\n if (indexOfCurrentDay !== -1) {\n // calc day before\n for (let i = indexOfCurrentDay - 1; i >= 0; i--) {\n if (!dateRanges.includes(dateRanges[i])) {\n break;\n }\n daysBeforeCurrentDay++;\n }\n\n // calc day after\n for (let i = indexOfCurrentDay + 1; i < dateRanges.length; i++) {\n if (!dateRanges.includes(dateRanges[i])) {\n break;\n }\n daysAfterCurrentDay++;\n }\n }\n\n return { daysBeforeCurrentDay, daysAfterCurrentDay };\n};\n\nconst getMiddleDates = (dateRanges: string[], numDays = 7) => {\n const middleIndex = Math.floor(dateRanges.length / 2);\n\n const startIndex = middleIndex - Math.floor(numDays / 2);\n const endIndex = middleIndex + Math.ceil(numDays / 2);\n\n return dateRanges.slice(startIndex, endIndex);\n};\n\nconst getMiddleValue = (dateRanges: string[]) => {\n const middleIndex = Math.floor(dateRanges.length / 2);\n if (dateRanges.length % 2 === 1) {\n return dateRanges[middleIndex];\n } else {\n return dateRanges[middleIndex + 1];\n }\n};\n\nconst getFp = async () => {\n const fp = await FingerprintJS.load();\n const result = await fp.get();\n const { ...components } = result.components;\n const visitorId = FingerprintJS.hashComponents(components);\n return visitorId;\n};\n\nexport {\n redirect,\n detectLocationBeforeRedirect,\n getAccountRole,\n getAccountId,\n checkRouterAccess,\n getDayOfWeek,\n handleCheckCanDragAndModifyState,\n removeEmptyFields,\n getMimeTypeFromFile,\n getFileFromURL,\n getAWSFileAsBlob,\n calculateTimeAgo,\n sleep,\n calculateWorkingTime,\n hasPermission,\n findAddedAndRemovedItems,\n parseEstimated,\n formatHourMinute,\n getHourAndMinute,\n extractTimeValues,\n getFileTypeFromExtension,\n getFileTypeMessage,\n resolveTimeAgo,\n getFileExtension,\n sortByProperty,\n isJsonString,\n mapNotificationToPath,\n copyImageToClipboard,\n resolveMessages,\n getDaysOfWeek,\n getNextOrPrevChat,\n getRandomColor,\n getMaxHoursWorktime,\n isValidTimeRange,\n calculateWorkingTimeForSameDay,\n calculateHourDifference,\n splitHourMinute,\n subtractTime,\n convertToTime,\n formatTime,\n handleCheckPermissions,\n generateDefaultWeekDay,\n generateDaysInCurrentMonth,\n getFirstTextContent,\n handleCheckLogTimePermissions,\n generateDeviceFingerprint,\n getDeviceType,\n checkTokenLifeTime,\n formatBytes,\n generateDateRanges,\n calculateDisplayType,\n saveLanguage,\n getSavedLanguage,\n generateDefaultTimeline,\n findDateRange,\n calculateDaysAround,\n getMiddleDates,\n generateDateRangesByMonths,\n getMiddleValue,\n getFp,\n};\n","import * as ResolveResponse from \"./ResolveResponse.utils\";\nimport * as CookieUtils from \"./Cookie.utils\";\nimport * as AppServices from \"./AppServices.utils\";\n\nexport default {\n ...ResolveResponse,\n ...CookieUtils,\n ...AppServices,\n};\n","import { PURGE } from \"redux-persist\";\nimport { ActionTypes } from \"@/Constants\";\nimport Utils from \"@/Utils\";\nimport _ from \"lodash\";\n\nconst DEFAULT_META = {\n currentPage: 1,\n itemCount: 0,\n itemsPerPage: 10,\n totalItems: 0,\n totalPages: 1,\n};\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n keyword: \"\",\n status: \"\",\n startDate: _.first(Utils.getDaysOfWeek(new Date(), \"YYYY-MM-DD\")),\n endDate: _.last(Utils.getDaysOfWeek(new Date(), \"YYYY-MM-DD\")),\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isCreateTimekeepingSuccess: false,\n isUpdateTimekeepingSuccess: false,\n isCreaetTimekeepingFail: false,\n meta: DEFAULT_META,\n pagination: DEFAULT_PAGINATION,\n timekeepingList: [],\n checkInList: [],\n message: \"\",\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_REDUCER_TIMEKEEPING:\n return {\n ...initialState,\n };\n case ActionTypes.SET_TIMEKEEPING_ACTION_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isActionLoading: true,\n };\n case ActionTypes.SET_TIMEKEEPING_FETCH_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: true,\n };\n case ActionTypes.SET_TIMEKEEPING_GET_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isGetLoading: true,\n };\n case ActionTypes.SET_META_TIMEKEEPING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_TIMEKEEPING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n pagination: payload,\n };\n\n case ActionTypes.CREATE_TIMEKEEPING_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateTimekeepingSuccess: true,\n isCreaetTimekeepingFail: false,\n };\n case ActionTypes.CREATE_TIMEKEEPING_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateTimekeepingSuccess: false,\n isCreaetTimekeepingFail: true,\n message: payload,\n };\n\n case ActionTypes.CREATE_TIMEKEEPING_ADMIN_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateTimekeepingSuccess: true,\n };\n case ActionTypes.CREATE_TIMEKEEPING_ADMIN_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateTimekeepingSuccess: false,\n };\n\n case ActionTypes.FETCH_TIMEKEEPING_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateTimekeepingSuccess: false,\n isUpdateTimekeepingSuccess: false,\n timekeepingList: payload,\n };\n case ActionTypes.FETCH_TIMEKEEPING_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateTimekeepingSuccess: false,\n isUpdateTimekeepingSuccess: false,\n timekeepingList: [],\n };\n\n case ActionTypes.GET_BY_ID_TIMEKEEPING_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n };\n case ActionTypes.GET_BY_ID_TIMEKEEPING_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n };\n\n case ActionTypes.UPDATE_TIMEKEEPING_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateTimekeepingSuccess: true,\n };\n case ActionTypes.UPDATE_TIMEKEEPING_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateTimekeepingSuccess: false,\n };\n\n case ActionTypes.CREATE_CHECK_OUT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateTimekeepingSuccess: true,\n };\n case ActionTypes.CREATE_CHECK_OUT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateTimekeepingSuccess: false,\n };\n\n case ActionTypes.UPDATE_CHECK_OUT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateTimekeepingSuccess: true,\n };\n case ActionTypes.UPDATE_CHECK_OUT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateTimekeepingSuccess: false,\n };\n\n //case ActionTypes.FETCH_CHECK_IN_SUCCESS:\n // return {\n // ...state,\n // requestHasError: false,\n // requestIsSuccess: true,\n // requestIsLoading: false,\n // isFetchLoading: false,\n // isCreateTimekeepingSuccess: false,\n // isUpdateTimekeepingSuccess: false,\n // isCreaetTimekeepingFail: false,\n // checkInList: payload,\n // };\n //case ActionTypes.FETCH_CHECK_IN_FAILURE:\n // return {\n // ...state,\n // requestHasError: true,\n // requestIsSuccess: false,\n // requestIsLoading: false,\n // isFetchLoading: false,\n // isCreateTimekeepingSuccess: false,\n // isUpdateTimekeepingSuccess: false,\n // checkInList: [],\n // };\n\n case ActionTypes.RESET_MESSAGE_TIMEKEEPING:\n return {\n ...state,\n message: \"\",\n isCreaetTimekeepingFail: false,\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\r\nimport {\r\n ActionTypes,\r\n DEFAULT_LOADING_STATES,\r\n generateSuccessStateVariables,\r\n} from \"@/Constants\";\r\nimport dayjs from \"dayjs\";\r\n\r\nconst DEFAULT_PAGINATION = {\r\n startDate: dayjs(dayjs().startOf(\"month\")).format(\"YYYY-MM-DD\"),\r\n endDate: dayjs(dayjs().endOf(\"month\")).format(\"YYYY-MM-DD\"),\r\n};\r\n\r\nconst initialState = {\r\n ...DEFAULT_LOADING_STATES,\r\n ...generateSuccessStateVariables([\"Create\", \"Update\"]),\r\n payload: [],\r\n details: {},\r\n pagination: DEFAULT_PAGINATION,\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.SET_TIMESHEET_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n };\r\n case ActionTypes.SET_TIMESHEET_GET_LOADING:\r\n return {\r\n ...state,\r\n isGetLoading: true,\r\n };\r\n case ActionTypes.SET_TIMESHEET_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isActionLoading: true,\r\n isCreateSuccess: false,\r\n isUpdateSuccess: false,\r\n };\r\n case ActionTypes.SET_TIMESHEET_PAGINATION:\r\n return {\r\n ...state,\r\n pagination: payload,\r\n };\r\n case ActionTypes.SET_TIMESHEET_META:\r\n return {\r\n ...state,\r\n meta: payload,\r\n };\r\n case ActionTypes.RESET_TIMESHEET_STATUS:\r\n return {\r\n ...state,\r\n isCreateSuccess: false,\r\n isUpdateSuccess: false,\r\n isFetchLoading: false,\r\n isGetLoading: false,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.RESET_TIMESHEET_REDUCER:\r\n return initialState;\r\n\r\n case ActionTypes.FETCH_TIMESHEET_SUCCESS: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n payload,\r\n };\r\n }\r\n case ActionTypes.FETCH_TIMESHEET_FAILURE: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n }\r\n case ActionTypes.GET_TIMESHEET_BY_ID_SUCCESS: {\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n details: payload,\r\n };\r\n }\r\n case ActionTypes.GET_TIMESHEET_BY_ID_FAILURE: {\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n };\r\n }\r\n case ActionTypes.CREATE_TIMESHEET_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isCreateSuccess: true,\r\n };\r\n }\r\n case ActionTypes.CREATE_TIMESHEET_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isCreateSuccess: false,\r\n };\r\n }\r\n case ActionTypes.UPDATE_TIMESHEET_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isUpdateSuccess: true,\r\n };\r\n }\r\n case ActionTypes.UPDATE_TIMESHEET_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isUpdateSuccess: false,\r\n };\r\n }\r\n case ActionTypes.DELETE_TIMESHEET_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isUpdateSuccess: true,\r\n };\r\n }\r\n case ActionTypes.DELETE_TIMESHEET_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isUpdateSuccess: false,\r\n };\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PURGE } from \"redux-persist\";\r\nimport {\r\n ActionTypes,\r\n DEFAULT_LOADING_STATES,\r\n DEFAULT_META_STATES,\r\n generateSuccessStateVariables,\r\n} from \"@/Constants\";\r\n\r\nconst initialState = {\r\n ...DEFAULT_LOADING_STATES,\r\n isDeleteSuccess: false,\r\n typeChat: \"private\",\r\n isFetchMessageInChannelLoading: false,\r\n payload: [],\r\n listMessages: [],\r\n potentialChats: [],\r\n groupChat: [],\r\n personalChat: [],\r\n performAction: {},\r\n newChatData: {},\r\n messageChanelPagination: {},\r\n messageChanelMeta: {},\r\n messageDetailsPagination: {\r\n page: 1,\r\n limit: 10,\r\n },\r\n messageDetailsMeta: DEFAULT_META_STATES,\r\n attachmentInChannel: [],\r\n notifications: [],\r\n userNotConversation: [],\r\n userList: [],\r\n conversationChannelDetail: {},\r\n ...generateSuccessStateVariables([\r\n \"CreateMessage\",\r\n \"AddMemberToGroup\",\r\n \"RemoveMemberToGroup\",\r\n ]),\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: any }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.SET_CHAT_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n };\r\n case ActionTypes.SET_CHAT_FETCH_CHANNEL_LOADING:\r\n return {\r\n ...state,\r\n isFetchChannelLoading: true,\r\n };\r\n case ActionTypes.SET_CHAT_GET_LOADING:\r\n return {\r\n ...state,\r\n isGetLoading: true,\r\n };\r\n case ActionTypes.SET_CHAT_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isActionLoading: true,\r\n isCreateMessageSuccess: false,\r\n };\r\n case ActionTypes.SET_LIST_MESSAGES:\r\n return {\r\n ...state,\r\n listMessages: payload,\r\n };\r\n case ActionTypes.SET_NEW_PERFORM_ACTION: {\r\n return {\r\n ...state,\r\n performAction: payload,\r\n };\r\n }\r\n case ActionTypes.SET_NOTIFICATION: {\r\n return {\r\n ...state,\r\n notifications: payload,\r\n };\r\n }\r\n case ActionTypes.SET_TYPE_CHAT: {\r\n return {\r\n ...state,\r\n typeChat: payload,\r\n };\r\n }\r\n case ActionTypes.CHAT_PERFORM_ACTION:\r\n return {\r\n ...state,\r\n performAction: payload,\r\n listMessages: [],\r\n messageDetailsPagination: {\r\n page: 1,\r\n limit: 10,\r\n },\r\n isActionLoading: false,\r\n isFetchLoading: false,\r\n isGetLoading: false,\r\n };\r\n case ActionTypes.RESET_CHAT_PERFORM_ACTION:\r\n return {\r\n ...state,\r\n listMessages: [],\r\n performAction: {},\r\n newChatData: {},\r\n messageChanelPagination: {},\r\n messageChanelMeta: {},\r\n messageDetailsPagination: {\r\n page: 1,\r\n limit: 10,\r\n },\r\n messageDetailsMeta: {\r\n currentPage: 1,\r\n itemCount: 0,\r\n itemsPerPage: 10,\r\n totalItems: 0,\r\n totalPages: 1,\r\n },\r\n attachmentInChannel: [],\r\n conversationChannelDetail: {},\r\n isFetchLoading: false,\r\n isGetLoading: false,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.RESET_CHAT_STATUS:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n isGetLoading: false,\r\n isActionLoading: false,\r\n isCreateSuccess: false,\r\n isCreateMessageSuccess: false,\r\n isAddMemberToGroupSuccess: false,\r\n isRemoveemberToGroupSuccess: false,\r\n isFetchMessageInChannelLoading: false,\r\n };\r\n case ActionTypes.RESET_CONVERSATION_CHANNEL_DETAIL: {\r\n return {\r\n ...state,\r\n conversationChannelDetail: {},\r\n isActionLoading: false,\r\n isFetchLoading: false,\r\n isGetLoading: false,\r\n };\r\n }\r\n case ActionTypes.RESET_MEDIA_IN_CHANNEL:\r\n return {\r\n ...state,\r\n attachmentInChannel: [],\r\n isActionLoading: false,\r\n isFetchLoading: false,\r\n isGetLoading: false,\r\n };\r\n case ActionTypes.CREATE_NEW_CHAT:\r\n return {\r\n ...state,\r\n newChatData: payload,\r\n };\r\n case ActionTypes.RESET_NEW_CHAT_DATA:\r\n return {\r\n ...state,\r\n newChatData: {},\r\n };\r\n case ActionTypes.RESET_CHAT_REDUCER:\r\n return initialState;\r\n\r\n case ActionTypes.SET_POTENTIAL_CHATS:\r\n return {\r\n ...state,\r\n potentialChats: payload,\r\n };\r\n case ActionTypes.SET_MESSAGE_CHANNEL_PAGINATION:\r\n return {\r\n ...state,\r\n messageChanelPagination: payload,\r\n };\r\n case ActionTypes.SET_MESSAGE_CHANNEL_META:\r\n return {\r\n ...state,\r\n messageChanelMeta: payload,\r\n };\r\n case ActionTypes.SET_MESSAGE_DETAILS_PAGINATION:\r\n return {\r\n ...state,\r\n messageDetailsPagination: payload,\r\n };\r\n case ActionTypes.SET_MESSAGE_DETAILS_META:\r\n return {\r\n ...state,\r\n messageDetailsMeta: payload,\r\n };\r\n\r\n case ActionTypes.FETCH_MESSAGE_CHANNEL_SUCCESS:\r\n return {\r\n ...state,\r\n groupChat: payload?.group,\r\n personalChat: payload?.private,\r\n potentialChats: [...payload?.group, ...payload?.private],\r\n isFetchChannelLoading: false,\r\n isActionLoading: false,\r\n isGetLoading: false,\r\n isCreateNewMessageSuccess: false,\r\n };\r\n case ActionTypes.FETCH_MESSAGE_CHANNEL_FAILURE:\r\n return {\r\n ...state,\r\n isFetchChannelLoading: false,\r\n isActionLoading: false,\r\n isGetLoading: false,\r\n isCreateNewMessageSuccess: false,\r\n groupChat: [],\r\n personalChat: [],\r\n potentialChats: [],\r\n };\r\n case ActionTypes.FETCH_MESSAGE_NOTIFICATION_SUCCESS:\r\n return {\r\n ...state,\r\n notifications: payload,\r\n isFetchLoading: false,\r\n };\r\n case ActionTypes.FETCH_MESSAGE_NOTIFICATION_FAILURE:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n case ActionTypes.FETCH_MESSAGE_BY_CHANNEL_ID_SUCCESS:\r\n return {\r\n ...state,\r\n listMessages: payload,\r\n isGetLoading: false,\r\n isCreateSuccess: false,\r\n isAddMemberToGroupSuccess: false,\r\n isRemoveemberToGroupSuccess: false,\r\n };\r\n case ActionTypes.FETCH_MESSAGE_BY_CHANNEL_ID_FAILURE:\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n isActionLoading: false,\r\n isCreateSuccess: false,\r\n isAddMemberToGroupSuccess: false,\r\n isRemoveMemberToGroupSuccess: false,\r\n };\r\n case ActionTypes.FETCH_ALL_USER_FOR_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n userList: payload,\r\n isFetchLoading: false,\r\n };\r\n case ActionTypes.FETCH_ALL_USER_FOR_CHAT_FAILURE:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n case ActionTypes.FETCH_CONVERSATION_CHANNEL_DETAIL_SUCCESS:\r\n return {\r\n ...state,\r\n conversationChannelDetail: payload,\r\n isFetchLoading: false,\r\n isCreateMessageSuccess: false,\r\n };\r\n case ActionTypes.FETCH_CONVERSATION_CHANNEL_DETAIL_FAILURE:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n conversationChannelDetail: {},\r\n isCreateMessageSuccess: false,\r\n };\r\n case ActionTypes.FETCH_USER_NOT_CONVERSATION_SUCCESS:\r\n return {\r\n ...state,\r\n userNotConversation: payload,\r\n isFetchLoading: false,\r\n };\r\n case ActionTypes.FETCH_USER_NOT_CONVERSATION_FAILURE:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n case ActionTypes.CREATE_PRIVATE_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n isCreateSuccess: true,\r\n isActionLoading: false,\r\n newChatData: {},\r\n };\r\n case ActionTypes.CREATE_PRIVATE_CHAT_FAILURE:\r\n return {\r\n ...state,\r\n isCreateSuccess: false,\r\n isActionLoading: false,\r\n newChatData: {},\r\n };\r\n case ActionTypes.CREATE_GROUP_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n isCreateSuccess: true,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.CREATE_GROUP_CHAT_FAILURE:\r\n return {\r\n ...state,\r\n isCreateSuccess: false,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.RECALLED_MESSAGE_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.RECALLED_MESSAGE_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.CREATE_MESSAGE_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n isCreateMessageSuccess: true,\r\n isActionLoading: false,\r\n isGetLoading: false,\r\n };\r\n case ActionTypes.CREATE_MESSAGE_CHAT_FAILURE:\r\n return {\r\n ...state,\r\n isCreateMessageSuccess: false,\r\n isActionLoading: false,\r\n isGetLoading: false,\r\n };\r\n case ActionTypes.DELETE_PRIVATE_MESSAGE_SUCCESS:\r\n return {\r\n ...state,\r\n isDeleteSuccess: true,\r\n isActionLoading: false,\r\n conversationChannelDetail: {},\r\n performAction: {},\r\n };\r\n case ActionTypes.DELETE_PRIVATE_MESSAGE_FAILURE:\r\n return {\r\n ...state,\r\n isDeleteSuccess: false,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.FETCH_MEDIA_BY_CHANNEL_ID_SUCCESS:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n isActionLoading: false,\r\n isGetLoading: false,\r\n attachmentInChannel: payload,\r\n };\r\n case ActionTypes.FETCH_MEDIA_BY_CHANNEL_ID_FAILURE:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n isActionLoading: false,\r\n isGetLoading: false,\r\n attachmentInChannel: [],\r\n };\r\n\r\n case ActionTypes.ADD_MEMBER_TO_GROUP_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isAddMemberToGroupSuccess: true,\r\n };\r\n case ActionTypes.ADD_MEMBER_TO_GROUP_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isAddMemberToGroupSuccess: false,\r\n };\r\n case ActionTypes.REMOVE_MEMBER_TO_GROUP_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isRemoveMemberToGroupSuccess: true,\r\n };\r\n case ActionTypes.REMOVE_MEMBER_TO_GROUP_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isRemoveMemberToGroupSuccess: false,\r\n };\r\n case ActionTypes.LEAVE_GROUP_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.LEAVE_GROUP_CHAT_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.READ_CONVERSATION_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.READ_CONVERSATION_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.REMOVE_ALL_FILE_IN_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.REMOVE_ALL_FILE_IN_CHAT_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PURGE } from \"redux-persist\";\nimport { ActionTypes } from \"@/Constants\";\n\nconst DEFAULT_META = {\n currentPage: 1,\n itemCount: 0,\n itemsPerPage: 10,\n totalItems: 0,\n totalPages: 1,\n};\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n isCreateSuccess: false,\n isChangeStatusSuccess: false,\n isChangeIpRemoteSuccess: false,\n meta: DEFAULT_META,\n pagination: DEFAULT_PAGINATION,\n internalList: [],\n internalDetail: {},\n internalRemote: {},\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_INTERNAL_IP:\n return {\n ...initialState,\n };\n case ActionTypes.RESET_STATUS_INTERNAL_IP:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n isCreateSuccess: false,\n isChangeStatusSuccess: false,\n };\n case ActionTypes.SET_INTERNAL_IP_ACTION_LOADING:\n return {\n ...state,\n isActionLoading: true,\n };\n case ActionTypes.SET_INTERNAL_IP_FETCH_LOADING:\n return {\n ...state,\n isFetchLoading: true,\n };\n case ActionTypes.SET_META_INTERNAL_IP:\n return {\n ...state,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_INTERNAL_IP:\n return {\n ...state,\n pagination: payload,\n };\n\n case ActionTypes.CREATE_INTERNAL_IP_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: true,\n };\n case ActionTypes.CREATE_INTERNAL_IP_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: false,\n };\n\n case ActionTypes.FETCH_INTERNAL_IP_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n internalList: payload,\n };\n\n case ActionTypes.FETCH_INTERNAL_IP_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n internalList: [],\n };\n\n case ActionTypes.GET_BY_ID_INTERNAL_IP_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n internalDetail: payload,\n };\n case ActionTypes.GET_BY_ID_INTERNAL_IP_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n internalDetail: {},\n };\n\n case ActionTypes.UPDATE_INTERNAL_IP_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdataSuccess: true,\n };\n case ActionTypes.UPDATE_INTERNAL_IP_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n };\n\n case ActionTypes.CHANGE_STATUS_INTERNAL_IP_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: true,\n };\n case ActionTypes.CHANGE_STATUS_INTERNAL_IP_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: false,\n };\n\n case ActionTypes.CHANGE_INTERNAL_IP_REMOTE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeIpRemoteSuccess: true,\n };\n case ActionTypes.CHANGE_INTERNAL_IP_REMOTE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeIpRemoteSuccess: false,\n };\n\n case ActionTypes.FETCH_INTERNAL_REMOTE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeIpRemoteSuccess: false,\n internalRemote: payload,\n };\n\n case ActionTypes.FETCH_INTERNAL_REMOTE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeIpRemoteSuccess: false,\n internalRemote: {},\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\nimport {\n ActionTypes,\n DEFAULT_LOADING_STATES,\n DEFAULT_META_STATES,\n generateSuccessStateVariables,\n} from \"@/Constants\";\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n year: new Date().getFullYear(),\n status: \"active\",\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n ...DEFAULT_LOADING_STATES,\n ...generateSuccessStateVariables([\"Create\", \"Update\", \"ChangeStatus\"]),\n meta: DEFAULT_META_STATES,\n pagination: DEFAULT_PAGINATION,\n holidaysList: [],\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_HOLIDAY:\n return {\n ...initialState,\n };\n case ActionTypes.SET_HOLIDAY_ACTION_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isActionLoading: true,\n };\n case ActionTypes.SET_HOLIDAY_FETCH_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: true,\n };\n case ActionTypes.SET_HOLIDAY_GET_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isGetLoading: true,\n };\n case ActionTypes.SET_META_HOLIDAY:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_HOLIDAY:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n pagination: payload,\n };\n\n case ActionTypes.CREATE_HOLIDAY_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: true,\n };\n case ActionTypes.CREATE_HOLIDAY_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: false,\n };\n\n case ActionTypes.FETCH_HOLIDAY_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n holidaysList: payload,\n };\n case ActionTypes.FETCH_HOLIDAY_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isCreateSuccess: false,\n isUpdateSuccess: false,\n };\n\n case ActionTypes.GET_BY_ID_HOLIDAY_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n };\n case ActionTypes.GET_BY_ID_HOLIDAY_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n };\n\n case ActionTypes.UPDATE_HOLIDAY_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.UPDATE_HOLIDAY_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n\n case ActionTypes.CHANGE_STATUS_HOLIDAY_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: true,\n };\n case ActionTypes.CHANGE_STATUS_HOLIDAY_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: false,\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\r\nimport {\r\n ActionTypes,\r\n DEFAULT_LOADING_STATES,\r\n generateSuccessStateVariables,\r\n} from \"@/Constants\";\r\n\r\nconst initialState = {\r\n ...DEFAULT_LOADING_STATES,\r\n isCreateSuccess: false,\r\n isUpdateSuccess: false,\r\n ...generateSuccessStateVariables([\"Create\", \"Update\"]),\r\n payload: [],\r\n details: {},\r\n pagination: {},\r\n meta: {},\r\n performAction: {},\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.SET_PERFORMANCE_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n };\r\n case ActionTypes.SET_PERFORMANCE_GET_LOADING:\r\n return {\r\n ...state,\r\n isGetLoading: true,\r\n };\r\n case ActionTypes.SET_PERFORMANCE_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isActionLoading: true,\r\n };\r\n case ActionTypes.SET_PERFORMANCE_PAGINATION:\r\n return {\r\n ...state,\r\n pagination: payload,\r\n };\r\n case ActionTypes.SET_PERFORMANCE_META:\r\n return {\r\n ...state,\r\n meta: payload,\r\n };\r\n case ActionTypes.PERFORMANCE_PERFORM_ACTION:\r\n return {\r\n ...state,\r\n performAction: payload,\r\n };\r\n case ActionTypes.RESET_PERFORMANCE_PERFORM_ACTION:\r\n return {\r\n ...state,\r\n performAction: {},\r\n details: {},\r\n isCreateSuccess: false,\r\n };\r\n case ActionTypes.RESET_PERFORMANCE_REDUCER:\r\n return initialState;\r\n\r\n case ActionTypes.FETCH_PERFORMANCES_SUCCESS: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n payload,\r\n };\r\n }\r\n case ActionTypes.FETCH_PERFORMANCES_FAILURE: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n }\r\n case ActionTypes.GET_PERFORMANCE_BY_ID_SUCCESS: {\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n details: payload,\r\n };\r\n }\r\n case ActionTypes.GET_PERFORMANCE_BY_ID_FAILURE: {\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n };\r\n }\r\n case ActionTypes.CREATE_PERFORMANCE_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isCreateSuccess: true,\r\n };\r\n }\r\n case ActionTypes.CREATE_PERFORMANCE_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isCreateSuccess: false,\r\n };\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PURGE } from \"redux-persist\";\r\nimport { ActionTypes } from \"@/Constants\";\r\n\r\nconst DEFAULT_PAGINATION = {\r\n page: 1,\r\n limit: 20,\r\n};\r\n\r\nconst initialState = {\r\n isFetchLoading: false,\r\n isGetLoading: false,\r\n isActionLoading: false,\r\n isFetchOutsideLoading: false,\r\n payload: [],\r\n count: {},\r\n details: {},\r\n pagination: DEFAULT_PAGINATION,\r\n meta: {},\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.SET_NOTIFICATION_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n isGetLoading: false,\r\n isActionLoading: false,\r\n isFetchOutsideLoading: false,\r\n };\r\n case ActionTypes.SET_NOTIFICATION_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n isFetchOutsideLoading: false,\r\n isGetLoading: false,\r\n isActionLoading: false,\r\n };\r\n case ActionTypes.SET_NOTIFICATION_GET_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n isGetLoading: true,\r\n isActionLoading: false,\r\n isFetchOutsideLoading: false,\r\n };\r\n case ActionTypes.SET_NOTIFICATION_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n isGetLoading: false,\r\n isActionLoading: true,\r\n isFetchOutsideLoading: false,\r\n };\r\n\r\n case ActionTypes.SET_PAGINATION_NOTIFICATION:\r\n return {\r\n ...state,\r\n pagination: payload,\r\n };\r\n case ActionTypes.SET_META_NOTIFICATION:\r\n return {\r\n ...state,\r\n meta: payload,\r\n };\r\n case ActionTypes.RESET_NOTIFICATIONS_REDUCER:\r\n return initialState;\r\n\r\n case ActionTypes.FETCH_NOTIFICATION_SUCCESS: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n payload,\r\n };\r\n }\r\n case ActionTypes.FETCH_NOTIFICATION_FAILURE: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n }\r\n case ActionTypes.FETCH_OUTSIDE_NOTIFICATION_SUCCESS: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n count: payload,\r\n };\r\n }\r\n case ActionTypes.FETCH_OUTSIDE_NOTIFICATION_FAILURE: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n }\r\n case ActionTypes.GET_NOTIFICATION_BY_ID_SUCCESS: {\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n details: payload,\r\n };\r\n }\r\n case ActionTypes.GET_NOTIFICATION_BY_ID_FAILURE: {\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n };\r\n }\r\n case ActionTypes.MARK_AS_READ_NOTIFICATION_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n case ActionTypes.MARK_AS_READ_NOTIFICATION_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n case ActionTypes.MARK_ALL_AS_READ_NOTIFICATION_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n count: {},\r\n };\r\n }\r\n case ActionTypes.MARK_ALL_AS_READ_NOTIFICATION_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n\r\n case ActionTypes.MARK_ALL_AS_READ_OUTSIDE_NOTIFICATION_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n case ActionTypes.MARK_ALL_AS_READ_OUTSIDE_NOTIFICATION_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PURGE } from \"redux-persist\";\r\nimport { ActionTypes } from \"@/Constants\";\r\n\r\nconst initialState = {\r\n userConnectSocket: [],\r\n isSidebarExpanded: true,\r\n currentDateInScroller: \"\",\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.USER_CONNECT_SOCKET:\r\n return {\r\n ...state,\r\n userConnectSocket: payload,\r\n };\r\n case ActionTypes.SET_SIDEBAR_EXPANDED:\r\n return {\r\n ...state,\r\n isSidebarExpanded: payload,\r\n };\r\n case ActionTypes.SAVE_CURRENT_DATE_IN_SCROLLER: {\r\n return {\r\n ...state,\r\n currentDateInScroller: payload,\r\n };\r\n }\r\n\r\n case ActionTypes.RESET_SOCKET_REDUCER:\r\n return initialState;\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PURGE } from \"redux-persist\";\r\nimport { ActionTypes, DEFAULT_LOADING_STATES } from \"@/Constants\";\r\n\r\nconst initialState = {\r\n ...DEFAULT_LOADING_STATES,\r\n payload: [],\r\n details: {},\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.SET_TASK_NOTE_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n };\r\n case ActionTypes.SET_TASK_NOTE_GET_LOADING:\r\n return {\r\n ...state,\r\n isGetLoading: true,\r\n };\r\n case ActionTypes.SET_TASK_NOTE_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isActionLoading: true,\r\n };\r\n case ActionTypes.RESET_TASK_NOTE_DETAILS:\r\n return {\r\n ...state,\r\n details: {},\r\n };\r\n case ActionTypes.RESET_TASK_NOTE_REDUCER:\r\n return initialState;\r\n\r\n case ActionTypes.FETCH_TASK_NOTE_SUCCESS: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n payload,\r\n };\r\n }\r\n case ActionTypes.FETCH_TASK_NOTE_FAILURE: {\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n }\r\n case ActionTypes.CREATE_TASK_NOTE_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n case ActionTypes.CREATE_TASK_NOTE_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n case ActionTypes.GET_TASK_NOTE_BY_ID_SUCCESS: {\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n details: payload,\r\n };\r\n }\r\n case ActionTypes.GET_TASK_NOTE_BY_ID_FAILURE: {\r\n return {\r\n ...state,\r\n isGetLoading: false,\r\n };\r\n }\r\n case ActionTypes.UPDATE_TASK_NOTE_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n case ActionTypes.UPDATE_TASK_NOTE_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n case ActionTypes.DELETE_TASK_NOTE_SUCCESS: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n case ActionTypes.DELETE_TASK_NOTE_FAILURE: {\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n };\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { ActionTypes } from \"@/Constants\";\nimport { PURGE } from \"redux-persist\";\n\nconst DEFAULT_META = {\n currentPage: 1,\n itemCount: 0,\n itemsPerPage: 10,\n totalItems: 0,\n totalPages: 1,\n};\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n};\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n isCreateSuccess: false,\n isChangeStatusSuccess: false,\n meta: DEFAULT_META,\n pagination: DEFAULT_PAGINATION,\n clientList: [],\n clientDetail: {},\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_CLIENT_REDUCER:\n return {\n ...initialState,\n };\n case ActionTypes.RESET_STATUS_CLIENT:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n isCreateSuccess: false,\n isChangeStatusSuccess: false,\n };\n case ActionTypes.SET_CLIENT_ACTION_LOADING:\n return {\n ...state,\n isActionLoading: true,\n };\n case ActionTypes.SET_CLIENT_FETCH_LOADING:\n return {\n ...state,\n isFetchLoading: true,\n };\n case ActionTypes.SET_META_CLIENT:\n return {\n ...state,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_CLIENT:\n return {\n ...state,\n pagination: payload,\n };\n\n case ActionTypes.CREATE_CLIENT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: true,\n };\n case ActionTypes.CREATE_CLIENT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: false,\n };\n\n case ActionTypes.FETCH_CLIENT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n isCreateSuccess: false,\n clientList: payload,\n };\n\n case ActionTypes.FETCH_CLIENT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n isCreateSuccess: false,\n clientList: [],\n };\n\n case ActionTypes.GET_BY_ID_CLIENT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n clientDetail: payload,\n };\n case ActionTypes.GET_BY_ID_CLIENT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n internalDetail: {},\n };\n\n case ActionTypes.UPDATE_CLIENT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdataSuccess: true,\n };\n case ActionTypes.UPDATE_CLIENT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n };\n\n case ActionTypes.CHANGE_STATUS_CLIENT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: true,\n };\n case ActionTypes.CHANGE_STATUS_CLIENT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: false,\n };\n\n default:\n return state;\n }\n};\n","import { ActionTypes } from \"@/Constants\";\nimport Utils from \"@/Utils\";\nimport _ from \"lodash\";\n\nconst DEFAULT_META = {\n currentPage: 1,\n itemCount: 0,\n itemsPerPage: 10,\n totalItems: 0,\n totalPages: 1,\n};\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n keyword: \"\",\n status: \"\",\n startDate: _.first(Utils.getDaysOfWeek(new Date(), \"YYYY-MM-DD\")),\n endDate: _.last(Utils.getDaysOfWeek(new Date(), \"YYYY-MM-DD\")),\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isCreateTimekeepingSuccess: false,\n isUpdateTimekeepingSuccess: false,\n isCreaetTimekeepingFail: false,\n meta: DEFAULT_META,\n pagination: DEFAULT_PAGINATION,\n checkInList: [],\n message: \"\",\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case ActionTypes.FETCH_CHECK_IN_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateTimekeepingSuccess: false,\n isUpdateTimekeepingSuccess: false,\n isCreaetTimekeepingFail: false,\n checkInList: payload,\n };\n case ActionTypes.FETCH_CHECK_IN_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isCreateTimekeepingSuccess: false,\n isUpdateTimekeepingSuccess: false,\n checkInList: [],\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\nimport {\n ActionTypes,\n DEFAULT_LOADING_STATES,\n DEFAULT_META_STATES,\n} from \"@/Constants\";\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n year: new Date().getFullYear(),\n status: \"active\",\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n ...DEFAULT_LOADING_STATES,\n meta: DEFAULT_META_STATES,\n pagination: DEFAULT_PAGINATION,\n isUpdateSuccess: false,\n workingTimeList: [],\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_WORKING_TIME:\n return {\n ...initialState,\n };\n case ActionTypes.SET_WORKING_TIME_ACTION_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isActionLoading: true,\n };\n case ActionTypes.SET_WORKING_TIME_FETCH_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: true,\n };\n //case ActionTypes.SET_HOLIDAY_GET_LOADING:\n // return {\n // ...state,\n // requestHasError: false,\n // requestIsSuccess: false,\n // requestIsLoading: true,\n // isGetLoading: true,\n // };\n\n case ActionTypes.FETCH_WORKING_TIME_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isUpdateSuccess: false,\n workingTimeList: payload,\n };\n\n case ActionTypes.FETCH_WORKING_TIME_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isUpdateSuccess: false,\n workingTimeList: [],\n };\n\n case ActionTypes.GET_BY_ID_WORKING_TIME_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n };\n case ActionTypes.GET_BY_ID_WORKING_TIME_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n };\n\n case ActionTypes.UPDATE_WORKING_TIME_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.UPDATE_WORKING_TIME_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\nimport {\n ActionTypes,\n DEFAULT_META_STATES,\n DEFAULT_LOADING_STATES,\n generateSuccessStateVariables,\n} from \"@/Constants\";\n\nconst initialState = {\n DEFAULT_LOADING_STATES,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n meta: DEFAULT_META_STATES,\n ...generateSuccessStateVariables([\"Update\", \"ChangeStatus\"]),\n pagination: {},\n payload: [],\n statistical: {},\n details: {},\n userCanAdd: [],\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.SET_PROJECT_EXTERIOR_FETCH_LOADING:\n return {\n ...state,\n isFetchLoading: true,\n isChangeStatusSuccess: false,\n isUpdateSuccess: false,\n };\n case ActionTypes.SET_PROJECT_EXTERIOR_GET_LOADING:\n return {\n ...state,\n isGetLoading: true,\n isChangeStatusSuccess: false,\n isUpdateSuccess: false,\n };\n case ActionTypes.SET_PROJECT_EXTERIOR_ACTION_LOADING:\n return {\n ...state,\n isActionLoading: true,\n isChangeStatusSuccess: false,\n isUpdateSuccess: false,\n };\n case ActionTypes.SET_PROJECT_EXTERIOR_META:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n meta: payload,\n };\n case ActionTypes.SET_PROJECT_EXTERIOR_PAGINATION:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n pagination: payload,\n };\n case ActionTypes.RESET_PROJECT_EXTERIOR_STATUS: {\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n };\n }\n\n case ActionTypes.RESET_PROJECT_EXTERIOR_REDUCER:\n return { ...initialState };\n\n case ActionTypes.FETCH_PROJECT_EXTERIORS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n payload: payload,\n };\n case ActionTypes.FETCH_PROJECT_EXTERIORS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n payload: [],\n };\n case ActionTypes.GET_PROJECT_EXTERIOR_BY_ID_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n details: payload,\n };\n case ActionTypes.GET_PROJECT_EXTERIOR_BY_ID_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n };\n\n case ActionTypes.CREATE_PROJECT_EXTERIOR_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n };\n case ActionTypes.CREATE_PROJECT_EXTERIOR_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n };\n\n case ActionTypes.UPDATE_PROJECT_EXTERIOR_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.UPDATE_PROJECT_EXTERIOR_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n\n case ActionTypes.DELETE_PROJECT_EXTERIOR_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n };\n case ActionTypes.DELETE_PROJECT_EXTERIOR_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n };\n\n case ActionTypes.CHANGE_PROJECT_EXTERIOR_STATUS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: true,\n };\n case ActionTypes.CHANGE_PROJECT_EXTERIOR_STATUS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: false,\n };\n\n case ActionTypes.FETCH_USER_CAN_ADD_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n userCanAdd: payload,\n };\n case ActionTypes.FETCH_USER_CAN_ADD_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n userCanAdd: [],\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\nimport { ActionTypes } from \"@/Constants\";\n\nconst DEFAULT_META = {\n currentPage: 1,\n itemCount: 0,\n itemsPerPage: 10,\n totalItems: 0,\n totalPages: 1,\n};\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n isCreateSuccess: false,\n isChangeStatusSuccess: false,\n isGetDatabaseLoading: false,\n isDeleteSuccess: false,\n meta: DEFAULT_META,\n pagination: DEFAULT_PAGINATION,\n backupStatus: {},\n backupDatabase: [],\n allMemoryConversation: 0,\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_BACKUP:\n return {\n ...initialState,\n };\n case ActionTypes.SET_BACKUP_ACTION_LOADING:\n return {\n ...state,\n isActionLoading: true,\n };\n case ActionTypes.SET_BACKUP_FETCH_LOADING:\n return {\n ...state,\n isFetchLoading: true,\n };\n case ActionTypes.SET_META_BACKUP:\n return {\n ...state,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_BACKUP:\n return {\n ...state,\n pagination: payload,\n };\n\n case ActionTypes.FETCH_BACKUP_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n restoreDatabaseSuccess: false,\n isDeleteSuccess: false,\n isActionLoading: false,\n backupStatus: payload,\n };\n\n case ActionTypes.FETCH_BACKUP_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n restoreDatabaseSuccess: false,\n isDeleteSuccess: false,\n isActionLoading: false,\n backupStatus: {},\n };\n\n case ActionTypes.FETCH_BACKUP_DATABASE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n restoreDatabaseSuccess: false,\n backupDatabase: payload,\n isActionLoading: false,\n isDeleteSuccess: false,\n };\n\n case ActionTypes.FETCH_BACKUP_DATABASE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n restoreDatabaseSuccess: false,\n isDeleteSuccess: false,\n isActionLoading: false,\n backupDatabase: [],\n };\n\n case ActionTypes.CHANGE_STATUS_BACKUP_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: true,\n restoreDatabaseSuccess: false,\n isDeleteSuccess: false,\n };\n case ActionTypes.CHANGE_STATUS_BACKUP_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: false,\n restoreDatabaseSuccess: false,\n isDeleteSuccess: false,\n };\n\n case ActionTypes.GET_BACKUP_DATABASE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetDatabaseLoading: true,\n isChangeStatusSuccess: false,\n restoreDatabaseSuccess: false,\n isDeleteSuccess: false,\n isActionLoading: false,\n };\n case ActionTypes.GET_BACKUP_DATABASE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isGetDatabaseLoading: false,\n restoreDatabaseSuccess: false,\n isDeleteSuccess: false,\n isActionLoading: false,\n };\n\n case ActionTypes.RESTORE_DATABASE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetDatabaseLoading: true,\n restoreDatabaseSuccess: true,\n isChangeStatusSuccess: false,\n isDeleteSuccess: false,\n isActionLoading: false,\n };\n case ActionTypes.RESTORE_DATABASE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isGetDatabaseLoading: false,\n restoreDatabaseSuccess: false,\n isDeleteSuccess: false,\n isActionLoading: false,\n };\n\n case ActionTypes.DELETE_BACKUP_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isDeleteSuccess: true,\n };\n case ActionTypes.DELETE_BACKUP_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isDeleteSuccess: false,\n };\n\n case ActionTypes.GET_ALL_MEMORY_CONVERSATION_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n allMemoryConversation: payload,\n };\n case ActionTypes.GET_ALL_MEMORY_CONVERSATION_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n };\n\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\r\n\r\nimport { ActionTypes, DEFAULT_LOADING_STATES } from \"@/Constants\";\r\n\r\nconst initialState = {\r\n ...DEFAULT_LOADING_STATES,\r\n payload: [],\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.SET_TIME_DELETE_FILE_PRIVATE_CHAT_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n isUpdateSuccess: false,\r\n isCreateSuccess: false,\r\n };\r\n case ActionTypes.SET_TIME_DELETE_FILE_PRIVATE_CHAT_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isActionLoading: true,\r\n isUpdateSuccess: false,\r\n isCreateSuccess: false,\r\n };\r\n case ActionTypes.FETCH_TIME_DELETE_FILE_PRIVATE_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n payload,\r\n };\r\n case ActionTypes.FETCH_TIME_DELETE_FILE_PRIVATE_CHAT_FAILURE:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n };\r\n case ActionTypes.CREATE_TIME_DELETE_FILE_PRIVATE_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isCreateSuccess: true,\r\n };\r\n case ActionTypes.CREATE_TIME_DELETE_FILE_PRIVATE_CHAT_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isCreateSuccess: false,\r\n };\r\n case ActionTypes.UPDATE_TIME_DELETE_FILE_PRIVATE_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isUpdateSuccess: true,\r\n };\r\n case ActionTypes.UPDATE_TIME_DELETE_FILE_PRIVATE_CHAT_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isUpdateSuccess: false,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { ActionTypes } from \"@/Constants\";\r\nimport { PURGE } from \"redux-persist\";\r\n\r\nconst initialState = {\r\n isFetchLoading: false,\r\n isActionLoading: false,\r\n isUpdateSuccess: false,\r\n isCreateSuccess: false,\r\n payload: [],\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.RESET_MAIL_RECEIVE_REDUCER:\r\n return {\r\n ...initialState,\r\n };\r\n case ActionTypes.SET_MAIL_RECEIVE_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isActionLoading: true,\r\n isCreateSuccess: false,\r\n isUpdateSuccess: false,\r\n };\r\n case ActionTypes.SET_MAIL_RECEIVE_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n isCreateSuccess: false,\r\n isUpdateSuccess: false,\r\n };\r\n case ActionTypes.CREATE_MAIL_RECEIVE_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isCreateSuccess: true,\r\n };\r\n case ActionTypes.CREATE_MAIL_RECEIVE_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isCreateSuccess: false,\r\n };\r\n\r\n case ActionTypes.FETCH_MAIL_RECEIVE_SUCCESS:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n isUpdateSuccess: false,\r\n isCreateSuccess: false,\r\n payload,\r\n };\r\n\r\n case ActionTypes.FETCH_MAIL_RECEIVE_FAILURE:\r\n return {\r\n ...state,\r\n isFetchLoading: false,\r\n isUpdateSuccess: false,\r\n isCreateSuccess: false,\r\n };\r\n case ActionTypes.UPDATE_MAIL_RECEIVE_SUCCESS:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isUpdateSuccess: true,\r\n };\r\n case ActionTypes.UPDATE_MAIL_RECEIVE_FAILURE:\r\n return {\r\n ...state,\r\n isActionLoading: false,\r\n isUpdateSuccess: false,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PURGE } from \"redux-persist\";\nimport {\n ActionTypes,\n DEFAULT_LOADING_STATES,\n DEFAULT_META_STATES,\n} from \"@/Constants\";\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n year: new Date().getFullYear(),\n status: \"active\",\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n ...DEFAULT_LOADING_STATES,\n meta: DEFAULT_META_STATES,\n pagination: DEFAULT_PAGINATION,\n isUpdateSuccess: false,\n isCreateSuccess: false,\n workspaceGroupList: [],\n workspaceShortList: [],\n workspaceAction: {},\n workspaceShortByid: {},\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_WORKSPACE:\n return {\n ...initialState,\n };\n case ActionTypes.SET_WORKSPACE_ACTION_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isActionLoading: true,\n };\n case ActionTypes.SET_WORKSPACE_FETCH_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isFetchLoading: true,\n };\n case ActionTypes.SET_WORKSPACE_GET_LOADING:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: true,\n isGetLoading: true,\n };\n\n case ActionTypes.FETCH_WORKSPACE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isUpdateSuccess: false,\n isCreateSuccess: false,\n workspaceGroupList: payload,\n };\n\n case ActionTypes.FETCH_WORKSPACE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isUpdateSuccess: false,\n isCreateSuccess: false,\n workspaceGroupList: [],\n };\n\n case ActionTypes.GET_BY_ID_WORKSPACE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n };\n case ActionTypes.GET_BY_ID_WORKSPACE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n };\n\n case ActionTypes.CREATE_WORKSPACE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: true,\n };\n case ActionTypes.CREATE_WORKSPACE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: false,\n };\n\n case ActionTypes.UPDATE_WORKSPACE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.UPDATE_WORKSPACE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n\n case ActionTypes.DELETE_WORKSPACE_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.DELETE_WORKSPACE_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n\n // short\n case ActionTypes.FETCH_WORKSPACE_SHORT_CUT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isUpdateSuccess: false,\n isCreateSuccess: false,\n workspaceShortList: payload,\n };\n\n case ActionTypes.FETCH_WORKSPACE_SHORT_CUT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isUpdateSuccess: false,\n isCreateSuccess: false,\n workspaceShortList: [],\n };\n\n case ActionTypes.GET_BY_ID_WORKSPACE_SHORT_CUT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isGetLoading: false,\n workspaceShortByid: payload,\n };\n case ActionTypes.GET_BY_ID_WORKSPACE_SHORT_CUT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isGetLoading: false,\n workspaceShortByid: [],\n };\n\n case ActionTypes.CREATE_WORKSPACE_SHORT_CUT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: true,\n };\n case ActionTypes.CREATE_WORKSPACE_SHORT_CUT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: false,\n };\n\n case ActionTypes.UPDATE_WORKSPACE_SHORT_CUT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.UPDATE_WORKSPACE_SHORT_CUT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n\n case ActionTypes.DELETE_WORKSPACE_SHORT_CUT_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: true,\n };\n case ActionTypes.DELETE_WORKSPACE_SHORT_CUT_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdateSuccess: false,\n };\n default:\n return state;\n }\n};\n","import { PURGE } from \"redux-persist\";\r\nimport { ActionTypes, DEFAULT_LOADING_STATES } from \"@/Constants\";\r\n\r\nconst initialState = {\r\n requestHasError: false,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n ...DEFAULT_LOADING_STATES,\r\n isCreateSuccess: false,\r\n isUpdateSuccess: false,\r\n payload: {\r\n mondayMorning: false,\r\n mondayAfternoon: false,\r\n tuesdayMorning: false,\r\n tuesdayAfternoon: false,\r\n wednesdayMorning: false,\r\n wednesdayAfternoon: false,\r\n thursdayMorning: false,\r\n thursdayAfternoon: false,\r\n fridayMorning: false,\r\n fridayAfternoon: false,\r\n saturdayMorning: false,\r\n saturdayAfternoon: false,\r\n sundayMorning: false,\r\n sundayAfternoon: false,\r\n },\r\n};\r\n\r\nexport default (\r\n state = initialState,\r\n action: { type: string; payload: string }\r\n) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case PURGE:\r\n return initialState;\r\n case ActionTypes.SET_WORKING_DAY_FETCH_LOADING:\r\n return {\r\n ...state,\r\n isFetchLoading: true,\r\n };\r\n case ActionTypes.SET_WORKING_DAY_GET_LOADING:\r\n return {\r\n ...state,\r\n isGetLoading: true,\r\n };\r\n case ActionTypes.SET_WORKING_DAY_ACTION_LOADING:\r\n return {\r\n ...state,\r\n isActionLoading: true,\r\n };\r\n case ActionTypes.RESET_WORKING_DAY:\r\n return {\r\n ...initialState,\r\n };\r\n\r\n case ActionTypes.FETCH_WORKING_DAY_SUCCESS:\r\n return {\r\n ...state,\r\n requestHasError: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n isFetchLoading: false,\r\n payload,\r\n };\r\n\r\n case ActionTypes.FETCH_WORKING_DAY_FAILURE:\r\n return {\r\n ...state,\r\n requestHasError: true,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n isFetchLoading: false,\r\n isUpdateSuccess: false,\r\n workingTimeList: [],\r\n };\r\n\r\n case ActionTypes.GET_BY_ID_WORKING_DAY_SUCCESS:\r\n return {\r\n ...state,\r\n requestHasError: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n isGetLoading: false,\r\n detail: payload,\r\n };\r\n case ActionTypes.GET_BY_ID_WORKING_DAY_FAILURE:\r\n return {\r\n ...state,\r\n requestHasError: true,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n isGetLoading: false,\r\n };\r\n case ActionTypes.CREATE_WORKING_DAY_SUCCESS:\r\n return {\r\n ...state,\r\n requestHasError: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n isActionLoading: false,\r\n isCreateSuccess: true,\r\n payload,\r\n };\r\n case ActionTypes.CREATE_WORKING_DAY_FAILURE:\r\n return {\r\n ...state,\r\n requestHasError: true,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n isActionLoading: false,\r\n isCreateSuccess: false,\r\n };\r\n case ActionTypes.UPDATE_WORKING_DAY_SUCCESS:\r\n return {\r\n ...state,\r\n requestHasError: false,\r\n requestIsSuccess: true,\r\n requestIsLoading: false,\r\n isActionLoading: false,\r\n isUpdateSuccess: true,\r\n payload,\r\n };\r\n case ActionTypes.UPDATE_WORKING_DAY_FAILURE:\r\n return {\r\n ...state,\r\n requestHasError: true,\r\n requestIsSuccess: false,\r\n requestIsLoading: false,\r\n isActionLoading: false,\r\n isUpdateSuccess: false,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PURGE } from \"redux-persist\";\nimport { ActionTypes } from \"@/Constants\";\n\nconst DEFAULT_META = {\n currentPage: 1,\n itemCount: 0,\n itemsPerPage: 10,\n totalItems: 0,\n totalPages: 1,\n};\n\nconst DEFAULT_PAGINATION = {\n page: 1,\n limit: 10,\n};\n\nconst initialState = {\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n isCreateSuccess: false,\n isChangeStatusSuccess: false,\n meta: DEFAULT_META,\n pagination: DEFAULT_PAGINATION,\n newsList: [],\n newsDetail: {},\n};\n\nexport default (\n state = initialState,\n action: { type: string; payload: string }\n) => {\n const { type, payload } = action;\n switch (type) {\n case PURGE:\n return initialState;\n case ActionTypes.RESET_NEWS:\n return {\n ...initialState,\n };\n case ActionTypes.RESET_STATUS_NEWS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isGetLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n isCreateSuccess: false,\n isChangeStatusSuccess: false,\n };\n case ActionTypes.SET_NEWS_ACTION_LOADING:\n return {\n ...state,\n isActionLoading: true,\n };\n case ActionTypes.SET_NEWS_FETCH_LOADING:\n return {\n ...state,\n isFetchLoading: true,\n };\n case ActionTypes.SET_META_NEWS:\n return {\n ...state,\n meta: payload,\n };\n\n case ActionTypes.SET_PAGINATION_NEWS:\n return {\n ...state,\n pagination: payload,\n };\n\n case ActionTypes.CREATE_NEWS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: true,\n };\n case ActionTypes.CREATE_NEWS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isCreateSuccess: false,\n };\n\n case ActionTypes.FETCH_NEWS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n newsList: payload,\n };\n\n case ActionTypes.FETCH_NEWS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isFetchLoading: false,\n isChangeStatusSuccess: false,\n isUpdataSuccess: false,\n newsList: [],\n };\n\n case ActionTypes.GET_BY_ID_NEWS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n internalDetail: payload,\n };\n case ActionTypes.GET_BY_ID_NEWS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n internalDetail: {},\n };\n\n case ActionTypes.UPDATE_NEWS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdataSuccess: true,\n };\n case ActionTypes.UPDATE_NEWS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isUpdataSuccess: false,\n };\n\n case ActionTypes.CHANGE_STATUS_NEWS_SUCCESS:\n return {\n ...state,\n requestHasError: false,\n requestIsSuccess: true,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: true,\n };\n case ActionTypes.CHANGE_STATUS_NEWS_FAILURE:\n return {\n ...state,\n requestHasError: true,\n requestIsSuccess: false,\n requestIsLoading: false,\n isActionLoading: false,\n isChangeStatusSuccess: false,\n };\n\n default:\n return state;\n }\n};\n","import { combineReducers } from \"redux\";\nimport { connectRouter } from \"connected-react-router\";\nimport { History } from \"history\";\n\nimport AuthenticationReducer from \"./Authentication.reducer\";\nimport RoleReducer from \"./Role.reducer\";\nimport DashboardReducer from \"./Dashboard.reducer\";\nimport UserReducer from \"./User.reducer\";\nimport ProjectReducer from \"./Project.reducer\";\nimport BoardReducer from \"./Board.reducer\";\nimport LogTimeReducer from \"./LogTime.reducer\";\nimport dayOffRequest from \"./DayOffRequest.reducer\";\nimport LeaveDays from \"./LeaveDays.reducer\";\nimport RequestUpdateTimeCardReducer from \"./RequestUpdateTimeCard.reducer\";\nimport TimekeepingReducer from \"./Timekeeping.reducer\";\nimport TimesheetReducer from \"./Timesheet.reducer\";\nimport ChatReducer from \"./Chat.reducer\";\nimport InternalIpReducer from \"./InternalIp.reducer\";\nimport HolidayReducer from \"./Holiday.reducer\";\nimport PerformanceReducer from \"./Performance.reducer\";\nimport NotificationReducer from \"./Notification.reducer\";\nimport SocketReducer from \"./Socket.reducer\";\nimport TaskNoteReducer from \"./TaskNote.reducer\";\nimport Client from \"./Client.reducer\";\nimport CheckIn from \"./Checkin.reducer\";\nimport WorkingTime from \"./WorkingTime.reducer\";\nimport ProjectExteriorReducer from \"./ProjectExterior.reducer\";\nimport BackupReducer from \"./Backup.reducer\";\nimport TimeDeleteFilePrivateChatReducer from \"./TimeDeleteFilePrivateChat.reducer\";\nimport MailReceiveReducer from \"./MailReceive.reducer\";\nimport WorkspaceReducer from \"./Workspace.reducer\";\nimport WorkingDayReducer from \"./WorkingDay.reducer\";\nimport NewsReducer from \"./News.reducer\";\n\nconst createRootReducer = (history: History) =>\n combineReducers({\n ROUTER: connectRouter(history),\n AUTH: AuthenticationReducer,\n ROLE: RoleReducer,\n DASHBOARD: DashboardReducer,\n USER: UserReducer,\n PROJECT: ProjectReducer,\n BOARD: BoardReducer,\n LOG_TIME: LogTimeReducer,\n DAY_OFF_REQUEST: dayOffRequest,\n LEAVE_DAYS: LeaveDays,\n REQUEST_UPDATE_TIME_CARD: RequestUpdateTimeCardReducer,\n TIMEKEEPING: TimekeepingReducer,\n TIMESHEET: TimesheetReducer,\n CHAT: ChatReducer,\n INTERNAL_IP: InternalIpReducer,\n HOLIDAY: HolidayReducer,\n PERFORMANCE: PerformanceReducer,\n NOTIFICATION: NotificationReducer,\n SOCKET: SocketReducer,\n TASK_NOTE: TaskNoteReducer,\n CLIENT: Client,\n CHECKIN: CheckIn,\n WORKING_TIME: WorkingTime,\n PROJECT_EXTERIOR: ProjectExteriorReducer,\n BACKUP: BackupReducer,\n TIME_DELETE_FILE_PRIVATE_CHAT: TimeDeleteFilePrivateChatReducer,\n MAIL_RECEIVE: MailReceiveReducer,\n WORKSPACE: WorkspaceReducer,\n WORKING_DAY: WorkingDayReducer,\n NEWS: NewsReducer,\n });\n\nexport default createRootReducer;\n","import { configureStore, Action } from \"@reduxjs/toolkit\";\nimport { createBrowserHistory } from \"history\";\nimport { routerMiddleware } from \"connected-react-router\";\nimport { createLogger } from \"redux-logger\";\nimport { AnyAction } from \"redux\";\nimport { ThunkAction, ThunkDispatch } from \"redux-thunk\";\nimport { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\";\n// import {\n// createStateSyncMiddleware,\n// initMessageListener,\n// } from \"redux-state-sync\";\n// import { persistReducer, persistStore, PERSIST, PURGE } from \"redux-persist\";\n// import storage from 'redux-persist/lib/storage';\n// import createIdbStorage from \"@piotr-cz/redux-persist-idb-storage\";\n\nimport createRootReducer from \"@/Reducers\";\n\nexport const history = createBrowserHistory();\nconst rootReducer = createRootReducer(history);\nexport type RootState = ReturnType;\n\nconst excludeLoggerEnvs = [\"prod\"];\nconst shouldIncludeLogger = !excludeLoggerEnvs.includes(\n import.meta.env.MODE || \"\"\n);\n\nlet logger: any = undefined;\n\nif (shouldIncludeLogger) {\n logger = createLogger({\n level: \"info\",\n collapsed: true,\n });\n}\n\nexport const configuredStore = () => {\n // Create Store\n // const persistConfig = {\n // key: \"root\",\n // storage: createIdbStorage({ name: \"cavt\", storeName: \"keyval\" }),\n // serialize: false, // Data serialization is not required and disabling it allows you to inspect storage value in DevTools; Available since redux-persist@5.4.0\n // deserialize: false, // Required to bear same value as `serialize` since redux-persist@6.0,\n // blacklist: [\"auth\", \"chat\"],\n // };\n\n // const persistedReducer = persistReducer(persistConfig, rootReducer);\n const store = configureStore({\n reducer: rootReducer,\n middleware: (getDefaultMiddleware) => {\n const middleware = [\n ...getDefaultMiddleware({ serializableCheck: false }),\n routerMiddleware(history),\n // createStateSyncMiddleware({\n // blacklist: [PERSIST, PURGE],\n // }),\n ];\n if (logger) return [...middleware, logger];\n return middleware;\n },\n });\n return store;\n};\n\nexport const store = configuredStore();\n// initMessageListener(store);\n// export const persistor = persistStore(store);\nexport type Store = ReturnType;\nexport type ReduxState = ReturnType;\nexport type AppThunk = ThunkAction>;\nexport type TypedDispatch = ThunkDispatch;\nexport const useTypedDispatch = () => useDispatch();\nexport const useTypedSelector: TypedUseSelectorHook = useSelector;\n","export default {\r\n mainBackground: \"rgba(92, 110, 108,1)\",\r\n // mainColor: \"rgb(82, 101, 133)\",\r\n burntSienna: \"#E87844\",\r\n bismark: \"#517284\",\r\n pickledBluewood: \"#324A58\",\r\n loblolly: \"#C2D2D6\",\r\n oceanGreen: \"#4BB180\",\r\n hulk: \"#008000\",\r\n fuzzyWuzzyBrown: \"#C95454\",\r\n diSerria: \"#DA9555\",\r\n yellow: \"#FFFF00\",\r\n mystic: \"#E7ECEF\",\r\n astronaut: \"#274C77\",\r\n hippieBlue: \"#6096BA\",\r\n perano: \"#A3CEF1\",\r\n lemonGrass: \"#8B8C89\",\r\n shark: \"#24292E\",\r\n black: \"#000000\",\r\n white: \"#ffffff\",\r\n deepskyblue: \"#00BFFF\",\r\n blueLight: \"rgba(187, 113, 84,0.2)\",\r\n // button: \"rgb(56, 88, 152)\",\r\n // hoverButton: \"rgb(49, 78, 137)\",\r\n button: \"rgb(1, 143, 191)\",\r\n hoverButton: \"rgb(0, 194, 242)\",\r\n mainColor: \"rgb(1, 143, 191)\",\r\n toggleButton: \"#66BBD8\",\r\n buttonClandar: \"rgb(82, 101, 133)\",\r\n bluehide: \"#33CCFF\",\r\n LightSkyBlue4: \"#607B8B\",\r\n LightSkyBlue3: \"#8DB6CD\",\r\n balsamGreen: \"#5C6E6C\",\r\n aquatone: \"#A6B7AA\",\r\n artermis: \"#D2A96A\",\r\n dustyCoral: \"#D39D87\",\r\n warmCopper: \"#BB7154\",\r\n // blueLight: \"#E1F0FF\",\r\n edward: \"rgba(166, 183, 170,0.8)\",\r\n lightOrange: \"#D2A96A\",\r\n deepOrange: \"#BB7154\",\r\n};\r\n","import { type ThemeConfig, extendTheme } from \"@chakra-ui/react\";\nimport CommonColors from \"./CommonColors\";\n\nconst breakpoints = {\n base: \"0em\", // 0px\n sm: \"30em\", // ~480px. em is a relative unit and is dependant on the font size.\n md: \"48em\", // ~768px\n lg: \"62em\", // ~992px\n xl: \"80em\", // ~1280px\n \"2xl\": \"96em\", // ~1536px\n};\n\nconst colors = {\n brand: {\n 900: \"#1a365d\",\n 800: \"#153e75\",\n 700: \"#2a69ac\",\n },\n};\n\nconst semanticTokens = {\n colors: {\n error: \"red.500\",\n success: \"green.500\",\n primary: {\n default: \"red.500\",\n _dark: \"red.400\",\n },\n secondary: {\n default: \"red.800\",\n _dark: \"red.700\",\n },\n },\n};\n\nconst config: ThemeConfig = {\n // ! Only update to \"true\" with use system color mode if the app has light and dark mode\n initialColorMode: \"light\",\n useSystemColorMode: false,\n};\n\nconst theme = extendTheme({\n breakpoints,\n semanticTokens,\n colors,\n config,\n styles: {\n global: {\n body: {\n fontFamily: \"Arial, sans-serif,'Red Hat Display'\",\n background: \"#F9FAFF\",\n color: \"#28282A !important\",\n \"&::-webkit-scrollbar, & *::-webkit-scrollbar,\": {\n height: \"5px\",\n width: \"5px\",\n backgroundColor: \"rgba(166, 183, 170,0.2) !important\",\n },\n \"&::-webkit-scrollbar-thumb, & *::-webkit-scrollbar-thumb\": {\n backgroundColor: `${CommonColors.burntSienna} !important`,\n outline: \"none\",\n },\n \"&::-webkit-scrollbar-track, & *::-webkit-scrollbar-track\": {\n boxShadow: \"inset 0 0 5px rgba(187, 113, 84, 1) !important\",\n },\n \"td > p\": {\n fontFamily: \"sans-serif !important\",\n },\n hr: {\n m: \"0!important\",\n },\n p: {\n m: \"0!important\",\n },\n a: {\n textDecoration: \"none\",\n \"&:hover\": {\n textDecoration: \"none\",\n background: \"inherit\",\n color: \"inherit\",\n },\n },\n },\n },\n },\n});\n\nexport default theme;\n","import { Routers, ENUMS } from \"@/Constants\";\n\nimport { Icon } from \"@chakra-ui/react\";\nimport {\n HomeIcon,\n UserIcon,\n UserGroupIcon,\n ClipboardDocumentCheckIcon,\n ChatBubbleBottomCenterIcon,\n ListBulletIcon,\n PresentationChartBarIcon,\n ClipboardDocumentListIcon,\n ArrowPathIcon,\n ClockIcon,\n CalendarDaysIcon,\n CalendarIcon,\n Cog6ToothIcon,\n GlobeAltIcon,\n CreditCardIcon,\n UsersIcon,\n GlobeAsiaAustraliaIcon,\n RectangleStackIcon,\n DocumentIcon,\n RectangleGroupIcon,\n} from \"@heroicons/react/24/outline\";\n// import TimeSheetscon from \"@/Components/Common/Icon/TimeSheetIcon\";\n\ninterface IMenu {\n name: string;\n path: string;\n icon?: JSX.Element;\n}\n\nconst dashboardItem = {\n name: \"dashboard\",\n path: Routers.DASHBOARD,\n icon: ,\n};\n\nconst userItem = {\n name: \"users\",\n path: Routers.USER,\n icon: ,\n};\n\nconst projectItem = {\n name: \"projects\",\n path: Routers.PROJECT,\n icon: ,\n};\n\nconst projectPerformanceItem = {\n name: \"performanceEvaluation\",\n path: Routers.PERFORMANCE,\n icon: ,\n};\n\nconst boardItem = {\n name: \"board\",\n path: Routers.BOARD,\n icon: ,\n};\n\nconst clientItem = {\n name: \"clients\",\n path: Routers.CLIEINT,\n icon: ,\n};\n\nconst timeCardItem = {\n name: \"timeCard\",\n path: Routers.TIME_CARD,\n icon: ,\n childs: [\n {\n name: \"attendanceSheets\",\n path: Routers.TIME_SHEET,\n icon: ,\n },\n {\n name: \"dayOffRequest\",\n path: Routers.DAY_OFF_REQUEST,\n icon: ,\n },\n {\n name: \"overtime\",\n path: Routers.OVER_TIME,\n icon: ,\n },\n {\n name: \"leaveDays\",\n path: Routers.LEAVE_DAY,\n icon: ,\n },\n {\n name: \"timeSheets\",\n path: Routers.TIME_KEEPPING,\n icon: ,\n },\n {\n name: \"requestUpdateTimeCard\",\n path: Routers.REQUEST_UPDATE_TIME_CARD,\n icon: ,\n },\n ],\n};\n\nconst chatItem = {\n name: \"chat\",\n path: Routers.CHAT,\n icon: ,\n};\n\nconst settingItem = {\n name: \"settings\",\n path: Routers.SETTING,\n icon: ,\n childs: [\n {\n name: \"news\",\n path: Routers.NEWS,\n icon: ,\n },\n {\n name: \"internalIPAddress\",\n path: Routers.INTERNAL_IP,\n icon: ,\n },\n {\n name: \"myInternalIPAddress\",\n path: Routers.GET_MY_INTERNAL_IP,\n icon: ,\n },\n ],\n};\n\nconst settingItemArtist = {\n name: \"settings\",\n path: Routers.SETTING,\n icon: ,\n childs: [\n {\n name: \"myIPAddress\",\n path: Routers.GET_MY_INTERNAL_IP,\n icon: ,\n },\n ],\n};\n\nconst settingItemAdmin = {\n name: \"settings\",\n path: Routers.SETTING,\n icon: ,\n childs: [\n {\n name: \"news\",\n path: Routers.NEWS,\n icon: ,\n },\n {\n name: \"internalIPAddress\",\n path: Routers.INTERNAL_IP,\n icon: ,\n },\n {\n name: \"myIPAddress\",\n path: Routers.GET_MY_INTERNAL_IP,\n icon: ,\n },\n {\n name: \"workingTime\",\n path: Routers.WORKING_TIME,\n icon: ,\n },\n {\n name: \"workingDay\",\n path: Routers.WORKING_DAY,\n icon: ,\n },\n {\n name: \"fileSystem\",\n path: Routers.FILE_SYSTEM,\n icon: ,\n },\n {\n name: \"backupRestore\",\n path: Routers.BACKUP_RESTORE,\n icon: ,\n },\n {\n name: \"workspace\",\n path: Routers.WORKSPACE,\n icon: ,\n },\n ],\n};\n\nconst ADMIN_SIDEBAR_MENU = [\n dashboardItem,\n userItem,\n projectItem,\n boardItem,\n timeCardItem,\n chatItem,\n projectPerformanceItem,\n clientItem,\n settingItemAdmin,\n];\n\nconst MANAGER_SIDEBAR_MENU = [\n dashboardItem,\n userItem,\n projectItem,\n boardItem,\n timeCardItem,\n chatItem,\n projectPerformanceItem,\n clientItem,\n settingItem,\n];\n\nconst LEADER_SIDEBAR_MENU = [\n dashboardItem,\n projectItem,\n boardItem,\n timeCardItem,\n chatItem,\n projectPerformanceItem,\n settingItemArtist,\n];\n\nconst ARTIST_SIDEBAR_MENU = [\n dashboardItem,\n projectItem,\n boardItem,\n timeCardItem,\n chatItem,\n settingItemArtist,\n];\n\nconst HR_SIDEBAR_MENU = [\n dashboardItem,\n userItem,\n projectItem,\n boardItem,\n timeCardItem,\n chatItem,\n projectPerformanceItem,\n clientItem,\n settingItem,\n];\n\nconst MKT_SIDEBAR_MENU = [\n dashboardItem,\n projectItem,\n boardItem,\n timeCardItem,\n chatItem,\n settingItemArtist,\n];\n\nconst MenuOptionsBasedRole: { [key: string]: IMenu[] } = {\n [ENUMS.ROLES.ADMIN]: ADMIN_SIDEBAR_MENU,\n [ENUMS.ROLES.MANAGER]: MANAGER_SIDEBAR_MENU,\n [ENUMS.ROLES.LEADER]: LEADER_SIDEBAR_MENU,\n [ENUMS.ROLES.ARTIST]: ARTIST_SIDEBAR_MENU,\n [ENUMS.ROLES.HUMAN_RESOURCES]: HR_SIDEBAR_MENU,\n [ENUMS.ROLES.MARKETING]: MKT_SIDEBAR_MENU,\n};\n\nexport default MenuOptionsBasedRole;\n","import React from \"react\";\nimport _ from \"lodash\";\nimport { Button as ChakraButton, type ButtonProps } from \"@chakra-ui/react\";\n\ninterface IProps extends ButtonProps {\n children?: JSX.Element | string;\n onClick?(e: any): void;\n isDisabled?: boolean;\n}\n\nconst Button = React.forwardRef(\n ({ children, onClick, isDisabled, ...props }, ref) => {\n const [isClicked, setIsClicked] = React.useState(false);\n\n const handleClick = _.throttle((e) => {\n if (!isClicked) {\n onClick && onClick(e);\n setIsClicked(true);\n setTimeout(() => {\n setIsClicked(false);\n }, 1000);\n }\n }, 1000);\n\n return (\n \n {children}\n \n );\n }\n);\n\nexport default Button;\n","import React from \"react\";\nimport _ from \"lodash\";\nimport \"react-phone-input-2/lib/style.css\";\n\nimport {\n FormControl,\n FormErrorMessage,\n FormHelperText,\n FormLabel,\n Select as CSelect,\n InputGroup,\n type InputProps,\n type SelectProps,\n} from \"@chakra-ui/react\";\nimport { useTranslation } from \"react-multi-lang\";\n\ninterface IOption {\n label: string;\n value: string;\n}\n\ninterface IProps extends SelectProps {\n label?: string;\n isError?: boolean;\n errorMessage?: string;\n helperText?: string;\n style?: object;\n onEnter?(): void;\n labelSx?: object;\n inputSx?: object;\n hoverInputSx?: object;\n options: IOption[] | any[];\n displayChoose?: boolean;\n disabled?: boolean;\n}\n\nconst Select = React.forwardRef(\n (\n {\n label = \"\",\n isError,\n errorMessage = \"\",\n helperText = \"\",\n style = {},\n labelSx,\n inputSx,\n hoverInputSx,\n options,\n displayChoose,\n disabled,\n ...props\n },\n ref\n ) => {\n const t = useTranslation();\n return (\n \n {label ? (\n \n {label}\n \n ) : null}\n \n \n {displayChoose && (\n \n )}\n {!_.isEmpty(options) ? (\n _.map(options, (option: IOption, index: number) => (\n \n ))\n ) : !displayChoose ? (\n \n ) : (\n \"\"\n )}\n \n \n\n {isError ? {errorMessage} : null}\n {helperText ? {helperText} : null}\n \n );\n }\n);\n\nexport default Select;\n","import React from \"react\";\n\nconst range = (start: number, end: number) => {\n const length = end - start + 1;\n /*\n \tCreate an array of certain length and set the elements within it from\n start value to end value.\n */\n return Array.from({ length }, (_, idx) => idx + start);\n};\n\nconst DOTS = \"...\";\n\nconst usePagination = ({\n totalItems = 0,\n itemsPerPage = 0,\n siblingCount = 1,\n currentPage = 0,\n}) => {\n const paginationRange = React.useMemo(() => {\n const result = [];\n const totalPageCount = Math.ceil(totalItems / itemsPerPage);\n\n // Pages count is determined as siblingCount + firstPage + lastPage + currentPage + 2*DOTS\n const totalPageNumbers = siblingCount + 5;\n\n /*\n \tCalculate left and right sibling index and make sure they are within range 1 and totalPageCount\n */\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(\n currentPage + siblingCount,\n totalPageCount\n );\n\n /*\n We do not show dots just when there is just one page number to be inserted between the extremes of sibling and the page limits i.e 1 and totalPageCount. Hence we are using leftSiblingIndex > 2 and rightSiblingIndex < totalPageCount - 2\n */\n const shouldShowLeftDots = leftSiblingIndex > 2;\n const shouldShowRightDots = rightSiblingIndex < totalPageCount - 2;\n\n const firstPageIndex = 1;\n const lastPageIndex = totalPageCount;\n /*\n Case 1:\n If the number of pages is less than the page numbers we want to show in our\n paginationComponent, we return the range [1..totalPageCount]\n */\n if (totalPageNumbers >= totalPageCount) {\n result.push(...range(1, totalPageCount));\n } else if (!shouldShowLeftDots && shouldShowRightDots) {\n /*\n \tCase 2: No left dots to show, but rights dots to be shown\n */\n const leftItemCount = 3 + 2 * siblingCount;\n const leftRange = range(1, leftItemCount);\n\n result.push(...[...leftRange, DOTS, totalPageCount]);\n } else if (shouldShowLeftDots && !shouldShowRightDots) {\n\n /*\n \tCase 3: No right dots to show, but left dots to be shown\n */\n const rightItemCount = 3 + 2 * siblingCount;\n const rightRange = range(\n totalPageCount - rightItemCount + 1,\n totalPageCount\n );\n result.push(...[firstPageIndex, DOTS, ...rightRange]);\n } else if (shouldShowLeftDots && shouldShowRightDots) {\n\n /*\n \tCase 4: Both left and right dots to be shown\n */\n const middleRange = range(leftSiblingIndex, rightSiblingIndex);\n result.push(\n ...[firstPageIndex, DOTS, ...middleRange, DOTS, lastPageIndex]\n );\n }\n return result;\n }, [totalItems, itemsPerPage, siblingCount, currentPage]);\n\n return paginationRange;\n};\n\nexport { usePagination, DOTS };\n","import React from \"react\";\n\nimport { Button, HStack, Icon, IconButton } from \"@chakra-ui/react\";\n\nimport { type IPaginate } from \"@/Types/Common.types\";\n\nimport { usePagination, DOTS } from \"./usePagination\";\nimport { ChevronRightIcon, ChevronLeftIcon } from \"@heroicons/react/24/outline\";\ninterface IProps {\n onPageChange?: (page: number) => void;\n payload: IPaginate;\n siblingCount?: number;\n}\n\nconst Pagination: React.FC = ({\n payload,\n onPageChange,\n siblingCount = 1,\n}) => {\n const { totalItems, currentPage, itemsPerPage, totalPages } = payload;\n\n const paginationRange = usePagination({\n currentPage,\n totalItems,\n siblingCount,\n itemsPerPage,\n });\n\n // If there are less than 2 times in pagination range we shall not render the component\n if (currentPage === 0 || paginationRange.length < 1) {\n return null;\n }\n\n // const onFirst = () => {\n // onPageChange != null && onPageChange(1);\n // };\n\n const onPrevious = () => {\n onPageChange != null && onPageChange(currentPage - 1);\n };\n\n const onSelectPage = (page: number | string) => {\n currentPage !== page &&\n onPageChange != null &&\n typeof page === \"number\" &&\n onPageChange(page);\n };\n\n const onNext = () => {\n onPageChange != null && onPageChange(currentPage + 1);\n };\n\n // const onLast = () => {\n // onPageChange != null && onPageChange(totalPages);\n // };\n\n const isDisableLeftArrow = currentPage === 1;\n\n const isDisabledRightArrow = currentPage === totalPages;\n\n return (\n \n {/* }\n size=\"sm\"\n onClick={onFirst}\n isDisabled={isDisableLeftArrow}\n /> */}\n }\n size=\"sm\"\n onClick={onPrevious}\n isDisabled={isDisableLeftArrow}\n />\n {paginationRange.map((pageNumber: string | number, idx: number) => {\n const key = `paginate-page-${pageNumber}-${idx}`;\n if (pageNumber === DOTS)\n return (\n \n ...\n \n );\n\n return (\n {\n onSelectPage(pageNumber);\n }}\n key={key}\n >\n {pageNumber}\n \n );\n })}\n }\n size=\"sm\"\n onClick={onNext}\n isDisabled={isDisabledRightArrow}\n />\n {/* }\n size=\"sm\"\n onClick={onLast}\n isDisabled={isDisabledRightArrow}\n /> */}\n \n );\n};\n\nexport default Pagination;\n","import React from \"react\";\nimport _ from \"lodash\";\nimport styled from \"@emotion/styled\";\n\nimport { type IPaginate } from \"@/Types/Common.types\";\n\nimport Pagination from \"./Pagination\";\n\nimport {\n Table as ChakraTable,\n Thead,\n Tbody,\n Tfoot,\n Tr as ChakraTr,\n Th,\n Td as ChakraTd,\n TableCaption,\n TableContainer,\n type TableProps,\n Stack,\n Text,\n Checkbox,\n Skeleton,\n Center,\n} from \"@chakra-ui/react\";\nimport CommonColors from \"@/Themes/CommonColors\";\n\ninterface IColumn {\n label: string;\n key: string;\n textAlign: \"left\" | \"center\" | \"right\";\n}\n\ntype IPayload = Record;\n\ninterface IProps extends TableProps {\n caption?: string;\n payload: IPayload[];\n columns: IColumn[];\n paginate?: IPaginate;\n onPageChange?: (page: number) => void;\n showTotal?: boolean;\n sxRowsTable?: object;\n onRowsTableActive?(rowIdx?: number): void;\n isRowsActive?: boolean;\n isLoading?: boolean;\n tableSize?: \"xs\" | \"sm\" | \"md\";\n onCheckAll?: (e: any) => void;\n}\n\nconst Table = styled(ChakraTable)`\n width: 100%;\n border-collapse: collapse;\n`;\n\nconst Tr = styled(ChakraTr)``;\n\nconst Td = styled(ChakraTd)`\n border: 1px solid #ddd;\n padding: 8px;\n font-size: 13px;\n font-weight: 400;\n`;\n\nconst TableComponent: React.FC = ({\n payload = [],\n columns = [],\n caption = \"\",\n paginate,\n onPageChange,\n showTotal = false,\n sxRowsTable,\n isRowsActive = false,\n onRowsTableActive,\n isLoading = false,\n tableSize,\n onCheckAll,\n ...props\n}) => {\n const [rowActive, setRowActive] = React.useState(-1);\n\n const [isChecked, setIsChecked] = React.useState(false);\n\n React.useEffect(() => {\n if (_.isEmpty(payload)) {\n setIsChecked(false);\n }\n }, [payload]);\n\n const THead = React.useMemo(() => {\n const th: JSX.Element[] = [];\n columns.forEach((column: IColumn) =>\n th.push(\n \n {onCheckAll && column?.key === \"no\" ? (\n row === id)}\n isChecked={isChecked}\n onChange={(e: any) => {\n onCheckAll(e.target.checked);\n setIsChecked(e.target.checked);\n }}\n borderColor=\"lightblue\"\n />\n ) : (\n column?.label\n )}\n \n )\n );\n return (\n \n {th}\n \n );\n }, [columns, onCheckAll, isChecked]);\n\n const TBody = React.useMemo(() => {\n const rows: JSX.Element[] = [];\n payload.forEach((item: IPayload, rowIdx: number) => {\n const td: JSX.Element[] = [];\n columns.forEach((column: IColumn, cellIdx: number) => {\n const currentVal = item[column.key];\n const key = `cell-${rowIdx}-${cellIdx}`;\n if (currentVal)\n td.push(\n \n {currentVal}\n \n );\n else\n td.push(\n \n --\n \n );\n });\n rows.push(\n {\n setRowActive(rowIdx);\n onRowsTableActive && onRowsTableActive(rowIdx);\n }}\n >\n {td}\n \n );\n });\n if (isLoading)\n return (\n \n {_.times(10, (index) => (\n \n {columns.map((column) => (\n \n
\n \n
\n \n ))}\n \n ))}\n \n );\n else {\n if (_.isEmpty(rows) && !isLoading)\n return (\n \n \n \n No data were found!\n \n \n \n );\n\n return {rows};\n }\n }, [payload, rowActive]);\n\n return (\n \n \n \n {caption ? (\n \n {caption}\n \n ) : null}\n {THead}\n {TBody}\n {showTotal && paginate != null ? (\n \n \n \n Totals: {paginate?.totalItems}\n \n \n \n ) : null}\n \n \n {paginate != null ? (\n \n ) : null}\n \n );\n};\n\nexport default TableComponent;\n","import React from \"react\";\n\nimport {\n FormControl,\n FormErrorMessage,\n FormHelperText,\n FormLabel,\n Textarea,\n type TextareaProps,\n} from \"@chakra-ui/react\";\n\ninterface IProps extends TextareaProps {\n ref?: any;\n label?: string;\n isError?: boolean;\n errorMessage?: string;\n helperText?: string;\n style?: object;\n disabled?: boolean;\n}\n\nconst TextareaComponent = React.forwardRef(\n (\n {\n label = \"\",\n isError,\n errorMessage = \"\",\n helperText = \"\",\n style = {},\n disabled = false,\n ...props\n },\n ref\n ) => {\n return (\n \n {label ? (\n \n {label}\n \n ) : null}\n \n {!isError ? (\n {helperText}\n ) : (\n {errorMessage}\n )}\n \n );\n }\n);\n\nTextareaComponent.displayName = \"Textarea\";\n\nexport default TextareaComponent;\n","import React from \"react\";\nimport PhoneInput from \"react-phone-input-2\";\nimport \"react-phone-input-2/lib/style.css\";\n\nimport {\n FormControl,\n FormErrorMessage,\n FormHelperText,\n FormLabel,\n Input,\n InputGroup,\n InputLeftElement,\n InputRightElement,\n type InputProps,\n Icon,\n Tooltip,\n} from \"@chakra-ui/react\";\nimport { QuestionMarkCircleIcon } from \"@heroicons/react/24/outline\";\n\ninterface IProps extends InputProps {\n label?: string;\n isError?: boolean;\n errorMessage?: string;\n helperText?: string;\n style?: object;\n leftElement?: JSX.Element;\n rightElement?: JSX.Element;\n onEnter?(): void;\n labelSx?: object;\n inputSx?: object;\n hoverInputSx?: object;\n isPhoneInput?: boolean;\n disablePhoneInput?: boolean;\n onPhoneInputChange?: (number: any) => void;\n phoneInputvalue?: string;\n disabled?: boolean;\n moreInfo?: string;\n type?: string;\n}\n\nconst TextField = React.forwardRef(\n (\n {\n label = \"\",\n isError,\n errorMessage = \"\",\n helperText = \"\",\n style = {},\n leftElement,\n rightElement,\n onEnter,\n labelSx,\n inputSx,\n hoverInputSx,\n isPhoneInput = false,\n disablePhoneInput = false,\n onPhoneInputChange,\n phoneInputvalue = \"\",\n disabled = false,\n moreInfo,\n type = \"text\",\n ...props\n },\n ref\n ) => {\n return (\n \n {label ? (\n \n {label}{\" \"}\n {moreInfo && (\n \n \n \n )}\n \n ) : null}\n {isPhoneInput ? (\n \n onPhoneInputChange && onPhoneInputChange(number)\n }\n disabled={disablePhoneInput}\n inputStyle={{\n borderRadius: \"8px\",\n width: \"100%\",\n height: \"32px\",\n fontSize: \"14px\",\n opacity: disablePhoneInput ? 0.4 : 1,\n // borderColor: disablePhoneInput ? \"rgb(226, 232, 240)\" : \"inherit\",\n fontFamily: \"Pretendard\",\n // \"&:hover\": {\n // cursor: disablePhoneInput ? \"not-allowed\" : \"normal\",\n // },\n }}\n />\n ) : (\n \n {leftElement ? (\n \n {leftElement}\n \n ) : null}\n {\n if (event.key === \"Enter\" && onEnter) onEnter();\n }}\n {...props}\n sx={{ ...inputSx, borderRadius: \"8px\" }}\n _hover={{ ...hoverInputSx }}\n />\n {rightElement ? (\n \n {rightElement}\n \n ) : null}\n \n )}\n\n {isError ? {errorMessage} : null}\n {helperText ? {helperText} : null}\n \n );\n }\n);\n\nTextField.displayName = \"TextField\";\n\nexport default TextField;\n","import React from \"react\";\nimport isEmpty from \"lodash/isEmpty\";\nimport includes from \"lodash/includes\";\n\nimport { Text, Box, VStack, Stack, Icon } from \"@chakra-ui/react\";\n\nimport { PencilIcon } from \"@heroicons/react/24/outline\";\n\ninterface IProps {\n label?: string;\n onFileChange(newFiles: File[]): void;\n files: File[];\n message?: string;\n accept?: string;\n direction?: \"row\" | \"column\";\n containerSx?: object;\n labelSx?: object;\n required?: boolean;\n preview?: string;\n isOnlyRead?: boolean;\n previewUrl?: string;\n}\n\nconst ALLOWED_IMAGE = [\"image/jpg\", \"image/jpeg\", \"image/png\"];\n\nconst DEFAULT_PREVIEW =\n \"https://cdn-icons-png.flaticon.com/512/3135/3135715.png\";\n\nconst UploadAvatar: React.FC = ({\n onFileChange,\n message = \"\",\n files = [],\n accept = \".png,.jpg,.jpeg\",\n direction = \"column\",\n containerSx,\n isOnlyRead = false,\n preview = \"\",\n previewUrl = DEFAULT_PREVIEW,\n}) => {\n const [validateMessage, setValidateMessage] = React.useState(\"\");\n const [previewImage, setPreviewImage] = React.useState(preview);\n const inputRef = React.useRef(null);\n\n React.useEffect(() => {\n if (previewUrl) setPreviewImage(previewUrl);\n }, [previewUrl]);\n\n React.useEffect(() => {\n if (isEmpty(files)) {\n if (inputRef && inputRef.current) inputRef.current.value = \"\";\n } else {\n const imageUrl = URL.createObjectURL(files[0]);\n setPreviewImage(imageUrl);\n }\n }, [files]);\n\n React.useEffect(() => {\n setValidateMessage(message);\n }, [message]);\n\n const onChangeFile = (e: any) => {\n if (e) {\n setValidateMessage(\"\");\n const targetFiles = e.target.files;\n if (targetFiles.length !== 0) {\n const resolveFile: File = targetFiles[0];\n let isValid = true;\n if (resolveFile.size > 5000000) {\n setValidateMessage(\"Image large than 5MB\");\n isValid = false;\n }\n if (!includes(ALLOWED_IMAGE, resolveFile.type)) {\n setValidateMessage(\"Image is wrong type\");\n isValid = false;\n }\n if (isValid) onFileChange([resolveFile]);\n else onFileChange([]);\n }\n }\n };\n\n return (\n \n \n {\n if (inputRef.current && !isOnlyRead) inputRef.current.click();\n }}\n sx={{\n position: \"relative\",\n boxShadow: \"0 7px 25px rgba(0,0,0,0.08)\",\n boxSizing: \"border-box\",\n transition: \"all ease 0.25s\",\n overflow: \"hidden\",\n borderRadius: \"50%\",\n width: \"80px\",\n height: \"80px\",\n maxHeight: \"250px\",\n margin: \"0 auto\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexDirection: \"column\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: !isEmpty(message) ? \"error.main\" : \"#ccc\",\n \"&:hover\": {\n borderColor: !isEmpty(message)\n ? \"error.main\"\n : !isOnlyRead\n ? \"rgba(0, 0, 0, 0.87)\"\n : \"none\",\n \"& .image-buttons\": {\n opacity: !isOnlyRead ? 1 : 0,\n },\n },\n }}\n >\n \n\n \n {!isOnlyRead && (\n \n )}\n onChangeFile(e)}\n style={{\n display: \"none\",\n width: \"100%\",\n height: \"100%\",\n backgroundColor: \"red\",\n }}\n />\n \n \n \n {validateMessage && (\n \n *{validateMessage}\n \n )}\n \n );\n};\n\nexport default UploadAvatar;\n","import React from \"react\";\n\nimport {\n Button,\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverHeader,\n PopoverArrow,\n PopoverBody,\n ButtonGroup,\n useDisclosure,\n Text,\n VStack,\n Icon,\n IconButton,\n IconButtonProps,\n} from \"@chakra-ui/react\";\nimport { Link } from \"react-router-dom\";\n\ninterface IProps extends IconButtonProps {\n isAnchor?: boolean;\n to?: string;\n isConfirm?: boolean;\n confirmTitle?: string;\n confirmMessage?: string;\n confirmPlacement?: \"top\" | \"right\" | \"left\" | \"bottom\";\n onConfirm?(): void;\n}\n\nconst IconButtonConfirm = React.forwardRef(\n (\n {\n onConfirm,\n isAnchor = false,\n to = \"\",\n children = \"\",\n confirmMessage = \"N/A\",\n confirmTitle = \"N/A\",\n confirmPlacement = \"top\",\n ...props\n },\n ref\n ) => {\n const { isOpen, onOpen, onClose } = useDisclosure();\n\n const onConfirmAction = (action: string) => {\n if (action === \"confirm\" && onConfirm) onConfirm();\n onClose();\n };\n\n const button = (\n \n {children}\n \n );\n\n if (isAnchor && to) return {button};\n\n return (\n \n {button}\n \n \n \n \n \n \n \n {confirmTitle || \"Confirmation\"}\n \n \n \n \n \n {confirmMessage}\n \n\n \n onConfirmAction(\"cancel\")}\n >\n Cancel\n \n \n \n \n }\n onClick={() => onConfirmAction(\"confirm\")}\n >\n Confirm\n \n \n \n \n \n \n );\n }\n);\n\nIconButtonConfirm.displayName = \"Button\";\n\nexport default IconButtonConfirm;\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport _ from \"lodash\";\r\nimport { useMiniSearch } from \"react-minisearch\";\r\nimport {\r\n Input,\r\n InputGroup,\r\n InputRightElement,\r\n Box,\r\n Avatar,\r\n List,\r\n ListItem,\r\n Text,\r\n Icon,\r\n IconButton,\r\n Tooltip,\r\n Checkbox,\r\n useOutsideClick,\r\n useMediaQuery,\r\n} from \"@chakra-ui/react\";\r\n\r\nimport { XMarkIcon } from \"@heroicons/react/24/outline\";\r\nimport { ENUMS } from \"@/Constants\";\r\nimport { useTranslation } from \"react-multi-lang\";\r\n\r\ninterface ISectionProps {\r\n payload?: any[];\r\n onChangeValue(userId: string | string[]): void;\r\n disabledIds?: string[];\r\n isClear?: boolean;\r\n isShowCheckbox?: boolean;\r\n multiple?: boolean;\r\n placeholder?: string;\r\n sx?: object;\r\n}\r\n\r\nconst SelectUser: React.FC = ({\r\n payload,\r\n onChangeValue,\r\n disabledIds,\r\n isClear,\r\n isShowCheckbox,\r\n multiple = false,\r\n placeholder,\r\n sx,\r\n}) => {\r\n const t = useTranslation();\r\n const [isMobile] = useMediaQuery(\"(max-width: 767px)\");\r\n const containerRef = useRef(null);\r\n const [isFocused, setIsFocused] = useState(false);\r\n const [searchValue, setSearchValue] = useState(\"\");\r\n const [selectedValue, setSelectedValue] = useState();\r\n const [selectedValues, setSelectedValues] = useState([]);\r\n\r\n const { search, searchResults, autoSuggest } = useMiniSearch(payload || [], {\r\n fields: [\"name\", \"email\"],\r\n storeFields: [\"name\", \"email\"],\r\n });\r\n\r\n useOutsideClick({\r\n ref: containerRef,\r\n handler: () => setIsFocused(false),\r\n });\r\n\r\n useEffect(() => {\r\n if (!_.isEmpty(payload)) {\r\n }\r\n }, [payload]);\r\n\r\n useEffect(() => {\r\n if (multiple && selectedValues.length > 0) {\r\n const selectedIds = selectedValues.map((user) => user.id);\r\n onChangeValue(selectedIds);\r\n } else if (selectedValue) {\r\n onChangeValue(selectedValue?.id);\r\n }\r\n }, [selectedValue, selectedValues, multiple]);\r\n\r\n useEffect(() => {\r\n if (isClear) {\r\n if (multiple) {\r\n setSelectedValues([]);\r\n } else {\r\n setSelectedValue(\"\");\r\n }\r\n onChangeValue(multiple ? [] : \"\");\r\n }\r\n }, [isClear, multiple]);\r\n\r\n const handleSearchChange = (event: React.ChangeEvent) => {\r\n setIsFocused(true);\r\n const value = event.target.value;\r\n search(value, { prefix: true, fuzzy: 0.2 });\r\n setSearchValue(value);\r\n if (value.length >= 2) {\r\n autoSuggest(value, { prefix: true, fields: [\"name\", \"email\"] });\r\n }\r\n };\r\n\r\n const handleReset = (event: any) => {\r\n event.stopPropagation();\r\n if (multiple) {\r\n setSelectedValues([]);\r\n onChangeValue([]);\r\n } else {\r\n setSelectedValue(undefined); // Set to undefined to clear the selected value\r\n onChangeValue(\"\"); // Clear the selected value\r\n setSearchValue(\"\"); // Clear the search value\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n user.name).join(\", \") ||\r\n searchValue\r\n : selectedValue?.name || searchValue\r\n }\r\n onChange={handleSearchChange}\r\n size=\"sm\"\r\n cursor={selectedValue ? \"not-allowed\" : \"default\"}\r\n placeholder={placeholder || t(\"label.searchUserByNameEmail\")}\r\n onFocus={() => setIsFocused(true)}\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n }}\r\n />\r\n \r\n {(selectedValue || (multiple && selectedValues.length > 0)) && (\r\n \r\n }\r\n aria-label={\"\"}\r\n onClick={handleReset}\r\n />\r\n \r\n )}\r\n \r\n \r\n\r\n {isFocused && (\r\n \r\n \r\n {searchValue === \"\" &&\r\n _.map(payload, (user, index) => {\r\n const roleNames = _.map(user?.roles, (userRole) =>\r\n userRole?.role?.roleCode === ENUMS.ROLES.ARTIST\r\n ? `Staff`\r\n : _.startCase(userRole?.role?.name)\r\n );\r\n const concatenatedRoleNames = roleNames.join(\", \");\r\n return (\r\n {\r\n event.stopPropagation();\r\n if (!_.includes(disabledIds, user.id)) {\r\n if (multiple) {\r\n const isSelected = _.some(selectedValues, {\r\n id: user.id,\r\n });\r\n\r\n if (isSelected) {\r\n const newSelectedValues = selectedValues.filter(\r\n (selectedUser) => selectedUser.id !== user.id\r\n );\r\n setSelectedValues(newSelectedValues);\r\n } else {\r\n const newSelectedValues = [...selectedValues, user];\r\n setSelectedValues(newSelectedValues);\r\n }\r\n } else {\r\n setSelectedValue(user);\r\n setIsFocused(false);\r\n }\r\n }\r\n }}\r\n sx={{\r\n padding: 2,\r\n background:\r\n (multiple && _.some(selectedValues, { id: user.id })) ||\r\n selectedValue === user ||\r\n _.includes(disabledIds, user.id)\r\n ? \"gray.300\"\r\n : \"inherit\",\r\n cursor: _.includes(disabledIds, user.id)\r\n ? \"not-allowed\"\r\n : \"pointer\",\r\n borderBottom: \"1px solid gray\",\r\n width: \"100%\",\r\n overflow: \"auto\",\r\n }}\r\n >\r\n \r\n \r\n {isShowCheckbox && (\r\n \r\n )}\r\n \r\n \r\n \r\n {user.name}\r\n \r\n \r\n {user.email}\r\n \r\n {isMobile && (\r\n \r\n {concatenatedRoleNames}\r\n \r\n )}\r\n \r\n \r\n \r\n {!isMobile && (\r\n \r\n {concatenatedRoleNames}\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n })}\r\n {!_.isEmpty(searchResults) &&\r\n _.map(searchResults, (user, index) => {\r\n const roleNames = _.map(user?.roles, (userRole) =>\r\n userRole?.role?.roleCode === ENUMS.ROLES.ARTIST\r\n ? `Staff`\r\n : _.startCase(userRole?.role?.name)\r\n );\r\n const concatenatedRoleNames = roleNames.join(\", \");\r\n return (\r\n {\r\n event.stopPropagation();\r\n if (!_.includes(disabledIds, user.id)) {\r\n if (multiple) {\r\n const isSelected = _.some(selectedValues, {\r\n id: user.id,\r\n });\r\n\r\n if (isSelected) {\r\n const newSelectedValues = selectedValues.filter(\r\n (selectedUser) => selectedUser.id !== user.id\r\n );\r\n setSelectedValues(newSelectedValues);\r\n } else {\r\n const newSelectedValues = [...selectedValues, user];\r\n setSelectedValues(newSelectedValues);\r\n }\r\n } else {\r\n setSelectedValue(user);\r\n setIsFocused(false);\r\n }\r\n }\r\n }}\r\n sx={{\r\n padding: 2,\r\n background:\r\n (multiple && _.some(selectedValues, { id: user.id })) ||\r\n selectedValue === user ||\r\n _.includes(disabledIds, user.id)\r\n ? \"gray.300\"\r\n : \"inherit\",\r\n cursor: _.includes(disabledIds, user.id)\r\n ? \"not-allowed\"\r\n : \"pointer\",\r\n borderBottom: \"1px solid gray\",\r\n width: \"100%\",\r\n overflow: \"auto\",\r\n }}\r\n >\r\n \r\n \r\n {isShowCheckbox && (\r\n \r\n )}\r\n \r\n \r\n \r\n {user.name}\r\n \r\n \r\n {user.email}\r\n \r\n {isMobile && (\r\n \r\n {concatenatedRoleNames}\r\n \r\n )}\r\n \r\n \r\n \r\n {!isMobile && (\r\n \r\n {concatenatedRoleNames}\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n })}\r\n {!_.isEmpty(searchResults) && _.isEmpty(payload) && (\r\n \r\n No data were found\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default SelectUser;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport _ from \"lodash\";\r\nimport ReactDatePicker, { DatePickerProps } from \"react-date-picker\";\r\nimport \"@wojtekmaj/react-datetimerange-picker/dist/DateTimeRangePicker.css\";\r\nimport \"react-calendar/dist/Calendar.css\";\r\nimport \"react-clock/dist/Clock.css\";\r\nimport \"react-date-picker/dist/DatePicker.css\";\r\n\r\nimport {\r\n FormControl,\r\n FormErrorMessage,\r\n FormHelperText,\r\n FormLabel,\r\n type InputProps,\r\n Stack,\r\n} from \"@chakra-ui/react\";\r\nimport dayjs from \"dayjs\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { RootState } from \"@/Store\";\r\nimport { IHolidayStructure } from \"@/Interfaces/Holiday.interface\";\r\nimport Utils from \"@/Utils\";\r\n\r\ninterface IProps extends InputProps {\r\n label?: string;\r\n isError?: boolean;\r\n errorMessage?: string;\r\n helperText?: string;\r\n style?: object;\r\n labelSx?: object;\r\n value?: string;\r\n onDateChange(newDate: Date | string): void;\r\n minDate?: Date | any;\r\n maxDate?: Date | any;\r\n disabled?: boolean;\r\n disabledTitle?: boolean;\r\n}\r\n\r\nconst DatePicker = React.forwardRef(\r\n (\r\n {\r\n label = \"\",\r\n isError,\r\n errorMessage = \"\",\r\n helperText = \"\",\r\n style = {},\r\n labelSx,\r\n value,\r\n onDateChange,\r\n minDate,\r\n maxDate,\r\n disabledTitle = false,\r\n disabled = false,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [isFocus, setIsFocus] = useState(false);\r\n const [key, setKey] = useState(Math.random());\r\n const language = Utils.getSavedLanguage();\r\n\r\n const config: DatePickerProps = {\r\n format: \"dd/MM/yyyy\",\r\n onFocus: () => setIsFocus(true),\r\n onBlur: () => setIsFocus(false),\r\n value,\r\n onChange: (value) => onDateChange(value as any),\r\n };\r\n\r\n useEffect(() => {}, [ref]);\r\n\r\n const holidaysList: IHolidayStructure[] = useSelector((state: RootState) =>\r\n _.get(state.HOLIDAY, \"holidaysList\")\r\n );\r\n\r\n const isSunday = (date: Date) => {\r\n const formattedDate = dayjs(date).format(\"YYYY-MM-DD\");\r\n return (\r\n // date.getDay() === 0 ||\r\n holidaysList.some((holiday) => holiday.day === formattedDate)\r\n ); // 0 represents Sunday\r\n };\r\n\r\n const titleDisabled: any = ({ date, view }: any) => {\r\n if (view === \"month\" && isSunday(date)) {\r\n return true; // Disable days\r\n }\r\n return false;\r\n };\r\n\r\n return (\r\n \r\n {label ? (\r\n \r\n {label}\r\n \r\n ) : null}\r\n \r\n setKey(Math.random())}\r\n {...config}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n disabled={disabled}\r\n tileDisabled={disabledTitle && titleDisabled}\r\n />\r\n \r\n {!_.isEmpty(errorMessage) ? (\r\n {errorMessage}\r\n ) : null}\r\n {helperText ? {helperText} : null}\r\n \r\n );\r\n }\r\n);\r\n\r\nexport default DatePicker;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport _ from \"lodash\";\r\nimport \"react-phone-input-2/lib/style.css\";\r\n\r\nimport {\r\n FormControl,\r\n FormErrorMessage,\r\n FormHelperText,\r\n FormLabel,\r\n Input,\r\n InputGroup,\r\n InputRightElement,\r\n type InputProps,\r\n Box,\r\n} from \"@chakra-ui/react\";\r\nimport { useTranslation } from \"react-multi-lang\";\r\n\r\ninterface IProps extends InputProps {\r\n label?: string;\r\n isError?: boolean;\r\n errorMessage?: string;\r\n helperText?: string;\r\n style?: object;\r\n labelSx?: object;\r\n values?: {\r\n days: number;\r\n hours: number;\r\n } | null;\r\n onValuesChange(days: number, hours: number): void;\r\n}\r\n\r\nconst EstimatedInput = React.forwardRef(\r\n (\r\n {\r\n label = \"\",\r\n isError,\r\n errorMessage = \"\",\r\n helperText = \"\",\r\n style = {},\r\n labelSx,\r\n values,\r\n onValuesChange,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [days, setDays] = useState(\"0\");\r\n const [hours, setHours] = useState(\"0\");\r\n const t = useTranslation();\r\n\r\n useEffect(() => {}, [ref]);\r\n\r\n useEffect(() => {\r\n if (!_.isEmpty(values)) {\r\n setDays(_.toString(values.days));\r\n setHours(_.toString(values.hours));\r\n }\r\n }, [values]);\r\n\r\n const handleDaysChange = (event: React.ChangeEvent) =>\r\n setDays(event.target.value);\r\n\r\n const handleHoursChange = (event: React.ChangeEvent) =>\r\n setHours(event.target.value);\r\n\r\n const handlePaste = (event: any) => {\r\n event.preventDefault();\r\n const clipboardData = event?.clipboardData || window.Clipboard;\r\n const pastedData = clipboardData.getData(\"text\");\r\n if (!isNaN(pastedData))\r\n document.execCommand(\"insertText\", false, pastedData);\r\n };\r\n\r\n const convertLeadingZero = (inputString: string) => {\r\n if (_.startsWith(inputString, \"0\")) {\r\n const numberPart = inputString.substring(1);\r\n const result = _.toNumber(numberPart);\r\n return result;\r\n }\r\n return _.toNumber(inputString);\r\n };\r\n\r\n return (\r\n \r\n {label ? (\r\n \r\n {label}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n {\r\n if (!e.target.value || e.target.value === \"0\") setDays(\"\");\r\n }}\r\n onBlur={(e) => {\r\n if (!e.target.value || e.target.value === \"0\") setDays(\"0\");\r\n const newDays = convertLeadingZero(e.target.value);\r\n const newHours = _.toNumber(hours);\r\n onValuesChange(newDays, newHours);\r\n }}\r\n />\r\n \r\n {t(\"label.days\")}\r\n \r\n \r\n \r\n \r\n \r\n {\r\n if (!e.target.value || e.target.value === \"0\") setHours(\"\");\r\n }}\r\n onBlur={(e) => {\r\n if (!e.target.value || e.target.value === \"0\") setHours(\"0\");\r\n const newHours = convertLeadingZero(e.target.value);\r\n const newDays = _.toNumber(days);\r\n onValuesChange(newDays, newHours);\r\n }}\r\n />\r\n \r\n {t(\"label.hours\")}\r\n \r\n \r\n \r\n \r\n {isError ? {errorMessage} : null}\r\n {helperText ? {helperText} : null}\r\n \r\n );\r\n }\r\n);\r\n\r\nexport default EstimatedInput;\r\n","import React from \"react\";\nimport isEmpty from \"lodash/isEmpty\";\nimport includes from \"lodash/includes\";\n\nimport { Text, Box, Stack, VStack, Icon } from \"@chakra-ui/react\";\n\nimport { PencilIcon } from \"@heroicons/react/24/outline\";\n\ninterface IProps {\n label?: string;\n onFileChange(newFiles: File[]): void;\n files: File[];\n message?: string;\n accept?: string;\n direction?: \"row\" | \"column\";\n containerSx?: object;\n labelSx?: object;\n required?: boolean;\n preview?: string;\n isOnlyRead?: boolean;\n}\n\nconst ALLOWED_IMAGE = [\"image/jpg\", \"image/jpeg\", \"image/png\"];\n\nconst UploadFile: React.FC = ({\n onFileChange,\n message = \"\",\n files = [],\n accept = \".png,.jpg,.jpeg\",\n direction = \"column\",\n containerSx,\n isOnlyRead = false,\n preview = \"\",\n}) => {\n const [validateMessage, setValidateMessage] = React.useState(\"\");\n const [previewImage, setPreviewImage] = React.useState(preview);\n const inputRef = React.useRef(null);\n\n React.useEffect(() => {\n if (isEmpty(files)) {\n if (inputRef && inputRef.current) inputRef.current.value = \"\";\n } else {\n const imageUrl = URL.createObjectURL(files[0]);\n setPreviewImage(imageUrl);\n }\n }, [files]);\n\n React.useEffect(() => {\n setValidateMessage(message);\n }, [message]);\n\n const onChangeFile = (e: any) => {\n if (e) {\n setValidateMessage(\"\");\n const targetFiles = e.target.files;\n if (targetFiles.length !== 0) {\n const resolveFile: File = targetFiles[0];\n let isValid = true;\n if (resolveFile.size > 5000000) {\n setValidateMessage(\"Image large than 5MB\");\n isValid = false;\n }\n if (!includes(ALLOWED_IMAGE, resolveFile.type)) {\n setValidateMessage(\"Image is wrong type\");\n isValid = false;\n }\n if (isValid) onFileChange([resolveFile]);\n else onFileChange([]);\n }\n }\n };\n\n return (\n \n \n {\n if (inputRef.current && !isOnlyRead) inputRef.current.click();\n }}\n sx={{\n position: \"relative\",\n boxShadow: \"0 7px 25px rgba(0,0,0,0.08)\",\n boxSizing: \"border-box\",\n transition: \"all ease 0.25s\",\n overflow: \"hidden\",\n width: \"180px\",\n height: \"80px\",\n maxHeight: \"250px\",\n margin: \"0 auto\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexDirection: \"column\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n borderColor: !isEmpty(message) ? \"error.main\" : \"#ccc\",\n \"&:hover\": {\n borderColor: !isEmpty(message)\n ? \"error.main\"\n : !isOnlyRead\n ? \"rgba(0, 0, 0, 0.87)\"\n : \"none\",\n \"& .image-buttons\": {\n opacity: !isOnlyRead ? 1 : 0,\n },\n },\n }}\n >\n \n {!isOnlyRead && (\n \n )}\n onChangeFile(e)}\n style={{\n display: \"none\",\n width: \"100%\",\n height: \"100%\",\n backgroundColor: \"red\",\n }}\n />\n \n \n \n \n {validateMessage && (\n \n *{validateMessage}\n \n )}\n \n );\n};\n\nexport default UploadFile;\n","const defaultMentionStyle = {\r\n control: {\r\n backgroundColor: \"#fff\",\r\n fontSize: 14,\r\n fontWeight: \"normal\",\r\n border: \"none\",\r\n borderRadius: \"4px\",\r\n },\r\n\r\n \"&multiLine\": {\r\n control: {\r\n wordBreak: \"break-word\",\r\n maxHeight: 63,\r\n overflow: \"auto\",\r\n },\r\n highlighter: {\r\n padding: 9,\r\n border: \"1px solid transparent\",\r\n },\r\n input: {\r\n padding: 9,\r\n border: \"none\",\r\n outline: \"none\",\r\n },\r\n },\r\n\r\n \"&singleLine\": {\r\n display: \"inline-block\",\r\n width: 180,\r\n highlighter: {\r\n padding: 1,\r\n border: \"2px inset transparent\",\r\n },\r\n input: {\r\n padding: 1,\r\n border: \"2px inset\",\r\n },\r\n },\r\n\r\n suggestions: {\r\n list: {\r\n backgroundColor: \"white\",\r\n border: \"1px solid rgba(0,0,0,0.15)\",\r\n fontSize: 14,\r\n },\r\n item: {\r\n padding: \"5px 15px\",\r\n borderBottom: \"1px solid rgba(0,0,0,0.15)\",\r\n \"&focused\": {\r\n backgroundColor: \"#cee4e5\",\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport default defaultMentionStyle;\r\n","export default {\r\n backgroundColor: \"#cee4e5\",\r\n};\r\n","import React, { useState, useEffect, memo } from \"react\";\r\nimport { Grid } from \"@giphy/react-components\";\r\nimport { GiphyFetch } from \"@giphy/js-fetch-api\";\r\nimport {\r\n Box,\r\n Icon,\r\n Input,\r\n InputGroup,\r\n InputRightElement,\r\n} from \"@chakra-ui/react\";\r\nimport { XCircleIcon } from \"@heroicons/react/24/outline\";\r\n\r\nconst giphyFetch = new GiphyFetch(\"sXpGFDGZs0Dv1mmNFvYaGUvYwKX0PWIh\");\r\n\r\nconst Giphy: React.FC<{ onGifClick: any }> = ({ onGifClick }) => {\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n const [offset, setOffset] = useState(0);\r\n\r\n const fetchGifs = (offset: number) => {\r\n return searchQuery\r\n ? giphyFetch.search(searchQuery, { offset, limit: 10 })\r\n : giphyFetch.trending({ offset, limit: 10 });\r\n };\r\n\r\n useEffect(() => {\r\n fetchGifs(offset);\r\n }, []);\r\n\r\n const handleOnGifsFetched = () => {};\r\n\r\n return (\r\n \r\n \r\n {\r\n setSearchQuery(e.target.value);\r\n setOffset(0);\r\n }}\r\n placeholder=\"Search Gif\"\r\n size=\"sm\"\r\n w=\"full\"\r\n />\r\n {searchQuery && (\r\n \r\n {\r\n e.preventDefault();\r\n setSearchQuery(\"\");\r\n }}\r\n />\r\n \r\n )}\r\n \r\n \r\n fetchGifs(offset)}\r\n width={350}\r\n columns={3}\r\n gutter={6}\r\n onGifsFetched={handleOnGifsFetched}\r\n />\r\n \r\n \r\n );\r\n};\r\n\r\nexport default memo(Giphy);\r\n","import React, { useState, useEffect, useCallback, useRef } from \"react\";\r\nimport _ from \"lodash\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport { Mention, MentionsInput } from \"react-mentions\";\r\nimport EmojiPicker from \"emoji-picker-react\";\r\nimport { IGif } from \"@giphy/js-types\";\r\nimport Dropzone from \"react-dropzone\";\r\nimport {\r\n FileMosaic,\r\n FullScreen,\r\n ImagePreview,\r\n VideoPreview,\r\n} from \"@files-ui/react\";\r\n\r\nimport {\r\n Box,\r\n Avatar,\r\n Text,\r\n IconButton,\r\n HStack,\r\n Portal,\r\n Popover,\r\n PopoverTrigger,\r\n PopoverContent,\r\n Button,\r\n // Icon,\r\n useOutsideClick,\r\n} from \"@chakra-ui/react\";\r\nimport {\r\n FaceSmileIcon,\r\n GifIcon,\r\n PaperClipIcon,\r\n // CheckCircleIcon,\r\n PaperAirplaneIcon,\r\n // DocumentDuplicateIcon,\r\n} from \"@heroicons/react/24/outline\";\r\n\r\n// import { Toast } from \"@/Widgets\";\r\n\r\nimport defaultStyle from \"./defaultStyle\";\r\nimport defaultMentionStyle from \"./defaultMentionStyle\";\r\nimport Giphy from \"../Giphy\";\r\nimport { Toast } from \"@/Widgets\";\r\nimport { useTranslation } from \"react-multi-lang\";\r\n// import Utils from \"@/Utils\";\r\n\r\ninterface UuidInfo {\r\n name: string;\r\n id: string;\r\n}\r\n\r\ninterface IDataStructure {\r\n id: string;\r\n display: string;\r\n avatar?: string;\r\n}\r\n\r\ninterface ICallbackData {\r\n content?: string;\r\n fileAttachments?: any[];\r\n tagMember?: string[];\r\n}\r\ninterface ISectionProps {\r\n value?: string;\r\n onSubmit(data: ICallbackData): void;\r\n onGifSelect?(gif: IGif): void;\r\n payload?: IDataStructure[];\r\n sx?: object;\r\n isShowBottomBar?: boolean;\r\n isClear?: boolean;\r\n getFor?: \"chat\" | \"board\";\r\n isDisabled?: boolean;\r\n placeholder?: string;\r\n}\r\n\r\nconst fileItemStyles = {\r\n \".files-ui-file-mosaic-main-container,.files-ui-file-mosaic-main-layer.files-ui-layer,.files-ui-file-mosaic-main-container .files-ui-file-mosaic-icon-layer-container\":\r\n {\r\n // width: \"135px\",\r\n // height: \"135px\",\r\n },\r\n \".files-ui-file-mosaic-file-name, .filesui-file-item-size\": {\r\n display: \"none\",\r\n },\r\n \".file-mosaic-main-layer-header > .files-ui-file-icon\": {\r\n minWidth: \"10px!important\",\r\n minHeight: \"10px!important\",\r\n },\r\n \".files-ui-file-mosaic-main-container\": {\r\n \"&:hover\": {\r\n \".files-ui-tooltip\": {\r\n display: \"none\",\r\n },\r\n },\r\n },\r\n};\r\n\r\nconst MAX_FILES = 10;\r\n// const MAX_SIZE = 10 * 1024 * 1024;\r\n\r\nconst ATTACHMENT_ACCEPT = {\r\n // \"image/*\": [],\r\n // \"video/*\": [],\r\n // \"application/pdf\": [\".pdf\"],\r\n // \"application/msword\": [\".doc\"],\r\n // \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": [\r\n // \".docx\",\r\n // ],\r\n // \"application/vnd.ms-excel\": [\".xls\"],\r\n // \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": [\r\n // \".xlsx\",\r\n // ],\r\n // \"text/csv\": [\".csv\"],\r\n // \"application/vnd.ms-powerpoint\": [\".ppt\"],\r\n // \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": [\r\n // \".pptx\",\r\n // ],\r\n};\r\n\r\n// const UPLOAD_ACCEPT = {\r\n// // \"image/*\": [],\r\n// };\r\n\r\nconst CommentBox: React.FC = ({\r\n payload = [],\r\n value,\r\n onSubmit,\r\n sx,\r\n isShowBottomBar,\r\n isClear,\r\n onGifSelect,\r\n getFor = \"board\",\r\n isDisabled = false,\r\n placeholder,\r\n}) => {\r\n const dropzoneRef = useRef(null);\r\n const emojiRef = useRef(null);\r\n const inputRef = useRef(null);\r\n\r\n useOutsideClick({\r\n ref: emojiRef,\r\n handler: () => {\r\n if (isEmojiPopoverOpen) {\r\n setIsEmojiPopoverOpen(false);\r\n }\r\n },\r\n });\r\n const t = useTranslation();\r\n\r\n const [isFocus, setIsFocus] = useState(false);\r\n const [isError, setIsError] = useState(false);\r\n const [isDragging, setIsDragging] = useState(false);\r\n const [isEmojiPopoverOpen, setIsEmojiPopoverOpen] = useState(false);\r\n const [isGifPopoverOpen, setIsGifPopoverOpen] = useState(false);\r\n\r\n const [accept, setAccept] = useState(ATTACHMENT_ACCEPT);\r\n const [currentValue, setCurrentValue] = useState(\"\");\r\n const [selectedSuggestions, setSelectedSuggestions] = useState(\r\n []\r\n );\r\n const [extFiles, setExtFiles] = useState([]);\r\n const [imageSrc, setImageSrc] = useState(undefined);\r\n const [videoSrc, setVideoSrc] = useState(undefined);\r\n const [selectedCopyFile, setSelectedCopyFile] = useState(null);\r\n\r\n useEffect(() => {\r\n setCurrentValue(value || \"\");\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n if (isClear) {\r\n handleReset();\r\n }\r\n }, [isClear]);\r\n\r\n useEffect(() => {\r\n setIsError(_.some(extFiles, (file) => !file.valid));\r\n }, [extFiles]);\r\n\r\n useEffect(() => {\r\n if (selectedCopyFile !== null) {\r\n const timeoutId = setTimeout(() => {\r\n setSelectedCopyFile(null);\r\n }, 2000);\r\n return () => clearTimeout(timeoutId);\r\n }\r\n return () => {};\r\n }, [selectedCopyFile]);\r\n\r\n const onDelete = (id: string) => {\r\n const newFiles = extFiles.filter((x) => x.id !== id);\r\n setExtFiles(newFiles);\r\n };\r\n\r\n const handleReset = () => {\r\n setIsError(false);\r\n setExtFiles([]);\r\n setCurrentValue(\"\");\r\n setSelectedSuggestions([]);\r\n setIsEmojiPopoverOpen(false);\r\n setIsGifPopoverOpen(false);\r\n setIsFocus(true);\r\n inputRef?.current?.focus();\r\n };\r\n\r\n const handleAttachmentClick = useCallback(() => {\r\n setAccept(ATTACHMENT_ACCEPT);\r\n dropzoneRef?.current && dropzoneRef?.current?.open();\r\n }, [dropzoneRef]);\r\n\r\n // const handleUploadClick = useCallback(() => {\r\n // setAccept(UPLOAD_ACCEPT);\r\n // dropzoneRef?.current && dropzoneRef?.current?.open();\r\n // }, [dropzoneRef]);\r\n\r\n const handleDownload = async (fileId: string, downloadUrl: string) => {\r\n // Check if downloadUrl is provided\r\n if (!downloadUrl) return;\r\n\r\n try {\r\n // Fetch the file content from the provided downloadUrl\r\n const image = await fetch(downloadUrl);\r\n const imageBlob = await image.blob();\r\n const imageURL = URL.createObjectURL(imageBlob);\r\n\r\n // Create an anchor element for initiating the download\r\n const anchor = document.createElement(\"a\");\r\n\r\n // Retrieve the fileName based on fileId from the 'files' array\r\n const fileName =\r\n _.filter(extFiles, (file) => file.id === fileId)[0]?.file\r\n ?.nameOriginal || \"New file\";\r\n\r\n // Set the fileName as the download attribute for the anchor element\r\n anchor.download = fileName;\r\n\r\n // Set the URL.createObjectURL result as the href for the anchor element\r\n anchor.href = imageURL;\r\n\r\n // Append the anchor to the document body, trigger the click event, and remove the anchor\r\n document.body.appendChild(anchor);\r\n anchor.click();\r\n document.body.removeChild(anchor);\r\n\r\n // Revoke the object URL to free up resources\r\n URL.revokeObjectURL(imageURL);\r\n } catch (error: any) {\r\n // Handle any download errors\r\n Toast({ status: \"error\", title: error?.message });\r\n console.error(error);\r\n }\r\n };\r\n\r\n const handleSee = (imageSource: string) => {\r\n setImageSrc(imageSource);\r\n };\r\n\r\n const handleWatch = (videoSource: string) => {\r\n setVideoSrc(videoSource);\r\n };\r\n\r\n const handleAbort = (id: string) => {\r\n setExtFiles(\r\n extFiles.map((ef) => {\r\n if (ef.id === id) {\r\n return { ...ef, uploadStatus: \"aborted\" };\r\n } else return { ...ef };\r\n })\r\n );\r\n };\r\n\r\n const handleCancel = (id: string) => {\r\n setExtFiles(\r\n extFiles.map((ef) => {\r\n if (ef.id === id) {\r\n return { ...ef, uploadStatus: undefined };\r\n } else return { ...ef };\r\n })\r\n );\r\n };\r\n\r\n // const handleCopy = (id: string) => {\r\n // const findSelectedFile = _.find(extFiles, (file) => file.id === id);\r\n // if (findSelectedFile)\r\n // Utils.copyImageToClipboard(findSelectedFile?.downloadUrl);\r\n // };\r\n\r\n const handlePaste = (e: any) => {\r\n const clipboardData = e.clipboardData || window.Clipboard;\r\n\r\n if (clipboardData && clipboardData.items) {\r\n for (let i = 0; i < clipboardData.items.length; i++) {\r\n const item = clipboardData.items[i];\r\n\r\n // Kiểm tra xem mục clipboard có phải là một hình ảnh không\r\n if (item.type.indexOf(\"image\") !== -1) {\r\n const blob = item.getAsFile();\r\n\r\n // Xử lý blob và thêm vào extFiles\r\n handleImageBlob(blob);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const handleImageBlob = (blob: Blob) => {\r\n const newFile = {\r\n id: uuidv4(),\r\n errors: undefined,\r\n file: new File([blob], \"pasted-image.png\", { type: blob.type }),\r\n name: \"pasted-image.png\",\r\n size: blob.size,\r\n valid: true,\r\n type: blob.type,\r\n };\r\n setExtFiles((prevFiles) => [...prevFiles, newFile]);\r\n };\r\n\r\n const handleSubmit = () => {\r\n const resolvedData = {};\r\n if (!_.isEmpty(currentValue))\r\n _.assign(resolvedData, {\r\n content: currentValue,\r\n });\r\n\r\n if (!_.isEmpty(selectedSuggestions))\r\n _.assign(resolvedData, {\r\n tagMember: selectedSuggestions,\r\n });\r\n if (!_.isEmpty(extFiles))\r\n _.assign(resolvedData, {\r\n fileAttachments: _.map(extFiles, (extFile) => extFile?.file),\r\n });\r\n\r\n if (!_.isEmpty(resolvedData)) {\r\n onSubmit(resolvedData);\r\n handleReset();\r\n }\r\n };\r\n\r\n const _renderSuggestions = (suggestion: any) => {\r\n const isAlreadySelected = selectedSuggestions.some(\r\n (selected) => selected.id === suggestion.id\r\n );\r\n return (\r\n {\r\n if (\r\n !selectedSuggestions.some(\r\n (selected) => selected.id === suggestion.id\r\n ) &&\r\n !isAlreadySelected\r\n ) {\r\n setSelectedSuggestions((prevSelected) => [\r\n ...prevSelected,\r\n suggestion,\r\n ]);\r\n }\r\n }}\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 5,\r\n width: \"100%\",\r\n }}\r\n >\r\n \r\n {suggestion.display}\r\n \r\n );\r\n };\r\n\r\n const _renderFileAttachments = () => {\r\n return (\r\n \r\n {!_.isEmpty(extFiles) &&\r\n _.map(extFiles, (extFile, index: number) => (\r\n \r\n {/* {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleCopy(extFile?.id);\r\n setSelectedCopyFile(extFile);\r\n }}\r\n >\r\n \r\n */}\r\n\r\n {/* Copied */}\r\n {/* {false && (\r\n \r\n \r\n \r\n \r\n Copied\r\n \r\n \r\n \r\n )} */}\r\n \r\n \r\n ))}\r\n \r\n );\r\n };\r\n\r\n const _renderMentionInput = () => (\r\n {\r\n const newValue = e.target.value;\r\n const regex = /@\\[([^\\]]+)\\]\\(([^)]+)\\)|@\\b([^\\s,@]+)\\b/g;\r\n const mentions = newValue.match(regex);\r\n if (!mentions) setSelectedSuggestions([]);\r\n setCurrentValue(newValue);\r\n }}\r\n placeholder={placeholder ? placeholder : t(\"label.mentionPeopleUsing\")}\r\n a11ySuggestionsListLabel={\"Suggested mentions\"}\r\n style={defaultStyle}\r\n forceSuggestionsAboveCursor={true}\r\n onFocus={() => setIsFocus(true)}\r\n onBlur={() => setIsFocus(false)}\r\n onKeyDown={(e) => {\r\n // Prevent default behavior of Enter key\r\n // if (e.key === \"Enter\" && currentValue.trim() !== \"\") {\r\n // e.preventDefault();\r\n // handleSubmit();\r\n // }\r\n if (e.key === \"Enter\") {\r\n if (e.ctrlKey || e.shiftKey) {\r\n e.preventDefault();\r\n setCurrentValue(currentValue + \"\\n\");\r\n } else if (currentValue.trim() !== \"\") {\r\n e.preventDefault();\r\n handleSubmit();\r\n }\r\n }\r\n }}\r\n onPaste={handlePaste}\r\n disabled={isDisabled}\r\n >\r\n `@${display}`}\r\n />\r\n \r\n );\r\n\r\n const _renderDropzone = () => (\r\n {\r\n const resolvedFiles = _.map(acceptedFiles, (result) => ({\r\n id: uuidv4(),\r\n errors: undefined,\r\n file: result,\r\n name: result?.name,\r\n size: result?.size,\r\n valid: true,\r\n type: result?.type,\r\n }));\r\n\r\n const rejectedFilesWithErrors = _.map(\r\n rejectedFiles,\r\n (rejectedFile) => ({\r\n id: uuidv4(),\r\n errors: [\"File not accepted.\"],\r\n file: rejectedFile.file,\r\n size: rejectedFile?.file?.size,\r\n valid: false,\r\n type: rejectedFile?.file?.type,\r\n })\r\n );\r\n\r\n const allFiles = [...resolvedFiles, ...rejectedFilesWithErrors];\r\n setExtFiles((prevState) => [...prevState, ...allFiles]);\r\n }}\r\n >\r\n {({ getRootProps, getInputProps }) => (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n\r\n const _renderBottomBar = () =>\r\n isShowBottomBar && (\r\n \r\n \r\n \r\n \r\n }\r\n sx={{\r\n bg: \"none\",\r\n \"&:hover\": {\r\n bg: \"none\",\r\n },\r\n }}\r\n onClick={() => setIsEmojiPopoverOpen(true)}\r\n isDisabled={isDisabled}\r\n />\r\n \r\n \r\n \r\n \r\n {\r\n setCurrentValue(\r\n (prevValue) => `${prevValue}${emoji?.emoji}`\r\n );\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n setIsGifPopoverOpen(false)}\r\n >\r\n \r\n }\r\n sx={{\r\n bg: \"none\",\r\n \"&:hover\": {\r\n bg: \"none\",\r\n },\r\n }}\r\n onClick={() => setIsGifPopoverOpen(true)}\r\n isDisabled={isDisabled}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {\r\n e.preventDefault();\r\n if (onGifSelect) {\r\n onGifSelect(gif);\r\n handleReset();\r\n }\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n }\r\n sx={{\r\n bg: \"none\",\r\n \"&:hover\": {\r\n bg: \"none\",\r\n },\r\n }}\r\n onClick={handleAttachmentClick}\r\n isDisabled={isDisabled}\r\n />\r\n {/* }\r\n sx={{\r\n bg: \"none\",\r\n \"&:hover\": {\r\n bg: \"none\",\r\n },\r\n }}\r\n onClick={handleUploadClick}\r\n /> */}\r\n \r\n {getFor === \"board\" ? (\r\n \r\n {t(\"button.comment\")}\r\n \r\n ) : (\r\n }\r\n sx={{\r\n bg: \"none\",\r\n \"&:hover\": {\r\n bg: \"none\",\r\n },\r\n }}\r\n disabled={\r\n ((!currentValue || _.trim(currentValue) === \"\") &&\r\n _.isEmpty(extFiles)) ||\r\n isError ||\r\n isDisabled\r\n }\r\n color={\r\n (!currentValue && _.isEmpty(extFiles)) || isError\r\n ? \"gray.400\"\r\n : \"blue.500\"\r\n }\r\n onClick={handleSubmit}\r\n />\r\n )}\r\n \r\n );\r\n\r\n const _renderPreview = () => (\r\n \r\n {imageSrc && (\r\n {\r\n setImageSrc(undefined);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {videoSrc && (\r\n {\r\n setVideoSrc(undefined);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n \r\n );\r\n\r\n return (\r\n !isDragging && setIsDragging(true)}\r\n onDragOver={() => !isDragging && setIsDragging(true)}\r\n onDragEnd={() => isDragging && setIsDragging(false)}\r\n onMouseLeave={() => isDragging && setIsDragging(false)}\r\n onDrop={(e) => {\r\n setIsDragging(false);\r\n e.preventDefault();\r\n const droppedFiles = e.dataTransfer.files;\r\n if (droppedFiles.length === 0) return;\r\n let tempFiles = [...extFiles];\r\n _.forEach(droppedFiles, (file) => {\r\n const isValidFileNumber = _.size(tempFiles) <= MAX_FILES - 1;\r\n tempFiles.push({\r\n id: uuidv4(),\r\n errors: [\r\n `${\r\n !isValidFileNumber\r\n ? `Max amount of files (${MAX_FILES}) has been reached.`\r\n : undefined\r\n }`,\r\n ],\r\n file: file,\r\n name: file.name,\r\n size: file.size,\r\n valid: isValidFileNumber,\r\n type: file.type,\r\n });\r\n });\r\n setExtFiles(tempFiles);\r\n }}\r\n >\r\n \r\n {_renderFileAttachments()}\r\n \r\n {_renderMentionInput()}\r\n {_renderDropzone()}\r\n \r\n {_renderBottomBar()}\r\n {_renderPreview()}\r\n \r\n \r\n );\r\n};\r\nexport default CommentBox;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport _ from \"lodash\";\r\n\r\nimport {\r\n Dropzone,\r\n FileMosaic,\r\n FullScreen,\r\n ImagePreview,\r\n VideoPreview,\r\n} from \"@files-ui/react\";\r\n\r\nimport { Stack, Box, Icon, Text, ScaleFade, Portal } from \"@chakra-ui/react\";\r\nimport { Toast } from \"@/Widgets\";\r\nimport Utils from \"@/Utils\";\r\nimport {\r\n CheckCircleIcon,\r\n DocumentDuplicateIcon,\r\n} from \"@heroicons/react/24/outline\";\r\nimport { useTranslation } from \"react-multi-lang\";\r\n\r\ninterface UploadFileInputProps {\r\n isEditing?: boolean;\r\n files?: any[];\r\n onFilesChange(files: any[]): void;\r\n sx?: object;\r\n maxSize?: number;\r\n clearIcon?: boolean;\r\n accept?: string;\r\n maxFiles?: number;\r\n onErrors?(valid: boolean): void;\r\n disabled?: boolean;\r\n isCancel?: boolean;\r\n}\r\n\r\nconst UploadFileInput: React.FC = ({\r\n isEditing,\r\n files,\r\n sx,\r\n onFilesChange,\r\n maxSize,\r\n clearIcon = true,\r\n accept = \"image/*, video/*\",\r\n maxFiles,\r\n onErrors,\r\n disabled,\r\n isCancel,\r\n}) => {\r\n const t = useTranslation();\r\n const [extFiles, setExtFiles] = useState([]);\r\n const [imageSrc, setImageSrc] = useState(undefined);\r\n const [videoSrc, setVideoSrc] = useState(undefined);\r\n const [selectedCopyFile, setSelectedCopyFile] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!_.isEmpty(files) || (isCancel && !_.isEqual(files, extFiles)))\r\n fetchData(files);\r\n }, [files, isCancel]);\r\n\r\n useEffect(() => {\r\n if (!_.isEmpty(extFiles) && onErrors) {\r\n onErrors(_.every(extFiles, (file) => file.valid));\r\n }\r\n }, [extFiles]);\r\n\r\n useEffect(() => {\r\n if (selectedCopyFile !== null) {\r\n const timeoutId = setTimeout(() => {\r\n setSelectedCopyFile(null);\r\n }, 500);\r\n return () => clearTimeout(timeoutId);\r\n }\r\n return () => {};\r\n }, [selectedCopyFile]);\r\n\r\n const fetchData = async (files: any) => {\r\n const promises = _.map(files, (item) =>\r\n Utils.getFileFromURL(item.file.path, item.file.nameOriginal)\r\n .then((newFile) => newFile)\r\n .catch((error) => {\r\n Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n return null;\r\n })\r\n );\r\n\r\n try {\r\n const results = await Promise.all(promises);\r\n\r\n if (!_.isEmpty(files) && !_.isEmpty(results)) {\r\n setExtFiles(\r\n _.map(results, (result, index: number) => ({\r\n id: files?.[index]?.id,\r\n errors: undefined,\r\n file: result,\r\n name: result?.name,\r\n size: result?.size,\r\n valid: true,\r\n downloadUrl: files?.[index]?.file?.path,\r\n videoUrl:\r\n result?.name &&\r\n _.includes(Utils.getMimeTypeFromFile(result?.name), \"video\")\r\n ? files?.[index]?.file?.path\r\n : \"\",\r\n }))\r\n );\r\n } else {\r\n setExtFiles([]);\r\n }\r\n } catch (error: any) {\r\n Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n } finally {\r\n }\r\n };\r\n\r\n const updateFiles = (incomingFiles: any[]) => {\r\n setExtFiles(incomingFiles);\r\n onFilesChange(incomingFiles);\r\n };\r\n\r\n const onDelete = (id: string) => {\r\n const newFiles = extFiles.filter((x) => x.id !== id);\r\n setExtFiles(newFiles);\r\n onFilesChange(newFiles);\r\n };\r\n\r\n /**\r\n * Handles the download of a file identified by fileId from a given downloadUrl.\r\n * Downloads the file content, creates a Blob, and triggers a download link.\r\n *\r\n * @param {string} fileId - The unique identifier for the file.\r\n * @param {string} downloadUrl - The URL from which to fetch the file.\r\n */\r\n const handleDownload = async (fileId: string, downloadUrl: string) => {\r\n // Check if downloadUrl is provided\r\n if (!downloadUrl) return;\r\n\r\n try {\r\n // Fetch the file content from the provided downloadUrl\r\n const image = await fetch(downloadUrl);\r\n const imageBlob = await image.blob();\r\n const imageURL = URL.createObjectURL(imageBlob);\r\n\r\n // Create an anchor element for initiating the download\r\n const anchor = document.createElement(\"a\");\r\n\r\n // Retrieve the fileName based on fileId from the 'files' array\r\n const fileName =\r\n _.filter(files, (file) => file.id === fileId)[0]?.file?.nameOriginal ||\r\n \"New file\";\r\n\r\n // Set the fileName as the download attribute for the anchor element\r\n anchor.download = fileName;\r\n\r\n // Set the URL.createObjectURL result as the href for the anchor element\r\n anchor.href = imageURL;\r\n\r\n // Append the anchor to the document body, trigger the click event, and remove the anchor\r\n document.body.appendChild(anchor);\r\n anchor.click();\r\n document.body.removeChild(anchor);\r\n\r\n // Revoke the object URL to free up resources\r\n URL.revokeObjectURL(imageURL);\r\n } catch (error: any) {\r\n // Handle any download errors\r\n Toast({ status: \"error\", title: error?.message });\r\n }\r\n };\r\n\r\n const handleSee = (imageSource: string) => {\r\n setImageSrc(imageSource);\r\n };\r\n\r\n const handleWatch = (videoSource: string) => {\r\n setVideoSrc(videoSource);\r\n };\r\n\r\n // const handleStart = (filesToUpload: any[]) => {\r\n // console.log(\"advanced demo start upload\", filesToUpload);\r\n // };\r\n\r\n // const handleFinish = (uploadedFiles: any[]) => {\r\n // console.log(\"advanced demo finish upload\", uploadedFiles);\r\n // };\r\n\r\n const handleAbort = (id: string) => {\r\n setExtFiles(\r\n extFiles.map((ef) => {\r\n if (ef.id === id) {\r\n return { ...ef, uploadStatus: \"aborted\" };\r\n } else return { ...ef };\r\n })\r\n );\r\n };\r\n\r\n const handleCancel = (id: string) => {\r\n setExtFiles(\r\n extFiles.map((ef) => {\r\n if (ef.id === id) {\r\n return { ...ef, uploadStatus: undefined };\r\n } else return { ...ef };\r\n })\r\n );\r\n };\r\n\r\n const handleCopy = (id: string) => {\r\n const findSelectedFile = _.find(extFiles, (file) => file.id === id);\r\n if (findSelectedFile)\r\n Utils.copyImageToClipboard(findSelectedFile?.downloadUrl);\r\n };\r\n\r\n return (\r\n :nth-last-of-type(2), .files-ui-header > :last-child\":\r\n {\r\n display: `${clearIcon ? \"none\" : \"flex\"}!important`,\r\n },\r\n\r\n transition: \"all .3s ease-in-out\",\r\n pointerEvents:\r\n disabled || !isEditing\r\n ? videoSrc || imageSrc\r\n ? \"visible\"\r\n : \"none\"\r\n : \"visible\",\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n justifyContent: \"space-evenly\",\r\n width: \"100%\",\r\n }}\r\n >\r\n {/* {_.isEmpty(files) && !isEditing && --} */}\r\n \r\n {_.map(extFiles, (file, index) => {\r\n return (\r\n \r\n \r\n {!isEditing && _.includes(file?.file?.type, \"image\") && (\r\n {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleCopy(file?.id);\r\n setSelectedCopyFile(file);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {/* Copied */}\r\n {selectedCopyFile?.id === file?.id && (\r\n \r\n \r\n \r\n \r\n Copied\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n {imageSrc && (\r\n {\r\n setImageSrc(undefined);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {videoSrc && (\r\n setVideoSrc(undefined)}\r\n >\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default UploadFileInput;\r\n","import React, { CSSProperties } from \"react\";\r\nimport { Box, Text } from \"@chakra-ui/react\";\r\n\r\ninterface IUserStructure {\r\n id: string;\r\n display: string;\r\n avatar?: string;\r\n}\r\n\r\ninterface ISectionProps {\r\n textContent: string;\r\n users: IUserStructure[];\r\n sx?: CSSProperties;\r\n}\r\n\r\nconst HighlightedText: React.FC = ({\r\n textContent,\r\n users,\r\n sx,\r\n}) => {\r\n const highlightUsers = () => {\r\n const regex = /@\\[([^\\]]+)\\]\\(([^)]+)\\)|@\\b([^\\s,@]+)\\b/g;\r\n\r\n const matches: any[] = [];\r\n let match;\r\n\r\n // Find all matches in the text\r\n while ((match = regex.exec(textContent)) !== null) {\r\n matches.push({\r\n fullMatch: match[0],\r\n usernameWithBrackets: match[1],\r\n userId: match[2],\r\n usernameWithoutBrackets: match[3],\r\n index: match.index,\r\n });\r\n }\r\n\r\n if (matches.length === 0) {\r\n // No mentions found, render the entire textContent\r\n return (\r\n \r\n \r\n {textContent}\r\n \r\n \r\n );\r\n }\r\n\r\n const highlightedText = matches.map((mention, index) => {\r\n const {\r\n usernameWithBrackets,\r\n userId,\r\n usernameWithoutBrackets,\r\n index: mentionIndex,\r\n } = mention;\r\n const username = usernameWithBrackets || usernameWithoutBrackets;\r\n\r\n const userIndex = users.findIndex(\r\n (u) => u.id === userId && u.display === username\r\n );\r\n\r\n if (userIndex !== -1) {\r\n const user = users[userIndex];\r\n const mentionComponent = (\r\n \r\n @{user.display}\r\n \r\n );\r\n\r\n if (index === 0) {\r\n // If it's the first mention, include the content before it\r\n const contentBeforeFirstMention = textContent.substring(\r\n 0,\r\n mentionIndex\r\n );\r\n return (\r\n \r\n \r\n {contentBeforeFirstMention}\r\n \r\n {mentionComponent}\r\n \r\n );\r\n }\r\n\r\n // Check if there's content between mentions\r\n const prevMention = matches[index - 1];\r\n const contentBetweenMentions = textContent.substring(\r\n prevMention.index + prevMention.fullMatch.length,\r\n mentionIndex\r\n );\r\n\r\n return (\r\n \r\n \r\n {contentBetweenMentions}\r\n \r\n {mentionComponent}\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {mention.fullMatch}\r\n \r\n );\r\n }\r\n });\r\n\r\n // Include the content after the last mention\r\n const lastMention = matches[matches.length - 1];\r\n const contentAfterLastMention = textContent.substring(\r\n lastMention.index + lastMention.fullMatch.length\r\n );\r\n\r\n highlightedText.push(\r\n \r\n {contentAfterLastMention}\r\n \r\n );\r\n\r\n return {highlightedText};\r\n };\r\n\r\n return (\r\n textContent && (\r\n \r\n {highlightUsers()}\r\n \r\n )\r\n );\r\n};\r\n\r\nexport default HighlightedText;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport _ from \"lodash\";\r\n\r\nimport \"react-calendar/dist/Calendar.css\";\r\nimport \"react-clock/dist/Clock.css\";\r\n\r\nimport {\r\n FormControl,\r\n FormHelperText,\r\n FormLabel,\r\n type InputProps,\r\n Stack,\r\n FormErrorMessage,\r\n Box,\r\n} from \"@chakra-ui/react\";\r\n\r\ninterface IProps extends InputProps {\r\n label?: string;\r\n isError?: boolean;\r\n errorMessage?: string;\r\n helperText?: string;\r\n style?: object;\r\n labelSx?: object;\r\n defaultValue?: any;\r\n onTimeChange(newTime: string[]): void;\r\n}\r\n\r\nconst TimePicker = React.forwardRef(\r\n (\r\n {\r\n label = \"\",\r\n isError,\r\n errorMessage = \"\",\r\n helperText = \"\",\r\n style = {},\r\n labelSx,\r\n defaultValue = [\"00:00\", \"00:00\"],\r\n onTimeChange,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [startHours, setStartHours] = useState(\"00\");\r\n const [startMinutes, setStartMinutes] = useState(\"00\");\r\n const [endHours, setEndHours] = useState(\"00\");\r\n const [endMinutes, setEndMinutes] = useState(\"00\");\r\n\r\n const [isFocus, setIsFocus] = useState(false);\r\n\r\n useEffect(() => {}, [ref]);\r\n\r\n useEffect(() => {\r\n if (defaultValue) {\r\n const { startHours, startMinutes, endHours, endMinutes } = defaultValue;\r\n\r\n if (startHours) {\r\n setStartHours(startHours.toString().padStart(2, \"0\"));\r\n }\r\n\r\n if (endHours) {\r\n setEndHours(endHours.toString().padStart(2, \"0\"));\r\n }\r\n\r\n if (startMinutes)\r\n setStartMinutes(startMinutes.toString().padStart(2, \"0\"));\r\n\r\n if (endMinutes) setEndMinutes(endMinutes.toString().padStart(2, \"0\"));\r\n }\r\n }, [defaultValue]);\r\n\r\n const handleHoursChange = (\r\n event: React.ChangeEvent,\r\n setHours: React.Dispatch>\r\n ) => {\r\n let value = event.target.value;\r\n value = Math.min(Math.max(parseInt(value) || 0, 0), 23).toString(); // Update max value to 23 for 24-hour format\r\n setHours(value.padStart(2, \"0\"));\r\n // updateOnChangeCallback();\r\n };\r\n\r\n const handleMinutesChange = (\r\n event: React.ChangeEvent,\r\n setMinutes: React.Dispatch>\r\n ) => {\r\n let value = event.target.value;\r\n value = Math.min(Math.max(parseInt(value) || 0, 0), 59).toString(); // Convert to string\r\n setMinutes(value.padStart(2, \"0\"));\r\n // updateOnChangeCallback();\r\n };\r\n\r\n //const updateOnChangeCallback = () => {\r\n // if (\r\n // startHours !== \"\" &&\r\n // startMinutes !== \"\" &&\r\n // endHours !== \"\" &&\r\n // endMinutes !== \"\"\r\n // ) {\r\n // const formatTime = (hours: string, minutes: string) => {\r\n // return `${hours.toString().padStart(2, \"0\")}:${minutes\r\n // .toString()\r\n // .padStart(2, \"0\")}:00`;\r\n // };\r\n\r\n // const startTime = formatTime(startHours, startMinutes);\r\n\r\n // const endTime = formatTime(endHours, endMinutes);\r\n // onTimeChange([startTime, endTime]);\r\n // }\r\n //};\r\n\r\n useEffect(() => {\r\n if (\r\n startHours !== \"\" &&\r\n startMinutes !== \"\" &&\r\n endHours !== \"\" &&\r\n endMinutes !== \"\"\r\n ) {\r\n const formatTime = (hours: string, minutes: string) => {\r\n return `${hours.toString().padStart(2, \"0\")}:${minutes\r\n .toString()\r\n .padStart(2, \"0\")}:00`;\r\n };\r\n\r\n const startTime = formatTime(startHours, startMinutes);\r\n\r\n const endTime = formatTime(endHours, endMinutes);\r\n onTimeChange([startTime, endTime]);\r\n }\r\n }, [startHours, startMinutes, endHours, endMinutes]);\r\n\r\n return (\r\n \r\n {label ? (\r\n \r\n {label}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n {\r\n handleHoursChange(event, setStartHours);\r\n // updateOnChangeCallback();\r\n }}\r\n min=\"0\"\r\n max=\"23\"\r\n style={{\r\n width: \"25px\",\r\n textAlign: \"center\",\r\n background: isFocus ? \"rgba(255, 0, 0, 0.1)\" : \"transparent\",\r\n }}\r\n onFocus={(e) => {\r\n setIsFocus(true);\r\n if (e.target.value === \"00\" || e.target.value === \"0\")\r\n setStartHours(\"\");\r\n }}\r\n onBlur={(e) => {\r\n if (e.target.value === \"\") setStartHours(\"00\");\r\n setIsFocus(false);\r\n // updateOnChangeCallback();\r\n }}\r\n />\r\n :\r\n {\r\n handleMinutesChange(event, setStartMinutes);\r\n // updateOnChangeCallback();\r\n }}\r\n min=\"0\"\r\n max=\"59\"\r\n style={{\r\n width: \"25px\",\r\n textAlign: \"center\",\r\n background: isFocus ? \"rgba(255, 0, 0, 0.1)\" : \"transparent\",\r\n }}\r\n onFocus={(e) => {\r\n setIsFocus(true);\r\n if (e.target.value === \"00\" || e.target.value === \"0\")\r\n setStartMinutes(\"\");\r\n }}\r\n onBlur={(e) => {\r\n if (e.target.value === \"\") setStartMinutes(\"00\");\r\n setIsFocus(false);\r\n // updateOnChangeCallback();\r\n }}\r\n />\r\n \r\n \r\n -\r\n \r\n \r\n {\r\n handleHoursChange(event, setEndHours);\r\n // updateOnChangeCallback();\r\n }}\r\n min=\"0\"\r\n max=\"23\"\r\n style={{\r\n width: \"25px\",\r\n textAlign: \"center\",\r\n background: isFocus ? \"rgba(255, 0, 0, 0.1)\" : \"transparent\",\r\n }}\r\n onFocus={(e) => {\r\n setIsFocus(true);\r\n if (e.target.value === \"00\" || e.target.value === \"0\")\r\n setEndHours(\"\");\r\n }}\r\n onBlur={(e) => {\r\n if (e.target.value === \"\") setEndHours(\"00\");\r\n setIsFocus(false);\r\n // updateOnChangeCallback();\r\n }}\r\n />\r\n :\r\n {\r\n handleMinutesChange(event, setEndMinutes);\r\n // updateOnChangeCallback();\r\n }}\r\n min=\"0\"\r\n max=\"59\"\r\n style={{\r\n width: \"25px\",\r\n textAlign: \"center\",\r\n background: isFocus ? \"rgba(255, 0, 0, 0.1)\" : \"transparent\",\r\n }}\r\n onFocus={(e) => {\r\n setIsFocus(true);\r\n if (e.target.value === \"00\" || e.target.value === \"0\")\r\n setEndMinutes(\"\");\r\n }}\r\n onBlur={(e) => {\r\n if (e.target.value === \"\") setEndMinutes(\"00\");\r\n setIsFocus(false);\r\n // updateOnChangeCallback();\r\n }}\r\n />\r\n \r\n \r\n \r\n {!_.isEmpty(errorMessage) ? (\r\n {errorMessage}\r\n ) : null}\r\n {helperText ? {helperText} : null}\r\n \r\n );\r\n }\r\n);\r\n\r\nexport default TimePicker;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport _ from \"lodash\";\r\nimport \"react-phone-input-2/lib/style.css\";\r\n\r\nimport {\r\n FormControl,\r\n FormErrorMessage,\r\n FormHelperText,\r\n FormLabel,\r\n type InputProps,\r\n} from \"@chakra-ui/react\";\r\nimport {\r\n Select,\r\n OptionBase,\r\n ChakraStylesConfig,\r\n CSSObjectWithLabel,\r\n} from \"chakra-react-select\";\r\nimport { useTranslation } from \"react-multi-lang\";\r\n\r\ninterface IOption extends OptionBase {\r\n label: string;\r\n value: string | string[];\r\n variant?: string;\r\n colorScheme?: string;\r\n extendProps?: any;\r\n}\r\n\r\ninterface IProps {\r\n label?: string;\r\n isError?: boolean;\r\n errorMessage?: string;\r\n helperText?: string;\r\n style?: object;\r\n labelSx?: object;\r\n isClear?: boolean;\r\n isMulti?: boolean;\r\n isRequired?: boolean;\r\n value?: string | string[];\r\n options: IOption[] | any[];\r\n onChange(newValue: string | string[]): void;\r\n customComponents?: any;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n}\r\n\r\nconst Autocomplete = React.forwardRef(\r\n (\r\n {\r\n label = \"\",\r\n isError,\r\n errorMessage = \"\",\r\n helperText = \"\",\r\n style = {},\r\n labelSx,\r\n options,\r\n isRequired,\r\n isMulti,\r\n isClear,\r\n value,\r\n onChange,\r\n customComponents,\r\n disabled = false,\r\n placeholder,\r\n },\r\n ref\r\n ) => {\r\n const [isFocus, setIsFocus] = useState(false);\r\n const [currentValue, setCurrentValue] = useState(\r\n isMulti ? [] : \"\"\r\n );\r\n const t = useTranslation();\r\n\r\n const chakraStyles: ChakraStylesConfig = {\r\n valueContainer: (provided) => ({\r\n ...provided,\r\n flexWrap: \"nowrap\",\r\n overflow: isFocus ? \"auto\" : \"hidden\",\r\n }),\r\n multiValue: (provided) => ({\r\n ...provided,\r\n minWidth: \"max-content\",\r\n }),\r\n // menuPortal: (base) => ({ ...base, zIndex: 9999 }),\r\n };\r\n\r\n useEffect(() => {}, [ref]);\r\n\r\n useEffect(() => {\r\n if (value) {\r\n const transformedValue = isMulti\r\n ? _.isArray(value)\r\n ? value\r\n : [value]\r\n : [value].toString();\r\n setCurrentValue(transformedValue);\r\n }\r\n }, [value, isMulti]);\r\n\r\n useEffect(() => {\r\n if (isClear) {\r\n if (isMulti) {\r\n setCurrentValue([]);\r\n } else {\r\n setCurrentValue(\"\");\r\n }\r\n onChange(isMulti ? [] : \"\");\r\n }\r\n }, [isClear, isMulti]);\r\n\r\n return (\r\n \r\n {label ? (\r\n \r\n {label}\r\n \r\n ) : null}\r\n \r\n currentValue.includes(option.value)\r\n )\r\n : options.find((option) => option.value === currentValue)\r\n }\r\n onChange={(selectedOptions: any) => {\r\n const selectedValues = isMulti\r\n ? _.map(selectedOptions, (option: IOption) => option.value)\r\n : selectedOptions.value;\r\n\r\n setCurrentValue(selectedValues);\r\n onChange(selectedValues);\r\n }}\r\n components={customComponents}\r\n placeholder={placeholder ? placeholder : t(\"label.select\")}\r\n onBlur={() => setIsFocus(false)}\r\n onFocus={() => setIsFocus(true)}\r\n styles={{\r\n menuPortal: (styles): CSSObjectWithLabel => {\r\n return {\r\n ...styles,\r\n zIndex: 9999,\r\n } as CSSObjectWithLabel;\r\n },\r\n }}\r\n />\r\n\r\n {isError ? {errorMessage} : null}\r\n {helperText ? {helperText} : null}\r\n \r\n );\r\n }\r\n);\r\n\r\nexport default Autocomplete;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport _ from \"lodash\";\r\nimport DateRangePicker, {\r\n DateRangePickerProps,\r\n} from \"@wojtekmaj/react-daterange-picker\";\r\nimport \"@wojtekmaj/react-datetimerange-picker/dist/DateTimeRangePicker.css\";\r\nimport \"react-calendar/dist/Calendar.css\";\r\nimport \"react-clock/dist/Clock.css\";\r\n\r\nimport {\r\n FormControl,\r\n FormErrorMessage,\r\n FormHelperText,\r\n FormLabel,\r\n type InputProps,\r\n Stack,\r\n} from \"@chakra-ui/react\";\r\nimport Utils from \"@/Utils\";\r\n\r\ninterface IProps extends InputProps {\r\n label?: string;\r\n isError?: boolean;\r\n errorMessage?: string;\r\n helperText?: string;\r\n style?: object;\r\n labelSx?: object;\r\n value?: any;\r\n onDateChange(newDate: Date[] | string[] | any): void;\r\n format?: string;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nconst DateRange = React.forwardRef(\r\n (\r\n {\r\n label = \"\",\r\n isError,\r\n errorMessage = \"\",\r\n helperText = \"\",\r\n style = {},\r\n labelSx,\r\n value,\r\n onDateChange,\r\n format = \"dd/MM/yyyy\",\r\n minDate,\r\n maxDate,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [isFocus, setIsFocus] = useState(false);\r\n const [key, setKey] = useState(Math.random());\r\n const language = Utils.getSavedLanguage();\r\n\r\n const config: DateRangePickerProps = {\r\n closeCalendar: true,\r\n onFocus: () => setIsFocus(true),\r\n onBlur: () => setIsFocus(false),\r\n value,\r\n format,\r\n ...(minDate && { minDate }),\r\n ...(maxDate && { maxDate }),\r\n onChange: (value) => onDateChange(value as any),\r\n };\r\n\r\n useEffect(() => {}, [ref]);\r\n\r\n return (\r\n \r\n {label ? (\r\n \r\n {label}\r\n \r\n ) : null}\r\n \r\n setKey(Math.random())}\r\n {...config}\r\n {...(_.isEmpty(value) ? { clearIcon: true } : { clearIcon: null })}\r\n locale={language === \"en\" ? \"en\" : \"vi\"}\r\n />\r\n \r\n {!_.isEmpty(errorMessage) ? (\r\n {errorMessage}\r\n ) : null}\r\n {helperText ? {helperText} : null}\r\n \r\n );\r\n }\r\n);\r\n\r\nexport default DateRange;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport _ from \"lodash\";\r\nimport DateTimeRangePicker, {\r\n DateTimeRangePickerProps,\r\n} from \"@wojtekmaj/react-datetimerange-picker\";\r\nimport \"@wojtekmaj/react-datetimerange-picker/dist/DateTimeRangePicker.css\";\r\nimport \"react-calendar/dist/Calendar.css\";\r\nimport \"react-clock/dist/Clock.css\";\r\n\r\nimport {\r\n FormControl,\r\n FormErrorMessage,\r\n FormHelperText,\r\n FormLabel,\r\n type InputProps,\r\n Stack,\r\n} from \"@chakra-ui/react\";\r\nimport Utils from \"@/Utils\";\r\n\r\ninterface IProps extends InputProps {\r\n label?: string;\r\n isError?: boolean;\r\n errorMessage?: string;\r\n helperText?: string;\r\n style?: object;\r\n labelSx?: object;\r\n value?: any;\r\n onDateChange(newDate: Date[] | string[]): void;\r\n}\r\n\r\nconst DateTimeRange = React.forwardRef(\r\n (\r\n {\r\n label = \"\",\r\n isError,\r\n errorMessage = \"\",\r\n helperText = \"\",\r\n style = {},\r\n labelSx,\r\n value,\r\n onDateChange,\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const [isFocus, setIsFocus] = useState(false);\r\n const [key, setKey] = useState(Math.random());\r\n const language = Utils.getSavedLanguage();\r\n\r\n // const [isOpen, setIsOpen] = useState(false);\r\n const config: DateTimeRangePickerProps = {\r\n // dayPlaceholder: \"DD\",\r\n // monthPlaceholder: \"MM\",\r\n // yearPlaceholder: \"YYYY\",\r\n // hourPlaceholder: \"HH\",\r\n // minutePlaceholder: \"mm\",\r\n // locale: \"vi\",\r\n onFocus: () => setIsFocus(true),\r\n onBlur: () => setIsFocus(false),\r\n value,\r\n onChange: (value) => onDateChange(value as any),\r\n clearIcon: false,\r\n };\r\n\r\n useEffect(() => {\r\n convertLanguageVietnameseToEnglish();\r\n }, []);\r\n\r\n useEffect(() => {}, [ref]);\r\n\r\n const convertVietnameseMonthToEnglishString = (dateString: string) => {\r\n if (!dateString) return \"\";\r\n // Array containing names of months\r\n const monthsArray = [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\",\r\n ];\r\n\r\n // Use regular expression to extract month and year\r\n const match = dateString.match(/tháng (\\d+) năm (\\d+)/);\r\n\r\n // Check if the match is valid\r\n if (!match || match.length !== 3) {\r\n return dateString;\r\n }\r\n\r\n // Parse the month number\r\n const monthNumber = parseInt(match[1], 10);\r\n\r\n // Check if the monthNumber is within the range of 1 to 12\r\n if (monthNumber < 1 || monthNumber > 12 || isNaN(monthNumber)) {\r\n return dateString;\r\n }\r\n\r\n // Get the year from the match\r\n const year = match[2];\r\n\r\n // Return the formatted string in English\r\n return `${monthsArray[monthNumber - 1]} ${year}`;\r\n };\r\n\r\n const convertVietnameseDayToEnglish = (dayAbbreviation: string) => {\r\n const daysMapping = {\r\n \"Th 2\": \"Mon\",\r\n \"Th 3\": \"Tue\",\r\n \"Th 4\": \"Wed\",\r\n \"Th 5\": \"Thu\",\r\n \"Th 6\": \"Fri\",\r\n \"Th 7\": \"Sat\",\r\n Cn: \"Sun\",\r\n };\r\n\r\n return (\r\n daysMapping[dayAbbreviation as keyof typeof daysMapping] ||\r\n dayAbbreviation\r\n );\r\n };\r\n\r\n const convertVietnameseMonthToEnglish = (monthAbbreviation: string) => {\r\n const monthsMapping = {\r\n \"Tháng 1\": \"January\",\r\n \"Tháng 2\": \"February\",\r\n \"Tháng 3\": \"March\",\r\n \"Tháng 4\": \"April\",\r\n \"Tháng 5\": \"May\",\r\n \"Tháng 6\": \"June\",\r\n \"Tháng 7\": \"July\",\r\n \"Tháng 8\": \"August\",\r\n \"Tháng 9\": \"September\",\r\n \"Tháng 10\": \"October\",\r\n \"Tháng 11\": \"November\",\r\n \"Tháng 12\": \"December\",\r\n };\r\n\r\n return (\r\n monthsMapping[monthAbbreviation as keyof typeof monthsMapping] ||\r\n monthAbbreviation\r\n );\r\n };\r\n\r\n const convertLanguageVietnameseToEnglish = () => {\r\n const calendarNode = document.querySelector(\r\n \".react-datetimerange-picker\"\r\n );\r\n if (calendarNode) {\r\n const calendarLabelNode = calendarNode.querySelector(\r\n \".react-calendar__navigation__label\"\r\n );\r\n if (calendarLabelNode) {\r\n const dateString = calendarLabelNode.textContent;\r\n const convertDateString = convertVietnameseMonthToEnglishString(\r\n dateString || \"\"\r\n );\r\n\r\n calendarLabelNode.innerHTML = `${convertDateString}`;\r\n }\r\n const calendarWeekDaysNode = calendarNode.querySelectorAll(\r\n \".react-calendar__month-view__weekdays__weekday\"\r\n );\r\n if (calendarWeekDaysNode) {\r\n calendarWeekDaysNode.forEach((dayNode) => {\r\n const dayAbbreviation = dayNode.textContent?.trim();\r\n if (dayAbbreviation) {\r\n const englishDayAbbreviation =\r\n convertVietnameseDayToEnglish(dayAbbreviation);\r\n dayNode.textContent = englishDayAbbreviation;\r\n }\r\n });\r\n }\r\n const calendarYearMonthNode = calendarNode?.querySelectorAll(\r\n \".react-calendar__year-view__months button\"\r\n );\r\n if (calendarYearMonthNode) {\r\n calendarYearMonthNode.forEach((monthNode) => {\r\n const monthString = monthNode.textContent?.trim();\r\n if (monthString) {\r\n const englishMonthString =\r\n convertVietnameseMonthToEnglish(monthString);\r\n monthNode.textContent = englishMonthString;\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n {label ? (\r\n \r\n {label}\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n);\r\n\r\nexport default DateTimeRange;\r\n","import { Routers } from \"@/Constants\";\nimport Utils from \"@/Utils\";\nimport { create, ApisauceInstance } from \"apisauce\";\nimport _ from \"lodash\";\nimport { getSocket } from \"./socket.config\";\nimport { APIs } from \"@/Constants\";\n\nexport type API_METHOD =\n | \"GET\"\n | \"GET_BLOB\"\n | \"PUT\"\n | \"POST\"\n | \"DEL\"\n | \"POST_FORM_DATA\"\n | \"PUT_FORM_DATA\";\nexport type ERROR_TYPE = \"ERROR\" | \"WARNING\" | \"SERVER_ERROR\";\nconst AUTHORIZED_ERROR = [401];\nconst INTERNAL_SERVER_ERROR = [500, 501];\nconst BAD_REQUEST_ERROR = [400, 422];\nconst WRONG_URL_ERROR = [404];\n\nconst EXCLUDE_API = [\n APIs.AUTHENTICATION.LOGIN,\n APIs.AUTHENTICATION.FORGOT_PASSWORD,\n APIs.AUTHENTICATION.REFRESH_TOKEN,\n \"holidays\",\n \"kanban-board/get-by-id/\",\n];\n\nconst socket = getSocket();\n\nconst getAPIConfig = async (url: string, method: string) => {\n const BASE_URL = import.meta.env.VITE_BE_URL;\n const language = Utils.getSavedLanguage();\n\n const api = create({\n baseURL: `${BASE_URL}api/`,\n headers: {\n Accept: \"application/json\",\n locale: language,\n },\n });\n\n let flagCheckToken = true;\n await Promise.all(\n _.map(EXCLUDE_API, (apiExclude: string) => {\n if (_.includes(url, apiExclude)) {\n if (_.includes(url, \"holidays\")) {\n if (method == \"GET\") flagCheckToken = false;\n } else {\n flagCheckToken = false;\n }\n }\n })\n );\n\n if (flagCheckToken == true) {\n const validateToken = await Utils.checkTokenLifeTime(api);\n if (!validateToken) {\n Utils.redirect(Routers.SIGN_IN);\n return null;\n } else api.setHeader(\"Authorization\", `Bearer ${validateToken}`);\n }\n\n return api;\n};\n\n// Handle error response\nconst handleErrorResponse = (\n type: ERROR_TYPE,\n params: { message: string; duration: number }\n) => {\n const { message, duration } = params;\n const response = {\n type,\n message,\n duration,\n };\n return response;\n};\n\n// Handle response\nconst handleResponse = (res: any, resolve: any, reject: any) => {\n const message = _.get(res, \"data.message\");\n const duration = _.get(res, \"duration\") || 0;\n const status = _.get(res, \"status\");\n const problem = _.get(res, \"problem\");\n\n if (_.includes(AUTHORIZED_ERROR, status)) {\n Utils.clearAllSavedData();\n Utils.redirect(Routers.SIGN_IN);\n socket.disconnect();\n return reject(handleErrorResponse(\"WARNING\", { message, duration }));\n }\n\n if (_.includes(INTERNAL_SERVER_ERROR, status))\n return reject(handleErrorResponse(\"ERROR\", { message, duration }));\n\n if (_.includes(BAD_REQUEST_ERROR, status))\n return reject(\n handleErrorResponse(\"WARNING\", {\n message: `Bad request: ${message}`,\n duration,\n })\n );\n if (_.includes(WRONG_URL_ERROR, status))\n return reject(\n handleErrorResponse(\"WARNING\", { message: `URL not found`, duration })\n );\n\n if (problem)\n return reject(handleErrorResponse(\"SERVER_ERROR\", { message, duration }));\n return resolve(res);\n};\n\nconst post = async (api: ApisauceInstance, url: string, data?: any) => {\n const res = await api.post(url, data);\n return new Promise((resolve, reject) => {\n return handleResponse(res, resolve, reject);\n });\n};\n\nconst postFormData = async (api: ApisauceInstance, url: string, data?: any) => {\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n };\n const res = await api.post(url, data, { headers });\n return new Promise((resolve, reject) => {\n return handleResponse(res, resolve, reject);\n });\n};\n\nconst putFormData = async (api: ApisauceInstance, url: string, data?: any) => {\n const headers = {\n \"Content-Type\": \"multipart/form-data\",\n };\n\n return new Promise(async (resolve, reject) => {\n const res = await api.put(url, data, { headers });\n return handleResponse(res, resolve, reject);\n });\n};\n\nconst get = async (api: ApisauceInstance, url: string, data?: any) => {\n return new Promise(async (resolve, reject) => {\n const res = await api.get(url, data);\n return handleResponse(res, resolve, reject);\n });\n};\n\nconst getBlob = async (api: ApisauceInstance, url: string, data?: any) => {\n return new Promise(async (resolve, reject) => {\n const res = await api.get(url, data, { responseType: \"blob\" });\n handleResponse(res, resolve, reject);\n });\n};\n\nconst put = async (api: ApisauceInstance, url: string, data?: any) => {\n return new Promise(async (resolve, reject) => {\n const res = await api.put(url, data);\n return handleResponse(res, resolve, reject);\n });\n};\n\nconst del = async (api: ApisauceInstance, url: string, data?: any) => {\n return new Promise(async (resolve, reject) => {\n const res = await api.delete(url, data);\n return handleResponse(res, resolve, reject);\n });\n};\n\nconst sendRequest = async (url: string, method: API_METHOD, params?: any) => {\n const api = await getAPIConfig(url, method);\n if (!api) return;\n if (method === \"POST\") return await post(api, url, params);\n if (method === \"GET\") return await get(api, url, params);\n if (method === \"GET_BLOB\") return getBlob(api, url, params);\n if (method === \"PUT\") return await put(api, url, params);\n if (method === \"POST_FORM_DATA\") return await postFormData(api, url, params);\n if (method === \"DEL\") return await del(api, url, params);\n if (method === \"PUT_FORM_DATA\") return await putFormData(api, url, params);\n return true;\n};\n\nexport default sendRequest;\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { ILoginStructure } from \"@/Interfaces/Auth.interface\";\n\nconst { AUTHENTICATION, FCM_TOKEN } = APIs;\n\n//export const login = async (payload: ILoginStructure) => {\n// return await request(AUTHENTICATION.LOGIN, \"POST\", {\n// account: payload.email,\n// password: payload.password,\n// });\n//};\n\nexport const login = async (payload: ILoginStructure) => {\n return await request(AUTHENTICATION.LOGIN, \"POST\", payload);\n};\n\nexport const refreshToken = async (payload: { refreshToken: string }) => {\n return await request(AUTHENTICATION.REFRESH_TOKEN, \"POST\", payload);\n};\n\nexport const forgotPassword = async (payload: { email: string }) => {\n return await request(AUTHENTICATION.FORGOT_PASSWORD, \"POST\", payload);\n};\n\nexport const verifyAccount = async (payload: {\n email: string;\n code: string;\n}) => {\n return await request(AUTHENTICATION.VERIFY_ACCOUNT, \"POST\", payload);\n};\n\nexport const resetPassword = async (payload: {\n email: string;\n code: string;\n newPassword: string;\n confirmationNewPassword: string;\n}) => {\n return await request(AUTHENTICATION.RESET_PASSWORD, \"POST\", payload);\n};\n\nexport const createFCMToken = async (payload: {\n userId: string;\n token: string;\n}) => {\n return await request(FCM_TOKEN.BASIC, \"POST\", payload);\n};\n\nexport const removeFCMToken = async (payload: {\n userId: string;\n token: string;\n}) => {\n return await request(FCM_TOKEN.BASIC, \"PUT\", payload);\n};\n\nexport const changeLocale = async (payload: {\n userId: string;\n locale: string;\n token: string;\n}) => {\n return await request(FCM_TOKEN.CHANGE_LOCALE, \"PUT\", payload);\n};\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\n\r\nconst { ROLE } = APIs;\r\n\r\nexport const fetchRoles = async (payload?: any) => {\r\n return await request(ROLE.BASIC, \"GET\", payload);\r\n};\r\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { ICreateUser } from \"@/Interfaces/User.interface\";\n\nconst { USER } = APIs;\n\nexport const fetchUser = async (payload: any) => {\n return request(USER.BASIC, \"GET\", payload);\n};\n\nexport const getUserById = async (id: string) => {\n return request(`${USER.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const getForSelf = async () => {\n return request(USER.GET_FOR_SELF, \"GET\");\n};\n\nexport const createUser = async (payload: FormData) => {\n return request(USER.CREATE, \"POST_FORM_DATA\", payload);\n};\n\nexport const updateUser = async (id: string, payload: ICreateUser) => {\n return request(`${USER.UPDATE}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const updateForSelf = async (payload: ICreateUser) => {\n return request(USER.UPDATE_FOR_SELF, \"PUT_FORM_DATA\", payload);\n};\n\nexport const activateUser = async (id: string) => {\n return request(`${USER.ACTIVATE}/${id}`, \"PUT\");\n};\n\nexport const deactivateUser = async (id: string) => {\n return request(`${USER.DEACTIVATE}/${id}`, \"PUT\");\n};\n\nexport const updatePasswordForSelf = async (payload: {\n newPassword: string;\n}) => {\n return request(USER.UPDATE_PASSWORD_FOR_SELF, \"PUT\", payload);\n};\n\nexport const deleteUser = async (id: string) => {\n return request(`${USER.DELETE}/${id}`, \"PUT\");\n};\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { IUpdateProject } from \"@/Interfaces/Project.interface\";\n\nconst { PROJECT } = APIs;\n\nexport const fetchProjects = async (payload: any) => {\n return request(PROJECT.BASIC, \"GET\", payload);\n};\n\nexport const createProject = async (payload: any) => {\n return request(PROJECT.BASIC, \"POST\", payload);\n};\n\nexport const getProjectById = async (id: string) => {\n return request(`${PROJECT.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const updateProject = async (id: string, payload: IUpdateProject) => {\n return request(`${PROJECT.BASIC}/${id}`, \"PUT\", payload);\n};\n\nexport const changeProjectStatus = async (id: string, payload: any) => {\n return request(`${PROJECT.CHANGE_STATUS}/${id}`, \"PUT\", payload);\n};\n\nexport const deleteProject = async (id: string) => {\n return request(`${PROJECT.DELETE}/${id}`, \"PUT\");\n};\n\nexport const getStatistical = async () => {\n return request(PROJECT.DASHBOARD_OVERVIEW, \"GET\");\n};\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\nimport {\r\n ICreateBoard,\r\n ICreateColumnInBoard,\r\n IFilterBoard,\r\n IUpdateColumnInBoard,\r\n} from \"@/Interfaces/Board.interface\";\r\n\r\nconst { KANBAN_BOARD, TASK } = APIs;\r\n\r\nexport const fetchBoards = async (payload: IFilterBoard) => {\r\n return request(KANBAN_BOARD.BASIC, \"GET\", payload);\r\n};\r\n\r\nexport const createBoard = async (payload: ICreateBoard) => {\r\n return request(KANBAN_BOARD.BASIC, \"POST\", payload);\r\n};\r\n\r\nexport const getBoardById = async (id: string) => {\r\n return request(`${KANBAN_BOARD.GET_BY_ID}/${id}`, \"GET\");\r\n};\r\n\r\nexport const getTimelineInBoard = async (id: string, payload: any) => {\r\n return request(`${KANBAN_BOARD.GET_TIMELINE}/${id}`, \"GET\", payload);\r\n};\r\n\r\nexport const createColumnInBoard = async (payload: ICreateColumnInBoard) => {\r\n return request(TASK.BASIC, \"POST\", payload);\r\n};\r\n\r\nexport const getColumnInBoard = async (id: string) => {\r\n return request(`${TASK.GET_BY_ID}/${id}`, \"GET\");\r\n};\r\n\r\nexport const updateColumnInBoard = async (\r\n id: string,\r\n payload: IUpdateColumnInBoard | FormData\r\n) => {\r\n return request(`${TASK.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\r\n};\r\n\r\nexport const createCommentInColumn = async (id: string, payload: FormData) => {\r\n return request(`${TASK.COMMENT}/${id}`, \"PUT_FORM_DATA\", payload);\r\n};\r\n\r\nexport const deleteCommentInColumn = async (id: string) => {\r\n return request(`${TASK.DELETE_COMMENT}/${id}`, \"PUT\");\r\n};\r\n\r\nexport const deleteColumnInBoard = async (id: string) => {\r\n return request(`${TASK.DELETE_COLUMN}/${id}`, \"PUT\");\r\n};\r\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { IFilterAggregate } from \"@/Interfaces/LogTime.interface\";\n\nconst { LOG_TIME } = APIs;\n\nexport const createLogtime = async (payload: any) => {\n return request(LOG_TIME.BASIC, \"POST\", payload);\n};\n\nexport const fetchLogtime = async (payload: any) => {\n return request(LOG_TIME.BASIC, \"GET\", payload);\n};\n\nexport const fetchLogtimeByBoardId = async (id: string) => {\n return request(`${LOG_TIME.BASIC}?kanbanBoardId=${id}`, \"GET\");\n};\n\nexport const getLogtimeById = async (id: string) => {\n return request(`${LOG_TIME.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const updateLogtime = async (id: string, payload: any) => {\n return request(`${LOG_TIME.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const changeStatusLogtime = async (id: string, payload: any) => {\n return request(`${LOG_TIME.CHANGE_STATUS}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const deleteLogtime = async (id: string) => {\n return request(`${LOG_TIME.DELETE}/${id}`, \"PUT\");\n};\n\nexport const getMyTime = async (payload: {\n userId?: [];\n startDate?: string;\n endDate?: string;\n forSelf?: boolean;\n}) => {\n return request(LOG_TIME.BASIC, \"GET\", payload);\n};\n\nexport const fetchAggregate = async (payload: IFilterAggregate) => {\n return request(LOG_TIME.AGGREGATE, \"GET\", payload);\n};\n\nexport const fetchLogtimeDashboard = async (payload: any) => {\n return request(LOG_TIME.FOR_DASHBOARD, \"GET\", payload);\n};\n\nexport const fetchLogtimeDelineDashboard = async (payload: any) => {\n return request(LOG_TIME.DEADLINE_DASHBOARD, \"GET\", payload);\n};\n\nexport const fetchMyWorkDashboard = async (payload: any) => {\n return request(LOG_TIME.MY_WORK_DASHBOARD, \"GET\", payload);\n};\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { IFilterAggregate } from \"@/Interfaces/LogTime.interface\";\n\nconst { DAY_OFF_REQUEST } = APIs;\n\nexport const fetchDayOffRequest = async (payload: any) => {\n return request(DAY_OFF_REQUEST.BASIC, \"GET\", payload);\n};\n\nexport const getDayOffRequestById = async (id: string) => {\n return request(`${DAY_OFF_REQUEST.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const createDayOffRequest = async (payload: any) => {\n return request(DAY_OFF_REQUEST.BASIC, \"POST\", payload);\n};\n\nexport const updateDayOffReques = async (id: string, payload: any) => {\n return request(`${DAY_OFF_REQUEST.BASIC}/${id}`, \"PUT\", payload);\n};\n\nexport const ChangeStatusDayOffRequest = async (id: string, payload: any) => {\n return request(\n `${DAY_OFF_REQUEST.CHANGE_STATUS}/${id}`,\n \"PUT_FORM_DATA\",\n payload\n );\n};\n\nexport const deleteDayoffRequest = async (id: string) => {\n return request(`${DAY_OFF_REQUEST.DELETE}/${id}`, \"PUT\");\n};\n\nexport const fetchAggregateDayOffRequest = async (\n payload: IFilterAggregate\n) => {\n return request(DAY_OFF_REQUEST.AGGREGATE, \"GET\", payload);\n};\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { ICreateLeaveDays } from \"@/Interfaces/LeaveDays.interface\";\n\nconst { LEAVE_DAYS } = APIs;\n\nexport const fetchLeaveDays = async (payload: any) => {\n return request(LEAVE_DAYS.BASIC, \"GET\", payload);\n};\n\nexport const getLeaveDaysById = async (id: string) => {\n return request(`${LEAVE_DAYS.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const createLeaveDays = async (payload: ICreateLeaveDays) => {\n return request(LEAVE_DAYS.BASIC, \"POST_FORM_DATA\", payload);\n};\n\nexport const updateLeaveDays = async (id: string, payload: any) => {\n return request(`${LEAVE_DAYS.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\n\nconst { UPDATE_TIME_CARD } = APIs;\n\nexport const fetchRequestUpdateTimeCard = async (payload: any) => {\n return request(UPDATE_TIME_CARD.BASIC, \"GET\", payload);\n};\n\nexport const getRequestUpdateTimeCardById = async (id: string) => {\n return request(`${UPDATE_TIME_CARD.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const createRequestUpdateTimeCard = async (payload: FormData) => {\n return request(UPDATE_TIME_CARD.BASIC, \"POST_FORM_DATA\", payload);\n};\n\nexport const updateRequestUpdateTimeCard = async (id: string, payload: any) => {\n return request(`${UPDATE_TIME_CARD.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const ChangeStatusRequestUpdateTimeCard = async (\n id: string,\n payload: any\n) => {\n return request(\n `${UPDATE_TIME_CARD.CHANGE_STATUS}/${id}`,\n \"PUT_FORM_DATA\",\n payload\n );\n};\n\nexport const deleteUpdateTimeCard = async (id: string) => {\n return request(`${UPDATE_TIME_CARD.DELETE}/${id}`, \"PUT\");\n};\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\n\nconst { TIMEKEEPING } = APIs;\n\nexport const fetchTimekeeping = async (payload: any) => {\n return request(TIMEKEEPING.BASIC, \"GET\", payload);\n};\n\nexport const getTimekeepingById = async (id: string) => {\n return request(`${TIMEKEEPING.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const createTimekeeping = async (payload: FormData) => {\n return request(TIMEKEEPING.BASIC, \"POST_FORM_DATA\", payload);\n};\n\nexport const updateTimekeeping = async (id: string, payload: any) => {\n return request(`${TIMEKEEPING.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const updateTimekeepingAdmin = async (payload: FormData) => {\n return request(TIMEKEEPING.UPDATE, \"POST_FORM_DATA\", payload);\n};\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\n\r\nconst { TIME_SHEET } = APIs;\r\n\r\nexport const fetchTimesheets = async (payload?: any) => {\r\n return await request(TIME_SHEET.BASIC, \"GET\", payload);\r\n};\r\n\r\nexport const getTimesheetById = async (id: string) => {\r\n return await request(`${TIME_SHEET.GET_BY_ID}/${id}`, \"GET\");\r\n};\r\n\r\nexport const createTimesheet = async (payload: any) => {\r\n return await request(TIME_SHEET.BASIC, \"POST\", payload);\r\n};\r\n\r\nexport const updateTimesheet = async (id: string, payload: any) => {\r\n return await request(`${TIME_SHEET.BASIC}/${id}`, \"PUT\", payload);\r\n};\r\n\r\nexport const deleteTimesheet = async (id: string) => {\r\n return await request(`${TIME_SHEET.DELETE}/${id}`, \"PUT\");\r\n};\r\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { ICreateIp } from \"@/Interfaces/InternalIp.interface\";\n\nconst { INTERNAL_IP } = APIs;\n\nexport const createInternal = async (payload: ICreateIp) => {\n return request(INTERNAL_IP.BASIC, \"POST_FORM_DATA\", payload);\n};\n\nexport const fetchInternal = async (payload: any) => {\n return request(INTERNAL_IP.BASIC, \"GET\", payload);\n};\n\nexport const updateInternal = async (id: string, payload: ICreateIp) => {\n return request(`${INTERNAL_IP.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const changeStatusInternal = async (id: string, payload: any) => {\n return request(`${INTERNAL_IP.CHANGE_STATUS}/${id}`, \"PUT\", payload);\n};\n\nexport const getInternalById = async (id: string) => {\n return request(`${INTERNAL_IP.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const changeInternalRemote = async () => {\n return request(INTERNAL_IP.INTERNAL_IP_REMOTE, \"POST\");\n};\n\nexport const fetchInternalIpRemote = async () => {\n return request(INTERNAL_IP.FETCH_INTERNAL_IP_REMOTE, \"GET\");\n};\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { ICreateHoliday, IFilterHoliday } from \"@/Interfaces/Holiday.interface\";\n\nconst { HOLIDAY } = APIs;\n\nexport const fetchHoliday = async (payload: IFilterHoliday) => {\n return request(HOLIDAY.BASIC, \"GET\", payload);\n};\n\nexport const getHolidayById = async (id: string) => {\n return request(`${HOLIDAY.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const createHoliday = async (payload: ICreateHoliday) => {\n return request(HOLIDAY.BASIC, \"POST_FORM_DATA\", payload);\n};\n\nexport const updateHoliday = async (id: string, payload: ICreateHoliday) => {\n return request(`${HOLIDAY.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const ChangeStatusHoliday = async (id: string, payload: any) => {\n return request(`${HOLIDAY.CHANGE_STATUS}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\n\r\nconst { PERFORMANCE } = APIs;\r\n\r\nexport const fetchPerformances = async (payload?: any) => {\r\n return await request(PERFORMANCE.BASIC, \"GET\", payload);\r\n};\r\n\r\nexport const getPerformanceById = async (id: string) => {\r\n return await request(`${PERFORMANCE.GET_BY_ID}/${id}`, \"GET\");\r\n};\r\n\r\nexport const updatePerformance = async (id: string, payload: any) => {\r\n return await request(`${PERFORMANCE.GET_BY_ID}/${id}`, \"PUT\", payload);\r\n};\r\n\r\nexport const createPerformance = async (payload: any) => {\r\n return await request(PERFORMANCE.BASIC, \"POST\", payload);\r\n};\r\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\n\r\nconst { NOTIFICATION } = APIs;\r\n\r\nexport const fetchNotifications = async (payload?: any) => {\r\n return request(NOTIFICATION.BASIC, \"GET\", payload);\r\n};\r\n\r\nexport const fetchOutsideNotifications = async () => {\r\n return request(NOTIFICATION.FETCH_OUTSIDE, \"GET\");\r\n};\r\n\r\nexport const getNotificationById = async (id: string) => {\r\n return request(`${NOTIFICATION.GET_BY_ID}/${id}`, \"GET\");\r\n};\r\n\r\nexport const markAsRead = async (payload: { notificationIds: string[] }) => {\r\n return request(NOTIFICATION.MARK_AS_READ, \"PUT\", payload);\r\n};\r\n\r\nexport const markAllAsRead = async () => {\r\n return request(NOTIFICATION.MARK_ALL_AS_READ, \"PUT\");\r\n};\r\n\r\nexport const markAllAsReadOutside = async () => {\r\n return request(NOTIFICATION.MARK_AS_READ_OUTSIDE, \"PUT\");\r\n};\r\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\nimport { IChatFilters } from \"@/Interfaces/Chat.interface\";\r\n\r\nconst { CHAT } = APIs;\r\n\r\nexport const fetchMessageChannel = async () => {\r\n return request(CHAT.FETCH_MESSAGE_CHANNEL, \"GET\");\r\n};\r\n\r\nexport const fetchMessageNotification = async () => {\r\n return request(CHAT.FETCH_MESSAGE_NOTIFICATION, \"GET\");\r\n};\r\n\r\nexport const fetchMessageByChannelId = async (\r\n id: string,\r\n payload: IChatFilters\r\n) => {\r\n return request(\r\n `${CHAT.FETCH_MESSAGE_BY_CHANEL_ID}/?channelId=${id}`,\r\n \"GET\",\r\n payload\r\n );\r\n};\r\n\r\nexport const fetchAllUsers = async (payload?: any) => {\r\n return request(CHAT.FETCH_ALL_USERS, \"GET\", payload);\r\n};\r\n\r\nexport const fetchUserNotConversation = async () => {\r\n return request(CHAT.FETCH_USER_NOT_CONVERSATION, \"GET\");\r\n};\r\n\r\nexport const fetchConversationChannelDetail = async (id: string) => {\r\n return request(`${CHAT.FETCH_MESSAGE_CHANNEL_DETAIL}/${id}`, \"GET\");\r\n};\r\n\r\nexport const createPrivateChat = async (payload: FormData) => {\r\n return request(CHAT.CREATE_PRIVATE_MESSAGE, \"POST_FORM_DATA\", payload);\r\n};\r\n\r\nexport const createGroupChat = async (payload: FormData) => {\r\n return request(CHAT.CREATE_GROUP, \"POST_FORM_DATA\", payload);\r\n};\r\n\r\nexport const createMessageChat = async (payload: FormData) => {\r\n return request(CHAT.CREATE_MESSAGE, \"POST_FORM_DATA\", payload);\r\n};\r\n\r\nexport const recalledMessage = async (id: string) => {\r\n return request(`${CHAT.RECALLED_MESSAGE}/${id}`, \"PUT\");\r\n};\r\n\r\nexport const deletePrimaryMessage = async (id: string) => {\r\n return request(`${CHAT.DELETE_PRIVATE_MESSAGE}/${id}`, \"PUT\");\r\n};\r\n\r\nexport const fetchMediaByChannelId = async (\r\n id: string,\r\n pagination: IChatFilters\r\n) => {\r\n return request(\r\n `${CHAT.FETCH_MEDIA_BY_CHANNEL_ID}/?channelId=${id}`,\r\n \"GET\",\r\n pagination\r\n );\r\n};\r\n\r\nexport const addMemberToGroup = async (id: string, payload: FormData) => {\r\n return request(`${CHAT.ADD_MEMBER_GROUP}/${id}`, \"PUT_FORM_DATA\", payload);\r\n};\r\n\r\nexport const removeMemberToGroup = async (id: string, payload: FormData) => {\r\n return request(`${CHAT.REMOVE_MEMBER_GROUP}/${id}`, \"PUT_FORM_DATA\", payload);\r\n};\r\n\r\nexport const leaveGroup = async (id: string) => {\r\n return request(`${CHAT.LEAVE_GROUP}/${id}`, \"PUT\");\r\n};\r\n\r\nexport const readConversation = async (id: string, payload: FormData) => {\r\n return request(`${CHAT.READ_CONVERSATION}/${id}`, \"PUT\", payload);\r\n};\r\n\r\nexport const updateConversation = async (id: string, payload: FormData) => {\r\n return request(`${CHAT.UPDATE_CONVERSATION}/${id}`, \"PUT_FORM_DATA\", payload);\r\n};\r\n\r\nexport const removeAllFile = async (data: { time: number; type: string }) => {\r\n return request(CHAT.REMOVE_ALL_FILE, \"PUT\", data);\r\n};\r\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\nimport { ITaskNoteFilters } from \"@/Interfaces/TaskNote.interface\";\r\n\r\nconst { TASK_NOTE } = APIs;\r\n\r\nexport const fetchTaskNote = async (payload?: ITaskNoteFilters) => {\r\n return await request(TASK_NOTE.BASIC, \"GET\", payload);\r\n};\r\n\r\nexport const createTaskNote = async (payload?: FormData) => {\r\n return await request(TASK_NOTE.BASIC, \"POST_FORM_DATA\", payload);\r\n};\r\n\r\nexport const getTaskNoteById = async (id: string) => {\r\n return await request(`${TASK_NOTE.GET_BY_ID}/${id}`, \"GET\");\r\n};\r\n\r\nexport const updateTaskNote = async (id: string, payload: FormData) => {\r\n return await request(`${TASK_NOTE.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\r\n};\r\n\r\nexport const deleteTaskNote = async (id: string) => {\r\n return await request(`${TASK_NOTE.DELETE}/${id}`, \"PUT\");\r\n};\r\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { ICreateClient } from \"@/Interfaces/Client.interface\";\n\nconst { CLIENT } = APIs;\n\nexport const createClient = async (payload: ICreateClient) => {\n return request(CLIENT.BASIC, \"POST_FORM_DATA\", payload);\n};\n\nexport const fetchClient = async (payload: any) => {\n return request(CLIENT.BASIC, \"GET\", payload);\n};\n\nexport const updateClient = async (id: string, payload: ICreateClient) => {\n return request(`${CLIENT.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const changeStatusClient = async (id: string, payload: any) => {\n return request(`${CLIENT.CHANGE_STATUS}/${id}`, \"PUT\", payload);\n};\n\nexport const getClientById = async (id: string) => {\n return request(`${CLIENT.GET_BY_ID}/${id}`, \"GET\");\n};\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\n\nconst { WORKING_TIME } = APIs;\n\nexport const fetchWorkingTime = async (payload: any) => {\n return request(WORKING_TIME.BASIC, \"GET\", payload);\n};\nexport const updateWorkingTime = async (id: string, payload: any) => {\n return request(`${WORKING_TIME.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\nexport const getWorkingTimeById = async (id: string) => {\n return request(`${WORKING_TIME.GET_BY_ID}/${id}`, \"GET\");\n};\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { IUpdateProject } from \"@/Interfaces/Project.interface\";\n\nconst { PROJECT_EXTERIOR } = APIs;\n\nexport const fetchProjectsExterior = async (payload: any) => {\n return request(PROJECT_EXTERIOR.BASIC, \"GET\", payload);\n};\n\nexport const createProjectExterior = async (payload: any) => {\n return request(PROJECT_EXTERIOR.BASIC, \"POST\", payload);\n};\n\nexport const getProjectExteriorById = async (id: string) => {\n return request(`${PROJECT_EXTERIOR.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const updateProjectExterior = async (\n id: string,\n payload: IUpdateProject\n) => {\n return request(`${PROJECT_EXTERIOR.BASIC}/${id}`, \"PUT\", payload);\n};\n\nexport const changeProjectExteriorStatus = async (id: string, payload: any) => {\n return request(`${PROJECT_EXTERIOR.CHANGE_STATUS}/${id}`, \"PUT\", payload);\n};\n\nexport const deleteProjectExterior = async (id: string) => {\n return request(`${PROJECT_EXTERIOR.DELETE}/${id}`, \"PUT\");\n};\n\nexport const fetchUserCanAdd = async (payload: any) => {\n return request(PROJECT_EXTERIOR.FETCH_USER_CAN_ADD, \"GET\", payload);\n};\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\n\nconst { BACKUP, FILES } = APIs;\n\nexport const fetchBackup = async (payload: any) => {\n return request(BACKUP.BASIC, \"GET\", payload);\n};\n\nexport const changeBackup = async (payload: any) => {\n return request(BACKUP.BASIC, \"POST\", payload);\n};\n\nexport const fetchBackupList = async (payload: any) => {\n return request(BACKUP.BACKUP_LIST, \"GET\", payload);\n};\n\nexport const getBackupList = async () => {\n return request(BACKUP.BACKUP_DATABASE, \"POST\");\n};\n\nexport const restoreDatabase = async (payload: any) => {\n return request(BACKUP.RESTORE, \"POST_FORM_DATA\", payload);\n};\n\nexport const deleteDatabase = async (id: string) => {\n return request(`${BACKUP.DELETE}/${id}`, \"PUT\");\n};\n\nexport const getAllMemoryConversation = async () => {\n return request(FILES.ALL_MEMORY_CONVERSATION, \"GET\");\n};\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\n\r\nconst { TIME_DELETE_PRIVATE_CHAT } = APIs;\r\n\r\nexport const fetchTimeDeleteFilePrivateChat = async () => {\r\n return request(TIME_DELETE_PRIVATE_CHAT.BASIC, \"GET\");\r\n};\r\n\r\nexport const createTimeDeleteFilePrivateChat = async (payload: {\r\n time: string;\r\n type: string;\r\n}) => {\r\n return request(TIME_DELETE_PRIVATE_CHAT.BASIC, \"POST\", payload);\r\n};\r\n\r\nexport const updateTimeDeleteFilePrivateChat = async (\r\n id: string,\r\n payload: {\r\n time: string;\r\n type: string;\r\n }\r\n) => {\r\n return request(`${TIME_DELETE_PRIVATE_CHAT.BASIC}/${id}`, \"PUT\", payload);\r\n};\r\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\n\r\nconst { EMAIL_RECEIVE } = APIs;\r\n\r\nexport const createMailReceive = async (payload: {\r\n mail: string;\r\n type: string;\r\n}) => {\r\n return request(EMAIL_RECEIVE.BASIC, \"POST\", payload);\r\n};\r\n\r\nexport const updateMailReceive = async (\r\n id: string,\r\n payload: {\r\n mail: string;\r\n type: string;\r\n }\r\n) => {\r\n return request(`${EMAIL_RECEIVE.BASIC}/${id}`, \"PUT\", payload);\r\n};\r\n\r\nexport const fetchMailReceive = async () => {\r\n return request(EMAIL_RECEIVE.BASIC, \"GET\");\r\n};\r\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\n\nconst { WORKSPACE, WORKSPACE_SHORT } = APIs;\n\nexport const fetchWorkspace = async (payload: any) => {\n return request(WORKSPACE.BASIC, \"GET\", payload);\n};\n\nexport const updateWorkspace = async (id: string, payload: any) => {\n return request(`${WORKSPACE.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const getWorkspaceById = async (id: string) => {\n return request(`${WORKSPACE.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const createWorkspace = async (payload: any) => {\n return await request(WORKSPACE.BASIC, \"POST_FORM_DATA\", payload);\n};\n\nexport const deleteWorkspace = async (id: string) => {\n return await request(`${WORKSPACE.DELETE}/${id}`, \"PUT\");\n};\n\nexport const fetchWorkspaceShort = async (payload: any) => {\n return request(WORKSPACE_SHORT.BASIC, \"GET\", payload);\n};\n\nexport const updateWorkspaceShort = async (id: string, payload: any) => {\n return request(`${WORKSPACE_SHORT.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const getWorkspaceShortById = async (id: string) => {\n return request(`${WORKSPACE_SHORT.GET_BY_ID}/${id}`, \"GET\");\n};\n\nexport const createWorkspaceShort = async (payload: any) => {\n return await request(WORKSPACE_SHORT.BASIC, \"POST_FORM_DATA\", payload);\n};\n\nexport const deleteWorkspaceShort = async (id: string) => {\n return await request(`${WORKSPACE_SHORT.DELETE}/${id}`, \"PUT\");\n};\n","import { request } from \"@/Configs\";\r\nimport { APIs } from \"@/Constants\";\r\n\r\nconst { WORKING_DAY } = APIs;\r\n\r\nexport const fetchWorkingDay = async (payload: any) => {\r\n return request(WORKING_DAY.BASIC, \"GET\", payload);\r\n};\r\n\r\nexport const updateWorkingDay = async (payload: any) => {\r\n return request(WORKING_DAY.BASIC, \"POST\", payload);\r\n};\r\n\r\nexport const getWorkingDayById = async (id: string) => {\r\n return request(`${WORKING_DAY.GET_BY_ID}/${id}`, \"GET\");\r\n};\r\n","import { request } from \"@/Configs\";\nimport { APIs } from \"@/Constants\";\nimport { ICreateNews } from \"@/Interfaces/News.interface\";\n\nconst { NEWS } = APIs;\n\nexport const createNews = async (payload: ICreateNews) => {\n return request(NEWS.BASIC, \"POST_FORM_DATA\", payload);\n};\n\nexport const fetchNews = async (payload: any) => {\n return request(NEWS.BASIC, \"GET\", payload);\n};\n\nexport const updateNews = async (id: string, payload: ICreateNews) => {\n return request(`${NEWS.BASIC}/${id}`, \"PUT_FORM_DATA\", payload);\n};\n\nexport const changeStatusNews = async (id: string, payload: any) => {\n return request(`${NEWS.CHANGE_STATUS}/${id}`, \"PUT\", payload);\n};\n\nexport const getNewsById = async (id: string) => {\n return request(`${NEWS.GET_BY_ID}/${id}`, \"GET\");\n};","import * as AuthenticationApi from \"./Authentication.api\";\nimport * as RoleApi from \"./Role.api\";\nimport * as UserApi from \"./User.api\";\nimport * as ProjectApi from \"./Project.api\";\nimport * as BoardApi from \"./Board.api\";\nimport * as LogtimeAPI from \"./LogTime.api\";\nimport * as DayOffRequestAPI from \"./DayOffRequest.api\";\nimport * as LeaveDaysAPI from \"./LeaveDays.api\";\nimport * as RequsetUpdateTimeCardAPI from \"./RequestUpdateTimecard.api\";\nimport * as TimekeepingdAPI from \"./Timekeeping.api\";\nimport * as TimesheetAPI from \"./Timesheet.api\";\nimport * as InternalIpAPI from \"./InternalIp.api\";\nimport * as HolidayAPI from \"./Holiday.api\";\nimport * as PerformanceAPI from \"./Performance.api\";\nimport * as NotificationAPI from \"./Notification.api\";\nimport * as ChatAPI from \"./Chat.api\";\nimport * as TaskNoteAPI from \"./TaskNote.api\";\nimport * as Client from \"./Client.api\";\nimport * as WorkingTime from \"./WorkingTime.api\";\nimport * as ProjectExteriorApi from \"./ProjectExterior.api\";\nimport * as BackupApi from \"./Backup.api\";\nimport * as TimeDeleteFilePrivateChatApi from \"./TimeDeleteFilePrivateChat.api\";\nimport * as MailReceiveApi from \"./MailReceive.api\";\nimport * as WorkspaceApi from \"./Workspace.api\";\nimport * as WorkingDayApi from \"./WorkingDay.api\";\nimport * as News from \"./News.api\";\n\nexport default {\n ...AuthenticationApi,\n ...RoleApi,\n ...UserApi,\n ...ProjectApi,\n ...BoardApi,\n ...LogtimeAPI,\n ...DayOffRequestAPI,\n ...LeaveDaysAPI,\n ...RequsetUpdateTimeCardAPI,\n ...TimekeepingdAPI,\n ...TimesheetAPI,\n ...InternalIpAPI,\n ...HolidayAPI,\n ...PerformanceAPI,\n ...NotificationAPI,\n ...ChatAPI,\n ...TaskNoteAPI,\n ...Client,\n ...WorkingTime,\n ...ProjectExteriorApi,\n ...BackupApi,\n ...TimeDeleteFilePrivateChatApi,\n ...MailReceiveApi,\n ...WorkspaceApi,\n ...WorkingDayApi,\n ...News,\n};\n","import APIs from \"@/APIs\";\nimport { ActionTypes } from \"@/Constants\";\nimport { ITimesheetPagination } from \"@/Interfaces/Timesheet.interface\";\nimport { IPaginate } from \"@/Types/Common.types\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport dayjs from \"dayjs\";\nimport _ from \"lodash\";\n\nconst getDaysOfWeek = (date: Date, dateFormat: string) => {\n const daysOfWeek = [];\n const firstDayOfWeek = new Date(date);\n firstDayOfWeek.setDate(\n date.getDate() - date.getDay() + (date.getDay() === 0 ? -6 : 1)\n );\n\n for (let i = 0; i < 7; i++) {\n const currentDate = new Date(firstDayOfWeek);\n currentDate.setDate(firstDayOfWeek.getDate() + i);\n daysOfWeek.push(dayjs(currentDate).format(dateFormat));\n }\n\n return daysOfWeek;\n};\nconst currentDate = new Date();\nconst weekdays = getDaysOfWeek(currentDate, \"YYYY-MM-DD\");\n\nconst setTimekeepingFetchLoading = () => {\n return {\n type: ActionTypes.SET_TIMEKEEPING_FETCH_LOADING,\n };\n};\n\nconst setTimekeepingGetLoading = () => {\n return {\n type: ActionTypes.SET_TIMEKEEPING_GET_LOADING,\n };\n};\n\nconst setTimekeepingActionLoading = () => {\n return {\n type: ActionTypes.SET_TIMEKEEPING_ACTION_LOADING,\n };\n};\n\nconst resetTimekeepingReducer = () => {\n return {\n type: ActionTypes.RESET_REDUCER_TIMEKEEPING,\n };\n};\n\nconst resetMesageTimekeepingReducer = () => {\n return {\n type: ActionTypes.RESET_MESSAGE_TIMEKEEPING,\n };\n};\n\nconst setMetaTimekeeping = (payload: IPaginate) => {\n return {\n type: ActionTypes.SET_META_TIMEKEEPING,\n payload,\n };\n};\n\nconst setPaginationTimekeeping = (payload: any) => {\n return {\n type: ActionTypes.SET_PAGINATION_TIMEKEEPING,\n payload,\n };\n};\n\nconst fetchTimekeepingSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_TIMEKEEPING_SUCCESS,\n payload,\n };\n};\n\nconst fetchTimekeepingFail = () => {\n return {\n type: ActionTypes.FETCH_TIMEKEEPING_FAILURE,\n };\n};\n\nconst fetchTimekeeping = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setTimekeepingFetchLoading());\n await APIs.fetchTimekeeping(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(fetchTimekeepingFail());\n else {\n const items = _.get(result, \"items\");\n const meta: any = _.get(result, \"meta\");\n dispatch(fetchTimekeepingSuccess(items));\n dispatch(setMetaTimekeeping(meta));\n dispatch(setPaginationTimekeeping(payload));\n }\n })\n .catch(async () => {\n await dispatch(fetchTimekeepingFail());\n });\n };\n};\n\nconst createCheckOutSuccess = () => {\n return {\n type: ActionTypes.CREATE_CHECK_OUT_SUCCESS,\n };\n};\n\nconst createCheckOutFail = () => {\n return {\n type: ActionTypes.CREATE_CHECK_OUT_FAILURE,\n };\n};\n\nconst createCheckOut = (payload: any, pagination?: ITimesheetPagination) => {\n return async (dispatch: any) => {\n await APIs.updateTimekeepingAdmin(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createCheckOutFail());\n await Toast({\n title: \"check in failed\",\n description: message,\n status: \"error\",\n });\n } else {\n dispatch(createCheckOutSuccess());\n await Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchTimekeeping(pagination));\n await dispatch(\n fetchCheckIn({\n page: 0,\n limit: 0,\n startDate: _.first(weekdays),\n endDate: _.last(weekdays),\n })\n );\n }\n })\n .catch(async (error) => {\n await dispatch(createCheckOutFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst createTimekeepingSuccess = () => {\n return {\n type: ActionTypes.CREATE_TIMEKEEPING_SUCCESS,\n };\n};\n\nconst createTimekeepingFail = (payload?: string) => {\n return {\n type: ActionTypes.CREATE_TIMEKEEPING_FAILURE,\n payload,\n };\n};\n\nconst createTimekeeping = (\n payload: any,\n type?: string,\n pagination?: ITimesheetPagination,\n dataCreateCheckOut?: any\n) => {\n return async (dispatch: any) => {\n dispatch(setTimekeepingActionLoading());\n await APIs.createTimekeeping(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const language = Utils.getSavedLanguage();\n if (!result) {\n const message = response?.data?.message;\n await dispatch(createTimekeepingFail(message));\n } else {\n if (result?.type === \"check-in\") {\n await localStorage.setItem(\"isCheckedIn\", \"true\");\n }\n if (result?.type === \"check-out-afternoon\") {\n await localStorage.setItem(\"isCheckedInAfternoon\", \"true\");\n }\n await dispatch(createTimekeepingSuccess());\n if (dataCreateCheckOut) {\n dispatch(createCheckOut(dataCreateCheckOut, pagination));\n } else if (pagination && type) {\n Toast({\n title: `${\n (language === \"en\"\n ? type === \"check-in\" && \"Check in successfully\"\n : type === \"check-in\" &&\n \"Điểm danh giờ vào làm buổi sáng thành công\") ||\n (language === \"en\"\n ? type === \"check-in-afternoon\" &&\n \"Check in afternoon successfully\"\n : type === \"check-in-afternoon\" &&\n \"Điểm danh giờ vào làm buổi chiều thành công\") ||\n (language === \"en\"\n ? type === \"check-out\" && \"Check out successfully\"\n : type === \"check-out\" &&\n \"Điểm danh kết thúc giờ làm buổi sáng thành công\") ||\n (language === \"en\"\n ? type === \"check-out-afternoon\" &&\n \"Check out afternoon successfully\"\n : type === \"check-out-afternoon\" &&\n \"Điểm danh kết thúc giờ làm buổi chiều thành công\")\n } `,\n status: \"success\",\n });\n } else\n Toast({\n title: `${\n (language === \"en\"\n ? type === \"check-in\" && \"Check in successfully\"\n : type === \"check-in\" &&\n \"Điểm danh giờ vào làm buổi sáng thành công\") ||\n (language === \"en\"\n ? type === \"check-in-afternoon\" &&\n \"Check in afternoon successfully\"\n : type === \"check-in-afternoon\" &&\n \"Điểm danh giờ vào làm buổi chiều thành công\") ||\n (language === \"en\"\n ? type === \"check-out\" && \"Check out successfully\"\n : type === \"check-out\" &&\n \"Điểm danh kết thúc giờ làm buổi sáng thành công\") ||\n (language === \"en\"\n ? type === \"check-out-afternoon\" &&\n \"Check out afternoon successfully\"\n : type === \"check-out-afternoon\" &&\n \"Điểm danh kết thúc giờ làm buổi chiều thành công\")\n } `,\n status: \"success\",\n });\n await dispatch(fetchTimekeeping(pagination));\n await dispatch(\n fetchCheckIn({\n page: 0,\n limit: 0,\n startDate: _.first(weekdays),\n endDate: _.last(weekdays),\n })\n );\n }\n })\n .catch(async (error) => {\n await dispatch(createTimekeepingFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getByIdTimekeepingSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_BY_ID_TIMEKEEPING_SUCCESS,\n payload,\n };\n};\n\nconst getByIdTimekeepingFail = () => {\n return {\n type: ActionTypes.GET_BY_ID_TIMEKEEPING_FAILURE,\n };\n};\n\nconst getByIdTimekeeping = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setTimekeepingGetLoading());\n await APIs.getTimekeepingById(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(getByIdTimekeepingFail());\n else {\n dispatch(getByIdTimekeepingSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(getByIdTimekeepingFail());\n });\n };\n};\n\nconst updateCheckOutSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_CHECK_OUT_SUCCESS,\n payload,\n };\n};\n\nconst updateCheckOutFail = () => {\n return {\n type: ActionTypes.UPDATE_CHECK_OUT_FAILURE,\n };\n};\n\nconst updateCheckOut = (id: string, payload: any, pagination: any) => {\n return async (dispatch: any) => {\n await APIs.updateTimekeeping(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateCheckOutFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updateCheckOutSuccess(result));\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchTimekeeping(pagination));\n await dispatch(\n fetchCheckIn({\n page: 0,\n limit: 0,\n startDate: _.first(weekdays),\n endDate: _.last(weekdays),\n })\n );\n }\n })\n .catch(async (error) => {\n await dispatch(updateCheckOutFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst updateTimekeepingSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_TIMEKEEPING_SUCCESS,\n payload,\n };\n};\n\nconst updateTimekeepingFail = () => {\n return {\n type: ActionTypes.UPDATE_TIMEKEEPING_FAILURE,\n };\n};\n\nconst updateTimekeeping = (\n id: string,\n payload: any,\n pagination?: any,\n dataUpdateCheckOut?: any,\n type?: string\n) => {\n return async (dispatch: any) => {\n dispatch(setTimekeepingActionLoading());\n await APIs.updateTimekeeping(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateTimekeepingFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n if (!_.isEmpty(dataUpdateCheckOut)) {\n if (type === \"update\") {\n if (dataUpdateCheckOut?.id) {\n dispatch(\n updateCheckOut(\n dataUpdateCheckOut.id,\n dataUpdateCheckOut,\n pagination\n )\n );\n }\n } else {\n dispatch(\n createTimekeeping(\n { ...dataUpdateCheckOut, type: \"check-out\" },\n \"\",\n pagination\n )\n );\n }\n } else {\n dispatch(updateTimekeepingSuccess(result));\n }\n await dispatch(fetchTimekeeping(pagination));\n await dispatch(\n fetchCheckIn({\n page: 0,\n limit: 0,\n startDate: _.first(weekdays),\n endDate: _.last(weekdays),\n })\n );\n }\n })\n .catch(async (error) => {\n await dispatch(updateTimekeepingFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchCheckInSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_CHECK_IN_SUCCESS,\n payload,\n };\n};\n\nconst fetchCheckInFail = () => {\n return {\n type: ActionTypes.FETCH_CHECK_IN_FAILURE,\n };\n};\n\nconst fetchCheckIn = (payload: any) => {\n return async (dispatch: any) => {\n //dispatch(setTimekeepingFetchLoading());\n await APIs.fetchTimekeeping(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(fetchCheckInFail());\n else {\n const items = _.get(result, \"items\");\n dispatch(fetchCheckInSuccess(items));\n }\n })\n .catch(async () => {\n await dispatch(fetchCheckInFail());\n });\n };\n};\n\nconst createTimekeepingAdminSuccess = () => {\n return {\n type: ActionTypes.CREATE_TIMEKEEPING_ADMIN_SUCCESS,\n };\n};\n\nconst createTimekeepingAdminFail = () => {\n return {\n type: ActionTypes.CREATE_TIMEKEEPING_ADMIN_FAILURE,\n };\n};\n\nconst createTimekeepingAdmin = (\n payload: any,\n // type?: string,\n pagination?: ITimesheetPagination,\n dataCreateCheckOut?: any\n) => {\n return async (dispatch: any) => {\n dispatch(setTimekeepingActionLoading());\n await APIs.updateTimekeepingAdmin(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n const message = response?.data?.message;\n await dispatch(createTimekeepingAdminFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createTimekeepingAdminSuccess());\n if (dataCreateCheckOut) {\n dispatch(createCheckOut(dataCreateCheckOut, pagination));\n }\n // else if (pagination && type) {\n // Toast({\n // title: `${type} successfully`,\n // status: \"success\",\n // });\n // } else\n // Toast({\n // title: `${type} successfully`,\n // status: \"success\",\n // });\n await dispatch(fetchTimekeeping(pagination));\n\n await dispatch(\n fetchCheckIn({\n page: 0,\n limit: 0,\n startDate: _.first(weekdays),\n endDate: _.last(weekdays),\n })\n );\n }\n })\n .catch(async (error) => {\n await dispatch(createTimekeepingAdminFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n createTimekeeping,\n getByIdTimekeeping,\n updateTimekeeping,\n fetchTimekeeping,\n resetTimekeepingReducer,\n fetchCheckIn,\n createTimekeepingAdmin,\n resetMesageTimekeepingReducer,\n};\n","import APIs from \"@/APIs\";\nimport { ActionTypes } from \"@/Constants\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\n\nconst setWorkingTimeFetchLoading = () => {\n return {\n type: ActionTypes.SET_WORKING_TIME_FETCH_LOADING,\n };\n};\n\n//const setWorkingTimeGetLoading = () => {\n// return {\n// type: ActionTypes.SET_WORKING_TIME_GET_LOADING,\n// };\n//};\n\nconst resetWorkingTime = () => {\n return {\n type: ActionTypes.RESET_WORKING_TIME,\n };\n};\n\nconst setWorkingTimeActionLoading = () => {\n return {\n type: ActionTypes.SET_WORKING_TIME_ACTION_LOADING,\n };\n};\n\nconst fetchWorkingTimeSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_WORKING_TIME_SUCCESS,\n payload,\n };\n};\n\nconst fetchWorkingTimeFail = () => {\n return {\n type: ActionTypes.FETCH_WORKING_TIME_FAILURE,\n };\n};\n\nconst fetchWorkingTime = (payload?: any) => {\n return async (dispatch: any) => {\n dispatch(setWorkingTimeFetchLoading());\n await APIs.fetchWorkingTime(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchWorkingTimeFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(fetchWorkingTimeSuccess(resolveResult?.items));\n }\n })\n .catch(async () => {\n await dispatch(fetchWorkingTimeFail());\n });\n };\n};\n\nconst updateWorkingTimeSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_WORKING_TIME_SUCCESS,\n payload,\n };\n};\n\nconst updateWorkingTimeFail = () => {\n return {\n type: ActionTypes.UPDATE_WORKING_TIME_FAILURE,\n };\n};\n\nconst updateWorkingTime = (id: string, payload: any) => {\n return async (dispatch: any) => {\n dispatch(setWorkingTimeActionLoading());\n await APIs.updateWorkingTime(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateWorkingTimeFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updateWorkingTimeSuccess(result));\n dispatch(fetchWorkingTime());\n Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(updateWorkingTimeFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n fetchWorkingTime,\n updateWorkingTime,\n resetWorkingTime,\n};\n","import _ from \"lodash\";\nimport { ActionTypes, Routers } from \"@/Constants\";\nimport { Roles } from \"@/Enums/Role.enums\";\nimport { ILoginStructure } from \"@/Interfaces/Auth.interface\";\nimport APIs from \"@/APIs\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport { initSocket, disconnectSocket } from \"../Configs/socket.config\";\n// import { persistor } from \"../Store\";\n\nimport { RoleActions, NotificationActions, ChatActions } from \"@/Actions\";\nimport { getDaysOfWeek } from \"@/Utils/AppServices.utils\";\nimport TimekeepingAction from \"./Timekeeping.action\";\nimport WorkingTimeAction from \"./WorkingTime.action\";\n\n// SINGLE ACTIONS\n\nconst { fetchCheckIn } = TimekeepingAction;\nconst { fetchWorkingTime } = WorkingTimeAction;\n\nconst setAuthLoading = () => {\n return {\n type: ActionTypes.SET_AUTH_LOADING,\n };\n};\n\nconst resetStepForgotPassword = () => {\n return {\n type: ActionTypes.RESET_STEP_FORGOT_PASSWORD,\n };\n};\n\nconst resetCheckLogin = () => {\n return {\n type: ActionTypes.RESET_CHECK_LOGIN,\n };\n};\n\nconst logout = (userId?: string, firebaseToken?: string) => {\n return async (dispatch: any) => {\n await dispatch(resetAuthReducer());\n if (userId && firebaseToken) {\n await dispatch(\n removeFCMToken({\n userId,\n token: firebaseToken,\n })\n );\n }\n if (ChatActions?.resetChatRecucer)\n await dispatch(ChatActions.resetChatRecucer());\n\n await Utils.clearAllSavedData();\n disconnectSocket();\n _.delay(() => {\n Utils.redirect(Routers.SIGN_IN);\n }, 500);\n // await persistor.purge();\n // persistor\n // .purge()\n // .then(() => {\n // Utils.redirect(Routers.SIGN_IN);\n // })\n // .catch((error) => {\n // console.error(\"Error purging state:\", error);\n // });\n };\n};\n\n// ASYNC ACTIONS\n\nconst loginSuccess = (payload: any) => {\n return {\n type: ActionTypes.LOGIN_SUCCESS,\n payload,\n };\n};\n\nconst loginFailure = (payload: string) => {\n return {\n type: ActionTypes.LOGIN_FAILURE,\n payload,\n };\n};\n\nconst login = (\n payload: ILoginStructure,\n redirectPath: string | null,\n onSuccess?: (data: any) => void\n) => {\n return async (dispatch: any) => {\n dispatch(setAuthLoading());\n await APIs.login(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n const message = response?.data?.message;\n await dispatch(loginFailure(message));\n await Toast({\n title: \"Login fail\",\n description: message,\n status: \"error\",\n });\n } else {\n const resolveResult: {\n accessToken: any;\n user: any;\n } = result as {\n accessToken: any;\n user: any;\n };\n const localeStorage = Utils.getSavedLanguage();\n const token = resolveResult.accessToken.token;\n const refreshToken = resolveResult.accessToken.refreshToken;\n const userPayload = resolveResult.user;\n const firebaseToken = Utils.getSavedFirebaseToken();\n\n initSocket(token);\n token && Utils.saveToken(token, payload.isRemember);\n if (payload.isRemember) Utils.saveRefreshToken(refreshToken);\n Utils.saveUserData(userPayload);\n await dispatch(loginSuccess(result));\n // Set socket and tokeninitSocket(token);\n const currentDate = new Date();\n const weekdays = getDaysOfWeek(currentDate, \"YYYY-MM-DD\");\n await dispatch(\n fetchCheckIn({\n page: 0,\n limit: 0,\n startDate: _.first(weekdays),\n endDate: _.last(weekdays),\n })\n );\n await dispatch(\n changeLocale({\n userId: userPayload.id,\n locale: localeStorage,\n token: firebaseToken,\n })\n );\n await dispatch(fetchWorkingTime());\n if (RoleActions.fetchRoles) dispatch(RoleActions.fetchRoles());\n if (NotificationActions?.fetchOutsideNotifications)\n dispatch(NotificationActions?.fetchOutsideNotifications());\n if (ChatActions?.fetchMessageNotification)\n dispatch(ChatActions?.fetchMessageNotification());\n onSuccess && onSuccess(userPayload);\n\n if (redirectPath) Utils.redirect(redirectPath);\n else Utils.redirect(Routers.SIGN_IN);\n }\n return true;\n })\n .catch(async (error) => {\n // await Utils.resolveFailureResponse(error);\n await dispatch(\n loginFailure(\"The server is having problems, please try again later!\")\n );\n await Toast({\n title: \"Login Fail\",\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst refeshTokenSuccess = (\n payload: Roles.ADMIN | Roles.THREEDARTIST | Roles.MANAGER\n) => {\n return {\n type: ActionTypes.REFRESH_TOKEN_SUCCESS,\n payload,\n };\n};\n\nconst refeshTokenFailure = (payload: string) => {\n return {\n type: ActionTypes.REFRESH_TOKEN_FAILURE,\n payload,\n };\n};\n\nconst refeshToken = (payload: { refreshToken: string }) => {\n return async (dispatch: any) => {\n dispatch(setAuthLoading());\n await APIs.refreshToken(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) {\n const message = response?.data?.message;\n await dispatch(refeshTokenFailure(message));\n await Toast({\n title: \"Login fail\",\n description: message,\n status: \"error\",\n });\n } else {\n const resolveResult: {\n accessToken: any;\n user: any;\n } = result as {\n accessToken: any;\n user: any;\n };\n const token = resolveResult.accessToken.token;\n const userPayload = resolveResult.user;\n const role = userPayload?.roleCode;\n token && Utils.saveToken(token);\n userPayload && Utils.saveUserData(userPayload);\n role && dispatch(refeshTokenSuccess(role));\n }\n return true;\n })\n .catch(async (error) => {\n // await Utils.resolveFailureResponse(error);\n await dispatch(\n refeshTokenFailure(\n \"The server is having problems, please try again later!\"\n )\n );\n await Toast({\n title: \"Login Fail\",\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst requestForgotPasswordSuccess = () => {\n return {\n type: ActionTypes.REQUEST_FORGOT_PASSWORD_SUCCESS,\n };\n};\n\nconst requestForgotPasswordFailure = () => {\n return {\n type: ActionTypes.REQUEST_FORGOT_PASSWORD_FAILURE,\n };\n};\n\nconst requestForgotPassword = (payload: { email: string }) => {\n return async (dispatch: any) => {\n dispatch(setAuthLoading());\n await APIs.forgotPassword(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n\n if (!result) {\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(requestForgotPasswordSuccess());\n }\n return true;\n })\n .catch(async (error) => {\n dispatch(requestForgotPasswordFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst verifySuccess = () => {\n return {\n type: ActionTypes.VERIFY_ACCOUNT_SUCCESS,\n };\n};\n\nconst verifyFailure = () => {\n return {\n type: ActionTypes.VERIFY_ACCOUNT_FAILURE,\n };\n};\n\nconst verifyAccount = (payload: { email: string; code: string }) => {\n return async (dispatch: any) => {\n dispatch(setAuthLoading());\n await APIs.verifyAccount(payload)\n .then(async (response: any) => {\n if (!response?.data?.status) {\n await dispatch(verifyFailure());\n Utils.sleep(2000).then(() =>\n Utils.redirect(Routers.VERIFY_ACCOUNT_FAIL)\n );\n } else {\n await dispatch(verifySuccess());\n Utils.sleep(2000).then(() =>\n Utils.redirect(Routers.VERIFY_ACCOUNT_SUCCESS)\n );\n }\n })\n .catch(async (error) => {\n await Utils.resolveResponse(error);\n dispatch(verifyFailure());\n Utils.sleep(2000).then(() =>\n Utils.redirect(Routers.VERIFY_ACCOUNT_FAIL)\n );\n });\n };\n};\n\nconst resetPasswordSuccess = () => {\n return {\n type: ActionTypes.RESET_PASSWORD_SUCCESS,\n };\n};\n\nconst resetPasswordFailure = () => {\n return {\n type: ActionTypes.RESET_PASSWORD_FAILURE,\n };\n};\n\nconst resetPassword = (payload: {\n email: string;\n code: string;\n newPassword: string;\n confirmationNewPassword: string;\n}) => {\n return async (dispatch: any) => {\n dispatch(setAuthLoading());\n await APIs.resetPassword(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(resetPasswordFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(resetPasswordSuccess());\n Utils.redirect(Routers.SIGN_IN);\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await Utils.resolveResponse(error);\n dispatch(resetPasswordFailure());\n });\n };\n};\n\nconst createFCMTokenSuccess = () => {\n return {\n type: ActionTypes.CREATE_FCM_TOKEN_SUCCESS,\n };\n};\n\nconst createFCMTokenFailure = () => {\n return {\n type: ActionTypes.CREATE_FCM_TOKEN_FAILURE,\n };\n};\n\nconst createFCMToken = (payload: {\n userId: string;\n token: string;\n locale?: string;\n}) => {\n return async (dispatch: any) => {\n dispatch(setAuthLoading());\n await APIs.createFCMToken(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) {\n await dispatch(createFCMTokenFailure());\n } else {\n await dispatch(createFCMTokenSuccess());\n }\n })\n .catch(async () => {\n dispatch(createFCMTokenFailure());\n });\n };\n};\n\nconst removeFCMTokenSuccess = () => {\n return {\n type: ActionTypes.REMOVE_FCM_TOKEN_SUCCESS,\n };\n};\n\nconst removeFCMTokenFailure = () => {\n return {\n type: ActionTypes.REMOVE_FCM_TOKEN_FAILURE,\n };\n};\n\nconst removeFCMToken = (payload: { userId: string; token: string }) => {\n return async (dispatch: any) => {\n dispatch(setAuthLoading());\n await APIs.removeFCMToken(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) {\n await dispatch(removeFCMTokenFailure());\n } else {\n await dispatch(removeFCMTokenSuccess());\n }\n })\n .catch(async () => {\n dispatch(createFCMTokenFailure());\n });\n };\n};\n\nconst resetAuthReducer = () => {\n return {\n type: ActionTypes.RESET_AUTH_REDUCER,\n };\n};\n\nconst changeLocaleSuccess = () => {\n return {\n type: ActionTypes.CHANGE_LOCALE_SUCCESS,\n };\n};\n\nconst changeLocaleFailure = () => {\n return {\n type: ActionTypes.CHANGE_LOCALE_FAILURE,\n };\n};\n\nconst changeLocale = (payload: {\n userId: string;\n locale: string;\n token: any;\n}) => {\n return async (dispatch: any) => {\n dispatch(setAuthLoading());\n await APIs.changeLocale(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) {\n await dispatch(changeLocaleFailure());\n } else {\n await dispatch(changeLocaleSuccess());\n }\n })\n .catch(async () => {\n dispatch(changeLocaleFailure());\n });\n };\n};\n\nexport default {\n setAuthLoading,\n login,\n logout,\n refeshToken,\n requestForgotPassword,\n verifyAccount,\n resetStepForgotPassword,\n resetPassword,\n resetAuthReducer,\n resetCheckLogin,\n createFCMToken,\n removeFCMToken,\n changeLocale,\n};\n","import { ActionTypes } from \"@/Constants\";\r\nimport APIs from \"@/APIs\";\r\nimport Utils from \"@/Utils\";\r\nimport { Toast } from \"@/Widgets\";\r\n\r\n// SINGLE ACTIONS\r\nconst setRoleFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_ROLE_FETCH_LOADING,\r\n };\r\n};\r\n\r\n// const setRoleGetLoading = () => {\r\n// return {\r\n// type: ActionTypes.SET_ROLE_GET_LOADING,\r\n// };\r\n// };\r\n\r\n// const setRoleActionLoading = () => {\r\n// return {\r\n// type: ActionTypes.SET_ROLE_ACTION_LOADING,\r\n// };\r\n// };\r\n\r\nconst resetRoleRecucer = () => {\r\n return {\r\n type: ActionTypes.RESET_ROLES_REDUCER,\r\n };\r\n};\r\n\r\n//ASYNC ACTIONS\r\n\r\nconst fetchSuccess = (payload?: any) => {\r\n return {\r\n type: ActionTypes.FETCH_ROLES_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_ROLES_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchRoles = () => {\r\n return async (dispatch: any) => {\r\n dispatch(setRoleFetchLoading());\r\n await APIs.fetchRoles()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(fetchFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else dispatch(fetchSuccess(result?.items));\r\n })\r\n .catch(async () => {\r\n await dispatch(fetchFailure());\r\n });\r\n };\r\n};\r\n\r\nexport default { fetchRoles, resetRoleRecucer };\r\n","import _ from \"lodash\";\nimport { ActionTypes, Routers } from \"@/Constants\";\nimport APIs from \"@/APIs\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport { IFilterUser, IUser } from \"@/Interfaces/User.interface\";\nimport { IPaginate } from \"@/Types/Common.types\";\n\n// SINGLE ACTIONS\n\nconst setUserFetchLoading = () => {\n return {\n type: ActionTypes.SET_USER_FETCH_LOADING,\n };\n};\n\nconst setUserGetLoading = () => {\n return {\n type: ActionTypes.SET_USER_GET_LOADING,\n };\n};\n\nconst setUserActionLoading = () => {\n return {\n type: ActionTypes.SET_USER_ACTION_LOADING,\n };\n};\n\nconst resetUserReducer = () => {\n return {\n type: ActionTypes.RESET_USER_REDUCER,\n };\n};\n\nconst resetActionUserReducer = () => {\n return {\n type: ActionTypes.RESET_ACTION_USER_REDUCER,\n };\n};\n\nconst setMetaUser = (payload: IPaginate) => {\n return {\n type: ActionTypes.SET_META_USER,\n payload,\n };\n};\n\nconst performAction = (\n actionType: string,\n itemId: string,\n payload?: IUser\n) => ({\n type: ActionTypes.USER_PERFORM_ACTION,\n payload: { actionType, itemId, payload },\n});\n\nconst resetUserPerformAction = () => {\n return {\n type: ActionTypes.RESET_USER_PERFORM_ACTION,\n };\n};\n\nconst resetUserMessage = () => {\n return {\n type: ActionTypes.RESET_USER_MESSAGE,\n };\n};\n\nconst resetUserDetail = () => {\n return {\n type: ActionTypes.RESET_USER_DETAIL,\n };\n};\n\nconst setPaginationUser = (payload: IFilterUser) => {\n return {\n type: ActionTypes.SET_PAGINATION_USER,\n payload,\n };\n};\n\nconst createUserSuccess = () => {\n return {\n type: ActionTypes.CREATE_USER_SUCCESS,\n };\n};\n\nconst createUserFail = () => {\n return {\n type: ActionTypes.CREATE_USER_FAILURE,\n };\n};\n\nconst createNewUser = (payload: FormData) => {\n return async (dispatch: any) => {\n dispatch(setUserActionLoading());\n await APIs.createUser(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createUserFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createUserSuccess());\n Utils.redirect(Routers.USER);\n Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(createUserFail());\n await Toast({\n title: error?.message,\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchUserSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_USER_SUCCESS,\n payload,\n };\n};\n\nconst fetchUSerFail = () => {\n return {\n type: ActionTypes.FETCH_USER_FAILURE,\n };\n};\n\nconst fetchUser = (payload: IFilterUser) => {\n return async (dispatch: any) => {\n dispatch(setUserFetchLoading());\n await APIs.fetchUser(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(fetchUSerFail());\n else {\n const items = _.get(result, \"items\");\n const meta: any = _.get(result, \"meta\");\n dispatch(fetchUserSuccess(items));\n dispatch(setMetaUser(meta));\n dispatch(setPaginationUser(payload));\n }\n })\n .catch(async () => {\n await dispatch(fetchUSerFail());\n });\n };\n};\n\nconst fetchUserForDashboard = (payload?: any) => {\n return async (dispatch: any) => {\n dispatch(setUserFetchLoading());\n await APIs.fetchAllUsers(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(fetchUSerFail());\n else {\n dispatch(fetchUserSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(fetchUSerFail());\n });\n };\n};\n\nconst getByIdUserSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_BY_ID_USER_SUCCESS,\n payload,\n };\n};\n\nconst getByIdUSerFail = () => {\n return {\n type: ActionTypes.GET_BY_ID_USER_FAILURE,\n };\n};\n\nconst getByIdUser = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setUserGetLoading());\n await APIs.getUserById(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(getByIdUSerFail());\n else {\n dispatch(getByIdUserSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(getByIdUSerFail());\n });\n };\n};\n\nconst getForSelfSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_FOR_SELF_SUCCESS,\n payload,\n };\n};\n\nconst getForSelfFail = () => {\n return {\n type: ActionTypes.GET_FOR_SELF_FAILURE,\n };\n};\n\nconst getForSelf = () => {\n return async (dispatch: any) => {\n dispatch(setUserGetLoading());\n await APIs.getForSelf()\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(getForSelfFail());\n else {\n dispatch(getForSelfSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(getForSelfFail());\n });\n };\n};\n\nconst updateUserSuccess = (payload?: any) => {\n return {\n type: ActionTypes.UPDATE_USER_SUCCESS,\n payload,\n };\n};\n\nconst updateUserFail = () => {\n return {\n type: ActionTypes.UPDATE_USER_FAILURE,\n };\n};\n\nconst updateUser = (id: string, payload: any) => {\n return async (dispatch: any) => {\n dispatch(setUserActionLoading());\n await APIs.updateUser(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateUserFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n const getAccountId = Utils.getAccountId();\n const resolveResult: {\n id: string;\n } = result as {\n id: string;\n };\n const userPayload = resolveResult;\n Toast({\n title: message,\n status: \"success\",\n });\n if (getAccountId === userPayload?.id) {\n //dispatch(updateUserSuccess(getAccountId === userPayload?.id));\n userPayload && Utils.saveUserData(userPayload);\n }\n await dispatch(updateUserSuccess(response?.data?.payload));\n }\n })\n .catch(async (error) => {\n await dispatch(updateUserFail());\n await Toast({\n title: error?.message,\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst updateForSelfSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_FOR_SELF_SUCCESS,\n payload,\n };\n};\n\nconst updateForSelfFail = () => {\n return {\n type: ActionTypes.UPDATE_FOR_SELF_FAILURE,\n };\n};\n\nconst updateForSelf = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setUserActionLoading());\n await APIs.updateForSelf(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await Toast({\n title: message,\n status: \"error\",\n });\n await dispatch(updateForSelfFail());\n } else {\n dispatch(updateForSelfSuccess(result));\n const resolveResult: {\n id: string;\n } = result as {\n id: string;\n };\n const userPayload = resolveResult;\n userPayload && Utils.saveUserData(userPayload);\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(updateForSelfFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst updatePasswordSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_PASSWORD_FOR_SELF_SUCCESS,\n payload,\n };\n};\n\nconst updatePasswordfFail = (payload: string) => {\n return {\n type: ActionTypes.UPDATE_PASSWORD_FOR_SELF_FAILURE,\n payload,\n };\n};\n\nconst updatePasswordForSelf = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setUserActionLoading());\n await APIs.updatePasswordForSelf(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updatePasswordfFail(message));\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updatePasswordSuccess(result));\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(updatePasswordfFail(error));\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst activateUserSuccess = () => {\n return {\n type: ActionTypes.ACTIVATE_USER_SUCCESS,\n };\n};\n\nconst activateUserFail = () => {\n return {\n type: ActionTypes.ACTIVATE_USER_FAILURE,\n };\n};\n\nconst activateUser = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setUserActionLoading());\n await APIs.activateUser(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(activateUserFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(activateUserSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(activateUserFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deactivateUserSuccess = () => {\n return {\n type: ActionTypes.DEACTIVATE_USER_SUCCESS,\n };\n};\n\nconst deactivateUserFail = () => {\n return {\n type: ActionTypes.DEACTIVATE_USER_FAILURE,\n };\n};\n\nconst deactivateUser = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setUserActionLoading());\n await APIs.deactivateUser(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deactivateUserFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(deactivateUserSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(deactivateUserFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteUserSuccess = () => {\n return {\n type: ActionTypes.DELETE_USER_SUCCESS,\n };\n};\n\nconst deleteUserFail = () => {\n return {\n type: ActionTypes.DELETE_USER_FAILURE,\n };\n};\n\nconst deleteUser = (id: string, pagination: IFilterUser) => {\n return async (dispatch: any) => {\n dispatch(setUserActionLoading());\n await APIs.deleteUser(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteUserFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(deleteUserSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchUser(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(deleteUserFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n resetUserReducer,\n createNewUser,\n fetchUser,\n getByIdUser,\n getForSelf,\n updateUser,\n updateForSelf,\n activateUser,\n deactivateUser,\n updatePasswordForSelf,\n deleteUser,\n resetActionUserReducer,\n performAction,\n resetUserPerformAction,\n resetUserMessage,\n resetUserDetail,\n fetchUserForDashboard,\n};\n","import { ActionTypes } from \"@/Constants\";\r\nimport APIs from \"@/APIs\";\r\nimport Utils from \"@/Utils\";\r\nimport { Toast } from \"@/Widgets\";\r\nimport {\r\n ICreateBoard,\r\n ICreateColumnInBoard,\r\n ITaskStructure,\r\n IUpdateColumnInBoard,\r\n} from \"@/Interfaces/Board.interface\";\r\n\r\n// SINGLE ACTIONS\r\n\r\nconst setBoardFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_BOARD_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setBoardGetLoading = () => {\r\n return {\r\n type: ActionTypes.SET_BOARD_GET_LOADING,\r\n };\r\n};\r\n\r\nconst setBoardActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_BOARD_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst setMyTimeWeekdays = (weekDays: string[]) => ({\r\n type: ActionTypes.SET_MY_TIME_WEEKDAYS,\r\n payload: weekDays,\r\n});\r\n\r\nconst setDashboardWeekdays = (weekDays: string[]) => ({\r\n type: ActionTypes.SET_DASHBOARD_WEEKDAYS,\r\n payload: weekDays,\r\n});\r\n\r\nconst setTimelineActiveDates = (activeDates: string[]) => ({\r\n type: ActionTypes.SET_TIMELINE_ACTIVE_DATES,\r\n payload: activeDates,\r\n});\r\n\r\nconst performAction = (actionType: string, itemId: string) => ({\r\n type: ActionTypes.BOARD_PERFORM_ACTION,\r\n payload: { actionType, itemId },\r\n});\r\n\r\nconst resetBoardPerformAction = () => {\r\n return {\r\n type: ActionTypes.RESET_BOARD_PERFORM_ACTION,\r\n };\r\n};\r\n\r\nconst resetWeekdays = () => ({\r\n type: ActionTypes.RESET_WEEKDAYS,\r\n});\r\n\r\nconst resetBoardStatus = () => {\r\n return {\r\n type: ActionTypes.RESET_BOARD_STATUS,\r\n };\r\n};\r\n\r\nconst resetTimelineInBoard = () => {\r\n return {\r\n type: ActionTypes.RESET_TIMELINE_IN_BOARD,\r\n };\r\n};\r\n\r\nconst resetBoardDetail = () => {\r\n return {\r\n type: ActionTypes.RESET_BOARD_DETAIL,\r\n };\r\n};\r\n\r\nconst resetBoardReducer = () => {\r\n return {\r\n type: ActionTypes.RESET_BOARD_REDUCER,\r\n };\r\n};\r\n\r\nconst fetchSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_BOARDS_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_BOARDS_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchBoards = (payload?: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setBoardFetchLoading());\r\n await APIs.fetchBoards(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n if (!result) {\r\n await dispatch(fetchFailure());\r\n } else {\r\n dispatch(fetchSuccess(result?.items));\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(fetchFailure());\r\n });\r\n };\r\n};\r\n\r\nconst getSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.GET_BOARD_BY_ID_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst getFailure = () => {\r\n return {\r\n type: ActionTypes.GET_BOARD_BY_ID_FAILURE,\r\n };\r\n};\r\n\r\nconst getBoardById = (id: string, hiddenLoading?: boolean) => {\r\n return async (dispatch: any) => {\r\n if (!hiddenLoading) dispatch(setBoardGetLoading());\r\n await APIs.getBoardById(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n if (!result) {\r\n await dispatch(getFailure());\r\n } else {\r\n dispatch(getSuccess(result));\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(getFailure());\r\n });\r\n };\r\n};\r\n\r\nconst createSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_BOARD_SUCCESS,\r\n };\r\n};\r\n\r\nconst createFailure = () => {\r\n return {\r\n type: ActionTypes.CREATE_BOARD_FAILURE,\r\n };\r\n};\r\n\r\nconst createBoard = (payload: ICreateBoard) => {\r\n return async (dispatch: any) => {\r\n dispatch(setBoardActionLoading());\r\n await APIs.createBoard(payload)\r\n .then(async (response: any) => {\r\n const result = await Utils.resolveResponse(response);\r\n if (!result) {\r\n await dispatch(createFailure());\r\n } else {\r\n dispatch(createSuccess());\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(createFailure());\r\n });\r\n };\r\n};\r\n\r\nconst createColumnSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_COLUMN_IN_BOARD_SUCCESS,\r\n };\r\n};\r\n\r\nconst createColumnFailure = () => {\r\n return {\r\n type: ActionTypes.CREATE_COLUMN_IN_BOARD_FAILURE,\r\n };\r\n};\r\n\r\nconst createColumnInBoard = (payload: ICreateColumnInBoard) => {\r\n return async (dispatch: any) => {\r\n dispatch(setBoardActionLoading());\r\n await APIs.createColumnInBoard(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(createColumnFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(getBoardById(payload.kanbanBoard));\r\n dispatch(createColumnSuccess());\r\n\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(createColumnFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getColumnSuccess = (payload: ITaskStructure) => {\r\n return {\r\n type: ActionTypes.GET_COLUMN_IN_BOARD_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst getColumnFailure = () => {\r\n return {\r\n type: ActionTypes.GET_COLUMN_IN_BOARD_FAILURE,\r\n };\r\n};\r\n\r\nconst getColumnInBoard = (id: string, hiddenAlert?: boolean) => {\r\n return async (dispatch: any) => {\r\n dispatch(setBoardActionLoading());\r\n await APIs.getColumnInBoard(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(getColumnFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(getColumnSuccess(result));\r\n if (!hiddenAlert)\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(getColumnFailure());\r\n });\r\n };\r\n};\r\n\r\nconst updateColumnSuccess = () => {\r\n return {\r\n type: ActionTypes.UPDATE_COLUMN_IN_BOARD_SUCCESS,\r\n };\r\n};\r\n\r\nconst updateColumnFailure = () => {\r\n return {\r\n type: ActionTypes.UPDATE_COLUMN_IN_BOARD_FAILURE,\r\n };\r\n};\r\n\r\nconst updateColumnInBoard = (\r\n id: string,\r\n payload: IUpdateColumnInBoard | FormData,\r\n onSuccess?: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setBoardActionLoading());\r\n await APIs.updateColumnInBoard(id, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(updateColumnFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(getBoardById(result?.kanbanBoard?.id));\r\n dispatch(updateColumnSuccess());\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n onSuccess && onSuccess();\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(updateColumnFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst updateColumnInBoardTwice = (\r\n activeColumn: { id: string; payload: IUpdateColumnInBoard | FormData },\r\n overColumn: { id: string; payload: IUpdateColumnInBoard | FormData },\r\n onSuccess: () => void,\r\n onFailure: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setBoardActionLoading());\r\n try {\r\n const firstUpdate = APIs.updateColumnInBoard(\r\n activeColumn.id,\r\n activeColumn.payload\r\n );\r\n const secondUpdate = APIs.updateColumnInBoard(\r\n overColumn.id,\r\n overColumn.payload\r\n );\r\n await Promise.all([firstUpdate, secondUpdate]);\r\n dispatch(updateColumnSuccess());\r\n onSuccess();\r\n } catch (error: any) {\r\n await dispatch(updateColumnFailure());\r\n await Toast({\r\n title:\r\n error?.message || \"An error occurred while updating position columns\",\r\n status: \"error\",\r\n });\r\n onFailure();\r\n }\r\n };\r\n};\r\n\r\nconst createCommentInColumnSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_COMMENT_IN_COLUMN_SUCCESS,\r\n };\r\n};\r\n\r\nconst createCommentInColumnFailure = () => {\r\n return {\r\n type: ActionTypes.CREATE_COMMENT_IN_COLUMN_FAILURE,\r\n };\r\n};\r\n\r\nconst createCommentInColumn = (\r\n id: string,\r\n payload: FormData,\r\n boardId: string\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setBoardActionLoading());\r\n await APIs.createCommentInColumn(id, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(createCommentInColumnFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(createCommentInColumnSuccess());\r\n await dispatch(getBoardById(boardId));\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(createCommentInColumnFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst deleteCommentInColumnSuccess = () => {\r\n return {\r\n type: ActionTypes.DELETE_COMMENT_IN_COLUMN_SUCCESS,\r\n };\r\n};\r\n\r\nconst deleteCommentInColumnFailure = () => {\r\n return {\r\n type: ActionTypes.DELETE_COMMENT_IN_COLUMN_FAILURE,\r\n };\r\n};\r\n\r\nconst deleteCommentInColumn = (id: string, boardId: string) => {\r\n return async (dispatch: any) => {\r\n dispatch(setBoardActionLoading());\r\n await APIs.deleteCommentInColumn(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(deleteCommentInColumnFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(deleteCommentInColumnSuccess());\r\n await dispatch(getBoardById(boardId));\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(deleteCommentInColumnFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst deleteColumnSuccess = () => {\r\n return {\r\n type: ActionTypes.DELETE_COLUMN_IN_BOARD_SUCCESS,\r\n };\r\n};\r\n\r\nconst deleteColumnFailure = () => {\r\n return {\r\n type: ActionTypes.DELETE_COLUMN_IN_BOARD_FAILURE,\r\n };\r\n};\r\n\r\nconst deleteColumnInBoard = (\r\n id: string,\r\n boardId: string,\r\n onSuccess: () => void,\r\n onFailure: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setBoardActionLoading());\r\n await APIs.deleteColumnInBoard(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(deleteColumnFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n onFailure();\r\n } else {\r\n await dispatch(deleteColumnSuccess());\r\n await dispatch(getBoardById(boardId));\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n onSuccess();\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(deleteColumnFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n onFailure();\r\n });\r\n };\r\n};\r\n\r\nconst getTimelineInBoardSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.GET_TIMELINE_IN_BOARD_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst getTimelineInBoardFailure = () => {\r\n return {\r\n type: ActionTypes.GET_TIMELINE_IN_BOARD_FAILURE,\r\n };\r\n};\r\n\r\nconst getTimelineInBoard = (\r\n id: string,\r\n payload?: any,\r\n hiddenLoading?: boolean\r\n) => {\r\n return async (dispatch: any) => {\r\n if (!hiddenLoading) dispatch(setBoardGetLoading());\r\n await APIs.getTimelineInBoard(id, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(getTimelineInBoardFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(\r\n getTimelineInBoardSuccess({ data: result, pagination: payload })\r\n );\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(getTimelineInBoardFailure());\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n setMyTimeWeekdays,\r\n setDashboardWeekdays,\r\n performAction,\r\n resetWeekdays,\r\n resetBoardPerformAction,\r\n resetBoardStatus,\r\n resetBoardReducer,\r\n createBoard,\r\n fetchBoards,\r\n getBoardById,\r\n createColumnInBoard,\r\n getColumnInBoard,\r\n updateColumnInBoard,\r\n createCommentInColumn,\r\n deleteCommentInColumn,\r\n resetBoardDetail,\r\n updateColumnInBoardTwice,\r\n deleteColumnInBoard,\r\n getTimelineInBoard,\r\n resetTimelineInBoard,\r\n setTimelineActiveDates,\r\n};\r\n","import _ from \"lodash\";\n\nimport { ActionTypes, Routers } from \"@/Constants\";\nimport APIs from \"@/APIs\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport {\n ICreateProject,\n IFilterProject,\n IProjectStructure,\n IUpdateProject,\n} from \"@/Interfaces/Project.interface\";\nimport BoardAction from \"./Board.action\";\n\nconst { createBoard } = BoardAction;\n\n// SINGLE ACTIONS\n\nconst setProjectFetchLoading = () => {\n return {\n type: ActionTypes.SET_PROJECT_FETCH_LOADING,\n };\n};\n\nconst setProjectGetLoading = () => {\n return {\n type: ActionTypes.SET_PROJECT_GET_LOADING,\n };\n};\n\nconst setProjectActionLoading = () => {\n return {\n type: ActionTypes.SET_PROJECT_ACTION_LOADING,\n };\n};\n\nconst setProjectMeta = (payload: any) => {\n return {\n type: ActionTypes.SET_PROJECT_META,\n payload,\n };\n};\n\nconst setProjectPagination = (payload: IFilterProject) => {\n return {\n type: ActionTypes.SET_PROJECT_PAGINATION,\n payload,\n };\n};\n\nconst saveCurrentDateInScroller = (payload: string) => {\n return {\n type: ActionTypes.SAVE_CURRENT_DATE_IN_SCROLLER,\n payload,\n };\n};\n\nconst resetProjectStatus = () => {\n return {\n type: ActionTypes.RESET_PROJECT_STATUS,\n };\n};\n\nconst resetProjectReducer = () => {\n return {\n type: ActionTypes.RESET_PROJECT_REDUCER,\n };\n};\n\nconst fetchSuccess = (payload: IProjectStructure[]) => {\n return {\n type: ActionTypes.FETCH_PROJECTS_SUCCESS,\n payload,\n };\n};\n\nconst fetchFailure = () => {\n return {\n type: ActionTypes.FETCH_PROJECTS_FAILURE,\n };\n};\n\nconst fetchProjects = (payload: IFilterProject) => {\n return async (dispatch: any) => {\n dispatch(setProjectFetchLoading());\n await APIs.fetchProjects(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(fetchFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(setProjectMeta(_.get(result, \"meta\")));\n await dispatch(setProjectPagination(payload));\n await dispatch(fetchSuccess(resolveResult.items));\n }\n })\n .catch(async (error) => {\n await dispatch(fetchFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getStatisticalSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_STATISTICAL_PROJECTS_SUCCESS,\n payload,\n };\n};\n\nconst getStatisticalFailure = () => {\n return {\n type: ActionTypes.GET_STATISTICAL_PROJECTS_FAILURE,\n };\n};\n\nconst getStatisticalProjects = () => {\n return async (dispatch: any) => {\n dispatch(setProjectGetLoading());\n await APIs.getStatistical()\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(getStatisticalFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(getStatisticalSuccess(result));\n }\n })\n .catch(async (error: any) => {\n await dispatch(getStatisticalFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchForDashboardSuccess = (payload: IProjectStructure[]) => {\n return {\n type: ActionTypes.FETCH_PROJECTS_FOR_DASHBOARD_SUCCESS,\n payload,\n };\n};\n\nconst fetchForDashboardFailure = () => {\n return {\n type: ActionTypes.FETCH_PROJECTS_FOR_DASHBOARD_FAILURE,\n };\n};\n\nconst fetchProjectsForDashboard = (payload: IFilterProject) => {\n return async (dispatch: any) => {\n dispatch(setProjectFetchLoading());\n await APIs.fetchProjects(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(fetchForDashboardFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(setProjectPagination(payload));\n await dispatch(fetchForDashboardSuccess(resolveResult.items));\n }\n })\n .catch(async (error) => {\n await dispatch(fetchForDashboardFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst createSuccess = () => {\n return {\n type: ActionTypes.CREATE_PROJECT_SUCCESS,\n };\n};\n\nconst createFailure = () => {\n return {\n type: ActionTypes.CREATE_PROJECT_FAILURE,\n };\n};\n\nconst createProject = (payload: ICreateProject) => {\n return async (dispatch: any) => {\n dispatch(setProjectActionLoading());\n await APIs.createProject(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n // Dispatch createBoard action with the project details\n await dispatch(\n createBoard({\n name: result?.name,\n project: result?.id,\n })\n );\n await dispatch(createSuccess());\n await Toast({\n title: message,\n status: \"success\",\n });\n Utils.redirect(Routers.PROJECT);\n }\n })\n .catch(async (error) => {\n await dispatch(createFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getByIdSuccess = (payload: IProjectStructure) => {\n return {\n type: ActionTypes.GET_PROJECT_BY_ID_SUCCESS,\n payload,\n };\n};\n\nconst getByIdFailure = () => {\n return {\n type: ActionTypes.GET_PROJECT_BY_ID_FAILURE,\n };\n};\n\nconst getProjectById = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setProjectGetLoading());\n await APIs.getProjectById(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(getByIdFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else await dispatch(getByIdSuccess(result));\n })\n .catch(async (error) => {\n await dispatch(getByIdFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteSuccess = () => {\n return {\n type: ActionTypes.DELETE_PROJECT_SUCCESS,\n };\n};\n\nconst deleteFailure = () => {\n return {\n type: ActionTypes.DELETE_PROJECT_FAILURE,\n };\n};\n\nconst deleteProject = (id: string, filters: IFilterProject) => {\n return async (dispatch: any) => {\n dispatch(setProjectActionLoading());\n await APIs.deleteProject(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(deleteSuccess());\n await dispatch(fetchProjects(filters));\n Utils.redirect(Routers.PROJECT);\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(deleteFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst changeStatusSuccess = () => {\n return {\n type: ActionTypes.CHANGE_PROJECT_STATUS_SUCCESS,\n };\n};\n\nconst changeStatusFailure = () => {\n return {\n type: ActionTypes.CHANGE_PROJECT_STATUS_FAILURE,\n };\n};\n\nconst changeProjectStatus = (id: string, status: string) => {\n return async (dispatch: any) => {\n dispatch(setProjectActionLoading());\n await APIs.changeProjectStatus(id, {\n status,\n })\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(changeStatusFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(changeStatusSuccess());\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(changeStatusFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst updateSuccess = () => {\n return {\n type: ActionTypes.UPDATE_PROJECT_SUCCESS,\n };\n};\n\nconst updateFailure = () => {\n return {\n type: ActionTypes.UPDATE_PROJECT_FAILURE,\n };\n};\n\nconst updateProject = (\n id: string,\n payload: IUpdateProject,\n customSuccessMsg?: string,\n onSuccess?: () => void\n) => {\n return async (dispatch: any) => {\n dispatch(setProjectActionLoading());\n await APIs.updateProject(id, payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(updateSuccess());\n await Toast({\n title: customSuccessMsg || message,\n status: \"success\",\n });\n onSuccess && onSuccess();\n }\n })\n .catch(async (error) => {\n await dispatch(updateFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n fetchProjects,\n fetchProjectsForDashboard,\n getStatisticalProjects,\n createProject,\n getProjectById,\n deleteProject,\n updateProject,\n changeProjectStatus,\n resetProjectStatus,\n resetProjectReducer,\n saveCurrentDateInScroller,\n};\n","import _ from \"lodash\";\n\nimport { ActionTypes, ENUMS, Routers } from \"@/Constants\";\nimport APIs from \"@/APIs\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport { IFilterProject } from \"@/Interfaces/Project.interface\";\n\n// SINGLE ACTIONS\n\nconst setProjectExteriorFetchLoading = () => {\n return {\n type: ActionTypes.SET_PROJECT_EXTERIOR_FETCH_LOADING,\n };\n};\n\nconst setProjectExteriorGetLoading = () => {\n return {\n type: ActionTypes.SET_PROJECT_EXTERIOR_GET_LOADING,\n };\n};\n\nconst setProjectExteriorActionLoading = () => {\n return {\n type: ActionTypes.SET_PROJECT_EXTERIOR_ACTION_LOADING,\n };\n};\n\nconst setProjectExteriorMeta = (payload: any) => {\n return {\n type: ActionTypes.SET_PROJECT_EXTERIOR_META,\n payload,\n };\n};\n\nconst setProjectExteriorPagination = (payload: IFilterProject) => {\n return {\n type: ActionTypes.SET_PROJECT_EXTERIOR_PAGINATION,\n payload,\n };\n};\n\nconst resetProjectExteriorStatus = () => {\n return {\n type: ActionTypes.RESET_PROJECT_EXTERIOR_STATUS,\n };\n};\n\nconst resetProjectExteriorReducer = () => {\n return {\n type: ActionTypes.RESET_PROJECT_EXTERIOR_REDUCER,\n };\n};\n\nconst fetchSuccess = (payload: any[]) => {\n return {\n type: ActionTypes.FETCH_PROJECT_EXTERIORS_SUCCESS,\n payload,\n };\n};\n\nconst fetchFailure = () => {\n return {\n type: ActionTypes.FETCH_PROJECT_EXTERIORS_FAILURE,\n };\n};\n\nconst fetchProjectsExterior = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setProjectExteriorFetchLoading());\n await APIs.fetchProjects({ ...payload, type: ENUMS.PROJECT_TYPE.EXTERIOR })\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(fetchFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(setProjectExteriorMeta(_.get(result, \"meta\")));\n await dispatch(setProjectExteriorPagination(payload));\n await dispatch(fetchSuccess(resolveResult.items));\n }\n })\n .catch(async (error) => {\n await dispatch(fetchFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst createSuccess = () => {\n return {\n type: ActionTypes.CREATE_PROJECT_EXTERIOR_SUCCESS,\n };\n};\n\nconst createFailure = () => {\n return {\n type: ActionTypes.CREATE_PROJECT_EXTERIOR_FAILURE,\n };\n};\n\nconst createProjectExterior = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setProjectExteriorActionLoading());\n await APIs.createProjectExterior(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(createSuccess());\n await Toast({\n title: message,\n status: \"success\",\n });\n Utils.redirect(Routers.PROJECT);\n }\n })\n .catch(async (error) => {\n await dispatch(createFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getByIdSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_PROJECT_EXTERIOR_BY_ID_SUCCESS,\n payload,\n };\n};\n\nconst getByIdFailure = () => {\n return {\n type: ActionTypes.GET_PROJECT_EXTERIOR_BY_ID_FAILURE,\n };\n};\n\nconst getProjectExteriorById = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setProjectExteriorGetLoading());\n await APIs.getProjectById(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(getByIdFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else await dispatch(getByIdSuccess(result));\n })\n .catch(async (error) => {\n await dispatch(getByIdFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteSuccess = () => {\n return {\n type: ActionTypes.DELETE_PROJECT_EXTERIOR_SUCCESS,\n };\n};\n\nconst deleteFailure = () => {\n return {\n type: ActionTypes.DELETE_PROJECT_EXTERIOR_FAILURE,\n };\n};\n\nconst deleteProject = (id: string, filters: IFilterProject) => {\n return async (dispatch: any) => {\n dispatch(setProjectExteriorActionLoading());\n await APIs.deleteProject(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(deleteSuccess());\n await dispatch(fetchProjectsExterior(filters));\n Utils.redirect(Routers.PROJECT);\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(deleteFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst changeStatusSuccess = () => {\n return {\n type: ActionTypes.CHANGE_PROJECT_EXTERIOR_STATUS_SUCCESS,\n };\n};\n\nconst changeStatusFailure = () => {\n return {\n type: ActionTypes.CHANGE_PROJECT_EXTERIOR_STATUS_FAILURE,\n };\n};\n\nconst changeProjectStatus = (id: string, status: string) => {\n return async (dispatch: any) => {\n dispatch(setProjectExteriorActionLoading());\n await APIs.changeProjectStatus(id, {\n status,\n })\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(changeStatusFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(changeStatusSuccess());\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(changeStatusFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst updateSuccess = () => {\n return {\n type: ActionTypes.UPDATE_PROJECT_EXTERIOR_SUCCESS,\n };\n};\n\nconst updateFailure = () => {\n return {\n type: ActionTypes.UPDATE_PROJECT_EXTERIOR_FAILURE,\n };\n};\n\nconst updateProject = (id: string, payload: any, customSuccessMsg?: string) => {\n return async (dispatch: any) => {\n dispatch(setProjectExteriorActionLoading());\n await APIs.updateProject(id, payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(updateSuccess());\n await Toast({\n title: customSuccessMsg || message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(updateFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchUserCanAddSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_USER_CAN_ADD_SUCCESS,\n payload,\n };\n};\n\nconst fetchUerCanAddFailure = () => {\n return {\n type: ActionTypes.FETCH_USER_CAN_ADD_FAILURE,\n };\n};\n\nconst fetchUserCanAdd = (payload: IFilterProject) => {\n return async (dispatch: any) => {\n dispatch(setProjectExteriorFetchLoading());\n await APIs.fetchUserCanAdd(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(fetchUerCanAddFailure());\n await Toast({\n title: \"Fetch projects exterior failure\",\n description: message,\n status: \"error\",\n });\n } else {\n await dispatch(fetchUserCanAddSuccess(result));\n }\n })\n .catch(async (error) => {\n await dispatch(fetchUerCanAddFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n fetchProjectsExterior,\n createProjectExterior,\n getProjectExteriorById,\n deleteProject,\n updateProject,\n changeProjectStatus,\n resetProjectExteriorReducer,\n resetProjectExteriorStatus,\n fetchUserCanAdd,\n};\n","import { ActionTypes } from \"@/Constants\";\nimport APIs from \"@/APIs\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport _ from \"lodash\";\n\nimport { BoardActions } from \"@/Actions\";\nimport ProjectExteriorActions from \"./ProjectExterior.actions\";\nimport {\n IFilterAggregate,\n IFilterOverTime,\n ILogTimeStructure,\n} from \"@/Interfaces/LogTime.interface\";\n\nconst { getBoardById } = BoardActions;\nconst { getProjectExteriorById } = ProjectExteriorActions;\n\nconst setLogTimeFetchLoading = () => {\n return {\n type: ActionTypes.SET_LOG_TIME_FETCH_LOADING,\n };\n};\n\nconst setAggregateFetchLoading = () => {\n return {\n type: ActionTypes.SET_AGGREGATE_FETCH_LOADING,\n };\n};\n\nconst setLogTimeGetLoading = () => {\n return {\n type: ActionTypes.SET_LOG_TIME_GET_LOADING,\n };\n};\n\nconst setLogTimeActionLoading = () => {\n return {\n type: ActionTypes.SET_LOG_TIME_ACTION_LOADING,\n };\n};\n\nconst setMetaLogTime = (payload: any) => {\n return {\n type: ActionTypes.SET_LOG_TIME_META,\n payload,\n };\n};\n\nconst setMyTimePagination = (payload: any) => {\n return { type: ActionTypes.SET_MY_TIME_PAGINATION, payload };\n};\n\nconst setPaginationLogTime = (payload: any) => {\n return {\n type: ActionTypes.SET_LOG_TIME_PAGINATION,\n payload,\n };\n};\n\nexport const performAction = (\n actionType: string,\n id: string,\n extraData?: any\n) => ({\n type: ActionTypes.LOG_TIME_PERFORM_ACTION,\n payload: { actionType, id, extraData },\n});\n\nconst resetLogTimePerformAction = () => {\n return {\n type: ActionTypes.RESET_LOG_TIME_PERFORM_ACTION,\n };\n};\n\nconst resetLogTimeStatus = () => {\n return {\n type: ActionTypes.RESET_LOG_TIME_STATUS,\n };\n};\n\nconst resetLogTimeDetail = () => {\n return {\n type: ActionTypes.RESET_LOG_TIME_DETAIL,\n };\n};\n\nconst resetLogTimeReducer = () => {\n return {\n type: ActionTypes.RESET_LOG_TIME_REDUCER,\n };\n};\nconst createLogTimeSuccess = () => {\n return {\n type: ActionTypes.CREATE_LOG_TIME_SUCCESS,\n };\n};\n\nconst createLogTimeFail = () => {\n return {\n type: ActionTypes.CREATE_LOG_TIME_FAILURE,\n };\n};\n\nconst createLogtime = (\n payload: any,\n type?: boolean,\n getForTimeCard?: boolean,\n pagination?: any\n) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeActionLoading());\n await APIs.createLogtime(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createLogTimeFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createLogTimeSuccess());\n if (!type)\n await Toast({\n title: message,\n status: \"success\",\n });\n if (getForTimeCard) await dispatch(fetchLogTime(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(createLogTimeFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst createLogtimeInMyTime = (\n payload: any,\n pagination: any,\n onSuccess: () => void\n) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeActionLoading());\n await APIs.createLogtime(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createLogTimeFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createLogTimeSuccess());\n dispatch(getMyTime(pagination));\n onSuccess();\n }\n })\n .catch(async (error) => {\n await dispatch(createLogTimeFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchLogTimeSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_LOG_TIME_SUCCESS,\n payload,\n };\n};\n\nconst fetchLogTimeFail = () => {\n return {\n type: ActionTypes.FETCH_LOG_TIME_FAILURE,\n };\n};\n\nconst fetchLogTime = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeFetchLoading());\n await APIs.fetchLogtime(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchLogTimeFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(setMetaLogTime(_.get(result, \"meta\")));\n await dispatch(setPaginationLogTime(payload));\n await dispatch(fetchLogTimeSuccess(resolveResult.items));\n }\n })\n .catch(async () => {\n await dispatch(fetchLogTimeFail());\n });\n };\n};\n\nconst fetchBoardIdSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_LOG_TIME_BY_BOARD_ID_SUCCESS,\n payload,\n };\n};\n\nconst fetchByBoardIdFailure = () => {\n return {\n type: ActionTypes.FETCH_LOG_TIME_BY_BOARD_ID_FAILURE,\n };\n};\n\nconst fetchLogTimeByBoardId = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeFetchLoading());\n await APIs.fetchLogtimeByBoardId(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n await dispatch(fetchByBoardIdFailure());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(fetchBoardIdSuccess(resolveResult.items));\n }\n })\n .catch(async (error) => {\n await dispatch(fetchByBoardIdFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getByIdLogTimeSuccess = (payload: ILogTimeStructure) => {\n return {\n type: ActionTypes.GET_BY_ID_LOG_TIME_SUCCESS,\n payload,\n };\n};\n\nconst getByIdLogTimeFail = () => {\n return {\n type: ActionTypes.GET_BY_ID_LOG_TIME_FAILURE,\n };\n};\n\nconst getByIdLogTime = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeGetLoading());\n await APIs.getLogtimeById(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(getByIdLogTimeFail());\n } else {\n dispatch(getByIdLogTimeSuccess(result));\n }\n })\n .catch(async (error) => {\n await dispatch(getByIdLogTimeFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst updateLogTimeSuccess = () => {\n return {\n type: ActionTypes.UPDATE_LOG_TIME_SUCCESS,\n };\n};\n\nconst updateLogTimeFail = () => {\n return {\n type: ActionTypes.UPDATE_LOG_TIME_FAILURE,\n };\n};\n\nconst updateLogtime = (\n id: string,\n payload: any,\n boardId?: string,\n pagination?: any,\n getForTimeCard?: boolean,\n timelinePagination?: any,\n exteriorId?: string\n) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeActionLoading());\n await APIs.updateLogtime(id, payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateLogTimeFail());\n await Toast({\n title: message,\n //description:\n // message === \"start time or end time invalid\"\n // ? \"Start time or end time invalid\"\n // : message,\n status: \"error\",\n });\n } else {\n dispatch(updateLogTimeSuccess());\n if (exteriorId) {\n dispatch(getProjectExteriorById(exteriorId));\n }\n if (boardId) {\n dispatch(getBoardById(boardId));\n console.log(timelinePagination);\n\n //if (timelinePagination)\n // dispatch(getTimelineInBoard(boardId, timelinePagination));\n //else dispatch(getBoardById(boardId));\n }\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchLogTime(pagination));\n if (getForTimeCard)\n await dispatch(fetchAggregate({ page: 0, limit: 0 }));\n }\n })\n .catch(async (error) => {\n await dispatch(updateLogTimeFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst updateLogtimeInTimeline = (id: string, payload: any, boardId: string) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeActionLoading());\n await APIs.updateLogtime(id, payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateLogTimeFail());\n await Toast({\n title: message,\n //description:\n // message === \"start time or end time invalid\"\n // ? \"Start time or end time invalid\"\n // : message,\n status: \"error\",\n });\n } else {\n dispatch(getBoardById(boardId));\n Toast({\n title: message,\n status: \"success\",\n });\n dispatch(updateLogTimeSuccess());\n }\n })\n .catch(async (error) => {\n await dispatch(updateLogTimeFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst changeStatusLogTimeSuccess = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_LOG_TIME_SUCCESS,\n };\n};\n\nconst changeStatusTimeFail = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_LOG_TIME_FAILURE,\n };\n};\n\nconst changeStatusLogtime = (\n id: string,\n payload: any,\n pagination: IFilterOverTime\n) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeActionLoading());\n await APIs.changeStatusLogtime(id, payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(changeStatusTimeFail());\n await Toast({\n title: message,\n description: message,\n status: \"error\",\n });\n } else {\n dispatch(changeStatusLogTimeSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchLogTime(pagination));\n // await dispatch(fetchAggregate({ page: 0, limit: 0 }));\n }\n })\n .catch(async (error) => {\n await dispatch(changeStatusTimeFail());\n await Toast({\n title: error?.message,\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteLogTimeSuccess = () => {\n return {\n type: ActionTypes.DELETE_LOG_TIME_SUCCESS,\n };\n};\n\nconst deleteTimeFail = () => {\n return {\n type: ActionTypes.DELETE_LOG_TIME_FAILURE,\n };\n};\n\nconst deleteLogTime = (\n id: string,\n boardId?: string,\n pagination?: IFilterOverTime\n) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeActionLoading());\n await APIs.deleteLogtime(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteTimeFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(deleteLogTimeSuccess());\n if (boardId) {\n dispatch(getBoardById(boardId));\n dispatch(resetLogTimePerformAction());\n }\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchLogTime(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(deleteTimeFail());\n await dispatch(resetLogTimePerformAction());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteLogTimeInMyTime = (id: string, pagination?: any) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeActionLoading());\n await APIs.deleteLogtime(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteTimeFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(deleteLogTimeSuccess());\n\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(getMyTime(pagination));\n await dispatch(resetLogTimePerformAction());\n }\n })\n .catch(async (error) => {\n await dispatch(deleteTimeFail());\n await dispatch(resetLogTimePerformAction());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteLogTimeInDashboard = (id: string, pagination?: any) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeActionLoading());\n await APIs.deleteLogtime(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteTimeFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(deleteLogTimeSuccess());\n\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchLogTimeDashboard(pagination));\n await dispatch(resetLogTimePerformAction());\n }\n })\n .catch(async (error) => {\n await dispatch(deleteTimeFail());\n await dispatch(resetLogTimePerformAction());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getMyTimeSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_MY_TIME_SUCCESS,\n payload,\n };\n};\n\nconst getMyTimeFail = () => {\n return {\n type: ActionTypes.GET_MY_TIME_FAILURE,\n };\n};\n\nconst getMyTime = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeFetchLoading());\n await APIs.getMyTime(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n dispatch(setMyTimePagination(payload));\n if (!result) {\n await dispatch(getMyTimeFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(getMyTimeSuccess(resolveResult.items));\n }\n })\n .catch(async () => {\n await dispatch(getMyTimeFail());\n });\n };\n};\n\nconst setMetaAggregate = (payload: any) => {\n return {\n type: ActionTypes.SET_AGGREGATE_META,\n payload,\n };\n};\n\nconst setPaginationAggregate = (payload: IFilterAggregate) => {\n return {\n type: ActionTypes.SET_AGGREGATE_PAGINATION,\n payload,\n };\n};\n\nconst fetchAggregateSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_AGGREGATE_SUCCESS,\n payload,\n };\n};\n\nconst fetchAggregateFail = () => {\n return {\n type: ActionTypes.FETCH_AGGREGATE_FAILURE,\n };\n};\n\nconst fetchAggregate = (payload: IFilterAggregate) => {\n return async (dispatch: any) => {\n dispatch(setAggregateFetchLoading());\n await APIs.fetchAggregate(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchAggregateFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(setMetaAggregate(_.get(result, \"meta\")));\n await dispatch(setPaginationAggregate(payload));\n await dispatch(fetchAggregateSuccess(resolveResult.items));\n }\n })\n .catch(async () => {\n await dispatch(fetchAggregateFail());\n });\n };\n};\n\nconst fetchLogTimeDashboardSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_LOG_TIME_DASH_BOARD_SUCCESS,\n payload,\n };\n};\n\nconst fetchLogDashboardTimeFail = () => {\n return {\n type: ActionTypes.FETCH_LOG_TIME_DASH_BOARD_FAILURE,\n };\n};\n\nconst fetchLogTimeDashboard = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeFetchLoading());\n await APIs.fetchLogtimeDashboard(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchLogDashboardTimeFail());\n } else {\n // await dispatch(setMetaLogTime(_.get(result, \"meta\")));\n // await dispatch(setPaginationLogTime(payload));\n await dispatch(fetchLogTimeDashboardSuccess(response?.data?.payload));\n }\n })\n .catch(async () => {\n await dispatch(fetchLogDashboardTimeFail());\n });\n };\n};\n\nconst fetchDealineDashboardSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_DEADLINE_DASH_BOARD_SUCCESS,\n payload,\n };\n};\n\nconst fetchDealineDashboardFail = () => {\n return {\n type: ActionTypes.FETCH_DEADLINE_DASH_BOARD_FAILURE,\n };\n};\n\nconst fetchDealineDashboard = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeFetchLoading());\n await APIs.fetchLogtimeDelineDashboard(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchDealineDashboardFail());\n } else {\n // await dispatch(setMetaLogTime(_.get(result, \"meta\")));\n // await dispatch(setPaginationLogTime(payload));\n await dispatch(fetchDealineDashboardSuccess(response?.data?.payload));\n }\n })\n .catch(async () => {\n await dispatch(fetchDealineDashboardFail());\n });\n };\n};\n\nconst fetchMyWorkSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_MY_WORK_DASH_BOARD_SUCCESS,\n payload,\n };\n};\n\nconst fetchMyWorkFail = () => {\n return {\n type: ActionTypes.FETCH_MY_WORK_DASH_BOARD_FAILURE,\n };\n};\n\nconst fetchMyWorkDashboard = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setLogTimeFetchLoading());\n await APIs.fetchMyWorkDashboard(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n await dispatch(fetchMyWorkFail());\n } else {\n await dispatch(fetchMyWorkSuccess(response?.data?.payload));\n }\n })\n .catch(async () => {\n await dispatch(fetchMyWorkFail());\n });\n };\n};\n\nexport default {\n createLogtime,\n fetchLogTime,\n getMyTime,\n getByIdLogTime,\n updateLogtime,\n changeStatusLogtime,\n deleteLogTime,\n deleteLogTimeInMyTime,\n performAction,\n resetLogTimePerformAction,\n fetchLogTimeByBoardId,\n resetLogTimeStatus,\n resetLogTimeDetail,\n resetLogTimeReducer,\n fetchAggregate,\n fetchLogTimeDashboard,\n fetchDealineDashboard,\n fetchMyWorkDashboard,\n updateLogtimeInTimeline,\n setMyTimePagination,\n createLogtimeInMyTime,\n deleteLogTimeInDashboard,\n};\n","import APIs from \"@/APIs\";\nimport { ActionTypes } from \"@/Constants\";\nimport { IFilterDayOffRequest } from \"@/Interfaces/DayOffRequest\";\nimport { IFilterAggregate } from \"@/Interfaces/LogTime.interface\";\nimport { IPaginate } from \"@/Types/Common.types\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport _ from \"lodash\";\n\nconst setDayOffRequestFetchLoading = () => {\n return {\n type: ActionTypes.SET_DAY_OFF_REQUEST_FETCH_LOADING,\n };\n};\n\nconst setDayOffRequestGetLoading = () => {\n return {\n type: ActionTypes.SET_DAY_OFF_REQUEST_GET_LOADING,\n };\n};\n\nconst setDayOffRequestActionLoading = () => {\n return {\n type: ActionTypes.SET_DAY_OFF_REQUEST_ACTION_LOADING,\n };\n};\n\nconst resetDayOffRequestDetails = () => {\n return {\n type: ActionTypes.RESET_DAY_OFF_REQUEST_DETAILS,\n };\n};\n\nconst resetDayOffRequestReducer = () => {\n return {\n type: ActionTypes.RESET_REDUCER_DAY_OFF_REQUEST,\n };\n};\n\nconst setMetaDayOffRequest = (payload: IPaginate) => {\n return {\n type: ActionTypes.SET_META_DAY_OFF_REQUEST,\n payload,\n };\n};\n\nconst setPaginationDayOffRequest = (payload: any) => {\n return {\n type: ActionTypes.SET_PAGINATION_DAY_OFF_REQUEST,\n payload,\n };\n};\n\nconst createDayOffRequestSuccess = () => {\n return {\n type: ActionTypes.CREATE_DAY_OFF_REQUEST_SUCCESS,\n };\n};\n\nconst createDayOffRequestFail = () => {\n return {\n type: ActionTypes.CREATE_DAY_OFF_REQUEST_FAILURE,\n };\n};\n\nconst createDayOffRequest = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setDayOffRequestActionLoading());\n await APIs.createDayOffRequest(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n const message = response?.data?.message;\n await dispatch(createDayOffRequestFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createDayOffRequestSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(\n fetchDayOffRequest({\n page: 1,\n limit: 10,\n })\n );\n }\n })\n .catch(async (error) => {\n await dispatch(createDayOffRequestFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchDayOffRequestSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_DAY_OFF_REQUEST_SUCCESS,\n payload,\n };\n};\n\nconst fetchDayOffRequestFail = () => {\n return {\n type: ActionTypes.FETCH_DAY_OFF_REQUEST_FAILURE,\n };\n};\n\nconst fetchDayOffRequest = (payload: IFilterDayOffRequest) => {\n return async (dispatch: any) => {\n dispatch(setDayOffRequestFetchLoading());\n await APIs.fetchDayOffRequest(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(fetchDayOffRequestFail());\n else {\n const items = _.get(result, \"items\");\n const meta: any = _.get(result, \"meta\");\n dispatch(fetchDayOffRequestSuccess(items));\n dispatch(setMetaDayOffRequest(meta));\n dispatch(setPaginationDayOffRequest(payload));\n }\n })\n .catch(async () => {\n await dispatch(fetchDayOffRequestFail());\n });\n };\n};\n\nconst getByIdDayOffRequestSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_BY_ID_DAY_OFF_REQUEST_SUCCESS,\n payload,\n };\n};\n\nconst getByIdDayOffRequestFail = () => {\n return {\n type: ActionTypes.GET_BY_ID_DAY_OFF_REQUEST_FAILURE,\n };\n};\n\nconst getByIdDayOffRequest = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setDayOffRequestGetLoading());\n await APIs.getDayOffRequestById(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(getByIdDayOffRequestFail());\n else {\n dispatch(getByIdDayOffRequestSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(getByIdDayOffRequestFail());\n });\n };\n};\n\nconst updateDayOffRequestSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_DAY_OFF_REQUEST_SUCCESS,\n payload,\n };\n};\n\nconst updateDayOffRequestFail = () => {\n return {\n type: ActionTypes.UPDATE_DAY_OFF_REQUEST_FAILURE,\n };\n};\n\nconst updateDayOffRequest = (id: string, payload: any, pagination: any) => {\n return async (dispatch: any) => {\n dispatch(setDayOffRequestActionLoading());\n await APIs.updateDayOffReques(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateDayOffRequestFail());\n await Toast({\n title: message,\n description: message,\n status: \"error\",\n });\n } else {\n dispatch(updateDayOffRequestSuccess(result));\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchDayOffRequest(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(updateDayOffRequestFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst changeStatusDayOffRequestSuccess = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_DAY_OFF_REQUEST_SUCCESS,\n };\n};\n\nconst changeStatusDayOffRequestFail = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_DAY_OFF_REQUEST_FAILURE,\n };\n};\n\nconst changeStatusDayOffRequest = (\n id: string,\n payload: any,\n pagination?: any\n) => {\n return async (dispatch: any) => {\n dispatch(setDayOffRequestFetchLoading());\n await APIs.ChangeStatusDayOffRequest(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(changeStatusDayOffRequestFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n const language = Utils.getSavedLanguage();\n dispatch(changeStatusDayOffRequestSuccess());\n if (payload?.status === \"rejected\")\n Toast({\n title:\n language === \"en\"\n ? \"Reject day off request successfully\"\n : \"Từ chối yêu cầu ngày nghỉ thành công\",\n status: \"success\",\n });\n if (payload?.status === \"approved\")\n Toast({\n title:\n language === \"en\"\n ? \"Approve day off request successfully\"\n : \"Chấp nhận yêu cầu ngày nghỉ thành công\",\n status: \"success\",\n });\n if (payload?.status === \"pending\")\n Toast({\n title:\n language === \"en\"\n ? \"Pending day off request successfully\"\n : \"Chuyển trạng thái chờ yêu cầu ngày nghỉ thành công\",\n status: \"success\",\n });\n await dispatch(fetchDayOffRequest(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(changeStatusDayOffRequestFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteDayOffRequestSuccess = () => {\n return {\n type: ActionTypes.DELETE_DAY_OFF_REQUEST_SUCCESS,\n };\n};\n\nconst deleteDayOffRequestFail = () => {\n return {\n type: ActionTypes.DELETE_DAY_OFF_REQUEST_FAILURE,\n };\n};\n\nconst deleteDayOffRequest = (id: string, pagination?: any) => {\n return async (dispatch: any) => {\n dispatch(setDayOffRequestFetchLoading());\n await APIs.deleteDayoffRequest(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteDayOffRequestFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(deleteDayOffRequestSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchDayOffRequest(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(deleteDayOffRequestFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst setMetaAggregate = (payload: any) => {\n return {\n type: ActionTypes.SET_AGGREGATE_DAY_OFF_META,\n payload,\n };\n};\n\nconst setPaginationAggregate = (payload: IFilterAggregate) => {\n return {\n type: ActionTypes.SET_AGGREGATE_DAY_OFF_PAGINATION,\n payload,\n };\n};\n\nconst fetchAggregateDayOffSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_AGGREGATE_DAY_OFF_SUCCESS,\n payload,\n };\n};\n\nconst fetchAggregateFail = () => {\n return {\n type: ActionTypes.FETCH_AGGREGATE_DAY_OFF_FAILURE,\n };\n};\n\nconst fetchAggregateDayOffRequest = (payload: IFilterAggregate) => {\n return async (dispatch: any) => {\n dispatch(setDayOffRequestFetchLoading());\n await APIs.fetchAggregateDayOffRequest(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchAggregateFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(setMetaAggregate(_.get(result, \"meta\")));\n await dispatch(setPaginationAggregate(payload));\n await dispatch(fetchAggregateDayOffSuccess(resolveResult.items));\n }\n })\n .catch(async () => {\n await dispatch(fetchAggregateFail());\n });\n };\n};\n\nexport default {\n createDayOffRequest,\n fetchDayOffRequest,\n getByIdDayOffRequest,\n updateDayOffRequest,\n changeStatusDayOffRequest,\n resetDayOffRequestReducer,\n deleteDayOffRequest,\n fetchAggregateDayOffRequest,\n resetDayOffRequestDetails,\n};\n","import APIs from \"@/APIs\";\nimport { ActionTypes } from \"@/Constants\";\nimport {\n ICreateLeaveDays,\n IFilterLeaveDays,\n} from \"@/Interfaces/LeaveDays.interface\";\nimport { IPaginate } from \"@/Types/Common.types\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport _ from \"lodash\";\n\nconst setLeaveDaysFetchLoading = () => {\n return {\n type: ActionTypes.SET_LEAVE_DAYS_FETCH_LOADING,\n };\n};\n\nconst setLeaveDaysGetLoading = () => {\n return {\n type: ActionTypes.SET_LEAVE_DAYS_GET_LOADING,\n };\n};\n\nconst setLeaveDaysActionLoading = () => {\n return {\n type: ActionTypes.SET_LEAVE_DAYS_ACTION_LOADING,\n };\n};\n\nconst resetLeaveDaysReducer = () => {\n return {\n type: ActionTypes.RESET_LEAVE_DAYS,\n };\n};\n\nconst resetLeaveDayDetails = () => {\n return {\n type: ActionTypes.RESET_LEAVE_DAY_DETAILS,\n };\n};\n\nconst setMetaLeaveDays = (payload: IPaginate) => {\n return {\n type: ActionTypes.SET_META_LEAVE_DAYS,\n payload,\n };\n};\n\nconst setPaginationLeaveDays = (payload: any) => {\n return {\n type: ActionTypes.SET_PAGINATION_LEAVE_DAYS,\n payload,\n };\n};\n\nconst fetchLeaveDaysFilterCreatedSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_LEAVE_DAYS_FILTER_CREATE_SUCCESS,\n payload,\n };\n};\n\nconst fetchLeaveDaysSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_LEAVE_DAYS_SUCCESS,\n payload,\n };\n};\n\nconst fetchLeaveDaysFail = () => {\n return {\n type: ActionTypes.FETCH_LEAVE_DAYS_FAILURE,\n };\n};\n\nconst fetchLeaveDays = (payload: any, action?: string) => {\n return async (dispatch: any) => {\n dispatch(setLeaveDaysFetchLoading());\n await APIs.fetchLeaveDays(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(fetchLeaveDaysFail());\n else {\n const items = _.get(result, \"items\");\n const meta: any = _.get(result, \"meta\");\n if (action === \"filter\")\n dispatch(fetchLeaveDaysFilterCreatedSuccess(items));\n else {\n dispatch(fetchLeaveDaysSuccess(items));\n dispatch(setMetaLeaveDays(meta));\n dispatch(setPaginationLeaveDays(payload));\n }\n }\n })\n .catch(async () => {\n await dispatch(fetchLeaveDaysFail());\n });\n };\n};\n\nconst createLeaveDaysSuccess = () => {\n return {\n type: ActionTypes.CREATE_LEAVE_DAYS_SUCCESS,\n };\n};\n\nconst createLeaveDaysFail = () => {\n return {\n type: ActionTypes.CREATE_LEAVE_DAYS_FAILURE,\n };\n};\n\nconst createLeaveDays = (\n payload: ICreateLeaveDays,\n pagination: IFilterLeaveDays\n) => {\n return async (dispatch: any) => {\n dispatch(setLeaveDaysActionLoading());\n await APIs.createLeaveDays(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createLeaveDaysFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createLeaveDaysSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchLeaveDays(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(createLeaveDaysFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getByIdLeaveDaysSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_BY_ID_LEAVE_DAYS_SUCCESS,\n payload,\n };\n};\n\nconst getByIdLeaveDaysFail = () => {\n return {\n type: ActionTypes.GET_BY_ID_LEAVE_DAYS_FAILURE,\n };\n};\n\nconst getByIdLeaveDays = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setLeaveDaysGetLoading());\n await APIs.getLeaveDaysById(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(getByIdLeaveDaysFail());\n else {\n dispatch(getByIdLeaveDaysSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(getByIdLeaveDaysFail());\n });\n };\n};\n\nconst updateLeaveDaysSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_LEAVE_DAYS_SUCCESS,\n payload,\n };\n};\n\nconst updateLeaveDaysFail = () => {\n return {\n type: ActionTypes.UPDATE_LEAVE_DAYS_FAILURE,\n };\n};\n\nconst updateLeaveDays = (id: string, payload: any, pagination: any) => {\n return async (dispatch: any) => {\n dispatch(setLeaveDaysActionLoading());\n await APIs.updateLeaveDays(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateLeaveDaysFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updateLeaveDaysSuccess(result));\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchLeaveDays(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(updateLeaveDaysFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n createLeaveDays,\n fetchLeaveDays,\n getByIdLeaveDays,\n updateLeaveDays,\n resetLeaveDaysReducer,\n resetLeaveDayDetails,\n};\n","import APIs from \"@/APIs\";\nimport { ActionTypes } from \"@/Constants\";\n//import { IFilterRequestUpdateTimeCard } from \"@/Interfaces/RequestUpdateTimeCard\";\nimport { IPaginate } from \"@/Types/Common.types\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport _ from \"lodash\";\n\nconst setRequestUpdateTimeCardFetchLoading = () => {\n return {\n type: ActionTypes.SET_REQUEST_UPDATE_TIME_CARD_FETCH_LOADING,\n };\n};\n\nconst setRequestUpdateTimeCardGetLoading = () => {\n return {\n type: ActionTypes.SET_REQUEST_UPDATE_TIME_CARD_GET_LOADING,\n };\n};\n\nconst setRequestUpdateTimeCardActionLoading = () => {\n return {\n type: ActionTypes.SET_REQUEST_UPDATE_TIME_CARD_ACTION_LOADING,\n };\n};\n\nconst resetRequestUpdateTimeCardDetails = () => {\n return {\n type: ActionTypes.RESET_REQUEST_UPDATE_TIME_CARD_DETAILS,\n };\n};\n\nconst resetRequestUpdateTimeCardReducer = () => {\n return {\n type: ActionTypes.RESET_REDUCER_REQUEST_UPDATE_TIME_CARD,\n };\n};\n\nconst setMetaRequestUpdateTimeCard = (payload: IPaginate) => {\n return {\n type: ActionTypes.SET_META_REQUEST_UPDATE_TIME_CARD,\n payload,\n };\n};\n\nconst setPaginationRequestUpdateTimeCard = (payload: any) => {\n return {\n type: ActionTypes.SET_PAGINATION_REQUEST_UPDATE_TIME_CARD,\n payload,\n };\n};\n\nconst createRequestUpdateTimeCardSuccess = () => {\n return {\n type: ActionTypes.CREATE_REQUEST_UPDATE_TIME_CARD_SUCCESS,\n };\n};\n\nconst createRequestUpdateTimeCardFail = () => {\n return {\n type: ActionTypes.CREATE_REQUEST_UPDATE_TIME_CARD_FAILURE,\n };\n};\n\nconst createRequestUpdateTimeCard = (payload: FormData) => {\n return async (dispatch: any) => {\n dispatch(setRequestUpdateTimeCardActionLoading());\n await APIs.createRequestUpdateTimeCard(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createRequestUpdateTimeCardFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createRequestUpdateTimeCardSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(\n fetchRequestUpdateTimeCard({\n page: 1,\n limit: 10,\n })\n );\n }\n })\n .catch(async (error) => {\n await dispatch(createRequestUpdateTimeCardFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchRequestUpdateTimeCardSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_REQUEST_UPDATE_TIME_CARD_SUCCESS,\n payload,\n };\n};\n\nconst fetchRequestUpdateTimeCardFail = () => {\n return {\n type: ActionTypes.FETCH_REQUEST_UPDATE_TIME_CARD_FAILURE,\n };\n};\n\nconst fetchRequestUpdateTimeCard = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setRequestUpdateTimeCardFetchLoading());\n await APIs.fetchRequestUpdateTimeCard(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(fetchRequestUpdateTimeCardFail());\n else {\n const items = _.get(result, \"items\");\n const meta: any = _.get(result, \"meta\");\n dispatch(fetchRequestUpdateTimeCardSuccess(items));\n dispatch(setMetaRequestUpdateTimeCard(meta));\n dispatch(setPaginationRequestUpdateTimeCard(payload));\n }\n })\n .catch(async () => {\n await dispatch(fetchRequestUpdateTimeCardFail());\n });\n };\n};\n\nconst getByIdRequestUpdateTimeCardSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_BY_ID_REQUEST_UPDATE_TIME_CARD_SUCCESS,\n payload,\n };\n};\n\nconst getByIdRequestUpdateTimeCardFail = () => {\n return {\n type: ActionTypes.GET_BY_ID_REQUEST_UPDATE_TIME_CARD_FAILURE,\n };\n};\n\nconst getByIdRequestUpdateTimeCard = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setRequestUpdateTimeCardGetLoading());\n await APIs.getRequestUpdateTimeCardById(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(getByIdRequestUpdateTimeCardFail());\n else {\n dispatch(getByIdRequestUpdateTimeCardSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(getByIdRequestUpdateTimeCardFail());\n });\n };\n};\n\nconst updateRequestUpdateTimeCardSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_REQUEST_UPDATE_TIME_CARD_SUCCESS,\n payload,\n };\n};\n\nconst updateRequestUpdateTimeCardFail = () => {\n return {\n type: ActionTypes.UPDATE_REQUEST_UPDATE_TIME_CARD_FAILURE,\n };\n};\n\nconst updateRequestUpdateTimeCard = (\n id: string,\n payload: any,\n pagination: any\n) => {\n return async (dispatch: any) => {\n dispatch(setRequestUpdateTimeCardActionLoading());\n await APIs.updateRequestUpdateTimeCard(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateRequestUpdateTimeCardFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updateRequestUpdateTimeCardSuccess(result));\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchRequestUpdateTimeCard(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(updateRequestUpdateTimeCardFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst changeStatusRequestUpdateTimeCardSuccess = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_REQUEST_UPDATE_TIME_CARD_SUCCESS,\n };\n};\n\nconst changeStatusRequestUpdateTimeCardFail = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_REQUEST_UPDATE_TIME_CARD_FAILURE,\n };\n};\n\nconst changeStatusRequestUpdateTimeCard = (\n id: string,\n payload: any,\n pagination?: any,\n type?: string\n) => {\n return async (dispatch: any) => {\n dispatch(setRequestUpdateTimeCardActionLoading());\n await APIs.ChangeStatusRequestUpdateTimeCard(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n const language = Utils.getSavedLanguage();\n if (!result) {\n await dispatch(changeStatusRequestUpdateTimeCardFail());\n await Toast({\n title: `${type} ${\n language === \"en\"\n ? \"request update timecard fail\"\n : \"yêu cầu cập nhật thẻ thời gian thất bại\"\n } `,\n description: message,\n status: \"error\",\n });\n } else {\n dispatch(changeStatusRequestUpdateTimeCardSuccess());\n Toast({\n title: `${type} ${\n language === \"en\"\n ? \"request update timecard successfully\"\n : \"yêu cầu cập nhật thẻ thời gian thành công\"\n }`,\n status: \"success\",\n });\n await dispatch(fetchRequestUpdateTimeCard(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(changeStatusRequestUpdateTimeCardFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteUpdateTimeCardSuccess = () => {\n return {\n type: ActionTypes.DELETE_REQUEST_UPDATE_TIME_CARD_SUCCESS,\n };\n};\n\nconst deleteUpdateTimeCardFail = () => {\n return {\n type: ActionTypes.DELETE_REQUEST_UPDATE_TIME_CARD_FAILURE,\n };\n};\n\nconst deleteUpdateTimeCard = (id: string, pagination?: any) => {\n return async (dispatch: any) => {\n dispatch(setRequestUpdateTimeCardActionLoading());\n await APIs.deleteUpdateTimeCard(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteUpdateTimeCardFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(deleteUpdateTimeCardSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchRequestUpdateTimeCard(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(deleteUpdateTimeCardFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n createRequestUpdateTimeCard,\n fetchRequestUpdateTimeCard,\n getByIdRequestUpdateTimeCard,\n updateRequestUpdateTimeCard,\n changeStatusRequestUpdateTimeCard,\n resetRequestUpdateTimeCardReducer,\n resetRequestUpdateTimeCardDetails,\n deleteUpdateTimeCard,\n};\n","import { ActionTypes } from \"@/Constants\";\r\nimport APIs from \"@/APIs\";\r\nimport Utils from \"@/Utils\";\r\nimport { Toast } from \"@/Widgets\";\r\nimport {\r\n ICreateTimesheet,\r\n ITimesheetStructure,\r\n} from \"@/Interfaces/Timesheet.interface\";\r\n\r\n// SINGLE ACTIONS\r\nconst setTimesheetFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_TIMESHEET_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setTimesheetGetLoading = () => {\r\n return {\r\n type: ActionTypes.SET_TIMESHEET_GET_LOADING,\r\n };\r\n};\r\n\r\nconst setTimesheetActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_TIMESHEET_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst resetTimesheetStatus = () => {\r\n return {\r\n type: ActionTypes.RESET_TIMESHEET_STATUS,\r\n };\r\n};\r\n\r\nconst setTimesheetPagination = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_TIMESHEET_PAGINATION,\r\n payload,\r\n };\r\n};\r\n\r\nconst setTimesheetMeta = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_TIMESHEET_META,\r\n payload,\r\n };\r\n};\r\n\r\nconst resetTimesheetRecucer = () => {\r\n return {\r\n type: ActionTypes.RESET_TIMESHEET_REDUCER,\r\n };\r\n};\r\n\r\n//ASYNC ACTIONS\r\n\r\nconst fetchSuccess = (payload?: any) => {\r\n return {\r\n type: ActionTypes.FETCH_TIMESHEET_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_TIMESHEET_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchTimesheets = (payload: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTimesheetFetchLoading());\r\n await APIs.fetchTimesheets(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(fetchFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(setTimesheetMeta(result?.meta));\r\n dispatch(setTimesheetPagination(payload));\r\n dispatch(fetchSuccess(result?.items));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(fetchFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getByIdSuccess = (payload?: any) => {\r\n return {\r\n type: ActionTypes.GET_TIMESHEET_BY_ID_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst getByIdFailure = () => {\r\n return {\r\n type: ActionTypes.GET_TIMESHEET_BY_ID_FAILURE,\r\n };\r\n};\r\n\r\nconst getTimesheetById = (id: string) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTimesheetGetLoading());\r\n await APIs.getTimesheetById(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(getByIdFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else dispatch(getByIdSuccess(result));\r\n })\r\n .catch(async (error) => {\r\n await dispatch(getByIdFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst createSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_TIMESHEET_SUCCESS,\r\n };\r\n};\r\n\r\nconst createFailure = () => {\r\n return {\r\n type: ActionTypes.CREATE_TIMESHEET_FAILURE,\r\n };\r\n};\r\n\r\nconst createTimesheet = (\r\n pagination: any,\r\n payload: ICreateTimesheet,\r\n onSuccess: (data: ITimesheetStructure) => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTimesheetActionLoading());\r\n await APIs.createTimesheet(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(createFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(fetchTimesheets(pagination));\r\n dispatch(createSuccess());\r\n onSuccess(result);\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(createFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst updateSuccess = () => {\r\n return {\r\n type: ActionTypes.UPDATE_TIMESHEET_SUCCESS,\r\n };\r\n};\r\n\r\nconst updateFailure = () => {\r\n return {\r\n type: ActionTypes.UPDATE_TIMESHEET_FAILURE,\r\n };\r\n};\r\n\r\nconst updateTimesheet = (\r\n pagination: any,\r\n id: string,\r\n payload: any,\r\n onSuccess: (data: ITimesheetStructure) => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTimesheetActionLoading());\r\n await APIs.updateTimesheet(id, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(updateFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(fetchTimesheets(pagination));\r\n dispatch(updateSuccess());\r\n onSuccess(result);\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(updateFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst deleteSuccess = () => {\r\n return {\r\n type: ActionTypes.DELETE_TIMESHEET_SUCCESS,\r\n };\r\n};\r\n\r\nconst deleteFailure = () => {\r\n return {\r\n type: ActionTypes.DELETE_TIMESHEET_FAILURE,\r\n };\r\n};\r\n\r\nconst deleteTimesheet = (\r\n pagination: any,\r\n id: string,\r\n onSuccess: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTimesheetActionLoading());\r\n await APIs.deleteTimesheet(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(deleteFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(fetchTimesheets(pagination));\r\n dispatch(deleteSuccess());\r\n onSuccess();\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(deleteFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n fetchTimesheets,\r\n getTimesheetById,\r\n createTimesheet,\r\n updateTimesheet,\r\n deleteTimesheet,\r\n resetTimesheetRecucer,\r\n resetTimesheetStatus,\r\n};\r\n","import _ from \"lodash\";\r\nimport { ActionTypes } from \"@/Constants\";\r\nimport APIs from \"@/APIs\";\r\nimport Utils from \"@/Utils\";\r\nimport { IChatFilters } from \"@/Interfaces/Chat.interface\";\r\nimport { Toast } from \"@/Widgets\";\r\n\r\nconst setChatFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_CHAT_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setChatFetchChannelLoading = () => {\r\n return {\r\n type: ActionTypes.SET_CHAT_FETCH_CHANNEL_LOADING,\r\n };\r\n};\r\n\r\nconst setChatGetLoading = () => {\r\n return {\r\n type: ActionTypes.SET_CHAT_GET_LOADING,\r\n };\r\n};\r\n\r\nconst setChatActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_CHAT_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst setListMessages = (payload: any) => {\r\n const resolvedData = Utils.resolveMessages(payload);\r\n return {\r\n type: ActionTypes.SET_LIST_MESSAGES,\r\n payload: resolvedData,\r\n };\r\n};\r\n\r\nconst setTypeChat = (payload: string) => {\r\n return {\r\n type: ActionTypes.SET_TYPE_CHAT,\r\n payload,\r\n };\r\n};\r\n\r\nconst performAction = (\r\n actionType: string,\r\n chatId: string,\r\n extraData?: any\r\n) => ({\r\n type: ActionTypes.CHAT_PERFORM_ACTION,\r\n payload: { actionType, chatId, extraData },\r\n});\r\n\r\nconst setNewPerformAction = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_NEW_PERFORM_ACTION,\r\n payload,\r\n };\r\n};\r\n\r\nconst setNotification = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION,\r\n payload,\r\n };\r\n};\r\n\r\nconst resetChatPerformAction = () => {\r\n return {\r\n type: ActionTypes.RESET_CHAT_PERFORM_ACTION,\r\n };\r\n};\r\n\r\nconst createNewChat = (payload: any) => ({\r\n type: ActionTypes.CREATE_NEW_CHAT,\r\n payload,\r\n});\r\n\r\nconst resetNewChatData = () => ({\r\n type: ActionTypes.RESET_NEW_CHAT_DATA,\r\n});\r\n\r\nconst resetChatStatus = () => ({\r\n type: ActionTypes.RESET_CHAT_STATUS,\r\n});\r\n\r\nconst resetMediaInChannel = () => {\r\n return {\r\n type: ActionTypes.RESET_MEDIA_IN_CHANNEL,\r\n };\r\n};\r\n\r\nconst resetChatRecucer = () => {\r\n return {\r\n type: ActionTypes.RESET_CHAT_REDUCER,\r\n };\r\n};\r\n\r\nconst resetConversationChannelDetail = () => {\r\n return {\r\n type: ActionTypes.RESET_CONVERSATION_CHANNEL_DETAIL,\r\n };\r\n};\r\n\r\nconst setPotentialChats = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_POTENTIAL_CHATS,\r\n payload,\r\n };\r\n};\r\n\r\nconst setMessageDetailsPagination = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_MESSAGE_DETAILS_PAGINATION,\r\n payload,\r\n };\r\n};\r\n\r\nconst setMessageDetailsMeta = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_MESSAGE_DETAILS_META,\r\n payload,\r\n };\r\n};\r\n\r\n//ASYNC ACTIONS\r\n\r\nconst fetchChannelSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_MESSAGE_CHANNEL_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchChannelFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_MESSAGE_CHANNEL_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchMessageChannel = (isLoading: boolean) => {\r\n return async (dispatch: any) => {\r\n if (isLoading) dispatch(setChatFetchChannelLoading());\r\n await APIs.fetchMessageChannel()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(fetchChannelFailure());\r\n await Toast({ title: message, status: \"error\" });\r\n } else {\r\n await dispatch(fetchChannelSuccess(result));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(fetchChannelFailure());\r\n await Toast({ title: error?.message, status: \"error\" });\r\n });\r\n };\r\n};\r\n\r\nconst fetchMessageNotificationSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_MESSAGE_NOTIFICATION_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchMessageNotificationFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_MESSAGE_NOTIFICATION_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchMessageNotification = () => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatFetchLoading());\r\n await APIs.fetchMessageNotification()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(fetchMessageNotificationFailure());\r\n await Toast({ title: message, status: \"error\" });\r\n } else {\r\n await dispatch(fetchMessageNotificationSuccess(result));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(fetchChannelFailure());\r\n await Toast({ title: error?.message, status: \"error\" });\r\n });\r\n };\r\n};\r\n\r\nconst fetchConversationChannelDetailSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_CONVERSATION_CHANNEL_DETAIL_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchConversationChannelDetailFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_CONVERSATION_CHANNEL_DETAIL_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchConversationChannelDetail = (payload: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatFetchLoading());\r\n await APIs.fetchConversationChannelDetail(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n if (!result) {\r\n await dispatch(fetchConversationChannelDetailFailure());\r\n } else {\r\n await dispatch(fetchConversationChannelDetailSuccess(result));\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(fetchConversationChannelDetailFailure());\r\n });\r\n };\r\n};\r\n\r\nconst getMessageByChannelIdSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_MESSAGE_BY_CHANNEL_ID_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst getMessageByChannelIdFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_MESSAGE_BY_CHANNEL_ID_FAILURE,\r\n };\r\n};\r\n\r\nconst getMessageByChannelId = (\r\n id: string,\r\n payload: any,\r\n isLoading?: boolean\r\n) => {\r\n return async (dispatch: any) => {\r\n if (isLoading) dispatch(setChatGetLoading());\r\n\r\n try {\r\n const response: any = await APIs.fetchMessageByChannelId(id, payload);\r\n const result: any = await Utils.resolveResponse(response as any);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(getMessageByChannelIdFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(getMessageByChannelIdSuccess(result?.items));\r\n await dispatch(setMessageDetailsPagination(payload));\r\n await dispatch(setMessageDetailsMeta(result?.meta));\r\n return result?.items; // Resolved value of the overall promise\r\n }\r\n } catch (error) {\r\n await dispatch(getMessageByChannelIdFailure());\r\n return Promise.reject(error); // Propagate the error\r\n }\r\n };\r\n};\r\n\r\nconst fetchAllUsersSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_ALL_USER_FOR_CHAT_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchAllUsersFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_ALL_USER_FOR_CHAT_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchAllUsers = () => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatFetchLoading());\r\n await APIs.fetchAllUsers()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(fetchAllUsersFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(fetchAllUsersSuccess(result));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(fetchAllUsersFailure());\r\n await Toast({ title: error?.message, status: \"error\" });\r\n });\r\n };\r\n};\r\n\r\nconst fetchUserNotConversationSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_USER_NOT_CONVERSATION_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchUserNotConversationFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_USER_NOT_CONVERSATION_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchUserNotConversation = () => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatFetchLoading());\r\n await APIs.fetchUserNotConversation()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(fetchUserNotConversationFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(fetchUserNotConversationSuccess(result));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(fetchUserNotConversationFailure());\r\n await Toast({ title: error?.message, status: \"error\" });\r\n });\r\n };\r\n};\r\n\r\nconst createPrivateChatSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_PRIVATE_CHAT_SUCCESS,\r\n };\r\n};\r\n\r\nconst createPrivateChatFailure = () => {\r\n return {\r\n type: ActionTypes.CREATE_PRIVATE_CHAT_FAILURE,\r\n };\r\n};\r\n\r\nconst createPrivateChat = (payload: FormData) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.createPrivateChat(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(createPrivateChatFailure());\r\n await dispatch(resetNewChatData());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(createPrivateChatSuccess());\r\n await dispatch(fetchMessageChannel(false));\r\n await dispatch(performAction(\"view\", result?.channel?.id, result));\r\n await dispatch(resetNewChatData());\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(createPrivateChatFailure());\r\n await dispatch(resetNewChatData());\r\n await Toast({ title: error?.message, status: \"error\" });\r\n });\r\n };\r\n};\r\n\r\nconst createGroupChatSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_GROUP_CHAT_SUCCESS,\r\n };\r\n};\r\n\r\nconst createGroupChatFailure = () => {\r\n return {\r\n type: ActionTypes.CREATE_GROUP_CHAT_FAILURE,\r\n };\r\n};\r\n\r\nconst createGroupChat = (payload: FormData) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.createGroupChat(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(createGroupChatFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(createGroupChatSuccess());\r\n await dispatch(fetchMessageChannel(false));\r\n await dispatch(performAction(\"view\", result?.channel?.id, result));\r\n const channelId = result?.channel?.id;\r\n if (channelId) {\r\n const formData = new FormData();\r\n formData.append(\"channelId\", channelId);\r\n dispatch(readConversation(channelId, formData, () => {}));\r\n }\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(createGroupChatFailure());\r\n await Toast({ title: error?.message, status: \"error\" });\r\n });\r\n };\r\n};\r\n\r\nconst createMessageSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_MESSAGE_CHAT_SUCCESS,\r\n };\r\n};\r\n\r\nconst createMessageFailure = () => {\r\n return {\r\n type: ActionTypes.CREATE_MESSAGE_CHAT_FAILURE,\r\n };\r\n};\r\n\r\nconst createMessage = (\r\n payload: FormData,\r\n _channelId: string,\r\n onSuccess: (data: any) => void,\r\n onFailure: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.createMessageChat(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(createMessageFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n onSuccess(result);\r\n await dispatch(createMessageSuccess());\r\n await dispatch(fetchMessageChannel(false));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n onFailure();\r\n await dispatch(createMessageFailure());\r\n await Toast({\r\n title: error?.message || \"Create message failure\",\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst recalledMessageSuccess = () => {\r\n return {\r\n type: ActionTypes.RECALLED_MESSAGE_SUCCESS,\r\n };\r\n};\r\n\r\nconst recalledMessageFailure = () => {\r\n return {\r\n type: ActionTypes.RECALLED_MESSAGE_FAILURE,\r\n };\r\n};\r\n\r\nconst recalledMessage = (messsageId: string, onSuccess: () => void) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.recalledMessage(messsageId)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(recalledMessageFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n onSuccess();\r\n await dispatch(recalledMessageSuccess());\r\n await dispatch(fetchMessageChannel(false));\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(recalledMessageFailure());\r\n await Toast({\r\n title: error?.message || \"Recall message failure\",\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst deletePrivateMessageSuccess = () => {\r\n return {\r\n type: ActionTypes.DELETE_PRIVATE_MESSAGE_SUCCESS,\r\n };\r\n};\r\n\r\nconst deletePrivateMessageFailure = () => {\r\n return {\r\n type: ActionTypes.DELETE_PRIVATE_MESSAGE_FAILURE,\r\n };\r\n};\r\n\r\nconst deletePrivateMessage = (channelId: string, nextChannel: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.deletePrimaryMessage(channelId)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(deletePrivateMessageFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(deletePrivateMessageSuccess());\r\n await dispatch(fetchMessageChannel(false));\r\n if (!_.isEmpty(nextChannel)) {\r\n await dispatch(\r\n performAction(\"view\", nextChannel?.channel?.id, nextChannel)\r\n );\r\n }\r\n\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(deletePrivateMessageFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst fetchMediaByChannelIdSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_MEDIA_BY_CHANNEL_ID_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchMediaByChannelIdFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_MEDIA_BY_CHANNEL_ID_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchMediaByChannelId = (channelId: string, pagination: IChatFilters) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatFetchLoading());\r\n await APIs.fetchMediaByChannelId(channelId, pagination)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(fetchMediaByChannelIdFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(fetchMediaByChannelIdSuccess(result?.items));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(fetchMediaByChannelIdFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst addMemberToGroupSuccess = () => {\r\n return {\r\n type: ActionTypes.ADD_MEMBER_TO_GROUP_SUCCESS,\r\n };\r\n};\r\n\r\nconst addMemberToGroupFailure = () => {\r\n return {\r\n type: ActionTypes.ADD_MEMBER_TO_GROUP_FAILURE,\r\n };\r\n};\r\n\r\nconst addMemberToGroup = (\r\n channelId: string,\r\n payload: FormData,\r\n pagination: IChatFilters\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.addMemberToGroup(channelId, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(addMemberToGroupFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(addMemberToGroupSuccess());\r\n await dispatch(fetchMessageChannel(false));\r\n await dispatch(getMessageByChannelId(channelId, pagination));\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(addMemberToGroupFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst removeMemberToGroupSuccess = () => {\r\n return {\r\n type: ActionTypes.REMOVE_MEMBER_TO_GROUP_SUCCESS,\r\n };\r\n};\r\n\r\nconst removeMemberToGroupFailure = () => {\r\n return {\r\n type: ActionTypes.REMOVE_MEMBER_TO_GROUP_FAILURE,\r\n };\r\n};\r\n\r\nconst removeMemberToGroup = (\r\n channelId: string,\r\n payload: FormData,\r\n pagination: IChatFilters\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.removeMemberToGroup(channelId, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(removeMemberToGroupFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(removeMemberToGroupSuccess());\r\n await dispatch(fetchMessageChannel(false));\r\n await dispatch(getMessageByChannelId(channelId, pagination));\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(removeMemberToGroupFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst leaveGroupSuccess = () => {\r\n return {\r\n type: ActionTypes.LEAVE_GROUP_CHAT_SUCCESS,\r\n };\r\n};\r\n\r\nconst leaveGroupFailure = () => {\r\n return {\r\n type: ActionTypes.LEAVE_GROUP_CHAT_FAILURE,\r\n };\r\n};\r\n\r\nconst leaveGroup = (channelId: string, nextChannel: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.leaveGroup(channelId)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(leaveGroupFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(leaveGroupSuccess());\r\n await dispatch(fetchMessageChannel(false));\r\n if (!_.isEmpty(nextChannel)) {\r\n await dispatch(\r\n performAction(\"view\", nextChannel?.channel?.id, nextChannel)\r\n );\r\n } else {\r\n await dispatch(resetChatPerformAction());\r\n }\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(leaveGroupFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst readConversationSuccess = () => {\r\n return {\r\n type: ActionTypes.READ_CONVERSATION_SUCCESS,\r\n };\r\n};\r\n\r\nconst readConversationFailure = () => {\r\n return {\r\n type: ActionTypes.READ_CONVERSATION_FAILURE,\r\n };\r\n};\r\n\r\nconst readConversation = (\r\n channelId: string,\r\n payload: FormData,\r\n onSuccess: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.readConversation(channelId, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(readConversationFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n onSuccess();\r\n await dispatch(readConversationSuccess());\r\n // await dispatch(fetchMessageNotification());\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(readConversationFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst updateConversationSuccess = () => {\r\n return {\r\n type: ActionTypes.UPDATE_CONVERSATION_SUCCESS,\r\n };\r\n};\r\n\r\nconst updateConversationFailure = () => {\r\n return {\r\n type: ActionTypes.UPDATE_CONVERSATION_FAILURE,\r\n };\r\n};\r\n\r\nconst updateConversation = (\r\n channelId: string,\r\n payload: FormData,\r\n chatPerformAction: any,\r\n onSuccess?: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.updateConversation(channelId, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(updateConversationFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(updateConversationSuccess());\r\n await dispatch(fetchConversationChannelDetail(channelId));\r\n await dispatch(\r\n setNewPerformAction({\r\n ...chatPerformAction,\r\n extraData: {\r\n ...chatPerformAction?.extraData,\r\n channel: result,\r\n },\r\n })\r\n );\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n onSuccess && onSuccess();\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(updateConversationFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst removeAllFileSuccess = () => {\r\n return {\r\n type: ActionTypes.REMOVE_ALL_FILE_IN_CHAT_SUCCESS,\r\n };\r\n};\r\n\r\nconst removeAllFileFailure = () => {\r\n return {\r\n type: ActionTypes.REMOVE_ALL_FILE_IN_CHAT_FAILURE,\r\n };\r\n};\r\n\r\nconst removeAllFile = (\r\n data: { time: number; type: string },\r\n onSuccess: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setChatActionLoading());\r\n await APIs.removeAllFile(data)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(removeAllFileFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(removeAllFileSuccess());\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n onSuccess();\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(removeAllFileFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n performAction,\r\n resetChatPerformAction,\r\n createNewChat,\r\n resetNewChatData,\r\n resetChatRecucer,\r\n resetChatStatus,\r\n setPotentialChats,\r\n fetchMessageChannel,\r\n fetchMessageNotification,\r\n getMessageByChannelId,\r\n fetchUserNotConversation,\r\n fetchAllUsers,\r\n createPrivateChat,\r\n createGroupChat,\r\n createMessage,\r\n recalledMessage,\r\n deletePrivateMessage,\r\n fetchMediaByChannelId,\r\n resetMediaInChannel,\r\n addMemberToGroup,\r\n removeMemberToGroup,\r\n leaveGroup,\r\n readConversation,\r\n updateConversation,\r\n fetchChannelSuccess,\r\n setListMessages,\r\n setMessageDetailsPagination,\r\n setMessageDetailsMeta,\r\n fetchConversationChannelDetail,\r\n resetConversationChannelDetail,\r\n setNewPerformAction,\r\n setNotification,\r\n setTypeChat,\r\n removeAllFile,\r\n fetchMessageNotificationSuccess,\r\n};\r\n","import APIs from \"@/APIs\";\nimport { ActionTypes } from \"@/Constants\";\nimport {\n ICreateIp,\n IInternalStructure,\n} from \"@/Interfaces/InternalIp.interface\";\nimport { IPaginate } from \"@/Types/Common.types\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport _ from \"lodash\";\n\nconst setInternalIpFetchLoading = () => {\n return {\n type: ActionTypes.SET_INTERNAL_IP_FETCH_LOADING,\n };\n};\n\nconst setInternalIpGetLoading = () => {\n return {\n type: ActionTypes.SET_INTERNAL_IP_GET_LOADING,\n };\n};\n\nconst resetStatusInternalIp = () => {\n return {\n type: ActionTypes.RESET_STATUS_INTERNAL_IP,\n };\n};\n\nconst setInternalIpActionLoading = () => {\n return {\n type: ActionTypes.SET_INTERNAL_IP_ACTION_LOADING,\n };\n};\n\nconst resetInternalIpReducer = () => {\n return {\n type: ActionTypes.RESET_INTERNAL_IP,\n };\n};\n\nconst setMetaInternalIp = (payload: IPaginate) => {\n return {\n type: ActionTypes.SET_META_INTERNAL_IP,\n payload,\n };\n};\n\nconst setPaginationInternalIp = (payload?: any) => {\n return {\n type: ActionTypes.SET_PAGINATION_INTERNAL_IP,\n payload,\n };\n};\n\nconst createInternalIpSuccess = () => {\n return {\n type: ActionTypes.CREATE_INTERNAL_IP_SUCCESS,\n };\n};\n\nconst createInternalIpFail = () => {\n return {\n type: ActionTypes.CREATE_INTERNAL_IP_FAILURE,\n };\n};\n\nconst createInternalIp = (payload: ICreateIp) => {\n return async (dispatch: any) => {\n dispatch(setInternalIpActionLoading());\n dispatch(resetStatusInternalIp());\n await APIs.createInternal(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createInternalIpFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createInternalIpSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchInternalIp());\n }\n })\n .catch(async (error) => {\n await dispatch(createInternalIpFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchInternalIpSuccess = (payload: IInternalStructure) => {\n return {\n type: ActionTypes.FETCH_INTERNAL_IP_SUCCESS,\n payload,\n };\n};\n\nconst fetchInternalIpFail = () => {\n return {\n type: ActionTypes.FETCH_INTERNAL_IP_FAILURE,\n };\n};\n\nconst fetchInternalIp = (payload?: any) => {\n return async (dispatch: any) => {\n dispatch(setInternalIpFetchLoading());\n await APIs.fetchInternal(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchInternalIpFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(setMetaInternalIp(_.get(result, \"meta\")));\n await dispatch(setPaginationInternalIp(payload));\n await dispatch(fetchInternalIpSuccess(resolveResult.items));\n }\n })\n .catch(async () => {\n await dispatch(fetchInternalIpFail());\n });\n };\n};\n\nconst getByIdInternalIpSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_BY_ID_INTERNAL_IP_SUCCESS,\n payload,\n };\n};\n\nconst getByIdInternalIpFail = () => {\n return {\n type: ActionTypes.GET_BY_ID_INTERNAL_IP_FAILURE,\n };\n};\n\nconst getByIdInternalIp = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setInternalIpGetLoading());\n await APIs.getInternalById(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(getByIdInternalIpFail());\n else {\n dispatch(getByIdInternalIpSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(getByIdInternalIpFail());\n });\n };\n};\n\nconst updateInternalIpSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_INTERNAL_IP_SUCCESS,\n payload,\n };\n};\n\nconst updateInternalIpFail = () => {\n return {\n type: ActionTypes.UPDATE_INTERNAL_IP_FAILURE,\n };\n};\n\nconst updateInternalIp = (id: string, payload: ICreateIp, pagination?: any) => {\n return async (dispatch: any) => {\n dispatch(setInternalIpFetchLoading());\n dispatch(resetStatusInternalIp());\n await APIs.updateInternal(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateInternalIpFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updateInternalIpSuccess(result));\n dispatch(fetchInternalIp(pagination));\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchInternalIp());\n }\n })\n .catch(async (error) => {\n await dispatch(updateInternalIpFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst changeStatusInternalIpSuccess = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_INTERNAL_IP_SUCCESS,\n };\n};\n\nconst changeStatusInternalIpFail = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_INTERNAL_IP_FAILURE,\n };\n};\n\nconst changeStatusInternalIp = (id: string, payload: any) => {\n return async (dispatch: any) => {\n dispatch(setInternalIpActionLoading());\n await APIs.changeStatusInternal(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(changeStatusInternalIpFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(changeStatusInternalIpSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchInternalIp());\n }\n })\n .catch(async (error: any) => {\n await dispatch(changeStatusInternalIpFail());\n await Toast({\n title: error?.message,\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst createInternalIpRemoteSuccess = () => {\n return {\n type: ActionTypes.CHANGE_INTERNAL_IP_REMOTE_SUCCESS,\n };\n};\n\nconst createInternalIpRemoteFail = () => {\n return {\n type: ActionTypes.CHANGE_INTERNAL_IP_REMOTE_FAILURE,\n };\n};\n\nconst createInternalIpRemote = () => {\n return async (dispatch: any) => {\n dispatch(setInternalIpActionLoading());\n await APIs.changeInternalRemote()\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) {\n const language = Utils.getSavedLanguage();\n await dispatch(createInternalIpRemoteFail());\n await Toast({\n title: `${\n response?.data?.payload?.status\n ? language === \"en\"\n ? \"Enable remote working feature error\"\n : \"Bật tính năng làm việc từ xa lỗi\"\n : language === \"en\"\n ? \"Turn off the remote working feature error\"\n : \"Tắt tính năng làm việc từ xa lỗi\"\n } `,\n status: \"error\",\n });\n } else {\n const language = Utils.getSavedLanguage();\n dispatch(createInternalIpRemoteSuccess());\n dispatch(fetchInternalIpRemote());\n await Toast({\n title: `${\n response?.data?.payload?.status\n ? language === \"en\"\n ? \"Enable remote working feature successfully\"\n : \"Bật tính năng làm việc từ xa thành công\"\n : language === \"en\"\n ? \"Turn off the remote working feature successfully\"\n : \"Tắt tính năng làm việc từ xa thành công\"\n } `,\n status: \"success\",\n });\n }\n })\n .catch(async (error: any) => {\n await dispatch(createInternalIpRemoteFail());\n await Toast({\n title: ``,\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchInternalIpRemoteSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_INTERNAL_REMOTE_SUCCESS,\n payload,\n };\n};\n\nconst fetchInternalIpRemoteFail = () => {\n return {\n type: ActionTypes.FETCH_INTERNAL_REMOTE_FAILURE,\n };\n};\n\nconst fetchInternalIpRemote = () => {\n return async (dispatch: any) => {\n dispatch(setInternalIpFetchLoading());\n await APIs.fetchInternalIpRemote()\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n await dispatch(fetchInternalIpRemoteFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(fetchInternalIpRemoteSuccess(resolveResult));\n }\n })\n .catch(async () => {\n await dispatch(fetchInternalIpRemoteFail());\n });\n };\n};\n\nexport default {\n resetInternalIpReducer,\n getByIdInternalIp,\n fetchInternalIp,\n updateInternalIp,\n changeStatusInternalIp,\n createInternalIp,\n createInternalIpRemote,\n fetchInternalIpRemote,\n};\n","import APIs from \"@/APIs\";\nimport { ActionTypes } from \"@/Constants\";\nimport {\n ICreateHoliday,\n IFilterHoliday,\n IHolidayStructure,\n} from \"@/Interfaces/Holiday.interface\";\nimport { IPaginate } from \"@/Types/Common.types\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport _ from \"lodash\";\n\nconst setHolidayFetchLoading = () => {\n return {\n type: ActionTypes.SET_HOLIDAY_FETCH_LOADING,\n };\n};\n\nconst setHolidayGetLoading = () => {\n return {\n type: ActionTypes.SET_HOLIDAY_GET_LOADING,\n };\n};\n\nconst setHolidayActionLoading = () => {\n return {\n type: ActionTypes.SET_HOLIDAY_ACTION_LOADING,\n };\n};\n\nconst resetHolidayReducer = () => {\n return {\n type: ActionTypes.RESET_HOLIDAY,\n };\n};\n\nconst setMetaHoliday = (payload: IPaginate) => {\n return {\n type: ActionTypes.SET_META_HOLIDAY,\n payload,\n };\n};\n\nconst setPaginationHoliday = (payload: any) => {\n return {\n type: ActionTypes.SET_PAGINATION_HOLIDAY,\n payload,\n };\n};\n\nconst fetchHolidaysSuccess = (payload: IHolidayStructure) => {\n return {\n type: ActionTypes.FETCH_HOLIDAY_SUCCESS,\n payload,\n };\n};\n\nconst fetchHolidaysFail = () => {\n return {\n type: ActionTypes.FETCH_HOLIDAY_FAILURE,\n };\n};\n\nconst fetchHoliday = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setHolidayFetchLoading());\n await APIs.fetchHoliday(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(fetchHolidaysFail());\n else {\n const items = _.get(result, \"items\");\n const meta: any = _.get(result, \"meta\");\n dispatch(setMetaHoliday(meta));\n dispatch(setPaginationHoliday(payload));\n if (items) dispatch(fetchHolidaysSuccess(items));\n }\n })\n .catch(async () => {\n await dispatch(fetchHolidaysFail());\n });\n };\n};\n\nconst createHolidaySuccess = () => {\n return {\n type: ActionTypes.CREATE_HOLIDAY_SUCCESS,\n };\n};\n\nconst createHolidayFail = () => {\n return {\n type: ActionTypes.CREATE_HOLIDAY_FAILURE,\n };\n};\n\nconst createHoliday = (payload: ICreateHoliday, pagination: IFilterHoliday) => {\n return async (dispatch: any) => {\n dispatch(setHolidayActionLoading());\n await APIs.createHoliday(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createHolidayFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createHolidaySuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchHoliday(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(createHolidayFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getByIdHolidaySuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_BY_ID_HOLIDAY_SUCCESS,\n payload,\n };\n};\n\nconst getByIdHolidayFail = () => {\n return {\n type: ActionTypes.GET_BY_ID_HOLIDAY_FAILURE,\n };\n};\n\nconst getByIdHoliday = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setHolidayGetLoading());\n await APIs.getHolidayById(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(getByIdHolidayFail());\n else {\n dispatch(getByIdHolidaySuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(getByIdHolidayFail());\n });\n };\n};\n\nconst updateHolidaySuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_HOLIDAY_SUCCESS,\n payload,\n };\n};\n\nconst updateHolidayFail = () => {\n return {\n type: ActionTypes.UPDATE_HOLIDAY_FAILURE,\n };\n};\n\nconst updateHoliday = (id: string, payload: any, pagination: any) => {\n return async (dispatch: any) => {\n dispatch(setHolidayActionLoading());\n await APIs.updateHoliday(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateHolidayFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updateHolidaySuccess(result));\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchHoliday(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(updateHolidayFail());\n await Toast({\n title: error?.message,\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst changeStatusHolidaySuccess = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_HOLIDAY_SUCCESS,\n };\n};\n\nconst changeStatusTimeFail = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_HOLIDAY_FAILURE,\n };\n};\n\nconst changeStatusHoliday = (\n id: string,\n payload: any,\n pagination: IFilterHoliday,\n type?: string\n) => {\n return async (dispatch: any) => {\n dispatch(setHolidayActionLoading());\n await APIs.ChangeStatusHoliday(id, payload)\n .then(async (response: any) => {\n const language = Utils.getSavedLanguage();\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(changeStatusTimeFail());\n await Toast({\n title: ` ${type} ${\n language === \"en\" ? \"holiday failed\" : \"ngày lễ lỗi\"\n } `,\n status: \"error\",\n });\n } else {\n dispatch(changeStatusHolidaySuccess());\n Toast({\n title: ` ${type} ${\n language === \"en\" ? \"holiday successfully\" : \"ngày lễ thành công\"\n } `,\n status: \"success\",\n });\n await dispatch(fetchHoliday(pagination));\n }\n })\n .catch(async (error) => {\n await dispatch(changeStatusTimeFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n fetchHoliday,\n resetHolidayReducer,\n createHoliday,\n getByIdHoliday,\n updateHoliday,\n changeStatusHoliday,\n};\n","import { ActionTypes } from \"@/Constants\";\r\nimport APIs from \"@/APIs\";\r\nimport Utils from \"@/Utils\";\r\nimport { Toast } from \"@/Widgets\";\r\nimport { IPerformanceFilter } from \"@/Interfaces/Performance.interface\";\r\n\r\n// SINGLE ACTIONS\r\nconst setPerformanceFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_PERFORMANCE_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setPerformanceGetLoading = () => {\r\n return {\r\n type: ActionTypes.SET_PERFORMANCE_GET_LOADING,\r\n };\r\n};\r\n\r\nconst setPerformanceActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_PERFORMANCE_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst setPerformancePagination = (payload: IPerformanceFilter) => {\r\n return {\r\n type: ActionTypes.SET_PERFORMANCE_PAGINATION,\r\n payload,\r\n };\r\n};\r\n\r\nconst setPerformanceMeta = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_PERFORMANCE_META,\r\n payload,\r\n };\r\n};\r\n\r\nconst performAction = (\r\n actionType: string,\r\n itemId: string,\r\n performance?: any\r\n) => ({\r\n type: ActionTypes.PERFORMANCE_PERFORM_ACTION,\r\n payload: { actionType, itemId, performance },\r\n});\r\n\r\nconst resetPerformancePerformAction = () => {\r\n return {\r\n type: ActionTypes.RESET_PERFORMANCE_PERFORM_ACTION,\r\n };\r\n};\r\n\r\nconst resetPerformanceRecucer = () => {\r\n return {\r\n type: ActionTypes.RESET_PERFORMANCE_REDUCER,\r\n };\r\n};\r\n\r\n//ASYNC ACTIONS\r\n\r\nconst fetchSuccess = (payload?: any) => {\r\n return {\r\n type: ActionTypes.FETCH_PERFORMANCES_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_PERFORMANCES_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchPerformances = (payload: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setPerformanceFetchLoading());\r\n await APIs.fetchPerformances(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(fetchFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(fetchSuccess(result?.items));\r\n dispatch(setPerformanceMeta(result?.meta));\r\n dispatch(setPerformancePagination(payload));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(fetchFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst createSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_PERFORMANCE_SUCCESS,\r\n };\r\n};\r\n\r\nconst createFailure = () => {\r\n return {\r\n type: ActionTypes.CREATE_PERFORMANCE_FAILURE,\r\n };\r\n};\r\n\r\nconst createPerformance = (payload: any, pagination: IPerformanceFilter) => {\r\n return async (dispatch: any) => {\r\n dispatch(setPerformanceActionLoading());\r\n await APIs.createPerformance(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(createFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(createSuccess());\r\n dispatch(fetchPerformances(pagination));\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(createFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getByIdSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.GET_PERFORMANCE_BY_ID_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst getByIdFailure = () => {\r\n return {\r\n type: ActionTypes.GET_PERFORMANCE_BY_ID_FAILURE,\r\n };\r\n};\r\n\r\nconst getPerformanceById = (id: string) => {\r\n return async (dispatch: any) => {\r\n dispatch(setPerformanceGetLoading());\r\n await APIs.getPerformanceById(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(getByIdFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else dispatch(getByIdSuccess(result));\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(getByIdFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n fetchPerformances,\r\n createPerformance,\r\n getPerformanceById,\r\n performAction,\r\n resetPerformancePerformAction,\r\n resetPerformanceRecucer,\r\n};\r\n","import { ActionTypes } from \"@/Constants\";\r\nimport APIs from \"@/APIs\";\r\nimport Utils from \"@/Utils\";\r\nimport { Toast } from \"@/Widgets\";\r\nimport {\r\n ICountNotifications,\r\n INotificationFilter,\r\n} from \"@/Interfaces/Notification.interface\";\r\n\r\n// SINGLE ACTIONS\r\nconst setNotificationFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setNotificationFetchOutsideLoading = () => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION_FETCH_OUTSIDE_LOADING,\r\n };\r\n};\r\n\r\nconst setNotificationGetLoading = () => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION_GET_LOADING,\r\n };\r\n};\r\n\r\nconst setNotificationActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_NOTIFICATION_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst setPaginationNotification = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_PAGINATION_NOTIFICATION,\r\n payload,\r\n };\r\n};\r\n\r\nconst setMetaNotification = (payload: any) => {\r\n return {\r\n type: ActionTypes.SET_META_NOTIFICATION,\r\n payload,\r\n };\r\n};\r\n\r\nconst resetNotificationRecucer = () => {\r\n return {\r\n type: ActionTypes.RESET_NOTIFICATION_REDUCER,\r\n };\r\n};\r\n\r\n//ASYNC ACTIONS\r\n\r\nconst fetchSuccess = (payload?: any) => {\r\n return {\r\n type: ActionTypes.FETCH_NOTIFICATION_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_NOTIFICATION_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchNotifications = (payload?: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNotificationFetchLoading());\r\n await APIs.fetchNotifications(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(fetchFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(setPaginationNotification(payload));\r\n dispatch(setMetaNotification(result?.meta));\r\n dispatch(fetchSuccess(result?.items));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(fetchFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst fetchOutsideSuccess = (payload?: any) => {\r\n return {\r\n type: ActionTypes.FETCH_OUTSIDE_NOTIFICATION_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchOutsideFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_OUTSIDE_NOTIFICATION_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchOutsideNotifications = () => {\r\n return async (dispatch: any) => {\r\n dispatch(setNotificationFetchOutsideLoading());\r\n await APIs.fetchOutsideNotifications()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(fetchOutsideFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else dispatch(fetchOutsideSuccess(result));\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(fetchOutsideFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getByIdSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.GET_NOTIFICATION_BY_ID_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst getByIdFailure = () => {\r\n return {\r\n type: ActionTypes.GET_NOTIFICATION_BY_ID_FAILURE,\r\n };\r\n};\r\n\r\nconst getNotificationById = (id: string) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNotificationGetLoading());\r\n await APIs.getNotificationById(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(getByIdFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else dispatch(getByIdSuccess(result));\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(getByIdFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst markAsReadSuccess = () => {\r\n return {\r\n type: ActionTypes.MARK_AS_READ_NOTIFICATION_SUCCESS,\r\n };\r\n};\r\n\r\nconst markAsReadFailure = () => {\r\n return {\r\n type: ActionTypes.MARK_AS_READ_NOTIFICATION_FAILURE,\r\n };\r\n};\r\n\r\nconst markAsRead = (\r\n payload: {\r\n notificationIds: string[];\r\n },\r\n pagination: INotificationFilter\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNotificationActionLoading());\r\n await APIs.markAsRead(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(markAsReadFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(markAsReadSuccess());\r\n dispatch(fetchNotifications(pagination));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(markAsReadFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst markAllAsReadSuccess = () => {\r\n return {\r\n type: ActionTypes.MARK_ALL_AS_READ_NOTIFICATION_SUCCESS,\r\n };\r\n};\r\n\r\nconst markAllAsReadFailure = () => {\r\n return {\r\n type: ActionTypes.MARK_ALL_AS_READ_NOTIFICATION_FAILURE,\r\n };\r\n};\r\n\r\nconst markAllAsRead = (pagination: INotificationFilter) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNotificationActionLoading());\r\n await APIs.markAllAsRead()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(markAllAsReadFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n dispatch(markAllAsReadSuccess());\r\n dispatch(fetchNotifications(pagination));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(markAllAsReadFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst markAllAsReadOutsideSuccess = () => {\r\n return {\r\n type: ActionTypes.MARK_ALL_AS_READ_OUTSIDE_NOTIFICATION_SUCCESS,\r\n };\r\n};\r\n\r\nconst markAllAsReadOutsideFailure = () => {\r\n return {\r\n type: ActionTypes.MARK_ALL_AS_READ_OUTSIDE_NOTIFICATION_FAILURE,\r\n };\r\n};\r\n\r\nconst markAllAsReadOutside = (\r\n pagination: INotificationFilter,\r\n count: ICountNotifications\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNotificationActionLoading());\r\n await APIs.markAllAsReadOutside()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(markAllAsReadOutsideFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n if (count?.countNotificationUnread > 0) {\r\n dispatch(fetchOutsideNotifications());\r\n dispatch(markAllAsReadOutsideSuccess());\r\n }\r\n dispatch(fetchNotifications(pagination));\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(markAllAsReadOutsideFailure());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n fetchNotifications,\r\n fetchOutsideSuccess,\r\n fetchOutsideNotifications,\r\n getNotificationById,\r\n markAsRead,\r\n markAllAsRead,\r\n markAllAsReadOutside,\r\n resetNotificationRecucer,\r\n};\r\n","import { ActionTypes } from \"@/Constants\";\r\nconst setUserConnectSocket = (payload: any) => {\r\n return {\r\n type: ActionTypes.USER_CONNECT_SOCKET,\r\n payload,\r\n };\r\n};\r\n\r\nconst setSidebarExpanded = (payload: boolean) => {\r\n return {\r\n type: ActionTypes.SET_SIDEBAR_EXPANDED,\r\n payload,\r\n };\r\n};\r\nconst saveCurrentDateInScroller = (payload: string) => {\r\n return {\r\n type: ActionTypes.SAVE_CURRENT_DATE_IN_SCROLLER,\r\n payload,\r\n };\r\n};\r\n\r\nconst resetSocketRecucer = () => {\r\n return {\r\n type: ActionTypes.RESET_SOCKET_REDUCER,\r\n };\r\n};\r\n\r\nexport default {\r\n setUserConnectSocket,\r\n setSidebarExpanded,\r\n saveCurrentDateInScroller,\r\n resetSocketRecucer,\r\n};\r\n","import { ActionTypes } from \"@/Constants\";\r\nimport APIs from \"@/APIs\";\r\nimport Utils from \"@/Utils\";\r\nimport { Toast } from \"@/Widgets\";\r\nimport { ITaskNoteFilters } from \"@/Interfaces/TaskNote.interface\";\r\n\r\n// SINGLE ACTIONS\r\nconst setTaskNoteFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_TASK_NOTE_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setTaskNoteGetLoading = () => {\r\n return {\r\n type: ActionTypes.SET_TASK_NOTE_GET_LOADING,\r\n };\r\n};\r\n\r\nconst setTaskNoteActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_TASK_NOTE_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst resetTaskNoteDetails = () => {\r\n return {\r\n type: ActionTypes.RESET_TASK_NOTE_DETAILS,\r\n };\r\n};\r\n\r\nconst resetTaskNoteRecucer = () => {\r\n return {\r\n type: ActionTypes.RESET_TASK_NOTE_REDUCER,\r\n };\r\n};\r\n\r\n//ASYNC ACTIONS\r\n\r\nconst fetchSuccess = (payload?: any) => {\r\n return {\r\n type: ActionTypes.FETCH_TASK_NOTE_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchFailure = () => {\r\n return {\r\n type: ActionTypes.FETCH_TASK_NOTE_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchTaskNote = (payload: ITaskNoteFilters) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTaskNoteFetchLoading());\r\n await APIs.fetchTaskNote(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(fetchFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else dispatch(fetchSuccess(result?.items));\r\n })\r\n .catch(async (error: any) => {\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n await dispatch(fetchFailure());\r\n });\r\n };\r\n};\r\n\r\nconst createSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_TASK_NOTE_SUCCESS,\r\n };\r\n};\r\n\r\nconst createFailure = () => {\r\n return {\r\n type: ActionTypes.CREATE_TASK_NOTE_FAILURE,\r\n };\r\n};\r\n\r\nconst createTaskNote = (payload: FormData, onSuccess: () => void) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTaskNoteActionLoading());\r\n await APIs.createTaskNote(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(createFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(createSuccess());\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n onSuccess();\r\n }\r\n })\r\n .catch(async (error) => {\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n await dispatch(createFailure());\r\n });\r\n };\r\n};\r\n\r\nconst getByIdSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.GET_TASK_NOTE_BY_ID_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst getByIdFailure = () => {\r\n return {\r\n type: ActionTypes.GET_TASK_NOTE_BY_ID_FAILURE,\r\n };\r\n};\r\n\r\nconst getTaskNoteById = (id: string) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTaskNoteGetLoading());\r\n await APIs.getTaskNoteById(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(getByIdFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else dispatch(getByIdSuccess(result));\r\n })\r\n .catch(async (error) => {\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n await dispatch(getByIdFailure());\r\n });\r\n };\r\n};\r\n\r\nconst updateTaskNoteSuccess = () => {\r\n return {\r\n type: ActionTypes.UPDATE_TASK_NOTE_SUCCESS,\r\n };\r\n};\r\n\r\nconst updateTaskNoteFailure = () => {\r\n return {\r\n type: ActionTypes.UPDATE_TASK_NOTE_FAILURE,\r\n };\r\n};\r\n\r\nconst updateTaskNote = (\r\n id: string,\r\n payload: FormData,\r\n onSuccess: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTaskNoteActionLoading());\r\n await APIs.updateTaskNote(id, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(updateTaskNoteFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(updateTaskNoteSuccess());\r\n onSuccess();\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error) => {\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n await dispatch(updateTaskNoteFailure());\r\n });\r\n };\r\n};\r\n\r\nconst deleteTaskNoteSuccess = () => {\r\n return {\r\n type: ActionTypes.DELETE_TASK_NOTE_SUCCESS,\r\n };\r\n};\r\n\r\nconst deleteTaskNoteFailure = () => {\r\n return {\r\n type: ActionTypes.DELETE_TASK_NOTE_FAILURE,\r\n };\r\n};\r\n\r\nconst deleteTaskNote = (id: string, onSuccess: () => void) => {\r\n return async (dispatch: any) => {\r\n dispatch(setTaskNoteActionLoading());\r\n await APIs.deleteTaskNote(id)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(deleteTaskNoteFailure());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n dispatch(deleteTaskNoteSuccess());\r\n onSuccess();\r\n }\r\n })\r\n .catch(async (error) => {\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n await dispatch(deleteTaskNoteFailure());\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n fetchTaskNote,\r\n createTaskNote,\r\n getTaskNoteById,\r\n updateTaskNote,\r\n deleteTaskNote,\r\n resetTaskNoteDetails,\r\n resetTaskNoteRecucer,\r\n};\r\n","import { Toast } from \"@/Widgets\";\nimport _ from \"lodash\";\n\nimport { ActionTypes } from \"@/Constants\";\nimport { IClientStructure, ICreateClient } from \"@/Interfaces/Client.interface\";\nimport { IPaginate } from \"@/Types/Common.types\";\n\nimport Utils from \"@/Utils\";\nimport APIs from \"@/APIs\";\n\nconst setClientFetchLoading = () => {\n return {\n type: ActionTypes.SET_CLIENT_FETCH_LOADING,\n };\n};\n\nconst setClientGetLoading = () => {\n return {\n type: ActionTypes.SET_CLIENT_GET_LOADING,\n };\n};\n\nconst setClientActionLoading = () => {\n return {\n type: ActionTypes.SET_CLIENT_ACTION_LOADING,\n };\n};\n\nconst resetClientReducer = () => {\n return {\n type: ActionTypes.RESET_CLIENT_REDUCER,\n };\n};\n\nconst resetStatusClient = () => {\n return {\n type: ActionTypes.RESET_STATUS_CLIENT,\n };\n};\n\nconst setMetaClient = (payload: IPaginate) => {\n return {\n type: ActionTypes.SET_META_CLIENT,\n payload,\n };\n};\n\nconst setPaginationClient = (payload?: any) => {\n return {\n type: ActionTypes.SET_PAGINATION_CLIENT,\n payload,\n };\n};\n\nconst fetchClientSuccess = (payload: IClientStructure) => {\n return {\n type: ActionTypes.FETCH_CLIENT_SUCCESS,\n payload,\n };\n};\n\nconst fetchClientFail = () => {\n return {\n type: ActionTypes.FETCH_CLIENT_FAILURE,\n };\n};\n\nconst fetchClient = (payload?: any) => {\n return async (dispatch: any) => {\n dispatch(setClientFetchLoading());\n await APIs.fetchClient(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchClientFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(setMetaClient(_.get(result, \"meta\")));\n await dispatch(setPaginationClient(payload));\n await dispatch(fetchClientSuccess(resolveResult.items));\n }\n })\n .catch(async () => {\n await dispatch(fetchClientFail());\n });\n };\n};\n\nconst createClientSuccess = () => {\n return {\n type: ActionTypes.CREATE_CLIENT_SUCCESS,\n };\n};\n\nconst createClientFail = () => {\n return {\n type: ActionTypes.CREATE_CLIENT_FAILURE,\n };\n};\n\nconst createClient = (payload: ICreateClient) => {\n return async (dispatch: any) => {\n dispatch(setClientActionLoading());\n resetStatusClient();\n await APIs.createClient(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createClientFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createClientSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchClient());\n }\n })\n .catch(async (error) => {\n await dispatch(createClientFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getByIdClientSuccess = (payload: any) => {\n return {\n type: ActionTypes.GET_BY_ID_CLIENT_SUCCESS,\n payload,\n };\n};\n\nconst getByIdClientFail = () => {\n return {\n type: ActionTypes.GET_BY_ID_CLIENT_FAILURE,\n };\n};\n\nconst getByIdClient = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setClientGetLoading());\n await APIs.getClientById(id)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n if (!result) await dispatch(getByIdClientFail());\n else {\n dispatch(getByIdClientSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(getByIdClientFail());\n });\n };\n};\n\nconst updateClientSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_CLIENT_SUCCESS,\n payload,\n };\n};\n\nconst updateClientFail = () => {\n return {\n type: ActionTypes.UPDATE_CLIENT_FAILURE,\n };\n};\n\nconst updateClient = (id: string, payload: ICreateClient, pagination?: any) => {\n return async (dispatch: any) => {\n dispatch(setClientFetchLoading());\n resetStatusClient();\n await APIs.updateClient(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateClientFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updateClientSuccess(result));\n dispatch(fetchClient(pagination));\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchClient());\n }\n })\n .catch(async (error) => {\n await dispatch(updateClientFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst changeStatusClientSuccess = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_CLIENT_SUCCESS,\n };\n};\n\nconst changeStatusClientFail = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_CLIENT_FAILURE,\n };\n};\n\nconst changeStatusClient = (id: string, payload: any) => {\n return async (dispatch: any) => {\n dispatch(setClientActionLoading());\n await APIs.changeStatusClient(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(changeStatusClientFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(changeStatusClientSuccess());\n Toast({\n title: message,\n status: \"success\",\n });\n await dispatch(fetchClient());\n }\n })\n .catch(async (error: any) => {\n await dispatch(changeStatusClientFail());\n await Toast({\n title: error?.message,\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n setClientFetchLoading,\n setClientGetLoading,\n setClientActionLoading,\n resetClientReducer,\n fetchClient,\n createClient,\n getByIdClient,\n updateClient,\n changeStatusClient,\n};\n","import APIs from \"@/APIs\";\nimport { ActionTypes } from \"@/Constants\";\nimport { IPaginate } from \"@/Types/Common.types\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\nimport _ from \"lodash\";\n\nconst setBackupFetchLoading = () => {\n return {\n type: ActionTypes.SET_BACKUP_FETCH_LOADING,\n };\n};\n\n//const setBackupGetLoading = () => {\n// return {\n// type: ActionTypes.SET_BACKUP_GET_LOADING,\n// };\n//};\n\n//const resetStatusBackup = () => {\n// return {\n// type: ActionTypes.RESET_STATUS_BACKUP,\n// };\n//};\n\nconst setBackupActionLoading = () => {\n return {\n type: ActionTypes.SET_BACKUP_ACTION_LOADING,\n };\n};\n\n//const resetBackupReducer = () => {\n// return {\n// type: ActionTypes.RESET_BACKUP,\n// };\n//};\n\nconst setMetaBackup = (payload: IPaginate) => {\n return {\n type: ActionTypes.SET_META_BACKUP,\n payload,\n };\n};\n\nconst setPaginationBackup = (payload?: any) => {\n return {\n type: ActionTypes.SET_PAGINATION_BACKUP,\n payload,\n };\n};\n\nconst fetchBackupSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_BACKUP_SUCCESS,\n payload,\n };\n};\n\nconst fetchBackupFail = () => {\n return {\n type: ActionTypes.FETCH_BACKUP_FAILURE,\n };\n};\n\nconst fetchBackup = (payload?: any) => {\n return async (dispatch: any) => {\n dispatch(setBackupFetchLoading());\n await APIs.fetchBackup(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchBackupFail());\n } else {\n await dispatch(fetchBackupSuccess(result));\n }\n })\n .catch(async () => {\n await dispatch(fetchBackupFail());\n });\n };\n};\n\nconst changeStatusBackupSuccess = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_BACKUP_SUCCESS,\n };\n};\n\nconst changeStatusBackupFail = () => {\n return {\n type: ActionTypes.CHANGE_STATUS_BACKUP_FAILURE,\n };\n};\n\nconst changstatusBackup = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setBackupActionLoading());\n await APIs.changeBackup(payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(changeStatusBackupFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(fetchBackup());\n dispatch(changeStatusBackupSuccess());\n await dispatch(fetchBackup({ page: 1, limit: 10 }));\n Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error: any) => {\n await dispatch(changeStatusBackupFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst fetchBackupDatabaseSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_BACKUP_DATABASE_SUCCESS,\n payload,\n };\n};\n\nconst fetchBackupDatabaseFail = () => {\n return {\n type: ActionTypes.FETCH_BACKUP_DATABASE_FAILURE,\n };\n};\n\nconst fetchBackupDatabase = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setBackupFetchLoading());\n await APIs.fetchBackupList(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n await dispatch(fetchBackupDatabaseFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(setMetaBackup(_.get(result, \"meta\")));\n await dispatch(setPaginationBackup(payload));\n await dispatch(fetchBackupDatabaseSuccess(resolveResult.items));\n }\n })\n .catch(async () => {\n await dispatch(fetchBackupDatabaseFail());\n });\n };\n};\n\nconst getBackupDatabaseSuccess = () => {\n return {\n type: ActionTypes.GET_BACKUP_DATABASE_SUCCESS,\n };\n};\n\nconst getBackupDatabaseFail = () => {\n return {\n type: ActionTypes.GET_BACKUP_DATABASE_FAILURE,\n };\n};\n\nconst getBackupDatabase = () => {\n return async (dispatch: any) => {\n dispatch(setBackupActionLoading());\n await APIs.getBackupList()\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await Toast({\n title: message,\n status: \"error\",\n });\n await dispatch(getBackupDatabaseFail());\n } else {\n await Toast({\n title: message,\n status: \"success\",\n });\n dispatch(getBackupDatabaseSuccess());\n await dispatch(fetchBackupDatabase({ page: 1, limit: 10 }));\n }\n })\n .catch(async (error) => {\n await dispatch(getBackupDatabaseFail());\n await Toast({\n title: ``,\n description: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst restoreDatabaseSuccess = () => {\n return {\n type: ActionTypes.RESTORE_DATABASE_SUCCESS,\n };\n};\n\nconst restoreDatabaseFail = () => {\n return {\n type: ActionTypes.RESTORE_DATABASE_FAILURE,\n };\n};\n\nconst restoreDatabase = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setBackupActionLoading());\n await APIs.restoreDatabase(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await Toast({\n title: message,\n status: \"error\",\n });\n await dispatch(restoreDatabaseFail());\n } else {\n await Toast({\n title: message,\n status: \"success\",\n });\n dispatch(restoreDatabaseSuccess());\n await dispatch(fetchBackup({ page: 1, limit: 10 }));\n }\n })\n .catch(async (error) => {\n await Toast({\n title: ``,\n description: error?.message,\n status: \"error\",\n });\n await dispatch(restoreDatabaseFail());\n });\n };\n};\n\nconst deleteSuccess = () => {\n return {\n type: ActionTypes.DELETE_BACKUP_SUCCESS,\n };\n};\n\nconst deleteFailure = () => {\n return {\n type: ActionTypes.DELETE_BACKUP_FAILURE,\n };\n};\n\nconst deleteDatabase = (id: string, filters: any) => {\n return async (dispatch: any) => {\n dispatch(setBackupActionLoading());\n await APIs.deleteDatabase(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(deleteSuccess());\n await dispatch(fetchBackupDatabase(filters));\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(deleteFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getAllMemoryConversationSuccess = (payload: number) => {\n return {\n type: ActionTypes.GET_ALL_MEMORY_CONVERSATION_SUCCESS,\n payload,\n };\n};\n\nconst getAllMemoryConversationFailure = () => {\n return {\n type: ActionTypes.GET_ALL_MEMORY_CONVERSATION_FAILURE,\n };\n};\n\nconst getAllMemoryConversation = () => {\n return async (dispatch: any) => {\n dispatch(setBackupActionLoading());\n await APIs.getAllMemoryConversation()\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(getAllMemoryConversationFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n await dispatch(getAllMemoryConversationSuccess(result));\n }\n })\n .catch(async (error) => {\n await dispatch(getAllMemoryConversationFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n fetchBackup,\n changstatusBackup,\n fetchBackupDatabase,\n getBackupDatabase,\n restoreDatabase,\n deleteDatabase,\n getAllMemoryConversation,\n};\n","import APIs from \"@/APIs\";\r\nimport { ActionTypes } from \"@/Constants\";\r\nimport Utils from \"@/Utils\";\r\nimport { Toast } from \"@/Widgets\";\r\n\r\nconst setIsFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_TIME_DELETE_FILE_PRIVATE_CHAT_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setIsActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_TIME_DELETE_FILE_PRIVATE_CHAT_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst resetReducer = () => {\r\n return {\r\n type: ActionTypes.RESET_TIME_DELETE_FILE_PRIVATE_CHAT_REDUCER,\r\n };\r\n};\r\n\r\nconst fetchSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_TIME_DELETE_FILE_PRIVATE_CHAT_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchFail = () => {\r\n return {\r\n type: ActionTypes.FETCH_TIME_DELETE_FILE_PRIVATE_CHAT_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchData = () => {\r\n return async (dispatch: any) => {\r\n dispatch(setIsFetchLoading());\r\n await APIs.fetchTimeDeleteFilePrivateChat()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n if (!result) {\r\n await dispatch(fetchFail());\r\n } else {\r\n await dispatch(fetchSuccess(result?.items?.[0]));\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(fetchFail());\r\n });\r\n };\r\n};\r\n\r\nconst createSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_TIME_DELETE_FILE_PRIVATE_CHAT_SUCCESS,\r\n };\r\n};\r\n\r\nconst createFail = () => {\r\n return {\r\n type: ActionTypes.CREATE_TIME_DELETE_FILE_PRIVATE_CHAT_FAILURE,\r\n };\r\n};\r\n\r\nconst createData = (\r\n payload: { time: string; type: string },\r\n onSuccess: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setIsActionLoading());\r\n await APIs.createTimeDeleteFilePrivateChat(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(createFail());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(createSuccess());\r\n console.log(\"result\", response);\r\n if (result?.id)\r\n await dispatch(updateData(result?.id, payload, () => {}));\r\n onSuccess();\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(createFail());\r\n });\r\n };\r\n};\r\n\r\nconst updateSuccess = () => {\r\n return {\r\n type: ActionTypes.UPDATE_TIME_DELETE_FILE_PRIVATE_CHAT_SUCCESS,\r\n };\r\n};\r\n\r\nconst updateFail = () => {\r\n return {\r\n type: ActionTypes.UPDATE_TIME_DELETE_FILE_PRIVATE_CHAT_FAILURE,\r\n };\r\n};\r\n\r\nconst updateData = (\r\n id: string,\r\n payload: { time: string; type: string },\r\n onSuccess: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setIsActionLoading());\r\n await APIs.updateTimeDeleteFilePrivateChat(id, payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(updateFail());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n await dispatch(fetchData());\r\n await dispatch(updateSuccess());\r\n await Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n onSuccess();\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(updateFail());\r\n });\r\n };\r\n};\r\n\r\nexport default { fetchData, createData, updateData, resetReducer };\r\n","import { Toast } from \"@/Widgets\";\r\n\r\nimport { ActionTypes } from \"@/Constants\";\r\n\r\nimport Utils from \"@/Utils\";\r\nimport APIs from \"@/APIs\";\r\n\r\nconst setMailReceiveFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_MAIL_RECEIVE_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setMailReceiveActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_MAIL_RECEIVE_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst resetMailReceiveReducer = () => {\r\n return {\r\n type: ActionTypes.RESET_MAIL_RECEIVE_REDUCER,\r\n };\r\n};\r\n\r\nconst fetchMailReceivetSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_MAIL_RECEIVE_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchMailReceivetFail = () => {\r\n return {\r\n type: ActionTypes.FETCH_MAIL_RECEIVE_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchMailReceive = () => {\r\n return async (dispatch: any) => {\r\n dispatch(setMailReceiveFetchLoading());\r\n await APIs.fetchMailReceive()\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n if (!result) {\r\n // const message = response?.data?.message;\r\n await dispatch(fetchMailReceivetFail());\r\n } else {\r\n const resolveResult: { items: any } = result as {\r\n items: any;\r\n };\r\n await dispatch(fetchMailReceivetSuccess(resolveResult.items));\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(fetchMailReceivetFail());\r\n });\r\n };\r\n};\r\n\r\nconst createMailReceiveSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_MAIL_RECEIVE_SUCCESS,\r\n };\r\n};\r\n\r\nconst createMailReceiveFail = () => {\r\n return {\r\n type: ActionTypes.CREATE_MAIL_RECEIVE_FAILURE,\r\n };\r\n};\r\n\r\nconst createMailReceive = (\r\n payload: { mail: string; type: string },\r\n onSucess: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setMailReceiveActionLoading());\r\n await APIs.createMailReceive(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n\r\n if (!result) {\r\n await dispatch(createMailReceiveFail());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(createMailReceiveSuccess());\r\n Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n await dispatch(fetchMailReceive());\r\n onSucess();\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(createMailReceiveFail());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst updateMailReceiveSuccess = () => {\r\n return {\r\n type: ActionTypes.UPDATE_MAIL_RECEIVE_SUCCESS,\r\n };\r\n};\r\n\r\nconst updateMailReceiveFail = () => {\r\n return {\r\n type: ActionTypes.UPDATE_MAIL_RECEIVE_FAILURE,\r\n };\r\n};\r\n\r\nconst updateMailReceive = (\r\n id: string,\r\n payload: { mail: string; type: string },\r\n onSucess: () => void\r\n) => {\r\n return async (dispatch: any) => {\r\n dispatch(setMailReceiveActionLoading());\r\n await APIs.updateMailReceive(id, payload)\r\n .then(async (response: any) => {\r\n const result = await Utils.resolveResponse(response);\r\n if (!result) {\r\n const message = response?.data?.message;\r\n await dispatch(updateMailReceiveFail());\r\n await Toast({\r\n title: \"Update client failed\",\r\n description: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(updateMailReceiveSuccess());\r\n dispatch(fetchMailReceive());\r\n Toast({\r\n title: \"Update client successfully\",\r\n status: \"success\",\r\n });\r\n onSucess();\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(updateMailReceiveFail());\r\n await Toast({\r\n title: \"Update client failed\",\r\n description: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n fetchMailReceive,\r\n createMailReceive,\r\n updateMailReceive,\r\n resetMailReceiveReducer,\r\n};\r\n","import APIs from \"@/APIs\";\nimport { ActionTypes } from \"@/Constants\";\nimport Utils from \"@/Utils\";\nimport { Toast } from \"@/Widgets\";\n\nconst setWorkspaceFetchLoading = () => {\n return {\n type: ActionTypes.SET_WORKSPACE_FETCH_LOADING,\n };\n};\n\nconst setWorkspaceGetLoading = () => {\n return {\n type: ActionTypes.SET_WORKSPACE_GET_LOADING,\n };\n};\n\nconst resetWorkingspace = () => {\n return {\n type: ActionTypes.RESET_WORKSPACE,\n };\n};\n\nconst setWorkspaceActionLoading = () => {\n return {\n type: ActionTypes.SET_WORKSPACE_ACTION_LOADING,\n };\n};\n\nconst fetchWorkspaceSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_WORKSPACE_SUCCESS,\n payload,\n };\n};\n\nconst fetchWorkspaceFail = () => {\n return {\n type: ActionTypes.FETCH_WORKSPACE_FAILURE,\n };\n};\n\nconst fetchWorkspaceTime = (payload?: any) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceFetchLoading());\n await APIs.fetchWorkspace(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchWorkspaceFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(fetchWorkspaceSuccess(resolveResult?.items));\n }\n })\n .catch(async () => {\n await dispatch(fetchWorkspaceFail());\n });\n };\n};\n\nconst createSuccess = () => {\n return {\n type: ActionTypes.CREATE_WORKSPACE_SUCCESS,\n };\n};\n\nconst createFailure = () => {\n return {\n type: ActionTypes.CREATE_WORKSPACE_FAILURE,\n };\n};\n\nconst createWorkspace = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceActionLoading());\n await APIs.createWorkspace(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createSuccess());\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(createFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst updateWorkSpaceSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_WORKSPACE_SUCCESS,\n payload,\n };\n};\n\nconst updateWorkSpaceFail = () => {\n return {\n type: ActionTypes.UPDATE_WORKSPACE_FAILURE,\n };\n};\n\nconst updateWorkSpace = (id: string, payload: any) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceActionLoading());\n await APIs.updateWorkspace(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateWorkSpaceFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updateWorkSpaceSuccess(result));\n Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(updateWorkSpaceFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getByIdSuccess = (payload?: any) => {\n return {\n type: ActionTypes.GET_BY_ID_WORKSPACE_SUCCESS,\n payload,\n };\n};\n\nconst getByIdFailure = () => {\n return {\n type: ActionTypes.GET_BY_ID_WORKSPACE_FAILURE,\n };\n};\n\nconst getWorkspaceById = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceGetLoading());\n await APIs.getWorkspaceById(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(getByIdFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else dispatch(getByIdSuccess(result));\n })\n .catch(async (error) => {\n await dispatch(getByIdFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteSuccess = () => {\n return {\n type: ActionTypes.DELETE_WORKSPACE_SUCCESS,\n };\n};\n\nconst deleteFailure = () => {\n return {\n type: ActionTypes.DELETE_WORKSPACE_FAILURE,\n };\n};\n\nconst deleteWorkSpace = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceActionLoading());\n await APIs.deleteWorkspace(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(deleteSuccess());\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(deleteFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\n// short\n\nconst fetchWorkspaceShorCutSuccess = (payload: any) => {\n return {\n type: ActionTypes.FETCH_WORKSPACE_SHORT_CUT_SUCCESS,\n payload,\n };\n};\n\nconst fetchWorkspaceShorCutFail = () => {\n return {\n type: ActionTypes.FETCH_WORKSPACE_SHORT_CUT_FAILURE,\n };\n};\n\nconst fetchWorkspaceShortCut = (payload?: any) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceFetchLoading());\n await APIs.fetchWorkspaceShort(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n if (!result) {\n // const message = response?.data?.message;\n await dispatch(fetchWorkspaceShorCutFail());\n } else {\n const resolveResult: { items: any } = result as {\n items: any;\n };\n await dispatch(fetchWorkspaceShorCutSuccess(resolveResult?.items));\n }\n })\n .catch(async () => {\n await dispatch(fetchWorkspaceShorCutFail());\n });\n };\n};\n\nconst createWorkspaceShorCutSuccess = () => {\n return {\n type: ActionTypes.CREATE_WORKSPACE_SHORT_CUT_SUCCESS,\n };\n};\n\nconst createWorkspaceShorCutFailure = () => {\n return {\n type: ActionTypes.CREATE_WORKSPACE_SHORT_CUT_FAILURE,\n };\n};\n\nconst createWorkspaceShorCut = (payload: any) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceActionLoading());\n await APIs.createWorkspaceShort(payload)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(createWorkspaceShorCutFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(createWorkspaceShorCutSuccess());\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(createWorkspaceShorCutFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst getByIdWorkspaceShorCutSuccess = (payload?: any) => {\n return {\n type: ActionTypes.GET_BY_ID_WORKSPACE_SHORT_CUT_SUCCESS,\n payload,\n };\n};\n\nconst getByIdWorkspaceShorCutFailure = () => {\n return {\n type: ActionTypes.GET_BY_ID_WORKSPACE_SHORT_CUT_FAILURE,\n };\n};\n\nconst getWorkspaceWorkspaceShorCutById = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceGetLoading());\n await APIs.getWorkspaceShortById(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(getByIdWorkspaceShorCutFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else dispatch(getByIdWorkspaceShorCutSuccess(result));\n })\n .catch(async (error) => {\n await dispatch(getByIdWorkspaceShorCutFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst updateWorkSpaceShorCutSuccess = (payload: any) => {\n return {\n type: ActionTypes.UPDATE_WORKSPACE_SHORT_CUT_SUCCESS,\n payload,\n };\n};\n\nconst updateWorkSpaceShorCutFail = () => {\n return {\n type: ActionTypes.UPDATE_WORKSPACE_SHORT_CUT_FAILURE,\n };\n};\n\nconst updateWorkSpaceShorCut = (id: string, payload: any) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceActionLoading());\n await APIs.updateWorkspaceShort(id, payload)\n .then(async (response: any) => {\n const result = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(updateWorkSpaceShorCutFail());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(updateWorkSpaceShorCutSuccess(result));\n Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(updateWorkSpaceShorCutFail());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nconst deleteWorkSpaceShortCutSuccess = () => {\n return {\n type: ActionTypes.DELETE_WORKSPACE_SHORT_CUT_SUCCESS,\n };\n};\n\nconst deleteWorkSpaceShortCutFailure = () => {\n return {\n type: ActionTypes.DELETE_WORKSPACE_SHORT_CUT_FAILURE,\n };\n};\n\nconst deleteWorkspaceShort = (id: string) => {\n return async (dispatch: any) => {\n dispatch(setWorkspaceActionLoading());\n await APIs.deleteWorkspaceShort(id)\n .then(async (response: any) => {\n const result: any = await Utils.resolveResponse(response);\n const message = response?.data?.message;\n if (!result) {\n await dispatch(deleteWorkSpaceShortCutFailure());\n await Toast({\n title: message,\n status: \"error\",\n });\n } else {\n dispatch(deleteWorkSpaceShortCutSuccess());\n await Toast({\n title: message,\n status: \"success\",\n });\n }\n })\n .catch(async (error) => {\n await dispatch(deleteWorkSpaceShortCutFailure());\n await Toast({\n title: error?.message,\n status: \"error\",\n });\n });\n };\n};\n\nexport default {\n fetchWorkspaceTime,\n createWorkspace,\n updateWorkSpace,\n getWorkspaceById,\n deleteWorkSpace,\n resetWorkingspace,\n fetchWorkspaceShortCut,\n createWorkspaceShorCut,\n getWorkspaceWorkspaceShorCutById,\n updateWorkSpaceShorCut,\n deleteWorkspaceShort,\n};\n","import _ from \"lodash\";\r\nimport APIs from \"@/APIs\";\r\nimport { ActionTypes } from \"@/Constants\";\r\nimport Utils from \"@/Utils\";\r\nimport { Toast } from \"@/Widgets\";\r\n\r\nconst setFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_WORKING_DAY_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setGetLoading = () => {\r\n return {\r\n type: ActionTypes.SET_WORKING_DAY_GET_LOADING,\r\n };\r\n};\r\n\r\nconst setActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_WORKING_DAY_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst resetWorkingDayReducer = () => {\r\n return {\r\n type: ActionTypes.RESET_WORKING_DAY_REDUCER,\r\n };\r\n};\r\n\r\nconst fetchSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_WORKING_DAY_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchFail = () => {\r\n return {\r\n type: ActionTypes.FETCH_WORKING_DAY_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchWorkingDay = (payload?: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setFetchLoading());\r\n try {\r\n const response: any = await APIs.fetchWorkingDay(payload);\r\n const result: any = response?.data?.payload;\r\n if (!result) {\r\n dispatch(fetchFail());\r\n } else {\r\n dispatch(\r\n fetchSuccess(_.omit(result, [\"id\", \"createdAt\", \"updatedAt\"]))\r\n );\r\n }\r\n } catch (error) {\r\n dispatch(fetchFail());\r\n }\r\n };\r\n};\r\n\r\nconst getByIdSuccess = () => {\r\n return {\r\n type: ActionTypes.GET_WORKING_DAY_BY_ID_SUCCESS,\r\n };\r\n};\r\n\r\nconst getByIdFail = () => {\r\n return {\r\n type: ActionTypes.GET_WORKING_DAY_BY_ID_FAILURE,\r\n };\r\n};\r\n\r\nconst getWorkingDayById = (id: string) => {\r\n return async (dispatch: any) => {\r\n dispatch(setGetLoading());\r\n await APIs.getWorkingDayById(id)\r\n .then(async (response: any) => {\r\n const result = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(getByIdFail());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(getByIdSuccess());\r\n Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(getByIdFail());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst updateSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.UPDATE_WORKING_DAY_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst updateFail = () => {\r\n return {\r\n type: ActionTypes.UPDATE_WORKING_DAY_FAILURE,\r\n };\r\n};\r\n\r\nconst updateWorkingDay = (payload: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setActionLoading());\r\n await APIs.updateWorkingDay(payload)\r\n .then(async (response: any) => {\r\n const result = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(updateFail());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(updateSuccess(result));\r\n Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(updateFail());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n fetchWorkingDay,\r\n getWorkingDayById,\r\n updateWorkingDay,\r\n resetWorkingDayReducer,\r\n};\r\n","import APIs from \"@/APIs\";\r\nimport { ActionTypes } from \"@/Constants\";\r\nimport { ICreateNews } from \"@/Interfaces/News.interface\";\r\nimport { IPaginate } from \"@/Types/Common.types\";\r\nimport Utils from \"@/Utils\";\r\nimport { Toast } from \"@/Widgets\";\r\nimport _ from \"lodash\";\r\n\r\nconst setNewsFetchLoading = () => {\r\n return {\r\n type: ActionTypes.SET_NEWS_FETCH_LOADING,\r\n };\r\n};\r\n\r\nconst setNewsGetLoading = () => {\r\n return {\r\n type: ActionTypes.SET_NEWS_GET_LOADING,\r\n };\r\n};\r\n\r\nconst resetStatusNews = () => {\r\n return {\r\n type: ActionTypes.RESET_STATUS_NEWS,\r\n };\r\n};\r\n\r\nconst setNewsActionLoading = () => {\r\n return {\r\n type: ActionTypes.SET_NEWS_ACTION_LOADING,\r\n };\r\n};\r\n\r\nconst resetNewsReducer = () => {\r\n return {\r\n type: ActionTypes.RESET_NEWS,\r\n };\r\n};\r\n\r\nconst setMetaNews = (payload: IPaginate) => {\r\n return {\r\n type: ActionTypes.SET_META_NEWS,\r\n payload,\r\n };\r\n};\r\n\r\nconst setPaginationNews = (payload?: any) => {\r\n return {\r\n type: ActionTypes.SET_PAGINATION_NEWS,\r\n payload,\r\n };\r\n};\r\n\r\nconst createNewsSuccess = () => {\r\n return {\r\n type: ActionTypes.CREATE_NEWS_SUCCESS,\r\n };\r\n};\r\n\r\nconst createNewsFail = () => {\r\n return {\r\n type: ActionTypes.CREATE_NEWS_FAILURE,\r\n };\r\n};\r\n\r\nconst createNews = (payload: ICreateNews) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNewsActionLoading());\r\n dispatch(resetStatusNews());\r\n await APIs.createNews(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(createNewsFail());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(createNewsSuccess());\r\n Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n await dispatch(fetchNews());\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(createNewsFail());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst fetchNewsSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.FETCH_NEWS_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst fetchNewsFail = () => {\r\n return {\r\n type: ActionTypes.FETCH_NEWS_FAILURE,\r\n };\r\n};\r\n\r\nconst fetchNews = (payload?: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNewsFetchLoading());\r\n await APIs.fetchNews(payload)\r\n .then(async (response: any) => {\r\n const result: any = await Utils.resolveResponse(response);\r\n if (!result) {\r\n // const message = response?.data?.message;\r\n await dispatch(fetchNewsFail());\r\n } else {\r\n const resolveResult: { items: any } = result as {\r\n items: any;\r\n };\r\n await dispatch(setMetaNews(_.get(result, \"meta\")));\r\n await dispatch(setPaginationNews(payload));\r\n await dispatch(fetchNewsSuccess(resolveResult.items));\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(fetchNewsFail());\r\n });\r\n };\r\n};\r\n\r\nconst getByIdNewsSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.GET_BY_ID_NEWS_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst getByIdNewsFail = () => {\r\n return {\r\n type: ActionTypes.GET_BY_ID_NEWS_FAILURE,\r\n };\r\n};\r\n\r\nconst getByIdNews = (id: string) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNewsGetLoading());\r\n await APIs.getNewsById(id)\r\n .then(async (response: any) => {\r\n const result = await Utils.resolveResponse(response);\r\n if (!result) await dispatch(getByIdNewsFail());\r\n else {\r\n dispatch(getByIdNewsSuccess(result));\r\n }\r\n })\r\n .catch(async () => {\r\n await dispatch(getByIdNewsFail());\r\n });\r\n };\r\n};\r\n\r\nconst updateNewsSuccess = (payload: any) => {\r\n return {\r\n type: ActionTypes.UPDATE_NEWS_SUCCESS,\r\n payload,\r\n };\r\n};\r\n\r\nconst updateNewsFail = () => {\r\n return {\r\n type: ActionTypes.UPDATE_NEWS_FAILURE,\r\n };\r\n};\r\n\r\nconst updateNews = (id: string, payload: ICreateNews, pagination?: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNewsFetchLoading());\r\n dispatch(resetStatusNews());\r\n await APIs.updateNews(id, payload)\r\n .then(async (response: any) => {\r\n const result = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(updateNewsFail());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(updateNewsSuccess(result));\r\n dispatch(fetchNews(pagination));\r\n Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n await dispatch(fetchNews());\r\n }\r\n })\r\n .catch(async (error) => {\r\n await dispatch(updateNewsFail());\r\n await Toast({\r\n title: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst changeStatusNewsSuccess = () => {\r\n return {\r\n type: ActionTypes.CHANGE_STATUS_NEWS_SUCCESS,\r\n };\r\n};\r\n\r\nconst changeStatusNewsFail = () => {\r\n return {\r\n type: ActionTypes.CHANGE_STATUS_NEWS_FAILURE,\r\n };\r\n};\r\n\r\nconst changeStatusNews = (id: string, payload: any) => {\r\n return async (dispatch: any) => {\r\n dispatch(setNewsActionLoading());\r\n await APIs.changeStatusNews(id, payload)\r\n .then(async (response: any) => {\r\n const result = await Utils.resolveResponse(response);\r\n const message = response?.data?.message;\r\n if (!result) {\r\n await dispatch(changeStatusNewsFail());\r\n await Toast({\r\n title: message,\r\n status: \"error\",\r\n });\r\n } else {\r\n dispatch(changeStatusNewsSuccess());\r\n Toast({\r\n title: message,\r\n status: \"success\",\r\n });\r\n await dispatch(fetchNews());\r\n }\r\n })\r\n .catch(async (error: any) => {\r\n await dispatch(changeStatusNewsFail());\r\n await Toast({\r\n title: error?.message,\r\n description: error?.message,\r\n status: \"error\",\r\n });\r\n });\r\n };\r\n};\r\n\r\nexport default {\r\n resetNewsReducer,\r\n getByIdNews,\r\n fetchNews,\r\n updateNews,\r\n changeStatusNews,\r\n createNews,\r\n};\r\n","import React, { useState } from \"react\";\r\nimport _ from \"lodash\";\r\nimport {\r\n Box,\r\n Avatar,\r\n Text,\r\n Tooltip,\r\n Popover,\r\n PopoverTrigger,\r\n PopoverContent,\r\n PopoverBody,\r\n PopoverArrow,\r\n Portal,\r\n} from \"@chakra-ui/react\";\r\nimport Utils from \"@/Utils\";\r\nimport { useTypedDispatch } from \"@/Store\";\r\nimport { UserActions } from \"@/Actions\";\r\n\r\nconst { performAction } = UserActions;\r\ninterface ISectionProps {\r\n data: any[];\r\n}\r\n\r\nconst maxAvatars = 2;\r\n\r\nconst AvatarGroupWithOverflow: React.FC = ({ data }) => {\r\n const dispatch = useTypedDispatch();\r\n const visibleAvatars = data.slice(0, maxAvatars);\r\n const overflowAvatars = data.slice(maxAvatars);\r\n const overflowCount = data.length - maxAvatars;\r\n const userData = Utils.getSavedUserData();\r\n const [isShowPopper, setIsShowPopper] = useState(false);\r\n\r\n const canViewUserProfile = Utils.hasPermission(\r\n _.map(userData?.userRole, (userRole) => _.get(userRole, \"role\")),\r\n \"Users\",\r\n \"viewProfile\"\r\n );\r\n\r\n const _renderPopper = () => (\r\n setIsShowPopper(false)}\r\n placement=\"auto-start\"\r\n >\r\n \r\n setIsShowPopper(true)}\r\n >\r\n \r\n +{overflowCount}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {_.map(overflowAvatars, (userPayload, index) => (\r\n \r\n \r\n canViewUserProfile &&\r\n dispatch(\r\n performAction(\"viewProfile\", userPayload?.id, userPayload)\r\n )\r\n }\r\n />\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n {visibleAvatars.map((userPayload, index) => (\r\n \r\n \r\n canViewUserProfile &&\r\n dispatch(\r\n performAction(\"viewProfile\", userPayload?.id, userPayload)\r\n )\r\n }\r\n />\r\n \r\n ))}\r\n {overflowCount > 0 && _renderPopper()}\r\n \r\n );\r\n};\r\n\r\nexport default AvatarGroupWithOverflow;\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport dayjs from \"dayjs\";\r\nimport {\r\n useOutsideClick,\r\n HStack,\r\n Box,\r\n Text,\r\n Portal,\r\n Popover,\r\n PopoverContent,\r\n PopoverAnchor,\r\n} from \"@chakra-ui/react\";\r\nimport Calendar from \"react-calendar\";\r\nimport \"react-calendar/dist/Calendar.css\";\r\nimport Utils from \"@/Utils\";\r\n\r\ntype CalendarView = \"decade\" | \"year\";\r\n\r\ninterface IProps {\r\n label?: string;\r\n isError?: boolean;\r\n errorMessage?: string;\r\n helperText?: string;\r\n style?: object;\r\n labelSx?: object;\r\n defaultValue?: { startDate?: string; endDate?: string };\r\n onDateChange(newTime: { startDate?: string; endDate?: string }): void;\r\n}\r\n\r\nconst MonthPicker: React.FC = ({\r\n isError,\r\n defaultValue,\r\n onDateChange,\r\n}) => {\r\n const ref = useRef(null);\r\n const language = Utils.getSavedLanguage();\r\n const [date, setDate] = useState(dayjs());\r\n const [showMonthCalendar, setShowMonthCalendar] = useState(false);\r\n const [showYearCalendar, setShowYearCalendar] = useState(false);\r\n const [monthInputValue, setMonthInputValue] = useState(\r\n dayjs(date).month() + 1\r\n );\r\n const [yearInputValue, setYearInputValue] = useState(dayjs(date).year());\r\n\r\n const [selectedView, setSelectedView] = useState(\"year\");\r\n const [isFocus, setIsFocus] = useState(false);\r\n\r\n useEffect(() => {\r\n if (defaultValue && defaultValue.startDate && defaultValue.endDate) {\r\n setMonthInputValue(dayjs(defaultValue.startDate).month() + 1);\r\n setYearInputValue(dayjs(defaultValue.endDate).year());\r\n }\r\n }, [defaultValue]);\r\n\r\n const onClickOutside = () => {\r\n setShowMonthCalendar(false);\r\n setShowYearCalendar(false);\r\n };\r\n\r\n useOutsideClick({\r\n ref,\r\n handler: onClickOutside,\r\n });\r\n\r\n const handleMonthInputClick = () => {\r\n setShowMonthCalendar(true);\r\n setShowYearCalendar(false);\r\n setSelectedView(\"year\");\r\n };\r\n\r\n const handleYearInputClick = () => {\r\n setShowMonthCalendar(false);\r\n setShowYearCalendar(true);\r\n setSelectedView(\"decade\");\r\n };\r\n\r\n const handleMonthClick = (value: any, event: any) => {\r\n event.stopPropagation();\r\n\r\n const updatedDate = {\r\n ...date,\r\n startDate: dayjs(dayjs(value).startOf(\"month\")).format(\"YYYY-MM-DD\"),\r\n endDate: dayjs(dayjs(value).endOf(\"month\")).format(\"YYYY-MM-DD\"),\r\n };\r\n\r\n setDate(value);\r\n setMonthInputValue(dayjs(value).month() + 1);\r\n\r\n onDateChange(updatedDate);\r\n\r\n setShowMonthCalendar(false);\r\n setShowYearCalendar(false);\r\n };\r\n\r\n const handleYearClick = (value: any, event: any) => {\r\n event.stopPropagation();\r\n\r\n const updatedDate = {\r\n ...date,\r\n startDate: dayjs(dayjs(value).startOf(\"month\")).format(\"YYYY-MM-DD\"),\r\n endDate: dayjs(dayjs(value).endOf(\"month\")).format(\"YYYY-MM-DD\"),\r\n };\r\n\r\n setDate(value);\r\n setYearInputValue(dayjs(value).year());\r\n\r\n onDateChange(updatedDate);\r\n\r\n // setShowMonthCalendar(false);\r\n // setShowYearCalendar(false);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n setIsFocus(true)}\r\n onBlur={() => setIsFocus(false)}\r\n />\r\n /\r\n setIsFocus(true)}\r\n onBlur={() => setIsFocus(false)}\r\n />\r\n \r\n setShowMonthCalendar(true)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setSelectedView((prevState) =>\r\n view === \"decade\" || view === \"year\" ? view : prevState\r\n );\r\n }}\r\n locale={language === \"en\" ? \"en\" : \"vi\"}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default MonthPicker;\r\n","import React from \"react\";\r\nimport { Text, TextProps, Tooltip } from \"@chakra-ui/react\";\r\n\r\ninterface IProps extends TextProps {\r\n content: string;\r\n maxW: string | number;\r\n sx?: any;\r\n hover?: boolean;\r\n showTooltip?: boolean;\r\n}\r\n\r\nconst TextComponent: React.FC = ({\r\n content,\r\n maxW,\r\n sx,\r\n hover = false,\r\n showTooltip = true,\r\n}) => {\r\n const ref = React.useRef(null);\r\n const [showLink, setShowLink] = React.useState(false);\r\n\r\n React.useLayoutEffect(() => {\r\n if (ref.current && ref.current.clientWidth < ref.current.scrollWidth) {\r\n setShowLink(true);\r\n }\r\n }, [content]);\r\n\r\n return !showLink ? (\r\n \r\n {content}\r\n \r\n ) : (\r\n \r\n \r\n {content}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default TextComponent;\r\n","import React, { useState, useEffect, CSSProperties } from \"react\";\r\nimport _ from \"lodash\";\r\n// import dayjs from \"dayjs\";\r\nimport {\r\n FileMosaic,\r\n FullScreen,\r\n ImagePreview,\r\n VideoPreview,\r\n} from \"@files-ui/react\";\r\n\r\nimport {\r\n HStack,\r\n Stack,\r\n Box,\r\n Icon,\r\n Text,\r\n Portal,\r\n // Image,\r\n Link,\r\n Tooltip,\r\n} from \"@chakra-ui/react\";\r\nimport Utils from \"@/Utils\";\r\nimport {\r\n CheckCircleIcon,\r\n DocumentDuplicateIcon,\r\n} from \"@heroicons/react/24/outline\";\r\nimport { FileMosaicProps } from \"@dropzone-ui/react\";\r\nimport TextComponent from \"../Text\";\r\nimport { Toast } from \"@/Widgets\";\r\n\r\ninterface ISectionProps {\r\n files?: any[];\r\n sizeStyles?: CSSProperties;\r\n containerStyles?: CSSProperties;\r\n fileItemConfig?: FileMosaicProps;\r\n zIndex?: number;\r\n isLoading?: boolean;\r\n}\r\nconst FileItem: React.FC = ({\r\n files,\r\n sizeStyles,\r\n containerStyles,\r\n fileItemConfig,\r\n zIndex,\r\n}) => {\r\n const [imageSrc, setImageSrc] = useState(undefined);\r\n const [videoSrc, setVideoSrc] = useState(undefined);\r\n const [selectedCopyFile, setSelectedCopyFile] = useState(null);\r\n\r\n useEffect(() => {\r\n if (selectedCopyFile !== null) {\r\n const timeoutId = setTimeout(() => {\r\n setSelectedCopyFile(null);\r\n }, 500);\r\n return () => clearTimeout(timeoutId);\r\n }\r\n return () => {};\r\n }, [selectedCopyFile]);\r\n\r\n const handleDownload = async (fileId: string, downloadUrl: string) => {\r\n // Check if downloadUrl is provided\r\n if (!downloadUrl) return;\r\n\r\n try {\r\n // Fetch the file content from the provided downloadUrl\r\n const image = await fetch(downloadUrl);\r\n const imageBlob = await image.blob();\r\n const imageURL = URL.createObjectURL(imageBlob);\r\n\r\n // Create an anchor element for initiating the download\r\n const anchor = document.createElement(\"a\");\r\n\r\n // Retrieve the fileName based on fileId from the 'files' array\r\n const fileName =\r\n _.filter(files, (file) => file.id === fileId)[0]?.name || \"New file\";\r\n\r\n // Set the fileName as the download attribute for the anchor element\r\n anchor.download = fileName;\r\n\r\n // Set the URL.createObjectURL result as the href for the anchor element\r\n anchor.href = imageURL;\r\n\r\n // Append the anchor to the document body, trigger the click event, and remove the anchor\r\n document.body.appendChild(anchor);\r\n anchor.click();\r\n document.body.removeChild(anchor);\r\n\r\n // Revoke the object URL to free up resources\r\n URL.revokeObjectURL(imageURL);\r\n } catch (error: any) {\r\n // Handle any download errors\r\n Toast({ status: \"error\", title: error?.message });\r\n console.error(error);\r\n }\r\n };\r\n\r\n const handleSee = (imageSource: string) => {\r\n setImageSrc(imageSource);\r\n };\r\n\r\n const handleWatch = (videoSource: string) => {\r\n setVideoSrc(videoSource);\r\n };\r\n\r\n const handleCopy = (id: string) => {\r\n const findSelectedFile = _.find(files, (file) => file.id === id);\r\n if (findSelectedFile) {\r\n Utils.copyImageToClipboard(findSelectedFile?.downloadUrl);\r\n }\r\n };\r\n\r\n return (\r\n \r\n \r\n {!_.isEmpty(files) &&\r\n _.map(files, (extFile, index: number) => {\r\n return _.includes(extFile?.type, \"image\") ? (\r\n \r\n {/* {\r\n e.preventDefault();\r\n setImageSrc(extFile?.imageUrl);\r\n }}\r\n rounded=\"5px\"\r\n src={extFile?.imageUrl}\r\n /> */}\r\n \r\n\r\n {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleCopy(extFile?.id);\r\n setSelectedCopyFile(extFile);\r\n }}\r\n >\r\n \r\n \r\n {selectedCopyFile?.id === extFile?.id && (\r\n \r\n \r\n \r\n \r\n Copied\r\n \r\n \r\n \r\n )}\r\n \r\n ) : (\r\n \r\n {/* {_.includes(extFile?.type, \"image\") && (\r\n {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleCopy(extFile?.id);\r\n setSelectedCopyFile(extFile);\r\n }}\r\n >\r\n \r\n \r\n )} */}\r\n {/* Copied */}\r\n {/* {selectedCopyFile?.id === extFile?.id && (\r\n \r\n \r\n \r\n \r\n Copied\r\n \r\n \r\n \r\n )} */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* {extFile?.timestamp && (\r\n \r\n \r\n {dayjs(extFile?.timestamp).format(\"HH:mm\")}\r\n \r\n \r\n )} */}\r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n {imageSrc && (\r\n {\r\n setImageSrc(undefined);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n {videoSrc && (\r\n {\r\n setVideoSrc(undefined);\r\n }}\r\n >\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default FileItem;\r\n","import { Box } from \"@chakra-ui/react\";\r\nimport styled from \"@emotion/styled\";\r\n\r\nconst RoundedContainer = styled(Box)(() => ({\r\n boxShadow: '-8px 8px 24px -4px rgba(145, 158, 171, 0.08)',\r\n borderRadius: \"8px\",\r\n backgroundColor: \"white\",\r\n padding: \"14px\",\r\n}));\r\n\r\nexport default RoundedContainer;\r\n","import React, { useMemo } from 'react';\nimport 'chart.js/auto';\nimport { ChartOptions, ChartData } from 'chart.js';\nimport { Bar } from 'react-chartjs-2';\n\ninterface ISectionProps {\n data: ChartData<'bar'>;\n title: string;\n verticalText?: string;\n horizontalText?: string;\n subtitle?: boolean;\n isShowLegend?: boolean;\n axis?: 'x' | 'y';\n}\n\nconst BarChart: React.FC = (props: ISectionProps) => {\n // Constructors\n const {\n data,\n title,\n verticalText,\n horizontalText,\n subtitle = true,\n isShowLegend = true,\n axis = 'x',\n } = props;\n\n const options: ChartOptions<'bar'> = useMemo(() => {\n return {\n responsive: true,\n interaction: {\n intersect: false,\n },\n indexAxis: axis,\n plugins: {\n filler: {\n propagate: false,\n },\n title: {\n display: true,\n text: title,\n align: 'start',\n fullSize: true,\n font: {\n size: 19,\n },\n },\n subtitle: {\n display: subtitle,\n align: 'end',\n position: 'bottom',\n text: '(*) Click on legend to show/hide element(s)',\n },\n legend: {\n display: isShowLegend,\n position: 'top',\n labels: {\n usePointStyle: true,\n },\n },\n },\n scales: {\n x: {\n display: true,\n title: {\n display: Boolean(horizontalText),\n text: horizontalText,\n },\n },\n y: {\n display: true,\n title: {\n display: Boolean(verticalText),\n text: verticalText,\n },\n },\n },\n };\n }, [props]);\n\n return ;\n};\n\nexport default BarChart;\n\n// cubicInterpolationMode: 'monotone',\n// tension: 0.4,\n// use for smooth line\n","import React, { useMemo } from 'react';\nimport 'chart.js/auto';\nimport { ChartOptions, ChartData } from 'chart.js';\nimport { Pie } from 'react-chartjs-2';\n\ninterface ISectionProps {\n data: ChartData<'pie'>;\n title?: string;\n subtitle?: boolean;\n isShowLegend?: boolean;\n}\n\nconst PieChart: React.FC = (props: ISectionProps) => {\n // Constructors\n const { data, title, subtitle = true, isShowLegend = false } = props;\n\n const options: ChartOptions<'pie'> = useMemo(() => {\n return {\n responsive: true,\n interaction: {\n intersect: false,\n },\n plugins: {\n title: {\n display: true,\n text: title,\n align: 'start',\n fullSize: true,\n },\n subtitle: {\n display: subtitle,\n align: 'center',\n position: 'right',\n text: '(*) Click on legend to show/hide element(s)',\n },\n legend: {\n display: isShowLegend,\n position: 'bottom',\n labels: {\n usePointStyle: true,\n },\n },\n tooltip: {\n callbacks: {\n label: (context) => {\n let totalDatasetSum = 0;\n context.dataset.data.map((el) => (totalDatasetSum += el));\n const currentValue = context.dataset.data[context.dataIndex];\n const percentage = (currentValue * 100) / totalDatasetSum;\n const roundedPercentage = Math.round(percentage * 100) / 100;\n return `${context.label}: ${currentValue} (${roundedPercentage}%)`;\n },\n },\n },\n },\n };\n }, [props]);\n\n return ;\n};\n\nexport default PieChart;\n","import React, { useMemo } from 'react';\nimport 'chart.js/auto';\nimport 'chartjs-adapter-moment';\nimport { ChartOptions, ChartData } from 'chart.js';\nimport { Line } from 'react-chartjs-2';\n\ninterface ISectionProps {\n data: ChartData<'line'>;\n title: string;\n verticalText?: string;\n horizontalText?: string;\n subtitle?: boolean;\n minYear?: string;\n isShowLegend?: boolean;\n}\n\nconst LineChart: React.FC = (props: ISectionProps) => {\n // Constructors\n const {\n data,\n title,\n verticalText,\n horizontalText,\n subtitle = true,\n minYear,\n isShowLegend = true,\n } = props;\n\n const options: ChartOptions<'line'> = useMemo(() => {\n return {\n responsive: true,\n interaction: {\n intersect: false,\n },\n plugins: {\n filler: {\n propagate: false,\n },\n title: {\n display: true,\n text: title,\n align: 'start',\n fullSize: true,\n font: {\n size: 19,\n },\n },\n subtitle: {\n display: subtitle,\n align: 'end',\n position: 'bottom',\n text: '(*) Click on legend to show/hide element(s)',\n },\n legend: {\n display: isShowLegend,\n position: 'top',\n labels: {\n usePointStyle: true,\n },\n },\n tooltip: {\n callbacks: {\n label: (context) => {\n const currentValue = context.dataset.data[context.dataIndex];\n return `${currentValue}M`;\n },\n },\n },\n },\n scales: {\n x: {\n display: true,\n title: {\n display: Boolean(horizontalText),\n text: horizontalText,\n },\n type: 'time',\n time: {\n unit: 'year',\n offsetAfterAutoskip: true,\n tooltipFormat: 'MM/YYYY',\n },\n min: minYear,\n },\n y: {\n display: true,\n title: {\n display: Boolean(verticalText),\n text: verticalText,\n },\n ticks: {\n // Include a dollar sign in the ticks\n callback: (value) => {\n return `${value}M`;\n },\n },\n },\n },\n };\n }, [props]);\n\n return ;\n};\n\nexport default LineChart;\n\n// cubicInterpolationMode: 'monotone',\n// tension: 0.4,\n// use for smooth line\n","import React, { useMemo } from \"react\";\nimport \"chart.js/auto\";\nimport { ChartOptions, ChartData } from \"chart.js\";\nimport { Doughnut } from \"react-chartjs-2\";\nimport { Box, useMediaQuery } from \"@chakra-ui/react\";\n\ninterface ISectionProps {\n data: ChartData<\"doughnut\">;\n title?: string;\n subtitle?: boolean;\n centerText?: string;\n isShowLegend?: boolean;\n isCalculatePercent?: boolean;\n}\n\nconst DoughnutChart: React.FC = (props: ISectionProps) => {\n // Constructors\n const {\n data,\n title,\n centerText,\n subtitle = true,\n isShowLegend = false,\n isCalculatePercent = true,\n } = props;\n\n const [isDesktop] = useMediaQuery(\"(min-width: 1536px)\");\n\n const options: ChartOptions<\"doughnut\"> = useMemo(() => {\n return {\n responsive: true,\n interaction: {\n intersect: false,\n },\n plugins: {\n title: {\n display: true,\n text: title,\n align: \"start\",\n fullSize: true,\n },\n subtitle: {\n display: subtitle,\n align: \"end\",\n position: \"bottom\",\n text: \"(*) Click on legend to show/hide element(s)\",\n },\n legend: {\n display: isShowLegend,\n position: \"bottom\",\n labels: {\n usePointStyle: true,\n },\n },\n tooltip: {\n callbacks: {\n label: (context) => {\n let totalDatasetSum = 0;\n const currentValue = context.dataset.data[context.dataIndex];\n if (!isCalculatePercent)\n return `${context.label}: ${currentValue}%`;\n context.dataset.data.map((el) => (totalDatasetSum += el));\n const percentage = (currentValue * 100) / totalDatasetSum;\n const roundedPercentage = Math.round(percentage * 100) / 100;\n return `${context.label}: ${currentValue} (${roundedPercentage}%)`;\n },\n },\n },\n },\n };\n }, [props]);\n\n return (\n \n {\n if (centerText) {\n const width = chart.width;\n const height = chart.height;\n const ctx = chart.ctx;\n ctx.restore();\n ctx.font = \"1rem sans-serif\";\n ctx.textBaseline = \"middle\";\n const text = centerText;\n const bonus = !isShowLegend ? 20 : 0;\n const textX = Math.round(\n (width - ctx.measureText(text).width) / 2\n );\n const textY = height / 2;\n ctx.fillText(text, textX, textY + bonus);\n ctx.save();\n }\n },\n },\n ]}\n />\n \n );\n};\n\nexport default DoughnutChart;\n","import BarChart from './BarChart';\nimport PieChart from './PieChart';\nimport LineChart from './LineChart';\nimport DoughnutChart from './DoughnutChart';\n\nexport default { BarChart, PieChart, LineChart, DoughnutChart };\n","import React from \"react\";\r\nimport { Text, Box } from \"@chakra-ui/react\";\r\nimport Utils from \"@/Utils\";\r\n\r\ninterface INoti {\r\n id: string;\r\n createdAt: string;\r\n updatedAt: string;\r\n type: string;\r\n recordId: string;\r\n content: string;\r\n contentVI?: string;\r\n extraData?: {\r\n highlight?: string;\r\n highlightVI?: string;\r\n hightlightVI?: string;\r\n };\r\n status: string;\r\n}\r\n\r\ninterface ISectionProps {\r\n payload: INoti;\r\n}\r\n\r\nconst ProcessContent: React.FC = ({ payload }) => {\r\n const language = Utils.getSavedLanguage();\r\n\r\n const processContent = () => {\r\n if (payload.extraData && payload.extraData.highlight) {\r\n const highlightedText = payload.extraData.highlight;\r\n const content = payload.content;\r\n const contentVi = payload.contentVI;\r\n const highlightedTextVi =\r\n payload.extraData.highlightVI || payload.extraData.hightlightVI;\r\n\r\n if (language === \"en\") {\r\n if (content.includes(highlightedText)) {\r\n const highlightedContent = content.replace(\r\n highlightedText,\r\n `${highlightedText}`\r\n );\r\n return (\r\n \r\n );\r\n }\r\n } else {\r\n if (contentVi && highlightedTextVi) {\r\n const highlightedContentVi = contentVi.replace(\r\n highlightedTextVi,\r\n `${highlightedTextVi}`\r\n );\r\n return (\r\n \r\n );\r\n } else if (content.includes(highlightedText)) {\r\n const highlightedContent = content.replace(\r\n highlightedText,\r\n `${highlightedText}`\r\n );\r\n return (\r\n \r\n );\r\n }\r\n }\r\n }\r\n return {payload.content};\r\n };\r\n\r\n return processContent();\r\n};\r\n\r\nexport default ProcessContent;\r\n","import { Box, Text, Stack } from \"@chakra-ui/react\";\nimport { useTranslation } from \"react-multi-lang\";\n\nconst NoDataFound = () => {\n const t = useTranslation();\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {t(\"label.noData\")}\n \n );\n};\n\nexport default NoDataFound;\n","import React, { useEffect, useRef, useState } from \"react\";\r\nimport { Box } from \"@chakra-ui/react\";\r\n\r\ninterface ISectionProps {\r\n htmlContent: string;\r\n maxLines?: number;\r\n lineHeight?: number;\r\n sx?: object;\r\n}\r\n\r\nconst ContentWithMaxLines: React.FC = ({\r\n htmlContent,\r\n maxLines = 1,\r\n lineHeight = 14,\r\n sx,\r\n}) => {\r\n const boxRef = useRef(null);\r\n const paragraphRef = useRef(null);\r\n const [isOverflow, setIsOverflow] = useState(false);\r\n\r\n useEffect(() => {\r\n if (boxRef?.current && paragraphRef?.current && htmlContent) {\r\n const paragraph = paragraphRef?.current;\r\n const linesArray = htmlContent.split(\"
\");\r\n const firstLine = linesArray[0];\r\n paragraph.innerHTML = firstLine;\r\n const actualLines = Math.floor(paragraph.offsetHeight / lineHeight);\r\n setIsOverflow(actualLines > maxLines);\r\n }\r\n }, [htmlContent, maxLines, lineHeight]);\r\n\r\n let truncatedContent = htmlContent;\r\n\r\n if (isOverflow) {\r\n const linesArray = htmlContent.split(\"\\n\");\r\n truncatedContent = linesArray.slice(0, maxLines).join(\"\\n\");\r\n }\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ContentWithMaxLines;\r\n","import React from \"react\";\r\nimport _ from \"lodash\";\r\nimport {\r\n IconButton as ChakraIconButton,\r\n type IconButtonProps,\r\n} from \"@chakra-ui/react\";\r\n\r\ninterface IProps extends IconButtonProps {\r\n children?: JSX.Element | string;\r\n onClick?(e: any): void;\r\n isDisabled?: boolean;\r\n}\r\n\r\nconst IconButton = React.forwardRef(\r\n ({ children, onClick, isDisabled, ...props }, ref) => {\r\n const [isClicked, setIsClicked] = React.useState(false);\r\n\r\n const handleClick = _.throttle((e) => {\r\n if (!isClicked) {\r\n onClick && onClick(e);\r\n setIsClicked(true);\r\n setTimeout(() => {\r\n setIsClicked(false);\r\n }, 500);\r\n }\r\n }, 500);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n }\r\n);\r\n\r\nexport default IconButton;\r\n","import { Button } from \"@/Components/Common\";\r\nimport TextareaComponent from \"@/Components/Common/Textarea\";\r\nimport {\r\n AlertDialog,\r\n AlertDialogOverlay,\r\n AlertDialogContent,\r\n AlertDialogHeader,\r\n AlertDialogBody,\r\n AlertDialogFooter,\r\n Icon,\r\n Box,\r\n} from \"@chakra-ui/react\";\r\nimport {\r\n XMarkIcon,\r\n CheckCircleIcon,\r\n TrashIcon,\r\n PlusIcon,\r\n BookmarkIcon,\r\n} from \"@heroicons/react/24/outline\";\r\nimport { useRef } from \"react\";\r\nimport { useTranslation } from \"react-multi-lang\";\r\n\r\ntype TActionType =\r\n | \"save\"\r\n | \"delete\"\r\n | \"create\"\r\n | \"confirm\"\r\n | \"approve\"\r\n | \"rejected\"\r\n | \"active\"\r\n | \"inactive\";\r\n\r\ninterface ConfirmDialogProps {\r\n title?: string;\r\n isOpen: boolean;\r\n onClose: () => void;\r\n leastDestructiveRef?: React.MutableRefObject;\r\n actionType?: TActionType;\r\n body: string;\r\n onAction: () => void; // Callback function for action\r\n onChange?(newValue: string): void;\r\n isError?: boolean;\r\n errorMessage?: string;\r\n isLoading?: boolean;\r\n}\r\n\r\nconst ConfirmDialog: React.FC = ({\r\n title,\r\n isOpen,\r\n onClose,\r\n leastDestructiveRef,\r\n actionType,\r\n body,\r\n onChange,\r\n onAction, // Callback function from parent component\r\n isError,\r\n errorMessage = \"\",\r\n isLoading = false,\r\n}) => {\r\n const t = useTranslation();\r\n const cancelRef = useRef(null);\r\n const handleAction = () => onAction();\r\n const actionContentMap = {\r\n save: {\r\n label: \"save\",\r\n color: \"rgba(92, 110, 108,0.9)\",\r\n colorHover: \"rgba(92, 110, 108,1)\",\r\n icon: ,\r\n },\r\n delete: {\r\n label: \"delete\",\r\n color: \"rgba(187, 113, 84,0.9)\",\r\n colorHover: \"rgba(187, 113, 84,1)\",\r\n icon: ,\r\n },\r\n create: {\r\n label: \"create\",\r\n color: \"rgba(92, 110, 108,0.9)\",\r\n colorHover: \"rgba(92, 110, 108,1)\",\r\n icon: ,\r\n },\r\n confirm: {\r\n label: \"confirm\",\r\n color: \"rgba(187, 113, 84,0.9)\",\r\n colorHover: \"rgba(187, 113, 84,1)\",\r\n icon: ,\r\n },\r\n approve: {\r\n label: \"approve\",\r\n color: \"rgba(92, 110, 108,0.9)\",\r\n colorHover: \"rgba(92, 110, 108,1)\",\r\n icon: ,\r\n },\r\n default: {\r\n label: \"confirm\",\r\n color: \"rgba(187, 113, 84,0.9)\",\r\n colorHover: \"rgba(187, 113, 84,1)\",\r\n icon: ,\r\n },\r\n rejected: {\r\n label: \"rejected\",\r\n color: \"rgba(187, 113, 84,0.9)\",\r\n colorHover: \"rgba(187, 113, 84,1)\",\r\n icon: ,\r\n },\r\n active: {\r\n label: \"active\",\r\n color: \"rgba(187, 113, 84,0.9)\",\r\n colorHover: \"rgba(187, 113, 84,1)\",\r\n icon: ,\r\n },\r\n inactive: {\r\n label: \"inactive\",\r\n color: \"rgba(92, 110, 108,0.9)\",\r\n colorHover: \"rgba(92, 110, 108,1)\",\r\n icon: ,\r\n },\r\n };\r\n\r\n const getActionButtonContent = (type: TActionType) => {\r\n const actionType = actionContentMap[type] || actionContentMap.default;\r\n return actionType;\r\n };\r\n\r\n const {\r\n label: actionButtonLabel,\r\n icon: actionButtonIcon,\r\n color: actionButtonColor,\r\n colorHover: actionButtonColorHover,\r\n } = getActionButtonContent(actionType as TActionType);\r\n\r\n const handleEditorChange = (content: any) => {\r\n if (onChange) onChange(content.target.value);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {title ? title : t(\"message.areYouSure\")}\r\n \r\n \r\n {body}\r\n \r\n {actionType === \"rejected\" && (\r\n \r\n )}\r\n \r\n \r\n \r\n }\r\n onClick={onClose}\r\n >\r\n {t(\"button.cancel\")}\r\n \r\n \r\n {t(`button.${actionButtonLabel}`)}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ConfirmDialog;\r\n","import React, { useRef, useState } from \"react\";\r\nimport _ from \"lodash\";\r\nimport DateTimeRangePicker from \"@wojtekmaj/react-datetimerange-picker\";\r\nimport \"@wojtekmaj/react-datetimerange-picker/dist/DateTimeRangePicker.css\";\r\nimport \"react-calendar/dist/Calendar.css\";\r\nimport \"react-clock/dist/Clock.css\";\r\nimport {\r\n AlertDialog,\r\n AlertDialogOverlay,\r\n AlertDialogContent,\r\n AlertDialogHeader,\r\n AlertDialogBody,\r\n AlertDialogFooter,\r\n Box,\r\n Select,\r\n Heading,\r\n Input,\r\n Textarea,\r\n} from \"@chakra-ui/react\";\r\nimport CommonColors from \"@/Themes/CommonColors\";\r\nimport { Button } from \"@/Components/Common\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { RootState } from \"@/Store\";\r\n\r\ninterface SectionProps {\r\n open: boolean;\r\n onClose(): void;\r\n}\r\n\r\nconst CreateTaskDialog: React.FC = ({ open, onClose }) => {\r\n const isActionLoading: boolean = useSelector((state: RootState) =>\r\n _.get(state.BOARD, \"isActionLoading\")\r\n );\r\n\r\n const [value, onChange] = useState([new Date(), new Date()]);\r\n const cancelRef = useRef(null);\r\n\r\n const _renderContent = () => (\r\n \r\n \r\n \r\n Project\r\n \r\n \r\n \r\n \r\n \r\n Title\r\n \r\n \r\n \r\n \r\n \r\n Timeline\r\n \r\n \r\n \r\n \r\n \r\n Description\r\n \r\n