UBERF-5636 (#4762)

This commit is contained in:
Denis Bykhov 2024-02-25 09:33:54 +06:00 committed by GitHub
parent 3e782658c6
commit 88b91d7ce0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 54 additions and 45 deletions

View File

@ -56,14 +56,22 @@
let _id = currentMessage._id let _id = currentMessage._id
let inputContent = currentMessage.message let inputContent = currentMessage.message
$: createdMessageQuery.query(_class, { _id }, (result: ChatMessage[]) => { $: if (currentDraft != null) {
createdMessageQuery.query(_class, { _id }, (result: ChatMessage[]) => {
if (result.length > 0 && _id !== chatMessage?._id) { if (result.length > 0 && _id !== chatMessage?._id) {
// Ouch we have got comment with same id created already. // Ouch we have got comment with same id created already.
clear()
}
})
} else {
createdMessageQuery.unsubscribe()
}
function clear (): void {
currentMessage = getDefault() currentMessage = getDefault()
_id = currentMessage._id _id = currentMessage._id
inputRef.removeDraft(false) inputRef.removeDraft(false)
} }
})
function objectChange (draft: MessageDraft, empty: Partial<MessageDraft>) { function objectChange (draft: MessageDraft, empty: Partial<MessageDraft>) {
if (shouldSaveDraft) { if (shouldSaveDraft) {
@ -131,11 +139,11 @@
objectClass: parentMessage.attachedToClass, objectClass: parentMessage.attachedToClass,
objectId: parentMessage.attachedTo objectId: parentMessage.attachedTo
}, },
_id as Ref<ThreadMessage>, _id as Ref<ThreadMessage>
Date.now(),
account._id
) )
clear()
await client.update(parentMessage, { lastReply: Date.now() }) await client.update(parentMessage, { lastReply: Date.now() })
const hasPerson = !!parentMessage.repliedPersons?.includes(account.person) const hasPerson = !!parentMessage.repliedPersons?.includes(account.person)
@ -151,10 +159,9 @@
object._class, object._class,
collection, collection,
{ message, attachments }, { message, attachments },
_id, _id
Date.now(),
account._id
) )
clear()
} }
} }

View File

@ -66,7 +66,6 @@
const hierarchy = client.getHierarchy() const hierarchy = client.getHierarchy()
let issue: WithLookup<Issue> | undefined let issue: WithLookup<Issue> | undefined
let currentProject: Project | undefined
let title = '' let title = ''
let innerWidth: number let innerWidth: number
let descriptionBox: AttachmentStyleBoxCollabEditor let descriptionBox: AttachmentStyleBoxCollabEditor
@ -99,14 +98,15 @@
;[issue] = result ;[issue] = result
if (issue !== undefined) { if (issue !== undefined) {
title = issue.title title = issue.title
currentProject = issue.$lookup?.space
} }
}, },
{ lookup: { attachedTo: tracker.class.Issue, space: tracker.class.Project } } {
limit: 1
}
) )
$: canSave = title.trim().length > 0 $: canSave = title.trim().length > 0
$: parentIssue = issue?.$lookup?.attachedTo $: hasParentIssue = issue?.attachedTo !== tracker.ids.NoParent
let saved = false let saved = false
async function save (): Promise<void> { async function save (): Promise<void> {
@ -191,7 +191,7 @@
on:select on:select
> >
<svelte:fragment slot="title"> <svelte:fragment slot="title">
{#if !embedded} {#if !embedded && issue.attachedTo !== tracker.ids.NoParent}
<ParentsNavigator element={issue} /> <ParentsNavigator element={issue} />
{/if} {/if}
{#if embedded} {#if embedded}
@ -205,10 +205,7 @@
{#if (projectType?.tasks.length ?? 0) > 1 && taskType !== undefined} {#if (projectType?.tasks.length ?? 0) > 1 && taskType !== undefined}
({taskType.name}) ({taskType.name})
{/if} {/if}
<ComponentExtensions <ComponentExtensions extension={tracker.extensions.EditIssueTitle} props={{ size: 'medium', value: issue }} />
extension={tracker.extensions.EditIssueTitle}
props={{ size: 'medium', value: issue, space: currentProject }}
/>
</svelte:fragment> </svelte:fragment>
<svelte:fragment slot="pre-utils"> <svelte:fragment slot="pre-utils">
<ComponentExtensions <ComponentExtensions
@ -253,13 +250,9 @@
/> />
</svelte:fragment> </svelte:fragment>
{#if parentIssue} {#if hasParentIssue}
<div class="mb-6"> <div class="mb-6">
{#if currentProject}
<SubIssueSelector {issue} /> <SubIssueSelector {issue} />
{:else}
<Spinner />
{/if}
</div> </div>
{/if} {/if}
<EditBox <EditBox
@ -285,10 +278,8 @@
/> />
</div> </div>
<div class="mt-6"> <div class="mt-6">
{#key issue._id !== undefined && currentProject !== undefined} {#key issue._id}
{#if currentProject !== undefined}
<SubIssues focusIndex={50} {issue} shouldSaveDraft /> <SubIssues focusIndex={50} {issue} shouldSaveDraft />
{/if}
{/key} {/key}
</div> </div>
@ -303,7 +294,7 @@
</span> </span>
<svelte:fragment slot="custom-attributes"> <svelte:fragment slot="custom-attributes">
{#if issue !== undefined && currentProject} {#if issue !== undefined}
<div class="space-divider" /> <div class="space-divider" />
<ControlPanel {issue} {showAllMixins} {readonly} /> <ControlPanel {issue} {showAllMixins} {readonly} />
{/if} {/if}

View File

@ -36,8 +36,11 @@
import IssueStatusIcon from '../IssueStatusIcon.svelte' import IssueStatusIcon from '../IssueStatusIcon.svelte'
export let issue: WithLookup<Issue> export let issue: WithLookup<Issue>
$: parentIssueId = issue.attachedTo !== tracker.ids.NoParent ? issue.attachedTo : undefined
let parentIssue: Issue | undefined = undefined
const parentQuery = createQuery()
const subIssuesQeury = createQuery() const subIssuesQuery = createQuery()
let subIssues: WithLookup<Issue>[] | undefined let subIssues: WithLookup<Issue>[] | undefined
let subIssuesElement: Element let subIssuesElement: Element
@ -64,11 +67,10 @@
} }
$: areSubIssuesLoading = !subIssues $: areSubIssuesLoading = !subIssues
$: parentIssue = issue.$lookup?.attachedTo ? issue.$lookup?.attachedTo : null $: if (parentIssueId) {
$: if (parentIssue && parentIssue.subIssues > 0) { subIssuesQuery.query(
subIssuesQeury.query(
tracker.class.Issue, tracker.class.Issue,
{ space: issue.space, attachedTo: parentIssue._id }, { attachedTo: parentIssueId },
(res) => { (res) => {
subIssues = res subIssues = res
}, },
@ -79,8 +81,21 @@
} }
} }
) )
parentQuery.query(
tracker.class.Issue,
{ _id: parentIssueId },
(res) => {
parentIssue = res[0]
},
{
limit: 1
}
)
} else { } else {
subIssuesQeury.unsubscribe() subIssuesQuery.unsubscribe()
parentQuery.unsubscribe()
parentIssue = undefined
subIssues = []
} }
$: parentStatus = parentIssue ? $statusStore.byId.get(parentIssue.status) : undefined $: parentStatus = parentIssue ? $statusStore.byId.get(parentIssue.status) : undefined

View File

@ -25,11 +25,7 @@ export async function issueIdentifierProvider (client: TxOperations, ref: Ref<Is
} }
export async function issueTitleProvider (client: TxOperations, ref: Ref<Doc>): Promise<string> { export async function issueTitleProvider (client: TxOperations, ref: Ref<Doc>): Promise<string> {
const object = await client.findOne( const object = await client.findOne(tracker.class.Issue, { _id: ref as Ref<Issue> })
tracker.class.Issue,
{ _id: ref as Ref<Issue> },
{ lookup: { space: tracker.class.Project } }
)
if (object === undefined) { if (object === undefined) {
return '' return ''