From 89c0e36ad02f2c5d8fa94a902a4caa2e818e080a Mon Sep 17 00:00:00 2001 From: Alex Iglesias Date: Sat, 27 Nov 2021 15:21:17 +0100 Subject: [PATCH] Created `getHiddenParent` helper. --- helpers/getHiddenParent.ts | 26 ++++++++++++++++++++++++++ helpers/index.ts | 1 + package.json | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 helpers/getHiddenParent.ts diff --git a/helpers/getHiddenParent.ts b/helpers/getHiddenParent.ts new file mode 100644 index 0000000..d1809ea --- /dev/null +++ b/helpers/getHiddenParent.ts @@ -0,0 +1,26 @@ +import { isVisible } from '.'; + +/** + * @returns The first hidden parent element, or the element itself (if hidden). + * If the element is already visible, the function returns `undefined`. + * + * @param element The reference element. + */ +export const getHiddenParent = (element: HTMLElement): HTMLElement | undefined => { + if (isVisible(element)) return; + + let previousElement = element; + + const checkParent = ({ parentElement }: HTMLElement) => { + if (!parentElement) return; + + if (isVisible(parentElement)) return; + + previousElement = parentElement; + checkParent(parentElement); + }; + + checkParent(element); + + return previousElement; +}; diff --git a/helpers/index.ts b/helpers/index.ts index 43dae6e..ac2f89f 100644 --- a/helpers/index.ts +++ b/helpers/index.ts @@ -6,6 +6,7 @@ export { findTextNode } from './findTextNode'; export { getAllParents } from './getAllParents'; export { getDistanceFromTop } from './getDistanceFromTop'; export { getFormFieldValue } from './getFormFieldValue'; +export { getHiddenParent } from './getHiddenParent'; export { getObjectEntries } from './getObjectEntries'; export { getObjectKeys } from './getObjectKeys'; export { isScrollable } from './isScrollable'; diff --git a/package.json b/package.json index 12590c4..e3a2edd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@finsweet/ts-utils", - "version": "0.26.0", + "version": "0.27.0", "description": "Typescript utils for custom Webflow projects.", "main": "index.ts", "module": "index.ts",