@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 1.24 kB
JavaScript
import{t as u}from"./i18n";function a(n){if(!n)return null;const t=Date.parse(n);return isNaN(t)?null:t}export function calculateTimeUntilStart(n,t){const e=a(n);if(e===null)return{minutes:0,seconds:0,totalSeconds:0,isLessThan10Minutes:!1};const r=e-t;if(r<=0)return{minutes:0,seconds:0,totalSeconds:0,isLessThan10Minutes:!1};const s=Math.floor(r/1e3),o=Math.floor(s/60),i=s%60;return{minutes:o,seconds:i,totalSeconds:s,isLessThan10Minutes:s<600}}export function getEventStatus(n,t,e){const r=a(n.startDate),s=a(n.endDate)??Number.POSITIVE_INFINITY;if(r===null||s===null)return"none";if(t>s)return"past";if(r-t<=1e3&&t<=s||t>=r&&t<=s)return"live";if(e.totalSeconds>0&&e.totalSeconds<=3600)return"starting-soon";const o=t+360*60*1e3;return r<=o?"upcoming":"none"}function c(n){if(n.isLessThan10Minutes){const t=String(n.minutes).padStart(2,"0"),e=String(n.seconds).padStart(2,"0");return`${t}:${e}`}return`${n.minutes}`}export function getEventStatusLabel(n,t){switch(n){case"live":return u("LIVE");case"upcoming":return u("UPCOMING");case"starting-soon":return t.totalSeconds<=0?u("Started"):t.isLessThan10Minutes?u("Starts in {{time}}",{time:c(t)}):u("Starts in {{count}} min",{count:t.minutes});case"past":return u("PAST");default:return""}}