• 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    if (folderData && folderData.uuid) {
124      LogUtil.info(TAG, "folderData.uuid " + folderData.uuid + " folderData.folder_type " + folderData.folder_type)
125      return folderData.folder_type == FolderType.CusDef ? folderData.name : folderTextMap[folderData.uuid]
126    } else {
127      folderData.uuid = '';
128      LogUtil.info(TAG, "folderData undefined")
129    }
130  }
131
132  /**
133  * Get Note Count
134  *
135  * @param noteDataArray
136  * @param folderUuid
137  * @return number - Note Count
138  */
139  getNoteCount(noteDataArray: NoteData[], folderUuid: string): number {
140    let count = 0;
141    const folderTextMap = {
142      "sys_def_allNotes_uuid": (noteData) => {
143          noteData.is_deleted == Delete.No ? ++count : count
144      },
145      "sys_def_recentDeletes_uuid": (noteData) => {
146          noteData.is_deleted == Delete.Yes ? ++count : count
147      },
148      "sys_def_myFavorites_uuid": (noteData) => {
149          noteData.is_favorite == Favorite.Yes && noteData.is_deleted == Delete.No ? ++count : count
150      },
151      "sys_def_other_uuid": (noteData) => {
152          noteData.folder_uuid == folderUuid && noteData.is_deleted == Delete.No ? ++count : count
153      },
154    }
155    if (folderUuid == SysDefFolderUuid.AllNotes || folderUuid == SysDefFolderUuid.RecentDeletes || folderUuid == SysDefFolderUuid.MyFavorites) {
156      noteDataArray.forEach(folderTextMap[folderUuid])
157    } else {
158      noteDataArray.forEach(folderTextMap["sys_def_other_uuid"])
159    }
160    LogUtil.info(TAG, "folderUuid " + folderUuid + " count " + count.toString())
161    return count;
162  }
163
164  /**
165  * Get common FolderData
166  *
167  * @param folderDataArray - Folder data list
168  * @param selectedNoteArray - Selected note data list
169  * @return FolderData - return folder when note data list belong to the same folder, else return null
170  */
171  getCommonFolder(folderDataArray: FolderData[], selectedNoteArray: NoteData[]): FolderData {
172    if (selectedNoteArray.length == 0) {
173      return null
174    }
175    let folderData: FolderData = this.getFolderData(folderDataArray, selectedNoteArray[0].folder_uuid)
176    let currentFolderData = null
177    selectedNoteArray.forEach((noteItem) => {
178      if (folderData != this.getFolderData(folderDataArray, noteItem.folder_uuid)) {
179        currentFolderData = this.getFolderData(folderDataArray, noteItem.folder_uuid).name
180      }
181    })
182    return (currentFolderData == null) ? folderData : null
183  }
184
185  /**
186  * folder name duplicate detection
187  *
188  * @param inputStr - Folder name input
189  * @param folderDataArray - folder already exist
190  * @return Promise<boolean> - if input name exist, return true, else return false
191  */
192  async duplicateDetection(inputStr: string, folderDataArray: FolderData[]): Promise<boolean> {
193    for (let index = 0; index < folderDataArray.length; index++) {
194      if (folderDataArray[index].folder_type == FolderType.CusDef && folderDataArray[index].name == inputStr) {
195        return true
196      } else {
197        let temp = GlobalResourceManager.getStringByResource(this.getFolderText(folderDataArray[index]))
198        temp.then(result => {
199          if (result == inputStr) {
200            return true
201          }
202        })
203      }
204    }
205    return false
206  }
207}
208
209let folderUtil = new FolderUtil()
210
211export default folderUtil as FolderUtil