AddressList.mjs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { createVNode as _createVNode } from "vue";
  2. import { defineComponent } from "vue";
  3. import { truthProp, numericProp, makeArrayProp, createNamespace } from "../utils/index.mjs";
  4. import { Button } from "../button/index.mjs";
  5. import { RadioGroup } from "../radio-group/index.mjs";
  6. import AddressListItem from "./AddressListItem.mjs";
  7. const [name, bem, t] = createNamespace("address-list");
  8. const addressListProps = {
  9. list: makeArrayProp(),
  10. modelValue: numericProp,
  11. switchable: truthProp,
  12. disabledText: String,
  13. disabledList: makeArrayProp(),
  14. addButtonText: String,
  15. defaultTagText: String
  16. };
  17. var stdin_default = defineComponent({
  18. name,
  19. props: addressListProps,
  20. emits: ["add", "edit", "select", "click-item", "edit-disabled", "select-disabled", "update:modelValue"],
  21. setup(props, {
  22. slots,
  23. emit
  24. }) {
  25. const renderItem = (item, index, disabled) => {
  26. const onEdit = () => emit(disabled ? "edit-disabled" : "edit", item, index);
  27. const onClick = () => emit("click-item", item, index);
  28. const onSelect = () => {
  29. emit(disabled ? "select-disabled" : "select", item, index);
  30. if (!disabled) {
  31. emit("update:modelValue", item.id);
  32. }
  33. };
  34. return _createVNode(AddressListItem, {
  35. "key": item.id,
  36. "address": item,
  37. "disabled": disabled,
  38. "switchable": props.switchable,
  39. "defaultTagText": props.defaultTagText,
  40. "onEdit": onEdit,
  41. "onClick": onClick,
  42. "onSelect": onSelect
  43. }, {
  44. bottom: slots["item-bottom"],
  45. tag: slots.tag
  46. });
  47. };
  48. const renderList = (list, disabled) => {
  49. if (list) {
  50. return list.map((item, index) => renderItem(item, index, disabled));
  51. }
  52. };
  53. const renderBottom = () => _createVNode("div", {
  54. "class": [bem("bottom"), "van-safe-area-bottom"]
  55. }, [_createVNode(Button, {
  56. "round": true,
  57. "block": true,
  58. "type": "danger",
  59. "text": props.addButtonText || t("add"),
  60. "class": bem("add"),
  61. "onClick": () => emit("add")
  62. }, null)]);
  63. return () => {
  64. var _a, _b;
  65. const List = renderList(props.list);
  66. const DisabledList = renderList(props.disabledList, true);
  67. const DisabledText = props.disabledText && _createVNode("div", {
  68. "class": bem("disabled-text")
  69. }, [props.disabledText]);
  70. return _createVNode("div", {
  71. "class": bem()
  72. }, [(_a = slots.top) == null ? void 0 : _a.call(slots), _createVNode(RadioGroup, {
  73. "modelValue": props.modelValue
  74. }, {
  75. default: () => [List]
  76. }), DisabledText, DisabledList, (_b = slots.default) == null ? void 0 : _b.call(slots), renderBottom()]);
  77. };
  78. }
  79. });
  80. export {
  81. stdin_default as default
  82. };