Skip to content

Commit 01077a0

Browse files
authored
Support availableLanguages key (#968)
Prefer `availableLanguages` over `availableLocales` when available. Resolves: rdar://149303906
1 parent bb4ae24 commit 01077a0

File tree

8 files changed

+143
-8
lines changed

8 files changed

+143
-8
lines changed

src/components/Article.vue

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,9 @@ export default {
167167
},
168168
},
169169
created() {
170-
AppStore.setAvailableLocales(this.metadata.availableLocales);
170+
AppStore.setAvailableLocales(
171+
this.metadata.availableLanguages ?? this.metadata.availableLocales,
172+
);
171173
this.store.reset();
172174
this.store.setReferences(this.references);
173175
},
@@ -177,7 +179,10 @@ export default {
177179
this.store.setReferences(references);
178180
},
179181
'metadata.availableLocales': function availableLocalesWatcher(availableLocales) {
180-
AppStore.setAvailableLocales(availableLocales);
182+
AppStore.setAvailableLocales(this.metadata?.availableLanguages ?? availableLocales);
183+
},
184+
'metadata.availableLanguages': function availableLanguagesWatcher(availableLanguages) {
185+
AppStore.setAvailableLocales(availableLanguages);
181186
},
182187
},
183188
SectionKind,

src/components/DocumentationTopic.vue

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,10 @@ export default {
404404
required: false,
405405
validator: v => Object.prototype.hasOwnProperty.call(StandardColors, v),
406406
},
407+
availableLanguages: {
408+
type: Array,
409+
required: false,
410+
},
407411
availableLocales: {
408412
type: Array,
409413
required: false,
@@ -624,6 +628,7 @@ export default {
624628
conformance,
625629
hasNoExpandedDocumentation,
626630
modules,
631+
availableLanguages,
627632
availableLocales,
628633
platforms,
629634
required: isRequirement = false,
@@ -666,6 +671,7 @@ export default {
666671
downloadNotAvailableSummary,
667672
diffAvailability,
668673
hasNoExpandedDocumentation,
674+
availableLanguages,
669675
availableLocales,
670676
hierarchy,
671677
role,
@@ -717,7 +723,7 @@ export default {
717723
});
718724
}
719725
720-
AppStore.setAvailableLocales(this.availableLocales || []);
726+
AppStore.setAvailableLocales(this.availableLanguages ?? this.availableLocales);
721727
this.store.reset();
722728
this.store.setReferences(this.references);
723729
},
@@ -729,8 +735,11 @@ export default {
729735
references(references) {
730736
this.store.setReferences(references);
731737
},
738+
availableLanguages(availableLanguages) {
739+
AppStore.setAvailableLocales(availableLanguages);
740+
},
732741
availableLocales(availableLocales) {
733-
AppStore.setAvailableLocales(availableLocales);
742+
AppStore.setAvailableLocales(this.availableLanguages ?? availableLocales);
734743
},
735744
},
736745
};

src/components/Tutorial.vue

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ export default {
135135
},
136136
},
137137
created() {
138-
AppStore.setAvailableLocales(this.metadata.availableLocales);
138+
AppStore.setAvailableLocales(
139+
this.metadata.availableLanguages ?? this.metadata.availableLocales,
140+
);
139141
this.store.reset();
140142
this.store.setReferences(this.references);
141143
},
@@ -145,7 +147,10 @@ export default {
145147
this.store.setReferences(references);
146148
},
147149
'metadata.availableLocales': function availableLocalesWatcher(availableLocales) {
148-
AppStore.setAvailableLocales(availableLocales);
150+
AppStore.setAvailableLocales(this.metadata?.availableLanguages ?? availableLocales);
151+
},
152+
'metadata.availableLanguages': function availableLanguagesWatcher(availableLanguages) {
153+
AppStore.setAvailableLocales(availableLanguages);
149154
},
150155
},
151156
mounted() {

src/components/TutorialsOverview.vue

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,9 @@ export default {
101101
};
102102
},
103103
created() {
104-
AppStore.setAvailableLocales(this.metadata.availableLocales);
104+
AppStore.setAvailableLocales(
105+
this.metadata.availableLanguages ?? this.metadata.availableLocales,
106+
);
105107
this.store.reset();
106108
this.store.setReferences(this.references);
107109
},
@@ -111,7 +113,10 @@ export default {
111113
this.store.setReferences(references);
112114
},
113115
'metadata.availableLocales': function availableLocalesWatcher(availableLocales) {
114-
AppStore.setAvailableLocales(availableLocales);
116+
AppStore.setAvailableLocales(this.metadata?.availableLanguages ?? availableLocales);
117+
},
118+
'metadata.availableLanguages': function availableLanguagesWatcher(availableLanguages) {
119+
AppStore.setAvailableLocales(availableLanguages);
115120
},
116121
},
117122
};

tests/unit/components/Article.spec.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import Hero from 'docc-render/components/Article/Hero.vue';
1717
import NavigationBar from 'docc-render/components/Tutorial/NavigationBar.vue';
1818
import TopicStore from 'docc-render/stores/TopicStore';
1919
import { PortalTarget } from 'portal-vue';
20+
import AppStore from 'docc-render/stores/AppStore';
2021

2122
const { SectionKind } = Article;
2223

@@ -199,6 +200,36 @@ describe('Article', () => {
199200
});
200201
expect(wrapper.text()).toContain('Above Hero Text');
201202
});
203+
204+
it('sets available langs/locales', async () => {
205+
const locales = ['en-US', 'ja-JP'];
206+
const langs = ['en', 'jp'];
207+
208+
await wrapper.setProps({
209+
metadata: {
210+
...propsData.metadata,
211+
availableLocales: locales,
212+
},
213+
});
214+
expect(AppStore.state.availableLocales).toEqual(locales);
215+
216+
await wrapper.setProps({
217+
metadata: {
218+
...propsData.metadata,
219+
availableLanguages: langs,
220+
},
221+
});
222+
expect(AppStore.state.availableLocales).toEqual(langs);
223+
224+
await wrapper.setProps({
225+
metadata: {
226+
...propsData.metadata,
227+
availableLanguages: langs,
228+
availableLocales: locales,
229+
},
230+
});
231+
expect(AppStore.state.availableLocales).toEqual(langs);
232+
});
202233
});
203234

204235
describe('with `isTargetIDE`', () => {

tests/unit/components/DocumentationTopic.spec.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import OnThisPageNav from '@/components/OnThisPageNav.vue';
2020
import OnThisPageStickyContainer
2121
from '@/components/DocumentationTopic/OnThisPageStickyContainer.vue';
2222
import Declaration from '@/components/DocumentationTopic/PrimaryContent/Declaration.vue';
23+
import AppStore from '@/stores/AppStore';
2324

2425
const { ON_THIS_PAGE_CONTAINER_BREAKPOINT } = DocumentationTopic.constants;
2526

@@ -1175,6 +1176,23 @@ describe('DocumentationTopic', () => {
11751176
expect(mockStore.setReferences).toHaveBeenCalledWith(newReferences);
11761177
});
11771178

1179+
it('sets available languages/locales', async () => {
1180+
const locales = ['en-US', 'ja-JP'];
1181+
const langs = ['en', 'jp'];
1182+
1183+
await wrapper.setProps({ availableLocales: locales });
1184+
expect(AppStore.state.availableLocales).toEqual(locales);
1185+
1186+
await wrapper.setProps({ availableLanguages: langs });
1187+
expect(AppStore.state.availableLocales).toEqual(langs);
1188+
1189+
await wrapper.setProps({
1190+
availableLanguages: langs,
1191+
availableLocales: locales,
1192+
});
1193+
expect(AppStore.state.availableLocales).toEqual(langs);
1194+
});
1195+
11781196
it('calls `store.updateReferences` when `indexState.includedArchiveIdentifiers` changes', async () => {
11791197
const store = {
11801198
state: { references: {} },

tests/unit/components/Tutorial.spec.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import Tutorial from 'docc-render/components/Tutorial.vue';
1515
import SectionList from 'docc-render/components/Tutorial/SectionList.vue';
1616
import NavigationBar from 'docc-render/components/Tutorial/NavigationBar.vue';
1717
import TopicStore from 'docc-render/stores/TopicStore';
18+
import AppStore from 'docc-render/stores/AppStore';
1819

1920
const { Section, BreakpointEmitter, PortalTarget } = Tutorial.components;
2021

@@ -239,6 +240,36 @@ describe('Tutorial', () => {
239240
expect(target.exists()).toBe(true);
240241
expect(target.props()).toHaveProperty('name', 'modal-destination');
241242
});
243+
244+
it('sets available langs/locales', async () => {
245+
const locales = ['en-US', 'ja-JP'];
246+
const langs = ['en', 'jp'];
247+
248+
await wrapper.setProps({
249+
metadata: {
250+
...propsData.metadata,
251+
availableLocales: locales,
252+
},
253+
});
254+
expect(AppStore.state.availableLocales).toEqual(locales);
255+
256+
await wrapper.setProps({
257+
metadata: {
258+
...propsData.metadata,
259+
availableLanguages: langs,
260+
},
261+
});
262+
expect(AppStore.state.availableLocales).toEqual(langs);
263+
264+
await wrapper.setProps({
265+
metadata: {
266+
...propsData.metadata,
267+
availableLanguages: langs,
268+
availableLocales: locales,
269+
},
270+
});
271+
expect(AppStore.state.availableLocales).toEqual(langs);
272+
});
242273
});
243274

244275
describe('Tutorial without hero section', () => {

tests/unit/components/TutorialsOverview.spec.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import { shallowMount } from '@vue/test-utils';
1212
import TutorialsOverview from 'docc-render/components/TutorialsOverview.vue';
13+
import AppStore from 'docc-render/stores/AppStore';
1314

1415
const {
1516
Hero,
@@ -118,4 +119,34 @@ describe('TutorialsOverview', () => {
118119
});
119120
expect(wrapper.text()).toContain('Above Hero Content');
120121
});
122+
123+
it('sets available langs/locales', async () => {
124+
const locales = ['en-US', 'ja-JP'];
125+
const langs = ['en', 'jp'];
126+
127+
await wrapper.setProps({
128+
metadata: {
129+
...propsData.metadata,
130+
availableLocales: locales,
131+
},
132+
});
133+
expect(AppStore.state.availableLocales).toEqual(locales);
134+
135+
await wrapper.setProps({
136+
metadata: {
137+
...propsData.metadata,
138+
availableLanguages: langs,
139+
},
140+
});
141+
expect(AppStore.state.availableLocales).toEqual(langs);
142+
143+
await wrapper.setProps({
144+
metadata: {
145+
...propsData.metadata,
146+
availableLanguages: langs,
147+
availableLocales: locales,
148+
},
149+
});
150+
expect(AppStore.state.availableLocales).toEqual(langs);
151+
});
121152
});

0 commit comments

Comments
 (0)