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:
Denis Bunakalya
2023-01-18 11:53:37 +04:00
parent 328a052d8f
commit 49bf38cf0a
221 changed files with 3593 additions and 2272 deletions
@@ -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 {