Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,4 @@ next-env.d.ts
*.njsproj
*.sln
*.sw?
*_copy*
37 changes: 28 additions & 9 deletions app/components/home/header/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@ import HomeMonitorHeaderMenu from './menu';
import useContextStore from '../../../context';
import Role from '../../../../shared/permissions/role';
import { PermissionsBits } from '../../../../shared/permissions/bitFlags';
import type { MonitorType } from '../../../types/monitor';

const typeToText = {
docker: 'Docker Container',
email: 'Email (SMTP)',
http: 'HTTP/S',
json: 'JSON Query',
ping: 'Ping',
Expand All @@ -28,6 +30,31 @@ interface HomeMonitorHeaderProps {
isMobile?: boolean;
}

const HeaderSubtitle = ({ type, url }: { type: MonitorType; url: string }) => {
const { t } = useTranslation();

if (!type || !url) return null;

if (type === 'push') {
return (
<div className="navigation-header-subtitle">
<span>Passive push </span>
monitor
</div>
);
}

return (
<div className="navigation-header-subtitle">
<span>{typeToText[type]} </span>
{t('home.header.subtitle') + ' '}
<a href={url} target="_blank" rel="noreferrer">
{url}
</a>
</div>
);
};

const HomeMonitorHeader = ({
isInfoOpen,
setIsInfoOpen,
Expand Down Expand Up @@ -67,15 +94,7 @@ const HomeMonitorHeader = ({
<div>
{t('common.monitor')} - {activeMonitor.name}
</div>
{activeMonitor?.url ? (
<div className="navigation-header-subtitle">
<span>{typeToText[activeMonitor.type]} </span>
{t('home.header.subtitle') + ' '}
<a href={activeMonitor.url} target="_blank" rel="noreferrer">
{activeMonitor.url}
</a>
</div>
) : null}
<HeaderSubtitle type={activeMonitor.type} url={activeMonitor.url} />
</div>
<div className="navigation-header-buttons">
{isEditor ? <HomeMonitorHeaderMenu /> : null}
Expand Down
19 changes: 8 additions & 11 deletions app/components/modal/notification/dropdown/platform.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,18 @@ import NotificationIcon from './icon';
import Dropdown from '../../../ui/dropdown';
import useDropdown from '../../../../hooks/useDropdown';
import notificationsIcons from '../../../../constant/notifications.json';
import type { NotificationProps } from '../../../../types/notifications';
import type {
NotificationPlatforms,
NotificationProps,
} from '../../../../types/notifications';

interface NotificationModalPlatformProps {
isEdit?: boolean;
setPlatform: (platform: {
key: keyof NotificationProps;
value: string;
}) => void;
platform:
| 'Discord'
| 'HomeAssistant'
| 'Pushover'
| 'Slack'
| 'Telegram'
| 'Webhook';
platform: NotificationPlatforms;
}

const NotificationModalPlatform = ({
Expand Down Expand Up @@ -60,11 +57,11 @@ const NotificationModalPlatform = ({
{Object.values(notificationsIcons).map((notification) => (
<Dropdown.Item
onClick={() => {
setPlatform({ key: 'platform', value: notification.name });
setPlatform({ key: 'platform', value: notification.id });
toggleDropdown();
}}
key={notification.name}
id={`notification-type-${notification.name}`}
key={notification.id}
id={`notification-type-${notification.id}`}
>
<img
src={`/notifications/${notification.icon}`}
Expand Down
29 changes: 17 additions & 12 deletions app/components/modal/notification/index.tsx
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
// import dependencies
import { useEffect } from 'react';
import { toast } from 'react-toastify';
import { Button, Modal } from '@lunalytics/ui';

// import local files
import NotificationModalPayload from './payload';
import NotificationModalType from './dropdown/type';
import { createPostRequest } from '../../../services/axios';
import NotificationModalPlatform from './dropdown/platform';
import NotificationsTemplates from '../../../../shared/notifications';
import useNotificationForm from '../../../hooks/useNotificationForm';
import NotificationModalPayload from './payload';
import * as inputForPlatform from './platform';
import NotificationsTemplates from '../../../../shared/notifications';
import type { NotificationProps } from '../../../types/notifications';
import { toast } from 'react-toastify';
import { createPostRequest } from '../../../services/axios';
import NotificationRenderer from '../../notifications/content/renderer';
import { EmailComponent } from '../../notifications/content';

interface NotificationModalProps {
values?: NotificationProps;
Expand Down Expand Up @@ -54,10 +55,6 @@ const NotificationModal = ({

const message = NotificationsTemplates[platform]?.[messageType] || 'basic';

const PlatformInputs = inputForPlatform[
inputs.platform as Platform
] as React.ComponentType<any>;

const testNotification = async () => {
try {
await createPostRequest('/api/notifications/test', inputs);
Expand Down Expand Up @@ -115,8 +112,9 @@ const NotificationModal = ({
platform={inputs.platform}
/>

<PlatformInputs
values={inputs}
<NotificationRenderer
isEdit={false}
inputs={inputs}
errors={errors}
handleInput={handleInput}
/>
Expand All @@ -127,7 +125,14 @@ const NotificationModal = ({
/>

<label className="input-label">Payload</label>
<NotificationModalPayload message={message} />

{inputs.platform !== 'Email' && (
<NotificationModalPayload message={message} />
)}

{inputs.platform === 'Email' && (
<EmailComponent type={inputs.messageType} />
)}
</Modal>
);
};
Expand Down
96 changes: 0 additions & 96 deletions app/components/modal/notification/platform/discord.tsx

This file was deleted.

98 changes: 0 additions & 98 deletions app/components/modal/notification/platform/homeAssistant.tsx

This file was deleted.

6 changes: 0 additions & 6 deletions app/components/modal/notification/platform/index.tsx

This file was deleted.

Loading