mirror of
https://github.com/hcengineering/platform.git
synced 2026-09-29 04:55:03 +02:00
@@ -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>
|
||||
Reference in New Issue
Block a user