Alteração nos tickets para a criação do ticket apenas com o numero e inserção automatica do 55 ao salvar o contato
parent
48834af7de
commit
9ecad6f9b5
|
@ -88,7 +88,7 @@ export const store = async (req: Request, res: Response): Promise<Response> => {
|
||||||
number: Yup.string()
|
number: Yup.string()
|
||||||
.required()
|
.required()
|
||||||
.matches(/^\d+$/, "Invalid number format. Only numbers is allowed.")
|
.matches(/^\d+$/, "Invalid number format. Only numbers is allowed.")
|
||||||
.matches(/^55\d+$/, "The number must start with 55.")
|
// .matches(/^55\d+$/, "The number must start with 55.")
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -97,17 +97,19 @@ export const store = async (req: Request, res: Response): Promise<Response> => {
|
||||||
throw new AppError(err.message);
|
throw new AppError(err.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newContact.number = addStartPhoneNumber(newContact.number);
|
||||||
|
|
||||||
const validNumber = await CheckIsValidContact(newContact.number);
|
const validNumber = await CheckIsValidContact(newContact.number);
|
||||||
|
|
||||||
// const validNumber: any = await CheckContactNumber(newContact.number)
|
// const validNumber: any = await CheckContactNumber(newContact.number)
|
||||||
|
|
||||||
if(!validNumber){
|
if (!validNumber) {
|
||||||
throw new AppError("ERR_WAPP_CHECK_CONTACT");
|
throw new AppError("ERR_WAPP_CHECK_CONTACT");
|
||||||
}
|
}
|
||||||
|
|
||||||
const profilePicUrl = await GetProfilePicUrl(validNumber);
|
const profilePicUrl = await GetProfilePicUrl(validNumber);
|
||||||
|
|
||||||
console.log('xxxxxxxxxxx profilePicUrl: ',profilePicUrl)
|
console.log('xxxxxxxxxxx profilePicUrl: ', profilePicUrl)
|
||||||
|
|
||||||
|
|
||||||
// console.log(`newContact.name: ${newContact.name}\n
|
// console.log(`newContact.name: ${newContact.name}\n
|
||||||
|
@ -154,8 +156,8 @@ export const update = async (
|
||||||
const schema = Yup.object().shape({
|
const schema = Yup.object().shape({
|
||||||
name: Yup.string(),
|
name: Yup.string(),
|
||||||
number: Yup.string()
|
number: Yup.string()
|
||||||
.matches(/^\d+$/,"Invalid number format. Only numbers is allowed.")
|
.matches(/^\d+$/, "Invalid number format. Only numbers is allowed.")
|
||||||
.matches(/^55\d+$/, "The number must start with 55.")
|
// .matches(/^55\d+$/, "The number must start with 55.")
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -164,6 +166,8 @@ export const update = async (
|
||||||
throw new AppError(err.message);
|
throw new AppError(err.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
contactData.number = addStartPhoneNumber(contactData.number);
|
||||||
|
|
||||||
await CheckIsValidContact(contactData.number);
|
await CheckIsValidContact(contactData.number);
|
||||||
|
|
||||||
const { contactId } = req.params;
|
const { contactId } = req.params;
|
||||||
|
@ -225,3 +229,14 @@ export const contacsBulkInsertOnQueue = async (req: Request, res: Response): Pro
|
||||||
return res.status(200).json({ message: 'ok' })
|
return res.status(200).json({ message: 'ok' })
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function addStartPhoneNumber(phoneNumber: string) {
|
||||||
|
|
||||||
|
const regex = /^55/;
|
||||||
|
|
||||||
|
if (!regex.test(phoneNumber)) {
|
||||||
|
phoneNumber = '55' + phoneNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
return phoneNumber
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -224,7 +224,7 @@ const ContactModal = ({ open, onClose, contactId, initialValues, onSave }) => {
|
||||||
|
|
||||||
error={touched.number && Boolean(errors.number)}
|
error={touched.number && Boolean(errors.number)}
|
||||||
helperText={touched.number && errors.number}
|
helperText={touched.number && errors.number}
|
||||||
placeholder="5513912344321"
|
placeholder="11912344321"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
margin="dense"
|
margin="dense"
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -36,7 +36,19 @@ const NewTicketModal = ({ modalOpen, onClose }) => {
|
||||||
const { user } = useContext(AuthContext);
|
const { user } = useContext(AuthContext);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!modalOpen || searchParam.length < 3) {
|
|
||||||
|
|
||||||
|
const regex = /^[0-9\b]+$/; // Regular expression to match only numbers
|
||||||
|
if (searchParam && !searchParam.match(regex)) return
|
||||||
|
|
||||||
|
if (searchParam && searchParam.length > 9) {
|
||||||
|
setSelectedContact({})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setSelectedContact(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!modalOpen || searchParam.length < 5) {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -47,16 +59,21 @@ const NewTicketModal = ({ modalOpen, onClose }) => {
|
||||||
const { data } = await api.get("contacts", {
|
const { data } = await api.get("contacts", {
|
||||||
params: { searchParam },
|
params: { searchParam },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// console.log('data.contacts: ', data.contacts)
|
||||||
|
|
||||||
setOptions(data.contacts);
|
setOptions(data.contacts);
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
toastError(err);
|
toastError(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
fetchContacts();
|
fetchContacts();
|
||||||
}, 500);
|
}, 500);
|
||||||
|
|
||||||
return () => clearTimeout(delayDebounceFn);
|
return () => clearTimeout(delayDebounceFn);
|
||||||
}, [searchParam, modalOpen]);
|
}, [searchParam, modalOpen]);
|
||||||
|
|
||||||
|
@ -67,9 +84,31 @@ const NewTicketModal = ({ modalOpen, onClose }) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSaveTicket = async contactId => {
|
const handleSaveTicket = async contactId => {
|
||||||
if (!contactId) return;
|
|
||||||
setLoading(true);
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
// console.log('=========> options: ', options)
|
||||||
|
|
||||||
|
if (options && options.length > 0) {
|
||||||
|
console.log('-----> options[0].id: ', options[0].id)
|
||||||
|
contactId = options[0].id
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.log('NO CONTACT whith this searchParam: ', searchParam)
|
||||||
|
|
||||||
|
const values = {
|
||||||
|
name: searchParam,
|
||||||
|
number: searchParam,
|
||||||
|
};
|
||||||
|
|
||||||
|
const { data: data1 } = await api.post("/contacts", values);
|
||||||
|
|
||||||
|
console.log('data1: ', data1)
|
||||||
|
|
||||||
|
contactId = data1.id
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
const { data: ticket } = await api.post("/tickets", {
|
const { data: ticket } = await api.post("/tickets", {
|
||||||
contactId: contactId,
|
contactId: contactId,
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
|
@ -80,19 +119,93 @@ const NewTicketModal = ({ modalOpen, onClose }) => {
|
||||||
history.push(`/tickets/${ticket.id}`);
|
history.push(`/tickets/${ticket.id}`);
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
|
|
||||||
|
setLoading(false);
|
||||||
|
handleClose();
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
setLoading(false);
|
||||||
toastError(err);
|
toastError(err);
|
||||||
}
|
}
|
||||||
setLoading(false);
|
|
||||||
handleClose();
|
|
||||||
|
|
||||||
|
// if (!contactId) return;
|
||||||
|
// setLoading(true);
|
||||||
|
// try {
|
||||||
|
// const { data: ticket } = await api.post("/tickets", {
|
||||||
|
// contactId: contactId,
|
||||||
|
// userId: user.id,
|
||||||
|
// status: "open",
|
||||||
|
// });
|
||||||
|
|
||||||
|
// window.location.reload();
|
||||||
|
// history.push(`/tickets/${ticket.id}`);
|
||||||
|
// window.location.reload();
|
||||||
|
|
||||||
|
// } catch (err) {
|
||||||
|
// toastError(err);
|
||||||
|
// }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const handleChange = (number) => {
|
||||||
|
|
||||||
|
const regex = /^[0-9\b]+$/; // Regular expression to match only numbers
|
||||||
|
|
||||||
|
// setPhone(event.target.value);
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
|
||||||
|
let newValue = ''
|
||||||
|
|
||||||
|
for (const char of number) {
|
||||||
|
|
||||||
|
// console.log('char: ', char)
|
||||||
|
|
||||||
|
if (char.match(regex)) {
|
||||||
|
newValue += char
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log('newValue: ', newValue)
|
||||||
|
|
||||||
|
setSearchParam(newValue)
|
||||||
|
|
||||||
|
}, 100);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSelectOption = (e, newValue) => {
|
const handleSelectOption = (e, newValue) => {
|
||||||
|
|
||||||
|
|
||||||
if (newValue?.number) {
|
if (newValue?.number) {
|
||||||
|
|
||||||
|
console.log('newValue: ', newValue)
|
||||||
|
|
||||||
setSelectedContact(newValue);
|
setSelectedContact(newValue);
|
||||||
|
|
||||||
} else if (newValue?.name) {
|
} else if (newValue?.name) {
|
||||||
setNewContact({ name: newValue.name });
|
|
||||||
setContactModalOpen(true);
|
// console.log('newValue?.name: ', newValue?.name)
|
||||||
|
|
||||||
|
const regex = /^[0-9\b]+$/; // Regular expression to match only numbers
|
||||||
|
|
||||||
|
if (newValue.name.match(regex)) {
|
||||||
|
|
||||||
|
console.log('==========> newValue.name', newValue.name)
|
||||||
|
setNewContact({ name: newValue.name, number: newValue.name });
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
setNewContact({ name: newValue.name });
|
||||||
|
setContactModalOpen(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -144,7 +257,42 @@ const NewTicketModal = ({ modalOpen, onClose }) => {
|
||||||
<DialogTitle id="form-dialog-title">
|
<DialogTitle id="form-dialog-title">
|
||||||
{i18n.t("newTicketModal.title")}
|
{i18n.t("newTicketModal.title")}
|
||||||
</DialogTitle>
|
</DialogTitle>
|
||||||
|
|
||||||
<DialogContent dividers>
|
<DialogContent dividers>
|
||||||
|
|
||||||
|
<TextField
|
||||||
|
label={i18n.t("newTicketModal.fieldLabel")}
|
||||||
|
variant="outlined"
|
||||||
|
autoFocus
|
||||||
|
value={searchParam}
|
||||||
|
// onChange={e => setSearchParam(e.target.value)}
|
||||||
|
onChange={e => {
|
||||||
|
|
||||||
|
handleChange(e.target.value)
|
||||||
|
|
||||||
|
// setSearchParam(e.target.value)
|
||||||
|
}}
|
||||||
|
onKeyPress={e => {
|
||||||
|
if (loading || !selectedContact) return;
|
||||||
|
else if (e.key === "Enter") {
|
||||||
|
handleSaveTicket(selectedContact.id);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
// InputProps={{
|
||||||
|
// ...params.InputProps,
|
||||||
|
// endAdornment: (
|
||||||
|
// <React.Fragment>
|
||||||
|
// {loading ? (
|
||||||
|
// <CircularProgress color="inherit" size={20} />
|
||||||
|
// ) : null}
|
||||||
|
// {params.InputProps.endAdornment}
|
||||||
|
// </React.Fragment>
|
||||||
|
// ),
|
||||||
|
// }}
|
||||||
|
/>
|
||||||
|
</DialogContent>
|
||||||
|
|
||||||
|
{/* <DialogContent dividers>
|
||||||
<Autocomplete
|
<Autocomplete
|
||||||
options={options}
|
options={options}
|
||||||
loading={loading}
|
loading={loading}
|
||||||
|
@ -184,7 +332,7 @@ const NewTicketModal = ({ modalOpen, onClose }) => {
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
</DialogContent>
|
</DialogContent> */}
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button
|
<Button
|
||||||
onClick={handleClose}
|
onClick={handleClose}
|
||||||
|
|
|
@ -166,8 +166,6 @@ const Ticket = () => {
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
console.log('ERROR: ', err)
|
|
||||||
|
|
||||||
toastError(err);
|
toastError(err);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -280,7 +280,7 @@ const messages = {
|
||||||
},
|
},
|
||||||
newTicketModal: {
|
newTicketModal: {
|
||||||
title: "Criar Ticket",
|
title: "Criar Ticket",
|
||||||
fieldLabel: "Digite o nome para pesquisar o contato",
|
fieldLabel: "Digite o numero para criar um ticket",
|
||||||
add: "Adicionar",
|
add: "Adicionar",
|
||||||
buttons: {
|
buttons: {
|
||||||
ok: "Salvar",
|
ok: "Salvar",
|
||||||
|
|
Loading…
Reference in New Issue