diff --git a/resources/js/helpers/url.ts b/resources/js/helpers/url.ts index af77453..fffd915 100644 --- a/resources/js/helpers/url.ts +++ b/resources/js/helpers/url.ts @@ -5,27 +5,71 @@ export const urlStripAttributes = (url: string): string => { return urlObject.toString(); }; -export const urlMatches = (fullUrl: string, testPath: string): boolean => { +export const urlMatches = ( + fullUrl: string, + testPath: string | string[] +): boolean | number => { // Remove query string and fragment identifier from both URLs const urlWithoutParams = fullUrl.split(/[?#]/)[0]; - const pathWithoutParams = testPath.split(/[?#]/)[0]; - // Remove trailing slashes from both URLs - const trimmedUrl = urlWithoutParams.replace(/\/$/, ""); - const trimmedPath = pathWithoutParams.replace(/\/$/, ""); + if (Array.isArray(testPath)) { + // Iterate over the array of test paths and return the index of the first matching path + for (let i = 0; i < testPath.length; i++) { + const pathWithoutParams = testPath[i].split(/[?#]/)[0]; + // Remove trailing slashes from both URLs + const trimmedUrl = urlWithoutParams.replace(/\/$/, ""); + const trimmedPath = pathWithoutParams.replace(/\/$/, ""); + // Check if both URLs contain a domain and port + const hasDomainAndPort = + /^https?:\/\/[^/]+\//.test(trimmedUrl) && + /^https?:\/\/[^/]+\//.test(trimmedPath); - // Check if both URLs contain a domain and port - const hasDomainAndPort = - /^https?:\/\/[^/]+\//.test(trimmedUrl) && - /^https?:\/\/[^/]+\//.test(trimmedPath); - - if (hasDomainAndPort) { - // Do a full test with both URLs - return trimmedUrl === trimmedPath; + if (hasDomainAndPort) { + // Do a full test with both URLs + if (trimmedUrl === trimmedPath) { + return i; + } + } else { + // Remove the domain and test the paths + const urlWithoutDomain = trimmedUrl.replace( + /^https?:\/\/[^/]+/, + "" + ); + const pathWithoutDomain = trimmedPath.replace( + /^https?:\/\/[^/]+/, + "" + ); + if (urlWithoutDomain === pathWithoutDomain) { + return i; + } + } + } + // If no matching path is found, return false + return false; } else { - // Remove the domain and test the paths - const urlWithoutDomain = trimmedUrl.replace(/^https?:\/\/[^/]+/, ""); - const pathWithoutDomain = trimmedPath.replace(/^https?:\/\/[^/]+/, ""); - return urlWithoutDomain === pathWithoutDomain; + const pathWithoutParams = testPath.split(/[?#]/)[0]; + // Remove trailing slashes from both URLs + const trimmedUrl = urlWithoutParams.replace(/\/$/, ""); + const trimmedPath = pathWithoutParams.replace(/\/$/, ""); + // Check if both URLs contain a domain and port + const hasDomainAndPort = + /^https?:\/\/[^/]+\//.test(trimmedUrl) && + /^https?:\/\/[^/]+\//.test(trimmedPath); + + if (hasDomainAndPort) { + // Do a full test with both URLs + return trimmedUrl === trimmedPath; + } else { + // Remove the domain and test the paths + const urlWithoutDomain = trimmedUrl.replace( + /^https?:\/\/[^/]+/, + "" + ); + const pathWithoutDomain = trimmedPath.replace( + /^https?:\/\/[^/]+/, + "" + ); + return urlWithoutDomain === pathWithoutDomain; + } } };