{"id":6683,"date":"2022-09-06T10:40:51","date_gmt":"2022-09-06T09:40:51","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=6683"},"modified":"2022-09-06T10:42:14","modified_gmt":"2022-09-06T09:42:14","slug":"navigateto-with-urlbuilder","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/navigateto-with-urlbuilder\/","title":{"rendered":"NavigateTo with UrlBuilder"},"content":{"rendered":"\n<p>Extendable navigateTo function with auto-complete, without a large INavigator interface<br>Prevents a lot of &#8216;imports&#8217; and parameter replacing in components<\/p>\n\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"typescript\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">\r\nexport interface INavigator {\r\n    navigateTo(fn: (u: UrlBuilder) => string): void;\r\n    reload(): void;\r\n    navigateToUrl(url: string, params?: any): void;\r\n}\r\n\r\nexport class UrlBuilder {\r\n    home() { return AppRoutes.home }\r\n    purchaseContracts() { return AppRoutes.purchaseContracts }\r\n    stockList() { return AppRoutes.stockList }\r\n    planningList() { return AppRoutes.planningList }\r\n    planningDetail(id: string) { return replaceAppRoutesParams(AppRoutes.planningDetail, id); }\r\n    purchaseContractsEdit(id: string) { return replaceAppRoutesParams(AppRoutes.purchaseContractsEdit, id); }\r\n    tracingDetail(type: string, id: string) { return replaceAppRoutesParams(AppRoutes.tracingDetail, type, id); }\r\n    stockSortDetail(productId: string, purchaseContractLineId: string, stockType: string) { return replaceAppRoutesParams(AppRoutes.stockSortDetail, productId, purchaseContractLineId, stockType); }\r\n    purchaseContractLine(id: string) { return replaceAppRoutesParams(AppRoutes.purchaseContractLine, id); }\r\n}\r\n\r\nexport function replaceAppRoutesParams(route: AppRoutes, ...params: string[]) {\r\n    const path = String(route);\r\n    let i = 0;\r\n    const getParam = () => {\r\n        const param = params[i];\r\n        i += 1;\r\n        return param;\r\n    };\r\n    return path.replaceAll(\/(:[^\/]+)\/g, getParam);\r\n}\r\n\r\nexport enum AppRoutes {\r\n    home = \"\/home\",\r\n    purchaseContracts = \"\/purchase-contracts\",\r\n    stockList = \"\/stock\",\r\n    planningList = \"\/planning\",\r\n    planningDetail = \"\/planning\/:id\",\r\n    purchaseContractsEdit = \"\/purchase-contracts\/:id\",\r\n    tracingDetail = \"\/tracing\/:type\/:id\",\r\n    stockSortDetail = \"\/stock-sort\/:productId\/:purchaseContractLineId\/:stockType\",\r\n    purchaseContractLine = \"\/purchase-contract-line\/:id\"\r\n}\r\n\r\n\/\/ Usage:\r\nappDomain.INavigator.navigateTo(x => x.tracingDetail(TracingType.purchase, purchaseContract.id));\r\n\r\n\r\n<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Extendable navigateTo function with auto-complete, without a large INavigator interfacePrevents a lot of &#8216;imports&#8217; and parameter replacing in components<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-6683","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/6683","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=6683"}],"version-history":[{"count":2,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/6683\/revisions"}],"predecessor-version":[{"id":6685,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/6683\/revisions\/6685"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=6683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=6683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=6683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}