import { OptionWithNested } from "typings/custom"; const deepmapper = ( _options: OptionWithNested[], _callback: (option: OptionWithNested, lavel: number) => OptionWithNested, level: number = 0 ): OptionWithNested[] => { const _level = level + 1; return _options?.map((option: OptionWithNested) => // eslint-disable-next-line @typescript-eslint/no-unused-vars option.options ? { ...option, options: deepmapper(option.options, _callback, _level) } : _callback(option, _level) ); }; export const deepmapOptions = ( options: OptionWithNested[], callback: ( option: OptionWithNested, index: number, level: number ) => OptionWithNested ): OptionWithNested[] => { let index = 0; return deepmapper(options, (option, level) => { const newOption = callback(option, index, level); index += 1; return newOption; }); }; export const getOptionsCount = (options: OptionWithNested[]) => { let count = 0; deepmapper(options, (option) => { count += 1; return option; }); return count; };