|
- "use client";
-
- import { FileUpload } from "@mui/icons-material";
- import { Button, Card, CardContent, Grid, Stack, Typography } from "@mui/material";
- import React, { ChangeEvent, useCallback, useMemo, useState } from "react";
- import { useTranslation } from "react-i18next";
- import { errorDialogWithContent, submitDialog, successDialog, successDialogWithContent } from "../Swal/CustomAlerts";
- import { importStockTake } from "@/app/api/stockTake/actions";
- import { importWarehouse } from "@/app/api/warehouse/actions";
-
- interface Props {
- }
-
- const BUTTON_NAMES = ["Import Stock Take", "Import Warehouse"] as const;
- type ButtonNameType = typeof BUTTON_NAMES[number];
-
- const ExcelFileImport: React.FC<Props> = ({ }) => {
-
- const { t } = useTranslation("common");
- const [isLoading, setIsLoading] = useState(false);
-
- const buttonNames: ButtonNameType[] = useMemo(() => {
- return [...BUTTON_NAMES]
- }, [])
-
- const handleExcelFileImportClick = useCallback(async (event: ChangeEvent<HTMLInputElement>) => {
- try {
- if (event.target.files !== null) {
- const file = event.target.files[0]
- const formData = new FormData();
- formData.append('multipartFileList', file);
-
- if (file.name.endsWith(".xlsx") || file.name.endsWith(".csv")) {
- let response: String = ""
- const buttonId = event.target.id as ButtonNameType;
- setIsLoading(() => true);
-
- console.log(buttonId)
- switch (buttonId) {
- case "Import Stock Take":
- response = await importStockTake(formData)
- break;
- case "Import Warehouse":
- response = await importWarehouse(formData)
- break;
- }
-
- if (response.includes("Import Excel success")) {
- successDialogWithContent(t("Import Success"), t(`${response}`), t)
- } else {
- errorDialogWithContent(t("Import Fail"), t(`${response}`), t)
- }
- setIsLoading(() => false);
- }
- }
-
- } catch (err) {
- console.log(err)
- setIsLoading(() => false);
- // return false
- }
- }, [isLoading])
-
- return (
- <Card>
- <CardContent sx={{ display: "flex", flexDirection: "column", gap: 1 }}>
- <Typography
- variant="h4"
- sx={{
- background: 'linear-gradient(90deg, red, orange, yellow, green, blue, indigo, violet)',
- WebkitBackgroundClip: 'text',
- WebkitTextFillColor: 'transparent',
- backgroundClip: 'text',
- color: 'transparent', // Fallback for non-Webkit browsers
- }}
- >
- {isLoading ? t("Importing...") : t("Pending for importing")}
- </Typography>
- <Stack
- spacing={2}
- >
- <Grid container rowGap={1.5}>
- {
- buttonNames.map((name) => {
- return (
- <Grid container key={`${name}-grid`}>
- <Button
- key={`${name}-btn`}
- variant="contained"
- color="info"
- startIcon={<FileUpload />}
- component="label"
- >
- <input
- key={`${name}-in`}
- id={name}
- type='file'
- accept='.xlsx'
- hidden
- onChange={(event) => {
- handleExcelFileImportClick(event)
- }}
- />
- {t(name)}
- </Button>
- </Grid>
- )
- })
- }
- </Grid>
- </Stack>
- </CardContent>
- </Card>
- );
- };
-
- export default ExcelFileImport;
|