// @flow import * as db from '../common/database'; import type { BaseModel } from './index'; export const name = 'Folder'; export const type = 'RequestGroup'; export const prefix = 'fld'; export const canDuplicate = true; export const canSync = true; type BaseRequestGroup = { name: string, description: string, environment: Object, environmentPropertyOrder: Object | null, metaSortKey: number, }; export type RequestGroup = BaseModel & BaseRequestGroup; export function init() { return { name: 'New Folder', description: '', environment: {}, environmentPropertyOrder: null, metaSortKey: -1 * Date.now(), }; } export function migrate(doc: RequestGroup) { return doc; } export function create(patch: Object = {}): Promise { if (!patch.parentId) { throw new Error('New RequestGroup missing `parentId`: ' + JSON.stringify(patch)); } return db.docCreate(type, patch); } export function update(requestGroup: RequestGroup, patch: Object = {}): Promise { return db.docUpdate(requestGroup, patch); } export function getById(id: string): Promise { return db.get(type, id); } export function findByParentId(parentId: string): Promise> { return db.find(type, { parentId }); } export function remove(requestGroup: RequestGroup): Promise { return db.remove(requestGroup); } export function all(): Promise> { return db.all(type); } export async function duplicate(requestGroup: RequestGroup): Promise { const name = `${requestGroup.name} (Copy)`; // Get sort key of next request const q = { metaSortKey: { $gt: requestGroup.metaSortKey } }; const [nextRequestGroup] = await db.find(type, q, { metaSortKey: 1 }); const nextSortKey = nextRequestGroup ? nextRequestGroup.metaSortKey : requestGroup.metaSortKey + 100; // Calculate new sort key const sortKeyIncrement = (nextSortKey - requestGroup.metaSortKey) / 2; const metaSortKey = requestGroup.metaSortKey + sortKeyIncrement; return db.duplicate(requestGroup, { name, metaSortKey }); }