// @flow import type { BaseModel } from './index'; import * as db from '../common/database'; import { DEFAULT_SIDEBAR_WIDTH, DEFAULT_PANE_WIDTH, DEFAULT_PANE_HEIGHT, ACTIVITY_DEBUG, DEPRECATED_ACTIVITY_INSOMNIA, } from '../common/constants'; export const name = 'Workspace Meta'; export const type = 'WorkspaceMeta'; export const prefix = 'wrkm'; export const canDuplicate = false; export const canSync = false; type BaseWorkspaceMeta = { activeActivity: string | null, activeEnvironmentId: string | null, activeRequestId: string | null, activeUnitTestSuiteId: string | null, cachedGitLastAuthor: string | null, cachedGitLastCommitTime: number | null, cachedGitRepositoryBranch: string | null, gitRepositoryId: string | null, hasSeen: boolean, paneHeight: number, paneWidth: number, previewHidden: boolean, sidebarFilter: string, sidebarHidden: boolean, sidebarWidth: number, }; export type WorkspaceMeta = BaseWorkspaceMeta & BaseModel; export function init(): BaseWorkspaceMeta { return { activeActivity: null, activeEnvironmentId: null, activeRequestId: null, activeUnitTestSuiteId: null, cachedGitLastAuthor: null, cachedGitLastCommitTime: null, cachedGitRepositoryBranch: null, gitRepositoryId: null, hasSeen: true, paneHeight: DEFAULT_PANE_HEIGHT, paneWidth: DEFAULT_PANE_WIDTH, parentId: null, previewHidden: false, sidebarFilter: '', sidebarHidden: false, sidebarWidth: DEFAULT_SIDEBAR_WIDTH, }; } export function migrate(doc: WorkspaceMeta): WorkspaceMeta { doc = _migrateInsomniaActivity(doc); return doc; } function _migrateInsomniaActivity(doc: WorkspaceMeta): WorkspaceMeta { if (doc.activeActivity === DEPRECATED_ACTIVITY_INSOMNIA) { doc.activeActivity = ACTIVITY_DEBUG; } return doc; } export function create(patch: $Shape = {}): Promise { if (!patch.parentId) { throw new Error(`New WorkspaceMeta missing parentId ${JSON.stringify(patch)}`); } return db.docCreate(type, patch); } export function update( workspaceMeta: WorkspaceMeta, patch: $Shape = {}, ): Promise { return db.docUpdate(workspaceMeta, patch); } export async function updateByParentId( workspaceId: string, patch: $Shape = {}, ): Promise { const meta = await getByParentId(workspaceId); return db.docUpdate(meta, patch); } export async function getByParentId(parentId: string): Promise { return db.getWhere(type, { parentId }); } export async function getByGitRepositoryId(gitRepositoryId: string): Promise { return db.getWhere(type, { gitRepositoryId }); } export async function getOrCreateByParentId(parentId: string): Promise { const doc = await getByParentId(parentId); return doc || this.create({ parentId }); } export function all(): Promise> { return db.all(type); }