mirror of
https://github.com/hcengineering/platform.git
synced 2026-10-01 05:55:09 +02:00
Merge branch 'main' of github.com:hcengineering/anticrm into show-filter-items-current-space
Signed-off-by: Denis Bunakalya <denis.bunakalya@xored.com>
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
<script lang="ts">
|
||||
import contact, { Employee, EmployeeAccount, formatName } from '@hcengineering/contact'
|
||||
import { AccountRole, getCurrentAccount } from '@hcengineering/core'
|
||||
import login from '@hcengineering/login'
|
||||
import login, { loginId } from '@hcengineering/login'
|
||||
import { setMetadata } from '@hcengineering/platform'
|
||||
import { Avatar, createQuery } from '@hcengineering/presentation'
|
||||
import setting, { settingId, SettingsCategory } from '@hcengineering/setting'
|
||||
@@ -82,7 +82,7 @@
|
||||
setMetadata(login.metadata.LoginToken, null)
|
||||
setMetadataLocalStorage(login.metadata.LoginEndpoint, null)
|
||||
setMetadataLocalStorage(login.metadata.LoginEmail, null)
|
||||
navigate({ path: [login.component.LoginApp] })
|
||||
navigate({ path: [loginId] })
|
||||
}
|
||||
|
||||
function inviteWorkspace (): void {
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
{#if model}
|
||||
<TableBrowser
|
||||
_class={core.class.Space}
|
||||
config={['', '$lookup._class', 'modifiedOn']}
|
||||
config={['', '_class', 'modifiedOn']}
|
||||
showNotification
|
||||
baseMenuClass={core.class.Space}
|
||||
query={{
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import login from '@hcengineering/login'
|
||||
import login, { loginId } from '@hcengineering/login'
|
||||
import {
|
||||
getWorkspaces,
|
||||
navigateToWorkspace,
|
||||
@@ -83,7 +83,7 @@
|
||||
{
|
||||
label: getEmbeddedLabel('...'),
|
||||
action: async () => {
|
||||
navigate({ path: [login.component.LoginApp, 'selectWorkspace'] })
|
||||
navigate({ path: [loginId, 'selectWorkspace'] })
|
||||
},
|
||||
isSubmenuRightClicking: false
|
||||
}
|
||||
|
||||
@@ -46,11 +46,11 @@
|
||||
export let createItemLabel: IntlString = presentation.string.Create
|
||||
export let withHeader: boolean = true
|
||||
export let withFilterButton: boolean = true
|
||||
export let search: string = ''
|
||||
|
||||
const me = getCurrentAccount()._id
|
||||
const client = getClient()
|
||||
const spaceQuery = createQuery()
|
||||
export let search: string = ''
|
||||
const sort: SortingQuery<Space> = {
|
||||
name: SortingOrder.Ascending
|
||||
}
|
||||
|
||||
@@ -14,20 +14,28 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import type { Class, Doc, Ref, Space, WithLookup } from '@hcengineering/core'
|
||||
import type { Class, Doc, DocumentQuery, Ref, Space, WithLookup } from '@hcengineering/core'
|
||||
import { IntlString } from '@hcengineering/platform'
|
||||
import { createQuery } from '@hcengineering/presentation'
|
||||
import { Component, Loading } from '@hcengineering/ui'
|
||||
import { AnyComponent, Component, Loading } from '@hcengineering/ui'
|
||||
import view, { Viewlet, ViewletPreference } from '@hcengineering/view'
|
||||
import { FilterBar } from '@hcengineering/view-resources'
|
||||
|
||||
export let _class: Ref<Class<Doc>>
|
||||
export let space: Ref<Space>
|
||||
export let search: string
|
||||
export let search: string = ''
|
||||
export let viewlet: WithLookup<Viewlet> | undefined
|
||||
export let createItemDialog: AnyComponent | undefined
|
||||
export let createItemLabel: IntlString | undefined
|
||||
|
||||
const preferenceQuery = createQuery()
|
||||
let preference: ViewletPreference | undefined
|
||||
let loading = true
|
||||
|
||||
let resultQuery: DocumentQuery<Doc> = {}
|
||||
|
||||
$: searchQuery = search === '' ? { space } : { $search: search, space }
|
||||
|
||||
$: viewlet &&
|
||||
preferenceQuery.query(
|
||||
view.class.ViewletPreference,
|
||||
@@ -48,6 +56,7 @@
|
||||
{#if loading}
|
||||
<Loading />
|
||||
{:else}
|
||||
<FilterBar {_class} query={searchQuery} on:change={(e) => (resultQuery = e.detail)} />
|
||||
<Component
|
||||
is={viewlet.$lookup?.descriptor?.component}
|
||||
props={{
|
||||
@@ -56,7 +65,9 @@
|
||||
options: viewlet.options,
|
||||
config: preference?.config ?? viewlet.config,
|
||||
viewlet,
|
||||
search
|
||||
createItemDialog,
|
||||
createItemLabel,
|
||||
query: resultQuery
|
||||
}}
|
||||
/>
|
||||
{/if}
|
||||
|
||||
@@ -19,7 +19,12 @@
|
||||
import presentation, { createQuery, getClient } from '@hcengineering/presentation'
|
||||
import { AnyComponent, Button, IconAdd, SearchEdit, showPanel, showPopup, TabList } from '@hcengineering/ui'
|
||||
import view, { Viewlet } from '@hcengineering/view'
|
||||
import { ViewletSettingButton } from '@hcengineering/view-resources'
|
||||
import {
|
||||
getActiveViewletId,
|
||||
getViewOptions,
|
||||
setActiveViewletId,
|
||||
ViewletSettingButton
|
||||
} from '@hcengineering/view-resources'
|
||||
import { createEventDispatcher } from 'svelte'
|
||||
import plugin from '../plugin'
|
||||
import { classIcon } from '../utils'
|
||||
@@ -71,7 +76,8 @@
|
||||
}
|
||||
|
||||
function updateViewlets (viewlets: WithLookup<Viewlet>[]) {
|
||||
const index = viewlets.findIndex((p) => p.descriptor === viewlet?.descriptor)
|
||||
const _id = getActiveViewletId()
|
||||
const index = viewlets.findIndex((p) => p._id === (viewlet?._id ?? _id))
|
||||
viewlet = index === -1 ? viewlets[0] : viewlets[index]
|
||||
}
|
||||
$: viewslist = viewlets.map((views) => {
|
||||
@@ -83,6 +89,8 @@
|
||||
})
|
||||
|
||||
$: twoRows = $deviceInfo.twoRows
|
||||
|
||||
$: viewOptions = getViewOptions(viewlet)
|
||||
</script>
|
||||
|
||||
<div class="ac-header withSettings" class:full={!twoRows} class:mini={twoRows}>
|
||||
@@ -120,11 +128,14 @@
|
||||
kind={'secondary'}
|
||||
size={'small'}
|
||||
on:select={(result) => {
|
||||
if (result.detail !== undefined) viewlet = viewlets.find((vl) => vl._id === result.detail.id)
|
||||
if (result.detail !== undefined) {
|
||||
viewlet = viewlets.find((vl) => vl._id === result.detail.id)
|
||||
if (viewlet) setActiveViewletId(viewlet._id)
|
||||
}
|
||||
}}
|
||||
/>
|
||||
{/if}
|
||||
<ViewletSettingButton {viewlet} />
|
||||
<ViewletSettingButton bind:viewOptions {viewlet} />
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
import { getClient } from '@hcengineering/presentation'
|
||||
import { AnyComponent, Component } from '@hcengineering/ui'
|
||||
import view, { Viewlet } from '@hcengineering/view'
|
||||
import { getActiveViewletId } from '@hcengineering/view-resources'
|
||||
import type { ViewConfiguration } from '@hcengineering/workbench'
|
||||
import SpaceContent from './SpaceContent.svelte'
|
||||
import SpaceHeader from './SpaceHeader.svelte'
|
||||
@@ -61,7 +62,8 @@
|
||||
}
|
||||
)
|
||||
if (header !== undefined) {
|
||||
viewlet = viewlets[0]
|
||||
const _id = getActiveViewletId()
|
||||
viewlet = viewlets.find((viewlet) => viewlet._id === _id) || viewlets[0]
|
||||
}
|
||||
_class = attachTo
|
||||
}
|
||||
@@ -97,5 +99,5 @@
|
||||
bind:viewlet
|
||||
/>
|
||||
{/if}
|
||||
<SpaceContent space={space._id} {_class} bind:search {viewlet} />
|
||||
<SpaceContent space={space._id} {_class} {createItemDialog} {createItemLabel} bind:search {viewlet} />
|
||||
{/if}
|
||||
|
||||
@@ -13,12 +13,13 @@
|
||||
// limitations under the License.
|
||||
-->
|
||||
<script lang="ts">
|
||||
import { Class, Doc, DocumentQuery, Ref, Space } from '@hcengineering/core'
|
||||
import { Asset, getEmbeddedLabel, IntlString } from '@hcengineering/platform'
|
||||
import { Class, Doc, DocumentQuery, Ref, WithLookup, Space } from '@hcengineering/core'
|
||||
import { Asset, IntlString, getEmbeddedLabel } from '@hcengineering/platform'
|
||||
import { createQuery, getClient } from '@hcengineering/presentation'
|
||||
import {
|
||||
AnyComponent,
|
||||
Button,
|
||||
Component,
|
||||
deviceOptionsStore as deviceInfo,
|
||||
Icon,
|
||||
IconAdd,
|
||||
@@ -28,8 +29,7 @@
|
||||
showPopup
|
||||
} from '@hcengineering/ui'
|
||||
import view, { Viewlet, ViewletDescriptor, ViewletPreference } from '@hcengineering/view'
|
||||
import { FilterButton, TableBrowser, ViewletSettingButton } from '@hcengineering/view-resources'
|
||||
import SourcePresenter from './search/SourcePresenter.svelte'
|
||||
import { FilterBar, FilterButton, getViewOptions, ViewletSettingButton } from '@hcengineering/view-resources'
|
||||
|
||||
export let _class: Ref<Class<Doc>>
|
||||
export let space: Ref<Space> | undefined = undefined
|
||||
@@ -42,9 +42,13 @@
|
||||
export let baseQuery: DocumentQuery<Doc> = {}
|
||||
|
||||
let search = ''
|
||||
let descr: Viewlet | undefined
|
||||
let viewlet: WithLookup<Viewlet> | undefined
|
||||
|
||||
$: resultQuery = updateResultQuery(search, baseQuery)
|
||||
$: query = baseQuery || {}
|
||||
|
||||
$: searchQuery = search === '' ? query : { $search: search, ...query }
|
||||
|
||||
$: resultQuery = searchQuery
|
||||
|
||||
const preferenceQuery = createQuery()
|
||||
let preference: ViewletPreference | undefined
|
||||
@@ -56,12 +60,16 @@
|
||||
function updateDescriptor (_class: Ref<Class<Doc>>, descriptor: Ref<ViewletDescriptor> = view.viewlet.Table) {
|
||||
loading = true
|
||||
client
|
||||
.findOne<Viewlet>(view.class.Viewlet, {
|
||||
attachTo: _class,
|
||||
descriptor
|
||||
})
|
||||
.findOne<Viewlet>(
|
||||
view.class.Viewlet,
|
||||
{
|
||||
attachTo: _class,
|
||||
descriptor
|
||||
},
|
||||
{ lookup: { descriptor: view.class.ViewletDescriptor } }
|
||||
)
|
||||
.then((res) => {
|
||||
descr = res
|
||||
viewlet = res
|
||||
if (res !== undefined) {
|
||||
preferenceQuery.query(
|
||||
view.class.ViewletPreference,
|
||||
@@ -83,11 +91,9 @@
|
||||
showPopup(createComponent, createComponentProps, 'top')
|
||||
}
|
||||
|
||||
function updateResultQuery (search: string, baseQuery: DocumentQuery<Doc> = {}): DocumentQuery<Doc> {
|
||||
return search === '' ? baseQuery : { ...baseQuery, $search: search }
|
||||
}
|
||||
|
||||
$: twoRows = $deviceInfo.twoRows
|
||||
|
||||
$: viewOptions = getViewOptions(viewlet)
|
||||
</script>
|
||||
|
||||
<div class="ac-header withSettings" class:full={!twoRows} class:mini={twoRows}>
|
||||
@@ -104,33 +110,31 @@
|
||||
{#if createLabel && createComponent}
|
||||
<Button label={createLabel} icon={IconAdd} kind={'primary'} size={'small'} on:click={() => showCreateDialog()} />
|
||||
{/if}
|
||||
<ViewletSettingButton viewlet={descr} />
|
||||
<ViewletSettingButton bind:viewOptions {viewlet} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{#if descr}
|
||||
{#if loading}
|
||||
<Loading />
|
||||
{:else}
|
||||
<TableBrowser
|
||||
{_class}
|
||||
config={[
|
||||
...(search !== ''
|
||||
? [
|
||||
{
|
||||
key: '',
|
||||
presenter: SourcePresenter,
|
||||
label: getEmbeddedLabel('#'),
|
||||
sortingKey: '#score',
|
||||
props: { search }
|
||||
}
|
||||
]
|
||||
: []),
|
||||
...(preference?.config ?? descr.config)
|
||||
]}
|
||||
options={descr.options}
|
||||
query={resultQuery}
|
||||
showNotification
|
||||
/>
|
||||
{/if}
|
||||
{#if loading}
|
||||
<Loading />
|
||||
{:else if viewlet?.$lookup?.descriptor?.component}
|
||||
<FilterBar
|
||||
{_class}
|
||||
query={searchQuery}
|
||||
on:change={(e) => {
|
||||
resultQuery = e.detail
|
||||
}}
|
||||
/>
|
||||
<Component
|
||||
is={viewlet.$lookup.descriptor.component}
|
||||
props={{
|
||||
_class,
|
||||
options: viewlet.options,
|
||||
config: preference?.config ?? viewlet.config,
|
||||
viewlet,
|
||||
viewOptions,
|
||||
createItemDialog: createComponent,
|
||||
createItemLabel: createLabel,
|
||||
query: resultQuery
|
||||
}}
|
||||
/>
|
||||
{/if}
|
||||
|
||||
@@ -510,6 +510,7 @@
|
||||
/>
|
||||
<div class="workbench-container">
|
||||
{#if currentApplication && navigatorModel && navigator && visibileNav}
|
||||
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
||||
{#if visibileNav && navFloat}<div class="cover shown" on:click={() => (visibileNav = false)} />{/if}
|
||||
<div
|
||||
class="antiPanel-navigator {appsDirection === 'horizontal' ? 'portrait' : 'landscape'}"
|
||||
|
||||
@@ -19,26 +19,29 @@
|
||||
|
||||
import Workbench from './Workbench.svelte'
|
||||
import workbench from '../plugin'
|
||||
import { workbenchId } from '@hcengineering/workbench'
|
||||
</script>
|
||||
|
||||
{#key $location.path[1]}
|
||||
{#await connect(getMetadata(workbench.metadata.PlatformTitle) ?? 'Platform')}
|
||||
<Loading />
|
||||
{:then client}
|
||||
{#if !client && versionError}
|
||||
<div class="antiPopup version-popup">
|
||||
<h1>Server is under maintenance.</h1>
|
||||
{versionError}
|
||||
</div>
|
||||
{:else if client}
|
||||
<Notifications>
|
||||
<Workbench {client} />
|
||||
</Notifications>
|
||||
{/if}
|
||||
{:catch error}
|
||||
<div>{error} -- {error.stack}</div>
|
||||
{/await}
|
||||
{/key}
|
||||
{#if $location.path[0] === workbenchId || $location.path[0] === workbench.component.WorkbenchApp}
|
||||
{#key $location.path[1]}
|
||||
{#await connect(getMetadata(workbench.metadata.PlatformTitle) ?? 'Platform')}
|
||||
<Loading />
|
||||
{:then client}
|
||||
{#if !client && versionError}
|
||||
<div class="antiPopup version-popup">
|
||||
<h1>Server is under maintenance.</h1>
|
||||
{versionError}
|
||||
</div>
|
||||
{:else if client}
|
||||
<Notifications>
|
||||
<Workbench {client} />
|
||||
</Notifications>
|
||||
{/if}
|
||||
{:catch error}
|
||||
<div>{error} -- {error.stack}</div>
|
||||
{/await}
|
||||
{/key}
|
||||
{/if}
|
||||
|
||||
<style lang="scss">
|
||||
.version-popup {
|
||||
|
||||
Reference in New Issue
Block a user