Skip to content

Commit 13c7d7b

Browse files
committed
fix(content-explorer): Fix flaky SubheaderV2 folder title
1 parent b68cd70 commit 13c7d7b

File tree

3 files changed

+31
-25
lines changed

3 files changed

+31
-25
lines changed

src/elements/content-explorer/ContentExplorer.tsx

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
338338
* @return {void}
339339
*/
340340
componentDidMount() {
341-
const { currentFolderId, defaultView, metadataQuery }: ContentExplorerProps = this.props;
341+
const { currentFolderId, defaultView }: ContentExplorerProps = this.props;
342342
this.rootElement = document.getElementById(this.id) as HTMLElement;
343343
this.appElement = this.rootElement.firstElementChild as HTMLElement;
344344

@@ -348,7 +348,6 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
348348
break;
349349
case DEFAULT_VIEW_METADATA:
350350
this.showMetadataQueryResults();
351-
this.fetchFolderName(metadataQuery?.ancestor_folder_id);
352351
break;
353352
default:
354353
this.fetchFolder(currentFolderId);
@@ -390,20 +389,40 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
390389
metadataTemplate: MetadataTemplate,
391390
): void => {
392391
const { nextMarker } = metadataQueryCollection;
392+
const { metadataQuery, features } = this.props;
393393
const { currentCollection, currentPageNumber, markers }: State = this.state;
394394
const cloneMarkers = [...markers];
395395
if (nextMarker) {
396396
cloneMarkers[currentPageNumber + 1] = nextMarker;
397397
}
398-
this.setState({
398+
399+
const nextState = {
399400
currentCollection: {
400401
...currentCollection,
401402
...metadataQueryCollection,
402403
percentLoaded: 100,
403404
},
404405
markers: cloneMarkers,
405406
metadataTemplate,
406-
});
407+
};
408+
409+
// if v2, fetch folder name and add to state
410+
if (metadataQuery?.ancestor_folder_id && isFeatureEnabled(features, 'contentExplorer.metadataViewV2')) {
411+
this.api.getFolderAPI().getFolderFields(
412+
metadataQuery.ancestor_folder_id,
413+
({ name }) => {
414+
this.setState({
415+
...nextState,
416+
rootName: name || '',
417+
});
418+
},
419+
this.errorCallback,
420+
{ fields: [FIELD_NAME] },
421+
);
422+
} else {
423+
// No folder name to fetch, update state immediately with just metadata
424+
this.setState(nextState);
425+
}
407426
};
408427

409428
/**
@@ -1628,27 +1647,6 @@ class ContentExplorer extends Component<ContentExplorerProps, State> {
16281647
this.setState({ selectedItemIds: new Set() });
16291648
};
16301649

1631-
/**
1632-
* Fetches the folder name and stores it in state rootName if successful
1633-
*
1634-
* @private
1635-
* @return {void}
1636-
*/
1637-
fetchFolderName = (folderId?: string) => {
1638-
if (!folderId) {
1639-
return;
1640-
}
1641-
1642-
this.api.getFolderAPI(false).getFolderFields(
1643-
folderId,
1644-
({ name }) => {
1645-
this.setState({ rootName: name });
1646-
},
1647-
this.errorCallback,
1648-
{ fields: [FIELD_NAME] },
1649-
);
1650-
};
1651-
16521650
/**
16531651
* Renders the file picker
16541652
*

src/elements/content-explorer/stories/MetadataView.stories.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type { Meta, StoryObj } from '@storybook/react';
55
import ContentExplorer from '../ContentExplorer';
66
import { DEFAULT_HOSTNAME_API } from '../../../constants';
77
import { mockMetadata, mockSchema } from '../../common/__mocks__/mockMetadata';
8+
import { mockRootFolder } from '../../common/__mocks__/mockRootFolder';
89

910
const EID = '0';
1011
const templateName = 'templateName';
@@ -120,6 +121,9 @@ const meta: Meta<typeof ContentExplorer> = {
120121
http.get(`${DEFAULT_HOSTNAME_API}/2.0/metadata_templates/enterprise/templateName/schema`, () => {
121122
return HttpResponse.json(mockSchema);
122123
}),
124+
http.get(`${DEFAULT_HOSTNAME_API}/2.0/folders/:id`, () => {
125+
return HttpResponse.json(mockRootFolder);
126+
}),
123127
],
124128
},
125129
},

src/elements/content-explorer/stories/tests/MetadataView-visual.stories.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import noop from 'lodash/noop';
88
import ContentExplorer from '../../ContentExplorer';
99
import { DEFAULT_HOSTNAME_API } from '../../../../constants';
1010
import { mockMetadata, mockSchema } from '../../../common/__mocks__/mockMetadata';
11+
import { mockRootFolder } from '../../../common/__mocks__/mockRootFolder';
1112

1213
// The intent behind relying on mockMetadata is to allow a developer to paste in their own metadata template schema for use with live API calls.
1314
const { scope: templateScope, templateKey } = mockSchema;
@@ -180,6 +181,9 @@ const meta: Meta<typeof ContentExplorer> = {
180181
http.get(`${DEFAULT_HOSTNAME_API}/2.0/metadata_templates/enterprise/templateName/schema`, () => {
181182
return HttpResponse.json(mockSchema);
182183
}),
184+
http.get(`${DEFAULT_HOSTNAME_API}/2.0/folders/:id`, () => {
185+
return HttpResponse.json(mockRootFolder);
186+
}),
183187
],
184188
},
185189
},

0 commit comments

Comments
 (0)