diff --git a/.github/workflows/build_docker_v2.yml b/.github/workflows/build_docker_v2.yml index 838992a66..14628d18a 100644 --- a/.github/workflows/build_docker_v2.yml +++ b/.github/workflows/build_docker_v2.yml @@ -44,7 +44,8 @@ jobs: - name: Docker Setup Buildx uses: docker/setup-buildx-action@v2.5.0 - - name: Build and push Docker images + - name: Build and push stable release + if: github.event.release.prerelease == false uses: docker/build-push-action@v4.0.0 with: context: . @@ -54,3 +55,14 @@ jobs: push: true tags: ${{ secrets.DOCKERHUB_USERNAME }}/ontime:${{ env.RELEASE_VERSION }} , ${{ secrets.DOCKERHUB_USERNAME }}/ontime:latest + - name: Build and push pre-release + if: github.event.release.prerelease == true + uses: docker/build-push-action@v4.0.0 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 + # Push is a shorthand for --output=type=registry + push: true + tags: ${{ secrets.DOCKERHUB_USERNAME }}/ontime:${{ env.RELEASE_VERSION }} , ${{ secrets.DOCKERHUB_USERNAME }}/ontime:nightly + diff --git a/apps/client/package.json b/apps/client/package.json index 8589a850f..918213f6a 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -40,6 +40,7 @@ "build:local": "cross-env NODE_ENV=local vite build", "build:electron": "cross-env NODE_ENV=local vite build", "build:docker": "vite build", + "build:localdocker": "cross-env NODE_ENV=local vite build", "lint": "eslint . --quiet", "lint-staged": "eslint", "test": "vitest", diff --git a/apps/client/src/common/components/input/time-input/TimeInput.tsx b/apps/client/src/common/components/input/time-input/TimeInput.tsx index 739fa6088..300f2422c 100644 --- a/apps/client/src/common/components/input/time-input/TimeInput.tsx +++ b/apps/client/src/common/components/input/time-input/TimeInput.tsx @@ -14,24 +14,26 @@ interface TimeInputProps { time?: number; delay?: number; placeholder: string; - validationHandler: (entry: TimeEntryField, val: number) => boolean; previousEnd?: number; - warning?: string; className?: string; } +function ButtonInitial(name: TimeEntryField) { + if (name === 'timeStart') return 'S'; + if (name === 'timeEnd') return 'E'; + if (name === 'durationOverride') return 'D'; + return ''; +} + +function ButtonTooltip(name: TimeEntryField, tooltip?: string) { + if (name === 'timeStart') return `Start${tooltip ? `: ${tooltip}` : ''}`; + if (name === 'timeEnd') return `End${tooltip ? `: ${tooltip}` : ''}`; + if (name === 'durationOverride') return `Duration${tooltip ? `: ${tooltip}` : ''}`; + return ''; +} + export default function TimeInput(props: TimeInputProps) { - const { - id, - name, - submitHandler, - time = 0, - delay = 0, - placeholder, - validationHandler, - previousEnd = 0, - className = '', - } = props; + const { id, name, submitHandler, time = 0, delay = 0, placeholder, previousEnd = 0, className } = props; const { emitError } = useEmitLog(); const inputRef = useRef(null); const [value, setValue] = useState(''); @@ -87,15 +89,12 @@ export default function TimeInput(props: TimeInputProps) { // check if time is different from before if (newValMillis === time) return false; - // validate with parent - if (!validationHandler(name, newValMillis)) return false; - // update entry submitHandler(name, newValMillis); return true; }, - [name, previousEnd, submitHandler, time, validationHandler], + [name, previousEnd, submitHandler, time], ); /** @@ -153,8 +152,19 @@ export default function TimeInput(props: TimeInputProps) { resetValue(); }, [resetValue, time]); + const isDelayed = delay !== 0; + const inputClasses = cx([style.timeInput, isDelayed ? style.delayed : null]); + const buttonClasses = cx([style.inputButton, isDelayed ? style.delayed : null]); const timeInputClass = className ? className : style.timeInput; + const TooltipLabel = useMemo(() => { + return ButtonTooltip(name, ''); + }, [name]); + + const ButtonText = useMemo(() => { + return ButtonInitial(name); + }, [name]); + return ( { props; const { updateEvent } = useEventAction(); - const [warning, setWarnings] = useState({ start: '', end: '', duration: '' }); - - const timerValidationHandler = (entry: TimeEntryField, val: number) => { - const valid = validateEntry(entry, val, timeStart, timeEnd); - setWarnings((prev) => ({ ...prev, ...valid.warnings })); - return valid.value; - }; const handleSubmit = (field: TimeActions, value: number | string | boolean) => { const newEventData: Partial = { id: eventId }; @@ -99,11 +91,9 @@ const EventEditorTimes = (props: EventEditorTimesProps) => { id='timeStart' name='timeStart' submitHandler={handleSubmit} - validationHandler={timerValidationHandler} time={timeStart} delay={delay} placeholder='Start' - warning={warning.start} />