1d5a52cc2Sopenharmony_ci/*
2d5a52cc2Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3d5a52cc2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d5a52cc2Sopenharmony_ci * you may not use this file except in compliance with the License.
5d5a52cc2Sopenharmony_ci * You may obtain a copy of the License at
6d5a52cc2Sopenharmony_ci *
7d5a52cc2Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8d5a52cc2Sopenharmony_ci *
9d5a52cc2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d5a52cc2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d5a52cc2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d5a52cc2Sopenharmony_ci * See the License for the specific language governing permissions and
13d5a52cc2Sopenharmony_ci * limitations under the License.
14d5a52cc2Sopenharmony_ci */
15d5a52cc2Sopenharmony_ci
16d5a52cc2Sopenharmony_ciimport DateUtil from '@ohos/utils/src/main/ets/default/baseUtil/DateUtil'
17d5a52cc2Sopenharmony_ciimport RdbStoreUtil from '@ohos/utils/src/main/ets/default/baseUtil/RdbStoreUtil'
18d5a52cc2Sopenharmony_ciimport FolderData from '@ohos/utils/src/main/ets/default/model/databaseModel/FolderData'
19d5a52cc2Sopenharmony_ciimport NoteData from '@ohos/utils/src/main/ets/default/model/databaseModel/NoteData'
20d5a52cc2Sopenharmony_ciimport util from '@ohos.util'
21d5a52cc2Sopenharmony_ciimport {
22d5a52cc2Sopenharmony_ci  TableName,
23d5a52cc2Sopenharmony_ci  NoteTableColumn,
24d5a52cc2Sopenharmony_ci  SysDefFolderUuid,
25d5a52cc2Sopenharmony_ci  Favorite,
26d5a52cc2Sopenharmony_ci  Delete
27d5a52cc2Sopenharmony_ci} from '@ohos/utils/src/main/ets/default/model/databaseModel/EnumData'
28d5a52cc2Sopenharmony_ciimport StyleConstants from '@ohos/utils/src/main/ets/default/constants/StyleConstants'
29d5a52cc2Sopenharmony_ciimport { EditContentDialogPortrait, DeleteDialog, EditTitleDialog } from './CusDialogComp'
30d5a52cc2Sopenharmony_ciimport FolderUtil from '@ohos/utils/src/main/ets/default/baseUtil/FolderUtil'
31d5a52cc2Sopenharmony_ciimport NoteUtil from '@ohos/utils/src/main/ets/default/baseUtil/NoteUtil'
32d5a52cc2Sopenharmony_ciimport prompt from '@system.prompt'
33d5a52cc2Sopenharmony_ciimport { LogUtil } from '@ohos/utils/src/main/ets/default/baseUtil/LogUtil'
34d5a52cc2Sopenharmony_ciimport OperationUtils from '@ohos/utils/src/main/ets/default/baseUtil/OperationUtils'
35d5a52cc2Sopenharmony_ciimport router from '@system.router'
36d5a52cc2Sopenharmony_ciimport inputMethod from '@ohos.inputMethod';
37d5a52cc2Sopenharmony_ciimport { folderTextMap } from '@ohos/utils/src/main/ets/default/model/NoteBaseData'
38d5a52cc2Sopenharmony_ciimport abilityAccessCtrl from '@ohos.abilityAccessCtrl';
39d5a52cc2Sopenharmony_ci
40d5a52cc2Sopenharmony_civar time_id: number
41d5a52cc2Sopenharmony_ci
42d5a52cc2Sopenharmony_ciconst TAG = "NoteContentCompPortrait"
43d5a52cc2Sopenharmony_ci
44d5a52cc2Sopenharmony_ciasync function routePage() {
45d5a52cc2Sopenharmony_ci  try {
46d5a52cc2Sopenharmony_ci    await router.back()
47d5a52cc2Sopenharmony_ci  } catch (err) {
48d5a52cc2Sopenharmony_ci    LogUtil.info(TAG, "fail callback")
49d5a52cc2Sopenharmony_ci  }
50d5a52cc2Sopenharmony_ci}
51d5a52cc2Sopenharmony_ci
52d5a52cc2Sopenharmony_ci// Note content component
53d5a52cc2Sopenharmony_ci@Component
54d5a52cc2Sopenharmony_ciexport struct NoteContentCompPortrait {
55d5a52cc2Sopenharmony_ci  @Provide('SelectedNoteData') selectedNoteData: NoteData = AppStorage.Get('NewNote')
56d5a52cc2Sopenharmony_ci  @Provide('SelectedFolderData') selectedFolderData: FolderData = AppStorage.Get("NewFolder")
57d5a52cc2Sopenharmony_ci  @StorageLink('AllNoteArray') AllNoteArray: NoteData[] = AppStorage.Link('AllNoteArray')
58d5a52cc2Sopenharmony_ci  @Provide('EditModel') editModel: boolean = false
59d5a52cc2Sopenharmony_ci  @StorageLink('dpi') dpi: number = 240
60d5a52cc2Sopenharmony_ci  controllerShow: WebviewController
61d5a52cc2Sopenharmony_ci  private editContentFlag = false
62d5a52cc2Sopenharmony_ci  private isClickBack: boolean = false
63d5a52cc2Sopenharmony_ci  @StorageLink('ScrollTopPercent') scrollTopPercent: number = 0.0
64d5a52cc2Sopenharmony_ci  editContentDialogCtl: CustomDialogController = new CustomDialogController({
65d5a52cc2Sopenharmony_ci    builder: EditContentDialogPortrait({ confirm: this.confirm.bind(this) }),
66d5a52cc2Sopenharmony_ci    alignment: DialogAlignment.Bottom,
67d5a52cc2Sopenharmony_ci    autoCancel: true,
68d5a52cc2Sopenharmony_ci    customStyle: true,
69d5a52cc2Sopenharmony_ci  })
70d5a52cc2Sopenharmony_ci
71d5a52cc2Sopenharmony_ci  confirm(excuteJs: string) {
72d5a52cc2Sopenharmony_ci    this.controllerShow.runJavaScript(excuteJs)
73d5a52cc2Sopenharmony_ci  }
74d5a52cc2Sopenharmony_ci
75d5a52cc2Sopenharmony_ci  storeScrollTop(scrollTop: number) {
76d5a52cc2Sopenharmony_ci    if (scrollTop < 0) {
77d5a52cc2Sopenharmony_ci      return
78d5a52cc2Sopenharmony_ci    }
79d5a52cc2Sopenharmony_ci    AppStorage.SetOrCreate<number>('ScrollTopPercent', scrollTop / this.controllerShow.getPageHeight())
80d5a52cc2Sopenharmony_ci  }
81d5a52cc2Sopenharmony_ci
82d5a52cc2Sopenharmony_ci  restoreScrollTop() {
83d5a52cc2Sopenharmony_ci    try {
84d5a52cc2Sopenharmony_ci      if (!AppStorage.Has('remoteScrollTopPercent')) {
85d5a52cc2Sopenharmony_ci        return
86d5a52cc2Sopenharmony_ci      }
87d5a52cc2Sopenharmony_ci      var scrollTopPercent = AppStorage.Get<number>('remoteScrollTopPercent')
88d5a52cc2Sopenharmony_ci      if (scrollTopPercent < 0) {
89d5a52cc2Sopenharmony_ci        return
90d5a52cc2Sopenharmony_ci      }
91d5a52cc2Sopenharmony_ci      this.controllerShow.runJavaScript(
92d5a52cc2Sopenharmony_ci        'document.documentElement.scrollTop = ' + this.controllerShow.getPageHeight() * scrollTopPercent
93d5a52cc2Sopenharmony_ci      )
94d5a52cc2Sopenharmony_ci    } catch (error) {
95d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, 'restoreScrollTop error')
96d5a52cc2Sopenharmony_ci    }
97d5a52cc2Sopenharmony_ci
98d5a52cc2Sopenharmony_ci  }
99d5a52cc2Sopenharmony_ci
100d5a52cc2Sopenharmony_ci  restoreFocus() {
101d5a52cc2Sopenharmony_ci    if (!AppStorage.Has('isRemoteFocusOnSearch')) {
102d5a52cc2Sopenharmony_ci      return
103d5a52cc2Sopenharmony_ci    }
104d5a52cc2Sopenharmony_ci    let isRemoteFocusOnSearch = AppStorage.Get<boolean>('isRemoteFocusOnSearch')
105d5a52cc2Sopenharmony_ci    if (isRemoteFocusOnSearch) {
106d5a52cc2Sopenharmony_ci      focusControl.requestFocus('searchInput')
107d5a52cc2Sopenharmony_ci    }
108d5a52cc2Sopenharmony_ci    AppStorage.Delete('isRemoteFocusOnSearch')
109d5a52cc2Sopenharmony_ci  }
110d5a52cc2Sopenharmony_ci
111d5a52cc2Sopenharmony_ci  noteContent = {
112d5a52cc2Sopenharmony_ci    callbackhtml: (html) => {
113d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, 'note uuid is:' + this.selectedNoteData?.uuid)
114d5a52cc2Sopenharmony_ci      this.selectedNoteData.content_text = NoteUtil.contrastInitType(this.selectedNoteData.content_text);
115d5a52cc2Sopenharmony_ci      if (this.selectedNoteData.content_text === html ) {
116d5a52cc2Sopenharmony_ci        return;
117d5a52cc2Sopenharmony_ci      };
118d5a52cc2Sopenharmony_ci      this.selectedNoteData.content_text = html
119d5a52cc2Sopenharmony_ci      this.selectedNoteData.modified_time = new Date().getTime()
120d5a52cc2Sopenharmony_ci      let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
121d5a52cc2Sopenharmony_ci      predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
122d5a52cc2Sopenharmony_ci      RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null)
123d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, 'update note success:' + this.selectedNoteData?.uuid)
124d5a52cc2Sopenharmony_ci      // save continue data
125d5a52cc2Sopenharmony_ci      let continueNote: string = JSON.stringify(this.selectedNoteData?.toNoteObject())
126d5a52cc2Sopenharmony_ci      AppStorage.SetOrCreate<string>('ContinueNote', continueNote)
127d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, "callbackhtml, set continue note success")
128d5a52cc2Sopenharmony_ci    },
129d5a52cc2Sopenharmony_ci    callbackImagePath: (imgName) => {
130d5a52cc2Sopenharmony_ci      // updata note image
131d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, 'note imgName is:' + imgName)
132d5a52cc2Sopenharmony_ci      this.selectedNoteData.content_img = imgName
133d5a52cc2Sopenharmony_ci    },
134d5a52cc2Sopenharmony_ci
135d5a52cc2Sopenharmony_ci    callbackScheduledSave: (html) => {
136d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, 'callbackScheduledSave')
137d5a52cc2Sopenharmony_ci      if (this.selectedNoteData?.content_text == html) {
138d5a52cc2Sopenharmony_ci        LogUtil.info(TAG, 'callbackScheduledSave the same value return')
139d5a52cc2Sopenharmony_ci        return;
140d5a52cc2Sopenharmony_ci      }
141d5a52cc2Sopenharmony_ci      this.selectedNoteData.content_text = html
142d5a52cc2Sopenharmony_ci      this.selectedNoteData.modified_time = new Date().getTime()
143d5a52cc2Sopenharmony_ci      let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
144d5a52cc2Sopenharmony_ci      predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
145d5a52cc2Sopenharmony_ci      RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null)
146d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, 'callbackScheduledSave, update note success:' + this.selectedNoteData?.uuid)
147d5a52cc2Sopenharmony_ci      // save continue data
148d5a52cc2Sopenharmony_ci      let continueNote: string = JSON.stringify(this.selectedNoteData?.toNoteObject())
149d5a52cc2Sopenharmony_ci      AppStorage.SetOrCreate<string>('ContinueNote', continueNote)
150d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, 'callbackScheduledSave, set continue note success')
151d5a52cc2Sopenharmony_ci    },
152d5a52cc2Sopenharmony_ci    callbackPasteImage: (html) => {
153d5a52cc2Sopenharmony_ci      if (html) {
154d5a52cc2Sopenharmony_ci        LogUtil.info(TAG, 'paste info' + html)
155d5a52cc2Sopenharmony_ci        let realHtml = ""
156d5a52cc2Sopenharmony_ci        let base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/
157d5a52cc2Sopenharmony_ci        if (html && html.indexOf("base64") > 0) {
158d5a52cc2Sopenharmony_ci          LogUtil.info(TAG, " getSrcFromHtml, src[1] : " + html)
159d5a52cc2Sopenharmony_ci          let imgData = html.split(',')[1];
160d5a52cc2Sopenharmony_ci          let imgType = 'png'
161d5a52cc2Sopenharmony_ci          if (html.indexOf("jpeg") > 0) {
162d5a52cc2Sopenharmony_ci            imgType = 'jpg'
163d5a52cc2Sopenharmony_ci          } else if (html.indexOf("gif") > 0) {
164d5a52cc2Sopenharmony_ci            imgType = 'gif'
165d5a52cc2Sopenharmony_ci          }
166d5a52cc2Sopenharmony_ci          let filePath = ""
167d5a52cc2Sopenharmony_ci          if (base64regex.test(imgData)) {
168d5a52cc2Sopenharmony_ci            let base64 = new util.Base64()
169d5a52cc2Sopenharmony_ci            let decodeArr = base64.decodeSync(imgData)
170d5a52cc2Sopenharmony_ci            filePath = OperationUtils.saveImageData(decodeArr, imgType)
171d5a52cc2Sopenharmony_ci          } else {
172d5a52cc2Sopenharmony_ci            filePath = OperationUtils.saveImage(imgData, imgType)
173d5a52cc2Sopenharmony_ci          }
174d5a52cc2Sopenharmony_ci          realHtml = "file://" + filePath
175d5a52cc2Sopenharmony_ci        }
176d5a52cc2Sopenharmony_ci        LogUtil.info(TAG, 'paste info11' + realHtml)
177d5a52cc2Sopenharmony_ci        this.controllerShow.runJavaScript("javascript:RICH_EDITOR.insertImageHtml('" + realHtml + "')")
178d5a52cc2Sopenharmony_ci      } else {
179d5a52cc2Sopenharmony_ci        LogUtil.info(TAG, 'paste info22224')
180d5a52cc2Sopenharmony_ci      }
181d5a52cc2Sopenharmony_ci    },
182d5a52cc2Sopenharmony_ci    callbackGetSize: (fontSize) => {
183d5a52cc2Sopenharmony_ci      if (fontSize === 16) {
184d5a52cc2Sopenharmony_ci        this.selectedNoteData.slider_value = 0
185d5a52cc2Sopenharmony_ci      } else if (fontSize === 18) {
186d5a52cc2Sopenharmony_ci        this.selectedNoteData.slider_value = 4
187d5a52cc2Sopenharmony_ci      } else if (fontSize === 24) {
188d5a52cc2Sopenharmony_ci        this.selectedNoteData.slider_value = 8
189d5a52cc2Sopenharmony_ci      } else if (fontSize === 32) {
190d5a52cc2Sopenharmony_ci        this.selectedNoteData.slider_value = 12
191d5a52cc2Sopenharmony_ci      } else if (fontSize === 48) {
192d5a52cc2Sopenharmony_ci        this.selectedNoteData.slider_value = 16
193d5a52cc2Sopenharmony_ci      }
194d5a52cc2Sopenharmony_ci    },
195d5a52cc2Sopenharmony_ci    addToDo: () => {
196d5a52cc2Sopenharmony_ci      // 清单
197d5a52cc2Sopenharmony_ci      this.controllerShow.runJavaScript("javascript:RICH_EDITOR.setTodo()")
198d5a52cc2Sopenharmony_ci    },
199d5a52cc2Sopenharmony_ci    chooseStyle: () => {
200d5a52cc2Sopenharmony_ci      this.editContentDialogCtl.open()
201d5a52cc2Sopenharmony_ci    },
202d5a52cc2Sopenharmony_ci    openAlbum: async () => {
203d5a52cc2Sopenharmony_ci      let permissionList: Array<string> = [
204d5a52cc2Sopenharmony_ci        "ohos.permission.READ_IMAGEVIDEO",
205d5a52cc2Sopenharmony_ci        "ohos.permission.WRITE_IMAGEVIDEO"
206d5a52cc2Sopenharmony_ci      ]
207d5a52cc2Sopenharmony_ci      let context: any = AppStorage.Get("context");
208d5a52cc2Sopenharmony_ci      let AtManager = abilityAccessCtrl.createAtManager();
209d5a52cc2Sopenharmony_ci      // @ts-ignore
210d5a52cc2Sopenharmony_ci      await AtManager.requestPermissionsFromUser(context, permissionList).then((data) => {
211d5a52cc2Sopenharmony_ci        LogUtil.info(TAG, 'data permissions : ' + data.permissions)
212d5a52cc2Sopenharmony_ci        LogUtil.info(TAG, 'data result: ' + data.authResults)
213d5a52cc2Sopenharmony_ci        let sum = 0
214d5a52cc2Sopenharmony_ci        for (let i = 0; i < data.authResults.length; i++) {
215d5a52cc2Sopenharmony_ci          sum += data.authResults[i]
216d5a52cc2Sopenharmony_ci        }
217d5a52cc2Sopenharmony_ci        LogUtil.info(TAG, 'request permissions sum: ' + sum)
218d5a52cc2Sopenharmony_ci      }).catch((err) => {
219d5a52cc2Sopenharmony_ci        LogUtil.warn(TAG, 'failed to requestPermissionsFromUser : ' + err.code);
220d5a52cc2Sopenharmony_ci      })
221d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, 'startAbility start')
222d5a52cc2Sopenharmony_ci      await globalThis.noteContext.startAbilityForResult({
223d5a52cc2Sopenharmony_ci        parameters: { uri: "singleselect", filterMediaType: "FILTER_MEDIA_TYPE_IMAGE" },
224d5a52cc2Sopenharmony_ci        bundleName: "com.ohos.photos",
225d5a52cc2Sopenharmony_ci        abilityName: "com.ohos.photos.MainAbility",
226d5a52cc2Sopenharmony_ci      }).then(v => {
227d5a52cc2Sopenharmony_ci        let want = v['want'];
228d5a52cc2Sopenharmony_ci        if (want != null && want != undefined) {
229d5a52cc2Sopenharmony_ci          let param = want['parameters'];
230d5a52cc2Sopenharmony_ci          let imageUri = ""
231d5a52cc2Sopenharmony_ci          if (param != null && param != undefined) {
232d5a52cc2Sopenharmony_ci            let uri = param['select-item-list'];
233d5a52cc2Sopenharmony_ci            imageUri = uri[0];
234d5a52cc2Sopenharmony_ci          }
235d5a52cc2Sopenharmony_ci          LogUtil.info(TAG, "image url" + imageUri)
236d5a52cc2Sopenharmony_ci          // 拷贝
237d5a52cc2Sopenharmony_ci          if (imageUri != null && imageUri != "") {
238d5a52cc2Sopenharmony_ci            OperationUtils.copy(imageUri).then((uriPath) => {
239d5a52cc2Sopenharmony_ci              var path = "file://" + uriPath
240d5a52cc2Sopenharmony_ci              LogUtil.info(TAG, 'image uri is:' + path)
241d5a52cc2Sopenharmony_ci              this.controllerShow.runJavaScript("javascript:RICH_EDITOR.getFocus()")
242d5a52cc2Sopenharmony_ci              this.controllerShow.runJavaScript("javascript:RICH_EDITOR.insertImage('" + path + "')")
243d5a52cc2Sopenharmony_ci            })
244d5a52cc2Sopenharmony_ci          }
245d5a52cc2Sopenharmony_ci        }
246d5a52cc2Sopenharmony_ci      });
247d5a52cc2Sopenharmony_ci    },
248d5a52cc2Sopenharmony_ci    getBreakPoint: () => {
249d5a52cc2Sopenharmony_ci      return AppStorage.Get('breakPoint');
250d5a52cc2Sopenharmony_ci    }
251d5a52cc2Sopenharmony_ci  }
252d5a52cc2Sopenharmony_ci
253d5a52cc2Sopenharmony_ci  build() {
254d5a52cc2Sopenharmony_ci    Column() {
255d5a52cc2Sopenharmony_ci      Flex({ direction: FlexDirection.Column, wrap: FlexWrap.NoWrap,
256d5a52cc2Sopenharmony_ci        alignItems: ItemAlign.Start, alignContent: FlexAlign.SpaceAround }) {
257d5a52cc2Sopenharmony_ci        Column() {
258d5a52cc2Sopenharmony_ci          ToolBarComp({ controllerShow: this.controllerShow })
259d5a52cc2Sopenharmony_ci          NoteContentOverViewComp()
260d5a52cc2Sopenharmony_ci            .enabled(this.selectedNoteData && this.selectedNoteData?.is_deleted == Delete.Yes ? false : true)
261d5a52cc2Sopenharmony_ci        }
262d5a52cc2Sopenharmony_ci
263d5a52cc2Sopenharmony_ci        Column() {
264d5a52cc2Sopenharmony_ci          Web({ src: $rawfile('editor.html'), controller: this.controllerShow })
265d5a52cc2Sopenharmony_ci            .overviewModeAccess(false)
266d5a52cc2Sopenharmony_ci            .javaScriptAccess(true)
267d5a52cc2Sopenharmony_ci            .javaScriptProxy({
268d5a52cc2Sopenharmony_ci              object: this.noteContent,
269d5a52cc2Sopenharmony_ci              name: "callBackToApp", // html-->  name.method
270d5a52cc2Sopenharmony_ci              methodList: ["callbackhtml", "callbackScheduledSave", "callbackPasteImage", "callbackImagePath", "addToDo", "chooseStyle", "openAlbum", "callbackGetSize", "getBreakPoint"],
271d5a52cc2Sopenharmony_ci              controller: this.controllerShow
272d5a52cc2Sopenharmony_ci            })
273d5a52cc2Sopenharmony_ci            .onPageEnd((e) => {
274d5a52cc2Sopenharmony_ci              try {
275d5a52cc2Sopenharmony_ci                if (this.dpi <= 240) {
276d5a52cc2Sopenharmony_ci                  this.controllerShow.runJavaScript("changeSizeToRk()")
277d5a52cc2Sopenharmony_ci                } else if (this.dpi <= 320 && this.dpi > 240) {
278d5a52cc2Sopenharmony_ci                  this.controllerShow.runJavaScript("changeSizeToPhone()")
279d5a52cc2Sopenharmony_ci                } else {
280d5a52cc2Sopenharmony_ci                  this.controllerShow.runJavaScript("changeSizeToTablet()")
281d5a52cc2Sopenharmony_ci                }
282d5a52cc2Sopenharmony_ci                LogUtil.info(TAG, "finish loadurl")
283d5a52cc2Sopenharmony_ci                let self = this
284d5a52cc2Sopenharmony_ci                this.controllerShow.runJavaScript(
285d5a52cc2Sopenharmony_ci                  "RICH_EDITOR.setHtml('" + this.selectedNoteData?.content_text + "')",
286d5a52cc2Sopenharmony_ci                  () => {
287d5a52cc2Sopenharmony_ci                    // wait for the image in the note to load
288d5a52cc2Sopenharmony_ci                    setTimeout(function () {
289d5a52cc2Sopenharmony_ci                      self.restoreScrollTop()
290d5a52cc2Sopenharmony_ci                      self.restoreFocus()
291d5a52cc2Sopenharmony_ci                    }, 100)
292d5a52cc2Sopenharmony_ci                  }
293d5a52cc2Sopenharmony_ci                )
294d5a52cc2Sopenharmony_ci              } catch (error) {
295d5a52cc2Sopenharmony_ci                LogUtil.info(TAG, 'onPageEnd error')
296d5a52cc2Sopenharmony_ci              }
297d5a52cc2Sopenharmony_ci
298d5a52cc2Sopenharmony_ci            })
299d5a52cc2Sopenharmony_ci            .imageAccess(true)
300d5a52cc2Sopenharmony_ci            .onlineImageAccess(true)
301d5a52cc2Sopenharmony_ci            .fileAccess(true)
302d5a52cc2Sopenharmony_ci            .domStorageAccess(true)
303d5a52cc2Sopenharmony_ci            .zoomAccess(false)
304d5a52cc2Sopenharmony_ci            .height('100%')
305d5a52cc2Sopenharmony_ci            .width('100%')
306d5a52cc2Sopenharmony_ci            .onScroll((event) => {
307d5a52cc2Sopenharmony_ci              this.storeScrollTop(event.yOffset)
308d5a52cc2Sopenharmony_ci            })
309d5a52cc2Sopenharmony_ci            .onClick(() => {
310d5a52cc2Sopenharmony_ci              if (time_id) {
311d5a52cc2Sopenharmony_ci                clearInterval(time_id)
312d5a52cc2Sopenharmony_ci              }
313d5a52cc2Sopenharmony_ci              // 添加定时器:3s自动保存
314d5a52cc2Sopenharmony_ci              time_id = setInterval(() => {
315d5a52cc2Sopenharmony_ci                try {
316d5a52cc2Sopenharmony_ci                  if (!this.isClickBack) {
317d5a52cc2Sopenharmony_ci                    this.controllerShow.runJavaScript("scheduledSaveContent()")
318d5a52cc2Sopenharmony_ci                  }
319d5a52cc2Sopenharmony_ci                } catch (error) {
320d5a52cc2Sopenharmony_ci                  LogUtil.info(TAG, 'setInterval error')
321d5a52cc2Sopenharmony_ci                }
322d5a52cc2Sopenharmony_ci              }, 3000)
323d5a52cc2Sopenharmony_ci              LogUtil.info(TAG, "setInterval time_id : " + time_id)
324d5a52cc2Sopenharmony_ci              this.editModel = true
325d5a52cc2Sopenharmony_ci            })
326d5a52cc2Sopenharmony_ci        }
327d5a52cc2Sopenharmony_ci        .height('100%')
328d5a52cc2Sopenharmony_ci        .enabled(this.selectedNoteData && this.selectedNoteData?.is_deleted == Delete.Yes ? false : true)
329d5a52cc2Sopenharmony_ci        .flexShrink(1)
330d5a52cc2Sopenharmony_ci        .margin({ top: 16 })
331d5a52cc2Sopenharmony_ci        .width(StyleConstants.PERCENTAGE_100)
332d5a52cc2Sopenharmony_ci      }
333d5a52cc2Sopenharmony_ci      .flexShrink(1)
334d5a52cc2Sopenharmony_ci      .padding({ left: 24, right: 24 })
335d5a52cc2Sopenharmony_ci
336d5a52cc2Sopenharmony_ci      DeleteNoteComp()
337d5a52cc2Sopenharmony_ci    }
338d5a52cc2Sopenharmony_ci    .expandSafeArea([SafeAreaType.KEYBOARD, SafeAreaType.SYSTEM])
339d5a52cc2Sopenharmony_ci    .height(StyleConstants.PERCENTAGE_100)
340d5a52cc2Sopenharmony_ci    .width(StyleConstants.PERCENTAGE_100)
341d5a52cc2Sopenharmony_ci  }
342d5a52cc2Sopenharmony_ci
343d5a52cc2Sopenharmony_ci  aboutToAppear(): void {
344d5a52cc2Sopenharmony_ci    this.isClickBack = false
345d5a52cc2Sopenharmony_ci    LogUtil.info(TAG, "aboutToAppear")
346d5a52cc2Sopenharmony_ci  }
347d5a52cc2Sopenharmony_ci
348d5a52cc2Sopenharmony_ci  aboutToDisappear(): void {
349d5a52cc2Sopenharmony_ci    this.isClickBack = true
350d5a52cc2Sopenharmony_ci    clearInterval(time_id)
351d5a52cc2Sopenharmony_ci    NoteUtil.refreshAll()
352d5a52cc2Sopenharmony_ci    LogUtil.info(TAG, "aboutToDisappear")
353d5a52cc2Sopenharmony_ci    this.editContentDialogCtl = null
354d5a52cc2Sopenharmony_ci  }
355d5a52cc2Sopenharmony_ci}
356d5a52cc2Sopenharmony_ci
357d5a52cc2Sopenharmony_ci@Component
358d5a52cc2Sopenharmony_ciexport struct NoteContentOverViewComp {
359d5a52cc2Sopenharmony_ci  @Consume('SelectedNoteData') selectedNoteData: NoteData
360d5a52cc2Sopenharmony_ci  @StorageLink('AllFolderArray') AllFolderArray: FolderData[] = []
361d5a52cc2Sopenharmony_ci  @StorageLink('CheckedNoteArray') CheckedNoteArray: NoteData[] = []
362d5a52cc2Sopenharmony_ci  @StorageLink('isUpdate') isUpdate: boolean = false
363d5a52cc2Sopenharmony_ci  NoteDataMoveArray: FolderData[]
364d5a52cc2Sopenharmony_ci  editTitleDialogCtl: CustomDialogController = new CustomDialogController({
365d5a52cc2Sopenharmony_ci    builder: EditTitleDialog({ confirm: this.confirm.bind(this) }),
366d5a52cc2Sopenharmony_ci    alignment: DialogAlignment.Center,
367d5a52cc2Sopenharmony_ci    autoCancel: false,
368d5a52cc2Sopenharmony_ci    customStyle: true,
369d5a52cc2Sopenharmony_ci  })
370d5a52cc2Sopenharmony_ci
371d5a52cc2Sopenharmony_ci  aboutToAppear() {
372d5a52cc2Sopenharmony_ci    this.NoteDataMoveArray = this.AllFolderArray.slice(2, this.AllFolderArray.length);
373d5a52cc2Sopenharmony_ci    if (this.AllFolderArray[1] === undefined || this.AllFolderArray[1] === null) {
374d5a52cc2Sopenharmony_ci      LogUtil.info(TAG, "this AllFolderArray[1] undefined")
375d5a52cc2Sopenharmony_ci      return
376d5a52cc2Sopenharmony_ci    }
377d5a52cc2Sopenharmony_ci    this.NoteDataMoveArray.push(this.AllFolderArray[1]);
378d5a52cc2Sopenharmony_ci  }
379d5a52cc2Sopenharmony_ci
380d5a52cc2Sopenharmony_ci  aboutToDisappear() {
381d5a52cc2Sopenharmony_ci    this.editTitleDialogCtl = null
382d5a52cc2Sopenharmony_ci  }
383d5a52cc2Sopenharmony_ci
384d5a52cc2Sopenharmony_ci  confirm(newTitle: string) {
385d5a52cc2Sopenharmony_ci    this.selectedNoteData.title = newTitle
386d5a52cc2Sopenharmony_ci    this.selectedNoteData.modified_time = new Date().getTime()
387d5a52cc2Sopenharmony_ci    let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
388d5a52cc2Sopenharmony_ci    predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
389d5a52cc2Sopenharmony_ci    RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null)
390d5a52cc2Sopenharmony_ci    // save continue data
391d5a52cc2Sopenharmony_ci    let continueNote: string = JSON.stringify(this.selectedNoteData?.toNoteObject())
392d5a52cc2Sopenharmony_ci    AppStorage.SetOrCreate<string>('ContinueNote', continueNote)
393d5a52cc2Sopenharmony_ci    LogUtil.info(TAG, 'NoteContentOverViewComp, MenuBuilder, set continue note success')
394d5a52cc2Sopenharmony_ci    NoteUtil.refreshAll()
395d5a52cc2Sopenharmony_ci  }
396d5a52cc2Sopenharmony_ci
397d5a52cc2Sopenharmony_ci  @Builder
398d5a52cc2Sopenharmony_ci  MenuBuilder() {
399d5a52cc2Sopenharmony_ci    Column() {
400d5a52cc2Sopenharmony_ci      Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
401d5a52cc2Sopenharmony_ci        List() {
402d5a52cc2Sopenharmony_ci          if (this.NoteDataMoveArray !== undefined && this.NoteDataMoveArray !== null && this.NoteDataMoveArray !== []) {
403d5a52cc2Sopenharmony_ci            ForEach(this.NoteDataMoveArray, (item) => {
404d5a52cc2Sopenharmony_ci              ListItem() {
405d5a52cc2Sopenharmony_ci                NoteDataMoveItemCompMenu({ folderItem: item, uuid: this.selectedNoteData?.folder_uuid })
406d5a52cc2Sopenharmony_ci              }
407d5a52cc2Sopenharmony_ci              .onClick(() => {
408d5a52cc2Sopenharmony_ci                this.selectedNoteData.folder_uuid = item.uuid
409d5a52cc2Sopenharmony_ci                let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
410d5a52cc2Sopenharmony_ci                predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
411d5a52cc2Sopenharmony_ci                RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null)
412d5a52cc2Sopenharmony_ci                // save continue data
413d5a52cc2Sopenharmony_ci                let continueNote: string = JSON.stringify(this.selectedNoteData?.toNoteObject())
414d5a52cc2Sopenharmony_ci                AppStorage.SetOrCreate<string>('ContinueNote', continueNote)
415d5a52cc2Sopenharmony_ci                LogUtil.info(TAG, 'MenuBuilder, set continue note success')
416d5a52cc2Sopenharmony_ci                NoteUtil.refreshAll()
417d5a52cc2Sopenharmony_ci              })
418d5a52cc2Sopenharmony_ci            }, noteItem => noteItem?.uuid)
419d5a52cc2Sopenharmony_ci          }
420d5a52cc2Sopenharmony_ci        }
421d5a52cc2Sopenharmony_ci        .margin({ top: 4, bottom: 4 })
422d5a52cc2Sopenharmony_ci        .listDirection(Axis.Vertical)
423d5a52cc2Sopenharmony_ci        .edgeEffect(EdgeEffect.Spring)
424d5a52cc2Sopenharmony_ci        .height(this.AllFolderArray.length > 12 ? 504 : (this.AllFolderArray.length - 3) * 56)
425d5a52cc2Sopenharmony_ci      }
426d5a52cc2Sopenharmony_ci      .backgroundColor($r('app.color.folder_color_ffffff'))
427d5a52cc2Sopenharmony_ci      .width(148)
428d5a52cc2Sopenharmony_ci      .padding({ left: 24, right: 24 })
429d5a52cc2Sopenharmony_ci    }
430d5a52cc2Sopenharmony_ci  }
431d5a52cc2Sopenharmony_ci
432d5a52cc2Sopenharmony_ci  build() {
433d5a52cc2Sopenharmony_ci    if (this.selectedNoteData) {
434d5a52cc2Sopenharmony_ci      Flex({ direction: FlexDirection.Column, wrap: FlexWrap.NoWrap,
435d5a52cc2Sopenharmony_ci        justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {
436d5a52cc2Sopenharmony_ci        Row() {
437d5a52cc2Sopenharmony_ci          Text(this.selectedNoteData?.title)
438d5a52cc2Sopenharmony_ci            .id(this.isUpdate + '')
439d5a52cc2Sopenharmony_ci            .fontSize(30).fontWeight(FontWeight.Medium)
440d5a52cc2Sopenharmony_ci            .onClick(() => {
441d5a52cc2Sopenharmony_ci              clearInterval(time_id)
442d5a52cc2Sopenharmony_ci              this.editTitleDialogCtl.open()
443d5a52cc2Sopenharmony_ci            })
444d5a52cc2Sopenharmony_ci        }.height(40)
445d5a52cc2Sopenharmony_ci        .width(StyleConstants.PERCENTAGE_100)
446d5a52cc2Sopenharmony_ci
447d5a52cc2Sopenharmony_ci        Row() {
448d5a52cc2Sopenharmony_ci          Text(DateUtil.formateDateForNoteContent(new Date(this.selectedNoteData?.modified_time)))
449d5a52cc2Sopenharmony_ci            .id(this.isUpdate + '')
450d5a52cc2Sopenharmony_ci            .fontSize(12)
451d5a52cc2Sopenharmony_ci            .padding({ top: 4, bottom: 4 })
452d5a52cc2Sopenharmony_ci            .fontColor($r("app.color.modified_time_font_color"))
453d5a52cc2Sopenharmony_ci          Row() {
454d5a52cc2Sopenharmony_ci            Text(FolderUtil.getFolderText(FolderUtil.getFolderData(AppStorage.Get('AllFolderArray'), this.selectedNoteData?.folder_uuid)) ==
455d5a52cc2Sopenharmony_ci            folderTextMap["sys_def_myFavorites_uuid"] ? folderTextMap["sys_def_unClassified_uuid"] :
456d5a52cc2Sopenharmony_ci            FolderUtil.getFolderText(FolderUtil.getFolderData(AppStorage.Get('AllFolderArray'), this.selectedNoteData?.folder_uuid)))
457d5a52cc2Sopenharmony_ci              .id(this.isUpdate + '')
458d5a52cc2Sopenharmony_ci              .fontColor($r('app.color.folder_color_99182431'))
459d5a52cc2Sopenharmony_ci              .fontSize(12)
460d5a52cc2Sopenharmony_ci            Image($r('app.media.triangle'))
461d5a52cc2Sopenharmony_ci              .width(6)
462d5a52cc2Sopenharmony_ci              .height(12)
463d5a52cc2Sopenharmony_ci              .margin({ left: 4 })
464d5a52cc2Sopenharmony_ci          }
465d5a52cc2Sopenharmony_ci          .id(this.isUpdate + '')
466d5a52cc2Sopenharmony_ci          .padding({ left: 8, right: 8, top: 4, bottom: 4 })
467d5a52cc2Sopenharmony_ci          .margin({ left: 8 })
468d5a52cc2Sopenharmony_ci          .borderRadius(16)
469d5a52cc2Sopenharmony_ci          .backgroundColor(NoteUtil.getNoteBgColor(AppStorage.Get('AllFolderArray'), this.selectedNoteData?.folder_uuid, SysDefFolderUuid.AllNotes, false))
470d5a52cc2Sopenharmony_ci          .bindMenu(this.MenuBuilder)
471d5a52cc2Sopenharmony_ci        }.alignItems(VerticalAlign.Top).height(40).width(StyleConstants.PERCENTAGE_100)
472d5a52cc2Sopenharmony_ci      }
473d5a52cc2Sopenharmony_ci      .opacity(this.selectedNoteData?.is_deleted == Delete.Yes ? 0.4 : 1)
474d5a52cc2Sopenharmony_ci      .width(StyleConstants.PERCENTAGE_100)
475d5a52cc2Sopenharmony_ci      .height(82)
476d5a52cc2Sopenharmony_ci    }
477d5a52cc2Sopenharmony_ci  }
478d5a52cc2Sopenharmony_ci}
479d5a52cc2Sopenharmony_ci
480d5a52cc2Sopenharmony_ci@Component
481d5a52cc2Sopenharmony_ciexport struct ToolBarComp {
482d5a52cc2Sopenharmony_ci  @Consume('SelectedNoteData') selectedNoteData: NoteData
483d5a52cc2Sopenharmony_ci  @Consume('SelectedFolderData') selectedFolderData: FolderData
484d5a52cc2Sopenharmony_ci  @Consume('EditModel') editModel: boolean
485d5a52cc2Sopenharmony_ci  @StorageLink('AllNoteArray') AllNoteArray: NoteData[] = AppStorage.Link('AllNoteArray')
486d5a52cc2Sopenharmony_ci  controllerShow: WebviewController
487d5a52cc2Sopenharmony_ci
488d5a52cc2Sopenharmony_ci  onDeleteConfirm() {
489d5a52cc2Sopenharmony_ci    if (this.selectedFolderData.uuid != SysDefFolderUuid.RecentDeletes) {
490d5a52cc2Sopenharmony_ci      this.selectedNoteData.is_deleted = Delete.Yes
491d5a52cc2Sopenharmony_ci      this.selectedNoteData.deleted_time = new Date().getTime()
492d5a52cc2Sopenharmony_ci      // update note to db
493d5a52cc2Sopenharmony_ci      let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
494d5a52cc2Sopenharmony_ci      predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
495d5a52cc2Sopenharmony_ci      RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null)
496d5a52cc2Sopenharmony_ci      routePage()
497d5a52cc2Sopenharmony_ci    } else {
498d5a52cc2Sopenharmony_ci      NoteUtil.removeNoteData(this.AllNoteArray, this.selectedNoteData?.uuid)
499d5a52cc2Sopenharmony_ci      // delete note from db
500d5a52cc2Sopenharmony_ci      let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
501d5a52cc2Sopenharmony_ci      predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
502d5a52cc2Sopenharmony_ci      RdbStoreUtil.delete(predicates_note, null)
503d5a52cc2Sopenharmony_ci      routePage()
504d5a52cc2Sopenharmony_ci    }
505d5a52cc2Sopenharmony_ci    AppStorage.SetOrCreate('isUpdate', true)
506d5a52cc2Sopenharmony_ci  }
507d5a52cc2Sopenharmony_ci
508d5a52cc2Sopenharmony_ci  noteDataDeleteDialogCtl: CustomDialogController = new CustomDialogController({
509d5a52cc2Sopenharmony_ci    builder: DeleteDialog({ onConfirm: this.onDeleteConfirm.bind(this), multiSelect: true }),
510d5a52cc2Sopenharmony_ci    alignment: DialogAlignment.Bottom,
511d5a52cc2Sopenharmony_ci    autoCancel: false,
512d5a52cc2Sopenharmony_ci    customStyle: true,
513d5a52cc2Sopenharmony_ci  })
514d5a52cc2Sopenharmony_ci
515d5a52cc2Sopenharmony_ci  aboutToDisappear() {
516d5a52cc2Sopenharmony_ci    this.noteDataDeleteDialogCtl = null
517d5a52cc2Sopenharmony_ci  }
518d5a52cc2Sopenharmony_ci
519d5a52cc2Sopenharmony_ci  build() {
520d5a52cc2Sopenharmony_ci    Flex({ direction: FlexDirection.Row, wrap: FlexWrap.NoWrap,
521d5a52cc2Sopenharmony_ci      justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Center }) {
522d5a52cc2Sopenharmony_ci
523d5a52cc2Sopenharmony_ci      Image($r('app.media.back'))
524d5a52cc2Sopenharmony_ci        .height(24)
525d5a52cc2Sopenharmony_ci        .width(24)
526d5a52cc2Sopenharmony_ci        .responseRegion({ width: 54, height: 54 })
527d5a52cc2Sopenharmony_ci        .onClick(() => {
528d5a52cc2Sopenharmony_ci          try {
529d5a52cc2Sopenharmony_ci            this.controllerShow.runJavaScript("getHtmlContent()")
530d5a52cc2Sopenharmony_ci            // 清除定时器
531d5a52cc2Sopenharmony_ci            if (time_id != undefined) {
532d5a52cc2Sopenharmony_ci              LogUtil.info(TAG, "back, clearInterval time_id : " + time_id)
533d5a52cc2Sopenharmony_ci              clearInterval(time_id)
534d5a52cc2Sopenharmony_ci            }
535d5a52cc2Sopenharmony_ci            setTimeout(() => {
536d5a52cc2Sopenharmony_ci              LogUtil.info(TAG, "wait save cotext")
537d5a52cc2Sopenharmony_ci              router.back()
538d5a52cc2Sopenharmony_ci            }, 50)
539d5a52cc2Sopenharmony_ci            NoteUtil.refreshAll()
540d5a52cc2Sopenharmony_ci          } catch (error) {
541d5a52cc2Sopenharmony_ci            LogUtil.info(TAG, 'back error')
542d5a52cc2Sopenharmony_ci          }
543d5a52cc2Sopenharmony_ci        })
544d5a52cc2Sopenharmony_ci
545d5a52cc2Sopenharmony_ci      if (this.editModel == false) {
546d5a52cc2Sopenharmony_ci        Row({ space: StyleConstants.SPACE_24 }) {
547d5a52cc2Sopenharmony_ci          Image(this.selectedNoteData?.is_favorite == Favorite.Yes ? $r('app.media.favorite') : $r('app.media.favorite_cancel'))
548d5a52cc2Sopenharmony_ci            .height(24).width(24)
549d5a52cc2Sopenharmony_ci            .onClick(() => {
550d5a52cc2Sopenharmony_ci              try {
551d5a52cc2Sopenharmony_ci                this.selectedNoteData.is_favorite = (this.selectedNoteData?.is_favorite == Favorite.Yes ? Favorite.No : Favorite.Yes)
552d5a52cc2Sopenharmony_ci                // update note to db
553d5a52cc2Sopenharmony_ci                let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
554d5a52cc2Sopenharmony_ci                predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
555d5a52cc2Sopenharmony_ci                RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null)
556d5a52cc2Sopenharmony_ci                if (this.selectedFolderData?.uuid === SysDefFolderUuid.MyFavorites) {
557d5a52cc2Sopenharmony_ci                  this.selectedNoteData = NoteUtil.getFirstNoteData(AppStorage.Get('AllNoteArray'), SysDefFolderUuid.MyFavorites)
558d5a52cc2Sopenharmony_ci                  if (!this.selectedNoteData) {
559d5a52cc2Sopenharmony_ci                    routePage()
560d5a52cc2Sopenharmony_ci                  }
561d5a52cc2Sopenharmony_ci                  this.controllerShow.runJavaScript(
562d5a52cc2Sopenharmony_ci                    "RICH_EDITOR.setHtml('" + this.selectedNoteData.content_text + "')"
563d5a52cc2Sopenharmony_ci                  )
564d5a52cc2Sopenharmony_ci                  // save continue data
565d5a52cc2Sopenharmony_ci                  let continueNote: string = JSON.stringify(this.selectedNoteData.toNoteObject())
566d5a52cc2Sopenharmony_ci                  AppStorage.SetOrCreate<string>('ContinueNote', continueNote)
567d5a52cc2Sopenharmony_ci                  LogUtil.info(TAG, "ToolBarComp, set continue note success")
568d5a52cc2Sopenharmony_ci                }
569d5a52cc2Sopenharmony_ci                NoteUtil.refreshAll()
570d5a52cc2Sopenharmony_ci              } catch (error) {
571d5a52cc2Sopenharmony_ci                LogUtil.info(TAG, 'favorite error')
572d5a52cc2Sopenharmony_ci              }
573d5a52cc2Sopenharmony_ci            })
574d5a52cc2Sopenharmony_ci          Image($r('app.media.delete')).height(24).width(24)
575d5a52cc2Sopenharmony_ci            .onClick(() => {
576d5a52cc2Sopenharmony_ci              this.noteDataDeleteDialogCtl.open()
577d5a52cc2Sopenharmony_ci            })
578d5a52cc2Sopenharmony_ci        }.width(72)
579d5a52cc2Sopenharmony_ci        .visibility(this.selectedNoteData?.is_deleted == Delete.Yes ? Visibility.None : Visibility.Visible)
580d5a52cc2Sopenharmony_ci      } else {
581d5a52cc2Sopenharmony_ci        Row({ space: StyleConstants.SPACE_6 }) {
582d5a52cc2Sopenharmony_ci          Button({ type: ButtonType.Normal, stateEffect: true }) {
583d5a52cc2Sopenharmony_ci            Image($r('app.media.undo')).height(24).width(24)
584d5a52cc2Sopenharmony_ci              .onClick(() => {
585d5a52cc2Sopenharmony_ci                try {
586d5a52cc2Sopenharmony_ci                  // 退出键盘
587d5a52cc2Sopenharmony_ci                  // @ts-ignore
588d5a52cc2Sopenharmony_ci                  inputMethod.getController().stopInputSession();
589d5a52cc2Sopenharmony_ci                  this.controllerShow.runJavaScript("javascript:RICH_EDITOR.undo()")
590d5a52cc2Sopenharmony_ci                } catch (error) {
591d5a52cc2Sopenharmony_ci                  LogUtil.info(TAG, 'undo error')
592d5a52cc2Sopenharmony_ci                }
593d5a52cc2Sopenharmony_ci              })
594d5a52cc2Sopenharmony_ci          }.width(42)
595d5a52cc2Sopenharmony_ci          .height(42)
596d5a52cc2Sopenharmony_ci          .borderRadius(8)
597d5a52cc2Sopenharmony_ci          .backgroundColor($r('app.color.color_fffffB'))
598d5a52cc2Sopenharmony_ci
599d5a52cc2Sopenharmony_ci          Button({ type: ButtonType.Normal, stateEffect: true }) {
600d5a52cc2Sopenharmony_ci            Image($r('app.media.todo')).height(24).width(24)
601d5a52cc2Sopenharmony_ci              .onClick(() => {
602d5a52cc2Sopenharmony_ci                try {
603d5a52cc2Sopenharmony_ci                  // 退出键盘
604d5a52cc2Sopenharmony_ci                  // @ts-ignore
605d5a52cc2Sopenharmony_ci                  inputMethod.getController().stopInputSession();
606d5a52cc2Sopenharmony_ci                  this.controllerShow.runJavaScript("javascript:RICH_EDITOR.redo()")
607d5a52cc2Sopenharmony_ci                } catch (error) {
608d5a52cc2Sopenharmony_ci                  LogUtil.info(TAG, 'todo error')
609d5a52cc2Sopenharmony_ci                }
610d5a52cc2Sopenharmony_ci              })
611d5a52cc2Sopenharmony_ci          }.width(42)
612d5a52cc2Sopenharmony_ci          .height(42)
613d5a52cc2Sopenharmony_ci          .borderRadius(8)
614d5a52cc2Sopenharmony_ci          .backgroundColor($r('app.color.color_fffffB'))
615d5a52cc2Sopenharmony_ci
616d5a52cc2Sopenharmony_ci          Button({ type: ButtonType.Normal, stateEffect: true }) {
617d5a52cc2Sopenharmony_ci            Image($r('app.media.tick_thin')).height(24).width(24)
618d5a52cc2Sopenharmony_ci              .onClick(() => {
619d5a52cc2Sopenharmony_ci                try {
620d5a52cc2Sopenharmony_ci                  // 保存笔记信息到数据库
621d5a52cc2Sopenharmony_ci                  this.controllerShow.runJavaScript("getHtmlContent()")
622d5a52cc2Sopenharmony_ci                  this.editModel = false
623d5a52cc2Sopenharmony_ci                  this.controllerShow.runJavaScript("javascript:RICH_EDITOR.getBlur()")
624d5a52cc2Sopenharmony_ci                } catch (error) {
625d5a52cc2Sopenharmony_ci                  LogUtil.info(TAG, 'tick_thin error')
626d5a52cc2Sopenharmony_ci                }
627d5a52cc2Sopenharmony_ci              })
628d5a52cc2Sopenharmony_ci          }.width(42)
629d5a52cc2Sopenharmony_ci          .height(42)
630d5a52cc2Sopenharmony_ci          .borderRadius(8)
631d5a52cc2Sopenharmony_ci          .backgroundColor($r('app.color.color_fffffB'))
632d5a52cc2Sopenharmony_ci        }
633d5a52cc2Sopenharmony_ci        .width(130)
634d5a52cc2Sopenharmony_ci        .visibility(this.selectedNoteData?.is_deleted == Delete.Yes ? Visibility.None : Visibility.Visible)
635d5a52cc2Sopenharmony_ci      }
636d5a52cc2Sopenharmony_ci    }
637d5a52cc2Sopenharmony_ci    .width(StyleConstants.PERCENTAGE_100)
638d5a52cc2Sopenharmony_ci    .height(40)
639d5a52cc2Sopenharmony_ci  }
640d5a52cc2Sopenharmony_ci}
641d5a52cc2Sopenharmony_ci
642d5a52cc2Sopenharmony_ci@Component
643d5a52cc2Sopenharmony_ciexport struct DeleteNoteComp {
644d5a52cc2Sopenharmony_ci  @StorageLink('CheckedNoteArray') CheckedNoteArray: NoteData[] = []
645d5a52cc2Sopenharmony_ci  @StorageLink('AllNoteArray') AllNoteArray: NoteData[] = AppStorage.Link('AllNoteArray')
646d5a52cc2Sopenharmony_ci  @Consume('SelectedFolderData') selectedFolderData: FolderData
647d5a52cc2Sopenharmony_ci  @Consume('RefreshFlag') refreshFlag: number
648d5a52cc2Sopenharmony_ci  @Consume('SelectedNoteData') selectedNoteData: NoteData;
649d5a52cc2Sopenharmony_ci  noteDataDeleteDialogCtlBottom: CustomDialogController = new CustomDialogController({
650d5a52cc2Sopenharmony_ci    builder: DeleteDialog({ onConfirm: this.onDeleteConfirm.bind(this), multiSelect: true }),
651d5a52cc2Sopenharmony_ci    alignment: DialogAlignment.Bottom,
652d5a52cc2Sopenharmony_ci    autoCancel: false,
653d5a52cc2Sopenharmony_ci    customStyle: true,
654d5a52cc2Sopenharmony_ci  })
655d5a52cc2Sopenharmony_ci
656d5a52cc2Sopenharmony_ci  aboutToDisappear() {
657d5a52cc2Sopenharmony_ci    this.noteDataDeleteDialogCtlBottom = null
658d5a52cc2Sopenharmony_ci  }
659d5a52cc2Sopenharmony_ci
660d5a52cc2Sopenharmony_ci  onDeleteConfirm() {
661d5a52cc2Sopenharmony_ci    if (this.selectedFolderData.uuid != SysDefFolderUuid.RecentDeletes) {
662d5a52cc2Sopenharmony_ci      this.selectedNoteData.is_deleted = Delete.Yes
663d5a52cc2Sopenharmony_ci      this.selectedNoteData.deleted_time = new Date().getTime()
664d5a52cc2Sopenharmony_ci      // update note to db
665d5a52cc2Sopenharmony_ci      let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
666d5a52cc2Sopenharmony_ci      predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
667d5a52cc2Sopenharmony_ci      RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null)
668d5a52cc2Sopenharmony_ci      routePage()
669d5a52cc2Sopenharmony_ci    } else {
670d5a52cc2Sopenharmony_ci      NoteUtil.removeNoteData(this.AllNoteArray, this.selectedNoteData?.uuid)
671d5a52cc2Sopenharmony_ci      // delete note from db
672d5a52cc2Sopenharmony_ci      let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
673d5a52cc2Sopenharmony_ci      predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
674d5a52cc2Sopenharmony_ci      RdbStoreUtil.delete(predicates_note, null)
675d5a52cc2Sopenharmony_ci      NoteUtil.refreshAll()
676d5a52cc2Sopenharmony_ci      routePage()
677d5a52cc2Sopenharmony_ci    }
678d5a52cc2Sopenharmony_ci    AppStorage.SetOrCreate('isUpdate', false)
679d5a52cc2Sopenharmony_ci  }
680d5a52cc2Sopenharmony_ci
681d5a52cc2Sopenharmony_ci  build() {
682d5a52cc2Sopenharmony_ci    Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap, justifyContent: FlexAlign.SpaceBetween }) {
683d5a52cc2Sopenharmony_ci      Column() {
684d5a52cc2Sopenharmony_ci        Image($r('app.media.delete'))
685d5a52cc2Sopenharmony_ci          .width(24)
686d5a52cc2Sopenharmony_ci          .height(24)
687d5a52cc2Sopenharmony_ci          .responseRegion({ x: -15.0, y: -15.0, width: 54, height: 54 })
688d5a52cc2Sopenharmony_ci          .onClick(() => {
689d5a52cc2Sopenharmony_ci            this.noteDataDeleteDialogCtlBottom.open()
690d5a52cc2Sopenharmony_ci          })
691d5a52cc2Sopenharmony_ci        Text($r("app.string.delete"))
692d5a52cc2Sopenharmony_ci          .fontSize(10)
693d5a52cc2Sopenharmony_ci          .fontColor($r('app.color.delete_font_color'))
694d5a52cc2Sopenharmony_ci          .padding({ top: 5 })
695d5a52cc2Sopenharmony_ci      }
696d5a52cc2Sopenharmony_ci      .height("100%")
697d5a52cc2Sopenharmony_ci      .width(180)
698d5a52cc2Sopenharmony_ci      .justifyContent(FlexAlign.Center)
699d5a52cc2Sopenharmony_ci      .alignItems(HorizontalAlign.Center)
700d5a52cc2Sopenharmony_ci
701d5a52cc2Sopenharmony_ci      Column() {
702d5a52cc2Sopenharmony_ci        Image($r('app.media.recover'))
703d5a52cc2Sopenharmony_ci          .width(24)
704d5a52cc2Sopenharmony_ci          .height(24)
705d5a52cc2Sopenharmony_ci          .responseRegion({ x: -15.0, y: -15.0, width: 54, height: 54 })
706d5a52cc2Sopenharmony_ci          .onClick(() => {
707d5a52cc2Sopenharmony_ci            this.selectedNoteData.is_deleted = Delete.No
708d5a52cc2Sopenharmony_ci            this.selectedNoteData.deleted_time = 0
709d5a52cc2Sopenharmony_ci            let context: any = getContext(this)
710d5a52cc2Sopenharmony_ci            let resource = {
711d5a52cc2Sopenharmony_ci              bundleName: "com.ohos.note",
712d5a52cc2Sopenharmony_ci              moduleName: "default",
713d5a52cc2Sopenharmony_ci              id: $r('app.string.restore').id
714d5a52cc2Sopenharmony_ci            };
715d5a52cc2Sopenharmony_ci            context.resourceManager.getString(resource, (error, value) => {
716d5a52cc2Sopenharmony_ci              if (error != null) {
717d5a52cc2Sopenharmony_ci                LogUtil.error(TAG, "error is " + error);
718d5a52cc2Sopenharmony_ci              } else {
719d5a52cc2Sopenharmony_ci                prompt.showToast({ message: value, duration: 2000 });
720d5a52cc2Sopenharmony_ci              }
721d5a52cc2Sopenharmony_ci            });
722d5a52cc2Sopenharmony_ci            this.refreshFlag = (this.refreshFlag == 0 ? 1 : 0)
723d5a52cc2Sopenharmony_ci            // update note to db
724d5a52cc2Sopenharmony_ci            let predicates_note = RdbStoreUtil.getRdbPredicates(TableName.NoteTable)
725d5a52cc2Sopenharmony_ci            predicates_note.equalTo(NoteTableColumn.Uuid, this.selectedNoteData?.uuid)
726d5a52cc2Sopenharmony_ci            RdbStoreUtil.update(this.selectedNoteData?.toNoteObject(), predicates_note, null)
727d5a52cc2Sopenharmony_ci            NoteUtil.refreshAll()
728d5a52cc2Sopenharmony_ci          })
729d5a52cc2Sopenharmony_ci        Text($r("app.string.recover"))
730d5a52cc2Sopenharmony_ci          .fontSize(10)
731d5a52cc2Sopenharmony_ci          .fontColor($r('app.color.recover_font_color'))
732d5a52cc2Sopenharmony_ci          .padding({ top: 5 })
733d5a52cc2Sopenharmony_ci      }
734d5a52cc2Sopenharmony_ci      .height("100%")
735d5a52cc2Sopenharmony_ci      .width(180)
736d5a52cc2Sopenharmony_ci      .justifyContent(FlexAlign.Center)
737d5a52cc2Sopenharmony_ci      .alignItems(HorizontalAlign.Center)
738d5a52cc2Sopenharmony_ci    }
739d5a52cc2Sopenharmony_ci    .width(360)
740d5a52cc2Sopenharmony_ci    .height(56)
741d5a52cc2Sopenharmony_ci    .visibility(this.selectedNoteData?.is_deleted == Delete.Yes ?
742d5a52cc2Sopenharmony_ci    Visibility.Visible : Visibility.None)
743d5a52cc2Sopenharmony_ci  }
744d5a52cc2Sopenharmony_ci}
745d5a52cc2Sopenharmony_ci
746d5a52cc2Sopenharmony_ci@Component
747d5a52cc2Sopenharmony_cistruct NoteDataMoveItemCompMenu {
748d5a52cc2Sopenharmony_ci  @StorageLink('CheckedNoteArray') CheckedNoteArray: NoteData[] = []
749d5a52cc2Sopenharmony_ci  @StorageLink('AllFolderArray') AllFolderArray: FolderData[] = []
750d5a52cc2Sopenharmony_ci  @StorageLink('isUpdate') isUpdate: boolean = false
751d5a52cc2Sopenharmony_ci  folderItem: FolderData
752d5a52cc2Sopenharmony_ci  uuid: String
753d5a52cc2Sopenharmony_ci
754d5a52cc2Sopenharmony_ci  build() {
755d5a52cc2Sopenharmony_ci    Flex({ alignItems: ItemAlign.Center, wrap: FlexWrap.NoWrap, justifyContent: FlexAlign.Center }) {
756d5a52cc2Sopenharmony_ci      Flex({ alignItems: ItemAlign.Center, wrap: FlexWrap.NoWrap }) {
757d5a52cc2Sopenharmony_ci        Image(FolderUtil.getFolderIcon(this.folderItem.uuid))
758d5a52cc2Sopenharmony_ci          .id(this.isUpdate + '')
759d5a52cc2Sopenharmony_ci          .objectFit(ImageFit.Fill)
760d5a52cc2Sopenharmony_ci          .width(24)
761d5a52cc2Sopenharmony_ci          .height(24)
762d5a52cc2Sopenharmony_ci          .flexShrink(0)
763d5a52cc2Sopenharmony_ci          .fillColor(FolderUtil.getFolderIconColor(this.AllFolderArray, this.folderItem.uuid, this.folderItem.uuid == this.uuid))
764d5a52cc2Sopenharmony_ci      }
765d5a52cc2Sopenharmony_ci      .width(24)
766d5a52cc2Sopenharmony_ci
767d5a52cc2Sopenharmony_ci      Column() {
768d5a52cc2Sopenharmony_ci        Flex({ alignItems: ItemAlign.Center, wrap: FlexWrap.NoWrap, justifyContent: FlexAlign.SpaceBetween }) {
769d5a52cc2Sopenharmony_ci          Text(FolderUtil.getFolderText(this.folderItem))
770d5a52cc2Sopenharmony_ci            .id(this.isUpdate + '')
771d5a52cc2Sopenharmony_ci            .fontSize(16)
772d5a52cc2Sopenharmony_ci            .fontColor(FolderUtil.getFolderIconColor(this.AllFolderArray, this.folderItem.uuid == this.uuid ? this.folderItem.uuid : '', this.folderItem.uuid == this.uuid))
773d5a52cc2Sopenharmony_ci            .textAlign(TextAlign.Center)
774d5a52cc2Sopenharmony_ci            .maxLines(1)
775d5a52cc2Sopenharmony_ci            .textOverflow({ overflow: TextOverflow.Ellipsis })
776d5a52cc2Sopenharmony_ci            .flexShrink(1)
777d5a52cc2Sopenharmony_ci        }
778d5a52cc2Sopenharmony_ci        .width('100%')
779d5a52cc2Sopenharmony_ci        .height(55)
780d5a52cc2Sopenharmony_ci
781d5a52cc2Sopenharmony_ci        if (this.folderItem.uuid != SysDefFolderUuid.UnClassified) {
782d5a52cc2Sopenharmony_ci          Divider()
783d5a52cc2Sopenharmony_ci            .color($r("app.color.divider_color_e4e4e4"))
784d5a52cc2Sopenharmony_ci            .strokeWidth(1)
785d5a52cc2Sopenharmony_ci        }
786d5a52cc2Sopenharmony_ci
787d5a52cc2Sopenharmony_ci      }
788d5a52cc2Sopenharmony_ci      .padding({ left: 16 })
789d5a52cc2Sopenharmony_ci    }
790d5a52cc2Sopenharmony_ci    .id(this.isUpdate + '')
791d5a52cc2Sopenharmony_ci    .width('100%')
792d5a52cc2Sopenharmony_ci    .height(56)
793d5a52cc2Sopenharmony_ci    .visibility(FolderUtil.isFolderMoveIn(this.folderItem) ? Visibility.Visible : Visibility.None)
794d5a52cc2Sopenharmony_ci  }
795d5a52cc2Sopenharmony_ci}
796