1048147e0Sopenharmony_ci/**
2048147e0Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3048147e0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4048147e0Sopenharmony_ci * you may not use this file except in compliance with the License.
5048147e0Sopenharmony_ci * You may obtain a copy of the License at
6048147e0Sopenharmony_ci *
7048147e0Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8048147e0Sopenharmony_ci *
9048147e0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10048147e0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11048147e0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12048147e0Sopenharmony_ci * See the License for the specific language governing permissions and
13048147e0Sopenharmony_ci * limitations under the License.
14048147e0Sopenharmony_ci */
15048147e0Sopenharmony_ci
16048147e0Sopenharmony_ciimport HiLog from '../utils/HiLog';
17048147e0Sopenharmony_ciimport common from '../data/commonData';
18048147e0Sopenharmony_ciimport telephoneUtil from '../utils/TelephoneUtil';
19048147e0Sopenharmony_ciimport LooseObject from '../data/LooseObject'
20048147e0Sopenharmony_ci
21048147e0Sopenharmony_ciconst TAG = 'ContractService';
22048147e0Sopenharmony_ci
23048147e0Sopenharmony_ciexport default {
24048147e0Sopenharmony_ci
25048147e0Sopenharmony_ci    /**
26048147e0Sopenharmony_ci     * Querying the contact list
27048147e0Sopenharmony_ci     *
28048147e0Sopenharmony_ci     * @param actionData
29048147e0Sopenharmony_ci     * @callback callback
30048147e0Sopenharmony_ci     */
31048147e0Sopenharmony_ci    queryContact(actionData, callback) {
32048147e0Sopenharmony_ci        // Obtain rawContractIds and query contacts.
33048147e0Sopenharmony_ci        globalThis.DataWorker.sendRequest('queryContact', {
34048147e0Sopenharmony_ci            actionData: actionData,
35048147e0Sopenharmony_ci            context: globalThis.mmsContext
36048147e0Sopenharmony_ci        }, rawContractIds => {
37048147e0Sopenharmony_ci            let result: LooseObject = {};
38048147e0Sopenharmony_ci            actionData.contractIds = rawContractIds;
39048147e0Sopenharmony_ci            globalThis.DataWorker.sendRequest('queryContactDataByIds', {
40048147e0Sopenharmony_ci                actionData: actionData,
41048147e0Sopenharmony_ci                context: globalThis.mmsContext
42048147e0Sopenharmony_ci            }, contracts => {
43048147e0Sopenharmony_ci                result.code = common.int.SUCCESS;
44048147e0Sopenharmony_ci                this.convertContracts(contracts, messageList => {
45048147e0Sopenharmony_ci                    result.response = messageList;
46048147e0Sopenharmony_ci                    callback(result);
47048147e0Sopenharmony_ci                });
48048147e0Sopenharmony_ci            });
49048147e0Sopenharmony_ci        });
50048147e0Sopenharmony_ci    },
51048147e0Sopenharmony_ci
52048147e0Sopenharmony_ci    /**
53048147e0Sopenharmony_ci     * Counting the number of rows of contacts
54048147e0Sopenharmony_ci     *
55048147e0Sopenharmony_ci     * @param actionData
56048147e0Sopenharmony_ci     * @callback callback
57048147e0Sopenharmony_ci     */
58048147e0Sopenharmony_ci    countContact(actionData, callback) {
59048147e0Sopenharmony_ci        // Obtain rawContractIds and query contacts.
60048147e0Sopenharmony_ci        globalThis.DataWorker.sendRequest('countContact', {
61048147e0Sopenharmony_ci            actionData: actionData,
62048147e0Sopenharmony_ci            context: globalThis.mmsContext
63048147e0Sopenharmony_ci        }, count => {
64048147e0Sopenharmony_ci            let result: LooseObject = {};
65048147e0Sopenharmony_ci            result.code = common.int.SUCCESS;
66048147e0Sopenharmony_ci            result.response = count;
67048147e0Sopenharmony_ci            callback(result);
68048147e0Sopenharmony_ci        });
69048147e0Sopenharmony_ci    },
70048147e0Sopenharmony_ci
71048147e0Sopenharmony_ci    /**
72048147e0Sopenharmony_ci     * Convert contact parameters
73048147e0Sopenharmony_ci     *
74048147e0Sopenharmony_ci     * @param contracts
75048147e0Sopenharmony_ci     * @callback callback
76048147e0Sopenharmony_ci     */
77048147e0Sopenharmony_ci    async convertContracts(contracts, callback) {
78048147e0Sopenharmony_ci        let messageList = [];
79048147e0Sopenharmony_ci        for (let contract of contracts) {
80048147e0Sopenharmony_ci            let item: LooseObject = {};
81048147e0Sopenharmony_ci            item.contactName = contract.displayName;
82048147e0Sopenharmony_ci            item.headImage = 'icon/user_avatar_full_fill.svg';
83048147e0Sopenharmony_ci            item.telephone = contract.detailInfo;
84048147e0Sopenharmony_ci            item.telephoneFormat = contract.detailInfo;
85048147e0Sopenharmony_ci            item.select = false;
86048147e0Sopenharmony_ci            messageList.push(item);
87048147e0Sopenharmony_ci        }
88048147e0Sopenharmony_ci        callback(messageList);
89048147e0Sopenharmony_ci    },
90048147e0Sopenharmony_ci
91048147e0Sopenharmony_ci    /**
92048147e0Sopenharmony_ci     * Process contact parameters
93048147e0Sopenharmony_ci     *
94048147e0Sopenharmony_ci     * @param contactObjects
95048147e0Sopenharmony_ci     */
96048147e0Sopenharmony_ci    dealContractParams(contactObjects): LooseObject {
97048147e0Sopenharmony_ci        let contractParams: LooseObject = {};
98048147e0Sopenharmony_ci        if (contactObjects && contactObjects != common.string.EMPTY_STR) {
99048147e0Sopenharmony_ci            let params: Array<LooseObject> = [];
100048147e0Sopenharmony_ci            try {
101048147e0Sopenharmony_ci                params = JSON.parse(contactObjects);
102048147e0Sopenharmony_ci            } catch (Error) {
103048147e0Sopenharmony_ci                HiLog.i(TAG, `JSON.parse error ${Error}`);
104048147e0Sopenharmony_ci                return contractParams;
105048147e0Sopenharmony_ci            }
106048147e0Sopenharmony_ci            let contactsNumber: string = common.string.EMPTY_STR;
107048147e0Sopenharmony_ci            let contactsName: string = common.string.EMPTY_STR;
108048147e0Sopenharmony_ci            let contactsNumberFormat: string = common.string.EMPTY_STR;
109048147e0Sopenharmony_ci            let length: number = params.length;
110048147e0Sopenharmony_ci            for (let item of params) {
111048147e0Sopenharmony_ci                contactsNumber = contactsNumber + item.telephone + common.string.COMMA;
112048147e0Sopenharmony_ci                contactsNumberFormat = contactsNumberFormat + item.telephone + common.string.COMMA;
113048147e0Sopenharmony_ci                if (item.contactsName) {
114048147e0Sopenharmony_ci                    contactsName += (item.contactsName + common.string.COMMA);
115048147e0Sopenharmony_ci                } else if (length > 1) {
116048147e0Sopenharmony_ci                    contactsName += (item.telephone + common.string.COMMA);
117048147e0Sopenharmony_ci                }
118048147e0Sopenharmony_ci            }
119048147e0Sopenharmony_ci            let telephone: string = contactsNumber.substring(0, contactsNumber.length - 1);
120048147e0Sopenharmony_ci            contactsNumber = telephoneUtil.dealTelephoneSort(telephone);
121048147e0Sopenharmony_ci            contractParams.strContactsNumber = contactsNumber;
122048147e0Sopenharmony_ci            contractParams.strContactsNumberFormat = contactsNumber;
123048147e0Sopenharmony_ci            contractParams.strContactsName = contactsName.substring(0, contactsName.length - 1);
124048147e0Sopenharmony_ci            contractParams.contactsNum = length;
125048147e0Sopenharmony_ci        }
126048147e0Sopenharmony_ci        return contractParams;
127048147e0Sopenharmony_ci    },
128048147e0Sopenharmony_ci
129048147e0Sopenharmony_ci    /**
130048147e0Sopenharmony_ci     * Query a contact by mobile number.
131048147e0Sopenharmony_ci     *
132048147e0Sopenharmony_ci     * @param actionData
133048147e0Sopenharmony_ci     * @callback callback
134048147e0Sopenharmony_ci     */
135048147e0Sopenharmony_ci    queryContactDataByTelephone(actionData, callback) {
136048147e0Sopenharmony_ci        globalThis.DataWorker.sendRequest('queryContactDataByTelephone', {
137048147e0Sopenharmony_ci            actionData: actionData,
138048147e0Sopenharmony_ci            context: globalThis.mmsContext
139048147e0Sopenharmony_ci        }, contracts => {
140048147e0Sopenharmony_ci            callback(contracts);
141048147e0Sopenharmony_ci        });
142048147e0Sopenharmony_ci    },
143048147e0Sopenharmony_ci
144048147e0Sopenharmony_ci    /**
145048147e0Sopenharmony_ci     * Fuzzy search for contacts
146048147e0Sopenharmony_ci     *
147048147e0Sopenharmony_ci     * @param actionData
148048147e0Sopenharmony_ci     * @callback callback
149048147e0Sopenharmony_ci     */
150048147e0Sopenharmony_ci    searchContracts(actionData, callback) {
151048147e0Sopenharmony_ci        let result: LooseObject = {};
152048147e0Sopenharmony_ci        globalThis.DataWorker.sendRequest('searchContracts', {
153048147e0Sopenharmony_ci            actionData: actionData,
154048147e0Sopenharmony_ci            context: globalThis.mmsContext
155048147e0Sopenharmony_ci        }, (res) =>{
156048147e0Sopenharmony_ci            result.code = res.code
157048147e0Sopenharmony_ci            if (res.code == common.int.SUCCESS) {
158048147e0Sopenharmony_ci                result.response = this.dealSearchContracts(res.abilityResult);
159048147e0Sopenharmony_ci                callback(result);
160048147e0Sopenharmony_ci            }
161048147e0Sopenharmony_ci        });
162048147e0Sopenharmony_ci    },
163048147e0Sopenharmony_ci
164048147e0Sopenharmony_ci    dealSearchContracts(contracts) {
165048147e0Sopenharmony_ci        let searchContracts = []
166048147e0Sopenharmony_ci        for (let item of contracts) {
167048147e0Sopenharmony_ci            let searchContract: LooseObject = {};
168048147e0Sopenharmony_ci            searchContract.headImage = 'icon/user_avatar_full_fill.svg';
169048147e0Sopenharmony_ci            searchContract.contactName = item.displayName;
170048147e0Sopenharmony_ci            searchContract.telephone = item.detailInfo;
171048147e0Sopenharmony_ci            searchContract.telephoneFormat = item.detailInfo;
172048147e0Sopenharmony_ci            searchContracts.push(searchContract);
173048147e0Sopenharmony_ci        }
174048147e0Sopenharmony_ci        return searchContracts;
175048147e0Sopenharmony_ci    },
176048147e0Sopenharmony_ci
177048147e0Sopenharmony_ci    /**
178048147e0Sopenharmony_ci     * Check whether a business card exists.
179048147e0Sopenharmony_ci     *
180048147e0Sopenharmony_ci     * @param actionData
181048147e0Sopenharmony_ci     * @callback callback
182048147e0Sopenharmony_ci     */
183048147e0Sopenharmony_ci    judgeIsExitProfile(actionData, callback) {
184048147e0Sopenharmony_ci        globalThis.DataWorker.sendRequest('queryProfile', {
185048147e0Sopenharmony_ci            actionData: actionData,
186048147e0Sopenharmony_ci            context: globalThis.mmsContext
187048147e0Sopenharmony_ci        }, res => {
188048147e0Sopenharmony_ci            let result = false;
189048147e0Sopenharmony_ci            if (res > 0) {
190048147e0Sopenharmony_ci                result = true;
191048147e0Sopenharmony_ci            }
192048147e0Sopenharmony_ci            callback(result);
193048147e0Sopenharmony_ci        });
194048147e0Sopenharmony_ci    }
195048147e0Sopenharmony_ci}