@contentful/field-editor-shared 2.12.3 → 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.
Files changed (33) hide show
  1. package/dist/cjs/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.js +5 -14
  2. package/dist/cjs/ReleaseEntityStatusBadge/constants.js +7 -0
  3. package/dist/cjs/hooks/useLocalePublishStatus.js +7 -22
  4. package/dist/cjs/hooks/useReleaseStatus.js +137 -0
  5. package/dist/cjs/hooks/{useActiveReleaseLocalesStatuses.spec.js → useReleaseStatus.spec.js} +91 -99
  6. package/dist/cjs/index.js +1 -2
  7. package/dist/cjs/utils/sanitizeLocales.js +20 -0
  8. package/dist/esm/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.js +6 -15
  9. package/dist/esm/ReleaseEntityStatusBadge/constants.js +7 -0
  10. package/dist/esm/hooks/useLocalePublishStatus.js +7 -22
  11. package/dist/esm/hooks/useReleaseStatus.js +127 -0
  12. package/dist/esm/hooks/{useActiveReleaseLocalesStatuses.spec.js → useReleaseStatus.spec.js} +91 -99
  13. package/dist/esm/index.js +1 -2
  14. package/dist/esm/utils/sanitizeLocales.js +10 -0
  15. package/dist/types/ReleaseEntityStatusBadge/ReleaseEntityStatusLocalesList.d.ts +2 -2
  16. package/dist/types/ReleaseEntityStatusBadge/ReleaseEntityStatusPopover.d.ts +3 -3
  17. package/dist/types/ReleaseEntityStatusBadge/constants.d.ts +7 -0
  18. package/dist/types/hooks/useLocalePublishStatus.d.ts +4 -2
  19. package/dist/types/hooks/useReleaseStatus.d.ts +14 -0
  20. package/dist/types/index.d.ts +1 -2
  21. package/dist/types/types.d.ts +3 -3
  22. package/dist/types/utils/sanitizeLocales.d.ts +4 -0
  23. package/package.json +3 -3
  24. package/dist/cjs/hooks/useActiveReleaseLocalesStatuses.js +0 -112
  25. package/dist/cjs/utils/getPreviousReleaseEntity.js +0 -32
  26. package/dist/cjs/utils/parseReleaseParameters.js +0 -42
  27. package/dist/esm/hooks/useActiveReleaseLocalesStatuses.js +0 -102
  28. package/dist/esm/utils/getPreviousReleaseEntity.js +0 -22
  29. package/dist/esm/utils/parseReleaseParameters.js +0 -32
  30. package/dist/types/hooks/useActiveReleaseLocalesStatuses.d.ts +0 -14
  31. package/dist/types/utils/getPreviousReleaseEntity.d.ts +0 -12
  32. package/dist/types/utils/parseReleaseParameters.d.ts +0 -11
  33. /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({ releaseLocalesStatusMap, activeLocales, isLoading = false }) {
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(releaseLocalesStatusMap, activeLocales);
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: releaseLocalesStatusMap && 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
- }, !!releaseLocalesStatusMap && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(_ReleaseEntityStatusLocalesList.ReleaseEntityStatusLocalesList, {
268
- statusMap: releaseLocalesStatusMap,
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, localesApi) {
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(localesApi.available.map((localeCode)=>[
63
- localeCode,
63
+ const statusMap = new Map(locales.map((locale)=>[
64
+ locale.code,
64
65
  {
65
- status: _entityHelpers.getEntityStatus(entity.sys, localeCode),
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
- const localesApi = Array.isArray(locales) ? locales.reduce((api, locale)=>{
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 _getPreviousReleaseEntity = require("../utils/getPreviousReleaseEntity");
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('useActiveReleaseLocalesStatuses', ()=>{
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
- _getPreviousReleaseEntity.getPreviousReleaseEntity.mockReturnValue({
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
- activeRelease: createEntryBasedRelease({
117
+ previousEntityOnTimeline: buildEntity('draft'),
118
+ release: createEntryBasedRelease({
129
119
  entityId,
130
120
  entityType
131
121
  }),
132
- currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
122
+ entity: buildEntity('published')
133
123
  }));
134
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
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
- _getPreviousReleaseEntity.getPreviousReleaseEntity.mockReturnValue({
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
- activeRelease: createEntryBasedRelease({
136
+ previousEntityOnTimeline: buildEntity('published'),
137
+ release: createEntryBasedRelease({
154
138
  action: 'unpublish',
155
139
  entityId,
156
140
  entityType
157
141
  }),
158
- currentEntityDraft: entityType === 'Entry' ? buildEntry('published') : buildAsset('published')
142
+ entity: buildEntity('draft')
159
143
  }));
160
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
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
- _getPreviousReleaseEntity.getPreviousReleaseEntity.mockReturnValue({
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
- activeRelease: createEntryBasedRelease({
156
+ previousEntityOnTimeline: buildEntity('draft'),
157
+ release: createEntryBasedRelease({
180
158
  action: 'unpublish',
181
159
  entityId,
182
160
  entityType
183
161
  }),
184
- currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
162
+ entity: buildEntity('draft')
185
163
  }));
186
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
187
- variant: 'secondary',
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
- _getPreviousReleaseEntity.getPreviousReleaseEntity.mockReturnValue({
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
- activeRelease: createEntryBasedRelease({
176
+ release: createEntryBasedRelease({
202
177
  entityId: entityType === 'Entry' ? 'entry-2' : 'asset-2',
203
178
  action: 'publish',
204
179
  entityType
205
180
  }),
206
- currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
181
+ entity: buildEntity('draft')
207
182
  }));
208
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
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
- _getPreviousReleaseEntity.getPreviousReleaseEntity.mockReturnValue({
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
- activeRelease: createLocaleBasedRelease({
216
+ previousEntityOnTimeline: buildEntity('draft'),
217
+ release: createLocaleBasedRelease({
230
218
  entityId,
231
219
  entityType
232
220
  }),
233
- currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
221
+ entity: buildEntity('published')
234
222
  }));
235
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
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
- _getPreviousReleaseEntity.getPreviousReleaseEntity.mockReturnValue({
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
- activeRelease: createLocaleBasedRelease({
235
+ previousEntityOnTimeline: buildEntity('published'),
236
+ release: createLocaleBasedRelease({
255
237
  verb: 'remove',
256
238
  entityId,
257
239
  entityType
258
240
  }),
259
- currentEntityDraft: entityType === 'Entry' ? buildEntry('published') : buildAsset('published')
241
+ entity: buildEntity('draft')
260
242
  }));
261
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
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
- _getPreviousReleaseEntity.getPreviousReleaseEntity.mockReturnValue({
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
- activeRelease: createLocaleBasedRelease({
255
+ previousEntityOnTimeline: buildEntity('draft'),
256
+ release: createLocaleBasedRelease({
281
257
  verb: 'remove',
282
258
  entityId,
283
259
  entityType
284
260
  }),
285
- currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
261
+ entity: buildEntity('draft')
286
262
  }));
287
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
288
- variant: 'secondary',
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
- _getPreviousReleaseEntity.getPreviousReleaseEntity.mockReturnValue({
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
- activeRelease: createLocaleBasedRelease({
275
+ release: createLocaleBasedRelease({
303
276
  entityId: entityType === 'Entry' ? 'entry-2' : 'asset-2',
304
277
  entityType,
305
278
  verb: 'add'
306
279
  }),
307
- currentEntityDraft: entityType === 'Entry' ? buildEntry('draft') : buildAsset('draft')
280
+ entity: buildEntity('draft')
308
281
  }));
309
- expect(result.current.releaseLocalesStatusMap.get('en-US')).toEqual({
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/useActiveReleaseLocalesStatuses"), exports);
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
+ }