CFE-25 change structure call widget

This commit is contained in:
AmirHossein Mahmoodi
2023-10-11 13:10:30 +03:30
parent dfc0207242
commit a3ee52632f
15 changed files with 64 additions and 167 deletions

View File

@@ -2,13 +2,10 @@ import {createContext, useReducer, useState} from "react";
const reducer = (state, action) => {
switch (action.type) {
case "CHANGE_ACTIVE_TAB":
return state.map((answer, index) => action.newValue === index ? {...answer, active: true} : {
...answer,
active: false
});
case "CHANGE_LIST":
return [...action.newList]
case "CREATE_ANSWER":
return {...action.data}
case "DELETE_ANSWER":
return null
default:
return state;
}
@@ -16,8 +13,7 @@ const reducer = (state, action) => {
export const AnswersContext = createContext()
export const AnswersProvider = ({children}) => {
const [openCallDialog, setOpenCallDialog] = useState(false)
const [activeTab, setActiveTab] = useState(0)
const [state, dispatch] = useReducer(reducer, []);
const [state, dispatch] = useReducer(reducer, null);
return <AnswersContext.Provider
value={{
@@ -25,7 +21,5 @@ export const AnswersProvider = ({children}) => {
setOpenCallDialog,
state,
dispatch,
activeTab,
setActiveTab
}}>{children}</AnswersContext.Provider>
}

View File

@@ -2,37 +2,16 @@ import {useContext} from "react";
import {AnswersContext} from "@/lib/callWidget/contexts/answers";
const useAnswers = () => {
const {state, dispatch, activeTab, setActiveTab} = useContext(AnswersContext)
const {state, dispatch} = useContext(AnswersContext)
const changeActiveTabAnswers = (newValue) => {
dispatch({type: 'CHANGE_ACTIVE_TAB', newValue})
setActiveTab(newValue)
const newAnswer = (data) => {
dispatch({type: 'CREATE_ANSWER', data})
}
const deleteAnswer = () => {
dispatch({type: 'DELETE_ANSWER'})
}
const newAnswerTab = (data) => {
const newAnswer = {
id: data.id,
phone_number: data.phone_number,
active: true
}
const newList = [...state, newAnswer]
dispatch({type: 'CHANGE_LIST', newList})
changeActiveTabAnswers(newList.length - 1)
}
const closeAnswerTab = (id) => {
const index = state.findIndex(answer => answer.id === id)
const newIndex = index === 0 ? 0 : index - 1
const newList = [...state]
newList.splice(index, 1);
if (newList.length !== 0) {
newList[newIndex].active = true
setActiveTab(newIndex)
}
dispatch({type: 'CHANGE_LIST', newList})
}
return {answersList: state, activeTab, setActiveTab, changeActiveTabAnswers, closeAnswerTab, newAnswerTab}
return {answer: state, newAnswer, deleteAnswer}
}
export default useAnswers