Skip to content
Snippets Groups Projects
CreateEntityMenu.vue 1.5 KiB
Newer Older
<script setup lang="ts">
import { v4 as uuidv4 } from 'uuid';

const emit = defineEmits(['addEntity']);

const speedDialItems = ref([
  {
    label: 'Text',
    icon: 'pi pi-pencil',
    command: () => {
      emit('addEntity', {
        type: 'text',
        uuid: uuidv4(),
        text: ''
      });
    }
  },
  {
    label: 'Image',
    icon: 'pi pi-image',
    command: () => {
      emit('addEntity', {
        type: 'image',
        uuid: uuidv4()
      });
    }
  },
  {
    label: 'Table',
    icon: 'pi pi-table',
    command: () => {
      emit('addEntity', {
        type: 'table',
        uuid: uuidv4(),
        columns: [
          {
            name: 'Name',
            type: 'text'
          },
          {
            name: 'Description',
            type: 'text'
          },
          {
            name: 'Status',
            type: 'status'
          }
        ]
      });
    }
  }
]);
</script>

<template>
  <SpeedDial
    :model="speedDialItems"
    direction="right"
    :buttonProps="{ severity: 'info', rounded: true }"
    style="position: absolute; left: 5%; top: 0"
  >
    <template #item="{ item, toggleCallback }">
      <div
        class="flex flex-col items-center justify-between -translate-8 gap-2 p-2 border rounded border-surface-200 dark:border-surface-700 w-20 cursor-pointer"
        @click="toggleCallback"
      >
        <span :class="item.icon" />
        <span>
          {{ item.label }}
        </span>
      </div>
    </template>
  </SpeedDial>
</template>

<style scoped></style>