{"version":3,"sources":["routers/index.js","constants/index.js","utils/utils.js","contexts/ThemeContext.js","contexts/DialogContext.js","actions/login.action.js","components/layouts/InnerAppBar.js","components/layouts/InnerSidebar.js","styles/globalStyles/surfaceStyles.js","components/fragments/Tooltips/Tooltips.js","components/fragments/BreadcrumbsList/BreadcrumbsList.js","components/layouts/MasterLayout.js","utils/HttpClient.js","data/info.js","data/users.js","data/permissionLevel.js","data/category.js","data/permissionGroup.js","data/label.js","data/dimension.js","data/processStatus.js","data/issueCommentType.js","data/file.js","data/issue.js","data/issueComment.js","data/issueLog.js","data/observer.js","components/pages/PrepareUserInformationPage/PrepareUserInformationPage.js","components/pages/LoginPage/LoginPage.js","actions/issue.action.js","actions/issueComment.action.js","actions/issueLog.action.js","components/fragments/ButtonGroupSelectOptions/ButtonGroupSelectOptions.js","hooks/useData.js","styles/globalStyles/feedbackStyles.js","components/fragments/LabelPicker/LabelPicker.js","components/fragments/AutocompleteSelectOptions/AutocompleteSelectOptions.js","styles/globalStyles/index.js","styles/globalStyles/inputStyles.js","styles/globalStyles/dataDisplayStyles.js","components/fragments/Tabs/Tabs.js","components/fragments/SelectPersonalDataCategory/SelectPersonalDataCategory.js","components/fragments/SelectPermissionLevel/SelectPermissionLevel.js","components/fragments/SelectPermissionGroup/SelectPermissionGroup.js","components/fragments/DropFiles/DropFiles.js","components/fragments/FormComment/FormComment.js","components/fragments/FormDialogs/FormDialogs.js","components/fragments/AppSidebarRBack/AppSidebarRBack.js","components/fragments/AppSidebarRFront/AppSidebarRFront.js","styles/globalStyles/statusStyles.js","components/pages/HelpdeskMainPage/HelpdeskMainPage.js","components/fragments/ColumnContent/ColumnContent.js","components/fragments/AccordionForm/AccordionForm.js","components/fragments/ColuumnSumUp/ColuumnSumUp.js","components/pages/HelpdeskIssuesPage/HelpdeskIssuesPage.js","components/fragments/GridAvatar/GridAvatar.js","components/fragments/IssueCard/IssueCard.js","components/fragments/CommentCard/CommentCard.js","hooks/useFile.js","components/fragments/LogCard/LogCard.js","components/pages/HelpdeskIssueActivitiesPage/HelpdeskIssueActivitiesPage.js","components/pages/HelpdeskReportIssuePage/HelpdeskReportIssuePage.js","components/pages/ManageIssuesPage/ManageIssuesPage.js","components/pages/ManageIssueActivitiesPage/ManageIssueActivitiesPage.js","reducers/settingPermission.reducer.js","actions/settingPermission.action.js","reducers/settingPermissionManage.reducer.js","actions/settingPermissionManage.action.js","components/fragments/SelectMultiPersonalDataCategory/SelectMultiPersonalDataCategory.js","components/fragments/SelectPermissionLevelAdmin/SelectPermissionLevelAdmin.js","reducers/selectNameOrEmail.reducer.js","actions/selectNameOrEmail.action.js","components/fragments/SelectNameOrEmail/SelectNameOrEmail.js","reducers/selectDepartment.reducer.js","actions/selectDepartment.action.js","components/fragments/SelectDepartment/SelectDepartment.js","components/fragments/SelectMultipleEmails/SelectMultipleEmails.js","components/fragments/Loading/react-loadingg.js","components/pages/SettingPermissionPage/SettingPermissionManagePage.js","components/fragments/Dialog/Dialog.js","components/pages/SettingPermissionPage/SettingPermissionPage.js","reducers/settingLabel.reducer.js","actions/settingLabel.action.js","reducers/settingLabelManage.reducer.js","actions/settingLabelManage.action.js","components/pages/SettingLabelPage/SettingLabelManagePage.js","components/pages/SettingLabelPage/SettingLabelPage.js","App.js","serviceWorkerRegistration.js","reportWebVitals.js","reducers/issue.reducer.js","reducers/issueComment.reducer.js","reducers/issueLog.reducer.js","reducers/selectMultiPersonalDataCategory.reducer.js","reducers/index.js","index.js"],"names":["PATH_FRONTOF_MASTER","PATH_BACKOF_MASTER","routers","frontOf","main","path","title","icon","HomeOutlinedIcon","isMenu","permissionLevel","reportIssue","PostAddIcon","issues","ViewListIcon","issue","pathNoParam","backOf","ListAltIcon","report","AssessmentOutlinedIcon","settingPermission","SettingsIcon","settingLabel","LabelIcon","listRoutFrontOf","Object","keys","map","k","key","listRoutBackOf","listMenuFrontOf","filter","item","listMenuBackOf","backOfPermissionLevels","rout","forntOfPermissionLevels","onlyUnique","value","index","self","indexOf","listPermissionLevelBackOf","concat","listPermissionLevelFrontOf","SYSTEM_NAME_FRONTOF","SYSTEM_NAME_FRONTOF_TH","drawer","ISSUE_LIST_FETCH_PROCESSING","ISSUE_LIST_FETCH_FAILED","ISSUE_LIST_FETCH_SUCCESS","ISSUE_LIST_FETCH_CLEAR","ISSUE_FETCH_PROCESSING","ISSUE_FETCH_FAILED","ISSUE_FETCH_SUCCESS","ISSUE_FETCH_CLEAR","ISSUE_UPDATE_SUCCESS","ISSUE_UPDATE_FAILED","ISSUE_COMMENT_FETCH_PROCESSING","ISSUE_COMMENT_FETCH_FAILED","ISSUE_COMMENT_FETCH_SUCCESS","ISSUE_COMMENT_FETCH_CLEAR","ISSUE_COMMENT_UPDATE_FAILED","ISSUE_COMMENT_UPDATE_SUCCESS","ISSUE_LOG_FETCH_PROCESSING","ISSUE_LOG_FETCH_FAILED","ISSUE_LOG_FETCH_SUCCESS","ISSUE_LOG_FETCH_CLEAR","ISSUE_LOG_UPDATE_SUCCESS","ISSUE_LOG_UPDATE_FAILED","confSysHost","prd","qas","dev","confSysDomain","configSysURL","web","api","confJWT","mapValuesBySite","pairSite","configSystemHost","hostname","window","location","keySite","find","server","urlAPIFake","adfsSystemKey","sysURL","adfsAuthen","accessToken","packageParam","Base64","encode","localStorage","getItem","error","sortingOptions","name","muiTable","options","actionsColumnIndex","pageSize","headerStyle","fontWeight","rowStyle","fontSize","localization","header","actions","toolbar","searchPlaceholder","body","emptyDataSourceMessage","pagination","labelRowsPerPage","labelDisplayedRows","labelRowsSelect","firstAriaLabel","firstTooltip","previousAriaLabel","previousTooltip","nextAriaLabel","nextTooltip","lastAriaLabel","lastTooltip","regexes","invalidMessages","labels","_mockEmails","email","create","update","issueOperations","base64","encodeObj","obj","objToJson","JSON","stringify","alert","decodeObj","json","decode","jsonToObject","parse","formatDatetime","props","datetime","undefined","locale","languageId","opts","year","month","day","hour","minute","hour12","date","Date","Intl","DateTimeFormat","format","console","formatDateYYYYTMMTdd","d","getMonth","getDate","getFullYear","length","join","getPeriodDateById","periodId","dfEndDate","setDate","period","startDate","endDate","periodAmou","Number","endDateSubNYear","setFullYear","dateStart","dateEnd","userProfiler","userProfile","userProfileKey","profile","user","permission","id","firstName","lastName","firstNameEn","lastNameEn","position","keycode","department","image","lastLogin","notifyCount","strUserProfile","fullname","fullnameEn","enUserProfile","setItem","parseDeUserProfile","level","openOriginalImage","data","Image","src","w","open","document","innerHTML","write","outerHTML","isManageIssue","readOnly","isWorker","processStatus","operation","isCreater","isManage","themeDefault","createMuiTheme","palette","primary","light","dark","contrastText","MuiThemeContext","React","createContext","MuiThemeProvider","children","useState","theme","setTheme","Provider","muiTheme","ThemeProvider","DialogContext","DialogContainer","summary","detail","onClose","handleClose","onKill","onEscapeKeyDown","Dialog","disableBackdropClick","onExited","maxWidth","fullWidth","DialogTitle","DialogContent","Fragment","Typography","variant","gutterBottom","Accordion","style","marginTop","AccordionSummary","expandIcon","aria-controls","AccordionDetails","DialogActions","Button","color","onClick","DialogProvider","dialogs","setDialogs","closeDialog","mutableDialog","prop","diaIdIndex","findIndex","splice","contextValueRef","useRef","option","dialog","current","i","e","preventDefault","Consumer","logout","history","dispatch","removeItem","push","useStyles","makeStyles","root","width","inline","display","flexGrow","alignItems","menuButton","marginRight","spacing","avatarSmall","height","avatarLarge","InnerAppBar","isAuthen","isBackOffice","classes","useHistory","useDispatch","upf","setOpen","anchorRef","event","contains","target","handleListKeyDown","prevOpen","useEffect","focus","component","className","process","Box","flexDirection","justifyContent","paddingLeft","Hidden","smDown","smUp","IconButton","ref","aria-haspopup","Avatar","alt","Popper","anchorEl","role","transition","disablePortal","TransitionProps","placement","Grow","transformOrigin","Paper","List","ListItem","ListItemAvatar","ListItemText","secondary","marginLeft","Divider","my","ClickAwayListener","onClickAway","MenuList","autoFocusItem","onKeyDown","MenuItem","loginActions","ListItemIcon","InnerSidebar","match","fontOfCount","backOfCount","some","elem","NavLink","to","button","upl","Link","memo","appBarStyles","themeMixinsToolbar","mixins","mixinsToolbar","minHeight","upxs","breakpoints","up","upsm","toolbarStyle","padding","appToolBarStyle","top","toolbarOffsetStyle","HtmlTooltip","withStyles","tooltip","backgroundColor","typography","pxToRem","border","Tooltip","LFTooltip","BreadcrumbsList","breadcrumbs","Breadcrumbs","aria-label","bcElement","textDecoration","drawerWidth","drawerRightWidth","appBar","zIndex","transitions","easing","sharp","duration","leavingScreen","appBarShift","easeOut","enteringScreen","menuButtonRight","hide","flexShrink","drawerPaper","drawerRight","drawerRightPaper","drawerHeader","drawerHeaderRight","content","contentMarginLeft","contentMarginRight","contentShift","contentLeftShiftMargin","contentRightShiftMargin","appToolBarShift","appToolBarRightShift","appToolBarLeftRightShift","backdrop","MasterLayout","sidebar","sidebarRight","useRouteMatch","useTheme","setMuiTheme","useContext","openDrawer","setOpenDrawer","openDrawerRight","setOpenDrawerRight","isMobileSide","useMediaQuery","handleDrawerClose","handleDrawerRightOpen","handleDrawerRightClose","includes","params","sid","useMemo","startsWith","CssBaseline","AppBar","edge","clsx","margin","orientation","flexItem","textAlign","Drawer","anchor","paper","transitionDuration","direction","Backdrop","axioses","axios","ATHEN_EXCEPTION","isAbsoluteURLRegex","CancelToken","isCancel","Cancel","axios_cancelTokenAgent","axios_cancelToken","axios_isCancelTokenNew","useHandleClientError","openDialog","error2JSON","message","response","interceptors","request","use","a","config","c","test","url","headers","Authorization","cancelToken","Promise","reject","status","get","respAccessToken","tokenAccess","Error","httpClient","getInfoNoVersion","then","result","catch","updateUser","post","mockSearchEmails","getListAllSetting","lang","getListAllWithUserRight","getListAll","getList","getListByCategoryLevel","save","thumbnail","issue_id","file_id","thumbnails","files","contents","original","getCommentTypeList","accessible","accessStatus","createId","updateProcessStatus","status_id","put","addIssue","logMode","updateIssue","dimensions","forwardIssue","category_id","permissionGroupFilter","setVote","vote","includedThumbnail","includedViewStatus","respIssue","issueFiles","split","file","createDate","substr","package","mode","lists","thisIssueFromList","list","viewStatus","readOnlyStatus","getDetail","getDetailCore","addIssueComment","comment","updateIssueComment","getListCore","respComms","comments","customComments","IssueComments","commentFiles","addObserver","user_id","removeObserver","delete","wrapper","buttonSuccess","green","buttonFail","red","fabProgress","left","buttonProgress","PREPAREING","PREPAREING_SUCCESS","PREPAREING_FAIL","PrepareUserInformationPage","handleClientError","preparing","setPreparing","success","setSuccess","buttonClassname","info","users","setTimeout","initialMenuBackOfUser","menuItem","levelItem","preparer","Fab","size","CircularProgress","align","href","media","verticalAlign","imageSize","form","cardContent","submit","Card","CardMedia","CardContent","pt","type","Grid","container","justify","getState","payload","clearList","getIssueDetail","setStateIssueUpdateToSuccess","setStateIssueUpdateToFailed","issueUpdated","updateIssueLabel","updateIssueDimension","observer","getIssueComment","issueComment","setStateIssueCommentUpdateToSuccess","setStateIssueCommentUpdateToFailed","getIssueLog","issueLog","logs","updateIssueLog","popper","circularProgress","borderRadius","ButtonGroupSelectOptions","forwardRef","hiddenOption","disabledOption","onChange","loading","setLoading","selectedIndex","setSelectedIndex","prevSelectedIndexRef","useImperativeHandle","undoSelected","initialSelectIndex","handleMenuItemClick","description","xs","ButtonGroup","disabled","minWidth","aria-expanded","hidden","selected","useCategoryGetListByMode","setData","category","categorys","backdropStyles","backdropStyle","fade","innerBackdropStyle","circularProgressLoadStyle","paddingBottom","tag","lineHeight","boxShadow","borderBottom","inputBase","common","white","borderColor","action","hover","popperDisablePortal","iconSelected","text","close","opacity","chipContainner","flexWrap","ChipLabels","label","styles","getContrastText","marginBottom","names","Chip","css","whiteSpace","overflow","textOverflow","reduce","prev","curr","LabelPicker","onBlur","setAnchorEl","selectedValue","setSelectedValue","pendingValue","setPendingValue","isLoading","setIsLoading","useLabelGetListAll","reason","Boolean","groups","grouping","ButtonBase","disableRipple","aria-describedby","currentTarget","Autocomplete","multiple","newValue","disableCloseOnSelect","renderTags","disableListWrap","noOptionsText","renderGroup","ListSubheader","group","ml","mt","renderOption","visibility","sort","b","ai","bi","groupBy","getOptionLabel","getOptionSelected","renderInput","InputBase","InputProps","inputProps","autoFocus","AutocompleteSelectOptions","placeholder","fieldOptions","another","selectValue","setSelectValue","handleChange","TextField","startAdornment","globalStyles","surface","formStyle","fieldMargin","input","buttonCoreStyle","btnLayoutStyle","btnLayoutLeftStyle","btnLayoutRightStyle","materialTableStyle__root","cursor","hiddenStyle","feedback","TabPanel","other","aria-labelledby","p","a11yProps","AntTabs","indicator","Tabs","AntTab","textTransform","fontWeightRegular","fontFamily","fontWeightMedium","Tab","SelectPersonalDataCategory","isSelectAll","categories","setFieldValue","useFormikContext","useField","meta","FormControl","touched","InputLabel","htmlFor","Select","context","ret","permissionLevels","cats","acc","forEach","mergeArray","cate","cat","getLevelData","FormHelperText","isEqual","SelectPermissionLevel","excludeDataField","excludeData","usePermissionLevelGetListAllSetting","memoHandleChange","useCallback","SelectPermissionGroup","categoryId","permissionGroups","permissionGroup","usePermissionGroupGetListByCategoryLevel","havePermissionGroups","baseStyle","flex","borderWidth","borderStyle","outline","activeStyle","acceptStyle","rejectStyle","thumbsContainer","thumb","boxSizing","thumbInner","img","thumbCol","thumbContent","thumbContentInner","flexGlow","toBase64File","resolve","reader","FileReader","readAsDataURL","onload","onerror","err","checkNewAcceptedFiles","previousFiles","acceptedFiles","newAcceptedFiles","prevFile","substring","URL","createObjectURL","assign","DropFiles","existFiles","onDropped","onRemoved","setFiles","clearFiles","isExtendNewFiles","useDropzone","accept","onDrop","extendNewFiles","func","extendNewAceptedFiles","allFilesWithExtendFile","newFiles","allFiles","getRootProps","getInputProps","isDragActive","isDragAccept","isDragReject","handleRemoveFiles","prevFiles","thumbs","revokeObjectURL","tab","card","section","cardAction","FieldComment","rowsMax","rows","errors","multiline","vaule","validationSchema","Yup","shape","min","max","required","FormComment","labeller","cardHeader","subheader","issueCommentTypeId","receiverType","elevation","receiverTapping","onDroppedFiles","onRemovedFile","onSubmit","onCancel","formControlStyle","recieverByTab","issueCommentTypes","issueCommentType","useIssueCommentTypeGetListAll","antTabValue","setAntTabValue","dropFilesRef","handleChangeTab","initialValues","issueCommentType_id","typeValue","setTypeValue","typeContextRef","formComment","values","resetForm","autoComplete","subtitle","CardHeader","CardActions","when","enableReinitialize","setSubmitting","reqData","validateForwardShape","validateForwardIssueSchema","FormForwardIssueDialog","setLIsoading","recieverTypeByTabIndex","formikRef","DialogContentText","innerRef","isErrorNTouchComment","showFormForwardIssue","m","submitForm","chipStatusSmallStyle","chipStatusMediumStyle","chipStatusLargeStyle","chipLabelSmallStyle","chipLabelMediumStyle","chipLabelLargeStyle","background","section1","section2","section3","issueTransition","SkeletonText","Skeleton","AppSidebarRBackManageIssueActivity","openFormForward","setOpenFormForward","btnSelectOptionsRef","issueReducer","useSelector","isManageFeatures","worker","processStatus_id","enqueueSnackbar","useSnackbar","memoGetIssueDetailPackage","memoGetListActivityPackage","processStatusesBiz","useProcessStatusGetList","processStatuses","useProcessStatusGetListAll","dimension","useDimensionGetListAll","handleChangeProcessStatus","issueActions","issueLogActions","handleDimensionChange","v","dimension_id","dimensionLevel_id","dimension_name","dimensionLevel_name","issueCommentActions","pendingLabels","existingLabels","updateLabelPendingToSelectedState","label_id","userObserved","observers","osv","observing","setObserving","openObserver","setOpenObserver","openConfirmUnObserve","setOpenConfirmUnObserve","handleCloseObserverDialog","handleCloseConfirmUnObserve","descriptionElementRef","manageObserving","descriptionElement","mb","x","getElementById","issueWorker","filterGroup","issueLabels","issueLabel","valueIssueDimensionLevel","issueDimensions","issueDimension","dimensionLevels","dimensionLevel_value","levelOptions","levels","disableClearable","blurOnSelect","scroll","dividers","tabIndex","bgcolor","AppSidebarRBack","exact","successStyle","receivedStyle","processingStyle","forwardStyle","pendingStyle","AppSidebarRFrontIssueActivity","AppSidebarRFront","formControl","grid","ColumnContent","issueId","categoryName","reporter","modifyDate","byCategoryAndLevel","observerWorker","mr","pr","heading","secondaryHeading","sortDirection","short","sortDirectionAsc","transform","sortDirectionDesc","details","column12","flexBasis","column8","column4","buildContexts","contexts","AccordionForm","sortsOptions","onFilterAndSearch","cacheIfs","ifs","sideRef","side","cacheFilters","filters","cacheSorts","sorts","cacheKeyword","keyword","cacheContexts","initialCanSelectPermissionLevel","period_id","setContexts","beforeIssueFilters","newIssueFilters","handleFilterAndSearch","onCbChange","val","newVal","arr","remArrayItem","square","sm","md","FormLabel","FormGroup","row","CheckboxWithLabel","Label","checked","paddingRight","InputAdornment","AccordionActions","showFormSearch","ColuumnSumUp","permissionGroupFilterName","countComment","latestCommentDate","isIssueStatusClosed","StyledBadge","badge","right","Badge","iconLabelWrapperReverse","toolbarWrapper","routFrontOf","tabValue","setTabValue","issueListReducer","accordionFormRef","isSeverBadgeContentRef","setBadgeContent","mtOpenRef","state","mtCloseRef","all","mtAllRef","memoIssueListOpen","issueStatuses","memoIssueListClose","mtToolbarOpenRef","mtToolbarCloseRef","mtToolbarAllRef","mtHeaderOpenRef","mtHeaderCloseRef","mtHeaderAllRef","mtBodyOpenRef","mtBodyCloseRef","mtBodyAllRef","sortingCol","setSortingCol","term","customFilterAndSearch","rowData","filteringCol","setFilteringCol","badgeMax","badgeContent","onOrderChange","onFilterChanged","memoHandleSearchAndFilter","onSearchChange","memoCustomFilterAndSearchContent","shortId","renderColumnContent","renderColumnSumUp","IssueCommentsLast","count","toString","components","Container","Toolbar","Header","Body","tableRef","columns","field","defaultSort","defaultFilter","cellStyle","sorting","render","search","searchText","GridAvatar","wrap","avatar","small","large","zeroMinWidth","grey","contentWidth","formIssueWidth","breakWord","wordBreak","MozWhiteSpace","pos","contract","nullable","IssueCard","modifier","editing","isClosed","closing","isEdit","setIsEdit","showFormIssue","formCommentWidth","CommentCard","issueCommentTypeName","issueCommentTypeDescription","creater","useThumbnails","handleSubmit","issueModes","issueCreate","issueEditTitle","issueEditDetail","issueEditContract","issueTransfer","issueStatusSet","processStatusSet","issueLabelSet","issueDimensionSet","issueCommentCreate","issueCommentEdit","voteSet","LogCard","log","issueMode","issueLogsContext","issueLogs","issueLogsCreateBy","hasOwnProperty","before","after","remove","add","dimA","dimB","levelName","commentType","CommentCardList","onSubmitByComment","onDroppedFilesByComment","onRemovedFileByComment","IssueCommentTypes","IssueCommentsCreateBy","createBy","mx","HelpdeskIssueActivitiesPage","getListActivityPackage","getIssueDetailPackage","issueCommentReducer","issueLogReducer","handleUpdateIssue","openVote","setOpenVote","voteValue","setVoteValue","handleCloseVote","handleVote","handleAddComment","handleUpdateComment","handleDropFilesByComment","filesSaved","nfile","fileSaved","fs","issuesCreateBy","issueModifyBy","letterSpacing","tabPanel","formCommentControl","RadioGroup","FormControlLabel","control","Radio","formControlOutlined","isSave","setIsSave","useIssueCreateId","reqIssue","showFormReportBreach","routBackOf","staff","IssueCommentsModifyBy","ManageIssueActivitiesPage","activityBar","appbarTitle","initialState","isFetching","isError","page","totalCount","SETTING_PERMISSION_FETCHING","SETTING_PERMISSION_FAILED","SETTING_PERMISSION_SUCCESS","initialState2","SETTING_PERMISSION_DELETE_FETCHING","SETTING_PERMISSION_DELETE_FAILED","SETTING_PERMISSION_DELETE_SUCCESS","setSettingPermissionStateToFailed","M","setSettingPermissionDeleteStateToFailed","SETTING_PERMISSION_MANAGE_FETCHING","SETTING_PERMISSION_MANAGE_FAILED","SETTING_PERMISSION_MANAGE_SUCCESS","SETTING_PERMISSION_MANAGE_SAVE_FETCHING","SETTING_PERMISSION_MANAGE_SAVE_FAILED","SETTING_PERMISSION_MANAGE_SAVE_SUCCESS","SETTING_PERMISSION_MANAGE_EDIT_FETCHING","SETTING_PERMISSION_MANAGE_EDIT_FAILED","SETTING_PERMISSION_MANAGE_EDIT_SUCCESS","SETTING_PERMISSION_MANAGE_BY_ID_FETCHING","SETTING_PERMISSION_MANAGE_BY_ID_FAILED","SETTING_PERMISSION_MANAGE_BY_ID_SUCCESS","setSettingPermissionManageSaveStateToFailed","setSettingPermissionManageEditStateToFailed","setSettingPermissionManageByIdStateToFailed","customStyles","provide","font","valueContainer","indicatorsContainer","SelectMultiPersonalDataCategory","useCategoryGetListAll","el","marginButton","isMulti","defaultValue","getOptionValue","SelectPermissionLevelAdmin","usePermissionLevelGetListAllWithUserRight","SELECT_NAME_OR_EMAIL_FETCHING","SELECT_NAME_OR_EMAIL_FAILED","SELECT_NAME_OR_EMAIL_SUCCESS","setSelectNameOrEmailStateToFailed","loadUserName","SelectNameOrEmailReducer","SelectNameOrEmail","inputValue","callback","selectNameOrEmailAction","labelPlaceHold","defaultOptions","fullName","fullNameEn","loadOptions","onInputChange","menu","provided","SELECT_DEPARTMENT_FETCHING","SELECT_DEPARTMENT_FAILED","SELECT_DEPARTMENT_SUCCESS","setSelectDepartmentStateToFailed","SelectDepartment","fullDepartmentTh","setFullDepartmentTh","show","SelectDepartmentReducer","loadDepartment","SelectDepartment2Reducer","SelectDepartment3Reducer","lvl","objDep","o","fullNameTh","dep","keyCode","nameTh","chip","SelectMultipleEmails","defaultValues","fieldOpts","selectRef","setOptions","setValues","isWrongFomatValue","setIsWrongFomatValue","active","responseEmails","timer","clearTimeout","data-testid","freeSolo","getTagProps","endAdornment","inputRef","getOptionDisabled","isWrongFomatEmail","isWrongFomatEmails","Backdrops","appBarTab","tableHeight","Transition","Slide","departmentId","permissionLevel_id","permissionGroupName","keycodes","permissionGroupDescription","categoryValue","userValue","userData","initialValuesTabIndex","FormSettingPermissions","actionStatus","isSubmitting","setValue","SettingPermissionSaveReducer","setUserData","columnName","isFound","labelPermissionGroup","CheckAdded","xl","filtered","noticedEmails","permissionGroupData","keyValues","rest","fullScreen","down","SettingPermissionManageByIdReducer","loadSettingPermissionById","settingPermissionManageAction","TransitionComponent","reloadTable","ConfirmDialog","OK","rests","SettingPermissionPage","SettingPermissionReducer","setActionStatus","editKey","setEditKey","openConfirm","setOpenConfirm","selectGroupId","setSelectGroupId","messageConfirm","setMessageConfirm","pageSizeOptions","pageOptions","setPageOptions","deleteSettingPermission","settingPermissionAction","onQueryChange","disablePadding","searchAutoFocus","query","orderBy","orderDirection","columnOrder","isAscending","pageNo","perPage","countRow","permission_id","permissionName","count_user","startIcon","prototype","PropTypes","object","cursor_pointer","SETTING_LABEL_FETCHING","SETTING_LABEL_FAILED","SETTING_LABEL_SUCCESS","SETTING_LABEL_DELETE_FETCHING","SETTING_LABEL_DELETE_FAILED","SETTING_LABEL_DELETE_SUCCESS","setSettingLabelStateToFailed","setSettingLabelDeleteStateToFailed","SETTING_LABEL_MANAGE_FETCHING","SETTING_LABEL_MANAGE_FAILED","SETTING_LABEL_MANAGE_SUCCESS","SETTING_LABEL_MANAGE_SAVE_FETCHING","SETTING_LABEL_MANAGE_SAVE_FAILED","SETTING_LABEL_MANAGE_SAVE_SUCCESS","SETTING_LABEL_MANAGE_EDIT_FETCHING","SETTING_LABEL_MANAGE_EDIT_FAILED","SETTING_LABEL_MANAGE_EDIT_SUCCESS","SETTING_LABEL_MANAGE_BY_ID_FETCHING","SETTING_LABEL_MANAGE_BY_ID_FAILED","SETTING_LABEL_MANAGE_BY_ID_SUCCESS","setSettingLabelManageSaveStateToFailed","setSettingLabelManageEditStateToFailed","setSettingLabelManageByIdStateToFailed","paletteObj","blue","yellow","cyan","lime","gray","orange","purple","black","pink","darkblue","FormSettingLabels","labelName","lblName","setLblName","defaultColorPicker","editStyle","labelStyles","colorPicker","setColorPicker","initColorPicker","handleChangeColor","isFont","newColor","hex","onKeyUp","labelId","labelDescription","SettingLabelManageByIdReducer","loadSettingLabelById","settingLabelManageAction","labelData","labelType_id","SettingLabelPage","SettingLabelReducer","selectLabelId","setSelectLabelId","deleteSettingLabel","settingLabelAction","themeFrontOffice","shadows","Array","fill","themeBackOffice","CheckRefreshTokenWork","LoginRoute","work","PrivateRoute","Component","pathPermLevel","accessPermission","CheckAccessibleIssueById","isAccess","App","hideIconVariant","anchorOrigin","vertical","horizontal","maxSnack","LoginPage","HelpdeskReportIssuePage","HelpdeskIssuesPage","ManageIssuesPage","ManageIssueAcitivitiesPage","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","initialStateIssueList","initialStateIssue","initialStateIssueComment","initialStateIssueLog","SELECT_MULTI_PERSONAL_DATA_CATEGORY_FETCHING","SELECT_MULTI_PERSONAL_DATA_CATEGORY_FAILED","SELECT_MULTI_PERSONAL_DATA_CATEGORY_SUCCESS","combineReducers","SelectMultiPersonalDataCategoryReducer","SettingPermissionDeleteReducer","SettingPermissionManageReducer","SettingPermissionManageSaveReducer","SettingPermissionManageEditReducer","SettingLabelDeleteReducer","SettingLabelManageReducer","SettingLabelManageSaveReducer","SettingLabelManageEditReducer","middlewares","applyMiddleware","thunk","logger","store","createStore","reducers","ReactDOM","fallback","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.4dd58e5e.chunk.js","sourcesContent":["import React from 'react';\r\nimport HomeOutlinedIcon from '@material-ui/icons/HomeOutlined';\r\nimport PostAddIcon from '@material-ui/icons/PostAdd';\r\nimport ViewListIcon from '@material-ui/icons/ViewListOutlined';\r\n\r\nimport ListAltIcon from '@material-ui/icons/ListAlt';\r\nimport AssessmentOutlinedIcon from '@material-ui/icons/AssessmentOutlined';\r\nimport SettingsIcon from '@material-ui/icons/Settings';\r\nimport LabelIcon from '@material-ui/icons/Label';\r\n\r\n/**\r\n * Router Constant\r\n * Consist of\r\n * - Path Master (string)\r\n * - routers (object)\r\n * - listRoutFrontOf, listRoutBackOf (array getted from routers converting)\r\n */\r\n\r\n// Path Master Front-Office\r\nexport const PATH_FRONTOF_MASTER = '/helpdesk';\r\n\r\n// Path Master Back-Office\r\nexport const PATH_BACKOF_MASTER = '/management';\r\n\r\n// Routers\r\nexport const routers = {\r\n frontOf: {\r\n main: {\r\n path: `${PATH_FRONTOF_MASTER}/main`,\r\n title: 'หน้าหลัก',\r\n icon: HomeOutlinedIcon,\r\n isMenu: true,\r\n permissionLevel: [0],\r\n },\r\n reportIssue: {\r\n path: `${PATH_FRONTOF_MASTER}/report-issue`,\r\n title: 'แจ้งเหตุละเมิด',\r\n icon: PostAddIcon,\r\n isMenu: true,\r\n permissionLevel: [0],\r\n },\r\n issues: {\r\n path: `${PATH_FRONTOF_MASTER}/issues`,\r\n title: 'รายการเหตุละเมิด',\r\n icon: ViewListIcon,\r\n isMenu: true,\r\n permissionLevel: [0],\r\n },\r\n issue: {\r\n path: `${PATH_FRONTOF_MASTER}/issues/:id/:sid`,\r\n pathNoParam: `${PATH_FRONTOF_MASTER}/issues`,\r\n title: 'กิจกรรม',\r\n icon: ViewListIcon,\r\n isMenu: false,\r\n permissionLevel: [0],\r\n },\r\n },\r\n backOf: {\r\n main: {\r\n path: PATH_BACKOF_MASTER,\r\n title: 'จัดการเหตุละเมิดฯ',\r\n icon: ListAltIcon,\r\n isMenu: true,\r\n permissionLevel: [1, 2, 3],\r\n },\r\n issue: {\r\n path: `${PATH_BACKOF_MASTER}/issues/:id/:sid`,\r\n pathNoParam: `${PATH_BACKOF_MASTER}/issues`,\r\n title: 'แก้ไขปัญหา',\r\n isMenu: false,\r\n permissionLevel: [1, 2, 3],\r\n },\r\n report: {\r\n path: `${PATH_BACKOF_MASTER}/report`,\r\n title: 'รายงาน',\r\n icon: AssessmentOutlinedIcon,\r\n isMenu: true,\r\n permissionLevel: [1, 2, 3],\r\n },\r\n settingPermission: {\r\n path: `${PATH_BACKOF_MASTER}/setting/permission`,\r\n title: 'ตั้งค่าสิทธิ์ผู้ใช้งาน',\r\n icon: SettingsIcon,\r\n isMenu: true,\r\n permissionLevel: [8, 9],\r\n },\r\n settingLabel: {\r\n path: `${PATH_BACKOF_MASTER}/setting/label`,\r\n title: 'ตั้งค่าป้ายกำกับ',\r\n icon: LabelIcon,\r\n isMenu: true,\r\n permissionLevel: [9],\r\n },\r\n },\r\n};\r\n\r\n// Let breadcrumbs mapping match.path with path (in listRoutFrontOf, listRoutBackOf) for filter title page\r\nexport const listRoutFrontOf = Object.keys(routers.frontOf).map((k) => ({\r\n key: `frontOf-${k}`,\r\n ...routers.frontOf[k],\r\n}));\r\nexport const listRoutBackOf = Object.keys(routers.backOf).map((k) => ({\r\n key: `backOf-${k}`,\r\n ...routers.backOf[k],\r\n}));\r\n\r\nexport const listMenuFrontOf = listRoutFrontOf.filter((item) => item.isMenu);\r\n\r\nexport const listMenuBackOf = listRoutBackOf.filter((item) => item.isMenu);\r\n\r\n// Find unique permissionLevel of backOf - frontOf\r\nconst backOfPermissionLevels = listRoutBackOf.map(\r\n (rout) => rout.permissionLevel\r\n);\r\nconst forntOfPermissionLevels = listRoutFrontOf.map(\r\n (rout) => rout.permissionLevel\r\n);\r\n\r\n// https://stackoverflow.com/questions/1960473/get-all-unique-values-in-a-javascript-array-remove-duplicates\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat\r\nfunction onlyUnique(value, index, self) {\r\n return self.indexOf(value) === index;\r\n}\r\n\r\nexport const listPermissionLevelBackOf = []\r\n .concat(...backOfPermissionLevels)\r\n .filter(onlyUnique);\r\n\r\nexport const listPermissionLevelFrontOf = []\r\n .concat(...forntOfPermissionLevels)\r\n .filter(onlyUnique);\r\n","// Dependency\r\nimport { Base64 } from 'js-base64';\r\n\r\n// Version Constant\r\nexport const SYSTEM_VERSION = '20200831';\r\n\r\n// System Name (Front-Office, Back-Office)\r\n// Reporting Beach Personal Information\r\nexport const SYSTEM_NAME_FRONTOF = `Reporting Breach Personal Information`;\r\nexport const SYSTEM_NAME_FRONTOF_INIT = `Reporting Breach Personal Info.`;\r\nexport const SYSTEM_NAME_FRONTOF_TH = `ระบบแจ้งเหตุละเมิดข้อมูลส่วนบุคคล`;\r\nexport const SYSTEM_NAME_FRONTOF_INIT_TH = `แจ้งเหตุละเมิดข้อมูลส่วนบุคคล`;\r\nexport const SYSTEM_NAME_BACKOF = `PDPA Incident Management`;\r\nexport const SYSTEM_NAME_BACKOF_INIT = `PDPA-IM`;\r\n\r\nexport const drawer = {\r\n width: 220,\r\n rightWidth: 280,\r\n};\r\n\r\n// User permission list\r\nexport const USER_PERMISSION_FETCH_LIST_PROCESSING =\r\n 'USER_PERMISSION_FETCH_LIST_PROCESSING';\r\nexport const USER_PERMISSION_FETCH_LIST_FAILED =\r\n 'USER_PERMISSION_FETCH_LIST_FAILED';\r\nexport const USER_PERMISSION_FETCH_LIST_SUCCESS =\r\n 'USER_PERMISSION_FETCH_LIST_SUCCESS';\r\nexport const USER_PERMISSION_FETCH_LIST_CLEAR =\r\n 'USER_PERMISSION_FETCH_LIST_CLEAR';\r\n\r\n// Element id - html\r\nexport const ID_APPTOOLBAR_NAVIGATOR = 'appToolBar-navigator';\r\n\r\n// Error Code\r\nexport const E_PICKER_CANCELLED = 'E_PICKER_CANCELLED';\r\nexport const E_PICKER_CANNOT_RUN_CAMERA_ON_SIMULATOR =\r\n 'E_PICKER_CANNOT_RUN_CAMERA_ON_SIMULATOR';\r\nexport const E_PERMISSION_MISSING = 'E_PERMISSION_MISSING';\r\nexport const E_PICKER_NO_CAMERA_PERMISSION = 'E_PICKER_NO_CAMERA_PERMISSION';\r\nexport const E_USER_CANCELLED = 'E_USER_CANCELLED';\r\nexport const E_UNKNOWN = 'E_UNKNOWN';\r\nexport const E_DEVELOPER_ERROR = 'E_DEVELOPER_ERROR';\r\nexport const TIMEOUT_NETWORK = 'ECONNABORTED'; // request service timeout\r\nexport const NOT_CONNECT_NETWORK = 'NOT_CONNECT_NETWORK';\r\n\r\n// Localization Begin\r\nexport const NETWORK_CONNECTION_MESSAGE =\r\n 'Cannot connect to server, Please try again.';\r\nexport const NETWORK_TIMEOUT_MESSAGE =\r\n 'A network timeout has occurred, Please try again.';\r\nexport const UPLOAD_PHOTO_FAIL_MESSAGE =\r\n 'An error has occurred. The photo was unable to upload.';\r\n\r\n/**\r\n * Action of reducer\r\n */\r\n\r\n// Action of issue\r\nexport const ISSUE_LIST_FETCH_PROCESSING = 'ISSUE_LIST_FETCH_PROCESSING';\r\nexport const ISSUE_LIST_FETCH_FAILED = 'ISSUE_LIST_FETCH_FAILED';\r\nexport const ISSUE_LIST_FETCH_SUCCESS = 'ISSUE_LIST_FETCH_SUCCESS';\r\nexport const ISSUE_LIST_FETCH_CLEAR = 'ISSUE_LIST_FETCH_CLEAR';\r\n\r\nexport const ISSUE_FETCH_PROCESSING = 'ISSUE_FETCH_PROCESSING';\r\nexport const ISSUE_FETCH_FAILED = 'ISSUE_FETCH_FAILED';\r\nexport const ISSUE_FETCH_SUCCESS = 'ISSUE_FETCH_SUCCESS';\r\nexport const ISSUE_FETCH_CLEAR = 'ISSUE_FETCH_CLEAR';\r\n\r\nexport const ISSUE_UPDATE_SUCCESS = 'ISSUE_UPDATE_SUCCESS';\r\nexport const ISSUE_UPDATE_FAILED = 'ISSUE_UPDATE_FAILED';\r\n\r\n// Action of issue-comment\r\nexport const ISSUE_COMMENT_FETCH_PROCESSING = 'ISSUE_COMMENT_FETCH_PROCESSING';\r\nexport const ISSUE_COMMENT_FETCH_FAILED = 'ISSUE_COMMENT_FETCH_FAILED';\r\nexport const ISSUE_COMMENT_FETCH_SUCCESS = 'ISSUE_COMMENT_FETCH_SUCCESS';\r\nexport const ISSUE_COMMENT_FETCH_CLEAR = 'ISSUE_COMMENT_FETCH_CLEAR';\r\n\r\nexport const ISSUE_COMMENT_UPDATE_FAILED = 'ISSUE_COMMENT_UPDATE_FAILED';\r\nexport const ISSUE_COMMENT_UPDATE_SUCCESS = 'ISSUE_COMMENT_UPDATE_SUCCESS';\r\n\r\n// Action of issueLog\r\nexport const ISSUE_LOG_FETCH_PROCESSING = 'ISSUE_LOG_FETCH_PROCESSING';\r\nexport const ISSUE_LOG_FETCH_FAILED = 'ISSUE_LOG_FETCH_FAILED';\r\nexport const ISSUE_LOG_FETCH_SUCCESS = 'ISSUE_LOG_FETCH_SUCCESS';\r\nexport const ISSUE_LOG_FETCH_CLEAR = 'ISSUE_LOG_FETCH_CLEAR';\r\n\r\nexport const ISSUE_LOG_UPDATE_SUCCESS = 'ISSUE_LOG_UPDATE_SUCCESS';\r\nexport const ISSUE_LOG_UPDATE_FAILED = 'ISSUE_LOG_UPDATE_FAILED';\r\n\r\n// Action of analystIncident\r\nexport const ANALYST_INCIDENT_FETCH_PROCESSING =\r\n 'ANALYST_INCIDENT_FETCH_PROCESSING';\r\nexport const ANALYST_INCIDENT_FETCH_FAILED = 'ANALYST_INCIDENT_FETCH_FAILED';\r\nexport const ANALYST_INCIDENT_FETCH_SUCCESS = 'ANALYST_INCIDENT_FETCH_SUCCESS';\r\nexport const ANALYST_INCIDENT_FETCH_CLEAR = 'ANALYST_INCIDENT_FETCH_CLEAR';\r\n\r\nexport const ANALYST_INCIDENT_UPDATE_SUCCESS =\r\n 'ANALYST_INCIDENT_UPDATE_SUCCESS';\r\nexport const ANALYST_INCIDENT_UPDATE_FAILED = 'ANALYST_INCIDENT_UPDATE_FAILED';\r\n\r\n/**\r\n * Config SysHost, config hostname of each site (prd, qas, dev)\r\n */\r\nconst confSysHost = {\r\n prd: 'incident-pdpa.mahidol.ac.th',\r\n qas: 'incident-pdpa-qas.mahidol.ac.th',\r\n dev: 'localhost',\r\n};\r\n\r\n/**\r\n * Config SysDomain, config domain of each site (prd, qas, dev)\r\n * NOTE: Domain is hostname included protocol.\r\n */\r\nconst confSysDomain = {\r\n prd: `https://${confSysHost.prd}`,\r\n qas: `https://${confSysHost.qas}`,\r\n dev: `http://${confSysHost.dev}`,\r\n};\r\n\r\n/**\r\n * Config SysURL, config url of each site (prd, qas, dev)\r\n * NOTE: url is a endpoint of system.\r\n */\r\nconst configSysURL = {\r\n web: {\r\n prd: confSysDomain.prd,\r\n qas: confSysDomain.qas,\r\n dev: `${confSysDomain.dev}:3000`,\r\n },\r\n api: {\r\n prd: `${confSysDomain.prd}/api`,\r\n qas: `${confSysDomain.qas}/api`,\r\n dev: `${confSysDomain.qas}/api`, //${confSysDomain.dev}:8008\r\n },\r\n};\r\n\r\n// Config JWL resouce,\r\nconst confJWT = {\r\n urlAuthen: 'https://jwt.mahidol.ac.th/v1/authen',\r\n urlAuthenStatus: 'https://jwt.mahidol.ac.th/v1/status',\r\n urlAuthenAccess: 'https://jwt.mahidol.ac.th/v1/access',\r\n urlPublicKey: 'https://jwt.mahidol.ac.th/v1/publickey',\r\n urlAdfsAuthen: 'https://jwt.mahidol.ac.th/adfs/v1/authen',\r\n adfsSysKey: {\r\n prd: '64adcc91a9e54e87dbaf69a1dffe1742343d9f59',\r\n qas: '492847b66fcb69a06c4b821e324d51e8ed131879',\r\n dev: '7858a0e06434718dc4b5271c6d36f938eaa12d2d',\r\n },\r\n};\r\n\r\n/**\r\n * Config serverFake const\r\n */\r\nconst configAPIURLFake = {\r\n dev: 'http://127.0.0.1:1880/pdpa', // NODERED Local Server\r\n qas: 'https://dw-pandora.mahidol.ac.th/service/pdpa', // NODERED QAS (DW) Server\r\n prd: 'https://dw-pandora.mahidol.ac.th/service/pdpa', // NODERED QAS (DW) Server\r\n};\r\n\r\n/**\r\n * mapValuesBySite: map keySite (of pairSite) that matched with key of confSysDomain by hostname\r\n * @param {object} pairSite , (object) sites-value default { prd: \"PRD\", qas: \"QAS\", dev: \"DEV\"}\r\n * @return {object} value of pairSite that keySite matched;\r\n */\r\nconst mapValuesBySite = (\r\n pairSite = { prd: 'PRD', qas: 'QAS', dev: 'DEV' },\r\n configSystemHost = confSysHost\r\n) => {\r\n const hostname = window.location.hostname;\r\n //Find keySite from hostname\r\n const keySite = Object.keys(configSystemHost).find(\r\n (key) => configSystemHost[key] === hostname\r\n );\r\n return pairSite[keySite];\r\n};\r\n\r\n/** =========================================================\r\n * server constant, consist of\r\n * 1 API-Enpoints,\r\n * 2 Stroage-Keys\r\n * =========================================================\r\n */\r\n\r\n/**\r\n * EXPORT: server const\r\n */\r\nexport const server = {\r\n // Localstorage Key\r\n REFRESH_TOKEN_KEY: 'refresh_token',\r\n ACCESS_TOKEN_KEY: 'access_token',\r\n USER_PROFILE_KEY: 'user_profile',\r\n ISSUE_FILTERS_KEY: 'issue_filters',\r\n\r\n // request param-mode\r\n REQ_PARAM_MODE_REPORTER: 'reporter',\r\n REQ_PARAM_MODE_STAFF: 'staff',\r\n\r\n // API URL/Enpoint\r\n USER_URL: '/user/v1',\r\n PERMISSION_LEVEL_URL: '/permissionLevel/v1',\r\n CATEGORY_URL: '/category/v1',\r\n PERMISSION_GROUP_URL: '/permissionGroup/v1',\r\n LABEL_URL: '/label/v1',\r\n DIMENSION_URL: '/dimension/v1',\r\n PROCESS_STATUS_URL: '/processStatus/v1',\r\n ISSUE_URL: '/issue/v1',\r\n ISSUE_COMMEMNT_URL: '/issueComment/v1',\r\n ISSUE_LOG_URL: '/issueLog/v1',\r\n OBSERVER_URL: '/observer/v1',\r\n FILE_URL: '/image/v1',\r\n};\r\n\r\nconst urlAPIFake = mapValuesBySite(configAPIURLFake);\r\n\r\nexport const serverFake = {\r\n ISSUE_URL: `${urlAPIFake}/issue/v1`,\r\n};\r\n\r\n/**\r\n * =========================================================\r\n * sysURL constant, consist of\r\n * 1 adfsAuthen URL\r\n * 2 accessToken URL\r\n * 3 api & web URL\r\n * =========================================================\r\n */\r\n\r\n// Get adfsSystemKey by site\r\nconst adfsSystemKey = mapValuesBySite(confJWT.adfsSysKey);\r\n\r\n/**\r\n * EXPORT sysURL\r\n */\r\nexport const sysURL = {\r\n adfsAuthen: `${confJWT.urlAdfsAuthen}/${adfsSystemKey}`,\r\n accessToken: (() => {\r\n let packageParam = '';\r\n try {\r\n packageParam = Base64.encode(\r\n `${localStorage.getItem(server.REFRESH_TOKEN_KEY)}.${adfsSystemKey}`\r\n );\r\n } catch (error) {}\r\n return `${confJWT.urlAuthenAccess}?package=${packageParam}`;\r\n })(),\r\n api: mapValuesBySite(configSysURL.api),\r\n web: mapValuesBySite(configSysURL.web),\r\n};\r\n\r\n/**\r\n * masterData constants consist of:\r\n * - process\r\n * - issue\r\n * In each options has structure below:\r\n * { value: 'key/value', text: 'display text', style: 'style of status' }\r\n */\r\nexport const masterData = {\r\n permissionGroups: [\r\n { id: 1, title: 'กลุ่มผู้ดูแลข้อมูล กลุ่มที่ 1' },\r\n { id: 2, title: 'กลุ่มผู้ดูแลข้อมูล กลุ่มที่ 2' },\r\n {\r\n id: 3,\r\n title: 'กลุ่มผู้ดูแลข้อมูล กลุ่มที่ 3',\r\n },\r\n ],\r\n commentTypes: [\r\n // Doc 1.\tเหตุการณ์เกิดขึ้นได้อย่างไร, Doc 2.\tใครเป็นคนพบเหตุการณ์ดังกล่าว [info issue lv0]\r\n { id: 1, title: 'สาเหตุของเหตูการณ์ที่เกิดขึ้น' },\r\n\r\n // Doc 3.\tวันและเวลาที่เหตุการณ์เกิดขึ้น\r\n { id: 2, title: 'วันและเวลาที่เหตุการณ์เกิดขึ้น' },\r\n\r\n // Doc 4.\tมีการดำเนินการเบื้องต้นอย่างไรในการจำกัดผลกระทบเนื่องจากเหตุการณ์\r\n {\r\n id: 3,\r\n title: 'การดำเนินการเบื้องต้นอย่างไรในการจำกัดผลกระทบเนื่องจากเหตุการณ์',\r\n },\r\n\r\n // Doc 5. มีการดำเนินการอย่างไรที่ใช้ในการจัดการเหตุการณ์ดังกล่าว\r\n { id: 4, title: 'การดำเนินการที่ใช้ในการจัดการเหตุการณ์' },\r\n\r\n // Doc 6.\tมีบุคคลที่สามเกี่ยวข้องกับการจัดการเหตุการณ์หรือไม่\r\n { id: 5, title: 'บุคคลที่สามเกี่ยวข้องกับการจัดการเหตุการณ์' },\r\n\r\n // Doc 7.\tในกรณีถ้ามีบุคคลที่สามเกี่ยวข้อง มีการดำเนินการอย่างไร\r\n { id: 6, title: 'การดำเนินการ ในกรณีถ้ามีบุคคลที่สามเกี่ยวข้อง' },\r\n ],\r\n};\r\n\r\nexport const sortingOptions = {\r\n issues: [\r\n { name: 'issues.createDate', title: 'วันที่แจ้ง' },\r\n { name: 'issues.modifyDate', title: 'วันที่ปรับปรุง' },\r\n { name: 'categorys.name', title: 'ประเภท' },\r\n { name: 'issues.level', title: 'ระดับ' },\r\n { name: 'processStatuses.id', title: 'สถานะการดำเนินการ' },\r\n ],\r\n};\r\n\r\n/**\r\n * =================================================================\r\n * muiTable constanst is the config of material-table, consist of\r\n * 1 options (Change behaviour of grid)\r\n * 2 components (Component customization)\r\n * =================================================================\r\n */\r\nexport const muiTable = {\r\n options: {\r\n // Change column index of action (edit, delete column)\r\n actionsColumnIndex: -1,\r\n\r\n // set default pageSize option.\r\n pageSize: 10,\r\n\r\n // set default headerStyle option.\r\n headerStyle: { fontWeight: 'bold' },\r\n rowStyle: { fontSize: '0.98em' },\r\n },\r\n localization: {\r\n header: {\r\n actions: 'Actions',\r\n },\r\n toolbar: {\r\n searchPlaceholder: 'ค้นหา',\r\n },\r\n body: {\r\n emptyDataSourceMessage: 'ไม่มีรายการข้อมูล',\r\n },\r\n pagination: {\r\n labelRowsPerPage: 'รายการต่อหน้า',\r\n labelDisplayedRows: `{from}-{to} จาก {count}`,\r\n labelRowsSelect: 'รายการ',\r\n firstAriaLabel: 'หน้าแรก',\r\n firstTooltip: 'หน้าแรก',\r\n previousAriaLabel: 'หน้าก่อน',\r\n previousTooltip: 'หน้าก่อน',\r\n nextAriaLabel: 'หน้าถัดไป',\r\n nextTooltip: 'หน้าถัดไป',\r\n lastAriaLabel: 'หน้าสุดท้าย',\r\n lastTooltip: 'หน้าสุดท้าย',\r\n },\r\n },\r\n};\r\n\r\nexport const regexes = {\r\n emailFormat: /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\r\n};\r\nexport const invalidMessages = {\r\n emailFormat: 'รูปแบบอีเมลไม่ถูกต้อง',\r\n};\r\n\r\nexport const labels = {\r\n selectMultipleEmails: 'ค้นหาและจัดการอีเมล',\r\n};\r\n\r\n// Mock data for test\r\nconst _mockEmails = {\r\n options: [\r\n { email: 'email1@example.com' },\r\n { email: 'email2@example.com' },\r\n { email: 'email3@example.com' },\r\n ],\r\n};\r\n\r\n_mockEmails.create = [\r\n _mockEmails.options[0],\r\n _mockEmails.options[1],\r\n];\r\n_mockEmails.update = [\r\n _mockEmails.options[0],\r\n _mockEmails.options[2],\r\n];\r\n\r\nexport const mockEmails = _mockEmails;\r\n","// Dependency\r\nimport { Base64 } from 'js-base64';\r\n\r\nimport { server } from './../constants';\r\n\r\n/**\r\n * logger console.log when system-environment is not produnction\r\n * @param {...any} args\r\n */\r\nexport function logger(...args) {\r\n if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {\r\n console.log(...args);\r\n }\r\n}\r\n\r\nexport const issueOperations = {\r\n reciever: 'RECIEVER',\r\n features: 'FEATURES', // can manage labels, dimensions\r\n updateIssue: 'UPDATE-ISSUE',\r\n addComment: 'ADD-COMMENT',\r\n updateComment: 'UPDATE-COMMENT',\r\n};\r\n\r\nexport const base64 = {\r\n encodeObj(obj) {\r\n let encode = '';\r\n try {\r\n let objToJson = JSON.stringify(obj);\r\n encode = Base64.encode(objToJson);\r\n } catch (error) {\r\n alert('Error base64.encodeObj, ', JSON.stringify(error));\r\n }\r\n return encode;\r\n },\r\n decodeObj(json) {\r\n let decode = '';\r\n try {\r\n let jsonToObject = Base64.decode(json);\r\n decode = JSON.parse(jsonToObject);\r\n } catch (error) {\r\n alert('Error base64.decodeObj, ', JSON.stringify(error));\r\n }\r\n return decode;\r\n },\r\n encode: Base64.encode,\r\n decode: Base64.decode,\r\n};\r\n\r\n/**\r\n * mergeArray, merge array items in list array examples [[1,2,3], [1,2,4]] => [1,2,3,4]\r\n * @param {*} arr list of array\r\n * @returns new array without duplicate element with another list\r\n */\r\nexport function mergeArray(arr = [[]]) {\r\n let ret = [];\r\n arr\r\n .reduce((acc, curr) => acc.concat(curr))\r\n .forEach((item) => {\r\n if (ret.indexOf(item) === -1) ret.push(item);\r\n });\r\n return ret;\r\n}\r\n\r\n/**\r\n * To format - datetime strings (from system-datetime) to language-sensitive date and time\r\n * (ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat)\r\n * @param {string} datetime datetime strings (ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)\r\n * @param {string} locale, ex 'en-US', 'th-TH' ... etc.\r\n * @param {object} options, default {year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric', hour12: false}\r\n * @return {string} date and time formatting by locale and options\r\n */\r\nexport function formatDatetime(props) {\r\n props = props === undefined ? {} : props;\r\n let datetime = props.datetime ? props.datetime : null;\r\n let locale = props.locale ? props.locale : 'en-GB';\r\n let languageId = props.languageId ? props.languageId : null;\r\n if (languageId) {\r\n if (languageId === 'TH') {\r\n locale = 'th-TH';\r\n }\r\n }\r\n let options = props.options ? props.options : {};\r\n let opts = {\r\n year: options.year ? options.year : 'numeric',\r\n month: options.year ? options.month : '2-digit',\r\n day: options.day ? options.day : '2-digit',\r\n hour: options.hour ? options.hour : 'numeric',\r\n minute: options.minute ? options.minute : 'numeric',\r\n //second: options.second ? options.second : \"numeric\",\r\n hour12: options.hour12 ? options.hour12 : false,\r\n };\r\n if (datetime) {\r\n try {\r\n let date = datetime === 'now' ? new Date() : new Date(datetime);\r\n return `${new Intl.DateTimeFormat(locale, opts).format(date)}`;\r\n } catch (error) {\r\n console.error('Error in formatDatetime func: ', error);\r\n }\r\n }\r\n return '-';\r\n}\r\n\r\nexport function formatDateYYYYTMMTdd(date) {\r\n let d = new Date(date);\r\n let month = '' + (d.getMonth() + 1);\r\n let day = '' + d.getDate();\r\n let year = d.getFullYear();\r\n\r\n if (month.length < 2) month = '0' + month;\r\n if (day.length < 2) day = '0' + day;\r\n\r\n return [year, month, day].join('-');\r\n}\r\n\r\nexport function getPeriodDateById(periodId) {\r\n var date = new Date();\r\n let dfEndDate = new Date(date.setDate(date.getDate()));\r\n\r\n let dfstartDate = '1900-12-31';\r\n let period = { startDate: '', endDate: formatDateYYYYTMMTdd(dfEndDate) };\r\n\r\n if (periodId === 'all') {\r\n period.startDate = dfstartDate;\r\n } else {\r\n let periodType = periodId[1];\r\n let periodAmou = Number(periodId[0]);\r\n let endDateSubNYear = dfEndDate;\r\n if (periodId[1] === 'y') {\r\n endDateSubNYear.setFullYear(endDateSubNYear.getFullYear() - periodAmou);\r\n period.startDate = formatDateYYYYTMMTdd(endDateSubNYear);\r\n }\r\n }\r\n\r\n return { ...period, dateStart: period.startDate, dateEnd: period.endDate };\r\n}\r\n\r\n/**\r\n *\r\n * @param {object|json-string} info\r\n */\r\nexport function JSON2HTML(\r\n info,\r\n unacceptKey = [\r\n 'stack',\r\n 'description',\r\n 'number',\r\n 'fileName',\r\n 'lineNumber',\r\n 'columnNumber',\r\n 'config',\r\n 'code',\r\n ]\r\n) {\r\n let checkType = (t) => {\r\n if (t) {\r\n if (Array.isArray(t)) {\r\n return 'array';\r\n } else {\r\n return typeof t;\r\n }\r\n } else {\r\n return '';\r\n }\r\n };\r\n let infos = {};\r\n let keys = [];\r\n try {\r\n infos = checkType(info) === 'string' ? JSON.parse(info) : info;\r\n } catch (error) {\r\n infos = {\r\n note: 'Tranforming infomation fail',\r\n context: info,\r\n };\r\n }\r\n keys = Object.keys(infos);\r\n let htmls = keys.map((key, index) => {\r\n if (!unacceptKey.includes(key)) {\r\n let ifs = infos[key];\r\n let t = checkType(ifs);\r\n return `
\r\n

${key}:

\r\n
\r\n ${\r\n t === 'object'\r\n ? JSON2HTML(JSON.stringify(ifs))\r\n : t === 'array'\r\n ? JSON.stringify(ifs)\r\n : ifs\r\n }\r\n
\r\n
`;\r\n } else {\r\n return '';\r\n }\r\n });\r\n return htmls.join('');\r\n}\r\n\r\n/**\r\n * clearLocalAccessData()\r\n * Clear ACCESS_TOKEN\r\n * Clear REFRESH_TOKEN\r\n * Clear USER_PROFILE\r\n */\r\nexport const clearLocalAccessData = () => {\r\n localStorage.removeItem(server.ACCESS_TOKEN_KEY);\r\n localStorage.removeItem(server.REFRESH_TOKEN_KEY);\r\n localStorage.removeItem(server.USER_PROFILE_KEY);\r\n};\r\n\r\n/**\r\n * {object} userProfiler\r\n * userProfiler.setToLocal() set user profile to localStorage\r\n * userProfiler.getFromLocal() get user profile (object type) from localStorage\r\n */\r\nexport const userProfiler = {\r\n /**\r\n * userProfile.setToLocal();\r\n * @param {object} userProfile { user, permission }\r\n * @param {object} userProfile.user,\r\n * @param {array} userProfile.permission,\r\n * @param {*} userProfileKey , User profile key of localStorage [Default = server.USER_PROFILE_KEY]\r\n */\r\n setToLocal(userProfile, userProfileKey = server.USER_PROFILE_KEY) {\r\n let { user: profile, permission } = userProfile;\r\n\r\n try {\r\n let {\r\n id,\r\n firstName,\r\n lastName,\r\n firstNameEn,\r\n lastNameEn,\r\n email,\r\n position,\r\n keycode,\r\n department,\r\n image,\r\n lastLogin,\r\n notifyCount,\r\n } = profile;\r\n let strUserProfile = JSON.stringify({\r\n user: {\r\n id,\r\n firstName,\r\n lastName,\r\n fullname: `${firstName} ${lastName}`,\r\n firstNameEn,\r\n lastNameEn,\r\n fullnameEn: `${firstNameEn} ${lastNameEn}`,\r\n email,\r\n position,\r\n keycode,\r\n department,\r\n image,\r\n lastLogin: formatDatetime({ datetime: lastLogin }),\r\n notifyCount,\r\n },\r\n permission,\r\n });\r\n let enUserProfile = Base64.encode(strUserProfile);\r\n localStorage.setItem(userProfileKey, enUserProfile);\r\n } catch (error) {\r\n alert('Errpr userProfiler.getLocal, ', JSON.stringify(error));\r\n }\r\n },\r\n /**\r\n * getFromLocal() get user profile (object type) from localStorage\r\n * @param {*} userProfileKey , User profile key of localStorage [Default = server.USER_PROFILE_KEY]\r\n * @return { user, permission }\r\n */\r\n getFromLocal(userProfileKey = server.USER_PROFILE_KEY) {\r\n let parseDeUserProfile = { user: {}, permission: { level: [] } };\r\n try {\r\n let enUserProfile = localStorage.getItem(userProfileKey);\r\n if (enUserProfile) {\r\n parseDeUserProfile = JSON.parse(Base64.decode(enUserProfile));\r\n }\r\n } catch (error) {\r\n alert('Errpr userProfiler.getLocal, ', JSON.stringify(error));\r\n }\r\n return parseDeUserProfile;\r\n },\r\n};\r\n\r\n/** \r\n * openOriginalImage() open image on new tab.\r\n * @param {*} data \r\n * https://stackoverflow.com/questions/27798126/how-to-open-the-newly-created-image-in-a-new-tab\r\n\r\n */\r\nexport function openOriginalImage(\r\n data,\r\n title = 'Reporting Breach: Original image'\r\n) {\r\n // https://stackoverflow.com/questions/27798126/how-to-open-the-newly-created-image-in-a-new-tab\r\n let image = new Image();\r\n image.src = data;\r\n let w = window.open('', 'file');\r\n w.document.body.innerHTML = '';\r\n w.document.write(image.outerHTML);\r\n w.document.title = title;\r\n}\r\n\r\n\r\n/**\r\n * isManageIssue\r\n * @param {bool} readOnly Are you readOnly in issue\r\n * @param {bool} isWorker Are you readOnly of issue\r\n * @param {bool} processStatus Current processStatus of issue\r\n * @param {object} options { operation: operations, [issueWorker]|[user, createBy] }\r\n * @param {issueOperation} options.operation {reciever|updateIssue|addComment|updateComment} default updateIssue\r\n * @param {bool} options.creater Require if operation is updateIssue or updateComment\r\n\r\n * 10\tTH\tpending\tรอดำเนินการ\r\n * 20\tTH\treceived\tเจ้าหน้าที่ รับเรื่อง\r\n * 30\tTH\tprocessing\tเจ้าหน้าที่ ดำเนินการ\r\n * 40\tTH\tforward\tส่งต่อ\r\n * 90\tTH\tsuccess\tดำเนินการเรียบร้อย\r\n * 99\tTH\tvote\tผู้แจ้ง ประเมิน\r\n */\r\n export function isManageIssue(readOnly, isWorker, processStatus, options) {\r\n options = options || {};\r\n options.operation = options.operation || issueOperations.updateIssue;\r\n options.isCreater = options.isCreater || null;\r\n\r\n let isManage = false;\r\n\r\n switch (options.operation) {\r\n case issueOperations.reciever:\r\n if (readOnly) {\r\n isManage = false;\r\n } else if (\r\n // if you are not wroker & processStatus = 10 (pending) you can recieve\r\n // and you are worker you can change processStatus else can not\r\n (isWorker === false && processStatus < 20) ||\r\n isWorker === true\r\n ) {\r\n isManage = true;\r\n } else {\r\n isManage = false;\r\n }\r\n break;\r\n case issueOperations.features:\r\n if (readOnly) {\r\n isManage = false;\r\n } else if (isWorker === true && processStatus >= 20) {\r\n isManage = true;\r\n } else {\r\n isManage = false;\r\n }\r\n break;\r\n case issueOperations.updateIssue:\r\n if (isWorker && processStatus >= 20) {\r\n isManage = true;\r\n } else {\r\n isManage = false;\r\n }\r\n break;\r\n case issueOperations.updateComment:\r\n if (options.isCreater && processStatus >= 20) {\r\n isManage = true;\r\n } else {\r\n isManage = false;\r\n }\r\n break;\r\n case issueOperations.addComment:\r\n if (readOnly) {\r\n isManage = false;\r\n } else if (processStatus >= 20) {\r\n isManage = true;\r\n } else {\r\n isManage = false;\r\n }\r\n break;\r\n default:\r\n isManage = false;\r\n }\r\n \r\n return isManage;\r\n}\r\n\r\n// setDeepState\r\n// https://stackoverflow.com/questions/58975883/prevent-rerender-for-every-setstate-using-react-usestate-hook\r\nexport function setDeepState(state, newState, setState) {\r\n setState(Object.assign({}, state, newState));\r\n}\r\n","import React, { useState } from 'react';\r\nimport { createMuiTheme, ThemeProvider } from '@material-ui/core/styles';\r\n/**\r\n * How to create Context API.\r\n * 1) Create a context using createContext() method.\r\n * 2) Provide context value at a hign-level in component tree.\r\n * 3) Consume the context value using the render props pattern.\r\n */\r\n\r\nconst themeDefault = createMuiTheme({\r\n palette: {\r\n primary: {\r\n light: '#4383cc',\r\n main: '#1565c0',\r\n dark: '#0e4686',\r\n contrastText: '#fff',\r\n },\r\n },\r\n});\r\n\r\n// 1) Create a context using createContext() method.\r\nconst MuiThemeContext = React.createContext();\r\n\r\n// 2) Provide context value at a hign-level in component tree.\r\nfunction MuiThemeProvider({ children }) {\r\n\r\n const [theme, setTheme] = useState(themeDefault);\r\n\r\n const setMuiTheme = (muiTheme) => {\r\n setTheme({ ...muiTheme });\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nconst useMuiThemeContext = () => {\r\n return React.useContext(MuiThemeContext);\r\n};\r\n\r\n// Export SystemProvider, SystemConsumer & useSystemContext\r\nexport { MuiThemeProvider, useMuiThemeContext };\r\n","import React from 'react';\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n Button,\r\n} from '@material-ui/core';\r\n\r\n// View jsonchema by JsonToTable (Review-Testing: formData, globals)\r\nimport { JsonToTable } from 'react-json-to-table';\r\n\r\n// material-ui accordian\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\n/**\r\n * How to create Context API\r\n * 1) Create a context using createContext() method.\r\n * 2) Provide context value at a hign-level in component tree.\r\n * 3) Consume the context value using the render props pattern.\r\n */\r\nconst DialogContext = React.createContext();\r\n\r\n// Dialog-imperatively Adopt from https://stackoverflow.com/questions/63737526/material-ui-how-to-open-dialog-imperatively-programmatically\r\n\r\nfunction DialogContainer(props) {\r\n const {\r\n children,\r\n title,\r\n summary = null,\r\n detail = null,\r\n open,\r\n onClose,\r\n handleClose,\r\n onEscapeKeyDown,\r\n onKill,\r\n } = props;\r\n const c = '

Test

';\r\n const ret = children ? (\r\n \r\n {children}\r\n \r\n ) : (\r\n \r\n {title}\r\n \r\n {summary && (\r\n \r\n \r\n Summary:{' '}\r\n \r\n \r\n \r\n )}\r\n {detail && (\r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n \r\n Detail:\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\r\n return ret;\r\n}\r\n\r\nconst DialogProvider = ({ children }) => {\r\n const [dialogs, setDialogs] = React.useState([]);\r\n\r\n /**\r\n * Dialog-Contexts 1, openDialog\r\n * @param {*} option\r\n */\r\n const openDialog = (option) => {\r\n // Add dialog-id instead dialog-id-exist or new dialog-id couse dialog-id use not to exist\r\n const dialog = { ...option, open: true };\r\n setDialogs((dialogs) => {\r\n // Find dialog-id-exist and remove it prevent duplecate;\r\n let diaIdIndex = dialogs.findIndex((prop) => prop.id === option.id);\r\n if (diaIdIndex > -1) {\r\n dialogs.splice(diaIdIndex, 1);\r\n }\r\n return [...dialogs, dialog];\r\n });\r\n };\r\n\r\n // Dialog-Contexts 2, closeDialog\r\n const closeDialog = (id) => {\r\n setDialogs((dialogs) => {\r\n const mutableDialog = dialogs.find((prop) => prop.id === id);\r\n if (!mutableDialog) return dialogs;\r\n if (mutableDialog.onClose) mutableDialog.onClose();\r\n\r\n let diaIdIndex = dialogs.findIndex((prop) => prop.id === id);\r\n if (diaIdIndex > -1) {\r\n dialogs.splice(diaIdIndex, 1);\r\n }\r\n\r\n return [...dialogs, { ...mutableDialog, open: false }];\r\n });\r\n };\r\n\r\n //Keep id use to generate dialog\r\n const idRef = React.useRef([]);\r\n\r\n // Integrate Dialog-Contexts (openDialog, closeDialog)\r\n // to (array) contextValue\r\n const contextValueRef = React.useRef([openDialog, closeDialog]);\r\n\r\n return (\r\n \r\n {children}\r\n {dialogs.map((dialog, i) => {\r\n return (\r\n {\r\n e.preventDefault();\r\n closeDialog(dialog.id);\r\n }}\r\n />\r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\n// Create DialogConsumer component, let child component use dialog-contexts\r\nconst DialogConsumer = DialogContext.Consumer;\r\n\r\n// Create useDialog (by useContext) that includes dialog-contexts (openDialog, closeDialog)\r\n// useDialog let child component use dialog-contexts with-out DialogConsumer component\r\nconst useDialog = () => React.useContext(DialogContext);\r\n\r\n// Export DialogProvider, DialogConsumer & useDialog\r\nexport { DialogProvider, DialogConsumer, useDialog };\r\n","import { clearLocalAccessData } from './../utils/utils';\r\n\r\nexport const logout = (history) => {\r\n return (dispatch) => {\r\n clearLocalAccessData();\r\n history.push('/login');\r\n };\r\n};\r\n","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport Box from '@material-ui/core/Box';\r\nimport Hidden from '@material-ui/core/Hidden';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener';\r\nimport Grow from '@material-ui/core/Grow';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Popper from '@material-ui/core/Popper';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport MenuList from '@material-ui/core/MenuList';\r\nimport List from '@material-ui/core/List';\r\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport Divider from '@material-ui/core/Divider';\r\n\r\nimport AccountCircle from '@material-ui/icons/AccountCircle';\r\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\r\n\r\n// import react-router\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport * as loginActions from './../../actions/login.action';\r\n\r\nimport {\r\n SYSTEM_NAME_FRONTOF,\r\n SYSTEM_NAME_FRONTOF_INIT,\r\n SYSTEM_NAME_FRONTOF_TH,\r\n SYSTEM_NAME_FRONTOF_INIT_TH,\r\n SYSTEM_NAME_BACKOF,\r\n SYSTEM_NAME_BACKOF_INIT,\r\n} from './../../constants';\r\n\r\nimport { userProfiler } from './../../utils/utils';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n maxWidth: '36ch',\r\n },\r\n inline: {\r\n display: 'inline',\r\n },\r\n title: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n alignItems: 'center',\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n },\r\n avatarSmall: {\r\n width: theme.spacing(3.9),\r\n height: theme.spacing(3.9),\r\n },\r\n avatarLarge: {\r\n width: theme.spacing(7),\r\n height: theme.spacing(7),\r\n },\r\n}));\r\n\r\nfunction InnerAppBar({ isAuthen = false, isBackOffice = false }) {\r\n // Classes\r\n const classes = useStyles();\r\n\r\n // Hook function from router\r\n const history = useHistory();\r\n\r\n // Hook dispatch\r\n const dispatch = useDispatch();\r\n\r\n const upf = userProfiler.getFromLocal();\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const anchorRef = React.useRef(null);\r\n\r\n const handleToggle = () => {\r\n setOpen((prevOpen) => !prevOpen);\r\n };\r\n\r\n const handleClose = (event) => {\r\n if (anchorRef.current && anchorRef.current.contains(event.target)) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n function handleListKeyDown(event) {\r\n if (event.key === 'Tab') {\r\n event.preventDefault();\r\n setOpen(false);\r\n }\r\n }\r\n\r\n /**\r\n * handleLogout()\r\n * Despatch loginActions.logout\r\n */\r\n function handleLogout() {\r\n dispatch(loginActions.logout(history));\r\n }\r\n\r\n // return focus to the button when we transitioned from !open -> open\r\n const prevOpen = React.useRef(open);\r\n React.useEffect(() => {\r\n if (prevOpen.current === true && open === false) {\r\n anchorRef.current && anchorRef.current.focus();\r\n }\r\n\r\n prevOpen.current = open;\r\n }, [open]);\r\n\r\n return (\r\n \r\n {/* @System Name Text */}\r\n \r\n \r\n \r\n {!isBackOffice && (\r\n \r\n {/* Laptop - SysName Top */}\r\n \r\n \r\n {SYSTEM_NAME_FRONTOF}\r\n \r\n \r\n {/* Mobile - SysName Top */}\r\n \r\n \r\n {SYSTEM_NAME_FRONTOF_INIT}{' '}\r\n \r\n \r\n {/* Laptop - SysName Bottom */}\r\n \r\n \r\n {SYSTEM_NAME_FRONTOF_TH}\r\n \r\n \r\n {/* Mobile - SysName Bottom */}\r\n \r\n \r\n {SYSTEM_NAME_FRONTOF_INIT_TH}{' '}\r\n \r\n \r\n \r\n )}\r\n\r\n {isBackOffice && (\r\n \r\n {SYSTEM_NAME_BACKOF_INIT}\r\n {SYSTEM_NAME_BACKOF}\r\n \r\n )}\r\n \r\n \r\n\r\n {isAuthen && (\r\n
\r\n \r\n {!upf.user.image && }\r\n {upf.user.image && (\r\n \r\n )}\r\n \r\n \r\n {({ TransitionProps, placement }) => (\r\n \r\n \r\n {upf.user.firstName && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {`${upf.user.firstName} ${upf.user.lastName}`}\r\n
\r\n {upf.user.firstNameEn &&\r\n `${upf.user.firstNameEn} ${upf.user.lastNameEn}`}\r\n \r\n
\r\n }\r\n />\r\n \r\n {upf.user.lastLogin && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n อีเมล     :{' '}\r\n {upf.user.email}\r\n \r\n \r\n ตำแหน่ง: {upf.user.position}\r\n \r\n \r\n ส่วนงาน :{' '}\r\n {upf.user.department}\r\n \r\n {/* เข้าใช้ล่าสุด: {upf.user.lastLogin} */}\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 alert('Link to Profile Page');\r\n }}\r\n >\r\n \r\n \r\n \r\n Profile\r\n */}\r\n {\r\n handleLogout();\r\n handleClose(e);\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 )}\r\n
\r\n );\r\n}\r\n\r\nexport default InnerAppBar;\r\n","import React from 'react';\r\nimport {\r\n List,\r\n ListItem,\r\n ListItemIcon,\r\n ListItemText,\r\n Divider,\r\n Typography,\r\n} from '@material-ui/core';\r\n\r\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\r\nimport BusinessIcon from '@material-ui/icons/Business';\r\n\r\nimport { Link, NavLink, useLocation } from 'react-router-dom';\r\n\r\nimport { userProfiler, logger } from './../../utils/utils';\r\n\r\nimport {\r\n listMenuFrontOf,\r\n listMenuBackOf,\r\n listPermissionLevelFrontOf,\r\n listPermissionLevelBackOf,\r\n PATH_FRONTOF_MASTER,\r\n PATH_BACKOF_MASTER,\r\n} from './../../routers';\r\n\r\nfunction InnerSidebar({ isBackOffice, match }) {\r\n logger('InnerSidebar render');\r\n\r\n const userProfile = userProfiler.getFromLocal();\r\n logger({\r\n listMenuFrontOf,\r\n listMenuBackOf,\r\n listPermissionLevelFrontOf,\r\n listPermissionLevelBackOf,\r\n userProfile,\r\n });\r\n let fontOfCount = 0;\r\n let backOfCount = 0;\r\n\r\n // // Test menu of user.permission.level and extend to full permission\r\n // userProfile.permission.level = [...userProfile.permission.level, 1,2,3,8, 9]\r\n\r\n return (\r\n
\r\n {!isBackOffice && (\r\n \r\n {listMenuFrontOf.map((item, index) => {\r\n if (\r\n userProfile.permission.level.some(\r\n (elem) => item.permissionLevel.indexOf(elem) > -1\r\n )\r\n ) {\r\n fontOfCount++;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n })}\r\n {fontOfCount > 0 && }\r\n {/* Additinal Link */}\r\n {/* https://stackoverflow.com/questions/15514907/determining-whether-one-array-contains-the-contents-of-another-array-in-javascri/15514975 */}\r\n {userProfile.permission.level.some(\r\n (elem) => listPermissionLevelBackOf.indexOf(elem) > -1\r\n ) && (\r\n \r\n [8, 9].indexOf(upl) > -1\r\n )\r\n ? `${PATH_BACKOF_MASTER}/setting/permission`\r\n : PATH_BACKOF_MASTER\r\n }\r\n button\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 {isBackOffice && (\r\n \r\n {listMenuBackOf.map((item, index) => {\r\n if (\r\n userProfile.permission.level.some(\r\n (elem) => item.permissionLevel.indexOf(elem) > -1\r\n )\r\n ) {\r\n backOfCount++;\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n })}\r\n {backOfCount > 0 && }\r\n {/* Additinal Link */}\r\n {userProfile.permission.level.some(\r\n (elem) => listPermissionLevelFrontOf.indexOf(elem) > -1\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 );\r\n}\r\n\r\nexport default React.memo(InnerSidebar);\r\n","/**\r\n * Style of surfaces component cat. consists of\r\n * - appBarStyles,\r\n * - toolbarStyles,\r\n * - paperStyles,\r\n * - cardStyles,\r\n * and etc.\r\n */\r\n\r\n/**\r\n * toolbarStyles for AppBar position=fixed\r\n * @param {*} theme\r\n */\r\nexport const appBarStyles = (theme) => {\r\n // Default drawer width\r\n const drawerWidth = '240';\r\n\r\n // themeMixinsToolbar is the poperty of theme toolbar\r\n const themeMixinsToolbar = { ...theme.mixins.toolbar };\r\n\r\n // Re-Create themeMixinsToolbar with mixinsToolbar\r\n // Let simplify to apply to toolbarStyle.\r\n const mixinsToolbar = {\r\n minHeight: themeMixinsToolbar.minHeight,\r\n upxs: {\r\n minHeight:\r\n themeMixinsToolbar[\r\n `${theme.breakpoints.up('xs')} and (orientation: landscape)`\r\n ].minHeight,\r\n },\r\n upsm: {\r\n minHeight: themeMixinsToolbar[theme.breakpoints.up('sm')].minHeight,\r\n },\r\n };\r\n const toolbarStyleOffsetHeight = 25;\r\n\r\n // Toolbar Style\r\n const toolbarStyle = {\r\n padding: theme.spacing(1),\r\n minHeight: mixinsToolbar.minHeight - toolbarStyleOffsetHeight,\r\n [`${theme.breakpoints.up('xs')} and (orientation: landscape)`]: {\r\n minHeight: mixinsToolbar.upxs.minHeight - toolbarStyleOffsetHeight,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n minHeight: mixinsToolbar.upsm.minHeight - toolbarStyleOffsetHeight,\r\n },\r\n };\r\n\r\n //Return appToolBarStyle\r\n return {\r\n //Set top appToolBar (Let appToolBar is under the window + AbbBar)\r\n appToolBarStyle: {\r\n flexGrow: 1,\r\n top: mixinsToolbar.minHeight,\r\n [`${theme.breakpoints.up('xs')} and (orientation: landscape)`]: {\r\n top: mixinsToolbar.upxs.minHeight,\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n top: mixinsToolbar.upsm.minHeight,\r\n },\r\n color: '#000000',\r\n background: '#FFFFFF',\r\n borderBottom: '1px solid #e0e0e0',\r\n // boxShadow: 'none',\r\n },\r\n // toolbarStyle\r\n toolbarStyle,\r\n // necessary for content to be below AppToolBar\r\n toolbarOffsetStyle: toolbarStyle,\r\n };\r\n};\r\n","import React from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nconst HtmlTooltip = withStyles((theme) => ({\r\n tooltip: {\r\n backgroundColor: '#f5f5f9',\r\n color: 'rgba(0, 0, 0, 0.87)',\r\n maxWidth: 300,\r\n fontSize: theme.typography.pxToRem(12),\r\n border: '1px solid #dadde9',\r\n },\r\n}))(Tooltip);\r\n\r\nconst LFTooltip = withStyles((theme) => ({\r\n tooltip: {\r\n fontSize: theme.typography.pxToRem(12),\r\n },\r\n}))(Tooltip);\r\n\r\nexport { LFTooltip, HtmlTooltip };\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Breadcrumbs, Tooltip, Typography, Box } from '@material-ui/core';\r\n\r\nimport { LFTooltip } from './../Tooltips';\r\n\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst BreadcrumbsList = ({ breadcrumbs }) => {\r\n return (\r\n \r\n {breadcrumbs &&\r\n breadcrumbs.map((item, index) => {\r\n let path = 'path' in item ? (item.path ? item.path : null) : null;\r\n let title = 'title' in item ? (item.title ? item.title : null) : null;\r\n let bcElement = null;\r\n if (index !== breadcrumbs.length - 1) {\r\n bcElement = (\r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n );\r\n } else if (title) {\r\n bcElement = (\r\n \r\n {title} \r\n \r\n );\r\n }\r\n return bcElement;\r\n })}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * DatTable's propTypes\r\n */\r\nBreadcrumbsList.propTypes = {\r\n breadcrumbs: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n};\r\n\r\nexport default React.memo(BreadcrumbsList);\r\n","import React, { useEffect } from 'react';\r\nimport clsx from 'clsx';\r\n\r\n// import material-ui core styles & color\r\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\r\n\r\n// import material-ui core components\r\n\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport Box from '@material-ui/core/Box';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\n\r\n// import ThemeContext\r\nimport { useMuiThemeContext } from './../../contexts/ThemeContext';\r\n\r\n// import material-ui icons\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\r\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\r\nimport AppsIcon from '@material-ui/icons/Apps';\r\n\r\nimport { useRouteMatch } from 'react-router-dom';\r\n\r\nimport { base64, logger } from './../../utils/utils';\r\n\r\n// Depentdency for Specific Custom Component in MaterLayout (Ex InnerAppBar, InnerSidebar, BreadcrumbsList)\r\n\r\n// import NestedAppBar\r\nimport InnerAppBar from './InnerAppBar';\r\n\r\n// import InnerSidebar (InnerSidebar consist of menu / another thing in sidebar-left)\r\nimport InnerSidebar from './InnerSidebar';\r\n\r\n// import sufaceStyle\r\nimport { appBarStyles } from './../../styles/globalStyles/surfaceStyles';\r\n\r\nimport { drawer } from './../../constants';\r\n\r\n// import routers\r\nimport {\r\n listRoutFrontOf,\r\n listRoutBackOf,\r\n PATH_BACKOF_MASTER,\r\n} from './../../routers';\r\n\r\n// import BreadcrumbsList\r\nimport BreadcrumbsList from './../fragments/BreadcrumbsList';\r\n\r\n/**\r\n * MasterLayout\r\n *\r\n * Compoentnt Dependency\r\n * - Drawer \"persistent both sides\" adapted from material-ui drawer\r\n *\r\n * Custom log\r\n * 1 Adapting \"persistent right\" drawer to main drawer of app\r\n * 2 Custom some class of \"persistent right\" with class of \"clipped\" (Upder appBar)\r\n * 3 Update some class & valiable name with *Right suffix, ex. handleDrawerOpen to handleDrawerRightOpen\r\n * 4 Combile \"persistent\" (default/left drawer) and update, content, contentShift class and create contentLeftShiftMargin, contentLeftRightMargin class\r\n * 5 Change name to MasterLayout and add props. ex. title, color and etc.\r\n * 6 Add appToolBar (Secondary AppBar) consist of BreadcrumbsList\r\n * 7 Disabled content transition\r\n */\r\n\r\nconst drawerWidth = drawer.width;\r\nconst drawerRightWidth = drawer.rightWidth;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n display: 'flex',\r\n },\r\n appBar: {\r\n // Custom \"persistent right\" class appBar by clipped zIndex prop.\r\n zIndex: theme.zIndex.drawer + 1,\r\n transition: theme.transitions.create(['margin', 'width'], {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n },\r\n appBarShift: {\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n transition: theme.transitions.create(['margin', 'width'], {\r\n easing: theme.transitions.easing.easeOut,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n marginRight: drawerWidth,\r\n },\r\n title: {\r\n display: 'flex',\r\n flexGrow: 1,\r\n alignItems: 'center',\r\n },\r\n\r\n // \"persistent\" (default, left) menuButton class\r\n menuButton: {\r\n marginRight: theme.spacing(1),\r\n },\r\n menuButtonRight: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n\r\n hide: {\r\n display: 'none',\r\n },\r\n\r\n // \"persistent\" (default, left) drawer class\r\n drawer: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n },\r\n drawerPaper: {\r\n width: drawerWidth,\r\n },\r\n\r\n drawerRight: {\r\n width: drawerRightWidth,\r\n flexShrink: 0,\r\n },\r\n drawerRightPaper: {\r\n width: drawerRightWidth,\r\n },\r\n\r\n drawerHeader: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n justifyContent: 'flex-end',\r\n },\r\n\r\n drawerHeaderRight: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: theme.spacing(0, 1),\r\n // necessary for content to be below app bar\r\n ...theme.mixins.toolbar,\r\n justifyContent: 'flex-start',\r\n },\r\n\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(0),\r\n // * Disabled - Original content transition \"leavingScreen\" below\r\n // transition: theme.transitions.create(\"margin\", {\r\n // easing: theme.transitions.easing.sharp,\r\n // duration: theme.transitions.duration.leavingScreen,\r\n // }),\r\n },\r\n\r\n contentMarginLeft: {\r\n marginLeft: -drawerWidth,\r\n },\r\n\r\n contentMarginRight: {\r\n marginRight: -drawerRightWidth,\r\n },\r\n\r\n contentShift: {\r\n // * Disabled - Original contentShift transition \"enteringScreen\" below\r\n // transition: theme.transitions.create(\"margin\", {\r\n // easing: theme.transitions.easing.easeOut,\r\n // duration: theme.transitions.duration.enteringScreen,\r\n // }),\r\n // // Original contentShift, Custom to class contentLeftShiftMargin\r\n // marginRight: 0,\r\n },\r\n\r\n contentLeftShiftMargin: {\r\n // If breakpoints > sm contentLeftShiftMargin = 0\r\n [theme.breakpoints.up('sm')]: {\r\n marginLeft: 0,\r\n },\r\n },\r\n\r\n contentRightShiftMargin: {\r\n [theme.breakpoints.up('sm')]: {\r\n marginRight: 0,\r\n },\r\n },\r\n\r\n // Style of Secondary AppBar\r\n // Use appBarStyles (consist of appToolBarStyle and etc)\r\n ...appBarStyles(theme),\r\n appToolBarShift: {\r\n [theme.breakpoints.up('sm')]: {\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n // * Disabled - Original appToolBarShift transition \"enteringScreen\" below\r\n // transition: theme.transitions.create([\"margin\", \"width\"], {\r\n // easing: theme.transitions.easing.easeOut,\r\n // duration: theme.transitions.duration.enteringScreen,\r\n // }),\r\n marginLeft: drawerWidth,\r\n },\r\n },\r\n appToolBarRightShift: {\r\n [theme.breakpoints.up('sm')]: {\r\n width: `calc(100% - ${drawerRightWidth}px)`,\r\n // * Disabled - Original appToolBarRightShift transition \"enteringScreen\" below\r\n // transition: theme.transitions.create([\"margin\", \"width\"], {\r\n // easing: theme.transitions.easing.easeOut,\r\n // duration: theme.transitions.duration.enteringScreen,\r\n // }),\r\n marginRight: drawerRightWidth,\r\n },\r\n },\r\n appToolBarLeftRightShift: {\r\n width: `calc(100% - ${drawerWidth + drawerRightWidth}px)`,\r\n // * Disabled - Original appToolBarLeftRightShift transition \"enteringScreen\" below\r\n // transition: theme.transitions.create([\"margin\", \"width\"], {\r\n // easing: theme.transitions.easing.easeOut,\r\n // duration: theme.transitions.duration.enteringScreen,\r\n // }),\r\n marginLeft: drawerWidth,\r\n marginRight: drawerRightWidth,\r\n },\r\n\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer - 1,\r\n color: '#fff',\r\n },\r\n}));\r\n\r\n/**\r\n * MasterLayout\r\n * @param {object} props\r\n * @param {string} id id of MasterLayout (default: 'id')\r\n * @param {string} muiTheme 'frontOffice' | 'backOffice' (default: 'fontOffice')\r\n */\r\nfunction MasterLayout({\r\n id = 'id',\r\n isAuthen = false,\r\n muiTheme,\r\n sidebar = false,\r\n sidebarRight = false,\r\n children,\r\n}) {\r\n logger(`MasterLayout ${id} render`);\r\n\r\n const classes = useStyles();\r\n const match = useRouteMatch();\r\n const theme = useTheme();\r\n const setMuiTheme = useMuiThemeContext();\r\n\r\n const [openDrawer, setOpenDrawer] = React.useState(true);\r\n const [openDrawerRight, setOpenDrawerRight] = React.useState(true);\r\n const isMobileSide = useMediaQuery('(max-width: 600px)');\r\n\r\n // handleDrawer (default, left-side)\r\n const handleDrawerOpen = () => {\r\n setOpenDrawer(true);\r\n };\r\n const handleDrawerClose = () => {\r\n setOpenDrawer(false);\r\n };\r\n\r\n // handleDrawer right\r\n const handleDrawerRightOpen = () => {\r\n setOpenDrawerRight(true);\r\n };\r\n const handleDrawerRightClose = () => {\r\n setOpenDrawerRight(false);\r\n };\r\n\r\n // Check muiTheme\r\n useEffect(() => {\r\n setMuiTheme(muiTheme);\r\n }, [muiTheme]);\r\n\r\n // Check mobile-side (isMobileSide)\r\n useEffect(() => {\r\n if (!isMobileSide) {\r\n if (sidebar) {\r\n handleDrawerRightClose();\r\n }\r\n if (sidebarRight) {\r\n handleDrawerRightOpen();\r\n }\r\n } else {\r\n handleDrawerClose();\r\n handleDrawerRightClose();\r\n }\r\n }, [sidebar, sidebarRight, isMobileSide]);\r\n\r\n // InnerAppBar props\r\n const breadcrumbs = [...listRoutFrontOf, ...listRoutBackOf].filter((rout) =>\r\n match.path.includes(rout.path)\r\n )\r\n .map((rout)=>{\r\n if(rout.path.indexOf(':sid')!=-1) {\r\n rout.title = base64.decode(match.params.sid)\r\n }\r\n return rout;\r\n });\r\n\r\n // InnerAppBar - InnerSidebar props argument;\r\n const isBackOffice = React.useMemo(\r\n () => match.path.startsWith(PATH_BACKOF_MASTER),\r\n [match.path]\r\n );\r\n\r\n // // Log check component render, prop and state of component,\r\n // logger(`MasterLayout ${id} render`, {\r\n // isMobileSide,\r\n // sidebar,\r\n // sidebarRight,\r\n // openDrawer,\r\n // openDrawerRight,\r\n // });\r\n\r\n return (\r\n
\r\n \r\n\r\n {/* @Appbar */}\r\n \r\n {/* @Toolbar of AppBar */}\r\n \r\n {/* @Sidebar-Left MenuIcon */}\r\n {sidebar && (\r\n \r\n \r\n \r\n )}\r\n\r\n {/* Put inner-AppBar component/code down here */}\r\n\r\n {/* @InnerAppBar */}\r\n \r\n\r\n {/* Sidebar-Left MenuIcon */}\r\n {sidebarRight && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {/*AppToolBar (Secondary AppBar) */}\r\n {isAuthen && (\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 \r\n )}\r\n\r\n {/* @Sidebar-Left Drawer */}\r\n {sidebar && (\r\n \r\n \r\n
\r\n \r\n {theme.direction === 'ltr' ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n
\r\n \r\n\r\n {/* Put inner-Sidebar component/code down here */}\r\n \r\n \r\n )}\r\n\r\n {/* @Main Content */}\r\n\r\n \r\n
\r\n
\r\n {/* {JSON.stringify(matches)} */}\r\n {children}\r\n \r\n \r\n\r\n {/* @Sidebar-Right Drawer */}\r\n {sidebarRight && (\r\n \r\n \r\n
\r\n {/* Original \"persistant drawer rigth\" Chevron*Icon */}\r\n {/* \r\n {theme.direction === \"rtl\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n */}\r\n\r\n {/* Custom Chevron*Icon for \"clipped under the app bar\" */}\r\n {\r\n if (!openDrawerRight) {\r\n handleDrawerRightOpen();\r\n } else {\r\n handleDrawerRightClose();\r\n }\r\n }}\r\n >\r\n {!openDrawerRight && }\r\n {openDrawerRight && }\r\n \r\n
\r\n \r\n {sidebarRight}\r\n \r\n )}\r\n
\r\n );\r\n}\r\n\r\nexport default React.memo(MasterLayout);\r\n","import axios from 'axios';\r\nimport join from 'url-join';\r\nimport {\r\n server,\r\n sysURL,\r\n NOT_CONNECT_NETWORK,\r\n NETWORK_CONNECTION_MESSAGE,\r\n} from './../constants';\r\nimport { JSON2HTML } from './../utils/utils';\r\n\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useDialog } from './../contexts/DialogContext';\r\n\r\n/**==============================================================================================================\r\n * Axios & built-in accessToken for request-api\r\n * ==============================================================================================================\r\n */\r\nconst axioses = axios.create();\r\n// Local constant\r\n\r\nconst ATHEN_FALSE_TITLE = 'New data authorization has error occurred!';\r\nconst ATHEN_EXCEPTION = 'Auth Exception';\r\n\r\nconst isAbsoluteURLRegex = /^(?:\\w+:)\\/\\//;\r\n\r\n// FIXME: Axios cancelled requests can't be restarted (https://github.com/axios/axios/issues/1330)\r\n// TODO : https://stackoverflow.com/questions/53475045/axios-cancelled-requests-cant-be-restarted\r\n// FIXED: Axios cancelled requests can't be restarted (https://github.com/axios/axios#cancellation)\r\n// OTHER INFO: https://github.com/axios/axios/issues/1330\r\n\r\n// Axioses propoties that assigned by axios\r\naxioses.CancelToken = axios.CancelToken;\r\naxioses.isCancel = axios.isCancel;\r\naxioses.Cancel = axios.Cancel;\r\n\r\n// How to axios cancellation https://github.com/axios/axios#cancellation\r\nlet axios_cancelToken = null;\r\nlet axios_cancelTokenAgent;\r\nlet axios_isCancelTokenNew = true;\r\n\r\naxioses.interceptors.request.use(\r\n async (config) => {\r\n // Do something before request is sent (axios ofc)\r\n\r\n // Create axios_cancelToken\r\n if (axios_isCancelTokenNew) {\r\n axios_cancelToken = new axioses.CancelToken(function executor(c) {\r\n axios_cancelTokenAgent = c;\r\n });\r\n axios_isCancelTokenNew = false;\r\n }\r\n\r\n // Check url path if it is relative path then join after api-domian (urlApi)\r\n if (!isAbsoluteURLRegex.test(config.url)) {\r\n config.url = join(sysURL.api, config.url);\r\n }\r\n const accessToken = localStorage.getItem(server.ACCESS_TOKEN_KEY);\r\n config.headers = {\r\n Authorization: accessToken,\r\n };\r\n config.cancelToken = axios_cancelToken;\r\n return config;\r\n },\r\n (error) => {\r\n // Do something with request error\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Add a response interceptor (axios ofc(officeial))\r\naxioses.interceptors.response.use(\r\n (response) => {\r\n // Any status code that lie within the range of 2xx cause this function to trigger (axios ofc)\r\n // Do something with response data\r\n if (response.data.status === false) {\r\n return Promise.reject({\r\n response,\r\n message: response.data.message,\r\n name: 'Error',\r\n });\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n // Any status codes that falls outside the range of 2xx cause this function to trigger (axios ofc)\r\n // Do something with response error'\r\n\r\n if (axioses.isCancel(error)) {\r\n console.error(`Request canceled because, ${error}`);\r\n return Promise.reject(error);\r\n } else if (!error.response) {\r\n return Promise.reject({\r\n message: `${NETWORK_CONNECTION_MESSAGE} ${error.message}`,\r\n name: NOT_CONNECT_NETWORK,\r\n });\r\n }\r\n\r\n if (error.response.status === 401) {\r\n try {\r\n // let n = null;\r\n // let s = n.toString();\r\n // Prease use pure axios for urlAccessToken for fiexed error from header authorization of axios\r\n let respAccessToken = await axios.get(sysURL.accessToken);\r\n let { data } = respAccessToken;\r\n if (data.status === true) {\r\n // jsSnackbar(\"Data authorized\");\r\n localStorage.setItem(server.ACCESS_TOKEN_KEY, data.tokenAccess);\r\n return axioses.request(error.config);\r\n } else {\r\n throw new Error(`${ATHEN_FALSE_TITLE}, Message: ${data.message}`);\r\n }\r\n } catch (catchError) {\r\n return Promise.reject({\r\n message: catchError.message,\r\n name: ATHEN_EXCEPTION,\r\n });\r\n }\r\n }\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n/**\r\n * Hook handler handleClientError\r\n * Dependencies: useDialog, useHistory\r\n * @return handleClientError(error, infoPath), Show dialog error messages or redirect to app-info page\r\n */\r\nexport function useHandleClientError() {\r\n const [openDialog /*, closeDialog*/] = useDialog();\r\n const history = useHistory();\r\n /**\r\n *\r\n * @param {object} error, object error messages\r\n * @param {string} infoPath, route path to display messages-json-string\r\n */\r\n const handleClientError = (error = {}, infoPath = '/info') => {\r\n // Assign error2JSON with JSON error messages from (fnc) error.toJSON (toJSON is the feuture from axios )\r\n // (if (fnc) toJSON does not exist in error, let create JSON with error messages and prop.name = \"Error from Exception\")\r\n let error2JSON = {\r\n message: error.message,\r\n name: error.name,\r\n 'process name': (() => {\r\n try {\r\n if (error.response.data.process) {\r\n return error.response.data.process;\r\n }\r\n } catch (error) {}\r\n return 'N/A';\r\n })(),\r\n };\r\n\r\n if (!axioses.isCancel(error)) {\r\n // Cancel another request by axios_cancelTokenAgent\r\n if (typeof axios_cancelTokenAgent === 'function') {\r\n axios_cancelTokenAgent(`${error2JSON.message}`);\r\n }\r\n\r\n // localStorage.setItem(server.INFO_KEY, JSON.stringify(error2JSON));\r\n\r\n (() => {\r\n if (error2JSON.name === ATHEN_EXCEPTION) {\r\n console.error(ATHEN_EXCEPTION, error2JSON.message);\r\n } else {\r\n return openDialog({\r\n id: 'clientErrorDialog',\r\n title: 'Error Occured',\r\n summary: error2JSON,\r\n detail: error.response\r\n ? error.response.data\r\n ? error.response.data\r\n : null\r\n : null,\r\n onClose: () => {\r\n axios_isCancelTokenNew = true;\r\n // // Check each status (code) when you set to redirect page after click close\r\n // if (error.hasOwnProperty('response')) {\r\n // let status = error.response.status;\r\n // switch (status) {\r\n // // cose 401 skiped because auto get new token_access when expire\r\n // case 401:\r\n // // history.push(infoPath);\r\n // break;\r\n // default:\r\n // history.push(infoPath);\r\n // }\r\n // // error from cancel or net work error\r\n // } else {\r\n // history.push(infoPath);\r\n // }\r\n },\r\n });\r\n }\r\n })();\r\n }\r\n };\r\n\r\n return handleClientError;\r\n}\r\n/**\r\n * export httpClient for external use request-api\r\n */\r\nexport const httpClient = axioses;\r\n\r\n/** ===============================================================================================================\r\n * Test mutableValue\r\n * ================================================================================================================\r\n */\r\nlet mutable_count = 1;\r\nexport const mutableCount = {\r\n run() {\r\n console.warn('Testing run mutableCount before ', { mutable_count });\r\n mutable_count++;\r\n },\r\n log() {\r\n console.warn('Testing run mutableCount after ', { mutable_count });\r\n },\r\n};\r\n","import { sysURL, server } from \"../constants\";\r\nimport axios from 'axios';\r\n\r\n\r\n/**\r\n * getInfoNoVersion(), call info after login\r\n * Method: get\r\n * @returns \r\n */\r\nexport function getInfoNoVersion() {\r\n return axios\r\n .get(`${sysURL.api}/info`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}","import { server } from '../constants';\r\nimport { httpClient } from '../utils/HttpClient';\r\n/**\r\n * user data\r\n * Create: 26/03/2021\r\n */\r\n\r\n/**\r\n * updateUser(), update hri-personal-data to user data\r\n * Method: POST\r\n * @returns\r\n */\r\nexport function updateUser() {\r\n return httpClient\r\n .post(`${server.USER_URL}/updateUser`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * userProfile(), get user profile and user permission\r\n * Method: GET\r\n * @returns\r\n */\r\nexport function userProfile() {\r\n return httpClient\r\n .get(`${server.USER_URL}/userProfile`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * mockGetList() get email of all user in the system (Adapt api searching Name or Email)\r\n * Version: Mock\r\n * @returns\r\n */\r\nexport function mockSearchEmails(email = '') {\r\n return httpClient\r\n .get(`${server.USER_URL}/searchName`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from '../utils/HttpClient';\r\n\r\n/*________________________\r\n * Permission Level Data \r\n *========================\r\n */\r\n\r\n/**\r\n * getListAllSetting()\r\n * @param {object} params\r\n * @param {object} params.lang Default: TH\r\n * @returns\r\n * Detail: Get all permission level except level 0 for setting page\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Master/PermissionLevel\r\n */\r\nexport function getListAllSetting(params = { lang: 'TH' }) {\r\n return httpClient\r\n .get(`${server.PERMISSION_LEVEL_URL}/getListAllSetting/${params.lang}`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n\r\n/*________________________\r\n * Permission Level Data form Admin\r\n *========================\r\n */\r\n\r\n/**\r\n * getListAllWithUserRight()\r\n * @param {object} params\r\n * @param {object} params.lang Default: TH\r\n * @returns\r\n * Detail: Get all permission level except level 0 for setting page\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Master/PermissionLevel\r\n */\r\n export function getListAllWithUserRight(params = { lang: 'TH' }) {\r\n return httpClient\r\n .get(`${server.PERMISSION_LEVEL_URL}/getListAllWithUserRight/${params.lang}`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from './../utils/HttpClient';\r\n\r\n// Category data model\r\n\r\n/**\r\n * getListAll(), getListAll category for reporter\r\n * Method: GET\r\n * @returns\r\n */\r\nexport function getListAll(params = { lang: 'TH' }) {\r\n return httpClient\r\n .get(`${server.CATEGORY_URL}/getListAll/${params.lang}`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * getList(), getList category by permission (for staff)\r\n * @param {object} params\r\n * @param {string} params.package base64 of props {lang, dateStart, dateEnd, category_id }\r\n * @returns\r\n * API Doc: muit-iDev/pdpa-im-api/-/wikis/Master/Category#getlist\r\n */\r\nexport function getList(params) {\r\n return httpClient\r\n .get(`${server.CATEGORY_URL}/getList`, { params })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from '../utils/HttpClient';\r\n\r\n/*________________________\r\n * Permission Group Data\r\n *========================\r\n */\r\n\r\n/**\r\n * getListByCategoryLevel()\r\n * @param {object} props.params\r\n * @param {object} props.params.package { category_id, level }\r\n * @returns\r\n * Detail: get List By Category and Level, *require category_id and level\r\n * Method: GET\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Master/PermissionLevel\r\n */\r\nexport function getListByCategoryLevel(params) {\r\n return httpClient\r\n .get(`${server.PERMISSION_GROUP_URL}/getListByCategoryLevel`, {\r\n params,\r\n })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from '../utils/HttpClient';\r\n\r\n/*______________\r\n * Label Data \r\n *==============\r\n */\r\n\r\n/**\r\n * getListAll()\r\n * @returns\r\n * Detail: get list all of label data\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Master/Label\r\n */\r\nexport function getListAll() {\r\n return httpClient\r\n .get(`${server.LABEL_URL}/getListAll`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}","import { server } from '../constants';\r\nimport { httpClient } from './../utils/HttpClient';\r\n\r\n// Dimension data model\r\n\r\n/**\r\n * getListAll(), get list all of dimension\r\n * Method: GET\r\n * @returns\r\n */\r\nexport function getListAll(params = { lang: 'TH' }) {\r\n return httpClient\r\n .get(`${server.ISSUE_URL}/getDimensionList/${params.lang}`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from '../utils/HttpClient';\r\n\r\n/*______________________\r\n * ProcessStatus Data \r\n *=====================\r\n */\r\n\r\n/**\r\n * getList()\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang, issue_id}\r\n * @returns\r\n * Detail: get process-status list by condition\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Master/ProcessStatus#getlist\r\n */\r\nexport function getList(params) {\r\n return httpClient\r\n .get(`${server.PROCESS_STATUS_URL}/getList`, { params })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * getListAll()\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang}\r\n * @returns\r\n * Detail: get all process-status all\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Master/ProcessStatus#getlistAll\r\n */\r\nexport function getListAll(params) {\r\n return httpClient\r\n .get(`${server.PROCESS_STATUS_URL}/getListAll`, { params })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from '../utils/HttpClient';\r\n\r\n/*________________________\r\n * IssueCommentType Data \r\n *========================\r\n */\r\n\r\n/**\r\n * getListAll()\r\n * @param {object} params\r\n * @param {string} params.lang Default: TH\r\n * @returns\r\n * Detail: Get list all of comment type\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Master/CommentType\r\n */\r\nexport function getListAll(params = { lang: 'EN' }) {\r\n return httpClient\r\n .get(`${server.ISSUE_URL}/getCommentTypeList/${params.lang}`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from '../utils/HttpClient';\r\n\r\n/*______________\r\n * File Data\r\n *==============\r\n */\r\n\r\n/**\r\n * save()\r\n *\r\n * Method: POST\r\n * Detail: insert issue file (image)\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/IssueFile\r\n */\r\nexport function save(data) {\r\n return httpClient\r\n .post(`${server.FILE_URL}/save`, data)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * thumbnail()\r\n * @param {object} props\r\n * @param {string} props.issue_id\r\n * @param {string} props.file_id\r\n * Method: get\r\n * Detail: get thumbnail file (image)\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/IssueFile#get-thumbnail-file\r\n */\r\nexport function thumbnail({ issue_id, file_id }) {\r\n return httpClient\r\n .get(`${server.FILE_URL}/thumbnail/${issue_id}/${file_id}`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * thumbnails()\r\n * @param {object} props\r\n * @param {string} props.issue_id\r\n * @param {array} props.files array of file_id\r\n * Method: get\r\n * Detail: get thumbnail file (image)\r\n * NOTE: extend from thumbnail()\r\n */\r\nexport async function thumbnails({ issue_id, files = [] }) {\r\n let contents = [];\r\n if (files.length) {\r\n for (let file_id of files) {\r\n const content = await thumbnail({ issue_id, file_id }).then(\r\n (data) => data\r\n );\r\n contents.push(content);\r\n }\r\n }\r\n return contents;\r\n}\r\n\r\n/**\r\n * thumbnail()\r\n * @param {object} props\r\n * @param {string} props.issue_id\r\n * @param {string} props.file_id\r\n * Method: get\r\n * Detail: get origin(al) file (image)\r\n * API Doc: /muit-iDev//pdpa-im-api/-/wikis/Transaction/IssueFile#get-origin-file\r\n */\r\nexport async function original({ issue_id, file_id }) {\r\n return httpClient\r\n .get(`${server.FILE_URL}/origin/${issue_id}/${file_id}`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from './../constants';\r\nimport { httpClient } from './../utils/HttpClient';\r\nimport { base64 } from './../utils/utils';\r\nimport * as file from './../data/file';\r\n\r\n/*______________\r\n * Issue Data\r\n *==============\r\n */\r\n\r\n/**\r\n * getCommentTypeList()\r\n * Detail: get status for access issue\r\n * @returns bool accessStatus\r\n */\r\nexport function getCommentTypeList(params) {\r\n return httpClient\r\n .get(`${server.ISSUE_URL}/getCommentTypeList`, { params })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * accessible()\r\n * Detail: get status for access issue\r\n * @returns bool accessStatus\r\n */\r\nexport function accessible(params) {\r\n return httpClient\r\n .get(`${server.ISSUE_URL}/access`, { params })\r\n .then((result) => {\r\n return result.data.content.accessStatus;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * createId()\r\n *\r\n * Detail: create new issue id to get id and short id\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Issue#create-issue-id\r\n */\r\nexport function createId() {\r\n return httpClient\r\n .get(`${server.ISSUE_URL}/createId`)\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n\r\n/**\r\n * updateProcessStatus()\r\n * @param {object} props\r\n * @param {object} props.issue_id\r\n * @param {string} props.status_id\r\n * Method: PUT\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Issue#set-issue-process-status\r\n * @returns\r\n */\r\nexport function updateProcessStatus({ issue_id, status_id }) {\r\n return httpClient\r\n .put(`${server.ISSUE_URL}/setProcessStatus`, { issue_id, status_id })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * addIssue() create issue of user lv0\r\n * @param {object} props\r\n * @param {object} props.issue issue data object\r\n * @param {string} props.logMode default: issueCreate\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Issue#insert-issue\r\n */\r\nexport function addIssue({ issue = {}, logMode = 'issueCreate' }) {\r\n return httpClient\r\n .post(`${server.ISSUE_URL}/save`, { issue, logMode })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * updateIssue() update issue\r\n * @param {object} props\r\n * @param {object} props.issue issue object\r\n * @param {array} props.labels labels object, default: undefined\r\n * @param {array} props.dimensions dimensions object, default: undefined\r\n * @param {string} props.logMode default: issueEdit\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Issue#insert-issue\r\n */\r\nexport function updateIssue({\r\n issue = {},\r\n labels = undefined,\r\n dimensions = undefined,\r\n logMode = 'issueEdit',\r\n}) {\r\n return httpClient\r\n .put(`${server.ISSUE_URL}/save`, { issue, labels, dimensions, logMode })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * forwardIssue() forward issue to new category / level / group\r\n * @param {*} props\r\n * @param {string} issue_id\r\n * @param {string} category_id,\r\n * @param {number} level,\r\n * @param {string} permissionGroupFilter = null,\r\n * @return\r\n */\r\nexport function forwardIssue({\r\n issue_id,\r\n category_id,\r\n level,\r\n permissionGroupFilter = null,\r\n}) {\r\n return httpClient\r\n .put(`${server.ISSUE_URL}/forward`, {\r\n issue_id,\r\n category_id,\r\n level,\r\n permissionGroupFilter,\r\n })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n *\r\n * @param {object} props\r\n * @param {string:GUID} props.issue_id\r\n * @param {number} props.vote 0 Unsatisfied | 1 Satisfied\r\n * @returns\r\n */\r\nexport function setVote({ issue_id = null, vote = null }) {\r\n if (issue_id && vote) {\r\n return httpClient\r\n .put(`${server.ISSUE_URL}/setVote`, {\r\n issue_id,\r\n vote,\r\n })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n } else {\r\n return () => {\r\n throw 'setVote issue id or vote id null';\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * getList() get list issue\r\n * @param {object} params\r\n * @param {string} params.package base64 of props {lang, dateStart, dateEnd, category_id }\r\n * @return\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Issue#getlist\r\n */\r\nexport function getList(params) {\r\n return httpClient\r\n .get(`${server.ISSUE_URL}/getList`, { params })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * getDetailCore() add options parameter,\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang, id}\r\n * @param {object} options\r\n * @param {object} options.includedThumbnail default: true\r\n * @param {object} options.includedViewStatus default: false (included readOnlyStatus)\r\n * @return\r\n * Detail: get detail issue\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Issue#getdetail\r\n */\r\n\r\nasync function getDetailCore(\r\n params,\r\n options /*legacy { includedThumbnail = true }*/\r\n) {\r\n options = options || {};\r\n options.includedThumbnail = options.includedThumbnail || true;\r\n options.includedViewStatus = options.includedViewStatus || false;\r\n try {\r\n let respIssue = await httpClient.get(`${server.ISSUE_URL}/getDetail`, {\r\n params,\r\n });\r\n let issue = respIssue.data.content;\r\n let issue_id = issue.issues.id;\r\n\r\n // include thumbnail\r\n if (options.includedThumbnail) {\r\n let files = issue.issues.issueFiles\r\n ? issue.issues.issueFiles.split(',')\r\n : [];\r\n let thumbnails = await file.thumbnails({ issue_id, files });\r\n issue.issues.thumbnails = thumbnails;\r\n }\r\n\r\n // extraForStaff if get detail in mode staff we shall add veiwStatus automatic\r\n if (options.includedViewStatus) {\r\n let lang = 'TH';\r\n let dateStart = issue.issues.createDate.substr(0, 10);\r\n let dateEnd = dateStart;\r\n let category_id = issue.issues.category_id;\r\n let lists = await getList({\r\n package: base64.encodeObj({\r\n lang,\r\n mode: server.REQ_PARAM_MODE_STAFF,\r\n dateStart,\r\n dateEnd,\r\n category_id,\r\n }),\r\n });\r\n\r\n let thisIssueFromList = lists.find(\r\n (list) => list.issues.id === issue.issues.id\r\n );\r\n if (thisIssueFromList) {\r\n issue.viewStatus = thisIssueFromList.viewStatus;\r\n issue.readOnlyStatus = thisIssueFromList.readOnlyStatus;\r\n }\r\n }\r\n\r\n return issue;\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * getDetail() v2 add options parameter,\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang, id}\r\n * @param {object} options\r\n * @param {object} options.includedThumbnail default: true\r\n * @param {object} options.includedViewStatus default: false\r\n * @return\r\n * Detail: get detail issue\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Issue#getdetail\r\n */\r\nexport function getDetail(params, options) {\r\n return getDetailCore(params, options)\r\n .then((issue) => {\r\n return issue;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from '../utils/HttpClient';\r\nimport * as file from './../data/file';\r\n\r\n/*_____________________\r\n * IssueComment Data \r\n *=====================\r\n */\r\n\r\n/**\r\n * addIssueComment() create issue comment with add file is option\r\n * @param {object} props\r\n * @param {object} props.issue_id issue-id\r\n * @param {object} props.comment comment object\r\n * @param {string} props.logMode default: issueCommentCreate\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Issue#insert-comment\r\n */\r\nexport function addIssueComment({\r\n issue_id,\r\n comment,\r\n logMode = 'issueCommentCreate',\r\n}) {\r\n return httpClient\r\n .post(`${server.ISSUE_URL}/saveComment`, {\r\n issue: {\r\n id: issue_id,\r\n },\r\n comment,\r\n logMode,\r\n })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * updateIssueComment() update issue comment with add file is option by comment id\r\n * @param {object} props\r\n * @param {object} props.issue_id issue-id\r\n * @param {object} props.comment comment data object\r\n * @param {string} props.logMode default: issueCommentEdit\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Issue#insert-comment\r\n */\r\nexport function updateIssueComment({\r\n issue_id,\r\n comment = {},\r\n logMode = 'issueCommentEdit',\r\n}) {\r\n return httpClient\r\n .put(`${server.ISSUE_URL}/saveComment`, {\r\n issue: {\r\n id: issue_id,\r\n },\r\n comment,\r\n logMode,\r\n })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n// /**\r\n// * getList() get list issueComment v1\r\n// * @param {object} params\r\n// * @param {object} params.package base64 of props {lang, issue_id, orderByAcs = true }\r\n// * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/IssueComment\r\n// * @returns\r\n// */\r\n// export function getList(params) {\r\n// return httpClient\r\n// .get(`${server.ISSUE_COMMEMNT_URL}/getList`, { params })\r\n// .then((result) => {\r\n// console.log('comment, ', result);\r\n// return result.data.content;\r\n// })\r\n// .catch((error) => {\r\n// throw error;\r\n// });\r\n// }\r\n\r\n/**\r\n * getListCore() get list issueComment\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang, issue_id, orderByAcs = true }\r\n * @param {object} options\r\n * @param {object} options.includedThumbnail default: true\r\n * @returns\r\n */\r\nasync function getListCore(params, { includedThumbnail = true }) {\r\n try {\r\n let respComms = await httpClient.get(`${server.ISSUE_COMMEMNT_URL}/getList`, {\r\n params,\r\n });\r\n let comments = respComms.data.content;\r\n let customComments = [];\r\n if (includedThumbnail) {\r\n for (let comment of comments) {\r\n let issue_id = comment.IssueComments.issue_id;\r\n let files = comment.IssueComments.commentFiles\r\n ? comment.IssueComments.commentFiles.split(',')\r\n : [];\r\n let thumbnails = await file.thumbnails({ issue_id, files });\r\n comment.IssueComments.thumbnails = thumbnails;\r\n customComments.push(comment);\r\n }\r\n } else {\r\n customComments = comments;\r\n }\r\n return customComments;\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * getList() get list issueComment v2\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang, issue_id, orderByAcs = true }\r\n * @param {object} options\r\n * @param {object} options.includedThumbnail default: true\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/IssueComment\r\n * @returns\r\n */\r\nexport function getList(params, options = { includedThumbnail: true }) {\r\n return getListCore(params, options)\r\n .then((comments) => {\r\n return comments;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from './../utils/HttpClient';\r\n\r\n// lssue-log data model\r\n\r\n/**\r\n * getList() get list issueLog\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang, issue_id, mode, orderAsc }\r\n * @return\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/IssueLog\r\n */\r\nexport function getList(params) {\r\n return httpClient\r\n .get(`${server.ISSUE_LOG_URL}/getList`, { params })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","import { server } from '../constants';\r\nimport { httpClient } from '../utils/HttpClient';\r\n\r\n/*________________\r\n * Observer Data\r\n *================\r\n */\r\n\r\n/**\r\n * addObserver()\r\n * @returns\r\n * Detail: add new observer\r\n * Method: POST\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Observer#remove-observer\r\n */\r\nexport function addObserver({ issue_id = null, user_id = null }) {\r\n return httpClient\r\n .post(`${server.OBSERVER_URL}/add`, { issue_id, user_id })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * removeObserver()\r\n * @returns\r\n * Detail: remove observer\r\n * Method: DELETE\r\n * API Doc: /muit-iDev/pdpa-im-api/-/wikis/Transaction/Observer#remove-observer\r\n * axios deleting body: https://stackoverflow.com/questions/51069552/axios-delete-request-with-body-and-headers\r\n */\r\nexport function removeObserver(data = { issue_id: null, user_id: null }) {\r\n return httpClient\r\n .delete(`${server.OBSERVER_URL}/remove`, { data })\r\n .then((result) => {\r\n return result.data.content;\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n}\r\n","/**\r\n * PrepareUserInfomationPage\r\n * ========================================\r\n * Mo=dify\r\n * ========================================\r\n * #MDF20230214\r\n * issue:\r\n * DPO (Fac of Engineeing director) notice after logged-in then not redirect to the system!\r\n * check init menu of back office perm.. error!\r\n * initialMenuBackOfUser is undifined (initialMenuBackOfUser.path error)\r\n * couse of because permission.level.includes(menu.permissionLevel[0]) not found\r\n * - permission.level = [0, 3]\r\n * - menu.permissionLevel = [1,2,3]\r\n */\r\nimport React, { useState, useEffect } from 'react';\r\n\r\nimport clsx from 'clsx';\r\n\r\n// import axios\r\nimport axios from 'axios';\r\n\r\n// import material-ui core/style\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { red, green } from '@material-ui/core/colors';\r\nimport Box from '@material-ui/core/Box';\r\nimport Fab from '@material-ui/core/Fab';\r\nimport CheckIcon from '@material-ui/icons/Check';\r\nimport PersonOutlineSharpIcon from '@material-ui/icons/PersonOutlineSharp';\r\n\r\n// import constanst\r\nimport { server, sysURL } from '../../../constants';\r\n\r\n// import routers constants\r\nimport {\r\n routers,\r\n listMenuBackOf,\r\n listPermissionLevelBackOf,\r\n} from '../../../routers';\r\n\r\n// import uitils/utils\r\nimport { userProfiler, mergeArray, logger } from '../../../utils/utils';\r\nimport { useHandleClientError } from '../../../utils/HttpClient';\r\n\r\n// import info, users data\r\nimport { info, users } from '../../../data';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n },\r\n item: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n wrapper: {\r\n margin: theme.spacing(10, 10, 5, 10),\r\n position: 'relative',\r\n },\r\n buttonSuccess: {\r\n backgroundColor: green[500],\r\n '&:hover': {\r\n backgroundColor: green[700],\r\n },\r\n },\r\n buttonFail: {\r\n backgroundColor: red[500],\r\n '&:hover': {\r\n backgroundColor: red[700],\r\n },\r\n },\r\n fabProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: -8,\r\n left: -8,\r\n zIndex: 1,\r\n },\r\n buttonProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n}));\r\nconst PREPAREING = 'preparing';\r\nconst PREPAREING_SUCCESS = 'preparing success';\r\nconst PREPAREING_FAIL = 'preparing fail';\r\n// UpdateUserInformationPage() (Component)\r\n// Path:\r\nconst PrepareUserInformationPage = ({ history }) => {\r\n const classes = useStyles();\r\n const handleClientError = useHandleClientError();\r\n const UDUSER_CONTENT_ID = 'update-user-content';\r\n const [preparing, setPreparing] = useState(false);\r\n const [success, setSuccess] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!preparing) {\r\n setSuccess(null);\r\n setPreparing(true);\r\n }\r\n }, []);\r\n\r\n let status = null;\r\n if (preparing) {\r\n status = PREPAREING;\r\n } else {\r\n if (success) {\r\n status = PREPAREING_SUCCESS;\r\n }\r\n if (!success) {\r\n status = PREPAREING_FAIL;\r\n }\r\n }\r\n const buttonClassname = clsx({\r\n [classes.buttonSuccess]: success,\r\n });\r\n async function preparer() {\r\n try {\r\n // call api/info for change databaseContext connection from dev to current server\r\n await info.getInfoNoVersion();\r\n\r\n let respAccessToken = await axios.get(sysURL.accessToken);\r\n let { data } = respAccessToken;\r\n\r\n if (data.status === true) {\r\n // jsSnackbar(\"Data authorized\");\r\n\r\n // Set tokenAccess to localStorage\r\n localStorage.setItem(server.ACCESS_TOKEN_KEY, data.tokenAccess);\r\n\r\n // Updatep hri-personal data to user model.\r\n await users.updateUser();\r\n\r\n // Get user profile (consis of user, permission) and set to localStorage\r\n let { user, permission } = await users.userProfile();\r\n\r\n // ** Fixed full permission (Please remove before up to production), fo Test admin add [8, 9] to mergeArray parameter\r\n // permission.level = mergeArray([permission.level, []]);\r\n\r\n userProfiler.setToLocal({ user, permission });\r\n\r\n // State - success (& preparing flase)\r\n setSuccess(true);\r\n setPreparing(false);\r\n\r\n // Redirect to back/front office permission\r\n setTimeout(() => {\r\n // Check user has back office permission or not.\r\n if (\r\n permission.level.some(\r\n (elem) => listPermissionLevelBackOf.indexOf(elem) > -1\r\n )\r\n ) {\r\n // Condition = user has back office perm.\r\n\r\n /**\r\n * ======================================\r\n * check init menu of back office perm..\r\n * ======================================\r\n */\r\n\r\n // < Commented code bellow is the issue of #MDF20230214 >\r\n\r\n // let initialMenuBackOfUser = listMenuBackOf.find((menu) =>\r\n // permission.level.includes(menu.permissionLevel[0])\r\n // );\r\n\r\n // #MDF20230214 (Fix issue DPO notice after logged-in then not redirect to the system!)\r\n let initialMenuBackOfUser = listMenuBackOf.find((menuItem) =>\r\n permission.level.some(\r\n (levelItem) => menuItem.permissionLevel.indexOf(levelItem) > -1\r\n )\r\n );\r\n history.push(initialMenuBackOfUser.path);\r\n\r\n // Condition = user has only front office permission.\r\n } else {\r\n history.push(routers.frontOf.main.path);\r\n }\r\n }, 2000);\r\n } else {\r\n throw data;\r\n }\r\n } catch (error) {\r\n // If error then set state - success fail (& preparing flase)\r\n setSuccess(false);\r\n setPreparing(false);\r\n\r\n // Open dialog notice error\r\n handleClientError(error);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n preparer();\r\n }, []);\r\n\r\n // console.log({preparing})\r\n return (\r\n
\r\n \r\n
\r\n {status != PREPAREING_FAIL && (\r\n \r\n {status === PREPAREING && (\r\n \r\n )}\r\n {status === PREPAREING_SUCCESS && (\r\n \r\n )}\r\n \r\n )}\r\n {preparing && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n {status === PREPAREING &&
โปรดรอสักครู่...
}\r\n {status === PREPAREING_SUCCESS &&
เข้าสู่ระบบ
}\r\n {status === PREPAREING_FAIL && (\r\n
\r\n

\r\n เกิดข้อผิดพลาดในการเตรียมข้อมูลผู้ใช้งาน\r\n

\r\n

\r\n กลับสู่ Login เพื่อ ลองใหม่อีกครั้ง\r\n

\r\n
\r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default PrepareUserInformationPage;\r\n","import React, { useEffect } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport {\r\n Container,\r\n Grid,\r\n Box,\r\n Card,\r\n CardContent,\r\n CardMedia,\r\n CardActions,\r\n Typography,\r\n Button,\r\n} from '@material-ui/core';\r\n\r\n// import { useSelector, useDispatch } from \"react-redux\";\r\nimport Divider from '@material-ui/core/Divider';\r\n\r\nimport { Link } from 'react-router-dom';\r\n\r\n// import constants & router constants\r\nimport {\r\n SYSTEM_NAME_FRONTOF,\r\n SYSTEM_NAME_FRONTOF_TH,\r\n sysURL,\r\n} from './../../../constants';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n minHeight: '30vh',\r\n [theme.breakpoints.up('xs')]: {\r\n width: '100%',\r\n maxWidth: '100%',\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n width: 420,\r\n maxWidth: 420,\r\n marginTop: 20,\r\n },\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n },\r\n media: {\r\n height: 120,\r\n display: 'flex',\r\n verticalAlign: 'middle',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n imageSize: {\r\n height: 80,\r\n /*marginRight: theme.spacing(2),*/\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n cardContent: {\r\n margin: theme.spacing(2),\r\n },\r\n submit: {\r\n margin: theme.spacing(2, 0, 1),\r\n },\r\n}));\r\n\r\nexport default (props) => {\r\n const classes = useStyles();\r\n // const dispatch = useDispatch();\r\n // const loginReducer = useSelector(({ loginReducer }) => loginReducer);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n Sign in to
\r\n {SYSTEM_NAME_FRONTOF}\r\n
\r\n
\r\n \r\n Click ที่ปุ่ม SIGN IN เพื่อเข้าสู่
\r\n การลงชื่อเข้าใช้ {SYSTEM_NAME_FRONTOF_TH}\r\n \r\n \r\n {\r\n e.preventDefault();\r\n window.location = sysURL.adfsAuthen;\r\n }}\r\n >\r\n Sign In\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","import {\r\n // issue list fetch type:\r\n ISSUE_LIST_FETCH_PROCESSING,\r\n ISSUE_LIST_FETCH_SUCCESS,\r\n ISSUE_LIST_FETCH_FAILED,\r\n ISSUE_LIST_FETCH_CLEAR,\r\n\r\n // issue fetch type:\r\n ISSUE_FETCH_PROCESSING,\r\n ISSUE_FETCH_SUCCESS,\r\n ISSUE_FETCH_FAILED,\r\n ISSUE_FETCH_CLEAR,\r\n\r\n // issue update type:\r\n ISSUE_UPDATE_SUCCESS,\r\n ISSUE_UPDATE_FAILED,\r\n} from '../constants';\r\nimport { issue, observer } from '../data';\r\n\r\n/* ===============================================\r\n * IssueListReducer action consist type of\r\n * - ISSUE_LIST_*\r\n * =============================================== */\r\n\r\n// setStateIssueListFetchToProcessing()\r\nconst setStateIssueListFetchToProcessing = () => ({\r\n type: ISSUE_LIST_FETCH_PROCESSING,\r\n});\r\n\r\n/**\r\n * setStateIssueListFetchToToSuccess()\r\n * @param {*} payload\r\n */\r\nconst setStateIssueListFetchToToSuccess = (payload) => ({\r\n type: ISSUE_LIST_FETCH_SUCCESS,\r\n payload,\r\n});\r\n\r\n/**\r\n * setStateIssueListFetchToToFailed()\r\n */\r\nconst setStateIssueListFetchToToFailed = () => ({\r\n type: ISSUE_LIST_FETCH_FAILED,\r\n});\r\n\r\n/**\r\n * setStateIssueListFetchToToClear()\r\n */\r\nconst setStateIssueListFetchToToClear = () => ({\r\n type: ISSUE_LIST_FETCH_CLEAR,\r\n});\r\n\r\n/**\r\n * getList()\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {...}\r\n * @returns issue list\r\n */\r\nexport const getList = (params) => {\r\n return async (dispatch, getState) => {\r\n dispatch(setStateIssueListFetchToProcessing());\r\n try {\r\n let data = await issue.getList(params);\r\n dispatch(setStateIssueListFetchToToSuccess(data));\r\n } catch (error) {\r\n dispatch(setStateIssueListFetchToToFailed());\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * clearList()\r\n * @returns issue list\r\n */\r\n export const clearList = (params) => {\r\n return async (dispatch) => {\r\n await dispatch(setStateIssueListFetchToToClear());\r\n };\r\n};\r\n\r\n/* ===============================================\r\n * IssueReducer action consist type of\r\n * - ISSUE_FETCH\r\n * - ISSUE_UPDATE\r\n * =============================================== */\r\n\r\n// [ISSUE_FETCH]\r\n\r\n// setStateIssueFetchToProcessing()\r\nconst setStateIssueFetchToProcessing = () => ({\r\n type: ISSUE_FETCH_PROCESSING,\r\n});\r\n\r\n/**\r\n * setStateIssueFetchToToSuccess()\r\n * @param {*} payload\r\n */\r\nconst setStateIssueFetchToSuccess = (payload) => ({\r\n type: ISSUE_FETCH_SUCCESS,\r\n payload,\r\n});\r\n\r\n/**\r\n * setStateIssueFetchToToFailed()\r\n */\r\nconst setStateIssueFetchToFailed = () => ({\r\n type: ISSUE_FETCH_FAILED,\r\n});\r\n\r\n/**\r\n * setStateIssueFetchToToClear()\r\n */\r\nconst setStateIssueFetchToClear = () => ({\r\n type: ISSUE_FETCH_CLEAR,\r\n});\r\n\r\n/**\r\n * getIssueDetail\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang; 'TH', id: 'issue guid'}\r\n * @param {object} options {includedThumbnail, includedViewStatus }\r\n */\r\nexport const getIssueDetail = (params, options) => {\r\n return async (dispatch) => {\r\n dispatch(setStateIssueFetchToProcessing());\r\n try {\r\n let data = await issue.getDetail(params, options);\r\n dispatch(setStateIssueFetchToSuccess(data));\r\n } catch (error) {\r\n dispatch(setStateIssueFetchToFailed(error.message));\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n// [ISSUE_UPDATE]\r\nconst setStateIssueUpdateToSuccess = (payload) => ({\r\n type: ISSUE_UPDATE_SUCCESS,\r\n payload: payload,\r\n});\r\n\r\nconst setStateIssueUpdateToFailed = () => ({\r\n type: ISSUE_UPDATE_FAILED,\r\n});\r\n\r\n/**\r\n * updateIssue()\r\n * @param {object} props,\r\n * @param {object} props.data, issue data object\r\n * @param {string} props.logMode, issue mode (issueEdit | issueCreate)\r\n * @param {object} props.params, params: {package} base64 of props {lang; 'TH', id: 'issue guid'}\r\n * @param {object} props.options {includedThumbnail, includedViewStatus }\r\n */\r\n\r\nexport const updateIssue = ({ data = {}, params, options }) => {\r\n return async (dispatch) => {\r\n try {\r\n await issue.updateIssue({ issue: data, logMode: 'issueEdit' });\r\n\r\n let issueUpdated = await issue.getDetail(params, options);\r\n\r\n dispatch(setStateIssueUpdateToSuccess(issueUpdated));\r\n } catch (error) {\r\n dispatch(setStateIssueUpdateToFailed(error.message));\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * forwardIssue()\r\n * @param {object} props.data, forward-issue data object { issue_id, category_id, level, permissionGroupFilter = null}\r\n * @param {object} props.params, params: {package} base64 of props {lang; 'TH', id: 'issue guid'}\r\n * @param {object} props.options {includedThumbnail, includedViewStatus }\r\n * @returns\r\n */\r\nexport const forwardIssue = ({ data, params, options }) => {\r\n let { issue_id, category_id, level, permissionGroupFilter } = data;\r\n return async (dispatch) => {\r\n try {\r\n await issue.forwardIssue({\r\n issue_id,\r\n category_id,\r\n level,\r\n permissionGroupFilter,\r\n });\r\n\r\n let issueUpdated = await issue.getDetail(params, options);\r\n\r\n dispatch(setStateIssueUpdateToSuccess(issueUpdated));\r\n } catch (error) {\r\n dispatch(setStateIssueUpdateToFailed(error.message));\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * updateIssueLabel()\r\n * @param {object} props,\r\n * @param {object} props.id, issue id\r\n * @param {array} props.labels, labels\r\n * @param {object} props.params, params: {package} base64 of props {lang; 'TH', id: 'issue guid'}\r\n * @param {object} props.options {includedThumbnail, includedViewStatus }\r\n */\r\nexport const updateIssueLabel = ({ id, labels, params, options }) => {\r\n return async (dispatch) => {\r\n try {\r\n await issue.updateIssue({\r\n issue: {\r\n id,\r\n },\r\n labels,\r\n logMode: 'issueLabelSet',\r\n });\r\n\r\n let issueUpdated = await issue.getDetail(params, options);\r\n\r\n dispatch(setStateIssueUpdateToSuccess(issueUpdated));\r\n } catch (error) {\r\n dispatch(setStateIssueUpdateToFailed(error.message));\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * updateIssueDimension()\r\n * @param {object} props,\r\n * @param {object} props.id, issue id\r\n * @param {array} props.dimensions, dimensions\r\n * @param {object} props.params, params: {package} base64 of props {lang; 'TH', id: 'issue guid'}\r\n * @param {object} props.options {includedThumbnail, includedViewStatus }\r\n */\r\nexport const updateIssueDimension = ({ id, dimensions, params, options }) => {\r\n return async (dispatch) => {\r\n try {\r\n await issue.updateIssue({\r\n issue: {\r\n id,\r\n },\r\n dimensions,\r\n logMode: 'issueDimensionSet',\r\n });\r\n\r\n let issueUpdated = await issue.getDetail(params, options);\r\n\r\n dispatch(setStateIssueUpdateToSuccess(issueUpdated));\r\n } catch (error) {\r\n dispatch(setStateIssueUpdateToFailed(error.message));\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * updateProcessStatus()\r\n * @param {object} props,\r\n * @param {object} props.data, issue data object\r\n * @param {string} props.logMode, issue mode (issueEdit | issueCreate)\r\n * @param {object} props.params, {package}\r\n * @param {string} props.params.package base64 of props {lang; 'TH', id: 'issue guid'}\r\n * @param {object} props.options {includedThumbnail, includedViewStatus }\r\n */\r\nexport const updateProcessStatus = ({\r\n issue_id,\r\n status_id,\r\n params,\r\n options,\r\n}) => {\r\n return async (dispatch) => {\r\n try {\r\n await issue.updateProcessStatus({ issue_id, status_id });\r\n\r\n let issueUpdated = await issue.getDetail(params, options);\r\n\r\n dispatch(setStateIssueUpdateToSuccess(issueUpdated));\r\n } catch (error) {\r\n dispatch(setStateIssueUpdateToFailed(error.message));\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * addObserver()\r\n * @param {object} props,\r\n * @param {object} props.issue_id, issue id\r\n * @param {string} props.user_id, user id\r\n * @param {object} props.params, {package}\r\n * @param {string} props.params.package base64 of props {lang; 'TH', id: 'issue guid'}\r\n * @param {object} props.options {includedThumbnail, includedViewStatus }\r\n */\r\n export const addObserver = ({\r\n issue_id,\r\n user_id,\r\n params,\r\n options\r\n}) => {\r\n return async (dispatch) => {\r\n try {\r\n await observer.addObserver({ issue_id, user_id });\r\n\r\n let issueUpdated = await issue.getDetail(params, options);\r\n\r\n dispatch(setStateIssueUpdateToSuccess(issueUpdated));\r\n } catch (error) {\r\n dispatch(setStateIssueUpdateToFailed(error.message));\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * removeObserver()\r\n * @param {object} props,\r\n * @param {object} props.issue_id, issue id\r\n * @param {string} props.user_id, user id\r\n * @param {object} props.params, {package}\r\n * @param {string} props.params.package base64 of props {lang; 'TH', id: 'issue guid'}\r\n * @param {object} props.options {includedThumbnail, includedViewStatus }\r\n */\r\n export const removeObserver = ({\r\n issue_id,\r\n user_id,\r\n params,\r\n options\r\n}) => {\r\n return async (dispatch) => {\r\n try {\r\n await observer.removeObserver({ issue_id, user_id });\r\n\r\n let issueUpdated = await issue.getDetail(params, options);\r\n\r\n dispatch(setStateIssueUpdateToSuccess(issueUpdated));\r\n } catch (error) {\r\n dispatch(setStateIssueUpdateToFailed(error.message));\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n\r\n/**\r\n * setVote()\r\n * @param {object} props,\r\n * @param {object} props.issue_id, issue data object\r\n * @param {string} props.vote, vote value 0 | 1\r\n * @param {object} params, {package}\r\n * @param {string} params.package base64 of props {lang; 'TH', id: 'issue guid'}\r\n */\r\n export const setVote = ({\r\n issue_id,\r\n vote,\r\n params,\r\n}) => {\r\n return async (dispatch) => {\r\n try {\r\n await issue.setVote({ issue_id, vote });\r\n\r\n let issueUpdated = await issue.getDetail(params);\r\n\r\n dispatch(setStateIssueUpdateToSuccess(issueUpdated));\r\n } catch (error) {\r\n dispatch(setStateIssueUpdateToFailed(error.message));\r\n throw error;\r\n }\r\n };\r\n};\r\n","import {\r\n // issueComment fetch type:\r\n ISSUE_COMMENT_FETCH_PROCESSING,\r\n ISSUE_COMMENT_FETCH_SUCCESS,\r\n ISSUE_COMMENT_FETCH_FAILED,\r\n ISSUE_COMMENT_FETCH_CLEAR,\r\n\r\n // issue update type:\r\n ISSUE_COMMENT_UPDATE_SUCCESS,\r\n ISSUE_COMMENT_UPDATE_FAILED,\r\n} from '../constants';\r\nimport { issueComment } from '../data';\r\n\r\n/* ===============================================\r\n * Fetch issueComment\r\n * =============================================== */\r\n\r\n// setStateIssueCommentFetchToProcessing()\r\nconst setStateIssueCommentFetchToProcessing = () => ({\r\n type: ISSUE_COMMENT_FETCH_PROCESSING,\r\n});\r\n\r\n/**\r\n * setStateIssueCommentFetchToSuccess()\r\n * @param {*} payload\r\n */\r\nconst setStateIssueCommentFetchToSuccess = (payload) => ({\r\n type: ISSUE_COMMENT_FETCH_SUCCESS,\r\n payload,\r\n});\r\n\r\n/**\r\n * setStateIssueCommentFetchToFailed()\r\n * @param {} payload\r\n */\r\nconst setStateIssueCommentFetchToFailed = (payload) => ({\r\n type: ISSUE_COMMENT_FETCH_FAILED,\r\n});\r\n\r\n/**\r\n * setStateIssueCommentFetchToClear()\r\n */\r\nconst setStateIssueCommentFetchToClear = () => ({\r\n type: ISSUE_COMMENT_FETCH_CLEAR,\r\n});\r\n\r\n/**\r\n * getIssueComment()\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang, issue_id, orderByAcs = true }\r\n * @returns\r\n */\r\nexport const getIssueComment = (params) => {\r\n return async (dispatch, getState) => {\r\n dispatch(setStateIssueCommentFetchToProcessing());\r\n try {\r\n // issueComment (getList)\r\n let comments = await issueComment.getList(params, {\r\n includedThumbnail: false,\r\n });\r\n\r\n dispatch(\r\n setStateIssueCommentFetchToSuccess(comments)\r\n );\r\n } catch (error) {\r\n dispatch(setStateIssueCommentFetchToFailed());\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n/* ===============================================\r\n * Add/Update issueComment consist of\r\n * - add issueComment data\r\n * =============================================== */\r\nconst setStateIssueCommentUpdateToSuccess = (payload) => ({\r\n type: ISSUE_COMMENT_UPDATE_SUCCESS,\r\n payload: payload,\r\n});\r\n\r\nconst setStateIssueCommentUpdateToFailed = () => ({\r\n type: ISSUE_COMMENT_UPDATE_FAILED,\r\n});\r\n\r\n/**\r\n * addIssueComment()\r\n * @param {object} props,\r\n * @param {object} props.issue_id issue-id\r\n * @param {object} props.data comment data object\r\n * @param {object} params.params, params: {package} base64 of props {lang, issue_id, orderByAcs = true }\r\n * @return\r\n */\r\nexport const addIssueComment = ({ issue_id, data, params }) => {\r\n return async (dispatch, getState) => {\r\n try {\r\n // 1 Post insert IssueComment\r\n await issueComment.addIssueComment({\r\n issue_id,\r\n comment: data,\r\n logMode: 'issueCommentCreate',\r\n });\r\n\r\n // 2 Get comment updated \r\n let comments = await issueComment.getList(params, {\r\n includedThumbnail: false,\r\n });\r\n\r\n dispatch(\r\n setStateIssueCommentUpdateToSuccess(comments)\r\n );\r\n } catch (error) {\r\n dispatch(setStateIssueCommentUpdateToFailed());\r\n throw error;\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * updateIssueComment()\r\n * @param {object} data , comment data type obect\r\n * @returns\r\n */\r\nexport const updateIssueComment = ({ issue_id, data, params }) => {\r\n return async (dispatch, getState) => {\r\n try {\r\n // 1 Put update IssueComment\r\n await issueComment.updateIssueComment({\r\n issue_id,\r\n comment: data,\r\n logMode: 'issueCommentEdit',\r\n });\r\n\r\n // 2 Get comments updated \r\n let comments = await issueComment.getList(params, {\r\n includedThumbnail: false,\r\n });\r\n // 3 Then setStateIssueCommentUpdateToSuccess by comments\r\n dispatch(\r\n setStateIssueCommentUpdateToSuccess(comments)\r\n );\r\n } catch (error) {\r\n dispatch(setStateIssueCommentUpdateToFailed());\r\n throw error;\r\n }\r\n };\r\n};\r\n","import {\r\n // issueLog fetch type:\r\n ISSUE_LOG_FETCH_PROCESSING,\r\n ISSUE_LOG_FETCH_SUCCESS,\r\n ISSUE_LOG_FETCH_FAILED,\r\n ISSUE_LOG_FETCH_CLEAR,\r\n \r\n // issue update type:\r\n ISSUE_LOG_UPDATE_SUCCESS,\r\n ISSUE_LOG_UPDATE_FAILED,\r\n } from '../constants';\r\n import { issueLog } from '../data';\r\n \r\n /* ===============================================\r\n * Fetch issueLog\r\n * =============================================== */\r\n \r\n // setStateIssueLogFetchToProcessing()\r\n const setStateIssueLogFetchToProcessing = () => ({\r\n type: ISSUE_LOG_FETCH_PROCESSING,\r\n });\r\n \r\n /**\r\n * setStateIssueLogFetchToSuccess()\r\n * @param {*} payload\r\n */\r\n const setStateIssueLogFetchToSuccess = (payload) => ({\r\n type: ISSUE_LOG_FETCH_SUCCESS,\r\n payload,\r\n });\r\n \r\n /**\r\n * setStateIssueLogFetchToFailed()\r\n * @param {} payload\r\n */\r\n const setStateIssueLogFetchToFailed = (payload) => ({\r\n type: ISSUE_LOG_FETCH_FAILED,\r\n });\r\n \r\n /**\r\n * setStateIssueLogFetchToClear()\r\n */\r\n const setStateIssueLogFetchToClear = () => ({\r\n type: ISSUE_LOG_FETCH_CLEAR,\r\n });\r\n \r\n /**\r\n * getIssueLog()\r\n * @param {object} params\r\n * @param {object} params.package base64 of props {lang, issue_id, orderByAcs = true }\r\n * @returns\r\n */\r\n export const getIssueLog = (params) => {\r\n return async (dispatch, getState) => {\r\n dispatch(setStateIssueLogFetchToProcessing());\r\n try {\r\n // issueLogs (getList)\r\n let logs = await issueLog.getList(params);\r\n \r\n dispatch(\r\n setStateIssueLogFetchToSuccess(logs)\r\n );\r\n } catch (error) {\r\n dispatch(setStateIssueLogFetchToFailed());\r\n throw error;\r\n }\r\n };\r\n };\r\n \r\n /* ===============================================\r\n * Add/Update issueLog consist of\r\n * - update issueLog data (without isLoading, no setStateIssueLogFetchToProcessing)\r\n * =============================================== */\r\n const setStateIssueLogUpdateToSuccess = (payload) => ({\r\n type: ISSUE_LOG_UPDATE_SUCCESS,\r\n payload: payload,\r\n });\r\n \r\n const setStateIssueLogUpdateToFailed = () => ({\r\n type: ISSUE_LOG_UPDATE_FAILED,\r\n });\r\n\r\n /**\r\n * updateIssueLog()\r\n * @param {object} data , comment data type obect\r\n * @returns\r\n */\r\n export const updateIssueLog = (params) => {\r\n return async (dispatch, getState) => {\r\n try {\r\n // Get issueLogs updated \r\n let logs = await issueLog.getList(params);\r\n\r\n // Then setStateIssueLogUpdateToSuccess by logs\r\n dispatch(\r\n setStateIssueLogUpdateToSuccess(logs)\r\n );\r\n } catch (error) {\r\n dispatch(setStateIssueLogUpdateToFailed());\r\n throw error;\r\n }\r\n };\r\n };","import React, {\r\n useState,\r\n useEffect,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\r\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\r\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener';\r\nimport Grow from '@material-ui/core/Grow';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Popper from '@material-ui/core/Popper';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport MenuList from '@material-ui/core/MenuList';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nimport { logger } from './../../../utils/utils';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n popper: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n },\r\n circularProgress: {\r\n color: '#EFEFEF',\r\n marginRight: 4,\r\n marginLeft: -4,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n}));\r\n\r\nconst HtmlTooltip = withStyles((theme) => ({\r\n tooltip: {\r\n backgroundColor: '#f5f5f9',\r\n color: 'rgba(0, 0, 0, 0.87)',\r\n maxWidth: 220,\r\n fontSize: theme.typography.pxToRem(12),\r\n border: '1px solid #dadde9',\r\n },\r\n}))(Tooltip);\r\n\r\n/**\r\n * ButtonGroupSelectOptions\r\n * @param {object} prop\r\n * @param {string} value ,current value\r\n * @param {string} options ,options of ButtonGroup\r\n * @param {function} hiddenOption, hide or show option in bizOptionsBuz\r\n * @param {function} disabledOption\r\n * @param {function} onChange , callback fucntion after group is changed\r\n * @returns\r\n * Note: Adapt from https://material-ui.com/components/button-group/ (Split button)\r\n */\r\nconst ButtonGroupSelectOptions = forwardRef(\r\n (\r\n { value = '', options = [], hiddenOption, disabledOption, onChange },\r\n ref\r\n ) => {\r\n const classes = useStyles();\r\n logger('ButtonGroupSelectOptions render');\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const anchorRef = React.useRef(null);\r\n\r\n const [loading, setLoading] = useState(false);\r\n const [selectedIndex, setSelectedIndex] = React.useState(-1);\r\n\r\n const prevSelectedIndexRef = useRef(-1);\r\n\r\n useImperativeHandle(ref, () => ({\r\n undoSelected() {\r\n setSelectedIndex(prevSelectedIndexRef.current);\r\n },\r\n }));\r\n\r\n //Effect, Customize selectedIndex when have value prop incomming\r\n useEffect(() => {\r\n if (value) {\r\n let initialSelectIndex = options.findIndex((item) => item.id === value);\r\n setSelectedIndex(initialSelectIndex);\r\n prevSelectedIndexRef.current = initialSelectIndex;\r\n }\r\n }, [value]);\r\n\r\n let style = selectedIndex > -1 ? options[selectedIndex].style : {};\r\n\r\n const handleClick = () => {\r\n // console.info(`You clicked ${options[selectedIndex]}`);\r\n };\r\n\r\n const handleMenuItemClick = async (option, event, index) => {\r\n //Original & It's necessary\r\n setOpen(false);\r\n\r\n //Original & It's necessary\r\n setSelectedIndex(index);\r\n\r\n // Prop for enhance ButtonGroupStatus\r\n if (onChange) {\r\n !loading && setLoading(true);\r\n await onChange({\r\n id: option.id,\r\n name: option.name,\r\n description: option.description,\r\n });\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleToggle = () => {\r\n setOpen((prevOpen) => !prevOpen);\r\n };\r\n\r\n const handleClose = (event) => {\r\n if (anchorRef.current && anchorRef.current.contains(event.target)) {\r\n return;\r\n }\r\n\r\n setOpen(false);\r\n };\r\n\r\n return (\r\n \r\n {selectedIndex == -1 && (\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 {selectedIndex > -1 && (\r\n \r\n \r\n \r\n {loading && (\r\n \r\n )}{' '}\r\n {options[selectedIndex].name}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {({ TransitionProps, placement }) => (\r\n \r\n \r\n \r\n \r\n {options.map(\r\n (option, index) =>\r\n index !== selectedIndex && (\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);\r\n\r\nButtonGroupSelectOptions.propTypes = {};\r\n\r\nexport default React.memo(ButtonGroupSelectOptions);\r\n","import { useState, useEffect } from 'react';\r\nimport { logger, base64 } from './../utils/utils';\r\nimport {\r\n permissionLevel,\r\n category,\r\n permissionGroup,\r\n label,\r\n dimension,\r\n processStatus,\r\n issueCommentType,\r\n issue,\r\n} from './../data';\r\n\r\n/**\r\n * Hook caution about parameter of hook function\r\n * Don't implement-pass parameter of hook function with object\r\n * (Object, pass by refernce couse of useEffect depedencies by parameter is changed ref)\r\n */\r\n\r\n/**\r\n * =============================================\r\n * Hook IssueCommentType\r\n * ---------------------------------------------\r\n * MODEL: IssueCommentType\r\n * =============================================\r\n */\r\n\r\n/**\r\n * useIssueCommentTypeGetListAll()\r\n * Hook: Get all issue comment type\r\n * @param lang language of data, default: TH\r\n * @returns\r\n */\r\nexport function useIssueCommentTypeGetListAll(lang = 'TH') {\r\n // logger\r\n logger('useIssueCommentTypeGetListAll render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n issueCommentType\r\n .getListAll({ lang })\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error('use issue-comment-type-get-list-all error, ', error);\r\n });\r\n }, [lang]);\r\n return data;\r\n}\r\n\r\n/**\r\n * userIssueCreateId() , get issue id shortId and createDate\r\n * without dependency\r\n */\r\nexport function useIssueCreateId() {\r\n // logger\r\n logger('useIssueCreateId render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n issue\r\n .createId()\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error('use issue-create-id error, ', error);\r\n });\r\n }, []);\r\n return data;\r\n}\r\n\r\n/**\r\n * =============================================\r\n * Hook ProcessStatus\r\n * ---------------------------------------------\r\n * MODEL: ProcessStatus\r\n * =============================================\r\n */\r\n\r\n/**\r\n * useProcessStatusGetListAll()\r\n * Hook:Get list processStatus all\r\n * @param lang language of data, default: TH\r\n * @returns\r\n */\r\nexport function useProcessStatusGetListAll(lang = 'TH') {\r\n // logger\r\n logger('useProcessStatusGetListAll render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n const params = {\r\n package: base64.encodeObj({\r\n lang,\r\n }),\r\n };\r\n processStatus\r\n .getListAll(params)\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error('use process-status-get-list-all error, ', error);\r\n });\r\n }, [lang]);\r\n return data;\r\n}\r\n\r\n/**\r\n * useProcessStatusGetList() v2\r\n * Hook:Get list processStatus (with Business Status Logic)\r\n * @param {string} lang language of data, default: 'TH'\r\n * @param {string} issue_id issue identifier, default: ''\r\n * @returns\r\n */\r\nexport function useProcessStatusGetList(\r\n lang = 'TH',\r\n issue_id = '',\r\n processStatus_id = ''\r\n) {\r\n // logger\r\n logger('useProcessStatusGetList render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n const params = {\r\n package: base64.encodeObj({\r\n lang,\r\n issue_id,\r\n }),\r\n };\r\n processStatus\r\n .getList(params)\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error('use process-status-get-list error, ', error);\r\n });\r\n }, [lang, issue_id, processStatus_id]);\r\n return data;\r\n}\r\n\r\n/**\r\n * =============================================\r\n * Hook PermissionGroup\r\n * ---------------------------------------------\r\n * MODEL: PermissionGroup\r\n * =============================================\r\n */\r\n\r\nexport function usePermissionGroupGetListByCategoryLevel(\r\n category_id,\r\n level\r\n) {\r\n // logger\r\n logger('usePermissionGroupGetListByCategoryLevel render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n const params = {\r\n package: base64.encodeObj({\r\n category_id,\r\n level,\r\n }),\r\n };\r\n permissionGroup\r\n .getListByCategoryLevel(params)\r\n .then((result) => {\r\n // data must not null for setData\r\n if (result) setData(result);\r\n })\r\n .catch((error) => {\r\n console.error(\r\n 'use permission-group-get-list-by-category-level error, ',\r\n error\r\n );\r\n });\r\n }, [category_id, level]);\r\n return data;\r\n}\r\n\r\n/**\r\n * =============================================\r\n * Hook PermissionLevel\r\n * ---------------------------------------------\r\n * MODEL: PermissionLevel\r\n * =============================================\r\n */\r\n\r\n/**\r\n * usePermissionLevelGetListAllSetting(), Don't pass parameter of hook with object (object, pass by refernce couse of useEffect depedencies by parameter is changed ref)\r\n * Hook:Get all permission level except level 0 for setting page\r\n * @param {string} lang language of data, default: 'TH'\r\n * @returns\r\n */\r\nexport function usePermissionLevelGetListAllSetting(lang = 'TH') {\r\n const [data, setData] = useState([]);\r\n // logger\r\n logger('usePermissionLevelGetListAllSetting render');\r\n\r\n useEffect(() => {\r\n permissionLevel\r\n .getListAllSetting({ lang })\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error(\r\n 'use permission-level-get-list-all-setting error, ',\r\n error\r\n );\r\n });\r\n }, [lang]);\r\n return data;\r\n}\r\n\r\n/**\r\n * usePermissionLevelGetListAllSetting(), Don't pass parameter of hook with object (object, pass by refernce couse of useEffect depedencies by parameter is changed ref)\r\n * Hook:Get all permission level except level 0 for setting page\r\n * @param {string} lang language of data, default: 'TH'\r\n * @returns\r\n */\r\n export function usePermissionLevelGetListAllWithUserRight(lang = 'TH') {\r\n const [data, setData] = useState([]);\r\n // logger\r\n logger('usePermissionLevelGetListAllWithUserRight render');\r\n\r\n useEffect(() => {\r\n permissionLevel\r\n .getListAllWithUserRight({ lang })\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error(\r\n 'use permission-level-get-list-all-user-right error, ',\r\n error\r\n );\r\n });\r\n }, [lang]);\r\n return data;\r\n}\r\n\r\n\r\n/**\r\n * =============================================\r\n * Hook Category\r\n * ---------------------------------------------\r\n * MODEL: Category\r\n * =============================================\r\n */\r\n\r\n/**\r\n * useCategoryGetListAll\r\n * Hook: Category getListAll\r\n * @param {string} lang language of data, default: 'TH'\r\n * @returns\r\n */\r\nexport function useCategoryGetListAll(lang = 'TH') {\r\n // logger\r\n logger('useCategoryGetListAll render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n category\r\n .getListAll({ lang })\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error('use category-get-list-all error, ', error);\r\n });\r\n }, [lang]);\r\n return data;\r\n}\r\n\r\n/** useCategoryGetList() getList category by permission (for staff)\r\n * Hook: Category getList\r\n * @param {string} lang language of data, default: 'TH'\r\n * @returns\r\n */\r\nexport function useCategoryGetList(lang = 'TH') {\r\n // logger\r\n logger('useCategoryGetList render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n category\r\n .getList({\r\n package: base64.encodeObj({\r\n lang,\r\n }),\r\n })\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error('use category-get-list error, ', error);\r\n });\r\n }, [lang]);\r\n return data;\r\n}\r\n\r\n/** useCategoryGetListByMode()\r\n * Hook: Category getList\r\n * @param {string} lang language of data, default: 'TH'\r\n * @returns\r\n */\r\nexport function useCategoryGetListByMode(lang = 'TH', mode = 'reporter') {\r\n // logger\r\n logger('useCategoryGetListByMode render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n try {\r\n switch (mode) {\r\n case 'staff':\r\n category\r\n .getList({\r\n package: base64.encodeObj({\r\n lang,\r\n }),\r\n })\r\n .then((result) => {\r\n //map data nest category to flat category\r\n let categorys = result.map((item) => {\r\n let category = item.categorys.categorys;\r\n return {\r\n id: category.id,\r\n name: category.name,\r\n description: category.description,\r\n permissionLevel: item.permissionLevel,\r\n };\r\n });\r\n setData(categorys);\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n break;\r\n default:\r\n category\r\n .getListAll({\r\n lang,\r\n })\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n throw error;\r\n });\r\n }\r\n } catch (error) {\r\n console.error('use category-get-list-by-mode error, ', error);\r\n }\r\n }, [lang, mode]);\r\n return data;\r\n}\r\n\r\n/**\r\n * =============================================\r\n * Hook Labal\r\n * ---------------------------------------------\r\n * MODEL: Label\r\n * =============================================\r\n */\r\n/**\r\n * useLabelGetListAll\r\n * Hook: Label getListAll\r\n * @returns\r\n */\r\nexport function useLabelGetListAll() {\r\n // logger\r\n logger('useLabelGetListAll render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n label\r\n .getListAll()\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error('use label-get-list-all error, ', error);\r\n });\r\n }, []);\r\n return data;\r\n}\r\n\r\n/**\r\n * =============================================\r\n * Hook Dimeission\r\n * ---------------------------------------------\r\n * MODEL: Dimeission\r\n * =============================================\r\n */\r\n\r\n/**\r\n * useDimensionGetListAll\r\n * Hook: Dimenison getListAll\r\n * @param {string} lang language of data, default: 'TH'\r\n * @returns\r\n */\r\nexport function useDimensionGetListAll(lang = 'TH') {\r\n // logger\r\n logger('useDimensionGetListAll render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n dimension\r\n .getListAll()\r\n .then((result) => {\r\n setData(result);\r\n })\r\n .catch((error) => {\r\n console.error('use dimension-get-list-all error, ', error);\r\n });\r\n }, []);\r\n return data;\r\n}\r\n","import { fade } from '@material-ui/core/styles/colorManipulator';\r\n/**\r\n * Style of data-display component cat. consists of\r\n * - progressSyles\r\n * - dialogStyles,\r\n * - snackBarStyles,\r\n * - backdropStyles,\r\n * & etc.\r\n */\r\n\r\nexport const backdropStyles = (theme) => ({\r\n backdropStyle: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: '#000080',\r\n backgroundColor: fade('#A9A9A9', 0.4),\r\n },\r\n // https://stackoverflow.com/questions/60931522/how-to-add-backdrop-that-overlays-single-component-such-as-paper-rather-than-ent\r\n innerBackdropStyle: {\r\n zIndex: 1,\r\n backgroundColor: fade('#A9A9A9', 0.4),\r\n position: \"absolute\",\r\n },\r\n circularProgressLoadStyle: {\r\n color: '#989898',\r\n marginRight: 4,\r\n marginLeft: -4,\r\n },\r\n});\r\n\r\n// https://material-ui.com/customization/z-index/ (material-ui z-index)","/* eslint-disable no-use-before-define */\r\nimport React, { useState, useEffect } from 'react';\r\nimport {\r\n useTheme,\r\n fade,\r\n makeStyles,\r\n withStyles,\r\n} from '@material-ui/core/styles';\r\n\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport Popper from '@material-ui/core/Popper';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Box from '@material-ui/core/Box';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport ButtonBase from '@material-ui/core/ButtonBase';\r\nimport Chip from '@material-ui/core/Chip';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport DoneIcon from '@material-ui/icons/Done';\r\nimport LabelTwoToneIcon from '@material-ui/icons/LabelTwoTone';\r\n\r\nimport { logger } from './../../../utils/utils';\r\n\r\nimport { useLabelGetListAll } from './../../../hooks/useData';\r\n\r\nimport { backdropStyles } from './../../../styles/globalStyles/feedbackStyles';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n ...backdropStyles(theme),\r\n root: {\r\n width: '100%',\r\n fontSize: 13,\r\n position: 'relative',\r\n },\r\n button: {\r\n fontSize: 13,\r\n width: '100%',\r\n textAlign: 'left',\r\n paddingBottom: 8,\r\n color: '#586069',\r\n fontWeight: 600,\r\n '&:hover,&:focus': {\r\n color: '#0366d6',\r\n },\r\n '& span': {\r\n width: '100%',\r\n },\r\n '& svg': {\r\n width: 16,\r\n height: 16,\r\n },\r\n },\r\n tag: {\r\n marginTop: 3,\r\n height: 20,\r\n padding: '.15em 4px',\r\n fontWeight: 600,\r\n lineHeight: '15px',\r\n borderRadius: 2,\r\n },\r\n popper: {\r\n border: '1px solid rgba(27,31,35,.15)',\r\n boxShadow: '0 3px 12px rgba(27,31,35,.15)',\r\n borderRadius: 3,\r\n width: 300,\r\n zIndex: theme.zIndex.drawer + 1,\r\n fontSize: 13,\r\n color: '#586069',\r\n backgroundColor: '#f6f8fa',\r\n },\r\n header: {\r\n borderBottom: '1px solid #e1e4e8',\r\n padding: '8px 10px',\r\n fontWeight: 600,\r\n },\r\n inputBase: {\r\n padding: 10,\r\n width: '100%',\r\n borderBottom: '1px solid #dfe2e5',\r\n '& input': {\r\n borderRadius: 4,\r\n backgroundColor: theme.palette.common.white,\r\n padding: 8,\r\n transition: theme.transitions.create(['border-color', 'box-shadow']),\r\n border: '1px solid #ced4da',\r\n fontSize: 14,\r\n '&:focus': {\r\n boxShadow: `${fade(theme.palette.primary.main, 0.25)} 0 0 0 0.2rem`,\r\n borderColor: theme.palette.primary.main,\r\n },\r\n },\r\n },\r\n paper: {\r\n boxShadow: 'none',\r\n margin: 0,\r\n color: '#586069',\r\n fontSize: 13,\r\n },\r\n option: {\r\n minHeight: 'auto',\r\n alignItems: 'flex-start',\r\n padding: 8,\r\n '&[aria-selected=\"true\"]': {\r\n backgroundColor: 'transparent',\r\n },\r\n '&[data-focus=\"true\"]': {\r\n backgroundColor: theme.palette.action.hover,\r\n },\r\n },\r\n popperDisablePortal: {\r\n position: 'relative',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n chipContainner: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n // justifyContent: 'center',\r\n // '& > *': {\r\n // margin: theme.spacing(0.5),\r\n // },\r\n },\r\n}));\r\n\r\nconst HtmlTooltip = withStyles((theme) => ({\r\n tooltip: {\r\n backgroundColor: '#f5f5f9',\r\n color: 'rgba(0, 0, 0, 0.87)',\r\n maxWidth: 220,\r\n fontSize: theme.typography.pxToRem(12),\r\n border: '1px solid #dadde9',\r\n },\r\n}))(Tooltip);\r\n\r\nconst ChipLabels = React.memo(({ labels }) => {\r\n const theme = useTheme();\r\n return labels.map((label, index) => {\r\n let styles = label.style ? JSON.parse(label.style) : null;\r\n let style = styles\r\n ? {\r\n backgroundColor: styles.backgroundColor,\r\n color: theme.palette.getContrastText(styles.backgroundColor),\r\n marginTop: 2,\r\n marginBottom: 2,\r\n marginRight: 4,\r\n }\r\n : {};\r\n let names = label.name ? label.name.split('/') : [];\r\n return (\r\n label.name && (\r\n \r\n \r\n // {label.name}\r\n // \r\n
\r\n \r\n {/* {names.map((name, index) => (\r\n \r\n \r\n {name}\r\n \r\n {index != names.length - 1 && /}\r\n \r\n ))} */}\r\n {names\r\n .map((name, index) => (\r\n \r\n {name}\r\n \r\n ))\r\n .reduce((prev, curr, index) => [\r\n prev,\r\n /,\r\n curr,\r\n ])}\r\n \r\n
\r\n }\r\n size=\"small\"\r\n style={style}\r\n />\r\n
\r\n
\r\n )\r\n );\r\n });\r\n});\r\n\r\n/**\r\n * LabelPicker() (Component)\r\n * @returns Label Picker\r\n * Available on: https://material-ui.com/components/autocomplete/ (GitHub's picker)\r\n */\r\nconst LabelPicker = React.memo(({ value, onChange, onBlur }) => {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n\r\n logger('LabelPicker render');\r\n\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n\r\n // //Original state value but conflict with value props then change state name to selectedValue\r\n const [selectedValue, setSelectedValue] = useState(value || []);\r\n const [pendingValue, setPendingValue] = useState([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const labels = useLabelGetListAll();\r\n\r\n useEffect(() => {\r\n if (value) setSelectedValue(value);\r\n }, [value]);\r\n\r\n const handleClick = (event) => {\r\n setPendingValue(selectedValue);\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = async (event, reason) => {\r\n if (reason === 'toggleInput') {\r\n return;\r\n }\r\n !isLoading && setIsLoading(true);\r\n\r\n if (anchorEl) {\r\n anchorEl.focus();\r\n }\r\n setAnchorEl(null);\r\n\r\n // Custom component by add onBlur event\r\n if (onBlur) {\r\n await onBlur(pendingValue, selectedValue, () => {\r\n setSelectedValue(pendingValue);\r\n });\r\n } else {\r\n if (JSON.stringify(pendingValue) !== JSON.stringify(selectedValue))\r\n setSelectedValue(pendingValue);\r\n }\r\n \r\n setIsLoading(false);\r\n };\r\n\r\n const open = Boolean(anchorEl);\r\n const id = open ? 'github-label' : undefined;\r\n\r\n /**\r\n * options extend group prop from labels\r\n * NOTE: Custom group (Extend from GitHub's picker)\r\n */\r\n let options = labels.map((option) => {\r\n const groups = option.name.split('/');\r\n const grouping = groups.length > 1 ? groups[0] : '';\r\n return {\r\n grouping,\r\n ...option,\r\n };\r\n });\r\n\r\n /**\r\n * renderGroup() (Component)\r\n * @param {*} params\r\n * @returns\r\n * NOTE: Custom group (Extend from GitHub's picker)\r\n */\r\n const renderGroup = (params) => {\r\n return [\r\n \r\n {params.key > 0 && }\r\n {params.group && {params.group}}\r\n {!params.group && }\r\n ,\r\n params.children.map((item, index) => (\r\n {item}\r\n )),\r\n ];\r\n };\r\n\r\n return (\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
ค้นหา-เลือกติดป้ายกำกับ
\r\n {\r\n onChange && onChange(newValue);\r\n setPendingValue(newValue);\r\n }}\r\n disableCloseOnSelect\r\n disablePortal\r\n renderTags={() => null}\r\n disableListWrap\r\n noOptionsText=\"ไม่พบป้ายกำกับ\"\r\n renderGroup={renderGroup}\r\n renderOption={(option, { selected }) => {\r\n return (\r\n \r\n \r\n \r\n
\r\n {option.name.split('/').length > 1\r\n ? option.name.split('/')[1]\r\n : option.name}\r\n
\r\n \r\n
\r\n );\r\n }}\r\n options={[...options].sort((a, b) => {\r\n // Display the selected labels first.\r\n let ai = selectedValue.indexOf(a);\r\n ai = ai === -1 ? selectedValue.length + options.indexOf(a) : ai;\r\n let bi = selectedValue.indexOf(b);\r\n bi = bi === -1 ? selectedValue.length + options.indexOf(b) : bi;\r\n return ai - bi;\r\n })}\r\n groupBy={(option) => option.grouping}\r\n getOptionLabel={(option) => option.name}\r\n getOptionSelected={(option, value) => option.name === value.name}\r\n renderInput={(params) => (\r\n \r\n )}\r\n // custom Group\r\n />\r\n \r\n
\r\n );\r\n});\r\n\r\nexport { ChipLabels, LabelPicker };\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nconst AutocompleteSelectOptions = ({\r\n id = 'autocomplete-standard',\r\n size = 'small',\r\n options = [],\r\n label = '',\r\n placeholder = '',\r\n value,\r\n onChange,\r\n fieldOptions = { id: 'id', title: 'title' },\r\n ...another\r\n}) => {\r\n const [loading, setLoading] = useState(false);\r\n const [selectValue, setSelectValue] = React.useState(value || null);\r\n\r\n useEffect(() => {\r\n setSelectValue(value);\r\n }, [value]);\r\n\r\n // Autocomplete https://material-ui.com/components/autocomplete/#autocomplete (Controllable states)\r\n const handleChange = async (e, newValue) => {\r\n setSelectValue(newValue);\r\n if (onChange) {\r\n !loading && setLoading(true);\r\n await onChange(e, newValue);\r\n setLoading(false);\r\n }\r\n };\r\n return (\r\n
\r\n \r\n // option[fieldOptions.id] === value[fieldOptions.id]\r\n // }\r\n getOptionLabel={(option) => option[fieldOptions.title]}\r\n onChange={handleChange}\r\n renderInput={(params) => (\r\n \r\n {loading ? (\r\n \r\n ) : null}\r\n {params.InputProps.startAdornment}\r\n \r\n ),\r\n }}\r\n />\r\n )}\r\n disabled={loading}\r\n {...another}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport default AutocompleteSelectOptions;\r\n","import * as input from './inputStyles';\r\nimport * as surface from './surfaceStyles';\r\nimport * as dataDisplay from './dataDisplayStyles';\r\nimport * as feedback from './feedbackStyles';\r\nconst globalStyles = (theme) => ({\r\n ...surface.appBarStyles(theme),\r\n ...input.formStyles(theme),\r\n ...input.buttonStyles(theme),\r\n ...dataDisplay.tableStyles(theme),\r\n ...feedback.backdropStyles(theme),\r\n});\r\n\r\nexport default globalStyles;\r\n","/**\r\n * Style of inputs component cat. consists of\r\n * - buttonStyle,\r\n * - buttonGroupStyle,\r\n * - checkboxStyle,\r\n * - and etc.\r\n */\r\nexport const formStyles = (theme) => ({\r\n formStyle: {\r\n margin: theme.spacing(1, 0),\r\n\r\n '& > *': {\r\n margin: theme.spacing(1, 0, 2, 0),\r\n },\r\n },\r\n fieldMargin: {\r\n margin: theme.spacing(1, 0, 2, 0),\r\n }\r\n});\r\n/**\r\n * buttonStyles\r\n * @param {*} theme\r\n */\r\nexport const buttonStyles = (theme) => {\r\n const buttonCoreStyle = {\r\n minWidth: '6.3vw',\r\n fontSize: '0.8rem',\r\n height: '30px',\r\n };\r\n return {\r\n btnLayoutStyle: {\r\n ...buttonCoreStyle,\r\n margin: theme.spacing(1),\r\n },\r\n btnLayoutLeftStyle: {\r\n ...buttonCoreStyle,\r\n margin: theme.spacing(0.3, 1.2, 0.3, 0),\r\n },\r\n btnLayoutRightStyle: {\r\n ...buttonCoreStyle,\r\n margin: theme.spacing(0.3, 0, 0.3, 1.2),\r\n },\r\n };\r\n};\r\n","/**\r\n * Style of data-display component cat. consists of\r\n * - avatarSyles\r\n * - badgeStyles,\r\n * - tableStyles,\r\n * - listStyles,\r\n * & etc.\r\n */\r\n\r\nexport const tableStyles = (theme) => ({\r\n materialTableStyle__root: {\r\n '& tbody tr:hover': {\r\n backgroundColor: 'WhiteSmoke',\r\n cursor: 'pointer',\r\n },\r\n },\r\n hiddenStyle: {\r\n display: 'none',\r\n },\r\n});\r\n\r\nexport const chipStyles = (theme) => ({\r\n chipStatusSmallStyle: {\r\n margin: 0,\r\n padding: 0,\r\n borderRadius: 4,\r\n height: '18px',\r\n fontSize: '12px',\r\n },\r\n chipStatusMediumStyle: {\r\n margin: 0,\r\n padding: 0,\r\n borderRadius: 4,\r\n height: '25px',\r\n fontSize: '14px',\r\n },\r\n chipStatusLargeStyle: {\r\n margin: 0,\r\n padding: 0,\r\n borderRadius: 4,\r\n height: '32px',\r\n fontSize: '14px',\r\n },\r\n \r\n chipLabelSmallStyle: {\r\n margin: 0,\r\n padding: 0,\r\n borderRadius: 15,\r\n height: '18px',\r\n fontSize: '12px',\r\n },\r\n chipLabelMediumStyle: {\r\n margin: 0,\r\n padding: 0,\r\n borderRadius: 15,\r\n height: '25px',\r\n fontSize: '14px',\r\n },\r\n chipLabelLargeStyle: {\r\n margin: 0,\r\n padding: 0,\r\n borderRadius: 15,\r\n height: '32px',\r\n fontSize: '14px',\r\n },\r\n \r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Tabs, Tab, Typography, Box } from '@material-ui/core';\r\n/**\r\n * TabPanel (component)\r\n * @param {*} props\r\n */\r\nfunction TabPanel(props) {\r\n const { children, value, index, ...other } = props;\r\n\r\n return (\r\n
\r\n );\r\n}\r\n\r\n/**\r\n * TabPanel propTypes\r\n */\r\nTabPanel.propTypes = {\r\n children: PropTypes.node,\r\n index: PropTypes.any.isRequired,\r\n value: PropTypes.any.isRequired,\r\n};\r\n\r\n/**\r\n * TabPanel spread attrbutes (attrbutes = id, aria-controls)\r\n */\r\n\r\n/**\r\n *\r\n * @param {*} index\r\n */\r\nfunction a11yProps(index) {\r\n return {\r\n id: `simple-tab-${index}`,\r\n 'aria-controls': `simple-tabpanel-${index}`,\r\n };\r\n}\r\n\r\n/**\r\n * ==============================================================\r\n * AntTabs (Customized tabs)\r\n * Avilable on: https://material-ui.com/components/tabs/#tabs\r\n * ==============================================================\r\n */\r\n\r\n/**\r\n * AntTabs style (component)\r\n */\r\nconst AntTabs = withStyles({\r\n root: {\r\n borderBottom: '1px solid #e8e8e8',\r\n },\r\n indicator: {\r\n backgroundColor: '#1890ff',\r\n },\r\n})(Tabs);\r\n\r\n/**\r\n * AntTab style (component)\r\n */\r\n const AntTab = withStyles((theme) => ({\r\n root: {\r\n textTransform: 'none',\r\n minWidth: 72,\r\n fontWeight: theme.typography.fontWeightRegular,\r\n marginRight: theme.spacing(4),\r\n fontFamily: [\r\n '-apple-system',\r\n 'BlinkMacSystemFont',\r\n '\"Segoe UI\"',\r\n 'Roboto',\r\n '\"Helvetica Neue\"',\r\n 'Arial',\r\n 'sans-serif',\r\n '\"Apple Color Emoji\"',\r\n '\"Segoe UI Emoji\"',\r\n '\"Segoe UI Symbol\"',\r\n ].join(','),\r\n '&:hover': {\r\n color: '#40a9ff',\r\n opacity: 1,\r\n },\r\n '&$selected': {\r\n color: '#1890ff',\r\n fontWeight: theme.typography.fontWeightMedium,\r\n },\r\n '&:focus': {\r\n color: '#40a9ff',\r\n },\r\n },\r\n selected: {},\r\n}))((props) => );\r\n\r\nexport { Tabs, Tab, AntTabs, AntTab, TabPanel, a11yProps };\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { isEqual } from 'lodash';\r\nimport { Field, ErrorMessage, useField, useFormikContext } from 'formik';\r\nimport { Select } from 'formik-material-ui';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\n// import utils\r\nimport { logger, mergeArray } from './../../../utils/utils';\r\n\r\nimport { useCategoryGetListByMode } from './../../../hooks/useData';\r\n\r\nconst SELECT_ALL_VALUE = '*';\r\n\r\n/**\r\n * SelectPersonalDataCategory() (component)\r\n * @param {string} name, name of select element (default: category_id)\r\n * @param {string} id, id of select element (default: category_id)\r\n * @param {string} label, label of select element (default: \"ประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด\")\r\n * @param {mode} mode reporter|staff, default: reporter\r\n * @param {bool} isSelectAll\r\n * @param {function} onChange, onChange\r\n * @param {bool} disabled, default: false\r\n * @param {object} className, className of select element\r\n * @param variant\r\n * @returns (element) SelectPersonalDataCategory\r\n */\r\n\r\n/**\r\n * Modify: #1\r\n * Desc: Change props of Field\r\n * - Change value argunment to user internal setFieldValue\r\n * - Change FormHelperText(c) to Formik ErrorMessage(c) (https://formik.org/docs/api/errormessage)\r\n * Date: 20-05-2021\r\n */\r\nconst SelectPersonalDataCategory = (\r\n {\r\n name = 'category_id',\r\n id = 'category_id',\r\n label = 'ประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด *',\r\n mode = 'reporter',\r\n isSelectAll = false,\r\n onChange,\r\n disabled = false,\r\n className,\r\n variant = 'standard',\r\n },\r\n ref\r\n) => {\r\n logger('SelectPersonalDataCategory render');\r\n\r\n //Hook category by lang & mode\r\n let categories = useCategoryGetListByMode('TH', mode);\r\n\r\n // Hook Formik setFildValue\r\n const { setFieldValue } = useFormikContext();\r\n // https://formik.org/docs/api/useField (Test value from formik, instead state-value)\r\n const [field, meta] = useField(name);\r\n\r\n const getLevelData = (value) => {\r\n let ret = { data: {}, permissionLevels: [] };\r\n // Get permissionLevel in each case\r\n // Case 1: select all categories\r\n if (value === SELECT_ALL_VALUE) {\r\n let cats = categories.length ? categories : [];\r\n ret.data = cats;\r\n // Merge permissionLevel in categories list when cate more thna one (select all)\r\n ret.permissionLevels = mergeArray(\r\n categories.map((cate) =>\r\n cate.permissionLevel ? cate.permissionLevel : []\r\n )\r\n );\r\n // Case 2: select one category\r\n } else {\r\n let cat = categories.find((category) => category.id === value) || {};\r\n ret.data = cat;\r\n ret.permissionLevels = cat.permissionLevel || [];\r\n }\r\n return ret;\r\n };\r\n\r\n // Handle change select\r\n const handleChange = (e, c) => {\r\n setFieldValue(name, e.target.value);\r\n let context = typeof c.props.children === 'string' ? c.props.children : '';\r\n const { data, permissionLevels } = getLevelData(e.target.value);\r\n onChange && onChange(e, { data, permissionLevels }, context);\r\n };\r\n\r\n //formik.org/docs/examples/dependent-fields-async-api-request\r\n return (\r\n \r\n \r\n \r\n {label}\r\n \r\n \r\n {!isSelectAll && (\r\n \r\n เลือก {label}\r\n \r\n )}\r\n {isSelectAll && (\r\n * ทุกประเภท\r\n )}\r\n {categories.map((category) => (\r\n \r\n {category.name}\r\n \r\n ))}\r\n \r\n\r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// Types[, Rules] of props\r\nSelectPersonalDataCategory.propTypes = {\r\n name: PropTypes.string,\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n mode: PropTypes.string,\r\n onChange: PropTypes.func,\r\n};\r\n\r\n/**\r\n * By default it will only shallowly compare complex objects in the props object.\r\n * If you want control over the comparison,\r\n * you can also provide a custom comparison function as the second argument.\r\n * https://reactjs.org/docs/react-api.html\r\n * https://stackoverflow.com/questions/63502588/avoid-rerendering-child-when-passing-object-in-props\r\n */\r\nexport default React.memo(SelectPersonalDataCategory, isEqual);\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Field, ErrorMessage, useField, useFormikContext } from 'formik';\r\nimport { Select } from 'formik-material-ui';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\n// import utils\r\nimport { logger } from './../../../utils/utils';\r\n\r\nimport { usePermissionLevelGetListAllSetting } from './../../../hooks/useData';\r\n\r\n/**\r\n * SelectPermissionLevel() (component)\r\n * @param {string} name, name of select element (default: category_id)\r\n * @param {string} id, id of select element (default: category_id)\r\n * @param {string} label, label of select element (default: \"ประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด\")\r\n * @param {function} onChange, onChange\r\n * @param {string} excludeDataField, feild of data for exclude from list of permissionLevel\r\n * @param {array} excludeData, data of excludeDataField\r\n * @param {bool} disabled, default: false\r\n * @param {object} className, className of select element\r\n * @param variant\r\n * @returns (element) SelectPermissionLevel\r\n */\r\nconst SelectPermissionLevel = ({\r\n name = 'permission_id',\r\n id = 'permission_id',\r\n label = 'ระดับการดำเนินการ',\r\n onChange,\r\n excludeDataField = 'id',\r\n excludeData = [],\r\n disabled = false,\r\n className,\r\n variant = 'standard',\r\n}) => {\r\n logger('SelectPermissionLevel render');\r\n\r\n // Hook Formik setFildValue\r\n const { setFieldValue } = useFormikContext();\r\n // https://formik.org/docs/api/useField (Test value from formik, instead state-value)\r\n const [field, meta] = useField(name);\r\n\r\n // Hook permissionLevel\r\n let permissionLevels = usePermissionLevelGetListAllSetting('TH');\r\n if (permissionLevels.length && excludeData && excludeDataField) {\r\n permissionLevels = permissionLevels.filter(function (level) {\r\n return !excludeData.includes(level[excludeDataField]);\r\n });\r\n }\r\n\r\n // Handle change select\r\n const memoHandleChange = useCallback((e, c) => {\r\n setFieldValue(name, e.target.value);\r\n let context = typeof c.props.children === 'string' ? c.props.children : '';\r\n onChange && onChange(e, context);\r\n });\r\n\r\n return (\r\n \r\n \r\n {label}\r\n \r\n \r\n เลือก {label}\r\n \r\n {permissionLevels.map((level) => (\r\n \r\n {level.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// Types[, Rules] of props\r\nSelectPermissionLevel.propTypes = {\r\n name: PropTypes.string,\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n onChange: PropTypes.func,\r\n excludeDataField: PropTypes.string,\r\n excludeData: PropTypes.array,\r\n};\r\n\r\nexport default React.memo(SelectPermissionLevel);\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Field, ErrorMessage, useField, useFormikContext } from 'formik';\r\nimport { Select } from 'formik-material-ui';\r\nimport {\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n FormHelperText,\r\n} from '@material-ui/core';\r\n\r\nimport { usePermissionGroupGetListByCategoryLevel } from './../../../hooks/useData';\r\n\r\n// TODO: Hook permissionGroups api\r\n\r\n/**\r\n * SelectPermissionGroup() (component)\r\n * @param {string} name, name of select element (default: category_id)\r\n * @param {string} id, id of select element (default: category_id)\r\n * @param {string} label, label of select element (default: \"ประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด\")\r\n * @param {string} categoryId, category id\r\n * @param {number} level, level 1|2|3\r\n * @param {function} onChange, onChange\r\n * @param {bool} disabled, default: false\r\n * @param {object} className, className of select element\r\n * @param variant\r\n * @returns (element) SelectPermissionGroup\r\n */\r\nconst SelectPermissionGroup = ({\r\n name = 'permissionGroup_id',\r\n id = 'permissionGroup_id',\r\n label = 'กลุ่มผู้ดูแลข้อมูล',\r\n categoryId = null,\r\n level = null,\r\n disabled = false,\r\n onChange,\r\n className,\r\n variant = 'standard',\r\n}) => {\r\n // Hook Formik setFildValue\r\n const { setFieldValue } = useFormikContext();\r\n // https://formik.org/docs/api/useField (Test value from formik, instead state-value)\r\n const [field, meta] = useField(name);\r\n\r\n const permissionGroups = usePermissionGroupGetListByCategoryLevel(\r\n categoryId,\r\n level\r\n );\r\n const havePermissionGroups = permissionGroups\r\n ? permissionGroups.length > 0\r\n : false;\r\n\r\n // Handle change select\r\n const memoHandleChange = useCallback((e, c) => {\r\n setFieldValue(name, e.target.value);\r\n let context = typeof c.props.children === 'string' ? c.props.children : '';\r\n onChange && onChange(e, context);\r\n });\r\n\r\n return (\r\n \r\n \r\n {label}\r\n \r\n \r\n เลือก {label}\r\n \r\n {permissionGroups.map((permissionGroup) => (\r\n \r\n {permissionGroup.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// Types[, Rules] of props\r\nSelectPermissionGroup.propTypes = {\r\n name: PropTypes.string,\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n onChange: PropTypes.func,\r\n};\r\n\r\nexport default React.memo(SelectPermissionGroup);\r\n","import React, {\r\n useEffect,\r\n useState,\r\n useMemo,\r\n useRef,\r\n useImperativeHandle,\r\n forwardRef,\r\n} from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { useDropzone } from 'react-dropzone';\r\n\r\nimport { Typography, IconButton, Tooltip } from '@material-ui/core';\r\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\r\n\r\nimport { logger } from './../../../utils/utils';\r\n\r\n/**\r\n * Modify #1\r\n * Description:\r\n * - Add prop eixistFiles for initail exist file in issue\r\n * - Change a key of files 'preview' to 'thumbnail' for check with exist file in issue (key thumbnail) when edit issue file;\r\n * - Change compaire files is uploaded key from 'path' to 'name'\r\n * -------------------------------------------------------------------\r\n * Modify #2 (MDF2)\r\n * Description:\r\n * - Add default accept prop is image/jpeg, image/png, application/pdf\r\n * -------------------------------------------------------------------\r\n */\r\nconst baseStyle = {\r\n flex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: '20px',\r\n borderWidth: 2,\r\n borderRadius: 2,\r\n borderColor: '#eeeeee',\r\n borderStyle: 'dashed',\r\n backgroundColor: '#fafafa',\r\n color: '#bdbdbd',\r\n outline: 'none',\r\n transition: 'border .24s ease-in-out',\r\n};\r\n\r\nconst activeStyle = {\r\n borderColor: '#2196f3',\r\n};\r\n\r\nconst acceptStyle = {\r\n borderColor: '#00e676',\r\n};\r\n\r\nconst rejectStyle = {\r\n borderColor: '#ff1744',\r\n};\r\n\r\nconst thumbsContainer = {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n marginTop: 16,\r\n};\r\n\r\nconst thumb = {\r\n display: 'inline-flex',\r\n borderRadius: 2,\r\n border: '1px solid #eaeaea',\r\n marginBottom: 8,\r\n marginRight: 20,\r\n width: 120,\r\n height: 120,\r\n padding: 4,\r\n boxSizing: 'border-box',\r\n};\r\n\r\nconst thumbInner = {\r\n display: 'flex',\r\n minWidth: 0,\r\n overflow: 'hidden',\r\n};\r\n\r\nconst img = {\r\n display: 'block',\r\n width: 'auto',\r\n height: '100%',\r\n};\r\n\r\n// Custom dropzone preview\r\nconst thumbCol = {\r\n display: 'flex',\r\n flexDirection: 'Column',\r\n};\r\n\r\nconst thumbContent = {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n};\r\n\r\nconst thumbContentInner = {\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n flexGlow: 1,\r\n};\r\n\r\n// https://material-ui.com/components/tooltips/#tooltip (Customized tooltips HtmlTooltip)\r\nconst HtmlTooltip = withStyles((theme) => ({\r\n tooltip: {\r\n backgroundColor: '#f5f5f9',\r\n color: 'rgba(0, 0, 0, 0.87)',\r\n maxWidth: 220,\r\n fontSize: theme.typography.pxToRem(12),\r\n border: '1px solid #dadde9',\r\n },\r\n}))(Tooltip);\r\n\r\nconst attachThumb =\r\n 'data:image/png;base64,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';\r\n\r\n/**\r\n * toBase64(files)\r\n * @param {*} file\r\n * @returns\r\n * NOTE: https://stackoverflow.com/questions/41655406/reactjs-cant-base64-encode-file-from-react-dropzone\r\n */\r\nconst toBase64File = (file) =>\r\n new Promise((resolve, reject) => {\r\n try {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = (error) => reject(error);\r\n } catch (err) {\r\n console.error('toBase64File error ', err);\r\n }\r\n });\r\n\r\nconst checkNewAcceptedFiles = async (previousFiles, acceptedFiles) => {\r\n let newAcceptedFiles = [];\r\n for (let file of acceptedFiles) {\r\n if (\r\n previousFiles.find(function (prevFile) {\r\n // return prevFile.path === file.path;\r\n return prevFile.name === file.name;\r\n }) === undefined\r\n ) {\r\n let base64 = await toBase64File(file);\r\n // let preview = URL.createObjectURL(file);\r\n let thumbnail =\r\n file.type.substring(0, 5) === 'image'\r\n ? URL.createObjectURL(file)\r\n : null;\r\n\r\n Object.assign(file, {\r\n // preview,\r\n thumbnail,\r\n base64,\r\n });\r\n newAcceptedFiles.push(file);\r\n }\r\n }\r\n return { newAcceptedFiles };\r\n};\r\n\r\nconst DropFiles = forwardRef((props, ref) => {\r\n const { existFiles = [], onDropped, onRemoved } = props;\r\n\r\n logger('DropFiles render');\r\n\r\n const [files, setFiles] = useState(existFiles);\r\n\r\n useImperativeHandle(ref, () => ({\r\n files,\r\n clearFiles() {\r\n setFiles([]);\r\n },\r\n }));\r\n const isExtendNewFiles = useRef(false);\r\n const {\r\n getRootProps,\r\n getInputProps,\r\n isDragActive,\r\n isDragAccept,\r\n isDragReject,\r\n } = useDropzone({\r\n accept: 'image/*',\r\n // accept: 'image/png, image/jpeg, application/pdf',\r\n onDrop: async (acceptedFiles) => {\r\n const { newAcceptedFiles } = await checkNewAcceptedFiles(\r\n files,\r\n acceptedFiles\r\n );\r\n\r\n if (onDropped) {\r\n isExtendNewFiles.current = false;\r\n\r\n const extendNewFiles = (func = undefined) => {\r\n if (func) {\r\n isExtendNewFiles.current = true;\r\n logger('yes extend file');\r\n let extendNewAceptedFiles = [];\r\n for (let file of newAcceptedFiles) {\r\n Object.assign(file, { ...func(file) });\r\n extendNewAceptedFiles.push(file);\r\n }\r\n let allFilesWithExtendFile = [...files, ...extendNewAceptedFiles];\r\n setFiles(allFilesWithExtendFile);\r\n }\r\n };\r\n\r\n if (newAcceptedFiles.length) {\r\n let newFiles = newAcceptedFiles;\r\n await onDropped(newFiles, extendNewFiles).catch((error) => {\r\n console.error('onDropped pdf error, ', error);\r\n setFiles([...files, ...newFiles]);\r\n });\r\n if (!isExtendNewFiles.current) {\r\n logger('no extend file');\r\n let allFiles = [...files, ...newFiles];\r\n setFiles(allFiles);\r\n }\r\n } else {\r\n console.info('No have file onDroped');\r\n }\r\n }\r\n },\r\n });\r\n\r\n const handleRemoveFiles = async (i) => {\r\n if (onRemoved) {\r\n await onRemoved();\r\n }\r\n setFiles((prevFiles) => {\r\n let updatedFiles = prevFiles.filter((item, index) => index !== i);\r\n return updatedFiles;\r\n });\r\n };\r\n\r\n const style = useMemo(\r\n () => ({\r\n ...baseStyle,\r\n ...(isDragActive ? activeStyle : {}),\r\n ...(isDragAccept ? acceptStyle : {}),\r\n ...(isDragReject ? rejectStyle : {}),\r\n }),\r\n [isDragActive, isDragReject, isDragAccept]\r\n );\r\n // Original dropzone preview image\r\n const thumbs = files.map((file, index) => (\r\n
\r\n
\r\n
\r\n \r\n ไฟล์\r\n

\r\n ชื่อ: {file.name}\r\n

\r\n

\r\n {file.size && (\r\n \r\n ขนาด: {file.size} ไบต์{' '}\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 ไฟล์\r\n

\r\n ชื่อ: {file.name}\r\n

\r\n

\r\n {file.size && (\r\n \r\n ขนาด: {file.size} ไบต์{' '}\r\n \r\n )}\r\n

\r\n \r\n }\r\n >\r\n
{file.name}
\r\n \r\n
\r\n
\r\n \r\n {\r\n handleRemoveFiles(index);\r\n }}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n ));\r\n\r\n useEffect(\r\n () => () => {\r\n // Make sure to revoke the data uris to avoid memory leaks\r\n // files.forEach((file) => URL.revokeObjectURL(file.preview));\r\n files.forEach((file) => URL.revokeObjectURL(file.thumbnail));\r\n },\r\n [files]\r\n );\r\n\r\n return (\r\n
\r\n \r\n แนบไฟล์รูปภาพ\r\n \r\n
\r\n \r\n

ลากไฟล์มาวาง หรือคลิกเพื่อเลือก

\r\n
\r\n\r\n {/* Original Dorpzoe preview element */}\r\n \r\n\r\n {/* {\r\n handleRemoveFiles(index);\r\n }}\r\n /> */}\r\n
\r\n );\r\n});\r\n\r\nexport default React.memo(DropFiles);\r\n","import React, { useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport clsx from 'clsx';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\n// import @material-ui/core\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport Button from '@material-ui/core/Button';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\n\r\n// import styles-globalStyles\r\nimport globalStyles from './../../../styles/globalStyles';\r\n\r\n// import react-router\r\nimport { Prompt } from 'react-router-dom';\r\n\r\n// import Formik and Dependency\r\nimport { Formik, Form, Field } from 'formik';\r\nimport { TextField } from 'formik-material-ui';\r\nimport * as Yup from 'yup';\r\n\r\n// import utils\r\nimport { logger } from './../../../utils/utils';\r\n\r\n// import fragments\r\nimport DropFiles from './../../fragments/DropFiles';\r\n//import fragments { ...Tabs} , AppSidebarRBack, IssueCard, ActivityCard\r\nimport { AntTabs, AntTab, TabPanel, a11yProps } from './../../fragments/Tabs';\r\n\r\nimport { useIssueCommentTypeGetListAll } from './../../../hooks/useData';\r\n\r\n// styles\r\nconst useStyles = makeStyles((theme) => ({\r\n ...globalStyles(theme),\r\n // https://stackoverflow.com/questions/61056265/how-to-override-box-created-by-tabpanel-in-material-ui\r\n tab: {\r\n '& .MuiBox-root': {\r\n padding: theme.spacing(2, 0),\r\n },\r\n },\r\n\r\n card: {\r\n minWidth: 250,\r\n maxWidth: 930,\r\n position: 'relative',\r\n },\r\n cardContent: {\r\n minHeight: 200,\r\n padding: theme.spacing(0, 2),\r\n },\r\n section: {\r\n margin: theme.spacing(1),\r\n },\r\n cardAction: {\r\n width: '100%',\r\n justifyContent: 'flex-end',\r\n '& > *': {\r\n margin: theme.spacing(1),\r\n },\r\n },\r\n}));\r\n\r\n/**\r\n * FieldComment() (component)\r\n */\r\nconst FieldComment = React.memo(\r\n ({\r\n name = 'comment',\r\n id = 'comment',\r\n label = 'ความคิดเห็น',\r\n value = '',\r\n rowsMax = 6,\r\n rows = 6,\r\n disabled = false,\r\n touched,\r\n errors,\r\n }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n);\r\n/**\r\n * ActivityCard's propTypes\r\n */\r\nFieldComment.propTypes = {\r\n name: PropTypes.string,\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n value: PropTypes.string,\r\n rowsMax: PropTypes.number,\r\n rows: PropTypes.number,\r\n};\r\n\r\n// YUP: build validation schema (validationSchema)\r\nconst validationSchema = Yup.object().shape({\r\n detail: Yup.string()\r\n .min(4, 'ความคิดเห็นต้องมากกว่า 4 อักขระ')\r\n .max(8000, 'ความคิดเห็นต้องไม่เกิน 8,000 อักขระ')\r\n .required('กรุณากรอกความคิดเห็น'),\r\n});\r\n\r\n/**\r\n * FormComment() (Component)\r\n * @param {object} props\r\n * data props\r\n * @param {object} props.id comment-id\r\n * @param {object} cardHeader {action, title, subheader}\r\n * @param {number} props.issueCommentTypeId issue-comment-type-id\r\n * @param {number} props.receiverType {0, 1}\r\n * @param {string} props.detail comment detail\r\n * compoent styles/features props\r\n * @param {string} props.label\r\n * @param {number} props.elevation default: 1\r\n * @param {string} props.variant default: 'outlined'\r\n * event props\r\n * @param {bool} props.receiverTapping default: false,\r\n * @param {array} props.existFiles list of object file-thumbnail (structure contains {id, issueId, thumbnail, name, type}) is existed issues that use initail DropFiles\r\n * @param {func} props.onDroppedFiles\r\n * @param {func} props.onRemovedFile\r\n * @param {func} props.onSubmit Form submit function\r\n * @param {func} props.onCancel Form cancel function\r\n * @param {object} props.formControlStyle formControlStyle\r\n * @return\r\n */\r\nconst FormComment = ({\r\n id = undefined,\r\n cardHeader = {\r\n action: undefined,\r\n title: undefined,\r\n subheader: undefined,\r\n },\r\n issueCommentTypeId = 0,\r\n receiverType = null,\r\n detail = '',\r\n label = 'เพิ่มความคิดเห็น',\r\n elevation = 1,\r\n variant = 'outlined',\r\n receiverTapping = false,\r\n existFiles = [],\r\n onDroppedFiles,\r\n onRemovedFile,\r\n onSubmit,\r\n onCancel = undefined,\r\n formControlStyle = undefined,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n logger('FormComment render');\r\n\r\n // if receiverType = 0 (reply to reprter comment) recieverByTab return index of tab = 1 (tab reply to reprter)\r\n // if receiverType = 1 (internal comment) recieverByTab return index of tab = 0 (internal)\r\n const recieverByTab = [1, 0];\r\n\r\n // Issue comment type\r\n const issueCommentTypes = useIssueCommentTypeGetListAll('TH');\r\n\r\n // AntTab - State\r\n const [antTabValue, setAntTabValue] = React.useState(\r\n receiverTapping && receiverType !== null\r\n ? recieverByTab.indexOf(receiverType)\r\n : 0\r\n );\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n // Ref, dropFilesRef\r\n const dropFilesRef = useRef();\r\n\r\n // Tab - Handle change tab\r\n const handleChangeTab = (event, newValue) => {\r\n setAntTabValue(newValue);\r\n };\r\n\r\n const handleCancel = (resetForm) => {\r\n // props.onCancel\r\n if (onCancel) {\r\n onCancel();\r\n }\r\n // DropFiles - clearFiles\r\n if (dropFilesRef.current.files.length) {\r\n dropFilesRef.current.clearFiles();\r\n }\r\n };\r\n\r\n // Formik: iniitialValue by data props\r\n const initialValues = {\r\n id,\r\n issueCommentType_id: issueCommentTypeId,\r\n receiverType: receiverType === null ? 0 : receiverType,\r\n detail,\r\n };\r\n\r\n // About select type\r\n const labelType = 'ประเภทความคิดเห็น';\r\n const initialTypeValue = 0;\r\n const [typeValue, setTypeValue] = useState(issueCommentTypeId);\r\n const typeContextRef = useRef();\r\n\r\n let labeller = label;\r\n\r\n labeller =\r\n typeValue !== initialTypeValue &&\r\n antTabValue === 0 &&\r\n typeContextRef.current\r\n ? `${label} ประเภท ${typeContextRef.current}`\r\n : label;\r\n\r\n const formComment = ({\r\n values,\r\n setFieldValue,\r\n resetForm,\r\n touched,\r\n errors,\r\n }) => (\r\n
\r\n
\r\n \r\n {(cardHeader.action || cardHeader.title || cardHeader.subtitle) && (\r\n \r\n )}\r\n \r\n {receiverTapping && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {labelType}\r\n \r\n {\r\n typeContextRef.current =\r\n typeof c.props.children === 'string'\r\n ? c.props.children\r\n : '';\r\n setTypeValue(e.target.value);\r\n setFieldValue('issueCommentType_id', e.target.value);\r\n }}\r\n >\r\n {issueCommentTypes.map((item) => (\r\n \r\n {item.name}\r\n \r\n ))}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {onDroppedFiles && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n บันทึก\r\n \r\n {\r\n handleCancel();\r\n resetForm();\r\n }}\r\n disabled={isLoading}\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 return (\r\n \r\n {\r\n setSubmitting(false);\r\n\r\n // dropFilesRef (ref of DropFiles) has new files and also existFiles is included\r\n // Note: existFiles in dropFilesRef is data (existFiles) assigned to existFiles (become DropFiles's prop), look DropFiles statement\r\n\r\n let commentFiles = [\r\n ...dropFilesRef.current.files.map((file) => file.id),\r\n ].join(',');\r\n\r\n let reqData = {\r\n id: values.id,\r\n issueCommentType_id: values.issueCommentType_id,\r\n receiverType: values.receiverType,\r\n detail: values.detail,\r\n commentFiles,\r\n };\r\n if (receiverTapping) {\r\n reqData = {\r\n ...reqData,\r\n receiverType: recieverByTab[antTabValue],\r\n };\r\n }\r\n\r\n // onSubmit\r\n (async () => {\r\n if (onSubmit) {\r\n !isLoading && setIsLoading(true);\r\n await onSubmit(reqData);\r\n setIsLoading(false);\r\n }\r\n resetForm();\r\n dropFilesRef.current && dropFilesRef.current.clearFiles();\r\n })();\r\n\r\n if (receiverTapping) {\r\n setTypeValue(initialTypeValue);\r\n }\r\n }}\r\n >\r\n {(props) => formComment(props)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport { FieldComment, FormComment };\r\n","import React, { useState, useRef } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Box from '@material-ui/core/Box';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\n// import styles-globalStyles\r\nimport globalStyles from './../../../styles/globalStyles';\r\n\r\n// import Formik and Dependency\r\nimport { Formik, Form } from 'formik';\r\nimport * as Yup from 'yup';\r\n\r\n// import utils\r\nimport { logger } from './../../../utils/utils';\r\n\r\n// import fragments { ...Tabs} , Select*, FormComment\r\nimport { AntTabs, AntTab, TabPanel, a11yProps } from './../../fragments/Tabs';\r\nimport SelectPersonalDataCategory from './../../fragments/SelectPersonalDataCategory';\r\nimport SelectPermissionLevel from './../../fragments/SelectPermissionLevel';\r\nimport SelectPermissionGroup from './../../fragments/SelectPermissionGroup';\r\nimport { FieldComment } from './../../fragments/FormComment';\r\n\r\n/**\r\n * Style\r\n */\r\nconst useStyles = makeStyles((theme) => ({\r\n ...globalStyles(theme),\r\n}));\r\n\r\n// YUP: build validation schema of form forward issue\r\nconst validateForwardShape = {\r\n // issue-forwarding validation schema\r\n issue: Yup.object().shape({\r\n category_id: Yup.string().required(\r\n 'กรุณาเลือกประเภทของข้อมูลบุคลที่ต้องการส่งต่อ'\r\n ),\r\n level: Yup.string().required('กรุณาเลือกระดับการดำเนินการที่ต้องการส่งต่อ'),\r\n permissionGroupFilter: Yup.string(),\r\n }),\r\n\r\n // comment validation schema\r\n comment: Yup.object().shape({\r\n detail: Yup.string().required('กรุณากรอกความคิดเห็น'),\r\n }),\r\n};\r\n\r\nconst validateForwardIssueSchema = Yup.object().shape(validateForwardShape);\r\n\r\n// /**\r\n// * FormForwardIssueDialog() (Component)\r\n// * @param {opject} prop\r\n// * @returns FormForwardIssueDialog\r\n// */\r\nconst FormForwardIssueDialog = React.memo(\r\n ({\r\n id,\r\n categoryId,\r\n level,\r\n permissionGroupFilter,\r\n open,\r\n onSubmit,\r\n onCancel,\r\n }) => {\r\n const classes = useStyles();\r\n\r\n logger('FormForwardIssueDialog render');\r\n\r\n const [isLoading, setLIsoading] = useState(false);\r\n // Tab - State\r\n const [antTabValue, setAntTabValue] = React.useState(0);\r\n\r\n // Tab - Handle change tab\r\n const handleChangeTab = (event, newValue) => {\r\n setAntTabValue(newValue);\r\n };\r\n\r\n // InitialVaue forward issueForwarding form\r\n const initialValues = {\r\n issue: {\r\n issue_id: id,\r\n category_id: categoryId,\r\n level: level,\r\n permissionGroupFilter: permissionGroupFilter\r\n ? permissionGroupFilter\r\n : '',\r\n },\r\n comment: {\r\n issue_id: id,\r\n issueCommentType_id: 0,\r\n receiverType: 1,\r\n detail: '',\r\n },\r\n };\r\n\r\n //\r\n const recieverTypeByTabIndex = [1, 0];\r\n\r\n // Form (of Formik) reference\r\n const formikRef = useRef(null);\r\n\r\n // Show forward issue form (Formik children)\r\n const showFormForwardIssue = ({\r\n values,\r\n setFieldValue,\r\n touched,\r\n errors,\r\n }) => {\r\n // ErrorNTouch = error and touched\r\n let isErrorNTouchIssue = errors.issue && touched.issue;\r\n let isErrorNTouchComment = errors.comment && touched.comment;\r\n return (\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 return (\r\n
\r\n \r\n ส่งต่อเหตุละเมิด\r\n \r\n \r\n \r\n ส่งต่อเหตุละเมิดไปยังผู้ดำเนินการใน\r\n ประเภทข้อมูล/ระดับชั้น/ระบุกลุ่มผู้ดูแล-ดำเนินการที่ต้องการส่ง\r\n \r\n {\r\n setSubmitting(false);\r\n // Set null for select empty permissionGroupFilter\r\n values.issue.permissionGroupFilter = values.issue\r\n .permissionGroupFilter\r\n ? values.issue.permissionGroupFilter\r\n : null;\r\n // Get receiverType from recieverTypeByTabIndex and assign to values\r\n values.comment.receiverType =\r\n recieverTypeByTabIndex[antTabValue];\r\n // onSubmit\r\n (async () => {\r\n if (onSubmit) {\r\n !isLoading && setLIsoading(true);\r\n // values are {issue, comment}\r\n await onSubmit(values);\r\n setLIsoading(false);\r\n }\r\n })();\r\n }}\r\n innerRef={formikRef}\r\n >\r\n {(props) => showFormForwardIssue(props)}\r\n \r\n \r\n \r\n {isLoading && (\r\n \r\n \r\n \r\n )}\r\n \r\n formikRef.current.submitForm()}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={isLoading}\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\nexport { FormForwardIssueDialog };\r\n","//Original with ReactDom.render\r\nimport React, { useState, useMemo, useRef, Fragment } from 'react';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Button from '@material-ui/core/Button';\r\nimport Box from '@material-ui/core/Box';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\nimport Chip from '@material-ui/core/Chip';\r\n\r\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\r\nimport PeopleAltOutlinedIcon from '@material-ui/icons/PeopleAltOutlined';\r\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nimport { LFTooltip, HtmlTooltip } from './../Tooltips';\r\n\r\n// import React-Redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport * as issueActions from './../../../actions/issue.action';\r\nimport * as issueCommentActions from './../../../actions/issueComment.action';\r\nimport * as issueLogActions from '../../../actions/issueLog.action';\r\n\r\n// import react-router-dom\r\nimport { BrowserRouter as Router, Switch, Route } from 'react-router-dom';\r\nimport { routers } from './../../../routers';\r\n\r\nimport { useHandleClientError } from './../../../utils/HttpClient';\r\n\r\n// import useSnackbar\r\nimport { useSnackbar } from 'notistack';\r\n\r\n// import constants\r\nimport { server } from './../../../constants';\r\n\r\n// import style\r\nimport { chipStyles } from './../../../styles/globalStyles/dataDisplayStyles';\r\n\r\n// import utils\r\nimport {\r\n logger,\r\n base64,\r\n userProfiler,\r\n issueOperations,\r\n isManageIssue,\r\n} from './../../../utils/utils';\r\n\r\n// import another fragment\r\nimport ButtonGroupSelectOptions from '../ButtonGroupSelectOptions';\r\nimport { LabelPicker } from './../LabelPicker';\r\nimport AutocompleteSelectOptions from '../AutocompleteSelectOptions';\r\nimport { FormForwardIssueDialog } from './../../fragments/FormDialogs';\r\nimport { ChipLabels } from './../LabelPicker';\r\n\r\nimport {\r\n useProcessStatusGetList,\r\n useProcessStatusGetListAll,\r\n useDimensionGetListAll,\r\n} from './../../../hooks/useData';\r\n\r\nconst styles = (theme) => ({\r\n ...chipStyles(theme),\r\n root: {\r\n width: '100%',\r\n maxWidth: 360,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n section1: {\r\n margin: theme.spacing(1.7),\r\n },\r\n section2: {\r\n margin: theme.spacing(2),\r\n },\r\n section3: {\r\n margin: theme.spacing(3, 1, 1),\r\n },\r\n});\r\n\r\nfunction issueTransition(data) {\r\n return data ? data : '';\r\n}\r\n\r\nconst SkeletonText = withStyles(styles)(({ classes }) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n});\r\n/**\r\n * AppSidebarRBackManageIssueActivity: App in Sidebar-Right of Back-Office\r\n */\r\nconst AppSidebarRBackManageIssueActivity = withStyles(styles)(\r\n ({ classes, match }) => {\r\n logger('AppSidebarRBack render');\r\n\r\n const issue_id = base64.decode(match.params.id);\r\n\r\n // Get user profile\r\n const upf = useMemo(() => userProfiler.getFromLocal(), []);\r\n\r\n // Hook handle-client-error (handle error in catch from promise reject)\r\n const handleClientError = useHandleClientError();\r\n\r\n // States\r\n const [openFormForward, setOpenFormForward] = useState(false);\r\n\r\n const btnSelectOptionsRef = useRef();\r\n\r\n // Hook states in reducer (by useSelector) from store\r\n const dispatch = useDispatch();\r\n const issueReducer = useSelector(({ issueReducer }) => issueReducer);\r\n\r\n // Check empty issueReducer.result assign to initail issue\r\n let issue = issueReducer.result || {};\r\n\r\n let isManageFeatures = issue.issues\r\n ? isManageIssue(\r\n issue.readOnlyStatus.readOnly,\r\n issue.issues.worker === upf.user.id,\r\n issue.issues.processStatus_id,\r\n {\r\n operation: issueOperations.features,\r\n }\r\n )\r\n : false;\r\n\r\n // Hook enqueueSnackbar from useSnackbar\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n // package parameter for request getDetail-issue\r\n const memoGetIssueDetailPackage = useMemo(\r\n () => ({\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n id: issue_id,\r\n }),\r\n }),\r\n [issue_id]\r\n );\r\n\r\n // package parameter for request getList-comment\r\n const memoGetListActivityPackage = useMemo(\r\n () => ({\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n mode: server.REQ_PARAM_MODE_STAFF,\r\n issue_id,\r\n }),\r\n }),\r\n [issue_id]\r\n );\r\n\r\n const processStatusesBiz = useProcessStatusGetList(\r\n 'TH',\r\n issue_id,\r\n issue.issues && issue.issues.processStatus_id\r\n );\r\n\r\n const processStatuses = useProcessStatusGetListAll('TH');\r\n\r\n const dimensions = useDimensionGetListAll('TH');\r\n\r\n /*******************************\r\n * PROCESS-STATUS APP FUCNTION\r\n *******************************/\r\n\r\n /**\r\n * handleChangeProcessStatus()\r\n * @param {object} props\r\n * @param {string} props.processStatus_id\r\n * @param {string} props.processStatus_name\r\n */\r\n const handleChangeProcessStatus = async ({ id, name, description }) => {\r\n // Set processStatus_idRef temp\r\n let status_id = id;\r\n if (status_id === 40) {\r\n setOpenFormForward(true);\r\n } else {\r\n try {\r\n // // Dispatch mutiple action solution 1\r\n // await dispatch(async (dispatch) => {\r\n // // https://react-redux.js.org/api/batch\r\n // // should only result in one combined re-render, not two\r\n // await batch(async () => {\r\n // // Original dispatch action (of handleChangeProcessStatus)\r\n // await dispatch(\r\n // issueActions.updateProcessStatus(\r\n // { issue_id, status_id },\r\n // {\r\n // package: base64.encodeObj({\r\n // lang: 'TH',\r\n // id: issue_id,\r\n // }),\r\n // }\r\n // )\r\n // );\r\n // // Addition: dispatch action-updateIssueLog\r\n // await dispatch(\r\n // issueLogActions.updateIssueLog(memoGetListActivityPackage)\r\n // );\r\n // });\r\n // });\r\n\r\n // Dispatch mutiple action (updateIssue, updateIssueLog) solution 2\r\n // Ref: https://github.com/reduxjs/redux-thunk\r\n // Ref: https://twitter.com/dan_abramov/status/770914221638942720\r\n // FIXME: Maybe code dispatch mutiple action got it wrong\r\n // TODO: How to chain async actions https://github.com/reduxjs/redux/issues/1676\r\n await dispatch(\r\n issueActions.updateProcessStatus({\r\n issue_id,\r\n status_id,\r\n params: memoGetIssueDetailPackage,\r\n options: { includedViewStatus: true },\r\n })\r\n ).then(\r\n // Addition: dispatch action-updateIssueLog\r\n () =>\r\n dispatch(\r\n issueLogActions.updateIssueLog(memoGetListActivityPackage)\r\n ).catch((error) => {\r\n throw error;\r\n }),\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n\r\n // If change status to recieved the api update to processing auto.\r\n // Take processStatus_id after updated assign to processStatus_idRef (It chaange value props for re-reder ButtonGroupSelectOptions)\r\n // processStatus_idRef.current = issue.issues.processStatus_id;\r\n enqueueSnackbar(`เปลี่ยนสถานะแล้ว`, {\r\n variant: 'success',\r\n });\r\n } catch (error) {\r\n btnSelectOptionsRef.current.undoSelected();\r\n handleClientError(error);\r\n }\r\n }\r\n };\r\n\r\n /******************************\r\n * DIMESION APP FUCNTION\r\n ******************************/\r\n\r\n /**\r\n * handleDimensionChange()\r\n * @param {*} e event\r\n * @param {*} v value\r\n * @returns\r\n */\r\n async function handleDimensionChange(e, v) {\r\n let dimensions = [\r\n {\r\n dimension_id: v.dimension_id,\r\n dimensionLevel_id: v.dimensionLevel_id,\r\n },\r\n ];\r\n try {\r\n // Dispatch mutiple action (updateIssueDimension, updateIssueLog) with solution 2 (Look solution 1 in handleChangeProcessStatus)\r\n await dispatch(\r\n issueActions.updateIssueDimension({\r\n id: issue_id,\r\n dimensions,\r\n params: memoGetIssueDetailPackage,\r\n options: { includedViewStatus: true },\r\n })\r\n ).then(\r\n // Addition: dispatch action-updateIssueLog\r\n () =>\r\n dispatch(\r\n issueLogActions.updateIssueLog(memoGetListActivityPackage)\r\n ).catch((error) => {\r\n throw error;\r\n }),\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n\r\n enqueueSnackbar(\r\n `ปรับปรุง ${v.dimension_name} = ${v.dimensionLevel_name} แล้ว`,\r\n {\r\n variant: 'success',\r\n }\r\n );\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n }\r\n\r\n /*****************************\r\n * FORWARD ISSUE APP FUCNTION\r\n ******************************/\r\n /**\r\n * handleSubmitForwardIssue\r\n * @param {object} props\r\n * @param {object} issueForwarding , issue object included forwarding data.\r\n * @param {object} comment , comment data\r\n */\r\n async function handleSubmitForwardIssue({ issue, comment }) {\r\n try {\r\n // Dispatch mutiple action (updateIssue, updateIssueLog) solution 2\r\n // Ref: https://github.com/reduxjs/redux-thunk\r\n // Ref: https://twitter.com/dan_abramov/status/770914221638942720\r\n\r\n await dispatch(\r\n issueActions.forwardIssue({\r\n data: issue,\r\n params: memoGetIssueDetailPackage,\r\n options: { includedViewStatus: true },\r\n })\r\n )\r\n .then(\r\n () =>\r\n dispatch(\r\n issueCommentActions.addIssueComment({\r\n issue_id,\r\n data: comment,\r\n params: memoGetListActivityPackage,\r\n })\r\n ),\r\n (error) => {\r\n throw error;\r\n }\r\n )\r\n .then(\r\n // Addition: dispatch action-updateIssueLog\r\n () =>\r\n dispatch(\r\n issueLogActions.updateIssueLog(memoGetListActivityPackage)\r\n ).catch((error) => {\r\n throw error;\r\n }),\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n setOpenFormForward(false);\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n }\r\n\r\n /****************************\r\n * LABEL APP FUCNTION\r\n ***************************/\r\n\r\n async function handleBlurLabelPicker(\r\n pendingLabels,\r\n existingLabels,\r\n updateLabelPendingToSelectedState\r\n ) {\r\n // check if pendingLabels and existingLabels equal or not, if Equal then prosess api.\r\n if (JSON.stringify(pendingLabels) !== JSON.stringify(existingLabels)) {\r\n let labels = pendingLabels.map((label) => ({\r\n label_id: label.id,\r\n }));\r\n try {\r\n // Dispatch mutiple action (updateIssueDimension, updateIssueLog) with solution 2\r\n await dispatch(\r\n issueActions.updateIssueLabel({\r\n id: issue_id,\r\n labels,\r\n params: memoGetIssueDetailPackage,\r\n options: { includedViewStatus: true },\r\n })\r\n ).then(\r\n // Addition: dispatch action-updateIssueLog\r\n () =>\r\n dispatch(\r\n issueLogActions.updateIssueLog(memoGetListActivityPackage)\r\n ).catch((error) => {\r\n throw error;\r\n }),\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n enqueueSnackbar(`ปรับปรุงป้ายกำกับแล้ว`, {\r\n variant: 'success',\r\n });\r\n updateLabelPendingToSelectedState &&\r\n updateLabelPendingToSelectedState();\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n } else {\r\n // enqueueSnackbar(`ไม่มีการติดป้ายกำกับเพิ่ม`, {\r\n // variant: 'warning',\r\n // });\r\n }\r\n }\r\n\r\n /****************************\r\n * OBSERVER APP FUCNTION\r\n ****************************/\r\n\r\n // Check this use is obsered issue.\r\n let userObserved = useMemo(\r\n () =>\r\n issue.observers\r\n ? issue.observers.find((osv) => osv.users.id === upf.user.id)\r\n : undefined,\r\n [issue.observers]\r\n );\r\n\r\n // Dialog display overservers\r\n const [observing, setObserving] = useState(false);\r\n const [openObserver, setOpenObserver] = React.useState(false);\r\n const [openConfirmUnObserve, setOpenConfirmUnObserve] = React.useState(\r\n false\r\n );\r\n\r\n const handleOpenObserverDialog = () => {\r\n setOpenObserver(true);\r\n };\r\n\r\n const handleCloseObserverDialog = () => {\r\n setOpenObserver(false);\r\n };\r\n\r\n const handleOpenConfirmUnObserve = () => {\r\n setOpenConfirmUnObserve(true);\r\n };\r\n\r\n const handleCloseConfirmUnObserve = () => {\r\n setOpenConfirmUnObserve(false);\r\n };\r\n\r\n const handleUnObserve = () => {\r\n manageObserving({ mode: 'remove' });\r\n handleCloseConfirmUnObserve();\r\n };\r\n\r\n const handleSetObserve = () => {\r\n manageObserving({ mode: 'add' });\r\n };\r\n\r\n const descriptionElementRef = React.useRef(null);\r\n React.useEffect(() => {\r\n if (openObserver) {\r\n const { current: descriptionElement } = descriptionElementRef;\r\n if (descriptionElement !== null) {\r\n descriptionElement.focus();\r\n }\r\n }\r\n }, [openObserver]);\r\n\r\n async function manageObserving({ mode = 'add' }) {\r\n let data = {\r\n issue_id,\r\n user_id: upf.user.id,\r\n };\r\n mode === 'add' && setObserving(true);\r\n try {\r\n // Dispatch mutiple action\r\n await dispatch(\r\n mode === 'add'\r\n ? issueActions.addObserver({\r\n ...data,\r\n params: memoGetIssueDetailPackage,\r\n options: { includedViewStatus: true },\r\n })\r\n : issueActions.removeObserver({\r\n ...data,\r\n params: memoGetIssueDetailPackage,\r\n options: { includedViewStatus: true },\r\n })\r\n ).then(\r\n // Addition: dispatch action-updateIssueLog\r\n () =>\r\n dispatch(\r\n issueLogActions.updateIssueLog(memoGetListActivityPackage)\r\n ).catch((error) => {\r\n throw error;\r\n }),\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n enqueueSnackbar(`${mode === 'remove' ? 'เลิก' : ''}ติดตามแล้ว`, {\r\n variant: 'success',\r\n });\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n\r\n mode === 'add' && setObserving(false);\r\n }\r\n\r\n return (\r\n
\r\n {/* Category */}\r\n {issueReducer.isLoading && }\r\n {!issueReducer.isLoading && issue.observers && (\r\n \r\n
\r\n {userObserved ? (\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 {issue.observers.length > 0 && (\r\n \r\n {' '}\r\n \r\n \r\n {' '}\r\n \r\n )}\r\n
\r\n \r\n
\r\n )}\r\n {issueReducer.isLoading && }\r\n {!issueReducer.isLoading && issue.categorys && (\r\n \r\n
\r\n \r\n \r\n ประเภทของข้อมูลส่วนบุคคล\r\n \r\n {issueTransition(issue.categorys.name)}\r\n \r\n ระดับ {issueTransition(issue.issues.level)}\r\n \r\n \r\n
\r\n \r\n
\r\n )}\r\n\r\n {/* Reporter */}\r\n {issueReducer.isLoading && }\r\n {!issueReducer.isLoading && issue.issues && (\r\n \r\n
\r\n \r\n \r\n ผู้แจ้ง{' '}\r\n \r\n {\r\n let x = document.getElementById('reporter-info');\r\n if (x.style.display === 'none') {\r\n x.style.display = 'block';\r\n } else {\r\n x.style.display = 'none';\r\n }\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n {issue.issues.fullname && (\r\n
ชื่อ: {issue.issues.fullname}
\r\n )}\r\n
\r\n {issue.issues.email &&
อีเมล: {issue.issues.email}
}\r\n {issue.issues.position && (\r\n
ตำแหน่ง: {issue.issues.position}
\r\n )}\r\n {issue.issues.department && (\r\n
ส่วนงาน: {issue.issues.department}
\r\n )}\r\n
\r\n
\r\n
\r\n \r\n
\r\n )}\r\n\r\n {/* ProcessStatus */}\r\n {issueReducer.isLoading && }\r\n {!issueReducer.isLoading && issue.issues && (\r\n \r\n
\r\n \r\n \r\n สถานะการดำเนินการ\r\n \r\n \r\n {isManageIssue(\r\n issue.readOnlyStatus.readOnly,\r\n issue.issues.worker === upf.user.id,\r\n issue.issues.processStatus_id,\r\n {\r\n operation: issueOperations.reciever,\r\n }\r\n ) ? (\r\n {\r\n return !processStatusesBiz\r\n .map((item) => item.id)\r\n .includes(option.id);\r\n }}\r\n disabledOption={(option) => option.id === 99}\r\n value={issue.issues.processStatus_id}\r\n onChange={handleChangeProcessStatus}\r\n />\r\n ) : (\r\n \r\n )}\r\n
\r\n \r\n
\r\n )}\r\n {/* FormForwardIssueDialog */}\r\n
\r\n {issue.issues && (\r\n {\r\n btnSelectOptionsRef.current.undoSelected();\r\n setOpenFormForward(false);\r\n }}\r\n />\r\n )}\r\n
\r\n\r\n {/* Worker */}\r\n {issueReducer.isLoading && }\r\n {!issueReducer.isLoading && issue.issueWorker && (\r\n \r\n
\r\n \r\n \r\n ผู้รับเรื่อง\r\n \r\n \r\n {`${issue.issueWorker.firstName} ${issue.issueWorker.lastName}`}\r\n \r\n {/* \r\n {issueTransition(issueReducer.permissionGroup_name)}\r\n */}\r\n \r\n
\r\n \r\n
\r\n )}\r\n {issueReducer.isLoading && }\r\n {!issueReducer.isLoading && issue.viewStatus && (\r\n \r\n {issue.viewStatus.filterGroup && (\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 {issue.permissionGroupFilter.name}\r\n \r\n \r\n \r\n }\r\n >\r\n \r\n \r\n \r\n {issue.permissionGroupFilter.name}\r\n \r\n
\r\n {' '}\r\n
\r\n )}\r\n
\r\n )}\r\n\r\n {/* Label */}\r\n {issueReducer.isLoading && }\r\n {!issueReducer.isLoading && issue.issues && (\r\n \r\n
\r\n {/* issue.issueLabels is array item of {labels. labelTypes} */}\r\n {isManageFeatures ? (\r\n issueLabel.labels)\r\n : []\r\n }\r\n onBlur={handleBlurLabelPicker}\r\n />\r\n ) : (\r\n \r\n \r\n \r\n ป้ายกำกับ\r\n \r\n \r\n {issue.issueLabels.length > 0 ? (\r\n issueLabel.labels\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 {/* Dimension */}\r\n {issueReducer.isLoading && }\r\n {!issueReducer.isLoading &&\r\n issue.issues &&\r\n dimensions.map((dimension, index) => {\r\n //find selected dimensionLevel of each dimentsion\r\n let valueIssueDimensionLevel = null;\r\n if (issue.issueDimensions.length > 0) {\r\n let issueDimension = issue.issueDimensions.find(\r\n (issueDimension) =>\r\n issueDimension.dimensions.id === dimension.id\r\n );\r\n\r\n // Selected option schema value for AutocompleteSelectOptions (props.value)\r\n valueIssueDimensionLevel = {\r\n dimension_id: issueDimension.dimensions.id,\r\n dimension_name: issueDimension.dimensions.name,\r\n dimensionLevel_id: issueDimension.dimensionLevels.id,\r\n dimensionLevel_name: issueDimension.dimensionLevels.name,\r\n dimensionLevel_value: issueDimension.dimensionLevels.value,\r\n };\r\n }\r\n\r\n // Options schema for AutocompleteSelectOptions (props.options)\r\n let levelOptions = dimension.levels.map((level) => ({\r\n dimension_id: dimension.id,\r\n dimension_name: dimension.name,\r\n dimensionLevel_id: level.id,\r\n dimensionLevel_name: level.name,\r\n dimensionLevel_value: level.value,\r\n }));\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n {dimension.name}\r\n \r\n \r\n \r\n {isManageFeatures ? (\r\n \r\n ) : valueIssueDimensionLevel ? (\r\n valueIssueDimensionLevel.dimensionLevel_name\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 \r\n \r\n {issue.observers && (\r\n \r\n \r\n ลำดับ\r\n ผู้ติดตาม\r\n ติดตามในฐานะ\r\n \r\n {issue.observers.map((osv, index) => (\r\n\r\n \r\n {index + 1}\r\n {`${osv.users.firstName} ${osv.users.lastName}`}\r\n \r\n {osv.observers.type === 0 ? 'คณะทำงาน' : 'ทั่วไป'}\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 \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
\r\n );\r\n }\r\n);\r\n\r\n/**\r\n * AppSidebarRBack() constist of routes and component in route.\r\n * @returns\r\n */\r\nexport default function AppSidebarRBack() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport clsx from 'clsx';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\n\r\n// import React-Redux\r\nimport { useSelector } from 'react-redux';\r\n\r\n// import react-router-dom\r\nimport { BrowserRouter as Router, Switch, Route } from 'react-router-dom';\r\nimport { routers } from './../../../routers';\r\n\r\nimport Chip from '@material-ui/core/Chip';\r\nimport { Box, Divider, Typography } from '@material-ui/core';\r\n\r\n// import statusStyles\r\nimport { processStatusStyles } from './../../../styles/globalStyles/statusStyles';\r\nimport { chipStyles } from './../../../styles/globalStyles/dataDisplayStyles';\r\n\r\n// import utils\r\nimport { logger } from './../../../utils/utils';\r\n\r\nfunction SkeletonText() {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n maxWidth: 360,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n section1: {\r\n margin: theme.spacing(3, 2),\r\n },\r\n section2: {\r\n margin: theme.spacing(2),\r\n },\r\n section3: {\r\n margin: theme.spacing(3, 1, 1),\r\n },\r\n ...processStatusStyles(theme),\r\n ...chipStyles(theme),\r\n}));\r\n\r\nconst AppSidebarRFrontIssueActivity = ({ match }) => {\r\n const classes = useStyles();\r\n\r\n logger('AppSidebarRFront render');\r\n\r\n\r\n const issue = useSelector(({ issueReducer }) => issueReducer).result || {};\r\n\r\n return (\r\n
\r\n
\r\n {!issue.categorys && }\r\n {issue.categorys && (\r\n \r\n \r\n \r\n ประเภทของข้อมูลส่วนบุคคล\r\n \r\n \r\n \r\n {issue.categorys && issue.categorys.name}\r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n {!issue.issues && }\r\n {issue.issues && (\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\r\n/**\r\n * AppSidebarRFront() constist of routes and component in route.\r\n * @returns\r\n */\r\nexport default function AppSidebarRFront() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","/**\r\n * StatusSyle consist of:\r\n * - processStatusSyles I\r\n * - ssueStatusStyle\r\n * Note: overriding-styles-with-classes https://material-ui.com/customization/components/#overriding-styles-with-classes\r\n */\r\n\r\nexport const processStatusStyles = (theme) => ({\r\n// button: {\r\n// padding: '2px 2px',\r\n// },\r\n// buttonOption: {\r\n// width: '120px',\r\n// },\r\n// buttonSelect: {\r\n// minWidth: '30px',\r\n// },\r\n// red: {\r\n// color: '#fff',\r\n// background: 'red',\r\n// },\r\n// blue: {\r\n// color: '#fff',\r\n// background: 'blue',\r\n// },\r\n successStyle: {\r\n color: '#fff',\r\n background: '#008000',\r\n },\r\n receivedStyle: {\r\n color: '#fff',\r\n background: '#4682b4',\r\n },\r\n processingStyle: {\r\n color: '#fff',\r\n background: '#4682b4',\r\n },\r\n forwardStyle: {\r\n color: '#333',\r\n background: '#b0c4de',\r\n },\r\n pendingStyle: {\r\n color: '#333',\r\n background: '#b0c4de',\r\n },\r\n});\r\n","import React from 'react';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\n// import globalStyles\r\nimport globalStyles from '../../../styles/globalStyles';\r\n\r\n// Style\r\nconst styles = (theme) => ({\r\n ...globalStyles(theme),\r\n formControl: {\r\n margin: theme.spacing(1, 0, 2, 0),\r\n },\r\n card: {\r\n minWidth: 275,\r\n },\r\n cardContent: {\r\n minHeight: 275,\r\n },\r\n section: {\r\n margin: theme.spacing(3, 0),\r\n },\r\n});\r\n\r\n/**\r\n * HelpdeskMainPage\r\n * @param {*} props\r\n */\r\nconst HelpdeskMainPage = (props) => {\r\n return (\r\n
\r\n

หน้าหลัก-แจ้งเหตุละเมิดข้อมูลส่วนบุคคล

\r\n

Under Construction

\r\n
\r\n );\r\n};\r\n\r\nexport default withStyles(styles)(HelpdeskMainPage);\r\n","import React, { Fragment } from 'react';\r\nimport { isEqual } from 'lodash';\r\n/**\r\n * Author: NRK.\r\n */\r\n\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\n// import Link from react-router-dom\r\nimport { Link } from 'react-router-dom';\r\n\r\n// import material-ui core\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport Chip from '@material-ui/core/Chip';\r\n\r\nimport VisibilityIcon from '@material-ui/icons/Visibility';\r\nimport VisibilityOutlinedIcon from '@material-ui/icons/VisibilityOutlined';\r\n\r\n// import statusStyles, chipStyles\r\nimport { chipStyles } from './../../../styles/globalStyles/dataDisplayStyles';\r\n\r\nimport { logger } from './../../../utils/utils';\r\n\r\nimport { ChipLabels } from './../LabelPicker';\r\n\r\nimport { LFTooltip } from './../Tooltips';\r\n\r\n// Styles consist of processStatusStyle\r\nconst useStyles = makeStyles((theme) => ({\r\n ...chipStyles(theme),\r\n grid: {\r\n flexGrow: 1,\r\n },\r\n}));\r\n/**\r\n * ColumnContent() (Comonent) Display summary detail in summary column (material-table)\r\n * @param {object} props *Required\r\n * @param {string} props.issueId *Required\r\n * @param {string} props.categoryName *Required\r\n * @param {string} props.summary *Required\r\n * @param {string} props.path ^Router path of issue activity\r\n * @param {string} props.reporter\r\n * @param {string} props.worker\r\n * @param {string} props.level, 1|2|3\r\n * @param {object} props.processStatus {processStatus_id, processStatus_name, processStatus_style}\r\n * @param {array} props.labels\r\n * @param {array} props.createDate\r\n * @param {array} props.modifyDate\r\n * @returns element summary detail\r\n */\r\nconst ColumnContent = ({\r\n issueId = '',\r\n categoryName = '',\r\n summary = '',\r\n path = '',\r\n reporter = '',\r\n worker = '',\r\n level = null,\r\n processStatus = null,\r\n labels = [],\r\n createDate = '',\r\n modifyDate = '',\r\n viewStatus = {},\r\n}) => {\r\n const classes = useStyles();\r\n logger('ColumnContent render');\r\n\r\n return (\r\n
\r\n \r\n \r\n {/* check observer by Is viewStatus.byCategoryAndLevel false */}\r\n {!viewStatus.byCategoryAndLevel &&\r\n (viewStatus.observerWorker || viewStatus.observer) && (\r\n \r\n \r\n \r\n {viewStatus.observerWorker ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {summary}\r\n \r\n \r\n {processStatus && (\r\n \r\n )}\r\n \r\n \r\n \r\n {/* Flexbox style */}\r\n \r\n \r\n รหัส: {issueId}\r\n \r\n \r\n วันที่แจ้ง: {createDate}\r\n \r\n \r\n ประเภท: {categoryName}\r\n \r\n {level && (\r\n \r\n ระดับ: {level}\r\n \r\n )}\r\n \r\n ผู้แจ้ง: {reporter}\r\n \r\n {worker && (\r\n \r\n ผู้รับเรื่อง: {worker}\r\n \r\n )}\r\n {/* {\r\n \r\n viewStatus: {JSON.stringify(viewStatus)}\r\n \r\n } */}\r\n {labels.length > 0 && }\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nColumnContent.propTypes = {\r\n issueId: PropTypes.string.isRequired,\r\n summary: PropTypes.string.isRequired,\r\n categoryName: PropTypes.string.isRequired,\r\n path: PropTypes.string.isRequired,\r\n reporter: PropTypes.string.isRequired,\r\n worker: PropTypes.string,\r\n processStatus: PropTypes.object,\r\n labels: PropTypes.array,\r\n createDate: PropTypes.string.isRequired,\r\n modifyDate: PropTypes.string,\r\n viewStatus: PropTypes.object,\r\n};\r\n\r\n/**\r\n * By default it will only shallowly compare complex objects in the props object.\r\n * If you want control over the comparison,\r\n * you can also provide a custom comparison function as the second argument.\r\n * https://reactjs.org/docs/react-api.html\r\n * https://stackoverflow.com/questions/63502588/avoid-rerendering-child-when-passing-object-in-props\r\n */\r\nexport default React.memo(ColumnContent, isEqual);\r\n","import React, {\r\n useState,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n forwardRef,\r\n useImperativeHandle,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { isEqual } from 'lodash';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport clsx from 'clsx';\r\n\r\n// import material-ui core\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionActions from '@material-ui/core/AccordionActions';\r\nimport InputAdornment from '@material-ui/core/InputAdornment';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormGroup from '@material-ui/core/FormGroup';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\n\r\nimport { TextField } from 'formik-material-ui';\r\n\r\n// import material-ui icon\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport TuneOutlinedIcon from '@material-ui/icons/TuneOutlined';\r\nimport SearchOutlinedIcon from '@material-ui/icons/SearchOutlined';\r\nimport HelpOutlineIcon from '@material-ui/icons/HelpOutline';\r\nimport SortIcon from '@material-ui/icons/Sort';\r\n// import {\r\n// MuiPickersUtilsProvider,\r\n// KeyboardTimePicker,\r\n// KeyboardDatePicker,\r\n// } from '@material-ui/pickers';\r\n\r\n// import Formik and Dependency\r\nimport { Formik, Form, Field } from 'formik';\r\nimport { Select, CheckboxWithLabel } from 'formik-material-ui';\r\n\r\nimport { server } from './../../../constants';\r\nimport { getPeriodDateById, logger, base64 } from './../../../utils/utils';\r\n\r\nimport { HtmlTooltip, LFTooltip } from './../../fragments/Tooltips';\r\n\r\nimport SelectPersonalDataCategory from './../SelectPersonalDataCategory';\r\nimport { useCategoryGetListByMode } from './../../../hooks/useData';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n minHeight: 20,\r\n },\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n },\r\n secondaryHeading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n color: theme.palette.text.secondary,\r\n },\r\n icon: {\r\n verticalAlign: 'bottom',\r\n height: 20,\r\n width: 20,\r\n },\r\n // https://stackoverflow.com/questions/53537680/material-ui-auto-complete-rotate-icon-on-expand-or-collapse\r\n sortDirection: {\r\n transition: theme.transitions.create(['transform'], {\r\n duration: theme.transitions.duration.short,\r\n }),\r\n },\r\n sortDirectionAsc: {\r\n transform: 'rotate(-180deg)',\r\n },\r\n sortDirectionDesc: {\r\n transform: 'rotate(0)',\r\n },\r\n details: {\r\n alignItems: 'center',\r\n },\r\n column12: {\r\n flexBasis: '99.99%',\r\n },\r\n column8: {\r\n flexBasis: '66.66%',\r\n },\r\n column4: {\r\n flexBasis: '33.33%',\r\n },\r\n}));\r\n\r\n/**\r\n * remArrayItem()\r\n * Remove item from given array\r\n * @param {any} item\r\n * @param {array} arr given array\r\n * @return {array} array of item removed\r\n */\r\nfunction remArrayItem(item, arr) {\r\n let index = arr.indexOf(item);\r\n if (index > -1) {\r\n arr.splice(index, 1);\r\n }\r\n return arr;\r\n}\r\n\r\nfunction buildContexts(contexts) {\r\n let lists = Object.keys(contexts).map((key) =>\r\n contexts[key].context\r\n ? `${contexts[key].title}: ${contexts[key].context}`\r\n : null\r\n );\r\n return lists.reduce((acc, curr) => [acc, curr ? ', ' : '', curr]);\r\n}\r\n\r\n/**\r\n * AccordionForm()\r\n * @param {object} props\r\n * @param {string} mode staff|reprter default: reporter\r\n * @param {array} sortsOptions with schema (each option) consist of {name, title}\r\n * @param {array} onFilterAndSearch Callback function(filters: object, keyword: string, sorts: object, side: string) with\r\n * @param filters filtering (object) param, consist of {dateStart,dateEnd,category_id,permissionLevels}\r\n * @param sorts sorting (object) param, consist of {name, direction} (name is a field for sorting)\r\n * @param keyword isearching (string) param,\r\n * @param side SS|CS (Server Side | Cliend Side)\r\n * @return {void}\r\n */\r\nconst AccordionForm = forwardRef(\r\n (\r\n {\r\n mode = server.REQ_PARAM_MODE_REPORTER,\r\n sortsOptions = [],\r\n onFilterAndSearch,\r\n },\r\n ref\r\n ) => {\r\n const classes = useStyles();\r\n\r\n logger('AccordionForm render');\r\n\r\n // get categories for make initail permissionLevel checkLevel when select-all\r\n let categories = useCategoryGetListByMode('TH', 'staff');\r\n\r\n // issue-filters (if) from catching (localStorage)\r\n const cacheIfs =\r\n useMemo(() => {\r\n let ifs = localStorage.getItem(server.ISSUE_FILTERS_KEY);\r\n return ifs ? base64.decodeObj(ifs) : {};\r\n }, [])[mode] || {};\r\n\r\n const sideRef = useRef(cacheIfs.side || 'SS');\r\n const cacheFilters = useMemo(() => cacheIfs.filters || {}, []);\r\n const cacheSorts = useMemo(() => cacheIfs.sorts || {}, []);\r\n const cacheKeyword = useMemo(() => cacheIfs.keyword, []);\r\n const cacheContexts = useMemo(() => cacheIfs.contexts, []);\r\n\r\n // https://material-ui.com/components/checkboxes/#checkbox (Checkbox with FormControlLabel)\r\n\r\n const initialCanSelectPermissionLevel = cacheFilters.permissionLevels || [\r\n 1,\r\n 2,\r\n 3,\r\n ];\r\n\r\n const period = getPeriodDateById(cacheFilters.period_id || '1y');\r\n\r\n const initialValues = {\r\n filters: {\r\n category_id: cacheFilters.category_id || '*',\r\n permissionLevels: initialCanSelectPermissionLevel,\r\n period_id: cacheFilters.period_id || '1y',\r\n dateStart: period.dateStart,\r\n dateEnd: period.dateEnd,\r\n },\r\n sorts: sortsOptions.length\r\n ? {\r\n title: cacheSorts.title || sortsOptions[0].title,\r\n name: cacheSorts.name || sortsOptions[0].name,\r\n direction: cacheSorts.direction || 'desc',\r\n }\r\n : {},\r\n keyword: cacheKeyword || '',\r\n contexts: cacheContexts || {\r\n category: {\r\n title: 'ประเภท',\r\n context: 'ทุกประเภท',\r\n },\r\n period: {\r\n title: 'ช่วงเวลา',\r\n context: 'ภายใน 1 ปี',\r\n },\r\n keyword: {\r\n title: 'คำค้นหา',\r\n context: '',\r\n },\r\n },\r\n };\r\n\r\n const [contexts, setContexts] = useState(\r\n buildContexts(initialValues.contexts)\r\n );\r\n\r\n // HandleFilterAndSearch(), Set argument and call onFilterAndSearch props\r\n const handleFilterAndSearch = (values) => {\r\n if (onFilterAndSearch) {\r\n let period = getPeriodDateById(values.filters.period_id);\r\n\r\n // filters parameter\r\n let filters = {\r\n ...values.filters,\r\n category_id:\r\n values.filters.category_id === '*'\r\n ? undefined\r\n : values.filters.category_id,\r\n dateStart: period.startDate,\r\n dateEnd: period.endDate,\r\n };\r\n\r\n // sorts parameter\r\n let sorts = { title: 'dynamic' };\r\n if (sortsOptions.length) {\r\n sorts = { ...sorts, ...values.sorts };\r\n }\r\n\r\n // keyword parameter\r\n let keyword = values.keyword;\r\n\r\n let contexts = {\r\n ...values.contexts,\r\n keyword: { ...values.contexts.keyword, context: keyword },\r\n };\r\n\r\n let side = sideRef.current;\r\n\r\n /**\r\n * Test issue-filters in localStorage\r\n * issue-filters is catching issue filter\r\n */\r\n\r\n // Read issue-filters from storage (by ISSUE_FILTERS_KEY)\r\n let beforeIssueFilters = localStorage.getItem(server.ISSUE_FILTERS_KEY);\r\n beforeIssueFilters = beforeIssueFilters\r\n ? base64.decodeObj(beforeIssueFilters)\r\n : {};\r\n\r\n // Check exist data in object by key reporter|staff (of props mode) & assign {} when data is not exist\r\n if (!beforeIssueFilters[mode]) {\r\n beforeIssueFilters[mode] = {};\r\n }\r\n\r\n // Assign new issue-filters data (of props mode)\r\n beforeIssueFilters[mode] = {\r\n ...beforeIssueFilters[`${mode}`],\r\n filters,\r\n keyword,\r\n sorts,\r\n contexts,\r\n side,\r\n };\r\n\r\n // Combile data of each key (reporter|staff) to new issue-filters object\r\n let newIssueFilters = {\r\n ...beforeIssueFilters,\r\n };\r\n\r\n //Set new issue-filters to localStorage\r\n localStorage.setItem(\r\n server.ISSUE_FILTERS_KEY,\r\n base64.encodeObj(newIssueFilters)\r\n );\r\n\r\n // Process filter and Search\r\n onFilterAndSearch(filters, keyword, sorts, side);\r\n\r\n // Set search title on acordionForm\r\n setContexts(buildContexts(contexts));\r\n }\r\n };\r\n // Form (of Formik) reference\r\n const formikRef = useRef(null);\r\n\r\n useImperativeHandle(ref, () => ({\r\n submitForm: () => {\r\n formikRef.current.submitForm();\r\n },\r\n }));\r\n\r\n const showFormSearch = ({\r\n values,\r\n setFieldValue,\r\n touched,\r\n errors,\r\n submitForm,\r\n }) => {\r\n const onCbChange = (e) => {\r\n let val = Number(e.target.value);\r\n let newVal = values.filters.permissionLevels.includes(val)\r\n ? remArrayItem(val, [...values.filters.permissionLevels])\r\n : [...values.filters.permissionLevels, val];\r\n setFieldValue('filters.permissionLevels', newVal);\r\n sideRef.current = 'CS';\r\n submitForm();\r\n };\r\n return (\r\n
\r\n \r\n }\r\n aria-controls=\"panel1c-content\"\r\n id=\"panel1c-header\"\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 \r\n \r\n \r\n \r\n {contexts}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n {/* Select category */}\r\n \r\n \r\n \r\n {\r\n // New\r\n setFieldValue('contexts.category.context', context);\r\n\r\n setFieldValue(\r\n 'filters.permissionLevels',\r\n initialCanSelectPermissionLevel\r\n );\r\n\r\n sideRef.current = 'SS';\r\n submitForm();\r\n }}\r\n isSelectAll={true}\r\n mode={mode}\r\n variant=\"outlined\"\r\n />\r\n \r\n {mode === server.REQ_PARAM_MODE_STAFF && (\r\n \r\n \r\n \r\n \r\n สิทธิ์การเข้าถึงเหตุละเมิดของท่าน\r\n {categories.map((cate, index) => {\r\n let l = cate.permissionLevel;\r\n return (\r\n
{`ประเภท ${cate.name} ในระดับ ${cate.permissionLevel}`}
\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 {/* Select level */}\r\n \r\n \r\n \r\n \r\n ระดับการดำเนินการ (Level){' '}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* Select date - period */}\r\n \r\n \r\n \r\n ช่วงวันที่แจ้งเหตุ\r\n \r\n {\r\n let context =\r\n typeof c.props.children === 'string'\r\n ? c.props.children\r\n : '';\r\n\r\n // New\r\n setFieldValue('contexts.period.context', context);\r\n\r\n setFieldValue('filters.period_id', e.target.value);\r\n sideRef.current = 'SS';\r\n submitForm();\r\n }}\r\n inputProps={{\r\n id: 'period_id',\r\n }}\r\n >\r\n ภายใน 1 ปี\r\n ภายใน 3 ปี\r\n ภายใน 5 ปี\r\n ทั้งหมด\r\n \r\n \r\n \r\n {sortsOptions.length > 0 && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n เรียงข้อมูลจาก\r\n \r\n {\r\n setFieldValue('sorts.name', e.target.value);\r\n setFieldValue('sorts.title', c.props.children);\r\n sideRef.current = 'CS';\r\n submitForm();\r\n }}\r\n >\r\n {sortsOptions.map((item, index) => (\r\n \r\n {item.title}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n รูปแบบการเรียง\r\n \r\n {\r\n setFieldValue('sorts.direction', e.target.value);\r\n sideRef.current = 'CS';\r\n submitForm();\r\n }}\r\n >\r\n น้อยไปมาก\r\n มากไปน้อย\r\n \r\n \r\n \r\n
\r\n )}\r\n {/* Search by keyword */}\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n }}\r\n label=\"คำค้นหา\"\r\n size=\"small\"\r\n variant=\"outlined\"\r\n />\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n {/* Remain Button type submit take onEnter of input search */}\r\n {\r\n sideRef.current = 'CS';\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 {\r\n setSubmitting(false);\r\n if (onFilterAndSearch) {\r\n handleFilterAndSearch(values);\r\n }\r\n }}\r\n innerRef={formikRef}\r\n >\r\n {(props) => showFormSearch(props)}\r\n \r\n
\r\n );\r\n }\r\n);\r\n\r\n/**\r\n * AccordionForm's propTypes\r\n */\r\nAccordionForm.propTypes = {\r\n onFilterAndSearch: PropTypes.func.isRequired,\r\n};\r\n\r\n/**\r\n * By default it will only shallowly compare complex objects in the props object.\r\n * If you want control over the comparison,\r\n * you can also provide a custom comparison function as the second argument.\r\n * https://reactjs.org/docs/react-api.html\r\n * https://stackoverflow.com/questions/63502588/avoid-rerendering-child-when-passing-object-in-props\r\n */\r\nexport default React.memo(AccordionForm, isEqual);\r\n","import React, { Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { isEqual } from 'lodash';\r\nimport CommentOutlinedIcon from '@material-ui/icons/CommentOutlined';\r\nimport PeopleAltOutlinedIcon from '@material-ui/icons/PeopleAltOutlined';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\n\r\nimport { LFTooltip, HtmlTooltip } from './../Tooltips';\r\n/**\r\n * Author: NRK.\r\n */\r\n\r\nconst ColuumnSumUp = ({\r\n permissionGroupFilterName = null,\r\n countComment,\r\n latestCommentDate = null,\r\n isIssueStatusClosed,\r\n}) => {\r\n return (\r\n
\r\n \r\n \r\n {/* Flexbox style */}\r\n \r\n \r\n {isIssueStatusClosed && 'ปิด (Closed)'}\r\n \r\n \r\n {permissionGroupFilterName && (\r\n \r\n \r\n \r\n \r\n มีการส่งต่อเรื่องแบบระบุกลุ่มผู้ดูแล-ดำเนินการ มายังกลุ่ม {permissionGroupFilterName} ที่ท่านเป็นสมาชิก\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 {countComment}{' '}\r\n
\r\n
\r\n
\r\n \r\n {countComment > 0 && `ล่าสุด ${latestCommentDate}`}\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\n// propTypes\r\nColuumnSumUp.propTypes = {\r\n permissionGroupFilterName: PropTypes.string,\r\n countComment: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.number,\r\n ]).isRequired,\r\n latestCommentDate: PropTypes.string,\r\n isIssueStatusClosed: PropTypes.bool.isRequired,\r\n};\r\n\r\n/**\r\n * By default it will only shallowly compare complex objects in the props object.\r\n * If you want control over the comparison,\r\n * you can also provide a custom comparison function as the second argument.\r\n * https://reactjs.org/docs/react-api.html\r\n * https://stackoverflow.com/questions/63502588/avoid-rerendering-child-when-passing-object-in-props\r\n */\r\nexport default React.memo(ColuumnSumUp);\r\n","import React, {\r\n useState,\r\n useEffect,\r\n useMemo,\r\n useCallback,\r\n useRef,\r\n} from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\n// import @material-ui/core\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Badge from '@material-ui/core/Badge';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\n// import Tabs\r\nimport { Tabs, Tab, TabPanel, a11yProps } from './../../fragments/Tabs';\r\n\r\n// import styles-globalStyles\r\nimport globalStyles from './../../../styles/globalStyles';\r\n\r\nimport MaterialTable, {\r\n MTableToolbar,\r\n MTableHeader,\r\n MTableBody,\r\n} from 'material-table';\r\n\r\n// import constant\r\nimport { server, sortingOptions, muiTable } from './../../../constants';\r\n\r\n// import routers constant\r\nimport { routers } from './../../../routers';\r\n\r\n// import React-Redux & Reducer action\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport * as issueActions from '../../../actions/issue.action';\r\n\r\n// import utils\r\nimport {\r\n logger,\r\n formatDatetime,\r\n base64,\r\n getPeriodDateById,\r\n} from './../../../utils/utils';\r\nimport { useHandleClientError } from './../../../utils/HttpClient';\r\n\r\n// import fragmmet\r\nimport ColumnContent from './../../fragments/ColumnContent';\r\nimport AccordionForm from './../../fragments/AccordionForm';\r\nimport ColuumnSumUp from './../../fragments/ColuumnSumUp';\r\n\r\nconst StyledBadge = withStyles((theme) => ({\r\n badge: {\r\n right: -5,\r\n top: 2,\r\n border: `1px solid ${theme.palette.background.paper}`,\r\n padding: '2px',\r\n },\r\n}))(Badge);\r\n\r\n/**\r\n * styles\r\n * @param {*} theme\r\n */\r\nconst styles = (theme) => ({\r\n ...globalStyles(theme),\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.paper,\r\n '& .MuiCardContent-root': {\r\n padding: theme.spacing(1),\r\n },\r\n },\r\n avatarSmall: {\r\n fontSize: '9px',\r\n fontWeight: 'normal',\r\n width: theme.spacing(3),\r\n height: theme.spacing(3),\r\n },\r\n appBar: {\r\n boxShadow: 'none',\r\n borderBottom: '1px solid #e8e8e8',\r\n },\r\n // https://stackoverflow.com/questions/55078256/how-to-change-the-position-of-an-icon-component-within-a-tab-component\r\n iconLabelWrapperReverse: {\r\n flexDirection: 'row-reverse',\r\n },\r\n toolbarWrapper: {\r\n '& .MuiToolbar-regular': {\r\n minHeight: 0,\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * HelpdeskIssuesPage component\r\n * @param {*} props\r\n */\r\nconst HelpdeskIssuesPage = (props) => {\r\n // Classes extend from widthStyle(style)\r\n const { classes } = props;\r\n\r\n logger('HelpdeskIssuesPage render');\r\n\r\n const routFrontOf = routers.frontOf;\r\n\r\n // Hook handle-client-error\r\n const handleClientError = useHandleClientError();\r\n\r\n // TabPanel state & handle function\r\n const [tabValue, setTabValue] = React.useState(0);\r\n\r\n // TabPanel handle function\r\n const handleChangeTab = (event, newValue) => {\r\n setTabValue(newValue);\r\n };\r\n\r\n // Hook reducer V2) Destructure multiple reducer by one useSelector\r\n const issueListReducer = useSelector(\r\n ({ issueListReducer }) => issueListReducer\r\n );\r\n\r\n // Hook reducer (by useSelector) from store\r\n const dispatch = useDispatch();\r\n\r\n // Ref accordionForm\r\n const accordionFormRef = useRef(null);\r\n\r\n // Check is badgeContent assign data from getList (server-side)\r\n let isSeverBadgeContentRef = useRef(true);\r\n\r\n // issue-filters from catching (localStorage)\r\n const cacheIfs =\r\n useMemo(() => {\r\n let ifs = localStorage.getItem(server.ISSUE_FILTERS_KEY);\r\n return ifs ? base64.decodeObj(ifs) : {};\r\n }, []).reporter || {};\r\n const cacheFilters = useMemo(() => cacheIfs.filters || {}, []);\r\n const cacheSorts = useMemo(() => cacheIfs.sorts || {}, []);\r\n const cacheKeyword = useMemo(() => cacheIfs.keyword || '', []);\r\n\r\n useEffect(() => {\r\n // Must use cache period_id but dont use cache date\r\n let { dateStart, dateEnd } = getPeriodDateById(\r\n cacheFilters.period_id || '1y'\r\n );\r\n\r\n dispatch(\r\n issueActions.getList({\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n mode: server.REQ_PARAM_MODE_REPORTER,\r\n\r\n // Must use cache date from period_id but dont use cache date\r\n dateStart: dateStart,\r\n dateEnd: dateEnd,\r\n\r\n category_id: cacheFilters.category_id || undefined, // default category_id all (Cancel category_id prop by undefined value)\r\n }),\r\n })\r\n ).then(\r\n () => {\r\n setBadgeContent({\r\n open: mtOpenRef.current.state.data.length,\r\n close: mtCloseRef.current.state.data.length,\r\n all: mtAllRef.current.state.data.length,\r\n });\r\n },\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n return () => {\r\n logger('clearList');\r\n dispatch(issueActions.clearList());\r\n };\r\n }, []);\r\n\r\n const memoIssueListOpen = useMemo(\r\n () =>\r\n issueListReducer.result\r\n ? issueListReducer.result.filter(\r\n (issue) => issue.issueStatuses.id === 10\r\n )\r\n : [],\r\n [issueListReducer.result]\r\n );\r\n\r\n const memoIssueListClose = useMemo(\r\n () =>\r\n issueListReducer.result\r\n ? issueListReducer.result.filter(\r\n (issue) => issue.issueStatuses.id === 90\r\n )\r\n : [],\r\n [issueListReducer.result]\r\n );\r\n\r\n // Ref of material-table\r\n const mtOpenRef = useRef({});\r\n const mtCloseRef = useRef({});\r\n const mtAllRef = useRef({});\r\n\r\n // Ref of material-table toolbar (ref onSearchChange func)\r\n const mtToolbarOpenRef = useRef();\r\n const mtToolbarCloseRef = useRef();\r\n const mtToolbarAllRef = useRef();\r\n\r\n // Ref of material-table header (ref props.onOrderChange (sorting) func)\r\n const mtHeaderOpenRef = useRef();\r\n const mtHeaderCloseRef = useRef();\r\n const mtHeaderAllRef = useRef();\r\n\r\n // Ref of material-table body (ref props.onFilterChanged (fitering) func)\r\n const mtBodyOpenRef = useRef();\r\n const mtBodyCloseRef = useRef();\r\n const mtBodyAllRef = useRef();\r\n\r\n // Ref of material-table sorting (keep sorting value)\r\n const [sortingCol, setSortingCol] = useState({\r\n name: cacheSorts.name || sortingOptions.issues[0].name,\r\n title: cacheSorts.title || sortingOptions.issues[0].title,\r\n direction: cacheSorts.direction || 'desc',\r\n });\r\n\r\n // Ref of material-table filter (keep filtering value)\r\n const [filteringCol, setFilteringCol] = useState({\r\n name: 'issues.level',\r\n title: 'ระดับ',\r\n term: cacheFilters.permissionLevels || [1, 2, 3],\r\n customFilterAndSearch: (term, rowData) => {\r\n return term.includes(rowData.issues.level);\r\n },\r\n });\r\n\r\n const badgeMax = 9999;\r\n\r\n const [badgeContent, setBadgeContent] = useState({\r\n open: 0,\r\n close: 0,\r\n all: 0,\r\n });\r\n\r\n // useEffect 1st setBadgeContent\r\n useEffect(() => {\r\n if (issueListReducer.result && isSeverBadgeContentRef.current) {\r\n logger('(1) setBadgeContent depend on issueListReducer');\r\n setBadgeContent({\r\n open: memoIssueListOpen.length,\r\n close: memoIssueListClose.length,\r\n all: issueListReducer.result.length,\r\n });\r\n isSeverBadgeContentRef.current = false;\r\n }\r\n }, [issueListReducer.result]);\r\n\r\n // useEffect sortingCol\r\n useEffect(() => {\r\n mtHeaderOpenRef.current.props.onOrderChange(0, sortingCol.direction);\r\n mtHeaderCloseRef.current.props.onOrderChange(0, sortingCol.direction);\r\n mtHeaderAllRef.current.props.onOrderChange(0, sortingCol.direction);\r\n logger('useEffect onOrderChange');\r\n }, [sortingCol]);\r\n\r\n // useEffect filteringCol\r\n useEffect(() => {\r\n mtBodyOpenRef.current.props.onFilterChanged(1, filteringCol.term);\r\n mtBodyCloseRef.current.props.onFilterChanged(1, filteringCol.term);\r\n mtBodyAllRef.current.props.onFilterChanged(1, filteringCol.term);\r\n logger('useEffect onOrderChange');\r\n }, [filteringCol]);\r\n\r\n // Memo (func) handle search. (props onSearch of AccordionForm)\r\n const memoHandleSearchAndFilter = useCallback(\r\n async (\r\n {\r\n // SSP\r\n dateStart,\r\n dateEnd,\r\n category_id,\r\n permissionLevels,\r\n },\r\n keyword,\r\n { title, name, direction },\r\n side\r\n ) => {\r\n // Search (updating) (Do not check keyword that is existed or ever searched, course of material-table ref.searchText (form prev search) not clear)\r\n logger('search');\r\n mtToolbarOpenRef.current.onSearchChange(keyword);\r\n mtToolbarCloseRef.current.onSearchChange(keyword);\r\n mtToolbarAllRef.current.onSearchChange(keyword);\r\n\r\n // set sortingCol (updating)\r\n if (sortingCol.name !== name || sortingCol.direction !== direction) {\r\n logger('sort');\r\n setSortingCol({ title, name, direction });\r\n }\r\n\r\n // set fiteringCol (updating)\r\n if (filteringCol.term !== permissionLevels) {\r\n logger('filter');\r\n setFilteringCol((prev) => ({ ...prev, term: permissionLevels }));\r\n }\r\n\r\n if (side === 'SS') {\r\n isSeverBadgeContentRef.current = true;\r\n // Set isFilterAndSearch for prevent repleat useEffect 1st setBadgeContent\r\n // getList new data\r\n logger('getList');\r\n await dispatch(\r\n issueActions.getList({\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n mode: server.REQ_PARAM_MODE_REPORTER,\r\n dateStart,\r\n dateEnd,\r\n category_id,\r\n }),\r\n })\r\n ).catch((error) => handleClientError(error));\r\n }\r\n },\r\n [sortingCol, filteringCol]\r\n );\r\n\r\n // Memo (func) customFilterAndSearchSummary\r\n const memoCustomFilterAndSearchContent = useCallback((term, rowData) => {\r\n let searchSource = [\r\n rowData.issues.shortId,\r\n formatDatetime({ datetime: rowData.issues.createDate }),\r\n rowData.categorys.name,\r\n rowData.issues.summary,\r\n rowData.issues.fullname,\r\n rowData.processStatuses.name,\r\n ].join(' ');\r\n // Search and return result\r\n return searchSource.indexOf(term) != -1;\r\n }, []);\r\n\r\n const renderColumnContent = (rowData) => (\r\n \r\n issueLabel.labels)\r\n : []\r\n }\r\n />\r\n \r\n );\r\n\r\n const renderColumnSumUp = (rowData) => {\r\n // Fixed: (20240104) AJ. RAMA Submit incident but after that incident transaction not show.\r\n let latestCommentDate = rowData.IssueComments?.IssueCommentsLast\r\n ? formatDatetime({\r\n datetime: rowData.IssueComments.IssueCommentsLast.createDate,\r\n })\r\n : null;\r\n return (\r\n \r\n );\r\n };\r\n\r\n return (\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\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n ,\r\n Toolbar: (props) => (\r\n
\r\n \r\n
\r\n ),\r\n Header: (props) => (\r\n \r\n ),\r\n Body: (props) => ,\r\n }}\r\n tableRef={mtOpenRef}\r\n title=\"\"\r\n /**\r\n * Bug:\r\n * column as a variable couse of Material-Table (reder dat arow) freezes Browser\r\n * Issue:\r\n * Material Table freezes Browser (https://github.com/mbrn/material-table/issues/2451)\r\n * Fixed:\r\n * He puts column as a variable and put it outside the react component. His browser always hangs\r\n * but if he puts it directly in the props column it works fine, He is using version v.1.69.0\r\n */\r\n columns={[\r\n // Col 0: createDate (วันที่แจ้ง), for fiter (on server) and sort, hidden column\r\n {\r\n title: sortingCol.title,\r\n field: sortingCol.name,\r\n hidden: true,\r\n defaultSort: 'desc',\r\n },\r\n\r\n // Col 1: issue level (ระดับ), for fiter (on client), hidden column\r\n {\r\n title: filteringCol.title,\r\n field: filteringCol.name,\r\n hidden: true,\r\n defaultFilter: filteringCol.term,\r\n customFilterAndSearch: filteringCol.customFilterAndSearch,\r\n },\r\n {\r\n title: 'รายการเหตุละเมิด',\r\n cellStyle: {\r\n width: '85%',\r\n maxWidth: '85%',\r\n },\r\n field: 'issues.summary',\r\n customFilterAndSearch: memoCustomFilterAndSearchContent,\r\n sorting: false,\r\n render: renderColumnContent,\r\n },\r\n {\r\n cellStyle: {\r\n width: 160,\r\n },\r\n sorting: false,\r\n render: renderColumnSumUp,\r\n },\r\n ]}\r\n data={memoIssueListOpen}\r\n onSearchChange={() => {\r\n if (!isSeverBadgeContentRef.current) {\r\n badgeContent.open != mtOpenRef.current.state.data.length &&\r\n setBadgeContent({\r\n open: mtOpenRef.current.state.data.length,\r\n close: mtCloseRef.current.state.data.length,\r\n all: mtAllRef.current.state.data.length,\r\n });\r\n }\r\n }}\r\n options={{\r\n ...muiTable.options,\r\n search: false, // Hidden default materail-table search input\r\n searchText: cacheKeyword,\r\n }}\r\n localization={muiTable.localization}\r\n />\r\n
\r\n \r\n ,\r\n Toolbar: (props) => (\r\n
\r\n \r\n
\r\n ),\r\n Header: (props) => (\r\n \r\n ),\r\n Body: (props) => ,\r\n }}\r\n tableRef={mtCloseRef}\r\n title=\"\"\r\n /**\r\n * Bug:\r\n * column as a variable couse of Material-Table freezes Browser\r\n * Issue:\r\n * Material Table freezes Browser (https://github.com/mbrn/material-table/issues/2451)\r\n * Fixed:\r\n * He puts column as a variable and put it outside the react component. His browser always hangs\r\n * but if he puts it directly in the props column it works fine, He is using version v.1.69.0\r\n */\r\n columns={[\r\n // Col 0: createDate (วันที่แจ้ง), for fiter (on server) and sort, hidden column\r\n {\r\n title: sortingCol.title,\r\n field: sortingCol.name,\r\n hidden: true,\r\n defaultSort: 'desc',\r\n },\r\n\r\n // Col 1: issue level (ระดับ), for fiter (on client), hidden column\r\n {\r\n title: filteringCol.title,\r\n field: filteringCol.name,\r\n hidden: true,\r\n defaultFilter: filteringCol.term,\r\n customFilterAndSearch: filteringCol.customFilterAndSearch,\r\n },\r\n {\r\n title: 'รายการเหตุละเมิด',\r\n cellStyle: {\r\n width: '85%',\r\n maxWidth: '85%',\r\n },\r\n field: 'issues.summary',\r\n customFilterAndSearch: memoCustomFilterAndSearchContent,\r\n sorting: false,\r\n render: renderColumnContent,\r\n },\r\n {\r\n cellStyle: {\r\n width: 160,\r\n },\r\n sorting: false,\r\n render: renderColumnSumUp,\r\n },\r\n ]}\r\n data={memoIssueListClose}\r\n onSearchChange={() => {\r\n if (!isSeverBadgeContentRef.current) {\r\n badgeContent.close != mtCloseRef.current.state.data.length &&\r\n setBadgeContent({\r\n open: mtOpenRef.current.state.data.length,\r\n close: mtCloseRef.current.state.data.length,\r\n all: mtAllRef.current.state.data.length,\r\n });\r\n }\r\n }}\r\n options={{\r\n ...muiTable.options,\r\n search: false, // Hidden default materail-table search input\r\n searchText: cacheKeyword,\r\n }}\r\n localization={muiTable.localization}\r\n />\r\n
\r\n \r\n ,\r\n Toolbar: (props) => (\r\n
\r\n \r\n
\r\n ),\r\n Header: (props) => ,\r\n Body: (props) => ,\r\n }}\r\n tableRef={mtAllRef}\r\n title=\"\"\r\n /**\r\n * Bug:\r\n * column as a variable couse of Material-Table freezes Browser\r\n * Issue:\r\n * Material Table freezes Browser (https://github.com/mbrn/material-table/issues/2451)\r\n * Fixed:\r\n * He puts column as a variable and put it outside the react component. His browser always hangs\r\n * but if he puts it directly in the props column it works fine, He is using version v.1.69.0\r\n */\r\n columns={[\r\n // Col 0: createDate (วันที่แจ้ง), for filtering (on server) and sort, hidden column\r\n {\r\n title: sortingCol.title,\r\n field: sortingCol.name,\r\n hidden: true,\r\n defaultSort: 'desc',\r\n },\r\n\r\n // Col 1: issue level (ระดับ), for filtering (on client), hidden column\r\n {\r\n title: filteringCol.title,\r\n field: filteringCol.name,\r\n hidden: true,\r\n defaultFilter: filteringCol.term,\r\n customFilterAndSearch: filteringCol.customFilterAndSearch,\r\n },\r\n {\r\n title: 'รายการเหตุละเมิด',\r\n cellStyle: {\r\n width: '85%',\r\n maxWidth: '85%',\r\n },\r\n field: 'issues.summary',\r\n customFilterAndSearch: memoCustomFilterAndSearchContent,\r\n sorting: false,\r\n render: renderColumnContent,\r\n },\r\n {\r\n cellStyle: {\r\n width: 160,\r\n },\r\n sorting: false,\r\n render: renderColumnSumUp,\r\n },\r\n ]}\r\n data={issueListReducer.result || []}\r\n onSearchChange={() => {\r\n if (!isSeverBadgeContentRef.current) {\r\n badgeContent.all != mtAllRef.current.state.data.length &&\r\n setBadgeContent({\r\n open: mtOpenRef.current.state.data.length,\r\n close: mtCloseRef.current.state.data.length,\r\n all: mtAllRef.current.state.data.length,\r\n });\r\n }\r\n }}\r\n options={{\r\n ...muiTable.options,\r\n search: false, // Hidden default materail-table search input\r\n searchText: cacheKeyword,\r\n }}\r\n localization={muiTable.localization}\r\n />\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(HelpdeskIssuesPage);\r\n","import React from 'react';\r\nimport clsx from 'clsx';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { grey } from '@material-ui/core/colors';\r\n\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport PersonOutlineOutlinedIcon from '@material-ui/icons/PersonOutlineOutlined';\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n overflow: 'hidden',\r\n padding: theme.spacing(2, 1),\r\n },\r\n avatar: {\r\n margin: theme.spacing(1,0),\r\n color: theme.palette.getContrastText(grey[300]),\r\n backgroundColor: grey[300],\r\n },\r\n small: {\r\n width: theme.spacing(3.9),\r\n height: theme.spacing(3.9),\r\n },\r\n large: {\r\n width: theme.spacing(7),\r\n height: theme.spacing(7),\r\n },\r\n});\r\nconst GridAvatar = React.memo(({ classes, size='medium', image, name, children }) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n { (!image && name) && name}\r\n { !image && !name && }\r\n \r\n \r\n \r\n {children}\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default withStyles(styles)(GridAvatar);\r\n","import React, { useState, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { isEqual } from 'lodash';\r\nimport clsx from 'clsx';\r\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Box from '@material-ui/core/Box';\r\nimport Button from '@material-ui/core/Button';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\nimport Chip from '@material-ui/core/Chip';\r\n\r\n// import styles-globalStyles\r\nimport globalStyles from './../../../styles/globalStyles';\r\nimport { chipStyles } from './../../../styles/globalStyles/dataDisplayStyles';\r\n\r\nimport EditOutlinedIcon from '@material-ui/icons/EditOutlined';\r\nimport ContactsOutlinedIcon from '@material-ui/icons/ContactsOutlined';\r\nimport SentimentSatisfiedOutlinedIcon from '@material-ui/icons/SentimentSatisfiedOutlined';\r\nimport SentimentDissatisfiedOutlinedIcon from '@material-ui/icons/SentimentDissatisfiedOutlined';\r\n\r\n// import react-router\r\nimport { Prompt } from 'react-router-dom';\r\n\r\n// import Formik and Dependency\r\nimport { Formik, Form, Field } from 'formik';\r\nimport { TextField } from 'formik-material-ui';\r\nimport * as Yup from 'yup';\r\n\r\nimport GridAvatar from './../../fragments/GridAvatar';\r\nimport DropFiles from './../../fragments/DropFiles';\r\n\r\nimport { logger, openOriginalImage } from './../../../utils/utils';\r\n\r\nimport { file } from '../../../data';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n ...globalStyles(theme),\r\n ...chipStyles(theme),\r\n card: {\r\n minWidth: 250,\r\n maxWidth: 930,\r\n position: 'relative',\r\n },\r\n cardHeader: {\r\n padding: theme.spacing(2),\r\n '& > *': {\r\n margin: theme.spacing(0),\r\n },\r\n },\r\n cardAction: {\r\n width: '100%',\r\n justifyContent: 'flex-end',\r\n '& > *': {\r\n margin: theme.spacing(1),\r\n },\r\n },\r\n\r\n contentWidth: {\r\n maxWidth: 860,\r\n },\r\n\r\n formIssueWidth: {\r\n maxWidth: 890,\r\n },\r\n\r\n breakWord: {\r\n wordBreak: 'break-word',\r\n whiteSpace: 'pre-wrap',\r\n MozWhiteSpace: 'pre-wrap',\r\n },\r\n\r\n pos: {\r\n marginBottom: theme.spacing(4),\r\n },\r\n\r\n // Style thumb-image\r\n thumbsContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n marginTop: 16,\r\n },\r\n\r\n thumb: {\r\n //display: 'inline-flex',\r\n borderRadius: 2,\r\n border: '1px dashed #eaeaea',\r\n marginBottom: 20,\r\n marginRight: 8,\r\n maxWidth: 500,\r\n // minHeight: 150,\r\n padding: 4,\r\n boxSizing: 'border-box',\r\n },\r\n thumbInner: {\r\n display: 'flex',\r\n minWidth: 0,\r\n overflow: 'hidden',\r\n },\r\n\r\n img: {\r\n display: 'block',\r\n [theme.breakpoints.up('xs')]: {\r\n width: '100%',\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n width: '100%',\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n maxWidth: 500,\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n maxWidth: 500,\r\n },\r\n height: '100%',\r\n },\r\n}));\r\n\r\n// YUP: build validation schema (validationSchema)\r\nconst validationSchema = Yup.object().shape({\r\n summary: Yup.string()\r\n .min(4, 'เรื่องโดยสรุปต้องมากกว่า 4 อักขระ')\r\n .max(255, 'เรื่องโดยสรุปต้องไม่เกิน 255 อักขระ')\r\n .required('กรุณากรอกเรื่องโดยสรุป'),\r\n description: Yup.string()\r\n .min(4, 'รายละเอียดต้องมากกว่า 4 อักขระ')\r\n .max(8000, 'รายละเอียดต้องไม่เกิน 8,000 อักขระ')\r\n .required('กรุณากรอกรายละเอียด'),\r\n contract: Yup.string()\r\n .min(4, 'ข้อมูลการติดต่อเพิ่มเติมต้องมากกว่า 4 อักขระ')\r\n .max(255, 'ข้อมูลการติดต่อเพิ่มเติมต้องไม่เกิน 255 อักขระ')\r\n .nullable(true),\r\n});\r\n\r\nconst linkOriginalImage = (issue_id, file_id) => {\r\n file\r\n .original({ issue_id, file_id })\r\n .then((data) => {\r\n openOriginalImage(data.content);\r\n })\r\n .catch((error) => alert('Error openFileOriginal'));\r\n};\r\n\r\n/**\r\n * IssueCard() (Conponent)\r\n * @param {object} prop\r\n * @param {string} summary, summary title\r\n * @param {string} description\r\n * @param {string} contract\r\n * @param {number} vote\r\n * @param {string} createDate\r\n * @param {string} reporter, issue-reporter name\r\n * @param {object} avatar, {name, image}\r\n * @param {string} modifyDate, modify date\r\n * @param {string} modifier, issue-modifier (modifyBy)\r\n * @param {array} thumbnails,\r\n * @param {bool} editing [default: false] Set true if user can edit issue;\r\n * @param {bool} isClosed [default: false]\r\n * @param {bool} closing [default: false] Set true if user can close issue;\r\n * @param {func} onDroppedFiles,\r\n * @param {func} onRemovedFile,\r\n * @param {func} onSubmit,\r\n * @param {func} onClose, Callback voted (id: GIID (issue id), vote: int) => void\r\n * @returns IssueCard element\r\n */\r\n\r\nconst IssueCard = ({\r\n id,\r\n summary,\r\n description,\r\n contract,\r\n vote,\r\n createDate,\r\n reporter,\r\n avatar = {\r\n image: undefined,\r\n name: undefined,\r\n },\r\n modifyDate = null,\r\n modifier = null,\r\n thumbnails = [],\r\n editing = false,\r\n isClosed = false,\r\n closing = false,\r\n onDroppedFiles,\r\n onRemovedFile,\r\n onSubmit,\r\n onClose,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n logger('IssueCard render');\r\n\r\n // InitialVaue of form reporting breach\r\n const initialValues = {\r\n id,\r\n summary,\r\n description,\r\n contract,\r\n };\r\n\r\n // Ref, dropFilesRef\r\n const dropFilesRef = useRef();\r\n\r\n // State isEdit, thumbnails\r\n const [isEdit, setIsEdit] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const showFormIssue = ({ values, resetForm, touched, errors }) => {\r\n return (\r\n \r\n
\r\n \r\n \r\n {closing && !isClosed && (\r\n \r\n ปิด\r\n \r\n )}\r\n \r\n }\r\n title={\r\n \r\n \r\n \r\n {reporter}\r\n \r\n \r\n \r\n \r\n เมื่อ: {createDate}\r\n \r\n \r\n \r\n {isClosed ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n }\r\n subheader=\"\"\r\n />\r\n \r\n \r\n {!isEdit && (\r\n
\r\n {/* Box : issue summary, icon addition, icon edit */}\r\n \r\n \r\n \r\n {summary}\r\n \r\n \r\n \r\n \r\n {\r\n let x = document.getElementById('more');\r\n if (x.style.display === 'none') {\r\n x.style.display = 'block';\r\n } else {\r\n x.style.display = 'none';\r\n }\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n {editing && (\r\n \r\n \r\n {\r\n setIsEdit(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {/* Typography : issue description */}\r\n \r\n \r\n {description}\r\n
\r\n \r\n\r\n {/* Typography : issue addition info */}\r\n \r\n \r\n \r\n ข้อมูลเพิ่มเติม\r\n \r\n {contract && (\r\n \r\n \r\n ข้อมูลการติดต่อเพิ่มเติม\r\n \r\n \r\n \r\n {contract}\r\n \r\n \r\n \r\n )}\r\n\r\n {vote != null && (\r\n \r\n \r\n ข้อมูลการโหวด\r\n \r\n \r\n {vote === 1 && (\r\n \r\n {' '}\r\n พึงพอใจ\r\n \r\n )}\r\n {vote === 0 && (\r\n \r\n {' '}\r\n ไม่พึงพอใจ\r\n \r\n )}\r\n \r\n \r\n )}\r\n \r\n\r\n {/* Apply thumbs style from Dropzone preview component */}\r\n \r\n \r\n )}\r\n {isEdit && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {onDroppedFiles && (\r\n \r\n )}\r\n \r\n )}\r\n
\r\n {isEdit && (\r\n \r\n )}\r\n \r\n {!isEdit && modifyDate && modifier && (\r\n \r\n \r\n \r\n แก้ไขล่าสุด เมื่อ: {modifyDate}\r\n \r\n \r\n โดย: {modifier}\r\n \r\n \r\n \r\n )}\r\n {isEdit && (\r\n \r\n \r\n บันทึก\r\n \r\n {\r\n e.preventDefault();\r\n resetForm();\r\n setIsEdit(false);\r\n }}\r\n disabled={isLoading}\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 };\r\n return (\r\n
\r\n {\r\n setSubmitting(false);\r\n\r\n // dropFilesRef (ref of DropFiles) has new files and also existFiles is included\r\n // Note: existFiles in dropFilesRef is data (existFiles) assigned to existFiles (become DropFiles's prop), look DropFiles statement\r\n\r\n let issueFiles = [\r\n ...dropFilesRef.current.files.map((file) => file.id),\r\n ].join(',');\r\n\r\n let reqData = {\r\n id: values.id,\r\n summary: values.summary,\r\n description: values.description,\r\n contract: values.contract,\r\n issueFiles,\r\n };\r\n // onSubmit\r\n (async () => {\r\n if (onSubmit) {\r\n !isLoading && setIsLoading(true);\r\n // values are {issue, comment}\r\n await onSubmit(reqData);\r\n setIsLoading(false);\r\n setIsEdit(false);\r\n }\r\n })();\r\n }}\r\n >\r\n {(props) => showFormIssue(props)}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * IssueCard's propTypes\r\n */\r\nIssueCard.propTypes = {\r\n reporter: PropTypes.string,\r\n createDate: PropTypes.string,\r\n summary: PropTypes.string,\r\n description: PropTypes.string,\r\n contract: PropTypes.string,\r\n avatar: PropTypes.object,\r\n thumbnails: PropTypes.array,\r\n isClosed: PropTypes.bool,\r\n closing: PropTypes.bool,\r\n editing: PropTypes.bool,\r\n onDroppedFiles: PropTypes.func,\r\n onRemovedFile: PropTypes.func,\r\n onSubmit: PropTypes.func,\r\n};\r\n\r\n/**\r\n * By default it will only shallowly compare complex objects in the props object.\r\n * If you want control over the comparison,\r\n * you can also provide a custom comparison function as the second argument.\r\n * https://reactjs.org/docs/react-api.html\r\n * https://stackoverflow.com/questions/63502588/avoid-rerendering-child-when-passing-object-in-props\r\n */\r\nexport default React.memo(IssueCard, isEqual);\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { isEqual } from 'lodash';\r\nimport clsx from 'clsx';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardHeader from '@material-ui/core/CardHeader';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport Box from '@material-ui/core/Box';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\n// import utils\r\nimport { openOriginalImage, logger } from './../../../utils/utils';\r\n\r\n// import material-icon\r\nimport EditOutlinedIcon from '@material-ui/icons/EditOutlined';\r\nimport SupervisorAccountOutlinedIcon from '@material-ui/icons/SupervisorAccountOutlined';\r\nimport SettingsIcon from '@material-ui/icons/Settings';\r\n\r\nimport { FormComment } from '../FormComment';\r\n\r\nimport * as file from '../../../data/file';\r\nimport { useThumbnails } from '../../../hooks/useFile';\r\n\r\nimport GridAvatar from './../../fragments/GridAvatar';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n overflow: 'hidden',\r\n padding: theme.spacing(2, 0),\r\n },\r\n card: {\r\n minWidth: 250,\r\n maxWidth: 930,\r\n },\r\n // bullet: {\r\n // display: 'inline-block',\r\n // margin: '0 2px',\r\n // transform: 'scale(0.8)',\r\n // },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n contentWidth: {\r\n maxWidth: 860,\r\n },\r\n formCommentWidth: {\r\n maxWidth: 890,\r\n },\r\n breakWord: {\r\n wordBreak: 'break-word',\r\n whiteSpace: 'pre-wrap',\r\n MozWhiteSpace: 'pre-wrap',\r\n },\r\n // Style thumb-image\r\n thumbsContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n marginTop: 16,\r\n },\r\n\r\n thumb: {\r\n //display: 'inline-flex',\r\n borderRadius: 2,\r\n border: '1px dashed #eaeaea',\r\n marginBottom: 20,\r\n marginRight: 8,\r\n maxWidth: 500,\r\n // minHeight: 150,\r\n padding: 4,\r\n boxSizing: 'border-box',\r\n },\r\n thumbInner: {\r\n display: 'flex',\r\n minWidth: 0,\r\n overflow: 'hidden',\r\n },\r\n\r\n img: {\r\n display: 'block',\r\n [theme.breakpoints.up('xs')]: {\r\n width: '100%',\r\n },\r\n [theme.breakpoints.up('sm')]: {\r\n width: '100%',\r\n },\r\n [theme.breakpoints.up('md')]: {\r\n maxWidth: 500,\r\n },\r\n [theme.breakpoints.up('lg')]: {\r\n maxWidth: 500,\r\n },\r\n height: '100%',\r\n },\r\n}));\r\n\r\nconst linkOriginalImage = (issue_id, file_id) => {\r\n file\r\n .original({ issue_id, file_id })\r\n .then((data) => {\r\n openOriginalImage(data.content);\r\n })\r\n .catch((error) => alert('Error linkOriginalImage'));\r\n};\r\n\r\n/**\r\n * CommentCard() (Conponent)\r\n * @param {object} props\r\n * data props\r\n * @param {int} props.id, [issue-] comment-id\r\n * @param {int} props.issueId, issue id\r\n * @param {int} props.issueCommentTypeId, comment-type-id\r\n * @param {string} props.issueCommentTypeName, comment-type-name\r\n * @param {string} props.issueCommentTypeDescription, comment-type-description\r\n * @param {int} props.receiverType, receiver-type (0, 1)\r\n * @param {int} props.detail, comment-detail\r\n * @param {int} props.commentFiles, string fileIds with , delimitor\r\n * @param {string} creater, comment-creater (createBy)\r\n * @param {string} createDate, string create-date\r\n * @param {string} modifier, comment-modifier (modifyBy)\r\n * @param {string} modifyDate, string modify-date\r\n * feature props\r\n * @param {bool} editing, [default: false] Set true if user can edit issue;\r\n * @param {bool} receiverTapping defalut: false\r\n * event props\r\n * @param {func} onDroppedFiles, function(filesBase64: array, data: object) => void\r\n * @param {func} onRemovedFile,\r\n * @param {func} onSubmit, function(dataUpdated) => void\r\n * @return\r\n */\r\nconst CommentCard = ({\r\n // data props\r\n id = undefined,\r\n issueId = '',\r\n issueCommentTypeId = -1,\r\n issueCommentTypeName = null,\r\n issueCommentTypeDescription = null,\r\n receiverType = null,\r\n detail = '',\r\n commentFiles = null,\r\n creater = '',\r\n avatar = {\r\n image: undefined,\r\n name: undefined,\r\n },\r\n createDate = '',\r\n modifier = '',\r\n modifyDate = '',\r\n // feature props\r\n editing,\r\n receiverTapping = false,\r\n // event props\r\n onDroppedFiles,\r\n onRemovedFile,\r\n onSubmit,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n logger('CommentCard render');\r\n\r\n const [isEdit, setIsEdit] = useState(false);\r\n\r\n const thumbnails = useThumbnails(issueId, commentFiles);\r\n\r\n const handleCancel = () => {\r\n setIsEdit(false);\r\n };\r\n\r\n const handleSubmit = async (data) => {\r\n if (onSubmit) {\r\n await onSubmit(data);\r\n }\r\n setIsEdit(false);\r\n };\r\n\r\n const handleDroppedFiles = (newFiles, extendNewFiles) => {\r\n if (onDroppedFiles) {\r\n onDroppedFiles(newFiles, extendNewFiles);\r\n }\r\n };\r\n const cardHeader = {\r\n action: (\r\n \r\n {!isEdit && editing && (\r\n \r\n \r\n {\r\n setIsEdit(true);\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ),\r\n title: (\r\n \r\n {' '}\r\n \r\n \r\n {creater}\r\n \r\n \r\n \r\n \r\n เมื่อ: {createDate}\r\n \r\n \r\n {receiverType === 1 && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ),\r\n subheader:\r\n !isEdit && receiverType === 1 && issueCommentTypeName ? (\r\n \r\n \r\n {issueCommentTypeId > 0 && (\r\n \r\n )}{' '}\r\n {issueCommentTypeName}\r\n \r\n \r\n ) : null,\r\n };\r\n return (\r\n \r\n {!isEdit && (\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n {detail}\r\n
\r\n \r\n {/* Apply thumbs style from Dropzone preview component */}\r\n \r\n
\r\n
\r\n\r\n {modifyDate && modifier && (\r\n \r\n \r\n \r\n \r\n แก้ไขล่าสุด เมื่อ: {modifyDate}\r\n \r\n \r\n โดย: {modifier}\r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n )}\r\n {isEdit && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * CommentCard's propTypes\r\n */\r\nCommentCard.propTypes = {\r\n id: PropTypes.string,\r\n issueId: PropTypes.string,\r\n issueCommentTypeId: PropTypes.number,\r\n receiverType: PropTypes.number,\r\n detail: PropTypes.string,\r\n commentFiles: PropTypes.string,\r\n creater: PropTypes.string,\r\n avatar: PropTypes.object,\r\n createDate: PropTypes.string,\r\n modifier: PropTypes.string,\r\n modifyDate: PropTypes.string,\r\n receiverTapping: PropTypes.bool,\r\n onDroppedFiles: PropTypes.func,\r\n onRemovedFile: PropTypes.func,\r\n onSubmit: PropTypes.func,\r\n};\r\n\r\n/**\r\n * By default it will only shallowly compare complex objects in the props object.\r\n * If you want control over the comparison,\r\n * you can also provide a custom comparison function as the second argument.\r\n * https://reactjs.org/docs/react-api.html\r\n * https://stackoverflow.com/questions/63502588/avoid-rerendering-child-when-passing-object-in-props\r\n */\r\nexport default React.memo(CommentCard, isEqual);\r\n","import { useMemo, useState, useEffect } from 'react';\r\nimport { file } from './../data';\r\nimport { logger } from './../utils/utils';\r\n\r\n/**\r\n * useThumbnails\r\n * Hook: image-file thumbnails\r\n * @return {array} thumbnails\r\n *\r\n */\r\nexport function useThumbnails(issue_id, commentFiles) {\r\n // Hook thumbnails **Must memo files (Because files are dependency of useThumbnails)\r\n logger('useThumbnails render');\r\n\r\n const [data, setData] = useState([]);\r\n useEffect(() => {\r\n let files = commentFiles ? commentFiles.split(',') : [];\r\n file\r\n .thumbnails({ issue_id, files })\r\n .then((contents) => {\r\n setData(contents);\r\n })\r\n .catch((error) => {\r\n console.error('use thumbnail error, ', error);\r\n });\r\n }, [commentFiles]);\r\n return data;\r\n}\r\n","import React, { Fragment } from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport Divider from '@material-ui/core/Divider';\r\n\r\n//<-- *Log component, import chip, chipStyles\r\nimport Chip from '@material-ui/core/Chip';\r\nimport { ChipLabels } from './../../fragments/LabelPicker';\r\nimport { chipStyles } from './../../../styles/globalStyles/dataDisplayStyles';\r\n\r\n// import utils\r\nimport { logger, formatDatetime } from './../../../utils/utils';\r\n\r\n// *Log component, issueModes object\r\nconst issueModes = {\r\n issueCreate: { mode: 'issueCreate', name: 'แจ้งเหตุละเมิด' },\r\n issueEditTitle: { mode: 'issueEditTitle', name: 'แก้ไขเรื่องเหตุละเมิด' },\r\n issueEditDetail: {\r\n mode: 'issueEditDetail',\r\n name: 'แก้ไขรายละเอียดเหตุละเมิด',\r\n },\r\n issueEditContract: {\r\n mode: 'issueEditContract',\r\n name: 'แก้ไขข้อมูลการติดต่อเพิ่มเติม',\r\n },\r\n issueTransfer: { mode: 'issueTransfer', name: 'ส่งต่อเหตุละเมิด' },\r\n issueStatusSet: { mode: 'issueStatusSet', name: 'ปรับปรุงสถานะเหตุละเมิด' },\r\n processStatusSet: {\r\n mode: 'processStatusSet',\r\n name: 'ปรับปรุงสถานะดำเนินการ',\r\n },\r\n issueLabelSet: { mode: 'issueLabelSet', name: 'ปรับปรุงป้ายกำกับ' },\r\n issueDimensionSet: { mode: 'issueDimensionSet', name: 'ปรับปรุงตัวชี้วัด' },\r\n issueCommentCreate: { mode: 'issueCommentCreate', name: 'เพิ่มความคิดเห็น' },\r\n issueCommentEdit: { mode: 'issueCommentEdit', name: 'แก้ไขความคิดเห็น' },\r\n addObserver: { mode: 'addObserver', name: 'ติดตาม' },\r\n removeObserver: { mode: 'removeObserver', name: 'เลิกติดตาม' },\r\n voteSet: { mode: 'voteSet', name: 'โหวด' },\r\n};\r\n\r\n// *Log component, transformIssueMode()\r\nconst transformIssueMode = (issueMode) => {\r\n if (issueModes.hasOwnProperty(issueMode)) {\r\n return issueModes[issueMode].name;\r\n } else {\r\n return 'อื่นๆ';\r\n }\r\n};\r\n\r\nconst styles = (theme) => ({\r\n // *Log component, chipStyles()\r\n ...chipStyles(theme),\r\n});\r\n\r\nconst LogCard = React.memo(({ logs, classes }) => {\r\n logger('LogCard reder');\r\n\r\n return (\r\n
\r\n {logs.map((log) => {\r\n let issueLogsContext = log.issueLogs.context\r\n ? JSON.parse(log.issueLogs.context)\r\n : {};\r\n log.issueLogs.mode === 'issueDimensionSet' &&\r\n logger({ issueLogsContext });\r\n return (\r\n
\r\n \r\n {/* Flexbox style */}\r\n \r\n {log.issueLogsCreateBy && (\r\n \r\n {`${log.issueLogsCreateBy.firstName} ${log.issueLogsCreateBy.lastName}`}\r\n \r\n )}\r\n\r\n {/* Component in array joining: https://stackoverflow.com/questions/34034038/how-to-render-react-components-by-using-map-and-join/54381375 */}\r\n {log.issueLogs && (\r\n \r\n {log.issueLogs.mode && (\r\n \r\n {transformIssueMode(log.issueLogs.mode)}\r\n \r\n )}\r\n \r\n {log.issueLogs.mode === issueModes.issueCreate.mode && (\r\n เรื่อง: {issueLogsContext.summary}\r\n )}\r\n {log.issueLogs.mode === issueModes.addObserver.mode && (\r\n \r\n {[\r\n // ตำแหน่ง,\r\n // issueLogsContext.position,\r\n // ส่วนงาน,\r\n // issueLogsContext.department,\r\n ในฐานะ,\r\n issueLogsContext.type === 'Subscribe' ? 'ทั่วไป (Subscribe)' : 'คณะทำงาน (Worker)',\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode ===\r\n issueModes.removeObserver.mode && (\r\n \r\n {[\r\n // ตำแหน่ง,\r\n // issueLogsContext.position,\r\n // ส่วนงาน,\r\n // issueLogsContext.department,\r\n [\r\n '(ในฐานะ ',\r\n issueLogsContext.type === 'Subscribe'\r\n ? 'ทั่วไป (Subscribe)'\r\n : 'คณะทำงาน (Worker)',\r\n ')',\r\n ].join(''),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode ===\r\n issueModes.issueEditTitle.mode && (\r\n \r\n {[\r\n ...(issueLogsContext.before\r\n ? [\r\n จาก,\r\n issueLogsContext.before.title,\r\n ]\r\n : ['']),\r\n ...(issueLogsContext.after\r\n ? [\r\n เป็น,\r\n issueLogsContext.after.title,\r\n ]\r\n : ['']),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode ===\r\n issueModes.issueEditDetail.mode && (\r\n \r\n {[\r\n ...(issueLogsContext.before\r\n ? [\r\n จาก,\r\n issueLogsContext.before.detail,\r\n ]\r\n : ['']),\r\n ...(issueLogsContext.after\r\n ? [\r\n เป็น,\r\n issueLogsContext.after.detail,\r\n ]\r\n : ['']),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode ===\r\n issueModes.issueEditContract.mode && (\r\n \r\n {[\r\n ...(issueLogsContext.before\r\n ? [\r\n จาก,\r\n issueLogsContext.before.contract,\r\n ]\r\n : ['']),\r\n ...(issueLogsContext.after\r\n ? [\r\n เป็น,\r\n issueLogsContext.after.contract,\r\n ]\r\n : ['']),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode === issueModes.issueTransfer.mode && (\r\n \r\n {[\r\n ...(issueLogsContext.before\r\n ? [\r\n จาก,\r\n `ประเภท: ${issueLogsContext.before.category.name}`,\r\n `, ระดับ: ${issueLogsContext.before.level}`,\r\n issueLogsContext.before.permissionGroup\r\n ? `, กลุ่ม: ${issueLogsContext.before.permissionGroup.name}`\r\n : '',\r\n ]\r\n : ['']),\r\n ...(issueLogsContext.after\r\n ? [\r\n เป็น,\r\n `ประเภท: ${issueLogsContext.after.category.name}`,\r\n `, ระดับ: ${issueLogsContext.after.level}`,\r\n issueLogsContext.after.permissionGroup\r\n ? `, กลุ่ม: ${issueLogsContext.after.permissionGroup.name}`\r\n : '',\r\n ]\r\n : ['']),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode === issueModes.voteSet.mode && (\r\n \r\n {[\r\n ...(issueLogsContext\r\n ? [\r\n issueLogsContext.vote == 1\r\n ? 'พึงพอใจ'\r\n : 'ไม่พึงพอใจ',\r\n ]\r\n : ['']),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode ===\r\n issueModes.issueStatusSet.mode && (\r\n \r\n {[\r\n ...(issueLogsContext.before\r\n ? [\r\n จาก,\r\n ,\r\n ]\r\n : ['']),\r\n ,\r\n ...(issueLogsContext.after\r\n ? [\r\n เป็น,\r\n ,\r\n ]\r\n : ['n/a']),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode ===\r\n issueModes.processStatusSet.mode && (\r\n \r\n {[\r\n ...(issueLogsContext.before\r\n ? [\r\n จาก,\r\n ,\r\n ]\r\n : ['']),\r\n ,\r\n ...(issueLogsContext.after\r\n ? [\r\n เป็น,\r\n ,\r\n ]\r\n : ['n/a']),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode === issueModes.issueLabelSet.mode && (\r\n \r\n {[\r\n ...(issueLogsContext.remove.length\r\n ? [\r\n นำออก,\r\n ,\r\n ]\r\n : ['']), // Add [''] prevent error of Reduce of empty array with no initial value\r\n ...(issueLogsContext.add.length\r\n ? [\r\n เพิ่ม,\r\n ,\r\n ]\r\n : ['']),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode ===\r\n issueModes.issueDimensionSet.mode && (\r\n \r\n {issueLogsContext.after\r\n .map((dimA, index) => {\r\n let dimB = issueLogsContext.before[index];\r\n return [\r\n ...(dimB\r\n ? [\r\n `${dimA.name}`,\r\n จาก,\r\n dimB.levelName,\r\n `(${dimB.value})`,\r\n ]\r\n : [dimA.name]),\r\n เป็น,\r\n `${dimA.levelName} (${dimA.value})`,\r\n ].reduce((prev, curr) => [prev, ' ', curr]);\r\n })\r\n .reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode === 'issueCommentCreate' && (\r\n \r\n {[\r\n `ประเภท: ${issueLogsContext.commentType}`,\r\n issueLogsContext.receiverType\r\n ? `ผู้รับ: ${issueLogsContext.receiverType}`\r\n : '',\r\n `รายละเอียด: ${issueLogsContext.detail}`,\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n {log.issueLogs.mode ===\r\n issueModes.issueCommentEdit.mode && (\r\n \r\n {[\r\n `ประเภท: ${issueLogsContext.before.commentType}`,\r\n issueLogsContext.before.receiverType\r\n ? `ผู้รับ: ${issueLogsContext.before.receiverType}`\r\n : '',\r\n ...(issueLogsContext.before\r\n ? [\r\n จาก,\r\n `${issueLogsContext.before.detail}`,\r\n ]\r\n : ['']),\r\n ...(issueLogsContext.after\r\n ? [\r\n เป็น,\r\n `${issueLogsContext.after.detail}`,\r\n ]\r\n : ['']),\r\n ].reduce((prev, curr) => [prev, ' ', curr])}\r\n \r\n )}\r\n \r\n \r\n เมื่อ:{' '}\r\n {formatDatetime({\r\n datetime: log.issueLogs.createDate,\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\nexport default withStyles(styles)(LogCard);\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\n\r\n// Dialog vote depedency\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormLabel from '@material-ui/core/FormLabel';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\n\r\nimport ThumbsUpDownIcon from '@material-ui/icons/ThumbsUpDown';\r\n\r\n// import React-Redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\n// import globalStyles\r\nimport globalStyles from '../../../styles/globalStyles';\r\n\r\n// import useSnackbar\r\nimport { useSnackbar } from 'notistack';\r\n\r\n// import constants\r\nimport { server } from './../../../constants';\r\n\r\n// import utils\r\nimport {\r\n userProfiler,\r\n formatDatetime,\r\n logger,\r\n base64,\r\n} from './../../../utils/utils';\r\n\r\n// import hooks\r\nimport { useHandleClientError } from '../../../utils/HttpClient';\r\n\r\n// import fragments Tabs\r\nimport { Tabs, Tab, TabPanel, a11yProps } from './../../fragments/Tabs';\r\n\r\n//import Fragment AppSidebarRFront, IssueCard, CommentCard, FormComment & etc.\r\nimport IssueCard from './../../fragments/IssueCard';\r\nimport CommentCard from './../../fragments/CommentCard';\r\nimport LogCard from './../../fragments/LogCard';\r\nimport { FormComment } from './../../fragments/FormComment';\r\nimport GridAvatar from './../../fragments/GridAvatar';\r\n\r\nimport * as issueActions from '../../../actions/issue.action';\r\nimport * as issueCommentActions from '../../../actions/issueComment.action';\r\nimport * as issueLogActions from '../../../actions/issueLog.action';\r\n\r\n// import file data\r\nimport { file } from './../../../data';\r\n\r\n// Styles declaration\r\nconst styles = (theme) => ({\r\n ...globalStyles(theme),\r\n root: {\r\n margin: theme.spacing(1),\r\n },\r\n formCommentControl: {\r\n maxWidth: 890,\r\n margin: theme.spacing(4, 0, 1, 0),\r\n },\r\n card: {\r\n minWidth: 275,\r\n margin: theme.spacing(5, 0),\r\n padding: theme.spacing(0, 1, 1, 1),\r\n },\r\n cardContent: {\r\n minHeight: 200,\r\n },\r\n section: {\r\n margin: theme.spacing(1),\r\n },\r\n // https://stackoverflow.com/questions/61056265/how-to-override-box-created-by-tabpanel-in-material-ui\r\n tabPanel: {\r\n '&>:first-child': {\r\n padding: theme.spacing(3, 0.5),\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * CommentCardList() (Component), Show multiple CommentCard with comments prop.\r\n * @param {object} props\r\n * @param {array} props.data list of comment data.\r\n * @param {func} props.onSubmitByComment function(dataUpdated) => void\r\n * @param {func} props.onDroppedFilesByComment function(filesBase64: array, data: object) => void\r\n * @param {func} props.onRemovedFileByComment\r\n */\r\nconst CommentCardList = React.memo(\r\n ({\r\n data = [],\r\n userProfile,\r\n onSubmitByComment,\r\n onDroppedFilesByComment,\r\n onRemovedFileByComment,\r\n }) => {\r\n logger('CommentCardList render');\r\n\r\n if (!data.length) {\r\n return (\r\n \r\n \r\n ไม่มีความคิดเห็น\r\n \r\n \r\n );\r\n } else {\r\n return data.map((comment, index) => {\r\n return (\r\n \r\n );\r\n });\r\n }\r\n }\r\n);\r\n\r\nconst HelpdeskIssueActivitiesPage = React.memo((props) => {\r\n // Classes extend from widthStyle(style)\r\n const { classes, match } = props;\r\n\r\n // logger (Dev only)\r\n logger('HelpdeskIssueActivitiesPage render');\r\n\r\n const issue_id = base64.decode(match.params.id);\r\n\r\n const upf = userProfiler.getFromLocal();\r\n\r\n // Hook enqueueSnackbar from useSnackbar\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n // Hook handle-client-error (handle error in catch from promise reject)\r\n const handleClientError = useHandleClientError();\r\n\r\n // package parameter for request getList-comment\r\n const getListActivityPackage = {\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n mode: server.REQ_PARAM_MODE_REPORTER,\r\n issue_id,\r\n }),\r\n };\r\n\r\n // package parameter for request getDetail-issue\r\n const getIssueDetailPackage = {\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n id: issue_id,\r\n }),\r\n };\r\n\r\n // Hook reducer (by useSelector) from store\r\n const dispatch = useDispatch();\r\n\r\n // Hook reducer V2) Destructure multiple reducer by one useSelector\r\n let { issueReducer, issueCommentReducer, issueLogReducer } = useSelector(\r\n ({ issueReducer, issueCommentReducer, issueLogReducer }) => ({\r\n issueReducer,\r\n issueCommentReducer,\r\n issueLogReducer,\r\n })\r\n );\r\n\r\n // Check empty issueReducer.result assign to issue\r\n let issue = issueReducer.result || {};\r\n\r\n // Check empty issueCommentReducer.result assign to comments\r\n let comments = issueCommentReducer.result || [];\r\n\r\n let logs = issueLogReducer.result || [];\r\n\r\n // dispatch getIssueDetail, getIssueComment\r\n useEffect(() => {\r\n try {\r\n if (match.params.id) {\r\n dispatch(issueActions.getIssueDetail(getIssueDetailPackage))\r\n .then(\r\n () =>\r\n dispatch(\r\n issueCommentActions.getIssueComment(getListActivityPackage)\r\n ),\r\n (error) => {\r\n throw error;\r\n }\r\n )\r\n .then(\r\n () =>\r\n dispatch(\r\n issueLogActions.getIssueLog(getListActivityPackage)\r\n ).catch((error) => {\r\n throw error;\r\n }),\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n }\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n }, []);\r\n\r\n // Handle update issue\r\n const handleUpdateIssue = async (data) => {\r\n try {\r\n await dispatch(\r\n issueActions.updateIssue({ data, params: getIssueDetailPackage })\r\n );\r\n enqueueSnackbar(`แก้ไขข้อมูลแล้ว`, {\r\n variant: 'success',\r\n });\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n };\r\n\r\n const [openVote, setOpenVote] = useState(false);\r\n const [voteValue, setVoteValue] = useState(null);\r\n\r\n // Handle open issue.processStatuses.id === 90\r\n const handleOpenVote = () => {\r\n if (issue.processStatuses.id === 90) {\r\n voteValue && setVoteValue(null);\r\n setOpenVote(true);\r\n }\r\n };\r\n\r\n // Handle close voting\r\n const handleCloseVote = () => {\r\n setOpenVote(false);\r\n };\r\n\r\n // Handle vote issue\r\n const handleChangeVote = (event) => {\r\n setVoteValue(event.target.value);\r\n };\r\n\r\n // Handle process voting\r\n const handleVote = async () => {\r\n try {\r\n await dispatch(\r\n issueActions.setVote({\r\n issue_id,\r\n vote: voteValue,\r\n params: getIssueDetailPackage,\r\n })\r\n );\r\n enqueueSnackbar(`โหวดแล้ว`, {\r\n variant: 'success',\r\n });\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n handleCloseVote();\r\n };\r\n\r\n // Handle add comment-issue (form submit)\r\n const handleAddComment = async (data) => {\r\n await dispatch(\r\n issueCommentActions.addIssueComment({\r\n issue_id,\r\n data,\r\n params: getListActivityPackage,\r\n })\r\n );\r\n enqueueSnackbar(`เพิ่มความคิดเห็นแล้ว`, {\r\n variant: 'success',\r\n });\r\n };\r\n\r\n // Handle update comment (form submit)\r\n const handleUpdateComment = async (data) => {\r\n await dispatch(\r\n issueCommentActions.updateIssueComment({\r\n issue_id,\r\n data,\r\n params: getListActivityPackage,\r\n })\r\n );\r\n enqueueSnackbar(`แก้ไขความคิดเห็นแล้ว`, {\r\n variant: 'success',\r\n });\r\n };\r\n\r\n // Handle update files of comment (form submit)\r\n const handleDropFilesByComment = async (newFiles, extendNewFiles) => {\r\n // Save file (file.save, request api image/vx/save) and get filesSaved\r\n let filesSaved = await file.save({\r\n data: newFiles.map((file) => ({\r\n issue_id,\r\n name: file.name,\r\n type: file.type,\r\n content: file.base64,\r\n })),\r\n });\r\n\r\n // Callback, Add file id (in filesSaved, field: id) to files (each nfile)\r\n await extendNewFiles((nfile) => {\r\n let fileSaved = filesSaved.find((fs) => fs.name === nfile.name);\r\n if (fileSaved !== undefined) {\r\n return { id: fileSaved.id };\r\n }\r\n return { id: 'n/a' };\r\n });\r\n };\r\n\r\n // TabPanel state & handle function\r\n const [tabValue, setTabValue] = React.useState(0);\r\n\r\n // TabPanel handle function\r\n const handleChangeTab = (event, newValue) => {\r\n setTabValue(newValue);\r\n };\r\n\r\n /* Issue card data from url parameter (rest) */\r\n // let rest = base64.decodeObj(match.params.rest);\r\n\r\n return (\r\n
\r\n {/* issue loading (by Skeleton) */}\r\n {issueReducer.isLoading && (\r\n }>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {/* Issue card data from API */}\r\n {!issueReducer.isLoading && issue.issues && (\r\n {\r\n // Save file (file.save, request api image/vx/save) and get filesSaved\r\n let filesSaved = await file.save({\r\n data: newFiles.map((file) => ({\r\n issue_id,\r\n name: file.name,\r\n type: file.type,\r\n content: file.base64,\r\n })),\r\n });\r\n\r\n // Callback, Add file id (in filesSaved, field: id) to files (each nfile)\r\n await extendNewFiles((nfile) => {\r\n let fileSaved = filesSaved.find((fs) => fs.name === nfile.name);\r\n if (fileSaved !== undefined) {\r\n return { id: fileSaved.id };\r\n }\r\n return { id: 'n/a' };\r\n });\r\n }}\r\n onSubmit={handleUpdateIssue}\r\n isClosed={issue.issueStatuses.id === 90}\r\n closing={issue.processStatuses.id === 90}\r\n onClose={handleOpenVote}\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 \r\n \r\n {/* issue loading (by Skeleton) */}\r\n {issueCommentReducer.isLoading && (\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {/* Display list of comment */}\r\n {!issueCommentReducer.isLoading && (\r\n \r\n )}\r\n \r\n {/* Form add new comment */}\r\n {\r\n // Save file (file.save, request api image/vx/save) and get filesSaved\r\n let filesSaved = await file.save({\r\n data: newFiles.map((file) => ({\r\n issue_id,\r\n name: file.name,\r\n type: file.type,\r\n content: file.base64,\r\n })),\r\n });\r\n\r\n // Callback, Add file id (in filesSaved, field: id) to files (each nfile)\r\n await extendNewFiles((nfile) => {\r\n let fileSaved = filesSaved.find(\r\n (fs) => fs.name === nfile.name\r\n );\r\n if (fileSaved !== undefined) {\r\n return { id: fileSaved.id };\r\n }\r\n return { id: 'n/a' };\r\n });\r\n }}\r\n onSubmit={handleAddComment}\r\n formControlStyle={classes.formCommentControl}\r\n />\r\n \r\n \r\n \r\n \r\n
\r\n {!issueLogReducer.isLoading && }\r\n
\r\n
\r\n\r\n {/* Dialog Vote */}\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 } label=\"พึงพอใจ\" />\r\n }\r\n label=\"ไม่พึงพอใจ\"\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\r\nexport default withStyles(styles)(HelpdeskIssueActivitiesPage);\r\n","/**\r\n * HelpdeskReportIssuePage v2 ReleaseAPI (under construction)\r\n */\r\n\r\nimport React, { useState, useRef } from 'react';\r\n\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\n// import @material-ui/core\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport CardActions from '@material-ui/core/CardActions';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Box from '@material-ui/core/Box';\r\nimport Button from '@material-ui/core/Button';\r\n\r\n// import react-router\r\nimport { Link, Prompt } from 'react-router-dom';\r\n\r\n// import Formik and Dependency\r\nimport { Formik, Form, Field } from 'formik';\r\nimport { TextField } from 'formik-material-ui';\r\nimport * as Yup from 'yup';\r\n\r\n// import globalStyles\r\nimport globalStyles from '../../../styles/globalStyles';\r\n\r\n// import router and routers (routers constant)\r\nimport { routers } from './../../../routers';\r\n\r\n// import utils (utils, HttpClient)\r\nimport { userProfiler, logger } from './../../../utils/utils';\r\nimport { useHandleClientError } from './../../../utils/HttpClient';\r\n\r\n// import Fragments\r\n// import FileGridList from './../../fragments/FileGridList';\r\nimport SelectPersonalDataCategory from './../../fragments/SelectPersonalDataCategory';\r\nimport DropFiles from './../../fragments/DropFiles';\r\n\r\nimport { issue, file } from './../../../data';\r\nimport { useIssueCreateId } from './../../../hooks/useData';\r\n\r\n// Styles\r\nconst styles = (theme) => ({\r\n ...globalStyles(theme),\r\n root: {\r\n margin: theme.spacing(1),\r\n [theme.breakpoints.up('sm')]: {\r\n margin: theme.spacing(1, 10, 1, 10),\r\n },\r\n },\r\n formControl: {\r\n margin: theme.spacing(1, 0),\r\n },\r\n formControlOutlined: {\r\n margin: theme.spacing(2, 0),\r\n },\r\n card: {\r\n minWidth: 275,\r\n padding: theme.spacing(2),\r\n },\r\n cardContent: {\r\n minHeight: 275,\r\n },\r\n cardAction: {\r\n justifyContent: 'flex-end',\r\n '& > *': {\r\n margin: theme.spacing(1, 3, 1, 1),\r\n },\r\n },\r\n section: {\r\n margin: theme.spacing(3, 0),\r\n },\r\n});\r\n\r\n// YUP: build validation schema (validationSchema)\r\nconst validationSchema = Yup.object().shape({\r\n category_id: Yup.string().required(\r\n 'กรุณาเลือกประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด'\r\n ),\r\n summary: Yup.string()\r\n .min(4, 'เรื่องโดยสรุปต้องมากกว่า 4 อักขระ')\r\n .max(255, 'เรื่องโดยสรุปต้องไม่เกิน 255 อักขระ')\r\n .required('กรุณากรอกเรื่องโดยสรุป'),\r\n description: Yup.string()\r\n .min(4, 'รายละเอียดต้องมากกว่า 4 อักขระ')\r\n .max(8000, 'รายละเอียดต้องไม่เกิน 8,000 อักขระ')\r\n .required('กรุณากรอกรายละเอียด'),\r\n contract: Yup.string()\r\n .min(4, 'ข้อมูลการติดต่อเพิ่มเติมต้องมากกว่า 4 อักขระ')\r\n .max(255, 'ข้อมูลการติดต่อเพิ่มเติมต้องไม่เกิน 255 อักขระ')\r\n .nullable(true),\r\n});\r\n\r\nconst HelpdeskReportIssuePage = (props) => {\r\n // logger (Dev only)\r\n logger(`HelpdeskReportIssuePage render`);\r\n\r\n // Classes extend from widthStyle(style)\r\n const { classes, history } = props;\r\n\r\n // Get user profile\r\n const userProfile = userProfiler.getFromLocal();\r\n\r\n // Hook handle-client-error (handle error in catch from promise reject)\r\n const handleClientError = useHandleClientError();\r\n\r\n // routFrontOf is the front office router info.\r\n const routFrontOf = routers.frontOf;\r\n\r\n // const isSave\r\n const [isSave, setIsSave] = useState(false);\r\n\r\n // Hook createId\r\n const { id, shortId, createDate } = useIssueCreateId();\r\n // logger({id:, shortId, createDate });\r\n\r\n // InitialVaue of form reporting breach\r\n const initialValues = {\r\n id,\r\n shortId,\r\n category_id: '',\r\n fullname: userProfile.user.fullname,\r\n position: userProfile.user.position,\r\n keycode: userProfile.user.keycode,\r\n department: userProfile.user.department,\r\n summary: '',\r\n description: '',\r\n email: userProfile.user.email,\r\n contract: '',\r\n issueFiles: [],\r\n };\r\n const dropFilesRef = useRef();\r\n // Show from reporting breach\r\n const showFormReportBreach = ({\r\n values,\r\n setFieldValue,\r\n resetForm,\r\n touched,\r\n errors,\r\n }) => {\r\n return (\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 \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 \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 \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {\r\n \r\n // Save file (file.save, request api image/vx/save) and get filesSaved\r\n let filesSaved = await file.save({\r\n data: newFiles.map((file) => ({\r\n issue_id: id,\r\n name: file.name,\r\n type: file.type,\r\n content: file.base64,\r\n })),\r\n });\r\n\r\n\r\n // Callback (use extendNewFiles), Add file id (from filesSaved, field: id) to files (each nfile)\r\n await extendNewFiles((nfile) => {\r\n let fileSaved = filesSaved.find(\r\n (fs) => fs.name === nfile.name\r\n );\r\n if (fileSaved !== undefined) {\r\n return { id: fileSaved.id };\r\n }\r\n return { id: 'n/a' };\r\n });\r\n }}\r\n />\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n {\r\n e.preventDefault();\r\n resetForm();\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 return (\r\n
\r\n {\r\n setSubmitting(false);\r\n let reqIssue = {\r\n id,\r\n shortId,\r\n category_id: values.category_id,\r\n fullname: values.fullname,\r\n position: values.position,\r\n department: values.department,\r\n keycode: values.keycode,\r\n email: values.email,\r\n summary: values.summary,\r\n description: values.description,\r\n contract: values.contract,\r\n // // Personal/System information\r\n // createBy: values.createBy,\r\n issueFiles: dropFilesRef.current.files\r\n .map((file) => file.id)\r\n .join(','),\r\n };\r\n\r\n // logger(reqIssue);\r\n setIsSave(true);\r\n // POST Request addIssue\r\n issue\r\n .addIssue({ issue: reqIssue })\r\n .then((result) => {\r\n history.push(routers.frontOf.issues.path);\r\n })\r\n .catch((error) => handleClientError(error));\r\n }}\r\n >\r\n {(props) => showFormReportBreach(props)}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default withStyles(styles)(HelpdeskReportIssuePage);\r\n","import React, {\r\n useState,\r\n useEffect,\r\n useMemo,\r\n useCallback,\r\n useRef,\r\n} from 'react';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Badge from '@material-ui/core/Badge';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\n\r\n// import tabs\r\nimport { Tabs, Tab, TabPanel, a11yProps } from './../../fragments/Tabs';\r\n\r\n// import styles-globalStyles\r\nimport globalStyles from './../../../styles/globalStyles';\r\n\r\nimport MaterialTable, {\r\n MTableToolbar,\r\n MTableHeader,\r\n MTableBody,\r\n} from 'material-table';\r\n\r\n// import constant\r\nimport { sortingOptions, server, muiTable } from './../../../constants';\r\n\r\n// import routers constant\r\nimport { routers } from './../../../routers';\r\n\r\n// import React-Redux & Reducer action\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport * as issueActions from '../../../actions/issue.action';\r\n\r\nimport {\r\n formatDatetime,\r\n logger,\r\n getPeriodDateById,\r\n base64,\r\n} from './../../../utils/utils';\r\nimport { useHandleClientError } from './../../../utils/HttpClient';\r\n\r\n// import fragmmet\r\nimport AccordionForm from './../../fragments/AccordionForm';\r\nimport ColumnContent from './../../fragments/ColumnContent';\r\nimport ColuumnSumUp from './../../fragments/ColuumnSumUp';\r\n// import utils\r\n\r\nconst StyledBadge = withStyles((theme) => ({\r\n badge: {\r\n right: -5,\r\n top: 2,\r\n border: `1px solid ${theme.palette.background.paper}`,\r\n padding: '2px',\r\n },\r\n}))(Badge);\r\n\r\n/**\r\n * styles\r\n * @param {*} theme\r\n */\r\nconst styles = (theme) => ({\r\n ...globalStyles(theme),\r\n root: {\r\n flexGrow: 1,\r\n backgroundColor: theme.palette.background.paper,\r\n '& .MuiCardContent-root': {\r\n padding: theme.spacing(1),\r\n },\r\n },\r\n avatarSmall: {\r\n fontSize: '9px',\r\n fontWeight: 'normal',\r\n width: theme.spacing(3),\r\n height: theme.spacing(3),\r\n },\r\n appBar: {\r\n boxShadow: 'none',\r\n borderBottom: '1px solid #e8e8e8',\r\n },\r\n // https://stackoverflow.com/questions/55078256/how-to-change-the-position-of-an-icon-component-within-a-tab-component\r\n iconLabelWrapperReverse: {\r\n flexDirection: 'row-reverse',\r\n },\r\n // https://stackoverflow.com/questions/64746735/how-to-apply-disablegutters-props-on-mtabletoolbar\r\n toolbarWrapper: {\r\n '& .MuiToolbar-regular': {\r\n minHeight: 0,\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * ManageIssuesPage component\r\n * @param {*} props\r\n */\r\nconst ManageIssuesPage = (props) => {\r\n // Classes extend from widthStyle(style)\r\n const { classes } = props;\r\n\r\n logger('ManageIssuesPage render');\r\n\r\n const routBackOf = routers.backOf;\r\n\r\n // Hook handle-client-error\r\n const handleClientError = useHandleClientError();\r\n\r\n // TabPanel state & handle function\r\n const [tabValue, setTabValue] = React.useState(0);\r\n\r\n // TabPanel handle function\r\n const handleChangeTab = (event, newValue) => {\r\n setTabValue(newValue);\r\n };\r\n\r\n /// Hook reducer V2) Destructure multiple reducer by one useSelector\r\n let issueListReducer = useSelector(\r\n ({ issueListReducer }) => issueListReducer\r\n );\r\n\r\n // Hook reducer (by useSelector) from store\r\n const dispatch = useDispatch();\r\n\r\n // Ref accordionForm\r\n const accordionFormRef = useRef(null);\r\n\r\n // Check is badgeContent assign data from getList (server-side)\r\n let isSeverBadgeContentRef = useRef(true);\r\n\r\n // issue-filters (ifs) from catching (localStorage), *.staff\r\n const cacheIfs =\r\n useMemo(() => {\r\n let ifs = localStorage.getItem(server.ISSUE_FILTERS_KEY);\r\n return ifs ? base64.decodeObj(ifs) : {};\r\n }, []).staff || {};\r\n const cacheFilters = useMemo(() => cacheIfs.filters || {}, []);\r\n const cacheSorts = useMemo(() => cacheIfs.sorts || {}, []);\r\n const cacheKeyword = useMemo(() => cacheIfs.keyword || '', []);\r\n\r\n useEffect(() => {\r\n // Must use cache period_id but dont use cache date\r\n let { dateStart, dateEnd } = getPeriodDateById('1y');\r\n\r\n // logger({\r\n // lang: 'TH',\r\n // mode: server.REQ_PARAM_MODE_STAFF,\r\n // dateStart: cacheFilters.dateStart || dateStart,\r\n // dateEnd: cacheFilters.dateEnd || dateEnd,\r\n // category_id: cacheFilters.category_id || undefined, // default category_id all (Cancel category_id prop by undefined value)\r\n // }, {cacheFilters});\r\n\r\n dispatch(\r\n issueActions.getList({\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n mode: server.REQ_PARAM_MODE_STAFF,\r\n\r\n // Must use cache date from period_id but dont use cache date\r\n dateStart: dateStart,\r\n dateEnd: dateEnd,\r\n\r\n category_id: cacheFilters.category_id || undefined, // default category_id all (Cancel category_id prop by undefined value)\r\n }),\r\n })\r\n ).then(\r\n () => {\r\n setBadgeContent({\r\n open: mtOpenRef.current.state.data.length,\r\n close: mtCloseRef.current.state.data.length,\r\n all: mtAllRef.current.state.data.length,\r\n });\r\n },\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n return () => {\r\n logger('clearList');\r\n dispatch(issueActions.clearList());\r\n };\r\n }, []);\r\n\r\n let memoIssueListOpen = useMemo(\r\n () =>\r\n issueListReducer.result\r\n ? issueListReducer.result.filter(\r\n (issue) => issue.issueStatuses.id === 10\r\n )\r\n : [],\r\n [issueListReducer.result]\r\n );\r\n let memoIssueListClose = useMemo(\r\n () =>\r\n issueListReducer.result\r\n ? issueListReducer.result.filter(\r\n (issue) => issue.issueStatuses.id === 90\r\n )\r\n : [],\r\n [issueListReducer.result]\r\n );\r\n\r\n // Ref of material-table\r\n const mtOpenRef = useRef({});\r\n const mtCloseRef = useRef({});\r\n const mtAllRef = useRef({});\r\n\r\n /**\r\n * Component Overriding (Material-table)\r\n * https://material-table.com/#/docs/features/component-overriding\r\n */\r\n // Ref of material-table toolbar (ref onSearchChange function)\r\n const mtToolbarOpenRef = useRef();\r\n const mtToolbarCloseRef = useRef();\r\n const mtToolbarAllRef = useRef();\r\n\r\n // Ref of material-table header (ref props.onOrderChange (sorting) func)\r\n const mtHeaderOpenRef = useRef();\r\n const mtHeaderCloseRef = useRef();\r\n const mtHeaderAllRef = useRef();\r\n\r\n // Ref of material-table body (ref props.onFilterChanged (fitering) func)\r\n const mtBodyOpenRef = useRef();\r\n const mtBodyCloseRef = useRef();\r\n const mtBodyAllRef = useRef();\r\n\r\n // Ref of material-table sorting (keep sorting value)\r\n const [sortingCol, setSortingCol] = useState({\r\n name: cacheSorts.name || sortingOptions.issues[0].name,\r\n title: cacheSorts.title || sortingOptions.issues[0].title,\r\n direction: cacheSorts.direction || 'desc',\r\n });\r\n\r\n // Ref of material-table filter (keep filtering value)\r\n const [filteringCol, setFilteringCol] = useState({\r\n name: 'issues.level',\r\n title: 'ระดับ',\r\n term: cacheFilters.permissionLevels || [1, 2, 3],\r\n customFilterAndSearch: (term, rowData) => {\r\n return term.includes(rowData.issues.level);\r\n },\r\n });\r\n\r\n const badgeMax = 9999;\r\n\r\n const [badgeContent, setBadgeContent] = useState({\r\n open: 0,\r\n close: 0,\r\n all: 0,\r\n });\r\n\r\n // useEffect issueListReducer 1st for setBadgeContent\r\n useEffect(() => {\r\n if (issueListReducer.result) {\r\n logger('(1) setBadgeContent depend on issueListReducer');\r\n setBadgeContent({\r\n open: memoIssueListOpen.length,\r\n close: memoIssueListClose.length,\r\n all: issueListReducer.result.length,\r\n });\r\n }\r\n }, [issueListReducer.result]);\r\n\r\n // useEffect sortingCol\r\n useEffect(() => {\r\n mtHeaderOpenRef.current.props.onOrderChange(0, sortingCol.direction);\r\n mtHeaderCloseRef.current.props.onOrderChange(0, sortingCol.direction);\r\n mtHeaderAllRef.current.props.onOrderChange(0, sortingCol.direction);\r\n logger('useEffect onOrderChange');\r\n }, [sortingCol]);\r\n\r\n // useEffect filteringCol\r\n useEffect(() => {\r\n mtBodyOpenRef.current.props.onFilterChanged(1, filteringCol.term);\r\n mtBodyCloseRef.current.props.onFilterChanged(1, filteringCol.term);\r\n mtBodyAllRef.current.props.onFilterChanged(1, filteringCol.term);\r\n logger('useEffect onFiterChange');\r\n }, [filteringCol]);\r\n\r\n // Memo (func) handle search. (props onSearch of AccordionForm)\r\n const memoHandleSearchAndFilter = useCallback(\r\n // SSP (server searching param), CSP (client searching param)\r\n async (\r\n {\r\n // SSP\r\n dateStart,\r\n // SSP\r\n dateEnd,\r\n // SSP\r\n category_id,\r\n // CSP\r\n permissionLevels,\r\n },\r\n keyword,\r\n { title, name, direction },\r\n side\r\n ) => {\r\n if (side === 'SS') {\r\n // Set isFilterAndSearch for prevent repleat useEffect 1st setBadgeContent\r\n // getList new data\r\n await dispatch(\r\n issueActions.getList({\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n mode: server.REQ_PARAM_MODE_STAFF,\r\n dateStart,\r\n dateEnd,\r\n category_id,\r\n }),\r\n })\r\n ).catch((error) => handleClientError(error));\r\n }\r\n\r\n // Search (updating) (Do not check keyword that is existed or ever searched, course of material-table ref.searchText (form prev search) not clear)\r\n logger('search');\r\n mtToolbarOpenRef.current.onSearchChange(keyword);\r\n mtToolbarCloseRef.current.onSearchChange(keyword);\r\n mtToolbarAllRef.current.onSearchChange(keyword);\r\n\r\n // set sortingCol (updating)\r\n if (sortingCol.name !== name || sortingCol.direction !== direction) {\r\n logger('sort');\r\n setSortingCol({ title, name, direction });\r\n }\r\n\r\n // set fiteringCol (updating)\r\n if (filteringCol.term !== permissionLevels) {\r\n logger('filter');\r\n setFilteringCol((prev) => ({ ...prev, term: permissionLevels }));\r\n }\r\n },\r\n [sortingCol, filteringCol]\r\n );\r\n\r\n // Memo (func) customFilterAndSearchContent\r\n const memoCustomFilterAndSearchContent = useCallback((term, rowData) => {\r\n let searchSource = [\r\n rowData.issues.shortId,\r\n formatDatetime({ datetime: rowData.issues.createDate }),\r\n rowData.issues.summary,\r\n rowData.issues.fullname,\r\n rowData.processStatuses.name,\r\n ].join(' ');\r\n\r\n // Search and return result\r\n return searchSource.indexOf(term) != -1;\r\n }, []);\r\n\r\n const renderColumnContent = (rowData) => (\r\n issueLabel.labels)\r\n : []\r\n }\r\n viewStatus={rowData.viewStatus}\r\n />\r\n );\r\n\r\n const renderColumnSumUp = (rowData) => {\r\n let latestCommentDate = rowData.IssueComments?.IssueCommentsLast\r\n ? formatDatetime({\r\n datetime: rowData.IssueComments.IssueCommentsLast.createDate,\r\n })\r\n : null;\r\n let permissionGroupFilterName = rowData.permissionGroupFilter\r\n ? rowData.permissionGroupFilter.name\r\n : null;\r\n return (\r\n \r\n );\r\n };\r\n\r\n return (\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\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n ,\r\n Toolbar: (props) => (\r\n
\r\n \r\n
\r\n ),\r\n Header: (props) => (\r\n \r\n ),\r\n Body: (props) => ,\r\n }}\r\n tableRef={mtOpenRef}\r\n title=\"\"\r\n /**\r\n * Bug:\r\n * column as a variable couse of Material-Table (reder dat arow) freezes Browser\r\n * Issue:\r\n * Material Table freezes Browser (https://github.com/mbrn/material-table/issues/2451)\r\n * Fixed:\r\n * He puts column as a variable and put it outside the react component. His browser always hangs\r\n * but if he puts it directly in the props column it works fine, He is using version v.1.69.0\r\n */\r\n columns={[\r\n // Col (columnId: 0): for sorting, first render column = createDate (วันที่แจ้ง),\r\n {\r\n title: sortingCol.title,\r\n field: sortingCol.name,\r\n hidden: true,\r\n defaultSort: 'desc', // next render set direction by onOrderChange (Dont set direction in sortingCol state)\r\n },\r\n\r\n // Col (columnId: 1): issue level (ระดับ), for filtering (on client), hidden column\r\n {\r\n title: filteringCol.title,\r\n field: filteringCol.name,\r\n hidden: true,\r\n defaultFilter: filteringCol.term,\r\n customFilterAndSearch: filteringCol.customFilterAndSearch,\r\n },\r\n {\r\n title: 'รายการเหตุละเมิด',\r\n cellStyle: {\r\n width: '85%',\r\n maxWidth: '85%',\r\n },\r\n field: 'issues.summary',\r\n customFilterAndSearch: memoCustomFilterAndSearchContent,\r\n sorting: false,\r\n render: renderColumnContent,\r\n },\r\n {\r\n cellStyle: {\r\n width: 160,\r\n },\r\n sorting: false,\r\n render: renderColumnSumUp,\r\n },\r\n ]}\r\n data={memoIssueListOpen}\r\n onSearchChange={() => {\r\n badgeContent.open != mtOpenRef.current.state.data.length &&\r\n setBadgeContent({\r\n open: mtOpenRef.current.state.data.length,\r\n close: mtCloseRef.current.state.data.length,\r\n all: mtAllRef.current.state.data.length,\r\n });\r\n }}\r\n options={{\r\n ...muiTable.options,\r\n search: false,\r\n searchText: cacheKeyword,\r\n }}\r\n localization={muiTable.localization}\r\n />\r\n
\r\n \r\n ,\r\n Toolbar: (props) => (\r\n
\r\n \r\n
\r\n ),\r\n Header: (props) => (\r\n \r\n ),\r\n Body: (props) => ,\r\n }}\r\n tableRef={mtCloseRef}\r\n title=\"\"\r\n columns={[\r\n // Col 0: createDate (วันที่แจ้ง), for fiter (on server) and sort, hidden column\r\n {\r\n title: sortingCol.title,\r\n field: sortingCol.name,\r\n hidden: true,\r\n defaultSort: 'desc',\r\n },\r\n\r\n // Col 1: issue level (ระดับ), for fiter (on client), hidden column\r\n {\r\n title: filteringCol.title,\r\n field: filteringCol.name,\r\n hidden: true,\r\n defaultFilter: filteringCol.term,\r\n customFilterAndSearch: filteringCol.customFilterAndSearch,\r\n },\r\n {\r\n title: 'รายการเหตุละเมิด',\r\n cellStyle: {\r\n width: '85%',\r\n maxWidth: '85%',\r\n },\r\n field: 'issues.summary',\r\n customFilterAndSearch: memoCustomFilterAndSearchContent,\r\n sorting: false,\r\n render: renderColumnContent,\r\n },\r\n {\r\n cellStyle: {\r\n width: 160,\r\n },\r\n sorting: false,\r\n render: renderColumnSumUp,\r\n },\r\n ]}\r\n data={memoIssueListClose}\r\n onSearchChange={() => {\r\n badgeContent.close != mtCloseRef.current.state.data.length &&\r\n setBadgeContent({\r\n open: mtOpenRef.current.state.data.length,\r\n close: mtCloseRef.current.state.data.length,\r\n all: mtAllRef.current.state.data.length,\r\n });\r\n }}\r\n options={{\r\n ...muiTable.options,\r\n search: false,\r\n searchText: cacheKeyword,\r\n }}\r\n localization={muiTable.localization}\r\n />\r\n
\r\n \r\n ,\r\n Toolbar: (props) => (\r\n
\r\n \r\n
\r\n ),\r\n Header: (props) => ,\r\n Body: (props) => ,\r\n }}\r\n tableRef={mtAllRef}\r\n title=\"\"\r\n columns={[\r\n // Col 0: createDate (วันที่แจ้ง), for filtering (on server) and sort, hidden column\r\n {\r\n title: sortingCol.title,\r\n field: sortingCol.name,\r\n hidden: true,\r\n defaultSort: 'desc',\r\n },\r\n\r\n // Col 1: issue level (ระดับ), for filtering (on client), hidden column\r\n {\r\n title: filteringCol.title,\r\n field: filteringCol.name,\r\n hidden: true,\r\n defaultFilter: filteringCol.term,\r\n customFilterAndSearch: filteringCol.customFilterAndSearch,\r\n },\r\n {\r\n title: 'รายการเหตุละเมิด',\r\n cellStyle: {\r\n width: '85%',\r\n maxWidth: '85%',\r\n },\r\n field: 'issues.summary',\r\n customFilterAndSearch: memoCustomFilterAndSearchContent,\r\n sorting: false,\r\n render: renderColumnContent,\r\n },\r\n {\r\n cellStyle: {\r\n width: 160,\r\n },\r\n sorting: false,\r\n render: renderColumnSumUp,\r\n },\r\n ]}\r\n data={issueListReducer.result || []}\r\n onSearchChange={() => {\r\n badgeContent.all != mtAllRef.current.state.data.length &&\r\n setBadgeContent({\r\n open: mtOpenRef.current.state.data.length,\r\n close: mtCloseRef.current.state.data.length,\r\n all: mtAllRef.current.state.data.length,\r\n });\r\n }}\r\n options={{\r\n ...muiTable.options,\r\n search: false,\r\n searchText: cacheKeyword,\r\n }}\r\n localization={muiTable.localization}\r\n />\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default withStyles(styles)(ManageIssuesPage);\r\n","import React, { useEffect } from 'react';\r\nimport { isEqual } from 'lodash';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport Skeleton from '@material-ui/lab/Skeleton';\r\n\r\n// import fragments Tabs\r\nimport { Tabs, Tab, TabPanel, a11yProps } from './../../fragments/Tabs';\r\n\r\n// import globalStyles\r\nimport globalStyles from './../../../styles/globalStyles';\r\n\r\n// import useSnackbar\r\nimport { useSnackbar } from 'notistack';\r\n\r\n// import constants\r\nimport { server } from './../../../constants';\r\n\r\n// import utils\r\nimport {\r\n logger,\r\n userProfiler,\r\n issueOperations,\r\n isManageIssue,\r\n formatDatetime,\r\n base64,\r\n} from './../../../utils/utils';\r\n\r\n//import fragments AppSidebarRBack, IssueCard, CommentCard\r\nimport IssueCard from './../../fragments/IssueCard';\r\nimport CommentCard from './../../fragments/CommentCard';\r\nimport { FormComment } from './../../fragments/FormComment';\r\nimport LogCard from './../../fragments/LogCard';\r\nimport GridAvatar from './../../fragments/GridAvatar';\r\n// import React-Redux\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport * as issueActions from '../../../actions/issue.action';\r\nimport * as issueCommentActions from '../../../actions/issueComment.action';\r\nimport * as issueLogActions from '../../../actions/issueLog.action';\r\n\r\n// import hooks\r\nimport { useHandleClientError } from '../../../utils/HttpClient';\r\n\r\n// import file\r\nimport { file } from './../../../data';\r\n\r\n/**\r\n * CommentCardList (Component)\r\n * @param {object} prop\r\n * @param {array} prop.data\r\n * @param {func} props.onSubmitByComment function(dataUpdated) => void\r\n * @param {func} props.onDroppedFilesByComment function(filesBase64: array, data: object) => void\r\n * @param {func} props.onRemovedFileByComment\r\n * @param {bool} readOnly, for check isManageIssue\r\n @param {bool} isWorker, for check isManageIssue\r\n @param {int} processStatus, for check isManageIssue\r\n */\r\nconst CommentCardList = React.memo(\r\n ({\r\n data = [],\r\n onSubmitByComment,\r\n onDroppedFilesByComment,\r\n onRemovedFileByComment,\r\n userProfile,\r\n readOnly,\r\n isWorker,\r\n processStatus,\r\n }) => {\r\n if (!data.length) {\r\n return (\r\n \r\n \r\n ไม่มีความคิดเห็น\r\n \r\n \r\n );\r\n } else {\r\n return data.map((comment, index) => (\r\n \r\n ));\r\n }\r\n },\r\n isEqual\r\n);\r\n\r\n// Styles of ManageIssueActivitiesPage\r\nconst styles = (theme) => ({\r\n ...globalStyles(theme),\r\n root: {\r\n flexGrow: 1, // for appbar\r\n margin: theme.spacing(1),\r\n },\r\n activityBar: {\r\n boxShadow: 'none',\r\n margin: theme.spacing(1, 0),\r\n },\r\n formControl: {\r\n margin: theme.spacing(1, 0, 1, 0),\r\n },\r\n card: {\r\n minWidth: 275,\r\n padding: theme.spacing(1, 1, 2, 2),\r\n },\r\n cardContent: {\r\n minHeight: 275,\r\n },\r\n section: {\r\n margin: theme.spacing(1),\r\n },\r\n formCommentWidth: {\r\n maxWidth: 890,\r\n },\r\n // https://stackoverflow.com/questions/61056265/how-to-override-box-created-by-tabpanel-in-material-ui\r\n tabPanel: {\r\n '&>:first-child': {\r\n padding: theme.spacing(3, 0.5),\r\n },\r\n },\r\n appbarTitle: {\r\n flexGrow: 1,\r\n },\r\n});\r\n\r\n// NOTE: Dispatch mutiple actions\r\n// https://stackoverflow.com/questions/44321676/where-to-dispatch-multiple-actions-in-redux\r\n\r\n/**\r\n * ManageIssueActivitiesPage (Component)\r\n * @param {object} prop { classes, match }\r\n */\r\nconst ManageIssueActivitiesPage = React.memo((props) => {\r\n // Classes extend from widthStyle(style)\r\n const { classes, match } = props;\r\n\r\n // logger (Dev only)\r\n logger('ManageIssueActivitiesPage render');\r\n\r\n const issue_id = base64.decode(match.params.id);\r\n\r\n // Get user profile\r\n const upf = userProfiler.getFromLocal();\r\n\r\n // Hook handle-client-error (handle error in catch from promise reject)\r\n const handleClientError = useHandleClientError();\r\n\r\n // package (getListActivityPackage) parameter for request getListComment / getListLog\r\n const getListActivityPackage = {\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n mode: server.REQ_PARAM_MODE_STAFF,\r\n issue_id,\r\n }),\r\n };\r\n\r\n // package parameter for request getDetail-issue\r\n const getIssueDetailPackage = {\r\n package: base64.encodeObj({\r\n lang: 'TH',\r\n id: issue_id,\r\n }),\r\n };\r\n\r\n // Hook reducer (by useSelector) from store\r\n const dispatch = useDispatch();\r\n\r\n // Hook enqueueSnackbar from useSnackbar\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n // Hook reducer V2) Destructure multiple reducer by one useSelector\r\n let { issueReducer, issueCommentReducer, issueLogReducer } = useSelector(\r\n ({ issueReducer, issueCommentReducer, issueLogReducer }) => ({\r\n issueReducer,\r\n issueCommentReducer,\r\n issueLogReducer,\r\n })\r\n );\r\n\r\n // Check empty issueReducer.result assign to initail issueReducer\r\n let issue = issueReducer.result || {};\r\n let comments = issueCommentReducer.result || [];\r\n let logs = issueLogReducer.result || [];\r\n\r\n // dispatch getIssueDetail, getIssueComment, getIssueLog\r\n useEffect(() => {\r\n if (match.params.id) {\r\n dispatch(\r\n issueActions.getIssueDetail(getIssueDetailPackage, {\r\n includedViewStatus: true,\r\n })\r\n );\r\n dispatch(issueCommentActions.getIssueComment(getListActivityPackage));\r\n dispatch(issueLogActions.getIssueLog(getListActivityPackage));\r\n }\r\n }, []);\r\n\r\n // function handle update issue\r\n const handleUpdateIssue = async (data) => {\r\n try {\r\n // Dispatch mutiple action (updateIssue, updateIssueLog) solution 2\r\n // Ref: https://github.com/reduxjs/redux-thunk\r\n // Ref: https://twitter.com/dan_abramov/status/770914221638942720\r\n await dispatch(\r\n issueActions.updateIssue({\r\n data,\r\n params: getIssueDetailPackage,\r\n options: {\r\n includedViewStatus: true,\r\n },\r\n })\r\n ).then(\r\n () =>\r\n dispatch(\r\n issueLogActions.updateIssueLog(getListActivityPackage)\r\n ).catch((error) => {\r\n throw error;\r\n }),\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n enqueueSnackbar(`แก้ไขข้อมูลแล้ว`, {\r\n variant: 'success',\r\n });\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n };\r\n\r\n // Handle add comment-issue (form submit)\r\n const handleAddComment = async (data) => {\r\n try {\r\n // Dispatch mutiple action (addIssueComment, updateIssueLog) with solution 2 (Look solution 1 in handleUpdateIssue)\r\n await dispatch(\r\n issueCommentActions.addIssueComment({\r\n issue_id,\r\n data,\r\n params: getListActivityPackage,\r\n })\r\n ).then(\r\n () =>\r\n dispatch(\r\n issueLogActions.updateIssueLog(getListActivityPackage)\r\n ).catch((error) => {\r\n throw error;\r\n }),\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n\r\n enqueueSnackbar(`เพิ่มความคิดเห็นแล้ว`, {\r\n variant: 'success',\r\n });\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n };\r\n\r\n // Handle update comment (form submit)\r\n const handleUpdateComment = async (data) => {\r\n try {\r\n // Dispatch mutiple action (updateIssueComment, updateIssueLog) with solution 2 (Look solution 1 in handleUpdateIssue)\r\n await dispatch(\r\n issueCommentActions.updateIssueComment({\r\n issue_id,\r\n data,\r\n params: getListActivityPackage,\r\n })\r\n ).then(\r\n () =>\r\n dispatch(\r\n issueLogActions.updateIssueLog(getListActivityPackage)\r\n ).catch((error) => {\r\n throw error;\r\n }),\r\n (error) => {\r\n throw error;\r\n }\r\n );\r\n\r\n enqueueSnackbar(`แก้ไขความคิดเห็นแล้ว`, {\r\n variant: 'success',\r\n });\r\n } catch (error) {\r\n handleClientError(error);\r\n }\r\n };\r\n\r\n // Handle update files of comment (form submit)\r\n const handleDropFilesByComment = async (newFiles, extendNewFiles) => {\r\n // Save file (file.save, request api image/vx/save) and get filesSaved\r\n let filesSaved = await file.save({\r\n data: newFiles.map((file) => ({\r\n issue_id,\r\n name: file.name,\r\n type: file.type,\r\n content: file.base64,\r\n })),\r\n });\r\n\r\n // Callback, Add file id (in filesSaved, field: id) to files (each nfile)\r\n await extendNewFiles((nfile) => {\r\n let fileSaved = filesSaved.find((fs) => fs.name === nfile.name);\r\n if (fileSaved !== undefined) {\r\n return { id: fileSaved.id };\r\n }\r\n return { id: 'n/a' };\r\n });\r\n };\r\n\r\n // TabPanel state & handle function\r\n const [tabValue, setTabValue] = React.useState(0);\r\n\r\n // TabPanel handle function\r\n const handleChangeTab = (event, newValue) => {\r\n setTabValue(newValue);\r\n };\r\n\r\n return (\r\n
\r\n {/* issue loading (by Skeleton) */}\r\n {issueReducer.isLoading && (\r\n }>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {/* Issue card data from API */}\r\n {!issueReducer.isLoading && issue.issues && (\r\n {\r\n // Save file (file.save, request api image/vx/save) and get filesSaved\r\n let filesSaved = await file.save({\r\n data: newFiles.map((file) => ({\r\n issue_id,\r\n name: file.name,\r\n type: file.type,\r\n content: file.base64,\r\n })),\r\n });\r\n\r\n // Callback, Add file id (in filesSaved, field: id) to files (each nfile)\r\n await extendNewFiles((nfile) => {\r\n let fileSaved = filesSaved.find((fs) => fs.name === nfile.name);\r\n if (fileSaved !== undefined) {\r\n return { id: fileSaved.id };\r\n }\r\n return { id: 'n/a' };\r\n });\r\n }}\r\n onSubmit={handleUpdateIssue}\r\n editing={isManageIssue(\r\n issue.readOnlyStatus.readOnly,\r\n issue.issues.worker === upf.user.id,\r\n issue.issues.processStatus_id,\r\n {\r\n operation: issueOperations.updateIssue,\r\n isCreater: upf.user.id === issue.issues.createBy,\r\n }\r\n )}\r\n isClosed={issue.issueStatuses.id === 90}\r\n closing={false}\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 \r\n \r\n \r\n
\r\n {/* issue loading (by Skeleton) */}\r\n {issueCommentReducer.isLoading && (\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {!issueCommentReducer.isLoading && issue.issues && (\r\n \r\n )}\r\n {!issueCommentReducer.isLoading && issue.issues && (\r\n \r\n {isManageIssue(\r\n issue.readOnlyStatus.readOnly,\r\n issue.issues.worker === upf.user.id,\r\n issue.issues.processStatus_id,\r\n {\r\n operation: issueOperations.addComment,\r\n }\r\n ) && (\r\n \r\n {\r\n // Save file (file.save, request api image/vx/save) and get filesSaved\r\n let filesSaved = await file.save({\r\n data: newFiles.map((file) => ({\r\n issue_id,\r\n name: file.name,\r\n type: file.type,\r\n content: file.base64,\r\n })),\r\n });\r\n\r\n // Callback, Add file id (in filesSaved, field: id) to files (each nfile)\r\n await extendNewFiles((nfile) => {\r\n let fileSaved = filesSaved.find(\r\n (fs) => fs.name === nfile.name\r\n );\r\n if (fileSaved !== undefined) {\r\n return { id: fileSaved.id };\r\n }\r\n return { id: 'n/a' };\r\n });\r\n }}\r\n onSubmit={handleAddComment}\r\n formControlStyle={classes.formCommentWidth}\r\n />\r\n \r\n )}\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n {!issueLogReducer.isLoading && }\r\n
\r\n
\r\n {/* \r\n
\r\n Under Construction\r\n
\r\n
*/}\r\n
\r\n );\r\n});\r\n\r\nexport default withStyles(styles)(ManageIssueActivitiesPage);\r\n","const initialState = {\r\n isFetching: null,\r\n isError: false,\r\n result: { content: { data: [], page: 1, totalCount: 0 }, status: true },\r\n};\r\n\r\nexport const SETTING_PERMISSION_FETCHING = 'SETTING_PERMISSION_FETCHING';\r\nexport const SETTING_PERMISSION_FAILED = 'SETTING_PERMISSION_FAILED';\r\nexport const SETTING_PERMISSION_SUCCESS = 'SETTING_PERMISSION_SUCCESS';\r\nexport const SettingPermissionReducer = (\r\n state = initialState,\r\n { type, payload }\r\n) => {\r\n switch (type) {\r\n case SETTING_PERMISSION_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SETTING_PERMISSION_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: { data: [], page: 1, totalCount: 0 }},\r\n };\r\n case SETTING_PERMISSION_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nconst initialState2 = {\r\n isFetching: null,\r\n isError: false,\r\n result: { content: { data: [], status: true }},\r\n};\r\n\r\nexport const SETTING_PERMISSION_DELETE_FETCHING = 'SETTING_PERMISSION_DELETE_FETCHING';\r\nexport const SETTING_PERMISSION_DELETE_FAILED = 'SETTING_PERMISSION_DELETE_FAILED';\r\nexport const SETTING_PERMISSION_DELETE_SUCCESS = 'SETTING_PERMISSION_DELETE_SUCCESS';\r\nexport const SettingPermissionDeleteReducer = (\r\n state = initialState2,\r\n { type, payload }\r\n) => {\r\n switch (type) {\r\n case SETTING_PERMISSION_DELETE_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SETTING_PERMISSION_DELETE_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: { data: []}},\r\n };\r\n case SETTING_PERMISSION_DELETE_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { sysURL } from '../constants';\r\nimport { httpClient } from './../utils/HttpClient';\r\nimport * as M from '../reducers/settingPermission.reducer';\r\n\r\n//redirect to login page\r\n\r\n//load Count Summary Data Group \";\r\nexport const setSettingPermissionStateToFetching = () => ({\r\n type: M.SETTING_PERMISSION_FETCHING,\r\n});\r\n\r\nexport const setSettingPermissionStateToFailed = () => ({\r\n type: M.SETTING_PERMISSION_FAILED,\r\n});\r\n\r\nexport const setSettingPermissionStateToSuccess = (payload) => ({\r\n type: M.SETTING_PERMISSION_SUCCESS,\r\n payload,\r\n});\r\n\r\nexport const loadSettingPermission = ({\r\n columnOrder,\r\n isAscending,\r\n pageNo,\r\n perPage,\r\n search,\r\n}) => {\r\n let api = 'permissiongroup/v1/getListAllPagingWithUserRight';\r\n let url = api;\r\n return async (dispatch, getState) => {\r\n try {\r\n dispatch(setSettingPermissionStateToFetching());\r\n\r\n let result = await httpClient.post(url, {\r\n perPage: perPage,\r\n pageNo: pageNo,\r\n columnOrder: columnOrder,\r\n isAscending: isAscending,\r\n search: search,\r\n // searchObj: search,\r\n });\r\n\r\n if (result.data.status == true) {\r\n dispatch(setSettingPermissionStateToSuccess(result.data));\r\n } else {\r\n dispatch(setSettingPermissionStateToFailed([]));\r\n }\r\n\r\n // let dataMock = {\r\n // content: {\r\n // data: [\r\n // {\r\n // id: '1',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // {\r\n // id: '2',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // {\r\n // id: '3',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // {\r\n // id: '4',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // {\r\n // id: '5',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // {\r\n // id: '6',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // {\r\n // id: '7',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // {\r\n // id: '8',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // {\r\n // id: '9',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // {\r\n // id: '10',\r\n // fullName: 'uaychai saengfa',\r\n // permissionType: 'level 1 ',\r\n // },\r\n // ],\r\n // countRow: 10,\r\n // },\r\n // };\r\n //dispatch(setSettingPermissionStateToSuccess(dataMock));\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(setSettingPermissionStateToFailed({ data: { message: error } }));\r\n }\r\n\r\n return getState().SettingPermissionReducer.result.content;\r\n };\r\n};\r\n\r\n//delete data \";\r\nexport const setSettingPermissionDeleteStateToFetching = () => ({\r\n type: M.SETTING_PERMISSION_DELETE_FETCHING,\r\n});\r\n\r\nexport const setSettingPermissionDeleteStateToFailed = () => ({\r\n type: M.SETTING_PERMISSION_DELETE_FAILED,\r\n});\r\n\r\nexport const setSettingPermissionDeleteStateToSuccess = (payload) => ({\r\n type: M.SETTING_PERMISSION_DELETE_SUCCESS,\r\n payload,\r\n});\r\n\r\nexport const deleteSettingPermission = (data) => {\r\n let api = 'permissiongroup/v1/' + data;\r\n let url = api;\r\n return async (dispatch) => {\r\n try {\r\n dispatch(setSettingPermissionDeleteStateToFetching());\r\n\r\n let result = await httpClient.delete(url);\r\n\r\n if (result.data.status == true) {\r\n dispatch(setSettingPermissionDeleteStateToSuccess(result.data));\r\n } else {\r\n dispatch(setSettingPermissionDeleteStateToFailed([]));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(\r\n setSettingPermissionDeleteStateToFailed({ data: { message: error } })\r\n );\r\n }\r\n\r\n // return getState().SettingPermissionReducer.result.content;\r\n };\r\n};\r\n","//Save Permission\r\nconst initialState = {\r\n isFetching: null,\r\n isError: false,\r\n result: { content: { data: []}, status: true },\r\n};\r\n\r\nexport const SETTING_PERMISSION_MANAGE_FETCHING =\r\n 'SETTING_PERMISSION_MANAGE_FETCHING';\r\nexport const SETTING_PERMISSION_MANAGE_FAILED =\r\n 'SETTING_PERMISSION_MANAGE_FAILED';\r\nexport const SETTING_PERMISSION_MANAGE_SUCCESS =\r\n 'SETTING_PERMISSION_MANAGE_SUCCESS';\r\nexport const SettingPermissionManageReducer = (\r\n state = initialState,\r\n { type, payload }\r\n) => {\r\n switch (type) {\r\n case SETTING_PERMISSION_MANAGE_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SETTING_PERMISSION_MANAGE_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: { data: []} },\r\n };\r\n case SETTING_PERMISSION_MANAGE_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const SETTING_PERMISSION_MANAGE_SAVE_FETCHING =\r\n 'SETTING_PERMISSION_MANAGE_SAVE_FETCHING';\r\nexport const SETTING_PERMISSION_MANAGE_SAVE_FAILED =\r\n 'SETTING_PERMISSION_MANAGE_SAVE_FAILED';\r\nexport const SETTING_PERMISSION_MANAGE_SAVE_SUCCESS =\r\n 'SETTING_PERMISSION_MANAGE_SAVE_SUCCESS';\r\nexport const SettingPermissionManageSaveReducer = (\r\n state = initialState,\r\n { type, payload }\r\n) => {\r\n switch (type) {\r\n case SETTING_PERMISSION_MANAGE_SAVE_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SETTING_PERMISSION_MANAGE_SAVE_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: { data: []} },\r\n };\r\n case SETTING_PERMISSION_MANAGE_SAVE_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n//Edit permission\r\nexport const SETTING_PERMISSION_MANAGE_EDIT_FETCHING =\r\n 'SETTING_PERMISSION_MANAGE_EDIT_FETCHING';\r\nexport const SETTING_PERMISSION_MANAGE_EDIT_FAILED =\r\n 'SETTING_PERMISSION_MANAGE_EDIT_FAILED';\r\nexport const SETTING_PERMISSION_MANAGE_EDIT_SUCCESS =\r\n 'SETTING_PERMISSION_MANAGE_EDIT_SUCCESS';\r\nexport const SettingPermissionManageEditReducer = (\r\n state = initialState,\r\n { type, payload }\r\n) => {\r\n switch (type) {\r\n case SETTING_PERMISSION_MANAGE_EDIT_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SETTING_PERMISSION_MANAGE_EDIT_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: { data: []} },\r\n };\r\n case SETTING_PERMISSION_MANAGE_EDIT_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n//Select By Id\r\nexport const SETTING_PERMISSION_MANAGE_BY_ID_FETCHING =\r\n 'SETTING_PERMISSION_MANAGE_BY_ID_FETCHING';\r\nexport const SETTING_PERMISSION_MANAGE_BY_ID_FAILED =\r\n 'SETTING_PERMISSION_MANAGE_BY_ID_FAILED';\r\nexport const SETTING_PERMISSION_MANAGE_BY_ID_SUCCESS =\r\n 'SETTING_PERMISSION_MANAGE_BY_ID_SUCCESS';\r\nexport const SettingPermissionManageByIdReducer = (\r\n state = initialState,\r\n { type, payload }\r\n) => {\r\n switch (type) {\r\n case SETTING_PERMISSION_MANAGE_BY_ID_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SETTING_PERMISSION_MANAGE_BY_ID_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: { data: []} },\r\n };\r\n case SETTING_PERMISSION_MANAGE_BY_ID_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { sysURL } from '../constants';\r\nimport { httpClient } from './../utils/HttpClient';\r\nimport * as M from '../reducers/settingPermissionManage.reducer';\r\n\r\n//save data\";\r\nexport const setSettingPermissionManageSaveStateToFetching = () => ({\r\n type: M.SETTING_PERMISSION_MANAGE_SAVE_FETCHING,\r\n});\r\n\r\nexport const setSettingPermissionManageSaveStateToFailed = () => ({\r\n type: M.SETTING_PERMISSION_MANAGE_SAVE_FAILED,\r\n});\r\n\r\nexport const setSettingPermissionManageSaveStateToSuccess = (payload) => ({\r\n type: M.SETTING_PERMISSION_MANAGE_SAVE_SUCCESS,\r\n payload,\r\n});\r\n\r\nexport const saveSettingPermission = (data) => {\r\n let api = 'permissiongroup/v1/save';\r\n let url = api;\r\n return async (dispatch) => {\r\n try {\r\n dispatch(setSettingPermissionManageSaveStateToFetching());\r\n\r\n let result = await httpClient.post(url, data);\r\n\r\n if (result.data.status == true) {\r\n dispatch(setSettingPermissionManageSaveStateToSuccess(result.data));\r\n } else {\r\n dispatch(setSettingPermissionManageSaveStateToFailed([]));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(\r\n setSettingPermissionManageSaveStateToFailed({\r\n data: { message: error },\r\n })\r\n );\r\n }\r\n\r\n // return getState().SettingPermissionReducer.result.content;\r\n };\r\n};\r\n\r\n//edit,update data \";\r\nexport const setSettingPermissionManageEditStateToFetching = () => ({\r\n type: M.SETTING_PERMISSION_MANAGE_EDIT_FETCHING,\r\n});\r\n\r\nexport const setSettingPermissionManageEditStateToFailed = () => ({\r\n type: M.SETTING_PERMISSION_MANAGE_EDIT_FAILED,\r\n});\r\n\r\nexport const setSettingPermissionManageEditStateToSuccess = (payload) => ({\r\n type: M.SETTING_PERMISSION_MANAGE_EDIT_SUCCESS,\r\n payload,\r\n});\r\n\r\nexport const editSettingPermission = (data) => {\r\n let api = 'permissiongroup/v1/save';\r\n let url = api;\r\n return async (dispatch) => {\r\n try {\r\n dispatch(setSettingPermissionManageEditStateToFetching());\r\n\r\n let result = await httpClient.put(url, data);\r\n\r\n if (result.data.status == true) {\r\n dispatch(setSettingPermissionManageEditStateToSuccess(result.data));\r\n } else {\r\n dispatch(setSettingPermissionManageEditStateToFailed([]));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(\r\n setSettingPermissionManageEditStateToFailed({\r\n data: { message: error },\r\n })\r\n );\r\n }\r\n\r\n // return getState().SettingPermissionReducer.result.content;\r\n };\r\n};\r\n\r\n// load Setting Permission By Id\r\nexport const setSettingPermissionManageByIdStateToFetching = () => ({\r\n type: M.SETTING_PERMISSION_MANAGE_BY_ID_FETCHING,\r\n});\r\n\r\nexport const setSettingPermissionManageByIdStateToFailed = () => ({\r\n type: M.SETTING_PERMISSION_MANAGE_BY_ID_FAILED,\r\n});\r\n\r\nexport const setSettingPermissionManageByIdStateToSuccess = (payload) => ({\r\n type: M.SETTING_PERMISSION_MANAGE_BY_ID_SUCCESS,\r\n payload,\r\n});\r\n\r\nexport const loadSettingPermissionById = (data) => {\r\n let api = 'permissiongroup/v1/getById?data=' + data;\r\n let url = api;\r\n return async (dispatch) => {\r\n try {\r\n dispatch(setSettingPermissionManageByIdStateToFetching());\r\n\r\n let result = await httpClient.get(url);\r\n\r\n if (result.data.status == true) {\r\n \r\n dispatch(setSettingPermissionManageByIdStateToSuccess(result.data));\r\n } else {\r\n dispatch(setSettingPermissionManageByIdStateToFailed([]));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(\r\n setSettingPermissionManageByIdStateToFailed({\r\n data: { message: error },\r\n })\r\n );\r\n }\r\n\r\n // return getState().SettingPermissionReducer.result.content;\r\n \r\n };\r\n};\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Field } from 'formik';\r\n//import { Select } from 'formik-material-ui';\r\nimport Select, { Option, ReactSelectProps } from 'react-select';\r\nimport {\r\n CircularProgress,\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n FormHelperText,\r\n ListItemText,\r\n Checkbox,\r\n Input,\r\n Button,\r\n} from '@material-ui/core';\r\nimport { FormatColorReset } from '@material-ui/icons';\r\nimport { useCategoryGetListAll } from './../../../hooks/useData';\r\n\r\nconst options = [\r\n {\r\n value: 1,\r\n label: 'ข้อมูลพื้นฐานที่ระบุตัวตน เช่น ชื่อ รายละเอียดการติดต่อ',\r\n },\r\n { value: 2, label: 'ข้อมูลที่ระบุตัวตน เช่น Username และ Password' },\r\n {\r\n value: 3,\r\n label: 'ข้อมูลด้านการเงิน เช่น Credit Card ID ข้อมูลสถาบันการเงิน',\r\n },\r\n { value: 4, label: 'ข้อมูลด้าน Biometric' },\r\n { value: 5, label: 'ข้อมูลด้านสุขภาพ' },\r\n { value: 6, label: 'ข้อมูลศาสนาและความเชื่อ' },\r\n { value: 7, label: 'ข้อมูลเกี่ยวกับความเห็นทางการเมือง' },\r\n { value: 8, label: 'ข้อมูลเกี่ยวกับเพศและเพศสภาพ' },\r\n {\r\n value: 9,\r\n label: 'ข้อมูลส่วนบุคคลที่เป็นทางการ เช่น Passport ใบขับขี่ บัตรประชาชน',\r\n },\r\n { value: 10, label: 'ข้อมูลตำแหน่งสถานที่' },\r\n { value: 11, label: 'ไม่สามารถระบุได้' },\r\n { value: 12, label: 'อื่นๆ' },\r\n];\r\nconst personalDataCategories = [\r\n 'ข้อมูลพื้นฐานที่ระบุตัวตน เช่น ชื่อ รายละเอียดการติดต่อ',\r\n 'ข้อมูลที่ระบุตัวตน เช่น Username และ Password',\r\n 'ข้อมูลด้านการเงิน เช่น Credit Card ID ข้อมูลสถาบันการเงิน',\r\n 'ข้อมูลด้าน Biometric',\r\n 'ข้อมูลด้านสุขภาพ',\r\n 'ข้อมูลศาสนาและความเชื่อ',\r\n 'ข้อมูลเกี่ยวกับความเห็นทางการเมือง',\r\n 'ข้อมูลเกี่ยวกับเพศและเพศสภาพ',\r\n 'ข้อมูลส่วนบุคคลที่เป็นทางการ เช่น Passport ใบขับขี่ บัตรประชาชน',\r\n 'ข้อมูลตำแหน่งสถานที่',\r\n 'ไม่สามารถระบุได้',\r\n 'อื่นๆ',\r\n];\r\n\r\nconst customStyles = {\r\n control: (provide, state) => ({\r\n flexDirection: 'row',\r\n display: 'flex',\r\n border: '1px solid #ccc',\r\n font: '1.2rem',\r\n }),\r\n valueContainer: () => ({\r\n flexDirection: 'row',\r\n margin: '5px',\r\n padding: '5px',\r\n fontSize: '1rem',\r\n minWidth: '90%',\r\n }),\r\n indicatorsContainer: () => ({\r\n flexDirection: 'row',\r\n display: 'flex',\r\n minWidth: '10%',\r\n }),\r\n};\r\n/**\r\n * SelectPersonalDataCategory() (component)\r\n * @param {string} name, name of select element (default: category_id)\r\n * @param {string} id, id of select element (default: category_id)\r\n * @param {string} label, label of select element (default: \"ประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด\")\r\n * @param {function} onChange, onChange\r\n * @param {string|number} value, value of select element\r\n * @param {Formik.touched} touched\r\n * @param {Formik.errors} errors\r\n * @param {object} className, className of select element\r\n * @returns (element) SelectPersonalDataCategory\r\n */\r\nconst SelectMultiPersonalDataCategory = ({\r\n name,\r\n id,\r\n label = 'ประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด',\r\n onChange,\r\n value = '',\r\n touched,\r\n errors,\r\n className,\r\n}) => {\r\n const [selectedValue, setSelectedValue] = useState([\r\n // {\r\n // value: 1,\r\n // label: 'ข้อมูลพื้นฐานที่ระบุตัวตน เช่น ชื่อ รายละเอียดการติดต่อ',\r\n // },\r\n // { value: 2, label: 'ข้อมูลที่ระบุตัวตน เช่น Username และ Password' },\r\n // {\r\n // value: 3,\r\n // label: 'ข้อมูลด้านการเงิน เช่น Credit Card ID ข้อมูลสถาบันการเงิน',\r\n // },\r\n // { value: 4, label: 'ข้อมูลด้าน Biometric' },\r\n // { value: 5, label: 'ข้อมูลด้านสุขภาพ' },\r\n ]);\r\n\r\n const categorys = (data) => {\r\n return data.map((el) => ({\r\n category_id: el.id,\r\n name:el.name,\r\n }));\r\n };\r\n\r\n const categories = categorys(useCategoryGetListAll());\r\n\r\n\r\n //Set internal value (selectedValue) when external value is changed\r\n useEffect(() => {\r\n setSelectedValue(value);\r\n }, [value]);\r\n\r\n //const [personName, setPersonName] = React.useState([]);\r\n\r\n //const handleChange = (event) => {\r\n // setPersonName(event.target.value);\r\n // console.log(event);\r\n //};\r\n // Handle change select\r\n const memoHandleChange = useCallback((e) => {\r\n // let context = typeof c.props.children === 'string' ? c.props.children : '';\r\n onChange && onChange(e);\r\n\r\n \r\n setSelectedValue(e);\r\n });\r\n\r\n let labelPlaceHold = 'เลือกประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด';\r\n\r\n return (\r\n \r\n
\r\n {label}\r\n
\r\n \r\n {}}\r\n value={\r\n categories ? categories.find((option) => option.name === '') : ''\r\n }\r\n styles={customStyles}\r\n placeholder={labelPlaceHold}\r\n defaultValue={value}\r\n getOptionLabel={(option) => option.name}\r\n getOptionValue={(option) => option.category_id}\r\n />\r\n {touched && errors && errors}\r\n \r\n
\r\n );\r\n};\r\n\r\n// Types[, Rules] of props\r\nSelectMultiPersonalDataCategory.propTypes = {\r\n name: PropTypes.string,\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n onChange: PropTypes.func,\r\n value: PropTypes.any,\r\n};\r\n\r\nexport default React.memo(SelectMultiPersonalDataCategory);\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Field, ErrorMessage, useField, useFormikContext } from 'formik';\r\nimport { Select } from 'formik-material-ui';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\n// import utils\r\nimport { logger } from './../../../utils/utils';\r\n\r\nimport { usePermissionLevelGetListAllSetting, usePermissionLevelGetListAllWithUserRight } from './../../../hooks/useData';\r\n\r\n/**\r\n * SelectPermissionLevel() (component)\r\n * @param {string} name, name of select element (default: category_id)\r\n * @param {string} id, id of select element (default: category_id)\r\n * @param {string} label, label of select element (default: \"ประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด\")\r\n * @param {function} onChange, onChange\r\n * @param {string} excludeDataField, feild of data for exclude from list of permissionLevel\r\n * @param {array} excludeData, data of excludeDataField\r\n * @param {bool} disabled, default: false\r\n * @param {object} className, className of select element\r\n * @param variant\r\n * @returns (element) SelectPermissionLevel\r\n */\r\nconst SelectPermissionLevelAdmin = ({\r\n name = 'permission_id',\r\n id = 'permission_id',\r\n label = 'ระดับการดำเนินการ',\r\n onChange,\r\n excludeDataField = 'id',\r\n excludeData = [],\r\n disabled = false,\r\n className,\r\n variant = 'standard',\r\n}) => {\r\n logger('SelectPermissionLevelAdmin render');\r\n\r\n // Hook Formik setFildValue\r\n const { setFieldValue } = useFormikContext();\r\n // https://formik.org/docs/api/useField (Test value from formik, instead state-value)\r\n const [field, meta] = useField(name);\r\n\r\n // Hook permissionLevel\r\n let permissionLevels = usePermissionLevelGetListAllWithUserRight('TH');\r\n if (permissionLevels && excludeData && excludeDataField) {\r\n permissionLevels = permissionLevels.filter(function (level) {\r\n return !excludeData.includes(level[excludeDataField]);\r\n });\r\n }else{\r\n permissionLevels=[];\r\n }\r\n\r\n // Handle change select\r\n const memoHandleChange = useCallback((e, c) => {\r\n setFieldValue(name, e.target.value);\r\n let context = typeof c.props.children === 'string' ? c.props.children : '';\r\n onChange && onChange(e, context);\r\n });\r\n\r\n return (\r\n \r\n \r\n {label}\r\n \r\n \r\n เลือก {label}\r\n \r\n {permissionLevels.map((level) => (\r\n \r\n {level.name}\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// Types[, Rules] of props\r\nSelectPermissionLevelAdmin.propTypes = {\r\n name: PropTypes.string,\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n onChange: PropTypes.func,\r\n excludeDataField: PropTypes.string,\r\n excludeData: PropTypes.array,\r\n};\r\n\r\nexport default React.memo(SelectPermissionLevelAdmin);\r\n","const initialState = {\r\n isFetching: null,\r\n isError: false,\r\n result: { content: [],status:true},\r\n};\r\n\r\nexport const SELECT_NAME_OR_EMAIL_FETCHING = 'SELECT_NAME_OR_EMAIL_FETCHING';\r\nexport const SELECT_NAME_OR_EMAIL_FAILED = 'SELECT_NAME_OR_EMAIL_FAILED';\r\nexport const SELECT_NAME_OR_EMAIL_SUCCESS = 'SELECT_NAME_OR_EMAIL_SUCCESS';\r\nexport const SelectNameOrEmailReducer = (\r\n state = initialState,\r\n { type, payload }\r\n) => {\r\n switch (type) {\r\n case SELECT_NAME_OR_EMAIL_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SELECT_NAME_OR_EMAIL_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: [] },\r\n };\r\n case SELECT_NAME_OR_EMAIL_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { sysURL } from '../constants';\r\nimport { httpClient } from './../utils/HttpClient';\r\nimport * as M from '../reducers/selectNameOrEmail.reducer';\r\n\r\n//redirect to login page\r\n\r\n//load Count Summary Data Group \";\r\nexport const setSelectNameOrEmailStateToFetching = () => ({\r\n type: M.SELECT_NAME_OR_EMAIL_FETCHING,\r\n});\r\n\r\nexport const setSelectNameOrEmailStateToFailed = () => ({\r\n type: M.SELECT_NAME_OR_EMAIL_FAILED,\r\n});\r\n\r\nexport const setSelectNameOrEmailStateToSuccess = (payload) => ({\r\n type: M.SELECT_NAME_OR_EMAIL_SUCCESS,\r\n payload,\r\n});\r\n\r\nexport const loadUserName = (search) => {\r\n let api = 'user/v1/searchName?name=' + search;\r\n let url = api;\r\n return async (dispatch, getState) => {\r\n try {\r\n dispatch(setSelectNameOrEmailStateToFetching());\r\n\r\n let result = await httpClient.get(url);\r\n\r\n if (result.data.status == true) {\r\n dispatch(setSelectNameOrEmailStateToSuccess(result.data));\r\n } else {\r\n dispatch(setSelectNameOrEmailStateToFailed([]));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(setSelectNameOrEmailStateToFailed({ data: { message: error } }));\r\n }\r\n //console.log(getState().SelectNameOrEmailReducer.result.content);\r\n return getState().SelectNameOrEmailReducer.result.content;\r\n };\r\n};\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Field } from 'formik';\r\n//import { Select } from 'formik-material-ui';\r\nimport Select, { Option, ReactSelectProps } from 'react-select';\r\nimport AsyncSelect from 'react-select/async';\r\nimport {\r\n CircularProgress,\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n FormHelperText,\r\n ListItemText,\r\n Checkbox,\r\n Input,\r\n Button,\r\n} from '@material-ui/core';\r\nimport { FormatColorReset } from '@material-ui/icons';\r\nimport * as selectNameOrEmailAction from '../../../actions/selectNameOrEmail.action';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\n// const options = [\r\n// {\r\n// value: 1,\r\n// label: 'ข้อมูลพื้นฐานที่ระบุตัวตน เช่น ชื่อ รายละเอียดการติดต่อ',\r\n// },\r\n// { value: 2, label: 'ข้อมูลที่ระบุตัวตน เช่น Username และ Password' },\r\n// {\r\n// value: 3,\r\n// label: 'ข้อมูลด้านการเงิน เช่น Credit Card ID ข้อมูลสถาบันการเงิน',\r\n// },\r\n// { value: 4, label: 'ข้อมูลด้าน Biometric' },\r\n// { value: 5, label: 'ข้อมูลด้านสุขภาพ' },\r\n// { value: 6, label: 'ข้อมูลศาสนาและความเชื่อ' },\r\n// { value: 7, label: 'ข้อมูลเกี่ยวกับความเห็นทางการเมือง' },\r\n// { value: 8, label: 'ข้อมูลเกี่ยวกับเพศและเพศสภาพ' },\r\n// {\r\n// value: 9,\r\n// label: 'ข้อมูลส่วนบุคคลที่เป็นทางการ เช่น Passport ใบขับขี่ บัตรประชาชน',\r\n// },\r\n// { value: 10, label: 'ข้อมูลตำแหน่งสถานที่' },\r\n// { value: 11, label: 'ไม่สามารถระบุได้' },\r\n// { value: 12, label: 'อื่นๆ' },\r\n// ];\r\n// const personalDataCategories = [\r\n// 'ข้อมูลพื้นฐานที่ระบุตัวตน เช่น ชื่อ รายละเอียดการติดต่อ',\r\n// 'ข้อมูลที่ระบุตัวตน เช่น Username และ Password',\r\n// 'ข้อมูลด้านการเงิน เช่น Credit Card ID ข้อมูลสถาบันการเงิน',\r\n// 'ข้อมูลด้าน Biometric',\r\n// 'ข้อมูลด้านสุขภาพ',\r\n// 'ข้อมูลศาสนาและความเชื่อ',\r\n// 'ข้อมูลเกี่ยวกับความเห็นทางการเมือง',\r\n// 'ข้อมูลเกี่ยวกับเพศและเพศสภาพ',\r\n// 'ข้อมูลส่วนบุคคลที่เป็นทางการ เช่น Passport ใบขับขี่ บัตรประชาชน',\r\n// 'ข้อมูลตำแหน่งสถานที่',\r\n// 'ไม่สามารถระบุได้',\r\n// 'อื่นๆ',\r\n// ];\r\n// const names = [\r\n// 'Oliver Hansen',\r\n// 'Van Henry',\r\n// 'April Tucker',\r\n// 'Ralph Hubbard',\r\n// 'Omar Alexander',\r\n// 'Carlos Abbott',\r\n// 'Miriam Wagner',\r\n// 'Bradley Wilkerson',\r\n// 'Virginia Andrews',\r\n// 'Kelly Snyder',\r\n// ];\r\n\r\n// const ITEM_HEIGHT = 48;\r\n// const ITEM_PADDING_TOP = 8;\r\n// const MenuProps = {\r\n// PaperProps: {\r\n// style: {\r\n// maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\r\n// width: 250,\r\n// },\r\n// },\r\n// };\r\n\r\nconst customStyles = {\r\n control: (provide, state) => ({\r\n flexDirection: 'row',\r\n display: 'flex',\r\n border: '1px solid #ccc',\r\n font: '1.2rem',\r\n }),\r\n valueContainer: () => ({\r\n flexDirection: 'row',\r\n margin: '5px',\r\n padding: '5px',\r\n fontSize: '1rem',\r\n minWidth: '90%',\r\n }),\r\n indicatorsContainer: () => ({\r\n flexDirection: 'row',\r\n display: 'flex',\r\n minWidth: '10%',\r\n }),\r\n};\r\n/**\r\n * SelectPersonalDataCategory() (component)\r\n * @param {string} name, name of select element (default: category_id)\r\n * @param {string} id, id of select element (default: category_id)\r\n * @param {string} label, label of select element (default: \"ประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด\")\r\n * @param {function} onChange, onChange\r\n * @param {string|number} value, value of select element\r\n * @param {Formik.touched} touched\r\n * @param {Formik.errors} errors\r\n * @param {object} className, className of select element\r\n * @returns (element) SelectPersonalDataCategory\r\n */\r\nconst SelectNameOrEmail = ({\r\n name,\r\n id,\r\n label,\r\n onChange,\r\n value,\r\n touched,\r\n errors,\r\n className,\r\n}) => {\r\n const dispatch = useDispatch();\r\n const SelectNameOrEmailReducer = useSelector(\r\n ({ SelectNameOrEmailReducer }) => SelectNameOrEmailReducer\r\n );\r\n\r\n const loadUserName = async (inputValue, callback) => {\r\n if (inputValue.length > 2) {\r\n callback(\r\n await dispatch(selectNameOrEmailAction.loadUserName(inputValue))\r\n );\r\n }\r\n };\r\n \r\n //const [inputValue, setValue] = useState('');\r\n const [selectedValue, setSelectedValue] = useState('');\r\n // handle input change event\r\n // const handleInputChange = (value) => {\r\n // setValue(value);\r\n // };\r\n\r\n //Set internal value (selectedValue) when external value is changed\r\n // useEffect(() => {\r\n // if (selectedValue.length == 3) {\r\n // loadUserName();\r\n // }\r\n // }, [selectedValue]);\r\n\r\n // const handleChange = (value) => {\r\n // setValue(value);\r\n // // console.log(value);\r\n // //loadUserName(value);\r\n // };\r\n\r\n // Handle change select\r\n const memoHandleChange = useCallback((value) => {\r\n // let context = typeof c.props.children === 'string' ? c.props.children : '';\r\n if(value){\r\n value[\"user_id\"] = value.id;\r\n }\r\n onChange && onChange([value]);\r\n setSelectedValue(value);\r\n });\r\n\r\n // const loadOptions = async (inputValue) => {\r\n // let data = await options.find((option) => option.value == inputValue);\r\n // return data ? [data] : [];\r\n // };\r\n\r\n let labelPlaceHold = 'ค้นหาผู้ใช้งาน ชื่อ หรือ นามสกุล (3 ตัวอักษร+)';\r\n\r\n return (\r\n \r\n
\r\n {labelPlaceHold}\r\n
\r\n \r\n `${e.fullName} (${e.fullNameEn})`}\r\n getOptionValue={(e) => e.id}\r\n loadOptions={loadUserName}\r\n onInputChange={() => {\r\n setSelectedValue('');\r\n }}\r\n onChange={memoHandleChange}\r\n styles={customStyles}\r\n placeholder={labelPlaceHold}\r\n defaultValue={value}\r\n styles={{\r\n // Fixes the overlapping problem of the component\r\n menu: (provided) => ({ zIndex: 9999 }),\r\n }}\r\n />\r\n\r\n {touched && errors && errors}\r\n \r\n
\r\n );\r\n};\r\n\r\n// Types[, Rules] of props\r\nSelectNameOrEmail.propTypes = {\r\n name: PropTypes.string,\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n onChange: PropTypes.func,\r\n value: PropTypes.any,\r\n};\r\n\r\nexport default React.memo(SelectNameOrEmail);\r\n","const initialState = {\r\n isFetching: null,\r\n isError: false,\r\n result: { content: [],status:true},\r\n };\r\n \r\n export const SELECT_DEPARTMENT_FETCHING = 'SELECT_DEPARTMENT_FETCHING';\r\n export const SELECT_DEPARTMENT_FAILED = 'SELECT_DEPARTMENT_FAILED';\r\n export const SELECT_DEPARTMENT_SUCCESS = 'SELECT_DEPARTMENT_SUCCESS';\r\n export const SelectDepartmentReducer = (\r\n state = initialState,\r\n { type, payload }\r\n ) => {\r\n switch (type) {\r\n case SELECT_DEPARTMENT_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SELECT_DEPARTMENT_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: [] },\r\n };\r\n case SELECT_DEPARTMENT_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n };\r\n\r\n\r\n export const SELECT_DEPARTMENT2_FETCHING = 'SELECT_DEPARTMENT2_FETCHING';\r\n export const SELECT_DEPARTMENT2_FAILED = 'SELECT_DEPARTMENT2_FAILED';\r\n export const SELECT_DEPARTMENT2_SUCCESS = 'SELECT_DEPARTMENT2_SUCCESS';\r\n export const SelectDepartment2Reducer = (\r\n state = initialState,\r\n { type, payload }\r\n ) => {\r\n switch (type) {\r\n case SELECT_DEPARTMENT2_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SELECT_DEPARTMENT2_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: [] },\r\n };\r\n case SELECT_DEPARTMENT2_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n };\r\n\r\n export const SELECT_DEPARTMENT3_FETCHING = 'SELECT_DEPARTMENT3_FETCHING';\r\n export const SELECT_DEPARTMENT3_FAILED = 'SELECT_DEPARTMENT3_FAILED';\r\n export const SELECT_DEPARTMENT3_SUCCESS = 'SELECT_DEPARTMENT3_SUCCESS';\r\n export const SelectDepartment3Reducer = (\r\n state = initialState,\r\n { type, payload }\r\n ) => {\r\n switch (type) {\r\n case SELECT_DEPARTMENT3_FETCHING:\r\n return { ...state, isFetching: true, isError: false };\r\n case SELECT_DEPARTMENT3_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n isError: true,\r\n result: { content: [] },\r\n };\r\n case SELECT_DEPARTMENT3_SUCCESS:\r\n return { ...state, isFetching: false, isError: false, result: payload };\r\n default:\r\n return state;\r\n }\r\n };\r\n\r\n ","import { sysURL } from '../constants';\r\nimport { httpClient } from './../utils/HttpClient';\r\nimport * as M from '../reducers/selectDepartment.reducer';\r\n\r\n//redirect to login page\r\n\r\n//load Count Summary Data Group \";\r\nexport const setSelectDepartmentStateToFetching = () => ({\r\n type: M.SELECT_DEPARTMENT_FETCHING,\r\n});\r\n\r\nexport const setSelectDepartmentStateToFailed = () => ({\r\n type: M.SELECT_DEPARTMENT_FAILED,\r\n});\r\n\r\nexport const setSelectDepartmentStateToSuccess = (payload) => ({\r\n type: M.SELECT_DEPARTMENT_SUCCESS,\r\n payload,\r\n});\r\n\r\nexport const loadDepartment = () => {\r\n let api = 'department/v1/getListAllWithUserRight';\r\n let url = api;\r\n return async (dispatch) => {\r\n try {\r\n dispatch(setSelectDepartmentStateToFetching());\r\n\r\n let result = await httpClient.get(url);\r\n\r\n if (result.data.status == true) {\r\n dispatch(setSelectDepartmentStateToSuccess(result.data));\r\n } else {\r\n dispatch(setSelectDepartmentStateToFailed([]));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(setSelectDepartmentStateToFailed({ data: { message: error } }));\r\n }\r\n\r\n // return getState().SelectDepartmentReducer.result.content;\r\n };\r\n};\r\n\r\n//set state dep2\r\nexport const setSelectDepartment2StateToFetching = () => ({\r\n type: M.SELECT_DEPARTMENT2_FETCHING,\r\n});\r\n\r\nexport const setSelectDepartment2StateToFailed = () => ({\r\n type: M.SELECT_DEPARTMENT2_FAILED,\r\n});\r\n\r\nexport const setSelectDepartment2StateToSuccess = (payload) => ({\r\n type: M.SELECT_DEPARTMENT2_SUCCESS,\r\n payload,\r\n});\r\nexport const loadDepartment2 = (data) => {\r\n let api = 'department/v1/getListBelowById?data=' + data;\r\n let url = api;\r\n return async (dispatch) => {\r\n try {\r\n dispatch(setSelectDepartment2StateToFetching());\r\n\r\n let result = await httpClient.get(url);\r\n\r\n if (result.data.status == true) {\r\n dispatch(setSelectDepartment2StateToSuccess(result.data));\r\n } else {\r\n dispatch(setSelectDepartment2StateToFailed([]));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(setSelectDepartment2StateToFailed({ data: { message: error } }));\r\n }\r\n\r\n // return getState().SelectDepartmentReducer.result.content;\r\n };\r\n};\r\n//set state dep3\r\nexport const setSelectDepartment3StateToFetching = () => ({\r\n type: M.SELECT_DEPARTMENT3_FETCHING,\r\n});\r\n\r\nexport const setSelectDepartment3StateToFailed = () => ({\r\n type: M.SELECT_DEPARTMENT3_FAILED,\r\n});\r\n\r\nexport const setSelectDepartment3StateToSuccess = (payload) => ({\r\n type: M.SELECT_DEPARTMENT3_SUCCESS,\r\n payload,\r\n});\r\nexport const loadDepartment3 = (data) => {\r\n console.log(data);\r\n let api = 'department/v1/getListBelowById?data=' + data;\r\n let url = api;\r\n return async (dispatch) => {\r\n try {\r\n dispatch(setSelectDepartment3StateToFetching());\r\n\r\n let result = await httpClient.get(url);\r\n\r\n if (result.data.status == true) {\r\n dispatch(setSelectDepartment3StateToSuccess(result.data));\r\n } else {\r\n dispatch(setSelectDepartment3StateToFailed([]));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(setSelectDepartment3StateToFailed({ data: { message: error } }));\r\n }\r\n\r\n // return getState().SelectDepartmentReducer.result.content;\r\n };\r\n};\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport MuiSelect from '@material-ui/core/Select';\r\nimport { Field } from 'formik';\r\nimport { Select } from 'formik-material-ui';\r\nimport {\r\n CircularProgress,\r\n FormControl,\r\n InputLabel,\r\n MenuItem,\r\n FormHelperText,\r\n} from '@material-ui/core';\r\nimport { masterData } from './../../../constants';\r\nimport * as selectDepartmentAction from '../../../actions/selectDepartment.action';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { SignalCellularNullOutlined } from '@material-ui/icons';\r\n\r\n// Prototype permissionGroups Data\r\n//const permissionLevels = masterData.permissionLevels;\r\n/**\r\n * SelectPermissionLevel() (component)\r\n * @param {string} name, name of select element (default: category_id)\r\n * @param {string} id, id of select element (default: category_id)\r\n * @param {string} label, label of select element (default: \"ประเภทของข้อมูลส่วนบุคคลที่มีการละเมิด\")\r\n * @param {function} onChange, onChange\r\n * @param {string|number} value, value of select element\r\n * @param {Formik.touched} touched\r\n * @param {Formik.errors} errors\r\n * @param {object} className, className of select element\r\n * @returns (element) SelectPermissionLevel\r\n */\r\nconst SelectDepartment = ({\r\n name = 'department_id',\r\n id = 'department_id',\r\n label = ['ส่วนงาน', 'ภาควิชา'],\r\n onChange,\r\n value,\r\n touched,\r\n errors,\r\n className,\r\n}) => {\r\n const [selectedValue, setSelectedValue] = useState(value);\r\n const [selectedValue2, setSelectedValue2] = useState('');\r\n const [selectedValue3, setSelectedValue3] = useState('');\r\n const [fullDepartmentTh, setFullDepartmentTh] = useState('');\r\n const [department, setDepartment] = useState([]);\r\n const [showDept, setShowDep] = useState([\r\n { show: true, level: 1 },\r\n { show: false, level: 2 },\r\n { show: false, level: 3 },\r\n ]);\r\n const dispatch = useDispatch();\r\n const SelectDepartmentReducer = useSelector(\r\n ({ SelectDepartmentReducer }) => SelectDepartmentReducer\r\n );\r\n const SelectDepartment2Reducer = useSelector(\r\n ({ SelectDepartment2Reducer }) => SelectDepartment2Reducer\r\n );\r\n const SelectDepartment3Reducer = useSelector(\r\n ({ SelectDepartment3Reducer }) => SelectDepartment3Reducer\r\n );\r\n\r\n const loadDepartment = async () => {\r\n await dispatch(selectDepartmentAction.loadDepartment());\r\n };\r\n const loadDepartment2 = async (value) => {\r\n await dispatch(selectDepartmentAction.loadDepartment2(value));\r\n };\r\n const loadDepartment3 = async (value) => {\r\n await dispatch(selectDepartmentAction.loadDepartment3(value));\r\n };\r\n\r\n useEffect(() => {\r\n loadDepartment();\r\n }, []);\r\n\r\n // Handle change select\r\n const memoHandleChange = useCallback((lvl, e, c) => {\r\n let context = typeof c.props.children === 'string' ? c.props.children : '';\r\n onChange && onChange(e.target.value, context);\r\n let objDep = SelectDepartmentReducer.result.content\r\n ? SelectDepartmentReducer.result.content\r\n : [];\r\n setSelectedValue(e.target.value);\r\n\r\n let obj = objDep.find((o) => o.id == e.target.value);\r\n let fullNameTh = obj?.fullNameTh\r\n ? JSON.parse(obj.fullNameTh).join(' ')\r\n : null;\r\n setFullDepartmentTh(fullNameTh);\r\n\r\n /* if (lvl == 2 && e.target.value == '') {\r\n onChange && onChange(selectedValue, context); // return data department1\r\n } else {\r\n onChange && onChange(e.target.value, context);\r\n }\r\n */\r\n // Handle state selectedValue.\r\n // let objDep = [];\r\n // let tmp = showDept;\r\n /*\r\n if (lvl == 1) {\r\n setSelectedValue(e.target.value);\r\n tmp[0].show = true;\r\n tmp[1].show = true;\r\n // tmp[2].show = false;\r\n console.log(e.target.value);\r\n\r\n if (e.target.value == '') {\r\n loadDepartment2('No-Key-Select');\r\n setSelectedValue2('');\r\n } else {\r\n loadDepartment2(e.target.value);\r\n }\r\n\r\n objDep = SelectDepartment2Reducer.result.content\r\n ? SelectDepartmentReducer.result.content\r\n : [];\r\n } else if (lvl == 0) {\r\n tmp[0].show = true;\r\n tmp[1].show = false;\r\n objDep = SelectDepartmentReducer.result.content\r\n ? SelectDepartmentReducer.result.content\r\n : [];\r\n setShowDep(tmp);\r\n console.log(showDept);\r\n let obj = objDep.find((o) => o.id == e.target.value);\r\n let fullNameTh = obj.fullNameTh\r\n ? JSON.parse(obj.fullNameTh).join(' ')\r\n : null;\r\n setFullDepartmentTh(fullNameTh);\r\n } else {\r\n setSelectedValue2(e.target.value);\r\n }*/\r\n });\r\n\r\n return (\r\n \r\n \r\n {label[0]}\r\n memoHandleChange(1, e, c)}\r\n >\r\n \r\n เลือก {label[0]}\r\n \r\n {SelectDepartmentReducer.result.content.map((dep) => (\r\n \r\n {dep.nameTh}\r\n \r\n ))}\r\n \r\n {fullDepartmentTh}\r\n {touched && errors && errors}\r\n \r\n\r\n {/* {selectedValue != '' ? (\r\n \r\n {label[1]}\r\n memoHandleChange(2, e, c)}\r\n >\r\n \r\n เลือก {label}\r\n \r\n {SelectDepartment2Reducer.result.content.map((dep) => (\r\n \r\n {dep.nameTh}\r\n \r\n ))}\r\n \r\n \r\n {touched && errors && errors}\r\n \r\n ) : null} */}\r\n \r\n );\r\n};\r\n\r\n// Types[, Rules] of props\r\nSelectDepartment.propTypes = {\r\n name: PropTypes.string,\r\n id: PropTypes.string,\r\n label: PropTypes.string,\r\n onChange: PropTypes.func,\r\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n};\r\n\r\n\r\nexport default React.memo(SelectDepartment);\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { Field } from 'formik';\r\nimport { TextField } from 'formik-material-ui';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport Chip from '@material-ui/core/Chip';\r\nimport HighlightOffOutlinedIcon from '@material-ui/icons/HighlightOffOutlined';\r\nimport { logger } from './../../../utils/utils';\r\nimport { labels, regexes, invalidMessages } from './../../../constants';\r\nimport { users } from './../../../data';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n chip: {\r\n display: 'flex',\r\n justifyContent: 'start',\r\n margin: 3,\r\n padding: '14px 4px',\r\n lineHeight: '15px',\r\n borderRadius: 20,\r\n width: '100%',\r\n fontSize: 16,\r\n backgroundColor: 'LightYellow',\r\n },\r\n}));\r\n\r\nconst SelectMultipleEmails = (\r\n {\r\n name = 'selectMutipleEmails',\r\n label = labels.selectMultipleEmails,\r\n fieldOptions,\r\n defaultValues = [],\r\n // FIXME: fixedOptions value in parent load(async) finished after selectMutipleEmails render\r\n // TODO: Create fixedOptions state and set by ref\r\n // fixedOptions = [],\r\n onChange = undefined,\r\n disableClearable = true,\r\n },\r\n ref\r\n) => {\r\n //// Log re-render\r\n logger('SelectMultipleEmails render');\r\n\r\n const classes = useStyles();\r\n\r\n // fieldOpts\r\n const fieldOpts = fieldOptions ? fieldOptions : { context: 'email' };\r\n\r\n // Set exist values to defaultValues\r\n defaultValues = defaultValues\r\n ? defaultValues.map((email) => email[fieldOpts.context])\r\n : [];\r\n const selectRef = useRef();\r\n\r\n const [options, setOptions] = React.useState([]);\r\n const [values, setValues] = useState([...defaultValues]);\r\n const [isWrongFomatValue, setIsWrongFomatValue] = useState(false);\r\n // Async get ann set email data to options state.\r\n // Ref: https://v4.mui.com/components/autocomplete/#asynchronous-requests\r\n useEffect(() => {\r\n let active = true;\r\n let responseEmails = [];\r\n (async () => {\r\n responseEmails = await users.mockSearchEmails();\r\n\r\n if (active) {\r\n setOptions(responseEmails.map((option) => option[fieldOpts.context]));\r\n }\r\n })();\r\n\r\n return () => {\r\n active = false;\r\n };\r\n }, []);\r\n\r\n // Set cursor in emails input.\r\n\r\n useEffect(() => {\r\n // https://stackoverflow.com/questions/53090432/react-hooks-right-way-to-clear-timeouts-and-intervals\r\n let timer = null;\r\n if (selectRef.current) {\r\n timer = setTimeout(() => {\r\n selectRef.current.focus();\r\n }, 1500);\r\n }\r\n return () => {\r\n clearTimeout(timer);\r\n };\r\n }, [selectRef]);\r\n return (\r\n \r\n {/* Using Autocomplete-Asynchronous is Main-Component */}\r\n {\r\n return value.map((option, index) => (\r\n \r\n ));\r\n }}\r\n renderInput={(params) => {\r\n return (\r\n \r\n {isWrongFomatValue ? (\r\n <>\r\n \r\n {invalidMessages.emailFormat}\r\n \r\n \r\n \r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n }}\r\n label={label}\r\n name={name}\r\n inputRef={selectRef}\r\n />\r\n );\r\n }}\r\n disableClearable={disableClearable}\r\n getOptionDisabled={(option) => {\r\n return values.includes(option);\r\n }}\r\n onInputChange={(e, val) => {\r\n const isWrongFomatEmail = val.match(regexes.emailFormat) === null;\r\n if (isWrongFomatEmail && val) {\r\n setIsWrongFomatValue(true);\r\n } else {\r\n setIsWrongFomatValue(false);\r\n }\r\n }}\r\n onChange={(e, newValue) => {\r\n // Validate mail of free solo value (byuser)\r\n const isWrongFomatEmails = newValue.filter(\r\n (email) => email.match(regexes.emailFormat) === null\r\n );\r\n if (isWrongFomatEmails.length) {\r\n console.error(\r\n 'email wrong format: ',\r\n isWrongFomatEmails.join(', ')\r\n );\r\n return false;\r\n } else {\r\n setValues(newValue);\r\n if (onChange) {\r\n onChange(newValue);\r\n }\r\n }\r\n }}\r\n />\r\n {/*
\r\n {' '}\r\n
    \r\n {usurs.map((option) => (\r\n
  • {option}
  • \r\n ))}\r\n
\r\n
*/}\r\n \r\n );\r\n};\r\n\r\nexport default React.memo(SelectMultipleEmails);\r\n","import React from 'react';\r\nimport {\r\n SolarSystemLoading,\r\n WaveTopBottomLoading,\r\n WindMillLoading,\r\n} from 'react-loadingg';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: '#fff',\r\n },\r\n}));\r\n\r\nexport const Backdrops = (props) => {\r\n const classes = useStyles();\r\n const { open,handleClose } = props;\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport const SolarSystemLoadings = () => ;\r\nexport const WaveTopBottomLoadings = () => ;\r\nexport const WindMillLoadings = () => ;\r\nexport const CommonLoadings = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","/**\r\n * =========================================================================\r\n * Modification\r\n * =========================================================================\r\n * Date: 12/01/2023\r\n * ID : MDF-NF-20230112\r\n * Desc: e-Mailing of issue to staff\r\n * - Dev component SelectMultipleEmails, implement in SettingPermissionMa\r\n * - Remove variable is declared but its value is never read\r\n * =========================================================================\r\n */\r\nimport React, { useEffect, useRef } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { useTheme } from '@material-ui/core/styles';\r\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport AddIcon from '@material-ui/icons/Add';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport {\r\n FormControl,\r\n Card,\r\n CardContent,\r\n CardActions,\r\n Typography,\r\n Box,\r\n Button,\r\n IconButton,\r\n Toolbar,\r\n AppBar,\r\n Dialog,\r\n Tabs,\r\n Tab,\r\n Slide,\r\n Paper,\r\n Grid,\r\n} from '@material-ui/core';\r\nimport MaterialTable, { MTableToolbar } from 'material-table';\r\n\r\nimport EditTwoToneIcon from '@material-ui/icons/EditTwoTone';\r\nimport * as settingPermissionManageAction from '../../../actions/settingPermissionManage.action';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\n// import Formik and Dependency\r\nimport { Formik, Form, Field } from 'formik';\r\nimport { Select, TextField } from 'formik-material-ui';\r\nimport * as Yup from 'yup';\r\nimport SelectMultiPersonalDataCategory from '../../fragments/SelectMultiPersonalDataCategory';\r\nimport globalStyles from '../../../styles/globalStyles';\r\nimport SelectPermissionLevelAdmin from '../../fragments/SelectPermissionLevelAdmin';\r\nimport SelectNameOrEmail from '../../fragments/SelectNameOrEmail';\r\nimport SelectDepartment from '../../fragments/SelectDepartment';\r\nimport SelectMultipleEmails from '../../fragments/SelectMultipleEmails/SelectMultipleEmails';\r\nimport { muiTable } from '../../../constants/index';\r\nimport { Backdrops } from './../../fragments/Loading/react-loadingg';\r\n\r\nconst styles = (theme) => ({\r\n ...globalStyles(theme),\r\n root: {\r\n flexGrow: 1,\r\n //backgroundColor: theme.palette.background.paper,\r\n },\r\n appBar: {\r\n position: 'relative',\r\n backgroundColor: theme.palette.primary.dark,\r\n },\r\n appBarTab: {\r\n backgroundColor: theme.palette.primary.light,\r\n color: '#222',\r\n },\r\n title: {\r\n //marginLeft: theme.spacing(2),\r\n flex: 1,\r\n },\r\n TabPanel: {\r\n padding: theme.spacing(1),\r\n },\r\n menuButton: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n toolbar: {\r\n paddingRight: theme.spacing(1),\r\n paddingLeft: theme.spacing(1),\r\n },\r\n formControl: {\r\n margin: theme.spacing(1, 0, 1, 0),\r\n },\r\n card: {\r\n minWidth: 400,\r\n padding: theme.spacing(0, 2, 3, 2),\r\n },\r\n cardContent: {\r\n minHeight: 400,\r\n },\r\n section: {\r\n margin: theme.spacing(1),\r\n },\r\n paper: {\r\n padding: theme.spacing(1),\r\n },\r\n tableHeight: {\r\n body: { minHeight: '10px !important' },\r\n },\r\n});\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\nconst TabPanel = (props) => {\r\n const { children, value, index, classes, ...other } = props;\r\n\r\n return (\r\n