Skip to content

Commit

Permalink
feat(router): requestRouteHref
Browse files Browse the repository at this point in the history
  • Loading branch information
AliMD committed Mar 4, 2022
1 parent 6a41e31 commit 9341f3f
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
29 changes: 27 additions & 2 deletions package/router/src/router.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {vatrRegisteredList} from '@vatr/logger';
import {hasSignalDispatchedBefore, requestSignal, setSignalProvider} from '@vatr/signal';
import {joinParameterList, log, _routeSignalProvider} from './core';
import {clickTrigger} from './trigger-click';
import {popstateTrigger} from './trigger-popstate';
import {log, _routeSignalProvider} from './core';
import type {InitOptions} from './type';
import type {InitOptions, RequestRouteHrefOptions} from './type';

vatrRegisteredList.push({
name: '@vatr/router',
Expand All @@ -27,3 +27,28 @@ export function initialRouter(options?: InitOptions) {
}
}

/**
* Make anchor valid href from route options.
*
* @example <a href=${requestRouteHref({section: 'article'})}>
*/
export function requestRouteHref(requestRoute: RequestRouteHrefOptions): string {
let href = '/';

if (requestRoute.sectionList?.length > 0) {
href += requestRoute.sectionList.join('/');
}

if (requestRoute.queryParamList != null) {
href += '?' + joinParameterList(requestRoute.queryParamList);
}

if (requestRoute.hash) { // != null && !== ''
if (requestRoute.hash.startsWith('#')) {
requestRoute.hash = requestRoute.hash.substring(1); // remove first `#`
}
href += '#' + requestRoute.hash;
}

return href;
}
10 changes: 10 additions & 0 deletions package/router/src/type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,13 @@ export interface InitOptions {
*/
popstateTrigger?: boolean;
}

/**
* requestRouteHref options
*/
export interface RequestRouteHrefOptions {
sectionList: Array<string>;
queryParamList?: Record<string, string | number | boolean>;
hash?: string;
}

0 comments on commit 9341f3f

Please sign in to comment.