Move generating of group URLs into group.ts

Release-Notes: skip
Google-Bug-Id: b/244279450
Change-Id: If0948fcae14c80edd8a6b5a380ee5b303e48de88
diff --git a/polygerrit-ui/app/models/views/group.ts b/polygerrit-ui/app/models/views/group.ts
index 50a5229..bac8eb5 100644
--- a/polygerrit-ui/app/models/views/group.ts
+++ b/polygerrit-ui/app/models/views/group.ts
@@ -5,6 +5,7 @@
  */
 import {GerritView} from '../../services/router/router-model';
 import {GroupId} from '../../types/common';
+import {encodeURL, getBaseUrl} from '../../utils/url-util';
 import {Model} from '../model';
 import {ViewState} from './base';
 
@@ -15,16 +16,22 @@
 
 export interface GroupViewState extends ViewState {
   view: GerritView.GROUP;
+  groupId: GroupId;
   detail?: GroupDetailView;
-  groupId?: GroupId;
 }
 
-const DEFAULT_STATE: GroupViewState = {
-  view: GerritView.GROUP,
-};
+export function createGroupUrl(state: Omit<GroupViewState, 'view'>) {
+  let url = `/admin/groups/${encodeURL(`${state.groupId}`, true)}`;
+  if (state.detail === GroupDetailView.MEMBERS) {
+    url += ',members';
+  } else if (state.detail === GroupDetailView.LOG) {
+    url += ',audit-log';
+  }
+  return getBaseUrl() + url;
+}
 
-export class GroupViewModel extends Model<GroupViewState> {
+export class GroupViewModel extends Model<GroupViewState | undefined> {
   constructor() {
-    super(DEFAULT_STATE);
+    super(undefined);
   }
 }