@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.
- package/dist/cjs/LocalePublishingEntityStatusBadge/LocalePublishingPopover.js +2 -9
- package/dist/cjs/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.js +2 -9
- package/dist/cjs/hooks/useActiveReleaseLocalesStatuses.js +13 -10
- package/dist/cjs/hooks/useActiveReleaseLocalesStatuses.spec.js +236 -245
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/utils/{getEntryReleaseStatus.js → getEntityReleaseStatus.js} +4 -4
- package/dist/cjs/utils/{getPreviousReleaseEntryVersion.js → getPreviousReleaseEntity.js} +5 -5
- package/dist/esm/LocalePublishingEntityStatusBadge/LocalePublishingPopover.js +2 -9
- package/dist/esm/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.js +2 -9
- package/dist/esm/hooks/useActiveReleaseLocalesStatuses.js +13 -10
- package/dist/esm/hooks/useActiveReleaseLocalesStatuses.spec.js +236 -245
- package/dist/esm/index.js +1 -1
- package/dist/esm/utils/{getEntryReleaseStatus.js → getEntityReleaseStatus.js} +2 -2
- package/dist/esm/utils/{getPreviousReleaseEntryVersion.js → getPreviousReleaseEntity.js} +3 -3
- package/dist/types/LocalePublishingEntityStatusBadge/LocalePublishingPopover.d.ts +1 -1
- package/dist/types/hooks/useActiveReleaseLocalesStatuses.d.ts +5 -4
- package/dist/types/index.d.ts +1 -1
- package/dist/types/types.d.ts +2 -2
- package/dist/types/utils/{getEntryReleaseStatus.d.ts → getEntityReleaseStatus.d.ts} +2 -2
- package/dist/types/utils/{getPreviousReleaseEntryVersion.d.ts → getPreviousReleaseEntity.d.ts} +3 -2
- package/package.json +7 -7
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { useCallback, useRef, useState } from 'react';
|
|
2
|
-
import { Badge, Flex,
|
|
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 {
|
|
3
|
-
export const useActiveReleaseLocalesStatuses = ({
|
|
4
|
-
const previousReleaseEntity = useMemo(()=>
|
|
5
|
-
|
|
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
|
-
|
|
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 ===
|
|
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
|
-
|
|
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 (
|
|
46
|
-
const previousStatus =
|
|
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
|
-
|
|
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 {
|
|
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
|
|
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:
|
|
18
|
-
id:
|
|
30
|
+
linkType: entityType,
|
|
31
|
+
id: entityId
|
|
19
32
|
}
|
|
20
33
|
},
|
|
21
34
|
action
|
|
22
35
|
});
|
|
23
|
-
const createEntryBasedRelease = ({
|
|
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
|
-
|
|
34
|
-
action
|
|
46
|
+
entityId,
|
|
47
|
+
action,
|
|
48
|
+
entityType
|
|
35
49
|
})
|
|
36
50
|
]
|
|
37
51
|
}
|
|
38
52
|
});
|
|
39
|
-
const createLocaleBasedReleaseEntity = ({
|
|
53
|
+
const createLocaleBasedReleaseEntity = ({ entityId = 'entry-1', verb = 'add', entityType = 'Entry' })=>({
|
|
40
54
|
entity: {
|
|
41
55
|
sys: {
|
|
42
56
|
type: 'Link',
|
|
43
|
-
linkType:
|
|
44
|
-
id:
|
|
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 = ({
|
|
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
|
-
|
|
66
|
-
verb
|
|
79
|
+
entityId,
|
|
80
|
+
verb,
|
|
81
|
+
entityType
|
|
67
82
|
})
|
|
68
83
|
]
|
|
69
84
|
}
|
|
70
85
|
});
|
|
71
|
-
jest.mock('../utils/
|
|
72
|
-
|
|
86
|
+
jest.mock('../utils/getPreviousReleaseEntity', ()=>({
|
|
87
|
+
getPreviousReleaseEntity: jest.fn()
|
|
73
88
|
}));
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
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
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
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
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
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
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
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/
|
|
21
|
+
export * from './utils/getEntityReleaseStatus';
|
|
22
22
|
export * from './utils/parseReleaseParameters';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { determineReleaseAction } from './determineReleaseAction';
|
|
2
|
-
export function
|
|
3
|
-
const { releaseAction, entityItem, addLocales, removeLocales } = determineReleaseAction(
|
|
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
|