Files
speckle-server/packages/frontend-2/components/workspace/header/AddProjectMenu.vue
T
andrewwallacespeckle be898dbe6b feat(fe2): New workspace page layout (#3716)
* prevent recursive layout rendering with named slots

* Workspace sidebar desktop

* Responsiveness

* Billing

* Edit icons

* Fragmentation

* Spacing updates

* Fragmentation

* Mobile updates

* Full notification for non-trial

* Readd workspace role

* New icon. Invite dialog

* Avatar Group count

* Add select-none

* Updates

* Updates

* Fix build

* New layout

* Mobile sidebar fix

* BillingAlert update logic

* Updates from CR

* New empty state

* Admin/Guest checks

* Changes from Benjamin

* Changes from michal

* Mobile changes

* Remove fullstop

* Update propname. Optional buttonCopy

* Improved project card grid

* Workspace page prop

---------

Co-authored-by: Mike Tasset <mike.tasset@gmail.com>
2024-12-20 13:31:39 +00:00

81 lines
1.9 KiB
Vue

<template>
<LayoutMenu
v-model:open="showMenu"
:items="menuItems"
:menu-position="HorizontalDirection.Left"
:menu-id="menuId"
@click.stop.prevent
@chosen="onActionChosen"
>
<FormButton
color="outline"
:class="hideTextOnMobile ? 'hidden md:block' : ''"
@click="showMenu = !showMenu"
>
<div class="flex items-center gap-1">
{{ buttonCopy || 'Add project' }}
<ChevronDownIcon class="h-3 w-3" />
</div>
</FormButton>
<FormButton
color="outline"
:class="hideTextOnMobile ? 'md:hidden' : 'hidden'"
hide-text
:icon-left="PlusIcon"
@click="showMenu = !showMenu"
>
Add project
</FormButton>
</LayoutMenu>
</template>
<script setup lang="ts">
import { ChevronDownIcon, PlusIcon } from '@heroicons/vue/24/outline'
import { HorizontalDirection } from '~~/lib/common/composables/window'
import type { LayoutMenuItem } from '~~/lib/layout/helpers/components'
enum AddNewProjectActionTypes {
NewProject = 'new-project',
MoveProject = 'move-project'
}
const emit = defineEmits<{
(e: 'new-project'): void
(e: 'move-project'): void
}>()
const props = defineProps<{
hideTextOnMobile?: boolean
isWorkspaceAdmin: boolean
buttonCopy?: string
}>()
const menuId = useId()
const showMenu = ref(false)
const menuItems = computed<LayoutMenuItem[][]>(() => [
[
{ title: 'Create new project...', id: AddNewProjectActionTypes.NewProject },
{
title: 'Move existing project...',
id: AddNewProjectActionTypes.MoveProject,
disabled: !props.isWorkspaceAdmin,
disabledTooltip: 'You must be a workspace admin.'
}
]
])
const onActionChosen = (params: { item: LayoutMenuItem; event: MouseEvent }) => {
const { item } = params
switch (item.id) {
case AddNewProjectActionTypes.NewProject:
emit('new-project')
break
case AddNewProjectActionTypes.MoveProject:
emit('move-project')
break
}
}
</script>