platform/plugins/recruit/src/index.ts
Ilya Sumbatyants a744cb1911
Create default kanban templates (#694)
Signed-off-by: Ilya Sumbatyants <ilya.sumb@gmail.com>
2021-12-21 10:42:18 +01:00

115 lines
2.7 KiB
TypeScript

//
// Copyright © 2020, 2021 Anticrm Platform Contributors.
//
// 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 { Person } from '@anticrm/contact'
import type { Class, Ref, Space, Timestamp } from '@anticrm/core'
import type { Asset, Plugin } from '@anticrm/platform'
import { plugin } from '@anticrm/platform'
import { CreateFn, createKanbanTemplate, KanbanTemplate, KanbanTemplateSpace, SpaceWithStates, Task } from '@anticrm/task'
/**
* @public
*/
export interface Vacancy extends SpaceWithStates {
fullDescription?: string
attachments?: number
dueTo?: Timestamp
location?: string
company?: string
}
/**
* @public
*/
export interface Candidates extends Space {}
/**
* @public
*/
export interface Candidate extends Person {
title?: string
applications?: number
onsite?: boolean
remote?: boolean
source?: string
}
/**
* @public
*/
export interface Applicant extends Task {
attachments?: number
comments?: number
}
/**
* @public
*/
export const recruitId = 'recruit' as Plugin
/**
* @public
*/
const recruit = plugin(recruitId, {
class: {
Applicant: '' as Ref<Class<Applicant>>,
Candidate: '' as Ref<Class<Candidate>>,
Candidates: '' as Ref<Class<Candidates>>,
Vacancy: '' as Ref<Class<Vacancy>>
},
icon: {
RecruitApplication: '' as Asset,
Vacancy: '' as Asset,
Location: '' as Asset,
Calendar: '' as Asset,
Create: '' as Asset,
Application: '' as Asset
},
space: {
VacancyTemplates: '' as Ref<KanbanTemplateSpace>
},
template: {
DefaultVacancy: '' as Ref<KanbanTemplate>
}
})
export default recruit
const defaultKanban = {
states: [
{ color: '#7C6FCD', title: 'HR Interview' },
{ color: '#6F7BC5', title: 'Technical Interview' },
{ color: '#77C07B', title: 'Test task' },
{ color: '#A5D179', title: 'Offer' }
],
doneStates: [
{ isWon: true, title: 'Won' },
{ isWon: false, title: 'Lost' }
]
}
/**
* @public
*/
export const createDefaultKanbanTemplate = async (create: CreateFn): Promise<void> => {
await createKanbanTemplate(create)({
kanbanId: recruit.template.DefaultVacancy,
space: recruit.space.VacancyTemplates,
title: 'Default vacancy',
states: defaultKanban.states,
doneStates: defaultKanban.doneStates
})
}