Skip to content

Commit c609439

Browse files
committed
fix(router): fix props not passed to openIn components
fixes #4215
1 parent 41def46 commit c609439

File tree

2 files changed

+43
-9
lines changed

2 files changed

+43
-9
lines changed

src/core/modules/clicks/clicks.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,12 @@ function initClicks(app) {
8080
view = $(clickedLinkData.view)[0].f7View;
8181
} else {
8282
view = $clickedEl.parents('.view')[0] && $clickedEl.parents('.view')[0].f7View;
83-
if (!$clickedLinkEl.hasClass('back') && view && view.params.linksView) {
83+
if (
84+
view &&
85+
view.params.linksView &&
86+
(!$clickedLinkEl.hasClass('back') ||
87+
($clickedLinkEl.hasClass('back') && view.router.history.length === 1))
88+
) {
8489
if (typeof view.params.linksView === 'string') view = $(view.params.linksView)[0].f7View;
8590
else if (view.params.linksView instanceof ViewClass) view = view.params.linksView;
8691
}

src/core/modules/router/component-loader.js

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,60 @@ export default {
1717
const params = {
1818
...options,
1919
};
20+
21+
const component = (props, ctx) => {
22+
const { $h, $onMounted, $el, $f7 } = ctx;
23+
$onMounted(() => {
24+
const viewEl = $el.value.find('.view');
25+
const view = $f7.view.create(viewEl, {
26+
linksView: router.view.selector,
27+
ignoreOpenIn: true,
28+
loadInitialPage: false,
29+
});
30+
view.router.navigate(url, { props: options.props, reloadAll: true });
31+
});
32+
// eslint-disable-next-line
33+
return () => {
34+
if (options.openIn === 'popup') {
35+
return $h`<div class="popup popup-router-open-in" data-url="${url}"><div class="view"></div></div>`;
36+
}
37+
if (options.openIn === 'loginScreen') {
38+
return $h`<div class="login-screen login-screen-router-open-in" data-url="${url}"><div class="view"></div></div>`;
39+
}
40+
if (options.openIn === 'sheet') {
41+
return $h`<div class="sheet-modal sheet-modal-router-open-in" data-url="${url}"><div class="sheet-modal-inner"><div class="view"></div></div></div>`;
42+
}
43+
if (options.openIn === 'popover') {
44+
return $h`<div class="popover popover-router-open-in" data-url="${url}"><div class="popover-inner"><div class="view"></div></div></div>`;
45+
}
46+
if (options.openIn.indexOf('panel') >= 0) {
47+
const parts = options.openIn.split(':');
48+
const side = parts[1] || 'left';
49+
const effect = parts[2] || 'cover';
50+
51+
return $h`<div class="panel panel-router-open-in panel-${side} panel-${effect}" data-url="${url}"><div class="view"></div></div>`;
52+
}
53+
};
54+
};
2055
if (options.openIn === 'popup') {
21-
params.content = `<div class="popup popup-router-open-in" data-url="${url}"><div class="view view-init" data-links-view="${router.view.selector}" data-url="${url}" data-ignore-open-in="true"></div></div>`;
2256
navigateOptions.route.popup = params;
2357
}
2458
if (options.openIn === 'loginScreen') {
25-
params.content = `<div class="login-screen login-screen-router-open-in" data-url="${url}"><div class="view view-init" data-links-view="${router.view.selector}" data-url="${url}" data-ignore-open-in="true"></div></div>`;
2659
navigateOptions.route.loginScreen = params;
2760
}
2861
if (options.openIn === 'sheet') {
29-
params.content = `<div class="sheet-modal sheet-modal-router-open-in" data-url="${url}"><div class="sheet-modal-inner"><div class="view view-init" data-links-view="${router.view.selector}" data-url="${url}" data-ignore-open-in="true"></div></div></div>`;
3062
navigateOptions.route.sheet = params;
3163
}
3264
if (options.openIn === 'popover') {
3365
params.targetEl = options.clickedEl || options.targetEl;
34-
params.content = `<div class="popover popover-router-open-in" data-url="${url}"><div class="popover-inner"><div class="view view-init" data-links-view="${router.view.selector}" data-url="${url}" data-ignore-open-in="true"></div></div></div>`;
3566
navigateOptions.route.popover = params;
3667
}
3768
if (options.openIn.indexOf('panel') >= 0) {
38-
const parts = options.openIn.split(':');
39-
const side = parts[1] || 'left';
40-
const effect = parts[2] || 'cover';
4169
params.targetEl = options.clickedEl || options.targetEl;
42-
params.content = `<div class="panel panel-router-open-in panel-${side} panel-${effect}" data-url="${url}"><div class="view view-init" data-links-view="${router.view.selector}" data-url="${url}" data-ignore-open-in="true"></div></div>`;
4370
navigateOptions.route.panel = params;
4471
}
72+
params.component = component;
73+
4574
return router.navigate(navigateOptions);
4675
},
4776
componentLoader(component, componentUrl, options = {}, resolve, reject) {

0 commit comments

Comments
 (0)