editable-headline.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <template>
  2. <h2>
  3. <template v-if="!edit">
  4. {{ value }}
  5. <img alt="edit" class="edit"
  6. src="@/assets/icons/pencil.svg"
  7. @click="edit = true">
  8. </template>
  9. <template v-else>
  10. <input-group>
  11. <text-input placeholder="name" v-model="input"
  12. @change="change" @enter="change"/>
  13. <!--
  14. <button-input @click="change" type="primary">confirm</button-input>
  15. <button-input @click="edit = false">cancel</button-input>
  16. -->
  17. <button-input @click="remove" type="error">delete</button-input>
  18. </input-group>
  19. </template>
  20. </h2>
  21. </template>
  22. <script>
  23. import TextInput from "@/components/base/text-input";
  24. import ButtonInput from "@/components/base/button-input";
  25. import InputGroup from "@/components/base/input-group";
  26. export default {
  27. name: "editable-headline",
  28. components: {InputGroup, ButtonInput, TextInput},
  29. props: ['value'],
  30. data: function () {
  31. return {
  32. input: this.value,
  33. edit: false
  34. }
  35. },
  36. methods: {
  37. change: function () {
  38. this.$emit('change', this.input);
  39. this.edit = false;
  40. },
  41. remove: function (event) {
  42. this.$emit('remove', event);
  43. }
  44. }
  45. }
  46. </script>
  47. <style scoped>
  48. h2 {
  49. display: flex;
  50. align-items: center;
  51. margin: 0;
  52. }
  53. img {
  54. width: 1.5rem;
  55. }
  56. .delete {
  57. margin-right: 1.5rem;
  58. }
  59. .edit,
  60. .button-row {
  61. margin-left: 0.75rem;
  62. }
  63. .text-input {
  64. flex-grow: 1;
  65. }
  66. </style>