Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 10x 10x 10x 10x 10x 10x 51x 51x 51x 32x 19x 51x 51x 152x 51x | /* * Copyright 2021 Harness Inc. All rights reserved. * Use of this source code is governed by the PolyForm Shield 1.0.0 license * that can be found in the licenses directory at the root of this repository, also available at * https://polyformproject.org/wp-content/uploads/2020/06/PolyForm-Shield-1.0.0.txt. */ import React from 'react' import type { FormikErrors } from 'formik' import { isEmpty, merge } from 'lodash-es' import { ErrorsStrip } from '@pipeline/components/ErrorsStrip/ErrorsStrip' import { StageErrorContext } from '@pipeline/context/StageErrorContext' import { useGlobalEventListener } from '@common/hooks' declare global { interface WindowEventMap { UPDATE_ERRORS_STRIP: CustomEvent<string> } } export default React.memo(function ErrorsStripBinded({ domRef }: { domRef?: React.MutableRefObject<HTMLElement | undefined> }) { const { state: { errors, forms } } = React.useContext(StageErrorContext) const [errorsLocal, setErrorsLocal] = React.useState<FormikErrors<unknown>>({}) React.useEffect(() => { if (errors) { setErrorsLocal(errors) } }, [errors]) const updateForm = React.useCallback( (tab: string): void => { if (forms[tab]) { let errorsNew = {} for (const form of forms[tab]) { errorsNew = merge(errorsNew, form.current?.errors ?? {}) } setErrorsLocal(errorsNew) } }, [forms] ) useGlobalEventListener('UPDATE_ERRORS_STRIP', event => { Iif (event.detail && !isEmpty(errorsLocal)) { window.requestAnimationFrame(() => { updateForm(event.detail) }) } }) return <ErrorsStrip formErrors={errorsLocal} domRef={domRef} /> }) |