platform/plugins/time/src/index.ts
Alexey Zinoviev 0fc0115c99
UBERF-7495: Global editor kit extensions (#6057)
Signed-off-by: Alexey Zinoviev <alexey.zinoviev@xored.com>
2024-07-12 15:42:13 +07:00

164 lines
3.4 KiB
TypeScript

//
// Copyright © 2023 Hardcore Engineering Inc.
//
// Licensed under the Eclipse Public License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. You may
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
import type { Asset, Plugin, Resource } from '@hcengineering/platform'
import {
AttachedDoc,
Class,
CollectionSize,
Doc,
Hierarchy,
Markup,
Mixin,
Ref,
Space,
Timestamp,
Type
} from '@hcengineering/core'
import { IntlString, plugin } from '@hcengineering/platform'
import { Event, Visibility } from '@hcengineering/calendar'
import { AnyComponent } from '@hcengineering/ui'
import { Person } from '@hcengineering/contact'
import type { Rank } from '@hcengineering/rank'
/**
* @public
*/
export const timeId = 'time' as Plugin
/**
* @public
*/
export interface WorkSlot extends Event {
attachedTo: Ref<ToDo>
attachedToClass: Ref<Class<ToDo>>
}
/**
* @public
*/
export interface ToDo extends AttachedDoc {
attachedTo: Ref<Doc>
attachedToClass: Ref<Class<Doc>>
workslots: number
title: string
description: Markup
dueDate?: Timestamp | null
priority: ToDoPriority
visibility: Visibility
doneOn?: Timestamp | null
user: Ref<Person>
attachedSpace?: Ref<Space>
labels?: number
rank: Rank
}
/**
* @public
*/
export interface Todoable {
todos?: CollectionSize<ToDo>
}
/**
* @public
*/
export enum ToDoPriority {
High,
Medium,
Low,
NoPriority,
Urgent
}
/**
* @public
*/
export interface ProjectToDo extends ToDo {
attachedSpace: Ref<Space>
}
/**
* @public
*/
export interface ItemPresenter extends Class<Doc> {
presenter: AnyComponent
}
/**
* @public
*/
export type TodoDoneTester = (
client: {
findAll: Storage['findAll']
hierarchy: Hierarchy
},
todo: ToDo
) => Promise<boolean>
/**
* A helper class to control classic project todo automation.
*/
export interface TodoAutomationHelper extends Doc {
onDoneTester: Resource<TodoDoneTester>
}
export default plugin(timeId, {
component: {
Me: '' as AnyComponent,
Team: '' as AnyComponent,
EditToDo: '' as AnyComponent
},
class: {
WorkSlot: '' as Ref<Class<WorkSlot>>,
ToDo: '' as Ref<Class<ToDo>>,
ProjectToDo: '' as Ref<Class<ProjectToDo>>,
TypeToDoPriority: '' as Ref<Class<Type<ToDoPriority>>>,
TodoAutomationHelper: '' as Ref<Class<TodoAutomationHelper>>
},
mixin: {
ItemPresenter: '' as Ref<Mixin<ItemPresenter>>
},
ids: {
NotAttached: '' as Ref<Doc>
},
space: {
ToDos: '' as Ref<Space>
},
icon: {
Team: '' as Asset,
Hashtag: '' as Asset,
Inbox: '' as Asset,
Calendar: '' as Asset,
Flag: '' as Asset,
FilledFlag: '' as Asset,
Planned: '' as Asset,
All: '' as Asset
},
string: {
Planner: '' as IntlString,
Calendar: '' as IntlString,
Agenda: '' as IntlString,
Me: '' as IntlString,
Team: '' as IntlString,
WeekCalendar: '' as IntlString,
DayCalendar: '' as IntlString,
CreatedToDo: '' as IntlString,
AddToDo: '' as IntlString,
NewToDoDetails: '' as IntlString,
ToDo: '' as IntlString
}
})