CFE-2 add header and description

This commit is contained in:
2023-10-29 15:38:10 +03:30
parent fafc61b320
commit 32a3ed707b
6 changed files with 121 additions and 28 deletions

View File

@@ -264,6 +264,9 @@
"CallAction": {
"call_history_of": "عملیات های مربوط به تماس",
"categories" : "موضوع ها",
"subcategories" : "زیر موضوع ها"
"subcategories" : "زیر موضوع ها",
"description" : "توضیحات تماس (اختیاری)",
"text_field_label" : "توضیحات",
"text_field_palacholder" : "لطفا توضیحات خود را وارد نمایید"
}
}

View File

@@ -0,0 +1,54 @@
import {fireEvent, render, screen, waitFor} from "@testing-library/react";
import MockAppWithProviders from "../../../../../../../../../../../mocks/AppWithProvider";
import {AnswersProvider} from "@/lib/callWidget/contexts/answers";
import CallActionDescription from "..";
describe('Action Header Button from Call Actions Categories', () => {
describe('Rendering', () => {
it('should see placeholder text', async () => {
render(
<MockAppWithProviders>
<AnswersProvider>
<CallActionDescription />
</AnswersProvider>
</MockAppWithProviders>
)
const textElement = screen.getByPlaceholderText('لطفا توضیحات خود را وارد نمایید')
await waitFor(() => {
expect(textElement).toBeInTheDocument()
})
});
it('should see header text', async () => {
render(
<MockAppWithProviders>
<AnswersProvider>
<CallActionDescription />
</AnswersProvider>
</MockAppWithProviders>
)
const textElement = screen.getByText('توضیحات تماس (اختیاری)')
await waitFor(() => {
expect(textElement).toBeInTheDocument()
})
});
});
describe("Behavior", ()=>{
it("Should see what write in input", async()=>{
const setDescription = jest.fn();
render(
<MockAppWithProviders>
<AnswersProvider>
<CallActionDescription setDescription={setDescription} />
</AnswersProvider>
</MockAppWithProviders>
)
const textElement = screen.getByPlaceholderText('لطفا توضیحات خود را وارد نمایید')
fireEvent.change(textElement, {target : {value : "امین"}})
await waitFor(() => {
expect(textElement).toHaveValue("امین")
})
})
})
});

View File

@@ -0,0 +1,27 @@
import { Box, Chip, Divider, TextField } from "@mui/material"
import { useTranslations } from "next-intl";
const CallActionDescription = ({setDescription}) => {
const t = useTranslations();
return(
<>
<Divider sx={{margin : 2}}><Chip label={t("CallAction.description")} variant="outlined"/></Divider>
<Box sx={{m : 2}}>
<TextField
variant="outlined"
placeholder={t(
"CallAction.text_field_palacholder"
)}
type={"text"}
fullWidth
multiline
rows={8}
onChange={(e)=>{
setDescription(e.target.value)
}}
/>
</Box>
</>
)
}
export default CallActionDescription

View File

@@ -1,29 +1,11 @@
import { Button, Grid, Stack } from "@mui/material";
import useRequest from "@/lib/app/hooks/useRequest";
import { CALL_ACTION } from "@/core/data/apiRoutes";
import useAnswers from "@/lib/callWidget/hooks/useAnswers";
import { Button, Grid } from "@mui/material";
const CallActionSubcategoriesButton = ({ sub_category, tab }) => {
const requestServer = useRequest({ auth: true });
const { closeAnswerTab } = useAnswers();
const handleSubcategoryButton = () => {
requestServer(`${CALL_ACTION}/${tab.id}`, "post", {
data: {
category_id: sub_category.category_id,
subcategory_id: sub_category.subcategory_id,
},
success: {
notification: { show: false },
},
})
.then(() => {
closeAnswerTab(tab.id);
})
.catch(() => {});
};
const CallActionSubcategoriesButton = ({ sub_category, tab, handleSubcategoryButton }) => {
return sub_category.category_id === tab.active_category_id ? (
<Grid item xs={3}>
<Button sx={{py : 1.5}} fullWidth color="inherit" onClick={handleSubcategoryButton} variant={"contained"}>
<Button sx={{py : 1.5}} fullWidth color="inherit"
onClick={()=>{handleSubcategoryButton(sub_category.category_id, sub_category.subcategory_id)}} variant={"contained"}>
{sub_category.subcategory_name}
</Button>
</Grid>

View File

@@ -3,7 +3,7 @@ import { Chip, Divider, Grid, Stack } from "@mui/material";
import CallActionSubcategoriesButton from "@/components/layouts/Dashboard/CallWidget/CallWidgetDialog/CallTabs/CallTabPanel/CallActions/CallActionSubcategories/CallActionSubcategoriesButton";
import { useTranslations } from "next-intl";
const CallActionsSubcategories = ({ tab }) => {
const CallActionsSubcategories = ({ tab, handleSubcategoryButton }) => {
const { subCategoryLists } = useCategories();
const t = useTranslations();
return (
@@ -12,7 +12,7 @@ const CallActionsSubcategories = ({ tab }) => {
<Stack sx={{m : 1, p : 1 }} direction={"row"}>
<Grid container spacing={2}>
{subCategoryLists.map((sub_category, index) => {
return <CallActionSubcategoriesButton key={index} tab={tab} sub_category={sub_category} />;
return <CallActionSubcategoriesButton key={index} tab={tab} sub_category={sub_category} handleSubcategoryButton={handleSubcategoryButton}/>;
})}
</Grid>
</Stack>

View File

@@ -1,14 +1,41 @@
import { Divider } from "@mui/material";
import CallActionsCategories from "./CallActionCategories";
import CallActionsSubcategories from "./CallActionSubcategories";
import ActionHeader from "./ActionHeader";
import CallActionDescription from "./CallActionDescription";
import { CALL_ACTION } from "@/core/data/apiRoutes";
import useRequest from "@/lib/app/hooks/useRequest";
import useAnswers from "@/lib/callWidget/hooks/useAnswers";
import { useState } from "react";
function CallActions({ tab }) {
const [description, setDescription] = useState('')
const requestServer = useRequest({ auth: true });
const { closeAnswerTab } = useAnswers();
const handleSubcategoryButton = (category_id, subcategory_id) => {
requestServer(`${CALL_ACTION}/${tab.id}`, "post", {
data: {
category_id,
subcategory_id,
description
},
success: {
notification: { show: false },
},
})
.then(() => {
closeAnswerTab(tab.id);
})
.catch(() => {});
};
return (
<>
<ActionHeader tab={tab} />
<CallActionDescription setDescription={setDescription} />
<CallActionsCategories tab={tab} />
<CallActionsSubcategories tab={tab} />
<CallActionsSubcategories handleSubcategoryButton={handleSubcategoryButton} tab={tab} />
</>
);
}