Files
NapCatQQ/.pnpm-store/v3/files/0d/8a4a09b33d1d8ed44713caae68292ba56fe70d9cee91ce34061e97933359f43b188c3868c13e7cacff662c0640bee316a6aca81bd3bd962ee18dacf47e7cae
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

40 lines
1.3 KiB
Plaintext

/*
* Copyright 2020 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
import {Collection, Node} from '@react-types/shared';
import {getChildNodes} from './getChildNodes';
const cache = new WeakMap<Iterable<unknown>, number>();
export function getItemCount<T>(collection: Collection<Node<T>>): number {
let count = cache.get(collection);
if (count != null) {
return count;
}
// TS isn't smart enough to know we've ensured count is a number, so use a new variable
let counter = 0;
let countItems = (items: Iterable<Node<T>>) => {
for (let item of items) {
if (item.type === 'section') {
countItems(getChildNodes(item, collection));
} else {
counter++;
}
}
};
countItems(collection);
cache.set(collection, counter);
return counter;
}