navigator 提供一个getState

This commit is contained in:
wkj 2023-12-01 09:57:56 +08:00
parent 0d60a47f49
commit 8742289ea5
20 changed files with 137 additions and 153 deletions

View File

@ -8,6 +8,10 @@ export declare class Navigator extends Feature {
getNamespace(): string;
urlParse(path: string): import("url").URL;
urlFormat(url: URL): string;
constructState(pathname: string, state?: Record<string, any>, search?: string): {
pathname: string;
oakFrom: string;
};
constructSearch(search?: string | null, state?: Record<string, any>): string;
constructUrl(url: string, state?: Record<string, any>, disableNamespace?: boolean): string;
constructNamespace(url: string, namespace?: string): string;

View File

@ -24,6 +24,16 @@ export class Navigator extends Feature {
const url2 = urlParse.toString();
return url2.replace(this.base, '');
}
constructState(pathname, state, search) {
// 构建search
const search2 = this.constructSearch(search, state);
const searchParams = new URLSearchParams(search2 || '');
const oakFrom = searchParams.get('oakFrom');
return {
pathname,
oakFrom,
};
}
constructSearch(search, state) {
const searchParams = new URLSearchParams(search || '');
if (state) {

View File

@ -12,7 +12,10 @@ export declare class Navigator extends CommonNavigator {
history: WechatMiniprogram.Wx;
constructor();
getLocation(): Location;
getCurrentUrl(needParams?: boolean): string;
getState(): {
pathname: string;
oakFrom: string;
};
getPathname(pathname: string, namespace?: string): string;
private getUrlAndProps;
navigateTo<ED extends EntityDict & BaseEntityDict, T2 extends keyof ED>(options: {

View File

@ -21,19 +21,10 @@ export class Navigator extends CommonNavigator {
key: `${pages.length - 1}`,
};
}
getCurrentUrl(needParams) {
getState() {
const { pathname, state } = this.getLocation();
if (!needParams) {
return pathname;
}
// 构建search
const search2 = this.constructSearch('', state);
const urlParse = this.urlParse(pathname);
urlParse.pathname = pathname;
urlParse.search = search2;
urlParse.searchParams.delete('oakFrom'); //把上层传入的oakFrom排除
const url = this.urlFormat(urlParse);
return url;
const state2 = this.constructState(pathname, state);
return state2;
}
getPathname(pathname, namespace) {
if (!/^\/{1}/.test(pathname)) {
@ -54,8 +45,10 @@ export class Navigator extends CommonNavigator {
}
getUrlAndProps(options, state, disableNamespace) {
const { url, ...rest } = options;
const oakFrom = this.getCurrentUrl();
const state2 = Object.assign({}, rest, state, { oakFrom });
const { pathname } = this.getLocation();
const state2 = Object.assign({}, rest, state, {
oakFrom: pathname,
});
const url2 = this.constructUrl(url, state2, disableNamespace);
return {
url: url2,

View File

@ -15,7 +15,10 @@ export declare class Navigator extends CommonNavigator {
pathname: string;
state: Readonly<object | undefined>;
};
getCurrentUrl(needParams?: boolean): string;
getState(): {
pathname: string;
oakFrom: string;
};
private getUrlAndProps;
navigateTo<ED extends EntityDict & BaseEntityDict, T2 extends keyof ED>(options: {
url: string;

View File

@ -21,25 +21,18 @@ export class Navigator extends CommonNavigator {
state: route.params,
};
}
getCurrentUrl(needParams) {
getState() {
const { pathname, state } = this.getLocation();
if (!needParams) {
return pathname;
}
// 构建search
const search2 = this.constructSearch('', state);
const urlParse = this.urlParse(pathname);
urlParse.pathname = pathname;
urlParse.search = search2;
urlParse.searchParams.delete('oakFrom'); //把上层传入的oakFrom排除
const url = this.urlFormat(urlParse);
return url;
const state2 = this.constructState(pathname, state);
return state2;
}
getUrlAndProps(options, state, disableNamespace) {
const { url, ...rest } = options;
const url2 = this.constructUrl(url, undefined, disableNamespace);
const oakFrom = this.getCurrentUrl();
const state2 = Object.assign({}, rest, state, { oakFrom });
const { pathname } = this.getLocation();
const state2 = Object.assign({}, rest, state, {
oakFrom: pathname,
});
return {
url: url2,
props: state2,

View File

@ -12,7 +12,10 @@ export declare class Navigator extends CommonNavigator {
*/
setHistory(history: BrowserHistory): void;
getLocation(): import("history").Location;
getCurrentUrl(needParams?: boolean): string;
getState(): {
pathname: string;
oakFrom: string;
};
private getUrlAndProps;
navigateTo<ED extends EntityDict & BaseEntityDict, T2 extends keyof ED>(options: {
url: string;

View File

@ -16,25 +16,18 @@ export class Navigator extends CommonNavigator {
getLocation() {
return this.history.location;
}
getCurrentUrl(needParams) {
const { pathname, search } = this.getLocation();
if (!needParams) {
return pathname;
}
// 构建search
const search2 = this.constructSearch(search);
const urlParse = this.urlParse(pathname);
urlParse.pathname = pathname;
urlParse.search = search2;
urlParse.searchParams.delete('oakFrom'); //把上层传入的oakFrom排除
const url = this.urlFormat(urlParse);
return url;
getState() {
const { pathname, state, search } = this.getLocation();
const state2 = this.constructState(pathname, state, search);
return state2;
}
getUrlAndProps(options, state, disableNamespace) {
const { url, ...rest } = options;
const url2 = this.constructUrl(url, rest, disableNamespace);
const oakFrom = this.getCurrentUrl();
const state2 = Object.assign({}, state, { oakFrom });
const { pathname } = this.getLocation();
const state2 = Object.assign({}, state, {
oakFrom: pathname,
});
return {
url: url2,
props: state2,

View File

@ -8,6 +8,10 @@ export declare class Navigator extends Feature {
getNamespace(): string;
urlParse(path: string): import("url").URL;
urlFormat(url: URL): string;
constructState(pathname: string, state?: Record<string, any>, search?: string): {
pathname: string;
oakFrom: string;
};
constructSearch(search?: string | null, state?: Record<string, any>): string;
constructUrl(url: string, state?: Record<string, any>, disableNamespace?: boolean): string;
constructNamespace(url: string, namespace?: string): string;

View File

@ -27,6 +27,16 @@ class Navigator extends Feature_1.Feature {
const url2 = urlParse.toString();
return url2.replace(this.base, '');
}
constructState(pathname, state, search) {
// 构建search
const search2 = this.constructSearch(search, state);
const searchParams = new url_1.urlSearchParams(search2 || '');
const oakFrom = searchParams.get('oakFrom');
return {
pathname,
oakFrom,
};
}
constructSearch(search, state) {
const searchParams = new url_1.urlSearchParams(search || '');
if (state) {

View File

@ -12,7 +12,10 @@ export declare class Navigator extends CommonNavigator {
history: WechatMiniprogram.Wx;
constructor();
getLocation(): Location;
getCurrentUrl(needParams?: boolean): string;
getState(): {
pathname: string;
oakFrom: string;
};
getPathname(pathname: string, namespace?: string): string;
private getUrlAndProps;
navigateTo<ED extends EntityDict & BaseEntityDict, T2 extends keyof ED>(options: {

View File

@ -24,19 +24,10 @@ class Navigator extends navigator_common_1.Navigator {
key: `${pages.length - 1}`,
};
}
getCurrentUrl(needParams) {
getState() {
const { pathname, state } = this.getLocation();
if (!needParams) {
return pathname;
}
// 构建search
const search2 = this.constructSearch('', state);
const urlParse = this.urlParse(pathname);
urlParse.pathname = pathname;
urlParse.search = search2;
urlParse.searchParams.delete('oakFrom'); //把上层传入的oakFrom排除
const url = this.urlFormat(urlParse);
return url;
const state2 = this.constructState(pathname, state);
return state2;
}
getPathname(pathname, namespace) {
if (!/^\/{1}/.test(pathname)) {
@ -57,8 +48,10 @@ class Navigator extends navigator_common_1.Navigator {
}
getUrlAndProps(options, state, disableNamespace) {
const { url, ...rest } = options;
const oakFrom = this.getCurrentUrl();
const state2 = Object.assign({}, rest, state, { oakFrom });
const { pathname } = this.getLocation();
const state2 = Object.assign({}, rest, state, {
oakFrom: pathname,
});
const url2 = this.constructUrl(url, state2, disableNamespace);
return {
url: url2,

View File

@ -15,7 +15,10 @@ export declare class Navigator extends CommonNavigator {
pathname: string;
state: Readonly<object | undefined>;
};
getCurrentUrl(needParams?: boolean): string;
getState(): {
pathname: string;
oakFrom: string;
};
private getUrlAndProps;
navigateTo<ED extends EntityDict & BaseEntityDict, T2 extends keyof ED>(options: {
url: string;

View File

@ -24,25 +24,18 @@ class Navigator extends navigator_common_1.Navigator {
state: route.params,
};
}
getCurrentUrl(needParams) {
getState() {
const { pathname, state } = this.getLocation();
if (!needParams) {
return pathname;
}
// 构建search
const search2 = this.constructSearch('', state);
const urlParse = this.urlParse(pathname);
urlParse.pathname = pathname;
urlParse.search = search2;
urlParse.searchParams.delete('oakFrom'); //把上层传入的oakFrom排除
const url = this.urlFormat(urlParse);
return url;
const state2 = this.constructState(pathname, state);
return state2;
}
getUrlAndProps(options, state, disableNamespace) {
const { url, ...rest } = options;
const url2 = this.constructUrl(url, undefined, disableNamespace);
const oakFrom = this.getCurrentUrl();
const state2 = Object.assign({}, rest, state, { oakFrom });
const { pathname } = this.getLocation();
const state2 = Object.assign({}, rest, state, {
oakFrom: pathname,
});
return {
url: url2,
props: state2,

View File

@ -12,7 +12,10 @@ export declare class Navigator extends CommonNavigator {
*/
setHistory(history: BrowserHistory): void;
getLocation(): import("history").Location;
getCurrentUrl(needParams?: boolean): string;
getState(): {
pathname: string;
oakFrom: string;
};
private getUrlAndProps;
navigateTo<ED extends EntityDict & BaseEntityDict, T2 extends keyof ED>(options: {
url: string;

View File

@ -19,25 +19,18 @@ class Navigator extends navigator_common_1.Navigator {
getLocation() {
return this.history.location;
}
getCurrentUrl(needParams) {
const { pathname, search } = this.getLocation();
if (!needParams) {
return pathname;
}
// 构建search
const search2 = this.constructSearch(search);
const urlParse = this.urlParse(pathname);
urlParse.pathname = pathname;
urlParse.search = search2;
urlParse.searchParams.delete('oakFrom'); //把上层传入的oakFrom排除
const url = this.urlFormat(urlParse);
return url;
getState() {
const { pathname, state, search } = this.getLocation();
const state2 = this.constructState(pathname, state, search);
return state2;
}
getUrlAndProps(options, state, disableNamespace) {
const { url, ...rest } = options;
const url2 = this.constructUrl(url, rest, disableNamespace);
const oakFrom = this.getCurrentUrl();
const state2 = Object.assign({}, state, { oakFrom });
const { pathname } = this.getLocation();
const state2 = Object.assign({}, state, {
oakFrom: pathname,
});
return {
url: url2,
props: state2,

View File

@ -1,7 +1,4 @@
import { Feature } from '../types/Feature';
import { OakNavigateToParameters } from '../types/Page';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { EntityDict } from 'oak-domain/lib/types';
import {
url as URL,
urlSearchParams as URLSearchParams,
@ -38,6 +35,21 @@ export class Navigator extends Feature {
return url2.replace(this.base, '');
}
constructState(
pathname: string,
state?: Record<string, any>,
search?: string
) {
// 构建search
const search2 = this.constructSearch(search, state);
const searchParams = new URLSearchParams(search2 || '');
const oakFrom = searchParams.get('oakFrom') as string;
return {
pathname,
oakFrom,
};
}
constructSearch(search?: string | null, state?: Record<string, any>) {
const searchParams = new URLSearchParams(search || '');
if (state) {

View File

@ -1,5 +1,4 @@
import { assert } from 'oak-domain/lib/utils/assert';
import { Feature } from '../types/Feature';
import { OakNavigateToParameters } from '../types/Page';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { EntityDict } from 'oak-domain/lib/types';
@ -35,20 +34,10 @@ export class Navigator extends CommonNavigator {
};
}
getCurrentUrl(needParams?: boolean) {
getState() {
const { pathname, state } = this.getLocation();
if (!needParams) {
return pathname;
}
// 构建search
const search2 = this.constructSearch('', state);
const urlParse = this.urlParse(pathname);
urlParse.pathname = pathname;
urlParse.search = search2;
urlParse.searchParams.delete('oakFrom'); //把上层传入的oakFrom排除
const url = this.urlFormat(urlParse);
return url;
const state2 = this.constructState(pathname, state);
return state2;
}
getPathname(pathname: string, namespace?: string) {
@ -80,11 +69,10 @@ export class Navigator extends CommonNavigator {
disableNamespace?: boolean
) {
const { url, ...rest } = options;
const oakFrom = this.getCurrentUrl();
const state2 = Object.assign({}, rest, state, { oakFrom }) as Record<
string,
any
>;
const { pathname } = this.getLocation();
const state2 = Object.assign({}, rest, state, {
oakFrom: pathname,
}) as Record<string, any>;
const url2 = this.constructUrl(url, state2, disableNamespace);
return {

View File

@ -1,5 +1,4 @@
import { Feature } from '../types/Feature';
import {
OakNavigateToParameters,
} from '../types/Page';
@ -42,20 +41,10 @@ export class Navigator extends CommonNavigator {
};
}
getCurrentUrl(needParams?: boolean) {
getState() {
const { pathname, state } = this.getLocation();
if (!needParams) {
return pathname;
}
// 构建search
const search2 = this.constructSearch('', state);
const urlParse = this.urlParse(pathname);
urlParse.pathname = pathname;
urlParse.search = search2;
urlParse.searchParams.delete('oakFrom'); //把上层传入的oakFrom排除
const url = this.urlFormat(urlParse);
return url;
const state2 = this.constructState(pathname, state);
return state2;
}
private getUrlAndProps<
@ -68,11 +57,10 @@ export class Navigator extends CommonNavigator {
) {
const { url, ...rest } = options;
const url2 = this.constructUrl(url, undefined, disableNamespace);
const oakFrom = this.getCurrentUrl();
const state2 = Object.assign({}, rest, state, { oakFrom }) as Record<
string,
any
>;
const { pathname } = this.getLocation();
const state2 = Object.assign({}, rest, state, {
oakFrom: pathname,
}) as Record<string, any>;
return {
url: url2,

View File

@ -1,5 +1,4 @@
import { createBrowserHistory, BrowserHistory } from 'history';
import { Feature } from '../types/Feature';
import {
OakNavigateToParameters,
} from '../types/Page';
@ -29,20 +28,14 @@ export class Navigator extends CommonNavigator {
return this.history.location;
}
getCurrentUrl(needParams?: boolean) {
const { pathname, search } = this.getLocation();
if (!needParams) {
return pathname;
}
// 构建search
const search2 = this.constructSearch(search);
const urlParse = this.urlParse(pathname);
urlParse.pathname = pathname;
urlParse.search = search2;
urlParse.searchParams.delete('oakFrom'); //把上层传入的oakFrom排除
const url = this.urlFormat(urlParse);
return url;
getState() {
const { pathname, state, search } = this.getLocation();
const state2 = this.constructState(
pathname,
state as Record<string, any>,
search
);
return state2;
}
private getUrlAndProps<
@ -55,11 +48,10 @@ export class Navigator extends CommonNavigator {
) {
const { url, ...rest } = options;
const url2 = this.constructUrl(url, rest, disableNamespace);
const oakFrom = this.getCurrentUrl();
const state2 = Object.assign({}, state, { oakFrom }) as Record<
string,
any
>;
const { pathname } = this.getLocation();
const state2 = Object.assign({}, state, {
oakFrom: pathname,
}) as Record<string, any>;
return {
url: url2,