Browse Source

feat: enhance error handling in forms, update file size display, and refactor dashboard data retrieval

master
sina_sajjadi 1 week ago
parent
commit
0f37d3bea4
  1. 15
      src/components/auth/change-password-from.tsx
  2. 24
      src/components/auth/login-form.tsx
  3. 2
      src/components/chat/file-message.tsx
  4. 13
      src/components/dashboard/admin.tsx
  5. 45
      src/components/dashboard/widgets/box/widget-order-by-status.tsx
  6. 9
      src/components/layouts/topbar/message-bar.tsx

15
src/components/auth/change-password-from.tsx

@ -46,12 +46,17 @@ const ChangePasswordForm = () => {
},
{
onError: (error: any) => {
Object.keys(error?.response?.data).forEach((field: any) => {
setError(field, {
type: 'manual',
message: error?.response?.data[field][0],
if (error.response?.data?.errors?.length) {
error.response?.data?.errors?.map((err) => {
if (err.field) {
toast.error(`${err.field} : ${err.message}`);
} else {
toast.error(err.message);
}
});
});
} else {
toast.error(error.message || t("errorOccurred"));
}
},
onSuccess: (data) => {
if (!data?.success) {

24
src/components/auth/login-form.tsx

@ -16,6 +16,7 @@ import {
hasAccess,
setAuthCredentials,
} from '@/utils/auth-utils';
import { toast } from 'react-toastify';
const loginFormSchema = yup.object().shape({
phone_number: yup.string().required('Phone number is required'),
@ -53,20 +54,19 @@ const LoginForm = () => {
}
*/
},
onError: (err: any) => {
onError: (error: any) => {
// Extract the error message from the server response
let message = 'form:error-credential-wrong'; // Default error message
if (err.response && err.response.data && err.response.data.message) {
message = err.response.data.message;
} else if (err.message) {
message = err.message;
if (error.response?.data?.errors?.length) {
error.response?.data?.errors?.map((err) => {
if (err.field) {
toast.error(`${err.field} : ${err.message}`);
} else {
toast.error(err.message);
}
});
} else {
toast.error(error.message || t("errorOccurred"));
}
// Set the error message state
setErrorMessage(message);
console.error('Login error:', err);
},
},
);

2
src/components/chat/file-message.tsx

@ -168,7 +168,7 @@ const FileMessage = ({ file }) => {
<p className="text-base font-bold mb-0 overflow-hidden text-ellipsis whitespace-nowrap w-44">
{fileName}
</p>
<p className="font-thin text-xs opacity-60">{formatBytes(file?.size)}</p>
<p className="font-thin text-xs opacity-60">{file?.content_size}</p>
</div>
</div>
);

13
src/components/dashboard/admin.tsx

@ -150,21 +150,22 @@ export default function Dashboard() {
{ name: t('text-monthly'), day: 30 },
{ name: t('text-yearly'), day: 365 },
];
console.log(data);
useEffect(() => {
switch (activeTimeFrame) {
case 1:
setOrderDataRange(data?.todayTotalOrderByStatus);
setOrderDataRange(data?.merchant_info?.order_status?.today);
break;
case 7:
setOrderDataRange(data?.weeklyTotalOrderByStatus);
setOrderDataRange(data?.merchant_info?.order_status?.weekly);
break;
case 30:
setOrderDataRange(data?.monthlyTotalOrderByStatus);
break;
case 365:
setOrderDataRange(data?.yearlyTotalOrderByStatus);
setOrderDataRange(data?.merchant_info?.order_status?.monthly);
break;
// case 365:
// setOrderDataRange(data?.order_status?.yearly);
// break;
default:
setOrderDataRange(orderDataRange);

45
src/components/dashboard/widgets/box/widget-order-by-status.tsx

@ -93,28 +93,31 @@ const WidgetOrderByStatus: React.FC<IProps> = ({
const items = widgetContents.find((item) => item.key === element);
tempContent.push(items);
}
console.log( order,
timeFrame,
allowedStatus,);
// return (
// <Fragment>
// <div className="mt-5 grid w-full grid-cols-1 gap-5 sm:grid-cols-2 xl:grid-cols-4">
// {tempContent && tempContent.length > 0
// ? tempContent.map((content) => {
// return (
// <div className="w-full" key={content?.key}>
// <StickerCard
// titleTransKey={content?.title}
// subtitleTransKey={content?.subtitle}
// icon={content?.icon}
// color={content?.color}
// price={content?.data}
// />
// </div>
// );
// })
// : ''}
// </div>
// </Fragment>
// );
return (
<Fragment>
<div className="mt-5 grid w-full grid-cols-1 gap-5 sm:grid-cols-2 xl:grid-cols-4">
{tempContent && tempContent.length > 0
? tempContent.map((content) => {
return (
<div className="w-full" key={content?.key}>
<StickerCard
titleTransKey={content?.title}
subtitleTransKey={content?.subtitle}
icon={content?.icon}
color={content?.color}
price={content?.data}
/>
</div>
);
})
: ''}
</div>
</Fragment>
);
};
export default WidgetOrderByStatus;

9
src/components/layouts/topbar/message-bar.tsx

@ -18,6 +18,7 @@ import { MessageAvatarPlaceholderIcon } from '@/components/icons/message-avatar-
import { PusherConfig } from '@/utils/pusher-config';
import { toast } from 'react-toastify';
import { Config } from '@/config';
import { Button } from 'react-scroll';
type IProps = {
user: any;
@ -75,8 +76,8 @@ const MessageBar = ({ user }: IProps) => {
// here messages will be passed as a props in eventData. to keep the useEffect track of having a new message
return (
<>
<Menu as="a" href='/dashboard/chat' className="inline-block text-left sm:relative">
<Menu.Button
<Link
href='/dashboard/chat'
className={cn(
'relative flex h-9 w-9 items-center justify-center gap-2 rounded-full border border-gray-200 bg-gray-50 text-gray-600 before:absolute before:top-0 before:right-0 before:h-2 before:w-2 before:rounded-full focus:outline-none data-[headlessui-state=open]:bg-white data-[headlessui-state=open]:text-accent',
activeStatus?.unseen ? 'before:bg-accent' : null
@ -84,9 +85,8 @@ const MessageBar = ({ user }: IProps) => {
>
<MessageIcon
className={cn('h-5 w-5')}
onClick={() => setConversationsOpen(!conversationsOpen)}
/>
</Menu.Button>
</Link>
{/* <MessageBox
eventName={`${process.env.NEXT_PUBLIC_MESSAGE_EVENT}`}
@ -97,7 +97,6 @@ const MessageBar = ({ user }: IProps) => {
/> */}
</Menu>
</>
);
};

Loading…
Cancel
Save