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