Mirror of https://github.com/roostorg/osprey github.com/roostorg/osprey
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 44 lines 1.8 kB view raw
1import { OptionData, OptionGroupData } from 'rc-select/lib/interface/index'; 2 3import useApplicationConfigStore from '../stores/ApplicationConfigStore'; 4 5const actionNameComparisonRegEx = /ActionName\s?(=|!)=\s['"]?[a-z_]*?$/; 6const actionNameLookupRegEx = /[a-z_]*$/; 7 8export const filterAutoComplete = (inputValue: string, option?: OptionData | OptionGroupData): boolean => { 9 if (option == null) return false; 10 const { knownActionNames } = useApplicationConfigStore.getState(); 11 const optionString = String(option.value); 12 13 const isAnActionNameComparison = actionNameComparisonRegEx.test(inputValue); 14 const optionIsAnActionName = knownActionNames.has(optionString); 15 16 if (isAnActionNameComparison && optionIsAnActionName) { 17 const actionNameLookupMatch = actionNameLookupRegEx.exec(inputValue); 18 if (actionNameLookupMatch == null) return false; 19 20 const actionNameLookupString = actionNameLookupMatch[0]; 21 return optionString.includes(actionNameLookupString); 22 } else if (isAnActionNameComparison || optionIsAnActionName) { 23 return false; 24 } 25 26 const currentWord = String(inputValue.split(' ').slice(-1)); 27 return optionString.toUpperCase().includes(currentWord.toUpperCase()); 28}; 29 30export const sortOptions = (inputValue: string) => { 31 const upperInput = inputValue.toUpperCase(); 32 return (a: OptionData, b: OptionData) => { 33 const upperA = String(a.value).toUpperCase(); 34 const upperB = String(b.value).toUpperCase(); 35 36 const isExactA = upperA === upperInput ? 0 : 1; 37 const isExactB = upperB === upperInput ? 0 : 1; 38 39 const startsWithA = upperA.startsWith(upperInput) ? 0 : 1; 40 const startsWithB = upperB.startsWith(upperInput) ? 0 : 1; 41 42 return isExactA - isExactB || startsWithA - startsWithB || upperA.localeCompare(upperB); 43 }; 44};