1/*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import {CollapsibleSection} from './collapsible_section';
18import {CollapsibleSectionType} from './collapsible_section_type';
19
20export class CollapsibleSections {
21  constructor(private sections: CollapsibleSection[]) {}
22
23  areAllSectionsExpanded(): boolean {
24    return this.getCollapsedSections().length === 0;
25  }
26
27  getCollapsedSections(): CollapsibleSection[] {
28    return this.sections.filter((s) => s.isCollapsed);
29  }
30
31  getSection(type: CollapsibleSectionType): CollapsibleSection | undefined {
32    return this.sections.find((s) => s.type === type);
33  }
34
35  isSectionCollapsed(sectionType: CollapsibleSectionType): boolean {
36    const section = this.getSection(sectionType);
37    return section?.isCollapsed ?? false;
38  }
39
40  onCollapseStateChange(
41    sectionType: CollapsibleSectionType,
42    isCollapsed: boolean,
43  ) {
44    const section = this.getSection(sectionType);
45    if (section) {
46      section.isCollapsed = isCollapsed;
47    }
48  }
49}
50