123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- import _extends from "@babel/runtime/helpers/esm/extends";
- // Utils
- import { createNamespace } from '../utils'; // Mixins
- import { popupMixinProps } from '../mixins/popup'; // Components
- import Popup from '../popup';
- var PRESET_ICONS = ['qq', 'link', 'weibo', 'wechat', 'poster', 'qrcode', 'weapp-qrcode', 'wechat-moments'];
- var _createNamespace = createNamespace('share-sheet'),
- createComponent = _createNamespace[0],
- bem = _createNamespace[1],
- t = _createNamespace[2];
- export default createComponent({
- props: _extends({}, popupMixinProps, {
- title: String,
- duration: String,
- cancelText: String,
- description: String,
- getContainer: [String, Function],
- options: {
- type: Array,
- default: function _default() {
- return [];
- }
- },
- overlay: {
- type: Boolean,
- default: true
- },
- closeOnPopstate: {
- type: Boolean,
- default: true
- },
- safeAreaInsetBottom: {
- type: Boolean,
- default: true
- },
- closeOnClickOverlay: {
- type: Boolean,
- default: true
- }
- }),
- methods: {
- onCancel: function onCancel() {
- this.toggle(false);
- this.$emit('cancel');
- },
- onSelect: function onSelect(option, index) {
- this.$emit('select', option, index);
- },
- toggle: function toggle(val) {
- this.$emit('input', val);
- },
- getIconURL: function getIconURL(icon) {
- if (PRESET_ICONS.indexOf(icon) !== -1) {
- return "https://img01.yzcdn.cn/vant/share-sheet-" + icon + ".png";
- }
- return icon;
- },
- genHeader: function genHeader() {
- var h = this.$createElement;
- var title = this.slots('title') || this.title;
- var description = this.slots('description') || this.description;
- if (!title && !description) {
- return;
- }
- return h("div", {
- "class": bem('header')
- }, [title && h("h2", {
- "class": bem('title')
- }, [title]), description && h("span", {
- "class": bem('description')
- }, [description])]);
- },
- genOptions: function genOptions(options, showBorder) {
- var _this = this;
- var h = this.$createElement;
- return h("div", {
- "class": bem('options', {
- border: showBorder
- })
- }, [options.map(function (option, index) {
- return h("div", {
- "attrs": {
- "role": "button",
- "tabindex": "0"
- },
- "class": [bem('option'), option.className],
- "on": {
- "click": function click() {
- _this.onSelect(option, index);
- }
- }
- }, [h("img", {
- "attrs": {
- "src": _this.getIconURL(option.icon)
- },
- "class": bem('icon')
- }), option.name && h("span", {
- "class": bem('name')
- }, [option.name]), option.description && h("span", {
- "class": bem('option-description')
- }, [option.description])]);
- })]);
- },
- genRows: function genRows() {
- var _this2 = this;
- var options = this.options;
- if (Array.isArray(options[0])) {
- return options.map(function (item, index) {
- return _this2.genOptions(item, index !== 0);
- });
- }
- return this.genOptions(options);
- },
- genCancelText: function genCancelText() {
- var _this$cancelText;
- var h = this.$createElement;
- var cancelText = (_this$cancelText = this.cancelText) != null ? _this$cancelText : t('cancel');
- if (cancelText) {
- return h("button", {
- "attrs": {
- "type": "button"
- },
- "class": bem('cancel'),
- "on": {
- "click": this.onCancel
- }
- }, [cancelText]);
- }
- },
- onClickOverlay: function onClickOverlay() {
- this.$emit('click-overlay');
- }
- },
- render: function render() {
- var h = arguments[0];
- return h(Popup, {
- "attrs": {
- "round": true,
- "value": this.value,
- "position": "bottom",
- "overlay": this.overlay,
- "duration": this.duration,
- "lazyRender": this.lazyRender,
- "lockScroll": this.lockScroll,
- "getContainer": this.getContainer,
- "closeOnPopstate": this.closeOnPopstate,
- "closeOnClickOverlay": this.closeOnClickOverlay,
- "safeAreaInsetBottom": this.safeAreaInsetBottom
- },
- "class": bem(),
- "on": {
- "input": this.toggle,
- "click-overlay": this.onClickOverlay
- }
- }, [this.genHeader(), this.genRows(), this.genCancelText()]);
- }
- });
|