use message on mobile & notification on desktop
This commit is contained in:
parent
6e9dfb547e
commit
5eb0639fbe
19
apps/web/@types/errors.ts
Normal file
19
apps/web/@types/errors.ts
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import elementsToValues from '@/Components/Calculation/config/map/values';
|
||||||
|
|
||||||
|
export const ERR_ELT_KASKO = 'ERR_ELT_KASKO';
|
||||||
|
export const ERR_ELT_OSAGO = 'ERR_ELT_OSAGO';
|
||||||
|
export const ERR_FINGAP_TABLE = 'ERR_FINGAP_TABLE';
|
||||||
|
export const ERR_INSURANCE_TABLE = 'ERR_INSURANCE_TABLE';
|
||||||
|
export const ERR_PAYMENTS_TABLE = 'ERR_PAYMENTS_TABLE';
|
||||||
|
|
||||||
|
export const ERROR_TABLE_KEYS = [
|
||||||
|
ERR_ELT_KASKO,
|
||||||
|
ERR_ELT_OSAGO,
|
||||||
|
ERR_FINGAP_TABLE,
|
||||||
|
ERR_INSURANCE_TABLE,
|
||||||
|
ERR_PAYMENTS_TABLE,
|
||||||
|
];
|
||||||
|
|
||||||
|
export const ERROR_ELEMENTS_KEYS = Object.keys(elementsToValues);
|
||||||
|
|
||||||
|
export const ERROR_KEYS = [...ERROR_ELEMENTS_KEYS, ...ERROR_TABLE_KEYS];
|
||||||
@ -1,5 +1,7 @@
|
|||||||
/* eslint-disable import/no-mutable-exports */
|
/* eslint-disable import/no-mutable-exports */
|
||||||
|
import { ERROR_KEYS } from '@/@types/errors';
|
||||||
import { Media } from '@/styles/media';
|
import { Media } from '@/styles/media';
|
||||||
|
import { getDevice } from '@/utils/device';
|
||||||
import type { MessageInstance } from 'antd/es/message/interface';
|
import type { MessageInstance } from 'antd/es/message/interface';
|
||||||
import type { NotificationInstance } from 'antd/es/notification/interface';
|
import type { NotificationInstance } from 'antd/es/notification/interface';
|
||||||
import type { ReactNode } from 'react';
|
import type { ReactNode } from 'react';
|
||||||
@ -8,9 +10,44 @@ import { message as antdMessage, notification as antdNotification } from 'ui/ele
|
|||||||
export let message: Readonly<MessageInstance>;
|
export let message: Readonly<MessageInstance>;
|
||||||
export let notification: Readonly<NotificationInstance>;
|
export let notification: Readonly<NotificationInstance>;
|
||||||
|
|
||||||
|
function createWrapper<T extends NotificationInstance, M extends MessageInstance>(
|
||||||
|
notificationObj: T,
|
||||||
|
messageObj: M
|
||||||
|
): T {
|
||||||
|
const handler: ProxyHandler<T> = {
|
||||||
|
get(target, prop, receiver) {
|
||||||
|
const notificationMethod = target[prop as keyof T];
|
||||||
|
const messageMethod = messageObj[prop as keyof M];
|
||||||
|
|
||||||
|
if (typeof notificationMethod === 'function' && typeof messageMethod === 'function') {
|
||||||
|
return function (...args: any[]) {
|
||||||
|
const device = getDevice();
|
||||||
|
|
||||||
|
if (device?.isMobile) {
|
||||||
|
if (typeof args[0] === 'object') {
|
||||||
|
if (ERROR_KEYS.includes(args[0].key)) return;
|
||||||
|
args[0].content = args[0].description || args[0].message;
|
||||||
|
}
|
||||||
|
|
||||||
|
messageMethod.apply(messageObj, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
notificationMethod.apply(target, args);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return Reflect.get(target, prop, receiver);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return new Proxy(notificationObj, handler);
|
||||||
|
}
|
||||||
|
|
||||||
export function Notification({ children }: { readonly children?: ReactNode }) {
|
export function Notification({ children }: { readonly children?: ReactNode }) {
|
||||||
|
const device = getDevice();
|
||||||
|
|
||||||
const [messageApi, messageContextHolder] = antdMessage.useMessage({
|
const [messageApi, messageContextHolder] = antdMessage.useMessage({
|
||||||
duration: 1.2,
|
duration: device?.isMobile ? 1.5 : 1.2,
|
||||||
maxCount: 3,
|
maxCount: 3,
|
||||||
top: 70,
|
top: 70,
|
||||||
});
|
});
|
||||||
@ -22,7 +59,7 @@ export function Notification({ children }: { readonly children?: ReactNode }) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
message = messageApi;
|
message = messageApi;
|
||||||
notification = notificationApi;
|
notification = createWrapper(notificationApi, messageApi);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
11
apps/web/utils/device.ts
Normal file
11
apps/web/utils/device.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { screens } from '@/config/ui';
|
||||||
|
|
||||||
|
export function getDevice() {
|
||||||
|
if (typeof window === 'undefined') return null;
|
||||||
|
|
||||||
|
const isMobile = window.innerWidth < screens.tablet;
|
||||||
|
|
||||||
|
return {
|
||||||
|
isMobile,
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user