/* * Copyright (c) Baidu, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import {Component} from 'san'; import Image from '@cosui/cosmic/image'; import Icon from '@cosui/cosmic/icon'; import Tag from '@cosui/cosmic/tag'; import type {ShopAddressProps, ShopAddressData, ShopAddressEvents} from './interface'; export default class ShopAddress extends Component { static template = ` {{poi.area}} | {{poi.name}} `; static components = { 'cos-image': Image, 'cos-icon': Icon, 'cos-tag': Tag }; static computed = { boxStyle(this: ShopAddress) { const folded = this.data.get('folded'); const maxWidth = this.data.get('maxWidth') || '100%'; if (folded) { return { display: 'inline-block', 'max-width': maxWidth, 'padding-right': maxWidth === '100%' ? '0' : '6px' }; } return { display: 'block', width: '100%' }; } }; initData(): ShopAddressProps { return { thumbnail: '', title: '', distance: '', tags: [], linkInfo: {}, navigationInfo: {}, invokeInfo: {}, poi: undefined, folded: false }; } attached() { this.nextTick(() => { const invokeInfo = this.data.get('invokeInfo'); this.fire('poi-ready', { posName: 'pos_invoke_bdmap_direction', params: invokeInfo?.params, defaultUrl: invokeInfo?.defaultUrl, inited: (invokeCallback: (event: Event) => void) => { // 导航点击覆盖常规处理函数 this.invokeMap = (event: Event) => { this.fire('click', {event, from: 'navigation'}); invokeCallback(event); }; } }); }); } // 调起地图导航 invokeMap(event: Event) { this.fire('click', {event, from: 'navigation'}); }; handleClick(event: Event) { this.fire('click', {event}); } }