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 Mar 25, 2024
1 parent c32c323 commit 572f7c7
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,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 @@ -154,17 +154,34 @@ 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 = {};

// tslint:disable-next-line:no-self-assignment no-non-null-assertion no-dead-store
[, 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) => {
return (<Function>state.$$state)().url && (<Function>state.$$state)().url.exec(path, undefined, hash);
});
const matchedState: StateDeclaration[] = this.getStatesConfig().filter(
(state: StateDeclaration) => (<Function>state.$$state)().url && (<Function>state.$$state)().url.exec(path, undefined, hash)
);

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 572f7c7

Please sign in to comment.