diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 48f93b23a..8d7d45b60 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -82,9 +82,6 @@ From the project root, run the following commands The build distribution assets will be at `.apps/electron/dist` -Note: The MacOS build will only work in CI, locally it will fail due to notarisation issues. -Use the `pnpm dist-mac:local` command to build a MacOS distribution locally and skip the notary process. - ## DOCKER Ontime provides a docker-compose file to aid with building and running docker images. diff --git a/apps/cli/package.json b/apps/cli/package.json index 53d05de53..5c68967d8 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,6 +1,6 @@ { "name": "@getontime/cli", - "version": "4.0.0-beta.5", + "version": "4.0.0-beta.6", "author": "Carlos Valente", "description": "Time keeping for live events", "repository": "https://github.com/cpvalente/ontime", diff --git a/apps/client/package.json b/apps/client/package.json index 40258b8a4..a3dc44156 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -1,6 +1,6 @@ { "name": "ontime-ui", - "version": "4.0.0-beta.5", + "version": "4.0.0-beta.6", "private": true, "type": "module", "dependencies": { diff --git a/apps/client/src/common/components/copy-tag/CopyTag.tsx b/apps/client/src/common/components/copy-tag/CopyTag.tsx index 8edf6d5ad..15cd21c51 100644 --- a/apps/client/src/common/components/copy-tag/CopyTag.tsx +++ b/apps/client/src/common/components/copy-tag/CopyTag.tsx @@ -1,6 +1,5 @@ import { PropsWithChildren, useRef, useState } from 'react'; -import { IoCheckmark } from 'react-icons/io5'; -import { IoCopy } from 'react-icons/io5'; +import { IoCheckmark, IoCopy } from 'react-icons/io5'; import copyToClipboard from '../../utils/copyToClipboard'; import { cx } from '../../utils/styleUtils'; diff --git a/apps/client/src/common/components/navigation-menu/floating-navigation/FloatingNavigation.tsx b/apps/client/src/common/components/navigation-menu/floating-navigation/FloatingNavigation.tsx index 9c695b04a..0efcea798 100644 --- a/apps/client/src/common/components/navigation-menu/floating-navigation/FloatingNavigation.tsx +++ b/apps/client/src/common/components/navigation-menu/floating-navigation/FloatingNavigation.tsx @@ -1,5 +1,4 @@ -import { IoApps } from 'react-icons/io5'; -import { IoSettingsOutline } from 'react-icons/io5'; +import { IoApps, IoSettingsOutline } from 'react-icons/io5'; import { useFadeOutOnInactivity } from '../../../hooks/useFadeOutOnInactivity'; import { cx } from '../../../utils/styleUtils'; diff --git a/apps/client/src/features/app-settings/panel/automations-panel/OntimeActionForm.tsx b/apps/client/src/features/app-settings/panel/automations-panel/OntimeActionForm.tsx index 6bdf47c47..b11577ecf 100644 --- a/apps/client/src/features/app-settings/panel/automations-panel/OntimeActionForm.tsx +++ b/apps/client/src/features/app-settings/panel/automations-panel/OntimeActionForm.tsx @@ -77,7 +77,7 @@ export default function OntimeActionForm({ New time maxDuration || valueInMillis < 0) { + if (value > maxDuration || value < 0) { throw new Error('Times should be from 0 to 23:59:59'); } - return valueInMillis; + return value; } const propertyConversion = { @@ -34,6 +33,9 @@ const propertyConversion = { endAction: (value: unknown) => coerceEnum(value, EndAction), timerType: (value: unknown) => coerceEnum(value, TimerType), + linkStart: coerceBoolean, + timeStrategy: (value: unknown) => coerceEnum(value, TimeStrategy), + duration: (value: unknown) => clampDuration(coerceNumber(value)), timeStart: (value: unknown) => clampDuration(coerceNumber(value)), timeEnd: (value: unknown) => clampDuration(coerceNumber(value)), diff --git a/e2e/tests/001-smoke-tests.spec.ts b/e2e/tests/001-smoke-tests.spec.ts index 2c3a4f027..0c580c7fb 100644 --- a/e2e/tests/001-smoke-tests.spec.ts +++ b/e2e/tests/001-smoke-tests.spec.ts @@ -1,11 +1,10 @@ import { expect, test } from '@playwright/test'; -// TODO: can we replace the clicks with something else? test.describe('pages routes are available', () => { test.use({ viewport: { width: 1920, height: 1080 } }); test.describe('main views', () => { test('editor', async ({ page }) => { - await page.goto('http://localhost:4001/editor'); + await page.goto('/editor'); await expect(page).toHaveTitle(/ontime/); await expect(page.getByTestId('editor-container')).toBeVisible(); @@ -15,44 +14,41 @@ test.describe('pages routes are available', () => { }); test('cuesheet', async ({ page }) => { - await page.goto('http://localhost:4001/cuesheet'); + await page.goto('/cuesheet'); await expect(page).toHaveTitle(/ontime/); - await page.getByTestId('cuesheet').click(); + await expect(page.getByTestId('cuesheet')).toBeVisible(); }); test('operator', async ({ page }) => { - await page.goto('http://localhost:4001/op'); + await page.goto('/op'); await expect(page).toHaveTitle(/ontime/); }); test('timer', async ({ page }) => { - await page.goto('http://localhost:4001/timer'); + await page.goto('/timer'); await expect(page).toHaveTitle(/ontime/); }); test('backstage', async ({ page }) => { - await page.goto('http://localhost:4001/backstage'); + await page.goto('/backstage'); await expect(page).toHaveTitle(/ontime/); }); test('studio', async ({ page }) => { - await page.goto('http://localhost:4001/studio'); + await page.goto('/studio'); await expect(page).toHaveTitle(/ontime/); }); test('countdown', async ({ page }) => { - await page.goto('http://localhost:4001/countdown'); + await page.goto('/countdown?sub=32d31'); await expect(page).toHaveTitle(/ontime/); - await page.getByRole('button', { name: 'Add' }).click(); - await page.getByText('Albania').click(); - await page.getByRole('button', { name: 'Save' }).click(); await expect(page.getByText('Albania')).toBeVisible(); await expect(page.getByText('Latvia')).toBeHidden(); }); @@ -60,15 +56,15 @@ test.describe('pages routes are available', () => { test.describe('detached views', () => { test('rundown', async ({ page }) => { - await page.goto('http://localhost:4001/rundown'); + await page.goto('/rundown'); await expect(page.getByTestId('panel-rundown')).toBeVisible(); }); test('timer control', async ({ page }) => { - await page.goto('http://localhost:4001/timercontrol'); + await page.goto('/timercontrol'); await expect(page.getByTestId('panel-timer-control')).toBeVisible(); }); test('message control', async ({ page }) => { - await page.goto('http://localhost:4001/messagecontrol'); + await page.goto('/messagecontrol'); await expect(page.getByTestId('panel-messages-control')).toBeVisible(); }); }); diff --git a/e2e/tests/features/205-operator.spec.ts b/e2e/tests/features/205-operator.spec.ts index ab247c944..45100b803 100644 --- a/e2e/tests/features/205-operator.spec.ts +++ b/e2e/tests/features/205-operator.spec.ts @@ -62,9 +62,4 @@ test('smoke test operator', async ({ page }) => { await expect(page.getByTestId('--1')).toHaveCSS('opacity', '1'); // BUG: ensure event doesn't inherit the past state of the group await expect(page.getByText('title 2')).toBeInViewport(); await expect(page.getByText('title 3')).toBeInViewport(); - - // TODO: this part seems particularly flaky, to revise - // await expect(page.getByText('00:01 - 00:02')).toBeInViewport(); - // await expect(page.getByText('00:02 - 00:03')).toBeInViewport(); - // await expect(page.getByText('00:03 - 00:04')).toBeInViewport(); }); diff --git a/e2e/tests/features/211-report-data.spec.ts b/e2e/tests/features/211-report-data.spec.ts index 75c97c4bb..180031e13 100644 --- a/e2e/tests/features/211-report-data.spec.ts +++ b/e2e/tests/features/211-report-data.spec.ts @@ -1,7 +1,5 @@ import { expect, test } from '@playwright/test'; -//TODO: - test('show warning when event crosses midnight', async ({ page }) => { await page.goto('http://localhost:4001/editor'); diff --git a/e2e/tests/features/212-time-until.spec.ts b/e2e/tests/features/212-time-until.spec.ts index ace6e1d5b..1569b6aa2 100644 --- a/e2e/tests/features/212-time-until.spec.ts +++ b/e2e/tests/features/212-time-until.spec.ts @@ -1,4 +1,4 @@ -import { expect, Locator, Page, test } from '@playwright/test'; +import { expect, Locator, test } from '@playwright/test'; test('time until absolute', async ({ context }) => { const editor = await context.newPage(); diff --git a/package.json b/package.json index 285c47f27..2a84d57d8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ontime", - "version": "4.0.0-beta.5", + "version": "4.0.0-beta.6", "description": "Time keeping for live events", "keywords": [ "ontime", diff --git a/packages/types/src/definitions/core/Automation.type.ts b/packages/types/src/definitions/core/Automation.type.ts index b48bb0c5b..6e4fd6e2d 100644 --- a/packages/types/src/definitions/core/Automation.type.ts +++ b/packages/types/src/definitions/core/Automation.type.ts @@ -90,7 +90,7 @@ export type OntimeAction = | { type: 'ontime'; action: OntimeAuxSetAction; - time: string; //TODO:(automation set aux) not sure what way around to have the string and where to have the ms value + time: string; } | { type: 'ontime'; diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index a4d07e3a8..24c921943 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -14,7 +14,7 @@ export { type OntimeEvent, type PlayableEvent, type TimeField, - SupportedEntry as SupportedEntry, + SupportedEntry, } from './definitions/core/OntimeEntry.js'; export type { RundownEntries, Rundown, ProjectRundowns } from './definitions/core/Rundown.type.js'; export { TimeStrategy } from './definitions/TimeStrategy.type.js'; diff --git a/turbo.json b/turbo.json index bbc081411..c88e9c7f6 100644 --- a/turbo.json +++ b/turbo.json @@ -46,10 +46,6 @@ "dependsOn": ["build"], "outputs": ["dist/**"] }, - "dist-mac:local": { - "dependsOn": ["build"], - "outputs": ["dist/**"] - }, "dist-linux": { "dependsOn": ["build"], "outputs": ["dist/**"]