diff --git a/models/request/src/index.ts b/models/request/src/index.ts index 1ba54ac7dc..e5e2039874 100644 --- a/models/request/src/index.ts +++ b/models/request/src/index.ts @@ -31,11 +31,12 @@ import { TypeString, UX } from '@hcengineering/model' -import core, { TAttachedDoc } from '@hcengineering/model-core' -import { Request, RequestDecisionComment, RequestStatus } from '@hcengineering/request' +import core, { TAttachedDoc, TClass } from '@hcengineering/model-core' +import { Request, RequestDecisionComment, RequestStatus, RequestPresenter } from '@hcengineering/request' import request from './plugin' import view from '@hcengineering/model-view' import { TComment } from '@hcengineering/model-chunter' +import { AnyComponent } from '@hcengineering/ui' export const DOMAIN_REQUEST = 'request' as Domain @@ -69,8 +70,13 @@ export class TRequest extends TAttachedDoc implements Request { @Mixin(request.mixin.RequestDecisionComment, chunter.class.Comment) export class TRequestDecisionComment extends TComment implements RequestDecisionComment {} +@Mixin(request.mixin.RequestPresenter, core.class.Class) +export class TRequestPresenter extends TClass implements RequestPresenter { + presenter!: AnyComponent +} + export function createModel (builder: Builder): void { - builder.createModel(TRequest, TRequestDecisionComment) + builder.createModel(TRequest, TRequestDecisionComment, TRequestPresenter) builder.mixin(request.class.Request, core.class.Class, view.mixin.ObjectEditor, { editor: request.component.EditRequest @@ -80,6 +86,10 @@ export function createModel (builder: Builder): void { presenter: request.component.RequestPresenter }) + builder.mixin(request.class.Request, core.class.Class, request.mixin.RequestPresenter, { + presenter: request.component.RequestView + }) + builder.createDoc( activity.class.TxViewlet, core.space.Model, diff --git a/models/request/src/plugin.ts b/models/request/src/plugin.ts index 6bd8e1a079..88060367ec 100644 --- a/models/request/src/plugin.ts +++ b/models/request/src/plugin.ts @@ -27,8 +27,7 @@ export default mergeIds(requestId, request, { RequestLabel: '' as AnyComponent }, component: { - EditRequest: '' as AnyComponent, - RequestPresenter: '' as AnyComponent + EditRequest: '' as AnyComponent }, ids: { TxRequestCreate: '' as Ref diff --git a/plugins/request-resources/src/components/RequestsPopup.svelte b/plugins/request-resources/src/components/RequestsPopup.svelte index dfcf87703e..351566792b 100644 --- a/plugins/request-resources/src/components/RequestsPopup.svelte +++ b/plugins/request-resources/src/components/RequestsPopup.svelte @@ -14,12 +14,11 @@ --> @@ -44,8 +68,8 @@ {#if requests.length > 0} - {#each requests as request (request._id)} - + {#each requests as request} + {/each} {:else} diff --git a/plugins/request-resources/src/index.ts b/plugins/request-resources/src/index.ts index 505c3f0580..e38eacb2d3 100644 --- a/plugins/request-resources/src/index.ts +++ b/plugins/request-resources/src/index.ts @@ -19,6 +19,7 @@ import TxCreateRequest from './components/activity/TxCreateRequest.svelte' import RequestLabel from './components/activity/TxRequestLabel.svelte' import EditRequest from './components/EditRequest.svelte' import RequestPresenter from './components/RequestPresenter.svelte' +import RequestView from './components/RequestView.svelte' export default async (): Promise => ({ activity: { @@ -28,6 +29,7 @@ export default async (): Promise => ({ component: { RequestsPopup, EditRequest, - RequestPresenter + RequestPresenter, + RequestView } }) diff --git a/plugins/request/src/index.ts b/plugins/request/src/index.ts index d16d083b2d..a833a6ecd1 100644 --- a/plugins/request/src/index.ts +++ b/plugins/request/src/index.ts @@ -47,6 +47,13 @@ export enum RequestStatus { Rejected = 'Rejected' } +/** + * @public + */ +export interface RequestPresenter extends Class { + presenter: AnyComponent +} + /** * @public */ @@ -60,10 +67,13 @@ const request = plugin(requestId, { Request: '' as Ref> }, mixin: { - RequestDecisionComment: '' as Ref> + RequestDecisionComment: '' as Ref>, + RequestPresenter: '' as Ref> }, component: { - RequestsPopup: '' as AnyComponent + RequestsPopup: '' as AnyComponent, + RequestPresenter: '' as AnyComponent, + RequestView: '' as AnyComponent }, string: { Requests: '' as IntlString