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 {LogUtil} from './LogUtil' 22 23const TAG = "FolderUtil" 24 25export class FolderUtil { 26 /** 27 * Get Folder Data 28 * 29 * @param folderDataArray - Folder data list 30 * @param folderUuid - fold uuid 31 * @return FolderData 32 */ 33 getFolderData(folderDataArray: FolderData[], folderUuid: string): FolderData { 34 LogUtil.info(TAG, "get folder uuid " + folderUuid) 35 let folderData = folderDataArray.find((folder) => { 36 return folder.uuid == folderUuid 37 }) 38 if (folderData == undefined) { 39 LogUtil.info(TAG, "no folder get " + folderUuid) 40 folderData = new FolderData(0, "", new Date().getTime() + "", "", FolderType.CusDef, Delete.No, new Date().getTime(), new Date().getTime()) 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 if (folderData === undefined || folderData === null) { 102 LogUtil.info(TAG, "isBottomFixedFolder folderData undefined") 103 } 104 if (folderData.uuid === undefined || folderData.uuid === null) { 105 LogUtil.info(TAG, "isBottomFixedFolder folderData uuid undefined") 106 folderData.uuid = 'sys_def_unClassified_uuid'; 107 } 108 LogUtil.info(TAG, "isBottomFixedFolder folderDataUuid " + folderData.uuid) 109 return (folderData.folder_type == FolderType.FeatureDef) 110 } 111 112 /** 113 * Is the folder can be moved into notes 114 * 115 * @param folderDataUuid - Folder uuid 116 * @return boolean - can be moved into notes return true. else return false 117 */ 118 isFolderMoveIn(folderData: FolderData): boolean { 119 if (folderData === undefined || folderData === null) { 120 LogUtil.info(TAG, "isFolderMoveIn folderData undefined") 121 } 122 if (folderData.uuid! === undefined || folderData.uuid! === null) { 123 LogUtil.info(TAG, "isFolderMoveIn folderData uuid undefined") 124 folderData.uuid! == 'sys_def_unClassified_uuid'; 125 } 126 LogUtil.info(TAG, "isFolderMoveIn folderDataUuid " + folderData.uuid!); 127 return (folderData.uuid! == SysDefFolderUuid.UnClassified || folderData!.folder_type == FolderType.CusDef); 128 } 129 130 /** 131 * Get folder text 132 * 133 * @param folderData 134 * @return string | Resource - folder text 135 */ 136 getFolderText(folderData: FolderData): string | Resource { 137 if (folderData === undefined || folderData === null) { 138 LogUtil.info(TAG, "folderData undefined") 139 return '' 140 } 141 if (folderData.uuid === undefined || folderData.uuid === null) { 142 LogUtil.info(TAG, "folderData uuid undefined") 143 folderData.uuid = 'sys_def_unClassified_uuid'; 144 } 145 LogUtil.info(TAG, "folderData.uuid " + folderData.uuid + " folderData.folder_type " + folderData.folder_type) 146 return folderData.folder_type == FolderType.CusDef ? folderData.name : folderTextMap[folderData.uuid] 147 } 148 149 /** 150 * Get Note Count 151 * 152 * @param noteDataArray 153 * @param folderUuid 154 * @return number - Note Count 155 */ 156 getNoteCount(noteDataArray: NoteData[], folderUuid: string): number { 157 let count = 0; 158 const folderTextMap: Record<string, (noteData: NoteData) => void> = { 159 "sys_def_allNotes_uuid": (noteData: NoteData) => { 160 noteData.is_deleted == Delete.No ? ++count : count; 161 }, 162 "sys_def_recentDeletes_uuid": (noteData: NoteData) => { 163 noteData.is_deleted == Delete.Yes ? ++count : count; 164 }, 165 "sys_def_myFavorites_uuid": (noteData: NoteData) => { 166 noteData.is_favorite == Favorite.Yes && noteData.is_deleted == Delete.No ? ++count : count; 167 }, 168 "sys_def_other_uuid": (noteData: NoteData) => { 169 noteData.folder_uuid == folderUuid && noteData.is_deleted == Delete.No ? ++count : count; 170 }, 171 } 172 if (folderUuid == SysDefFolderUuid.AllNotes || folderUuid == SysDefFolderUuid.RecentDeletes || folderUuid == SysDefFolderUuid.MyFavorites) { 173 noteDataArray.forEach(folderTextMap[folderUuid]) 174 } else { 175 noteDataArray.forEach(folderTextMap["sys_def_other_uuid"]) 176 } 177 LogUtil.info(TAG, "folderUuid " + folderUuid + " count " + count.toString()) 178 return count; 179 } 180 181 /** 182 * Get common FolderData 183 * 184 * @param folderDataArray - Folder data list 185 * @param selectedNoteArray - Selected note data list 186 * @return FolderData - return folder when note data list belong to the same folder, else return null 187 */ 188 getCommonFolder(folderDataArray: FolderData[], selectedNoteArray: NoteData[]): FolderData | null { 189 if (selectedNoteArray.length == 0) { 190 return null 191 } 192 let folderData: FolderData = this.getFolderData(folderDataArray, selectedNoteArray[0].folder_uuid) 193 let currentFolderData: string | null = null; 194 selectedNoteArray.forEach((noteItem) => { 195 if (folderData != this.getFolderData(folderDataArray, noteItem.folder_uuid)) { 196 currentFolderData = this.getFolderData(folderDataArray, noteItem.folder_uuid).name 197 } 198 }) 199 return (currentFolderData == null) ? folderData : null 200 } 201 202 /** 203 * folder name duplicate detection 204 * 205 * @param inputStr - Folder name input 206 * @param folderDataArray - folder already exist 207 * @return Promise<boolean> - if input name exist, return true, else return false 208 */ 209 async duplicateDetection(inputStr: string, folderDataArray: FolderData[]): Promise<boolean> { 210 for (let index = 0; index < folderDataArray.length; index++) { 211 if (folderDataArray[index].folder_type == FolderType.CusDef && folderDataArray[index].name == inputStr) { 212 return true 213 } else { 214 let temp = GlobalResourceManager.getStringByResource(this.getFolderText(folderDataArray[index]) as Resource); 215 temp.then(result => { 216 if (result == inputStr) { 217 return true 218 } 219 return false; 220 }) 221 } 222 } 223 return false 224 } 225} 226 227let folderUtil = new FolderUtil() 228 229export default folderUtil as FolderUtil