Skip to content

Commit

Permalink
fix(stark-core): fix support for URL query parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
SuperITMan committed Jun 4, 2024
1 parent a1fb423 commit 5d07573
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,16 @@ describe("Service: StarkRoutingService", () => {
expect(stateDeclarations.state).toBe(statesConfig[1]);
expect(stateDeclarations.paramValues["#"]).toBe("some-hash");
});

it("should return the state of the requested url with a query parameter", () => {
const statesConfig: StateDeclaration[] = $state.get();
expect(statesConfig.length).toBe(numberOfMockStates);
const url: string = <string>statesConfig[1].url + "?test=test1";

const stateDeclarations: StarkStateConfigWithParams = <StarkStateConfigWithParams>routingService.getStateConfigByUrlPath(url);
expect(stateDeclarations.state).toBe(statesConfig[1]);
expect(stateDeclarations.paramValues["test"]).toBe("test1");
});
});

describe("getStateDeclarationByStateName", () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,22 @@ export class StarkRoutingServiceImpl implements StarkRoutingService {
public getStateConfigByUrlPath(urlPath: string): StarkStateConfigWithParams | undefined {
let targetRoute: StarkStateConfigWithParams | undefined;

// separate path from hash
const [, path = urlPath, hash]: string[] = urlPath.match(/(.*)#(.*)/) || [];
let path!: string;
let params: string | undefined;
let hash: string | undefined;
const paramValues: RawParams = {};

// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
[, path, params, hash, path = path, params = params, path = path, hash = hash, path = path] = urlPath.match(
/(.*)\?(.*)#(.*)|(.*)\?(.*)|(.*)#(.*)|(.*)/
)!;

if (typeof params === "string") {
params.split("&").forEach((param: string) => {
const keyValue = param.split("=");
paramValues[keyValue[0]] = keyValue[1];
});
}

const matchedState: StateDeclaration[] = this.getStatesConfig().filter(
(state: StateDeclaration) => (<Function>state.$$state)().url && (<Function>state.$$state)().url.exec(path, undefined, hash)
Expand All @@ -167,7 +181,10 @@ export class StarkRoutingServiceImpl implements StarkRoutingService {
if (matchedState.length) {
targetRoute = {
state: matchedState[0],
paramValues: (<Function>matchedState[0].$$state)().url.exec(path, undefined, hash)
paramValues: {
...(<Function>matchedState[0].$$state)().url.exec(path, undefined, hash),
...paramValues
}
};
}

Expand Down

0 comments on commit 5d07573

Please sign in to comment.