diff --git a/package.json b/package.json index 6307f33e6..304e3a3e0 100644 --- a/package.json +++ b/package.json @@ -32,16 +32,16 @@ "@dnd-kit/utilities": "^3.2.0", "@emotion/react": "^11.10.5", "@emotion/server": "^11.10.0", - "@mantine/carousel": "^5.9.0", - "@mantine/core": "^5.9.0", - "@mantine/dates": "^5.9.0", - "@mantine/dropzone": "^5.9.0", - "@mantine/form": "^5.9.0", - "@mantine/hooks": "^5.9.0", - "@mantine/modals": "^5.9.0", - "@mantine/next": "^5.9.0", - "@mantine/notifications": "^5.9.0", - "@mantine/prism": "^5.9.0", + "@mantine/carousel": "^5.9.2", + "@mantine/core": "^5.9.2", + "@mantine/dates": "^5.9.2", + "@mantine/dropzone": "^5.9.2", + "@mantine/form": "^5.9.2", + "@mantine/hooks": "^5.9.2", + "@mantine/modals": "^5.9.2", + "@mantine/next": "^5.9.2", + "@mantine/notifications": "^5.9.2", + "@mantine/prism": "^5.9.2", "@nivo/core": "^0.79.0", "@nivo/line": "^0.79.1", "@tabler/icons": "^1.106.0", diff --git a/src/components/Dashboard/Modals/EditService/EditServiceModal.tsx b/src/components/Dashboard/Modals/EditService/EditServiceModal.tsx index 063f0a53b..576dff849 100644 --- a/src/components/Dashboard/Modals/EditService/EditServiceModal.tsx +++ b/src/components/Dashboard/Modals/EditService/EditServiceModal.tsx @@ -1,8 +1,15 @@ -import { Alert, Button, createStyles, Group, Stack, Tabs, Text } from '@mantine/core'; +import { Alert, Button, createStyles, Group, Stack, Tabs, Text, ThemeIcon } from '@mantine/core'; import { useForm } from '@mantine/form'; import { ContextModalProps } from '@mantine/modals'; import { hideNotification, showNotification } from '@mantine/notifications'; -import { IconAccessPoint, IconAdjustments, IconBrush, IconClick, IconPlug } from '@tabler/icons'; +import { + IconAccessPoint, + IconAdjustments, + IconAlertTriangle, + IconBrush, + IconClick, + IconPlug, +} from '@tabler/icons'; import { useTranslation } from 'next-i18next'; import Image from 'next/image'; import { useState } from 'react'; @@ -44,17 +51,27 @@ export const EditServiceModal = ({ return null; }, - appearance: (appearance) => (!appearance.iconUrl ? 'Icon is required' : null), - behaviour: (behaviour) => { - if (behaviour.onClickUrl === undefined || behaviour.onClickUrl.length < 1) { + appearance: { + iconUrl: (url: string) => { + if (url.length < 1) { + return 'This field is required'; + } + return null; - } + }, + }, + behaviour: { + onClickUrl: (url: string) => { + if (url === undefined || url.length < 1) { + return null; + } - if (!behaviour.onClickUrl?.match(serviceUrlRegex)) { - return 'Uri override is not a valid uri'; - } + if (!url.match(serviceUrlRegex)) { + return 'Uri override is not a valid uri'; + } - return null; + return null; + }, }, }, validateInputOnChange: true, @@ -102,6 +119,18 @@ export const EditServiceModal = ({ context.closeModal(id); }; + const validationErrors = Object.keys(form.errors); + + const ValidationErrorIndicator = ({ keys }: { keys: string[] }) => { + const relevantErrors = validationErrors.filter((x) => keys.includes(x)); + + return ( + + + + ); + }; + return ( <> {configName === undefined || @@ -130,6 +159,7 @@ export const EditServiceModal = ({ {form.values.name ?? 'New Service'} +
- }> + } + icon={} + value="general" + > General - }> + } + icon={} + value="behaviour" + > Behaviour - }> + } + icon={} + value="network" + > Network - }> + } + icon={} + value="appearance" + > Appearance - }> + } + icon={} + value="integration" + > Integration @@ -162,10 +212,10 @@ export const EditServiceModal = ({ - - diff --git a/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/AppereanceTab.tsx b/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/AppereanceTab.tsx index c7c496d0e..17dc43874 100644 --- a/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/AppereanceTab.tsx +++ b/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/AppereanceTab.tsx @@ -1,6 +1,6 @@ +import Image from 'next/image'; import { createStyles, Flex, Tabs, TextInput } from '@mantine/core'; import { UseFormReturnType } from '@mantine/form'; -import { IconPhoto } from '@tabler/icons'; import { useTranslation } from 'next-i18next'; import { ServiceType } from '../../../../../../types/service'; import { IconSelector } from './IconSelector/IconSelector'; @@ -13,14 +13,22 @@ export const AppearanceTab = ({ form }: AppearanceTabProps) => { const { t } = useTranslation(''); const { classes } = useStyles(); - const Image = () => { - if (form.values.appearance.iconUrl !== undefined) { + const PreviewImage = () => { + if (form.values.appearance.iconUrl !== undefined && form.values.appearance.iconUrl.length > 0) { // disabled due to too many dynamic targets for next image cache // eslint-disable-next-line @next/next/no-img-element - return jife; + return ; } - return ; + return ( + + ); }; return ( @@ -29,7 +37,7 @@ export const AppearanceTab = ({ form }: AppearanceTabProps) => { } + icon={} label="Service Icon" description="Logo of your service displayed in your dashboard. Must return a body content containg an image" variant="default" diff --git a/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/IconSelector/IconSelector.tsx b/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/IconSelector/IconSelector.tsx index bac318863..b82a2a49d 100644 --- a/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/IconSelector/IconSelector.tsx +++ b/src/components/Dashboard/Modals/EditService/Tabs/AppereanceTab/IconSelector/IconSelector.tsx @@ -78,7 +78,7 @@ export const IconSelector = ({ onChange }: IconSelectorProps) => { {slicedFilteredItems.map((item) => ( onChange(item)} size={40} p={3}> - icon from repository + ))}