1c8a96e64Sopenharmony_ci/* 2c8a96e64Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3c8a96e64Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c8a96e64Sopenharmony_ci * you may not use this file except in compliance with the License. 5c8a96e64Sopenharmony_ci * You may obtain a copy of the License at 6c8a96e64Sopenharmony_ci * 7c8a96e64Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c8a96e64Sopenharmony_ci * 9c8a96e64Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c8a96e64Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c8a96e64Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c8a96e64Sopenharmony_ci * See the License for the specific language governing permissions and 13c8a96e64Sopenharmony_ci * limitations under the License. 14c8a96e64Sopenharmony_ci */ 15c8a96e64Sopenharmony_ci 16c8a96e64Sopenharmony_ciconst navPushPathHelperApi = requireInternal('atomicservice.NavPushPathHelper'); 17c8a96e64Sopenharmony_ciconst hilog = requireNapi('hilog'); 18c8a96e64Sopenharmony_ci 19c8a96e64Sopenharmony_ciconst tag = 'NavPushPathHelper::JS::'; 20c8a96e64Sopenharmony_ci 21c8a96e64Sopenharmony_ciexport class NavPushPathHelper { 22c8a96e64Sopenharmony_ci static currentID = 0; 23c8a96e64Sopenharmony_ci constructor(navPathStack) { 24c8a96e64Sopenharmony_ci this.navPathStack_ = navPathStack; 25c8a96e64Sopenharmony_ci this.currentHelperId_ = NavPushPathHelper.currentID; 26c8a96e64Sopenharmony_ci NavPushPathHelper.currentID++; 27c8a96e64Sopenharmony_ci } 28c8a96e64Sopenharmony_ci 29c8a96e64Sopenharmony_ci async pushPath(moduleName, info, optionParam) { 30c8a96e64Sopenharmony_ci hilog.info(0x3900, tag, `pushPath -> currentID: ${this.currentHelperId_}`); 31c8a96e64Sopenharmony_ci if (navPushPathHelperApi.isHspExist(moduleName, info.name)) { 32c8a96e64Sopenharmony_ci this.navPathStack_?.pushPath(info, optionParam); 33c8a96e64Sopenharmony_ci return; 34c8a96e64Sopenharmony_ci } 35c8a96e64Sopenharmony_ci return new Promise((resolve, reject) => { 36c8a96e64Sopenharmony_ci navPushPathHelperApi.silentInstall(moduleName, () => { 37c8a96e64Sopenharmony_ci navPushPathHelperApi.initRouteMap(); 38c8a96e64Sopenharmony_ci this.navPathStack_?.pushPath(info, optionParam); 39c8a96e64Sopenharmony_ci resolve(); 40c8a96e64Sopenharmony_ci }, 41c8a96e64Sopenharmony_ci (error) => { 42c8a96e64Sopenharmony_ci const err = new Error(error.message); 43c8a96e64Sopenharmony_ci err.code = error.code; 44c8a96e64Sopenharmony_ci reject(err); 45c8a96e64Sopenharmony_ci }); 46c8a96e64Sopenharmony_ci }); 47c8a96e64Sopenharmony_ci } 48c8a96e64Sopenharmony_ci 49c8a96e64Sopenharmony_ci async pushDestination(moduleName, info, optionParam) { 50c8a96e64Sopenharmony_ci hilog.info(0x3900, tag, `pushDestination -> currentID: ${this.currentHelperId_}`); 51c8a96e64Sopenharmony_ci if (navPushPathHelperApi.isHspExist(moduleName, info.name)) { 52c8a96e64Sopenharmony_ci await this.navPathStack_?.pushDestination(info, optionParam); 53c8a96e64Sopenharmony_ci return; 54c8a96e64Sopenharmony_ci } 55c8a96e64Sopenharmony_ci return new Promise((resolve, reject) => { 56c8a96e64Sopenharmony_ci navPushPathHelperApi.silentInstall(moduleName, () => { 57c8a96e64Sopenharmony_ci navPushPathHelperApi.initRouteMap(); 58c8a96e64Sopenharmony_ci this.navPathStack_?.pushDestination(info, optionParam) 59c8a96e64Sopenharmony_ci .then(resolve).catch(reject); 60c8a96e64Sopenharmony_ci }, (error) => { 61c8a96e64Sopenharmony_ci const err = new Error(error.message); 62c8a96e64Sopenharmony_ci err.code = error.code; 63c8a96e64Sopenharmony_ci reject(err); 64c8a96e64Sopenharmony_ci }); 65c8a96e64Sopenharmony_ci }); 66c8a96e64Sopenharmony_ci } 67c8a96e64Sopenharmony_ci 68c8a96e64Sopenharmony_ci async pushPathByName(moduleName, name, param, onPop, optionParam) { 69c8a96e64Sopenharmony_ci hilog.info(0x3900, tag, `pushPathByName -> currentID: ${this.currentHelperId_}`); 70c8a96e64Sopenharmony_ci if (navPushPathHelperApi.isHspExist(moduleName, name)) { 71c8a96e64Sopenharmony_ci this.navPathStack_?.pushPathByName(name, param, onPop, optionParam); 72c8a96e64Sopenharmony_ci return; 73c8a96e64Sopenharmony_ci } 74c8a96e64Sopenharmony_ci return new Promise((resolve, reject) => { 75c8a96e64Sopenharmony_ci navPushPathHelperApi.silentInstall(moduleName, () => { 76c8a96e64Sopenharmony_ci navPushPathHelperApi.initRouteMap(); 77c8a96e64Sopenharmony_ci this.navPathStack_?.pushPathByName(name, param, onPop, optionParam); 78c8a96e64Sopenharmony_ci resolve(); 79c8a96e64Sopenharmony_ci }, (error) => { 80c8a96e64Sopenharmony_ci const err = new Error(error.message); 81c8a96e64Sopenharmony_ci err.code = error.code; 82c8a96e64Sopenharmony_ci reject(err); 83c8a96e64Sopenharmony_ci }); 84c8a96e64Sopenharmony_ci }); 85c8a96e64Sopenharmony_ci } 86c8a96e64Sopenharmony_ci 87c8a96e64Sopenharmony_ci async pushDestinationByName(moduleName, name, param, onPop, optionParam) { 88c8a96e64Sopenharmony_ci hilog.info(0x3900, tag, `pushDestinationByName -> currentID: ${this.currentHelperId_}`); 89c8a96e64Sopenharmony_ci if (navPushPathHelperApi.isHspExist(moduleName, name)) { 90c8a96e64Sopenharmony_ci await this.navPathStack_?.pushDestinationByName(name, param, onPop, optionParam); 91c8a96e64Sopenharmony_ci return; 92c8a96e64Sopenharmony_ci } 93c8a96e64Sopenharmony_ci return new Promise((resolve, reject) => { 94c8a96e64Sopenharmony_ci navPushPathHelperApi.silentInstall(moduleName, () => { 95c8a96e64Sopenharmony_ci navPushPathHelperApi.initRouteMap(); 96c8a96e64Sopenharmony_ci this.navPathStack_?.pushDestinationByName(name, param, onPop, optionParam) 97c8a96e64Sopenharmony_ci .then(resolve).catch(reject); 98c8a96e64Sopenharmony_ci }, (error) => { 99c8a96e64Sopenharmony_ci const err = new Error(error.message); 100c8a96e64Sopenharmony_ci err.code = error.code; 101c8a96e64Sopenharmony_ci reject(err); 102c8a96e64Sopenharmony_ci }); 103c8a96e64Sopenharmony_ci }); 104c8a96e64Sopenharmony_ci } 105c8a96e64Sopenharmony_ci 106c8a96e64Sopenharmony_ci async replacePath(moduleName, info, optionParam) { 107c8a96e64Sopenharmony_ci hilog.info(0x3900, tag, `replacePath -> currentID: ${this.currentHelperId_}`); 108c8a96e64Sopenharmony_ci if (navPushPathHelperApi.isHspExist(moduleName, info.name)) { 109c8a96e64Sopenharmony_ci this.navPathStack_?.replacePath(info, optionParam); 110c8a96e64Sopenharmony_ci return; 111c8a96e64Sopenharmony_ci } 112c8a96e64Sopenharmony_ci return new Promise((resolve, reject) => { 113c8a96e64Sopenharmony_ci navPushPathHelperApi.silentInstall(moduleName, () => { 114c8a96e64Sopenharmony_ci navPushPathHelperApi.initRouteMap(); 115c8a96e64Sopenharmony_ci this.navPathStack_?.replacePath(info, optionParam); 116c8a96e64Sopenharmony_ci resolve(); 117c8a96e64Sopenharmony_ci }, (error) => { 118c8a96e64Sopenharmony_ci const err = new Error(error.message); 119c8a96e64Sopenharmony_ci err.code = error.code; 120c8a96e64Sopenharmony_ci reject(err); 121c8a96e64Sopenharmony_ci }); 122c8a96e64Sopenharmony_ci }); 123c8a96e64Sopenharmony_ci } 124c8a96e64Sopenharmony_ci 125c8a96e64Sopenharmony_ci async replacePathByName(moduleName, name, param, optionParam) { 126c8a96e64Sopenharmony_ci hilog.info(0x3900, tag, `replacePathByName -> currentID: ${this.currentHelperId_}`); 127c8a96e64Sopenharmony_ci if (navPushPathHelperApi.isHspExist(moduleName, name)) { 128c8a96e64Sopenharmony_ci this.navPathStack_?.replacePathByName(name, param, optionParam); 129c8a96e64Sopenharmony_ci return; 130c8a96e64Sopenharmony_ci } 131c8a96e64Sopenharmony_ci return new Promise((resolve, reject) => { 132c8a96e64Sopenharmony_ci navPushPathHelperApi.silentInstall(moduleName, () => { 133c8a96e64Sopenharmony_ci hilog.info(0x3900, tag, `silentInstall success`); 134c8a96e64Sopenharmony_ci navPushPathHelperApi.initRouteMap(); 135c8a96e64Sopenharmony_ci this.navPathStack_?.replacePathByName(name, param, optionParam); 136c8a96e64Sopenharmony_ci resolve(); 137c8a96e64Sopenharmony_ci }, (error) => { 138c8a96e64Sopenharmony_ci const err = new Error(error.message); 139c8a96e64Sopenharmony_ci err.code = error.code; 140c8a96e64Sopenharmony_ci reject(err); 141c8a96e64Sopenharmony_ci }); 142c8a96e64Sopenharmony_ci }); 143c8a96e64Sopenharmony_ci } 144c8a96e64Sopenharmony_ci} 145c8a96e64Sopenharmony_ci 146c8a96e64Sopenharmony_ciexport default { NavPushPathHelper };