@contentful/field-editor-shared 2.12.2 → 2.13.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/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.js +5 -14
- package/dist/cjs/ReleaseEntityStatusBadge/constants.js +7 -0
- package/dist/cjs/hooks/useLocalePublishStatus.js +7 -22
- package/dist/cjs/hooks/useReleaseStatus.js +137 -0
- package/dist/cjs/hooks/{useActiveReleaseLocalesStatuses.spec.js → useReleaseStatus.spec.js} +91 -99
- package/dist/cjs/index.js +1 -2
- package/dist/cjs/utils/sanitizeLocales.js +20 -0
- package/dist/esm/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.js +6 -15
- package/dist/esm/ReleaseEntityStatusBadge/constants.js +7 -0
- package/dist/esm/hooks/useLocalePublishStatus.js +7 -22
- package/dist/esm/hooks/useReleaseStatus.js +127 -0
- package/dist/esm/hooks/{useActiveReleaseLocalesStatuses.spec.js → useReleaseStatus.spec.js} +91 -99
- package/dist/esm/index.js +1 -2
- package/dist/esm/utils/sanitizeLocales.js +10 -0
- package/dist/types/ReleaseEntityStatusBadge/ReleaseEntityStatusLocalesList.d.ts +2 -2
- package/dist/types/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.d.ts +3 -3
- package/dist/types/ReleaseEntityStatusBadge/constants.d.ts +7 -0
- package/dist/types/hooks/useLocalePublishStatus.d.ts +4 -2
- package/dist/types/hooks/useReleaseStatus.d.ts +14 -0
- package/dist/types/index.d.ts +1 -2
- package/dist/types/types.d.ts +3 -3
- package/dist/types/utils/sanitizeLocales.d.ts +4 -0
- package/package.json +4 -4
- package/dist/cjs/hooks/useActiveReleaseLocalesStatuses.js +0 -112
- package/dist/cjs/utils/getPreviousReleaseEntity.js +0 -32
- package/dist/cjs/utils/parseReleaseParameters.js +0 -42
- package/dist/esm/hooks/useActiveReleaseLocalesStatuses.js +0 -102
- package/dist/esm/utils/getPreviousReleaseEntity.js +0 -22
- package/dist/esm/utils/parseReleaseParameters.js +0 -32
- package/dist/types/hooks/useActiveReleaseLocalesStatuses.d.ts +0 -14
- package/dist/types/utils/getPreviousReleaseEntity.d.ts +0 -12
- package/dist/types/utils/parseReleaseParameters.d.ts +0 -11
- /package/dist/types/hooks/{useActiveReleaseLocalesStatuses.spec.d.ts → useReleaseStatus.spec.d.ts} +0 -0
|
@@ -192,7 +192,7 @@ const determineBadgeStatus = (localesStatusMap, activeLocales)=>{
|
|
|
192
192
|
};
|
|
193
193
|
}
|
|
194
194
|
};
|
|
195
|
-
function ReleaseEntityStatusPopover({
|
|
195
|
+
function ReleaseEntityStatusPopover({ releaseStatusMap, activeLocales }) {
|
|
196
196
|
const [isOpen, setIsOpen] = (0, _react.useState)(false);
|
|
197
197
|
const timeoutRef = (0, _react.useRef)();
|
|
198
198
|
const onMouseEnter = (0, _react.useCallback)(()=>{
|
|
@@ -207,20 +207,11 @@ function ReleaseEntityStatusPopover({ releaseLocalesStatusMap, activeLocales, is
|
|
|
207
207
|
setIsOpen(false);
|
|
208
208
|
}, 300);
|
|
209
209
|
}, []);
|
|
210
|
-
const status = determineBadgeStatus(
|
|
210
|
+
const status = determineBadgeStatus(releaseStatusMap, activeLocales);
|
|
211
211
|
const ariaLabel = status.secondary ? 'Multiple statuses' : status.primary;
|
|
212
212
|
const wrapperClass = generateDynamicStyles(status);
|
|
213
|
-
if (isLoading) {
|
|
214
|
-
return /*#__PURE__*/ _react.default.createElement(_f36components.Skeleton.Container, {
|
|
215
|
-
className: styles.skeletonBadge
|
|
216
|
-
}, /*#__PURE__*/ _react.default.createElement(_f36components.Skeleton.Image, {
|
|
217
|
-
testId: `Release-entity-locale-status-badge-skeleton`,
|
|
218
|
-
width: "65px",
|
|
219
|
-
height: "20px"
|
|
220
|
-
}));
|
|
221
|
-
}
|
|
222
213
|
return /*#__PURE__*/ _react.default.createElement(_f36components.Popover, {
|
|
223
|
-
isOpen:
|
|
214
|
+
isOpen: releaseStatusMap && isOpen,
|
|
224
215
|
onClose: ()=>setIsOpen(false),
|
|
225
216
|
autoFocus: false,
|
|
226
217
|
placement: "bottom-end"
|
|
@@ -264,8 +255,8 @@ function ReleaseEntityStatusPopover({ releaseLocalesStatusMap, activeLocales, is
|
|
|
264
255
|
className: styles.popoverContent,
|
|
265
256
|
onMouseEnter: onMouseEnter,
|
|
266
257
|
onMouseLeave: onMouseLeave
|
|
267
|
-
}, !!
|
|
268
|
-
statusMap:
|
|
258
|
+
}, !!releaseStatusMap && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(_ReleaseEntityStatusLocalesList.ReleaseEntityStatusLocalesList, {
|
|
259
|
+
statusMap: releaseStatusMap,
|
|
269
260
|
activeLocales: activeLocales
|
|
270
261
|
}))));
|
|
271
262
|
}
|
|
@@ -22,6 +22,13 @@ const RELEASE_BADGES = {
|
|
|
22
22
|
hover: _f36tokens.default.green400,
|
|
23
23
|
icon: _f36tokens.default.green400
|
|
24
24
|
},
|
|
25
|
+
published: {
|
|
26
|
+
label: 'Published',
|
|
27
|
+
variant: 'positive',
|
|
28
|
+
default: _f36tokens.default.green300,
|
|
29
|
+
hover: _f36tokens.default.green400,
|
|
30
|
+
icon: _f36tokens.default.green400
|
|
31
|
+
},
|
|
25
32
|
becomesDraft: {
|
|
26
33
|
label: 'Becomes draft',
|
|
27
34
|
variant: 'warning',
|
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "useLocalePublishStatus", {
|
|
|
10
10
|
});
|
|
11
11
|
const _react = require("react");
|
|
12
12
|
const _entityHelpers = /*#__PURE__*/ _interop_require_wildcard(require("../utils/entityHelpers"));
|
|
13
|
+
const _sanitizeLocales = require("../utils/sanitizeLocales");
|
|
13
14
|
function _getRequireWildcardCache(nodeInterop) {
|
|
14
15
|
if (typeof WeakMap !== "function") return null;
|
|
15
16
|
var cacheBabelInterop = new WeakMap();
|
|
@@ -51,7 +52,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
51
52
|
}
|
|
52
53
|
return newObj;
|
|
53
54
|
}
|
|
54
|
-
function getLocalePublishStatusMap(entity,
|
|
55
|
+
function getLocalePublishStatusMap(entity, locales) {
|
|
55
56
|
const entityStatus = _entityHelpers.getEntityStatus(entity.sys);
|
|
56
57
|
if ([
|
|
57
58
|
'archived',
|
|
@@ -59,15 +60,11 @@ function getLocalePublishStatusMap(entity, localesApi) {
|
|
|
59
60
|
].includes(entityStatus)) {
|
|
60
61
|
return;
|
|
61
62
|
}
|
|
62
|
-
const statusMap = new Map(
|
|
63
|
-
|
|
63
|
+
const statusMap = new Map(locales.map((locale)=>[
|
|
64
|
+
locale.code,
|
|
64
65
|
{
|
|
65
|
-
status: _entityHelpers.getEntityStatus(entity.sys,
|
|
66
|
-
locale
|
|
67
|
-
code: localeCode,
|
|
68
|
-
default: localeCode === localesApi.default,
|
|
69
|
-
name: localesApi.names[localeCode]
|
|
70
|
-
}
|
|
66
|
+
status: _entityHelpers.getEntityStatus(entity.sys, locale.code),
|
|
67
|
+
locale
|
|
71
68
|
}
|
|
72
69
|
]));
|
|
73
70
|
return statusMap;
|
|
@@ -75,19 +72,7 @@ function getLocalePublishStatusMap(entity, localesApi) {
|
|
|
75
72
|
function useLocalePublishStatus(entity, locales) {
|
|
76
73
|
return (0, _react.useMemo)(()=>{
|
|
77
74
|
if (entity && locales) {
|
|
78
|
-
|
|
79
|
-
api.available.push(locale.code);
|
|
80
|
-
api.names[locale.code] = locale.name;
|
|
81
|
-
if (locale.default) {
|
|
82
|
-
api.default = locale.code;
|
|
83
|
-
}
|
|
84
|
-
return api;
|
|
85
|
-
}, {
|
|
86
|
-
available: [],
|
|
87
|
-
names: {},
|
|
88
|
-
default: ''
|
|
89
|
-
}) : locales;
|
|
90
|
-
return getLocalePublishStatusMap(entity, localesApi);
|
|
75
|
+
return getLocalePublishStatusMap(entity, locales ? (0, _sanitizeLocales.sanitizeLocales)(locales) : []);
|
|
91
76
|
}
|
|
92
77
|
return undefined;
|
|
93
78
|
}, [
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "useReleaseStatus", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return useReleaseStatus;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _react = require("react");
|
|
12
|
+
const _entityHelpers = require("../utils/entityHelpers");
|
|
13
|
+
const _sanitizeLocales = require("../utils/sanitizeLocales");
|
|
14
|
+
function createReleaseLocaleStatus(locale, status) {
|
|
15
|
+
switch(status){
|
|
16
|
+
case 'published':
|
|
17
|
+
return {
|
|
18
|
+
variant: 'positive',
|
|
19
|
+
status,
|
|
20
|
+
label: 'Published',
|
|
21
|
+
locale
|
|
22
|
+
};
|
|
23
|
+
case 'willPublish':
|
|
24
|
+
return {
|
|
25
|
+
variant: 'positive',
|
|
26
|
+
status: 'willPublish',
|
|
27
|
+
label: 'Will publish',
|
|
28
|
+
locale
|
|
29
|
+
};
|
|
30
|
+
case 'becomesDraft':
|
|
31
|
+
return {
|
|
32
|
+
variant: 'warning',
|
|
33
|
+
status: 'becomesDraft',
|
|
34
|
+
label: 'Becomes draft',
|
|
35
|
+
locale
|
|
36
|
+
};
|
|
37
|
+
case 'remainsDraft':
|
|
38
|
+
return {
|
|
39
|
+
variant: 'warning',
|
|
40
|
+
status: 'remainsDraft',
|
|
41
|
+
label: 'Remains draft',
|
|
42
|
+
locale
|
|
43
|
+
};
|
|
44
|
+
case 'notInRelease':
|
|
45
|
+
return {
|
|
46
|
+
variant: 'secondary',
|
|
47
|
+
status: 'notInRelease',
|
|
48
|
+
label: 'Not in release',
|
|
49
|
+
locale
|
|
50
|
+
};
|
|
51
|
+
default:
|
|
52
|
+
throw new Error(`Unknown release entity status: ${status}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function getReleaseItemLocaleStatus(releaseItem, locale, previousEntityOnTimeline) {
|
|
56
|
+
if ('action' in releaseItem) {
|
|
57
|
+
if (releaseItem.action === 'publish') {
|
|
58
|
+
return 'willPublish';
|
|
59
|
+
}
|
|
60
|
+
if (releaseItem.action === 'unpublish') {
|
|
61
|
+
const status = previousEntityOnTimeline ? (0, _entityHelpers.getEntityStatus)(previousEntityOnTimeline.sys) : 'draft';
|
|
62
|
+
return [
|
|
63
|
+
'published',
|
|
64
|
+
'changed'
|
|
65
|
+
].includes(status) ? 'becomesDraft' : 'remainsDraft';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const addedLocales = releaseItem.add?.fields['*'] || [];
|
|
69
|
+
const removedLocales = releaseItem.remove?.fields['*'] || [];
|
|
70
|
+
if (addedLocales.includes(locale.code)) {
|
|
71
|
+
return 'willPublish';
|
|
72
|
+
}
|
|
73
|
+
if (removedLocales.includes(locale.code)) {
|
|
74
|
+
const status = previousEntityOnTimeline ? (0, _entityHelpers.getEntityStatus)(previousEntityOnTimeline.sys, locale.code) : 'draft';
|
|
75
|
+
return [
|
|
76
|
+
'published',
|
|
77
|
+
'changed'
|
|
78
|
+
].includes(status) ? 'becomesDraft' : 'remainsDraft';
|
|
79
|
+
}
|
|
80
|
+
return 'remainsDraft';
|
|
81
|
+
}
|
|
82
|
+
function useReleaseStatus({ entity, release, locales, previousEntityOnTimeline }) {
|
|
83
|
+
const sanitizedLocales = (0, _react.useMemo)(()=>(0, _sanitizeLocales.sanitizeLocales)(locales), [
|
|
84
|
+
locales
|
|
85
|
+
]);
|
|
86
|
+
const releaseStatusMap = (0, _react.useMemo)(()=>{
|
|
87
|
+
if (!entity?.sys || !release || !('schemaVersion' in release.sys) || release.sys.schemaVersion !== 'Release.v2') {
|
|
88
|
+
return new Map();
|
|
89
|
+
}
|
|
90
|
+
const releaseItem = release.entities.items.find((e)=>e.entity.sys.linkType === entity.sys.type && e.entity.sys.id === entity.sys.id);
|
|
91
|
+
if (!releaseItem) {
|
|
92
|
+
return new Map(sanitizedLocales.map((locale)=>{
|
|
93
|
+
if ([
|
|
94
|
+
'published',
|
|
95
|
+
'changed'
|
|
96
|
+
].includes((0, _entityHelpers.getEntityStatus)(entity.sys, locale.code))) {
|
|
97
|
+
return [
|
|
98
|
+
locale.code,
|
|
99
|
+
createReleaseLocaleStatus(locale, 'published')
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
return [
|
|
103
|
+
locale.code,
|
|
104
|
+
createReleaseLocaleStatus(locale, 'notInRelease')
|
|
105
|
+
];
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
return new Map(sanitizedLocales.map((locale)=>[
|
|
109
|
+
locale.code,
|
|
110
|
+
createReleaseLocaleStatus(locale, getReleaseItemLocaleStatus(releaseItem, locale, previousEntityOnTimeline))
|
|
111
|
+
]));
|
|
112
|
+
}, [
|
|
113
|
+
entity?.sys,
|
|
114
|
+
previousEntityOnTimeline,
|
|
115
|
+
release,
|
|
116
|
+
sanitizedLocales
|
|
117
|
+
]);
|
|
118
|
+
const releaseAction = (0, _react.useMemo)(()=>{
|
|
119
|
+
if (releaseStatusMap.size === 0) {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
const releaseArray = Array.from(releaseStatusMap.values());
|
|
123
|
+
if (releaseArray.find(({ status })=>status === 'willPublish')) {
|
|
124
|
+
return 'publish';
|
|
125
|
+
}
|
|
126
|
+
if (releaseArray.find(({ status })=>status === 'becomesDraft')) {
|
|
127
|
+
return 'unpublish';
|
|
128
|
+
}
|
|
129
|
+
return 'not-in-release';
|
|
130
|
+
}, [
|
|
131
|
+
releaseStatusMap
|
|
132
|
+
]);
|
|
133
|
+
return {
|
|
134
|
+
releaseStatusMap,
|
|
135
|
+
releaseAction
|
|
136
|
+
};
|
|
137
|
+
}
|
|
@@ -3,8 +3,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
5
|
const _react = require("@testing-library/react");
|
|
6
|
-
const
|
|
7
|
-
const _useActiveReleaseLocalesStatuses = require("./useActiveReleaseLocalesStatuses");
|
|
6
|
+
const _useReleaseStatus = require("./useReleaseStatus");
|
|
8
7
|
const buildEntry = (status, id = 'entry-1')=>({
|
|
9
8
|
sys: {
|
|
10
9
|
id,
|
|
@@ -13,7 +12,9 @@ const buildEntry = (status, id = 'entry-1')=>({
|
|
|
13
12
|
'*': {
|
|
14
13
|
'en-US': status
|
|
15
14
|
}
|
|
16
|
-
}
|
|
15
|
+
},
|
|
16
|
+
version: 3,
|
|
17
|
+
publishedVersion: status === 'published' ? 2 : undefined
|
|
17
18
|
}
|
|
18
19
|
});
|
|
19
20
|
const buildAsset = (status, id = 'asset-1')=>({
|
|
@@ -24,7 +25,9 @@ const buildAsset = (status, id = 'asset-1')=>({
|
|
|
24
25
|
'*': {
|
|
25
26
|
'en-US': status
|
|
26
27
|
}
|
|
27
|
-
}
|
|
28
|
+
},
|
|
29
|
+
version: 3,
|
|
30
|
+
publishedVersion: status === 'published' ? 2 : undefined
|
|
28
31
|
}
|
|
29
32
|
});
|
|
30
33
|
const createEntryBasedReleaseEntity = ({ entityId = 'entry-1', action = 'publish', entityType = 'Entry' })=>({
|
|
@@ -87,51 +90,38 @@ const createLocaleBasedRelease = ({ entityId, verb, entityType = 'Entry' } = {})
|
|
|
87
90
|
]
|
|
88
91
|
}
|
|
89
92
|
});
|
|
90
|
-
jest.mock('../utils/getPreviousReleaseEntity', ()=>({
|
|
91
|
-
getPreviousReleaseEntity: jest.fn()
|
|
92
|
-
}));
|
|
93
93
|
const ENTITY_TYPES = [
|
|
94
94
|
'Entry',
|
|
95
95
|
'Asset'
|
|
96
96
|
];
|
|
97
|
-
describe('
|
|
97
|
+
describe('useReleaseStatus', ()=>{
|
|
98
98
|
beforeEach(()=>{
|
|
99
99
|
jest.clearAllMocks();
|
|
100
100
|
});
|
|
101
101
|
ENTITY_TYPES.forEach((entityType)=>{
|
|
102
102
|
const entityId = entityType === 'Entry' ? 'entry-1' : 'asset-1';
|
|
103
103
|
const baseParams = {
|
|
104
|
-
entityId,
|
|
105
|
-
entityType,
|
|
106
104
|
locales: [
|
|
107
105
|
{
|
|
108
106
|
code: 'en-US'
|
|
109
107
|
}
|
|
110
|
-
]
|
|
111
|
-
isActiveReleaseLoading: false,
|
|
112
|
-
releaseVersionMap: new Map(),
|
|
113
|
-
releases: {
|
|
114
|
-
items: []
|
|
115
|
-
}
|
|
108
|
+
]
|
|
116
109
|
};
|
|
110
|
+
function buildEntity(status) {
|
|
111
|
+
return entityType === 'Entry' ? buildEntry(status) : buildAsset(status);
|
|
112
|
+
}
|
|
117
113
|
describe(`${entityType} with entry based publishing`, ()=>{
|
|
118
114
|
it('returns Will publish status when active release has publish action', ()=>{
|
|
119
|
-
|
|
120
|
-
previousReleaseEntity: createEntryBasedReleaseEntity({
|
|
121
|
-
entityId,
|
|
122
|
-
action: 'unpublish',
|
|
123
|
-
entityType
|
|
124
|
-
})
|
|
125
|
-
});
|
|
126
|
-
const { result } = (0, _react.renderHook)(()=>(0, _useActiveReleaseLocalesStatuses.useActiveReleaseLocalesStatuses)({
|
|
115
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
127
116
|
...baseParams,
|
|
128
|
-
|
|
117
|
+
previousEntityOnTimeline: buildEntity('draft'),
|
|
118
|
+
release: createEntryBasedRelease({
|
|
129
119
|
entityId,
|
|
130
120
|
entityType
|
|
131
121
|
}),
|
|
132
|
-
|
|
122
|
+
entity: buildEntity('published')
|
|
133
123
|
}));
|
|
134
|
-
expect(result.current.
|
|
124
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
135
125
|
variant: 'positive',
|
|
136
126
|
status: 'willPublish',
|
|
137
127
|
label: 'Will publish',
|
|
@@ -141,23 +131,17 @@ describe('useActiveReleaseLocalesStatuses', ()=>{
|
|
|
141
131
|
});
|
|
142
132
|
});
|
|
143
133
|
it('returns Becomes draft status when previous version has published locales and active version has unpublish action', ()=>{
|
|
144
|
-
|
|
145
|
-
previousReleaseEntity: createEntryBasedReleaseEntity({
|
|
146
|
-
entityId,
|
|
147
|
-
action: 'publish',
|
|
148
|
-
entityType
|
|
149
|
-
})
|
|
150
|
-
});
|
|
151
|
-
const { result } = (0, _react.renderHook)(()=>(0, _useActiveReleaseLocalesStatuses.useActiveReleaseLocalesStatuses)({
|
|
134
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
152
135
|
...baseParams,
|
|
153
|
-
|
|
136
|
+
previousEntityOnTimeline: buildEntity('published'),
|
|
137
|
+
release: createEntryBasedRelease({
|
|
154
138
|
action: 'unpublish',
|
|
155
139
|
entityId,
|
|
156
140
|
entityType
|
|
157
141
|
}),
|
|
158
|
-
|
|
142
|
+
entity: buildEntity('draft')
|
|
159
143
|
}));
|
|
160
|
-
expect(result.current.
|
|
144
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
161
145
|
variant: 'warning',
|
|
162
146
|
status: 'becomesDraft',
|
|
163
147
|
label: 'Becomes draft',
|
|
@@ -167,24 +151,18 @@ describe('useActiveReleaseLocalesStatuses', ()=>{
|
|
|
167
151
|
});
|
|
168
152
|
});
|
|
169
153
|
it('returns Remains draft status when previous version has draft locales and active version has unpublish action', ()=>{
|
|
170
|
-
|
|
171
|
-
previousReleaseEntity: createEntryBasedReleaseEntity({
|
|
172
|
-
action: 'unpublish',
|
|
173
|
-
entityType,
|
|
174
|
-
entityId
|
|
175
|
-
})
|
|
176
|
-
});
|
|
177
|
-
const { result } = (0, _react.renderHook)(()=>(0, _useActiveReleaseLocalesStatuses.useActiveReleaseLocalesStatuses)({
|
|
154
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
178
155
|
...baseParams,
|
|
179
|
-
|
|
156
|
+
previousEntityOnTimeline: buildEntity('draft'),
|
|
157
|
+
release: createEntryBasedRelease({
|
|
180
158
|
action: 'unpublish',
|
|
181
159
|
entityId,
|
|
182
160
|
entityType
|
|
183
161
|
}),
|
|
184
|
-
|
|
162
|
+
entity: buildEntity('draft')
|
|
185
163
|
}));
|
|
186
|
-
expect(result.current.
|
|
187
|
-
variant: '
|
|
164
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
165
|
+
variant: 'warning',
|
|
188
166
|
status: 'remainsDraft',
|
|
189
167
|
label: 'Remains draft',
|
|
190
168
|
locale: {
|
|
@@ -193,19 +171,16 @@ describe('useActiveReleaseLocalesStatuses', ()=>{
|
|
|
193
171
|
});
|
|
194
172
|
});
|
|
195
173
|
it('returns Not in release status when entity is not in the release', ()=>{
|
|
196
|
-
|
|
197
|
-
previousReleaseEntity: undefined
|
|
198
|
-
});
|
|
199
|
-
const { result } = (0, _react.renderHook)(()=>(0, _useActiveReleaseLocalesStatuses.useActiveReleaseLocalesStatuses)({
|
|
174
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
200
175
|
...baseParams,
|
|
201
|
-
|
|
176
|
+
release: createEntryBasedRelease({
|
|
202
177
|
entityId: entityType === 'Entry' ? 'entry-2' : 'asset-2',
|
|
203
178
|
action: 'publish',
|
|
204
179
|
entityType
|
|
205
180
|
}),
|
|
206
|
-
|
|
181
|
+
entity: buildEntity('draft')
|
|
207
182
|
}));
|
|
208
|
-
expect(result.current.
|
|
183
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
209
184
|
variant: 'secondary',
|
|
210
185
|
status: 'notInRelease',
|
|
211
186
|
label: 'Not in release',
|
|
@@ -214,25 +189,38 @@ describe('useActiveReleaseLocalesStatuses', ()=>{
|
|
|
214
189
|
}
|
|
215
190
|
});
|
|
216
191
|
});
|
|
192
|
+
it('returns published when not in release but already published', ()=>{
|
|
193
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
194
|
+
...baseParams,
|
|
195
|
+
release: createEntryBasedRelease({
|
|
196
|
+
entityId: entityType === 'Entry' ? 'entry-2' : 'asset-2',
|
|
197
|
+
action: 'publish',
|
|
198
|
+
entityType
|
|
199
|
+
}),
|
|
200
|
+
entity: buildEntity('published')
|
|
201
|
+
}));
|
|
202
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
203
|
+
variant: 'positive',
|
|
204
|
+
status: 'published',
|
|
205
|
+
label: 'Published',
|
|
206
|
+
locale: {
|
|
207
|
+
code: 'en-US'
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
});
|
|
217
211
|
});
|
|
218
212
|
describe(`${entityType} with locale based publishing`, ()=>{
|
|
219
213
|
it('returns Will publish status when active release has publish action', ()=>{
|
|
220
|
-
|
|
221
|
-
previousReleaseEntity: createLocaleBasedReleaseEntity({
|
|
222
|
-
entityId,
|
|
223
|
-
verb: 'remove',
|
|
224
|
-
entityType
|
|
225
|
-
})
|
|
226
|
-
});
|
|
227
|
-
const { result } = (0, _react.renderHook)(()=>(0, _useActiveReleaseLocalesStatuses.useActiveReleaseLocalesStatuses)({
|
|
214
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
228
215
|
...baseParams,
|
|
229
|
-
|
|
216
|
+
previousEntityOnTimeline: buildEntity('draft'),
|
|
217
|
+
release: createLocaleBasedRelease({
|
|
230
218
|
entityId,
|
|
231
219
|
entityType
|
|
232
220
|
}),
|
|
233
|
-
|
|
221
|
+
entity: buildEntity('published')
|
|
234
222
|
}));
|
|
235
|
-
expect(result.current.
|
|
223
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
236
224
|
variant: 'positive',
|
|
237
225
|
status: 'willPublish',
|
|
238
226
|
label: 'Will publish',
|
|
@@ -242,23 +230,17 @@ describe('useActiveReleaseLocalesStatuses', ()=>{
|
|
|
242
230
|
});
|
|
243
231
|
});
|
|
244
232
|
it('returns Becomes draft status when previous version has published locales and active version has unpublish action', ()=>{
|
|
245
|
-
|
|
246
|
-
previousReleaseEntity: createLocaleBasedReleaseEntity({
|
|
247
|
-
entityId: 'entry-1',
|
|
248
|
-
verb: 'add',
|
|
249
|
-
entityType
|
|
250
|
-
})
|
|
251
|
-
});
|
|
252
|
-
const { result } = (0, _react.renderHook)(()=>(0, _useActiveReleaseLocalesStatuses.useActiveReleaseLocalesStatuses)({
|
|
233
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
253
234
|
...baseParams,
|
|
254
|
-
|
|
235
|
+
previousEntityOnTimeline: buildEntity('published'),
|
|
236
|
+
release: createLocaleBasedRelease({
|
|
255
237
|
verb: 'remove',
|
|
256
238
|
entityId,
|
|
257
239
|
entityType
|
|
258
240
|
}),
|
|
259
|
-
|
|
241
|
+
entity: buildEntity('draft')
|
|
260
242
|
}));
|
|
261
|
-
expect(result.current.
|
|
243
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
262
244
|
variant: 'warning',
|
|
263
245
|
status: 'becomesDraft',
|
|
264
246
|
label: 'Becomes draft',
|
|
@@ -268,24 +250,18 @@ describe('useActiveReleaseLocalesStatuses', ()=>{
|
|
|
268
250
|
});
|
|
269
251
|
});
|
|
270
252
|
it('returns Remains draft status when previous version has draft locales and active version has unpublish action', ()=>{
|
|
271
|
-
|
|
272
|
-
previousReleaseEntity: createLocaleBasedReleaseEntity({
|
|
273
|
-
verb: 'remove',
|
|
274
|
-
entityId,
|
|
275
|
-
entityType
|
|
276
|
-
})
|
|
277
|
-
});
|
|
278
|
-
const { result } = (0, _react.renderHook)(()=>(0, _useActiveReleaseLocalesStatuses.useActiveReleaseLocalesStatuses)({
|
|
253
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
279
254
|
...baseParams,
|
|
280
|
-
|
|
255
|
+
previousEntityOnTimeline: buildEntity('draft'),
|
|
256
|
+
release: createLocaleBasedRelease({
|
|
281
257
|
verb: 'remove',
|
|
282
258
|
entityId,
|
|
283
259
|
entityType
|
|
284
260
|
}),
|
|
285
|
-
|
|
261
|
+
entity: buildEntity('draft')
|
|
286
262
|
}));
|
|
287
|
-
expect(result.current.
|
|
288
|
-
variant: '
|
|
263
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
264
|
+
variant: 'warning',
|
|
289
265
|
status: 'remainsDraft',
|
|
290
266
|
label: 'Remains draft',
|
|
291
267
|
locale: {
|
|
@@ -293,20 +269,17 @@ describe('useActiveReleaseLocalesStatuses', ()=>{
|
|
|
293
269
|
}
|
|
294
270
|
});
|
|
295
271
|
});
|
|
296
|
-
it('returns Not in release status when entry is not in the release', ()=>{
|
|
297
|
-
|
|
298
|
-
previousReleaseEntity: undefined
|
|
299
|
-
});
|
|
300
|
-
const { result } = (0, _react.renderHook)(()=>(0, _useActiveReleaseLocalesStatuses.useActiveReleaseLocalesStatuses)({
|
|
272
|
+
it('returns Not in release status when entry is in draft state and not in the release', ()=>{
|
|
273
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
301
274
|
...baseParams,
|
|
302
|
-
|
|
275
|
+
release: createLocaleBasedRelease({
|
|
303
276
|
entityId: entityType === 'Entry' ? 'entry-2' : 'asset-2',
|
|
304
277
|
entityType,
|
|
305
278
|
verb: 'add'
|
|
306
279
|
}),
|
|
307
|
-
|
|
280
|
+
entity: buildEntity('draft')
|
|
308
281
|
}));
|
|
309
|
-
expect(result.current.
|
|
282
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
310
283
|
variant: 'secondary',
|
|
311
284
|
status: 'notInRelease',
|
|
312
285
|
label: 'Not in release',
|
|
@@ -315,6 +288,25 @@ describe('useActiveReleaseLocalesStatuses', ()=>{
|
|
|
315
288
|
}
|
|
316
289
|
});
|
|
317
290
|
});
|
|
291
|
+
it('returns published status when entry is in published state and not in the release', ()=>{
|
|
292
|
+
const { result } = (0, _react.renderHook)(()=>(0, _useReleaseStatus.useReleaseStatus)({
|
|
293
|
+
...baseParams,
|
|
294
|
+
release: createLocaleBasedRelease({
|
|
295
|
+
entityId: entityType === 'Entry' ? 'entry-2' : 'asset-2',
|
|
296
|
+
entityType,
|
|
297
|
+
verb: 'add'
|
|
298
|
+
}),
|
|
299
|
+
entity: buildEntity('published')
|
|
300
|
+
}));
|
|
301
|
+
expect(result.current.releaseStatusMap.get('en-US')).toEqual({
|
|
302
|
+
variant: 'positive',
|
|
303
|
+
status: 'published',
|
|
304
|
+
label: 'Published',
|
|
305
|
+
locale: {
|
|
306
|
+
code: 'en-US'
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
});
|
|
318
310
|
});
|
|
319
311
|
});
|
|
320
312
|
});
|
package/dist/cjs/index.js
CHANGED
|
@@ -106,13 +106,12 @@ const _isValidImage = require("./utils/isValidImage");
|
|
|
106
106
|
const _shortenStorageUnit = require("./utils/shortenStorageUnit");
|
|
107
107
|
_export_star(require("./types"), exports);
|
|
108
108
|
_export_star(require("./hooks/useActiveLocales"), exports);
|
|
109
|
-
_export_star(require("./hooks/
|
|
109
|
+
_export_star(require("./hooks/useReleaseStatus"), exports);
|
|
110
110
|
_export_star(require("./hooks/useLocalePublishStatus"), exports);
|
|
111
111
|
_export_star(require("./LocalePublishingEntityStatusBadge"), exports);
|
|
112
112
|
_export_star(require("./ReleaseEntityStatusBadge"), exports);
|
|
113
113
|
_export_star(require("./utils/determineReleaseAction"), exports);
|
|
114
114
|
_export_star(require("./utils/getEntityReleaseStatus"), exports);
|
|
115
|
-
_export_star(require("./utils/parseReleaseParameters"), exports);
|
|
116
115
|
function _export_star(from, to) {
|
|
117
116
|
Object.keys(from).forEach(function(k) {
|
|
118
117
|
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "sanitizeLocales", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return sanitizeLocales;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
function sanitizeLocales(locales) {
|
|
12
|
+
if (Array.isArray(locales)) {
|
|
13
|
+
return locales;
|
|
14
|
+
}
|
|
15
|
+
return locales.available.map((code)=>({
|
|
16
|
+
code,
|
|
17
|
+
default: code === locales.default,
|
|
18
|
+
name: locales.names[code]
|
|
19
|
+
}));
|
|
20
|
+
}
|