• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16import {folderIconMap, folderTextMap} from '../model/NoteBaseData'
17import FolderData from '../model/databaseModel/FolderData'
18import NoteData from '../model/databaseModel/NoteData'
19import {SysDefFolderUuid, FolderType, Favorite, Delete} from '../model/databaseModel/EnumData'
20import GlobalResourceManager from './GlobalResourceManager'
21import StyleConstants from '../constants/StyleConstants'
22import {LogUtil} from './LogUtil'
23
24const TAG = "FolderUtil"
25
26export class FolderUtil {
27  /**
28  * Get Folder Data
29  *
30  * @param folderDataArray - Folder data list
31  * @param folderUuid - fold uuid
32  * @return FolderData
33  */
34  getFolderData(folderDataArray: FolderData[], folderUuid: string): FolderData {
35    LogUtil.info(TAG, "get folder uuid " + folderUuid)
36    let folderData = folderDataArray.find((folder) => {
37      return folder.uuid == folderUuid
38    })
39    if (folderData == undefined) {
40      LogUtil.info(TAG, "no folder get " + folderUuid)
41    }
42    return folderData
43  }
44
45  /**
46  * Get Folder Icon
47  *
48  * @param folderUuid - folder Uuid
49  * @return Resource - Folder Icon Resource
50  */
51  getFolderIcon(folderUuid: string): Resource {
52    LogUtil.info(TAG, "folderUuid " + folderUuid)
53    if (folderIconMap[folderUuid] != undefined) {
54      return folderIconMap[folderUuid]
55    }
56    return $r("app.media.folder")
57  }
58
59  /**
60  * Get folder Icon color
61  *
62  * @param folderDataArray - Folder data list
63  * @param selectFolderUuid - Selected fold uuid
64  * @param isSelected - is selected or not
65  * @return Resource | string - color value
66  */
67  getFolderIconColor(folderDataArray: FolderData[], selectFolderUuid: string, isSelected: boolean): Resource | string {
68    let folderData: FolderData = this.getFolderData(folderDataArray, selectFolderUuid)
69    if (folderData == undefined) {
70      LogUtil.info(TAG, "FolderIconColor is 182431")
71      return $r("app.color.folder_color_182431")
72    }
73    LogUtil.info(TAG, "folderData uuid " + folderData.uuid + " isSelected " + isSelected)
74    if (folderData.folder_type == FolderType.SysDef || folderData.folder_type == FolderType.FeatureDef) {
75      if (folderData.uuid ==SysDefFolderUuid.UnClassified) {
76        return "#FF9516"
77      }
78      return isSelected ? $r("app.color.folder_color_f86d05") : $r("app.color.folder_color_99182431")
79    }
80    return folderData.color
81  }
82
83  /**
84  * Get folder Text color
85  *
86  * @param isSelected - is selected or not
87  * @return Resource | string - color value
88  */
89  getFolderTextColor(isSelected: boolean): Resource | string {
90    LogUtil.info(TAG, "isSelected " + isSelected)
91    return isSelected ? $r("app.color.folder_color_f86d05") : $r("app.color.folder_color_182431")
92  }
93
94  /**
95  * Is folder bottom fixed
96  *
97  * @param folderData - Folder
98  * @return boolean - fottom fixed folder: deleted or favorite return true. else return false
99  */
100  isBottomFixedFolder(folderData: FolderData): boolean {
101    LogUtil.info(TAG, "folderDataUuid " + folderData.uuid)
102    return (folderData.folder_type == FolderType.FeatureDef)
103  }
104
105  /**
106  * Is the folder can be moved into notes
107  *
108  * @param folderDataUuid - Folder uuid
109  * @return boolean - can be moved into notes return true. else return false
110  */
111  isFolderMoveIn(folderData: FolderData): boolean {
112    LogUtil.info(TAG, "folderDataUuid " + folderData.uuid)
113    return (folderData.uuid == SysDefFolderUuid.UnClassified || folderData.folder_type == FolderType.CusDef)
114  }
115
116  /**
117  * Get folder text
118  *
119  * @param folderData
120  * @return string | Resource - folder text
121  */
122  getFolderText(folderData: FolderData): string | Resource {
123    LogUtil.info(TAG, "folderData.uuid " + folderData.uuid + " folderData.folder_type " + folderData.folder_type)
124    return folderData.folder_type == FolderType.CusDef ? folderData.name : folderTextMap[folderData.uuid]
125  }
126
127  /**
128  * Get Note Count
129  *
130  * @param noteDataArray
131  * @param folderUuid
132  * @return number - Note Count
133  */
134  getNoteCount(noteDataArray: NoteData[], folderUuid: string): number {
135    let count = 0;
136    const folderTextMap = {
137      "sys_def_allNotes_uuid": (noteData) => {
138          noteData.is_deleted == Delete.No ? ++count : count
139      },
140      "sys_def_recentDeletes_uuid": (noteData) => {
141          noteData.is_deleted == Delete.Yes ? ++count : count
142      },
143      "sys_def_myFavorites_uuid": (noteData) => {
144          noteData.is_favorite == Favorite.Yes && noteData.is_deleted == Delete.No ? ++count : count
145      },
146      "sys_def_other_uuid": (noteData) => {
147          noteData.folder_uuid == folderUuid && noteData.is_deleted == Delete.No ? ++count : count
148      },
149    }
150    if (folderUuid == SysDefFolderUuid.AllNotes || folderUuid == SysDefFolderUuid.RecentDeletes || folderUuid == SysDefFolderUuid.MyFavorites) {
151      noteDataArray.forEach(folderTextMap[folderUuid])
152    } else {
153      noteDataArray.forEach(folderTextMap["sys_def_other_uuid"])
154    }
155    LogUtil.info(TAG, "folderUuid " + folderUuid + " count " + count.toString())
156    return count;
157  }
158
159  /**
160  * Get common FolderData
161  *
162  * @param folderDataArray - Folder data list
163  * @param selectedNoteArray - Selected note data list
164  * @return FolderData - return folder when note data list belong to the same folder, else return null
165  */
166  getCommonFolder(folderDataArray: FolderData[], selectedNoteArray: NoteData[]): FolderData {
167    if (selectedNoteArray.length == 0) {
168      return null
169    }
170    let folderData: FolderData = this.getFolderData(folderDataArray, selectedNoteArray[0].folder_uuid)
171    let currentFolderData = null
172    selectedNoteArray.forEach((noteItem) => {
173      if (folderData != this.getFolderData(folderDataArray, noteItem.folder_uuid)) {
174        currentFolderData = this.getFolderData(folderDataArray, noteItem.folder_uuid).name
175      }
176    })
177    return (currentFolderData == null) ? folderData : null
178  }
179
180  /**
181  * folder name duplicate detection
182  *
183  * @param inputStr - Folder name input
184  * @param folderDataArray - folder already exist
185  * @return Promise<boolean> - if input name exist, return true, else return false
186  */
187  async duplicateDetection(inputStr: string, folderDataArray: FolderData[]): Promise<boolean> {
188    for (let index = 0; index < folderDataArray.length; index++) {
189      if (folderDataArray[index].folder_type == FolderType.CusDef && folderDataArray[index].name == inputStr) {
190        return true
191      } else {
192        let temp = GlobalResourceManager.getStringByResource(this.getFolderText(folderDataArray[index]))
193        temp.then(result => {
194          if (result == inputStr) {
195            return true
196          }
197        })
198      }
199    }
200    return false
201  }
202}
203
204let folderUtil = new FolderUtil()
205
206export default folderUtil as FolderUtil