61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import type { Key } from '../../_util/type';
 | |
| import type {
 | |
|   SingleValueType,
 | |
|   DefaultOptionType,
 | |
|   InternalFieldNames,
 | |
|   ShowCheckedStrategy,
 | |
| } from '../Cascader';
 | |
| import type { OptionsInfo } from '../hooks/useEntities';
 | |
| import { SHOW_CHILD } from './commonUtil';
 | |
| 
 | |
| export function formatStrategyValues(
 | |
|   pathKeys: Key[],
 | |
|   keyPathEntities: OptionsInfo['pathKeyEntities'],
 | |
|   showCheckedStrategy: ShowCheckedStrategy,
 | |
| ) {
 | |
|   const valueSet = new Set(pathKeys);
 | |
| 
 | |
|   return pathKeys.filter(key => {
 | |
|     const entity = keyPathEntities[key];
 | |
|     const parent = entity ? entity.parent : null;
 | |
|     const children = entity ? entity.children : null;
 | |
|     return showCheckedStrategy === SHOW_CHILD
 | |
|       ? !(children && children.some(child => child.key && valueSet.has(child.key)))
 | |
|       : !(parent && !parent.node.disabled && valueSet.has(parent.key));
 | |
|   });
 | |
| }
 | |
| 
 | |
| export function toPathOptions(
 | |
|   valueCells: SingleValueType,
 | |
|   options: DefaultOptionType[],
 | |
|   fieldNames: InternalFieldNames,
 | |
|   // Used for loadingKeys which saved loaded keys as string
 | |
|   stringMode = false,
 | |
| ) {
 | |
|   let currentList = options;
 | |
|   const valueOptions: {
 | |
|     value: SingleValueType[number];
 | |
|     index: number;
 | |
|     option: DefaultOptionType;
 | |
|   }[] = [];
 | |
| 
 | |
|   for (let i = 0; i < valueCells.length; i += 1) {
 | |
|     const valueCell = valueCells[i];
 | |
|     const foundIndex = currentList?.findIndex(option => {
 | |
|       const val = option[fieldNames.value];
 | |
|       return stringMode ? String(val) === String(valueCell) : val === valueCell;
 | |
|     });
 | |
|     const foundOption = foundIndex !== -1 ? currentList?.[foundIndex] : null;
 | |
| 
 | |
|     valueOptions.push({
 | |
|       value: foundOption?.[fieldNames.value] ?? valueCell,
 | |
|       index: foundIndex,
 | |
|       option: foundOption,
 | |
|     });
 | |
| 
 | |
|     currentList = foundOption?.[fieldNames.children];
 | |
|   }
 | |
| 
 | |
|   return valueOptions;
 | |
| }
 |