    if (!has_work) {
      auto widget = new DestinationWidget(this);
      widget->unset(NAV_FAVORITE_LABEL_WORK);
      // TODO: refactor to remove this hack
      int index = !has_home || (current_destination && current_destination->isFavorite() && current_destination->label() == NAV_FAVORITE_LABEL_HOME) ? 0 : 1;
      destinations_layout->insertWidget(index, widget);
    }
  
    destinations_layout->addStretch();
  }
 
</s> remove   bool has_home = false, has_work = false;
  auto destinations = std::vector<std::unique_ptr<NavDestination>>();

  auto destinations_str = cur_destinations.trimmed();
  if (!destinations_str.isEmpty()) {
    QJsonDocument doc = QJsonDocument::fromJson(destinations_str.toUtf8());
    if (doc.isNull()) {
      qWarning() << "JSON Parse failed on navigation locations" << cur_destinations;
      return;
    }

    for (auto el : doc.array()) {
      auto destination = std::make_unique<NavDestination>(el.toObject());

      // add home and work later if they are missing
      if (destination->isFavorite()) {
        if (destination->label() == NAV_FAVORITE_LABEL_HOME) has_home = true;
        else if (destination->label() == NAV_FAVORITE_LABEL_WORK) has_work = true;
      }

      // skip current destination
      if (current_destination && *destination == *current_destination) continue;
      destinations.push_back(std::move(destination));
    }
  }

 </s> add   setUpdatesEnabled(false); </s> remove   // Sort: HOME, WORK, alphabetical FAVORITES, and then most recent (as returned by API)
  std::stable_sort(destinations.begin(), destinations.end(), [](const auto &a, const auto &b) {
    if (a->isFavorite() && b->isFavorite()) {
      if (a->label() == NAV_FAVORITE_LABEL_HOME) return true;
      else if (b->label() == NAV_FAVORITE_LABEL_HOME) return false;
      else if (a->label() == NAV_FAVORITE_LABEL_WORK) return true;
      else if (b->label() == NAV_FAVORITE_LABEL_WORK) return false;
      else return a->name() < b->name();
 </s> add   bool has_home = false, has_work = false;
  for (auto location : current_locations) {
    auto dest = location.toObject();
    if (dest["save_type"].toString() == NAV_TYPE_FAVORITE) {
      has_home = has_home || dest["label"].toString() == NAV_FAVORITE_LABEL_HOME;
      has_work = has_work || dest["label"].toString() == NAV_FAVORITE_LABEL_WORK; </s> remove     current_destination.reset(nullptr);
 </s> add     current_destination = {}; </s> remove     auto destination = std::make_unique<NavDestination>(doc.object());
    if (current_destination && *destination == *current_destination) return;
    current_destination = std::move(destination);
    current_widget->set(current_destination.get(), true);
 </s> add     current_destination = doc.object();
    current_widget->set(current_destination, true);
    int index = !has_home || (current_destination["save_type"] == NAV_TYPE_FAVORITE && current_destination["label"] == NAV_FAVORITE_LABEL_HOME) ? 0 : 1;
    if (!has_work) {
      auto widget = new DestinationWidget(this);
      widget->unset(NAV_FAVORITE_LABEL_WORK);
      // TODO: refactor to remove this hack
    int index = !has_home || (current_destination["save_type"] == NAV_TYPE_FAVORITE && current_destination["label"] == NAV_FAVORITE_LABEL_HOME) ? 0 : 1;
      destinations_layout->insertWidget(index, widget);
    }
  
    destinations_layout->addStretch();
  }
keep keep keep keep replace keep keep keep keep keep
 ui/MapSettings: sort location JsonArray inplace (#28886) 
selfdrive/ui/qt/maps/map_settings.cc