diff --git a/src/Logic/Web/LinkedDataLoader.ts b/src/Logic/Web/LinkedDataLoader.ts index 8c477677e..080073eda 100644 --- a/src/Logic/Web/LinkedDataLoader.ts +++ b/src/Logic/Web/LinkedDataLoader.ts @@ -158,7 +158,10 @@ export default class LinkedDataLoader { openingHoursSpecification, LinkedDataLoader.COMPACTING_CONTEXT_OH ) - const spec: object = compacted["@graph"] + const spec:({ + "@type":"http://schema.org/OpeningHoursSpecification", + "dayOfWeek": string[] + })[] = compacted["@graph"] if (!spec) { return undefined } @@ -173,17 +176,21 @@ export default class LinkedDataLoader { } return dow.toLowerCase().substring(0, 2) }) - const opens: string = rule.opens - const closes: string = rule.closes === "23:59" ? "24:00" : rule.closes - allRules.push(...OH.ParseRule(dow + " " + opens + "-" + closes)) + const opens: string = rule["http://schema.org/opens"] ?? rule["opens"] + let closes: string = (rule["http://schema.org/closes"] ?? rule["closes"]) + closes = closes === "23:59" ? "24:00" : closes + + allRules.push(...OH.parseRule(dow + " " + opens + "-" + closes)) } - return OH.ToString(OH.MergeTimes(allRules)) + return OH.toString(OH.MergeTimes(allRules)) } - static async compact(data: object, options?: JsonLdLoaderOptions): Promise { + static async compact(data: object, options?: JsonLdLoaderOptions): Promise | Record[]> { if (Array.isArray(data)) { - return await Promise.all(data.map((point) => LinkedDataLoader.compact(point, options))) + + const result: Awaited | Record[]>[] = await Promise.all(data.map((point) => LinkedDataLoader.compact(point, options))) + return result.flatMap(x => Array.isArray(x) ? x : [x]) } const country = options?.country @@ -276,8 +283,8 @@ export default class LinkedDataLoader { continue } if (k === "opening_hours") { - const oh = [].concat(...v.split(";").map((r) => OH.ParseRule(r) ?? [])) - const merged = OH.ToString(OH.MergeTimes(oh ?? [])) + const oh = [].concat(...v.split(";").map((r) => OH.parseRule(r) ?? [])) + const merged = OH.toString(OH.MergeTimes(oh ?? [])) if (merged === d[k]) { delete d[k] continue diff --git a/src/Logic/Web/VeloparkLoader.ts b/src/Logic/Web/VeloparkLoader.ts index 09a33f967..e65b62cf2 100644 --- a/src/Logic/Web/VeloparkLoader.ts +++ b/src/Logic/Web/VeloparkLoader.ts @@ -97,9 +97,9 @@ export default class VeloparkLoader { const startHour = spec.opens const endHour = spec.closes === "23:59" ? "24:00" : spec.closes const merged = OH.MergeTimes( - OH.ParseRule(dayOfWeek + " " + startHour + "-" + endHour) + OH.parseRule(dayOfWeek + " " + startHour + "-" + endHour) ) - return OH.ToString(merged) + return OH.toString(merged) }) .join("; ") ) diff --git a/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte b/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte index 92ee16bc4..4b233ee18 100644 --- a/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte +++ b/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte @@ -110,7 +110,7 @@ } let startMinutes = Math.round((start * 60) % 60) let endMinutes = Math.round((end * 60) % 60) - let newOhs = [...value.data] + let newOhs = [...(value.data ?? [])] for ( let wd = Math.min(selectionStart[0], weekday); wd <= Math.max(selectionStart[0], weekday); @@ -212,7 +212,7 @@ {#each range(7) as wd}