Merge pull request 'Intergate api export file' (#58) from Sprint-4/MS-37-FE-Evaluation into master
Reviewed-on: #58
This commit is contained in:
		
						commit
						387e6ce80b
					
				| 
						 | 
				
			
			@ -2,15 +2,14 @@ import {
 | 
			
		|||
  evaluation,
 | 
			
		||||
  getAllTechByUserId,
 | 
			
		||||
  getAllUser,
 | 
			
		||||
  sprintReview
 | 
			
		||||
  sprintReview,
 | 
			
		||||
} from '@/api/Admin'
 | 
			
		||||
import DataTableAll from '@/components/DataTable/DataTable'
 | 
			
		||||
import ProjectInvolvement from '@/components/ProjectInvolvement/ProjectInvolvement'
 | 
			
		||||
import { get } from '@/rtk/helpers/apiService'
 | 
			
		||||
import { get, getDownloadFile } from '@/rtk/helpers/apiService'
 | 
			
		||||
import { Box, Button, Loader, Select, Text, Title } from '@mantine/core'
 | 
			
		||||
import { DateInput } from '@mantine/dates'
 | 
			
		||||
import { notifications } from '@mantine/notifications'
 | 
			
		||||
import axios from 'axios'
 | 
			
		||||
import moment from 'moment'
 | 
			
		||||
import { useEffect, useState } from 'react'
 | 
			
		||||
import classes from './StaffEvaluation.module.css'
 | 
			
		||||
| 
						 | 
				
			
			@ -53,8 +52,6 @@ const StaffEvaluation = () => {
 | 
			
		|||
    toDate: null,
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  console.log(filter, 'filter')
 | 
			
		||||
 | 
			
		||||
  const getListUser = async () => {
 | 
			
		||||
    try {
 | 
			
		||||
      const params = {}
 | 
			
		||||
| 
						 | 
				
			
			@ -72,35 +69,46 @@ const StaffEvaluation = () => {
 | 
			
		|||
    return []
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function getFormattedDateTime(): string {
 | 
			
		||||
    const now = new Date()
 | 
			
		||||
    const year = now.getFullYear()
 | 
			
		||||
    const month = String(now.getMonth() + 1).padStart(2, '0') // Tháng bắt đầu từ 0
 | 
			
		||||
    const day = String(now.getDate()).padStart(2, '0')
 | 
			
		||||
    const hours = String(now.getHours()).padStart(2, '0')
 | 
			
		||||
    const minutes = String(now.getMinutes()).padStart(2, '0')
 | 
			
		||||
    const seconds = String(now.getSeconds()).padStart(2, '0')
 | 
			
		||||
 | 
			
		||||
    return `${year}${month}${day}${hours}${minutes}${seconds}`
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const downloadFile = async () => {
 | 
			
		||||
    await axios({
 | 
			
		||||
      url: evaluation,
 | 
			
		||||
      method: 'GET',
 | 
			
		||||
      responseType: 'blob',
 | 
			
		||||
      headers: {
 | 
			
		||||
        'Content-Type': 'application/json',
 | 
			
		||||
        Authorization: `Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwMDAvYXBpL3YxL2FkbWluL2xvZ2luIiwiaWF0IjoxNzI2ODE3ODU3LCJleHAiOjE3MjY5MDQyNTcsIm5iZiI6MTcyNjgxNzg1NywianRpIjoid0kzeXM5SGZiV21wS3pONSIsInN1YiI6IjE2IiwicHJ2IjoiZDJmZjI5MzM5YThhM2U4MmMzNTgyYTVhOGU3MzlkZjE3ODliYjEyZiJ9.oEHW0cIlQkawYQMVZnz5TZ5twzY18301eLmXjC55LfY`,
 | 
			
		||||
      },
 | 
			
		||||
      params: {
 | 
			
		||||
        ...filter,
 | 
			
		||||
        userID: 3,
 | 
			
		||||
      },
 | 
			
		||||
    })
 | 
			
		||||
      .then((response) => {
 | 
			
		||||
        const fileURL = window.URL.createObjectURL(new Blob([response.data]))
 | 
			
		||||
    try {
 | 
			
		||||
      const params = {
 | 
			
		||||
        userID: filter.userID,
 | 
			
		||||
      }
 | 
			
		||||
      const res = await getDownloadFile(evaluation, params)
 | 
			
		||||
 | 
			
		||||
      if (res.status) {
 | 
			
		||||
        const fileURL = window.URL.createObjectURL(new Blob([res.data]))
 | 
			
		||||
        const fileLink = document.createElement('a')
 | 
			
		||||
 | 
			
		||||
        const fileName = `EXPORT_SPRINT_REVIEW_AND_TECHNICAL_EVALUATION_${getFormattedDateTime()}.docx`
 | 
			
		||||
 | 
			
		||||
        fileLink.href = fileURL
 | 
			
		||||
        fileLink.setAttribute('download', 'RENAME_WORD_FILE.docx') // -------------> RENAME_WORD_FILE
 | 
			
		||||
        fileLink.setAttribute('download', fileName)
 | 
			
		||||
        document.body.appendChild(fileLink)
 | 
			
		||||
 | 
			
		||||
        fileLink.click()
 | 
			
		||||
 | 
			
		||||
        fileLink.remove()
 | 
			
		||||
      }
 | 
			
		||||
    } catch (error: any) {
 | 
			
		||||
      notifications.show({
 | 
			
		||||
        title: 'Error',
 | 
			
		||||
        message: error.message ?? error,
 | 
			
		||||
        color: 'red',
 | 
			
		||||
      })
 | 
			
		||||
      .catch((error) => {
 | 
			
		||||
        console.error('Error downloading the file:', error)
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
    return []
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
| 
						 | 
				
			
			@ -224,16 +232,17 @@ const StaffEvaluation = () => {
 | 
			
		|||
      size: '25%',
 | 
			
		||||
      header: 'Last update',
 | 
			
		||||
      render: (row: any) => {
 | 
			
		||||
        return (
 | 
			
		||||
          <div
 | 
			
		||||
            style={{
 | 
			
		||||
              display: 'flex',
 | 
			
		||||
              justifyContent: 'center',
 | 
			
		||||
            }}
 | 
			
		||||
          >
 | 
			
		||||
            {moment(row?.updated_at).format('DD/MM/YYYY HH:mm:ss')}
 | 
			
		||||
          </div>
 | 
			
		||||
        )
 | 
			
		||||
        if (row?.updated_at)
 | 
			
		||||
          return (
 | 
			
		||||
            <div
 | 
			
		||||
              style={{
 | 
			
		||||
                display: 'flex',
 | 
			
		||||
                justifyContent: 'center',
 | 
			
		||||
              }}
 | 
			
		||||
            >
 | 
			
		||||
              {moment(row?.updated_at).format('DD/MM/YYYY HH:mm:ss')}
 | 
			
		||||
            </div>
 | 
			
		||||
          )
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  ]
 | 
			
		||||
| 
						 | 
				
			
			@ -302,6 +311,7 @@ const StaffEvaluation = () => {
 | 
			
		|||
        >
 | 
			
		||||
          <Button
 | 
			
		||||
            // m={5}
 | 
			
		||||
            style={{ display: filter.userID != '' ? 'flex' : 'none' }}
 | 
			
		||||
            onClick={() => downloadFile()}
 | 
			
		||||
          >
 | 
			
		||||
            Export
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
/* eslint-disable @typescript-eslint/no-explicit-any */
 | 
			
		||||
import axios from 'axios'
 | 
			
		||||
import { getFormDataHeader, getHeaderInfo } from '@/rtk/helpers/tokenCreator'
 | 
			
		||||
import { removeTokens } from '@/rtk/localStorage'
 | 
			
		||||
import { notifications } from '@mantine/notifications'
 | 
			
		||||
import axios from 'axios'
 | 
			
		||||
const handleResponse = (response: any) => {
 | 
			
		||||
  if (response.status === 401) {
 | 
			
		||||
    removeTokens()
 | 
			
		||||
| 
						 | 
				
			
			@ -14,6 +14,17 @@ const handleResponse = (response: any) => {
 | 
			
		|||
  return response
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const handleResponseDownloadFile = (response: any) => {
 | 
			
		||||
  if (response.status === 401) {
 | 
			
		||||
    removeTokens()
 | 
			
		||||
    window.location.href = '/login'
 | 
			
		||||
  }
 | 
			
		||||
  if (response.status === 200) {
 | 
			
		||||
    return response
 | 
			
		||||
  }
 | 
			
		||||
  return response
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @param url
 | 
			
		||||
| 
						 | 
				
			
			@ -69,6 +80,30 @@ export const get = async (url: any, params: any = {}) => {
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const getDownloadFile = async (url: any, params: any = {}) => {
 | 
			
		||||
  const header = await getHeaderInfo()
 | 
			
		||||
 | 
			
		||||
  try {
 | 
			
		||||
    const resp = await axios.get(url, {
 | 
			
		||||
      ...header,
 | 
			
		||||
      params,
 | 
			
		||||
      responseType: 'blob',
 | 
			
		||||
    })
 | 
			
		||||
    return handleResponseDownloadFile(resp)
 | 
			
		||||
  } catch (err: any) {
 | 
			
		||||
    console.log(err)
 | 
			
		||||
    if (err.response.status === 422) {
 | 
			
		||||
      const errorMess = err.response.data.message
 | 
			
		||||
      notifications.show({
 | 
			
		||||
        title: 'Error',
 | 
			
		||||
        message: errorMess,
 | 
			
		||||
        color: 'red',
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
    throw handleResponseDownloadFile(err.response)
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const put = async (url: any, body: any) => {
 | 
			
		||||
  const header = await getHeaderInfo()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue