@contentful/field-editor-shared 2.11.1 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/dist/cjs/LocalePublishingEntityStatusBadge/LocalePublishingPopover.js +2 -9
  2. package/dist/cjs/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.js +2 -9
  3. package/dist/cjs/hooks/useActiveReleaseLocalesStatuses.js +13 -10
  4. package/dist/cjs/hooks/useActiveReleaseLocalesStatuses.spec.js +236 -245
  5. package/dist/cjs/index.js +1 -1
  6. package/dist/cjs/utils/{getEntryReleaseStatus.js → getEntityReleaseStatus.js} +4 -4
  7. package/dist/cjs/utils/{getPreviousReleaseEntryVersion.js → getPreviousReleaseEntity.js} +5 -5
  8. package/dist/esm/LocalePublishingEntityStatusBadge/LocalePublishingPopover.js +2 -9
  9. package/dist/esm/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.js +2 -9
  10. package/dist/esm/hooks/useActiveReleaseLocalesStatuses.js +13 -10
  11. package/dist/esm/hooks/useActiveReleaseLocalesStatuses.spec.js +236 -245
  12. package/dist/esm/index.js +1 -1
  13. package/dist/esm/utils/{getEntryReleaseStatus.js → getEntityReleaseStatus.js} +2 -2
  14. package/dist/esm/utils/{getPreviousReleaseEntryVersion.js → getPreviousReleaseEntity.js} +3 -3
  15. package/dist/types/LocalePublishingEntityStatusBadge/LocalePublishingPopover.d.ts +1 -1
  16. package/dist/types/hooks/useActiveReleaseLocalesStatuses.d.ts +5 -4
  17. package/dist/types/index.d.ts +1 -1
  18. package/dist/types/types.d.ts +2 -2
  19. package/dist/types/utils/{getEntryReleaseStatus.d.ts → getEntityReleaseStatus.d.ts} +2 -2
  20. package/dist/types/utils/{getPreviousReleaseEntryVersion.d.ts → getPreviousReleaseEntity.d.ts} +3 -2
  21. package/package.json +7 -7
@@ -1,5 +1,6 @@
1
1
  import React, { useCallback, useRef, useState } from 'react';
2
- import { Badge, Flex, generateIcon, Popover, Skeleton } from '@contentful/f36-components';
2
+ import { Badge, Flex, Popover, Skeleton } from '@contentful/f36-components';
3
+ import { ArrowDownIcon } from '@contentful/f36-icons';
3
4
  import tokens from '@contentful/f36-tokens';
4
5
  import { cx, css } from 'emotion';
5
6
  import { RELEASE_BADGES } from './constants';
@@ -153,14 +154,6 @@ export function ReleaseEntityStatusPopover({ releaseLocalesStatusMap, activeLoca
153
154
  const status = determineBadgeStatus(releaseLocalesStatusMap, activeLocales);
154
155
  const ariaLabel = status.secondary ? 'Multiple statuses' : status.primary;
155
156
  const wrapperClass = generateDynamicStyles(status);
156
- const ArrowDownIcon = generateIcon({
157
- name: 'ArrowDownIcon',
158
- viewBox: '0 0 12 20',
159
- path: /*#__PURE__*/ React.createElement("path", {
160
- d: "M3.03076 8C2.20109 8 1.73228 8.95209 2.23814 9.60971L5.20727 13.4696C5.60757 13.99 6.39223 13.99 6.79252 13.4696L9.76166 9.60971C10.2675 8.95209 9.79871 8 8.96904 8L3.03076 8Z",
161
- fill: "currentColor"
162
- })
163
- });
164
157
  if (isLoading) {
165
158
  return /*#__PURE__*/ React.createElement(Skeleton.Container, {
166
159
  className: styles.skeletonBadge
@@ -1,20 +1,23 @@
1
1
  import { useCallback, useMemo } from 'react';
2
- import { getPreviousReleaseEntryVersion } from '../utils/getPreviousReleaseEntryVersion';
3
- export const useActiveReleaseLocalesStatuses = ({ currentEntryDraft, entryId, releaseVersionMap, locales, activeRelease, releases })=>{
4
- const previousReleaseEntity = useMemo(()=>getPreviousReleaseEntryVersion({
5
- entryId,
2
+ import { getPreviousReleaseEntity } from '../utils/getPreviousReleaseEntity';
3
+ export const useActiveReleaseLocalesStatuses = ({ currentEntityDraft, entityId, entityType, releaseVersionMap, locales, activeRelease, releases })=>{
4
+ const previousReleaseEntity = useMemo(()=>getPreviousReleaseEntity({
5
+ entityId,
6
+ entityType,
6
7
  releaseVersionMap,
7
8
  activeRelease,
8
9
  releases
9
10
  }).previousReleaseEntity, [
10
- entryId,
11
+ entityId,
12
+ entityType,
11
13
  releaseVersionMap,
12
14
  activeRelease,
13
15
  releases
14
16
  ]);
15
- const activeReleaseReleaseEntity = useMemo(()=>activeRelease?.entities.items.find((entity)=>entity.entity.sys.id === entryId), [
17
+ const activeReleaseReleaseEntity = useMemo(()=>activeRelease?.entities.items.find((entity)=>entity.entity.sys.id === entityId && entity.entity.sys.linkType === entityType), [
16
18
  activeRelease?.entities.items,
17
- entryId
19
+ entityId,
20
+ entityType
18
21
  ]);
19
22
  const getLocaleStatus = useCallback((localeCode)=>{
20
23
  if (!activeReleaseReleaseEntity) {
@@ -42,8 +45,8 @@ export const useActiveReleaseLocalesStatuses = ({ currentEntryDraft, entryId, re
42
45
  return acc;
43
46
  }
44
47
  if (getLocaleStatus(locale.code) === 'draft') {
45
- if (currentEntryDraft?.sys.fieldStatus) {
46
- const previousStatus = currentEntryDraft.sys.fieldStatus['*'][locale.code];
48
+ if (currentEntityDraft?.sys.fieldStatus) {
49
+ const previousStatus = currentEntityDraft.sys.fieldStatus['*'][locale.code];
47
50
  if (previousStatus === 'published' || previousStatus === 'changed') {
48
51
  acc.set(locale.code, {
49
52
  status: 'becomesDraft',
@@ -90,7 +93,7 @@ export const useActiveReleaseLocalesStatuses = ({ currentEntryDraft, entryId, re
90
93
  locales,
91
94
  activeReleaseReleaseEntity,
92
95
  getLocaleStatus,
93
- currentEntryDraft?.sys.fieldStatus,
96
+ currentEntityDraft?.sys.fieldStatus,
94
97
  previousReleaseEntity
95
98
  ]);
96
99
  return {
@@ -1,8 +1,10 @@
1
1
  import { renderHook } from '@testing-library/react';
2
- import { getPreviousReleaseEntryVersion } from '../utils/getPreviousReleaseEntryVersion';
2
+ import { getPreviousReleaseEntity } from '../utils/getPreviousReleaseEntity';
3
3
  import { useActiveReleaseLocalesStatuses } from './useActiveReleaseLocalesStatuses';
4
- const buildEntry = (status)=>({
4
+ const buildEntry = (status, id = 'entry-1')=>({
5
5
  sys: {
6
+ id,
7
+ type: 'Entry',
6
8
  fieldStatus: {
7
9
  '*': {
8
10
  'en-US': status
@@ -10,17 +12,28 @@ const buildEntry = (status)=>({
10
12
  }
11
13
  }
12
14
  });
13
- const createEntryBasedReleaseEntity = ({ entryId = 'entry-1', action = 'publish' })=>({
15
+ const buildAsset = (status, id = 'asset-1')=>({
16
+ sys: {
17
+ id,
18
+ type: 'Asset',
19
+ fieldStatus: {
20
+ '*': {
21
+ 'en-US': status
22
+ }
23
+ }
24
+ }
25
+ });
26
+ const createEntryBasedReleaseEntity = ({ entityId = 'entry-1', action = 'publish', entityType = 'Entry' })=>({
14
27
  entity: {
15
28
  sys: {
16
29
  type: 'Link',
17
- linkType: 'Entry',
18
- id: entryId
30
+ linkType: entityType,
31
+ id: entityId
19
32
  }
20
33
  },
21
34
  action
22
35
  });
23
- const createEntryBasedRelease = ({ entryId, action } = {})=>({
36
+ const createEntryBasedRelease = ({ entityId, action, entityType = 'Entry' } = {})=>({
24
37
  title: 'Release 1',
25
38
  sys: {
26
39
  id: 'release-1',
@@ -30,18 +43,19 @@ const createEntryBasedRelease = ({ entryId, action } = {})=>({
30
43
  entities: {
31
44
  items: [
32
45
  createEntryBasedReleaseEntity({
33
- entryId,
34
- action
46
+ entityId,
47
+ action,
48
+ entityType
35
49
  })
36
50
  ]
37
51
  }
38
52
  });
39
- const createLocaleBasedReleaseEntity = ({ entryId = 'entry-1', verb = 'add' })=>({
53
+ const createLocaleBasedReleaseEntity = ({ entityId = 'entry-1', verb = 'add', entityType = 'Entry' })=>({
40
54
  entity: {
41
55
  sys: {
42
56
  type: 'Link',
43
- linkType: 'Entry',
44
- id: entryId
57
+ linkType: entityType,
58
+ id: entityId
45
59
  }
46
60
  },
47
61
  [verb]: {
@@ -52,7 +66,7 @@ const createLocaleBasedReleaseEntity = ({ entryId = 'entry-1', verb = 'add' })=>
52
66
  }
53
67
  }
54
68
  });
55
- const createLocaleBasedRelease = ({ entryId, verb } = {})=>({
69
+ const createLocaleBasedRelease = ({ entityId, verb, entityType = 'Entry' } = {})=>({
56
70
  title: 'Release 1',
57
71
  sys: {
58
72
  id: 'release-1',
@@ -62,263 +76,240 @@ const createLocaleBasedRelease = ({ entryId, verb } = {})=>({
62
76
  entities: {
63
77
  items: [
64
78
  createLocaleBasedReleaseEntity({
65
- entryId,
66
- verb
79
+ entityId,
80
+ verb,
81
+ entityType
67
82
  })
68
83
  ]
69
84
  }
70
85
  });
71
- jest.mock('../utils/getPreviousReleaseEntryVersion', ()=>({
72
- getPreviousReleaseEntryVersion: jest.fn()
86
+ jest.mock('../utils/getPreviousReleaseEntity', ()=>({
87
+ getPreviousReleaseEntity: jest.fn()
73
88
  }));
74
- const baseParams = {
75
- entryId: 'entry-1',
76
- locales: [
77
- {
78
- code: 'en-US'
79
- }
80
- ],
81
- isActiveReleaseLoading: false,
82
- releaseVersionMap: new Map(),
83
- releases: {
84
- items: []
85
- }
86
- };
89
+ const ENTITY_TYPES = [
90
+ 'Entry',
91
+ 'Asset'
92
+ ];
87
93
  describe('useActiveReleaseLocalesStatuses', ()=>{
88
94
  beforeEach(()=>{
89
95
  jest.clearAllMocks();
90
96
  });
91
- describe('with entry based publishing', ()=>{
92
- it('returns Will publish status when active release has publish action', ()=>{
93
- getPreviousReleaseEntryVersion.mockReturnValue({
94
- previousReleaseEntity: createEntryBasedReleaseEntity({
95
- entryId: 'entry-1',
96
- action: 'unpublish'
97
- }),
98
- previousEntryVersion: {
99
- sys: {
100
- fieldStatus: {
101
- '*': {
102
- 'en-US': 'draft'
103
- }
104
- }
105
- }
106
- }
107
- });
108
- const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
109
- ...baseParams,
110
- activeRelease: createEntryBasedRelease(),
111
- currentEntryDraft: buildEntry('draft')
112
- }));
113
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
114
- variant: 'positive',
115
- status: 'willPublish',
116
- label: 'Will publish',
117
- locale: {
97
+ ENTITY_TYPES.forEach((entityType)=>{
98
+ const entityId = entityType === 'Entry' ? 'entry-1' : 'asset-1';
99
+ const baseParams = {
100
+ entityId,
101
+ entityType,
102
+ locales: [
103
+ {
118
104
  code: 'en-US'
119
105
  }
120
- });
121
- });
122
- it('returns Becomes draft status when previous version has published locales and active version has unpublish action', ()=>{
123
- getPreviousReleaseEntryVersion.mockReturnValue({
124
- previousReleaseEntity: createEntryBasedReleaseEntity({
125
- entryId: 'entry-1',
126
- action: 'publish'
127
- }),
128
- previousEntryVersion: {
129
- sys: {
130
- fieldStatus: {
131
- '*': {
132
- 'en-US': 'published'
133
- }
134
- }
106
+ ],
107
+ isActiveReleaseLoading: false,
108
+ releaseVersionMap: new Map(),
109
+ releases: {
110
+ items: []
111
+ }
112
+ };
113
+ describe(`${entityType} with entry based publishing`, ()=>{
114
+ it('returns Will publish status when active release has publish action', ()=>{
115
+ getPreviousReleaseEntity.mockReturnValue({
116
+ previousReleaseEntity: createEntryBasedReleaseEntity({
117
+ entityId,
118
+ action: 'unpublish',
119
+ entityType
120
+ })
121
+ });
122
+ const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
123
+ ...baseParams,
124
+ activeRelease: createEntryBasedRelease({
125
+ entityId,
126
+ entityType
127
+ }),
128
+ currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
129
+ }));
130
+ expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
131
+ variant: 'positive',
132
+ status: 'willPublish',
133
+ label: 'Will publish',
134
+ locale: {
135
+ code: 'en-US'
135
136
  }
136
- }
137
- });
138
- const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
139
- ...baseParams,
140
- activeRelease: createEntryBasedRelease({
141
- action: 'unpublish'
142
- }),
143
- currentEntryDraft: buildEntry('published')
144
- }));
145
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
146
- variant: 'warning',
147
- status: 'becomesDraft',
148
- label: 'Becomes draft',
149
- locale: {
150
- code: 'en-US'
151
- }
137
+ });
152
138
  });
153
- });
154
- it('returns Remains draft status when previous version has draft locales and active version has unpublish action', ()=>{
155
- getPreviousReleaseEntryVersion.mockReturnValue({
156
- previousReleaseEntity: createEntryBasedReleaseEntity({
157
- action: 'unpublish'
158
- }),
159
- previousEntryVersion: {
160
- sys: {
161
- fieldStatus: {
162
- '*': {
163
- 'en-US': 'draft'
164
- }
165
- }
139
+ it('returns Becomes draft status when previous version has published locales and active version has unpublish action', ()=>{
140
+ getPreviousReleaseEntity.mockReturnValue({
141
+ previousReleaseEntity: createEntryBasedReleaseEntity({
142
+ entityId,
143
+ action: 'publish',
144
+ entityType
145
+ })
146
+ });
147
+ const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
148
+ ...baseParams,
149
+ activeRelease: createEntryBasedRelease({
150
+ action: 'unpublish',
151
+ entityId,
152
+ entityType
153
+ }),
154
+ currentEntityDraft: entityType === 'Entry' ? buildEntry('published') : buildAsset('published')
155
+ }));
156
+ expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
157
+ variant: 'warning',
158
+ status: 'becomesDraft',
159
+ label: 'Becomes draft',
160
+ locale: {
161
+ code: 'en-US'
166
162
  }
167
- }
168
- });
169
- const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
170
- ...baseParams,
171
- activeRelease: createEntryBasedRelease({
172
- action: 'unpublish'
173
- }),
174
- currentEntryDraft: buildEntry('draft')
175
- }));
176
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
177
- variant: 'secondary',
178
- status: 'remainsDraft',
179
- label: 'Remains draft',
180
- locale: {
181
- code: 'en-US'
182
- }
163
+ });
183
164
  });
184
- });
185
- it('returns Not in release status when entry is not in the release', ()=>{
186
- getPreviousReleaseEntryVersion.mockReturnValue({
187
- previousReleaseEntity: undefined,
188
- previousEntryVersion: undefined
189
- });
190
- const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
191
- ...baseParams,
192
- activeRelease: createEntryBasedRelease({
193
- entryId: 'entry-2',
194
- action: 'publish'
195
- }),
196
- currentEntryDraft: buildEntry('draft')
197
- }));
198
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
199
- variant: 'secondary',
200
- status: 'notInRelease',
201
- label: 'Not in release',
202
- locale: {
203
- code: 'en-US'
204
- }
205
- });
206
- });
207
- });
208
- describe('with locale based publishing', ()=>{
209
- it('returns Will publish status when active release has publish action', ()=>{
210
- getPreviousReleaseEntryVersion.mockReturnValue({
211
- previousReleaseEntity: createLocaleBasedReleaseEntity({
212
- entryId: 'entry-1',
213
- verb: 'remove'
214
- }),
215
- previousEntryVersion: {
216
- sys: {
217
- fieldStatus: {
218
- '*': {
219
- 'en-US': 'draft'
220
- }
221
- }
165
+ it('returns Remains draft status when previous version has draft locales and active version has unpublish action', ()=>{
166
+ getPreviousReleaseEntity.mockReturnValue({
167
+ previousReleaseEntity: createEntryBasedReleaseEntity({
168
+ action: 'unpublish',
169
+ entityType,
170
+ entityId
171
+ })
172
+ });
173
+ const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
174
+ ...baseParams,
175
+ activeRelease: createEntryBasedRelease({
176
+ action: 'unpublish',
177
+ entityId,
178
+ entityType
179
+ }),
180
+ currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
181
+ }));
182
+ expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
183
+ variant: 'secondary',
184
+ status: 'remainsDraft',
185
+ label: 'Remains draft',
186
+ locale: {
187
+ code: 'en-US'
222
188
  }
223
- }
224
- });
225
- const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
226
- ...baseParams,
227
- activeRelease: createLocaleBasedRelease(),
228
- currentEntryDraft: buildEntry('draft')
229
- }));
230
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
231
- variant: 'positive',
232
- status: 'willPublish',
233
- label: 'Will publish',
234
- locale: {
235
- code: 'en-US'
236
- }
189
+ });
237
190
  });
238
- });
239
- it('returns Becomes draft status when previous version has published locales and active version has unpublish action', ()=>{
240
- getPreviousReleaseEntryVersion.mockReturnValue({
241
- previousReleaseEntity: createLocaleBasedReleaseEntity({
242
- entryId: 'entry-1',
243
- verb: 'add'
244
- }),
245
- previousEntryVersion: {
246
- sys: {
247
- fieldStatus: {
248
- '*': {
249
- 'en-US': 'published'
250
- }
251
- }
191
+ it('returns Not in release status when entity is not in the release', ()=>{
192
+ getPreviousReleaseEntity.mockReturnValue({
193
+ previousReleaseEntity: undefined
194
+ });
195
+ const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
196
+ ...baseParams,
197
+ activeRelease: createEntryBasedRelease({
198
+ entityId: entityType === 'Entry' ? 'entry-2' : 'asset-2',
199
+ action: 'publish',
200
+ entityType
201
+ }),
202
+ currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
203
+ }));
204
+ expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
205
+ variant: 'secondary',
206
+ status: 'notInRelease',
207
+ label: 'Not in release',
208
+ locale: {
209
+ code: 'en-US'
252
210
  }
253
- }
254
- });
255
- const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
256
- ...baseParams,
257
- activeRelease: createLocaleBasedRelease({
258
- verb: 'remove'
259
- }),
260
- currentEntryDraft: buildEntry('published')
261
- }));
262
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
263
- variant: 'warning',
264
- status: 'becomesDraft',
265
- label: 'Becomes draft',
266
- locale: {
267
- code: 'en-US'
268
- }
211
+ });
269
212
  });
270
213
  });
271
- it('returns Remains draft status when previous version has draft locales and active version has unpublish action', ()=>{
272
- getPreviousReleaseEntryVersion.mockReturnValue({
273
- previousReleaseEntity: createLocaleBasedReleaseEntity({
274
- verb: 'remove'
275
- }),
276
- previousEntryVersion: {
277
- sys: {
278
- fieldStatus: {
279
- '*': {
280
- 'en-US': 'draft'
281
- }
282
- }
214
+ describe(`${entityType} with locale based publishing`, ()=>{
215
+ it('returns Will publish status when active release has publish action', ()=>{
216
+ getPreviousReleaseEntity.mockReturnValue({
217
+ previousReleaseEntity: createLocaleBasedReleaseEntity({
218
+ entityId,
219
+ verb: 'remove',
220
+ entityType
221
+ })
222
+ });
223
+ const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
224
+ ...baseParams,
225
+ activeRelease: createLocaleBasedRelease({
226
+ entityId,
227
+ entityType
228
+ }),
229
+ currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
230
+ }));
231
+ expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
232
+ variant: 'positive',
233
+ status: 'willPublish',
234
+ label: 'Will publish',
235
+ locale: {
236
+ code: 'en-US'
283
237
  }
284
- }
238
+ });
285
239
  });
286
- const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
287
- ...baseParams,
288
- activeRelease: createLocaleBasedRelease({
289
- verb: 'remove'
290
- }),
291
- currentEntryDraft: buildEntry('draft')
292
- }));
293
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
294
- variant: 'secondary',
295
- status: 'remainsDraft',
296
- label: 'Remains draft',
297
- locale: {
298
- code: 'en-US'
299
- }
240
+ it('returns Becomes draft status when previous version has published locales and active version has unpublish action', ()=>{
241
+ getPreviousReleaseEntity.mockReturnValue({
242
+ previousReleaseEntity: createLocaleBasedReleaseEntity({
243
+ entityId: 'entry-1',
244
+ verb: 'add',
245
+ entityType
246
+ })
247
+ });
248
+ const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
249
+ ...baseParams,
250
+ activeRelease: createLocaleBasedRelease({
251
+ verb: 'remove',
252
+ entityId,
253
+ entityType
254
+ }),
255
+ currentEntityDraft: entityType === 'Entry' ? buildEntry('published') : buildAsset('published')
256
+ }));
257
+ expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
258
+ variant: 'warning',
259
+ status: 'becomesDraft',
260
+ label: 'Becomes draft',
261
+ locale: {
262
+ code: 'en-US'
263
+ }
264
+ });
300
265
  });
301
- });
302
- it('returns Not in release status when entry is not in the release', ()=>{
303
- getPreviousReleaseEntryVersion.mockReturnValue({
304
- previousReleaseEntity: undefined,
305
- previousEntryVersion: undefined
266
+ it('returns Remains draft status when previous version has draft locales and active version has unpublish action', ()=>{
267
+ getPreviousReleaseEntity.mockReturnValue({
268
+ previousReleaseEntity: createLocaleBasedReleaseEntity({
269
+ verb: 'remove',
270
+ entityId,
271
+ entityType
272
+ })
273
+ });
274
+ const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
275
+ ...baseParams,
276
+ activeRelease: createLocaleBasedRelease({
277
+ verb: 'remove',
278
+ entityId,
279
+ entityType
280
+ }),
281
+ currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
282
+ }));
283
+ expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
284
+ variant: 'secondary',
285
+ status: 'remainsDraft',
286
+ label: 'Remains draft',
287
+ locale: {
288
+ code: 'en-US'
289
+ }
290
+ });
306
291
  });
307
- const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
308
- ...baseParams,
309
- activeRelease: createLocaleBasedRelease({
310
- entryId: 'entry-2',
311
- verb: 'add'
312
- }),
313
- currentEntryDraft: buildEntry('draft')
314
- }));
315
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
316
- variant: 'secondary',
317
- status: 'notInRelease',
318
- label: 'Not in release',
319
- locale: {
320
- code: 'en-US'
321
- }
292
+ it('returns Not in release status when entry is not in the release', ()=>{
293
+ getPreviousReleaseEntity.mockReturnValue({
294
+ previousReleaseEntity: undefined
295
+ });
296
+ const { result } = renderHook(()=>useActiveReleaseLocalesStatuses({
297
+ ...baseParams,
298
+ activeRelease: createLocaleBasedRelease({
299
+ entityId: entityType === 'Entry' ? 'entry-2' : 'asset-2',
300
+ entityType,
301
+ verb: 'add'
302
+ }),
303
+ currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
304
+ }));
305
+ expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
306
+ variant: 'secondary',
307
+ status: 'notInRelease',
308
+ label: 'Not in release',
309
+ locale: {
310
+ code: 'en-US'
311
+ }
312
+ });
322
313
  });
323
314
  });
324
315
  });
package/dist/esm/index.js CHANGED
@@ -18,5 +18,5 @@ export * from './hooks/useLocalePublishStatus';
18
18
  export * from './LocalePublishingEntityStatusBadge';
19
19
  export * from './ReleaseEntityStatusBadge';
20
20
  export * from './utils/determineReleaseAction';
21
- export * from './utils/getEntryReleaseStatus';
21
+ export * from './utils/getEntityReleaseStatus';
22
22
  export * from './utils/parseReleaseParameters';
@@ -1,6 +1,6 @@
1
1
  import { determineReleaseAction } from './determineReleaseAction';
2
- export function getEntryReleaseStatus(entryId, locales, release) {
3
- const { releaseAction, entityItem, addLocales, removeLocales } = determineReleaseAction(entryId, release);
2
+ export function getEntityReleaseStatus(entityId, locales, release) {
3
+ const { releaseAction, entityItem, addLocales, removeLocales } = determineReleaseAction(entityId, release);
4
4
  if (releaseAction === 'not-in-release' || !entityItem) {
5
5
  return {
6
6
  releaseAction