Skip to content

Commit f717200

Browse files
authored
Improve office floor editing (#10173)
* Improve office floor editing Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> * Fix Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com> --------- Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
1 parent 54bfd73 commit f717200

File tree

4 files changed

+74
-19
lines changed

4 files changed

+74
-19
lines changed

plugins/love-resources/src/components/AddRoomPopup.svelte

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<script lang="ts">
22
import core, { Class, Data, generateId, Ref } from '@hcengineering/core'
3+
import { Floor, getFreePosition, Office, Room, RoomAccess, RoomType } from '@hcengineering/love'
34
import { translate } from '@hcengineering/platform'
45
import { getClient } from '@hcengineering/presentation'
56
import { Button, DropdownIntlItem } from '@hcengineering/ui'
6-
import { Floor, Office, Room, RoomAccess, RoomType, getFreePosition } from '@hcengineering/love'
7-
import love from '../plugin'
8-
import { rooms } from '../stores'
97
import { createEventDispatcher } from 'svelte'
8+
import love from '../plugin'
9+
import { rooms, selectedFloor } from '../stores'
1010
1111
export let floor: Ref<Floor>
1212
@@ -72,6 +72,14 @@
7272
await client.createDoc(val._class, core.space.Workspace, data, _id)
7373
dispatch('close')
7474
}
75+
76+
async function createFloor (): Promise<void> {
77+
const client = getClient()
78+
const name = await translate(love.string.Floor, {})
79+
const _id = await client.createDoc(love.class.Floor, core.space.Workspace, { name })
80+
selectedFloor.set(_id)
81+
dispatch('close')
82+
}
7583
</script>
7684

7785
<div class="antiPopup p-4 flex-gap-2">
@@ -80,6 +88,9 @@
8088
<Button label={item.label} on:click={() => createRoom(item.id)} />
8189
</div>
8290
{/each}
91+
<div>
92+
<Button label={love.string.Floor} on:click={createFloor} />
93+
</div>
8394
</div>
8495

8596
<style lang="scss">

plugins/love-resources/src/components/Floor.svelte

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
// limitations under the License.
1414
-->
1515
<script lang="ts">
16-
import { AccountRole, Ref, getCurrentAccount, hasAccountRole, WithLookup } from '@hcengineering/core'
17-
import { Breadcrumb, Header, IconEdit, ModernButton, Component } from '@hcengineering/ui'
16+
import { AccountRole, getCurrentAccount, hasAccountRole, Ref, WithLookup } from '@hcengineering/core'
1817
import { Floor, Room } from '@hcengineering/love'
19-
import { createEventDispatcher } from 'svelte'
20-
import { ViewletSelector } from '@hcengineering/view-resources'
18+
import { Component, DropdownLabels, Header, IconEdit, ModernButton } from '@hcengineering/ui'
2119
import { Viewlet, ViewletPreference } from '@hcengineering/view'
20+
import { ViewletSelector } from '@hcengineering/view-resources'
21+
import { createEventDispatcher } from 'svelte'
2222
2323
import lovePlg from '../plugin'
24-
import { floors } from '../stores'
24+
import { floors, selectedFloor } from '../stores'
2525
2626
export let rooms: Room[] = []
2727
export let floor: Ref<Floor>
@@ -32,17 +32,39 @@
3232
let preference: ViewletPreference | undefined
3333
let loading = false
3434
35-
$: selectedFloor = $floors.filter((fl) => fl._id === floor)[0]
35+
let selected = $floors.filter((fl) => fl._id === floor)[0]
36+
$: selected = $floors.filter((fl) => fl._id === floor)[0]
3637
3738
const me = getCurrentAccount()
3839
3940
let editable: boolean = false
4041
$: editable = hasAccountRole(me, AccountRole.Maintainer)
42+
43+
let items = $floors.map((p) => {
44+
return { id: p._id, label: p.name }
45+
})
46+
$: items = $floors.map((p) => {
47+
return { id: p._id, label: p.name }
48+
})
49+
50+
function changeFloor (event: CustomEvent<Ref<Floor>>) {
51+
if (event.detail) {
52+
selectedFloor.set(event.detail)
53+
}
54+
}
4155
</script>
4256

4357
<div class="hulyComponent">
4458
<Header adaptive={'disabled'}>
45-
<Breadcrumb title={selectedFloor?.name ?? ''} size={'large'} isCurrent />
59+
<DropdownLabels
60+
{items}
61+
selected={selected?._id}
62+
size={'large'}
63+
kind={'ghost'}
64+
enableSearch={false}
65+
autoSelect={false}
66+
on:selected={changeFloor}
67+
/>
4668
<svelte:fragment slot="beforeTitle">
4769
<ViewletSelector bind:viewlet bind:preference bind:loading viewletQuery={{ attachTo: lovePlg.class.Floor }} />
4870
</svelte:fragment>

plugins/love-resources/src/components/FloorConfigure.svelte

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,28 @@
1313
// limitations under the License.
1414
-->
1515
<script lang="ts">
16+
import { Contact } from '@hcengineering/contact'
1617
import { DocumentUpdate, Ref } from '@hcengineering/core'
18+
import { Floor, GRID_WIDTH, Room, getFreeSpace } from '@hcengineering/love'
1719
import { getClient } from '@hcengineering/presentation'
1820
import {
19-
Breadcrumb,
2021
ButtonIcon,
21-
ModernButton,
22+
DropdownLabels,
2223
Header,
2324
IconAdd,
25+
ModernButton,
2426
Scroller,
2527
eventToHTMLElement,
2628
showPopup
2729
} from '@hcengineering/ui'
28-
import { Floor, GRID_WIDTH, Room, getFreeSpace } from '@hcengineering/love'
2930
import { createEventDispatcher } from 'svelte'
30-
import { floors, lockedRoom } from '../stores'
31+
import lovePlg from '../plugin'
32+
import { floors, lockedRoom, selectedFloor } from '../stores'
3133
import { FloorSize, RGBAColor, ResizeInitParams, RoomSide, shadowError, shadowNormal } from '../types'
3234
import { calculateFloorSize } from '../utils'
3335
import AddRoomPopup from './AddRoomPopup.svelte'
3436
import FloorGrid from './FloorGrid.svelte'
3537
import RoomConfigure from './RoomConfigure.svelte'
36-
import lovePlg from '../plugin'
37-
import { Contact } from '@hcengineering/contact'
3838
3939
export let rooms: Room[] = []
4040
export let floor: Ref<Floor>
@@ -99,7 +99,7 @@
9999
showPopup(AddRoomPopup, { floor }, eventToHTMLElement(e))
100100
}
101101
102-
$: selectedFloor = $floors.filter((fl) => fl._id === floor)[0]
102+
$: selected = $floors.filter((fl) => fl._id === floor)[0]
103103
104104
const setShadowColor = (color: RGBAColor): void => {
105105
const { r, g, b, a } = color
@@ -287,11 +287,32 @@
287287
lockedID = -1
288288
}
289289
$: rows = calculateFloorSize(rooms) + 2
290+
291+
function changeFloor (event: CustomEvent<Ref<Floor>>) {
292+
if (event.detail) {
293+
selectedFloor.set(event.detail)
294+
}
295+
}
296+
297+
let items = $floors.map((p) => {
298+
return { id: p._id, label: p.name }
299+
})
300+
$: items = $floors.map((p) => {
301+
return { id: p._id, label: p.name }
302+
})
290303
</script>
291304

292305
<div class="hulyComponent">
293-
<Header allowFullsize adaptive={'disabled'}>
294-
<Breadcrumb title={selectedFloor?.name ?? ''} size={'large'} isCurrent />
306+
<Header adaptive={'disabled'}>
307+
<DropdownLabels
308+
{items}
309+
selected={selected?._id}
310+
size={'large'}
311+
kind={'ghost'}
312+
enableSearch={false}
313+
autoSelect={false}
314+
on:selected={changeFloor}
315+
/>
295316
<svelte:fragment slot="actions">
296317
<ButtonIcon icon={IconAdd} size={'small'} on:click={addRoom} />
297318
<div class="hulyHeader-divider short" />

plugins/love-resources/src/components/Hall.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
return rooms.filter((p) => p.floor === floor)
2727
}
2828
29+
let floor = $selectedFloor ?? ($activeFloor === '' ? $floors[0]?._id : $activeFloor)
2930
$: floor = $selectedFloor ?? ($activeFloor === '' ? $floors[0]?._id : $activeFloor)
3031
let configure: boolean = false
3132
let replacedPanel: HTMLElement

0 commit comments

Comments
 (0)