Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit aaf6411

Browse files
authored
Merge pull request #2415 from atom/blank-panels
Populate StubItem panes that are deserialized after package initialization
2 parents 1f9c0af + 01791d1 commit aaf6411

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

lib/atom/pane-item.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,37 @@ export default class PaneItem extends React.Component {
7171
}
7272

7373
componentDidMount() {
74+
// Listen for and adopt StubItems that are added after this component has
75+
// already been mounted.
76+
this.subs.add(this.props.workspace.onDidAddPaneItem(({item}) => {
77+
if (!item._getStub) {
78+
return;
79+
}
80+
const stub = item._getStub();
81+
82+
if (stub.getRealItem() !== null) {
83+
return;
84+
}
85+
86+
const match = this.state.uriPattern.matches(item.getURI());
87+
if (!match.ok()) {
88+
return;
89+
}
90+
91+
const openItem = new OpenItem(match, stub.getElement(), stub);
92+
openItem.hydrateStub({
93+
copy: () => this.copyOpenItem(openItem),
94+
});
95+
if (this.props.className) {
96+
openItem.addClassName(this.props.className);
97+
}
98+
this.registerCloseListener(item, openItem);
99+
100+
this.setState(prevState => ({
101+
currentlyOpen: [...prevState.currentlyOpen, openItem],
102+
}));
103+
}));
104+
74105
for (const openItem of this.state.currentlyOpen) {
75106
this.registerCloseListener(openItem.stubItem, openItem);
76107

test/atom/pane-item.test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,5 +309,19 @@ describe('PaneItem', function() {
309309

310310
assert.isTrue(stub.getElement().classList.contains('added'));
311311
});
312+
313+
it('adopts StubItems that are deserialized after the package has been initialized', function() {
314+
const wrapper = mount(
315+
<PaneItem workspace={workspace} uriPattern="atom-github://pattern/root/{id}">
316+
{({params, itemHolder}) => <Component ref={itemHolder.setter} text={params.id} />}
317+
</PaneItem>,
318+
);
319+
320+
const stub = StubItem.create('some-component', {title: 'Component'}, 'atom-github://pattern/root/45');
321+
workspace.getActivePane().addItem(stub);
322+
wrapper.update();
323+
324+
assert.isTrue(wrapper.exists('Component[text="45"]'));
325+
});
312326
});
313327
});

0 commit comments

Comments
 (0)