hunk.code_window:     await test.step("Can disband team", async () => {
         await page.locator("text=Delete Team").click();
         await page.locator("text=Yes, disband team").click();
         await page.waitForURL("/teams");
         await expect(page.locator('[data-testid="empty-screen"]')).toBeVisible();
       });
     });
   });
hunk.labels: keep keep keep keep keep replace keep keep keep
hunk.after_edit:       await expect(await page.locator(`text=${user.username}'s Team`).count()).toEqual(0);
         // FLAKY: If other tests are running async this may mean there are >0 teams, empty screen will not be shown.
         // await expect(page.locator('[data-testid="empty-screen"]')).toBeVisible();
  
hunk.file_path: apps/web/playwright/teams.e2e.ts
hunk.type: replace
file: export function deriveAppDictKeyFromType(appType: string, dict: Record<string, unknown>) {
    let handlers = dict[appType];
  
    if (handlers) {
      return appType;
    }
  
    // Transforms zoom_video to zoom
    // Apps creates through cli would also meet this condition as their type would always be in the format {slug}_{category} and app dir name would be {slug}
    const appTypeVariant1 = appType.substring(0, appType.lastIndexOf("_"));
    handlers = dict[appTypeVariant1];
    if (handlers) {
      return appTypeVariant1;
    }
  
    // Transform `zoom_video` to `zoomvideo`;
    const appTypeVariant2 =
      appType.substring(0, appType.lastIndexOf("_")) + appType.substring(appType.lastIndexOf("_") + 1);
    handlers = dict[appTypeVariant2];
    if (handlers) {
      return appTypeVariant2;
    }
  
    // Transform as last resort removing all underscores, applies to `hubspot_other_calendar` to be `hubsporothercalendar`
    // and `closecom_other_calendar` to be `closecomothercalendar`
    const appTypeVariant3 = appType.replace(/_/g, "");
    handlers = dict[appTypeVariant3];
    if (handlers) {
      return appTypeVariant3;
    }
  
    return appType;
  
    // const categories = ["video", "other", "calendar", "web3", "payment", "messaging"];
  
    // // Instead of doing a blind split at _ and using the first part, apply this hack only on strings that match legacy type.
    // // Transform zoomvideo to zoom
    // categories.some((type) => {
    //   const matcher = new RegExp(`(.+)${type}$`);
    //   if (appType.match(matcher)) {
    //     appType = appType.replace(matcher, "$1");
    //     return true;
    //   }
    //   return appType;
    // });
  }
  