-
Notifications
You must be signed in to change notification settings - Fork 97
/
team-space-membership.ts
138 lines (126 loc) · 3.76 KB
/
team-space-membership.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import copy from 'fast-copy'
import { freezeSys, toPlainObject } from 'contentful-sdk-core'
import enhanceWithMethods from '../enhance-with-methods'
import { wrapCollection } from '../common-utils'
import {
DefaultElements,
MakeRequest,
MetaLinkProps,
MetaSysProps,
QueryOptions,
} from '../common-types'
export interface Options {
teamId?: string
query?: QueryOptions
}
export type TeamSpaceMembershipProps = {
/**
* System metadata
*/
sys: MetaSysProps & { team: { sys: MetaLinkProps }; space: { sys: MetaLinkProps } }
/**
* Is admin
*/
admin: boolean
/**
* Roles
*/
roles: { sys: MetaLinkProps }[]
}
export type CreateTeamSpaceMembershipProps = Omit<TeamSpaceMembershipProps, 'sys'>
export interface TeamSpaceMembership
extends TeamSpaceMembershipProps,
DefaultElements<TeamSpaceMembershipProps> {
/**
* Deletes this object on the server.
* @return Promise for the deletion. It contains no data, but the Promise error case should be handled.
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getSpace('<space_id>')
* .then((space) => space.getTeamSpaceMembership('<team_space_membership_id>'))
* .then((teamSpaceMembership) => teamSpaceMembership.delete())
* .then(() => console.log(`spaceMembership deleted.`))
* .catch(console.error)
* ```
*/
delete(): Promise<void>
/**
* Sends an update to the server with any changes made to the object's properties
* @return Object returned from the server with updated changes.
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getSpace('<space_id>')
* .then((space) => space.getTeamSpaceMembership('team_space_membership_id'))
* .then((teamSpaceMembership) => {
* item.roles = [
* {
* sys: {
* type: 'Link',
* linkType: 'Role',
* id: 'role_id'
* }
* }
* ]
* })
* .then((spaceMembership) => console.log(`spaceMembership ${spaceMembership.sys.id} updated.`))
* .catch(console.error)
* ```
*/
update(): Promise<TeamSpaceMembership>
}
function createTeamSpaceMembershipApi(makeRequest: MakeRequest) {
const getParams = (data: TeamSpaceMembershipProps) => ({
teamSpaceMembershipId: data.sys.id,
spaceId: data.sys.space.sys.id,
})
return {
update: function () {
const raw = this.toPlainObject() as TeamSpaceMembershipProps
return makeRequest({
entityType: 'TeamSpaceMembership',
action: 'update',
params: getParams(raw),
payload: raw,
}).then((data) => wrapTeamSpaceMembership(makeRequest, data))
},
delete: function del() {
const data = this.toPlainObject() as TeamSpaceMembershipProps
return makeRequest({
entityType: 'TeamSpaceMembership',
action: 'delete',
params: getParams(data),
})
},
}
}
/**
* @private
* @param makeRequest - function to make requests via an adapter
* @param data - Raw space membership data
* @return Wrapped team space membership data
*/
export function wrapTeamSpaceMembership(
makeRequest: MakeRequest,
data: TeamSpaceMembershipProps
): TeamSpaceMembership {
const teamSpaceMembership = toPlainObject(copy(data))
const teamSpaceMembershipWithMethods = enhanceWithMethods(
teamSpaceMembership,
createTeamSpaceMembershipApi(makeRequest)
)
return freezeSys(teamSpaceMembershipWithMethods)
}
/**
* @private
*/
export const wrapTeamSpaceMembershipCollection = wrapCollection(wrapTeamSpaceMembership)