Minor fixes (#2490)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
Andrey Sobolev
2023-01-05 10:45:38 +06:00
committed by GitHub
parent 72eb5564e1
commit 396dd3e7f4
20 changed files with 192 additions and 67 deletions
@@ -56,6 +56,12 @@
action: (_: any, evt: MouseEvent) => {
addMapping(evt, MappingOperation.CreateChannel)
}
},
{
label: getEmbeddedLabel('Add Download Attachment mapping'),
action: (_: any, evt: MouseEvent) => {
addMapping(evt, MappingOperation.DownloadAttachment)
}
}
] as Action[]
</script>
@@ -29,7 +29,7 @@
let items: any[] = []
function loadItems (order: boolean): void {
bitrixClient
.call(mapping.type + '.list', { select: ['*', 'UF_*'], order: { ID: order ? 'ASC' : 'DSC' } })
.call(mapping.type + '.list', { select: ['*', 'UF_*', 'EMAIL', 'IM'], order: { ID: order ? 'ASC' : 'DSC' } })
.then((res) => {
items = res.result
})
@@ -7,6 +7,7 @@
import CopyMapping from './mappings/CopyMapping.svelte'
import CreateChannelMapping from './mappings/CreateChannelMapping.svelte'
import CreateTagMapping from './mappings/CreateTagMapping.svelte'
import DownloadAttachmentMapping from './mappings/DownloadAttachmentMapping.svelte'
export let mapping: BitrixEntityMapping
export let fields: Fields = {}
@@ -16,7 +17,7 @@
$: _kind = kind ?? field?.operation.kind
let op: CopyMapping | CreateTagMapping | CreateChannelMapping
let op: CopyMapping | CreateTagMapping | CreateChannelMapping | DownloadAttachmentMapping
async function save (): Promise<void> {
op.save()
@@ -39,5 +40,7 @@
<CreateTagMapping {mapping} {fields} {attribute} {field} bind:this={op} />
{:else if _kind === MappingOperation.CreateChannel}
<CreateChannelMapping {mapping} {fields} {attribute} {field} bind:this={op} />
{:else if _kind === MappingOperation.DownloadAttachment}
<DownloadAttachmentMapping {mapping} {fields} {attribute} {field} bind:this={op} />
{/if}
</Card>
@@ -6,6 +6,7 @@
import CopyMappingPresenter from './mappings/CopyMappingPresenter.svelte'
import CreateChannelMappingPresenter from './mappings/CreateChannelMappingPresenter.svelte'
import CreateTagMappingPresenter from './mappings/CreateTagMappingPresenter.svelte'
import DownloadAttachmentPresenter from './mappings/DownloadAttachmentPresenter.svelte'
export let mapping: BitrixEntityMapping
export let value: BitrixFieldMapping
@@ -29,6 +30,8 @@
<CreateTagMappingPresenter {mapping} {value} />
{:else if kind === MappingOperation.CreateChannel}
<CreateChannelMappingPresenter {mapping} {value} />
{:else if kind === MappingOperation.DownloadAttachment}
<DownloadAttachmentPresenter {mapping} {value} />
{/if}
{/if}
</div>
@@ -252,8 +252,13 @@
let added = 0
while (added <= limit) {
const sel = ['*', 'UF_*']
if (mapping.type === BitrixEntityType.Lead) {
sel.push('EMAIL')
sel.push('IM')
}
const result = await bitrixClient.call(mapping.type + '.list', {
select: ['*', 'UF_*'],
select: sel,
order: { ID: direction },
start: processed
})
@@ -261,18 +266,11 @@
const extraDocs: Doc[] = []
const convertResults: ConvertResult[] = []
const fields = mapping.$lookup?.fields as BitrixFieldMapping[]
for (const r of result.result) {
// Convert documents.
const res = await convert(
client,
mapping,
space,
mapping.$lookup?.fields as BitrixFieldMapping[],
r,
extraDocs,
tagElements,
userList
)
const res = await convert(client, mapping, space, fields, r, extraDocs, tagElements, userList)
if (mapping.comments) {
res.comments = bitrixClient
.call(BitrixEntityType.Comment + '.list', {
@@ -0,0 +1,100 @@
<script lang="ts">
import {
BitrixEntityMapping,
BitrixFieldMapping,
DownloadAttachmentOperation,
Fields,
MappingOperation
} from '@hcengineering/bitrix'
import { AnyAttribute } from '@hcengineering/core'
import { getClient } from '@hcengineering/presentation'
import { Button, DropdownTextItem, IconAdd, IconDelete } from '@hcengineering/ui'
import DropdownLabels from '@hcengineering/ui/src/components/DropdownLabels.svelte'
import bitrix from '../../plugin'
export let mapping: BitrixEntityMapping
export let fields: Fields = {}
export let attribute: AnyAttribute
export let field: BitrixFieldMapping | undefined
let downloadFields: { field: string }[] = [...((field?.operation as DownloadAttachmentOperation)?.fields ?? [])]
const client = getClient()
export async function save (): Promise<void> {
if (field !== undefined) {
await client.update(field, {
operation: {
kind: MappingOperation.DownloadAttachment,
fields: downloadFields
}
})
} else {
await client.addCollection(bitrix.class.FieldMapping, mapping.space, mapping._id, mapping._class, 'fields', {
ofClass: attribute.attributeOf,
attributeName: attribute.name,
operation: {
kind: MappingOperation.DownloadAttachment,
fields: downloadFields
}
})
}
}
function getItems (fields: Fields): DropdownTextItem[] {
return Object.entries(fields)
.filter((it) => it[1].type === 'file')
.map((it) => ({
id: it[0],
label: `${it[1].formLabel ?? it[1].title}${it[0].startsWith('UF_') ? ' *' : ''} - ${it[0]}`
}))
}
$: items = getItems(fields)
</script>
<div class="flex-col flex-wrap">
{#each downloadFields as p, i}
<div class="pattern flex-row-center gap-2">
<DropdownLabels minW0={false} label={bitrix.string.FieldMapping} {items} bind:selected={p.field} />
<div class="ml-1">
<Button
icon={IconDelete}
size={'small'}
on:click={() => {
downloadFields.splice(i, 1)
downloadFields = downloadFields
}}
/>
</div>
</div>
{/each}
<div class="ml-2">
<Button
icon={IconAdd}
size={'small'}
on:click={() => {
downloadFields = [...downloadFields, { field: items[0].id }]
}}
/>
</div>
</div>
<style lang="scss">
.pattern {
margin: 0.5rem;
padding: 0.5rem;
flex-shrink: 0;
border: 1px dashed var(--accent-color);
border-radius: 0.25rem;
font-weight: 500;
font-size: 0.75rem;
// text-transform: uppercase;
color: var(--accent-color);
&:hover {
color: var(--caption-color);
}
}
</style>
@@ -0,0 +1,37 @@
<script lang="ts">
import { BitrixEntityMapping, BitrixFieldMapping, DownloadAttachmentOperation } from '@hcengineering/bitrix'
export let mapping: BitrixEntityMapping
export let value: BitrixFieldMapping
$: op = value.operation as DownloadAttachmentOperation
</script>
<div class="flex flex-wrap">
{#each op.fields as p, i}
<div class="pattern flex-row-center gap-2">
{#if mapping.bitrixFields}
{p.field ? mapping.bitrixFields[p.field]?.formLabel ?? mapping.bitrixFields[p.field]?.title : p.field ?? ''}
{/if}
</div>
{/each}
</div>
<style lang="scss">
.pattern {
margin: 0.1rem;
padding: 0.3rem;
flex-shrink: 0;
border: 1px dashed var(--accent-color);
border-radius: 0.25rem;
font-weight: 500;
font-size: 0.75rem;
// text-transform: uppercase;
color: var(--accent-color);
&:hover {
color: var(--caption-color);
}
}
</style>