• 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 {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