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 };