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