@telia-ace/knowledge-widget-components-search 1.0.6 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{lib-esm → dist}/filter-badges.d.ts +0 -0
- package/{lib-esm → dist}/index.d.ts +0 -0
- package/dist/index.js +234 -0
- package/dist/index.js.map +1 -0
- package/{lib-esm → dist}/quick-filter-item-list.d.ts +0 -0
- package/{lib-esm → dist}/quick-filter.d.ts +0 -0
- package/{lib-esm → dist}/search-component.d.ts +0 -0
- package/{lib-esm → dist}/search.d.ts +0 -0
- package/dist/search.js +1063 -0
- package/dist/search.js.map +1 -0
- package/{lib-esm → dist}/use-search.d.ts +0 -0
- package/{lib-esm → dist}/utils.d.ts +0 -0
- package/package.json +12 -13
- package/lib/filter-badges.d.ts +0 -10
- package/lib/filter-badges.js +0 -235
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -7
- package/lib/quick-filter-item-list.d.ts +0 -17
- package/lib/quick-filter-item-list.js +0 -228
- package/lib/quick-filter.d.ts +0 -7
- package/lib/quick-filter.js +0 -93
- package/lib/search-component.d.ts +0 -42
- package/lib/search-component.js +0 -274
- package/lib/search.d.ts +0 -7
- package/lib/search.js +0 -194
- package/lib/use-search.d.ts +0 -10
- package/lib/use-search.js +0 -99
- package/lib/utils.d.ts +0 -3
- package/lib/utils.js +0 -53
- package/lib-esm/filter-badges.js +0 -210
- package/lib-esm/index.js +0 -2
- package/lib-esm/quick-filter-item-list.js +0 -200
- package/lib-esm/quick-filter.js +0 -65
- package/lib-esm/search-component.js +0 -249
- package/lib-esm/search.js +0 -166
- package/lib-esm/use-search.js +0 -97
- package/lib-esm/utils.js +0 -48
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sources":["../src/filter-badges.tsx","../src/utils.ts","../src/quick-filter-item-list.tsx","../src/quick-filter.tsx","../src/use-search.ts","../src/search.tsx"],"sourcesContent":["import {\r\n borderTabStyle,\r\n Link,\r\n SymbolBadge,\r\n Text,\r\n Tooltip,\r\n useDispatch,\r\n useEventListener,\r\n useKeyPress,\r\n useProperties,\r\n useRouteData,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React, { useCallback, useRef, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { SearchComponentProps } from './search-component';\r\n\r\nconst FilterBadge: React.FC<any> = ({\r\n text,\r\n className,\r\n forceFocusStyle,\r\n filterType,\r\n handleClick,\r\n deleteAriaLabel = '',\r\n ...p\r\n}) => {\r\n const ref = useRef<HTMLAnchorElement>();\r\n\r\n return (\r\n <Text\r\n className={appendClassNames(className, 'humany-filter-badge')}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n handleClick(e, filterType);\r\n }\r\n }}\r\n >\r\n {text}\r\n <Link\r\n {...p}\r\n ref={ref}\r\n tabIndex={0}\r\n role=\"button\"\r\n aria-label={deleteAriaLabel.replace('{{item}}', text)}\r\n onClick={(e) => handleClick(e, filterType)}\r\n >\r\n <SymbolBadge size={13} symbol={{ type: 'Svg', content: 'close' }} />\r\n </Link>\r\n </Text>\r\n );\r\n};\r\n\r\ntype Props = {\r\n inputHasFocus: boolean;\r\n searchContainerRef: HTMLElement | null;\r\n showGuideCategory: boolean;\r\n showTag: boolean;\r\n position: 'inside' | 'below';\r\n};\r\nconst FilterBadges: React.FC<Props> = ({\r\n inputHasFocus,\r\n searchContainerRef,\r\n showTag,\r\n showGuideCategory,\r\n position,\r\n}) => {\r\n const { activeFilterBadges = {}, deleteFilterBadgeAriaLabel = '' } =\r\n useProperties<SearchComponentProps>();\r\n const dispatch = useDispatch();\r\n const { name, params } = useRouteData();\r\n const [isNavigatingWithKeyBoard, setIsNavigatingWithKeyboard] = useState(false);\r\n\r\n const onKeyDown = useCallback((event: KeyboardEvent) => {\r\n const { key } = event;\r\n\r\n if (['ArrowLeft', 'ArrowRight'].indexOf(key) === -1) {\r\n setIsNavigatingWithKeyboard(false);\r\n }\r\n }, []);\r\n\r\n useEventListener('keydown', onKeyDown, window);\r\n\r\n useEventListener('click', onKeyDown, window);\r\n\r\n const { guideCategory, tag, tooltip } = activeFilterBadges;\r\n\r\n const getFocusedFilterBadge = (container: HTMLElement) => {\r\n const badges = container.querySelectorAll(\r\n '.humany-filter-badge'\r\n ) as NodeListOf<HTMLElement>;\r\n return {\r\n badges,\r\n index: Array.from(badges).findIndex((e) => document.activeElement === e),\r\n };\r\n };\r\n\r\n const handleFilterBadgeClick = (\r\n event: React.MouseEvent | React.KeyboardEvent,\r\n filterType: string\r\n ) => {\r\n event.preventDefault();\r\n dispatch('quick-filter:remove', { types: [filterType] });\r\n };\r\n\r\n const keyboardNavigation = (\r\n direction: 'left' | 'right',\r\n inputElem: HTMLInputElement | null\r\n ) => {\r\n if (!searchContainerRef) {\r\n return;\r\n }\r\n const { badges, index: currentFocusedIndex } = getFocusedFilterBadge(searchContainerRef);\r\n\r\n if (badges.length) {\r\n let toFocus: HTMLElement | null = null;\r\n\r\n if (direction === 'left') {\r\n if (currentFocusedIndex === -1) {\r\n // if no badge is focused and direction is left\r\n // focus last badge\r\n toFocus = badges.item(badges.length - 1);\r\n } else if (currentFocusedIndex > 0) {\r\n // if there are more badges to the left, go one step back\r\n // do nothing if already focusing the most left badge\r\n toFocus = badges.item(currentFocusedIndex - 1);\r\n }\r\n } else if (direction === 'right') {\r\n if (currentFocusedIndex === badges.length - 1) {\r\n // if currently focusing the last badge, move focus to search input\r\n inputElem && inputElem.focus();\r\n } else if (badges.item(currentFocusedIndex + 1)) {\r\n toFocus = badges.item(currentFocusedIndex + 1);\r\n }\r\n }\r\n\r\n if (toFocus) {\r\n toFocus.focus();\r\n setIsNavigatingWithKeyboard(true);\r\n }\r\n }\r\n };\r\n\r\n useKeyPress(\r\n 'ArrowLeft',\r\n useCallback(() => {\r\n if (!searchContainerRef) {\r\n return;\r\n }\r\n const { index: focusedBadgeIndex } = getFocusedFilterBadge(searchContainerRef);\r\n\r\n if (inputHasFocus || focusedBadgeIndex > -1) {\r\n const inputElem: HTMLInputElement | null =\r\n searchContainerRef.querySelector('[data-type=\"search\"]');\r\n const isAtBeginningOfInput =\r\n inputElem && inputElem.selectionStart !== null && inputElem.selectionStart <= 0;\r\n const isFocusingAFilterBadge = focusedBadgeIndex > -1;\r\n\r\n if (isAtBeginningOfInput || isFocusingAFilterBadge) {\r\n keyboardNavigation('left', inputElem);\r\n }\r\n }\r\n }, [inputHasFocus, searchContainerRef])\r\n );\r\n\r\n useKeyPress(\r\n 'ArrowRight',\r\n useCallback(() => {\r\n if (!searchContainerRef) {\r\n return;\r\n }\r\n const { index: focusedBadgeIndex } = getFocusedFilterBadge(searchContainerRef);\r\n\r\n if (focusedBadgeIndex > -1) {\r\n const inputElem: HTMLInputElement | null =\r\n searchContainerRef.querySelector('[data-type=\"search\"]');\r\n const isFocusingAFilterBadge = focusedBadgeIndex > -1;\r\n\r\n if (isFocusingAFilterBadge) {\r\n keyboardNavigation('right', inputElem);\r\n }\r\n }\r\n }, [searchContainerRef])\r\n );\r\n\r\n useKeyPress(\r\n 'Backspace',\r\n useCallback(\r\n (event) => {\r\n if (!searchContainerRef) {\r\n return;\r\n }\r\n let filtersToRemove: string[] = [];\r\n const { index: focusedBadgeIndex } = getFocusedFilterBadge(searchContainerRef);\r\n\r\n const inputElem: HTMLInputElement | null =\r\n searchContainerRef.querySelector('[data-type=\"search\"]');\r\n const isFocusingAFilterBadge = focusedBadgeIndex > -1;\r\n\r\n if (isFocusingAFilterBadge) {\r\n if (focusedBadgeIndex === 0) {\r\n if (showGuideCategory) {\r\n filtersToRemove = ['guideCategory'];\r\n } else if (showTag) {\r\n filtersToRemove = ['tag'];\r\n }\r\n } else if (focusedBadgeIndex === 1) {\r\n filtersToRemove = ['tag'];\r\n }\r\n } else {\r\n const isAtBeginningOfInput =\r\n inputElem &&\r\n inputElem.selectionStart !== null &&\r\n inputElem.selectionStart <= 0;\r\n\r\n if (isAtBeginningOfInput) {\r\n if (activeFilterBadges?.tag) {\r\n filtersToRemove = ['tag'];\r\n } else if (activeFilterBadges?.guideCategory) {\r\n filtersToRemove = ['guideCategory'];\r\n }\r\n }\r\n }\r\n\r\n if (filtersToRemove.length > 0) {\r\n event.preventDefault();\r\n dispatch('quick-filter:remove', { types: filtersToRemove });\r\n }\r\n },\r\n [searchContainerRef, activeFilterBadges, showTag, showGuideCategory]\r\n )\r\n );\r\n\r\n const renderBadge = useCallback(\r\n (type: 'guideCategory' | 'tag') => {\r\n if (type === 'guideCategory' && guideCategory && showGuideCategory) {\r\n return (\r\n <StyledFilterBadge\r\n text={`@${guideCategory.title}`}\r\n routeName={name}\r\n filterType=\"guideCategory\"\r\n handleClick={handleFilterBadgeClick}\r\n forceFocusStyle={isNavigatingWithKeyBoard}\r\n deleteAriaLabel={deleteFilterBadgeAriaLabel}\r\n params={{\r\n ...params,\r\n guideCategory: undefined,\r\n }}\r\n />\r\n );\r\n }\r\n if (type === 'tag' && tag && showTag) {\r\n return (\r\n <StyledFilterBadge\r\n className=\"humany-filter-badge\"\r\n text={`#${tag.title}`}\r\n routeName={name}\r\n filterType=\"tag\"\r\n handleClick={handleFilterBadgeClick}\r\n forceFocusStyle={isNavigatingWithKeyBoard}\r\n deleteAriaLabel={deleteFilterBadgeAriaLabel}\r\n params={{\r\n ...params,\r\n tag: undefined,\r\n }}\r\n />\r\n );\r\n }\r\n return null;\r\n },\r\n [guideCategory, tag, name, params, showGuideCategory, showTag, isNavigatingWithKeyBoard]\r\n );\r\n\r\n if (!guideCategory && !tag) {\r\n return null;\r\n }\r\n\r\n return (\r\n <Wrapper className=\"humany-filter-badges\" position={position}>\r\n {guideCategory && tooltip ? (\r\n <Tooltip content={<>{tooltip}</>} sticky={false}>\r\n {renderBadge('guideCategory')}\r\n </Tooltip>\r\n ) : (\r\n renderBadge('guideCategory')\r\n )}\r\n {tag && renderBadge('tag')}\r\n </Wrapper>\r\n );\r\n};\r\n\r\nexport default FilterBadges;\r\n\r\nconst Wrapper = styled.div<{ position: 'inside' | 'below' }>`\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n\r\n ${(p) =>\r\n p.position === 'inside'\r\n ? css`\r\n &:not(:first-child) {\r\n margin: 0 0 0 ${(p) => p.theme.sizes?.normal};\r\n }\r\n `\r\n : css`\r\n margin: ${(p) => p.theme.sizes?.small} 0 0 0;\r\n span:first-child {\r\n margin-left: 0;\r\n }\r\n `}\r\n`;\r\n\r\nconst StyledFilterBadge = styled(FilterBadge)`\r\n display: flex;\r\n align-items: center;\r\n padding: ${(p) => `${p.theme.sizes?.small} calc(${p.theme.sizes?.normal}/2) `};\r\n background-color: ${(p) => p.theme.colors?.primary};\r\n border-radius: ${(p) => p.theme.borderRadius};\r\n font-weight: 300;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n font-style: italic;\r\n color: #ffffff;\r\n text-decoration: none;\r\n white-space: nowrap;\r\n\r\n margin: calc(${(p) => p.theme.sizes?.small} / 2);\r\n\r\n &:focus-within {\r\n ${(p) =>\r\n (p.theme.accessibility?.isTabbing || p.forceFocusStyle) &&\r\n css`\r\n ${borderTabStyle}\r\n background-color: transparent;\r\n\r\n svg {\r\n path {\r\n stroke: ${(p) => p.theme.colors?.primary};\r\n }\r\n }\r\n `};\r\n a {\r\n outline: none;\r\n }\r\n }\r\n\r\n svg {\r\n width: 17px;\r\n height: 11px;\r\n margin: 1px 0 0 ${(p) => p.theme.sizes?.small};\r\n path {\r\n stroke: #ffffff;\r\n stroke-width: 2px;\r\n }\r\n order: 1;\r\n }\r\n`;\r\n","import { Category, Tag } from '@telia-ace/knowledge-widget-core';\r\nimport { categoryTrail, deepClone } from '@telia-ace/widget-utilities';\r\n\r\nexport const match = (title: string, phrase: string) => {\r\n if (!phrase || !title) {\r\n return true;\r\n }\r\n\r\n return !!(title.toLowerCase().indexOf(phrase.toLowerCase()) > -1);\r\n};\r\n\r\nexport const filterItems = (\r\n items: (Tag | Category)[] = [],\r\n type: 'tag' | 'guideCategory',\r\n phrase: string\r\n): any[] => {\r\n if (!phrase) {\r\n return items;\r\n }\r\n\r\n const cloned = deepClone(items);\r\n\r\n if (type === 'tag') {\r\n return cloned.filter((i: Tag) => match(i.title, phrase));\r\n }\r\n\r\n const matchTrail = buildMatchTrail(cloned, phrase);\r\n const filtered = recursiveFilter(cloned, (c: Category) => matchTrail.indexOf(c.id) > -1);\r\n\r\n return filtered;\r\n};\r\n\r\nconst recursiveFilter = (items: Category[], fn: (c: Category) => boolean) => {\r\n return items.filter((i: Category) => {\r\n if (i.items && i.items.length) {\r\n i.items = recursiveFilter(i.items, fn);\r\n }\r\n\r\n return fn(i);\r\n });\r\n};\r\n\r\nconst buildMatchTrail = (categories: Category[], phrase: string) => {\r\n const flattened = flatten(categories);\r\n const matching = flattened.filter((c) => match(c.title, phrase)).map((c) => c.id);\r\n\r\n let res: string[] = [];\r\n\r\n matching.forEach((id) => {\r\n const trail = categoryTrail(id, categories);\r\n\r\n res = res.concat(trail);\r\n });\r\n\r\n return res;\r\n};\r\n\r\nconst flatten = (categories: Category[]): Category[] => {\r\n let result: Category[] = [];\r\n\r\n categories.forEach((category) => {\r\n result.push(category);\r\n\r\n if (Array.isArray(category.items)) {\r\n result = result.concat(flatten(category.items));\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n","import { Category, Tag } from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n ItemTree,\r\n Link,\r\n Text,\r\n useDispatch,\r\n useEventListener,\r\n useProperties,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport React, { useCallback, useEffect, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { SearchComponentProps } from './search-component';\r\nimport { filterItems, match } from './utils';\r\n\r\ntype Props = {\r\n filterPhrase: string;\r\n items: Category[] | Tag[];\r\n filterType: 'guideCategory' | 'tag';\r\n searchContainer: HTMLElement | null;\r\n filterContainer: HTMLElement | null;\r\n inputHasFocus: boolean;\r\n};\r\n\r\nexport const getFocusedIndex = (elem: HTMLElement) => {\r\n const anchors = Array.from(elem?.getElementsByTagName('A') || []).filter(\r\n (a) => a.getAttribute('disabled') === null\r\n ) as HTMLAnchorElement[];\r\n return {\r\n anchors,\r\n focusedIndex: anchors.findIndex((e) => document.activeElement === e),\r\n };\r\n};\r\n\r\nconst getInputElem = (searchContainerRef: HTMLElement | null) => {\r\n return searchContainerRef\r\n ? (searchContainerRef.querySelector(\r\n '[data-type=\"search\"], input[type=\"search\"]'\r\n ) as HTMLElement | null)\r\n : null;\r\n};\r\n\r\nexport const focusInput = (searchContainerRef: HTMLElement | null) => {\r\n if (!searchContainerRef) {\r\n return;\r\n }\r\n const inputElem = getInputElem(searchContainerRef);\r\n if (inputElem) {\r\n inputElem.focus();\r\n }\r\n};\r\n\r\nconst QuickFilterItemList: React.FC<Props> = ({\r\n filterPhrase,\r\n items: rawItems,\r\n filterType,\r\n filterContainer,\r\n searchContainer,\r\n inputHasFocus,\r\n}) => {\r\n const [items, setItems] = useState<Category[] | Tag[]>(rawItems || []);\r\n const [first, setFirst] = useState<string | null>(null);\r\n const dispatch = useDispatch();\r\n const { activeFilterBadges, quickFilters } = useProperties<SearchComponentProps>();\r\n const autoSelect =\r\n (typeof quickFilters === 'object' && !!quickFilters.autoSelect) ||\r\n (typeof quickFilters === 'boolean' && !!quickFilters);\r\n\r\n useEffect(() => {\r\n setItems(filterItems(rawItems, filterType, filterPhrase));\r\n }, [filterPhrase, filterType, rawItems]);\r\n\r\n useEffect(() => {\r\n if (filterContainer) {\r\n const { anchors } = getFocusedIndex(filterContainer);\r\n const id = anchors[0]?.getAttribute('data-id');\r\n\r\n if (id) {\r\n setFirst(id);\r\n }\r\n }\r\n }, [items, filterContainer]);\r\n\r\n const handleItemClicked = useCallback(\r\n (item: Partial<{ id: string }>, type: 'guideCategory' | 'tag') => {\r\n const data: { category?: string; tag?: string } = {\r\n category: activeFilterBadges?.guideCategory\r\n ? activeFilterBadges.guideCategory.id\r\n : undefined,\r\n tag: activeFilterBadges?.tag ? activeFilterBadges.tag.id : undefined,\r\n };\r\n\r\n if (type === 'guideCategory') {\r\n data.category = item.id;\r\n } else if (type === 'tag') {\r\n data.tag = item.id;\r\n }\r\n dispatch('quick-filter:add', data);\r\n },\r\n [activeFilterBadges, dispatch]\r\n );\r\n\r\n const buildListProps = (type: 'guideCategory' | 'tag') => {\r\n if (type === 'guideCategory') {\r\n return {\r\n renderItem: (item: Category, level: number) => (\r\n <StyledLink\r\n autoSelect={autoSelect && inputHasFocus && item.id === first}\r\n disabled={!match(item.title, filterPhrase)}\r\n tabIndex={!match(item.title, filterPhrase) ? -1 : 0}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n handleItemClicked(item, type);\r\n }\r\n }}\r\n data-level={level}\r\n onClick={() => {\r\n handleItemClicked(item, type);\r\n }}\r\n data-id={item.id}\r\n >\r\n <Title\r\n title={item.title}\r\n phrase={filterPhrase}\r\n matches={match(item.title, filterPhrase)}\r\n />\r\n </StyledLink>\r\n ),\r\n };\r\n }\r\n return {\r\n renderLi: true,\r\n renderItem: (item: Tag) => (\r\n <StyledLink\r\n autoSelect={autoSelect && inputHasFocus && item.id === first}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n handleItemClicked(item, type);\r\n }\r\n }}\r\n onClick={() => {\r\n handleItemClicked(item, type);\r\n }}\r\n data-id={item.id}\r\n >\r\n <Title\r\n symbol=\"#\"\r\n title={item.title}\r\n phrase={filterPhrase}\r\n matches={match(item.title, filterPhrase)}\r\n />\r\n </StyledLink>\r\n ),\r\n };\r\n };\r\n\r\n useEventListener(\r\n 'keydown',\r\n (e: KeyboardEvent) => {\r\n const { key } = e;\r\n if (\r\n !filterContainer ||\r\n !(key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter')\r\n ) {\r\n return;\r\n }\r\n\r\n const { anchors, focusedIndex } = getFocusedIndex(filterContainer);\r\n\r\n if (key === 'Enter') {\r\n if (inputHasFocus && autoSelect) {\r\n const id = anchors[0]?.getAttribute('data-id');\r\n\r\n if (id) {\r\n handleItemClicked({ id }, filterType);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n const focusFirst = () => anchors[0]?.focus();\r\n const focusLast = () => anchors[anchors.length - 1]?.focus();\r\n const focusNext = () => anchors[focusedIndex + 1]?.focus();\r\n const focusPrev = () => anchors[focusedIndex - 1]?.focus();\r\n\r\n if (inputHasFocus) {\r\n // Input is focused\r\n\r\n e.preventDefault();\r\n if (key === 'ArrowDown') {\r\n focusFirst();\r\n } else {\r\n focusLast();\r\n }\r\n } else if (focusedIndex > -1) {\r\n // A quick-filter-item is focused\r\n\r\n e.preventDefault();\r\n if (key === 'ArrowDown') {\r\n if (anchors.length > focusedIndex + 1) {\r\n focusNext();\r\n } else {\r\n focusInput(searchContainer);\r\n }\r\n } else {\r\n if (focusedIndex - 1 < 0) {\r\n focusInput(searchContainer);\r\n } else {\r\n focusPrev();\r\n }\r\n }\r\n }\r\n },\r\n window\r\n );\r\n\r\n return (\r\n <ItemTree\r\n tree={items}\r\n renderEmpty={false}\r\n ulProps={{ role: 'listbox' }}\r\n liProps={{ role: 'option' }}\r\n {...buildListProps(filterType)}\r\n />\r\n );\r\n};\r\n\r\nexport default QuickFilterItemList;\r\n\r\ntype TitleProps = {\r\n title: string;\r\n phrase: string;\r\n matches: boolean;\r\n symbol?: string;\r\n};\r\n\r\nconst Title: React.FC<TitleProps> = ({ title, phrase, matches, symbol = '' }) => {\r\n const createTitle = () => {\r\n if (!matches || !phrase) {\r\n return [title];\r\n }\r\n\r\n const index = title.toLowerCase().indexOf(phrase.toLowerCase());\r\n const start = title.substr(0, index);\r\n const bold = title.slice(index, index + phrase.length);\r\n const end = title.substr(index + phrase.length);\r\n return [start, bold, end];\r\n };\r\n\r\n const [start, bold, end] = createTitle();\r\n\r\n return (\r\n <Text>\r\n {symbol}\r\n {start}\r\n {bold ? <strong>{bold}</strong> : null}\r\n {end ? end : null}\r\n </Text>\r\n );\r\n};\r\n\r\nconst disabledCss = css<any>`\r\n opacity: 0.5;\r\n pointer-events: none;\r\n`;\r\n\r\nconst focused = css<{ 'data-level'?: number; autoSelect: boolean }>`\r\n background-color: ${(p) => p.theme.colors?.text};\r\n color: #ffffff;\r\n outline: none;\r\n\r\n span:first-child {\r\n border-color: ${(p) => p.theme.colors?.text};\r\n }\r\n`;\r\n\r\nconst StyledLink = styled(Link)<{ 'data-level'?: number; autoSelect: boolean }>`\r\n display: block;\r\n text-decoration: none;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n\r\n ${(p) => p.disabled && disabledCss}\r\n color: ${(p) => p.theme.colors?.text};\r\n background-color: transparent;\r\n\r\n span {\r\n display: block;\r\n ${(p) =>\r\n p['data-level']\r\n ? `padding: calc(${p.theme.sizes?.normal} / 2) ${p.theme.sizes?.normal};`\r\n : `padding: calc(${p.theme.sizes?.normal} / 2) ${p.theme.sizes?.medium}; `}\r\n ${(p) => p['data-level'] && 'border-left: 2px solid'}\r\n }\r\n\r\n span:first-child {\r\n border-color: #e7e7e7;\r\n }\r\n\r\n ${(p) => p['data-level'] && `padding: 0 calc(${p.theme.sizes?.medium} * ${p['data-level']});`}\r\n\r\n ${(p) => p.autoSelect && focused}\r\n\r\n &:hover,\r\n &:focus {\r\n ${focused}\r\n }\r\n`;\r\n","import { Widget } from '@telia-ace/knowledge-widget-core';\r\nimport {\r\n contentBox,\r\n Loader,\r\n useContainer,\r\n useProperties,\r\n useScroll,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React, { useCallback, useRef } from 'react';\r\nimport styled from 'styled-components';\r\nimport QuickFilterItemList, { focusInput, getFocusedIndex } from './quick-filter-item-list';\r\nimport { SearchComponentProps } from './search-component';\r\n\r\ntype Props = {\r\n phrase: string;\r\n inputHasFocus: boolean;\r\n searchContainerRef: HTMLElement | null;\r\n};\r\n\r\nexport default ({ phrase = '', inputHasFocus, searchContainerRef }: Props) => {\r\n const {\r\n quickFilter = {\r\n open: false,\r\n loading: false,\r\n symbol: '',\r\n type: '',\r\n items: [],\r\n },\r\n } = useProperties<SearchComponentProps>();\r\n const [css, ref] = useScroll(true);\r\n const container = useContainer();\r\n const { events } = container.get('$widget') as Widget;\r\n const wrapperRef = useRef() as React.MutableRefObject<HTMLDivElement | null>;\r\n\r\n const setWrapperRef = useCallback(\r\n (node: HTMLDivElement | null) => {\r\n if (node) {\r\n node.addEventListener(\r\n 'keydown',\r\n () => {\r\n const listItemFocused = getFocusedIndex(node).focusedIndex > -1;\r\n if (listItemFocused) {\r\n events.subscribeOnce('router:changed', () => {\r\n focusInput(searchContainerRef);\r\n });\r\n }\r\n },\r\n true\r\n );\r\n }\r\n\r\n wrapperRef.current = node;\r\n return node;\r\n },\r\n [searchContainerRef]\r\n );\r\n\r\n const { items = [], symbol, type, open, loading } = quickFilter;\r\n\r\n if (!open || !symbol) {\r\n return null;\r\n }\r\n\r\n const filterPhrase = phrase.slice(phrase.indexOf(symbol) + 1);\r\n\r\n return (\r\n <Wrapper\r\n ref={setWrapperRef}\r\n data-loading={loading}\r\n className={appendClassNames(\r\n 'humany-quick-filter-dropdown',\r\n [type === 'guideCategory', 'humany-quick-filter-guide-categories'],\r\n [type === 'tag', 'humany-quick-filter-tags']\r\n )}\r\n >\r\n <Inner className=\"humany-quick-filter-dropdown-inner\" css={css} ref={ref}>\r\n <QuickFilterItemList\r\n filterType={type as 'guideCategory' | 'tag'}\r\n items={items}\r\n filterPhrase={filterPhrase}\r\n filterContainer={ref.current}\r\n searchContainer={searchContainerRef}\r\n inputHasFocus={inputHasFocus}\r\n />\r\n </Inner>\r\n <Loader loading={loading} />\r\n </Wrapper>\r\n );\r\n};\r\n\r\nconst Wrapper = styled.div`\r\n ${contentBox};\r\n position: absolute;\r\n top: calc(100% + ${(p) => p.theme.sizes?.normal});\r\n left: 0;\r\n right: 0;\r\n z-index: 1;\r\n overflow: hidden;\r\n`;\r\n\r\nconst Inner = styled.div<{ css: string }>`\r\n max-height: 300px;\r\n overflow: auto;\r\n padding: ${(p) => p.theme.sizes?.medium} 0;\r\n ${(p) => p.css}\r\n ul {\r\n list-style: none;\r\n padding: 0;\r\n margin: 0;\r\n }\r\n li div {\r\n ${(p) => `margin: ${p.theme.sizes?.normal} 0;`}\r\n }\r\n`;\r\n","import {\r\n useDebounce,\r\n useDispatch,\r\n usePrevious,\r\n useProperties,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport { useCallback, useEffect, useRef } from 'react';\r\nimport { SearchComponentProps } from './search-component';\r\n\r\ntype ReturnType = [\r\n (arg: React.KeyboardEvent | React.MouseEvent | boolean) => void,\r\n (navigateToHome: boolean) => void,\r\n React.MutableRefObject<HTMLElement | null>\r\n];\r\n\r\nconst filterChanged = <T extends Optional<{ id: string }> | null>(newValue: T, oldValue: T) => {\r\n if (newValue && !oldValue) {\r\n return true;\r\n }\r\n if (!newValue && oldValue) {\r\n return true;\r\n }\r\n if (newValue && oldValue) {\r\n if (newValue.id !== oldValue.id) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nexport default (\r\n phrase: string,\r\n params: { [key: string]: any } = {},\r\n debounce = true\r\n): ReturnType => {\r\n const dispatch = useDispatch();\r\n\r\n const {\r\n quickFilters = false,\r\n quickFilter = { open: false },\r\n activeFilterBadges,\r\n filterBadges = false,\r\n incremental = 600,\r\n } = useProperties<SearchComponentProps>();\r\n\r\n const debouncedPhrase = useDebounce(\r\n phrase,\r\n typeof incremental === 'boolean' ? 600 : incremental\r\n );\r\n const previousDebouncedPhrase = usePrevious(debouncedPhrase);\r\n const previousFilters = usePrevious(activeFilterBadges);\r\n const ref = useRef<null | HTMLElement>(null);\r\n\r\n const dispatchSearch = useCallback(\r\n (value: string = '') => {\r\n if (filterBadges) {\r\n const filtersChanged =\r\n filterChanged(\r\n activeFilterBadges?.guideCategory,\r\n previousFilters?.guideCategory\r\n ) || filterChanged(activeFilterBadges?.tag, previousFilters?.tag);\r\n return dispatch('search', { value, filtersChanged, filters: activeFilterBadges });\r\n }\r\n return dispatch('search', { value });\r\n },\r\n [dispatch, activeFilterBadges]\r\n );\r\n\r\n const dispatchClear = useCallback(\r\n (navigateToHome: boolean) => {\r\n dispatch('clear', { navigateToHome });\r\n },\r\n [dispatch]\r\n );\r\n\r\n const removeFilterKeywords = (input: string) => {\r\n if (quickFilters) {\r\n return input.replace(/([@#].*)/g, '');\r\n }\r\n return input;\r\n };\r\n\r\n const submitSearch = useCallback(\r\n (arg: React.KeyboardEvent | React.MouseEvent | boolean) => {\r\n if (quickFilter.open && (arg as React.KeyboardEvent).preventDefault) {\r\n (arg as React.KeyboardEvent).preventDefault();\r\n return;\r\n }\r\n\r\n const activeElement = document.activeElement as HTMLElement;\r\n const isSearching =\r\n ref.current && typeof ref.current.contains === 'function'\r\n ? ref.current.contains(activeElement)\r\n : false;\r\n const cleanedPhrase = removeFilterKeywords(phrase);\r\n\r\n if (\r\n (typeof arg === 'boolean' && arg) ||\r\n (cleanedPhrase.length && isSearching) ||\r\n activeFilterBadges?.guideCategory ||\r\n (activeFilterBadges?.tag && isSearching)\r\n ) {\r\n dispatchSearch(cleanedPhrase);\r\n } else {\r\n dispatchClear(isSearching);\r\n }\r\n },\r\n [ref, phrase, quickFilter, dispatchClear, activeFilterBadges, dispatchSearch]\r\n );\r\n\r\n useEffect(() => {\r\n const filtersChanged =\r\n filterChanged(activeFilterBadges?.guideCategory, previousFilters?.guideCategory) ||\r\n filterChanged(activeFilterBadges?.tag, previousFilters?.tag);\r\n\r\n const phrase = debouncedPhrase ? removeFilterKeywords(debouncedPhrase) : debouncedPhrase;\r\n const previousPhrase = previousDebouncedPhrase\r\n ? removeFilterKeywords(previousDebouncedPhrase)\r\n : previousDebouncedPhrase;\r\n if (\r\n (typeof previousPhrase !== 'undefined' &&\r\n previousPhrase !== phrase &&\r\n phrase !== params.phrase &&\r\n debounce &&\r\n !quickFilter.open) ||\r\n (filtersChanged && !activeFilterBadges?.initial)\r\n ) {\r\n submitSearch(filtersChanged);\r\n }\r\n }, [debouncedPhrase, quickFilter.open, activeFilterBadges, submitSearch]);\r\n\r\n useEffect(() => {\r\n if (phrase && quickFilters) {\r\n const quickFiltersGuideCategory =\r\n (typeof quickFilters === 'boolean' && !!quickFilters) ||\r\n (typeof quickFilters === 'object' && !!quickFilters.guideCategory);\r\n\r\n const quickFiltersTag =\r\n (typeof quickFilters === 'boolean' && !!quickFilters) ||\r\n (typeof quickFilters === 'object' && !!quickFilters.tag);\r\n\r\n if (quickFiltersGuideCategory && phrase.indexOf('@') === phrase.length - 1) {\r\n dispatch('quick-filter:open', { type: 'guideCategory', symbol: '@' });\r\n }\r\n\r\n if (quickFiltersTag && phrase.indexOf('#') === phrase.length - 1) {\r\n dispatch('quick-filter:open', { type: 'tag', symbol: '#' });\r\n }\r\n }\r\n\r\n if (quickFilter.open && phrase.indexOf('@') === -1 && phrase.indexOf('#') === -1) {\r\n dispatch('quick-filter:close');\r\n }\r\n }, [phrase]);\r\n\r\n return [submitSearch, dispatchClear, ref];\r\n};\r\n","import { Component } from '@telia-ace/knowledge-widget-types-grid';\r\nimport {\r\n borderTabStyle,\r\n Button,\r\n contentBox,\r\n convertToStringAttributes,\r\n Input,\r\n SymbolBadge,\r\n useChildren,\r\n useContainer,\r\n useDispatch,\r\n useProperties,\r\n useRouteData,\r\n useTransitionEnd,\r\n useWidgetEvent,\r\n} from '@telia-ace/knowledge-widget-ui';\r\nimport { RoutingService } from '@telia-ace/widget-routing';\r\nimport { appendClassNames } from '@telia-ace/widget-utilities';\r\nimport React, { useCallback, useEffect, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport FilterBadges from './filter-badges';\r\nimport QuickFilter from './quick-filter';\r\nimport { SearchComponentProps } from './search-component';\r\nimport useSearch from './use-search';\r\n\r\ntype Props = {\r\n className: string;\r\n role?: string;\r\n};\r\n\r\nconst Search: React.SFC<Props> = ({ className, ...other }) => {\r\n const {\r\n showSearchButton,\r\n showClearButton,\r\n role = 'search',\r\n autoFocus,\r\n placeholder,\r\n searchButtonLabel,\r\n clearButtonLabel,\r\n ariaLabel,\r\n route: searchRoute = 'search',\r\n incremental = true,\r\n showChildren = false,\r\n quickFilter,\r\n quickFilters: quickFiltersEnabled,\r\n filterBadges,\r\n } = useProperties<SearchComponentProps>();\r\n const { params } = useRouteData();\r\n const [hasFocus, setHasFocus] = useState(false);\r\n const [phrase, setPhrase] = useState(params.phrase || '');\r\n const [showFilterBadges, setShowFilterBadges] = useState({\r\n guideCategory: false,\r\n tag: false,\r\n });\r\n const container = useContainer();\r\n const children = useChildren();\r\n const dispatch = useDispatch();\r\n const { position: filterBadgePosition = 'inside' } =\r\n typeof filterBadges === 'object' ? filterBadges : {};\r\n\r\n useEffect(() => {\r\n const { guideCategory, tag } = params;\r\n const showGuideCategory =\r\n typeof filterBadges === 'object' ? !!filterBadges.guideCategory : !!filterBadges;\r\n const showTag = typeof filterBadges === 'object' ? !!filterBadges.tag : !!filterBadges;\r\n\r\n setShowFilterBadges({\r\n guideCategory: showGuideCategory && !!guideCategory,\r\n tag: showTag && !!tag,\r\n });\r\n }, [filterBadges, params]);\r\n\r\n // Remove quick-filter symbol, quick-filter phrase\r\n // and close quick-filter when route changed\r\n useWidgetEvent(\r\n 'router:changed',\r\n () => {\r\n if (quickFilter) {\r\n const { open, symbol } = quickFilter;\r\n\r\n if (open) {\r\n if (symbol) {\r\n const cleaned = phrase.replace(phrase.slice(phrase.indexOf(symbol)), '');\r\n setPhrase(cleaned);\r\n }\r\n\r\n dispatch('quick-filter:close');\r\n }\r\n }\r\n },\r\n [quickFilter, phrase, setPhrase, dispatch]\r\n );\r\n\r\n const [search, clear, elem] = useSearch(phrase, params, !!incremental);\r\n\r\n useEffect(() => {\r\n setPhrase(params.phrase || '');\r\n }, [params.phrase]);\r\n\r\n const onChange = useCallback(\r\n (value: string) => {\r\n setPhrase(value);\r\n },\r\n [setPhrase]\r\n );\r\n\r\n const onEscape = useCallback(() => {\r\n dispatch('quick-filter:close').then(() => clear(true));\r\n }, [dispatch, clear]);\r\n\r\n const autoFocusHandler = useCallback(() => {\r\n if (autoFocus && !hasFocus) {\r\n elem.current?.getElementsByTagName('input')[0]?.focus();\r\n }\r\n }, [autoFocus, hasFocus, elem]);\r\n\r\n const onClearButtonClick = useCallback(() => {\r\n container.getAsync('router').then((router: RoutingService) => {\r\n const initialRoute = router.getInitialRoute();\r\n const currentRoute = router.getRouteData();\r\n // if we already are on the initial route\r\n // and it's not the search route, clear the search instead of navigate\r\n if (initialRoute?.name === currentRoute.name && initialRoute?.name !== searchRoute) {\r\n setPhrase('');\r\n } else {\r\n clear(true);\r\n }\r\n });\r\n }, [container, setPhrase, clear]);\r\n\r\n const renderFilterBadges = (position: 'inside' | 'below') => {\r\n if (position !== filterBadgePosition) {\r\n return null;\r\n }\r\n if (!!showFilterBadges.guideCategory || !!showFilterBadges.tag) {\r\n return (\r\n <FilterBadges\r\n position={position}\r\n inputHasFocus={hasFocus}\r\n showGuideCategory={showFilterBadges.guideCategory}\r\n showTag={showFilterBadges.tag}\r\n searchContainerRef={elem.current}\r\n />\r\n );\r\n }\r\n };\r\n\r\n useTransitionEnd(autoFocusHandler);\r\n\r\n const showClear =\r\n showClearButton && (showFilterBadges.guideCategory || showFilterBadges.tag || phrase);\r\n const quickFilterAccessibilityProps = quickFiltersEnabled\r\n ? convertToStringAttributes({\r\n role: 'combobox',\r\n 'aria-autocomplete': 'list',\r\n autoComplete: 'off',\r\n 'aria-haspopup': 'listbox',\r\n })\r\n : {};\r\n\r\n return (\r\n <StyledSearchWrapper\r\n {...other}\r\n ref={elem}\r\n role={role}\r\n className={appendClassNames(className, 'humany-search')}\r\n data-has-phrase={!!phrase}\r\n data-has-focus={hasFocus}\r\n data-has-search-symbol={showSearchButton ? 'true' : 'false'}\r\n >\r\n <Inner\r\n action=\".\"\r\n onSubmit={(e: any) => {\r\n e.preventDefault();\r\n elem.current?.getElementsByTagName('input')[0]?.blur();\r\n }}\r\n data-has-focus={hasFocus}\r\n >\r\n {showSearchButton && (\r\n <SearchButton\r\n aria-label={searchButtonLabel}\r\n type=\"submit\"\r\n title={searchButtonLabel}\r\n disabled={!phrase}\r\n onClick={search}\r\n data-has-phrase={!!phrase}\r\n data-has-focus={hasFocus}\r\n >\r\n <SymbolBadge size={32} symbol={{ type: 'Svg', content: 'search' }} />\r\n </SearchButton>\r\n )}\r\n {renderFilterBadges('inside')}\r\n <Input\r\n type=\"search\"\r\n aria-label={ariaLabel}\r\n {...quickFilterAccessibilityProps}\r\n placeholder={\r\n showFilterBadges.guideCategory || showFilterBadges.tag ? '' : placeholder\r\n }\r\n onFocusChange={setHasFocus}\r\n onEscape={onEscape}\r\n onEnter={search}\r\n onChange={onChange}\r\n value={phrase}\r\n />\r\n {showClear && (\r\n <ClearButton\r\n aria-label={clearButtonLabel}\r\n type=\"reset\"\r\n hasFocus={hasFocus}\r\n title={clearButtonLabel}\r\n onClick={onClearButtonClick}\r\n >\r\n <SymbolBadge size={27} symbol={{ type: 'Svg', content: 'clear' }} />\r\n </ClearButton>\r\n )}\r\n {showChildren &&\r\n !showClear &&\r\n children.map((child) => (\r\n <Component key={child.id} id={child.id} branch=\"default\" />\r\n ))}\r\n <QuickFilter\r\n inputHasFocus={hasFocus}\r\n phrase={phrase}\r\n searchContainerRef={elem.current}\r\n />\r\n </Inner>\r\n {renderFilterBadges('below')}\r\n </StyledSearchWrapper>\r\n );\r\n};\r\n\r\nexport default Search;\r\n\r\nconst StyledSearchWrapper = styled.div<\r\n {\r\n 'data-has-focus': boolean;\r\n 'data-has-phrase': boolean;\r\n 'data-has-search-symbol': 'true' | 'false';\r\n } & any\r\n>`\r\n ${contentBox};\r\n width: 100%;\r\n padding: ${(p) => p.theme.sizes?.large};\r\n\r\n input {\r\n background-color: transparent;\r\n border: none;\r\n outline: none;\r\n min-width: 25%;\r\n flex: 1;\r\n font-size: ${(p) => p.theme.fonts?.normal};\r\n font-weight: 300;\r\n font-style: italic;\r\n padding: 1em 0;\r\n color: ${(p) => p.theme.colors?.text};\r\n -webkit-appearance: none;\r\n\r\n ${(p) => p['data-has-search-symbol'] === 'true' && `text-indent: ${p.theme.sizes?.normal};`}\r\n\r\n ::placeholder {\r\n color: ${(p) => p.theme.colors?.text};\r\n }\r\n /* removes the 'X' from IE */\r\n &[type='search']::-ms-clear {\r\n display: none;\r\n width: 0;\r\n height: 0;\r\n }\r\n &[type='search']::-ms-reveal {\r\n display: none;\r\n width: 0;\r\n height: 0;\r\n }\r\n\r\n /* removes the 'X' from Chrome */\r\n &[type='search']::-webkit-search-decoration,\r\n &[type='search']::-webkit-search-cancel-button,\r\n &[type='search']::-webkit-search-results-button,\r\n &[type='search']::-webkit-search-results-decoration {\r\n display: none;\r\n }\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n }\r\n\r\n button {\r\n background: transparent;\r\n border: none;\r\n padding: 0;\r\n font-size: ${(p) => p.theme.fonts?.large};\r\n transition: color 200ms ease-out;\r\n color: ${(p) =>\r\n p['data-has-focus'] || p['data-has-phrase'] ? p.theme.colors?.primary : '#000000'};\r\n cursor: pointer;\r\n > svg {\r\n height: 100%;\r\n }\r\n }\r\n`;\r\n\r\nconst Inner = styled.form<{ 'data-has-focus': boolean } & any>`\r\n display: flex;\r\n flex-wrap: nowrap;\r\n align-items: center;\r\n border: ${(p) => p.theme.inputBorder};\r\n border-radius: ${(p) => p.theme.borderRadius};\r\n background-color: #ffffff;\r\n position: relative;\r\n padding: 0 ${(p) => p.theme.sizes?.normal};\r\n\r\n ${(p) =>\r\n p['data-has-focus'] &&\r\n css`\r\n ${(p) =>\r\n p.theme.accessibility?.isTabbing\r\n ? borderTabStyle\r\n : `\r\n border-color: ${p.theme.colors?.primary};\r\n outline: none;\r\n input {\r\n outline: none;\r\n }\r\n `}\r\n `};\r\n`;\r\n\r\nconst SearchButton = styled(Button)<{\r\n 'data-has-focus': boolean;\r\n 'data-has-phrase': boolean;\r\n}>`\r\n padding: 0;\r\n height: 2em;\r\n\r\n svg {\r\n circle,\r\n line {\r\n stroke: ${(p) => (p['data-has-focus'] ? p.theme.colors?.primary : '#000000')};\r\n }\r\n }\r\n`;\r\n\r\nconst ClearButton = styled(Button)<{ hasFocus: boolean } & any>`\r\n &:focus svg {\r\n ${(p) => p.theme.accessibility?.isTabbing && borderTabStyle}\r\n }\r\n\r\n svg {\r\n vertical-align: top;\r\n\r\n circle,\r\n line,\r\n path {\r\n stroke: ${(p) => (p.hasFocus ? p.theme.colors?.primary : p.theme.colors?.text)};\r\n }\r\n }\r\n`;\r\n"],"names":["Wrapper","Inner"],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,34 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telia-ace/knowledge-widget-components-search",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "Search component for ACE Knowledge Widgets.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "Telia Company AB",
|
|
7
7
|
"keywords": [
|
|
8
8
|
"telia"
|
|
9
9
|
],
|
|
10
|
-
"
|
|
11
|
-
"
|
|
10
|
+
"module": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
12
|
"files": [
|
|
13
13
|
"LICENSE.txt",
|
|
14
14
|
"README.md",
|
|
15
|
-
"
|
|
16
|
-
"lib-esm/"
|
|
15
|
+
"dist/"
|
|
17
16
|
],
|
|
18
17
|
"publishConfig": {
|
|
19
18
|
"access": "public"
|
|
20
19
|
},
|
|
21
20
|
"scripts": {
|
|
22
|
-
"clean": "
|
|
23
|
-
"
|
|
21
|
+
"clean": "rimraf ./dist",
|
|
22
|
+
"precompile": "tsc -emitDeclarationOnly",
|
|
23
|
+
"compile": "vite build"
|
|
24
24
|
},
|
|
25
25
|
"sideEffects": false,
|
|
26
|
-
"typings": "lib/index.d.ts",
|
|
27
26
|
"dependencies": {
|
|
28
|
-
"@telia-ace/knowledge-widget-core": "^1.0.
|
|
29
|
-
"@telia-ace/knowledge-widget-types-grid": "^1.0.
|
|
30
|
-
"@telia-ace/knowledge-widget-ui": "^1.0.
|
|
31
|
-
"@telia-ace/widget-routing": "^1.0.
|
|
27
|
+
"@telia-ace/knowledge-widget-core": "^1.0.7",
|
|
28
|
+
"@telia-ace/knowledge-widget-types-grid": "^1.0.14",
|
|
29
|
+
"@telia-ace/knowledge-widget-ui": "^1.0.11",
|
|
30
|
+
"@telia-ace/widget-routing": "^1.0.6",
|
|
32
31
|
"@telia-ace/widget-utilities": "^1.0.1",
|
|
33
32
|
"@webprovisions/platform": "^1.1.2"
|
|
34
33
|
},
|
|
@@ -42,5 +41,5 @@
|
|
|
42
41
|
"@types/react-dom": "^16.8.0",
|
|
43
42
|
"@types/styled-components": "^5.1.7"
|
|
44
43
|
},
|
|
45
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "6223de72a56dbb4dfa05c2d22d6e2a6e55795d57"
|
|
46
45
|
}
|
package/lib/filter-badges.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
declare type Props = {
|
|
3
|
-
inputHasFocus: boolean;
|
|
4
|
-
searchContainerRef: HTMLElement | null;
|
|
5
|
-
showGuideCategory: boolean;
|
|
6
|
-
showTag: boolean;
|
|
7
|
-
position: 'inside' | 'below';
|
|
8
|
-
};
|
|
9
|
-
declare const FilterBadges: React.FC<Props>;
|
|
10
|
-
export default FilterBadges;
|
package/lib/filter-badges.js
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
-
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
-
return cooked;
|
|
5
|
-
};
|
|
6
|
-
var __assign = (this && this.__assign) || function () {
|
|
7
|
-
__assign = Object.assign || function(t) {
|
|
8
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
-
s = arguments[i];
|
|
10
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
-
t[p] = s[p];
|
|
12
|
-
}
|
|
13
|
-
return t;
|
|
14
|
-
};
|
|
15
|
-
return __assign.apply(this, arguments);
|
|
16
|
-
};
|
|
17
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
-
if (k2 === undefined) k2 = k;
|
|
19
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
-
}
|
|
23
|
-
Object.defineProperty(o, k2, desc);
|
|
24
|
-
}) : (function(o, m, k, k2) {
|
|
25
|
-
if (k2 === undefined) k2 = k;
|
|
26
|
-
o[k2] = m[k];
|
|
27
|
-
}));
|
|
28
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
-
}) : function(o, v) {
|
|
31
|
-
o["default"] = v;
|
|
32
|
-
});
|
|
33
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
41
|
-
var t = {};
|
|
42
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
43
|
-
t[p] = s[p];
|
|
44
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
45
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
46
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
47
|
-
t[p[i]] = s[p[i]];
|
|
48
|
-
}
|
|
49
|
-
return t;
|
|
50
|
-
};
|
|
51
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
52
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
53
|
-
if (!m) return o;
|
|
54
|
-
var i = m.call(o), r, ar = [], e;
|
|
55
|
-
try {
|
|
56
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
57
|
-
}
|
|
58
|
-
catch (error) { e = { error: error }; }
|
|
59
|
-
finally {
|
|
60
|
-
try {
|
|
61
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
62
|
-
}
|
|
63
|
-
finally { if (e) throw e.error; }
|
|
64
|
-
}
|
|
65
|
-
return ar;
|
|
66
|
-
};
|
|
67
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
68
|
-
var knowledge_widget_ui_1 = require("@telia-ace/knowledge-widget-ui");
|
|
69
|
-
var widget_utilities_1 = require("@telia-ace/widget-utilities");
|
|
70
|
-
var react_1 = __importStar(require("react"));
|
|
71
|
-
var styled_components_1 = __importStar(require("styled-components"));
|
|
72
|
-
var FilterBadge = function (_a) {
|
|
73
|
-
var text = _a.text, className = _a.className, forceFocusStyle = _a.forceFocusStyle, filterType = _a.filterType, handleClick = _a.handleClick, _b = _a.deleteAriaLabel, deleteAriaLabel = _b === void 0 ? '' : _b, p = __rest(_a, ["text", "className", "forceFocusStyle", "filterType", "handleClick", "deleteAriaLabel"]);
|
|
74
|
-
var ref = (0, react_1.useRef)();
|
|
75
|
-
return (react_1.default.createElement(knowledge_widget_ui_1.Text, { className: (0, widget_utilities_1.appendClassNames)(className, 'humany-filter-badge'), onKeyDown: function (e) {
|
|
76
|
-
if (e.key === 'Enter') {
|
|
77
|
-
handleClick(e, filterType);
|
|
78
|
-
}
|
|
79
|
-
} },
|
|
80
|
-
text,
|
|
81
|
-
react_1.default.createElement(knowledge_widget_ui_1.Link, __assign({}, p, { ref: ref, tabIndex: 0, role: "button", "aria-label": deleteAriaLabel.replace('{{item}}', text), onClick: function (e) { return handleClick(e, filterType); } }),
|
|
82
|
-
react_1.default.createElement(knowledge_widget_ui_1.SymbolBadge, { size: 13, symbol: { type: 'Svg', content: 'close' } }))));
|
|
83
|
-
};
|
|
84
|
-
var FilterBadges = function (_a) {
|
|
85
|
-
var inputHasFocus = _a.inputHasFocus, searchContainerRef = _a.searchContainerRef, showTag = _a.showTag, showGuideCategory = _a.showGuideCategory, position = _a.position;
|
|
86
|
-
var _b = (0, knowledge_widget_ui_1.useProperties)(), _c = _b.activeFilterBadges, activeFilterBadges = _c === void 0 ? {} : _c, _d = _b.deleteFilterBadgeAriaLabel, deleteFilterBadgeAriaLabel = _d === void 0 ? '' : _d;
|
|
87
|
-
var dispatch = (0, knowledge_widget_ui_1.useDispatch)();
|
|
88
|
-
var _e = (0, knowledge_widget_ui_1.useRouteData)(), name = _e.name, params = _e.params;
|
|
89
|
-
var _f = __read((0, react_1.useState)(false), 2), isNavigatingWithKeyBoard = _f[0], setIsNavigatingWithKeyboard = _f[1];
|
|
90
|
-
var onKeyDown = (0, react_1.useCallback)(function (event) {
|
|
91
|
-
var key = event.key;
|
|
92
|
-
if (['ArrowLeft', 'ArrowRight'].indexOf(key) === -1) {
|
|
93
|
-
setIsNavigatingWithKeyboard(false);
|
|
94
|
-
}
|
|
95
|
-
}, []);
|
|
96
|
-
(0, knowledge_widget_ui_1.useEventListener)('keydown', onKeyDown, window);
|
|
97
|
-
(0, knowledge_widget_ui_1.useEventListener)('click', onKeyDown, window);
|
|
98
|
-
var guideCategory = activeFilterBadges.guideCategory, tag = activeFilterBadges.tag, tooltip = activeFilterBadges.tooltip;
|
|
99
|
-
var getFocusedFilterBadge = function (container) {
|
|
100
|
-
var badges = container.querySelectorAll('.humany-filter-badge');
|
|
101
|
-
return {
|
|
102
|
-
badges: badges,
|
|
103
|
-
index: Array.from(badges).findIndex(function (e) { return document.activeElement === e; }),
|
|
104
|
-
};
|
|
105
|
-
};
|
|
106
|
-
var handleFilterBadgeClick = function (event, filterType) {
|
|
107
|
-
event.preventDefault();
|
|
108
|
-
dispatch('quick-filter:remove', { types: [filterType] });
|
|
109
|
-
};
|
|
110
|
-
var keyboardNavigation = function (direction, inputElem) {
|
|
111
|
-
if (!searchContainerRef) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
var _a = getFocusedFilterBadge(searchContainerRef), badges = _a.badges, currentFocusedIndex = _a.index;
|
|
115
|
-
if (badges.length) {
|
|
116
|
-
var toFocus = null;
|
|
117
|
-
if (direction === 'left') {
|
|
118
|
-
if (currentFocusedIndex === -1) {
|
|
119
|
-
// if no badge is focused and direction is left
|
|
120
|
-
// focus last badge
|
|
121
|
-
toFocus = badges.item(badges.length - 1);
|
|
122
|
-
}
|
|
123
|
-
else if (currentFocusedIndex > 0) {
|
|
124
|
-
// if there are more badges to the left, go one step back
|
|
125
|
-
// do nothing if already focusing the most left badge
|
|
126
|
-
toFocus = badges.item(currentFocusedIndex - 1);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
else if (direction === 'right') {
|
|
130
|
-
if (currentFocusedIndex === badges.length - 1) {
|
|
131
|
-
// if currently focusing the last badge, move focus to search input
|
|
132
|
-
inputElem && inputElem.focus();
|
|
133
|
-
}
|
|
134
|
-
else if (badges.item(currentFocusedIndex + 1)) {
|
|
135
|
-
toFocus = badges.item(currentFocusedIndex + 1);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
if (toFocus) {
|
|
139
|
-
toFocus.focus();
|
|
140
|
-
setIsNavigatingWithKeyboard(true);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
(0, knowledge_widget_ui_1.useKeyPress)('ArrowLeft', (0, react_1.useCallback)(function () {
|
|
145
|
-
if (!searchContainerRef) {
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
var focusedBadgeIndex = getFocusedFilterBadge(searchContainerRef).index;
|
|
149
|
-
if (inputHasFocus || focusedBadgeIndex > -1) {
|
|
150
|
-
var inputElem = searchContainerRef.querySelector('[data-type="search"]');
|
|
151
|
-
var isAtBeginningOfInput = inputElem && inputElem.selectionStart !== null && inputElem.selectionStart <= 0;
|
|
152
|
-
var isFocusingAFilterBadge = focusedBadgeIndex > -1;
|
|
153
|
-
if (isAtBeginningOfInput || isFocusingAFilterBadge) {
|
|
154
|
-
keyboardNavigation('left', inputElem);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}, [inputHasFocus, searchContainerRef]));
|
|
158
|
-
(0, knowledge_widget_ui_1.useKeyPress)('ArrowRight', (0, react_1.useCallback)(function () {
|
|
159
|
-
if (!searchContainerRef) {
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
var focusedBadgeIndex = getFocusedFilterBadge(searchContainerRef).index;
|
|
163
|
-
if (focusedBadgeIndex > -1) {
|
|
164
|
-
var inputElem = searchContainerRef.querySelector('[data-type="search"]');
|
|
165
|
-
var isFocusingAFilterBadge = focusedBadgeIndex > -1;
|
|
166
|
-
if (isFocusingAFilterBadge) {
|
|
167
|
-
keyboardNavigation('right', inputElem);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}, [searchContainerRef]));
|
|
171
|
-
(0, knowledge_widget_ui_1.useKeyPress)('Backspace', (0, react_1.useCallback)(function (event) {
|
|
172
|
-
if (!searchContainerRef) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
var filtersToRemove = [];
|
|
176
|
-
var focusedBadgeIndex = getFocusedFilterBadge(searchContainerRef).index;
|
|
177
|
-
var inputElem = searchContainerRef.querySelector('[data-type="search"]');
|
|
178
|
-
var isFocusingAFilterBadge = focusedBadgeIndex > -1;
|
|
179
|
-
if (isFocusingAFilterBadge) {
|
|
180
|
-
if (focusedBadgeIndex === 0) {
|
|
181
|
-
if (showGuideCategory) {
|
|
182
|
-
filtersToRemove = ['guideCategory'];
|
|
183
|
-
}
|
|
184
|
-
else if (showTag) {
|
|
185
|
-
filtersToRemove = ['tag'];
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
else if (focusedBadgeIndex === 1) {
|
|
189
|
-
filtersToRemove = ['tag'];
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
var isAtBeginningOfInput = inputElem &&
|
|
194
|
-
inputElem.selectionStart !== null &&
|
|
195
|
-
inputElem.selectionStart <= 0;
|
|
196
|
-
if (isAtBeginningOfInput) {
|
|
197
|
-
if (activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.tag) {
|
|
198
|
-
filtersToRemove = ['tag'];
|
|
199
|
-
}
|
|
200
|
-
else if (activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.guideCategory) {
|
|
201
|
-
filtersToRemove = ['guideCategory'];
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
if (filtersToRemove.length > 0) {
|
|
206
|
-
event.preventDefault();
|
|
207
|
-
dispatch('quick-filter:remove', { types: filtersToRemove });
|
|
208
|
-
}
|
|
209
|
-
}, [searchContainerRef, activeFilterBadges, showTag, showGuideCategory]));
|
|
210
|
-
var renderBadge = (0, react_1.useCallback)(function (type) {
|
|
211
|
-
if (type === 'guideCategory' && guideCategory && showGuideCategory) {
|
|
212
|
-
return (react_1.default.createElement(StyledFilterBadge, { text: "@".concat(guideCategory.title), routeName: name, filterType: "guideCategory", handleClick: handleFilterBadgeClick, forceFocusStyle: isNavigatingWithKeyBoard, deleteAriaLabel: deleteFilterBadgeAriaLabel, params: __assign(__assign({}, params), { guideCategory: undefined }) }));
|
|
213
|
-
}
|
|
214
|
-
if (type === 'tag' && tag && showTag) {
|
|
215
|
-
return (react_1.default.createElement(StyledFilterBadge, { className: "humany-filter-badge", text: "#".concat(tag.title), routeName: name, filterType: "tag", handleClick: handleFilterBadgeClick, forceFocusStyle: isNavigatingWithKeyBoard, deleteAriaLabel: deleteFilterBadgeAriaLabel, params: __assign(__assign({}, params), { tag: undefined }) }));
|
|
216
|
-
}
|
|
217
|
-
return null;
|
|
218
|
-
}, [guideCategory, tag, name, params, showGuideCategory, showTag, isNavigatingWithKeyBoard]);
|
|
219
|
-
if (!guideCategory && !tag) {
|
|
220
|
-
return null;
|
|
221
|
-
}
|
|
222
|
-
return (react_1.default.createElement(Wrapper, { className: "humany-filter-badges", position: position },
|
|
223
|
-
guideCategory && tooltip ? (react_1.default.createElement(knowledge_widget_ui_1.Tooltip, { content: react_1.default.createElement(react_1.default.Fragment, null, tooltip), sticky: false }, renderBadge('guideCategory'))) : (renderBadge('guideCategory')),
|
|
224
|
-
tag && renderBadge('tag')));
|
|
225
|
-
};
|
|
226
|
-
exports.default = FilterBadges;
|
|
227
|
-
var Wrapper = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n\n ", "\n"], ["\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n\n ", "\n"])), function (p) {
|
|
228
|
-
return p.position === 'inside'
|
|
229
|
-
? (0, styled_components_1.css)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n &:not(:first-child) {\n margin: 0 0 0 ", ";\n }\n "], ["\n &:not(:first-child) {\n margin: 0 0 0 ", ";\n }\n "])), function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.normal; }) : (0, styled_components_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n margin: ", " 0 0 0;\n span:first-child {\n margin-left: 0;\n }\n "], ["\n margin: ", " 0 0 0;\n span:first-child {\n margin-left: 0;\n }\n "])), function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.small; });
|
|
230
|
-
});
|
|
231
|
-
var StyledFilterBadge = (0, styled_components_1.default)(FilterBadge)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n padding: ", ";\n background-color: ", ";\n border-radius: ", ";\n font-weight: 300;\n font-size: ", ";\n font-style: italic;\n color: #ffffff;\n text-decoration: none;\n white-space: nowrap;\n\n margin: calc(", " / 2);\n\n &:focus-within {\n ", ";\n a {\n outline: none;\n }\n }\n\n svg {\n width: 17px;\n height: 11px;\n margin: 1px 0 0 ", ";\n path {\n stroke: #ffffff;\n stroke-width: 2px;\n }\n order: 1;\n }\n"], ["\n display: flex;\n align-items: center;\n padding: ", ";\n background-color: ", ";\n border-radius: ", ";\n font-weight: 300;\n font-size: ", ";\n font-style: italic;\n color: #ffffff;\n text-decoration: none;\n white-space: nowrap;\n\n margin: calc(", " / 2);\n\n &:focus-within {\n ", ";\n a {\n outline: none;\n }\n }\n\n svg {\n width: 17px;\n height: 11px;\n margin: 1px 0 0 ", ";\n path {\n stroke: #ffffff;\n stroke-width: 2px;\n }\n order: 1;\n }\n"])), function (p) { var _a, _b; return "".concat((_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.small, " calc(").concat((_b = p.theme.sizes) === null || _b === void 0 ? void 0 : _b.normal, "/2) "); }, function (p) { var _a; return (_a = p.theme.colors) === null || _a === void 0 ? void 0 : _a.primary; }, function (p) { return p.theme.borderRadius; }, function (p) { var _a; return (_a = p.theme.fonts) === null || _a === void 0 ? void 0 : _a.normal; }, function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.small; }, function (p) {
|
|
232
|
-
var _a;
|
|
233
|
-
return (((_a = p.theme.accessibility) === null || _a === void 0 ? void 0 : _a.isTabbing) || p.forceFocusStyle) && (0, styled_components_1.css)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n ", "\n background-color: transparent;\n\n svg {\n path {\n stroke: ", ";\n }\n }\n "], ["\n ", "\n background-color: transparent;\n\n svg {\n path {\n stroke: ", ";\n }\n }\n "])), knowledge_widget_ui_1.borderTabStyle, function (p) { var _a; return (_a = p.theme.colors) === null || _a === void 0 ? void 0 : _a.primary; });
|
|
234
|
-
}, function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.small; });
|
|
235
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
|
package/lib/index.d.ts
DELETED
package/lib/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
var search_component_1 = __importDefault(require("./search-component"));
|
|
7
|
-
exports.default = search_component_1.default;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Category, Tag } from '@telia-ace/knowledge-widget-core';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
declare type Props = {
|
|
4
|
-
filterPhrase: string;
|
|
5
|
-
items: Category[] | Tag[];
|
|
6
|
-
filterType: 'guideCategory' | 'tag';
|
|
7
|
-
searchContainer: HTMLElement | null;
|
|
8
|
-
filterContainer: HTMLElement | null;
|
|
9
|
-
inputHasFocus: boolean;
|
|
10
|
-
};
|
|
11
|
-
export declare const getFocusedIndex: (elem: HTMLElement) => {
|
|
12
|
-
anchors: HTMLAnchorElement[];
|
|
13
|
-
focusedIndex: number;
|
|
14
|
-
};
|
|
15
|
-
export declare const focusInput: (searchContainerRef: HTMLElement | null) => void;
|
|
16
|
-
declare const QuickFilterItemList: React.FC<Props>;
|
|
17
|
-
export default QuickFilterItemList;
|