mirror of
https://github.com/hcengineering/platform.git
synced 2025-05-08 08:28:13 +00:00
95 lines
3.0 KiB
Svelte
95 lines
3.0 KiB
Svelte
<!--
|
|
// Copyright © 2020 Anticrm Platform Contributors.
|
|
//
|
|
// Licensed under the Eclipse Public License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License. You may
|
|
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
//
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
-->
|
|
|
|
<script lang="ts">
|
|
// import type { IntlString, Asset, Resource } from '@anticrm/platform'
|
|
import type { Ref, State, Class, Obj } from '@anticrm/core'
|
|
import { createEventDispatcher } from 'svelte'
|
|
import { Label, showPopup, IconDelete as Delete } from '@anticrm/ui'
|
|
import { getClient, MessageBox } from '@anticrm/presentation'
|
|
import type { Kanban } from '@anticrm/view'
|
|
|
|
import workbench from '../plugin'
|
|
import view from '@anticrm/view'
|
|
|
|
export let kanban: Kanban
|
|
export let state: State
|
|
export let spaceClass: Ref<Class<Obj>>
|
|
|
|
const dispatch = createEventDispatcher()
|
|
|
|
const client = getClient()
|
|
|
|
async function deleteState() {
|
|
const spaceClassInstance = client.getHierarchy().getClass(spaceClass)
|
|
const spaceView = client.getHierarchy().as(spaceClassInstance, workbench.mixin.SpaceView)
|
|
const containingClass = spaceView.view.class
|
|
|
|
const objectsInThisState = await client.findAll(containingClass, { state: state._id })
|
|
|
|
if (objectsInThisState.length > 0) {
|
|
showPopup(MessageBox, {
|
|
label: 'Can\'t delete status',
|
|
message: `There are ${objectsInThisState.length} objects in the given state. Move or delete them first.`
|
|
})
|
|
} else {
|
|
showPopup(MessageBox, {
|
|
label: 'Delete status',
|
|
message: 'Do you want to delete this status?'
|
|
}, undefined, async (result) => {
|
|
if (result) {
|
|
await client.updateDoc(view.class.Kanban, kanban.space, kanban._id, { $pull: { states: state._id } })
|
|
client.removeDoc(state._class, state.space, state._id)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<div class="flex-col popup">
|
|
<div class="flex-row-center red-color menu-item" on:click={() => { dispatch('close'); deleteState() }}>
|
|
<div class="icon">
|
|
<Delete size={'medium'} />
|
|
</div>
|
|
<div class="flex-grow"><Label label={workbench.string.Delete} /></div>
|
|
</div>
|
|
</div>
|
|
|
|
<style lang="scss">
|
|
.popup {
|
|
padding: .5rem;
|
|
min-width: 12rem;
|
|
background-color: var(--theme-button-bg-focused);
|
|
border: 1px solid var(--theme-button-border-enabled);
|
|
border-radius: .75rem;
|
|
box-shadow: 0 .75rem 1.25rem rgba(0, 0, 0, .2);
|
|
}
|
|
|
|
.menu-item {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: .5rem;
|
|
border-radius: .5rem;
|
|
cursor: pointer;
|
|
|
|
.icon {
|
|
margin-right: .75rem;
|
|
transform-origin: center center;
|
|
transform: scale(.75);
|
|
}
|
|
&:hover { background-color: var(--theme-button-bg-hovered); }
|
|
}
|
|
</style>
|