Skip to content

Commit

Permalink
feat: Add typings and expose metadata methods (#865)
Browse files Browse the repository at this point in the history
* feat: add typings and expose metadata methods

* chore: fix lint errors

* chore: address review issues
  • Loading branch information
colomolo authored Jul 19, 2021
1 parent 210a2e9 commit b0bbaad
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
18 changes: 15 additions & 3 deletions lib/entry.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Channel } from './channel'
import { MemoizedSignal } from './signal'
import { EntryAPI, EntryFieldInfo, TaskAPI } from './types'
import { EntryAPI, EntryFieldInfo, Metadata, TaskAPI } from './types'

const taskMethods: Array<keyof TaskAPI> = [
'getTask',
Expand All @@ -18,13 +18,19 @@ export default function createEntry(
): EntryAPI {
let sys = entryData.sys
const sysChanged = new MemoizedSignal(sys)
const entryMetadata = entryData.metadata
let metadata = entryData.metadata
const metadataChanged = new MemoizedSignal(metadata)

channel.addHandler('sysChanged', (_sys: any) => {
sys = _sys
sysChanged.dispatch(sys)
})

channel.addHandler('metadataChanged', (_metadata: Metadata) => {
metadata = _metadata
metadataChanged.dispatch(metadata)
})

const taskApi = {} as TaskAPI

taskMethods.forEach((methodName) => {
Expand All @@ -44,7 +50,13 @@ export default function createEntry(
acc[info.id] = createEntryField(info)
return acc
}, {}),
...(entryMetadata ? { metadata: entryMetadata } : {}),
...(metadata ? { metadata } : {}),
getMetadata() {
return metadata
},
onMetadataChanged(handler: VoidFunction) {
return metadataChanged.attach(handler)
},
...taskApi,
}
}
10 changes: 7 additions & 3 deletions lib/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ export interface EntrySys {
contentType: Link
}

export interface Metadata {
tags?: Link[]
}

/* Field API */
export interface FieldAPI {
/** The ID of a field is defined in an entry's content type. */
Expand Down Expand Up @@ -227,9 +231,9 @@ export interface EntryAPI extends TaskAPI {
* Optional metadata on an entry
* @deprecated
*/
metadata?: {
tags?: Link[]
}
metadata?: Metadata
getMetadata: () => Metadata | undefined
onMetadataChanged: (callback: (metadata?: Metadata) => void) => VoidFunction
}

/* Scheduled Actions */
Expand Down

0 comments on commit b0bbaad

Please sign in to comment.