diff --git a/front/src/modules/ui/table/editable-cell/type/components/GenericEditableURLCellEditMode.tsx b/front/src/modules/ui/table/editable-cell/type/components/GenericEditableURLCellEditMode.tsx index 23da20a191..605c9d87b7 100644 --- a/front/src/modules/ui/table/editable-cell/type/components/GenericEditableURLCellEditMode.tsx +++ b/front/src/modules/ui/table/editable-cell/type/components/GenericEditableURLCellEditMode.tsx @@ -7,6 +7,7 @@ import { import { useCurrentRowEntityId } from '@/ui/table/hooks/useCurrentEntityId'; import { useUpdateEntityField } from '@/ui/table/hooks/useUpdateEntityField'; import { tableEntityFieldFamilySelector } from '@/ui/table/states/tableEntityFieldFamilySelector'; +import { isURL } from '~/utils/is-url'; import { TextCellEdit } from './TextCellEdit'; @@ -30,6 +31,8 @@ export function GenericEditableURLCellEditMode({ viewField }: OwnProps) { function handleSubmit(newText: string) { if (newText === fieldValue) return; + if (!isURL(newText)) return; + setFieldValue(newText); if (currentRowEntityId && updateField) { diff --git a/front/src/utils/__tests__/is-url.test.ts b/front/src/utils/__tests__/is-url.test.ts new file mode 100644 index 0000000000..2ee1e54297 --- /dev/null +++ b/front/src/utils/__tests__/is-url.test.ts @@ -0,0 +1,35 @@ +import { isURL } from '~/utils/is-url'; + +describe('isURL', () => { + it(`should return false if null`, () => { + expect(isURL(null)).toBeFalsy(); + }); + + it(`should return false if undefined`, () => { + expect(isURL(undefined)).toBeFalsy(); + }); + + it(`should return true if string google`, () => { + expect(isURL('google')).toBeFalsy(); + }); + + it(`should return true if string google.com`, () => { + expect(isURL('google.com')).toBeTruthy(); + }); + + it(`should return true if string bbc.co.uk`, () => { + expect(isURL('bbc.co.uk')).toBeTruthy(); + }); + + it(`should return true if string web.io`, () => { + expect(isURL('web.io')).toBeTruthy(); + }); + + it(`should return true if string x.com`, () => { + expect(isURL('x.com')).toBeTruthy(); + }); + + it(`should return true if string 2.com`, () => { + expect(isURL('2.com')).toBeTruthy(); + }); +}); diff --git a/front/src/utils/is-url.ts b/front/src/utils/is-url.ts new file mode 100644 index 0000000000..b6c1f01d51 --- /dev/null +++ b/front/src/utils/is-url.ts @@ -0,0 +1,10 @@ +import { isDefined } from './isDefined'; + +export function isURL(url: string | undefined | null) { + return ( + isDefined(url) && + /^((?!-))(xn--)?[a-z0-9][a-z0-9-_]{0,61}[a-z0-9]{0,1}\.(xn--)?([a-z0-9-]{1,61}|[a-z0-9-]{1,30}\.[a-z]{2,})$/.test( + url, + ) + ); +}