38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { Store } from '../../../types';
|
|
|
|
/** Známé dovozové služby — hostname (bez www) → čitelný název pro nabídku. */
|
|
const KNOWN_SERVICES: { match: string; label: string }[] = [
|
|
{ match: 'bolt.eu', label: 'Bolt Food' },
|
|
{ match: 'wolt.com', label: 'Wolt' },
|
|
{ match: 'foodora.cz', label: 'Foodora' },
|
|
{ match: 'damejidlo.cz', label: 'Dáme jídlo' },
|
|
];
|
|
|
|
/**
|
|
* Ověří, že jde o odkaz s protokolem http(s) — jiné protokoly (např. javascript:)
|
|
* by mohly být zneužity, proto je jako odkaz nezobrazujeme.
|
|
*/
|
|
export function isHttpUrl(url?: string): boolean {
|
|
return !!url && /^https?:\/\//i.test(url);
|
|
}
|
|
|
|
/** Vrátí platné URL na nabídku daného obchodu. */
|
|
export function getStoreUrls(store?: Store): string[] {
|
|
return (store?.urls ?? []).filter(isHttpUrl);
|
|
}
|
|
|
|
/**
|
|
* Popisek URL pro výběr nabídky — u známých dovozových služeb jejich název,
|
|
* jinak hostname odkazu (např. "restaurace-u-nas.cz").
|
|
*/
|
|
export function storeUrlLabel(url: string): string {
|
|
let hostname: string;
|
|
try {
|
|
hostname = new URL(url).hostname.toLowerCase().replace(/^www\./, '');
|
|
} catch {
|
|
return url;
|
|
}
|
|
const known = KNOWN_SERVICES.find(s => hostname === s.match || hostname.endsWith(`.${s.match}`));
|
|
return known ? known.label : hostname;
|
|
}
|